Preparation

data<-read.csv("/Users/samanthabouwmeester/Documents/CWTL/merged_data_all.csv")

data$Attendance<-rowSums(data[,which(substring(colnames(data),1,4)=="week")],na.rm = TRUE)
data$Attendance_dich=1
data$Attendance_dich[data$Attendance<21*5*.8]=0


# Missings values 

#baseline num
bas.num<-data[,c("total_nid","total_qds","total_mis","total_add","total_sub","total_prb")]

#Are there any missings values?
any(is.na(rowSums(bas.num)))
## [1] FALSE
# FALSE, so no missing values

#baseline lit
bas.lit<-data[,c("total_lid","total_pho","total_muw","total_non","total_com","total_lis","total_wrt","read_1","read_2")]
bas.lit$read_2[is.na(bas.lit$read_2)]=bas.lit$read_1[is.na(bas.lit$read_2)]
bas.lit$read_1[is.na(bas.lit$read_1)]=0 #One Na in read1 has to be 0.

# Are there any missings values?
any(is.na(rowSums(bas.lit)))
## [1] FALSE
# FALSE, so no missing values



#endline num
end.num<-data[,c("total_nid_end","total_qds_end","total_mis_end","total_add_end","total_sub_end","total_prb_end")]

# Are there any missings values?
any(is.na(rowSums(end.num)))
## [1] TRUE
# TRUE, so missing values: multiple imputation

mis.number=rep(NA,7)
for(i in 1:ncol(end.num))
mis.number[i]=length(which(is.na(end.num[,i])))

mis.number
## [1] 69 69 69 69 69 69 NA
# 69 participants miss the endline data for numericy all tasks. This is 69/1507=.046, 4.6%
# These endline scores were imputed.

scores.mice<-mice(end.num,print=FALSE)
end.num.MI<-complete(scores.mice)

data[,c("total_nid_end","total_qds_end","total_mis_end","total_add_end","total_sub_end","total_prb_end")]=end.num.MI


#check
end.num<-data[,c("total_nid_end","total_qds_end","total_mis_end","total_add_end","total_sub_end","total_prb_end")]
any(is.na(rowSums(end.num)))
## [1] FALSE
# no missings anymore


### total scores
totals.num_perc_bas<-data.frame(data$total_nid/15,
                            data$total_qds/10,
                            data$total_mis/10,
                            data$total_add/25,
                            data$total_sub/25,
                            data$total_prb/6)


totals.num_perc_end<-data.frame(data$total_nid_end/15,
                            data$total_qds_end/10,
                            data$total_mis_end/10,
                            data$total_add_end/25,
                            data$total_sub_end/25,
                            data$total_prb_end/6)


end.num$tot.num_end<-rowSums(totals.num_perc_end)/6.  #divided by 6 to get scores between 0 and 1

bas.num$tot.num<-rowSums(totals.num_perc_bas)/6. #divided by 6 to get scores between 0 and 1


#endline lit
end.lit<-data[,c("total_lid_end","total_pho_end","total_muw_end","total_non_end","total_com_end","total_lis_end","total_wrt_end","Read_1_end",
                 "Read_2_end")]


# Are there any missings values?
any(is.na(rowSums(end.lit)))
## [1] TRUE
# TRUE, so missing values: multiple imputation

mis.lit=rep(NA,9)
for(i in 1:ncol(end.lit))
  mis.lit[i]=length(which(is.na(end.lit[,i])))

mis.lit
## [1]  69  69  69  69 416  69  69  69 416
# 69 participants miss the endline data for literacy all tasks. This is 69/1507=.046, 4.6%
# Task total_com and Read_2 has 416 missings values, this is 416/1507=.276, 27.6%
# These endline scores were imputed.

scores.mice<-mice(end.lit,print=FALSE)
end.lit.MI<-complete(scores.mice)

data[,c("total_lid_end","total_pho_end","total_muw_end","total_non_end","total_com_end","total_lis_end","total_wrt_end","Read_1_end","Read_2_end")]=end.lit.MI


#check
end.lit<-data[,c("total_lid_end","total_pho_end","total_muw_end","total_non_end","total_com_end","total_lis_end","total_wrt_end"
                 ,"Read_1_end","Read_2_end")]
any(is.na(rowSums(end.lit)))
## [1] FALSE
# no missings anymore

### Add total literacy score

totals.lit_perc_bas<-data.frame(data$total_lid/26,
                            data$total_pho/10,
                            data$total_muw/20,
                            data$total_non/16,
                            data$total_com/5,
                            data$total_lis/5,
                            data$total_wrt/10,
                            data$Read_1/99)


totals.lit_perc_end<-data.frame(data$total_lid_end/26,
                            data$total_pho_end/10,
                            data$total_muw_end/20,
                            data$total_non_end/16,
                            data$total_com_end/5,
                            data$total_lis_end/5,
                            data$total_wrt_end/10,
                            data$Read_1_end/99)


end.lit$tot.lit_end<-rowSums(totals.lit_perc_end)/8

bas.lit$tot.lit<-rowSums(totals.lit_perc_bas)/8

### Add total wellbeing score
wellbeing<-data[,c(6:17,375:386)]

for(i in 1:ncol(wellbeing)){
  wellbeing[,i][wellbeing[,i]=="Never"]=0
  wellbeing[,i][wellbeing[,i]=="Not much of the time"]=1
  wellbeing[,i][wellbeing[,i]=="Some of the time"]=2
  wellbeing[,i][wellbeing[,i]=="Quite a lot of the time"]=3
   wellbeing[,i][wellbeing[,i]=="All of the time"]=4
   wellbeing[,i][wellbeing[,i]=="Refused to answer"]=NA
}

wellbeing<-apply(wellbeing,2,as.numeric)
scores.mice<-mice(wellbeing,print=FALSE)
wellbeing<-complete(scores.mice)
wb.bas<-cbind(data[,c(2:5,616)],wellbeing[,1:12])
wb.end<-cbind(wb.bas[,1:5],wellbeing[,13:24])
colnames(wb.end)<-colnames(wb.bas)

WB.long<-rbind(wb.bas,wb.end)
#head(WB.long)
WB.long$totaal<-rowSums(WB.long[,6:17])

Assesments

Long datafile

### Long datafile ###

baseline<-cbind(data[,c(2:5,615,616)],bas.num,bas.lit)
colnames(baseline)
##  [1] "participantID"   "GenderChild"     "School"          "ppt_group"      
##  [5] "Attendance"      "Attendance_dich" "total_nid"       "total_qds"      
##  [9] "total_mis"       "total_add"       "total_sub"       "total_prb"      
## [13] "tot.num"         "total_lid"       "total_pho"       "total_muw"      
## [17] "total_non"       "total_com"       "total_lis"       "total_wrt"      
## [21] "read_1"          "read_2"          "tot.lit"
endline<-cbind(baseline[,1:6],end.num,end.lit)
colnames(endline)=colnames(baseline)

longdata<-rbind(baseline,endline)
longdata<-longdata[order(longdata$participantID),]
longdata$WB_total<-WB.long$totaal
longdata$time<-rep(c("baseline","endline"),nrow(baseline))


