Seite 1 von 1

NA Fehler bei Regression

Verfasst: So Jan 05, 2020 12:55 pm
von JessiKe
Hallo zusammen,

ich sitze aktuell an meiner Bachelorarbeit und hab einen Fehler bei der Berechnung einer Regression.

Der Auszug aus dem Summary Befehl:

Code: Alles auswählen

> summary(Umfrage$Geschlecht)
männlich weiblich 
     130      230 
> summary(Umfrage$F_Pos)
 keine FK fachl. FK diszi. FK 
      146       103       111 
> summary(Umfrage$Ebene)
 keine Führungskraft   Unteres Management Mittleres Management       Top Management 
                 146                   87                  103                   24 
> summary(Umfrage$Z_STRESS.GES)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-1.82449 -0.83259 -0.07407  0.00000  0.69904  2.60992 
> summary(Umfrage$Z_SYMPTOME)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-1.93342 -0.83493 -0.01106  0.00000  0.67550  2.73516 

Code: Alles auswählen

> str(Umfrage$Geschlecht)
 Factor w/ 2 levels "männlich","weiblich": 2 2 2 2 2 2 2 2 2 2 ...
> str(Umfrage$F_Pos)
 Factor w/ 3 levels "keine FK","fachl. FK",..: 2 1 3 2 3 2 3 1 2 1 ...
> str(Umfrage$Ebene)
 Factor w/ 4 levels "keine Führungskraft",..: 2 1 3 2 2 2 2 1 2 1 ...
> str(Umfrage$Z_STRESS.GES)
 num [1:360] 0.568 0.101 -1.591 0.509 -0.366 ...
> str(Umfrage$Z_SYMPTOME)
 num [1:360] 1.087 0.675 -1.11 0.95 0.264 ...
Mein Modell ist das folgende:

Code: Alles auswählen

Modell1_99 <- lm(Z_STRESS.GES ~ Z_SYMPTOME + Geschlecht + F_Pos + Ebene ,data = Umfrage)
Bei der letzten Management Ebene wird mit NA Angezeigt

Code: Alles auswählen

Call:
lm(formula = Z_STRESS.GES ~ Z_SYMPTOME + Geschlecht + F_Pos + 
    Ebene, data = Umfrage)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.38873 -0.45710 -0.09923  0.40306  2.39841 

Coefficients: (1 not defined because of singularities)
                          Estimate Std. Error t value Pr(>|t|)    
(Intercept)                0.04667    0.08528   0.547   0.5846    
Z_SYMPTOME                 0.64789    0.04280  15.138   <2e-16 ***
Geschlechtweiblich        -0.06358    0.08553  -0.743   0.4578    
F_Posfachl. FK             0.31711    0.18916   1.676   0.0945 .  
F_Posdiszi. FK             0.07371    0.16839   0.438   0.6618    
EbeneUnteres Management   -0.27410    0.18207  -1.505   0.1331    
EbeneMittleres Management -0.18615    0.17292  -1.077   0.2824    
EbeneTop Management             NA         NA      NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7533 on 353 degrees of freedom
Multiple R-squared:  0.442,	Adjusted R-squared:  0.4325 
F-statistic: 46.59 on 6 and 353 DF,  p-value: < 2.2e-16
Ich vermute der Fehler kommt daher, dass ich Variablen mit unterschiedlichen Levels nutze. Vielleicht hat jemand eine Idee wie ich das Problem umgehen kann? Wenn ich das Modell mit den einzelnen Variablen ausführe, bekomme ich keinen Fehler. Ich habe auch keine NA´s in meinen Daten.

Danke vorab und viele Grüße,
Jessi

Re: NA Fehler bei Regression

Verfasst: So Jan 05, 2020 1:31 pm
von Hufeisen
Am Modell und bei deinen Daten kann ich nichts erkennen. Auffällig ist natürlich der Hinweis
Coefficients: (1 not defined because of singularities)
Kann es sein, dass einige deiner Daten perfekt mit einander korreliert sind? Insbesondere für die Teilgruppe des TopManagements könnte ich mir das vorstellen, weil diese nur 24 Personen umfasst. Das kannst du so überprüfen:

Code: Alles auswählen

