I'm trying to obtain the compact letters associated with the p values I generated with the function pairwise.wilcox.test(). I used the function multcompLetters() which works well, but I want the letters to be ordered so that the highest mean gets the letter "a". In the following example, while using the function multcompLetters() to get the letters ordered, I receive the warning : "Error in tapply(data[, fm[[1]]], data[, fm[[2]]], function(x) do.call(mean, : arguments must have same length".
Is there something I don't understand with the usage of the function ?
Thanks a lot.
Adding data frame
As15 <- structure(list(Community = c("Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat", "Arviat",
"Arviat", "Arviat", "Arviat", "Nain", "Nain", "Nain", "Nain",
"Nain", "Nain", "Nain", "Nain", "Nain", "Nain", "Nain", "Nain",
"Nain", "Nain", "Nain", "Nain", "Nain", "Nain", "Nain", "Nain",
"Nain", "Nain", "Nain", "Nain", "Nain", "Nain", "Nain", "Nain",
"Nain", "Nain", "Nain", "Nain", "Nain", "Nain", "Nain", "Nain",
"Nain", "Nain", "Nain", "Nain", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "Resolute", "Resolute", "Resolute",
"Resolute", "Resolute", "Resolute", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour", "SachsHarbour",
"SachsHarbour", "SachsHarbour", "SachsHarbour"), ArsenicD = c(0.0254,
0.121, 0.0726, 0.021, 0.0782, 0.0538, 0.1078, 0.0454, 0.0368,
0.0618, 0.037, 0.0754, 0.1394, 0.0784, 0.218, 0.1482, 0.0778,
0.0592, 0.0314, 0.0232, 0.0548, 0.0662, 0.0604, 0.0252, 0.0502,
0.0768, 0.036, 0.054, 0.0404, 0.0642, 0.0384, 0.0504, 0.0616,
0.068, 0.0678, 0.06, 0.0526, 0.0454, 0.0574, 0.0462, 0.0558,
0.0506, 0.0764, 0.0466, 0.0518, 0.0544, 0.0362, 0.0472, 0.0374,
0.0564, 0.0512, 0.0442, 0.0526, 0.05, 0.047, 0.0456, 0.073, 0.0798,
0.0544, 0.072, 0.0392, 0.0658, 0.1662, 0.036, 0.0562, 0.0584,
0.0416, 0.037, 0.046, 0.0334, 0.0384, 0.0654, 0.0528, 0.0274,
0.0368, 0.0634, 0.0308, 0.0702, 0.0502, 0.058, 0.037, 0.0456,
0.0404, 0.0516, 0.051, 0.0484, 0.054, 0.0344, 0.064, 0.0548,
0.032, 0.0532, 0.0562, 0.0464, 0.0334, 0.068, 0.0422, 0.298,
0.0344, 0.0338, 0.0508, 0.0356, 0.0446, 0.0484, 0.0408, 0.0148,
0.0374, 0.0244, 0.0644, 0.0574, 0.028, 0.0462, 0.067, 0.0472,
0.053, 0.0418, 0.0324, 0.054, 0.04, 0.0506, 0.0592, 0.0356, 0.049,
0.054, 0.296, 0.276, 0.226, 0.0834, 0.452, 0.306, 0.218, 0.33,
0.208, 0.1628, 0.426, 0.376, 0.0894, 0.438, 0.334, 0.212, 0.1606,
0.082, 0.1178, 0.1128, 0.142, 0.103, 0.0862, 0.1104, 0.0746,
0.0954, 0.202, 0.1362, 0.24, 0.21, 0.172, 0.278, 0.1354, 0.274,
0.228, 0.0854, 0.0924, 0.0992, 0.0648, 0.0548, 0.0768, 0.0996,
0.1008, 0.063, 0.0372, 0.1582, 0.228, 0.1514, 0.218, 0.1612,
0.1608, 0.1652, 0.1474, 0.1904, 0.0396, 0.1396, 0.0816, 0.1132,
0.0968, 1.258, 0.326, 0.236, 0.0854, 0.256, 0.1258, 0.1324, 0.1716,
0.1642, 0.22, 0.0836, 0.18, 0.274, 0.1918, 0.171, 0.356, 0.298,
0.1084, 0.1436, 0.238, 0.348, 0.1496, 0.342, 0.434, 0.146, 0.174,
0.288, 0.396, 0.1834, 0.64, 0.342, 0.686, 0.43, 0.1808, 0.454,
0.482, 0.352, 0.476, 0.422, 0.286, 0.81, 0.656, 0.564, 0.119,
0.296, 0.1778, 0.512, 0.278, 0.22, 0.208, 0.1474, 0.55, 0.1526,
0.1858, 0.128, 0.224, 0.1752, 0.0724, 0.1302, 0.1724, 0.1354,
0.104, 0.1132, 0.292, 0.238, 0.348, 0.1626, 0.312, 0.238, 0.236,
0.1276, 0.1228, 0.0978, 0.376, 0.1968, 0.1164, 0.448, 0.2, 0.1322,
0.117)), row.names = c(NA, -263L), class = c("tbl_df", "tbl",
"data.frame"))
Wilcoxon Test
As15Wilcox <- suppressWarnings(pairwise.wilcox.test(As15$ArsenicD, As15$Community, p.adjust.method = "BH"))
As15pvals <- c(na.omit(setNames(c(As15Wilcox$p.value),
do.call("paste", c(as.list(expand.grid(rownames(As15Wilcox$p.value),
colnames(As15Wilcox$p.value))), sep = "-")))))
Obtaining Letters
multcompLetters2(ArsenicD ~ Community, As15pvals, As15)
I verified with length(), and both ArsenicD and Community possess the same length.
It's not clear why you think you can pass the output of
pairwise.wilcox.test
to the second argument ofmultcompLetters2
(the parameterx
). According to the docs:...whereas
wilcox1
is an object of class"pairwise.htest"
.However, it does contain a matrix of p values of the comparisons, which we can convert into one of the above formats. Let's demonstrate with a dataset similar to yours.
Using your code, we get an error:
Let us take the p values from our
wilcox1
object and convert to a named vector with the correct pair names:And now we can do:
Data used
Obviously, we don't have your data, so here is a reproducible example with the same names and basic structure that I used for this example:
Created on 2023-07-26 with reprex v2.0.2