RDX2 X  g8.1 source function(device="") { @ if(device!="")hardcopy(width=2.25, height=2.25, device=device) 9 titl <- paste("The logit or log(odds) transformation.", I "\nShown here is a plot of log(odds) versus proportion.", H "\nNotice how the range is stretched out at both ends.") 8 oldpar <- par(mfrow = c(1, 1), mgp = c(2.25, 0.5, 0), 2 mar = c(3.6,3.6,1.1,2.1), pty="s")  on.exit(par(oldpar))  p <- (1:999)/1000  gitp <- log(p/(1 - p)) D plot(p, gitp, xlab = "Proportion", ylab = "", type = "l", pch = 1,  cex.lab=0.85)  box() @ pval <- c(0.001, 0.01, 0.1, 0.25, 0.5, 0.75, 0.9, 0.99, 0.999) H mtext(side = 2, line = 2.5, "logit(Proportion) = log(Odds)", cex=0.85)  par(mgp = c(2.5, 0.5, 0)) E axis(4, adj=0.075, at = log(pval/(1 - pval)), labels = paste(pval))  cat(titl, "\n")  if(device!="")dev.off() invisible() }ў§$ device ў { if !=џ ў hardcopy width@ height@џџўў <- titl paste &The logit or log(odds) transformation. 5 Shown here is a plot of log(odds) versus proportion. 4 Notice how the range is stretched out at both ends.ўў џ oldpar par mfrow c?№?№ў mgpџ@?рў marџ@ ЬЬЬЬЬЭ@ ЬЬЬЬЬЭ?ё™™™™™š@ЬЬЬЬЬЭў pty sўў on.exitџ џўў џ p / ( :?№@8ўў@@ўў џ gitp logџџџ -?№џўўўўў plotџџ xlab Proportion ylab  type l pch?№ cex.lab?ы333333ў boxў џ pvalџ?PbMвёЉќ?„zсGЎ{?Й™™™™™š?а?р?ш?ьЬЬЬЬЬЭ?яЎzсGЎ?яїЮй‡+ўў mtext side@ line@ logit(Proportion) = log(Odds) cex?ы333333ўџџџ@?рўў axis@ adj?Г333333 atџџ#џџџ?№#џўўўў labels џ#џўў cat џ  ўџџџ ў dev.offўў invisibleўў g8.10џ !function(lmobj = NULL, device="") { M if(device!="")hardcopy(width=3.5, height=2.25, device=device, trellis=TRUE, 3 color=F, pointsize=c(9,6))  library(lattice) : mothdot <- dotplot(habitat ~ A, data=moths, col="black", / panel=function(x, y, ...){ K avmoth <- aggregate(x, by=list(habitat=y), FUN=mean) 6 panel.dotplot(x, y, pch=1, ...) H panel.dotplot(avmoth$x, avmoth$habitat, type="p", : pch=3, cex=1.25, ...)  }, 8 xlab="Number of moths (species A)", J key=list(text=list(c("Individual transects", "Mean"), ' cex=1), ? points=list(pch=c(1,3), cex=c(1, 1.25)), " columns=2))  print(mothdot)  if(device!="")dev.off() invisible() }ў§ lmobjўџ ўџџџџ ўџџ@  џ@џџ trellis  color F pointsizeџ@"@ўўў library latticeў џ mothdot dotplot ~ habitat Aў data moths col black panel function$ xћ$ yћ ...ћўџ џ avmoth aggregateAџ by list:џBџў FUN meanўў panel.dotplotAџBџ џ?№CџўJџ $Dџ xўKџDџ habitatўџ p џ@'џ?єCџўў function(x, y, ...){ K avmoth <- aggregate(x, by=list(habitat=y), FUN=mean) 6 panel.dotplot(x, y, pch=1, ...) H panel.dotplot(avmoth$x, avmoth$habitat, type="p", : pch=3, cex=1.25, ...)  }ўџ Number of moths (species A) keyGџ textGџџ Individual transects Meanў'џ?№ў pointsGџ џџ?№@ў'џџ?№?єўў columns@ўўў print7џўџџџ ў-џўў.џўў g8.11џ !function(lmobj = NULL, device="") { > if(device!="")hardcopy(width=5.2, height=1.4, device=device) 5 oldpar <- par(mfrow=c(1,4), mar=c(3.1,4.1,2.1,0.6), 8 mgp=c(2.0,.5,0),oma=c(0,0,0,1), pty="s")  on.exit(par(oldpar)) B lmobj <- glm(A ~ habitat1 + log(meters), family = quasipoisson,  data = moths) , plot(lmobj, caption=c("Resids vs Fitted", 3 "Normal Q-Q", "Scale-Location", "", J "Resids vs Leverage"), which=c(1:3,5), panel=panel.smooth)  if(device!="")dev.off() invisible() }ў§0џў$џ ўџџџџ ўџџ@ЬЬЬЬЬЭ џ?іffffffџџўў џ џџџџ?№@ўџџ@ЬЬЬЬЬЭ@ffffff@ЬЬЬЬЬЭ?у333333ўџџ@?рў omaџ?№ўџ sўўџџ џўў џ0џ glm9џ;џ + habitat1џ metersўўў family quasipoisson<џ=џўўџ0џ captionџ Resids vs Fitted Normal Q-Q Scale-Location  Resids vs Leverageў whichџџ?№@ў@ў?џ panel.smoothўџџџ ў-џўў.џўў g8.12џ! function(device=""){ < if(device!="")hardcopy(width=2, height=2, device=device) P oldpar <- par(mar=c(4.1,4.1,1.1,1.1), mgp=c(2.25,0.4,0), pty="s", tcl=-0.25)  on.exit(par(oldpar))  p <- (1:99)/100  x <- log(p/(1-p)) 9 u <- glm(p ~ x, family=binomial, weights=rep(100,99)) ' phat <- predict(u, type="response") H plot(x, hatvalues(u), type="l", ylab="Leverage", xaxt="n", yaxt="n", > ylim=c(0, 0.038), yaxs="i", xlab="Fitted proportion") ( pos=c(.01, .05, .2, .5, .8, .95,.99) K axis(1, at=log(pos/(1-pos))[c(1,3,5,7)], labels=paste(pos)[c(1,3,5,7)],  cex.axis=0.7) G axis(3, at=log(pos/(1-pos))[c(2,4,6)], labels=paste(pos)[c(2,4,6)],  cex.axis=0.7) - axis(2, at=c(0,.01,.02,.03), cex.axis=.7)  x <- qnorm(p) F u <- glm(p ~ x, family=binomial(link=probit), weights=rep(100,99)) ' phat <- predict(u, type="response") < lines(log(phat/(1-phat)), hatvalues(u), type="l", lty=2)  x <- log(-log(1-p)) G u <- glm(p ~ x, family=binomial(link=cloglog), weights=rep(100,99)) ' phat <- predict(u, type="response") A lines(log(phat/(1-phat)), hatvalues(u), type="l", col="gray")  xy <- par()$usr[c(2,3)]  chw <- par()$cxy[1]  chh <- par()$cxy[2] A legend(xy[1], xy[2]-0.25*chh, xjust=1, yjust=0, lty=c(1,2,1), A legend=c("logit link", "probit link", "cloglog link"), ; col=c("black","black","gray"), bty="n", cex=0.8)  if(device!="")dev.off()  invisible()  }ў§џ ўџџџџ ўџџ@ џ@џџўў џ џџџџ@ffffff@ffffff?ё™™™™™š?ё™™™™™šўџџ@?й™™™™™šўџ s tclџ?аўўўџџ џўў џџџџџ?№@XРўў@Yўў џAџџџџџџ?№џўўўўў џ uSџ9џџAџўWџ binomial weights rep@Y@XРўўў џ phat predict^џџ responseўўџAџ hatvalues^џўџ lџ Leverage xaxt n yaxt n ylimџ?ЃtМj~љлў yaxs iџ Fitted proportionў = posџ?„zсGЎ{?Љ™™™™™š?Щ™™™™™š?р?щ™™™™™š?юffffff?яЎzсGЎўў(џ?№*џ [џџjџџџ?№jџўўўўџ?№@@@ўў+џkџ џjџўџ?№@@@ўў cex.axis?цffffffў(џ@*џkџџџjџџџ?№jџўўўўџ@@@ўў+џkџ џjџўџ@@@ўўlџ?цffffffў(џ@*џџ?„zсGЎ{?”zсGЎ{?žИQы…Иўlџ?цffffffў џAџ qnormџўў џ^џSџ9џџAџўWџ_џ link probitў`џaџ@Y@XРўўў џbџcџ^џџ responseўў linesџџbџџџ?№bџўўўўdџ^џўџ l lty@ў џAџџџџџ?№џўўўўў џ^џSџ9џџAџўWџ_џnџ cloglogў`џaџ@Y@XРўўў џbџcџ^џџ responseўўpџџџbџџџ?№bџўўўўdџ^џўџ l>џ grayў џ xykџKџџў usrўџ@@ўўў џ chwkџKџџў cxyў?№ўў џ chhkџKџџўvџў@ўў legendkџsџ?№ўџkџsџ@ў *?аwџўў xjust?№ yjustqџџ?№@?№ўxџџ logit link probit link cloglog linkў>џџ black black grayў bty n'џ?щ™™™™™šўџџџ ў-џўў.џўў g8.13џ, function (device="")  { K if(device!="")hardcopy(width=4.5, height=3.5, pointsize=8, device=device) 9 df <- data.frame(x0 = c(1, 5, 1, 2, 14, 10, 12, 19)*30, = x1 = c(46, 58, 85, 67, 17, 85, 18, 42)*30, 4 fail = c(1, 0, 0, 1, 1, 0, 0, 1)) 0 oldpar <- par(mar = par()$mar + c(0, 0, 4, 0))  on.exit(par(oldpar)) 8 plot(c(0, 2610), c(0.85, 8.15), type = "n", xlab = "", ) ylab = "Subject number", axes = F) I mtext(side = 1, line = 3.75, "Days from beginning of study", adj = 0.5)  m <- dim(df)[1] par(las=2) 3 axis(2, at = (1:m), labels = paste((m:1)), lty=0) par(las=1)  abline(v = 600, lty = 4)  abline(v = 2550) 0 mtext(side = 3, line = 0.5, at = c(600, 2550), ) text = c("\nEnd of recruitment", ' "\nEnd of study"), cex = 0.9) < lines(rep((0:8) * 300, rep(3, 9)), rep(c(0, 0.2, NA), 9),  xpd = T) 0 mtext(side = 1, line = 1.85, at = (0:8) * 300, - text = paste((0:8) * 300), adj = 0.5)  chw <- par()$cxy[1] 9 xx <- as.vector(t(cbind(df[, 1], df[, 2] - 0.25 * chw, ' rep(NA, m)))) 8 yy <- as.vector(t(cbind(matrix(rep(m:1, 2), ncol = 2), ' rep(NA, m)))) ' lines(as.numeric(xx), as.numeric(yy)) points(df[, 1], m:1, pch = 16) = text(df[, 1]-0.25*chw, m:1, paste(df[,1]), pos=1, cex=0.75)  fail <- as.logical(df$fail) , points(df[fail, 2], (m:1)[fail], pch = 15) - points(df[!fail, 2], (m:1)[!fail], pch = 0) = text(df[, 2]+0.25*chw, m:1, paste(df[,2]), pos=1, cex=0.75)  par(xpd=TRUE) - legend(0, 11.5, pch = 16, legend = "Entry") $ legend(1230, 11.5, pch = c(15, 0), 0 legend = c("Dead", "Censored"), ncol=2)  par(xpd=FALSE) invisible()  if(device!="")dev.off() }ў§џ ўџџџџ ўџџ@ џ@ 4џ@ џџўў џ df data.frame x0yџџ?№@?№@@,@$@(@3ў@>ў x1yџџ@G@M@U@@PР@1@U@@2@Eў@>ў failџ?№?№?№?№ўўў џ џџџTџKџџў marўџ@ўўўўџџ џўўџџ@Єdўџ?ы333333@ LЬЬЬЬЭўџ nџ џ Subject number axes3џў$џ%џ?№&џ@ Days from beginning of study)џ?рў џ mkџ dim~џў?№ўўџ las@ў(џ@*џџџ?№„џўў+џ џџџ„џ?№ўўўqџўџ†џ?№ў abline v@‚Рqџ@ў‡џˆџ@Ѓьў$џ%џ@&џ?р*џџ@‚Р@ЃьўMџџ  End of recruitment End of studyў'џ?ьЬЬЬЬЬЭўpџaџyџџџ@ ўў@rРўaџ@@"ўўaџџ?Щ™™™™™š €ў@"ў xpd Tў$џ%џ?№&џ?§™™™™™š*џyџџџ@ ўў@rРўMџ џyџџџ@ ўў@rРўў)џ?рў џuџkџKџџў cxyў?№ўў џ xx as.vector t cbindkџ~џћ?№ўџkџ~џћ@ўyџ?аuџўўaџ €„џўўўўў џ yyŒџџŽџ matrixaџџ„џ?№ў@ў ncol@ўaџ €„џўўўўўpџ as.numeric‹џў’џџўўNџkџ~џћ?№ўџ„џ?№ў џ@0ўMџџkџ~џћ?№ўyџ?аuџўўџ„џ?№ў џkџ~џћ?№ўўjџ?№'џ?шў џ‚џ as.logicalKџ~џ failўўўNџkџ~џ‚џ@ўkџџџ„џ?№ўў‚џў џ@.ўNџkџ~џ !‚џў@ўkџџџ„џ?№ўў”џ‚џўў џўMџTџkџ~џћ@ўyџ?аuџўўџ„џ?№ў џkџ~џћ@ўўjџ?№'џ?шўџ‰џ ўxџ@' џ@0xџ Entryўxџ@“8@' џџ@.ўxџџ Dead Censoredў‘џ@ўџ‰џ ў.џўџџџ ў-џўўў g8.14џ function(device=""){ @ if(device!="")hardcopy(width=2.25, height=2.25, pointsize=8, ) device=device)  library(survival)  library(MASS) : oldpar <- par(mfrow = c(1, 1), mgp = c(2.5, 0.75, 0), 8 mar = c(4.1,4.1,2.6,1.1), pty="s")  on.exit(par(oldpar)) 0 bloodAids <- subset(Aids2, T.categ=="blood") 0bloodAids$days <- bloodAids$death-bloodAids$diag 3bloodAids$dead <- as.integer(bloodAids$status=="D") : plot(survfit(Surv(days, dead) ~ sex, data=bloodAids), 5 col=c("black","gray"), conf.int=TRUE, lty=3, A xlab="Days from diagnosis", ylab="Survival probability")  par(new=TRUE) : plot(survfit(Surv(days, dead) ~ sex, data=bloodAids), A col=c("black","gray45"), conf.int=FALSE, lty=1, lwd=1.5)  par(xpd=TRUE) ; legend("top", legend=levels(bloodAids$sex), lty=c(1,1), 9 col=c("black", "gray60"), horiz=TRUE, bty="n")  if(device!="")dev.off()  }ў§$џ ўџџџџ ўџџ@ џ@4џ@ џџўў5џ survivalў5џ MASSў џ џџџџ?№?№ўџџ@?шўџџ@ffffff@ffffff@ЬЬЬЬЬЭ?ё™™™™™šўџ sўўџџ џўў џ bloodAids subset Aids2 == T.categ bloodўўў џKџ˜џ daysўџKџ˜џ deathўKџ˜џ diagўўў џKџ˜џ deadў as.integer›џKџ˜џ statusў Dўўўџ survfit9џ Survџ џў sexў<џ˜џў>џџ black grayў conf.int qџ@џ Days from diagnosisџ Survival probabilityўџ new ўџЃџ9џЄџџ џўЅџў<џ˜џў>џџ black gray45ўІџ qџ?№ lwd?јўџ‰џ ўxџ topxџ levelsKџ˜џЅџўўqџџ?№?№ў>џџ black gray60ў horiz |џ nўџџџ ў-џўўў g8.15џ2 function(device=""){ F if(device!="")hardcopy(fignum, width=2.5, height=2.5, pointsize=8, ) device=device) $ library(MASS); library(survival) ; oldpar <- par(mfrow = c(1, 1), mgp = c(2.75, 0.75, 0), 4 mar = c(4.1,4.1,1.1,1.1), pty="s")  on.exit(par(oldpar)) 5 hsaids <- subset(Aids2, sex=="M" & T.categ=="hs") + hsaids$days <- hsaids$death-hsaids$diag 1 hsaids$dead <- as.integer(hsaids$status=="D") = hsaids.surv <- survfit(Surv(days, dead) ~ 1, data=hsaids) - plot(hsaids.surv, col="gray", conf.int=F)  par(new=TRUE) 4 plot(hsaids.surv,col=1, conf.int=F,mark.time=F, K xlab="Days from diagnosis", ylab="Estimated survival probabality")  chw <- par()$cxy[1]  chh <- par()$cxy[2]  surv <- hsaids.surv$surv xval <- c(200,700,1400,1900) 6 hat <- approx(hsaids.surv$time, surv, xout=xval)$y 4 for(i in 1:2) arrows(xval[i], hat[i], 0, hat[i], 1 length=0.05, col="gray") / lines(rep(xval[1],2), hat[1:2], col="gray") 5 ## lines(rep(xval[3],2), hat[3:4], col="gray")  ## Offset triangle 1  chw <- par()$cxy[1] A lines(xval[c(1,2,1,1)]+650, hat[c(2,2,1,2)]+0.2,col="gray40") 7 xy1 <- c(mean(xval[c(1,1,2)]), mean(hat[c(1,2,2)])) L arrows(xy1[1], xy1[2], xy1[1]+650, xy1[2]+0.2, col="gray40", length=0.1) ) text(xval[1]-0.1*chw+650, hat[1]+0.2, > paste(round(hat[1],2)), col="gray20",cex=0.75, adj=1) ) text(xval[1]+650-0.1*chw, hat[2]+0.2, > paste(round(hat[2],2)), col="gray20",cex=0.75, adj=1) 1 text(mean(xval[1:2])+650, hat[2]+0.2-0.5*chh, ? paste(round(diff(xval[1:2]))), col="gray20", cex=0.75) P text(xval[1]+650-0.5*chw, mean(hat[1:2]+0.2), paste(round(hat[1]-hat[2],3)), 1 srt=90, adj=0.5, col="gray20", cex=0.75)  ## Offset triangle 2 H ## lines(xval[c(3,4,3,3)]+500, hat[c(4,4,3,4)]+0.15,col="gray40") = ## xy2 <- c(mean(xval[c(3,3,4)]), mean(hat[c(3,4,4)])) G ## arrows(xy2[1], xy2[2], xy2[1]+500, xy2[2]+0.15, col="gray40") 8 ## text(xval[3]+500-0.5*chw, mean(hat[3:4]+0.15), - ## paste(round(hat[3]-hat[4],3)), ; ## srt=90, adj=0.5, col="gray20", cex=0.75) 8 ## text(mean(xval[3:4])+500, hat[4]+0.15-0.5*chh, E ## paste(round(diff(xval[3:4]))), col="gray20", cex=0.75)  print(round(hat,3))  if(device!="")dev.off()  invisible()  }ў§џ ўџџџџ ўџ fignumџ@ џ@4џ@ џџўў5џ—џў5џ–џў џ џџџџ?№?№ўџџ@?шўџџ@ffffff@ffffff?ё™™™™™š?ё™™™™™šўџ sўўџџ џўў џ hsaids™џšџ &›џЅџ Mў›џœџ hsўўўў џKџ­џџўџKџ­џžџўKџ­џŸџўўў џKџ­џ џўЁџ›џKџ­џЂџў Dўўў џ hsaids.survЃџ9џЄџџ џў?№ў<џ­џўўџЏџ>џ grayІџ3џўџЇџ ўџЏџ>џ?№Іџ3џ mark.time3џџ Days from diagnosisџ Estimated survival probabalityў џuџkџKџџўvџў?№ўў џwџkџKџџўvџў@ўў џ survKџЏџБџўў џ xvalџ@i@…р@•р@Аўў џ hatKџ approxKџЏџ timeўБџ xoutВџўBџўў for iџ?№@ў arrowskџВџИџўkџГџИџўkџГџИџў length?Љ™™™™™š>џ grayўўpџaџkџВџ?№ў@ўkџГџџ?№@ўў>џ grayў џuџkџKџџўvџў?№ўўpџTџkџВџџ?№@?№?№ўў@„PўTџkџГџџ@@?№@ўў?Щ™™™™™šў>џ gray40ў џ xy1џIџkџВџџ?№?№@ўўўIџkџГџџ?№@@ўўўўўЙџkџЛџ?№ўkџЛџ@ўTџkџЛџ?№ў@„PўTџkџЛџ@ў?Щ™™™™™šў>џ gray40Кџ?Й™™™™™šўMџTџџkџВџ?№ўyџ?Й™™™™™šuџўў@„PўTџkџГџ?№ў?Щ™™™™™šў џ roundkџГџ?№ў@ўў>џ gray20'џ?ш)џ?№ўMџџTџkџВџ?№ў@„Pўyџ?Й™™™™™šuџўўTџkџГџ@ў?Щ™™™™™šў џМџkџГџ@ў@ўў>џ gray20'џ?ш)џ?№ўMџTџIџkџВџџ?№@ўўў@„PўџTџkџГџ@ў?Щ™™™™™šўyџ?рwџўў џМџ diffkџВџџ?№@ўўўўў>џ gray20'џ?шўMџџTџkџВџ?№ў@„Pўyџ?рuџўўIџTџkџГџџ?№@ўў?Щ™™™™™šўў џМџџkџГџ?№ўkџГџ@ўў@ўў srt@V€)џ?р>џ gray20'џ?шўPџМџГџ@ўўџџџ ў-џўў.џўў g8.16џ function(device=""){ 0 if(device!="")hardcopy(width=3, height=2.25, 6 pointsize=8, device=device) : oldpar <- par(mfrow = c(1, 1), mgp = c(2.5, 0.75, 0), 4 mar = c(4.1,4.1,1.1,1.1), pty="s")  on.exit(par(oldpar)) F bloodAids.coxph <- coxph(Surv(days, dead) ~ sex, data = bloodAids) + plot(cox.zph(bloodAids.coxph), pch=0.9)  if(device!="")dev.off()  }ў§$џ ўџџџџ ўџџ@ џ@4џ@ џџўў џ џџџџ?№?№ўџџ@?шўџџ@ffffff@ffffff?ё™™™™™š?ё™™™™™šўџ sўўџџ џўў џ bloodAids.coxph coxph9џЄџџ џўЅџў<џ˜џўўџ cox.zphРџў џ?ьЬЬЬЬЬЭўџџџ ў-џўўў g8.17џ function(device=""){ 0 if(device!="")hardcopy(width=3, height=2.25, 6 pointsize=8, device=device) : oldpar <- par(mfrow = c(1, 1), mgp = c(2.5, 0.75, 0), 4 mar = c(4.1,4.1,1.1,1.1), pty="s")  on.exit(par(oldpar)) F bloodAids.coxph <- coxph(Surv(days, dead) ~ sex, data = bloodAids) + plot(cox.zph(bloodAids.coxph), pch=0.9)  if(device!="")dev.off()  }ў§$џ ўџџџџ ўџџ@ џ@4џ@ џџўў џ џџџџ?№?№ўџџ@?шўџџ@ffffff@ffffff?ё™™™™™š?ё™™™™™šўџ sўўџџ џўў џРџСџ9џЄџџ џўЅџў<џ˜џўўџТџРџў џ?ьЬЬЬЬЬЭўџџџ ў-џўўў g8.2џ" function(device="") { 1 if(device!="")hardcopy(width=2.25, height=2.25, % device=device) H titl <- paste("Plot, versus concentration, of proportion of patients", G "\nnot moving. The horizontal line is the estimate of", D "\nthe proportion of moves one would expect if the", ; "\nconcentration had no effect.", sep = "") 8 oldpar <- par(mfrow = c(1, 1), mgp = c(2.25, 0.5, 0), 2 mar = c(4.1,4.1,1.1,2.1), pty="s")  on.exit(par(oldpar)) ! require(DAAG); data(anesthetic) 0 z <- table(anesthetic$nomove, anesthetic$conc)  tot <- apply(z, 2, sum)  prop <- z[2, ]/(tot) oprop <- sum(z[2, ])/sum(tot) & conc <- as.numeric(dimnames(z)[[2]]) print(prop) print(conc) ? plot(conc, prop, xlab = "Concentration", ylab = "Proportion", : xlim=c(0.5, 2.5), ylim = c(0, 1), pch = 16, axes=F)  axis(1, cex=0.9) % axis(2, at=c(0, 0.5, 1.0), cex=0.9) $ axis(2, at=c(0.25, 0.75), cex=0.9)  box()  chh <- par()$cxy[2]  chw <- par()$cxy[1] ? text(conc - 0.3 * chw, prop-sign(prop-0.5)*chh/4, paste(tot),  adj = 1, cex=0.65)  abline(h = oprop, lty = 2)  cat(titl, "\n")  if(device!="")dev.off() invisible() }ў§$џ ўџџџџ ўџџ@ џ@џџўў џ џ џ 5Plot, versus concentration, of proportion of patients 3 not moving. The horizontal line is the estimate of 0 the proportion of moves one would expect if the  concentration had no effect. sep ўў џ џџџџ?№?№ўџџ@?рўџџ@ffffff@ffffff?ё™™™™™š@ЬЬЬЬЬЭўџ sўўџџ џўў require DAAGў<џ anestheticў џ z tableKџШџ nomoveўKџШџ concўўў џ tot applyЩџ@ sumўў џ propџkџЩџ@ћўџЫџўўў џ opropџЭџkџЩџ@ћўўЭџЫџўўў џ conc’џ [[ dimnamesЩџў@ўўўPџЮџўPџаџўџаџЮџџ Concentrationџ Proportion xlimџ?р@ўgџџ?№ў џ@0ƒџ3џў(џ?№'џ?ьЬЬЬЬЬЭў(џ@*џџ?р?№ў'џ?ьЬЬЬЬЬЭў(џ@*џџ?а?шў'џ?ьЬЬЬЬЬЭў"џў џwџkџKџџў cxyў@ўў џuџkџKџџў cxyў?№ўўMџџаџyџ?г333333uџўўџЮџџyџ signџЮџ?рўўwџў@ўў џЫџў)џ?№'џ?фЬЬЬЬЬЭў‡џ hЯџqџ@ў,џ џ  ўџџџ ў-џўў.џўў g8.3џ function(device="") { @ if(device!="")hardcopy(width=2.25, height=2.25, device=device) 8 oldpar <- par(mfrow = c(1, 1), mgp = c(2.25, 0.5, 0), 2 mar = c(4.1,4.1,1.1,2.1), pty="s")  on.exit(par(oldpar)) 2 tab <- table(anesthetic$nomove, anesthetic$conc) B tot <- colSums(tab) # totals at each concentration * unique.conc <- as.numeric(colnames(tab)) 2 emplogit <- log((tab[2,]+0.5)/(tot-tab[2,]+0.5)) 6 plot(unique.conc, log((tab[2,] +0.5)/(tab[1,]+0.5)), 9 xlab = "Concentration", xlim = c(0, 2.75), xaxs="i", B ylab = "Empirical logit", ylim=c(-2, 2.4), cex=1.5, pch = 16)  prop <- tab[2, ]/tot 3 text(unique.conc, emplogit, paste(round(prop,2)), $ pos=c(2,4,2,4,4,4), cex=0.8)  abline(-6.47, 5.57)  if(device!="")dev.off() invisible() }ў§$џ ўџџџџ ўџџ@ џ@џџўў џ џџџџ?№?№ўџџ@?рўџџ@ffffff@ffffff?ё™™™™™š@ЬЬЬЬЬЭўџ sўўџџ џўў џ tabЪџKџШџ nomoveўKџШџ concўўў џЫџ colSumsзџўў џ unique.conc’џ colnamesзџўўў џ emplogitџџџTџkџзџ@ћў?рўўџTџџЫџkџзџ@ћўў?рўўўўўџйџџџџTџkџзџ@ћў?рўўџTџkџзџ?№ћў?рўўўўџ Concentrationгџџ@ў xaxs iџ Empirical logitgџџџ@ў@333333ў'џ?ј џ@0ў џЮџџkџзџ@ћўЫџўўMџйџлџ џМџЮџ@ўўjџџ@@@@@@ў'џ?щ™™™™™šў‡џџ@сGЎzсў@GЎzсHўџџџ ў-џўў.џўў g8.4џ function(device=""){ @ if(device!="")hardcopy(width=4.2, height=2.4, device=device) ? oldpar<-par(mar=c(4.6, 4.1, 1.6, 1.1), mgp=c(2.75, .75, 0),  mfrow=c(1,1))  on.exit(par(oldpar))  require(DAAG); data(frogs) G plot(northing ~ easting, data=frogs, pch=c(1,16)[frogs$pres.abs+1], D xlab="Meters east of reference point", ylab="Meters north")  if(device!="")dev.off()  invisible()  }ў§$џ ўџџџџ ўџџ@ЬЬЬЬЬЭ џ@333333џџўў џ џџџџ@ffffff@ffffff?љ™™™™™š?ё™™™™™šўџџ@?шўџџ?№?№ўўўџџ џўўЦџЧџў<џ frogsўџ9џ northing eastingў<џоџ џkџџ?№@0ўTџKџоџ pres.absў?№ўўџ Meters east of reference pointџ Meters northўџџџ ў-џўў.џўў g8.5џ function(device=""){ @ if(device!="")hardcopy(width=4.8, height=4.8, device=device) ? pairs(frogs[,4:10], oma=c(2,2,2,2), col="grey50", cex=0.75)  if(device!="")dev.off()  invisible()  }ў§$џ ўџџџџ ўџџ@333333 џ@333333џџўў pairskџоџћџ@@$ўўRџџ@@@@ў>џ grey50'џ?шўџџџ ў-џўў.џўў g8.6џ function(device=""){ A if(device!="")hardcopy(width=3.5, height=3.25, device=device) G oldpar<-par(mfrow=c(3,3),mar=c(4.6,4.1,1.1,1.1), mgp=c(2.25,.5, 0),  bty="L")  on.exit(par(oldpar))  frognam<-names(frogs) 6 for(nam in c("distance","NoOfPools","NoOfSites")){  y<-frogs[,nam] < if(nam!="distance") ylab <- "" else ylab <- "Distance" 2 plot(density(y),main="",ylab=ylab, xlab=nam)  } 6 for(nam in c("distance","NoOfPools","NoOfSites")){  y<-frogs[,nam] < if(nam!="distance") ylab <- "" else ylab <- "Distance" G plot(density(sqrt(y)),main="",xlab=paste("sqrt(",nam,")",sep=""),  ylab=ylab)  } 6 for(nam in c("distance","NoOfPools","NoOfSites")){  y<-frogs[,nam] < if(nam!="distance") ylab <- "" else ylab <- "Distance"  if (nam!="NoOfSites") % plot(density(log(y)),main="", : xlab=paste("log(",nam,")",sep=""), ylab=ylab) else ' plot(density(log(y+1)),main="", 9 xlab=paste("log(",nam,"+1)",sep=""),ylab="")  }  if(device!="")dev.off()  invisible()  }ў§$џ ўџџџџ ўџџ@  џ@ џџўў џ џџџџ@@ўџџ@ffffff@ffffff?ё™™™™™š?ё™™™™™šўџџ@?рў|џ Lўўџџ џўў џ frognam namesоџўўЗџ namџ distance NoOfPools NoOfSitesўџ џBџkџоџћчџўўџџчџ distanceў џџ ў џџ Distanceўўџ densityBџў main џџџчџўўўЗџчџџ distance NoOfPools NoOfSitesўџ џBџkџоџћчџўўџџчџ distanceў џџ ў џџ Distanceўўџшџ sqrtBџўўщџ џ џ sqrt(чџ )Хџ ўџџўўўЗџчџџ distance NoOfPools NoOfSitesўџ џBџkџоџћчџўўџџчџ distanceў џџ ў џџ Distanceўўџџчџ NoOfSitesўџшџџBџўўщџ џ џ log(чџ )Хџ ўџџўџшџџTџBџ?№ўўўщџ џ џ log(чџ +1)Хџ ўџ ўўўўџџџ ў-џўў.џўў g8.7џ function(device=""){ B if(device!="")hardcopy(width=4.25, height=4.25, device=device)  attach(frogs) B pairs(cbind(altitude,log(distance), log(NoOfPools),NoOfSites), B panel=panel.smooth, labels=c("altitude","log(distance)", > "log(NoOfPools)","NoOfSites"), 1 oma=rep(1.75,4), col="gray50", cex=0.9)  detach(frogs)  if(device!="")dev.off()  invisible()  }ў§џ ўџџџџ ўџџ@ џ@џџўў attachоџўуџŽџ altitudeџ distanceўџ NoOfPoolsў NoOfSitesў?џ[џ+џџ altitude log(distance) log(NoOfPools) NoOfSitesўRџaџ?ќ@ў>џ gray50'џ?ьЬЬЬЬЬЭў detachоџўџџџ ў-џўў.џўў g8.8џ function(device=""){ @ if(device!="")hardcopy(width=5.2, height=1.3, device=device) 6 oldpar <- par(mar=c(3.1,4.1,1.1,1.1),mfrow=c(1,4), , mgp=c(2, 0.5, 0), pty="s")  on.exit(par(oldpar)) ( if(!exists("frogs.glm"))frogs.glm <- ? glm(formula = pres.abs ~ log(distance) + log(NoOfPools) + = meanmin + meanmax, family = binomial, data = frogs) " termplot(frogs.glm,data=frogs)  if(device!="")dev.off()  invisible()  }ў§$џ ўџџџџ ўџџ@ЬЬЬЬЬЭ џ?єЬЬЬЬЬЭџџўў џ џџџџ@ЬЬЬЬЬЭ@ffffff?ё™™™™™š?ё™™™™™šўџџ?№@ўџџ@?рўџ sўўџџ џўўџ”џ exists frogs.glmўў џ frogs.glmSџ formula9џсџTџTџTџџюџўџяџўў meanminў meanmaxўўWџ_џ<џоџўўў termplotєџ<џоџўџџџ ў-џўў.џўў g8.9џ function(device=""){ < if(device!="")hardcopy(width=2, height=2, device=device) E oldpar <- par(mar=c(4.1,4.1,1.1,1.1), mgp=c(2.5,0.75,0), pty="s")  on.exit(par(oldpar))  require(DAAG)  data(ACF1) 3 plot(count~endtime, data=ACF1, pch=16, log="x")  if(device!="")dev.off()  invisible()  }ў§џ ўџџџџ ўџџ@ џ@џџўў џ џџџџ@ffffff@ffffff?ё™™™™™š?ё™™™™™šўџџ@?шўџ sўўџџ џўўЦџЧџў<џ ACF1ўџ9џ count endtimeў<џњџ џ@0џ xўџџџ ў-џўў.џўў gdumpџ 7function(fnam=NULL, prefix="~/r-book/ed2/figures/figs", K xtras=c("hardcopy","renum.fun","renum.files"), splitchar="/ch"){  if(is.null(fnam)){  path <- getwd() 7 pathtag <- strsplit(path, "/ch", fixed=TRUE)[[1]] 5 fnam <- paste(prefix, pathtag[length(pathtag)], ! ".R", sep="")  } - else fnam <- paste(prefix, fnam, sep="/") C objnames <- c(objects(pattern="^g", envir=sys.frame(0)), xtras) & cat("\nDump to file:", fnam, "\n")  print(objnames)  dump(objnames, fnam)  }ў§ fnamў prefix ~/r-book/ed2/figures/figs xtrasџ hardcopy renum.fun renum.filesў splitchar /chўџџ is.nullўџўџ џ path getwdўў џ pathtagбџ strsplitџ /ch fixed ў?№ўў џўџ џџџkџџКџџўў .RХџ ўўў џўџ џџџўџХџ /ўўў џ objnamesџ objects pattern ^g envir sys.frameўўџўў,џ  Dump to file:ўџ  ўPџџў dumpџўџўў gfileџ& 5function(width=3.75, height=3.75, color=F, trellis=F, H device=c("","pdf","ps"), path="", pointsize=c(8,5), horiz=F){  ## 1 x 1: 2.25" x 2.25"  ## 2 x 2: 2.75" x 2.75" D ## 3 x 3: 3.75" x 3.75" or 3.25" x 3.25" for simple scatterplots  ## 1 x 2: 4" x 2.25"  ## 2 x 3: 4" x 2.8"  ## 3 x 4: 4.5" x 3.25 ) if(!trellis)pointsize <- pointsize[1]  funtxt <- sys.call(1) @ fnam <- strsplit(as.character(funtxt), "(", fixed=T)[[1]][1] * dotsplit <- strsplit(fnam, "\\.")[[1]] , dotsplit[1] <- substring(dotsplit[1], 2) G prefix1 <- paste(if(nchar(dotsplit[1])==1)"0" else "", dotsplit[1],  sep="") G prefix2 <- paste(if(nchar(dotsplit[2])==1)"0" else "", dotsplit[2],  sep="") 6 if(device=="")stop("No device has been specified") 3 suffix <- switch(device, ps=".eps", pdf=".pdf") = fnam <- paste("~/r-book/second/Art/",prefix1,"-",prefix2, ! suffix, sep="")  print(fnam)  dev.out <- device[1] 6 dev.fun <- switch(dev.out, pdf=pdf, ps=postscript)  if(trellis){  library(lattice) > trellis.device(file=fnam, device=dev.fun, color = color, = width=width, height=height, horiz=horiz) L trellis.par.set(fontsize=list(text=pointsize[1], points=pointsize[2]))  } else  if (dev.out!=""){  print(c(width, height)) + dev.fun(file=fnam, paper="special", , enc="MacRoman", horiz=horiz, C width=width, height=height, pointsize=pointsize[1])  }  }ў§$џ@$ џ@2џ3џ1џ3џ$џџ  pdf psўџ 4џџ@ @ўЊџ3џўџџ”џ1џў џ4џkџ4џ?№ўўў џ funtxt sys.call?№ўў џўџkџбџџ as.characterџў (џŠџў?№ў?№ўў џ dotsplitбџџўџ \.ў?№ўў џkџџ?№ў substringkџџ?№ў@ўў џ prefix1 џџ›џ ncharkџџ?№ўў?№ў 0 ўkџџ?№ўХџ ўў џ prefix2 џџ›џџkџџ@ўў?№ў 0 ўkџџ@ўХџ ўўџ›џџ ў stop No device has been specifiedўў џ suffix switchџ ps .eps pdf .pdfўў џўџ џ ~/r-book/second/Art/џ -џџХџ ўўPџўџў џ dev.outkџџ?№ўў џ dev.funџџџџџ postscriptўўџ1џџ5џ6џў trellis.device fileўџџџ2џ2џџџ џ џЊџЊџў trellis.par.set fontsizeGџMџkџ4џ?№ўNџkџ4џ@ўўўўџџџ ўџPџџџ џўўџ џўџ paper special enc MacRomanЊџЊџџџ џ џ4џkџ4џ?№ўўўўўў gsaveџ 7function(fnam=NULL, prefix="~/r-book/ed2/figures/figs", K splitchar="/ch", xtras=c("hardcopy","renum.fun","renum.files")){  if(is.null(fnam)){  path <- getwd() 7 pathtag <- strsplit(path, "/ch", fixed=TRUE)[[1]] 5 fnam <- paste(prefix, pathtag[length(pathtag)], % ".RData", sep="")  } - else fnam <- paste(prefix, fnam, sep="/") C objnames <- c(objects(pattern="^g", envir=sys.frame(0)), xtras) & cat("\nDump to file:", fnam, "\n")  print(objnames) " save(list=objnames, file=fnam)  }ў§ўџўџџ ~/r-book/ed2/figures/figsџ /chџџ hardcopy renum.fun renum.filesўўџџџўџўџ џџџўў џџбџџџ /chџ ў?№ўў џўџ џџџkџџКџџўў .RDataХџ ўўў џўџ џџџўџХџ /ўўў џџџ џ џ ^g џ џўўџўў,џ  Dump to file:ўџ  ўPџџў saveGџџ џўџўўџџ4 =function(width=3.75, height=3.75, color=FALSE, trellis=FALSE, H device=c("","pdf","ps"), path="~/r-book/ed2/Art/", file=NULL, D format=c("nn-nn", "name"), split="\\.", pointsize=c(8,4),  fonts=NULL,  horiz=FALSE, ...){ ) if(!trellis)pointsize <- pointsize[1]  funtxt <- sys.call(1) B nam <- strsplit(as.character(funtxt), "(", fixed=TRUE)[[1]][1] 3 suffix <- switch(device, ps=".eps", pdf=".pdf") N if(is.character(path) & nchar(path)>1 & substring(path, nchar(path))!="/") & path <- paste(path, "/", sep="") - if(is.null(file)) if(format[1]=="nn-nn"){ C if(!is.null(split))dotsplit <- strsplit(nam, split)[[1]] else  dotsplit <- nam 8 if(length(dotsplit)==1)dotsplit <- c("", dotsplit) E nn2 <- paste(if(nchar(dotsplit[2])==1)"0" else "", dotsplit[2],  sep="")  if(nchar(dotsplit[1])>0){ O numstart <- which(unlist(strsplit(dotsplit[1], "")) %in% paste(0:9))[1] / nn1 <- substring(dotsplit[1], numstart) G nn1 <- paste(if(nchar(nn1) == 1) "0" else "", nn1, "-", sep="")  } else nn1 <- "" % file <- paste(nn1, nn2, sep="")  } else file <- nam L if(nchar(file)>4 & substring(file, nchar(file)-nchar(suffix)+1)==suffix)  suffix <- "" - file <- paste(path, file, suffix, sep="") : print(paste("Output will be directed to file:", file))  dev.out <- device[1] 6 dev.fun <- switch(dev.out, pdf=pdf, ps=postscript)  if(trellis){  library(lattice)  if(device=="ps") 1 trellis.device(file=file, device=dev.fun, ? color = color, horiz=horiz, fonts=fonts, < width=width, height=height, ...) else < trellis.device(file=file, device=dev.fun, fonts=fonts, D color = color, width=width, height=height, ...) R trellis.par.set(list(fontsize=list(text=pointsize[1], points=pointsize[2]))) } else  if (dev.out!=""){  print(c(width, height))  if(device=="ps") F dev.fun(file=file, paper="special", horiz=horiz, fonts=fonts, M width=width, height=height, pointsize=pointsize[1], ...) else 6 dev.fun(file=file, paper="special", fonts=fonts, L width=width, height=height, pointsize=pointsize[1], ...)  } D if(trellis)trellis.par.set(list(fontsize=list(text=pointsize[1], < points=pointsize[2])))  }ў§џ@ џ@2џ 1џ џџ  pdf psўџ ~/r-book/ed2/Art/ џў formatџ nn-nn nameў split \.4џџ@ @ў fontsўЊџ Cџћў srcref  ) srcfileђ encoding native.enc timestampAбрЧзР class POSIXt POSIXctў filename /tmp/johnm.hardcopy.R wd /Users/johnm/r/ch8ўў/џ srcfileў/џ srcrefў +џ,џ/џ srcrefў   B+џ,џ/џ srcrefў   3+џ,џ/џ srcrefў   &+џ,џ/џ srcrefў  +џ,џ/џ srcrefў +џ,џ/џ srcrefў -+џ,џ/џ srcrefў :+џ,џ/џ srcrefў +џ,џ/џ srcrefў 6+џ,џ/џ srcrefў  2+џ,џ/џ srcrefў 34<+џ,џ/џ srcrefў+џ,џўџџ”џ1џў џ4џkџ4џ?№ўўў џџџ?№ўў џчџkџбџџџџў (џ ў?№ў?№ўў џџџџџ .epsџ .pdfўўџЎџЎџ is.characterџў >џџў?№ўўџџџџџўў /ўў џџ џџ /Хџ ўўўџџ џўџ›џkџ'џ?№ў nn-nnў*џ +џ,џ/џ srcrefў 8+џ,џ/џ srcrefў +џ,џ/џ srcrefў +џ,џ/џ srcrefў %+џ,џ/џ srcrefў+џ,џўџџ”џџ(џўў џџбџџчџ(џў?№ўў џџчџўўџ›џКџџў?№ў џџџ џўўў џ nn2 џџ›џџkџџ@ўў?№ў 0 ўkџџ@ўХџ ўўџ3џџkџџ?№ўўў*џ  O+џ,џ/џ srcrefў  /+џ,џ/џ srcrefў  G+џ,џ/џ srcrefў+џ,џўџ џ numstartkџZџ %in% unlistџkџџ?№ў ўў џџ@"ўўўў?№ўў џ nn1џkџџ?№ў5џўў џ8џ џџ›џџ8џў?№ў 0 ў8џ -Хџ ўўў џ8џ ўў џ џ џ8џ4џХџ ўўў џ џчџўўўџЎџ3џџ џў@ў›џџ џTџџџ џўџџўў?№ўўџўў џџ ўў џ џ џџ џџХџ ўўPџ џ Output will be directed to file: џўў џџkџџ?№ўў џџџџџџџџўўџ1џ*џ !!+џ,џ/џ srcrefў "'D+џ,џ/џ srcrefў ))R+џ,џ/џ srcrefў+џ,џўџ5џ6џўџ›џџ psўџ џ џџџ2џ2џЊџЊџ)џ)џџџ џ џCџўџ џ џџџ)џ)џ2џ2џџџ џ џCџўў!џGџ"џGџMџkџ4џ?№ўNџkџ4џ@ўўўўўџџџ ў*џ ,,+џ,џ/џ srcrefў -1F+џ,џ/џ srcrefў+џ,џўџPџџџ џўўџ›џџ psўџ џ џ#џ specialЊџЊџ)џ)џџџ џ џ4џkџ4џ?№ўCџўџ џ џ#џ special)џ)џџџ џ џ4џkџ4џ?№ўCџўўўўўџ1џ!џGџ"џGџMџkџ4џ?№ўNџkџ4џ@ўўўўўў renum.funџ Dfunction(from.prefix="g", to.prefix="g",from=20:7, to=21:8, doit=F){  path <- getwd() 5 pathtag <- strsplit(path, "/ch", fixed=TRUE)[[1]] & endbit <- pathtag[length(pathtag)] 5 from.prefix <- paste(from.prefix, endbit, sep="") 1 to.prefix <- paste(to.prefix, endbit, sep="")  for(i in 1:length(to)) M {txt<-paste(to.prefix,".",to[i]," <- ", from.prefix,".",from[i],sep="") 7 if(doit)eval(parse(text=txt),envir=sys.frame(0))  print(txt)  }  }ў§ from.prefix g to.prefix g$ fromџ@4@ў$ toџ@5@ ў$ doit3џўџ џџџўў џџбџџџ /chџ ў?№ўў џ endbitkџџКџџўўў џ:џ џ:џ?џХџ ўў џ;џ џ;џ?џХџ ўўЗџИџџ?№Кџ=џўўџ џ txt џ;џ .kџ=џИџў  <- :џ .kџ<џИџўХџ ўўџ>џ eval parseMџ@џў џ џўўўPџ@џўўўў renum.filesџ Hfunction(from.prefix="~/r-book/ed2/Art/", to.prefix="~/r-book/ed2/Art/", ' from=20:7, to=21:8, doit=F){  path <- getwd() 5 pathtag <- strsplit(path, "/ch", fixed=TRUE)[[1]] & endbit <- pathtag[length(pathtag)] 2 if(nchar(endbit)==2)chap <- paste(endbit) else ' chap <- paste("0",endbit,sep="") 8 from.prefix <- paste(from.prefix, chap, "-", sep="") 4 to.prefix <- paste(to.prefix, chap, "-", sep="")  for(i in 1:length(from)){ 8 if (from[i]<=9) ltext <- paste("0",from[i],sep="") " else ltext <- paste(from[i]) 4 if (to[i]<=9) rtext <- paste("0",to[i],sep="") , else rtext <- paste(to[i]) 8 txt<-paste("mv ", from.prefix, ltext, ".eps", " ", 2 to.prefix, rtext, ".eps", sep="") ; backup<-paste("cp ", from.prefix, ltext, ".eps", " ", # "archive", sep="")  if(doit)system(backup)  if(doit)system(txt)  print(backup)  print(txt)  }  }ў§:џ ~/r-book/ed2/Art/;џ ~/r-book/ed2/Art/$<џџ@4@ў$=џџ@5@ ў$>џ3џўџ џџџўў џџбџџџ /chџ ў?№ўў џ?џkџџКџџўўўџ›џџ?џў@ў џ chap џ?џўў џDџ џ 0?џХџ ўўў џ:џ џ:џDџ -Хџ ўў џ;џ џ;џDџ -Хџ ўўЗџИџџ?№Кџ<џўўџџ <=kџ<џИџў@"ў џ ltext џ 0kџ<џИџўХџ ўў џFџ џkџ<џИџўўўўџEџkџ=џИџў@"ў џ rtext џ 0kџ=џИџўХџ ўў џGџ џkџ=џИџўўўў џ@џ џ mv :џFџ .eps  ;џGџ .epsХџ ўў џ backup џ cp :џFџ .eps   archiveХџ ўўџ>џ systemHџўўџ>џIџ@џўўPџHџўPџ@џўўўўў