O que teste t-pareado, modelos mistos e tidy data podem ter a ver? Veja neste post como a estrutura dos seus dados pode afetar a forma que você fará a sua análise.
Para começar, vamos relemebrar o que é tidy data para depois seguir ao ponto do post.
Tidy Data
Tidy data é um conceito introduzido pelo Hadley Wickham neste paper.
Esse paper é, para mim, o melhor artigo do Hadley. A primeira frase da definição cita Tolstói e diz:
Like families, tidy datasets are all alike but every messy dataset is messy in its own way.
Essa frase resume a vida de qualquer um que trabalha ou já trabalhou com análise de dados. O ponto mais importante do que significa tidy data também está neste primeiro parágrafo: são datasets em que a estrutura dos dados está ligada padronizadamente com o seu significado. A forma padronizada é:
- Cada variável é uma coluna de uma tabela
- Cada observação é uma linha de uma tabela
- Cada tipo de unidade observacional forma uma tabela
O exemplo cássico é o seguinte. Primeiro vamos ver um banco de dados desarrumado.
Pais | Idh2015 | Idh2014 |
---|---|---|
Brasil | 0.754 | 0.755 |
Argentina | 0.827 | 0.836 |
Chile | 0.847 | 0.832 |
Esse dataset está desarrumado pois existem duas colunas Idh2015 e Idh2014 que representam a mesma variável: IDH e uma variável implícita ANO, que também aparece nesta duas colunas. A forma tidy de representar este dataset seria:
Pais | ano | idh |
---|---|---|
Brasil | 2015 | 0.754 |
Argentina | 2015 | 0.827 |
Chile | 2015 | 0.847 |
Brasil | 2014 | 0.755 |
Argentina | 2014 | 0.836 |
Chile | 2014 | 0.832 |
O que isso tem a ver com …
… teste t-pareado ou com modelos mistos?
Suponha que queremos inferir se houve alguma mudança na média do IDH de um ano para o outro. Ou seja testar se a média do IDH de 2015 é diferente da média do IDH de 2014. Vamos considerar um banco de dados simulado:
set.seed(10201)
library(tidyverse)
df <- data_frame(
Pais = paste0("pais", 1:50),
Idh2014 = runif(50),
Idh2015 = Idh2014 + rnorm(50, mean = 0.1, sd = 0.025)
)
Uma forma de fazer isso é usar o teste t pareado que é ensinado nos cursos introdutórios de estatística. Basicamente o que ele faz é testar se a média da diferença entre o IDH2015 e o IDH 2014 é diferente de zero. Isso é diferente de um teste T usual, pois o teste t pareado ajusta o seu cálculo da variância para considerar que existem duas fontes de incerteza.
No R a forma mais natural de fazer isso é:
teste <- t.test(df$Idh2015, df$Idh2014, paired=TRUE)
Note que o nosso banco de dados está desarrumado e mesmo assim foi muito simples fazer esse teste no R. Agora vamos arrumar o banco de dados.
df <- df %>%
gather(ano, idh, -Pais) %>%
mutate(ano = parse_number(ano))
Agora para fazer o mesmo teste, poderíamos filtrar o banco de dados duas vezes, por exemplo:
t.test(df$idh[df$ano == 2015], df$idh[df$ano == 2014], paired = TRUE)
Paired t-test
data: df$idh[df$ano == 2015] and df$idh[df$ano == 2014]
t = 27.355, df = 49, p-value < 2.2e-16
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
0.09000554 0.10427822
sample estimates:
mean difference
0.09714188
Mas aí estamos voltando para a forma desarrumada para fazer o teste. Outra forma de fazer é considerar essa comparação de médias como um problema de regressão em que a suposição independência das observações não é válida, uma vez que dado um pais, com certeza existe relação entre o idh de 2014 e de 2015.
Vamos ajustar um modelo com efeitos aleatórios para esse problema e comparar os resultados.
library(nlme)
model <- lme(idh ~ as.factor(ano), random = ~1|Pais, data = df)
summary(model)
Linear mixed-effects model fit by REML
Data: df
AIC BIC logLik
-184.7518 -174.4119 96.37588
Random effects:
Formula: ~1 | Pais
(Intercept) Residual
StdDev: 0.3009017 0.01775584
Fixed effects: idh ~ as.factor(ano)
Value Std.Error DF t-value p-value
(Intercept) 0.4840132 0.04262795 49 11.35436 0
as.factor(ano)2015 0.0971419 0.00355117 49 27.35491 0
Correlation:
(Intr)
as.factor(ano)2015 -0.042
Standardized Within-Group Residuals:
Min Q1 Med Q3 Max
-1.88877771 -0.44544521 -0.01239249 0.39934207 1.84475543
Number of Observations: 100
Number of Groups: 50
Estamos interessados em comparar a significância do efeito fixo da variável ano nesse modelo com a do teste t-pareado. Veja que no caso a estatística T do testes é idêntica: 27.35.
Vimos que a forma como os dados estão estruturados no seu banco de dados pode influenciar a técnica utilizada para a sua análise. Se ele estivesse na forma desarrumada o mais natural seria aplicar um teste t pareado, se ele estivesse em formado tidy o natural seria usar um modelo misto. No seu paper, Hadley argumenta que a maioria dos softwares esperam que o seu banco de dados esteja arrumado no sentido de que cada variável é uma coluna e cada observação é uma linha.