calibrate/0000755000176200001440000000000013544704152012205 5ustar liggesuserscalibrate/NAMESPACE0000644000176200001440000000034113544667067013437 0ustar liggesusersexport (calibrate,canocor,circle,dlines,origin,ones,PrinCoor,rad2degree,rda,shiftvector,textxy) import (MASS) importFrom("graphics", "lines", "par", "points", "text") importFrom("stats", "cor", "dist", "princomp", "var") calibrate/data/0000755000176200001440000000000013544673504013124 5ustar liggesuserscalibrate/data/goblets.rda0000644000176200001440000000055113544700072015243 0ustar liggesusers]RN@-Z(T\| |*oIL&}8;gg2!d.tojLg]1aG w@\ 3A$Қ>c9@5c+5UZj:RTЮ/:qzKP7, eDtzc-;rNդV,U SZГ;~w !QZy74+L^X$l#l^ο+=Flˣ-O<\ecgQeo/{{~+l'l/L4hD#FشO~j| fͭY}^⡢G\J~\calibrate/data/calves.rda0000644000176200001440000000026313544700072015061 0ustar liggesusers r0b```b`@ H0@-91,( q"*b [ A*v ď݁Y1G(nf sJf.;$$/1a:Z>z  ߱za*B\4 J(`88WSG?Ѻ'kģ޽xl;Io׾]I~gI=/om:l]NM֭g»; `xC"]y.{ m]78nGt/ *rdZ |02`jDZt175hUVڏ,u=N7FFtj+D`5  J&5Li8mC\]2.\pRɥI\r=a\zø|=calibrate/data/spaindist.rda0000644000176200001440000001144313544673357015623 0ustar liggesusers획]UuK b)Bjjbjd )u8IofX@T)֐T@Q#V@@[Zkw*TVUR𓂍}sy9w~׻޵ά~Y/RIev,ك,}ҔZY&<m2Y~S)u=/R\j|O u~W{j6WOQ+jt==_mK>wu\Fkj||Q3g^F<~YjQ]&Wy//x-3km35U{:8oVL-FWt5^~-G7oQcmSy>^m|5D~c٬XrU/jLmw[=,j06VZ ELTK:V3_-ͧj{<ǖF;uMoΩX;O?o {*_n%lNsϪi]n#{/<^1?5sxU\,{>8`??C{Ya:<Վҹ:V!_xyW ߲A! ]#S~rܤq3 ;#Ԙs'>^s\࣑ZB'=wgʛp1ҽR`7 YR0?3QgK8jӤ.ڳֱ5Z[y9Cr ~zZEA<``brYޏ\ۈ˻̏|ɇ_VX>kjV\g <;2/?o5j!bȩt^?4dyF͊Iuo'2s{V|Fͯm'w{ćF8l)\ۇ įk+?؟Gq8=ɢ0]:2߷:MqȆ?پg^-LyT'Tc^"&{׀~Cį?/?؟:?ICf7nR(蟖R8K o3 $)Ff?]ؒk9&<~*}XbNO'?눸uomG3)9 |rۨlaPt=Lʷ7N=^߈u/=?.1g2ﴘVTo歖+ߩ#7aN m0nKR +>NBŬuxk#=x}*'1~yK ?ϑ~`|?|̛EdsiK"xH:Z5ؿBwu>qxO*f4 [|MDa΃/?\Y.朅Ӥ"rm_O@mjuoWr.,[-zCNWs=Zͪ Op\~}.3.1Pvwu.~:EbOx4 ?=}kd'giC4M蟽5O'w[~yjƤC$j-z.öKZS m~:~Qۺ'*~zp~Ԁ }L>~7^?>C> _h q,[%/q~ ?rQ?㹞kbeoiI'%wɫ*޽} sGWQЫ6nɿ"#FwcA?DսKz2#1'tt~*=yԟY!Z?á.$ />AF.zm? ࿁˽ƚ]ɹ(:p_#<}Ec,&WԟgCԯlpODc发Qs ~LIB?wෳݞc}!j癏A|ːG">,`K߇\~g3ԯsy9r‹./? ;==^heOĠϩ( {sEUj0Ea}kP /&In,nۭyry8JbU_]O'_%=},Zr {{VS ߢ~h?4G>nCKO0ws{mON_>+NH:{2BO|3_q9g_EgWpu' XN60 0'QyKY{~ BWyl~?]{q4jh.9BP><~ FT^Y/Xg'G۹o0BKSa9eIj/8o?ߩmZo%o*'Ç?{n]A~exQ?O">w"~goHc̽߈gU׷ q3\Xڍw|oukzXR?+|C)`&tc_y=:[ćTĚ+{? u<韃f7uX/LvfC^ئNw==ѱΜƉm|MOߟ|TOzSݑ-ӿ[hoΘFN WwcOt'6f2̋:CފNwfRsVtw.X1X{c{ޖXڝYVvz3RF :gĈ^9{pjgzr7PԳvƷtzQjigߴWMh v{FoԞʂ5'lG3όOLJ;uLlE]~ogƼn=ҷk;]ٱכ'Ocቱa}M=ͫCc-8=>u]aY;q_3 ALz7*calibrate/data/heads.rda0000644000176200001440000000055413544700072014673 0ustar liggesusers];KCA&0 Vy b"> D1FxUTDBBh/=;3g.d)i[X1,ΣGAnL|eHw܀o|;滠>5k|gZ:m`8!1؍:{M @l #^/^/[/2 {ﲮ)g[:j6ي -rn7w!u?s)X3gc%_UX?2 &+Jj:b O\)i՟T:QUSWUPUTV=zXa8~!ncalibrate/data/linnerud.rda0000644000176200001440000000064713544700072015432 0ustar liggesusers]JA77Iba+F%\ !Uidu>BK-m|AA'3.)̜93{ؽjӈ7㚦CA 1Qv]5-4x L$x\+܀+'n,DҌ;ȺbWk*b.uGkZX.DVϴO;2!Vr!Zs/^wcvr16{~M#1sߚF +ŐRRRRA f3ʲ e9eyeeEe%eee#G .calibrate/man/0000755000176200001440000000000013544700072012755 5ustar liggesuserscalibrate/man/rda.Rd0000644000176200001440000000401210363737516014020 0ustar liggesusers\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/dlines.Rd0000644000176200001440000000137310364176376014541 0ustar liggesusers\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/rad2degree.Rd0000644000176200001440000000067411306223526015255 0ustar liggesusers\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/calves.Rd0000644000176200001440000000100310364201664014513 0ustar liggesusers\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/heads.Rd0000644000176200001440000000136610362676156014350 0ustar liggesusers\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/canocor.Rd0000644000176200001440000000366710364201722014677 0ustar liggesusers\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/origin.Rd0000644000176200001440000000075511341764046014546 0ustar liggesusers\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/shiftvector.Rd0000644000176200001440000000317411306250154015604 0ustar liggesusers\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.Rd0000644000176200001440000000077010364173462014220 0ustar liggesusers\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/linnerud.Rd0000644000176200001440000000103010705433612015055 0ustar liggesusers\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/textxy.Rd0000644000176200001440000000244112213360266014611 0ustar liggesusers\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/spaindist.Rd0000644000176200001440000000066613544671672015267 0ustar liggesusers\name{spaindist} \docType{data} \alias{spaindist} \title{Road distances between Spanish cities} \description{ Road distances in kilometers between 47 Spanish cities } \usage{data(spaindist)} \format{A data frame containing 47 observations.} \references{ Graffelman, J. (2019) Goodness-of-fit filtering in classical metric multidimensional scaling with large datasets. } \keyword{datasets} calibrate/man/goblets.Rd0000644000176200001440000000067010362676116014714 0ustar liggesusers\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.Rd0000644000176200001440000000073011461526134014506 0ustar liggesusers\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/PrinCoor.Rd0000644000176200001440000000364313544671753015022 0ustar liggesusers\name{PrinCoor} \alias{PrinCoor} \title{Function for Principal Coordinate Analysis } \description{ Function \code{PrinCoor} implements Principal Coordinate Analysis, also known as classical metric multidimensional scaling or classical scaling. In comparison with other software, it offers refined statistics for goodness-of-fit at the level of individual observations and pairs of observartions. } \usage{ PrinCoor(Dis, eps = 1e-10) } \arguments{ \item{Dis}{A distance matrix or dissimilarity matrix} \item{eps}{A tolerance criterion for deciding if eigenvalues are zero or not} } \details{ Calculations are based on the spectral decomposition of the scalar product matrix B, derived from the distance matrix. } \value{ \item{X}{The coordinates of the the solution} \item{la}{The eigenvalues of the solution} \item{B}{The scalar product matrix} \item{standard.decom}{Standard overall goodness-of-fit table using all eigenvalues} \item{positive.decom}{Overall goodness-of-fit table using only positive eigenvalues} \item{absolute.decom}{Overall goodness-of-fit table using absolute values of eigenvalues} \item{squared.decom}{Overall goodness-of-fit table using squared eigenvalues} \item{RowStats}{Detailed goodness-of-fit statistics for each row} \item{PairStats}{Detailed goodness-of-fit statistics for each pair} } \references{ Graffelman, J. (2019) Goodness-of-fit filtering in classical metric multidimensional scaling with large datasets. 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. } \author{ Jan Graffelman \email{jan.graffelman@upc.edu} } \seealso{\code{\link{princomp}}} \examples{ data(spaindist) results <- PrinCoor(as.matrix(spaindist)) } \keyword{multivariate} calibrate/man/storks.Rd0000644000176200001440000000103410362674026014573 0ustar liggesusers\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/calibrate.Rd0000644000176200001440000001204211334544344015174 0ustar liggesusers\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} calibrate/DESCRIPTION0000644000176200001440000000114113544704152013710 0ustar liggesusersPackage: calibrate Version: 1.7.5 Date: 2019-10-01 Title: Calibration of Scatterplot and Biplot Axes Author: Jan Graffelman Maintainer: Jan Graffelman Depends: R (>= 3.5.0), MASS Description: Package for drawing calibrated scales with tick marks on (non-orthogonal) variable vectors in scatterplots and biplots. Also provides some functions for multivariate analysis such principal coordinate analysis. License: GPL-2 NeedsCompilation: no Packaged: 2019-10-01 16:35:06 UTC; jangr Repository: CRAN Date/Publication: 2019-10-01 17:10:02 UTC calibrate/build/0000755000176200001440000000000013544700072013301 5ustar liggesuserscalibrate/build/vignette.rds0000644000176200001440000000041513544700072015640 0ustar liggesusersMN0 QUYA SiGuc˞qrCJf}~c,eyyH!П4qReD=/q\pSZmC-@\W/}*bnG ?DG=9Y;G>= 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/R/0000755000176200001440000000000013544666270012416 5ustar liggesuserscalibrate/R/rda.R0000644000176200001440000000430210364201146013266 0ustar liggesusers"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/R/circle.R0000644000176200001440000000033512225777050013775 0ustar liggesusers"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") } calibrate/R/calibrate.R0000644000176200001440000001162711306315670014463 0ustar liggesuserscalibrate <- 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/shiftvector.R0000644000176200001440000000253111306310736015065 0ustar liggesusersshiftvector <- 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/canocor.R0000644000176200001440000000256010364201014014142 0ustar liggesusers"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.R0000644000176200001440000000017510705433642013622 0ustar liggesusers"mhalf" <- function(A) { d <- diag(eigen(A)$values) v <- eigen(A)$vectors Ah <- v%*%solve(sqrt(d))%*%t(v) } calibrate/R/origin.R0000644000176200001440000000033611341763610014017 0ustar liggesusers"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/half.R0000644000176200001440000000016510353317176013446 0ustar liggesusers"half" <- function(A) { d <- diag(eigen(A)$values) v <- eigen(A)$vectors Ah <- v%*%sqrt(d)%*%t(v) } calibrate/R/textxy.R0000644000176200001440000000154112213357632014076 0ustar liggesusers"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/ones.R0000644000176200001440000000011010173303604013455 0ustar liggesusers"ones" <- function(n,p=n) { matrix(rep(1,n*p),nrow=n,ncol=p) } calibrate/R/PrinCoor.R0000644000176200001440000000731513417167334014276 0ustar liggesusersPrinCoor <- function(Dis, eps = 1e-10) { n <- nrow(Dis) A <- -0.5 * (Dis * Dis) n <- nrow(Dis) I <- diag(rep(1, n)) H <- I - (1/n) * ones(n, 1) %*% ones(1, n) B <- H %*% A %*% H Out <- eigen(B) Dl <- diag(Out$values) la <- diag(Dl) la2 <- la*la k <- sum(la > eps) lar <- round(la,digits=10) npos <- sum(lar>0) nneg <- sum(lar<0) nzer <- sum(lar==0) cat("There are",npos,"positive, ",nneg,"negative, ",nzer,"zero eigenvalues\n") noverlargestnegative <- sum(la >= abs(la[n])) cat("There are",noverlargestnegative, "positive eigenvalues exceeding the largest negative\n") Dk <- Dl[1:k, 1:k] V <- Out$vectors Vk <- V[, 1:k] if (k == 1) { X <- Vk * sqrt(Dk) X <- matrix(X, ncol = 1) } else X <- Vk %*% sqrt(Dk) rownames(X) <- rownames(Dis) Y <- V%*%Dl rownames(Y) <- rownames(Dis) Qd <- X*X Qb <- Y*Y # # Overall goodness-of-fit # # # standard # total <- sum(la) fr <- la/total cu <- cumsum(fr) standard.decom <- cbind(la, fr, cu) colnames(standard.decom) <- c("Lambda","Fraction","Cumulative") # # positive only # indpos <- la > 0 posev <- la[indpos] posfr <- posev/sum(posev) poscu <- cumsum(posfr) positive.decom <- cbind(posev, posfr, poscu) colnames(positive.decom) <- c("Lambda","Fraction","Cumulative") # # absolute values # absev <- abs(la) absfr <- absev/sum(absev) abscu <- cumsum(absfr) absolute.decom <- cbind(absev, absfr, abscu) colnames(absolute.decom) <- c("Lambda","Fraction","Cumulative") # # squared eigenvalues # squaredfr <- la2/sum(la2) squaredcu <- cumsum(squaredfr) squared.decom <- cbind(la2, squaredfr, squaredcu) colnames(squared.decom) <- c("Lambda-squared","Fraction","Cumulative") # # point and pairwise goodness of fit calculations; Euclidean case # w_i <- rowSums(Qd) g_i <- (Qd[,1]+Qd[,2])/w_i # equation 9 D2 <- as.matrix(dist(X[, 1:2])) diag(D2) <- 1 Dcopy <- Dis diag(Dcopy) <- 1 g_ij <- D2/Dcopy # equation 11 # # Euclidean subspace # wl_i <- rowSums(Qd[,1:noverlargestnegative]) gl_i <- rowSums(Qd[,1:2])/wl_i # equation 12 Dell <- as.matrix(dist(X[, 1:noverlargestnegative])) diag(Dell) <- 1 gl_ij <- D2/Dell # equation 13 w.squared_i <- rowSums(Qb) gb_i <- rowSums(Qb[,1:2])/w.squared_i # equation 17 # # Error statistics # Er <- Dis-D2 Er2 <- Er*Er total.ess <- sum(Er2[lower.tri(Er2)]) gt_ij <- Er2/total.ess # equation 18 gt_i <- apply(Er2,1,sum) toti <- sum(gt_i) gt_i <- gt_i/toti rn <- rownames(Dis) npairs <- 0.5*n*(n-1) PairStats <- matrix(NA,nrow=npairs,ncol=6) PairStats <- data.frame(PairStats) counter <- 1 for(i in 2:n) { for(j in 1:(i-1)) { PairStats[counter,1] <- rn[i] PairStats[counter,2] <- rn[j] PairStats[counter,3] <- g_ij[i,j] # 11 PairStats[counter,4] <- gl_ij[i,j] # 13 PairStats[counter,5] <- Er2[i,j] # 18 counter <- counter + 1 } } tess <- sum(PairStats[,5]) # total error sum-of-squares e.contr.pair <- PairStats[,5]/tess PairStats[,6] <- e.contr.pair colnames(PairStats) <- c("ID1","ID2","g_ij","gl_ij", "err2","contr_err") RowStats <- data.frame(g_i,gl_i,gb_i,gt_i) return(list(X = X, la = la, B = B, standard.decom = standard.decom, positive.decom = positive.decom, absolute.decom = absolute.decom, squared.decom = squared.decom, RowStats = RowStats, PairStats = PairStats)) } calibrate/R/dlines.R0000644000176200001440000000046410364201106013777 0ustar liggesusers"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/rad2degree.R0000644000176200001440000000010511306222664014526 0ustar liggesusersrad2degree <- function(x) { ang <- x*180/pi return(ang) } calibrate/MD50000644000176200001440000000411613544704152012517 0ustar liggesusers234bdadef2b7b71936cfdce147cc9517 *DESCRIPTION c6f2b5265189e7fd13eb4dd98c48f998 *NAMESPACE 34673f8f2646cf656e2c1c564ea2261f *R/PrinCoor.R 92c4b9e372e384795e55b44dde66b0df *R/calibrate.R d29089cb6db670a9da6c62aa10f9c9b9 *R/canocor.R e8fd9eaa7b8f04b5b4ff53822f7c7e94 *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 a38aefa5c916748c4c9945b54051f632 *build/vignette.rds 8b9f295e680b197922e27e2e1cc04491 *data/calves.rda e3188232e205c40c2260dccec2140f0a *data/goblets.rda af1e5c49defadb6ee2eb2f3c9291d895 *data/heads.rda 0989b01101751b1b4e21a6856d735b9c *data/linnerud.rda 746422ef45cf53983d88a9d8fd392b65 *data/spaindist.rda 749b44889ac722733deaedb3b3f9c1c4 *data/storks.rda d35a81d26f79d43cbdab533aa4042b0b *inst/doc/CalibrationGuide.R f14424e79841138905dfa134da392980 *inst/doc/CalibrationGuide.Rnw 17be825440a275583a0096f0b2bb790b *inst/doc/CalibrationGuide.pdf 483ee1f73dac7235f7577fe5b712e757 *man/PrinCoor.Rd 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 5c8dc1353412b2321abc742769ab93df *man/spaindist.Rd 70b0962a116fb08c3297e34a1564de0b *man/storks.Rd 5a9e2c7e7590ebd5f43aa70cd386b174 *man/textxy.Rd f14424e79841138905dfa134da392980 *vignettes/CalibrationGuide.Rnw calibrate/inst/0000755000176200001440000000000013544700065013161 5ustar liggesuserscalibrate/inst/doc/0000755000176200001440000000000013544700072013724 5ustar liggesuserscalibrate/inst/doc/CalibrationGuide.R0000644000176200001440000003321213544700072017255 0ustar liggesusers### R code from vignette source 'CalibrationGuide.Rnw' ################################################### ### 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.pdf0000644000176200001440000105617113544704152017642 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3687 /Filter /FlateDecode /N 76 /First 604 >> stream x[[s~طJ1~t2cKڲ]I4~HHBB N~} E%Lk ,ΞwbaLF 0ˌ1 ̻ҲȤp Jz&%0i%sIdD)p!2<=dLYe)AJ1j"uB+A7iiAVD4>0m#ӎX"Jǽb:@k ;#bf{f_!kq؀F2@o@N6YUxFf5c"~1&(3`\z(a(@5 g-s~ 13HH`^/6"6 3d)N(5Ar> 8Ђ ("Rz8S2$ aVzz6hBQOOQ3a;Ȩu ҏ?**?hTCy,?ulF[(,Bo1i5MǽjBfb|g^T>g?@Ѹ_[2nHn^0~Lz 9@D'"&"PE(B{6l 3u7`,3w0}&WJndma4E!H"EH2p *¯ ؠ W(Z;T|!܃]4+U]0J1*i-UOQU.j(t1c( C&5 j*cgU3P| v–ؕ IM/#nwqP@5BQ"@!hޝ nkiysh|%_ַ?ߩrݣĬة5i1bSHL[H8?t (̮LZg:¼orp(?ǓӬʉ䰚]3!Uh0E.T#L}on&ؠkO޽?{1wc*܋ ?~=.d[-6>{ë7/ x # q/ߝ{C$ܪuzMNx DmXK/ d.FSXY'4SB3Ku|ٮ%\]9Nfܓ҅L۞Dw !E4<ɗ6N`?*2=yTnd;;n{; Q @P|p)^5v=p}dͪޜ#բy|UI.cvس\Avd򓓲IB`f\'v-̎¤ڪoB ȶ}v aQv-}ObjH!l[tNBFt(+|ۆض m3E2U)r۶dc(,sC\AG2:Q@\!9Xu :"%AtdL$5LODR &(]hzeFv\flhgEUsع*MZ|,۪MK~G^l2fZBLx0Q:A!6Hħ$JtT*$d42 J%_" N@:s:*QwQZ ʉ\ZeQ3S3!_#m%,;CXyOm9u0l76_4*_S(Y" TW#%ԨustۿMS"EΡy7 t < %Zc*T@G/(Blt陷L1+. T[bL:O^STrIUb #8z΄j1Z@S6FsLC2}j  X j"~G \>2QziN$ҶN&SOйoEcQDŽ)dʩNxbW]3Phu{,ȺP3Tm;DRo>Βa>Պ;v"XLaO|r_rϥ-SB 0tĬFԻSц.Sg N Hi6 _6K̢S r vVkՒ_.R쾖qjc9JF3TlLT&ݛEnӶ;% clPhfiiUЧM.YHcoSuw4UgZ[WZ!921&C,en]XĊtѵiZoZuwKKQ4nNKzmϲunےm\4Bw/%3mPO/%>V_^c>c5 >*<$hP^OYd?=QT3Uv}T*rg)Г+M9{Oנ3Ѧ4w^FT;m?p1;&|?V] &\tWQ}UqU>?_&a*u5굕 6{Mį5)M{ےdᇭժň0aaڕO^~\-dn!6̋?91%/{Ӧ-<2)}r\~Au̮$ 8aI\ҁWLA7 /k$*˃Jd,XweZMU4.FMտdt/u>Hߪh;1 J6>xri[*ne=CʥcFItL8{#'nA8&??`PQ)tQ'x"3pz{䪯{Fy:+e|O}H+Pf;ol]t+Xc]NODX>Wyj`.i3eWTFSQ":WR K8޺L5 ;!dZ z5+_^|= R2LnvԱWm[;5_C>YYb&\:;G㪙u! ,>UclkZޚ#lunO>gB񟍏_ߔO3@ ?~UoUKDg}fO -Q{7@.\hδ9KB{<.اaHjLy9endstream endobj 78 0 obj << /Filter /FlateDecode /Length 2906 >> stream xڥYKoHW4~5{`1{@D~lJb9"Uu_^]^gSWUWeVW_ɋڕyneӶ'~j?_?t#TI[|,O$>ʁF}hG&nZú~CBL?c߈ڕ- |¦B;LZe:> Ffw F,IlG2͎uAj*#Ԋm{e# $m΀udF/jl&06o%3#0S3ۄF݇iWK:No;^̀D60 B=:%HZ\9: zUosS fGt/z lXHN ;LImUTRia\+L+^_:/Һr ] 瓗"_6IlD}֭_elC|}K( AXn8wi^ 1>!\)=)]{BB ͏`۩(=SR,Hx%MH4Cˆ߃o%iol z = a )F0^U{Uv(#ό2Q4ӺP ؁H)#@BTR99u\ ,eR,0O}\%KňGscZ*U#AN-s7U+Niȡy H5'bSt <`JU*9N{(~ՒLoq zC>so)4J2!0 _xɓ%3V9Ds0#9*lţOx? g2XI q iraOeԁ|D\8Փ@h ćAϮ9Hl@xQ/W<*VQErG9 FIjW9=ԑxC񤢞Q@YElx쁐6 AI>xSaJcۚ$SuKJcT,{zPDׅ_K)T17('mMyEstp $1<, pbQ nK'>geȩD)፤I*Zֵ$  ֪VCԇ |^Bזp bQH-z51hQk_C{ FWV>}r=_>ֵ9p$b\a|yhaIyl|*ُRZKL0jCU;ه\4_\[B"wX30r5$|3LU<& ܨכHi;&QSo@g2ޕ,'t"90!1E69UHݻ(}c#/ɧN!h#6B@]&L9зQFPDrv%K[wW+OE֓?售\! o:fY_vfW!xr&#LNtGmx>VqbdPb?92)syY(PO :rXSá3ex*PYDĬf[[\eNxOτy,:b*G4a483s7kg\d@9H^ |WθZRAWx"۽FţZ@z /BF QZGP@B5|xlQpި^~) eCap  DcA$# p'9% Yu~n)GUu9LWX,}T|X3媩c ıhsbD 6 lF2)} ;q!\ZmބG99)c^Ӽ(Y,"8ZN'|H&mVK8/[aU%X  ŗ7=/TƯ,~BO%8j^Tɿ˸u{U]e/~FI,Q@,RJ&z5eF-PY{c2]沓/YO('eh[Zy '{USkyғ-T9)*RVe\tq?,慎I+H|Fk]Rn]5ymelBw`Y"S6$pQ\Bfq+S԰80p4 endstream endobj 79 0 obj << /Type /ObjStm /Length 2348 /Filter /FlateDecode /N 76 /First 647 >> stream xYYs~ϯGRWjk$jV,.Iu6%l$PEB_g̓kz{A0dG1- i%Y0̘e;sJ KBddsl`QaY,Z 8~3)54 M@'#X -'F :KĸpDfE3)R)*DT3Q,ɒ)P:| m=SA8G5ed:P$^I$.I$BY&+ӎ*ϴw4=0M$t$-Ōt4Q8X)@Ҟh(0ʙ@`"a9zŬ @BiXAK`Ad"KA #s@rV2dAKOk!˼W/?ɤiYB`` Ñ5Pjv04^/?v0'3/ WէPNF+Z`<-Y?|꧿/m9EdCxZ?irTVD$~PAy7n(V|V&5z\9]8Ԏ҅4@2G8<],}+sg+g6@uQ-w%s;Q8sL>Ve[O㲭س)J&ꍶt0.r>Jv8B|3}xlwoÇ㺹y_3ݗǪ%2a3\]KG,OG#bz*9_氙 qC5q5zyם9iD21C3,%Ȩ7h}j%Kjd? hV5Xyu]GOF.lE 1p}SME5Lt ,^^@] 1E9Rg]$9-m?6ͤ]ߒ:ۣKR5'.2]&Ͷ]ڷZp>xݫi$v{q~}SoM8=ӣImN4u]E3[qVճJtD\aqW N2Q3pvF5 'C[*FO(ۻ QD{,40O8ʚX ]ƟN:BԔ%ݰ#n]yIUC䶕H[@~tz\=`&2Y_S pΝaIvN*G!G "e&~c /C!+M lB1t7R,rrH!RskHΆPDf.ZXYU|j+?1+,H GadAzxL+FX`,࠙ ,&;2Ew2`NJ$d21[(?4g4'I :ީdma3 @(3h\ i:|ageI -IϊGWKiInZ鴧'iBxI3>t)/[D/-?pN֢ѮXt^th_@U ]/QmOn O" Qh'޾AЂB x/ 3g uz#I1diŲ}&E F"TjiJ%,3;h \}ǛKnbcX2xZ h],;>͘S~H /ƲϜHgc]4/涥̒>Ug5ǼMT|'xNyLMj+of,uX >{ t~-asr^/XaE R>e\|6$M<9mjИlNڜC~G_K^J'%ƊyLˏ5{`C5'XUO]C}}f_ v-faRmP}@%#VjwG;! DbDu :·P">uZ 3D` CL \(?L0N[endstream endobj 156 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 157 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-004.pdf) /PTEX.InfoDict 28 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 31 0 R >> /ExtGState << >> /Font << /F1 29 0 R /F2 30 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 158 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 159 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 160 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-005.pdf) /PTEX.InfoDict 36 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 39 0 R >> /ExtGState << >> /Font << /F1 37 0 R /F2 38 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 162 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 163 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-006.pdf) /PTEX.InfoDict 44 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 47 0 R >> /ExtGState << >> /Font << /F1 45 0 R /F2 46 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 165 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 166 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 172 0 R /F2 173 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 168 0 obj << /Filter /FlateDecode /Length 1572 >> stream xڭWݓ4KZe C Cg sqrm]dI0Xodd an诩'HUtgTj5n#6RTZ;H.u4GAK)'^#+`@ҺҞ' [jb&dvp "w@*(Xka R#62mӧXCSo &{^ėaDgގ v,]ZDR h,-ho}nFޅ-o>x-Z6;Q:5ڑ#u-39^ez)#UnE[HLR( IU%(LR|Bf8LkC,sRlec@q;L[ec+7E8f%fJ&'&O;pKu#@^C!u y}БfڤDwzK(P26ɜP{"Ġwk7 nz5bD>{d72΋PwWB)o|nl:/篡Nx**xNpEAՎծ&mfI-{r \eek, yD{ܰxCX UcK`Iԣcy { p(d+9)x}#_;v*Up%:8}U p26f'j"xJapa GjIld[W|Փ1SR+u-3%~Q[3'N vRaǷeA( 8Oe) N$ >kj+RLxt#\\ʒ0vI 9#7gs^3)E)@Q>Bu90[V!|hν7pq͂C{,R"+=qG-r#7R%M _;|#I}7|Wt 4q.Px]~(om>[$K|FCK_SD"*"]TW +EYful ϯb1WP3=|ps<8-\o8mg$=;#Ex3PBk# {G(X#}aWؤpeQ}jG> stream xYYoF~ﯘG{EG# Ҵhڔ!QE͒j,1Akvf $HRv!5JKV:l$fH!'ʓU*&+o4TjEtڐMv#N#CY˕HY\0z蠏QM^xg>bיƓg?k\@WT"yh2uP#a+ mwS]ΪIRuهoz:kwN)$j6dYHzE'Rphz~uQQ+TRYւg>yL'nVpm8:i x%t2*$+{Sgw<hF/ż}eoŇݺ99./sV\I7xK^,1W8}c,H_명pw- zjq?G8۴Xpq>u=f܃0Z%U-U&)[ 3wu'շ+$ 9q- nbGN4sp3A~ƘAuرwn$5$vWobNҟ>*.l=b@VBnfcOb!=H,,Uqf#q/pėU811 &;O.U֋ ×r qص}̫1ܟou5(8(Րk kUs1VcaV^]hJ(85O'o&<ۓ[14Tn z"^ZG'02񫊈$০% f~}Iw "z|zo՚I+1Z+wVD~B頍^؝=3:ߺt%;$KYBqDS[[{}+Ÿ"moZC`mMRF02V(/o5>4R^SR6Dr?Cr(d ::ÉqNhϔ&Lѫej]W}{ ÿp=*!oa/742eúoͬ~Ծ~4*÷T;B;MX94&'̰歮5&%\)0(MZ (47+H#愧O( NJZD p/Gppu3BSL^"xwz8 H eO,x%I=juW}sW;"*N{:%~Z1d ó;ooFX>YuyONьrʨ(8.FŸ8+΋Ӣ-Hyl\wVvӵDQ7W#Yw!rֵmyVPo*~Vor&[Y-F1,5endstream endobj 246 0 obj << /Filter /FlateDecode /Length1 1728 /Length2 12229 /Length3 0 /Length 13324 >> stream xڍP c)ݡhq$k).EC+R܊k~r}3Nf|=ZLԵؤ y(čS * aF9#GYȸn/2Yۋ*Prwp99ܜB1d`+*;@ @]6n/y`dp r-*ЂZAnQIӓugbxl W G5#Qڶ`׿ZPk7O "p[ /.+ %;@KQ X/V߇bo ::!` Wawrc!V\/@ hbg@Z\]GcX@A7W?,_ݛ˵@=!!k06ܝ8t `gw6/"d6 7'' yYr@ KNP'K 5}_BX- 0/b_r.`/q8e¬b=e-)[RZeqqy/G*B}9 0 L}\A7|<?HO=_?z#ouw{U.@Օ:X_e 6=F< dvk\h`H `?y}*oJ9%-~a _V ?^XC]PQN _phC< 8,!!鏮8/9@—$E?/KZ!/_ _p_ր/| rDW^Ȯ<@p?n~\&DZ{Fԓm{Tln[/w&R2SuֻU+nM9KGÖD{x͉6Թq¾C^r26mGg?`{%~E2[a?"@V|+a1.GSaXQEL!xGB}<]FjA}FB"0(eSyb;܁M^CZo+T9i~\koH .$<+^o [L嶯ԠZJe lfvØֶ) \+~`3 Mj{B2KFGE3axP!ár\ni E>OhRAJJ4/1eWHkZS>Yj<AC V,sf? ﶁۉa]9J2ǪྒؼD#}rK7 B胣3CbcZF,:r4}Qo1eU7ʉ/%o|xJ>я'zʝA1">ȼXv\=#@BL}S50Z7xfWeC OxtXT JXiB3;kypF]GqTߧk}wz>"]N'p؅<Џ/Ys{5VhMhlLT=kʹKR`!ث܁lj/k[Uw#y+x9fV]ǎN{W 2AI\CA'0v6n}L\2R'12MFY ;H"7~)l {G0x^5Q->L&趸ft&?lKYba(PLZ:5Qhɼb_]ʏ2Ii d2'7W 'kora{b241Ḡn4M* Td즢F#`EʴARzJ6+neG 244Vv ,x9DB|a '{Fd#2Q[̛ʮۓEG0W[v=Avl^nvh<>ﰮK~ܹWo-zOKBӚ^ag "P"¥#0#vTS|Q" w1 d">X0Az=aپ]a,2˝XDcsm蒍X[k5ʍٛH0vtFj oY(`.E\C [£8Ζ=87R YN*`|vWD$F}+\+Q)Vfz8_b4l/^ضUTCZ?nm/񗡇c\uoNLұU^e[)kbV(xa}b^U$k&t5EM=9:qn^1o;z]2+~ P>}nʱ oǘIW-wdrRu=$*hZm:_mͪ4ZwZeUSUBT vV, l66k_aUCuAZQ`_vҶuE=Y눐>EFh ڵ'ܽ@i I],aPёjmg6re66ް-xx¨DېPhFMώULUWer1.?л&Ix0ޛ3癤#N%lƔ$rI/yMg&7:&dsȀBE͝㾟J2q+ \cOڜaelͷE仡#L C,PTZ{c_'i+a~%p LXD'kus6ɗ*yePXԚx ~BQa4t cٖ5,== avXO8 r,iR#€M~ckqev1\M qI!(2 } _YICXT*Gch}T )zpftUG^s~ݏ YrUb|>`ѻa-)U}Pփ|ZEf-y|Q.?;Kfr/]NipA"%RuEY e$߯qS59ユ" W `Fn,ҫ3~bKim ۋoKKuoc5O?]=vc[a4UK:-xV̓{3m`:Km?m:<^\A,|O*R"AV:`8p|x="%9Zeɑfo"fNqM`0G+Y\R?ԙB#|mc']{EErYǤ:qgsMq9Vۑ4Л$7w){9~*2!cʕ8WcHn7RsnNJK1w{# ̋j$~Cn~0FׄbYDƱ&=yWgC;8,eolxKya8B鰒E>uKM"v;@?T E) *d(Kݴ2܌,xw=xz7ҹL?F.Kg I\&ũ>\|/K> .SP^-*xQ/@р\lnEw)Id#ڭ3Q,K:0iu}-ZOG̞G9f ax?LhRe7MB2E&Kz:,ceӃ"]C''Hv\z?0iG̻5ݏjsOƊRZ`F:%K'@ǎ+==8&_ն9P1Nghc{~np1V%8j$X,~G :9i2<YR IN߯t@Y?84;X?*"2R,ѓlῒ۷T(;TsUỜݏW%=CÉ46[e喭hfWAAw?&7:4[< +6Wؔ ]\FB g < "X-ɀ}I;e nx0uL=#(0˥iZ-cʃ#‡KZ)"<)-SXvó55T$JΙ3 U X n 3Z6ff&yUl 7>{, ~ f .&r @ŬGiFUHs*clGłEN~ɼgEL w]m'oӽ_l 2 "_nI)Yjh;CWʎk+", .]O?=&a|˒l{JTu5(}j\IJiD?L%_vP;cZִ̜@a|$y:r>?J-NmSB_n*_,`Q*)d97ٕqX>$x:$# 08Z'7@z˄CwOe8u] t8I.!cO"Ru  IE}2gleiZN'Qw5cT2-*f&dW} 1:'G(/u1cvZ:W?J~w_'_͐q&7(Aڋћ IqxѬw8io=&Ȼ6Jo؅ZJ#WqT~SAkvy?J: i pa.5}`OX=Jc2e:,D"z:}>G#K7F ( Mzgh|fԆd ?pAVkQ~K+S1]b $|4TtƎ<^/UhRD.]u`˨MHr/lw*Ljf>9Nw.Gk^9p ~@;o^c޼u%F?ʂ ْ2o닢r|aQMnstc,k- 5Z$Pd^5-o\Cog1 6.V<9S!s}2J( 6m ^,gF[Y l7]`w.=^{Ż:h-m͆yѤ^!r4Ze/|_.\Y+ԝ1u<„.1#B ChZ2Vg?QieU`>LSJO_i~@3`="׌!b{ܮ)ZxC-vpL#gR>)U9?vфf?~^6Xl*tJsܲ^/H wcs!Bb.'Q^EPq14k>XeVL)kGU_eU&zI'D'"/Ek& چv$=t",1xܐd4!j\uE#{M$ >{Q=v zPx$gϫ/m We 1.t(2XQCrgJGuS)5.l = P; Ҭr &x#;y]Ol =EZCu8Q`B9GY% 퐄LF~!]80LO )npUs]y ݣH OO0 :pʩ1'Nd.+iZt"b4&It2 gp"c[`tTmNb9Qe[ ϫ!iGxQB%$Wdr*c>GX@WL*ЏI(/BW%IP Kz۹2މUE, 7΃;>vP¿߭#C|Bj(] fZG.sBt0Cy '^{b`&je$[a:╨%mO=|wo!~ڡ O䍙 GaD/"dPnvŢoPbIN%!a'kF߄q)8|onCБ>E8Q|`PfG"6(XgVN̐'J*;)WC],,7qi$, ͩySrM.vwEOJrUB1\- *لя. Ɉda]?g7<)fQh!CΈΫGBBkI'@+=e,{vD" ڎKͽ@P:k4UVQh%<<'1"5o.{Sϴ'̤ 1h:9`Xڍ|MeAP<(F7z% qO(cB') {}xt F|jѳᕬ2ns_T:^7[ch=hI_N{V31n.P-r_豦nW;ΝbX,x`qV^*^=m"xA-dqM<&%[lD$M;Kqۍȿq(bը!Uk)i)u!_yzn߷?F +Z[e8XG'BQt%3uF6t0"#Ucg#4>*o(rY)_{[=]5׫?u4WH2OewؠyDjR6 0ˠy$[ rTîvZTO%oGZɁOtgR5sJZgUݮ%Hs"8(qxM竚h?QJF 4wTH $vf{IEޏQ23ؒm,7>5;'*`_t|D&g:E!Z̷KgtO1Ǻl^|YR JE\nҫ.%$Z-m+)E,)>Qoa PƲ: xlK]kGkVFk:h}SRYvw5%W~ ip#wh?ؽǴ7OD 1>2d1Sx϶ ^=O)uFe{V>nչu͚ UmT>U:͞x9#qN3 _ѱ`iKKh;]!fHC(ɈVTm ḋ[RL=A;PlC2ymR^*jJػ_R7Gz'`hpfĈsjW6fd<ߩ V r& @A-ҞݺDg%P-cj߇;f"C¥grHyPwԬ]DmT 7nZhOc,׀:\-i3{fOjȮ!bL<(eT7ԋoSִCVTa:O\yPLdտF)lۦ#u@D6I\YMfG&YD~Nܴ=[ryx.*& $)=Ӟr\9>MO"X#swZ,*?̷`PGܿ(G<ϤHW||N'ѓr/sAy{G{A{9U~p dT9nsG-ρ϶ 7]U(o"krLq=E5K΋oxCR  `Qosj=kШ^zÈM6ydBe/CC6H-N1>qwbğm$"nW[fe)!C]\=ŕsn,*N([#jGXЎs޳`>[S#ld_ v|B 687{]5Loכӹ(D?HT"nX*z,:8H/u,fUU{ŚDzOě";ƱJA#BH~7v(%*۝sfTZhW ,+[7ωŞ8wZݹ`հ`E߲ q{,b&>(zhNPDIۄ#}j+_JZ*:(Hnl(&rG $'mNSzTն0Gt 9h,H]6[%xiϓ?(,pIe%aU萦JHD 'd)uuHXQ6%+9zFJdFv'x+yTթt.LL r9_KF%գWB2ar*jN:qXgoVW*duUqgyzXiRɦ+׼Gcq٘TklWj5I 3dj tU^^f)@ewXD eT,9b˲ce,w4dy'L:mx֢W;ĭ "76Demo1z~E"#$ɯ .xbxu"00D=6a9<Q#%\qNVX }%f*/ 5h*[h/ϣ : &CWkIꉅX[H?U8V= )őЍ;Cs9TBٔEs!OV Q~.:/!$bJ+.f:@eNe[a鱿*{82)E*o(SBTSQO ;=Ue@jZlxbK}ty?\:CGСg>as;Z5fx DSzf¦7&)`)QpyCﬔ4 l q'E}jnGOwPWzFytyM9W140.;=tƕi1ݳ6I Y\R"NբT #&Ηn:r?sBQmf@Ὁ, xuU4x#-Om^8mk۶Q\Pj] 4Ϸ^}9* a |Eڞr%KsVZ!ptPAH}8u{O̢\}s0ӽ_v? Ts0=n˵ƺfEԂGS zCf /)%2ե,bk]JO' 6(οLwf] 'REIBDyL1`/]הE{])8_i*jHW5a# ̋p(c2f|'~U[oi6 }`+ǜ@=>:P99eeFi/Lz3d<0P\${爨,,0h$endstream endobj 247 0 obj << /Filter /FlateDecode /Length1 1985 /Length2 13573 /Length3 0 /Length 14785 >> stream xڍP ܝ0{pww; % 8J꽚Y{wMA l2JXy"Z,ff6FffVx 5+g[@G'+=?,D21cwCy=@`eef23 3v23d@@'x Q{PXxxvLΖ@ƶUBP[:;;21191-inVΖhdߥ1S,P;;[+Sӻ*-PtX_7p+Ʀ ;c{w+{ -(!ř`loo ae{ى fq{3Q /~bV@3pmAnAVfano(-ow~Z2@/{ ^ {@/+s+< `] 4~?G/]c0? 3ۺ1$EE]""/O6+  8JVW>g BX  3qߔu/# [ۿ2Yٺ}r]߷@ Tٚ_.[VNV_fJVΦZ4[+{꯫tej~}8*oJq{S_[ 0vt4vg~%V':=&F{ 8/90 %0A\&".`L2I񿈛T({v"7z`_WߘߙSJ?}-̭\se rq?{ |gmN?|/d}:~gG,?;OJ;=;gKG?N R]o?k~}/h 42 v_-Lư7.0CJ DSx+4ԃ#N}i6%Aa^+$vķc> j|g )CمY)ޭWKm_h~,s4Cz_,EI.)3-/(739o2qt^'Ql:skjN]xx:D7S"28 %E12ED(ƟkH:F&FpLǘ*oS UEϭ*~a1,wR8xt q>Ub Io1Z00ys/{.S"In I{lk5SAI0!2aK>lJ7ApҨ)Yњ N䷟ ǦB!6>.ӭyeFdXUuDLЅFA?J%S7X\)MN"21:%]6y$e*R}H&&vΒM3+qtSsr?U O~脴^0\+;q;,CQǺ2.Uխban{O2Х!Sw|R]BG{|&O#"[jy99A񥼖nb/&b议Y]quڱl޷;Rn8{ʼsC[cSX_Zʰ \qSu99dWfkg<$i|y0LEJ5^r5ߚ3T3yzut2쾚CjbNos^3硒{߼N3*P!Rk M5SR^JUPJ[1z;ӟ~c$L^Ft.J3Wc=Aia:h7v6ً0ɗ5t+f5e\ +ײ`ŕ<zgPr 8:K/B7R!cV=7mӇ`yb} cۊu laWx54;X7|,njwk>EIuhñR.抷wfEǘi.ч0 sCA*/8oЋI {p mD@u8:S<4Qvo1#v2Zy{n;8mq#8ݏ`W~Tef#$+\C.rm&>cgφk2^D9. =N\䌒}:He;f Z/w׸߾|a &$d[O%O,8g<3K usF-,G wԴ;I\߳|*o娶,Gkbg=$%W, :l]B:o y|'zn.c~3ה$g&MtEN^br&eYO%1 M63V>hY'a) *I)^$k-4)glȆ rQNכ) ܢ"+Z&ZaN=y邨=R[j :ϔ?C"CK | m.{&RS9{5]^rqH!0y,jh39+sYb!DI*Ҷȑ^;Ntz S#clǒd9 7s UONGA腅"*AX!q*H> S,;6IB5p.AAy\&(uU7yE*1'eOO~j׬xq NO(>"˖+ [W9!W_)ˤRYUȳ("%c\T25 DS,Jk[wʳC9%Ju,g&C5tvLlU|O\L\#  MdBOo̿z,0U$xs=c)So\[v߽ȿYw .PJ@h-Jn6nTGP}y2E掬k4T\CDalvlp?v&l.c"sF*Kyo&Z_JBI[ _īNIINhq2HՅ&!лvp%_pt\ b< % D71%lHv֮JLvo:hƄbx3@"GK\;" ;*ҀBcR\ J/h,SmO":,mQUmkRƐ- ~5LAR8 oxgAgϗy.Y[ MazHg}۟g[d}!2nz-֖q\8* o| tvpu #J+qƅ-*L(5pgG^/i: AwtE!p6g\ @i&! f3XcќusvIrxjσcpi @ES9!Qˡ;':|~z~8YD%V5Sulx9^+%l9b6FQz9.f|wVgaX é4Sو{b{G9]rS$·)sە z7'Dg_u-fQO9 EfVI llERLR7hId*2aʣW ax_|n?-]&#/QˠP֧TvLsMl̮6o1[yFcf I!ޟk^5ĈdJgu->qD㐇wgv&C: I0>e]kшϦe (S*<͏E/ w .z/8"do}əi4W*5vPѧ"q2hzZ. 1MZԪzMʄx L95o[|(YȐ,2mIN론*#Nhmݛ8OTOfZm{RVRQ:FF ۛZЛggk)\tM{%´R(yWU W_vZ.?8c׫znmEvv̥oQy{7Wnʺt:2隷>!oXۋK#!HUCUi#Wq+eɢ~!)Q ??ZfWI#g2ߡ0U ޲o# عL'^U@q1T:Jgi@$<~S0,vzH6\ZOk {gۍ"“cĹ(SA_1v^nt<=~^3"r P5|340Cn59՜~| ~1K/ Y}8lx>2)cɝƄcEP4mu)ӣAo GWTLE)-v4)&VGƎp i\gHn_j6C56&+L吰h>icD7k{d5[ slmK18_`@%~li:k 0nk?=3(+"ym(a. EJj&x-gT˖Z|)Ĝyt7fjNmU  }w[jÖu_qI,iF?fJaٮ nx#1`_[ͦB:9AQU]=`su|tsQ#akRq/ :4|C#hhpwoRvQ` }xERu1>-0~OT 8V/A 1VNQ.OZDZPQ%TX@d'1 - "9Fɝ.AE-yꝍ3Es^G v,n=H˙lbǮ(lzDS4DixNM Z FE/pMEgD q 9˚8;ɀh:.N5NaMy6 ŵUyE t52ŝ*&ȕӶ^@ӛv??nq{X'GWAЧ WT,M#Z(+e m$^tiV x~Э8}O<O/Gfc-ng e+9@60Ox<}e_QU"9^+`"UYIG2vEcI+"0ncF~-xI{=b ]CX&T,xSc<,nM柪&#E7R_[%dZYJUo)ju;,p}@t7Z3}|3(7/&}vRE9RYKH{kuJWǨfh>5osN:j ɞ&xJŸsVֹ~w 'adFpK5|f^۸㛾G&Af;vc* F=P*PyqH 05"FA ,]~5n 28H6OyR>ee8Xe(y# +9a2W&<M~\dڑauǮHh[X9?/B In#b/E"Ubvzٸ$OxT] pD ±DgW8}yikzY/߁1@$2ok6#c!wW*ݹ|Mk_ 3'Xt6 ~{>Unvt 6s=Te 2B}NB #!~)cqUk Il}ǹe5=LEύb#a|-U!?UJR+kw Yv*dKNH1g >΄`^ M,{e QbEp`\N;DfTGBƂ~=_DyuG +քv4n\Պ6Cf2U8W=aw$cx2g#˛]?p,>% ƶS+'nyGtUQ2~Aq0y,̫҅EMӃKPwp+2%hfQb]_O#JJO,1Z0rNd웸E;T6 ^vcsAf}֜m4]lgVD\\@b kd5RYobU ;c(c݉MJipKs('m=DVwuOv_ET0Fqb{JJO S]x607EU~S 0Rmfa'Cѧ:Z!p X}NZnXY LG ] yIYnX^%37RWy!'oSV5a\jymG\5bz(RJE+sG-Y͜Ǩor[AHVȄX1Ȝ aI'^&=zOcCgWU-®w!SWȹkjR>P vA1ϤN.LwPkH`'m2:֤_R%AG1\2ل dl-r$Bw  ?S5*BVyIYCm-h9- .#/!1+<4/ͯ #{REti?Nn@RQ s~#<ʋG:ƻe\t $ETfOɈIQ0b'k˸*XDowZL5lWxl\ڵl#͖k9g!]#waی 0 !W`{E߁}۵^{2^uh Pfg!Fh_ht}wyԙ笙)7)_񰸠-sU7S^je"OT+YBZ:2mH>̆ +=~L Vڣ۷`@2qn&)'Cbo ۧP{9{תw< _~ܓ$AgǤ138qxs$*PkHAV75>ͷu5;J9w!yrrBBDg/O[ Mjv5ndV*>&j\llŇSsTfA` 80+I|cV^،V:4$#2O^p-H8[\`tF9v6LJFmLj0ڿ݉6D'xNg _Ե[2&:"&[/ޠT^t_sa~LCyap5d[y>jdK&y59%RҸY %*fL(T4yR]IëҁPqi] d,D , qK.ͽ"͙skߤ/#fl@^Q`o8|9O. MoނȬw! p%fu6Th0BWZ3 e(61dlS78kWPo؟&p3v6v HjMt3qX9y@>Lڴ@оĮtj7KTkcZA! 9XTDػ ~?6W"J/EˈxH10u^[.D#Mj bE>GmX&HTXnx1,r?ߟD 5oi@wmHꣃ`7(a4aK!e L12asFOm]õ'hW|$ A[ƎvϚJ}!+_j{ݐ5H0-*AKD"(yQ^|iy$|\<3Dj 9E}$>!Г&eB`mRK+bU/|4biw,/xZZ6݆js3_6uVP,D.vX7lD1p:۷xg]18R8z:_ ~:GI|afhu^>qulVl[3Vg/`OҼ/Qډo#iFL r_rP!Qi4-/9guf|q`o(;m[S} '@8 DXHiL_ŋ-y&33t1u0D`t/\e0iFmWݼjRrMBR%ULHZ\1HW(j>h|a̱)@F=!;eō1QvFⱊ 2ofC|0 h9]DEK:Tvh+88KVr}$P BZ=L2S"obi#ۆ-QAۋÛE~-dp7??^ϻ~7venĴX㌖W\O~*9?ij]LYct-j桨QYĬهCd_98B-┕JXzĀSrgN71I,_C1 IC Tfln*765w*Jj4G[v4fFiMWTcR΀q^J2矻!ƎNMcl%4ЌZGFbа< &7ؚ4~hw& t++qbqQʱo~x2]…O$,nvSE_]Tn'FiEo]?dZsvJgּ"~C ܞmJufx=C }:(gwSTx$0( vnW.߉HKjI}eȴ`;:6ԟR`׆s٠8}i*TE>Dh`'暻 TOUʇ )q:yPqڷ >?h|<IA_$ΔCV2"{/SXP!i?MgXV|ǒQaql! q[\UOa} JoD SȘssrs'vs}.yZ>3> uLcRPG5n8 V80 72c`]%,Dǥ/iK- _o쟾a&OZ@1̸v]{'a}| #me0,Q'6&TˮYy8ҏ]“n5ַQ`1,>X24MxͨURG] ;PRRaѺ͝Q] @x7\{jN6?^(#R#5\5}GUl7 Lԋ\Gʩnj-ƤmRVoyYxPݡ -vKdjiy#kJ ]NZu؀! ++\:O aFN/u5M#raL"fm x]L& ^Iz2Ǜ?Qr2ig[L{\Q%; Cw`ZQ[rEyEȝs6tPfzznni1΅,ò'( e 7z68h4ǀnx4Ro:C}DD*̲o15حrcP&m%2ςzsQ,\;kgdE-ukIkxO>.Klx6TWTj&#w=,uVH՝ZG+7Rbs%? Ho*AK58Ίf"L`pieJ­ srwW{~AlS9.ha.]`$` !ZjCSJbЏZCQB8Cu|y^W ~ E4^ rxH颿/ ZMj-n >9ѱJ_y#"e,>/xGaZY =Rm˷9)Nb NY^f< !ޗ[(UHFüPփyrh$ܘݙ<' 'ÝAׁ#<0Tۙ}e'a0߸=DR] J16ܴ-0H\4iӪ`z-ݮAPIO<6^B)<;0_gg2e*wfq;^ҩI-hc@VVQdC-儉Þ1̄}!.bnB~ѪArg1WrnCvy$o+FR|\EeDO=_H  F\9\om ۔ݸ]]n$6YkꯠSp;)?*UazH1O3;=aN*~A9K;8}I:#Fc3A fZ+gBj8 > +֌N-LFezz"Kz,5^3.6<TJ:Z>:1vʴ(wyZ׺L_%TvLrRFLpf޼iɶQz]єqt2B&Bc푑kBHT-ibr^+ [ºILOI ~qʱQr)3.cQ :*MYE}(ǎco>Y4kO?Ԅ(ni~8'uds.pARZ17L+|O.K&/g m{W-wLՍy_ptǽimm0Ys@-=9턥}qeDUX)𥊥]/i<0%f ȊbjT<$\Z3ib) 33}'wuׄ-iflLŀ{-Vvw;땝WZB𷑾QH.{a/kߋTJ>+U6݁N_SL_%Y3"ؤlq@{q/H}iz,SdkPSZJypעftv:ح_p-=@:Ƈ[ CN`bfCSO )=52? Eog닇2U<`h ԜeER|G>p$N˫c HBfYǘGO'c41C7^rÜ|Nc`d&S^I[<$4:ђžXrpV)%#Gxwh1w{+IMg Y%Oc"Q{Zb?o?_I4w_ϔiSstxϐ܏:$!wlyɵ?oi)1Sdati?nendstream endobj 248 0 obj << /Filter /FlateDecode /Length1 1536 /Length2 8093 /Length3 0 /Length 9125 >> stream xڍTo6RR"Ԣݝ K.JtJJwK ") ͇|?Ξ5sO\sgksJY!,8Ȩ)A gbҁ(.g(}oj8@ A 7$7, j\egA ݝa6s~XBB0KABoO80(BڢHa Օ B8ۈr\ah[uvZ~ P8B* c CiFX]!Pf n]^­΀J $'XO\; 3ሄap5 АWB9o @`[CRmՇt!(.wan,A8:BhdaP۾= [a ԅÜ^Bdܪ@> Y㎄aVD ַe@a|O @;z{%|0`D,608oP?;F[ߟLnf; c@/T5*4  ^Ay*~{ۨsv,m+࿃#n tc ?\h;K?,?v#/-u_o@ q C]5ZАuRSCܠVahK?i^9sv,o-74AP+ceRwrpK@!ÿ5n @ߺnkX#ZS @$0hi G滵.# ?t 06:_[& Epx{Ui \8PR$Ю*BڕseXg7Ԁs8#7f>R$,ojצ.t9sƝ^~݆8'S o {0FIXh3{=L^(/Ԣ^QJA#Ѣ_gYKaIOTD[c]IgHi;"]WѤr"4f]flyZ(<ܲ)gMGDwG#H0>f[x`%WSؓKݡGt%o0 ճ(>"Z0x] "Ϸ<0SEl`%ޔ(⩛jd#leGѴL&D{2!Il;K}rב-R Yۄ-b~\BҷylX IΟޫBM\ֹ@Giİ2Zq7F7+z~ψ1L jٮ۽( )$hmLW.xFXbp5 ص4bU`?HҮznjʛ y9i=e \LP;zmõh͢l^1 0z!辔4`y{ ^3Kpf.zӤwVq aXn_ύMt;R}dYeXdaVZ"ɌUCKĨX.̓ߞ"eLVfir̨5TX)QU`9=9 CYosX Ǽ7bS]ܿۚu(|2>jV[mw 7WQP'R"F,*3 {߇>a}{kq9MQn.dx.s2=I g`Բ@Tm6tg,S=K9bK3 ,c_мK(X$)r%!`7bwt,_b2#|;,阵g̥¬—gٓ({`ls9DZ³ɯx~z/,~d ^QMWV1i;}TqP q8Q量]uCu{{o.QAR3 a/z@I*G߬zsxI]dm0PSoT戼Gx.Sv< ۝?-@D;rBS MqLzӪq"f4 YRR8j9?8Q6"H, |3 hzÓ#~-Kp0%53⿤zqݜMl:^;Ur715l8:"+7DŻtOp=r:Ictrvz8PNeRҞt^FX7v)eUI+k$9@PMO(k!'z=%y#cWL`F6?\=klՄE1Jkƚ"` J"Gk̢d?MUSTrxݫ|ZՈt^UnYD!xvTwLTHo-Q?ιp+sb\<"Z(ڹ xsa1O@fMA05W:sld2Ï=LJmc͚/`ؓ$oinM[4[=!R~@oG _jR(soW]Ir8T 3)sI>-X#V8a'bX1N07enTASjҁ Γ#kR(A)U>BpI"wYЇ* *Krky' PܜhpWc`_hpB̕psh<"m8AOXK?HÐ-z~ 'ï:-}b3@ ?%|eƟ z_ss¦2ݬ{S7+qHI\?OŸ0 `_潀MtcGja3i1!ƣ{(cm%"Dc=\V>' a<9Ir]^"\ȉ0f8d f~d~8}s-5OXHן$=u [ V nJrb}y&&vM;JiܳTeO`\oU$OZro_zsFR;F]ɯ-8ЫDއ MGO]h_$)Cc DsiLu8g)TU`Iid>ZW2\ e+>fIDTY,0;܈Oeْ?rƍ"}W7!UcI]/ܲ{3WLtbzجQ}tRnٶu(uzmUǴhP#\ nv¦uW5t_\?7APvO_+mҗSsPqJd˨J=;Ixht60VR;KP.7G(`InUNB^lɏ }q8:JjNj@5ZYb{q0qb ޭ8KHjEN'"v? [W$H*0OK5GO^ɇ?RѪ!PV :y+$ hD,1_V{nHؓ4V(,sEv4n˯b'=$($"Cc}.힣~XM++qi >pr)g KI2K~ئ1{7=<~}LFpp>D&P8bv)zH vAi6ܩn?ɗde:OT G 8k-rb_*{W6xXLp09Mͳ&.Ds<,$ncx˙jy;_Dìc(gqԐŎ'P%4&/GA9D.ڀcg.v A3s_u${qVX``fxbP?+U`>%Y9޶)ր<#P,*䱅6NAuU=l/;iޱEXQy#9,@d= ݊O(Q&W>X[z6TI]߫H_y fJH^] 0w[{JKT394m.C/Iͥ(#@"Usch} `=^. 7FX5_ѧ T%6* f;j)ġG~ L~ >vJuK{SNI?jaxwKJ `ɦ(VJ<2,S^} Imua9l7qu%X',F/|X4b}>\O)dR1)甋[:2i@jGQ ;Z,ylxc?Bm[w^vk>9g5>ISn oeBiA\?|9"O\ⓖZ.!Md<&LlUҽEfW#^%*tAk͹ú^]S %Ɛao!;qw=KLJof;I4r72 bDb1b#P.]=1SM:"c;rlE=lavD ZEWjvNTKC8Eׯeʨ: Pi?dtB$L^mfCC dlCeeN{CoV'."Nif?<ss9("C O;H9FD2rǤ4'zj_qj?f^v)AND5kp_*+?tk5B!I7vg$#",߇__}!< x Vuw\'lkb-ZR+/$ow+ӕN4]Kʥ,>Py?qG%30)"|[`,k -ņq Jnt]GNtz'=HǽE<݇_ "s[e'*]Q[k{LiaWՁۼN֬9bS^NxȨ#\폄&wd[Z'ݲf9/C|vkR0/Q31cfV5cV ʘKpȐ2>/#>a `|zՏteh34|iXMCbX;eN Q}zj6Ĭ'FLpXsˠ ]*2Vjm緍] }̄[Hɔm H8 ^+77{qꠑI*.#~mYro6 :ȼhM:5:س9TeaqyX}+ܕl9\A ^nسѵE=͌a}[Y2dASJNiUH[*{7١b)ueQJC(҈J ZufKEoZAs+ yTnO4yH {Ɖlʃ{yjqiiޢ~>K AdEZ,#JטEmW]iOv%Q ³9KSw_;ݞp#kakЫcbkZ"\_5?#ZLbK]E/x̌^YR3 lYuv^gnAKè؄)<'ϴ2t{c9ѵ0GoUb@z?| xBn{)ptqmKy1ю˗ww~ѽnf~QCbGe0K ='/tq;̭xce5>&ggUN8mxDj+P?qDO L*u[ڗ:ME{N$&]Y3)}]~9KL#d7QZY%9;II[IH~chNTl-N$)t^fDF6rmtΏg>y >RP8ށ@8'%:jtJD=l{Zyg=Ə Rg!& yxOi @D'?y6XŘrp{͸9 JQOpe+!F$Η./95&FT- nWkkT✤2K qEW(.'mW2D,Āq&ɽ[o/ x?MXESRv߽B?qh1g:=Ksku8U4QB(O?=wUDlh]1׫3L{j6Byh9w=2~?uM+GJw9ݴcV]ۤ`FbFq^jJ3;ji!0)& s.JQb\RVً*jLi jߐ> stream xڌPX \Ip; np'nW[T =ݧ*2U &1 3+3+?@BIʎ@Eij G@ tvq@h In67??++ISw 3@@%lce W9/wdj 14m^ A+hljl%Lq]@ ʦv+cFhZ۸-pt0u@[s  4*@6`s66f+_Φv^6VK[ @EZӕ`joonjckj2+sST?幘;80*W)K[H8]]~'i 4ߝ}gaU#PN bee@Osk_5)~A8:8,AEl,>.@O`G$ZAw賂f opmWYdt4%Uu_' `5d?_.&W! IK64nPr5J@ 7s5-h"m Pq5{Zk2[{ͯkjсVp_* hsK)eo`kعΦ^& @Ͽl rX:8#(7Eo `x,/E7HxX,ҿh#vo`8,(oE7rQrQ@]7kF vĮu~#Į/Y@:Ss8+9%Hj"Ys+{UhE\`@bQN4I,0p; d-C\oF_~;92[:k/Gk Amzٟ@g;2A;N5jP0GГkr#oc9@\Y=r%q>N8ں 8/t76/+WSh SrB@?Z2w=bf *Z~^Wkg:,W?@1A{1s o? (Ɂ"y k _o   4GXs0y[vW#F;&4MB:#hاm)%g-IjO ꓻ 8b_1i>;j )OƋy'[Hܮ^5SSVA` UY,9+1=ƅ'iWRXB ޫ.]zxĐ7#>>%+ _ I?01WۨG7ֺ,v|c$Ֆ6a;`WGcrtX|ho+`Y8iuh6sPvN7"+6z)kete]:@9,4%OOЦ>Al[zн#Dg\9*.;6fm=0 __:?_\[sHdKuGѨ fX.6*q%KH.( 9dzw竆 3iWjs嫑D348Y^.n}}Q!>aS'$7C= E%UF,v{ތTSܝ̮)UGSa{ɃLNpQ¡`da/~M(NMS{]-ReH &qB ͻ< m۔>Ŝ}THj퀴u!ژ˨5-%~8l;+؉,&cMu.)wi\PA֍`hA.8庤H)O\5r´(jYd`Yi? b,CGÁm ` %_crH咅0עӠoLȣV3C/IȏɻQs"PjONt&]GH[yKs}Ԉ~ tP8iQ0.U~!cmb-'d0&]dD'x$ZS5 ',,*wf?g7C4- 0h4zYʺi^x$s/I ֝ ZZ8U8ӍoZjοT?aG_)+eVĹp}3@8g; s B~ԜU`^Q;fĕV1jG !ZER eWa\-JIixP̔߅w< WfhV~+?^{-15'|>[r+_XɺH_Gs:㷛Vٮ"~p@۹xcQK\nuUSIo|QlQ~r6X8%3ǀ0ղJ5mmܶшid*f 6^9ްPl! Qr;\ǔVUݙKfSdeɳ 6M9pkF G .FN\,>ۣx'tV)fy~@(sF*+ vWVᣔSyN["ܴViT=V-P &76eGp;_O84LݕxNcYr7"@-Gb&VY(6άϙnZZp $&[EFJF~\ѠCwKhKjt (xkLa-m "õP$Ckz' kK >uՋ]BlMd&!{ŎWșa ?0;ERb7JTJ=YRܖMSVϙ:I ~A\Q*,xy<OD{Zo/ 3 ҥOA&YB$T0z} [-iLAok=؟,|VoD/օ/dyI_cɠ&RQ` #bPjvNR[o=vs:>]rlQ^zi U"ZjzVl4q.c?-L 44((U1Ν;? |@ג;~VEkSC[pyM/xʱD?ԥY6i콤y?bol R^16Yn?DBe2tѻt8&p˦Z_]sǖ#8%9MDOxIh0t嫲'Ah"r'+- |n#i9*s)<|zLd+7NWsju~Q$l\nFwd:_P1]H|qDΐ0@@q=݂n2h]˴^˔ +S:;!@KdU: *>IKp 4$)6<m;s%aGxib:w%>j +`<䎴wI@H޶9,u+t[30S:`[۵iW64V9Ytrٸ\&zrmrd}K%I7:Z~O?ubfގvGȾ ~ 5o8OؒovE 4\@\-C] J {&n=^})T fZQ*ovh^D{ TLl2?avلʤF6l)fZgcTuʹИb;H̦mǻJ^7JOn~N \^ɞW g3NP+;\sler:TBi*/N08n}L2}YzTqZ ]`$Fxc59oa'0MslˊZ?kVg>Nyv cƠlYz"ICҽRZƍX&aՕ%fe#vda3>QRaϲ̊ϚҽɂW\0ǭP;rNb%bA6n=;W'ShĒ7?b,H` !WIbHLeXt[-eC-[|3npx| !} o(w<U < h_ޢq)u7ZtQ&xKnaj{2?W|`j_v݉BBUbϭDԧ-qdyM>^b "GWELuHextC"z\)b}̏w k!՞VD:0Fp>)#$`#乂0$9lsȥL{kS$}"ܳfe(r[ZH9|b|Ցը·xzT^7^emV?_9EްsȦ_uO8)2RN#&&N\gATH >+}q[O͏DҌIȭGŢ7R'hGd]<(]K$pDo":a,a$+RrihGR,U)~~+>Iyr{/k-8Ȱ]!Ra\T 5:jIwd(-#-=@iAT-ɎR[|MƩ疖7~Qbx)Uȧ~NS%h4H><$A@" w$ ef_վ=Odq xR4 &/{k~L*"5I0 3; [¯+ְNm.L_E ex+}&!vzW.A~}Qevm=bqs}B s_,3 VT]ᘟ,<ݣ|wx6ٟ.]5Y?"è@ U:I{->>!)]-^eMP ?TҲ9OZSq ./eYs}_4VwJu,Sb<`*谣bCɜ+{u  èq? YID!0s{|ByP$ T`Ÿ_)U+ [y215"uξ0!Ӎ[Mr3T'=!0o6(MfxN%uo&IҀEd1̓sҨw?n k!USM@Z~qԭC wEf%(1#*}Ī&*וV= fndf\1һ1Yq iV2RHS?OIawرp&.$ˡf08b#A -&xXIMQIRU6'k|!ߚ(q@CI$BCM+RZמsM EBgV$"Iv&kWq1 UQu҅H'KK}LR·"V$^.o0D)0>"K! .ʍu6 ۥ{X ![VQ<7U=R.Cn9xE*f5"&,nj}Ӝ >7f<SdeW8x<;p*J̀>q߲WzDH>и[#DW=4P`M;E~ 9)aR̋JIl4-yK mK v!Dh+'>/1[]Yh$m/h|PI8HQL3.ޙHy3d8V0)9aK&ԧv?Sn$ bŽ9蟥lSX 3HͣmuR:Nq Fm3T cwxݗ2{s;M ORQu{هiJfȾÕQFGU[u?),K>&E!p+~J4@*-4Ioհ-j1>ۇD F4tTbBz%äwu10 o{.[![}|SxZZoG>.}^ȅ-Rd=NʡG84j#ojʱMXM:8SZ!] j2ۏuN4kUV){ptk|tHtjp ;A7Bnчj>)] 9rMl=iJvXk>+̋e=*[-dDG5}J&\s+RNPH2H=LiZр^'iH|3r"+7n{L|⼊rdWή_G}g83E8 3+"MV "/묏2ysBnI6`+V ?!p2v/ǮBW氋9< ?Mc{N ?黝me}/ȑo9=Fc*S%IR}lJ:̅WUOJ81?z#bۅ,~W< c^G} b @6۰VH—B%өtgpiV}281?!d%ZOă/_W:#kx/zWBchi5INks):vMV}z ”emq= yH;SgH:Y㘤]*M*MPrgce]+'X+5w]%З(1r[uʼiR/{ſ;x4b|z7 !|qXWMe$&9|1CF@Cvm lkPIoS"6YlU 4\ =xkpK-}g/_JįQG1:(@s'IciWu**1@9),.hsZO*ʟɯz|iZ9e3*r׽ yA\i\.8|AORߗ&,Ir H{˭t.;RrIuyYu7rp)C{z!W[֍up>-Q>zgcAiTW4O0++6!-^NX?>Ա#;p<| x^lvyќaԷ}?ncc?61T9=[Lܫ^m}AHb\:2xn6 t:3$z A1GqU^(۸Ac>Qz'dLO ꓖ Gw?-JNCO0h|TZ;\Z^C t%1VQEP_7eo9]H,F p& RVyވ~-laK jzÄ*ެȫRjZ˨Mֿ88KNLfLM=Qk&X'nCs$-Ry}:#dDx{3a-ãrVu'p/ y~ef%U":_H91O])BfaD?_y5RgܨeBHSBtK˳ -7{"3FnX;+(aAፀÉ_ ef_1G6"@ZYM[-dhj;iɕs^baR?Jn925 HW`9sΔK_"~n"S",73B ` M^>>`~p[)Hp~o~a(k2Qljz/]ٓ>ZF~Ddhb'\c\5.I)qw{aJj\=4O T1/n8!m|f@*e}cQEnF\%"0isug'6{G|8oԽ '0Bz[`B͝ۥxܲ73[V"` (@9F<$>]h&FoY07I$,5f}J/$A6 j> !'$y.=!|qϖ)'\4dw4Y# w:u -lW )ClgwH2_ȋ)swPq,az߇S,HaJOy 0B0䜃#Tõ芟~D+K ZÄF ꖂ'dVR(D]BCDycۉ~0ոzfì)\5<ǘ?/ɼ']z ˇmo[E8`eˤȒFgu Mӑhj<~byo -j).҅먫鳏.ZwlDXF|,Ԍҋ&?f̈armђ /"Q0 ]s΋c񒝝Tr\e넔Wf':U0G x@1|0t펊YPDL|QW?vj{®_^zx@!h-,nC2ME@"PjZ@QbJLƀU$Ǹv'C{SM\,tCn{Y/\c`HjLR|n\>o-M}B*ڳDXC/Y yH/*\l?m_Zggƞ ]YisGO5>2ǰ)t4EoKfBEN\և,L(uV諗k:yD/Mp`C ʔ|=mGy,poA1Gɟc^KvKfB]ԃM ~G˫AI.,i`.ʬގzDHk>ld;:R31%*;U9ԁe l'k th;z?D"^o)ɓ_wIVt4p9Jlv74O"AFTHAn}\a9 kg#BD;O`)P!K{&Up[Q|Bx%R?B`#_.ZgԎRR a7m-U Fvvt,/O(j 'bZ*ZZvE瑟7h۱1)^Bv!?@&,?bNb?s\35_06m>BJYjG9F{$\{04!(1m8f쒶Aq_2C,{YZt4HK5J(V}>mҼs=X3\@ O+PZI&.~"B)xRXWF ,j˾AV7ٝxX6a: ѡ+i^~$vrCFsc{N._&/ Ikfdj; `áجzS6g=֣ F-WŃC Qh[;y\E& )(Z%*Rm_V(ѽ!6:_:TEzWzCD'<`m0($&;kh?.kP6P3'B#ӳX#i@4FTQOjnI^ e=0C UYYtgFz|rWqzt)[Y~JC \{#,`ek>CeS57G5PWHoY6 ]SnpGWvXLQQpkp*˛BFhuHY--Mc*,"Uo ؝3OJv6A׈/g֘VR.d{0̍G8ι9xV~ʃ7V/̊ȧ[viFJqO2HS$$ !SKېJokF o57,IpC" ]1M7so6JǼKNw:*JlE;p"OՐo[M;es3Jth@!j/Yt}VmZba"I[@H8 )SOd<SoQ'NDȽ)KIS'K% D&ۉ픪e+lUHHY?ue6dY ,Ê"-7gLkT{Ivv2 ɷ"Kyj<#Mͻ؇IPJ,$aH!_aRV .J;4astyR{A%=L2aJkYkB7+;paazA ^ZAB`Or_<;mRQJ0ʝ1Y;!d_#2۸@Ii\ǯa"+LwpFk{$R$2ϣ2&TҚ\1 yX jޛdv˺hŽ–zchf+ 먓h94ܸI&;eN1-@ yφaJ:1V^*fmVױ[$NT~X 8H8{D?66c, ,zڽNjKbٚrOƎN# ,^ϒL'bA{}gzzcUJhsA7ia.B4XΎ߯rPrqgw6h 2nVZO0[Aڎ5K؊[ mtDI!U8 wViRM/'kbȱ:EiZ^ _g2FFTZ|e`;UsףS׌d(qb+} N,q`D{|6]%R6wJrՁ^Նo0W Ysza_)+5~NeWXdKDאeZ\,GTnTDߌTzuCf<<4c?fKp>SXI _}Ud]}^r! ZN3ѹ>qL6Kn^>QX[N|BLA MgHe褸4 wrñeFӜ/ L~3NۧH1z/lbb-^ژ?R-dNݧxp&Lyaϣ>fdddzбcڨ@[3, .XvVNHR-rg]avi\a ,h,ƆD#D5%NO0$SsM @Æ9! 9`+MC##x8'ʁ]pSo'#,{Ȇ%Rr :j skJNHKwGJhq(E'HDIk8* Z6D_T2ó؇#TMfܞת11Ѧ~!p}h{k0LtbѵRVCVZTKNf0h֕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:*endstream endobj 250 0 obj << /Filter /FlateDecode /Length1 1441 /Length2 6819 /Length3 0 /Length 7802 >> stream xڍvTl7%1Zd6RPSj9@B)ADVD A@Z$iSy}|9}]+Fa!` %7 chҫcP,ӀbfhPBd r `0P !Ԁ \@=4 PGcX-9`@ow*A(!GoAh WX(EI1Jb@hc_H$@  b@9Fyc{ 3]mSRSCqr@qI0abE_]('Y|p_k1e3`0 oE?P$;/=X< @5Ϻ]bPE{D"j3lBV=DȒ1|'㬼Xq.r;Acs.RDapv IG!YHٱr_ĩLJ >8hO,RF\{C̳F e}JL;r&ʙXŭJ"S~n--WW-Ok2e#x>ܝ VcKQsRkքwW8Dwrxyem%S T1=NJ;l$b;CQU"q^eDƁkM}7(vRW#2{`WxSQŃq9wZ)yu$9o޳{ahejtZ[P/)[)g+_!yLiǷ{S<0Z.eJnAx;{n|qnͪmӬFo}ޡT3r6Zmk8EPĿ9u+c̔T)A[4ZNiPBq繉)6XFu( pL]]ȼ. g]x`W-nx9uh*k=kCel6ݼGEՙ~RdD@#lƽGI؞N]3yb/p#P?s$|*2٪:liNӨ4K.J*$XjgofCWMv[٥˜fI`V=S$9C /^eNQ:~P~ @kkqpnlڼ R%a]x\)hFe]f$6O`T#Ʃ΢B{#bQoG ɕAfKIվp߶v'*8ɫJɃ47cN.B\(vL58>R[W烊ʓPऎ5Og<+׉K^뇋F6(1?]Kɋ!/g!Q$$R..c-ҟCk+{[8!ᳪpl; +G}ob?+j]զ;_Y-γfmB#d{GZ'E9.&gTy[~6G4:+nlT甙a|D7i?9ȿz\)o0vQ;9piNqnN;)Ų6ۘiJ_*hɵ1EY4=b֔D1cjɰٜ<;mg `?JGY0A'Xmz

