Dear all,
My apologies for sending so many messages. I’m relatively new to Stan and I’m encountering errors that I am not sure how to handle. I’m running a simple one way anova with a hierarchical structure. The code is here
title: “rstan one way random effects ANOVA example”
subtitle: “EP 965”
author: “David Kaplan”
date: “8/29/2020”
output:
html_document: default
pdf_document: default
knitr::opts_chunk$set(echo = TRUE)
library(rstan)
library(loo)
library(bayesplot)
Read in data
Canada <-read.csv("~/Desktop/Canada.csv",header=TRUE)
Canada[Canada==999999]=NA
Canada1 <- na.omit(Canada)
Canada1$schid <- as.numeric(as.factor(Canada1$IDSCHOOL))
Canada1 <- subset(Canada1, select=c(ASRREA01,schid))
attach(Canada1)
data.list <- with(Canada1, list(ASRREA01=ASRREA01,schid=schid, G = length(unique(Canada1$schid)), n = nrow(Canada1)))
Begin Stan Code. Notice that Stan uses // for comments
modelstring = "
// Comparison of G groups with common variance and
// hierarchical prior for the mean
data {
int<lower=0> n; // number of observations
int<lower=0> G; // number of groups
int<lower=1,upper=G> schid[n]; // discrete group indicators
vector[n] ASSREA01; // real valued observations
}
parameters {
real mu0; // prior mean
real<lower=0> sigma0; // prior std constrained to be positive
vector[G] mu; // group means
real<lower=0> sigma; // common std constrained to be positive
}
model {
mu0 ~ normal(10, 10); // weakly informative prior
sigma0 ~ normal(0, 10); // weakly informative prior
mu ~ normal(mu0, sigma0); // population prior with unknown parameters
sigma ~ lognormal(0, .5); // weakly informative prior
ASRREA01 ~ normal(mu[schid], sigma); // observation model / likelihood
}
"
Start estimation
nChains = 1
nIter= 10000
thinSteps = 1
burnInSteps = floor(nIter/2)
onewayAnova = stan(data=data.list,model_code=modelString,chains=nChains,
iter=nIter,warmup=burnInSteps,thin=thinSteps)
Stan plots
stan_plot(onewayAnova, pars=c("mu0","sigma0", "mu","sigma"))
Stan output
print(myfit2,pars=c("alpha","beta1","beta2","beta3","sigma"))
I get the following error
Error in stanc(file = file, model_code = model_code, model_name = model_name, : failed to parse Stan model ‘e943ae16db983eb9b320834178fc1a82’ due to the above error.
When I then look at what it is telling me, I see the following
31:
32: for (g in 1: G) {
33: mu_alpha[g] = gamma00 + gamma01*ACBG03A[g];
^
34: alpha[g] ~ normal(mu_alpha, sigma_alpha);
Notice that this code does not appear in my syntax at all. It’s as though it is picking up a problem with another program I’m running. Seems weird to me.
Thanks for your assistance,
David