Figure 2.1
qqmath(~ height | voice.part,
distribution=qunif,
data=singer,
panel = function(x, y) {
panel.grid()
panel.xyplot(x, y)
},
layout=c(2,4),
aspect=1,
sub = list("Figure 2.1",cex=.8),
xlab = "f-value",
ylab="Height (inches)")

Figure 2.2
qqmath(~ sort(singer$height[singer$voice.part=="Tenor 1"]),
distribution = qunif,
panel = function(x, y) {
panel.qqmath(c(0, x, 1), c(min(y), y, max(y)), type = "l")
panel.qqmath(x, y, col = 0, pch = 16)
panel.qqmath(x, y)
},
aspect = 1,
sub = list("Figure 2.2",cex=.8),
xlab = "f-value",
ylab = "Tenor 1 Height (inches)")

Figure 2.3
voice.part <- ordered(singer$voice.part,
c("Soprano 1", "Soprano 2", "Alto 1", "Alto 2",
"Tenor 1", "Tenor 2", "Bass 1", "Bass 2"))
qq(voice.part ~ singer$height,
subset=voice.part=="Bass 2" | voice.part=="Tenor 1",
aspect=1,
sub = list("Figure 2.3",cex=.8),
xlab = "Tenor 1 Height (inches)",
ylab = "Base 2 Height (inches)")

Figure 2.4
voice.part <- ordered(singer$voice.part,
c("Soprano 1", "Soprano 2", "Alto 1", "Alto 2",
"Tenor 1", "Tenor 2", "Bass 1", "Bass 2"))
bass.tenor.qq <- qq(voice.part ~ singer$height,
subset=voice.part=="Bass 2" | voice.part=="Tenor 1")
tmd(bass.tenor.qq,
aspect=1,
ylab = "Difference (inches)",
sub = list("Figure 2.4",cex=.8),
xlab = "Mean (inches)")

Figure 2.5 missing
Figure 2.6
oldpty <- par("pty")
par(pty = "s")
data <-
c(0.9, 1.6, 2.26305, 2.55052, 2.61059, 2.69284, 2.78511, 2.80955,
2.94647, 2.96043, 3.05728, 3.15748, 3.18033, 3.20021,
3.20156, 3.24435, 3.33231, 3.34176, 3.3762, 3.39578, 3.4925,
3.55195, 3.56207, 3.65149, 3.72746, 3.73338, 3.73869,
3.80469, 3.85224, 3.91386, 3.93034, 4.02351, 4.03947,
4.05481, 4.10111, 4.26249, 4.28782, 4.37586, 4.48811,
4.6001, 4.65677, 4.66167, 4.73211, 4.80803, 4.9812, 5.17246,
5.3156, 5.35086, 5.36848, 5.48167, 5.68, 5.98848, 6.2, 7.1,
7.4)
boxplot(data, rep(NA, length(data)), ylab = "Data")
usr <- par("usr")
x <- usr[1] + (usr[2] - usr[1]) * 0.5
at <- c(0.9, 1.6, 3.2, 3.8, 4.65, 6.2, 7.2)
arrows(rep(x * 1.15, 7), at, rep(x, 7), at)
mtext("Figure 2.6",1,1,cex=.8)
text(rep(x * 1.2, 7), at, adj = 0,
labels = c("outside value", "lower adjacent value",
"lower quartile", "median", "upper quartile",
"upper adjacent value", "outside values"))
par(pty = oldpty)
invisible()

