绘制拟合的分段线性模型会显示比预期更多的断点

时间:2018-07-27 20:09:40

标签: r regression linear-regression lm piecewise

我今天在用分段回归帮助一个朋友。我们试图用断点拟合分段回归,以查看它是否比标准线性模型更适合数据。

我偶然发现了一个我无法理解的问题。当使用提供的数据对具有单个断点的分段回归进行拟合时,确实确实适合单个断点。

但是,当您从模型进行预测时,它会给出看起来像2个断点的样子。使用plot.segmented()绘制模型时,不会发生此问题。

任何人都知道发生了什么事以及如何获得正确的预测(以及标准错误等)?还是我在一般代码中做错了什么?

# load packages
library(segmented)

# make data
d <- data.frame(x = c(0, 3, 13, 18, 19, 19, 26, 26, 33, 40, 49, 51, 53, 67, 70, 88
),
                y = c(0, 3.56211608128595, 10.5214485148819, 3.66063708049802, 6.11000808621074, 
                      5.51520423804034, 7.73043895812661, 7.90691392857039, 6.59626527933846, 
                      10.4413913666936, 8.71673928545967, 9.93374157928462, 1.214860139929, 
                      3.32428882257746, 2.65223361387063, 3.25440939462105))

# fit normal linear regression and segmented regression
lm1 <- lm(y ~ x, d)
seg_lm <- segmented(lm1, ~ x)

slope(seg_lm)
#> $x
#>            Est.  St.Err. t value CI(95%).l   CI(95%).u
#> slope1  0.17185 0.094053  1.8271 -0.033079  0.37677000
#> slope2 -0.15753 0.071933 -2.1899 -0.314260 -0.00079718

# make predictions
preds <- data.frame(x = d$x, preds = predict(seg_lm))

# plot segmented fit
plot(seg_lm, res = TRUE)

# plot predictions
lines(preds$preds ~ preds$x, col = 'red')

reprex package(v0.2.0)于2018-07-27创建。

2 个答案:

答案 0 :(得分:2)

这是一个纯粹的绘图问题。

#Call: segmented.lm(obj = lm1, seg.Z = ~x)
#
#Meaningful coefficients of the linear terms:
#(Intercept)            x         U1.x  
#     2.7489       0.1712      -0.3291  
#
#Estimated Break-Point(s):
#psi1.x  
# 37.46  

估计断点位于x = 37.46,它不是任何采样位置:

d$x
# [1]  0  3 13 18 19 19 26 26 33 40 49 51 53 67 70 88

如果在这些采样位置上用拟合值制作图,

preds <- data.frame(x = d$x, preds = predict(seg_lm))
lines(preds$preds ~ preds$x, col = 'red')

由于lines仅将拟合值一个接一个地排列,因此您不会在视觉上看到那些拟合的两个线段在断点处合并。 plot.segmented会注意断点并做出正确的绘图。


尝试以下操作:

## the fitted model is piecewise linear between boundary points and break points
xp <- c(min(d$x), seg_lm$psi[, "Est."], max(d$x))
yp <- predict(seg_lm, newdata = data.frame(x = xp))

plot(d, col = 8, pch = 19)  ## observations
lines(xp, yp)  ## fitted model
points(d$x, seg_lm$fitted, pch = 19)  ## fitted values
abline(v = d$x, col = 8, lty = 2)  ## highlight sampling locations

regression plot

答案 1 :(得分:0)

由于您使用的软件不熟悉,所以我无法具体回答。不过,我尝试使用自己的软件(自制),得到了这个:

两个相连网段的情况:

enter image description here

这看起来与您的结果一致。

两个未连接的网段的情况:

enter image description here

三个相连网段的情况:

enter image description here

一个观察到,在两个未连接的线段的情况下,均方误差最小,这对于如此大的散布并不奇怪。

三个连接段的情况很有趣。结果介于两者之间。添加的线段在其他两个线段之间建立了几乎垂直的链接。

好吧,这并不能解释您所使用软件的奇怪结果。我不知道为什么该软件找不到三段式最小的MSE。

您得到的预测(两个大片段由一个很小的片段链接)给出了与没有小片段时完全相同的MSE,因为没有与该小片段相关的实验点。只要没有与之相关的实验点,就可以找到无穷无尽的等效解决方案来添加“虚拟”小片段。

下面对此进行了说明,并放大了“分支区域”,使其更加清晰易懂。

enter image description here

两段式解决方案是(AC)+(CB)。

前3个细分市场解决方案是(AD)+(DE)+(EB)。

另外三个细分市场解决方案是(AF)+(FG)+(GB)。

另外3个细分市场解决方案是(AH)+(HI)+(IB)。

一个人可以想象很多其他人...

所有这些解决方案都具有相同的MSE。因此,以MSE为标准,在统计角度上可以将它们视为等效。