This website contains data and R code used for the data processing and analysis in Shin and Park (2024). The scripts have been posted on an online data repository, accessible at the Center for Open Science and GitHub.

Shin, M., & Park, J. (2024). Technology-assisted instruction with teacher prompts on fraction multiplication word problems: A single-case design with visual analysis and Bayesian multilevel modeling. Assistive Technology. https://doi.org/10.1080/10400435.2024.2415366

Dataset

suppressPackageStartupMessages({
  library(knitr)
  library(kableExtra)
  library(readxl)
  library(officer)
  library(flextable)
  library(DT)
  library(tidyr)
  library(dplyr)
  library(stringr)
  library(downloadthis)
  library(ggh4x)
  library(broom)
  library(gridExtra)
  library(SingleCaseES)
  library(brms)
  library(ggplot2)
})

web_based_data <- read.csv("data/web_based_data.csv")
case date day phase question_type item_combination item_partition item_comparison sum visualization solving A B M min_A min_B min_M level_AB level_BM time_A time_B time_M trend_AB trend_BM
1 2/16/2023 1 Baseline visualization 1 1 0 2 1 0 1 0 0 1 0 0 0 0 0 -6 -32 0 0
1 2/17/2023 2 Baseline visualization 1 2 0 3 1 0 1 0 0 1 0 0 0 0 1 -5 -31 0 0
1 2/21/2023 6 Baseline visualization 1 1 1 3 1 0 1 0 0 1 0 0 0 0 5 -1 -27 0 0
1 2/22/2023 7 Intervention visualization 1 1 1 3 1 0 0 1 0 0 7 0 1 0 6 0 -26 0 0
1 2/23/2023 8 Intervention visualization 3 1 1 5 1 0 0 1 0 0 7 0 1 0 7 1 -25 1 0
1 2/27/2023 12 Intervention visualization 4 4 4 12 1 0 0 1 0 0 7 0 1 0 11 5 -21 5 0
1 2/28/2023 13 Intervention visualization 4 5 4 13 1 0 0 1 0 0 7 0 1 0 12 6 -20 6 0
1 3/1/2023 14 Intervention visualization 3 3 4 10 1 0 0 1 0 0 7 0 1 0 13 7 -19 7 0
1 3/2/2023 15 Intervention visualization 4 4 4 12 1 0 0 1 0 0 7 0 1 0 14 8 -18 8 0
1 3/6/2023 19 Intervention visualization 5 4 4 13 1 0 0 1 0 0 7 0 1 0 18 12 -14 12 0
1 3/20/2023 33 Maintenance visualization 5 4 5 14 1 0 0 0 1 0 0 33 1 1 32 26 0 26 0
1 4/4/2023 48 Maintenance visualization 4 3 4 11 1 0 0 0 1 0 0 33 1 1 47 41 15 41 15
1 4/25/2023 69 Maintenance visualization 4 4 4 12 1 0 0 0 1 0 0 33 1 1 68 62 36 62 36
1 5/16/2023 90 Maintenance visualization 4 4 4 12 1 0 0 0 1 0 0 33 1 1 89 83 57 83 57
2 2/16/2023 1 Baseline visualization 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 -12 -35 0 0
2 2/23/2023 8 Baseline visualization 1 0 0 1 1 0 1 0 0 1 0 0 0 0 7 -5 -28 0 0
2 2/27/2023 12 Baseline visualization 1 0 0 1 1 0 1 0 0 1 0 0 0 0 11 -1 -24 0 0
2 2/28/2023 13 Intervention visualization 0 0 0 0 1 0 0 1 0 0 13 0 1 0 12 0 -23 0 0
2 3/1/2023 14 Intervention visualization 3 3 2 8 1 0 0 1 0 0 13 0 1 0 13 1 -22 1 0
2 3/2/2023 15 Intervention visualization 3 3 3 9 1 0 0 1 0 0 13 0 1 0 14 2 -21 2 0
2 3/6/2023 19 Intervention visualization 5 3 3 11 1 0 0 1 0 0 13 0 1 0 18 6 -17 6 0
2 3/7/2023 20 Intervention visualization 5 5 5 15 1 0 0 1 0 0 13 0 1 0 19 7 -16 7 0
2 3/8/2023 21 Intervention visualization 5 5 5 15 1 0 0 1 0 0 13 0 1 0 20 8 -15 8 0
2 3/9/2023 22 Intervention visualization 5 3 5 13 1 0 0 1 0 0 13 0 1 0 21 9 -14 9 0
2 3/23/2023 36 Maintenance visualization 5 3 5 13 1 0 0 0 1 0 0 36 1 1 35 23 0 23 0
2 4/25/2023 69 Maintenance visualization 4 1 2 7 1 0 0 0 1 0 0 36 1 1 68 56 33 56 33
2 5/11/2023 85 Maintenance visualization 3 3 5 11 1 0 0 0 1 0 0 36 1 1 84 72 49 72 49
3 2/24/2023 9 Baseline visualization 0 0 0 0 1 0 1 0 0 9 0 0 0 0 0 -25 -60 0 0
3 3/6/2023 19 Baseline visualization 1 1 1 3 1 0 1 0 0 9 0 0 0 0 10 -15 -50 0 0
3 3/9/2023 22 Baseline visualization 1 1 1 3 1 0 1 0 0 9 0 0 0 0 13 -12 -47 0 0
3 3/21/2023 34 Intervention visualization 5 3 5 13 1 0 0 1 0 0 34 0 1 0 25 0 -35 0 0
3 3/22/2023 35 Intervention visualization 5 3 3 11 1 0 0 1 0 0 34 0 1 0 26 1 -34 1 0
3 3/23/2023 36 Intervention visualization 3 3 5 11 1 0 0 1 0 0 34 0 1 0 27 2 -33 2 0
3 3/24/2023 37 Intervention visualization 5 3 3 11 1 0 0 1 0 0 34 0 1 0 28 3 -32 3 0
3 3/27/2023 40 Intervention visualization 5 3 5 13 1 0 0 1 0 0 34 0 1 0 31 6 -29 6 0
3 3/28/2023 41 Intervention visualization 3 5 3 11 1 0 0 1 0 0 34 0 1 0 32 7 -28 7 0
3 3/31/2023 44 Intervention visualization 3 3 3 9 1 0 0 1 0 0 34 0 1 0 35 10 -25 10 0
3 4/25/2023 69 Maintenance visualization 3 3 3 9 1 0 0 0 1 0 0 69 1 1 60 35 0 35 0
3 5/16/2023 90 Maintenance visualization 5 3 2 10 1 0 0 0 1 0 0 69 1 1 81 56 21 56 21
3 5/18/2023 92 Maintenance visualization 5 3 5 13 1 0 0 0 1 0 0 69 1 1 83 58 23 58 23
4 2/28/2023 13 Baseline visualization 0 0 0 0 1 0 1 0 0 13 0 0 0 0 0 -28 -56 0 0
4 3/8/2023 21 Baseline visualization 0 0 0 0 1 0 1 0 0 13 0 0 0 0 8 -20 -48 0 0
4 3/22/2023 35 Baseline visualization 0 0 0 0 1 0 1 0 0 13 0 0 0 0 22 -6 -34 0 0
4 3/28/2023 41 Intervention visualization 2 2 2 6 1 0 0 1 0 0 41 0 1 0 28 0 -28 0 0
4 3/29/2023 42 Intervention visualization 2 2 2 6 1 0 0 1 0 0 41 0 1 0 29 1 -27 1 0
4 3/30/2023 43 Intervention visualization 2 2 2 6 1 0 0 1 0 0 41 0 1 0 30 2 -26 2 0
4 3/31/2023 44 Intervention visualization 2 2 2 6 1 0 0 1 0 0 41 0 1 0 31 3 -25 3 0
4 4/4/2023 48 Intervention visualization 5 3 3 11 1 0 0 1 0 0 41 0 1 0 35 7 -21 7 0
4 4/5/2023 49 Intervention visualization 2 5 5 12 1 0 0 1 0 0 41 0 1 0 36 8 -20 8 0
4 4/6/2023 50 Intervention visualization 5 3 3 11 1 0 0 1 0 0 41 0 1 0 37 9 -19 9 0
4 4/25/2023 69 Maintenance visualization 2 2 2 6 1 0 0 0 1 0 0 69 1 1 56 28 0 28 0
4 5/15/2023 89 Maintenance visualization 5 3 5 13 1 0 0 0 1 0 0 69 1 1 76 48 20 48 20
4 5/18/2023 92 Maintenance visualization 3 3 5 11 1 0 0 0 1 0 0 69 1 1 79 51 23 51 23
1 2/16/2023 1 Baseline solving 2 1 4 7 0 1 1 0 0 1 0 0 0 0 0 -6 -32 0 0
1 2/17/2023 2 Baseline solving 4 1 1 6 0 1 1 0 0 1 0 0 0 0 1 -5 -31 0 0
1 2/21/2023 6 Baseline solving 4 1 1 6 0 1 1 0 0 1 0 0 0 0 5 -1 -27 0 0
1 2/22/2023 7 Intervention solving 4 4 4 12 0 1 0 1 0 0 7 0 1 0 6 0 -26 0 0
1 2/23/2023 8 Intervention solving 4 4 3 11 0 1 0 1 0 0 7 0 1 0 7 1 -25 1 0
1 2/27/2023 12 Intervention solving 5 5 5 15 0 1 0 1 0 0 7 0 1 0 11 5 -21 5 0
1 2/28/2023 13 Intervention solving 5 5 5 15 0 1 0 1 0 0 7 0 1 0 12 6 -20 6 0
1 3/1/2023 14 Intervention solving 4 4 4 12 0 1 0 1 0 0 7 0 1 0 13 7 -19 7 0
1 3/2/2023 15 Intervention solving 4 4 4 12 0 1 0 1 0 0 7 0 1 0 14 8 -18 8 0
1 3/6/2023 19 Intervention solving 4 4 4 12 0 1 0 1 0 0 7 0 1 0 18 12 -14 12 0
1 3/20/2023 33 Maintenance solving 4 4 4 12 0 1 0 0 1 0 0 33 1 1 32 26 0 26 0
1 4/4/2023 48 Maintenance solving 3 5 3 11 0 1 0 0 1 0 0 33 1 1 47 41 15 41 15
1 4/25/2023 69 Maintenance solving 5 3 4 12 0 1 0 0 1 0 0 33 1 1 68 62 36 62 36
1 5/16/2023 90 Maintenance solving 3 4 4 11 0 1 0 0 1 0 0 33 1 1 89 83 57 83 57
2 2/16/2023 1 Baseline solving 2 1 1 4 0 1 1 0 0 1 0 0 0 0 0 -12 -35 0 0
2 2/23/2023 8 Baseline solving 2 1 1 4 0 1 1 0 0 1 0 0 0 0 7 -5 -28 0 0
2 2/27/2023 12 Baseline solving 2 1 1 4 0 1 1 0 0 1 0 0 0 0 11 -1 -24 0 0
2 2/28/2023 13 Intervention solving 3 3 3 9 0 1 0 1 0 0 13 0 1 0 12 0 -23 0 0
2 3/1/2023 14 Intervention solving 4 4 4 12 0 1 0 1 0 0 13 0 1 0 13 1 -22 1 0
2 3/2/2023 15 Intervention solving 4 4 4 12 0 1 0 1 0 0 13 0 1 0 14 2 -21 2 0
2 3/6/2023 19 Intervention solving 3 4 3 10 0 1 0 1 0 0 13 0 1 0 18 6 -17 6 0
2 3/7/2023 20 Intervention solving 4 4 4 12 0 1 0 1 0 0 13 0 1 0 19 7 -16 7 0
2 3/8/2023 21 Intervention solving 5 5 5 15 0 1 0 1 0 0 13 0 1 0 20 8 -15 8 0
2 3/9/2023 22 Intervention solving 5 5 3 13 0 1 0 1 0 0 13 0 1 0 21 9 -14 9 0
2 3/23/2023 36 Maintenance solving 4 4 4 12 0 1 0 0 1 0 0 36 1 1 35 23 0 23 0
2 4/25/2023 69 Maintenance solving 4 3 3 10 0 1 0 0 1 0 0 36 1 1 68 56 33 56 33
2 5/11/2023 85 Maintenance solving 5 5 5 15 0 1 0 0 1 0 0 36 1 1 84 72 49 72 49
3 2/24/2023 9 Baseline solving 3 1 2 6 0 1 1 0 0 9 0 0 0 0 0 -25 -60 0 0
3 3/6/2023 19 Baseline solving 3 1 1 5 0 1 1 0 0 9 0 0 0 0 10 -15 -50 0 0
3 3/9/2023 22 Baseline solving 3 1 1 5 0 1 1 0 0 9 0 0 0 0 13 -12 -47 0 0
3 3/21/2023 34 Intervention solving 4 2 3 9 0 1 0 1 0 0 34 0 1 0 25 0 -35 0 0
3 3/22/2023 35 Intervention solving 5 2 5 12 0 1 0 1 0 0 34 0 1 0 26 1 -34 1 0
3 3/23/2023 36 Intervention solving 5 5 5 15 0 1 0 1 0 0 34 0 1 0 27 2 -33 2 0
3 3/24/2023 37 Intervention solving 5 5 5 15 0 1 0 1 0 0 34 0 1 0 28 3 -32 3 0
3 3/27/2023 40 Intervention solving 5 3 5 13 0 1 0 1 0 0 34 0 1 0 31 6 -29 6 0
3 3/28/2023 41 Intervention solving 5 5 5 15 0 1 0 1 0 0 34 0 1 0 32 7 -28 7 0
3 3/31/2023 44 Intervention solving 5 5 3 13 0 1 0 1 0 0 34 0 1 0 35 10 -25 10 0
3 4/25/2023 69 Maintenance solving 2 3 5 10 0 1 0 0 1 0 0 69 1 1 60 35 0 35 0
3 5/16/2023 90 Maintenance solving 5 5 5 15 0 1 0 0 1 0 0 69 1 1 81 56 21 56 21
3 5/18/2023 92 Maintenance solving 5 2 5 12 0 1 0 0 1 0 0 69 1 1 83 58 23 58 23
4 2/28/2023 13 Baseline solving 0 0 0 0 0 1 1 0 0 13 0 0 0 0 0 -28 -56 0 0
4 3/8/2023 21 Baseline solving 0 0 0 0 0 1 1 0 0 13 0 0 0 0 8 -20 -48 0 0
4 3/22/2023 35 Baseline solving 0 0 0 0 0 1 1 0 0 13 0 0 0 0 22 -6 -34 0 0
4 3/28/2023 41 Intervention solving 5 5 5 15 0 1 0 1 0 0 41 0 1 0 28 0 -28 0 0
4 3/29/2023 42 Intervention solving 5 5 5 15 0 1 0 1 0 0 41 0 1 0 29 1 -27 1 0
4 3/30/2023 43 Intervention solving 5 3 5 13 0 1 0 1 0 0 41 0 1 0 30 2 -26 2 0
4 3/31/2023 44 Intervention solving 3 5 3 11 0 1 0 1 0 0 41 0 1 0 31 3 -25 3 0
4 4/4/2023 48 Intervention solving 5 5 3 13 0 1 0 1 0 0 41 0 1 0 35 7 -21 7 0
4 4/5/2023 49 Intervention solving 3 3 3 9 0 1 0 1 0 0 41 0 1 0 36 8 -20 8 0
4 4/6/2023 50 Intervention solving 3 5 3 11 0 1 0 1 0 0 41 0 1 0 37 9 -19 9 0
4 4/25/2023 69 Maintenance solving 3 4 4 11 0 1 0 0 1 0 0 69 1 1 56 28 0 28 0
4 5/15/2023 89 Maintenance solving 3 3 3 9 0 1 0 0 1 0 0 69 1 1 76 48 20 48 20
4 5/18/2023 92 Maintenance solving 3 3 3 9 0 1 0 0 1 0 0 69 1 1 79 51 23 51 23