longdata[c(1:6),]
##      participantID GenderChild                    School ppt_group Attendance
## 1209      16000650        Male Kyamusooni Primary School         B         82
## 2716      16000650        Male Kyamusooni Primary School         B         82
## 1163      16000674        Male Kyamusooni Primary School         B         88
## 2670      16000674        Male Kyamusooni Primary School         B         88
## 1115      16000681        Male Kyamusooni Primary School         B         83
## 2622      16000681        Male Kyamusooni Primary School         B         83
##      Attendance_dich total_nid total_qds total_mis total_add total_sub
## 1209               0        11         6         4         3         4
## 2716               0        14         9         5         4         4
## 1163               1        13        10         6         7         3
## 2670               1        15        10         7         7         6
## 1115               0        15        10        10         7         4
## 2622               0        15        10         8        11         7
##      total_prb   tot.num total_lid total_pho total_muw total_non total_com
## 1209         2 0.3911111        21         1         3         1         0
## 2716         4 0.5533333        22         3         5         0         0
## 1163         6 0.6444444        23         0        13         3         0
## 2670         6 0.7033333        26         6        17         8         2
## 1115         6 0.7400000        24         4        19         9         2
## 2622         5 0.7255556        24         7        16         2         3
##      total_lis total_wrt read_1 read_2   tot.lit WB_total     time
## 1209         1         0      3      3 0.1738624       21 baseline
## 2716         1         0      7     19 0.2083576       27  endline
## 1163         0         1     30     48 0.2643806       43 baseline
## 2670         1         7     29     69 0.5678662       27  endline
## 1115         1         3     17     48 0.5048259       25 baseline
## 2622         4         7     30     67 0.6188884       31  endline

Descriptives

dm<-t(descriptives_Num)
colnames(dm)<-c("Baseline A","Endline A","Baseline B","Endline B")
data.table(dm[-c(1,2),],keep.rownames=TRUE)
##                 rn Baseline A Endline A Baseline B Endline B
##  1: mean total_nid      12.25     14.11      12.17     13.75
##  2:   sd total_nid       2.90      1.65       2.95      2.09
##  3: mean total_qds       8.29      9.43       8.25      9.05
##  4:   sd total_qds       2.05      1.10       2.14      1.52
##  5: mean total_mis       5.82      7.68       5.27      6.99
##  6:   sd total_mis       2.81      2.16       2.94      2.67
##  7: mean total_add       6.97      9.85       5.83      8.29
##  8:   sd total_add       4.10      4.22       3.70      4.26
##  9: mean total_sub       4.63      7.21       3.97      5.45
## 10:   sd total_sub       3.66      4.02       2.91      3.39
## 11: mean total_prb       3.51      4.71       3.44      4.40
## 12:   sd total_prb       1.92      1.41       1.89      1.61
## 13:   mean tot.num       0.55      0.69       0.52      0.63
## 14:     sd tot.num       0.16      0.12       0.16      0.14
dl<-t(descriptives_Lit)
colnames(dl)<-c("Baseline A","Endline A","Baseline B","Endline B")
data.table(dl[-c(1,2),],keep.rownames=TRUE)
##                 rn Baseline A Endline A Baseline B Endline B
##  1: mean total_lid      19.39     23.74      20.41     23.17
##  2:   sd total_lid       8.14      4.33       7.19      4.87
##  3: mean total_pho       3.71      6.76       2.16      2.89
##  4:   sd total_pho       3.51      3.06       2.83      3.17
##  5: mean total_muw       8.37     13.82       7.46     12.15
##  6:   sd total_muw       6.91      6.25       6.54      6.97
##  7: mean total_non       3.73      7.93       2.81      5.66
##  8:   sd total_non       4.72      5.31       4.15      5.23
##  9: mean total_com       0.80      1.75       0.60      1.56
## 10:   sd total_com       1.27      1.50       1.09      1.46
## 11: mean total_lis       0.86      1.47       0.64      1.21
## 12:   sd total_lis       1.26      1.41       1.04      1.33
## 13: mean total_wrt       3.06      4.78       2.51      4.56
## 14:   sd total_wrt       2.92      3.28       2.73      3.32
## 15:    mean read_1      13.72     29.63      10.32     23.86
## 16:      sd read_1      15.90     22.99      13.31     20.70
## 17:    mean read_2      28.22     60.41      23.63     52.60
## 18:      sd read_2      31.68     28.50      30.39     29.32
## 19:   mean tot.lit       0.34      0.52       0.29      0.42
## 20:     sd tot.lit       0.21      0.22       0.18      0.22

Analysis

nid

tab_model(fit_nid,fit_nid1)
  total_nid total_nid
Predictors Estimates CI p Estimates CI p
(Intercept) 11.52 11.10 – 11.95 <0.001 11.55 11.09 – 12.01 <0.001
GenderChild [Male] 0.28 0.03 – 0.52 0.029 0.27 0.03 – 0.52 0.030
time [endline] 1.79 1.38 – 2.20 <0.001 1.96 1.52 – 2.39 <0.001
Attendance 0.01 0.00 – 0.01 0.003 0.01 0.00 – 0.01 0.003
GenderChild [Male] * time
[endline]
-0.24 -0.50 – 0.01 0.063 -0.23 -0.49 – 0.03 0.077
time [endline] *
Attendance
0.00 -0.00 – 0.01 0.787 0.00 -0.01 – 0.01 0.930
ppt group [B] -0.06 -0.39 – 0.28 0.727
time [endline] * ppt
group [B]
-0.27 -0.53 – -0.02 0.036
Random Effects
σ2 3.19 3.19
τ00 2.73 participantID:School 2.74 participantID:School
0.10 School 0.10 School
ICC 0.47 0.47
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.115 / 0.532 0.118 / 0.533
plot(colnames(dat)[9])

# The thin lines are the means of the schools, thick lines are the overall means.

qds

tab_model(fit_qds,fit_qds1)
  total_qds total_qds
Predictors Estimates CI p Estimates CI p
(Intercept) 8.00 7.70 – 8.31 <0.001 8.00 7.67 – 8.34 <0.001
GenderChild [Male] -0.00 -0.18 – 0.17 0.963 -0.01 -0.18 – 0.17 0.930
time [endline] 0.77 0.44 – 1.09 <0.001 0.96 0.61 – 1.31 <0.001
Attendance 0.00 0.00 – 0.01 0.044 0.00 0.00 – 0.01 0.038
GenderChild [Male] * time
[endline]
-0.12 -0.32 – 0.09 0.258 -0.10 -0.31 – 0.10 0.321
time [endline] *
Attendance
0.00 -0.00 – 0.01 0.077 0.00 -0.00 – 0.01 0.134
ppt group [B] -0.01 -0.26 – 0.23 0.908
time [endline] * ppt
group [B]
-0.33 -0.53 – -0.12 0.002
Random Effects
σ2 2.03 2.02
τ00 0.99 participantID:School 1.00 participantID:School
0.06 School 0.05 School
ICC 0.34 0.34
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.077 / 0.392 0.082 / 0.396
plot(colnames(dat)[10])

# The thin lines are the means of the schools, thick lines are the overall means.

mis

tab_model(fit_mis,fit_mis1)
  total_mis total_mis
Predictors Estimates CI p Estimates CI p
(Intercept) 4.72 4.23 – 5.20 <0.001 5.00 4.48 – 5.52 <0.001
GenderChild [Male] 0.25 -0.01 – 0.52 0.063 0.26 -0.01 – 0.52 0.057
time [endline] 1.57 1.14 – 2.01 <0.001 1.63 1.17 – 2.10 <0.001
Attendance 0.01 0.00 – 0.02 0.001 0.01 0.00 – 0.02 0.001
GenderChild [Male] * time
[endline]
-0.33 -0.60 – -0.06 0.016 -0.33 -0.60 – -0.06 0.018
time [endline] *
Attendance
0.01 -0.00 – 0.01 0.053 0.01 -0.00 – 0.01 0.062
ppt group [B] -0.52 -0.94 – -0.10 0.014
time [endline] * ppt
group [B]
-0.10 -0.37 – 0.17 0.465
Random Effects
σ2 3.59 3.59
τ00 3.23 participantID:School 3.23 participantID:School
0.28 School 0.21 School
ICC 0.49 0.49
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.113 / 0.551 0.124 / 0.552
plot(colnames(dat)[11])

