| segmented {segmented} | R Documentation |
Fits regression models with segmented relationships between the response and one or more explanatory variables. Break-point estimates are provided.
segmented(obj, seg.Z, psi, control = seg.control(),
model.frame = TRUE, ...)
segmented.lm(obj, seg.Z, psi, control = seg.control(),
model.frame = TRUE, ...)
segmented.glm(obj, seg.Z, psi, control = seg.control(),
model.frame = TRUE, ...)
obj |
standard `linear' model of class "lm" or "glm". |
seg.Z |
a formula with no response variable, indicating the (continuous) explanatory variables having segmented relationships with the response |
psi |
named list of vectors. The names have to match the variables of the seg.Z argument.
Each vector includes starting values for the break-point(s) for the corresponding
variable in seg.Z |
control |
a list of parameters for controlling the fitting process.
See the documentation for seg.control for details. |
model.frame |
logical value indicating if the model.frame should be returned. |
... |
optional arguments. |
Given a linear regression model (of class "lm" or "glm"), segmented tries to estimate
a new model having broken-line relationships with the variables specified in seg.Z.
A segmented (or broken-line) relationship is defined by the slope
parameters and the break-points where the linear relation changes. The number of breakpoints
of each segmented relationship is fixed via the psi argument, where initial
values for the break-points must be specified. The model
is estimated simultaneously yielding point estimates and relevant approximate
standard errors of all the model parameters, including the break-points.
The returned object depends on the last component returned by seg.control.
If last=TRUE, the default, segmented returns an object of class "segmented" which inherits
from the class "lm" or "glm" depending on the class of obj. Otherwise a list is
returned, where the last component is the fitted model at the final iteration,
see seg.control.
An object of class "segmented" is a list containing the components of the
original object obj with additionally the followings:
psi |
estimated break-points and relevant (approximate) standard errors |
it |
number of iterations employed |
epsilon |
difference in the objective function when the algorithm stops |
mframe |
the model frame |
Other components are not of direct interest of the user.
It is well-known that the log-likelihood function for the
break-point may be not concave, especially
for poor clear-cut kink-relationships. In these circumstances the initial guess
for the break-point,
i.e. the psi argument, must be provided with care. For instance visual
inspection of a, possibly smoothed,
scatter-plot is usually a good way to obtain some idea on breakpoint location.
Moreover it is also advisable to look at the coefficients of the `gap' variables. At the
convergence they should be small or at least, non-significantly different from zero.
summary.segmented and print.summary.segmented return
information of the `gap' coefficients.
it.max argument returned by seg.control
is greater than zero. If it.max=0 segmented will estimate a new linear model with
break-point(s) fixed at the values reported in psi.
"segmented" are
print.segmented
summary.segmented
print.summary.segmented
Others are inherited from the class "lm" or "glm" depending on the
class of obj.
Vito M. R. Muggeo, vmuggeo@dssm.unipa.it
Muggeo, V.M.R. (2003) Estimating regression models with unknown break-points. Statistics in Medicine 22, 3055–3071.
set.seed(12)
xx<-1:100
zz<-runif(100)
yy<-2+1.5*pmax(xx-35,0)-1.5*pmax(xx-70,0)+15*pmax(zz-.5,0)+rnorm(100,0,2)
dati<-data.frame(x=xx,y=yy,z=zz)
out.lm<-lm(y~x,data=dati)
o<-segmented(out.lm,seg.Z=~x,psi=list(x=c(30,60)),
control=seg.control(display=FALSE))
slope(o)
out.lm1<-lm(y~z,data=dati)
o1<-update(o,seg.Z=~x+z,psi=list(x=c(30,60),z=.3))