Chapter 3 二元クロス集計表の処理
3.1 周辺度数の追加
すでに見た夫婦の学歴組み合わせのクロス集計表には行方向・列方向ともに周辺度数(marginal frequency)がついていない。これはxtabs()
やtable()
などの関数を用いて個票データからクロス集計表を作成した場合も同様である。クロス集計表に周辺度数を追加するためにはaddmargins()
を用いる。
# 行周辺度数
addmargins(EduWH1980, margin = 1)
## EduH
## EduW JHS HS VC/JC UNI
## JHS 1825957.2 692306.05 25961.477 43269.13
## HS 744229.0 3106723.41 164422.687 856728.74
## VC/JC 34615.3 207691.82 69230.605 493268.06
## UNI 0.0 25961.48 8653.826 337499.20
## Sum 2604801.5 4032682.75 268268.595 1730765.13
# 列周辺度数
addmargins(EduWH1980, margin = 2)
## EduH
## EduW JHS HS VC/JC UNI Sum
## JHS 1825957.2 692306.05 25961.477 43269.13 2587493.9
## HS 744229.0 3106723.41 164422.687 856728.74 4872103.8
## VC/JC 34615.3 207691.82 69230.605 493268.06 804805.8
## UNI 0.0 25961.48 8653.826 337499.20 372114.5
# 行/列周辺度数
addmargins(EduWH1980, margin = c(1,2))
## EduH
## EduW JHS HS VC/JC UNI Sum
## JHS 1825957.2 692306.05 25961.477 43269.13 2587493.9
## HS 744229.0 3106723.41 164422.687 856728.74 4872103.8
## VC/JC 34615.3 207691.82 69230.605 493268.06 804805.8
## UNI 0.0 25961.48 8653.826 337499.20 372114.5
## Sum 2604801.5 4032682.75 268268.595 1730765.13 8636518.0
3.2 比率(proportion)の算出
クロス集計表の分析においておそらく最も頻繁に行うのが比率(proportion)の計算である。R
にはこれを可能にする数多くのパッケージおよび関数が存在するが、以下ではbase
に組み込まれているproportions()
、およびRcmdrMisc
パッケージのrowPercents()
・colPercents()
を紹介する。
3.2.1 proportions()
この関数はmargin
という引数を持ち、1は行方向、2は列方向にそれぞれ算出した「比率」を返す。
proportions(EduWH1980, margin = 1) * 100 # 行パーセント
## EduH
## EduW JHS HS VC/JC UNI
## JHS 70.568562 26.755853 1.003344 1.672241
## HS 15.275311 63.765542 3.374778 17.584369
## VC/JC 4.301075 25.806452 8.602151 61.290323
## UNI 0.000000 6.976744 2.325581 90.697674
proportions(EduWH1980, margin = 2) * 100 # 列パーセント
## EduH
## EduW JHS HS VC/JC UNI
## JHS 70.099668 17.1673820 9.677419 2.5
## HS 28.571429 77.0386266 61.290323 49.5
## VC/JC 1.328904 5.1502146 25.806452 28.5
## UNI 0.000000 0.6437768 3.225806 19.5
# 有効桁数を減らしたい場合は"round"で丸めるとよい
round(proportions(EduWH1980, margin = 1) * 100, digits = 1) # "digits = "は省略してもよい
## EduH
## EduW JHS HS VC/JC UNI
## JHS 70.6 26.8 1.0 1.7
## HS 15.3 63.8 3.4 17.6
## VC/JC 4.3 25.8 8.6 61.3
## UNI 0.0 7.0 2.3 90.7
tableの次元に名前がついている場合、marginには次元名を指定することもできる
proportions(EduWH1980, margin = "EduW")
## EduH
## EduW JHS HS VC/JC UNI
## JHS 0.70568562 0.26755853 0.01003344 0.01672241
## HS 0.15275311 0.63765542 0.03374778 0.17584369
## VC/JC 0.04301075 0.25806452 0.08602151 0.61290323
## UNI 0.00000000 0.06976744 0.02325581 0.90697674
proportions(EduWH1980, margin = "EduH")
## EduH
## EduW JHS HS VC/JC UNI
## JHS 0.70099668 0.171673820 0.09677419 0.025
## HS 0.28571429 0.770386266 0.61290323 0.495
## VC/JC 0.01328904 0.051502146 0.25806452 0.285
## UNI 0.00000000 0.006437768 0.03225806 0.195
周辺度数をつけてからproportions()
に引き渡せば行全体あるいは列全体の変数の分布を算出できる。
<- addmargins(EduWH1980, margin = 1) # w/ row margins
EduWH1980_wRMar round(proportions(EduWH1980_wRMar, margin = 1) * 100, digits = 1)
## EduH
## EduW JHS HS VC/JC UNI
## JHS 70.6 26.8 1.0 1.7
## HS 15.3 63.8 3.4 17.6
## VC/JC 4.3 25.8 8.6 61.3
## UNI 0.0 7.0 2.3 90.7
## Sum 30.2 46.7 3.1 20.0
<- addmargins(EduWH1980, margin = 2) # w/ column margins
EduWH1980_wCMar round(proportions(EduWH1980_wCMar, margin = 2) * 100, digits = 1)
## EduH
## EduW JHS HS VC/JC UNI Sum
## JHS 70.1 17.2 9.7 2.5 30.0
## HS 28.6 77.0 61.3 49.5 56.4
## VC/JC 1.3 5.2 25.8 28.5 9.3
## UNI 0.0 0.6 3.2 19.5 4.3
3.2.2 rowPercents()
・colPercents()
RcmdrMisc
パッケージのrowPercents()
やcolPercents()
を使っても行パーセントや列パーセントを算出できる。proportions()
と比較した際のこれらの関数の便利な点は、デフォルトで周辺度数を出力結果に返してくれることである。
library(RcmdrMisc)
rowPercents(EduWH1980, digits = 1)
## EduH
## EduW JHS HS VC/JC UNI Total Count
## JHS 70.6 26.8 1.0 1.7 100.1 2587493.9
## HS 15.3 63.8 3.4 17.6 100.1 4872103.8
## VC/JC 4.3 25.8 8.6 61.3 100.0 804805.8
## UNI 0.0 7.0 2.3 90.7 100.0 372114.5
colPercents(EduWH1980, digits = 1)
## EduH
## EduW JHS HS VC/JC UNI
## JHS 70.1 17.2 9.7 2.5
## HS 28.6 77.0 61.3 49.5
## VC/JC 1.3 5.2 25.8 28.5
## UNI 0.0 0.6 3.2 19.5
## Total 100.0 100.0 100.0 100.0
## Count 2604801.5 4032682.8 268268.6 1730765.1