Dummy Coding タブ

Dummy Coding タブでは、カテゴリ変数(名義尺度・順序尺度)を数値のダミー変数(0/1)に変換します。回帰分析や GLM にカテゴリ変数を組み込むための前処理です。

基本的な使い方

Dummy Coding を開く

メニューバーから Data > Dummy Coding... を選択すると、新しい Dummy Coding タブが開きます。

変換を設定する

  1. Dataset ドロップダウンで変換対象のデータセットを選択
  2. 列の設定テーブルで各列の Scale と Action、必要に応じて Reference(参照カテゴリ)を設定
  3. Encoding Preview セクションで、各列の参照カテゴリと生成されるダミー変数の数を確認
  4. Create Dataset をクリック
  5. データセット名を入力して OK をクリック

Encoding Preview では、ユニーク値の数が想定どおりか、表記ゆれやタイプミスで増えていないか、参照カテゴリが意図したものかを確認します。参照カテゴリには観測数を n = の形式で併記します。ユニーク値が1つしかない列は変換できず、エラーが表示されます。

このページで使用するデータ

この説明では、5人のアンケートデータ(survey.csv)を使用します。blood_type と education がカテゴリ変数です。

nameageblood_typeeducation
Alice28Acollege
Bob35Bgraduate
Carol42Ocollege
Dave31Ahigh_school
Eve26ABgraduate

列の設定

Scale(測定尺度)

尺度説明ダミー変数への変換
nominal名義尺度可能
ordinal順序尺度可能
interval間隔尺度不可(数値としてそのまま使用)
ratio比率尺度不可(数値としてそのまま使用)

Enum 型の列では、測定尺度によらず Enum 定義の順序(low → mid → high など)がダミー変数の生成順と参照カテゴリの初期値に使われます。グラフの軸と同じ順序です。Enum 型でない列の並び順はカテゴリの順序を参照してください。特定のカテゴリを基準にしたい場合は Reference で選びます。

Scale の初期値は列に設定されている測定尺度です。尺度が未設定の列はデータ型から推論され、string と boolean は nominal、数値と日時は interval になります。詳細は データ型と測定尺度 を参照してください。Scale はドロップダウンで変更できます。string 型と enum 型の列は値が文字列として保存されているため、選べるのは nominal と ordinal だけです。設備番号やライン番号のように数値で記録した区分は interval と推論されますが、Scale を nominal に変更するとダミーコーディングできます。このときカテゴリは数値順に並び、参照カテゴリの初期値は最小の番号です。

Action(アクション)

アクション説明
Not included出力データセットから除外する
Include as-is列をそのまま出力に含める
Dummy codeダミー変数に変換する(元の列は除外)
Dummy code (keep original)ダミー変数に変換し、元の列も保持する。出力データセットでグラフやクロス集計に元のカテゴリ列を使う場合に選ぶ

Dummy code / Dummy code (keep original) はカテゴリ変数(nominal / ordinal)にのみ選択可能です。boolean 型の列は対象外です1。

Reference(参照カテゴリ)

参照カテゴリは、ダミー変数の係数を解釈するときの基準になるグループです。対照群や標準条件、ベースラインなど比較の基準にしたいグループを選ぶと、係数を解釈しやすくなります。

Action で Dummy code または Dummy code (keep original) を選択した列では、Reference ドロップダウンで参照カテゴリを選択できます。初期値はカテゴリの順序で最初のカテゴリです。

選択済みの参照カテゴリがデータからなくなった場合、Dummy Coding タブは変換の実行前にエラーを表示します。Reload Dataset による再読み込みなどで該当カテゴリの行がソースデータセットから消えると、エラーメッセージが表示され、Reference ドロップダウンはその値に not in data の注記を付けて表示します。別の参照カテゴリを選び直すまで Create Dataset / Update Dataset は押せません。

Reference ドロップダウンは各カテゴリの観測数を n = の形式で併記します。参照カテゴリの観測数は、その列から生成されるすべてのダミー変数の係数の標準誤差に影響します。そのカテゴリ変数だけを説明変数に持つ線形回帰では、観測数の少ないカテゴリを参照カテゴリにすると、その列のどの係数についても区間推定の幅が広がります2。他の説明変数を含むモデルでは、係数の分散に説明変数どうしの相関に由来する項が加わるため、参照カテゴリの観測数だけでは決まりません。

ここに表示される観測数は、この列だけを見た非欠損の行数です。回帰や GLM は応答変数を含むモデルの使用列に欠損のある行をリストワイズ除去するため、除去される行があれば各カテゴリの行数はここに出る数より少なくなります。

カテゴリ数が多い列

ユニーク値が 50 を超える列を Dummy code に設定すると、Dummy Coding タブは生成されるダミー変数の本数を警告として表示します。k 個のカテゴリからは k-1 個のダミー変数が生成されるため、氏名や ID のように行ごとに異なる値を持つ列を誤って設定すると、出力データセットの列数が行数に近づきます。

この警告は変換を止めません。意図した設定であればそのまま Create Dataset を実行できます。ただしカテゴリ数が多いほど変換にかかる時間と出力データセットの大きさは増えます。

ユニーク値が 50 を超える列では、Reference ドロップダウンにカテゴリの順序の先頭 50 件だけを並べ、残りの件数を末尾に表示します。数万件の選択肢を展開すると設定画面の操作が止まるためです。この範囲外のカテゴリを参照カテゴリにするには、Agent API の referenceCategories で指定します。

変換の仕組み

