Вот код для репликации сюжета Barrett 2011 ANCOVA (рисунок 1). Я следую процедуре подбора взаимодействия сначала (отдельные уклоны) и удаления незначительного взаимодействия, чтобы получить минимально адекватную модель, используя равные уклоны, чтобы соответствовать отрегулированным значениям и отрегулированным средним (средним LS или средним EM).
library(ggplot2)
library(dplyr)
library(grid)
#extract data from the Barrett 2011 paper
X <- c(11,21,30,41,52,65,71,77,8,17,29,42,51,64,72,79)
Y <- c(33,32,38,49,51,53,59,65,20,22,31,28,42,52,48,55)
Group <- as.factor(c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2))
data <-data.frame(X,Y,Group)
X.mean <- mean(data$X) #mean of the covariate
model1 <- lm(Y ~ X * Group, data=data)
pred1 <- predict(model1)
model2 <- lm(Y ~ X + Group, data=data)
pred2 <- predict(model2)
#plot different slopes
plot1 <- ggplot(data = cbind(data, pred1),
aes(X, Y, color=Group)) + geom_point() +
geom_line(aes(y=pred1))+ #plots the predicted values (fitted line)
geom_vline(xintercept = X.mean, linetype="dashed", alpha = 0.15)+
labs(title = "Model1: Separate Slopes ANCOVA", subtitle = "model1 <- lm(Y ~ X * Group, data=data)")+
theme_classic()
#plot same slopes
plot2 <- ggplot(data = cbind(data, pred2),
aes(X, Y, color=Group)) + geom_point() +
geom_line(aes(y=pred2))+
geom_vline(xintercept = X.mean, linetype="dashed", alpha = 0.15)+
labs(title = "Model2: Equal Slopes ANCOVA", subtitle = "model2 <- lm(Y ~ X + Group, data=data)")+
theme_classic()
grid.newpage()
grid.draw(rbind(ggplotGrob(plot1), ggplotGrob(plot2), size = "last"))
summary(model1)
anova(model1)
summary(model2)
anova(model2)
anova(model1, model2) #no sig. difference, drop interaction term and use simplest model (equal slopes)
plot3 <- ggplot(data = cbind(data, pred2),
aes(X, Y, color=Group)) +
geom_point()+
geom_line(aes(y=pred2))+
#geom_vline(xintercept = X.mean, linetype="dashed", alpha = 0.45)+
labs(title = "Model2: Equal Slopes ANCOVA", subtitle = "model2 <- lm(Y ~ X + Group, data=data)")+
theme_classic()
plot3
#mutate to calc adjusted values of individuals
data <- data%>%mutate(adjY=Y-0.498*(X-X.mean))
#0.498 is the 'common slope' of model2; equal slopes ANCOVA
plot4 <- ggplot(data = cbind(data, pred2),
aes(X, Y, color=Group)) +
geom_point()+
#geom_line(aes(y=pred2))+
geom_vline(xintercept = X.mean, linetype="dashed", alpha = 0.45)+
#labs(title = "Model2: Equal Slopes ANCOVA", subtitle = "model2 <- lm(Y ~ X + Group, data=data)")+
geom_segment(aes(x=X, xend=X.mean, y=Y, yend=data$adjY), size=.25)+
theme_classic()
plot4
plot5 <-ggplot(data, aes(x=Group, y=adjY, color=Group))+
geom_point()+
stat_summary(geom="point", fun.y= "mean", shape = 8, color="black", size=5)+
geom_hline(yintercept = mean(data$adjY), linetype="dashed", alpha = 0.45)+
theme_classic()
plot5
grid.newpage()
grid.draw(rbind(ggplotGrob(plot3), ggplotGrob(plot4), ggplotGrob(plot5), size = "last"))
Барретт 2011 Рисунок 1