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?