如何在R中的多个变量上运行Kruskal并发布HOC?

时间:2019-05-13 16:55:40

标签: r loops formula anova

如果我是该网站的新手,如果我没有正确格式化我的代码,请原谅。我也不知道如何正确提供样本数据。

我的数据集为42 obs。非正态分布数据的37个变量(第一列为组,3组);我想比较这三个组之间的所有36个参数,并进行后续事后分析(pairwise.wilcox?)。

数据是三个不同患者组的流通池计数。我已经能够执行初始比较,创建一个公式并运行aov(尽管我想做Kruskal),但是还没有找到一种以相同方式对所有变量进行事后分析的方法。

#Data
    Type   Neutrophils  Monocytes   NKC .....
    ------------------------------------------
    IN       546          2663      545
    IN       0797         7979      008
    OUT      0899         3899      345
    OUT      6868         44533     689
    HC       9898         43443     563


#Cbind all variable together to run model on all
    formula <- as.formula(paste0("cbind(", paste(names(LessCount)[-1], 
       collapse = ","), ") ~ Type"))
    print(formula)

#Run test on model
    fit <- aov(formula, data=LessCount)

#Print results
    summary(fit)

 Response Neutrophils :
            Df    Sum Sq Mean Sq F value Pr(>F)
Type         2  18173966 9086983  1.8099 0.1771
Residuals   39 195806220 5020672               

 Response Monocytes :
            Df   Sum Sq Mean Sq F value Pr(>F)
Type         2   694945  347472  0.7131 0.4964
Residuals   39 19004809  487303               

 Response Mono.Classic :
            Df   Sum Sq Mean Sq F value  Pr(>F)  
Type         2  1561778  780889  2.5842 0.08833 .
Residuals   39 11785116  302182  

###export anova####
    capture.output(summary(fit),file="test1.csv")

#If Significant,Check which# (currently doing by hand individually)
    pairwise.wilcox.test(LessCount$pDCs, LessCount$Type,
                     p.adjust.method = "BH")

我在表中找到控制台中每个变量的aov结果,但由于我需要每个p值,因此想对post hoc做同样的事情。

谢谢。

1 个答案:

答案 0 :(得分:0)

也许您可以直接使用函数kruskal.test()并获取p.values。

这里是虹膜数据集的示例。我使用函数apply()来将kruskal.test函数应用于每个变量(物种除外,后者是具有组信息的变量)。

data(iris)
apply(iris[-5], 2, function(x) kruskal.test(x = x, g = iris$Species)$p.value)

# Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
# 8.918734e-22 1.569282e-14 4.803974e-29 3.261796e-29