男女とか年代とか好き嫌いなど、 ばらばらの値を取るものが、 カテゴリデータ。
統計ソフトRでのカテゴリデータの集計方法。
カテゴリデータの集計の方法は?
もっとも使うのがtable()。 表(table)形式で集計する関数だ。
例としてMASSパッケージのbirthwtデータフレームを使う。
lowは低体重出生(1)か、そうではないか(0)。 htは高血圧の既往あり(1)か、なし(0)かである。 それぞれの人数がわかる。
library(MASS) table(birthwt$low) table(birthwt$ht)
> table(birthwt$low) 0 1 130 59 > table(birthwt$ht) 0 1 177 12
カテゴリデータ集計の割合は?
カテゴリごとの割合を算出する。
割合はproportionだから、 最初の4文字を取って、 propだ。
prop.table()の中にtable()を入れる。
prop.table(table())
prop.table(table(birthwt$low))
> prop.table(table(birthwt$low)) 0 1 0.6878307 0.3121693
100倍すれば、パーセンテージになる。
prop.table(table(birthwt$low))*100
> prop.table(table(birthwt$low))*100 0 1 68.78307 31.21693
round()で小数点以下を丸めることもできる。
round(prop.table(table(birthwt$low))*100,1)
> round(prop.table(table(birthwt$low))*100,1) 0 1 68.8 31.2
クロス集計
2つのカテゴリを掛け合わせて集計することを クロス集計と言う。
男女と好き嫌いとを掛け合わせるという感じだ。
掛け合わせる(クロスさせる)変数同士を カンマで並べて書くだけ。
table(factor1, factor2)
birthwtデータフレームの 高血圧htと 低体重出生lowとをクロス集計すると、 母親が高血圧で、児の出生体重が低体重だったケースが、 7ケースあったことが分かる。
table(birthwt$ht, birthwt$low)
> table(birthwt$ht, birthwt$low) 0 1 0 125 52 1 5 7
クロス集計の割合を表示させるには?
行の割合と列の割合と全体の割合の3種類が出せる。 場合によって使い分ける。
行(横方向が100%の場合)の割合は、1。
prop.table(table(row variable, col variable),1)
列(縦方向が100%の場合)の割合は、2。
prop.table(table(row variable, col variable),2)
書かないと全体に対する割合が出力される。
prop.table(table(row variable, col variable))
行の割合
round(prop.table(table(birthwt$ht, birthwt$low),1)*100,1)
> round(prop.table(table(birthwt$ht, birthwt$low),1)*100,1) 0 1 0 70.6 29.4 1 41.7 58.3
列の割合
round(prop.table(table(birthwt$ht, birthwt$low),2)*100,1)
> round(prop.table(table(birthwt$ht, birthwt$low),2)*100,1) 0 1 0 96.2 88.1 1 3.8 11.9
全体の割合
round(prop.table(table(birthwt$ht, birthwt$low))*100,1)
> round(prop.table(table(birthwt$ht, birthwt$low))*100,1) 0 1 0 66.1 27.5 1 2.6 3.7
割合の丸め
小数点以下を丸めるのに、round()という関数を使う。
基本は四捨五入する関数で、 0.5はバランスよく丸める。
詳しくはこちら。
round()の中で、小数点以下の桁数を指定できる。
round(,1)とすると、小数点以下一桁で丸められる。
round(prop.table(table(birthwt$ht, birthwt$low),1)*100,1)
> round(prop.table(table(birthwt$ht, birthwt$low),1)*100,1) 0 1 0 70.6 29.4 1 41.7 58.3
round(,2)は小数点以下2桁、 round(,3)は小数点以下3桁。
round(prop.table(table(birthwt$ht, birthwt$low),1)*100,2) round(prop.table(table(birthwt$ht, birthwt$low),1)*100,3)
> round(prop.table(table(birthwt$ht, birthwt$low),1)*100,2) 0 1 0 70.62 29.38 1 41.67 58.33 > round(prop.table(table(birthwt$ht, birthwt$low),1)*100,3) 0 1 0 70.621 29.379 1 41.667 58.333
まとめ
カテゴリ集計は、
例数の集計だけなら、table()
割合が見たければ、prop.table(table())
クロス集計は、table(factor1, factor2)
クロス集計の割合は、prop.table(table(factor1, factor2),?)
?の部分は、行の割合なら1、列の割合なら2、全体の割合なら何もなし。
割合をパーセンテージにしたい場合は100をかける。
小数点以下を丸める関数は、round()
小数点以下の桁数を指定するなら、round(,?)の?に数字を入れる。1なら一桁、2なら二桁になる。