Qualitative Variablencodierung in der Regression führt zu „Singularitäten“


17

Ich habe eine unabhängige Variable namens "Qualität"; Diese Variable hat 3 Antwortmodalitäten (schlechte Qualität; mittlere Qualität; hohe Qualität). Ich möchte diese unabhängige Variable in meine multiple lineare Regression einführen. Wenn ich eine binäre unabhängige Variable habe (Dummy-Variable, ich kann 0/ codieren 1), ist es einfach, sie in ein Modell mit mehreren linearen Regressionen einzuführen.

Aber mit 3 Antwortmodalitäten habe ich versucht, diese Variable wie folgt zu codieren:

Bad quality      Medium quality      High quality

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

Aber es gibt ein Problem, wenn ich versuche, meine multiple lineare Regression durchzuführen: Die Modalität Medium qualitygibt mir NA:

Coefficients: (1 not defined because of singularities) 

Wie kann ich diese Variable "Qualität" mit 3 Modalitäten codieren? Muss ich eine Variable als Faktor ( factorin R) erstellen , kann ich diesen Faktor dann in eine multiple lineare Regression einführen?


2
Vielleicht verstehe ich die Frage falsch, aber Sie können aufgrund der perfekten Kollinearität nicht alle Ebenen einer kategorialen Variablen in eine lineare Regression einbeziehen. Eine Ihrer Kategorien wird gelöscht, um eine Basisgruppe bereitzustellen, mit der die anderen Gruppen verglichen werden.
RickyB

1
Im statistischen Kontext gibt es eine hervorragende Erklärung dafür, was eine Singularmatrix ausmacht: Welche Korrelation macht eine Matrix singulär?
gung - Wiedereinsetzung von Monica

Antworten:


23

Das Problem, das Sie haben (dh "Singularitäten"), kann als ein Beispiel für Multikollinearität angesehen werden . Multikollinearität wird häufig definiert als:

Eine oder mehrere Prädiktorvariablen sind eine lineare Kombination anderer Prädiktorvariablen.

Dies ist in der Tat eine ziemlich strenge Definition; Es ist eine perfekte Multikollinearität, und Sie können leicht ein Problem mit Multikollinearität haben, ohne dass eine Ihrer Variablen eine perfekte lineare Kombination von anderen ist. Darüber hinaus tritt eine perfekte Multikollinearität selten auf. Sie sind jedoch auf einen Fall gestoßen, bei dem es vorkommen kann. Lassen Sie uns sehen , wie wir können perfekt vorhersagen medium qualityvon unserem Wissen von den beiden anderen Kategorien (wir werden mit einem Regressionsmodell tun dies , wo medium qualityist und & sind X 1 & X 2 jeweils): Y = β 0 + β 1Y.bad qualityhigh qualityX1X2
Es ist zu beachten, dass kein Fehlerterm ε angegeben ist, da wir dies perfekt vorhersagen können. Dazu setzen wir β 0 = 1 , ß 1 = - 1 und β 2 = - 1 . Wenn Sie nun haben, dann ist X 1 = 1 , was β 0 ( 1 auslöscht

Y.=β0+β1X1+β2X2
εβ0=1β1=-1β2=-1bad qualityX1=1β0 ) und X 2 = 0, so dass auch dieser Term aufgehoben wird ( - 1 × 0 ). Somit bleibtfür Y ()ein vorhergesagter Wert von 0 übrig, was genau richtig ist. Ich überlasse es Ihnen, die anderen Möglichkeiten auszuarbeiten (in Ihrem Fall funktioniert es immer). 1+-1×1X2=0-1×00Y.medium quality

0RfactorR Ich werde das alles für Sie tun - es wird richtig gemacht und es ist viel bequemer - trotzdem ist es wert zu verstehen, dass dies das ist, was sich hinter den Kulissen abspielt.


Vielen Dank für alle Ihre Kommentare! Ich benutze R also, wenn ich es richtig verstanden habe, mit einem Faktor R wird alles gemacht, ich muss nichts machen! Perfekt ! Panzer noch einmal!
Varin Sacha

Wenn Sie den Achsenabschnitt in lmformula ( + 0) auf Null setzen, würde das funktionieren?
Firebug

1
@Firebug, wenn Sie Level-Mittel-Codierung verwenden (dh Sie haben eine separate Variable für jedes Level), können Sie den Achsenabschnitt auf Null setzen und es sollte gut funktionieren. Obwohl sich die Bedeutung der variablen Koeffizienten und der Hypothesentests unterscheiden.
gung - Wiedereinsetzung von Monica

10

@gung hat die Theorie klar erklärt. Hier ist ein praktisches Beispiel zur Veranschaulichung:

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)

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

Wenn wir nun die Dummy-Variablen selbst codieren und versuchen, ein Modell unter Verwendung aller Variablen anzupassen:

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)

Wir erhalten den erwarteten Fehler: singular fit encountered


1
Vergnügen. Hoffe, es ist jetzt alles klar. factorkümmert sich in der Regel um die Dummy-Variablencodierung, ist aber gut zu wissen, was unter der Haube vor sich geht.
Dardisco
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.