cor(Umfrage)
cor(Umfrage[Umfrage[ , "Ebene"] == "Top Management", ])

Re: NA Fehler bei Regression

Verfasst: So Jan 05, 2020 2:26 pm
von jogo
Hallo Jessi,

bitte probier mal:

Code: Alles auswählen

summary(lm(Z_STRESS.GES ~ Ebene, data = Umfrage))
- vermutlich wird dies problemlos funktionieren.

Schau Dir dann aber mal folgende Datensätze an:

Code: Alles auswählen

subset(Umfrage, Ebene=="Top Management")
schau Dir dabei in diesen Beobachtungen die anderen Variablen an, die Du in Deinem Modell als exogene Variablen verwendest (Z_SYMPTOME, Geschlecht, F_Pos). Ich vermute, dass eine der Variablen nur ein Faktorlevel (also weniger als zwei verschiedene) aufweist - das erzeugt dann die Singularität (fehlende Varianz).

Gruß, Jörg

Re: NA Fehler bei Regression

Verfasst: So Jan 05, 2020 2:51 pm
von JessiKe
Hallo Jörg,

ja das scheint das Problem zu sein. Die Funktion klappt ohne Probleme

Code: Alles auswählen

summary(lm(Z_STRESS.GES ~ Ebene, data = Umfrage))
Ich habe bei der Variable F_Pos 146 Personen die keine Führungskraft sind. Bei der Ebene sind es die gleichen Personen.

Was kann ich jetzt machen, damit ich keine NA´s mehr angezeigt bekommen? Muss ich die Modelle nun einzeln laufen lassen?

Viele Grüße,
Jessi


jogo hat geschrieben: So Jan 05, 2020 2:26 pm Hallo Jessi,

bitte probier mal:

Code: Alles auswählen

summary(lm(Z_STRESS.GES ~ Ebene, data = Umfrage))
- vermutlich wird dies problemlos funktionieren.

Schau Dir dann aber mal folgende Datensätze an:

Code: Alles auswählen

subset(Umfrage, Ebene=="Top Management")
schau Dir dabei in diesen Beobachtungen die anderen Variablen an, die Du in Deinem Modell als exogene Variablen verwendest (Z_SYMPTOME, Geschlecht, F_Pos). Ich vermute, dass eine der Variablen nur ein Faktorlevel (also weniger als zwei verschiedene) aufweist - das erzeugt dann die Singularität (fehlende Varianz).

Gruß, Jörg

Re: NA Fehler bei Regression

Verfasst: So Jan 05, 2020 3:09 pm
von jogo
Hallo Jessi,
JessiKe hat geschrieben: So Jan 05, 2020 2:51 pm ja das scheint das Problem zu sein. Die Funktion klappt ohne Probleme

Code: Alles auswählen

summary(lm(Z_STRESS.GES ~ Ebene, data = Umfrage))
Ich habe bei der Variable F_Pos 146 Personen die keine Führungskraft sind. Bei der Ebene sind es die gleichen Personen.

Was kann ich jetzt machen, damit ich keine NA´s mehr angezeigt bekommen? Muss ich die Modelle nun einzeln laufen lassen?
Du wirst für diese Gruppe nicht das komplette Modell rechnen können, wie Du es geplant hast.
... oder Du kannst das komplette Modell rechnen, musst dann aber auf diese Beobachtungen verzichten.

Für die zweite Variante probier mal:

Code: Alles auswählen

summary( lm(Z_STRESS.GES ~ Z_SYMPTOME + Geschlecht + F_Pos + Ebene, data = Umfrage, subset= Ebene!="Top Management"))
für die erste Variante z.B.:

Code: Alles auswählen

summary( lm(Z_STRESS.GES ~ Z_SYMPTOME + Geschlecht + F_Pos, data = Umfrage))
Insbesondere bei der ersten Variante handelt es sich um eine Frage der Modellierung. Dafür ist Sachkenntnis des Problems notwendig, die ich in diesem Fall nicht habe.

Gruß, Jörg

Re: NA Fehler bei Regression

Verfasst: So Jan 05, 2020 3:16 pm
von JessiKe
Hallo Jörg,

super danke dir. Dann weis ich, wie ich es jetzt mache :)

Schönen Sonntag noch und viele Grüße,
Jessi