> ### Beispiel 7 ### > > library(faraway); options(digits = 5) > data(savings) > savings.lm = lm(sr ~ pop15 + pop75 + dpi + ddpi, savings) > # Indexplot der Residuen > plot(savings.lm$res, ylab="residuen", main="index-plot der Residuen") > sort(savings.lm$res)[c(1,50)] # kleinster und größter Wert Chile Zambia -8.2422 9.7509 > # interaktiv: > countries = row.names(savings) > identify(1:50,savings.lm$res,countries) # dann in Bild klicken [1] 7 46
Index Plot der Residuen Residuen 5 0 5 10 Zambia Chile Index
> # Leverage: > lev = hatvalues(savings.lm) # Berechnung der h_i > plot(lev, ylab="leverages", main="index plot") > abline(h = 5/50, lty=2) # Durchschnitt = p/n > abline(h = 2*5/50) # 2p/n > sum(lev) # = p [1] 5 > names(lev) = countries > lev[lev > 0.2] Ireland Japan United States Libya 0.21224 0.22331 0.33369 0.53146 > identify(1:50,lev,countries) # interaktiv [1] 21 23 44 49
Index plot Libya Leverages 0.1 0.2 0.3 0.4 0.5 Ireland Japan United States Index
> # Berechnung der standardisierten (intern studentisierten) Residuen > sigma.hat = summary(savings.lm)$sigma > sigma.hat [1] 3.8027 > res.standard = savings.lm$res/(sigma.hat*sqrt(1-lev)) > plot(res.standard, ylab = "Standardisierte Residuen") > # alternativ direkt mit R-Funktion: > plot(rstandard(savings.lm), ylab = "Standardisierte Residuen") > # Berechnung der Jackknife-Residuen > jack = rstudent(savings.lm) > plot(jack, ylab="jackknife Residuen") > # größter Wert (mit Name) > jack[abs(jack)==max(abs(jack))] Zambia 2.8536 > # kritischer Wert für Ausreißer-Test (Bonferroni-Korrektur) > qt(1-0.05/(50*2),44) [1] 3.5258
Standardisierte Residuen 2 1 0 1 2 Jackknife Residuen 2 1 0 1 2 3 Index Index
> # Berechnung von Cook s distance: > cook = cooks.distance(savings.lm) > plot(cook, ylab="cooks distances") > identify(1:50, cook, countries) [1] 23 46 49
Libya Cooks distances 0.00 0.05 0.10 0.15 0.20 0.25 Japan Zambia Index
> # Vergleich mit und ohne einflußreichste Beobachtung: > savings2.lm <- lm(sr ~ pop15+pop75+dpi+ddpi, data = savings, + subset = (cook < max(cook))) > summary(savings2.lm) Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) 24.524046 8.224026 2.98 0.0047 ** pop15-0.391440 0.157909-2.48 0.0171 * pop75-1.280867 1.145182-1.12 0.2694 dpi -0.000319 0.000929-0.34 0.7331 ddpi 0.610279 0.268778 2.27 0.0281 * > summary(savings.lm) Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) 28.566087 7.354516 3.88 0.00033 *** pop15-0.461193 0.144642-3.19 0.00260 ** pop75-1.691498 1.083599-1.56 0.12553 dpi -0.000337 0.000931-0.36 0.71917 ddpi 0.409695 0.196197 2.09 0.04247 * > # deutliche Änderungen, ddpi um etwa 50%!
> # Berechnung der beta_(i): > inf = lm.influence(savings.lm) > plot(inf$coef[,2], inf$coef[,3], xlab="änderung in Koef. pop15", + ylab="änderung in Koef. pop75") > identify(inf$coef[,2], inf$coef[,3], countries) [1] 21 23 49
Ireland Änderung in Koef. pop75 0.6 0.4 0.2 0.0 0.2 0.4 Japan Libya 0.08 0.06 0.04 0.02 0.00 0.02 0.04 Änderung in Koef. pop15
> # Modell ohne Japan > oj.lm <- lm(sr ~ pop15+pop75+dpi+ddpi, savings, + subset=(countries!= "Japan")) > summary(oj.lm) Residuals: Min 1Q Median 3Q Max -7.997-2.592-0.115 2.032 10.157 Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) 23.940171 7.783997 3.08 0.0036 ** pop15-0.367901 0.153630-2.39 0.0210 * pop75-0.973674 1.155450-0.84 0.4040 dpi -0.000471 0.000919-0.51 0.6112 ddpi 0.334749 0.198446 1.69 0.0987. Residual standard error: 3.74 on 44 degrees of freedom Multiple R-Squared: 0.277, Adjusted R-squared: 0.211 F-statistic: 4.21 on 4 and 44 DF, p-value: 0.00565 > ## ddpi nicht mehr signifikant!
> # Plot der Residuen > par(mfrow=c(1,2)) > plot(savings.lm$fit, savings.lm$res, xlab="fitted", ylab="residuen") > abline(h=0) > plot(savings.lm$fit, abs(savings.lm$res), xlab="fitted", ylab=" Residuen ") > # zum Vergleich > par(mfrow=c(2,2)); n=50 # n=100 > plot(,rnorm(n), main="konstante Varianz") > plot(,()*rnorm(n), main="starke Heterogenität") > plot(,sqrt(())*rnorm(n), main="schwache Heterogenität") > plot(,cos(()*pi/25)+rnorm(n), main="nichtlinearität") > n=50 > plot(,abs(rnorm(n)), main="konstante Varianz") > plot(,abs(()*rnorm(n)), main="starke Heterogenität") > plot(,abs(sqrt(())*rnorm(n)), main="schwache Heterogenität") > plot(,abs(cos(()*pi/25)+rnorm(n)), main="nichtlinearität")
Residuen 5 0 5 10 Residuen 0 2 4 6 8 10 6 8 10 12 14 16 Fitted 6 8 10 12 14 16 Fitted
konstante Varianz starke Heterogenität rnorm(n) 3 2 1 0 1 () * rnorm(n) 50 0 50 schwache Heterogenität Nichtlinearität sqrt(()) * rnorm(n) 20 10 0 5 10 cos(() * pi/25) + rnorm(n) 3 1 0 1 2 3
konstante Varianz starke Heterogenität rnorm(n) 2 1 0 1 2 () * rnorm(n) 100 100 300 0 20 40 60 80 100 0 20 40 60 80 100 schwache Heterogenität Nichtlinearität sqrt(()) * rnorm(n) 10 0 10 20 cos(() * pi/25) + rnorm(n) 4 2 0 2 4 0 20 40 60 80 100 0 20 40 60 80 100
konstante Varianz starke Heterogenität abs(rnorm(n)) 0.0 1.0 2.0 3.0 abs(() * rnorm(n)) 0 20 40 60 80 schwache Heterogenität Nichtlinearität abs(sqrt(()) * rnorm(n)) 0 2 4 6 8 10 abs(cos(() * pi/25) + rnorm(n)) 0.0 1.0 2.0
> # Überprüfung der Normalverteilungsannahme > par(mfrow=c(1,2)) > qqnorm(savings.lm$res, ylab="roh-residuen") > qqline(savings.lm$res) > qqnorm(rstudent(savings.lm), ylab="jackknife-residuen") > abline(0,1) > par(mfrow=c(1,1))
Normal Q Q Plot Normal Q Q Plot Roh Residuen 5 0 5 10 Jackknife Residuen 2 1 0 1 2 3 2 1 0 1 2 Theoretical Quantiles 2 1 0 1 2 Theoretical Quantiles