Faltam normalidade e homocedasticidade: a transformação é necessária?

Aug 31 2020

Sou um estudante e sou muito novo nisso, então queria perguntar o que fazer. Eu tenho um conjunto de dados e um dos grupos não passou no teste de normalidade Shapiro-Wilk (valor p = 0,01), mas testando com resíduos do modelo tudo parece bem (valor p = 0,49). Outro problema é com a homocedasticidade porque mal passa no teste de Levene (p valor = 0,047) e no teste de Breusch-Pagan estudentizado (p valor = 0,089). Meu supervisor me disse que vou precisar normalizar e transformar a variável. Não posso usar a transformação de log porque alguns dos valores são 0 (e isso me dá -Inf, que não posso usar em outros testes), então fiz a transformação da raiz quadrada. Enquanto os valores de p nos testes de homocedasticidade melhoraram, os testes de normalidade dos valores de p pioraram. Portanto, minha pergunta era: preciso de um método de transformação diferente? Se sim, qual? Mas depois de ler mais um pouco, descobri que "... seus dados não precisam ser perfeitamente normais e homocedásticos; os testes paramétricos não são extremamente sensíveis a desvios de suas suposições." (McDonald, JH 2014. Handbook of Biological Statistics (3rd ed.) ). Então, as transformações são realmente necessárias neste caso?

Tudo o que fiz em detalhes (e em código R):

group <- c("Cw",  "Cw",  "Cw",  "Cw",  "Cw",  "Cw",  "Cw",  "Cw",  "Cw",  "Cw",  "Cw",  
           "Cw",  "Cw",  "Cw",  "Cw",  "Cp",  "Cp",  "Cp",  "Cp",  "Cp",  "Cp",  "Cp",  
           "Cp",  "Cp",  "Cp", "Cp",  "Cp",  "Cp",  "Cp",  "Cp",  "PET", "PET", "PET", 
           "PET", "PET", "PET", "PET", "PET", "PET", "PET", "PET", "PET", "PET", "PET",
           "PET", "PS",  "PS",  "PS",  "PS",  "PS", "PS",  "PS",  "PS",  "PS",  "PS",  
           "PS" , "PS",  "PS",  "PS",  "PS",  "PE",  "PE",  "PE",  "PE",  "PE",  "PE",  
           "PE",  "PE",  "PE",  "PE",  "PE",  "PE",  "PE",  "PE",  "PE")
y <- c(1.5, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 1.5, 0.5, 1.0, 0.5, 1.0, 1.0, 0.5, 
       1.0, 2.0, 0.5, 2.5, 1.5, 0.0, 1.0, 0.0, 2.0, 0.5, 0.5, 1.5, 1.0, 2.0, 0.5, 1.0, 
       2.0, 2.5, 1.5, 0.0, 2.0, 1.0, 1.5, 2.5, 1.5, 0.5, 1.0, 3.5, 2.0, 2.5, 3.0, 1.0, 
       3.0, 3.5, 1.5, 4.0, 1.5, 2.5, 3.5, 1.0, 2.0, 2.0, 2.0, 2.0, 2.5, 1.0, 2.5, 1.0,
       2.0, 0.5, 2.0, 2.5, 0.0, 0.5, 1.5, 0.5, 1.5, 1.0, 0.5)

mydata <- tibble(group, y) %>%
  dplyr::mutate(group = factor(group, ordered = FALSE))

mydata %>% 
  group_by(group) %>%
  dplyr::summarize(
    p_value = shapiro.test(y)$p.value, statistic = shapiro.test(y)$statistic
    )

model_anova <- lm(y ~ group, data = mydata)
residuals    <- residuals(model_anova)
ggdensity(residuals, fill = "grey", rug = TRUE)

shapiro_test(residuals)

rstatix::levene_test(y ~ group, data = mydata)

lmtest::bptest(model_anova)

Edit: Estou adicionando meus dados em um formato menos estranho para todos que não usam R

