Demonstration of Bayesian information aggregation. See Chapter 9 in Regression and Other Stories.


Load packages

library("rprojroot")
root<-has_file(".ROS-Examples-root")$make_fix_file()

Calculations

Prior based on a previously-fitted model using economic and political condition.

theta_hat_prior <- 0.524
se_prior <- 0.041

Survey of 400 people, of whom 190 say they will vote for the Democratic candidate

n <- 400
y <- 190

Data estimate

theta_hat_data <- y/n
se_data <- sqrt((y/n)*(1-y/n)/n)

Bayes estimate

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))

Figures

par(mar=c(3,1,1,1), mgp=c(1.5, 0.5, 0), tck=-.02)
plot(0, 0, xlim=c(0.37, 0.67), ylim=c(0, 20), xlab=expression(theta), xaxt="n", ylab="", yaxs="i", yaxt="n", bty="n", cex.lab=1.2)
axis(1, seq(0.3, 0.7, 0.1))
curve(dnorm(x, theta_hat_prior, se_prior), n=1000, add=TRUE)
text(0.588, 5, "Prior")
curve(dnorm(x, theta_hat_data, se_data), n=1000, add=TRUE)
text(0.420, 8, "Likelihood")

par(mar=c(3,1,1,1), mgp=c(1.5, 0.5, 0), tck=-.02)
plot(0, 0, xlim=c(0.37, 0.67), ylim=c(0, 20), xlab=expression(theta), xaxt="n", ylab="", yaxs="i", yaxt="n", bty="n", cex.lab=1.2)
axis(1, seq(0.3, 0.7, 0.1))
curve(dnorm(x, theta_hat_prior, se_prior), n=1000, add=TRUE, col="gray30")
text(0.588, 5, "Prior")
curve(dnorm(x, theta_hat_data, se_data), n=1000, add=TRUE, col="gray30")
text(0.420, 8, "Likelihood")
curve(dnorm(x, theta_hat_bayes, se_bayes), n=1000, add=TRUE)
text(0.525, 15, "Posterior")

