データ解析B:第4回授業 主成分分析、クラスター分析

I.主成分分析

  • 主成分分析の目的とは何か?:多次元の情報を、元のデータの情報をなるべく損失せずに、より低次元の情報に縮約する方法

⇒元のデータの分散をなるべく多く含む軸(成分)を抽出することを目指す

  • 今日使うデータと目的:
    • 東京大学朝日新聞共同調査・有権者調査(2014-2016年)
    • 東京大学朝日新聞共同調査・政治家調査(2017年衆議院候補調査)

1.研究の設計

  • 研究の問い:有権者と政治家の政策態度の在り方は、類似しているのか、それとも違うのか
  • 利用する変数:政策態度(安全保障、経済、社会保障、教育、文化)に関する各変数

2. 主成分分析とは何か?

  • データを2次元に射影したときに、最も分散が大きくなる(最も幅が広くなる)直線を引いたものが主成分分析における「第1主成分(第1軸)
  • その第1主成分に対して直交する(直角に交わる)直線の中で、最も分散が大きくなる/幅が広くなる直線を引いたものが「第2主成分(第2軸)

主成分分析によって、何がよく分かって便利なのか?

  • 複数次元のデータを2~3次元程度にまで縮約できる
  • 第1主成分と第2主成分の直線の直線をもとに、主成分得点を計算することができる
  • それぞれの成分が何を意味するのか解釈することで、共通の成分は何かを、研究者の主観ではあるもののラベリングすることができる

3. 主成分分析

データの読み込みと分析のための準備

①データの読み込み

#政治家調査
politician<-read.csv("politician2017.csv", fileEncoding = "SJIS")
attach(politician)

#有権者調査
voter<-read.csv("voter2016.csv", fileEncoding = "SJIS")
attach(voter)

前回も利用した政治家調査内の「防衛強化」変数を見返してみよう。

質問文: 日本の防衛力はもっと強化すべきだ (Q4_1)

  1. 賛成
  2. どちらかと言えば賛成
  3. どちらとも言えない
  4. どちらかと言えば反対
  5. 反対

⇒質問の順番の関係で、「最も賛成の場合に1」、「最も反対の場合に5」という直観にも反して、順序の上昇を反映していない指標化がなされている。分析に際しては、「最も賛成の場合に5」、「最も反対の場合に1」という順序に並べ替える必要がある。

②前回授業での手順も踏まえると、以下のようにすることで変数の値の変換を行うことができる。

politician$p_defense<-politician$Q4_1 #「$」記号を使うことで、どのデータセットのQ4_1なのかを指定するように

politician$p_defense[politician$Q4_1==99]<-NA
politician$p_defense[politician$Q4_1==5]<-1
politician$p_defense[politician$Q4_1==4]<-2
politician$p_defense[politician$Q4_1==2]<-4
politician$p_defense[politician$Q4_1==1]<-5

変換後の変数を確認してみると、以下のように値が反転していることが確認できる。

head(politician$Q4_1)
## [1] 3 1 3 1 1 4
head(politician$p_defense)
## [1] 3 5 3 5 5 2

③しかしこの手続きをQ4_17まで残り16回繰り返すのは面倒。そこで次のように、for ()のループ関数を使うことで繰り返しの計算を、よりシンプルなコマンドで入力しよう。

partyr<-data.frame(politician$Q4_1,politician$Q4_2,politician$Q4_3,politician$Q4_4,politician$Q4_5,politician$Q4_6,politician$Q4_7,politician$Q4_8,politician$Q4_9,politician$Q4_10,politician$Q4_11,politician$Q4_12,politician$Q4_13,politician$Q4_14,politician$Q4_15,politician$Q4_16,politician$Q4_17)


for(i in 1:17){
  reason <- partyr[,i]
  reason[partyr[,i] %in% 99] <- NA
  reason[partyr[,i] %in% 5] <- 1
  reason[partyr[,i] %in% 4] <- 2
  reason[partyr[,i] %in% 3] <- 3 
  reason[partyr[,i] %in% 2] <- 4 
  reason[partyr[,i] %in% 1] <- 5 

  partyr[,i] <- reason
}

主成分分析の実行

変換済みのデータに対して、主成分分析をしてみよう。主成分分析のコマンドprcomp()を利用するが、まずは上記の「partyr」データセットに対して、そのままprcomp()コマンドを適用してみると・・・