# The thin lines are the means of the schools, thick lines are the overall means.

add

tab_model(fit_add,fit_add1)
  total_add total_add
Predictors Estimates CI p Estimates CI p
(Intercept) 5.16 4.43 – 5.88 <0.001 5.79 5.05 – 6.53 <0.001
GenderChild [Male] 0.22 -0.18 – 0.63 0.282 0.23 -0.18 – 0.64 0.274
time [endline] 2.16 1.40 – 2.92 <0.001 2.37 1.56 – 3.18 <0.001
Attendance 0.02 0.01 – 0.03 <0.001 0.02 0.01 – 0.02 0.001
GenderChild [Male] * time
[endline]
-0.56 -1.03 – -0.08 0.021 -0.54 -1.01 – -0.07 0.025
time [endline] *
Attendance
0.01 0.00 – 0.02 0.022 0.01 0.00 – 0.02 0.031
ppt group [B] -1.09 -1.58 – -0.60 <0.001
time [endline] * ppt
group [B]
-0.34 -0.82 – 0.13 0.160
Random Effects
σ2 10.96 10.95
τ00 5.28 participantID:School 5.28 participantID:School
0.54 School 0.14 School
ICC 0.35 0.33
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.112 / 0.420 0.134 / 0.421
plot(colnames(dat)[12])

# The thin lines are the means of the schools, thick lines are the overall means.

sub

tab_model(fit_sub,fit_sub1)
  total_sub total_sub
Predictors Estimates CI p Estimates CI p
(Intercept) 3.54 2.90 – 4.18 <0.001 3.93 3.30 – 4.57 <0.001
GenderChild [Male] 0.26 -0.10 – 0.62 0.153 0.24 -0.11 – 0.59 0.185
time [endline] 1.38 0.71 – 2.05 <0.001 2.03 1.31 – 2.74 <0.001
Attendance 0.01 0.00 – 0.02 0.021 0.01 0.00 – 0.02 0.033
GenderChild [Male] * time
[endline]
0.10 -0.32 – 0.51 0.655 0.14 -0.27 – 0.56 0.498
time [endline] *
Attendance
0.01 0.00 – 0.02 0.050 0.01 -0.00 – 0.02 0.126
ppt group [B] -0.64 -1.07 – -0.22 0.003
time [endline] * ppt
group [B]
-1.07 -1.49 – -0.66 <0.001
Random Effects
σ2 8.59 8.45
τ00 3.69 participantID:School 3.76 participantID:School
0.45 School 0.10 School
ICC 0.33 0.31
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.084 / 0.382 0.114 / 0.392
plot(colnames(dat)[13])

# The thin lines are the means of the schools, thick lines are the overall means.

prb

tab_model(fit_prb,fit_prb1)
  total_prb total_prb
Predictors Estimates CI p Estimates CI p
(Intercept) 3.12 2.80 – 3.43 <0.001 3.14 2.78 – 3.50 <0.001
GenderChild [Male] 0.19 0.02 – 0.36 0.028 0.19 0.02 – 0.36 0.031
time [endline] 1.10 0.78 – 1.43 <0.001 1.23 0.88 – 1.58 <0.001
Attendance 0.00 0.00 – 0.01 0.047 0.00 0.00 – 0.01 0.041
GenderChild [Male] * time
[endline]
-0.25 -0.45 – -0.04 0.017 -0.24 -0.44 – -0.03 0.022
time [endline] *
Attendance
0.00 -0.00 – 0.01 0.476 0.00 -0.00 – 0.01 0.596
ppt group [B] -0.07 -0.39 – 0.26 0.691
time [endline] * ppt
group [B]
-0.22 -0.42 – -0.01 0.037
Random Effects
σ2 2.02 2.02
τ00 0.80 participantID:School 0.80 participantID:School
0.15 School 0.15 School
ICC 0.32 0.32
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.095 / 0.384 0.098 / 0.386
plot(colnames(dat)[14])

# The thin lines are the means of the schools, thick lines are the overall means.

nu

tab_model(fit_nu,fit_nu1)
  tot.num tot.num
Predictors Estimates CI p Estimates CI p
(Intercept) 0.48 0.46 – 0.51 <0.001 0.50 0.47 – 0.52 <0.001
GenderChild [Male] 0.02 0.00 – 0.03 0.031 0.02 0.00 – 0.03 0.031
time [endline] 0.11 0.09 – 0.13 <0.001 0.13 0.11 – 0.15 <0.001
Attendance 0.00 0.00 – 0.00 <0.001 0.00 0.00 – 0.00 <0.001
GenderChild [Male] * time
[endline]
-0.02 -0.03 – -0.01 0.002 -0.02 -0.03 – -0.01 0.004
time [endline] *
Attendance
0.00 0.00 – 0.00 0.013 0.00 0.00 – 0.00 0.031
ppt group [B] -0.02 -0.05 – -0.00 0.041
time [endline] * ppt
group [B]
-0.03 -0.04 – -0.01 <0.001
Random Effects
σ2 0.01 0.01
τ00 0.01 participantID:School 0.01 participantID:School
0.00 School 0.00 School
ICC 0.61 0.60
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.173 / 0.676 0.188 / 0.679
plot(colnames(dat)[15])

# The thin lines are the means of the schools, thick lines are the overall means.

lid

tab_model(fit_lid,fit_lid1)
  total_lid total_lid
Predictors Estimates CI p Estimates CI p
(Intercept) 18.74 17.52 – 19.95 <0.001 18.10 16.67 – 19.53 <0.001
GenderChild [Male] -0.15 -0.76 – 0.47 0.646 -0.18 -0.80 – 0.44 0.561
time [endline] 3.75 2.60 – 4.89 <0.001 4.70 3.49 – 5.92 <0.001
Attendance 0.02 0.00 – 0.03 0.010 0.02 0.01 – 0.03 0.005
GenderChild [Male] * time
[endline]
-0.35 -1.06 – 0.36 0.335 -0.28 -0.99 – 0.43 0.441
time [endline] *
Attendance
-0.00 -0.02 – 0.02 0.987 -0.00 -0.02 – 0.01 0.692
ppt group [B] 1.11 -0.32 – 2.53 0.128
time [endline] * ppt
group [B]
-1.59 -2.30 – -0.88 <0.001
Random Effects
σ2 24.91 24.62
τ00 12.17 participantID:School 12.32 participantID:School
3.12 School 3.23 School
ICC 0.38 0.39
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.078 / 0.429 0.081 / 0.437
plot(colnames(dat)[16])

# The thin lines are the means of the schools, thick lines are the overall means.

pho

tab_model(fit_pho,fit_pho1)
  total_pho total_pho
Predictors Estimates CI p Estimates CI p
(Intercept) 3.29 2.48 – 4.11 <0.001 3.96 3.15 – 4.77 <0.001
GenderChild [Male] -0.29 -0.59 – 0.01 0.056 -0.34 -0.63 – -0.04 0.025
time [endline] 0.20 -0.47 – 0.86 0.564 1.54 0.86 – 2.22 <0.001
Attendance -0.00 -0.01 – 0.00 0.361 -0.00 -0.01 – 0.01 0.710
GenderChild [Male] * time
[endline]
-0.00 -0.41 – 0.41 0.994 0.10 -0.30 – 0.50 0.626
time [endline] *
Attendance
0.03 0.02 – 0.03 <0.001 0.02 0.01 – 0.03 <0.001
ppt group [B] -1.54 -2.46 – -0.62 0.001
time [endline] * ppt
group [B]
-2.24 -2.63 – -1.84 <0.001
Random Effects
σ2 8.35 7.74
τ00 0.40 participantID:School 0.71 participantID:School
3.25 School 1.48 School
ICC 0.30 0.22
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.081 / 0.360 0.243 / 0.410
plot(colnames(dat)[17])

