I am declaring the following in the data-block
data{
…
int<lower=1> M; // number of data points
int<lower=1> t[M]; // time
…
}
I have checked and ensure t
contains only integers in R.
M is 4074 in my current example.
I got the following error message:
Exception: mismatch in number dimensions declared and found in context; processing stage=data initialization; variable name=t; dims declared=(4074); dims found=(4074,1)
How do I get Stan to recognize a column of integers as an array of integers and not a matrix, despite my declaration? Thanks.
You probably need to be passing it like as.vector(t)
rather than a one-column matrix.
Hi
But t
is just a variable consisting of integers as I double-check it in R. It is really unclear to me why Stan is finding it to be an one-column matrix.
Also, where may I use the as.vector(t)
? It is not allowed in the data block. I should have made it clear that this is how I plan to use it in my model block:
model{
...
y ~ neg_binomial_2_log(theta[t],phi);
}
I mean pass it to the list of data as as.vector(t)
from R.
Thanks. But I tried that and it did not work. Stan is still showing the mismatch error message. Any idea?
I store t
along with other variables in a list
.
data_list <- list(M=nrow(data),
N=length(unique(data[,"ID"])),
id=data[,"ID"],
t=data[,"time"],
y=data[,"DV"])
dim(data_list$t)
[1] 4074 1
Stan is telling you that should be 4074 rather than 4074 \times 1. Make it
data_list <- list(M=nrow(data),
N=length(unique(data[,"ID"])),
id=data[,"ID"],
t=c(data[,"time"]),
y=data[,"DV"])
It still does not work! Now the error message for c(data[,"time"])
is
Exception: mismatch in number dimensions declared and found in context; processing stage=data initialization; variable name=t; dims declared=(4074); dims found=(1,4074)
How did you use as.vector
? Did you do this?:
data_list <- list(M=nrow(data),
N=length(unique(data[,"ID"])),
id=data[,"ID"],
t=as.vector(data[,"time"]),
y=data[,"DV"])
Yes, I did. The error message for as.vector(data[,"time"])
is:
Exception: mismatch in number dimensions declared and found in context; processing stage=data initialization; variable name=t; dims declared=(4074); dims found=(4074,1)
Is data
a data.frame? Maybe data[ , "time", drop = TRUE]
? You just have to convince R to treat it as a vector rather than a matrix.
Yes. data
is data.frame. Even when I do t=c(data[,"time"]),
Stan is finding:
Exception: mismatch in number dimensions declared and found in context; processing stage=data initialization; variable name=t; dims declared=(4074); dims found=(1,4074)
Maybe I should read t
as a vector in the data block and then do something in a transformed data block??? But I don’t know how to change a vector into an integer array within Stan…
No. You should figure out how to get R to treat it as a vector rather than a matrix with one column. Perhaps data[,"time"][,1]
?
Thanks. That’s what I am trying to do but I can’t think of a way…
Does data[,"time"][,1]
yield a matrix or a vector?
data[,"time"][,1]
yields this:
dim(data_list$t)
[1] 4074 1
How about
data_list$t <- data_list$t[,1]
?
data_list$t ← data_list$t[,1]
dim(data_list$t)
NULL
But this is the corresponding error message:
Exception: mismatch in number dimensions declared and found in context; processing stage=data initialization; variable name=d; dims declared=(4074); dims found=(4074,1)
Is my declaration wrong?
data{
…
int<lower=1> M; // number of data points
int<lower=1> t[M]; // time
…
}
Now you need to fix the variable called d
.