logistic regression

28
Logistic Regression Jonathan Harrington Bitte lost.txt und lost2.txt laden – siehe Befehle in logistic.txt

Upload: shima

Post on 19-Mar-2016

75 views

Category:

Documents


1 download

DESCRIPTION

Logistic Regression. Jonathan Harrington. Bitte lost.txt und lost2.txt laden – siehe Befehle in logistic.txt. 1. Logistic Regression : allgemeine Einf ü hrung. Literatur. Baayen, R.H. Analyzing Linguistic Data: A practical introduction to Statistics . S. 213-234. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Logistic Regression

Logistic Regression

Jonathan Harrington

Bitte lost.txt und lost2.txt laden – siehe Befehle in logistic.txt

Page 2: Logistic Regression

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.

http://www.faculty.sbc.edu/bkirk/Biostatistics/course%20documents%20for%202006/Logistic%20Regression%20Analysis.doc

LiteraturBaayen, R.H. Analyzing Linguistic Data: A practical introduction to Statistics. S. 213-234

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

Page 3: Logistic Regression

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.

Page 4: Logistic Regression

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 + bLeast-squares Regression

Logistic Regression

Es wird nicht angenommen, dass die Werte Stichproben aus einer Normalverteilung sind.

Ein Vorteil von logistic Regression:

Page 5: Logistic Regression

Einige Daten

high low1950 30 51960 18 211971 15 261980 13 201993 4 322005 2 34

In 1950 produzierten 30 Sprecher /lo:st/ und 5 /lɔst/.

jahr = as.numeric(rownames(lost))jahr = jahr - 1950

lost

Page 6: Logistic Regression

Log-odds

p q=1-p Odds = p/q Log-Odds = log(p/q)

0.8 0.2 log(4) = 1.39

0.5 0.5 1 0

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

32 8

n

40

p

0.8

(prop. lOst)(prop. lo:st)

Page 7: Logistic Regression

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

Log-odds

Page 8: Logistic Regression

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.

Page 9: Logistic Regression

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 VariableEine 2-spaltige Matrix: Anzahl von 'ja' und 'nein' (hier /lo:st/ und /lOst/)

lost high low1950 30 51960 18 211971 15 261980 13 201993 4 322005 2 34

Page 10: Logistic Regression

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/ berechnenp = lost[,1]/apply(lost, 1, sum)# log-oddslodd = log(p/(1-p))plot(jahr, lodd, type="b")# Regressionslinie überlagernabline(g, col=2)

3. Abbildung der Regressionslinie

Page 11: Logistic Regression

Vorhersage: Wert für 1962

abline(h=m * 12 + k, lty=2, col="blue")abline(v= 12)

m * x + k

coef(g)(Intercept) jahr 1.10432397 -0.07026313

k = coef(g)[1]m = coef(g)[2]

Page 12: Logistic Regression

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

)1

