ALSPAC <- read.csv("C:/Users/talit/Downloads/ALSPAC_synthetic.csv")
head(ALSPAC)
##   id      ht7      wt7     bmi7     age7      ht9      wt9     bmi9     age9
## 1  1 133.2688 26.77400 15.07497 91.26048 148.2626 30.70560 13.96865 118.5224
## 2  2 122.9395 31.98942 21.16524 92.19332 131.6390 40.00140 23.08373 116.1542
## 3  3 132.2055 22.36105 12.79361 88.02311 141.0577 27.82185 13.98275 112.5793
## 4  4 120.4600 29.24484 20.15409 92.21599 126.3532 29.50246 18.47931 116.0690
## 5  5 127.3956 25.01687 15.41431 89.02093 138.7321 29.57684 15.36731 124.1381
## 6  6 122.3424 26.81841 17.91756 90.58871 132.7926 38.66814 21.92834 116.3177
##       ht11     wt11    bmi11    age11     ht13     wt13    bmi13    age13
## 1 159.3590 35.47761 13.97016 141.1936 173.6194 38.36489 12.72733 166.8914
## 2 142.3096 41.06012 20.27457 138.8089 147.3789 50.37287 23.19136 167.8719
## 3 147.5874 42.91340 19.70128 139.1601 153.7617 48.66504 20.58358 164.7766
## 4 139.2147 39.89743 20.58612 142.3554 148.4791 48.65641 22.07037 156.9655
## 5 146.0514 40.83537 19.14366 139.3690 155.3764 44.25652 18.33189 169.9085
## 6 143.7883 50.17723 24.26942 140.5763 155.6989 46.69301 19.26108 162.7481
##       ht15     wt15    bmi15    age15 female      bwt
## 1 187.0297 48.60699 13.89561 195.3380      0 3.363222
## 2 156.8359 47.68607 19.38655 182.6537      1 2.815674
## 3 161.9610 48.62184 18.53577 184.1534      0 3.082626
## 4 152.9110 51.54142 22.04341 181.3137      1 3.385579
## 5 160.9814 50.80638 19.60499 184.0245      1 3.735348
## 6 164.2268 58.91512 21.84433 191.4028      0 2.574727
library(psych)
## Warning: package 'psych' was built under R version 4.4.3
library(lavaan)
## Warning: package 'lavaan' was built under R version 4.4.3
## This is lavaan 0.6-20
## lavaan is FREE software! Please report any bugs.
## 
## Attaching package: 'lavaan'
## The following object is masked from 'package:psych':
## 
##     cor2cov
library(lcsm)
## Warning: package 'lcsm' was built under R version 4.4.3
## This is lcsm 0.3.2
## Please report any issues or ideas at:
## https://github.com/milanwiedemann/lcsm/issues
## 
View(describe(ALSPAC))
## -----------------------------------------
## Plot trajectory berat badan
## -----------------------------------------
# Semua anak
plot_trajectories(
  data     = ALSPAC,
  id_var   = "id",
  var_list = c("wt7", "wt9", "wt11", "wt13", "wt15"),
  xlab     = "Age in years (approx.)",
  ylab     = "Weight in kilograms",
  line_colour = "grey40"
)

# Boys only (biru)
plot_trajectories(
  data     = ALSPAC[ALSPAC$female == 0, ],
  id_var   = "id",
  var_list = c("wt7", "wt9", "wt11", "wt13", "wt15"),
  xlab     = "Age in years (approx.)",
  ylab     = "Weight in kilograms",
  line_colour = "blue"
)

# Girls only (merah)
plot_trajectories(
  data     = ALSPAC[ALSPAC$female == 1, ],
  id_var   = "id",
  var_list = c("wt7", "wt9", "wt11", "wt13", "wt15"),
  xlab     = "Age in years (approx.)",
  ylab     = "Weight in kilograms",
  line_colour = "red"
)

## -----------------------------------------
## Linear Growth Model (wt7–wt13, boys only)
## -----------------------------------------
Linear <- '
  # intercept dan slope dgn loading tetap
  i =~ 1*wt7 + 1*wt9 + 1*wt11 + 1*wt13
  s =~ 0*wt7 + 2*wt9 + 4*wt11 + 6*wt13
'

fitL <- growth(
  model = Linear,
  data  = ALSPAC[ALSPAC$female == 0, ]  # boys
)

