n-1変数を使用してダミー変数を実装する方法は?


9

4つのレベルを持つ変数がある場合、理論的には3つのダミー変数を使用する必要があります。実際には、これは実際にどのように実行されますか?0-3を使用しますか、1-3を使用し、4を空白のままにしますか?助言がありますか?

注:Rで作業します。

更新:ADに対応する1〜4を使用する1つの列を使用するとどうなりますか?それはうまくいくか、問題を引き起こしますか?


3
UCLA ATSのこのページは、かなりよく説明していると思います。
カラカル、2011

4
ただ、整数0-3または1-4または1-3のように、この変数をコーディングすることであることに注意してください、明確にすることではないコーディングダミーとなりません 3つのダミー変数と同じ効果を持っています。しかし、そのような間違ったコーディング意志の回帰式とソフトウェアでの作業とそこだろうもっともらしい出力することは:それだけで意図したモデルに対応していません。(注:これは、質問に対する最近の更新に回答します。
whuber

回答:


11

実際には、通常、選択したソフトウェアでダミー変数の作成と操作を処理できます。それが扱われるかもしれないいくつかの方法があります。ここでは、A、B、C、Dの各レベルに1つずつ、4つの観測値を持つデータセットの一般的な可能性をいくつか示します。これらは異なるパラメーター化です。その結果、モデルのフィットはまったく同じになりますが、パラメーターの解釈が異なります。基本的な代数を使用して、あるものから別のものに簡単に変換できます。それらはすべて互いに線形結合であることに注意してください。実際、任意の線形結合を使用できます。

最初のレベルとの違いを使用(Rのデフォルト):

A 0 0 0
B 1 0 0
C 0 1 0
D 0 0 1

前のレベルとの違いを使用(SASのデフォルト):

A 1 0 0
B 0 1 0
C 0 0 1
D 0 0 0

「合計」コントラストを使用します。

A    1    0    0
B    0    1    0
C    0    0    1
D   -1   -1   -1

「ヘルマート」コントラストを使用します。

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3

1
純粋さのために、厳密に言えば、ダミー変数は1番目と2番目の例にすぎません。ダミー変数はインジケーターコントラスト変数とも呼ばれます。Helmert偏差、およびその他の代替タイプのコントラスト変数は、私にとってダミーと呼ばれるべきではありません。
ttnphns 2011

1
@ttnphns Helmertのコントラストは技術的な観点からダミーコーディングを構成するものではないことに同意しますが、それでもここに含めることは完全に合理的だと思います。明確にするためにこれを指摘しているのか、答えを変更するように提案しているのかはわかりません。@アーロン+1、これらの異なるコーディングスキームの解釈がどのように異なるかを簡単に説明すると、この答えはさらに良くなります。
gung-モニカの回復

7

変数レベルがA、B、C、およびDであると仮定します。回帰に定数項がある場合は、3つのダミー変数を使用する必要があります。それ以外の場合は、4つすべてが必要です。

ダミー変数を実装するには、数学的に同等の方法が多数あります。回帰に一定の項がある場合、1つの方法は、レベルの1つを「ベースライン」レベルとして選択し、他の3つをそれと比較することです。具体的には、ベースラインレベルがAであるとしましょう。最初のダミー変数は、レベルがBの場合は常に値1になり、それ以外の場合は0になります。2番目は、レベルがCである場合は常に値1を受け取り、それ以外の場合は0を受け取ります。3番目は、レベルがDである場合は常に1を受け取り、それ以外の場合は0を受け取ります。定数項は常に1に等しいため、最初のダミー変数の推定係数は、レベルBとレベルAの差の推定値になります。他のダミー変数についても同様です。

定数項がない場合は、前の例のように作成された4つのダミー変数を使用して、Aレベルに1つ追加するだけです。


回帰に定数項があることがいかに重要であるかについての素晴らしいメモ。
アーロンがスタックオーバーフローを去る

5

Rでは、変数を因子として定義し、それを実装します。

x <- as.factor(sample(LETTERS[1:4], 20, replace = TRUE))
y <- rnorm(20)
lm (y ~ x)

戻る

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)           xB           xC           xD  
     1.0236      -0.6462      -0.9466      -0.4234  

Rの「lm」、「factor」、「formula」のドキュメントには、詳細の一部が記載されています。


1
+1これは、すでにリストされている回答を補完するものです。我々はまた、あなたはすでに(ADなど)のグループ名と変数を持っている場合、これは余分なステップなしに分析関数の呼び出しで行うことができることに注意することができます lm(y ~ as.factor(x))
GUNG -復活モニカ

私がダミー変数の使用を検討している主な理由は、多くの因子レベル(> 32)を持つ大規模なデータセットで作業していて、Rの一部のパッケージ(つまり、ランダムフォレスト)が多くのレベルの因子を処理できないため、ダミーが回避策であったかどうかを確認します。
screechOwl

1
'model.matrix'を使用して、回帰計画行列を作成できます。model.matrix(y〜x)(xは係数です)は、ダミー変数を含む行列を提供します。私はランダムフォレストパッケージに精通していませんが、model.matrixから取得した明示的な設計行列を関数に与えることができ、model.matrixは多くの(つまり、数百の)レベルで機能するようです。
グレイ

PS:多くのレベルで機能するソリューションに関心があることを明確にするために、質問を編集することができます。質問は4について問い合わせ
グレー

4

whuberはコメントで、ダミー変数を作成する代わりに0-3または1-4コーディングをコーディングすることはあなたが望むものではないことを教えてくれました。これは試みです-私はうまくいけば、あなたがそのモデルで何をしているのか、なぜそれが間違っているのかを説明します。

変数Xをコーディングして、A、X = 1、B、X = 2、C、X = 3、D、X = 4のようにコーディングすると、回帰を行うときにパラメーターが1つしか得られません。Xに関連付けられた推定パラメーターが2だったとしましょう。これは、Bの平均とAの平均の間の予想される差が2であることを示します。また、Cの平均の間の予想される差を示していますそして、Bの平均は2です。DとCのいくつか。これらのグループの平均の違いを、この非常に厳密なパターンに従うように強制することになります。その1つのパラメーターは、グループのすべての意味が互いにどのように関連しているかを正確に示します。

したがって、この種のコーディングを行った場合、順序が正しいだけでなく、この場合AからBへの増加が予想される場合、BからCおよびCへの増加が予想されるため、からD)までですが、その違いは同じであると想定する必要もあります!

代わりに、提案されているダミーのコーディングを行うと、各グループに独自の意味を持たせることができます-制限なし。このモデルははるかに賢明で、必要な質問に答えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.