如何解决R - NA 提交 mann-whitney u 检验
我需要计算数百次加权 Mann Whitney U 检验结果。每次迭代都涉及两个组之间差异的两个样本测试。我不知道如何在不动态删除案例的情况下让现有函数处理缺失值。
一些比较的数据是 here,在我称为 dat
的数据框中。此表中所有带数字的变量均为数字类型。
以下是我调用 sjstats::mannwhitney()
函数的方式:
mannwhitney(dat,measure1,group)
当我这样做时,我收到以下错误:
Error in `[[<-.data.frame`(`*tmP*`,"grp1.label",value = character(0)) :
replacement has 0 rows,data has 1
我怀疑这是因为 measure1
的第 212 次观察中缺少值。但是将向量名称包装在 na.omit()
或 !is.na()
中并不能解决问题,这可能是因为这样做仍然会导致数据帧中 group
的非 NA 值的数量更大比 measure1
中非 NA 值的数量。
解决方法
我不确定你的小组专栏是什么班级,但如果我这样做:
library(sjstats)
dat = read.csv("question - Sheet1.csv")
str(dat)
'data.frame': 301 obs. of 5 variables:
$ measure1 : num 2 1.6 2.2 2.7 1.8 1.8 4 4 3.9 -3.7 ...
$ measure2 : num 0.9 0.1 0 0.4 -1 -1.3 2.1 0 -1.1 -3.9 ...
$ measure3 : num 1.1 1.1 2.2 1.2 1.9 1.2 0 3 1.9 -3.8 ...
$ measurre4: num 2 2 2 3 3 2 3 4 3 2.36 ...
$ group : int 0 0 0 0 0 0 0 0 0 0 ...
我明白了:
mannwhitney(dat,measure1,group)
Error in `[[<-.data.frame`(`*tmp*`,"grp1.label",value = character(0)) :
replacement has 0 rows,data has 1
考虑您的团队:
dat$group = factor(dat$group)
mannwhitney(dat,group)
# Mann-Whitney-U-Test
Groups 1 = 0 (n = 110) | 2 = 1 (n = 190):
U = 16913.000,W = 10808.000,p = 0.621,Z = 0.495
effect-size r = 0.029
rank-mean(1) = 153.75
rank-mean(2) = 148.62
阅读code,错误来自于此:
labels <- sjlabelled::get_labels(grp,attr.only = F,values = NULL,non.labelled = T)
如果您的组是数字组,则它没有属性,因此您没有标签:
sjlabelled::get_labels(0:1)
NULL
sjlabelled::get_labels(factor(0:1))
[1] "0" "1"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。