--- title: "Multiple Raters in Stan" output: html_notebook --- ```{r setup, include=FALSE} knitr::opts_chunk\$set(echo = TRUE) library(nlme) library(rstan) library(shinystan) ``` _Models for adjusting individual ratings: a committee of 10 persons is evaluating 100 job applicants. Each person on the committee reads 30 applications (structured so that each application is read by 3 people) and gives a numerical rating between 1 and 10._ _(a) It would be nautal to rate the applications based on their combined scores; however, there is aworry that different raters use different standards (severity) and we would like to correct for this. Set up a model for the ratings (with parameters for the applicants and the raters)._ ```{r data setup} I <- 100L # applicants J <- 10L # raters W <- 3L # ratings per applicant #assignments <- read.csv("assignment.csv") ratings <- read.csv("Bayesian/ratings.csv") ``` ```{stan output.var="ratings.stan"} data { int I; //Number of applicants int J; //Number of raters int W; //Ratings per applicant int applicant[I*W]; int rater[I*W]; real rating[I*W]; } parameters { real ability[I]; real severity[J]; //Variance parameters real sigma; //rating level SD real tau; //rater level SD } transformed parameters { real expRating[I*W]; for (i in 1:(I*W)) expRating[i] = ability[applicant[i]] + severity[rater[i]]; } model { // Ability and severity ability ~ uniform(1,10); severity ~ normal(0,tau); // Data probability (likelihood) rating ~ normal(expRating,sigma); // Priors for sigma and tau } ``` ## Next step is to prep the data Put it all into one big list. Make sure the names match the names in the data block. ```{r data object} ratings.data <- list( I = I, J=J, W=W, applicant = ratings\$applicant, rater=ratings\$rater, rating=ratings\$rating ) ``` ## Now Run Stan ```{r run stan, echo=TRUE} options(mc.cores = 5) ratings.fit1 <- sampling( ratings.stan, # The model data = ratings.data, # The data chains = 5, warmup = 1000, iter = 2000, refresh=1000 # Show progress ) summary(ratings.fit1) ``` ```{r shinystan} ratings.fit1s <-launch_shinystan(ratings.fit1) ```