【发布时间】:2014-02-14 05:43:48
【问题描述】:
我想计算适合弗里德曼检验的分块设计的所有排列。考虑以下示例:
thedata <- data.frame(
score = c(replicate(4,sample(1:3))),
judge = rep(1:4,each=3),
wine = rep.int(1:3,4)
)
四位评委对 3 种葡萄酒进行了排名,现在我想计算每个评委的数据内的所有可能排列。我希望看到 1,296 个排列,如下所示:
require(permute)
CTRL <- how(within=Within("free"),
plots=Plots(strata=factor(thedata$judge)),
complete=TRUE,maxperm=1e9)
numPerms(12,CTRL)
但是,allPerms(12,control=CTRL) 会产生以下错误:
Error in (function (..., deparse.level = 1) :
number of rows of matrices must match (see arg 2)
我尝试使用 block 参数,但它只是返回一个矩阵,该矩阵将一个矩阵重复 4 次,其中 3 个值的 6 种可能排列:
CTRL <- how(within=Within("free"),
blocks=factor(thedata$judge),
complete=TRUE,maxperm=1e9)
allPerms(12,control=CTRL)
重要提示:
我确实有一个自定义函数来获得结果,使用来自combinat 包的expand.grid() 和permn() 的改编。我感兴趣的是我误解了 permute 包的地方,而不是我自己如何计算所有这些排列。
【问题讨论】:
-
代码中很可能存在我的示例和测试没有发现的错误。让我看看,我会回来报告的。我想我知道问题出在哪里......
-
你就是那个男人!特别是因为你让我免于感到完全愚蠢:-)
-
好的,现在已经修复了块错误。查看更新的答案。
-
作为后续,我还修复了失败的 Plots 版本,并相应地更新了我的答案。 permute 0.8-3 版现在可以按预期工作。已经为这两个添加了测试用例(并且每个块/图的样本数量不均匀)已添加以避免将来的回归。
标签: r permute experimental-design