1
votes

I'm looking for help on performing the Kruskal-Wallis test on my set of data for a large number of factors. I can perform the test for a single factor, like AD_1yr:

kruskal.test(Shannon ~ AD_1y, data=comm)

But I have over 50 factors I want to test, and was hoping there is a code I can enter that will perform the test for all the factors without having to manually perform the test 50 different times.

1
N.B. you may want to consider some type of correction calculation since you are making multiple comparisons.JasonAizkalns

1 Answers

2
votes

We can use lapply to loop over the factor columns, create a data.frame with the 'shannon' column and do the kruskal.test

allfactorcolumns <- sapply(comm, is.factor)
lst <- lapply(comm[allfactorcolumns], function(x) 
    kruskal.test(Shannon~., data= data.frame(x, comm['Shannon'])))

If we need to extract the 'p.value', 'df', etc.

do.call(rbind, lapply(lst, function(x) data.frame(Pval= x$p.value, 
                     stat= x$statistic, df= x$parameter)))