Rでちゃんとしたクロス集計表を出力する関数
Rで困ることはもうほとんどないのですが,唯一致命的なのが,まともなクロス集計表を出力する関数がないことです。論文で標準的な形式の,周辺度数込みで度数と行パーセントを並べているだけのものでいいんですが,tableやらprop.tableやらaddmarginsやらを駆使してもなかなか思い通りのものが作れない。gmodelsとかのCrossTable関数は悪くはないんですが,返り値がtableじゃない,オプションをいっぱい指定しないと好みのものができない,3重クロス表に非対応,など不満点はけっこう多いです。
パッケージでいい関数が作られてないか,数年間探し続けてたんですが,ラチがあかないので作りました。
使い方は簡単です。
> # 擬似データ作成 > 性別 <- factor(rbinom(1:1000, 1, 0.5), labels=c("男性", "女性")) > 年齢 <- factor(rbinom(1:1000, 2, 0.4), labels=c("若年層", "中年層", "高年層")) > 身長 <- factor(rbinom(1:1000, 2, 0.6), labels=c("低", "中", "高")) > > # CrossTableオブジェクト作成用関数。使い方もオプションもtable関数とまったく同じ。 > t1 <- crossTable(性別, 年齢, 身長) > > # クロス集計表出力 > summary(t1) =================================================== 身長 --------------------- 低 中 高 Total --------------------------------------------------- 性別 男性 年齢 若年層 41 99 68 208 19.7% 47.6% 32.7% 100% 中年層 29 116 85 230 12.6% 50.4% 37.0% 100% 高年層 13 47 32 92 14.1% 51.1% 34.8% 100% ----------------------------------------- Total 83 262 185 530 15.7% 49.4% 34.9% 100% ---------------------------------------------- 女性 年齢 若年層 22 75 62 159 13.8% 47.2% 39.0% 100% 中年層 33 111 89 233 14.2% 47.6% 38.2% 100% 高年層 8 35 35 78 10.3% 44.9% 44.9% 100% ----------------------------------------- Total 63 221 186 470 13.4% 47.0% 39.6% 100% =================================================== Chi-Square Test for Independence 性別 : 男性 Number of cases in table: 530 Number of factors: 2 Test for independence of all factors: Chisq = 4.494, df = 4, p-value = 0.3432 性別 : 女性 Number of cases in table: 470 Number of factors: 2 Test for independence of all factors: Chisq = 1.4735, df = 4, p-value = 0.8313
crossTable関数は使い方もオプションもtable関数とまったく同じです。crossTable関数はCrossTableオブジェクトを返しますが,CrossTableクラスはtableクラスを継承しているので,tableとまったく同じように使えます。summary関数に渡すと,クロス集計表と,独立性の検定の結果を出力します。クロス集計表の形式は完全に僕の好みに合わせているので,異論があれば言ってください。なにかオプションを付けるかもしれません。
これで,Rでもカテゴリ変数を心置きなく使えるようになりました。