Macht logit hier Sinn?

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
clara_in_r
Beiträge: 19
Registriert: Mi Jun 13, 2018 9:42 am

Macht logit hier Sinn?

Beitrag von clara_in_r »

Hallo Forum,
ich habe gerade mit einem kleinen Problem mit meinen Daten zu kämpfen und eventuell könnt Ihr mir ja einen Tipp geben. Ich habe logit-Regressionen gerechnet (siehe unten). Meine abhängige Variable y (1 oder 0) soll durch a und b erklärt werden. Die Ergebnisse zeigen signifikante unabhängige Variablen, aber sehr niedrige R^2 (McFadden's Pseudo R^2). Wie kann ich diese Ergebnisse dann interpretieren? Wie könnte ich hier eventuell weiterarbeiten?
Danke schon einmal an Euch,
Clara

Code: Alles auswählen

logit = glm(y ~ a + b, family = binomial (link ="logit")) 
summary(logit)

Call:
glm(formula = y ~ a + b, family = binomial(link = "logit"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.4607  -0.7267  -0.6261  -0.4959   2.2094  

Coefficients:
                    Estimate Std. Error z value Pr(>|z|)    
(Intercept)       -2.060e+01  1.806e+00 -11.405  < 2e-16 ***
a                     1.586e-02  1.507e-03  10.525  < 2e-16 ***
b                     3.900e-03  8.633e-04   4.518 6.23e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 5148  on 4940  degrees of freedom
Residual deviance: 5008  on 4938  degrees of freedom
AIC: 5014

Number of Fisher Scoring iterations: 4
 
#R squared
ll.null <- logit$null.deviance/-2 
ll.proposed <- logit$deviance/-2
## McFadden's Pseudo R^2
(ll.null - ll.proposed) / ll.null
[1] 0.02719473
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Macht logit hier Sinn?

Beitrag von bigben »

Hallo Clara,

mit fast 5000 Beobachtungen wird jeder noch so kleine Einfluss sehr rasch signifikant. Jetzt kommt es ein wenig auf Deine Fragestellung an, ob so ein winziger Effekt schon interessant ist, oder nicht.
Wie könnte ich hier eventuell weiterarbeiten
Du könntest suchen, ob es vielleicht Zusammenhänge zwischen a und b einerseits und y andererseits gibt, die schlecht in ein logistisches Modell passen. Üblicherweise beginnt man für so etwas mit grafischen Darstellungen, um eine Intuition dafür zu bekommen, wie der Zusammenhang zwischen den Größen ist. Dazu sollte auch eine Betrachtung der Residuen aus dem logistischen Modell gehören, vielleicht wird daran deutlich, bei welchen WErten das logistische Modell funktioniert, und bei welchen nicht.
Banale Fragen wie etwa die, ob sich genug ja- und genug nein-Fälle finden hast Du hoffentlich vorher geklärt?

LG,
Bernhard


PS: Hier ein praktisches Beispiel mit sinnfreien Musterdaten, die in der logistischen Regression kein brauchbares Ergebnis erbringen, bei denen aber die Grafik einen eindeutigen Zusammenhang zwische a, b und y zeigt. Dazu habe ich alle Punkte a und b in grau gezeichnet und darüber alle Punkte rot, bei denen y=1 ist.

Code: Alles auswählen

a <- rnorm(4900);b <- a*rnorm(4900);y <- (a*b)^2.3+b<.5

plot(a,b, col="grey", pch=".")
points(a[y], b[y], pch=".", col="red")

summary(glm(y~a+b))
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
clara_in_r
Beiträge: 19
Registriert: Mi Jun 13, 2018 9:42 am

Re: Macht logit hier Sinn?

Beitrag von clara_in_r »

Hallo Bernhard,
vielen Dank für die Antwort. Ich habe ein bisschen weiter daran gearbeitet und nun nur einmal eine erklärende Variable eingefügt, nämlich price_level.

Anbei sind vier plots angehängt (in diesem post erstmal plot 2 und plot 3). Diese zeigen teilweise eingefärbte Zusammenhänge. So ganz schlau werde ich aber nicht draus. Die These ist, dass durch ein höheres price_level die Wahrscheinlichkeit (y) steigt. Aber kann ich das hier jetzt rauslesen? Deshalb war ich einfach eher auf die Regressionsergebnisse aus, weil ich diese plots nicht gar so klar fand. Warum plot 3 so ein komisches rotes Band produziert, weiß ich auch nicht genau.

Code: Alles auswählen

> summary(logit_price_level)

Call:
glm(formula = y ~ price_level, family = binomial(link = "logit"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.4018  -0.7275  -0.6386  -0.5122   2.1101  

Coefficients:
              Estimate Std. Error z value Pr(>|z|)    
(Intercept) -20.700309   1.802964  -11.48   <2e-16 ***
price_level   0.016210   0.001503   10.79   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 5148.0  on 4940  degrees of freedom
Residual deviance: 5028.4  on 4939  degrees of freedom
AIC: 5032.4

Number of Fisher Scoring iterations: 4

> intercept = coef(summary(logit_price_level))[1,1]
> intercept
[1] -20.70031
> variable = coef(summary(logit_price_level))[2,1]
> variable
[1] 0.01620997
> for (i in 1:reps)   {  
+   
+   probability  = 1/(1+exp(-1*(variable*i+intercept)))
+   
+   proba[i,] = probability 
+   
+ }
> 
> plot(proba) # plot 4


# plot_3
> glm.out = glm(y ~ price_level, family = binomial (link ="logit"))
> plot(y ~ price_level)
> lines(price_level, glm.out$fitted, type="l", col="red")
Dateianhänge
y~price_level (2).jpeg
y~price_level (3).jpeg
clara_in_r
Beiträge: 19
Registriert: Mi Jun 13, 2018 9:42 am

Re: Macht logit hier Sinn?

Beitrag von clara_in_r »

Hier noch plot 1 und 4.
Clara
Dateianhänge
probabilities_plot_4.jpeg
y~price_level (1).jpeg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Macht logit hier Sinn?

Beitrag von bigben »

Pricelevel <1100 und >1250 gehen mit niedrigen probs einher, das sieht man trotz des heftigen overplottings. Eine monoton abfallende oder ansteigende S-Kurve kann das nicht abbilden. Ein logistisches oder anderweitig monotones Modell passt da ganz offensichtlich nicht.

mach mal einen Plot, in dem man unterscheiden kann, wo viele und wo wenige Punkte sind und nimm mal einen quadratischen Term mit auf

Code: Alles auswählen

summary(glm(formula = y ~ price_level + I(price_level^2), family = binomial(link = "logit")))
Mal sehen, ob dessen Koeffizient negativ und die Varianzaufklärung besser wird.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
clara_in_r
Beiträge: 19
Registriert: Mi Jun 13, 2018 9:42 am

Re: Macht logit hier Sinn?

Beitrag von clara_in_r »

Also der Term der quadrierten price-levels ist zwar signifikant, aber auch sehr klein und das Rsquare wird auch nicht viel besser. Ich kenne dieses Prozedere vom Thema Kuznets-Kurven. Das ist eine interessante Idee.

Code: Alles auswählen

> logit_price_level_square = glm(y ~ price_level + I(price_level^2), family = binomial (link ="logit"))
> summary(logit_price_level_square)

Call:
glm(formula = y ~ price_level + I(price_level^2), family = binomial(link = "logit"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9166  -0.7587  -0.6427  -0.4290   2.3392  

Coefficients:
                   Estimate Std. Error z value Pr(>|z|)    
(Intercept)      -2.794e+02  5.330e+01  -5.242 1.59e-07 ***
price_level       4.448e-01  8.829e-02   5.038 4.71e-07 ***
I(price_level^2) -1.774e-04  3.656e-05  -4.853 1.22e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 5148.0  on 4940  degrees of freedom
Residual deviance: 5002.3  on 4938  degrees of freedom
AIC: 5008.3

Number of Fisher Scoring iterations: 4

> 
> # R-squared
> ll.null <- logit_price_level_square$null.deviance/-2
> ll.proposed <- logit_price_level_square$deviance/-2
> ## McFadden's Pseudo R^2 = [ LL(Null) - LL(Proposed) ] / LL(Null)
> (ll.null - ll.proposed) / ll.null
[1] 0.02830392
Zusätzlich noch Histogramme für y=0 und y=1.
Dateianhänge
y_0_price_level.jpeg
y_1_price_level.jpeg
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Macht logit hier Sinn?

Beitrag von Athomas »

Guck Dir doch mal die was-auch-immer-Wahrscheinlichkeit in Abhängigkeit von price-level-Klassen (?cut) an...
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Macht logit hier Sinn?

Beitrag von bigben »

Mit Blick auf die Histogramme jetzt mal ein ehrliches Wort: Welche Varianzaufklärung willst Du denn erreichen? Wenn Du ein Entscheidungsalgorithmus wärest, welches y würdest Du denn bei einem Preislevel von 1200 vorhersagen?
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten