
Eduardo, Sem CMR para utilizar minha sugestão é você alternar ordem que os efeitos principais entram no modelo... acompanhe:
car::Anova(lm(y ~ factorA * factorB, data = dados), type = 2)
Funciona para o segundo termo (factorB). Assim, alterando a ordem na especificaçao:
car::Anova(lm(y ~ factorB * factorA, data = dados), type = '2)
Vai retornar a SSII correta para o factorA. Para as SSIII é necessário (assim como no modo drop1()) definir contrastes soma zero, portanto:
car::Anova(lm(y ~ factorA * factorB, data =dados, contrasts = list(factorA = contr.sum, factorB = contr.sum)), type = 3) car::Anova(lm(y ~ factorB * factorA, data =dados, contrasts = list(factorA = contr.sum, factorB = contr.sum)), type = 3)
Uma explicação seria... : SSII testa um efeitos principal depois de outro (por isso a ordem importa) enquanto que na SSIII a interação "superparametriza" o modelo, por isso a necessidade da especificação dos contrastes. No aguardo da sua resposta. att, FH 2017-06-21 9:23 GMT-05:00 Eduardo Bearzoti via R-br < r-br@listas.c3sl.ufpr.br>:
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.