Vorbereitung der Variablen für die binäre logistische Regression

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
Patmae
Beiträge: 9
Registriert: Fr Feb 03, 2023 10:03 am

Vorbereitung der Variablen für die binäre logistische Regression

Beitrag von Patmae »

Ich möchte eine binäre logistische Regression für eine binäre Variable durchführen. Die Variable "belastet" hat die beiden Werte zustimmen (1) und nicht zustimmen (2). Die Formel, mit der ich arbeite, ist glm () und family = "binomial". Wenn ich meine unabhängigen Variablen in das Modell einsetze (sowohl kategorisch als auch metrisch) und dann den p-Wert mit pchisq berechne, erhalte ich 0.

Code: Alles auswählen

belastet0 <- glm(belastetB ~ 1, data = MF, family = binomial (), subset = (sex == 2))
summary(belastet0)
belastet1 <- glm(belastetB ~ age + SES_3 + eig_Kinder + Zufriedenh_BZ + LZ + Angst + guteSeiten + finanzielleEinb + persKontakt, data = MF, family = "binomial", subset = (sex == 2))
summary(belastet1)
bel_chi <- belastet0$null.deviance - belastet1$deviance
bel_chidf <- belastet1$df.null - belastet1$df.residual
bel_pchisq <- 1 - pchisq(bel_chi, bel_chidf)
Als Output erhalte ich:

Code: Alles auswählen

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-3.0832  -0.5579   0.4269   0.7315   2.1323  

Coefficients:
                           Estimate Std. Error z value Pr(>|z|)    
(Intercept)                3.933019   0.345034  11.399  < 2e-16 ***
age                       -0.017936   0.005805  -3.090  0.00200 ** 
SES_3mittel               -0.252995   0.081740  -3.095  0.00197 ** 
SES_3niedrig              -0.426660   0.131045  -3.256  0.00113 ** 
eig_Kinder                 0.195782   0.044914   4.359 1.31e-05 ***
Zufriedenh_BZ              0.074256   0.021855   3.398  0.00068 ***
LZ                        -0.452521   0.026458 -17.103  < 2e-16 ***
Angststimme zu             0.955357   0.073680  12.966  < 2e-16 ***
Angstweder noch            0.554067   0.109405   5.064 4.10e-07 ***
guteSeitenstimme zu       -1.312848   0.105667 -12.424  < 2e-16 ***
guteSeitenweder noch      -0.451338   0.144038  -3.133  0.00173 ** 
finanzielleEinbstimme zu   0.759940   0.092765   8.192 2.57e-16 ***
finanzielleEinbweder noch  0.814164   0.136931   5.946 2.75e-09 ***
persKontaktstimme zu       1.001333   0.082896  12.079  < 2e-16 ***
persKontaktweder noch      0.538896   0.124962   4.312 1.61e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 6691.7  on 5928  degrees of freedom
Residual deviance: 5366.5  on 5914  degrees of freedom
  (14325 Beobachtungen als fehlend gelöscht)
AIC: 5396.5
Und für:

Code: Alles auswählen

bel_pchisq <- 1 - pchisq(bel_chi, bel_chidf)
Ich erhalte: bel_pchisq = 0.
Ich denke, das Problem ist, dass ich meine Daten nicht bereinigt habe? Ich habe bereits eine Revision meiner metrischen Variablen durchgeführt: data$Age[is.na(data$Age)] <- mean(data$Age,na.rm=T) und kategorisch: MF$belastetB <- as.factor(MF$belastetB), leider nur mit Teilerfolg. Außerdem habe ich durch die Anwendung der metrischen Formel alle meine Variablen überschrieben, die ich aber noch in ihrer ursprünglichen Form brauche. Leider bin ich mir überhaupt nicht sicher, wie ich meine Variablen für die binäre logistische Regression vorbereiten soll, damit ich einen p-Wert erhalte, der nicht 0 ist. Denn das bedeutet, dass ich einen Fehler in meiner Formel habe oder dass meine Variablen nicht richtig vorbereitet sind. Meine kategorialen unabhängigen Variablen sind: SES (hoch, mittel, niedrig), Angst (stimme zu, stimme nicht zu, stimme nicht zu), guteSeiten (stimme zu, stimme nicht zu, stimme nicht zu), finanzielleEinb (stimme zu, stimme nicht zu, stimme nicht zu), persKontakt (stimme zu, stimme nicht zu, stimme nicht zu) Meine metrischen unabhängigen Variablen sind: Alter, eig_Kinder, Zufriedenh_BZ (Skala: 0-10), LZ (Skala: 0-10) Die Ausgabe von LZ (metrisch) sieht zum Beispiel so aus:

Code: Alles auswählen

summary(MF$LZ)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  0.000   6.000   7.000   6.794   8.000  10.000     707 

Code: Alles auswählen

table(MF$LZ)

   0    1    2    3    4    5    6    7    8    9   10 
 231  261  728 1551 1775 4024 4166 7937 9792 4085 1710 
Und für Angst (kategorisch):

Code: Alles auswählen

table(MF$Angst)
stimme nicht zu       stimme zu      weder noch 
          16918           14607            5255 
summary(MF$Angst)
   Length     Class      Mode 
    36967 character character
Welche Formeln kann ich anwenden oder wie muss ich meine Variablen ändern/anpassen, damit ich eine andere Ausgabe als 0 für den p-Wert erhalte?
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Vorbereitung der Variablen für die binäre logistische Regression

Beitrag von Athomas »

