1 Bivariate normal

We say that the vector \((x,y) \in \Re^2\) follows a bivariate normal distribution with zero means, unit variances and correlation \(\rho \in (-1,1)\) if its probability density function is given by: \[ p(x,y) = \frac{1}{2\pi\sqrt{1-\rho^2}}\exp\left\{-\frac{1}{2(1-\rho^2)}(x^2-2\rho x y + y^2)\right\}. \]

d2norm = function(x,y,rho){
  1/(2*pi*sqrt(1-rho^2))*exp(-0.5/(1-rho^2)*(x^2+y^2-2*rho*x*y))
}


rho = -0.95
N = 100
x = seq(-5,5,length=N)
y = seq(-5,5,length=N)
joint = matrix(0,N,N)
for (i in 1:N)
  for (j in 1:N)
    joint[i,j] = d2norm(x[i],y[j],rho)
contour(x,y,joint,xlab="X",ylab="Y",drawlabels=FALSE)

2 Marginal distributions

We know that both marginal distributions are standard normal distributions: \[ x \sim N(0,1) \ \ \ \mbox{and} \ \ \ y \sim N(0,1). \]

3 Full conditional distributions

We also know that the full conditional distributions are normal as well: \[ x|y \sim N(\rho y , (1-\rho^2)) \ \ \ \mbox{and} \ \ \ y|x \sim N(\rho x , (1-\rho^2)). \]

3.1 A few steps of the Gibbs sampler

set.seed(1245)
y = 2

x = rnorm(1,rho*y,sqrt(1-rho^2))
x
## [1] -1.769124
y = rnorm(1,rho*x,sqrt(1-rho^2))
y
## [1] 1.226083
x = rnorm(1,rho*y,sqrt(1-rho^2))
x
## [1] -1.619378
y = rnorm(1,rho*x,sqrt(1-rho^2))
y
## [1] 1.221273
x = rnorm(1,rho*y,sqrt(1-rho^2))
x
## [1] -1.32667
y = rnorm(1,rho*x,sqrt(1-rho^2))
y
## [1] 1.04688

4 Gibbs sampler in action!

M     = 1000
burnin = 1000
skip  = 10
niter = burnin+M*skip
ys = rep(0,niter)
xs = rep(0,niter)
xs[1] = 0
ys[1] = 17
for (iter in 2:niter){
  xs[iter] = rnorm(1,rho*ys[iter-1],sqrt(1-rho^2))
  ys[iter] = rnorm(1,rho*xs[iter],sqrt(1-rho^2))
}

ind = seq(burnin+1,niter,by=skip)

par(mfrow=c(2,3))
ts.plot(ys[ind],xlab="Iterations",ylab="",main="Draws of X")
acf(ys[ind],main="")
hist(ys[ind],prob=TRUE,main="",xlab="X")
ts.plot(xs[ind],xlab="Iterations",ylab="",main="Draws of Y")
acf(xs[ind],main="")
hist(xs[ind],prob=TRUE,main="",xlab="Y")

4.1 Recovering the joint \(p(x,y)\)

par(mfrow=c(1,1))
plot(xs[ind],ys[ind],xlab="X",ylab="Y")
x = seq(-5,5,length=N)
y = seq(-5,5,length=N)
contour(x,y,joint,add=TRUE,col=2,drawlabels=FALSE)

