
An Example
# https://www.google.com/search?q=rstan+example&ei=6ZQ7YMvdJKaQr7wP84mfoA4&start=10&sa=N&ved=2ahUKEwiL9uWn0ozvAhUmyIsBHfPEB-QQ8tMDegQIBRA0&biw=1653&bih=902
#---------------------------------
# Prepare data for stan program
#---------------------------------
N <- nrow(trees)
x <- trees$Height
y <- trees$Volume
stan_data <- list(N = N, x = x, y = y)
#-----------------------------
# Stan code
#-----------------------------
stan_model <- "
data {
int < lower = 1 > N; // Sample size
vector[N] x; // Predictor
vector[N] y; // Outcome
}
parameters {
real alpha; // Intercept
real beta; // Slope (regression coefficients)
real < lower = 0 > sigma; // Error SD
}
model {
y ~ normal(alpha + x * beta , sigma);
}"
#--------------------------------------------
# Fit Bayesian Model with proper priors
#--------------------------------------------
# fit2 <- stan(model_code = stan_model, data = stan_data, iter = 1000, chains = 4)
library(rstan)
options(mc.cores = parallel::detectCores())
rstan_options(auto_write = TRUE)
system.time(
fit <- stan(file = "bayesian_reg.stan",
data = stan_data,
warmup = 1000,
iter = 2000,
chains = 4,
algorithm = "HMC",
verbose = TRUE,
seed = 29)
)
##
## TRANSLATING MODEL 'bayesian_reg' FROM Stan CODE TO C++ CODE NOW.
## successful in parsing the Stan model 'bayesian_reg'.
##
## CHECKING DATA AND PREPROCESSING FOR MODEL 'bayesian_reg' NOW.
##
## COMPILING MODEL 'bayesian_reg' NOW.
##
## STARTING SAMPLER FOR MODEL 'bayesian_reg' NOW.
## user system elapsed
## 1.39 0.23 16.67
## Inference for Stan model: bayesian_reg.
## 4 chains, each with iter=2000; warmup=1000; thin=1;
## post-warmup draws per chain=1000, total post-warmup draws=4000.
##
## mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
## alpha -87.12 0.25 30.13 -145.71 -107.03 -87.30 -67.32 -26.44 14408 1.00
## beta 1.54 0.00 0.39 0.76 1.29 1.54 1.80 2.30 14408 1.00
## sigma 13.89 0.03 1.82 10.85 12.64 13.68 14.96 17.88 3364 1.00
## lp__ -93.81 0.05 1.20 -96.93 -94.36 -93.51 -92.93 -92.45 710 1.01
##
## Samples were drawn using HMC(diag_e) at Sun Feb 28 22:05:27 2021.
## For each parameter, n_eff is a crude measure of effective sample size,
## and Rhat is the potential scale reduction factor on split chains (at
## convergence, Rhat=1).

##
## Call:
## lm(formula = y ~ x)
##
## Coefficients:
## (Intercept) x
## -87.124 1.543
## [1] -87.12175
## [1] 4000
LS0tDQp0aXRsZTogJ0JheWVzaWFuIE1vZGVsbGluZyB3aXRoIFJzdGFuJw0KYXV0aG9yOiAnQXV0aG9yOiBOZ3V5ZW4gQ2hpIER1bmcnDQpzdWJ0aXRsZTogIlIgQmF5ZXNpYW4gU3RhdGlzdGljcyBTZXJpZXMiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICAjIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGhpZ2hsaWdodDogemVuYnVybg0KICAgICMgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0aGVtZTogImZsYXRseSINCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQpgYGB7ciBzZXR1cCxpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgY2FjaGUgPSBUUlVFKQ0KDQpgYGANCg0KIVtdKEM6L1VzZXJzL0FETUlOLy9Eb2N1bWVudHMvL1N0YW5pc2xhd19VbGFtLnRpZi5qcGcpDQoNCiMgQW4gRXhhbXBsZQ0KDQpgYGB7cn0NCiMgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1yc3RhbitleGFtcGxlJmVpPTZaUTdZTXZkSkthUXI3d1A4NG1mb0E0JnN0YXJ0PTEwJnNhPU4mdmVkPTJhaFVLRXdpTDl1V24wb3p2QWhVbXlJc0JIZlBFQi1RUTh0TURlZ1FJQlJBMCZiaXc9MTY1MyZiaWg9OTAyDQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgIFByZXBhcmUgZGF0YSBmb3Igc3RhbiBwcm9ncmFtDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpOIDwtIG5yb3codHJlZXMpDQp4IDwtIHRyZWVzJEhlaWdodA0KeSA8LSB0cmVlcyRWb2x1bWUNCg0Kc3Rhbl9kYXRhIDwtIGxpc3QoTiA9IE4sIHggPSB4LCB5ID0geSkNCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojICAgICAgICAgIFN0YW4gY29kZQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCnN0YW5fbW9kZWwgPC0gIg0KDQpkYXRhIHsNCiAgaW50IDwgbG93ZXIgPSAxID4gTjsgLy8gU2FtcGxlIHNpemUNCiAgdmVjdG9yW05dIHg7IC8vIFByZWRpY3Rvcg0KICB2ZWN0b3JbTl0geTsgLy8gT3V0Y29tZQ0KfQ0KDQpwYXJhbWV0ZXJzIHsNCiAgcmVhbCBhbHBoYTsgLy8gSW50ZXJjZXB0DQogIHJlYWwgYmV0YTsgLy8gU2xvcGUgKHJlZ3Jlc3Npb24gY29lZmZpY2llbnRzKQ0KICByZWFsIDwgbG93ZXIgPSAwID4gc2lnbWE7IC8vIEVycm9yIFNEDQp9DQoNCm1vZGVsIHsNCiAgeSB+IG5vcm1hbChhbHBoYSArIHggKiBiZXRhICwgc2lnbWEpOw0KICAgDQp9Ig0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgICBGaXQgQmF5ZXNpYW4gTW9kZWwgd2l0aCBwcm9wZXIgcHJpb3JzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyBmaXQyIDwtIHN0YW4obW9kZWxfY29kZSA9IHN0YW5fbW9kZWwsIGRhdGEgPSBzdGFuX2RhdGEsIGl0ZXIgPSAxMDAwLCBjaGFpbnMgPSA0KQ0KDQpsaWJyYXJ5KHJzdGFuKQ0KDQpvcHRpb25zKG1jLmNvcmVzID0gcGFyYWxsZWw6OmRldGVjdENvcmVzKCkpDQoNCnJzdGFuX29wdGlvbnMoYXV0b193cml0ZSA9IFRSVUUpDQoNCnN5c3RlbS50aW1lKA0KICBmaXQgPC0gc3RhbihmaWxlID0gImJheWVzaWFuX3JlZy5zdGFuIiwgDQogICAgICAgICAgICAgIGRhdGEgPSBzdGFuX2RhdGEsIA0KICAgICAgICAgICAgICB3YXJtdXAgPSAxMDAwLCANCiAgICAgICAgICAgICAgaXRlciA9IDIwMDAsIA0KICAgICAgICAgICAgICBjaGFpbnMgPSA0LCANCiAgICAgICAgICAgICAgYWxnb3JpdGhtID0gIkhNQyIsIA0KICAgICAgICAgICAgICB2ZXJib3NlID0gVFJVRSwgDQogICAgICAgICAgICAgIHNlZWQgPSAyOSkNCiAgKQ0KDQojIFJlc3VsdHM6IA0KDQpmaXQNCg0KYGBgDQoNCmBgYHtyfQ0KdHJhY2VwbG90KGZpdCwgcGFycyA9IGMoImFscGhhIiwgImJldGEiLCAic2lnbWEiKSwgbnJvdyA9IDMpDQpgYGANCg0KDQpgYGB7cn0NCiMgQ29tcGFyZTogDQoNCmxtKHkgfiB4KQ0KDQojIE1vcmUgaW5mb3JtYXRpb246IA0KDQpmaXRfZXggPC0gcnN0YW46OmV4dHJhY3QoZml0KQ0KDQptZWFuKGZpdF9leCRhbHBoYSkNCg0KbGVuZ3RoKGZpdF9leCRhbHBoYSkNCmBgYA0KDQo=