回帰における定性的変数コーディングは「特異点」につながります


17

「品質」という独立変数があります。この変数には、応答の3つのモダリティ(低品質、中品質、高品質)があります。この独立変数を多重線形回帰に導入したいと思います。バイナリ独立変数(ダミー変数、0/ をコーディングできます1)がある場合、それを多重線形回帰モデルに導入するのは簡単です。

しかし、応答の3つのモダリティを使用して、この変数を次のようにコーディングしようとしました。

Bad quality      Medium quality      High quality

     0                1                  0
     1                0                  0
     0                0                  1
     0                1                  0

しかし、多重線形回帰を行おうとすると問題がありMedium qualityますNA:モダリティは私に与えます:

Coefficients: (1 not defined because of singularities) 

この変数「品質」を3つのモダリティでどのようにコーディングできますか?因子(factorin R)として変数を作成する必要がありますが、この因子を多重線形回帰に導入できますか?


2
質問を誤解しているのかもしれませんが、完全な共線性のために、カテゴリ変数のすべてのレベルを線形回帰に含めることはできません。カテゴリの1つが削除され、他のグループと比較されるベースグループが提供されます。
RickyB

1
ここで特異行列を構成するものの統計的文脈で顕著な説明があります:what-c​​orrelation-makes-a-matrix-singular?
GUNG -復活モニカ

回答:


23

あなたが抱えている問題(すなわち、「特異点」)は、多重共線性のインスタンスと考えることができます。多重共線性は、多くの場合次のように定義されます。

1つ以上の予測変数は、他の予測変数の線形結合です。

実際、これはかなり厳密な定義です。それは完全な多重共線性であり、あなたの変数が他の変数の完全な線形結合でなくても、多重共線性の問題を簡単に抱えることができます。さらに、完全な多重共線性はめったに発生しません。ただし、発生する可能性のあるケースを見つけました。私たちができる方法を見てみましょう完璧に予測するmedium quality他の二つのカテゴリーの知識から(我々は回帰モデルでこれをやるmedium qualityで、および&です&、それぞれ): エラー用語がないことに注意してくださいX 1 X 2 Y = β 0 + β 1 X 1 + β 2 X 2 ε β 0 = 1 β 1 = - 1 β 2 = - 1 X 1 = 1 β 0Ybad qualityhigh qualityX1X2

Y=β0+β1X1+β2X2
εこれは完全に予測できるためです。そのためには、、、およびます。さて、あなたが持っているときは、、相殺され()、およびという用語は同様に相殺されるように()。したがって、我々は、予測値が残されているのために(正確に正しいです)。他の可能性を解決するためにあなたに任せます(あなたの場合は常に動作します)。 β0=1β1=1β2=1bad qualityX1=1β0X 2 = 0 1 × 0 0 Y1+1×1X2=01×00Ymedium quality

それでは、何をすべきでしょうか?カテゴリ変数を表す場合、通常は参照セルコーディング(「ダミーコーディング」と呼ばれることが多い)を使用します。これを行うには、カテゴリ変数の1つのレベルを参照レベルとして選択します。そのレベルは独自のダミーコードを取得しませんが、他のすべてのレベルのダミーコードにすべてを含めることで簡単に示されます。カテゴリ変数の他のレベルは、既に行ったようにダミーコードで表されます。(これに関する詳細については、ここで私の答えを見ることができます:曜日に基づいた回帰など。)を使用している場合は、と0RfactorR これはすべてあなたのために行われます-それは正しく行われますが、はるかに便利です-それにもかかわらず、これは「舞台裏」で起こっていることを理解する価値があります。


すべてのコメントをありがとう!私はRを使用しているので、よく理解していれば、Rがすべてを行うので、何もする必要はありません!パーフェクト!再びタンク!
ヴァリンサチャ

lm数式で切片をゼロに設定すると(+ 0)動作しますか?
Firebug

1
@Firebug、レベル手段コーディングを使用している場合(つまり、レベルごとに個別の変数がある場合)、インターセプトをゼロに設定することができ、正常に機能します。可変係数と仮説検定の意味は異なりますが。
グング-モニカの復職

10

@gungは理論を明確に説明しました。以下に実例を示します。

set.seed(1)
pred1 <- factor(c("bad", "med", "high"), levels=c("bad", "med", "high"))
df1 <- data.frame(y=20*abs(runif(6)),
                  x=rnorm(6),
                  q=sample(pred1, 6, replace=TRUE)
                  )
l1 <- lm(y ~ x, data=df1)
### add variable q    
l2 <- lm(y ~ x + q, data=df1)
### look at dummy variables generated in creating model
model.matrix(l2)

これは、参照レベル(すべて)が次の行4に示されていることを示しています。0bad

  (Intercept)          x qmed qhigh
1           1  1.5952808    1     0
2           1  0.3295078    0     1
3           1 -0.8204684    0     1
4           1  0.4874291    0     0
5           1  0.7383247    1     0
6           1  0.5757814    0     0

ダミー変数を自分でコーディングし、それらすべてを使用してモデルを近似しようとすると、次のようになります。

df1 <- within(df1, {
       qbad <- ifelse(q=="bad", 1, 0)
       qmed <- ifelse(q=="med", 1, 0)
       qhigh <- ifelse(q=="high", 1, 0)
       })    
lm(y ~ x + qbad + qmed + qhigh, data=df1, singular.ok=FALSE)

予想されるエラーが表示されます。 singular fit encountered


1
喜び。これですべてが明確になることを願っています。factor通常、ダミー変数のコーディングを処理しますが、「内部」で何が起こっているかを認識しておくと便利です。
dardisco
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.