log(ppL

L = log(p/(1-p))

L

L

eep

1

p = exp(L)/(1+exp(L))

[1] 1.386294

[1] 0.8

Abbildung der Regression

(1)

(2)

p = 0.8

Page 13: Logistic Regression

curve(exp(m*x + k)/(1+ exp(m*x+k)), xlim=c(0, 60), add=T, col=2)

# Regression überlagern

# Proportionen von /lo:st/ berechnenp = lost[,1]/apply(lost, 1, sum)

plot(jahr,p)

# Abbildung Jahr x Proportionen

Die Regression

)(

)(

1 kmx

kmx

eey

coef(g)(Intercept) jahr 1.10432397 -0.07026313

k = coef(g)[1]m = coef(g)[2]

Abbildung: Jahr x Proportionen

Page 14: Logistic Regression

die vorhergesagten Werte liegen auf der Kurve:

vorher = predict(g)text(jahr, exp(vorher)/(1+exp(vorher)), "x", col=3)

Abbildung Jahr x Proportionen

1962 exp(m*12 + k)/(1+ exp(m*12+k))

)(

)(

1 kmx

kmx

eey

Page 15: Logistic Regression

Lineare Regression: R2 oder adjusted R2 und ein F-testLogistic Regression: G2 und ein 2-test.

G2 = 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.

Signifikanz-TestWas ist die Wahrscheinlichkeit, dass die Proportion von /lo:st-lɔst/ durch den Jahrgang vorhergesagt werden kann?

Page 16: Logistic Regression

69.3634 - 8.2422 [1] 61.1212

G2 = Null deviance - residual deviance

summary(g) Null deviance: 69.3634 on 5 degrees of freedomResidual deviance: 8.2422 on 4 degrees of freedom

Der Test mit anova() ist ob G2 signifikant von 0 abweicht:

anova(g, test="Chisq")

Df Deviance Resid. Df Resid. Dev P(>|Chi|)NULL 5 69.363 jahr 1 61.121 4 8.242 5.367e-15

Eine Analyse der logistischen Regression mit Proportion als abhängige Variable und Jahr als unabhängige Variable zeigte, dass die Proportionen einem Trend folgen (2(1)=61.2, p < 0.001)

g = glm(lost ~ jahr, binomial)

Page 17: Logistic Regression

logistische Regression

dd = read.delim(paste(pfad, "kj.txt", sep="/"))lneu = read.table(paste(pfad, "lneu.txt", sep="/"))

Bitte kj.txt und lneu.txt herunterladen und diese Befehle aus logbefehle2.txt eingeben

Page 18: Logistic Regression

g = glm(var ~ Faktor, binomial)Ergebnis: ein Log-Odd pro Jahr

Abhängige Variable

Eine 2-spaltige Matrix Anzahl von 'ja' oder 'nein'

high low1950 30 51960 18 211971 15 261980 13 201993 4 322005 2 34

Oder ein Vektor

highhighlowhighhighhighlow...

Faktor

Trend Analysenimmt der high/low Anteil mit zunehmenden Jahrgang ab?

Kategoriale AnalyseUnterscheiden sich männlich und weiblich in der Anteil von high/low?

Logistische Regression

Page 19: Logistic Regression

Kategoriale Analyse (Ein Faktor)dd = read.delim(paste(pfad, "kj.txt", sep="/"))

head(dd)names(dd)

1. Tabelle

2. Barplot

3. Modell: logistische Regression

4. Signifikanz

tab = with(dd, table(str, age))

Frage: Wird die Verwendung von /str/ vs. /Str/ vom Alter beeinflusst?

barplot(tab, beside=T, legend=T)

anova(g, test="Chisq")

g = glm(str ~ age, binomial, data=dd) Kategorial

5. ErgebnisDie str/Str Verteilung wird signifikant vom Alter beinflusst ([2] = 17.4, p < 0.001)

Page 20: Logistic Regression

Trend Analyse (ein numerischer Faktor)lneu = read.table(paste(pfad, "lneu.txt", sep="/"))head(lneu)names(lneu)

1. Tabelle

2. Jahr x Proportion Abbildung

3. Modell: logistische Regression

4. Signifikanz

Frage: Wird die Verwendung von high vs. low vom Jahrgang beeinflusst?

5. Ergebnis

p = tab[1,]/apply(tab, 1, sum) zeit = as.numeric(colnames(tab))

tab = with(lneu, table(Vowel, Jahr))

g = glm(Vowel ~ Jahr, binomial, data=lneu)

anova(g, test="Chisq")

Numerisch

Die high/low Verteilung wird signifikant vom Jahrgang beinflusst ([1] = 61.1, p < 0.001)

plot(zeit, p, type="b", xlab="Jahr (Re. 1950)", ylab="Proportion HIGH")

Page 21: Logistic Regression

Zwei Faktoren.

high low00.0 16 010.0 9 621.0 8 1030.0 8 743.0 4 1055.0 1 1500.1 14 510.1 9 1521.1 7 1630.1 5 1343.1 0 2255.1 1 19

M

W

195019601971198019932005195019601971198019932005

}}