group y
"Cw" 1.5
"Cw" 0
"Cw" 1
"Cw" 1
"Cw" 1
"Cw" 1
"Cw" 1
"Cw" 1
"Cw" 0.5
"Cw" 1.5
"Cw" 0.5
"Cw" 1
"Cw" 0.5
"Cw" 1
"Cw" 1
"Cp" 0.5
"Cp" 1
"Cp" 2
"Cp" 0.5
"Cp" 2.5
"Cp" 1.5
"Cp" 0
"Cp" 1
"Cp" 0
"Cp" 2
"Cp" 0.5
"Cp" 0.5
"Cp" 1.5
"Cp" 1
"Cp" 2
"PET" 0.5
"PET" 1
"PET" 2
"PET" 2.5
"PET" 1.5
"PET" 0
"PET" 2
"PET" 1
"PET" 1.5
"PET" 2.5
"PET" 1.5
"PET" 0.5
"PET" 1
"PET" 3.5
"PET" 2
"PS" 2.5
"PS" 3
"PS" 1
"PS" 3
"PS" 3.5
"PS" 1.5
"PS" 4
"PS" 1.5
"PS" 2.5
"PS" 3.5
"PS" 1
"PS" 2
"PS" 2
"PS" 2
"PS" 2
"PE" 2.5
"PE" 1
"PE" 2.5
"PE" 1
"PE" 2
"PE" 0.5
"PE" 2
"PE" 2.5
"PE" 0
"PE" 0.5
"PE" 1.5
"PE" 0.5
"PE" 1.5
"PE" 1
"PE" 0.5

Respostas

3 NickCox Aug 31 2020 at 19:58

Obrigado por mostrar os dados, mas até que todo o mundo use R, seu uso da sintaxe R será, na melhor das hipóteses, estranho e, na pior, não tão útil quanto você espera para aqueles que não usam R. Então, para essas pessoas aqui está outra lista dos seus dados.

y  group
1.5 "C"
  0 "C"
  1 "C"
  1 "C"
  1 "C"
  1 "C"
  1 "C"
  1 "C"
 .5 "C"
1.5 "C"
 .5 "C"
  1 "C"
 .5 "C"
  1 "C"
  1 "C"
 .5 "C"
  1 "C"
  2 "C"
 .5 "C"
2.5 "C"
1.5 "C"
  0 "C"
  1 "C"
  0 "C"
  2 "C"
 .5 "C"
 .5 "C"
1.5 "C"
  1 "C"
  2 "C"
 .5 "P"
  1 "P"
  2 "P"
2.5 "P"
1.5 "P"
  0 "P"
  2 "P"
  1 "P"
1.5 "P"
2.5 "P"
1.5 "P"
 .5 "P"
  1 "P"
3.5 "P"
  2 "P"
2.5 "P"
  3 "P"
  1 "P"
  3 "P"
3.5 "P"
1.5 "P"
  4 "P"
1.5 "P"
2.5 "P"
3.5 "P"
  1 "P"
  2 "P"
  2 "P"
  2 "P"
  2 "P"
2.5 "P"
  1 "P"
2.5 "P"
  1 "P"
  2 "P"
 .5 "P"
  2 "P"
2.5 "P"
  0 "P"
 .5 "P"
1.5 "P"
 .5 "P"
1.5 "P"
  1 "P"
 .5 "P"

e de fato isso pode não ser conveniente para todos.

Este gráfico quantil normal conta quase toda a história que podemos discernir.

Claro, há uma ligeira distorção e heterocedasticidade visível para o olho experiente, mas nenhum deles é grande coisa. E qualquer ideia de que distribuições normais são o objetivo aqui é comprometida pelo arredondamento de valores como múltiplos de 0,5. Ao contrário, isso requer sinalização e alguma discussão. Mais: parece um palpite justo que seu resultado não pode ser negativo e até mesmo que pode haver um limite superior também: tal limite ou limites também são problemáticos para o ideal de uma distribuição normal.

Na prática, um $t$testar se o uso de variâncias iguais ou desiguais ou uma regressão que ignora ou respeita a heterocedasticidade fornecem resultados inequívocos, uma diferença convincente entre os grupos nesse resultado. Mostro os resultados do Stata abaixo e estou confiante de que existe código R para o equivalente.

Eu discordo do seu supervisor aqui. Há alguns desvios das suposições ideais, mas na pior das hipóteses é uma distração. Não há necessidade e nenhum ganho provável com uma transformação. Escrevo como alguém altamente positivo sobre o uso de transformações - quando elas realmente são necessárias e úteis.

. moments y , by(group)

----------------------------------------------------------------------
    Group |          n        mean          SD    skewness    kurtosis
----------+-----------------------------------------------------------
        C |         30       1.000       0.616       0.450       2.913
        P |         45       1.722       0.980       0.295       2.467
----------------------------------------------------------------------