pca_result<-prcomp(partyr, scale=T)
## Error in svd(x, nu = 0, nv = k):  'x' に無限値か欠測値があります

上記のようなエラーメッセージが出てしまう。欠損値「NA」が含まれていることから分析ができないというエラーメッセージである。以下のコマンドによって、欠損値を除去したデータセットを準備する。

partyr<-na.omit(partyr) #partyr変数から欠損値除去し、partyrを上書き

pca_result<-prcomp(partyr, center=TRUE,scale=TRUE) #欠損値を除去したデータに対して、主成分分析を実行

pca_result
## Standard deviations (1, .., p=17):
##  [1] 2.5481164 1.3281527 1.1526226 1.0839762 0.9761384 0.8691520 0.8024599
##  [8] 0.7689804 0.7506997 0.7173961 0.6999797 0.6133580 0.5761522 0.5525551
## [15] 0.5170562 0.5033153 0.4401105
## 
## Rotation (n x k) = (17 x 17):
##                          PC1         PC2         PC3         PC4         PC5
## politician.Q4_1   0.32910590 -0.17499879  0.15146803 -0.03580397  0.09940988
## politician.Q4_2   0.28339671 -0.08690289 -0.11690108 -0.10478010 -0.02618428
## politician.Q4_3   0.30464295 -0.10576378  0.29138809 -0.04861708  0.02959419
## politician.Q4_4  -0.15324599  0.17383794  0.59209185  0.08971852 -0.21625669
## politician.Q4_5   0.31023833  0.04285494  0.05387569 -0.05059144  0.20169858
## politician.Q4_6   0.23235401 -0.30473245  0.17895107  0.02274037  0.14491960
## politician.Q4_7   0.16343042  0.48071163  0.11616474 -0.29025013 -0.01818246
## politician.Q4_8   0.12173541  0.42349993 -0.18354392 -0.49185223  0.19847269
## politician.Q4_9  -0.19248593  0.02121540  0.20602934 -0.36478744  0.46817504
## politician.Q4_10 -0.23194360 -0.03335338 -0.36568194 -0.12102020  0.22414285
## politician.Q4_11  0.31989323 -0.05567268 -0.04195227 -0.09045693 -0.14151290
## politician.Q4_12 -0.01138531 -0.26747465 -0.14002518 -0.52110920 -0.63730018
## politician.Q4_13  0.31685240  0.08655875  0.09793046 -0.13321682 -0.18675556
## politician.Q4_14 -0.30577165 -0.16710956  0.07053618 -0.18254936 -0.10155528
## politician.Q4_15 -0.28651863 -0.07848673  0.10386209 -0.26881583 -0.05092042
## politician.Q4_16 -0.14448876 -0.24028446  0.44303335 -0.27216042  0.15412293
## politician.Q4_17  0.11466074 -0.48965696 -0.16319642 -0.15240916  0.27062906
##                          PC6         PC7         PC8         PC9        PC10
## politician.Q4_1  -0.07706012  0.18652856 -0.03762627  0.02114406 -0.03412524
## politician.Q4_2  -0.28148239  0.04612208  0.54795652  0.10095469 -0.30495659
## politician.Q4_3  -0.04162236  0.31448600 -0.10975089  0.15216086  0.10407018
## politician.Q4_4   0.25435371  0.18930841 -0.02269797  0.44833416 -0.03243210
## politician.Q4_5  -0.07561344 -0.02197647 -0.05233618 -0.16872680 -0.29531707
## politician.Q4_6   0.30761777 -0.06555658 -0.02356406 -0.47941241  0.41046270
## politician.Q4_7   0.05579995 -0.36815008  0.26678469  0.03464729 -0.05149128
## politician.Q4_8   0.01726369 -0.03040224 -0.30610389  0.11097671  0.38734361
## politician.Q4_9   0.40197269  0.31384375  0.25306409 -0.17877176 -0.28748688
## politician.Q4_10 -0.16030760  0.47086634 -0.25938620  0.12841759 -0.14496525
## politician.Q4_11 -0.11123096  0.27536729  0.08366792 -0.04505524  0.14625582
## politician.Q4_12  0.30811932 -0.01772253 -0.17247835 -0.12835814 -0.26403228
## politician.Q4_13 -0.18228496  0.22117489 -0.07683552  0.12101685  0.10244604
## politician.Q4_14 -0.15676947  0.16629879  0.22346765  0.01949621  0.35070463
## politician.Q4_15 -0.31023546  0.01545047  0.38109724 -0.09120310  0.31300418
## politician.Q4_16 -0.49149827 -0.33257563 -0.37561459 -0.06014776 -0.21512327
## politician.Q4_17  0.23330653 -0.32144703  0.08581842  0.63203340  0.11432527
##                          PC11        PC12        PC13         PC14        PC15
## politician.Q4_1   0.028448555 -0.09817518 -0.05708889  0.400449405  0.05439509
## politician.Q4_2  -0.126679828  0.39013140 -0.46444963 -0.070127683  0.04766265
## politician.Q4_3   0.174121785  0.06477413  0.12190397  0.404032287  0.41080693
## politician.Q4_4  -0.283085941 -0.07600925 -0.27993702 -0.231431934  0.04465924
## politician.Q4_5  -0.127253516 -0.74264519 -0.24999471 -0.101521522 -0.10857290
## politician.Q4_6  -0.457998273  0.18078208 -0.14492842 -0.046560384 -0.06808070
## politician.Q4_7  -0.420719254  0.02023737  0.42080045  0.239215669  0.08195951
## politician.Q4_8   0.159106562  0.08845042 -0.42013206 -0.102049100  0.09935304
## politician.Q4_9   0.265050740  0.11319721  0.13918135 -0.095657198 -0.13139163
## politician.Q4_10 -0.590716048  0.01286481  0.11856592  0.078828435  0.04768486
## politician.Q4_11 -0.003774812 -0.04466431  0.38127621 -0.677445977  0.29899006
## politician.Q4_12 -0.002651053 -0.05539387 -0.06166584  0.088100695  0.06470955
## politician.Q4_13  0.067707504  0.06959351  0.19833714  0.002128653 -0.77819803
## politician.Q4_14 -0.119285872 -0.05765447 -0.10114815  0.125808050 -0.21178678
## politician.Q4_15  0.070836130 -0.38220094  0.01239672  0.054526786  0.14577753
## politician.Q4_16 -0.033195574  0.21599198  0.05946531 -0.175009800  0.01697781
## politician.Q4_17 -0.016113422 -0.12964985  0.12187944 -0.079461356 -0.07678598
##                          PC16        PC17
## politician.Q4_1   0.089387195  0.77342353
## politician.Q4_2  -0.055132814 -0.08834333
## politician.Q4_3   0.001096584 -0.52897759
## politician.Q4_4  -0.096208783  0.09333680
## politician.Q4_5   0.147105473 -0.23917251
## politician.Q4_6  -0.164568339 -0.06689929
## politician.Q4_7   0.108462504  0.01643161
## politician.Q4_8   0.014290931  0.05846772
## politician.Q4_9   0.009934581  0.01068232
## politician.Q4_10 -0.149266556 -0.01850900
## politician.Q4_11  0.175253596  0.13984763
## politician.Q4_12 -0.029890268 -0.01021812
## politician.Q4_13 -0.233275181 -0.08903993
## politician.Q4_14  0.712661568 -0.08983035
## politician.Q4_15 -0.547578553  0.05272311
## politician.Q4_16  0.042472168  0.01059688
## politician.Q4_17 -0.032945966 -0.03326979

prcomp()コマンドを実行すると、以下のように「Environment」タブにpca_resultとして結果が格納されるていることが確認できる。それぞれのオブジェクトの内容は次の通りである。

  • x:主成分スコア
  • sdev:標準偏差 (固有値の正の平方根) \(\sqrt{全体の変数のうちのいくつ分を説明できているか}\)

例:15個の変数に対して主成分分析をし、sdev=3の場合。 \(\frac{3^2}{15}=0.6\) →第1主成分は15個ある変数のうち\(3^2=9\)個の変数の分散を説明し、全体の60%の情報を保有しているという解釈に

  • rotation:各主成分軸の固有ベクトル

主成分分析の「主成分(軸)」の解釈

⑥私たちがまず知りたいのは、主成分分析によって検出された軸がどのような性質を持つのかという点。

##                          PC1         PC2         PC3         PC4         PC5
## politician.Q4_1   0.32910590 -0.17499879  0.15146803 -0.03580397  0.09940988
## politician.Q4_2   0.28339671 -0.08690289 -0.11690108 -0.10478010 -0.02618428
## politician.Q4_3   0.30464295 -0.10576378  0.29138809 -0.04861708  0.02959419
## politician.Q4_4  -0.15324599  0.17383794  0.59209185  0.08971852 -0.21625669
## politician.Q4_5   0.31023833  0.04285494  0.05387569 -0.05059144  0.20169858
## politician.Q4_6   0.23235401 -0.30473245  0.17895107  0.02274037  0.14491960
## politician.Q4_7   0.16343042  0.48071163  0.11616474 -0.29025013 -0.01818246
## politician.Q4_8   0.12173541  0.42349993 -0.18354392 -0.49185223  0.19847269
## politician.Q4_9  -0.19248593  0.02121540  0.20602934 -0.36478744  0.46817504
## politician.Q4_10 -0.23194360 -0.03335338 -0.36568194 -0.12102020  0.22414285
## politician.Q4_11  0.31989323 -0.05567268 -0.04195227 -0.09045693 -0.14151290
## politician.Q4_12 -0.01138531 -0.26747465 -0.14002518 -0.52110920 -0.63730018
## politician.Q4_13  0.31685240  0.08655875  0.09793046 -0.13321682 -0.18675556
## politician.Q4_14 -0.30577165 -0.16710956  0.07053618 -0.18254936 -0.10155528
## politician.Q4_15 -0.28651863 -0.07848673  0.10386209 -0.26881583 -0.05092042
## politician.Q4_16 -0.14448876 -0.24028446  0.44303335 -0.27216042  0.15412293
## politician.Q4_17  0.11466074 -0.48965696 -0.16319642 -0.15240916  0.27062906
##                          PC6         PC7         PC8         PC9        PC10
## politician.Q4_1  -0.07706012  0.18652856 -0.03762627  0.02114406 -0.03412524
## politician.Q4_2  -0.28148239  0.04612208  0.54795652  0.10095469 -0.30495659
## politician.Q4_3  -0.04162236  0.31448600 -0.10975089  0.15216086  0.10407018
## politician.Q4_4   0.25435371  0.18930841 -0.02269797  0.44833416 -0.03243210
## politician.Q4_5  -0.07561344 -0.02197647 -0.05233618 -0.16872680 -0.29531707
## politician.Q4_6   0.30761777 -0.06555658 -0.02356406 -0.47941241  0.41046270
## politician.Q4_7   0.05579995 -0.36815008  0.26678469  0.03464729 -0.05149128
## politician.Q4_8   0.01726369 -0.03040224 -0.30610389  0.11097671  0.38734361
## politician.Q4_9   0.40197269  0.31384375  0.25306409 -0.17877176 -0.28748688
## politician.Q4_10 -0.16030760  0.47086634 -0.25938620  0.12841759 -0.14496525
## politician.Q4_11 -0.11123096  0.27536729  0.08366792 -0.04505524  0.14625582
## politician.Q4_12  0.30811932 -0.01772253 -0.17247835 -0.12835814 -0.26403228
## politician.Q4_13 -0.18228496  0.22117489 -0.07683552  0.12101685  0.10244604
## politician.Q4_14 -0.15676947  0.16629879  0.22346765  0.01949621  0.35070463
## politician.Q4_15 -0.31023546  0.01545047  0.38109724 -0.09120310  0.31300418
## politician.Q4_16 -0.49149827 -0.33257563 -0.37561459 -0.06014776 -0.21512327
## politician.Q4_17  0.23330653 -0.32144703  0.08581842  0.63203340  0.11432527
##                          PC11        PC12        PC13         PC14        PC15
## politician.Q4_1   0.028448555 -0.09817518 -0.05708889  0.400449405  0.05439509
## politician.Q4_2  -0.126679828  0.39013140 -0.46444963 -0.070127683  0.04766265
## politician.Q4_3   0.174121785  0.06477413  0.12190397  0.404032287  0.41080693
## politician.Q4_4  -0.283085941 -0.07600925 -0.27993702 -0.231431934  0.04465924
## politician.Q4_5  -0.127253516 -0.74264519 -0.24999471 -0.101521522 -0.10857290
## politician.Q4_6  -0.457998273  0.18078208 -0.14492842 -0.046560384 -0.06808070
## politician.Q4_7  -0.420719254  0.02023737  0.42080045  0.239215669  0.08195951
## politician.Q4_8   0.159106562  0.08845042 -0.42013206 -0.102049100  0.09935304
## politician.Q4_9   0.265050740  0.11319721  0.13918135 -0.095657198 -0.13139163
## politician.Q4_10 -0.590716048  0.01286481  0.11856592  0.078828435  0.04768486
## politician.Q4_11 -0.003774812 -0.04466431  0.38127621 -0.677445977  0.29899006
## politician.Q4_12 -0.002651053 -0.05539387 -0.06166584  0.088100695  0.06470955
## politician.Q4_13  0.067707504  0.06959351  0.19833714  0.002128653 -0.77819803
## politician.Q4_14 -0.119285872 -0.05765447 -0.10114815  0.125808050 -0.21178678
## politician.Q4_15  0.070836130 -0.38220094  0.01239672  0.054526786  0.14577753
## politician.Q4_16 -0.033195574  0.21599198  0.05946531 -0.175009800  0.01697781
## politician.Q4_17 -0.016113422 -0.12964985  0.12187944 -0.079461356 -0.07678598
##                          PC16        PC17
## politician.Q4_1   0.089387195  0.77342353
## politician.Q4_2  -0.055132814 -0.08834333
## politician.Q4_3   0.001096584 -0.52897759
## politician.Q4_4  -0.096208783  0.09333680
## politician.Q4_5   0.147105473 -0.23917251
## politician.Q4_6  -0.164568339 -0.06689929
## politician.Q4_7   0.108462504  0.01643161
## politician.Q4_8   0.014290931  0.05846772
## politician.Q4_9   0.009934581  0.01068232
## politician.Q4_10 -0.149266556 -0.01850900
## politician.Q4_11  0.175253596  0.13984763
## politician.Q4_12 -0.029890268 -0.01021812
## politician.Q4_13 -0.233275181 -0.08903993
## politician.Q4_14  0.712661568 -0.08983035
## politician.Q4_15 -0.547578553  0.05272311
## politician.Q4_16  0.042472168  0.01059688
## politician.Q4_17 -0.032945966 -0.03326979

