Preparing Stunting Modeling Data

Module 4: Covariate Prediction

Overview

Predicting child stunting requires combining anthropometric outcomes with demographic, socioeconomic, and health-related predictors. Survey datasets like SIVESNU contain hundreds of potential variables, but effective modeling requires a curated subset that balances predictive power with parsimony.

The challenge is threefold: (1) many variables have missing values that could bias results, (2) groups of related variables are highly correlated and redundant, and (3) not all variables contribute meaningful predictive information. This module implements a systematic, transparent selection pipeline that addresses each challenge while keeping every transformation traceable.

Before the merge, each SIVESNU source table is independently audited against an operational data dictionary that declares the universe of valid values for every variable. Out-of-domain values are recoded to NA so that all downstream stages operate on data whose semantic domain is fully under control.

By combining multiple SIVESNU 2018 tables — child anthropometrics, household characteristics, maternal factors, and the nutrient intake estimates from previous modules — we build a unified analytical dataset optimized for stunting prediction.

Target Population

Children aged 6-59 months with valid anthropometric measurements. Children under 6 months are excluded because exclusive breastfeeding is recommended during this period, making dietary intake patterns non-comparable to older children who consume complementary foods.

Data Integration Strategy

The base dataset — containing nutrient intake estimates, bioavailability adjustments, and FIES scores from previous pipeline steps — is merged with additional SIVESNU 2018 tables to create a comprehensive predictor set:

Table Contents Purpose
Child stunting, HAZ, vaccination, health controls, illness history Outcomes and child-level predictors
Household Assets, infrastructure, cooking fuel, altitude Socioeconomic predictors
Women Maternal education, age, physiological state Maternal predictors
Members Occupation classification Agricultural exposure indicators

Data Dictionary Audit

Each source table is audited independently against an operational data dictionary that declares, for every variable in the table, its type (factor, binary, numeric continuous, numeric integer, identifier, date, text) and its universe of valid values (factor levels for categorical variables, plausible numeric bounds for continuous and integer variables). Character columns are loaded with whitespace trimming applied uniformly, normalizing fixed-width string padding inherited from the original survey exports.

The audit applies a single rule: any value outside the declared universe is replaced with NA. Empty strings in character columns are normalized to NA before the comparison. The rule is applied uniformly regardless of whether out-of-domain values correspond to documented non-response codes, sentinel values, or artefacts from upstream transformations. Each table is audited against its own dictionary subset, so variables that share names across tables but use different encodings are validated against the universe corresponding to their actual source.

Audit Summary by Source Table

The audit returns four outcomes per variable:

  • Clean: no out-of-domain values, no recoding required.
  • Recoded: variable in the dictionary, at least one value fell outside the declared domain and was replaced with NA.
  • Passthrough: identifier, date, or text variable explicitly exempted from domain validation.
  • Not in dictionary: variable present in the data but absent from the dictionary, passed through unchanged and flagged for review.
Table 1: Audit outcome summary aggregated across the four SIVESNU tables
Variable Audit Summary by Source Table. Outcome distribution after audit against operational dictionary
Variable Audit Summary by Source Table
Outcome distribution after audit against operational dictionary
Table Clean Recoded Passthrough Not in dict. Values recoded
hogar 231 0 22 0 0
miembros 10 0 3 0 0
mujer 459 0 28 0 0
nino 430 3 14 0 9
Audit rule: values outside the declared domain (factor levels for categorical, [min, max] for numeric) are replaced with NA. Variables flagged ‘Not in dict.’ should be reviewed for inclusion.

Variables With Recoding Incidents

This table lists variables where the audit recoded at least one value, sorted by number of values replaced. Variables not in the dictionary appear in a separate block at the end and are highlighted for review.

Table 2: Per-variable audit incidents across the four SIVESNU tables
Per-Variable Audit Incidents. Variables with out-of-domain recodings and variables absent from the dictionary
Per-Variable Audit Incidents
Variables with out-of-domain recodings and variables absent from the dictionary
Table Variable Type N Total NA (pre) Recoded NA (post) % Recoded Status
nino edad_mes numeric_integer 902 3 2 5 0.22% recoded
nino intervalo numeric_continuous 902 491 1 492 0.11% recoded
nino pesoropanino numeric_continuous 902 883 1 884 0.11% recoded
Recoded: variable in the dictionary, the indicated count of values fell outside the declared domain and was replaced with NA.
Not in dictionary: variable present in the data but absent from the operational dictionary, passed through unchanged.

