---
title: "Plotting gain scores."
output: html_notebook
runtime: shiny
---
Question: How do you make a plot such as is often seen with repeated measures ANOVA showing the gain between pretest and posttest scores.
The data set ACED (see http://ecd.ralmond.net/ecdwiki/ACED/ACED) has information about an assessment for learning system called ACED. In the ACED evaluation, students were given a 25 item pretest, used ACED and then were given a 25 item posttest. (The pretest and posttest were counterbalanced, the scaled scores are reported here.)
Two facets of the ACED system could be manipulated:
1) Feedback: Full worked explanations or just accuracy (right/wrong) information.
2) Sequence: Items presented adaptively (according to weight of evidence) or linearly (fixed sequence)
An incomplete factorial with control design was used, so the accuracy linear condition was replaced with a study hall control.
First, read in the data set. (This is slightly different from the version on the ECD wiki as the BN scores are merged in.)
```{r}
library(arm)
ACED <- read.csv("https://pluto.coe.fsu.edu/rdemos/data/ACED5400-2.csv",na.strings="-999")
```
Variables:
Four conditions: Adaptive/Full, Adaptive/Accuracy, Linear/Full and Control
Level: Which track the students are in (Honor, Accademic, Regular, Part I and II SE, ELL)
Pretest is 25 item pretest
Postest is 25 item posttest
Pre/post test were couterbalanced
BN score is an in-game measure running from -1 to +1
```{r}
ACED$Cond_code <- factor(ACED$Cond_code,
labels=c("Adapt_Acc","Adapt_Full","Lin_Full","Control"))
ACED$Level_Code <- factor(ACED$Level_Code,
labels=c("Honors","Academic","Regular","Part 1","Part 2", "ELL"))
row.names(ACED) <- as.character(ACED$SID)
renderTable(ACED)
```
Create a gain score variable:
```{r}
ACED$gain <- ACED$post_scaled - ACED$pre_scaled
t.test(ACED$gain)
t.test(ACED$gain[ACED$Cond_code!="Control"])
t.test(ACED$gain[ACED$Cond_code=="Control"])
```
Lets look at some graphs. Obvious one is boxplots:
```{r}
boxplot(gain~Cond_code,data=ACED)
abline(h=0)
```
Look at the relationship between BN score and gain score.
```{r}
plot(gain~BNscore,data=ACED)
```
```{r}
plot(gain~BNscore,data=ACED,
pch=as.numeric(ACED$Cond_code),
col=as.numeric(ACED$Cond_code))
lm.g1 <- lm(gain~BNscore,data=ACED,
subset=ACED$Cond_code=="Adapt_Acc")
display(lm.g1)
abline(lm.g1,col=1)
lm.g2 <- lm(gain~BNscore,data=ACED,
subset=ACED$Cond_code=="Adapt_Full")
display(lm.g2)
abline(lm.g2,col=2)
lm.g3 <- lm(gain~BNscore,data=ACED,
subset=ACED$Cond_code=="Lin_Full")
display(lm.g3)
abline(lm.g3,col=3)
```
```{r}
summary(ACED)
```
Anova type main effect plots
```{r}
lm.pre <- lm(pre_scaled~Cond_code,data=ACED)
coef(lm.pre)
pre.mean <- coef(lm.pre)[1]+c(0,coef(lm.pre)[2:4])
lm.post <- lm(post_scaled~Cond_code,data=ACED)
coef(lm.post)
post.mean <- coef(lm.post)[1]+c(0,coef(lm.post)[2:4])
pre.mean
post.mean
```
Now plot this.
```{r}
## Start by laying out plot:
plot(x=rep(c(0,1),each=4),y=c(pre.mean,post.mean),
xlab="",ylab="Pre/Post test score",type="n",
xlim=c(-1,2),xaxt="n")
axis(1,c(0,1),labels=c("Pretest","Posttest"))
segments(rep(0,4),pre.mean,rep(1,4),post.mean,
col=1:4,lty=1:4)
legend("bottomright",legend=levels(ACED$Cond_code),
col=1:4,lty=1:4)
```
Lets turn this into a function:
```{r}
rmplot <- function (pre,post,group.labs=names(pre),
ylab="Pre/Post test Scores",xlab="",
prepost.labs=c("Pretest","Posttest"),
col=1:length(pre),lty=1:length(pre),...){
g <- length(pre)
plot(x=rep(c(0,1),each=g),y=c(pre,post),
xlab=xlab,ylab=ylab,type="n",
xlim=c(-1,2),xaxt="n",...)
axis(1,c(0,1),labels=propost.labs)
segments(rep(0,g),pre,rep(1,g),post,
col=col,lty=lty)
legend("bottomright",legend=levels(ACED$Cond_code),
col=col,lty=lty)
}
```