Graphing

Baseline Stability

baseline_v <- read.csv("data/baseline_v.csv")
intervention_v <- read.csv("data/intervention_v.csv")

baseline_v$max_A_date <-as.Date(baseline_v$max_A_date, format = "%m/%d/%Y")
intervention_v$max_B_date <-as.Date(intervention_v$max_B_date, format = "%m/%d/%Y")
web_based_data$date <-as.Date(web_based_data$date, format = "%m/%d/%Y")
web_based_data$case <- paste0("Case ", web_based_data$case, sep = "")
baseline_v$case <- paste0("Case ", baseline_v$case, sep = "")
intervention_v$case <- paste0("Case ", intervention_v$case, sep = "")

ticks <- function(n) {function(limits) pretty(limits, n)}

web_based_data <- web_based_data %>%
  group_by(case, date) %>%
  mutate(average_sum = round(mean(sum),0)) 

web_based_data_baseline <- web_based_data %>%
  filter(phase== "Baseline") %>%
  group_by(case) %>%
  mutate(median = median(average_sum)) %>%
  mutate(upper_threshold = round(median + 0.25 * median, digits = 2)) %>%
  mutate(lower_threshold = round(median - 0.25 * median, digits = 2))

average_sum_baseline.plot <- web_based_data %>%
  ggplot(aes(x = date, y = average_sum, group = phase)) +
  facet_wrap2(case ~ ., ncol = 1, axes = "all", remove_labels = "all") +
  geom_line(data = web_based_data %>% filter(phase %in% c("Baseline", "Intervention", "Maintenance")),
            aes(group = paste(phase, question_type)),
            linewidth = 0.5) +
  geom_point(size = 2) +
  scale_x_date(labels = function(zero) gsub("^0", "", strftime(zero, "%m/%d")),
               date_breaks = "4 day",
               expand = c(0.02, 0.02)) +
  scale_y_continuous(breaks = ticks(5)) +
  theme_minimal(base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", size = 11),
    legend.position ="top",
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    legend.text = element_text(size = 11),
    legend.title = element_text(size = 11),
    legend.title.align = 0.5,
    axis.line = element_line(),          
    strip.text.x = element_text(color = "#3B3B3B", size = 11),
    axis.line.x = element_line(color = "#3B3B3B"),
    axis.text.x = element_text(size = 11, color = "#3B3B3B", angle = 45, hjust = 1),
    axis.ticks = element_line(color = "#3B3B3B"),
    axis.ticks.length = unit(0.1, "cm"),  
    axis.text.y = element_text(size = 11, color = "#3B3B3B"),
    axis.title = element_text(face = "bold", size = 11, color = "#3B3B3B")
  ) +
  labs(
    x = "Date",
    y = "Average Correct Score",
    title = ""
  ) +
  guides(shape="none") +
  geom_hline(data = web_based_data_baseline, aes(yintercept = web_based_data_baseline$upper_threshold),
             linetype = "longdash", linewidth = 0.5, color = "#CC5500") +
  geom_hline(data = web_based_data_baseline, aes(yintercept = web_based_data_baseline$median),
             linetype = "solid", linewidth = 0.5, color = "#4c4c4c") +
  geom_hline(data = web_based_data_baseline, aes(yintercept = web_based_data_baseline$lower_threshold),
             linetype = "longdash", linewidth = 0.5, color = "#CC5500") +
  geom_vline(data = baseline_v, aes(xintercept = baseline_v$max_A_date + 0.5),
             linetype = "longdash", linewidth = 0.5, color = "#4c4c4c") +
  geom_vline(data = intervention_v, aes(xintercept = intervention_v$max_B_date + 0.5),
             linetype = "longdash", linewidth = 0.5, color = "#4c4c4c") 

