Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Logistic Regression Jonathan Harrington Befehle: logistic.txt.

Kopien: 1
4. Anwendung der logistic Regression auf die Berechung einer perzeptiven Grenzen zwischen Kategorien Experiment. Anhand der Sprachsynthese wurde ein F2-

Ähnliche Präsentationen


Präsentation zum Thema: "Logistic Regression Jonathan Harrington Befehle: logistic.txt."—  Präsentation transkript:

1 Logistic Regression Jonathan Harrington Befehle: logistic.txt

2 1. Logistic Regression: allgemeine Einführung Dalgaard, P. (2002) Introductory Statistics with R. Insbesondere Kap. 11 D. Cook, P. Dixon, W. M. Duckworth, M.S. Kaiser, K. Koehler, W. Q. Meeker and W. R. Stephenson. Binary Response and Logistic Regression Analysis. 6/Logistic%20Regression%20Analysis.doc Literatur Baayen, R.H. Analyzing Linguistic Data: A practical introduction to Statistics. S Johnson, Keith (in press). Quantitative Methods in Linguistics. Blackwell. Kapitel 5. Verzani, J. (2005). Using R for Introductory Statistics (Ebook ueber die LMU UB). Kapitel 12

3 1. Logistic Regression: allgemeine Einführung Mit logistic Regression wird eine Regressionslinie an Proportionen angepasst. Aus verschiedenen Gründen kann jedoch die lineare (least-squares) Regression nicht auf Proportionen angewandt werden. Vor allem liegen Proportionen zwischen 0 und 1 während lineare Regression keine solchen Grenzen kennt (und daher könnte ein lineares Regressionsmodell Proportionen unter 0 oder über 1 vorhersagen). Außerdem wird in der linearen Regression eine konstante Varianz angenommen; jedoch kann bewiesen werden, dass je höher der Proportionsdurchschnitt, umso größer die Varianz.

4 Diese (und andere) Probleme können überwunden werden: 1. wenn log-odds statt Proportionen modelliert werden 2. Durch Einsetzung von 'maximum likelihood' anstatt 'least squares'. 1. Logistic Regression: allgemeine Einführung y = mx + b logodds(y) = mx + b Least-squares Regression Logistic Regression Es wird nicht angenommen, dass die Werte Stichproben aus einer Normalverteilung sind. Ein Vorteil von logistic Regression:

5 Einige Daten high low In 1950 produzierten 30 Sprecher /lo:st/ und 5 /l ɔ st/. jahr = as.numeric(rownames(lost)) jahr = jahr lost

6 Log-odds pq=1-pOdds = p/qLog-Odds = log(p/q) log(4) = bedeutet 4:1 (wie im Pferderennen). Die Wahrscheinlichkeit vom Erfolg (p) ist 4 Mal so groß wie Scheitern (q) p: Proportion 'Erfolg'. lo:st l ɔ st 328 n 40 p 0.8 (prop. lOst)(prop. lo:st)

7 Log-odds also log (p/q) als Funktion von p Log-odds haben Werte zwischen ± Log-odds

8 2. Anwendung der logistic Regression in R: glm() Das Ziel: nach der Anwendung von logistic Regression geben wir einen beliebigen Jahrgang ein, und das Modell soll uns die Proportion von /lo:st/ vorhersagen. zB Eingabe 1962, Proportion (lo:st) = ? Jahr ist daher in diesem Fall die unabhängige Variable, Proportion von /lo:st/ die abhängige Variable. Mit logistic Regression ist die abhängige Variable immer ein kategorialer Wert von 2 Möglichkeiten: ja oder nein, rot oder grün, 0 oder 1, weiblich oder männlich, wach oder eingeschlafen, /lo:st/ oder /l ɔ st/, Erfolg oder Scheitern, usw.

