弗里德曼测试未复制的完整块设计错误

时间:2014-01-30 13:11:04

标签: r error-handling statistics

我无法对我的数据运行弗里德曼测试。 我正在尝试使用此命令运行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 ... 有没有办法对这些数据进行弗里德曼测试,或者我在这里错过了一个非常重要的观点?

非常感谢提前!

6 个答案:

答案 0 :(得分:2)

如果我运行您的数据集,我不会收到错误:

   Friedman rank sum test

   data:  mean and isi and expId
   Friedman chi-squared = 17.9143, df = 3, p-value = 0.0004581

但是,您必须确保将expIdisi编码为因子。运行以下命令:

    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)