Bom dia, pessoal.
Minha dúvida é particularmente sobre o cálculo de somas de quadrados tipo III (mas também do tipo II) no R com conjuntos de dados desbalanceados.
Estou ciente da polêmica em torno do uso destas somas de quadrados na comunidade estatística, mas gostaria muito de poder calculá-las no R, e, a não ser que eu esteja enganado, nem sempre o R as calcula corretamente.
Pesquisando na rede, descobri que em geral são apontadas duas maneiras de se calcular somas de quadrados tipo III no R: a) Utilizando a função drop1() em modelos ajustados com a especificação de contrastes contr.sum (ou contr.helmert), e b) utilizando a função Anova() (com "A" maiúsculo), do pacote car.
Abaixo, eu apresento um exemplo simulado de um ensaio fatorial altamente desbalanceado, faltando várias combinações entre os níveis dos dois fatores. A interação entre eles, por exemplo, apresenta um único grau de liberdade, tamanho o desbalanceamento.
dados <- data.frame(y=c(35.44627,43.43353,40.20125,38.1061,39. 96211,44.21636,19.78237,23. 58636,31.73537,
36.49977,38.71573,41.00456,19.6787,16.43436,32.05407,33. 3784,18.58266,17.74051),
factorA=as.factor(c(2,2,4,4,4,4,6,6,6,6,6,6,8,8,8,8,10,10)),
factorB=as.factor(c(2,2,1.5,1.5,2.5,2.5,1,1,2,2,3,3,1.5,1.5, 2.5,2.5,2,2)))
Tenho em mente o modelo contendo os fatores A e B, bem como sua interação.
No SAS, utilizando o proc glm, obtenho as seguintes somas de quadrados tipo I, tipo II e tipo III:
Source DF Type I SS
factorA 4 964.4164933
factorB 3 500.0771638
factorA*factorB 1 68.7277880
Source DF Type II SS
factorA 3 954.6730970
factorB 3 500.0771638
factorA*factorB 1 68.7277880
Source DF Type III SS
factorA 3 954.6730970
factorB 3 500.0771638
factorA*factorB 1 68.7277880
Percebam que neste exemplo as somas de quadrados tipo II e III são iguais, pois as "caselas" apresentam o mesmo número de repetições (duas).
No R, tentei reproduzir este resultado seguindo os dois procedimentos citados acima:
1) Utilizando a função drop1()
> mod <- lm(y ~ factorA*factorB,
contrasts=list(factorA=contr.sum, factorB=contr.sum),
data=dados)
> drop1(mod, ~.,test = "F")
Single term deletions
Model:
y ~ factorA * factorB
Df Sum of Sq RSS AIC F value Pr(>F)
<none> 70.841 42.661
factorA 0 0.000 70.841 42.661
factorB 0 0.000 70.841 42.661
factorA:factorB 1 68.728 139.569 52.867 8.7315 0.01609 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(apenas a soma de quadrados da interação foi calculada)
2) Utilizando car::Anova()
> mod <- lm(y ~ factorA*factorB, data=dados)
> library(car)
> Anova(mod,type = "II")
Anova Table (Type II tests)
Response: y
Sum Sq Df F value Pr(>F)
factorA 1284.10 4 40.7845 8.995e-06 ***
factorB 500.08 3 21.1774 0.0002047 ***
factorA:factorB 68.73 1 8.7315 0.0160919 *
Residuals 70.84 9
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> Anova(mod,type = "III")
Error in Anova.III.lm(mod, error, singular.ok = singular.ok, ...) :
there are aliased coefficients in the model(soma de quadrados tipo II calculada errada para o fator A, e tipo III não calculadas)Ou seja, não consegui reproduzir nem as somas de quadrados tipo III nem as do tipo II, por nenhum dos dois procedimentos sugeridos na rede.
Estou utilizando:
> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.5 LTS
(...)
other attached packages:
[1] car_2.1-4
Eu estaria fazendo alguma coisa equivocada? Qualquer observação, sugestão, ou indicação de alguma maneira alternativa para cálculo das somas de quadrados tipo III no R será muito bem vinda.
Abs,
Eduardo Bearzoti
(UFOP)
_______________________________________________
R-br mailing list
R-br@listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia ) e forneça código mínimo reproduzível.