## Stata 15 help for fp

```
[R] fp -- Fractional polynomial regression

Syntax

Estimation

fp <term> [, est_options]:  est_cmd

est_cmd may be almost any estimation command that stores the
e(ll) result.  To confirm whether fp works with a specific
est_cmd, see the documentation for that est_cmd.

Instances of <term> (with the angle brackets) that occur within
est_cmd are replaced in est_cmd by a varlist containing the
fractional powers of the variable term.  These variables will be
named term_1, term_2, ....

fp performs est_cmd with this substitution, fitting a fractional
polynomial regression in term.

est_cmd in either this or the following syntax may not contain
other prefix commands; see prefix.

Estimation (alternate syntax)

fp <term>(varname) [, est_options]:  est_cmd

Use this syntax to specify that fractional powers of varname are
to be calculated.  The fractional polynomial power variables will
still be named term_1, term_2, ....

Replay estimation results

fp [, replay_options]

Create specified fractional polynomial power variables

fp generate [type] [newvar =] varname^(numlist) [if] [in] [,
gen_options]

est_options           Description
-------------------------------------------------------------------------
Main

Search
powers(# # ... #)    powers to be searched; default is powers(-2 -1 -.5
0 .5 1 2 3)
dimension(#)         maximum degree of fractional polynomial; default
is dimension(2)

Or specify
fp(# # ... #)        use specified fractional polynomial

And then specify any of these options

Options
classic              perform automatic scaling and centering and omit
comparison table
replace              replace existing fractional polynomial power
variables named term_1, term_2, ...
all                  generate term_1, term_2, ... in all observations;
default is in observations if esample()
scale(#_a #_b)       use (term+a)/b; default is to use variable term as
is
scale                specify a and b automatically
center(#_c)          report centered-on-c results; default is
uncentered results
center               specify c to be the mean of (scaled) term
zero                 set term_1, term_2, ... to zero if (scaled)
term<=0; default is to issue an error message
catzero              same as zero and include term_0=(term<=0) among
fractional polynomial power variables

Reporting
replay_options       specify how results are displayed
-------------------------------------------------------------------------

replay_options        Description
-------------------------------------------------------------------------
Reporting
nocompare            do not display model-comparison test results
reporting_options    any options allowed by est_cmd for replaying
estimation results
-------------------------------------------------------------------------

gen_options           Description
-------------------------------------------------------------------------
Main
replace              replace existing fractional polynomial power
variables named term_1, term_2, ...
scale(#_a #_b)       use (term+a)/b; default is to use variable term as
is
scale                specify a and b automatically
center(#_c)          report centered-on-c results; default is
uncentered results
center               specify c to be the mean of (scaled) term
zero                 set term_1, term_2, ... to zero if (scaled)
term<=0; default is to issue an error message
catzero              same as zero and include term_0=(term<=0) among
fractional polynomial power variables
-------------------------------------------------------------------------

fp

Statistics > Linear models and related > Fractional polynomials >
Fractional polynomial regression

fp generate

Statistics > Linear models and related > Fractional polynomials >
Create fractional polynomial variables

Description

fp <term>: est_cmd fits models with the "best"-fitting fractional
polynomial substituted for <term> wherever it appears in est_cmd.  fp
<weight>: regress mpg <weight> foreign would fit a regression model of
mpg on a fractional polynomial in weight and (linear) foreign.

By specifying option fp(), you may set the exact powers to be used.
Otherwise, a search through all possible fractional polynomials up to the
degree set by dimension() with powers set by powers() is performed.

fp without arguments redisplays the previous estimation results, just as
typing est_cmd would.  You can type either one.  fp will include a
fractional polynomial comparison table.

fp generate creates fractional polynomial power variables for a given set
of powers.  For instance, fp <weight>: regress mpg <weight> foreign might
produce the fractional polynomial weight^(-2 -1) and store the
weight^(-2) in weight_1 and weight^(-1) in weight_2.  Typing fp generate
weight^(-2 -1) would allow you to create the same variables in another
dataset.

See [R] mfp for multivariable fractional polynomial models.

Options for fp

+-------+
----+ Model +------------------------------------------------------------

powers(# # ... #) specifies that a search be performed and details about
the search provided.  powers() works with the dimension() option; see
below.  The default is powers(-2 -1 -.5 0 .5 1 2 3).

dimension(#) specifies the maximum degree of the fractional polynomial to
be searched.  The default is dimension(2).

If the defaults for both powers() and dimension() are used, then the
fractional polynomial could be any of the following 44 possibilities:

term^(-2)
term^(-1)
.
.
.
term^(3)
term^(-2), term^(-2)
term^(-2), term^(-1)
.
.
.
term^(-2), term^(3)
term^(-1), term^(-2)
.
.
.
term^(3), term^(3)

fp(# # ... #) specifies that no search be performed and that the
fractional polynomial specified be used.  fp() is an alternative to
powers() and dimension().

+---------+
----+ Options +----------------------------------------------------------

classic performs automatic scaling and centering and omits the comparison
table.  Specifying classic is equivalent to specifying scale, center,
and nocompare.

replace replaces existing fractional polynomial power variables named
term_1, term_2, ....

all specifies that term_1, term_2, ... be filled in for all observations
in the dataset rather than just for those in e(sample).

scale(#_a #_b) specifies that term be scaled in the way specified,
namely, that (term+a)/b be calculated.  All values of the scaled term
are required to be greater than zero unless you specify options zero
or catzero.  Values should not be too large or too close to zero,
because by default, cubic powers and squared reciprocal powers will
be considered.  When scale(a b) is specified, values in the variable
term are not modified; fp merely remembers to scale the values
whenever powers are calculated.

You will probably not use scale(a b) for values of a and b that you
create yourself, although you could.  It is usually easier just to
generate a scaled variable.  For instance, if term is age, and age in
your data is required to be greater than or equal to 20, you might
generate an age5 variable, for use as term:

. generate age5 = (age-19)/5

scale(a b) is useful when you previously fit a model using automatic
scaling (option scale) in one dataset and now want to create the
fractional polynomials in another.  In the first dataset, fp with
scale added notes to the dataset concerning the values of a and b.
You can see them by typing

. notes

You can then use fp generate, scale(a b) in the second dataset.

The default is to use term as it is used in calculating fractional
powers; thus term's values are required to be greater than zero
unless you specify options zero or catzero.  Values should not be too
large, because by default, cubic powers will be considered.

scale specifies that term be scaled to be greater than zero and not too
large in calculating fractional powers.  See Scaling under Remarks of
[R] fp for more details.  When scale is specified, values in the
variable term are not modified; fp merely remembers to scale the
values whenever powers are calculated.

center(#_c) reports results for the fractional polynomial in (scaled)
term, centered on c.  The default is to perform no centering.

term^(p_1, p_2, ..., p_m)-c^(p_1, p_2, ..., p_m) is reported.  This
makes the constant coefficient (intercept) easier to interpret.  See
Centering under Remarks of [R] fp for more details.

center performs center(c), where c is the mean of (scaled) term.

zero and catzero specify how nonpositive values of term are to be
handled.  By default, nonpositive values of term are not allowed,
because we will be calculating natural logarithms and fractional
powers of term.  Thus an error message is issued.

zero sets the fractional polynomial value to zero for nonpositive
values of (scaled) term.

catzero sets the fractional polynomial value to zero for nonpositive
values of (scaled) term and includes a dummy variable indicating
where nonpositive values of (scaled) term appear in the model.

+-----------+
----+ Reporting +--------------------------------------------------------

nocompare suppresses display of the comparison tests.

reporting_options are any options allowed by est_cmd for replaying
estimation results.

Options for fp generate

+------+
----+ Main +-------------------------------------------------------------

replace replaces existing fractional polynomial power variables named
term_1, term_2, ....

scale(#_a #_b) specifies that term be scaled in the way specified,
namely, that (term+a)/b be calculated.  All values of the scaled term
are required to be greater than zero unless you specify options zero
or catzero.  Values should not be too large or too close to zero,
because by default, cubic powers and squared reciprocal powers will
be considered.  When scale(a b) is specified, values in the variable
term are not modified; fp merely remembers to scale the values
whenever powers are calculated.

You will probably not use scale(a b) for values of a and b that you
create yourself, although you could.  It is usually easier just to
generate a scaled variable.  For instance, if term is age, and age in
your data is required to be greater than or equal to 20, you might
generate an age5 variable, for use as term:

. generate age5 = (age-19)/5

scale(a b) is useful when you previously fit a model using automatic
scaling (option scale) in one dataset and now want to create the
fractional polynomials in another.  In the first dataset, fp with
scale added notes to the dataset concerning the values of a and b.
You can see them by typing

. notes

You can then use fp generate, scale(a b) in the second dataset.

The default is to use term as it is used in calculating fractional
powers; thus term's values are required to be greater than zero
unless you specify options zero or catzero.  Values should not be too
large, because by default, cubic powers will be considered.

scale specifies that term be scaled to be greater than zero and not too
large in calculating fractional powers.  See Scaling under Remarks of
[R] fp for more details.  When scale is specified, values in variable
term are not modified; fp merely remembers to scale the values
whenever powers are calculated.

center(#_c) reports results for the fractional polynomial in (scaled)
term, centered on c.  The default is to perform no centering.

term^(p_1, ..., p_d)-c^(p_1, ..., p_d) is reported.  This makes the
constant coefficient (intercept) easier to interpret.  See Centering
under Remarks of [R] fp for more details.

center performs center(c), where c is the mean of (scaled) term.

zero and catzero specify how nonpositive values of term are to be
handled.  By default, nonpositive values of term are not allowed,
because we will be calculating natural logarithms and fractional
powers of term.  Thus an error message is issued.

zero sets the fractional polynomial value to zero for nonpositive
values of (scaled) term.

catzero sets the fractional polynomial value to zero for nonpositive
values of (scaled) term and includes a dummy variable indicating
where nonpositive values of (scaled) term appear in the model.

Examples

Setup
. webuse igg

Fit the optimal second-degree fractional polynomial regression model
. fp <age>: regress sqrtigg <age>

Generate a fractional polynomial power variable, using automatic scaling
and centering
. fp generate double age^(-2 2), center scale replace

Stored results

In addition to the results that est_cmd stores, fp stores the following
in e():

Scalars
e(fp_dimension)            degree of fractional polynomial
e(fp_center_mean)          value used for centering or .
e(fp_scale_a)              value used for scaling or .
e(fp_scale_b)              value used for scaling or .
e(fp_compare_df2)          denominator degree of freedom in F test

Macros
e(fp_cmd)                  fp, search(): or fp, powers():
e(fp_cmdline)              full fp command as typed
e(fp_variable)             fractional polynomial variable
e(fp_terms)                generated fp variables
e(fp_gen_cmdline)          fp generate command to re-create e(fp_terms)
variables
e(fp_catzero)              catzero, if specified
e(fp_zero)                 zero, if specified
e(fp_compare_type)         F or chi2

Matrices
e(fp_fp)                   powers used in fractional polynomial
e(fp_compare)              results of model comparisons
e(fp_compare_stat)         F test statistics
e(fp_compare_df1)          numerator degree of F test
e(fp_compare_fp)           powers of comparison models
e(fp_compare_length)       encoded string for display of row titles
e(fp_powers)               powers that are searched

fp generate stores the following in r():

Scalars
r(fp_center_mean)          value used for centering or .
r(fp_scale_a)              value used for scaling or .
r(fp_scale_b)              value used for scaling or .

Macros
r(fp_cmdline)              full fp generate command as typed
r(fp_variable)             fractional polynomial variable
r(fp_terms)                generated fp variables
r(fp_catzero)              catzero, if specified
r(fp_zero)                 zero, if specified

Matrices
r(fp_fp)                   powers used in fractional polynomial

```