9 g = glm(lost ~ jahr, binomial) Ergebnis: ein Log- Odd pro Jahr unabhängige Variable (der Jahrgang) bedeutet: logistic Regression ('binomial' weil wie in der binomialen Verteilung wir mit 2 Werten (ja/nein, Erfolg/Scheitern zu tun haben). wird modelliert durch Abhängige Variable Eine 2-spaltige Matrix: Anzahl von 'ja' und 'nein' (hier /lo:st/ und /lOst/) lost high low

10 Da die Ausgabe der Regression in log-odds ist, müssen wir die Proportionen ebenfalls umwandeln, wenn wir die Regressionslinie sehen wollen. Die vorhergesagten Werte überlagern text(jahr, predict(g), "x", col=3) Eine Abbildung der Daten in diesem Raum: # Proportion von /lo:st/ berechnen p = lost[,1]/apply(lost, 1, sum) # log-odds lodd = log(p/(1-p)) plot(jahr, lodd, type="b") # Regressionslinie überlagern abline(g, col=2) 3. Abbildung der Regressionslinie

11 neuerwert = data.frame(jahr = 12) ergebnis = predict(g, neuerwert, se.fit=T) ergebnis$fit Vorhersage: Wert für 1962 abline(h=ergebnis$fit, lty=2, col="blue")

12 Wir können durch die Transformation (2) die Regressionslinie auch in einem Raum von Jahr x Proportionen abbilden. Von Proportionen in log-odds Von log-odds zurück in Proportionen L = log(p/(1-p)) p = exp(L)/(1+exp(L)) [1] [1] 0.8 Abbildung der Regression (1) (2) p = 0.8

13 curve(exp(m*x + k)/(1+ exp(m*x+k)), xlim=c(0, 60), add=T, col=2) # Regression überlagern # Proportionen von /lo:st/ berechnen p = lost[,1]/apply(lost, 1, sum) plot(jahr,p) # Abbildung Jahr x Proportionen Die Regression coef(g) (Intercept) jahr k = coef(g)[1]m = coef(g)[2] Abbildung: Jahr x Proportionen

14 und die vorhergesagten Werte liegen wieder auf der Linie: vorher = predict(g) text(jahr, exp(vorher)/(1+exp(vorher)), "x", col=3) Abbildung Jahr x Proportionen

15 4. Anwendung der logistic Regression auf die Berechung einer perzeptiven Grenzen zwischen Kategorien Experiment. Anhand der Sprachsynthese wurde ein F2- Kontinuum in 11 Schritten synthetisiert. 5 Vpn. (L1- Englisch) mussten zu jedem Stimulus mit "I" oder "U" antworten. Bei welchem F2-Wert liegt die Grenze zwischen den Vokalen? Die Anzahle der Bewertungen ist hier: u i Bei F2 = 1437 Hz gab es 4 Urteil für "U", ein Urteil für "I" ui

16 Ein Vektor von Proportionen p = ui[,1]/apply(ui, 1, sum) p Bei 1437 Hz waren 80% der Urteile "U" (und daher 20% "I") Eine Abbildung von F2 als Funktion dieser Proportionen f2werte = as.numeric(rownames(ui)) plot(f2werte, p, ylab="Proportion /u/ Urteile", xlab="F2 (Hz)")

17 Eine logistische Regression an diese Werte anpassen logui = glm(ui ~ f2werte, family=binomial) Die Urteile aus den F2-Werten vorhersagen Mit der Methode auf S die logistische Regressionskurve überlagern m = coef(logui)[2] k = coef(logui)[1] curve(exp(m*x + k)/(1+ exp(m*x+k)), xlim=c(1200, 2400), add=T, col=2) Die Koeffiziente Die logistische Regressionskurve

18 Die 50% Grenze (Umkipppunkt) = zu welchem F2-Wert, ist ein Urteil für "I" genauso wahrscheinlich wie ein Urteil für "U"? Es kann bewiesen werden, dass dies mit -k/min dieser Formel gegeben wird (in diesem Beispiel ist y die Proportion, p, und x ist F2werte) -k/m abline(v=-k/m, lty=2, col="blue")

19

20 Lineare Regression: R 2 oder adjusted R 2 und ein F-test Logistic Regression: G 2 und ein 2 -test. G 2 = Null deviance – residual deviance Für ein signifikantes Ergebnis wollen wir daher, dass Null deviance hoch und Residual deviance klein ist. wenn dieser Wert 0 wäre, dann wären alle Proportionen in allen Jahren gleich (und die Regressionslinie wäre horizontal) je höher dieser Wert, umso unwahrscheinlicher ist es, dass die Werte überhaupt durch die Regression modelliert werden können. 5. Signifikanz-Test Was ist die Wahrscheinlichkeit, dass die Proportion von /lo:st-l ɔ st/ durch den Jahrgang vorhergesagt werden kann?

21 [1] G 2 = Null deviance - residual deviance summary(g) Null deviance: on 5 degrees of freedom Residual deviance: on 4 degrees of freedom … Der Test mit anova() ist ob G 2 signifikant von 0 abweicht: anova(g, test="Chisq") Df Deviance Resid. Df Resid. Dev P(>|Chi|) NULL jahr e-15 Die Proportionen folgen einem Trend ( 2 (1)=61.2, p < 0.001) g = glm(lost ~ jahr, binomial)

22 6. Zwei unabhängige Variablen. Hier sind genau dieselben Daten aber zusätzlich nach männlich-weiblich aufgeteilt. femalelost nn yn ny yy lost high low In 1971 waren 26 Tokens [lost] und 15 [lo:st] von diesen 26 waren 10 von Männern und 16 von Frauen erzeugt. 8M, 7F (a) Gibt es einen Trend? Also weniger [lo:st] in späteren Jahren? (b) Ist die Proportion [lost]/[lo:st] in M und F unterschiedlich verteilt?

23 femalelost nn yn ny yy Dies ist ein Problem der mehrfachen Logistic Regression: logodds (lo:st) = b 0 + b 1 year + b 2 Geschlecht (also in diesem Fall eine Linie im 3D-Raum) Geschlecht Year logodds(lo:st) Und eine gerade Linie in einem 3D-Raum (b 0 ist das Intercept, b 1 und b 2 die Neigungen)

24 pfad = "das Verzeichnis wo ich lost2.txt gespeichert habe" lost2 = as.matrix(read.table(paste(pfad, "lost2.txt", sep="/"))) high low M W } } high = Spalte 1 = /lo:st/ low = Spalte 2 = /lOst/ Daten-Vorbereitung J = c(jahr, jahr) G = c(rep(0, 6), rep(1, 6)) J G [1] [1]

