引导比较两组

时间:2010-09-01 07:06:34

标签: r bootstrapping

在下面的代码中,我使用bootstrapping来计算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的重新采样,以便引导程序重新采样将模拟生成“第二个样本”的“单独样本”设计原始数据?

3 个答案:

答案 0 :(得分:5)

EDIT2: Hack被删除,因为这是一个错误的解决方案相反,必须使用引导函数的参数strata:

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,其中第二个样本的所有值都高于第一个的最高值?

上述代码可以很好地得到置信区间的偏差估计值,但是差异的显着性检验应该通过整个数据集的排列来完成。

答案 1 :(得分:1)

虽然在某些情况下实际的土壤床可被视为分层变量,但这不是其中之一。植物群之间只有一次操纵。因此,你的零假设是它们确实来自完全相同的人口。在这种情况下,处理项目就好像它们来自一组11个样本一样是正确的引导方式。

如果你有两个地块,并且在每个地块中以不平衡的方式尝试不同季节的不同肥料,那么地块将是分层的样品,你想要对它们进行处理。但这不是这种情况。

答案 2 :(得分:1)

在John之后,我认为使用bootstrap测试这两个不同人口的总和是否显着不同的合适方法如下:

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)


b_x <- boot(x, sum, R = 10000)
b_y <- boot(y, sum, R = 10000)

z<-(b_x$t0-b_y$t0)/sqrt(var(b_x$t[,1])+var(b_y$t[,1]))
pnorm(z)

所以我们可以明确地拒绝它们是相同的人口。我可能错过了一定程度的自由调整,我不确定引导如何在这方面起作用,但这样的调整不会大大改变你的结果。