Hi everyone,
I hope this is the right place to post my question.
I am fitting a 7-parameter ddm with stan, I started with 4 parameters (with varying drift rates), stan worked fine. Then I started to add the inter-trial variability parameters following Franziska Henrich et al (2023) (PDF) The Seven-parameter Diffusion Model: an Implementation in Stan for Bayesian Analyses. It threw me errors.
I am using rstan. Please see the code and error below, and give me some advice. Thank you very much.
> library(rstan)
> stan_version()
[1] "2.32.2"
>
> d=read.csv('D:\\testdata.csv')
> dim(d)
[1] 500 3
> head(d)
S R RT
1 s1 r1 0.4162090
2 s1 r2 0.2611794
3 s1 r1 0.3572997
4 s1 r1 0.5121406
5 s1 r1 0.3895399
6 s1 r1 0.4885035
> d$R=ifelse(d$R=='r1',0,1)
> min_rt=min(d$RT)*0.99999
>
> stan_m='
+ data{
+ int <lower=0> n;
+ array[n] real rt;
+ array[n] int<lower=0,upper=1> response;
+ real min_rt;
+ }
+
+ parameters{
+ real<lower=0,upper=1> a;
+ real<lower=0,upper=1> w;
+ real<lower=0,upper=min_rt> t0;
+ real v0;
+ real v1;
+ real<lower=0> sv0;
+ real<lower=0> sv1;
+ real<lower=0,upper=1> sw;
+ real<lower=0> st0;
+ }
+
+ model{
+ for (i in 1:n){
+ if(response[i]==1)
+ {target+=wiener_lpdf(rt[i]|a,t0,w,v1,sv1,sw,st0);}
+ else
+ {target+=wiener_lpdf(rt[i]|a,t0,1-w,-v0,sv0,sw,st0);}
+ }
+ }
+ '
> stan_d=list(n=nrow(d),rt=as.numeric(d$RT),min_rt=min_rt,response=as.numeric(d$R))
> fit=stan(model_code=stan_m,data=stan_d,chains = 4,iter = 2000)
error stanc(file = file, model_code = model_code, model_name = model_name, :
0
Semantic error in 'string', line 8, column 27 to column 66:
-------------------------------------------------
6: model{
7: for (i in 1:n){
8: if(response[i]==1){target+=wiener_lpdf(rt[i]|a,t0,w,v1,sv1,sw,st0);}
^
9: else{target+=wiener_lpdf(rt[i]|a,t0,1-w,-v0,sv0,sw,st0);}
10: # y ∼ wiener_full(a, t0, w, v,sv,sw,st0 ).
-------------------------------------------------
Ill-typed arguments supplied to function 'wiener_lpdf':
(real, real, real, real, real, real, real, real)
Available signatures:
(row_vector, row_vector, row_vector, row_vector, row_vector) => real
Expected 5 arguments but found 8 arguments.
(vector, row_vector, row_vector, row_vector, row_vector) => real
Expected 5 arguments but found 8 arguments.
(array[] real, row_vector, row_vector, row_vector, row_vector) => real
Expected 5 arguments but found 8 arguments.
(real, row_vector, row_vector, row_vector, row_vector) => real
Expected