The analyses on this page were performed on 62 students from the following four cohorts: 14 community college students from fall 2016, 25 high school students from fall 2016, 19 high school students from summer 2017, and 4 high school stuents from fall 2017. The 39 students who completed the immediate vs. delayed intervention study were excluded from these analyses because we requried these students to meet a threshold of 50.0% on the SM portions of the AMSA to participate in our study. This requirement would likely skew the effect SM would have on TI1 and lesson performance.

The code in the following analyses uses the following data frames: pretest.rds, lesson.rds, and posttestAll.rds. The raw data can be downloaded from the “Materials” tab, and the process used to get the raw data into the pretest.rds, lesson.rds, and posttestAll.rds format can be found in the “Data Process” tab.

Can SM score predict posttest performance?

library(lme4) #v 1.1.21
library(dplyr) #v 0.8.3

userIDs <- read.csv("combinedUserIDs.csv")
#exclude those who didn't meet threshold
noThreshold <- c(1719,1653,1735,1998,2038)
userIDs <- userIDs [! userIDs$TrigID %in% noThreshold,]

tahomaIDs <- userIDs[(userIDs$Group == "TaFall16") | (userIDs$Group == "TaSum17") | (userIDs$Group == "TaFall17"),]
tahomaIDs <- tahomaIDs$TrigID
repIDs <- userIDs[(userIDs$Group == "REP16"),]
repIDs <- repIDs$TrigID

combined62 <- c(tahomaIDs,repIDs)

posttestResults <- readRDS("posttestAll.rds")
#reduce to 62
posttestResults62 <- posttestResults[posttestResults$user %in% combined62,]
posttestResults62 <- posttestResults62 %>% group_by(user) %>% summarise(TrigID = mean(correct)*100)

pretestData <- readRDS("pretest.rds")
#reduce to 62
pretestResults62 <- pretestData[pretestData$user %in% combined62,]

sm62 <- pretestResults62 %>%
  select("user", "MarkXYII", "MarkThetaII", "Right Triangle Trig III", "Right Triangle Trig V")
sm62$sm <- rowMeans(sm62[,2:5])

postSM62 <- merge(posttestResults62,sm62,by="user")

lmPostSM62 = lm(TrigID ~ sm, data=postSM62)

plot(TrigID ~ sm, data=postSM62,main="SM Score v. Trig ID Posttest")
abline(lm(TrigID ~ sm, data=postSM62))

summary(lmPostSM62)
## 
## Call:
## lm(formula = TrigID ~ sm, data = postSM62)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -56.891 -15.656   7.755  17.124  36.013 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   54.660      9.585   5.703 3.83e-07 ***
## sm             0.234      0.129   1.814   0.0746 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24.27 on 60 degrees of freedom
## Multiple R-squared:  0.052,  Adjusted R-squared:  0.0362 
## F-statistic: 3.291 on 1 and 60 DF,  p-value: 0.07464

Can SM score predict within-lesson performance?

lessonData <- readRDS("lesson.rds")

##reduce to 62
lessonData62 <- lessonData [lessonData$user %in% combined62,]

##only look at first attempt data
lessonData <- lessonData[lessonData$trialNumber==1,]

chs14 <- c(1:2,5:13,15:22,23:29,30:36)
ch56 <- c(37:45,47:57)

ch14Data62 <- lessonData62 [ lessonData62$page_id %in% chs14,]
ch56Data62 <- lessonData62 [ lessonData62$page_id %in% ch56,]

  lessonDataAverageAll62 <- 
    lessonData62 %>%
    group_by(user) %>%
    summarise(PercentCorrect = round(mean(firstCorrect)*100,1))
  
  lessonDataAverageCh1462 <- 
    ch14Data62 %>%
    group_by(user) %>%
    summarise(PercentCorrect = round(mean(firstCorrect)*100,1))  
  
  lessonDataAverageCh5662 <- 
    ch56Data62 %>%
    group_by(user) %>%
    summarise(PercentCorrect = round(mean(firstCorrect)*100,1))
    


