分级响应模型在rstan中申报数据时出错。

问题描述 投票:0回答:1

我正在尝试使用斯坦,特别是通过 rstan,以适应 分级响应模型. 罗和娇(2018),可。此处,提供Stan代码来做。以下是他们的代码,经过编辑只是为了加入更多的空白。

data{
    int<lower=2, upper=4> K; //number of categories
    int <lower=0> n_student;
    int <lower=0> n_item;
    int<lower=1,upper=K> Y[n_student,n_item];
}

parameters {
    vector[n_student] theta;
    real<lower=0> alpha [n_item];
    ordered[K-1] kappa[n_item]; //category difficulty
    real mu_kappa; //mean of the prior distribution of category difficulty
    real<lower=0> sigma_kappa; //sd of the prior distribution of category difficulty
}

model{
    alpha ~ cauchy(0,5);
    theta ~ normal(0,1);
    for (i in 1: n_item){
        for (k in 1:(K-1)){
            kappa[i,k] ~ normal(mu_kappa,sigma_kappa);
    }}
    mu_kappa ~ normal(0,5);
    sigma_kappa ~ cauchy(0,5);
    for (i in 1:n_student){
        for (j in 1:n_item){
            Y[i,j] ~ ordered_logistic(theta[i]*alpha[j],kappa[j]);
    }}
}

generated quantities {
    vector[n_item] log_lik[n_student];
    for (i in 1: n_student){
        for (j in 1: n_item){
            log_lik[i, j] = ordered_logistic_log (Y[i, j],theta[i]*alpha[j],kappa[j]);
    }}
}

然而,当我尝试使用这段代码时,解析器会抛出一个错误。以下是重现该错误的R代码。

library("rstan")

n <- 100
m <- 10
K <- 4
example_responses <- sample(x = 1:4, size = n * m, replace = TRUE)
example_responses <- matrix(example_responses, nrow = n, ncol = m)

example_dat <- list(K = K,
                    n_student = n,
                    n_item = m,
                    Y = example_responses)

fit <- stan(file = "~/grm.stan", data = example_dat)

这是我收到的错误。

SYNTAX ERROR, MESSAGE(S) FROM PARSER:
 error in 'modelf6471b3f018_grm' at line 2, column 21
  -------------------------------------------------
     2: 
     3: data {
     4:     int<lower=2, upper=4> K; // number of categories
                            ^
     5:     int<lower=0> n_student;                       
  -------------------------------------------------

PARSER EXPECTED: <one of the following:
  a variable declaration, beginning with type,
      (int, real, vector, row_vector, matrix, unit_vector,
       simplex, ordered, positive_ordered,
       corr_matrix, cov_matrix,
       cholesky_corr, cholesky_cov
  or '}' to close variable declarations>
Error in stanc(file = file, model_code = model_code, model_name = model_name,  : 
  failed to parse Stan model 'grm' due to the above error.

我试着查看代码和Stan手册 看看数据声明的问题在哪里 但我找不到问题所在 该声明似乎与《Stan手册》中的一个声明示例非常相似。斯坦语言参考:

int<lower = 1> N;

有谁能告诉我我缺少什么?

r stan rstan
1个回答
1
投票

你的代码在一些空白处有非标准字符,包括K后的右方。

© www.soinside.com 2019 - 2024. All rights reserved.