Rで共変量を伴った潜在クラス分析を行ってみたい。
パッケージはpoLCAを使う。
poLCAパッケージを利用した潜在クラス分析は以前にエントリしている。
RのpoLCAパッケージで潜在クラス分析を行う
共変量とは何かというのは、以前にMplusでの方法をエントリしているのでそちらを参照のこと。
Mplus 共変量を伴った潜在クラス分析
パッケージを読み込む。
library("poLCA")
データはpoLCAパッケージに含まれるelectionデータを利用する。 2000年のアメリカ大統領選挙のアル・ゴアとジョージ・W・ブッシュの評価のデータである。
下記の6点について4段階で評価している。
- 道徳性 moral
- 思いやり caring
- 知識が豊富 knowledgeable
- 良いリーダー good leader
- 正直ではない dishonest、
- 知的 intelligent
他の変数としては以下のものが含まれる。
- 投票 VOTE3:(1) ゴア (2) ブッシュ (3) その他
- 年齢 AGE: 連続変数
- 教育 EDUC (1)第8学年以下 (2)9-11年生(3)高校卒業または同等(4)12年以上の学校教育(5)ジュニアまたはコミュニティカレッジレベルの学位 (6)学士レベルの学位 (7)高度な学位
- 性別 GENDER:(1)男性 (2)女性
- 政党 PARTY:(1)強い民主党員(2)弱い民主党員 (3)所属の無い民主党員 (4)支持政党なし(5)所属の無い共和党員 (6)弱い共和党員 (7)強い共和党員
VOTE3を用いれば、抹消結果Distal Outcomesを伴った潜在クラス分析もできるデータのようだ。
少しデータが多いので、分析するデータを編集。
data("election",package="poLCA") # electionデータ読み込み election$GENDER <- factor(election$GENDER) # 因子型にする ## 道徳性・思いやり・知識が豊富のゴア、ブッシュの値、年齢、教育、性別、政党を抜き出し d1 <- election[,c(1:3,7:12,14:17)] d1 <- na.omit(d1) # 欠損値除去
共変量を伴った潜在クラス分析
共変量は式の最後のチルダの後につける。
ノーマルな潜在クラス分析だとここに~1
と表記するが、そこに共変量を設定することになる。
クラス数は3で走らせる。
fm1 <- cbind(MORALG,CARESG,KNOWG,MORALB,CARESB,KNOWB)~PARTY # 式formulaの作成 res1 <- poLCA(formula=fm1,data=d1,nclass=3,nrep=10) # 潜在クラス分析の実行
僕の環境ではRStudioのR Markdownからは出力ができず、コンソールからのみ共変量の結果は出力できた。
それにしても、よく起こるバグである。
共変量のところのみ結果を表示する。
========================================================= Fit for 3 latent classes: ========================================================= 2 / 1 Coefficient Std. error t value Pr(>|t|) (Intercept) 2.44815 0.21781 11.240 0 PARTY -0.74290 0.06139 -12.101 0 ========================================================= 3 / 1 Coefficient Std. error t value Pr(>|t|) (Intercept) -3.88769 0.47323 -8.215 0 PARTY 0.66537 0.08135 8.179 0 =========================================================
p値は0である。ゴアとブッシュへの評価が潜在クラスの中身なので、政党支持が関連を持っているのは明らかだろう。
参照カテゴリは1である。参照カテゴリを変更させるコマンドは探してみたがなかった。変更できないと少し不便だ。
2つ以上の共変量を伴った潜在クラス分析
2つ以上の共変量を設定するときは単純に+
をいれるとよい。
fm2 <- cbind(MORALG,CARESG,KNOWG,MORALB,CARESB,KNOWB)~PARTY+AGE+EDUC # 式の作成 res2 <- poLCA(formula=fm2,data=d1,nclass=3,nrep=10) # 潜在クラス分析の実行
今回も共変量のところのみ結果を表示する。
========================================================= Fit for 3 latent classes: ========================================================= 2 / 1 Coefficient Std. error t value Pr(>|t|) (Intercept) 4.38411 0.65075 6.737 0.000 PARTY -1.59906 0.10977 -14.567 0.000 AGE 0.00910 0.00825 1.102 0.270 EDUC 0.27591 0.08981 3.072 0.002 ========================================================= 3 / 1 Coefficient Std. error t value Pr(>|t|) (Intercept) 5.02711 0.58119 8.650 0.000 PARTY -0.99110 0.09064 -10.935 0.000 AGE -0.02268 0.00714 -3.179 0.002 EDUC 0.16649 0.07637 2.180 0.029 =========================================================