我无法对我的数据运行弗里德曼测试。 我正在尝试使用此命令运行Friedman测试:
friedman.test(mean ~ isi | expId, data=monoSum)
在以下数据库(https://www.dropbox.com/s/2ox0y1b4gwld0ai/monoSum.csv)上:
> monoSum
expId isi N mean
1 m80B1 1 10 100.000000
2 m80B1 2 10 73.999819
3 m80B1 3 10 45.219362
4 m80B1 4 10 116.566174
. . . . .
18 m80L2 2 10 82.945491
19 m80L2 3 10 57.675480
20 m80L2 4 10 207.169277
. . . . . .
25 m80M2 1 10 100.000000
26 m80M2 2 10 49.752687
27 m80M2 3 10 19.042592
28 m80M2 4 10 150.411035
它让我回到了错误:
Error in friedman.test.default(c(100, 73.9998193095267, 45.2193621626293, :
not an unreplicated complete block design
我认为它给出了错误,因为当monoSum$isi==1
时,mean的值总是为100.这是正确的吗?
但是,monoSum$isi==1
总是100,因为它是所有其他monoSum$isi
组被归一化的控制组。我不能假设正常分布,所以我不能运行rmANOVA ...
有没有办法对这些数据进行弗里德曼测试,或者我在这里错过了一个非常重要的观点?
非常感谢提前!
答案 0 :(得分:2)
如果我运行您的数据集,我不会收到错误:
Friedman rank sum test
data: mean and isi and expId
Friedman chi-squared = 17.9143, df = 3, p-value = 0.0004581
但是,您必须确保将expId
和isi
编码为因子。运行以下命令:
monoSum$expID$<-factor(monoSum$expID)
monoSum$isi$<-factor(monoSum$isi)
然后再次运行测试。这对我来说也有类似的问题。
答案 1 :(得分:2)
我知道这对于后代来说已经很老了(另见:当我忘记并再次谷歌时我:)
您可以通过运行table(groups, blocks)
或针对此问题table(monoSum$isi, monoSum$expID)
来确定数据框中缺少的值。这将返回0和1的表。缺少的记录在0s的单元格中。
尝试删除结果不完整的块后,我遇到了这个问题;由于某种原因,获取数据的子集并没有删除块。
答案 2 :(得分:1)
我想我会提到我发现这篇帖子,因为我收到了类似的错误消息。以上建议没有解决。奇怪的是,我不得不对我的数据帧进行排序,以便按顺序逐块显示这些组(即我没有以下内容: 1 A座 1 B座 第2块B Block 2 A
必须显示为A,B,A,B)
答案 3 :(得分:0)
我在R中遇到了同样的神秘错误消息,但在我的情况下,当我将'as.matrix'函数应用于我最初使用read.csv导入的CSV文件的数据帧时,它已得到解决( )功能。
我的原始数据集中也有一个丢失的数据点,我发现当我的数据转换为friedman.test()调用的矩阵时,包含缺失数据点的整行自动被省略。 / p>
答案 4 :(得分:0)
使用as.matrix()函数来转换我的数据框是让函数为我运行的魔力。
答案 5 :(得分:0)
我的数据集也有这个确切的错误。
事实证明,函数friedman.test()
接受数据帧(是data.frame()
创建的数据帧),但不接受 tibbles (由dplyr和其他现代技术创建的)工具)。对我来说,解决方案是先将数据集转换为数据框。
D_fri <- D_all %>% dplyr::select(FrustrationEpisode, Condition, Participant)
D_fri <- as.data.frame(D_fri)
str(D_fri) # confirm the object should now be a 'data.frame'
friedman.test(FrustrationEpisode ~ Condition | Participant, D_fri)