Learn R Programming

segmented (version 0.2-5)

segmented: Segmented relationships in regression models

Description

Fits regression models with segmented relationships between the response and one or more explanatory variables. Break-point estimates are provided.

Usage

segmented(obj, seg.Z, psi, control = seg.control(), 
    model.frame = TRUE, ...)

## S3 method for class 'lm':
segmented(obj, seg.Z, psi, control = seg.control(),
    model.frame = TRUE, ...)

## S3 method for class 'glm':
segmented(obj, seg.Z, psi, control = seg.control(),
    model.frame = TRUE, ...)

Arguments

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. If seg.Z includes
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.

Value

  • 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:
  • psiestimated break-points and relevant (approximate) standard errors
  • itnumber of iterations employed
  • epsilondifference in the objective function when the algorithm stops
  • mframethe model frame
  • psi.historyA list or a vector including the breakpoint estimates at each step
  • Other components are not of direct interest of the user.

Warning

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.

Details

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.

References

Muggeo, V.M.R. (2003) Estimating regression models with unknown break-points. Statistics in Medicine 22, 3055--3071. Muggeo, V.M.R. (2008) Segmented: an R package to fit regression models with broken-line relationships. Rnews 8/1, 20--25.

See Also

lm, glm

Examples

Run this code
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.lm<-lm(y~z,data=dati)
o1<-update(o,seg.Z=~x+z,psi=list(x=c(30,60),z=.3))

Run the code above in your browser using DataLab