このレポートは、factoextraに収められているfviz系functionで説明されている多重対応分析MCAのチュートリアルを日本語環境で実行するための前準備として、データの変数名、カテゴリーを日本語化するためのものである。
変数名の変更には、colnames() を使った代入。 カテゴリーの変更には、パッケージcarのRecode()を使っている。 カテゴリーの変更には、パッケージdplyrのrecode()を使っている。 最後に、確認のために、MCAを実行してその出力をグラフ化している。
#library(car)# dplyr::recode を使うようにしたので不要。
library(factoextra)
## Loading required package: ggplot2
## Welcome! Related Books: `Practical Guide To Cluster Analysis in R` at https://goo.gl/13EFCZ
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
options(width=90)
data(poison)
head(poison)
## Age Time Sick Sex Nausea Vomiting Abdominals Fever Diarrhae Potato Fish
## 1 9 22 Sick_y F Nausea_y Vomit_n Abdo_y Fever_y Diarrhea_y Potato_y Fish_y
## 2 5 0 Sick_n F Nausea_n Vomit_n Abdo_n Fever_n Diarrhea_n Potato_y Fish_y
## 3 6 16 Sick_y F Nausea_n Vomit_y Abdo_y Fever_y Diarrhea_y Potato_y Fish_y
## 4 9 0 Sick_n F Nausea_n Vomit_n Abdo_n Fever_n Diarrhea_n Potato_y Fish_y
## 5 7 14 Sick_y M Nausea_n Vomit_y Abdo_y Fever_y Diarrhea_y Potato_y Fish_y
## 6 72 9 Sick_y M Nausea_n Vomit_n Abdo_y Fever_y Diarrhea_y Potato_y Fish_n
## Mayo Courgette Cheese Icecream
## 1 Mayo_y Courg_y Cheese_y Icecream_y
## 2 Mayo_y Courg_y Cheese_n Icecream_y
## 3 Mayo_y Courg_y Cheese_y Icecream_y
## 4 Mayo_n Courg_y Cheese_y Icecream_y
## 5 Mayo_y Courg_y Cheese_y Icecream_y
## 6 Mayo_y Courg_y Cheese_y Icecream_y
# 初版では、carのRecodeでやっていた。
#library(car)
#poison$性別 <- Recode(poison$性別,F" = "女性", "M" = "男性";',as.factor.result=TRUE)
colnames(poison) <- c("年齢","時刻","発症","性別","吐き気","嘔吐","腹痛","発熱","下痢",
"ポテト","魚","マヨ","ズッキーニ","チーズ","アイスクリーム")
poison$性別 <- recode(poison$性別,F = "女性",M = "男性")
poison$発症 <- recode(poison$発症,Sick_n = "発症_n",Sick_y = "発症_y")
poison$吐き気 <- recode(poison$吐き気,Nausea_n = "吐き気_n",Nausea_y = "吐き気_y")
poison$嘔吐 <- recode(poison$嘔吐,Vomit_n = "嘔吐_n",Vomit_y = "嘔吐_y")
poison$腹痛 <- recode(poison$腹痛,Abdo_n = "嘔吐_n",Abdo_y = "嘔吐_y")
poison$発熱 <- recode(poison$発熱,Fever_n = "発熱_n",Fever_y = "発熱_y")
poison$下痢 <- recode(poison$下痢,Diarrhea_n = "下痢_n",Diarrhea_y = "下痢_y")
poison$ポテト <- recode(poison$ポテト,Potato_n = "ポテト_n",Potato_y = "ポテト_y")
poison$魚 <- recode(poison$魚,Fish_n = "魚_n", Fish_y = "魚_y")
poison$マヨ <- recode(poison$マヨ,Mayo_n = "マヨ_n", Mayo_y = "マヨ_y")
poison$ズッキーニ <- recode(poison$ズッキーニ, Courg_n = "ズッキ_n", Courg_y = "ズッキ_y")
poison$チーズ <- recode(poison$チーズ, Cheese_n = "チーズ_n", Cheese_y ="チーズ_y")
poison$アイスクリーム <- recode(poison$アイスクリーム,Icecream_n = "アイス_n", Icecream_y = "アイス_y")
summary(poison)
## 年齢 時刻 発症 性別 吐き気 嘔吐
## Min. : 4.00 Min. : 0.00 発症_n:17 女性:28 吐き気_n:43 嘔吐_n:33
## 1st Qu.: 6.00 1st Qu.: 0.00 発症_y:38 男性:27 吐き気_y:12 嘔吐_y:22
## Median : 8.00 Median :12.00
## Mean :16.93 Mean :10.16
## 3rd Qu.:10.00 3rd Qu.:16.50
## Max. :88.00 Max. :22.00
## 腹痛 発熱 下痢 ポテト 魚 マヨ ズッキーニ
## 嘔吐_n:18 発熱_n:20 下痢_n:20 ポテト_n: 3 魚_n: 1 マヨ_n:10 ズッキ_n: 5
## 嘔吐_y:37 発熱_y:35 下痢_y:35 ポテト_y:52 魚_y:54 マヨ_y:45 ズッキ_y:50
##
##
##
##
## チーズ アイスクリーム
## チーズ_n: 7 アイス_n: 4
## チーズ_y:48 アイス_y:51
##
##
##
##
library(FactoMineR)
library(factoextra)
library(ggpubr)
なお、factoextra,ggpubr による日本語対応は、まだ暫定対応なので、githubから開発暫定版をダウンロードして用る必要がある。詳細は、githubのissue:“factoextra and japanese text” (https://github.com/kassambara/factoextra/issues/31)を参照。
res.mca <- MCA(poison[,5:15],graph=FALSE)
fviz_mca_biplot(res.mca,font.family = "sans",title="食中毒データに対する多重対応分析")
より詳しくは、「多重対応分析:多変量の質的半数のカテゴリー間の連関を解釈し調査するために必須の手法」http://www.sthda.com/english/wiki/multiple-correspondence-analysis-essentials-interpretation-and-application-to-investigate-the-associations-between-categories-of-multiple-qualitative-variables-r-software-and-data-mining を参照のこと。このチュートリアルでpoison が使われている。
先に、poisonデータをもとの形式のまま「日本語化」してみた。実は、FactoMineRのMCAは、もう一つ別の形式のデータも受け入れる。
変数名は、日本語化し(しなくてももちろんよいが)、カテゴリーを“y”、“n”(1,0でもよいがfactorにしておく)で表記する形式である。こうしたデータの場合でも、MCAは、変数名に_y、_nをつけてカテゴリーを形成する。
data(poison)# も一度、元のpoisonを呼び出す。
colnames(poison) <- c("年齢","時刻","発症","性別","吐き気","嘔吐","腹痛","発熱","下痢",
"ポテト","魚","マヨ","ズッキーニ","チーズ","アイスクリーム")
poison$性別 <- recode(poison$性別,F = "女性", M = "男性")
poison$発症 <- recode(poison$発症,Sick_n = "N", Sick_y = "Y")
poison$吐き気 <- recode(poison$吐き気,Nausea_n = "N", Nausea_y = "Y")
poison$嘔吐 <- recode(poison$嘔吐,Vomit_n = "N", Vomit_y = "Y")
poison$腹痛 <- recode(poison$腹痛,Abdo_n = "N", Abdo_y = "Y")
poison$発熱 <- recode(poison$発熱,Fever_n = "N", Fever_y = "Y")
poison$下痢 <- recode(poison$下痢,Diarrhea_n = "N", Diarrhea_y = "Y")
poison$ポテト <- recode(poison$ポテト,Potato_n = "N", Potato_y = "Y")
poison$魚 <- recode(poison$魚,Fish_n = "N", Fish_y = "Y")
poison$マヨ <- recode(poison$マヨ,Mayo_n = "N", Mayo_y = "Y")
poison$ズッキーニ <- recode(poison$ズッキーニ,Courg_n = "N", Courg_y = "Y")
poison$チーズ <- recode(poison$チーズ,Cheese_n = "N", Cheese_y = "Y")
poison$アイスクリーム <- recode(poison$アイスクリーム,Icecream_n = "N", Icecream_y = "Y")
summary(poison)
## 年齢 時刻 発症 性別 吐き気 嘔吐 腹痛 発熱 下痢
## Min. : 4.00 Min. : 0.00 N:17 女性:28 N:43 N:33 N:18 N:20 N:20
## 1st Qu.: 6.00 1st Qu.: 0.00 Y:38 男性:27 Y:12 Y:22 Y:37 Y:35 Y:35
## Median : 8.00 Median :12.00
## Mean :16.93 Mean :10.16
## 3rd Qu.:10.00 3rd Qu.:16.50
## Max. :88.00 Max. :22.00
## ポテト 魚 マヨ ズッキーニ チーズ アイスクリーム
## N: 3 N: 1 N:10 N: 5 N: 7 N: 4
## Y:52 Y:54 Y:45 Y:50 Y:48 Y:51
##
##
##
##
tbl_df(poison)
## # A tibble: 55 × 15
## 年齢 時刻 発症 性別 吐き気 嘔吐 腹痛 発熱 下痢 ポテト 魚 マヨ
## * <int> <int> <fctr> <fctr> <fctr> <fctr> <fctr> <fctr> <fctr> <fctr> <fctr> <fctr>
## 1 9 22 Y 女性 Y N Y Y Y Y Y Y
## 2 5 0 N 女性 N N N N N Y Y Y
## 3 6 16 Y 女性 N Y Y Y Y Y Y Y
## 4 9 0 N 女性 N N N N N Y Y N
## 5 7 14 Y 男性 N Y Y Y Y Y Y Y
## 6 72 9 Y 男性 N N Y Y Y Y N Y
## 7 5 16 Y 女性 N Y Y Y Y Y Y Y
## 8 10 8 Y 女性 Y Y Y Y Y Y Y Y
## 9 5 20 Y 男性 Y N Y Y Y Y Y Y
## 10 11 12 Y 男性 N Y N Y Y Y Y Y
## # ... with 45 more rows, and 3 more variables: ズッキーニ <fctr>, チーズ <fctr>,
## # アイスクリーム <fctr>
先ほどの例と同様にMCA処理をおこなって、リザルトをsummary で確認する。変数名_Y、変数名_Nとしてカテゴリ名が生成されていることが確認できる。
res.mca <- MCA(poison[,5:15],graph = FALSE)
summary(res.mca)
##
## Call:
## MCA(X = poison[, 5:15], graph = FALSE)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7 Dim.8
## Variance 0.335 0.129 0.107 0.096 0.079 0.071 0.060 0.056
## % of var. 33.523 12.914 10.735 9.588 7.883 7.109 6.017 5.577
## Cumulative % of var. 33.523 46.437 57.172 66.760 74.643 81.752 87.769 93.346
## Dim.9 Dim.10 Dim.11
## Variance 0.041 0.013 0.012
## % of var. 4.121 1.304 1.229
## Cumulative % of var. 97.467 98.771 100.000
##
## Individuals (the 10 first)
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3 ctr cos2
## 1 | -0.453 1.111 0.347 | -0.264 0.982 0.118 | 0.172 0.498 0.050 |
## 2 | 0.836 3.792 0.556 | -0.032 0.014 0.001 | -0.072 0.088 0.004 |
## 3 | -0.448 1.089 0.548 | 0.135 0.258 0.050 | -0.225 0.856 0.138 |
## 4 | 0.880 4.204 0.748 | -0.085 0.103 0.007 | -0.021 0.007 0.000 |
## 5 | -0.448 1.089 0.548 | 0.135 0.258 0.050 | -0.225 0.856 0.138 |
## 6 | -0.359 0.701 0.025 | -0.436 2.677 0.037 | -1.209 24.770 0.281 |
## 7 | -0.448 1.089 0.548 | 0.135 0.258 0.050 | -0.225 0.856 0.138 |
## 8 | -0.641 2.226 0.615 | -0.005 0.000 0.000 | 0.113 0.216 0.019 |
## 9 | -0.453 1.111 0.347 | -0.264 0.982 0.118 | 0.172 0.498 0.050 |
## 10 | -0.141 0.107 0.039 | 0.122 0.209 0.029 | -0.227 0.872 0.101 |
##
## Categories (the 10 first)
## Dim.1 ctr cos2 v.test Dim.2 ctr cos2 v.test Dim.3 ctr
## 吐き気_N | 0.267 1.516 0.256 3.720 | 0.121 0.811 0.053 1.689 | -0.266 4.670
## 吐き気_Y | -0.958 5.432 0.256 -3.720 | -0.435 2.906 0.053 -1.689 | 0.952 16.734
## 嘔吐_N | 0.479 3.734 0.344 4.311 | -0.409 7.072 0.251 -3.683 | 0.084 0.363
## 嘔吐_Y | -0.719 5.601 0.344 -4.311 | 0.614 10.608 0.251 3.683 | -0.127 0.544
## 腹痛_N | 1.318 15.418 0.845 6.755 | -0.036 0.029 0.001 -0.183 | -0.005 0.001
## 腹痛_Y | -0.641 7.500 0.845 -6.755 | 0.017 0.014 0.001 0.183 | 0.002 0.000
## 発熱_N | 1.172 13.541 0.785 6.509 | -0.175 0.783 0.017 -0.972 | 0.097 0.291
## 発熱_Y | -0.670 7.738 0.785 -6.509 | 0.100 0.447 0.017 0.972 | -0.056 0.167
## 下痢_N | 1.183 13.797 0.799 6.570 | -0.003 0.000 0.000 -0.015 | -0.083 0.212
## 下痢_Y | -0.676 7.884 0.799 -6.570 | 0.002 0.000 0.000 0.015 | 0.047 0.121
## cos2 v.test
## 吐き気_N 0.253 -3.694 |
## 吐き気_Y 0.253 3.694 |
## 嘔吐_N 0.011 0.760 |
## 嘔吐_Y 0.011 -0.760 |
## 腹痛_N 0.000 -0.026 |
## 腹痛_Y 0.000 0.026 |
## 発熱_N 0.005 0.540 |
## 発熱_Y 0.005 -0.540 |
## 下痢_N 0.004 -0.461 |
## 下痢_Y 0.004 0.461 |
##
## Categorical variables (eta2)
## Dim.1 Dim.2 Dim.3
## 吐き気 | 0.256 0.053 0.253 |
## 嘔吐 | 0.344 0.251 0.011 |
## 腹痛 | 0.845 0.001 0.000 |
## 発熱 | 0.785 0.017 0.005 |
## 下痢 | 0.799 0.000 0.004 |
## ポテト | 0.029 0.396 0.264 |
## 魚 | 0.007 0.027 0.252 |
## マヨ | 0.383 0.035 0.039 |
## ズッキーニ | 0.015 0.446 0.053 |
## チーズ | 0.194 0.053 0.012 |