如何使用分段包来拟合具有一个断点的分段线性回归?

机器算法验证 r 回归 分段线性
2022-04-08 18:07:17

我在使用分段包时遇到问题。

我的线性回归非常简单,介于供给和需求之间:

线性模型 <- lm(需求~提供)

我的模型也应该使用“分段”:

分段模型 <- 分段(lm(需求〜报价),seg.Z =〜报价,psi = NA)

但是我有一条错误消息,我真的找不到原因:

Error in seg.lm.fit(y, XREG, Z, PSI, weights, offs, opz) : 
  (Some) estimated psi out of its range

这是我的数据:

demand  offer
1155    39.3
362 23.5
357 22.4
111 6.1
703 35.9
494 35.5
410 23.2
63  9.1
616 27.5
468 28.6
973 41.3
235 16.9
180 18.2
69  9
305 28.6
106 12.7
155 11.8
422 27.9
44  21.6
1008    45.9
225 11.4
321 16.6
1001    40.7
531 22.4
143 17.4
251 14.3
216 14.6
57  6.6
146 10.6
226 14.3
169 3.4
32  5.1
75  4.1
102 4.1
4   1.7
68  7.5
102 7.8
462 22.6
295 8.6
196 7.7
50  7.8
739 34.7
287 15.6
226 18.5
706 35
127 16.5
85  11.3
234 7.7
153 14.8
4   2
373 12.4
54  9.2
81  11.8
18  3.9
1个回答

似乎正在发生的事情是断点的估计值之一offer在拟合过程中超出了范围。seg.lm.fit(您可以通过在提示符处键入并通过代码来推断这一点。)您可以通过指定PSI断点的起始值来解决此问题。我也开始seg.control=list(stop.if.error=FALSE)尝试解决这个问题,但这并没有帮助。

我重新运行了您的模型PSI=c(15)并且它起作用了,但是PSI=c(15,25)我收到了超出迭代计数的错误消息,即使将最大迭代次数设置为 1,000 也无法克服。我认为这意味着一个断点是你能够用这个函数和数据估计的全部。

作为一个额外的说明,如果你plot(sqrt(demand)~offer),关系看起来更接近线性,而不是仅仅demand~offer,所以你可能想尝试数据的转换而不是分段线性模型。