Figure 2.7
data <- round(c(0.9, 1.6, 2.263047,
2.550518, 2.610592, 2.69284, 2.785113,
2.809547, 2.946467, 2.96044, 3.057283,
3.15748, 3.180327, 3.200206,
3.20156, 3.244347, 3.332312,
3.341763, 3.3762, 3.395778, 3.492497,
3.551945, 3.562066, 3.65149,
3.7274632, 3.73338, 3.738686, 3.80469,
3.85224, 3.91386, 3.93034,
4.02351, 4.039466, 4.05481, 4.101108, 4.262486,
4.28782, 4.375864, 4.48811, 4.6001,
4.656775, 4.661673, 4.73211,
4.80803, 4.9812, 5.172464,
5.3156, 5.35086, 5.36848,
5.48167, 5.68, 5.98848, 6.2,
7.1, 7.4),5)
uq <- quantile(data,.75)
lq <- quantile(data,.25)
r <- 1.5*(uq-lq)
h <- c(lq-r,1.6,lq,uq,6.2,uq+r)
writing <- c("lower quartile - 1.5 r",
"lower adjacent value",
"lower quartile",
"upper quartile",
"upper adjacent value",
"upper quartile + 1.5 r")
qqmath(~ data,
distribution = qunif,
panel = substitute(function(x, y) {
reference.line <- trellis.par.get("reference.line")
panel.abline(h = h, lwd = reference.line$lwd, lty = reference.line$lty, col = reference.line$col)
panel.qqmath(x, y, col = 0, pch = 16)
panel.qqmath(x, y)
text(rep(0,3), h[4:6], writing[4:6], adj=0)
text(rep(1,3), h[1:3], writing[1:3], adj=1)
}),
aspect = 1,
sub = list("Figure 2.7",cex=.8),
xlab = "f-value",
ylab = "Data")

Figure 2.8
bwplot(voice.part ~ height,
data=singer,
aspect=1,
sub = list("Figure 2.8",cex=.8),
xlab="Height (inches)")

Figure 2.9
data <- sort(singer$height[singer$voice.part=="Alto 1"])
qqmath(~ data,
distribution = qunif,
panel = function(x, y) {
panel.grid()
panel.qqmath(c(0, x, 1), c(min(y), y, max(y)), type = "l")
panel.qqmath(x, y, col = 0, pch = 16)
panel.qqmath(x, y)
},
aspect = 1,
ylim = range(data, qnorm(ppoints(data), mean(data), sqrt(var(data)))),
sub = list("Figure 2.9",cex=.8),
xlab = "f-value",
ylab = "Alto 1 Height (inches)")

Figure 2.10
data <- sort(singer$height[singer$voice.part=="Alto 1"])
x <- ppoints(data)
y <- qnorm(x, mean(data), sqrt(var(data)))
xyplot(y ~ x,
panel = function(x, y){
panel.grid()
panel.xyplot(x, y, type = "l")
},
ylim = range(data, y),
aspect = 1,
sub = list("Figure 2.10",cex=.8),
xlab = "f-value",
ylab = "Normal Quantile Function")

Figure 2.11
qqmath(~ height | voice.part,
data=singer,
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.grid()
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
layout=c(2,4),
aspect=1,
sub = list("Figure 2.11",cex=.8),
xlab = "Unit Normal Quantile",
ylab="Height (inches)")

Figure 2.12
dotplot(tapply(singer$height,singer$voice.part,mean),
aspect=1,
sub = list("Figure 2.12",cex=.8),
xlab="Mean Height (inches)")

Figure 2.13
bwplot(voice.part ~ oneway(height~voice.part, spread = 1)$residuals,
data = singer,
aspect=0.75,
panel = function(x,y){
panel.bwplot(x,y)
panel.abline(v=0)
},
sub = list("Figure 2.13",cex=.8),
xlab = "Residual Height (inches)")

Figure 2.14
res.height <- oneway(height ~ voice.part, data = singer, spread = 1)$residuals
qqmath(~ res.height | singer$voice.part,
distribution = substitute(function(p) quantile(res.height, p)),
panel=function(x,y){
panel.grid()
panel.abline(0, 1)
panel.qqmath(x, y)
},
aspect=1,
layout=c(2,4),
sub = list("Figure 2.14",cex=.8),
xlab = "Pooled Residual Height (inches)",
ylab = "Residual Height (inches)")

Figure 2.15
qqmath(~ oneway(height ~ voice.part, spread = 1)$residuals,
data = singer,
distribution = qunif,
aspect = 1, sub = list("Figure 2.15",cex=.8),
xlab = "f-value",
ylab = "Residual Height (inches)")

Figure 2.16
qqmath(~ oneway(height~voice.part, spread = 1)$residuals,
data = singer,
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
aspect=1,
sub = list("Figure 2.16",cex=.8),
xlab = "Unit Normal Quantile",
ylab="Residual Height (inches)")