average_sum_baseline.plot

Student Performance (Figure 2)

web_based_data$question_type <- web_based_data$question_type %>% as.factor() 
# question_names <- c("Problem-Solving", "Visualization") 
# names(question_names) <- c("solving", "visual")
# web_based_data$question_type <- as.factor(question_names[web_based_data$question_type])
web_based_data$question_type <- relevel(web_based_data$question_type, "visualization")

sum.plot <- web_based_data %>%
  ggplot(aes(x = date, y = sum, color = as.factor(question_type), group = question_type)) +
  facet_wrap2(case ~ ., ncol = 1, axes = "all", remove_labels = "all") +
  geom_line(data = web_based_data %>% filter(phase %in% c("Baseline", "Intervention", "Maintenance")),
            aes(group = paste(phase, question_type)),
            linewidth = 0.5) +
  geom_point(size = 2, aes(shape = question_type)) +
  scale_shape_manual(values = c(16, 17)) +
  scale_x_date(labels = function(zero) gsub("^0", "", strftime(zero, "%m/%d")),
               date_breaks = "4 day",
               expand = c(0.02, 0.02)) +
  scale_y_continuous(breaks = ticks(5)) +
  theme_minimal(base_size = 11) +
  theme(
    plot.title = element_text(face = "bold", size = 11),
    legend.position ="top",
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    legend.text = element_text(size = 11),
    legend.title = element_text(size = 11),
    legend.title.align = 0.5,
    axis.line = element_line(),          
    strip.text.x = element_text(color = "#3B3B3B", size = 11),
    axis.line.x = element_line(color = "#3B3B3B"),
    axis.text.x = element_text(size = 11, color = "#3B3B3B", angle = 45, hjust = 1),
    axis.ticks = element_line(color = "#3B3B3B"),
    axis.ticks.length = unit(0.1, "cm"),  
    axis.text.y = element_text(size = 11, color = "#3B3B3B"),
    axis.title = element_text(face = "bold", size = 11, color = "#3B3B3B")
  ) +
  labs(
    x = "Date",
    y = "Correct Score",
    title = ""
  ) +
  guides(shape="none") +
  guides(color = guide_legend(title = "Question Type"), shape = guide_legend(title="Question Type")) +
  geom_vline(data = baseline_v, aes(xintercept = baseline_v$max_A_date + 0.5),
             linetype = "longdash", linewidth = 0.5, color = "#4c4c4c") +
  geom_vline(data = intervention_v, aes(xintercept = intervention_v$max_B_date + 0.5),
             linetype = "longdash", linewidth = 0.5, color = "#4c4c4c") 