ここで表示される「PC1」が第1軸(第1主成分)、「PC2」が第2軸(第2主成分)

library(ggfortify)
## Warning: パッケージ 'ggfortify' はバージョン 4.2.3 の R の下で造られました
autoplot(pca_result,loadings = TRUE, loadings.label = TRUE)

上記のプロットをもとに、第1主成分がどの要素を包摂するのかを整理する。以下の図を参考にしながら主成分の各軸について解釈してみよう。

  • 第1主成分正の方向
    • Q4_4:非核
    • Q4_9:教育無償化
    • Q4_10:課税強化
    • Q4_14:夫婦別姓
    • Q4_15:同性婚
    • Q4_16:選挙権年齢引き下げ
  • 第1主成分負の方向
    • Q4_7:公共事業
    • Q4_8:景気対策・財政出動
  • 第2主成分負の方向
    • Q4_1:防衛強化
    • Q4_2:先制攻撃
    • Q4_3:北朝鮮圧力
    • Q4_5: 靖国
    • Q4_6:小さな政府
    • Q4_11:治安維持(プライバシー侵害)
    • Q4_12:外国人労働者
    • Q4_13:原発容認
    • Q4_17:一院制

2つの主成分から見えてくることは何だろうか?

  • 第1主成分:リベラルな政策志向。ニュー・イシューをはじめとするリベラルな価値に寛容な軸。リベラル軸

  • 第2主成分:保守的に反発する政策志向。伝統的な安全保障イシューと小さな政府志向への反発を内包した軸。反保守軸

では、「jes2019_unified.csv」データと調査票を使って、有権者に関する主成分分析をしてみよう。主成分分析

主成分得点と各観察のプロット

⑦主成分得点をもとに、主要な政治家がどのような位置にあるのかを見てみよう。

#データセットを結合するために、政治家名の含まれたデータセットを再度構築
policy_original<-data.frame(politician$Q4_1,politician$Q4_2,politician$Q4_3,politician$Q4_4,politician$Q4_5,politician$Q4_6,politician$Q4_7,politician$Q4_8,politician$Q4_9,politician$Q4_10,politician$Q4_11,politician$Q4_12,politician$Q4_13,politician$Q4_14,politician$Q4_15,politician$Q4_16,politician$Q4_17,NAME)

#欠損値を指定
for(i in 1:17){
  reason <- policy_original[,i]
  reason[policy_original[,i] %in% 99] <- NA
  policy_original[,i] <- reason
}

#欠損値を除去
policy_original<-na.omit(policy_original)


#tidyverseパッケージを利用し、主成分得点を含めたデータセットを構築
library(tidyverse)
policy_name<-mutate(policy_original, score1 = pca_result$x[, 1], score2 = pca_result$x[, 2])

#政治家名を明示しながら、主成分得点をプロット
library(ggrepel)
library(ggplot2)

#散布図をプロット
pca_fig<-ggplot(policy_name, aes(x=policy_name$score1, y=policy_name$score2,label=policy_name$NAME))
pca_fig <- pca_fig + geom_point() + geom_text(aes(y=policy_name$score2 + .1, label=NAME), size = 2, vjust=0)
plot(pca_fig)

特定の政治家名だけをプロットさせることも可能

#「NAME」変数をもとに異なる名称の列を作成
policy_name$PNAME <- policy_name$NAME

#表示させたい条件を作成
idx <- policy_name$PNAME %in% c("安倍晋三","枝野幸男","玉木雄一郎",
                         "山口那津男","松井一郎","志位和夫",
                         "山本太郎","中山成彬","立花孝志")

#表示させたい条件以外は、欠損データにする
policy_name$PNAME[!idx] <- NA

#プロット
pca_fig<-ggplot(policy_name, aes(x=policy_name$score1, y=policy_name$score2,label=policy_name$NAME))
pca_fig <- pca_fig + geom_point() + geom_text(aes(y=policy_name$score2 + .1, label=PNAME), size = 3, vjust=0)+
          xlab("第1主成分(リベラル軸)")+ylab("第2主成分(反保守軸)")
plot(pca_fig)

寄与率の計算

⑧次に知りたいことは、各主成分が全体の分散(ばらつき)のうちどれだけを説明できるのかということ。そのために、pca_result$sedvの名をもとに計算を進める。

pca_result$sdev
##  [1] 2.5481164 1.3281527 1.1526226 1.0839762 0.9761384 0.8691520 0.8024599
##  [8] 0.7689804 0.7506997 0.7173961 0.6999797 0.6133580 0.5761522 0.5525551
## [15] 0.5170562 0.5033153 0.4401105

第1主成分の標準偏差は2.548。この結果から、第1主成分が全体の分散の何パーセントを説明しえているのかを計算するには・・・

(2.548^2)/17 #「^2」は二乗、「/」は割る。
## [1] 0.3819002

つまり第1主成分は17個の変数のうち\(2.548^2=6.677\)の分散を説明できることから、39.2%の情報を有する軸であると解釈できる。これを「寄与率」と呼ぶ。

summary(pca_result)
## Importance of components:
##                           PC1    PC2     PC3     PC4     PC5     PC6     PC7
## Standard deviation     2.5481 1.3282 1.15262 1.08398 0.97614 0.86915 0.80246
## Proportion of Variance 0.3819 0.1038 0.07815 0.06912 0.05605 0.04444 0.03788
## Cumulative Proportion  0.3819 0.4857 0.56385 0.63297 0.68902 0.73345 0.77133
##                            PC8     PC9    PC10    PC11    PC12    PC13    PC14
## Standard deviation     0.76898 0.75070 0.71740 0.69998 0.61336 0.57615 0.55256
## Proportion of Variance 0.03478 0.03315 0.03027 0.02882 0.02213 0.01953 0.01796
## Cumulative Proportion  0.80612 0.83927 0.86954 0.89836 0.92049 0.94002 0.95798
##                           PC15   PC16    PC17
## Standard deviation     0.51706 0.5033 0.44011
## Proportion of Variance 0.01573 0.0149 0.01139
## Cumulative Proportion  0.97370 0.9886 1.00000
summary(pca_result)
## Importance of components:
##                           PC1    PC2     PC3     PC4     PC5     PC6     PC7
## Standard deviation     2.5481 1.3282 1.15262 1.08398 0.97614 0.86915 0.80246
## Proportion of Variance 0.3819 0.1038 0.07815 0.06912 0.05605 0.04444 0.03788
## Cumulative Proportion  0.3819 0.4857 0.56385 0.63297 0.68902 0.73345 0.77133
##                            PC8     PC9    PC10    PC11    PC12    PC13    PC14
## Standard deviation     0.76898 0.75070 0.71740 0.69998 0.61336 0.57615 0.55256
## Proportion of Variance 0.03478 0.03315 0.03027 0.02882 0.02213 0.01953 0.01796
## Cumulative Proportion  0.80612 0.83927 0.86954 0.89836 0.92049 0.94002 0.95798
##                           PC15   PC16    PC17
## Standard deviation     0.51706 0.5033 0.44011
## Proportion of Variance 0.01573 0.0149 0.01139
## Cumulative Proportion  0.97370 0.9886 1.00000

II.クラスター分析

1.クラスター分析とは何か?

  • 個体の関心のある変数間に関して、類似度・非類似度、すなわち距離をもとにクラスター(cluster)を作り、類似するグループをまとめる手法。類似度を表す方法として、デンドログラム・樹形図が利用される。

2.クラスター分析の手順

以下のような\(m\times n\)データ行列から、 \[ \begin{bmatrix} x_{11} & x_{12} & \cdots &x_{1n} \\\ x_{21} & x_{22} & \cdots &x_{2n} \\\ \vdots & \vdots & \ddots & \vdots \\\ x_{m1} &x_{m2} &\cdots & x_{mn} \end{bmatrix} \]

各要素間の距離を算出し、距離行列を生成する。

\[ \begin{bmatrix} 0 & & & \\\ d_{21} &0 & &\\\ \vdots & \vdots & \ddots & \\\ d_{m1} &d_{m2} &\cdots & 0 \end{bmatrix} \]

この距離をもとに、隣接する近い距離の個体間どうしの距離をコーフェン行列として計算する。

\[ \begin{bmatrix} 0 & & & \\\ c_{21} &0 & &\\\ \vdots & \vdots & \ddots & \\\ c_{m1} &c_{m2} &\cdots & 0 \end{bmatrix} \] コーフェン行列の算出方法には次のものがある。

  • 単連結法(最短距離法)
  • 完全連結法(最長距離砲)
  • 群平均法
  • 重心法
  • メディアン法
  • マックイティ法
  • 最小分散法

クラスタ分析の実行

①クラスタ分析のためにデータを調整する。ここでも議員の政策態度データを利用しよう(「**policy_name」データ・オブジェクト)。まずはわかりやすいように、変数の名前を政策態度を明記したものに変更しておこう。

#NAME変数を削除して新たなデータフレームを作成
policy_original<-data.frame(politician$Q4_1,politician$Q4_2,politician$Q4_3,politician$Q4_4,politician$Q4_5,politician$Q4_6,politician$Q4_7,politician$Q4_8,politician$Q4_9,politician$Q4_10,politician$Q4_11,politician$Q4_12,politician$Q4_13,politician$Q4_14,politician$Q4_15,politician$Q4_16,politician$Q4_17)

#変数名を再定義
library(dplyr)
policy_original<-rename(policy_original, defense=politician.Q4_1)
policy_original<-rename(policy_original, premp=politician.Q4_2)
policy_original<-rename(policy_original, nkorea=politician.Q4_3)
policy_original<-rename(policy_original, nuclear=politician.Q4_4)
policy_original<-rename(policy_original, yasukuni=politician.Q4_5)
policy_original<-rename(policy_original, smalgov=politician.Q4_6)
policy_original<-rename(policy_original, pubcon=politician.Q4_7)
policy_original<-rename(policy_original, business=politician.Q4_8)
policy_original<-rename(policy_original, education=politician.Q4_9)
policy_original<-rename(policy_original, taxation=politician.Q4_10)
policy_original<-rename(policy_original, police=politician.Q4_11)
policy_original<-rename(policy_original, foreigner=politician.Q4_12)
policy_original<-rename(policy_original, atomic=politician.Q4_13)
policy_original<-rename(policy_original, couple=politician.Q4_14)
policy_original<-rename(policy_original, marriage=politician.Q4_15)
policy_original<-rename(policy_original, eleage=politician.Q4_16)
policy_original<-rename(policy_original, unicam=politician.Q4_17)

②次に、クラスター分析を行うためには、クラスター化したい変数を行方向から列方向に変える、すなわち行列を転置する必要がある。

