8  R

8.1 Data preprocessing

Code
suppressWarnings(suppressMessages(library(tidyverse)))
suppressWarnings(suppressMessages(library(lme4)))
suppressWarnings(suppressMessages(library(sjPlot)))
suppressWarnings(suppressMessages(library(flextable)))
suppressWarnings(suppressMessages(library(officer)))

load("data/tx.rda")

tab_to_flex <- function(tab,x){
tab2 <- tab |> 
  sjtable2df::mtab2df(n_models = 1) |> 
  mutate(p=ifelse(p==Estimates,"",p))
b <- unlist(suppressWarnings(tab2 |> select(p) |> mutate(p = ifelse(p=="<0.001",1,ifelse(as.numeric(p)<0.05,1,0)))))
r <- tab2[1,which(tab2$Predictors=="Random Effects")]
l <- length(b)
flex <- tab2 |> 
  rename(Est.="Estimates",
         SE="std. Error",
         z="Statistic") |> 
  flextable() |> 
  autofit() |> 
  bold(j=5,i=which(b==1))|> 
  bold(j=1,i=r) |> 
  add_footer_row(values = paste0(x,"Est. = estimate; SE = standar error"), colwidths  = 5) |> 
  hline(i = r-1, part = "body") |> 
  width(j=1,width = 4) |> 
  width(j=2:5, width = .5) |>
  fontsize(size=10, part = "all") 
return(flex)
}

lrt_to_flex <- function(tab, c1){
lrt <- tab |> 
  rename("p"=Pr..Chisq.,
         "model"=rowname) |> 
  mutate(sig=case_when(p <= .05 & p >= .01 ~ "*",
                       p < .01 & p >= .001~ "**",
                       p < 0.001 ~ "***"),
         across(where(is.numeric), round, 3)) |> 
  flextable() |> 
  align(j = 10, align = "right", part = "all") |> 
  width(j = 1, 1) |> 
  width(j = 9, 0.6) |> 
  width(j = c(2,8,10), 0.3) |> 
  add_footer_row(top = TRUE, values = "npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom", colwidths = 10)
return(lrt)
}

The preprocessing of the data sets relevant for the analyses is documented here. The data sets are:

  • info : contains Child- and School-IDs, Group (intervention allocation), as well as individual and assessment information
  • ages : contains age and maturity offset information
  • anthro : contains anthropometric measures body height, mass, body fat, and muscle mass
  • emo : contains scores of EMOTIKON fitness tests (both scores and z-transformed scores)
  • cog : contains scores of cognitive tests (both scores and z-transformed scores)

8.1.1 “info”

Used variables:

  • Child : Participant ID (levels = “SMART01”, “SMART02”, … , “SMART76”)
  • School : School ID (levels = “01”, “02”, … , “11”)
  • Group : Group affiliation (levels = “INT-CON”, “CON-INT”)
  • Time : Assessment period (levels = “t0”, “t1”, “t2”, “t3”, “t6”, “t8”)
  • gender : Participants gender (levels = “girl”, “boy”)
  • bp : Berlin proximity of school (levels = “close”, “far”)
  • Date : Mean date of assessment period
  • Dropout : Information about dropouts at each assessment (levels = 0 [no], 1 [yes])

Participants were marked as “Dropout” according to the last assessment in which measures were collected.

Code
info <- 
  as_tibble(tx) |>
  select(Child = "id", Group = "sample", "gender", school = "school.id",
         starts_with("date.t")) |>
  pivot_longer(5:10,
               names_to = "Time",
               values_to = "Date") |>
  mutate(Time=sub('.*(?=.{2}$)', '', Time, perl=T),
         Date=case_when(Time=="t0"~mean(zoo::as.Date("2019-02-19")),
                          Time=="t1"~mean(zoo::as.Date("2019-06-02")),
                          Time=="t2"~mean(zoo::as.Date("2019-08-14")),
                          Time=="t3"~mean(zoo::as.Date("2020-01-15")),
                          Time=="t6"~mean(zoo::as.Date("2020-08-18")),
                          Time=="t8"~mean(zoo::as.Date("2021-08-22"))),
         Group=case_when(Group=="Kontrollgruppe"~"CON-INT",
                         Group=="Interventionsgruppe"~"INT-CON"),
         gender=case_when(gender=="m"~"boy",
                          gender=="w"~"girl"),
         bp=case_when(school %in% c("HVL1","OHV","P") ~ "close",
                          school %in% c("HVL2", "LOS", "MOL1", "MOL2", "OPR1", "OPR2", "PM2", "PR") ~ "far"),
         school=case_when(school=="HVL1"~"01",
                          school=="HVL2"~"02",
                          school=="LOS"~"03",
                          school=="MOL1"~"04",
                          school=="MOL2"~"05",
                          school=="OHV"~"06",
                          school=="OPR1"~"07",
                          school=="OPR2"~"08",
                          school=="P"~"09",
                          school=="PM2"~"10",
                          school=="PR"~"11")) |>
  left_join(as_tibble(tx) |>
          select(Child = "id", contains("_anthro_height_stand")) |>
          pivot_longer(2:7,  names_to = c("Time","x","y","z"), names_sep = "_") |>
          select(Child,Time,value) |>
          pivot_wider(names_from = Time, values_from = value) |>
          group_by(Child) |>
          mutate(t6=ifelse(is.na(t8)==T,t6,t8),
                 t3=ifelse(is.na(mean(c(t6,t8),na.rm=T))==T,t3,mean(c(t6,t8),na.rm=T)),
                 t2=ifelse(is.na(mean(c(t3,t6,t8),na.rm=T))==T,t2,mean(c(t3,t6,t8),na.rm=T)),
                 t1=ifelse(is.na(mean(c(t2,t3,t6,t8),na.rm=T))==T,t1,mean(c(t2,t3,t6,t8),na.rm=T))) |>
          pivot_longer(2:7,  names_to = "Time", values_to = "Dropout") |>
          mutate(Dropout=ifelse(is.na(Dropout)==T,0,1)))
Joining with `by = join_by(Child, Time)`
Code
save(info, file="data/info.rda")

8.1.2 “ages”

Used variables:

  • Child : participant ID (levels = “SMART01”, “SMART02”, … , “SMART76”)
  • Time : assessment period (levels = “t0”, “t1”, “t2”, “t3”, “t6”, “t8”)
  • age : individual age at each assessment (years)
  • m_mirwald : calculation of maturity offset according to Mirwald et al. 2002 (Mirwald et al., 2002) (years)
\[\begin{align} \begin{aligned} girls: &-9.376 \\ &+ (.0001882 * (stand - sit) * sit) \\ &+ (.0022 * (stand - sit) * age) \\ &+ (.005841 * age * sit) \\ &+ (-.002658 * age * weight) \\ &+ (.07693 * weight / stand * 100) \\ boys: &-9.236 \\ &+ (.0002708 * (stand - sit) * sit) \\ &+ (-.001663 * (stand - sit) * age) \\ &+ (.007216 * age * sit) \\ &+ (.02292 * weight / stand * 100) \end{aligned} \end{align}\]
  • m_moore : calculation of maturity offset according to Moore et al. 2012 (Moore et al., 2015) (years)
\[\begin{align} \begin{aligned} girls: &-7.709133 \\ &+ (.0042232 * (age * stand)) \\ boys: &-8.128741 \\ &+ (.0070346 * (age * sit)) \end{aligned} \end{align}\]
Code
ages <- as_tibble(tx) |> 
  select(Child = "id", "gender",
         starts_with("date"),
         starts_with(c("t0","t1","t2","t3","t6","t8")) & contains(c("height","weight"))) |>
  pivot_longer(10:27, names_to = c("Time","Type","Test", "Measure"),
               names_sep = "_", values_to = "value") |>
  select(-Test,-Type) |> 
  pivot_wider(names_from = Measure,
              values_from = value) |> 
  mutate(date = case_when(Time == "t0" ~ date.t0,
                          Time == "t1" ~ date.t1,
                          Time == "t2" ~ date.t2,
                          Time == "t3" ~ date.t3,
                          Time == "t6" ~ date.t6,
                          Time == "t8" ~ date.t8),
         date = zoo::as.Date(date),
         age = as.numeric((date - date.of.birth)/365.25),
         m_mirwald = ifelse(gender=="w",
                         -9.376 
                         + (.0001882 * (stand - sit) * sit) 
                         + (.0022 * (stand - sit) * age) 
                         + (.005841 * age * sit) 
                         + (-.002658 * age * weight) 
                         + (.07693 * weight / stand * 100),
                         -9.236 
                         + (.0002708 * (stand - sit) * sit) 
                         + (-.001663 * (stand - sit) * age) 
                         + (.007216 * age * sit) 
                         + (.02292 * weight / stand * 100)),
         m_moore =ifelse(gender == "w",
                          -7.709133 + (.0042232 * (age * stand)),
                          -8.128741 + (.0070346 * (age * sit))),
         bmi=weight/((stand/100)^2)) |>
  select(Child, Time, age, m_mirwald, m_moore)

save(ages, file="data/ages.rda")

8.1.3 “anthro”

Used variables:

  • height : body height (cm)
  • mass : body mass (kg)
  • bmi : body mass index (kg/m²)
  • fat : body fat percent (%)
  • muscle : muscle mass (kg)
  • lean : lean mass (kg)
Code
anthro <- as_tibble(tx) |> 
  select(Child = "id",
         starts_with(c("t0","t1","t2","t3","t6","t8")) & contains(c("height","weight","fat","muscle","lean.total"))) |>
  pivot_longer(2:37, names_to = c("Time","Type","Test", "Measure"),
               names_sep = "_", values_to = "value") |>
  select(-Test,-Type) |> 
  pivot_wider(names_from = Measure,
              values_from = value) |> 
  mutate(bmi=weight/((stand/100)^2),
         lean=lean.total) |>
  select(Child, Time, height = "stand", mass = "weight", bmi, muscle, fat, lean)

save(anthro, file="data/anthro.rda")

8.1.4 “emo”

Scores for the 20-m sprint and the star run where transformed from time to completion (s) into average speed (m/s) (Fühner et al., 2021, 2022). Z-scores were based norm values for key age children published in Fühner et al. 2021 (Fühner et al., 2021) for 6 min run, star run, 20 m sprint, standing long jump, and ball push test. As indicated by preliminary EMOTIKON analyses, one leg balance test were log-transformed and then z-transformed across the SMaRTER sample.