Merge Validation

Validate the merge process by examining record counts and match rates at each integration stage. The base dataset already contains the target population (children 6-59 months), so no additional age filtering is required.

Table 3: Merge process validation summary
Phase A: Data Integration Summary. Record counts at each merge stage (audited tables)
Phase A: Data Integration Summary
Record counts at each merge stage (audited tables)
Integration Stage N Records Change % of Base
Base dataset (from 04_04) 815 100.0%
Unique children in base 789 −26 96.8%
After household-level merges (hogar, mujer, ocupacion) 815 26 100.0%
After child-level merge with deduplication 789 −26 96.8%
With valid outcomes (HFA & ZLEN) 751 −38 92.1%
Note: Base dataset duplicates (same nboletahogar/conglomerado/edad_an/sexo) are resolved during child-level merge. Source tables are audited individually before this merge.

Variable Selection Pipeline

Survey datasets often contain hundreds of variables, many of which are redundant, have excessive missing values, or provide minimal predictive value. The selection pipeline narrows that pool to a parsimonious, informative predictor set.

The pipeline follows seven sequential steps:

Step Method Purpose
1 Missing filter (>35%) Exclude unreliable variables
2 Near-zero variance Remove constant/near-constant variables
3 Random Forest imputation Handle remaining missing values
4 Block PCA Reduce dimensionality of correlated groups
5 Correlation filter (r>0.85) Remove redundant predictors
6 Boruta selection Identify relevant predictors
7 VIF verification Confirm no multicollinearity (VIF < 5)
NoteProtected Variables

Two variable sets are protected throughout the selection process: assignment variables (required for biofortified maize targeting: department, urban/rural, occupation, FIES score) and nutritional variables (the intake estimates that will be modified in biofortification scenarios). These participate in selection for assessment but are always retained regardless of results.

Candidate Variables Summary

Table 4: Candidate variables for selection pipeline
Phase B: Candidate Variable Summary. Variable counts before and after exclusions
Phase B: Candidate Variable Summary
Variable counts before and after exclusions
Category Count
Final
Total columns in modeling dataset 1,261
Candidate variables for selection 1,140
Exclusions
Header variables (excluded) 7
Outcome variables (excluded) 2
Design exclusions (excluded) 79

Missing Values Analysis

Variables with excessive missing values (>35%) are excluded before imputation. This threshold balances information retention with imputation reliability — variables with higher missingness cannot be reliably imputed without introducing substantial uncertainty.

Table 5: Missing values analysis summary
Missing Values Analysis. Distribution of candidate variables by missing rate
Missing Values Analysis
Distribution of candidate variables by missing rate
Category Count
Total variables 1140
Complete (0% missing) 264
Low missing (0-10%) 268
Moderate missing (10-35%) 148
High missing (>35%) 460
Threshold: Variables with >35% missing will be excluded from selection pipeline

Near-Zero Variance Filter

Variables with minimal variation provide little discriminatory power for prediction. The near-zero variance filter identifies variables where one value dominates (frequency ratio > 19) or there are very few unique values relative to sample size (< 10%).

Table 6: Near-zero variance analysis summary
Near-Zero Variance Analysis. Distribution of variables by variance characteristics
Near-Zero Variance Analysis
Distribution of variables by variance characteristics
Category Count
Total variables analyzed 680
Zero variance 43
Near-zero variance 173
Adequate variance 464
Criteria: freqRatio > 19 and percentUnique < 10%
Table 7: Phase C filtering summary
Phase C: Variable Quality Filtering. Sequential application of missing value and variance filters
Phase C: Variable Quality Filtering
Sequential application of missing value and variance filters
Stage Count
Missing Values Filter
Initial candidate variables 1,140
Excluded by missing filter (>35%) 460
Remaining after missing filter 680
Near-Zero Variance Filter
Excluded by NZV filter 216
Final candidate variables for modeling 464
Thresholds: Missing >35% excluded; NZV per caret::nearZeroVar defaults

Missing Value Imputation

Variables that passed the quality filters may still have missing values (up to 35%). Random Forest-based multivariate imputation handles these gaps by predicting missing values from observed patterns across all variables, preserving complex relationships in the data.

Implementation uses the impute_rf_parallel() utility function, which wraps missRanger with a multi-threaded ranger engine and returns imputed values alongside out-of-bag error estimates (OOBE for continuous variables, PFC for categorical).

