我在breakpoints()
包中找到了strucchange
函数的断点。我的解释变量是纬度,响应变量是β多样性值。
然后,我使用这些断点来拟合回归线,并使用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)
答案 0 :(得分:0)
从文档中:
自0.2-9.0版本以来,分段实现了Wood(2001)中描述的引导重新启动算法。当分段关系为平坦关系时,引导程序的重新启动有望逃脱目标函数的局部最优值。请注意,引导程序重新启动会运行n.boot迭代,而不考虑会影响内部循环内收敛的费用。
由于默认情况下使用了引导程序,因此segmented()
检测到的断点不稳定也就不足为奇了(尽管当我遇到相同的问题时我也感到惊讶)。
文档描述了一种抑制引导的方法。可以通过使用n.boot
这样的参数来完成此操作:
seg.var <- segmented(modvars, seg.Z = ~xx, psi = c(25,78),
control = seg.control(n.boot=0))
希望此帮助。干杯!