Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

MCMCによるベイズ因子分析法について

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 42 Anzeige
Anzeige

Weitere Verwandte Inhalte

Weitere von 考司 小杉 (19)

Aktuellste (20)

Anzeige

MCMCによるベイズ因子分析法について

  1. 1. MCMCによる 因子分析 小杉考司 (山口大学教育学部) @kosugitti
  2. 2. お品書き • 自己紹介(信仰告白) • 【理屈】Bayesian Factor Analysisとは • 【実践】Rパッケージによる実践 • MCMCpackとbfaパッケージによる実践 • R以外で;rstanとMplusによる実践 • IRTをやってみた • 結語
  3. 3. 自己紹介 • 小杉考司(こすぎこうじ) • 山口大学教育学部 • 専門;数理社会心理学 • kosugi@yamaguchi-u.ac.jp • Twitter; @kosugitti
  4. 4. Factor Analysis • 回帰分析モデルのひとつで,説明変数が潜在的である モデル←性格心理学,テスト理論 • 多くの変数を数個の因子に情報圧縮(次元縮約) • 因子構造がわからないところから始める探索的因子分 析(EFA)と仮説検証的な因子分析(CFA)とに大別される • CFAはSEMの枠組みで語られることが多いので、今回はEFAを主 に取り上げます。
  5. 5. Factor Analysis • 一因子モデル • 多因子モデル
  6. 6. Bayesian FA model • ベイズ流因子分析モデル 因子負荷行列。m個の因子 項目数p 因子得点ベクトル。各因子に対して。 独自成分。相互独立で正規分布する。
  7. 7. Bayesian FA model MCMCpack::MCMCfactanal helpより 共役事前分布を次のように仮定 因子負荷量は正規分布するぜ 因子得点も正規分布するぜ 誤差は逆ガンマ分布(正規分布の分散)だぜ
  8. 8. 注意すべきこと • 回帰分析等のベイズ推定と違って,推定するべき要 素が大変多い→時間がかかる • n人 m項目にp個の因子を仮定すると, • m p個の因子負荷量 • n p個の因子得点 • m個の誤差分散 • ex) bfi…25 items 2800 obs, 5 factors!
  9. 9. とりあえずやってみる • RでMCMCな因子分析をするパッケージ • MCMCpackのMCMCfactanal関数 • bfaパッケージのbfa_gauss関数 データはdata.frame型でないとだめ データはmatrix型でないとだめ
  10. 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. 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秒ぐらいと速い!
  12. 12. コツがある • MCMCで因子分析するときは,無条件に実行する となんだかピンとこない結果になることが多い。 • 因子負荷行列の少なくとも各列の一つの要素に対し て,符号に制約をかけるとよい(Quinn,K.M,2004)
  13. 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. 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)
  15. 15. 結果の例 最尤法だと奇麗な 5因子構造が みてとれる
  16. 16. MCMC=10000,burnin=5000でも収束してない 結果の例 MCMCpack
  17. 17. 因子負荷量が0.3を 超えるものも少なくて これで合ってるの?って 感じがする。 結果の例 MCMCpack
  18. 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 ※点推定値を使うという発想はベイズ的ではないことに注意
  19. 19. 結果の例 MCMCpack そこそこ5因子構造は 奇麗にできている。 !  ※まだ収束してないけどね ※符号が逆転しているのが 見られるんだけどね
  20. 20. 結果の例 bfa こちらのパッケージは ちょっと答えが 他のものと違うようで ・・・?
  21. 21. simulation study 1 • データセットbfiからN=100or50のサンプルを取り 出し,MCMCfactanal,bfa_gaussで分析。オプショ ンは次の通り。これを500セットして最尤法の結果 とどれほどずれるかを検証 • MCMC=10000 • burnin=5000 • thin=20 先ほどの環境で16732.449秒∼4時間ぐらい MCMCfactanalでは lambda.constraintが一つ の因子に集中している群と 各因子一つの制約をしてい る群の二つを準備
  22. 22. result of simulation1 最尤法(無回転)の因子負荷行列をターゲットにして プロクラステス回転した因子負荷行列のズレの平均 N=100 N=50
  23. 23. result of sim.1 • 因子負荷量が平均して0.13∼0.15ぐらいずれる • MCMCfactanalの方が(まだ)bfaよりよい • sdはbfaの方が小さい←今後に期待? • N=50でも100でもそれほど大きな違いはない   →サンプルサイズに対しては頑健
  24. 24. 他の方法はないものか • MCMCfactanal,bfa_gauss以外にBayesianFAを 実行する環境は? • Mplus! • rstan!
  25. 25. Mplusとrstan • Mplusは言わずと知れた究極のSEMソ フトウェアで,最近日本語のテキストも 出たんですってよ。 • rstanは開発終わったBUGSの次ぎにく ると言われているMCMCサンプラー・ ソフトstanをrで実行してくれるパッケー ジ。NUTサンプリングという新しい機 能を実装していて高速で動く(という)。
  26. 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は制限なし
  27. 27. 結果ですよね
  28. 28. ちなみに • MplusはEFA,estimator=BAYES;とするだけでよ く,2秒ほどで結果を出す。 • bfiデータも5因子EFA,4秒で結果を出す。GEOMIN 回転つき。
  29. 29. Mplus for Kendall s data
  30. 30. Mplus for bfi
  31. 31. ちなみに • rstanは5000回転する のに数時間かかります • 多分これはコードの書き 方がうまくない所為。ベ クトル化して書いたらす ごく速い,と聞いてはい ますが,まだ勉強不足で, 自分の書いたコードが正 しいのかどうかすら怪し いです(́・ω・`)
  32. 32. BFAの活きる道 • そもそも,探索的ベイズ因子分析はあまり文献・研 究例がない。 • MCMCは複雑な分布,混合分布などに向けたモデ リングにこそ活きてくる。 • そこでIRTですよ
  33. 33. IRT Model 一因子のFAモデルと同じ。 ただし,データは正答=1,誤答=0とした2値 ベルヌーイ分布 困難度αと識別力βという項目母数。 測定したい能力=因子得点。正規分布する。 独自成分。正規分布する。 MCMCpack::MCMCirt1d helpより
  34. 34. MCMCpackの関数 • MCMCirt1d…通常の1因子カテゴリカルFA • MCMCirtkd…k因子カテゴリカルFA • MCMCmixfactanal…順序変数と連続変数が混合し ているデータに対するFA
  35. 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. 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. 37. 結語 • Bayesian Factor Analysisの使いどころは • 因子負荷量が1.0を超えてしまうなど,最尤法では 不適切なモデル解が得られるとき • (上とも関連するが)サンプルサイズが小さいとき でもなんとかしたいとき • カテゴリカルデータなど分布が正規分布ではないor 混合している場合はちょっと有利
  38. 38. Let s Bayes. 無理すな
  39. 39. 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/.
  40. 40. 補遺;IRTモデルの変形 • モデル化するときは指数関数をつかう表現を対数表 現に書き直し→ベルヌーイ(対数(モデル)) 2PLモデル
  41. 41. 補遺の補遺 対数の定義 より

×