Code
data.frame(Test=c("Run (m)","Star_r (m/s)", "S20_r (m/s)", "SLJ (cm)", "BPT (m)", "OLB (s)"),
           mean=c("1004", "2.05", "4.52", "126", "3.74", "2.08"),
           sd=c("148", "0.288", "0.413", "19.3", "714", "0.768")) |> 
  flextable() |> 
  autofit() |> 
  align(j=2:3, align = "right") |> 
  add_footer_row(values = c("Run = 6 min run, Star_r = star run, S20_r = 20 m sprint, SLJ = standing long jump, BPT = ball push test, OLB = one leg balance"), colwidths  = 3)
Table 8.1: EMOTIKON values according to Fühner et al. 2021

Test

mean

sd

Run (m)

1004

148

Star_r (m/s)

2.05

0.288

S20_r (m/s)

4.52

0.413

SLJ (cm)

126

19.3

BPT (m)

3.74

714

OLB (s)

2.08

0.768

Run = 6 min run, Star_r = star run, S20_r = 20 m sprint, SLJ = standing long jump, BPT = ball push test, OLB = one leg balance

Code
emo <- as_tibble(tx) |>
  select(Child = "id",
         starts_with(c("t0","t1","t2","t3","t6","t8")) & contains("motor_emo")) |>
  pivot_longer(2:37, names_to = c("Time","type","domain", "Test"),
               names_sep = "_", values_to = "Score") |> 
  select(-domain, -type) |> 
  mutate(across(where(is.character), as.factor),
         Test = fct_recode(Test, Run = "endurance", Star_r = "star", S20_r = "sprint",
                           SLJ = "jump", BPT = "toss", OLB_l = "oneleg"),
        Test = fct_relevel(Test, "Run", "Star_r", "S20_r", "SLJ", "BPT", "OLB_l"),
        Score = case_when(Test == "Star_r" ~ 50.912/Score,
                          Test == "S20_r" ~ 20./Score, 
                          Test == "OLB_l" ~ log(Score),
                          TRUE ~ Score),
        zScore = case_when(Test == "Run" ~ (Score - 1004)/148,
                           Test == "Star_r" ~ (Score - 2.05)/.288,
                           Test == "S20_r" ~ (Score - 4.52)/.413, 
                           Test == "SLJ" ~ (Score - 126)/19.3,
                           Test == "BPT" ~ (Score - 3.74)/.714,
                           Test == "OLB_l" ~ (Score - 2.08)/.768))
save(emo, file="data/emo.rda")

8.1.5 “cog”

A Box-Cox distribution analysis (Box & Cox, 1964) suggested logarithmic transformations for all executive function tests to obtain normally distributed model residuals (see Figure 8.1). Accordingly, lag transformed means and standard deviations were used for z-transformation (see Table 8.2). Further, the z-transformed scores for the trail making test and Simon task were reversed, so positive improvements of z-values indicate and improvement in time to completion or reaction time.

Code
data.frame(Test=c("TMTa (s)","TMTb (s)","DSST (n)","SC (ms)","SI (ms)"),
           mean=c("3.12","3.83","3.47","6.97","7.03"),
           sd=c("0.328","0.370","0.244","0.228","0.223")) |> 
  flextable() |> 
  autofit() |> 
  align(j=2:3, align = "right") |> 
  add_footer_row(values = c("TMTa = trail making test verion A, TMTb = trail making test version B, DSST = digit symbol substitution test, SC = Simon task congruent condition, SI = Simon task incongruent condition"), colwidths  = 3)
Table 8.2: Mean and standard deviation of executive function log-scores

Test

mean

sd

TMTa (s)

3.12

0.328

TMTb (s)

3.83

0.370

DSST (n)

3.47

0.244

SC (ms)

6.97

0.228

SI (ms)

7.03

0.223

TMTa = trail making test verion A, TMTb = trail making test version B, DSST = digit symbol substitution test, SC = Simon task congruent condition, SI = Simon task incongruent condition

Code
cog <- as_tibble(tx) |>
  select(Child = "id",contains("dsst"),
         contains("tmt") & ends_with("Time"),
         contains("simon_m.rt")) |>
  mutate(t0_cog_dsst_dsst.score=t0_cog_dsst_num-t0_cog_dsst_err,
         t1_cog_dsst_dsst.score=t1_cog_dsst_num-t1_cog_dsst_err,
         t2_cog_dsst_dsst.score=t2_cog_dsst_num-t2_cog_dsst_err,
         t3_cog_dsst_dsst.score=t3_cog_dsst_num-t3_cog_dsst_err,
         t6_cog_dsst_dsst.score=t6_cog_dsst_num-t6_cog_dsst_err,
         t8_cog_dsst_dsst.score=t8_cog_dsst_num-t8_cog_dsst_err) |>
  select(-contains("num")&-contains("err")) |>
  pivot_longer(2:31, names_to = c("Time","type","domain", "Test"),
               names_sep = "_", values_to = "Score") |> 
  select(-domain, -type) |> 
  mutate(across(where(is.character), as.factor),
        Test = fct_recode(Test, TMTa = "a.time", TMTb = "b.time", DSST = "dsst.score",
                           SC = "m.rt.con", SI = "m.rt.incon"),
        Test = fct_relevel(Test, "TMTa", "TMTb", "DSST", "SC", "SI"),
        zScore = case_when(Test == "TMTa" ~ -(log(Score) - 3.12)/.328,
                           Test == "TMTb" ~ -(log(Score) - 3.83)/.370,
                           Test == "DSST" ~ (log(Score) - 3.47)/.244,
                           Test == "SC" ~ -(log(Score) - 6.97)/.228,
                           Test == "SI" ~ -(log(Score) - 7.03)/.223))

save(cog, file="data/cog.rda")

par(mfrow=c(5,2))
car::boxCox(lm(Score ~ 1, data = cog[which(cog$Test=="TMTa"),]), main = "BoxCox-plot of trail making test version A") 
hist(log(cog[which(cog$Test=="TMTa"),]$Score), main = "Histogram of logarthmic trail making test version A", xlab = "log(score)")
car::boxCox(lm(Score ~ 1, data = cog[which(cog$Test=="TMTb"),]), main = "BoxCox-plot of trail making test version B") 
hist(log(cog[which(cog$Test=="TMTb"),]$Score), main = "Histogram of logarthmic trail making test version B", xlab = "log(score)")
car::boxCox(lm(Score ~ 1, data = cog[which(cog$Test=="DSST"),]), main = "BoxCox-plot of digit symbol substitution test") 
hist(log(cog[which(cog$Test=="DSST"),]$Score), main = "Histogram of logarthmic digit symbol substitution test", xlab = "log(score)")
car::boxCox(lm(Score ~ 1, data = cog[which(cog$Test=="SC"),]), main = "BoxCox-plot of Simon task congruent condition") 
hist(log(cog[which(cog$Test=="SC"),]$Score), main = "Histogram of logarthmic Simon task congruent condition", xlab = "log(score)")
car::boxCox(lm(Score ~ 1, data = cog[which(cog$Test=="SI"),]), main = "BoxCox-plot of Simon task incongruent condition") 
hist(log(cog[which(cog$Test=="SI"),]$Score), main = "Histogram of logarthmic Simon task incongruent condition", xlab = "log(score)")
Figure 8.1: Box-Cox distribution and histograms of executive function tests

8.2 Supplementary Material Chapter 2

8.2.1 Body mass index analysis for t1 and t3 populations

Code
data_t1 <- left_join(info, anthro) |>
  select(Child, school, Group, gender, Time, bmi) |> 
  subset(Time %in% c("t0","t1")) |> 
  mutate(across(where(is.character), as.factor)) 
  
contrasts(data_t1$Group) <- MASS::contr.sdif(2)
contrasts(data_t1$gender)  <- MASS::contr.sdif(2)
contrasts(data_t1$Time) <- MASS::contr.sdif(2)

m_bmi_t1 <- lmer(bmi ~ 1 + Group*gender*Time + (1 | Child) + (1 | school), data=data_t1, REML=FALSE,
              control=lmerControl(calc.derivs=FALSE))

tab2 <- tab_model(m_bmi_t1, digits=2, digits.re=2, show.se=TRUE, show.stat=TRUE, show.ci=FALSE,CSS = css_theme("cells"),
          pred.labels = c("Grand mean", "Group2-1", "gender2-1", "Time2-1", "Group2-1 * gender2-1", "Group2-1 * Time2-1", "gender2-1* Time2-1", "Group2-1 * gender2-1 * Time2-1"))

tab_to_flex(tab2,"")
Table 8.3: Group x gender x Time interactions for body mass index for the first intervention period (i.e., t0 to t1)

Predictors

Est.

SE

z

p

Grand mean

18.50

0.81

22.98

<0.001

Group2-1

0.62

1.61

0.38

0.703

gender2-1

-2.30

1.01

-2.28

0.024

Time2-1

0.22

0.07

3.21

0.002

Group2-1 * gender2-1

-3.94

2.02

-1.95

0.053

Group2-1 * Time2-1

0.02

0.14

0.12

0.905

gender2-1* Time2-1

0.19

0.14

1.37

0.172

Group2-1 * gender2-1 * Time2-1

0.28

0.28

0.99

0.324

Random Effects

σ2

0.16

τ00Child

16.28

τ00school

4.49

ICC

0.99

N Child

76

N school

11

Observations

144

Marginal R2 / Conditional R2

0.119 / 0.993

Est. = estimate; SE = standar error

Code
data_t3 <- left_join(info, anthro) |>
  select(Child, school, Group, gender, Time, bmi) |> 
  subset(Time %in% c("t0","t1","t2","t3")) |> 
  mutate(across(where(is.character), as.factor)) 
  
contrasts(data_t3$Group) <- MASS::contr.sdif(2)
contrasts(data_t3$gender)  <- MASS::contr.sdif(2)
contrasts(data_t3$Time) <- MASS::contr.sdif(4)

m_bmi_t3 <- lmer(bmi ~ 1 + Group*gender*Time + (1 | Child) + (1 | school), data=data_t3, REML=FALSE,
              control=lmerControl(calc.derivs=FALSE))

tab3 <- tab_model(m_bmi_t3, digits=2, digits.re=2, show.se=TRUE, show.stat=TRUE, show.ci=FALSE,CSS = css_theme("cells"),
                  pred.labels = c("Grand mean", "Group2-1", "gender2-1", "Time2-1", "Time3-2", "Time4-3", "Group2-1 * gender2-1", "Group2-1 * Time2-1", "Group2-1 * Time3-2", "Group2-1 * Time4-3", "gender2-1 * Time2-1", "gender2-1 * Time3-2", "gender2-1 * Time4-3", "Group2-1 * gender2-1 * Time2-1", "Group2-1 * gender2-1 * Time3-2", "Group2-1 * gender2-1 * Time4-3"))

tab_to_flex(tab3,"")
Table 8.4: Group x gender x Time interactions for body mass index for both intervention periods (i.e., t0 to t3)

Predictors

Est.

SE

z

p

Grand mean

18.76

0.82

22.95

<0.001

Group2-1

0.39

1.63

0.24

0.812

gender2-1

-2.20

1.02

-2.16

0.032

Time2-1

0.20

0.11

1.82

0.070

Time3-2

0.28

0.11

2.50

0.013

Time4-3

0.42

0.12

3.48

0.001

Group2-1 * gender2-1

-4.25

2.04

-2.08

0.039

Group2-1 * Time2-1

0.01

0.22

0.05

0.962

Group2-1 * Time3-2

-0.42

0.22

-1.86

0.064

Group2-1 * Time4-3

-0.14

0.24

-0.59

0.553

gender2-1 * Time2-1

0.20

0.22

0.91

0.365

gender2-1 * Time3-2

0.11

0.22

0.50

0.615

gender2-1 * Time4-3

0.23

0.24

0.95

0.345

Group2-1 * gender2-1 * Time2-1

0.17

0.43

0.40

0.693

Group2-1 * gender2-1 * Time3-2

0.12

0.45

0.27

0.791

Group2-1 * gender2-1 * Time4-3

-1.59

0.48

-3.32

0.001

Random Effects

σ2

0.38

τ00Child

16.62

τ00school

4.64

ICC

0.98

N Child

76

N school

11

Observations

268

Marginal R2 / Conditional R2

0.120 / 0.984

Est. = estimate; SE = standar error

8.3 Supplementary Material Chapter 3

8.3.1 INT M1: physical fitness

8.3.1.1 Model fitting

Code
data_m1 <- left_join(info, anthro) |>
  left_join(ages) |>
  select(Child, bp, Group, gender, Time, bmi, age) |>
  filter(!(Child %in% c("SMART06", "SMART23", "SMART58", "SMART68")),
         Time %in% c("t0","t1"))|> 
  mutate(across(where(is.character), \(x) as.factor(x))) |> 
  arrange(Child, Time) |> 
  fill(bmi)
Joining with `by = join_by(Child, Time)`
Joining with `by = join_by(Child, Time)`
Code
data_m1_emo <- data_m1 |>
  left_join(emo) |> 
  filter(!is.na(zScore) & Test %in% c("Run", "Star_r", "S20_r", "SLJ")) |>
  mutate(a1=age - 9.3,
         bmi_c=ifelse(gender=="girl", bmi-17.9,bmi-19.8),
         Test=droplevels(Test),
         Time=droplevels(Time))
Joining with `by = join_by(Child, Time)`
Code
contrasts(data_m1_emo$Test)  <- MASS::contr.sdif(4)
contrasts(data_m1_emo$Time)  <- MASS::contr.sdif(2)
contrasts(data_m1_emo$Group) <- MASS::contr.sdif(2)
contrasts(data_m1_emo$gender)   <- MASS::contr.sdif(2)
contrasts(data_m1_emo$bp)   <- MASS::contr.sdif(2)
m1.1_emo <- lmer(zScore ~ 0 + Test + (1 | Child), data = data_m1_emo, REML = FALSE, control = lmerControl(calc.derivs = FALSE))
m1.2_emo      <- update(m1.1_emo, . ~ .  -Test + Test/(Group * Time))
m1.3_emo_abp  <- update(m1.2_emo, . ~ .           + a1 + bmi_c + bp)
m1.3_emo_gbp  <- update(m1.2_emo, . ~ .  + gender      + bmi_c + bp)
m1.3_emo_gap  <- update(m1.2_emo, . ~ .  + gender + a1         + bp)
m1.3_emo_gab  <- update(m1.2_emo, . ~ .  + gender + a1 + bmi_c     )
m1.4_emo_all  <- update(m1.2_emo, . ~ .  + gender + a1 + bmi_c + bp)
Warning: There was 1 warning in `mutate()`.
ℹ In argument: `across(where(is.numeric), round, 3)`.
Caused by warning:
! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
Supply arguments directly to `.fns` through an anonymous function instead.

  # Previously
  across(a:b, mean, na.rm = TRUE)

  # Now
  across(a:b, \(x) mean(x, na.rm = TRUE))

LRT 1 of fixed effects in INT M1 - physical fitness

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m1.1_emo

6

1,227.027

1,253.005

-607.513

1,215.027

m1.2_emo

18

1,232.915

1,310.850

-598.457

1,196.915

18.112

12

0.112

m1.3_emo_abp

21

1,228.853

1,319.777

-593.427

1,186.853

10.061

3

0.018

*

m1.4_emo_all

22

1,230.662

1,325.916

-593.331

1,186.662

0.191

1

0.662

m1.1_emo

6

1,227.027

1,253.005

-607.513

1,215.027

m1.2_emo

18

1,232.915

1,310.850

-598.457

1,196.915

18.112

12

0.112

m1.3_emo_gbp

21

1,229.324

1,320.248

-593.662

1,187.324

9.591

3

0.022

*

m1.4_emo_all

22

1,230.662

1,325.916

-593.331

1,186.662

0.661

1

0.416

m1.1_emo

6

1,227.027

1,253.005

-607.513

1,215.027

m1.2_emo

18

1,232.915

1,310.850

-598.457

1,196.915

18.112

12

0.112

m1.3_emo_gap

21

1,234.319

1,325.243

-596.159

1,192.319

4.596

3

0.204

m1.4_emo_all

22

1,230.662

1,325.916

-593.331

1,186.662

5.657

1

0.017

*

m1.1_emo

6

1,227.027

1,253.005

-607.513

1,215.027

m1.2_emo

18

1,232.915

1,310.850

-598.457

1,196.915

18.112

12

0.112

m1.3_emo_gab

21

1,229.686

1,320.610

-593.843

1,187.686

9.229

3

0.026

*

m1.4_emo_all

22

1,230.662

1,325.916

-593.331

1,186.662

1.023

1

0.312

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT indicated that body mass index (BMI) improves the model’s fit, while age, gender, and Berlin proximity can be dropped.

m1.5_emo_bmi <- update(m1.1_emo, . ~ . - Test + Test/(Group * Time) + bmi_c)
m1.6_emo_bmi <- update(m1.1_emo, . ~ . - Test + Test/(Group * Time + bmi_c))
m1.7_emo_bmi <- update(m1.1_emo, . ~ . - Test + Test/((Group + Time + bmi_c)^2))

LRT 2 of fixed effects in INT M1 - physical fitness

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m1.1_emo

6

1,227.027

1,253.005

-607.513

1,215.027

m1.2_emo

18

1,232.915

1,310.850

-598.457

1,196.915

18.112

12

0.112

m1.5_emo_bmi

19

1,226.565

1,308.830

-594.282

1,188.565

8.350

1

0.004

**

m1.6_emo_bmi

22

1,185.591

1,280.845

-570.796

1,141.591

46.973

3

0.000

***

m1.7_emo_bmi

30

1,195.350

1,325.242

-567.675

1,135.350

6.241

8

0.620

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT further showed that including BMI nested within Test without interactions improves the models fit. Accordingly, m1.6_emo_bmi was reported in Section 3.3.1.1.

8.3.1.2 Means and standard deviations of model variables

`summarise()` has grouped output by 'Time'. You can override using the
`.groups` argument.

Means and standard deviation of the model variables used in INT M1 physical fitness

Time

t0

t1

Group

CON

INT

CON

INT

gender [girl/boy]

16/15

16/25

16/14

14/25

Berlin proximity [close/far]

15/16

0/41

15/15

0/39

BMI [kg/m²]

18.4±4.7

19.1±5

18.5±4.8

19.5±4.9

age [years]

9.1±0.5

9.2±0.6

9.4±0.5

9.5±0.6

20 m sprint [m/s]

4.1±0.4

4.1±0.3

4.1±0.5

4.1±0.3

standing long jump [cm]

107.1±23.9

106.4±13.6

110.2±24.7

106.8±14.2

star run [m/s]

1.8±0.2

1.8±0.2

1.9±0.2

1.8±0.2

6 min run [m]

876.8±129.9

834.1±119.3

896.1±144.3

863.5±125.1

CON = control condition; INT = intervention condition; BMI = body mass index

8.3.2 INT M1: executive function

8.3.2.1 Model fitting

Code
data_m1_cog <- data_m1 |>
  left_join(cog) |> 
  filter(!is.na(zScore)) |>
  mutate(a1=age - 9.3,
         bmi_c=ifelse(gender=="girl", bmi-17.9,bmi-19.8),
         Test=droplevels(Test),
         Time=droplevels(Time))

contrasts(data_m1_cog$Test) <- MASS::contr.sdif(5)
contrasts(data_m1_cog$Time)  <- MASS::contr.sdif(2)
contrasts(data_m1_cog$Group) <- MASS::contr.sdif(2)
contrasts(data_m1_cog$gender)   <- MASS::contr.sdif(2)
contrasts(data_m1_cog$bp)   <- MASS::contr.sdif(2)
m1.1_cog <- lmer(zScore ~ 0 + Test + (1 | Child), data = data_m1_cog, REML = FALSE, control = lmerControl(calc.derivs = FALSE))
m1.2_cog     <- update(m1.1_cog, . ~ .  -Test + Test/(Group * Time))
m1.3_cog_abp <- update(m1.2_cog, . ~ .           + a1 + bmi_c + bp)
m1.3_cog_gbp <- update(m1.2_cog, . ~ .  + gender      + bmi_c + bp)
m1.3_cog_gap <- update(m1.2_cog, . ~ .  + gender + a1         + bp)
m1.3_cog_gab <- update(m1.2_cog, . ~ .  + gender + a1 + bmi_c     )
m1.4_cog_all <- update(m1.2_cog, . ~ .  + gender + a1 + bmi_c + bp)

LRT 1 of fixed effects in INT M1 - executive function

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m1.1_cog

7

1,776.276

1,808.183

-881.138

1,762.276

m1.2_cog

22

1,765.195

1,865.475

-860.597

1,721.195

41.081

15

0.000

***

m1.3_cog_abp

25

1,769.455

1,883.410

-859.727

1,719.455

1.740

3

0.628

m1.4_cog_all

26

1,764.845

1,883.359

-856.423

1,712.845

6.609

1

0.010

*

m1.1_cog

7

1,776.276

1,808.183

-881.138

1,762.276

m1.2_cog

22

1,765.195

1,865.475

-860.597

1,721.195

41.081

15

0.000

***

m1.3_cog_gbp

25

1,762.846

1,876.801

-856.423

1,712.846

8.349

3

0.039

*

m1.4_cog_all

26

1,764.845

1,883.359

-856.423

1,712.845

0.001

1

0.982

m1.1_cog

7

1,776.276

1,808.183

-881.138

1,762.276

m1.2_cog

22

1,765.195

1,865.475

-860.597

1,721.195

41.081

15

0.000

***

m1.3_cog_gap

25

1,763.515

1,877.470

-856.758

1,713.515

7.679

3

0.053

m1.4_cog_all

26

1,764.845

1,883.359

-856.423

1,712.845

0.670

1

0.413

m1.1_cog

7

1,776.276

1,808.183

-881.138

1,762.276

m1.2_cog

22

1,765.195

1,865.475

-860.597

1,721.195

41.081

15

0.000

***

m1.3_cog_gab

25

1,763.611

1,877.566

-856.806

1,713.611

7.583

3

0.055

m1.4_cog_all

26

1,764.845

1,883.359

-856.423

1,712.845

0.766

1

0.381

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT indicated that gender improves the model’s fit, while age, BMI, and Berlin proximity can be dropped.

m1.5_cog_gender <- update(m1.1_cog, . ~ . - Test + Test/(Group * Time) + gender)
m1.6_cog_gender <- update(m1.1_cog, . ~ . - Test + Test/(Group * Time + gender))
m1.7_cog_gender <- update(m1.1_cog, . ~ . - Test + Test/((Group + Time + gender)^2))

LRT 2 of fixed effects in INT M1 - executive function

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m1.1_cog

7

1,776.276

1,808.183

-881.138

1,762.276

m1.2_cog

22

1,765.195

1,865.475

-860.597

1,721.195

41.081

15

0.000

***

m1.5_cog_gender

23

1,761.022

1,865.861

-857.511

1,715.022

6.172

1

0.013

*

m1.6_cog_gender

27

1,761.152

1,884.223

-853.576

1,707.152

7.871

4

0.096

m1.7_cog_gender

37

1,772.997

1,941.650

-849.498

1,698.997

8.155

10

0.614

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT further showed that gender added as a fixed factor not nested within Test improves the models fit. Accordingly, m1.5_cog_bmi was reported in Section 3.3.2.1.

8.3.2.2 Means and standard deviations of model variables

`summarise()` has grouped output by 'Time'. You can override using the
`.groups` argument.

Means and standard deviation of the model variables used in INT M1 executive function

Time

t0

t1

Group

CON

INT

CON

INT

gender [girl/boy]

16/15

16/25

16/14

14/25

Berlin proximity [close/far]

15/16

0/41

15/15

0/39

BMI [kg/m²]

18.4±4.7

19.1±5

18.5±4.8

19.5±4.9

age [years]

9.1±0.5

9.2±0.6

9.4±0.5

9.5±0.6

TMT version A [s]

30.3±8.3

31.2±11.1

26.5±8.4

25.1±7.4

TMT version B [s]

64.7±34.4

59.3±19.6

58.6±22.8

53.1±20.3

DSST [n]

28.5±5.2

27.1±5.3

30.4±6.5

30.6±6.2

SC [ms]

1198.1±202.5

1275.3±340.3

1191.3±273.8

1185.2±283.6

SI [ms]

1277.7±217.5

1335.1±279.1

1205.7±190.6

1244.9±301.8

CON = control condition; INT = intervention condition; TMT = trail making test; DSST = digit symbol substitution test; SC = Simon task congruent condition; Simon task incongruent condition; BMI = body mass index

8.3.3 INT M2: physical fitness

8.3.3.1 Model fitting

Code
data_m2 <- left_join(info, anthro) |>
  left_join(ages) |>
  select(Child, bp, Group, gender, Time, bmi, age) |>
  filter(!(Child %in% c("SMART01", "SMART06", "SMART12", "SMART19", "SMART23", 
                     "SMART39", "SMART58", "SMART63", "SMART68", "SMART75" )),
         Time %in% c("t0","t1","t2","t3"))|> 
  mutate(Group_pooled = case_when(Group== "INT-CON" & Time %in% c("t0", "t1") ~ "INT",
                                  Group== "INT-CON" & Time %in% c("t2", "t3") ~ "CON",
                                  Group== "CON-INT" & Time %in% c("t0", "t1") ~ "CON",
                                  Group== "CON-INT" & Time %in% c("t2", "t3") ~ "INT"),
         Time_pooled = case_when(Time %in% c("t0", "t2") ~ "pre",
                           Time %in% c("t1", "t3") ~ "post"),
         Time_pooled=factor(Time_pooled, levels = c("pre","post")),
         across(where(is.character), as.factor)) |> 
  arrange(Child, Time) |> 
  fill(bmi)
Joining with `by = join_by(Child, Time)`
Joining with `by = join_by(Child, Time)`
Code
data_m2_emo <- data_m2 |>
  left_join(emo) |> 
  filter(!is.na(zScore) & Test %in% c("Run", "Star_r", "S20_r", "SLJ")) |>
  mutate(a1=age - 9.6,
         bmi_c=ifelse(gender=="girl", bmi-18.5,bmi-19.9),
         Test=droplevels(Test))
Joining with `by = join_by(Child, Time)`
Code
contrasts(data_m2_emo$Time_pooled)  <- MASS::contr.sdif(2)
contrasts(data_m2_emo$Group_pooled) <- MASS::contr.sdif(2)
contrasts(data_m2_emo$gender)   <- MASS::contr.sdif(2)
contrasts(data_m2_emo$bp)   <- MASS::contr.sdif(2)
contrasts(data_m2_emo$Test)  <- MASS::contr.sdif(4)
m2.1_emo <- lmer(zScore ~ 0 + Test + (1 | Child), data = data_m2_emo, REML = FALSE, control = lmerControl(calc.derivs = FALSE))
m2.2_emo     <- update(m2.1_emo, . ~ .  -Test + Test/(Group_pooled * Time_pooled))
m2.3_emo_abp <- update(m2.2_emo, . ~ .           + a1 + bmi_c + bp)
m2.3_emo_gbp <- update(m2.2_emo, . ~ .  + gender      + bmi_c + bp)
m2.3_emo_gap <- update(m2.2_emo, . ~ .  + gender + a1         + bp)
m2.3_emo_gab <- update(m2.2_emo, . ~ .  + gender + a1 + bmi_c     )
m2.4_emo_all <- update(m2.2_emo, . ~ .  + gender + a1 + bmi_c + bp)

LRT 1 of fixed effects in INT M2 - physical fitness

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m2.1_emo

6

2,176.077

2,205.636

-1,082.038

2,164.077

m2.2_emo

18

2,176.732

2,265.411

-1,070.366

2,140.732

23.344

12

0.025

*

m2.3_emo_abp

21

2,168.538

2,271.996

-1,063.269

2,126.538

14.194

3

0.003

**

m2.4_emo_all

22

2,169.783

2,278.167

-1,062.891

2,125.783

0.756

1

0.385

m2.1_emo

6

2,176.077

2,205.636

-1,082.038

2,164.077

m2.2_emo

18

2,176.732

2,265.411

-1,070.366

2,140.732

23.344

12

0.025

*

m2.3_emo_gbp

21

2,171.247

2,274.705

-1,064.623

2,129.247

11.486

3

0.009

**

m2.4_emo_all

22

2,169.783

2,278.167

-1,062.891

2,125.783

3.464

1

0.063

m2.1_emo

6

2,176.077

2,205.636

-1,082.038

2,164.077

m2.2_emo

18

2,176.732

2,265.411

-1,070.366

2,140.732

23.344

12

0.025

*

m2.3_emo_gap

21

2,175.276

2,278.734

-1,066.638

2,133.276

7.456

3

0.059

m2.4_emo_all

22

2,169.783

2,278.167

-1,062.891

2,125.783

7.494

1

0.006

**

m2.1_emo

6

2,176.077

2,205.636

-1,082.038

2,164.077

m2.2_emo

18

2,176.732

2,265.411

-1,070.366

2,140.732

23.344

12

0.025

*

m2.3_emo_gab

21

2,170.199

2,273.657

-1,064.100

2,128.199

12.533

3

0.006

**

m2.4_emo_all

22

2,169.783

2,278.167

-1,062.891

2,125.783

2.417

1

0.120

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT indicated that BMI improves the model’s fit, while age, gender, and Berlin proximity can be dropped.

m2.5_emo_bmi <- update(m2.1_emo, . ~ . - Test + Test/(Group_pooled * Time_pooled) + bmi_c)
m2.6_emo_bmi <- update(m2.1_emo, . ~ . - Test + Test/(Group_pooled * Time_pooled + bmi_c))
m2.7_emo_bmi <- update(m2.1_emo, . ~ . - Test + Test/((Group_pooled + Time_pooled + bmi_c)^2))

LRT 2 of fixed effects in INT M2 - physical fitness

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m2.1_emo

6

2,176.077

2,205.636

-1,082.038

2,164.077

m2.2_emo

18

2,176.732

2,265.411

-1,070.366

2,140.732

23.344

12

0.025

*

m2.5_emo_bmi

19

2,170.194

2,263.799

-1,066.097

2,132.194

8.538

1

0.003

**

m2.6_emo_bmi

22

2,113.439

2,221.824

-1,034.720

2,069.439

62.755

3

0.000

***

m2.7_emo_bmi

30

2,123.595

2,271.392

-1,031.797

2,063.595

5.845

8

0.665

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT further showed that BMI added as a fixed factor nested within Test without interactions improves the models fit. Accordingly, m2.6_emo_bmi was reported in Section 3.4.1.1.

8.3.3.2 Means and standard deviations of model variables

`summarise()` has grouped output by 'Time_pooled'. You can override using the
`.groups` argument.

Means and standard deviation of the model variables used in INT M2 physical fitness

Time [pooled]

pre

post

Group [pooled]

CON

INT

CON

INT

gender [girl/boy]

28/38

27/38