head(policy_original)
##   defense premp nkorea nuclear yasukuni smalgov pubcon business education
## 1       3     5      5       1        5       5      4        5         2
## 2       1     3      1       1       99       3      2        2         2
## 3       3     5      2       1        5       4      4        4         3
## 4       1     3      1       1        2       3      1        1         1
## 5       1     3      2       3        2       2      2        2         3
## 6       4     5      4       1        5       4      3        4         1
##   taxation police foreigner atomic couple marriage eleage unicam
## 1        1      5         3      5      1        3      1      5
## 2        3      3         3      2      3        3      3      3
## 3        2      4         3      4      1        2      1      5
## 4        3      3         3      1      3        4      2      4
## 5        4      2         2      2      3        3      5      4
## 6        1      5         3      3      2        2      2      5
#行列の転置: t()
tpolicy_original<-t(policy_original)
tpolicy_original<-na.omit(tpolicy_original)

③距離行列を計算する。

#距離行列の計算:dist()
policy_dist<-dist(tpolicy_original)
policy_dist
##             defense     premp    nkorea   nuclear  yasukuni   smalgov    pubcon
## premp     310.78771                                                            
## nkorea     97.68316 325.42434                                                  
## nuclear   220.38829 297.29783 198.64290                                        
## yasukuni  426.64505 440.85258 415.86777 439.05694                              
## smalgov   220.32930 318.43367 198.79889 240.21241 383.95182                    
## pubcon    196.64435 336.70165 172.22369 219.57687 423.51505 170.61067          
## business  240.63873 305.74172 258.98842 258.88994 421.38700 168.27359 195.02820
## education 259.75758 322.08229 241.47464 238.96652 413.98309 195.86985 257.80807
## taxation  259.51108 289.20408 241.73539 195.25112 410.96715 195.29721 219.63834
## police    260.03269 288.31580 277.21652 243.10080 430.37309 234.07264 257.62764
## foreigner 240.41839 273.52879 220.80987 171.66828 420.51040 215.34623 237.90755
## atomic    292.08218 349.18906 276.74898 278.34331 434.17508 273.88136 292.12155
## couple    380.87662 441.77143 368.78042 390.25889 386.96124 359.95000 376.79968
## marriage  427.89485 460.34661 417.56197 414.88432 431.30036 406.68784 399.61106
## eleage    259.50145 349.77135 241.90287 239.17358 434.39959 238.14701 258.12788
## unicam    392.65761 429.66382 380.84117 381.73420 418.72186 371.41486 390.12434
##            business education  taxation    police foreigner    atomic    couple
## premp                                                                          
## nkorea                                                                         
## nuclear                                                                        
## yasukuni                                                                       
## smalgov                                                                        
## pubcon                                                                         
## business                                                                       
## education 255.98242                                                            
## taxation  218.47425 193.72661                                                  
## police    216.80867 141.52385 195.34329                                        
## foreigner 236.45718 168.53783 166.80827 168.95562                              
## atomic    291.20268 278.04316 239.97500 274.67253 216.71871                    
## couple    398.11556 362.46793 384.56859 385.63973 372.56409 390.06538          
## marriage  419.06682 410.75540 407.25176 408.23645 395.98611 388.83158 235.95127
## eleage    291.03264 195.61953 236.49313 239.35330 216.77177 277.18766 335.42510
## unicam    408.93153 350.71071 373.60675 372.64594 361.09417 399.84997 216.15966
##            marriage    eleage
## premp                        
## nkorea                       
## nuclear                      
## yasukuni                     
## smalgov                      
## pubcon                       
## business                     
## education                    
## taxation                     
## police                       
## foreigner                    
## atomic                       
## couple                       
## marriage                     
## eleage    362.40999          
## unicam    254.84897 322.62207

④ユークリッド距離を用いたか階層クラスター分析を実行し、その結果をプロットする。

h_policy<-hclust(policy_dist)

plot(h_policy,main="最遠隣法")

III.主成分分析とクラスター分析の実践

1. 有権者調査データをもとに、主成分分析を実行しよう。

  • W1Q16_1からW1Q16_17の政策態度変数を利用する

  • 変数の値を再割り当てする(1→5の順序値を、5→1に変換)

  • 主成分分析結果をもとに各変数の位置づけをプロットし、軸を解釈する。

  • 主成分得点を計算し、プロットする。

2.有権者調査データをもとに、クラスター分析を実行しよう。

  • 同じ変数を利用する。

  • 行列の転置に気を付ける。

  • 距離行列を計算

  • クラスター分析を実行

  • デンドログラムの描画