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