sum.plot 

Visual Analysis

Within-Phase Patterns (Table 2)

lm_desc <- web_based_data %>%
  group_by(case, phase, question_type) %>%
  do(tidy(lm(sum ~ day, data = .))) %>%
  filter(term == "day") %>% 
  mutate_if(is.numeric, ~round(., 2)) %>%
  select(case, phase, question_type, estimate, std.error)

lm_desc$trend <- lm_desc$estimate
lm_desc$SE <- lm_desc$std.error

sum_desc <- web_based_data %>%
  group_by(case, phase, question_type) %>%
  summarise(min = min(sum), 
            max = max(sum), 
            level = mean(sum),
            median = median(sum),
            SD = sd(sum),
            range = paste(min, "-", max)) %>% 
  mutate_if(is.numeric, ~round(., 2)) %>%
  select(everything(), -min, -max)

within_td <- list(sum_desc, lm_desc) %>% purrr::reduce(left_join) 

within_td$SD <- paste0("(", within_td $SD, ")")
within_td$level <- paste(within_td $level, within_td $SD)
colnames(within_td )[colnames(within_td ) == "level"] <- "level (SD)"

within_td $SE <- paste0("(", within_td $SE, ")")
within_td $trend <- paste(within_td $trend, within_td $SE)
colnames(within_td )[colnames(within_td ) == "trend"] <- "trend (SE)"

