Nothing
## ---- SETTINGS-knitr, include=FALSE-------------------------------------------
stopifnot(require(knitr))
opts_chunk$set(
comment=NA,
message = FALSE,
warning = FALSE,
eval = identical(Sys.getenv("NOT_CRAN"), "true"),
dev = "png",
dpi = 150,
fig.asp = 0.618,
fig.width = 5,
out.width = "60%",
fig.align = "center"
)
## ---- SETTINGS-gg, include=TRUE-----------------------------------------------
library(ggplot2)
library(bayesplot)
theme_set(bayesplot::theme_default())
## ---- continuous-kidiq-mcmc,results="hide"------------------------------------
library(rstanarm)
data(kidiq)
post1 <- stan_glm(kid_score ~ mom_hs, data = kidiq,
family = gaussian(link = "identity"),
seed = 12345)
post2 <- update(post1, formula = . ~ mom_iq)
post3 <- update(post1, formula = . ~ mom_hs + mom_iq)
(post4 <- update(post1, formula = . ~ mom_hs * mom_iq))
## ---- continuous-kidiq-print, echo=FALSE--------------------------------------
print(post4)
## ---- continuous-kidiq-plot1a-------------------------------------------------
base <- ggplot(kidiq, aes(x = mom_hs, y = kid_score)) +
geom_point(size = 1, position = position_jitter(height = 0.05, width = 0.1)) +
scale_x_continuous(breaks = c(0,1), labels = c("No HS", "HS"))
base + geom_abline(intercept = coef(post1)[1], slope = coef(post1)[2],
color = "skyblue4", size = 1)
## ---- continuous-kidiq-plot1b-------------------------------------------------
draws <- as.data.frame(post1)
colnames(draws)[1:2] <- c("a", "b")
base +
geom_abline(data = draws, aes(intercept = a, slope = b),
color = "skyblue", size = 0.2, alpha = 0.25) +
geom_abline(intercept = coef(post1)[1], slope = coef(post1)[2],
color = "skyblue4", size = 1)
## ---- continuous-kidiq-plot2--------------------------------------------------
draws <- as.data.frame(as.matrix(post2))
colnames(draws)[1:2] <- c("a", "b")
ggplot(kidiq, aes(x = mom_iq, y = kid_score)) +
geom_point(size = 1) +
geom_abline(data = draws, aes(intercept = a, slope = b),
color = "skyblue", size = 0.2, alpha = 0.25) +
geom_abline(intercept = coef(post2)[1], slope = coef(post2)[2],
color = "skyblue4", size = 1)
## ---- continuous-kidiq-plot3--------------------------------------------------
reg0 <- function(x, ests) cbind(1, 0, x) %*% ests
reg1 <- function(x, ests) cbind(1, 1, x) %*% ests
args <- list(ests = coef(post3))
kidiq$clr <- factor(kidiq$mom_hs, labels = c("No HS", "HS"))
lgnd <- guide_legend(title = NULL)
base2 <- ggplot(kidiq, aes(x = mom_iq, fill = relevel(clr, ref = "HS"))) +
geom_point(aes(y = kid_score), shape = 21, stroke = .2, size = 1) +
guides(color = lgnd, fill = lgnd) +
theme(legend.position = "right")
base2 +
stat_function(fun = reg0, args = args, aes(color = "No HS"), size = 1.5) +
stat_function(fun = reg1, args = args, aes(color = "HS"), size = 1.5)
## ---- continuous-kidiq-plot4--------------------------------------------------
reg0 <- function(x, ests) cbind(1, 0, x, 0 * x) %*% ests
reg1 <- function(x, ests) cbind(1, 1, x, 1 * x) %*% ests
args <- list(ests = coef(post4))
base2 +
stat_function(fun = reg0, args = args, aes(color = "No HS"), size = 1.5) +
stat_function(fun = reg1, args = args, aes(color = "HS"), size = 1.5)
## ---- continuous-kidiq-loo----------------------------------------------------
# Compare them with loo
loo1 <- loo(post1, cores = 2)
loo2 <- loo(post2, cores = 2)
loo3 <- loo(post3, cores = 2)
loo4 <- loo(post4, cores = 2)
(comp <- loo_compare(loo1, loo2, loo3, loo4))
## ---- continuous-kidiq-loo-2--------------------------------------------------
loo_compare(loo1, loo4)
## ---- continuous-kidiq-loo-3--------------------------------------------------
loo_compare(loo3, loo4)
loo_compare(loo2, loo4)
## ---- continuous-kidiq-pp_check1----------------------------------------------
pp_check(post4, plotfun = "hist", nreps = 5)
## ---- continuous-kidiq-pp_check2----------------------------------------------
pp_check(post4, plotfun = "stat", stat = "mean")
## ---- continuous-kidiq-pp_check3----------------------------------------------
pp_check(post4, plotfun = "stat_2d", stat = c("mean", "sd"))
## ---- continuous-kidiq-posterior_predict--------------------------------------
IQ_SEQ <- seq(from = 75, to = 135, by = 5)
y_nohs <- posterior_predict(post4, newdata = data.frame(mom_hs = 0, mom_iq = IQ_SEQ))
y_hs <- posterior_predict(post4, newdata = data.frame(mom_hs = 1, mom_iq = IQ_SEQ))
dim(y_hs)
## ---- continuous-kidiq-plot-predict, fig.width=7------------------------------
par(mfrow = c(1:2), mar = c(5,4,2,1))
boxplot(y_hs, axes = FALSE, outline = FALSE, ylim = c(10,170),
xlab = "Mom IQ", ylab = "Predicted Kid IQ", main = "Mom HS")
axis(1, at = 1:ncol(y_hs), labels = IQ_SEQ, las = 3)
axis(2, las = 1)
boxplot(y_nohs, outline = FALSE, col = "red", axes = FALSE, ylim = c(10,170),
xlab = "Mom IQ", ylab = NULL, main = "Mom No HS")
axis(1, at = 1:ncol(y_hs), labels = IQ_SEQ, las = 3)
## ---- continuous-kidiq-validation, eval=FALSE, include=FALSE------------------
# # # External Validation
# # source(paste0(ROOT, "ARM/Ch.3/kids_before1987.data.R"),
# # local = kidiq, verbose = FALSE)
# # source(paste0(ROOT, "ARM/Ch.3/kids_after1987.data.R"),
# # local = kidiq, verbose = FALSE)
# # post5 <- stan_lm(ppvt ~ hs + afqt, data = kidiq,
# # prior = R2(location = 0.25, what = "mean"), seed = SEED)
# # y_ev <- posterior_predict(post5, newdata =
# # data.frame(hs = kidiq$hs_ev, afqt = kidiq$afqt_ev))
# # par(mfrow = c(1,1))
# # hist(-sweep(y_ev, 2, STATS = kidiq$ppvt_ev, FUN = "-"), prob = TRUE,
# # xlab = "Predictive Errors in ppvt", main = "", las = 2)
## ---- continuous-clotting-mle, results='hide'---------------------------------
clotting <- data.frame(
u = c(5,10,15,20,30,40,60,80,100),
lot1 = c(118,58,42,35,27,25,21,19,18),
lot2 = c(69,35,26,21,18,16,13,12,12))
summary(glm(lot1 ~ log(u), data = clotting, family = Gamma))
summary(glm(lot2 ~ log(u), data = clotting, family = Gamma))
## ---- continuous-clotting-mcmc, results="hide"--------------------------------
clotting2 <- with(clotting, data.frame(
log_plasma = rep(log(u), 2),
clot_time = c(lot1, lot2),
lot_id = factor(rep(c(1,2), each = length(u)))
))
fit <- stan_glm(clot_time ~ log_plasma * lot_id, data = clotting2, family = Gamma,
prior_intercept = normal(0, 1, autoscale = TRUE),
prior = normal(0, 1, autoscale = TRUE),
seed = 12345)
## -----------------------------------------------------------------------------
print(fit, digits = 3)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.