STAN IRT через программирование на R, проблема с объявлением параметров?

#r #bayesian #stan

#r #байесовский #stan

Вопрос:

Я следую этому официальному руководству по IRT с / STAN. Детали модели скопированы ниже:

 data {
  int<lower=1> J;              // number of students
  int<lower=1> K;              // number of questions
  int<lower=1> N;              // number of observations
  int<lower=1,upper=J> jj[N];  // student for observation n
  int<lower=1,upper=K> kk[N];  // question for observation n
  int<lower=0,upper=1> y[N];   // correctness for observation n
}

parameters {
  real delta;         // mean student ability
  real alpha[J];      // ability of student j - mean ability
  real beta[K];       // difficulty of question k
}

model {
  alpha ~ std_normal();         // informative true prior
  beta ~ std_normal();          // informative true prior
  delta ~ normal(0.75, 1);      // informative true prior
  for (n in 1:N)
    y[n] ~ bernoulli_logit(alpha[jj[n]] - beta[kk[n]]   delta);
}

  

Я не уверен, какие переменные нужно и не нужно объявлять в R-коде.

 toy_data <- list(
  J= 5,
  K = 4,
  N =20,
  y= c(1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0)
                )
fit <- stan(file = '1PL_stan.stan', data = toy_data)
  

Однако возникает следующая ошибка.

 Error in mod$fit_ptr() : 
  Exception: variable does not exist; processing stage=data initialization; variable name=jj; base type=int  (in 'model920c4330dff_1PL_stan' at line 5)

In addition: Warning messages:
1: In readLines(file, warn = TRUE) :
  incomplete final line found on 'C:Usersjacob.mooreDownloads1PL_stan.stan'
2: In system(paste(CXX, ARGS), ignore.stdout = TRUE, ignore.stderr = TRUE) :
  '-E' not found
failed to create the sampler; sampling not done
  

В моей прошлой работе я использовал почти исключительно python. Итак, изучение R было довольно сложным; кроме того, я очень новичок в STAN, отсюда и игрушечный пример.

Основная идея заключается в том, что существует 20 пар дочерних элементов / вопросов. 5 дочерних элементов и 4 разных вопроса. Я не уверен, почему мой код вызывает ошибку, и что я должен сделать, чтобы ее исправить. Можете ли вы уточнить, что нужно настроить, чтобы этот код выполнялся без возникновения ошибки?

Ответ №1:

Каждый параметр, указанный в блоке данных ( J , K , N , jj , kk , и y ), должен быть включен в переменную toy_data . Вы пропустили jj и kk .

У вас есть 5 студентов ( J=5 ), отвечающих на 4 вопроса каждый ( K=4 ). jj это идентификатор студента и идентификатор kk вопроса, поэтому, предполагая, что ваши ответы упорядочены по student, а затем по question, у вас будет что-то вроде

 jj = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5)
kk = c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)
  

Комментарии:

1. Поскольку это небольшой пример, можете ли вы показать мне, как должны выглядеть jj и kk? Я полностью потерян. (Может быть, массив индексов, относящихся к y …?)