Table 8: Missing values summary before imputation
Pre-Imputation Missing Values Assessment. Candidate variables after Phase C filtering
Pre-Imputation Missing Values Assessment
Candidate variables after Phase C filtering
Metric Value
Total candidate variables 464
Variables with no missing 143
Variables with missing values 321
Total cells in matrix 348,464
Total missing cells 25,962
Overall missing rate 7.5%
Method: Random Forest-based multivariate imputation
Table 9: Random Forest imputation results
Random Forest Imputation Results. Out-of-bag error estimates
Random Forest Imputation Results
Out-of-bag error estimates
Metric Value Assessment
Variables imputed 464
Observations 751
OOBE 0.4667 Acceptable
PFC 0.1921 Acceptable
OOBE: aggregated out-of-bag error, continuous variables; acceptable below 0.50
PFC: Proportion Falsely Classified, categorical variables; acceptable below 0.20

Completion of Residual Missing Values

The Random Forest imputation engine can leave a residual NaN for a small subset of rows when the out-of-bag prediction collapses inside a terminal node with zero within-leaf variance. This affects continuous discrete-scale predictors.

Downstream analyses (block PCA, correlation filter, Boruta, VIF) operate on a complete predictor matrix, so residual missing values are completed with a variable-specific rule:

  • Numeric / integer variables: median of the observed values. The median preserves the support of discrete-scale ordinal variables, which the mean does not.
  • Factor variables: mode of the observed values.

Completing rather than discarding keeps every record in the modeling dataset. The count of values completed by each rule is reported in the table below.

Table 10: Residual missing value completion after Random Forest imputation
Residual Missing Value Completion. Values completed by variable-specific rule after RF imputation
Residual Missing Value Completion
Values completed by variable-specific rule after RF imputation
Variable N Completed Completion Rule
— Residual NAs after completion — 0 Integrity check: passed
TipImputation Quality

The out-of-bag error estimates indicate acceptable imputation quality. Out-of-bag (OOB) error estimates are calculated from observations that were randomly excluded during tree construction within the Random Forest algorithm, providing an internal quality metric for imputed values without requiring a separate test set. Random Forest imputation preserves variable relationships better than simpler methods like mean/mode imputation, which is essential for accurate downstream modeling.

Table 11: Phase D imputation summary
Phase D: Imputation Summary. Random Forest-based missing value imputation
Phase D: Imputation Summary
Random Forest-based missing value imputation
Stage Value
Candidate variables entering imputation 464
Observations 751
Missing cells before imputation 25,962
Missing cells after imputation 0
Imputation method: impute_rf_parallel() (missRanger + ranger engine)

Block PCA: Dimensionality Reduction

Many SIVESNU variables capture related constructs — vaccination records, wealth indicators, health monitoring visits, and morbidity symptoms. These variable groups exhibit high internal correlation, which can destabilize regression models and obscure individual variable importance.

Block principal components analysis (PCA) transforms each conceptual group into orthogonal principal components, reducing dimensionality while preserving the majority of within-block variance. This approach yields interpretable composite scores (e.g., “vaccination coverage”, “household wealth”) rather than dozens of intercorrelated individual variables.

