パッケージの概要
crosstableは、クロス集計表を作成するためのツールです。複数の変数に基づいてデータを集計し、頻度等を表示します。このパッケージを使用すると、変数間の関係を簡単に分析でき、データの要約を視覚化することができます。
使用するデータ
クロス集計表を作成するにあたり、ここでは当パッケージに含まれるデータセットのmtcars2を使用するものとします。mtcars2はR標準のデータセットであるmtcarsに対して次の修正を加えたデータセットです。なお、mtcarsは1974年に発行されたMotor Trend US Magazineに基づき32台の異なる自動車についての情報を収めたものです。
各列にラベル(説明)を追加
rownamesを新たな列「model」としてデータフレームの一部にする
gear(ギア数)と cyl(シリンダー数)をカテゴリカル変数として扱う
vs(エンジンの種類)とam(トランスミッション)を文字列型に変換し、カテゴリデータとして扱う
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# A tibble: 6 × 14
model mpg cyl disp hp drat wt qsec vs am gear carb
<labelled> <lab> <fct> <lab> <lab> <lab> <lab> <lab> <lab> <lab> <fct> <lab>
1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 vsha… manu… 4 4
2 Mazda RX4 W… 21.0 6 160 110 3.90 2.875 17.02 vsha… manu… 4 4
3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 stra… manu… 4 1
4 Hornet 4 Dr… 21.4 6 258 110 3.08 3.215 19.44 stra… auto 3 1
5 Hornet Spor… 18.7 8 360 175 3.15 3.440 17.02 vsha… auto 3 2
6 Valiant 18.1 6 225 105 2.76 3.460 20.22 stra… auto 3 1
# ℹ 2 more variables: hp_date <date>, qsec_posix <dttm>
クロス集計表の作成
まずはcrosstable関数に他の引数を何も設定せずにmtcars2をそのまま入れてみます。このままではよくわかりません。
# A tibble: 78 × 4
.id label variable value
<chr> <chr> <chr> <chr>
1 model Model AMC Javelin 1 (3.12%)
2 model Model Cadillac Fleetwood 1 (3.12%)
3 model Model Camaro Z28 1 (3.12%)
4 model Model Chrysler Imperial 1 (3.12%)
5 model Model Datsun 710 1 (3.12%)
6 model Model Dodge Challenger 1 (3.12%)
7 model Model Duster 360 1 (3.12%)
8 model Model Ferrari Dino 1 (3.12%)
9 model Model Fiat 128 1 (3.12%)
10 model Model Fiat X1-9 1 (3.12%)
# ℹ 68 more rows
次に、wt(車の重量)とcyl(シリンダー数)について、vs(エンジンの種類)ごとに集計してみます。なお、vs(エンジンの種類)はstraight(直列エンジン)とvshaped(V型エンジン)の2通りです。
crosstable (mtcars2, c (wt, cyl), by= vs)
# A tibble: 7 × 5
.id label variable straight vshaped
<chr> <chr> <chr> <chr> <chr>
1 wt Weight (1000 lbs) Min / Max 1.5 / 3.5 2.1 / 5.4
2 wt Weight (1000 lbs) Med [IQR] 2.6 [2.0;3.2] 3.6 [3.2;3.8]
3 wt Weight (1000 lbs) Mean (std) 2.6 (0.7) 3.7 (0.9)
4 wt Weight (1000 lbs) N (NA) 14 (0) 18 (0)
5 cyl Number of cylinders 4 10 (90.91%) 1 (9.09%)
6 cyl Number of cylinders 6 4 (57.14%) 3 (42.86%)
7 cyl Number of cylinders 8 0 (0%) 14 (100.00%)
なお、as_flextable関数を使うと、クロス集計表がflextableオブジェクトに変換され、整った見やすい表になります。
crosstable (mtcars2, c (wt, cyl), by= vs) %>% as_flextable ()
label
variable
Engine
straight
vshaped
Weight (1000 lbs)
Min / Max
1.5 / 3.5
2.1 / 5.4
Med [IQR]
2.6 [2.0;3.2]
3.6 [3.2;3.8]
Mean (std)
2.6 (0.7)
3.7 (0.9)
N (NA)
14 (0)
18 (0)
Number of cylinders
4
10 (90.91%)
1 (9.09%)
6
4 (57.14%)
3 (42.86%)
8
0 (0%)
14 (100.00%)
出力された集計表から、wt(車の重量)について次のことがわかります。vshapedはstraightよりも重い車が多く、またばらつきが大きいようです。
Min / Max:
straight:車の重さは1.5〜3.5千ポンド
vshaped: 車の重さは2.1〜5.4千ポンド
Med [IQR](中央値と四分位範囲):
straight:中央値は2.6千ポンド、四分位範囲は[2.0, 3.2]千ポンド
vshaped:中央値は3.6千ポンド、四分位範囲は[3.2, 3.8]千ポンド
Mean(std)(平均値と標準偏差):
straight:平均値は2.6千ポンド、標準偏差は0.7千ポンド
vshaped:平均値は3.7千ポンド、標準偏差は0.9千ポンド
N(NA)(データ数と欠損値数):
straight: データ数は14件、欠損値は0
vshaped: データ数は18件、欠損値は0
また、cyl(シリンダー数)については次のことがわかります。straightでは4シリンダーの車が多い一方で、vshapedでは8シリンダーの車がほとんどです。
4シリンダー車:
straight: 10台(90.91%)
vshaped: 1台(9.09%)
6シリンダー車:
straight: 4台(57.14%)
vshaped: 3台(42.86%)
8シリンダー車:
straight: 0台(0%)
vshaped: 14台(100%)
次に、vs(エンジンの種類)に加えてam(トランスミッション)により分割します。margin=c(“row”, “col”)により行方向、列方向それぞれによる各頻度の占率を出力します。total = “both”により合計行、合計列の両方が追加されます。
crosstable (mtcars2, c (wt, cyl), by= c (am, vs),
margin= c ("row" , "col" ), total = "both" ) %>% as_flextable ()
Engine
straight
vshaped
Total
Transmission
auto
manual
auto
manual
Weight (1000 lbs)
Min / Max
2.5 / 3.5
1.5 / 2.8
3.4 / 5.4
2.1 / 3.6
1.5 / 5.4
Med [IQR]
3.2 [3.2;3.4]
1.9 [1.7;2.3]
3.8 [3.6;4.4]
2.8 [2.7;3.1]
3.3 [2.6;3.6]
Mean (std)
3.2 (0.3)
2.0 (0.4)
4.1 (0.8)
2.9 (0.5)
3.2 (1.0)
N (NA)
7 (0)
7 (0)
12 (0)
6 (0)
32 (0)
Number of cylinders
4
3 (42.86% / 27.27%)
7 (100.00% / 63.64%)
0 (0% / 0%)
1 (16.67% / 9.09%)
11 (34.38%)
6
4 (57.14% / 57.14%)
0 (0% / 0%)
0 (0% / 0%)
3 (50.00% / 42.86%)
7 (21.88%)
8
0 (0% / 0%)
0 (0% / 0%)
12 (100.00% / 85.71%)
2 (33.33% / 14.29%)
14 (43.75%)
Total
7 (21.88%)
7 (21.88%)
12 (37.50%)
6 (18.75%)
32 (100.00%)
最後に、引数effectをTRUEに設定することで、効果推定を出力することもできます。
crosstable (mtcars2, where (is.numeric), by= vs, effect= TRUE ) %>% as_flextable ()
label
variable
Engine
effect
straight
vshaped
Miles/(US) gallon
Min / Max
17.8 / 33.9
10.4 / 26.0
Difference in means (t-test CI), ref='straight' vshaped minus straight: -7.94 [-11.27 to -4.61]
Med [IQR]
22.8 [21.4;29.6]
15.6 [14.8;19.1]
Mean (std)
24.6 (5.4)
16.6 (3.9)
N (NA)
14 (0)
18 (0)
Displacement (cu.in.)
Min / Max
71.1 / 258.0
120.3 / 472.0
Difference in means (Welch CI), ref='straight' vshaped minus straight: 174.69 [114.36 to 235.02]
Med [IQR]
120.5 [83.0;162.4]
311.0 [275.8;360.0]
Mean (std)
132.5 (56.9)
307.1 (106.8)
N (NA)
14 (0)
18 (0)
Gross horsepower
Min / Max
52.0 / 123.0
91.0 / 335.0
Difference in means (Welch CI), ref='straight' vshaped minus straight: 98.37 [66.06 to 130.67]
Med [IQR]
96.0 [66.0;109.8]
180.0 [156.2;226.2]
Mean (std)
91.4 (24.4)
189.7 (60.3)
N (NA)
14 (0)
18 (0)
Rear axle ratio
Min / Max
2.8 / 4.9
2.8 / 4.4
Difference in means (bootstrap CI), ref='straight' vshaped minus straight: -0.47 [-0.80 to -0.13]
Med [IQR]
3.9 [3.7;4.1]
3.2 [3.1;3.7]
Mean (std)
3.9 (0.5)
3.4 (0.5)
N (NA)
14 (0)
18 (0)
Weight (1000 lbs)
Min / Max
1.5 / 3.5
2.1 / 5.4
Difference in means (t-test CI), ref='straight' vshaped minus straight: 1.08 [0.48 to 1.68]
Med [IQR]
2.6 [2.0;3.2]
3.6 [3.2;3.8]
Mean (std)
2.6 (0.7)
3.7 (0.9)
N (NA)
14 (0)
18 (0)
1/4 mile time
Min / Max
16.9 / 22.9
14.5 / 18.0
Difference in means (t-test CI), ref='straight' vshaped minus straight: -2.64 [-3.52 to -1.76]
Med [IQR]
19.2 [18.6;20.0]
17.0 [16.0;17.4]
Mean (std)
19.3 (1.4)
16.7 (1.1)
N (NA)
14 (0)
18 (0)
Number of carburetors
Min / Max
1.0 / 4.0
2.0 / 8.0
Difference in means (bootstrap CI), ref='straight' vshaped minus straight: 1.83 [0.93 to 2.72]
Med [IQR]
1.5 [1.0;2.0]
4.0 [2.2;4.0]
Mean (std)
1.8 (1.1)
3.6 (1.5)
N (NA)
14 (0)
18 (0)