Learning Causal Normalizing Flows from Incomplete Data via Observed-Data Likelihood
Organizations: Department of Digital Medicine, University of Bern, Switzerland · Department of Diabetes, Endocrinology, Nutritional Medicine and Metabolism (UDEM), Inselspital, Bern University Hospital, University of Bern, Switzerland · Graduate School for Cellular and Biomedical Sciences (GCB), University of Bern, Switzerland · Diabetes Center Berne, Switzerland · Department of Clinical Chemistry, Inselspital, Bern University Hospital, University of Bern, Switzerland · Laboratory of Biometry, School of Agriculture, University of Thessaly, 384 46 Volos, Greece
Abstract
Causal Normalizing Flows (CNFs) enable causal inference from observational data given the causal structure, but they assume fully observed training data. We introduce MissCNF, which trains CNFs directly on incomplete data by maximizing the marginal likelihood of each partially observed sample, without discarding rows or constructing a completed dataset. Thanks to the causal structure encoded in the autoregressive factorization of CNFs, only missing variables in the ancestral closure of the observed set are integrated out, while the others are dropped without computation. We further establish the conditions under which MissCNF recovers the true joint distribution, and introduce causal-family positivity, where identification is possible even when no record in the dataset is ever complete. We compare MissCNF with two common strategies for handling missing data: listwise deletion and impute-then-fit pipelines. Across eight synthetic causal benchmarks, three missingness mechanisms, and missing rates up to , MissCNF achieves the lowest KL divergence in 23 of 24 nonlinear MCAR and MAR settings and in all nonlinear MNAR settings, as well as the lowest counterfactual error in 20 of 24 settings. On linear SCMs, where linear imputation performs best, MissCNF ranks in the top two in 22 of 24 settings.
Figures & tables
| Method | Chain | Fork | Collider | Triangle | Chain | Fork | Collider | Triangle |
|---|---|---|---|---|---|---|---|---|
| MICE | 0.058 0.046 | 0.030 0.010 | 0.110 0.080 | 0.014 0.010 | 0.931 0.279 | 19.116 0.236 | 0.251 0.146 | 16.060 0.589 |
| KPI | 0.685 0.220 | 0.997 0.158 | 0.731 0.349 | 0.650 0.268 | 0.687 0.301 | 1.574 0.136 | 0.785 0.399 | 5.596 0.778 |
| O-MIRACLE | 3.808 4.190 | 1.011 0.386 | 0.956 0.399 | 3.936 4.829 | 2.749 2.780 | 1.700 0.423 | 0.921 0.372 | 3.839 2.393 |
| MissCNF | 0.083 0.052 | 0.048 0.025 | 0.117 0.094 | 0.031 0.016 | 0.121 0.042 | 0.066 0.030 | 0.177 0.127 | 0.288 0.280 |
Appendix figures & tables19 assets
Supplementary material from the paper’s appendix.
Appendix
| Method | Chain | Fork | Collider | Triangle | Chain | Fork | Collider | Triangle |
|---|---|---|---|---|---|---|---|---|
| Full data (reference) | 0.005 0.003 | 0.010 0.004 | 0.003 0.002 | 0.007 0.005 | 0.002 0.002 | 0.013 0.003 | 0.004 0.001 | 0.015 0.007 |
| MCAR, 30% | ||||||||
| Listwise deletion | 0.011 0.005 | 0.018 0.006 | 0.003 0.003 | 0.013 0.007 | 0.005 0.004 | 0.029 0.004 | 0.004 0.003 | 0.029 0.014 |
| Mean | 13.642 0.373 | 5.750 0.176 | 0.158 0.011 | 19.878 0.948 | 0.963 0.041 | 4.051 0.132 | 0.078 0.013 | 3.793 0.071 |
| MissForest | 0.688 0.075 | 0.582 0.091 | 0.081 0.008 | 0.266 0.032 | 0.166 0.010 | 1.830 0.127 | 0.075 0.013 | 0.845 0.062 |
| MICE | 0.006 0.005 | 0.009 0.002 | 0.003 0.002 | 0.010 0.007 | 0.177 0.018 | 9.056 0.181 | 0.016 0.002 | 8.357 0.287 |
| Method | Chain | Fork | Collider | Triangle | Chain | Fork | Collider | Triangle |
|---|---|---|---|---|---|---|---|---|
| Full data (reference) | 0.054 0.014 | 0.033 0.004 | 0.011 0.001 | 0.350 0.074 | 0.027 0.008 | 0.063 0.014 | 0.018 0.006 | 0.145 0.048 |
| MCAR, 30% | ||||||||
| Listwise deletion | 0.089 0.035 | 0.035 0.006 | 0.013 0.002 | 0.333 0.052 | 0.040 0.011 | 0.083 0.030 | 0.019 0.007 | 0.219 0.091 |
| Mean | 1.778 0.043 | 0.299 0.010 | 0.067 0.004 | 3.809 0.311 | 0.599 0.016 | 0.772 0.048 | 0.027 0.006 | 1.354 0.189 |
| MissForest | 0.407 0.090 | 0.057 0.012 | 0.012 0.002 | 0.373 0.289 | 0.077 0.021 | 0.580 0.172 | 0.028 0.009 | 1.130 0.473 |
| MICE | 0.070 0.008 | 0.032 0.004 | 0.012 0.003 | 0.372 0.046 | 0.122 0.005 | 1.187 0.037 | 0.026 0.007 | 2.184 0.062 |
| Method | Chain | Fork | Collider | Triangle | Chain | Fork | Collider | Triangle |
|---|---|---|---|---|---|---|---|---|
| Full data (reference) | 0.067 0.012 | 0.022 0.002 | 0.016 0.001 | 0.268 0.037 | 0.036 0.002 | 0.101 0.011 | 0.034 0.002 | 0.198 0.037 |
| MCAR, 30% | ||||||||
| Listwise deletion | 0.091 0.017 | 0.028 0.003 | 0.019 0.001 | 0.287 0.036 | 0.049 0.006 | 0.137 0.013 | 0.038 0.005 | 0.287 0.053 |
| Mean | 1.372 0.037 | 0.218 0.011 | 0.066 0.003 | 3.381 0.242 | 0.500 0.011 | 1.082 0.021 | 0.071 0.008 | 1.825 0.064 |
| MissForest | 0.390 0.044 | 0.073 0.006 | 0.029 0.005 | 0.456 0.202 | 0.121 0.014 | 0.971 0.086 | 0.050 0.009 | 1.381 0.307 |
| MICE | 0.075 0.010 | 0.022 0.001 | 0.018 0.003 | 0.283 0.027 | 0.140 0.004 | 1.526 0.038 | 0.063 0.010 | 2.178 0.042 |
| Task | Setting | MissCNF | MICE | O-MIRACLE | KPI | DiffPuter |
|---|---|---|---|---|---|---|
| Chain | Full pos. | 0.023 0.010 | 0.007 0.005 | 1.27 1.13 | 0.345 0.102 | 5.20 3.81 |
| Cov. hold | 0.068 0.023 | 0.007 0.005 | 2.70 0.113 | 0.338 0.026 | 14.4 0.438 | |
| Cov. violated | 0.385 0.116 | 0.005 0.004 | 439 277 | 1309 1082 | 1434 116 | |
| Chain | Full pos. | 0.023 0.026 | 0.610 0.213 | 0.759 0.284 | 0.290 0.129 | 1.30 0.688 |
| Cov. hold | 0.024 0.014 | 0.296 0.021 | 1.63 0.381 | 0.345 0.047 | 4.64 4.71 | |
| Cov. violated | 0.034 0.017 | 0.703 0.042 | 15.9 0.530 | 14.0 2.70 | 19.0 1.61 |
| Task | Setting | MissCNF | MICE | O-MIRACLE | KPI | DiffPuter |
|---|---|---|---|---|---|---|
| Chain | Full pos. | 0.078 0.035 | 0.072 0.021 | 0.083 0.029 | 0.102 0.036 | 0.504 0.234 |
| Cov. hold | 0.117 0.055 | 0.057 0.030 | 0.111 0.044 | 0.148 0.065 | 1.44 0.196 | |
| Cov. violated | 0.157 0.057 | 0.064 0.026 | 2.01 0.096 | 29.1 43.7 | 3.51 0.248 | |
| Chain | Full pos. | 0.041 0.011 | 0.069 0.007 | 0.034 0.006 | 0.134 0.019 | 0.165 0.197 |
| Cov. hold | 0.041 0.011 | 0.062 0.013 | 0.067 0.014 | 0.079 0.005 | 0.537 0.017 | |
| Cov. violated | 0.042 0.018 | 0.176 0.017 | 0.470 0.021 | 0.468 0.020 | 0.985 0.028 |
| Task | Setting | MissCNF | MICE | O-MIRACLE | KPI | DiffPuter |
|---|---|---|---|---|---|---|
| Chain | Full pos. | 0.104 0.006 | 0.075 0.007 | 0.264 0.058 | 0.166 0.028 | 0.569 0.129 |
| Cov. hold | 0.133 0.029 | 0.068 0.010 | 0.472 0.009 | 0.277 0.014 | 1.40 0.071 | |
| Cov. violated | 0.200 0.030 | 0.076 0.011 | 5.69 1.62 | 33.4 18.8 | 92.3 71.5 | |
| Chain | Full pos. | 0.057 0.004 | 0.207 0.017 | 0.163 0.033 | 0.163 0.008 | 0.267 0.129 |
| Cov. hold | 0.057 0.010 | 0.204 0.016 | 0.258 0.012 | 0.159 0.012 | 0.707 0.086 | |
| Cov. violated | 0.058 0.011 | 0.296 0.033 | 0.965 0.034 | 0.813 0.034 | 1.52 0.135 |
| Method | Chain | Fork | Collider | Triangle | Chain | Fork | Collider | Triangle |
|---|---|---|---|---|---|---|---|---|
| MNAR (self-masking), 30% | ||||||||
| MICE | 0.020 0.012 | 0.013 0.004 | 0.035 0.026 | 0.008 0.006 | 0.446 0.204 | 9.367 0.115 | 0.087 0.050 | 9.131 0.391 |
| KPI | 0.132 0.026 | 0.383 0.031 | 0.131 0.056 | 0.121 0.024 | 0.261 0.149 | 0.678 0.047 | 0.149 0.070 | 2.951 0.308 |
| O-MIRACLE | 0.210 0.030 | 0.204 0.063 | 0.152 0.062 | 0.168 0.025 | 0.312 0.167 | 0.426 0.070 | 0.171 0.075 | 0.921 0.212 |
| MissCNF (ours) | 0.028 0.014 | 0.021 0.014 | 0.037 0.025 | 0.014 0.008 | 0.054 0.033 | 0.022 0.005 | 0.060 0.040 | 0.078 0.043 |
| MNAR (self-masking), 60% | ||||||||
| Method | Chain | Fork | Collider | Triangle | Chain | Fork | Collider | Triangle |
|---|---|---|---|---|---|---|---|---|
| MNAR (self-masking), 30% | ||||||||
| MICE | 0.086 0.033 | 0.034 0.003 | 0.014 0.006 | 0.312 0.076 | 0.077 0.040 | 1.385 0.032 | 0.029 0.006 | 1.698 0.101 |
| KPI | 0.100 0.045 | 0.046 0.005 | 0.015 0.005 | 0.872 0.058 | 0.113 0.014 | 0.192 0.081 | 0.024 0.008 | 1.304 0.274 |
| O-MIRACLE | 0.083 0.045 | 0.035 0.004 | 0.014 0.006 | 0.349 0.097 | 0.054 0.024 | 0.163 0.062 | 0.025 0.004 | 0.477 0.116 |
| MissCNF (ours) | 0.086 0.037 | 0.035 0.004 | 0.015 0.006 | 0.359 0.117 | 0.049 0.015 | 0.074 0.032 | 0.025 0.012 | 0.216 0.092 |
| MNAR (self-masking), 60% | ||||||||
| Method | Chain | Fork | Collider | Triangle | Chain | Fork | Collider | Triangle |
|---|---|---|---|---|---|---|---|---|
| MNAR (self-masking), 30% | ||||||||
| MICE | 0.090 0.033 | 0.022 0.001 | 0.019 0.004 | 0.268 0.053 | 0.149 0.009 | 1.654 0.027 | 0.091 0.015 | 1.928 0.057 |
| KPI | 0.129 0.040 | 0.039 0.001 | 0.031 0.007 | 0.906 0.082 | 0.132 0.008 | 0.414 0.037 | 0.066 0.020 | 1.634 0.078 |
| O-MIRACLE | 0.146 0.048 | 0.029 0.004 | 0.025 0.004 | 0.330 0.056 | 0.104 0.019 | 0.325 0.031 | 0.053 0.011 | 0.920 0.190 |
| MissCNF (ours) | 0.101 0.034 | 0.025 0.001 | 0.023 0.003 | 0.328 0.096 | 0.059 0.003 | 0.113 0.013 | 0.045 0.009 | 0.317 0.086 |
| MNAR (self-masking), 60% | ||||||||
| Fork | Triangle | |||||||
|---|---|---|---|---|---|---|---|---|
| KL | RMSE | RMSE | Time (s) | KL | RMSE | RMSE | Time (s) | |
| 32 | 0.054 0.015 | 0.078 0.026 | 0.170 0.012 | 272 3 | 0.086 0.028 | 0.248 0.118 | 0.433 0.102 | 272 6 |
| 64 | 0.041 0.015 | 0.085 0.028 | 0.157 0.006 | 273 4 | 0.066 0.023 | 0.190 0.086 | 0.343 0.073 | 270 4 |
| 128 | 0.036 0.015 | 0.083 0.024 | 0.154 0.006 | 284 4 | 0.055 0.022 | 0.251 0.093 | 0.374 0.116 | 284 4 |
| 256 | 0.032 0.012 | 0.076 0.024 | 0.149 0.005 | 328 4 | 0.056 0.023 | 0.193 0.053 | 0.322 0.019 | 329 4 |
| 512 | 0.032 0.011 | 0.083 0.024 | 0.147 0.004 | 416 4 | 0.052 0.032 | 0.190 0.043 | 0.325 0.055 | 426 13 |
| Method | |||||
|---|---|---|---|---|---|
| MCAR, 30% | |||||
| Listwise deletion | 0.006 0.002 | 0.006 0.001 | 0.008 0.002 | 0.008 0.003 | 0.008 0.001 |
| MICE | 0.004 0.001 | 0.029 0.004 | 0.151 0.013 | 0.312 0.021 | 0.345 0.021 |
| KPI | 0.118 0.012 | 0.128 0.014 | 0.146 0.014 | 0.140 0.014 | 0.137 0.016 |
| DiffPuter | 0.169 0.007 | 0.156 0.006 | 0.129 0.020 | 0.119 0.015 | 0.104 0.012 |
| O-MIRACLE | 0.082 0.004 | 0.084 0.006 | 0.095 0.011 | 0.097 0.011 | 0.099 0.008 |
| Method | |||||
|---|---|---|---|---|---|
| MCAR, 30% | |||||
| Listwise deletion | 0.027 0.006 | 0.027 0.008 | 0.025 0.011 | 0.022 0.009 | 0.023 0.006 |
| MICE | 0.021 0.006 | 0.020 0.003 | 0.030 0.007 | 0.041 0.006 | 0.048 0.007 |
| KPI | 0.086 0.016 | 0.083 0.011 | 0.064 0.006 | 0.038 0.008 | 0.029 0.008 |
| DiffPuter | 0.039 0.013 | 0.038 0.011 | 0.042 0.015 | 0.038 0.009 | 0.037 0.006 |
| O-MIRACLE | 0.021 0.005 | 0.020 0.005 | 0.019 0.005 | 0.018 0.005 | 0.019 0.003 |
| Method | |||||
|---|---|---|---|---|---|
| MCAR, 30% | |||||
| Listwise deletion | 0.024 0.002 | 0.026 0.002 | 0.027 0.004 | 0.027 0.004 | 0.026 0.003 |
| MICE | 0.020 0.003 | 0.041 0.001 | 0.085 0.002 | 0.119 0.002 | 0.124 0.002 |
| KPI | 0.085 0.009 | 0.083 0.005 | 0.083 0.002 | 0.080 0.003 | 0.077 0.006 |
| DiffPuter | 0.041 0.010 | 0.042 0.007 | 0.046 0.003 | 0.042 0.007 | 0.041 0.006 |
| O-MIRACLE | 0.023 0.001 | 0.029 0.002 | 0.038 0.003 | 0.033 0.002 | 0.034 0.006 |
| Method | |||||
|---|---|---|---|---|---|
| MCAR, 30% | |||||
| Listwise deletion | 0.004 0.004 | 0.007 0.003 | 0.009 0.002 | 0.010 0.001 | 0.008 0.002 |
| MICE | 0.003 0.003 | 0.029 0.004 | 0.168 0.010 | 0.349 0.014 | 0.398 0.016 |
| KPI | 0.055 0.010 | 0.056 0.012 | 0.059 0.010 | 0.061 0.007 | 0.065 0.010 |
| DiffPuter | 0.057 0.007 | 0.060 0.011 | 0.068 0.008 | 0.068 0.010 | 837.056 1871.559 |
| O-MIRACLE | 0.071 0.010 | 0.073 0.011 | 0.075 0.010 | 0.079 0.011 | 0.079 0.008 |
| Method | |||||
|---|---|---|---|---|---|
| MCAR, 30% | |||||
| Listwise deletion | 0.017 0.005 | 0.015 0.004 | 0.015 0.003 | 0.015 0.003 | 0.015 0.003 |
| MICE | 0.016 0.003 | 0.015 0.001 | 0.020 0.003 | 0.022 0.005 | 0.026 0.003 |
| KPI | 0.015 0.005 | 0.014 0.005 | 0.014 0.005 | 0.016 0.004 | 0.014 0.004 |
| DiffPuter | 0.017 0.005 | 0.015 0.006 | 0.015 0.006 | 0.020 0.009 | 0.531 1.153 |
| O-MIRACLE | 0.015 0.003 | 0.013 0.003 | 0.013 0.003 | 0.013 0.004 | 0.013 0.003 |
| Method | |||||
|---|---|---|---|---|---|
| MCAR, 30% | |||||
| Listwise deletion | 0.020 0.003 | 0.025 0.003 | 0.028 0.002 | 0.029 0.002 | 0.029 0.002 |
| MICE | 0.019 0.002 | 0.033 0.004 | 0.064 0.005 | 0.080 0.005 | 0.086 0.003 |
| KPI | 0.026 0.004 | 0.028 0.004 | 0.030 0.004 | 0.031 0.001 | 0.031 0.006 |
| DiffPuter | 0.021 0.003 | 0.024 0.001 | 0.028 0.004 | 0.031 0.003 | 0.422 0.873 |
| O-MIRACLE | 0.020 0.002 | 0.023 0.003 | 0.025 0.002 | 0.026 0.003 | 0.026 0.003 |