GLMでのダミー(手動または自動)変数の作成について


13

因子変数(レベルMとFの性別など)がglm式で使用されている場合、ダミー変数が作成され、関連する係数(たとえば、genderM)とともにglmモデルの要約に表示されます。

この方法で因子を分割するためにRに依存する代わりに、因子が一連の数値0/1変数(たとえば、genderM(1はM、0はF))、genderF(1はF、0はM)そして、これらの変数は、glm式で数値変数として使用されますが、係数の結果は異なりますか?

基本的に問題は次のとおりです。Rは因子変数と数値変数を操作するときに異なる係数計算を使用しますか?

フォローアップの質問(上記で回答されている可能性があります):Rにダミー変数を作成させる効率だけでなく、一連の数値0,1変数として係数を再コーディングし、代わりにモデルでそれらを使用することで問題はありますか?


2
係数は同じであり、Rの因子のデフォルトのコーディングは、説明したとおりです(これは「ダミー」コーディングと呼ばれます)。これを手動で行う場合は、「ダミー変数トラップ」に注意する必要があります。作成した変数をすべて含めることはできませんが、のみを含めることができます(または、切片を除外します)。そうしないと、モデルが過剰に識別されます。因子変数をエンコードする他の方法もあります。N 1NN1
アフィン2014

@Affine私の推測では、genderMとgenderFの両方をフィードした場合、そのうちの1つは係数に対してNAを返します(特異性のために変数が除外されたというメッセージが表示されます)。この場合、それらは完全に線形に関連しているため、これは理にかなっています。しかし、あなたは私がすべてのNを含めることはできないと言います。それは、genderFがNAに設定されていても、genderM係数に差異/問題が発生することを意味しますか?または、もっと簡単に言えば、GLM / LMが特異性のために変数を除外する場合、過剰同定モデルの使用が問題ですか?(私はあなたの意見に同意します-実際の影響を照会するだけです)
ブライアン14

回答:


22

カテゴリー変数(R では「因子」と呼ばれます)は、重回帰モデルの数値コードで表す必要があります。数値コードを適切に作成する方法は非常に多くあります(UCLAの統計ヘルプサイトにあるこの素晴らしいリストを参照してください)。デフォルトでは、Rは参照レベルのコーディング(Rは「contr.treatment」と呼びます)を使用します。これは、統計全体のデフォルトです。これは、?optionsを使用してRセッション全体のすべてのコントラスト、または?contrastsまたは?C(大文字に注意)を使用して特定の分析/変数に対して変更できます。参照レベルのコーディングに関する詳細が必要な場合は、ここで説明します。たとえば、曜日に基づく回帰

一部の人々は、参照レベルのコーディングを混乱させるため、それを使用する必要はありません。必要に応じて、男性と女性の2つの変数を持つことができます。これはレベルと呼ばれ、コーディングを意味します。しかし、あなたがそれを行う場合は、傍受またはモデル行列が特異になります抑える必要がありますし、私がここで説明@Affineノート上記と同じくらい回帰がフィットすることはできません:質的変数が特異点にリードをコーディング。インターセプトを抑制するためには、追加して、式を変更し-1たり+0そうのように:y~... -1y~... +0

(constant)sexMsexMt0sexMt0

set.seed(1)
y    = c(    rnorm(30), rnorm(30, mean=1)         )
sex  = rep(c("Female",  "Male"          ), each=30)
fem  = ifelse(sex=="Female", 1, 0)
male = ifelse(sex=="Male", 1, 0)

ref.level.coding.model   = lm(y~sex)
level.means.coding.model = lm(y~fem+male+0)

summary(ref.level.coding.model)
# ...
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  0.08246    0.15740   0.524    0.602    
# sexMale      1.05032    0.22260   4.718 1.54e-05 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# ...
summary(level.means.coding.model)
# ...
# Coefficients:
#      Estimate Std. Error t value Pr(>|t|)    
# fem   0.08246    0.15740   0.524    0.602    
# male  1.13277    0.15740   7.197 1.37e-09 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# ...

1
コードを追加していただきありがとうございます。これは、参照セルコーディングのインターセプト=セル内のsexFeがコーディングを意味することを明確に示しています(N-1変数に「何が起こったのか」でさらに混乱しました...)別の質問が必要かもしれませんが、これは1つの変数で簡単に理解できますが、2つ以上はどうでしょうか。例:年齢:「古い」「若い」。refセルコーディングでは、係数はsexMale、ageYoung(たとえば)、両方の切片アカウント、sex FemaleとageOldのどちらに表示されますか?
ブライアン

