data <- matrix(scan(),ncol=3,byrow=TRUE) 1 72 83 1 77 85 1 81 90 1 84 92 1 88 97 1 94 92 1 71 79 1 75 80 1 82 89 1 84 87 2 91 93 2 85 88 2 89 91 2 95 93 2 80 84 2 96 98 2 79 82 2 87 90 2 84 83 2 85 86 data AncovaEx1 <- data.frame(data) colnames(AncovaEx1) <- c("group","pretest","posttest") rm(data) AncovaEx1$dummy <- (AncovaEx1$group -1) AncovaEx1$grouppre <- (AncovaEx1$group -1)*AncovaEx1$pretest # create the variable to test for parallelism AncovaEx1$group <- as.factor(AncovaEx1$group) # to make sure that group is a factor, not numeric AncovaEx1 plot(AncovaEx1$pretest,AncovaEx1$posttest,pch=AncovaEx1$dummy, xlab="pretest",ylab="posttest",main="Analysis of Covariance Example") options(contrasts = c("contr.SAS","contr.poly")) # set dummy coding to match the scheme in SAS # the regression model approach to ANCOVA anova(lm(posttest ~ dummy, data=AncovaEx1)) anova(lm(posttest ~ pretest, data=AncovaEx1)) anova(lm(posttest ~ pretest + dummy, data=AncovaEx1)) anova(lm(posttest ~ pretest + dummy + grouppre, data=AncovaEx1)) # using a linear model with factors (like Proc GLM) AncovaEx1.pre <- lm(posttest ~ pretest, data=AncovaEx1) # Fit all three models AncovaEx1.grouppre <- lm(posttest ~ pretest + group, data=AncovaEx1) AncovaEx1.groupXpre <- lm(posttest ~ pretest + group + grouppre, data=AncovaEx1) anova(AncovaEx1.grouppre, AncovaEx1.groupXpre) # perform F tests for nested models anova(AncovaEx1.pre, AncovaEx1.grouppre) # check residuals for the final model par(mfrow=c(2,2)) plot(AncovaEx1.grouppre) par(mfrow=c(1,1)) rm(AncovaEx1,AncovaEx1.pre,AncovaEx1.grouppre,AncovaEx1.groupXpre) # remove objects when finished