繁体   English   中英

boot.ci()对于引导程序样本返回奇怪的置信区间

[英]boot.ci() returns strange confidence interval for bootstrap samples

我有两组正实数。

> dput(group1)
c(2.10753, 2.57251, 2.61687, 4.62551, 7.13166, 6347.63, 4.22139, 
10.7373, 2.11568, 2.71866, 4.09376, 10.9046, 109807, 5.87156, 
3.17082, 3.4703, 2.47262, 9.24319, 34.6945, 5.72567, 12.0134, 
108.33, 6.60707, 6.24304, 3.59048, 10.3174, 48.0265, 5.32097, 
3.77157, 6.67401, 22.633, 34.8186, 21.5315, 9.42882, 7.10627, ...)

> dput(group2)
c(4.88474, 65.4318, 128.101, 24.1271, 5.44262, 54.8987, 2.85175, 
14.1089, 172.23, 66.8563, 6.74067, 2.19603, 2.12985, 4.12735,
16.401, 3.22688, 15.6943, 4.32861, 36.4752, 7.33769, 75.855, 
62.7653, 35.1786, 3.71099, 29.0186, 34.4472, 19.1061, 2.75174, ...)

组1包含〜1000个值,组2包含〜30,000个值。 我对两组之间的中位数比率感兴趣,并使用以下R函数为2000个引导程序样本中的每个样本计算了该比率(有关boot()命令,请参见下面的函数输出):

medianRatio <- function(x, i, noGroup1, noGroup2) {
    all <- x[i]
    currGroup1 <- all[1:noGroup1]
    currGroup2 <- all[c(noGroup1 + 1):length(all)]
    ratio <- median(currGroup1) / median(currGroup2)
    return(ratio)
}

boot()函数的调用如下所示

ORDINARY NONPARAMETRIC BOOTSTRAP


Call:
boot(data = c(group1, group2), statistic = medianRatio, R = noBs, 
    noGroup1 = length(group1), noGroup2 = length(group2))


Bootstrap Statistics :
    original      bias    std. error
t1*  1.08847 -0.08597889  0.05451763`

引导程序样本的最终分布平均值为1.002,标准差为0.054(直方图的目视检查确认正态分布在1左右)。 也:

范围(Group1_Group2.BS $ t)[1] 0.823311 1.198469

但是,当我在启动对象上运行boot.ci()时,报告的置信区间为

BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 2000 bootstrap replicates

CALL : 
boot.ci(boot.out = Group1_Group2.BS, type = "norm")

Intervals : 
Level      Normal        
95%   ( 1.068,  1.281 )  
Calculations and Intervals on Original Scale

我不明白这是怎么回事,因为报告的置信区间甚至没有覆盖自举样本的(对称)分布的平均值。 我想念什么?

了解正常的置信区间是如何计算的可能会帮助您解决问题。 这个问题的答案中,我找到了一个很好的解释。

自举法线正常置信区间围绕统计值的观察值构建,并进行偏差校正以解决自举法统计量的中间值与观察值之间的差异。 通过使用从原始样本中获得的感兴趣的统计量的估计值,减去偏差,再加上自举标准误差的1.96倍,计​​算出CI。 如果使用boot对象中的值“手工”执行此操作,则会看到与boot.ci相同的值。

1.08847 - -0.08597889 - 1.96*0.05451763
[1] 1.067594
1.08847 - -0.08597889 + 1.96*0.05451763
[1] 1.281303

您的偏见足以使百分位数CI与正常CI之间的差异引人注目。 当我考虑引导程序置信区间时,我会期望使用引导程序分布平均值减去偏差,而不是观察到的统计数据减去偏差。 我没有花足够的时间考虑这个问题,也没有带上我的自举笔记,但是您可能会更仔细地检查这个问题。

您执行的引导程序不正确。 您在函数中值比率中假设x [i]的第一部分将保存来自组1的值,而第二个部分将保存来自组2的值。这是不正确的,因为我只是一个从1到noGroup1 + noGroup2的替换样本。 您需要在引导命令中使用strata选项。 我认为以下方法会起作用。 stype =“ f”选项指定引导将生成一个长度为noGroup1 + noGroup2的向量,该向量表示为引导程序样本选择了每个观测值多少次(0,1,2,...)。 此代码基于引导文档中的示例。

medRatio <- function(x, f, noGroup1){
 gp1 <- 1:noGroup1
 m1 <- median(rep(x[gp1],f[gp1]))
 m2 <- median(rep(x[-gp1],f[-gp1]))
 return(m1/m2)
}
n1 <- length(group1)
n2 <- length(group2)
boot(c(group1,group2),medRatio,R=2000,stype = "f",strata = rep(1:2,c(n1,n2)),noGroup1=n1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM