Más contenido relacionado La actualidad más candente (20) MCMCによるベイズ因子分析法について10. サンプルコード1
MCMCfactanal
> data(bfi)
> bfi <- as.matrix(bfi[1:25])
> bfi <- subset(bfi,complete.cases(bfi))
!
> fa.ML <- fa(bfi,fm="ml",nfactors=5,rotate="varimax")
> print(fa.ML,sort=T,digit=4)
!
> fa.MCMC <-MCMCfactanal(bfi,factors=5,verbose=0,store.scores=FALSE,
+ burnin=1000,mcmc=3000,thin=20)
> plot(fa.MCMC)
> summary(fa.MCMC)
> codamenu()
3.4 GHz intel Core i7/32GBメモリ で80秒ぐらい
おまけ
収束チェックにつかう。ちなみにこの例では
収束していないところがアチコチにみられる
11. サンプルコード2
bfa
> library(bfa)
> data(bfi)
> bfi <- subset(bfi[1:25],complete.cases(bfi[1:25]))
> fa.MCMC.bfa <- bfa_gauss(~.,data=bfi,factors=5,nsim=3000,nburn=1000,thin=20)
> plot(fa.MCMC.bfa$loadings.mcmc)
開発途中のためか,
データが取り出しにくい,
ヘルプが不完全,
関数も不完全なのだけど・・・
同環境で3秒ぐらいと速い!
13. サンプルコード3
MCMCfactanal with lambda.constarint
fa.MCMC.const.loose <- MCMCfactanal(bfi,
factors=5,
lambda.constraints=list(N1=list(1,"+"),
C1=list(3,"+"),
A1=list(4,"+"),
O1=list(5,"+")),
verbose=0,store.scores=FALSE,burnin=5000,mcmc=10000,thin=20)
リスト形式で,「変数名=list(因子番号,符号)」で
制限をかけてやる。符号は + か -
14. サンプルコード4
bfa with lambda.constarint
同じくリスト形式で,「c(変数名,因子番号,符号)」
で制限をかけてやる。符号は 0 (固定)か >0
result.bfa <- bfa_gauss(~.,data=as.data.frame(bfi_sub),
restrict=list(c(“N1",1,">0"),
c(“C1",3,">0"),
c(“A1",4,">0"),
c("O1",5,">0")),
num.factor=5,nsim=10000,nburn=5000)
18. 結果の例
MCMCpack
> library(GPArotation)
> MCMC.loadings<- matrix(as.numeric(apply(fa.MCMC.pack[,1:125],
2,mean)),ncol=5,byrow=T)
> rownames(MCMC.loadings) <- colnames(bfi)
> MCMC.loadings.rot <- Promax(MCMC.loadings)
> print(MCMC.loadings.rot,digit=3,sort=T)
回転させてみた。
#要回転パッケージGPArotatinon
※点推定値を使うという発想はベイズ的ではないことに注意
21. simulation study 1
• データセットbfiからN=100or50のサンプルを取り
出し,MCMCfactanal,bfa_gaussで分析。オプショ
ンは次の通り。これを500セットして最尤法の結果
とどれほどずれるかを検証
• MCMC=10000
• burnin=5000
• thin=20
先ほどの環境で16732.449秒∼4時間ぐらい
MCMCfactanalでは
lambda.constraintが一つ
の因子に集中している群と
各因子一つの制約をしてい
る群の二つを準備
23. result of sim.1
• 因子負荷量が平均して0.13∼0.15ぐらいずれる
• MCMCfactanalの方が(まだ)bfaよりよい
• sdはbfaの方が小さい←今後に期待?
• N=50でも100でもそれほど大きな違いはない
→サンプルサイズに対しては頑健
26. simulation study 2
• Press(2003)に掲載されていたKendall(1980)のデータセットを使っ
たBayesianFAのデータと結果を参考に,
MCMCfactanal,bfa_gauss,mplus,rstanの分析結果を比較。
• 職業適正に関する調査で,15項目48人のデータ。4因子とされ
る。
• MCMCfactanalでは因子負荷行列の初期値を設定したもの
(l.const)と,さらにいくつかの負荷量の符号を指定したもの
(l.const.2)を作成
• bfaでは二つの項目だけ符号指定
• Mplus,rstanは制限なし
35. サンプルコード5
MCMCirt1d
> library(MCMCpack)
> library(ltm)
> result.MCMC <- MCMCirt1d(LSAT,store.item = TRUE,
store.ability = FALSE,
burnin=5000,mcmc=10000,thin=20)
> summary(result.MCMC)
!
!
Mean SD Naive SE Time-series SE
alpha.Item 1 -1.5384 0.11287 0.005048 0.026743
beta.Item 1 0.3677 0.16427 0.007346 0.039152
alpha.Item 2 -0.5856 0.05212 0.002331 0.005474
beta.Item 2 0.3409 0.13761 0.006154 0.071139
alpha.Item 3 -0.2965 0.20721 0.009267 0.127714
beta.Item 3 1.9470 1.73009 0.077372 1.198759
alpha.Item 4 -0.7537 0.05157 0.002306 0.004462
beta.Item 4 0.3172 0.12035 0.005382 0.041860
alpha.Item 5 -1.1745 0.06970 0.003117 0.014048
beta.Item 5 0.2550 0.13775 0.006160 0.057633
普通はスコアを推定する方が目的
なんで逆にする。時間節約のため
Mean SD Naive SE Time-series SE
alpha.Item 1 -1.5651 0.10434 0.0006599 0.0012276
alpha.Item 2 -0.6015 0.05372 0.0003398 0.0004630
alpha.Item 3 -0.1557 0.05865 0.0003709 0.0030803
alpha.Item 4 -0.7752 0.05686 0.0003596 0.0004464
alpha.Item 5 -1.2017 0.07144 0.0004518 0.0006413
beta.Item 1 0.4241 0.14555 0.0009205 0.0017784
beta.Item 2 0.4313 0.12047 0.0007619 0.0014482
beta.Item 3 0.5816 0.35230 0.0022282 0.0299067
beta.Item 4 0.4036 0.11653 0.0007370 0.0013514
beta.Item 5 0.3587 0.12266 0.0007758 0.0015826
Coefficients:
value std.err z.vals
Dffclt.Item 1 -3.3597 0.8669 -3.8754
Dffclt.Item 2 -1.3696 0.3073 -4.4565
Dffclt.Item 3 -0.2799 0.0997 -2.8083
Dffclt.Item 4 -1.8659 0.4341 -4.2982
Dffclt.Item 5 -3.1236 0.8700 -3.5904
Dscrmn.Item 1 0.8254 0.2581 3.1983
Dscrmn.Item 2 0.7229 0.1867 3.8721
Dscrmn.Item 3 0.8905 0.2326 3.8281
Dscrmn.Item 4 0.6886 0.1852 3.7186
Dscrmn.Item 5 0.6575 0.2100 3.1306
MLの結果
-2.6607
-1.0226
-0.2647
-1.3178
-2.0429
36. ちなMplus
MODEL RESULTS
!
Posterior One-Tailed 95% C.I.
Estimate S.D. P-Value Lower 2.5% Upper 2.5% Significance
!
F BY
X1 0.394 0.119 0.000 0.164 0.608 *
X2 0.449 0.106 0.000 0.235 0.632 *
X3 0.496 0.111 0.000 0.308 0.692 *
X4 0.402 0.101 0.000 0.189 0.597 *
X5 0.419 0.141 0.000 0.192 0.750 *
!
Thresholds
X1$1 -1.531 0.075 0.000 -1.689 -1.394 *
X2$1 -0.599 0.052 0.000 -0.708 -0.503 *
X3$1 -0.150 0.044 0.000 -0.237 -0.054 *
X4$1 -0.770 0.050 0.000 -0.864 -0.674 *
X5$1 -1.219 0.081 0.000 -1.394 -1.089 *
!
Variances
F 1.000 0.000 0.000 1.000 1.000
!
!
Beginning Time: 15:58:22
Ending Time: 15:58:23
Elapsed Time: 00:00:01
瞬殺!
ちょっと
低過ぎ?
うーん
まぁまぁ?
Bayes推定は正規累積関数を
使うのが一般的,IRTはロジ
スティック・リンクを使うの
が一般的なので,その辺の違
いなのかも・・?
37. 結語
• Bayesian Factor Analysisの使いどころは
• 因子負荷量が1.0を超えてしまうなど,最尤法では
不適切なモデル解が得られるとき
• (上とも関連するが)サンプルサイズが小さいとき
でもなんとかしたいとき
• カテゴリカルデータなど分布が正規分布ではないor
混合している場合はちょっと有利
40. References
• Quinn,K.M (2004). Bayesian Factor Analysis for Mixed Ordinal and
Continuous Responses. Political Analysis,12,338-353.
• Press,S.J. (2003) Subjective and objective bayesian statistics
2nd.ed,WILEY.
• Hirose,K., Kawano, S., Konishi,S. and Ichikawa,M. (2008)
Bayesian factor analysis and model selection. MHF Preprint Series.
• Rowe,D.B. (2003). Multivariate Bayesian Statistics: Models for
source separation and signal unmixing. CRC Press.
• Andrew D. Martin, Kevin M. Quinn, Jong Hee Park (2011).
MCMCpack: Markov Chain Monte Carlo in R. Journal of Statistical
Software. 42(9): 1-21. URL http://www.jstatsoft.org/v42/i09/.