More Related Content
Similar to RとStanで分散分析 (12)
RとStanで分散分析
- 14. データリスト作成など
n <- nrow(x) #nはxの行数、という命令
> n
[1] 10
data <-list(N = n, X = x)
#Stanで分析に使用するため、list()関数を用いてNとXのデータリストに格納
- 18. transformed parametersブロック
transformed parameters{
matrix[3,3] Sigma;#Sigmaは[3,3]行列です。あとで定義。
Sigma[1,1] = sig[1]*sig[1];
Sigma[2,2] = sig[2]*sig[2];
Sigma[3,3] = sig[3]*sig[3];
Sigma[1,2] = sig[1]*sig[2]*rho;#共分散行列の非対角成分に相関を掛ける
Sigma[1,3] = sig[1]*sig[3]*rho;
Sigma[2,3] = sig[2]*sig[3]*rho;
Sigma[2,1] = Sigma[1,2];
Sigma[3,1] = Sigma[1,3];
Sigma[3,2] = Sigma[2,3];
}
- 19. modelブロック
model{
X ~ multi_normal(mu, Sigma);#Xは多変量正規分布に従う
rho ~ uniform(-1,1);
sig ~ cauchy(0,2.5);# sigは平均0,SD2.5のコーシー分布に従う。
}
#多変量正規分布のパラメータは、K:正の整数、μ:長さKのベクトル、σ:K*Kの分散共分
散行列になる
# 事前分布の影響がありそうな小さなサンプルに対しては,分散の事前分布として半コー
シー分布を選ぶと良いらしい(※半コーシー分布については他参照)
- 21. MCMCを実行
fit <- stan(model_code = stancode, iter = 10000, chains = 1, data = data)
#<-stan():()内で指定したMCMCを実行するというコマンド
#iter:サンプリング数。各chainsでサンプリングを何度行うか
#chains:マルコフ連鎖数。ホントは4~5が望ましい
#data:この場合はスライド14で作成したデータリスト”data”を利用する
- 22. print(fit, digits_summary = 2)
>
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
mu[1] 5.93 0.01 0.85 4.23 5.38 5.92 6.47 7.66 4037 1
mu[2] 6.84 0.01 0.81 5.25 6.33 6.83 7.35 8.41 3905 1
mu[3] 2.32 0.01 0.51 1.32 1.99 2.31 2.63 3.37 3664 1
sig[1] 2.64 0.01 0.68 1.68 2.16 2.52 2.96 4.36 3180 1
sig[2] 2.47 0.01 0.65 1.54 2.01 2.36 2.80 4.00 3623 1
sig[3] 1.61 0.01 0.44 1.01 1.30 1.52 1.83 2.67 3146 1
rho 0.26 0.00 0.20 -0.12 0.12 0.25 0.40 0.64 3897 1
(共分散は省略)
delta21 0.91 0.01 1.00 -1.07 0.26 0.92 1.57 2.81 5000 1
delta13 3.61 0.01 0.89 1.86 3.03 3.61 4.17 5.41 5000 1
delta23 4.52 0.01 0.84 2.87 3.98 4.53 5.06 6.16 5000 1
lp__ -36.19 0.05 2.00 -40.93 -37.29 -35.84 -34.72 -33.32 1817 1