Rで潜在クラスモデル poLCA (1)
潜在クラスモデル(Latent class model)は,統計モデルの一種であり,アンケート調査の分析などに使われます.
本モデルでは,回答者が異なる傾向を持つ複数の集団(クラス)によって構成されると想定します.
つまり,回答者は,単一の母集団のサンプルではなく,複数の部分母集団からのサンプルであると考えるのです.
そして,類似した回答パターンを持つ人をクラスに縮約することで,回答者のセグメンテーションをおこなうのです.
これを,潜在クラス分析(Latent class analysis)といいます.
さらに,得られたクラスと,回答者の個人属性(年齢,性別など)を用いて回帰分析をおこなうことで,「どのような特徴を持った人が,どのクラスに属し,どのような回答をしやすいのか」を分析することが可能です.
(クラスの共変量として,個人属性を導入すること)
この場合,単なる潜在クラスモデルではなく,潜在クラス回帰モデル(Latent class regression model)を用いることになります.
それでは,Rを使って潜在クラス分析をしていきたいと思います.
今回は,最初の分析に使うデータの中身を見ていきます.
環境・条件
| OS | Windows 10 Home | 
| 実装メモリ | 8 GB | 
| CPU | Intel core i5-3470 | 
| R | 3.6.0 | 
| 潜在クラス分析パッケージ | poLCA 1.4.1 (Polytomous Variable Latent Class Analysis) | 
使用データ
poLCAの中に最初から入っているサンプルデータ,「election」を使います.
これは,2000年のアメリカ合衆国大統領選挙における世論調査への回答データです.
当時の大統領選は,「ブッシュ vs ゴア」の一騎打ちで,最終的にブッシュが勝ちました.
ちなみに,選挙結果をめぐり「ブッシュ対ゴア事件」という法廷闘争にまで発展した激しい戦いだったらしいです.
まあ,私は非常に小さかったので,なにも覚えてませんが(笑)
さて,データの詳細に入りましょう.
とりあえず,poLCAとelectionデータを読みこみます.
library(poLCA)
data("election")本データには,ブッシュとゴア両者に対する投票者の評価と,投票者の個人属性が含まれています.
フォーマットは,以下の通りです.
str(election)'data.frame':	1785 obs. of  17 variables:
 $ MORALG : Factor w/ 4 levels "1 Extremely well",..: 3 4 1 2 2 2 2 2 2 1 
 $ CARESG : Factor w/ 4 levels "1 Extremely well",..: 1 3 2 2 4 3 NA 2 2 1
 $ KNOWG  : Factor w/ 4 levels "1 Extremely well",..: 2 4 2 2 2 3 2 2 2 1 
 $ LEADG  : Factor w/ 4 levels "1 Extremely well",..: 2 3 1 2 3 2 2 2 3 1 
 $ DISHONG: Factor w/ 4 levels "1 Extremely well",..: 3 2 3 2 2 2 4 3 4 4
 $ INTELG : Factor w/ 4 levels "1 Extremely well",..: 2 2 2 2 2 2 2 2 2 1
 $ MORALB : Factor w/ 4 levels "1 Extremely well",..: 1 NA 2 2 1 2 NA 3 2 2
 $ CARESB : Factor w/ 4 levels "1 Extremely well",..: 1 NA 2 3 1 NA 3 4 3 4
 $ KNOWB  : Factor w/ 4 levels "1 Extremely well",..: 2 2 2 2 2 3 2 4 2 2
 $ LEADB  : Factor w/ 4 levels "1 Extremely well",..: 2 3 3 2 2 2 2 4 2 3
 $ DISHONB: Factor w/ 4 levels "1 Extremely well",..: 4 NA 3 3 3 2 4 3 3 3
 $ INTELB : Factor w/ 4 levels "1 Extremely well",..: 2 1 2 1 2 2 NA 4 2 2
 $ VOTE3  : num  2 NA 1 1 2 1 NA 1 1 1 ...
 $ AGE    : num  49 35 57 63 40 77 43 47 26 48 ...
 $ EDUC   : num  5 4 3 4 5 2 4 7 6 3 ...
 $ GENDER : num  1 2 2 1 2 1 1 2 2 2 ...
 $ PARTY  : num  5 3 1 3 7 1 6 1 1 1 ...12個の質的変数(評価値)と5個の量的変数(投票者属性)が含まれています.
観測数は1785です.ただし,評価値に関する完全データは1311です.
変数の内容を以下にまとめました.
| 項目名 | 対象 | 意味 | 値 | 
| MORALG | ゴア | 道徳性 | 1  extremely well 2 quite well 3 not too well 4 not well at all | 
| CARESG | ゴア | 思いやりの有無 | 上に同じ | 
| KNOWG | ゴア | 知識の豊富さ | 上に同じ | 
| LEADG | ゴア | リーダーシップの強さ | 上に同じ | 
| DISHONG | ゴア | 不誠実さ | 上に同じ | 
| INTELG | ゴア | 賢明さ | 上に同じ | 
| MORALB | ブッシュ | 道徳性 | 上に同じ | 
| CARESB | ブッシュ | 思いやりの有無 | 上に同じ | 
| KNOWB | ブッシュ | 知識の豊富さ | 上に同じ | 
| LEADB | ブッシュ | リーダーシップの強さ | 上に同じ | 
| DISHONB | ブッシュ | 不誠実さ | 上に同じ | 
| INTELB | ブッシュ | 賢明さ | 上に同じ | 
| VOTE3 | 投票者 | 投票結果 | 1  (ゴア) 2 (ブッシュ) 3 (その他) | 
| AGE | 投票者 | 年齢 | 18 ~ 97 | 
| EDUC | 投票者 | 教育水準 | 1  (8 grades or less) 2 (9-11 grades, no further schooling) 3 (High school diploma or equivalency) 4 (More than 12 years of schooling, no higher degree) 5 (junior or community college level degree) 6 (BA level degrees, no advanced degree) 7 (Advanced degree) | 
| GENDER | 投票者 | 性別 | 1  (Male) 2 (Female) | 
| PARTY | 投票者 | 党派の自己認識 | 1  (Strong Democrat) 2 (Weak Democrat) 3 (Independent-Democrat) 4 (Independent-Independent) 5 (Independent-Republican) 6 (Weak Republican) 7 (Strong Republican) | 
補足として,ゴアは民主党(Democrat)で,ブッシュは共和党(Republican)です.
道徳性とか思いやりとか不誠実さとか,普通に連関がありそうな項目が並んでるんですね…
どうでもいいですが,教育水準は区分がめちゃめちゃ細かいですね(笑)
簡単な要約統計量
せっかくですし,記述統計してみましょう!
要約統計量はsummary()で出せます.
summary(election)               MORALG                  CARESG   
 1 Extremely well :423   1 Extremely well :277  
 2 Quite well     :820   2 Quite well     :713  
 3 Not too well   :287   3 Not too well   :464  
 4 Not well at all:133   4 Not well at all:232  
 NA's             :122   NA's             : 99  
                                                
                                                
               KNOWG                   LEADG    
 1 Extremely well :461   1 Extremely well :258  
 2 Quite well     :997   2 Quite well     :728  
 3 Not too well   :212   3 Not too well   :522  
 4 Not well at all: 59   4 Not well at all:185  
 NA's             : 56   NA's             : 92  
                                                
                                                
              DISHONG                  INTELG   
 1 Extremely well :133   1 Extremely well :494  
 2 Quite well     :312   2 Quite well     :995  
 3 Not too well   :629   3 Not too well   :182  
 4 Not well at all:557   4 Not well at all: 65  
 NA's             :154   NA's             : 49  
                                                
                                                
               MORALB                  CARESB   
 1 Extremely well :340   1 Extremely well :155  
 2 Quite well     :841   2 Quite well     :625  
 3 Not too well   :330   3 Not too well   :562  
 4 Not well at all: 98   4 Not well at all:342  
 NA's             :176   NA's             :101  
                                                
                                                
               KNOWB                   LEADB    
 1 Extremely well :274   1 Extremely well :266  
 2 Quite well     :933   2 Quite well     :842  
 3 Not too well   :379   3 Not too well   :407  
 4 Not well at all:133   4 Not well at all:166  
 NA's             : 66   NA's             :104  
                                                
                                                
              DISHONB                  INTELB        VOTE3      
 1 Extremely well : 70   1 Extremely well :329   Min.   :1.000  
 2 Quite well     :288   2 Quite well     :967   1st Qu.:1.000  
 3 Not too well   :653   3 Not too well   :306   Median :1.000  
 4 Not well at all:574   4 Not well at all:110   Mean   :1.534  
 NA's             :200   NA's             : 73   3rd Qu.:2.000  
                                                 Max.   :3.000  
                                                 NA's   :625    
      AGE             EDUC           GENDER         PARTY      
 Min.   :18.00   Min.   :1.000   Min.   :1.00   Min.   :1.000  
 1st Qu.:34.00   1st Qu.:3.000   1st Qu.:1.00   1st Qu.:2.000  
 Median :45.00   Median :4.000   Median :2.00   Median :3.000  
 Mean   :47.12   Mean   :4.305   Mean   :1.56   Mean   :3.726  
 3rd Qu.:58.00   3rd Qu.:6.000   3rd Qu.:2.00   3rd Qu.:6.000  
 Max.   :97.00   Max.   :7.000   Max.   :2.00   Max.   :7.000  
 NA's   :9       NA's   :6                      NA's   :25  グラフ化しましょ
同じ評価項目について,ゴアとブッシュで比較してみましょう.
ソースコードの見苦しさは異常w
par(mfcol=c(6,2))
barplot(table(election$MORALG),  main="MORALG",  ylab = "count", ylim = c(0,1000))
barplot(table(election$CARESG),  main="CARESG",  ylab = "count", ylim = c(0,1000))
barplot(table(election$KNOWG),   main="KNOWG",   ylab = "count", ylim = c(0,1000))
barplot(table(election$LEADG),   main="LEADG",   ylab = "count", ylim = c(0,1000))
barplot(table(election$DISHONG), main="DISHONG", ylab = "count", ylim = c(0,1000))
barplot(table(election$INTELG),  main="INTELG",  ylab = "count", ylim = c(0,1000))
barplot(table(election$MORALB),  main="MORALB",  ylab = "count", ylim = c(0,1000))
barplot(table(election$CARESB),  main="CARESB",  ylab = "count", ylim = c(0,1000))
barplot(table(election$KNOWB),   main="KNOWB",   ylab = "count", ylim = c(0,1000))
barplot(table(election$LEADB),   main="LEADB",   ylab = "count", ylim = c(0,1000))
barplot(table(election$DISHONB), main="DISHONB", ylab = "count", ylim = c(0,1000))
barplot(table(election$INTELB),  main="INTELB",  ylab = "count", ylim = c(0,1000))この図1をみると,どの項目も両者で大差ないように見えますね.
しかし,その解釈で終えては,潜在クラス分析になりません!
ここで考えるのです.
このデータは,複数の派閥(クラス)の回答データが混合しているのだと.
例えば,ゴア派とブッシュ派の2つの派閥とか,中立な人も含めた3つの派閥とかです.
すると,ゴア派の人はゴアに肯定的な評価を与え,ブッシュに否定的な評価を与えると予想できます.
逆もまたしかりです.
では次回から,実際に潜在クラス分析をしていきます.