The RI-CLPM dominates on every descriptive index and by thousands of AIC and BIC points in both the pooled and the multigroup fits: the covariation among the constructs is predominantly between persons.
Between-person (trait-level) associations
bp <-tbl("between_person_covariances.csv")k(bp, caption ="Random-intercept variances and covariances (unstandardised)")
Random-intercept variances and covariances (unstandardised)
Trait BMI relates negatively to trait activity, is essentially unrelated to the fruit-and-vegetable trait, and trait activity relates positively to the diet trait.
Within-person dynamics (pooled, time-invariant)
k(tbl("riclpm_dynamics_coefficients_pooled.csv"),caption ="Autoregressive and cross-lagged coefficients")
Autoregressive and cross-lagged coefficients
block
path
est
se
ci.lower
ci.upper
pvalue
sig
autoregressive
BMI -> BMI
0.511
0.019
0.473
0.549
0.000
***
autoregressive
FV -> FV
0.125
0.011
0.104
0.146
0.000
***
autoregressive
PA -> PA
0.281
0.026
0.230
0.332
0.000
***
cross-lagged
BMI -> FV
-0.003
0.004
-0.010
0.004
0.402
cross-lagged
BMI -> PA
-0.070
0.016
-0.102
-0.038
0.000
***
cross-lagged
FV -> BMI
-0.060
0.019
-0.098
-0.022
0.002
**
cross-lagged
FV -> PA
0.004
0.038
-0.069
0.078
0.913
cross-lagged
PA -> BMI
-0.017
0.005
-0.026
-0.007
0.001
***
cross-lagged
PA -> FV
0.004
0.002
0.000
0.008
0.067
.
Carry-over is moderate and weakest for diet; among the cross-lags, the BMI-PA pair is reciprocal, with both paths negative and small.
Socioeconomic moderation
k(tbl("focal_covariance_by_ses.csv"),caption ="Standardised trait BMI-PA covariance by stratum")
Standardised trait BMI-PA covariance by stratum
group
est.std
se
ci.lower
ci.upper
pvalue
SES
1
-0.120
0.021
-0.161
-0.080
0
ses1
2
-0.129
0.030
-0.188
-0.069
0
ses2
3
-0.113
0.023
-0.158
-0.067
0
ses3
k(tbl("focal_covariance_boot.csv"),caption ="Delta-method and bootstrap percentile intervals (R = 1,000)")
Delta-method and bootstrap percentile intervals (R = 1,000)
SES
est.std
ci.lower
ci.upper
boot.lower
boot.upper
n_boot
ses1
-0.120
-0.161
-0.080
-0.162
-0.079
1000
ses2
-0.129
-0.188
-0.069
-0.188
-0.066
1000
ses3
-0.113
-0.158
-0.067
-0.160
-0.065
1000
k(tbl("moderation_lrt.csv"), caption ="Free versus equal across strata (scaled LRT)")
Free versus equal across strata (scaled LRT)
model
Df
AIC
BIC
Chisq
Chisq diff
Df diff
Pr(>Chisq)
riBMIriPA free
387
317055.2
319506.9
1160.185
NA
NA
NA
riBMIriPA equal
389
317052.0
319490.4
1160.978
1.473
2
0.479
The focal covariance is negative and significant in every stratum, tightly clustered, and a model holding it equal is preferred: no socioeconomic moderation.
Supporting tests and per-group detail
k(tbl("time_invariance_lrt.csv"), caption ="Lagged paths free versus time-invariant")
k(tbl("riclpm_covariate_effects.csv"),caption ="Covariate effects on the random intercepts (standardised, fixed.x = TRUE)")
Covariate effects on the random intercepts (standardised, fixed.x = TRUE)
group
path
est.std
se
ci.lower
ci.upper
pvalue
sig
ses1
age -> riBMI
0.132
0.025
0.083
0.182
0.000
***
ses2
age -> riBMI
0.162
0.029
0.106
0.218
0.000
***
ses3
age -> riBMI
0.190
0.022
0.147
0.234
0.000
***
ses1
age -> riFV
0.333
0.025
0.284
0.381
0.000
***
ses2
age -> riFV
0.340
0.029
0.283
0.398
0.000
***
ses3
age -> riFV
0.274
0.024
0.227
0.320
0.000
***
ses1
age -> riPA
-0.087
0.032
-0.149
-0.025
0.006
**
ses2
age -> riPA
-0.110
0.040
-0.187
-0.032
0.006
**
ses3
age -> riPA
-0.047
0.029
-0.104
0.011
0.114
ses1
female -> riBMI
0.014
0.021
-0.027
0.056
0.499
ses2
female -> riBMI
-0.048
0.026
-0.100
0.004
0.068
.
ses3
female -> riBMI
-0.066
0.020
-0.106
-0.026
0.001
**
ses1
female -> riFV
0.268
0.022
0.224
0.311
0.000
***
ses2
female -> riFV
0.205
0.026
0.153
0.257
0.000
***
ses3
female -> riFV
0.249
0.021
0.208
0.290
0.000
***
ses1
female -> riPA
-0.068
0.026
-0.118
-0.018
0.008
**
ses2
female -> riPA
-0.147
0.032
-0.210
-0.085
0.000
***
ses3
female -> riPA
-0.117
0.024
-0.164
-0.071
0.000
***
ses1
med -> riBMI
0.251
0.025
0.203
0.299
0.000
***
ses2
med -> riBMI
0.138
0.030
0.079
0.196
0.000
***
ses3
med -> riBMI
0.153
0.024
0.106
0.199
0.000
***
ses1
med -> riFV
-0.020
0.026
-0.071
0.030
0.435
ses2
med -> riFV
0.019
0.029
-0.037
0.076
0.503
ses3
med -> riFV
-0.037
0.024
-0.083
0.010
0.120
ses1
med -> riPA
-0.095
0.027
-0.148
-0.042
0.000
***
ses2
med -> riPA
-0.005
0.037
-0.079
0.068
0.885
ses3
med -> riPA
-0.034
0.025
-0.082
0.015
0.174
Reproduction ladder
remotes::install_deps() from the compendium root (pulls lissr and weasel from GitHub per DESCRIPTION).
Obtain LISS access, then make acquire and make panel (vignettes 01 and 02), or place an existing liss_merged_long.sav in data/.
make sample for the standalone weasel audit; make analysis to render analysis/run_all.md, the chunk-by-chunk transcript ending in sessionInfo().
First render takes roughly two hours, dominated by the bootstrap; the seeded, fingerprint-guarded cache makes subsequent renders take minutes.
Two assertions run inside the pipeline on every render: the lissr equivalisation must equal the in-line formula, and the weasel scenario must select exactly the pipeline’s 5,676 respondents. A failed assertion stops the render rather than silently diverging.
sessionInfo()
R version 4.6.1 (2026-06-24)
Platform: aarch64-apple-darwin23
Running under: macOS Tahoe 26.5.1
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib; LAPACK version 3.12.1
locale:
[1] C.UTF-8/UTF-8/C.UTF-8/C/C.UTF-8/C.UTF-8
time zone: Europe/Amsterdam
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] htmlwidgets_1.6.4 compiler_4.6.1 fastmap_1.2.0 cli_3.6.6
[5] tools_4.6.1 htmltools_0.5.9 otel_0.2.0 yaml_2.3.12
[9] rmarkdown_2.31 knitr_1.51 jsonlite_2.0.0 xfun_0.57
[13] digest_0.6.39 rlang_1.2.0 evaluate_1.0.5