我彻底完成了这个问题的答案,但我一无所获。
假设我有两个样本大小为4的成对观察样本。我的目标是执行一个精确的置换集来比较样本均值,并执行我需要生成所有可能的对置换的程序,即I必须产生16种不同的排列(第一对有2种可能,第二对有两种......等等。)
也就是说,如果我的样本是:
#samples
x <- rnorm(4,0,1)
y <- rnorm(4,5,1)
#statistic over the original samples
dif0 <- mean(x) - mean(y)
我可以使用4个嵌套的“for”循环生成所有可能的排列,如下所示:
d1 < c()
d2 <- c()
samp_ab <- data.frame("x"=x,"y"=y)
ind <- 1:2
for (i1 in 1:2)
{
d1[1] <- samp_ab[1,ind[i1]]
d2[1] <- samp_ab[1,ind[-i1]]
for (i2 in 1:2) {
d1[2] <- samp_ab[2,ind[i2]]
d2[2] <- samp_ab[2,ind[-i2]]
for (i3 in 1:2) {
d1[3] <- samp_ab[3,ind[i3]]
d2[3] <- samp_ab[3,ind[-i3]]
for (i4 in 1:2) { #loop4
d1[4] <- samp_ab[4,ind[i4]]
d2[4] <- samp_ab[4,ind[-i4]]
#compute the statistic
k = k + 1 #counter
S[k] <- mean(d1) - mean(d2)
}
}
}
}
这段代码有可能被简化吗?我想到了一个“写”嵌套循环然后执行它的函数......但我不知道该怎么做。我想获得配对样本的一般过程(甚至是组合三个元素),而不需要编写许多嵌套循环。例如,我必须使用n = 10,这导致10个循环...只是创建1024(2 ^ 10)个排列。
非常感谢提前。
答案 0 :(得分:0)