我目前正在写一篇关于在R
. 我选择boot
了boot
包中的功能。我得到了 Efron/Tibshirani (1993) 的《Bootstrap 简介》一书,并且只是复制了他们的一些示例。
在这些示例中,他们经常根据不同的样本计算统计数据。例如,他们有一个例子,他们有 16 只老鼠的样本。其中7只小鼠接受了旨在延长试验手术后存活时间的治疗。其余9只小鼠未接受治疗。对于每只老鼠,收集它存活的天数(数值如下)。
现在,我想使用引导方法来确定均值的差异是否显着。但是,如果我正确理解了帮助页面boot
,我就不能只将两个样本大小不相等的不同样本传递给函数。我的解决方法如下:
#Load package boot
library(boot)
#Read in the survival time in days for each mouse
treatment <- c(94, 197, 16, 38, 99, 141, 23)
control <- c(52, 104, 146, 10, 51, 30, 40, 27, 46)
#Call boot twice(!)
b1 <- boot(data = treatment,
statistic = function(x, i) {mean(x[i])},
R = 10000)
b2 <- boot(data = control,
statistic = function(x, i) {mean(x[i])},
R = 10000)
#Compute difference of mean manually
mean_diff <- b1$t -b2$t
在我看来,这个解决方案有点骇人听闻。我感兴趣的统计数据现在保存在 vectormean_diff
中,但我不再获得该boot
包的所有强大功能。我不能打电话boot.ci
等等mean_diff
。
boot
所以我的问题基本上是,如果我的 hack 是使用包R
和比较两个不同样本的统计数据进行引导的唯一方法。还是有其他方法?
我考虑过传递一个带有 16 行的 data.frame 和一个附加列“Group”:
df <- data.frame(survival=c(treatment, control),
group=c(rep(1, length(treatment)), rep(2, length(control))))
head(df)
survival group
1 94 1
2 197 1
3 16 1
4 38 1
5 99 1
6 141 1
但是,现在我必须告诉boot
它,它必须始终从前 7 行中抽取 7 个观测值,从最后 9 行中抽取 9 个观测值,并将它们视为单独的样本。我不知道该怎么做。