在下面的代码中,我使用引导来计算 C.I.以及在零假设下的 p 值,即两种不同的肥料施用于番茄植物对植物产量没有影响(替代方案是“改良的”肥料更好)。第一个随机样本 (x) 来自使用标准肥料的植物,而“改进”的样本已用于第二个样本 (y) 来自的植物。
x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)
total <- c(x,y)
library(boot)
diff <- function(x,i) mean(x[i[6:11]]) - mean(x[i[1:5]])
b <- boot(total, diff, R = 10000)
ci <- boot.ci(b)
p.value <- sum(b$t>=b$t0)/b$R
我不喜欢上面的代码的是,重采样的完成好像只有一个包含 11 个值的样本(将前 5 个作为样本 x 分开,其余的样本 y)。
你能告诉我应该如何修改这段代码,以便从第一个样本中提取大小为 5 的重采样,并将大小为 6 的重采样与第二个样本分开,这样引导重采样将模仿产生原始数据?
最佳答案
编辑2:
Hack 删除了,因为这是一个错误的解决方案。相反,必须使用引导函数的参数层:
total <- c(x,y)
id <- as.factor(c(rep("x",length(x)),rep("y",length(y))))
b <- boot(total, diff, strata=id, R = 10000)
...
请注意,您甚至不会接近对 p.value 的正确估计:
x <- c(1.4,2.3,2.9,1.5,1.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)
total <- c(x,y)
b <- boot(total, diff, strata=id, R = 10000)
ci <- boot.ci(b)
p.value <- sum(b$t>=b$t0)/b$R
> p.value
[1] 0.5162
您如何解释两个样本的 p 值 0.51,其中第二个样本的所有值都高于第一个样本的最高值?
上面的代码可以很好地获得置信区间的偏倚估计,但是关于差异的显着性测试应该通过对完整数据集的排列来完成。
关于r - Bootstrapping 比较两组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3615718/