summary(fitL, fit.measures = TRUE)
## lavaan 0.6-20 ended normally after 76 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         9
## 
##   Number of observations                           411
## 
## Model Test User Model:
##                                                       
##   Test statistic                               109.207
##   Degrees of freedom                                 5
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                              1180.451
##   Degrees of freedom                                 6
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.911
##   Tucker-Lewis Index (TLI)                       0.894
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -4826.204
##   Loglikelihood unrestricted model (H1)      -4771.601
##                                                       
##   Akaike (AIC)                                9670.409
##   Bayesian (BIC)                              9706.576
##   Sample-size adjusted Bayesian (SABIC)       9678.017
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.225
##   90 Percent confidence interval - lower         0.190
##   90 Percent confidence interval - upper         0.263
##   P-value H_0: RMSEA <= 0.050                    0.000
##   P-value H_0: RMSEA >= 0.080                    1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.062
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   i =~                                                
##     wt7               1.000                           
##     wt9               1.000                           
##     wt11              1.000                           
##     wt13              1.000                           
##   s =~                                                
##     wt7               0.000                           
##     wt9               2.000                           
##     wt11              4.000                           
##     wt13              6.000                           
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   i ~~                                                
##     s                -0.155    0.356   -0.434    0.664
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     i                26.583    0.229  116.155    0.000
##     s                 3.726    0.068   54.698    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .wt7               4.947    1.015    4.876    0.000
##    .wt9               6.999    0.666   10.513    0.000
##    .wt11              6.561    0.864    7.594    0.000
##    .wt13             14.908    1.976    7.545    0.000
##     i                17.590    1.628   10.802    0.000
##     s                 1.498    0.139   10.746    0.000
# residual correlations untuk cek misfit
residuals(fitL, type = "cor")
## $type
## [1] "cor.bollen"
## 
## $cov
##         wt7    wt9   wt11   wt13
## wt7   0.000                     
## wt9   0.034  0.000              
## wt11 -0.010 -0.002  0.000       
## wt13  0.008 -0.003  0.025  0.000
## 
## $mean
##    wt7    wt9   wt11   wt13 
## -0.092  0.121  0.070 -0.135
## -----------------------------------------
## Quadratic Growth Model (boys only)
## -----------------------------------------
Quadratic <- '
  i =~ 1*wt7 + 1*wt9 + 1*wt11 + 1*wt13
  s =~ 0*wt7 + 2*wt9 + 4*wt11 + 6*wt13
  q =~ 0*wt7 + 4*wt9 + 16*wt11 + 36*wt13
'

fitQ <- growth(
  model = Quadratic,
  data  = ALSPAC[ALSPAC$female == 0, ]
)

