I have performed a pairwise Dunns test on a heavily nested interaction model. I am looking at a model for the interaction between season (Summer and Winter), site (Beggers, Noss, Looe) and height (Low, Mid) testing whether there are significant differences in Metabolic Feature intensities.
The results are good. I have then Manually assigned letters of signficance to illustrate differences within a bubble plot, where shared letters indicate no significant difference (p>0.05) and where they do not share a letter it indicates a significant difference (p<0.05). This is what I got :
Winter Looe Mid = B E F G I
Summer Beggers Low = A B E
Summer Beggers Mid = B E
Summer Noss Low = B C H
Summer Noss Mid = C
Summer Looe Low = C
Summer Looe Mid = C
Winter Beggers Low = D I
Winter Beggers Mid = D E
Winter Noss Low = A D F
Winter Noss Mid = D G
Winter Looe Low = B E F H
I have over 50 features I want to do the same with, and also want to ensure there is no redundancy, therefore i attempted to utilise CldList () to perform this for me. But it is not working, and i cannot figure out why. This is the result I get :
1 Summer.Beggers.Low = abcd
2 Summer.Beggers.Mid = abcd
3 Summer.Looe.Low = a
4 Summer.Looe.Mid = a
5 Summer.Noss.Low = abc
6 Summer.Noss.Mid = ab
7 Winter.Beggers.Low = d
8 Winter.Beggers.Mid = bcd
9 Winter.Looe.Low = abcd
10 Winter.Looe.Mid = cd
11 Winter.Noss.Low = cd
12 Winter.Noss.Mid = d
This is not correct at all.
Here is my code for it, Hope someone can help or tell me it is not possible and that this must be done manually.
data$season_site_height_interaction <- interaction(data$season, data$site, data$height)
Pyropheo.a.dunn_season_site_height <- dunn.test(data$Pyropheo.a, data$season_site_height_interaction, kw = F, label = TRUE, wrap = TRUE, list=T, altp = TRUE, method = "holm")
dunn_df <- data.frame(Comparison = paste(Pyropheo.a.dunn_season_site_height$comparisons), P.adj = Pyropheo.a.dunn_season_site_height$altP.adjusted)
dunn_df$Comparison <- gsub("\\s+", " ", dunn_df$Comparison)
dunn_df$Comparison <- gsub("^\\s+|\\s+$", "",dunn_df$Comparison)
print(head(dunn_df$Comparison))
Pyropheo.a.cld <- cldList(p.value = dunn_df$P.adj,comparison = dunn_df$Comparison,threshold = 0.05)
print(Pyropheo.a.cld)
Many thanks,
Graham.
Attachments:
Dunn Table
Comparison P.adj
1 Summer.Beggers.Low - Summer.Beggers.Mid 1.000000e+00
2 Summer.Beggers.Low - Summer.Looe.Low 5.330133e-01
3 Summer.Beggers.Mid - Summer.Looe.Low 6.032026e-01
4 Summer.Beggers.Low - Summer.Looe.Mid 4.274224e-01
5 Summer.Beggers.Mid - Summer.Looe.Mid 4.793953e-01
6 Summer.Looe.Low - Summer.Looe.Mid 1.000000e+00
7 Summer.Beggers.Low - Summer.Noss.Low 1.000000e+00
8 Summer.Beggers.Mid - Summer.Noss.Low 1.000000e+00
9 Summer.Looe.Low - Summer.Noss.Low 1.000000e+00
10 Summer.Looe.Mid - Summer.Noss.Low 1.000000e+00
11 Summer.Beggers.Low - Summer.Noss.Mid 1.000000e+00
12 Summer.Beggers.Mid - Summer.Noss.Mid 1.000000e+00
13 Summer.Looe.Low - Summer.Noss.Mid 1.000000e+00
14 Summer.Looe.Mid - Summer.Noss.Mid 1.000000e+00
15 Summer.Noss.Low - Summer.Noss.Mid 1.000000e+00
16 Summer.Beggers.Low - Winter.Beggers.Low 7.406965e-01
17 Summer.Beggers.Mid - Winter.Beggers.Low 6.558980e-01
18 Summer.Looe.Low - Winter.Beggers.Low 1.519886e-04
19 Summer.Looe.Mid - Winter.Beggers.Low 5.850498e-05
20 Summer.Noss.Low - Winter.Beggers.Low 1.443449e-02
21 Summer.Noss.Mid - Winter.Beggers.Low 6.500403e-04
22 Summer.Beggers.Low - Winter.Beggers.Mid 1.000000e+00
23 Summer.Beggers.Mid - Winter.Beggers.Mid 1.000000e+00
24 Summer.Looe.Low - Winter.Beggers.Mid 1.638955e-02
25 Summer.Looe.Mid - Winter.Beggers.Mid 9.319515e-03
26 Summer.Noss.Low - Winter.Beggers.Mid 5.339778e-01
27 Summer.Noss.Mid - Winter.Beggers.Mid 5.745214e-02
28 Winter.Beggers.Low - Winter.Beggers.Mid 1.000000e+00
29 Summer.Beggers.Low - Winter.Looe.Low 9.836811e-01
30 Summer.Beggers.Mid - Winter.Looe.Low 1.000000e+00
31 Summer.Looe.Low - Winter.Looe.Low 6.640483e-01
32 Summer.Looe.Mid - Winter.Looe.Low 5.308907e-01
33 Summer.Noss.Low - Winter.Looe.Low 1.000000e+00
34 Summer.Noss.Mid - Winter.Looe.Low 1.000000e+00
35 Winter.Beggers.Low - Winter.Looe.Low 8.389091e-01
36 Winter.Beggers.Mid - Winter.Looe.Low 1.000000e+00
37 Summer.Beggers.Low - Winter.Looe.Mid 1.000000e+00
38 Summer.Beggers.Mid - Winter.Looe.Mid 1.000000e+00
39 Summer.Looe.Low - Winter.Looe.Mid 1.244590e-02
40 Summer.Looe.Mid - Winter.Looe.Mid 6.777016e-03
41 Summer.Noss.Low - Winter.Looe.Mid 4.409884e-01
42 Summer.Noss.Mid - Winter.Looe.Mid 4.356509e-02
43 Winter.Beggers.Low - Winter.Looe.Mid 1.000000e+00
44 Winter.Beggers.Mid - Winter.Looe.Mid 1.000000e+00
45 Winter.Looe.Low - Winter.Looe.Mid 1.000000e+00
46 Summer.Beggers.Low - Winter.Noss.Low 1.000000e+00
47 Summer.Beggers.Mid - Winter.Noss.Low 1.000000e+00
48 Summer.Looe.Low - Winter.Noss.Low 1.089087e-03
49 Summer.Looe.Mid - Winter.Noss.Low 5.143919e-04
50 Summer.Noss.Low - Winter.Noss.Low 6.109935e-02
51 Summer.Noss.Mid - Winter.Noss.Low 4.241540e-03
52 Winter.Beggers.Low - Winter.Noss.Low 1.000000e+00
53 Winter.Beggers.Mid - Winter.Noss.Low 1.000000e+00
54 Winter.Looe.Low - Winter.Noss.Low 1.000000e+00
55 Winter.Looe.Mid - Winter.Noss.Low 1.000000e+00
56 Summer.Beggers.Low - Winter.Noss.Mid 3.443992e-01
57 Summer.Beggers.Mid - Winter.Noss.Mid 2.974735e-01
58 Summer.Looe.Low - Winter.Noss.Mid 2.646228e-05
59 Summer.Looe.Mid - Winter.Noss.Mid 8.754537e-06
60 Summer.Noss.Low - Winter.Noss.Mid 3.579508e-03
61 Summer.Noss.Mid - Winter.Noss.Mid 1.185647e-04
62 Winter.Beggers.Low - Winter.Noss.Mid 1.000000e+00
63 Winter.Beggers.Mid - Winter.Noss.Mid 1.000000e+00
64 Winter.Looe.Low - Winter.Noss.Mid 4.151544e-01
65 Winter.Looe.Mid - Winter.Noss.Mid 1.000000e+00
66 Winter.Noss.Low - Winter.Noss.Mid 1.000000e+00
There appears to be something wrong in your manual results.
For example
2 'Summer.Beggers.Low - Summer.Looe.Low' 5.330133e-01
Your manual results have them significantly different (no shared letter), but they should not be different (have a shared letter).
For posterity, here is the code to create the compact letter display:
Data=read.table(header=TRUE, text="
Row Comparison pValue
1 'Summer.Beggers.Low - Summer.Beggers.Mid' 1.000000e+00
2 'Summer.Beggers.Low - Summer.Looe.Low' 5.330133e-01
3 'Summer.Beggers.Mid - Summer.Looe.Low' 6.032026e-01
4 'Summer.Beggers.Low - Summer.Looe.Mid' 4.274224e-01
5 'Summer.Beggers.Mid - Summer.Looe.Mid' 4.793953e-01
6 'Summer.Looe.Low - Summer.Looe.Mid' 1.000000e+00
7 'Summer.Beggers.Low - Summer.Noss.Low' 1.000000e+00
8 'Summer.Beggers.Mid - Summer.Noss.Low' 1.000000e+00
9 'Summer.Looe.Low - Summer.Noss.Low' 1.000000e+00
10 'Summer.Looe.Mid - Summer.Noss.Low' 1.000000e+00
11 'Summer.Beggers.Low - Summer.Noss.Mid' 1.000000e+00
12 'Summer.Beggers.Mid - Summer.Noss.Mid' 1.000000e+00
13 'Summer.Looe.Low - Summer.Noss.Mid' 1.000000e+00
14 'Summer.Looe.Mid - Summer.Noss.Mid' 1.000000e+00
15 'Summer.Noss.Low - Summer.Noss.Mid' 1.000000e+00
16 'Summer.Beggers.Low - Winter.Beggers.Low' 7.406965e-01
17 'Summer.Beggers.Mid - Winter.Beggers.Low' 6.558980e-01
18 'Summer.Looe.Low - Winter.Beggers.Low' 1.519886e-04
19 'Summer.Looe.Mid - Winter.Beggers.Low' 5.850498e-05
20 'Summer.Noss.Low - Winter.Beggers.Low' 1.443449e-02
21 'Summer.Noss.Mid - Winter.Beggers.Low' 6.500403e-04
22 'Summer.Beggers.Low - Winter.Beggers.Mid' 1.000000e+00
23 'Summer.Beggers.Mid - Winter.Beggers.Mid' 1.000000e+00
24 'Summer.Looe.Low - Winter.Beggers.Mid' 1.638955e-02
25 'Summer.Looe.Mid - Winter.Beggers.Mid' 9.319515e-03
26 'Summer.Noss.Low - Winter.Beggers.Mid' 5.339778e-01
27 'Summer.Noss.Mid - Winter.Beggers.Mid' 5.745214e-02
28 'Winter.Beggers.Low - Winter.Beggers.Mid' 1.000000e+00
29 'Summer.Beggers.Low - Winter.Looe.Low' 9.836811e-01
30 'Summer.Beggers.Mid - Winter.Looe.Low' 1.000000e+00
31 'Summer.Looe.Low - Winter.Looe.Low' 6.640483e-01
32 'Summer.Looe.Mid - Winter.Looe.Low' 5.308907e-01
33 'Summer.Noss.Low - Winter.Looe.Low' 1.000000e+00
34 'Summer.Noss.Mid - Winter.Looe.Low' 1.000000e+00
35 'Winter.Beggers.Low - Winter.Looe.Low' 8.389091e-01
36 'Winter.Beggers.Mid - Winter.Looe.Low' 1.000000e+00
37 'Summer.Beggers.Low - Winter.Looe.Mid' 1.000000e+00
38 'Summer.Beggers.Mid - Winter.Looe.Mid' 1.000000e+00
39 'Summer.Looe.Low - Winter.Looe.Mid' 1.244590e-02
40 'Summer.Looe.Mid - Winter.Looe.Mid' 6.777016e-03
41 'Summer.Noss.Low - Winter.Looe.Mid' 4.409884e-01
42 'Summer.Noss.Mid - Winter.Looe.Mid' 4.356509e-02
43 'Winter.Beggers.Low - Winter.Looe.Mid' 1.000000e+00
44 'Winter.Beggers.Mid - Winter.Looe.Mid' 1.000000e+00
45 'Winter.Looe.Low - Winter.Looe.Mid' 1.000000e+00
46 'Summer.Beggers.Low - Winter.Noss.Low' 1.000000e+00
47 'Summer.Beggers.Mid - Winter.Noss.Low' 1.000000e+00
48 'Summer.Looe.Low - Winter.Noss.Low' 1.089087e-03
49 'Summer.Looe.Mid - Winter.Noss.Low' 5.143919e-04
50 'Summer.Noss.Low - Winter.Noss.Low' 6.109935e-02
51 'Summer.Noss.Mid - Winter.Noss.Low' 4.241540e-03
52 'Winter.Beggers.Low - Winter.Noss.Low' 1.000000e+00
53 'Winter.Beggers.Mid - Winter.Noss.Low' 1.000000e+00
54 'Winter.Looe.Low - Winter.Noss.Low' 1.000000e+00
55 'Winter.Looe.Mid - Winter.Noss.Low' 1.000000e+00
56 'Summer.Beggers.Low - Winter.Noss.Mid' 3.443992e-01
57 'Summer.Beggers.Mid - Winter.Noss.Mid' 2.974735e-01
58 'Summer.Looe.Low - Winter.Noss.Mid' 2.646228e-05
59 'Summer.Looe.Mid - Winter.Noss.Mid' 8.754537e-06
60 'Summer.Noss.Low - Winter.Noss.Mid' 3.579508e-03
61 'Summer.Noss.Mid - Winter.Noss.Mid' 1.185647e-04
62 'Winter.Beggers.Low - Winter.Noss.Mid' 1.000000e+00
63 'Winter.Beggers.Mid - Winter.Noss.Mid' 1.000000e+00
64 'Winter.Looe.Low - Winter.Noss.Mid' 4.151544e-01
65 'Winter.Looe.Mid - Winter.Noss.Mid' 1.000000e+00
66 'Winter.Noss.Low - Winter.Noss.Mid' 1.000000e+00
")
library(rcompanion)
cldList(pValue ~ Comparison, data=Data)