# List of packages used in the analysis
packages <- c("foreign", "ggplot2", "lme4", "boot", "reshape2", "broom",
"scales", "knitr", "stringr", "ggpubr", "tidyverse", "plyr", "dplyr",
"TOSTER", "future", "parallel", "doParallel", "doSNOW")
# Check the required packages are installed and load them
check.packages <- function(pkg) {
new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
if (length(new.pkg))
install.packages(new.pkg, dependencies = TRUE)
suppressPackageStartupMessages(sapply(pkg, require, character.only = TRUE))
}
check.packages(packages)
foreign ggplot2 lme4 boot reshape2 broom
TRUE TRUE TRUE TRUE TRUE TRUE
scales knitr stringr ggpubr tidyverse plyr
TRUE TRUE TRUE TRUE TRUE TRUE
dplyr TOSTER future parallel doParallel doSNOW
TRUE TRUE TRUE TRUE TRUE TRUE
## Function for returning beta in multiple regression bootstrap
reg.beta.boot <- function(formula, data, indices) {
d <- data[indices, ]
fit <- lm(formula, data = d)
return(coef(fit))
}
## Function for returning F ratio in multiple regression bootstrap
reg.f.boot <- function(formula, data, indices) {
d <- data[indices, ]
fit <- lm(formula, data = d)
return(summary(fit)$fstatistic[1])
}
# Function for formatting a p-value in APA style
aPa <- function(val) {
if (val < 0.001) {
pvl <- paste("<", sub("^(-?)0.", "\\1.", sprintf("%.3f", val)))
} else {
pvl <- paste("=", sub("^(-?)0.", "\\1.", sprintf("%.3f", val)))
}
return(pvl)
}
# Function for running the bootstrapped multiple regression
bootlm <- function(mod, modeldata) {
pv <- function(val) {
paste("=", sub("^(-?)0.", "\\1.", sprintf("%.3f", val)))
}
res <- tidy(mod)[1:2]
names(res)[names(res) == "estimate"] <- "beta"
f <- mod$call[[2]]
cluster <- makeCluster(cores_to_use, type = "SOCK")
registerDoSNOW(cluster)
bootCoef <- boot(data = modeldata, statistic = reg.beta.boot, R = rsamp,
formula = f, cl = cluster, parallel = "snow", ncpus = cores_to_use)
stopCluster(cluster)
intervals <- data.frame()
for (i in 1:nrow(res)) {
bootInt <- boot.ci(bootCoef, type = "norm", index = i)
lower <- as.numeric(bootInt$normal[2])
beta.lower <- ifelse(abs(lower) < 0.01, scientific(lower, digits = 2),
round(lower, 2))
upper <- as.numeric(bootInt$normal[3])
beta.upper <- ifelse(abs(upper) < 0.01, scientific(upper, digits = 2),
round(upper, 2))
intervals <- rbind(intervals, data.frame(beta.lower, beta.upper))
}
res$std.error <- tidy(bootCoef)$std.error
t <- res$beta/res$std.error
p <- c()
for (i in 1:length(bootCoef$t0)) {
p <- c(p, mean(abs(bootCoef$t[, i] - mean(bootCoef$t[, i], na.rm = T)) >
abs(bootCoef$t0[i]), na.rm = T))
}
res$t <- ifelse(abs(t) < 0.01, scientific(t, digits = 2), round(t,
2))
res$beta <- ifelse(abs(res$beta) < 0.01, scientific(res$beta, digits = 2),
round(res$beta, 2))
res$std.error <- ifelse(abs(res$std.error) < 0.01, scientific(res$std.error,
digits = 2), round(res$std.error, 2))
res$pval <- ifelse(p < 0.001, "< .001", pv(p))
res$sig <- ifelse(p < 0.01, "***", ifelse(p < 0.05, "*", ifelse(p <
0.1, ".", "")))
res$beta <- paste(res$beta, " [", intervals$beta.lower, ", ", intervals$beta.upper,
"]", sep = "")
cluster <- makeCluster(cores_to_use, type = "SOCK")
registerDoSNOW(cluster)
bootF <- boot(data = modeldata, statistic = reg.f.boot, R = rsamp,
formula = f, cl = cluster, parallel = "snow", ncpus = cores_to_use)
stopCluster(cluster)
f.CI <- boot.ci(bootF, type = "norm")
lower <- as.numeric(f.CI$normal[2])
f.lower <- ifelse(abs(lower) < 0.01, scientific(lower, digits = 2),
round(lower, 2))
upper <- as.numeric(f.CI$normal[3])
f.upper <- ifelse(abs(upper) < 0.01, scientific(upper, digits = 2),
round(upper, 2))
fratio <- paste(round(summary(mod)$fstatistic[1], 2), " [", f.lower,
", ", f.upper, "]", sep = "")
modelf <- summary(mod)$fstatistic
Ftext <- paste("F(", summary(mod)$fstatistic[2], ", ", summary(mod)$fstatistic[3],
") = ", fratio, sep = "")
Fp <- pf(modelf[1], modelf[2], modelf[3], lower.tail = F)
Fpval <- paste("*p* ", ifelse(Fp < 0.001, "< .001", pv(Fp)), sep = "")
rsq <- paste("*R*^2^ = ", round(summary(mod)$r.square, 4), sep = "")
rsq
modelfit <- paste(Ftext, Fpval, rsq, sep = ", ")
varexpl <- round(summary(mod)$r.square, 4)
output <- list(res, modelfit, varexpl)
return(output)
}
# Format plots
format.plot <- function(p) {
p <- p + theme_bw()
p <- p + theme(legend.position = "none")
p <- p + theme(plot.title = element_text(lineheight = 0.8, face = "bold",
size = 14), axis.title = element_text(face = "bold", size = 14),
axis.text = element_text(face = "bold", size = 12), panel.border = element_rect(colour = "black",
size = 1.5), legend.key.size = unit(0.9, "line"), legend.title = element_text(face = "bold",
size = 11), legend.text = element_text(size = 11), legend.position = "none",
strip.text = element_text(face = "bold", size = 14, color = "white"),
strip.background = element_rect(fill = "black"))
p <- p + scale_fill_manual(values = c("#CC6666", "#9999CC", "#66CC99"))
return(p)
}
## Sets the appearace of the histograms
formatHist <- function(p) {
p <- p + theme_bw()
p <- p + theme(plot.title = element_text(lineheight = 0.8, face = "bold",
size = 19), axis.title = element_text(face = "bold", size = 17,
colour = "black"), axis.text = element_text(face = "bold", size = 14),
panel.border = element_rect(colour = "black", size = 1))
return(p)
}
## Creates a violin+box plot
viobox <- function(p) {
p <- p + geom_violin(trim = FALSE, adjust = 0.5)
p <- p + geom_boxplot(width = 0.1, size = 0.75)
p <- p + geom_hline(aes(yintercept = 0), linetype = 2, size = 0.5,
colour = "#333333")
p <- p + theme_bw()
p <- p + theme(legend.position = "none")
p <- p + theme(plot.title = element_text(lineheight = 0.8, face = "bold",
size = 14), axis.title = element_text(face = "bold", size = 14),
axis.text = element_text(face = "bold", size = 12), panel.border = element_rect(colour = "black",
size = 1.5), legend.key.size = unit(0.9, "line"), legend.title = element_text(face = "bold",
size = 11), legend.text = element_text(size = 11), legend.position = "none",
strip.text = element_text(face = "bold", size = 14, color = "white"),
strip.background = element_rect(fill = "black"))
p <- p + scale_fill_manual(values = c("#CC6666", "#9999CC", "#66CC99"))
p
}
# Round all the numbers in a data frame
round_df <- function(df) {
nums <- vapply(df, is.numeric, FUN.VALUE = logical(1))
df[, nums] <- round(df[, nums], digits = 2)
return(df)
}
# Plot data for equivalence test
eq_plot_dat <- function(d) {
res <- data.frame(diff = d$diff, lowertost = d$LL_CI_TOST, uppertost = d$UL_CI_TOST,
lowb = d$low_eqbound, highb = d$high_eqbound, p1 = d$TOST_p1, p2 = d$TOST_p2)
return(res)
}
# Plot for equivalence test
eq_plot <- function(p) {
if (graph$p1 < 0.05 & graph$p2 < 0.05) {
cl = "#05B859"
} else {
cl = "#CC6666"
}
if (graph$p1 < 0.05 & graph$p2 < 0.05) {
cl = "black"
} else {
cl = "black"
}
p <- p + geom_hline(yintercept = 0, linetype = 2, size = 0.75, colour = "#CCCCCC")
p <- p + geom_hline(yintercept = graph$lowb, size = 1, linetype = 2,
colour = "black")
p <- p + geom_hline(yintercept = graph$highb, size = 1, linetype = 2,
colour = "black")
p <- p + geom_errorbar(aes(ymin = lowertost, ymax = uppertost), width = 0,
size = 3, colour = cl)
p <- p + geom_point(size = 8, colour = cl)
p <- p + ylab("Mean Difference\n")
p <- p + coord_flip()
p <- p + theme_bw()
p <- p + theme(plot.title = element_text(lineheight = 0.8, face = "bold",
size = 14), axis.title = element_text(face = "bold", size = 12),
axis.text = element_text(face = "bold", size = 11), panel.border = element_rect(colour = "black",
size = 1.5), axis.ticks.y = element_blank(), axis.text.y = element_blank(),
axis.title.y = element_blank())
return(p)
}
# Equivalence test results
eq_text_results <- function(d) {
if (d$TOST_p1 > d$TOST_p2) {
paste("t(", round(d$TOST_df, 2), ") = ", round(d$TOST_t1, 2), ", *p* ",
aPa(d$TOST_p1), sep = "")
} else {
paste("t(", round(d$TOST_df, 2), ") = ", round(d$TOST_t2, 2), ", *p* ",
aPa(d$TOST_p2), sep = "")
}
}
# Build table for equivalence test
eq_add_row <- function(d) {
if (d$TOST_p1 > d$TOST_p2) {
res <- data.frame(t = round(d$TOST_t1, 2), df = round(d$TOST_df,
2), p = aPa(d$TOST_p1))
} else {
res <- data.frame(t = round(d$TOST_t2, 2), df = round(d$TOST_df,
2), p = aPa(d$TOST_p2))
}
return(res)
}
# Function to convert PLS-5 raw scores to/from growth scale values
# (GSVs)
gsv_convert <- function(input, type, out, new = c()) {
# Receptive
if (type == "receptive") {
convert_tbl <- data.frame(raw = c(0:65), gsv = c(96, 127, 153,
175, 194, 207, 218, 227, 236, 245, 254, 262, 271, 280, 288,
296, 304, 313, 321, 332, 342, 351, 358, 364, 369, 374, 379,
384, 388, 393, 397, 402, 408, 414, 420, 425, 431, 436, 440,
445, 449, 453, 457, 460, 464, 467, 470, 473, 476, 478, 481,
484, 486, 489, 492, 495, 498, 501, 504, 508, 511, 515, 520,
526, 535, 543))
new <- c()
if (out == "gsv") {
for (i in 1:length(input)) {
new <- c(new, convert_tbl$gsv[convert_tbl$raw == input[i]])
}
} else if (out == "raw") {
for (i in 1:length(input)) {
new <- c(new, convert_tbl$raw[convert_tbl$gsv == input[i]])
}
}
}
# Expressive
if (type == "expressive") {
convert_tbl <- data.frame(raw = c(0:67), gsv = c(157, 171, 183,
193, 204, 216, 230, 242, 251, 258, 264, 270, 275, 280, 285,
290, 296, 302, 307, 313, 318, 323, 328, 334, 341, 349, 359,
367, 374, 380, 386, 393, 400, 409, 417, 426, 433, 440, 446,
452, 457, 462, 466, 469, 473, 476, 479, 483, 486, 489, 491,
494, 497, 500, 503, 505, 508, 511, 513, 516, 519, 522, 525,
529, 534, 539, 548, 556))
new <- c()
if (out == "gsv") {
for (i in 1:length(input)) {
new <- c(new, convert_tbl$gsv[convert_tbl$raw == input[i]])
}
} else if (out == "raw") {
for (i in 1:length(input)) {
new <- c(new, convert_tbl$raw[convert_tbl$gsv == input[i]])
}
}
}
return(new)
}
# P-value
pv <- function(val) {
sub("^(-?)0.", "\\1.", sprintf("%.3f", val))
}
# Load the data and set up the model predictors
data <- data.frame(read.spss("Data/analysis2.sav"))
data$PLSExpV1gsv <- gsv_convert(input = data$PLSExpV1, out = "gsv", type = "expressive")
data$PLSExpV2gsv <- gsv_convert(input = data$PLSExpV2, out = "gsv", type = "expressive")
data$PLSRecpV1gsv <- gsv_convert(input = data$PLSRecpV1, out = "gsv", type = "receptive")
data$PLSRecpV2gsv <- gsv_convert(input = data$PLSRecpV2, out = "gsv", type = "receptive")
data$GainExp <- data$PLSExpV2 - data$PLSExpV1
data$GainRecp <- data$PLSRecpV2 - data$PLSRecpV1
data$GainExpGsv <- data$PLSExpV2gsv - data$PLSExpV1gsv
data$GainRecpGsv <- data$PLSRecpV2gsv - data$PLSRecpV1gsv
data$Condition <- factor(data$Condition, levels = c("P.R", "D.R", "control"),
labels = c("Pause", "Dialogic", "Control"))
contrasts(data$Condition)
[,1] [,2]
Pause -1 -1
Dialogic 1 -1
Control 0 2
[,1]
Low SES -1
High SES 1
data$PNum <- factor(data$PNum)
data$pauseVSdialogic <- 0
data$pauseVSdialogic[data$Condition == "Pause"] <- -0.5
data$pauseVSdialogic[data$Condition == "Dialogic"] <- 0.5
data$control <- ifelse(data$Condition == "Control", -1, 0.5)
data$cFidelity <- data$Fidelity - mean(data$Fidelity[!is.na(data$Fidelity)])
mlu <- data.frame(read.spss("Data/MLU analysis.sav"))
mlu$Condition <- factor(mlu$Condition, levels = c("P.R", "D.R", "control"),
labels = c("Pause", "Dialogic", "Control"))
contrasts(mlu$Condition)
[,1] [,2]
Pause -1 -1
Dialogic 1 -1
Control 0 2
[,1]
Low SES -1
High SES 1
# Subset data by intervention group
Dparent <- subset(data, Condition != "Pause")
Dparent$Condition <- factor(Dparent$Condition)
Dparent$dialogicVScontrol <- ifelse(Dparent$Condition == "Control", -0.5,
0.5)
Pparent <- subset(data, Condition != "Dialogic")
Pparent$Condition <- factor(Pparent$Condition)
Pparent$pauseVScontrol <- ifelse(Pparent$Condition == "Control", -0.5,
0.5)
## Histograms for change in reading behaviour
p1 <- ggplot(Dparent[!is.na(Dparent$Dgain), ], aes(x = Dgain))
p1 <- p1 + geom_histogram(binwidth = 0.1, fill = "#a6a6a6")
p1 <- p1 + xlab("Change in Dialogic\nReading Behaviour\n") + ylab("\nFrequency")
p1 <- p1 + coord_cartesian(ylim = c(0, 14)) + scale_y_continuous(breaks = seq(0,
14, 2))
p1 <- formatHist(p1)
p2 <- ggplot(Pparent[!is.na(Pparent$Dgain), ], aes(x = Pgain))
p2 <- p2 + geom_histogram(binwidth = 0.1, fill = "#a6a6a6")
p2 <- p2 + xlab("Change in Pause\nReading Behaviour\n") + ylab("\nFrequency")
p2 <- p2 + coord_cartesian(ylim = c(0, 18)) + scale_y_continuous(breaks = seq(0,
18, 2))
p2 <- formatHist(p2)
ggarrange(p1, p2, ncol = 2)
# Plot
p3 <- ggplot(Dparent, aes(x = Condition, y = Dgain))
p3 <- viobox(p3) + facet_wrap(~SES) + ylab("Parental Dialogic\nBehaviour Gains")
p3
Warning: Removed 11 rows containing non-finite values (stat_ydensity).
Warning: Removed 11 rows containing non-finite values (stat_boxplot).
# Regression models
Dparent$cD1 <- Dparent$D1 - mean(Dparent$D1, na.rm = T)
dgainModel <- lm(Dgain ~ dialogicVScontrol * (cFidelity + SES + cD1), Dparent)
dgainResAll <- bootlm(dgainModel, Dparent)
dgainRes <- dgainResAll[[1]]
dgainRes$pval <- str_replace(dgainRes$pval, "= ", "")
trm <- c("Intercept", "Dialogic vs. Control", "Fidelity", "SES", "Pre-Intervention Score",
"Dialogic vs. Control × Fidelity", "Dialogic vs. Control × SES",
"Dialogic vs. Control × Pre-Intervention")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
dgainResTab <- cbind(trm, dgainRes[2:5])
dgainResTab$trm <- as.character(dgainResTab$trm)
kable(dgainResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 0.12 [0.09, 0.21] | 0.03 | 3.90 | < .001 |
Dialogic vs. Control | 0.36 [0.17, 0.41] | 0.06 | 5.97 | < .001 |
Fidelity | 2.3e-03 [-8.6e-04, 5.1e-03] | 1.5e-03 | 1.52 | .096 |
SES | 0.03 [-0.09, 0.09] | 0.04 | 0.76 | .449 |
Pre-Intervention Score | -0.73 [-0.9, -0.56] | 0.09 | -8.40 | < .001 |
Dialogic vs. Control × Fidelity | -2.6e-03 [-8.4e-03, 3.3e-03] | 3.0e-03 | -0.88 | .304 |
Dialogic vs. Control × SES | -0.07 [-0.17, 0.18] | 0.09 | -0.76 | .441 |
Dialogic vs. Control × Pre-Intervention | -0.16 [-0.49, 0.17] | 0.17 | -0.91 | .356 |
F(7, 82) = 16.62 [0.97, 26.84], p < .001, R2 = 0.5866, N = 90
# Plot
p4 <- ggplot(Pparent, aes(x = Condition, y = Pgain))
p4 <- viobox(p4) + facet_wrap(~SES) + ylab("Parental Pause\nBehaviour Gains")
p4
Warning: Removed 8 rows containing non-finite values (stat_ydensity).
Warning: Removed 8 rows containing non-finite values (stat_boxplot).
# Regression Model
Pparent$cP1 <- Pparent$P1 - mean(Pparent$P1, na.rm = T)
pgainModel <- lm(Pgain ~ pauseVScontrol * (cP1 + SES + cFidelity), Pparent)
pgainResAll <- bootlm(pgainModel, Pparent)
pgainRes <- pgainResAll[[1]]
pgainRes$pval <- str_replace(pgainRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Control", "Fidelity", "SES", "Pre-Intervention Score",
"Pause vs. Control × Fidelity", "Pause vs. Control × SES", "Pause vs. Control × Pre-Intervention")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
pgainResTab <- cbind(trm, pgainRes[2:5])
pgainResTab$trm <- as.character(pgainResTab$trm)
kable(pgainResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 0.2 [0.18, 0.32] | 0.04 | 5.57 | < .001 |
Pause vs. Control | 0.42 [0.29, 0.57] | 0.07 | 5.87 | < .001 |
Fidelity | -0.3 [-0.58, -0.02] | 0.14 | -2.13 | .034 |
SES | 0.05 [-0.09, 0.09] | 0.05 | 1.04 | .294 |
Pre-Intervention Score | 7.6e-04 [-2.6e-03, 4e-03] | 1.7e-03 | 0.45 | .637 |
Pause vs. Control × Fidelity | 0.56 [0.05, 1.14] | 0.28 | 1.98 | .047 |
Pause vs. Control × SES | 9.7e-03 [-0.18, 0.19] | 0.09 | 0.10 | .917 |
Pause vs. Control × Pre-Intervention | -3.6e-03 [-9.9e-03, 3.4e-03] | 3.4e-03 | -1.06 | .267 |
F(7, 82) = 16.76 [3.96, 24.57], p < .001, R2 = 0.5886, N = 90
p1 <- ggplot(data, aes(x = GainExp)) + geom_histogram(binwidth = 1, fill = "#a6a6a6")
p1 <- p1 + xlab("Change in PLS-5\nExpressive Vocabulary\n") + ylab("\nFrequency")
p1 <- p1 + coord_cartesian(ylim = c(0, 20.1)) + scale_y_continuous(breaks = seq(0,
20, 5))
p1 <- formatHist(p1)
p2 <- ggplot(data, aes(x = GainRecp)) + geom_histogram(binwidth = 1, fill = "#a6a6a6")
p2 <- p2 + xlab("Change in PLS-5\nReceptive Vocabulary\n") + ylab("\nFrequency")
p2 <- p2 + coord_cartesian(ylim = c(0, 20.1)) + scale_y_continuous(breaks = seq(0,
20, 5))
p2 <- formatHist(p2)
p3 <- ggplot(data[!is.na(data$CelfGain), ], aes(x = CelfGain))
p3 <- p3 + geom_histogram(binwidth = 1, fill = "#a6a6a6")
p3 <- p3 + xlab("Change in CELF\nPreschool-2 Score\n") + ylab("\nFrequency")
p3 <- p3 + coord_cartesian(ylim = c(0, 20.1))
p3 <- p3 + scale_y_continuous(breaks = seq(0, 20, 5))
p3 <- formatHist(p3)
p4 <- ggplot(mlu[!is.na(mlu$ToyMLUGain), ], aes(x = ToyMLUGain))
p4 <- p4 + geom_histogram(binwidth = 0.1, fill = "#a6a6a6")
p4 <- p4 + xlab("Change in Mean\nLength of Utterance\n") + ylab("\nFrequency")
p4 <- p4 + coord_cartesian(ylim = c(0, 7.1)) + scale_y_continuous(breaks = seq(0,
7, 1))
p4 <- formatHist(p4)
ggarrange(p1, p3, p2, p4, ncol = 2, nrow = 2)
# Violin plots
p5 <- ggplot(data, aes(x = Condition, y = GainExp))
p5 <- viobox(p5) + facet_wrap(~SES) + ylab("Change in Expressive\nLanguage Score")
p5
# Regression Models for Expressive Vocabulary
data$cExp1 <- data$PLSExpV1 - mean(data$PLSExpV1, na.rm = T)
data$Dialogic_Exit <- data$D2 - mean(data$D2, na.rm = T)
data$Pause_Exit <- data$P2 - mean(data$P2, na.rm = T)
expModel <- lm(GainExp ~ (pauseVSdialogic + control) * (cExp1 + SES + cFidelity),
data)
expResAll <- bootlm(expModel, data)
expRes <- expResAll[[1]]
expRes$pval <- str_replace(expRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Fidelity", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Fidelity", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Fidelity")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
expResTab <- cbind(trm, expRes[2:5])
expResTab$trm <- as.character(expResTab$trm)
kable(expResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 1.33 [0.83, 2.71] | 0.48 | 2.77 | .007 |
Pause vs. Dialogic | 0.5 [-1.97, 1.88] | 0.98 | 0.51 | .608 |
Control vs. Intervention | 0.24 [-1.4, 1.68] | 0.79 | 0.31 | .766 |
Pre-Intervention Score | -0.1 [-0.22, 0.03] | 0.06 | -1.53 | .124 |
SES | 0.42 [-1.17, 1.16] | 0.59 | 0.71 | .468 |
Fidelity | 3.3e-03 [-0.04, 0.04] | 0.02 | 0.16 | .842 |
Pause vs. Dialogic × Pre-Intervention Score | -0.1 [-0.41, 0.2] | 0.16 | -0.65 | .511 |
Pause vs. Dialogic × SES | -0.52 [-2.59, 2.65] | 1.34 | -0.39 | .697 |
Pause vs. Dialogic × Fidelity | 0.03 [-0.04, 0.1] | 0.04 | 0.82 | .394 |
Control vs. Intervention × Pre-Intervention Score | 0.05 [-0.13, 0.22] | 0.09 | 0.56 | .568 |
Control vs. Intervention × SES | -0.03 [-1.76, 1.76] | 0.90 | -0.03 | .973 |
Control vs. Intervention × Fidelity | -8.8e-03 [-0.07, 0.07] | 0.03 | -0.25 | .738 |
F(11, 135) = 0.5 [-1.85, 0.85], p = .898, R2 = 0.0394, N = 147
# A model containing the parental exit scores as predictors
expModel <- lm(GainExp ~ (pauseVSdialogic + control) * (cExp1 + SES + Dialogic_Exit +
Pause_Exit), data)
expResAll <- bootlm(expModel, data)
expRes <- expResAll[[1]]
expRes$pval <- str_replace(expRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Dialogic Score", "Pause Score", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Dialogic Score",
"Pause vs. Dialogic × Pause Score", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Dialogic Score",
"Control vs. Intervention × Pause Score")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
expResTab <- cbind(trm, expRes[2:5])
expResTab$trm <- as.character(expResTab$trm)
kable(expResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 1.31 [0.58, 2.57] | 0.51 | 2.59 | .010 |
Pause vs. Dialogic | 0.8 [-1.76, 2.39] | 1.06 | 0.76 | .442 |
Control vs. Intervention | 3.5e-03 [-1.37, 1.78] | 0.81 | 4.3e-03 | .996 |
Pre-Intervention Score | -0.13 [-0.25, 9.1e-04] | 0.06 | -1.98 | .050 |
SES | 0.27 [-1.1, 1.08] | 0.55 | 0.49 | .627 |
Dialogic Score | -4.33 [-7.85, -0.75] | 1.81 | -2.39 | .018 |
Pause Score | 4.78 [0.83, 8.54] | 1.97 | 2.43 | .018 |
Pause vs. Dialogic × Pre-Intervention Score | -0.06 [-0.39, 0.25] | 0.16 | -0.37 | .700 |
Pause vs. Dialogic × SES | -0.48 [-2.52, 2.57] | 1.30 | -0.37 | .714 |
Pause vs. Dialogic × Dialogic Score | 5.88 [-3.21, 14.29] | 4.46 | 1.32 | .176 |
Pause vs. Dialogic × Pause Score | -1.31 [-9.27, 7.34] | 4.24 | -0.31 | .748 |
Control vs. Intervention × Pre-Intervention Score | -9.2e-03 [-0.18, 0.16] | 0.09 | -0.1 | .910 |
Control vs. Intervention × SES | 0.17 [-1.63, 1.59] | 0.82 | 0.21 | .830 |
Control vs. Intervention × Dialogic Score | -1.31 [-6.24, 3.4] | 2.46 | -0.53 | .584 |
Control vs. Intervention × Pause Score | 2.39 [-3.32, 8.52] | 3.02 | 0.79 | .418 |
F(14, 122) = 1.11 [-1.66, 1.51], p = .359, R2 = 0.1126, N = 137
# A model containing the parental exit scores as predictors
expModel <- lm(GainExpGsv ~ (pauseVSdialogic + control) * (cExp1 + SES +
Dialogic_Exit + Pause_Exit), data)
expResAll <- bootlm(expModel, data)
expRes <- expResAll[[1]]
expRes$pval <- str_replace(expRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Dialogic Score", "Pause Score", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Dialogic Score",
"Pause vs. Dialogic × Pause Score", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Dialogic Score",
"Control vs. Intervention × Pause Score")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
expResTab <- cbind(trm, expRes[2:5])
expResTab$trm <- as.character(expResTab$trm)
kable(expResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 7.28 [1.95, 15.33] | 3.41 | 2.13 | .033 |
Pause vs. Dialogic | 5.09 [-12.19, 13.34] | 6.51 | 0.78 | .436 |
Control vs. Intervention | -0.47 [-10.92, 11.56] | 5.73 | -0.08 | .934 |
Pre-Intervention Score | -1.12 [-1.88, -0.3] | 0.40 | -2.76 | .007 |
SES | 1.38 [-7.01, 6.93] | 3.56 | 0.39 | .693 |
Dialogic Score | -23.44 [-44.15, -1.94] | 10.77 | -2.18 | .032 |
Pause Score | 26.5 [1.44, 49.97] | 12.38 | 2.14 | .034 |
Pause vs. Dialogic × Pre-Intervention Score | -0.09 [-2.05, 1.81] | 0.99 | -0.10 | .930 |
Pause vs. Dialogic × SES | -4.48 [-15.16, 15.68] | 7.87 | -0.57 | .568 |
Pause vs. Dialogic × Dialogic Score | 38.6 [-16.13, 91.11] | 27.36 | 1.41 | .148 |
Pause vs. Dialogic × Pause Score | -18.26 [-69.74, 34.87] | 26.69 | -0.68 | .488 |
Control vs. Intervention × Pre-Intervention Score | -0.01 [-1.19, 1.09] | 0.58 | -0.02 | .978 |
Control vs. Intervention × SES | 0.69 [-10.89, 10.89] | 5.56 | 0.12 | .902 |
Control vs. Intervention × Dialogic Score | -4.12 [-33.83, 24.37] | 14.85 | -0.28 | .770 |
Control vs. Intervention × Pause Score | 12.08 [-25.02, 51.22] | 19.45 | 0.62 | .518 |
F(14, 122) = 1.26 [-1.84, 1.92], p = .240, R2 = 0.1266, N = 137
p6 <- ggplot(data, aes(x = Condition, y = GainRecp))
p6 <- viobox(p6) + facet_wrap(~SES) + ylab("Change in Receptive\nLanguage Score")
p6
# Receptive Plot and Model
data$cRecp1 <- data$PLSRecpV1 - mean(data$PLSRecpV1, na.rm = T)
recpModel <- lm(GainRecp ~ (pauseVSdialogic + control) * (cRecp1 + SES +
cFidelity), data)
recpResAll <- bootlm(recpModel, data)
recpRes <- recpResAll[[1]]
recpRes$pval <- str_replace(recpRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Fidelity", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Fidelity", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Fidelity")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
recpResTab <- cbind(trm, recpRes[2:5])
recpResTab$trm <- as.character(recpResTab$trm)
kable(recpResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 1.68 [1.72, 3.7] | 0.51 | 3.30 | .001 |
Pause vs. Dialogic | 1.48 [-0.72, 4.28] | 1.27 | 1.16 | .247 |
Control vs. Intervention | 0.33 [-0.59, 2.19] | 0.71 | 0.46 | .638 |
Pre-Intervention Score | -0.2 [-0.33, -0.09] | 0.06 | -3.29 | .001 |
SES | 1.01 [-1.25, 1.26] | 0.64 | 1.57 | .116 |
Fidelity | 0.02 [-0.05, 0.07] | 0.03 | 0.54 | .525 |
Pause vs. Dialogic × Pre-Intervention Score | -6.7e-03 [-0.32, 0.32] | 0.16 | -0.04 | .967 |
Pause vs. Dialogic × SES | 0.34 [-3.12, 3.22] | 1.62 | 0.21 | .832 |
Pause vs. Dialogic × Fidelity | 0.04 [-0.07, 0.17] | 0.06 | 0.73 | .463 |
Control vs. Intervention × Pre-Intervention Score | 0.02 [-0.13, 0.18] | 0.08 | 0.31 | .757 |
Control vs. Intervention × SES | 0.59 [-1.69, 1.73] | 0.87 | 0.68 | .498 |
Control vs. Intervention × Fidelity | -0.03 [-0.11, 0.08] | 0.05 | -0.59 | .445 |
F(11, 135) = 1.97 [-1.5, 2.9], p = .036, R2 = 0.1382, N = 147
# A model containing parental exit scores
data$cRecp1 <- data$PLSRecpV1 - mean(data$PLSRecpV1, na.rm = T)
recpModel <- lm(GainRecp ~ (pauseVSdialogic + control) * (cRecp1 + SES +
Dialogic_Exit + Pause_Exit), data)
recpResAll <- bootlm(recpModel, data)
recpRes <- recpResAll[[1]]
recpRes$pval <- str_replace(recpRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Dialogic Score", "Pause Score", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Dialogic Score",
"Pause vs. Dialogic × Pause Score", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Dialogic Score",
"Control vs. Intervention × Pause Score")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
recpResTab <- cbind(trm, recpRes[2:5])
recpResTab$trm <- as.character(recpResTab$trm)
kable(recpResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 1.65 [1.18, 3.64] | 0.63 | 2.62 | .012 |
Pause vs. Dialogic | 2.83 [-0.87, 5.59] | 1.65 | 1.72 | .090 |
Control vs. Intervention | 0.48 [-0.42, 2.77] | 0.81 | 0.58 | .561 |
Pre-Intervention Score | -0.27 [-0.42, -0.13] | 0.07 | -3.72 | < .001 |
SES | 0.83 [-1.36, 1.34] | 0.69 | 1.20 | .227 |
Dialogic Score | -3.08 [-7.72, 2.04] | 2.49 | -1.24 | .211 |
Pause Score | 2.32 [-2.79, 7.18] | 2.54 | 0.91 | .352 |
Pause vs. Dialogic × Pre-Intervention Score | -0.02 [-0.41, 0.39] | 0.21 | -0.07 | .939 |
Pause vs. Dialogic × SES | -0.28 [-3.43, 3.63] | 1.80 | -0.15 | .875 |
Pause vs. Dialogic × Dialogic Score | -0.46 [-13.14, 14.66] | 7.09 | -0.06 | .944 |
Pause vs. Dialogic × Pause Score | 1.82 [-12.27, 14.59] | 6.85 | 0.27 | .793 |
Control vs. Intervention × Pre-Intervention Score | 0.02 [-0.16, 0.18] | 0.09 | 0.23 | .821 |
Control vs. Intervention × SES | 0.73 [-1.76, 1.73] | 0.89 | 0.82 | .409 |
Control vs. Intervention × Dialogic Score | -8.15 [-13.28, -1.99] | 2.88 | -2.83 | .006 |
Control vs. Intervention × Pause Score | 9.2 [2.59, 15.21] | 3.22 | 2.86 | .006 |
F(14, 122) = 1.26 [-1.84, 1.92], p = .240, R2 = 0.1266, N = 137
# Plot the data
graph <- data[complete.cases(data), ]
graph$control <- factor(graph$control, labels = c("Control", "Intervention"))
p <- ggplot(graph, aes(x = Dialogic_Exit, y = GainRecp))
p <- p + geom_point()
p <- p + xlab("Post-Intervention Dialogic Score") + ylab("Receptive Vocabulary Change")
p <- p + geom_smooth(method = "lm", colour = "black")
p1 <- format.plot(p) + facet_wrap(~control)
p1
# A model containing parental exit scores
data$cRecp1 <- data$PLSRecpV1 - mean(data$PLSRecpV1, na.rm = T)
recpModel <- lm(GainRecpGsv ~ (pauseVSdialogic + control) * (cRecp1 + SES +
Dialogic_Exit + Pause_Exit), data)
recpResAll <- bootlm(recpModel, data)
recpRes <- recpResAll[[1]]
recpRes$pval <- str_replace(recpRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Dialogic Score", "Pause Score", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Dialogic Score",
"Pause vs. Dialogic × Pause Score", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Dialogic Score",
"Control vs. Intervention × Pause Score")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
recpResTab <- cbind(trm, recpRes[2:5])
recpResTab$trm <- as.character(recpResTab$trm)
kable(recpResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 7.42 [5.01, 16.54] | 2.94 | 2.52 | .010 |
Pause vs. Dialogic | 13.3 [-2.56, 26.77] | 7.48 | 1.78 | .077 |
Control vs. Intervention | 1.05 [-2.85, 12.74] | 3.98 | 0.26 | .793 |
Pre-Intervention Score | -1.52 [-2.19, -0.88] | 0.33 | -4.56 | < .001 |
SES | 3.41 [-6.59, 6.17] | 3.25 | 1.05 | .296 |
Dialogic Score | -12.21 [-32.27, 9.02] | 10.54 | -1.16 | .236 |
Pause Score | 9.29 [-12.74, 30.82] | 11.11 | 0.84 | .396 |
Pause vs. Dialogic × Pre-Intervention Score | -4.7e-03 [-1.76, 1.83] | 0.92 | -5.1e-03 | .997 |
Pause vs. Dialogic × SES | -0.4 [-15.83, 16.69] | 8.30 | -0.05 | .961 |
Pause vs. Dialogic × Dialogic Score | 0.68 [-51.91, 61.43] | 28.91 | 0.02 | .981 |
Pause vs. Dialogic × Pause Score | 1.53 [-55.23, 53.97] | 27.86 | 0.06 | .956 |
Control vs. Intervention × Pre-Intervention Score | 0.13 [-0.69, 0.9] | 0.41 | 0.31 | .748 |
Control vs. Intervention × SES | 3.95 [-8.65, 8.42] | 4.36 | 0.91 | .361 |
Control vs. Intervention × Dialogic Score | -36.91 [-59.45, -9.47] | 12.75 | -2.89 | .007 |
Control vs. Intervention × Pause Score | 40.07 [8.94, 67.96] | 15.06 | 2.66 | .011 |
F(14, 122) = 1.26 [-1.84, 1.92], p = .240, R2 = 0.1266, N = 137
graph <- data[complete.cases(data), ]
p7 <- ggplot(graph, aes(x = Condition, y = CelfGain))
p7 <- viobox(p7) + facet_wrap(~SES) + ylab("Change in Syntax\nComprehension Score")
p7
# CELF Plot and Model
data$cCelfV1 <- data$CelfV1 - mean(data$CelfV1, na.rm = T)
celfModel <- lm(CelfGain ~ (pauseVSdialogic + control) * (cCelfV1 + SES +
cFidelity), data)
celfResAll <- bootlm(celfModel, data)
celfRes <- celfResAll[[1]]
celfRes$pval <- str_replace(celfRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Fidelity", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Fidelity", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Fidelity")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
celfResTab <- cbind(trm, celfRes[2:5])
celfResTab$trm <- as.character(celfResTab$trm)
kable(celfResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 1.19 [0.78, 3.07] | 0.58 | 2.04 | .042 |
Pause vs. Dialogic | 0.87 [-2.18, 3.57] | 1.47 | 0.59 | .544 |
Control vs. Intervention | 0.18 [-1.39, 1.83] | 0.82 | 0.22 | .823 |
Pre-Intervention Score | -0.35 [-0.49, -0.21] | 0.07 | -4.70 | < .001 |
SES | 0.63 [-1.45, 1.43] | 0.73 | 0.85 | .402 |
Fidelity | 0.04 [-0.07, 0.12] | 0.05 | 0.78 | .443 |
Pause vs. Dialogic × Pre-Intervention Score | 0.23 [-0.12, 0.56] | 0.17 | 1.31 | .184 |
Pause vs. Dialogic × SES | -0.16 [-3.62, 3.84] | 1.90 | -0.09 | .928 |
Pause vs. Dialogic × Fidelity | -0.02 [-0.13, 0.09] | 0.06 | -0.32 | .723 |
Control vs. Intervention × Pre-Intervention Score | 0.06 [-0.15, 0.27] | 0.11 | 0.60 | .542 |
Control vs. Intervention × SES | 0.2 [-1.97, 1.8] | 0.96 | 0.21 | .832 |
Control vs. Intervention × Fidelity | -9.0e-04 [-0.14, 0.21] | 0.09 | -0.01 | .994 |
F(11, 124) = 2.07 [-1.3, 2.95], p = .027, R2 = 0.1552, N = 136
# CELF Plot and Model
data$cCelfV1 <- data$CelfV1 - mean(data$CelfV1, na.rm = T)
celfModel <- lm(CelfGain ~ (pauseVSdialogic + control) * (cCelfV1 + SES +
Dialogic_Exit + Pause_Exit), data)
celfResAll <- bootlm(celfModel, data)
celfRes <- celfResAll[[1]]
celfRes$pval <- str_replace(celfRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Dialogic Score", "Pause Score", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Dialogic Score",
"Pause vs. Dialogic × Pause Score", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Dialogic Score",
"Control vs. Intervention × Pause Score")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
celfResTab <- cbind(trm, celfRes[2:5])
celfResTab$trm <- as.character(celfResTab$trm)
kable(celfResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 0.88 [0.16, 2.74] | 0.66 | 1.34 | .181 |
Pause vs. Dialogic | 2.04 [-1.01, 4.86] | 1.50 | 1.36 | .169 |
Control vs. Intervention | -0.5 [-2, 1.9] | 0.99 | -0.50 | .606 |
Pre-Intervention Score | -0.38 [-0.52, -0.22] | 0.08 | -4.91 | < .001 |
SES | 0.53 [-1.47, 1.41] | 0.74 | 0.72 | .467 |
Dialogic Score | -1.67 [-6.52, 2.65] | 2.34 | -0.71 | .462 |
Pause Score | 3.2 [-2.05, 8.62] | 2.72 | 1.17 | .233 |
Pause vs. Dialogic × Pre-Intervention Score | 0.37 [0.02, 0.73] | 0.18 | 2.04 | .043 |
Pause vs. Dialogic × SES | -0.22 [-3.61, 3.66] | 1.85 | -0.12 | .909 |
Pause vs. Dialogic × Dialogic Score | 8.44 [-4.83, 19.71] | 6.26 | 1.35 | .174 |
Pause vs. Dialogic × Pause Score | -11.9 [-23.33, 0.58] | 6.10 | -1.95 | .052 |
Control vs. Intervention × Pre-Intervention Score | 0.07 [-0.16, 0.29] | 0.11 | 0.61 | .536 |
Control vs. Intervention × SES | 0.39 [-2.06, 2.14] | 1.07 | 0.36 | .714 |
Control vs. Intervention × Dialogic Score | -5.46 [-11.8, 0.37] | 3.10 | -1.76 | .076 |
Control vs. Intervention × Pause Score | 5.63 [-2.38, 14.31] | 4.26 | 1.32 | .178 |
F(14, 113) = 2.21 [-1.15, 3.07], p = .011, R2 = 0.2153, N = 128
graph <- mlu[complete.cases(mlu), ]
p12 <- ggplot(mlu, aes(x = Condition, y = ToyMLUGain))
p12 <- viobox(p12) + facet_wrap(~SES) + ylab("Change in MLU\nScore")
p12
mlu$cMLUChiTPV1 <- mlu$MLUChiTPV1 - mean(mlu$MLUChiTPV1, na.rm = T)
mluModel <- lm(ToyMLUGain ~ (pauseVSdialogic + control) * (cMLUChiTPV1 +
SES + cFidelity), mlu)
mluResAll <- bootlm(mluModel, mlu)
mluRes <- mluResAll[[1]]
mluRes$pval <- str_replace(mluRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Fidelity", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Fidelity", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Fidelity")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
mluResTab <- cbind(trm, mluRes[2:5])
mluResTab$trm <- as.character(mluResTab$trm)
kable(mluResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 0.12 [-1.43, 1.53] | 0.76 | 0.16 | .303 |
Pause vs. Dialogic | 0.26 [-3.99, 4.81] | 2.24 | 0.12 | .347 |
Control vs. Intervention | 0.13 [-1.47, 1.6] | 0.78 | 0.17 | .450 |
Pre-Intervention Score | -0.15 [-2.8, 2.53] | 1.36 | -0.11 | .435 |
SES | -0.07 [-0.68, 0.65] | 0.34 | -0.22 | .681 |
Fidelity | 6.1e-03 [-0.05, 0.06] | 0.03 | 0.21 | .448 |
Pause vs. Dialogic × Pre-Intervention Score | 0.3 [-7.63, 8.28] | 4.06 | 0.07 | .498 |
Pause vs. Dialogic × SES | 0.18 [-1.81, 1.93] | 0.95 | 0.18 | .648 |
Pause vs. Dialogic × Fidelity | 8.8e-03 [-0.15, 0.17] | 0.08 | 0.11 | .666 |
Control vs. Intervention × Pre-Intervention Score | -0.04 [-2.85, 2.56] | 1.38 | -0.03 | .912 |
Control vs. Intervention × SES | -9.4e-03 [-0.71, 0.85] | 0.40 | -0.02 | .973 |
Control vs. Intervention × Fidelity | 2.2e-03 [-0.07, 0.07] | 0.03 | 0.06 | .823 |
F(11, 35) = 1.1 [-4.19, 2.46], p = .388, R2 = 0.2574, N = 47
mlu$cMLUChiTPV1 <- mlu$MLUChiTPV1 - mean(mlu$MLUChiTPV1, na.rm = T)
mlu <- merge(mlu, data[c("PNum", "Condition", "SES", "Dialogic_Exit", "Pause_Exit")],
by = c("PNum", "Condition", "SES"))
mluModel <- lm(ToyMLUGain ~ (pauseVSdialogic + control) * (cMLUChiTPV1 +
SES + Dialogic_Exit + Pause_Exit), mlu)
mluResAll <- bootlm(mluModel, mlu)
mluRes <- mluResAll[[1]]
mluRes$pval <- str_replace(mluRes$pval, "= ", "")
trm <- c("Intercept", "Pause vs. Dialogic", "Control vs. Intervention",
"Pre-Intervention Score", "SES", "Dialogic Score", "Pause Score", "Pause vs. Dialogic × Pre-Intervention Score",
"Pause vs. Dialogic × SES", "Pause vs. Dialogic × Dialogic Score",
"Pause vs. Dialogic × Pause Score", "Control vs. Intervention × Pre-Intervention Score",
"Control vs. Intervention × SES", "Control vs. Intervention × Dialogic Score",
"Control vs. Intervention × Pause Score")
colnmes <- c("Term", "*β*", "*SE*", "*t*", "*p*")
mluResTab <- cbind(trm, mluRes[2:5])
mluResTab$trm <- as.character(mluResTab$trm)
kable(mluResTab, col.names = colnmes, align = "l")
Term | β | SE | t | p |
---|---|---|---|---|
Intercept | 0.05 [-0.6, 0.51] | 0.28 | 0.18 | .773 |
Pause vs. Dialogic | 0.3 [-0.62, 1.38] | 0.51 | 0.59 | .395 |
Control vs. Intervention | 0.14 [-0.87, 1.03] | 0.49 | 0.30 | .633 |
Pre-Intervention Score | -0.17 [-1.21, 0.88] | 0.53 | -0.32 | .419 |
SES | -0.05 [-0.8, 0.85] | 0.42 | -0.12 | .831 |
Dialogic Score | -0.58 [-3.89, 2.99] | 1.75 | -0.33 | .383 |
Pause Score | 0.66 [-3.09, 3.87] | 1.78 | 0.37 | .380 |
Pause vs. Dialogic × Pre-Intervention Score | 0.44 [-2.58, 3.46] | 1.54 | 0.28 | .391 |
Pause vs. Dialogic × SES | 0.13 [-1.7, 1.83] | 0.90 | 0.14 | .799 |
Pause vs. Dialogic × Dialogic Score | 0.93 [-4.54, 6.56] | 2.83 | 0.33 | .519 |
Pause vs. Dialogic × Pause Score | -0.49 [-6.16, 5.08] | 2.87 | -0.17 | .761 |
Control vs. Intervention × Pre-Intervention Score | -0.02 [-1.22, 1.05] | 0.58 | -0.03 | .957 |
Control vs. Intervention × SES | -0.11 [-1.33, 1.26] | 0.66 | -0.16 | .745 |
Control vs. Intervention × Dialogic Score | 0.55 [-5.55, 6.68] | 3.12 | 0.18 | .502 |
Control vs. Intervention × Pause Score | -0.05 [-5.92, 6.42] | 3.15 | -0.02 | .952 |
F(14, 33) = 0.96 [-4.47, 2.37], p = .514, R2 = 0.2888, N = 48
# Create Plot grid
graph <- data[complete.cases(data), ]
p <- ggplot(graph, aes(x = Condition, y = GainExp))
p1 <- viobox(p) + facet_wrap(~SES) + ylab("Change in Expressive\nLanguage Score") +
xlab("Intervention Group")
p <- ggplot(graph, aes(x = Condition, y = GainRecp))
p2 <- viobox(p) + facet_wrap(~SES) + ylab("Change in Receptive\nLanguage Score") +
xlab("Intervention Group")
p <- ggplot(graph, aes(x = Condition, y = CelfGain))
p3 <- viobox(p) + facet_wrap(~SES) + ylab("Change in Syntax\nComprehension Score") +
xlab("Intervention Group")
graph <- mlu[complete.cases(mlu), ]
p <- ggplot(mlu, aes(x = Condition, y = ToyMLUGain))
p4 <- viobox(p) + facet_wrap(~SES) + ylab("Change in MLU\nScore") + xlab("Intervention Group")
ggarrange(p1, p2, p3, p4, nrow = 2, ncol = 2)
# Load in simulation results
row_to_add <- data.frame(Outcome = NA, Comparison = NA, N = NA, B = NA,
N_required = NA)
obs_n <- read.csv("Power_Simulation_Results/expressive_observed_N.csv")
row_to_add$Outcome <- "Expressive language"
row_to_add$Comparison <- "Pause vs Dialogic"
row_to_add$N <- sum(obs_n$Freq)
obs_pow <- read.csv("Power_Simulation_Results/expressive_observed_power.csv")
row_to_add$B <- pv(obs_pow$express.power[obs_pow$term == "pauseVSdialogic"])
sim_n <- read.csv("Power_Simulation_Results/expressive_sim_pause-dia_N.csv")
row_to_add$N_required <- ifelse(sum(sim_n$Freq) >= 10000, ">10000", sum(sim_n$Freq))
tab <- row_to_add
row_to_add <- data.frame(Outcome = "Expressive language", Comparison = NA,
N = sum(obs_n$Freq), B = NA, N_required = NA)
row_to_add$Comparison <- "Control vs Pooled Intervention"
row_to_add$B <- pv(obs_pow$express.power[obs_pow$term == "control"])
sim_n <- read.csv("Power_Simulation_Results/expressive_sim_control_N.csv")
row_to_add$N_required <- ifelse(sum(sim_n$Freq) >= 10000, ">10000", sum(sim_n$Freq))
tab <- rbind(tab, row_to_add)
row_to_add <- data.frame(Outcome = NA, Comparison = NA, N = NA, B = NA,
N_required = NA)
obs_n <- read.csv("Power_Simulation_Results/receptive_observed_N.csv")
row_to_add$Outcome <- "Receptive language"
row_to_add$Comparison <- "Pause vs Dialogic"
row_to_add$N <- sum(obs_n$Freq)
obs_pow <- read.csv("Power_Simulation_Results/receptive_observed_power.csv")
row_to_add$B <- pv(obs_pow$recp.power[obs_pow$term == "pauseVSdialogic"])
sim_n <- read.csv("Power_Simulation_Results/receptive_sim_pause-dia_N.csv")
row_to_add$N_required <- ifelse(sum(sim_n$Freq) >= 10000, ">10000", sum(sim_n$Freq))
tab <- rbind(tab, row_to_add)
row_to_add <- data.frame(Outcome = "Receptive language", Comparison = NA,
N = sum(obs_n$Freq), B = NA, N_required = NA)
row_to_add$Comparison <- "Control vs Pooled Intervention"
row_to_add$B <- pv(obs_pow$recp.power[obs_pow$term == "control"])
sim_n <- read.csv("Power_Simulation_Results/receptive_sim_control_N.csv")
row_to_add$N_required <- ifelse(sum(sim_n$Freq) >= 10000, ">10000", sum(sim_n$Freq))
tab <- rbind(tab, row_to_add)
row_to_add <- data.frame(Outcome = NA, Comparison = NA, N = NA, B = NA,
N_required = NA)
obs_n <- read.csv("Power_Simulation_Results/celf_observed_N.csv")
row_to_add$Outcome <- "Syntax comprehension"
row_to_add$Comparison <- "Pause vs Dialogic"
row_to_add$N <- sum(obs_n$Freq)
obs_pow <- read.csv("Power_Simulation_Results/celf_observed_power.csv")
row_to_add$B <- pv(obs_pow$celf.power[obs_pow$term == "pauseVSdialogic"])
sim_n <- read.csv("Power_Simulation_Results/celf_sim_pause-dia_N.csv")
row_to_add$N_required <- ifelse(sum(sim_n$Freq) >= 10000, ">10000", sum(sim_n$Freq))
tab <- rbind(tab, row_to_add)
row_to_add <- data.frame(Outcome = "Syntax comprehension", Comparison = NA,
N = sum(obs_n$Freq), B = NA, N_required = NA)
row_to_add$Comparison <- "Control vs Pooled Intervention"
row_to_add$B <- pv(obs_pow$celf.power[obs_pow$term == "control"])
sim_n <- read.csv("Power_Simulation_Results/celf_sim_control_N.csv")
row_to_add$N_required <- ifelse(sum(sim_n$Freq) >= 10000, ">10000", sum(sim_n$Freq))
tab <- rbind(tab, row_to_add)
row_to_add <- data.frame(Outcome = NA, Comparison = NA, N = NA, B = NA,
N_required = NA)
obs_n <- read.csv("Power_Simulation_Results/mlu_observed_N.csv")
row_to_add$Outcome <- "MLU"
row_to_add$Comparison <- "Pause vs Dialogic"
row_to_add$N <- sum(obs_n$Freq)
obs_pow <- read.csv("Power_Simulation_Results/mlu_observed_power.csv")
row_to_add$B <- pv(obs_pow$mlu.power[obs_pow$term == "pauseVSdialogic"])
sim_n <- read.csv("Power_Simulation_Results/mlu_sim_pause-dia_N.csv")
row_to_add$N_required <- ifelse(sum(sim_n$Freq) >= 10000, ">10000", sum(sim_n$Freq))
tab <- rbind(tab, row_to_add)
row_to_add <- data.frame(Outcome = "MLU", Comparison = NA, N = sum(obs_n$Freq),
B = NA, N_required = NA)
row_to_add$Comparison <- "Control vs Pooled Intervention"
row_to_add$B <- pv(obs_pow$mlu.power[obs_pow$term == "control"])
sim_n <- read.csv("Power_Simulation_Results/mlu_sim_control_N.csv")
row_to_add$N_required <- ifelse(sum(sim_n$Freq) >= 10000, ">10000", sum(sim_n$Freq))
tab <- rbind(tab, row_to_add)
kable(tab, col.names = c("Outcome Measure", "Comparison", "N", "B", "N required for 80% power"))
Outcome Measure | Comparison | N | B | N required for 80% power |
---|---|---|---|---|
Expressive language | Pause vs Dialogic | 150 | .180 | 942 |
Expressive language | Control vs Pooled Intervention | 150 | .190 | 4272 |
Receptive language | Pause vs Dialogic | 150 | .122 | 1056 |
Receptive language | Control vs Pooled Intervention | 150 | .033 | 9078 |
Syntax comprehension | Pause vs Dialogic | 150 | .154 | 1296 |
Syntax comprehension | Control vs Pooled Intervention | 150 | .052 | >10000 |
MLU | Pause vs Dialogic | 48 | .052 | 2640 |
MLU | Control vs Pooled Intervention | 48 | .255 | 294 |
# Create an empty data frame to save all the results
restable <- data.frame()
# Compare the Equivalence of the Intervention Groups
# Compare Dialogic and Pause Reading Groups
des <- ddply(data, c("Condition"), summarise, N=length(GainExp), mean=mean(GainExp), sd=sd(GainExp)) # extract the means and sds
kable(round_df(des[1:2,]), col.names = c("Comparison", "N", "Mean", "SD")) # display them in a table
Comparison | N | Mean | SD |
---|---|---|---|
Pause | 48 | 1.44 | 3.23 |
Dialogic | 51 | 1.55 | 2.62 |
et <- TOSTtwo(m1=des$mean[1], m2=des$mean[2], sd1=des$sd[1], sd2=des$sd[2], n1=des$N[1], n2=des$N[2], # run the TOST
low_eqbound_d=-0.5, high_eqbound_d=0.5, alpha=0.05, plot=FALSE) # here we specify the effects sizes (-0.5 to 0.5)
TOST results:
t-value lower bound: 2.29 p-value lower bound: 0.012
t-value upper bound: -2.67 p-value upper bound: 0.005
degrees of freedom : 90.57
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.4694
high eqbound: 1.4694
TOST confidence interval:
lower bound 90% CI: -1.097
upper bound 90% CI: 0.874
NHST confidence interval:
lower bound 95% CI: -1.289
upper bound 95% CI: 1.066
Equivalence Test Result:
The equivalence test was significant, t(90.57) = 2.290, p = 0.0122, given equivalence bounds of -1.469 and 1.469 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(90.57) = -0.188, p = 0.851, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically equivalent to zero.
graph <- eq_plot_dat(et) # Extract the stats for the plot
p13 <- ggplot(graph, aes(y=diff, x=1)) # make the plot
p13 <- eq_plot(p13) + ggtitle("Pause vs. Dialogic (All SES)")
restable <- data.frame(Comparison="Pause vs. Dialogic", eq_add_row(et))
# Compare Control and Intervention Groups
des <- ddply(data, c("control"), summarise, N=length(GainExp), mean=mean(GainExp), sd=sd(GainExp))
des$control <- c("Intervention", "Control")
kable(round_df(des), col.names = c("Comparison", "N", "Mean", "SD"))
Comparison | N | Mean | SD |
---|---|---|---|
Intervention | 51 | 1.25 | 3.19 |
Control | 99 | 1.49 | 2.92 |
et <- TOSTtwo(m1=des$mean[1], m2=des$mean[2], sd1=des$sd[1], sd2=des$sd[2], n1=des$N[1], n2=des$N[2],
low_eqbound_d=-0.5, high_eqbound_d=0.5, alpha=0.05, plot=FALSE)
TOST results:
t-value lower bound: 2.41 p-value lower bound: 0.009
t-value upper bound: -3.31 p-value upper bound: 0.0007
degrees of freedom : 93.54
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.5269
high eqbound: 1.5269
TOST confidence interval:
lower bound 90% CI: -1.127
upper bound 90% CI: 0.647
NHST confidence interval:
lower bound 95% CI: -1.3
upper bound 95% CI: 0.82
Equivalence Test Result:
The equivalence test was significant, t(93.54) = 2.411, p = 0.00894, given equivalence bounds of -1.527 and 1.527 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(93.54) = -0.450, p = 0.654, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically equivalent to zero.
graph <- eq_plot_dat(et)
p14 <- ggplot(graph, aes(y=diff, x=1))
p14 <- eq_plot(p14) + ggtitle("Control vs. Intervention (All SES)")
restable <- rbind(restable, data.frame(Comparison="Control vs. Intervention", eq_add_row(et)))
# Compare Low and High SES Participants
des <- ddply(data, c("SES"), summarise, N=length(GainExp), mean=mean(GainExp), sd=sd(GainExp))
kable(round_df(des), col.names = c("Comparison", "N", "Mean", "SD"))
Comparison | N | Mean | SD |
---|---|---|---|
Low SES | 62 | 1.11 | 3.23 |
High SES | 88 | 1.62 | 2.83 |
et <- TOSTtwo(m1=des$mean[1], m2=des$mean[2], sd1=des$sd[1], sd2=des$sd[2], n1=des$N[1], n2=des$N[2],
low_eqbound_d=-0.5, high_eqbound_d=0.5, alpha=0.05, plot=FALSE)
TOST results:
t-value lower bound: 1.98 p-value lower bound: 0.025
t-value upper bound: -3.99 p-value upper bound: 0.00006
degrees of freedom : 119.92
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.5185
high eqbound: 1.5185
TOST confidence interval:
lower bound 90% CI: -1.356
upper bound 90% CI: 0.332
NHST confidence interval:
lower bound 95% CI: -1.521
upper bound 95% CI: 0.496
Equivalence Test Result:
The equivalence test was significant, t(119.92) = 1.976, p = 0.0252, given equivalence bounds of -1.518 and 1.518 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(119.92) = -1.005, p = 0.317, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically equivalent to zero.
graph <- eq_plot_dat(et)
p15 <- ggplot(graph, aes(y=diff, x=1))
p15 <- eq_plot(p15) + ggtitle("High vs. Low SES")
restable <- rbind(restable, data.frame(Comparison="SES", eq_add_row(et)))
## Compare Interaction between SES and Dialogic and Pause Reading Groups
des <- ddply(data, c("SES", "Condition"), summarise, N=length(GainExp), mean=mean(GainExp), sd=sd(GainExp))
kable(round_df(des[c(1:2, 4:5),]), col.names = c("SES", "Group", "N", "Mean", "SD"))
SES | Group | N | Mean | SD | |
---|---|---|---|---|---|
1 | Low SES | Pause | 19 | 0.79 | 2.99 |
2 | Low SES | Dialogic | 22 | 1.55 | 2.50 |
4 | High SES | Pause | 29 | 1.86 | 3.36 |
5 | High SES | Dialogic | 29 | 1.55 | 2.75 |
et <- TOSTtwo(m1=des$mean[1], m2=des$mean[2], sd1=des$sd[1], sd2=des$sd[2], n1=des$N[1], n2=des$N[2],
low_eqbound_d=-0.5, high_eqbound_d=0.5, alpha=0.05, plot=FALSE)
TOST results:
t-value lower bound: 0.717 p-value lower bound: 0.239
t-value upper bound: -2.46 p-value upper bound: 0.010
degrees of freedom : 35.28
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.379
high eqbound: 1.379
TOST confidence interval:
lower bound 90% CI: -2.224
upper bound 90% CI: 0.713
NHST confidence interval:
lower bound 95% CI: -2.52
upper bound 95% CI: 1.008
Equivalence Test Result:
The equivalence test was non-significant, t(35.28) = 0.717, p = 0.239, given equivalence bounds of -1.379 and 1.379 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(35.28) = -0.870, p = 0.390, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p16 <- ggplot(graph, aes(y=diff, x=1))
p16 <- eq_plot(p16) + ggtitle("Pause vs. Dialogic (Low SES)")
restable <- rbind(restable, data.frame(Comparison="Pause vs. Dialogic (Low SES)", eq_add_row(et)))
et <- TOSTtwo(m1=des$mean[3], m2=des$mean[4], sd1=des$sd[3], sd2=des$sd[4], n1=des$N[3], n2=des$N[4],
low_eqbound_d=-0.5, high_eqbound_d=0.5, alpha=0.05, plot=FALSE)
TOST results:
t-value lower bound: 0.886 p-value lower bound: 0.191
t-value upper bound: -2.55 p-value upper bound: 0.007
degrees of freedom : 37.66
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.878
high eqbound: 1.878
TOST confidence interval:
lower bound 90% CI: -2.754
upper bound 90% CI: 0.934
NHST confidence interval:
lower bound 95% CI: -3.124
upper bound 95% CI: 1.304
Equivalence Test Result:
The equivalence test was non-significant, t(37.66) = 0.886, p = 0.191, given equivalence bounds of -1.878 and 1.878 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(37.66) = -0.832, p = 0.411, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p17 <- ggplot(graph, aes(y=diff, x=1))
p17 <- eq_plot(p17) + ggtitle("Pause vs. Dialogic (High SES)")
restable <- rbind(restable, data.frame(Comparison="Pause vs. Dialogic (High SES)", eq_add_row(et)))
## Compare Interaction between SES and Dialogic and Pause Reading Groups
des <- ddply(data, c("SES", "control"), summarise, N=length(GainExp), mean=mean(GainExp), sd=sd(GainExp))
des$control <- c("Intervention", "Control")
kable(round_df(des), col.names = c("SES", "Group", "N", "Mean", "SD"))
SES | Group | N | Mean | SD |
---|---|---|---|---|
Low SES | Intervention | 21 | 0.95 | 4.12 |
Low SES | Control | 41 | 1.20 | 2.73 |
High SES | Intervention | 30 | 1.47 | 2.39 |
High SES | Control | 58 | 1.71 | 3.04 |
et <- TOSTtwo(m1=des$mean[1], m2=des$mean[2], sd1=des$sd[1], sd2=des$sd[2], n1=des$N[1], n2=des$N[2],
low_eqbound_d=-0.5, high_eqbound_d=0.5, alpha=0.05, plot=FALSE)
TOST results:
t-value lower bound: 1.51 p-value lower bound: 0.071
t-value upper bound: -2.00 p-value upper bound: 0.027
degrees of freedom : 29.29
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.7467
high eqbound: 1.7467
TOST confidence interval:
lower bound 90% CI: -1.932
upper bound 90% CI: 1.446
NHST confidence interval:
lower bound 95% CI: -2.276
upper bound 95% CI: 1.79
Equivalence Test Result:
The equivalence test was non-significant, t(29.29) = 1.512, p = 0.0706, given equivalence bounds of -1.747 and 1.747 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(29.29) = -0.244, p = 0.809, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p18 <- ggplot(graph, aes(y=diff, x=1))
p18 <- eq_plot(p18) + ggtitle("Control vs. Intervention (Low SES)")
restable <- rbind(restable, data.frame(Comparison="Control vs. Intervention (Low SES)", eq_add_row(et)))
et <- TOSTtwo(m1=des$mean[3], m2=des$mean[4], sd1=des$sd[3], sd2=des$sd[4], n1=des$N[3], n2=des$N[4],
low_eqbound_d=-0.5, high_eqbound_d=0.5, alpha=0.05, plot=FALSE)
TOST results:
t-value lower bound: 1.91 p-value lower bound: 0.030
t-value upper bound: -2.72 p-value upper bound: 0.004
degrees of freedom : 72.24
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.3679
high eqbound: 1.3679
TOST confidence interval:
lower bound 90% CI: -1.226
upper bound 90% CI: 0.745
NHST confidence interval:
lower bound 95% CI: -1.419
upper bound 95% CI: 0.939
Equivalence Test Result:
The equivalence test was significant, t(72.24) = 1.906, p = 0.0303, given equivalence bounds of -1.368 and 1.368 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(72.24) = -0.406, p = 0.686, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically equivalent to zero.
graph <- eq_plot_dat(et)
p19 <- ggplot(graph, aes(y=diff, x=1))
p19 <- eq_plot(p19) + ggtitle("Control vs. Intervention (High SES)")
restable <- rbind(restable, data.frame(Comparison="Control vs. Intervention (High SES)", eq_add_row(et)))
# Plots
ggarrange(p13, p14, p15, p16, p17, p18, p19)
Comparison | t | df | p |
---|---|---|---|
Pause vs. Dialogic | 2.29 | 90.57 | = .012 |
Control vs. Intervention | 2.41 | 93.54 | = .009 |
SES | 1.98 | 119.92 | = .025 |
Pause vs. Dialogic (Low SES) | 0.72 | 35.28 | = .239 |
Pause vs. Dialogic (High SES) | 0.89 | 37.66 | = .191 |
Control vs. Intervention (Low SES) | 1.51 | 29.29 | = .071 |
Control vs. Intervention (High SES) | 1.91 | 72.24 | = .030 |
# Create an empty data frame to save all the results
restable <- data.frame()
# Compare the Equivalence of the Intervention Groups
# Compare Dialogic and Pause Reading Groups
des <- ddply(data, c("Condition"), summarise, N = length(GainRecp), mean = mean(GainRecp),
sd = sd(GainRecp))
kable(round_df(des[1:2, ]), col.names = c("Comparison", "N", "Mean", "SD"))
Comparison | N | Mean | SD |
---|---|---|---|
Pause | 48 | 1.42 | 4.50 |
Dialogic | 51 | 2.65 | 3.92 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 1.04 p-value lower bound: 0.152
t-value upper bound: -3.93 p-value upper bound: 0.00008
degrees of freedom : 93.34
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -2.112
high eqbound: 2.112
TOST confidence interval:
lower bound 90% CI: -2.645
upper bound 90% CI: 0.184
NHST confidence interval:
lower bound 95% CI: -2.921
upper bound 95% CI: 0.46
Equivalence Test Result:
The equivalence test was non-significant, t(93.34) = 1.036, p = 0.152, given equivalence bounds of -2.112 and 2.112 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(93.34) = -1.445, p = 0.152, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p20 <- ggplot(graph, aes(y = diff, x = 1))
p20 <- eq_plot(p20) + ggtitle("Pause vs. Dialogic (All SES)")
restable <- data.frame(Comparison = "Pause vs. Dialogic", eq_add_row(et))
# Compare Control and Intervention Groups
des <- ddply(data, c("control"), summarise, N = length(GainRecp), mean = mean(GainRecp),
sd = sd(GainRecp))
des$control <- c("Intervention", "Control")
kable(round_df(des), col.names = c("Comparison", "N", "Mean", "SD"))
Comparison | N | Mean | SD |
---|---|---|---|
Intervention | 51 | 1.69 | 3.43 |
Control | 99 | 2.05 | 4.24 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 2.44 p-value lower bound: 0.008
t-value upper bound: -3.57 p-value upper bound: 0.0003
degrees of freedom : 121.25
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.9283
high eqbound: 1.9283
TOST confidence interval:
lower bound 90% CI: -1.429
upper bound 90% CI: 0.7
NHST confidence interval:
lower bound 95% CI: -1.636
upper bound 95% CI: 0.907
Equivalence Test Result:
The equivalence test was significant, t(121.25) = 2.435, p = 0.00817, given equivalence bounds of -1.928 and 1.928 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(121.25) = -0.567, p = 0.572, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically equivalent to zero.
graph <- eq_plot_dat(et)
p21 <- ggplot(graph, aes(y = diff, x = 1))
p21 <- eq_plot(p21) + ggtitle("Control vs. Intervention (All SES)")
restable <- rbind(restable, data.frame(Comparison = "Control vs. Intervention",
eq_add_row(et)))
# Compare Low and High SES Participants
des <- ddply(data, c("SES"), summarise, N = length(GainRecp), mean = mean(GainRecp),
sd = sd(GainRecp))
kable(round_df(des), col.names = c("Comparison", "N", "Mean", "SD"))
Comparison | N | Mean | SD |
---|---|---|---|
Low SES | 62 | 1.24 | 4.09 |
High SES | 88 | 2.41 | 3.84 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 1.23 p-value lower bound: 0.110
t-value upper bound: -4.76 p-value upper bound: 0.000003
degrees of freedom : 126.15
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.9841
high eqbound: 1.9841
TOST confidence interval:
lower bound 90% CI: -2.263
upper bound 90% CI: -0.071
NHST confidence interval:
lower bound 95% CI: -2.476
upper bound 95% CI: 0.142
Equivalence Test Result:
The equivalence test was non-significant, t(126.15) = 1.235, p = 0.110, given equivalence bounds of -1.984 and 1.984 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(126.15) = -1.764, p = 0.0801, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p22 <- ggplot(graph, aes(y = diff, x = 1))
p22 <- eq_plot(p22) + ggtitle("High vs. Low SES")
restable <- rbind(restable, data.frame(Comparison = "SES", eq_add_row(et)))
# Compare Interaction between SES and Dialogic and Pause Reading Groups
des <- ddply(data, c("SES", "Condition"), summarise, N = length(GainRecp),
mean = mean(GainRecp), sd = sd(GainRecp))
kable(round_df(des[c(1:2, 4:5), ]), col.names = c("SES", "Group", "N",
"Mean", "SD"))
SES | Group | N | Mean | SD | |
---|---|---|---|---|---|
1 | Low SES | Pause | 19 | 0.53 | 4.13 |
2 | Low SES | Dialogic | 22 | 1.41 | 4.34 |
4 | High SES | Pause | 29 | 2.00 | 4.71 |
5 | High SES | Dialogic | 29 | 3.59 | 3.35 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 0.933 p-value lower bound: 0.178
t-value upper bound: -2.27 p-value upper bound: 0.015
degrees of freedom : 38.61
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -2.1174
high eqbound: 2.1174
TOST confidence interval:
lower bound 90% CI: -3.114
upper bound 90% CI: 1.348
NHST confidence interval:
lower bound 95% CI: -3.561
upper bound 95% CI: 1.796
Equivalence Test Result:
The equivalence test was non-significant, t(38.61) = 0.933, p = 0.178, given equivalence bounds of -2.117 and 2.117 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(38.61) = -0.667, p = 0.509, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p23 <- ggplot(graph, aes(y = diff, x = 1))
p23 <- eq_plot(p23) + ggtitle("Pause vs. Dialogic (Low SES)")
restable <- rbind(restable, data.frame(Comparison = "Pause vs. Dialogic (Low SES)",
eq_add_row(et)))
et <- TOSTtwo(m1 = des$mean[3], m2 = des$mean[4], sd1 = des$sd[3], sd2 = des$sd[4],
n1 = des$N[3], n2 = des$N[4], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 1.54 p-value lower bound: 0.065
t-value upper bound: -2.01 p-value upper bound: 0.025
degrees of freedom : 47.07
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -2.163
high eqbound: 2.163
TOST confidence interval:
lower bound 90% CI: -2.334
upper bound 90% CI: 1.763
NHST confidence interval:
lower bound 95% CI: -2.742
upper bound 95% CI: 2.17
Equivalence Test Result:
The equivalence test was non-significant, t(47.07) = 1.538, p = 0.0654, given equivalence bounds of -2.163 and 2.163 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(47.07) = -0.234, p = 0.816, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p24 <- ggplot(graph, aes(y = diff, x = 1))
p24 <- eq_plot(p24) + ggtitle("Pause vs. Dialogic (High SES)")
restable <- rbind(restable, data.frame(Comparison = "Pause vs. Dialogic (High SES)",
eq_add_row(et)))
# Compare Interaction between SES and Dialogic and Pause Reading Groups
des <- ddply(data, c("SES", "control"), summarise, N = length(GainRecp),
mean = mean(GainRecp), sd = sd(GainRecp))
des$control <- c("Intervention", "Control")
kable(round_df(des), col.names = c("SES", "Group", "N", "Mean", "SD"))
SES | Group | N | Mean | SD |
---|---|---|---|---|
Low SES | Intervention | 21 | 1.71 | 3.90 |
Low SES | Control | 41 | 1.00 | 4.21 |
High SES | Intervention | 30 | 1.67 | 3.13 |
High SES | Control | 58 | 2.79 | 4.13 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 2.55 p-value lower bound: 0.007
t-value upper bound: -1.22 p-value upper bound: 0.114
degrees of freedom : 43.31
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -2.0299
high eqbound: 2.0299
TOST confidence interval:
lower bound 90% CI: -1.094
upper bound 90% CI: 2.523
NHST confidence interval:
lower bound 95% CI: -1.455
upper bound 95% CI: 2.883
Equivalence Test Result:
The equivalence test was non-significant, t(43.31) = -1.223, p = 0.114, given equivalence bounds of -2.030 and 2.030 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(43.31) = 0.664, p = 0.510, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p25 <- ggplot(graph, aes(y = diff, x = 1))
p25 <- eq_plot(p25) + ggtitle("Control vs. Intervention (Low SES)")
restable <- rbind(restable, data.frame(Comparison = "Control vs. Intervention (Low SES)",
eq_add_row(et)))
et <- TOSTtwo(m1 = des$mean[3], m2 = des$mean[4], sd1 = des$sd[3], sd2 = des$sd[4],
n1 = des$N[3], n2 = des$N[4], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 0.897 p-value lower bound: 0.186
t-value upper bound: -3.75 p-value upper bound: 0.0002
degrees of freedom : 74.14
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.8336
high eqbound: 1.8336
TOST confidence interval:
lower bound 90% CI: -2.44
upper bound 90% CI: 0.187
NHST confidence interval:
lower bound 95% CI: -2.697
upper bound 95% CI: 0.445
Equivalence Test Result:
The equivalence test was non-significant, t(74.14) = 0.897, p = 0.186, given equivalence bounds of -1.834 and 1.834 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(74.14) = -1.429, p = 0.157, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p26 <- ggplot(graph, aes(y = diff, x = 1))
p26 <- eq_plot(p26) + ggtitle("Control vs. Intervention (High SES)")
restable <- rbind(restable, data.frame(Comparison = "Control vs. Intervention (High SES)",
eq_add_row(et)))
ggarrange(p20, p21, p22, p23, p24, p25, p26)
Comparison | t | df | p |
---|---|---|---|
Pause vs. Dialogic | 1.04 | 93.34 | = .152 |
Control vs. Intervention | 2.44 | 121.25 | = .008 |
SES | 1.23 | 126.15 | = .110 |
Pause vs. Dialogic (Low SES) | 0.93 | 38.61 | = .178 |
Pause vs. Dialogic (High SES) | 1.54 | 47.07 | = .065 |
Control vs. Intervention (Low SES) | -1.22 | 43.31 | = .114 |
Control vs. Intervention (High SES) | 0.90 | 74.14 | = .186 |
restable <- data.frame()
# Compare Dialogic and Pause Reading Groups
des <- aggregate(CelfGain ~ Condition, data, mean)
des$sd <- aggregate(CelfGain ~ Condition, data, sd)$CelfGain
des$N <- aggregate(CelfGain ~ Condition, data, length)$CelfGain
colnames(des) <- c("Comparison", "mean", "sd", "N")
kable(round_df(des), col.names = c("Comparison", "Mean", "SD", "N"))
Comparison | Mean | SD | N |
---|---|---|---|
Pause | 1.10 | 4.62 | 42 |
Dialogic | 1.53 | 3.37 | 49 |
Control | 1.33 | 3.94 | 48 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 1.84 p-value lower bound: 0.035
t-value upper bound: -2.86 p-value upper bound: 0.003
degrees of freedom : 73.81
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -2.0201
high eqbound: 2.0201
TOST confidence interval:
lower bound 90% CI: -1.867
upper bound 90% CI: 0.996
NHST confidence interval:
lower bound 95% CI: -2.148
upper bound 95% CI: 1.277
Equivalence Test Result:
The equivalence test was significant, t(73.81) = 1.844, p = 0.0346, given equivalence bounds of -2.020 and 2.020 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(73.81) = -0.507, p = 0.614, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically equivalent to zero.
graph <- eq_plot_dat(et)
p27 <- ggplot(graph, aes(y = diff, x = 1))
p27 <- eq_plot(p27) + ggtitle("Pause vs. Dialogic (All SES)")
restable <- data.frame(Comparison = "Pause vs. Dialogic", eq_add_row(et))
# Compare Control and Intervention Groups
des <- aggregate(CelfGain ~ control, data, mean)
des$control <- c("Intervention", "Control")
des$sd <- aggregate(CelfGain ~ control, data, sd)$CelfGain
des$N <- aggregate(CelfGain ~ control, data, length)$CelfGain
colnames(des) <- c("Comparison", "mean", "sd", "N")
kable(round_df(des), col.names = c("Comparison", "Mean", "SD", "N"))
Comparison | Mean | SD | N |
---|---|---|---|
Intervention | 1.33 | 3.94 | 48 |
Control | 1.33 | 3.98 | 91 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 2.81 p-value lower bound: 0.003
t-value upper bound: -2.80 p-value upper bound: 0.003
degrees of freedom : 96.43
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.9795
high eqbound: 1.9795
TOST confidence interval:
lower bound 90% CI: -1.168
upper bound 90% CI: 1.175
NHST confidence interval:
lower bound 95% CI: -1.396
upper bound 95% CI: 1.404
Equivalence Test Result:
The equivalence test was significant, t(96.43) = -2.801, p = 0.00308, given equivalence bounds of -1.979 and 1.979 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(96.43) = 0.00519, p = 0.996, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically equivalent to zero.
graph <- eq_plot_dat(et)
p28 <- ggplot(graph, aes(y = diff, x = 1))
p28 <- eq_plot(p28) + ggtitle("Control vs. Intervention (All SES)")
restable <- rbind(restable, data.frame(Comparison = "Control vs. Intervention",
eq_add_row(et)))
# Compare Low and High SES Participants
des <- aggregate(CelfGain ~ SES, data, mean)
des$sd <- aggregate(CelfGain ~ SES, data, sd)$CelfGain
des$N <- aggregate(CelfGain ~ SES, data, length)$CelfGain
colnames(des) <- c("SES", "mean", "sd", "N")
kable(round_df(des), col.names = c("Comparison", "Mean", "SD", "N"))
Comparison | Mean | SD | N |
---|---|---|---|
Low SES | 0.93 | 3.55 | 59 |
High SES | 1.62 | 4.22 | 80 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 1.90 p-value lower bound: 0.030
t-value upper bound: -4.00 p-value upper bound: 0.00005
degrees of freedom : 134.6
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.949
high eqbound: 1.949
TOST confidence interval:
lower bound 90% CI: -1.786
upper bound 90% CI: 0.401
NHST confidence interval:
lower bound 95% CI: -1.998
upper bound 95% CI: 0.613
Equivalence Test Result:
The equivalence test was significant, t(134.6) = 1.903, p = 0.0296, given equivalence bounds of -1.949 and 1.949 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(134.6) = -1.049, p = 0.296, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically equivalent to zero.
graph <- eq_plot_dat(et)
p29 <- ggplot(graph, aes(y = diff, x = 1))
p29 <- eq_plot(p29) + ggtitle("High vs. Low SES")
restable <- rbind(restable, data.frame(Comparison = "SES", eq_add_row(et)))
## Compare Interaction between SES and Dialogic and Pause Reading Groups
des <- aggregate(CelfGain ~ SES + Condition, data, mean)
des$sd <- aggregate(CelfGain ~ SES + Condition, data, sd)$CelfGain
des$N <- aggregate(CelfGain ~ SES + Condition, data, length)$CelfGain
colnames(des) <- c("SES", "Condition", "mean", "sd", "N")
kable(round_df(des[c(1:2, 4:5), ]), col.names = c("SES", "Group", "Mean",
"SD", "N"))
SES | Group | Mean | SD | N | |
---|---|---|---|---|---|
1 | Low SES | Pause | 0.33 | 4.35 | 18 |
2 | High SES | Pause | 1.67 | 4.82 | 24 |
4 | High SES | Dialogic | 1.85 | 3.35 | 27 |
5 | Low SES | Control | 1.26 | 2.90 | 19 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 0.677 p-value lower bound: 0.251
t-value upper bound: -2.55 p-value upper bound: 0.007
degrees of freedom : 38.54
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -2.2948
high eqbound: 2.2948
TOST confidence interval:
lower bound 90% CI: -3.728
upper bound 90% CI: 1.061
NHST confidence interval:
lower bound 95% CI: -4.208
upper bound 95% CI: 1.541
Equivalence Test Result:
The equivalence test was non-significant, t(38.54) = 0.677, p = 0.251, given equivalence bounds of -2.295 and 2.295 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(38.54) = -0.938, p = 0.354, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p30 <- ggplot(graph, aes(y = diff, x = 1))
p30 <- eq_plot(p30) + ggtitle("Pause vs. Dialogic (Low SES)")
restable <- rbind(restable, data.frame(Comparison = "Pause vs. Dialogic (Low SES)",
eq_add_row(et)))
et <- TOSTtwo(m1 = des$mean[3], m2 = des$mean[4], sd1 = des$sd[3], sd2 = des$sd[4],
n1 = des$N[3], n2 = des$N[4], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 1.00 p-value lower bound: 0.160
t-value upper bound: -2.47 p-value upper bound: 0.009
degrees of freedom : 44.59
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.6938
high eqbound: 1.6938
TOST confidence interval:
lower bound 90% CI: -2.352
upper bound 90% CI: 0.921
NHST confidence interval:
lower bound 95% CI: -2.678
upper bound 95% CI: 1.247
Equivalence Test Result:
The equivalence test was non-significant, t(44.59) = 1.004, p = 0.160, given equivalence bounds of -1.694 and 1.694 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(44.59) = -0.735, p = 0.466, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p31 <- ggplot(graph, aes(y = diff, x = 1))
p31 <- eq_plot(p31) + ggtitle("Pause vs. Dialogic (High SES)")
restable <- rbind(restable, data.frame(Comparison = "Pause vs. Dialogic (High SES)",
eq_add_row(et)))
## Compare Interaction between SES and Dialogic and Pause Reading Groups
des <- aggregate(CelfGain ~ SES + control, data, mean)
des$control <- c("Intervention", "Control")
des$sd <- aggregate(CelfGain ~ SES + control, data, sd)$CelfGain
des$N <- aggregate(CelfGain ~ SES + control, data, length)$CelfGain
colnames(des) <- c("SES", "Condition", "mean", "sd", "N")
kable(round_df(des), col.names = c("SES", "Group", "Mean", "SD", "N"))
SES | Group | Mean | SD | N |
---|---|---|---|---|
Low SES | Intervention | 1.26 | 2.90 | 19 |
High SES | Control | 1.38 | 4.55 | 29 |
Low SES | Intervention | 0.78 | 3.84 | 40 |
High SES | Control | 1.76 | 4.06 | 51 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 1.67 p-value lower bound: 0.051
t-value upper bound: -1.88 p-value upper bound: 0.033
degrees of freedom : 45.99
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.9072
high eqbound: 1.9072
TOST confidence interval:
lower bound 90% CI: -1.921
upper bound 90% CI: 1.689
NHST confidence interval:
lower bound 95% CI: -2.281
upper bound 95% CI: 2.048
Equivalence Test Result:
The equivalence test was non-significant, t(45.99) = 1.666, p = 0.0513, given equivalence bounds of -1.907 and 1.907 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(45.99) = -0.108, p = 0.914, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p32 <- ggplot(graph, aes(y = diff, x = 1))
p32 <- eq_plot(p32) + ggtitle("Control vs. Intervention (Low SES)")
restable <- rbind(restable, data.frame(Comparison = "Control vs. Intervention (Low SES)",
eq_add_row(et)))
et <- TOSTtwo(m1 = des$mean[3], m2 = des$mean[4], sd1 = des$sd[3], sd2 = des$sd[4],
n1 = des$N[3], n2 = des$N[4], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 1.19 p-value lower bound: 0.119
t-value upper bound: -3.57 p-value upper bound: 0.0003
degrees of freedom : 85.9
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -1.9763
high eqbound: 1.9763
TOST confidence interval:
lower bound 90% CI: -2.373
upper bound 90% CI: 0.394
NHST confidence interval:
lower bound 95% CI: -2.644
upper bound 95% CI: 0.664
Equivalence Test Result:
The equivalence test was non-significant, t(85.9) = 1.186, p = 0.119, given equivalence bounds of -1.976 and 1.976 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(85.9) = -1.190, p = 0.237, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p33 <- ggplot(graph, aes(y = diff, x = 1))
p33 <- eq_plot(p33) + ggtitle("Control vs. Intervention (High SES)")
restable <- rbind(restable, data.frame(Comparison = "Control vs. Intervention (High SES)",
eq_add_row(et)))
ggarrange(p27, p28, p29, p30, p31, p32, p33)
Comparison | t | df | p |
---|---|---|---|
Pause vs. Dialogic | 1.84 | 73.81 | = .035 |
Control vs. Intervention | -2.80 | 96.43 | = .003 |
SES | 1.90 | 134.60 | = .030 |
Pause vs. Dialogic (Low SES) | 0.68 | 38.54 | = .251 |
Pause vs. Dialogic (High SES) | 1.00 | 44.59 | = .160 |
Control vs. Intervention (Low SES) | 1.67 | 45.99 | = .051 |
Control vs. Intervention (High SES) | 1.19 | 85.90 | = .119 |
restable <- data.frame()
# Compare Dialogic and Pause Reading Groups
des <- ddply(mlu, c("Condition"), summarise, N = length(ToyMLUGain), mean = mean(ToyMLUGain),
sd = sd(ToyMLUGain))
kable(round_df(des[1:2, ]), col.names = c("Comparison", "N", "Mean", "SD"))
Comparison | N | Mean | SD |
---|---|---|---|
Pause | 16 | 0.08 | 0.59 |
Dialogic | 16 | 0.31 | 0.43 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 0.174 p-value lower bound: 0.432
t-value upper bound: -2.65 p-value upper bound: 0.007
degrees of freedom : 27.33
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -0.2582
high eqbound: 0.2582
TOST confidence interval:
lower bound 90% CI: -0.537
upper bound 90% CI: 0.084
NHST confidence interval:
lower bound 95% CI: -0.601
upper bound 95% CI: 0.148
Equivalence Test Result:
The equivalence test was non-significant, t(27.33) = 0.174, p = 0.432, given equivalence bounds of -0.258 and 0.258 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(27.33) = -1.241, p = 0.225, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p34 <- ggplot(graph, aes(y = diff, x = 1))
p34 <- eq_plot(p34) + ggtitle("Pause vs. Dialogic (All SES)")
restable <- data.frame(Comparison = "Pause vs. Dialogic", eq_add_row(et))
# Compare Control and Intervention Groups
des <- ddply(mlu, c("control"), summarise, N = length(ToyMLUGain), mean = mean(ToyMLUGain),
sd = sd(ToyMLUGain))
des$control <- c("Intervention", "Control")
kable(round_df(des), col.names = c("Comparison", "N", "Mean", "SD"))
Comparison | N | Mean | SD |
---|---|---|---|
Intervention | 16 | -0.01 | 0.48 |
Control | 32 | 0.19 | 0.52 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 0.336 p-value lower bound: 0.369
t-value upper bound: -2.97 p-value upper bound: 0.003
degrees of freedom : 32.16
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -0.2515
high eqbound: 0.2515
TOST confidence interval:
lower bound 90% CI: -0.458
upper bound 90% CI: 0.057
NHST confidence interval:
lower bound 95% CI: -0.51
upper bound 95% CI: 0.109
Equivalence Test Result:
The equivalence test was non-significant, t(32.16) = 0.336, p = 0.369, given equivalence bounds of -0.251 and 0.251 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(32.16) = -1.317, p = 0.197, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p35 <- ggplot(graph, aes(y = diff, x = 1))
p35 <- eq_plot(p35) + ggtitle("Control vs. Intervention (All SES)")
restable <- rbind(restable, data.frame(Comparison = "Control vs. Intervention",
eq_add_row(et)))
# Compare Low and High SES Participants
des <- ddply(mlu, c("SES"), summarise, N = length(ToyMLUGain), mean = mean(ToyMLUGain),
sd = sd(ToyMLUGain))
kable(round_df(des), col.names = c("Comparison", "N", "Mean", "SD"))
Comparison | N | Mean | SD |
---|---|---|---|
Low SES | 24 | 0.22 | 0.4 |
High SES | 24 | 0.03 | 0.6 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 3.00 p-value lower bound: 0.002
t-value upper bound: -0.462 p-value upper bound: 0.323
degrees of freedom : 40.01
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -0.2547
high eqbound: 0.2547
TOST confidence interval:
lower bound 90% CI: -0.061
upper bound 90% CI: 0.434
NHST confidence interval:
lower bound 95% CI: -0.11
upper bound 95% CI: 0.484
Equivalence Test Result:
The equivalence test was non-significant, t(40.01) = -0.462, p = 0.323, given equivalence bounds of -0.255 and 0.255 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(40.01) = 1.270, p = 0.211, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p36 <- ggplot(graph, aes(y = diff, x = 1))
p36 <- eq_plot(p36) + ggtitle("High vs. Low SES")
restable <- rbind(restable, data.frame(Comparison = "SES", eq_add_row(et)))
## Compare Interaction between SES and Dialogic and Pause Reading Groups
des <- ddply(mlu, c("SES", "Condition"), summarise, N = length(ToyMLUGain),
mean = mean(ToyMLUGain), sd = sd(ToyMLUGain))
kable(round_df(des[c(1:2, 4:5), ]), col.names = c("SES", "Group", "N",
"Mean", "SD"))
SES | Group | N | Mean | SD | |
---|---|---|---|---|---|
1 | Low SES | Pause | 8 | 0.29 | 0.24 |
2 | Low SES | Dialogic | 8 | 0.31 | 0.50 |
4 | High SES | Pause | 8 | -0.13 | 0.77 |
5 | High SES | Dialogic | 8 | 0.31 | 0.38 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 0.928 p-value lower bound: 0.188
t-value upper bound: -1.07 p-value upper bound: 0.154
degrees of freedom : 10.04
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -0.1968
high eqbound: 0.1968
TOST confidence interval:
lower bound 90% CI: -0.371
upper bound 90% CI: 0.342
NHST confidence interval:
lower bound 95% CI: -0.452
upper bound 95% CI: 0.424
Equivalence Test Result:
The equivalence test was non-significant, t(10.04) = 0.928, p = 0.188, given equivalence bounds of -0.197 and 0.197 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(10.04) = -0.0724, p = 0.944, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p37 <- ggplot(graph, aes(y = diff, x = 1))
p37 <- eq_plot(p37) + ggtitle("Pause vs. Dialogic (Low SES)")
restable <- rbind(restable, data.frame(Comparison = "Pause vs. Dialogic (Low SES)",
eq_add_row(et)))
et <- TOSTtwo(m1 = des$mean[3], m2 = des$mean[4], sd1 = des$sd[3], sd2 = des$sd[4],
n1 = des$N[3], n2 = des$N[4], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 1.63 p-value lower bound: 0.067
t-value upper bound: -0.374 p-value upper bound: 0.358
degrees of freedom : 10.71
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -0.3078
high eqbound: 0.3078
TOST confidence interval:
lower bound 90% CI: -0.362
upper bound 90% CI: 0.747
NHST confidence interval:
lower bound 95% CI: -0.487
upper bound 95% CI: 0.872
Equivalence Test Result:
The equivalence test was non-significant, t(10.71) = -0.374, p = 0.358, given equivalence bounds of -0.308 and 0.308 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(10.71) = 0.626, p = 0.545, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p38 <- ggplot(graph, aes(y = diff, x = 1))
p38 <- eq_plot(p38) + ggtitle("Pause vs. Dialogic (High SES)")
restable <- rbind(restable, data.frame(Comparison = "Pause vs. Dialogic (High SES)",
eq_add_row(et)))
## Compare Interaction between SES and Dialogic and Pause Reading Groups
des <- ddply(mlu, c("SES", "control"), summarise, N = length(ToyMLUGain),
mean = mean(ToyMLUGain), sd = sd(ToyMLUGain))
des$control <- c("Intervention", "Control")
kable(round_df(des), col.names = c("SES", "Group", "N", "Mean", "SD"))
SES | Group | N | Mean | SD |
---|---|---|---|---|
Low SES | Intervention | 8 | 0.06 | 0.41 |
Low SES | Control | 16 | 0.30 | 0.38 |
High SES | Intervention | 8 | -0.07 | 0.57 |
High SES | Control | 16 | 0.09 | 0.63 |
et <- TOSTtwo(m1 = des$mean[1], m2 = des$mean[2], sd1 = des$sd[1], sd2 = des$sd[2],
n1 = des$N[1], n2 = des$N[2], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: -0.241 p-value lower bound: 0.593
t-value upper bound: -2.52 p-value upper bound: 0.013
degrees of freedom : 13.14
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -0.198
high eqbound: 0.198
TOST confidence interval:
lower bound 90% CI: -0.547
upper bound 90% CI: 0.067
NHST confidence interval:
lower bound 95% CI: -0.615
upper bound 95% CI: 0.135
Equivalence Test Result:
The equivalence test was non-significant, t(13.14) = -0.241, p = 0.593, given equivalence bounds of -0.198 and 0.198 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(13.14) = -1.381, p = 0.190, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p39 <- ggplot(graph, aes(y = diff, x = 1))
p39 <- eq_plot(p39) + ggtitle("Control vs. Intervention (Low SES)")
restable <- rbind(restable, data.frame(Comparison = "Control vs. Intervention (Low SES)",
eq_add_row(et)))
et <- TOSTtwo(m1 = des$mean[3], m2 = des$mean[4], sd1 = des$sd[3], sd2 = des$sd[4],
n1 = des$N[3], n2 = des$N[4], low_eqbound_d = -0.5, high_eqbound_d = 0.5,
alpha = 0.05, plot = FALSE)
TOST results:
t-value lower bound: 0.543 p-value lower bound: 0.298
t-value upper bound: -1.80 p-value upper bound: 0.045
degrees of freedom : 15.41
Equivalence bounds (Cohen's d):
low eqbound: -0.5
high eqbound: 0.5
Equivalence bounds (raw scores):
low eqbound: -0.299
high eqbound: 0.299
TOST confidence interval:
lower bound 90% CI: -0.607
upper bound 90% CI: 0.285
NHST confidence interval:
lower bound 95% CI: -0.702
upper bound 95% CI: 0.381
Equivalence Test Result:
The equivalence test was non-significant, t(15.41) = 0.543, p = 0.298, given equivalence bounds of -0.299 and 0.299 (on a raw scale) and an alpha of 0.05.
Null Hypothesis Test Result:
The null hypothesis test was non-significant, t(15.41) = -0.631, p = 0.537, given an alpha of 0.05.
Based on the equivalence test and the null-hypothesis test combined, we can conclude that the observed effect is statistically not different from zero and statistically not equivalent to zero.
graph <- eq_plot_dat(et)
p40 <- ggplot(graph, aes(y = diff, x = 1))
p40 <- eq_plot(p40) + ggtitle("Control vs. Intervention (High SES)")
restable <- rbind(restable, data.frame(Comparison = "Control vs. Intervention (High SES)",
eq_add_row(et)))
ggarrange(p34, p35, p36, p37, p38, p39, p40)
Comparison | t | df | p |
---|---|---|---|
Pause vs. Dialogic | 0.17 | 27.33 | = .432 |
Control vs. Intervention | 0.34 | 32.16 | = .369 |
SES | -0.46 | 40.01 | = .323 |
Pause vs. Dialogic (Low SES) | 0.93 | 10.04 | = .188 |
Pause vs. Dialogic (High SES) | -0.37 | 10.71 | = .358 |
Control vs. Intervention (Low SES) | -0.24 | 13.14 | = .593 |
Control vs. Intervention (High SES) | 0.54 | 15.41 | = .298 |
R version 3.6.2 (2019-12-12)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.3 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=en_GB.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] parallel stats graphics grDevices utils datasets
[7] methods base
other attached packages:
[1] doSNOW_1.0.18 snow_0.4-3 doParallel_1.0.15
[4] iterators_1.0.12 foreach_1.4.7 future_1.15.1
[7] TOSTER_0.3.4 plyr_1.8.4 forcats_0.4.0
[10] dplyr_0.8.3 purrr_0.3.3 readr_1.3.1
[13] tidyr_1.0.0 tibble_2.1.3 tidyverse_1.3.0
[16] ggpubr_0.2.4 magrittr_1.5 stringr_1.4.0
[19] knitr_1.26 scales_1.1.0 broom_0.5.2
[22] reshape2_1.4.3 boot_1.3-23 lme4_1.1-21
[25] Matrix_1.2-18 ggplot2_3.2.1 foreign_0.8-72
loaded via a namespace (and not attached):
[1] httr_1.4.1 jsonlite_1.6 splines_3.6.2
[4] modelr_0.1.5 assertthat_0.2.1 highr_0.8
[7] cellranger_1.1.0 yaml_2.2.0 globals_0.12.5
[10] pillar_1.4.2 backports_1.1.5 lattice_0.20-38
[13] glue_1.3.1 digest_0.6.23 ggsignif_0.6.0
[16] rvest_0.3.5 minqa_1.2.4 colorspace_1.4-1
[19] cowplot_1.0.0 htmltools_0.4.0 pkgconfig_2.0.3
[22] listenv_0.8.0 haven_2.2.0 farver_2.0.1
[25] generics_0.0.2 withr_2.1.2 lazyeval_0.2.2
[28] cli_2.0.0 crayon_1.3.4 readxl_1.3.1
[31] evaluate_0.14 fs_1.3.1 fansi_0.4.0
[34] nlme_3.1-142 MASS_7.3-51.4 xml2_1.2.2
[37] tools_3.6.2 hms_0.5.2 formatR_1.7
[40] lifecycle_0.1.0 munsell_0.5.0 reprex_0.3.0
[43] compiler_3.6.2 rlang_0.4.2 grid_3.6.2
[46] nloptr_1.2.1 rstudioapi_0.10 labeling_0.3
[49] rmarkdown_1.18 gtable_0.3.0 codetools_0.2-16
[52] DBI_1.0.0 R6_2.4.1 lubridate_1.7.4
[55] zeallot_0.1.0 stringi_1.4.3 Rcpp_1.0.3
[58] vctrs_0.2.0 dbplyr_1.4.2 tidyselect_0.2.5
[61] xfun_0.11