Welche Formeln kann ich anwenden oder wie muss ich meine Variablen ändern/anpassen, damit ich eine andere Ausgabe als 0 für den p-Wert erhalte?
Was stört Dich daran?
Patmae
Beiträge: 9
Registriert: Fr Feb 03, 2023 10:03 am

Re: Vorbereitung der Variablen für die binäre logistische Regression

Beitrag von Patmae »

Ich habe mehrere Modelle die genau so aufgebaut sind wie das obige für "belastet". Ich muss auch für verschiedene Subgruppen testen, wie verheiratet oder für den Berufsstatus. Alle Modelle ergeben als p=0. Ich habe gestern eine Änderung der Variablen vorgenommen, sowohl für die kategorialen wie auch die metrischen, und für ein paar Variablen hat es dann funktioniert, dass ich einen richtigen p-Wert erhalte. D.h. irgendwas stimmt mit meinen Variablen nicht, da p immer 0 ist. Ich möchte den p-Wert ja, um aufzuzeigen, dass mein Modell im Vgl. zu meinem Nullmodell signifikant oder nicht signifikant ist.
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Vorbereitung der Variablen für die binäre logistische Regression

Beitrag von Athomas »

Das bedeutet doch (nur), dass es praktisch unmöglich ist, diese Devianzverbesserung durch puren Zufall zu erzielen!
Warum benutzt Du nicht anova.glm?
Patmae
Beiträge: 9
Registriert: Fr Feb 03, 2023 10:03 am

Re: Vorbereitung der Variablen für die binäre logistische Regression

Beitrag von Patmae »

Für welchen Schritt sollte ich die anova denn dann benutzen? Um einen p-Wert zu erhalten?
Und wie sollte die Formel dann beispielhaft aussehen? Ich kann kein anova-Beispiel für Modelle finden.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Vorbereitung der Variablen für die binäre logistische Regression

Beitrag von bigben »

Hallo Patmae,

die Funktion anova() vergleich zwei genestete lineare Modelle (genauer: lm und glm) miteinander und gibt Dir einen p-Wert für die Frage, ob ein Modell besser ist als ein anderes. Wenn Du Beispieldaten für Deinen Code geliefert hättest, würdest Du wahrscheinlich ein Beispiel bekommen, dass näher an Deinem Problem ist, aber hier wäre mal ein allgemeines Beispiel, wie man anova() verwenden kann:

Code: Alles auswählen

# Erstmal Beispieldaten erstellen
bsp <- data.frame(a = rnorm(200), b = rnorm(200), y = runif(200))

modell.1 <- lm(y ~ a, data = bsp)
modell.2 <- lm(y ~ a + b, data = bsp)

# Ist die Hinzunahme des Prädiktors b eine signifikante Verbesserung, ist also
# modell.1 schlechter als modell.2 ? Das berechnet man mit der Funktion anova()

anova(modell.1, modell.2)
#> Analysis of Variance Table
#> 
#> Model 1: y ~ a
#> Model 2: y ~ a + b
#>   Res.Df    RSS Df Sum of Sq      F Pr(>F)
#> 1    198 17.495                           
#> 2    197 17.412  1  0.083383 0.9434 0.3326
Im Ergebnis siehst Du, dass modell.2 zwar eine leicht geringere RSS hat aber eben auch einen Freiheitsgrad mehr verbraucht, weshalb der F-Test keine Überlegenheit des zweiten Modells beweisen kann (bei diesem Durchlauf mit p = 0,33, andere Zufallszahlen werden zu anderen p-Werten führen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Patmae
Beiträge: 9
Registriert: Fr Feb 03, 2023 10:03 am

Re: Vorbereitung der Variablen für die binäre logistische Regression

Beitrag von Patmae »

Lieber Bernhard,

vielen Dank für deine Antwort.
Ich habe meine Modelle wie folgt gebildet:

Code: Alles auswählen

belastet0 <- glm(belastetB ~ 1, data = MF,family = "binomial", subset = (sex == 2))
summary(belastet0)
belastet1 <- glm(belastetB ~ age + SES_3 + eig_Kinder + Zufriedenh_BZ + LZ + Angst + guteSeiten + finanzielleEinb + persKontakt, data = MF, family = "binomial", subset = (sex == 2))
summary(belastet1)
Bei Eingabe in die anova-Formel:

Code: Alles auswählen

anova(belastet0, belastet1)
erhalte ich leider folgende Fehlermeldung:

Code: Alles auswählen

> anova(belastet0, belastet1)
Error in anova.glmlist(c(list(object), dotargs), dispersion = dispersion,  : 
  Modelle sind nicht alle mit der gleichen Datensatzgröße angepasst worden
Weißt du wo mein Fehler liegen könnte?

Ich danke dir schonmal für das Aufzeigen dieser weiteren Möglichkeit!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Vorbereitung der Variablen für die binäre logistische Regression

Beitrag von bigben »

Das wird an missing data liegen. Glm verwendet nur die Zeilen mit vollständigen Daten und deshalb hast Du mehr Fälle wenn Du nur den Intercept verwendest als wenn eine Deiner Prädiktorvariablen auch nir ein NA enthält. Du kannst mit na.omit() Zeilen mit NA löschen und hast dann vergleichbaren Datensätze. Oder halt Imputation, aber das ist ein anderes Thema.

Die weitere Möglichkeit hat Athomas vorgeschlagen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Patmae
Beiträge: 9
Registriert: Fr Feb 03, 2023 10:03 am

Re: Vorbereitung der Variablen für die binäre logistische Regression

Beitrag von Patmae »

Lieber Bernhard, vielen lieben Dank!
Antworten