Chapter 3 g-computation
Details about standarization
function in APPENDIX
.
3.1 Overall
Based on Hernan and Robins, 2020 Chapter 13
SEROPOSITIVE ~ work_out1 + edad + sex_male
f <-
library(boot)
# bootstrap
boot(data = dat,
results <-statistic = standardization,
treatment = work_out1, outcome = SEROPOSITIVE, formula1 = f, #parameters from function
R = 5)
# generating confidence intervals
c(sd(results$t[, 1]),
se <-sd(results$t[, 2]),
sd(results$t[, 3]),
sd(results$t[, 4]))
results$t0
mean <- mean - qnorm(0.975) * se
ll <- mean + qnorm(0.975) * se
ul <-
data.frame(cbind(type=c("Observed", "No Treatment", "Treatment", "Treatment - No Treatment"),
bootstrap <-%>%
mean, se, ll, ul)) mutate_at(.vars = c(2:5), ~as.numeric(as.character(.)))
kable(bootstrap, digits = 5)
type | mean | se | ll | ul |
---|---|---|---|---|
Observed | 0.48771 | 0.01375 | 0.46076 | 0.51466 |
No Treatment | 0.40645 | 0.01831 | 0.37057 | 0.44233 |
Treatment | 0.65532 | 0.01764 | 0.62075 | 0.68989 |
Treatment - No Treatment | 0.24887 | 0.02508 | 0.19971 | 0.29802 |
3.2 Rural
dat %>%
dat_rural <- filter(area == "1_rural")
# bootstrap
boot(data = dat_rural,
results.r <-statistic = standardization,
treatment = work_out1, outcome = SEROPOSITIVE, formula1 = f, #parameters from function
R = 5)
# generating confidence intervals
c(sd(results.r$t[, 1]),
se.r <-sd(results.r$t[, 2]),
sd(results.r$t[, 3]),
sd(results.r$t[, 4]))
results.r$t0
mean.r <- mean.r - qnorm(0.975) * se.r
ll.r <- mean.r + qnorm(0.975) * se.r
ul.r <-
data.frame(cbind(type=c("Observed", "No Treatment", "Treatment", "Treatment - No Treatment"),
bootstrap.r <-%>%
mean.r, se.r, ll.r, ul.r)) mutate_at(.vars = c(2:5), ~as.numeric(as.character(.)))
kable(bootstrap.r, digits = 5)
type | mean.r | se.r | ll.r | ul.r |
---|---|---|---|---|
Observed | 0.56617 | 0.02602 | 0.51517 | 0.61717 |
No Treatment | 0.44538 | 0.03918 | 0.36859 | 0.52216 |
Treatment | 0.69384 | 0.03279 | 0.62958 | 0.75811 |
Treatment - No Treatment | 0.24847 | 0.04710 | 0.15616 | 0.34078 |
3.3 Periurban
dat %>%
dat_urban <- filter(area == "0_periurban")
# bootstrap
boot(data = dat_urban,
results.u <-statistic = standardization,
treatment = work_out1, outcome = SEROPOSITIVE, formula1 = f, #parameters from function
R = 5)
# generating confidence intervals
c(sd(results.u$t[, 1]),
se.u <-sd(results.u$t[, 2]),
sd(results.u$t[, 3]),
sd(results.u$t[, 4]))
results.u$t0
mean.u <- mean.u - qnorm(0.975) * se.u
ll.u <- mean.u + qnorm(0.975) * se.u
ul.u <-
data.frame(cbind(type=c("Observed", "No Treatment", "Treatment", "Treatment - No Treatment"),
bootstrap.u <-%>%
mean.u, se.u, ll.u, ul.u)) mutate_at(.vars = c(2:5), ~as.numeric(as.character(.)))
kable(bootstrap.u, digits = 5)
type | mean.u | se.u | ll.u | ul.u |
---|---|---|---|---|
Observed | 0.38726 | 0.01906 | 0.34991 | 0.42461 |
No Treatment | 0.37848 | 0.01699 | 0.34518 | 0.41177 |
Treatment | 0.44880 | 0.06364 | 0.32408 | 0.57353 |
Treatment - No Treatment | 0.07033 | 0.06172 | -0.05064 | 0.19130 |
3.4 Summary g-computation
library(ggsci)
%>% mutate(model = "Overall") %>%
bootstrap rbind(bootstrap.r %>% set_names(colnames(bootstrap)) %>% mutate(model = "Rural")) %>%
rbind(bootstrap.u %>% set_names(colnames(bootstrap)) %>% mutate(model = "Peri-urban")) %>%
ggplot(aes(y = type, x = mean, col = type)) +
geom_pointrange(aes(xmin = ll, xmax = ul)) +
#geom_point() +
geom_vline(xintercept = 0, linetype = "dashed") +
scale_color_npg(limits = c("Observed", "Treatment", "No Treatment", "Treatment - No Treatment")) +
scale_y_discrete(limits = rev(c("Observed", "Treatment", "No Treatment", "Treatment - No Treatment"))) +
theme_bw() +
labs(y = "", x = "Standardized mean outcome", col = "") +
facet_grid(.~model) +
theme(legend.position = "top")