見出し画像

【2回目】100日後にベイズ統計ができるゆーみん【20日目】

おはようございます!

今日も少しずつ進めていきます。

5.2.5 Stanで実装

data {
 int N;
 int<lower=0, upper=1> A[N];
 real<lower=0, upper=1> Score[N];
 int<lower=0> M[N];
 int<lower=0> Y[N];
}

parameters {
 real b1;
 real b2;
 real b3;
}

transformed parameters {
 real q[N];
 for (n in 1:N)
   q[n] = inv_logit(b1 + b2*A[n] + b3*Score[n]);
}

model {
 for (n in 1:N)
   Y[n] ~ binomial(M[n], q[n]);
}

generated quantities {
 real y_pred[N];
 for (n in 1:N)
   y_pred[n] = binomial_rng(M[n], q[n]);
}

細かく見ていくと

int<lower=0> Y[N];

Yを出席率のreal型から出席回数のint型に変更します。

q[n] = inv_logit(b1 + b2*A[n] + b3*Score[n]);

inv_logit関数を用いて(0,1)の値に変換しています。

 Y[n] ~ binomial(M[n], q[n]);
y_pred[n] = binomial_rng(M[n], q[n]);

確率的な変動部分を正規分布から二項分布に変更しています。

Rコードの方はほとんど同じなので解説なしでした。

library(rstan)

d <- read.csv(file='input/data-attendance-2.txt')
data <- list(N=nrow(d), A=d$A, Score=d$Score/200, M=d$M, Y=d$Y)
fit <- stan(file='model/model5-4.stan', data=data, seed=1234)

save.image('output/result-model5-4.RData')

短いですが、今日はここまでです。
もうあまりにもゆっくり進めているので、
少し気合を入れ直して頑張ります!

では、また明日お会いしましょう〜

この記事が気に入ったらサポートをしてみませんか?