我正在尝试使用来自R boot.ci
包的boot
来计算参数自举的偏差和偏斜校正自举置信区间。从我阅读的手册页和实验中,我得出结论,我必须自己计算折刀估计值并将它们输入boot.ci
,但这在任何地方都没有明确说明。我一直无法找到其他文档,但为了公平起见,我没有看过代码所依据的原始Davison和Hinkley书......
如果我天真地运行b1 <- boot(...,sim="parametric")
然后boot.ci(b1)
,我会收到错误influence values cannot be found from a parametric bootstrap
。当且仅当我指定type="all"
或type="bca"
时才会出现此错误; boot.ci(b1,type="bca")
给出了同样的错误。 empinf(b1)
也是如此。我可以让事情发挥作用的唯一方法是明确计算折刀估算(使用带有empinf()
参数的data
)并将其输入boot.ci
。
构建数据:
set.seed(101)
d <- data.frame(x=1:20,y=runif(20))
m1 <- lm(y~x,data=d)
自举:
b1 <- boot(d$y,
statistic=function(yb,...) {
coef(update(m1,data=transform(d,y=yb)))
},
R=1000,
ran.gen=function(d,m) {
unlist(simulate(m))
},
mle=m1,
sim="parametric")
到目前为止很好。
boot.ci(b1)
boot.ci(b1,type="bca")
empinf(b1)
都给出了上述错误。
这有效:
L <- empinf(data=d$y,type="jack",
stype="i",
statistic=function(y,f) {
coef(update(m1,data=d[f,]))
})
boot.ci(b1,type="bca",L=L)
有谁知道这是否是我应该这样做的方式?
更新:boot
包的原作者回复了一封电子邮件:
...你是对的,问题在于你正在做的事情 参数化引导程序。在引导中实现的bca间隔是 非参数区间,这应该已经说明了 显然某处。参数bca区间的公式 是不一样的,取决于最不利的衍生物 家庭可能存在滋扰参数,如你的 案件。 (参见Davison&amp; Hinkley的第206-207页)empinf假设 统计信息是用于非参数自举的一种形式 (你在你的例子中调用了empinf),但是你原来的 调用引导(正确)具有不同形式的统计信息 适用于参数重采样。
你当然可以做你正在做的事,但我不确定 混合参数重采样的理论性质 非参数区间估计。
答案 0 :(得分:5)
在查看boot.ci页面后,我决定使用沿Davison和Hinkley第6章中的示例行构建的引导对象,看看它是否产生了您观察到的错误。我确实收到警告,但没有错误。:
require(boot)
lmcoef <- function(data, i){
d <- data[i, ]
d.reg <- lm(y~x, d)
c(coef(d.reg)) }
lmboot <- boot(d, lmcoef, R=999)
m1
boot.ci(lmboot, index=2) # I am presuming that the interest is in the x-coefficient
#----------------------------------
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates
CALL :
boot.ci(boot.out = lmboot, index = 2)
Intervals :
Level Normal Basic
95% (-0.0210, 0.0261 ) (-0.0236, 0.0245 )
Level Percentile BCa
95% (-0.0171, 0.0309 ) (-0.0189, 0.0278 )
Calculations and Intervals on Original Scale
Warning message:
In boot.ci(lmboot, index = 2) :
bootstrap variances needed for studentized intervals