The data
This data is taken from Section 8.8 (Modeling Count Data) from Jim
Albert and Jingchen Hu’s 2020 book Probability and Bayesian
Modeling (CRC Press, Taylor & Francis Group). Suppose one is
interested in monitoring the popularity of a particular blog about
baseball analytics. The data in y (below) displays the number of
visitors viewing this blog for 28 days during June of 2018.
y = c(95,81,85,100,111,130,113,92,65,78,96,118,120,104,91,91,79,106,91,114,110,98,61,84,96,126,119,90)
n = length(y)
days = c("fri","sat","sun","mon","tue","wed","thu")
t = rep(1:7,4)
# Exploratory data analysis
par(mfrow=c(2,2))
hist(y,xlab="",main="Number of visitors")
boxplot(y,ylab="Number of visitors")
ts.plot(y,type="b",xlab="Days",ylab="Number of visitors")
abline(v=7.5,lty=2)
abline(v=14.5,lty=2)
abline(v=21.5,lty=2)
plot(t,y,xlab="Day of the week",ylab="Number of visitors",axes=FALSE)
axis(2);axis(1,at=1:7,lab=days)

Linear regression vs
Poisson regression
weekend=rep(0,n)
weekend[t<=3]=1
c(mean(y[weekend==0]),sqrt(var((y[weekend==0]))))
## [1] 109.00000 12.15456
c(mean(y[weekend==1]),sqrt(var((y[weekend==1]))))
## [1] 83.33333 11.42034
par(mfrow=c(1,2))
boxplot(y,ylab="Number of visitors")
boxplot(y~weekend,xlab="Type of day",names=c("Weekday","Weekend"),ylab="Number of visitors")

Gaussian
regression
summary(lm(y~weekend))
##
## Call:
## lm(formula = y ~ weekend)
##
## Residuals:
## Min 1Q Median 3Q Max
## -22.333 -6.250 1.333 8.750 21.000
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 109.000 2.962 36.795 < 2e-16 ***
## weekend -25.667 4.525 -5.672 5.76e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.85 on 26 degrees of freedom
## Multiple R-squared: 0.5531, Adjusted R-squared: 0.5359
## F-statistic: 32.17 on 1 and 26 DF, p-value: 5.76e-06
Poisson
regression
summary(glm(y~weekend,family="poisson"))
##
## Call:
## glm(formula = y ~ weekend, family = "poisson")
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.69135 0.02395 195.916 < 2e-16 ***
## weekend -0.26850 0.03967 -6.769 1.3e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 85.141 on 27 degrees of freedom
## Residual deviance: 38.324 on 26 degrees of freedom
## AIC: 221.76
##
## Number of Fisher Scoring iterations: 4
tab = rbind(c(109.000,109.000-25.667),
c(exp(4.69135),exp(4.69135-0.26850)))
rownames(tab) = c("Gaussian regression","Poisson regression")
colnames(tab) = c("Intercept","Slope")
tab
## Intercept Slope
## Gaussian regression 109.0000 83.33300
## Poisson regression 109.0002 83.33345
ma = 4.7;sda=0.1
mb = -0.3;sdb=0.1
N = 100
alpha = seq(4.5,4.9,length=N)
beta = seq(-0.5,0,length=N)
loglike = matrix(0,N,N)
prior = matrix(0,N,N)
posterior = matrix(0,N,N)
for (i in 1:N)
for (j in 1:N){
lambda = exp(alpha[i]+beta[j]*weekend)
loglike[i,j] = sum(dpois(y,lambda,log=TRUE))
prior[i,j] = dnorm(alpha[i],ma,sda)*dnorm(beta[j],mb,sdb)
}
like = exp(loglike)
post = prior*like
par(mfrow=c(1,1))
image(alpha,beta,prior,xlab=expression(alpha),ylab=expression(beta))
contour(alpha,beta,like,col=4,drawlabels=FALSE,add=TRUE,xlab=expression(alpha),ylab=expression(beta),lwd=2)
contour(alpha,beta,post,col=3,drawlabels=FALSE,add=TRUE,xlab=expression(alpha),ylab=expression(beta),lwd=2)
legend("topright",legend=c("Prior","Likelihood","Posterior"),col=c(2,4,3),lty=1,lwd=3)

