Registered analysis plan (v1.2): Measurement error in longitudinal staging of cardiovascular-kidney-metabolic syndrome — CHARLS 2011–2020
Year: 2026
Type: preprint
Abstract: Registered analysis plan (v1.2): Measurement error in longitudinal staging of cardiovascular-kidney-metabolic (CKM) syndrome: sources, quantification, and correction. Evidence from three waves of physical measurements in CHARLS (2011-2020).Authors: Tianrui Cun (ORCID 0009-0007-0043-2590), Aidi Xu. Registered 12 September 2026.This is a registered analysis plan (v1.2), deposited before submission of the associated manuscript. It fixes the study sample, the staging algorithm, the statistical models, the variance estimators and the full list of sensitivity analyses. The analysis uses publicly available CHARLS data; data collection was complete before this plan was registered, so this is a registration of the analysis plan rather than a prospective preregistration. Deviations are listed in Section J and reported in full in the manuscript.Revision note (v1.0 to v1.1, disclosed in the manuscript): v1.0 specified model D (no covariates) as primary. After fitting D, ages within one observation pattern were found to differ by decades, and ignoring age absorbs real age-driven progression into the misclassification matrix. The primary model was therefore changed to model E = D + age effects, with D retained as a sensitivity analysis. This change followed the results of D and is flagged as post hoc in Sections D.2 and J.Funding: Joint Special Project of Local Universities, Department of Science and Technology of Yunnan Province, China [202101BA070001-192]. The funder had no role in study design, data collection, analysis, interpretation, writing, or the decision to submit. Competing interests: none declared. A. General informationStudy type. Secondary analysis of an observational cohort, combined with methodological development.Data source. Publicly released data of the China Health and Retirement Longitudinal Study (CHARLS), waves 2011, 2013, 2015, 2018 and 2020. Only the public release is used.Software. Python 3.13 with numpy, pandas and scipy. The estimator is a purpose written forward algorithm for a continuous-time multi-state model; no existing package supports interval-censored death together with a freely parameterised emission matrix. B. Research questionsPrimary question. In the three waves of CHARLS physical measurements (2011, 2013, 2015), how large is the misclassification of CKM stage when stage is assigned from one occasion of measurement, and how far does ignoring it distort estimates of progression rate, reversibility, and the mortality gradient across stages?Q1 (interval independence). If observed stage changes are driven mainly by measurement error, the ratio of the four-year to the two-year observed progression rate should be far below the value of about 2 expected under a Markov process.Q2 (reversibility). After correction, the intensity of true backward movement should be close to zero, with an upper bound far below the naive estimate.Q3 (mortality gradient). We quantify how far the nine-year mortality gradient across stages changes after correction, without specifying the direction in advance; exploratory work showed the direction is not obvious once age is in the model, because age predicts both progression and death.Status. These questions were examined in exploratory work on the same data before this plan was written, so the results are known to the authors. The plan is registered to fix the analysis and prevent further selective reporting, not to claim the authors had no prior contact with the data. Section F states this explicitly. C. Variable definitions (fixed, not to be changed after registration)C.1 Analysis sample. Participants in the 2011 wave with complete physical measurements (systolic and diastolic blood pressure, body mass index, waist circumference) for whom the v6 stage can be computed. Expected size about 13,000 to 13,500 participants; follow-up mid 2011 to mid 2020, up to nine years.C.2 CKM staging (v6; no blood biomarkers). Blood biomarkers are excluded from the staging algorithm. The reason, established in exploratory work and recorded here so the choice cannot be revisited: the 2011 and 2015 assays were done by different laboratories with different methods, and fasting glucose and HbA1c moved in opposite directions across waves (median change minus 6.9 mg/dL and plus 0.70 percentage points), so they are not comparable across waves. Physical measurements are stable across waves (ratio of standard deviations 0.96 to 1.04). Stages:S0, no risk: BMI < 24 and normal waist (women < 85 cm, men < 90 cm) and blood pressure < 120/80 mmHg and no antihypertensive medication and no self-reported chronic disease.S1, excess adipose: residual category, not S0, not S2, not S3.S2, metabolic and renal: self-reported hypertension, diabetes, dyslipidaemia or chronic kidney disease, or blood pressure at or above 130/80 mmHg, or taking antihypertensive medication.S3, clinical CVD: self-reported heart disease or stroke, cumulative; once entered, never left in later waves.S4, death: absorbing state.Key variables (CHARLS names). Height qi002, weight ql002, waist qm002; systolic qa003, qa007, qa011 and diastolic qa004, qa008, qa012, using the mean of three readings. Self-reported disease: da007_1_ to da007_9_ in 2011, zda007_* (ever-reported) in 2013 and 2015. Antihypertensive medication: da011s2 not missing and self-reported hypertension, the same rule in both waves. Death: the died field in Verbal_Autopsy.dta for 2013 and Sample_Infor.dta for 2015, 2018, 2020, accumulated across waves.Known data problems (verified; handling fixed). (1) The 2015 da007_* items are incremental and carry no valid values in the paired sample; zda007_* must be used. (2) Birth year in 2015 is valid for about 16% of records; it is filled from the 2011 birth year (ba002_1) by lookup. (3) Self-reported disease in 2013 is incomplete (19% of 2011 reporters do not report in 2013); 2013 CVD is therefore cumulative (2011 or 2013). (4) Identifier length differs across waves (11 versus 12 characters); every identifier is normalised as ID[:9] + "0" + ID[9:].C.3 Primary outputs. (1) Misclassification matrix E, entries P(observed stage = j given true stage = i), 4 by 4. (2) True transition intensities Q for S0 to S1, S1 to S2, S2 to S3, S0 to S2, and each state to death. (3) Mean sojourn time in each living state. (4) Nine-year probability of death from each baseline state. D. Statistical modelD.1 Primary model. A continuous-time Markov multi-state model with a misclassification matrix, equivalent to the ematrix setting of the R package msm, implemented in Python. The true state chain X(t) has intensity matrix Q, 5 by 5 with S4 absorbing, P(delta) = expm(Q delta). The observed stage o is generated through E, so P(o = j given X = i) = E[i, j]. Death is measured without error: E[4, 4] = 1. E is fully parameterised as a row-wise softmax over the 4 by 4 block (12 free parameters).Each occasion carries a likelihood vector b of length 5: b = E[., o] when a stage is recorded; b = (1, 1, 1, 1, 0) when only survival is known (waves 2018 and 2020, which have follow-up but no physical measurements); b = (0, 0, 0, 0, 1) when dead. The likelihood uses the standard forward algorithm with log-scale scaling: alpha_1 = pi . b_1, alpha_k = (alpha_{k-1}' P(dt_k)) . b_k, L_i = sum_x alpha_final(x), where . denotes the elementwise product. Death is interval censored: a participant enters S4 between the last wave at which they were known alive and the wave at which death is recorded; no midpoint approximation.D.2 Model comparison. Five models, compared by AIC and likelihood ratio tests:A: E = identity, 14 parameters, naive model representing current practice in the literature. C: adjacent-state confusion only, 20 parameters, structural sensitivity. D: E fully free, 26 parameters, sensitivity analysis and the primary model in v1.0. E: D plus age effects, 28 parameters, primary model from v1.1 onwards. F: E with time-varying age (age at interval start), 28 parameters, structural negative control.Age specification (fixed). All non-fatal transitions share beta_prog, all transitions to death share beta_death, adding two parameters: q_ij(age) = q_ij * exp[ beta_class * (age - 60) ], class in {non-fatal transitions, transitions to death}. Age is taken at baseline (2011) and entered into the aggregation key in five-year bands. The multiplier applies only to off-diagonal elements, after which diagonals are recomputed so each row sums to zero.Why age had to be added (post hoc, disclosed). Without age, real age-driven progression is absorbed into the misclassification matrix and true progression is understated: likelihood ratio 1264.8 on 2 df (p about 2.2e-275), change in AIC minus 1260.8. Model F is a pre-specified negative control with the same number of parameters as E; it is worse by 110 AIC units, so the baseline-age specification stands and F is reported as a negative result.D.3 Standard errors and confidence intervals (three pre-specified routes). (1) Delta method: observed information from a numerical Hessian; positive quantities are log-transformed before the interval is built and back-transformed, so the lower bound stays positive. (2) Pattern-level bootstrap, equivalent to an individual-level bootstrap: unique observation patterns resampled multinomially; model D about 340 patterns, B = 300; model E, whose pattern key includes the age band, about 1,270 patterns, B = 400; point estimates used as warm starts. (3) Community cluster bootstrap, the reported route: resampling over the 435 communities given by the first seven characters of ID; model D B = 100, model E B = 150; implemented through a row-by-community count matrix (a community drawn m times gives row weight w = C m), so the data structure need not be rebuilt. Main tables report cluster bootstrap intervals; the other two routes appear in the appendix as robustness.Pre-specified decision rule for the main result (no numbers stated). The main result is judged by whether the confide
Source: Figshare
Authors: Tianrui Cun, Aidi Xu
Language: English
Subfield: Statistics and Probability
Field: Mathematics
Domain: Physical Sciences
Open Access status: green
OpenAlex ID: W7212371467