# The thin lines are the means of the schools, thick lines are the overall means.

muw

tab_model(fit_muw,fit_muw1)
  total_muw total_muw
Predictors Estimates CI p Estimates CI p
(Intercept) 5.85 4.59 – 7.11 <0.001 6.20 4.75 – 7.65 <0.001
GenderChild [Male] -0.75 -1.40 – -0.11 0.022 -0.76 -1.41 – -0.11 0.021
time [endline] 4.55 3.78 – 5.32 <0.001 4.98 4.16 – 5.80 <0.001
Attendance 0.04 0.02 – 0.05 <0.001 0.04 0.02 – 0.05 <0.001
GenderChild [Male] * time
[endline]
-0.09 -0.57 – 0.39 0.712 -0.06 -0.54 – 0.42 0.812
time [endline] *
Attendance
0.01 -0.00 – 0.02 0.106 0.01 -0.00 – 0.02 0.174
ppt group [B] -0.74 -2.13 – 0.65 0.298
time [endline] * ppt
group [B]
-0.72 -1.20 – -0.24 0.003
Random Effects
σ2 11.20 11.14
τ00 29.18 participantID:School 29.21 participantID:School
3.13 School 2.96 School
ICC 0.74 0.74
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.147 / 0.781 0.155 / 0.783
plot(colnames(dat)[18])

# The thin lines are the means of the schools, thick lines are the overall means.

non

tab_model(fit_non,fit_non1)
  total_non total_non
Predictors Estimates CI p Estimates CI p
(Intercept) 2.43 1.52 – 3.33 <0.001 2.84 1.89 – 3.79 <0.001
GenderChild [Male] 0.01 -0.48 – 0.50 0.979 -0.01 -0.49 – 0.48 0.981
time [endline] 2.67 1.90 – 3.44 <0.001 3.44 2.63 – 4.26 <0.001
Attendance 0.01 0.00 – 0.02 0.026 0.01 0.00 – 0.02 0.020
GenderChild [Male] * time
[endline]
-0.32 -0.80 – 0.16 0.193 -0.26 -0.74 – 0.22 0.283
time [endline] *
Attendance
0.02 0.00 – 0.03 0.004 0.01 0.00 – 0.02 0.014
ppt group [B] -0.87 -1.61 – -0.14 0.020
time [endline] * ppt
group [B]
-1.28 -1.76 – -0.81 <0.001
Random Effects
σ2 11.22 11.03
τ00 11.89 participantID:School 11.99 participantID:School
1.15 School 0.59 School
ICC 0.54 0.53
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.122 / 0.594 0.148 / 0.602
plot(colnames(dat)[19])

# The thin lines are the means of the schools, thick lines are the overall means.

com

tab_model(fit_com,fit_com1)
  total_com total_com
Predictors Estimates CI p Estimates CI p
(Intercept) 0.39 0.14 – 0.63 0.002 0.48 0.21 – 0.76 0.001
GenderChild [Male] -0.03 -0.16 – 0.10 0.682 -0.03 -0.16 – 0.11 0.705
time [endline] 0.77 0.54 – 1.01 <0.001 0.75 0.50 – 1.01 <0.001
Attendance 0.00 0.00 – 0.01 0.001 0.00 0.00 – 0.01 0.001
GenderChild [Male] * time
[endline]
-0.11 -0.25 – 0.04 0.154 -0.11 -0.25 – 0.04 0.150
time [endline] *
Attendance
0.00 0.00 – 0.01 0.027 0.00 0.00 – 0.01 0.026
ppt group [B] -0.18 -0.43 – 0.07 0.157
time [endline] * ppt
group [B]
0.03 -0.12 – 0.17 0.727
Random Effects
σ2 1.04 1.04
τ00 0.64 participantID:School 0.64 participantID:School
0.09 School 0.09 School
ICC 0.41 0.41
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.126 / 0.485 0.130 / 0.486
plot(colnames(dat)[20])

# The thin lines are the means of the schools, thick lines are the overall means.

lis

tab_model(fit_lis,fit_lis1)
  total_lis total_lis
Predictors Estimates CI p Estimates CI p
(Intercept) 0.56 0.32 – 0.80 <0.001 0.66 0.38 – 0.94 <0.001
GenderChild [Male] -0.15 -0.28 – -0.03 0.016 -0.15 -0.27 – -0.03 0.017
time [endline] 0.34 0.12 – 0.56 0.002 0.36 0.13 – 0.60 0.003
Attendance 0.00 0.00 – 0.01 0.005 0.00 0.00 – 0.01 0.005
GenderChild [Male] * time
[endline]
0.06 -0.07 – 0.20 0.361 0.07 -0.07 – 0.20 0.351
time [endline] *
Attendance
0.00 0.00 – 0.01 0.036 0.00 0.00 – 0.01 0.040
ppt group [B] -0.20 -0.47 – 0.08 0.160
time [endline] * ppt
group [B]
-0.03 -0.17 – 0.10 0.633
Random Effects
σ2 0.93 0.93
τ00 0.55 participantID:School 0.55 participantID:School
0.12 School 0.12 School
ICC 0.42 0.42
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.064 / 0.459 0.071 / 0.461
plot(colnames(dat)[21])

# The thin lines are the means of the schools, thick lines are the overall means.

wrt

tab_model(fit_wrt,fit_wrt1)
  total_wrt total_wrt
Predictors Estimates CI p Estimates CI p
(Intercept) 1.95 1.38 – 2.52 <0.001 2.22 1.55 – 2.88 <0.001
GenderChild [Male] -0.48 -0.78 – -0.18 0.002 -0.47 -0.77 – -0.17 0.002
time [endline] 1.60 1.22 – 1.98 <0.001 1.38 0.97 – 1.79 <0.001
Attendance 0.02 0.01 – 0.02 <0.001 0.02 0.01 – 0.02 <0.001
GenderChild [Male] * time
[endline]
-0.12 -0.36 – 0.12 0.323 -0.14 -0.38 – 0.10 0.261
time [endline] *
Attendance
0.01 0.00 – 0.01 0.047 0.01 0.00 – 0.01 0.025
ppt group [B] -0.48 -1.11 – 0.15 0.137
time [endline] * ppt
group [B]
0.37 0.13 – 0.61 0.003
Random Effects
σ2 2.80 2.79
τ00 5.73 participantID:School 5.74 participantID:School
0.60 School 0.61 School
ICC 0.69 0.69
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.113 / 0.728 0.116 / 0.730
plot(colnames(dat)[22])

# The thin lines are the means of the schools, thick lines are the overall means.

read 1

tab_model(fit_read1,fit_read11)
  read_1 read_1
Predictors Estimates CI p Estimates CI p
(Intercept) 8.42 4.88 – 11.96 <0.001 9.91 5.90 – 13.93 <0.001
GenderChild [Male] -1.39 -3.20 – 0.42 0.133 -1.40 -3.21 – 0.41 0.128
time [endline] 10.67 8.19 – 13.15 <0.001 11.85 9.20 – 14.49 <0.001
Attendance 0.06 0.02 – 0.10 0.002 0.06 0.02 – 0.11 0.002
GenderChild [Male] * time
[endline]
-2.49 -4.04 – -0.95 0.002 -2.41 -3.95 – -0.86 0.002
time [endline] *
Attendance
0.08 0.05 – 0.11 <0.001 0.08 0.04 – 0.11 <0.001
ppt group [B] -3.09 -6.91 – 0.73 0.113
time [endline] * ppt
group [B]
-1.96 -3.50 – -0.41 0.013
Random Effects
σ2 116.46 116.06
τ00 199.14 participantID:School 199.34 participantID:School
25.39 School 22.09 School
ICC 0.66 0.66
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.156 / 0.712 0.169 / 0.714
plot(colnames(dat)[23])

