Wilcox.test治疗前后的测量

时间:2018-09-06 19:02:22

标签: r

我是R的新手,可能没有经验确定这个问题是否与以前的帖子密切相关。如果是这样,请接受我的道歉。

我有之前和之后的措施(分别为X0variablename和X1variablename)。变量是我导入的.CSV数据集中的列。我对每个变量有11个观察值,并想测试是否存在实际差异(meadian是使用describe fct(心理包)来计算的。)

我的数据集中的某些列不适合此测试,因此我手动编写了所有列:

changeipss <- wilcox.test(mydata$X0ipss, mydata$X1ipss)
changeipss

changeqol <- wilcox.test(mydata$X0qol, mydata$X1qol)
changeqol

changeiief <- wilcox.test(mydata$X0iief, mydata$X1oiief)
changeiief

changepsa <- wilcox.test(mydata$X0psa, mydata$X1psa)
changepsa

changeqmax <- wilcox.test(mydata$X0qmax, mydata$X1qmax)
changeqmax

changepvr <- wilcox.test(mydata$X0pvr, mydata$X1pvr)
changepvr

changepv <- wilcox.test(mydata$X0pv, mydata$X1pv)
changepv

changeflow <- wilcox.test(mydata$X0ct_perfusion_flow, mydata$X1ct_perfusion_flow)
changeflow

changectpv <- wilcox.test(mydata$X0pvct, mydata$X1pvct)
changectpv

这将是正确的方法吗?对于一些变量,我明白了

  

警告消息:在wilcox.test.default中(mydata $ X0ipss,mydata $ X1ipss)   :无法计算具有联系的精确p值

2 个答案:

答案 0 :(得分:0)

如果数据中有两个相同的值,则这些值称为联系。建立联系后,排名不再是唯一的,因此您无法计算出准确的p值。

还请记住,Wilcoxon检验还假定分布是非偏斜的。这意味着它仅适用于成对的两个样本案例(“带符号秩”)或单个样本案例。

通常,如果要进行对称性测试,如果关系有限,则不必担心,但请重新检查数据的外观。这是警告,不是错误消息。 (您得到的答案只是警告,它表明您可能对数据类型使用了错误的测试,而答案可能并非您要查找的内容)

也可以根据需要在R中检出coin程序包,该程序包具有wilcox_test函数,可以在存在联系的情况下计算出准确的p值

答案 1 :(得分:0)

请考虑将数据帧拆分为所有 X0 X1 变量,然后运行popen()(或其包装,mapply)。这样一来,您就可以将类似的对象保留在容器中(列表,矩阵,数据框等),而不会使单个变量淹没您的全局环境并需要繁琐的单个分配。

此外,如您所见,某些变量不能正确地通过Map运行,为此考虑将调用包装在wilcox.test中,以输出那些失败实例的tryCatch

NA

数据

# SUBSET ONLY X0 VARIABLES
mydata_X0 <- mydata[grep("X0", names(mydata))]
# ORDER COLUMNS
mydata_X0 <- mydata_X0[order(names(mydata_X0))]

# SUBSET ONLY X0 VARIABLES
mydata_X1 <- mydata[grep("X1", names(mydata))]
# ORDER COLUMNS
mydata_X1 <- mydata_X1[order(names(mydata_X1))]

# TRY/CATCH WRAPPER TO wilcox.test
wilcox_test_proc <- function(x, y) {
  tryCatch(wilcox.test(x, y),
           error = function(e) NA)
}

# SIMPLIFIED VERSION
wilcox_test_matrix <- mapply(wilcox_test_proc, mydata_X0, mydata_X1)

# LIST VERSION
wilcox_test_list <- Map(wilcox_test_proc, mydata_X0, mydata_X1)

输出

set.seed(962018)
mydata <- setNames(data.frame(replicate(18, runif(50))),
                   c("X0ipss", "X0quo", "X0oiief", "X0psa", "X0qmax", 
                     "X0pvr", "X0pv", "X0ct_perfusion_flow", "X0pvct",
                     "X1ipss", "X1quo", "X1oiief", "X1psa", "X1qmax", 
                     "X1pvr", "X1pv", "X1ct_perfusion_flow", "X1pvct"))