#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 …?)