Error when running ordered_logistics latent model in rstan

The following are the ‘parameters’ and ‘model’ blocks of my model.

parameters {
  real<lower=0> beta_k5[k5];
  ordered[k5 - 1] c_k5[k5];
  vector[n] theta;
}

model{
 
  for(j in 1:k5){
    c_k5[j,1] ~ normal(0,5); //priors for 5cat
    c_k5[j,2] ~ normal(0,5);
    c_k5[j,3] ~ normal(0,5);
    c_k5[j,4] ~ normal(0,5);
}
  theta ~ normal(0,1); //prior on latent variable
  beta_k5 ~ normal(0,1); //priors on beta values
  
  //linear component
  for(i in 1:k5){
    y_k5[i] ~ ordered_logistic(beta_k5[item_k5[i]] * theta[id_k5[i]], c_k5[item_k5[i]]);
  }
}

Having this issue when trying to run an ordered_logistic model for a latent variable with 7 ordered variables with 5 levels. In the past I’ve put the linear component in the parameter block but here I put it in the model block. I get the following error:

Too many indexes, expression dimensions=0, indexes found=1
error in ‘model15e8d7e806868_interpersonal_behavior_model’ at line 32, column 49

30:   //linear component
31:   for(i in 1:k5){
32:     y_k5[i] ~ ordered_logistic(beta_k5[item_k5[i]] * theta[id_k5[i]], c_k5[item_k5[i]]);
                                                    ^
33:   }

Help!

Sorry, your question fell through a bit. Did you manage to resolve this?

Also note that the error involves indexing of a data element, so we can’t really help you unless you post the full model (it is generally better to always provide the full model - if it is very big, just attach it as a file)

Yeah I haven’t been able to solve this unfortunately. Given that it is an indexing error, I think it may have something to do with my data. The error is being brought up within the item_k5 indexing and this is an integer vector that is simply 1:7 repeating for how many variables I am feeding into the latent model. It is of type integer within R and is the same length and type of n_k5 (number of non-missing item observations). I did a different model with different data in a similar format and had no issues with this way of indexing through and ordered variable like this. Thanks for your help!

data {
  int<lower=0> n; //number of rows
  int<lower=0> k5; //number of variables
  int<lower=0> n_k5; //number of non-missing item-observations
  int<lower=0> id_k5; //identifier for the individual-item observation
  int<lower=0> item_k5; //indicates which item is being dealt with

  
  int<lower=1, upper=5> y_k5[n_k5]; //observations are ordered in a way that indicates higher values as more cautious interpersonal behavior
  
}

parameters {
  real<lower=0> beta_k5[k5];
  ordered[4] c_k5;
  vector[n] theta;
  
}
transformed parameters{
  real xb_k5[n_k5];
  for(i in 1:n_k5){
    xb_k5[i] = beta_k5[item_k5[i]] * theta[id_k5[i]];
    }
}

model{
 
  for(j in 1:c_k5){
    c_k5[j,1] ~ normal(0,5); //priors for 5cat
    c_k5[j,2] ~ normal(0,5);
    c_k5[j,3] ~ normal(0,5);
    c_k5[j,4] ~ normal(0,5);
} 
  theta ~ normal(0,1); //prior on latent variable
  beta_k5 ~ normal(0,1); //priors on beta values
  
  //linear component
  y_k5 ~ ordered_logistic(xb_k5, c_k5);
}

Then you need to declare item_k5 (and likely other variables) as an array, i.e.:

int<lower=1, upper=k5> item_k5[n]; 

I’ve also added bounds - those are optional but make it easier to catch errors - if you want to use item_k5 as index into beta_k5, those bounds need to hold.

Oh my goodness thank you! I can’t believe I missed this! Thank you for the help!