5.2.4 データのクロス集計
クロス集計は、値からなる2つの表の間の相互依存関係を見つける統計手法です。
ore.crosstab
関数は、ore.frame
のクロス列分析を可能にします。この関数は、Rのtable
関数の高性能なバリアントです。
ore.freq
を使用して頻度分析を実行する前にore.crosstab
関数を使用する必要があります。
ore.crosstab
関数呼出しの結果が単一のクロス集計の場合、この関数によってore.frame
オブジェクトが返されます。結果が複数のクロス集計の場合は、この関数はore.frame
オブジェクトのリストを返します。
この関数の引数の詳細は、help(ore.crosstab)
をコールしてください。
例5-31 単一列頻度表の作成
最も基本的な使用例は、この例に示すとおり、単一列頻度表を作成することです。
この例では、GENDERによってグループ化されたNARROW ore.frame
をフィルタします。
ct <- ore.crosstab(~AGE, data=NARROW) head(ct)
この例のリスト
R> ct <- ore.crosstab(~AGE, data=NARROW)
R> head(ct)
AGE ORE$FREQ ORE$STRATA ORE$GROUP
17 17 14 1 1
18 18 16 1 1
19 19 30 1 1
20 20 23 1 1
21 21 22 1 1
22 22 39 1 1
例5-32 2つの列の分析
この例では、GENDERによってAGEを、CLASSによってAGEを分析します。
ct <- ore.crosstab(AGE~GENDER+CLASS, data=NARROW) head(ct)
この例のリスト
R> ct <- ore.crosstab(AGE~GENDER+CLASS, data=NARROW)
R> head(ct)
$`AGE~GENDER`
AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
17|F 17 F 5 1 1
17|M 17 M 9 1 1
18|F 18 F 6 1 1
18|M 18 M 7 1 1
19|F 19 F 15 1 1
19|M 19 M 13 1 1
# The remaining output is not shown.
例5-33 行の重み付け
行を重み付けするには、この例に示すように、別の列に基づいたカウントを含めます。この例では、YRS_RESIDENCEの値を使用してAGEおよびGENDERの値に重み付けします。
ct <- ore.crosstab(AGE~GENDER*YRS_RESIDENCE, data=NARROW) head(ct)
この例のリスト
R> ct <- ore.crosstab(AGE~GENDER*YRS_RESIDENCE, data=NARROW)
R> head(ct)
AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
17|F 17 F 1 1 1
17|M 17 M 8 1 1
18|F 18 F 4 1 1
18|M 18 M 10 1 1
19|F 19 F 15 1 1
19|M 19 M 17 1 1
例5-34 クロス集計データの順序付け
クロス集計表の行の順序付けには、次に示すようないくつかの方法があります。
-
分析対象の列によるデフォルトまたはNAMEの順序付け
-
頻度カウントによるFREQの順序付け
-
-NAMEまたは-FREQは、順序を逆転します
-
INTERNALは、順序付けをバイパスします
この例では、頻度カウントによって順序付けした後、頻度カウントで順序を逆にします。
ct <- ore.crosstab(AGE~GENDER|FREQ, data=NARROW) head(ct) ct <- ore.crosstab(AGE~GENDER|-FREQ, data=NARROW) head(ct)
この例のリスト
R> ct <- ore.crosstab(AGE~GENDER|FREQ, data=NARROW)
R> head(ct)
AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
66|F 66 F 1 1 1
70|F 70 F 1 1 1
73|M 73 M 1 1 1
74|M 74 M 1 1 1
76|F 76 F 1 1 1
77|F 77 F 1 1 1
R> ct <- ore.crosstab(AGE~GENDER|-FREQ, data=NARROW)
R> head(ct)
AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
27|M 27 M 33 1 1
35|M 35 M 28 1 1
41|M 41 M 27 1 1
34|M 34 M 26 1 1
37|M 37 M 26 1 1
28|M 28 M 25 1 1
例5-35 3つ以上の列の分析
この例では、3つ以上の列の分析を示します。結果は、SQLのGROUPING SETS
句の実行に似ています。
ct <- ore.crosstab(AGE+COUNTRY~GENDER, NARROW) head(ct)
この例のリスト
R> ct <- ore.crosstab(AGE+COUNTRY~GENDER, NARROW)
R> head(ct)
$`AGE~GENDER`
AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
17|F 17 F 5 1 1
17|M 17 M 9 1 1
18|F 18 F 6 1 1
18|M 18 M 7 1 1
19|F 19 F 15 1 1
19|M 19 M 13 1 1
# The rest of the output is not shown.
$`COUNTRY~GENDER`
COUNTRY GENDER ORE$FREQ ORE$STRATA ORE$GROUP
Argentina|F Argentina F 14 1 1
Argentina|M Argentina M 28 1 1
Australia|M Australia M 1 1 1
# The rest of the output is not shown.
例5-36 列の範囲の指定
この例に示すように、すべての列の名前を入力するかわりに、列の範囲を指定できます。
names(NARROW) # Because AGE, MARITAL_STATUS and COUNTRY are successive columns, # you can simply do the following: ct <- ore.crosstab(AGE-COUNTRY~GENDER, NARROW) # An equivalent invocation is the following: ct <- ore.crosstab(AGE+MARITAL_STATUS+COUNTRY~GENDER, NARROW)
この例のリスト
R> names(NARROW)
[1] "ID" "GENDER" "AGE" "MARITAL_STATUS"
[5] "COUNTRY" "EDUCATION" "OCCUPATION" "YRS_RESIDENCE"
[9] "CLASS"
R> # Because AGE, MARITAL_STATUS and COUNTRY are successive columns,
R> # you can simply do the following:
R> ct <- ore.crosstab(AGE-COUNTRY~GENDER, NARROW)
R> # An equivalent invocation is the following:
R> ct <- ore.crosstab(AGE+MARITAL_STATUS+COUNTRY~GENDER, NARROW)
例5-37 別の列の値ごとに1つのクロス集計表の作成
この例では、別の列COUNTRYの一意の値ごとに1つのクロス集計表(AGE、GENDER)を作成します。
ct <- ore.crosstab(~AGE/COUNTRY, data=NARROW) head(ct)
この例のリスト
R> ct <- ore.crosstab(~AGE/COUNTRY, data=NARROW)
R> head(ct)
AGE ORE$FREQ ORE$STRATA ORE$GROUP
Argentina|17 17 1 1 1
Brazil|17 17 1 1 3
United States of America|17 17 12 1 19
United States of America|18 18 16 1 19
United States of America|19 19 30 1 19
United States of America|20 20 23 1 19
例5-38 2つの列の値のセットごとに1つのクロス集計表の作成
(COUNTRY、GENDER)の一意の組合せごとに1つの(AGE、EDUCATION)表を作成するこの例に示すように、クロス集計を複数の列に拡張できます。
ct <- ore.crosstab(AGE~EDUCATION/COUNTRY+GENDER, data=NARROW) head(ct)
この例のリスト
R> ct <- ore.crosstab(AGE~EDUCATION/COUNTRY+GENDER, data=NARROW)
R> head(ct)
AGE EDUCATION ORE$FREQ ORE$STRATA ORE$GROUP
United States of America|F|17|10th 17 10th 3 1 33
United States of America|M|17|10th 17 10th 5 1 34
United States of America|M|17|11th 17 11th 1 1 34
Argentina|M|17|HS-grad 17 HS-grad 1 1 2
United States of America|M|18|10th 18 10th 1 1 34
United States of America|F|18|11th 18 11th 2 1 33
例5-39 階層化によるクロス集計の拡張
前の例のすべてのクロス集計表は、この例に示すように、階層化で拡張できます。
ct <- ore.crosstab(AGE~GENDER^CLASS, data=NARROW) head(ct) R> head(ct) # The previous function invocation is the same as the following: ct <- ore.crosstab(AGE~GENDER, NARROW, strata="CLASS")
この例のリスト
R> ct <- ore.crosstab(AGE~GENDER^CLASS, data=NARROW)
R> head(ct)
R> head(ct)
AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
0|17|F 17 F 5 1 1
0|17|M 17 M 9 1 1
0|18|F 18 F 6 1 1
0|18|M 18 M 7 1 1
0|19|F 19 F 15 1 1
0|19|M 19 M 13 1 1
# The previous function invocation is the same as the following:
ct <- ore.crosstab(AGE~GENDER, NARROW, strata="CLASS")
例5-40 ビニングおよびその後のクロス集計
この例では、AGEによってカスタム・ビニングを実行した後、GENDERおよびビンのクロス集計を計算します。
NARROW$AGEBINS <- ifelse(NARROW$AGE<20, 1, ifelse(NARROW$AGE<30,2, ifelse(NARROW$AGE<40,3,4))) ore.crosstab(GENDER~AGEBINS, NARROW)
この例のリスト
R> NARROW$AGEBINS <- ifelse(NARROW$AGE<20, 1, ifelse(NARROW$AGE<30,2,
+ ifelse(NARROW$AGE<40,3,4)))
R> ore.crosstab(GENDER~AGEBINS, NARROW)
GENDER AGEBINS ORE$FREQ ORE$STRATA ORE$GROUP
F|1 F 1 26 1 1
F|2 F 2 108 1 1
F|3 F 3 86 1 1
F|4 F 4 164 1 1
M|1 M 1 29 1 1
M|2 M 2 177 1 1
M|3 M 3 230 1 1
M|4 M 4 381 1 1
親トピック: データの探索