【发布时间】:2013-08-15 15:11:44
【问题描述】:
我目前正在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
在我看来,这个解决方案有点小题大做。我感兴趣的统计数据现在保存在向量mean_diff 中,但我不再获得boot 包的所有强大功能。我无法在mean_diff 等上拨打boot.ci 等。
所以我的问题基本上是我的 hack 是否是使用 R 中的 boot 包和比较两个不同样本的统计数据进行引导的唯一方法。还是有其他方法?
我考虑过传入一个包含 16 行和一个附加列“Group”的 data.frame:
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 个观测值,并将它们视为单独的样本。我不知道该怎么做。
【问题讨论】:
-
你为什么不用
t.test????? -
@Dwin 我知道我可以运行
t.test(df$survival ~ df$group)来替代boot。但是,这不是我的问题(实际上我的教程中有这一部分)。问题是关于我想将引导程序应用于比较两个样本的统计数据的一般情况。均值检验的差异只是一个例子。或者你有没有想到结合t.test和boot的东西?在这种情况下,如果您能分享该解决方案,那就太好了,因为我不太明白怎么做。 -
我在想,如果你能正确地对抽样进行分层,你可以使用 t.test(...)$t 作为启动统计数据。
标签: r