calibrate/0000755000176000001440000000000012213560775012240 5ustar ripleyuserscalibrate/inst/0000755000176000001440000000000012213365063013206 5ustar ripleyuserscalibrate/inst/doc/0000755000176000001440000000000012213365067013757 5ustar ripleyuserscalibrate/inst/doc/CalibrationGuide.R0000644000176000001440000003324312213365067017314 0ustar ripleyusers### R code from vignette source 'CalibrationGuide.Rnw' ### Encoding: ISO8859-1 ################################################### ### code chunk number 1: CalibrationGuide.Rnw:79-92 ################################################### prefig <- function(){ data(goblets) X <- goblets plot(X[,1],X[,2],pch=19,cex=0.5,xlab=expression(X[1]), ylab=expression(X[2]),xlim=c(5,25),ylim=c(5,25),asp=1) m <- apply(cbind(X[,1],X[,2]),2,mean) textxy(X[,1],X[,2],1:25,m=m,cex=0.75) points(m[1],m[2],col="red",pch=19,cex=0.5) abline(h = m[2]) abline(v = m[1]) } options("SweaveHooks"=list(aap=prefig)) options("width"=60) ################################################### ### code chunk number 2: noot ################################################### library(calibrate) ################################################### ### code chunk number 3: CalibrationGuide.Rnw:113-115 ################################################### data(goblets) X <- goblets ################################################### ### code chunk number 4: CalibrationGuide.Rnw:125-130 ################################################### plot(X[,1],X[,2],pch=19,cex=0.5,xlab=expression(X[1]),ylab=expression(X[2]), xlim=c(5,25),ylim=c(5,25),asp=1) m <- apply(X[,1:2],2,mean) textxy(X[,1],X[,2],1:25,m=m,cex=0.75) origin(m) ################################################### ### code chunk number 5: CalibrationGuide.Rnw:137-143 ################################################### getOption("SweaveHooks")[["aap"]]() Xc <- scale(X,center=TRUE,scale=FALSE) b <- solve(t(Xc[,1:2])%*%Xc[,1:2])%*%t(Xc[,1:2])%*%Xc[,5] print(b) bscaled <- 20*b arrows(m[1],m[2],m[1]+bscaled[1],m[2]+bscaled[2],col="blue",length=0.1) arrows(m[1],m[2],m[1]-bscaled[1],m[2]-bscaled[2],length=0,lty="dashed",col="blue") ################################################### ### code chunk number 6: CalibrationGuide.Rnw:155-161 ################################################### getOption("SweaveHooks")[["aap"]]() print(range(X[,5])) yc <- scale(X[,5],scale=FALSE) tm <- seq(2,10,by=1) tmc <- tm - mean(X[,5]) Calibrate.X5<-calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.3,axislab="X_5", labpos=4,cex.axislab=1) ################################################### ### code chunk number 7: CalibrationGuide.Rnw:198-203 ################################################### getOption("SweaveHooks")[["aap"]]() yc <- scale(X[,5],scale=FALSE) tm <- seq(2,10,by=1) tmc <- tm - mean(X[,5]) Calibrate.X5<-calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.3,axislab="X_5",labpos=4, cex.axislab=1,shiftdir="right") ################################################### ### code chunk number 8: CalibrationGuide.Rnw:220-229 ################################################### getOption("SweaveHooks")[["aap"]]() opar <- par('xpd'=TRUE) tm <- seq(3,8,by=1) tmc <- (tm - mean(X[,5])) Calibrate.rightmargin.X5 <- calibrate(c(0,1),yc,tmc,Xc[,1:2],tmlab=tm,m=m, axislab="X_5",tl=0.5, shiftvec=c(par('usr')[2]-mean(X[,1]),0), shiftfactor=1,where=2, laboffset=c(1.5,1.5),cex.axislab=1) par(opar) ################################################### ### code chunk number 9: CalibrationGuide.Rnw:252-260 ################################################### getOption("SweaveHooks")[["aap"]]() tm <- seq(2,10,by=1) tmc <- (tm - mean(X[,5])) Calibrate.X5 <- calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,axislab="X_5",tl=0.5, dp=TRUE,labpos=4) tm <- seq(2,10,by=0.1) tmc <- (tm - mean(X[,5])) Calibrate.X5 <- calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.25,verb=FALSE, lm=FALSE) ################################################### ### code chunk number 10: CalibrationGuide.Rnw:276-298 ################################################### getOption("SweaveHooks")[["aap"]]() opar <- par('xpd'=TRUE) tm <- seq(5,25,by=5) tmc <- (tm - mean(X[,1])) yc <- scale(X[,1],scale=FALSE) Calibrate.X1 <- calibrate(c(1,0),yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.5, axislab="X_1",cex.axislab=1,showlabel=FALSE, shiftvec=c(0,-(m[2]-par("usr")[3])),shiftfactor=1,reverse=TRUE) tm <- seq(5,25,by=1); tmc <- (tm - mean(X[,1])) Calibrate.X1 <- calibrate(c(1,0),yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.25, axislab="X_1",cex.axislab=1,showlabel=FALSE, shiftvec=c(0,-(m[2]-par("usr")[3])),shiftfactor=1,reverse=TRUE, verb=FALSE,lm=FALSE) yc <- scale(X[,2],scale=TRUE) tm <- seq(-3,1,by=1) Calibrate.X2 <- calibrate(c(0,1),yc,tm,Xc[,1:2],tmlab=tm,m=m,tl=0.6, axislab="X_2",cex.axislab=1,showlabel=FALSE, shiftvec=c(-(mean(X[,1])-par('usr')[1]),0),shiftfactor=1,verb=TRUE,lm=TRUE) tm <- seq(-3,1.5,by=0.1) Calibrate.X2 <- calibrate(c(0,1),yc,tm,Xc[,1:2],tmlab=tm,m=m,tl=0.3, axislab="X_2",cex.axislab=1,showlabel=FALSE, shiftvec=c(-(mean(X[,1])-par('usr')[1]),0),shiftfactor=1,verb=FALSE,lm=FALSE) par(opar) ################################################### ### code chunk number 11: CalibrationGuide.Rnw:327-346 ################################################### # PCA and Biplot construction pca.results <- princomp(X,cor=FALSE) Fp <- pca.results$scores Gs <- pca.results$loadings plot(Fp[,1],Fp[,2],pch=16,asp=1,xlab="PC 1",ylab="PC 2",cex=0.5) textxy(Fp[,1],Fp[,2],rownames(X),cex=0.75) arrows(0,0,15*Gs[,1],15*Gs[,2],length=0.1) textxy(15*Gs[,1],15*Gs[,2],colnames(X),cex=0.75) # Calibration of X_3 ticklab <- seq(5,30,by=5) ticklabc <- ticklab-mean(X[,3]) yc <- (X[,3]-mean(X[,3])) g <- Gs[3,1:2] Calibrate.X3 <- calibrate(g,yc,ticklabc,Fp[,1:2],ticklab,tl=0.5, axislab="X3",cex.axislab=0.75,where=1,labpos=4) ticklab <- seq(5,30,by=1) ticklabc <- ticklab-mean(X[,3]) Calibrate.X3.fine <- calibrate(g,yc,ticklabc,Fp[,1:2],ticklab,lm=FALSE,tl=0.25, verb=FALSE,cex.axislab=0.75,where=1,labpos=4) ################################################### ### code chunk number 12: CalibrationGuide.Rnw:353-376 ################################################### # PCA and Biplot construction pca.results <- princomp(X,cor=TRUE) Fp <- pca.results$scores Ds <- diag(pca.results$sdev) Fs <- Fp%*%solve(Ds) Gs <- pca.results$loadings Gp <- Gs%*%Ds #plot(Fs[,1],Fs[,2],pch=16,asp=1,xlab="PC 1",ylab="PC 2",cex=0.5) #textxy(Fs[,1],Fs[,2],rownames(X)) plot(Gp[,1],Gp[,2],pch=16,cex=0.5,xlim=c(-1,1),ylim=c(-1,1),asp=1, xlab="1st principal axis",ylab="2nd principal axis") arrows(0,0,Gp[,1],Gp[,2],length=0.1) textxy(Gp[,1],Gp[,2],colnames(X),cex=0.75) ticklab <- c(seq(-1,-0.2,by=0.2),seq(0.2,1.0,by=0.2)) R <- cor(X) y <- R[,5] g <- Gp[5,1:2] Calibrate.X5 <- calibrate(g,y,ticklab,Gp[,1:2],ticklab,lm=TRUE,tl=0.05,dp=TRUE, labpos=2,cex.axislab=0.75,axislab="X_5") ticklab <- seq(-1,1,by=0.1) Calibrate.X5 <- calibrate(g,y,ticklab,Gp[,1:2],ticklab,lm=FALSE,tl=0.05,verb=FALSE) ticklab <- seq(-1,1,by=0.01) Calibrate.X5 <- calibrate(g,y,ticklab,Gp[,1:2],ticklab,lm=FALSE,tl=0.025,verb=FALSE) ################################################### ### code chunk number 13: CalibrationGuide.Rnw:389-391 ################################################### print(R) print(cbind(R[,5],Calibrate.X5$yt)) ################################################### ### code chunk number 14: CalibrationGuide.Rnw:430-472 ################################################### library(MASS) data(calves) ca.results <- corresp(calves,nf=2) Fs <- ca.results$rscore Gs <- ca.results$cscore Ds <- diag(ca.results$cor) Fp <- Fs%*%Ds Gp <- Gs%*%Ds plot(Gs[,1],Gs[,2],pch=16,asp=1,cex=0.5,xlab="1st principal axis", ylab="2nd principal axis") textxy(Gs[,1],Gs[,2],colnames(calves),cex=0.75) points(Fp[,1],Fp[,2],pch=16,cex=0.5) textxy(Fp[,1],Fp[,2],rownames(calves),cex=0.75) origin() arrows(0,0,Gs[,1],Gs[,2]) P <- as.matrix(calves/sum(calves)) r <- apply(P,1,sum) k <- apply(P,2,sum) Dc <- diag(k) Dr <- diag(r) RP <- solve(Dr)%*%P print(RP) CRP <- RP - ones(nrow(RP), 1) %*% t(k) TCRP <- CRP%*%solve(Dc) y <- TCRP[,3] g <- Gs[3,1:2] ticklab <- c(0,seq(0,1,by=0.2)) ticklabs <- (ticklab - k[3])/k[3] Calibrate.AI <- calibrate(g,y,ticklabs,Fp[,1:2],ticklab,lm=TRUE,tl=0.10, weights=Dr,axislab="AI",labpos=4,dp=TRUE) ticklab <- c(0,seq(0,1,by=0.1)) ticklabs <- (ticklab - k[3])/k[3] Calibrate.AI <- calibrate(g,y,ticklabs,Fp[,1:2],ticklab,lm=FALSE,tl=0.10, weights=Dr,verb=FALSE) ticklab <- c(0,seq(0,1,by=0.01)) ticklabs <- (ticklab - k[3])/k[3] Calibrate.AI <- calibrate(g,y,ticklabs,Fp[,1:2],ticklab,lm=FALSE,tl=0.05, weights=Dr,verb=FALSE) ################################################### ### code chunk number 15: CalibrationGuide.Rnw:490-521 ################################################### data(heads) X <- cbind(heads$X1,heads$X2) Y <- cbind(heads$Y1,heads$Y2) Rxy<- cor(X,Y) Ryx<- t(Rxy) Rxx<- cor(X) Ryy<- cor(Y) cca.results <-canocor(X,Y) plot(cca.results$Gs[,1],cca.results$Gs[,2],pch=16,asp=1,xlim=c(-1,1),ylim=c(-1,1), xlab=expression(V[1]),ylab=expression(V[2])) arrows(0,0,cca.results$Fp[,1],cca.results$Fp[,2],length=0.1) arrows(0,0,cca.results$Gs[,1],cca.results$Gs[,2],length=0.1) textxy(cca.results$Fp[1,1],cca.results$Fp[1,2],expression(X[1]),cex=0.75) textxy(cca.results$Fp[2,1],cca.results$Fp[2,2],expression(X[2]),cex=0.75) textxy(cca.results$Gs[1,1],cca.results$Gs[1,2],expression(Y[1]),cex=0.75) textxy(cca.results$Gs[2,1],cca.results$Gs[2,2],expression(Y[2]),cex=0.75) circle(1) ticklab <- seq(-1,1,by=0.2) y <- Rxy[,2] g <- cca.results$Gs[2,1:2] Cal.Cor.Y2 <- calibrate(g,y,ticklab,cca.results$Fp[,1:2],ticklab,lm=TRUE,tl=0.05, dp=TRUE,reverse=TRUE,weights=solve(Rxx), axislab="Y_2",cex.axislab=0.75,showlabel=FALSE) ################################################### ### code chunk number 16: CalibrationGuide.Rnw:524-557 ################################################### plot(cca.results$Gs[,1],cca.results$Gs[,2],pch=16,asp=1,xlim=c(-2,2),ylim=c(-2,2), xlab=expression(V[1]),ylab=expression(V[2])) #arrows(0,0,cca.results$Fp[,1],cca.results$Fp[,2],length=0.1) #arrows(0,0,cca.results$Gs[,1],cca.results$Gs[,2],length=0.1) textxy(cca.results$Fp[1,1],cca.results$Fp[1,2],expression(X[1])) textxy(cca.results$Fp[2,1],cca.results$Fp[2,2],expression(X[2])) textxy(cca.results$Gs[1,1],cca.results$Gs[1,2],expression(Y[1])) textxy(cca.results$Gs[2,1],cca.results$Gs[2,2],expression(Y[2])) points(cca.results$V[,1],cca.results$V[,2],pch=16,cex=0.5) textxy(cca.results$V[,1],cca.results$V[,2],1:nrow(X),cex=0.75) ticklab <- seq(135,160,by=5) ticklabc <- ticklab-mean(Y[,2]) ticklabs <- (ticklab-mean(Y[,2]))/sqrt(var(Y[,2])) y <- (Y[,2]-mean(Y[,2]))/sqrt(var(Y[,2])) Fr <- cca.results$V[,1:2] g <- cca.results$Gs[2,1:2] #points(cca.results$V[,1],cca.results$V[,2],cex=0.5,pch=19,col="red") #textxy(cca.results$V[,1],cca.results$V[,2],rownames(Xn)) Cal.Data.Y2 <- calibrate(g,y,ticklabs,Fr,ticklab,lm=TRUE,tl=0.1,dp=TRUE, reverse=TRUE,verb=TRUE,axislab="Y_2", cex.axislab=0.75,showlabel=FALSE) #cca.results<-lm.gls(Rxy[,5]~-1+Fr,W=solve(Rxx)) ################################################### ### code chunk number 17: CalibrationGuide.Rnw:577-594 ################################################### data(linnerud) X <- linnerud[,1:3] Y <- linnerud[,4:6] rda.results <- rda(X,Y) plot(rda.results$Fs[,1],rda.results$Fs[,2],pch=16,asp=1,xlim=c(-2,2),ylim=c(-2,2), cex=0.5,xlab="1st principal axis",ylab="2nd principal axis") arrows(0,0,2*rda.results$Gyp[,1],2*rda.results$Gyp[,2],length=0.1) textxy(rda.results$Fs[,1],rda.results$Fs[,2],rownames(X),cex=0.75) textxy(2*rda.results$Gyp[,1],2*rda.results$Gyp[,2],colnames(Y),cex=0.75) y <- rda.results$Yh[,3] g <- rda.results$Gyp[3,1:2] Fr <- rda.results$Fs[,1:2] ticklab <- c(seq(-0.6,-0.1,by=0.1),seq(0.1,0.6,by=0.1)) Calibrate.Yhat3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=TRUE,dp=TRUE,tl=0.1, axislab="Sauts",showlabel=FALSE) ################################################### ### code chunk number 18: CalibrationGuide.Rnw:597-621 ################################################### plot(rda.results$Gxs[,1],rda.results$Gxs[,2],pch=16,asp=1,xlim=c(-2,2), ylim=c(-2,2),cex=0.5,xlab="1st principal axis", ylab="2nd principal axis") arrows(0,0,rda.results$Gxs[,1],rda.results$Gxs[,2],length=0.1) arrows(0,0,rda.results$Gyp[,1],rda.results$Gyp[,2],length=0.1) textxy(rda.results$Gxs[,1],rda.results$Gxs[,2],colnames(X),cex=0.75) textxy(rda.results$Gyp[,1],rda.results$Gyp[,2],colnames(Y),cex=0.75) y <- rda.results$B[,3] g <- rda.results$Gyp[3,1:2] Fr <- rda.results$Gxs[,1:2] ticklab <- seq(-0.4,0.4,0.2) W <-cor(X) Calibrate.Y3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=TRUE,dp=TRUE,tl=0.1, weights=W,axislab="Sauts",showlabel=FALSE) ticklab <- seq(-0.4,0.4,0.1) Calibrate.Y3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=FALSE,tl=0.05,verb=FALSE, weights=W) ticklab <- seq(-0.4,0.4,0.01) Calibrate.Y3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=FALSE,tl=0.025,verb=FALSE, weights=W) calibrate/inst/doc/CalibrationGuide.Rnw0000644000176000001440000010314012213365067017653 0ustar ripleyusers\documentclass[a4paper]{article} % \VignetteIndexEntry{A R package for calibration of biplot and scatterplot axis.} % \VignetteDepends{graphics,stats} % \VignetteKeyword{multivariate} % Documentation for the Calibrate package \usepackage[english]{babel} \usepackage{Sweave} %\usepackage{Rd} \usepackage{url} \usepackage{wrapfig} \usepackage{hyperref} \usepackage[utf8]{inputenc} \setlength{\parindent}{0cm} \newcommand{\bF}{\ensuremath{\mathbf F}} \newcommand{\bG}{\ensuremath{\mathbf G}} \begin{document} \begin{center} \sf {\sf \bf \Large A Guide to Scatterplot and Biplot Calibration}\\ \vspace{4mm} {\sf \normalsize {\tt version 1.7.2}}\\%\normalsize \vspace{4mm} {\bf \large Jan Graffelman}\\ \vspace{4mm} \rm \large Department of Statistics and Operations Research\\ Universitat Polit\`ecnica de Catalunya\\ Avinguda Diagonal 647, 08028 Barcelona, Spain.\\ {\it email:} jan.graffelman@upc.edu\\ \vspace{4mm} {\sc September 2012} \end{center} \section{Introduction} This guide gives detailed instructions on how to calibrate axes in scatterplots and biplots obtained in the statistical environment R~\cite{RRR} by using the package {\tt calibrate}. By calibration we refer to the procedure of drawing a (linear) scale along an axis in a plot with tick marks and numeric labels. In an ordinary scatter plot of two variables $x$ and $y$ two calibrated perpendicular scales are typically automatically produced by the routine used for plotting the two variables. However, scatter plots can be extended with additional variables that are represented on oblique additional axes. The software described in this guide can be used to create calibrated scales on these oblique additional axes. Moreover, in a multivariate setting with more than two variables, raw data matrices, correlation matrices, contingency tables, regression coefficients, etc. are often represented graphically by means of biplots~\cite{Gabriel}. Biplots also contain oblique axes representing variables. The described software can also be used to construct scales on biplot axes.\\ The outline of this guide is as follows. In Section~\ref{sec:install} we indicate how the R package {\tt calibrate} can be installed. Section~\ref{sec:scatter} describes in detail how to calibrate additional axes in scatter plots. Section~\ref{sec:biplot} treats the calibration of biplot axes. Several subsections follow with detailed instructions of how to calibrate biplot axis in principal component analysis (PCA, Section~\ref{sec:pca}), correspondence analysis (CA. Section~\ref{sec:ca}), canonical correlation analysis (CCA, Section~\ref{sec:cca}) and redundancy analysis (RDA, Section~\ref{sec:rda}). The online documentation of the main routine for calibration {\tt calibrate} is referenced in Section~\ref{sec:online}.\\ This guide does not provide the theory for the construction of scales on scatterplot and biplot axes. For a theoretical account of biplot calibration, we refer to Graffelman \& van Eeuwijk~(2005) and to Gower and Hand~(1996). If you appreciate this software then please cite the following paper in your work:\\ Graffelman, J. \& van Eeuwijk, F.A. (2005) Calibration of multivariate scatter plots for exploratory analysis of relations within and between sets of variables in genomic research {\it Biometrical Journal}, {\bf 47}(6) pp. 863-879. \href{http://dx.doi.org/10.1002/bimj.200510177}{(clic here to access the paper)} \section{Installation} \label{sec:install} <>= prefig <- function(){ data(goblets) X <- goblets plot(X[,1],X[,2],pch=19,cex=0.5,xlab=expression(X[1]), ylab=expression(X[2]),xlim=c(5,25),ylim=c(5,25),asp=1) m <- apply(cbind(X[,1],X[,2]),2,mean) textxy(X[,1],X[,2],1:25,m=m,cex=0.75) points(m[1],m[2],col="red",pch=19,cex=0.5) abline(h = m[2]) abline(v = m[1]) } options("SweaveHooks"=list(aap=prefig)) options("width"=60) @ Packages in R can be installed inside the program with the option "Packages" in the main menu and then choosing "Install package" and picking the package "calibrate". Typing: <>= library(calibrate) @ will, among others, make the function {\tt calibrate, canocor} and {\tt rda} available. Several small data sets, also the ones used in this document, are included in the package ({\tt calves, goblets, heads, linnerud} and {\tt storks}). \section{Calibration of Scatterplot axes} \label{sec:scatter} We consider a archaeological data set concerning 6 size measurements ($X_1, \ldots, X_6$) on 25 goblets. This data was published by Manly~(1989). The data can be loaded with the {\tt data} instruction. <>= data(goblets) X <- goblets @ \subsection*{Oblique additional axes in a scatterplot} We construct a scatterplot of $X_1$ versus $X_2$ and center a set of coordinate axes on the point $(\overline{x}_1,\overline{x}_2)$ with the function {\tt origin}. \setkeys{Gin}{width=\textwidth} <>= plot(X[,1],X[,2],pch=19,cex=0.5,xlab=expression(X[1]),ylab=expression(X[2]), xlim=c(5,25),ylim=c(5,25),asp=1) m <- apply(X[,1:2],2,mean) textxy(X[,1],X[,2],1:25,m=m,cex=0.75) origin(m) @ Next, we perform the regression of $X_5$ onto $X_1$ and $X_2$ (all variables being centered) in order to obtain an additional axis for $X_5$. We represent $X_5$ in the plot as a simple arrow whose coordinates are given by the regression coefficients: <>= Xc <- scale(X,center=TRUE,scale=FALSE) b <- solve(t(Xc[,1:2])%*%Xc[,1:2])%*%t(Xc[,1:2])%*%Xc[,5] print(b) bscaled <- 20*b arrows(m[1],m[2],m[1]+bscaled[1],m[2]+bscaled[2],col="blue",length=0.1) arrows(m[1],m[2],m[1]-bscaled[1],m[2]-bscaled[2],length=0,lty="dashed",col="blue") @ A direction that is optimal in the least squares sense for $X_5$ is given by the vector of regression coefficients~\cite{Graffel13}. To make this direction more visible, we multiplied it by a constant (20). It is clear that the direction of increase for $X_5$ runs approximately North-East across the scatterplot. We now proceed to calibrate this direction with a scale for $X_5$. In order to choose sensible values for the scale of $X_5$, we first inspect the range of variation of $X_5$, and then choose a set of values we want to mark off on the scale ({\tt tm}) and also compute the deviations of these values from the mean ({\tt tmc}). We specify a tick length of 0.3 ({\tt tl=0.3}). Depending on the data, some values of {\tt tl} typically have to be tried to see how to obtain a nice scale. <>= print(range(X[,5])) yc <- scale(X[,5],scale=FALSE) tm <- seq(2,10,by=1) tmc <- tm - mean(X[,5]) Calibrate.X5<-calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.3,axislab="X_5", labpos=4,cex.axislab=1) @ The numerical output from routine {\tt calibrate} shows that one unit along the axis for $X_5$ occupies 2.47 units in the plotting frame. The axis for $X_5$ makes an angle of 17.65 degrees with the positive x-axis. The calibration factor is 6.12. Multiplying the vector of regressions coefficients by this factor yields a vector that represents a unit change in the scale of $X_5$. E.g. for this data we have that the vector $6.12 \cdot (0.385, 0.123) = (2.358, 0.751)$ represents a unit change. This vector has norm $\sqrt{2.358^2 + 0.751^2} = 2.47$. Other calibration factors may be specified by using parameter {\tt alpha}. If {\tt alpha} is left unspecified the optimal value computed by least squares will be used. The goodness-of-fit of $X_5$ is 0.513. This means that 51.3\% of the variance of $X_5$ can be explained by a regression onto $X_1$ and $X_2$ ($R^2 = 0.513$). The goodness-of-scale has the same value. The goodness-of-scale is only relevant if we modify parameter {\tt alpha}. {\tt Calibrate.X5} is a list object containing all calibration results (calibration factor, fitted values according to the scale used, tick marker positions, etc.). \subsubsection*{Shifting a calibrated axis} Using many calibrated axes in a plot, all passing through the origin, leads to dense plots that become unreadable. It is therefore a good idea to shift calibrated axes towards the margins of the plot. This keeps the central cloud of data points clear and relegates all information on scales to the margins of the graph. There are two natural positions for a shifted axis: just above the largest data point in a direction perpendicular to the axis being calibrated, or just below the smallest data point in the perpendicular direction. The arguments {\tt shiftdir, shiftfactor} and {\tt shiftvec} can be used to control the shifting of a calibrated axis. {\tt shiftvec} allows the user to specify the shift vector manually. This is normally not needed, and good positions for an axis can be found by using only {\tt shiftdir} and {\tt shiftfactor}. Argument {\tt shiftdir} can be set to {\tt 'right'} or {\tt 'left'} and indicates in which direction the axis is to be shifted, with respect to the direction of increase of the calibrated axis. Setting {\tt shiftdir} shifts the axis automatically just above or below the most outlying data point in the direction perpendicular to the vector being calibrated. In order to move the calibrated axis farther out or to pull it more in, {\tt shiftfactor} can be used. Argument {\tt shiftfactor} stretches or shrinks the shift vector for the axis. A {\tt shiftfactor} larger than 1 moves the axis outwards, and a {\tt shiftfactor} smaller than 1 pulls the axis towards the origin of the plot. If set to 1 exactly, the shifted axis will cut through the most outlying data point. The default {\tt shiftfactor} is 1.05. We redo the previous plot, shifting the calibrated axis below the cloud of points, which is to the right w.r.t. the direction of increase of the variable. <>= yc <- scale(X[,5],scale=FALSE) tm <- seq(2,10,by=1) tmc <- tm - mean(X[,5]) Calibrate.X5<-calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.3,axislab="X_5",labpos=4, cex.axislab=1,shiftdir="right") @ The shift of the axis does not affect the interpretation of the plot, because the projections of the points onto the axis remain the same. \subsubsection*{Second vertical axis in a scatterplot} The oblique direction in the previous section is the preferred direction for $X_5$, as this direction is optimal in the least squares sense. However, if desired, additional variables can also be represented as a second vertical axis on the right of the plot, or as a second horizontal axis on the top of the plot. We now proceed to construct a second vertical axis on the right hand of the scatter plot for $X_5$. This can be done by setting the vector to be calibrated (first argument of routine {\tt calibrate}) to the (0,1) vector. By specifying a shiftvector explicitly ({\tt shiftvec}), the axis can be shifted. For this data, setting {\tt shiftvec} to {\tt c(par('usr')[2]-mean(X[,1]),0)} and {\tt shiftfactor = 1}, makes the axis coincide with the right vertical borderline of the graph. <>= opar <- par('xpd'=TRUE) tm <- seq(3,8,by=1) tmc <- (tm - mean(X[,5])) Calibrate.rightmargin.X5 <- calibrate(c(0,1),yc,tmc,Xc[,1:2],tmlab=tm,m=m, axislab="X_5",tl=0.5, shiftvec=c(par('usr')[2]-mean(X[,1]),0), shiftfactor=1,where=2, laboffset=c(1.5,1.5),cex.axislab=1) par(opar) @ The second vertical axis has calibration factor 3.46, and a goodness of fit of 0.34. The fit of the variable is worse in comparison with the previous oblique direction given by the regression coefficients. Note that graphical clipping in temporarily turned off ({\tt par('xpd'=TRUE)}) to allow the calibration routine to draw ticks and labels outside the figure region, and that the range of the tick marks was shortened in order not surpass the figure region. \subsubsection*{Subscales and double calibrations} Scales with tick marks can be refined by drawing subscales with smaller tick marks. E.g. larger labelled tickmarks can be used to represent multiples of 10, and small unlabelled tick marks can be used to represent units. The subscale allows a more precise recovery of the data values. This can simply be achieved by calling the calibration routine twice, once with a coarse sequence and once with a finer sequence. For the second call one can specify {\tt verb=FALSE} in order to suppress the numerical output of the routine, and {\tt lm=FALSE} to supress the tick mark labels under the smaller ticks. The tickmarks for the finer scale are made smaller by modifying the tick length (e.g. {\tt tl=0.1}). Depending on the data, some trial and error with different values for {\tt tl} may be necessary before nice scales are obtained. This may be automatized in the future. Finally, reading off the (approximate) data values can further be enhanced by drawing perpendiculars from the points to the calibrated axis by setting {\tt dp=TRUE}. <>= tm <- seq(2,10,by=1) tmc <- (tm - mean(X[,5])) Calibrate.X5 <- calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,axislab="X_5",tl=0.5, dp=TRUE,labpos=4) tm <- seq(2,10,by=0.1) tmc <- (tm - mean(X[,5])) Calibrate.X5 <- calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.25,verb=FALSE, lm=FALSE) @ A {\it double calibration} can be created by drawing two scales, one on each side of the axis. Double calibrations can be useful. For instance, one scale can be used for recovery of the original data values of the variable, whereas the second scale can be used for recovery of standardized values or of correlations with other variables. Double calibrations can also be used to graphically verify if two different calibration procedures give the same result or not. \subsubsection*{Recalibrating the original scatterplot axes} By calibrating the (0,1) and (1,0) vectors the original axes of the scatter plot can be redesigned. We illustrate the recalibration of the original axes by creating a second scale on the other side of the axes, a refined scale for $X_1$, and a scale for the standardized data for $X_2$. For the latter calibration one unit equals one standard deviation. <>= opar <- par('xpd'=TRUE) tm <- seq(5,25,by=5) tmc <- (tm - mean(X[,1])) yc <- scale(X[,1],scale=FALSE) Calibrate.X1 <- calibrate(c(1,0),yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.5, axislab="X_1",cex.axislab=1,showlabel=FALSE, shiftvec=c(0,-(m[2]-par("usr")[3])),shiftfactor=1,reverse=TRUE) tm <- seq(5,25,by=1); tmc <- (tm - mean(X[,1])) Calibrate.X1 <- calibrate(c(1,0),yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.25, axislab="X_1",cex.axislab=1,showlabel=FALSE, shiftvec=c(0,-(m[2]-par("usr")[3])),shiftfactor=1,reverse=TRUE, verb=FALSE,lm=FALSE) yc <- scale(X[,2],scale=TRUE) tm <- seq(-3,1,by=1) Calibrate.X2 <- calibrate(c(0,1),yc,tm,Xc[,1:2],tmlab=tm,m=m,tl=0.6, axislab="X_2",cex.axislab=1,showlabel=FALSE, shiftvec=c(-(mean(X[,1])-par('usr')[1]),0),shiftfactor=1,verb=TRUE,lm=TRUE) tm <- seq(-3,1.5,by=0.1) Calibrate.X2 <- calibrate(c(0,1),yc,tm,Xc[,1:2],tmlab=tm,m=m,tl=0.3, axislab="X_2",cex.axislab=1,showlabel=FALSE, shiftvec=c(-(mean(X[,1])-par('usr')[1]),0),shiftfactor=1,verb=FALSE,lm=FALSE) par(opar) @ \section{Calibration of Biplot axes} \label{sec:biplot} In this section we give detailed instructions on how to calibrate biplot axes. We will consider biplots of raw data matrices and correlation matrices obtained by PCA, biplots of profiles obtained in CA, biplots of data matrices and correlation matrices (in particular the between-set correlation matrix) in CCA and biplots of fitted values and regression coefficients obtained by RDA. In principle, calibration of biplot axes has little additional complication in comparison with the calibration of additional axes in scatterplots explained above. The main issue is that, prior to calling the calibration routine, one needs to take care of the proper centring and standardisation of the tick marks. \subsection{Principal component analysis} \label{sec:pca} Principal component analysis can be performed by using routine {\tt princomp} from the {\tt stats } library. We use again Manly's goblets data to create a biplot of the data based on a PCA of the covariance matrix. We use {\tt princomp} to compute the scores for the rows and the columns of the data matrix. The first principal component is seen to be a size component, separating the smaller goblets on the right from the larger goblets on the left. The variable vectors are multiplied by a factor of 15 to facilitate interpretation. Next we calibrate the vector for $X_3$, using labelled tickmarks for multiples of 5 units, and shorter unlabelled tickmarks for the units. The goodness of fit of $X_3$ is very high (0.99), which means that $X_3$ is close to perfectly represented. {\tt Calibrate.X3} is a list object containing the numerical results of the calibration. <>= # PCA and Biplot construction pca.results <- princomp(X,cor=FALSE) Fp <- pca.results$scores Gs <- pca.results$loadings plot(Fp[,1],Fp[,2],pch=16,asp=1,xlab="PC 1",ylab="PC 2",cex=0.5) textxy(Fp[,1],Fp[,2],rownames(X),cex=0.75) arrows(0,0,15*Gs[,1],15*Gs[,2],length=0.1) textxy(15*Gs[,1],15*Gs[,2],colnames(X),cex=0.75) # Calibration of X_3 ticklab <- seq(5,30,by=5) ticklabc <- ticklab-mean(X[,3]) yc <- (X[,3]-mean(X[,3])) g <- Gs[3,1:2] Calibrate.X3 <- calibrate(g,yc,ticklabc,Fp[,1:2],ticklab,tl=0.5, axislab="X3",cex.axislab=0.75,where=1,labpos=4) ticklab <- seq(5,30,by=1) ticklabc <- ticklab-mean(X[,3]) Calibrate.X3.fine <- calibrate(g,yc,ticklabc,Fp[,1:2],ticklab,lm=FALSE,tl=0.25, verb=FALSE,cex.axislab=0.75,where=1,labpos=4) @ We do a PCA based on the correlation matrix, and proceed to construct a biplot of the correlation matrix. The correlations of $X_5$ with the other variables are computed, and the biplot axis for $X_5$ is calibrated with a correlation scale. Routine {\tt calibrate} is repeatedly called to create finer subscales. <>= # PCA and Biplot construction pca.results <- princomp(X,cor=TRUE) Fp <- pca.results$scores Ds <- diag(pca.results$sdev) Fs <- Fp%*%solve(Ds) Gs <- pca.results$loadings Gp <- Gs%*%Ds #plot(Fs[,1],Fs[,2],pch=16,asp=1,xlab="PC 1",ylab="PC 2",cex=0.5) #textxy(Fs[,1],Fs[,2],rownames(X)) plot(Gp[,1],Gp[,2],pch=16,cex=0.5,xlim=c(-1,1),ylim=c(-1,1),asp=1, xlab="1st principal axis",ylab="2nd principal axis") arrows(0,0,Gp[,1],Gp[,2],length=0.1) textxy(Gp[,1],Gp[,2],colnames(X),cex=0.75) ticklab <- c(seq(-1,-0.2,by=0.2),seq(0.2,1.0,by=0.2)) R <- cor(X) y <- R[,5] g <- Gp[5,1:2] Calibrate.X5 <- calibrate(g,y,ticklab,Gp[,1:2],ticklab,lm=TRUE,tl=0.05,dp=TRUE, labpos=2,cex.axislab=0.75,axislab="X_5") ticklab <- seq(-1,1,by=0.1) Calibrate.X5 <- calibrate(g,y,ticklab,Gp[,1:2],ticklab,lm=FALSE,tl=0.05,verb=FALSE) ticklab <- seq(-1,1,by=0.01) Calibrate.X5 <- calibrate(g,y,ticklab,Gp[,1:2],ticklab,lm=FALSE,tl=0.025,verb=FALSE) @ The goodness of fit of the representation of the correlations of $X_5$ with the other variables is 0.98, the 6 correlations being close to perfectly represented. We compute the sample correlation matrix and compare the observed correlations of $X_5$ with those estimated from the calibrated biplot axis ({\tt yt}). Note that PCA also tries to approximate the correlation of a variable with itself, and that the arrow on representing $X_5$ falls short of the value 1 on its own calibrated scale. The refined subscale allows very precise graphical representation of the correlations as estimated by the biplot. \begin{center} <>= print(R) print(cbind(R[,5],Calibrate.X5$yt)) @ \end{center} \subsection{Correspondence analysis} \label{sec:ca} We consider a contingency table of a sample of Dutch calves born in the late nineties, shown in Table~\ref{tab:calves2}. A total of 7257 calves were classified according to two categorical variables: the method of production (ET = Embryo Transfer, IVP = In Vitro Production, AI = Artificial Insemination) and the ease of delivery, scored on a scale from 1 (normal) to 6 (very heavy). The data in Table~\ref{tab:calves2} were provided by Holland Genetics. \begin{table}[htb] \centering \begin{tabular}{c|rrrr} & \multicolumn{3}{c}{Type of calf}\\ Ease of delivery & ET & IVP & AI\\ \hline 1 & 97 & 150 & 1686\\ 2 & 152 & 183 & 1339\\ 3 & 377 & 249 & 1209\\ 4 & 335 & 227 & 656\\ 5 & 42 & 136 & 277\\ 6 & 9 & 71 & 62\\ \hline \end{tabular} \caption{Calves data from Holland Genetics.} \label{tab:calves2} \end{table} For this contingency table we obtain $\chi^2_{10} = 833.16$ with $p < 0.001$ and the null hypothesis of no association between ease of delivery and type of calf has to be rejected. However, what is the precise nature of this association? Correspondence analysis can be used to gain insight in the nature of this association. We use routine {\tt corresp} form the {\tt MASS} library~\cite{Venables} to perform correspondence analysis and to obtain the coordinates for a biplot of the row profiles. We compute the row profiles and then repeatedly call the calibration routine, each time with a different set of {\tt ticklabs}. <>= library(MASS) data(calves) ca.results <- corresp(calves,nf=2) Fs <- ca.results$rscore Gs <- ca.results$cscore Ds <- diag(ca.results$cor) Fp <- Fs%*%Ds Gp <- Gs%*%Ds plot(Gs[,1],Gs[,2],pch=16,asp=1,cex=0.5,xlab="1st principal axis", ylab="2nd principal axis") textxy(Gs[,1],Gs[,2],colnames(calves),cex=0.75) points(Fp[,1],Fp[,2],pch=16,cex=0.5) textxy(Fp[,1],Fp[,2],rownames(calves),cex=0.75) origin() arrows(0,0,Gs[,1],Gs[,2]) P <- as.matrix(calves/sum(calves)) r <- apply(P,1,sum) k <- apply(P,2,sum) Dc <- diag(k) Dr <- diag(r) RP <- solve(Dr)%*%P print(RP) CRP <- RP - ones(nrow(RP), 1) %*% t(k) TCRP <- CRP%*%solve(Dc) y <- TCRP[,3] g <- Gs[3,1:2] ticklab <- c(0,seq(0,1,by=0.2)) ticklabs <- (ticklab - k[3])/k[3] Calibrate.AI <- calibrate(g,y,ticklabs,Fp[,1:2],ticklab,lm=TRUE,tl=0.10, weights=Dr,axislab="AI",labpos=4,dp=TRUE) ticklab <- c(0,seq(0,1,by=0.1)) ticklabs <- (ticklab - k[3])/k[3] Calibrate.AI <- calibrate(g,y,ticklabs,Fp[,1:2],ticklab,lm=FALSE,tl=0.10, weights=Dr,verb=FALSE) ticklab <- c(0,seq(0,1,by=0.01)) ticklabs <- (ticklab - k[3])/k[3] Calibrate.AI <- calibrate(g,y,ticklabs,Fp[,1:2],ticklab,lm=FALSE,tl=0.05, weights=Dr,verb=FALSE) @ Because the calibration is done by weighted least squares, a diagonal matrix of weights ({\tt weights=Dr}) is supplied as a parameter to the calibration routine Note that the calibrated axis for the row profiles with respect to AI has goodness of fit 1. This is due to the fact that the rank of the matrix of centred profiles is two, and that therefore all profiles can be perfectly represented in two dimensional space. \subsection{Canonical correlation analysis} \label{sec:cca} We consider a classical data set on the head sizes of the first and the second son of 25 families~\cite{Frets}. These data have been analysed by several authors~\cite{Anderson,Mardia,Graffel16} We first load the data and perform a canonical correlation analysis, using supplied function {\tt canocor} (a more fully fledged program for canonical correlation analysis in comparison with {\tt cancor} from the {\tt stats} package). <>= data(heads) X <- cbind(heads$X1,heads$X2) Y <- cbind(heads$Y1,heads$Y2) Rxy<- cor(X,Y) Ryx<- t(Rxy) Rxx<- cor(X) Ryy<- cor(Y) cca.results <-canocor(X,Y) plot(cca.results$Gs[,1],cca.results$Gs[,2],pch=16,asp=1,xlim=c(-1,1),ylim=c(-1,1), xlab=expression(V[1]),ylab=expression(V[2])) arrows(0,0,cca.results$Fp[,1],cca.results$Fp[,2],length=0.1) arrows(0,0,cca.results$Gs[,1],cca.results$Gs[,2],length=0.1) textxy(cca.results$Fp[1,1],cca.results$Fp[1,2],expression(X[1]),cex=0.75) textxy(cca.results$Fp[2,1],cca.results$Fp[2,2],expression(X[2]),cex=0.75) textxy(cca.results$Gs[1,1],cca.results$Gs[1,2],expression(Y[1]),cex=0.75) textxy(cca.results$Gs[2,1],cca.results$Gs[2,2],expression(Y[2]),cex=0.75) circle(1) ticklab <- seq(-1,1,by=0.2) y <- Rxy[,2] g <- cca.results$Gs[2,1:2] Cal.Cor.Y2 <- calibrate(g,y,ticklab,cca.results$Fp[,1:2],ticklab,lm=TRUE,tl=0.05, dp=TRUE,reverse=TRUE,weights=solve(Rxx), axislab="Y_2",cex.axislab=0.75,showlabel=FALSE) @ <>= plot(cca.results$Gs[,1],cca.results$Gs[,2],pch=16,asp=1,xlim=c(-2,2),ylim=c(-2,2), xlab=expression(V[1]),ylab=expression(V[2])) #arrows(0,0,cca.results$Fp[,1],cca.results$Fp[,2],length=0.1) #arrows(0,0,cca.results$Gs[,1],cca.results$Gs[,2],length=0.1) textxy(cca.results$Fp[1,1],cca.results$Fp[1,2],expression(X[1])) textxy(cca.results$Fp[2,1],cca.results$Fp[2,2],expression(X[2])) textxy(cca.results$Gs[1,1],cca.results$Gs[1,2],expression(Y[1])) textxy(cca.results$Gs[2,1],cca.results$Gs[2,2],expression(Y[2])) points(cca.results$V[,1],cca.results$V[,2],pch=16,cex=0.5) textxy(cca.results$V[,1],cca.results$V[,2],1:nrow(X),cex=0.75) ticklab <- seq(135,160,by=5) ticklabc <- ticklab-mean(Y[,2]) ticklabs <- (ticklab-mean(Y[,2]))/sqrt(var(Y[,2])) y <- (Y[,2]-mean(Y[,2]))/sqrt(var(Y[,2])) Fr <- cca.results$V[,1:2] g <- cca.results$Gs[2,1:2] #points(cca.results$V[,1],cca.results$V[,2],cex=0.5,pch=19,col="red") #textxy(cca.results$V[,1],cca.results$V[,2],rownames(Xn)) Cal.Data.Y2 <- calibrate(g,y,ticklabs,Fr,ticklab,lm=TRUE,tl=0.1,dp=TRUE, reverse=TRUE,verb=TRUE,axislab="Y_2", cex.axislab=0.75,showlabel=FALSE) #cca.results<-lm.gls(Rxy[,5]~-1+Fr,W=solve(Rxx)) @ We construct the biplot of the between-set correlation matrix (the joint plot of ${\bF}_p$ and ${\bG}_s$). Firstly we calibrate the biplot axis for $Y_2$ with a correlation scale. This calibration is done by generalised least squares with the inverse of the correlation matrix of the X-variables as a weight matrix ({\tt weights=solve(Rxx)}). Secondly, we calibrate the biplot axis for $Y_2$ with a scale for the original values. This second calibration has no weight matrix and is obtained by ordinary least squares. Both calibrations have a goodness of fit of 1 and allow perfect recovery of correlations and original data values. \subsection{Redundancy analysis} \label{sec:rda} Redundancy analysis can be seen as a constrained PCA. It allows two biplots, the biplot of the fitted values and a biplot of regression coefficients. Function {\tt rda} of the package provides a routine for redundancy analysis. We use Linnerud's data on physical exercise and body measurement variables~\cite{Tenenhaus} to illustrate calibrated biplots in redundancy analysis. <>= data(linnerud) X <- linnerud[,1:3] Y <- linnerud[,4:6] rda.results <- rda(X,Y) plot(rda.results$Fs[,1],rda.results$Fs[,2],pch=16,asp=1,xlim=c(-2,2),ylim=c(-2,2), cex=0.5,xlab="1st principal axis",ylab="2nd principal axis") arrows(0,0,2*rda.results$Gyp[,1],2*rda.results$Gyp[,2],length=0.1) textxy(rda.results$Fs[,1],rda.results$Fs[,2],rownames(X),cex=0.75) textxy(2*rda.results$Gyp[,1],2*rda.results$Gyp[,2],colnames(Y),cex=0.75) y <- rda.results$Yh[,3] g <- rda.results$Gyp[3,1:2] Fr <- rda.results$Fs[,1:2] ticklab <- c(seq(-0.6,-0.1,by=0.1),seq(0.1,0.6,by=0.1)) Calibrate.Yhat3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=TRUE,dp=TRUE,tl=0.1, axislab="Sauts",showlabel=FALSE) @ <>= plot(rda.results$Gxs[,1],rda.results$Gxs[,2],pch=16,asp=1,xlim=c(-2,2), ylim=c(-2,2),cex=0.5,xlab="1st principal axis", ylab="2nd principal axis") arrows(0,0,rda.results$Gxs[,1],rda.results$Gxs[,2],length=0.1) arrows(0,0,rda.results$Gyp[,1],rda.results$Gyp[,2],length=0.1) textxy(rda.results$Gxs[,1],rda.results$Gxs[,2],colnames(X),cex=0.75) textxy(rda.results$Gyp[,1],rda.results$Gyp[,2],colnames(Y),cex=0.75) y <- rda.results$B[,3] g <- rda.results$Gyp[3,1:2] Fr <- rda.results$Gxs[,1:2] ticklab <- seq(-0.4,0.4,0.2) W <-cor(X) Calibrate.Y3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=TRUE,dp=TRUE,tl=0.1, weights=W,axislab="Sauts",showlabel=FALSE) ticklab <- seq(-0.4,0.4,0.1) Calibrate.Y3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=FALSE,tl=0.05,verb=FALSE, weights=W) ticklab <- seq(-0.4,0.4,0.01) Calibrate.Y3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=FALSE,tl=0.025,verb=FALSE, weights=W) @ The first biplot shown is a biplot of the fitted values (obtained from the regression of Y onto X). Vectors for the response variables are multiplied by a factor of 3 to increase readability. The fitted values of the regression of Sauts onto the body measurements have a goodness of fit of 0.9984 and can very well be recovered by projection onto the calibrated axis. The second biplot is a biplot of the matrix of regression coefficients. We calibrated the biplot axis for "Sauts", such that the regression coefficients of the explanory variables with respect to "Sauts" can be recovered. The goodness of fit for "Sauts" is over 0.99, which means that the regression coefficients are close to perfectly displayed. Note that the calibration for Sauts for the regression coefficients is done by GLS with weight matrix equal to the correlation matrix of the X variables ({\tt weights=W}). \section{Online documentation} \label{sec:online} Online documentation for the package can be obtained by typing {\tt vignette("CalibrationGuide"} or by accessing the file {\tt CalibrationGuide.pdf} in the {\tt doc} directory of the installed package. \section{Version history} Version 1.6:\\ \begin{itemize} \item Function {\tt rad2degree} and {\tt shiftvector} have been added. \item Function calibrate has changed. Argument {\tt shift} from previous versions is obsolete, and replaced by {\tt shiftdir, shiftfactor} and {\tt shiftvec}. \end{itemize} Version 1.7.2:\\ \begin{itemize} \item Function {\tt textxy} has been modified and improved. Arguments {\tt dcol} and {\tt cx} no longer work, and their role has been taken over by {\tt col} and {\tt cex}. A new argument {\tt offset} controls the distance between point and label. \end{itemize} \section*{Acknowledgements} This work was partially supported by the Spanish grant BEC2000-0983. I thank Holland Genetics ({\tt http://www.hg.nl/}), Janneke van Wagtendonk and Sander de Roos for making the calves data available. This document was generated by Sweave~\cite{Leisch}. \bibliographystyle{humanbio} \begin{thebibliography}{10} \bibitem[Anderson (1984)]{Anderson} Anderson, T. W. (1984) {A}n {I}ntroduction to {M}ultivariate {S}tatistical {A}nalysis John Wiley, Second edition, New York. \bibitem[Frets (1921)]{Frets} Frets, G. P. (1921) Heredity of head form in man, Genetica, 3, pp. 193-384. \bibitem[Gabriel, 1971]{Gabriel} Gabriel, K. R. (1971) The biplot graphic display of matrices with application to principal component analysis. Biometrika 58(3) pp. 453-467. \bibitem[Gower and Hand (1996)]{Gower4} Gower, J. C. and Hand, D. J. (1996) Biplots Chapman \& Hall, London. \bibitem[Graffelman (2005)]{Graffel16} Graffelman, J. (2005) Enriched biplots for canonical correlation analysis Journal of Applied Statistics 32(2) pp. 173-188. \bibitem[Graffelman and Aluja-Banet (2003)]{Graffel13} Graffelman, J. and Aluja-Banet, T. (2003) Optimal Representation of Supplementary Variables in Biplots from Principal Component Analysis and Correspondence Analysis Biometrical Journal, 45(4) pp. 491-509. \bibitem[Graffelman and van Eeuwijk (2005)]{Graffel17} Graffelman, J. and van Eeuwijk, F. A., (2005) Calibration of multivariate scatter plots for exploratory analysis of relations within and between sets of variables in genomic research, Biometrical Journal, 47, 6, 863-879. \bibitem[Leisch (2002)]{Leisch} Leisch, F. (2002) Sweave: Dynamic generation of statistical reports using literate data analysis Compstat 2002, Proceedings in Computational Statistics pp. 575-580, Physica Verlag, Heidelberg, ISBN 3-7908-1517-9 URL http:/www.ci.tuwien.ac.at/~leisch/Sweave. \bibitem[Manly (1989)]{Manly} Manly, B. F. J. (1989) Multivariate statistical methods: a primer Chapman and Hall, London. \bibitem[Mardia et al.(1979)]{Mardia} Mardia, K. V. and Kent, J. T. and Bibby, J. M. (1979) Multivariate Analysis Academic Press London. \bibitem[R Development Core Team (2004)]{RRR} R Development Core Team (2004) R: A language and environment forstatistical computing. R Foundation for Statistical Computing, Vienna, Austria, ISBN 3-900051-00-3, http://www.R-project.org. \bibitem[Tenenhaus (1998)]{Tenenhaus} Tenenhaus, M. (1998) La R\'{e}gression PLS Paris, \'Editions Technip. \bibitem[Venables and Ripley (2002)]{Venables} Venables, W. N. and Ripley, B. D. (2002) {M}odern {A}pplied {S}tatistics with {S}-{P}lus New York, Fourth edition, Springer. \end{thebibliography} \end{document} calibrate/inst/doc/CalibrationGuide.pdf0000644000176000001440000105616412213560775017677 0ustar ripleyusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4123 /Filter /FlateDecode /N 100 /First 804 >> stream x[Ys9~_b…-[kJr[;~(%)Rvϯ/"YlJt{vw&l(0LT`ɨaZ;f 9cy/Y`Qz.aRI\H& & &L&OAL kϔL)Ȕ _2e}ɔ`h"QJLLK b4#ȴx "tɊ(pIĆ!h3$fT3όŗ:2  Ď < Pf3YIDg ѭ&̠PJfbØ0  Ef9IDĜ`Zg>Dw֡l f0?Ŝ ̅/ $Xz=*'2`~`^ȼsCq|ɼs" f>@?.- " \d"b!\G|RTpj,: H00D`$!IqP%6Ԕ't,@`A35 zF؃igcQap* @(t $!c1`-3(Vy5LXdVo3j^W>?\@`ح͒2 .HN\`V2FtEME P4br=N"NI&\/zXWdV^UR+3z/Vtb k ZSE4h#*E"e $RP i-)|X(I p5D,}!ܣM4 U]0 Hu$jxNQ1*A]."jRuA!} .2xF՝eX[,(* *B9[!x. =O(4R;$T(o";?$xλ.[.PPBX5]E, )UCZA%UJcq.OW?zhEۑB'5ć:AedGG>:;B 'p4>+TW9Wΰ~cH_Sٹh$ʖm>h.%ykql=橋?y=?_\{qemzo~>;]R|ᩊ~)Y}iqőZ\npw2jUsnq^%q7TOQMoG 4g^,UP&;6N6mh=-u薳A mԛ9'œNlS}O7?~8\T<{|Eymt/қvs+69Fm8ףKuei4nUZ9W^oB~5-pz푘5u;orѰ*)|qY-+70݆  iwҩBe=U4|X>՝{3?L|9%T{Η Uc5;%?;.㔤z˵ӣ#م>֙fQ=8on*؟MMdD~+HWK6,3ĝ1Etn pmqM~OS Ak(/ F #?&cNzh0\+w~eK髟N_R҆y]ve?5̿. ITՄ yh&nQ6bM7YCd6#G֮h1f)H?H43mp:BXFSȇ<~Vu2BC;1ufhIKr-B&l,!_ w7F6ǃfq9|v`z@ߧ'vI?6sCON 7q|m58|Ҏ-lU~TcÊZq5+ߡ97'2Oo,ĸYDhSA00z7M-m J:~nu+|I0Kߪ)j l/vZ:˰ۦB4qӶ`#-MTa)+|ӆش)f-\fR-!j>r{zތ~DComj]CG[B,PD1$FIPiHI6.4h23%7-4kکu2Qn :vfxI TK/Զj5쎸Xe,̴=_ FSG#@G0{A ()VBcȣS;$DK̜Qg IwcSU f[>LVr>q* E){%n8H)|4?QIX^!S6Fq))O'IOvUv>֞Cܖ2I+ӵid}(4&[Qah$8tD 9BjTSlۿuejc J.E] 1*DD D/(zQ$cP _@6$ߦ,NAT'^[繝[Ťc1 D5:qL)a&ƃ;PT l ):J}e$RLIMMIZt7йJyc^cWrQ˽se6Uۘs(4ߵ{*P3Dm#!\hʜ>Mf]c얞(<6snRzo9Pt70Wt2Abxoy/.Ty4ԙBbSi6++{}vUV r vvՒ_#/TƖ~rc{D1<)nƧ)Y:VԹ?2ڴ(Zf/KMplI4sMKYW#>:UF)+#άS{mM&Qh#e]L6MJօh5Y$)}}E˿4Hm^If{cIlm>uᇋEU2 ^k]^~3 -5>>#>>V}>M|x&i^y;bf!33E9S/>?{y@o՝-Dָ1=[o=kWn7#'&h?Vm ' LP AmUwêOj&q²ՖVjms~❻w%U[kUЪqYۥ3mm4^}U]-n1!̋?g0%/;q{XdTZ{xZYgK mR<'HqY_f@ 4zy=D*OЛ&Ո}3W^&NW;Q-cF:G5l#k2ԮŻ:dx2ikt$Ch)\8ԷVI%qKt k=ucczp{K٫adfO\mip(oP}_g!I;a55ݼf>%e*]Hvq6c=ۉaò[wޖ0%L%%K}6sz7m{^Y5gegf{ͲK'7·Tv)Q ݺ& 4*Uvv KuQiW6&ٽ&u>g浥l.eX$:;t]x|9I}ydXG4[~GS54 V sAT;1j;P7m7_+~~yUvY\8mꛇC5' ɸAP䵳A{7f_7\<.tTc^@mOBUyY]O!D᰺ar Cho6۷?\'^M]=bV:7*ba/ߓT_xA5_49CEPQzc?VTHendstream endobj 102 0 obj << /Filter /FlateDecode /Length 2907 >> stream xڥYKoHW4~5{`{@D~lJb9"Uu_^]^gSWUWeVW_ɋڕyneӶ'~j?_?t#TI[|,O$>ʁF}hG&nau\$!j~ Ǿ]+[&-m5wO7!KR *#gBRdVLdVQ'IJSK|⧊b<LZeFIw ָ-IlGюBj3 (Ԋn{e# $m^udF/jl/x6o.3%0S3pq݇iWKLNo;^D60sB=:.HZa]9: zUosS0fGt/z XHN;LAJ0mURiaF^+L+^H_:/Һr ] 瓗"_6pD}֭_elC|}K+ AXnAwi^ 1>! ])F)f{D ͏`۩(=SR,Hx%MH4C̆߃o%i pl z = a )F0^U{Uv(#ό2Q4ӺP ؁H)5@BTR99u\ ,eR,0O}\%KňGscZ*$V%AN-s7U+Niȡyd H5'bSt <`JU*9N{(~ՒToq zC>so4J2!0 _xɓ%3V*9Ds0#9*lţOx? g2XI q iraO|Mh±&FsL&> zvAb; & ÍѼQR,T=R7htNRAC"̎'D"*`{dQM <BM"h Sf7'֤ _:4UbӃ".\BoK? eE9ovʈ Dꏜ5)d]Y4j5 xg,L\ߺ2\y,-(t Ixc!0J3 k31fr;j'f]}#iVΑ!NkB@*7|^_ԑĺا)Vqb'"f7sZr,7trǓxx&gsT9U {֦ Y;+r@'FjJo3>vnFOUՒ }S5*5{F=4J:o^c(=GFx"Kpd(VbN`dPΨ [  y䩣vBi}zs0J=h/fm;ɡM,`d`7usNq< ǽ$ad[ҝ0֧6 M S'jgTVJ~y*-ҧ9~Ϡ\6;m^{!+FtckH5EAp PG4dڜwGj(FzPD=3gP:48KU[l)pg~~j)eKG> stream xZ[SF~_яNRT!^qmb,HԌpn0 j*F:j>ׯ/ &e*S>6ȜLJ\0K f: Ft*RgR2C< XC\"0* CLF[A < L%* -2dLـWZ1"-H6 B 똊!9&ϴDU 2IL[IdڑpI{ f:$0=yi!.3+0c=`Sd& d$9NQ@$l3ozf "wVs'* ,D8Hyr"Xds AiM<9`a# p/>A" 9.șOD^&o [ yx0GY˂ @3$G4DtxO4!a!.aHEAaA4Yt +ʃ0PD]B#{mӱDPhJi{:LkÃK6?XsIcOS\OêccұOxzQNdy???`{dڍ |VIr2izSL몂 \e|b [v#h?zu[=н^/Ǽu7a~t87߬/#swWWyu[7ge7E0K.xY]|z\"͸=4'S{"o$fֳT͸TnT/놵7<ƑX5@f.9xG\5{:t m,|_d?<.5eޗgղ]lQWXqMeu&Um[v{f/-ˣ <'k"N QHEE LʫzvR?wSVǪsgg僧O^mkuUM՜[g &1 ($oLzb9ۏ2ozȝfډ{Vf:(C{ {6[n/oz:>BИ-ƐRx\=E~[-Q,/n7ӗ& kk"5b$d_lX_n*W.s3B(]8f( @UEUYYf}}԰{ ɂ" -3ǥ6{Cd=Iȴ˽̤E#/4Q7ZҘ+YBz&:CRs$?DA[>يFphco=|4&`z ҥ{D q[w0|^x7 ,FEoS{mF8t k/{0s2Я)HB^23 Q6 @v\ K[M:TizA^R{E+ nl M͞HLNnjO#RkqLO=n! dngﲹ׼'HgO)V3~6)?W~t7E\Iݞ S>>W _z\E|%v:aAҒ;/cwcЕ@V#W"Dm;:cXQ g ꛻9_endstream endobj 204 0 obj << /Filter /FlateDecode /Length 1546 >> stream xڭXK8 W=9Z$n>` t{8nL_l9tEe(G:/V'/UD$SC U"Xy LZB$,2<pv<W?yYFLe,"%A]aTEXVK4 M.#]!*8xayj+/*Ckg]y|ٜ彝/T9ڶac-J玂6=B౥&M5 i 8om 9iI [^]ȮaF? 2CO[ж]W6]FGѭ1ـF^ˎ9Ʌr;08f,1BډH wh(LoqL!oWl~-C5gL;YXGʤa~-?s5{fCU9PVg)-E^Zi<IqqӰ 9I=%3ii-ΧJbat6 vdžЇn%[r;U3xFcs4wb-԰ka\KULJl +7.wES(&Weթ쓒);OޓMV;q3 ҍE}eP镲N[`+T_ʺA74Pr N[wv?\6V.cq xprq.B)hıR֊A4 (JHLb䌞D$ 涮fpR]L vu}m5L=%aRet?)z%+pO/@0y~P-K=k}m|j'Bf)){D?vendstream endobj 205 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-004.pdf) /PTEX.InfoDict 29 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 32 0 R >> /ExtGState << >> /Font << /F1 30 0 R /F2 31 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 858 >> stream xWKO@ W̱=0y^AR+R+U=p߯L ʆɁ|n{}QO%m UdQTvoow㕺{6ƨnT_VԇԿOeԯ-w OձG:>+f hH`Q{x>>woi-QB<&Nc yٺ'Zc !MWhDZRLN e8$Vvh1z#ev[rth|ks+憵NF7Pԡ%ve6ͺߘ6&5P^r<0ux$%*hk&} =Y w&f[@ ( K]uBM(f,z0"I ˘H_ q6N{'#&{SCO+5H; ҬG⬗L,8;𮌼`rzALL&6DFtoo{M΍NxΚHu,,C?v#b]'~_ 4.|Bq)ög x;jv6vK;ŁZ 2^د"/sQӚP^֌@m5t|DpV3a6]2(-j,e3 liYoBd7j95:'ZEuz p`Su~FlQs:nYfsĥ |e r1=\BKo Zcw*]z>sqY-O 7,NKtxՃendstream endobj 206 0 obj << /Filter /FlateDecode /Length 850 >> stream xڵVn@}WXRowF!$ JmKJI\쎛u뒖qg̞q£ xąby&"iFFEWBq>TM4~`&lMTGIt^'<^%*l|Oamt|UG)|:sb:IL`@.a9r&k1U(ާ`&ȓT*Cet |*FO孃Bc9A3B>kڪ.m(bbQa 5$W٘swOT5~ZƲ\fA f;WGs:bjOhs~xj'prT5+DM'M4+Bp90_ 򡗆턽{q3&کoP Zf{ZH(xn_nV ׁ{c_p 7`Co`? w`M1kWru[Qvv!ĝR^-<>nhyl>j}Xf΂R(P?"n,| "L3 ,=pǍ$ L+)nm6 /(]ltDwMuw@QĒt]Qg]iq^':KKwc>?ӶCvLZRm\L'*M7]~'Vd3r-)/~4hyendstream endobj 207 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 208 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-005.pdf) /PTEX.InfoDict 37 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 40 0 R >> /ExtGState << >> /Font << /F1 38 0 R /F2 39 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 941 >> stream xXKo0Wό_H@*HSCEj{3;dބC;u@=^=+jcU m":¶OEn޽~p^1|}758]u? 7nR/t|Ҥ/h@C8 F[dy? [x9c}Q{d߼Μ*eM8 %$Ob!bjhдNcN"/p\S?Uǧ\]A3:-ӱ,wVxޕ84?U .lnSsIQ,T8 +CO6xX^BxY:Cj|W_EN.m bՐ1]}+ovwیwDF`7.& MVܱ\m{&قv=Kщ.9X> stream xڵXmF~"ⓣ^﮽R T TIET99.%Cܑy[{8V'2;;̫OObmfb3E}BeE2,<~Uw[3s0}vue>)Tጛ\-]8\]OEOTG+xv,2k6E8-w]*~kv ġ n=CA%ѣ!:U`,jA$k ?R;Y9 yK󝿲 oW>ܘuJoy^DA^c&*qEhLՆ'XSP^Wh@@o;4棂4u7ޅwZHJRrwޣO:.*-@^gH@aNiIa@̪ @ 5*6ɋR^"Θzɯ2bpn~]:]ƳG 7'10k,ɇPSv'$ Mpi萒.Ru ղm*25þw ݩ%Jw@TJF5MPA094?.€1EB98>srN'܇hzceQ򴏼-OJ8+X'&ɑV+k숖PܞD'j@f/(%NSWшYYrκFg顈%ԳBd1GvjY  4V_߭_'m{mXd ֌}) S= kbCzXџw4+Bx4y;ñ/I ׹Iʾai4-?T#Y?aۭ+_R#/y xEi[/2q^ ~e1r0(w5A "7 9Ҳ˭@ƻrF,/"Q] I]㏂뇓3kf.Ky? oDEGtnĀ?۸(%rB,|KDLLAV_&/|Ꝅ&C߈l>IDPOE:|1dz$UHdGnBYfPy.5AW\gendstream endobj 210 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 211 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-006.pdf) /PTEX.InfoDict 45 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 48 0 R >> /ExtGState << >> /Font << /F1 46 0 R /F2 47 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1184 >> stream xXKoEϯ#ARJD+F}UwΌYrrշ~`fc Rpw޾'Xs˰9=Cҵ_ؑbKΜw_7OOW .^ |ņ#7\픓_: ʶk9"tL]S4t7-s#h0C-|`xo#4o+ 냎nl߅lF˰?4nʴm I{4R'FŨyP.EM''>ޝNgɉ0lིs-9A>R 9-jKMXr̢Wh",fYsw0) ؍4lvhĥ *>;9ovg~'gusgEzɤ*7}K&v/zl}-!Lx*{$%-tO ]NwiѼVqRƸa[#|E0 {zf_U;){v#jw-#t ⊈ו\ׂHԹeU(lַ%'{Ƒx]zzdžMP[K֧x?|U4:8> stream xɎ#_Qbܗ>؉؀n>h-dI==y Y.11Goeq}鿌nH^z(mE Ssj~}>W;B%36, lE{)8B)c"FK ײ2mVG:⓶o2hm_DMϵ#%)&XxfW$; H;#uf"6{!pm2St1R-ICu53(9QV= ʊXHҝ+o1[Uu0p zvmpay'y]LoPvU:Cd2{92Di%Nf9sȌ|mI2{$>0meA%zsUَP u@X rFG8_[65/eCpre$.&P鯐%E=g`#S~zRQp#ʄj.R h&Oٯ=l*9!͸0} <}os]Y[K>z3d%L (դw6S R`omAB›\Y}RC+u >9Ʊy%ֈYC%1+^.*=_x17DF,ˣo3^~fI2Ǘ2|3ȾeD)#Oa7m4C1_ juiT:,FceiU?̙TVŲ=0C (Ґrw+(RU7wؔUux M Խ'범jJUUjzXL"wᭂ]^=E:l!t>s"׳ TPhZD~ש񙩣gs~鏐s= xTqN:`A1%=f}?G^?{fm}n{?Х/~;4$dG8f dzZܞG@f 21r/HayP2D[_23kT:| ,)=˩ReI9JPU]3txr\'ctJjW^S7/qНF΀LP> AsYw jendstream endobj 213 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 214 0 obj << /Filter /FlateDecode /Length 2451 >> stream xn=_a%jq9mQHMb]/v4(h+.)9\Ci8 ̹f^]]I]XT("1^]|47;x6sw=_d5ffoে9+ׇ|  S%Yeq]v~nU"ළgş8x'#u^™|F ߛa@ ;Ֆ^ZYBX۬FpWJ MR9ˍ0-Kٽgt%2fŬ]v;¥(Q ͪd(r[(@v%Q+gOcEtFDDrgfi0r Hzk"nH͸wt<䨽Z, ߃ NJX(J}CZ(X dnCTxal5Py6)3wLl=73`BlCwA-^6&1_J4 62PVdMس7(A#x3#f,k$Aֿ/~CZ̚ y`.EVoZ|y [9MZ8lHi*c' 2$ {܊ RHċs R ~̎8ڑoHXT vQ VzUEJ /mݵP7!GW"(y"`jE0QLSUERdeJT$)KRBwM{KzaY-Ҥ.2!iYS'yU<˓,uA{乺N iKֳТe >` bi/sPp2w_J L]M~1[F^ ɻ;Ƞռ#~D+װԸŲd-~K=/hIr9 { @,͹C_1caKՐi?ty8şר]˹CJ~^\nGcdh<= Kl9x#znwP7IEq'sS[92{bB(rŠ3[QOFO%IfA{X7}NJnƂoiK80B% iX/1 }WJpxPM-  :9$pY9[ôZDb,8_[mp.BwqN Qy( I"ioSSniƲ4vO-Fv[~GDkjk#zD ^q(ZO6֮_fTʄظӮbpؓ;g9sB!@EὪgt0"wK@/E0IeO NR2¾L(Q_MuIHڶtTy|D. BS~*މ%yMٓe0hg]^ddW'G: z||HVz=W8Asxs+=Ia_;UɧϞEwoSI,]I bi{^K d[p|9\riR{ؗҴl"gyuJꚮyppY(\ zqȆS4'/Nf cuzן ] e|.u צ 0 \-]@M+dI~pLJ~@PgYznQ=ݟ mHƭޘ:Kd!Nny;rKg]tYl,S,SW#XMDmg9$E~"~hhy.Hƞ&?[M"fK z0N^hf9<er;x#A^[8Fi ˅jF P<sN"iR'> /ExtGState << >> /Font << /F1 57 0 R /F2 58 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1184 >> stream xXKoEϯ#ARJD+F}UwΌYr:oh`W~oS0 31i; o9e؜!ؑbKΜw_7OOW .^ |ņ#7\픓# e[:&[éxKǍ?v~Q~lK7썑?﷕AG7IB6euje`Oݶg$}=y_ vb<("M⏦YNX_snk^ŖvFhtjO5A{NE(R~03uq+4K|L v)ͩ5q)NN|ݙ;99#fofQh2d_†Ihl2:|_DK/޻kJIIlK$G:nnGz]~Zs4/d1.u_"žWN]r"beu%9׵ u.zY| ۢfwCVv'B #̖B'\rv6vlorA!xHn, n3JQvhYǫPMzŦ^,h). HM{;#tJ~tVC `Y42N3bgVl.Wꝗ~)C(VB)?@[yI-q$^^ayzpx%=*Ҡ)?e* vcW믆~Z V:]owk&L{#,_#tނVӍ[z lCCn͢@Zb7og9D&VS faBGˁa{n11ቃ3_!h˘ppܞ[hA>Kfudot8@ '`#o-*m/fʋӋVb-1ͶCHzGn;UMD5ʬȚwZ(fy腬!HXb]>_GZ<" H-D&jT ".PX½QM27EAB=qXrK˧eqﱹendstream endobj 216 0 obj << /Filter /FlateDecode /Length 1573 >> stream xڭWo6_!2f3(J԰[mo<,@[ dl˱4_㑢dw-ŏ}Q?4&I#UB*WW(u^E0-xm}^ ?5s^O!iMƇ=W#Kjw:xb485h˺:R˱ڢ@r??]JY*X{>%_hWxX;;!]El}}UQ"_Iȸ&&c"uxU$%l4K12h1?N,ؤ1Ÿ-T)47/vX >'ȶ'C3T94gw+pu 9~Y!dbO$(l-D3}0dh?yD,[,RH-k\$V,sU>lO0QvGذ9%SQAr$9<kl_+H$S8%+vѫ@ $ v5 Y]_>endstream endobj 217 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 218 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-008.pdf) /PTEX.InfoDict 63 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 66 0 R >> /ExtGState << >> /Font << /F1 64 0 R /F2 65 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1024 >> stream xXK8W0*? iWn $0b9ߪi;Cv'{GM~x@Uԯ\ƪ@ZEu@)i~/߿y<FcT~uZ`^ N;|Gu? iSx;\lN/d̹XW+;52d,u ^Ҳ 7Tł#xڀoЌ oLfEswxR8`g81~iLU.8]\l ۏ/ds&~c]y& ׫r5ٛX$Z&7FG&,]5d:yK$|vD4֏K9t$OQ<.e؎!D< Kzf_T[=; !biHb(iE(op/kF"6w"{F ,F}~ eo!vcyȀm]eT8ʆ+qJ$I?BBnhԤ OК~3@kf0,7> stream xnF]_7hcM- T@ED$Q)̒+ l/1s_z\15Aʂ&*PA.X"X7NV-`x*;~8O__S&>:Q|TgC8I^Ӓieɤ@" >(O']dWљ=&2")"M` sx߱j^p2S0Leen^1u}N|s@xiH}uRɖ@%ֲ{B2[Nl=^oFGR$9z/ԜO)0_Y6} uOrp)sb/1\ƛ##7ݏC/g[qۉAs@)By0Yh |׬|89jRsqޝR=/&/2ޡ\M'Oԩy.vINWcZ=8`]{e\Q,DXӏbupQy(˨ _X%FeV:KWs?CM?lendstream endobj 220 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 221 0 obj << /Filter /FlateDecode /Length 1785 >> stream xۊF=_a$ӵѵ4B:HBZd-9{n3j )a친9'at\ϔ<ҳ,JCٲ ~ F*o l*TzpG&[t "oj8y٩+ (1vT%wtL ox *,BCXldnSg GreI'*:BP98q أR)Iz/  Q {+k)Fxc`e7Aw_{ OiK;PD`icLG`H嵍Ȯ"uMUu'NVB]]Ej3sem\QPvDZv4S=n"k -Jr;{fƪ)۸3Y8EQ@oGY,K.jhw%JyfJm'%yiWK }Q^=\%-¤mVgiDf 0ɐ:&oh(q\Zsz;6 /ڦ\s$XZqf6K:1aAJ$ >q 00u??OI&f!ێ%Q[ IXi.(#ο{=.K QK&,QDQ ov瀉m8"sOˤaeV {)F=SrS=3''\F"ru^N?ZVo7-^H+x~ZފzYPdڃg'$STaq*pt,|Rڪ((7|#6>Ufc{y%QM%daboqHs0 .e'ʽ+d<_ &iPzF%ȷnpt d { 4` 1Qmb6JMf֑Ԧ]ٕzBೱ{jDeIi٢k[5#Xz#jKy(]؞FWS'#lk!6;;W~ {^;v Pm\&%dFWKL S5TDQT ڽal=9x5Wܜ09Rl[()g0!#ˍr$}]6 , +L/峛m95:X;\ Kn \;7\()r,ЦG5K0]/8wcy!ɝ?MXnD )=1#;a70  WyY==$o){;xFo=~/~rF._x]#g>{NKcBg E X}{0 |Y$$. _u_F/ꞏ ME 8^ߏ %8) RESG7)m+6G t<%hg&'Q3I ĖAX"63ڄ~OލZ=?r!ǯ5 ^I-v@*Zy6^,☭ tT o@QKaZ> /ExtGState << >> /Font << /F1 108 0 R /F2 109 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 2603 >> stream xZˎW>UR  Xa Bk@y,{fgg}Yj%.?--e!/-9/)l1b˗-]s_q!!_?lm+#|>D,:||:|C6O^lyePƱPw~y/?< N{^'[#쥮kZ#ʻtqdfo=̞b_# G:0d#q5;v7Z~; 3SY#3aiG>}apS_#wOqHպJڠO-&Ӌm_J?p7x"^o)9l<_sO҃0mun_NrcSq {tMXR'g6K$Hkgɩڥvx$W .M~:ƒHmipܟ˳aiiw~~8BF֥G웼fC%+osݷ{Y{ܩMuA3ejtr#Bt4.^G]޻hdEcGd`"wŞ}z{tz[ki]m!ʺHiO]VV0xe!kե@dn3i5jF&:y*wy'mcE&߾X9 e|ʚ{_uG]cݬ緽A+gqq{bP8HK;ퟍ,Π垇rO/V`%ry tbY-Ob5.̦G_w/w@M{ _7ᩨ,cwFa1ҁ&ka4SNݗ>X.x<&6YY5χd&\$>it ;9nZע9 jvuF|ehoC7>/LBzeoN4*ˎcezATjzE2~&,D1ҋ "!9{ ( Ԭ= 0x>0m3(פ@&׏\#)p7ZdZP@hxeRP>OkD2"G56X l׉( Ck跢F=`&jj!(֙+E0 &@E"BH ߚ\FG);qE$T8FS,)8ݩV8ꁠ"s:]q гΨ]N[ |bg>$`'StQVCJbTNߢ#UӈH۽gcmu*;FưS/e,_յhV.:gR1޷3 *l`H@\AZh#*Ix>tQ\tWܕ=AnBŎ3y~(#J\Ad4.ɲkR=UYKeCi!.~q:8C+C)%L4̬A٥`l"2/Jj ұH2xfN ڤ񜊤)gxX)FK I}M Q hLJJ2-빩, |sȖEnFnFiC=Lu(MkWfj$R$E:SS;2ibGi=gJh15%(f8*EQ${փSy'EP|D*6 RR3sz귘%9b,kV${wM[5CE OXUv!Sg(6.]i>X 5^/^U XUb28Ea&MQŎP?E5iڥNQ8pvbcG8K=>{c#„BoWq>s1SdyCP7~Q=q&o}eDTAh3*);j@oW5(,sU)W|'aͥ?#dUC)DޚͷQv"XKL\p25ELK90Ʌm`liC0A&NAC(5NM&xS=q Njxa"qCAnup6I) (臤N`1(ޠ[зcVD|pH qF"4;ܚDLFi Cu ]j>ҴGR@4嵻mHi ^$lAg̀AM$@UObK#Vo.-^&zU&p+Hamjj@o(u aӮi"ԁRց :PB- KfJ@(ށRTPف SEt=ցR34R&8?!)jQ^EMK"1d&2V}m@?xendstream endobj 223 0 obj << /Filter /FlateDecode /Length 1506 >> stream xڕX[OF~ϯx3WnYV}6UvQe@+4\;MxQfTF^}HҌ()iᓍ_6w~?{42ЏeHM-V4Tq{\/~=LKUSL1 5:ǩ 1~r4[*ϵʬ-ȉ¢jQɨa,q7/<_"3q፮B:2;,(jLS x|o^D* cH6Y(Gu\{dD*a_q[Tl+0 "ZN+ٚDe~2 dhZE]5IkH!z!6>ZAJuD>(A%p`5ϛ%!B ${J{ H!|]PBHdg)zSΚS",;$)d d!x0HphqyZܯ!׌cmSw[rG]} =zt 91I^;Iq5LBXayuI4 .)$_\ycsKLb]>;*Z~"ۆf_$$K2eEwK -mc(}Dɶ]37.=nh7m -6 \H>pn!&fgm°spML$ܓ,rwCWC\Xd(yf֮jP>kdT"+&ɼTYӫGAe>XřXbɹ}bB:;D7l%/Dб`kxDi"q '6R:V&?Q\F6Gvf]~;q7tkR G@d1rCJ!E0wmx.Y7TO1 p `1ĴM?;b~$fS_aōp@TY|ddg-*vTϝNgd Mh<KOD[%E{r;y_=jǃM;}&Vq Ŝ8XOvb&}2D2:ܵp%+Y7"E/7ȲZ$MUS> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 225 0 obj << /Filter /FlateDecode /Length 149 >> stream x3135R0P0Bc3csCB.c46K$r9yr+p{E=}JJS ]  b<]00 @0?`d=0s@f d'n.WO@.sudendstream endobj 226 0 obj << /Filter /FlateDecode /Length 99 >> stream x5;@@E@yW!^jBBJu&WJ0ȨcFg k7BzUmx1mA )9hu_T #endstream endobj 227 0 obj << /Filter /FlateDecode /Length1 1750 /Length2 12229 /Length3 0 /Length 13332 >> stream xڍP.w'A 0 3k.AC ܂kؽ{_^MtrJ]M jBظ92\NNvNNnT::mrT:]+  "B!%w_K@)oC0@+* lcG%KHH)G lA/--%_.Emܜ98<==فPq&V' rxPAQcGhۂ]ЂZy]@q}^Uo@ˀWq\\q?!^ZZBo0` vʫy? З@ hbg@/~.`'7WvW9pRf9 qsE#?Y 5Y!VаrwЁAټPـ|3eiGmo'ПJ?/}N 5}o[,@6`_ F/˄YA!b=e-)(G)- ظ8\\OO:WvEz&d06L}g7|^?^ɻ;8gGt;xe2n/ }P)_6D b2]^ +u]xqԡ?'^vQq}՟*JwH9%~;zYR+ן `@^^.tT!_ $ 8 o$?K ?K@?6@>%rp@_"C_b9xG\ϮyRL˷.ΣcfXbaQG+1[D ʫdk#Zr EF쟮>9y [7%z,0j$6k w~Il8{ϪM$"[R*4+޸ƝDcvrEc#_ 7h&SNf#dY[9}/:݋d M9~vgxS.x$LnSeVzlpՑm52F;<&BOL\k5ǫCi@ǝ_o_*9wS*!]`W 8, ҝqFVQb1@j@u{2P/2vGNW9pMP }}p+d@ /EHFV>b]ϧð)VVCyԂ@8uENa6QʀvZ<WS/\7s)s(Aa:+\HyVD75/!(m_Awz@캳19m%SV.t(fObS`dĹ"9fØBdC3DFrY|h2[_b|ˮT~-}`yna)_VYbm'c%A@TAm{{|r+d UKc S[}%=C)3yF=̍n~Gg Xu"hT1bձ>To_2K0|O;u 1 cE}yGd{F܁X4ljL7+}waӵo ̮ʆ,:Pa]0<"s. ??,>9Zו65UZDDKG89aF#ZãDΧ#c0"D.}ja?,z2h}9wXd;5屈xǂ&%nj7'qaF < (PV]8ax(G#q-{bWqn ͥyu9T>픯j':I2WVR?#͌Zq`h._.ѽml6u~T )hj'^/C0VY(ވMcMʈR16(ĬPkňIKMpk0Q%~{r*u"&6vr 2 bvd]W3}.ݔc!421ZV!3\.)f-- =/`k<{66IT$Њtx:Ui`@8-10x_6Y@&Vcm^m$-־ªBQ,^4(+3m %Σ >ץm7*0z M!}!@k9O{_hFi ]Y #ycqYl^ln}GmHA +`a-[bQ3c=!"-;dr33b]~qwMM$@`7g>3IGK.G)I8䜝_L n`uL67;}?dVR5,829þ$"owCGPDX(ߩ8ǾNwٵ3/WԭW,"X;Z3Kv6BN)L&m,/Uz䡰E%5񀧷|߃:'3Wi0A8Ǯ-skXf_{GG#{R#<4rp^%UeX4ơF y= tˣcBQT#5Rn7 B+:Cx}-;A"䔫"*&| w%ZSK bV[(K) \,~ ٭w$|_.dyc.كwDJ6ٝ;į H_tEks,}+E2\#YǕWy7g6>P[o(X6n1a t1b:2Fشo6wG.O S 4H?bO;:Pi) *5jH /?9˵cuh{ R9uVh:̩| Ji_ՆzN̬ݦBƕ[QU9;k:Gymt)o'9wsZ@R2[z..@>2-^G~$&; )14b^o5%n]AFD(ⓝda oWfsʟJ-LE;%7x Z% ęvwE;|WQxXEeBy`e]mͫy]~32ICeCl8伾 û¼D:ZU'XÑMBdD:ANIގ0  s_Rp}ZYt`Ҳq[@?={r~ ~2nxud!XMfK rmuX&ʦ9eSENOZʽ~a $sw9k''?F.tQKyzP`)~s m(70ˉC\)4%RUukeFn)Gm:ʬY͜s-6|O_W0{Z {q ֡ IҘSIH3 gXvfݷfXNm̐L8C#o|X\LW΋Y16q%(&Td: Yy" @XOަ{:erGEݒRLм)BwX1`-fyr1.WEX: \"W{,Mž=8՗%#4*j9&Q3>e -4*+~' J .w49i_¼Htr}4W%,[Z.́7@j7տhiyT6bW+Y6~UAO2: y0I!4c-5hL(g4)j1(5 NKږ&afj?orHOk/iK\E-۔*ZI~;5aJԐ<1>YfTTdǠH8|mͿh& O9д50Xf|4{ +Si)$8qx㓑%6WHA?5d܂uߎ{ ?PK9:֪ 7[Li'Yc(#,lkHKa#iw)ݙ egTuРL4jF^3L,mq Ewz{",9֟sDESəHC{}{Uf?3S`sa8T AY$N_?lL f=.@՚EDHLdfiDC}TcsX\x ^4 Jӊo%I0ޒ>ry:{VUB.Z:pK-m0 L60Kqd2&ͣ ʿ{yHd 4Y*}J8,Qċ'd٘XӴG|1&CnGt@+}\ jȥ4ze,2u޽Y]ENu|oF8o8KP^#"$N fuo y'(9+*עV<; bxА2ݤ9RxUyq+87d2y#&Vb QDGʴ tzD* ]횚NS=0`eDzcx}hŔAH 'h1%9/y_F5A]| QHF_UN\}W=>rph3]r94sv y7v> XǼyJ0H2 1+<7%eE%ag20zAY~[jHȡȼjZ޸)D-$bm\xr;[𺃇.&[\!#GY@G<… |Rs& ~m4+;؂U(e^@C\N7.N1 tbi |44nwS6諾,M)0&OѻlI{&qϿ `Mr|K%34/! tBl}˳p`,RsݶW3N|mG @`tS=cO]W E4=h:_?1nMd]ϼD9`ٟ(#x,6'9rʶ/We'Bj76}cKFI42NUl9:}< T6Q^K&seνXpA "nw|{4i[Fk3?\՘Q滎͢\BraANra/%LH–uf+QK$*zuB,oCA4\ 3:þ񣉨_D;g,>>25aHcnb=F8ʨ}S8zLM~(E46fӐ'Ѷuwja.bZ}z\ס͎DlLOQά"!)NLOUwSPXYh# oH\Y uSu - /d]UtcpO7PZ^'%qUȳ ]ևQn`+ySV;JB6Y+̝W3&kNVzLY4순EF?{$ uhJ**:JxxObDk* S"C]Jig/NIbE jurƵ'&6%b11;fћ6!TyP$V3n6!*J+AxPLDŽOR*'-@{/g+YeX_L u*5o^7zxђ@6խfb\ZL+RcMC%>#,v;ŰX <忽TztE&[Ⱥ(< x.dMJBpوH}4wVQ{ŪQC־S>S2Cpܾo曍V"ҵʘqf=vNN?!NPKWKmgZѩl׽a9EF 9"GXi|`{UPh':sSiek6{j&pWi诐 d Aʉ!Ԛ :+l0UA*`A$Hef I助pq]y잵>Jߎz.k攴 *Ϫ]?JxWDX#pP W5N֣ 镸i,XI/3>#飼eg'ܱ%4]7t1Xn|r!jfYw OzUr&0*6LCwuB38\o>b@u^g?0+^ݤW!-]JvI*ZXWRYRP}ơneuؾ8&_׎>״u]:;C%8쐃 j#J..Oljb}db #ny]m7 v {JRx|ܪs5ҫڨ>|jD t9=sFXR=*5gc}ҖD3ew C5KC̞XPq e1zPσvַxI eڂ:TBՔwF -n=N2$~~ն Lm ^Y?ySGAMVZ=GKu68J(bœ['Ɯw8)D~KI6YC+"Dۨnʥ+&Lo>XSuZf(͖ 0]CĘxQʨo(-ަi)Lɩh)t: u ?SDٶMUG}0DƟG jY+p)+U~o+:=YnQr{yI$N%'q@_"7rNA{JA)U9 ɨs&ܴ7lI[4m*oDc?NPE<2OEq>z .j. 8.**!HHzנQ+.!DNm;&9^)lZ|cc;|XRGVS5?!"HDܮh៥R?CC{+ >#YTPF*(Վ$:H籠g|/v#"#zGXg;(սP@n)&lpntQJe)jkK7sQى~oEiձUXx-up{;(_,Xͪ5&7Ev\3c)fG(oPKUB;$'lЮ4YVƷo)Q=GIyH뾟Dh 8pQft)}ŷQ˙YHYӕރw[kϘ<~dzO#K4Mr怣l 6~ D*1ƈ&v͛@3HmBZPzlPJ[J7ha9D}p ),s+UaeAYDM}P_c7:787 65GV6T< t&Q&PLT5*AHOȻ NimO/a$sH-X5mK 'P=Y`q/&J.0 9!MxƳ뗓n)HEeۄ._;C, >Mn FR bov,Q!x9Q~y}ORpm8KVr6sNB,GNz%6WJS\*!;r sOJGFeTt"ٵ#0,3T2DϞFӒ$MWꗯyQ1$h,tՊk;ff/誼1&R6>?ʨXrPŖeʖYD3i>e+h7-jOP}cǙ@uEv[Enm@{Pb )5 KkELwGH_\G 'u>&AriMч -?5f m #*p'h{-S##wr~):*AC5 (zy\t^BH2k)ĔW]J>t˜cU8pdSUP0/6-J)[wn{4oln-ށڵ`NEitCOY ;0(}øv(k0.C#N M~ogMR"5-!R/) :~M|Y)-D+h r@ N)KA Jӯf'X<>rbiN -i)Na\wz:骍+cgl#R$DElGL4/9ܒuJw~愢d=ꗁ#<{Y4 A(ipjhF[ڼp[ֶm(2/iorU=cK||ϭDC 5NwX;2qJE\a^{*:~L;nSi)azzSa:ku-k2{@^S^UK d ۫K!Y׺HN$ꅭ l?Q<>!4ͺPN  lc_$d)hy2E2Pn!^*1~$94(5z.^9vm]9j[Ƌ* 41bu-+sM@ <~& %ɷK Y]Sy+3)%,S9|L^VQcQt#XkbMmF]G[B2֠{z"QRuKU򬝣r'vc):xH(3J=H11bt%,\sxóaIi~2fa8$ByL:+#%Ph18]<듑&$F'd!x,X7{64+{خ\Y\7e] o4l")fV,FMx e aiU tTwn(Q@}R4MpҜU^k~ c1Gj)8JP.eUqdNv-l] V9Cם{}t8rry^:L^f܅5myalWy,VLnXoc1rॺ!o.[4DN{v -9TA[@Ⱥ@g5R8,ҺOK:[*aRCyB}+;^+NH+;r7Q;uYXk:endstream endobj 228 0 obj << /Filter /FlateDecode /Length1 2007 /Length2 13573 /Length3 0 /Length 14792 >> stream xڍP ܝ0{pww; % 8J꽚Yw$J f ޙ */ `ffcdffPrGOttBh.3v~7d\l,lN^.^ff+33 A1cW+3<#@dt9;ZYX:_) ow ol {hjl PZ'5/#Bfl P:]f(OPrBdf lLN..f@G{v@h/c #@V;ݭ-V@gz_ƶNwcWc+[cwK7H+_ fq{3Q Ĭ}wg؃=̭ano(-ow~Z2@/;/Od 8;<_02u-D @}X}O}@>b& -qQQSRD```8^JVODi{s_$޻"  3(3z̦_,oWI -ꤝ7Dmr4Sr6ރZ@NV]8f{9SKVWSۛ=VN;#@)<Ȕ/G`}0޸ Şf* c#2lMUpP8ͧe:֧ؐφq*S{ߎk>2} d3x Egnd|{^/}e+{Ue Qz~ųy&Ys0 Dp迿ΠL{DzlF?y:uAޠNQz&,xG7 f!\/e'Z3cM!2V5=xŰI#b61@T5$gj!ÐE>i7Oq&yκݞ_N; /&&$uմO&ȌY,Ir`N5+l J dGk6d:=~*d-?|B\hV N鶇} 'cUͯM<1A-*16Obq]|D;^7U:ˬJ,tY[xHx)B #o1&Na~i).pM)çNG\L]MxFlcq.O]2A*֘{|kPG j ֳ V OK<;Ec{1CpZJjS}[^;ΨBZ'K6 @zf*4L Kx+~TC) lȇ]L&w@2IJzSҹ*\է;j gd/$_JaJL\MvB[[M!)m+ց=\q^Bl'b43I+S4'y]QJ+ocޛ FJ60Hy $VB/b$5'q{!dpOl饼+  Vy{@$K0`M̆޷ڥ[?g9$\ |?]V;!)]Or%> XwjQ+ܧRqkAr`F̀(sUoqV_+%c]e-m(6a= mR\SNwMy8zY˷1^&G =|WT8oX6 O@Grde}6 1gH2uI>0]﬙'3tPiث Cɺ1*:nOJn&>RlV^(v'wI*XD3ϐA*L>JC'Y&/ښ|t?g41f͋2S O}pc c%_/n*@V $K &V e8 Ӟ8`B4^Rpc2$9GDLu'ȢfI9%BKPqnI~ز o:=;qbB'NhDzVIdƬ2?dk^aVnƍ8[v?]Q=t T>ߒr ) y=|x(FPCp*;r3J_- ʖA<;h ^vWDx^^~jDQ,-oi?I< CZGz,15Q'q~bzuhu:]JcbP 'L"V$ җb !bsr2|}W%;bĜdRG Zd谴GUIWJC~.v0Nb3rJ4ᝡ |ѧ>_ݻ4fm&4#3 omc>Rd˴Fy Z[jq48QY4ٍ>16*G㯈w[ ąs ԗw?0uu1zipDD'݅ SПyjLr5Y5~?Ȃ$Lb[NFs% Fm=~åտ3eMFL愰jrG-} 2Ud;[\L:6S]J=[GP{- ZE8 n\Y5 va$ Lmn2f#]hXӓVwN8<_ឿlW6Iިh!tڞS|ֵE= .DEZ%7qҲJAJL3Iaߠ9')^39{}tJ:?ȏ(GtD-K@YSA25U83NFج^ XܲSoMk3%zy,#~iv:T(%9|>Cޝ-W;Gכ h2$\8/;wE#r?zsܿ%T_OpL|b4?Vn67p뽸X %g*5\x)?Cg@E|iȴi86t>6~4j}P5z*0>װ5od#Cʴ%9Mܚ;Avo@D/$b~L}aCyAHyNx=2@ՠ{И ɻ'dPVszG%m~İBVp-4`xfVbt V$w#a?C:S CӴ1fWPNO/9_Q3JG[zwCuitoڰ0}mtoRWwb3)dIєƢJOwD:y{ udzCuᬍㅷt xtEkEX }n2ATOr8]Tl#F\1Zt*dbfHu$}i\6W~)nM?4 ѻEV.v6pINc EDeI*#\$y#t@-JMR핋 %/[ ܨ{эP[PNhTT_vm~IW/|^ǩop[zg[yB Jm v9/#x=eSRڇD09ZIo:v<DžV:7N7G2˦}i YoՑ/. dʦ8ܓɺE=-nafiuankkd#Ȕ-|q7=Of7rŜ$?(>ʮ;lѧ;tc4l)YÝ;&;d39GlT8vR{qd%t-b,>Fo19UN$_ɗcM&~6slLQW}xtww}$u>қrjME8 peUP&|[a5-1-w3P&r>S)"\G-\gc>9!%GpBșb54")b_r{a" FNlPuuO3+;4ޣ<ׯjf`WĜ?oEqo'KR^w V8{dT`åN%"}`r45R+2)$_)bϘ: ~xbXKo:yZzL*>A.-~Ҹ>ڧ1^j$Xhd1펧R@^l=tzR>q1 Fu1K _߆Qmv"qj|\adR8J\섓|^=4II&m'?!'g0 KC FP \28فUvҵ u%xXһT ` # 霢O8wE-zT/0SN ¬G2=:!0Y7ًiÅ!%$S6cdTc3`˾Z-jq{2-:JArktb6]cO9!̇98AM8J+ UMIمG=w.ǃ)Io{I Ƙ@o<Ko/R5$ +[C;E&[;E$BL?EWlx3u}]w>E|FR]E5ha؍"^<@@=pu"-DԈM1/tՔC7T_ ll>yJa*2wTUW)b <.a "\H4q%{YjGMnw3D#mnZb`J$x )$G$JVTWM<ٙrdn7}HVV)I(hgj= cd.:!]`#P O58z-'6W)tDusg\;7P  \*7Xڭ|PFk~!rM:T+F mћT^-ˇaRԞŏ,o/sw,r< Oh*nUGAJc(䱴 3J>7M.BíȔuGY:wM~>P*)=h9ݳoRPSٌ7xjڱ^U Ys9R\8v} }M4[9rrqW.xJfrwU'42`m2Z0f<f0v'z7)Z¡.{̡ԟ,J$wZa2v>Y}QC[fQ.z()Uۇ'7N.Kkli`{ E`ju(D`9Tk#BK9Uj ae-3E *w߷'Fݢ 7'w9x'jfEcE{lZߘJ]veF [|# KV8MYנs6q>-r͞H) t,f5sˋo@"[!c"s:&U&a6kx>If q]#KVޅL)jf_"IfK@-NJx?.O{ :"W/3aJC!- ~{`ZI}|r4f*hiԲȑbznJ4P.OרUZqŋ&e ݓr.aĶң2G?(|pjchDӼ4b,H~HU_M8mJÉ S((/IFpWq9i'tQ='#ROlj&Eh1X,㊞`U5߱j1Ք]Ipiײ4[]tSc0ޅo3&$$@:?_u{1}o*b{ƞxyΣ-@]~g-5Rgbfܤ~₶e|W;;Oz%" Ȋn,؂SVJ.k6]ոZ Ase'NESA_1c=2 $U+9[zM@Dc3@a8sM6uV!w4V3Zi &, g?ÛLm"ܫoB<x|5\'p~okw_Z%I} )i._G}Yp%j֕?rχP# j{ ^jᦡcl-?%hItS 4Pc$l"-k3ڈE<`$͆7xjjQ1lCJ UQo7N/5zM:I+^' Z9r:\S0\8?M8zK"lq hv$&'#Hhv'dY(; k' JR~QjnX@?x bnE jxRxMDDͅ 3 ՐoU9_d-%ּHuKVf=+Dy3P=Ҥ>hrKua'eJBťu5ny'74/~JX"w7KH6gI~-zcF <*6y  "܅0L$*КՑ|SiLcK3 =k*G|scv| }vC"q´-ME{ e_{qe$&άCq*ҋ3"x&@O !I-;dWI޾,ijt|[x.jYAڲl=aUl`WX#_:> po1wlNH(|1H&bB%E]J:xMV{Zm/sLnY%{n)\[_g ^~LO>MVH Gh'V!/1, |ADyS}T@0ԙmŕ07mM-,c!2=A/FH4+'BɚӽpC"SOOä _urK[7 I]zT%2}#?bGZVoh}ph# \=TV <1Ǧ74F *24ʼ惛1:i\' wY Bb9/SU.,2D, XM@m{(XDQjd3_|;L@BJtlD)>o/nonUxI?e\n [ߤ8{ӊzDtb3Zjd_q⏿>pu1eE}LDkw >POE(uERG\ Fu%'skJ̝)YaC@(I(rlr{)CZi׺3FVD)밣Jn{|#ݑL]PqhL4"2ح]iZ:j|'"-&Q^eE#ӂTP޶_JHa#_g nhqPX^Rw̛kR=ł_W)c$8@Ƶ GAi*0 t^$ f}ղZ;S[t칿N`Aab4מccXKFM>ĵC-2\-zo]pU9?y18+=6dN!cv.E*yue ΟAT/]rEY$$CW*I 6>Qʤ Cy UFcRˣV^Gec+*2p-rco3sAnTYJ@T+sRX8Γeǥޖ7.V,Ng^3Ŝ38fk=ob\g_l`ו3"HC]ԸO#6X*/.t&~OK*uz~ct")/}2TDvn>i0w=Ɵ)G(´ D`ژP9,Be8.K?v OtZGqYdư`4A ?5:TuTNPJuS,@36JJ!Dn7wNLFu- dpşm8zIH<~rrArW00aP/r+F3x|%J!TK[KR}gyAu:+$/e繃j)5@t9jaVp܋ `ʵAY붕< ^Epۄ~0:z q DnP|A˔܅'Z;ƽn RzI&a6C-ZYaXE =ɷH&>{$29  Efchb-n2$jRv_m˹%d迁;N}ڳJqŖIGWx<8|E#1L'(v>滚rrs}D`|2L|lSvvuĒ*DdqCܾOmdTUs#Ō>΄;%/`R7'uoOT;P2kR }L(lZ3N;2s<ڗqGӧW,鱼xHL RCJwWVE2B=_W?\oe˳GϷh ).5 AσFGM/&hXƵx(hI> stream xڍTo7RR"P@FlMPR[IIinys{upJ[-! pȪ+ gb҅!!.H(&.0 Ўp@# E@(#E vZԹ*p$ Gx@mP:?XX aaA?NP NV`G AyW 1; !vBr]l%X9nP@B!4Nq3t? :p@+Vf qtOg?85߉?VVp'lì;pt< u[8: iE\HoܿӠ,;9A`($A] V{p5\ dYa:(V@!A^!~q]@FcB4 B]!K[P+b )u?<f 9zLjuPTb ?F;|BAC tQf.}#q, +KhфX h?o!=KG?,:`'_hBDC^@hu5ZQ`HlDqC Pws(O2= t G( xQ@лg倾\i#ыcez0+]\hJ%~?8Q{B<nߪ?%!ῒ0඲#+ Fv} :;tv p=x1!x!J..6AOt wih}uPY4^ʙ!H.W~|)N'3cFX[H̾]C,kˡJ } '†-ۓ;^4O1$Љb<$a"~V5ލHAP%U(CFXmT*NL“5ҞǹU,̒vF3HEhUϾ#.tN#T| m[tVq`rm!hg`yNK%Iq]J/N*u͗uP V[zl<¡'~SӧCMf$yv -w}','i6otW;2aҥ`QM)b;Ybk nƽj^aCANC;fW>d-i3rڑSp}Nk aNM4r5˄, yG_v0Kj ]zC6{7rc!CӠgϐ( jsTsaLo+i=~IBHK!sZ4CTeg*1[3Z'/±|JJ5({Qd&z%}h勦U`IX-z}{ի FFǓy&#'FSTeΞG`WgStG>?xL R0js7NNW6sXGa`n݂Zݜ]m%PtH>^x-M'%N#OPN(jm]`AgTТͅOXkea#2 d-}YR`3 SkE/hҊNUS[G^v|d ZGD=X[`ј٢T{$.+JS/$M ?:&{Rjf$qJ>&FЅG߷wSFh~~ZlwW|V8ӟ[3y:ii[Dk6{2V4N&-K[؎jWUWjףEXn|=l2+D⿻ >s^ 9Bl~T|tF`3rQvsilw\9s1󺩯xU jF/-f_SHO:TU3vi?{\y PuUx@nس`^oSz@igF9s)=T]0hQƂ6?ܪX_lܝsh<|kؘ.[&:W\Uy?ۗ&V|H2c=lP;N?@1I#Kb6glC%NF;}9Isqy& N (*mn|%V7uZ't)-|%F~RkӼ {J-㝞9sغGk:'Sн3D}axپ?5Δڈd<>bhPXhy9/j Z+IE9h+%ƃ\c8_i,aAn4:8גғ ,jwFQ-9X{zovnuP8IQ\%~] 3@Ӗs&i3RiFIVK3ﺋ{|.H^+~ԭJW0P?\NG˳ /;ӡ;ۺf\Vw3kqsp?0DmlVUxfN @{,Z,"01)hY3_NCHtP~] }jNuݫQ@Ya#ǒ0 ˩.{5:ʟʓ&`jg8xAzӮI!GSCdkӰ$`@rje)HZf<1A b΅!R*1D7nUd{xOYțGC+# c+JHywn V;׌]Sf9%oL:& |=|gl;չQ1W% xt]گ +{,Zsk/WK=i`_zsY >U5Ia㧉OeI\x)`S%HwՓcJ3KMlُ+13!MqCYd##M[ֻi>LX#Btww,3/gSӉOVꕧ 91x2n]AJ$X/+jeʑeTBZX0y0{tbMu*B" /I33Wܽ:'r^xkqMiaʷ&KfQ%z8-; h, IKDcy%|kdP`42|JlH\ }\*'RkRv(~Lpّ߽>y{LNxx>L&X4j~%vD rEj5ީ0şlmHR v0@:{h-qfa_)T5zZNUrB19O/%-Fs2"]E R7vPY#:H6/| Oj.MYl^ K]3AǦaR\+h/%<?g-%$H欴R#:& %̸Vx"8_c([&j!}Ky_WDU蛧)}펉]B{?4ک\6tмc\eFEQsXz {bnӷl9לϖXbȿd&z0Z$vsjyFB#@GQ(fO@+Q!4|\q뤿b rJlTw5 #!H]Vd՚i]lHP6xfXmq^DTx(RS&:"Bos)bo,IγLj[2]R6$"/iᗼ7tdh!BM9RҦHиOܙET??Cn2ag/9f׺BytůZZ,WN)k *alԋ/vL .l!:lf0aX7m} bҼ՞m2c5|FgZzngTa ۋ#o.)7 q\*v2Fߌx ݍ6[eR:2_x='Et AN##9r9]=zZ$M5ۅH4pTНg3P+ +?mrR8TM+vVAJ9/xq#KUNEqdoėJ!k7)); vf\q6yU9xF>9?QHvc;nf1 㻖:bp7S:`AnϹԧ.#>3}u4iřžD6WPT+ޛlRLffWg&^wcsvDQ$]u@lp!gs[D3g־RӟU *Ǝשg Lb9NpŬ_4z6Uā^?5㡾Cb>>VcbrþL\N%!p+p[L!d1mo+OljEJ5&cܢ$D#{S ?*$ _yE1s(7Oh~zMjgeqʶ>W#Ԫ ,n$Jfv*CYgd Nsv9r$MRmR] v>|BEA񓊊 s^U v≢(}Rx&P{4_} ݙ3ZT*ޘea6#JJ<^b5WF75_<ʆyu4SZυƊ kbVsk䔉٘o -I^.037BE䚂8(e+,F;ihKꉹ^7ɬx5 ڜ{e_R4%wOE[B+'䱂y=6?mX[a4١ߞe%ڲ*$-n˩ ?X9`N ,!Kvmw '򰥡 00$ؽHlKד`?p N:k s"ru= 1ǽ_{"-`iɠʵf "^v[쒎rͥ'{RH)0̂e/)ꑍՈYuyOqϦ#.ODnZ-|@!h_7)gز9/ . a=CVFѷ1? SyOigmk5`"wa"ޮ}L9-J‘ 1~1?A cǻ_2{aIEE-=Qab/dZ~I~9&a㋣Ӻ^`DeV]5SgJID`a 71C 'HX.*̥O@, ~c6̗s#gȢs"C3Tuo~NTbjYv@45[m!ƹӪG]F  'Oid1+$1yOUr=?غqÐ߳xٯvLWB1ȝM֍'>d,ӉereHtW'!E{9]5d/3~^4k6`zJj4H_RT HSfU+gH܂Kؤ;hw~`YCZH`Lҗr8$WkjLժ"" A,տI'K#"j*ȿ^Wl}5v{~ KB eJ[0HXTu_{gcH໏ºyb֡ŇbףzLvg|TBmgAfcT{gM#BY(fbi_ݖSX+@6/].Aeq-hA9c/LWW c_-v]~஡d`Z.Q6ݙQA\J˃wh.,\C'?;)5G4f277<1-$0öa\}>nR\ΜzzWXh<iœǿy_̻o*C9;6Ϥ8HԔ13;nk1uPRG}Ԩ f~fFeendstream endobj 230 0 obj << /Filter /FlateDecode /Length1 2676 /Length2 23466 /Length3 0 /Length 24966 >> stream xڌP\ 4\Ip; np;3M2{UUMmk9ME$f`vwebcfH(XY9YY4m\m.6H8M]A2ISW=@`gge incPb;]$m]A4 50:ۘL]v FsS[ ?!h]]YX<<Կ"67bF߈"rQ@(F\~#P.ʿ(/(Į5~#ob@ڿ]7@">鿈 35ӿ#~=I~#P̜MA)Kr_տ  QprhX, I6_z'7yvu7X9Ao fd%뗹l ? (@ra *4w@P, O?Jwd.=6Ѓjw ?jP1ՠ`FqvÔ/qh'H{z̿9 \flH@M j7KP1..v`qvfz8J㏝y{AxN7nΠ=~zBօՈz0 MS1,:=~Zw)ime[Ftk=lxKZqn+NxؗoDL{Nځ wS8ayx~V<6WͭT6cX$Goj&K>%1 $AhywZg r74S,Mʃ^Z?je?3t(DP qiOХV+/t/Wʆ 厍y[ `nWR&aRݑkq4ju2JfR/R-BN9( |gڕZ\jd;'L }|?-~a:h_TzD} ɍPrQI(ݞ78w'kCz*z`,)\Tp(h Y؋_ y^׮rG *co¸}I@PC.{w~jt6mA1g_3@+&6l~; z]6&2yMC~6}~28%N%<0ܵ]dzsI,(V\<.5"(}_>#"No$ac-K}l=;o_XX Y< khI7I>A4Ɂq*6K|-:~' ,Y1MK & ^ֵnr{s*u=NNw2t[/O{WJJٺ#q>x zNCiB35tWqe|L#$eHiQhzUX?Wq˩RR>>T43%nwGF٩>U{ʏ29W`^sKL Ok/Bփ\>9V.җǜUk%H0I{m9cK*?E u=Ix- i x8%cMu<\d7t(]T?YGu;;o`C[H+ ZZK#)si\yP2OTgxߕ $Ў<=Y+?`PR gmɕNDtf* *V̨XSLҎar֓X,oz3m۩TsI4Ypθ0$o3m|w!R,I$K Q_pHDĥ1ֹ0{WuPB4ƜBЎ쵣tPSk~kE 'v˒ &}IË"uUIi~B>]kx? R@[[`!m4bJY%kÆ|$7,*[@hC\zAAN31%C;-UUwTe*YAlw{SN56ܚr-'B@ѻ<( psDY/ʜ ʂݕ%;dx(m^7mUwUG T> %MQ7,,MSw*^XlmͲz$xd g9s7&9~6sy`buӰ>InHsU7r&qXBυo%|ͺl}e%`gjsflhab66 -^*zO+ўۢr?m ,t*lC2 >̳hVK.tPmۚD,o'hU;ыu 1ٮ$A>q^ҹWXx22}3T2)ÈXg5qr]c5D5\(sxT^pī,F>b裁ڧBiM#eO |%0 */- P٠L ݰ|a.l=Ωbu!ܲiV.o>O[+-{yI?R(1^\>a__Cҧ \8c$x!‘IHF15#n9ZXP2MIVthFD>y/rl۫=tӸNܻj8<;L u|xp|2^;p<+E2X;]ix]Q/ sIədMQVJM#,T=9dCs}`ueHt19p-^?mOܱ%s)9 ȷ?_7@E5Z(VcDq֯MqONgȍE`UEgӀ>tNIbmyL:.je(X %,o B7-|<;! ,ۙS{FvxuU pyQRt9ljJ`rӶ24"}rgh5#e+ĆY8q&$5% kfj ayt]a W,4HF_ow\kߊay ek^VsP:&׋,4,x'B@W[E 7}QN }NS";l ]DlIC죈JK!li/(HZCj,v\ <:(_5( ՜nZ~{`i&ɾ'~:9'-W:0/n>!yL_3$ ЀaP\O[諅)Z2p~2(ʔNABNDr$O e$#f7 Iʾ Cvv\IFc^jɶO:Bp) Og9#n4$-g&!K, ݖxt ̔"2֮-vmZ)Fն9̀eNyd62bDZ~h`\4rRevֳφfݾX#Āyd*pCHƮsQ W((aPi$ERC4[Ot_&Ue§V0aG:+^85S,O]6p'2iyߨ%ۭʽV>#Ur.4hz``}$,}k*yS/W{U»-J=~٫оe*cJ!vNj pF ewpVhU֩B wX/eͭF!7"mvXw8L!6+ՙoi1hF5{$[GmHxpto$T~;l0jq2IkXd+zDueA|وٺ@e0~saس,⳦$~(n(zto`4UFW9Lq+ԎӹX Xк.[E@NU3!O% XBU@+:1SY<#ViYP8L+>B"~zBF`-hB|/(9׶h\er] ~$] ޒ[Z= zc}2:l]&nwP's+iFK܄g,Y^&EQcQh&S#RY='$H{6W!~okDv{4Bæڇ|HaGA+4-ܼ{JȤ8I=y`" 0/1I;[r)iqodI=6Ylfʰֱ@X=ymud5j!ޭ^:g2U̓jsY}ĠWN7=%iyWiFN@H<'tשY-%b<>a,J~ܻ<{#24crusIq2 &YD/9Jג.I5edbEy$ίpKB7ʹuxU_9NJEi~KZh(12`Wȼl4:B ZqGR"Y*q HK>PZ~K'cm!:7~q-)? ds n%3DJ~GU?(6c 9M(ҷϷF3I]GI dYWo)4jfH9I5Fޚ.S5'窼e;k{|i:n0 ͼr@ϝ@cT.)2UV떻1A%* }{VzCg&du2M:# I&P{gF=f) շmS //\&q=c!|i$6 Ȉj͡q!~6~-⣗cÙn0 Y;ZrۑΰY,Q]/E z*x𠫺Œ4ÿak v5baF2WDHmJ_p]ޕoh_~lfT!e٬][qy܅"{~œ' /8$DW8'KxO0];޲M;DaWuMVȻ0*_Շ^@HyJW _Y~O,bjTuE\/. xlYy\_ö#Rop0˴u:쨘P#,e2^]B0j\br&,~LomPG28 GWu 5vUGdhpVpLLH/LȪtV 1IaH)% GneSb^S }zimI}8rR?@4cQ1B f`sD4cݏ[ZHx'0AЦV_uP]lѿYI J?@̈ w_jEIued.zOYY3|nLVl=2T(Sm]?v,I.xK4ro"0XHP#7~}yֻGRp2ESTElTGl͉eȷ&J'Pɾ=ϻ8k: L-V-FWFl=)B H{{C3̪} ] a^Ejtڠ@јe0Q<{.HK6ѝUqq XF|Hȟ43;G Rѱ&M75 ]:N&^:i_Lm/|žp ]űwE_l/ognմ:mWWbԾňJS y,Sn,*N}E^-tvc1}l956=|V;w_oy5'<^Jn-Ү_1DբWK0&2C88ddkvHCssO`)ٙ[~vHBc.s|2Ɛ]wvװ[y`;9**]QeLCHoTg-(@aRlX>a\I]0$ @ΓKl d%U=.`WE"3 2PSd ֵ`BHҭE0UbbL?HiTݩ笄t!ɬR!T@-j$. Q .O'%Rgǯsrc® vG77B~HhV 0է(cT!6τ58{MK~u~+q]ad3xgc'Q$, EˮD̖pWZ e"Z+ENcT/ӌK6w&i +y)U,F=Lc{r T gqk;g)B9d&F[wT)m*:rQrzی,6=%L;siӯ:zTݞwaZRop:GQ*QUA0{Om=c1 :ou⊟ i0a.{[o5,yjFlQc,ý UfP^ϔ4F[&JtG\ӟ:n*PPi!r@."NMKI_a2UWk˛]! «]{3T?H*W%3~\A` B\!Emu~Ȧ;ixT*8nWyw %b]Mc(ݷtz<^{UJ?pfDuo;DzaiG M<^e]FeM`j( 57 u΄NkgGOruLմv:K̷Ű<TxAxpۃ'uR=>@{S F*Ga~gS8 إBk7u$B\00ޥ9!3Olw bj虢K[W#yǝB~R! 5ߘJQ:.?{uc:jL*։iT;ヘxpB9M8Aԡ#hMo".Uy5@u''d"]肃ȱ%ySE;;d`}%NlXxl( m_9O&G^ΐ؎c7bcP\X6po9dPPeߣ:5c~loO|1:YXV$@~ix5Dm~!jxC5@Z`ډG4M%;5ޕUvEcT2PŖ o2#dMK%WsEl(u 4\h@ L[yFv~9ŕ U`R7B=&QHq^Z92+g诣3܉"lΕA& uGͼo!N7$e0xcn+MVC; G՗cW+sŜB 'Nȶs7 [B#1B$Y6%F«Ӫ'%=BiD?@+ 1B#>m1 Am}mX+$KGT^\384>͘ǐ - 'qA뗯+Uba5GL=I+jb 1ݴjؚ$H'5{Ѐ蹈M &ˌQa26[Ӆ<$ӝ3$^z,qL.l&Nwp(9I3R m޲Ǖ倚R.ÒcK9-G:Wuoe4ZK<L>]`Vc8R,+wcnStF{S 5 ^$`kp )vQ,6*Fi^gCVϾ3LWZ/%a( # o `a ȹ1x_J۫~zP`Q9'WZB4dm^킼C ^Q.e z.y'l)Kgf܏$9Pm:)G<Һ ԛyeSP͡=]ǭq:8GEX({1DFV4*~ 'ZgޕؕZr/p'NrJzؑd8[fJPf <`6мh>1~FmD*_Μ~&L|u ~lt1xM.ӀAG{7]l:쀙zi#ɸ*/ZOm㠉1Rye(2'Iˈ;^%j'jx4>*G.-j"(ʯﲷÜy.$#V pgNHW 8)N+[7ޅLc~d!Z=T -jr0!~He<}nԛ-foCRPXR|GL^oL`QV^.4Fz_ 7KvKuDhQN> 5zaАNW[<KTgAʉx M[2_Q ;IeupC`Hp;:}Y+hJ!6CHLj;$td݃Ml r֔;(8q0qq)y$t~WGMJμWfz!rkgZtO?CK-QaB#uKx2+dl mSApE!m㏡tֱ}?j\yaVmTc̟dހ_WcCKභ"HdS02eRJdlFS3M:E&H45?R1<7brbBuUvF^D;R 6",_Xq}q>x}jFE 3}fDʰ^6hɄ(9|xN*`9˲uB+LۊUg3sHpqܪ }rl<]bZGL[QvG,(" eO; Sa/sLi=u bcƎr8\L:з3>H=gSཊ^*!BS.p\ѷF`r~_!tYUS"bfhڗ,!j<|cr)׀BA 0/[BrjG))Ӱƛi*x;;ʂ'5n1p] O--ؘr!\n fI1'9Fz6e!%߬n5ӣ Z=l=ށQ]~m7%e;i<'XB*j+qU`6HF3ʌbvI۠޸Gw!=,?-c: i% Am%]+`DzN6i޹ux.`  VQMY?c~pwl B~LGȉL?ZC^Vt}If)P+5 e _`qGfH| *G_.332W,-A0P&hT:4K8$nQI] 83k&i cWRgd\(,#ogljtOY ~Wp}u/+锷ǯ9b֡ ^-Jt2+&k|;Ewl&iuŭ(hÏljɁZ7zF5~Lt aܙiws\/Mnf]EGE?BߜLdTD߳\v-l6W =5/C^ Tb )kc%VJf)KTK$%-X8V+!IĆ(~E7'znWSO'8pu}^ifC9*|k%l)77[ALU~#ݹd%4 tC,ʋI,v֙40j'QH1'=J7s'$ {4d-wIʼSRׄF~]O+I{/VH"C+=h!"|^b}0y6tWtPq޵C( Ia,ۑyd T_[Bf'5H7$ _/Sa2 IL!ܪ,}3 #=CE+ظ`=:FflesxH _y2)~TT룚~+$,juw[)7Qj{ˣ+;,&G(]8M!G#]grl ,ZÖ~17 '%eGGꠊkq3kLz+)2XOxLA#z3~=*%Os\qD۠˰ ![~MggG~Wej9(Ǹ3ѻsM|\7+-?맍R- carmGݚ@BlŭՅ^na:vGBc;4Qz5C1X4b^GNVtٯ3##* - ΪQk^28?1˕S 'U0=K>Ft)\%@O/j7+XĬ9|y?2b+K%k2-M#`i*tplgv7y*"oƉJ[Q*=!w\Xnұ%T8w$zx>Mvb/EU-™\oV_&%7X(Dg'>!uI&tTAktR\CuD92iNL,#UD܄W&Sz=BT1D/fmLۊ)QS<8Q3S_2iN22=dz1mTPBQ,;QTڊ~H?+D$xLv;4j04BcC ?E"isBM'F\kYީZ t aC|I!ny.zD'tҚݸ*X ҆ZTF_ت}Uh8YK`˜Kayg /h*(٦Ucʩ*"JN~V2t7%J/2$;h\ -zLf^O_I`/E'#)+ %CDge)OK0 MTއ||F&3ԀcnkhD?B>4=5Qdd&E:1G TMCVZTKNf0h֕7Od8LSLH;b䒩vxYrbVORJ=;\ΰFЇ)cLy8pkNoN/\wr4qzh;<¨ ٝQw|f@ .APoT #Qn*nK_b8S6a+O4|m+>dS+Kp$NE5ԍ_JvV$9_ 'ƻ-vh#wF!@{><V4tm:`6*V;hyë9JEx7"~(' 3"仪Mh^08H4 1zj/o^UV,^tל1Q[{U(C@bh{@-f( 2 @aվ5^M ZZ(g3xZ{}!'!Z { Z=1κy`-w6c;aP~<5 'By7}3 r? 8Z9=[?-vAwm~xgGd+侟Q .oHb /Rr;/:#օ afVf7оm)l2tcZfRUV>3^΢#\P&_b~Fd,.Nf`{{"cDyFbӷmn0c]2+:TWzl(l#Z Ɏ[=ٵOz{S&OR~tr˫1 1@29C(ǧ ;"J1 ڣ.ƥ-3cdQ3uۮ_Ia3KHE@}}-d$Bo!-5k@]Y⎅bb,qˇF]a/_SKː[Q+sK={ZȾ4}Gcz~sL7~)?= vqh */sҏ%) X$Ftnњ9ygV2嫵m>|?Us+ɩ1&k ^3/Ǧc"$kbpK.軵o=y,"Nl/F*iya*YQ8*ňͷĐ .ݻ5StK z$f< W)dhs zgLrDqb kw*<c@CM s8+_E@5ccGpJSm9&8v ]l5fO\.hSY鴬??|)3_7Z48Pd]>mQjSTy6fk(mX|w˩PPVݣz'ɄTNAƻƗLbAM̤C՗+ZF`WA? ^⇹'1ٝ<^=*F![)0FKK@*B6]L*V=z"GE͒O<`fru_;;/g(0z+ODBGdɡZO #& z*D$(;7G.-`/f!v(Χ^ 0'Upo&/< tuȡl<0%h-+ߗSc%J%R0O\N6% y&Ar_'πg5Y*Ufk, 9g+WC&ݷoP,`-擋-unsCN|w 7AjXZdr=<4&Ē . i ];ny&A#5w1p' ?6ѧUrv~_u mxv 12'Ĺ!:ic ȞbDa yPy6q(#OlS@Y#< Af ci¯-}J.o퍳i\2*(@X jY, p/)XȫlvȡN!]bA14 0C3@i^!e[ KKLId؛Jeu*?,nT/vL}KpR bHc]:Cav\EԓO&,v[+y'$#5Z;2j {Mn6]1 e|+?dLSNdSu>r"~I 9?W ЊDpx4>I:y0">hM Yf,׈#.[7`tSϰ.1E >е58tkao.X]9{56^y2>nBb-# 4P9x|?;O$XX*J!#H"Y\as4M9k ,ֺ`-E% r 8Y] WxɹP[5iQ=礅KɏOPQFRf!^OnoˆAuWޙ tGaL?r7 ԕQ1PLn_1-' Ԓwt'{u9¾DAV3O=y$X -NJ=l~ \i}=XWcc'i;%g ժN=щ.Lv#R~UCUɪ/ ϔ wy'x{F #55۴>v,dr쑑c2iy tS5ЕcH!lJn @sWmMЗjI|}R܇K گ~pN*טJs oqAN ba^'kZQ!B*S~McIxT(`\tT&=CsO^wJcH 5uGjrZ@+@zQ9r->׃ӻԨz2;8G80}m|X\6|hfegdMHP`p͝wX87&>l)} 6=HGgʇ%[cQj- 3,{̖Q;CME:Q5cPRrF KqhC-SQ{ mE[[0؃U&qJw E1"j-@S^n] ! u/R(VRK_KisƒTE 5q+LdYбAQ|u/iAu^_ùGvc#!@}\k쨉i>&9RE{NKZxWӉq\K@=ct.3n4=#:[jRPs>ND Lb@8u`.~wIl=|7H&'a,^;}T A2(bCi45X9+UA޶5Ը`Aj8VWXƝ- ߯fz%b7@۸khH{xBK`hYƨbv1rA?Q(cM1cdvq%SZ Fnb f%2m i) " ݲE:H6zۮ:uV3< T&N:a$u!҆! 8 آʠcv5G\sf`틀+b ܗvw\UKPd!boSr Ȍmu Yb0&QYd8d 6(/FPnq㳆ӥ& o!5{fJuU=rxpY?ʏB3׃omxWg VƗ.4nz~$${]dˏV'>>x\̚;uPŐ/Z| Fߎ|r%}zY7ݑ9G1K?*ofGױlMH,L?k^s0+_G?ï/#Va}Ă42vu(Σ6*p*anR*׼}uxXjG1MPN\f.IG|'k1tq. *NZO#x©P)ONA жZ.Y 7~:6V\c6f"2pz1:kK/ Bj_9jk NS[I<5fo@?b@粧mh'\k:,o祥Lk - =>h&EFL8f M&APYEkRgqeX;@-.u+UII>As9ߜ*sGw'3;QMP',*tZMWS=I)j\5H@GHFh yWP=QaqEL$qe6#$]!䎼yʒ{FJBw*uDX1RHEg\sg(O$<qC,g 淜+4sc@ @ &S9*\AQC\LG"r[w:Q,BG߄6$Ӥȳ-;egzoYM2  Xy(9>'c2m(NQb'[6z ,TĻ31:p4*'x1Id_8ޚFWX$a?N/SUNTIG*r,=?8a_`%x+.2lADslpODGhW6dѻ }R'ME|-wFhAp\䎩ozW4G<֤M{u@VXmP*`n­~s4(I)qJ>`Iie|_X qv/ۏ9\_[6og`\=ا5 2bmUd,!8qas^㥱dob=j"?ݹ:[&="9'}5;Q\Ljui[_xmFqV!&QĿV0p{Ri 14(G哂ɑZir@ 6\[115C6f{O I!VR2.Qmd@{+Ͻ҉ERCgҎSa]aK?ۉ92cx6>"VUh~[.ޘٰ#qnqD#094V] S@2vVzAs ̄[siAП [sPC^&o}caZ(j{>u^񩺵Ě|>LϿG!qm P. ݀RLU# [T{%vOT#*r"kuh|i푟|p mdQyхJ[14 3z_<;x&(?a ~14I1@g}1au3]\.!( x:{[w/f!l57@@%@yɨ;mʀi@.?h̪uˇ ldHA TO``y> E=y[ 9ĤDb6S6?bPly[3m rXX܁4qTyt* !ˮvٶLZ|p h~%RrGMH< X $]yV^(s3]N-6 3t5a{pT?Vd#UE#apwHvĊz*B} Rq"PkH:]'Gh좰Ã,G|rju{Y$f"{o~>-hz ;D{zWRPuI곑Ĺé#eXNr=_π-keR`4NQQNL˴ۚX  ,+Q/Di\BIv4p(ǔu3EJMYb 't$t37!c{E邢kLno~j+U(~Vp@ 2X+`!\odD1ЗMtnq?/^i$3 U>19ԣpF9@Aa%?fIکKX ݣHg{z(_ƶ;6UƝh} Y|TKA?l (N؛͇~U3tSZ.2K&O ?Fk~7jo:y N>d)6%lr$iЌ VZrF?םCW -q#o{ yިP&oI:F>endstream endobj 231 0 obj << /Filter /FlateDecode /Length1 1463 /Length2 6819 /Length3 0 /Length 7808 >> stream xڍv4۾U#vU1k'1Kkg HB jVUJڭj*)jצEњU}|9s_x빯911WuE(8DT74R`$@@?~u cP,>{!R@DN J1 @ hh(C~uO0(B~Up E X8# 4GplJb}@@ (OqW"@3w 4"ΈI?`s67GQp 7\hGlGϫB$ 3W!w2C#}` $AX1 +Co >@-US Ov~0 ' 5Qh$~O V/:c@D!|F!?; r` y~vB~|>@7<x p "`X S 7xA_WxmQn.LDT7]jj N\R(.)B @9"Uߨ TEP_4ԄП" Fh@do_4">o/"*' ZbC+^],?(w/ᧅ 0?W( Cg JG[j`h_3')# b0`xK[@ ŧ€nh W?e 7^x7 -_mi οm#GT1:,o1e~- 8 0=]*U@AQeGiL1 YýjZo;%M}3؆TƓSF0󻡧]\*+gV^o[|ј0vjUwL,է<- ~2>dL 8+/)V\Nܡ nQ@="݂dxȧg~llv\Gqjkz,Ң1{xr7)^*BY߇ӎIr&Vq҇Hfesn 7U~oS9ÚLE=>vEw0wgf+yb@ܦZ45]n |]^DY[.@?BA5ULϱΐCc dnhG(qZG "/A'8TAu\pNj]nVA.b{^+ iΛ잿~ڻo~2]d@9,e.wtsV8W.mkp*SZia##LK[}^)Ξ;_[j4+,[jw(=ՌͶGZ$N6:o{N3%dJ~fg/MSԾPy~yn"dbg49Qݬ7JkaSWg-2/™u/|U^NZ iP{;6`7'|qFCuj~T/207۟qowqS{.L^ \! >i?Lj`4*K5{%?* 86$ZYٟ|Eh~gFv2Y$y.rDxŔ!{()C.KE;S_'TК}A6uTzX>%9W Qo/oY!~?5qh*ވxaBreYFrF/ܷ-ɽ NjR - G Do?W>D$j#*E;9Ǫ$ 8cEu"1;" {O׶kbHٯjHT/ ?6 Xʞx{n]ǫV*S+<嬠N8Mc&*q[:ߒh7>(i{ëַZbe⽈z īTUf1 roZ벿JF~cDe6WEx1[[_ۖZ-JK׈0<~k=-Cb>q0U*d!3^ =!Afy-]V&znZlIc^hoÌ +aum`> ޿m`>dҷ1Meπ§[l \[iiMƇ쳁>V'?NB/BOu\fkk+Vz*w4Ű$R|+eo a>ϥ-WKdHhU:q٨kܕV v$ KV 1N]!))[]s _B6_Hz \eRzS*s\F۔4E|i5zXF4bڑV6^8*@SXxO_ P ?a!{l/i/ zNJ46s`.jj7'c#^b]$)ZbQ`@hOc:tNz$ks*j&K>OfôO(q}g`U6q~'%$\'"؟9whN&$q/4%śf噂i{Zt ЃsX'-Ѿ@)O_lhꋏ BsY $6b"|$.14a,Hcb%Y ǑZuau>kHZ&siK u+NU\m@ܵKb꧿jȽe8msxڧ5tHҮ0ҋ+awoܲy yw WZsBH' m\偶zkAY=a Vy1(>~>~\hMz68!O_,+Sh};P}[|Q zQEF^z4o@Ib/ˎV0&u8r,9yjSm 4DM_SU\qb{hVKܸ%8st(1լCLRuі !\QdBPl[_ q <wvEQq֬A[tuX7ݷ>cmq))G "HzӲdKb7T?􊗴Y{Ϳ7ݹ?a\/I)5CR@fŤ -9kKTi0NSq$UڧOJۘ胬̈́ZW'J_=kRxUVʴl; }0PZ ZeǞ6!]|#>aM)Z9ЖaNQW5= ";IUHǮN؁Q^]9{10Ay7[= dc?1)(f I_9,bR&$>sCZ>(q-Nki"Mع< Xh=LK` \Gͭx~}VY#sqJ:Zļς0$NV]W-\ |wa,&>w*ʠVm"l)n۲E ԪvލjH0\'+-͖M=HV08"A2= Bُ\[,a:A]}j2~Rb/aS+cXf3!ULT=⅃meuZ& xbQĨj%oFCYXӢϔW_*K~@D`Bc-Gu58!ԫr͐.+?Cc9D/ǹz26 ҒNM^ۊQ|# qJ.d6Nt16p8vw\(;G[hZc,E -=r(}\ YdLw 'Ea_gQ=n 2/+QkNK"% 2o) 7r/.5ZvLZᛧ6D^xI !IXׇ0C6~&AMk].賀#bʧn>k!t=DIj܍fW[e1;^=:$ٷкֳи A²,^4O9X$,OMpu ع7U'oHM?ٚIp{FܨƘ:8z@>цF9Hm;tUZ.? M CIp7-ξ V@U!>=@$0Sd9faEl֖EG/0 Ӭ&Sk{ ZG)V֠Af5NSwN3g8}i͠Y `%@J@^)+-e>fL>K.tb"a>4#T܌i%]yj/>P..Oae;,{X-\8k/$ ߰+,F-r8~N\p =Kzy@JVT=yGԤ}(Vx(vIqȖkl|*M<=vVԘ[c2`xt5+Eh- *y~=k5o69.&#}bq|x4SU2y;nk#i=41˪Vam(mfRp t<ϫ3 9袷_wqG|#B..gK[ZIV~=Ê-pYPkR+#UqNSOZ'IaslIACĴEA"΀>}Jω9Oxz>{G.8գP⊽%+\X@r[Eb% 1w2ev9JĤ;8 `;;e;@V]sT>ExS?J'-5%> stream xڌeT-{qww.!xp`݂{p~,UjXI^(`JWSScf01201 Yk5.V<؈:]A21cW=@ `aab01q fneg8]E,,]A/ʔI;@lejl7vځ"TL^CAg`ll!@Mr]@3_eǀ@PrG`a V@{P(:1ǀ030K￈v665us4[r tc{ m]@V& 7H+A5BSg+GW+ۿdtfvv@{WrNދ;xVfbȨnoH[ft311q t=M- [T#T b:|T/B`fYLVAb?4V]&2?}М9z6ь" ZZDCgaep0s89~KJVIBi{s?Uᅰg<=Ԁk 13~1?.+9ImA_l@ ZyЪߦv[hffk]A"loxzn6V.V@3%+WS˿E*9Xu۔u 4]2.ۛ:,cggc/&Ш|A+k{  B?3_`0 %q70F\F߈(/d0JFF߈("F".o`T@,Q7ՠ"hFTdi/bfZzckW4"V.6]A&|gcS 1w-gWva/b:؂ߘlI4)fBVPfX6h6/h~j3JnXf-z$r] S^@?,@2? 6@iNT_[:;t-2fqكAbٻٙuYft%/ffPeՠ#aw@'hGa/F4ctrsp0ffUT g/ `Sebkb1(nsFWKg:W?@noS?[? (a?DE$OMݜAMpݖ@SySPЎZa<qonDl m~qf)X TBC'rzpt2AHE04) ]QM^2}MN=:'&CS w ?pR#(WSW恙%d(4@)tr^Չf47'=`6\OkѲSV ( 5]я%9$R2~gNeh۷b11_ұ4}MܕH40<2躁0&Qz CvT15-?9ݜP`n5L٦\*1v׹ܫ obM,>@>,\NƟ"?3Ox9#C &FF:l||z?#ת V.'`<::j,_|`Ҋ38]FڐalZq {T f(=?=*aow|q) ^ @6pO_}EpMv= ? 2(UjV^O5<1UjTe~?N'`*a֧uN\dY -*9Ӡ<ؕ`_td}ZRvځ%ZWBٙ1\ϼn#،HjLt4aDx2JƎip.Zt0ɁǷʡWSŸ 6*9,G"c7;_ߧ0V>]I3;Ё4\RVnGN`5SK39^R4ª*{VJz0~+W=4@1KT31 fɗ22l/umedq!x {}_ɝ|tpZRuv`Z(K=*k7ҁ[܁l9G0o4fm( (Mg.AɖޮdJ}K%5y߇jI*k(ggy0kPhՌ](ط:&﫠)OS"Vuj -_LVE#`6Ȕb*[nsTj_TLO3֕w-@.%_}`­N(D٣XriϽr1G=TpE&Wic ]ґf<-dըCMLؼS> ]HxX,62>* AR9J7̄WJk5BFüMF"3fW7jň~/z'/]oggD#HJwʹ(ŁQN-޹Fw'8?wU]̺VܷE2Ie,,o-7r4er yU'X7Q6%ET`^sLy^AJRoaI- x#14갓Yq 2`"CO|@ϖNUA~@<=``ҶsL$e6V 9XOg7)nQPωҤSD*^Ώ TXIwe;J&e*,y+z[iوrVuQ*l=N/*kʻ"}LcdDdMd;_r*l_ܰ"]-*ef#H挧m D{-?[_Q Gd}M(]{搃Z~nSN7M≌/~WH} &%шH}!ak eȵyOEFyuMl)•<X:#mHp8, ʎڟِ\IQ/?\ Dʙ}$KؙC/ţ~: 9.t_%Yki5Cxw JT2GNc4,.jA t b*Q;dvLO[r6w/lA؜\ ܬ&n)C=ƲE*|hX^LX_ RA6JBGI2؋xȢw-YWH~eːFߙb*OiF5F=,^d8v unA!@Ĉ[Ģ|'(M^pV Ϙ~D?jVwǸVΗhcImnV5sgMI@|pŠ$ Kݢ1L,-k)rڦ1 7z,f3[%7`CqtU _81=sur0s+?Ӌ-N(J򧫓B-CEq4}7ryܭsS!l(4lH$: N+o`w%GIbﮦCUJ¢N,|k>5x͗WnRêEcZ-GBus/-ATf xb6/g@9 4?& urJ ^u s%Ŭs:w2D}Dž0 sv8ppH `:Ee2$3$tcOBݹye58H͉`tc\PPDIœiEoqGz G_6E>~zZ )۶\w}bQlH|7,pc{Z1ZXUZ(Q M@!f\%%~9G@Жh"Dyo?B$EڽdC׋ |qd@>;k;+@>F *|ʡ_RU8m{ bHOT~6ʼ9 ':cX%O}uq=PlAs9Xgbڟw5:m;RLktZf,8C75FE?mAI\Vo2Qy :挬*T2{ 3ei=*9-%EIB &⮈xwcCe#UBL.;~v;ߌFLvgH-&D [)z|{9y˜4΅A*&@)@?Dj`eD n Չ{wR 1>GڬmZ'0I`+8M@+sB vvxAaE=V] p%EAӲ6('X@W_ # L>j#=U._MBB*<2VXWX~vqhfIZcp ͫ 迲f˾79z^ygTz QtfSdmҊ!܈>wm :1 k$r'hm^T%`W1 x\uX򰄖Sk{q/g)v6raY>3Eao">bJN3l?e#i-o}CYUHB1M)*je1ӕ-\2>bxP }"cUҧ@Rv_qy ((BEO >!IW8g>ڹTZY1vco C25t9:}Tv51Epb /(~Lx@7) ~bJ5=m݈ 6/-z^ؘ*4dcZvi6͊Pqk(Fzڰwby[dCY0rbQh`=e@Qvf;seGs7Cn"7Lofp mjYt{L9S&߭[MLз~l"`>E4=$5MUᲦӨ|/s_Ko'^i #n/ԩ6;y]@*<~pP9YeuUADϨdID૟r.J70 qɪ+.9rƜDzxna:B_! S-wwV4\cIGUK.#]Hb^,iɒL;a=^|MQϩy\ۏZOUA,sƟAL\8T*J,|{qPRQyuQaV$r0 7˚L,]e#ϝFi|Im`v2>E @h8l8Dak8>;?oۺ^ēi1?2}vol64R(^v!|VxUё?tǥwƓkd#{(m gV  9 w08@h}uPf}KslW+"Di3Y=_U_u)n;^%R0\n;(MI#N.ExЛM~N|BYGbԔ!*EG=Da%vWKIӲl5)漅(~|b榁֕SBIyݖeo.ф1.4'T٣^8k_jY#6U1^p7Nr/k?"_?Yb('_b l\^}l2Z#k͛ɨsn>[h gCO]?3.aK+ mR2" lPü˭{ -| :Tlʁ/Mz?{4/qTfbCDz,*].jJraCF/k?WZ0^ <%o7޼hyh)eܤj74m^ךL9QÞǁgHPO'TQ0rUC;y5f/M^3th"`Vfq]/ Y]  ͖Z-fp#һ*n,ya!{woRݲU1`(} 7en=:UB#ۡEiFLc7GwL$oŵ*kk@I,ʮ^2j-"B?1BzBl(O]pF8u\^ KΤ ͗^ESd2Rcx #/HM&քV"xmv1PYk*{}OS(M8v[̣A$q0FwN0=(/~.LpY2bk W){gՖK Q$}%[8A`ckGwHM'QZM^<†6 L"yIeBx mO)tt xέ!2kXs1׵yoV v<lP[GZz =; 2%S!UϚf|e+ K͵$5dLljNdY] FO~b&r"~XsvA2E7'I*(Sؒ2 >H@ j֕Qmi@.cưK nRCD_qnu/kI4縌H#icI ʏ/!! | 4,,`E YiO4}PNAg8K"(f tӏyua a2m=7[!K t:x`h(DW㶫'^×\ihЭ _$ndքnn|B+ YOKX.: -\r!6oaHiQ'nOM/Hv[a6#cYGs R(Pc~C k3a΍i`+s Lk&h(/ědՃ(yg'';p"}} +$\EQ#\ zgݧj=4';q?Tr<:Ӿ?7OՓɗIIoǶ6AԚK;,+aH[~XlSh/OS&Ԩz[NFU# TKSW1~np/"s #H8yqAt*Ln5PvٚyE$%B*RQ43Ob+%DTlQs/Vxds-05qO]O{Okwh=%狹egFf;gOOux +k0gr|g5"lgёU Ӑ[gu?-X2+t Гܑb3/gdbӕ+rqҴŧ %ꊽn R#gW`z`&N*Q MRsQ^l`hH\WL|Cρ ^9f307ܒRt~bM'_%yuv9$d66|׬Īs:!+rbqhBۆ~H6|dh/.@ܦ\O?%#o z<7й5jֻ F(DU}HC2O "BV֟VZsNO/o]ym>uO995, >k)]]цjOy+ZQ尌P0_]n{N8SCZV :*wԥiL'$qX7x4 sYŴy81$1x4!eo<;(}.gmOlO{CuH[Ȱzh7 aAw:ԡ|Xvmuo]wp=Fa#uP!(AI˖^sEn$D4_CM1 , (IemzZνFSsakg+h;`$-_O4 p 4Ñّ;m|P_O1ͤxz~GQ<+ ;|ͺDbhxمrG\fd[zN_ =`H]f6ˇM1"j7n`͚4A7 l)nVx}鎎rOih-7LĜ@<:SFF_7&￸2UoTLo#惥YlXӤ8GtH$r z>vx5%`)K_kCvxK.ZVy6M.ZY4B0#M&u;`*LbI*]xu5J kz QXBXwKxAZ%12ԇ8^-,Ç&m͖i7Eŕ auhH 6X0.=#ƈ״=hJ0kt/4!J2,%M[ǵw{REYB]߶I$'3?L΋m*WnaWSS٩AC\+/7(Yz7zj!+̈́@mɧ_yG@_&eR}⺏o]>6E1&R(ss1r3f }؀ ėV>Wq #Wŏ:3FtWjGUPj*Xߐ5YU˯HrK8. ^|+`haل>4NLjaNu QIvYA7ޠܷ72Vy IVqf2|%X( Xx_Dnjt7aUїC}+-j[ӳQY/T@1>+Qd-|(],d)J[ Ű!3K$C>)\B]O.No2#F^zFwro`_/E9itu0g;{7p J&ܧQ.,7Ex{kxtS[mMI0 O2=:p2sƕ1L% 8%H :\e;EHy߭N XITb /;,۠֋`8Q^d^q7nDWea*dqNz}CX~&;łHhDK #EG%:eWd\op^n07M nF⇝7~$Wi1QMp&_ms7x$ _l< e#zY@їSɬyBxoRQJ`nq3{nh!7 xpl皣6R/D pa;oDiρlwzAAOJXsj.vA 4n/PͶRm >I&m0r8= [/h>X7aG5H VGT^hMXrL&AgFGHvtqܭu#{n:/D<䭏-%h;VJG?\kz匏z[J#"b`Y{m/b~gw%cmpi:N}LRt98 ]~]rҹb|4Qm[(Sbtx*#S{-GJmJGȡu<{US]؏e2M_񕲹 x!g *?lAzfBr2y7j-|Cý%gMc<Oq7{[ {y'aG10 ŴZ]唿mwRwKٯ(fHMk*G=is7QjӇjm/&)ONN$Rt&WL$/k02mg\oayf'ofD"ƏÈ?%{_٣ \~' GL~j1o˦FxjH"Nj纯9n߲N*I9Au^zQ34@5"[ :um}wȊ5}vиMWq{'p]]~g!q.|mEvn [eVfy}LZj7Mus52).\׫zayxR) w«:(!KJ=BiW֮AM3=eT$-G_%BCuX(DyKUh1kp{~nngyR 1]>H, rR̶d=Wqn=%§gКϮjdcQZ?_K5^7McUROP<@@Ay^L:p(+9xF%簵b!qr jHj! }>s$ HpHqOkI P+3$C6~ tJ W* RSɅbPӳk;)GʹYs{vg}bS2SJ3k!Ж|RX%]r FAwΊoe@}pd􄤍wll |:{P8gwXC]^{k=dm/TV'(&1iQ\$jm"9u~{~&[Fը-+X6ָVi0چ~I8J5=ݦ} 3Z갞-sbva6&r?v%stF²J2 i,(V^*WDػx2߬pX\iĔ2)vQ8O/> WZh IXx>S2b, ̮c*V9$x SOPKဇrՊRCgAXV5U,z'Cf!`EiAZOhկRO?#m5nl\1ˢ`VigխAc1עט.b/ |H~s2ߙ[_uhHI!i0$ȭ/22ג0R!Kn0\nU']s<ҋfbjw9|`5<سAF>/#dY'iL ܆?ojpEP7 Q.I8|&民I$Oe;OXduPݰh.c-ġ ;8?"|G[gt'D:bV^4ʕ~, .;9'@S3r#,{JX{uO~/i7Kdc\唎4EV7e=?Q7< v$x`t}-vmifoٟɈGgoDك-}Heh٪p(aJ$/$aij8NF'jLSҬX,t.]XC(hoCB Waq` V!ςGUX?2})LnX`NTʘDς?IJ#?K>bBJ66ƵmlLteU@6wϋoF)k^oJ)DԯJ,ϐn:AtRM0ueKOf1|][ ~9 ЯIyUzC+Da[r1xer`CK&E{|F+U7HW+,IIA2ϚElJt5Frrhl ʧ w]`s K/?:Scs/W_ ?Z>ɏVU1,!)ihRIi_iv J$sDPt3ڡTO?N(Md_ bȕiC|I^crɉxD,'04vih3DWuv~< (I7"FLjٖmi(9y.{i+[R%#%tLj5Vǂ%*;}y(:PG*Lh JfG$SeG]+cp]3/>wΒBq^B<a@,SqN)(llZA)BgjW  5TXӣ`n`Sn_4y*S6ظ"gxдDLy5O(}܇E2"4WDl&1$ W/DgM[jz&JuswT 2iB4J fd7H"eΗvkxst$7-ʾ ?|[6L1Wm R:{`T#\1C'^ To]SlqQQygWam]-0"$.Xu}qA{?BQP٘:|{Xj-O^֩Wl JEk}eX͆NDsD |C\SH2"%endstream endobj 233 0 obj << /Filter /FlateDecode /Length1 1431 /Length2 6043 /Length3 0 /Length 7018 >> stream xڍxT6E:{@@zoBoRB $Tiқ4A HJ.M(# |k}ZɻgϞgv2R`($F(,*P3DEŅEEHLo;  G!ec650 C!<8()J Dy^p(@OpITQp'g ߏ^(--%;CH sVc#3.#"- vC <p3yx_`7j$\g8/1 C!H(0Ðu( W?ѿ#p `+H/ Fa^`8:lcᇆx1ha4ȯ4cVGBUQnn0$Mkjp{"Dy#^9‘P_4"HO Do `0ȯ&f,@w;Kwa?H`/ O?W$@ `0'8ٱf_kl=>kQ_=`E!nr|Bb!iIQHII_'7VgwQHE{z ?cg}V0_TB}wOix"?  =vB 55z0(0vFNX Gk}`PqKK7[G@(4׽/v ػmo ;YFPLB`]IY|~K "Da!,@#ʃWcwl3PPxccx{Olo`7= $s(l˫je&o/ÄKщQgκDYT/n =͖EO0Q]Q~ E1:J=^K2dƷI1x$%kezJz (>dOg)vl>d\ Zާ46} ?Uieb9ۜ':U/"hncJgMʹ׈V8Q-KK`(r^Z1Yך/Y勞rZĴ|n!jw[M΂O8U8'{U∼n|:Vam$RCC,0qۯc㲒b6iHC.4\4 m<}v%ϡۂߞ+,RMo"Q,!Y[=I'%15:3N;܄ \|PkG8E ՌNuKG4e,/?TJ{&$v7X55ʚ] l#q^rm":s"h;vxcZ'42EO}Ѧ}`ݶ&bw I֧wVCm?PQPS>_y-OeF.5x>Tl)@P@We)\}MK Ƚ~?)^Q^ E, $*:kvn٘?`R k&XrDU`0{)b'|EsJ+͟H3ps`͓!EvvrnbzXٜ0{;u%qEw?H U#h@$LP\4K8 pVxPd/Dq쾰 2jSJ^Sn00Ϯ}#kQLfv;T]WB3yYʷo`/>LDd-sҮ˲~ 3C>jNVMeMͩ ޷RRq{CZjl~3 `n?PE+5]#bMY d[^=ES s兜Hd64i:댔 [Vl{Io1ڤeB-≿|h>+iJٴDOvKq)ŝ:\ʋ|^~DhR('KE|`5, k6 #:Ez&iys# 1[*5r*iCӁrbGhg0XYBcq[gZ@>)8GX^((ϐn3Ex'5uݾހ"蕋IV\Hw['K J92$%;nɺ&G$Ju!H%7#¿D:ctJq>ʥtG%E ziv6BMw O<$DȍY/„"gyR!@# Q6 ?49E?GLļ3\4ux7WS{?ЖU3!E5_,=nLnpO޺y֢K+\vtuB0Cݫ4+J,dxyLBGRTxaUL2:۲dtYqh.,>(';uWoXtΛ5YSfw{2zvʤ-;3q^wdᆭҺx_-cXlۄ%·Mc6BO/&bg$ @݄,/)$,NՂo\*$TBM&W?e (ebh-H, s0{H:A`n"QuJ5!WvA%ˆ*f9 Z]I(*֟{TQHi:Mvy\ZA;D1c [W NI0?(,N3i[}͏8 SMΫۓO,ߺFtWfZgOwJ"=$m bzb(\m"( ^Y!C 3KmYx. J8˷.Gz v3TS_mΕ B_7?qFenHu}SYD@[:Ŧy$np/OqNm'X^ѵv$KzK^;]K}P1g8GZ+]d jg6L[gɴEݏC29i͖֜19'~6wh!MUJCG?ğ6<1Mź+1:7W--]_DYfȚ#"ʍ^i>v\SxgdgMϡ39P%qx9c:^s7cFQ*R{;C5e#egsz?ŝ ;,)zz-$dOU4ZkM@It趖3Pc/M?fzhhI(VáLLYuNDoy-c/OѮ}U#֒{lRRܪodk9@.HS}ܡ!曠. Ю>H“|MYsC:&|Aͨ`U}: k&Sc/B~+].}4NHJ!~i0ղcyOJifݡfqμ䂸LB\ޡwsٛT^l(3,e UؒGX$eM 7tx'6/Ò-b~޸L{Q𕯊_ qPxhK֎eRG4]]|:7J`(pO<5du|8cmب=h>Mab罰Vd ISjQ5Bc: [!荅0=rwc$ ̖j*+_`5Ef.]2ؓBd*qlJC)3!I,w@uB}g ôO嫳wslWy}Yuǔ,F ;6#6o=2Mbr#}buXJ_Wh)!kk(vaRg M F }.bnE+ B\] q,x^Pvəџ̣g)#H3o31cx,ҠR5ęػ6nOE"nPA[FZdFodgJi(n(_pdqJQy;;ڍ?U5L0(KɯrC6يٸGygg@i-}h4HOZXp͉kΫx61/7Z7+6φ)1]֣95Q (r%i.lag"368wiJ\j3VpL,kP4c"*Z]#8J&NXN8[R͢$\i "J#X3pBiiPF 8hMpaX܊:o-AՏ_ւ2ќgpnhuv!/ߝqTu9vDLm\7~eO=H\➜ߴX-Is']&QA/ %5dx_QHi!!GzpD@=>E/3U&;iBPn SF pߘ}ϔ'0+(GJs76*<އ+T);tX D:f:)y8euYo=܊j|`P޿l5Q v͋IܧOYg&OqÀSOF |:VΓ|^5.K[K⟾/ U`Ih'P*|F,ǟo\ݼ5##sw0]a^h]}ws۩2  (J(|ޮoE{8%-]_fs̔#Odk2}ڌv(u#mT"Tq~&~b [q7?[{]qKޓ$C,q&3W.:a$Y\-C+jcuK яȋr!x!0}1k+tD+03 *y=z M{~υ2sbM )- .'7" i:rVXr_,~IޔߒNYwrvSPY9&x.&s_{eR NnP7a`̱`ṭ Iӳ,4f]i׺ɰ3RƜ" *\񒹁;mSn{WcO6nXoDgO\q ^ӟg V7$n/PO_o>#_jGT /'p]$di2?uI_I/fhfZKq'5n+O z&ן>,v)d*7L*},;vR)q$)yw& mϑ#&8 B%ΖE}64<)?@uS,ɧ^EXR&h;jӔfZى.ɮ񾸑+VbFw̠8ԫv~N[jwovUK] mZ!e.\1`ܰSxlw)=k\<)VDQzjEqPendstream endobj 234 0 obj << /Filter /FlateDecode /Length1 1604 /Length2 9658 /Length3 0 /Length 10700 >> stream xڍTk6Lw͐ݥ 1C ҈(Jt H͇'s5k=s_}3s¬J0(W i bf6˱T_`Q?j 5Og//WoC@h`P<bf v؀M Ї@p &< ;w=^`[Z _`1  *avpo;(p؀.P[;1;@_U ix/߁ ?A660WAm%  69{A^ 3A%Y]ÿq=x< ο{8fE< {`Oy/u¼#;w@C(ͣ=`?|ŏ=\vm!v?,w[` (?`?C|ya0?\1PVSKTB>>~A!gwTET68l ;3h C3^!^Qߊ<гiу\ ξY< 1υB<]W =,|<!Jn'(XѷejV-Gn>2x % 36ѝ/JWq{:(_&┅<} :aI!$ t -~U3ǢTշhX3+nTd4 u-.YK|ZQmy;> 6-i9||{h-JΨx_ߠ8_&9%YpVAb368؄fxR.敟Skz4 ?qck8eN{ᗔ&$˼')'~ndTnE(@M r2t̘-DSlem*fqU+<}W xR~PYiE=6KݎÊ,C:~bH:ÄAC}0QcN*#U\8<"}'=;@M@Ăʥf@ O(#b610qF/6@ǹmѪyECiiG$La+1{*][ tJgQfBD_LeYDkfQmE_ٺާ_EJOo>!pgo.&v"zE~wל cwk dH .F¾s[%t=E`7QC֠A% .)쓛DEDž !qP+-R f^uʕ"y/tH=EQ3Fz?Z.5awZEZVf.P0I?W@ =Ɩ2I<~B7Ͳ7j78tm~ vZydM|vRnOY8=ũFg\vUdEzMR!iIFWtbIIˆȥf)] S0P]tu#ByఒUlG hbXyk/D_8V| yf4~ C bk/}XNQcÊFLdEwdZxҢ8Fs؁QO =`/kk`uNL~vv]V( Xm 9e$w6 cPMIaVt U|~ :05i|]E}~f4Cn;}}n][wK |.K= u)K} ߛ>8T͢Jf>HcWϱ[@)HϝdyXF> "ްg[;':aY.8T_Y M*՝B^ցeOP2acpPS=:I$,kKsCڜT]dC.& QBǑg 4Bkˍa]/_3&lFW 1>]!i `ox:l3 JɊv/ >iƑMOYnAZoN4rt>$2PǬ͒hVŏZ4 ڨMb(whϹ0Y!0 Lv;,ig_f[(Z75,z%mPrz*{C-o no!&% v6~mb1y,\]01.Ǿ(xPUuxllh b4dW ;u%ld?P-wz*Tb\e.d'9 ,2CXו.z$fKBR !q{TNʉnѻdZ'ۘA*.<4E$A-2Ou_8) i<_&*΋ϝXH(bO.n"Bަ*^ċ5m oNV^iQ<Ό[XB=iSydIk03ͣ*KwJRZ]qYNv:gΐ\u1E ~" Od#zc; FY/!wfL'4\}MfADG`0hu`ԦB:{%>GLL8C7n{XrOk-wQQ!~VrtQp^{>=#9 B|/ Zt Sf'VNqUŽ5&P~tgˢrtOּio;=; #Q+HqL+a+%|Xg;ژ棞f)@)PxFd#5e};4X \)du7Wy8ؚ#g/p %(ҴY|z}g'}i Mtt5>=dU;p\QPsPsJ.VDAgӍ)9o^gDǖoyw|®1{qR_F ׶,3{n zszyאָ.^.-_TcD^|vs&O?`uA%Mԇ#~ӄ~_]qf\\=G4X[GmpȏPihŦ##3;J׉Cy zyT.xcl7 ߪ)^<@xL(2nMKT,n#yh=!IM4X3"٧))4\/]MM眯XPnxҐ,ح5f9RYO2ʼͥn~TRhP67C*0C%v,D>t}F{VOꨅsfeJ2엀f9ʍbuޠUK)bR 6gwbarҵrN-ׯI43i$<kpWM|V)*FF_3h5nD|Td>,XSIF#5cTBwM Hzdaꋽ${"7̈́q-`~/] G/p#)׻47C&3=|GS{ɾQdߡF{B8pއD\vNf{T_ 8㥮~5w< \̿8\pÏwRZ2VI"$r; jI*r&2dPιyV:$#cdPcW{S.Šm01b [bHF:pIo=Ww{"18Nlq˜ MWP{wqN9QWF܀u'iϱl{SiC;pqz^ ):&:EL<؊ZV{I%mB鷉9yU>.,4tW[|Je ƾ+ _Io脒6X)$댸ٛR7 -@Bh IɉR0I"TEC!&RfȰ?Xl8Gc}z$w҃|Z0U5VhG((!lQ6KB3wa ;36"8hjmX)hp Jz$yPGObFwYs`.ΆtQ.`~mӶ\ԫ+mLduR{NqȔH[{,] xv-*My=[ُ^ڼYz"X1~a'-av(?^5T?θBWLG:^|Fկcc>҈a2?Chzz$EIŒT}L,J&6-/>?mla满<,r/# vhȑ  T͙ 5d}]-5 wFg;GKDž,ϰZiZ@pn=vfE5r;bvюEMg^_)[` 3%sZI{ROKy'+4vUFssSM6M̹#!F4~2$s/(?jL5l1-{YN|uq CVͪ5p׬49d=Bܽ/su$>(] S ;r6mZؗ'3F>%!"֞>4ebW sXwT;ens꟒XNZw׸MtRqa97*4nhI׫].Ojc*Mھ:> >$ba6f~Wlp@/Un9? zb9B9x|eW? 뼟GF\&ϙ d-]*v">#yJIv}j.:B+z^[c}aeJoSaLY7獓i69 ^ fD)@2B֕_E?'0QU95Ρ\dΗ_!@Yj`E=|' ǎ~Un[r siGwn\6Ј҅ GI-E7ư7~VwEYKj}5BwͣwkN1=lMNb!T~JSj+r?_@1ڜ>`D2;Z>:PD|8U;+2z5|"vζX}:.Sy~ n:Y l!s K,R;&Lsъ-ujب}`Ɏ\Auܳg{\i`E'(.*yv8L'^s)[̾%rd`0}G[ 9,]]v܉gXݙ.?#d۾@_ |.lpZZ+ݶnNy-cmlyk݂ nx$ YatS;KUN(Ѭ f ߑZ&vNhKŠ'a$0ՐTi\A944 /.y,17g$ECp-}J>[O]t)jd/b7A~פ#0JaZYm,G+92\^tEV4fK搵tt51ޔ4L5؜kg$;W'%N]xQ7hR뿊M/֯&gzkFE7RZlHk N|^&7C5TauLgr;F#Fzg`lIv;B~8Z&k`8 DŽ#}.W:itٲh}oh|"m'f|uA BߴW+bR{ItٓEmvLγ,u#%{R2W&|kK_^7$zm/V x.'J;I$:#S5BHiMڢj( r 6JuVэ3Du颪weŏ f^Bl>J̴Q*ISi>O8 3!6mW}9+.`ޔ Q8&Ϩ/\oY)خ|ѱ9YJHbWB?H`V,!@t.BjRw1^o+iZb\=H\sendstream endobj 235 0 obj << /Filter /FlateDecode /Length1 2439 /Length2 16864 /Length3 0 /Length 18281 >> stream xڌPNkp %=kpw N.{>{UUh=z% P΅ `aagbaaCTcG:9!4vyI*\mV.>Vn> n 3"@@)ntyϿSZ+//7Q[hb }g45ٛ.SFŁݝ֙BrNn@3_JƶKcB[P7wq7v 6 S{ PU(;`ebogUdw'`\<\vf8ۿlMn %`M@.L 42U}̒vf@;g9Mõw2ٙ%ՁY w̻ daaag@SK=;Y2kvẃ݀'W?XYf S dh/~N Xffog'#f֒V:=ތF6vv';7 U??ڙx%}v⦆/64 '/WWIWdmvuyjuf Wu1~!v6$Y 4SZ196 ;3|WMq~?]vf]=6N.'~qrY03ٻ:R.N_!n`x̒E,f?,e .Π3(A E< *YzgP8л"?]zgٵwv"H?=zWkdlj |㽴{1S{/¿V»(0pwt}?R'f'7s?jwuG{?{SZ|%6?ȬeRv ?~= 9<.hfcv7=Sc}!!?]?Jwdvt幸#὆z[lj???;&SN}.࿿@ayޔ?ت6(;,V*-S lmufІӝhp/$ͭ ɫqK=lXkǶg86)ɂcѺ"xBFu=WG@k.9GW<~ic _fc4?Q|#qa$ø@ȞM"G{^譻qkB͹_cl[ Ywѻ(zCp1 lclgOOAiWz·9P >sWȁe]J:O`o( >܉L+2ԭi׈6<6jؚk/" OOUF)EwìǞZ`+ lAR*fAz#7pm &'j60O=z+R?/8NstSy䟽 [> 6GB~ 3onJ"TŊa^Э,8( H!/ʉE8Cg`mWI#26bE[jn1,2isz':}Y\fGW3-o"M2薉 ( ")*!H!|hdA9_J}4Kqa1% \Rzs+229ǯ  ά{(A"Sp1iGՙ?hNIǶ&HN4 OJ '3~Kv[ kI Aj~֝\%R;OciVCڈ&ʹ(I ֡#p)SA;NySXwVlYZ/crKWv.K-N(r@$4ޥ_kGQԀ</G &'|*KgcZN1 >e /N EWJ3 |~\,P\Zɏ0! 3b7PGAVqCNQEjFx8A5+/cG"|4Z{ a`obeHNc깡I8:(`1o%Thdm:OFBF`4I0iODԨ۳B虒*J |ޑjl("\7/ pc~K09ZAd_=-+Ui8UVl+2Ē1q'NAkwQI4 r$ 溷%>((5ڴ4ERW*[n'՘1/cna'05nq @]BB#UڲwW5]Q|@iDuBL'?$~`tۖ|0$pUlmIm2jȐ,sPN~3dw/} :NfA1pΌ ԏ#cu 0ڀzVk vB|-aYqH0ꋏqQb0RL喭$jK uٚSh*C'D~:[-M:J#Ush$y[Vk0G_$-Oh}ʄQ"\U%rg/,=R7Jcq} X(XZ&YBKǸŷpb:dz֚j`%$C_7Qx]}b.8X [ޞx`7R %:ڿxb% ',#Kbn<ԥXK[R()uPm, xw:z߽&-%&ց*4uq;_&NC߽ۜp{4tJe/IWmqm;v3lxl'U 4%Y־dr06|arIg-So5xa9)j'CQ2˟ r#_m:81=k-n kVBJ`N/Z,-YT C{=Sfmc$;kd^0ѧTK`Hn(Z㦈q>#yD8v_l; 0NwYnġzX r ƫԑ\0~/ ÄeRODw|eO|WzBp]D |So1[(0>\a^z)t 9Up.=FuS̘iO0#jņWHJErQAu2sh2(a}ʛv1UjgcD6~0.(KaKZ1lf1c4w , .hMQ,^\MρZVmnWN :~.D+K_q/봈f8QɯGdaTq1:.[pTޒ^Ze!Ɇ3%혈eON ,Z_;*`7cQA=J*̷ޒBNܷ#L2}dJF6,iS$N BOn\ bEL>G /v׫}+ݡ@rlP8kjb7[P4E#;[I9Jb89@ d;J2.Nj"} GJ?C&(LhCxW@ͯkU`3PcO|J$4E'? [But[׳!$I.|_:!{f^~L=!W"ک-RP/Z=T]->Z4GS2 "{af}{#ZQqWիY|θntdc0ĩVJS9c,P?%D>R 6aP~*" 9JOŠ ƿ6Vq?Nψ$}$HtwNf㧾-7(rD9F O ›۔y9i* 5I*aі]itpVMB c`9,^@8Ch깪 5H^K|7 y(eB9<^e0f띺7'uqb!Zahߧo 5+J0BƁN "fe)=n՜XuG@~ sU&SAoqnZkGJ+9Fur i:jC9|ܞM'D ,a&n┕ _x_/!@[l^@+yj"h W(>7dh`ٲR"I/FuH5R2MC] hMasv;@Dwvjtu65U{Q9R|x,2ڈ?P0`\q,ސ7ӓh[dž"BٚzcLy!&G%.w屬GL ?f{L_ dܯ6oy-܄ T*3tc^yi?6UBJGs=,^zク Aє/ =_@:ѓԴ~}[Y1d z״/iK0BCm$5 oq(t*8[.)3\_ii7l>!(p'VY4.^Ǎ51w6Ifm#~U &` TF@]ՅO 8Uulf:̗m+0Є5M13&"E~\=޷-pORIuڃŊN܅i٩b]~_ FR̈-|=l&O[K%ln"\6X)ekn۝Ȥ)YXApAlF0hCy(,0Hl~{F۽֓Y.Eůⱝ2ٸ@%ZD [btl%ھ*)QpG9*'0io²nB:euhXӃ''^,DE`S]d\jmTīu!CMl \R0=l ,Fƛvv̧FpĻk||4x ,(_jCH}=~jĨ -i98pjt|y׭Y(}(1[s4ylWFAPFl2Åz[h0e{z1) bA|P!TlZ?hdh(8]ƕ?i\ʗ  QTkV " W^jcVjO<9Gmr!HVDׅ'.Jf;] O1  y|4u{/6bI?bZqp(W([@hZ/+FK;f,l1:V%8iԀ:X*$t&q(fJzP|A|z_0օmio#" W#p)gRF)R Pq'8q3ex-K̻d_5119-jGP!uQ&M2_Y0<ګlAϏL`GY[~[L@SWSgJ,P_+79I i>F5.amʁ ȡ|uwAP'Pڽ9.cf_¬!o1Bb 0xZҴbAQA*`ͣa=0(̝ yROWOG&mrS=- mnhO(ٌ13̼60P qb;83$-&*W#oCf󽈔#,rApL]>qV=r z|un|Q2r4=,JS5EcܚVW6fvOPkF WY*m]edF˥tIM˰L7_ Uwsq%0bEp_ Eʙ[冣 {D{ eScI)4!ZNfܤ[D{[(=O;c7Uјwȇjd(͐,j~C)6\<'J~;ʨbcF`v~XF a%H"n2ɏ>W=GłìI>6~ "zT8p[$5Z<)nfrG; Y ?ك2NTo>O:|dQ4 RlYb|ׇ5&$/[2o%=uZ!6: 9? *~VsOMyɊG3O}|s܏몧uSOI•`݆w'OdŬ锌/yLH::|^ F1롼7vj Ђ$v<Duiz #zuY3V+Lv0u7DN=)DpG# U*XX%N40DNDe3g/R Dכ']ѝir 0pf99Rχkm*2Ne5-Ӄ58ƕe,w+cw?6YZ^j{ i#=M7Q5*XȿQfcE*/O)Tמ>/8~"yVۢfXUH+ zi{}k姩 sꆲߎg㊂[@*}ط*kV'@)IV١-dzk(-l[?/ k/3Ɍ͖U^{=nIvFd*7A)Ll`vIƫaʺ 7DW,IDmSGcmCԵ39,e=A]&geL:{g8owrZl)|? hY"IH?=&pHJ:>W% ~(3|+SOQub0c-0yCi4Aʫ﮾\WoԽSLWI8jHϋWת[hjѭ "7i7bʢqȇCb,TqO'M ~aJ)"gdvxszvGF cLl}jѾpٶdJ9&  *9w:Oi eOWd!i9(Thr+1(93Z?#4o^,#[Jq+͠^?c B]}TTM)GH;bWzSi-2ZfT3Mde8 @RE?q Bvoɉ'reg^&1q99ciRcm 1NZZ5}'3Sjh#"4mKjtje :}] qn܂[~v+K|S0J#FO T~%>y랲Sr Sp+L8؎X {xlRd² 8B@fw&2m!UACvQL}!HLVqBo ,T Ҵ6zJ<¼m:Ҡ\Ҩ5Q+\;Z.ai I_yx?hV5%δ&eQ4/ )F*+-rNU$(#7[yiLT\1H+BAբQ?}2 c+C\♥r\h1&-_bp9K. 6~fUڹ\jk8 pv0>zjbm:`l$ U;g~X.'G-Uc^֑W,FriWבYLU|?О3hg[;}2sm\JZ8st|Ac=L.bLZڌZpg,XϔX^Hk+wd u n¿h1 68G:1+ +Y1 2F4#%a5uΥA-,'%l[b5rFg[Pɜ Fϸc'8ߊH "PnlX߿nl<=c57L^(au\mH~ kZ."D BM:l`8 jѰ9ZR NIM,Eֲl5<Ηא?|+*@/^ٔF'pCwSL%%2bUaП҈&^w¿뒲[fY*H <䬩f5$m QW=kpeG;tRGmT:" ,1TuINi!*6DYrC2 iDxbȜjvu8a%&v0/Ys 9}0&=jcti۶⯢V%ae>&Vy0|yT-lK=b:4 /Bα9|gRM%HXǟ`=_[sHV"IK%NL[ND?jBHi/('8QR١2H.( =kWN!I. aJ/'3lkk 6w9d$NaR*®HX6?bkZƂh\0u?I&_׹B[}lPQO%nLX+RK/},8 44鷵2Ӗ^ D۫XHMGibI:ry*WtIdÓߤ䞢D^[_4=?:\X[#1N&#O5QtfUi0djmcy?2bTx$F&08Nhkơ@Zd8QlRZQFAN{dZ`u ;\[AYըFsn~f٪كł^CO=OHIaG ׼1Q<p~Xꔧlz\|@'qJȾ׭VLXdnjo}6YCcN5Mwj :^:'?bp|­pKGmr,Z|Ӄ%D1KD?G1R'VLNcկߊk=nTOޠjrHmt \oظW/'6GV>XA̼@8Gtoukl$mpCɥ'hb>Lt{A(.hQl>6Ldj>ֳx0+'3.QMGU|zY v`^]@.x?*Kg$j p˯S5pѐi`84R1&VsB.'ԖLAY`*@GETrC=g 1wO-oԑ[W}(2z$?oq("2Oлk9poYxxm2FGV%%\s.g2RH4YX%\P`E0ܓrqX'p)*A=ۋu1;]2kU+ J͝+DghX҂/I)IDIgr^o1=}+Y%Z~BT^l ^{'anM(u1.]؀a8WLK1w{AW{+i}YܑA>~}tw0ӍO)ՇRGEѹNnk;oq}hs h$GYw!Ѐo U+j9Lɗ 40_ 73 2S0~gdo2r_DgiȼgQ:$۔$,. foR#;0gfZ6;߼㍛hzX(DHn/8N؇sHNhޯˌ]Щ!x)7Ům?㪄QSPF55b^"E>zɴECeY _ї)r ĶH|+#f+W0V8 g. d:?ſMHPyzי^H"fLBԎɻnB4o7#p0e[UT1L=Rw%-n#7O}t_KR sS' Ř'Q(4t(jB9_z6e2H,Q- n7'(WIBb1T%+#9g|ql1/Ɇ,{-UƓ]mtJ_iy#0x]rlC9,QrgUQh czC,U1]:~?/'MPQEi}c;Itd6y 8pa7P^3< Kp{1A,rYױ#ѡ˝͈~˝a~={Y/_`xoW[U)CYkV_WYp%gIup f3qjӑw ZK xz E9L+;Hrc55sbLzu*Z(31jM0Xz멞G7PEq(o_+EPZ  96fg>[%wϠħ98M40폀%5E=eY xqlKsK"2s L4Ձ۵D~Ȑ96Qq0`)BʟyCN3LR|D,6ZN"8Q|,PK~w O}J]8!ӳc,@= &::vZ#vUdTu? AձMΛor!& 1M0FhW 0hOIš1%kM#k։oƎ|`SS6޺4sΚbE!W]t(v&7(~a^uxRl{J&ZtDe9EŌJB N\b$Z ]|Gmw3Z'emihSs(i XKO7V 1wtLPN ΞotY;@SX0."!:vH)~Z8Dьq}UdIiU8M!Qz Hm3f&Ɉӌ`#;[,q/fNqʸsvlLTIj^2=C_Lg:NO?Ir}!S~S0^A\P];`>KH`q6_S#ׇ&ȳFhޢ'vDžkù|ue)0ڢٳjGD31;I~媡X&goВꕎ~ixBJ#B"Lte.DSx7%7zm&Z .עeˉ{R3w RѥQ&~6n})>C/wTgYH1߶ 6]Y 2kSUqORQoˌ]s^"pՠ MW; ^ BQHA4w'C\k [f?3}Wؾ3iU~ ȭZ?ד^u4aп ށHcfc$"Ie]}YGOlo*>ųEa^&7߮.TR&0LAVJ}0֍ 1NRL{4geJ!2§iVCr|E9׻"Pו?Y`{ȏ\<(.gv`y3t)ؘ%˖ΎW 2ɭdԮ'΁oNy陝ŜtP6tzxMgҐМzKYݮ8u0 _^5H@iN!>~իnۍpsJE&2!(-aT,<mREdR~ʣj\&MIػQZDKK6]XMHK,5t;"uCB׎n R[Uzv٘wT60ƬSO-.p)^## cQУt6Xv t0CyKlXď~3 $ʣ1uD9Ǝ#_ZaF)%HEf-[L=(7%1!! \ez)E K3\1\w|$9C["ol VٻdZW.o(Xfɶ+z6})wgp- UffNU1͚D{.ECu[[~PDf׆`hTrzَ(Th`żbp&M5D_)!RGKfA$>S75*F\T`՚hL2bq79(\SӮ$9Ǽ>YPf/ sqt 4׺\׬|o 33ߛ#+m$p`! w98o)_au167 yח8vZWi[ȕ))H<2&KqqZ|50.M&!%;υ;J ޽-ZFw.piX)vA*vV ejG<pt4ˀjz 4ы;E'<6x0tUTTP%@zhd'"iBĽuIz༒3ԍ3+uIG(Cwfb~l[4XaΞ}ذN'fp~c1/||$u? vWFd3~@B}fJjO{rgJoF^1eyq-*mTkP$EFzNW‹)MhY{Ec3QZ3t]0:t6k&~SQg\;ũ yW- N2JKh=s)%#IOHZ>Xhou!4>6cTIrc0_˺iLwbMGloZȲx\놘0F߮S4߀`^{8JV,iLSNΌz<;o 0R|瓾wH8M^SLA  ٥"¦5fibT]t@bQ׎^mHf@͒#5}}dl6co%kj @޹(9 iDQ7VQm l x<(-v4qp2^OBBCN)?)s1|ny {ܜ-TF+i T̔L\adVE&`QG)殕Ub,G4ylb ӛwΝ HDrPģ/5g&o2d]EeGUb[gH72ES`ԃ2W"ĕv..H[:ARcJ!?݂~hvpKU /= wFӠ~Y?ɬ*➎a5M=x%RWmʤo%v$Xp,endstream endobj 236 0 obj << /Type /ObjStm /Length 1719 /Filter /FlateDecode /N 99 /First 866 >> stream xYێ6}WqUZ+hS$(6f<( [.3/L٫>)͌ YENBM !F+4sK0a$=Z# V ] #Na؏)qJaFgQn68</d,,@Y@b'"{ZH H]H񜛏44ϕoIv$M (s<(F΁2f },'0dh}uXۼM^%}4xoK]$ʥK[2ɋԗ:B><\ǒZɵKIB4:[V\SL qmM0OFƹY`fnkmr뒫F28}CjHgt$z*B30M/i0ݘbEpm.rdz]g۷Cn͢nͦZI:]ˇ*iƵ?T,SNU]|b$lVOYe]ftF \/cѧ .b_N7?U.U}ϊdUS~^5VQybɮ'(X4I&ؾDez6#P?zTsݭTgד,VzB%<%>%b)~U^O"XITz= ew l&\ (IחpT p}MKpUbeX{,jOŚm}s0x4lPrcpx?fbuƕ2 ]jB 1zDۡ!Íd> stream xW[O0~WD}h"m4M U H/6ԇ#;ڟIY .x‰q:c`5  s#1MR фۦw<x^o㻞aux9KPy ]®3ei\ `<Lj7[,p9 > bytn3a8O.O 9u2K)4RBo#jb)2p`MNIb_|V!.I]͇Hq'pa`$t.k v7L p OT8v g1C =B60urlY-SUn,wSF)|d{.Ke Y01SK=me0סQNC=,vm{ aZRܞX`!mAcA29Et&x*=^t$W''̓$A 2y0տFK AL|-}۷۲禅v.Gx o zDسFoSX\,VLu7om%Ԇ@ylYB`3x$#0y =7E n8$^O &ZJD%O熾 Q\0ht Yڢ `ny8 6H2=v> /ExtGState << >> /Font << /F1 116 0 R /F2 117 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1536 >> stream xM6 +tlԇk@Hw(zJC-п_RLzxr&o)":pܧ;هSr1<7/ʽr >/~_B;e?]p?NOΧCw좟=?0Ő=w~r}ޝ?>>x~RkF\|K8C|Ļ'k:l9oG NaNOhܴc􃾏F^̝G " K#r`u~߶9|`S |#Pw S3)%b;o=^Ju` ''R9SXH:5|5ev9x/o ?'&9,USH-ƈ=57scaXp=m\Fe)]EZ:`_`ЕRȑXrE>}H2D <䳋}(l_y~[kWcc .B{RqB?Ҳk9~l |\rMD*ERd"|C(;9P)<] ^7] 1΋<|ܚ)ͭD _3lvQ4=6MX z+'-ؖS(";{ u-%H=g*@;:Nj1ą_´⡬mZiif S]f_^ZMnp:Ngؚmyq\+ j%@up?ON%te%Mmߞצ1|鶸y`B35`;ˏk >e;1-v UR%ՀVf]=>ߚNVǺJ|Wſ1Wſ1^F^+Jts׍ސ׍ސ!!&?Q5}tNnHTX$HtG}ʩ+@~7g:XH\\8a HXH囋gxJE*ՃyHS| ;~77Ѯq;rjz'C*ܼʥqn 裰u#РЎʗzy]5jro6/Ԉ5pKgխ|sƑkXjG(7Pa"1Iy" op.+8Y΄. SЦRQvefq"-/MNKIyW& ǖޥ_P]i9`x[ B\)op]^ʻfeRF_W7ixץ3g_.ԕ7zS7MXxS?I9S"-›4<. ρ+Յwi9MVb21 5Jߥ׊Kù;iyץᔫK+7ʛ4-Є?S}^?U&g痉3bFySw5" Os»Д7ixO ?gendstream endobj 338 0 obj << /Filter /FlateDecode /Length 1417 >> stream xڝW[oF~ϯ[0 vTVۇ1&R7I}Vje 3g;W>ff%_WqV>#ђܓC6\=Z(ň͌l8N%lAt&g]?ئQO}=6GA7V/7_Yz-9 fȈ2o[](mUucBFTɎxTI\d=5(uЭereLH Ft|}HSUʆ]K/ beC~9|Wkh;$I Rh  LⓨY {])Oy?3ٳ@tw{ 8l0<@"oKȱ# Z]AF}6VpͰ!Iۄ-ӥl% -OꕖO}^.r|,z*L[@\]rZĝ *>iuww  Ud+NNAP:jy ?itV/S ʦ7Ϫ05r۽pᵲ7y\#WŔu8.‘  k*G%`?l6g̬l1EUԻZ%htJ󪼟]+d=ɏmHk9& '.^CEF'TݥqܝhCHiViYxƄƊ9tv\W"^;Oym`@xNe񤎯%,Q:)\hYmumexƊZ~pdhVTjd;+{P=,we EiR kjpv)ܑcieuvY)NaaB"A!G:Hrw35> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 340 0 obj << /Filter /FlateDecode /Length 1485 >> stream xYoD޿">8k{m#t R8Ggfg֞$ZP<;;{={s2?3ڴÖґW:kuoVF,m ac c1JpOa#qT,ig \bgוY6~ vlH$:XXbY+2k{c8X ڷ[A1Ebڝ0 ??w`G{!18,y;%HWdqof=MZysѱ>YYjʧȎYJ="θ\JsKH6rM,IYȑ:ˏ2f Ib-#97||QFAƌWL]HK=>z}Ov>C/dcp 07&ƴ|4l`b@[^/{!5a6BhkǕ ] R?\Z Exwe- ? n^8"ԧ~-3!$OdȘ  |eR0@2c֙x3x>QU(zl{kIXEm˂6[hr sJA[ʪPkA)5>!ڹz.^y0m Ug:!ht%d'Prߪ4 p=M}x4A=8#z0!0 \o6S-૫_p`kcacQ*%u}I_--sa@wq tL+u #g3JZ{JbUcfl0k{k2qiVxOG[/&;@y_WC^.}nіv:UT/97]t<ߤiAsf9 x0-gs){LaZxܖZ9p5ƇGW}z~GNQΠvޘ~$b\( XK |A_øb&?I] qgg䥭vx_f+.C9sO 'lڅ Jd%*ٝkc4q*.vyi46>H{DbnԨQЊіdwK;?4;<%nӆo|O'ަC̿O?;f9ioq7dHg;sͯ۸aP9adqF;٬>8[_$zsGq-H4Y8򑗎%qZK@(mo3,GeaTKVU4@Ȋ]ό4ٺ_1d`Htg}l 2dtsX[ %0Da /*:N+ RK& t/{Y_8=NCQHk10]nRLݥ$QqB՝1~DpaBN*䝽եYendstream endobj 341 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-011.pdf) /PTEX.InfoDict 125 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 128 0 R >> /ExtGState << >> /Font << /F1 126 0 R /F2 127 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1815 >> stream xYˎ[7 ߯в]D6AS @v,=;ǹYg4E<|^;qݧWCr5\L:guv/½Bp/>./>{좯 }{޶.?\wӗI^[6)N@Wӵ4]%o2 {@>FHWwN%{]|>G{n/{,/lXݷt.^p!Y^a`yaOVwHH2v="< !<#Z237Wț?U. q~np?-PQl\ :"G=rEC9LWdz>~.WtP<ӣfrE_sLotFOkE]LsMfa^q;E]COHg;*5=Gkk$y4Z.c0|AF=TI݋sy+sP:rEϨhL3=xsۯ-2dz8) `xM8.O&&kdDmfH.orG`;gN<.cU }o,AsQL:K'w*v9vȿiRCX[J ZOzv,˓"o"*9˶ͼ 5}4K}nT3W&6n%{jhy;Ђ+]nAy癙7{dt4X"`!6Y[SR62;`>ҶM^@3{X+Guk+7j߮,gh #n7HM)5Dm6S 'Tl6#@QGPDYUkȼDU7և`b']iY8z d#AD ra؁uĨgبbQ(x+&ꉘ+c.e3$:> stream xڥWmo6_! w#R2]`VYVa~ɿ(ѲT y<>sǣ->ґ* Q"XO>ODEq-G=%y\N-|̔g|z,u2*vwƱ/B?uK4 rI.c] #p@s4!`gst9༜IiHH@|,'Yh @M3t"m|<Ȳ#@-= |F /~YkQ=JɁ"ֻޯ\R0 /AQ\p0GM^@cdX+&TE2T,8yɈH{Flk9(VY]ZM2ZP*DgLnFj5@YD MfxMGV>:re0%z~B)(z%.r^'?2pv{--jA#29F&w*p_PWtkV.*8U+GIhѾI|c((oېhsNYsF{c\\v_+_Ok.t:i,Ȧ>':my Oiϒ\.My Ob =?wnϊ9]Y?;߿r8n) ?VƒN7h7wSogr"-rl盕_>GRt1_:&=HGV?}+͓qi/V׼,Uob2Eqh~Vt qC|9IH 'oS+lendstream endobj 343 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 344 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-012.pdf) /PTEX.InfoDict 132 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 135 0 R >> /ExtGState << >> /Font << /F1 133 0 R /F2 134 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 4066 >> stream xZˎW:UUe@ Ȼ !H6@$$рYή:+&;+*Qﷸ~;չ4^?oN_۟~x {a;Nܟ._[ GLeL{NŻ2=ӓ>uqc|-_^>ǖSG!m_{uoͷwWۿG,񿷧H/}o?=Oɞoya/xϞcc w3x6?}̭t}`|yvu,sO|ySsC͛,6b(~c,<%!VfNNXy("KNy2~KD6a-mGn=XEgHy&Y8z9%P !H!s"`eyI7߄( ]j<8LG^qTz)pHjqC5IPɬ)f0ȗp=/89cd~(YaXLf=E~^5OC2E´9aFHL+<]9af@Dɬ1f E bԱ`/L;j/S09(9+*S<0S~̲f~";0bX361vsIR'{Eb0Y-I !)>L\ 0=J-$~vDzv+g1hΏ!&1 1p2}QD$_< (x` _鹐}TVU_s!ӈHb 1vV'jhQė5*I"/EY_&8k,8=$Msy^j< 1՞YQ%D%_<Φڨ1\ngke\VW^M* 1QQc-V=RE5/Z ХG+2P#=Y< 30R":hX9)Ko:2f:WN&*nBjQ*˝j)U ~/t~tؚD s' a:?Z , 1SVz:-'S"_Z7NU쁉I|!J 0G+AGWMLoĉڼnluI!jA ^)SHt5nMn[u(lwȗ }6pFVF 1Sa*( 1S5Za/զb$f;,@8zhbvPI[< #`3bDWK AET,Aur2BD'45Т/c9hQė,F9_'_M̢#FjS[J SS5 ΣXNF@RVh1kBj횢^4 >1{{ [h+-`Hϔ`5urSPl[ڄs@j"Y 1Eb& 5TdF/bib#^ sy5҄C!*\n"表 D|X\Nk|+r#_gw%($4@";?MQdLt~56]T;0S&z='[(iaOvC(syބ|(h*`uthL%}Mju!~%_oM'Lv'tߚZhŮZbs45 _4mR#_d\#ZNNFOMZt|iaÚb4iȎhJ\B5LzK(VMdׅ(a'! v]|yMZ\36QW\栫(B9v&-|!5MZ$9BtX*4i/yI(Lxbz0dR⚴p3yt(L')\?DyB&zmҒ$X s0j]u8#'hb$_Q3hS-BL:P;&/5ii@]U\qؤE|!GHIR"Bu j7R gEIrנbj3x|CSEŲMmrKl7x^7],Oetvu%e"9 (5i,>s?xazԳxiҢ]a:?](NC"*|ή~IX/v.+SZή~Ƅ<}tG0Nendstream endobj 345 0 obj << /Filter /FlateDecode /Length 1064 >> stream xko6O2):iX [Sl(:um1(-vx{xz:"*R MLSe4F'DNcv٪r9dρ1,ʼ08!.YbN);u8tU߶~92gThN"/nXk닢vdѕ~@uJ갧+:;NNGn>R $.t t+,!NܱU4yV?.+ s&c'xkL@PGpfl'uH~GMF"h{wE RGjy| QSBy>8mUF6?QBگPP[a0"c?Gq3wT2+t3v`7[EA4Uz0wl}KZ&}B4#1NKHT)Gɤ`T|YtޡMkT" JٿYWc㊺)78qF/fq+k-R;r]B-<_kov3GmZ+zn'׎hΦtAS@vlԍs˶$S7UMK؝ %2·_fv[ ېjeХvٜ1,j^ޢ===``FH2%5!24aBJZ\tq-)c5gs1$ֽ4Ct]{g+vӒQe(LpM028IUH_6NGrwW݈EP`#U/;endstream endobj 346 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 347 0 obj << /Filter /FlateDecode /Length 1858 >> stream xڭXKo7W졇17YIS i$Ym֣j3ኲl K6_o:O_h@?l4-s+\2,i~q-Lϻu /v%b! ~p"9ǻh`߯߫K)IVo+}DFz5ɲn& uf~_T f^BY&҂ĪAQBm}CJ&*0(&{ZyJfIEUdLKm;]*^5d4=H `|!S:ޡ&h@׼/oxuUw8BiP. }{AaО?r]*::<<Lb*k̵֕,݁\rП:U1nwݪ<ͷ@vO𿗞#. W㽂oBS^ c'^]]eYoN$}-n/L(Hr݉.{bEQeegg9Y8Viy$š~<-/";-wMB3y>yewWi΋Qxҷ>_`xЅK%0ǓP)0JT4a(X:ȴ߽`R y!/"06տsX6E_O8PQV0FF4Y?"˹ as=rP.)Tj0v9X )MHoes1FeU8( ~>7 ףze}"e&IU !h)\c"!'Uk( ;! s½^Ωt̤ӥ)휯gY7rq MG;E*q1H?br\"zĘAGtVRT!!S1i}ƃCbY1)MP[qg픪jH'ѵ>ߴz eUmcQQ~a*ݤg!mһKG"Lcl915 `P,ȷð q⎏w>1дuLb8^dcGLۜ}Bտ.{p''{?g6k*Y׾RJ M5}Tc~Բ!F`5H 0DO+:t Q] \PZyá6['KS1 P !H4}ՄQD*Ba. A pJ5J<\l,hn|&5"')@%-\kw2uc ˌɈN;J2Ơ3F#ߣ:>[. }FHl# N ] :'b`=jm3D`=@tu#GZc;JkEY5v Qf!#u&ėA y`eh<NN@,K`k+ ލӪ;J|G=Ѐn{Ȧ'6||=KgN3W}`dkKZendstream endobj 348 0 obj << /Filter /FlateDecode /Length 1976 >> stream xY[s7~ϯ`:ҚJk&n4v&@'$XԄ&E }d2ziXd&G4L4AFyT+0MOqfX@E*ȍi0-M}:TEmMCMx-HsPZ4alS)W.ظZ iNCwtlۊD\=EJa#sy"\-7n F(ZZHN]jqRn&J<Oc8[wY#Q4͐kJF%jƴ V(t 1?# d ?a,yV|$h `hkDvea9 Bay{ZK%Yýmp\ޗ[ ~`/k;Ϡbqo$QΑ1<^4^x"[`?Ӏ{I~bO=WA8Y-=Jư-a>D'1i^>I נ"La']#CPH5Pp'40] ~;fr!0nTD^C~nbѓFC\yWԵ7$" U՛=~^[A uٲLq.qri1(Ed96+sry+s+TYvZ M>,aT$@2Bճk>`d 4!bHvHŨfFǕUQa}KW.{B2 a.]ɂCYo75P2qn3Fe;@4N왔#4b-+HKPbP~MaS ]IIh3 ǧ.HbgDb!/V=}/plXt/[OUFt9o(\+o\H~U?@{z c/.窌Yv{uNDQ04hv2}"=m}e* iN--kW[lҦǓ_F ѫendstream endobj 349 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-014.pdf) /PTEX.InfoDict 150 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 153 0 R >> /ExtGState << >> /Font << /F1 151 0 R /F2 152 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 2392 >> stream xYM ϯtpcl؁$Er0|0lm燏jvfww$d=>Z))~2C-Y&A؊O nCbۏoKn>ZECSF ZVZ9^=|{vous Ӗv͛|Wm+ῇMRxm/d;Us!>ZzNn]t8On:N>{S,~SܝNw{ԭW5nKitR;t[N=TuK<ͻuѶtZtϼvWgA[ u'7'K'b |rF;xysh/nDklnԩ׫ɂjS[lJEGLUʀ -ySؕݭ÷rف~׸qa<s?O,$'IDw֌G #h2Au=A0z Z{I bCяu3+V=ךS 1˝s5 q١H5mu3N֨NJ̉sٔm&[l 5!Xo m^SlWGն; 25:wnȀ94;{w -*sw~V?"-7?M*dU4# T@kFBi_;†%_Y =Qv+2YZIY撉Ёr,P@F%N) X~S&hGzFdI!S:ZCy"L@ ?9Su,c"rd! ҆N/u!"D&""@ӏRa_YQYcD\ɓ61xtuu!ѕ-AfL6;W?`tǃ>JbPZCjP.p.Dat&rDh(ODfẗsQΔ{O*ju[A L-zڼ-SrͲlGP ʅȌЏn'zKiG +"1VЮ#t2نJgBCTbL)l(>Fb#zhlH ㈁}drInXQ&VTG3ݠZڄFjUv*Ά4l#LƝS GQT6|Q#"ʅӽir>@Je3p&kVnȬJ'B=:C3Yogk"lW!"WF3Ryq"fAD!;+'f49]\οP"C?z!l`o0[G{8H<7m$vDeCfkw fTY~D􅠲q AeCH| <l`oRלh!2g^! zÃ)p48P"lVуrV.02{ّë>9om2hi/R}1;X*Fs" \< O[#X*^dr!lъùpX*!: S_>}o@L ]coɨS*z{;-MiS:}9F/|t;5gCZ*6`;T6 Q"3}t[-I˘P?`RH'&N/`kX9gJe39O~ɠ2:{t;KLT6d3u mDפ҉Hn̉vV.QrD鬜Be}Ə &\*!Y9\ld:Y?";LށokO6 zivE>.-{C9kO6 , 5Le.@$h_a6e~.> stream xWmo0_X2ys 1`hIӵMJ177)m Bw{MGDZ LL6Id rEtN9YTPa|dX3 Sgd2Fi'ZGEr؀,A r4*EݐyhcPA<03ٯS@1!8ܚJ x.x!Pmz(JZGXQBYo8}#&9XROGR#o;UAUiy"M@.ݺ'BpMNh%ƨ9AueQ>G7lJ-VKFgR+y^_9אtRr794XyIjL¥$ o n4~#_M?oCy%?GѓHCdݥJ&RiQC7s IZq3z? Ӱsv:ҜQ qY/dLXԬ_2qu'Ah|91.p4c]\hq#G@/ ϭ VZ'P ZvHeҧy (o/|j"H1/o/dl  Ǐ ŭ+/lI&?|Z+EoϾhxcBEE_Ja;HywcF<xlɠJ'e /Ƣ[XTP^)Z=<‰3"ײ-a 4h&ڎ{مƾs8\t/$)+\EVǞl}ò Quׅ> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 352 0 obj << /Filter /FlateDecode /Length 1527 >> stream xYio6_a c*Rw Ȃ&mn bPd@m+{P-v3Y{QO' {BN^䆎Io8X~_X׷S,3u`<^XYƫf@S,iو^XR/^$ A۳Ex ͿcVQ]LZD`8k @D 0=i<Pԟ$b I*]t%ɔNe?"n )\KtE;8標5V9* MD" 5aqX)`@ 0š5mVo@IFc :st ӆƨ(-^l mؙQkSt-ٵx PDJTPF6%" "]'H *A& $vCr}%H捧cf4t%B8' 2\sP|ÆֽhKݝ:9G\fɝj6q_@Bk4/? dAz&@sz@K溭;`BNtZ*BpcUL0ʋXm[biVx}xY4L5Hbmfbb"W8Ђh824.&{|'5qX.nNM=adҪ4tE4V:ɹv LV]G]ϖ ov =,Pϩ@CF˨+sF 0Iϒ(J]W)qw^3/1#4F7':тgՙL #u)cew8;f+|R[v.1lglDf]}`Hhnq{uëkr[Kz{ ?n{-h+G%6:@=!D|Ӫ}ۇs3g]ܩUmZ9.Ȇ蓔uzS9t΍wko N~\+-& PH=]{xy~N DN1"[ soy`񯗅OՉOsUKqg3`5yr#3!0JQ%m^ߪ UCHvwkd lP n83+#/$t@絔S3H8tw8}Qv>UL~dc'؋?v0Ru<%|ζYq<7N ?Vzi|t]!} WZG>`8B=_XNendstream endobj 353 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-015.pdf) /PTEX.InfoDict 160 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 163 0 R >> /ExtGState << >> /Font << /F1 161 0 R /F2 162 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 5081 >> stream xZKofqW|d1ߐ,>6Q#Y9b2`"?QWvѽ$S۟pm{o}[;>/u۟~7?P?O*>o/ur}[hn_noo_~қ˹ﳿ=5nFPoǿ*_é9[Lb%z{ќu֗ןn _(^'|f~/ yt/i5{>ubӸ?`|غsouroa1i},4KW~>F7 ,^27+iׯ _V'|ןOB ͷM=Ȯ_»k`F+zE$lp:cWVvz[k)Tߠ_-ZyZ\>$ȭQ{_vJE҆67s,G[ ja=؎uCt&$/ reg~`Texv,Ð_m8rjOUJngCS)m=# d˗Bt OMO?An1 l7,~ALƾ,)Rw˰J'<}Eoߪ[];Y-XWΐxu0qrL<ČRp'K2Ԑ m;grOba nD ?09)b$^"UoX^#b p5EFK:xUsa#qeCO;J~J1TQ_B:ԾO`{1Iuڃ ^=k+iOldxrÀhMRc5*{"nt&:~ ?,tݻBl?" Ԑ H,+oz;z~/_-? \x~' `F #.Z_{fЇϯ\Pp?X֮6FY M?ݼP/gREt$Oa1iWC[[CoOGސD=p#`#s[ ?I ܆6lF?6*#h  Z20i?[7e?9sH;=$D93X \ԴI@,1iZC@Z\00Y `^x=c&aeВՋw얮<- !MK3]OI6/A `w< *^'=H2i 0K56$ܺLTN8 WP> ˽<#iX *0Ãn.ǞWEy}æ oJ {k6n+ N-w)i0 ܮK9DK3&06*(f6r^Mњ)i4B UHSSArG~yq)wR_UMu4^ "4c(R0]SHAպ¡=pw֥%5*P#F0}@@X  a@7G, T_d#RjCIc'V? 2tIZ4HE}T)Z)>a*S ,BOi|{,XLG5謌 'nK Z;0X 4}rKc_P`|Db-B _T4 蟄H 9' (b@!~}J3j2lQ&8#DE2e AY`7$HI2 -XxN )|퀴=* 0@Fu@E`>aTg9Rt/n p-ת; uy?jc\5޺%l4%pę\G3 JJ+2P%w,rGGX0ua L4lOK`< ,D8j6 pfĊy~.%[I'F,|Mダ@ǟqH(SFAt=,LM*e =1 t]sB]WOb&4=X6oA:Z^d]ŨJp uzjER5tL{=t\B d)RGy_`akQYB@_r O@JStOE:LUn=1Az%fgg*YPB)OI ”v9e>,: ݑ<(J 1ă_䇓q2`z'CQDH׮VeFTI{(ʋUr?V\Ǭ(xUU=UzQ앑j/\f/*pyOտ>{ce<({*e>Ueh8vu5I/"b^9W,+/y~쏴v t*t@[z̿">Ք*LR&IFNꙘ::L{tbc4pRwS|_:so,a7ihTqZF|4.j Uza= 1 wߺ琦Vzpmc SK^CjɟRԋ RjaO)?CvKF)[

NCRFƑz /.1Y7_f3۟<?>~yOJ>n'}U~iؿ 5~lWhy'ٿ O;^TՈϰppT-p2:X$^.ыtcB;Gt_QnȈtKsSpa|?7ׇz?E8{nٷ8X㕃,7.'qs?g$Ώ|sȉe']Jq$K5^Af\{ Mm5^Д(O2$O2B5Y߫p$ТQ|O{ G]Q2I C92^2F?v>@6C8K""?X"9U8 ] v4\=ld)bP\ٲ[]zX|Hapޅ38:fX|aۿdQUÍ0kx'2䇈^BB513oƸEatpݜy9鸿}r>_|ۇy֫HqHQH]7zJ^iWelۃXՁ n+o).%.QKeE08Z?&ϑ#֕u'LDzޑЌKU*Mt!q$sޟyuxYdU`֗4ydm].>|Og¥d*L4k2(Q*˱ȿ/3Q&@w>"OX!M-uK,H?<1:P 4D#/W|E7^9Chn멌 |L?ٻ^MD\>XdLԯ,\KS6? >Pvy|9~^V)UE.TGCyޡ||$x(;e]H _QvH2*?<|go{,|wm(C 5K{/YoX|p뒚6>eX2T4 44qc:=ʗ5^}7;!WAteV;5:aN^aff)薒 ^޸a݈:2yOR*B=Y$uJ^|yө(}bm[}m!g)3wCC'ny3u[~:7?udU۞,~-S  -% }EGܬ1[ 1׼v'eU\=Vk+=*SXl'e3L1~ژOE#[Rsc6]%:tzl'_~CO  Js_Xo?Iُ7GFLJ?> stream xXMo@WX!+AܐTzhP"i 4Y$ζ4FkǛ3;H[ORnO(ۋ녞=Xsˍ 1Xۙ~ŘS: MbuAώ8T|[\gm'P^+m Ɍ$#*ArAܒH$?$ x>#Hs<V $bR6cL2p*.V.8Rq_Om% G02 gzokpSp\atUFϛ FϡAC l âL&՜\c]nOJaEhv+ f\HHHOx:He <8>))sG)G> σ!GC1Oaֲ]xٮXc(ݷ)*S4_ۢ6\7ݗOa7wLlfS3[vAiVM14G|_욶#^:Ϫ £~ա^ZSp~d㾮Tl 3fw9KxtnKȷO ;O =zXtendstream endobj 355 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 356 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-016.pdf) /PTEX.InfoDict 168 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 171 0 R >> /ExtGState << >> /Font << /F1 169 0 R /F2 170 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1604 >> stream xXn7 Wh.M-EWi0IR{ގg@q,K#{=OK͇D՗}!/?NWo |+~ ): <>|Xϼ"oW =Z{w1{?9@wW9{>K1r9' z[b?6bp+wrSR,Ka.\| Ce,CeO: Iu_ ZA}ϫ.%Xs8bcy 떎/[I ۍP&FoJ35_-\blo K JGeM1ttzK)[z[ϥ=4Jzfg% {Bڻ"DR<.jwn+;˗^ے ^|K5hIcBK#V "m_(UyQkh|_7k5kk8"qVDDEտ}]|%_3NUA|/\k-eV[bC\(\6]~q!gtY\IKpP}EPۈڕv$Xj~q7Sm<ۑWSql LCi4dl?t1kik#CQhRwZ[J^ek7j5=fY =;UV*xZjO`JV`q,Ӊof%܃7Ū"!\&8dJ٥nXgrso;>饎|onhY` tG#i,=ցPonɼCȫt䷽ ܦ }i"]//9; ?l-hI'NqVٺ7@j8V_7.]7S1 Y۽=lMЍ hsOuUe#dt|}+D!c&k丄>rU kGgXm' u\9$jBvYKN\-Xvs\'`/t!)yz43e(4PMMh}BW.zj9 `JЫo WF/ lKXU;Pc3^ik" ZDt~+;^庹7dvkH'vYğx3D)@ 79UPdWUK>/{1F*->/pD(H CNM; zTo 2o?!USqy@qEr2OVT\~/ޠ0@JW1Kz2K/ؚFqY1-*S9Ѵ\=N 0Xxendstream endobj 357 0 obj << /Filter /FlateDecode /Length 1194 >> stream xWYo7~ׯX/yE 4q"@QWAA%[uvזuXvƘKpތ'iYa3EYt" \fBiϣW8fH K x}՝}"О$9'8#S?e*i 8"cX`р?%x p2%Qib+jyguwٲaC@LB秜 V"Xmݙ>v{MwXE'FIj)"Ɯ_N˿9]zSl&$OS)'HҲY/*܀p΄D-B4]cj_`]c[l;.5pڧ@qQy+F(n'0}BA+* զoˇP!(mIa?BZ9 |.:MTy70 o<_!c^I1y*k|^6 ^_l"x϶Xu wm@FFRT!*\ DN3EɨR:z[ ~wL7 훏TV|Kic$Z6pu>2hFyja5<̴XvDlV#7 ,(n+>Z?D0B|w-%}L vI2asS8\hiL$|B"ϋ()av%*+2$hWR]@ʼn)'nX{࿹渟ͼ;&tYU Ͳ'SSM|%&4y5_ ̪)u7mLFOl)6a|6, \wS?*9sx/{;xa*)`ˇWt+C>@S&kUpc6P'DQ:ICZ1wMz~:[MinˊU ehxAC.)['F(e,[A^7^ȷvT>NT_zOB[~!L'cu#YPfoQ _}IzԨ_qzR=1: h6z4>~FN(ʤ*ƗAgMJZڊ(^endstream endobj 358 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 359 0 obj << /Filter /FlateDecode /Length 1573 >> stream xXێ6}WAJZuWHl"@fAX&p-Z{CZ993ry˽< ધ7;)AŜ~G<:e1pE?o$WyB_\ZʦKkvׯ seY ϲŔV-DV)F\8Jyygܰb^P՞ۏyS6{ٵL T2RC9c/k,[\"mި2v,"Kz$NȮX{zYId7a0u:0aaŊ]0(EFfa!7nFM?xv=A0 OzY;Ë\DE5GoSrHӈ`el8yalֈq5FƩhnk+L?b%/,WUќ<$gjn4'}o Al|Y#[+<ùd cgXF,D2#+c;bD!_{_aAmϕ 8V1jL+Fj#s7t92kѱ+T;D!9\Ф=Pd!`-$J6<]~h;|r؏?VW`b%N'\uKkL]clLc 2 wH"I X-l2OaL-/EASٖX:XeX{F h^z_ӷ.P[i:] ډVi/-:-}VXfȎ_%A%|8݇>߶.w1D7&'wl;2l zǢJnO{E:wj`*6g(cHD:w:~ݝ&[ͧ4nG4ua;2UwYׅ joȺtͯ;],T:ƢS+r+ {7ʊp|Rĉ)E)ϕnuM]@ZtWcisճJ̌ku5+5ZL 6_;e <=M-k>*3:rdm]- S%A,FS]Zr-! *ʉ]>TԄϔ-;0y~TK;#P%UW?2S%<͎endstream endobj 360 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-017.pdf) /PTEX.InfoDict 178 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 181 0 R >> /ExtGState << >> /Font << /F1 179 0 R /F2 180 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1739 >> stream xXMo7 ϯ>XI}^4@k=9N 8$N>Rݵ3N^VDQ8r7٥CtE|N"Ž[ݗ0xq >?oWӋׄ t]}qKķп0_1]gL߻swіN?]HZ԰x3nRS!.T}Ɏk9oOId/NO>N>-c_#mc,I?q 0&7/8MQ5s,͢NJ|!ږnP7\edөT/zwzdy6-n+4OAYXg)~:>uvx mKDcպ;=ˡ0 p8A9 3eO8WrRew%ISMy%+cvcx0p:v?Ł"i,vG f rG}\~\pȬ)nP kɹt8/4ߩH(]ɍE3z>}9Dž;}t}箿>sWoVZLge;%m=nD݁L2/DvL}lk]क़,߳=Acϧ+l>7&ҞͪRlSP*يc3FyBbCF0SŁSu)!ENȥL\buc玴Hި4|gQ`/$ke%BչO&P[- |eXu v{siuSͷN+,-C1EOfNG`-Y;tt3q AiQa4.eVYRJz,HMCEWxARWESY}Wj'hӎXN9 x{9ʝ}a-u$FB^/Z46F::Gec' "*j MK?,kyVuwa6`0_O=/_4 ³b-KƊ]$fYƠ7ѻ,GDfO;3}QCTe_Leq}ak[(ZFh7`p   6A5_4W TQ[4 t,HR $G?1W IVsMʭ (fЃ% 4N5bXܔNr? X@A}Ak0`+PniF`ٺ)Dz{ 3bE@WdpFF"N4BZC;- zWVFh+ "PlR0q21¡jׇ6l71L`[ܩP֊ XhGʗ9my'tKzoV#ڬ6&~ p)>)Y@I qĬ(9'vn7΀Gr%{F@f4͙U~5ƬMZV>X1=UU%̧$8uE%mRݬ ":`i2z6 vendstream endobj 361 0 obj << /Filter /FlateDecode /Length 815 >> stream xWN@}WXAŎkU*AKRUD8NnIhx8*k]Ιήa# Vh; KHZw-+SM!tnR={&^¨\F`3Xg&*Xa5`3+,bG;Pv nP1(E`mD^ayf iJE]TuGe**UWʔm)޳%HK~_!:+gɘ4f3z>խ]T4kX[5%<=tŠTo*͐ GRժ [<| 3͝g,+p\CA>Fb-=*]U'%anw􈎈ﳻW joW:RX6AQYtnQwo c`+OyvDzJݿsBuvD =NKKCƽ؃y͚¦> QM"k{eWn@~caVt٢➐1 ´XV$tTly)Q8Üd, -ԊĐ5O%_'<>`%`B ei3`ԙwbK՘癴tk'&(P]Kz<(L7Bkњ"Pҩvϵ[aYaj#U1^/eendstream endobj 362 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 363 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (d:/Graffel/R/pack/calibrate/vignettes/CalibrationGuide-018.pdf) /PTEX.InfoDict 185 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 188 0 R >> /ExtGState << >> /Font << /F1 186 0 R /F2 187 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 2291 >> stream xYMoGϯtp&X0f%`AdHJb}H={@ͪ"G-}9%Xb--9uith)+‡]\bw/b2qI%h<\~6.[RZq)UzЈvxaŏVvMwP ݆TeMxzj]t*{{Mq/MrH }N'?s rc7Jt^)I:,/Lz9b宅qZ~3HIzڛA5[)k_߫E{_zx/]vXحg\fl1=gw~~sꤷݜJ'8љy.SeT*|a$ӥgr5pv}po YZAv}α(*#:>$֙Pe)}2caD=V!?r5<>ORYٮ63L`CDb N|$u[g"J8}k%ZKĪ"[gTvfKD3%}'r̺HuN~XF hzK:99nDB֔V+mv <2Wd8N[jK.$03qp3bV*`\#Gx̷/?}4F (vrWWrmZ'n~C0٬]\}zŘۊȒlcx@H_:t<$? ` f&d8n U3PH Brːh{UufܮYtދB_0x{Iڒ|ُq2=ĺ*HmiDX6d$?:%,h8'ۨ@B>&!?_f%pDPPi[0i1Z*IL*N}7p 'h:"RP 'Y[r8Lmv#B9k_Q4gb (CB}SGgYL%EX5dh9 Fb)6[<,h32ݖj iM.r0amL\ 91(a@PkCp+%lDEE*$нơpZƽ0΄zYJhŲTib,4a4(0q Qa4q($(S/K)lBp5dcnv1ٔX/&G 30[_"xI'Uc#IQIPj~q=D?x?/Z`:YhP꨹4 ;ٽf#lK;ILShxE^4Q3`uzbNԡPǸK?uΗ`@rAw!o㬦0x aA i@2:!ZkGؐlTGab5?AXqT'(r&oCL'd!L׮O}P@Ѩy?'H%^-`Rf[V|UVa^t<@qXW4{.s)%d5Qlo:Z>V{W5*:PG#kCV:%EjN֫ vm+F'8 L*C}I&OP/LejF'5Mn&d<}:躉M Q}@aSxDc-,p@(,':VO#ӺNO{\ky {endstream endobj 364 0 obj << /Filter /FlateDecode /Length 1313 >> stream xXKoFW9QhDsM E6EEQ[ITDʲ}ҦUrhaٙo^kOnn#An+O8B νaFF1qQLEao`Ʃf#0?Л)I7Dc7IoDG~Ե``X/kFV<aU+klj5wkAGv~ E A[Z\`oa|;GVh,>MN=e$F 3"7rs+2!/Edn>Q )T_uIr7< R()Y>ٸqbf3س:sƒGm= 7H:d lԦc:<4S y&iZg!.oVE6Ғ _zq_pƒHtX!&]I> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 366 0 obj << /Filter /FlateDecode /Length 2292 >> stream xY[o~ϯ0p@ý7;'iѠh@KZ"QKR-ph-2;;7݋Wouvlllq,IcL D뉊Vu5F~U4;l'C?+xzUNQ~r5 vY/0bLZhˡthn@Giw؆헝-NM@ĥQxάqO򥷹'AS"U8ZPg..p>6^ڟwF渇g'}"x7Qߍ=ڀױNh-p8li[9e״*13(1ZYRI'.;:u/&AŹ0;#MR'Pj&7v GyxLQ4 Mb]⃔f9Ƭ0H!DJx6)LTrF̒hž=o| fz%o0ցR&Μe!J;Q[$-5;㬊qGB0Vu\tغi;dᐽEh}G3[/4' "O)sFSgShqS, H˽e+sPi:7uI]ME`iFUJVik6̖y9Laġm!n1w:,5 ŢZ]^ 965kXsڜ r@?&Yjkn-Fh$?%*v2PnB8JцY̙FLV\3Q-@h-BK|ΡsAJCeZ6> I4yz232y,d\PrkEE2裏kA⠤Kd3-qmHVz;cI. +CM] :J,TK>1y:yID 7yw>kB.i9CJ$^KYa= 8 ``.+ .3K)^\2*BX zz JB -Uѝ'U1 C掲vBwp;G{,y+uqY"Kqj&PO$IIʏ=dGW2Dֻ+dd*JA'iL|+yzO,]HU^ݓP`- =iO1"@~族1Ş/~&M0Q@ *4m. 瀦WC|vqdHDͩ.+y\ I<ˊʑ{@G|U\p6MlqLAI+9Oꊜ [te1?`gb CE$ųzZ[.:]UϪ.~%lQk=FGPEn`'TSW|$ɠ&*\_Q?x^.*ʔP !%"\JG_ c4K)>ʢuEv/Í/+_tt;V8xkܻˠ%퉯-}βC&}*:1jo#sG67eۺ#`x2//z yqK\3B^.w%Ǘ~}> -IXipYeb _ՀVf=}kəzC!]GЬ)}`w?y-/6ۮiTLsS5u(QFpݫar 7U8%ÔV+JB#Tg?ם-z`PUuO?ȅXf14q/&vqOzr_rs1 "uB{ζP  e*Dhpś hendstream endobj 367 0 obj << /Filter /FlateDecode /Length 1451 >> stream xڅWKs8WpUcG-?rK2fT lMM̀xL6~%m|189;EX& ^:I\N02Eg0|W߻ ~IG1nqlTYXݵX]޶kr:/yVëڂ$EqdH}+7E7T:| iWlf+8f|IFIoK萯ok\wnp7U8LŃ})GZhiJ!8(dhNtڱÍs ͑r5 'ZSܞ;5h6A!i]v'N2RyiYѠ.hcu3Ԑi׹RTׄ 4Nr_qb߭>02 NsNyp#U[U,<כYnH %84KHE 6-Ay` QFm_KYqbr1_⛸ c9!ez\PQq 7XlH44 ZcƋ`(4eas)ܣ Yf6F Җ\`ԭ9,yc79EԊcYe[0&57sqV +t~0FYPpmӻe|E%>+l5zfwD)*_wXƨxD=ʓD+FbcwЈ213`;/&MFcS?:e!D0daس[FH炜c}KAz^ .9I;e=)diGe3%ci@D ߂zgan[ }="n1DX۝Jc[)VIĩV[oiZwx)4K@ ^Dt*'t = eyH(? .+vE5"5XREƶiqooK~PIfsm_Tg_wX!|tLhAXyAԕ1gouWM%+`XcZ>ϤUs<3HmʴOݻ6;ӿISuOO}o=yCC*5>m=;/FSQH.|ABx^Y kdO0X{nؾ` u)6laE-03R?&ɓЙ,endstream endobj 368 0 obj << /Filter /FlateDecode /Length1 1555 /Length2 7701 /Length3 0 /Length 8720 >> stream xڍT6L4" -ҝ²Ktw4%ҍ *!HHw>spfgnF}y0 !xx%~~!^~~A<( $EQtHc ԄN!# ~~ ?_D1 h0"jg@?wBA@@8#+N}8 Ax'=" tvㅻpp<{ ~h!icCm@Wip 07d; q 4.d?܀?;ݟѿAa P'@[Ya_DB6H R@PH_i}V C]! d_G7] ag&lv@_0 *aeFulB P[@C}/ bi# #'P/K䐁0'oO"_*(A~GGmB<ݿl_~@/%o -8r!V_^!+}HNN 2?3O rф#Tck Cݝ׫"Efw/nP/X1I]2сA=<~!W|\ܐ C!M` 8J @o<< r< xx/ @rpW_,&e|6#pA|Ca$B>|.>AQoÇ Y?AK?A 4<R&<%OqJV_s_||R/ԡKKEF&o3m;?PgS|i>F)4NW(s@ѡ!ƕ 5-x+?Rk/qVͰ5焐X l'RxɞuīC#ßIzb=7$Jô>yfڨ*6 Nk ~Y0JHFp%܇ Fu2'K:Ȗ}Y֖w6kX*A!e0;EX~*|ECeG| c̀8Փ gy_oBAuBիgbbI1C}G=b$$JV ΤA >(u,!q]cwΝP%RQMpt4>wd 0%qTegT.Ȳ ͥ~7Ӡ[\a!{"+4!ߋVO"oIxO丆@B4ꙴ?zwWWVT3Lj<7}ݝ?&/ Um1+>n s5۟yn+\w.C[3u77ݽ>'x4>bmeڃu ];}&*?]n5D>#3䓇 bmV@^C> 7M:qhY ܆TlvcB;bcAlOOzwފJ6V1 spfa8.v*1ba%@x1A Ċk䠤m(OKCKju&olqJ fvmV<"i@nMvB^qS5Dؐֈ޾PLC?2Y:P~`?'>vEK$KZI5/n.[04\iBa(]Abk3?-sGUag95z.N->]pՒbO|7lM$%)- 2uiZoZU󦮷c6A׸!+ Ć,T,I1˥lő{1*gVq-V{{MN֌BOH`Ĕ ӏ-ҏR'~>ĝO5̎Np Տ>:اI p` /< o,69SLY@ .Ʉ`yRN_Hj.S;_. 'r7M6H;RN0ό~~z=OETx=S⡛^6cˈїx7O+jKxoI񉠭z՜I M9=ou{>9x(dN"h&P&ew&qHx=#u폑8 73Js4"%JT)u=+E=LEE)<9P\/B %{1^))~ٝ$io\Aa.CyleSg֢x$:lduvd>3em/ё'$^ZS! a&@5woDƠ.FPJܵ% *v{#v9Y-;P`ԛp@?9 HL~*Εedn] 6UMc0avFwLhlΙDQkhN!Pg*ocwL&cLNlFi,P^ZZd޳lBj=v!lS5^je{z)=9SŦtWJC*C_z)KyC[jrќb!]V7|qBSx U Z\>]ZpRٓVSL0z0PH1P~3N&Lȟbe*3O_.E 6B|tv0M r%(^2 LuS|YUԎ)W?tbʧUy uBzsG J,/O|l<_cn?>+<*_Mts|6 ]~sJS+Sj*KR6kNS` ^|죀6dVwUҎ۴,+668n'n""dslןyZLrRaI.3EVH_Y,6M7)Ij>KW|ShD=Xxu wweFOpw\^9zS$mOmL=ڃ׳^#J-z[ոB Jz 6q8n:Ƞt>w!²iy7*&MAp b}mVp-7MtL\{`DgR4'Lt7}%n3cvI;o4K o~[7| 󪙊Kj 'g|m:nz)O>s3qheϒETV`.@,ǙPƞ1r,f.W (S"T(\/ 'DWdǚxiY[ 'Kd?Gd׿՝]SmPUU72N~& ! {!=:X[&7`nC6ft=C {b43+JG}>q*{!N<MeU!r !hrc no>knW#'|ozP1i?L/W[pDȩ~ Ob嶳iˆ>)I$SfD/Gx_$Ti6C@2zy;6͝t.Z bw͑ZWL kœAZ:r;EuV)cSD*wQA ʬxڣ|)iCYE]e zRy \+_PDJuȆeo# La xr 5<;Ih :1!_;t3]|RʛUTS Wv8s?jMSb10)jv='s8u?TTQmkpt(K] [L[Ea3MSŬͅRw9[e9%7-MDh[=+7X65 1ZI" '\#)2~( S . d: W| LɅno"ɟ'r<қ.2aka1o>"2DGیj3HN13dJHd9}CIs:INh*{jL<~SAkT)) E1V*] wN@=g\?z@dfrW4(QybOiBKx=ayEC [1K[i1;\ĝӫ`"> OtrZ*|݂sF»v K^vE=fH>iJDWĠj1|g.dS%Q$R1a75ޯ_Eѫ| F4H&B'RNx& z;Bi"y}j' [wJe"/7__I$.\;-}ݱ^ϟTtJ/Ή=Thaa JYUQ؆,>]uy)?p׳Wr\!g,QD\sN+ya)=tVtikʑwFq9l?M$:fs)xƷp+=3Lw}< KoX6Uoޟ.o"ND/ z2إ21IC*a>xa&*W }\ziȨ Xs^mJo*o(ϭ~y{ (Ȍ೔qZF YT/>$b-S!ˎm⢺ndSGPuRJOcߧ,Pq4͐*-B>̤VָȖ}b#PR"k$If|6oxHqtsd!Abi+!/} LkoHiZlQ鎿BX2d:HMuaUWv{DgX]'A.;ruKN Wb.VQٌch] V-0*neOϦos؉/diV ,ہwLMb'&з.Ɲ<4V'_k^mGWrINNRg::;LO+I0jMW7+έ{愃6PgF 02YpkO+1' /"dZu^YskCCpΚa`wn3U{7MNpb؆JɠcN*%%*}ܤMy*l *% 7/QLd5*çX2EG"h!"5L>)cuz[M4$q`jkK8r}O?O5:hHoQfUwЎ&Eݲ3Cf+^ӭT1j.C6f e2gNގ"*<&%J[SП+#fLyzqڇ^ 8+,8zTn,{&$?Hڲ9 ps\s=CA}{M/a]y 4<ƣYeԟ?J[)+%"^jqì~_:α85ij SsRx^t<B!<#%`z&TAd'Va'әv[ԚzCûW0}D}GMTB72{[7ZlgT?]+:b!!&yۀUݡ&s+qSYWQO iYlwkNCin>q5+r}T'``.$7[)Lcr+yeF#R])wɀ *&l/跾G%P $2k 7_q5''inC7V41-]$iL z;b ƹdw  dvrl /No\h$ 7S_v'fΫ/"hNrk(.^I=6%)ث0Y_ﬡ_yUrL2Ty\UxEVb,'v)"srhc-4jlϣx'hM 0y3-QH "H^\E9OG7]Rp@ABwfAqwtlCӂXGKS%o,6T]T=?]\U=NUzoe1sï c?Hw=..N_$x0x9 W4T<2PGqܪY$pjUk["mjyCi&9nvMsx[=(F_PK Z)~)Ivq&iڇeS:2kMju?B}FArpn|Qw@'].+iH:wT⫸돗<-yکL}܎JfT4alv3޾Gɋ_d\ (Pr#V 7q=ALQZ-')6[>R eIO;UyzQ:~a$z= E26^<w6Pz(inw7lUNOE2sm@2Lǟ e:'ܿhY`(&P@<~U{CwҌ/ho/|4qM]0A^3ϹQh>M*ftP2xkXY^M@~Ol*{>43p^m}zvFj]w/?c< &qmCξ(gH &(^L-xx7`6)Q&yB64b%\|R 1Û5:jcJtn|n,g Hj]Z7V@*doJܔS6КVx*oJΐ!q g'kzCwH0ԏ%zJ.wu^@d5Y ֑^bIjAU;(qM]tG,1,pn (\LqQC|0:QOtF8]BH@^_UPyvp|]>T i%D]mضM)ΰuHy[R|ՁgkO(ce=+LB;c~88?loNwXlbܕ5?Cendstream endobj 369 0 obj << /Filter /FlateDecode /Length1 1422 /Length2 6279 /Length3 0 /Length 7246 >> stream xڍwTj.)HJ 3t7Hw*5  3 !݂Hw ) "!"?9wZYkݽw?]kXu xm6P$ JD@ (@jC Yn0$B9(A(N Bi!u8$HD%@(#MHԝUw@}p@8 qqQyg F(3"  !0(_)8P( ~~///>;^C9P7O-`6!+GoCyݠ@- .0P@58tEJCC Hg0P&#l9Ht< m;T`4C`.(w>wD_iзUD:;C(w_)ܠK!l~p7B\=jJU(0PLTPLu@!@Ah~.H4fE=4-@[dGvd`ހ@4@Nhz"pϗ@I]I?^W@DAQ!Yo쿵`_IC@?З7Ͽhp]B2́@ CoEnHmm?`g/4=PB߮&?y8U F<Mq^PP?D{ptzqQ@[qB*1+=_2dCAFa C&Zkk w?BИvH7_c.t~@<}f/ N!!^#R{i#> IYs* K.mӗ_V}NxT3$Nݜ`N&c"i3IQx QևKs }+?{}LyzXv,MJ:qe}T̀15{βsoQLRgI^5wH{{H%蔄j/sJ<2<$SP|<\gQ3Q U~%9^%Zû݆cAj[ Ղr/lje:isH8`H rzpC+}?f6ێ)Obz?NEo=6m ࢎRtX:*48 )5V(v*_\\7[6"jJ٨jg-sǟUgψrXq8=s΁h{YSdFə/?GS؟vZ-kbҐ`R3ְZH؁ bC]TrR$AMK8,¿[SQ]B dRQI)]*6_+r3.0 ǔwbb =}6deKhmeyӦE?w_fA>H>v!Ckؗ6&LkD~ὢaú^;J *Nc&zuc)u^вEm˼kn;{c#;$UžNW3Gȹ}ڄˤr[nF蔅0S da.2;i`az ; qYk/\$J=pYywtXßIw'1ՖX ;ksUe1.I;KJ-jMكm!%LM=ՄswׄC@B3 o75v%w~OrԔ I QQwb+RRRX~kmŻb7Wt6o'2ɩr]׹-6Ј1 ~m_E*[ Qmz_H+(J?Mj*p0UN~ ~z֫x/2l?\Xф3?65(0rxZ$3XH@!RtÑk%oRUUBփȞNYoRlƽ 1f$pBrr7|n5 TdT~G٬O囧[}הjɅ)h-K/NZCfAS4.=NN~(?z[?\>,uD3O2/:;XQ9l${Fy6.+gbWzB$a0^E)C1΍ ̚wܑ'O t1+[G3̯mc] :>N}L.%b=ܛL%i1*pJ16cP`(ûn^ ?65U^3SC!i`Wb-g7=/,lW$#[fό,'r)RbL=]Aa]Bz໽V FǍ^q0 cqyR=eq N7 kЕ,J[s}cgG8'{xx?ܹî e[򝡄ח&GoҎ40gʿRTJO1s~fy{[.x}-qO֎тnfZ4w݇Wm('|ګMg).EҒ tBHDZCYsGX z(wR<'"cNcT;CfD3 ,jaӑP39+>, 7eN1]-W1Hמ7d`[ ^8X[UL3~x)=O9-U4N|I@Ͽ) `9 SlROU܏>{YϭIV>0d)ydͺ&m6s|R{)ҹ;~G53Ȓ{.+7=o[ g9I SB$c:@aUg%v @ӻ|N|V^~8?j %qAÛE:̃8Ԉg"+6K`;c/)uN^Y$ImpF𤁼ZX`ƴ_r8pBdĥL]az|-k^woϬ7p'b]o t0.4~OSh ](hIgҋ[bsNm[`( X ՕxȁtNK=d?7iӄ"~.OkQA^t⺚TThoE[Z(1@:OzsFBNVUJbe+ yc%]GT^|m$x?2c\Zy5l R7SS;ʗL#AeYAK:3du;a4Q JD"+ߧm/=ܯmKETx[X1 =6;+~)|Qp;ULa}~wf_=KMSܡA}¼Yqv%SJZk/'I}xΖ>_ F;;_]oP ,3#ay<kRKGWX|sʸc89p]?V7zƧ;PUQvP~䪩{C^~BӋrЙ0K43I/01vN>(mw:<`U*wD;$1_½ro$)=xyXrp)LzH`Ɠ7EYwT3Z$ ޿'8۬!ч-}q<j.QEc^s0<] cΔ?s3kGxM*ʞ6%dr}6%.&O}F YT>,9o32ǧ,R&)6P՞W! /YLXu[aS 󴘬TTf#F#{{#_,5 mWvOez[ly^)YPg<{ĕQ6 & a%#BXjc8\q_&ДZ[[ SGYA/޿vjFM&lJvZn'ikq/>-M?9eKwt.ɰFCl&*@;N('+ ɪ G8eBciMځ-@k-MȆrk?B(!-:s1He.maz Wb+lkHsLɂm)RYbG@Èl5${[aibYs_qmq(ϴ~5Rn?w{6qyW,pF sUJ=%-nn"*؆J㹜Tg{#T=) ZGDC`Ĵx9LIؔTq?NoyO\Q&_').Q]VvL#?[oWQ%K_6^ޏ.#]JSq5(iTt~/]JDs(#sdS݊qb0;''>X~M#Ղa`qQx :}V`-1Vs=j+t@ fȾ*e5o-%nW/`ՠ .]ckwq#(C¢9eJ2ZNp.eHo핔{e) p:% j y&IP} ٪E2Q^oك+`3nZ~0,v?[Ȳj<$A~  zH͒.BLՆ^Xa[Pc& II_`j=c3; :Y= ڦ=lj:A˶Bninrs ϧ&zkC;le.x&.#.@*3jR;;=7C_ 6}2͹h%/?T^5~Hh]o>oCs͈6漰cF`RGGy K" -tHnv.*SsvިJ2 U=v@n)LsǸSYbj$χ=esegc(+CC+@xXUͽ 1Z:)vC/Ir֧-endstream endobj 370 0 obj << /Filter /FlateDecode /Length1 1981 /Length2 12877 /Length3 0 /Length 14091 >> stream xڍP\-и{p Fww ]k A{x'ޫckյ)HTDLl6`GFf^ +B h[@wـye f4t|:ۀNV6 '/ /33?6qCg @ k: Pغك_@mL` b @׌ƆVUcBP;:210Z;0؛ \@h0@3F 9/=*N`=59@U@_{`ad't6465fS(Ց`6dehjgIe+9ۃl@VPd#k%&b6@Ưmwcd-6.`)lb '[&u0 (#ɫ `ffa@Wcs?«T!~eakc 0}%_< G{'ǿXX& cG FU 4 =:{,?><齎 $!/' At66v+  (?JkcPljkC褐{chAuߓl<QoI:YYSQZ6xd'׭y jdy 2!6 I+D hl^[@%w tflz8՟*:wJ { 07tC`~/V낚]l#J `jcljrrD8LI70xL nfo `RLk>k_ok mGLYLk7:u榿!J'n7cd/J /Zſ૿տ+9J/ZͿkm;uslŝ嵔Zoj 3wWsKkߝz6&GzNN\Cj~t_jdozy@+ayƘ/Т6Za,žf Dz} \"MUHH/ڮ ǏzxGϧO*mKS8?D3 x>yjYB@vR9q(a޹K /+Tq!>0DGQe:2:w}3=B,KuV衽u?^6!54a,GIx%$/;<&h,q$q?d7]e.Z@/V\u*<=upصiCṮ}!u(fCOCX <(-;f.~Gj$#k2s3GVX?m&LC&R44 V&f#|Ʃ$ti!$KHiakPBW&m.t.VzًHUEwz4\t}T6Fȶlh/K͊ˉ3|f~23UQT$L,ŘgQ<}XxZiajxʈ2C#](v3'IK2=ZA;y9R}wQֲgz\QzDf!H՜v>gS z/ߒ /kH)>=YeEbva_{^Z@D 4fy!m ^*Ҕ e fr[k (AIGNAZ&B܄W.RlfM a׬Fm'[Xշ/9wR>Sh]S\E [@d,ʗ>ϫiV8ll>6{sTY@Q_ 童Eb}̘qd]o&?:{pI- ;F} &x8zRiEJnmR^|]VU'NKw? ,iՐ+KP99Ttz%*EdIxa"yǑ` K8+LGXO32 "^d*wP$ Voqt[Ti2,'>pڅѦ1ޘYXi;Dbe-t\>_v$L%q῱#>C9ndE+Ka?U 9cj)|Mܭ!?NGtNfz;Y fTKD;½?^3)e=>G[q輸VM?"ahZ3s:~Ɉdg'`2Tx9O[e@?8h>)+2V._=FKG%c<[k@v쟟aP5$ɄC2!'4<֯k Wr@r?ΈA|(L1˜!j/]!SHIUn{*88!%XA; !Z[}6&ن&N%$zUk‹H'a 9>/KUؙW1+G;4R (7ޕ3'lc eu27Id:7& 4/ODA(0"\rT&N0lʌrdX\zda9M(\fnʹ ܻqr[htQ+JmsG Zsvӣk}+9ʵDBYdi0fFBQQۆvyUߩh>/vziV5,oh|`t~|GS*f9E nQ_ɮ[aG(q 9~3xQL.7ϒlEǶoe"y۱!p }ľ֣)n>~FBn1#\lսYXK<==q.`ET/d{ ?/72cO ~ @ Njxez R^h±j:B&K*7{b3|ͻdR]k֒ߘ@hOUO׾{L'ɛF{tBG[$vXu=#>XHH"nW*m1 ޢN%\ jt'SJH@e 5,a!&rq2 -wބNdz.ҡ?+R%G~32dN ^:d9*fΆSq +.z[D=+ܸh^ W 2Q⣁ q)a]_ HbF6`|I %c%0YU@El8C?HLwaU3(5=4 *aW? l70%j#!/qdr0!.jV_-]gKz !)D52>y'[y[LȈ{+^c@&s NJ+f0J?<30,t.ceԞ uW¤O'WQ X$/?XPe4VEo/Ge҉ !8<-d; #4~nZr:7%O|^%w&oGQƓZ;` ԟl óH)K! e9UoFC7p)ڲfļ> Y>_caRB<Hq-$Et0+0?oݔz 6 L2<@ E=Td:s*)D +DJ5[`ݨ.-rMSt `/|=t[2a=#SŖ yț *ZoPjg\pjb-0xo8IQsL*pQ7dpM=%#T]^5'p?ܮ M |K2D؄$nUвEQ 7aa'=/JZ Cb* 18 鷶~q.DTPXofĚ% x~BNew-tLWՐ߭2ņ7Vϟ1RI/z⯑W 5 yP 'MVnHC`6ݎɰ=cK8)G-V Q>9#Pv.4=UzF+R6]Z.)bBr4aκCfz|g OײR:MfK֖%bCKRXYz!o oBnyťZyBMhxs`w>uxS f7ݧW*[d{= j_x..N Cw(ᙩ/s=<ҽvլ#ly_/.}ӯT`q)Q;cu347sI6 m NLۭmHpb՗sho bv35q=bԗfTkoa[ {jA+ck'Nqmă.!'l $⬭3ϖgЂL{f p Zp3K˔0VPPBr&BrVrٳC{PD|x0\FgxDZ~>Zj/XLVS" b{L&3 *7Fh˃vf.Cԡ !ˤe=,4w'Rc4`;e{Sw$wH65r`{royʏy I@`)igWݑ"vWi9ςa&k7;Vo 0W㧊0! mξ~0\19aE?Q!)3Aae.#'ˀA5i̇W1!QH=_ ~%Mڨ=&z=|>f/_Y&,qC7%c Z{neӠbō6= 1I ݷyt{]OGdǗQs[{|1#6;Oadjm[m%G YGBְ}ŕeOΏ] 8b90N+ V(1R;Ի{%xybbYȵ`D^!U&;nE7=~?X\㍹`nRb!֒nptv.~lSjJlyGۂVR4(!y5 CS^O9E`w!(L/\e5?GqN0AZ;᎗:MPxx캚Ia펣E:vSr'+ o%fF *_G?j:©kC:A0~v& [ ㉊Yz *~]gWR$myl#6؄ u-1s7jvv#%-8;+%#hz[i_.ж3+8IP{b|-i ߥ?|wd0g؁Pt1 ,r(ͧ{E_ZtH+IOWȏHI1^WV|PcpD@ZF>&_t3@v=~H_l.w%bz.FpP*gɉcҍ$_k'kߌ)ncg8jOA=\įkއԿG+.b"A|#!*PE#/"dl@k)[{?.;3/QPUZ{ 1_p DM(9tQu 9?^MrmПm޼t˒i9JƯQgA-B9*|WT1gp=k( >@ӕ AM`=!qaAΊੀ9gI ;hO&UI29SK[ FQȿ_QezT ScKu> AD!qrâa$2n/>7St&i.!G| wNQ] 6c鵬Jk\i{kf򟟘vڇHu?l"(pejAqx8㜄7(ѹj$dyY8zT߽Ҕ$@9$*d9#&ZҽHby,aSN2%d\h'>˭.b􉴈z9b0`؍DPN,4lS.̤1T^]{XEC+C ~|qڛ[bt~ZNܣj{lWY|J`̽S-S~bM;g4-MLϛיY¾gU9ܺa-hAv/mϱ3FP8+~h,h[_a7< g ZT֖c Er NֱP޺e3ivҵR GBHt+} P5 cya{;j#)k7Ysuu-2/sLd"DLײ{d5Z܃ Z o-Snw< N?zOwnNף AK#m~a=7!:FK~L[Ԟмdo&m&}gް-+ GqOzPяrª²jl)g~k-cKd8KxQ`=nAZqշ݋@*DnGu+Pc`ZE[HOFm[Vm^1/V=iE蜌w[)xx|/2#! =OΞBW +X兆#z:a1*kL2Y1YYte9_MD~M%`cܛD*M>- T) Pބ|/ Ia u-@d'=QlP&=鵈쓧 ޺DVee; \y)6Cm'%'P~xl>fPzζ0+"_@TO$;m-e-a]7= U^a#ZX@[ ΃Wߚ}T^[;uڠjm[Rޭ]ʍaGbx$4{wuhd:Xv؊xu >`9>IYɞPD Z#6k &w#ouV[E۪ۜ]Q^R;7tN1]ph$㢸M4S->X -4~wE*!}taoqhѬ3gT'$Fs֟O Yܖ2뺦[dzS78v mbG+/k D`t"3[5@/%~Ωmo{5HX͟p>.'!yKT^CD^EQanZ=YAY&*VuU~;}>\¸miO<k1u>n=%H IH u'\N/<۴ܣj+Rmk?iU2_ǝ;u|Z[se{Qn(ZJv8<+Уz@&_Ff(ř:w>cHTnKKf9'`"Nˀ$Rˀ~dt^gwΙ=öo0g%"41>|xg|{y1EB77 kCP2O9ܓCyo1kJ Lrj+#\/_~ksJEx#6!'t[Hg.AWf{ #>'-3}Î Ü8Gb8drwTkjǬ(lYDぷ@Z8oh䇪! yQk;Kr'ם5s JV:vɷm{DG@9_֍ t Nlg4DsJ~s4z5no4LGtiiVFCYK J4̩E(];r+,#0yN*1JӏtU][흗!1ɭTb uca)w`ݞə*+10+L(˼kdAr"%}'mXCM"#GoF(di_.b*"{`ikNRs? jOqD{D &/ WFQI*->w?ؒU<4bH9&9Y*A:,kԀ]y4%+c̙Ms-b_9tj+$, A۴fF%u>TbDr90يc/]b&ФrDkztE= 1 fQ-UD Î~'u+87_ƃ4$lT=@FGRvoϮz>8A W+~.C=x~nhViG {NM)SaE7X.-d|?UرA!=oAc!Í5ˆh.XtU_G~ _y5PDu|(4`& I4ل1aD;xMd_vf?ۄ^4Xz` m~8a 3-^aEQ>70-ym(@y] > f5 KR {As: zGȴ2Om'!ݟy1^ϳT2LI"ug("L3@ϦxĐkzœN c!Iia;R󚢗4s!.sWw7TCkGɵ_,vY=Ixq0wFo xMiM(P!|(ʫ<ץif \Y!zƴ" t.}:sݔm?y[HV|a\q;Wz[[TR8ҎYمD{ DR+,MU^i|)ԉJ~)W(G>oWp9Տֽ<t9Sc%qԣi)(EmBn˻x !I̥RWn އ'K*Ml,)smV n N޹h,kp<(M{ɦa䨜E|!M9͗}JG<?$Vm0endstream endobj 371 0 obj << /Filter /FlateDecode /Length1 1476 /Length2 6989 /Length3 0 /Length 7985 >> stream xڍuT6 ҍC3t# J 1! !)Hwt( "7sk}ߚfk?άk+g(aH^Pe|@>;!ۏ⁀aP("jauOHJ Po CpϮw:8"Q}~pr@<r-#!` A#&vE=dyP#@xxA(?P_=.P[ JA<5MX/@|;lk wu|0=QC y`/ G僽P {t0@YNF1auC"P_AN !Sz@lQrapoߖ=fg QSAs @ PL@q@|l50u~Qn{ HG '$?A  8@arCQQ>z@)s7kk*>C_AyyWP+ @@A0::ꂡ&G\ֆp!( E}K;_UWDʞ..\8ҳ'ZpԆBkA젞UCQ;"s@$E(C} vP_Z2P=\0.AeC3݂@]YZAaDL@XB|08@q =](]P$S8!m==}8M~1"E.g>!H|,]11ABV75rSmjl#_Sw.3{.CW3vw4Nwe2Dh5]Jwqp 'iٽ\W{*( n+(Y"XH~w۩h⒜7vTy!ZL#NfvOO}Յw"e/Z/>~r8(y$suNZX[Jsů"hO1r!"D% b$Ұ ]x7H݋WcȜ3p * &d3Xi/CGv$>Yt}jP=mWâ/(ij<%-  ys-^Wք w6<@>q}r8>\}+n wUä;ћJ<f4I,#gY隀-M}A#YMLHucы%h 4[cƋ51NmL1Kxp+nMߧV8BIp٤_@iEvlI-}"x,Ğ'8 ϟ=DC3/Wxa;تpJ۪1 /?w_$ HN1٨8c?PAGhؼuQ*K@va}<1݄Yz;3Nfv5UMl-i荽82D-R בЏ0rŽbo 7-BatBťkEj}yf E˛jdSft#A.RU{.gX쫨m=Z#9y7ŭS{ya {O0¤ҩ ~N="|%ʳavcC~YOPFyzJTX}M(s -bS$[M֮FT@iqb zoaXk"dd )b bۮA_2{[ai FPOo$Bx{a! ]Q>{^ tZOQ% Sa6_̈K';P.S4tfZ_=l¯e̟zX^3\Esņз9Xۗf&hIspn:66 #˯i K0=a<$%$|)'?sȪW}Tbgj vĀ׎", F0HYXPySrw=ڀNh!%:ef}NnHz۽]R%Ӎګo1@쉣 RځQtgZG[Bg# f.oJy.j#HE"mTۮ/sjdŧuNvsGrW}}kR޹K79$$RFR]`"*g[YRˆ2ȉO&m}Rҿ&Sn^ qI@c2r6qCmF;v YTP/XaR] @3ά#<Ȏb~8m~{W-"߄E.qo+Y<݊/5QcV(I}\h1ݓ<Scubى _kTPі%'r ~BL4A~}9O `!hCe$f1)H[{ "q]~UQ*pۧ^<Όy8Q2 s+JfpZ3GhL,ubI amE2k04%x R XуMtR@+#TinVlW %ծD ZOaE矿ab2?=)p;g~mf>ț&ޮ6Pzʪm΄b&ëh)u=es /W !a1B?jFZ\-⏙ǼMat&6wMA@sr]XgV=d[Q}qnw8#^lZ|ҚO82=8x>ZEP #S$ ܁ar6u. F .~)vnYvEe)5qY+B؎Z-;%lJ$PCWJbh¨сVnK҉?ƑV5şdﳽy Sw!cͤhg1m#0*#&=cAz5"SиAe[n}G%NO9$Gi 'nsԈ,sMd^pVi"rȆKƋinG!OqLDGVO1rrB $}y ;:ﴚͪ'+5j+jZ@"Pff=/L$ y^m!K )}FwxV{U&vO~|᳇D[C%%1(`؊\|H5؋ǫhͩeqZ[z ;I1]Ba(z"w?44`lF1 h63`>CIR|r OAwm*cbf5|Xcnz3jѓtk HZ,F= _fM)J>7{ⱃ"FM"|8tD2Zp%lD==5Q.Q2M,tK|#(gVw EFѦ$9=sEa)&=L|#>fۓw!jJِ$UBS/]kǥ!~%* LjsG?7̍E\ ]1ӸHЪUwivIEI$~6*cГV0/{Wډ㈙.etMKb,01u;fդk8k龩FaW ˅$4 nR_G:a ]9E[&#^'*ubS0bШwT`fvx@-%B"nY|J%wTZGpxD)bd6|#> M9A7fr\<^ GﱱdL&]ŀ$W03r01.8\[;cz:aF^\8ru[5g*]g9~ mf>a+6}qp{W|v5 pA{.qױ?ݩ= +K`?ʠ_j\5C+9LЇn.MH7?h!]j1X(p% /RfSh[2ȘfGX{UȂ1k`ŐD!DFѧ1NE]|:oJԻWe5㕞+.PGc TK42u&1Xdt21>%}k@ ^3Qʎ 9aa!݁FmϞH0] Pηd&|fk2[ȩX$g7nٳvPr6pfߊRNef>(:LV|"9/#dȆ{Kv"͗6!WSeVqj杍(+sb5+Lr~$^tlv|`2bs}n1oЎ閞Z8ctїq-^?9!25rĬOsE3 B ¤X`ThRj-YVFpvSbNbzw!b,} ˢ,kR]D2 g /]Xs/7D[eϚn3)irlk ;F (eRj3ܚluў|7(u秡~Y?kqt@Q2 ǁS\~Ɛ! ]l˯Y:.[BLsOGivc=к֠!x׋Jkuo`ݣc|#fU 6[\\L m+w bom_|Ҕwj5ҨIhi#\,t%s}f:Τ6IŝgB3$:Bgyp i[O<Z_{6?:oԬ/-[xۤwh>`=,Ŵԡ! yp^]ETe`8i4&dדXևPJtJe9M|Q)-IQSVL'ӥ{43ײ.+gT`O=Ӓ$7˾c2T>Ys VۛJmPQ^yEcM4F2+e(YI&y/MH}_ntr Ȳ*|,Wu 2ӴT 5N䉗$>E^[1^Sw4fǮnwixg<.OU_V]E3D\ hh5IELi7D :>W y>I*ۏ`bq_|Yx,sv9VP!n!/> W/I6Q> /W [ 1 3 1 ] /Info 101 0 R /Root 100 0 R /Size 373 /ID [<971b7c437215142f1ed4e5305fa7b3d2><73f64224b7a1ced81131921794dd5adb>] >> stream xcb&F~0 $8JT#3L d,'il~Sc1Pb"YfHNdBɁH ,u!Ζgkz9*u*6XܴH2ZY* 2' 2A|]Gs(I|re4q cU1qa`ҫn$a|˝Qwҹ]Qs5kVZy`FߙFG+ٺ ۧNE[W:~֏>svq u+G7G."\7E wD\c3`}pQd}=_LBx%⃑.斣0ւ'szvb|KN=T@P0aJôc6xRqҤK.M4a\zø0calibrate/data/heads.rda0000644000176000001440000000055512213365067014727 0ustar ripleyusers];KQnb XOi/JD,|@"ۉb&qUT$EQ_$3Ò{vpggJ6YJc\3qcqc&BկԍM0R =x7!x3e3Y=C֊h8;t)O^$658 .8x~'z^8{uθxrO։Wv?^\7rπu :/Uf1nSeE5V-uDɊk+k xU«@VS|33p7#jRaOKEG$K~zRqڏ dML+Mx! Ĩ-'f;fMopz9nfkiȞȁ3yGf-myo{ۆٞف{8pñc]$fݭ|^|H\calibrate/data/calves.rda0000644000176000001440000000026712213365067015120 0ustar ripleyusers r0b```b`f`d`b2Y# 'fKN)K-*8gT? Ӏx;@@@Sw͘# C9%3HBST r 0TX-D01a 0f 0t@ռ)calibrate/R/0000755000176000001440000000000012213365067012436 5ustar ripleyuserscalibrate/R/ones.R0000644000176000001440000000011012213365063013511 0ustar ripleyusers"ones" <- function(n,p=n) { matrix(rep(1,n*p),nrow=n,ncol=p) } calibrate/R/half.R0000644000176000001440000000016512213365063013471 0ustar ripleyusers"half" <- function(A) { d <- diag(eigen(A)$values) v <- eigen(A)$vectors Ah <- v%*%sqrt(d)%*%t(v) } calibrate/R/circle.R0000644000176000001440000000035712213365063014023 0ustar ripleyusers"circle" <- function(radius = 1, origin = c(0,0)) { t <- seq(-pi,pi,by=0.01) a <- origin[1] b <- origin[2] r <- radius x <- a + r*cos(t) y <- b + r*sin(t) points(x,y,type="l") return(NULL) } calibrate/R/rad2degree.R0000644000176000001440000000010512213365063014555 0ustar ripleyusersrad2degree <- function(x) { ang <- x*180/pi return(ang) } calibrate/R/shiftvector.R0000644000176000001440000000253112213365063015116 0ustar ripleyusersshiftvector <- function(g,X,x=c(1,0),verbose=FALSE) { # # compute the optimal shift vector for a calibrated axis. # costheta <- ((t(g)%*%x))/(sqrt(t(g)%*%g)) theta <- acos(costheta) sintheta <- sin(theta) ang <- rad2degree(theta) if(verbose) cat("angle vector g -- x-axis:",theta," rad",ang," degrees\n") if(g[2]>=0) H <- matrix(c(costheta, sintheta, -sintheta, costheta), ncol = 2) # clockwise else H <- matrix(c(costheta, -sintheta, sintheta, costheta), ncol = 2) # counterclockwise Xr <- X%*%H above <- Xr[,2] > 0 below <- Xr[,2] < 0 mg <- matrix(rep(1, nrow(X)), ncol = 1)%*%g Dp <- diag(as.vector((X%*%g)/(sum(g*g)))) dmat <- X-Dp%*%mg vecdn <- diag(dmat%*%t(dmat) ) if(sum(above)>0) { vecdna <- vecdn[above] dmata <- dmat[above,] if(is.vector(dmata)) dl <- dmata else { i <- which.max(vecdna) dl <- dmata[i,] } } else dl <- c(0,0) if(sum(below)>0) { vecdnb <- vecdn[below] dmatb <- dmat[below,] if(is.vector(dmatb)) dr <- dmatb else { i <- which.max(vecdnb) dr <- dmatb[i,] } } else dr <- c(0,0) if(verbose) { cat("Left shift vector: ",dl,"\n") cat("Right shift vector: ",dr,"\n") } return(list(dr=dr,dl=dl)) } calibrate/R/calibrate.R0000644000176000001440000001162712213365063014512 0ustar ripleyuserscalibrate <- function (g, y, tm, Fr, tmlab = tm, tl = 0.05, dt = TRUE, dp = FALSE, lm = TRUE, verb = TRUE, axislab = "", reverse = FALSE, alpha = NULL, labpos = 1, weights = diag(rep(1, length(y))), axiscol = "blue", cex.axislab = 0.75, graphics = TRUE, where = 3, laboffset = c(0, 0), m = matrix(c(0, 0), nrow = 1), markerpos = 3, showlabel = TRUE, lwd = 1, shiftvec = c(0,0), shiftdir = "none", shiftfactor = 1.05 ) { g <- as.vector(g) if (is.matrix(weights)) Dw <- weights else if (is.vector(weights)) Dw <- diag(weights) else stop("calibrate: weights is not a vector or matrix") if (verb > 1) print(Dw) if(all(!as.logical(shiftvec))) { # c(0,0) vector shiftvec <- switch(shiftdir, right = shiftvector(g,Fr)$dr, left = shiftvector(g,Fr)$dl, none = c(0,0), stop("invalid value for parameter shiftdir")) } shiftvec <- shiftfactor*shiftvec optalpha <- t(g) %*% t(Fr) %*% Dw %*% Fr %*% g/((t(y) %*% Dw %*% Fr %*% g) * (t(g) %*% g)) optalpha <- optalpha[1, 1] useralpha <- NULL if (is.null(alpha)) { alpha <- optalpha } else { useralpha <- alpha } Mmean <- matrix(rep(1, length(tm)), ncol = 1) %*% m M <- alpha * (tm) %*% t(g) + Mmean nrM <- nrow(M) M <- M + matrix(rep(1, nrM), ncol = 1) %*% shiftvec di <- 1/(alpha * t(g) %*% g) yt <- di[1, 1] * Fr %*% g e <- y - yt Q <- t(e) %*% Dw %*% e gos <- 1 - Q/(t(y) %*% Dw %*% y) odi <- 1/(optalpha * t(g) %*% g) oyt <- odi[1, 1] * Fr %*% g oe <- y - oyt oQ <- t(oe) %*% Dw %*% oe gof <- 1 - oQ/(t(y) %*% Dw %*% y) ang <- atan(g[2]/g[1]) * 180/pi lengthoneunit <- alpha * sqrt(t(g) %*% g) if (verb) { cat("---------- Calibration Results for ", axislab, " ") for (i in 1:(60 - (38 + nchar(axislab)))) cat("-") cat("\n") cat("Length of 1 unit of the original variable = ", round(lengthoneunit, digits = 4), " \n") cat("Angle = ", round(ang, digits = 2), "degrees\n") cat("Optimal calibration factor = ", round(optalpha, digits = 4), " \n") cat("Used calibration factor = ", round(alpha, digits = 4), " \n") cat("Goodness-of-fit = ", round(gof, digits = 4), " \n") cat("Goodness-of-scale = ", round(gos, digits = 4), " \n") cat("------------------------------------------------------------\n") } Fr2 <- Fr[, 1:2] nn <- t(g) %*% g scal <- (Fr2 %*% g)/nn[1, 1] Dscal <- diag(as.vector(scal)) Fpr <- Dscal %*% matrix(rep(1, nrow(Fr)), ncol = 1) %*% t(g) deltax <- tl * sin(ang * pi/180) deltay <- tl * cos(ang * pi/180) if (reverse == TRUE) Mn <- cbind(M[, 1] - deltax, M[, 2] + deltay) else Mn <- cbind(M[, 1] + deltax, M[, 2] - deltay) if (graphics) { lines(rbind(M[1, ], M[nrM, ]), col = axiscol, lwd = lwd) if (lm) { if (reverse == TRUE) text(Mn[, 1], Mn[, 2], tmlab, pos = markerpos, offset = 0.2, cex = cex.axislab, srt = ang) else if (markerpos > 2) text(Mn[, 1], Mn[, 2], tmlab, pos = markerpos - 2, offset = 0.2, cex = cex.axislab, srt = ang) else text(Mn[, 1], Mn[, 2], tmlab, pos = markerpos + 2, offset = 0.2, cex = cex.axislab, srt = ang) } nm <- nrow(M) if (dt == TRUE) { for (i in 1:nm) lines(rbind(M[i, 1:2], Mn[i, 1:2]), col = axiscol, lwd = lwd) } if (dp) { nrFpr <- nrow(Fpr) dlines(Fr2 + matrix(rep(1, nrFpr), ncol = 1) %*% m, Fpr + matrix(rep(1, nrFpr), ncol = 1) %*% m + matrix(rep(1, nrFpr), ncol = 1) %*% shiftvec) } if (showlabel) { switch(where, text(M[1, 1] + laboffset[1], M[1, 2] + laboffset[2], axislab, cex = cex.axislab, srt = ang, pos = labpos, adj = c(0.5,0.5)), text(M[round(nrow(M)/2), 1] + laboffset[1], M[round(nrow(M)/2), 2] + laboffset[2], axislab, cex = cex.axislab, srt = ang, pos = labpos, adj = c(0.5,0.5) ), text(M[nrow(M), 1] + laboffset[1], M[nrow(M), 2] + laboffset[2], axislab, cex = cex.axislab, srt = ang, pos = labpos, adj = c(0.5,0.5) )) } } return(list(useralpha = useralpha, gos = gos, optalpha = optalpha, gof = gof, lengthoneunit = lengthoneunit, M = M, Q = Q, ang = ang, shiftvec = shiftvec, yt = yt, e = e, Fpr = Fpr, Mn = Mn)) } calibrate/R/origin.R0000644000176000001440000000033612213365063014046 0ustar ripleyusers"origin" <- function (m = c(0, 0), ...) { vx <- c(par("usr")[1],par("usr")[2]) vy <- c(m[2],m[2]) lines(vx,vy,...) vy <- c(par("usr")[3],par("usr")[4]) vx <- c(m[1],m[1]) lines(vx,vy,...) } calibrate/R/dlines.R0000644000176000001440000000046412213365063014037 0ustar ripleyusers"dlines" <- function(SetA,SetB,lin="dotted") { # # Function DLINES connects the rows of SetA to the rows of SetB with lines # # Jan Graffelman # Universitat Politecnica de Catalunya # January 2004 # np<-nrow(SetA) for(i in 1:np) lines(rbind(SetA[i,1:2],SetB[i,1:2]),lty=lin) return(NULL) } calibrate/R/textxy.R0000644000176000001440000000154112213365063014123 0ustar ripleyusers"textxy" <- function (X, Y, labs, m = c(0, 0), cex = 0.5, offset = 0.8, ...) { posXposY <- ((X >= m[1]) & ((Y >= m[2]))) posXnegY <- ((X >= m[1]) & ((Y < m[2]))) negXposY <- ((X < m[1]) & ((Y >= m[2]))) negXnegY <- ((X < m[1]) & ((Y < m[2]))) if (sum(posXposY) > 0) text(X[posXposY], Y[posXposY], labs[posXposY], adj = c(0.5-offset, 0.5-offset), cex = cex, ...) if (sum(posXnegY) > 0) text(X[posXnegY], Y[posXnegY], labs[posXnegY], adj = c(0.5-offset, 0.5+offset), cex = cex, ...) if (sum(negXposY) > 0) text(X[negXposY], Y[negXposY], labs[negXposY], adj = c(0.5+offset, 0.5-offset), cex = cex, ...) if (sum(negXnegY) > 0) text(X[negXnegY], Y[negXnegY], labs[negXnegY], adj = c(0.5+offset, 0.5+offset), cex = cex, ...) } calibrate/R/canocor.R0000644000176000001440000000256012213365063014204 0ustar ripleyusers"canocor" <- function (X, Y) { Xs <- scale(X) Ys <- scale(Y) Rxx <- cor(X) Ryy <- cor(Y) Rxy <- cor(X, Y) d <- diag(eigen(Rxx)$values) v <- eigen(Rxx)$vectors Rxxmh <- v %*% sqrt(solve(d)) %*% t(v) d <- diag(eigen(Ryy)$values) v <- eigen(Ryy)$vectors Ryymh <- v %*% sqrt(solve(d)) %*% t(v) K <- Rxxmh %*% Rxy %*% Ryymh D <- diag(svd(K)$d) Ah <- svd(K)$u Bh <- svd(K)$v A <- Rxxmh %*% Ah B <- Ryymh %*% Bh U <- Xs %*% A V <- Ys %*% B Fs <- Rxx %*% A Fp <- Rxx %*% A %*% D Gs <- Ryy %*% B Gp <- Ryy %*% B %*% D Rxu <- Fs Rxv <- Fp Ryv <- Gs Ryu <- Gp lamb <- diag(D^2) frac <- lamb/sum(lamb) cumu <- cumsum(frac) fitRxy <- rbind(lamb, frac, cumu) AdeX <- apply(Rxu * Rxu, 2, mean) AdeY <- apply(Ryv * Ryv, 2, mean) RedX <- apply(Rxv * Rxv, 2, mean) RedY <- apply(Ryu * Ryu, 2, mean) cAdeX <- cumsum(AdeX) cAdeY <- cumsum(AdeY) cRedX <- cumsum(RedX) cRedY <- cumsum(RedY) fitXs <- rbind(AdeX, cAdeX) fitXp <- rbind(RedX, cRedX) fitYs <- rbind(AdeY, cAdeY) fitYp <- rbind(RedY, cRedY) return(list(ccor = D, A = A, B = B, U = U, V = V, Fs = Fs, Gs = Gs, Fp = Fp, Gp = Gp, fitRxy = fitRxy, fitXs = fitXs, fitXp = fitXp, fitYs = fitYs, fitYp = fitYp)) } calibrate/R/mhalf.R0000644000176000001440000000017512213365063013647 0ustar ripleyusers"mhalf" <- function(A) { d <- diag(eigen(A)$values) v <- eigen(A)$vectors Ah <- v%*%solve(sqrt(d))%*%t(v) } calibrate/R/rda.R0000644000176000001440000000430212213365063013322 0ustar ripleyusers"rda" <- function(X,Y,scaling=1) { # # Function RDA performs a redundancy analysis of the data in X # and Y. # # scaling = 0 : use centred variables (X and Y) # scaling = 1 : use centred and standardized variables (X and Y) # # Jan Graffelman # Universitat Politecnica de Catalunya # January 2004 # n<-nrow(X) # determine # of cases p<-ncol(X) # determine # of variables nY<-nrow(Y) q<-ncol(Y) if (scaling==0) { Xa <- scale(X,scale=FALSE) Ya <- scale(Y,scale=FALSE) } else { if (scaling==1) { Xa<-scale(X) Ya<-scale(Y) } else stop("rda: improper scaling parameter") } Rxx <- cor(X) Ryy <- cor(Y) B<-solve(t(Xa)%*%Xa)%*%t(Xa)%*%Ya Yh<-Xa%*%B pca.results <- princomp(Yh,cor=FALSE) Fp <- pca.results$scores Ds <- diag(sqrt(diag(var(Fp)))) Fs <- Fp%*%solve(Ds) Gs <- pca.results$loadings Gp <- Gs%*%Ds la <- diag(var(Fp)) laf <- la/sum(la) lac <- cumsum(laf) decom <- rbind(la,laf,lac) # It is important not to standardize Yh, and not to use cor=T. This will inflate the # variance of Yh, and give different eigenvalues. # Fs, Gp' biplot of fitted values Fs <- Fs[,1:min(p,q)] Fp <- Fp[,1:min(p,q)] Gs <- Gs[,1:min(p,q)] Gp <- Gp[,1:min(p,q)] Gxs <- solve(t(Xa)%*%Xa)%*%t(Xa)%*%Fs Gxp <- solve(t(Xa)%*%Xa)%*%t(Xa)%*%Fp Gyp <- Gp Gys <- Gs # Gxs Gyp', Gxp Gys' biplots of B (regression coefficients) # goodness of fit of regression coefficients decom <- decom[,1:min(p,q)] # alternative computations doing SVD of B. #W<-t(Xa)%*%Xa #result <- svd(1/(sqrt(n-1))*half(W)%*%B) #Gxxs <- sqrt(n-1)*mhalf(W)%*%result$u # = Gxs #Gyyp <- result$v%*%diag(result$d) # = Gyp #Gxxp <- sqrt(n-1)*mhalf(W)%*%result$u%*%diag(result$d) # = Gxp #Gyys <- result$v # = Gys #dd <- result$d*result$d #dds <- cumsum(dd) #ddf <- dd/sum(dd) #ddc <- cumsum(ddf) #decB <- rbind(dd,dds,ddf,ddc) #res<-t(Gyyp)%*%Gyyp # = D^2 #res<-t(Gyys)%*%Gyys # = I #res<-t(Gxxp)%*%Rxx%*%Gxxp # = D^2 #res<-t(Gxxs)%*%Rxx%*%Gxxs # = I return(list(Yh=Yh,B=B,decom=decom,Fs=Fs,Gyp=Gyp,Fp=Fp,Gys=Gys,Gxs=Gxs,Gxp=Gxp)) } calibrate/vignettes/0000755000176000001440000000000012213365067014245 5ustar ripleyuserscalibrate/vignettes/CalibrationGuide.Rnw0000644000176000001440000010314012213365063020135 0ustar ripleyusers\documentclass[a4paper]{article} % \VignetteIndexEntry{A R package for calibration of biplot and scatterplot axis.} % \VignetteDepends{graphics,stats} % \VignetteKeyword{multivariate} % Documentation for the Calibrate package \usepackage[english]{babel} \usepackage{Sweave} %\usepackage{Rd} \usepackage{url} \usepackage{wrapfig} \usepackage{hyperref} \usepackage[utf8]{inputenc} \setlength{\parindent}{0cm} \newcommand{\bF}{\ensuremath{\mathbf F}} \newcommand{\bG}{\ensuremath{\mathbf G}} \begin{document} \begin{center} \sf {\sf \bf \Large A Guide to Scatterplot and Biplot Calibration}\\ \vspace{4mm} {\sf \normalsize {\tt version 1.7.2}}\\%\normalsize \vspace{4mm} {\bf \large Jan Graffelman}\\ \vspace{4mm} \rm \large Department of Statistics and Operations Research\\ Universitat Polit\`ecnica de Catalunya\\ Avinguda Diagonal 647, 08028 Barcelona, Spain.\\ {\it email:} jan.graffelman@upc.edu\\ \vspace{4mm} {\sc September 2012} \end{center} \section{Introduction} This guide gives detailed instructions on how to calibrate axes in scatterplots and biplots obtained in the statistical environment R~\cite{RRR} by using the package {\tt calibrate}. By calibration we refer to the procedure of drawing a (linear) scale along an axis in a plot with tick marks and numeric labels. In an ordinary scatter plot of two variables $x$ and $y$ two calibrated perpendicular scales are typically automatically produced by the routine used for plotting the two variables. However, scatter plots can be extended with additional variables that are represented on oblique additional axes. The software described in this guide can be used to create calibrated scales on these oblique additional axes. Moreover, in a multivariate setting with more than two variables, raw data matrices, correlation matrices, contingency tables, regression coefficients, etc. are often represented graphically by means of biplots~\cite{Gabriel}. Biplots also contain oblique axes representing variables. The described software can also be used to construct scales on biplot axes.\\ The outline of this guide is as follows. In Section~\ref{sec:install} we indicate how the R package {\tt calibrate} can be installed. Section~\ref{sec:scatter} describes in detail how to calibrate additional axes in scatter plots. Section~\ref{sec:biplot} treats the calibration of biplot axes. Several subsections follow with detailed instructions of how to calibrate biplot axis in principal component analysis (PCA, Section~\ref{sec:pca}), correspondence analysis (CA. Section~\ref{sec:ca}), canonical correlation analysis (CCA, Section~\ref{sec:cca}) and redundancy analysis (RDA, Section~\ref{sec:rda}). The online documentation of the main routine for calibration {\tt calibrate} is referenced in Section~\ref{sec:online}.\\ This guide does not provide the theory for the construction of scales on scatterplot and biplot axes. For a theoretical account of biplot calibration, we refer to Graffelman \& van Eeuwijk~(2005) and to Gower and Hand~(1996). If you appreciate this software then please cite the following paper in your work:\\ Graffelman, J. \& van Eeuwijk, F.A. (2005) Calibration of multivariate scatter plots for exploratory analysis of relations within and between sets of variables in genomic research {\it Biometrical Journal}, {\bf 47}(6) pp. 863-879. \href{http://dx.doi.org/10.1002/bimj.200510177}{(clic here to access the paper)} \section{Installation} \label{sec:install} <>= prefig <- function(){ data(goblets) X <- goblets plot(X[,1],X[,2],pch=19,cex=0.5,xlab=expression(X[1]), ylab=expression(X[2]),xlim=c(5,25),ylim=c(5,25),asp=1) m <- apply(cbind(X[,1],X[,2]),2,mean) textxy(X[,1],X[,2],1:25,m=m,cex=0.75) points(m[1],m[2],col="red",pch=19,cex=0.5) abline(h = m[2]) abline(v = m[1]) } options("SweaveHooks"=list(aap=prefig)) options("width"=60) @ Packages in R can be installed inside the program with the option "Packages" in the main menu and then choosing "Install package" and picking the package "calibrate". Typing: <>= library(calibrate) @ will, among others, make the function {\tt calibrate, canocor} and {\tt rda} available. Several small data sets, also the ones used in this document, are included in the package ({\tt calves, goblets, heads, linnerud} and {\tt storks}). \section{Calibration of Scatterplot axes} \label{sec:scatter} We consider a archaeological data set concerning 6 size measurements ($X_1, \ldots, X_6$) on 25 goblets. This data was published by Manly~(1989). The data can be loaded with the {\tt data} instruction. <>= data(goblets) X <- goblets @ \subsection*{Oblique additional axes in a scatterplot} We construct a scatterplot of $X_1$ versus $X_2$ and center a set of coordinate axes on the point $(\overline{x}_1,\overline{x}_2)$ with the function {\tt origin}. \setkeys{Gin}{width=\textwidth} <>= plot(X[,1],X[,2],pch=19,cex=0.5,xlab=expression(X[1]),ylab=expression(X[2]), xlim=c(5,25),ylim=c(5,25),asp=1) m <- apply(X[,1:2],2,mean) textxy(X[,1],X[,2],1:25,m=m,cex=0.75) origin(m) @ Next, we perform the regression of $X_5$ onto $X_1$ and $X_2$ (all variables being centered) in order to obtain an additional axis for $X_5$. We represent $X_5$ in the plot as a simple arrow whose coordinates are given by the regression coefficients: <>= Xc <- scale(X,center=TRUE,scale=FALSE) b <- solve(t(Xc[,1:2])%*%Xc[,1:2])%*%t(Xc[,1:2])%*%Xc[,5] print(b) bscaled <- 20*b arrows(m[1],m[2],m[1]+bscaled[1],m[2]+bscaled[2],col="blue",length=0.1) arrows(m[1],m[2],m[1]-bscaled[1],m[2]-bscaled[2],length=0,lty="dashed",col="blue") @ A direction that is optimal in the least squares sense for $X_5$ is given by the vector of regression coefficients~\cite{Graffel13}. To make this direction more visible, we multiplied it by a constant (20). It is clear that the direction of increase for $X_5$ runs approximately North-East across the scatterplot. We now proceed to calibrate this direction with a scale for $X_5$. In order to choose sensible values for the scale of $X_5$, we first inspect the range of variation of $X_5$, and then choose a set of values we want to mark off on the scale ({\tt tm}) and also compute the deviations of these values from the mean ({\tt tmc}). We specify a tick length of 0.3 ({\tt tl=0.3}). Depending on the data, some values of {\tt tl} typically have to be tried to see how to obtain a nice scale. <>= print(range(X[,5])) yc <- scale(X[,5],scale=FALSE) tm <- seq(2,10,by=1) tmc <- tm - mean(X[,5]) Calibrate.X5<-calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.3,axislab="X_5", labpos=4,cex.axislab=1) @ The numerical output from routine {\tt calibrate} shows that one unit along the axis for $X_5$ occupies 2.47 units in the plotting frame. The axis for $X_5$ makes an angle of 17.65 degrees with the positive x-axis. The calibration factor is 6.12. Multiplying the vector of regressions coefficients by this factor yields a vector that represents a unit change in the scale of $X_5$. E.g. for this data we have that the vector $6.12 \cdot (0.385, 0.123) = (2.358, 0.751)$ represents a unit change. This vector has norm $\sqrt{2.358^2 + 0.751^2} = 2.47$. Other calibration factors may be specified by using parameter {\tt alpha}. If {\tt alpha} is left unspecified the optimal value computed by least squares will be used. The goodness-of-fit of $X_5$ is 0.513. This means that 51.3\% of the variance of $X_5$ can be explained by a regression onto $X_1$ and $X_2$ ($R^2 = 0.513$). The goodness-of-scale has the same value. The goodness-of-scale is only relevant if we modify parameter {\tt alpha}. {\tt Calibrate.X5} is a list object containing all calibration results (calibration factor, fitted values according to the scale used, tick marker positions, etc.). \subsubsection*{Shifting a calibrated axis} Using many calibrated axes in a plot, all passing through the origin, leads to dense plots that become unreadable. It is therefore a good idea to shift calibrated axes towards the margins of the plot. This keeps the central cloud of data points clear and relegates all information on scales to the margins of the graph. There are two natural positions for a shifted axis: just above the largest data point in a direction perpendicular to the axis being calibrated, or just below the smallest data point in the perpendicular direction. The arguments {\tt shiftdir, shiftfactor} and {\tt shiftvec} can be used to control the shifting of a calibrated axis. {\tt shiftvec} allows the user to specify the shift vector manually. This is normally not needed, and good positions for an axis can be found by using only {\tt shiftdir} and {\tt shiftfactor}. Argument {\tt shiftdir} can be set to {\tt 'right'} or {\tt 'left'} and indicates in which direction the axis is to be shifted, with respect to the direction of increase of the calibrated axis. Setting {\tt shiftdir} shifts the axis automatically just above or below the most outlying data point in the direction perpendicular to the vector being calibrated. In order to move the calibrated axis farther out or to pull it more in, {\tt shiftfactor} can be used. Argument {\tt shiftfactor} stretches or shrinks the shift vector for the axis. A {\tt shiftfactor} larger than 1 moves the axis outwards, and a {\tt shiftfactor} smaller than 1 pulls the axis towards the origin of the plot. If set to 1 exactly, the shifted axis will cut through the most outlying data point. The default {\tt shiftfactor} is 1.05. We redo the previous plot, shifting the calibrated axis below the cloud of points, which is to the right w.r.t. the direction of increase of the variable. <>= yc <- scale(X[,5],scale=FALSE) tm <- seq(2,10,by=1) tmc <- tm - mean(X[,5]) Calibrate.X5<-calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.3,axislab="X_5",labpos=4, cex.axislab=1,shiftdir="right") @ The shift of the axis does not affect the interpretation of the plot, because the projections of the points onto the axis remain the same. \subsubsection*{Second vertical axis in a scatterplot} The oblique direction in the previous section is the preferred direction for $X_5$, as this direction is optimal in the least squares sense. However, if desired, additional variables can also be represented as a second vertical axis on the right of the plot, or as a second horizontal axis on the top of the plot. We now proceed to construct a second vertical axis on the right hand of the scatter plot for $X_5$. This can be done by setting the vector to be calibrated (first argument of routine {\tt calibrate}) to the (0,1) vector. By specifying a shiftvector explicitly ({\tt shiftvec}), the axis can be shifted. For this data, setting {\tt shiftvec} to {\tt c(par('usr')[2]-mean(X[,1]),0)} and {\tt shiftfactor = 1}, makes the axis coincide with the right vertical borderline of the graph. <>= opar <- par('xpd'=TRUE) tm <- seq(3,8,by=1) tmc <- (tm - mean(X[,5])) Calibrate.rightmargin.X5 <- calibrate(c(0,1),yc,tmc,Xc[,1:2],tmlab=tm,m=m, axislab="X_5",tl=0.5, shiftvec=c(par('usr')[2]-mean(X[,1]),0), shiftfactor=1,where=2, laboffset=c(1.5,1.5),cex.axislab=1) par(opar) @ The second vertical axis has calibration factor 3.46, and a goodness of fit of 0.34. The fit of the variable is worse in comparison with the previous oblique direction given by the regression coefficients. Note that graphical clipping in temporarily turned off ({\tt par('xpd'=TRUE)}) to allow the calibration routine to draw ticks and labels outside the figure region, and that the range of the tick marks was shortened in order not surpass the figure region. \subsubsection*{Subscales and double calibrations} Scales with tick marks can be refined by drawing subscales with smaller tick marks. E.g. larger labelled tickmarks can be used to represent multiples of 10, and small unlabelled tick marks can be used to represent units. The subscale allows a more precise recovery of the data values. This can simply be achieved by calling the calibration routine twice, once with a coarse sequence and once with a finer sequence. For the second call one can specify {\tt verb=FALSE} in order to suppress the numerical output of the routine, and {\tt lm=FALSE} to supress the tick mark labels under the smaller ticks. The tickmarks for the finer scale are made smaller by modifying the tick length (e.g. {\tt tl=0.1}). Depending on the data, some trial and error with different values for {\tt tl} may be necessary before nice scales are obtained. This may be automatized in the future. Finally, reading off the (approximate) data values can further be enhanced by drawing perpendiculars from the points to the calibrated axis by setting {\tt dp=TRUE}. <>= tm <- seq(2,10,by=1) tmc <- (tm - mean(X[,5])) Calibrate.X5 <- calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,axislab="X_5",tl=0.5, dp=TRUE,labpos=4) tm <- seq(2,10,by=0.1) tmc <- (tm - mean(X[,5])) Calibrate.X5 <- calibrate(b,yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.25,verb=FALSE, lm=FALSE) @ A {\it double calibration} can be created by drawing two scales, one on each side of the axis. Double calibrations can be useful. For instance, one scale can be used for recovery of the original data values of the variable, whereas the second scale can be used for recovery of standardized values or of correlations with other variables. Double calibrations can also be used to graphically verify if two different calibration procedures give the same result or not. \subsubsection*{Recalibrating the original scatterplot axes} By calibrating the (0,1) and (1,0) vectors the original axes of the scatter plot can be redesigned. We illustrate the recalibration of the original axes by creating a second scale on the other side of the axes, a refined scale for $X_1$, and a scale for the standardized data for $X_2$. For the latter calibration one unit equals one standard deviation. <>= opar <- par('xpd'=TRUE) tm <- seq(5,25,by=5) tmc <- (tm - mean(X[,1])) yc <- scale(X[,1],scale=FALSE) Calibrate.X1 <- calibrate(c(1,0),yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.5, axislab="X_1",cex.axislab=1,showlabel=FALSE, shiftvec=c(0,-(m[2]-par("usr")[3])),shiftfactor=1,reverse=TRUE) tm <- seq(5,25,by=1); tmc <- (tm - mean(X[,1])) Calibrate.X1 <- calibrate(c(1,0),yc,tmc,Xc[,1:2],tmlab=tm,m=m,tl=0.25, axislab="X_1",cex.axislab=1,showlabel=FALSE, shiftvec=c(0,-(m[2]-par("usr")[3])),shiftfactor=1,reverse=TRUE, verb=FALSE,lm=FALSE) yc <- scale(X[,2],scale=TRUE) tm <- seq(-3,1,by=1) Calibrate.X2 <- calibrate(c(0,1),yc,tm,Xc[,1:2],tmlab=tm,m=m,tl=0.6, axislab="X_2",cex.axislab=1,showlabel=FALSE, shiftvec=c(-(mean(X[,1])-par('usr')[1]),0),shiftfactor=1,verb=TRUE,lm=TRUE) tm <- seq(-3,1.5,by=0.1) Calibrate.X2 <- calibrate(c(0,1),yc,tm,Xc[,1:2],tmlab=tm,m=m,tl=0.3, axislab="X_2",cex.axislab=1,showlabel=FALSE, shiftvec=c(-(mean(X[,1])-par('usr')[1]),0),shiftfactor=1,verb=FALSE,lm=FALSE) par(opar) @ \section{Calibration of Biplot axes} \label{sec:biplot} In this section we give detailed instructions on how to calibrate biplot axes. We will consider biplots of raw data matrices and correlation matrices obtained by PCA, biplots of profiles obtained in CA, biplots of data matrices and correlation matrices (in particular the between-set correlation matrix) in CCA and biplots of fitted values and regression coefficients obtained by RDA. In principle, calibration of biplot axes has little additional complication in comparison with the calibration of additional axes in scatterplots explained above. The main issue is that, prior to calling the calibration routine, one needs to take care of the proper centring and standardisation of the tick marks. \subsection{Principal component analysis} \label{sec:pca} Principal component analysis can be performed by using routine {\tt princomp} from the {\tt stats } library. We use again Manly's goblets data to create a biplot of the data based on a PCA of the covariance matrix. We use {\tt princomp} to compute the scores for the rows and the columns of the data matrix. The first principal component is seen to be a size component, separating the smaller goblets on the right from the larger goblets on the left. The variable vectors are multiplied by a factor of 15 to facilitate interpretation. Next we calibrate the vector for $X_3$, using labelled tickmarks for multiples of 5 units, and shorter unlabelled tickmarks for the units. The goodness of fit of $X_3$ is very high (0.99), which means that $X_3$ is close to perfectly represented. {\tt Calibrate.X3} is a list object containing the numerical results of the calibration. <>= # PCA and Biplot construction pca.results <- princomp(X,cor=FALSE) Fp <- pca.results$scores Gs <- pca.results$loadings plot(Fp[,1],Fp[,2],pch=16,asp=1,xlab="PC 1",ylab="PC 2",cex=0.5) textxy(Fp[,1],Fp[,2],rownames(X),cex=0.75) arrows(0,0,15*Gs[,1],15*Gs[,2],length=0.1) textxy(15*Gs[,1],15*Gs[,2],colnames(X),cex=0.75) # Calibration of X_3 ticklab <- seq(5,30,by=5) ticklabc <- ticklab-mean(X[,3]) yc <- (X[,3]-mean(X[,3])) g <- Gs[3,1:2] Calibrate.X3 <- calibrate(g,yc,ticklabc,Fp[,1:2],ticklab,tl=0.5, axislab="X3",cex.axislab=0.75,where=1,labpos=4) ticklab <- seq(5,30,by=1) ticklabc <- ticklab-mean(X[,3]) Calibrate.X3.fine <- calibrate(g,yc,ticklabc,Fp[,1:2],ticklab,lm=FALSE,tl=0.25, verb=FALSE,cex.axislab=0.75,where=1,labpos=4) @ We do a PCA based on the correlation matrix, and proceed to construct a biplot of the correlation matrix. The correlations of $X_5$ with the other variables are computed, and the biplot axis for $X_5$ is calibrated with a correlation scale. Routine {\tt calibrate} is repeatedly called to create finer subscales. <>= # PCA and Biplot construction pca.results <- princomp(X,cor=TRUE) Fp <- pca.results$scores Ds <- diag(pca.results$sdev) Fs <- Fp%*%solve(Ds) Gs <- pca.results$loadings Gp <- Gs%*%Ds #plot(Fs[,1],Fs[,2],pch=16,asp=1,xlab="PC 1",ylab="PC 2",cex=0.5) #textxy(Fs[,1],Fs[,2],rownames(X)) plot(Gp[,1],Gp[,2],pch=16,cex=0.5,xlim=c(-1,1),ylim=c(-1,1),asp=1, xlab="1st principal axis",ylab="2nd principal axis") arrows(0,0,Gp[,1],Gp[,2],length=0.1) textxy(Gp[,1],Gp[,2],colnames(X),cex=0.75) ticklab <- c(seq(-1,-0.2,by=0.2),seq(0.2,1.0,by=0.2)) R <- cor(X) y <- R[,5] g <- Gp[5,1:2] Calibrate.X5 <- calibrate(g,y,ticklab,Gp[,1:2],ticklab,lm=TRUE,tl=0.05,dp=TRUE, labpos=2,cex.axislab=0.75,axislab="X_5") ticklab <- seq(-1,1,by=0.1) Calibrate.X5 <- calibrate(g,y,ticklab,Gp[,1:2],ticklab,lm=FALSE,tl=0.05,verb=FALSE) ticklab <- seq(-1,1,by=0.01) Calibrate.X5 <- calibrate(g,y,ticklab,Gp[,1:2],ticklab,lm=FALSE,tl=0.025,verb=FALSE) @ The goodness of fit of the representation of the correlations of $X_5$ with the other variables is 0.98, the 6 correlations being close to perfectly represented. We compute the sample correlation matrix and compare the observed correlations of $X_5$ with those estimated from the calibrated biplot axis ({\tt yt}). Note that PCA also tries to approximate the correlation of a variable with itself, and that the arrow on representing $X_5$ falls short of the value 1 on its own calibrated scale. The refined subscale allows very precise graphical representation of the correlations as estimated by the biplot. \begin{center} <>= print(R) print(cbind(R[,5],Calibrate.X5$yt)) @ \end{center} \subsection{Correspondence analysis} \label{sec:ca} We consider a contingency table of a sample of Dutch calves born in the late nineties, shown in Table~\ref{tab:calves2}. A total of 7257 calves were classified according to two categorical variables: the method of production (ET = Embryo Transfer, IVP = In Vitro Production, AI = Artificial Insemination) and the ease of delivery, scored on a scale from 1 (normal) to 6 (very heavy). The data in Table~\ref{tab:calves2} were provided by Holland Genetics. \begin{table}[htb] \centering \begin{tabular}{c|rrrr} & \multicolumn{3}{c}{Type of calf}\\ Ease of delivery & ET & IVP & AI\\ \hline 1 & 97 & 150 & 1686\\ 2 & 152 & 183 & 1339\\ 3 & 377 & 249 & 1209\\ 4 & 335 & 227 & 656\\ 5 & 42 & 136 & 277\\ 6 & 9 & 71 & 62\\ \hline \end{tabular} \caption{Calves data from Holland Genetics.} \label{tab:calves2} \end{table} For this contingency table we obtain $\chi^2_{10} = 833.16$ with $p < 0.001$ and the null hypothesis of no association between ease of delivery and type of calf has to be rejected. However, what is the precise nature of this association? Correspondence analysis can be used to gain insight in the nature of this association. We use routine {\tt corresp} form the {\tt MASS} library~\cite{Venables} to perform correspondence analysis and to obtain the coordinates for a biplot of the row profiles. We compute the row profiles and then repeatedly call the calibration routine, each time with a different set of {\tt ticklabs}. <>= library(MASS) data(calves) ca.results <- corresp(calves,nf=2) Fs <- ca.results$rscore Gs <- ca.results$cscore Ds <- diag(ca.results$cor) Fp <- Fs%*%Ds Gp <- Gs%*%Ds plot(Gs[,1],Gs[,2],pch=16,asp=1,cex=0.5,xlab="1st principal axis", ylab="2nd principal axis") textxy(Gs[,1],Gs[,2],colnames(calves),cex=0.75) points(Fp[,1],Fp[,2],pch=16,cex=0.5) textxy(Fp[,1],Fp[,2],rownames(calves),cex=0.75) origin() arrows(0,0,Gs[,1],Gs[,2]) P <- as.matrix(calves/sum(calves)) r <- apply(P,1,sum) k <- apply(P,2,sum) Dc <- diag(k) Dr <- diag(r) RP <- solve(Dr)%*%P print(RP) CRP <- RP - ones(nrow(RP), 1) %*% t(k) TCRP <- CRP%*%solve(Dc) y <- TCRP[,3] g <- Gs[3,1:2] ticklab <- c(0,seq(0,1,by=0.2)) ticklabs <- (ticklab - k[3])/k[3] Calibrate.AI <- calibrate(g,y,ticklabs,Fp[,1:2],ticklab,lm=TRUE,tl=0.10, weights=Dr,axislab="AI",labpos=4,dp=TRUE) ticklab <- c(0,seq(0,1,by=0.1)) ticklabs <- (ticklab - k[3])/k[3] Calibrate.AI <- calibrate(g,y,ticklabs,Fp[,1:2],ticklab,lm=FALSE,tl=0.10, weights=Dr,verb=FALSE) ticklab <- c(0,seq(0,1,by=0.01)) ticklabs <- (ticklab - k[3])/k[3] Calibrate.AI <- calibrate(g,y,ticklabs,Fp[,1:2],ticklab,lm=FALSE,tl=0.05, weights=Dr,verb=FALSE) @ Because the calibration is done by weighted least squares, a diagonal matrix of weights ({\tt weights=Dr}) is supplied as a parameter to the calibration routine Note that the calibrated axis for the row profiles with respect to AI has goodness of fit 1. This is due to the fact that the rank of the matrix of centred profiles is two, and that therefore all profiles can be perfectly represented in two dimensional space. \subsection{Canonical correlation analysis} \label{sec:cca} We consider a classical data set on the head sizes of the first and the second son of 25 families~\cite{Frets}. These data have been analysed by several authors~\cite{Anderson,Mardia,Graffel16} We first load the data and perform a canonical correlation analysis, using supplied function {\tt canocor} (a more fully fledged program for canonical correlation analysis in comparison with {\tt cancor} from the {\tt stats} package). <>= data(heads) X <- cbind(heads$X1,heads$X2) Y <- cbind(heads$Y1,heads$Y2) Rxy<- cor(X,Y) Ryx<- t(Rxy) Rxx<- cor(X) Ryy<- cor(Y) cca.results <-canocor(X,Y) plot(cca.results$Gs[,1],cca.results$Gs[,2],pch=16,asp=1,xlim=c(-1,1),ylim=c(-1,1), xlab=expression(V[1]),ylab=expression(V[2])) arrows(0,0,cca.results$Fp[,1],cca.results$Fp[,2],length=0.1) arrows(0,0,cca.results$Gs[,1],cca.results$Gs[,2],length=0.1) textxy(cca.results$Fp[1,1],cca.results$Fp[1,2],expression(X[1]),cex=0.75) textxy(cca.results$Fp[2,1],cca.results$Fp[2,2],expression(X[2]),cex=0.75) textxy(cca.results$Gs[1,1],cca.results$Gs[1,2],expression(Y[1]),cex=0.75) textxy(cca.results$Gs[2,1],cca.results$Gs[2,2],expression(Y[2]),cex=0.75) circle(1) ticklab <- seq(-1,1,by=0.2) y <- Rxy[,2] g <- cca.results$Gs[2,1:2] Cal.Cor.Y2 <- calibrate(g,y,ticklab,cca.results$Fp[,1:2],ticklab,lm=TRUE,tl=0.05, dp=TRUE,reverse=TRUE,weights=solve(Rxx), axislab="Y_2",cex.axislab=0.75,showlabel=FALSE) @ <>= plot(cca.results$Gs[,1],cca.results$Gs[,2],pch=16,asp=1,xlim=c(-2,2),ylim=c(-2,2), xlab=expression(V[1]),ylab=expression(V[2])) #arrows(0,0,cca.results$Fp[,1],cca.results$Fp[,2],length=0.1) #arrows(0,0,cca.results$Gs[,1],cca.results$Gs[,2],length=0.1) textxy(cca.results$Fp[1,1],cca.results$Fp[1,2],expression(X[1])) textxy(cca.results$Fp[2,1],cca.results$Fp[2,2],expression(X[2])) textxy(cca.results$Gs[1,1],cca.results$Gs[1,2],expression(Y[1])) textxy(cca.results$Gs[2,1],cca.results$Gs[2,2],expression(Y[2])) points(cca.results$V[,1],cca.results$V[,2],pch=16,cex=0.5) textxy(cca.results$V[,1],cca.results$V[,2],1:nrow(X),cex=0.75) ticklab <- seq(135,160,by=5) ticklabc <- ticklab-mean(Y[,2]) ticklabs <- (ticklab-mean(Y[,2]))/sqrt(var(Y[,2])) y <- (Y[,2]-mean(Y[,2]))/sqrt(var(Y[,2])) Fr <- cca.results$V[,1:2] g <- cca.results$Gs[2,1:2] #points(cca.results$V[,1],cca.results$V[,2],cex=0.5,pch=19,col="red") #textxy(cca.results$V[,1],cca.results$V[,2],rownames(Xn)) Cal.Data.Y2 <- calibrate(g,y,ticklabs,Fr,ticklab,lm=TRUE,tl=0.1,dp=TRUE, reverse=TRUE,verb=TRUE,axislab="Y_2", cex.axislab=0.75,showlabel=FALSE) #cca.results<-lm.gls(Rxy[,5]~-1+Fr,W=solve(Rxx)) @ We construct the biplot of the between-set correlation matrix (the joint plot of ${\bF}_p$ and ${\bG}_s$). Firstly we calibrate the biplot axis for $Y_2$ with a correlation scale. This calibration is done by generalised least squares with the inverse of the correlation matrix of the X-variables as a weight matrix ({\tt weights=solve(Rxx)}). Secondly, we calibrate the biplot axis for $Y_2$ with a scale for the original values. This second calibration has no weight matrix and is obtained by ordinary least squares. Both calibrations have a goodness of fit of 1 and allow perfect recovery of correlations and original data values. \subsection{Redundancy analysis} \label{sec:rda} Redundancy analysis can be seen as a constrained PCA. It allows two biplots, the biplot of the fitted values and a biplot of regression coefficients. Function {\tt rda} of the package provides a routine for redundancy analysis. We use Linnerud's data on physical exercise and body measurement variables~\cite{Tenenhaus} to illustrate calibrated biplots in redundancy analysis. <>= data(linnerud) X <- linnerud[,1:3] Y <- linnerud[,4:6] rda.results <- rda(X,Y) plot(rda.results$Fs[,1],rda.results$Fs[,2],pch=16,asp=1,xlim=c(-2,2),ylim=c(-2,2), cex=0.5,xlab="1st principal axis",ylab="2nd principal axis") arrows(0,0,2*rda.results$Gyp[,1],2*rda.results$Gyp[,2],length=0.1) textxy(rda.results$Fs[,1],rda.results$Fs[,2],rownames(X),cex=0.75) textxy(2*rda.results$Gyp[,1],2*rda.results$Gyp[,2],colnames(Y),cex=0.75) y <- rda.results$Yh[,3] g <- rda.results$Gyp[3,1:2] Fr <- rda.results$Fs[,1:2] ticklab <- c(seq(-0.6,-0.1,by=0.1),seq(0.1,0.6,by=0.1)) Calibrate.Yhat3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=TRUE,dp=TRUE,tl=0.1, axislab="Sauts",showlabel=FALSE) @ <>= plot(rda.results$Gxs[,1],rda.results$Gxs[,2],pch=16,asp=1,xlim=c(-2,2), ylim=c(-2,2),cex=0.5,xlab="1st principal axis", ylab="2nd principal axis") arrows(0,0,rda.results$Gxs[,1],rda.results$Gxs[,2],length=0.1) arrows(0,0,rda.results$Gyp[,1],rda.results$Gyp[,2],length=0.1) textxy(rda.results$Gxs[,1],rda.results$Gxs[,2],colnames(X),cex=0.75) textxy(rda.results$Gyp[,1],rda.results$Gyp[,2],colnames(Y),cex=0.75) y <- rda.results$B[,3] g <- rda.results$Gyp[3,1:2] Fr <- rda.results$Gxs[,1:2] ticklab <- seq(-0.4,0.4,0.2) W <-cor(X) Calibrate.Y3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=TRUE,dp=TRUE,tl=0.1, weights=W,axislab="Sauts",showlabel=FALSE) ticklab <- seq(-0.4,0.4,0.1) Calibrate.Y3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=FALSE,tl=0.05,verb=FALSE, weights=W) ticklab <- seq(-0.4,0.4,0.01) Calibrate.Y3 <- calibrate(g,y,ticklab,Fr,ticklab,lm=FALSE,tl=0.025,verb=FALSE, weights=W) @ The first biplot shown is a biplot of the fitted values (obtained from the regression of Y onto X). Vectors for the response variables are multiplied by a factor of 3 to increase readability. The fitted values of the regression of Sauts onto the body measurements have a goodness of fit of 0.9984 and can very well be recovered by projection onto the calibrated axis. The second biplot is a biplot of the matrix of regression coefficients. We calibrated the biplot axis for "Sauts", such that the regression coefficients of the explanory variables with respect to "Sauts" can be recovered. The goodness of fit for "Sauts" is over 0.99, which means that the regression coefficients are close to perfectly displayed. Note that the calibration for Sauts for the regression coefficients is done by GLS with weight matrix equal to the correlation matrix of the X variables ({\tt weights=W}). \section{Online documentation} \label{sec:online} Online documentation for the package can be obtained by typing {\tt vignette("CalibrationGuide"} or by accessing the file {\tt CalibrationGuide.pdf} in the {\tt doc} directory of the installed package. \section{Version history} Version 1.6:\\ \begin{itemize} \item Function {\tt rad2degree} and {\tt shiftvector} have been added. \item Function calibrate has changed. Argument {\tt shift} from previous versions is obsolete, and replaced by {\tt shiftdir, shiftfactor} and {\tt shiftvec}. \end{itemize} Version 1.7.2:\\ \begin{itemize} \item Function {\tt textxy} has been modified and improved. Arguments {\tt dcol} and {\tt cx} no longer work, and their role has been taken over by {\tt col} and {\tt cex}. A new argument {\tt offset} controls the distance between point and label. \end{itemize} \section*{Acknowledgements} This work was partially supported by the Spanish grant BEC2000-0983. I thank Holland Genetics ({\tt http://www.hg.nl/}), Janneke van Wagtendonk and Sander de Roos for making the calves data available. This document was generated by Sweave~\cite{Leisch}. \bibliographystyle{humanbio} \begin{thebibliography}{10} \bibitem[Anderson (1984)]{Anderson} Anderson, T. W. (1984) {A}n {I}ntroduction to {M}ultivariate {S}tatistical {A}nalysis John Wiley, Second edition, New York. \bibitem[Frets (1921)]{Frets} Frets, G. P. (1921) Heredity of head form in man, Genetica, 3, pp. 193-384. \bibitem[Gabriel, 1971]{Gabriel} Gabriel, K. R. (1971) The biplot graphic display of matrices with application to principal component analysis. Biometrika 58(3) pp. 453-467. \bibitem[Gower and Hand (1996)]{Gower4} Gower, J. C. and Hand, D. J. (1996) Biplots Chapman \& Hall, London. \bibitem[Graffelman (2005)]{Graffel16} Graffelman, J. (2005) Enriched biplots for canonical correlation analysis Journal of Applied Statistics 32(2) pp. 173-188. \bibitem[Graffelman and Aluja-Banet (2003)]{Graffel13} Graffelman, J. and Aluja-Banet, T. (2003) Optimal Representation of Supplementary Variables in Biplots from Principal Component Analysis and Correspondence Analysis Biometrical Journal, 45(4) pp. 491-509. \bibitem[Graffelman and van Eeuwijk (2005)]{Graffel17} Graffelman, J. and van Eeuwijk, F. A., (2005) Calibration of multivariate scatter plots for exploratory analysis of relations within and between sets of variables in genomic research, Biometrical Journal, 47, 6, 863-879. \bibitem[Leisch (2002)]{Leisch} Leisch, F. (2002) Sweave: Dynamic generation of statistical reports using literate data analysis Compstat 2002, Proceedings in Computational Statistics pp. 575-580, Physica Verlag, Heidelberg, ISBN 3-7908-1517-9 URL http:/www.ci.tuwien.ac.at/~leisch/Sweave. \bibitem[Manly (1989)]{Manly} Manly, B. F. J. (1989) Multivariate statistical methods: a primer Chapman and Hall, London. \bibitem[Mardia et al.(1979)]{Mardia} Mardia, K. V. and Kent, J. T. and Bibby, J. M. (1979) Multivariate Analysis Academic Press London. \bibitem[R Development Core Team (2004)]{RRR} R Development Core Team (2004) R: A language and environment forstatistical computing. R Foundation for Statistical Computing, Vienna, Austria, ISBN 3-900051-00-3, http://www.R-project.org. \bibitem[Tenenhaus (1998)]{Tenenhaus} Tenenhaus, M. (1998) La R\'{e}gression PLS Paris, \'Editions Technip. \bibitem[Venables and Ripley (2002)]{Venables} Venables, W. N. and Ripley, B. D. (2002) {M}odern {A}pplied {S}tatistics with {S}-{P}lus New York, Fourth edition, Springer. \end{thebibliography} \end{document} calibrate/MD50000644000176000001440000000352012213560775012550 0ustar ripleyusers44671a8fade2a53939ecfbbd23d0e80b *DESCRIPTION f4c3a89b0a423584934958144d60629d *NAMESPACE 92c4b9e372e384795e55b44dde66b0df *R/calibrate.R d29089cb6db670a9da6c62aa10f9c9b9 *R/canocor.R f010fe0dbfc45554ccbdb349eb3000a0 *R/circle.R b64da62d2f549501a556e3c5eae15904 *R/dlines.R afa03a1e580af939f82db7e117f12e63 *R/half.R 64dcadda820ecb14578fea99376eefa1 *R/mhalf.R a0f081cc71f9da04a8268e3f890bd131 *R/ones.R 3b3fc980be0859a385adab93db5b4c0b *R/origin.R 140e137806866cd825d7eba7caf92e02 *R/rad2degree.R 317ddceb7fa4b58394a2a27b3fb2bd54 *R/rda.R 5ea3adfb04c8deb61b33c08c4ccf2ad1 *R/shiftvector.R e9e222e963766157fa203bdb8893b44a *R/textxy.R f1bb16e6ec7c42f94217e03aa4cf8041 *data/calves.rda a7f950a2dc032bf42bfb71844c48b0f3 *data/goblets.rda 42bbaecdc84a7cd478609dec035ce980 *data/heads.rda 3bbb8680e32deb7e0343adefbd84e931 *data/linnerud.rda 7853c4419d06e40aeb506d476636e48f *data/storks.rda 85040338b77619c141db2636531dd1a3 *inst/doc/CalibrationGuide.R ddd8ece673041df6728243c93dae30f2 *inst/doc/CalibrationGuide.Rnw 64a550cf97b0cda90ad5515efdd1b886 *inst/doc/CalibrationGuide.pdf 24a4c36dbe44f734067ae38be21fb8e0 *man/calibrate.Rd 0908691b309ec6e5de94c2303c078225 *man/calves.Rd 1b64a664fff01decf17c7b3f1174609a *man/canocor.Rd dc0b8f20cb7811bfc3112a7a2c2ac8c1 *man/circle.Rd e44e58382308c0882e552759d4ea3b3e *man/dlines.Rd 660307f4e93682b29001fd9fc0d79089 *man/goblets.Rd d5f91be7b56eec8e0ad526a36c871d7f *man/heads.Rd e34e8979ed1ce76405fe3156d6903b7e *man/linnerud.Rd f106332b43b4e9218330fa790e6ba67f *man/ones.Rd 22c9b09911d48e09e429301481089ac0 *man/origin.Rd 8df0821fb8a396ffee5a895dad3e3a4c *man/rad2degree.Rd df46ed53135cca9da7a0e24ace44ca1b *man/rda.Rd 430fad46bf95b8884d885c21c7fa5999 *man/shiftvector.Rd 70b0962a116fb08c3297e34a1564de0b *man/storks.Rd 5a9e2c7e7590ebd5f43aa70cd386b174 *man/textxy.Rd ddd8ece673041df6728243c93dae30f2 *vignettes/CalibrationGuide.Rnw calibrate/DESCRIPTION0000644000176000001440000000077612213560775013760 0ustar ripleyusersPackage: calibrate Version: 1.7.2 Date: 2013-09-09 Title: Calibration of Scatterplot and Biplot Axes Author: Jan Graffelman Maintainer: Jan Graffelman Depends: R (>= 1.8.0), MASS Description: Package for drawing calibrated scales with tick marks on (non-orthogonal) variable vectors in scatterplots and biplots. License: GPL-2 Packaged: 2013-09-09 15:33:11 UTC; Beagle NeedsCompilation: no Repository: CRAN Date/Publication: 2013-09-10 11:10:21 calibrate/man/0000755000176000001440000000000012213365067013010 5ustar ripleyuserscalibrate/man/rda.Rd0000644000176000001440000000401212213365063014036 0ustar ripleyusers\name{rda} \alias{rda} \title{Redundancy analysis} \description{ \code{rda} performs redundancy analysis and stores extensive output in a list object. } \usage{ rda(X, Y, scaling = 1) } \arguments{ \item{X}{a matrix of x variables} \item{Y}{a matrix of y variables} \item{scaling}{scaling used for x and y variables. 0: x and y only centered. 1: x and y standardized} } \details{ Results are computed by doing a principal component analyis of the fitted values of the regression of y on x. Plotting the first two columns of Gxs and Gyp, or of Gxp and Gys provides a biplots of the matrix of regression coefficients. Plotting the first two columns of Fs and Gp or of Fp and Gs provides a biplot of the matrix of fitted values. } \value{ Returns a list with the following results \item{Yh}{ fitted values of the regression of y on x } \item{B}{ regression coefficients of the regresson of y on x } \item{decom}{ variance decomposition/goodness of fit of the fitted values AND of the regression coefficients } \item{Fs}{ biplot markers of the rows of Yh (standard coordinates) } \item{Fp}{ biplot markers of the rows of Yh (principal coordinates) } \item{Gys}{ biplot markers for the y variables (standard coordinates) } \item{Gyp}{ biplot markers for the y variables (principal coordinates) } \item{Gxs}{ biplot markers for the x variables (standard coordinates) } \item{Gxp}{ biplot markers for the x variables (principal coordinates) } } \references{ Van den Wollenberg, A.L. (1977) Redundancy Analysis, an alternative for canonical correlation analysis. Psychometrika 42(2): pp. 207-219. Ter Braak, C. J. F. and Looman, C. W. N. (1994) Biplots in Reduced-Rank Regression. Biometrical Journal 36(8): pp. 983-1003. } \author{ Jan Graffelman (jan.graffelman@upc.edu) } \seealso{\code{\link{princomp}},\code{\link{canocor}},\code{\link{biplot}}} \examples{ X <- matrix(rnorm(75),ncol=3) Y <- matrix(rnorm(75),ncol=3) rda.results <- rda(X,Y) } \keyword{multivariate} calibrate/man/canocor.Rd0000644000176000001440000000366712213365063014733 0ustar ripleyusers\name{canocor} \alias{canocor} \title{Canonical correlation analysis} \description{ \code{canocor} performs canonical correlation analysis on the basis of the standardized variables and stores extensive output in a list object. } \usage{ canocor(X, Y) } \arguments{ \item{X}{ a matrix containing the X variables } \item{Y}{ a matrix containing the Y variables } } \details{ \code{canocor} computes the solution by a singular value decomposition of the transformed between set correlation matrix. } \value{ Returns a list with the following results \item{ccor }{ the canonical correlations } \item{A }{ canonical weights of the x variables } \item{B }{ canonical weights of the y variables } \item{U }{ canonical x variates } \item{V }{ canonical y variates } \item{Fs }{ biplot markers for x variables (standard coordinates) } \item{Gs }{ biplot markers for y variables (standard coordinates) } \item{Fp }{ biplot markers for x variables (principal coordinates) } \item{Gp }{ biplot markers for y variables (principal coordinates) } \item{fitRxy }{ goodness of fit of the between-set correlation matrix } \item{fitXs }{ adequacy coefficients of x variables } \item{fitXp }{ redundancy coefficients of x variables } \item{fitYs }{ adequacy coefficients of y variables } \item{fitYp }{ redundancy coefficients of y variables} } \references{ Hotelling, H. (1935) The most predictable criterion. Journal of Educational Psychology (26) pp. 139-142. Hotelling, H. (1936) Relations between two sets of variates. Biometrika (28) pp. 321-377. Johnson, R. A. and Wichern, D. W. (2002) Applied Multivariate Statistical Analysis. New Jersey: Prentice Hall. } \author{ Jan Graffelman \email{jan.graffelman@upc.edu} } \seealso{\code{\link{cancor}}} \examples{ set.seed(123) X <- matrix(runif(75),ncol=3) Y <- matrix(runif(75),ncol=3) cca.results <- canocor(X,Y) } \keyword{multivariate} calibrate/man/dlines.Rd0000644000176000001440000000137312213365063014555 0ustar ripleyusers\name{dlines} \alias{dlines} \title{Connect two sets of points by lines} \description{ \code{dlines} connects two sets of points by lines in a rowwise manner. } \usage{ dlines(SetA, SetB, lin = "dotted") } %- maybe also 'usage' for other objects documented here. \arguments{ \item{SetA}{matrix with the first set of points} \item{SetB}{matrix with teh second set of points} \item{lin}{linestyle for the connecting lines} } \value{ NULL } \author{ Jan Graffelman (jan.graffelman@upc.edu) } \seealso{\code{\link{lines}}} \examples{ X <- matrix(runif(20),ncol=2) Y <- matrix(runif(20),ncol=2) plot(rbind(X,Y)) text(X[,1],X[,2],paste("X",1:10,sep="")) text(Y[,1],Y[,2],paste("Y",1:10,sep="")) dlines(X,Y) } \keyword{aplot} calibrate/man/origin.Rd0000644000176000001440000000075512213365063014571 0ustar ripleyusers\name{origin} \alias{origin} \title{Origin} \description{ Draws coordinate axes in a plot. } \usage{origin(m=c(0,0), ...)} \arguments{ \item{m}{ the coordinates of the means (2 x 1). } \item{\dots}{ other arguments passed on to the \code{lines} function} } \author{ Jan Graffelman (jan.graffelman@upc.edu) } \seealso{\code{\link{lines}}} \examples{ X <- matrix(runif(40),ncol=2) plot(X[,1],X[,2]) origin(m=c(mean(X[,1]),mean(X[,2]))) } \keyword{multivariate} calibrate/man/rad2degree.Rd0000644000176000001440000000067412213365063015306 0ustar ripleyusers\name{rad2degree} \alias{rad2degree} \title{ Convert radians to degrees. } \description{ \code{rad2degree converts radians to degrees.} } \usage{ rad2degree(x) } \arguments{ \item{x}{an angle in radians} } \value{ the angle with the positive x-axis in degrees. } \author{ Jan Graffelman (jan.graffelman@upc.edu) } \examples{ x <- pi/2 a <- rad2degree(x) cat("angle is",a,"degrees\n") } \keyword{arith} calibrate/man/shiftvector.Rd0000644000176000001440000000317412213365063015640 0ustar ripleyusers\name{shiftvector} \alias{shiftvector} \title{ Compute a shift vector for a calibrated axis. } \description{ \code{shiftvector} computes two shift vectors perpendicular to the supplied biplot or scatterplot axis \code{g}. The vector norm is computed from the two most extreme data points. } \usage{ shiftvector(g, X, x = c(1, 0), verbose = FALSE) } \arguments{ \item{g}{a biplot or scatterplot axis} \item{X}{a n by 2 matrix of scatterplot or biplot coordinates} \item{x}{reference axis, (1,0) by default} \item{verbose}{print information or not} } \details{ \code{shiftvector} locates the tow most extreme datapoints in the direction perpendicular to axis \code{g}. } \value{ \item{dr}{the right (w.r.t. the direction of \code{g}) shift vector} \item{dl}{the left (w.r.t. the direction of \code{g}) shift vector} } \references{ Graffelman, J. and van Eeuwijk, F.A. (2005) Calibration of multivariate scatter plots for exploratory analysis of relations within and between sets of variables in genomic research Biometrical Journal, 47(6) pp. 863-879. Graffelman, J. (2006) A guide to biplot calibration. } \author{ Jan Graffelman (jan.graffelman@upc.edu) } \seealso{\code{\link{calibrate}}} \examples{ X <- matrix(rnorm(100),ncol=2) Xs <- scale(X) g <- c(1,1) plot(Xs[,1],Xs[,2],asp=1,pch=19) textxy(Xs[,1],Xs[,2],1:nrow(X)) arrows(0,0,g[1],g[2]) text(g[1],g[2],"g",pos=1) out <- shiftvector(g,X,verbose=TRUE) dr <- out$dr dl <- out$dl arrows(0,0,dl[1],dl[2]) text(dl[1],dl[2],"dl",pos=1) arrows(0,0,dr[1],dr[2]) text(dr[1],dr[2],"dr",pos=1) } \keyword{multivariate} calibrate/man/ones.Rd0000644000176000001440000000077012213365063014243 0ustar ripleyusers\name{ones} \alias{ones} \title{Generates a matrix of ones} \description{ \code{ones} generates a matrix of ones. } \usage{ ones(n, p = n) } \arguments{ \item{n}{ number of rows } \item{p}{ number of columns } } \details{ if only n is specified, the resulting matrix will be square. } \value{ a matrix filled with ones. } \author{ Jan Graffelman (jan.graffelman@upc.edu) } \seealso{\code{\link{matrix}}} \examples{ Id <- ones(3) print(Id) } \keyword{multivariate} calibrate/man/textxy.Rd0000644000176000001440000000244112213365063014641 0ustar ripleyusers\name{textxy} \alias{textxy} \title{ Nice placement of labels in a plot} \description{ Function \code{textxy} calls function \code{text} in order to add text to points in a graph. \code{textxy} chooses a different position for the text depending on the quadrant. This tends to produces better readable plots, with labels fanning away from the origin. } \usage{ textxy(X, Y, labs, m = c(0, 0), cex = 0.5, offset = 0.8, ...) } \arguments{ \item{X}{x coordinates of a set of points} \item{Y}{y coordinates of a set of points} \item{labs}{labels to be placed next to the points} \item{m}{coordinates of the origin of the plot (default (0,0))} \item{cex}{character expansion factor} \item{offset}{controls the distance between the label and the point. A value of 0 will plot labels on top of the point. Larger values give larger separation between point and label. The default value is 0.8} \item{\dots}{additiona arguments for function \code{text}.} } \value{ NULL } \references{ Graffelman, J. (2006) A guide to biplot calibration. } \author{ Jan Graffelman (jan.graffelman@upc.edu) } \seealso{ \code{\link{text}} } \examples{ x <- rnorm(50) y <- rnorm(50) plot(x,y,asp=1) textxy(x,y,1:50,m=c(mean(x),mean(y))) } \keyword{aplot} \keyword{misc} calibrate/man/storks.Rd0000644000176000001440000000103412213365063014616 0ustar ripleyusers\name{storks} \docType{data} \alias{storks} \title{Frequencies of nesting storks in Denmark} \description{ Danish data from 1953-1977 giving the frequency of nesting storks, the human birth rate and the per capita electricity consumption. } \usage{data(storks)} \format{A data frame containing 25 observations.} \source{Gabriel and Odoroff, Table 1.} \references{ Gabriel, K. R. and Odoroff, C. L. (1990) Biplots in biomedical research. \emph{Statistics in Medicine} 9(5): pp. 469-485. } \keyword{datasets} calibrate/man/heads.Rd0000644000176000001440000000136612213365063014365 0ustar ripleyusers\name{heads} \docType{data} \alias{heads} \title{Dimensions of heads of first and second sons for 25 families} \description{ Variables X1 and X2 are the head length and head breadth of the first son and Y1 and Y2 are the same variables for the second son. } \usage{data(heads)} \format{A data frame containing 25 observations.} \source{Mardia, 1979, p. 121} \references{ Frets, G. P. (1921) \emph{Heredity of head form in man}, Genetica 3, pp. 193-384. Mardia, K. V. and Kent, J. T. and Bibby, J. M. (1979) \emph{Multivariate Analysis}. Academic Press London. Anderson, T. W. (1984) \emph{An Introduction to Multivariate Statistical Analysis}. New York: John Wiley, Second edition. } \keyword{datasets} calibrate/man/calves.Rd0000644000176000001440000000100312213365063014542 0ustar ripleyusers\name{calves} \docType{data} \alias{calves} \title{Delivery of Dutch Calves} \description{ This data set gives a cross classification of 7275 calves born in the late nineties according to type of production and type of delivery. } \usage{data(calves)} \format{A data frame containing a contingency table of 7275 observations.} \source{Holland Genetics. \url{http://www.hg.nl} } \references{ Graffelman, J. (2005) \emph{A guide to scatterplot and biplot calibration}. } \keyword{datasets}calibrate/man/linnerud.Rd0000644000176000001440000000103012213365063015105 0ustar ripleyusers\name{linnerud} \docType{data} \alias{linnerud} \title{Linnerud's exercise and body measurements} \description{ The data set consist of 3 exercise variables (Tractions a la barre fixe, Flexions, Sauts) and 3 body measurements (Poids, Tour de talle, Pouls) of 20 individuals. } \usage{data(linnerud)} \format{A data frame containing 20 observations.} \source{Tenenhaus, 1998, table 1, page 15} \references{ Tenenhaus, M. (1998) \emph{La Regression PLS}. Paris: Editions Technip. } \keyword{datasets} calibrate/man/goblets.Rd0000644000176000001440000000067012213365063014735 0ustar ripleyusers\name{goblets} \docType{data} \alias{goblets} \title{Size measurements of archeological goblets} \description{ This data set gives 6 different size measurements of 25 goblets } \usage{data(goblets)} \format{A data frame containing 25 observations.} \source{Manly, 1989} \references{ Manly, B. F. J. (1989) \emph{Multivariate statistical methods: a primer}. London: Chapman and Hall, London } \keyword{datasets} calibrate/man/circle.Rd0000644000176000001440000000073012213365063014534 0ustar ripleyusers\name{circle} \alias{circle} \title{Draw a circle} \description{ \code{circle} draws a circle in an existing plot. } \usage{ circle(radius,origin) } \arguments{ \item{radius}{ the radius of the circle } \item{origin}{ the origin of the circle } } \value{ NULL } \author{ Jan Graffelman \email{jan.graffelman@upc.edu} } \examples{ set.seed(123) X <- matrix(rnorm(20),ncol=2) plot(X[,1],X[,2]) circle(1,c(0,0)) } \keyword{aplot} calibrate/man/calibrate.Rd0000644000176000001440000001204212213365063015220 0ustar ripleyusers\name{calibrate} \alias{calibrate} \title{Calibration of Biplot and Scatterplot Axis} \description{Routine for the calibration of any axis (variable vector) in a biplot or a scatterplot} \usage{ calibrate(g,y,tm,Fr,tmlab=tm,tl=0.05,dt=TRUE,dp=FALSE, lm=TRUE,verb=TRUE,axislab="",reverse=FALSE, alpha=NULL,labpos=1,weights=diag(rep(1,length(y))), axiscol="blue",cex.axislab=0.75,graphics=TRUE,where=3, laboffset=c(0,0),m=matrix(c(0,0),nrow=1),markerpos=3, showlabel=TRUE,lwd=1,shiftvec=c(0,0),shiftdir="none",shiftfactor=1.05) } \arguments{ \item{g}{ the vector to be calibrated (2 x 1). } \item{y}{ the data vector corresponding to \code{g}, appropriately centred and/or standardized. } \item{tm}{ the vector of tick marks, appropiately centred and/or scaled. } \item{Fr}{ the coordinates of the rows markers in the biplot. } \item{tmlab}{ a list or vector of tick mark labels. } \item{tl}{ the tick length. By default, the tick markers have length 0.05.} \item{dt}{ draw ticks. By default, ticks markers are drawn. Set dt=F in order to compute calibration results without actually drawing the calibrated scale. } \item{dp}{ drop perpendiculars. With dp=T perpendicular lines will be drawn from the row markers specified by Fr onto the calibrated axis. This is a graphical aid to read off the values in the corresponding scale. } \item{lm}{ label markers. By default, all tick marks are labelled. Setting lm=F turns off the labelling of the tick marks. This allows for creating tick marks without labels. It is particularly useful for creating finer scales of tickmarks without labels.} \item{verb}{ verbose parameter (F=be quiet, T=show results). } \item{axislab}{ a label for the calibrated axis. } \item{reverse}{ puts the tick marks and tick mark labels on the other side of the axis. } \item{alpha}{ a value for the calibration factor. This parameter should only be specified if a calibration is required that is different from the one that is optimal for data recovery.} \item{labpos}{ position of the label for the calibrated axis (1,2,3 or 4). } \item{laboffset}{ offset vector for the axis label. If specified, shifts the label by the specified amounts with respect to the current position. } \item{weights}{ a matrix of weights (optional). } \item{axiscol}{ color of the calibrated axis. } \item{cex.axislab}{ character expansion factor for axis label and tick mark labels. } \item{graphics}{ do graphics or not (F=no graphical output, T=draws calibrated scale). } \item{where}{ label placement (1=beginning,2=middle,3=end). } \item{m}{ vector of means. } \item{markerpos}{ position specifier for the tick mark labels (1,2,3 or 4). } \item{showlabel}{ show axis label in graph (T) or not (F). } \item{lwd}{ line with for the calibrated axis } \item{shiftvec}{ a shift vector for the calibrated axis ((0,0) by default) } \item{shiftdir}{ indicates in which direction the axis should be shifted ("left","right" or "none"). This direction is w.r.t. vector \code{g}} \item{shiftfactor}{ scalar by which the shift vector is stretched (or shrunken). By default, the length of the shift vector is stretched by 5 percent (\code{shiftfactor} = 1.05)} } \details{ This program calibrates variable vectors in biplots and scatterplots, by drawing tick marks along a given the vector and labelling the tick marks with specified values. The optimal calibration is found by (generalized) least squares. Non-optimal calibrations are possible by specifying a calibration factor (alpha). } \value{ Returns a list with calibration results \item{useralpha}{calibration factor specified by the user} \item{optalpha}{optimal calibration factor} \item{lengthoneunit}{length in the plot of one unit in the scale of the calibrated variable} \item{gof}{goodness of fit (as in regression)} \item{gos}{goodness of scale} \item{M}{coordinates of the tick markers} \item{ang}{angle in degrees of the biplot axis with the positive x-axis} \item{shiftvec}{the supplied or computed shift vector} \item{yt}{fitted values for the variable according to the calibration} \item{e}{errors according to the calibration} \item{Fpr}{coordinates of the projections of the row markers onto the calibrated axis} \item{Mn}{coordinates of the tick marker end points} } \references{ Gower, J.C. and Hand, D.J., (1996) Biplots. Chapman & Hall, London Graffelman, J. and van Eeuwijk, F.A. (2005) Calibration of multivariate scatter plots for exploratory analysis of relations within and between sets of variables in genomic research Biometrical Journal, 47(6) pp. 863-879. Graffelman, J. (2006) A guide to biplot calibration. } \author{ Jan Graffelman \email{jan.graffelman@upc.edu} } \seealso{\code{\link{biplot}}} \examples{ x <- rnorm(20,1) y <- rnorm(20,1) x <- x - mean(x) y <- y - mean(y) z <- x + y b <- c(1,1) plot(x,y,asp=1,pch=19) tm<-seq(-2,2,by=0.5) Calibrate.z <- calibrate(b,z,tm,cbind(x,y),axislab="Z",graphics=TRUE) } \keyword{multivariate}