1
3レベルの係数がある場合、切片は参照レベルの平均であり、他の2つは出力に表示されます。それらの係数は、それらの差と参照レベル、それらのpsの両方がそれらのdifの重要性になります。2つの因子がある場合、両方に参照レベルがあり、切片は両方の参照グループ(例:)にいる人の平均でありyoung F、他のレベルは因子1の所定のレベルとは異なりますw /他の因子の参照レベルと両方の参照レベルグループ。例えば、oldあるold F- `若いF , & M`がありますyoung M- young F
ガン-モニカの回復

1
私はこれで少し遊んで、R^2両方のアプローチの間にかなりの違いを経験しました。だけだと知ってR^2いますが、その説明はありますか?
hans0l0 2015

@ hans0l0、わかりません。違いはないはずです。
gung-モニカの復活

1
@confused、あなたはそれをドキュメント、?glmで見つけることができます。
ガン-モニカの回復

2

推定された係数は、Rに一貫したダミー変数(つまり、数値変数)を作成する条件と同じです。たとえば、偽のデータを作成し、係数を使用してポアソンglmを適合させましょう。gl関数は因子変数を作成することに注意してください。

> counts <- c(18,17,15,20,10,20,25,13,12)
> outcome <- gl(3,1,9)
> outcome
[1] 1 2 3 1 2 3 1 2 3
Levels: 1 2 3
> class(outcome)
[1] "factor"
> glm.1<- glm(counts ~ outcome, family = poisson())
> summary(glm.1)

Call:
glm(formula = counts ~ outcome, family = poisson())

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9666  -0.6713  -0.1696   0.8471   1.0494  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   3.0445     0.1260  24.165   <2e-16 ***
outcome2     -0.4543     0.2022  -2.247   0.0246 *  
outcome3     -0.2930     0.1927  -1.520   0.1285    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 10.5814  on 8  degrees of freedom
Residual deviance:  5.1291  on 6  degrees of freedom
AIC: 52.761

Number of Fisher Scoring iterations: 4

結果には3つのレベルがあるため、2つのダミー変数(outcome = 2の場合はdummy.1 = 0、outcome = 3の場合はdummy.2 = 1)を作成し、これらの数値を使用して再フィットします。

> dummy.1=rep(0,9)
> dummy.2=rep(0,9)
> dummy.1[outcome==2]=1
> dummy.2[outcome==3]=1
> glm.2<- glm(counts ~ dummy.1+dummy.2, family = poisson())
> summary(glm.2)

Call:
glm(formula = counts ~ dummy.1 + dummy.2, family = poisson())

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9666  -0.6713  -0.1696   0.8471   1.0494  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   3.0445     0.1260  24.165   <2e-16 ***
dummy.1      -0.4543     0.2022  -2.247   0.0246 *  
dummy.2      -0.2930     0.1927  -1.520   0.1285    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 10.5814  on 8  degrees of freedom
Residual deviance:  5.1291  on 6  degrees of freedom
AIC: 52.761

Number of Fisher Scoring iterations: 4

ご覧のとおり、推定係数は同じです。ただし、同じ結果を得たい場合は、ダミー変数を作成するときに注意する必要があります。たとえば、2つのダミー変数(outcome = 1の場合はdummy.1 = 0、outcome = 2の場合はdummy.2 = 1)を作成すると、推定結果は次のように異なります。

> dummy.1=rep(0,9)
> dummy.2=rep(0,9)
> dummy.1[outcome==1]=1
> dummy.2[outcome==2]=1
> glm.3<- glm(counts ~ dummy.1+dummy.2, family = poisson())
> summary(glm.3)

Call:
glm(formula = counts ~ dummy.1 + dummy.2, family = poisson())

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9666  -0.6713  -0.1696   0.8471   1.0494  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   2.7515     0.1459   18.86   <2e-16 ***
dummy.1       0.2930     0.1927    1.52    0.128    
dummy.2      -0.1613     0.2151   -0.75    0.453    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 10.5814  on 8  degrees of freedom
Residual deviance:  5.1291  on 6  degrees of freedom
AIC: 52.761

Number of Fisher Scoring iterations: 4

あなたが追加したときからですoutcomeglm.1で変数を、デフォルトでRは、すなわち2つのダミー変数を作成outcome2し、outcome3同様にそれらをして定義dummy.1し、dummy.2glm.2すなわち他のすべてのダミー変数(とき結果の最初のレベルがあるoutcome2とはoutcome3)に設定されていますゼロ。


推定された係数が同じであることのコード証明をありがとう。また、独自の変数を作成する際の警告も役立ちます。モデル変数はデータベースの列に名前で直接結び付けられるため、独自に作成したかったのですが(下流で役立つ可能性があります)、問題を理解する必要があるようです。私はこれをやります。
ブライアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.