Friedman检验未重复完全区组设计错误

3pvhb19x  于 2022-12-06  发布在  其他
关注(0)|答案(8)|浏览(170)

我在对数据运行Friedman检验时遇到问题。我正在尝试使用以下命令运行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时,平均值总是100,这对吗?
然而,monoSum$isi==1始终为100,因为它是所有其他monoSum$isi组被归一化的控制组。我不能假设正态分布,所以我不能运行rmANOVA......有没有办法对该数据运行弗里德曼检验,或者我在这里遗漏了一个非常重要的点?
提前感谢!

ssm49v7z

ssm49v7z1#

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

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)

然后再运行一次测试。这对我有类似的问题很有效。

zphenhs4

zphenhs42#

我知道这是相当古老的,但为后代(另见:我当我忘记和谷歌这一次):
你可以通过运行table(groups, blocks)来确定你的数据框中缺少了什么值,或者在这个问题中是table(monoSum$isi, monoSum$expID)。这将返回一个0和1的表格。这些缺少的记录在带有0的单元格中。
我在尝试删除结果不完整的块后遇到了这个问题;由于某种原因,获取数据的子集并没有移除块。

jfewjypa

jfewjypa3#

我想我会提到我发现这个帖子是因为我收到了一个类似的错误信息。上面的建议并没有解决这个问题。奇怪的是,我不得不对我的 Dataframe 进行排序,以便一个块一个块地按顺序显示组(即,我不能有以下内容:1 A座1 B座2 B座2 A座
它必须以A、B、A、B的形式出现)

3htmauhk

3htmauhk4#

我在R中遇到了同样的隐含错误消息,尽管在我的情况下,当我将“as.matrix”函数应用于我使用read.csv()函数导入的CSV文件的原始 Dataframe 时,它得到了解决。
在我的原始数据集中也有一个缺失的数据点,我发现当我的数据被转换为friedman.test()调用的矩阵时,包含缺失数据点的整行都被自动省略了。

oalqel3c

oalqel3c5#

使用函数as.matrix()来转换我的 Dataframe 是让函数为我运行的神奇之处。

s5a0g9ez

s5a0g9ez6#

我的数据集也出现了同样的错误。结果发现函数friedman.test()接受 data frames(fx由data.frame()创建的 Dataframe ),但不接受 * tibles *(由dplyr和其他现代工具创建的 Dataframe )。我的解决方案是先将我的数据集转换为dataframe。

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)
hpxqektj

hpxqektj7#

我也遇到了这个问题。通过删除NA修复了我的问题。

# My data (called layers) looks like:
| resp.no | av.l.all | av.baseem | av.base |
| 1       | 1.5      | 1.3       | 2.3     |
| 2       | 1.4      | 3.2       | 1.4     |
| 3       | 2.5      | 2.8       | 2.9     |
...
| 1088    | 3.6      | 1.1       | 3.3     |

# Remove NAs
layers1 <- na.omit(layers)

# Re-organise data so the scores are stacked, and a column added with the original column name as a factor
layers2 <- layers1 %>%
  gather(key = "layertype", value = "score", av.l.all, av.baseem, av.base) %>%
  convert_as_factor(resp.no, layertype)

# Data now looks like this
| resp.no | layertype | score  | 
| 1       | av.l.all  | 1.5    | 
| 1       | av.baseem | 1.3    | 
| 1       | av.base   | 2.3    | 
| 2       | av.l.all  | 1.4    | 
...
| 1088    | av.base   | 3.3    | 

# Then do Friedman test
friedman.test(score ~ layertype | resp.no, data = layers2)
z9gpfhce

z9gpfhce8#

我只是想分享一下我的问题。我的ID因子在执行pivot_longger()后没有正确的级别。因此,同样的错误也出现了。我确定了正确的级别,它的工作原理如下:as.factor(as.character(df$ID))

相关问题