Table 12: PCA block definitions and variable counts
PCA Block Definitions. Variable groups for dimensionality reduction
PCA Block Definitions
Variable groups for dimensionality reduction
Block Description N Variables Sample Variables
vaccination Child vaccination profile 13 hepb_1, neumo_1, rota_2
wealth Household wealth indicators 25 material_paredes, material_techo, material_piso
child_controls Child health check-ups 13 control_temp_oido, control_carnet_antro, control_numero_peso_noreg
fortification Fortified food consumption 34 fortif_pdulce, fortif_pdulce_dias, fortif_pdulce_veces
chispitas Chispitas supplementation behavior 12 chispitas_vez, chispitas_no6mes_noservicios, chispitas_donde
illness Recent illness indicators 4 diarrea_sabe_vacuna, diarrea_tenido_2semanas, tos_tenido_2semanas
child_development Child development milestones 25 di_libros, di_juega_juguetes_cas, di_juega_juguetes_fab
dental_child Child dental health 14 dientes_limpia_vezdia, dientes_consulta_lab, dientes_consulta_clin
Note: Blocks with <3 variables (highlighted) will not undergo PCA
Table 13: Block PCA dimensionality reduction results
Block PCA Dimensionality Reduction. Variance preserved while reducing variable count
Block PCA Dimensionality Reduction
Variance preserved while reducing variable count
Block Description Original Variables Components Retained Variance Retained (%) Reduction (%)
vaccination Child vaccination profile 13 4 73.7 69
wealth Household wealth indicators 25 8 63.0 68
child_controls Child health check-ups 13 5 70.2 62
fortification Fortified food consumption 34 13 72.5 62
chispitas Chispitas supplementation behavior 12 4 52.8 67
illness Recent illness indicators 4 2 59.4 50
child_development Child development milestones 25 7 63.3 72
dental_child Child dental health 14 6 76.0 57
TOTAL 140 49 65
Method: Principal Component Analysis with Kaiser criterion (eigenvalue > 1)
Color coding: Green ≥70%, Orange 60-70%, Red <60% variance retained
Grid of small scree plots, one panel per variable block, each with component number on the x-axis and eigenvalue on the y-axis. A line connects the points, which descend from left to right, and a dashed horizontal line marks the Kaiser cutoff at an eigenvalue of one. Points above the cutoff are highlighted as retained components and points below are greyed out, showing that only the first few components in each block are kept for dimensionality reduction.
Figure 1: Scree plots showing eigenvalues and component retention by block
Table 14: Dataset update after Block PCA
Phase E: Candidate Variable Transformation. Block PCA dimensionality reduction on candidate variables
Phase E: Candidate Variable Transformation
Block PCA dimensionality reduction on candidate variables
Metric Value
Candidate variables post-NZV 464
— Variables in PCA blocks (transformed) 140
— Variables not in blocks (kept as-is) 324
PCA components created 49
Candidate variables after PCA 373
Assignment variables preserved 7 of 7
Criterion: Kaiser rule (eigenvalue > 1) with minimum 1 component per block
TipDimensionality Reduction

Block PCA achieved substantial dimensionality reduction while preserving the majority of variance within each conceptual domain. The vaccination and wealth blocks show particularly high variance retention, indicating that these constructs are well-captured by their principal components.

Feature Selection

With dimensionality reduced, we now identify which variables — both individual predictors and PCA components — contribute meaningfully to stunting prediction. This three-step process removes redundancy and identifies the most informative predictors.

Correlation Filter

Highly correlated variables (r > 0.85) provide redundant information and can inflate coefficient standard errors. The correlation filter removes the variable with higher mean absolute correlation from each highly correlated pair.

Table 15: Correlation filter results
Correlation Filter Results. Removal of redundant variables (high pairwise correlation)
Correlation Filter Results
Removal of redundant variables (high pairwise correlation)
Metric Value
Variables entering correlation filter 373
Correlation threshold r > 0.85
Highly correlated variables identified 51
Protected assignment variables (kept) 3
Variables removed 48
Variables retained 325
Method: caret::findCorrelation removes variable with higher mean absolute correlation from each pair

Boruta Feature Selection

Boruta identifies variables with confirmed predictive importance by comparing each variable’s Random Forest importance against “shadow” variables (permuted copies of the original predictors). Variables consistently outperforming their shadows are classified as Confirmed; those consistently worse are Rejected.

The implementation runs with a multi-threaded ranger engine (via Boruta::getImpRfZ) for efficient computation. Feature selection uses HAZ (continuous z-score) rather than binary stunting status to preserve full distributional information — since stunting is simply HAZ dichotomized at -2, selecting on HAZ captures identical predictive relationships without information loss.

Table 16: Boruta feature selection results
Boruta Feature Selection Results. Variable importance assessment for HAZ prediction
Boruta Feature Selection Results
Variable importance assessment for HAZ prediction
Metric Value
Variables evaluated 325
Confirmed (relevant) 30
Tentative (borderline) 15
Rejected (not relevant) 280
Variables selected (Confirmed + Tentative) 45
Method: Boruta with ranger Random Forest engine (Z-score importance)
Horizontal box plots ranking selected predictors, with Random Forest importance on the x-axis and one variable per row on the y-axis. Each box summarises the spread of importance scores across Boruta iterations, shaded by decision as either Confirmed or Tentative. Boxes sit at positive importance values well above their permuted shadow features, identifying the variables that meaningfully predict height-for-age z-score, including child age, maternal characteristics, food security, and PCA components.
Figure 2: Variable importance from Boruta feature selection
ImportantVariables Selected