LS0tCnRpdGxlOiAiUmVncmVzc2lvbiBhbmQgT3RoZXIgU3RvcmllczogRWxlY3Rpb25zIEVjb25vbXkgLSBCYXllcyIKYXV0aG9yOiAiQW5kcmV3IEdlbG1hbiwgSmVubmlmZXIgSGlsbCwgQWtpIFZlaHRhcmkiCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSlgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRoZW1lOiByZWFkYWJsZQogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDIKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0KRGVtb25zdHJhdGlvbiBvZiBCYXllc2lhbiBpbmZvcm1hdGlvbiBhZ2dyZWdhdGlvbi4gU2VlIENoYXB0ZXIgOSBpbgpSZWdyZXNzaW9uIGFuZCBPdGhlciBTdG9yaWVzLgoKLS0tLS0tLS0tLS0tLQoKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQobWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGNvbW1lbnQ9TkEpCiMgc3dpdGNoIHRoaXMgdG8gVFJVRSB0byBzYXZlIGZpZ3VyZXMgaW4gc2VwYXJhdGUgZmlsZXMKc2F2ZWZpZ3MgPC0gRkFMU0UKYGBgCgojIyMjIExvYWQgcGFja2FnZXMKCmBgYHtyIH0KbGlicmFyeSgicnByb2pyb290IikKcm9vdDwtaGFzX2ZpbGUoIi5ST1MtRXhhbXBsZXMtcm9vdCIpJG1ha2VfZml4X2ZpbGUoKQpgYGAKCiMjIENhbGN1bGF0aW9ucwoKUHJpb3IgYmFzZWQgb24gYSBwcmV2aW91c2x5LWZpdHRlZCBtb2RlbCB1c2luZyBlY29ub21pYyBhbmQKcG9saXRpY2FsIGNvbmRpdGlvbi4KCmBgYHtyIH0KdGhldGFfaGF0X3ByaW9yIDwtIDAuNTI0CnNlX3ByaW9yIDwtIDAuMDQxCmBgYAoKU3VydmV5IG9mIDQwMCBwZW9wbGUsIG9mIHdob20gMTkwIHNheSB0aGV5IHdpbGwgdm90ZSBmb3IgdGhlCkRlbW9jcmF0aWMgY2FuZGlkYXRlCgpgYGB7ciB9Cm4gPC0gNDAwCnkgPC0gMTkwCmBgYAoKIyMjIyBEYXRhIGVzdGltYXRlCgpgYGB7ciB9CnRoZXRhX2hhdF9kYXRhIDwtIHkvbgpzZV9kYXRhIDwtIHNxcnQoKHkvbikqKDEteS9uKS9uKQpgYGAKCiMjIyMgQmF5ZXMgZXN0aW1hdGUKCmBgYHtyIH0KdGhldGFfaGF0X2JheWVzIDwtICh0aGV0YV9oYXRfcHJpb3Ivc2VfcHJpb3JeMiArIHRoZXRhX2hhdF9kYXRhL3NlX2RhdGFeMikgLyAoMS9zZV9wcmlvcl4yICsgMS9zZV9kYXRhXjIpCnNlX2JheWVzIDwtIHNxcnQoMS8oMS9zZV9wcmlvcl4yICsgMS9zZV9kYXRhXjIpKQpgYGAKCiMjIEZpZ3VyZXMKCgpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQppZiAoc2F2ZWZpZ3MpIHBkZihyb290KCJFbGVjdGlvbnNFY29ub215L2ZpZ3MiLCJwcmlvcl9kYXRhX3Bvc3Rlcmlvcl9hLnBkZiIsIGhlaWdodD0zLCB3aWR0aD01LjUpKQpgYGAKYGBge3IgfQpwYXIobWFyPWMoMywxLDEsMSksIG1ncD1jKDEuNSwgMC41LCAwKSwgdGNrPS0uMDIpCnBsb3QoMCwgMCwgeGxpbT1jKDAuMzcsIDAuNjcpLCB5bGltPWMoMCwgMjApLCB4bGFiPWV4cHJlc3Npb24odGhldGEpLCB4YXh0PSJuIiwgeWxhYj0iIiwgeWF4cz0iaSIsIHlheHQ9Im4iLCBidHk9Im4iLCBjZXgubGFiPTEuMikKYXhpcygxLCBzZXEoMC4zLCAwLjcsIDAuMSkpCmN1cnZlKGRub3JtKHgsIHRoZXRhX2hhdF9wcmlvciwgc2VfcHJpb3IpLCBuPTEwMDAsIGFkZD1UUlVFKQp0ZXh0KDAuNTg4LCA1LCAiUHJpb3IiKQpjdXJ2ZShkbm9ybSh4LCB0aGV0YV9oYXRfZGF0YSwgc2VfZGF0YSksIG49MTAwMCwgYWRkPVRSVUUpCnRleHQoMC40MjAsIDgsICJMaWtlbGlob29kIikKYGBgCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CmlmIChzYXZlZmlncykgZGV2Lm9mZigpCmBgYApgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQppZiAoc2F2ZWZpZ3MpIHBkZihyb290KCJFbGVjdGlvbnNFY29ub215L2ZpZ3MiLCJwcmlvcl9kYXRhX3Bvc3Rlcmlvcl9iLnBkZiIsIGhlaWdodD0zLCB3aWR0aD01LjUpKQpgYGAKYGBge3IgfQpwYXIobWFyPWMoMywxLDEsMSksIG1ncD1jKDEuNSwgMC41LCAwKSwgdGNrPS0uMDIpCnBsb3QoMCwgMCwgeGxpbT1jKDAuMzcsIDAuNjcpLCB5bGltPWMoMCwgMjApLCB4bGFiPWV4cHJlc3Npb24odGhldGEpLCB4YXh0PSJuIiwgeWxhYj0iIiwgeWF4cz0iaSIsIHlheHQ9Im4iLCBidHk9Im4iLCBjZXgubGFiPTEuMikKYXhpcygxLCBzZXEoMC4zLCAwLjcsIDAuMSkpCmN1cnZlKGRub3JtKHgsIHRoZXRhX2hhdF9wcmlvciwgc2VfcHJpb3IpLCBuPTEwMDAsIGFkZD1UUlVFLCBjb2w9ImdyYXkzMCIpCnRleHQoMC41ODgsIDUsICJQcmlvciIpCmN1cnZlKGRub3JtKHgsIHRoZXRhX2hhdF9kYXRhLCBzZV9kYXRhKSwgbj0xMDAwLCBhZGQ9VFJVRSwgY29sPSJncmF5MzAiKQp0ZXh0KDAuNDIwLCA4LCAiTGlrZWxpaG9vZCIpCmN1cnZlKGRub3JtKHgsIHRoZXRhX2hhdF9iYXllcywgc2VfYmF5ZXMpLCBuPTEwMDAsIGFkZD1UUlVFKQp0ZXh0KDAuNTI1LCAxNSwgIlBvc3RlcmlvciIpCmBgYApgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQppZiAoc2F2ZWZpZ3MpIGRldi5vZmYoKQpgYGAKCg==