I am a newbie in the field of R and Rstan, and the following stan code is from a literature by kanen et al. (2019). I am trying to replicate their results. However, whenever I check this stan code, it would report a bug like:
“Error in stanc(filename, allow_undefined = TRUE) :
parser failed badly; maybe try installing the V8 package”.
I have sought help from ChatGPT or New Bing, and I installed the package “V8”, updated the R and Rstan, restarted R, as AI suggested. However, this error persisted.
I would really appreciate it if you could help me with this difficulty. The stan code is as follows:
functions {
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Common functions
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ... substitute in R while there's a bug in rstan's path specification to stan's #include
// #include commonfunc.stan
}
data {
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Data
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ... substitute in R while there's a bug in rstan's path specification to stan's #include
// #include data.stan
}
transformed data {
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Constants
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ... substitute in R while there's a bug in rstan's path specification to stan's #include
// #include constants.stan
}
parameters {
// ========================================================================
// Fixed effects
// ========================================================================
// Some lengthy thought into the best way to code this (e.g. cells means
// vs effect/dummy coding); see scanned paper document.
real<lower=0, upper=1> reward_rate_by_group_drug[N_GROUPS, N_DRUGS];
real<lower=0, upper=1> punish_rate_by_group_drug[N_GROUPS, N_DRUGS];
real<lower=0> reinf_sensitivity_by_group_drug[N_GROUPS, N_DRUGS];
real side_stickiness_by_group_drug[N_GROUPS, N_DRUGS];
real stimulus_stickiness_by_group_drug[N_GROUPS, N_DRUGS];
// ========================================================================
// Random effects
// ========================================================================
real<lower=0> reward_rate_intersubject_sd;
real<lower=0> punish_rate_intersubject_sd;
real<lower=0> reinf_sensitivity_intersubject_sd;
real<lower=0> side_stickiness_intersubject_sd;
real<lower=0> stimulus_stickiness_intersubject_sd;
vector[N_SUBJECTS] reward_rate_subject_effect_raw_unit_normal;
vector[N_SUBJECTS] punish_rate_subject_effect_raw_unit_normal;
vector[N_SUBJECTS] reinf_sensitivity_subject_effect_raw_unit_normal;
vector[N_SUBJECTS] side_stickiness_subject_effect_raw_unit_normal;
vector[N_SUBJECTS] stimulus_stickiness_subject_effect_raw_unit_normal;
}
transformed parameters {
vector[N_SUBJECTS] reward_rate_subject_effect;
vector[N_SUBJECTS] punish_rate_subject_effect;
vector[N_SUBJECTS] reinf_sensitivity_subject_effect;
vector[N_SUBJECTS] side_stickiness_subject_effect;
vector[N_SUBJECTS] stimulus_stickiness_subject_effect;
reward_rate_subject_effect = getReparameterizedNormal_VRR_lp(
reward_rate_subject_effect_raw_unit_normal,
0, reward_rate_intersubject_sd);
punish_rate_subject_effect = getReparameterizedNormal_VRR_lp(
punish_rate_subject_effect_raw_unit_normal,
0, punish_rate_intersubject_sd);
reinf_sensitivity_subject_effect = getReparameterizedNormal_VRR_lp(
reinf_sensitivity_subject_effect_raw_unit_normal,
0, reinf_sensitivity_intersubject_sd);
side_stickiness_subject_effect = getReparameterizedNormal_VRR_lp(
side_stickiness_subject_effect_raw_unit_normal,
0, side_stickiness_intersubject_sd);
stimulus_stickiness_subject_effect = getReparameterizedNormal_VRR_lp(
stimulus_stickiness_subject_effect_raw_unit_normal,
0, stimulus_stickiness_intersubject_sd);
}
model {
// Calculated probability of choosing the right-hand-side (RHS) stimulus:
vector[N_TRIALS] p_choose_rhs;
// ========================================================================
// Specify priors
// ========================================================================
sampleBeta_2RR_lp(reward_rate_by_group_drug, PRIOR_BETA_SHAPE1, PRIOR_BETA_SHAPE2);
sampleBeta_2RR_lp(punish_rate_by_group_drug, PRIOR_BETA_SHAPE1, PRIOR_BETA_SHAPE2);
sampleGamma_2RR_lp(reinf_sensitivity_by_group_drug, PRIOR_GAMMA_ALPHA_FOR_REINF_SENSITIVITY_MEAN, PRIOR_GAMMA_BETA_FOR_REINF_SENSITIVITY_MEAN); // positive only
sampleNormal_2RR_lp(side_stickiness_by_group_drug, 0, 1); // can be negative; see Christakou (2013)
sampleNormal_2RR_lp(stimulus_stickiness_by_group_drug, 0, 1);
sampleNormalLowerBound_RRR_lp(reward_rate_intersubject_sd, 0, PRIOR_HALF_NORMAL_SD_FOR_SD_IN_RANGE_0_1, 0); // lower bound of 0
sampleNormalLowerBound_RRR_lp(punish_rate_intersubject_sd, 0, PRIOR_HALF_NORMAL_SD_FOR_SD_IN_RANGE_0_1, 0); // lower bound of 0
sampleNormalLowerBound_RRR_lp(reinf_sensitivity_intersubject_sd, 0, PRIOR_HALF_NORMAL_SIGMA_FOR_REINF_SENSITIVITY_SD, 0); // lower bound of 0
sampleNormalLowerBound_RRR_lp(side_stickiness_intersubject_sd, 0, PRIOR_HALF_NORMAL_SD_FOR_SD_IN_RANGE_0_1, 0); // lower bound of 0
sampleNormalLowerBound_RRR_lp(stimulus_stickiness_intersubject_sd, 0, PRIOR_HALF_NORMAL_SD_FOR_SD_IN_RANGE_0_1, 0); // lower bound of 0
// ========================================================================
// Reinforcement learning model: calculates p_choose_rhs
// ========================================================================
{
// Start a new block because we will define local-only variables.
// NO RANGE CONSTRAINTS allowed here.
// Keeping track of the current subject/drug
int s = 0; // current subject, starting with an invalid value
int d; // current drug
// Value tracking
vector[N_STIMULI] stim_value; // value of each stimulus; range -1 to +1
// Temporary variables: RL calculations
vector[N_SIDES] values_left_right;
vector[N_SIDES] side_stickiness_left_right; // integer contents, but needs to be real for vector multiplication
vector[N_SIDES] stimulus_stickiness_left_right; // integer contents, but needs to be real for vector multiplication
vector[N_SIDES] softmax_inputs;
int first_trial_of_drug; // stickiness only makes sense for trialnum > 1
int chosen_stimulus_index; // takes values 1 ... N_STIMULI
real predicted_outcome;
real actual_outcome;
real prediction_error;
real value_change;
// Temporary variables: final parameter values
// NO RANGE CONSTRAINTS PERMITTED HERE.
real reward_rate_final;
real punish_rate_final;
real reinf_sensitivity_final;
real side_stickiness_final;
real stimulus_stickiness_final;
real temp_new_value;
// Iterate through trials
for (t in 1:N_TRIALS) {
// Starting a new subject? Read subject parameters and reset discrimination.
if (s != subject[t]) {
s = subject[t];
d = 0; // invalid value; will trigger the "new drug" code below
}
// Starting a new drug? Reset starting values.
if (d != drug[t]) {
int g = group_membership[s];
d = drug[t];
first_trial_of_drug = 1;
for (stim in 1:N_STIMULI) { // better way to assign to a vector??
stim_value[stim] = 0; // all stimuli start with neutral value
}
reward_rate_final = reward_rate_by_group_drug[g, d] + reward_rate_subject_effect[s];
punish_rate_final = punish_rate_by_group_drug[g, d] + punish_rate_subject_effect[s];
reinf_sensitivity_final = reinf_sensitivity_by_group_drug[g, d] + reinf_sensitivity_subject_effect[s];
side_stickiness_final = side_stickiness_by_group_drug[g, d] + side_stickiness_subject_effect[s];
stimulus_stickiness_final = stimulus_stickiness_by_group_drug[g, d] + stimulus_stickiness_subject_effect[s];
reward_rate_final = bound(reward_rate_final, 0, 1);
punish_rate_final = bound(punish_rate_final, 0, 1);
reinf_sensitivity_final = boundLower(reinf_sensitivity_final, 0);
// side_stickiness_final may be negative
// stimulus_stickiness_final may be negative
} else {
first_trial_of_drug = 0;
}
// Value:
values_left_right[LEFT] = stim_value[left_stimulus[t]];
values_left_right[RIGHT] = stim_value[right_stimulus[t]];
// Side stickiness:
if (!first_trial_of_drug) {
// Assign 1 to the side the subject responded to on the last
// trial, and 0 to the other side.
side_stickiness_left_right[RIGHT] = responded_right[t - 1];
side_stickiness_left_right[LEFT] = 1 - responded_right[t - 1];
} else {
// no better way of assigning constant to vector?
side_stickiness_left_right[RIGHT] = 0;
side_stickiness_left_right[LEFT] = 0;
}
// Stimulus stickiness:
if (!first_trial_of_drug) {
// If the stimulus on the right is the same stimulus that the
// subject responded to on the last trial, "right" gets the
// value 1. Otherwise 0. And similarly for left.
int stimulus_chosen_last_trial =
responded_right[t - 1]
? right_stimulus[t - 1]
: left_stimulus[t - 1];
stimulus_stickiness_left_right[RIGHT] = right_stimulus[t] == stimulus_chosen_last_trial ? 1 : 0;
stimulus_stickiness_left_right[LEFT] = left_stimulus[t] == stimulus_chosen_last_trial ? 1 : 0;
} else {
stimulus_stickiness_left_right[RIGHT] = 0;
stimulus_stickiness_left_right[LEFT] = 0;
}
// ----------------------------------------------------------------
// Calculate p
// ----------------------------------------------------------------
softmax_inputs = (
reinf_sensitivity_final * values_left_right +
side_stickiness_final * side_stickiness_left_right +
stimulus_stickiness_final * stimulus_stickiness_left_right
);
p_choose_rhs[t] = softmaxNth(softmax_inputs, RIGHT);
// ----------------------------------------------------------------
// Update
// ----------------------------------------------------------------
// We update the value of the thing we chose based on the outcome
// we received.
if (responded_right[t]) {
chosen_stimulus_index = right_stimulus[t];
} else {
chosen_stimulus_index = left_stimulus[t];
}
predicted_outcome = stim_value[chosen_stimulus_index];
actual_outcome = outcome[t];
prediction_error = actual_outcome - predicted_outcome;
// Since stimulus value starts in the range 0 to +1, and the
// actual outcome is also in the range 0 to +1, the prediction
// error has the range 0 to +1.
if (prediction_error > 0) {
// better than expected: reward, or extinction of punishment
value_change = prediction_error * reward_rate_final;
} else {
// worse than expected: punishment, or extinction of reward
// (or prediction_error == 0, in which case it
// doesn't matter which rate constant we're using!)
value_change = prediction_error * punish_rate_final;
}
// The actual update:
temp_new_value = predicted_outcome + value_change;
// ^^^^^^^^^^^^^^^^^
// ... NB this is stim_value[chosen_stimulus_index], but it saves
// an extra array lookup step.
if (temp_new_value < 0.0 || temp_new_value > 1.0) {
reject("Error: stimulus value out of range [0, 1]!");
}
stim_value[chosen_stimulus_index] = temp_new_value;
// Expressed in two equivalent ways, for a single rate example,
// with v for value:
// (1) prediction_error[t] = reinforcement[t] - v[t]
// v[t+1] = v[t] + rate * prediction_error[t]
//
// (2) v[t+1] = rate * reinforcement[t] + (1 - rate) * v[t]
// ... capturing the "spontaneous decay" element
//
// Equivalence:
// from (1): v[t+1] = v[t] + rate * (reinforcement[t] - v[t])
// = v[t] + rate * reinforcement[t] - rate * v[t]
// = rate * reinforcement[t] + (1 - rate) * v[t]
}
}
// ========================================================================
// Final fit to behaviour
// ========================================================================
sampleBernoulli_AV_lp(responded_right, p_choose_rhs);
// ... actual choices predicted from our model-calculated probabilities
// ... Stan will try to match the model to the behaviour via this.
}
generated quantities {
// ========================================================================
// Other stuff we're interested in measuring
// ========================================================================
// gmd = group mean difference; ct = contrast
// ------------------------------------------------------------------------
// Specific interactions/contrasts of interest
// ------------------------------------------------------------------------
// "How do the groups differ intrinsically (on placebo)?"
real gmd_reward_rate_placebo_ocd_minus_control =
reward_rate_by_group_drug[OCD_GROUP, PLACEBO_DRUG] -
reward_rate_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_reward_rate_placebo_stimulant_minus_control =
reward_rate_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
reward_rate_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_reward_rate_placebo_stimulant_minus_ocd =
reward_rate_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
reward_rate_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real gmd_punish_rate_placebo_ocd_minus_control =
punish_rate_by_group_drug[OCD_GROUP, PLACEBO_DRUG] -
punish_rate_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_punish_rate_placebo_stimulant_minus_control =
punish_rate_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
punish_rate_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_punish_rate_placebo_stimulant_minus_ocd =
punish_rate_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
punish_rate_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real gmd_reinf_sensitivity_placebo_ocd_minus_control =
reinf_sensitivity_by_group_drug[OCD_GROUP, PLACEBO_DRUG] -
reinf_sensitivity_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_reinf_sensitivity_placebo_stimulant_minus_control =
reinf_sensitivity_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
reinf_sensitivity_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_reinf_sensitivity_placebo_stimulant_minus_ocd =
reinf_sensitivity_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
reinf_sensitivity_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real gmd_side_stickiness_placebo_ocd_minus_control =
side_stickiness_by_group_drug[OCD_GROUP, PLACEBO_DRUG] -
side_stickiness_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_side_stickiness_placebo_stimulant_minus_control =
side_stickiness_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
side_stickiness_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_side_stickiness_placebo_stimulant_minus_ocd =
side_stickiness_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
side_stickiness_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real gmd_stimulus_stickiness_placebo_ocd_minus_control =
stimulus_stickiness_by_group_drug[OCD_GROUP, PLACEBO_DRUG] -
stimulus_stickiness_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_stimulus_stickiness_placebo_stimulant_minus_control =
stimulus_stickiness_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
stimulus_stickiness_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real gmd_stimulus_stickiness_placebo_stimulant_minus_ocd =
stimulus_stickiness_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG] -
stimulus_stickiness_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
// "What do the drugs do in the control group?"
real ct_reward_rate_amisulpride_effect_in_control_group =
reward_rate_by_group_drug[CONTROL_GROUP, AMISULPRIDE_DRUG] -
reward_rate_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real ct_reward_rate_pramipexole_effect_in_control_group =
reward_rate_by_group_drug[CONTROL_GROUP, PRAMIPEXOLE_DRUG] -
reward_rate_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real ct_punish_rate_amisulpride_effect_in_control_group =
punish_rate_by_group_drug[CONTROL_GROUP, AMISULPRIDE_DRUG] -
punish_rate_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real ct_punish_rate_pramipexole_effect_in_control_group =
punish_rate_by_group_drug[CONTROL_GROUP, PRAMIPEXOLE_DRUG] -
punish_rate_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real ct_reinf_sensitivity_amisulpride_effect_in_control_group =
reinf_sensitivity_by_group_drug[CONTROL_GROUP, AMISULPRIDE_DRUG] -
reinf_sensitivity_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real ct_reinf_sensitivity_pramipexole_effect_in_control_group =
reinf_sensitivity_by_group_drug[CONTROL_GROUP, PRAMIPEXOLE_DRUG] -
reinf_sensitivity_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real ct_side_stickiness_amisulpride_effect_in_control_group =
side_stickiness_by_group_drug[CONTROL_GROUP, AMISULPRIDE_DRUG] -
side_stickiness_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real ct_side_stickiness_pramipexole_effect_in_control_group =
side_stickiness_by_group_drug[CONTROL_GROUP, PRAMIPEXOLE_DRUG] -
side_stickiness_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real ct_stimulus_stickiness_amisulpride_effect_in_control_group =
stimulus_stickiness_by_group_drug[CONTROL_GROUP, AMISULPRIDE_DRUG] -
stimulus_stickiness_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
real ct_stimulus_stickiness_pramipexole_effect_in_control_group =
stimulus_stickiness_by_group_drug[CONTROL_GROUP, PRAMIPEXOLE_DRUG] -
stimulus_stickiness_by_group_drug[CONTROL_GROUP, PLACEBO_DRUG];
// "... in the stimulant abuse group?"
real ct_reward_rate_amisulpride_effect_in_stimulant_group =
reward_rate_by_group_drug[STIMULANT_GROUP, AMISULPRIDE_DRUG] -
reward_rate_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
real ct_reward_rate_pramipexole_effect_in_stimulant_group =
reward_rate_by_group_drug[STIMULANT_GROUP, PRAMIPEXOLE_DRUG] -
reward_rate_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
real ct_punish_rate_amisulpride_effect_in_stimulant_group =
punish_rate_by_group_drug[STIMULANT_GROUP, AMISULPRIDE_DRUG] -
punish_rate_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
real ct_punish_rate_pramipexole_effect_in_stimulant_group =
punish_rate_by_group_drug[STIMULANT_GROUP, PRAMIPEXOLE_DRUG] -
punish_rate_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
real ct_reinf_sensitivity_amisulpride_effect_in_stimulant_group =
reinf_sensitivity_by_group_drug[STIMULANT_GROUP, AMISULPRIDE_DRUG] -
reinf_sensitivity_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
real ct_reinf_sensitivity_pramipexole_effect_in_stimulant_group =
reinf_sensitivity_by_group_drug[STIMULANT_GROUP, PRAMIPEXOLE_DRUG] -
reinf_sensitivity_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
real ct_side_stickiness_amisulpride_effect_in_stimulant_group =
side_stickiness_by_group_drug[STIMULANT_GROUP, AMISULPRIDE_DRUG] -
side_stickiness_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
real ct_side_stickiness_pramipexole_effect_in_stimulant_group =
side_stickiness_by_group_drug[STIMULANT_GROUP, PRAMIPEXOLE_DRUG] -
side_stickiness_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
real ct_stimulus_stickiness_amisulpride_effect_in_stimulant_group =
stimulus_stickiness_by_group_drug[STIMULANT_GROUP, AMISULPRIDE_DRUG] -
stimulus_stickiness_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
real ct_stimulus_stickiness_pramipexole_effect_in_stimulant_group =
stimulus_stickiness_by_group_drug[STIMULANT_GROUP, PRAMIPEXOLE_DRUG] -
stimulus_stickiness_by_group_drug[STIMULANT_GROUP, PLACEBO_DRUG];
// "... in the OCD group?"
real ct_reward_rate_amisulpride_effect_in_ocd_group =
reward_rate_by_group_drug[OCD_GROUP, AMISULPRIDE_DRUG] -
reward_rate_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real ct_reward_rate_pramipexole_effect_in_ocd_group =
reward_rate_by_group_drug[OCD_GROUP, PRAMIPEXOLE_DRUG] -
reward_rate_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real ct_punish_rate_amisulpride_effect_in_ocd_group =
punish_rate_by_group_drug[OCD_GROUP, AMISULPRIDE_DRUG] -
punish_rate_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real ct_punish_rate_pramipexole_effect_in_ocd_group =
punish_rate_by_group_drug[OCD_GROUP, PRAMIPEXOLE_DRUG] -
punish_rate_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real ct_reinf_sensitivity_amisulpride_effect_in_ocd_group =
reinf_sensitivity_by_group_drug[OCD_GROUP, AMISULPRIDE_DRUG] -
reinf_sensitivity_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real ct_reinf_sensitivity_pramipexole_effect_in_ocd_group =
reinf_sensitivity_by_group_drug[OCD_GROUP, PRAMIPEXOLE_DRUG] -
reinf_sensitivity_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real ct_side_stickiness_amisulpride_effect_in_ocd_group =
side_stickiness_by_group_drug[OCD_GROUP, AMISULPRIDE_DRUG] -
side_stickiness_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real ct_side_stickiness_pramipexole_effect_in_ocd_group =
side_stickiness_by_group_drug[OCD_GROUP, PRAMIPEXOLE_DRUG] -
side_stickiness_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real ct_stimulus_stickiness_amisulpride_effect_in_ocd_group =
stimulus_stickiness_by_group_drug[OCD_GROUP, AMISULPRIDE_DRUG] -
stimulus_stickiness_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
real ct_stimulus_stickiness_pramipexole_effect_in_ocd_group =
stimulus_stickiness_by_group_drug[OCD_GROUP, PRAMIPEXOLE_DRUG] -
stimulus_stickiness_by_group_drug[OCD_GROUP, PLACEBO_DRUG];
// "Is the effect of amisulpride different in stimulant abusers to controls?"
real ct_reward_rate_amisulpride_effect_for_stimulant_minus_control = (
ct_reward_rate_amisulpride_effect_in_stimulant_group -
ct_reward_rate_amisulpride_effect_in_control_group
);
real ct_punish_rate_amisulpride_effect_for_stimulant_minus_control = (
ct_punish_rate_amisulpride_effect_in_stimulant_group -
ct_punish_rate_amisulpride_effect_in_control_group
);
real ct_reinf_sensitivity_amisulpride_effect_for_stimulant_minus_control = (
ct_reinf_sensitivity_amisulpride_effect_in_stimulant_group -
ct_reinf_sensitivity_amisulpride_effect_in_control_group
);
real ct_side_stickiness_amisulpride_effect_for_stimulant_minus_control = (
ct_side_stickiness_amisulpride_effect_in_stimulant_group -
ct_side_stickiness_amisulpride_effect_in_control_group
);
real ct_stimulus_stickiness_amisulpride_effect_for_stimulant_minus_control = (
ct_stimulus_stickiness_amisulpride_effect_in_stimulant_group -
ct_stimulus_stickiness_amisulpride_effect_in_control_group
);
// "... and of pramipexole?"
real ct_reward_rate_pramipexole_effect_for_stimulant_minus_control = (
ct_reward_rate_pramipexole_effect_in_stimulant_group -
ct_reward_rate_pramipexole_effect_in_control_group
);
real ct_punish_rate_pramipexole_effect_for_stimulant_minus_control = (
ct_punish_rate_pramipexole_effect_in_stimulant_group -
ct_punish_rate_pramipexole_effect_in_control_group
);
real ct_reinf_sensitivity_pramipexole_effect_for_stimulant_minus_control = (
ct_reinf_sensitivity_pramipexole_effect_in_stimulant_group -
ct_reinf_sensitivity_pramipexole_effect_in_control_group
);
real ct_side_stickiness_pramipexole_effect_for_stimulant_minus_control = (
ct_side_stickiness_pramipexole_effect_in_stimulant_group -
ct_side_stickiness_pramipexole_effect_in_control_group
);
real ct_stimulus_stickiness_pramipexole_effect_for_stimulant_minus_control = (
ct_stimulus_stickiness_pramipexole_effect_in_stimulant_group -
ct_stimulus_stickiness_pramipexole_effect_in_control_group
);
// "Is the effect of amisulpride different in OCD to controls?"
real ct_reward_rate_amisulpride_effect_for_ocd_minus_control = (
ct_reward_rate_amisulpride_effect_in_ocd_group -
ct_reward_rate_amisulpride_effect_in_control_group
);
real ct_punish_rate_amisulpride_effect_for_ocd_minus_control = (
ct_punish_rate_amisulpride_effect_in_ocd_group -
ct_punish_rate_amisulpride_effect_in_control_group
);
real ct_reinf_sensitivity_amisulpride_effect_for_ocd_minus_control = (
ct_reinf_sensitivity_amisulpride_effect_in_ocd_group -
ct_reinf_sensitivity_amisulpride_effect_in_control_group
);
real ct_side_stickiness_amisulpride_effect_for_ocd_minus_control = (
ct_side_stickiness_amisulpride_effect_in_ocd_group -
ct_side_stickiness_amisulpride_effect_in_control_group
);
real ct_stimulus_stickiness_amisulpride_effect_for_ocd_minus_control = (
ct_stimulus_stickiness_amisulpride_effect_in_ocd_group -
ct_stimulus_stickiness_amisulpride_effect_in_control_group
);
// "... and of pramipexole?"
real ct_reward_rate_pramipexole_effect_for_ocd_minus_control = (
ct_reward_rate_pramipexole_effect_in_ocd_group -
ct_reward_rate_pramipexole_effect_in_control_group
);
real ct_punish_rate_pramipexole_effect_for_ocd_minus_control = (
ct_punish_rate_pramipexole_effect_in_ocd_group -
ct_punish_rate_pramipexole_effect_in_control_group
);
real ct_reinf_sensitivity_pramipexole_effect_for_ocd_minus_control = (
ct_reinf_sensitivity_pramipexole_effect_in_ocd_group -
ct_reinf_sensitivity_pramipexole_effect_in_control_group
);
real ct_side_stickiness_pramipexole_effect_for_ocd_minus_control = (
ct_side_stickiness_pramipexole_effect_in_ocd_group -
ct_side_stickiness_pramipexole_effect_in_control_group
);
real ct_stimulus_stickiness_pramipexole_effect_for_ocd_minus_control = (
ct_stimulus_stickiness_pramipexole_effect_in_ocd_group -
ct_stimulus_stickiness_pramipexole_effect_in_control_group
);
}
Edited by @jsocolar for syntax highlighting