Seite 1 von 1

Macht logit hier Sinn?

Verfasst: Mi Nov 07, 2018 2:34 pm
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

Re: Macht logit hier Sinn?

Verfasst: Mi Nov 07, 2018 3:25 pm
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))

Re: Macht logit hier Sinn?

Verfasst: Fr Nov 09, 2018 4:31 pm
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")

Re: Macht logit hier Sinn?

Verfasst: Fr Nov 09, 2018 4:32 pm
von clara_in_r
Hier noch plot 1 und 4.
Clara

Re: Macht logit hier Sinn?

Verfasst: Fr Nov 09, 2018 6:16 pm
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.

Re: Macht logit hier Sinn?

Verfasst: Mo Nov 12, 2018 3:29 pm
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.

Re: Macht logit hier Sinn?

Verfasst: Mo Nov 12, 2018 3:49 pm
von Athomas
Guck Dir doch mal die was-auch-immer-Wahrscheinlichkeit in Abhängigkeit von price-level-Klassen (?cut) an...

Re: Macht logit hier Sinn?

Verfasst: Mo Nov 12, 2018 10:09 pm
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?