summary(fitQ)
## lavaan 0.6-20 ended normally after 98 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        13
## 
##   Number of observations                           411
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 0.234
##   Degrees of freedom                                 1
##   P-value (Chi-square)                           0.628
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   i =~                                                
##     wt7               1.000                           
##     wt9               1.000                           
##     wt11              1.000                           
##     wt13              1.000                           
##   s =~                                                
##     wt7               0.000                           
##     wt9               2.000                           
##     wt11              4.000                           
##     wt13              6.000                           
##   q =~                                                
##     wt7               0.000                           
##     wt9               4.000                           
##     wt11             16.000                           
##     wt13             36.000                           
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   i ~~                                                
##     s                -1.085    1.535   -0.707    0.480
##     q                 0.090    0.188    0.477    0.634
##   s ~~                                                
##     q                -0.180    0.098   -1.838    0.066
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     i                26.146    0.231  112.947    0.000
##     s                 4.637    0.113   41.127    0.000
##     q                -0.173    0.017  -10.422    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .wt7               2.422    2.603    0.930    0.352
##    .wt9               5.739    1.042    5.510    0.000
##    .wt11              7.584    1.338    5.669    0.000
##    .wt13              3.544    4.946    0.716    0.474
##     i                19.650    2.937    6.691    0.000
##     s                 2.505    0.802    3.121    0.002
##     q                 0.039    0.018    2.125    0.034
## Quadratic with fixed q variance (QuadraticFixed)
QuadraticFixed <- paste(Quadratic, '
  q ~~ 0*q
  q ~~ 0*i
  q ~~ 0*s
')

fitQF <- growth(
  model = QuadraticFixed,
  data  = ALSPAC[ALSPAC$female == 0, ]
)

summary(fitQF, fit.measures = TRUE)
## lavaan 0.6-20 ended normally after 81 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        10
## 
##   Number of observations                           411
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 4.586
##   Degrees of freedom                                 4
##   P-value (Chi-square)                           0.333
## 
## Model Test Baseline Model:
## 
##   Test statistic                              1180.451
##   Degrees of freedom                                 6
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000
##   Tucker-Lewis Index (TLI)                       0.999
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -4773.894
##   Loglikelihood unrestricted model (H1)      -4771.601
##                                                       
##   Akaike (AIC)                                9567.788
##   Bayesian (BIC)                              9607.974
##   Sample-size adjusted Bayesian (SABIC)       9576.242
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.019
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.079
##   P-value H_0: RMSEA <= 0.050                    0.736
##   P-value H_0: RMSEA >= 0.080                    0.046
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.012
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   i =~                                                
##     wt7               1.000                           
##     wt9               1.000                           
##     wt11              1.000                           
##     wt13              1.000                           
##   s =~                                                
##     wt7               0.000                           
##     wt9               2.000                           
##     wt11              4.000                           
##     wt13              6.000                           
##   q =~                                                
##     wt7               0.000                           
##     wt9               4.000                           
##     wt11             16.000                           
##     wt13             36.000                           
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   i ~~                                                
##     q                 0.000                           
##   s ~~                                                
##     q                 0.000                           
##   i ~~                                                
##     s                -0.377    0.350   -1.079    0.280
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     i                26.144    0.232  112.857    0.000
##     s                 4.640    0.110   42.077    0.000
##     q                -0.173    0.016  -10.729    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     q                 0.000                           
##    .wt7               3.735    0.922    4.052    0.000
##    .wt9               6.586    0.622   10.588    0.000
##    .wt11              6.692    0.818    8.184    0.000
##    .wt13             10.696    1.700    6.290    0.000
##     i                18.425    1.618   11.391    0.000
##     s                 1.570    0.137   11.448    0.000
## Bandingkan Linear vs QuadraticFixed
anova(fitL, fitQF)
## 
## Chi-Squared Difference Test
## 
##       Df    AIC    BIC    Chisq Chisq diff   RMSEA Df diff Pr(>Chisq)    
## fitQF  4 9567.8 9608.0   4.5857                                          
## fitL   5 9670.4 9706.6 109.2068     104.62 0.50211       1  < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## -----------------------------------------
## Prediksi faktor i dan s
## -----------------------------------------
gf <- lavPredict(fitQF)  # matriks i, s, q utk tiap anak

# Histogram random intercept & slope
hist(gf[,"i"],
     main = "Random Intercept values",
     xlab = "Expected weight at age 7 (kg)")

hist(gf[,"s"],
     main = "Random Linear slope values",
     xlab = "Expected growth rate (kg/year)")

## -----------------------------------------
## Tambah kovariat sex (boys+girls)
## -----------------------------------------
QuadraticFixedSex <- paste(QuadraticFixed, '
  i ~ female
  s ~ female
')

fitQFS <- growth(
  model = QuadraticFixedSex,
  data  = ALSPAC
)

summary(fitQFS, standardized = TRUE)
## lavaan 0.6-20 ended normally after 85 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        12
## 
##   Number of observations                           800
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 3.154
##   Degrees of freedom                                 6
##   P-value (Chi-square)                           0.789
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   i =~                                                                  
##     wt7               1.000                               4.195    0.906
##     wt9               1.000                               4.195    0.765
##     wt11              1.000                               4.195    0.599
##     wt13              1.000                               4.195    0.465
##   s =~                                                                  
##     wt7               0.000                               0.000    0.000
##     wt9               2.000                               2.449    0.447
##     wt11              4.000                               4.899    0.699
##     wt13              6.000                               7.348    0.814
##   q =~                                                                  
##     wt7               0.000                               0.000    0.000
##     wt9               4.000                               0.000    0.000
##     wt11             16.000                               0.000    0.000
##     wt13             36.000                               0.000    0.000
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   i ~                                                                   
##     female            0.156    0.322    0.486    0.627    0.037    0.019
##   s ~                                                                   
##     female            0.271    0.095    2.854    0.004    0.221    0.110
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##  .i ~~                                                                  
##     q                 0.000                                 NaN      NaN
##  .s ~~                                                                  
##     q                 0.000                                 NaN      NaN
##  .i ~~                                                                  
##    .s                -0.008    0.238   -0.033    0.974   -0.002   -0.002
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .i                26.168    0.226  115.679    0.000    6.238    6.238
##    .s                 4.583    0.091   50.120    0.000    3.742    3.742
##     q                -0.163    0.011  -14.149    0.000     -Inf     -Inf
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     q                 0.000                                 NaN      NaN
##    .wt7               3.847    0.638    6.033    0.000    3.847    0.179
##    .wt9               6.450    0.439   14.696    0.000    6.450    0.215
##    .wt11              7.455    0.610   12.212    0.000    7.455    0.152
##    .wt13              9.886    1.194    8.280    0.000    9.886    0.121
##    .i                17.594    1.114   15.790    0.000    1.000    1.000
##    .s                 1.482    0.094   15.769    0.000    0.988    0.988