Rで潜在クラスモデル poLCA (1)

2019年9月1日データサイエンスpoLCA, R, 潜在クラスモデル

潜在クラスモデル(Latent class model)は,統計モデルの一種であり,アンケート調査の分析などに使われます.

本モデルでは,回答者が異なる傾向を持つ複数の集団(クラス)によって構成されると想定します.

つまり,回答者は,単一の母集団のサンプルではなく,複数の部分母集団からのサンプルであると考えるのです.

そして,類似した回答パターンを持つ人をクラスに縮約することで,回答者のセグメンテーションをおこなうのです.

これを,潜在クラス分析(Latent class analysis)といいます.

さらに,得られたクラスと,回答者の個人属性(年齢,性別など)を用いて回帰分析をおこなうことで,「どのような特徴を持った人が,どのクラスに属し,どのような回答をしやすいのか」を分析することが可能です.
(クラスの共変量として,個人属性を導入すること)

この場合,単なる潜在クラスモデルではなく,潜在クラス回帰モデル(Latent class regression model)を用いることになります.

それでは,Rを使って潜在クラス分析をしていきたいと思います.

今回は,最初の分析に使うデータの中身を見ていきます.

環境・条件

OSWindows 10 Home
実装メモリ8 GB
CPUIntel core i5-3470
R3.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 ゴア(左)とブッシュ(右)の評価

この図1をみると,どの項目も両者で大差ないように見えますね.

しかし,その解釈で終えては,潜在クラス分析になりません!

ここで考えるのです.

このデータは,複数の派閥(クラス)の回答データが混合しているのだと.

例えば,ゴア派とブッシュ派の2つの派閥とか,中立な人も含めた3つの派閥とかです.

すると,ゴア派の人はゴアに肯定的な評価を与え,ブッシュに否定的な評価を与えると予想できます.

逆もまたしかりです.

では次回から,実際に潜在クラス分析をしていきます.