within_phase <- within_td  %>% 
  select(case, phase, question_type, "level (SD)", "trend (SE)", range) %>%
  flextable() %>%
  merge_v(j = ~ case) %>%
  merge_v(j = ~ question_type) %>%
  merge_v(j = ~ phase) %>%
  theme_vanilla() %>%
  autofit() 

within_phase

case

phase

question_type

level (SD)

trend (SE)

range

Case 1

Baseline

visualization

2.67 (0.58)

0.14 (0.16)

2 - 3

solving

6.33 (0.58)

-0.14 (0.16)

6 - 7

Intervention

visualization

9.71 (4.07)

0.85 (0.23)

3 - 13

solving

12.71 (1.6)

0.04 (0.17)

11 - 15

Maintenance

visualization

12.25 (1.26)

-0.02 (0.03)

11 - 14

solving

11.5 (0.58)

-0.01 (0.01)

11 - 12

Case 2

Baseline

visualization

0.67 (0.58)

0.1 (0.04)

0 - 1

solving

4 (0)

0 (0)

4 - 4

Intervention

visualization

10.14 (5.24)

1.25 (0.32)

0 - 15

solving

11.86 (1.95)

0.32 (0.19)

9 - 15

Maintenance

visualization

10.33 (3.06)

-0.06 (0.11)

