R 如何从segmented()函数稳定断点?
我通过R 如何从segmented()函数稳定断点?,r,breakpoints,R,Breakpoints,我通过strucchange包中的breakpoints()函数找到了断点。我的解释变量是纬度,响应变量是贝塔多样性值 然后,我使用这些断点拟合回归线,并使用segmented包中的segmented()绘制回归线。Segmented提供了断点,当我再次运行函数时,断点会发生变化。但是,断点函数中的断点不会更改。我想,断点会随着数据集的增大而变化,就像我的一样。我需要报告这些断点 如何从segmented()函数稳定断点 正如您在本例中所看到的,分段函数中的断点不会随着小数据集而改变 我使用了相
strucchange
包中的breakpoints()
函数找到了断点。我的解释变量是纬度,响应变量是贝塔多样性值
然后,我使用这些断点拟合回归线,并使用segmented
包中的segmented()
绘制回归线。Segmented提供了断点,当我再次运行函数时,断点会发生变化。但是,断点函数中的断点不会更改。我想,断点会随着数据集的增大而变化,就像我的一样。我需要报告这些断点
如何从segmented()
函数稳定断点
正如您在本例中所看到的,分段函数中的断点不会随着小数据集而改变
我使用了相同的示例代码
例如:
set.seed(12)
xx <- 1:100
zz <- runif(100)
yc <- 2+1.5*pmax(xx-35,0)-1.5*pmax(xx-70,0)+15*pmax(zz-.5,0)+
rnorm(100,0,2)+1.5*pmax(xx-20,0)+15*pmax(zz-.2,0)+
rnorm(100,0,2)
plot(xx, yc)
# Seeking breakpoints
varbp <- breakpoints(yc ~ xx)
bp <- xx[varbp$breakpoints]
# Using segmented to fit regression line
modvars <- lm(yc ~ xx)
seg.var <- segmented(modvars, seg.Z = ~xx, psi = c(25,78))
summary(seg.var)
# Estimated Break-Point(s):
# Est. St.Err
# psi1.xx 25.694 1.240
# psi2.xx 72.786 2.086
# Plotando
plot(seg.var, add = T)
abline(v=25.694, col="green", lwd = 2)
abline(v = 72.786, col="green", lwd = 2)
set.seed(12)
xx来自文件:
由于版本0.2-9.0 segmented实现了Wood(2001)中描述的引导重启算法。当分段关系是平坦的时,期望引导重新启动避开目标函数的局部最优。请注意,bootstrap restart运行n.boot迭代,而不考虑只影响内部循环内收敛的代价
由于默认情况下使用引导,因此,segmented()
检测到的断点不稳定也就不足为奇了(尽管当我遇到同样的问题时,我也很惊讶)
文档描述了一种抑制引导的方法。这可以通过如下方式使用n.boot
参数来实现:
seg.var <- segmented(modvars, seg.Z = ~xx, psi = c(25,78),
control = seg.control(n.boot=0))
seg.var来自文档:
由于版本0.2-9.0 segmented实现了Wood(2001)中描述的引导重启算法。当分段关系是平坦的时,期望引导重新启动避开目标函数的局部最优。请注意,bootstrap restart运行n.boot迭代,而不考虑只影响内部循环内收敛的代价
由于默认情况下使用引导,因此,segmented()
检测到的断点不稳定也就不足为奇了(尽管当我遇到同样的问题时,我也很惊讶)
文档描述了一种抑制引导的方法。这可以通过如下方式使用n.boot
参数来实现:
seg.var <- segmented(modvars, seg.Z = ~xx, psi = c(25,78),
control = seg.control(n.boot=0))
seg.var,尽管我自己在分段
方面的经验与您声称的不稳定一致。但你的这个例子并不支持它。我用不同的psi值运行了很多次,结果非常相似。尽管我自己的分段经验与你声称的不稳定一致。但你的这个例子并不支持它。我用不同的psi值运行了很多次,结果非常相似。