統計ER

統計ソフトRの使い方を中心に、統計解析方法の解説をするブログ。ありそうでなかなか見つからないサンプルサイズ計算などニッチな方法について紹介しています。

クロス集計の割合など(カテゴリデータの集計)

ブログランキングに参加しています。
まずはぽちぽちっとお願いします。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
にほんブログ村 科学ブログ 数学へ

男女とか年代とか好き嫌いなど、 ばらばらの値を取るものが、 カテゴリデータ。

統計ソフト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なら二桁になる。