Boruta identified the most relevant predictors for the continuous HAZ outcome, including child age, maternal characteristics, food security indicators, and several PCA components capturing vaccination coverage, household wealth, and child health monitoring patterns.

VIF Verification

Variance Inflation Factor (VIF) assesses multicollinearity across the selected predictors. The correlation filter addressed pairwise correlations; VIF detects multicollinearity arising from linear combinations of several variables. For categorical variables the generalized VIF is adjusted by degrees of freedom, so every variable is reported on a comparable scale.

Variables above the high threshold of 10 are pruned iteratively: at each step the one with the lowest Boruta median importance among them is dropped and the VIF is recomputed on the remaining set. A construct captured through two separate survey items passes the pairwise correlation filter while still inflating the variance of both coefficients, and this step resolves those cases, keeping whichever member carries more signal on the outcome.

Table 17: VIF Summary
Phase F3: VIF Verification Summary. Multicollinearity check on Boruta-selected variables
Phase F3: VIF Verification Summary
Multicollinearity check on Boruta-selected variables
Metric Value
Variables evaluated 43.00
Acceptable (VIF ≤ 5) 43.00
Moderate (5 < VIF ≤ 10) 0.00
High (VIF > 10) 0.00
Maximum VIF 4.91
Mean VIF 2.03
Method: VIF with GVIF adjustment for categorical variables
Table 18: VIF Analysis by Variable
Variance Inflation Factor Analysis. Multicollinearity assessment for selected predictors
Variance Inflation Factor Analysis
Multicollinearity assessment for selected predictors
Variable VIF Status
grupoetnico_reportado_nino 4.91 Acceptable
idioma_hogar 4.60 Acceptable
basura_deshacer 4.49 Acceptable
pc_wealth_1 3.93 Acceptable
grupoetnico_reportado 3.89 Acceptable
idioma_materno_nino 3.50 Acceptable
grupoetnico_nino 3.41 Acceptable
recoleccion_basura 3.34 Acceptable
ult_nac_atendio 2.75 Acceptable
area 2.59 Acceptable
serv_san_tipo 2.58 Acceptable
ult_nac_lugar 2.57 Acceptable
televisor 2.31 Acceptable
edad_mes_nino 2.16 Acceptable
fuente_agua 1.95 Acceptable
alturaindmujer 1.81 Acceptable
grado_estudios_hogar 1.75 Acceptable
pc_wealth_2 1.72 Acceptable
pc_dental_child_1 1.70 Acceptable
niveleducativomadre 1.66 Acceptable
pc_wealth_3 1.65 Acceptable
departamento 1.61 Acceptable
hbn_ajustada 1.58 Acceptable
condon_oido 1.43 Acceptable
pc_child_controls_1 1.42 Acceptable
ult_nac_diosupl_med 1.39 Acceptable
pc_child_controls_5 1.38 Acceptable
lacteos_g3 1.35 Acceptable
transporte_carro 1.35 Acceptable
pc_fortification_1 1.27 Acceptable
af_bicicleta_dias 1.24 Acceptable
quisiera_cuantoshijos 1.21 Acceptable
ult_nac_pesomadre_oz 1.21 Acceptable
pc_dental_child_2 1.19 Acceptable
departamento_hogar 1.19 Acceptable
rbpadj 1.18 Acceptable
ult_nac_multivita 1.17 Acceptable
embarazo_plan_zika 1.16 Acceptable
pc_child_controls_2 1.16 Acceptable
pc_fortification_4 1.15 Acceptable
pc_child_development_7 1.12 Acceptable
imc_cat 1.11 Acceptable
pc_chispitas_4 1.08 Acceptable
Thresholds: VIF > 10 high multicollinearity; VIF > 5 moderate concern
Table 19: Variables removed by the VIF pruning step
Variables Removed by VIF Pruning. Lowest Boruta median importance among those above the threshold
Variables Removed by VIF Pruning
Lowest Boruta median importance among those above the threshold
Variable VIF at removal Boruta median importance
ruralurbano 171.53 4.73
gps_altitud 28.70 9.27
Removed in the order shown; the VIF is the value held at the iteration of removal
TipMulticollinearity Assessment

The pruning removed 2 variables: ruralurbano, gps_altitud. Each was the less important member of a pair measuring the same construct — the urban/rural classification, recorded in two separate survey items, and two altitude measurements.

The 43 variables that remain all sit at or below the acceptable threshold of 5, with a maximum of 4.91.

Final Output

The pipeline produces two key datasets and transformation objects required for downstream modeling and scenario simulation.