Figure 2.17
rfs(oneway(height~voice.part, data = singer, spread = 1),
aspect=1,
sub = list("Figure 2.17",cex=.8),
ylab = "Height (inches)")

Figure 2.18 missing
Figure 2.19
qqmath(~ time | nv.vv,
data=fusion.time,
distribution = qunif,
panel = function(x, y) {
panel.grid()
panel.qqmath(x, y)
},
aspect=1,
layout=c(2,1),
sub = list("Figure 2.19",cex=.8),
xlab = "f-value",
ylab="Time (seconds)")

Figure 2.20
data <- 5+qnorm(ppoints(25))
qqmath(~data,
distribution = qunif,
panel = function(x, y) {
reference.line <- trellis.par.get("reference.line")
m <- median(y)
segments(c(.1, .9), m, c(.1, .9), quantile(y, c(.1, .9)),
lwd = reference.line$lwd, lty = reference.line$lty, col = reference.line$col)
panel.qqmath(c(0, x, 1), c(min(y), y, max(y)), type = "l")
panel.qqmath(x, y, col = 0, pch = 16)
panel.qqmath(x, y)
panel.abline(h = m)
text(.05, 4.25, "d(0.1)", srt = 90, adj = 0)
text(.85, 5.25, "d(0.9)", srt = 90, adj = 0)
},
aspect = 1,
sub = list("Figure 2.20",cex=.8),
xlab = "f-value",
ylab = "Data")

Figure 2.21
data <- 2 ^ (5 + qnorm(ppoints(25)))
qqmath(~ data,
distribution = qunif,
panel = function(x, y) {
reference.line <- trellis.par.get("reference.line")
m <- median(y)
segments(c(.1, .9), m, c(.1, .9), quantile(y, c(.1, .9)),
lwd = reference.line$lwd, lty = reference.line$lty, col = reference.line$col)
panel.qqmath(c(0, x, 1), c(min(y), y, max(y)), type = "l")
panel.qqmath(x, y, col = 0, pch = 16)
panel.qqmath(x, y)
panel.abline(h = m)
text(.05, 15, "d(0.1)", srt = 90, adj = 0)
text(.85, 40, "d(0.9)", srt = 90, adj = 0)
},
aspect = 1,
sub = list("Figure 2.21",cex=.8),
xlab = "f-value",
ylab = "Data")

Figure 2.22
qqmath(~ time | nv.vv,
data=fusion.time,
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.grid()
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
aspect=1,
layout=c(2,1),
sub = list("Figure 2.22",cex=.8),
xlab = "Unit Normal Quantile",
ylab="Time (seconds)")

Figure 2.23
function()
bwplot(nv.vv ~ time,
data=fusion.time,
aspect = .5,
sub = list("Figure 2.23",cex=.8),
xlab="Time (seconds)")

