from pathlib import Path
import sys
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import lapylace as lp
sys.path.append(str(Path.cwd().parent / 'python'))
from data import ros_pathChildCare
Code and figures for Infant Health and Development Program (IHDP) example. See Chapter 20 in Regression and Other Stories.
The intervention for low-birth-weight children is described by
- Brooks-Gunn, J., Liaw, F. R., and Klebanov, P. K. (1992). Effects of early intervention on cognitive function of low birth weight preterm infants. Journal of Pediatrics 120, 350–359.
- Hill, J. L., Brooks-Gunn, J., and Waldfogel, J. (2003). Sustained effects of high participation in an early intervention for low-birth-weight premature infants. Developmental Psychology 39, 730–744.
Source: Childcare/childcare.Rmd.
The Python version keeps data handling explicit and uses lapylace for Stan-backed generalized linear models, so the statistical model can be read from a formula rather than from handwritten Stan.
Data
cc2 = pd.read_csv(ros_path('Childcare/data', 'cc2.csv'))
cc2.head()| momage | momrace | b.marr | momed | work.dur | prenatal | cig | booze | sex | first | ... | state | state2 | state3 | neg.bw | no.prenatal | b.unmarr | bwT | dayskidT | pretermT | momageT | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 33 | 3 | 1 | 4 | 1 | 1 | 0 | 0 | 1 | 0 | ... | 1 | 0 | 1 | 941.0 | 0 | 0 | 3481.0 | 3.465736 | 324.0 | 1089 |
| 1 | 22 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | ... | 1 | 0 | 1 | 260.0 | 0 | 1 | 547600.0 | 1.609438 | 121.0 | 484 |
| 2 | 13 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | ... | 1 | 0 | 1 | 600.0 | 0 | 1 | 160000.0 | 2.302585 | 196.0 | 169 |
| 3 | 25 | 1 | 1 | 4 | 1 | 1 | 0 | 0 | 1 | 1 | ... | 1 | 0 | 1 | 950.0 | 0 | 0 | 2500.0 | 3.931826 | 256.0 | 625 |
| 4 | 19 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | ... | 1 | 0 | 1 | 230.0 | 0 | 1 | 592900.0 | 1.609438 | 169.0 | 361 |
5 rows × 64 columns
Models
The formulas below are the Python counterparts of the model formulas in the source example. Use lapylace for the Stan-backed Bayesian fit with the same formula interface.
# fit = lp.stan_glm('ppvtr_36~bw+treat', data=cc2, family=lp.gaussian(), chains=4, iter_sampling=1000)
# fit = lp.stan_glm('treat ~ unemp_rt', data=cc2, family=lp.bernoulli(), chains=4, iter_sampling=1000)Notes
- Source computation blocks represented: 55.
- Data paths are expressed through the shared
ros_path()helper. - Formula-based Bayesian regressions are routed through
lapylace.stan_glm(). - Plotting and simulation work uses NumPy, pandas, matplotlib idioms.