É um teste não-paramétrico que funciona como alternativa ao teste ANOVA de uma via (one-way).
Usamos o teste de Kruskal-Wallis quando as suposições da ANOVA não são satisfeitas.
library(tidyverse)
library(ggpubr)
library(rstatix)
Vamos usar uma base de dados chamada FilmData
, com as seguintes informações:
Gross: ganho em dólar
Gross.Dom: ganho doméstico em dólar
Pct.Dom: porcentagem de ganho doméstico
Gross.Ovr: ganho internacional em dólar
Pct.Ovr: porcentagem de ganho internacional
Rotten: “tomate podre” (Rotten, em inglês) porcentagem de críticas positivas. https://tecnoblog.net/371401/como-funcionam-as-notas-do-rotten-tomatoes-tomatometer/
IMDB: Uma espécie de “nota” dada ao filme pela crítica. (varia de 1 a 10)
Rating: Classificação etária do filme https://en.wikipedia.org/wiki/Motion_Picture_Association_film_rating_system
Days: dias que passou no cinema
Budget: orçamento do filme em milhões de dólares americanos
library(readxl)
FilmData <- read_excel("FilmData.xlsx")
glimpse(FilmData)
## Rows: 151
## Columns: 15
## $ Rank <dbl> 1, 2, 4, 8, 9, 13, 15, 16, 17, 18, 20, 22, 23, 27, 28, 29, 3…
## $ Film <chr> "Avatar", "Titanic", "Harry Potter and the Deathly Hallows P…
## $ Studio <chr> "Fox", "Par.", "WB", "Sony", "WB", "Fox", "WB", "WB", "WB", …
## $ Genre <chr> "Action/Adventure", "Drama", "Action/Adventure", "Action/Adv…
## $ Year <dbl> 2009, 1997, 2011, 2012, 2012, 1999, 2012, 2008, 2001, 1993, …
## $ Gross <dbl> 2782300000, 2185400000, 1341500000, 1108600000, 1084400000, …
## $ Gross.Dom <dbl> 760500000, 658700000, 381000000, 304400000, 448100000, 47450…
## $ Pct.Dom <dbl> 0.273, 0.301, 0.284, 0.275, 0.413, 0.462, 0.298, 0.532, 0.32…
## $ Gross.Ovr <dbl> 2021800000, 1526700000, 960500000, 804200000, 636300000, 552…
## $ Pct.Ovr <dbl> 0.727, 0.699, 0.716, 0.725, 0.587, 0.538, 0.702, 0.468, 0.67…
## $ Rotten <dbl> 83, 88, 96, 92, 87, 57, 65, 94, 80, 92, 78, 79, 84, 87, 63, …
## $ IMDB <dbl> 8.0, 7.6, 8.1, 7.8, 8.6, 6.5, 8.1, 9.0, 7.3, 8.0, 7.6, 7.4, …
## $ Rating <chr> "PG13", "PG13", "PG13", "PG13", "PG13", "PG", "PG13", "PG13"…
## $ Days <dbl> 238, 219, 133, 122, 147, 261, 133, 231, 162, 147, 140, 156, …
## $ Budget <dbl> 237.0, 200.0, 125.0, 200.0, 250.0, 115.0, 180.0, 185.0, 125.…
dados <- FilmData
O número de dias (
Days
) que os filmes passam em cartaz nos cinemas, é diferente para cada gênero (Genre
) de filme?
dados %>%
group_by(Genre) %>%
get_summary_stats(Days, type = "full")
ggboxplot(dados, x = "Genre", y = "Days")
dados %>%
group_by(Genre) %>%
shapiro_test(Days)
dados %>%
kruskal_test(Days ~ Genre)
Como o p-valor é maior que 0.05 (p = 0.262), podemos dizer que não há evidências para afirmar que um certo gênero de filme passa mais dias no cinema em relação aos outros.
Caso a diferença fosse estatisticamente significativa, teríamos mais um passo na análise, que seria a comaparação dois a dois, chamada de teste post-hoc. O teste de Dunn com correção de Bonferroni é geralmente usado nestas comaprações dois a dois.
dados %>%
dunn_test(Days ~ Genre, p.adjust.method = "bonferroni")
O tamanho do efeito para o teste de Kruskal-Wallis é chamado de \(\eta^2[H]\), em que H é o valor obtido pelo teste de Kruskal-Wallis.
Interpretação dos calores comumentes publicados na literatura:
0.01 - < 0.06
(efeito pequeno)
0.06 - < 0.14
(efeito moderado)
>= 0.14
(efeito grande).
dados %>%
kruskal_effsize(Days ~ Genre)
Não foi encontrada diferença estatisticamente significativa para o número de dias no cinema segundo o gênero do filme (p = 0.262, \(\eta^2\) = 0.007 teste de Kruskal-Wallis). Filmes de ação e aventura apresentam uma mediana de 135 dias (IQR: 114, 158); filmes de animação apresentam uma mediana de 148 dias (IQR: 145, 174), filmes de comédia apresentam uma mediana de 135 dias (IQR: 113, 149), e filmes de drama apresentam uma mediana de 120 dias (IQR: 119, 143).
O teste de Friedman é uma alternativa não paramétrica para o teste ANOVA de uma via com medidas repetidas.
O teste de Friedman é usado para verificar s ehá qualquer diferença estatisticmente significativa entre as distribuições de 3 ou mais grupos pareados.
É recomendado quando as susposições de normalidade do teste da ANOVA de medidas reperitdas não são satisfeitas ou quandoa variável dependente é medida numa escala ordinal.
library(datarium)
library(tidyverse)
library(ggpubr)
library(rstatix)
library(readr)
RoundingTimes <- read_csv("RoundingTimes.csv")
df <- RoundingTimes
id
:df <- df %>%
mutate(id = 1:22)
glimpse(df)
## Rows: 22
## Columns: 4
## $ Round.Out <dbl> 5.40, 5.85, 5.20, 5.55, 5.90, 5.45, 5.40, 5.45, 5.25, 5.8…
## $ Narrow.Angle <dbl> 5.50, 5.70, 5.60, 5.50, 5.85, 5.55, 5.40, 5.50, 5.15, 5.8…
## $ Wide.Angle <dbl> 5.55, 5.75, 5.50, 5.40, 5.70, 5.60, 5.35, 5.35, 5.00, 5.7…
## $ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17…
A base de dados contém a comapração de 3 métodos de rebatidas no baseball (“round out”, “narrow angle”, “wide angle”) para a primeira base. Para cada um dos 22 jogadores é registrado o tempo médio de duas corridas de um ponto na primeira linha de base a 35 pés da placa base até um ponto de 15 pés da segunda base.
Transformando para o formato longo:
df2 <- df %>%
gather(key = "tipo_rebatida", value = "tempo", Round.Out , Narrow.Angle, Wide.Angle) %>%
convert_as_factor(id, tipo_rebatida)
glimpse(df2)
## Rows: 66
## Columns: 3
## $ id <fct> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1…
## $ tipo_rebatida <fct> Round.Out, Round.Out, Round.Out, Round.Out, Round.Out, R…
## $ tempo <dbl> 5.40, 5.85, 5.20, 5.55, 5.90, 5.45, 5.40, 5.45, 5.25, 5.…
head(df2)
estatisticas_resumo <- df2 %>%
group_by(tipo_rebatida) %>%
get_summary_stats(tempo, type = "full")
estatisticas_resumo
df2 %>%
ggboxplot(x = "tipo_rebatida", y = "tempo", add = "jitter", bxp.errorbar = TRUE)
df2 %>%
group_by(tipo_rebatida) %>%
shapiro_test(tempo)
resposta_friedman <- df2 %>%
friedman_test(tempo ~ tipo_rebatida | id)
resposta_friedman
O tempo de corrida dos jogadores foi estatisticamente diferente para cada tipo de rebatida (p = 0.004).
O tamanho do efeito para o teste de Friedman é chamdo W de Kendall.
O W de Kendall assume valores de 0 (indicando que não há relação) até 1 (indicando uma relação perfeita)
Valores:
0.1 - < 0.3: Efeito pequeno
0.3 - < 0.5: Efeito moderado
>= 0.5: Efeito grande
df2 %>%
friedman_effsize(tempo ~ tipo_rebatida | id)
O tamanho do efeito é pequeno, W = 0.253.
O teste de Friedman identificou diferença significativa entre os grupos.
Agora, devemos fazer comparações dois a dois usando o teste de postos de Wilcoxon para identificar que grupos são diferentes:
teste_post_hoc <- df2 %>%
wilcox_test(tempo ~ tipo_rebatida, paired = TRUE, p.adjust.method = "bonferroni")
teste_post_hoc
Os tipos de rebatida Narrow.Angle e Round.Out são os únicos que não apresentam diferença significativa nos tempos entre si.
teste_post_hoc <- teste_post_hoc %>%
add_xy_position(x = "tipo_rebatida")
teste_post_hoc$y.position <- c(7, 6.6, 6.5)
ggboxplot(df2, x = "tipo_rebatida",
y = "tempo",
add = "jitter",
bxp.errorbar = TRUE) +
stat_pvalue_manual(teste_post_hoc, hide.ns = TRUE) +
labs(
subtitle = get_test_label(resposta_friedman, type = "expression", detailed = TRUE),
caption = get_pwc_label(teste_post_hoc, type = "expression"),
x = "Tipo de rebatida", y = "Tempo (s)"
)
O tempo de corrida foi estatisticamente diferente para os tipos de rebatida (Teste de Friedman, \(\chi^2(2) = 18.2\), p = 0.004). Nas comparações dois a dois o tempo de corrida foi estatisticamente diferente para as rebatidas Narrow Angle e Wide Angle (p = 0.006), e entre Round Out e Wide Angle (p = 0.044). O tempo mediano de corrida para a rebatida Narrow Angle foi de 5.52 segundos (IQR: 5.46, 5.6); para Round Out, este tempo foi de 5.5 segundos (IQR: 5.46, 5.6) e para Wide Angle, o tempo mediano foi de 5.45 segundos (IQR: 5.35, 5.55), sendo o menor tempo mediano registrado.