我试图在segmented
包的帮助下对我的数据进行3次回归,我有点迷失了......
首先:这是一个可重复的例子:
y=c(520.0000, 620.0000, 653.3333, 853.3333, 1220.0000, 1553.3333, 1586.6667, 1586.6667, 1586.6667, 1586.6667, 1586.6667)
x=c(33320, 41020, 49020, 56920, 69220, 76320, 86320, 95420, 103720, 111520, 120320)
plot(y~x)
out=lm(y~x)
我的数据有2个可见的断点:
- 首先我尝试使用K = 2指定已知断点数:
mdl2=segmented(out, seg.Z =~x, psi=NA, control=seg.control(K=2,n.boot=0,it.max=500,stop.if.error=FALSE,display=T))
plot(mdl2)
points(y~x)
- 但如果我设置2<K<8
(错误的值......),我就能检测出正确数量的断点:
- 最后一点让我感到困惑:
如果设置K = 4,display = T选项会显示3个断点的结果,但在函数输出中我仍有两个断点...
******编辑于09/19/2016 ******
我也尝试直接指定psi
,因为我在断点位置有一些先验(但这不是我的目标),而{{1}的结果仍然很糟糕} ...
对于某些回归,我在算法成功之前多次运行该函数以结束解决方案。此外,提出的解决方案通常具有可重现性问题......
有没有人知道如何有力地估算这些断点?看起来我的数据并不难以适应,不是吗?