Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
MCMCによる
因子分析
小杉考司
(山口大学教育学部)
@kosugitti
お品書き
• 自己紹介(信仰告白)
• 【理屈】Bayesian Factor Analysisとは
• 【実践】Rパッケージによる実践
• MCMCpackとbfaパッケージによる実践
• R以外で;rstanとMplusによる実践
• IR...
自己紹介
• 小杉考司(こすぎこうじ)
• 山口大学教育学部
• 専門;数理社会心理学
• kosugi@yamaguchi-u.ac.jp
• Twitter; @kosugitti
Factor Analysis
• 回帰分析モデルのひとつで,説明変数が潜在的である
モデル←性格心理学,テスト理論
• 多くの変数を数個の因子に情報圧縮(次元縮約)
• 因子構造がわからないところから始める探索的因子分
析(EFA)と仮説検証...
Factor Analysis
• 一因子モデル
• 多因子モデル
Bayesian FA model
• ベイズ流因子分析モデル
因子負荷行列。m個の因子 項目数p
因子得点ベクトル。各因子に対して。
独自成分。相互独立で正規分布する。
Bayesian FA model
MCMCpack::MCMCfactanal helpより
共役事前分布を次のように仮定
因子負荷量は正規分布するぜ
因子得点も正規分布するぜ
誤差は逆ガンマ分布(正規分布の分散)だぜ
注意すべきこと
• 回帰分析等のベイズ推定と違って,推定するべき要
素が大変多い→時間がかかる
• n人 m項目にp個の因子を仮定すると,
• m p個の因子負荷量
• n p個の因子得点
• m個の誤差分散
• ex) bfi…25 items...
とりあえずやってみる
• RでMCMCな因子分析をするパッケージ
• MCMCpackのMCMCfactanal関数
• bfaパッケージのbfa_gauss関数
データはdata.frame型でないとだめ
データはmatrix型でないとだめ
サンプルコード1
MCMCfactanal
> data(bfi)
> bfi <- as.matrix(bfi[1:25])
> bfi <- subset(bfi,complete.cases(bfi))
!
> fa.ML <- fa(b...
サンプルコード2
bfa
> library(bfa)
> data(bfi)
> bfi <- subset(bfi[1:25],complete.cases(bfi[1:25]))
> fa.MCMC.bfa <- bfa_gauss(~....
コツがある
• MCMCで因子分析するときは,無条件に実行する
となんだかピンとこない結果になることが多い。
• 因子負荷行列の少なくとも各列の一つの要素に対し
て,符号に制約をかけるとよい(Quinn,K.M,2004)
サンプルコード3
MCMCfactanal with lambda.constarint
fa.MCMC.const.loose <- MCMCfactanal(bfi,
factors=5,
lambda.constraints=list(N...
サンプルコード4
bfa with lambda.constarint
同じくリスト形式で,「c(変数名,因子番号,符号)」
で制限をかけてやる。符号は 0 (固定)か >0
result.bfa <- bfa_gauss(~.,data=as...
結果の例
最尤法だと奇麗な
5因子構造が
みてとれる
MCMC=10000,burnin=5000でも収束してない
結果の例
MCMCpack
因子負荷量が0.3を
超えるものも少なくて
これで合ってるの?って
感じがする。
結果の例
MCMCpack
結果の例
MCMCpack
> library(GPArotation)
> MCMC.loadings<- matrix(as.numeric(apply(fa.MCMC.pack[,1:125],
2,mean)),ncol=5,byrow...
結果の例
MCMCpack
そこそこ5因子構造は
奇麗にできている。
!
 ※まだ収束してないけどね
※符号が逆転しているのが
見られるんだけどね
結果の例
bfa
こちらのパッケージは
ちょっと答えが
他のものと違うようで
・・・?
simulation study 1
• データセットbfiからN=100or50のサンプルを取り
出し,MCMCfactanal,bfa_gaussで分析。オプショ
ンは次の通り。これを500セットして最尤法の結果
とどれほどずれるかを検証
•...
result of simulation1
最尤法(無回転)の因子負荷行列をターゲットにして
プロクラステス回転した因子負荷行列のズレの平均
N=100
N=50
result of sim.1
• 因子負荷量が平均して0.13∼0.15ぐらいずれる
• MCMCfactanalの方が(まだ)bfaよりよい
• sdはbfaの方が小さい←今後に期待?
• N=50でも100でもそれほど大きな違いはない  ...
他の方法はないものか
• MCMCfactanal,bfa_gauss以外にBayesianFAを
実行する環境は?
• Mplus!
• rstan!
Mplusとrstan
• Mplusは言わずと知れた究極のSEMソ
フトウェアで,最近日本語のテキストも
出たんですってよ。
• rstanは開発終わったBUGSの次ぎにく
ると言われているMCMCサンプラー・
ソフトstanをrで実行してく...
simulation study 2
• Press(2003)に掲載されていたKendall(1980)のデータセットを使っ
たBayesianFAのデータと結果を参考に,
MCMCfactanal,bfa_gauss,mplus,rstan...
結果ですよね
ちなみに
• MplusはEFA,estimator=BAYES;とするだけでよ
く,2秒ほどで結果を出す。
• bfiデータも5因子EFA,4秒で結果を出す。GEOMIN
回転つき。
Mplus for Kendall s data
Mplus for bfi
ちなみに
• rstanは5000回転する
のに数時間かかります
• 多分これはコードの書き
方がうまくない所為。ベ
クトル化して書いたらす
ごく速い,と聞いてはい
ますが,まだ勉強不足で,
自分の書いたコードが正
しいのかどうかすら怪し
いで...
BFAの活きる道
• そもそも,探索的ベイズ因子分析はあまり文献・研
究例がない。
• MCMCは複雑な分布,混合分布などに向けたモデ
リングにこそ活きてくる。
• そこでIRTですよ
IRT Model
一因子のFAモデルと同じ。
ただし,データは正答=1,誤答=0とした2値
ベルヌーイ分布
困難度αと識別力βという項目母数。
測定したい能力=因子得点。正規分布する。
独自成分。正規分布する。
MCMCpack::MCMCi...
MCMCpackの関数
• MCMCirt1d…通常の1因子カテゴリカルFA
• MCMCirtkd…k因子カテゴリカルFA
• MCMCmixfactanal…順序変数と連続変数が混合し
ているデータに対するFA
サンプルコード5
MCMCirt1d
>	 library(MCMCpack)

>	 library(ltm)

>	 result.MCMC	 <-	 MCMCirt1d(LSAT,store.item	 =	 TRUE,	 

	 	 	...
ちなMplus
MODEL	 RESULTS

!
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Posterior	 	 One-Tailed	 	 	 	 	...
結語
• Bayesian Factor Analysisの使いどころは
• 因子負荷量が1.0を超えてしまうなど,最尤法では
不適切なモデル解が得られるとき
• (上とも関連するが)サンプルサイズが小さいとき
でもなんとかしたいとき
• カテ...
Let s Bayes.
無理すな
References
• Quinn,K.M (2004). Bayesian Factor Analysis for Mixed Ordinal and
Continuous Responses. Political Analysis,12,...
補遺;IRTモデルの変形
• モデル化するときは指数関数をつかう表現を対数表
現に書き直し→ベルヌーイ(対数(モデル))
2PLモデル
補遺の補遺
対数の定義 より
MCMCによるベイズ因子分析法について
Upcoming SlideShare
Loading in …5
×

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

6,281 views

Published on

ベイズ推定による多変量解析法WSにて発表した資料です

Published in: Science
  • Be the first to comment

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. 補遺の補遺 対数の定義 より

×