# The thin lines are the means of the schools, thick lines are the overall means.

read 2

tab_model(fit_read2,fit_read21)
  read_2 read_2
Predictors Estimates CI p Estimates CI p
(Intercept) 17.38 11.85 – 22.91 <0.001 19.26 13.07 – 25.46 <0.001
GenderChild [Male] -2.34 -5.29 – 0.61 0.120 -2.35 -5.31 – 0.60 0.118
time [endline] 28.53 24.54 – 32.52 <0.001 30.36 26.10 – 34.62 <0.001
Attendance 0.14 0.08 – 0.21 <0.001 0.15 0.08 – 0.21 <0.001
GenderChild [Male] * time
[endline]
-0.92 -3.41 – 1.56 0.467 -0.78 -3.27 – 1.70 0.536
time [endline] *
Attendance
0.04 -0.02 – 0.09 0.164 0.03 -0.02 – 0.08 0.238
ppt group [B] -3.92 -9.40 – 1.56 0.161
time [endline] * ppt
group [B]
-3.05 -5.54 – -0.55 0.017
Random Effects
σ2 302.08 301.13
τ00 538.12 participantID:School 538.56 participantID:School
47.37 School 41.74 School
ICC 0.66 0.66
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.220 / 0.735 0.228 / 0.736
plot(colnames(dat)[24])

# The thin lines are the means of the schools, thick lines are the overall means.

total literacy

tab_model(fit_tot.lit,fit_tot.lit1)
  tot.lit tot.lit
Predictors Estimates CI p Estimates CI p
(Intercept) 0.26 0.22 – 0.30 <0.001 0.28 0.24 – 0.33 <0.001
GenderChild [Male] -0.02 -0.04 – -0.00 0.020 -0.02 -0.04 – -0.00 0.017
time [endline] 0.12 0.09 – 0.14 <0.001 0.15 0.12 – 0.17 <0.001
Attendance 0.00 0.00 – 0.00 <0.001 0.00 0.00 – 0.00 <0.001
GenderChild [Male] * time
[endline]
-0.01 -0.02 – 0.01 0.337 -0.01 -0.02 – 0.01 0.485
time [endline] *
Attendance
0.00 0.00 – 0.00 <0.001 0.00 0.00 – 0.00 <0.001
ppt group [B] -0.05 -0.09 – -0.01 0.028
time [endline] * ppt
group [B]
-0.05 -0.06 – -0.03 <0.001
Random Effects
σ2 0.01 0.01
τ00 0.03 participantID:School 0.03 participantID:School
0.00 School 0.00 School
ICC 0.75 0.75
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.153 / 0.787 0.182 / 0.793
plot(colnames(dat)[25])

# The thin lines are the means of the schools, thick lines are the overall means.

Wellbeing

dw<-t(descriptives_WB)
colnames(dw)<-c("Baseline A","Endline A","Baseline B","Endline B")
data.table(dw[-c(1,2),],keep.rownames=TRUE)
##                      rn Baseline A Endline A Baseline B Endline B
## 1: mean total wellbeing      28.22     60.41      23.63     52.60
## 2:   sd total wellbeing      31.68     28.50      30.39     29.32
fit_WB <- lmer(WB_total ~ GenderChild*time+Attendance*time+ (1|participantID:School) + (1 | School), data =longdata )
fit_WB1 <- lmer(WB_total ~ GenderChild+GenderChild*time+Attendance+Attendance*time+time*ppt_group+ (1|participantID:School) + (1 | School), data =longdata )



tab_model(fit_WB,fit_WB1)
  WB_total WB_total
Predictors Estimates CI p Estimates CI p
(Intercept) 34.23 32.99 – 35.47 <0.001 35.99 34.82 – 37.16 <0.001
GenderChild [Male] 0.38 -0.27 – 1.03 0.251 0.39 -0.26 – 1.04 0.234
time [endline] -0.91 -2.26 – 0.45 0.190 -1.03 -2.47 – 0.42 0.165
Attendance -0.01 -0.03 – 0.00 0.052 -0.02 -0.03 – -0.00 0.020
GenderChild [Male] * time
[endline]
-0.21 -1.05 – 0.63 0.629 -0.22 -1.06 – 0.63 0.614
time [endline] *
Attendance
0.02 0.00 – 0.04 0.028 0.02 0.00 – 0.04 0.026
ppt group [B] -3.21 -3.98 – -2.44 <0.001
time [endline] * ppt
group [B]
0.20 -0.65 – 1.05 0.644
Random Effects
σ2 34.76 34.78
τ00 6.33 participantID:School 6.32 participantID:School
2.80 School 0.34 School
ICC 0.21 0.16
N 1507 participantID 1507 participantID
30 School 30 School
Observations 3014 3014
Marginal R2 / Conditional R2 0.003 / 0.210 0.057 / 0.208
plot(colnames(dat)[26])

# The thin lines are the means of the schools, thick lines are the overall means.

Q-values of the interaction effect time x group

#install.packages("devtools")
#library("devtools")
#install_github("jdstorey/qvalue")
#browseVignettes(package = "qvalue")



pvalues<-na.omit(pvalue)

qobj <- qvalue_truncp(p = pvalues)


test<-c("nid","qds","mis","add","sub","prb","nu","lid","pho","muw","non",
"com","lis","wrt","read1","read2","lit")

qvalues <- qobj$qvalues

q<-data.frame(test,pvalues,qvalues)

# unique effect interaction time * group

colnames(q)<-c("(Sub)Task","P-value","Q-value")
data.table(q,keep.rownames=FALSE)
##     (Sub)Task      P-value      Q-value
##  1:       nid 3.567414e-02 5.687609e-02
##  2:       qds 1.793841e-03 5.090388e-03
##  3:       mis 4.645757e-01 6.152198e-01
##  4:       add 1.599700e-01 2.269737e-01
##  5:       sub 5.010765e-07 2.488336e-06
##  6:       prb 3.722272e-02 5.687609e-02
##  7:        nu 1.110593e-04 3.676789e-04
##  8:       lid 1.278138e-05 5.077766e-05
##  9:       pho 5.040117e-27 1.001165e-25
## 10:       muw 3.395392e-03 7.493977e-03
## 11:       non 1.514319e-07 1.002677e-06
## 12:       com 7.270702e-01 8.495569e-01
## 13:       lis 6.327993e-01 7.856173e-01
## 14:       wrt 2.799579e-03 6.951329e-03
## 15:     read1 1.325972e-02 2.633901e-02
## 16:     read2 1.662530e-02 3.002215e-02
## 17:       lit 1.818246e-09 1.805875e-08
pi0 <- qobj$pi0
lfdr <- qobj$lfdr

#summary(qobj)
#hist(qobj)
#plot(qobj)

Effect size Cohen’s d raw data

Cohen’s d was calculated without a correction for variance by school or covariates.

library(rstatix)
## 
## Attaching package: 'rstatix'
## The following object is masked from 'package:stats':
## 
##     filter
cd=list()
for(i in 1:17){
df.effs<-data.frame(diff=endline[,i+6]-baseline[,i+6],group=baseline$ppt_group)
cd[[i]]<-df.effs %>% cohens_d(diff ~ group, var.equal = TRUE)}


