【问题标题】:plotting a fitted segmented linear model shows more break points than what is estimated绘制拟合的分段线性模型显示的断点比估计的多
【发布时间】:2019-01-04 23:44:04
【问题描述】:

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

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

但是,当您从模型进行预测时,它会给出看起来像 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 年 7 月 27 日创建。

【问题讨论】:

    标签: r regression linear-regression lm piecewise


    【解决方案1】:

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

    #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
    

    【讨论】:

      【解决方案2】:

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

      两个连接段的情况:

      这似乎与您的结果一致。

      两个未连接段的情况:

      三个连接段的情况:

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

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

      嗯,这并不能解释您使用的软件的奇怪结果。我想知道为什么这个软件找不到最小的三段 MSE。

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

      如下图所示,放大了“分支区域”以使其更清晰。

      2段解是(AC)+(CB)。

      前3段解是(AD)+(DE)+(EB)。

      另一种 3 段解决方案是 (AF)+(FG)+(GB)。

      另外3段解是(AH)+(HI)+(IB)。

      可以想象很多其他的......

      所有这些解决方案都具有相同的 MSE。因此,在以 MSE 为标准的统计观点上,它们可以被认为是等效的。

      【讨论】:

      • 不,我的软件不会在采样位置寻找断点。例如,在两段的情况下,它给出了与采样位置不同横坐标的制动点(C)。我以 MSE 作为拟合标准为例。当然,可以选择许多其他标准。这里的问题不是讨论它们的优缺点。问题是要找到对 OP 观察到的奇怪行为的解释。
      • 嗯,这可能只是一个绘图问题。无论如何,我发现有趣的是,如果我们尝试 3 段拟合以防如此大的分散会发生什么。
      猜你喜欢
      • 2016-03-09
      • 2018-02-23
      • 2015-12-09
      • 2017-10-23
      • 2019-09-29
      • 1970-01-01
      • 2021-03-15
      • 2019-03-12
      • 2020-07-27
      相关资源
      最近更新 更多