Simulating some AR(1)
data
We start by simulating a time-series of size \(n\) from an AR(1) process \[
y_t|y_{t-1},\mu,\phi,\sigma,\nu \sim t_\nu(\mu+\phi y_{t-1},\sigma^2),
\] for \(t=1,\ldots,n\) and
\(y_0=\mu/(1-\phi)\), assuming \(\phi \in (0,1)\). Below we use the values
\((n,\mu,\phi,\sigma,\nu)=(200,0.1,0.9,0.1,1)\),
so the errors are Cauchy.
#install.packages("rstan")
library("rstan")
options(mc.cores=4)
# Data
set.seed(3141593)
n = 200
mu0 = 0.1
phi0 = 0.9
sigma0 = 0.1
nu0 = 1
y = rep(mu0/(1-phi0),n)
for (t in 2:n)
y[t] = mu0 + phi0*y[t-1] + sigma0*rt(1,df=nu0)
par(mfrow=c(1,1))
ts.plot(y)

Model in STAN code:
AR1.stan
data {
int<lower=0> n;
vector[n] y;
}
parameters {
real mu;
real phi;
real<lower=0> sigma;
real<lower=0> nu;
}
model {
mu ~ normal(0,1);
phi ~ normal(0.8,0.3);
sigma ~ gamma(0.5,0.5);
nu ~ gamma(0.895,0.045);
y[1] ~ student_t(nu,0,10);
for (t in 2:n)
y[t] ~ student_t(nu,mu+phi*y[t-1],sigma);
}
Posterior inference via
STAN
model = stan_model("AR1.stan")
fit = sampling(model,list(n=n,y=y),iter=35000,warmup=10000,thin=10,chains=4)
print(fit)
params = extract(fit)
mu = params$mu
phi = params$phi
sigma = params$sigma
nu = params$nu
Checking the Markov
chains
par(mfrow=c(3,4))
ts.plot(mu,xlab="Iterations",ylab="",main=expression(mu))
ts.plot(phi,xlab="Iterations",ylab="",main=expression(phi))
ts.plot(sigma,xlab="Iterations",ylab="",main=expression(sigma))
ts.plot(nu,xlab="Iterations",ylab="",main=expression(nu))
acf(mu,ylab="",main=expression(mu))
acf(phi,ylab="",main=expression(phi))
acf(sigma,ylab="",main=expression(sigma))
acf(nu,ylab="",main=expression(nu))
hist(mu,prob=TRUE,xlab="",ylab="",main=expression(mu))
abline(v=mu0,col=2,lwd=2)
hist(phi,prob=TRUE,xlab="",ylab="",main=expression(phi))
abline(v=phi0,col=2,lwd=2)
hist(sigma,prob=TRUE,xlab="",ylab="",main=expression(sigma))
abline(v=sigma0,col=2,lwd=2)
hist(nu,prob=TRUE,xlab="",ylab="",main=expression(nu))
abline(v=nu0,col=2,lwd=2)

Posterior
quantiles
t(apply(cbind(mu,phi,sigma,nu),2,quantile,c(0.05,0.5,0.95)))
## 5% 50% 95%
## mu 0.07877791 0.1025356 0.1258704
## phi 0.88562498 0.9035139 0.9212185
## sigma 0.09256661 0.1139087 0.1385227
## nu 0.94907611 1.2021300 1.5250803
Bivariate marginal
posteriors
par(mfrow=c(2,3))
plot(mu,phi,xlab=expression(mu),ylab=expression(phi))
plot(mu,sigma,xlab=expression(mu),ylab=expression(sigma))
plot(mu,nu,xlab=expression(mu),ylab=expression(nu))
plot(phi,sigma,xlab=expression(phi),ylab=expression(sigma))
plot(phi,nu,xlab=expression(phi),ylab=expression(nu))
plot(sigma,nu,xlab=expression(sigma),ylab=expression(nu))