LS0tCnRpdGxlOiAiQml2YXJpYXRlIG5vcm1hbCIKc3VidGl0bGU6ICJGdWxsIGNvbmRpdGlvbmFscyIKYXV0aG9yOiAiSGVkaWJlcnQgRnJlaXRhcyBMb3BlcyIKZGF0ZTogIjIvMTQvMjAyMyIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19kZXB0aDogMgogICAgY29kZV9kb3dubG9hZDogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCgoKIyBCaXZhcmlhdGUgbm9ybWFsCldlIHNheSB0aGF0IHRoZSB2ZWN0b3IgJCh4LHkpIFxpbiBcUmVeMiQgZm9sbG93cyBhIGJpdmFyaWF0ZSBub3JtYWwgZGlzdHJpYnV0aW9uIHdpdGggemVybyBtZWFucywgdW5pdCB2YXJpYW5jZXMgYW5kIGNvcnJlbGF0aW9uICRccmhvIFxpbiAoLTEsMSkkIGlmIGl0cyBwcm9iYWJpbGl0eSBkZW5zaXR5IGZ1bmN0aW9uIGlzIGdpdmVuIGJ5OgokJApwKHgseSkgPSBcZnJhY3sxfXsyXHBpXHNxcnR7MS1ccmhvXjJ9fVxleHBcbGVmdFx7LVxmcmFjezF9ezIoMS1ccmhvXjIpfSh4XjItMlxyaG8geCB5ICsgeV4yKVxyaWdodFx9LgokJApgYGB7ciBmaWcud2lkdGg9NSwgZmlnLmhlaWdodD01LCBmaWcuYWxpZ24gPSAnY2VudGVyJ30KZDJub3JtID0gZnVuY3Rpb24oeCx5LHJobyl7CiAgMS8oMipwaSpzcXJ0KDEtcmhvXjIpKSpleHAoLTAuNS8oMS1yaG9eMikqKHheMit5XjItMipyaG8qeCp5KSkKfQoKCnJobyA9IC0wLjk1Ck4gPSAxMDAKeCA9IHNlcSgtNSw1LGxlbmd0aD1OKQp5ID0gc2VxKC01LDUsbGVuZ3RoPU4pCmpvaW50ID0gbWF0cml4KDAsTixOKQpmb3IgKGkgaW4gMTpOKQogIGZvciAoaiBpbiAxOk4pCiAgICBqb2ludFtpLGpdID0gZDJub3JtKHhbaV0seVtqXSxyaG8pCmNvbnRvdXIoeCx5LGpvaW50LHhsYWI9IlgiLHlsYWI9IlkiLGRyYXdsYWJlbHM9RkFMU0UpCmBgYAoKCiMgTWFyZ2luYWwgZGlzdHJpYnV0aW9ucwoKV2Uga25vdyB0aGF0IGJvdGggbWFyZ2luYWwgZGlzdHJpYnV0aW9ucyBhcmUgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbnM6CiQkCnggXHNpbSBOKDAsMSkgXCBcIFwgXG1ib3h7YW5kfSBcIFwgXCB5IFxzaW0gTigwLDEpLgokJAoKIyBGdWxsIGNvbmRpdGlvbmFsIGRpc3RyaWJ1dGlvbnMKCldlIGFsc28ga25vdyB0aGF0IHRoZSBmdWxsIGNvbmRpdGlvbmFsIGRpc3RyaWJ1dGlvbnMgYXJlIG5vcm1hbCBhcyB3ZWxsOgokJAp4fHkgXHNpbSBOKFxyaG8geSAsICgxLVxyaG9eMikpIFwgXCBcIFxtYm94e2FuZH0gXCBcIFwgeXx4IFxzaW0gTihccmhvIHggLCAoMS1ccmhvXjIpKS4KJCQKCiMjIEEgZmV3IHN0ZXBzIG9mIHRoZSBHaWJicyBzYW1wbGVyCgpgYGB7cn0Kc2V0LnNlZWQoMTI0NSkKeSA9IDIKCnggPSBybm9ybSgxLHJobyp5LHNxcnQoMS1yaG9eMikpCngKeSA9IHJub3JtKDEscmhvKngsc3FydCgxLXJob14yKSkKeQp4ID0gcm5vcm0oMSxyaG8qeSxzcXJ0KDEtcmhvXjIpKQp4CnkgPSBybm9ybSgxLHJobyp4LHNxcnQoMS1yaG9eMikpCnkKeCA9IHJub3JtKDEscmhvKnksc3FydCgxLXJob14yKSkKeAp5ID0gcm5vcm0oMSxyaG8qeCxzcXJ0KDEtcmhvXjIpKQp5CmBgYAoKIyBHaWJicyBzYW1wbGVyIGluIGFjdGlvbiEKCmBgYHtyIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD01fQpNICAgICA9IDEwMDAKYnVybmluID0gMTAwMApza2lwICA9IDEwCm5pdGVyID0gYnVybmluK00qc2tpcAp5cyA9IHJlcCgwLG5pdGVyKQp4cyA9IHJlcCgwLG5pdGVyKQp4c1sxXSA9IDAKeXNbMV0gPSAxNwpmb3IgKGl0ZXIgaW4gMjpuaXRlcil7CiAgeHNbaXRlcl0gPSBybm9ybSgxLHJobyp5c1tpdGVyLTFdLHNxcnQoMS1yaG9eMikpCiAgeXNbaXRlcl0gPSBybm9ybSgxLHJobyp4c1tpdGVyXSxzcXJ0KDEtcmhvXjIpKQp9CgppbmQgPSBzZXEoYnVybmluKzEsbml0ZXIsYnk9c2tpcCkKCnBhcihtZnJvdz1jKDIsMykpCnRzLnBsb3QoeXNbaW5kXSx4bGFiPSJJdGVyYXRpb25zIix5bGFiPSIiLG1haW49IkRyYXdzIG9mIFgiKQphY2YoeXNbaW5kXSxtYWluPSIiKQpoaXN0KHlzW2luZF0scHJvYj1UUlVFLG1haW49IiIseGxhYj0iWCIpCnRzLnBsb3QoeHNbaW5kXSx4bGFiPSJJdGVyYXRpb25zIix5bGFiPSIiLG1haW49IkRyYXdzIG9mIFkiKQphY2YoeHNbaW5kXSxtYWluPSIiKQpoaXN0KHhzW2luZF0scHJvYj1UUlVFLG1haW49IiIseGxhYj0iWSIpCmBgYAoKIyMgUmVjb3ZlcmluZyB0aGUgam9pbnQgJHAoeCx5KSQKCmBgYHtyIGZpZy53aWR0aD01LCBmaWcuaGVpZ2h0PTUsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQpwYXIobWZyb3c9YygxLDEpKQpwbG90KHhzW2luZF0seXNbaW5kXSx4bGFiPSJYIix5bGFiPSJZIikKeCA9IHNlcSgtNSw1LGxlbmd0aD1OKQp5ID0gc2VxKC01LDUsbGVuZ3RoPU4pCmNvbnRvdXIoeCx5LGpvaW50LGFkZD1UUlVFLGNvbD0yLGRyYXdsYWJlbHM9RkFMU0UpCmBgYA==