data { int nM; // # of measurements int nP; // # of parts int nO; // # of operators vector[nM] y; // measurements int part[nM]; // part indicator int oper[nM]; // operator indicator real sigmaPest; // scale for sigmaP prior real sigmaRepEst; // scale for sigmaRep prior real sigmaOest; // scale for sigmaO prior } transformed data { real my; // mean of y real sdy; // st dev of y my = mean(y); sdy = sd(y); } parameters { real muP; // part mean real sigmaP; // part sigma real sigmaRep; // repeatability sigma real sigmaO; // operator sigma vector[nP] P; vector[nO] O; } model { muP ~ cauchy(my,10*sdy/sqrt(nM)); // muP prior sigmaP ~ cauchy(sigmaPest,10*sigmaPest/sqrt(nP)); // sigmaP prior sigmaRep ~ cauchy(sigmaRepEst,10*sigmaRepEst/sqrt(nM)); // sigmaRep prior sigmaO ~ cauchy(sigmaOest,10*sigmaOest/sqrt(nO)); // sigmaO prior P ~ normal(0,sigmaP); O ~ normal(0,sigmaO); y ~ normal(muP + P[part] + O[oper],sigmaRep); } generated quantities { real sigmaG; real sigmaTot; real sigGtoTot; sigmaG = sqrt(square(sigmaRep) + square(sigmaO)); sigmaTot = sqrt(square(sigmaG) + square(sigmaP)); sigGtoTot = sigmaG ./ sigmaTot;