28/36

26/36

Berlin proximity [close/far]

14/52

14/51

14/50

13/49

BMI [kg/m²]

19.1±4.8

19.1±4.9

19.3±5.1

19.8±4.9

age [years]

9.4±0.6

9.4±0.6

9.8±0.7

9.7±0.6

20 m sprint [m/s]

4.1±0.4

4.1±0.4

4.1±0.4

4.1±0.4

standing long jump [cm]

108.4±20.6

107.6±18.5

112.2±20.7

108.3±19.5

star run [m/s]

1.8±0.2

1.8±0.2

1.9±0.2

1.9±0.2

6 min run [m]

850.4±127

853.6±144

880.1±140

872.7±132.4

CON = control condition; INT = intervention condition; BMI = body mass index

8.3.4 INT M2: executive function

8.3.4.1 Model fitting

Code
data_m2_cog <- data_m2 |>
  left_join(cog) |> 
  filter(!is.na(zScore)) |>
  mutate(a1=age - 9.6,
         bmi_c=ifelse(gender=="girl", bmi-18.5,bmi-19.9),
         Test=droplevels(Test))
Joining with `by = join_by(Child, Time)`
Code
contrasts(data_m2_cog$Time_pooled)  <- MASS::contr.sdif(2)
contrasts(data_m2_cog$Group_pooled) <- MASS::contr.sdif(2)
contrasts(data_m2_cog$gender)   <- MASS::contr.sdif(2)
contrasts(data_m2_cog$bp)   <- MASS::contr.sdif(2)
contrasts(data_m2_cog$Test)  <- MASS::contr.sdif(5)
m2.1_cog <- lmer(zScore ~ 0 + Test + (1 | Child), data = data_m2_cog, REML = FALSE, control = lmerControl(calc.derivs = FALSE))
m2.2_cog     <- update(m2.1_cog, . ~ .  -Test + Test/(Group_pooled * Time_pooled))
m2.3_cog_abp <- update(m2.2_cog, . ~ .           + a1 + bmi_c + bp)
m2.3_cog_gbp <- update(m2.2_cog, . ~ .  + gender      + bmi_c + bp)
m2.3_cog_gap <- update(m2.2_cog, . ~ .  + gender + a1         + bp)
m2.3_cog_gab <- update(m2.2_cog, . ~ .  + gender + a1 + bmi_c     )
m2.4_cog_all <- update(m2.2_cog, . ~ .  + gender + a1 + bmi_c + bp)

LRT 1 of fixed effects in INT M2 - executive function

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m2.1_cog

7

3,279.784

3,315.915

-1,632.892

3,265.784

m2.2_cog

22

3,246.800

3,360.356

-1,601.400

3,202.800

62.984

15

0.000

***

m2.3_cog_abp

25

3,105.015

3,234.055

-1,527.507

3,055.015

147.785

3

0.000

***

m2.4_cog_all

26

3,106.509

3,240.712

-1,527.255

3,054.509

0.505

1

0.477

m2.1_cog

7

3,279.784

3,315.915

-1,632.892

3,265.784

m2.2_cog

22

3,246.800

3,360.356

-1,601.400

3,202.800

62.984

15

0.000

***

m2.3_cog_gbp

25

3,236.158

3,365.198

-1,593.079

3,186.158

16.642

3

0.001

***

m2.4_cog_all

26

3,106.509

3,240.712

-1,527.255

3,054.509

131.648

1

0.000

***

m2.1_cog

7

3,279.784

3,315.915

-1,632.892

3,265.784

m2.2_cog

22

3,246.800

3,360.356

-1,601.400

3,202.800

62.984

15

0.000

***

m2.3_cog_gap

25

3,106.976

3,236.016

-1,528.488

3,056.976

145.824

3

0.000

***

m2.4_cog_all

26

3,106.509

3,240.712

-1,527.255

3,054.509

2.467

1

0.116

m2.1_cog

7

3,279.784

3,315.915

-1,632.892

3,265.784

m2.2_cog

22

3,246.800

3,360.356

-1,601.400

3,202.800

62.984

15

0.000

***

m2.3_cog_gab

25

3,104.689

3,233.730

-1,527.345

3,054.689

148.111

3

0.000

***

m2.4_cog_all

26

3,106.509

3,240.712

-1,527.255

3,054.509

0.180

1

0.671

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT indicated that age improves the model’s fit, while BMI, gender, and Berlin proximity can be dropped.

m2.5_cog_gender <- update(m2.1_cog, . ~ . - Test + Test/(Group_pooled * Time_pooled) + a1)
m2.6_cog_gender <- update(m2.1_cog, . ~ . - Test + Test/(Group_pooled * Time_pooled + a1))
m2.7_cog_gender <- update(m2.1_cog, . ~ . - Test + Test/((Group_pooled + Time_pooled + a1)^2))

LRT 2 of fixed effects in INT M2 - executive function

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m2.1_cog

7

3,279.784

3,315.915

-1,632.892

3,265.784

m2.2_cog

22

3,246.800

3,360.356

-1,601.400

3,202.800

62.984

15

0.000

***

m2.5_cog_gender

23

3,103.466

3,222.184

-1,528.733

3,057.466

145.334

1

0.000

***

m2.6_cog_gender

27

3,106.360

3,245.724

-1,526.180

3,052.360

5.107

4

0.277

m2.7_cog_gender

37

3,114.710

3,305.690

-1,520.355

3,040.710

11.650

10

0.309

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT further showed that age added as a fixed factor not nested within Test improves the models fit. Accordingly, m2.5_cog_bmi was reported in Section 3.4.2.1.

8.3.4.2 Means and standard deviations of model variables

`summarise()` has grouped output by 'Time_pooled'. You can override using the
`.groups` argument.

Means and standard deviation of the model variables used in INT M2 executive function

Time [pooled]

pre

post

Group [pooled]

CON

INT

CON

INT

gender [girl/boy]

28/38

27/38

28/37

26/37

Berlin proximity [close/far]

14/52

14/51

14/51

14/49

BMI [kg/m²]

19.1±4.8

19.1±4.9

19.3±5

19.7±4.9

age [years]

9.4±0.6

9.4±0.6

9.8±0.7

9.7±0.6

TMT version A [s]

25.8±8.3

27.9±10.5

23.9±7.3

23.6±7.4

TMT version B [s]

55.4±27.5

59.1±24.5

46.7±19.1

47.8±17.5

DSST [n]

31.4±6.6

29.4±6.9

33.3±6.9

32.3±6.8

SC [ms]

1133.1±224.9

1168.9±319

1104.6±225.6

1106.5±273.6

SI [ms]

1209.4±236.8

1249.8±270

1133±187.7

1176.2±303.1

CON = control condition; INT = intervention condition; TMT = trail making test; DSST = digit symbol substitution test; SC = Simon task congruent condition; Simon task incongruent condition; BMI = body mass index

8.3.5 INT M3: physical fitness

8.3.5.1 Model fitting

Code
data_m3 <- left_join(info, anthro) |>
  left_join(ages) |>
  select(Child, bp, Group, gender, Time, bmi, age) |>
  filter(!(Child%in% c(
"SMART01", "SMART03", "SMART04", "SMART05", "SMART06", "SMART07", "SMART08", "SMART09", "SMART10", "SMART12", "SMART13", "SMART14", "SMART16", "SMART19", "SMART21", "SMART22", "SMART23", "SMART28", "SMART31", "SMART33", "SMART37", "SMART38", "SMART39", "SMART40", "SMART43", "SMART52", "SMART56", "SMART57", "SMART58", "SMART61", "SMART63", "SMART64", "SMART68", "SMART69", "SMART70", "SMART71", "SMART72", "SMART75", "SMART76"  )),
         Time %in% c("t0","t1","t2","t3","t6","t8")) |> 
  mutate(bp=ifelse(bp=="01","09",bp),
         across(where(is.character), as.factor)) |>
  arrange(Child, Time) |> 
  fill(bmi)
Joining with `by = join_by(Child, Time)`
Joining with `by = join_by(Child, Time)`
Code
data_m3_emo <- data_m3 |>
  left_join(emo) |> 
  filter(!is.na(zScore) & Test %in% c("Run", "Star_r", "S20_r", "SLJ")) |>
  mutate(a1=age - 10,
         bmi_c=ifelse(gender=="girl", bmi-19.7,bmi-20.4),
         Test=droplevels(Test))
Joining with `by = join_by(Child, Time)`
Code
contrasts(data_m3_emo$Test)  <- MASS::contr.sdif(4)
contrasts(data_m3_emo$Time)  <- MASS::contr.sdif(6)
contrasts(data_m3_emo$Group) <- MASS::contr.sdif(2)
contrasts(data_m3_emo$gender)   <- MASS::contr.sdif(2)
contrasts(data_m3_emo$bp)   <- MASS::contr.sdif(2)
m3.1_emo <- lmer(zScore ~ 0 + Test + (1 | Child), data = data_m3_emo, REML = FALSE, control = lmerControl(calc.derivs = FALSE))
m3.2_emo     <- update(m3.1_emo, . ~ .  -Test + Test/(Group * Time))
m3.3_emo_abp <- update(m3.2_emo, . ~ .           + a1 + bmi_c + bp)
m3.3_emo_gbp <- update(m3.2_emo, . ~ .  + gender      + bmi_c + bp)
m3.3_emo_gap <- update(m3.2_emo, . ~ .  + gender + a1         + bp)
m3.3_emo_gab <- update(m3.2_emo, . ~ .  + gender + a1 + bmi_c     )
m3.4_emo_all <- update(m3.2_emo, . ~ .  + gender + a1 + bmi_c + bp)

LRT 1 of fixed effects in INT M3 - physical fitness

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m3.1_emo

6

1,918.185

1,946.556

-953.092

1,906.185

m3.2_emo

50

1,873.974

2,110.405

-886.987

1,773.974

132.211

44

0.000

***

m3.3_emo_abp

53

1,862.963

2,113.580

-878.482

1,756.963

17.011

3

0.001

***

m3.4_emo_all

54

1,864.902

2,120.248

-878.451

1,756.902

0.061

1

0.804

m3.1_emo

6

1,918.185

1,946.556

-953.092

1,906.185

m3.2_emo

50

1,873.974

2,110.405

-886.987

1,773.974

132.211

44

0.000

***

m3.3_emo_gbp

53

1,862.951

2,113.568

-878.475

1,756.951

17.023

3

0.001

***

m3.4_emo_all

54

1,864.902

2,120.248

-878.451

1,756.902

0.049

1

0.824

m3.1_emo

6

1,918.185

1,946.556

-953.092

1,906.185

m3.2_emo

50

1,873.974

2,110.405

-886.987

1,773.974

132.211

44

0.000

***

m3.3_emo_gap

53

1,870.924

2,121.541

-882.462

1,764.924

9.050

3

0.029

*

m3.4_emo_all

54

1,864.902

2,120.248

-878.451

1,756.902

8.022

1

0.005

**

m3.1_emo

6

1,918.185

1,946.556

-953.092

1,906.185

m3.2_emo

50

1,873.974

2,110.405

-886.987

1,773.974

132.211

44

0.000

***

m3.3_emo_gab

53

1,867.524

2,118.142

-880.762

1,761.524

12.450

3

0.006

**

m3.4_emo_all

54

1,864.902

2,120.248

-878.451

1,756.902

4.623

1

0.032

*

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT indicated that BMI and Berlin proximity improves the model’s fit, while age and gender can be dropped.

m3.5_emo_bmi <- update(m3.1_emo, . ~ . - Test + Test/(Group * Time) + bmi_c)
m3.6_emo_bmi <- update(m3.1_emo, . ~ . - Test + Test/(Group * Time + bmi_c))
m3.7_emo_bmi <- update(m3.1_emo, . ~ . - Test + Test/((Group + Time + bmi_c)^2))
m3.5_emo_bp <- update(m3.1_emo, . ~ . - Test + Test/(Group * Time) + bp)
m3.6_emo_bp <- update(m3.1_emo, . ~ . - Test + Test/(Group * Time + bp))
m3.7_emo_bp <- update(m3.1_emo, . ~ . - Test + Test/((Group + Time + bp)^2))
fixed-effect model matrix is rank deficient so dropping 4 columns / coefficients

LRT 2 of fixed effects in INT M3 - physical fitness

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m3.1_emo

6

1,918.185

1,946.556

-953.092

1,906.185

m3.2_emo

50

1,873.974

2,110.405

-886.987

1,773.974

132.211

44

0.000

***

m3.5_emo_bmi

51

1,863.558

2,104.718

-880.779

1,761.558

12.416

1

0.000

***

m3.6_emo_bmi

54

1,795.105

2,050.451

-843.553

1,687.105

74.453

3

0.000

***

m3.7_emo_bmi

78

1,827.327

2,196.160

-835.664

1,671.327

15.778

24

0.896

m3.1_emo

6

1,918.185

1,946.556

-953.092

1,906.185

m3.2_emo

50

1,873.974

2,110.405

-886.987

1,773.974

132.211

44

0.000

***

m3.5_emo_bp

51

1,867.127

2,108.287

-882.564

1,765.127

8.847

1

0.003

**

m3.6_emo_bp

54

1,840.301

2,095.647

-866.151

1,732.301

32.826

3

0.000

***

m3.7_emo_bp

74

1,855.488

2,205.406

-853.744

1,707.488

24.813

20

0.209

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT indicated that BMI and Berlin proximity added in the fixed structure nested within Test improves the model’s fit.

Code
m3.6_emo_bmibp <- update(m3.1_emo, . ~ . - Test + Test/(Group * Time + bmi_c + bp))
m3.6_emo_bmibp2 <- update(m3.1_emo, . ~ . - Test + Test/(Group * Time + bmi_c * bp))

LRT 3 of fixed effects in INT M3 - physical fitness

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m3.1_emo

6

1,918.185

1,946.556

-953.092

1,906.185

m3.2_emo

50

1,873.974

2,110.405

-886.987

1,773.974

132.211

44

0.000

***

m3.6_emo_bmi

54

1,795.105

2,050.451

-843.553

1,687.105

86.869

4

0.000

***

m3.6_emo_bmibp

58

1,788.050

2,062.310

-836.025

1,672.050

15.055

4

0.005

**

m3.6_emo_bmibp2

62

1,789.523

2,082.698

-832.762

1,665.523

6.527

4

0.163

m3.1_emo

6

1,918.185

1,946.556

-953.092

1,906.185

m3.2_emo

50

1,873.974

2,110.405

-886.987

1,773.974

132.211

44

0.000

***

m3.6_emo_bp

54

1,840.301

2,095.647

-866.151

1,732.301

41.673

4

0.000

***

m3.6_emo_bmibp

58

1,788.050

2,062.310

-836.025

1,672.050

60.251

4

0.000

***

m3.6_emo_bmibp2

62

1,789.523

2,082.698

-832.762

1,665.523

6.527

4

0.163

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT further indicated that BMI and Berlin proximity both added to the fixed structure nested within Test without interactions improves the model’s fit. Accordingly, m3.6_emo_bmibp was reported in Section 3.5.1.1.

8.3.5.2 Means and standard deviations of model variables

`summarise()` has grouped output by 'Time'. You can override using the
`.groups` argument.

Means and standard deviation of the model variables used in INT M3 physical fitness

Time

t0

t1

t2

t3

t6

t8

Group

CON-INT

INT-CON

CON-INT

INT-CON

CON-INT

INT-CON

CON-INT

INT-CON

CON-INT

INT-CON

CON-INT

INT-CON

gender [girl/boy]

9/9

7/12

9/8

6/12

9/9

7/12

9/7

7/12

7/7

7/10

9/8

7/12

Berlin proximity [close/far]

8/10

0/19

8/9

0/18

8/10

0/19

7/9

0/19

8/6

0/17

7/10

0/19

BMI [kg/m²]

19±5

20±6

19±5

21±6

19±5

20±6

20±6

21±6

19±6

20±5

21±6

22±7

age [years]

9±0.4

9.2±0.5

9.3±0.4

9.5±0.5

9.5±0.4

9.7±0.5

9.9±0.4

10.1±0.5

10.5±0.4

10.6±0.4

11.5±0.4

11.7±0.5

20 m sprint [m/s]

4.1±0.4

4±0.4

4.1±0.5

4±0.4

4.1±0.3

4.2±0.3

4±0.4

4.1±0.3

4.2±0.4

4.3±0.3

4.3±0.4

4.4±0.5

standing long jump [cm]

111±21

107±14

112±24

106±16

109±18

107±16

109±20

116±18

114±29

120±18

122±26

126±16

star run [m/s]

1.8±0.2

1.7±0.2

1.9±0.2

1.8±0.2

1.8±0.2

1.8±0.2

1.9±0.3

1.9±0.2

2±0.2

2±0.2

2±0.2

2±0.3

6 min run [m]

879±138

794±146

865±133

837±156

854±169

791±103

856±137

837±169

881±196

835±110

825±185

860±174

CON = control condition; INT = intervention condition; BMI = body mass index

8.3.6 INT M3: executive function

8.3.6.1 Model fitting

Code
data_m3_cog <- data_m3 |>
  left_join(cog) |> 
  filter(!is.na(zScore)) |>
  mutate(a1=age - 10,
         bmi_c=ifelse(gender=="girl", bmi-19.7,bmi-20.4),
         Test=droplevels(Test))
Joining with `by = join_by(Child, Time)`
Code
contrasts(data_m3_cog$Time)  <- MASS::contr.sdif(6)
contrasts(data_m3_cog$Group) <- MASS::contr.sdif(2)
contrasts(data_m3_cog$bp) <- MASS::contr.sdif(2)
contrasts(data_m3_cog$gender)   <- MASS::contr.sdif(2)
contrasts(data_m3_cog$Test)  <- MASS::contr.sdif(5)
m3.1_cog <- lmer(zScore ~ 0 + Test + (1 | Child), data = data_m3_cog, REML = FALSE, control = lmerControl(calc.derivs = FALSE))
m3.2_cog     <- update(m3.1_cog, . ~ .  -Test + Test/(Group * Time))
m3.3_cog_abp <- update(m3.2_cog, . ~ .           + a1 + bmi_c + bp)
m3.3_cog_gbp <- update(m3.2_cog, . ~ .  + gender      + bmi_c + bp)
m3.3_cog_gap <- update(m3.2_cog, . ~ .  + gender + a1         + bp)
m3.3_cog_gab <- update(m3.2_cog, . ~ .  + gender + a1 + bmi_c     )
m3.4_cog_all <- update(m3.2_cog, . ~ .  + gender + a1 + bmi_c + bp)

LRT 1 of fixed effects in INT M3 - executive function

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m3.1_cog

7

2,832.854

2,867.629

-1,409.427

2,818.854

m3.2_cog

62

2,451.983

2,759.994

-1,163.992

2,327.983

490.870

55

0.000

***

m3.3_cog_abp

65

2,455.093

2,778.007

-1,162.547

2,325.093

2.890

3

0.409

m3.4_cog_all

66

2,454.411

2,782.293

-1,161.206

2,322.411

2.682

1

0.102

m3.1_cog

7

2,832.854

2,867.629

-1,409.427

2,818.854

m3.2_cog

62

2,451.983

2,759.994

-1,163.992

2,327.983

490.870

55

0.000

***

m3.3_cog_gbp

65

2,452.707

2,775.621

-1,161.354

2,322.707

5.276

3

0.153

m3.4_cog_all

66

2,454.411

2,782.293

-1,161.206

2,322.411

0.296

1

0.587

m3.1_cog

7

2,832.854

2,867.629

-1,409.427

2,818.854

m3.2_cog

62

2,451.983

2,759.994

-1,163.992

2,327.983

490.870

55

0.000

***

m3.3_cog_gap

65

2,454.039

2,776.953

-1,162.020

2,324.039

3.944

3

0.268

m3.4_cog_all

66

2,454.411

2,782.293

-1,161.206

2,322.411

1.628

1

0.202

m3.1_cog

7

2,832.854

2,867.629

-1,409.427

2,818.854

m3.2_cog

62

2,451.983

2,759.994

-1,163.992

2,327.983

490.870

55

0.000

***

m3.3_cog_gab

65

2,452.597

2,775.511

-1,161.299

2,322.597

5.386

3

0.146

m3.4_cog_all

66

2,454.411

2,782.293

-1,161.206

2,322.411

0.186

1

0.666

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT indicated that including BMI, Berlin proximity, age, and gender in the fixed factors do not improve the model’s fit. Accordingly, all covariates were dropped and m3.2_cog was reported in Section 3.5.2.1.

8.3.6.2 Means and standard deviations of model variables

`summarise()` has grouped output by 'Time'. You can override using the
`.groups` argument.

Means and standard deviation of the model variables used in INT M3 executive function

Time

t0

t1

t2

t3

t6

t8

Group

CON-INT

INT-CON

CON-INT

INT-CON

CON-INT

INT-CON

CON-INT

INT-CON

CON-INT

INT-CON

CON-INT

INT-CON

gender [girl/boy]

9/9

7/12

9/8

6/12

9/9

7/12

9/8

7/12

7/7

7/10

9/9

7/12

Berlin proximity [close/far]

8/10

0/19

8/9

0/18

8/10

0/19

8/9

0/19

8/6

0/17

8/10

0/19

BMI [kg/m²]

19±5

20±6

19±5

21±6

19±5

20±6

20±6

21±6

19±6

20±5

21±6

22±7

age [years]

9±0.4

9.2±0.5

9.3±0.4

9.5±0.5

9.5±0.4

9.7±0.5

9.9±0.4

10.1±0.5

10.5±0.4

10.6±0.4

11.5±0.4

11.7±0.5

TMT version A [s]

28.8±8.6

31.1±11.2

24.5±7.3

24.7±7

22.3±6.7

22.7±7.6

22.3±7.7

23±8.1

19.8±4.9

19.4±5.9

15.5±3.9

18.3±4.4

TMT version B [s]

57.1±18.9

60.5±18.9

54.6±28

52.5±24.9

57.9±36.3

43.4±12.9

39.9±9.2

39.3±8.1

37.8±11.3

40.4±12.1

33.6±9.9

34.4±9

DSST [n]

29.9±5.9

27.1±5.9

31.5±6.8

29.7±6.3

33.4±8.1

33.7±7.7

36.2±7.8

35.3±7

37.9±6.3

35.4±9.1

45.2±8

40.7±7

SC [ms]

1157±200

1286±412

1139±223

1170±300

1026±250

1070±259

943±156

1056±174

985±203

992±180

845±97

869±188

SI [ms]

1246±227

1335±283

1155±152

1232±296

1120±227

1158±272

1028±176

1112±199

1067±218

1089±273

888±133

903±184

CON = control condition; INT = intervention condition; TMT = trail making test; DSST = digit symbol substitution test; SC = Simon task congruent condition; Simon task incongruent condition; BMI = body mass index

8.4 Supplementary Material Chapter 4

Code
data_5 <- left_join(info, ages) |>
  left_join(anthro) |> 
  left_join(emo) |> 
  mutate(across(where(is.character), as.factor),
         muscle_p=muscle/mass*100,
         fat_p=fat,
         fat=(mass*(fat_p/100)),
         w_mf=muscle + fat,
         bmi=height/(mass^2),
         a1=age-9.9,
         gender=factor(gender, levels = c("girl","boy"))) |> 
  select(Child, Time, a1, gender, Test, Score, zScore, mass, height, muscle, muscle_p, fat, fat_p, w_mf, lean) |> 
  subset(is.na(zScore)==FALSE)|> 
  arrange(Child, Time) |> 
  fill(mass:lean)
Joining with `by = join_by(Child, Time)`
Joining with `by = join_by(Child, Time)`
Joining with `by = join_by(Child, Time)`

8.4.1 Correlation of InBody parameters

Code
data_5 |> 
  select(height,mass,fat, fat_p,muscle, muscle_p, w_mf, lean) |> 
  PerformanceAnalytics::chart.Correlation(histogram = "TRUE", method = "pearson") 
Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Correlations for anthropometric parameters assessed using the InBody; height = body height [cm], mass = body mass [kg], fat = body fat mass [kg], fat_p = body fat percent [%], muscle = body muscle mass [kg], muscle_p = body muscle mass percent [%], w_mf = sum of muscle mass and fat mass [kg], lean = body lean mass

8.4.2 Model selection

Code
dat_5 <- data_5 |> 
  subset(Test %in% c("Run", "Star_r", "S20_r", "SLJ", "BPT")) |> 
  mutate(m=mass-40.96,
         m2=m*m,
         h=height-143.51,
         h2=h*h,
         Test=factor(Test, levels = c("Run", "Star_r", "S20_r", "SLJ", "BPT"))) |> 
  select(Child, a1, Test, zScore, m, m2, h, h2)

contrasts(dat_5$Test)   <- MASS::contr.sdif(5)
m1     <- lmer(zScore ~ 0 + a1 + (1 + a1 | Child), data = dat_5, REML = FALSE, control = lmerControl(calc.derivs = FALSE))
m1_0   <- update(m1, . ~ + Test +         .)
m1_m   <- update(m1, . ~ + Test/(    m) + .)
m1_h   <- update(m1, . ~ + Test/(h    ) + .)
m1_hm  <- update(m1, . ~ + Test/(h + m) + .)

LRT 1 of fixed effects

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m1_0

10

4,233.194

4,287.987

-2,106.597

4,213.194

m1_m

15

3,644.544

3,726.734

-1,807.272

3,614.544

598.650

5

0

***

m1_hm

20

3,627.413

3,736.999

-1,793.706

3,587.413

27.131

5

0

***

m1_0

10

4,233.194

4,287.987

-2,106.597

4,213.194

m1_h

15

3,938.921

4,021.110

-1,954.460

3,908.921

304.274

5

0

***

m1_hm

20

3,627.413

3,736.999

-1,793.706

3,587.413

321.508

5

0

***

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

Including body mass and height into the model, nested within Test, improve the fit.

Code
m2_h2    <- update(m1, . ~ + Test/(m + h      + h2)  + .)
m2_m2    <- update(m1, . ~ + Test/(m + h + m2     )  + .)
m2_h2m2  <- update(m1, . ~ + Test/(m + h + m2 + h2)  + .)

LRT 2 of fixed effects

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m1_hm

20

3,627.413

3,736.999

-1,793.706

3,587.413

m2_h2

25

3,629.874

3,766.856

-1,789.937

3,579.874

7.539

5

0.184

m2_h2m2

30

3,621.639

3,786.018

-1,780.819

3,561.639

18.235

5

0.003

**

m1_hm

20

3,627.413

3,736.999

-1,793.706

3,587.413

m2_m2

25

3,621.002

3,757.984

-1,785.501

3,571.002

16.411

5

0.006

**

m2_h2m2

30

3,621.639

3,786.018

-1,780.819

3,561.639

9.363

5

0.095

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRT revealed only significant quadratic effects for body mass improves models fit.

m3_hm1  <- update(m1, . ~ + Test/(h * m +     m2) + .)
m3_hm2  <- update(m1, . ~ + Test/(h * m + h * m2) + .)
Warning: Some predictor variables are on very different scales: consider
rescaling

LRT 3 of fixed effects

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m2_m2

25

3,621.002

3,757.984

-1,785.501

3,571.002

m3_hm1

30

3,615.165

3,779.544

-1,777.582

3,555.165

15.837

5

0.007

**

m3_hm2

35

3,621.845

3,813.620

-1,775.922

3,551.845

3.320

5

0.651

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

Second-order interactions showed significant improvements in models fitted for interactions of body size with linear but not quadratic trends in body mass. Accordingly, m3_hm1 was reported in Section 4.2.

8.4.3 Means and standard deviations of model variables

Means and standard deviation of the model variables

Time

t0

t1

t2

t3

t6

t8

gender [girl/boy]

35/41

31/39

28/40

28/35

18/26

16/21

body height [cm]

138.6±7.8

140.9±7.8

142.1±7.8

144.6±8.5

148±7.7

154.1±8

body mass [kg]

36.4±12.3

38.4±12.7

39.5±12.8

42±14.2

44.7±13.4

51.9±18.7

age [years]

9.2±0.5

9.4±0.5

9.6±0.5

10.1±0.5

10.7±0.5

11.6±0.5

20 m sprint [m/s]

4.1±0.4

4.1±0.4

4.1±0.4

4.1±0.4

4.2±0.4

4.3±0.4

standing long jump [cm]

107.6±18.7

108.2±19.3

109.8±19.8

111.7±20.4

114±21

123.8±20.9

star run [m/s]

1.8±0.2

1.8±0.2

1.8±0.2

1.9±0.2

2±0.2

2±0.2

6 min run [m]

858.6±125.5

877.9±133.9

846.4±139.4

868±136.3

864.2±146.2

843.9±177.4

ball push test [m]

3.6±0.7

3.7±0.7

3.6±0.6

3.8±0.7

4.1±0.7

4.8±0.8

8.5 Supplementary Material Chapter 5

Code
load(file="data/info.rda")
load(file="data/ages.rda")
load(file="data/emo.rda")

data_4 <- info |>
  left_join(ages) |>
  left_join(emo) |>
  mutate(across(where(is.character), as.factor),
         gender=factor(gender, levels = c("girl","boy")),
         a1=age-9.9,
         m1=m_mirwald+2.25,
         m2=m_moore+2.34,
         m1pc1=(scale(age)+scale(m_mirwald))/2,
         m1pc2=(scale(age)-scale(m_mirwald)),
         m2pc1=(scale(age)+scale(m_moore))/2,
         m2pc2=(scale(age)-scale(m_moore))) |> 
  select(Child, gender, Time, Test, zScore, Score, a1, m1, m2, m1pc1, m1pc2, m2pc1, m2pc2) |> 
  fill(a1:m2pc2)

cbPalette <- c( "#0072B2", "#D55E00", "#009E73", "#CC79A7",
                "#F0E442", "#56B4E9", "#999999", "#E69F00")

8.5.1 Correlation age, maturity, and their principal components

Code
data_4 |> 
  select(a1:m2pc2) |> 
  PerformanceAnalytics::chart.Correlation(histogram = "TRUE", method = "pearson") 
Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Warning in par(usr): argument 1 does not name a graphical parameter

Correlations for age-related parameters; a1 = age centered at 0 [years], m1 = maturity offset centered at 0 (Mirwald) [years], m2 = maturity offset centered at 0 (Moore) [years], m1pc1 = first principal component of age and maturity (Mirwald) [z-score], m1pc2 = second principal component of age and maturity (Mirwald) [z-score], m2pc1 = first principal component of age and maturity (Moore) [z-score], m2pc2 = second principal component of age and maturity (Moore) [z-score]

8.5.2 Model 1: Effect of maturity offset according to Mirwald, age, and gender on physical fitness

8.5.2.1 Model selection

