fehlender Koeffizient bei multipler OLS-Regression?

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
data_sky
Beiträge: 13
Registriert: Mo Sep 23, 2019 3:01 pm

fehlender Koeffizient bei multipler OLS-Regression?

Beitrag von data_sky »

Hallo liebes Forum,

ich komm gleich zur Sache:
erklärt werden soll eine Variable (h1bvis.supp), die die Werte 0, 0.25, 0.5, 0.75, 1 aufweist. Als Prädiktoren gibt es zum einen eine Faktorvariable "group" (mit 4 Gruppen, codiert mit 0,1,2,3), eine Geschlechtsvariable "female" (0= männlich, 1= weiblich), eine Altersvariable "age", sowie zwei kontinuierliche Variablen "expl.prejud" & "impl.prejud" ( jeweils im Wertebereichl [0,1] ).
Die Variablen sind Teil des df "immigr".

Wenn ich nun eine multiple Regression rechne, bekomm ich folgendes Output:

Code: Alles auswählen

model2_multivar <- lm(h1bvis.supp ~ age + female + group, data = immigr)
> summary(model2_multivar)

Call:
lm(formula = h1bvis.supp ~ age + female + group, data = immigr)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.47610 -0.29411 -0.04017  0.18504  0.78581 

Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)       0.4333751  0.0481809   8.995  < 2e-16 ***
age              -0.0024797  0.0006035  -4.109 4.26e-05 ***
female           -0.0753644  0.0187888  -4.011 6.45e-05 ***
groupwhitecollar  0.1312694  0.0554447   2.368   0.0181 *  
groupother        0.0759781  0.0414958   1.831   0.0674 .  
groupunemployed   0.0898415  0.0413621   2.172   0.0301 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2967 on 1116 degrees of freedom
  (11 observations deleted due to missingness)