zKTlqN9' [_JƏ9ytk}2 6#@"yw>m"kmҔƈm}m;r!;ϩD5n,A<(C>~{Q=Wb;lpV`#|l]$+9c)Д$oAg 9jUTuCΝc]VD>f|6/>*/ ne6#ъ0zN@ٓjֻ<ӄ#IITfE4vKGZhSs!ZHjH)-;AW)sg<~sR.}NOCFfJs޴sB#ߌcb¸gsʨZFdQtNϦn,*V@@&MرT!glf}2Oި nGCQ'^zj Bwz .j?x]tbP%2w:ߩ:@t; |:tE+W Me;Ho4 tYKkDn!I8H/߽qˮ5a\]jYJ "l:, ss— l{fBn5TZŴJddvw1 |9spc̢a6q(>1v~L%@euoE ZwDyqrм[y"p$v/;zXֽbhw`ʝz> ۊ穥N)Z5v7qVM9VeW rvNjg-[,r㎖6bӽhTF1OHiw |\&F[z.{pqG]bB A=muA3=*x`jhI_GOXBm-VcݠwNlű+|\"uO.v.ݼPV+^Vga6tXjqh$5 J343_.Q8M N͒W-Brj?)mc֢7k _ў(~KUWY+M*T@ia/hB{(6wI>7LGk}jGB[/zJ ;G[_4V"T$U=#':b"/>G {uU@F|BXlh&|7aa$Ą5l& PTpA3[Kn_.Sj<Nj7, ivOX:ĵ;yM4q:ccN4`Aj<0z4.}57s1s6>YEPg j _Q)htc6? R(:Yu_rwW7ܑQtO4ީlc(fZMm.Sy7!8@sk 6[L6 }Yg e?sr`fûo߲eLuQrJԆMqv`bdTG8V~j2QBzUw\j(lBE&ZIqda9Lv?S^ ?'f,M ƛ "O0(bP~wGP5CfnR] "d,HK:5ym+F3g,GOi*Rm6:eU:MVpbqr#3ojgA)NeGq%4.g=3eb7#E:}eDN^e48X:˼TD ;-Q8+ȼ7yzlgh3ioCzUzn M '%04$a_€ nl5IuĢrG+"%ˆY}{$ZFs7]UoI@pxdCZFWC/ HxG;oG5í%Nֻ]Vh7ou]=7%:Eo泴:mP#%~s+?Yuj)ep" |e[ xZG-ı(g5&gI%tsËԀIH}ʜ;M$rZ ^+Ȕk +<[e1{oTeQ9FCk*MbNJ 6`jWpTE\+a(̪r̚!sdj!+_3Y'ӎk{y DxpLʔx$ß-ܽYyGG_V:vl5J?OZTө#}bbP*߯(|]YBmBOߗ::vȥ(FfnR6bqpScRrWݳtWg]7#q6տpgk&- 챟qcw>&G1owC U7kl64% 'з;Z[ULNq䨚Y[V0s|+OTLi3hէvZsS[5Q:$j;MV;͜I7gH})yz|;U2oH/Љ]By`Y.-U}pg;ji曜kTfab;2U2nߍ>b0ŎφUR/LL5ҙ4 u_0i'82Z/9ϑ 3]ؖ}oŻe>=  O8菖\t`?5f.(Njta^43lHYQc$U XKz$B#B/akLnɀZ׬G4ī~9׼hUѨJ|NyVqQj;Pc d/fZ݆I5%4f҇M< Jx+Dr`>~9A?t.mi9$Z| ?+níkfA9ITO`f?;]O=i$uͱ&U Bz.]Bd8+='梒<Gdq^dTpwnPONKs뾲ZBjOxd6`F_ly/Kg}1 mS%Sv/,\@Vuī~%yPGŗÉq/v4bj.g "DN^_!hRxxe#ihdM!M##vM7#fnx/Bv S[Z,ҕ fTix:yL0KýW|9@`ܾOC>@,Tcendstream endobj 251 0 obj << /Filter /FlateDecode /Length1 2599 /Length2 17040 /Length3 0 /Length 18551 >> stream xڌvsx[nqR܀b,v&&&.PcN% j^̿Š:|R~V@cw o#ff+hae$ASl e !3?_fUТ""z&= ++o"%c$/Wi{srv PgOͥ` ϼ13~1O_.a1;' 7[ۿ,0 h\A Z m {fVnv[+j Z a{ hs3q-r)YZ5&=PUgfb_:ЮڀtV鿣ۛ:9vhX>̠4z5F{W Twk9¿E#@AF? (qALF?( P?AbQX*Eb0A P?Aՠjq,A, cS+Pol̀X~A#bbDk7q66s?ro? P v-h [bg@hdj`kk/ P#r;6 6?.tͭ[ ? oP*uh/ _AiITupAk@L~_dt93://ffPeԠW#Z˔/ßN_5Ѐhf1:kfPuAU{v 'P.."%'}mj dN_ ? W[APZ@ (ן$A@Cׅh j_o  4EXw0 gΡ~FĆk Mۦ -Wj҈@.<$xxx, H',zT C%wCQs[mr14p{'E<Š*xŃyjn3E)[e]bLi2MS2:M'wUhFs}"f%\/L8yƺY-;e{芢P_[L'%wTj}K)?ci%!01K3#R,;G njy.t.TG>wue!3sVPG*G@wce? `uMROshz[V SɎ _| (ٟʣC/*ς&+J13*/e ƦEZYAE`zݳNӬvwa]m77Z4jǁ߃S !sRfuQ؝8@QSEFm^AQWtFf}Z05@Т"]1 ʃ]) V%A{M֧%eo YMpő1.;F-?";͘.?DoMGsF'dxȟ BEc~x|z5u ^po˒~*2}SUA} #1js4 H%%aV}Dt Vd{ ؒuci2AuQ/MPW:)ܦr̚7$%80̤GzQ> ׺Nq_n~V\iO/I"/XfҾ;fÀȃHx\t7:PBP` tW;/ݐVʿ\*U \~)Z`;t 5[A'sɓpqכ [^$M؈觗MZ[6lO.]ӚokOPuL.H|m#~FMtC~1 aXIx :p2hJbF#7)~3Tw$J.+kȰv341%E# hԮG: ㇼr5CSD5\o|i!i(.RF\:NWGl %Ug½dS*щ❽fpCJhA!XȖ3|[LNcֆa8X,zl J7`YrQc{ ?k}xK"/q1,U?*FQ<}˨c :/=ի+bUVP΃iX$x Et(.rC|n@v!w jӽg'ȳżbda; |S G}?g?)ӤO͠v8c֚NbQ6{<À2TGiޱc {vG"rf'/6_?)t_1[\FW4ѳCgC6 Ycdr5mU#ɴȨOKe=F)$]d1(;҅Aُb#c$tL0~[|.zj>d,"0nvŨ{3qQh|vF4$Q~qLkZ؈lH[atmmWz@?xsG_Օάk1a}[4!d]bfr/Gs[&琠Wu{lsYRLfE=U/$I/VԲgپ:bC; -&:lTI_vv!m;GȴIRlctx#Xou- (M* ?Jܬ%`K@$~\SnR+8%(g)/znU9B=m+bHD <NVNMDL%'f +EآRf9t`xږ`Ke_%Śp4]L$۵g9!&?5t*(تyEԧ`2jr[JWb&FS%qtm$ç$q8|*%+U0 ܙP5UכLx IZ8- tp(D!?JMzZ߬ԠX{aD1GmPR?AoԳX)wx9$<*Gm%5= Zx;x7o(;bञP&pCwN@_Xad ;awoK`kΔgXD YO>3mxa M餑Y}ض*F~YYU'U, >d\, y"u] itn)z-ƪ8mJ]cDУBEƁ>Xo@i['DhI,WbB1 ۤga b9GSj6iuyk|6z\tMvf~_-)g <7[:w>i]!A0"52^10_m_EDzhU#{"Ex֩M#{]enH6K͑yk,SEq?6vU>*\:p.]wwq@ B]GF:BIx@/kk ӮfD?WQ&nM#+E&É!iNq S)N~Wrtaϙ$&jJa8Q.,:·VS|{&5Z:1}*T71"4Le(fyt遞ӘmlXM9t95GHd}t篓;WR3n?0k=,./f_3iː)(v 8.,1.oɄCUa,*.k!%ѧ :u[i{a9I]W&A_k+ESx9k8" Cۋ+޾ok2͍+a5#R23RE8`{PJsL9h/M\,nїEىyKf ko&QKp)aLkr](?>oUv7*@M/'NM_߃c wIP/[>%$Hw^)hτnC:I?#a]mrz{b# \简̨v|) ݶs"q̶\,GjNsE LB/Lk-B,}^>*C0p8^<})r8ZUHٶ広 `TOz}޻Au4I lKCk{QmRE=fwk{r?E}H#zGf\jr7 u44v?~$W8 p ӣG9Kb<߼q b$f nͭ,ӣ"n1dqE[3nP8%BZQ q(X91V砙4yG⣿aw]"F-BĪb"0Fo"bE\ 1w$-ƠިԽn./~+H?䌜Gs@_!{cQ]F\/'̰[I +H<07 ;jn5vm `%,%ÔE^w)S$x%GYۑ_(̌1jPSږik;͕DzQ 9X?i}ice3.ysMWb j:vc(xXg1l9Jg7]S2{e!J91r-iKJr_z"T(`o[0%1gdUGBqcȜ)KQh1\../HUU0#n7wEĻ˼ZL/rTfʷ,tfL<6bBP嶻8HGjI7!ٚxMi#+/[Xq.VW1J 'zT{c/#2$hw;gNse帓j?Q>2fm:wH"^1l ^b# {(~/0Zu+) ✖A9m ¤"BuNe`QLrjRϐ rGuJYPKMGLf۱W2$/YxNRdq3oU$[ljŷIMip)WSr o7v~C/TC3뭭-Ojkvh^mD4_W-ô?SʷLӐ5"`oV4 F$0ߕپkKnЉlP7_ 48AKl.Z>>bÒ%Zۋ{9K\DN#C )z c~Srd+O,ɧ?$Nlq(| @@orumߧ9G8hJWQ+ȨoFNjG׀l\>> D;d@Ga*}NW毟i&k4 I9YΥʊ}c ,ȩt)ﻠx. nu}SexEHc+I_Syxxnc-FdyirTVqx(Ǯ%תP{H,uhVl|X;E5k׆z' Ȃ`'ECc)B0A#-;8`N4wiUez۰49EnSB=FcY0nTl灓QowEr.zI w_#lw2X1x(t~go> Cxa' s(]q5}ҝ'Lq0Ӱ;~ 4frF_ 9;(?.u/cT5\ &#y%Co9eŰhmPiITE2Ä\"g$]&OIĭ/R|MPw=ONfzl((Wd8rAizMAwr/$htd`b:DyU /:ꑧО& +鎷sZBM LeH7-Ds;}57 zO, }s&qٟ8~}E,mYO^R+,yG"||0|T{v=w @# pn_-/+S,8.{&4 ǵsxvlз3$6#Mv@CScs>M_bqn!XTuuCa,?4dؐee=5/|XcMlLF݇_s٪Fd]?~v 3^*Xtǥ_Po;vZm=a]nCTmPסg4P||m٣yaERp5r$`TYrVT c\4zYC:b(yEfà0DC(Hi-&PhBظִfʉJ<R$5z!No@`(ohz'n1S(gVtc C ˸x%(cwoF)PS(sѩp>/J3b*G9c"8}|+W_U\^JbIVv- y.dH:D}iDm"4ȣiՒufO$oB3l9"Stw`!^ٛ:vufze144N$TЦ.3>*a.LEјU|op `Rd ̒[S"XN;^jHR&wK}0/y8*P Ǽ#[;bCڿm>q}?ZLmI6Ti`L:H-kokhJaSsn E4]{ĂܞC|붢]P/cM瑴g~:8Oқ\P Q0 N/Z,ɭd\5([YX"?o%a drd;T }w"ˊ&vm4r$s-e4Ú )89IPDŖQ0AJPD/lKH$$t3]a]`dvj"bw{_KY>eը-G NSKlP~||y I daa1+Bh^HϢN}F@vZ8i^I EV6k~$uӨ OÍInyD4ܪA(^ f|Ļ3GCq$ʜ|]= 4O-FÆnՐx]Y&$O`Z-ݎ6#!Nб -k]9>k(hAK6w1'~#vƯhò .kGl|xB!6Iɥf\ 3SZ3*?6`#8M *if$ȿ$ʁ.AI}"h͚^6fD37~C,llqss YO5κg%7?R-qy4og q#&,GpsZnzZrq\hh AysCJz8w{j ~@B 1E\m:[Dox8^~x|jX sn,5N^eݵuaZs-7ACy $DY ??9؉7 ̀lH^ I*Heo"eE֓>>lVY?ٰt=ЙytMLLz; T]a7[aDkl@TgB||7)Fۂv2JZI`^B)xu}ykP Aɋ;:اKD%Wauańm+") U鵕}r[)!2td^ =h-&|%Un9{*x{ȍX;F9}.9_̥/;<029qgOvGXg:OL ?B 5`f,h4G1Eij|tdӽԘPZ!)sTԬA'NޣgkIs@ z@͔$eRϲ. |`ي4w BdtHD[s=uWϞeu0ZGw ;#Ad}h=yh~k u]YS9;a;Ԭ}ퟆR6/>~(VW=lttlb9뼟rֻp3qm4Vi+ݎ:` ECbzlLt>0#ᖔ"Sy aם֔O"9ugZHOܢyhd i$*S!ԗ&e}2' R.> g}/kM& ۑB=Y`TbR1Cx[OHEZ+\zTE&(7@vȿ1!/c%VT]Aq 3[<򌇴\جdypL&OIyS k$o5Ɩ(pu2XC.&I/B+^*rb@2\}LK jz!I!9Ik?ASh:*ӯv=D T$)Mf%VיEYFw6kF#C{)u6 r)-!t~#Q幁έQe75B!@|j8|К (~p GE/}y{"̫h}-4a3~A(aQYHڌ6T{h[z(eJą2UOJnps™tt Z_VЙuU.LCe= ;JQsT-dˢ,#qǔX!q/ǣ .{% D+p9k#42`0~ߋsGBKEm3:߼kg蒼;K3 [w;A JZlUN+v#!jA:md`m 6vFIR/kwe7pu+EC\=[)G &i|Ҡi0 S$T~Ύ|iC~i&%4O'HS;]Y^A HWk%ӧGC0}.`;00#sBJC]5Y>lQcqKl֔v 妿idcMqzKwt}JCka^e"' m]@ѩ2 01yŕBxBezI&6,eƚ&]Ɖ=@"h0mۨy%_F/.1K]n_V7SK_r7ԲrσivЪҦ҆ŏo2Va[NRw]!&NWY7ջn‚-:Ǻ[ j׺/>Qm`>\4)l4mmL1(*e`\@{TGH͍l ",atw!0F4mYnnmoX в&[oeUc,Od1Y4Pap)#K!ى`EVȠ0#C#(Q~mȇ5휌fD$ǣF N_%BC':]4P9+l뱃pbT35> quP"HQrK$=w4w{fr0wYUC6ҌVW>)OD-IXI>]l_Phxmg^ȥ+]^ö8#~8jh}e/!6} p8ǽ} tֵb)정V0쳓:ϕXRF`TMgZ.i颀,[o]+8z0)}|Ku)/0B_1cl'TPզ@BdI'KQ<ݪpn,q]"(nI1ezj=v7gWwz6"3xkvM=0rg.{_;n|olJRi|A-4сC3a*L(E*Ç8,J(Enuj5:Lyiݱgq|^8lj"{%Pi_ps'(KƇ#U)&suHt*:=3ف/D@jF÷W XRxyo/B=*o=P')&zL-r{inbp3?윸#%1JKojU3blݽk'Org-I,'(Hf@{z fV+p{{EtucD aOe3E8ͷ ~!@Mg ؑ}$ʼNU}dPt :$.RSt ?Xq{酊ljkI7iy͐3GũOUJ|A [>AjrGw8_d߷WBLl’c0 ?<80:rESn}cs / m!J,&o}l)x|E@9X?жB_-T?n _S+g|sR CGpcm{(d}>K+oPE7LqbnczxQJ\X;jC>OBy|&8S9_#mUUk{6Hy)uIO FH%# ƒKvrv\5o9YyԍEc}ʲHtJ X] =ڪW:Cyæ!<Liy v^ILڏy 48܈d8z7'x_q:p"ٔ4b%yYɖi;wz#ϣ4;y+0#7~F)}n;Y8bU|[65V;PEqrV=}qewR!N4ϑ8 ;8һt✡⶯/t߲ЩÿnKCV٦+k? uPl;;; tL^o W/*0w\W؊<-Ȝ(=2C`rRiBM v^3L@E3ēM!^FA Y OVNJ0zvj)"i9*HD![D h\{3;twC8CCXh:Afob]_$A^ s[)>=$gxvU{&Zz|iUkr|j ZM bցCY3>T .$/9ĞQcH|PC=T gg13')m@F{ZKoe`ԇ_!zkxSb(Rh8WĘJ.g]O9jȚc޻;s5ŝ*/P!}Ň] t5*Kp$5sV|+.s#K'$mh ech݃ɭD<wXK!k+}z:A5H&Vk!kF ?5-ؒ6Fm_%=?\M;l}0 Q6K™TI<q 6Ňc-W'l0e 1I+93-WQnOca @(U"œfzJ&IÏj6yzQT̼BKPHs$eqndvSM& T^hzZB q=͖2C^48KV r6,Dxa:gPsz2xjgLK$y#Hy1{)TF]N7!:I3`Zl'6ؕycU,2lXvQOgTǙ71L &|*|*&ꆽ`G@t[n ] U+< z==;'y W}+gft9=ZaKU߫{rc|MYz'%vV.tظd(JY/i,t'׸#kkNkK3;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\SH2endstream endobj 252 0 obj << /Filter /FlateDecode /Length1 1409 /Length2 6043 /Length3 0 /Length 7012 >> stream xڍxTS[6E:{@@zoBoRB $Tiқ4A HJ.M(# ~Z߷3̞<'Yd, E94PHPXTgl  pq1_v.3BB`mj` Bx"@qPR(%#*  P0 Cp}=N>x!|p#z`3 # p)x1woooaZ'cF04 lviM ` Gv1`k@!0$≄<ںw7X7@p@a @Pn`/p#` ]aFFB4 `,W`!OhF?{{H* ĠI~֧A+gH7# u] VH90 QiII v8ˌ!pĶ ;°_$h + C0Iwv{`- ;,à($oZ)k i?N_HL $-) )) @??uW6].*x\(,sa޿~WTBtc,+]'np PX- 5 tWƪAev8ZoPh' 6JT_> اK_.VCW AAMLB`g]IXUBa> F0@#ʃ`w0PPcD<_iǾOl/`kK0 B27Ȇo;Vf4Lh%yK9qO#lYtوW9! Zy}G`PӨԣ$C {k|kR]k?^v׬nJt&LrnCKv%̠]xj OmK܇SX+>}$~X]%,ܡ~ڤ;hnղD"<{o}IN! iEILv-2ۭf|!є,XS s2W%ƧcvЛDZk%&nyƙ}\VP&MqSI}݅\9tSP^x[ xu`W>sv"$Ѣ=kg3Q[-$FgiǗ0djДRH071]пj)@9xuJ7OCnޟۿf@YrͰ+mǾN^}>̭DxVźDȾBw ;wY;˳PBDvN=}nϜrl'mGaPS#Qѐ Ѣ6ԺvDƱ+)Tjz{*jj +􂹥ÎȾܦ&ՇM#qHV: 96P՞kt3ia9+ ո $k_eTg5{Ljz̈́QK" ,Xu/VĚ=k.Ci}&lty2NXSw2&qqd 4~ ҥ5r>gu8(~6( S=w3{9NGom"! Ql*?۔ER Lijk_}1ڍ/FT0沙o2=xocߔL^3}a XF)/~%Q&Y\ٲl-;d-PZrjSdSsj+TtڐE?nCe6[cL@>d'O7CJMXS>fzeC\y!a>YcBMAڵ:#ehÖUm;"^FͲ6r+mejEP-x<Jp6-Sh'0XYBcqgZ@>)8GX^((n3Ex'5uހ"_z3ϏqRdH:Jڛ}ْuEڏIBH~KRoFA tl|K K~UA3`nlxiH:n;ll_$ mEcBb%n>FmT8i\sbj$py+-dghvBӇ8~- ytL㑮R]ǯ\]GGlo s'=7l31y΋YBƂ.qhOSaɛѽ)7 Yn Mvw(Ra0 AJ!RM9JW1m[|XSo˒^eqN' ӶF^{]ÿbӅ;o7guFU)TyݑE;[{jK}Mb]L#qo~0 r7ټ <?%a&\GgI~J'aprW|%R!&A:*e4y/,3eF)@hA:(g%WFI ~[vs?ܽSYNa<$^lHѩjv|s_Z.E䡍"b7AiƮdg*ʥK^Q-\UOY8 |rjqoJ?|? 9^9*z3?,q Sܥ,I<%܍r#N;XwlΕ Bȟ7qFenHuSYD@[:Ŧy$np'OqNm'X^v$K=zK^;]K}P1g8GZ+]d jg6L['ɴEC29i͖֜19'~6h!MUJCGJrt)).~@-n̍\YUӥ vju< *F(4 &mGtYnz;39vlYT|5SEZHkyq7T .~iеBz|T Ѫ3!P6aQM;!Ctd\_QZj %"ٕ];6K3o/$ >> l IP- TR5V>{y"Skz>]i'$/VUBiٔR gBXi4Wgo>$˯"B) [Y vmFlz qߘx`0F.4U# yBzڀhf_Q?2+3 KQ 7 XzS-"'%<;綴tI D HS@t@8!}l RC:_XQ¤&@]Tݬ>VH)YTe)ˡ3-y1?[uGϐSF*fdb~唢8vw,bk`P"_xm'qQ|G![ ΗBҴ"=Eja6'믰Rn;;w^hݬ?N0wW[D1^fTȥA)" ,2}gA;(*cDUcz`Y#r쬧XP%ߥ<;n4I^5nsn%5m-,JBʕv{M "8>#*NVj,sɵf+ɱpƝ̭Fi>/]}q-Q.yf Z VaY4wiG>^YwlWMΔVJU[ԃ%Mڒ:x"ՏݮU4~븪qQROՏ,4 s( G4Sz}:c{Web& ph>2et[ xLxB <|0r?uX{ea3#}"iBSMՀUc6cYPfX V[ eqʫ^U bWHI?4-}p$uh'> X9:%jm@?Q\s?jU9D`<ޯ6FPp(s տvrJI$3ףG] 7X(3h:'6ޤ0yAih$x-~o-#Hj%QM-)Tu'g7%ڋ1i"9ob2lh:}&-q &9NWxzA?`zVyg_+Z"=`Yʰؘ3WDCe+37p⼮P~mJUsvf m+z;}=̘F|D 7MgPhAE'WU&B?bb]߯Wҋٺ>;RI$ i꼚I={ˬq 45J5T塾*쯊h > stream xڌP c 6m=-wOsޫվzwMA bfosa`adɫ0Y)(@.6)4N {;X9]e.vW C{'^ :S;x:,,]/ڔE;@25Xm3TMA@ Aohlhd!HCpXT@'7/c[࿩1S,ARڛ;) xP(:e,/z`ado{d'`%]<\vf8ۿlM . ) 0~go~ΦN gFg_ f ;31{[[3_}dZٻyanrtJ]Gftp033s%_ <+Ysvẃ?n@+E,,3 h] 4~?'@}X}O}l<}Lꚪt_`pp|71USb߻=^R[ Ϙ1s0]_Q_V$jc_?zc[-}7j@3J ry͔@.ƿ d f003rZ# ;Q%c;9{3O+}̀1`nבrrD q n`/b0IA,OI0AE1 VSb0A|{>?蝑]z48Z s?r5U6/xfjo~%g2|O 2pwt}ߘ?.3^91Rۻ:(?%whwe4Y{l+O(wW ~=e?o{?e{j43S1Ͽn7]x7w~?BW'bQsq{ ?w=z?w> {P|w:+0Nux~~Ӂ@)ʢ)_Umpj|wI9}GdDM;đ^Ե] [UӖzx'gX6iSB85G@k.J?y YW>Ex.eR ,1\%va E2{7=F,K{V୳ak\չO}|[(Igɻ0rS`)ls|gWWNi8o[SV"\ƾm).\~P0':3yhO[[)]Q]8&uPG_Lyhn|>39Վ2 WdxTTF. v=*608UI9:)ܲO^ 6 S&MV:Xȩ\#5Ʉe~U ϴIOȇ 4 Cd77%k+bKqh3ăcKLMR~Fe?ZC܃NBt6o SЭȠ}PI-:ï:]^ p[;N_M23ף91\YZ3I);w NްߺGCE3vovъe2qúAA99Zdq5$F}sofnNL>NKiE*"P#ղ6wkk8CDM^l%?,#̬O_]Ha)VYRTBg)5J Ѫy`5u+ZFܞ1#FTp;'\\A#\*u~vG_RZ~&khj^d}MjxI+ !y`Q89@ A/Kh,94ǁ~(ow:o[]<=cݟ1Š$1F>66Q}mZ>%Eb*hi=Wi&7/V@E(!31; );{v3[pَ^5ccM[#$$_fC#Q%T +zH|3N|=DZd+2?L]cik}4/.8׈@ >[ cunIyJzXA ٍ6А)͉p\-o&=d(ثRD<qlmPJ(u&d!%dieۊcOA#"zĊ9*hGBY*ٝ9$*l -%z^#pUO*œz[B  ~Kb3:Z}Ͼz 2.-v_QTw(2I穁3Ĕ5q'IFowUM4 t$ 渷@DRmY@"EKI}5uL]}n~p*&rD*fi9+]kL<w05/hB'CjmGyÐ(l?JsxZ?MVَ ɘɺ#}#@1{`NA^G EΛy3&HFs?$N. xZ_{Y3ꤟ"w hY cx>W`EO,]nZ"V1$Pן9N)ӵs@D+!c>8Ÿ!nbUJ@]Ic#;20$e^9C}y4y".Ftɓ'+' H0H|^+i+'b`h] ,c^Èh!;^T +` Goq(4Dpbnq\~}ZLL!phvnT?l枀I͋)HS< Xd>wTַAo\Urh}4G֣klR|tޜۜpzux$J?UnƲ n9vN0o#{$E~0!^*ֺdt0d"%՞@TZا?`Y~ؘ6o+aZD_#LUf]t$Kda`+LʛbI+4* ;Z'M@p d{^rSW/M:"[y@}|CAID/?/2qZ@aDHT :"~u\>W|0s)"TK$WyF1| Eʋc2[/i`&:I(B ΩˠF{N5 fD%B P[u>*Q$B6hFjNI %O~*S:E/f 8 Bb5F5|OI Rܫe)PjyB^ӻM樹*ٷ_ \6HԏS搜M03wU}c٠A0{ŽLv=* =1pق|* I@:,xk"=59TO=V)DxmhSְ*bIh,$B[Xh-I.dD}[B-3]@]l_%M"3`N[/app zu#N݇Hg'xѫ-hH,'fnp/V.~ǾJDG?-)]f+$K* ggYc4D2EcW A܄S}eSHCmFTښ Qoq'PӳI4^ )[ {3m2c飋s.vic[ZS' , 5pެ<|WًkwXS4UuS@H"^* X{ ۮcz!#l۬YK?VnG]" mF=Q#7]0|↢/\z NvA! 2 'SW/%+k>\u*Zu%w|\=~\v._H)tݳS*sq9]mF&#ǂ-!_?,A:nR4܃Lܴiz.۩ /gr,v@pX~! ǂV NkĸŞKN/Mt¾CUf ^w'9~N8#:ॹz̒]^x-& sJ&~`95} 'w*H>7G1}?? HKzsW8cO^^jmoci2ZZ7<ĦCB[6m]3C&9|$LtZ 5r/C㳫FbN7FFF*ICم⣩C|2-%7"|:eؗw0b{WVCFDK*?Mycţ !e#raA/>aOdBюky|l@nHƨ?޵ 搠x4g$@mV8T?a*+~R徎xCA# kO@nTI|bC8d:25Ro"gXsRϛLm9 3sBWbʁed0Aas")?UƉaAj1H[Fa.aqJi6wj޴zjDâ# }`NHv{;UU_ `/hξ `YܓpVŁYqҚ7Wk2PA9Њ&|MH'QQ%wү!S[] *{hm!u0|_|ʉ~ E+f ]㋭f2]6a>o]6KА%%Fd{]KcˊhJUThmqM0FBK0!;\  q 7q l 6/o\ovr/rvF0J/SiGe5戠N;pRJM',:}rE@z%ȿA]fɠίC @vgcgKQX<rL!&.մM_8=C :/@[l>usᙈ~ NX 5yĄJaK<5QU[L um) N~>m\IaΨiڇ뤴7mYnюo6#kDS anMB:WYۋ?̌H~C[Mtp$ȝ[Zܢ<-yIX *ҍh#jM nW+b86k7r ïxe']G尺T7Ͽa+FCV2 *c_XDpC9m~bb7_+ngI'U* zg=Gt I Yȫ96Ф_/XB2ex.(S!,m6ҶW`IjڙNh(A6U Z[sۯcg}5釳yWpyt">{yʮ>7FdJqt1++e I_xׇOpL؉swA)X]," LWmC#CѪ-"ˢyc nDƫ!..9򡟇&] x&v3 Wlq= Q>*BhʨKPU5a~,#t 7u ϬB*^8򫊩Q(`$x"GI!Joz`Mi#~3EF]YBjrc7JWv .\*j<4e7?~ʦܑ5*e+ 2gWkeSDu#5||k o;s,-`;Eǘk䤘,儱wdqht{?~y{k&a2ix:og z!4$ȥ1u4xt1G ۻ8;/ vO/פIK#62uw\w`4 \1x5v~{'YZ2ڛe%D$=zi1[[zK%BLegԙOA_(K=)qRNA(cߏxt}i'P396nJ7+fsDA.h^3{|3`P0S{0}zGdMA?458p֪wdf<,<{BE0\ks≮]1-l`%'ML+Q!4@=bѦ }5c}$bT ȋUFՇψ,psKFZE`p6~jZ2"C>(e NF`DZe恬BTR}~oz&c>e+&;uY>ޯų`d.'Kl>ƽEv1${Byr~+ʑ-ZG@$OA^|HI0:݆mb9$p և J? :-[,J3UQnI 3BJ@fC̣|'njm'Cl'|Q}@7D}NxB^+ _t`iNH4ʾ!u$N]0YJ?ثl ~XF?Jj'o/KG@T͟2Gg+_> Z6q^MBoXL-We,-sT2%hwY$}r{[ wڧELl5d-F؝W!FW_@+"Wq?-6^ aTT@) VOΙ SIYoKcX;wRd#"?_:NLZe9zZZKPf?ymd} ܙmX}ʪ.a1:^wzp1E*g +ijQ+JzS#SojC_)ȣ'3I*kڕTxэʱ~wN^!ZH>[z~zLiP $F+%?iV`|o^wx UacE cýP6 1vF>ɌD,W01)^M H;+i 8gqnWl#7}8kEOʳ\晐N.1Q5| 桙̑a#ja~CA4&'T=B1R$"+PD(s[u0_YhB{Naá}3gp';W_>K{T;sӛ ~2>^O^qW24wzzE,0i isϹ֌0ڼ ^G FQ!<7Gv$_RtԦFu;fɭV n %=Ʌq/ŔʇYbY4хTE3.clty}!&fKH`i A""rno4/k}δjR(Al7K͓54;He/m.uCP&i݂I|dY?3zKf#sV$&>&U*g#w,| \&#d̲9/_ӝ^T7*z3V ݉s!ӻkd Žap{1VE$Wc7nJBL~›,tc!܏jUDһ`Al`Ҧ\;ai*sg{}3Z(d5p R{Opϕ+ud<8~:tx$;>$J&/qZ{h$?cd.dɸV<6ǐT>3%G݊*~9@1w_)\lYVT_F~(H+_htG|U6KwÆœ^0d_~tWf/׀O^n_)#n72H d `*H4߈PPiVj BnFʏQ;18|+jAGǦ@`2uBe!VN~mUsXnbB'R zzRՍSiqqՐ1a͵V-6H[~5_SE\N$)n~o.lLfKbv HאKGeaƃNsg.Qޯ)TfL^:DQSCu&0Q6Rw"n&_aVW(gЕC9kc%m /MxyiR[!vgtIRekga5z  ߖͽًI!N3Fe(i6p*ePp>İ}g(wX<P{b!3+\Ō- vzW'͑o.'z1Ɉd%`-dE:p6(neL:GX!+օa}j&H.2|(Ƶv(T bCD;wsEF8qf^Oй7l<8E,YԱh~7( •U@;625]4_}}g-O"(d(]F>~H UQ"mZ"ƫDt&/-[s)qpwQըpTiu_-p$cB]Mvܟ&`P^BZŒ3 W)?AE0*yn\s-] tlاYئIy_%dӳe$b8cDlWP lu=#9B XL]Ȋ˺ҬLa7"M=x*jscGosYf QZuwj-Ց^3q8EĩK=>+L}G "T.Y*XfB)a5P`,5U/W8RdG |r7?4~TqC^ύu [f"VA(߰⭎lh?1~_fbzr.%đ,Lptug4G[ru/GcVKi/wQKEdlh'f~ylHp=wgdAmEEn\ /ˇqq,OP]jE;%g(n2ފߚ9pPR_vK<\s$N}-ԿVA3(MWw.aOOZ׍Y)z.Fa.[eXLzn?#UԎ;:7ӑg:@3WC:twDLS ě12eNL =xPu!Sl7އ@ 7tLECr=:f A4W'`foCOlbW(܏/UrH`jli6 Qk v*SɃd2\-D-N9ej//ę&(T˅ [BL2F~ A[J${t7D{n ǵ'O%RI""@geO{xncNY>(]x9ޮT`$WK6fM-hj8ыt ($2``6@bFI^Kք1YR&!Ի\|V'(9HoA@€gojDhsB|Td|:3䣧F)rBѱ۲r-،M#ĝLՎM AgZ*~l7oCV aoYHc`%pb 铖F:H$]RY8X@ծ~tv3V IJͦrĘ*?VzqQNDHM%jgsPGe[LtuT'$G9ZnB*dy T jem ˤ,wJp;jFwAhv̌u2r:ԕ5?+'*m܊aŋҥB㾶Ȥ4, w5Kw8t7W ː!j'rJf34[t5kӸR 0F_Jq\|B=Z:G]Kq:#y{ 0ushkHN(~VYCeXCB){kyoۯ/:|Щ.4̍s Y5}0oSlH`3#>8>BxK%OMמ䯐( Fhۏ tb+o~Z_ P>,ŞJ\n:6Y\Zϻ~u9k>A˅bj1/*M3UdSw0:i{Xu,>b10GkS.a1& ˢ|lb@f1+#Cqz<79:!kb{&!k8mT9gY9.eD3A}| T 86l\v#h$V4 Ÿ>BuXfYt19"ج}}swkbKKTghMJ1FnsoE!nk:F%z\MAdP-mq1vZ氶M =GUsW㵣ͧ(L{kh#/%`](+\~$O8l]KA0a @dgװZV$y/VZGchH`g?}+X33ਦW4F50 sq8m1 KbfsĥJ-9%L4inRIm?ؘ`@箪4hG/ROuԋ[TH|jT }a7݌(,t4Bj7?ojPu2R c(ajO ,VTShQTZAHdZm G@S3vdc~#=|?ewQLoYSHgejPQnѧA:` *T,(.7fn[*չ3f !nv#k3 \W͛mτ+shKԛ΃C^uN0"' ~`",Mؐ$63Q3{4vqUgv{0uwB2PN`dW\ptd7T*ȋIZ"ѶP?MRJ_0p'EKVE3<>^ߔ :5Dsf#i~;o!!=܃Y)_W4r&*L Lf|9)P _>XN4¹(θ؍}B _Z?oH$ν|bX5iݳWW%jL?@?jl"'͔'⚤KP=k ,lj۵+}f+k(#k+0D)ꧏ WV` PHB.XW^C'.=&]v۪4)LpoʌC1(&ANofܐԭ.iFy",T(e Ur2tٞʑk=Puі#O5*;Viy)zS#` pGJ:3y.``Z;&/mDl0gUd V,l ECϜ>92ObgWZ'\8 .bJ^/[\3?4|~}OJ-^OD Q֓0D=ԩA?!ᇁ5BV3\]@wx2Pսh0*œuxa:(Y`6P5m3+%?ωjo8u (f*gTd/5eN,>{3vzs7;5Zaױ-lhY<"J M=`r߹hYRj`uoO"eE0YC?wCF杉[RX摗'TL 7\uO'rrbW}gYʬƗ^C Ph.#ꙫ$ub.:DaNwnwג_T!?aV^cr׾rJ Lψdo4 U3NL{(bܢMqEMyg >}C@,9|*Eu \CAwoUFGAދ j. Ϟ]Gxdolxp؅S+:\ Q_sذ_fZb|B{B,D5ώzRLn̲惭 :Ķ%|VBf.Cp֥3<=|ݶYFn=|`YokMMy\{T3NNt7JY= 9k kZ2{Kmi D鬫'Y[sqN76-2Bkn]j *|lsm8$B *$&Qۦ7HWd%OEW<_|N["$ U$ 9ƞMFp:#Y{,ĶG˷8m5P/Ѝޫ⁛X<;Oٖ,Os;?{ Rt{4l>]~!@" w n3FV,eqVΔ)Z&SJ ;DhcfaLǨsOa>V |7(^ tL@S@YmiV&$6utpc{7/)rkʇo]h^22#7lDa129sI'Cǖ$MuU!-h!z`GZ=]ך,Ml`1þm(jI҄Q%HC6g\lV;')k̿\$'Vllp̹LX%zb SWM nRen::~ o_q8g}bqk΂jj%}ЏQm3l!JxbϜxt6 >AXe:ҿM?"W;ߴ+UƃkHwq2v*^O:+{}Asb+M>>k''+GVLAHV7l*J sKHg3\aTp{KAٓGZ ynI#J෉hk#" s& uyݶl"k߱#K c ~4u, FX<]"Xj*i@=妟Cm2g3U#X Ԩ߬6C敖ch4zGq3e,Yǯ$A+w"흪ɍ[yek?N7x0;G{ 6\T=zx|>ޞpi/3w JW>I+C9i7ClJw![)2B؝;j0Vɒ^<-[37o2WCpI8XF~m7z2|nwÇq@V<0h:Q5Vxiq;Arpp <{gF[ARY`_ q-2,wdWfAQϒASx˭LX\&p.qcMޙ܀/?^qjdq.e^Ԉb9 X I^;W:s'aq@EvzkyLfUȬPyߤ]#!+2q.(<(:\}}Qƭd/J4ך ZăQ_eɂ-5E-uNV> stream x[o6) ( l: +ڠ ]6|-ǺPv:lGDiomؕu}n8o~]9Dl%g  0ەǴoHbcgrҪeDyJҾPa!Y7.ڶ=m\E0Sre\]jJ9VݾKx_Г9@3~&Dl&v2@mzj;Gwn2V'X{uTlٺy|jjr/bfpLDEn/LqicOct?f+ޔ=܂ ՛ÅeoM]cq^["1Kj{u ׬?OPoz ZzoPWpR Xodf}xDhZr7̼CKӘ[f_gfv8@8`=ks RރC5-hD{}b>8%5pn z Z[w<9nʅKN,]E:ڔEEioWԅ_.Lk[Iwe 6kte?t=NSV-ScSOu$%?尚.7$عe3,^{zO"xYToDd:&$ШR=M;Uς]ū٠xe<H`P=Lب[ey6,9Jt"7ܡr׽>c߇C}+wGF SB|`q]&vvF)1,~t8Fӷ9A-zE[= {SKjCnuS3 fuendstream endobj 330 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 331 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-016.pdf) /PTEX.InfoDict 108 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 111 0 R >> /ExtGState << >> /Font << /F1 109 0 R /F2 110 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 332 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 333 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 334 0 obj << /Filter /FlateDecode /Length 1577 >> stream xXێ6}WAJZ%Y)٠E["Ƀ,km#^ٱMZ,(r8<3sfHɳyYĽUOA/cOYo8wSW93jԩK~<8E>hE?o$WyB_\ZfKkvׯ ,Fg|ZKHX"+RTU9mEyv?R^6gܰb^P֞ۏySdS6{ٵLs2C9/k,[\"mި92v,"KzNȮX{zYId7a0u:0aaŊ]0(Efa.7 ɍ~<iwLJYL>c8ISUZfcFh匥 cT$@!K8}ʓKq.:^YM;kްM *z;˩YY4q6+ 0HH%]K1 3k+0ΘjƬ3Z`MCgΦQOo*R*~<" Y1CB"dQ"#g@RG{ ile)T*Z@&TLRv"[/@.@;yL}Rȱ9cSZxxoaXpC\?@9ԓ \+wvp˵Nc?X]81cs9-3}[kv1-V3P!+;#$=Kbu>2hecFy cjx, ʶҹ8-ڻP7~.'hC @װuyRMZ@N"N{imeߟvP+輶YUJc ;|W5v^>҇|zŬKݘ8&ޱȰu'=+fs>6"ܩQdm~؜o"uwso5vheN&Ix@9TEvn]. c5(tPDep6}ZqZ^_Z/WV[_# }v'NoW> /ExtGState << >> /Font << /F1 120 0 R /F2 121 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1738 >> stream xXn7W(DF@$ ; I-秪])ݥ&7FGy|6YM 6FߚM|`0Ӌ~in'gsazy5x-Olb|*6cͽ9;7WuՏĥ%+ 8g[6{ )ٜM'a:פּ-763568.$|jq.qAfC 2xeu@ڢ|y#XAybr õM1dش%]K7 gulQcUryKGj5ڜ _].`_ߒ?wz?ypejTH{o#᝹|6G938+{3y=uvikM+ގH R"-Ge%Eáfr@؝ H'r \G~6ϣ,3 1{̣8l?<n{q`(YNfk F[}Gpwg5E׭~wŗ B;&NrLO_qdnnn?]ߙo՛Y̵ޞ?u"`4hSse$!w?=[%5.GʀSPD?Q |ByO>!%j/tl(dlO4PtHR苛39-%ĒheriАVԇ Ўc@)l]-D /t&ر(#FpAe:e)p`8d.e- ܟHX!W7 O. w/ ~~=HX K䄉Ȏ)P1SyQߖբ蟼uMKq}Dm)כ8;j|-&׎sgP>_7_ozXG;đo^}8G؛o'^Iƈ-_"j.  hy3C|*H̊7>0q 9=/K\c_`P>F<`VX*<, W~q28VrNЙ?*0A[PuP՘k$ b!8P>*V>JS~_*W Vgt/{{Ǐλ24gYƊ6"EOE˵S@> stream xWN@}WXAŎkU*AKRUD8NnIhx8*k]Z6=kc/uײ K@:WBnZ_)xfdZw{N Ȋ|7zҴ'Fo?l#۷="!=^c>QLdaM!2 >ψ9ƫ0} %6lŐe-dDW%e&L賖<}&M!4xo7M)\ٞ=S^©\0^< @0<}c8p b , 5Xw`b P14Q! `md^\GAByQnTfHߪP{Tl+M?,A2G@"F/I}uVΒ~W] . Gp _l dy7wUxQ=xXsHz5woauƺpekvhQv 1@KϩJW5d i2D3.T-v.;=#c=UǟBG7]H+@u)<(,tnQwoL']\>eB~+vC -ב:$%8-U/ˏb5k }QM"k{W@~caVt٢➐1 ´XV$tTjF.*R*m5 h="a0dLcƐ5PC_GŖ> 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 338 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-018.pdf) /PTEX.InfoDict 126 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 129 0 R >> /ExtGState << >> /Font << /F1 127 0 R /F2 128 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 2294 >> stream xXKo7ϯQ:f7جA II,UMr4#}KˢGuwUމp\>%N{Y_n?>!ßv?\޾,xoW}M-_ٖug7v=wuGyj9ؽly/6wךv~ӧe'4p?'z.Y]<RY)`~a^c)`q:X~揎?<;ܷt`+1-]+orWrΌk(WK& 2 91hi}f%G9|Ww=\~q/~p7 $nqOOJ<έg}9F 7=+k@gƪ'e|a$եqgrW7_" vfew};p_ZfFtPcQm_%XHl^>qoןbs|~L~̟7/_f)>]#yl>C5r(Vo׿ݽ !TNJp _[)5K=HֶQܛB?0ObH3Pgo[^5rY-J𛲷Z1B׭ml jL-dzW* @,Yh9IШ nġlXrtXT#TB4- A˨x".vm,N+/F3^*E30,GIJ\QW HYDJ#ND D2:Rq@C 2P$t*a.;Ye3Rz(7,4P(=QlԹ=-<RSf 04aAh*d 0 {Oi%tqg1 لɅ- H$cui/\F(Sb LH%Y4{SY|kIRd:U#U1_Z<ǩdq9N.a]&ۛ y6t;pX(a$TVӖ$6%vIC (uDhQ&P:4G$y0!chG \&lչo puK C碝 &j#ҵJfr1]z7RHXEDĉzJP)Ko)rfѳ|Pg"zX0,*CF :jH NF7A .,4Dk U=p1R|6ha6&PI/vM@-.h5LAPS+ g u GPQd@FgEi^&e}dzRSQ%F\"I45\O<K u\SRz Ž^*UokpC(>6i⁠2i2d$f dM1ԑ\!Gݾ¤Wnw^6LuNWm* ʤ( -Wk|ZL^͟i,(WSSniulAGyJ̄D_X(`o DS`%)>J/`;endstream endobj 339 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 341 0 obj << /Filter /FlateDecode /Length 2291 >> 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%۸2q, U2މZ޲o'h)e gUv8BfsgbeM+|!8/G@;ٰߒ~0A=yRO930vZɫdcMR'*``0YpvIJDhW"pO&2] iUs]ץHXwqXM͕TY 0ZL@[X-TZxoi!5^Y&+D'SLV/- f8I>gk{x^{b9Bڵj<+hOI{!R 5|ČQ.\~6 vh ɌRePѧnsa(E84-*7cﶋ,s$|@"hNuYRHYVTk:Ki`3d J\ yRWHݒ0.q`C?*") rP=xzVu+aJ\{175B<*r`>`#'imH_<008VwQfOV'I3!,w7ϯΊy~j|$FKr⒤)ϹM~.aH *lE5a^=W 4>JjMp,k:VG wFC$uקfPJ!?$2|Z0z=0#d}}Ta*M3Zf i':f?X,VA!B> 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 343 0 obj << /Filter /FlateDecode /Length 149 >> stream x3135R0P0Bc3csCB.c46K$r9yr+p{E=}JJS ]  b<]00 @0?`d=0s@f d'n.WO@.sudendstream endobj 344 0 obj << /Filter /FlateDecode /Length1 1549 /Length2 7676 /Length3 0 /Length 8698 >> stream xڍwT6]K H!²(- !4Jwҭ ]RS}svk`5S"m`*HO$ PV2P@ !~Hr 0((aj# w'@@TR@L@`4 h 07%+9G !!; sC6esƜ; 8 \($vvGr<({> 抆A耝aO01@ڢ<0nw 0P7"@fGc1p{A @>?YbDE"e_=UTDz||" HL yw]0:#Ta^̠ \n 1H| %;_YwwI*NN \2'#_wf@7kàpwP@9=K Յ hѯ}s#`H7W O/f ׈FnC_٩ OPDvu{`nD0Bl)[ ?„0l$nYL|I6 7L1b"˜`@QO6yG4o5 qwuLL1 ~`0g$D*ء"\ރouP'To01Cyj1 =mFPe]@CӌJ*/c>f ;f>' 갲L$];t#ɛvdmSީi4|j.E a`m*rx3s9:hExN*382-]PT7a2ٷ.2SoبRvR¸獻%-C_mSzbXEx6zuqs9n+jۇV=ۜ (8T/7Nʫ%㻱TLtfLD69R5|q[Yc IlyeN3]WT^o?\it]KW<]!z, sj){O?(IxO E 4B_ ߿3Ve+\v"MK;{z¡{yw0y_}EYeU=;VU՝"ݯ?|ڻ\jىAf",fR" lbfgG{WUZe>Ԕ/!f dAOlxAG;3#kSsJ^=|aS9&:z_*h"!WRP"&F"q^rܔne@`79a ԊgqE3. 6i'7-KܬIWЬz^ IQ@wc&6 ?W\X]7Q6b}6(NJXuD0a#c&&,q}N0ve,^| x@ w;CvRKoP!Ůdwa2*fhĔV"?>~9ZH'-'gW N;6v2!Hpx,ZY|DsP0_CԋAͼ^aF+$8h^.9܈##:6RjpN;M-jy\`Uc]e~y#躤tȗREq"N xQē<\t8gcZ,}Y'íġ )9$JKh\Y<0ש])AZh]$]qɧloy4~6ƃu~-ewZ~={lFoՖ(M3tq{[A~QPcX8e>[;I~zѴMVPD~BgR~8KEPr"lE?LӞUqwqd!֥e!S+{}ǁ HI*'4j0t7zy2KCI:ml`rj땒p=l\b9΍ 뛱ھGS{:ICVle+( tz 7?fT}BS!Ou.#EdZ.}CGwdQt썥rݘ7&ؓvM|ujx";Kol[-T9 T5+H.10dG|-MqSMp冋Zg?֓),X[SY!2q}fY߁, M4>k\fؘy%Lt{?ӵ\Z'$sYxMIi+Y'ED'yGh1O~| - iVQpa"MmQr#$7\Aƞ>'pvL%`/WS+o_UIlnϿৼ![(w8y9#694*$){68fi>X6s%Vߔ.Nx NȞ>{*%d(3=Ұ-3C7.z zkmѺSZ!qj+D{uNEExNptBD4Y]X Ц5x\غ">`jՊ Ӣg Z-ț7eڧJUG2 Qv['*:_-R ~VuOc\aq[6U+u^>7!0E|K"c1'Ld]yl3/j+W3" 12Yr,>r9Zkxp7GR\J6YU8\ns6@:b=_EM:|3'#)ÒHRӵXCxYm_g#d8 F3P惟"[Y&u" OHq_IUQgs׬Z,A7IZ_]Hg-M0.zxۈ5:ZDIUM|jhj dv:5E>gNXJ/DPP-Tx*<nT؟/[ WX*RNļkSɰ(gKt=Ȓk螿&8S5(0O|5J~a?֟錛q''ՄMEBZeܧa W$S?=;?* b CQsG])Gr]K#v?RHGi^cu*ns_28CFUE> =*W*CI!Fy?uL?nSH.Q$\!~ժ2Va>x;h@6s1#^n\;{擇M}7Eͧ'őd! ǂ2d{KEԶA,ozʾ'{tn= _QZ=3T(_%:oe=\wMS{K*aduTW_ Hhm f̒O׉z$Fg%]F)XMǠ\ m E3Pg ÖX?d.l$wq,iaO{Ϟz}̢T,e^[|̸rXj~lVHW?3)$:xUڤ 'L^cs׻B Z}p@.h&Ʈqʮ-*i"D.[/D 30.{!͝t<1BdYsBl,0[ ˇZb.F-lRRdcqM6yKS=ù?K I1}x67b*BziibۋLE%zύ56=tc ͚pnoIyVQSjnwO! >vd=THP۟.xOd';'p2o ZT}y2BsN%E~)({B4&"*|Ze-~hjwt XSxzq0C|h#WPR MGtn[!yФ$.qv.@J@tyaĺeB80|m|Ɓ9+X!~l=M^-#',ޡٷ x@bfo2i:4 k8{AM)@sg[%gh4iGtnZk!8gmT(+gN>`\p5'%s_MČKAɨj諽3,SfdsIh*^lI ww/t[֚jm8I Rפs!Y-VT5eyu\e9b'\=sc-|IBc#aNኙA(e$s!Oƻam"YfƠٜ/GG&nTS1*{):bV{~$3Y0כ{_Ĕ:xRXҶ>7¤uYt!"q$w'f<-+\|hKُ䤘?p]o"?0`7B>8Urs >2 VgVXHojmw]Iq{O' |gRhD /^/oGH̄x|S'Iv)Hр%E?G%q$V\'8#m|E š x9?0$ڭ2?sɉyP,M 9CMS%.u;oxm wŔhU#E.V|ZEze$^x| >xDH7Cҧ?ѳӎmPBcs&`%hPI~L?!+hJ[أ>0(%QEu]|fΐJAFO5׳T?B{lPaͻ2mwBr,4褴 p]U˥E?HgEqRvZ5Я^4(>n!oķ}xZ^ ~*3!ē,41Uw-U4Gii޾ŊX*I@.Ocs׊}"NH$dܲum2 őCU'= SGRkUƃK҄7=XsfƩj%[L`HtaJ2/GneQJ\E2†G 4F9&pJgF#WⲠ]˱Ml·[Y,[+DOs<S`Bݼi +mȲgOH>_Jڃ3i9)+Ct}t)kqMu0a-v6ovHB;2Vreͺ0-u>!чAgÄ\q ]댧#< BtOCqJz:jiߐ|5~vQ=A<ar)ʖ;O|Uf TvKk6l9b?5ig/g fӿ IX3$pPI!b<]YهKCe_|t#Mb?w~ 2Gթ3lx $)%+Ѧ>:PI.j֓+pƲRbn" F'i77U";|ŗ K՟)6Lv+lU)X-aBA1''~$z܆:j{y-JokM~⩩M1Z$r\ %VG+ FMl"n'3r ?ez zoKh\ [mAendstream endobj 345 0 obj << /Filter /FlateDecode /Length1 1400 /Length2 6279 /Length3 0 /Length 7243 >> stream xڍwT.)Ht3Cwt0 00C4- JHI4HHHq޵]o5t x퐶P$ JD@ (@jC݄Pw!P0 S8-$   DK^0;@z*"]}a(1zp@8 qqQy; F(G D0@B`P?JpH9P|`> 'rC=^P;`Y0?~=p@gx"5M+{7f*CNC HW0pP&#~p$:hy==< 0W kD_eзSD@(_)ܡ٬3kvt7BG_ }]_nHW=zh !{A(wOh"v0 ` u!Sẃh_?YeD}_~%u%}?;@$ YE ?j{$-ձ_p'ŴhB!PA;_U_$TP;] 2F!Hدw : Z_g?!ZlkeCrgE`ww/!zhKB ~>Ng# 5twGe:L"!aNat޼R{iVqIYe*3 +mW_W}NxU;0&Nޜ`N$g$i5IQ/Qރ{C+I{mt7yzxvLMJzqe}Tm15{K“oO-S_2iH&yW]'fx"UW«2#.zy!*8grIjFNPdՀZܚgdgVeBX=ku5G!nj7!Z*^.8TmWˉFK)F?#W?63bn>{n^8!yz0&aѵl} u¥>V1AHG(<-[q⺸Y5v+z论Ǩ/0fmq;$8{Fئwfo6Doʼ.)s$U9kg# V^RLhPx^;0SI|(ДֵPNHܯ:{E~o*ʨ_ lBj3:I:Xkl ^ ؜r`WJXEH!VO ),uEE&?f~Hmykؗ&~LīD~ὡeú^?N .\h cIBE=鸱:z/&LP GBh˛e-K7عYͪ\R@'7I r6.*FŽx+0Cq5?͞CR0D0li/JO|8 >,OGFBjKw`siQ5wFY2²s^U4/|ebɔg Ʉh_ƨ]_ĸ!k`|Y|]o6A&_;Wu>wȑ,+ot>>D'eMټ"h 3Xp7{㒂3bEsEϓϣ5o|:>g_5ak=By_~b&U]}yU%¶B-,Tԝ؊nVl0>X·,Zşۋ}vn!\guv 4}8C`;EVC^IѲM/OU%\G#S]5u(]g* j?Wv=]]>!hBǙ4500jhJ$+HH@!Jdkփߤ**|l]ùڷh7t^qSg-JH}{b5N[ke(Ee~FKZbhr+FT#FHKZZ1_Tī&j;}"`7+T',qߙΈp7+껥/A-K5īr_#Q7'w"zC6ƜxpM]FXqR:ܸ@)P(ŰЀ*chuuRt^)")>lغp ,`Qxȓ/aپiVx`Eզ1^".e$Cx)f!wsh&SW{q-Oڔ$B@ÏB/тjҍȰ?n?žxGo;\{^oG#~ b^J׹2q]&Q|idDNל0'oՂ F=S/}H$nHhli` KgWZB:w]g *$Lp&$bH$I[b1Zi90vm"l/d l( v˻w`zb#.vhV; ݈L2PS՟d3?{y&ojk^S&"/8Rkzr}OU&j*m:&&TmO;FRF#,g)}}NҍYӊ.ctvUu'޸@v* ,9tEe-Jqn cVx '?)y ]>ڞf~k{ZN t_;>{Tdarw2ݓWcEIO1f e ?rf9'vBςvBӠjκn<^hIFĉG̺Yr+TbL=^Sq]BﻃV F^q+Rm8'AKܝpxρXq5*~Y% 93#J̓ݥ]}\aeɲ:tMSkK#O7yrV똛^6˿QTHO1synu{[)YѴdK K)uҜOw^U{Rl|֣ULh4FU]fHG2<"[ e1qf%螧I3d܎;M%R]lȷME Bg}?F[nʜbY$vb=f Ķ9yq8*c|ܹ7$}Y cFiT 3QMg oV|IA;*=RpXh1 ,΂ڟSdr QhPOĜU?p]soP섽NvtSxV+43 /0ۂ:Zξ(m[\`u*AwD;%$_ #n$)=yyXFq)tLzHw^.Ȝ# s2~HO"F/e ]v6)?>e95Hg@QjTz]jZƝd_oPD2 +nc9R7&%j1YKajM'GDuwGjkrÛ}ܮpk7%">2/Sz,'9+, /50Dž ai"*Z_J>d~mizl{7n|(em5ƂGCHc&"),L-;G:dXÇ堝lKH܃'剆dgwg d5Sd"*(%zdƭzObZMꁮ AwnqsR6 V: '-ȏDRգd&^aE<"+%M4LMdMN:[nZ q *s@?yA͒ r戟Q#TH\]<#DU)qkc?Ax5@FA/ A\KI²%U0J2ZNp.mHo㝔se%t<%(ߪ#y&IP}v ٬E2^^oم+`?0+U[(v>[Ȳjv<$A~  zH͒.BLՂ^XaZxSX& qqɨ̄`j9vKzY0-ڦؽ,jzA˖niNr֗GE㊛';źCd/x /#.@9*oSە6^ 4|4;諃%-?T}^1vȠp]_BA:xB ^؊1hI-I@q+/M{o9QsTX2 uvP_N tcۘYbJ$e]g(kiCCac_X$hEս qQ_Gjz)VC/Irc6t9ǎendstream endobj 346 0 obj << /Filter /FlateDecode /Length1 1959 /Length2 12877 /Length3 0 /Length 14087 >> stream xڍP\k.0{p lAww ]k A{d}ս5U3i}wjQ(2%m ,̼1yV33#33+ Bh@h*7t|d,lN^.^ff+33 A&yF @!fcf23w|M?jc _k= 7t4Zf46nіŅځLr4@ +cDژ:+16^Te>m࿍?m@7Fw /gCcck[Cl0Y]`߆V6Ά +CW$ES=сdDa^,6~_Zm\Sw&NL`PFWLëRVakc 0}-2 x8:N@/+!L@Ǝ#'h7~=|{+@uX̿?y{/ΗIB^NNAqx0X9X<.fGQ2 7.aΟݠw,ס̸.37࿣ftKM6Yc:N/om {g& 'q4|rM@rKfl@o 3ҽn:)%6&7`hoo:HU45&F ̃b AcQwF2:,3w.>|Kk8f`>d"ECaukb8"gLBHČ%ġOz?iҫ\BbTUpgKEG7AlO8HMmo`lˆFλԬ轜GAawH#|ܴGA,~#bSը-(34a6_᷆gu9Nz2O>@xO#o=yr9GϦ:dJb. ]~*K}qƈ, FzUpiAl#cx+bUSgYs_2~2OmÒfN}'8F[tw/q?иR=FSrzؚ.N>E<mS+D9'H+uI<5&!%s )P⤳Ck$*V^3ާπ&%Ȝ>ڜvO}d]O( kYh(άЭLvZ6'H) Zۓ6ymlhǻjJ۝L*^Q֔x3ff:OJgK l~6ɚ 4*/|*='[B$VEӬfXAj\x.>4B-Ѕbo7s4w,ӳJeʍh/#wl-{OTnXlsΘq.o6Leko9_X+yRh 5Xl]I!@nJ6!%axm\*[2^$g}hhr4->np k2s!VS1K0; wv bs*]:D牏^Bѥ yrgch)[mw\#9D9窟ƣŬaǽVx[7/5mr<]㍱x6-˸ؓUV8:+f}a%{NЮDBcۆ("MPV`Ƽ 񜿵T똴~{dT%,ori@!Mx"fFѤyj~)^}کs'El35U D |ïh:񼊿 nfFcC`7GE@ E<>LEpZ^$njGF9%l' 'ܜch[ jjWΉ\^,@Ͻ'KOAF7N,?߾9N6wtX̠u>g9=ַ\Kz(.E6  3aV`,$amh[uf2aVn]ɂgA f AGg,w4h@b6^DE{0&xWzlc\7 r,ɶ*]zl_&2qWI>gMk= Lvg/c;VQ[oU+#SWVĬM|2A&W Wy3-..3 Y X9.⤆W2,%,Fy#drW`!F8Ç޼ IA˭-ef-Y Ttt)lGJ)t}T KbUw33$d- |rp)-*PA,Fw9TP1jP*W-2 yMq<(#"Ur~$7#LĻMmlo?'ذ򯷕CּBA" qG踪!7Wv4gߴTd&b 0 6\OҐj` mku>b5VGt1o='Gأ(ƀ R-k!p:1N W%CTݳȍ楐} %>%/ojƗT Qk;vYB uZ_kfKG[,wRFnUrqK߅&>1AT/әwuτ5ar?tnó1# B<0x(2:P6LP}۽M a'L:Pt}UŸORUJcUpTV*퐏,زI~㱏  ?B3p& ǯ3~Sr8Zڌ~g">ve<جJƹ9<T]D҉ [SE*f~m`bLL]DiSk |#ͳ, 'kT_B ۗZ"&21m|YJs񪊠My}`N.)y)YZԳNHfOC1ABBpJ[Ӫ֍^Ђ}.4L0>2@El%^|zд $CMH&Q-[rf/xRS񢄮E~Z`9$,\`<1~ki=>OTA E)m\@mFYrG'T9 Az'͎Bwt] *S@^lqo+* .KѡI,yEH<YQӠw?U@{dA9fܝ Q߃:&悔p2`3*j lBs #<~Qg"aӥ!;.(-oZH;d 9Qw~-+\*@klv-mmi\"ƽ>:̣f-0>]mژKWmm7r7s [!cdf7.B6uMkoevDQ!~FhhaG|}ldrsL;^a ;`sXN 퇽u ;V0/[+v! CGm-FAf7g .MHWXyNbBYt|N xgL}%< ZS=hEG?]<+vK\ bFOM/0XJh`.VE,<⒏İ>f;93x'v4gLw7XC0zP/O|;1 fx2ҺUPM6y0j>js]㧆z*ߢ^%˩,{Ymv E %a`|<CqO0܍lGг}ߙ.=gU "J8<̼/|oNe:5V6/s~fV.M= t>W&+u?:ceI!C+hw Տ-"`UD]\dmT^'53b+=5i'T-Mpo1З`u_osw" KLF׻2#PMй5s/- b #K-(*GQ4?M Af5/y[Jnt AA$L9GcD*EM4Sv|} 3݃8}Dv2i/A3Js@ƎtxjʻH[i-#ډ/#1 }_zjsxyx\ưz*b5!Bn t[jdOK?A KVt}TܧLÎh,D\CDLv ggIPreIbkh+kTk{y>ꬪm?) q䄗9cD:/N@;"ߓ7Aόrسtptmn%0QS:Z Oa $ *&_\*٭'7Ȏx>Y7`}s*}zKPD0tb j?S.k]:R0vbg>*/O5 nW#i|戇x+O_V:?1rMl5:% rX dB>BpSiĖgpq-h!Lzq!򌿘W ;<;)߈S^Q FzǛKNr">aXV}0$dŸCxi7*hȮ48nXî9a7:!}PA6]bfE|#6y $gg2;xWuv/%Mږ'yzf9bMNI]'8}!*;wH|Fajg j7]҂;hj]qY>&K~m+13 G -ƷbK: ]3HN|G }&=_L.Ljr|^i_Lt~aKz)`5GDeqo5N?hoI|s$\JrW"VL-nb~Y? Ũ"{68.`ȯNv͘vm!9vhS lMjINl߱M}XN@{"&7-N<%Y=2"2M6NDq{ /XI3ӯ;2xm \ Js@AԄCwZǀQp$نK,i{$B-^W}E%sݳ24]i@S c{{İzo~d.^%$:95bmjU6GR8*)9^g1#XDd.>,*F"+9곊|3uALױn2rhpGibCL<^ˊ4ƕVff)nmw}Y>]&nQ=Ix MbFBg.IS`J݋9a-MIr1 @B~) =b"-݋$ q6UD,ZB̅vB"FH# vݸQJόHc̶:LcMlܵǘ_ZT>":İKHK(IW!7!N=Jv)Fze;%(߿82)'}FQy|u-{{VAíݢd;l K߾ƂUvÓ}ƫޠ%pyIem);fq^$Tn[6L?f+][,p$!ԛ;DAIUNڀ|!<3H:"8fy{%p>?QW~*#r>ǤH&Bt-AV=(6r:evǓݭCtgny=442\Ц6sêmt-ʹN KiҖϻhwvl rRr4p5!^q.'*,ƆrV}kNV+ݲ=6TJ#W6Im&GY}۽ ĽRAIv!|Zy 5Q偄dD؆mUbՓXčx Y"3BhC)tyK@}nڿ2U^h0 Vd/sE۝EXs$LT$_2I f1ƽ)@4XP^ۄܒ@Ş M.‘[21Dvcze^)>yKdUVxo_߽%b3ԦZpb]r凗Ȗ]j塭l cb,DD"[HX#JRFNدh%}c[!?<THHWx~Ww펍A>oe`0Ws 裚 Etnʐu8rQi;0a0{WN~?!_kѻN^>Ya_ee!XyHTwo!F"<.+OD3/CqOJ7yWGF [?sF~rxLn4Qk%m)PYkKaknEf7u]h7&|1N&.jO'Rn;EX# RYbn[Ùʏ$3-3Y,E@xaLk,ɯdKNj]sXncyI>Qf6.6 CDm^wX $FFt?0JY**zVHBMmB)xȸ9?K&ӎ)(*=d>幾K h3r;FSid.v}~X.:M|T6f|"S*y] [{cvn{eIp;Bv&[|N]thy6" 4~ TC^@ޕ p#yH\ܐUA3)/zѦ ~mm;49M9Rd oH M8GUV sk*/A']p<ōD' 5AF/׬w]p5ÆR* ؖ_)zd Q!ly`!(At^^U4$^/gK#(aWI!YnhFh3UFW۹3&bwNrT gsOr-0@L^5t@M8`q El1NZ8m㹝enUWǾs%߆3 HS6S]rdPw³Mz=Z!"ݶV% %qܹ3ZZǧ;WZd#\=aLed2Z z3K춴ԛhYZYi.h~H f_* HL.ɾ GA' *% zv'K.q)*G 5f»V|?b{cC JΊ5esRMG`?LDTU%&8۬|ȟ+ԗ^֕Jx\ j \?=wvsmz %ߌ?t& ]]S(%OKލ]@tSj;)&]-J;Ƒ7zD:Ǫ`?KS2kXP<0{.D"Pn9NT^(Hiі9dj&T C8mcikG]:DU_U$BMnHMfq}}gKC̞%4W8)ŗ8eǐN[XS2.AXrSޢRMy 2'U1^ҁN(#\s'~ =%:+I5$X{oqOqZ-e:*ac}?0AXFмH?\x)"41u"!a7^.T+Kkxa3 XLYK| J3 /=9qߏY>w3ٌ@Zdq;$217T7bK8yB4q4~e|0~1sB078 0ɉs)H&|I{NKv̊E4x;AcFQVI~29yV/+wҘ(~Y3 dSh|k1ݶGtO!ozseݘp@ǟ ),*v9H#JH4=Gc8WVQpA3ttIje;;>nNÜZ%#+">;HXyRLcJe)PGH=r'; 활x "F6('?qa\wB߆5 (>rDft+;Kvf""B7&:἖$x?9ӠfTgMpG`bpePSyL-i,\U1M#挔cr~ ,a۴!]| up%ywZ UAba69գ 9EOVV*Ⱥʕk1nZH/XKQ`S.5rhioxL2.hG=5O_Cn<'ücMvf75tA)}oK|~*ک(9Cp^?ͷZfom3a~L-Mg j+ds%4&}Ή!Qٽa`i$Ĉ)N! MWY[LM Ĝ@MmpIO7o2.Ṇ˳`:i(s|8GJ*倌)#rd[-J2?$įrQ(1pi[yB,l\v; T (vPR~5蘲- Ιר,J\iuo1d"t\K/5Qeep]c6木l"6S0ͣFҌ*D][,\pG w<T͢iO ؅ؙGS2?&qȜ4"m`/U OC2+ MԽMC^B;E'SK:#o3.+_$X,nU@^ 6X'F&Gͣ`T'~1%t\)`P1JX'ns2y2cgSv1fv/u(_ikK”:t͉\Kՙ_n#Kil"c-# &L @{S-L)E!Lq@=:r ""9궘Vz_RטX:ݵĉ 7[&Rle:{BD=ep謌PFbE6AIsXDۢN>>E {v-\ji**:ɂmQ:;4Y@^gIwo;|AwPO%T7`xafVrqnU FIT9S}e}N8Du-&e]wvfWX#zQmA{/{o 6pǬ1OtV\tc J ^>6H)kvd@NߠԔH?`~nV$pubBiηqS|@49Xx*XrAW%u`Zk/KT'I7M3IϏfRrQDcMhnn piLDF-laMiM 8VNl >.q7 E%#34]Iכ@1K,EBᮩ4 YexFɇBHtr%BqN0xShC[@w3e>VM=ʘv[]Ԇyl i׽ A\*u o}|ҽbfɒ2i=wنaemkͲǃҴlFYRaD#8|(ݧtăzZ!9gendstream endobj 347 0 obj << /Filter /FlateDecode /Length1 1454 /Length2 6989 /Length3 0 /Length 7980 >> stream xڍuT]6 ҍC3t# J 1! !)Hwt( "7{}k9>άk+g(aH^Pe|@>;!g@@0`(x@HFZp@D$@@ @(v->:A+|=H:l qqQ9W hWԊ` A##&vE=dyP#@xxAZh]!Zg:B9 Ho\ xP 4:n_dͿ"6( Q0/uP%?חJavp鿏_[KU唗yE  ̣ X5= W}d?3 ܀҆ p[@a-e_){sE`WJHhQoc_zW FMh^P/P@tH[ǿTnk\0.uàu P킠f*lvM@XQPSi-f? DP=V\pT1# !a a\6Qjb m%Ýj[Wynǜ=^W絥 uy"X;'1{B'P٘lIf|} ϓ1r{MOMvSkA;ާ'ix܏6wT8޽t͔ ށjBTm%7 [+|ov;M\sNj1p8D+טvn ).\[Ekv'O.%:~z.4pI_kKi[@}@i2ƑXYN8D}sbVVlDt[" O|{z snZc+\,S!Y,b|}6|E6D6KYɐz |9g_Lt54K6uo#փ=RPS\C; TJCݠQ\?F{^.'-=_`!J]MDȗo/샟"R!T5@Gcw+ĒN <0B\дD!4q35Qqde*CrRLkAT,Xˋz˼~6^k>{Mۦ#vd>-X[x '/e'aY@XR^Q巑< v}ق~*ѢEH%m%#ù[&j0 -{ҝG`j]N,;1^!^ c-*ڒS.C#ϡ\IU8h}@o/5}`,&e~6qkoQqAC$+~ϳ*J{K'֙1O=J&8>qpX n_{<2bch-Ul7i!5 Hf d"@a5zN?_ hea^ta:ͿS͊ ڵT!aV)70QZ=Qf'eγvLϾu_4_yDJOY͙0^~q?dzxuy?4M<0lnAebJV$$4L:UB񇢓BH밅ӓQ1;߷v20\i:Bh޼\.s +~#c+*{\HFdwW2 \} ɕy 䈗6a4Yԍq}@ReζI *mqRDNtx# ;)NVh=JI#2#ONR}\H7=/p3R`VgVY]`OaVQ R ia*n0B9TJ%ۖPIyޘڗMOo/}'x|- i@_ebw:ȇ)>{JD@uz1TR2ysgKvE],K`BG+h3$/YxL9wfZ)d2g09,~r]D[~~SWJ,;W1<aihq]Όg_i5$3XܴhF5J_ijs^q-2~ջAgR'ʣZ4(;y:q3S1H/Ug;BjJ ]Cmε<&z;ڹRǘk$ԔDuoGo>:ϯ6[@~o>pޕL%.$yJ*McrĿ{m`r{"X28ᘴ*'+碄t[3kIh{o];\[$؆vβ;=M&`r\"‹wr᮹JmW]n%)>IBg7rf%p)QdhdmJ"OhZk3w]!bO[=cf~z=y Oa!^?:/>u(޿}\.WRpx=wsX˵3[9ZulTkH⇡i2=lX rw%j89*N=_FG4? ,Vɲ-1]ScZMZYJ`v\H2I&us(v\,Е# ]^l1`2JzR)1 / -xN5Fj&m2x߉IQjY-!I5ɧZrwI! utgzNT!Jf-}.@h71spДStcl6*[^ΥCQ%9p4/M曻hU Hr;+ィϵ?3zauʅ#WU`qBuwЪ{Z ffi#/|އG0 *ٹ7[?z_go\ww{1aߝӰ A uN[S1}hJ(~D{.tҥ6ρ#KGX@);"Ul65%)mve^Պ,Lо V OId}XQNEMݬ>J{UPshPx;^鉸Bb u$9NM婱D#QgNF'cZϹƺ 5.^y faH}m)+Ȑ |Kfo!jֱ&C}*fgYٖԯ YHpxb89hQu3&٬'!3cXJOx5hUpR԰EL_H-1.qŤE@ s\/M~6y^=k%gkC gZ+ITj操W`7N/+SZ9\|2Bl9Th-|isy5Z Xfn٨ib*?. P\$' GLfH[~0N*Z:k9>pְa!'=~כ` Gx&AtBv6#Y_?#%\psIU'<1! u%C_ Ev2+Kܻn[?}N 5W<5 >Z|Cˉ ž! O (D L N6.eUl +i7%!wB!wh: ,ʲ&݅L4 }v`Kŏ5/yKT\6s.^̶֨h${Ј:_&6sIvYwRm K=~[_w~H^L_5 G$%(ay=eg ROZ۵ͶZ5좻*;tdf7Nok wvZFF!=:mˇ82>0~nV%n3.Ŵ6ry e'M|^#蝶=• BW2އXkLʙoS\ܩ}&t1CBH#tgN\ hpH<>۝\%eM[1#}$M`s.^<cip4QM&tJ41/8-z?qKװFG7Kjߔ/ y~Т= fiRV^%dmzM1!:P5i%moh|GSOu鈔?D+h=&ˀH5.  u@HR2Јk5GJKؿqԈc̲`3a9uaTb>٢MnC7b:lb͏B9|Qe[GnosPAB;Mjqs8RLK 0* WmUL_F3K^jM/q=e}8 Zt AKT)Woђ5%nt2]Z.G3^y-bo_xA8J%Yn 3-zAb(x|C;f!3Ie_] 9g *ߊn_ &핗Ztx:ݴLc$RB+xdH[\ф}ڇFw!`,B'":qU 3ML̞PZHxJ8S91ywMcv:vךwQbh[LjUU$81sAND]V\ɔFʎqC$Ѡ#=q%a񨀟sʙġ &>˗w=Wϛim %2xd̓d,I{Vendstream endobj 348 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 349 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-008.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 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|X pR=%8ID(}P"cOɨ$3{$-0"-uDRE>Zc1K|We+ap?4H=ӽb u떩. ^ҐJ3-3^JVeeـ{ތ揤Hr_9&S`el6"RĈ-"^" c7GFn (^ζ;6f'>S(#a:&)Y prԌ~";ץz^L_dy,^j_RX<_@;\*D吒L&W س$Z9\r]o)1ra8"ne4[{ޥьM 7?==s6(d2p4S2Fz$\2jJdRbj= >ܦYX5|+VP?8Nc;W1O=rbo=h+ՙ?d6-Μk>\YE' Uj }Ux.T[7Lr`0nn0 +ZmC/3#f%RF/ZZ.-v&i>$ ʌLEEG6vd]lnb-z#!1۶؝v}8wKĩ11u,KĩFg ҙ j8YXo'Һ)\6tˆ3Pцjj?xNMsHrjL* ,`!š~|CO\FMU*1."Y 7j\o,?^endstream endobj 351 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 352 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 188 0 R /F2 189 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 354 0 obj << /Filter /FlateDecode /Length 1504 >> stream xڕX[OF~WXV߫Ri,V}6UvQe61d.L^&Vyh(3*J#Z=HҌ()iᓍ;o?{42gЏӋ+Tԛ/i0 !vzhPB (ck+u0SWAb7 [i6,Uk幕Y'93 EբQXn $&_x E'gT-R=v]tdrw[Y7Ql.+dfQެT.$lx fQ4,wȈT0K?)آ0 W`23 "D&() eдrj;* /עB=C<"m||QH?Kv)0"j7-{CChoH$ B4ȲR\5.E9XvHPB=SvI#B'#<`$oH_ Bx>7fǎ@:/+RsΠf^(!a &\'a)SZ=·Q#X02cEm-MoHHem+ r8ैo &2o/7* Ĩ! ?[nf}/ײh-+ YAUN9]2 sN}-p6n @aM JE6\DU喺t{/7b; @s4c%vvD}[ OCBvh$ r]RHM/fv|%RUT7 g$D ;H8I)dʆHcZ$X.IP(Vmfȯ];݂јo@Zl>X/|CM>(kۄagI' tY!DPͬ]l|;d2El5Ly*(W*.c}X3!n s uh;=8o뷋hK^C".}. |D@j\aHf6_|8y,2c 5S:K: c6N킛/vx3H逿p2n Oͽ,߿P(cDbBNTub0 '6RP&LQO``+7.tMW㨻,c}1FbH)i#0ƕU /;e5+Q1fA.`|;?ǑWGޏ[dl>nZN$̇pR.?IF\xVbbOYoLQ}M@cM0J߉݄cXUN4'G;v> 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 << /Filter /FlateDecode /Length 844 >> stream xW[k0~ϯ0yYbגRF3B %u4[ϑ쨉z] y8HUtΧ^cq+qVod1;˭ 7Z@vg..N7ǿ ѕdAS5ͳly\?jỚaUj͘l":].aHNx1V!n2ƫE2|lRI dGpaG]2guH.4Bo-fa)2{p`:U'b/`de;ay:g~T\hI$YK b (b=uErAY~rMĵ8nD 2V1ETC cQt }+ ޫB lδn)@Cu'!ҞK ;6Ǝ=86Bܞ6a1mBcA:9ytfx*=-j^tȋW''“$C2ܹ0VK AL|M}3ۢ纅f.F,ro zD80Fo]X\W𬹓FLXuoi5T@ylkY0B`=xk#W3y =7+n8_Ol&J̉= }cS3nY( K ҖAgAG]YQyzq"H`O2}d>?OoYٜo~byKminmzr?.6\ 8 x0x2~͉5endstream endobj 357 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-010.pdf) /PTEX.InfoDict 196 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 199 0 R >> /ExtGState << >> /Font << /F1 197 0 R /F2 198 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 358 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 360 0 obj << /Filter /FlateDecode /Length 1486 >> 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,GeaT:Ќ%j+*p0FhŮgFKlݷi2\`@ag}llEe@\sqJ'bTxFW24Md_¾q:~i͇daةS1I⺅-CY?c4FÄT;{=kendstream endobj 361 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-011.pdf) /PTEX.InfoDict 206 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 209 0 R >> /ExtGState << >> /Font << /F1 207 0 R /F2 208 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1826 >> stream xYn\7 Wh.{)E]q$~ϡt\O,,QCR#}:q\>$WOŤ}Vxx_w_/>^lx &Q/I{p?|ݽ6V}Nc.{GtmkG|L>7^}{L}x^vc)]8^vqzqʮcIefiP:vFB%L<|{szċv9uڽ"iq1].Ձ:Ӊ(Ww^W\vd:5A4G^]ᑷ/kv BĽpаLzp'{hzJ:f,1`` cztf&٠fVZn+tv_j/3ܾzl,S5`V6oœC(VGajsQM DZ9곑 wO,cK5ꮦ}]]Ŭԏ%ST%XA\1Rh!qOjOB8'DDj] '6S.{vkQE4H-r9_#zuO $+B{fZ rŁ34>A)Ǟ4}fŞ+0fϒ=QAe~q+ 'AQ緹-ӝO7|;NhC4$L"l|<2vq"b^ju<%$&`*-|2zB~fO" 8DTUa5' F^Y0i\Uaf"rc~ׅQL.Omoy}(WK7EYFC>;ͨƞmE+8AJ΍bAaXd="i(XqF@o%#_վdȘu*!qp'25cem+L:WXicES{FRh! YrafL>Ж).czȖe8PAP6~hʑ@V+?|]Nmt*i: ,& dOJ Ȱ/d ܊4=%5XB3|`8CQmf]oO@8os--13Sѭ#Gt1'm$R#T0&\$QI ubڟ%aBoՐMN΄$d&0˜t*V{{0dRXPq%XcfL~ҝoPyendstream endobj 362 0 obj << /Filter /FlateDecode /Length 1071 >> 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 363 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 364 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-012.pdf) /PTEX.InfoDict 213 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 216 0 R >> /ExtGState << >> /Font << /F1 214 0 R /F2 215 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 4022 >> stream xZۊ$}ﯨՃJyJX X  ;5؟sNDLꚌ<y2nYqfۯo߷:PR\ӖkOOa!lO}ӻӗ/?_~Aȴ?lo~*ӟ?8=-Ŷ K{b,0=- #޶>ꧬeltoWwW6⯽n9}&|7Sӌ{ϾX,vw1lOF#ls?l8rK88H9{^g_'mL?>V:N~оμ:;tzSړc^ywhOn`fݞx F/8k1O*㸫ƟhtO3ȳ櫛7^WX^קqNi;`v2_3/vmcgq0"A~3,no~y/v񿿼ms}oһ?a={h䬈f[2wGߡBc3ĸ 0AjU!g 湄ƹNy ㈉md-5?c6X#趽׳iDzK`IB`:lV]O,:D \k$Q m탆dnC6!WaMjSQƚ~#ק#gm3{ٽaVQÅҳ }2Lјgf߾iM^(ٻ\17p#̴"*.d7@+ˆg͜=g䑬&rZQ#A7=@Ț( $4K f]32+m,5e|6 ݎ" if !Ma%9-9H3ڻG9p~;s=? ~vIydcA<[Ƴ Gm!$ܱrDEF {B;UCE0\m+#x)dEAyK:Vt[9XyH49D7 cfўYXsLo<7ȡA8H1ˬJbd%y|O)68(p-Ise##[EN4+"]跞_X.'JX*nB8Ӵv"kz9pYFb%~~؏| כS]~(X$Գ8ɘ &fnF5LXۺ 3Ru^yaf AL;fD04`m%b=1 VX9Q5e MA$MTf<ξ}D^ 3N1l cGB4xP`ަJ?Mb:?xK(F$zSb:? utMR>y4ukiNbyh8˥b.MJ DgP$ 1w3qΉH"Uݭ9ep 1S38I) Z Դ[YT/E|mDe,aS-V[ !ᓧX 2feO!G )$L:PA?B"(1WQUUz`b:?کi1yPKT!N @dvb2"s6]g 1=O*ePki=ʓܤ0WF_alI%BLς8?f)1bz 9~u e䞴Ժ\Zg ƗOfAL5ccO_>yk[aIO a"zW0{Ʉ[MWֶa檁r~qDWBrH̩aTժ"t!fZv4mՓܷ0C5K|Y=) si:(h!3e솙_2"Lz 5)LndW 0u2;?Mlt s|3L0L4M*>b.M4i:8$̥i{JvC)si*,:Jui:i)~ -nuBJ6/I_ɽL\| Wз\t1Mf3+L&_I4.M|!ҴRE.ZVBbJsiHY59e,Qa.MqIRuVJ$UZ{j~]ح*$~ 1]v&qZs*&%TTy.|2S򅘫`9d>$L !*'J+!&_r;|rQ%JH]ɗWEn UZ쯑/th uTi%KV*\NuJ$L:P?UZ 2BL:n^D#_\QwRhUiq{+1-J;i_"*|{K?_De*-'a.M;˩0e+-!UTUZ'0CmNUE z`b:?8Mw?&CRc4=&:?08?jw[D_< =Yi82Ε|GsǴJ?ȗVE/cJ?wc'/ _JV0/ _O/(v/ޥէRYB-J ]i074Q a.MՁɻ_LET~UZci|fq$'u}\jK+UZaM2FH ӭԁݑ*-a:?:d2MQE0M!Z*4a~qewZ'_?6 endstream endobj 365 0 obj << /Filter /FlateDecode /Length 1061 >> stream xkoH{~'G[z@UB@\')I쬽N]5I;US?O^Fip zҞX,N:suT9#.#+(IŇF]50vx0xY$|J0S.RJ$In.i PF 4 sVL9gM)X.3%(Ђvon9p9Q7T@}?LC` H5e4wK>D@}"jŵn$d>NrUdrȠG1$YnZI 4hJ8#}fm.{շ]~ U!s!辶j(fP:$–[ϻ.lx+*.nܒe0YZ^A}ؕ឵\}~hB9v|O-eOl-tH ~GߊMFF۹:V#f|tpbUDOQB_ C? wQ! Dbp"Sʥ6vOIn띍 XHSs= #Ųϳmr'a)>A>8iV,9J,#R(taܨ(膼}MT"r쿬q[j`rX8ŎFCԎ<3#WeKnC̑!qÊE6)><~?k6TYھy[Lx[oզ%u"rG\-Qdx&t֧h I(`o#O8\0a MȂTGMR.]8g )D\ u/]mn2>]P^BIDaXٯjR2$?\rW)> 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 367 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 368 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 369 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-014.pdf) /PTEX.InfoDict 231 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 234 0 R >> /ExtGState << >> /Font << /F1 232 0 R /F2 233 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 372 0 obj << /Filter /FlateDecode /Length 1512 >> stream xYioF_ae{TJMjJM*Mjb;)=?`=`f테zB8IpwbW"7tLzQr-Ԭue[y 5^O>W?0bIFڔgV? }{' eݞ-bNjiV޷}72堎fҚU%9LE(]MH"5MupiN)NG~7%q&/WHWrԤ+ANt*wt'wK4'LHIZ2,Z6GܨQ9Nxl \$)P'cߎN)ed=e)nzJr62]KЙKL64F $eEh:g˧hKGXKJkϮ dzKWh(%RE R7Jy/@I/g8GnP :7؝W H+aE0o<]7#4 [.9eHXc6l$صum-'D[B`tց@>2͔|,fOT]|a # 3Z2mA~rRbQ^ԼŊhKdϪqeDo7` @3 ζǙ.Dqq1;yƈÂtqsj]' +=%[V-C&/` Iεg`:zTD|ݷa1zN*z5\F-%]GWԦW٭NzG꺂5F608~P$Ow*ؘ+Vx} 6kaچ§,<ҲfW18ܞ OiZꂕmt k֋A!eAڞR3y5Z\VjBFWrB-1))ĆCf?16;.Xc`AL ڕeלyIM%]/_Ul6pݸ??q>^X?WWgfH318ʎq(8$:߲cew8vac8c#2s"ϯ>o-ۅ2f͎;Gl6RAGFIm P"rnjTI[j{ƨaqsC24tgB:q%2iK}F?j2y-Ahmg#/*.Ψn_#v|b]v}u6ÆaS0{?`ԥDد >*[,lx\u+4 :`۵/8rađ0C'IX$@y~xfKendstream endobj 373 0 obj << /BBox [ 0 0 432 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./CalibrationGuide-015.pdf) /PTEX.InfoDict 100 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 103 0 R >> /ExtGState << >> /Font << /F1 101 0 R /F2 102 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 375 0 obj << /Filter /FlateDecode /Length 119 >> stream x313T0P02Q02W06U05RH1*24PA#STr.'~PKW4K)YKE!P EoB@ a'W $o&|endstream endobj 376 0 obj << /Filter /FlateDecode /Length1 1582 /Length2 9658 /Length3 0 /Length 10696 >> stream xڍTm6Nw͒ݥ ,K,҈(Jt H͇O9w8g]3=3573>-¹xx|^^^^~,ffAŐw6 <|b|b~^^ѿ0w1 b `,fy;xߟ6v0Y;h`m@}  lprKs!pnr3Cfg  Oj]? tEN = h+i}\7{y GJcaq{x@q̊P[y  ]l8w__yCFv6l=]P'XU/Σ =` |]8~{wB=@^`o#,>>-CXd4ď<}f :C㊁Zʦ-  ?;WU8KKl-;si #t3^!^gYBߊ >V/X>_b? C͏<>`0pǚ*Y*o/O17)tC%Nce;7cVKLx,2bȾֵYsI^yhxowt<ړ6}>b'rc&kGY!:kOѸX'""8HmYmrղSL24J;W}Bkʸ!TYRoR[7ܼf =m fE_Q<[ucXx#NUϾIe`/Y~5 {k5 qO/ u+K*abc*M yOQ=8da=Q5Iܠ?7a9kY Cx8l:6,hWfv1Ԩ:eQH.i`++3Qpb:6wk<k; BֿN.)~g?nY`I-7:˶Q X M5SG?J E? yLs>2N1bY@&UD# !}43cEa#nO+PD'l20)ᷥҏazX*B{CkFcEэ*,-oGRׇFU -/yE)|vG<ܤ>$K3*aQl&' ^OAռrRyjMQ'ns w1dd^;OҭLCٟ>(0a^Ny-L~W,3j_ ӝ!YC5C >+fIqX1Pe]gOIgp8hx7&p`Ie@7{ AѐGϞw'ih}Xp"C 0u7eD̆;&1]8-7Z5h(7-:(~$84`%fOk` ZI,Xi5h,P"PH:[WkC5m>BӧBb!g'}C^d"k^-vI⑋}X#,_ F1mӜu4;ίs^7òcʊ}x,$1&v?L[k9 W^f+ pdy}H,@>(5yiAi-2@i@vTT*]VpQ^!H+DN}y9}fSWlTq/@°*뽞ZD(A~ 㕳 kAK$3ock4-To=:`y8n7; utm@ͯv-h&_󹯕F=lY'U@{>-@)[#9A5& Ґq+:=PَYU{w6f_h{MvޯbF1I&\;{SӺ_u#m~J~ ۛ UށrY}m;,'^boN9A^p»PtP-o(:6 ǏJ rNn"I4/ I į~ZBјD8x'\L@}|OsD:=EOs9$ͬwV喧HSo~PxC 鵭hhfn h*hƶvc^nkʘ%La"kY1Gs)gЩĘVGܩHXcoOTТnMC. }g/Fv?>oϜ4g7c)cN i<J][djc4N!iy7|"#|,߹`㶲$G[b2HQT "gz*챧23ckiv9]t  M?d`aL))̊5yJ|O^&& 㜯hόƾ{m avne=_N pI0"ܱ{s;YTGZ0PUi9v Hq9,VGa[d7V,x"cGD3r7 3 v+˒IsXb:0 *Q&u Jv*^=D?9min@ЕKcpdT:!J8rl4၀!Xh}>3bkƤA6f@ާ+; Dm~s/yYm~|6\_Q)=Y.>e^U瘘\!8^ұ)9-3H͉FN^Dj>Y2MJQfU__C e9>+&ᴞ)ng%4+0l EƲƝEU$ ;BZN\~_}% ];1?ĤdٯM,&ӃK \2a>Ng.0l$@W*V3VLi炽Xc+D*_-p 㻉ۭQOj!>d'Zkqu,ӕ90f#%&Y!d޲?>hJOU9Q7KIo|a_P0ÕZcJ:rn~ZC_ W[I;{L?="8`p~$yھ:RbVlQ2$5+yP#VBƒ|nk(\\3I0ߦ=7_m q.=_)lqJRQ@.5=B,1a$[0D" U$7EyS(^yd q%$dđJ-`ErL1"NdD yoϞ[ƨ\6;wcӎj% \@ ɻ֌]v\hZ }0}!E=A XWWCxk˱u!|?1iRM,&A+A.i*/όg==v U\*䊿ۯ嚈AJ$-<4.7Ao\ }53U2)1àg]z?xj>~%=O'8w``Ozƾ%VU4$b4i=Ԣ;:Aޥ\~#"dw1=, PYot _h:./\e\Ԃd#ňCb}>Z;a& ~k,xdO7[< C8nKTKHK._s;; q-<_$T#; 퐧t8~,.?xWt G: vGlƖ Tab䔂=}7j z%N1[*T k,3ۅ$`vEf34X]ElIUB$$5n/c I9-z4ט;XW$"wS9q^Ņ&;؝Ӽ#%Wqܹ 3w80>GKD4pyK %Q^P}i Լ_SU\ŋxMܐa i+-']DGǙcKKhgϲ>Mqj0,IU]ޱz zyTvpU)UJ+P;.!+?IYkN0&Խ(4\~Z^S?~DolG"5DctٌƂ _ԝ:L&ڴU(xYtdhb €T{b&ԍv/5Aac7jWSRҡ5#a8O״J. kӧc"Dhdp]na6)>$rSxYTncNi6Vc?m0wgsG5za$j)i2l`gU!W|Ӽ ;UkBȗ-O5ft/NR"(1efo $_oNoB<>OuŞ7˥juȋc.0d)P~udo0>T7K;Ό 4u˴ _yKm3Bq*= -ؔ|`dfGW: {(AP/!%ouZ[5ŋ' Tvmzi)}Ex$O7>F|F$"4%EUⅲɻK Or ܒl=4='[*If]7T-/J[ ߦ7sZ%\fĎ'`6cIpά\iP_0#G:W4cj7#E[ >=X 7R]ňkqM׍/̇er{*hRUf*^ξ)I9Q}d~ϗCpո0Vr˔(|>zufȤxwt v/2ٷ9;uoWgC lꋡuw>+sc#"<}[T 3]&9*3p5IDnAMPbWճ1ITNՄQfCu9w:/jCgwd*R|\ߺsUB}ʥѣ &TYLz!bR`KWIZH.inU$2'H!9m0zo*m~Cz?NzYW+B!8Eg؄1TH[7ԽT+v/䵍S(461'r eBx/\,:wED+–9)2 P+W dbTq?{s|TƳRHh!)9U !wUDhh"5^U  h"s,?ONzpY E<ā-ʆwy)wR]hQ^.l}aGqƆQMQ}\ +%rWi^3*hZ  ~`ِ. elO]mږ˞zul;Uy`)iwk+ծE%)g|+2Kw5Ko1W+0Ldw%,.8x۫םTh[ Hsl@1l^8uMQTPϺ{(P\9*Uf^V<|7gRus`dA 9? a؁"#93B,b/噼&^!lhQkP?M έgܬhvFtBnG.Ӷ(T= 7\#1`6e LtvB+”W>ibO)w)0|Ʈ bnѶ|8y[_)9}$9(3O{Y훩-Es=ˉoxN5n1!~ʳY{":tG7ew2\OT)NY:3׭bqgɉ|_=TaWq Wyd2g9A$w1:Z=O$+y2LmGPսIPi_A \͘:[QR'd sm,EUf)c.l:Fi̶s 7\Un6noHkRb %P./%P_PbMjxN,3<@o>tzjUxgM/ȟ8v`t*a`GX dƈ9ç$Dևl[ܲ~;+9S̼3+"XENrg$O9CR <.O%WGhsEҼak/ rvLm*/q2fRhܺR&8磆9+9(_hGoDOj]mvKSab6|_5VHE!ώS"bR3 $ |.eDYn;B ,յw7({kT59œ;;! ;by aW2˹O0ޱCNKk6?e-o_{[u! />0aP8 ~p2n*~~*S5I45t܌=!;_K m<,ض>*m|+V41'Fzf8c6>LWhHOiuKkr$ i?&v8ҋgsj1I>uF'_ Vna8 `f'un44YmyD@gGU C&}Xxކ[ oڈnH4 9mwT-&~qS8rlkWUh'?Q "WfSK<9Vo ʛN~M2lਲK۲*~uXydS5u ' $ŕ@)&\ * xn0L }ߠ!`b6Β˨ROfZ1U+-&9xÄW$";`*TN̛C V.1Y |5.,D']m_ϻ*tka/IHOqi թOqvY y)4zI6fmvc"Ûzz7ž[{̎x~%KP?Se-+֖nA!mK\'18N!ƛrI_F9}̘dG u_ /Zñ2 MwW__,Ro|ͨ!6byf_JpS##=ĉo^fsș]F7T)sPl;>Vn'hHVm0r'Wu8"pRhOGCZ?1Մx-^ gh{}媰Խ6U'̀2:[b! M7=^žOB3PDl8.1h@6jCVLj5N={mrr)7wyv;^cdd/^JJ3҄cbb&}Do ¹M7eRi' אd6S'<vf\I?M1ߜbC[ԗ^=cEӒ![~RfC. #`>9]Tr_1:y̫0ZG2 }0[%i 4b{F>?P0 o= g54}bye̛$!Wr? 'd}b-+4ە/:V<ǣJTZI Jb%E|U@.@kmwE6MkBBd`endstream endobj 377 0 obj << /Type /XRef /Length 282 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 77 0 R /Root 76 0 R /Size 378 /ID [<68dfa696c36b9418948e7fb9185e1eec>] >> stream xcb&F~0 $8Ja?ߝ@6bP>;?CϠrl!d "gHNdB+"\wd(mMC6LAie$U@줯 R5| bcߎ?L1r7"p9(ಢ!N[zpja"{@iƢ "6q`r54 bB%TQm`{@$K%B\P,ar 69F Rl>ZˊΩ= endstream endobj startxref 285258 %%EOF calibrate/inst/doc/CalibrationGuide.Rnw0000644000176200001440000010313613544673633017641 0ustar liggesusers\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.4}}\\%\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 October 2019} \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}