前提・実現したいこと
stanとRでロジスティック回帰の階層モデルを作っています。
以下のエラーメッセージが発生しました。どこが良く無いか分からないので(変数「word」は定義しているのですが・・)、アドバイスをお願いします
発生している問題・エラーメッセージ
Error in mod$fit_ptr() :
Exception: variable does not exist; processing stage=data initialization; variable name=word; base type=int (in 'model6a2ffdde6d2_sample' at line 8)
failed to create the sampler; sampling not done
stanのコード(sample.stan)
data {
int<lower=0> I ; // データポイントの数
int<lower=0> N ; //単語の数
int<lower=0> C ; //被験者の数
int<lower=0, upper=1> resource[N] ; // ダミー変数(1か0)
int<lower=1, upper=N> word[I] ; //単語id
int<lower=1, upper=C> subj[I] ; //被験者id
int<lower=0, upper=1> rating[I] ; // 評価値(1か0)
}
parameters {
real Intercept; // 切片
real b_resource; // 係数
real b_w[N] ; // ランダム効果(語)
real b_s[C] ; // ランダム効果(人)
}
transformed parameters{
real x_w[N];
real x_s[C];
real x[I];
real q[I];
for (n in 1:N){
x_w[n] = b_resource * resource[n] + b_w[n];
}
for (c in 1:C){
x_s[c] = b_s[c];
}
for (i in 1:I){
x[i] = Intercept + x_w[word[i]] + x_s[subj[i]];
q[i] = inv_logit(x[i]);
}
}
model {
for (n in 1:N){
b_w[n] ~ normal(0,1);
}
for (c in 1:C){
b_s[c] ~ normal(0,1);
}
for (i in 1:I){
rating[i] ~ bernoulli( q[i]) ;
}
}
### 実行するRのコード d1 <- read.csv("data1.csv") d2 <- read.csv("data2.csv") resource_dummy <- as.numeric(d1$type == "resource") I=nrow(d2) ## データポイント数 N = length(unique(d2$term)) ## 単語数 C = length(unique(d2$human)) ## 被験者数 data_list <- list ( I=I, N=N, C=C, word = d2$term, subj = d2$human, resource = resource_dummy, rating = d2$rating ) result <- stan( file = "sample.stan", data = data_list ) ### 補足情報(FW/ツールのバージョンなど) 松浦健太郎「StanとRでベイズ統計モデリング」共立出版 のp.143-145をほぼそのまま利用しています。
あなたの回答
tips
プレビュー