Multiple R-squared:  0.02889,	Adjusted R-squared:  0.02454 
F-statistic: 6.641 on 5 and 1116 DF,  p-value: 4.189e-06
Jetzt ist mir aufgefallen, dass statt der 4 Gruppen hier nur 3 (es fehlt "grouptech" als Koeffizienten ausgegeben werden, die Anzahl der Koeffizienten aber trotzdem stimmt (4 Gruppen, 1x Geschlecht, 1xAlter)

Code: Alles auswählen

length(model2_multivar$coefficients)
[1] 6
Was mach ich falsch?? :shock:

info noch zu den datentypen:

Code: Alles auswählen

str(immigr)
'data.frame':	1133 obs. of  10 variables:
 $ h1bvis.supp    : num  1 0.75 0.25 0 0 0.5 0 0.5 1 0 ...
 $ indimm.supp    : num  1 0.75 0.25 0 0.25 0.25 0 0 0 0 ...
 $ employed       : int  1 0 0 0 0 1 0 0 0 0 ...
 $ female         : int  1 0 1 0 1 1 1 1 0 0 ...
 $ age            : int  31 64 69 49 51 61 64 47 67 43 ...
 $ expl.prejud    : num  0.3 0.35 0.25 0.85 NA ...
 $ impl.prejud    : num  0.337 0.57 0.597 0.74 NA ...
 $ nontech.whitcol: int  1 0 0 0 0 0 0 0 0 0 ...
 $ tech.whitcol   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ group          : Factor w/ 4 levels "tech","whitecollar",..: 2 4 4 4 4 3 4 4 4 4 ...
Nachsatz: ich habe, um eine Korrelationsmatrix berechnen zu können, den Datentyp von 4 Variablen geändert: von h1bvis.supp, indimm.supp, expl.prejud, impl.prejud. Hat das vielleicht damit was zu tun?
Ursprünglich hat der df so ausgesehen:

Code: Alles auswählen

str(immigr)
'data.frame':	1133 obs. of  10 variables:
 $ h1bvis.supp    : Factor w/ 5 levels "0","0.25","0.5",..: 5 4 2 1 1 3 1 3 5 1 ...
 $ indimm.supp    : Factor w/ 5 levels "0","0.25","0.5",..: 5 4 2 1 2 2 1 1 1 1 ...
 $ employed       : int  1 0 0 0 0 1 0 0 0 0 ...
 $ female         : int  1 0 1 0 1 1 1 1 0 0 ...
 $ age            : int  31 64 69 49 51 61 64 47 67 43 ...
 $ expl.prejud    : Factor w/ 21 levels "0","0.050000001",..: 7 8 6 18 NA 6 NA 10 12 NA ...
 $ impl.prejud    : Factor w/ 1009 levels "0.030460104",..: 84 457 527 856 NA 197 NA 82 25 NA ...
 $ nontech.whitcol: int  1 0 0 0 0 0 0 0 0 0 ...
 $ tech.whitcol   : int  0 0 0 0 0 0 0 0 0 0 ...
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: fehlender Koeffizient bei multipler OLS-Regression?

Beitrag von Athomas »

Damit die Darstellung eindeutig wird, setzt R (und andere Pakete) eine Referenzklasse pro Faktor auf 0!
data_sky
Beiträge: 13
Registriert: Mo Sep 23, 2019 3:01 pm

Re: fehlender Koeffizient bei multipler OLS-Regression?

Beitrag von data_sky »

Ah. Vielen Dank!

Soll heißen, Output passt eig eh so. Versteh ich das richtig?
Welche Klasse wird denn immer auf 0 gesetzt? Anscheinend die 1.?

Nur... wie bekomm ich nun den Koeffizienten für besagtes Level? Soll ich noch ein Modell rechnen, mit vertauschen levels? Oder ist dann in dem Fall die Konstante der Koeffizient? Sorry, steh grad geistig an^^
Zuletzt geändert von data_sky am Fr Nov 22, 2019 1:47 pm, insgesamt 1-mal geändert.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: fehlender Koeffizient bei multipler OLS-Regression?

Beitrag von bigben »

Athomas hat geschrieben: Fr Nov 22, 2019 1:21 pmDamit die Darstellung eindeutig wird, setzt R (und andere Pakete) eine Referenzklasse pro Faktor auf 0!
Dementsprechend "fehlt" auch neben "grouptech" auch "male" für das Geschlecht. Ja, die Konstante schluckt die Koeffizienten der fehlenden Level. Wenn Dich das sehr stören sollte, kannst Du ja mal versuchen ein Modell ohne Intercept zu rechnen:

Code: Alles auswählen

summary(lm(formula = h1bvis.supp ~ age + female + group - 1, data = immigr))
Das geht aber wahrscheinlich am Kern Deines Problems vorbei. 2,9% R^2 ist nicht viel und angesichts einer großen Fallzahl kann man sich sicherlich komplexere Modelle vorstellen, die besser zur Situation passen als das ganz simple lineare Modell.

Was im echten Leben verändert sich denn schon linear zum Alter? Nicht mal die Zahl der Kerzen auf dem Geburtstagskuchen. Und wenn das Modell eigentlich nur vier diskrete Werte vorhersagen soll, wäre vielleicht eine ordinale logistische Regression zu erwägen (Suchbegriff "R polr"). Es gibt viele Möglichkeiten und in die Auswahl sollte möglichst viel Wissen über Dein Kernproblem eingehen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: fehlender Koeffizient bei multipler OLS-Regression?

Beitrag von Athomas »

Nur... wie bekomm ich nun den Koeffizienten für besagtes Level? Oder ist dann in dem Fall die Konstante der Koeffizient?
Eher 0, wie ich oben geschrieben habe.
Welche Klasse wird denn immer auf 0 gesetzt?
Weiß ich nicht, ich dachte, die erste in der lexikographischen Ordnung - was aber offenbar nicht der Fall ist!
Ist aber auch egal, Du kannst - wenn es Dir aus irgendeinem Grund nicht passt - einen geordneten Faktor basteln, davon nimmt er dann die 1. Stufe.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: fehlender Koeffizient bei multipler OLS-Regression?

Beitrag von bigben »

Athomas hat geschrieben: Fr Nov 22, 2019 1:51 pmIst aber auch egal, Du kannst - wenn es Dir aus irgendeinem Grund nicht passt - einen geordneten Faktor basteln
Ist nicht nötig. Man kann beim ungeordneten Factor den Referenzlevel mit relevel() festlegen:

Code: Alles auswählen

testfactor <- factor(c("A", "A", "B", "A", "C"))
testwerte <- c(1, 2, 3, 4, 5) 

summary(lm(testwerte ~ testfactor)) # jetzt ist "A" Referenz

testfactor <- relevel(testfactor, ref="B") # jetzt wird "B" Referenz
summary(lm(testwerte ~ testfactor))

str(testfactor) # weiterhin nicht "ordered"
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
data_sky
Beiträge: 13
Registriert: Mo Sep 23, 2019 3:01 pm

Re: fehlender Koeffizient bei multipler OLS-Regression?

Beitrag von data_sky »

Ja stimmt. Ein lineares Modell scheint hier nicht das Gelbe vom Ei zu sein^^ Danke euch (beiden) für die Hinweise und Tipps ;)
Antworten