diff --git a/anno-difficulty/paper/pvalues.py b/anno-difficulty/paper/pvalues.py index 79b9348..f64bfa1 100644 --- a/anno-difficulty/paper/pvalues.py +++ b/anno-difficulty/paper/pvalues.py @@ -19,16 +19,18 @@ data = { 'I': I, 'J': J, 'N': N, 'item': item, 'rater': rater, 'rating': rating } init = { 'prev': 0.2, + 'sigma': 1, 'sens': np.full(J, 2), 'spec': np.full(J, 2), 'diff': np.full(I, 0.0) } model = csp.CmdStanModel(stan_file = '../stan/revised-1pl.stan') sample = model.sample(data = data, show_console = True, refresh = 10, - iter_warmup=200, iter_sampling=200, - parallel_chains = 4, - chains = 2, inits = init, - seed = 92584) + iter_warmup=1000, iter_sampling=1000, + parallel_chains = 4, adapt_delta=0.9, + chains = 4, inits = init, + seed = 837689) +# ACTUAL W DENTISTRY: [1880,1065,404,247,173,100] # ORIGINAL # y = df.pivot(index='item', columns='coder', values='response').to_numpy() diff --git a/anno-difficulty/stan/revised-1pl.stan b/anno-difficulty/stan/revised-1pl.stan index 1d4da7c..17a055f 100644 --- a/anno-difficulty/stan/revised-1pl.stan +++ b/anno-difficulty/stan/revised-1pl.stan @@ -30,13 +30,16 @@ parameters { real prev; vector[J] spec; vector[J] sens; - vector[I] diff; + real sigma; + vector[I] diff; + // vector[I] diff; } model { prev ~ uniform(0, 1); sens ~ normal(0, 3); spec ~ normal(0, 3); - diff ~ normal(0, 1); + sigma ~ lognormal(0, 1); + diff ~ normal(0, 1.5); vector[I] lp_pos = rep_vector(log(prev), I); vector[I] lp_neg = rep_vector(log1m(prev), I); for (n in 1:N) { diff --git a/sushi-rating/plackett-luce-vectorized.stan b/sushi-rating/plackett-luce-vectorized.stan new file mode 100644 index 0000000..9c94158 --- /dev/null +++ b/sushi-rating/plackett-luce-vectorized.stan @@ -0,0 +1,22 @@ +functions { + real plackett_luce_lpmf(array[] int y, vector beta) { + vector[size(y)] beta_y = beta[y]; + // return sum(log(beta_y ./ cumulative_sum(beta_y))); + return sum(log(beta_y) - log(cumulative_sum(beta_y))); + } +} +data { + int I; // # items + int K; // # items ranked per rater + int R; // # raters + array[R, K] int y; // rankings (y[r, 1] < y[r, 2] < ...) +} +parameters { + simplex[I] beta; // item quality +} +model { + vector[I] log_beta = log(beta); + for (r in 1:R) { + y[r] ~ plackett_luce(beta); + } +}