[R] Type III ANOVA of package car depends on factor level order
Xiaoxu LI
lixiaoxu at gmail.com
Tue Nov 18 00:19:17 CET 2008
## I got it. IV(s) of interaction should be orthogonal to main effect IV(s).
## Type III ANOVA / Interaction alone
x_interaction<-cbind(
(drug==2)&(disease==2)
,(drug==3)&(disease==2)
,(drug==4)&(disease==2)
,(drug==2)&(disease==3)
,(drug==3)&(disease==3)
,(drug==4)&(disease==3));
x_interaction <- residuals(lm(x_interaction~disease+drug));
## replace level order
x_interaction_2<-cbind(
(drug==2)&(disease==2)
,(drug==3)&(disease==2)
,(drug==1)&(disease==2)
,(drug==2)&(disease==1)
,(drug==3)&(disease==1)
,(drug==1)&(disease==1));
x_interaction_2 <- residuals(lm(x_interaction~disease+drug));
## Compare to http://www.otago.ac.nz/sas/stat/chap30/sect52.htm
## Type III SS: 2997.471860, 415.873046, 707.266259
rbind(
c( anova(lm(y~x_interaction+disease),lm(y~disease*drug))$'Sum of Sq'[2]
, anova(lm(y~x_interaction+drug),lm(y~disease*drug))$'Sum of Sq'[2]
, anova(lm(y~disease+drug),lm(y~disease*drug))$'Sum of Sq'[2])
, c( anova(lm(y~x_interaction_2+disease),lm(y~disease*drug))$'Sum of Sq'[2]
, anova(lm(y~x_interaction_2+drug),lm(y~disease*drug))$'Sum of Sq'[2]
, anova(lm(y~disease+drug),lm(y~disease*drug))$'Sum of Sq'[2])
)
On Tue, Nov 18, 2008 at 3:27 AM, Xiaoxu LI <lixiaoxu at gmail.com> wrote:
> ## Question1: How to define IV with interaction alone, without main effects?
> ## Question2: Should Type III ANOVA in package car be independent of
> the factor level order?
>
> ## data from http://www.otago.ac.nz/sas/stat/chap30/sect52.htm
> drug <- c(t(t(rep(1,3)))%*%t(1:4));
> disease <- c(t(t(1:3)) %*% t(rep(1,4)));
> y <- t(matrix(c(
> 42 ,44 ,36 ,13 ,19 ,22
> ,33 ,NA ,26 ,NA ,33 ,21
> ,31 ,-3 ,NA ,25 ,25 ,24
> ,28 ,NA ,23 ,34 ,42 ,13
> ,NA ,34 ,33 ,31 ,NA ,36
> ,3 ,26 ,28 ,32 ,4 ,16
> ,NA ,NA ,1 ,29 ,NA ,19
> ,NA ,11 ,9 ,7 ,1 ,-6
> ,21 ,1 ,NA ,9 ,3 ,NA
> ,24 ,NA ,9 ,22 ,-2 ,15
> ,27 ,12 ,12 ,-5 ,16 ,15
> ,22 ,7 ,25 ,5 ,12 ,NA
> ),nrow=6));
> ## verify data with http://www.otago.ac.nz/sas/stat/chap30/sect52.htm
> (cbind(drug,disease,y));
> ## make a big table
> drug <- as.factor(rep(drug,6));
> disease <- as.factor(rep(disease,6));
> y <- c(y);
> ## verify data through type I ANOVA to
> http://www.otago.ac.nz/sas/stat/chap30/sect52.htm
> anova(lm(y~drug*disease));
>
> require(car);
> ## Type III ANOVA in package car is not Type III ANOVA in SAS
> Anova(lm(y~drug*disease),type='III');
> ## Type III ANOVA in package car equates to wishful
> ## "anova(lm(y~INTERACTION +disease),lm(y~drug*disease))"
> ## However in R, df of lm(y~drug:disease) is automatically df of
> lm(y~drug*disease)
> ## How to define IV with interaction alone, without main effects?
>
> ## Verify type III of package car to be (INTERACTION + disease) vs.
> (disease*drug)
> ## However at the 3rd row, replace the maximun levels(drug==4,
> disease=3) with the minimum levels (==1).
> rbind(Anova(lm(y~drug*disease),type='III')$'Sum Sq'[2:4]
> , c(
> anova(
> lm(y~ 1
> + ( I((drug==2)&(disease==2))
> + I((drug==3)&(disease==2))
> + I((drug==4)&(disease==2))
> + I((drug==2)&(disease==3))
> + I((drug==3)&(disease==3))
> + I((drug==4)&(disease==3))
> )
> + ( I(disease==2) + I(disease==3)))
> ,lm(y~drug*disease))$'Sum of Sq'[2]
> , anova(
> lm(y~ 1
> + ( I((drug==2)&(disease==2))
> + I((drug==3)&(disease==2))
> + I((drug==4)&(disease==2))
> + I((drug==2)&(disease==3))
> + I((drug==3)&(disease==3))
> + I((drug==4)&(disease==3))
> )
> + ( I(drug==2) + I(drug==3) + I(drug==4)))
> ,lm(y~drug*disease))$'Sum of Sq'[2]
> , anova(lm(y~drug+disease),lm(y~drug*disease))$'Sum of Sq'[2]
> )
> ,
> c(
> anova(
> lm(y~ 1
> + ( I((drug==2)&(disease==2))
> + I((drug==3)&(disease==2))
> + I((drug==1)&(disease==2))
> + I((drug==2)&(disease==1))
> + I((drug==3)&(disease==1))
> + I((drug==1)&(disease==1))
> )
> + ( I(disease==2) + I(disease==1)))
> ,lm(y~drug*disease))$'Sum of Sq'[2]
> , anova(
> lm(y~ 1
> + ( I((drug==2)&(disease==2))
> + I((drug==3)&(disease==2))
> + I((drug==1)&(disease==2))
> + I((drug==2)&(disease==1))
> + I((drug==3)&(disease==1))
> + I((drug==1)&(disease==1))
> )
> + ( I(drug==2) + I(drug==3) + I(drug==1)))
> ,lm(y~drug*disease))$'Sum of Sq'[2]
> , anova(lm(y~drug+disease),lm(y~drug*disease))$'Sum of Sq'[2]
> )
> )
>
> ## I don't know whether the problem is in anova(lm1,lm2) or lm, or Anova
>
> ## while type II is independent of level order --
> rbind(Anova(lm(y~drug*disease),type='II')$'Sum Sq'[1:3]
> , c(
> anova(
> lm(y~ 1+disease)
> ,lm(y~ 1
> + ( I(drug==2)
> + I(drug==3)
> + I(drug==4)
> )
> + ( I(disease==2) + I(disease==3)))
> ,lm(y~drug*disease))$'Sum of Sq'[2]
> , anova(
> lm(y~ 1+drug)
> ,lm(y~ 1
> + ( I(drug==2)
> + I(drug==3)
> + I(drug==4)
> )
> + ( I(disease==2) + I(disease==3)))
> ,lm(y~drug*disease))$'Sum of Sq'[2]
>
> , anova(lm(y~drug+disease),lm(y~drug*disease))$'Sum of Sq'[2]
> )
> ,
> c(
> anova(
> lm(y~ 1+disease)
> ,lm(y~ 1
> + ( I(drug==2)
> + I(drug==3)
> + I(drug==1)
> )
> + ( I(disease==2) + I(disease==1)))
> ,lm(y~drug*disease))$'Sum of Sq'[2]
> , anova(
> lm(y~ 1+drug)
> ,lm(y~ 1
> + ( I(drug==2)
> + I(drug==3)
> + I(drug==1)
> )
> + ( I(disease==2) + I(disease==1)))
> ,lm(y~drug*disease))$'Sum of Sq'[2]
>
> , anova(lm(y~drug+disease),lm(y~drug*disease))$'Sum of Sq'[2]
> )
> )
>
> ## LI, Xiaoxu
> ## School of Humanities & Social Sciences, Shenzhen Graduate School of
> Peking Univ.
> ## http://lixiaoxu.lxxm.com/
>
More information about the R-help
mailing list