. encode g, gen(Group)

. regress y i.Group

      Source |       SS           df       MS      Number of obs   =        75
-------------+----------------------------------   F(1, 73)        =     12.86
       Model |  9.38888889         1  9.38888889   Prob > F        =    0.0006
    Residual |  53.2777778        73  .729832572   R-squared       =    0.1498
-------------+----------------------------------   Adj R-squared   =    0.1382
       Total |  62.6666667        74  .846846847   Root MSE        =     .8543

------------------------------------------------------------------------------
           y |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       Group |
          P  |   .7222222    .201361     3.59   0.001     .3209103    1.123534
       _cons |          1   .1559736     6.41   0.000     .6891451    1.310855
------------------------------------------------------------------------------

. regress y i.Group, robust

Linear regression                               Number of obs     =         75
                                                F(1, 73)          =      15.34
                                                Prob > F          =     0.0002
                                                R-squared         =     0.1498
                                                Root MSE          =      .8543

------------------------------------------------------------------------------
             |               Robust
           y |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       Group |
          P  |   .7222222   .1844098     3.92   0.000     .3546939    1.089751
       _cons |          1   .1120584     8.92   0.000      .776668    1.223332
------------------------------------------------------------------------------

. ttest y, by(group)

Two-sample t test with equal variances
------------------------------------------------------------------------------
   Group |     Obs        Mean    Std. Err.   Std. Dev.   [95% Conf. Interval]
---------+--------------------------------------------------------------------
       C |      30           1    .1124441    .6158818     .770026    1.229974
       P |      45    1.722222    .1461246    .9802339    1.427727    2.016717
---------+--------------------------------------------------------------------
combined |      75    1.433333    .1062605    .9202428    1.221605    1.645062
---------+--------------------------------------------------------------------
    diff |           -.7222222     .201361               -1.123534   -.3209103
------------------------------------------------------------------------------
    diff = mean(C) - mean(P)                                      t =  -3.5867
Ho: diff = 0                                     degrees of freedom =       73

    Ha: diff < 0                 Ha: diff != 0                 Ha: diff > 0
 Pr(T < t) = 0.0003         Pr(|T| > |t|) = 0.0006          Pr(T > t) = 0.9997

. ttest y, by(group) unequal

Two-sample t test with unequal variances
------------------------------------------------------------------------------
   Group |     Obs        Mean    Std. Err.   Std. Dev.   [95% Conf. Interval]
---------+--------------------------------------------------------------------
       C |      30           1    .1124441    .6158818     .770026    1.229974
       P |      45    1.722222    .1461246    .9802339    1.427727    2.016717
---------+--------------------------------------------------------------------
combined |      75    1.433333    .1062605    .9202428    1.221605    1.645062
---------+--------------------------------------------------------------------
    diff |           -.7222222    .1843803               -1.089708   -.3547362
------------------------------------------------------------------------------
    diff = mean(C) - mean(P)                                      t =  -3.9170
Ho: diff = 0                     Satterthwaite's degrees of freedom =  72.8047

    Ha: diff < 0                 Ha: diff != 0                 Ha: diff > 0
 Pr(T < t) = 0.0001         Pr(|T| > |t|) = 0.0002          Pr(T > t) = 0.9999

Advertências e comentários extras: notei que alguns economistas, e alguns outros grupos, são extraordinariamente diligentes em seguir um ritual em que todo ideal à vista é testado formalmente. Mas, por exemplo, Shapiro-Wilk aqui apenas mostra que o tamanho de sua amostra é grande o suficiente para que o desvio da normalidade exata seja detectável - e parte desse desvio é a discrição (e limitação?) Que torna a suposição ou condição ideal de normalidade duvidosa objetivo em qualquer caso. Um gráfico de quantis normal também é sempre uma boa ideia. O ponto de um gráfico de quantis normal não é tanto que a normalidade é realmente importante, mas sim que você está mostrando distribuições de uma forma padronizada e outros tipos de comportamento também serão evidentes.

Eu preferiria ver um gráfico de quantis normal de resíduos se tivesse que escolher apenas um gráfico para verificar sua distribuição.

O conselho que você cita de McDonald é talvez um pouco mais otimista do que se justifica, mas acho que está mais apontando na direção certa.

EDIT: Muito disso precisa ser reescrito. O problema se transformou em comentários em um bastante diferente: comparar distribuições binomiais com pequenos numeradores e denominador 2000.