Code
dat_41 <- data_4 |> 
  subset(Test %in% c("Run", "Star_r", "S20_r", "SLJ")) |>
  select(Child, Time, gender, a1, m1, m1pc1, m1pc2, Test, zScore) |> 
  mutate(Test=factor(Test, levels = c("Run", "Star_r", "S20_r", "SLJ"))) |> 
  na.omit()

contrasts(dat_41$Time)   <- MASS::contr.sdif(6)
contrasts(dat_41$Test)   <- MASS::contr.sdif(4)
contrasts(dat_41$gender) <- MASS::contr.sdif(2)
m1  <- lmer(zScore ~ 0 + (1 | Child), data = dat_41, REML = FALSE, control = lmerControl(calc.derivs = FALSE))
m2_all <- update(m1, . ~ . + Test/(m1pc1 + m1pc2 + gender))
m2_p1  <- update(m1, . ~ . + Test/(        m1pc2 + gender))
m2_p2  <- update(m1, . ~ . + Test/(m1pc1         + gender))
m2_ge  <- update(m1, . ~ . + Test/(m1pc1 + m1pc2         ))
Table 8.5: LRT 1 of fixed effects in Model 1

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m1

2

3,251.739

3,262.246

-1,623.870

3,247.739

m2_p1

14

3,093.607

3,167.155

-1,532.803

3,065.607

182.132

12

0

***

m2_all

18

3,005.397

3,099.959

-1,484.699

2,969.397

96.210

4

0

***

m1

2

3,251.739

3,262.246

-1,623.870

3,247.739

m2_p2

14

3,021.588

3,095.137

-1,496.794

2,993.588

254.151

12

0

***

m2_all

18

3,005.397

3,099.959

-1,484.699

2,969.397

24.191

4

0

***

m1

2

3,251.739

3,262.246

-1,623.870

3,247.739

m2_ge

14

3,019.143

3,092.691

-1,495.571

2,991.143

256.596

12

0

***

m2_all

18

3,005.397

3,099.959

-1,484.699

2,969.397

21.746

4

0

***

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRTs indicate that both principal components and gender improve the models fit.

m311 <- update(m1, . ~ . + Test/(gender/(m1pc1) + m1pc2))
m312 <- update(m1, . ~ . + Test/(gender/(m1pc2) + m1pc1))
m32  <- update(m1, . ~ . + Test/(gender/(m1pc1 + m1pc2)))
m33  <- update(m1, . ~ . + Test/(gender/(m1pc1 * m1pc2)))
Table 8.6: LRT 2 of fixed effects in Model 1

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m2_all

18

3,005.397

3,099.959

-1,484.699

2,969.397

m311

22

3,010.470

3,126.046

-1,483.235

2,966.470

2.927

4

0.570

m32

26

3,016.290

3,152.880

-1,482.145

2,964.290

2.180

4

0.703

m33

34

3,012.921

3,191.539

-1,472.460

2,944.921

19.369

8

0.013

*

m2_all

18

3,005.397

3,099.959

-1,484.699

2,969.397

m312

22

3,011.091

3,126.668

-1,483.546

2,967.091

2.306

4

0.680

m32

26

3,016.290

3,152.880

-1,482.145

2,964.290

2.801

4

0.592

m33

34

3,012.921

3,191.539

-1,472.460

2,944.921

19.369

8

0.013

*

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRTs reveal a significance third order interaction, however the model is very likely to be overparametrise according to AIC and BIC.

m3_p1 <- update(m2_all, . ~ . - (1 | Child) + (1 + m1pc1         | Child))
m3_p2 <- update(m2_all, . ~ . - (1 | Child) + (1         + m1pc2 | Child))
m3    <- update(m2_all, . ~ . - (1 | Child) + (1 + m1pc1 + m1pc2 | Child))
Table 8.7: LRT 3 of fixed effects in Model 1

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m2_all

18

3,005.397

3,099.959

-1,484.699

2,969.397

m3_p1

20

2,987.174

3,092.243

-1,473.587

2,947.174

22.223

2

0

***

m3

23

2,967.072

3,087.902

-1,460.536

2,921.072

26.101

3

0

***

m2_all

18

3,005.397

3,099.959

-1,484.699

2,969.397

m3_p2

20

2,990.027

3,095.096

-1,475.013

2,950.027

19.370

2

0

***

m3

23

2,967.072

3,087.902

-1,460.536

2,921.072

28.954

3

0

***

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

Both principal components entered into the random effect structure of Child did significantly improve the fit of the model. Accordingly, m3 will be reported in Section 5.3.

8.5.3 Model 2: Effect of maturity offset according to Moore, age, and gender on physical fitness

8.5.3.1 Model selection

Code
dat_42 <- data_4 |> 
  subset(Test %in% c("Run", "Star_r", "S20_r", "SLJ")) |>
  select(Child, gender, m2pc1, m2pc2, Test, zScore) |> 
  mutate(Test=factor(Test, levels = c("Run", "Star_r", "S20_r", "SLJ"))) |> 
  na.omit()

contrasts(dat_42$Test)   <- MASS::contr.sdif(4)
contrasts(dat_42$gender) <- MASS::contr.sdif(2)
m4     <- lmer(zScore ~ 0 + (1 | Child), data = dat_42, REML = FALSE, control = lmerControl(calc.derivs = FALSE))
m5_all <- update(m4, . ~ . + Test/(m2pc1 + m2pc2 + gender))
m5_p1  <- update(m4, . ~ . + Test/(        m2pc2 + gender))
m5_p2  <- update(m4, . ~ . + Test/(m2pc1         + gender))
m5_ge  <- update(m4, . ~ . + Test/(m2pc1 + m2pc2         ))
Table 8.8: LRT 1 of fixed effects in Model 2

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m4

2

3,251.739

3,262.246

-1,623.870

3,247.739

m5_p1

14

3,133.981

3,207.529

-1,552.990

3,105.981

141.759

12

0.000

***

m5_all

18

3,025.249

3,119.812

-1,494.625

2,989.249

116.731

4

0.000

***

m4

2

3,251.739

3,262.246

-1,623.870

3,247.739

m5_p2

14

3,029.002

3,102.551

-1,500.501

3,001.002

246.737

12

0.000

***

m5_all

18

3,025.249

3,119.812

-1,494.625

2,989.249

11.753

4

0.019

*

m4

2

3,251.739

3,262.246

-1,623.870

3,247.739

m5_ge

14

3,030.911

3,104.460

-1,501.456

3,002.911

244.828

12

0.000

***

m5_all

18

3,025.249

3,119.812

-1,494.625

2,989.249

13.662

4

0.008

**

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRTs indicate that both principal components and gender improve the models fit.

m511 <- update(m4, . ~ . + Test/(gender/(m2pc1) + m2pc2))
m512 <- update(m4, . ~ . + Test/(gender/(m2pc2) + m2pc1))
m52  <- update(m4, . ~ . + Test/(gender/(m2pc1 + m2pc2)))
m53  <- update(m4, . ~ . + Test/(gender/(m2pc1 * m2pc2)))
Table 8.9: LRT 2 of fixed effects in Model 2

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m5_all

18

3,025.249

3,119.812

-1,494.625

2,989.249

m511

22

3,031.705

3,147.282

-1,493.853

2,987.705

1.544

4

0.819

m52

26

3,036.331

3,172.921

-1,492.165

2,984.331

3.374

4

0.497

m53

34

3,032.803

3,211.421

-1,482.401

2,964.803

19.528

8

0.012

*

m5_all

18

3,025.249

3,119.812

-1,494.625

2,989.249

m512

22

3,030.231

3,145.807

-1,493.115

2,986.231

3.019

4

0.555

m52

26

3,036.331

3,172.921

-1,492.165

2,984.331

1.900

4

0.754

m53

34

3,032.803

3,211.421

-1,482.401

2,964.803

19.528

8

0.012

*

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

LRTs reveal a significance third order interaction, however the model is very likely to be overparametrise according to AIC and BIC.

m6_p1 <- update(m5_all, . ~ . - (1 | Child) + (1 + m2pc1         | Child))
m6_p2 <- update(m5_all, . ~ . - (1 | Child) + (1         + m2pc2 | Child))
m6    <- update(m5_all, . ~ . - (1 | Child) + (1 + m2pc1 + m2pc2 | Child))
Table 8.10: LRT 3 of fixed effects in Model 2

model

npar

AIC

BIC

logLik

deviance

Chisq

Df

p

sig

m5_all

18

3,025.249

3,119.812

-1,494.625

2,989.249

m6_p1

20

3,008.201

3,113.270

-1,484.100

2,968.201

21.049

2

0

***

m6

23

2,990.853

3,111.683

-1,472.427

2,944.853

23.348

3

0

***

m5_all

18

3,025.249

3,119.812

-1,494.625

2,989.249

m6_p2

20

3,007.803

3,112.872

-1,483.901

2,967.803

21.446

2

0

***

m6

23

2,990.853

3,111.683

-1,472.427

2,944.853

22.950

3

0

***

npar = number of parameters; AIC = Akaike information criterion; BIC = Bayesian information criterion; loglik; Chisp = chi square; DF = degrees of freedom

Both principal components entered into the random effect structure of Child did significantly improve the fit of the model. Accordingly, m6 will be reported in Section 5.4.

8.5.4 Means and standard deviations of model variables

Joining with `by = join_by(Child, Time)`
Joining with `by = join_by(Child, Time)`

Means and standard deviation of the model variables used in INT M1 physical fitness

Time

t0

t1

t2

t3

t6

t8

gender [girl/boy]

35/41

29/38

28/37

28/33

18/26

15/19

maturity offset (Mirwald) [years]

-2.9±0.8

-2.6±0.8

-2.5±0.8

-2.1±0.9

-1.7±0.9

-0.8±1

maturity offset (Moore) [years]

-2.9±0.6

-2.7±0.6

-2.6±0.6

-2.2±0.7

-1.7±0.8

-0.9±0.8

age [years]

9.2±0.5

9.4±0.5

9.6±0.5

10.1±0.6

10.7±0.5

11.6±0.5

20 m sprint [m/s]

4.1±0.4

4.1±0.4

4.1±0.4

4.1±0.4

4.2±0.4

4.3±0.4

standing long jump [cm]

107.6±18.7

108±19.6

109.8±20.1

111.9±20.7

114±21

123.6±21.3

star run [m/s]

1.8±0.2

1.8±0.2

1.8±0.2

1.9±0.2

2±0.2

2±0.3

6 min run [m]

858.6±125.5

878.8±134.7

846.4±139.4

868±136.3

864.2±146.2

843.9±177.4