コレスポンデンス分析(対応分析)とは、人の属性の類似性(もしくは対応)を図に表す分析。
結果を見るといろいろと解釈したくなる、面白い分析。
R では、caというパッケージで分析可能。
目次
コレスポンデンス分析のパッケージ ca をインストールして準備する
最初の一回だけインストールをする。
install.packages("ca")
caパッケージを呼び出す。
library(ca)
次に例題のデータを読み込む。
コレスポンデンス分析用の例題データ
2番さんから30番さんに受動喫煙の被害にあった場所を回答してもらったデータ。
1 が被害にあったことを示し、0 は被害にあってないことを示している。
27人のデータ。14番と28番が無回答。
> table(dat$NO, dat$basho)
カラオケ バー パチンコ レストラン 駅 家 学校 居酒屋 車内 職場 食堂
2 1 0 1 1 0 1 1 1 0 1 1
3 0 0 0 0 0 0 0 0 1 0 0
4 0 0 0 1 1 0 0 1 0 1 0
5 1 1 0 1 0 0 0 1 1 1 1
6 1 0 0 1 0 0 0 1 1 0 0
7 1 1 1 1 1 1 0 1 1 1 1
8 1 1 1 1 0 0 0 1 1 1 1
9 1 1 1 1 0 1 0 1 1 1 1
10 0 0 0 1 1 1 0 1 0 0 1
11 1 1 1 1 0 1 0 1 1 1 0
12 0 0 0 1 0 1 0 0 0 0 0
13 0 0 0 1 1 0 0 0 0 0 0
15 1 0 0 1 0 0 0 1 1 1 0
16 1 1 1 1 1 0 0 1 0 1 0
17 0 0 1 0 0 0 0 1 0 0 0
18 0 0 0 0 0 1 1 0 0 1 0
19 1 0 0 1 1 1 0 1 1 1 0
20 1 0 0 1 1 1 0 1 0 1 1
21 1 1 0 1 0 1 0 1 1 0 0
22 0 0 0 0 0 0 0 0 1 1 0
23 0 0 0 1 0 1 0 0 0 1 0
24 1 1 0 1 0 0 0 1 0 0 0
25 0 0 0 0 0 0 1 0 0 1 0
26 0 0 0 1 1 0 0 0 0 1 0
27 0 0 1 1 0 1 0 0 0 0 0
29 1 1 0 1 0 1 0 1 1 0 0
30 1 1 1 1 1 0 0 1 1 1 1
コレスポンデンス分析の実際の方法は?
table()でオブジェクトを作り、
ca()をかければよい。
tab.NO.basho <- table(dat$NO, dat$basho)
ca.NO.basho <- ca(tab.NO.basho)
summary(ca.NO.basho)
plot(ca.NO.basho)
summary()で結果の概要が見られる。
Principal Inertia(固有値)1次元目と2次元目を使って、図に表すと属性の広がりと、個人の散らばりが視覚化できる。
視覚化にはplot()を使う。
> summary(ca.NO.basho)
Principal inertias (eigenvalues):
dim value % cum% scree plot
1 0.370047 30.3 30.3 ********
2 0.225220 18.5 48.8 *****
3 0.171709 14.1 62.9 ****
4 0.142078 11.6 74.5 ***
5 0.096621 7.9 82.4 **
6 0.075889 6.2 88.7 **
7 0.054686 4.5 93.2 *
8 0.043836 3.6 96.7 *
9 0.025404 2.1 98.8 *
10 0.014295 1.2 100.0
-------- -----
Total: 1.219786 100.0
Rows:
name mass qlt inr k=1 cor ctr k=2 cor ctr
1 | 2 | 58 620 42 | 729 612 84 | 83 8 2 |
2 | 3 | 7 344 57 | -588 36 7 | 1712 307 95 |
3 | 4 | 29 536 32 | -25 0 0 | -841 535 92 |
4 | 5 | 51 348 20 | -223 104 7 | 341 243 26 |
5 | 6 | 29 341 26 | -420 161 14 | 443 179 25 |
6 | 7 | 73 198 8 | -157 185 5 | -42 13 1 |
7 | 8 | 58 447 18 | -220 131 8 | 342 317 30 |
8 | 9 | 66 397 11 | -141 94 4 | 253 303 19 |
9 | 10 | 36 484 38 | -125 12 2 | -774 472 97 |
10 | 11 | 58 422 13 | -142 76 3 | 304 347 24 |
11 | 12 | 15 119 38 | 113 4 1 | -605 115 24 |
12 | 13 | 15 702 52 | -285 19 3 | -1727 683 193 |
13 | 15 | 36 207 20 | -160 38 3 | 335 169 18 |
14 | 16 | 51 158 22 | -192 69 5 | -218 89 11 |
15 | 17 | 15 35 56 | -304 20 4 | 269 15 5 |
16 | 18 | 22 954 110 | 2416 951 346 | 135 3 2 |
17 | 19 | 51 140 16 | -88 21 1 | -211 119 10 |
18 | 20 | 51 449 21 | -23 1 0 | -477 448 52 |
19 | 21 | 44 371 22 | -304 153 11 | 363 218 26 |
20 | 22 | 15 184 44 | 147 6 1 | 807 178 42 |
21 | 23 | 22 186 32 | 369 78 8 | -436 108 18 |
22 | 24 | 29 185 31 | -431 144 15 | 230 41 7 |
23 | 25 | 15 934 149 | 3380 919 451 | 429 15 12 |
24 | 26 | 22 620 41 | 104 5 1 | -1184 615 136 |
25 | 27 | 22 32 46 | 11 0 0 | -287 32 8 |
26 | 29 | 44 371 22 | -304 153 11 | 363 218 26 |
27 | 30 | 66 195 15 | -229 195 9 | 4 0 0 |
Columns:
name mass qlt inr k=1 cor ctr k=2 cor ctr
1 | カラオケ | 109 378 36 | -253 159 19 | 297 219 43 |
2 | バー | 73 324 58 | -385 152 29 | 409 172 54 |
3 | パチンコ | 66 23 99 | -118 8 2 | 166 15 8 |
4 | レストラ | 161 446 45 | -160 74 11 | -358 372 92 |
5 | 駅 | 66 743 121 | -186 15 6 | -1281 728 478 |
6 | 家 | 95 108 98 | 298 71 23 | -216 37 20 |
7 | 学校 | 22 956 244 | 3576 941 757 | 454 15 20 |
8 | 居酒屋 | 131 191 40 | -252 169 23 | 90 22 5 |
9 | 車内 | 95 510 120 | -358 83 33 | 813 427 278 |
10 | 職場 | 124 380 78 | 536 377 96 | -47 3 1 |
11 | 食堂 | 58 9 61 | -80 5 1 | -71 4 1 |
Warning message:
In abbreviate(cnames.temp, 4) : abbreviate used with non-ASCII chars
コレスポンデンス分析の視覚化
plot()で図が現れる。
2つの固有値をX軸とY軸にした散布図。
mass=T(TRUEの意味)を加えると、
plot(ca.NO.basho, mass=T)
同じ回答の複数人は、大きな〇で描かれる。
行(回答者)だけプロットするには、以下の通りにインプット。
plot(ca.NO.basho, mass=T, what=c("active","none"))
列(受動喫煙被害場所)をプロットするには、以下の通り。
plot(ca.NO.basho, mass=T, what=c("none","active"))
まとめ
コレスポンデンス分析を R で行う方法を解説した。
参考になれば。
参考書籍
すぐわかるSPSSによるアンケートのコレスポンデンス分析
コメント
コメント一覧 (2件)
[…] R でコレスポンデンス分析を実施する方法 […]
[…] R でコレスポンデンス分析を実施する方法 […]