allData62 <- merge(lessonDataAverageAll62,sm62,by="user")
ch14DataSum62 <- merge(lessonDataAverageCh1462,sm62, by="user")
ch56DataSum62 <- merge(lessonDataAverageCh5662,sm62, by="user")

##predict lesson performance with sm score

lm1 = lm(PercentCorrect ~ sm, data=allData62)
lm2 = lm(PercentCorrect ~ sm, data=ch14DataSum62)
lm3 = lm(PercentCorrect ~ sm, data=ch56DataSum62)

plot(PercentCorrect ~ sm, data=ch14DataSum62,main="SM Score v. Ch 1-4 Performance")
abline(lm(PercentCorrect ~ sm, data=ch14DataSum62,main="Ch 1-4"))

summary(lm2)
## 
## Call:
## lm(formula = PercentCorrect ~ sm, data = ch14DataSum62)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -43.947  -2.981   2.476   7.944  21.818 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 72.18654    4.85132  14.880   <2e-16 ***
## sm           0.14374    0.06529   2.202   0.0315 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12.28 on 60 degrees of freedom
## Multiple R-squared:  0.07475,    Adjusted R-squared:  0.05933 
## F-statistic: 4.847 on 1 and 60 DF,  p-value: 0.03155
plot(PercentCorrect ~ sm, data=ch56DataSum62, main="SM Score v. Ch 5-6 Performance")
abline(lm(PercentCorrect ~ sm, data=ch56DataSum62, main="Ch 5-6"))

summary(lm3)
## 
## Call:
## lm(formula = PercentCorrect ~ sm, data = ch56DataSum62)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -31.533  -7.382   2.988  11.153  28.655 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  57.9944     5.6173  10.324  6.3e-15 ***
## sm            0.2534     0.0756   3.352  0.00139 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 14.22 on 60 degrees of freedom
## Multiple R-squared:  0.1577, Adjusted R-squared:  0.1437 
## F-statistic: 11.23 on 1 and 60 DF,  p-value: 0.001394

Can lesson performance predict posttest performance?

#####predict posttest results from lesson performance

ch14DataSum62 <- merge(lessonDataAverageCh1462,posttestResults62,by="user")
ch56DataSum62 <- merge(lessonDataAverageCh5662,posttestResults62,by="user")
allDataSum62 <- merge(lessonDataAverageAll62,posttestResults62,by="user")
names(ch14DataSum62)[2] <- "PercentCorrectCh14"
names(ch56DataSum62)[2] <- "PercentCorrectCh56"

lm5 = lm(TrigID ~ PercentCorrectCh14, data=ch14DataSum62)
plot(TrigID ~ PercentCorrectCh14, data=ch14DataSum62,main="Ch1-4 Lesson Performance v Posttest")
abline(lm(TrigID ~ PercentCorrectCh14, data=ch14DataSum62))

summary(lm5)
## 
## Call:
## lm(formula = TrigID ~ PercentCorrectCh14, data = ch14DataSum62)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -53.518  -4.109   5.225  13.201  31.884 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        -18.2632    17.4304  -1.048    0.299    
## PercentCorrectCh14   1.0861     0.2094   5.188 2.65e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 20.71 on 60 degrees of freedom
## Multiple R-squared:  0.3096, Adjusted R-squared:  0.2981 
## F-statistic: 26.91 on 1 and 60 DF,  p-value: 2.65e-06
lm6 = lm(TrigID ~ PercentCorrectCh56, data=ch56DataSum62)
plot(TrigID ~ PercentCorrectCh56, data=ch56DataSum62,main="Ch5-6 Lesson Performance v Posttest")
abline(lm(TrigID ~ PercentCorrectCh56, data=ch56DataSum62))

summary(lm6)
## 
## Call:
## lm(formula = TrigID ~ PercentCorrectCh56, data = ch56DataSum62)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -47.322  -4.875   2.062  11.145  31.028 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        -10.7225    11.9044  -0.901    0.371    
## PercentCorrectCh56   1.0795     0.1539   7.013 2.38e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 18.48 on 60 degrees of freedom
## Multiple R-squared:  0.4505, Adjusted R-squared:  0.4413 
## F-statistic: 49.18 on 1 and 60 DF,  p-value: 2.377e-09