SIR-based posterior
inference
M = 10000
alphas = rnorm(M,ma,sda)
betas = rnorm(M,mb,sdb)
plot(alphas,betas,xlab=expression(alpha),ylab=expression(beta))
contour(alpha,beta,prior,add=TRUE,drawlabels=FALSE,lwd=2,col=2)

w = rep(0,M)
for (i in 1:M)
w[i] = sum(dpois(y,exp(alphas[i]+betas[i]*weekend),log=TRUE))
w = exp(w-max(w))
ind = sample(1:M,size=M,replace=TRUE,prob=w)
alphas1 = alphas[ind]
betas1 = betas[ind]
plot(alphas1,betas1)

image(alpha,beta,post,xlab=expression(alpha),ylab=expression(beta))
contour(alpha,beta,post,add=TRUE,drawlabels=FALSE,lwd=2,col=2)

par(mfrow=c(1,1))
plot(density(exp(alphas1)),xlim=c(70,120),ylim=c(0,0.2),xlab="Rate of visitors",ylab="Density",main="",lwd=2)
lines(density(exp(alphas1+betas1)),col=2,lwd=2)
legend("topright",legend=c("Weekdays","Weekends"),col=1:2,lty=1,lwd=2)

LS0tCnRpdGxlOiAiR2F1c3NpYW4gdnMgUG9pc3NvbiBSZWdyZXNzaW9uIgphdXRob3I6ICJIZWRpYmVydCBGcmVpdGFzIExvcGVzIgpkYXRlOiAiMjcvMTAvMjAyNSIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19kZXB0aDogMwogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6ICczJwpzdWJ0aXRsZTogTUMgc2ltdWxhdGlvbiBhbmQgdGhlIGJvb3N0cmFwCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgojIFRoZSBkYXRhClRoaXMgZGF0YSBpcyB0YWtlbiBmcm9tIFNlY3Rpb24gOC44IChNb2RlbGluZyBDb3VudCBEYXRhKSBmcm9tIEppbSBBbGJlcnQgYW5kIEppbmdjaGVuIEh1J3MgMjAyMCBib29rCipQcm9iYWJpbGl0eSBhbmQgQmF5ZXNpYW4gTW9kZWxpbmcqIChDUkMgUHJlc3MsIFRheWxvciAmIEZyYW5jaXMgR3JvdXApLiAgU3VwcG9zZSBvbmUgaXMgaW50ZXJlc3RlZCBpbiBtb25pdG9yaW5nIHRoZSBwb3B1bGFyaXR5IG9mIGEgcGFydGljdWxhciBibG9nIGFib3V0IGJhc2ViYWxsIGFuYWx5dGljcy4gIFRoZSBkYXRhIGluIHkgKGJlbG93KSBkaXNwbGF5cyB0aGUgbnVtYmVyIG9mIHZpc2l0b3JzIHZpZXdpbmcgdGhpcyBibG9nIGZvciAyOCBkYXlzIGR1cmluZyBKdW5lIG9mIDIwMTguCgoKYGBge3IgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9MTB9CnkgPSBjKDk1LDgxLDg1LDEwMCwxMTEsMTMwLDExMyw5Miw2NSw3OCw5NiwxMTgsMTIwLDEwNCw5MSw5MSw3OSwxMDYsOTEsMTE0LDExMCw5OCw2MSw4NCw5NiwxMjYsMTE5LDkwKQoKbiA9IGxlbmd0aCh5KQoKZGF5cyA9IGMoImZyaSIsInNhdCIsInN1biIsIm1vbiIsInR1ZSIsIndlZCIsInRodSIpCgp0ID0gcmVwKDE6Nyw0KQoKIyBFeHBsb3JhdG9yeSBkYXRhIGFuYWx5c2lzCgpwYXIobWZyb3c9YygyLDIpKQpoaXN0KHkseGxhYj0iIixtYWluPSJOdW1iZXIgb2YgdmlzaXRvcnMiKQpib3hwbG90KHkseWxhYj0iTnVtYmVyIG9mIHZpc2l0b3JzIikKCnRzLnBsb3QoeSx0eXBlPSJiIix4bGFiPSJEYXlzIix5bGFiPSJOdW1iZXIgb2YgdmlzaXRvcnMiKQphYmxpbmUodj03LjUsbHR5PTIpCmFibGluZSh2PTE0LjUsbHR5PTIpCmFibGluZSh2PTIxLjUsbHR5PTIpCiAKcGxvdCh0LHkseGxhYj0iRGF5IG9mIHRoZSB3ZWVrIix5bGFiPSJOdW1iZXIgb2YgdmlzaXRvcnMiLGF4ZXM9RkFMU0UpCmF4aXMoMik7YXhpcygxLGF0PTE6NyxsYWI9ZGF5cykKYGBgCgojIExpbmVhciByZWdyZXNzaW9uIHZzIFBvaXNzb24gcmVncmVzc2lvbgpgYGB7ciBmaWcuYWxpZ249J2NlbnRlcicsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD01fQp3ZWVrZW5kPXJlcCgwLG4pCndlZWtlbmRbdDw9M109MQoKYyhtZWFuKHlbd2Vla2VuZD09MF0pLHNxcnQodmFyKCh5W3dlZWtlbmQ9PTBdKSkpKQpjKG1lYW4oeVt3ZWVrZW5kPT0xXSksc3FydCh2YXIoKHlbd2Vla2VuZD09MV0pKSkpCgpwYXIobWZyb3c9YygxLDIpKQpib3hwbG90KHkseWxhYj0iTnVtYmVyIG9mIHZpc2l0b3JzIikKYm94cGxvdCh5fndlZWtlbmQseGxhYj0iVHlwZSBvZiBkYXkiLG5hbWVzPWMoIldlZWtkYXkiLCJXZWVrZW5kIikseWxhYj0iTnVtYmVyIG9mIHZpc2l0b3JzIikKYGBgCgojIyBHYXVzc2lhbiByZWdyZXNzaW9uCgpgYGB7cn0Kc3VtbWFyeShsbSh5fndlZWtlbmQpKQpgYGAKCiMjIFBvaXNzb24gcmVncmVzc2lvbgoKYGBge3J9CnN1bW1hcnkoZ2xtKHl+d2Vla2VuZCxmYW1pbHk9InBvaXNzb24iKSkKCnRhYiA9IHJiaW5kKGMoMTA5LjAwMCwxMDkuMDAwLTI1LjY2NyksCmMoZXhwKDQuNjkxMzUpLGV4cCg0LjY5MTM1LTAuMjY4NTApKSkKCnJvd25hbWVzKHRhYikgPSBjKCJHYXVzc2lhbiByZWdyZXNzaW9uIiwiUG9pc3NvbiByZWdyZXNzaW9uIikKY29sbmFtZXModGFiKSA9IGMoIkludGVyY2VwdCIsIlNsb3BlIikKdGFiCmBgYAoKYGBge3J9Cm1hID0gNC43O3NkYT0wLjEKbWIgPSAtMC4zO3NkYj0wLjEKTiA9IDEwMAphbHBoYSA9IHNlcSg0LjUsNC45LGxlbmd0aD1OKQpiZXRhID0gc2VxKC0wLjUsMCxsZW5ndGg9TikKbG9nbGlrZSA9IG1hdHJpeCgwLE4sTikKcHJpb3IgPSBtYXRyaXgoMCxOLE4pCnBvc3RlcmlvciA9IG1hdHJpeCgwLE4sTikKZm9yIChpIGluIDE6TikKICBmb3IgKGogaW4gMTpOKXsKICAgIGxhbWJkYSA9IGV4cChhbHBoYVtpXStiZXRhW2pdKndlZWtlbmQpCiAgICBsb2dsaWtlW2ksal0gPSBzdW0oZHBvaXMoeSxsYW1iZGEsbG9nPVRSVUUpKQogICAgcHJpb3JbaSxqXSA9IGRub3JtKGFscGhhW2ldLG1hLHNkYSkqZG5vcm0oYmV0YVtqXSxtYixzZGIpCiAgfQpsaWtlID0gZXhwKGxvZ2xpa2UpCnBvc3QgPSBwcmlvcipsaWtlCgpwYXIobWZyb3c9YygxLDEpKQppbWFnZShhbHBoYSxiZXRhLHByaW9yLHhsYWI9ZXhwcmVzc2lvbihhbHBoYSkseWxhYj1leHByZXNzaW9uKGJldGEpKQpjb250b3VyKGFscGhhLGJldGEsbGlrZSxjb2w9NCxkcmF3bGFiZWxzPUZBTFNFLGFkZD1UUlVFLHhsYWI9ZXhwcmVzc2lvbihhbHBoYSkseWxhYj1leHByZXNzaW9uKGJldGEpLGx3ZD0yKQpjb250b3VyKGFscGhhLGJldGEscG9zdCxjb2w9MyxkcmF3bGFiZWxzPUZBTFNFLGFkZD1UUlVFLHhsYWI9ZXhwcmVzc2lvbihhbHBoYSkseWxhYj1leHByZXNzaW9uKGJldGEpLGx3ZD0yKQoKbGVnZW5kKCJ0b3ByaWdodCIsbGVnZW5kPWMoIlByaW9yIiwiTGlrZWxpaG9vZCIsIlBvc3RlcmlvciIpLGNvbD1jKDIsNCwzKSxsdHk9MSxsd2Q9MykKYGBgCgojIFNJUi1iYXNlZCBwb3N0ZXJpb3IgaW5mZXJlbmNlCgpgYGB7cn0KTSA9IDEwMDAwCmFscGhhcyA9IHJub3JtKE0sbWEsc2RhKQpiZXRhcyAgPSBybm9ybShNLG1iLHNkYikKcGxvdChhbHBoYXMsYmV0YXMseGxhYj1leHByZXNzaW9uKGFscGhhKSx5bGFiPWV4cHJlc3Npb24oYmV0YSkpCmNvbnRvdXIoYWxwaGEsYmV0YSxwcmlvcixhZGQ9VFJVRSxkcmF3bGFiZWxzPUZBTFNFLGx3ZD0yLGNvbD0yKQoKCncgPSByZXAoMCxNKQpmb3IgKGkgaW4gMTpNKQogIHdbaV0gPSBzdW0oZHBvaXMoeSxleHAoYWxwaGFzW2ldK2JldGFzW2ldKndlZWtlbmQpLGxvZz1UUlVFKSkKdyA9IGV4cCh3LW1heCh3KSkKaW5kID0gc2FtcGxlKDE6TSxzaXplPU0scmVwbGFjZT1UUlVFLHByb2I9dykKCmFscGhhczEgPSBhbHBoYXNbaW5kXQpiZXRhczEgPSBiZXRhc1tpbmRdCnBsb3QoYWxwaGFzMSxiZXRhczEpCmltYWdlKGFscGhhLGJldGEscG9zdCx4bGFiPWV4cHJlc3Npb24oYWxwaGEpLHlsYWI9ZXhwcmVzc2lvbihiZXRhKSkKY29udG91cihhbHBoYSxiZXRhLHBvc3QsYWRkPVRSVUUsZHJhd2xhYmVscz1GQUxTRSxsd2Q9Mixjb2w9MikKCgpwYXIobWZyb3c9YygxLDEpKQpwbG90KGRlbnNpdHkoZXhwKGFscGhhczEpKSx4bGltPWMoNzAsMTIwKSx5bGltPWMoMCwwLjIpLHhsYWI9IlJhdGUgb2YgdmlzaXRvcnMiLHlsYWI9IkRlbnNpdHkiLG1haW49IiIsbHdkPTIpCmxpbmVzKGRlbnNpdHkoZXhwKGFscGhhczErYmV0YXMxKSksY29sPTIsbHdkPTIpCmxlZ2VuZCgidG9wcmlnaHQiLGxlZ2VuZD1jKCJXZWVrZGF5cyIsIldlZWtlbmRzIiksY29sPTE6MixsdHk9MSxsd2Q9MikKYGBgCgo=