From dd0df83fbd6d93ffcf3911c033ac7ab2a606dfb3 Mon Sep 17 00:00:00 2001
From: Walmes Zeviani <walmes@ufpr.br>
Date: Fri, 6 Aug 2021 13:35:58 -0300
Subject: [PATCH] Adds content about non parametric analysis.

---
 analise-nao-parametrica.Rmd | 103 ++++++++++++++++++++++++++++++++++++
 1 file changed, 103 insertions(+)

diff --git a/analise-nao-parametrica.Rmd b/analise-nao-parametrica.Rmd
index 4813033..42969e8 100644
--- a/analise-nao-parametrica.Rmd
+++ b/analise-nao-parametrica.Rmd
@@ -76,3 +76,106 @@ aggregate(breaks ~ trt,
           FUN = mean)
 
 ```
+
+
+```{r}
+# Solução baseada no arquivo `compact_letter_display.r` no tópico abaixo
+# https://www.researchgate.net/post/How_to_denote_the_letters_in_mean_on_the_basis_of_p_value_in_R-console
+
+library(dunn.test)
+ls("package:dunn.test")
+
+# Documentação da função.
+help(dunn.test, help_type = "html")
+
+# Um conjunto de dados para usar.
+str(chickwts)
+
+# Ajusta o modelo.
+m0 <- lm(weight ~ feed, data = chickwts)
+anova(m0)
+
+# Aplica o teste de Dunn.
+dunn <- with(chickwts,
+             dunn.test(weight, feed, method = "sidak"))
+str(dunn)
+
+# NOTE: o teste dá a matriz de p-valores para os contrastes par a par.
+# Como obter o resumo compacto por letras?
+
+# Criar a matriz com os p-valores.
+k <- nlevels(chickwts$feed)
+pval_matrix <- matrix(0, nrow = k, ncol = k)
+pval_matrix[upper.tri(pval_matrix)] <- dunn$P.adjusted
+pval_matrix <- t(pval_matrix)
+pval_matrix[upper.tri(pval_matrix)] <- dunn$P.adjusted
+diag(pval_matrix) <- NA
+colnames(pval_matrix) <- levels(chickwts$feed)
+rownames(pval_matrix) <- levels(chickwts$feed)
+
+
+# Onde estão as diferenças?
+round(pval_matrix, digits = 5)
+(pval_matrix < 0.05) * 1
+
+library(multcompView)
+
+# Determina das letras.
+cld <- multcompLetters(pval_matrix,
+                       compare = "<",
+                       threshold = 0.05,
+                       Letters = letters,
+                       reversed = FALSE)
+cld
+
+# Organiza em uma tabela.
+cld <- data.frame(feed = names(cld$Letters),
+                  cld = unname(cld$Letters))
+cld
+
+# Junta com a médias.
+tb_means <- aggregate(weight ~ feed, data = chickwts, FUN = mean)
+tb_means <- merge(tb_means, cld, by = "feed")
+tb_means <- tb_means[order(tb_means$weight), ]
+
+# Letras diferentes, rejeita hipótese nula de que o contraste é 0. Dá
+# para ordenar as letras.
+
+source("https://raw.githubusercontent.com/walmes/wzRfun/master/R/pairwise.R")
+
+# Ordena as letras para facilitar.
+tb_means$cld_fix <- with(tb_means,
+                         ordered_cld(let = cld, means = weight))
+tb_means
+
+# DONE!
+
+# Tem como fazer de outro jeito sem gerar a matriz de p-valores.
+dunn_pairs <- dunn$P.adjusted
+names(dunn_pairs) <- dunn$comparisons
+
+# Ajusta o modelo.
+m0 <- lm(weight ~ feed, data = chickwts)
+anova(m0)
+
+# Teste de Tukey.
+tk <- TukeyHSD(aov(m0))
+tk
+
+tk_pairs <- tk[[1]][, "p adj"]
+
+library(multcompView)
+multcompLetters(tk_pairs)
+
+str(dunn)
+dunn_pairs <- dunn$P.adjusted
+names(dunn_pairs) <- dunn$comparisons
+
+# Tem que inverter os nomes no contraste: "A - B" --> "B-A".
+dunn_pairs <- dunn$P.adjusted
+names(dunn_pairs) <- gsub(x = dunn$comparisons,
+                          pattern = "^(.*) - (.*)$",
+                          replacement = "\\2-\\1")
+multcompLetters(dunn_pairs)
+```
+
-- 
GitLab