ダミー変数
このトピックでは、ダミー変数を紹介します。分類および回帰問題でソフトウェアによってダミー変数が作成される方法と、関数 dummyvar
を使用してダミー変数を作成する方法を説明します。
ダミー変数とは
分類と回帰解析を実行するとき、連続的 (定量的) 予測子変数とカテゴリカル (定性的) 予測子変数の両方が必要になることがよくあります。カテゴリカル変数は、数値配列として含めてはなりません。数値配列には順序と大きさがあります。カテゴリカル変数は順序は持つことができますが (順序変数などの場合)、大きさはありません。数値配列を使用すると、カテゴリ間に既知の "距離" があると想定されてしまいます。カテゴリカル予測子は、ダミー変数として使用するのが適切です。ダミー変数を定義するには、0 と 1 の値を持つ指標変数を使用します。
以降のセクションで説明するように、解析のタイプに基づいて 4 つのスキームのうち 1 つがソフトウェアによって選択され、ダミー変数が定義されます。たとえば、Cool
、Cooler
、Coolest
という 3 つのカテゴリを持つカテゴリカル変数を考えてみます。
完全なダミー変数
カテゴリごとに 1 つずつ、3 つのダミー変数を使用して、3 つのカテゴリを持つカテゴリカル変数を表します。
X0 は、Cool
に対しては値が 1、それ以外については値が 0 のダミー変数です。X1 は、Cooler
に対しては値が 1、それ以外については値が 0 のダミー変数です。X2 は、Coolest
に対しては値が 1、それ以外については値が 0 のダミー変数です。
基準グループを使用したダミー変数
3 つのカテゴリを持つカテゴリカル変数を、基準グループを持つ 2 つのダミー変数を使用して表します。
X0 を使用せずに、X1 と X2 だけで Cool
、Cooler
、Coolest
を区別することができます。Cool
の観測値は、どちらのダミー変数も 0 になっています。すべての変数の値が 0 で表されるカテゴリは "基準グループ" と呼ばれています。
順序付けされたカテゴリカル変数のダミー変数
カテゴリの数学的順序が Cool
< Cooler
< Coolest
であると仮定します。この符号化方式は、1 および –1 の値を使用します。上位のカテゴリにはより多くの 1 を使用して、順序を示します。
X1 は、Cooler
と Coolest
に対しては値が 1、Cool
に対しては値が –1 のダミー変数です。X2 は、Coolest
に対しては値が 1、それ以外については値が –1 のダミー変数です。
カテゴリカル変数に数学的順序があることを示すには、関数 categorical
の名前と値のペアの引数 'Ordinal'
を使用します。
エフェクト コーディングで作成されたダミー変数
エフェクト コーディングでは、1、0、および –1 を使用してダミー変数を作成します。エフェクト コーディングでは、基準グループを使用したダミー変数のように値 0 を使用して基準グループを表すのではなく、–1 を使用して最後のカテゴリを表します。
ダミー変数の作成
ダミー変数の自動作成
Statistics and Machine Learning Toolbox™ には、カテゴリカル予測子を受け入れる分類および回帰近似関数が複数あります。いくつかの近似関数は、カテゴリカル予測子を処理するためのダミー変数を作成します。
カテゴリカル予測子の特定について、近似関数の既定の動作は以下のとおりです。
予測子データがテーブル内にある場合、関数は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。決定木を使用する近似関数は、順序付けされた categorical ベクトルを連続変数と仮定します。
予測子データが行列の場合、すべての予測子が連続的であると見なされます。
他の予測子をカテゴリカル予測子として指定するには、名前と値のペアの引数 'CategoricalPredictors'
または 'CategoricalVars'
を使用してそれらを指定します。
近似関数は、特定されたカテゴリカル予測子を次のように処理します。
fitckernel
、fitclinear
、fitcnet
、fitcsvm
、fitrgp
、fitrkernel
、fitrlinear
、fitrnet
、およびfitrsvm
は、カテゴリカル変数の順序付けの有無に応じて 2 つの異なるスキームを使用してダミー変数を作成します。順序付けされていないカテゴリカル変数の場合、関数は完全なダミー変数を使用します。
順序付けされたカテゴリカル変数の場合、関数は順序付けされたカテゴリカル変数のダミー変数を使用します。
fitlm
、fitglm
、fitcox
などのパラメトリック回帰近似関数は基準グループを使用したダミー変数を使用します。関数にダミー変数が含まれる場合、ダミー変数の推定係数は基準グループを基準にします。たとえば、カテゴリカル予測子がある線形回帰を参照してください。fitlme
、fitlmematrix
、およびfitglme
では、名前と値のペアの引数'DummyVarCoding'
を使用してダミー変数を作成するスキームを指定できます。関数は、完全なダミー変数 ('DummyVarCoding','full'
)、基準グループを使用したダミー変数 ('DummyVarCoding','reference'
)、およびエフェクト コーディングで作成されたダミー変数 ('DummyVarCoding','effects'
) の 3 つのスキームをサポートします。これらの関数には、カテゴリカル変数を指定するための名前と値のペアの引数はないことに注意してください。fitrm
はエフェクト コーディングで作成されたダミー変数を使用します。カテゴリカル予測子を受け入れる他の関数では、ダミー変数を作成することなくカテゴリカル予測子を処理できるアルゴリズムが使用されます。
ダミー変数の手動作成
この例では、関数dummyvar
を使用して独自のダミー変数計画行列を作成する方法を説明します。この関数はグループ化変数を受け入れ、0 と 1 が含まれている行列を返します。この行列の列は、グループ化変数に対するダミー変数です。
性別を指定して、カテゴリカル データの列ベクトルを作成します。
gender = categorical({'Male';'Female';'Female';'Male';'Female'});
gender
についてダミー変数を作成します。
dv = dummyvar(gender)
dv = 5×2
0 1
1 0
1 0
0 1
1 0
dv
の行数は gender
の行数と同じ 5 行です。また、列数は、一意のグループ Female
と Male
に対応して 2 列です。列の順序は gender
のレベルの順序に対応しています。categorical 配列の場合、既定の順序はアルファベットの昇順です。順序をチェックするには、関数categories
を使用します。
categories(gender)
ans = 2x1 cell
{'Female'}
{'Male' }
ダミー変数を回帰モデルで使用するには、いずれかの列を削除する (基準グループを作成する) か、切片の項を使用せずに回帰モデルを近似しなければなりません。この例では、2 つの性別を表すのに必要なダミー変数は 1 つだけです。完成している計画行列 dv
に切片の項を追加するとどうなるか見てみましょう。
X = [ones(5,1) dv]
X = 5×3
1 0 1
1 1 0
1 1 0
1 0 1
1 1 0
rank(X)
ans = 2
切片の項がある計画行列はフル ランクではなく、可逆になりません。このような線形依存性が存在するため、切片の項がある回帰モデルで c 個のカテゴリがある場合、カテゴリカル変数は c – 1 個の指標変数で表します。