25 Zuerst eine Abbildung… p = lost2[,1]/apply(lost2, 1, sum) interaction.plot(J, G, p) J mean of p G m f Nimmt die Proportion von /lo:st/ in späteren Jahren ab? (Die Unterschiede zwischen m und f ignorieren). Ja Nein Vielleicht Unterscheiden sich m und f in der Proportion von /lo:st/? (Die Unterschiede in den Jahrgängen ignorieren). Ja Nein Vielleicht

26 Modell berechnen… mehrg = glm(lost2 ~ J + G, binomial) g2 = glm(lost2 ~ J, binomial) anova(g2, test="Chisq") Analysis of Deviance Table Df Deviance Resid. Df Resid. Dev P(>|Chi|) NULL year e-15 Wenn wir übrigens G weglassen, dann müssten wir trotz der anderen Aufteilung der Daten das gleiche Ergebnis wir vorhin bekommen:

27 Coefficients: (Intercept) J Gm Degrees of Freedom: 11 Total (i.e. Null); 9 Residual Null Deviance: Residual Deviance: AIC: logodds(lo:st) = J G mehrg = glm(lost2 ~ J + G, binomial) anova(mehrg, test="Chisq") Df Deviance Resid.Df Resid. Dev P(>|Chi|) NULL J e-15 G e-04 M und F unterscheiden sich in der Proportion von lo:st/lOst, 2 (1) = 12.82, p < Die Proportion von 'lo:st' nimmt in späteren Jahren ab, 2 (1) = 61.12, p < mehrg

28 Mit 2 oder mehr Variablen soll auch geprüft werden, ob sie miteinander interagieren. Eine Interaktion zwischen den unabhängigen Variablen – in diesem Fall Geschlecht und Jahrgang – liegt vor, wenn sie eine unterschiedliche Wirkung auf die abhängige Variable ausüben wie in 1 und 2, aber nicht in 3 und 4 7. Die Interaktion zwischen 2 Variablen prop(lo:st) prop(lo:st) 1234 m f