7 - 13

solving

12.33 (2.52)

0.04 (0.09)

10 - 15

Case 3

Baseline

visualization

2 (1.73)

0.25 (0.06)

0 - 3

solving

5.33 (0.58)

-0.08 (0.02)

5 - 6

Intervention

visualization

11.29 (1.38)

-0.21 (0.14)

9 - 13

solving

13.14 (2.19)

0.24 (0.25)

9 - 15

Maintenance

visualization

10.67 (2.08)

0.12 (0.11)

9 - 13

solving

12.33 (2.52)

0.15 (0.13)

10 - 15

Case 4

Baseline

visualization

0 (0)

0 (0)

0 - 0

solving

0 (0)

0 (0)

0 - 0

Intervention

visualization

8.29 (2.87)

0.75 (0.11)

6 - 12

solving

12.43 (2.23)

-0.46 (0.18)

9 - 15

Maintenance

visualization

10 (3.61)

0.27 (0.11)

6 - 13

solving

9.67 (1.15)

-0.09 (0.01)

9 - 11

Between-Phase Patterns (Table 2)

Baseline vs Intervention
sum_AB <- batch_calc_ES(dat = web_based_data,
                            grouping = c(case, question_type),
                            condition = phase,
                            outcome = sum,
                            session_number = day,
                            baseline_phase = "Baseline",
                            intervention_phase = "Intervention",
                            ES = c("Tau"),
                            improvement = "increase",
                            format = "wide") %>%
  mutate_if(is.numeric, ~round(., 2)) %>%
  flextable() %>%
  merge_v(j = ~ case) %>%
  merge_v(j = ~ question_type) %>%
  theme_vanilla() %>%
  autofit()

