コードはこちらになります。
# -*- coding: utf-8 -*- import pystan # karaoke score in last year contest experiment = [30.86, 29.75, 31.55, 32.29, 29.90, 31.71, 31.35, 29.03, 30.37, 31.55, 29.26, 32.29, 29.90, 30.18, 30.72, 32.28, 30.72, 29.90, 31.55, 31.55] control = [31.36, 33.34, 33.16, 31.36, 36.19, 29.80, 31.11, 35.23, 31.36, 31.27, 31.63, 31.63, 32.00, 31.11, 31.63, 31.36, 31.81, 31.63, 29.21, 33.37] stan_data = { "exN" : len(experiment), "ex" : experiment, "conN" : len(control), "con" : control } stan_code = """ data { int<lower=0> exN; real<lower=0> ex[exN]; int<lower=0> conN; real<lower=0> con[conN]; } parameters { real<lower=0> mu_ex; # mean for experiment real<lower=0> mu_con; # mean for control real<lower=0> stdev; # standard deviation } model { ex ~ normal(mu_ex, stdev); # normal distribution model con ~ normal(mu_con, stdev); # normal distribution model } generated quantities { real delta; real<lower=0> over0; real<lower=0> over1; delta <- mu_con - mu_ex; over0 <- step(delta); over1 <- step(delta-1); } """ def main(): fit = pystan.stan(model_code=stan_code, data=stan_data, iter=11000, warmup=1000, thin=1, chains=4) print(fit) fit.plot() if __name__ == "__main__": main()
実行結果はこうなりました。
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat mu_ex 30.84 1.6e-3 0.32 30.22 30.63 30.83 31.05 31.46 40000 1.0 mu_con 31.98 1.6e-3 0.31 31.36 31.77 31.97 32.18 32.59 40000 1.0 stdev 1.4 8.3e-4 0.17 1.12 1.28 1.38 1.5 1.77 40000 1.0 delta 1.14 2.2e-3 0.45 0.27 0.84 1.14 1.43 2.02 40000 1.0 over0 0.99 3.8e-4 0.08 1.0 1.0 1.0 1.0 1.0 40000 1.0 over1 0.62 2.4e-3 0.49 0.0 0.0 1.0 1.0 1.0 40000 1.0 lp__ -25.44 6.3e-3 1.26 -28.7 -26.02 -25.12 -24.52 -24.01 40000 1.0平均の差(delta)のEAP推定値は1.14となりました。事後標準偏差は0.45です。95%確信区間は0.27から2.02です。差がある確率(over0)は99%で、ほぼ差があると見ていいようです。差が1以上ある確率(over1)は62%です。
0 件のコメント:
コメントを投稿