Figure 2.24
qqmath(~ logb(time,2) | nv.vv,
data=fusion.time,
prepanel=prepanel.qqmathline,
panel = function(x, y) {
panel.grid()
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
aspect=1,
layout=c(2,1),
sub = list("Figure 2.24",cex=.8),
xlab = "Unit Normal Quantile",
ylab="Log Time (log 2 seconds)")

Figure 2.25
fusion.time.m <- oneway(time ~ nv.vv, data=fusion.time, location=median, spread=1)
xyplot(sqrt(abs(residuals(fusion.time.m)))~jitter(fitted.values(fusion.time.m),factor=3),
aspect=1,
panel=substitute(function(x,y){
panel.xyplot(x,y)
srmads <- sqrt(tapply(abs(residuals(fusion.time.m)),
fusion.time$nv.vv, median))
lines(fusion.time.m$location,srmads)
}),
sub = list("Figure 2.25",cex=.8),
xlab="Jittered Median Time (sec)",
ylab="Square Root Absolute Residual Time (square root sec)")

Figure 2.26
fusion.time.m <- oneway(logb(time,2) ~ nv.vv,data=fusion.time, location = median, spread=1)
xyplot(sqrt(abs(residuals(fusion.time.m))) ~ jitter(fitted.values(fusion.time.m),factor=3),
aspect=1,
panel=substitute(function(x,y){
panel.xyplot(x,y)
srmads <- tapply(abs(residuals(fusion.time.m)),
fusion.time$nv.vv,median)
lines(fusion.time.m$location,srmads)
}),
sub = list("Figure 2.26",cex=.8),
xlab="Jittered Median Log Time (log 2 sec)",
ylab="Square Root Absolute Residual Log Time (square root absolute log 2 sec)")

Figure 2.27
qq(nv.vv ~ time,
data = fusion.time,
aspect = 1,
sub = list("Figure 2.27",cex=.8),
xlab="NV Time (seconds)",
ylab="VV Time (seconds)")

Figure 2.28
qq(nv.vv ~ logb(time, 2),
data = fusion.time,
aspect = 1,
sub = list("Figure 2.28",cex=.8),
xlab = "Log NV Time (log 2 seconds)",
ylab = "Log VV Time (log 2 seconds)")

Figure 2.29
tmd(qq(nv.vv ~ logb(time, 2), data = fusion.time),
aspect = 1,
sub = list("Figure 2.29",cex=.8),
xlab = "Mean (log 2 seconds)",
ylab = "Difference (log 2 seconds)")

Figure 2.30
res <- oneway(logb(time,2)~nv.vv, data = fusion.time, spread = 1)$residuals
qqmath(~ res | fusion.time$nv.vv,
distribution = substitute(function(p) quantile(res, p)),
panel=function(x,y){
panel.grid()
panel.abline(0, 1)
panel.qqmath(x, y)
},
aspect=1,
layout=c(2,1),
sub = list("Figure 2.30",cex=.8),
xlab = "Pooled Residual Log Time (log 2 seconds)",
ylab = "Residual Log Time (log 2 seconds)")

Figure 2.31
qqmath(~ oneway(logb(time,2)~nv.vv, data = fusion.time, spread = 1)$residuals,
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
aspect = 1,
sub = list("Figure 2.31",cex=.8),
xlab = "Unit Normal Quantile",
ylab = "Residual Log Time (log 2 seconds)")

Figure 2.32
rfs(oneway(logb(time, 2)~nv.vv, data = fusion.time, spread = 1),
aspect=1,
sub = list("Figure 2.32",cex=.8),
ylab = "Log Time (log 2 seconds)")

Figure 2.33
attach(fusion.time)
vvtime <- time[nv.vv=="VV"]
transformed <- cbind(outer(vvtime,c(-1,-1/2,-1/4),"^"),log(vvtime),
(outer(vvtime,c(1/4,1/2,1),"^")))
fusion.time.power <- data.frame(transformed=c(transformed),
lambda = factor(rep(c(-1,-1/2,-1/4,0,1/4,1/2,1),rep(length(vvtime),7))))
ans <- qqmath(~ transformed | lambda,
data=fusion.time.power,
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.grid(h = 0)
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
aspect=1,
scale = list(y = "free"),
layout=c(2,4),
sub = list("Figure 2.33",cex=.8),
xlab = "Unit Normal Quantile",
ylab = "VV Time")
detach()
ans

Figure 2.34
qqmath(~ mean.length | dimension,
distribution = qunif,
data=food.web,
panel = function(x, y) {
panel.grid()
panel.qqmath(x, y)
},
layout=c(1,3),
aspect=1,
sub = list("Figure 2.34",cex=.8),
xlab = "f-value",
ylab="Chain Length")

Figure 2.35
foo.m <- oneway(mean.length~dimension, data = food.web, location = median, spread=1)
set.seed(19)
xyplot(sqrt(abs(residuals(foo.m))) ~ jitter(fitted.values(foo.m),factor=3),
aspect=1,
panel = substitute(function(x,y){
panel.xyplot(x,y)
srmads <- tapply(abs(residuals(foo.m)),
food.web$dimension, median)
lines(foo.m$location,srmads)
}),
sub = list("Figure 2.35",cex=.8),
xlab="Jittered Median Chain Length",
ylab="Square Root Absolute Residual Chain Length")

Figure 2.36
qqmath(~ mean.length | dimension,
data=food.web,
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.grid()
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
layout=c(1,3),
aspect=1,
sub = list("Figure 2.36",cex=.8),
xlab = "Unit Normal Quantile",
ylab="Chain Length")

Figure 2.37
foo.m <- oneway(logb(mean.length, 2) ~ dimension, data = food.web, location = median, spread = 1)
set.seed(19)
xyplot(sqrt(abs(residuals(foo.m))) ~ jitter(fitted.values(foo.m), factor = 3),
panel = substitute(function(x, y) {
panel.xyplot(x, y)
add.line <- trellis.par.get("add.line")
lines(foo.m$location, tapply(y, food.web$dimension, median),
lty = add.line$lty, lwd = add.line$lwd, col = add.line$col)
}),
aspect = 1,
sub = list("Figure 2.37",cex=.8),
xlab = "Jittered Median Log 2 Chain Length",
ylab = "Square Root Absolute Residual Log 2 Chain Length")

Figure 2.38
qqmath(~ logb(mean.length,2) | dimension,
data=food.web,
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.grid()
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
layout=c(1,3),
aspect=1,
sub = list("Figure 2.38",cex=.8),
xlab = "Unit Normal Quantile",
ylab="Log 2 Chain Length")

Figure 2.39
foo.m <- oneway(1/mean.length ~ dimension, data = food.web, location = median, spread = 1)
set.seed(19)
xyplot(sqrt(abs(residuals(foo.m))) ~ jitter(fitted.values(foo.m), factor = 3),
panel = substitute(function(x,y) {
panel.xyplot(x,y)
add.line <- trellis.par.get("add.line")
lines(foo.m$location, tapply(y, food.web$dimension, median),
lty = add.line$lty, lwd = add.line$lwd, col = add.line$col)
}),
aspect = 1,
sub = list("Figure 2.39",cex=.8),
xlab = "Jittered Median Link Fraction",
ylab = "Square Root Absolute Residual Link Fraction")

Figure 2.40
qqmath(~ (1/mean.length) | dimension,
data = food.web,
panel = function(x, y){
panel.grid()
panel.xyplot(x, y)
panel.qqmathline(y, distribution = qnorm)
},
layout = c(1, 3),
aspect = 1,
sub = list("Figure 2.40",cex=.8),
xlab = "Unit Normal Quantile",
ylab = "Link Fraction")

Figure 2.41
res <- oneway((1/mean.length)~dimension, data = food.web, spread = 1)$residuals
qqmath(~ res | food.web$dimension,
distribution = substitute(function(p) quantile(res, p)),
panel=function(x,y){
panel.grid()
panel.abline(0, 1)
panel.qqmath(x, y)
},
layout=c(1,3),
aspect=1,
sub = list("Figure 2.41",cex=.8),
xlab = "Pooled Residual Link Fraction",
ylab = "Residual Link Fraction")

Figure 2.42
rfs(oneway((1/mean.length)~dimension, data = food.web, spread = 1),
sub = list("Figure 2.42",cex=.8),
aspect=1,
ylab = "Link Fraction")

Figure 2.43
bwplot(factor(number.runs) ~ logb(empty.space,2),
data=bin.packing,
aspect=1,
sub = list("Figure 2.43",cex=.8),
xlab="Log 2 Empty Space")

Figure 2.44
qqmath(~ logb(empty.space,2) | factor(number.runs),
data = bin.packing,
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.grid()
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
layout = c(3, 4),
sub = list("Figure 2.44",cex=.8),
xlab = "Unit Normal Quantile",
ylab = "Log 2 Empty Space")

Figure 2.45
res <- oneway(logb(empty.space,2) ~ number.runs, data = bin.packing,
location = median,
# This next line is the way it should be.
# spread = function(x) median(abs(x-median(x)))
# This next line is the way it is now.
spread = function(x) (quantile(x,.75)-quantile(x,.25))/1.33)$scaled.residuals
qqmath(~ res | factor(bin.packing$number.runs),
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.grid()
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
layout = c(3,4),
sub = list("Figure 2.45",cex=.8),
xlab = "Unit Normal Quantile",
ylab = "Spread-Standardized Residual Log 2 Empty Space")

Figure 2.46
attach(bin.packing)
data <- logb(empty.space,2)
bin.packing.m <- oneway(data~number.runs,location = median,
spread=function(x) diff(quantile(x,c(.25,.75)))/1.35)
res <- bin.packing.m$scaled.res[number.runs>1000]
gr <- factor(number.runs[number.runs>1000])
ans <- qqmath(~ res | gr,
distribution = substitute(function(p) quantile(res, p)),
panel = function(x, y){
panel.grid()
panel.abline(0, 1)
panel.qqmath(x, y)
},
aspect = 1,
layout = c(2, 4),
sub = list("Figure 2.46",cex=.8),
xlab = "Pooled Spread-Standardized Residual Log 2 Empty Space",
ylab = "Spread-Standardized Residual Log 2 Empty Space")
detach()
ans

Figure 2.47
bin.packing.m <- oneway(logb(empty.space,2) ~ number.runs, data = bin.packing,
location = median,
spread = function(x) diff(quantile(x,c(.25,.75)))/1.35)
qqmath(~ bin.packing.m$scaled.res[bin.packing$number.runs > 1000],
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y)
},
aspect = 1,
sub = list("Figure 2.47",cex=.8),
xlab = "Unit Normal Quantile",
ylab = "Spread-Standardized Residual Log 2 Empty Space")

Figure 2.48
attach(bin.packing)
data <- logb(empty.space,2)
mq <- tapply(data, number.runs, median)
nw <- logb(sort(unique(number.runs)),2)
ans <- xyplot(mq ~ nw,
panel = function(x, y){
panel.xyplot(x, y)
panel.abline(y[11] - x[11]/3, 1/3)
},
aspect = 1,
sub = list("Figure 2.48",cex=.8),
xlab = "Log 2 Number of Weights",
ylab = "Median Log 2 Empty Space")
detach()
ans

Figure 2.49
attach(bin.packing)
bin.packing.m <- oneway(logb(empty.space, 2) ~ number.runs, location = median, spread = 1)
srmads <- tapply(abs(residuals(bin.packing.m)), number.runs, median)
ans <- xyplot(logb(srmads, 2) ~ logb(sort(unique(number.runs)), 2),
aspect = 1,
sub = list("Figure 2.49",cex=.8),
xlab = "Log 2 Number of Weights",
ylab = "Log 2 Mad of Log 2 Empty Space")
detach()
ans

Figure 2.50
attach(bin.packing)
bin.packing.m <- oneway(logb(empty.space,2) ~ number.runs, location = median, spread = 1)
srmads <- tapply(abs(residuals(bin.packing.m)), number.runs, median)
ans <- xyplot(logb(srmads/min(srmads), 2) ~ bin.packing.m$location,
aspect = 1,
sub = list("Figure 2.50",cex=.8),
xlab = "Median Log 2 Empty Space",
ylab = "Log 2 Relative Spread")
detach()
ans

Figure 2.51
attach(bin.packing)
bin.packing.m <- oneway(empty.space~number.runs,location = median, spread=1)
srmads <- tapply(abs(residuals(bin.packing.m)),number.runs,median)
log.srmads <- logb(srmads/min(srmads),2)
ans <- xyplot(log.srmads ~ bin.packing.m$location,
aspect=1,
sub = list("Figure 2.51",cex=.8),
xlab="Median Empty Space",
ylab="Log 2 Relative Spread")
detach()
ans

Figure 2.52
res <- oneway(logb(empty.space,2) ~ number.runs, data = bin.packing,
location = median,
spread = function(x) median(abs(x-median(x))))$scaled.residuals/1.68
qqmath(~ res | factor(bin.packing$number.runs),
prepanel = prepanel.qqmathline,
panel = function(x, y) {
panel.grid()
panel.qqmathline(y, distribution = qnorm)
panel.qqmath(x, y, err=-1) # no warnings for out of bounds
},
ylim = c(-2.75, 2.75),
layout = c(3, 4),
sub = list("Figure 2.52",cex=.8),
xlab = "Unit Normal Quantile",
ylab = "Spread-Standardized Log 2 Empty Space")