LS0tCnRpdGxlOiAiQVIoMSkgd2l0aCBTdHVkZW50J3MgJHQkIGVycm9ycyIKc3VidGl0bGU6ICJIYW1pbHRvbmlhbiBNQyB2aWEgU1RBTiIKYXV0aG9yOiAiSGVkaWJlcnQgRi4gTG9wZXMiCmRhdGU6ICIxNC8wNi8yMDI1IgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAzCiAgICB0b2NfY29sbGFwc2VkOiB0cnVlCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQotLS0KCgojIFNpbXVsYXRpbmcgc29tZSBBUigxKSBkYXRhCgpXZSBzdGFydCBieSBzaW11bGF0aW5nIGEgdGltZS1zZXJpZXMgb2Ygc2l6ZSAkbiQgZnJvbSBhbiBBUigxKSBwcm9jZXNzCiQkCnlfdHx5X3t0LTF9LFxtdSxccGhpLFxzaWdtYSxcbnUgXHNpbSB0X1xudShcbXUrXHBoaSB5X3t0LTF9LFxzaWdtYV4yKSwKJCQKZm9yICR0PTEsXGxkb3RzLG4kIGFuZCAkeV8wPVxtdS8oMS1ccGhpKSQsIGFzc3VtaW5nICRccGhpIFxpbiAoMCwxKSQuICBCZWxvdyB3ZSB1c2UgdGhlIHZhbHVlcyAkKG4sXG11LFxwaGksXHNpZ21hLFxudSk9KDIwMCwwLjEsMC45LDAuMSwxKSQsIHNvIHRoZSBlcnJvcnMgYXJlIENhdWNoeS4KCmBgYHtyIGZpZy53aWR0aD04LGZpZy5oZWlnaHQ9NixmaWcuYWxpZ249J2NlbnRlcicsbWVzc2FnZT1GQUxTRX0KI2luc3RhbGwucGFja2FnZXMoInJzdGFuIikKbGlicmFyeSgicnN0YW4iKQpvcHRpb25zKG1jLmNvcmVzPTQpCgojIERhdGEKc2V0LnNlZWQoMzE0MTU5MykKbiAgICAgID0gMjAwCm11MCAgICA9IDAuMQpwaGkwICAgPSAwLjkKc2lnbWEwID0gMC4xCm51MCAgICA9IDEKeSAgICAgID0gcmVwKG11MC8oMS1waGkwKSxuKQpmb3IgKHQgaW4gMjpuKQogIHlbdF0gPSBtdTAgKyBwaGkwKnlbdC0xXSArIHNpZ21hMCpydCgxLGRmPW51MCkKCnBhcihtZnJvdz1jKDEsMSkpCnRzLnBsb3QoeSkKYGBgCgoKIyBNb2RlbCBpbiBTVEFOIGNvZGU6ICpBUjEuc3RhbioKCmBgYHtyIGV2YWw9RkFMU0V9CmRhdGEgewogIGludDxsb3dlcj0wPiBuOyAgIAogIHZlY3RvcltuXSB5OyAgICAgIAp9CgpwYXJhbWV0ZXJzIHsKICByZWFsIG11OyAgICAgICAgICAgICAgICAgICAgIAogIHJlYWwgcGhpOyAgCiAgcmVhbDxsb3dlcj0wPiBzaWdtYTsgICAgICAgICAKICByZWFsPGxvd2VyPTA+IG51OyAgICAgICAgICAgIAp9Cgptb2RlbCB7CiAgbXUgICAgfiBub3JtYWwoMCwxKTsKICBwaGkgICB+IG5vcm1hbCgwLjgsMC4zKTsKICBzaWdtYSB+IGdhbW1hKDAuNSwwLjUpOwogIG51ICAgIH4gZ2FtbWEoMC44OTUsMC4wNDUpOwogIHlbMV0gIH4gc3R1ZGVudF90KG51LDAsMTApOwogIGZvciAodCBpbiAyOm4pCiAgICB5W3RdIH4gc3R1ZGVudF90KG51LG11K3BoaSp5W3QtMV0sc2lnbWEpOwp9CmBgYAoKIyBQb3N0ZXJpb3IgaW5mZXJlbmNlIHZpYSBTVEFOCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cm1vZGVsID0gc3Rhbl9tb2RlbCgiQVIxLnN0YW4iKQpmaXQgICA9IHNhbXBsaW5nKG1vZGVsLGxpc3Qobj1uLHk9eSksaXRlcj0zNTAwMCx3YXJtdXA9MTAwMDAsdGhpbj0xMCxjaGFpbnM9NCkKCnByaW50KGZpdCkKCnBhcmFtcyA9IGV4dHJhY3QoZml0KQptdSAgICAgPSBwYXJhbXMkbXUKcGhpICAgID0gcGFyYW1zJHBoaQpzaWdtYSAgPSBwYXJhbXMkc2lnbWEKbnUgICAgID0gcGFyYW1zJG51CmBgYAoKIyMgQ2hlY2tpbmcgdGhlIE1hcmtvdiBjaGFpbnMKCmBgYHtyIGZpZy53aWR0aD0xMCxmaWcuaGVpZ2h0PTgsZmlnLmFsaWduPSdjZW50ZXInLG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBhcihtZnJvdz1jKDMsNCkpCnRzLnBsb3QobXUseGxhYj0iSXRlcmF0aW9ucyIseWxhYj0iIixtYWluPWV4cHJlc3Npb24obXUpKQp0cy5wbG90KHBoaSx4bGFiPSJJdGVyYXRpb25zIix5bGFiPSIiLG1haW49ZXhwcmVzc2lvbihwaGkpKQp0cy5wbG90KHNpZ21hLHhsYWI9Ikl0ZXJhdGlvbnMiLHlsYWI9IiIsbWFpbj1leHByZXNzaW9uKHNpZ21hKSkKdHMucGxvdChudSx4bGFiPSJJdGVyYXRpb25zIix5bGFiPSIiLG1haW49ZXhwcmVzc2lvbihudSkpCmFjZihtdSx5bGFiPSIiLG1haW49ZXhwcmVzc2lvbihtdSkpCmFjZihwaGkseWxhYj0iIixtYWluPWV4cHJlc3Npb24ocGhpKSkKYWNmKHNpZ21hLHlsYWI9IiIsbWFpbj1leHByZXNzaW9uKHNpZ21hKSkKYWNmKG51LHlsYWI9IiIsbWFpbj1leHByZXNzaW9uKG51KSkKaGlzdChtdSxwcm9iPVRSVUUseGxhYj0iIix5bGFiPSIiLG1haW49ZXhwcmVzc2lvbihtdSkpCmFibGluZSh2PW11MCxjb2w9Mixsd2Q9MikKaGlzdChwaGkscHJvYj1UUlVFLHhsYWI9IiIseWxhYj0iIixtYWluPWV4cHJlc3Npb24ocGhpKSkKYWJsaW5lKHY9cGhpMCxjb2w9Mixsd2Q9MikKaGlzdChzaWdtYSxwcm9iPVRSVUUseGxhYj0iIix5bGFiPSIiLG1haW49ZXhwcmVzc2lvbihzaWdtYSkpCmFibGluZSh2PXNpZ21hMCxjb2w9Mixsd2Q9MikKaGlzdChudSxwcm9iPVRSVUUseGxhYj0iIix5bGFiPSIiLG1haW49ZXhwcmVzc2lvbihudSkpCmFibGluZSh2PW51MCxjb2w9Mixsd2Q9MikKYGBgCgojIyBQb3N0ZXJpb3IgcXVhbnRpbGVzCgpgYGB7cn0KdChhcHBseShjYmluZChtdSxwaGksc2lnbWEsbnUpLDIscXVhbnRpbGUsYygwLjA1LDAuNSwwLjk1KSkpCmBgYAoKCiMjIEJpdmFyaWF0ZSBtYXJnaW5hbCBwb3N0ZXJpb3JzCgpgYGB7ciBmaWcud2lkdGg9MTAsZmlnLmhlaWdodD04LGZpZy5hbGlnbj0nY2VudGVyJyxtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKcGFyKG1mcm93PWMoMiwzKSkKcGxvdChtdSxwaGkseGxhYj1leHByZXNzaW9uKG11KSx5bGFiPWV4cHJlc3Npb24ocGhpKSkKcGxvdChtdSxzaWdtYSx4bGFiPWV4cHJlc3Npb24obXUpLHlsYWI9ZXhwcmVzc2lvbihzaWdtYSkpCnBsb3QobXUsbnUseGxhYj1leHByZXNzaW9uKG11KSx5bGFiPWV4cHJlc3Npb24obnUpKQpwbG90KHBoaSxzaWdtYSx4bGFiPWV4cHJlc3Npb24ocGhpKSx5bGFiPWV4cHJlc3Npb24oc2lnbWEpKQpwbG90KHBoaSxudSx4bGFiPWV4cHJlc3Npb24ocGhpKSx5bGFiPWV4cHJlc3Npb24obnUpKQpwbG90KHNpZ21hLG51LHhsYWI9ZXhwcmVzc2lvbihzaWdtYSkseWxhYj1leHByZXNzaW9uKG51KSkKYGBgCg==