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 值的数量

关于如何将动态 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"