ZiBFUS notebook

Kodi Arfer

Death

```(valcounts (\$ feeding reported_dead))
```
False 470

No mothers died.

```(wc feeding (valcounts
```
row_0 Death No deaths

12 mothers had at least one child die.

Depression

Karl le Roux: "The way we set up the survey, we didn't ask any of the EPDS questions if the child's mother wasn't there at the time or if the child was being looked after by someone else. So the data we have refers specifically to MATERNAL depression rather than caregiver depression. (In retrospect, it may have been useful to get the depression data on the caregiver, but we didn't want to muddy the waters too much.)"

I use 12 as the threshold score for depression.

```(setv x (.unstack (.apply (.groupby depress "months")
(λ (valcounts (\$ it class))))))
(setv x (.fillna x 0))
(setv (\$ x "prop.") (.round (wc x (/ \$Depressed (+ \$Okay \$Depressed))) 2))
(setv x (getl x : (qw Depressed Okay prop. N/A)))
(setv x.index.name "timepont")
(setv x (kwc .rename x :index (λ
(if (= it 0) "antenatal" (.format "{} months" it)))))
x
```
timepont Depressed Okay prop. N/A
antenatal 117 361 0.24 0
3 months 83 281 0.23 26
6 months 64 297 0.18 58
9 months 58 281 0.17 62
12 months 68 245 0.22 98
24 months 29 233 0.11 134

"Okay" here means "not depressed". Notice that 24% of mothers were depressed antenatally, and 23% were depressed at 3 months after birth.

```(setv x (.dropna (kwc .pivot (ss depress (.isin \$months [0 3]))
:index "s" :columns "months" :values "class")))
(setv x.columns (qw m0 m3))
(& (= \$m0 "Depressed") (= \$m3 "Depressed")))))
[
["Count of mothers missing at neither timepoints 0 nor 3" (len x)]
["Count depressed at both timepoints" sad-both]
["Proportion" (rd 2 (/ sad-both (len x)))]]
```
 Count of mothers missing at neither timepoints 0 nor 3 363 Count depressed at both timepoints 41 Proportion 0.11
```(setv x (kwc .pivot depress
:index "s" :columns "months" :values "class"))
(setv x.columns (amap (.format "m{}" it) x.columns))
(setv sad-never (sum (rmap [[_ row] (.iterrows x)]
(.all (= (.dropna row) "Okay")))))
(setv sad-always (sum (rmap [[_ row] (.iterrows x)]
(.all (= (.dropna row) "Depressed")))))
[
["Total count of mothers" (len x)]
["Count depressed at every non-missing timepoint" sad-always]
["Proportion" (rd 2 (/ sad-always (len x)))]
["Count not depressed at every non-missing timepoint" sad-never]
["Proportion" (rd 2 (/ sad-never (len x)))]]
```
 Total count of mothers 480 Count depressed at every non-missing timepoint 26 Proportion 0.05 Count not depressed at every non-missing timepoint 254 Proportion 0.53
```(setv x (.dropna (kwc .pivot depress
:index "s" :columns "months" :values "class")))
(setv s (set x.index))
(setv d (pd.concat (rmap [timepoint x.columns]
(setv v (getl x s timepoint))
(setv vd (get v (= v "Depressed")))
(.difference-update s vd.index)
(cbind
:months timepoint
:First_depressed (len vd)
:Prop. (rd 2 (/ cum-sad (len x)))))))
(.set-index d "months")
```
months First_depressed Cumulative_first_depressed Prop.
0 35 35 0.21
3 15 50 0.30
6 7 57 0.34
9 8 65 0.39
12 14 79 0.47
24 2 81 0.49

This table considers only mothers who were never missing for any of the timepoints. The last column is cumulative first depressed divided by total never-missing mothers.

Breastfeeding

I exclude all mothers from analysis for whom the death of a baby was reported. (No exclusions for mother deaths were necessary because no mothers died.)

Among mothers of twins, I consider only the primary baby.

I determine the mother's intervention condition (Mentor Mother or control) using the mother's answer to the question "Were you visited by a Mentor Mother during this pregnancy?"

I code the mothers as adults if they were 18 or older at the time of the antenatal interview, and as adolescents otherwise.

```(setv breastfed-counts (cbind
(pd.concat :axis 1 (rmap [grouper (qw condition agecat)]
(setv gb (.groupby feeding-g grouper))
(. (.apply gb (λ (valcounts (\$ it months_breastfed)))) T)))
:all (valcounts (\$ feeding-g months_breastfed))))
breastfed-counts
```
0 78 39 21 96 117
3 62 23 13 71 85
6 29 10 3 36 39
9 24 9 7 26 33
12 76 52 25 103 128
21 17 12 6 23 29
24 21 6 1 26 27

This table has the count of mothers in each condition and age group who breastfed their child up to the given number of months.

How I've handled missing data and the irregular timepoints here is complicated. The basic idea is to score each mother with a number of months such that she breastfed her baby continuously, but not necessarily exclusively, for at least that number of months after birth. If a mother ever said she was no longer breastfeeding, she wasn't credited for resuming breastfeeding at any later timepoints.

```(cut (.cumsum (cut breastfed-counts None None -1) :axis 0) None None -1)
```
0 307 151 76 381 458
3 229 112 55 285 341
6 167 89 42 214 256
9 138 79 39 178 217
12 114 70 32 152 184
21 38 18 7 49 56
24 21 6 1 26 27

This is a cumulative version of the previous table.

```(defn f [df]
(setv v (\$ df months_breastfed))
(pds-from-pairs (pairs
:Mean (.mean v)
:Median (.median v)
:SD (kwc .std v :ddof 0))))
(rd (cbind
(kwc pd.concat :axis 1 (rmap [grouper (qw condition agecat)]
(setv gb (.groupby feeding-g grouper))
(setv x (.apply gb f))
x.T))
:all (. (f feeding-g) T)))
```
Mean 7.651 8.146 7.500 7.890 7.814
Median 6.000 9.000 9.000 6.000 6.000
SD 7.244 7.054 6.628 7.295 7.186

This table summarizes the number of months breastfed (as presented in detail in the previous table).

```(kwc pd.concat :axis 1 (rmap [grouper (qw condition agecat)]
(pd.crosstab
(.map (.fillna (\$ feeding-g breastfed_some_at_6mon) 2)
{0 "No" 1 "Yes" 2 "missing"})
(getl feeding-g : grouper))))
```
No 140 63 34 168
Yes 151 77 41 187
missing 16 11 1 26

Here we see the number of subjects in each condition and age group who were still breastfeeding their babies at 6 months.

Exclusive breastfeeding and age

N.B. The significance tests below are with all missing values thrown out.

```(setv d (wc feeding-g (valcounts
(.map (.fillna \$breastfed_exclusively_at_3mon 2)
{0 "No" 1 "Yes" 2 "missing"})
\$agecat)))
d
```
No 58 216 0
Yes 13 84 1
missing 5 81 0
```["p from Fisher's exact test"
(second (scist.fisher-exact (.as-matrix (geti d [0 1] [0 1]))))]
```
 p from Fisher's exact test 0.100756
```(setv d (wc feeding-g (valcounts
(.map (.fillna \$breastfed_exclusively_at_6mon 2)
{0 "No" 1 "Yes" 2 "missing"})
\$agecat)))
d
```
```["p from Fisher's exact test"