我试图boot.ci
从 R 的boot
包中使用参数引导程序计算偏差和偏斜校正的引导程序置信区间。通过阅读手册页和实验,我得出结论,我必须自己计算折刀估计并将它们输入boot.ci
,但这在任何地方都没有明确说明。我无法找到其他文档,但公平地说,我没有看过原始的戴维森和欣克利的代码所依据的书......
如果我天真地运行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 & Hinkley 中的第 206-207 页)empinf 假定统计数据是用于非参数引导的一种形式(您在示例调用 empinf 中所做的)但您最初的引导调用(正确)具有统计数据以适合参数重采样的不同形式。
您当然可以做您正在做的事情,但我不确定将参数重采样与非参数区间估计混合的理论特性。