簡體   English   中英

如何穩定來自segmented()函數的斷點?

[英]How can I stabilize breakpoints from segmented() function?

我從strucchange包中找到了帶有breakpoints()函數的breakpoints() 我的解釋變量是緯度,響應變量是β分集值。

然后,我使用這些斷點來擬合回歸線,並使用來自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.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))

希望能有所幫助。 干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM