my intended stan code is like below:
data {
int<lower=1,upper=39> nSubjects;
int<lower=1,upper=100> nTrials;
int<lower=1,upper=4> choice[nSubjects, nTrials];
real<lower=-1150, upper=100> reward[nSubjects, nTrials];
matrix [nSubjects, nTrials] NumA[nSubjects, nTrials];
matrix [nSubjects, nTrials] NumB[nSubjects, nTrials];
matrix [nSubjects, nTrials] NumC[nSubjects, nTrials];
matrix [nSubjects, nTrials] NumD[nSubjects, nTrials];
}
transformed data {
vector[4] initV; // initial values for V
vector[4] initu;
vector[1] initA;
vector[1] initB;
vector[1] initC;
vector[1] initD;
initV = rep_vector(0.0, 4);
initu = rep_vector(0.0, 4);
initA = rep_vector(0.0, 1);
initB = rep_vector(0.0, 1);
initC = rep_vector(0.0, 1);
initD = rep_vector(0.0, 1);
}
parameters {
// real<lower=0,upper=1>lr_mu;
// real<lower=0,upper=1>tau_mu;
// real<lower=0>lr_sd;
// real<lower=0>tau_sd;
real<lower=0,upper=1> lr[nSubjects];
real<lower=0,upper=2> c[nSubjects];
real<lower=0,upper=1> A[nSubjects];
real<lower=0,upper=5> loss_aversion[nSubjects];
}
model {
// lr_sd ~ cauchy(0,1);
/// tau_sd ~ cauchy(0,3);
// lr ~ normal(lr_mu,lr_sd);
// tau ~ normal(tau_mu,tau_sd);
}
generated quantities {
matrix [nSubjects,nTrials]choice_sim[nSubjects,nTrials];
matrix [nSubjects,nTrials]reward_sim[nSubjects,nTrials];
for (s in 1:nSubjects) {
vector[4] v;
vector[4] U;
real pe;
real theta;
v = initV;
U = initu;
for (t in 1:nTrials) {
// complete the foo-loop here
theta = pow(3,c[s])-1;
choice[s,t] = softmax(theta*v);
if(choice[s,t] == 1){
reward[s,t] = IGT_netincome[1,NumA];
NumA = NumA+1;
}else if(choice[s,t] == 2){
reward[s,t] = IGT_netincome[2,NumB];
NumB = NumB+1;
}else if(choice[s,t] == 3){
reward[s,t] = IGT_netincome[3,NumC];
NumC = NumC+1;
}else{
reward[s,t] = IGT_netincome[4,NumD];
NumD = NumD+1;
}
if (reward[s,t]>=0) {
U[choice[s,t]] = pow(reward[s,t],A[s]);
}else {
U[choice[s,t]] = -loss_aversion[s]*(pow(-reward[s,t],A[s]));}
v[choice[s,t]]=v[choice[s,t]]+lr[s]*pe;
pe = U[choice[s,t]]-v[choice[s,t]];
}
}
}
But I found it not applicable. Though it’s a model based on Rescolar-wagnar reinforcement learning model, it’s under the context of Iowa Gambling Task. In brief, I would like to produce choice behaviour based on RL model, however the choice should be interger from 1 to 4 because they can only select among the four given decks. The reward is hidden beneath the card and you will get a reward after picking a deck. Their relationship is stored in a matrix which means certain choices produce certain reward.
And as you know, the reward may be high or low, positive or negative, and it impacts the next trial of choice probability. The probability is described by softmax rules.
So How can I simulate such a dataset because I am in a mess between model fitting and parameter estimation and model simulation. If you have specifc suggestions on code above, I would really appreciate it! Thank you in advcance!