Table 20: Output files generated by this script
Phase G: Output Files Summary. Files generated for downstream analysis
Phase G: Output Files Summary
Files generated for downstream analysis
File Location Description Contents Purpose
04_05_sivesnu_stunting_modeling.parquet transfer/ Training dataset with selected predictors + PCA components 751 obs × 96 vars Model training (Phase 4)
04_05_sivesnu_pre_pca.parquet transfer/ Pre-PCA dataset for synthetic population generation 751 obs × 1261 vars Synthetic population generation
04_05_pca_transforms.rds models/ PCA transformation objects (prcomp) for each block 8 PCA block transforms Apply PCA to synthetic data via predict()
04_05_pca_block_definitions.rds models/ Block definitions (variable lists per block) 8 block definitions Identify variables per block
04_05_boruta_selected_variables.rds models/ Boruta-selected variables (Confirmed + Tentative) 45 variables Automated formula construction in 04_06 / 04_07
04_05_selected_variables.rds models/ Variable selection results at each pipeline stage 10 variable vectors Documentation and downstream reference
All files saved relative to project root via here()
Table 21: Complete variable selection pipeline summary
Variable Selection Pipeline Summary. Complete processing workflow from raw data to final predictors
Variable Selection Pipeline Summary
Complete processing workflow from raw data to final predictors
Phase Input Output Method
A1-A2. Data Loading Base dataset + SIVESNU tables 815 base observations read_parquet + clean_names + zap_*
A3. Dictionary Audit Loaded SIVESNU tables Out-of-domain values recoded to NA Domain-only validation per source table
A4. Data Merge Audited SIVESNU tables + base dataset 789 observations Fuzzy merge on household + age ± 1 + sex
B. Variable Classification Merged dataset 7 header + 2 outcome Pattern-based classification
C1. Missing Values Filter All candidate variables 680 variables retained > 35% NA threshold
C2. Near-Zero Variance Filter Post-missing variables 464 variables retained caret::nearZeroVar
D. Imputation (Random Forest) Post-NZV variables Complete data (no NAs) Random Forest (impute_rf_parallel, ntree=50, maxiter=5)
E. Block PCA Imputed variables 49 PCA components Kaiser criterion (eigenvalue > 1)
F1. Correlation Filter Post-PCA variables 325 variables retained caret::findCorrelation (r > 0.85)
F2. Boruta Selection Post-correlation variables 45 variables selected Boruta on ZLEN (maxRuns=150, ranger engine)
F3. VIF Verification Post-Boruta variables 43 variables verified car::vif (GVIF adjustment)
G. Final Output Final predictor set 88 final predictors Union: Boruta + assignment + nutritional

Summary

Pipeline Overview

This module transformed raw SIVESNU 2018 data into a modeling-ready dataset through a systematic, reproducible pipeline. Starting from multiple survey tables, we audited each source independently, integrated child, household, maternal, and occupation data, then applied rigorous variable selection to identify the most relevant predictors for stunting.

Key Results

Stage Output
Data integration 751 children with valid outcomes
Dictionary audit 3 variables with out-of-domain recodings; 9 values recoded to NA
Imputation OOB error OOBE = 0.4667; PFC = 0.1921
Boruta selection 45 variables retained for HAZ prediction
VIF verification 43 of 43 variables with acceptable multicollinearity

Methodological Notes

  1. Dictionary audit — Each SIVESNU source table is validated independently against an operational data dictionary before the merge. Out-of-domain values are recoded to NA so downstream stages operate on data whose semantic domain is fully under control.

  2. Missing value threshold (35%) — Variables exceeding this threshold cannot be reliably imputed without introducing substantial uncertainty. The threshold follows Van Buuren (2018) and Madley-Dowd et al. (2019) and balances information retention with imputation reliability.

  3. Boruta on HAZ — Feature selection used the continuous outcome rather than the binary classification to preserve full distributional information. Since stunting is HAZ dichotomized at -2 SD, selecting on HAZ captures identical predictive relationships.

  4. Block PCA — Conceptually related variables (vaccination, wealth, health monitoring) were reduced to principal components. This approach preserves construct-level interpretability while eliminating within-block multicollinearity.

  5. Protected variables — Assignment variables (department, urban/rural, occupation, FIES) and nutritional estimates are always retained regardless of selection results, as they are required for biofortification targeting and scenario simulation.

Application

The outputs from this module enable:

Back to top