NA Fehler bei Regression

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
JessiKe
Beiträge: 4
Registriert: Fr Nov 15, 2019 5:01 pm

NA Fehler bei Regression

Beitrag 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
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: NA Fehler bei Regression

Beitrag 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", ])
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: NA Fehler bei Regression

Beitrag 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
JessiKe
Beiträge: 4
Registriert: Fr Nov 15, 2019 5:01 pm

Re: NA Fehler bei Regression

Beitrag 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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: NA Fehler bei Regression

Beitrag 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
JessiKe
Beiträge: 4
Registriert: Fr Nov 15, 2019 5:01 pm

Re: NA Fehler bei Regression

Beitrag 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
Antworten