test<-c("nid","qds","mis","add","sub","prb","nu","lid","pho","muw","non",
"com","lis","wrt","read1","read2","lit")

df.cohensd<-cd[[1]]
for(i in 2:17)
df.cohensd<-rbind(df.cohensd,cd[[i]])

df<-data.frame(test,df.cohensd[,c(4)])

colnames(df)<-c("(Sub)Task","Cohen's d")
data.table(df,keep.rownames=FALSE)
##     (Sub)Task    Cohen's d
##  1:       nid  0.113372899
##  2:       qds  0.170951376
##  3:       mis  0.051745703
##  4:       add  0.087589972
##  5:       sub  0.266555531
##  6:       prb  0.115598395
##  7:        nu  0.216328777
##  8:       lid  0.226798885
##  9:       pho  0.584830794
## 10:       muw  0.158585614
## 11:       non  0.286205697
## 12:       com -0.004630069
## 13:       lis  0.031747430
## 14:       wrt -0.142030654
## 15:     read1  0.154478215
## 16:     read2  0.130911013
## 17:       lit  0.331026282

Completer analyses on >80% attendance only

nid

tab_model(fit_nid,fit_nid1)
  total_nid total_nid
Predictors Estimates CI p Estimates CI p
(Intercept) 12.73 12.27 – 13.19 <0.001 12.95 12.36 – 13.55 <0.001
GenderChild [Male] -0.40 -0.95 – 0.14 0.149 -0.39 -0.94 – 0.16 0.164
time [endline] 1.75 1.37 – 2.14 <0.001 1.78 1.29 – 2.26 <0.001
GenderChild [Male] * time
[endline]
-0.17 -0.71 – 0.37 0.533 -0.17 -0.71 – 0.37 0.539
ppt group [B] -0.44 -1.16 – 0.29 0.239
time [endline] * ppt
group [B]
-0.05 -0.59 – 0.50 0.870
Random Effects
σ2 3.08 3.09
τ00 3.17 participantID:School 3.16 participantID:School
0.25 School 0.22 School
ICC 0.53 0.52
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.104 / 0.576 0.111 / 0.576
plot(colnames(dat)[9])

# The thin lines are the means of the schools, thick lines are the overall means.

qds

tab_model(fit_qds,fit_qds1)
  total_qds total_qds
Predictors Estimates CI p Estimates CI p
(Intercept) 8.67 8.38 – 8.96 <0.001 8.74 8.36 – 9.12 <0.001
GenderChild [Male] -0.47 -0.82 – -0.12 0.008 -0.47 -0.82 – -0.12 0.009
time [endline] 0.98 0.69 – 1.26 <0.001 1.07 0.71 – 1.44 <0.001
GenderChild [Male] * time
[endline]
0.10 -0.31 – 0.50 0.638 0.11 -0.30 – 0.51 0.608
ppt group [B] -0.15 -0.60 – 0.31 0.521
time [endline] * ppt
group [B]
-0.18 -0.59 – 0.24 0.402
Random Effects
σ2 1.75 1.75
τ00 0.82 participantID:School 0.82 participantID:School
0.09 School 0.08 School
ICC 0.34 0.34
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.104 / 0.411 0.109 / 0.413
plot(colnames(dat)[10])

# The thin lines are the means of the schools, thick lines are the overall means.

mis

tab_model(fit_mis,fit_mis1)
  total_mis total_mis
Predictors Estimates CI p Estimates CI p
(Intercept) 6.03 5.50 – 6.56 <0.001 6.62 6.01 – 7.22 <0.001
GenderChild [Male] -0.25 -0.80 – 0.31 0.382 -0.21 -0.77 – 0.34 0.447
time [endline] 2.16 1.76 – 2.56 <0.001 2.08 1.57 – 2.59 <0.001
GenderChild [Male] * time
[endline]
-0.45 -1.01 – 0.12 0.123 -0.45 -1.02 – 0.12 0.118
ppt group [B] -1.22 -1.95 – -0.49 0.001
time [endline] * ppt
group [B]
0.15 -0.42 – 0.72 0.609
Random Effects
σ2 3.40 3.41
τ00 2.96 participantID:School 2.95 participantID:School
0.52 School 0.23 School
ICC 0.51 0.48
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.127 / 0.569 0.168 / 0.570
plot(colnames(dat)[11])

# The thin lines are the means of the schools, thick lines are the overall means.

add

tab_model(fit_add,fit_add1)
  total_add total_add
Predictors Estimates CI p Estimates CI p
(Intercept) 7.20 6.32 – 8.09 <0.001 7.94 6.91 – 8.97 <0.001
GenderChild [Male] -0.49 -1.39 – 0.41 0.289 -0.47 -1.37 – 0.43 0.306
time [endline] 3.10 2.35 – 3.84 <0.001 3.22 2.27 – 4.16 <0.001
GenderChild [Male] * time
[endline]
-0.17 -1.21 – 0.88 0.757 -0.15 -1.20 – 0.90 0.773
ppt group [B] -1.50 -2.77 – -0.22 0.021
time [endline] * ppt
group [B]
-0.22 -1.28 – 0.85 0.690
Random Effects
σ2 11.63 11.66
τ00 5.21 participantID:School 5.25 participantID:School
1.56 School 0.82 School
ICC 0.37 0.34
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.114 / 0.440 0.145 / 0.438
plot(colnames(dat)[12])

# The thin lines are the means of the schools, thick lines are the overall means.

sub

tab_model(fit_sub,fit_sub1)
  total_sub total_sub
Predictors Estimates CI p Estimates CI p
(Intercept) 4.84 4.04 – 5.65 <0.001 5.10 4.26 – 5.94 <0.001
GenderChild [Male] -0.04 -0.84 – 0.76 0.923 -0.07 -0.86 – 0.72 0.861
time [endline] 2.07 1.37 – 2.77 <0.001 3.20 2.33 – 4.06 <0.001
GenderChild [Male] * time
[endline]
0.09 -0.89 – 1.07 0.858 0.19 -0.77 – 1.15 0.692
ppt group [B] -0.77 -1.79 – 0.25 0.141
time [endline] * ppt
group [B]
-2.05 -3.02 – -1.08 <0.001
Random Effects
σ2 10.23 9.74
τ00 3.05 participantID:School 3.32 participantID:School
1.37 School 0.41 School
ICC 0.30 0.28
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.071 / 0.351 0.138 / 0.377
plot(colnames(dat)[13])

# The thin lines are the means of the schools, thick lines are the overall means.

prb

tab_model(fit_prb,fit_prb1)
  total_prb total_prb
Predictors Estimates CI p Estimates CI p
(Intercept) 3.79 3.46 – 4.13 <0.001 3.95 3.54 – 4.37 <0.001
GenderChild [Male] 0.23 -0.12 – 0.58 0.189 0.24 -0.11 – 0.59 0.178
time [endline] 0.94 0.64 – 1.24 <0.001 1.11 0.73 – 1.49 <0.001
GenderChild [Male] * time
[endline]
-0.28 -0.71 – 0.14 0.187 -0.27 -0.69 – 0.15 0.211
ppt group [B] -0.34 -0.86 – 0.18 0.195
time [endline] * ppt
group [B]
-0.29 -0.72 – 0.13 0.176
Random Effects
σ2 1.89 1.88
τ00 0.63 participantID:School 0.63 participantID:School
0.20 School 0.15 School
ICC 0.31 0.29
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.058 / 0.347 0.080 / 0.351
plot(colnames(dat)[14])

