如何在 R 中拟合分段回归,并限制第一次拟合通过截距..?

Posted

技术标签:

【中文标题】如何在 R 中拟合分段回归,并限制第一次拟合通过截距..?【英文标题】:How to fit a piecewise regression in R, and constrain the first fit to pass through the intercept..? 【发布时间】:2020-05-29 19:55:07 【问题描述】:

我想执行断棒回归,其中第一段的截距被限制为通过原点。

以下代码使用 R 中的 'segmented' 包将两个线性模型拟合到数据中。

请注意,虽然第一段的回归不通过原点 - 据我所知,分段不允许用户指定第一段的截距应该通过原点。

那么,如何执行这样的折线回归,同时限制第一段通过原点..?

## create data with two 'growth' regimes
n <- 100
x <- 1:n
y1 <- x[1:(n/2)] + rnorm(n=n/2, mean = 0, sd=10) 
y2 <-              rnorm(n=n/2, mean = 0, sd=5) + max(y1)
y <- c(y1,y2)
DF <- data.frame(x,y )

## fit a broken-stick regression model 
library(segmented)
LM <- lm(y~x, DF)
Seggie <- segmented(LM, seg.Z=~x, npsi=1, psi=n/2)

## plot the data & the model
plot(Seggie); abline(h=0, lty=2); abline(v=0, lty=2)
points(y ~ x, DF); abline(h=0, lty=2)

【问题讨论】:

【参考方案1】:

很好的例子。

您只需要调整您的公式,使其需要通过原点。您可以通过将+0 添加到您的因变量来做到这一点。 (见?formula

LM <- lm(y~x+0, DF)
Seggie <- segmented(LM, seg.Z=~x+0, npsi=1, psi=n/2)
plot(Seggie)
abline(h=0, lty=2); abline(v=0, lty=2)
points(y ~ x, DF); abline(h=0, lty=2)

【讨论】:

以上是关于如何在 R 中拟合分段回归,并限制第一次拟合通过截距..?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用`lmplot`绘制没有截距的线性回归?

R语言使用lm函数拟合回归模型(简单线性回归一元回归simple regression)并解读拟合模型

R语言使用lm函数拟合回归模型(简单线性回归一元回归simple regression)并解读拟合模型

拟合贝叶斯线性回归并预测不可观察的值

拟合(转)

R语言 | 分段线性回归及对分割点的评估选择及R计算