-
Notifications
You must be signed in to change notification settings - Fork 26
/
bayes_tv.Rmd
124 lines (99 loc) · 2.65 KB
/
bayes_tv.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
---
title: "Regression and Other Stories: Elections Economy - Bayes"
author: "Andrew Gelman, Jennifer Hill, Aki Vehtari"
date: "`r Sys.Date()`"
output:
github_document:
toc: true
---
Tidyverse version by Bill Behrman.
Demonstration of Bayesian information aggregation. See Chapter 9 in
Regression and Other Stories.
-------------
```{r, message=FALSE}
# Packages
library(tidyverse)
# Parameters
# Common code
file_common <- here::here("_common.R")
#===============================================================================
# Run common code
source(file_common)
```
# 9 Prediction and Bayesian inference
## 9.3 Prior information and Bayesian synthesis
### Bayesian information aggregation
Data
Prior distribution based on a previously-fitted model using economic and political conditions.
```{r}
theta_hat_prior <- 0.524
se_prior <- 0.041
```
Survey of 400 people, of whom 190 say they will vote for the Democratic candidate.
```{r}
n <- 400
y <- 190
```
Distribution based upon survey data.
```{r}
theta_hat_data <- y / n
se_data <- sqrt((y / n) * (1 - y / n) / n)
```
Bayes estimate.
```{r}
theta_hat_bayes <-
(theta_hat_prior / se_prior^2 + theta_hat_data / se_data^2) /
(1 / se_prior^2 + 1 / se_data^2)
se_bayes <- sqrt(1 / (1 / se_prior^2 + 1 / se_data^2))
```
```{r}
x_min = min(theta_hat_prior - 4 * se_prior, theta_hat_data - 4 * se_data)
x_max = max(theta_hat_prior + 4 * se_prior, theta_hat_data + 4 * se_data)
v <-
tibble(
x = seq(x_min, x_max, length.out = 201),
y_prior = dnorm(x, mean = theta_hat_prior, sd = se_prior),
y_data = dnorm(x, mean = theta_hat_data, sd = se_data),
y_bayes = dnorm(x, mean = theta_hat_bayes, sd = se_bayes)
)
labels <-
tribble(
~x, ~y, ~label, ~hjust,
0.58, 4.9, "Prior", 0,
0.44, 8.0, "Likelihood", 1,
0.51, 14.2, "Posterior", 0
)
```
Likelihood and prior distributions.
```{r}
v %>%
ggplot(aes(x)) +
geom_blank(aes(y = y_bayes)) +
geom_line(aes(y = y_prior)) +
geom_line(aes(y = y_data)) +
geom_text(
aes(x, y, label = label, hjust = hjust),
data = labels %>% filter(label != "Posterior")
) +
scale_y_continuous(breaks = 0) +
labs(
title = "Likelihood and prior distributions",
x = expression(theta),
y = NULL
)
```
Likelihood, prior, and posterior distributions.
```{r}
v %>%
ggplot(aes(x)) +
geom_line(aes(y = y_prior)) +
geom_line(aes(y = y_data)) +
geom_line(aes(y = y_bayes)) +
geom_text(aes(x, y, label = label, hjust = hjust), data = labels) +
scale_y_continuous(breaks = 0) +
labs(
title = "Likelihood, prior, and posterior distributions",
x = expression(theta),
y = NULL
)
```