Average predictive comparisons for a logistic regression model: wells in Bangladesh. See Chapter 14 in Regression and Other Stories.
Load packages
library("rprojroot")
root<-has_file(".ROS-Examples-root")$make_fix_file()
library("rstanarm")
library("loo")
invlogit <- plogis
Load data
wells <- read.csv(root("Arsenic/data","wells.csv"))
head(wells)
switch arsenic dist dist100 assoc educ educ4
1 1 2.36 16.826 0.16826 0 0 0.00
2 1 0.71 47.322 0.47322 0 0 0.00
3 0 2.07 20.967 0.20967 0 10 2.50
4 1 1.15 21.486 0.21486 0 12 3.00
5 1 1.10 40.874 0.40874 1 14 3.50
6 1 3.90 69.518 0.69518 1 9 2.25
n <- nrow(wells)
Predict switching with distance, arsenic, and education
fit_7 <- stan_glm(switch ~ dist100 + arsenic + educ4,
family = binomial(link="logit"), data = wells)
print(fit_7, digits=2)
stan_glm
family: binomial [logit]
formula: switch ~ dist100 + arsenic + educ4
observations: 3020
predictors: 4
------
Median MAD_SD
(Intercept) -0.22 0.09
dist100 -0.90 0.10
arsenic 0.47 0.04
educ4 0.17 0.04
------
* For help interpreting the printed output see ?print.stanreg
* For info on the priors used see ?prior_summary.stanreg
Average predictive difference in probability of switching 1)
comparing households that are next to, or 100 meters from, the nearest safe well
b <- coef(fit_7)
hi <- 1
lo <- 0
delta <- invlogit (b[1] + b[2]*hi + b[3]*wells$arsenic + b[4]*wells$educ4) -
invlogit (b[1] + b[2]*lo + b[3]*wells$arsenic + b[4]*wells$educ4)
round(mean(delta), 2)
[1] -0.2
Average predictive difference in probability of switching 2)
comparing households with existing arsenic levels of 0.5 and 1.0
b <- coef(fit_7)
hi <- 1.0
lo <- 0.5
delta <- invlogit (b[1] + b[2]*wells$dist100 + b[3]*hi + b[4]*wells$educ4) -
invlogit (b[1] + b[2]*wells$dist100 + b[3]*lo + b[4]*wells$educ4)
round(mean(delta), 2)
[1] 0.06
Average predictive difference in probability of switching 3)
comparing householders with 0 and 12 years of education
b <- coef(fit_7)
hi <- 3
lo <- 0
delta <- invlogit (b[1]+b[2]*wells$dist100+b[3]*wells$arsenic+b[4]*hi) -
invlogit (b[1]+b[2]*wells$dist100+b[3]*wells$arsenic+b[4]*lo)
round(mean(delta), 2)
[1] 0.12
Predict switching with distance, arsenic, education and interactions
wells$c_dist100 <- wells$dist100 - mean(wells$dist100)
wells$c_arsenic <- wells$arsenic - mean(wells$arsenic)
wells$c_educ4 <- wells$educ4 - mean(wells$educ4)
fit_8 <- stan_glm(switch ~ c_dist100 + c_arsenic + c_educ4 +
c_dist100:c_educ4 + c_arsenic:c_educ4,
family = binomial(link="logit"), data = wells)
print(fit_8, digits=2)
stan_glm
family: binomial [logit]
formula: switch ~ c_dist100 + c_arsenic + c_educ4 + c_dist100:c_educ4 +
c_arsenic:c_educ4
observations: 3020
predictors: 6
------
Median MAD_SD
(Intercept) 0.35 0.04
c_dist100 -0.92 0.11
c_arsenic 0.49 0.04
c_educ4 0.19 0.04
c_dist100:c_educ4 0.34 0.10
c_arsenic:c_educ4 0.08 0.04
------
* For help interpreting the printed output see ?print.stanreg
* For info on the priors used see ?prior_summary.stanreg
Average predictive difference in probability of switching 4)
comparing households that are next to, or 100 meters from, the nearest safe well
b <- coef(fit_8)
hi <- 1
lo <- 0
delta <- invlogit(b[1] + b[2]*hi + b[3]*wells$c_arsenic +
b[4]*wells$c_educ4 + b[5]*hi*wells$c_educ4 +
b[6]*wells$c_arsenic*wells$c_educ4) -
invlogit(b[1] + b[2]*lo + b[3]*wells$c_arsenic +
b[4]*wells$c_educ4 + b[5]*lo*wells$c_educ4 +
b[6]*wells$c_arsenic*wells$c_educ4)
round(mean(delta), 2)
[1] -0.21
LS0tCnRpdGxlOiAiUmVncmVzc2lvbiBhbmQgT3RoZXIgU3RvcmllczogQXJzZW5pYyIKYXV0aG9yOiAiQW5kcmV3IEdlbG1hbiwgSmVubmlmZXIgSGlsbCwgQWtpIFZlaHRhcmkiCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSlgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRoZW1lOiByZWFkYWJsZQogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDIKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0KQXZlcmFnZSBwcmVkaWN0aXZlIGNvbXBhcmlzb25zIGZvciBhIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWw6CndlbGxzIGluIEJhbmdsYWRlc2guIFNlZSBDaGFwdGVyIDE0IGluIFJlZ3Jlc3Npb24gYW5kIE90aGVyIFN0b3JpZXMuCgotLS0tLS0tLS0tLS0tCgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgd2FybmluZz1GQUxTRSwgY29tbWVudD1OQSkKYGBgCgojIyMjIExvYWQgcGFja2FnZXMKCmBgYHtyIH0KbGlicmFyeSgicnByb2pyb290IikKcm9vdDwtaGFzX2ZpbGUoIi5ST1MtRXhhbXBsZXMtcm9vdCIpJG1ha2VfZml4X2ZpbGUoKQpsaWJyYXJ5KCJyc3RhbmFybSIpCmxpYnJhcnkoImxvbyIpCmludmxvZ2l0IDwtIHBsb2dpcwpgYGAKCiMjIyMgTG9hZCBkYXRhCgpgYGB7ciB9CndlbGxzIDwtIHJlYWQuY3N2KHJvb3QoIkFyc2VuaWMvZGF0YSIsIndlbGxzLmNzdiIpKQpoZWFkKHdlbGxzKQpuIDwtIG5yb3cod2VsbHMpCmBgYAoKIyMjIyBQcmVkaWN0IHN3aXRjaGluZyB3aXRoIGRpc3RhbmNlLCBhcnNlbmljLCBhbmQgZWR1Y2F0aW9uCgpgYGB7ciByZXN1bHRzPSdoaWRlJ30KZml0XzcgPC0gc3Rhbl9nbG0oc3dpdGNoIH4gZGlzdDEwMCArIGFyc2VuaWMgKyBlZHVjNCwKICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwobGluaz0ibG9naXQiKSwgZGF0YSA9IHdlbGxzKQpgYGAKCgoKYGBge3IgfQpwcmludChmaXRfNywgZGlnaXRzPTIpCmBgYAoKIyMjIyBBdmVyYWdlIHByZWRpY3RpdmUgZGlmZmVyZW5jZSBpbiBwcm9iYWJpbGl0eSBvZiBzd2l0Y2hpbmcgMSkKY29tcGFyaW5nIGhvdXNlaG9sZHMgdGhhdCBhcmUgbmV4dCB0bywgb3IgMTAwIG1ldGVycyBmcm9tLCB0aGUgbmVhcmVzdCBzYWZlIHdlbGwKCmBgYHtyIH0KYiA8LSBjb2VmKGZpdF83KQpoaSA8LSAxCmxvIDwtIDAKZGVsdGEgPC0gaW52bG9naXQgKGJbMV0gKyBiWzJdKmhpICsgYlszXSp3ZWxscyRhcnNlbmljICsgYls0XSp3ZWxscyRlZHVjNCkgLQogICAgICAgICBpbnZsb2dpdCAoYlsxXSArIGJbMl0qbG8gKyBiWzNdKndlbGxzJGFyc2VuaWMgKyBiWzRdKndlbGxzJGVkdWM0KQpyb3VuZChtZWFuKGRlbHRhKSwgMikKYGBgCgojIyMjIEF2ZXJhZ2UgcHJlZGljdGl2ZSBkaWZmZXJlbmNlIGluIHByb2JhYmlsaXR5IG9mIHN3aXRjaGluZyAyKQpjb21wYXJpbmcgaG91c2Vob2xkcyB3aXRoIGV4aXN0aW5nIGFyc2VuaWMgbGV2ZWxzIG9mIDAuNSBhbmQgMS4wCgpgYGB7ciB9CmIgPC0gY29lZihmaXRfNykKaGkgPC0gMS4wCmxvIDwtIDAuNQpkZWx0YSA8LSBpbnZsb2dpdCAoYlsxXSArIGJbMl0qd2VsbHMkZGlzdDEwMCArIGJbM10qaGkgKyBiWzRdKndlbGxzJGVkdWM0KSAtCiAgICAgICAgIGludmxvZ2l0IChiWzFdICsgYlsyXSp3ZWxscyRkaXN0MTAwICsgYlszXSpsbyArIGJbNF0qd2VsbHMkZWR1YzQpCnJvdW5kKG1lYW4oZGVsdGEpLCAyKQpgYGAKCiMjIyMgQXZlcmFnZSBwcmVkaWN0aXZlIGRpZmZlcmVuY2UgaW4gcHJvYmFiaWxpdHkgb2Ygc3dpdGNoaW5nIDMpCmNvbXBhcmluZyBob3VzZWhvbGRlcnMgd2l0aCAwIGFuZCAxMiB5ZWFycyBvZiBlZHVjYXRpb24KCmBgYHtyIH0KYiA8LSBjb2VmKGZpdF83KQpoaSA8LSAzCmxvIDwtIDAKZGVsdGEgPC0gaW52bG9naXQgKGJbMV0rYlsyXSp3ZWxscyRkaXN0MTAwK2JbM10qd2VsbHMkYXJzZW5pYytiWzRdKmhpKSAtCiAgICAgICAgIGludmxvZ2l0IChiWzFdK2JbMl0qd2VsbHMkZGlzdDEwMCtiWzNdKndlbGxzJGFyc2VuaWMrYls0XSpsbykKcm91bmQobWVhbihkZWx0YSksIDIpCmBgYAoKIyMjIyBQcmVkaWN0IHN3aXRjaGluZyB3aXRoIGRpc3RhbmNlLCBhcnNlbmljLCBlZHVjYXRpb24gYW5kIGludGVyYWN0aW9ucwoKYGBge3IgcmVzdWx0cz0naGlkZSd9CndlbGxzJGNfZGlzdDEwMCA8LSB3ZWxscyRkaXN0MTAwIC0gbWVhbih3ZWxscyRkaXN0MTAwKQp3ZWxscyRjX2Fyc2VuaWMgPC0gd2VsbHMkYXJzZW5pYyAtIG1lYW4od2VsbHMkYXJzZW5pYykKd2VsbHMkY19lZHVjNCA8LSB3ZWxscyRlZHVjNCAtIG1lYW4od2VsbHMkZWR1YzQpCmZpdF84IDwtIHN0YW5fZ2xtKHN3aXRjaCB+IGNfZGlzdDEwMCArIGNfYXJzZW5pYyArIGNfZWR1YzQgKwogICAgICAgICAgICAgICAgICAgICAgY19kaXN0MTAwOmNfZWR1YzQgKyBjX2Fyc2VuaWM6Y19lZHVjNCwKICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwobGluaz0ibG9naXQiKSwgZGF0YSA9IHdlbGxzKQpgYGAKCgoKYGBge3IgfQpwcmludChmaXRfOCwgZGlnaXRzPTIpCmBgYAoKIyMjIEF2ZXJhZ2UgcHJlZGljdGl2ZSBkaWZmZXJlbmNlIGluIHByb2JhYmlsaXR5IG9mIHN3aXRjaGluZyA0KQpjb21wYXJpbmcgaG91c2Vob2xkcyB0aGF0IGFyZSBuZXh0IHRvLCBvciAxMDAgbWV0ZXJzIGZyb20sIHRoZSBuZWFyZXN0IHNhZmUgd2VsbAoKYGBge3IgfQpiIDwtIGNvZWYoZml0XzgpCmhpIDwtIDEKbG8gPC0gMApkZWx0YSA8LSBpbnZsb2dpdChiWzFdICsgYlsyXSpoaSArIGJbM10qd2VsbHMkY19hcnNlbmljICsKICAgICAgICAgICAgICAgICAgYls0XSp3ZWxscyRjX2VkdWM0ICsgYls1XSpoaSp3ZWxscyRjX2VkdWM0ICsKICAgICAgICAgICAgICAgICAgYls2XSp3ZWxscyRjX2Fyc2VuaWMqd2VsbHMkY19lZHVjNCkgLQogICAgICAgICBpbnZsb2dpdChiWzFdICsgYlsyXSpsbyArIGJbM10qd2VsbHMkY19hcnNlbmljICsKICAgICAgICAgICAgICAgICAgYls0XSp3ZWxscyRjX2VkdWM0ICsgYls1XSpsbyp3ZWxscyRjX2VkdWM0ICsKICAgICAgICAgICAgICAgICAgYls2XSp3ZWxscyRjX2Fyc2VuaWMqd2VsbHMkY19lZHVjNCkKcm91bmQobWVhbihkZWx0YSksIDIpCmBgYAoK