# The thin lines are the means of the schools, thick lines are the overall means.

nu

tab_model(fit_nu,fit_nu1)
  tot.num tot.num
Predictors Estimates CI p Estimates CI p
(Intercept) 0.57 0.54 – 0.60 <0.001 0.60 0.56 – 0.63 <0.001
GenderChild [Male] -0.01 -0.04 – 0.02 0.374 -0.01 -0.04 – 0.02 0.411
time [endline] 0.13 0.11 – 0.15 <0.001 0.15 0.12 – 0.17 <0.001
GenderChild [Male] * time
[endline]
-0.02 -0.04 – 0.01 0.246 -0.01 -0.04 – 0.01 0.283
ppt group [B] -0.05 -0.10 – -0.01 0.019
time [endline] * ppt
group [B]
-0.02 -0.05 – 0.00 0.083
Random Effects
σ2 0.01 0.01
τ00 0.01 participantID:School 0.01 participantID:School
0.00 School 0.00 School
ICC 0.63 0.61
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.160 / 0.688 0.202 / 0.690
plot(colnames(dat)[15])

# The thin lines are the means of the schools, thick lines are the overall means.

lid

tab_model(fit_lid,fit_lid1)
  total_lid total_lid
Predictors Estimates CI p Estimates CI p
(Intercept) 21.91 20.68 – 23.14 <0.001 22.52 20.89 – 24.15 <0.001
GenderChild [Male] -1.58 -2.73 – -0.43 0.007 -1.56 -2.71 – -0.40 0.008
time [endline] 2.72 1.72 – 3.73 <0.001 2.60 1.32 – 3.88 <0.001
GenderChild [Male] * time
[endline]
0.70 -0.71 – 2.12 0.331 0.69 -0.73 – 2.11 0.340
ppt group [B] -1.22 -3.36 – 0.92 0.263
time [endline] * ppt
group [B]
0.22 -1.21 – 1.66 0.761
Random Effects
σ2 21.27 21.33
τ00 6.11 participantID:School 6.10 participantID:School
3.75 School 3.63 School
ICC 0.32 0.31
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.082 / 0.373 0.091 / 0.376
plot(colnames(dat)[16])

# The thin lines are the means of the schools, thick lines are the overall means.

pho

tab_model(fit_pho,fit_pho1)
  total_pho total_pho
Predictors Estimates CI p Estimates CI p
(Intercept) 3.47 2.37 – 4.56 <0.001 4.31 3.21 – 5.42 <0.001
GenderChild [Male] -0.26 -0.87 – 0.36 0.414 -0.29 -0.89 – 0.31 0.342
time [endline] 2.59 2.02 – 3.17 <0.001 3.87 3.18 – 4.56 <0.001
GenderChild [Male] * time
[endline]
-0.39 -1.19 – 0.42 0.347 -0.27 -1.04 – 0.50 0.493
ppt group [B] -2.07 -3.59 – -0.54 0.008
time [endline] * ppt
group [B]
-2.32 -3.10 – -1.54 <0.001
Random Effects
σ2 6.90 6.26
τ00 0.86 participantID:School 1.18 participantID:School
4.93 School 2.33 School
ICC 0.46 0.36
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.106 / 0.514 0.311 / 0.559
plot(colnames(dat)[17])

# The thin lines are the means of the schools, thick lines are the overall means.

muw

tab_model(fit_muw,fit_muw1)
  total_muw total_muw
Predictors Estimates CI p Estimates CI p
(Intercept) 11.62 10.16 – 13.08 <0.001 12.52 10.60 – 14.45 <0.001
GenderChild [Male] -2.29 -3.56 – -1.03 <0.001 -2.26 -3.52 – -0.99 <0.001
time [endline] 5.33 4.66 – 6.00 <0.001 5.23 4.37 – 6.08 <0.001
GenderChild [Male] * time
[endline]
-0.22 -1.17 – 0.72 0.641 -0.23 -1.18 – 0.71 0.628
ppt group [B] -1.82 -4.38 – 0.74 0.162
time [endline] * ppt
group [B]
0.19 -0.76 – 1.15 0.690
Random Effects
σ2 9.46 9.49
τ00 23.24 participantID:School 23.22 participantID:School
5.85 School 5.50 School
ICC 0.75 0.75
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.177 / 0.798 0.192 / 0.799
plot(colnames(dat)[18])

# The thin lines are the means of the schools, thick lines are the overall means.

non

tab_model(fit_non,fit_non1)
  total_non total_non
Predictors Estimates CI p Estimates CI p
(Intercept) 4.46 3.26 – 5.66 <0.001 5.09 3.64 – 6.53 <0.001
GenderChild [Male] -0.59 -1.63 – 0.45 0.264 -0.59 -1.62 – 0.45 0.266
time [endline] 4.93 4.20 – 5.67 <0.001 5.88 4.96 – 6.80 <0.001
GenderChild [Male] * time
[endline]
-1.31 -2.35 – -0.28 0.013 -1.23 -2.25 – -0.21 0.019
ppt group [B] -1.43 -3.32 – 0.47 0.139
time [endline] * ppt
group [B]
-1.72 -2.75 – -0.69 0.001
Random Effects
σ2 11.35 11.02
τ00 10.84 participantID:School 11.02 participantID:School
3.98 School 2.76 School
ICC 0.57 0.56
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.162 / 0.637 0.209 / 0.649
plot(colnames(dat)[19])

# The thin lines are the means of the schools, thick lines are the overall means.

com

tab_model(fit_com,fit_com1)
  total_com total_com
Predictors Estimates CI p Estimates CI p
(Intercept) 1.01 0.70 – 1.33 <0.001 1.13 0.70 – 1.55 <0.001
GenderChild [Male] -0.11 -0.41 – 0.19 0.464 -0.11 -0.40 – 0.19 0.484
time [endline] 1.31 1.10 – 1.53 <0.001 1.28 1.00 – 1.56 <0.001
GenderChild [Male] * time
[endline]
-0.07 -0.38 – 0.24 0.644 -0.08 -0.38 – 0.23 0.631
ppt group [B] -0.23 -0.78 – 0.33 0.421
time [endline] * ppt
group [B]
0.06 -0.25 – 0.37 0.694
Random Effects
σ2 1.00 1.01
τ00 0.79 participantID:School 0.79 participantID:School
0.24 School 0.24 School
ICC 0.50 0.51
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.170 / 0.589 0.173 / 0.591
plot(colnames(dat)[20])

# The thin lines are the means of the schools, thick lines are the overall means.

lis

tab_model(fit_lis,fit_lis1)
  total_lis total_lis
Predictors Estimates CI p Estimates CI p
(Intercept) 1.13 0.82 – 1.43 <0.001 1.18 0.77 – 1.59 <0.001
GenderChild [Male] -0.20 -0.49 – 0.10 0.192 -0.20 -0.49 – 0.10 0.190
time [endline] 0.69 0.45 – 0.92 <0.001 0.78 0.49 – 1.08 <0.001
GenderChild [Male] * time
[endline]
0.01 -0.32 – 0.33 0.972 0.01 -0.31 – 0.34 0.928
ppt group [B] -0.12 -0.65 – 0.42 0.669
time [endline] * ppt
group [B]
-0.18 -0.51 – 0.15 0.281
Random Effects
σ2 1.11 1.11
τ00 0.70 participantID:School 0.70 participantID:School
0.21 School 0.21 School
ICC 0.45 0.45
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.060 / 0.482 0.065 / 0.486
plot(colnames(dat)[21])

# The thin lines are the means of the schools, thick lines are the overall means.

wrt

tab_model(fit_wrt,fit_wrt1)
  total_wrt total_wrt