k 個のカテゴリから k-1 個のダミー変数を生成し、1つのカテゴリを参照カテゴリ(reference category)として省略します3。この方式は treatment coding(参照カテゴリを基準にした符号化)と呼ばれます。

  1. カテゴリのユニーク値を抽出します4
  2. カテゴリの順序に従ってソートします
  3. 参照カテゴリを除外します。初期値は並び順で最初のカテゴリで、Reference ドロップダウンで変更できます
  4. 残りの k-1 個のカテゴリに対してダミー変数を生成します
  5. 該当するカテゴリの行は1、それ以外は0になります

カテゴリの順序

カテゴリの並び順は、ダミー変数の生成順と参照カテゴリの初期値を決めます。グラフの軸・凡例が使う順序と同じで、列の型から決まります。Enum 型の列では、測定尺度によらず Enum 定義の順序です。int64・float64 型の列では数値順です。それ以外の列ではカテゴリ名の Unicode 符号位置順(code point order)です。符号位置順は、大文字と小文字が混在しない英数字のカテゴリ名では辞書順と一致します。混在する場合、大文字(A〜Z)はすべての小文字(a〜z)より前に並びます。この並び順は MIDAS を実行する環境の言語設定に依存しません。

変換例

blood_type 列(ユニーク値: A, AB, B, O)を変換する場合:

  • 参照カテゴリ: A(初期値。カテゴリの順序で最初)
  • 生成されるダミー変数: blood_type_AB、blood_type_B、blood_type_O
blood_typeblood_type_ABblood_type_Bblood_type_O
A000
B010
O001
A000
AB100

参照カテゴリ A の行はすべてのダミー変数が0になります。

回帰モデルにダミー変数を投入すると、各ダミー変数の係数は参照カテゴリとの差の推定値です。差が測られる尺度はモデルのリンク関数で決まります。線形回帰(恒等リンク)では応答変数そのものの尺度上の差です。ロジスティック回帰やポアソン回帰などリンク関数が恒等でない GLM では、線形予測子の尺度(対数オッズや対数など)上の差です。この例で blood_type_B を線形回帰の説明変数に投入した場合、係数は B 型と参照カテゴリ A 型の応答変数の差の推定値です。ほかの説明変数を含むモデルでは、それらを一定とした場合の差です。

出力データセット

上のサンプルデータで name を Not included、age を Include as-is、blood_type と education を Dummy code に設定した場合の出力です。

ageblood_type_ABblood_type_Bblood_type_Oeducation_graduateeducation_high_school
2800000
3501010
4200100
3100001
2610010

blood_type(4カテゴリ)から3つ、education(3カテゴリ: college, graduate, high_school、参照: college)から2つのダミー変数が生成されています。列名は {元の列名}_{カテゴリ名} の形式で、データ型は int64(0または1)、測定尺度は比率尺度です。回帰や GLM の説明変数にそのまま投入でき、再度ダミーコーディングされることはありません。行数は元のデータセットと同じです。元のデータセットは変更されず、新しい 派生データセット として保存されます。

保存済み Dummy Coding の編集

既存の Dummy Coding データセットは編集できます。Project Lineage タブでデータセットを右クリックするか、Project Overview のデータセットのメニューボタン(⋮)から Edit Operation... を選択すると、ソースデータセットと列ごとのアクション、参照カテゴリ、スケールの上書きが復元された状態で Dummy Coding が編集モードで開きます。

編集モードでは、他のデータセットやモデル、レポートがこのデータセットに依存している場合、影響を受ける項目の種類と件数が警告として表示されます。ソースデータセットを変更すると、新しいソースに同名の列がある設定は引き継がれます。カテゴリカルでなくなった列のアクションは Include as-is に変わり、新しいソースで確認できない参照カテゴリはリセットされます。引き継げなかった設定は通知に表示されます。Update Dataset をクリックすると変更が反映されます。このデータセットに依存する派生データセットは次にデータが必要になったとき再計算され、依存するモデルは自動的に再推定されます。

編集タブを開いてから Update Dataset をクリックするまでの間に、同じデータセットの操作が別の編集タブや Agent API など他の経路から変更されていた場合、MIDAS は保存を止めてダイアログを表示します。先に加えられた変更を警告なく失わせないためです。ダイアログはタブを開いた時点の操作と、その後に他所で変わった操作を並べて表示します。Overwrite with This Tab's Edits を選ぶと、他所で変わった操作をこのタブの編集内容で上書きして保存します。Keep Editing を選ぶと保存せずに編集タブへ戻り、編集内容はそのまま残ります。もう一度保存すると同じダイアログが表示されます。

Next steps

See also

脚注

  1. boolean 型の列は既に 0/1 に相当するため、Include as-is を選択してそのまま使用できます。 ↩

  2. そのカテゴリ変数だけを説明変数に持ち、どのカテゴリでも誤差の分散が共通で σ² である線形回帰では、カテゴリ j のダミー変数の係数の分散は σ²(1/n_j + 1/n_ref) です。σ² は応答変数そのものの分散ではなく、カテゴリで条件づけた誤差の分散です。n_j はカテゴリ j の観測数、n_ref は参照カテゴリの観測数で、1/n_ref はすべてのカテゴリの係数に共通して現れます。 ↩

  3. k 個すべてのダミー変数を作ると、どの行でもダミー変数の合計が1になります。切片項もすべての行で1なので、両者は線形従属になり、回帰係数を一意に推定できなくなります。1つ省略して k-1 個にすることで、この問題を回避します。 ↩

  4. 欠損値はユニーク値のカウントに含まれません。元の列が欠損値の行は、生成されるすべてのダミー変数も欠損値になり、後続の回帰や GLM などで リストワイズ除去 されます。ユニーク値が1つしかない列はダミー変数に変換できません。 ↩