我正在寻找一种方法来计算R中的偏差校正加速置信区间,使用自举结果向量(这是人口增长率的自助估计 - lambda)。但是,我发现的包要么使用特定的对象类型(如“boot”包中),要么不计算BCa类型的置信区间。我使用for循环引导结果然后将结果存储在向量中的原因是,对于每个bootstrap重新采样,我首先获得80 x 33结果矩阵,该结果定义了每年采样中每个群体的参数,为每个人口定义lambda。据我所知,这在启动包中很麻烦,很容易编程为for循环。实际的功能集相当复杂,不能包含在这里。
我确实尝试使用这个问题作为伪造“引导”对象的指南,但它不起作用:How can I use pre bootstrapped data to obtain a BCa confidence interval?。
让我说我有我观察到的λ估计
lambda = 1.18
并且我们模拟了自举估计的向量
library(fGarch)
lambdaBS = rsnorm(999,mean=lambda-0.04,sd=0.11,xi=2.5)
plot(density(lambdaBS))
这是正确的倾斜和偏见。
我希望,使用这些信息,目前存在一个计算BCa置信区间的函数,或者很容易编程函数来这样做。到目前为止,我还没有发现这种情况。
就像R的情况一样,某些实用程序在包之间传播得很远,有一个简单的解决方案,但我花了几个小时的搜索才能找到,所以我会回答我自己的问题,任何可能正在寻找某些东西的人类似。
使用问题中的示例数据,“coxed”R包中的bca
函数为自举结果的向量提供偏差校正和加速置信区间。我们可以将它们与其他置信区间进行比较。
library(fGarch)
library(coxed)
set.seed(15438)
#simulate bootstrap statistics
lambdaBS = rsnorm(9999,mean=lambda-0.04,sd=0.11,xi=2.5)
#bias-corrected and accelerated
bca(lambdaBS)
1.002437 1.452525
#confidence intervals using standard error (inappropriate)
c(lambda-(sd(lambdaBS)*2),lambda+(sd(lambdaBS)*2))
0.9599789 1.4000211
#percentile confidence intervals
quantile(lambdaBS, c(0.025,0.975))
2.5% 97.5%
0.9895892 1.4016528
这似乎运作良好。我不确定它如何纠正偏差而不需要对所讨论的统计量进行初步估计,但是还没有阅读这种方法所基于的论文。
另一个模拟显示了这与使用boot
和boot.ci
的结果相比较。
library(boot)
#generate data
set.seed(12345)
dat = rsnorm(500,mean=1.6,sd=0.5,xi=3.0)
#bootstrap the median
meanfun = function(x,id){ mean(x[id])}
test = boot(data=dat,R=999,statistic=meanfun)
#BCa using boot.ci
boot.ci(test,type="bca")
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates
CALL :
boot.ci(boot.out = test, type = "bca")
Intervals :
Level BCa
95% ( 1.537, 1.626 )
Calculations and Intervals on Original Scale
#BCa using bca function from coxed package
bca(test$t)
1.536888 1.625524
在这种情况下,两个函数都给出相同的结果。