Predictors Estimates CI p Estimates CI p
(Intercept) 4.40 3.67 – 5.13 <0.001 4.91 3.94 – 5.87 <0.001
GenderChild [Male] -0.95 -1.57 – -0.33 0.003 -0.93 -1.55 – -0.31 0.003
time [endline] 2.47 2.12 – 2.82 <0.001 2.25 1.81 – 2.70 <0.001
GenderChild [Male] * time
[endline]
-0.30 -0.79 – 0.19 0.233 -0.32 -0.81 – 0.17 0.203
ppt group [B] -1.01 -2.31 – 0.28 0.126
time [endline] * ppt
group [B]
0.39 -0.10 – 0.89 0.120
Random Effects
σ2 2.57 2.56
τ00 5.26 participantID:School 5.26 participantID:School
1.52 School 1.45 School
ICC 0.72 0.72
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.150 / 0.766 0.166 / 0.770
plot(colnames(dat)[22])

# The thin lines are the means of the schools, thick lines are the overall means.

read 1

tab_model(fit_read1,fit_read11)
  read_1 read_1
Predictors Estimates CI p Estimates CI p
(Intercept) 20.62 15.39 – 25.86 <0.001 23.62 16.77 – 30.47 <0.001
GenderChild [Male] -4.33 -8.34 – -0.32 0.034 -4.27 -8.28 – -0.25 0.037
time [endline] 19.96 17.72 – 22.21 <0.001 20.54 17.68 – 23.40 <0.001
GenderChild [Male] * time
[endline]
-4.74 -7.90 – -1.57 0.003 -4.69 -7.86 – -1.51 0.004
ppt group [B] -6.25 -15.56 – 3.05 0.187
time [endline] * ppt
group [B]
-1.05 -4.26 – 2.15 0.519
Random Effects
σ2 106.12 106.31
τ00 221.51 participantID:School 221.44 participantID:School
87.42 School 80.83 School
ICC 0.74 0.74
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.178 / 0.790 0.200 / 0.792
plot(colnames(dat)[23])

# The thin lines are the means of the schools, thick lines are the overall means.

read 2

tab_model(fit_read2,fit_read21)
  read_2 read_2
Predictors Estimates CI p Estimates CI p
(Intercept) 41.24 34.21 – 48.27 <0.001 45.03 35.86 – 54.20 <0.001
GenderChild [Male] -8.32 -14.56 – -2.09 0.009 -8.20 -14.44 – -1.96 0.010
time [endline] 32.86 29.23 – 36.50 <0.001 33.78 29.16 – 38.41 <0.001
GenderChild [Male] * time
[endline]
-3.04 -8.16 – 2.08 0.244 -2.96 -8.08 – 2.17 0.258
ppt group [B] -7.81 -19.93 – 4.32 0.207
time [endline] * ppt
group [B]
-1.68 -6.86 – 3.51 0.526
Random Effects
σ2 277.57 278.08
τ00 518.53 participantID:School 518.32 participantID:School
129.87 School 119.49 School
ICC 0.70 0.70
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.226 / 0.768 0.241 / 0.769
plot(colnames(dat)[24])

# The thin lines are the means of the schools, thick lines are the overall means.

total literacy

tab_model(fit_tot.lit,fit_tot.lit1)
  tot.lit tot.lit
Predictors Estimates CI p Estimates CI p
(Intercept) 0.42 0.36 – 0.47 <0.001 0.45 0.39 – 0.52 <0.001
GenderChild [Male] -0.06 -0.10 – -0.02 0.004 -0.06 -0.10 – -0.02 0.004
time [endline] 0.20 0.18 – 0.22 <0.001 0.22 0.19 – 0.25 <0.001
GenderChild [Male] * time
[endline]
-0.02 -0.05 – 0.01 0.209 -0.02 -0.05 – 0.01 0.257
ppt group [B] -0.08 -0.17 – 0.01 0.065
time [endline] * ppt
group [B]
-0.04 -0.07 – -0.01 0.010
Random Effects
σ2 0.01 0.01
τ00 0.03 participantID:School 0.03 participantID:School
0.01 School 0.01 School
ICC 0.80 0.79
N 327 participantID 327 participantID
20 School 20 School
Observations 654 654
Marginal R2 / Conditional R2 0.187 / 0.837 0.237 / 0.841
plot(colnames(dat)[25])

# The thin lines are the means of the schools, thick lines are the overall means.

Mediation analyses group->attendance->score (for total literacy score only in this example)

The first model shows that there is a significant relationship between group and attendance. Children in group B have lower attendance scores (-7.89) than children in group A. The second model shows that there is a significant relationship between total literacy score. Children with higher attendance have higher scores on literacy score (averaged over baseline and endline) and they improve more from baseline to endline with higher attendance scores. In the third model shows that children in group B have lower total literacy scores (averaged over baseline and endline) and children in group B improve less than children in group A. Note that this model explains a bit more variance than model 2 (.791 vs. .796) suggesting that there is a mediation effect of attendance but group also explains some unique variance. In the fourth model this is confirmed as both higher attendance and being in group A results in significant improvement in literacy scores at endline. The final model shows a significant three way interaction between time group and attendance. Higher attendance in group A results in more improvement from baseline to endline than higher attendance in group B. Note that this final model does not have significant interaction effects anymore for timen x attendance and time x group. So this would lead to the conclusion that attendance is both a (partial) mediator and a moderator.

  Attendance tot.lit tot.lit tot.lit tot.lit
Predictors Estimates CI p Estimates CI p Estimates CI p Estimates CI p Estimates CI p
(Intercept) 69.64 66.57 – 72.70 <0.001 0.25 0.21 – 0.29 <0.001 0.34 0.31 – 0.37 <0.001 0.27 0.23 – 0.31 <0.001 0.25 0.20 – 0.31 <0.001
ppt group [B] -7.89 -12.23 – -3.54 <0.001 -0.05 -0.10 – -0.01 0.023 -0.05 -0.09 – -0.01 0.024 -0.02 -0.10 – 0.05 0.547
time [endline] 0.11 0.09 – 0.14 <0.001 0.19 0.18 – 0.20 <0.001 0.14 0.12 – 0.17 <0.001 0.10 0.07 – 0.14 <0.001
Attendance 0.00 0.00 – 0.00 <0.001 0.00 0.00 – 0.00 <0.001 0.00 0.00 – 0.00 0.001
time [endline] *
Attendance
0.00 0.00 – 0.00 <0.001 0.00 0.00 – 0.00 <0.001 0.00 0.00 – 0.00 <0.001
time [endline] * ppt
group [B]
-0.05 -0.06 – -0.03 <0.001 -0.05 -0.06 – -0.03 <0.001 0.02 -0.03 – 0.06 0.454
Attendance * ppt group
[B]
-0.00 -0.00 – 0.00 0.431
(time [endline]
Attendance)
ppt group
[B]
-0.00 -0.00 – -0.00 0.004
Random Effects
σ2 0.00 0.01 0.01 0.01 0.01
τ00 231.44 participantID:School 0.03 participantID:School 0.03 participantID:School 0.03 participantID:School 0.03 participantID:School
34.17 School 0.00 School 0.00 School 0.00 School 0.00 School
ICC 1.00 0.75 0.75 0.75 0.75
N 1507 participantID 1507 participantID 1507 participantID 1507 participantID 1507 participantID
30 School 30 School 30 School 30 School 30 School
Observations 3014 3014 3014 3014 3014
Marginal R2 / Conditional R2 0.055 / 1.000 0.149 / 0.787 0.158 / 0.792 0.179 / 0.793 0.180 / 0.794