Beruflich Dokumente
Kultur Dokumente
6. Februar 2012
Aufgabe 1. (a) > require(boot) > dogs mvo lvp 1 78 32 2 92 33 3 116 45 4 90 30 5 106 38 6 78 24 7 99 44 > plot(dogs)
45
q q
40
lvp
35
q q
30
25
q
80
90 mvo
100
110
Die Daten sehen nicht normalverteilt aus. > cor(dogs$mvo, dogs$lvp) [1] 0.8536946 (b) Die folgende Funktion dogs.gen.boot erzeugt unter H0 einen Bootstrap Datensatz wie auf der Folie 115 (Unterkapitel 3.6.3) beschrieben ist. Die Idee ist, dass wir die zwei Variablen voneinander trennen und von jeder Variablen unabh angig eine Bootstrap Stichprobe erzeugen, und dann diese wieder zusammenf ugen zu einem neuen Datensatz auf dem wir dann die Korrelation berechnen werden. 1
dogs.gen.boot = function(data, mle) { index1 = sample(mle, size=mle, replace=TRUE) index2 = sample(mle, size=mle, replace=TRUE) cbind(data[index1, 1], data[index2, 2]) } Ein Beispiel eines solchen Bootstrap Datensatzes ist: > set.seed(31) > dogs.gen.boot(dogs, 7) [,1] [,2] [1,] 90 33 [2,] 99 44 [3,] 116 33 [4,] 116 45 [5,] 99 24 [6,] 90 38 [7,] 78 32 Der nichtparametrische Bootstraptest kann dann wie folgt durchgef uhrt werden: dogs.fun = function(data) {cor(data[, 1], data[, 2])} set.seed(31) dogs.boot = boot(dogs, dogs.fun, R=999, sim="parametric", ran.gen=dogs.gen.boot, mle=nrow(dogs)) Von den R = 999 Bootstrap-Werten sind 5 t = 0.854 und somit ist der p-Wert (1 + 5)/(999 + 1) = 0.006. Wir verwerfen somit H0 , d.h. wir verwerfen die Hypothese, dass MVO und LVP unabh angig sind. > sum(dogs.boot$t >= dogs.boot$t0) [1] 5 > (1 + sum(dogs.boot$t >= dogs.boot$t0))/(1 + dogs.boot$R) [1] 0.006
Aufgabe 2. (a) Das Bootstrap-Modell unter der Nullhypothese ist, dass die Dierenzen dj unabh angige Realisationen einer Verteilung sind, die symmetrisch bez uglich null ist. Somit nimmt eine BootstrapSchema unabh angig n Werte aus {d1 , . . . , dn } an. Der resultierende p-Wert sollte somit nicht stark von demjenigen des Randomisierungstests abweichen. (b) > require(boot) > darwin y 1 49 2 -67 3 8 4 16 5 6 6 23 7 28 2
8 41 9 14 10 29 11 56 12 24 13 75 14 60 15 -48 Der Randomisierungstest kann wie folgt durchgef uhrt werden: > darwin.gen = function(data, mle) { sign = sample(c(-1, 1), mle, replace=TRUE) data*sign } > set.seed(32) > darwin.rand = boot(darwin$y, mean, R=999, sim="parametric", ran.gen=darwin.gen, mle=nrow(darwin)) > (1 + sum(darwin.rand$t >= darwin.rand$t0))/(1 + darwin.rand$R) [1] 0.023 Der Randomisierungstest mit R = 999 liefert einen p-Wert von 0.023. Die Nullhypothese wird somit verworfen und somit scheint die Dierenz leicht signikant von null verschieden zu sein. (c) Der Bootstraptest kann wie folgt durchgef uhrt werden: > darwin.gen.boot = function(data, mle) { sample(mle, size=length(data), replace=TRUE) } > set.seed(32) > darwin.boot = boot(darwin$y, mean, R=999, sim="parametric", ran.gen=darwin.gen.boot, mle=c(darwin$y, -darwin$y)) > (1 + sum(darwin.boot$t >= darwin.boot$t0))/(1 + darwin.boot$R) [1] 0.026 Der Bootstraptest mit R = 999 liefert einen p-Wert von 0.026, welcher nicht stark von demjenigen des Randomisierungstests (0.023) abweicht; siehe auch Bermekungen in (a). Wir kommen somit zum gleichen Schluss.
Aufgabe 3. (a) > require(boot) > catsM Sex Bwt Hwt 1 M 2.0 6.5 3
2 ... 96 97
M 2.0
6.5
> plot(catsM$Bwt, catsM$Hwt, xlim=c(0, 4), ylim=c(0, 24)) > cats.lm = lm(Hwt ~ Bwt, data=catsM) > abline(coef(cats.lm))
20
catsM$Hwt
0 0
10
15
2 catsM$Bwt
> summary(cats.lm) Call: lm(formula = Hwt ~ Bwt, data = catsM) Residuals: Min 1Q Median -3.7728 -1.0478 -0.2976
3Q 0.9835
Max 4.8646
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -1.1841 0.9983 -1.186 0.239 Bwt 4.3127 0.3399 12.688 <2e-16 *** --Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 Residual standard error: 1.557 on 95 degrees of freedom Multiple R-Squared: 0.6289, Adjusted R-squared: 0.625 F-statistic: 161 on 1 and 95 DF, p-value: < 2.2e-16 > par(pty="s", mfrow=c(1, 2)) > plot(cats.lm, which=1:2)
Normal QQ
97 q 88 q qq q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q
Residuals
2 1
q qq q q q q q q q q qqqq q qq q q q qqqq q q q q qq q qqq q q q qqqqq qq qqq q qq qqqq qqq q q q q qqq qqq qq q qq q q qqq
q q
q q
0
q q 93
93 q
10
12
14
q 88
Fitted values
Theoretical Quantiles
(b) (b1) Case resampling: > cats.fit = function(data) coef(lm(data$Hwt ~ data$Bwt)) > cats.case = function(data, i) cats.fit(data[i, ]) > set.seed(33) > cats.boot1 = boot(catsM, cats.case, R=499) > cats.boot1 ORDINARY NONPARAMETRIC BOOTSTRAP Call: boot(data = catsM, statistic = cats.case, R = 499) Bootstrap Statistics : original bias t1* -1.184088 0.06025952 t2* 4.312679 -0.01948728 > plot(cats.boot1)
Histogram of t
q
0.30
2 t* 4 2 t* 0 2 4 2 0
0.00
q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qq
Density
0.10
0.20
Histogram of t
1.0 5.5
q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q
0.8
Density
0.6
0.4
3.0
3.5
4.0
4.5
5.0
und die Steigung , index=2) sehen normalverteilt aus. Beide Graphiken (f ur das Intercept 0 1 Man sieht auch, dass es nicht grosse Ausreisser gibt (wie dies der Fall war mit den survival data, welche wir im Kurs auf den Folien 125130 im Unterkapitel 3.7 gesehen haben).
(b2) Model-based resampling: > > > > > > cats.res = resid(cats.lm) cats.sd = sqrt(sum(cats.res^2)/cats.lm$df.residual) cats.res = cats.res*cats.sd cats.res = cats.res - mean(cats.res) cats.df = data.frame(catsM, res=cats.res, fit=fitted(cats.lm)) cats.model = function(data, i) { 6
d = data d$Hwt = d$fit + d$res[i] cats.fit(d) } > set.seed(33) > cats.boot2 = boot(cats.df, cats.model, R=499) > cats.boot2 ORDINARY NONPARAMETRIC BOOTSTRAP Call: boot(data = cats.df, statistic = cats.model, R = 499) Bootstrap Statistics : original bias t1* -1.184088 0.11056619 t2* 4.312679 -0.03527925 > plot(cats.boot2)
Histogram of t
qq q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qq
0.4
Density
0.2
t* 4 2 t* 0 1 2 4 2
0.0
1 0
Histogram of t
qq q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q
1.2
Density
0.8
3.5
4.0
4.5
5.0
1 0
Beide Bootstrap Verfahren liefern ahnliche Sch atzungen von den Koezienten der Regressionsgeraden.