sum_AB

case

question_type

Tau_Est

Tau_SE

Tau_CI_lower

Tau_CI_upper

Case 1

visualization

0.90

0.13

0.09

0.99

solving

1.00

0.09

1.00

1.00

Case 2

visualization

0.76

0.25

-0.06

0.96

solving

1.00

0.09

1.00

1.00

Case 3

visualization

1.00

0.09

1.00

1.00

solving

1.00

0.09

1.00

1.00

Case 4

visualization

1.00

0.09

1.00

1.00

solving

1.00

0.09

1.00

1.00

Intervention vs Maintenance
sum_BM <- batch_calc_ES(dat = web_based_data,
                            grouping = c(case, question_type),
                            condition = phase,
                            outcome = sum,
                            session_number = day,
                            baseline_phase = "Intervention",
                            intervention_phase = "Maintenance",
                            ES = c("Tau"),
                            improvement = "increase",
                            format = "wide") %>%
  mutate_if(is.numeric, ~round(., 2)) %>%
  flextable() %>%
  merge_v(j = ~ case) %>%
  merge_v(j = ~ question_type) %>%
  theme_vanilla() %>%
  autofit()

sum_BM

case

question_type

Tau_Est

Tau_SE

Tau_CI_lower

Tau_CI_upper

Case 1

visualization

0.29

0.36

-0.39

0.75

solving

-0.50

0.31

-0.86

0.22

Case 2

visualization

-0.14

0.40

-0.70

0.53

solving

0.10

0.48

-0.56

0.68

Case 3

visualization

-0.29

0.53

-0.78

0.44

solving

-0.24

0.47

-0.75

0.47

Case 4

visualization

0.33

0.46

-0.41

0.80

solving

-0.71

0.26

-0.95

0.10

Bayesian CLMMs

Results

Fixed Coefficients in Logit (Table 3)

fixed_coefficient <- fixef(Model)

fixed_coefficient[1:5, 1] <- fixed_coefficient[1:5, 1] * -1

rownames(fixed_coefficient)[1:5] <- c("intercept (Y>0)", "intercept (Y>1)", "intercept (Y>2)", "intercept (Y>3)", "intercept (Y>4)")

fixed_coefficient %>% data.frame() %>% mutate(odd_ratio = exp(Estimate)) %>% 
  mutate_if(is.numeric, ~ round(., 2))
##                  Estimate Est.Error  Q2.5 Q97.5 odd_ratio
## intercept (Y>0)     -1.07      1.47 -1.90  3.97      0.34
## intercept (Y>1)     -3.95      1.51  1.00  6.95      0.02
## intercept (Y>2)     -5.46      1.52  2.50  8.53      0.00
## intercept (Y>3)     -7.65      1.54  4.63 10.78      0.00
## intercept (Y>4)     -9.03      1.56  6.00 12.17      0.00
## time_A               0.06      0.06 -0.05  0.18      1.06
## level_AB             4.56      1.35  1.60  6.99     95.33
## trend_AB             0.13      0.08 -0.04  0.30      1.14
## level_BM            -3.42      1.50 -6.32 -0.41      0.03
## trend_BM            -0.18      0.07 -0.31 -0.05      0.83
## solving              2.36      0.62  1.19  3.64     10.59
## time_A:solving       0.03      0.03 -0.02  0.09      1.04
## level_AB:solving     0.14      0.76 -1.39  1.61      1.16
## trend_AB:solving    -0.24      0.07 -0.37 -0.11      0.79
## level_BM:solving     2.60      1.43 -0.19  5.35     13.49
## trend_BM:solving     0.22      0.06  0.09  0.34      1.24

Plots

Posterior Predictive Check

pp_check(Model)

Posterior Density Plots and Trace Plots

plot(Model)

mcmc_plot(Model, type = "trace")

Rubric

Rubric for Fraction Multiplication Word Problems (Table S1)

tableS1 <- read.csv("data/tableS1.csv")

rubric <- kable(tableS1, align = "lccc", 
                col.names = c("Type", "Rubric", "Correct", "Score", 
                              "Type", "Rubric", "Correct", "Score"), 
                caption = "") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE)
Type Rubric Correct Score Type Rubric Correct Score
Visualization Correctly created a visual model pertinent to problem-solving and accurately explained how this model applies to the product. Yes 5 Problem Solving Correctly answered and detailed the problem-solving process, including how it relates to the units of the product and associated fractions. Yes 5
Visualization Drew a relevant visual model for problem-solving, but either did not describe the drawing or provided a vague description. However, the model correctly represents the product. Yes 4 Problem Solving Correctly solved and demonstrated the arithmetic procedures, but did not provide a description of the problem-solving process. Yes 4
Visualization Made an incomplete attempt at drawing a visual model, which failed to accurately depict fractions, such as errors in using a number line or a rectangular area model for representing the multiplier or multiplicand. No 3 Problem Solving Partially solved the problem, with arithmetic or procedural errors, such as mistakes in the simplification process. No 3
Visualization Submitted a flawed drawing that was intended to relate to the problem context, but it incorrectly represented the fractions involved in that context. No 2 Problem Solving Offered faulty problem-solving that led to an incorrect answer, including errors in transcribing. No 2
Visualization Incorrectly guessed or drew something unrelated to the context of the word problem. No 1 Problem Solving Incorrectly guessed the mathematical operations, resulting in a random and unrelated answer. No 1
Visualization Did not attempt the problem, simply wrote a number, or drew a picture that was irrelevant to the task. Blank 0 Problem Solving Did not attempt the problem. Blank 0