(a) Gibt es einen Trend? Also weniger high in späteren Jahren?

(b) Ist die Proportion high/low in M und W unterschiedlich verteilt?

Interaktion: Jahr x Geschlecht

Faktor: Jahr

Faktor: Geschlecht

Ist der Trend derselbe für M und W?

beide = paste(G, Jahr, sep=".")tab = table(beide, Vowel)

Page 22: Logistic Regression

Zuerst eine Abbildung…temp = Vowel == "high"interaction.plot(Jahr, G, temp)

Nimmt die Proportion von high in späteren Jahren ab? (Die Unterschiede zwischen m und w ignorieren).

Ja Nein Vielleicht

Unterscheiden sich m und w in der Proportion von high? (Die Unterschiede in den Jahrgängen ignorieren).

Ja Nein Vielleicht

attach(lneu)

Page 23: Logistic Regression

Coefficients:(Intercept) Jahr G 1.87754 -0.07524 1.20282

logodds(lo:st) = 1.87754 - 0.07524 * Jahr + 1.20282 * G

mehrg = glm(Vowel ~ Jahr + G, binomial, data=lneu)

anova(mehrg, test="Chisq") Df Deviance Resid.Df Resid. Dev P(>|Chi|)NULL 219 290.572J 1 61.121 218 229.451 5.367e-15G 1 12.822 217 216.629 3.425e-04

M und W unterscheiden sich in der Proportion von high/low, 2(1) = 12.82, p < 0.001

Die Proportion von high nimmt in späteren Jahren ab, 2(1) = 61.12, p < 0.001.

mehrg

Page 24: Logistic Regression

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

Die Interaktion zwischen 2 Variablen

1950 2000

prop(high)

1950 2000 1950 2000 19502000

prop(high) prop(high) prop(high)

1 2 3 4

m

w

Page 25: Logistic Regression

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 high/low nur in Männern aber nicht in Frauen usw.

Die Interaktion zwischen 2 Variablen

dies scheint aber hier nicht der Fall zu sein.

Page 26: Logistic Regression

Die Interaktion zwischen 2 unabhängigen Variablen, A und B, kann in R mit A:B geprüft werden.Daher in diesem Fallg = glm(Vowel ~ Jahr + G + Jahr:G, binomial, data=lneu)

Eine Abkürzung dafür (und mit genau demselben Ergebnis)g = glm(Vowel ~ Jahr * G, binomial, data=lneu)

Die Interaktion zwischen 2 Variablen

anova(g, test="Chisq")

Df Deviance Resid. Df Resid. Dev P(>|Chi|)NULL 219 290.572 Jahr 1 61.121 218 229.451 5.367e-15 ***G 1 12.822 217 216.629 0.0003425 ***Jahr:G 1 0.017 216 216.612 0.8962973

d.h. die Interaktion ist nicht signifikant und J:G kann aus dem Regressionsmodell weggelassen werden.

Page 27: Logistic Regression

library(MASS)

stepAIC(g)

Dies wird auch durch stepAIC() bestätigt:

AIC wird kleiner wenn wir Jahr:G weglassen

Start: AIC=224.61Vowel ~ Jahr * G

Df Deviance AIC- Jahr:G 1 216.63 222.63<none> 216.61 224.61

daher bleiben wir bei:

Call: glm(formula = Vowel ~ Jahr + G, family = binomial, data = lneu)

Page 28: Logistic Regression

pfad = "Pfad wo Sie kj.txt gespeichert haben"kj = read.delim(paste(pfad, "kj.txt", sep="/"))

Inwiefern wird die Wahl zwischen 'str' und 'Str' durch

Alter und Herkunft (age und region)Alter und soziale Klasse (age, class)Alter und Geschlecht (age, gender)

beeinflusst?