29 Wenn eine Interaktion vorliegt, dann können signifikante Ergebnisse in einer der unabhängigen Variablen nicht uneingeschränkt akzeptiert werden. zB wenn eine Interaktion vorkommt, gibt es vielleicht eine Wirkung von Jahrgang auf die Proportion von /lo:st/ nur in Männern aber nicht in Frauen usw. Die Interaktion zwischen 2 Variablen dies scheint aber hier nicht der Fall zu sein.

30 Die Interaktion zwischen 2 unabhängigen Variablen, A und B, kann in R mit A:B geprüft werden. Daher in diesem Fall g = glm(lost2 ~ J + G + J:G, binomial) Eine Abkürzung dafür (und mit genau demselben Ergebnis) g = glm(lost2 ~ J * G, binomial) Die Interaktion zwischen 2 Variablen anova(g, test="Chisq") Df Deviance Resid. Df Resid. Dev P(>|Chi|) NULL J e-15 G e-04 J:G d.h. die Interaktion ist nicht signifikant und J:G kann aus dem Regressionsmodell weggelassen werden.

31 Start: AIC= lost2 ~ J * G Df Deviance AIC - J:G Df Deviance AIC G J Wir bleiben also bei Call: glm(formula = lost2 ~ J + G, family = binomial) Residual Deviance: AIC: library(MASS) stepAIC(g) Dies wird auch durch stepAIC() bestätigt: AIC wird kleiner wenn wir J:G weglassen

32 Weitere Folien zum Durchlesen...

33 Aus dem vorigen Beispiel wird auch klar, dass ähnlich wie 2 Logistic Regression angewandt werden kann, auch wenn die Gruppe nur aus 2 Ebenen besteht. Gibt es einen signifikanten Unterschied zwischen M und F? gmf = glm(lost2 ~ G, "binomial") anova(gmf, test="Chisq") Df Deviance Resid. Df Resid. Dev P(>|Chi|) NULL G M und F unterscheiden sich in der Proportion von lo:st/lOst ( 2 (1) = 9.5, p < 0.002). 8. Logistic Regression und zwei Ebenen

34 high low m = apply(lost2[1:6,], 2, sum) f = apply(lost2[7:12,], 2, sum) mf = rbind(m, f) rownames(mf) = c(0, 1) colnames(mf) = c("high", "low") mf Wir bekommen dasselbe Ergebnis wenn Logistic Regression auf die entsprechende Tabelle angewandt wird: lost2 l.mf = c(0,1) gmf2 = glm(mf ~ l.mf, "binomial") anova(gmf2, test="Chisq") high low = (kodiert nur nach M und F)

35 und man bekommt dann fast das gleiche Ergebnis mit einem 2 -Test, der direkt auf die Tabelle angewandt wird: chisq.test(mf) Pearson's Chi-squared test with Yates' continuity correction data: mf X-squared = , df = 1, p-value = Ein 2-Test kann jedoch nicht verwendet werden, bei einer Gruppenanzahl von > 2 …

36 Haben (a) Alter und (b) Geschlecht einen Einfluss auf die Proportion von /lo:st/? Hier sind dieselben Daten aufgeteilt in 2 Altersgruppen sowie M/F Gruppe 1 = Vokal = high/low Gruppe 2 = Geschl = M/F (=0/1) Gruppe 3 = Alter = alt/jung 3 Gruppen jeweils 2 Ebenen high low alt alt jung jung lost3

37 Zuerst eine Abbildung high low alt alt jung jung # Alter kodieren A = c(0, 0, 1, 1) # Geschlecht kodieren G = c(0, 1, 0, 1) prop = lost3[,1]/apply(lost3, 1, sum) interaction.plot(A, G, prop)

38 im Geschlecht? janein Signifikanter Einfluss auf lo:st/lOst? im Alter? vielleicht janeinvielleicht Interaktion zwischen A und G? janeinvielleicht A mean of prop 0 1 G 0 1

39 g = glm(lost3 ~ A * G, binomial) anova(g, test="Chisq") Df Deviance Resid. Df Resid. Dev P(>|Chi|) NULL A e-16 G A:G e Es gab einen signifikanten Einfluss vom Alter ( 2 (1)=64.2, p 0.05).


Herunterladen ppt "Logistic Regression Jonathan Harrington Befehle: logistic.txt."

Ähnliche Präsentationen


Google-Anzeigen