multcomp/0000755000176000001440000000000012234663125012146 5ustar ripleyusersmultcomp/inst/0000755000176000001440000000000012234660136013122 5ustar ripleyusersmultcomp/inst/CITATION0000644000176000001440000000137611471214260014261 0ustar ripleyusers citEntry(entry="Article", title = "Simultaneous Inference in General Parametric Models", author = personList(as.person("Torsten Hothorn"), as.person("Frank Bretz"), as.person("Peter Westfall")), journal = "Biometrical Journal", year = "2008", volume = "50", number = "3", pages = "346--363", textVersion = paste("Torsten Hothorn, Frank Bretz and Peter Westfall (2008).", "Simultaneous Inference in General Parametric Models.", "Biometrical Journal 50(3), 346--363."), header = "Please cite the multcomp package by the following reference:" ) multcomp/inst/deprecated/0000755000176000001440000000000012234660136015222 5ustar ripleyusersmultcomp/inst/deprecated/multcomp-oldtests.Rout.save0000644000176000001440000004253111471214242022531 0ustar ripleyusers R version 2.6.0 (2007-10-03) Copyright (C) 2007 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > attach(NULL, name = "CheckExEnv") > assign(".CheckExEnv", as.environment(2), pos = length(search())) # base > ## This plot.new() patch has no effect yet for persp(); > ## layout() & filled.contour() are now ok > assign("plot.new", function() { .Internal(plot.new()) + pp <- par(c("mfg","mfcol","oma","mar")) + if(all(pp$mfg[1:2] == c(1, pp$mfcol[2]))) { + outer <- (oma4 <- pp$oma[4]) > 0; mar4 <- pp$mar[4] + mtext(paste("help(",..nameEx,")"), side = 4, + line = if(outer)max(1, oma4 - 1) else min(1, mar4 - 1), + outer = outer, adj=1, cex= .8, col="orchid")} }, + env = .CheckExEnv) > assign("cleanEx", function(env = .GlobalEnv) { + rm(list = ls(envir = env, all.names = TRUE), envir = env) + RNGkind("Wichmann-Hill", "Kinderman-Ramage") + set.seed(290875) + # assign(".Random.seed", c(0,rep(7654,3)), pos=1) + }, + env = .CheckExEnv) > assign("..nameEx", "__{must remake R-ex/*.R}__", env = .CheckExEnv) #-- for now > assign("ptime", proc.time(), env = .CheckExEnv) > postscript("multcomp-Examples.ps") > assign("par.postscript", par(no.readonly = TRUE), env = .CheckExEnv) > options(contrasts = c(unordered = "contr.treatment", ordered = "contr.poly")) > library('multcomp') Loading required package: mvtnorm > cleanEx(); ..nameEx <- "MultipleEndpoints" > ###--- >>> `MultipleEndpoints' <<<----- Multiple Endpoints Data Set > > ## alias help(MultipleEndpoints) > > ##___ Examples ___: > > cleanEx(); ..nameEx <- "angina" > ###--- >>> `angina' <<<----- Dose Response Data Set > > ## alias help(angina) > > ##___ Examples ___: > > load("angina.rda") > > # perform a dose-response analysis using simultaneous confidence > # intervals for Willimas' contrasts > summary(simint(response~dose, data=angina, alternative="greater", + type="Williams")) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Williams Contrasts Fit: lm(formula = response ~ dose, data = angina) Estimated Quantile = 1.978 Linear Hypotheses: Estimate lwr upr C 1 <= 0 10.4990 7.4351 Inf C 2 <= 0 7.7470 5.0936 Inf C 3 <= 0 6.2970 3.7953 Inf C 4 <= 0 5.2465 2.8243 Inf 95% family-wise confidence level Warning message: 'simint.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > # compute now adjusted p-values for McDermott's test on trend > summary(simtest(response~dose, data=angina, type="McDermott", + alternative="greater",ttype="logical")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: McDermott Contrasts Fit: lm(formula = response ~ dose, data = angina) Linear Hypotheses: Estimate Std. Error t value p value C 1 <= 0 2.095 1.549 1.353 0.3161 C 2 <= 0 2.349 1.341 1.751 0.1609 C 3 <= 0 3.164 1.265 2.502 0.0315 * C 4 <= 0 7.877 1.225 6.433 <1e-04 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > ## Keywords: 'datasets'. > > > cleanEx(); ..nameEx <- "cholesterol" > > ### * cholesterol > > ### Name: cholesterol > ### Title: Cholesterol Reduction Data Set > ### Aliases: cholesterol > ### Keywords: datasets > > ### ** Examples > > data(cholesterol) > > # adjusted p-values for all-pairwise comparisons in a one-way layout > # tests for restricted combinations > simtest(response ~ trt, data=cholesterol, type="Tukey", + ttype="logical") Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lm(formula = response ~ trt, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value 2times - 1time == 0 3.443 1.443 2.385 0.13816 4times - 1time == 0 6.593 1.443 4.568 < 0.001 *** drugD - 1time == 0 9.579 1.443 6.637 < 0.001 *** drugE - 1time == 0 15.166 1.443 10.507 < 0.001 *** 4times - 2times == 0 3.150 1.443 2.182 0.20503 drugD - 2times == 0 6.136 1.443 4.251 < 0.001 *** drugE - 2times == 0 11.723 1.443 8.122 < 0.001 *** drugD - 4times == 0 2.986 1.443 2.069 0.25124 drugE - 4times == 0 8.573 1.443 5.939 < 0.001 *** drugE - drugD == 0 5.586 1.443 3.870 0.00307 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > # adjusted p-values all-pairwise comparisons in a one-way layout > # (tests for free combinations -> p-values will be larger) > simtest(response ~ trt, data=cholesterol, type="Tukey", + ttype="free") Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lm(formula = response ~ trt, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value 2times - 1time == 0 3.443 1.443 2.385 0.13805 4times - 1time == 0 6.593 1.443 4.568 < 0.001 *** drugD - 1time == 0 9.579 1.443 6.637 < 0.001 *** drugE - 1time == 0 15.166 1.443 10.507 < 0.001 *** 4times - 2times == 0 3.150 1.443 2.182 0.20504 drugD - 2times == 0 6.136 1.443 4.251 < 0.001 *** drugE - 2times == 0 11.723 1.443 8.122 < 0.001 *** drugD - 4times == 0 2.986 1.443 2.069 0.25129 drugE - 4times == 0 8.573 1.443 5.939 < 0.001 *** drugE - drugD == 0 5.586 1.443 3.870 0.00313 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > # the following lines illustrate the basic principles of > # parameter estimation used in all functions in this package > # and how the low-level functions can be used with raw parameter > # estimates. > > # the full design matrix (with reduced rank!) > x <- cbind(1, + matrix(c(rep(c(rep(1,10), rep(0,50)), 4), + rep(1, 10)), nrow = 50)) > y <- cholesterol$response > > xpxi <- multcomp:::MPinv(t(x) %*% x)$MPinv > rankx <- sum(diag((xpxi %*% (t(x) %*% x)))) > n <- nrow(x) > p <- ncol(x) > df <- round(n-rankx) > > # parameter estimates and their correlation > parm <- xpxi %*% t(x) %*% y > mse <- t(y-x %*% parm) %*% (y-x %*% parm)/df > covm <- mse[1,1]*xpxi > > # the contrast matrix > contrast <- contrMat(table(cholesterol$trt), type="Tukey") > > # use the work-horse directly (and add zero column for the intercept) > > csimint(estpar=parm, df=df, covm=covm, cmatrix=cbind(0, contrast)) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: user-defined Contrasts Fit: NULL Estimated Quantile = 2.8416 Linear Hypotheses: Estimate lwr upr 2times - 1time == 0 3.4430 -0.6584 7.5444 4times - 1time == 0 6.5928 2.4914 10.6943 drugD - 1time == 0 9.5792 5.4778 13.6806 drugE - 1time == 0 15.1655 11.0641 19.2670 4times - 2times == 0 3.1498 -0.9516 7.2513 drugD - 2times == 0 6.1362 2.0348 10.2376 drugE - 2times == 0 11.7226 7.6211 15.8240 drugD - 4times == 0 2.9864 -1.1151 7.0878 drugE - 4times == 0 8.5727 4.4713 12.6742 drugE - drugD == 0 5.5864 1.4849 9.6878 95% family-wise confidence level Warning message: 'csimint' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > csimtest(estpar=parm, df=df, covm=covm, cmatrix=cbind(0, contrast), + ttype="logical") Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: user-defined Contrasts Fit: NULL Linear Hypotheses: Estimate Std. Error t value p value 2times - 1time == 0 3.443 1.443 2.385 0.138175 4times - 1time == 0 6.593 1.443 4.568 0.000342 *** drugD - 1time == 0 9.579 1.443 6.637 < 1e-04 *** drugE - 1time == 0 15.166 1.443 10.507 < 1e-04 *** 4times - 2times == 0 3.150 1.443 2.182 0.205041 drugD - 2times == 0 6.136 1.443 4.251 0.000977 *** drugE - 2times == 0 11.723 1.443 8.122 < 1e-04 *** drugD - 4times == 0 2.986 1.443 2.069 0.251301 drugE - 4times == 0 8.573 1.443 5.939 < 1e-04 *** drugE - drugD == 0 5.586 1.443 3.870 0.003060 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'csimtest' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > cleanEx(); ..nameEx <- "contrMat" > > ## Keywords: 'datasets'. > > > data(detergent) > > N <- rep(2, 5) > > # BIBD: prepare the contrast matrix = all-pair comparisons for > # the 5 levels of detergent > C <- contrMat(N, type="Tukey") > # the additional 10 columns of are for the 10 blocks > C <- cbind( matrix(0, ncol=10, nrow=10), C ) > # numerate the contrasts > colnames(C) <- NULL > rownames(C) <- paste("C", 1:nrow(C), sep="") > > # adjusted p-values > summary(simtest(plates ~ block+detergent, data=detergent, + cmatrix = list(detergent = contrMat(table(detergent$detergent), type = "Tukey")))) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: lm(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -2.1333 0.8679 -2.458 0.15020 C - A == 0 3.6000 0.8679 4.148 0.00586 ** D - A == 0 2.2000 0.8679 2.535 0.13155 E - A == 0 -4.3333 0.8679 -4.993 0.00111 ** C - B == 0 5.7333 0.8679 6.606 < 0.001 *** D - B == 0 4.3333 0.8679 4.993 0.00103 ** E - B == 0 -2.2000 0.8679 -2.535 0.13165 D - C == 0 -1.4000 0.8679 -1.613 0.51052 E - C == 0 -7.9333 0.8679 -9.140 < 0.001 *** E - D == 0 -6.5333 0.8679 -7.527 < 0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > # whichf="detergent", type="Tukey", ttype="logical")) # , cmatrix=C)) > > > ## Keywords: 'datasets'. > > > cleanEx(); ..nameEx <- "recovery" > ###--- >>> `recovery' <<<----- Recovery Time Data Set > > ## alias help(recovery) > > ##___ Examples ___: > > data(recovery) > > # one-sided simultaneous confidence intervals for Dunnett > # in the one-way layout > simint(minutes~blanket, data=recovery, conf.level=0.9, + alternative="less",eps=0.0001) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: lm(formula = minutes ~ blanket, data = recovery) Estimated Quantile = -1.843 Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82239 b2 - b0 >= 0 -7.46667 -Inf -4.51094 b3 - b0 >= 0 -1.66667 -Inf -0.03606 90% family-wise confidence level Warning message: 'simint.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > # same results, but specifying the contrast matrix by hand > C <- c(0, 0, 0, -1, -1, -1, 1, 0, 0, 0, 1, 0, 0, 0, 1) > C <- matrix(C, ncol=5) > # numerate the contrasts > rownames(C) <- paste("C", 1:nrow(C), sep="") > test <- simint(minutes~blanket, data=recovery, conf.level=0.9, + alternative="less",eps=0.0001, cmatrix=C[,-1]) Warning message: 'simint.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > print(test) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: lm(formula = minutes ~ blanket, data = recovery) Estimated Quantile = -1.8431 Linear Hypotheses: Estimate lwr upr C1 >= 0 -2.1333 -Inf 0.8227 C2 >= 0 -7.4667 -Inf -4.5107 C3 >= 0 -1.6667 -Inf -0.0359 90% family-wise confidence level > > # same results, but more detailed information using the summary method > summary(test) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: lm(formula = minutes ~ blanket, data = recovery) Estimated Quantile = -1.8431 Linear Hypotheses: Estimate lwr upr C1 >= 0 -2.1333 -Inf 0.8227 C2 >= 0 -7.4667 -Inf -4.5107 C3 >= 0 -1.6667 -Inf -0.0359 90% family-wise confidence level > > ## Keywords: 'datasets'. > > > cleanEx(); ..nameEx <- "simint" > ###--- >>> `simint' <<<----- Simultaneous Intervals > > ## alias help(simint) > ## alias help(simint.default) > ## alias help(simint.formula) > > ##___ Examples ___: > > data(recovery) > > # one-sided simultaneous confidence intervals for Dunnett > # in the one-way layout > summary(simint(minutes~blanket, data=recovery, type="Dunnett", conf.level=0.9, + alternative="less",eps=0.0001)) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: lm(formula = minutes ~ blanket, data = recovery) Estimated Quantile = -1.843 Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82239 b2 - b0 >= 0 -7.46667 -Inf -4.51094 b3 - b0 >= 0 -1.66667 -Inf -0.03606 90% family-wise confidence level Warning message: 'simint.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > > ## Keywords: 'htest'. > > > cleanEx(); ..nameEx <- "simtest" > ###--- >>> `simtest' <<<----- Simultaneous comparisons > > ## alias help(simtest.default) > ## alias help(simtest.formula) > ## alias help(simtest) > > ##___ Examples ___: > > data(cholesterol) > > # adjusted p-values for all-pairwise comparisons in a onw-way > # layout (tests for restricted combinations) > simtest(response ~ trt, data=cholesterol, type="Tukey", ttype="logical") Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lm(formula = response ~ trt, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value 2times - 1time == 0 3.443 1.443 2.385 0.13816 4times - 1time == 0 6.593 1.443 4.568 < 0.001 *** drugD - 1time == 0 9.579 1.443 6.637 < 0.001 *** drugE - 1time == 0 15.166 1.443 10.507 < 0.001 *** 4times - 2times == 0 3.150 1.443 2.182 0.20503 drugD - 2times == 0 6.136 1.443 4.251 < 0.001 *** drugE - 2times == 0 11.723 1.443 8.122 < 0.001 *** drugD - 4times == 0 2.986 1.443 2.069 0.25124 drugE - 4times == 0 8.573 1.443 5.939 < 0.001 *** drugE - drugD == 0 5.586 1.443 3.870 0.00307 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > > ## Keywords: 'htest'. > > > cleanEx(); ..nameEx <- "tire" > ###--- >>> `tire' <<<----- Tire Wear Data Set > > ## alias help(tire) > > ##___ Examples ___: > > #tire <- read.csv("tire.csv", header = TRUE) > #C <- c(0,1,-1,0,10,-10) > #for ( x in seq(15,70,5) ) { C <- rbind( C,c(0,1,-1,0,x,-x) ) } > ## numerate the contrasts > #rownames(C) <- paste("C", 1:nrow(C), sep="") > # > ## simultaneous confidence intervals of two regression functions > #summary(simint(cost ~ make + mph + make:mph, data=tire, > # cmatrix=C, eps=0.001, whichf = NULL)) > > ## Keywords: 'datasets'. > > > cleanEx(); ..nameEx <- "waste" > ###--- >>> `waste' <<<----- Industrial Waste Data Set > > ## alias help(waste) > > ##___ Examples ___: > > data(waste) > summary(aov(waste ~ envir + temp + envir*temp, data=waste)) Df Sum Sq Mean Sq F value Pr(>F) envir 4 24.6854 6.1713 5.2532 0.0075463 ** temp 2 30.6928 15.3464 13.0632 0.0005185 *** envir:temp 8 22.9116 2.8639 2.4378 0.0651340 . Residuals 15 17.6217 1.1748 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > > #summary(simint(waste ~ envir:temp, data=waste, > # type="Tetrade", eps = 0.01)) > > ## Keywords: 'datasets'. > > > cat("Time elapsed: ", proc.time() - get("ptime", env = .CheckExEnv),"\n") Time elapsed: 11.652 0.388 12.217 0 0 > dev.off(); quit('no') null device 1 multcomp/inst/deprecated/multcomp-deprecated.Rd0000644000176000001440000001032311471214242021441 0ustar ripleyusers\name{multcomp-deprecated} \alias{multcomp-deprecated} \alias{simint} \alias{simint.default} \alias{simint.formula} \alias{simint.lm} \alias{csimint} \alias{simtest} \alias{simtest.default} \alias{simtest.formula} \alias{simtest.lm} \alias{csimtest} \title{ Deprecated Functions multcomp Package } \description{ These functions are provided for compatibility with older versions of \code{multcomp} only, and may be defunct in the next release. } \usage{ csimint(estpar, df, covm, cmatrix=NULL, ctype="user-defined", conf.level=0.95, alternative=c("two.sided","less","greater"), asympt=FALSE, eps=0.001, maxpts=1000000) \method{simint}{default}(object, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott"), cmatrix = NULL, conf.level = 0.95, alternative = c("two.sided","less","greater"), eps = 0.001, maxpts = 1e+06, whichf) \method{simint}{formula}(formula, data=list(), subset, na.action, ...) \method{simint}{lm}(object, psubset = NULL, ...) csimtest(estpar, df, covm, cmatrix=NULL, ctype="user-defined", ttype=c("free","logical"), alternative=c("two.sided","less","greater"), asympt=FALSE, eps=0.001, maxpts=1000000) \method{simtest}{default}(object, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott"), ttype = c("free", "logical"), cmatrix = NULL, conf.level = 0.95, alternative = c("two.sided","less","greater"), eps = 0.001, maxpts = 1e+06, whichf) \method{simtest}{formula}(formula, data=list(), subset, na.action, ...) \method{simtest}{lm}(object, psubset = NULL, ...) } \arguments{ \item{type}{the type of contrast to be used.} \item{cmatrix}{the contrast matrix itself can be specified. If \code{cmatrix} is defined, \code{type} is ignored.} \item{conf.level}{confidence level.} \item{alternative}{the alternative hypothesis must be one of \code{"two.sided"} (default), \code{"greater"} or \code{"less"}. You can specify just the initial letter.} \item{asympt}{a logical indicating whether the (exact) t-distribution or the normal approximation should be used.} \item{eps}{absolute error tolerance as double.} \item{maxpts}{maximum number of function values as integer.} \item{psubset}{a vector of integers or characters indicating for which subset of coefficients of a (generalized) linear model \code{y} simultaneous confidences intervals should be computed.} \item{formula}{a symbolic description of the model to be fit.} \item{data}{an optional data frame containing the variables in the model. By default the variables are taken from \code{Environment(formula)}, typically the environment from which \code{simint} is called.} \item{subset}{an optional vector specifying a subset of observations to be used.} \item{na.action}{a function which indicates what should happen when the data contain \code{NA}'s. Defaults to \code{GetOption("na.action")}.} \item{whichf}{if more than one factor is given in the right hand side of \code{formula}, \code{whichf} can be used to defined the factor to compute contrasts of.} \item{ttype}{Specifies whether the logical constraint method of Westfall (1997) will be used, or whether the unconstrained method will be used.} \item{estpar}{ estimated parameter vector. } \item{df}{ degrees of freedom. } \item{covm}{ estimated covariance matrix of \code{estpar}. } \item{ctype}{ a string describing the kind of contrast matrix used.} \item{object}{ a fitted model.} \item{\dots}{further arguments to be passed to or from methods.} } \details{ The generics \code{simint} and \code{simtest} implement the user interface for multcomp versions up to 0.4-8. The user visible functions \code{simint}, \code{csimint}, \code{simtest}, \code{csimtest} have been replaced by one single function \code{\link{glht}} which offers \code{\link{summary.glht}} and \code{\link{confint.glht}} methods for simultaneous tests and confidence intervals, respectively. Please use \code{\link{glht}} for your analyses. The old user interface will be removed in future versions of this package. } \keyword{misc} multcomp/inst/deprecated/deprecated.R0000644000176000001440000001302311471214242017437 0ustar ripleyusers simint <- function(object, ...) UseMethod("simint") simtest <- function(object, ...) UseMethod("simtest") csimint <- function(estpar, df, covm, cmatrix=NULL, ctype="user-defined", conf.level=0.95, alternative=c("two.sided","less","greater"), asympt=FALSE, eps=0.001, maxpts=1000000) { if (is.null(cmatrix)) cmatrix <- diag(length(estpar)) object <- list(object = NULL, linfct = cmatrix, coef = estpar, vcov = covm, type = ctype, alternative = match.arg(alternative), df = ifelse(is.null(df) || asympt, 0, df), rhs = rep(0, nrow(cmatrix))) class(object) <- "glht" .Deprecated("glht", package = "multcomp") confint(object, level = conf.level, abseps = eps, maxpts = maxpts) } simint.default <- function(object, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott"), cmatrix = NULL, conf.level = 0.95, alternative = c("two.sided","less","greater"), eps = 0.001, maxpts = 1e+06, whichf = NULL) { if (!is.null(cmatrix)) { K <- cmatrix if (is.list(K)) class(K) <- "mcp" if (is.matrix(K) && length(whichf) == 1) { K <- list(K) names(K) <- whichf[1] class(K) <- "mcp" } } else { K <- list(match.arg(type)) names(K) <- whichf class(K) <- "mcp" } tglht <- glht(object, linfct = K, alternative = match.arg(alternative)) .Deprecated("glht", package = "multcomp") confint(tglht, level = conf.level, abseps = eps, maxpts = maxpts) } simint.formula <- function(formula, data=list(), subset, na.action, ...) { cl <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action"), names(cl), 0) cl <- cl[c(1, m)] cl[[1]] <- as.name("lm") object <- eval(cl, parent.frame()) addargs <- list(...) whichf <- addargs$whichf if (is.null(whichf)) { mm <- model.frame(object) whichf <- names(mm)[sapply(mm, class) == "factor"] } addargs$whichf <- whichf addargs$object <- object do.call("simint.default", addargs) } simint.lm <- function(object, psubset = NULL, ...) { beta <- coef(object) cmatrix <- list(...)$cmatrix if (!is.null(cmatrix)) return(simint.default(object, ...)) if (is.null(psubset)) return(simint.default(object, cmatrix = diag(length(beta)), ...)) psubset <- which(beta %in% beta[psubset]) simint.default(object, cmatrix = diag(length(beta))[psubset,]) } csimtest <- function(estpar, df, covm, cmatrix=NULL, ctype="user-defined", ttype=c("free","logical"), alternative=c("two.sided","less","greater"), asympt=FALSE, eps=0.001, maxpts=1000000) { if (is.null(cmatrix)) cmatrix <- diag(length(estpar)) object <- list(object = NULL, linfct = cmatrix, coef = estpar, vcov = covm, type = ctype, alternative = match.arg(alternative), df = ifelse(is.null(df) || asympt, 0, df), rhs = rep(0, nrow(cmatrix))) class(object) <- "glht" ttype <- match.arg(ttype) if (ttype == "free") distr <- adjusted("free") if (ttype == "logical") distr <- adjusted("Westfall") .Deprecated("glht", package = "multcomp") summary(object, distribution = distr, abseps = eps, maxpts = maxpts) } simtest.default <- function(object, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott"), ttype = c("free", "logical"), cmatrix = NULL, conf.level = 0.95, alternative = c("two.sided","less","greater"), eps = 0.001, maxpts = 1e+06, whichf = NULL) { if (!is.null(cmatrix)) { K <- cmatrix if (is.list(K)) class(K) <- "mcp" if (is.matrix(K) && length(whichf) == 1) { K <- list(K) names(K) <- whichf[1] class(K) <- "mcp" } } else { K <- list(match.arg(type)) names(K) <- whichf class(K) <- "mcp" } tglht <- glht(object, linfct = K, alternative = match.arg(alternative)) .Deprecated("glht", package = "multcomp") ttype <- match.arg(ttype) if (ttype == "free") distr <- adjusted("free") if (ttype == "logical") distr <- adjusted("Westfall") summary(tglht, distribution = distr, abseps = eps, maxpts = maxpts) } simtest.formula <- function(formula, data=list(), subset, na.action, ...) { cl <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action"), names(cl), 0) cl <- cl[c(1, m)] cl[[1]] <- as.name("lm") object <- eval(cl, parent.frame()) addargs <- list(...) whichf <- addargs$whichf if (is.null(whichf)) { mm <- model.frame(object) whichf <- names(mm)[sapply(mm, class) == "factor"] } addargs$whichf <- whichf addargs$object <- object do.call("simtest.default", addargs) } simtest.lm <- function(object, psubset = NULL, ...) { beta <- coef(object) cmatrix <- list(...)$cmatrix if (!is.null(cmatrix)) return(simtest.default(object, ...)) if (is.null(psubset)) return(simtest.default(object, cmatrix = diag(length(beta)), ...)) psubset <- which(beta %in% beta[psubset]) simtest.default(object, cmatrix = diag(length(beta))[psubset,]) } summary.summary.glht <- function(object, ...) print(object) summary.confint.glht <- function(object, ...) print(object) multcomp/inst/deprecated/multcomp-oldtests.R0000644000176000001440000001525111471214242021043 0ustar ripleyusersattach(NULL, name = "CheckExEnv") assign(".CheckExEnv", as.environment(2), pos = length(search())) # base ## This plot.new() patch has no effect yet for persp(); ## layout() & filled.contour() are now ok assign("plot.new", function() { .Internal(plot.new()) pp <- par(c("mfg","mfcol","oma","mar")) if(all(pp$mfg[1:2] == c(1, pp$mfcol[2]))) { outer <- (oma4 <- pp$oma[4]) > 0; mar4 <- pp$mar[4] mtext(paste("help(",..nameEx,")"), side = 4, line = if(outer)max(1, oma4 - 1) else min(1, mar4 - 1), outer = outer, adj=1, cex= .8, col="orchid")} }, env = .CheckExEnv) assign("cleanEx", function(env = .GlobalEnv) { rm(list = ls(envir = env, all.names = TRUE), envir = env) RNGkind("Wichmann-Hill", "Kinderman-Ramage") set.seed(290875) # assign(".Random.seed", c(0,rep(7654,3)), pos=1) }, env = .CheckExEnv) assign("..nameEx", "__{must remake R-ex/*.R}__", env = .CheckExEnv) #-- for now assign("ptime", proc.time(), env = .CheckExEnv) postscript("multcomp-Examples.ps") assign("par.postscript", par(no.readonly = TRUE), env = .CheckExEnv) options(contrasts = c(unordered = "contr.treatment", ordered = "contr.poly")) library('multcomp') cleanEx(); ..nameEx <- "MultipleEndpoints" ###--- >>> `MultipleEndpoints' <<<----- Multiple Endpoints Data Set ## alias help(MultipleEndpoints) ##___ Examples ___: cleanEx(); ..nameEx <- "angina" ###--- >>> `angina' <<<----- Dose Response Data Set ## alias help(angina) ##___ Examples ___: load("angina.rda") # perform a dose-response analysis using simultaneous confidence # intervals for Willimas' contrasts summary(simint(response~dose, data=angina, alternative="greater", type="Williams")) # compute now adjusted p-values for McDermott's test on trend summary(simtest(response~dose, data=angina, type="McDermott", alternative="greater",ttype="logical")) ## Keywords: 'datasets'. cleanEx(); ..nameEx <- "cholesterol" ### * cholesterol ### Name: cholesterol ### Title: Cholesterol Reduction Data Set ### Aliases: cholesterol ### Keywords: datasets ### ** Examples data(cholesterol) # adjusted p-values for all-pairwise comparisons in a one-way layout # tests for restricted combinations simtest(response ~ trt, data=cholesterol, type="Tukey", ttype="logical") # adjusted p-values all-pairwise comparisons in a one-way layout # (tests for free combinations -> p-values will be larger) simtest(response ~ trt, data=cholesterol, type="Tukey", ttype="free") # the following lines illustrate the basic principles of # parameter estimation used in all functions in this package # and how the low-level functions can be used with raw parameter # estimates. # the full design matrix (with reduced rank!) x <- cbind(1, matrix(c(rep(c(rep(1,10), rep(0,50)), 4), rep(1, 10)), nrow = 50)) y <- cholesterol$response xpxi <- multcomp:::MPinv(t(x) %*% x)$MPinv rankx <- sum(diag((xpxi %*% (t(x) %*% x)))) n <- nrow(x) p <- ncol(x) df <- round(n-rankx) # parameter estimates and their correlation parm <- xpxi %*% t(x) %*% y mse <- t(y-x %*% parm) %*% (y-x %*% parm)/df covm <- mse[1,1]*xpxi # the contrast matrix contrast <- contrMat(table(cholesterol$trt), type="Tukey") # use the work-horse directly (and add zero column for the intercept) csimint(estpar=parm, df=df, covm=covm, cmatrix=cbind(0, contrast)) csimtest(estpar=parm, df=df, covm=covm, cmatrix=cbind(0, contrast), ttype="logical") cleanEx(); ..nameEx <- "contrMat" ## Keywords: 'datasets'. data(detergent) N <- rep(2, 5) # BIBD: prepare the contrast matrix = all-pair comparisons for # the 5 levels of detergent C <- contrMat(N, type="Tukey") # the additional 10 columns of are for the 10 blocks C <- cbind( matrix(0, ncol=10, nrow=10), C ) # numerate the contrasts colnames(C) <- NULL rownames(C) <- paste("C", 1:nrow(C), sep="") # adjusted p-values summary(simtest(plates ~ block+detergent, data=detergent, cmatrix = list(detergent = contrMat(table(detergent$detergent), type = "Tukey")))) # whichf="detergent", type="Tukey", ttype="logical")) # , cmatrix=C)) ## Keywords: 'datasets'. cleanEx(); ..nameEx <- "recovery" ###--- >>> `recovery' <<<----- Recovery Time Data Set ## alias help(recovery) ##___ Examples ___: data(recovery) # one-sided simultaneous confidence intervals for Dunnett # in the one-way layout simint(minutes~blanket, data=recovery, conf.level=0.9, alternative="less",eps=0.0001) # same results, but specifying the contrast matrix by hand C <- c(0, 0, 0, -1, -1, -1, 1, 0, 0, 0, 1, 0, 0, 0, 1) C <- matrix(C, ncol=5) # numerate the contrasts rownames(C) <- paste("C", 1:nrow(C), sep="") test <- simint(minutes~blanket, data=recovery, conf.level=0.9, alternative="less",eps=0.0001, cmatrix=C[,-1]) print(test) # same results, but more detailed information using the summary method summary(test) ## Keywords: 'datasets'. cleanEx(); ..nameEx <- "simint" ###--- >>> `simint' <<<----- Simultaneous Intervals ## alias help(simint) ## alias help(simint.default) ## alias help(simint.formula) ##___ Examples ___: data(recovery) # one-sided simultaneous confidence intervals for Dunnett # in the one-way layout summary(simint(minutes~blanket, data=recovery, type="Dunnett", conf.level=0.9, alternative="less",eps=0.0001)) ## Keywords: 'htest'. cleanEx(); ..nameEx <- "simtest" ###--- >>> `simtest' <<<----- Simultaneous comparisons ## alias help(simtest.default) ## alias help(simtest.formula) ## alias help(simtest) ##___ Examples ___: data(cholesterol) # adjusted p-values for all-pairwise comparisons in a onw-way # layout (tests for restricted combinations) simtest(response ~ trt, data=cholesterol, type="Tukey", ttype="logical") ## Keywords: 'htest'. cleanEx(); ..nameEx <- "tire" ###--- >>> `tire' <<<----- Tire Wear Data Set ## alias help(tire) ##___ Examples ___: #tire <- read.csv("tire.csv", header = TRUE) #C <- c(0,1,-1,0,10,-10) #for ( x in seq(15,70,5) ) { C <- rbind( C,c(0,1,-1,0,x,-x) ) } ## numerate the contrasts #rownames(C) <- paste("C", 1:nrow(C), sep="") # ## simultaneous confidence intervals of two regression functions #summary(simint(cost ~ make + mph + make:mph, data=tire, # cmatrix=C, eps=0.001, whichf = NULL)) ## Keywords: 'datasets'. cleanEx(); ..nameEx <- "waste" ###--- >>> `waste' <<<----- Industrial Waste Data Set ## alias help(waste) ##___ Examples ___: data(waste) summary(aov(waste ~ envir + temp + envir*temp, data=waste)) #summary(simint(waste ~ envir:temp, data=waste, # type="Tetrade", eps = 0.01)) ## Keywords: 'datasets'. cat("Time elapsed: ", proc.time() - get("ptime", env = .CheckExEnv),"\n") dev.off(); quit('no') multcomp/inst/NEWS0000644000176000001440000002340512223513452013621 0ustar ripleyusers CHANGES in `multcomp' VERSION 1.3-0 o new glht method for multiple marginal models and corresponding linear functions implements Pipper, Ritz, Bisgaard (2012), see ?mmm CHANGES in `multcomp' VERSION 1.2-21 o fix broken vignette PDF files o remove all Rout.save files; these can be downloaded from R-forge.R-project.org now CHANGES in `multcomp' VERSION 1.2-20 o make sure to use par(no.readonly = TRUE) TH.data CHANGES in `multcomp' VERSION 1.2-19 o fix broken vignette PDFs CHANGES in `multcomp' VERSION 1.2-18 o improve plotting one-sided confidence intervals CHANGES in `multcomp' VERSION 1.2-17 o fix typo in DESCRIPTION file CHANGES in `multcomp' VERSION 1.2-16 o allow for levels with "-" and other special symbols for cld() o fix cld(..., decreasing = TRUE) problem (thanks to Luciano Selzer) CHANGES in `multcomp' VERSION 1.2-15 o fix DESCRIPTION file entries CHANGES in `multcomp' VERSION 1.2-14 o catch download errors in vignette CHANGES in `multcomp' VERSION 1.2-13 o interaction terms can now be part of linear function CHANGES in `multcomp' VERSION 1.2-12 o model.matrix.polr returns intercept which needs to be removed CHANGES in `multcomp' VERSION 1.2-11 o handle merMod objects (package lme4 aka lme4Eigen) CHANGES in `multcomp' VERSION 1.2-10 o handle polr objects in package, not only in vignette o move vignettes CHANGES in `multcomp' VERSION 1.2-9 o new coxme methods CHANGES in `multcomp' VERSION 1.2-8 o new argument `decreasing' for cld(), code donated by Luciano Selzer CHANGES in `multcomp' VERSION 1.2-7 o new examples on 2-way ANOVA models, potentially with interactions, in vignette `multcomp-examples' CHANGES in `multcomp' VERSION 1.2-6 o `manual' na.omit before stepAIC is called in chfls1.Rnw vignette o use lmrob.control(setting = "KS2011") in generalsiminf.Rnw CHANGES in `multcomp' VERSION 1.2-5 o missing comment in multcomp_VA.R CHANGES in `multcomp' VERSION 1.2-4 o fix problem with plot.glht (lwd = 0 does not make sense) CHANGES in `multcomp' VERSION 1.2-3 o new example on frailty models, see ?cml CHANGES in `multcomp' VERSION 1.2-2 o fix dependencies, really o add book to DESCRIPTION file CHANGES in `multcomp' VERSION 1.2-1 o fix dependencies CHANGES in `multcomp' VERSION 1.2-0 o demos for "Multiple Comparisons Using R" by Bretz, Hothorn & Westfall (2010) CHANGES in `multcomp' VERSION 1.1-8 o example on simultaneous tests against one- and two-sided alternatives in ?glht. CHANGES in `multcomp' VERSION 1.1-7 o mix of alternatives is currently not supported and also mcp() gives and error now. CHANGES in `multcomp' VERSION 1.1-6 o quantiles for confidence intervals used `tail = upper.tail' for `alternative = less' and `tail = lower.tail' for `alternative = greater'. This has been changed. o prepare for multcomp book: - SAS code in inst/MCMT - new demos o source code for simulations with unbalanced heteroscedstic designs added CHANGES in `multcomp' VERSION 1.1-5 o fix small problems in `cld' spotted by Peter B. Mandeville CHANGES in `multcomp' VERSION 1.1-4 o more example data sets CHANGES in `multcomp' VERSION 1.1-3 o bugfix for models without intercept and more than one factor o print calls when available only o support for coxme objects o allow xlab and ylab arguments for plot.cld o systolic blood pressure data set added CHANGES in `multcomp' VERSION 1.1-2 o mcp may average over interactions and covariates (Experimental!) o ylim argument to plot o update to survival 2.35-7 CHANGES in `multcomp' VERSION 1.1-1 o better handling of model.frames in `cld' CHANGES in `multcomp' VERSION 1.1-0 o new compact letter displays o force binary mode when downloading SPSS data files CHANGES in `multcomp' VERSION 1.0-8 o new vignette containing supplementary material for a letter on Pollet \& Nettle (2009, Evolution and Human Behavior) o references updated CHANGES in `multcomp' VERSION 1.0-7 o new default for missing linfct: inference over all parameters as given by coef(model) o new function cftest, similar to lmtest:::coeftest CHANGES in `multcomp' VERSION 1.0-6 o better names for p-values (feature request by Achim Zeileis) CHANGES in `multcomp' VERSION 1.0-5 o update vignette CHANGES in `multcomp' VERSION 1.0-4 o fix Rd problems CHANGES in `multcomp' VERSION 1.0-3 o use isSymmetric(vcov, tol = sqrt(.Machine$double.eps) to check for symmetry of covariance matrices in `parm' (suggested by Fritz) o better error messages suggested by Rich CHANGES in `multcomp' VERSION 1.0-2 o use new model.matrix / model.frame methods for class mer in lme4 (>= 0.999375-16) CHANGES in `multcomp' VERSION 1.0-1 o make sure more than 2 groups are present in contrMat() o check if `model' is an S4 object before trying to extract its `call' slot o better warning when df.residual fails CHANGES in `multcomp' VERSION 1.0-0 o unify both vignettes o mcp() doesn't try to take care of interaction terms anymore CHANGES in `multcomp' VERSION 0.993-3 o new `parm' function for specifying model parameters estimated elsewhere o improve print method for confidence intervals o new adjustment method `free' (for free combinations) CHANGES in `multcomp' VERSION 0.993-2 o make sure names are printed correctly when nrow(K) = 1 o interaction terms are now correctly handled when a symbolic descripton of the hypotheses is supplied, thanks to Antonio Fabio Di Narzo for spotting. CHANGES in `multcomp' VERSION 0.993-1 o new vignette `Simultaneous Inference in General Parametric Models' o warn if ... arguments are ignored o levels in trees513 data slightly changed. CHANGES in `multcomp' VERSION 0.992-9 o remove deprecated functions simint and simtest (the files are still available from multcomp/inst/deprecated) o better error message when factors specified in mcp() aren't found in model CHANGES in `multcomp' VERSION 0.992-8 o add model.frame and model.matrix methods for class `lme' (feature request by Antonio Rausell ) o new data set `trees513' CHANGES in `multcomp' VERSION 0.992-7 o new contrasts `UmbrellaWilliams' and `GrandMean' (thanks to Daniel Gerhard ) CHANGES in `multcomp' VERSION 0.992-6 o add support for lme4::(g)lmer2 objects (thanks to Manuel Eugster) o coef. and vcov. didn't always pass through, spotted by John Deke CHANGES in `multcomp' VERSION 0.992-5 o remove non_function entries in Rd files CHANGES in `multcomp' VERSION 0.992-4 o update to mvtnorm 0.8-0 CHANGES in `multcomp' VERSION 0.992-3 o better support for `mer', `lmer' and `glmer' objects (package `lme4') CHANGES in `multcomp' VERSION 0.992-2 o add support for `lme' objects (feature request by John Wilkinson and Dieter Menne ) CHANGES in `multcomp' VERSION 0.992-1 o fix LaTeX problem in vignette (spotted by Brian D. Ripley) CHANGES in `multcomp' VERSION 0.991-9 o fix some minor problems spotted for plotting or printing of confidence intervals (thanks for Rich Heiberger and Ludwig Hothorn) CHANGES in `multcomp' VERSION 0.991-8 o make sure `type' is available o catch errors with `aovlist' objects o print for confint method indicates if confidence intervals are adjusted or univariate CHANGES in `multcomp' VERSION 0.991-7 o try to deal with non-estimable coefficients in `model': if the correspondings columns of `linfct' are zero anyway, we silently proceed. If not, we stop and ask for a correctly specified model. o try to detect interactions with numeric covariates. We need to choose a specific value here but it seems hard to add something appropriate to the user interface (I don't want to touch `mcp'). For the time being, we fire a warning and the user can modify `linfct' manually. o add mcp( = "Means"), contribution by Richard M. Heiberger o add Rich to DESCRIPTION file CHANGES in `multcomp' VERSION 0.991-5 o plot.confint allows for specification of xlim, xlab and main (patch by Rich Heiberger) CHANGES in `multcomp' VERSION 0.991-4 o Depends: stats o confint(..., calpha = x) can be used to specify critical values directly (with x being either a function or a scalar) CHANGES in `multcomp' VERSION 0.991-3 Implement feature requests by Rich Heiberger : o glht.mcp adds a `focus' element to the returned object containing the names of the factors under test o plot.glht calls plot.confint.glht o documentation updates o fixed three minor bugs CHANGES in `multcomp' VERSION 0.991-2 o mcp(fact = K) with K = contrMat(...) didn't work spotted by Yves Brostaux multcomp/inst/MCMT/0000755000176000001440000000000012234660136013662 5ustar ripleyusersmultcomp/inst/MCMT/MCMT.Rout0000644000176000001440000016573711471214241015312 0ustar ripleyusers R version 2.6.1 (2007-11-26) Copyright (C) 2007 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ################################################################ > # > # Reproduction of examples presented in > # > # Multiple Comparisons and Multiple Tests > # Using the SAS System > # > # by P. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger > # and Y. Hochberg > # > # SAS Institute Inc., Cary, NC, 1999 > # > ################################################################ > > library("multcomp") Loading required package: mvtnorm > set.seed(290875) > load(system.file("MCMT/MCMT.rda", package = "multcomp")) > > ### weights loss data, page 47 > > amod <- aov(wloss ~ diet, data = wloss) > amod Call: aov(formula = wloss ~ diet, data = wloss) Terms: diet Residuals Sum of Squares 59.8792 44.7040 Deg. of Freedom 4 45 Residual standard error: 0.9967057 Estimated effects may be unbalanced > > gh <- glht(amod, mcp(diet = "Tukey")) > > # page 49 / 50 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = wloss ~ diet, data = wloss) Estimated Quantile = 2.8415 Linear Hypotheses: Estimate lwr upr B - A == 0 -1.0300 -2.2966 0.2366 C - A == 0 -1.7800 -3.0466 -0.5134 D - A == 0 -2.7800 -4.0466 -1.5134 E - A == 0 0.1200 -1.1466 1.3866 C - B == 0 -0.7500 -2.0166 0.5166 D - B == 0 -1.7500 -3.0166 -0.4834 E - B == 0 1.1500 -0.1166 2.4166 D - C == 0 -1.0000 -2.2666 0.2666 E - C == 0 1.9000 0.6334 3.1666 E - D == 0 2.9000 1.6334 4.1666 95% family-wise confidence level > > amod <- aov(wloss ~ diet - 1, data = wloss) > K <- diag(nlevels(wloss$diet)) > rownames(K) <- levels(wloss$diet) > gh <- glht(amod, K) > > # page 61 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Fit: aov(formula = wloss ~ diet - 1, data = wloss) Estimated Quantile = 2.6758 Linear Hypotheses: Estimate lwr upr A == 0 12.0500 11.2066 12.8934 B == 0 11.0200 10.1766 11.8634 C == 0 10.2700 9.4266 11.1134 D == 0 9.2700 8.4266 10.1134 E == 0 12.1700 11.3266 13.0134 95% family-wise confidence level > > > ### tox data, page 56 > > amod <- aov(gain ~ g, data = tox) > amod Call: aov(formula = gain ~ g, data = tox) Terms: g Residuals Sum of Squares 3478.949 4410.101 Deg. of Freedom 6 21 Residual standard error: 14.49154 Estimated effects may be unbalanced > > # page 56 -- OK > gh <- glht(amod, mcp(g = "Dunnett")) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = gain ~ g, data = tox) Estimated Quantile = 2.7909 Linear Hypotheses: Estimate lwr upr g1 - g0 == 0 -9.4800 -38.0785 19.1185 g2 - g0 == 0 -24.9000 -53.4985 3.6985 g3 - g0 == 0 -33.2400 -61.8385 -4.6415 g4 - g0 == 0 -13.5000 -42.0985 15.0985 g5 - g0 == 0 -20.7000 -49.2985 7.8985 g6 - g0 == 0 -31.1400 -59.7385 -2.5415 95% family-wise confidence level > > # page 59 -- OK > gh <- glht(amod, mcp(g = "Dunnett"), alternative = "less") > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = gain ~ g, data = tox) Estimated Quantile = -2.4485 Linear Hypotheses: Estimate lwr upr g1 - g0 >= 0 -9.4800 -Inf 15.6096 g2 - g0 >= 0 -24.9000 -Inf 0.1896 g3 - g0 >= 0 -33.2400 -Inf -8.1504 g4 - g0 >= 0 -13.5000 -Inf 11.5896 g5 - g0 >= 0 -20.7000 -Inf 4.3896 g6 - g0 >= 0 -31.1400 -Inf -6.0504 95% family-wise confidence level > > > ### coupon data, page 62 > > amod <- aov(purchase ~ discount , data = coupon) > > gh <- glht(amod, linfct = mcp(discount = rbind( + linear = c(-3, -1, 1, 3), + quad = c(-2, 2, 2, -2), + cubic = c(-1, 3, -3, 1)))) > > # page 63 -- OK (t^2 = F stats) > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = purchase ~ discount, data = coupon) Linear Hypotheses: Estimate Std. Error t value p value linear == 0 43.974 18.109 2.428 0.0589 . quad == 0 52.820 16.197 3.261 0.0072 ** cubic == 0 -0.802 18.109 -0.044 1.0000 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > > ### recover data, page 66 > > amod <- aov(minutes ~ blanket, data = recover) > > gh <- glht(amod, mcp(blanket = "Tukey")) > > # page 68 -- OK (small differences due to simuation accurary) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Estimated Quantile = 2.6524 Linear Hypotheses: Estimate lwr upr b1 - b0 == 0 -2.1333 -6.3872 2.1205 b2 - b0 == 0 -7.4667 -11.7205 -3.2128 b3 - b0 == 0 -1.6667 -4.0134 0.6801 b2 - b1 == 0 -5.3333 -10.9431 0.2765 b3 - b1 == 0 0.4667 -3.8787 4.8120 b3 - b2 == 0 5.8000 1.4547 10.1453 95% family-wise confidence level > > # page 76 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Linear Hypotheses: Estimate Std. Error t value p value b1 - b0 == 0 -2.1333 1.6038 -1.330 0.53278 b2 - b0 == 0 -7.4667 1.6038 -4.656 < 0.001 *** b3 - b0 == 0 -1.6667 0.8848 -1.884 0.23817 b2 - b1 == 0 -5.3333 2.1150 -2.522 0.06765 . b3 - b1 == 0 0.4667 1.6383 0.285 0.99120 b3 - b2 == 0 5.8000 1.6383 3.540 0.00528 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > gh <- glht(amod, mcp(blanket = "Dunnett")) > > # page 78 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Estimated Quantile = 2.4887 Linear Hypotheses: Estimate lwr upr b1 - b0 == 0 -2.1333 -6.1247 1.8581 b2 - b0 == 0 -7.4667 -11.4581 -3.4753 b3 - b0 == 0 -1.6667 -3.8686 0.5353 95% family-wise confidence level > > # page 79 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Linear Hypotheses: Estimate Std. Error t value p value b1 - b0 == 0 -2.1333 1.6038 -1.330 0.456 b2 - b0 == 0 -7.4667 1.6038 -4.656 <0.001 *** b3 - b0 == 0 -1.6667 0.8848 -1.884 0.182 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > gh <- glht(amod, mcp(blanket = "Dunnett"), alternative = "less") > > # page 80 -- OK > confint(gh, level = 0.9) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Estimated Quantile = -1.8426 Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82186 b2 - b0 >= 0 -7.46667 -Inf -4.51148 b3 - b0 >= 0 -1.66667 -Inf -0.03635 90% family-wise confidence level > > # page 80 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Linear Hypotheses: Estimate Std. Error t value p value b1 - b0 >= 0 -2.1333 1.6038 -1.330 0.2412 b2 - b0 >= 0 -7.4667 1.6038 -4.656 <1e-04 *** b3 - b0 >= 0 -1.6667 0.8848 -1.884 0.0926 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > # page 80 -- OK (univariate confints!!!) > amod <- aov(minutes ~ blanket - 1, data = recover) > confint(amod, level = 0.9) 5 % 95 % blanketb0 13.822802 15.777198 blanketb1 10.143553 15.189781 blanketb2 4.810219 9.856447 blanketb3 12.004962 14.261704 > > > ### house prices, page 84 > > amod <- aov(price ~ location + sqfeet + age, data = house) > gh <- glht(amod, mcp(location = "Tukey")) > > # page 85 -- OK ( * -1) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Estimated Quantile = 2.7951 Linear Hypotheses: Estimate lwr upr B - A == 0 -22.2032 -27.8202 -16.5862 C - A == 0 -21.5285 -30.7671 -12.2899 D - A == 0 -26.0152 -32.8406 -19.1899 E - A == 0 -29.0893 -35.6447 -22.5340 C - B == 0 0.6747 -9.0564 10.4058 D - B == 0 -3.8120 -11.0969 3.4729 E - B == 0 -6.8861 -14.0890 0.3167 D - C == 0 -4.4867 -14.9245 5.9511 E - C == 0 -7.5608 -17.7259 2.6043 E - D == 0 -3.0741 -11.1245 4.9763 95% family-wise confidence level > > # page 96 -- OK ( * -1) > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -22.2032 2.0096 -11.049 <1e-04 *** C - A == 0 -21.5285 3.3053 -6.513 <1e-04 *** D - A == 0 -26.0152 2.4419 -10.654 <1e-04 *** E - A == 0 -29.0893 2.3453 -12.403 <1e-04 *** C - B == 0 0.6747 3.4815 0.194 0.9997 D - B == 0 -3.8120 2.6063 -1.463 0.5791 E - B == 0 -6.8861 2.5769 -2.672 0.0673 . D - C == 0 -4.4867 3.7343 -1.201 0.7416 E - C == 0 -7.5608 3.6367 -2.079 0.2341 E - D == 0 -3.0741 2.8802 -1.067 0.8153 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -22.2032 2.0096 -11.049 8.88e-16 *** C - A == 0 -21.5285 3.3053 -6.513 2.05e-08 *** D - A == 0 -26.0152 2.4419 -10.654 3.55e-15 *** E - A == 0 -29.0893 2.3453 -12.403 < 2e-16 *** C - B == 0 0.6747 3.4815 0.194 0.8470 D - B == 0 -3.8120 2.6063 -1.463 0.1491 E - B == 0 -6.8861 2.5769 -2.672 0.0098 ** D - C == 0 -4.4867 3.7343 -1.201 0.2345 E - C == 0 -7.5608 3.6367 -2.079 0.0421 * E - D == 0 -3.0741 2.8802 -1.067 0.2903 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > > > ### rat growth data, page 99 > > amod <- aov(w4 ~ ., data = ratgrwth) > > gh <- glht(amod, mcp(trt = "Dunnett"), alternative = "less") > > # page 100 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = w4 ~ ., data = ratgrwth) Linear Hypotheses: Estimate Std. Error t value p value Thiouracil - Control >= 0 -9.458 3.328 -2.842 0.00982 ** Thyroxin - Control >= 0 -2.113 3.196 -0.661 0.42184 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = w4 ~ ., data = ratgrwth) Estimated Quantile = -2.06 Linear Hypotheses: Estimate lwr upr Thiouracil - Control >= 0 -9.4583 -Inf -2.6036 Thyroxin - Control >= 0 -2.1128 -Inf 4.4699 95% family-wise confidence level > > > ### Alzheimer data, page 103 > > amod <- aov(score ~ therapy * since + age, data = alz) > > gh <- glht(amod, linfct = mcp(therapy = "Tukey")) Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- please choose appropriate contrast > > ### choose comparisons at since = 10 > gh$linfct[,8:11] <- gh$linfct[,8:11] * 10 > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = score ~ therapy * since + age, data = alz) Estimated Quantile = 2.8283 Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 4.0650 -8.4009 16.5310 t3 - t1 == 0 -6.2937 -22.3424 9.7550 t4 - t1 == 0 27.7577 14.6935 40.8218 t5 - t1 == 0 30.4296 14.2505 46.6088 t3 - t2 == 0 -10.3588 -26.7872 6.0697 t4 - t2 == 0 23.6926 10.0036 37.3816 t5 - t2 == 0 26.3646 9.8522 42.8770 t4 - t3 == 0 34.0514 16.9502 51.1525 t5 - t3 == 0 36.7233 17.9933 55.4533 t5 - t4 == 0 2.6720 -14.5908 19.9347 95% family-wise confidence level > > > > ### litter data, page 109 > > amod <- aov(weight ~ dose + gesttime + number, data = litter) > > K <- rbind("cont-low" = c(1, -1, 0, 0), + "cont-mid" = c(1, 0, -1, 0), + "cont-high" = c(1, 0, 0, -1), + otrend = c(1.5, 0.5, -0.5, -1.5) / 2, + atrend = c(0, 5, 50, 500) - mean(c(0, 5, 50, 500)), + ltrend = -(log(1:4) - mean(log(1:4)))) > K["atrend",] <- K["atrend",] / -max(K["atrend",]) > > gh <- glht(amod, linfct = mcp(dose = K)) > > # page 110 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value p value cont-low == 0 3.3524 1.2908 2.597 0.0115 * cont-mid == 0 2.2909 1.3384 1.712 0.0915 . cont-high == 0 2.6752 1.3343 2.005 0.0490 * otrend == 0 1.7411 1.0433 1.669 0.0998 . atrend == 0 0.8712 1.1322 0.770 0.4442 ltrend == 0 1.9400 0.9616 2.018 0.0476 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > > # page 111 -- OK > gh$alternative <- "greater" > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value p value cont-low <= 0 3.3524 1.2908 2.597 0.00575 ** cont-mid <= 0 2.2909 1.3384 1.712 0.04576 * cont-high <= 0 2.6752 1.3343 2.005 0.02448 * otrend <= 0 1.7411 1.0433 1.669 0.04988 * atrend <= 0 0.8712 1.1322 0.770 0.22212 ltrend <= 0 1.9400 0.9616 2.018 0.02379 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value p value cont-low <= 0 3.3524 1.2908 2.597 0.0209 * cont-mid <= 0 2.2909 1.3384 1.712 0.1376 cont-high <= 0 2.6752 1.3343 2.005 0.0791 . otrend <= 0 1.7411 1.0433 1.669 0.1483 atrend <= 0 0.8712 1.1322 0.770 0.5012 ltrend <= 0 1.9400 0.9616 2.018 0.0773 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Estimated Quantile = 2.2202 Linear Hypotheses: Estimate lwr upr cont-low <= 0 3.3524 0.4867 Inf cont-mid <= 0 2.2909 -0.6806 Inf cont-high <= 0 2.6752 -0.2872 Inf otrend <= 0 1.7411 -0.5753 Inf atrend <= 0 0.8712 -1.6423 Inf ltrend <= 0 1.9400 -0.1948 Inf 95% family-wise confidence level > > # page 174 -- OK > gh$alternative <- "greater" > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value p value cont-low <= 0 3.3524 1.2908 2.597 0.0205 * cont-mid <= 0 2.2909 1.3384 1.712 0.0891 . cont-high <= 0 2.6752 1.3343 2.005 0.0454 * otrend <= 0 1.7411 1.0433 1.669 0.0891 . atrend <= 0 0.8712 1.1322 0.770 0.2221 ltrend <= 0 1.9400 0.9616 2.018 0.0396 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### house data -- regression line > > houseA <- subset(house, location == "A") > > lmod <- lm(price ~ sqfeet, data = houseA) > K <- cbind(1, grid <- seq(from = 1000, to = 3000, by = 200)) > rownames(K) <- paste("sqfeet *", grid) > > gh <- glht(lmod, linfct = K) > > # page 123 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Fit: lm(formula = price ~ sqfeet, data = houseA) Estimated Quantile = 2.586 Linear Hypotheses: Estimate lwr upr sqfeet * 1000 == 0 73.4435 63.8822 83.0048 sqfeet * 1200 == 0 81.4959 73.7593 89.2325 sqfeet * 1400 == 0 89.5483 83.5309 95.5656 sqfeet * 1600 == 0 97.6006 93.0751 102.1262 sqfeet * 1800 == 0 105.6530 102.0934 109.2126 sqfeet * 2000 == 0 113.7054 110.1306 117.2801 sqfeet * 2200 == 0 121.7577 117.1965 126.3190 sqfeet * 2400 == 0 129.8101 123.7480 135.8722 sqfeet * 2600 == 0 137.8625 130.0771 145.6478 sqfeet * 2800 == 0 145.9148 136.3028 155.5269 sqfeet * 3000 == 0 153.9672 142.4741 165.4602 95% family-wise confidence level > > > ### patient satisfaction, page 125 > > pat_sat <- pat_sat[order(pat_sat$severe),] > lmod <- lm(satisf ~ age + severe + anxiety, data = pat_sat) > K <- cbind(1, mean(pat_sat$age), pat_sat$severe, mean(pat_sat$anxiety)) > > gh <- glht(lmod, linfct = K) > > ci <- confint(gh) > > # page 127 -- OK > plot(pat_sat$severe, ci$confint[,"Estimate"], + xlab = "Severity", ylab = "Satisfaction", type = "b", + ylim = c(30, 80), xlim = c(45, 60)) > lines(pat_sat$severe, ci$confint[,"lwr"], lty = 2) > lines(pat_sat$severe, ci$confint[,"upr"], lty = 2) > > > ### tire data, page 127 > > amod <- aov(cost ~ make + make:mph - 1, data = tire) > > x <- seq(from = 10, to = 70, by = 5) > K <- cbind(1, -1, x, -x) > rownames(K) <- x > > gh <- glht(amod, linfct = K) > > # page 129 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Estimated Quantile = 2.6476 Linear Hypotheses: Estimate lwr upr 10 == 0 -4.10667 -6.52739 -1.68595 15 == 0 -3.45389 -5.59420 -1.31358 20 == 0 -2.80111 -4.68115 -0.92108 25 == 0 -2.14833 -3.79778 -0.49889 30 == 0 -1.49556 -2.95820 -0.03291 35 == 0 -0.84278 -2.18088 0.49533 40 == 0 -0.19000 -1.48393 1.10393 45 == 0 0.46278 -0.87533 1.80088 50 == 0 1.11556 -0.34709 2.57820 55 == 0 1.76833 0.11889 3.41778 60 == 0 2.42111 0.54108 4.30115 65 == 0 3.07389 0.93358 5.21420 70 == 0 3.72667 1.30595 6.14739 95% family-wise confidence level > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Linear Hypotheses: Estimate Std. Error t value p value 10 == 0 -4.1067 0.9143 -4.492 0.000370 *** 15 == 0 -3.4539 0.8084 -4.272 0.000583 *** 20 == 0 -2.8011 0.7101 -3.945 0.001159 ** 25 == 0 -2.1483 0.6230 -3.448 0.003305 ** 30 == 0 -1.4956 0.5524 -2.707 0.015542 * 35 == 0 -0.8428 0.5054 -1.668 0.114860 40 == 0 -0.1900 0.4887 -0.389 0.702571 45 == 0 0.4628 0.5054 0.916 0.373442 50 == 0 1.1156 0.5524 2.019 0.060533 . 55 == 0 1.7683 0.6230 2.838 0.011862 * 60 == 0 2.4211 0.7101 3.410 0.003587 ** 65 == 0 3.0739 0.8084 3.802 0.001565 ** 70 == 0 3.7267 0.9143 4.076 0.000880 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted()) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Linear Hypotheses: Estimate Std. Error t value p value 10 == 0 -4.1067 0.9143 -4.492 0.00129 ** 15 == 0 -3.4539 0.8084 -4.272 0.00200 ** 20 == 0 -2.8011 0.7101 -3.945 0.00380 ** 25 == 0 -2.1483 0.6230 -3.448 0.01043 * 30 == 0 -1.4956 0.5524 -2.707 0.04465 * 35 == 0 -0.8428 0.5054 -1.668 0.26440 40 == 0 -0.1900 0.4887 -0.389 0.92440 45 == 0 0.4628 0.5054 0.916 0.65305 50 == 0 1.1156 0.5524 2.019 0.15261 55 == 0 1.7683 0.6230 2.838 0.03478 * 60 == 0 2.4211 0.7101 3.410 0.01130 * 65 == 0 3.0739 0.8084 3.802 0.00510 ** 70 == 0 3.7267 0.9143 4.076 0.00293 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > > > ### cholesterol data, page 153 > > amod <- aov(response ~ trt - 1, data = cholesterol) > > gh <- glht(amod, linfct = mcp(trt = "Tukey")) > > # page 171 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 0.000348 *** C - A == 0 -8.573 1.443 -5.939 3.84e-07 *** D - A == 0 -11.723 1.443 -8.122 2.29e-10 *** E - A == 0 -15.166 1.443 -10.507 1.08e-13 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * D - B == 0 -6.136 1.443 -4.251 0.000106 *** E - B == 0 -9.579 1.443 -6.637 3.53e-08 *** D - C == 0 -3.150 1.443 -2.182 0.034352 * E - C == 0 -6.593 1.443 -4.568 3.82e-05 *** E - D == 0 -3.443 1.443 -2.385 0.021333 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 0.000697 *** C - A == 0 -8.573 1.443 -5.939 1.54e-06 *** D - A == 0 -11.723 1.443 -8.122 1.38e-09 *** E - A == 0 -15.166 1.443 -10.507 1.08e-12 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * D - B == 0 -6.136 1.443 -4.251 0.000317 *** E - B == 0 -9.579 1.443 -6.637 2.12e-07 *** D - C == 0 -3.150 1.443 -2.182 0.042666 * E - C == 0 -6.593 1.443 -4.568 0.000153 *** E - D == 0 -3.443 1.443 -2.385 0.042666 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 <0.001 *** C - A == 0 -8.573 1.443 -5.939 <0.001 *** D - A == 0 -11.723 1.443 -8.122 <0.001 *** E - A == 0 -15.166 1.443 -10.507 <0.001 *** C - B == 0 -2.986 1.443 -2.069 0.0443 * D - B == 0 -6.136 1.443 -4.251 <0.001 *** E - B == 0 -9.579 1.443 -6.637 <0.001 *** D - C == 0 -3.150 1.443 -2.182 0.0420 * E - C == 0 -6.593 1.443 -4.568 <0.001 *** E - D == 0 -3.443 1.443 -2.385 0.0420 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > gh <- glht(amod, linfct = mcp(trt = c("B - A = 0", + "C - A = 0", + "C - B = 0", + "3 * D - A - B - C = 0", + "3 * E - A - B - C = 0"))) > > # page 172 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 0.000348 *** C - A == 0 -8.573 1.443 -5.939 3.84e-07 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * 3 * D - A - B - C == 0 -21.009 3.536 -5.942 3.81e-07 *** 3 * E - A - B - C == 0 -31.338 3.536 -8.864 1.98e-11 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 0.000348 *** C - A == 0 -8.573 1.443 -5.939 1.52e-06 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * 3 * D - A - B - C == 0 -21.009 3.536 -5.942 1.52e-06 *** 3 * E - A - B - C == 0 -31.338 3.536 -8.864 9.88e-11 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 <0.001 *** C - A == 0 -8.573 1.443 -5.939 <0.001 *** C - B == 0 -2.986 1.443 -2.069 0.0443 * 3 * D - A - B - C == 0 -21.009 3.536 -5.942 <0.001 *** 3 * E - A - B - C == 0 -31.338 3.536 -8.864 <0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### waste data, page 177 > > amod <- aov(waste ~ temp * envir, data = waste) > > # page 179 -- OK ( * -1) > confint(glht(amod, linfct = mcp(temp = "Tukey"))) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Estimated Quantile = 2.5966 Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 -0.2410 -1.4997 1.0177 t3 - t1 == 0 2.0150 0.7563 3.2737 t3 - t2 == 0 2.2560 0.9973 3.5147 95% family-wise confidence level > confint(glht(amod, linfct = mcp(envir = "Tukey"))) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Estimated Quantile = 3.088 Linear Hypotheses: Estimate lwr upr e2 - e1 == 0 1.38333 -0.54904 3.31570 e3 - e1 == 0 1.68500 -0.24737 3.61737 e4 - e1 == 0 2.01833 0.08596 3.95070 e5 - e1 == 0 2.75333 0.82096 4.68570 e3 - e2 == 0 0.30167 -1.63070 2.23404 e4 - e2 == 0 0.63500 -1.29737 2.56737 e5 - e2 == 0 1.37000 -0.56237 3.30237 e4 - e3 == 0 0.33333 -1.59904 2.26570 e5 - e3 == 0 1.06833 -0.86404 3.00070 e5 - e4 == 0 0.73500 -1.19737 2.66737 95% family-wise confidence level > > gh <- glht(amod, linfct = mcp(envir = "Tukey", temp = "Tukey")) > > # page 181 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 1.3833 0.6258 2.211 0.043017 * envir: e3 - e1 == 0 1.6850 0.6258 2.693 0.016703 * envir: e4 - e1 == 0 2.0183 0.6258 3.225 0.005662 ** envir: e5 - e1 == 0 2.7533 0.6258 4.400 0.000517 *** envir: e3 - e2 == 0 0.3017 0.6258 0.482 0.636715 envir: e4 - e2 == 0 0.6350 0.6258 1.015 0.326318 envir: e5 - e2 == 0 1.3700 0.6258 2.189 0.044802 * envir: e4 - e3 == 0 0.3333 0.6258 0.533 0.602063 envir: e5 - e3 == 0 1.0683 0.6258 1.707 0.108391 envir: e5 - e4 == 0 0.7350 0.6258 1.175 0.258487 temp: t2 - t1 == 0 -0.2410 0.4847 -0.497 0.626263 temp: t3 - t1 == 0 2.0150 0.4847 4.157 0.000843 *** temp: t3 - t2 == 0 2.2560 0.4847 4.654 0.000312 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 1.3833 0.6258 2.211 0.21508 envir: e3 - e1 == 0 1.6850 0.6258 2.693 0.08351 . envir: e4 - e1 == 0 2.0183 0.6258 3.225 0.03964 * envir: e5 - e1 == 0 2.7533 0.6258 4.400 0.00569 ** envir: e3 - e2 == 0 0.3017 0.6258 0.482 1.00000 envir: e4 - e2 == 0 0.6350 0.6258 1.015 1.00000 envir: e5 - e2 == 0 1.3700 0.6258 2.189 0.31361 envir: e4 - e3 == 0 0.3333 0.6258 0.533 1.00000 envir: e5 - e3 == 0 1.0683 0.6258 1.707 0.43356 envir: e5 - e4 == 0 0.7350 0.6258 1.175 0.77546 temp: t2 - t1 == 0 -0.2410 0.4847 -0.497 1.00000 temp: t3 - t1 == 0 2.0150 0.4847 4.157 0.00590 ** temp: t3 - t2 == 0 2.2560 0.4847 4.654 0.00405 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 1.3833 0.6258 2.211 0.16945 envir: e3 - e1 == 0 1.6850 0.6258 2.693 0.07066 . envir: e4 - e1 == 0 2.0183 0.6258 3.225 0.03100 * envir: e5 - e1 == 0 2.7533 0.6258 4.400 0.00455 ** envir: e3 - e2 == 0 0.3017 0.6258 0.482 0.85632 envir: e4 - e2 == 0 0.6350 0.6258 1.015 0.70669 envir: e5 - e2 == 0 1.3700 0.6258 2.189 0.20300 envir: e4 - e3 == 0 0.3333 0.6258 0.533 0.83721 envir: e5 - e3 == 0 1.0683 0.6258 1.707 0.30999 envir: e5 - e4 == 0 0.7350 0.6258 1.175 0.57577 temp: t2 - t1 == 0 -0.2410 0.4847 -0.497 0.85632 temp: t3 - t1 == 0 2.0150 0.4847 4.157 0.00517 ** temp: t3 - t2 == 0 2.2560 0.4847 4.654 0.00330 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > # page 186 -- OK > amod <- aov(waste ~ temp + envir, + data = waste[seq(from = 1, to = 29, by = 2),]) > > gh <- glht(amod, linfct = mcp(envir = "Tukey", temp = "Tukey")) > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp + envir, data = waste[seq(from = 1, to = 29, by = 2), ]) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 0.8767 1.2013 0.730 0.4864 envir: e3 - e1 == 0 1.4933 1.2013 1.243 0.2490 envir: e4 - e1 == 0 1.4033 1.2013 1.168 0.2764 envir: e5 - e1 == 0 3.4133 1.2013 2.841 0.0218 * envir: e3 - e2 == 0 0.6167 1.2013 0.513 0.6216 envir: e4 - e2 == 0 0.5267 1.2013 0.438 0.6727 envir: e5 - e2 == 0 2.5367 1.2013 2.112 0.0677 . envir: e4 - e3 == 0 -0.0900 1.2013 -0.075 0.9421 envir: e5 - e3 == 0 1.9200 1.2013 1.598 0.1487 envir: e5 - e4 == 0 2.0100 1.2013 1.673 0.1328 temp: t2 - t1 == 0 0.0080 0.9305 0.009 0.9934 temp: t3 - t1 == 0 2.7120 0.9305 2.914 0.0195 * temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.0197 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp + envir, data = waste[seq(from = 1, to = 29, by = 2), ]) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 0.8767 1.2013 0.730 1.000 envir: e3 - e1 == 0 1.4933 1.2013 1.243 1.000 envir: e4 - e1 == 0 1.4033 1.2013 1.168 1.000 envir: e5 - e1 == 0 3.4133 1.2013 2.841 0.253 envir: e3 - e2 == 0 0.6167 1.2013 0.513 1.000 envir: e4 - e2 == 0 0.5267 1.2013 0.438 1.000 envir: e5 - e2 == 0 2.5367 1.2013 2.112 0.474 envir: e4 - e3 == 0 -0.0900 1.2013 -0.075 1.000 envir: e5 - e3 == 0 1.9200 1.2013 1.598 0.743 envir: e5 - e4 == 0 2.0100 1.2013 1.673 0.664 temp: t2 - t1 == 0 0.0080 0.9305 0.009 1.000 temp: t3 - t1 == 0 2.7120 0.9305 2.914 0.253 temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.253 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp + envir, data = waste[seq(from = 1, to = 29, by = 2), ]) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 0.8767 1.2013 0.730 0.846 envir: e3 - e1 == 0 1.4933 1.2013 1.243 0.694 envir: e4 - e1 == 0 1.4033 1.2013 1.168 0.694 envir: e5 - e1 == 0 3.4133 1.2013 2.841 0.135 envir: e3 - e2 == 0 0.6167 1.2013 0.513 0.944 envir: e4 - e2 == 0 0.5267 1.2013 0.438 0.944 envir: e5 - e2 == 0 2.5367 1.2013 2.112 0.267 envir: e4 - e3 == 0 -0.0900 1.2013 -0.075 0.996 envir: e5 - e3 == 0 1.9200 1.2013 1.598 0.458 envir: e5 - e4 == 0 2.0100 1.2013 1.673 0.420 temp: t2 - t1 == 0 0.0080 0.9305 0.009 0.996 temp: t3 - t1 == 0 2.7120 0.9305 2.914 0.135 temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.135 (Adjusted p values reported -- Westfall method) > > > ### drug data, page 187 > > amod <- aov(response ~ drug * disease, data = drug) > > # page 188 > confint(glht(amod, linfct = mcp(drug = "Tukey"))) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ drug * disease, data = drug) Estimated Quantile = 2.6635 Linear Hypotheses: Estimate lwr upr d2 - d1 == 0 0.5611 -9.8011 10.9233 d3 - d1 == 0 -16.2500 -27.2902 -5.2098 d4 - d1 == 0 -12.4500 -22.6000 -2.3000 d3 - d2 == 0 -16.8111 -27.8513 -5.7709 d4 - d2 == 0 -13.0111 -23.1611 -2.8611 d4 - d3 == 0 3.8000 -7.0413 14.6413 95% family-wise confidence level > > > ### detergents data, page 189 > > amod <- aov(plates ~ block + detergent, data = detergent) > > gh <- glht(amod, linfct = mcp(detergent = "Tukey")) > > # page 190 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Estimated Quantile = 3.0633 Linear Hypotheses: Estimate lwr upr d2 - d1 == 0 -2.1333 -4.7921 0.5255 d3 - d1 == 0 3.6000 0.9412 6.2588 d4 - d1 == 0 2.2000 -0.4588 4.8588 d5 - d1 == 0 -4.3333 -6.9921 -1.6745 d3 - d2 == 0 5.7333 3.0745 8.3921 d4 - d2 == 0 4.3333 1.6745 6.9921 d5 - d2 == 0 -2.2000 -4.8588 0.4588 d4 - d3 == 0 -1.4000 -4.0588 1.2588 d5 - d3 == 0 -7.9333 -10.5921 -5.2745 d5 - d4 == 0 -6.5333 -9.1921 -3.8745 95% family-wise confidence level > > # page 192 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value p value d2 - d1 == 0 -2.1333 0.8679 -2.458 0.025762 * d3 - d1 == 0 3.6000 0.8679 4.148 0.000757 *** d4 - d1 == 0 2.2000 0.8679 2.535 0.022075 * d5 - d1 == 0 -4.3333 0.8679 -4.993 0.000133 *** d3 - d2 == 0 5.7333 0.8679 6.606 6.05e-06 *** d4 - d2 == 0 4.3333 0.8679 4.993 0.000133 *** d5 - d2 == 0 -2.2000 0.8679 -2.535 0.022075 * d4 - d3 == 0 -1.4000 0.8679 -1.613 0.126291 d5 - d3 == 0 -7.9333 0.8679 -9.140 9.45e-08 *** d5 - d4 == 0 -6.5333 0.8679 -7.527 1.21e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value p value d2 - d1 == 0 -2.1333 0.8679 -2.458 0.051524 . d3 - d1 == 0 3.6000 0.8679 4.148 0.003028 ** d4 - d1 == 0 2.2000 0.8679 2.535 0.044149 * d5 - d1 == 0 -4.3333 0.8679 -4.993 0.000531 *** d3 - d2 == 0 5.7333 0.8679 6.606 3.63e-05 *** d4 - d2 == 0 4.3333 0.8679 4.993 0.000398 *** d5 - d2 == 0 -2.2000 0.8679 -2.535 0.044149 * d4 - d3 == 0 -1.4000 0.8679 -1.613 0.126291 d5 - d3 == 0 -7.9333 0.8679 -9.140 9.45e-07 *** d5 - d4 == 0 -6.5333 0.8679 -7.527 7.26e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value p value d2 - d1 == 0 -2.1333 0.8679 -2.458 0.05002 . d3 - d1 == 0 3.6000 0.8679 4.148 0.00272 ** d4 - d1 == 0 2.2000 0.8679 2.535 0.04297 * d5 - d1 == 0 -4.3333 0.8679 -4.993 < 0.001 *** d3 - d2 == 0 5.7333 0.8679 6.606 < 0.001 *** d4 - d2 == 0 4.3333 0.8679 4.993 < 0.001 *** d5 - d2 == 0 -2.2000 0.8679 -2.535 0.04297 * d4 - d3 == 0 -1.4000 0.8679 -1.613 0.12629 d5 - d3 == 0 -7.9333 0.8679 -9.140 < 0.001 *** d5 - d4 == 0 -6.5333 0.8679 -7.527 < 0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### pigs data, page 195 > > amod <- aov(gain ~ pen + feed * sex + initial, data = pigs) > > S <- matrix(c(1, -1), ncol = 2, dimnames = list("F-M", c("F", "M"))) > gh <- glht(amod, linfct = mcp(feed = "Tukey", sex = S)) > gh$linfct <- rbind(gh$linfct, "initial" = as.numeric(names(coef(amod)) == "initial")) > gh$rhs <- c(gh$rhs, 0) > > # page 194 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Estimated Quantile = 2.7965 Linear Hypotheses: Estimate lwr upr feed: f2 - f1 == 0 -0.44099 -1.07347 0.19149 feed: f3 - f1 == 0 -0.67300 -1.30261 -0.04339 feed: f3 - f2 == 0 -0.23201 -0.86449 0.40047 F-M == 0 0.42435 -0.10799 0.95668 initial == 0 0.08888 0.02198 0.15577 95% family-wise confidence level > > # page 195 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Linear Hypotheses: Estimate Std. Error t value p value feed: f2 - f1 == 0 -0.44099 0.22617 -1.950 0.06611 . feed: f3 - f1 == 0 -0.67300 0.22514 -2.989 0.00754 ** feed: f3 - f2 == 0 -0.23201 0.22617 -1.026 0.31786 F-M == 0 0.42435 0.19036 2.229 0.03807 * initial == 0 0.08888 0.02392 3.715 0.00147 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Linear Hypotheses: Estimate Std. Error t value p value feed: f2 - f1 == 0 -0.44099 0.22617 -1.950 0.07614 . feed: f3 - f1 == 0 -0.67300 0.22514 -2.989 0.03016 * feed: f3 - f2 == 0 -0.23201 0.22617 -1.026 0.31786 F-M == 0 0.42435 0.19036 2.229 0.07614 . initial == 0 0.08888 0.02392 3.715 0.00734 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Linear Hypotheses: Estimate Std. Error t value p value feed: f2 - f1 == 0 -0.44099 0.22617 -1.950 0.07358 . feed: f3 - f1 == 0 -0.67300 0.22514 -2.989 0.02667 * feed: f3 - f2 == 0 -0.23201 0.22617 -1.026 0.31786 F-M == 0 0.42435 0.19036 2.229 0.07358 . initial == 0 0.08888 0.02392 3.715 0.00677 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### respiratory, page 196, program 9.14 > > amod <- aov(score ~ treatment:agegroup:inithealth - 1, data = respiratory) > > CA <- c(13, 0, 11, 0, 13, 0, 17, 0) > CP <- c( 0, 14, 0, 12, 0, 19, 0, 12) > CA <- CA/sum(CA) > CP <- CP/sum(CP) > C1 <- CP-CA > > CAO <- c(13, 0, 0, 0, 13, 0, 0, 0) > CPO <- c( 0, 14, 0, 0, 0, 19, 0, 0) > CAO <- CAO/sum(CAO) > CPO <- CPO/sum(CPO) > C2 <- CPO - CAO > > CAY <- c(0, 0, 11, 0, 0, 0, 17, 0) > CPY <- c(0, 0, 0, 12, 0, 0, 0, 12) > CAY <- CAY/sum(CAY) > CPY <- CPY/sum(CPY) > C3 <- CPY - CAY > > CAG <- c(13, 0, 11, 0, 0, 0, 0, 0) > CPG <- c( 0, 14, 0, 12, 0, 0, 0, 0) > CAG <- CAG/sum(CAG) > CPG <- CPG/sum(CPG) > C4 <- CPG - CAG > > CAP <- c(0, 0, 0, 0, 13, 0, 17, 0 ) > CPP <- c(0, 0, 0, 0, 0, 19, 0, 12 ) > CAP <- CAP/sum(CAP) > CPP <- CPP/sum(CPP) > C5 <- CPP - CAP > > C6 <- c(-1, 1, 0, 0, 0, 0, 0, 0) > C7 <- c( 0, 0, 0, 0, -1, 1, 0, 0) > C8 <- c( 0, 0, -1, 1, 0, 0, 0, 0) > C9 <- c( 0, 0, 0, 0, 0, 0, -1, 1) > > C <- rbind(C1, C2, C3, C4, C5, C6, C7, C8, C9) > rownames(C) <- c("Overall", "Older", "Younger", "Good Init", "Poor Init", + "Old x Good", "Old x Poor", "Young x Good", "Young x Poor") > > gh <- glht(amod, linfct = -C, alternative = "greater") > > # page 198 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = score ~ treatment:agegroup:inithealth - 1, data = respiratory) Linear Hypotheses: Estimate Std. Error t value p value Overall <= 0 0.7360 0.1908 3.857 0.000100 *** Older <= 0 1.0733 0.2635 4.074 4.55e-05 *** Younger <= 0 0.3190 0.2795 1.142 0.128149 Good Init <= 0 0.6093 0.2844 2.142 0.017263 * Poor Init <= 0 0.8611 0.2573 3.346 0.000572 *** Old x Good <= 0 1.2187 0.3870 3.149 0.001072 ** Old x Poor <= 0 0.8154 0.3616 2.255 0.013135 * Young x Good <= 0 -0.1045 0.4194 -0.249 0.598177 Young x Poor <= 0 0.8696 0.3788 2.296 0.011864 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = score ~ treatment:agegroup:inithealth - 1, data = respiratory) Linear Hypotheses: Estimate Std. Error t value p value Overall <= 0 0.7360 0.1908 3.857 0.00060 *** Older <= 0 1.0733 0.2635 4.074 0.00041 *** Younger <= 0 0.3190 0.2795 1.142 0.25630 Good Init <= 0 0.6093 0.2844 2.142 0.05932 . Poor Init <= 0 0.8611 0.2573 3.346 0.00343 ** Old x Good <= 0 1.2187 0.3870 3.149 0.00643 ** Old x Poor <= 0 0.8154 0.3616 2.255 0.05932 . Young x Good <= 0 -0.1045 0.4194 -0.249 0.59818 Young x Poor <= 0 0.8696 0.3788 2.296 0.05932 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = score ~ treatment:agegroup:inithealth - 1, data = respiratory) Linear Hypotheses: Estimate Std. Error t value p value Overall <= 0 0.7360 0.1908 3.857 <0.01 *** Older <= 0 1.0733 0.2635 4.074 <0.01 *** Younger <= 0 0.3190 0.2795 1.142 0.1955 Good Init <= 0 0.6093 0.2844 2.142 0.0485 * Poor Init <= 0 0.8611 0.2573 3.346 <0.01 ** Old x Good <= 0 1.2187 0.3870 3.149 <0.01 ** Old x Poor <= 0 0.8154 0.3616 2.255 0.0485 * Young x Good <= 0 -0.1045 0.4194 -0.249 0.5982 Young x Poor <= 0 0.8696 0.3788 2.296 0.0485 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > ### wine data, page 199 > > amod <- glm(purchase ~ customertype + light + music + customertype:light + + customertype:music + light:music + customertype:light:music + + handle + examine, data = wine, family = binomial()) > > # page 200: FIXME (SS3???) > > ### wloss data, page 205 > > library("lme4") Loading required package: Matrix Loading required package: lattice > lmod <- lmer(wloss ~ diet + (1 | i), data = wloss, model = TRUE) > > gh <- glht(lmod, mcp(diet = "Tukey")) > > # page 205 -- FIXME: df??? > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = wloss ~ diet + (1 | i), data = wloss, model = TRUE) Estimated Quantile = 2.7277 Linear Hypotheses: Estimate lwr upr B - A == 0 -1.03000 -2.18834 0.12834 C - A == 0 -1.78000 -2.93834 -0.62166 D - A == 0 -2.78000 -3.93834 -1.62166 E - A == 0 0.12000 -1.03834 1.27834 C - B == 0 -0.75000 -1.90834 0.40834 D - B == 0 -1.75000 -2.90834 -0.59166 E - B == 0 1.15000 -0.00834 2.30834 D - C == 0 -1.00000 -2.15834 0.15834 E - C == 0 1.90000 0.74166 3.05834 E - D == 0 2.90000 1.74166 4.05834 95% family-wise confidence level > > # page 207 / 208 -- FIXME: df??? > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = wloss ~ diet + (1 | i), data = wloss, model = TRUE) Linear Hypotheses: Estimate Std. Error z value p value B - A == 0 -1.0300 0.4247 -2.425 0.1086 C - A == 0 -1.7800 0.4247 -4.192 <0.001 *** D - A == 0 -2.7800 0.4247 -6.546 <0.001 *** E - A == 0 0.1200 0.4247 0.283 0.9986 C - B == 0 -0.7500 0.4247 -1.766 0.3935 D - B == 0 -1.7500 0.4247 -4.121 <0.001 *** E - B == 0 1.1500 0.4247 2.708 0.0527 . D - C == 0 -1.0000 0.4247 -2.355 0.1279 E - C == 0 1.9000 0.4247 4.474 <0.001 *** E - D == 0 2.9000 0.4247 6.829 <0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > > ### detergent data, page 211 > > lmod <- lmer(plates ~ detergent + (1 | block), data = detergent, + model = TRUE) > > gh <- glht(lmod, mcp(detergent = "Tukey"), df = 17.6) > > # page 211 -- FIXME: df??? / inaccuracies? > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = plates ~ detergent + (1 | block), data = detergent, model = TRUE) Estimated Quantile = 3.0423 Linear Hypotheses: Estimate lwr upr d2 - d1 == 0 -2.3241 -4.9020 0.2539 d3 - d1 == 0 3.4819 0.9040 6.0599 d4 - d1 == 0 2.3272 -0.2508 4.9051 d5 - d1 == 0 -4.3787 -6.9567 -1.8008 d3 - d2 == 0 5.8060 3.2280 8.3839 d4 - d2 == 0 4.6512 2.0733 7.2292 d5 - d2 == 0 -2.0547 -4.6326 0.5233 d4 - d3 == 0 -1.1548 -3.7327 1.4232 d5 - d3 == 0 -7.8607 -10.4386 -5.2827 d5 - d4 == 0 -6.7059 -9.2839 -4.1280 95% family-wise confidence level > > > ### waste data > > lmod <- lmer(waste ~ temp + (1 | envir) + (1 | envir : temp), + data = waste) > > gh <- glht(lmod, mcp(temp = "Tukey"), df = 8) > > # page 213 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = waste ~ temp + (1 | envir) + (1 | envir:temp), data = waste) Estimated Quantile = 2.8563 Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 -0.24100 -2.40232 1.92032 t3 - t1 == 0 2.01500 -0.14632 4.17632 t3 - t2 == 0 2.25600 0.09468 4.41732 95% family-wise confidence level > > > ### halothane data, page 214 > > lmod <- lmer(rate ~ treatment + (1 | dog), data = halothane, + model = TRUE) > > gh <- glht(lmod, linfct = mcp(treatment = "Tukey"), df = 18) > > # page 215 -- FIXME: df??? > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Estimated Quantile = 2.8252 Linear Hypotheses: Estimate lwr upr HP - HA == 0 111.0526 71.6407 150.4646 LA - HA == 0 36.4211 -2.9909 75.8330 LP - HA == 0 134.6842 95.2723 174.0961 LA - HP == 0 -74.6316 -114.0435 -35.2196 LP - HP == 0 23.6316 -15.7804 63.0435 LP - LA == 0 98.2632 58.8512 137.6751 95% family-wise confidence level > > gh <- glht(lmod, + linfct = mcp(treatment = c("Tukey", + Halo = "-0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP = 0", + CO2 = "0.5 * HA -0.5 * HP + 0.5 * LA -0.5 * LP = 0", + Interaction = "HA - HP - LA + LP = 0"))) > > # page 217 -- FIXME: df? > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Linear Hypotheses: Estimate Std. Error z value HP - HA == 0 111.053 13.950 7.961 LA - HA == 0 36.421 13.950 2.611 LP - HA == 0 134.684 13.950 9.655 LA - HP == 0 -74.632 13.950 -5.350 LP - HP == 0 23.632 13.950 1.694 LP - LA == 0 98.263 13.950 7.044 -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 30.026 9.864 3.044 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 -104.658 9.864 -10.610 HA - HP - LA + LP == 0 -12.789 19.729 -0.648 p value HP - HA == 0 1.78e-15 *** LA - HA == 0 0.00903 ** LP - HA == 0 < 2e-16 *** LA - HP == 0 8.80e-08 *** LP - HP == 0 0.09027 . LP - LA == 0 1.87e-12 *** -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 0.00234 ** 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 < 2e-16 *** HA - HP - LA + LP == 0 0.51681 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Linear Hypotheses: Estimate Std. Error z value HP - HA == 0 111.053 13.950 7.961 LA - HA == 0 36.421 13.950 2.611 LP - HA == 0 134.684 13.950 9.655 LA - HP == 0 -74.632 13.950 -5.350 LP - HP == 0 23.632 13.950 1.694 LP - LA == 0 98.263 13.950 7.044 -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 30.026 9.864 3.044 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 -104.658 9.864 -10.610 HA - HP - LA + LP == 0 -12.789 19.729 -0.648 p value HP - HA == 0 5.33e-15 *** LA - HA == 0 0.00934 ** LP - HA == 0 < 2e-16 *** LA - HP == 0 1.76e-07 *** LP - HP == 0 0.09027 . LP - LA == 0 5.61e-12 *** -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 0.00934 ** 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 < 2e-16 *** HA - HP - LA + LP == 0 0.51681 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Linear Hypotheses: Estimate Std. Error z value HP - HA == 0 111.053 13.950 7.961 LA - HA == 0 36.421 13.950 2.611 LP - HA == 0 134.684 13.950 9.655 LA - HP == 0 -74.632 13.950 -5.350 LP - HP == 0 23.632 13.950 1.694 LP - LA == 0 98.263 13.950 7.044 -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 30.026 9.864 3.044 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 -104.658 9.864 -10.610 HA - HP - LA + LP == 0 -12.789 19.729 -0.648 p value HP - HA == 0 < 0.001 *** LA - HA == 0 0.00903 ** LP - HA == 0 < 0.001 *** LA - HP == 0 < 0.001 *** LP - HP == 0 0.09027 . LP - LA == 0 < 0.001 *** -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 0.00767 ** 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 < 0.001 *** HA - HP - LA + LP == 0 0.51681 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### multipleendpoints data, page 218 > > ### lmod <- lmer(y ~ treatment:endpoint + (1 | subject), > ### data = multipleendpoints, model = TRUE) > ### Leading minor of order 9 in downdated X'X is not positive definite > > > ### obesity, page 220 > > ### heart, 222 > > ### _____________________________________________________________________ > > ### add additional examples below (because of the seed) > > > ### choose comparisons at since = 20, page 104 > amod <- aov(score ~ therapy * since + age, data = alz) > gh <- glht(amod, linfct = mcp(therapy = "Tukey")) Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- please choose appropriate contrast > gh$linfct[,8:11] <- gh$linfct[,8:11] * 2 > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = score ~ therapy * since + age, data = alz) Estimated Quantile = 2.8067 Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 5.7052 -8.5828 19.9932 t3 - t1 == 0 -0.7259 -22.4623 21.0105 t4 - t1 == 0 30.6868 14.0897 47.2839 t5 - t1 == 0 41.7908 13.9730 69.6085 t3 - t2 == 0 -6.4311 -28.5211 15.6590 t4 - t2 == 0 24.9816 7.7590 42.2042 t5 - t2 == 0 36.0856 8.0330 64.1382 t4 - t3 == 0 31.4127 7.4791 55.3462 t5 - t3 == 0 42.5166 10.9143 74.1190 t5 - t4 == 0 11.1040 -18.5382 40.7462 95% family-wise confidence level > > proc.time() user system elapsed 436.811 1.292 441.081 multcomp/inst/MCMT/MCMT.rda0000644000176000001440000003305011471214241015105 0ustar ripleyusers} yoO YԱ`gvWH@723+!Hl|C_IlM#39𪦾4oU_uuOUGƣaYG7f8u\>m,x.93E8'ޯ\<ӉF|pu9 bT Hˉ/G"3>K/H~L=ÕXje\irpzR2+5F~DJEINjʑtRFT!Q9:X*m::pM骇Z4]iVC\z8V urrhDUc!UNg)wGAzB]4H] iaH=<Nz8a&tÐʧjVFv z86 r|(CPNMw= ukjTÑίLjtq 2 y,9/}<ݗg GpفB.CtП(hk:Ry,ܵݩB6|Ri~.dqZ7A$y[J6W?[Wp-Rp-Rp-Rp-Rp-ĭei+UH1k!=N,A66-`3#60`"خ Ô7M)zS ޔb7M)rS ܔ6M)jS ڔb6M)bS ؔ5-aK [bÖİ%-1laK [b8Ñp$#1H Gb8Ñ     IIIII-EbH"1Z$Fh-EbJV*1Z%FhUbJV&1$FhmMbI6&1#߰qZ7A$y[J^BZ'8 -NhqBZ,B"4,B"4,B&4lB &4lB &4Bs!4Bs!4Bs-Ah BKZ %-Ah B+ }M gC`fL|1Z&5`dM(HP6 mB!0L Ōw0N-bQU^ ulel0퐏 ]zBvȳv{) A{̝J_Og<x) pi<$5@.>} m1YB3ŀ;xob<͇zwyWBL[Q l9po Ȏ˛o<롟.Ⱥ =H@}[uA6k!:ǁ73qpm\< H :CA2G Bc1C]7K `4ՓoM>3Il5XZpkS_+9-5V o$|rrio|}DW˸q=j 7 mwM_˵]s;^x{ޑ̓?npotW}l׸+?msrV̻Xn^]s5&5K g5-ym o~vpEYRXE_eK/XtTZHhj34Ty^SuRHS~)| TTU8.N'w4xլܶ@~ԻL ҃yF=~J#N8jΔpO6 qH*LM qHD}yt4x2z'w< yL{TjDXlUqHMXd)$Ǒ cS_8MWI_`QƟ5fT徥{B}?8xӿK B8 Ӭm#"r3W݌oe1碿q;/1NB3{_sX1~k񶝡1˸oRy}2~ _Θis)\~mv0Ip]x>G!;A㣌q>"dJplyz.Ja|:+khÝd{Eȫ.d[ԉ(}\ .% ǻ 3=|QOs_c#p]Fnxeq|,-%CFk[5[A^\ǎC:V*x6Ա4Ɣ ݈ fP;bel[c|B`jZO +=Fc=*aQ7jxeS*uX~c9~tyFQa8j *~4W^z14eijuAgR~d?Ƙ1NcqEa?{B'd{B'P' ANoޠ ޠ &7 zVYVYVYVYVYVYVYVYVYVYVVVVVVVVVVV9V9V9V9V9R= ]/_ȥX^QT$7v uݹTZ/@'-`"AiDP@^ReMTTS)ӔiJ4>RMT@S)ΔgJe3RL]T,S)ɔdJ%2RuL5TS)ĔbJ0^R%L Tӑp$#1     IIIII"1Z$Fh-EbH"1Z$FhUbJV*1Z%FhmMbI6&1$Fhm 1 'E^yM%8 -NhqBZ'8 "4,B"4,B"4lB &4lB &4lB !4Bs!4Bs!4 %-Ah BKZ $% -IhIBKZВ$$% ZZZZZZ Z Z Z Z ȖXdK,%lE"[b-ȖXdK,%lE"[b-ȖXdK,%lE"[b-ȖXdK,%lE"[b-ȖXdK,%lE"[b-ȖXE[ii{ ތѼ/}[{2/]6q[lE6lG\0Nu9!QŅ?Mq=ls\u/7>g[@}\>oO}pki{RwnԫKhK|o ^6}۵]č?usr3.7^7׮Yw.m/d3r[Y|nS_oٽIw'vB c/^1isW?۵Ο _ou=E{ҵ^ip޼os/%]_9>⥻/ɿ]~?׍_ֺ $:?u/wϋ\6 `Mk_|m]-7އ.׺|O?tO\㞟=;8}Z" +ZP[3ϥف'§WAmgv) L4MG=>R7خ.+HL^a 0'b^ۛ_]׬v|^ƃ/;e>wwy?*ft<)_z p%ܝ׈ۄ}lt{~q>(ڷe7.P۹N{7؝CK |.~7ݗśy{`3Q%7 C_<9vxn58 ^XfLt}W&ϴnXP75v55 ЕfS̞4&c9 d]RtK%/E]r,Qt4=2kDYtHuHuHuHuH!շCo|ꈗgQg3>K*3: \-[051^9jaO#>73gL1YvހKpYFJ's;R2L7yd5vƟ~D?bc1~5 " 3e09xGv<Ǔ7/,Oe+u2@>KwUe8;ä,?WgGT'հ4u)Q5SqݪQW=*jUݨ8SIՠ M$ߩ@3y,49ő Scq2a'KS^Xmsjx֯sH! Zb8&>]j&gX:7Q"rWמ茫j{ҩB/37@(@wS.H .Ne⟭5ŸgIXOpm[ oVxmnmrXWnk|b~Q}QU|2,t*4spA;v) 7b"t5WB7wX,7Ď L`/9d(;7LAN鐇w,w!8La-)E3Y^ e6g;Ch8w]+Oxï6<'W^?_\W{Mq'׾=)JxxvL}|X홃RR(X<zz$od[bVЄ+X0Gv >p bH%.3|"85?WF%j py"X:Wy-atʲ[6@Z3{4MK=ɤNz4nxƳ5\i|5~ Upҷ}{dܞ}e?)+I;Lyxz3ϸ$c~: O08(G:"Zvۏ l1A䫌/~`!΃gOF%a (Ϥ=SQ&r Pu8j 2cy(gg_c+in 0=ve񁨡hi{},*+6l{i4C9iF>'/7YJ:cwy^O岚M48q"Y}?򻺓=Q9 Ó& MkABY?ȑ^?_rRx/ݐv0~={ ae?XRm{MW@{CX^ſ_iڷ ھ ڼyޫRePbhV(拁w@0_{kӹp1-9 ^? (BzǙ=GrG,EgEUwN?)BG!!ha8(HCW_ <9 r80DCGz@'WA@< 9 p]B 1bBj`7d,澙qŝ,o]7 i0gfﰸ1f6#  J=S?dq ^LKu}s )0dD ̖~,̆Y}/K{?sܿgϳx6ac,jO3o\{e2~ g+r(zrnj 0k /R]bAcҖfTE>`f,`"WߗL2rV3t6cw:o_F8 sd:OGO#_6?U #+[}GMo4<- 0!_=_E+xZY &~Zޡ|ljq|?0pùK瘖W5zG1_ϧc>:>6WԣE/a]# |6WwS Qۥ^ 6:'?_5)QA2_Jׯ~.?Mߤ7Jt1^3&Rh8_懛Z^jZ %_񔶘Qir'W|.?2 |%Twᶃ >kڟKuBvO+'~m ^W'=,L@vryz;a@e>.'㞐 ٞοkOdTFn;~Bn.EC;E}~.{ HoHmRE{\>d~k,  ryhͽhk\;n58E;|K^IB!Hc!(enl|KMN;(ڿqHG9׉;(bJJBkxķha\B/5S*_~%ܠ~KP?K_J^˽^-o'B~qp'Ӕ46hN(<`fJ=Xn1^ok[Ź;*g+is_31nV:ZXkO3=˳=|AY\W;0ߑi3F8 _Os>KB;ݍ'4Cd- 9Kř帤}}tGxՁt#0;4/tk|gj|gk|jD/xMxƫ4>O5nxh|k4^:kAƖƶƎ hܪq5HMoxox5ޡ_Nwizwk|{4L5ޫ>k|@Wh|D_U_5_4>u4иS.wkܣq4x@}o0pax3Y _. BT aSg*tyuNë cVi^^ 7.N./U\vV?R!~ԧR]|@Ƀuj(b]?-27(EPnxF75*a_>jr1hK)rDWDOo1z'u|LV 56>,786ԏ[Pjp1ģ ډIBx-p[xX@ $!пPn>[喣\1{&/\ȷʟM+@γ8sr?!} 鯃pς| ]ˡ !k!,,u? CBo>Cc? (b4˻Fm1eFVI)s@Hd&]XlLs`'MJ'Amj/JF֭9(%6(g`V9 (kn#}x&?Diن2\sy:{Aqh 'u}䧚3Ct⑳GNսG, dsZ#7 67HgD9~=:[:|;<I5]zfgQ,VCgj,2}\j{t^j VJy3(3 l(\?J=~-۔kbV^55"WP3GT Cx~Q˫iy~SIC?^C]v\g_O?Z^?Y`Hj+|]mTNm~}'[?}aE o;k~躭׫E'C j-S8ۧ^'UGFFhQMn(x u=4 CSǯ̫UQV)H#]C a2W^ @ՇqgfjʨcJkj ZgG[~j(q]Uˣ^Su'8CY7/qK~IFwq~ArP_`mo54/>YNϏ8r v|^ZZ=__2cDB\)OºrG˟B{c>~ ww.x]~埥Qo\_1zP? ׵gukJxZ~9KNgBa7x]"kp <[yX|uMʳA:pˑoA= \*?uޕݙWa!^{;Zޤ9Fi5z\IHHHHHH$2_Wl|H] KV’ca+Cם'TO7P"`yC`.5w|R#vW@%G։%= x> EzVX;ǘcMm7ltg:i{.q0LKeߥ8C9|?S쉲,r!_qU;oH/V W*tfF7XZ=^kN!Afupf\3izr25sMkax#R.SIpO}#+Ux,C xցnT,aKKpn,3y}ΘſޗL9C2/*QwQ Gxmw8_C/4.|jcu=1t=>bVw7teR=|&[6 %)d )\_=kUb-ەd]kN1Q>0{ ` iT rRVlß^IH=yoLertY4 A'ρ~/϶7 &x*37%9&`x6w)SxYOi@=+DjZ!ݏw ޸An |c;QuWgx$^rtQ)GAgY[K&⍕QDqd^c3ी' }IqѤhdaGc/5,7PuUL|*c] >uE4|m8bUU~/_SbZ~܏߃SԺ|:>~-A"F59 HWcUlγxUGVLïW-g)yպz0/^EW#PN: 7j]N)Scx2jx3i*u1fA*ıh]1~6ě ~OQ}ARAFCl׵ƠJEF(C^)zin߃Er<5s(_sWӗ/NJM}#F,\X.,-… &w؄ЦwF+G͉l^9xoYk20'); dg1 = dg*d1; dg2 = dg*d2; dg3 = dg*d3; cards; F None 91 226 F <10 7 17 F 10-20 15 56 F >20 21 39 M None 35 83 M <10 8 11 M 10-20 15 54 M >20 6 52 ; /* Alzheimer example - Logistic regression */ proc glimmix data=smoke; model c/n = dg d1-d3 dg1-dg3/s ddfm=none; estimate "f0" intercept 1, "f1" intercept 1 d1 1, "f2" intercept 1 d2 1, "f3" intercept 1 d3 1, "m0" intercept 1 dg 1, "m1" intercept 1 dg 1 d1 1 dg1 1, "m2" intercept 1 dg 1 d2 1 dg2 1, "m3" intercept 1 dg 1 d3 1 dg3 1 / adjust = simulate (nsamp=1000000 report) ilink cl; run; multcomp/inst/doc/0000755000176000001440000000000012234660136013667 5ustar ripleyusersmultcomp/inst/doc/generalsiminf.pdf0000644000176000001440000062745012234660204017217 0ustar ripleyusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4511 /Filter /FlateDecode /N 80 /First 658 >> stream x[is66 nmG8lGJ=Q}9͊pa( N$ @RPh&Lb"`X>H_q0 .4a _xO:( ibdeiCwUiu4ҲIJo=#kgp X[uTF=Ё "@%Xl<- F6,V!@#[^#[?d6LZ#Ɵl7jQA:><|Q2~S/ar{M~o%XLY_gVj\C5c}rOWvZz +ܠj3wՀ.6Da5[#o }| E"l2Z"58,lw$2>4YϨM75J^,J< &`*:ukM&d ].6S2a9&wyjf$I/o:DsT~Ֆ.H.5JO͟;O /mcу꧳ߜ1{[-ͪN?D<.o,W3h83g~0Y*u+l Ԝ/XAkU@-tjm6(-֍)b0?س@Ҏ8\;ȇQ)k3"}Y[ڵ?lDJM1Nc 3&YO&> GtcC |rqZ~*N|Z-?-U~>ٜLyyw*!Շɼ\LK~JrG'բ|rUbj9#pg/ul*Ouu^'6sHe[t9D9z:;xpK|1Tڎ!|ͧ C&E#*(Ouit5$4Od>p=^ k3`_]0^\ؗybo.pC]#G 5'\NsvZ$ Z:yQc(~A?<,?4_WBmdI;?gY߈_&u'(٪,opB.jN}AY.LD״˃?Jj7} O!KK6X$K EEx}[@wuХ ,O75҆Z}YQ+ ؤh99[]P5VE{Q_PZr2 #\X?V7LSʢhx6"NڥT˺.Fg.kãYuz>pdݔ|r&\Oj5ݞ|9ZWk>[nHU`2*l>QÁZ 0u["kd¢Hhm] wQ6PBH-5H_u;]}[œWq~;Y4Sgm$oZvDb=sEӕŏ?[>rbPcMTo6/NQphZzgXؐ+(CֹHzcZ3j_@UHgjZ r?Cs%@Ȱ'^6߾[h50$}oJ3oh`_77# bOQ! 2M5lTi$Y-W9{We~u}J7⾖j=W j5H'ݣ\.޵,U{ Kkn/:o0Ǚ>uy`,1V>yðj{|o,g03m;;B{SB% E ۝HY䃌 TEp'LԴ=rr8٬0,2ב[oR, T=#ir]BfjP-|6Cm\ocZڸDtյMe-Ruam{PnMv-~xx$ ykj-ؑX׼TOdŷFbZ1G&Z$0ly/}GrX+zӏP^ SSK}Y;BG0Pj9EC҇ZfWf@u8 L.3 ghb1ڊ,W򊱘yOwMIaȖO Wǫ^ZCl]j $=D!JɞVVa :ˆ* 9V |#vLYn*-<$qlf$(rzڤ$"sie1`Ft~.l|3Q׏ٌv` &I}σm &XFr~$$tC RIJE&!F ,yPgokJ}QRΆT /ȋɸA)RJ$CvC QJgVgZ M"( 'Bb<*Q@䮁2=w5q!h0m.2Gz|=]$1D5H)*W $N@i ˋچ@9- a'((o-A8/љ4%ALhK)$&]ݬ -U)\BIy-a vHG n 3) Ba-;i5KA7v_)Axj"ʘ?sߚΨ ʳÙ fC636QqTLQ%qj'ћaG\}Y2_Gҽw*zm߷t#)Ad9uX)֎~qcu˲Z\|m v](z3owFt)=[ƆL yʕ=7{/|*~}+~9İJ7)VU#wpLP4)e)#-~}9}StB(z Lj05z\_ 27o C7D{,v֩TܠܠMo3: IA2:ƅ@&)c5˿BfX v.0 gy7 fq54?{tqvjϖ+eӆBQIiW:֣] !iF Ղώ e7DJJ1 [l~P-tJFPIF跭2tiBg -͈qcW@fY/O9bI$ڱ@"ȉ$KQaQbBI ;Wyq%%X_^e+gN m!_e: g8rEIlCPMsܦ6[xd3Scrp龢8fHG,b#eRqI 軴A:I5tI\;m`&&{3 X`kN,N 9@Ǚg!Xw XD89`@eP_PNhx|"73xnhނL2\endstream endobj 82 0 obj << /Subtype /XML /Type /Metadata /Length 1337 >> stream 2013-11-01T09:04:19+01:00 2013-11-01T09:04:19+01:00 David M. Jones CMR17 endstream endobj 83 0 obj << /Type /ObjStm /Length 3606 /Filter /FlateDecode /N 80 /First 724 >> stream x[[s۶~?tBwL3v7ib'͙<2c%E-Jȶ|&AbbYʼaRI-33x&}Ƅqe)YjX&L ڒI )|=4:,`Vk[Q=S fSOSS-p#hT2S̗*L;G 3u2W%4n<3Z83:'Jf̦SƬ07Y tcd5XWsC8 )U )sKt\اyI y1; %`M*lCVH&(0Oa U3bfo=ʁ:1RbyBo;b!`(hZez41Q;0C&H1/,*tAchŊ(0 C2 Kl23oׄU+zFԦZ -JQ2Z9OvwOkąeyO믌oM&r6:eVW,xO2`4g|/?. O$Z$8-pX=(_0EA9,sLQw1Za|::K2.(1o,Or4*e\q]2KF~duqݱvq}q}q}䳏8ki>k3Ko"W{ӽml2?ɢX=-pTͽ/FbVN,>O SCq\Ҏ4eIjHtZ[q2H@Ǔ-tŗ]}ZbD;ey^M,'>G|ďy?c#)/ /93H|w<d{/`V2Dʭk):T=ɺ# ElE&u &5 V^?zAqVJBүԿFcW0#AVot`uY\0ZUi+.m k\ .! ;N!y9ӂggC٢O'!==Js> ~v!Cgi!(NAS y$V<%O`[=#;'uO@G(7>#PKt~ϣO'T7i(}X4Ijr>SA>*= `jdyAD”}jW䟚`oO4 V62ddbR4}ДV4QZ&@! Kܒ$ ${TjiU@?@N]BぶqR*I=׉'X&JAf>@z"NN'5E^&܌y[wr+Y/k~z;]ڄ~u~I׬nnAɆ5؁%y|8Rb|6>_=s^~|ӖO@0]#n[\`zRuMVK/dz4}?)0nC//v#/{s(%Kfc!^D ~!"`S7aJh.%81I;"|Ql &Y>;֖Lv%--fvX ۽/;#io\ 7!jjoA7|m KAw-cSM@v3~;yp^w`^jS~+:7kNhvU6ael* :x}xHҶK6j]'+ekʶkǥ]ˡ|˲tϊ) VWtixEoIAk66r,F('%q=FPЛ> p!Y7& ⊨:RIfMa' N((ON4y(rv(9KL$4E ݧdY_^ypNd XMZ.SЄ2(5M%>!MW2) 4O'FA:WHXDSJ&gA)dM=JLi{ II eLJ$YrfC4/z 찅Uv]Qv1.r]6Y!p؜PK>dgW1P+Ømm|8>.{h9%Qf.Uhߔ~N3/n, 8C$E2[PPR^ 3wuziLndzAԫUI,ifTqw E֬VD'!e0Нbw J{%VD" Z^t‚)(e)z*(F!%QYn}T=*Tl N{3VcfMa@S"۴ m 'TKSsl%Y!3PG7 pHB%`)MR/ z\}D(!nFLAT @-x]R`R 3* ]Wgn9 H$L+)P1ea}IϒPC2:M$(T* V.8DIh"*[{$~ Pezݭ{Tk"@]58t(d%AU/a4!UFڄ:de@pIu$4W+^J3E*BRu/Ύ{ɫ'Ѹhy1xx 3߫~qyMt nJ]{|]d ;5[|?;_=~HŨ(b|~ďs~4K 4!`G|4­e!4 gO]4ԕ]R$Ӫ(`h(ҁ/̏M&UPE" E+/ܠWp@1D; ^;)Ky4hhU𢱫Pm$D$HP 8,ڿFJk+] x#lFyp)hULE^zWHyY-u(/7)Zlk+,/&+G?Q@ߜ?l''oXd:?9ؑˍ ti.d]Svi1a5+` T@^d+n<~<$7n!uO4[!^s U>07!Tç2!2ݺ&R> stream xZn#}W1yź,f 0$@.ȃ#qٙb%Vzɖ(TXu Rrmv1sq9'ʎ2>#ŀL⛌OUŊCſq58HF8bXkBOq.*u"` VDu(t0=MQ@NISũ֪T}&„Ms5;kq1DCpQú]TL)@1qECt}\ &n.1r(cmpu)2cZ&rLbe?&u!@<$cys7ys -~^m+4gQF%/^nXyq[Z97|,D;,ro-_\x#uyC]pw=qrrr/'.w']> ? *}DK]JGrJS]rv/{ؾйDoַGh.lA_f۠M> D@ @f/.`^q#0>~i0rmӘBC$@) ÷ } RNIzR>7$ !"|B Hb8pQ Javpua1{8y'H=:,.,jog},^1 5}# c?KQ!}(mA{2jzVP*^NS/F_fy%[P 04wNPoOGFvL_vUes(+yQe#~gE%N O2nB`@`8Ȅ3`:¥1 +>piJ}ENE8& ?Kuu {"P~V2>%>ߦ:-kEަޖpL}:fJ/F*3'B'H/(=+iB%QZ=4쀔8S&3_>z8QjI"eFنSHNycaXe4&P*3h 1HꉌTi 8"Y0 9^[vp牏UjS9C] σJGKdFT03Q^.6Gu`H\=a0Bj:0"h2_4o_leS\Z2ye{9o5:R Q,RA8 0u֦?+@Mv+chER m΋iߚ$4W ~U+qeqknc`@VٍtPcrc!&:<6~g r L"ZBF]j#$s,g{, ")l嗴d3թj٩Ilј^̮XW˭e/H+rpT; HmyrXHLO]Nh?:Pm8Ds怎|h83&$b_}`Ru H qbx W%MwH,fVhqaΞ$v9­^=u&E+}0bp6Ҳvn M4([PiY.o7~E3/bo_09i> 蘢Y7EWcKو3fjrf*qucdw @hȴQ bR;Pp|%P2`[zJV怑G6\mvP%@ա,Pㄐ5r]7Ђuhu[i񩳺T+(#mW*}ȍnViۋ ʷiĄ̠]|oZ[Wj?l6?n_]}W7OoZq苄D{;R7N}ѡ.6Aibdk9yIwL Kvx%vy~|?۟> stream xZ[o#~[xAN6y14n~}CHslYIύR1LJg`*<#1e3V2'詘O͂a1`/cRt60ihN$ &hH&ch(*D4G?FrCQi J/^0%E4B1Qgo 25xnj34$Gf<p$_M HOr4bI q4ʣK`)"Q03a#-.*(5vcSD3Fy\j漧QZRH40Eͼ6kCch8杁gGjcYG }&- VC$f@%lASBEE EaXL[$YԴJh$%m 69ʊ{&߯+.hM\]٧*;uqʖs*W}uQds6]0t.*[_oM"O5]mǞpj竲JG*{7Mo 2}ȔqlϋߧpWb=ˬX}l э3RpSN@*+vۓb:R[}Y^pfuW[_՝ٴʋe9Kjnd]0{5[{g J̲;ѲP:ZS VE-;Ԋ]XV{b1 n4j([fU>cXGɊd>+y^.w=\>,^Ǜ|F$?Χ`ݣLCMd]/_Kvٴ\ = Q Kٺl^7]-)Z>!ƽ{RX|-d,ߒA6O_?C`ѵ!57l~Y'7]Q[V} pb4@-ˬ,֫YV2Bݧ+,_uQ̮2dzsh G}Ff=SxW7sCVbue"7/t:wFq ǭlF=уi)&H6UA!#i@(/QOˁl&+!*8m#7鈈 qkDH]8=8H ^p܎'#- $M[Ίv&˓e>nBq@>[UJ)6v!AK~SQMuV%;ONۻ[jruZ mɐ$!JE.F_os3dMF~@8P[Ddy ׋,Yd蓫*[4:\j ՚/(uXbA6LM喺M/$xdpua,>\JJa/pjee0u-j5"Ѧ+R}riwxY@Ĵ:L*a1"ؐP) 5%E{*Yt#VֹJ*fpt JW bgKS ca&Q}h;[KQlZwͺf׼GFJ-_ۤHЕh2'CGv҈ 801nVLDg1.Z1q OGWE@r<Q0 NK+HEWޚ(R:<(ǎK^!HT(B8b{|TI=s B6Zm90sAE2ZF=_E)Ce) /JQpL-*"PC ?7 (d2)> stream x]KwqSf/rtWc+c''  @xP$%zߞH:>Zrz|dɈ߾trux1\񅢿ߞ% qGjޝLZ dN^޾toRw0BܽVMf W {|bW9{]Ӥw7XƉ{v]to4ew; fУr<|:;èT8x \2``ԋS)u MK.O68N4ݞ(+;CC3b.5N}(.^!xaߕ g^;;5ͩsvj=WLJh~Q+؜g~G d21vv>1:?˯Ahma~ 9JhM FQtߊeWgx^DRxw#gQIk^O؉31\:AYzHGhgB@+O䀉Y\|;嫴n $!V2}`?:Q㸩HH%:j`WYS.o噂YyS \@6⤝!I," jrJK9ּZU7в~i[l9 >7tAS>i"*pftFBx 6E0,Pƃw9{-~+XAl:.Gӛ IrGOx17sk49qLo=[y2XHH:ZK_8(4q$P@5`C=7ɢǵqs3)E RwqMQv `2J΄cɞN5/ ` D0<(T._$[4)4.҆ԄOhNpkǁȍM-ɘ,XgޤN3m6<|JH .4B-^k=qxbu_J[ r?MUU!&aR^.ۆ,m[(( x+mz aɁQ>J[aB]jA1ek$XxOԡȡ /PGy{SݔΘkYa@Q>]P K)$P?ZZ6j2[8f Q3n$/JXpmkj'׍q`n%p?.zf6y«ST\ƭ61XOۼ Kή/|`uA(\I]OOpVahHg %9';(uYHMCu?ulvX8XmLyD('kj"mRzފ\Ks"ŦfBg2E#PN|`--b@IX1p1P {f>,6/2$P }:\60JunݤbҢe?68W#l9'6cG罁e:3 Ơƥ`e+\v˲| "H;me/>K$=[ל^+1`IgkfrkcIT{te(}g H_o$~&sT6*\B7//HG#: ^oSW-l]YBU&rnj+ F_iI%Sk}ˏsH+\Pr9raP7%0ψFՇD/ BQK8ntJ;%GX" ʇxlؠIGJLicFj1k<mts5/OyQrЛ~2EeZA ?x@-!V?b 0Ju}':q1wԭq].]e cIa+\$RX@›? UPj<zۙᖐ&'5!ktm^-[*+ ռvgρbBNIjОjy@UyhIi\w;E%bþEmZAI8iêc3^>j[O⏔NŸ I :ʪUKWE5%qؑmLڦֶTcXʰmɍ/%Hl˔}^Jһa.Qhx :?tUcn-n"!ʀXSoHTɾNWPqttji|߄,qfL*+W.6?@8_I#rԕ{l+`‡ԍ7Y,"JEh4գ^Jl_\jC%i2Ҿbhy;LE/HLO3n)+/+>ٕNLW)=*JD2B3zV"^UMk2 cl:IX CkD}#\.Xc?L"7ڬ̖7SRc':.v[#oHD!څ-AR=fioR,Ʀا?H2F 0hm sTkw/eoΘ`k|*3 I]LƟG|EtjSVg yLNO UjMvӓnС{!WLwc! 4V6c@O0zf)0#MYn/iW~0vj/,~$<3YHͼNBQw:2C} J`&?O8NCT9N؉1Jv%DJ&bqL9.qc$?A.JI rM<09bDn,bXپ^i:Uķ:1k10);Ř͗;;|}v3AFsGYܦ^"R˽V[N螽4Y3YE9&9Xcŷ%K/|i?#TFu>z25!SLI~C^Ruצȣ)a<[ Fr G""4(-..U>Fg?FU_G@PhM/Om˶)V~vKMrTT:J#aqZ :N^TV^D l8ot\vhJژobUr1Wkt\u=5ڗԂ'(C>/1pS<_ l*A/ye]MVDI K&Û :#꨺t뒏Yf^8 t U2V]/;x|{YO)#=z$_Jgs6QLhDyiPë4#W165Mf=s 0bv|e7r>F"!ڷQI'HRq>~~g雔_%oN SA)2ϱ5 AX[EpFIu;%9YU@-{oi6Mڤܩ}˧B*Le>:FmQᥫY 5"l5Z6jڤxL}&A]fW@riQRzKnaʛ<`f6 $R?>#Xhx]oW' 1y3m5~`xz$ ŦEX{u9O؟'OzGo.վœAO?Va`)߻rM_gjDۦu]QAS@ҿz1C^wu}zb#&Hq\`î.1 о%,5G#EpQza~e,h fQ+@{e\u)O.r4FNj kvJul:1NRm-m$WW`utrLAw3l2?;%Ҏ (6oAiT`MugN )-tZV2Y9)y$ қA/֓Η5yvshAppY@ N!:̑&)?r 'Jĕ7Y:+7G7 a #|S5g^,lۛr]V>wJ&<*5Z8944m~|zO=c>4G-J,KU%sJYCyw3-/P𣇬}xG]dy}v x+3cDXy a~1ev >>j)DϭXO.?X`e_56JYG./X,>!|2ZAK<e2A09RՅ,MgWÔ^e52E޼Ua;ߌ(>L@u9~Rk۲&GDŅ.104`b1 Pbejd5Imw5djʨk=U P#eJNplr3ih78ee=*7pi˅+g_9 _՗p|i%e#<'=,۩r˟B+y}f\r)h25S}.Ծ]*y}-77>)EPdGoJĖbJ{B[ֿ zV0QoN&0›Z(/F+6[1gLc c*)y%FY5vNϟN9us48FToKt•> kCe IF{H|P 1]4׫"Dh$%~Q&nuCz'gH v S]۔v'zwK7ɋnRMeePs6ױv}TN ]*$ʊ=Xjİ?n~!l?Ɏ78}i@džÝ r>f"9p1#kb`*{~1?"br13:ګtsA\ ^i"j㋋Sendstream endobj 325 0 obj << /Filter /FlateDecode /Length 6514 >> stream x][$GV}ax,Kr%q,]ɰ]{$$ v=<9'"2Ȍ̬li3[w1ȃʿ/o?7Ͼ{&_埗ou~PҚrSy tR㿞b1F%Nq9M $`'\lt~e"Z V峒^갛 ]-lR ؉>GF$zJBJ8O;QHpr:(ϖH-N^lN>17TʪPL!ܡEg bXwnbWI *17+ Bm | P}G`UtYY} (<" eҷ\p 8%Ġ_8k)dÛw(V"Jev{}T-Wrwm<so,݄;CJ|g ݽaR}yؐČ y(Ȍt\(d4:xFqE+fRa#+4:y͸Tfӽ_6sA= \=B<ϖ|2[ p(g|p6 .Čbvm=32F3 rbߥQs V B28i!_2M\^X4 t4UicDGRYJa~rʊV(GEpN6-*. `; ?"e<ݥ#O]oN=Q1zi_j vGZee_&|i^'$(ZRNLkrԊd`0UrGт 3]`qEu9__!0xGY@5l<&}ؤ3;:lX&Z͂pC8o zH켉_T`c֎A-H*Tӈ]Ȼ$6 7'i  b\&Z7Y +Ҟ.WbC 󂕰>QV(p)?CuS6KO_4kh0Dsmshp :tc/oLrW"@FlO%a:T?ꎿ`1|%`,=t4;囉h㟘;RnJGP m\L2(hCs/cgjHo92[&ˡ1ZrrРFe@$H6[a.- b8X|Σa'&@82; 8X Vbd3sGXt`B`#os|GlM. H QÓ=3/a>Иt5~5qn*6ńQ2':Az:S%QeDFr̺͛fEH 4H0=lhɴj]ș$ ls-wj,Lz;hv@L^qUlmƦ!4-Ivl )U,0&4~ܰ#TeDNLhGOfX&D&$ѪlMH)Mw&dRBcg`kdvc,rm Nǁpgы.?}&  cX⬀gEɢ) vMjlDž׃7?7yU|$R `~ BB;&XLi rķ#@2 =?oVy?dTO|E;ҏS43Bʤ]ˇsIn86 mS̅68fqp>I@M2x_v5lňvX*8ay0WlFBZ@hL>oh854B+G¸K+Uv N saD89g9g+{*McGcϹӲ 'A~ | -OM 3bB/Rq?=}~`Pdl:('5s;Y øP#z3}|=7+םpJײ_sSN;;È \m/6_2l.:ąS˃AjmWN9hj{̚R`,fGH Y2/.f+~ 1_X XoeϘYnuDJ:)aé)r&J$rqwc/qeh$ID^y͹/ ';D7$+эM[h'C9G75& ߤi$J29m˔`\:Q$ow>ͻYr&Ps1mc+s`=ui0Aisb 3)7t8ROg6]*V0*~S'ٶ0៵Lxq` v\Na1`PY_4 $ {ѨnN.h<+Ȯ^'WWu$^;\L֛`x;n~zirKe)dip1Q^grUJo8fLwf/iKVV Gcs[howg A!pf LC8OެV@sO j5 2[2f"8ÖnΓTQ-l3D`"m;Rpd=f"L]T&u6.ErǤK 8h~7%?&KhϸG Zwke aQONaz:.S)<Ғ~ObSؿJ-*2Xps-؇H8B'awmv;t@;`Mz9ncP/ K5FPE.@y8%EUS1BX;UMBp@/yDj=yxA4TJF?@;xGͭlݎ!zbҁ=o ſ+o@£r jt_їfш'ht,Mf#ǬTY6$/cXCXXC&|uI*-6`Io>,LjSG`FnK9 "vzI֋,x-z< f+Un8y2KF(m.N2L7ĠtsHmseK%!/iKjtY{C +4(glbfVhA^S7僛}аRi3[JC] Z]rBKʻ-_b<"ts# .U]k~BǼG;0Xw^gMrr}K])YSZ+;L۝) %i"دixc Si]R n<ߥ8 zx^(7~fw- aMhq^ 4hJP!  Oc 뜛kݻrry'D ~lk2]#+Idc8iR|#ћ!~9&?r_DME~HcvXg6 kK pZ}d:{cdFL,@UR-,4Vof4 7i PU7Kd 56[6J5ޒ^^؀Z ^NQ )"LQ$﵄Jd٘$3]DC ;DtIJn45jb2kߓ Zu5tYbR@ߖXƿSN($?WoqatJw jvM49H쾔\{Zd) 1KgR5lNw5 潾,t钉[JB^wIc!76wjaËjcfFlj[rQ"\SxAb%%J_T8vgsVH]uL J[]T%~JY՛sm0H]2k. -W?iI}T]~+.nb&UfMLE;q Z!I ݘOyt§[_Iɧ~~%ݘ=&ӌ%W2;DZx)q`#HE7UMg7llןe_nۿ@8b\Eά鸇FJ"tWȔ tv[yM&șٟ A1A03Nj@P"s Io5 e.ݲ4?2ߡs VUlS(m?3mw6g endstream endobj 326 0 obj << /Filter /FlateDecode /Length 6721 >> stream x]Yq֓hh6y cKKZ 9Cr!w]R̪ʬ4ײmTG_7OK7nͫ'>鯛o6? Or֪ӗOr_7O~ډA)^k5(wZ}#Rуھ|4:[| JD-C([*n84Q}ub0=]ц ~ַ}F#kF{w_oq˜o@|/@^y-^U5<u~LOi#~{@v%mr5[-U5AKUK LI >xנuP@2Ϋ5)bjy:'?pz^=`5Dxx" jQ”ADCΰ@碔U*\whq3}J/~ǭ'yoCqvBo<Z͇zG J逖W 鋜:ƴ1!fQjUNBwtBڅ:e3qY.ELb tm ;`',mȃ $~*i ; @ o( wt4&|-4ZD-R1޵j{4*7v*HKAG8{Z[2L2Yns45"Q"G]X h En|? 8LQQMk0kEؘAk"g.Mp1{5\e\L槌T ?ꔙU){))C/<ñyڄz%'H:O?(WWU/*PCKkUΨ g '+%~aVWC˚B(3$|Kn{O=] tat+E$*,i5.NҠ.F#)) }X^/WD*d(YϩM .Qj@QۄA"1jo&7Ai+_W+A-)wH wX^o7?G?m7.D Q<C'C!|9IeOoVoS>Hn~ 'b9F@.i3,`WR0?#U)l/]ϐp#|v ~W ْ`CZ\Xϫ#kCLEI1fPvtilKS۟%6A(C)UC()k9h2hw(3 B܀4N0Bp: \u"?śnJv%r0a vB;v9o0y>] C/I UG8u!q%2 x0\b?Ner0b9ߔ1ˁ4Z{D@S|a79D!LR E9>yiC`wp8l 2TJZP(RA)y2;A0,)j@hB{&-zzaq!׉&|LУୖy{U˙;̌%| r>9>^  s#cZs`F BumFhhr M[DL,r;JO-H7uM^ |K2س4 OIɾ~MC] Q" {@$5%47vI5e' p/dX!f7L$sS3GOpjlk^|QgƲփqm {/jGB1ed3[vB apQ(T\8;"ON*A\xӉƉ_`GG% '+uC/nn4놡?%SԘI)&y#@t]qN#WNb%^癚? ZNХFF(*q.WbE^ ?-1iP]PR&;z4 {M Z?HB;S8@C |3xF<@öyR]"*r52!8Al>ͿS>T;%N 9uO5QҴHֻ)W0zᔀa¸?A?#링eNċ/#xxJ2xvɐ)3Q^0v;7i?ݒY窖;g6a˴OŖhP;+z|^5٥ bEe"B26*R*Y X"q 425/˸Ү#Ę<W–5BWէAn=U-J1._n3+*>{L)~ odR78_evg?dehK(>$^hf@GS EdxIM, ,Q#Ì觯#2FS fNJ5'j,\LVjgX7J']۳gz0ο>CY0]@"؏jI'̮"yPwlgFʸ,>} nfPnhD/7 n(Ev׃Zyv]ӭMYo-R32zOK; NB?A-p[peEך0 XL."S,]$STRvjooi5>1K̊:qrAlm&RvqJ(|M Jes3\YOm3(96I@ s_}Lv`F*O@3} *Rl+Lt}Ww6zs*ujzh7 Ty<\dTQUa1)GazFx$oa_ty"W|FYxDRq LC_NX䴩|WV3R@ )7OQ@p.LՉcdZasebDKFA1uT= ~/؁GFѧy{0fլFtk'&\Lчz8L\2FFE]p?t :6QWHIp9CO9SuX_3#4NhwW[@Peǔ7;ZEa?6XI W=@yNnU kfЊ Ej1r *m`}V6L(cbm.v^7meӂЈw@B PɃc(=lY֐IR_O7ə@aģzV$+Y i"O%GLhʰ 5[ W&.30~ނ5Rࡹ mt~ޯ`R DVG\Ta [ZɶۋqDsS:g'+`.|Nh_n H7MHC3EMqm\Wmd,/o_ {`IeXգHc÷yN6C1Zm)VyB:B%䋔YZkS퀈_Ht М>0da!3WMv<%tdI-'U9JkRa҄2/~^(lGndQPbtJBT_#M`EJS䈽\/Z63~܍`J`]u& df iS*plPS6ƿsrrFe q vc `פ WkXCG=,>5$cZ U~$ l҅S\%0G샠̄ه& +b4;D_*28};]D_49;͘n'MMu"fw($(%t]š7dk{߼7TRq议AgmU PWzaO1;qӭWj!S @#yՌ&ǁ'C;'0/,Ǹf*Nٕ\Y7a9g0J>1dQ[!'tًpC,cfRwX$ffr(S) zM̗؂UY~['=:ko2ާ<4os*51 H"Ad ms~TNrǃp>.Z'X!/+5ǴXvsČFNͿضoTZEJnppQ.ඌ|#cܪgHZ".XYi.e~-= C'.sYUx`5EjFmsGH=&ղwbGùgpHEj*KEpo7*V;9ϝ]j<멟Փc򃺷yn˪&'5ؕRN /Oz͏k9G_B\]>0l!!m᤮41M2[LMZ *\A+Fݸ`U*TLHFo7)X-ytc73 &]#16iV^Lb?;#" cQmgE($M'#}t{gc | ļR׬H:؏mX@K|GGxBR+7Wz9.T*컹o!@.t doo5endstream endobj 327 0 obj << /Filter /FlateDecode /Length 6920 >> stream x]Y$q_zd/ Gd>HH eрLٲwٙ.}owDfVUD;Kޞ<"~'&//~wb +yr cvRNZ{"*w^$=xy_/.bRBHo.ǸïeNK1 ijmOp tyP~4|[HaC0y('fED =% zMO腳2C6Jz.u^;LW!k_^º߲0J2XvG&ZFpG˫Q@#=?`烾FIud_ߤWcr2+6u7xb@U5#!ÿt`Oe0,2=Dj᫖Q"6o<#_3s ܾ5Tʪ@&p2am$aA'3i ֮,-#,²˫O"pzS>+J ثu[W&ωD 81J|v͞bU^z{BٖϟJK =Zr|@)}℧ %eVNJpەhg3N'*Y<@.gÔJ$q|=5':'>PJǣ NW(Bi >7:SY,sa޹*,.- .rxkQOfJn`t~A./#П CޏPgn de?$EfVy<$&ԩ8ͪ33T C%,"cT jp~N} آj(`ZODEO 81B ɟfU5DF7Dy,+!op>D/+AV2˼z. $$pi[&.zNNY !Tj`eނ z!rf$"4lQ0,`4A_$E`DӸi/Y8lάdB`w$Q5C3:uc#,;ȃ*1f_V)i>]mGAynC(AE!_.;ƈt D!t 6  o7q:IT"{(G2XCLٶ<5B2Ws iO9Z|Uvfؗ'y|5&u&e]3EǶ k+`/PTPaHOlǻո9PW?8MʅB ! x[F[AIzfx 3'U?P\mpS:4CtaB}DPe{e=DjtUJ~ݜx|HjcfIͲo҇@ȴ9b7 /&R+]{`eJ?mH4b7=ځO$]'4^uSr#ϋF\⪜vRAYpfwW˞Ϧ4 ߧc<%qrౙI(zV&sExxZ^Gm~Le qp;;7k~t??_h@N`_\vړ*U lO3 _]([A?~XL4 PI9{Qn `7p*o!FK`@+m;x ƷieeفF( N;"(<:0?v 30X9I*8YY]kW h}`eXPk*Y^P5xy*H=\Z+b+:qݐ'_;-1 U*&p53gܿxNO'FBO3*I] |7ȥMbB2I$}__d[Pח7 *<ˋ߲ Wg[ţ#=\O'] @e˕{B5voR@Vͩlx|aI\rkY x-At;QW{߫ksu_zЪXqAOdEb$k>m{l+@rU&yIx`W芁ǥ#'+8Ix%Q 9v PXe}X ^Y0Җ>jQw|FA6c#iA<%Z9j.oZP--goP"x'Qvaa :gf(NpU]#*b46m"ۼY'&,@ Ⱦ|]2H3ʄUײݧyV8ʃIJ3r=yҚH0DL*,.U+/t{Of%H`(ι/Z)ǟU惺eB % :bUaFDr x4̕dut&G&bΖmjKL߄t|虝hLi*9! z)zo\oj*%.0'vь;jj$YkT[)x0jE^Z+>O},Ě.\,giW>մ\DfWBJ;dsИozLqQxkAK rfen2_w'؀,uWV)5&N6vBrWO>q2Nf Ga{!5C+@njkX/c@@!{8C鹂 xn$HSKs7Y x{f`Ttj{HJ)4Y*r/uoMǒn?‹:v9^VquMxMu3IШw(-}LU/!@E6^, &=sSO5 wZ^؟zle=<)\nDv4Kf'Rm vg@[~;+ɓ 8 <-zZQ&@eVVTiJ%/b; )ϣfsCo1Nժ7nJzgṆP@f8YnI0d2K_u :1K?Ԉj5U6&IO*x3qVR8JBV8'a;oL̔nblw:9ag1mK{K.L*R ~V{qrc[饿W@" QR0j,]nY|JcO6}NZ WEqdi²'4 xyH+ϥz?Vfi.83P4Q |,G*>!0\U.F{AazR 5>JYF fAI4j^~^y}8Iga3s jIs76mxC2m9%QqFb@)'lTݸ|'4HpnjSkm*e'shcy=}Л[U/ syq.ĸuo۬8汶|KHOߗu<]WޮD&y*/ fkYk|v-E3z&.vue7ctv!^ T{Eo X;΅]p g`9C Vˠ0k)oR}3rmmq%<^JBIbB@~Ao +[fu^6՚I+^_{|kj6O7y(ߞ%G@tn!#oyu|7ʐ;>QOWVb[4|aͅbA_m}VJ4Ge!4ϖY5 E,'l UKj ~B3˝K-iH#U*7=HXoaFR@QϸxԒj!_ВP9nurS4ET{yiU;2mfFa2*&> stream x\[q3l19)18QRʊd[rd'ڻKv寧gRvg1@ׯÁ_?7v<8{ΟL_~u#;zHޛógU}0h}ުAiM#mQ1m^oϵۼhGJ6WT:g6`7/;ҐFL#!c7oi97tL` aHIo|/w8EtzR^{$Ӷse*0(H}GWħ;+n~ O6^j lҨOo-Q)8%O:TRK>S n!`FoKi7[.l~Dx[X Y@XmiisɈ= }r!ow&!CvGv_ΌyȕLb TցǴOupNz|V3;yK:DZ^;PiȰJRvhr.4:#>F Xn~N|"\d)L|щ{8-$w8 KtPGAqҰ*SM$3Ǖ"st߸Ask+u"S#&c,dvf~d ϦLr%5:Jͽ<_$~JQsc%V¢~̜4k+{0/(:ѓCLE.3].d% &jԦ,EMz gmT,U 9Nن'b`m"?5f>|g9ШØ8XcB2@Ρof4[z1I;W htLC@4mB |"}ېY`beE'?QuC7 c旙 a|O8rA,8R7IȎH?9 јzԹuM us 1. HғNAv]ɘLZ"yr.).yza |bL2ݑKXQXkf!鄆B!QMJMC,_;>UgSuw1ѣ.am!z :(E[. S`x-c|F4]- ]DCy*u<}ߠ2%vp!mί.߯TAE0P%(d sOF]"e)}/u#'+NOT/zŘq1)X1"a;U(`r㤎kCXVYx!y+gØ̃>xE1Ly(z3S;VbSw rrF7YX._$E*oEEهxp }, %!<wzpڃ*̉w[@T?*M;T2:fĩBHd3 9 3#8Y`kQ#RS!X܁'q1ձ͗HG*Reʏ.a~~0Wƒ"D Q-v8̦nQ,ffO槷k?N.s:dSN,E"Ojrx]8d=7K_8onE`# EW'ۘPoj]zOr:}%`t=+ {Ru ndO8~fsc+sf葙u/x .KGB&*YD=l%7|^8@tjxp> C;Kv0<! >1~7oTK _¥$:v ]&R9Oo@p|[p9%,8w@Bwց#y(۹a5vQV=;7:BDcIa][Xńs/2XGzcV-`Ehxh)쬥D<>ˏsdEʘnI*bԼ/ Ķ\GƩE@R)&kUR}VYbu6y(M:?sK8|{VTefFm5N%yPQhr]HӉjwy%-+!Yފ;1jk-aU&Zn/M!Ɗ!$;31T.$B vtBI"jP* h`b]9)p`y cIsosSF) .t"6fQ"5- T #% @קN&8f<<6d K𶌠"bho?w $Ś[KV2]^eE Fo^u!a7W MA<-c`*,#^*Q*$nJ̴" @(ӽt1UGsi^ ]jiΩg+ C6+i[=qU3K't?׮ߞ pBSdYX7_/ҍ󜠻roŠNNUZ|9nT}|p17wַnɆ$YF`QL v%Э$$2[dI2Dg aA"kP"[ŕY'Oq#@nP/wM$mw/Bv6 8!:+ڸ,ڶReV 5k-%LjDx|yJݸv-T>t^B+EIttf_'K*7JA/Tm[@VVEFXspP[0:1@-sN,Lt -741bWj=gT1+ xy%[ D0C9J7 x5W LO]OZz-0 lF?ewyWn|GXb@|h+Kձ}~*׎Q f%HK;!.5 dw{`rso5o !\nn-siS;X5t_Mmm+^&uИ Ĵ S_ǵ zWlJ%K\Fr]6 +8aT4*Y !=wyjZfKc wE`QNlANpdCǧَyjxA) Z,dŢo$]a]u6j{&\Sk/sNNK6ߪ^تFKҿPRiT >?ʅVqfZ7ZykQUK]XR/gcmi\hǮP2،\NJ!|ý; ǯ'V[a!i)/)jם㢓p{nbԺ%wSa0h!ũ<tp-W]!Xs(KcՄSheT?rl]rcRq1 V M:O2T6lHXZSn DL Ȇʟ?yyd2!4`679c`jc\#6j$Od磌4+P@Nj}yz]"OVpP6D^~778xB?i~m Y&y_Ku0@㦣H3$JHF\+)<+s a܌:FI.\Ȁ%oDLU\ƀσ? ݃74lAxaA(2iܻ3(eIM(yvPy0x;MM"j!kx &_EtO JQl,my<Qj!i5 q;|G\7u3 ~'oLxTn#Gy|P"{=RT hF4a}S԰. "An#v*+Dv`URRwoNY2qX"qIN)U|EP %T?qnݖBQJ]FZfu ؞kTRW~f,Bƾ=w}s#juASm^Wi4(+f '~U%XP:8aLn% 0Ձ2Ot("أdX6mMsŕ S3HG  * Vjoi*߿jWhoM*_˝5wN^׿fV2o?sh|#vW\b@M,ػtazmKg"+U>{ bX`ii}R)޷xeHZ/.H)eUXUs82Z<2*l⫟;\ai/%oO`akGHLIvdtT/ϫl ܣܺ[gkXtzĐ9c8,KG"eK_ڝ1YEK'p,xadyZg1Ӟ"es6B:fy X>w\^[MW؇N}^%j~d`N]6sﮛL#naQ;G|cG# => stream x[Ks$G>pns"z"nwViK>5"<ݭ׈9ga=YJ J8lghpgܘU0KbD@*) :Q9-IU6zllu OЮ#9:-Ρ7=ʢI"_,lst=ݷ֠vhZř~TmrR7l{%>h;UVl^2&7:^) QhTea6ړ"H>#t$s FӋ.}x)?\'f㘭I,Q*iv;(l'D0zCPy2A+sf؃4xh)3il?Fi_`,D q=&xh[jkrtn:_8i&H6!h47[AAWRRQ rE~So&C& >,Dm? >grzA\_li'|7PrT;{gLs7:hdqclf؂! MV f'Zx8U]/9n=T5:ڳw`=ޡΠB٧*)K#ZLEa! }RDb_j֐ 0ZSi,v-ԓWB\OnӞ R T52Q2KMl B=t!bxZ `d^m (9@R r{Be o]! 8'v0@/bokQR(ѡ;zԸ㘌|вw6NRO o] РpP,\.ibٸϏdWbi^vs5ZBz] u4I+:ȿN7rմJ,`Ic4؅*v$tj;&X>\uԠUq>-_7*@  ״O5J/ bFj@ED9ɝy| cԺQ=t,%i.!FCq7gch@k۪D'7GeC;e[!MM{!&Ūܾm.]*  (^GP , y¢T&9f$Ip -yMzi:LIuܸuOer_jQ|&"R*!4ߞ 9,'9ڊC$F1^yK]*2䒓 nێ]‘y,:XA)]C->k4KcR=0l ce0ȷbaop \+r )BՏm %-g\H$X׹Jvbp2Uw y@\iۋ2u0> D @^3q肟pFHP3H'VA}f))~H/gN-֔Ju[T|%gx!Q4ȥN7`b->{?`e(P(88:x,Xjn?S;v׳{hNFsv+/*ۛ>, |8ZB 8k=Ob2%)wUI]- v1r_V:x/T.}Zua3@F\?4? m^WV 3Gy@TvڝB~Qԭ w k&+3 +k43* .{oQAo$кT\XjkVblѓRAQE1;r0E*oa_6~9S9N]&X4,PkGKKP_7 dBnjnЩبؐ}gzTE0NP/ 1[D+:]='!0(ʾ\8lݜDEUg;`,}|вBZnoθtUxq=r=:sV^//!x !-K.Dj *H {^5h`Ąm"c xK@Ѭyr܉]8N耊+n9o,m!TaTBT7wJ |Mjp]fӷ[>nyr(n_d^c/ߒ=Z* Љ8hyVK~<9<cw/GfxڄU]^"+"qEZ@eu"J>#rĊgspx)N| G0(8M 3$e=*ߑt {a0Ĥr?oqm.#iÓ |}Ds?^QE?Rbq7(|Y{j{˶Z?<~ڄ*Ef]dl^][CK؜[7LޖŸ]T6ƃC sxڿPihcz(}c̅0%7 f"='#1Y-,-z݇`S'[)7P#Exf);5`TQ|^9S4XRe',Rx3 |{6OϢQ kԛ;`ޏ9N7nϞlë 5$h>)Dϊ7l.'mYU`sA k;d MTi-D3]<~}9SQN vF:ɸߎ 6d?t܉? B`".ıdr~:[k0Ji!zUI$Vkge˸$לgzn(߮A!]LHɔ*԰Nւ;68v:BJ2I'wDbxлNIC=.h+E FV1pNT:ԧTTFmDv.[X~Ɠq HO ?sδ\Ҧ|^I2"v%g .|ѧgE;Q`-~ qߋhۮs2I .=kl`sT_ -_loطb_KHDɸ+)0cOE.?y_Eʉ LNN79K(^|2S {QM p&H[W;:郁R=}0)EWo4C[ÀgW݅ox5R@ ڿXUb^]ԫ}W5jN7҇7.8.l7M?샼 ч< ]c , # 2f}r2?@Aendstream endobj 330 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2068 >> stream xV{Pw5]i]ݍ1S|-<<- ! GxX^ i@D!rZ>Zk=mfnAi7ߙݙ>$4 IR3~%ɽ9/lG#\l: dRZA"Y*WݥK^>+oZ+^(KK%I 2^(Q PT.Skd?OLIb"5 q\/R3d͊$x$Q&85@$ HRmQJAЄDADNeb#Al"6[/b+MۉYX5$Ͽ.=<jHa(6&j4vhԝw]hiKN(OoF0Xu"VB6a,aK,`=(6 mT&2t`ۥz"n^TPۓ910jyE=Vm5i7nڊoܴLJdThPWZOrR~})z Q%bFѲ)~!@oBhSy=|IܼZNEdOQaސq*Tػx: /ZgXn@(7ür0T|칆{<lOc+ NsX<4,?/i5ڡ/;"5P+a,=<;t_*G҉'7&WUg֬O;y.K0;>P$ )^lce#ۇ>p[k&P-2M¼ž~LQs c9Kiv@([HaA3Αl2C1vAЈ᳁yVV2YQ)A9ܬ46+ۡF~g0|dVsp `c~yxMկDt7{e}*F/̽l -' mBrEPivfJ:RjvNyendstream endobj 331 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2390 >> stream x{pSUs6E/.AwDFiKuE+"+BRZ %mCӤ4}$iͻi6MJyR "t)ETD@wWqts˩;{lN{;|~|ϗ१Xxq;/?weL>L7㟷nFcfRkezGRgyiVUVi//^t5R\h5 !oPˤ*Ѽ7F\]%9wޭamxh_NSD+p&Ժwzj&0/[l5j˹ˑn8A~t;f Hz]a֋a>ou*$V ;"8|6p$ZGqg?7;2k4W!u@c9*bGg֝~ Rv p0vGB]ذD731wKvB2(RV,ŏUxS/?)A knfJ uevg-!-MFZ`ogujiݾwF.]z-GE I" PXL AAt(t\$ў$lF.Bg)4(5~Au:7p'F 'O~{8A@W]ᣍC ZSXي>V#=>b D|ndD^ۡ|GBԺl.Zmce$, T9k:d86.MnNF!NC$°:QW)S$!]ܔ˨(D'k׋PX58+Oq&;`:Fq |yA=]LA Fi&0$Jli6i@}c<]!^lHT[Yj*Kaq:|9h[PX l2ΰF[p)t5fn 2L{p39PG Z\<֠5>gf鄌dq㻒(7MKn }>f3۝vqi8`ie+Cpo1`iA=1$h&ګM Rع|ևnng.i8 c>"o>OjoTRQ Q2p9c!>fzz? g§}p}xګ|rVjۊb.>xﳯNݵ IN;Sy(wvB# iFp}s2Vi6477l4{=hء) 0г[?k…uQ[3#jBhvn3D:"N觟pB$z/+B'ih:^%fp53sNQRb([iYn&a 10@~:.EvHOӱת_I 9Ir^n:Ww⹸0@"&"|<<$ZKzaW* mvc`n'h1A[F&btfZsL!sx'WXi݁ߡo(@yx~?'ZF<;#cMn'ROTwϵ5vt'#_p׷T!O^n֐nk\"ʧ=xECECyڠҾ/>8DʓyK46l__MʺFNYlk=77>kͯm~qxwqZ~uÞ3pls@o,u2NswɛD3Tgf&f,?xendstream endobj 332 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5284 >> stream xX XS׶>1$爊V= &PYEdRFe,<"BQQ[kնZZUmj:t}[~[?윽Z cяH$BY "FFKle*RhqtB0g0nH%1a~N`?3ll u ٺn 8?"bǼ3{O {sT5aQ>Ρ!}m{7Sh0[P߰ax, ]câ0%K#EE{^e*w p[.~´^=/3̫;3qe1c8ƍe&22udƝ`2S'fYLg< ƙ,af1Kelf93 qaU\ƚ+f03 gxf3KX0 #I[Rg ~gd/NE06mqGOrex2i`ULVc\9d!旪^z2T7̰18|5F1򙠶~&iK|Jf_8&-%dNM:LŨuBPyo i.GXc")7: ':%Mr?4;ztF.M")^WۄiҴPɫt o} !Iָdyғ}{{xψU& 7%=ڽWu;T?~2ȠınC& ye }H%D=d a6 GXp>Qx(ǁB-ʌd3 #NYhc :'#nǎ}hQZ^{7& LPZ9v ~IH&kI ;&yfT#ufک:HSzf4e&t/m|vBF;{_N.^6$L'6⍓hA5,ZeIjƞDH*T»ς0SY@Py۹K7䞄E$Wj%E1YgqFad&)3D}k+с[Yw`sZg?r(pϻk2cJUDtw4XT0wsads0gHE~qGGc!l"R!KA%O&wyGӎ|W8LEX\)&c6:q2 \ 8^]wn͟={}07fl؛b8ocIs^{iKd?6 :=şCKN9)g[v;T:t}8%bugG9[*[|a)Xc8jA\Jx'(4}JA[|dI@E:!%MZM\0 dī8$>MYfL͂cI{s&Dy, Uk3v%a]RrglKhsr1T}(@nw$w>TT8LȈAWUJ_9 zO05<45`i Bn J50sӒ;51蓯:.r),šrOHOXn^rDω[qz/wvYpH;IW)-qz {S/{$e貅H)]&O %Fz `&9>sHv 0`ڼ |?N$pˤȘ'zuIJ^k14<@@ QM&]PNbb,{1+>AZSJ좬X?^FLKт6-QI\!YQM!vl"P.]ZCPQ=Ggdf  ;SGOHOTJ MEȹ<=:f&JL 4ШSjk`?BOۏ/edTM_NyZwbCM%dK)R]sCDޢgPiLj=XWTR;Oa4TCp6:(52{ D._O+GE"*+`reCG$i1'L($-~Fk 1 7r}b379-k$dx{Kt4HI ۠JA`߅}\/h_6c1Oc [RVRV\޾l1* ;`vݸ+[ϓ?|ti la6Úm ύ[I!V^XץR!17h^u (D FIR)-Y r.0 Фo gAZU@GA7Ȯ}@Ģy\Zސx́΋C^q08cxEpPxTVoZԔR7Q-? 1VOSڱtB;gH}:VUq{ :6aT>Y28g#Mr/Oڄg!qORIeQDhV>CV3=F.B_8* f@%'`˾}b ؔ>w_g!X^{z@:L$$HͣFau}TX)L y=W俨kx(ԛ٤zh+3l=] L3xq3YΙf-u9VfB &{v_oMdSy:Fؓ 1+ZZ$R_)-P]' fO/jŽ^ljm4>M9ݧLK橽,"bB'3a2'3DԿ'706woKq.O<E"\e]quVNFG8.pe1 ^*礼(wEA-ݻb)UĆDR\qou]X³z̦cHPe7Q(+pWN+|Λ69~555~.]"Y2#߰(X?_df1ʄGhS&9l_+kp{0~/ȳxac_`DRNVS’̸]ڔ82m}PT(Orv\'o9Oc#}g:!o(2ŋ#(n)߼;(׷>YAeο08\Z>-7u$=H1[XOT_Bxdd"3 e}]YqHQk aNL>YDqc^i"Dk* BSE' OVhK!3;ddryy6ݎGřwu}Hj((t;MGLwű2#ST򛺧/p5Nd{39$UtտYׁ+1Ƀ4NLzH* x !m52 !Qa R:ϱ=`hXtŹ`r+-wi >9M,o\hLw(O~g%uHяj7 gwD;5'-RރZФ')|D}/f`:@Lvm& mf38jM<SRtŤ8LѧSO/ƅ5:=[˨8_!e~D d\*)@&ׅei4|;ܜ%yԅsLN]\l+fni;dg+ X 8-.уB.pU^msRV \R~;hn[vlk+-ɡp.z()}"!pyX)C2>ۃAG{HGijEw| VtL~: 8s%QFWWhV| Z%i7IΡ p@Q){Sa򦆿Qү?mGZ~FB6yu=U'Z*NtdUm'uN*% &щIclv s#E=|4J~"n!ޡc) vZySi2A9+$kƓwq0:|'¾'3jj/|_q7.%pphe'mV4 zspp&:d ةkT5Cyo:_C_E[NdaF= i~G#DN$ !xgw'S)3Q~/4(1ȜPq.kķHKTlݐF3ocINS2vByT_zfw1d𶕅(; U6=f㜯qN/Cj7dV@bHg@ yaR\SCс3-G/SШM _mD~cI[/J^"p)"LDvu2 zU!Τ5M0p8ƄU|j-r)5Yd¾|`CQR5pP@+]&endstream endobj 333 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8288 >> stream xzx׶a {bSM1`c0ޫ\dI[-\4j(!@ @ܜqs;#A `{ZGQ]P"Hbgvd? Бh=гށcVwZ{}",81? 2kgHQ6f͚1fĉlyyl]Cvz76ݼ=B"mF0{„~kfGGPYiwM?BC6Θ99 wg="nQc{5.z'M2u5ZE͢PPj 5FSzj$H6PjeK6Sv8ʉZDP j"DG-P˩ jNS3(j&eEYSoSj %b)8*bxʛFuzRIՋQ?՛C-ޠR7)OSoԢ)*ՕRznv('uJה-\-JfH}fsn~У{+z e޻z37zcW7_>o`KgֺtVklkT90w޹ɹv4BzfMqВAc/apགྷ=e萡ú ;fxfĿGJˎ 0F~^ĿձMSeB,h*v 5#jjTz1Ү yZ]!dmtx.TA.&5(7/ZRE ~`c$|3z."b~ Je Ԅۚ cfR8A&XYNR\A;'r*m;y_lE<"+Ν+v31%(*X,oCۊ+4Fz*6A-Y&[ ))'^dLY8# 2l^sr ZX6Im-hsTŗIrUB123ccEFF .ԣB{QAyjz2R+z(BM@V=5RnDž>zOq|鳒+`=Xh3[9Wm4egbt$uQe"#ZE6cl|D7ż "v=}ߎAר/wagdG?gh-}?ڽnO [lW%B_='HSȥ@iNRʣx=%Gֆ46!٤2em>|eϬkӶz)J[vl 3vL0ڟUyl )jQf2Dp+% 8آL,d?S%6vѨ9IR-B%xPUo"2+x{6\9>R.Ca+QHZ 3ìD,DBB<=1,XQϫ]Fex҉獨NANe⎾( <s3?&-CEi cH)1ͅx(S& D-2Ĝߺh3xbXyONRS 'յ5ۧ&Dpj$Vk'G/hIn1GL_&MI*_{`4Ïk"Ӝ]3ΐMA9/}CqCDµў(,)"41!Yl}l)7PɄ|eexIL~(3ۃLYP.4j*=$"Rґi4bN ¢{ݾkwbԫ. cY_ma !Qx_-Iʄ4`rAWBfDqF~wH/]wMj Lџ{IWXJ WAHiǕxqMxHN,c \ꘄ] L!̲;%>{veE3J~ۈfE?\Dh.?ExZ*Q3QɄu4_9q~Ϲki;RxR̙E`lcZ5Nof^r|oz&־ƳvʜF)*Aq]E@d@Kmٗh^JOw^,ƃd)M=xl?F*EM$Is,Ҥ̣RӖ_/Hj13'W&6G*k*wPaȖkM7/7>D̏E_e.h0b g~ QPùV+WH&(! Rm$oQ^% '5 Xb<Ȅ mf1Aӟ7}Ɛ9ڇY%]Hv/vГv [uڏUԖ@S]ϞA]T6cTvU[,$ͻ; PCr|.f]rYμ Uq]ӱj TԴ$dJc$>/@zBZr.d.MW-j7ul΅\F/zUZy^q&!Hovٷss 0V:.ƖWWxA|f`}1IFm3`>3ˠl>Rʥo"pSuX8Q-?ʎݵiGd5hI0F h_cQ!֚_P$B!&914 GMh.|f9\pvVN 0{G%z dZQ@ ѦUUUU9"W2yE9|A i{݂@N;xl6o'_U!bռ)ِi Z3h6ǠTe@8+*=Pr(yKvA7rI-ZP_hRQwƪ81EUڣd!ΘmHmn)ȻLSTB֜YKYUӖYyK~kTB hs*ZG)O% u >: &z L:A>"vL5~/ݠ{%2"y`_*Alחb~zV_:)4CJ[5C;#4*uVX*S XWՃ4ǜH U\k^rhTg+AJM p7P^_&y4z8r|!2dna߼QKLcȪNeZ.rsa 4;t2ƽ\j " EueK$DOMh:֤N鉗n,44J;ጤ&6vXZi:oH^OMߤi5/g :):?"1CoU]6;W /&78|)D6g|_ڈDI|"R eMTJ$j !$Y,9/F'baRf(&lr@F~mYRtelhb*m\GkksPE XOIlbZJ6N&9Ptef/@Ͽ*'V$Mh mLp`2i gU&\F1PL~3霘b2-~’)Cqlh"{D!CDJ8W`\נRZSfIϐiIڰez"؈d&c[bGDt1xCKH4mmBH~L N-DM2"$:w%fa4&ytPKV*%KU% ).(*h2nY*eJbkvntw?齥{$Jc"edjRl%Oעި7'nT&T$Cd<' PQS|#gw%R\--5DŽiOL5Fۣgi5UI *0L]`s)hj-e{{6f =G'͕kߔr>ac{x(Im_b=Y2>hLA cVCCd'!E*V|`'PgPV&K ^_Ȍc&-@9ҳ5z[W*H&fbdwUaa~u%Ue )*_|./Su|WaƎIբi1r秱s[hf=Cj MVJ q.-+%=yؖbF7i{}GI'c R9: f:pOޣ}t6 6/K24f6~@8gِ{ssd}ǚ}1I IDmpiXh@`YhUmiEGq#[Pz}5*_(tYD*GEEoi<~s9>A8"L1|.4 h2"5+5tioy$?>v2ERHC6(=KkR 7*M\{(XPG+aAH;ߞuL pU (b-V%B40|}#T]MG浾}W+ LXXEhj"3_@܆0>6;U *6cg[5qP-i< 1Q?$~OL+PH&HW)f3b|-~_C`Aًya+[o ydϯoSC8XSn7 AThmPir LK_:sPn( 6֤ ufhOV=a_i+E]Qߦy:\_଺ćMLR%㱝2+<u*XPaJB6)/ { q^xHZ+I)*MINHpן54>`^oM*&I=vxHUDPϪ/L1;ޚr MNJ$FBż ;xZ;M 'ӧ/5),۱m 8$ˀlUF&YB_͆GDH H%$C -H ׈F5;;fO؂()iIl$DFC@ŸHKt|Edu~q??Wv3c] ^TksQB\|;0l&d5$uY~wgR43gAS.\8@]?rDH]Dh^񿲚d f/Y(ٷ#ɹfQ_hXt/@ ĦCBn,2 PH.L+F(<|TBNbm,CXuZf\-P=CvHKݚeUe~qjt/&6 Q#[fha41{V mj,QNܦ!6{gWwEHM91QYIUR*~;x; [rsSt׾>Qz ~x57r7!(EFoFDF@T HCDIb!Bs/h_le!(84߿,`К5D܆*+JlXfz-A#~ rJx0|郜#jZU +.ȫ;fLI1#gB ACq;Rp!/9_z6ian.KKih!V"p6il: 2F#.~!B:L"PyB40Cl_wj" ̓k!Ф Ir򴤴DKִrQU5l;w$,eENJX}gl8my?gpjfeeb޶Ù ZHS&)8߶8!j넬taӏgEAx['(릘_>fʜ` ,y_)LLۆE\ >t puD Q W.\/ұ:tHF/`AC2bs,)n41j`rЄs=#IYNV1%2~ +Tk M(Z/OQt)EJ4 (ˣ`{Iu Uh,9ua=ґ6BpwMD Jr?htkW[,ymr_|U^/U.?F"FS 3rC$o-eV2nQp\xmL1p= l  BSL;jt3*BN] P38#BRyC1Cʖ.6I DDwzYPDS%5}^lg/jџz$}WћU@lP,v ]K!"5Q.x2V}DVr20I-mt$4pEpUqZB/?NA`W쭉( Lt~Y8q=|3xKID}sK2x 꿼Rţ;e ~\-,.486%DOz#&/2~ UDnIw!WIvA[܄ol}<nL~Fج FJvF'Pͅc^ ӗ#Z%jT܉cpu SSYP*k*ijVT*|18blH]M6w> stream x=Q}LSw}Ҿ'US{9&86dQ&6Е B)*"} / VLʰ ``B\2g#9MƲl lUs=ɽCSaML”ץZz5L(g`2P{2 -<Ѵla-/3ڄx]3Qر}{dff48.YtChUJNIZSuZ;!QیaCZk {-f5ڒ^Lf -zLQZmӖ(5*ʧ *ʢؐ3*"}/h؏$*V_&O "՜lmbLn0_n+7T;."WѫCĎ` `ȒTA:J2v٨H=EUz Y^̻AϓŌOl1 wb&^3Tɵ9N-xw pl*9*ŌDkPV/b4_;+\[3wrbtkpq\UK$y*='xq̹xU?u.4^2lz0qkiSVOD>Ux$ 8]v9O=2*0" [6iH?#<7;Ņ̾jK.p0übm.QIsQSmQ#j7Fb**յRĢ8M+endstream endobj 335 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6402 >> stream xxyXSD+驠ֹJڊy8"$2Cd0Q10(ZjUk+-_kZ>tv~?< gg][@ h妭c?}.0JL'HcP[h۔P M\'jty66ֳϝkce5jkkyge3,jR :;0鳬Xm 9a:0 jpWIP9jj.ZKS "j#6SRєHE;KKS&Z0NP("$}Ez4ʈ/eF[!^F6%_ Ѡb,"w8?B}D zR֫Nw9j8k@tN!8?9#p\ծ4, 6K`-"S|KEf|yv <CSN2XKI}JS UdƁm~\P1Ȟk--+%p#e~ص$+ZԪ7Gt_NJycndupmӦ7BɣDi+ Ü]_F-鯤ůP?~Y>lnbad1"GeVUg~fČWt\ȗEL}G13o3p4/H`Ⱥsyp T>Q~iK lO9`0 !;rBz=0zO ?آ VmE2y\\mp9^N$2,u8=X {ծÂ+Ȗ#/A/jNN סYa(K"Uh>/ٗX'xڌA@V *. O`6㝍Duw.RibAQLKP] YTOvz5<9,O^`.]fiy뫨g)ZΏbi<ـYrg~!54UP MR p 4_3a2pu2iEtSܸѫm=ڂ$堆2ƌ< ]xyc*"礴\SӚ8Kc]<Đ_#Z& x" #qYh䵞o/N8p54 Є^[ftB4;oD(4Dgˁp.{H?ݿXC%!E2<, +B@",at@$583~ ~`6Zg0K U0S|OQhUwhj0ta#жf M{+K* PC0X-պp+{m  CM&ݾl7$.ᦴ;mh¾,o 眡|grP`Dh0G69_\jޠ 9"ua'Ɗ{jSGJf2ksGp|Uz0q)t$fեFңTf}ڿ.>O[M>wmqMUmаy~NxɇRs#R)RS5nCgާ(Z*ȿ%Ie(DϿod^e6_z=](A+/x)wA i2/Z܁M81p=݄Njyx꿤z3oƋ|]Bmcn +2Z2oW8R[~2&$1D񷚞Hǵ4~I|Ws!hbN£bn~Gz#z|m*"-POX>ƨ*i#2pBqy4? i&4Jll!…)"T2Mehr^I ^M/ܳfujGP̗2fq∳p 0WrrUȖ<``dUݴ\wɉ[ +e8 `En53aU^M@iQA$*SSel l˪V(!W+ NC_tyEf&%!`zAET{6d?4v.5pޛʫj, unƵu6ٮ? 2Yr$mxo8"^a\AlI}~!,) K उY$LZLCy*Cn2Gj2!`((Res"Y,%,}h@Ra{`ISGwش$C4Q ܒ.3|diQȴQz_[pZ{#7H?bݫ];)Tl=%D.M=!GڡջţuW`lV;/))KiثT7uycċ9SJ|42G6K;d!;rn LBŒ?AOYfg>RO+xVg,}Xq J1ā噉  gР@QC6. W a:YYon+0"X &EޮE2;脸e˞'LU%,3PSFpT Uv0kgg`GWi*ve%C!hk.}}kE,?/11&g5ZbZUuCDjjLO"!CLh]tAFAFVؾCVg3,"ʼ \#)b -j=yv%J*^J~ޕ-A 9Dxn@74dˆd)݀F(kЋsWzViDdUڒx)B۪˧EF"Q#^UEƆ2%~ VY`!Ҧ( Z(P_XWo VOBSQ.wj>yܹJΌt-:8Vg6Yo?}ʻsS! . *+֏9osWg\գQ99 *Wr{#/8% t;ZA}AR:=kP&? "9|C$ËLu-hq"(%XfQ˗Gp 1 #DCm҈Aÿ9FSlLo] tb/Ӑ>WXA&ؕ&Qʢ8I] ( =ܦ8GXbr31z(rȿ 6jx!&djEP*TU(*`K pl;5 Cvz2tTKb:#EJZW)R IWCKn/nr^czh֜r!ʚ 6MN52B²oaz]|H'yR` w*ko7Ϗ.C!h9~V$y5DŽHImҡ5MQ ̓WoDTH3J +d)2grJ*=nkk٫WD#/Snܙ϶!34SwbOlD'\ Y?r'էN?r4MrA"OwM \t"pB4<3Cu9 ~m~n2nUf[򠜰S;QpihudN!~Ҡ mFW^O skV_A_]^5V|-X~S8oy̥;hɩ L^OV9nmZ/w$E1'u5^9v̧VZ|ѹrFqEլIhԚ,ii xq~4L"oMFntPcVwZO2e!/픸hCJsePTEF8xWEmRZPZ[[YYKɺM9m4Pv/ fٰHDz Т4JHas 0}'jK{%iN2((I%(xq%(][ !k+K'CeDTjyF}ASNEv9/i,Fk,TLұӯ_ɾ|]Snp-8$l&v@ KU92x&b3 >' tv Ѫ_F1漧5:yn 5K&v޷G'-յ_o ~-V<4$\)X`{^#/0@gZMpx=QLY|(MFFo}qO^Ymӛo\uvd*c"I`ɹ#9CS6 %2_2I$3,B>N$Ly2&poh֜r֮~[HM߄YȆϰ@g|h9a֠C:aGQѰ;k~/.K__qeʭ{|8m uKgt3矛;#ّvG.7%DG喀EM|2f1v.<:gaf+ZV-mYWC9Z6:B;VmP~!K(lmr, &9#5#{U~\ԜRj]Ϗף"bz]Fubo#*nuqjunkwyS^Jhq\RHpZ= ߜ}WHRG|vD̕M3}HC wB i0 >p}E\`e u,?4yG׆0ot ASD6n=z87 46OVJG SѳkN+ܔ@f|J+*.lkG?@@]R9+mC*4SZ!pD.'J5V6]D<@vDj{l1DB>eTaGx-xZG Z{PvwA7Xr盽?vu2X}rpnj`o|t?.cW;L)yxi9 l$نY[@7^z7? 9?h.._-h=lMm̷? iMymUU>IJP)/ϴёlZmoþ2|j)~Ӣ ) 1IHu2L@#AL@KrSzޯ>uٙS>WQ/֞tNٝ Ly-=!$U2T*H`2YsGE[LV8,/#iJkT?yuH=z;ʍYѣqz޵L:n QaN[ewA;ylك_S=tdF'* Wb>HgBpy ڨEc{O>ۣGh/F=.>A뉯yڣLEF(K$> stream xcd`ab`ddds 4H3a!G*kc7s7B߳O``ad+ns/,L(QHT04Q020TpM-LNSM,HM,rr3SK*4l2JJ s4u3K2RSRSJsS%E )Ey@vfq6І Ff.&FFU?:~]|3O2W 3L7yJ<9u*[:~;sInd}EsiSnO|o$ޒ$'v5usTTOo.]2=^jFIS}yV۔t^tM *9r<Kˁ9Θ5g~~y?헰ξk<<@4endstream endobj 337 0 obj << /Filter /FlateDecode /Length 335 >> stream x432S0P0U52VP03QH1230!U`adT02L,ɥPRTʥTɥTƥ`ȥ 45KM V8qy(-\R«PPPOB> {=H_ܫe/O/)$UeͺaWEKK~o_?@qlu{7ݭn{eCoLn82I@ÿջ:Dnvwb˶KyIx40 cͣ#6m#B endstream endobj 338 0 obj << /Filter /FlateDecode /Length 163 >> stream x]O10 @U!$B2D! }I쯗+(n H0hYhqgy⤼M2TB4^!#(֘N?i fw˨ꆲPR48n.!47I,|J eSendstream endobj 339 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2025 >> stream xU TS!(޴U8VZW6b$`HH`3F` V|ѩ3ZtvXYgN׳skyxܜ{] % $<1%5uz\v0^"L~$AIr8DH!B2S|ҴV+#Ǜ~ H Աw"#$(`9"?aܸg]ؔ x1q<-B,&`{/,5eQi$YȶV`P>*0r×צtZ^@i{}`zi85I_QE#.e-9u/0WǮ^T^qM޲#-GhFoA ``牔sK2# E@8126r-\^zʕ뷎ԃ[,7+KY\8oenBKfpixaЊ-P9~~*zJ SX;_;ܸ RV( kivQr9mi Iz 9^Fhrvd %aawtIQց_"=L00WwInho^=(ai>xSD*rV֣;QvGLvˋxɯ yPoUu89tvV;A08{W'JH)/%]N퀮-L8$olyiPLON~Iy)YAV̤훟. OkC+Αa30TpGй ];*v>%ō0[[A[ \^NqR)n! +k!ͦ1d[V@wszF,؞Rmb}o0?M q;5 F`u id22a&f"F#.48藜 `.sp%n<$Ɉ)H2$dqz!mE%b޼z6̇0KlusW t^eB%Ȍoq<<qr?3(5~ *qq o}g/Ӗ4fw436ΑEt~S]:#nZ \0 AߐYsC9P(J/*ݘgcg/m&cӯEQ=^bCJh&IωhTWhcT3{ `}>b mA'zpL 3ѽSifMZ'[tNd|\9/kCĉ1SNqOC~lnuv}{:8{GI"LdK-`&3ĊKwCBo'{:wKCnπ' _e7 zGw1Jadl)Sm66on=miEs7ϻu.y!N*&bnh}E{V;*qn&Z`Oy> stream x\s7rW!Ut2ǃo@o:,>|\\{"wuڥUјA3Xg;I*Cד'=yKN.G}$_O?7'}->ȓWoQWq$/W7be? FuW`1tMޙn AXޮN\[xnuH=`MƞB#{ `BwV~DvT9x ںt;W0X~^ NBP]y໅7|!/K©O_:|K{, tLh ݽkYZ^={l h.@vlnbGQ1CQ>o]z[<੅Y1 .-ɻ@[%.Ts'BZ[AK^m$`bP*6vK ިד&>u1J|AyJIn\/nPak]:ny`f=LtoD}^oAJEmσ7nl lb?as_$K3&m識*@dl|n1M:)cBZ.(?~AA)]ky?: [>*`@d0K;k4'a0l/[.3y J4ZjacB%6! ,4`4\>=Zy~GDM Op ihV]/ ~i竎zZ>[pw'OnPkWz&?:6|b6. eݷ+2(.v vcu֗ ^Xo$)`WGJfiJ6NJ ڷ i874 z=2D9$ԍKR;Jdit)I@vȑ r` ^[<8JP-nhtЈL]/gdm9UroH&,xU`fV)ǥ|??Tg”bK1a#^zsZd_"`|NJ`}GcEfzH,+&"F-12Q6q0i3ǩ(/V{Zmq32)n3R Rzx!wo h|Shh$lŷȏY2}j: O *@~_6K5B|Mw9Dٞ΢Mpk2oҮA[Bf8;7)5pQ+$ )Q3rLR$^6h*˻@'S[gbʍu~ŸecO)SZpϛ>Y|  N@Wòrv 紖5fݑن8cfv1 4G$9{1(Nt_@Tz1ׯ'ow#PzkأHdТ;Zlps xMTl"HK  Sj eCu?VHj!e}}vj^!p<@[ขZU`^6G q1?MwtBu1oMRk$ˉF\@S๙NA,r-iaRA򽣰`8jR9 ݴjd]M.6~&]ìq2-E**_|tP@a lCcZ1osF_JT!>Qi?^Q^|;tlx&\46vNS ѧbf*w.2Y2' #nnnsZg.9^ nl(ujc³ǟPJm?.k1q*vg3vHEX2.H"7FLuYoc}Db*.b&-15*ĤEhOyW]q:S\4NANT;*M2L Y¦0a>}1]O;|DM E,#Dbi\=DYF %j䦘i ˦Q,"M1itKGߑoA xUU:v$tBqs Z⒆# = #8a#FgOzcXϫ zY)Bt@G.O>qUMb3 ,4K^6#\QgG g%ޢ쩘|}SQ @v"s6*ǚL?N1Mb%(Jf 6zĿn˫$ahm*Mi"9sC7iIKYVt90\}N[88J_w@>a W]: ţ>Ӑ2"a#9{Q0⚕XD\yq@@hI WΊHN~<)U-,sʬ*5at]"Y% єNIR"~ܤӄ^*d<.@i]vWXI>eF d%Ywukru6?q1Uke|T0s(Ni&88[5YR獞:}[e'_]GRV®j}oA( <ٯD@l9JJV~B@&ؐmdX*'[9_jMce'j;j[m #ie.dic]|{,OyZ:-^~bsWc]7˲Kۏ֧g3 W)!'T{:i Rm}$U67ڝ=O59'{j `LU|BACZ'"u8&,0#O!C8Пt+(+|v(L }"/&{ƣ*Yqtv>TF/8ΐb}݈YMLfWfExX[~y ?veNЃۜ{ Ǣ (tt*Bi! JS೩_ēܭ/SĪ)V9K/f~LO׹4OnUUx<~VXgODKB{Zz>[/̨2P.-y Ū.N+jɜf} 3BhfrY(tvwegpz(el$tlg6ԙ~go ٶyr"XqG"1ȎZ{Ekb`-,4+Cl >\%h!zQDVՎ(@`  RŬRu/;Ee 2yvm~ItqjC?M"u}Ʉ_,@ݗ" h!zX=Aƀ9fGa^+=Rh ^yH\u\fpPXΏ4'&FˌƗxqK(XR%ojjLpr F4 ׈Ἵߺ'Oo[dIczU~;λL! MT#žUʱ+)!wpx*nT&_+c )fP'_r磊;_ML6F7b@lVy_ ێj"צ=51]jGk*V.?{ov P'TnYVR^m)?.~d=[vd[׎ϋ<|];Rj-ߜ*]ǰFﶽ=\ӟ TQ-; 7XYoq=u6JChle#6t`RAtKB$}g]g#6Z=| *~]+-*2BC/ٝe?eS-7Ek-V"Z(N_( 6UBwyzU8)ƷA3.׷6 g7tt&GJLSSA!Q=C ny> OKt"Y`ίr˘%[vJr7LCs͋PIL2I5J@ S^$/gN|5=x>ph8kܴĶ?9Qz,[3sN> stream x[YoG~o7i+ }AI%Q);Hr -䰧﫪nV>͞ۓ,u|9{z#IFkt/*g^ g{i^E3^7B6ms4_(G,Bh%v>腳͟8ET"E;_ae R L"ZXhi^BXo͊H6,+ *º&N`_(Zfnbk@j `1/WY@ [mao֧i|8p&;ܞ/qc|)FǁH5~̓=Љ r0͋5,aD05I ҉hQ#[7>vBMqمvFҴ8l#ͺ(R|5?L,B;fJD')nٽ4 c(h|B_&qm;|֋NJᚋN҂g-94 |mT|ο2YN>WcDCFg xZb)OUL|UTYt4f(ApJ5iHܦY>0 RFh@xj]%ucRZyy%mVxe722:a:ߣo˴gx\³-a_DSs]OU1~el*I `"ÚFgM'F<\u$DМyزʼnpƀ' i @|n R!).dvQmthɅmsxʉ5< xjja2TtC٬ `*BlPVX}2/͆(64NspQDpl;qξ#QhP7)C2 !01>_!Lv\JHhCI$ Ve A c>iۉc<2(Z!*!; BdNe[F]aY>|-_5FMZBA19OSmʤyZA;EO i=.)f*T6KcY &a^Z庵1#$d+UA%)MJeV0f".h5l` u"CgW&-(U5 㱲A0 Hp; 쐨a)Ynp(~_I6)50clJUW"uKi.7UM0Q fO壐Po`4j'UM<`T'#8 _#]J;%kYoz}ݢ)ӛL*"d䱹-17dtx`oTQ8>\ oRi,V{6 5K( D ԪC=Gɐ+1X*}zŢߥ %\ۃsf=6ڙU!8Zہ}T6g ok߰/嵖 x1Zy],ǣ{hkCNGVVpoؐtxsa k:?:FųKDZWVG6@-1qĄ*mG_C8́+ {R[tI1}*[a'"l5B{aC7HQ Z G:R8JKm]R ĝTs!&3WGE_S|v5NV*p^u `\퀦cաsg-!ힽǫ~[q̬$2vyOz(Rw}dqm8\yI[x?ї689Rd?)6W@X?aلNFka՛:|=:<)u*W:M*AYA1/e汴}I-w*ᔶ>mo XI) xȮ 1 `}TP3Jg% 2%2 \ b|B(N Ԑ ցkL]nSG]E er1=ңkjF+enjR &ώ0y, !pWӆfē2ZY?Ҍ`3M}SX &172xfUHֱxlGaeN0A(^,[u5Fsal5-[XKڪW˞3o?$ql%9IW%O>B6k?[3mbrVB_),wBu"9vU t/*2oTW:"zl,|6b4SݲCB1^0=鶤y[E.c:P^^IM*>Y~ne0@C{ٟ&Tm#lS<ݤxuv;8zofӒ7x[䥹+H7h?ulAߝZ`ޛO3Y:0vS TewlJr:2{` e} -l9%ҋͷN#U0K~g2D[]QYuK8˿Rwj3mqX VDi4&ϟeIn~Z]VM~Q f7Hөp]ULTjxp[.² 7@I< t;绮p:ubxݟ|7iW]c;t#_O ߴpRqAd!/O- >R2=̪+~.cLi'o)o>n%7eDJ;RcIi?X5f.cX uԝ=c_ MKx8c,D0-,Zx;s@5"{?endstream endobj 342 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5651 >> stream xYy|վ*h zYE@JMҦi'ߤiM.-*((|]w&N{朗|+m33n3bB Z|ҙ?N&Gp ]}c0vdӃTx8d m \iV,59%'vrؙs>Y3f̍})3Q'vy\NJbf\%#v4>51'/vSrr>]PL̞&%ϛXEjNJD<1!e鞜qX I.&$1= .e/YT"N{Y^+V%I].}}F>}AX@L% iVb1xA,&fKS+lb1XN %&фX0kJ$j#ffo<(MQQhhǴ5rwvGKrW݋F6{{gw#1 1$TZF3Is64VIlT4L 5n=kmRrW$A"/?Uٲ[%j(j;mVhV9Q ^n19zgZ Qh("=h oDEsZ7'O?y6/ɏBdfɭ3n5)vEVKҥf\ dwZo[oKޑFYz2ڶCw) WCKedV `OҜkV`*;Z uu!* ( 5@e cR  *i=F!_:Ϯgo/ WOFV{x/Ez`(GfOy,P9!gDo_}|4?﮿x(Dqmס-'s}M@5l[+J_G^Idth<W<1[̺F 0fWO?;>Ј$zoި,z0VOG0 sϡyы_?ĥ<ɱкQ:xll%.9g76~+g@j;Fhf&*ܬ-=^|n44_^UM*Pb&iT~"NY[rD6C0pI<#"F)H&EK =j)?{ٓyϯŕ|LF9]<DPlw Xң 0zI`~ |G\GRI RFO5{)k/+D2:. _sNm/eYĺ8fq"4ֻ{tLL %P\]LաEKݿz<~`K%| 2E?(prYJP > J}EucY[bt{b$JwrWE?!0>=}' zύ'L0n=U~l]I5rR՘^֛`?"ysy:b.LnʼnP!$|ʭ^*ˑZWPcQafGSheq.`3¤A% ): bJAuI" ?zͺڂf 74D/%?'PL/]Yd XFWF=DLyC$Ǣ*ϐ=ӿuu]B)bAOgFk|IE#\ј)`W;[*{11wBa(V Un|gHb! mj5?2BRɯ_s ڠ :E.l=U\@-Qhh ֹֆm?lSO 9_l/EB^麀ƀ2&".)e;;t=-|8G%e#;n?nԅ)WSoY5e˴{Y y2h_g3M/? b2b#xV"2T[3nlDp h.$vzuMiL'A iPu fUX uFb%µAd=P(tnдBN)S)ë́*Nw;_ʏޤ>ViU %'^Vu5`}> A_n zoD\n3&3fm2fmkhuj+O2tx=Uc ӷn2\}Ʋ~T+V 21g/.B1K,/ݐժM-#Gh1iV]] =imW#rmظw@n`kFc*;3=}y9`h"^* 뗅\8XwwY%f KzzY[e |a m>6&U~ ʃ.g5jO^EnVήn?n؁U6L/޶n qյңr žX j{&BzJlsŸn>Q[uV#&j]2wG֝A#Q GͻU*CCzwGc{<.%aGt_=xcGաt0ST ,8.NcActԞ;@iZ._~I58?ψ_i[&e%Y)eSdy d~Ɔ@\agVoH_/F}!7-YsM&׾?ʏ׿.w]FժSAf\VzhkP3 [3?Z$ hUcsgƜStL{ߠ/V&=UC徊S4M/^%{z)NG"?JV_G\F^c,t5 )C#,G htjҥ[kVV`:U/)18;mj tV\؛QPՒ߫=ÂwsuMl *^nw,+W\FVξ vLuPJ"LFU 2= =0u1tէ_`G_MVVZ܍`Oa(A ڋ0Y!)$:LB *@{z' '/yCfj!>O;S_y HSc N/@sWrnMxu?Qh C|dpx(t={ Z9 ?>|FDZDU_AO5.Q=NW~L/ܯ9ڪ>rkx eRY [:(9/ZE-dtM\Ѷd0-nwڛ5dA99yi 9]zx4{?3p&D'1*BPhK|Q!_9!owMݴ6[vn'"`\$ů}İJϰS(g(H0OIӏ~xaNd$H4 {~d2G!OOP |s>Jֈi+r=3Pz EU1Emd&FGf 96-f3?iʀER.hp(<[;X |j\RwpMzB'ΆtK~1|B~һ|4e[mϣ(DVmHRS 2 %Y5}g~ AG;s I4]osA/1az?onJ^c!W l-gPia f'eDO8K 4VI7xI•#Ѹ ]6HP]wAaݏ67 UTl,8.lpEuZi4(2jzt0'F1V<+q{Z҆N _\36rZX^bȷѬMib[0"FY~k;Kq T4tpQv,7 U9OLUܕ$mi`zUpk eLLҸz)nqK32r+[0 |@7V95CGEkD ,A c4*F^eB-z*r}n2*.. x *ZO R’2=T=ṙ(+T7Zc(WJ2 %#yk3uPP*t8ʼRN*@QN>O1r횲 MrXx8?U^f7,`Ť7ʍ{`FX1^JSгh;|9\MqwƇu]6ְp> v5YƏK6P(>_+⨷(x]6l"9 vW1iOWS~c<.F<Ϻʧ$VH~y=֙館:\gQeυgUT۩F0[BFkm> stream xX X纞2793zTujp " $쐅’vjU6KVZj~=wBs}L{ևbߥW>u47Bԇ{Y\%"4@zen`0B@)e^cC^9sxI6k^L4"48ki,<,&X_D{Fɔ^cgdqoL(}c}${#d^aaİ^ %2e1a^||%1q 0R0i,Aoϋ}w7҅w~eheaVlX:jMt̺Wg1j[zc|L|IӦN#WLb$E$N&Vc›XK#%/1@Ml$"ub11XBL!?1XJ,#fBb81/ }~Db1H&܉ b01$/[È|I7"x \3ϯ³nw+eb2PQ5B=軠oY?~)nvn4t?BZyJ7 [C 7Śғh}ovapزa ޣ0}<=_l+sʐܬ@ =ZWd(gΝ2ۄ*Ȋ&Fp4["YtѮQxґzY2w +=;~f`6!7 ?hK"ه*Bdb#o⼂1dE#ʆbѥ#g'|ٵ `ܠA Q825v.y|DU ݏwk&a V`Ol)v8"9MDt8=;n_l;~}C?%3mCߣs Z~RsO_hs= l‹=*sJ$USf8bQISu:M+;'Y!+>p2)ZQ]5sG\"" H%cq4Ճ S^$ۊJZ[F6_=7 +iB+dw!HpwbVvF94%<'x_ VSd;&?%ctsFS㼂6jUFw/^#cB! U٬v@eZMm n4VI{$gGQNc :dbӂ(X`@/xec;ٴZZ(ؼ#ɗWؑ+Ǔࣹ4O|>iIG2%3sP*{(3QmdJHdd:YϺ=:;IJ <!NH7T%8j؀L,x~ .K {B%dn8Up 9sQYho ?7/H`C^xnqBnF08]k y .j$񣲈ZTqOڄr"ga KvڅPIX'jtg6l,-8/xƓŅ:#)= q=.#t;wEuvnn 8~nE@Î ű`ȷxHC`B Tx}Gw93K3uy 4y|?Nu"]8ppmqӕs:V@?Nn?df~35ǭ6,<|q ^ :tx߰+ (E*Y*U$ޠG4߫O5d+aruyHi3 ty4ڂ^ӱ10y\D c'ejK@ ##UH6T;H Wl _9<國AZ}]5YOj +Cv/C+!{?ێaQSWΜڷ?\tv|:gCc˹r%?P3qFɎws1egZq2:ydNYVT7x<\XM[j>{i(1D^7hFa+hhZa,]~vCL+XO^䁽K! 'WP+[θ2͠I̚䢣ni`ՙ]IG +}L84w&2Tn?Y6`;WƱ[!]pl !:=ԶzpڽMKbXQ7 y:DwդRnΎ f#"%zm a; IN JGU15h+5?OC\l^ǎwH`@@PZ?=f*ܳ3ˈ}[ٞR7a1)حjv6lhv*n4\fH,XfZ@0I~σ_Mxa,H^c\ԽS]/d}Or([t-)aFEǪZQ1suŗQ ݦhw>8|U7OKx,~r5w'e3'udB4/̓(W7(_K,6 wxה[=.7|mXiY/WFȂJ =^ J5f}}M ̂w'q_guu^'7P]nGډtr !֟׫P8Rm.TݎɾyAgB':{;o2^YUhЗ&ղcGB~_ k?)m=Q՟ܼvN-au9(W+ZjV@ @ ׏nJbwjojfU??9r߄MΙWp;Cg -WZ]74I> 5ƢT&L4hJa̎pxIdwb}9**9a(pI@1ĩ(5b LD_"xD#H/1@'XJYq+}1h5Z~A=,&,7V-Ң2-Jc E*O|oMW3P'Rp yekJe6ZҌ"e";(۾ qBn!9!ϊ*cQ]e`!3Ͻys C/f=mHM"fJlz#o&lo1 3%t.7or=qC$w㟐:4#>is(!H_(K1%Qes9jLJ7Y+ CL$c?1?pcp(6ҳa x埮]<{}V O9&m$MVQE]vPIGyNqɤ[jeԿ]K©[P/|qt=B _YLޓchQLc{{}ÔV,_qxUFVNTvWxJ$K518⋰*z K ˱k\:y3|-(Sƒ\(O0$W'g>tO]kS-|kȆJcv_K'oUxUnMF\mJb-7}fujEJZbB i q- c@;2UR, )TSYQaI19TA[jIoj,-nB[΀&]ZNFT,6DٵhqX?}چJ7$Hʊn/?~ nO>T,bǎÛ j{t)x|ӏ|9rLl-J!'ao.xq@)G b %NW,2d##e=c};,Y˸9c$HlgsSJ`0 Eendstream endobj 344 0 obj << /Filter /FlateDecode /Length 7309 >> stream x][$U_B2jJ~H`m{wy<\vgysNDd9YY3=^KS]s?_AL ۫Jó7WwW2z(<=haA)Z~}r^^\$SC !U<>ie oa腳ߔ6r>_Bs#wsh͝3/ '"?#h:$?x@[܉O`?KcVgYHl'CЇ|Tg>ah3|p`)a԰Ҵ>j:۲'>쏗װd#;~K}{TҲ__Η]ͭcǯqhR,dZGɔww\*KiUk =N];iyי 07{?!$QbZL)89e}!5HM[ ėHMkI-Z^{'|sI5egJ˺L*II-aL~{yRø/+wɖSؒͤ'rXm|vPvS KA‡5[eAÉ=\zkp0Y T9mkX[[XRM |=_]E),7y͏^l:m7Hic`M"rERF& Z_b ?^- qV"""("=U߬ѥI'O+j?^h"^'w\NOԊJJLD-oϬg85B,l*o(QW:a`~GLcuӨֺ1w8'?ʇ#C&.L,m*mڢMĩ9笓())A[O8zaI6YᲧiqp܆yz$_TK4F6lt3tg *cyDxGm4tʌ4| $f*㞸%q7 ')br!Y[6(''] &=` 6m;vgO0=c HNu\F DA@)uOTl$${L2,a~.;R?19p6G<~Sp&m1%&|n!HPu.yR|ȼʹ/@(|pķLoV?6d"jF8Y9qJ`O2qE-!Fh""L13--"x(œiN{w>"uπ+D@"*kNUѓ81AdVq.RI'^3D"![+Oy` H(vY:^;7-зU[V"e0{ViTxA|f:!=_Eѕxs(Q{E Lîb7H(0lC$a6!/f#O2 UH[~t±ks6q]NFTkqߵ@JWmiPDT͵ cC3死0@eG]#wM?-Ƒmi6jA8M*kf 4hdJ[jlqϚɡ~7g4}\Tx7' \4<:i0p8p~֋6싾ݘ(gr!@w|Bᢹm"92ŭ4b} ` Z7Fu-+LkV|7=Ȗ_ya$ZV%\d] D}0i%N4wR6bԧ .sJtGoş~G}Ήs7\`lYadͬ f>{_qvq}|`d f,ʟ0|TDsN`P`#;8 ~ De AB 6 Fl.|)8$Oyr;aDžs&~CLr c2nm`Lrs3;q^7oRLo".e׼2rfQ0jkФ'`',ޓJ F4SZ؄B3p$_h)t {*$L䀯/{.39䐾f<,xWjUn}3hi]37AkėC:,QY~; 'vuh32:3 4t=Gf=<,=Tr9.cRtͷKmnf0a]  ?$yЖ, ,A #tkǨ&1S?l^*d&I_w\͊eCw5ŔyzD`Cfg4hk mPǽELHUM#&&F\ IOh0n]z-)ݜw6Gbxqbj$ld #x NԖiR30pjt4J}O,6pnd!h 6&Yit(7%뛸tx8p(Xde09Υ{~j?;G?`:X 屾Ȝ6(lnp|W=2@pȬ3@}]+DBV6:~c.͐]\%aܼVl5Njw}ȳqWtLLe|S!ա4O4"ܦ n=zEs Wm>w `Zɧ¥F-Ŋ=ƀNSl\W/*B)1BlZ$Su'ČS YA`(j)m'K",WRζUZMq;D'+`di d]cH Vվ_Xx61ɕ;_36$2H %yvO&rt%K|ƝzDشC[^0ho}UnLC:BNao:-$94͑apH:3&ɱu=$ }LX-sRRb0Rk"[WkEKpLB%=inz LA&yUYw 0rJcNW4#+ ;+r֚+7$|$\%=+y`HpKxaC#(MSGjfK'!qlPNUSzK] . Ț]]X`+=dt385NqެnG'J@vMiDibfema,MI4ypJ(4Z7@N5a9s_;G`7Ty#S4_;nz)A#9:ZF9lOV#XUȺ(sWKtWN8лrMzAgg bK3J81ƈ ^&tq f:Lᚥ\LcY.g3KYh\4xa792G6Z=T6.ib` _Lj:"xI&v/`fϊ%4̙W5.3HJ'b]u b)Ph{\>mg1GΡOT4IpX!`]πr9jsXiCI''|ۋ6t rb)"c0?ohګ gEQ4yZ?>ae `J|˄4Rs~,W08Ž7I_F L>Nr&֨vqԘt"]WF@(9_klj"m<cbW+B0omzPw윽!Wk@д^.74} dٍ^E4i߲B14Gǐ]E& ZZ.,!@J=Ɖ68M0Z':NҪR،JݏZ EErq ~Vm۽]ak-q]ZKY t@X@#F-v8<>X9#O*A")0wxlf9DgBTN?FT}m Wj k嶜]Փ 2`xn;."`=OPi=ɜ5+3ނgez^Nl 9h0G#3:oA(xcMH.5}A8VS|JWh3`4ZbӸn<XWIuxE]uDy$p6li_] CNj%3ш_LGaNƪI%zIK/ FsjԵ%|Ф֗аjf6_jc@Bz_/GewS t Awd. gPl'D\L3r[u:Dĝ;'UH~=zn&Sjw_Ep\/5Lp,^ɀ.(1{RlRpl<(AANݏċ~\_#( Ӛ;;:^hV %HSњb6\!=` lA> uG)qjH mL:8C+黂 4hJ>IpїmbmuwG,.1֏x`A\*mه.16MjQ:^&(\/3Y(\;B[U<ݲtkW+MYܔ[F|֟+OX֛m$v٤F> Ц>VӼC+Hr~zXV'ڕ wyXq2K>-꺏q@Z< }q"-M9 ~ܞ7*:{]^eyHB9 /;p7bIj tUT;^wtS>|r41 =Qσ.N'wjw1pQm VcS{;Oe,{qKy&۴R_T|D`xДƺD5pQvzE gTtz/ JnLFk[:/an+K! j11M'43~/M[6`Ij`cO6(j1=Vz]V *[}/0$ӶϺj+;(=kPڦ nz>Fϣ측M/ڍHqKjl10dR˲7/*l^;Ɛ:'0qO Y8~#Oda3p͑`H^rDT&?ƐU0Ŝa`Ji0cn"Г] Kd0iNe6ye,]~. oTp69k{ }> dt);E $a5T=w8KlsǒcߐfXچ&trw&fd0>J0"[𣰘BG %,:JmdJD%?Nat ŴC2^͜qB J`;5I~HSH|yьBZ-tfJ@XK:$Y u Th?VQMxXz\Exb0V^}|`Ni%BqK*ݒL_^quvWޯ=Uћv p7׳cfQ|#+|( 1ZHPT'Om뤯δ}cWNo-}gg-"})B`*W$L-ȇdԁiusw73Ѷ%>tgk 0*SP}:b q2;As]U-90xN PafW۶OBendstream endobj 345 0 obj << /Filter /FlateDecode /Length 7593 >> stream x]KGr6|+d`0 r+ 6|>0cZQvGdfUE䣺{fHHZ=Yw|LLL?^??h#qѻG2\cΤţSy+'Gܽ8ߋI !Uܽ99=g =1:`|vBva&vY?Ӈ[1Yp 8ƨͣ`K"̣B28Z6LҘ8C~ are{+eR+, [SRjwhL.9aO}~rG >|8$:c+J%5ޛqq*'7um1.?,IYPOpY>eQ2wR9=#\LȴT43q*pAipE _+YL@.9?xWiλ\>7|]_eFP@-awYuqٱ{.G>(7O"G n2Q(=ޯAJA<paleQFG}d}Z^Gzdy9ϕ//a.?Y:7b-䔿_vOSAmvd1}1xIy†`FȔtD:AFݟvi^8 Yڠ%_ ]r2Jm'm|a\Iwq ȒojҩʱyN_|J 8. +G6x6(bcpBedv M'c 'ꎈ:]z=qKO1AjnDQ@# G=gdćH ͬ< B/- l%SΔ2RlRBIzi' gfRZ*$dr|Ql#rZpS@ 4XI"Bd3h"l%iTxQ)_}uOhH*ma| JJ8LSS59v˶զ6UMRx6iMC"Qnyp,̈́J[Xf)զϺQ+3V3풷AYvmÛ?jOT= Ů ޠ33.&54[$ZBHxDBE > y3("n+j|#&*?˜Yad(VNJ(hCPKt*sgL7!L”ByHaL$IT m!k}O\F]9$5..&8E]E؆E{Wc}B&k^<ߞk&gΜ6{;30&IeS傜F4όCFmJЕ,P %<|†LuY,vkC'xÒ?f˙hPR \2 <;ʸyk)Ħ|K?&]eͰ?֥@G]bTa1# D(~Ye޺ -X-/YTKvt#?XHSӝ^S 7 S8D%lN }!X|B+dMTJS'&.N^:ޑD`|7j݀WҐBV*-$1~s_YV|cLm =իlPtMZe%%в}!!Sx} l) @E""$(bΔD]hlgKȽsui*ب욝^"OEkC8B_ (:T /f/𒚖4s:؇&!ɗDL??Q}^><*l^W,4 g: GPVٽ= qf6F<؏1-b (oi0kp +'dҍa)D߷mm-xR}l\GjzVl,GA^V`q`-"ՄuXL.Nڪ] 弔9uod8ĒOxƳg+pjΧ2Ӻ4ԓ,9CUԆ_T+m1 :H+eqQf) .> ?RGuJH0р9Ϡ&ZཙMO@ 3Xj|!M,:>u8aRU.LoAXݼMqrmGoC]p=?,;/}*:89L@\GXN`!6 pIm˼ `_~ζīD cvX&NfP|*b + <wk^-y}DoW ]TUb%Ưl0S2X6e=k)fd" }^<71@GZy\ aNvݟgֺYن#\s&Ұ@ D%F`wa&k^յϕV ҄P DN\Ɓ< A=1 YD+H!$Bf%4و4Tw hyΑmAĬ`!w3ъlQP,B#u95"I <ύ~Q!˲^`JY?df4?` =SL\N<O78 sD2yNPijeURMf|]V`nz?BW@#,y1і8dX|D-WYA$2c ,074oPCvu [ &uĆfRyy=r./!'hN3^F~vт{1`켲a[!tp\Ѹc1tp_jQ|I8A|́e$Fs5 z}6IƅwXyuOZP"\ɺX$yr }&" bB\,z7C'R^OV&Ъ>:HWu9+cXe1VvXLJ:B[ni! LAOVDLM+ī`T!JԵFi«Xp S[A*F߹qW$@]w*yRi9T)>.qB*7Uʏ +ǭSJquO[m0pWzޛ\/lOcQ`'6+Ee~3Pn1{ `M)$ϗ5lhNq8SR(>s֥Nhq&VÙ{IϨS47:Qv)ckqo5Cr?{j网~V'acf95[<Ďc?#^g j-dv#\[oеnpm0IͣCҌjxXνkQx>%E*@ȷ0r-SK٘>/"m]FQ!*XwXL!cTňu c$uz) /xl3-w#U74uUVy@L VNWV ~O:@:"x7-u1vD#l$C+U/@Ư|b_%#'o?DN:hF42J!>bB_*'R;?˙»֥ym-|;bxLPndrecк.C6;2%#/gщ/[ǰeJMHKnk`03ޭTD֊Dw^g(.%Jz5#s ?s6g`L!vr[q2SӾ'{1Bߎ{Sy\#m҂[,FiyNի@NVZnyI egdV+52[CZ+̈́>.&5>iM:iCy DEƲ_d_V o{OBb|^g΀HXqӇZunΈ0"2&F 1%x\D^G<u>+qn(jhD1֖(8/ #R-x-6',;&?յGBFOD > O(4n՛FUMԐ1^5InA|@Ih l=0/qOc6+]9qn5 j>&-E1^:) ohn if*&e6}PKJɧ,.[P40ݖN !}Ld[TSR JyM3~:/Rk,xȆp?zM6-R3>>}}a'VZIP]B̀xyS |da@#Dx>&JtqoH} ߒfmF@ԃ>8M"=0Ql?CCpvz`B>LL ' ·ܣ_z)7HRwGp.IjPr?ʪYkB1eO\&=y (_jS]VytmZ?FpjKU Pl<]oZ@T/ ,hR~%,fR;|4lP%' A-M6 Yo6d N~WUx0ժ~} {d8ԶFfJ% bB`H`Tr'7{i zTP _Mڬ1 8zmI/毷[?= :yfUU&ש.('Z-O\.OlCySQꭜm^EkV/7' [_f/{2.c"w]84څWyNvNcTN CK4ߠ@_4i 0uJ$c8"k?4f茶r^aq1Bl{s lHFsji, ¶9xG$?i5ox ;63;|=x^kx[]Tq6j]%R"vxBQm2eTI2yjTq6F̉EZ>=+2U [JQ\H练̵j?tg4JcL[;WWkJ>[\oaHwƑ)/kRp0):}oiG@rC4t6P/C׮Kڞ贀t)ol_Q9rs^6B{F^-^gfV=kFaL&/>HZcıh?xiendstream endobj 346 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1806 >> stream x{PTa#Aسknj"5"pY"(7쾻\B`A,l`aFiic3q3qLtӞMOΜ3{琄A$%z{䷻?^^"rXGQ@HR-j rSt$)_rHIOR%2.MR脏,qMRRW 'M*.MN/^)ѧ$(ʜEE|&ҰhGxfWMHXƦj n08aqiKԍ'A1)T`D;@ Ndž_;\< O =^qV"q l訆r3?E 'I`;±D8u?_\" oByB+xg@$\t:'B\5i<#;W{K/ HvWXP/9+l4(qtKx0s|Q~dLd|QTSU]4 t>[^lqhơUg䋅٬TKb) >anaX 3s"sPwI@V@>VD}D}X~;zt\N4zI-1q//|>ȣ3ix.M$gZ#5QhiZDc }Kgr~ys>LS(Iè'h凜N~\=60NZkP$+ۡJ|pijuR*cA*PTfי)8 `.3pۨcIi : z-mY/- [>*5h m j. .-SM6C{\k`}2SヹM\gmũ4~o\=6> stream xX X[eN .XdJ\A;֩vq.3Z{PH|9@i)btVu:UљYsw%} B /][sw/rzG",„{$_-AhY,H ˪4N_s$=xjCY0@k_n͚%yGKS3ey%28u[ّ<2 d'VdT=RVR兲ԗ*krS7R3KR}d߆jY^ejFYn^ei,pmi5G]U_]\^_)(}wm^yUaqYi~vII@ tM/f+r m/zO>;W,]rԲ [i'Y+;+<+#(,xQ#ctJHpIh"dVMh:NK܏Q$ƅWn v0xm 8sۿ_`قf, ,hWN'I;/_'ʸ$Xg:f rj,q&b@4иMS/UFL`O{8!bluuz3%:~)=oN06 A[,bڬxfBC4eрba쵃| z=%{<6G:2:|h&ptz b 8*4@afRzFn$9 kӣVLcd2ZJu3u*)|"h 4r $/+A- qken -?j0Ic5Z P `D^=ft#,F"kwvsʘ} gM~q^e"@8^g#5 P"JB+ЊwM=jJw6^1102u5V4TK]A9]]TcuYT鯱BlXep$Y-8 'e1i%*o)µH ̞ţ~|JbmdkWT:r>6Mi:PIӋ ſ=—}w LbhBo1m&^kkiyX#B>qz.13t9T*(34`4uviX26jU$gJ (NhzL̠lnpg(Ę(xvO1΀uN* s=]ٰprRp%[<ɩGŃh-^Niݠtd.hbYW`@t y-w:hfH391 -jq vaEjw?y g]5 ((~X5b{g2yc"^1K`h~ۓ_s.Oq=ܟ$ns\t%]6m\fMSЩ̠(~́6Blf}]]AMDy1CokM%ShQt-ˇw}뤒b@lĜU4ڪHlSʴ[^ fCp~WU+hd$n\),켁޺!JU"Cc(;qj_Kvf$æYa6G. FUY>WtNjnaOQUQS=yd n=+94t&Ѭ@(OFmdAB'Drg gq0VbϪy/֬bJFos?cj Ƙ9 g+568;LƸp%ݨZ3,A3[5Xqn.]@$ ]e{pae~c|T8D%zmvCe~4''*JW ^"9Y\\DvoV2eQU//7I9p`ɻ.pi22_SŚcXno7ueZ]NlJ>?Wb؍a \TpLWMm3 u:PJL^d:Zh U*+*#:_Gk{Jwk6H6q`6B% qn.=|\oL;9|lW]0'f)߶4Ԁ@l꒜ӵ'}op4I[)8vulV&NGul.v~ZERD BY7;i f2ߜbfLj0FbmM6Z@\<6cTR]3\FsH+(Bֈ۠i`γq94atgA'\!B!&FuT}! Z ߙ\U[ZL{:9)}Rh _ЈmnP/N]dd_]5w!o آe |0oo :pƉޗ(]_Y鈵vɺn?shz"i-pްgܯD+:I*5Υf0*uh9FJ5,`J5CX)$-nkf`, uF袛 53>^8ΩÏ;'gn ц%#9EuՁ&&YւOPox{$>MII`"rc㯜(Z|ӞR>җH*W֤秗.؏Vqe˩Xg-':':p=عE>*#+CoNFUQ|HkhZ1J /Ȣ8Cms _Eo#!{瞺u[[O:.4`J=RV]#7.SPR - ց 럒&U6s:yB(7O~\-FczFsKhL͂Kז&{_25$_"N_~.Y~+,zh0+g@B&g\)OxTᬰWQ-*?omnou8cTz+{?o]z M§P-i=p&Nk#amx034y?=&)С^YW }m xrv q :72}j>URgglxHZ+w#$&p4_; Qgqeuup*~Z{iPkmwF LJą2Na&~Eϋ8$SO\S%k2xwYNV 5Ye/e?Qx̓V{ur9nwu!H\>ЕS*ãbJ_Ft]A> stream x}}PwY] nFZ{oX@TJ`ɈxpG=0(;p'xA $JZ2b->{}t{f3v#$ɠ̷V7 _ABAHɹHTg-EwReUBXH\ry")!abF+-Ud*&W%-"XXJ%eK \MyVWZlP$o)˕ ETTl(OZM^T=J])Aa*?IHL)AA, ۉ,"XFd<BDS@H<"cڀmT=u50,9vPzиdG w(xi&)]^ZnBuAjf@c;ll̠<>8O9=dVRS ->z(^0Y,ۑfپa=`p$Ixo>yp?oMQl{Ioh$&L9nw{@v0*ralRLLY5 BSs{&~of-u=L9P@w[:( gN&()Ur5o</1E("ѣ(۾36`CP?mG]=U8prdtNF^lAys)N\p`KStve~5nQhp_Nfk)7!O6Ѻ9#ͭ&<s2Ogl ]0gg26UuTF9*: ]VWM;,:-N}'ʅ‹2(ԋ5ʧES \r+< (vCb8*G H G9CL7w8t;z0 "Ey<^;. DAr.]rgk&Oꮫw1ٹp$zը-\gY ;`mϽkoW^!r }mX׹"H먘odNo]~|N] H_BiKEtQoR\rQ/;fyU3`>>>mg ̦8^ڦ<PULOvo LS(pt?vĢ8dUBR֙F{wN0}n\Uc֥Y8TSX@% tJ*͆ʦ~po! ǽ(_z= #^/ؾuMeasBtig"E}շ6N.p &>{?q,FfJAOMooخܱ}ldAS"Z6lnhZx:n)Ձi{̚|+$ؽ?$d#$ Kkendstream endobj 349 0 obj << /Filter /FlateDecode /Length 237 >> stream x]An ERt3 `F, &v.t~; 7r  ^sQ1헤;/dFWrE5sJG8t\]`װXP@D :a"Ę@DPU 2qg7pd|%δ"D"DL!&R婎Ցְl1׵Kqyendstream endobj 350 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2100 >> stream xypW 8$UbO`W@ t:%#mlB [%ٖ:Vի[%˶|[s))$4%:K:]LLggc>,>;^].8Ԓ),HBB|9%ϠQ|T rʸ*kŅEj֭[J5kI6ɔR$U.IGd"X,PVիe e$"IL%SV $r$MZ&L>*+2$UQ S"J-Ub6_^^)-(.9~İt,a+-Nl{ [ p@cE. s2T(|9|;kOJ2X2&`-Du;rG/U+DlPӊ'$FjuZK#"#Ch6\?FVLNX'BP\`pn?:renƦEֿϽD(%и:j DB!?mx"ǽ׏VδvGx{Jl9XAcy xmhawQ(yS_oh>;cA?*;]"~ ; PK %|/8۴bk:KRyah&9+4>9lGWPE9h9- *cc5?]xV "K\8xcNGXO찒TC>PN3i Lh0p XTnG3Meo2VI5{R's~aj ٧fH'mrl&c(:x<^~WU5H_WCOKIΆa^MSJmD ->=#\AU\`LxL!4Ub'tQ{J䀚d}#e,%j"˚i&ofF`S&&u\UV٤>Kp/=qMg3BmrP0Swht[}d'w7#x/K9af/}A7wLЦ092^ܡi}-d_yBQh:{c'b]Z4Ђ8";kUreU7z{kwHdSE;'zoLLҗ#bh^dZCtӋ%[ -yk~u)p$6c"8axL1 lCaDӇg&JЄ!>*3 O4oh'/8a}V^٬km?9~$~zc68*P,Kh&A8` [-^~cÛw]lph:nZi1c=o:%oZ<`Ǜy:ˋ:O$") >b66Uڄ} n{][}”:{f:H6Tr݃z, eL:H͍VAϙX.7x}D mz⸹[K'MN' bl%حT&g{g17~mkœ'!_gendstream endobj 351 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 635 >> stream xu_HSqu6et".%"X(,r8W7ڮ;M:N͛ejfTJ}^Aχ6眷BDQPqPX<3cXFJl ^/h♻qU:.߉ MS6X.6+s=Wb]Zs#g0 npZyA䲎[y,?> stream xECMSS12$v_  *`[WouCopyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMSS12.CMSS12Computer ModernRS34O +׋ !J0M? ! KHMUGv[.bY24+'D]Y{vjykhFRK5B=P|:Oスlu]fHGru~pjkvPXa  7 ו FTendstream endobj 353 0 obj << /Filter /FlateDecode /Length 176 >> stream x]O10 T*KY@@8U:Q&1};џOgr[[G&엨8:b5pt2E+ _n&m˪DȺ!S Pd]:f@ۮ9➈%FTz9#V >d_%Yendstream endobj 354 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 403 >> stream xUKAgZ%>KY;QRbPQXP:.6RANtP`A7;/0YA>/  (ܞF!:as" ~;}ËB9:9Y=\,Q5Q:bɑ兽Hn>fendstream endobj 355 0 obj << /Filter /FlateDecode /Length 183 >> stream x]O  I*%]:!t`$c׌՚HGp:궠N0KFŝW-ғfIxX].<{WWCiXT m+DA?O 0D;QωLªcLޓBYvnk,.M _tG^jendstream endobj 356 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1618 >> stream xUTPgMBgݒ)Gl SZq^B< ,`<h@bo+ʡSoZscV:s\Ggzb{7޾7˨ ˲uVX2~JBVc> ] 骷xMri2~ɸY*dL=g=)fsb2Vsy\{`x"Ph2=gyA\06*[Yjfg&x =]%uEO<ؘoq;]gr ms5جZfXH>YSW/\MNU[gvjsaޮU;eZG`VI.Bp\]wuc//,T;d d>Wʖ2˶1l acvC0R_fxMXSiUAiR 3=x ƫ/cjT*-HH,U_߀.Rb yow_wH 4>7y綉C\wR~Z= wBpeN>oIFi%͑o XB!]oW`u,,s OMJL` >XakՇR7$@d$nMM2 ɡrʢ=Te T7Y5=mEc` ,\,&˨W {c ӿ%ˣ_.. L/\5}WScO=qv nWsն0Clwgil Ԏ/ !ci㣇L=XzLh#>$mNY- gm9R?96gaOHfmz1qI75 q*/=N75w\FTbg,wIs4'`\\Ja𖓛PA U A*u|8 ᅾѮ3HS@䆽C1,淬F\'OWuy3J-3K3>%|~.7b:>3#ݼ7-G(*rǩ5Cg \ Q(tC-х . m=St~ 0CN#;smd(-޶}a;ľѓEGtb,t}5LbLݩrl 2 ydaE~p/;&pJ>Wf}M4A2?IЉ}Ÿ-G#!HUvTzI).>. 4'ێZ|ݽ?d?[rVn*CR Ӭ> stream x[Y$7~oDOՄV7ۀ c^fzzg2R#U]վ`ZJRy|~ )}hbLtq/LȮZFt7aaBV-DBa+L5-ae?[|uJ 70~SEUF0mhcD2BsN3 -);Cz_}|P 7Z"iોZ4b2QEP6aבя0|A.~/Eۨ:,<<8oDC>S~c8Q;ˆ> D'*9Q;‰D'jˆ~D`t\:x.rdw U8.nݫջf7E73!4AE&SeC4F כdʹL6@[N;D"~xw\I)c 3z`*1F\88EQ=~`6h4~AAɱSt8}Y+)tb9IӶҍ8*&DMC4U]/]W=v v1u`b0 M.ˏhe4ī s~9*ËnRT_nO67 [H=p;^ 9gGkߺW mq 5 \]bH4Vk\օ>#ԛJ#6W^z.%H'L:80tB~ľ}G0M2=/7oۥoـDqy؈`8XA :R (#:)x_5EC[N?/K2wX]u&ek:bxz6`AJ%i '.N)Dtbabd1]gCHlEVa+ U`d{ô҂?U̸py-m8,K3;MI$kӈtr얹G&W> cʘG*V Dc-*$* UPKʄۂ$嬠 (#&f;NW"g 3 ;/wi9jQٳU8?R9B܂ceEYs.IiB3i<#8B#aX+8 a>s{8v#޸NedwD~dE*W&<+#a89QCCm$dRO XΕVU@7yJ:YLCouZBa9 kȺh0Ohn=}JJ~mOTrd–N$B9tof4cIq1I6:_(/R]G^G- WcZ:pv$mF۽ NbhC][Y19:$ʭ?vw9ǘ5!?q_)wpS<zsH^84U)bU%d a꿛uÔtQ*r\ yYM7@m)CRi?IPW2D׃=#xJHs[ka@ߪ=35[t;cxpZ |a Ү@9/}$اCLX׻MkEI>:gm:?SUu0k?Iwi'=k6Q?aZ^+1jX,{>󿛬p֓{hiI9& :P?0ܲ2Ȳ 5 =Pw>N67@> 60.f*R:1cToNcpTV.Ƅ8Qg(we)*}ȕ]R &„3]iDXr{c^G'"f5\PFsY Mhs Qz %r]g&8 PߍU ^\b OIGU]ں:\& DrxbiY#)\%㜛0t( ӑG |ҁ::G^ƘR#b{tXg]'HgʫNY[U>c)6j=G͛8 zS4 \5P6jYBS"###{Wwp Bݸ"uZ%|벩ܐڈ.P4!rGƄ^˷C>ߌ9dan3h?ޜ>6hĿ]Jzܸ4UIXp оb3zh+~ SCM#zz[ MGc1zXSI{=LO5U~g۷%ğ.;Y3JIIZ5﹜Yv ˜pJu#.5(=0%tΨ:X_>sB,ntr#-acwږd5i ~'bi@2/!!y)<؂n' tnqH&qYq>\.ć|jx..j1 wKY8 /YC(-"Y6,:,>/&l )ac|{nS[ZfZa:<j_ TdG^RZ'u.}d2.$OK6r ݮX8I-$fiIQ ز~YڄpV_(R#V~=dEe2~EW*azxL.*۴,tKm&u5}F+Dz,9/ ËozՐat|@P2ޛ/Bʗ}X=0+Ӯl!*%Uf9\iā:20 _!ǂwP' ж- V_Xlok{teaa$ a ,J{i)KÏa'늰񕊂ǝl "WLPJKѕuQ _)7R+ǑE{PןeS4Zو6ߟE =|N6sHuR8~׾$1+kL.! =Өz c^K4j=<_sL] \ H;n<1?QuԽy"NZر`2Tv!/@/2!ӳR-]:% [Jaš"5 'j/鋑o}zw8Ɨvy|X]\s$y'G9׭o^i/w69~=Y]4Hc>;kj8a oF9D2N]ud'/ٌܷht'-޿ZܓuC0rSdl`֢3W\:ߕ̟R/hp }X> | B6evQPo ƛ<]X@PUlMO%Kf[:BLMV1Yz =ʹuwXi7ju9Jw. 8};*W pc?lHِ2GixHNFO 鼽4ތ?w=e|ٓS~O1[y*9!d x8a8bT5x14@wBOs6 ,T b> stream xYo'G,P]f#@Z4H `+RSHKffZʪk4w_ц싗\7ٯ3jmVc32A ѝҀ[r3[Q1+ivF_fn3w%`;{5{{tR1W3k q/Jkig#C#J0EIM%L1p` i SAM2cENJ&$ɒnC 'skt1xɄl`0j\ r^)&s* Πgg󅡼RKi ]9׼,AWN,4o妓ъAhW J%(~wF4@xEL3bu)tM%H%:Z}_9OK8e;pr>~ZDO3#d&Aj)n"DR |aYa*,$Ч\3*JU 4{L3bu)tMe,BgBΫb6+YQ49' 5lm a٩̭VX%njE뉨viYU$ڑT,Kxs/!=Kn5q )n,Ok|P5o Q#DYc:NL'HD!Ӵ!f> RaXO™pd;gI7EKpVvL?ފ Uپm:KYBy{z ְ狗Ϟv]7?ק0ksiNJH<{w{>7=xjFaNҶm)wl).bLư2Dhw)KcrSvFca7iʼn4l#E!hY#6gv(͜D䦽ƈ|8 mCO(Fi+B/ $TH7v@ۥg.[eI7tρvG zʫ^bixMN6A0{C9&E{t>2GF+G=:#Q'V* SWNe٩C>,X sօlKztA"#S{ﲦ%:CKJ*UTKO Vq,hvJ.g@ 2\@0Ȅ6, }wv)Oث?;eB EL,Js7j-x9QJ7>D z%3'v֥ęS.h2j}Ƥ/teAےM9܌%;玆@lH=EƆgϋ3u:Ht>V: YH/û *`2 cA%W̕L=RwE):b*?'x I6<2&b'?1,HfaA>lW=~AP̹cYҳOKc!QVݫcl] ~cg/ec1KD"_a4B_5*El ӁXtX٤Ta4:3yEhFw(VL4Baya`nKBqlOeO = 1DsTBDKMU^'jҘȗr݇oFͬxzi\x=5husŶ~*1O atVwU@ bU^Žaz0fh5(T'O|4 b(nصxW+C U0(vP=Uo)Ud7Wc9H؟ gZ^Np3y#*ſŨ߄y oGҪGc~  l:L.OҤ9szʅ cFB،"Lt[E ̉6i_y氿ڬuf⦙ƻH?{iGn~ns> stream xYyXڟ3LjKH[Zjp7*.-a_eMB,K\;Ku V{k[.Zg}3L|?<0swDk?B$ TlZ4!~ɛ!es_[ǿÕYww׆!<8^٨LG.CCV3vn23I"?uTLY$Y\Ȅ(E"!>-_,BG*GHRx1V'mR$'edYLRD|Y"HY/E)q\2Ia7!5Y8},I'O+D2.m}ճ)z2+éM- ɍH NL?ґ_XjN\I SRG,X$3riVT<:(&86D|ÊqV;ei#5s1c׽V9ɝ8i2A #SD1&F!rbM>/XE!a\Mb51xXC'&x"@,$!$b $BJENMpKDb1p'^&fA*A#`C!< /b :J\E~.剫t!IHvpi-K3_*q4t_~5/;vmtW.1CqK|ppg1W9W3)>$.&D&Ƌl"{\@C'Ep$=Յq>(2 w.Oag'sݹ(1tMYS$ڜM#ކ}'$a $m3zd|êNJ eJCzm$bҹfSG|* S`G7V ds9H3 v c6^ = h(ܑt o}9.Hj  5.|XJ -U2ߟ]1m0_DMZvׇ'Uɰ#J"Rc4ٝKg5Z&5L*D#);Qi>ϭ 9#19 > '^سp}$4DQC|IG4[M;2fM- Tpȟ&bCպ{+/hL6J2VpYDD[ u Ufg!Q=erWsV[wkU C^%T[%}k+IÙGn߼3K[4 @%͒eut[-ylʚ q34\<=-" ?QDRrY;T7NT67դ,:x19u&VW \5 )~L e}S GmDKV)0Ʋj•K݀toϪ-ܞPHؙ^gNpRfRqh(@RDơ~MjI*HÌl/="8ĸֳvM*m-)(-Ґcon9*Be*hK5lxʬjЙt&Kiˆ"(9 [W`&'swFڇHNmv`vxMr.sXJ cGPp$n b/);;ܨ4G V.Xiwʌx|2m~i>ȗ.k_|yljKN?oddrˡ#Hi):D[hs W)Y$-8ب{Bز@O8N^G] h&WRHŰ<⥍o|R]U= <<ǸXrw=t|Ja%r491lFqGTf^+g̀ئ\x\μube~XH߮]Tf꒐9Ǡ[GpCa,Ld~'h ~YrJW( jIS8`APqXF~`_(E?G:0x~T9z^tGIhYTUR)} C.~qX@=U!U ɜ\cqЖt7:;#xw,{,7E$P >{}ߒq0seS"dmZ๯SH=?ɵ\yFAtB.jz3W^)D5Q=zȻc {D#IfGY-xnϽ=rFw߄wcN kwbxjݙؖUKqo$ b+]֏p[;ͅFU*bI KO}}ڹk뼸hy[ 6 VrUXz APqu 4C7'v}WfGQ(={+DKNu0Zߨ1}-]׫NŐ|jϸ\D)\v(;A˗H 1ߞ ‰w!z RN]F ΊV:r#J%JՏu=>96k=L aʛA אpXrg/t5dwUT`XԦBMq]qf@~̺ bcZ_Åi%@/! 0ɣ`\͗tiiN]SUYc ˸ƅ(0z?gNns=ޢbz6ll f8~R9x,٩bfC02^=9؆ ؉=RP2>)h @!HtzwEjM(Ue~ZurhuڦZ\]R[Wm0,Z2j5lLz* UYgT*S @vF5 \~h*!n\װ|S8b^R83ɽ;Cr!qB 1WW_F5.ǜ0 {nB9qU_V`){jF`V/P⡁u%v_q4>` K3-kwYTЉ&5e3E7 C.=+7r9oG9ԍiH&JNd+2lŒ:ĕ1h1m; ՛Y\SjsޕyV5>: S!ͭH8CYcPTg WIiqK}5"9xdc)0.^1[)F_C=R҈1 MG(OX _Yr<-pFߟ/+80y[Niپ{čX J\JtoNBoHwoMMx̬3Hǫ#VyAPd-XR){y~X@k_$uCr)Vv?gRmPD4R:3 ?j./Qٳ^T4X~vؠj`j[E ^bk*ko? > <5dc|lǾfS.,;'l+vo‰N|u].0]N4s w@ ܁1d[~1O=*l65h(UL QFGw@ : m>{._> =dh8 qU(>IJ[Ϸ4kddffGFζl\TǕ4eQBbsހ4adtDܶ}\%rpwʖ q؉/X)qÅ~sf.o8yfחgַsrƶ3!jŪQ >9~q.3+qJXxz-Sə֝ x<޾rLfmIіjn_4pH(2ٱ^]PNDl0D*G` *F0KJJƠ*Qk7x6t9)ш>'0 תKι5fcc- nkʴ@bD+j@]5i%&j(y%VR./x̨{  2×#W4jr. Mҫq`]]]U.sw.+qLx^:?6ǧܮwFM֨KF+N:w%s;h$i~I['UURN_ _\ JJf&}]O#Wc^k*l\b!f<0\UhX4<|7tU]؊<.2?ݯNH:XW XckЩ ⑴j GH|ANP٭}$v+#)|8gUbJ'r^XjkD|ר"SQS Nalθvx݅? 3=`Ǖ'~p9a6JI KEa_ofѥ ڵ@C_RI2&l^aAب{N=J.W<‚3E*Ȭ}% emH]-\9nދ3>^ 1&=+J7/X#wTbct_8Pdp2Łի٤XC0*MkplMpHJ<FMhԬen9\{+U W^VjC_3w=7N LYǦeBeUO!yy&@ԚbPBY讼ڤ1F5g11#/*PB{g٠ǐ8v :qNoB&nQf'PT=Aqyz#Z}j}9 l 9Q ʂ> stream x]O10 mR>:NNIZt;,6|/`,@[ 4ZubX8)/dSLw5|eU:MWHAH5Oٜ'2#h*\B in X3 oSendstream endobj 361 0 obj << /Filter /FlateDecode /Length 6720 >> stream x][q~_o9h'nIvāl2#\%-QKLU{dIӗ~U8y/_tx/ zVwys3c={ ~Ԝ% aL͋~w>~4)q#W._%1C wŎ$N%>& ?q4iuǚsxQ\0:FwӠc 1,|O#S8ip͘RKȩ*ޮy*%"Sծ.]?x /oC72f.JAgkLLRL eKOaWDF0]XQD\xV pDQRro?9~I@jI(<^n-E*uvDܞ (?_Ą/Bŝ'h@X (2KI z-)GT>!3@*ԇsqb8Hg|6#9-hjŦFӨʥrfW*wꪥvJ)L~ELZkms+(a2DAQp~5o-ߒPڪ_)H 1@I\:٘XX7Xb  亯#L 9ŒcJuc͕VZZF(@+Tqlgz0]SR}طw9kM-hƑkAt|S2,gQJkeI蔱n)j+*Y%0yU)Q`/f}h5RCKh} FpglQENU?k/_@1 crS 6?k`hpUThF ,y&+N  JCȾ/ǍgB&k/o=>;ca:1Թ|RNRVe ߊHYf iS"2!XʇN?.3>  +_X0P2s3eB\`rP$a` 7."h9E3^EAn@/d/(٤2ssR,Hq^Ph~@%0hB(Ys4!?Yhk{>G0L/Ѻ,;جR #45`X| @M> =Ь@7dHDӃ. q~_MIiQ7۫۫@KWǟ} WSQ 5DA`ƒqob%[ =S #zxRNl, ~6hϾ -tQVk\ΖT)q9JY8tV5WVm~onći[w䡶d@lGNmћ>9o"H:DBd4Cgt۫\-%0q]ch/uG8(AM"KAzn7;*ak}?Xh3YƐ+4KlK^CN#`Pß{{D;,I?H呵ۚN4nh#-eJoxq\ Hb-صn >b^oB7$_`*Q{Q̼:R{qĦQ:Xcݴh8 [7j[)w?Yopq6C~TD-*d--*uqTGڑiL .u\ zOn:!j+c2K9aA\vP\8pf)ynFqy_LX!wT,BxzIHIQ!BaMjiؐU)9q^/  lo{O36SŢř8k~eikPўw3&U\l,8\\ܜIAk4/P:ӕW1Inn%Lrخ\pK])ȥ7Scw}j$qD6+3 5?٦~f%笥nT M^EuZ*TM 5ܴۿZTx)⡞?hTFUUY$텊Y]]:Q7ygWm97-41Z @\ׇ=O_POl 9 d7w`6C06lXJhCjڑZEis\33Bz^bDOXaS9xNiPωʒG;a&5@INW?&3 Q9"5XSo3)2R@ 3Un,RҚs.Yo?#G\ ] ubچV1. 1(/FjuG<4"`{u(N.rp:nC{eVe (Gh!}Fv(MtHU`[ ~?:陓: #B 3oA$;ieeB$P)9=8Q?tLؼg'3X.̖ 6gJ'肰,"O 5(D[~mG/_{68UMHGOw/Kcʿ௦ƺ\JhEO%kNƧyS5:X7n'Xe>A 9yf^;op1kֺpFxx̏Vu#Zb9}(}SqQ#kSMgZ9(9`J~b*loCn0taOXgA~e} >ާQ=Dp:9g(]T^49/rÄ/qX_<+)TLP[UWz\l%z OCbs-=(#PlH'.ܰ"C.Tz=׺l9A>˃B,m:NmO*|ӄ6*,~_9Tӂ׀IL=DJǐS.̟>n*r~]52U\B>:&&WDp.1F $K 3{XIn Km^ %;ƴOV[#AZҐ )~'ƽ鸒Z pEnB!8r#PR>K0;)Шoʼn l PUs@'oO"~Az,~-"[EIa;Ti9nYy7whIFcgV t%tTַ9&m(nW9EtMt.dTwrXsX4sGAW+t2N_)q#4ai/X Z$9G%2kw}k:3.rAsDK]ߗ4~}8luh$tZr_`/aJ8]A XD e#;} 9a>FfN-4w-m^wxZy9N9NAMg7<9jĝzm Qm䃏&K'?vSRĽJDӆ{i./%B-jE}^$$s[^38lO=A\ b7H1PuN43ء_NXiv!K^27],Dj *x6v +~6OƔvxzOc<1p6L&Hv]̙x>oЮaV{R}#׸t8U)IU#G< <ԩ|±c}vUs͡k [.龋F G%QŽ 0 [ݻ6i=o?:tS&wf5OCqr #sɹ-2}8jf:6TΑJ և 8εЯo.Zaީ6?{җFB<Bh[)àS䰠݋8MaN7+65淝{_+Fv Ⱛ0N_U?=TeiH4^XU-opƁ]'lʃvYJ+|M XzQ?Iat1,8P6nױWz,hdF?Mo龹b`]2a@\ՙ;7po}Ϡ?ɈH;&*T\Yx-y!y/E z-XFB'1oںvLQ-ھ5ON3эS|hIV*'r稱y*M={SYD](NzVzb=\?z~]}k7 Z q::f؎9ux5О`nU8dVMSo;n>^P ]~3V/BJlʾ!f&e[?#Mendstream endobj 362 0 obj << /Filter /FlateDecode /Length 5943 >> stream x\[sdq~g#-3HUɃ/+.!e{888d'eї vj5_ޜMX}8Vo~˷?ncfkiO-v4 !A4{w@f׏`R wwSy&Z>w.`xU0 Vc_BU)T[.Jݚ5SK80qNo؂3W7E%uЇ16 z&cuQpd7h6F]6T%EN X=ߐ╂ Դ![r.A"oiGL`K?b &PɁ03ީ ?,+Կ:?YVG3+| ?lm̜s 4e/.9W[hIz&)$)V֧.DP ʂ.<:Irp+FC i@? HEAA r'{GSB/!sk-8W6)/EQ y):*E}mc[!D x!d7͐*XRX m\$z4t<gQ75[`h: FCY)̸ G.`8q@)({x'|P16,Xׇ쟜k-'TeYIz9!j@2ǿLͻ6&GNZQP]7|;r!+Wer)WB 6h EK_Pݵ"*8gm<';H&~A|NTq H^{|,L3u߇7EМd~?.ׯJeߋ nԷJZ@(fp;+6_,NE,Z<hGT>+K9 lFuL~LY Se;ux3R[, lSf{-P^/c)T l GhZb!(x кLs:ݴ0瘼ӈ)xتql{q}+@q dB{ValGM|!Әew3%= rg&`0ՅqU PHfdoK˲H\ AFɴ%•K89GZwIs"Ə}?$b!Ku 5 +=kTơ&/t1I_8ZkAAAmƅqļm# O!7:edyQT ɚ/c*Dv Kw#f֑w$[{K '潝4ހ"W;3a_oPR\h\.BQ;noE L{10 n `Xe;, ^,ήn@)y76jKPZޝqu{{xwG.OB[0ZU>qao@tq:ja$ 6%c^f^mj.fߵׅR-$uL F.6iOyE#;eb6='9]s#)np ,$=<@ ^ ՖWe)x[o;p 3t od7؟Q6p ne Z"@TߟƅOAgqD BM93^|; ]Uol4*~u{y%w/V{7S{]*ο o'c% fYJB%:|6M.n?]_gQ* BseVQlȩj 2`S?0*f[q@60*hl`4тljDծI9p^#-Ia.clg*jK:;FWV?U2@3`-;]{]i*MrP|"8k8f;!vYmЍ& v̋8j ?"8 {A7; uHce@/FGx.::9mF8cZfZ[ZlT cLaNNy-;XOT,Xkd$fUyt7fYs:,~3ױ.\񂽰։$PRk)/EO.$+[rd )iN_hy4PDHMLmR*P9f*a(c9v $*c8ǷtJдTƣhPSΟXROjJʲL HǤn%G$(oi V7i З~9Io3;B*y&Tx^>2L}JER%x GNM3#t,2QLG?i 6lM;[=ڃdSij {o֢ M 8`[\AȴWkN'KxwMnCxSRy> }_A6u{PK,B M҄sH`\^'A!26e vm`4X5~HAu*:6XRNֱ u}E[ deBMzHwj"5թ|{3/C@G4eE|=խƚֶP'+-=ݒ=Z*n3 t(:nj:Su`?2ZIB r ʞ+cj*d5QQ5ɇY}|rqGɓ6 AédQ h;{]fJ![h˽@, ݌&50= Ww1:]bfY+4{A<) l}\B#K!Ck=5w[VQLT*JQ`h\_LjZ4 ۀ徥U|-¬() "Fa #v7te7A >]躭`D/.8k:EցOA( rXfmLKِܿU -qLzP6w1P%7m }Mx1䝦Ү6 TT:#\{ C.:ZU곪5?"g>χLKڱN$ȘjD@)(o` KqbcpP2- d>H>VMwuW!Yi]\PN.|\aLDh\ ]U| 5s[A`5Jf9f/;DS/ 2"׉/S!VNr娜ր8]p6j8QBϥ1dMmy#7u5׿^)jkX&&<z5: ۏVJCjrOF ӯ<H%dlV *+wȈnH骠?6񚗜NfYx<(M˟>ztbni ̂pEDT@/XCK;W/lj?p|(,0++r"P$*Q@EC>0;҈nc4>@^bm5N2n, ~fG5W\h;rwy`B(l|]!: ?"nSiz<%γ38 GO3Xmj>X5r]?\Ա97ad67:28Eȃ.:_p-1}hOI 𶸨~nwƞ?ܶ@=Pb3&Tяsř7]Ί&/T3u$oэW,`(WSd4TZGHy25zMe 9Wl-{꣩B\h /1meTԭGN.Gts` "Q}7y$XxcTM!G:w' hЄֳD2XR_a/h".I)H$F5ΰW!KJZ,GNvUx89GzR H#lX(!|! ҜWe {elk>:1;|?Q@.eN.('8CJc=fX|d;I6}=a}U>yݗan}4-\'Ur9<&H?T3)2I@~}qD o HbF6iv /#*ĩ⎡ b4:kromwZTϔ> stream x[~!LGpiѠM|O:c=.%)l(r93;rk^.6?_t| #3_{#"gV^3+gwtjWafWϟwתbBJ)b ~1-G;]R U2Y7ǃ\CZzS9c%ҁWO{7$Hs,P3#jK՚ i۞ljZx^kD6Az#^$HI/ j`Լ>J_-e7utuXOѓoKat`-u`nG?TO-/Բ rcx!1]{|N FO?~.]zU1BCñ ^թoPnj>VA?},M \9j?_Y+%xbirWk|q 8 n#0+tuu\n0AT@BHz1E%lu0? D^r%eF@=UꝦm#\A\00!L6V:S:P*u00Y`_2̎L&.9WPSbp E |/PUoFr%vdjSZB΢J\¡A5aJU 2,+Z*\y5vFe&8TTa @ok$d0MF 4A;/z`1pT RChzB 8ײwB0,@Pi.*3-JL MMɃ 4IXx$5dI$i HF!aFP̹"7A!ZV ݯ3D9eENSnc&%lp+'&Üd9!$cn0Ri>ex `8j̴y@''z:yH ϽTuezљ V xdR8# c|! |Ttc5(?ژ n)|/m%UjmV1uI]wڮ8 1 SfFN>5X`  ɋ6W};H ƙZps}{&6)sJ݇U ؝@D,˹ !܇1S5oo8۷)y͔E_0|2Q^zm^-m3J>!+R0ѹĜoDtHZ},K<< ?vn6Om >n59*( j,A$0;Z$ Fhϳ%d0tjFْAԺeB XJi@7&͊!׺  :iB$RGQNqibB-ңn hEB4:2੅>#\ /BkK&#oPd$pQx74PEt3n;̲GI{,^жT!uqK;e)?â.mp$DY4w2s{\j{\g0mBٟ5yJl0R6dYzVfOͥ>CԁJ,-Rcd!6y 4="HR~6&s4"dhN=9)&k  <}]}b`8/@g !K,ir0q, TK7d7Y]5煓%Oj>;%3C1Ej[ 񝜨Ӿk9a?N|nϊ?Jw„ƜHcdv,Uq)sF& xH p&L흄@@bt*?'A6V_#=N C߽B 픬TmmP";:n; Y;`b8qq 0_(^aM@z!\!yNl@NJTG8`0!?f?Vގ2k˿)mol7H&-wa0BdwFH B9pl= x3ش5<ۄxdg>P9&P|"ebP/ 72LF1(*2rH+I'ӇTS]S:7>^s[ .Zp3Jg Wz؂~$~#!\5Ҵrb惻F[~m,!^zqU"Zx%5B;n,MӶd dLq;.`*bPmưR8C[&jc|8h!lljJEwX&t_eHڕ VF a./ NL(î,CR=oHtL褛謹,O. 7ݫpm\U: r.MM8Zl#.!Q6?YWtzk avr ,1Y-ϝP`>ܬ?Ypcki\DŽOZmu<Ԭqc_PoqoMwݡ)^}^ $> stream x<َ$V٪އ`V׶6 4j=7dҌ4^eC]`;H\ pKW'bu}͉L_W_ǧ_I9DkI+W^ ^N^NzfkT6zloaHe7 vz@2)c _}ji^& qKF/#{y#T\o~;3M⦍O'҅g'^eʗ r=§BGW `AQ_Fnm⮻mWb1hc)5K}6"tl8~\_~(q?Q/-]OX/āw y-6/d=9 ps 4S6Cx92N;J֢"xeXq=}UGt4[7Fi2pYh~{;۞kK&O}1Dl7\n_|i ]s*f_' Ah C4 #,2B8+ :l_?!)l& 3$1t1Ju|"HRacx6*\<"4`a(A\.-v6jV'2|R!0JeRXrp(:J #ȿtd) 03#3 "Zu`KQn)˼ʔ4cXx~Š'^*J^el䋓^/\~xj&C!bg.Rfk Z!/2(p2FGUvo0NeZ988%EFw<lٔJoemkƏȬ#]`;|1Qb|m+#ڎ-d4ᄨBZ4 \9%e ̈́" t]yNeՀOi_fB?JI5dU /#ʨ#)P=;bbucj`>q([3`sRJ@} ;zZ -l4/D?)o$MNGm"rƎ)!BG-P pGFduQ"WJ#c.x>*wT f~eabSQ\c`V){<%xE5Kk;8iDŌ[G9bK< $,'&Xmd_GQgW'[ݜ&zOÉk=(p 6OR&7:@`øՑ0<6Ҡ ObEy!Pj(} h͸U"(Bx68~@,~(ä~8%kS@eWFBˈ5@MlP:  s0(k`BPeAEf*#JtX 08A TFT "zSRTVOy;%>l96geDk`-Ŗ@0o$RSrۛ z_=|Q@VT耰'r2ZM(GM)溨q #MJO!I +Bw#Y?(;dU>C뮣l4Z  2Tc,cHZl k-y,C kH󰹩htW~xav`CCQaYTyDJ c̓&y.m:p5f<*e=Z!]뫧L[D*/5(ʫQ.7܉ѧj BQo,49X(M!KKW)T/T帶йɮa·L~@2UHoSeO'g5^Cv ”:j&w<䂞Z%XNO(w_C`alL7A0*fhZYᅔ>'+}0l|#<R 6L+?)D.=L /ߗ\rX*IO'<:oZA`k""M|@Z`toN:s$,˰ՂRpYtU&FIDfaQd=lгcb %|9c8[ [ Y^͑&hE#{~?s)"_PwMuY ;Pj>!O9a6 '%!H:-о](@3B&;p8SatqKaNA6|{sY\0)hUT&rV'";? Z}8S:iM#rxY}[rq$3X@v|IJa~6ݧJ }a}Ѧ o*ЦBM´<:Ja6ڞ } v$n)}ҁk參p'v;'czD!QӊЭv&m{? XrqZ\Ldn媤Z}..h3)1sr[z4=! {%ɪ`I}"k8E?ɦv+U);,4ȑ=8+{+lѥks%t E1ĢQGb 5 iA,q٭'AT"ʥޣĬv!]H+*72qvd w{D "J}PU2ߋ):բF,a,̓U:J Ɓt/5ey;n5;[LO?!ȉK=OUm‚<^ `ѻCo&~JXt;*q&ZM޵UXHT cl `Qp)V 8rBܦIo-F?NOgEb^@;$˕i4e' Pendstream endobj 365 0 obj << /Filter /FlateDecode /Length 5378 >> stream x+AY<K 䯧U=+pgQU]ޟNƕ8_}OODzwq{9DU0Fy'?:9}p k֧gʄ~(J7a6ghw8~^{Åݩt+L9:찥+^ҩC7{\ެ"ϧqwp{WF|=8*oBz9E~ {?vSS/42"X5 uDWUQ+,(~B&li_ҵA8Y&ڙ+HҶ%qt.0ALh0a$I6=QbrN@p)^7@`!3|Kf8`<uEGX\4ABFYs%EPE_yI2Ra[K3L]h<0w^K (Lk w LPjD"sZ@s%}[b񾨮hx6< GQ0g 'u k:Djͮ釧8$k#7T]NվH8,Nofj f 0w) $:=sNGhDH`qOԆ~5P!9b*]*'88SY}B#>uDztHϏZDI-''JOyj71>GȲ4f$!х- ]yh&嘼<Wd1hƹ9RY j/6+I5<jxС_J ߟzp7? 3 K*Ĭ1v}Tt&v!rZinGp8R^&CSHA2F"0Ngɒqq8l| dE?yzy )CG?%qmأn!ƅ&-5,vHi̘iO Z_]l%t'bbBG0k(ߋ"pB'6&(;)i1 w&%,'2V[B)ıކ#"4k_}C!o1,\߾_w #ӈ:nYEd5ҕ>{ի~}Zg=ؼ2Ӳd&.ɚ/B ^4$!ғCxN'<': YXv!z I.HY hܹ4i|Žn4BKj4y=&r\Jy% t6/{S\0Q-1oȤi2[n*\0c P*UҢ.6 ]}`rd~}9wPeńP;n_Ꮫf)_r۬a7y<+ioa;4%0mzu>oʳݬw=n>Tk9* &Yx=Lxؿo^#N.eA `᰽|V_novqw2aK%Ч{zxAb 8b<\}\U@ķha]/nJM<%ӡ}u\s'VckaSo㏲B*'}9#arpűi1V^nc s^ciU(?~Zi}YAzxv沬7L$7e0U VzW^vs6I0+Ϣ= `ן!F@);$֎G# á|[h-\uYO XP#ic8&M4q ;ϏS|Գ3dGbۉ% ,twEsN(p] aB0@;|a%Q|뜋{rnsW)LJ,.XmuK=Mvf‘ UX&TxXNcw vKyXy+'6vB1HWb~rejРbK}9]0QM)@ k}iL 68 _"pf@]pO  6 (67ͬF#CO%^LN\nDXi D?Mb)tJL$ja?#)@<&ʕm*@h{/Phpqoor'KBh+葚鼄 R2-8 T~uUuZQY&e`!JShC(iH;?އO!nc6f3/kbO[)LV;lQt][YHǓrwGby ϯ+pӷ^ .V1};`mx1 D\:,Ұ N#w@i +Q3A1MK5m>: /΋sn+;crjy1R 8^x'AS)`H6)}D3)#UBmvִEéEVɉ Ƞ^.8^?jRS.D /Lpv|k6@B[k%On|D@tMC o?xGG:>g=3P/a,u I#O3F.jr`6zŸDt:+w>-s݉>P~#m\2- G)u=R!k "M"1K"ĬʔVƷaA( z\~yZՔ/xp`Xm1>$A%HKK9(dש4Epv+ezD")GK9[TT5`t 4X' } sLBn5v-D;IaU1[F\zeS,AИlBNfH3]O918_Pv$hhK"zYP/O!nE;ޙ43= ysBgB88^12깦WksV; L'K-`:_;ϻHXilBu9\LSx؂^!N!‚^FS.Wk'Y؅W%? 7Ze KCrxqzbO#{ =IL^mFEusN?8EgBIV3r]0: T"`M,uk))8ۡ86#=f9 ǴmS{7DXǹdJH. G|!tb #]g^A ac 2p(YF`VN(v%jJɰLk0]cS1"Hڑ:*_ǒUͤ> stream x]Y$q_~!@/ !)l$Dm ,w!gg="UGuJ(`kf;1ɝʿO?ϵ={H=Lݕ< Zr֪WrW ''(&!>JhW:@31D3q˜ #:ZP7 JY-eГy2W}I&ݿM$i9fBL)PiKۃM";~mBMZ.j^G G؃1N^L6 sK gh d9,O"Lv;eYb",+Žp8'ꝟ`]⤭v }0+z;磆W"۟`c ,*EI[܁^^¿!U($&rtl&u DqTejs#ʯ@M?dV}"t JĢF>zEj5T@|7_췷c&k\fKzd@ͭ;A)ְm|`Ccp/0Sq c d_NoXEXەpMbnpM5S*riS`[5#T@t@|<#bF'eٱ>@A;Hy/?M,i,`P TfڇHt ҹisdf{l3F>##3"*LGna[`U۶ \PzN,Isr&KԻӰ٦½g+4k#c&thR@c\S Ʌv 6㈿VK 4Zlx{vaNe {W?+ ؔ_k?c{H7YL5V. / 6"Oڠa׮0#7Ky ,q _I:Ղi];fGGte_i&Y[^hP5q*gZh C7xOs%'IKZ~:I(~6_.Cu؋ .@M]~:Gf4:&{- - t~=7x׏2HRTG[4!q P /ڃSA!mMe~iJM0d5[PQez״ ewb7 w?cpҚ 0_m[!J$̱);ۓ`JO`J+o ͘Fv:y ,aWQ Kt̖3_e =KH1pU]W|  =\!DY9-U6ajw+J* EQ5ZeR;wW2?hgԝ; o%!ucWnmKcDšƞ%ź87(ЕALjH?,V฀£!p:zr\oH~Wkz9O.gJǽOIG:7эBnj~]Ä4sTh$/>eC;+QJaGA]ZAx%ϑ%50~ R_CDcK}W Ցm?߂8iwWyZDHoZn!:?j_0 6l`qanEHF7"[3/|' ( eY}lU $mR<H𓶮I,ZGMp3 `YaE_Sc :W>VV}YllJ &]Z]|fq^Tr.ZGf1=U@?I|SHiQmVd\p־U-$]t!֚l tZ} k<~V&ZN~h{m~T߼o5DQ>'d&$G_'͟õO n]ʀdÖu~]^ T1e"up){_zi`j:eQz9$LF<6p,YU> J:!o)`V = A&˪B9)*UA605RQ Iѵ7J;.Mf DeH Mߑ t!܅NȦWdȦFE 4?SF,cQ ΝDZIA}Pd:,gȂwRXh,j'l_ /r@),`%u'MT L"5 ?Aq쌠KQP.IpcU6'sny/K+QΨcXL8_aևxpuRA/!ʩZ|Z+NA {.;ڲԪIEmћУg^ߩIV!qG% JiEUq4'E5FiT= auH*cLÂtKA [|>Z FEYnM毮3b^LqK^~9u U#<[wO3\Gr'pzQl.KwV5C#?[xM2]ZS1EUJ,N_u`JJPX= WJ;"AA)lAs nK0t2d,%gQew-CDg }5ynaIIIf"|g99sƑ]JG^ZTD "JD| b4% h1>0ًu+box'h\,擃m^XsNduH໣s*rsPr&,?iXf.󩶾RXkgLem!71U8JHY}\)c耚|Ī⦠y=nSeL߭& C΂!+C z-ɼqz`}SJP!8M9\4Y&yvؚ7ԇ[>XlsӀkLXzN [_ЈdQ0-(yiթ;UW?zyciXSW9FA88KJy!L܄B˲..pVjYm$PXQ($,@ZISJC(OUCΣU*Ϻ[GeF]緀L9.Ehw7bQ."" XY]Zn$%/ԑmHpjEH^?؝}' YZy :ZDH ZRz}3q'AZY!t:قy]WN10/$;/ ^Av_&%. }M)KIw= =}+Fkzy gl`*"G$rkD~DJeq#US |:V%e*ً uLpؘ^!DG>AJ$֍ rzblsgHUXḇ.恸d|s'+:y6;f*Io|7Ed;V|X5. o&{ϖ;|[4jz3 \]LBm}GFSXN%X-ӱMdr&pU9m{vZ)-9ƥ3(nN]cY뇵$ݐЍcAMoL߂KveAZN u}MmkPFKV`{r?QvR֙P!M}jU\'aMǒBa$ΠZI*"ls1C[V?,-9K ><ÃrԍOȒ (a(r"SX;ؗ2:.~^µA'ʯaWxEM:eȦj2頽SuT߰>bS]6h\[\7%uM`Ǘ*X-\q_5&<+B8wyAkx@sݩœ;jw?6Jǫ Ou~fK$kr̫r 1#Xۛ[.'8nAyv_?1endstream endobj 367 0 obj << /Filter /FlateDecode /Length 6211 >> stream x][o%q~W~/Ѓ歛4v`^hta9"oOUlV֙3"Y.[u~}u_UǓj;L<6isyrjj6ߜA 4>7)qܞޙσGkIO#"|x{l3<ղ=P>eBlathM-Zbդ@zZ xؚ]S 낖qnXDk5毛Bͣh鹉882kww⋳B~~Q_04[)7Ѵ]ͨRB$&Z ;P .{9H9r u¤\WO9uzIy`=jo$$%̂s3ۨ2Z?_<ȱrHU|QEiHM9һP&yfV^CeQQ)(;HU0+o%}<NjM\![ՎRoKszW:/pz:SS&LAZ-H~6nT7y+B㰠6WHjbr,SC$>B. ^| K5𧠍|Ghx٬k?2),&`9͟^!t27QI:_ևڞ#Y?#r2>T#J P(VGʳ8E _73D=7&WælrbJࣻL&  .5d QJ0sG7WNB&}1y/;ܧv MGˋ>R=cUA .dD.VAL4{^X~-=GKW 1 sRرV*Kk%JWAڢZ2cӮӕ8(ߛٺ|ƇqkJp:J&,|TfҔx֑3 ɵ: eLԻe|SYt7\v5q*G ъd*X {  w`y۟PS߭ &ڒ!Kue Jw)rW(~ Tl622寒F{!"ϠaJ6C/'NEd~[2Bڜ´ׯק"}ĂKa mx)#gɩgw`_zSàGK?Mwmӛ}l~^vK xfe]dWv4&ڜtn2q(X%GӠ[),% 4ئA sk N6-d#9DXzI cqg[edK4Z $-\!0@;E){^"K@ƕnC?_JB1ۀ|la*p(8OOaBiZ$6M6?^3̡㽊I<]f1hwy:3FUqjG 9ft\#%E@ oPi~K0I<_='mDE 7u5744mk.¤`lۧ+Oep2Yy(k3fjq slR+3 ݍOg;onFVM Wr*>UyͰ+xS_ôp{h -,kd-)Hn.8D̩mET8gV5NVj ^WqY^rV XHL6BNO4ݱRݎ|ڌlY%FUS.yOz27͸) |\~qyR4t:tx1e;9߱/'Hx!x*my|@SiKs5q<دewzQ۴^{jQ8L4 U !T_Ƈ2>o&-܏lsD}Z7!g.Me~?xF*K?dI`tnyp^]jH+ ?Zpp'̐JTݦ`og6C=.eHO4vG'EV*}R8f[3tnS`sw@G_ Og}Y9*#rv'E!YH5RUd5 S=gI E=_dQn="M _k  n5%0VQD؞5! ؛0 LբB{ cA/y%"c_8^cF*jMU,ͬJz=H&rTdQ(%9#zeD,>>G肓yvꚛË9̥~ bױTrU_9/Xv-ЋX|HYS O[u4@2\^+AoM+BG [&ة9aI  QMĆ(S?Ro ]. #!&f)Ԏ /TJCj#)yvJx\',cKzziOHM7p?G2L# jQFJc?zv̬a(c. ;\>9P>v<*"S/[VZ: 얐N08o(m+#Ua_}k!Qğ;Nkvӳ=LRiόxϒ%hTVԴtzajD c]UTB*Bڛ)4oa;73A{+4I׹mWpZ|PU#--kdx̽26%>3`'AQ*_Հ ԗaD6OtCҐR L{WBy"٨IÞ&㰼A:!Vrس hA*챁nq^m]͌*eL·:Pz 7hRÔy8TZENwrFB_ǭr9 GHbfs)Z偺Wҕ>_b%?O[k]!+*ťJ+Bl8O '3N؋걟*vq4ϏrkoDWuyG5w3h+u?F܀z8( Q[T<":3u22 :ln97>=<%&ȝ74"^:uF怛<񤴀2nv;I[t46@KDJ855OQ;f/WqC.'׋I9* OSy=Kky!r7 :xzE0h o*b;_\-uO3/kˆݧY(f$:_>qJUl #Su? HTDJNAtcG$ky8hxGxVޯ0\JV)#G>hvISf~Pt ջ"Xm\_T%0Edj \cw)Gd2jC WGtڊ V녥J (oye7e;7*f.\5r> E54z2S ԬͬMQQ,;)*`Gtޯ|O}>]ғCc47 =usxv&k[bt.ܸZ,!s}$}/rEb&2dsu d2._>mF3#RyڑLkڿk(J6YɂI:yqfjӞ ^áʅ%jF7Xʙ<2.Ec1Hc<ռu|x]*z͏k `1VZ$X2Fk{wdg4,p[z>˗U˦u8}%Uto^G>7[cߩRmd[bD}tOHضYόj{ 鞺>ҟ1- cg[s$ 1tU|ڪȫ.lHPANA7~uSUh =?2g9^endstream endobj 368 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 329 >> stream xcd`ab`dddw 641H3a!O/nn߷}O=J19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU8OB9)槤1000103012)ٽgf|;?̿ܥ;~3>,}} |g|Waq6;7<_s/wt\7Xp9|zaendstream endobj 369 0 obj << /Filter /FlateDecode /Length 7024 >> stream x=Ms%q93 X{cex ȥl+q*,(;qvILrWj7 `0`摫K4ݍAOOVh<3$~Q8(#N,"tQzV+4&`b4'z[bxDEgK6Eڅ1UvsQ^z3S5M@[;Y[lN,2J@f毞+ ف.?=($g/<`0:WLc4?=% ʹ ̣ܓו5o.ѭM|?4@ )yֳ47cy@@(Λa 5Qs|g HQ Рae6_45r^^9H@cl&f`!rb< ͌yYLΈj襵m(V49 c-Otvfh;c3c$Ocq]&E(eE!a#6͸Uʁ2`Ձ[r{!0gJ iM?ڷHcO'(tt U}."It/gy>y7ّ}i*"8v9)Mtuib(( ?xN#3Xqv׌>%N&;#H>C'/hOō!Z:ƫ׷'1 3e߻Dh$H,e?{i{msulP!Fp,wB@IjpL)$XAABvOQad>rΎ<":It Nk% kp5: 4ƾj$ʼp4J"!bzdԺg .dRcI!ԤF[Ihmއ ;=5QۯuOAP7C6/&׮ŹL0JVl}4{[%95Y:Rvmʇ: =ʉG;qŦdž7Nj$BPk04AM{8E>KhMƌGEPFR>U%C]xG?doqw{RѾ FNfNP`k1-b,ʓ'E .i̠lLO!GfܔUFE6 o*CJS,5i_CFqX!kLy9|^&g1Ϋ!(ݱ1 # rƈWW3 fv,UbfP# ܜnLfUoxHϱ,ceA-:u,LܒqB*0vJP9NYACEm, RiX^< =(<&"1:=ZWi xyXU7rbɪ&c )9։rxl-I ,XĉT4V|T>B&w:qƘNay|]&lQ.ьᔘ{ޅ%8k qA .)'<ſ0ole")a)ܷ$ .Ś$,_6y͜F/M./X8~;Y621ԜTC~KYLX<mX,W.kW`WAHVE(~=-hdD[qJrGr3;Bƙ:U+q)% )t$4 [QhG/<~b N] QȵnEC^[5ni)*&zp΋In(0J i;cEXm}ͦTl(TJHd*z~ڨSU Lu RsFuHFI[Ycfjrk)Ce䬚 D4:z9LFXaXa<"Sy{QTsJx({'~Lwa8=u~I'{N~2埲{ڟE8^d6Au_9 n.2{24t/gJZWt1Z\lAF~䘳(˫Y/.C\pEb( 7rzWV=\400-F 0HĉLm%*"w"P+wHBrju>_M5.\v"k8ĔAJǂ&^7~$V/Ѳ+nh~2ov?sXJ< x)2Dk:S؋Ryڳ,(-j|/u*Szy'|uLtR[м@Ī1.<5a&f.Iz#k24B}]Ʀy-L:ۥ=ih#rGlbBxoL[ R{{`3k9Čdw,0ʮ/V >v 04=X9ucq6)rsRCB ({ `7U=Jl&ׅz,cd1Rx%ULƶ0@ܕ77=eH_"iH X7 >oCۻZB6[m03A(LPGpTH}_(nz2b" b3Vyhr7BSb9L>U0Blp=߼|6 뼣^f> mD\ϡȁF~L2ܧX[D7L: V]qx+q7ݔ* 뀱!:CUuH7˸8lRAw+C݈V+!%fݥ=Ֆ8<ûYK*GGrxCπGAӼ9wF[0'-o0G%^O R_PേMFi} Ks*,6 B$z`>o3!>-2Ty~Ќ; ӌqIjjRDi`ݛ.{?r[UʆkòJ7 [`O(ɋWxM>9H,6L^XOHGP)k#*{ 6b1lNRBMG'| bNLy9XPTX0\{wP -x;U9^^-Xz}0mE9pvmFOGZ 63/ o.&*3xf H(R +40 w¬*iywvC4\^HHHHJ۟ * BOyCjJQGH.czވ;*:Fw4͋(ǔ]^%7'ř Κ2`M%^L%lC쒁G.b̈Gͺv 6=_^y"FH>o0~lK>)?X\/˜¯sPw :zzj@zwH0z`_W$,mbo&x5& E{r' ̡9/r|%ݲ5k,XBqߘ7$Ϣv&Y)E+M5dy^q]6)bW.C98J(᧩.uE*UMbʺG袥Eئ0H8]S"$b *ǃ2;7a{,>`*ጆy ! j(Yrɒ/ ]+9'ʌ.bg Ɓw'\lUaْmn@oIOȄyGlSQ{2c8ٛcg+/d H=EĮwєOweH+e" 6VׅU]?vt k J= !}h9C:Q vf#Ueu?h WѠ ŕ>"hSimgmx"P4WvJ^/1ۇa.P< iQRCvHxd1 ]Mݒ@(^Q\V "992q*=F&Hzk y$HrRa'aڥ`R ,3va߲3v`0W_O(VN\)u:6LoL 0r(R hbGCW\ds1} ,%+܈ +#x/xf |E$9hl%|mVH'$FCI.JvY_*-[ ba^-o)x=CC)^EG sD3TaY<΃i&s2: BtМureZtʸl+h$bNZR֥FfA'埼1`~|h۞po|9#IuPX{*K+6^TMJsaɎ6F]욂R>~½Fۍ ^:Hiu}jt{^қ^D[XTǴSphi0YH 5Al~endstream endobj 370 0 obj << /Filter /FlateDecode /Length 166 >> stream x337U0P0U0S01C.=Cɹ\ `A RN\ %E\@i.}0`ȥ 43KM V8qy(-xǡ7oݺu;GGBS! 4 endstream endobj 371 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 @XҡUqP(/ СY:ߝ|reA>E0u- -m1,O)x@fw5|۪B4^!#(֘N?i fw6MQ5fh*q\B in X3 HSendstream endobj 372 0 obj << /Filter /FlateDecode /Length 2476 >> stream xێ] !/Ũ$ӢH֛HWR"Hb 37 zZRssosT92a*vo3l@ԂfP\Dd:uu^,B%Bu[/\c9/%&%DWkzvCj.Zh;ݱχz\tȋvۜ;S+/Z-\Qy p"d!T"|7[=W&?93Y9#ƍ,3)![Ώ7ƀ+T 1S21.57RRݛ_IJIT sp^q DӟMD'K-o,9-VRow˾usi VuۅJ79c}!%Ĉk{;}|Ny66}]!{˯}؝+#He) ow}Us{eUz_M}d^W]O!%PO |a$* Dm.{5`.Jq[/u|w/'*N}Bq"PMVTK%P@M>jvEJpDT$LrhQ~EXӦh0.uo T*!Yr\MZ'0P-JA0hc'@rZ%82S 9DJb.)KƝCs/Y吾yTBќ FC3إOY _PuB^lk%f(I > {S%3ZuNXǖnݣbFt)TI!oRLև| d'+m·ɴ~%Tk[xkg37d}z*&)CZPa[>a]Jv}2HAyC[%H2ͦ(/Z;hXj:GOik~}/Uy"Q3y LF,[? ;#RRJ?U7{aS+y< u^zp< y类GnSO Ur>u%6ͺؒ C@ G `̌*a=CnjBE<5l@O MPή'Mr~JeKLBxq%\>qy$]|Ё.!>q~tMpIoVJ4C4'=Th{D]*>S᥆Ek{(_#v#mMѝM#.FçnD^WAd S*o<Cx ¾eLm*Y$JOz_yݻQhv}|\-z/6`-1/1$\+s6ĀgnGlَZ8λ`7kцۨ -%j @^h?Ey~. >~|(wRt'ŹKA*["BaˆJFtp?~|^R*Q&)GdH5~󯞶 r.2 bv7gudfB6yql_2endstream endobj 373 0 obj << /Filter /FlateDecode /Length 2515 >> stream xYo(dix'sBC;H(r)1!*~sP(dSۿb;5SO''Ľ/5%!r5d(#+6N4g1#b7V$2g-Fce1'T8MoqUiAX}g)o\$w ͓L-> c vۄD^~7|4c>+nPZ<7JJB|ah͠4U(]`v毻;,[k적 TSm LADl]K0GZ(`ƹyI_Y^5w1r`OReF@RH0tQa>a>6%:/ҖL!DIc*9*E0Jݬo=s"sƙ LeQų%Z,[vC7_7YU aORjH,,3X[k*֦v]2:)(7"+FU^g:7=Cp`.J铘IzWAZJ=)D+e4A 8!Ȥ!J)*.&1:@j>4L\t.2T>FG{n$(T;6aKϠ\pw3E&`PO.JC5]ѹ!z\~8[' .8dgxUJNr%SKnGtu8(#r7 , qq x[#'̽"NJ΢`y47>Ǡ(L;8[ɼUU 0튠?DρtzFP 3p/[Bs4~mv׃߭w׌7ݱ;eSG`0_5~ ?ҹ>~{G'ON&])wlNO)Gh> stream xZo.8\߆GPH;A)9V%PVv;C.ý=v 8=p8o_'/'_vr?a_Oxx;XOz Bfrzy?ɛMӜ c5z,?[|kw턋Zk'ߟ>yS7n+ap1][%$ Ɍ3|Qr8 VKgfLNNZ$f ]s}R|0]6@(5J7vX1_t+y]}~LpYՋi`3+SMx-ur<< GśYg/^)5}6,Ƭ-ѢIl8G7ouGSUI,q _mh{9]`c!p3aTwJUr+\^ M 4L*`9Js> `JpY AdU;2\GٽwymtxWd4xQĔy1Ⱦ6` ED:=]p 'vmp4:P>fPTѢ"ET"PŔT"b4ꮋG4|ZnHDe01!2D/"Y , AsӵStUQߑd eaBmP2?v$lQrǙuhnrKfC\h`u?,2LVXSpJ&M/v-RCFU#H^}q5tWO2mk /ҹosl٪QtX޺L: V3+(J>o,b"ܑѳ^ykB d?U"=AKZB U;4}d3OΗ]zǫoM 6m/7|7nuobe}:lKؔ)Pg2O ٙx9oWӴj1o~]nG))7 r=ol^_n f9WM~P W4j2*!-I!jp 2 a(}{]UpE#\L\e)11lp)cVO?C_azy:OKH%59&mHª,_B=HqzrH|)gr%B( L {&3XGw| O[Z!\r1 Dw-2{)%){!7:Cكk({e&#V<ֱّn6rf*YtnfqXj:O!꧘\1tM8s עȰ! ~]P}ަcB !311әY8o>d^,9X.zm >fK઼엛U3N7iPW립.r@GK= 3vk,-J!uL!xPHyLZAh!𵀚D%6]XMD.S.aځV;lc w.r+Yr/h:^6^LӦH(!o n4DqFxfWί60U봏 }mUw{K{cg]?׻koAĆÖJrwGpUDMu#Smފ'\[n.0X'!!DXǥ}m$]@/#5(ٖq$Z N߁7J9VaTm%bNIW$aasiHq(- /ԝ^n80 !,(|8U"w¢{lJi F۞o94,Dbiw[³|D;jߴrsE3飗lΦS#BۻB(&w z_z0~2&!d~?U# ?_f3endstream endobj 375 0 obj << /Filter /FlateDecode /Length 4144 >> stream x[Yo3-9yЬ}('DZ̓[fdsC^W-/,07 /bea̩ ƚoL[f:?M;_h|v򷣓'bǸgVN۸.ע᭶rȗss KHjX|s^R:m:0{5Y֑L\~3J=KB;:/(Ja95 ~@2Nk*{87YLZi+& ׾rl3nZҨH9Jx;;8jդ3){17A)|"D,WR&Ey*k@uQuLeq;`AVl7e2AL9CWfWb/T+^D{)& ~ .jוOy жm#!j 'Ag 7vҜ5_/C=+^ۓRcM1&u [o20D5^:29qZ[r @7জxKJf|8Y':ThPgԡO]jLJ Q74w]Y/ PРZ1Q2҉1.+r/`gWby?^U\ |R@fCV˰L4EQu!87tQ@ڎ cXH#j:$c4M v4ֹ @Tn+LAǗ4s@Sd9vH[YGI-ɇytP _:MSG!ɝuJ2Z.ksUU Z=["#onQ6_p tHni96_ہe%A G2(XB|w,rrGJ:vT^\#l%bJqda2dF8*i=EHe$#Lz0!' "_D`.ĔSZd"OEPIe6Fd;ؖuOAZB-" rJeXNN p,sfSqp,ƍ( Xed 6-]/ Tɡ(y:_߯RJ;lh"; c@28VX}S\ф:u b, ` ( ggc|^(bm ]Z8Gej2gEʮ "e)7_jEvje78daO9oDWj?!&!H0Z/ Lu'ޣoU@K+o)Ĺ\Wזf LHX$:xMpH‚5qe9WN[8/*T RTd҉J*rGUR]GR!bгy@1)8 !ösE,W4Nmpmܠk0PXE ^]f+~U57DR.tzɪՎLҷqA?ʖlHjqW# ׃K`SƴR辐rlOvK} ߂ *~N?.a3 xn#!YhdV).}܄*}vfOźG@iE|?Z6wr1ދ QyHptC8ӻ A+I!: X-Ig8Y\JwߣF|sFT3/~ǾԾ]x51gJ{mLOt-F~4$t]5ƈ1"a`(js>pnКƀt} 4̇]C8;mӘ k.ߏȡP&ڷFuN6k;OW !xqs۞)_N6AZ,endstream endobj 376 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 343 >> stream xcd`ab`ddp 44H3a!kc7s7'' ~O+XP_PYQ`hii`d``ZXX('gT*hdX뗗%i(gd(((%*@ݧs JKR|SRY~t^}33tG]}{zz&~7޳S!'~ n`׋>۹Y}}!?D+8h[Z_قG,w4\7Xpa`endstream endobj 377 0 obj << /Type /XRef /Length 260 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 378 /ID [] >> stream xѱoa;H*ԭIF0Xҡ"]w6h "fJ"7w1Dt'^(W%C֫sc));W- RVܔBwd>~da<{xۀ~ >h[D*4 )aNМ4j~=3N\ubeC!Xp&yWeO7z-X8MoqN;Xr67 endstream endobj startxref 208145 %%EOF multcomp/inst/doc/multcomp-examples.R0000644000176000001440000001761612234660136017501 0ustar ripleyusers### R code from vignette source 'multcomp-examples.Rnw' ### Encoding: UTF-8 ################################################### ### code chunk number 1: setup ################################################### dig <- 4 options(width = 65, digits = dig) library("multcomp") set.seed(290875) ################################################### ### code chunk number 2: lm-cars ################################################### lm.cars <- lm(dist ~ speed, data = cars) summary(lm.cars) ################################################### ### code chunk number 3: lm-coef-vcov ################################################### betahat <- coef(lm.cars) Vbetahat <- vcov(lm.cars) ################################################### ### code chunk number 4: lm-K ################################################### K <- diag(2) Sigma <- diag(1 / sqrt(diag(K %*% Vbetahat %*% t(K)))) z <- Sigma %*% K %*% betahat Cor <- Sigma %*% (K %*% Vbetahat %*% t(K)) %*% t(Sigma) ################################################### ### code chunk number 5: lm-partial ################################################### library("mvtnorm") df.cars <- nrow(cars) - length(betahat) sapply(abs(z), function(x) 1 - pmvt(-rep(x, 2), rep(x, 2), corr = Cor, df = df.cars)) ################################################### ### code chunk number 6: lm-K ################################################### rownames(K) <- names(betahat) ################################################### ### code chunk number 7: lm-mcp ################################################### library("multcomp") cars.ht <- glht(lm.cars, linfct = K) summary(cars.ht) ################################################### ### code chunk number 8: lm-confint ################################################### confint(cars.ht) ################################################### ### code chunk number 9: nls ################################################### DNase1 <- subset(DNase, Run == 1) fm1DNase1 <- nls(density ~ SSlogis(log(conc), Asym, xmid, scal), DNase1) K <- diag(3) rownames(K) <- names(coef(fm1DNase1)) confint(glht(fm1DNase1, linfct = K)) ################################################### ### code chunk number 10: nls-confint ################################################### confint(fm1DNase1) ################################################### ### code chunk number 11: nls-cor ################################################### cov2cor(vcov(fm1DNase1)) ################################################### ### code chunk number 12: lm-band ################################################### K <- model.matrix(lm.cars)[!duplicated(cars$speed),] ci.cars <- confint(glht(lm.cars, linfct = K), abseps = 0.1) ################################################### ### code chunk number 13: lm-plot ################################################### plot(cars, xlab = "Speed (mph)", ylab = "Stopping distance (ft)", las = 1, ylim = c(-30, 130)) abline(lm.cars) lines(K[,2], ci.cars$confint[,"lwr"], lty = 2) lines(K[,2], ci.cars$confint[,"upr"], lty = 2) ci.lm <- predict(lm.cars, interval = "confidence") lines(cars$speed, ci.lm[,"lwr"], lty = 3) lines(cars$speed, ci.lm[,"upr"], lty = 3) legend("topleft", lty = c(1, 2, 3), legend = c("Regression line", "Simultaneous confidence band", "Pointwise confidence intervals"), bty = "n") ################################################### ### code chunk number 14: aov-ex ################################################### ex <- data.frame(y = rnorm(12), x = gl(3, 4, labels = LETTERS[1:3])) aov.ex <- aov(y ~ x - 1, data = ex) coef(aov.ex) ################################################### ### code chunk number 15: aov-Dunnett ################################################### K <- rbind(c(-1, 1, 0), c(-1, 0, 1)) rownames(K) <- c("B - A", "C - A") colnames(K) <- names(coef(aov.ex)) K ################################################### ### code chunk number 16: aov-mcp ################################################### summary(glht(aov.ex, linfct = K)) ################################################### ### code chunk number 17: aov-mcp2 ################################################### summary(glht(aov.ex, linfct = c("xB - xA = 0", "xC - xA = 0"))) ################################################### ### code chunk number 18: aov-constrasts ################################################### aov.ex2 <- aov(y ~ x, data = ex) coef(aov.ex2) ################################################### ### code chunk number 19: aov-mm ################################################### contr.treatment(table(ex$x)) K %*% contr.treatment(table(ex$x)) %*% coef(aov.ex2)[-1] ################################################### ### code chunk number 20: aov-contrasts-glht ################################################### summary(glht(aov.ex2, linfct = mcp(x = K))) ################################################### ### code chunk number 21: aov-contrasts-glht2 ################################################### summary(glht(aov.ex2, linfct = mcp(x = c("B - A = 0", "C - A = 0")))) ################################################### ### code chunk number 22: aov-Tukey ################################################### glht(aov.ex2, linfct = mcp(x = "Tukey")) ################################################### ### code chunk number 23: aov-Tukey2 ################################################### glht(aov.ex, linfct = mcp(x = "Tukey")) ################################################### ### code chunk number 24: twoway-mod ################################################### mod <- lm(breaks ~ wool + tension, data = warpbreaks) ################################################### ### code chunk number 25: twoway-K ################################################### K1 <- glht(mod, mcp(wool = "Tukey"))$linfct K2 <- glht(mod, mcp(tension = "Tukey"))$linfct ################################################### ### code chunk number 26: twoway-sim ################################################### summary(glht(mod, linfct = rbind(K1, K2))) ################################################### ### code chunk number 27: twowayi-mod ################################################### mod <- lm(breaks ~ wool * tension, data = warpbreaks) ################################################### ### code chunk number 28: twowayi-mod2 ################################################### tmp <- expand.grid(tension = unique(warpbreaks$tension), wool = unique(warpbreaks$wool)) X <- model.matrix(~ wool * tension, data = tmp) glht(mod, linfct = X) ################################################### ### code chunk number 29: twowayi-mod3 ################################################### predict(mod, newdata = tmp) ################################################### ### code chunk number 30: twowayi-K ################################################### Tukey <- contrMat(table(warpbreaks$tension), "Tukey") K1 <- cbind(Tukey, matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey))) rownames(K1) <- paste(levels(warpbreaks$wool)[1], rownames(K1), sep = ":") K2 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey) rownames(K2) <- paste(levels(warpbreaks$wool)[2], rownames(K1), sep = ":") K <- rbind(K1, K2) colnames(K) <- c(colnames(Tukey), colnames(Tukey)) ################################################### ### code chunk number 31: twowayi-sim ################################################### summary(glht(mod, linfct = K %*% X)) ################################################### ### code chunk number 32: twowayi-eff ################################################### K %*% predict(mod, newdata = tmp) ################################################### ### code chunk number 33: cellmeans ################################################### warpbreaks$tw <- with(warpbreaks, interaction(tension, wool)) cell <- lm(breaks ~ tw - 1, data = warpbreaks) summary(glht(cell, linfct = K)) multcomp/inst/doc/chfls1.R0000644000176000001440000002517012234660136015177 0ustar ripleyusers### R code from vignette source 'chfls1.Rnw' ### Encoding: UTF-8 ################################################### ### code chunk number 1: setup ################################################### options(SweaveHooks = list(leftpar = function() par(mai = par("mai") * c(1, 1.1, 1, 1)))) #options(width = 70) library("xtable") library("car") library("MASS") library("multcomp") library("foreign") #dataurl <- "http://www.src.uchicago.edu/datalib/chfls/data/chfls1.sav" #td <- tempdir() #derror <- try(download.file(dataurl, destfile = file.path(td, "chfls1.sav"), # mode = "wb")) #if (inherits(derror, "try-error")) { # cat("Vignette could not be processed -- download error.\n", # "\\end{document}\n") #} else { #### data see http://popcenter.uchicago.edu/data/chfls.shtml #chfls1 <- read.spss(file.path(td, "chfls1.sav"), to.data.frame = TRUE) #} library("TH.data") load(file.path(path.package(package="TH.data"), "rda", "CHFLS.rda")) ### warnings: Variables DC04, MZ09, and MZ11 contain duplicated ### levels. These are not needed anyway, so we ignore the warning ### for the time being. ### choose neccessary variables org <- chfls1[, c("REGION6", "ZJ05", "ZJ06", "A35", "ZJ07", "ZJ16M", "INCRM", "JK01", "JK02", "JK20", "HY04", "HY07", "A02", "AGEGAPM", "A07M", "A14", "A21", "A22M", "A23", "AX16", "INCAM", "SEXNOW", "ZW04")] names(org) <- c("Region", "Rgender", ### gender of respondent "Rage", ### age of respondent "RagestartA", ### age of respondent at beginning of relationship with partner A "Redu", ### education of respondent "RincomeM", ### rounded monthly income of respondent "RincomeComp", ### inputed monthly income of respondent "Rhealth", ### health condition respondent "Rheight", ### respondent's height "Rhappy", ### respondent's happiness "Rmartial", ### respondent's marital status "RhasA", ### R has current A partner "Agender", ### gender of partner A "RAagegap", ### age gap "RAstartage", ### age at marriage "Aheight", ### height of partner A "Aedu", ### education of partner A "AincomeM", ### rounded partner A income "AincomeEst", ### estimated partner A income "orgasm", ### orgasm frequency "AincomeComp", ### imputed partner A income "Rsexnow", ### has sex last year "Rhomosexual") ### R is homosexual ### duration of partnership org$RAduration <- org$Rage - org$RagestartA ### code missing values org$AincomeM[org$AincomeM < 0] <- NA org$RincomeM[org$RincomeM < 0] <- NA org$Aheight[org$Aheight < 0] <- NA olevels <- c("never", "rarely", "sometimes", "often", "always") orgA <- subset(org, Rgender == "female" & Rhomosexual != "yes" & orgasm %in% olevels) orgA$orgasm <- ordered(as.character(orgA$orgasm), levels = c("never", "rarely", "sometimes", "often", "always")) orgA$Redu <- factor(as.character(orgA$Redu), levels = c("univ/grad", "j col", "up mid", "low mid", "primary", "no school")) levels(orgA$Redu) <- c("univ", "jcol", "upmid", "lowmid", "primary", "noschool") orgA$Aedu <- factor(as.character(orgA$Aedu), levels = c("univ/grad", "j col", "up mid", "low mid", "primary", "no school")) orgA$Rhappy <- factor(as.character(orgA$Rhappy), levels = c("v unhappy", "not too", "relatively", "very")) orgA$Rhealth <- factor(as.character(orgA$Rhealth), levels = c("poor", "not good", "fair", "good", "excellent")) orgA$Region <- factor(as.character(orgA$Region), levels = c("CentralW", "Northeast", "North", "InlandS", "CoastalE", "CoastalS")) orgA$AincomeSD <- orgA$AincomeComp/sd(orgA$AincomeComp) orgA$AheightSD <- orgA$Aheight/sd(orgA$Aheight) orgA$RageSD <- orgA$Rage/sd(orgA$Rage) orgA$edudiff <- as.numeric(orgA$Aedu) - as.numeric(orgA$Redu) orgA$edudiffSD <- orgA$edudiff/sd(orgA$edudiff, na.rm=TRUE) orgA$wealthdiff <- orgA$RincomeComp - orgA$AincomeComp orgA$wealthdiffSD <- orgA$wealthdiff/sd(orgA$wealthdiff, na.rm=TRUE) orgA$RAdurationSD <- orgA$RAduration/sd(orgA$RAduration, na.rm=TRUE) ### Data set as used by Pollet & Nettle (2009) save(orgA, file = "orgA.Rda") ################################################### ### code chunk number 2: table-summary-PN ################################################### start <- polr(orgasm ~ AincomeSD + AheightSD, data=orgA, Hess=TRUE) step1 <- polr(orgasm ~ AincomeSD, data=orgA, Hess=TRUE) step2 <- polr(orgasm ~ AincomeSD + Rhappy, data=orgA, Hess=TRUE) aic <- formatC(c(AIC(start), AIC(step1), AIC(step2)), digits = 1, format = "f") bic <- formatC(c(AIC(start, k=log(nrow(orgA))), AIC(step1, k=log(nrow(orgA))), AIC(step2, k=log(nrow(orgA)))), digits = 1, format = "f") dim_theta <- c(start$edf, step1$edf, step2$edf) logLikel <- formatC(-2* c(logLik(start), logLik(step1), logLik(step2)), digits = 1, format = "f") ################################################### ### code chunk number 3: table-summary-PN_corr ################################################### step2 <- polr(orgasm ~ AincomeSD + Redu, data=orgA, Hess=TRUE) step3 <- polr(orgasm ~ AincomeSD + Redu + RageSD, data=orgA, Hess=TRUE) step4a <- polr(orgasm ~ AincomeSD + Redu + RageSD + Rhappy, data=orgA, Hess=TRUE) step4b <- polr(orgasm ~ AincomeSD + Redu + RageSD + edudiffSD, data=orgA, Hess=TRUE) step5 <- polr(orgasm ~ AincomeSD + Redu + RageSD + Rhappy + edudiffSD, data=orgA, Hess=TRUE) step6 <- polr(orgasm ~ AincomeSD + Redu + RageSD + Rhappy + edudiffSD + Region, data=orgA, Hess=TRUE) step7 <- polr(orgasm ~ AincomeSD + Redu + RageSD + Rhappy + edudiffSD + Region + Rhealth, data=orgA, Hess=TRUE) aic <- formatC(c(AIC(start), AIC(step1), AIC(step2), AIC(step3), AIC(step4a), AIC(step5), AIC(step6), AIC(step7)), digits = 1, format = "f") bic <- formatC(c(AIC(start, k=log(nrow(orgA))), AIC(step1, k=log(nrow(orgA))), AIC(step2, k=log(nrow(orgA))), AIC(step3, k=log(nrow(orgA))), AIC(step4b, k=log(nrow(orgA))), AIC(step5, k=log(nrow(orgA)))), digits = 1, format = "f") ################################################### ### code chunk number 4: table-summary-stepAIC ################################################### ### stepAIC does not automatically remove missing values as of R 2.13.0 orgAtmp <- orgA[, c("orgasm", "AincomeSD", "AheightSD", "RAdurationSD", "RageSD", "edudiffSD", "wealthdiffSD", "Redu", "Rhealth", "Rhappy", "Region")] cc <- complete.cases(orgAtmp) summary(cc) orgAcc <- subset(orgA, cc) step_AIC <- stepAIC(polr(orgasm ~ AincomeSD + AheightSD + RAdurationSD + RageSD + edudiffSD + wealthdiffSD + Redu + Rhealth + Rhappy + Region, data=orgAcc, Hess=TRUE), trace = FALSE) aic <- formatC(step_AIC$anova[,6], digits = 1, format = "f") ################################################### ### code chunk number 5: table-summary-siminf ################################################### ordRegr <- polr(orgasm ~ AincomeSD + AheightSD + RAdurationSD + RageSD + edudiffSD + wealthdiffSD + Redu + Rhealth + Rhappy + Region, data=orgA, Hess=TRUE) K <- diag(1,length(coef(ordRegr))) rownames(K) <- names(coef(ordRegr)) s <- summary(glht(ordRegr, linfct = K)) variable <- c("Partner income", "Partner height", "Duration of relationship", "Age", "Difference in education", "Difference in income", "Education", "$\\quad$ University (reference category)", "$\\quad$ Junior college", "$\\quad$ Upper middle", "$\\quad$ Lower middle", "$\\quad$ Primary", "$\\quad$ No school", "Health", "$\\quad$ Poor (reference category)", "$\\quad$ Not good", "$\\quad$ Fair", "$\\quad$ Good", "$\\quad$ Excellent", "Happiness", "$\\quad$ Very unhappy (reference category)", "$\\quad$ Not too happy", "$\\quad$ Relatively happy", "$\\quad$ Very happy", "Region", "$\\quad$ Central West (reference category)", "$\\quad$ North East", "$\\quad$ North", "$\\quad$ Inland South", "$\\quad$ Coastal East", "$\\quad$ Coastal South") estimate <- formatC(as.vector(s$coef), digits = 2, format = "f") estimate <- c(estimate[1:6], "", "NA", estimate[7:11], "", "NA", estimate[12:15], "", "NA", estimate[16:18], "", "NA", estimate[19:23]) padj <- formatC(s$test$pvalue, digits = 3, format = "f") padj <- c(padj[1:6], "", "---", padj[7:11], "", "---", padj[12:15], "", "---", padj[16:18], "", "---", padj[19:23]) siminf <- cbind(variable, estimate, padj) colnames(siminf) <- c("Variable", "Estimate", "Adjusted $p$-value") ################################################### ### code chunk number 6: table-summary-siminf-tex ################################################### siminfPrint <- xtable(siminf, caption="Parameter estimates of the saturated cumulative logit model with associated adjusted $p$-values of the max-$t$-test.", label="simOrgA") align(siminfPrint) <- "llcc" print(siminfPrint, table.placement = "h!", include.rownames = FALSE, sanitize.text.function = function(x) {x}) ################################################### ### code chunk number 7: table-summary-comp-edu ################################################### s <- summary(glht(ordRegr, linfct = mcp(Redu = c("univ - jcol = 0", "jcol - upmid = 0", "upmid - lowmid = 0", "lowmid - primary = 0", "primary - noschool = 0")))) comparison <- c("University - Junior college", "Junior college - Upper middle", "Upper middle - Lower middle", "Lower middle - Primary", "Primary - No school") estimate <- formatC(as.vector(s$test$coef), digits = 2, format = "f") padj <- formatC(s$test$pvalue, digits = 3, format = "f") comp_edu <- cbind(comparison, estimate, padj) colnames(comp_edu) <- c("Compared levels of education", "Estimated log odds ratio", "Adjusted $p$-value") ################################################### ### code chunk number 8: table-summary-comp-edu-tex ################################################### comp_eduPrint <- xtable(comp_edu, caption="Estimated log odds ratios for comparisons of consecutive levels of education and associated adjusted $p$-values of the simultaneous comparisons.", label="simRedu") align(comp_eduPrint) <- "llcc" print(comp_eduPrint, table.placement = "h!", include.rownames = FALSE, sanitize.text.function = function(x) {x}) multcomp/inst/doc/chfls1.pdf0000644000176000001440000024521112234660203015542 0ustar ripleyusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3887 /Filter /FlateDecode /N 80 /First 660 >> stream x[[s6~_m nN'3͎+۹blneɕ$EM'ّ%^߹1L2-b17L8MaJfJ-K5Lp!Ä  Lh%LIPY39UbRK\A+DB)SVZ4fh,FCLAbFr 3 ǖYNxN1JpfL]&ea%2L*ht"5K,H{3eRnPybjiI(R~UR Iji q1-C77B 1Q* *V[L7)c!0|D4( ֠,A( *P9A91Ufhր2 e)@hP1hX8JiAĺK@\A5!S.XwB &+ĂR%lD32o@YYL(T'Ҙ_Yt4+3@E'eJכE{(-.ٓ'2b1ʜ/F \'.?-}.b1W(9ZLj|\Lo/r>3h|^qϝ|Zd;tD - [fIZ./@<+OK}G L"\\%hF'H~W'1C=bbyX Tzm^^V7V0z'AT_,Eo|U_Uw- ^n_ n*@Xtzt D=bZ^$n  Z>W 9!TӒZUk*Q; Z%q`Y^\^ QteQ}h]GhD˨n!CDYv"u&[Ը>ƒbC]5뼻,!z`\ZaMa9-7PTi˭URP= <}.:;{U( [H]tlD/3NxJ;ʦYm{]ժڀw4zGlJ{(û,I e;qte7rͧE4u\~b; ސJ$ ,,r`p?ÂFѺQT)߃0}ZAg})%pevDO'LGCPյRJa\L8Ӝ9?cюe2q~&^yc茊wFt-э+4(iJNZEER%JS_iHB(-gK'yUwU _'M# H+}5jzfa\iMyHŬd}uݙ iA6G@V]@TwyBi!@λ1WXbRuPhabمd4JQ?! D*F퉁 C5w1G{h(\QSF? ~$k 5'$s(yȖߏ*-"wvyKנ{ vV7r|ٴ@Uq]̲eͩ`/rB0רiX4#Ӟ?zKl鷎TZ?vFZG"<_ xTwI[7&gY \a)4A$u;nPܗ%(:j0,}oۦmO~|}!xip"C?+,\xBFnֿ3}*=V>{ lbRfѓTwH"~hgfݜ1.~L&r{SEhY8I67{IݸB+;4hwpk爙;I?֓ nG""Y޷ Mퟁ/l o*ˉjHzrfl%D]GQ+dpMo%,R4Z]20c$dӝɮSm^zB75q "{& .Wy7T?CU]=%r=bsQʈPq&Ϛ :XDkHkq=duo)M$6hŖGô&-á-90V~g0{:A,{!J=[C먃=Og 6̓KJlN:\RMؖED?>gj6 ,l ~H StsϚY Бx @ AށR .: \A9 >1҄*>[P7%>rxO NZ[9P͐[ɪTKo!2 Gɉ>E7a>S,m#קۦr o`!H),.8e^;zcendstream endobj 82 0 obj << /Subtype /XML /Type /Metadata /Length 1337 >> stream 2013-11-01T09:04:19+01:00 2013-11-01T09:04:19+01:00 David M. Jones CMR17 endstream endobj 83 0 obj << /Filter /FlateDecode /Length 5281 >> stream x\Is$u0:X>9mv)etVHvPD"|0 d{88/˗UYK/a չ|w+ʕW?گn/ ~\Vta%}57\fp!6F6CsGm赈QyW٭ܠ<$-jLyWh!Z/e-TxTO7Q&iMoh}*y`xYr/6(^^_?ǂ&xƃČ~-ٿ᱑~\ܯi׍em.n77/h)L.|m6ڕ@pZA6Uz-xx׼^o#@G(Lb0JkKv"Z'Ъrpjn':8^Mg"wrJN3~a(eLչKT`Z?KAhݒF0 &[P:Q]HtI#/##)'|tզkΙ46uNja#7W~܀qB~! 5+mvQP{,N,3HĹ<־K&:aNDM!jeH *H߼'^!rF6%%u678j8q48_b@ق H'%[8AS629)l-ƔcO٫8-8X}7v36|% в}b!s]Qbi?%}#,+P@v7,qj[ecJ rHZ"b"ԛOJ2B_Imh6{bA,eiN)~uG_kbڗʛܭ6f:wɧigM%,Woxͣ6"=ԖD/=o (ǡfÂ쉧}BTgfZZ ] ÈL`z:ya.U5]U5zAin0eC}"ABDgeb$epl \%}z]Idq像ۮY[t\pt7Q`IŮ*l阒tsI n՞d% /Z;מ50*U% F^W]Ⱥj>Ix潜.&s3/YUS6#w@сJ%.}38}^Pf3մ5rvZV~]wt[Fbzcep SܢQi[ JT+ O)}6jgO<8HPdo(U",YQ A 8Ħ >ד`gMfc%tY8 ˰qHv]pǛ +)2(䌟xHL-PÎ, Z|6ŗ+$_L.3[xoSn 85$9P{{ە(b 1 q5ɞj&SByý iMa`CRo6մ4li$f+B -@Ǣ;:d2kU`/aif6='n?炘G]:5&/XCL{ž5d']8qI?7M#o)a,7gꜸ{ɹhqn)]tn9ŨRTrSǑ +I񵤺ѠNwGJd~Pjr%]%QAC+kLY虥Uz,}N!$&)%Iw*kEi 9Jo ~GwdxK&qvzK)IC? 'D݌#NƣFZK[(#L-P75w&Hv\d 303iE&58OR6ٌ TCT35Q[@ݫ/8 Īaǩ3-atkTȵQ`rUw5kp![t=}3Ui^ZU>1GLl~0$#RҖ:1S.wu٠;9]&DQMDHvvy@ F[Ɍ$/0ܽXTEZLAaɍ 9i7Jj/c2xB%"԰g_+BRE 7 SlF,I2xr,*(bL,ӼYi Km?Nd/`9=#/_u1Kڟ]l P/!zNNb@7G\)%'N[xwXF#) eqt$Ƚ/C:w5qi`ZR¯}U) V.4p!6.);d~Xw */@`3 Y衾 CUY9HK"aՐY3-,+F /6JY}m3r~UV%2i3E+aƈKXU ): ɶw^q ِ>aFUm[ffpq + 򊥤Ul%՞(h(Be%;z&A0=v'l"XSTB ( 4')C)#R->:`ar#QW>Z0C>j&MZIAC,bOkM@1n8@)_\^LnB~yt[J65Ts⥬Q η&kJV TxT*p_ ק&IKO)}3UWexWf[zSY:٧xQ8R7B ^Ur$Kݦk)N 6= >"x-:kÚ[z v_"V4deMf]UU9j>Cw\ԇ-ܗ9oȭeNq̝uHp0Rr -Gj&قsznz ךB8%hM^@yocsUT*)'mr8PqR*br^R%i ^gRWg7T{&VW .r::ݑ~ݗ ~lStL]X_L+zyJHREyy'nFTkÐx̟yeH%&q4c)ݷ[4,{80Tt+(YFwrP Y4K֗h4.}5Hm񦣹n,e+3*ʡ#Ӥ& E,yUhv|cYo)}I1s]1vF{drC-jZ7wVP);V+.[Ԭ~쁄RdݡR[chhH;*{U.읱L_yxd.n7hWj !‡IzPFj)%,HŠsФ trJ+kv]*TaLp!{ޅO3n͝p>KbG%/T Zzv'*s=RG/~Η덌1O}k$ >epX9 'c@ب[/fGWjCML^֮f\QCy{j"t[-C:$6nRLMPϙwʅEuX)ew!PV*0 ,xytbg"Gxq_.r1zYztޛ6$s,?^AHi]?9ZU:] Ι>r90wy gM;"]sE4g2?}Tp|/ ҝEW/=ad1@d4K4U2!v=5%հ+b3N4w[t%1z SW?U'NON9`DW`z=#alA"fp3( "vgHe NLr Uy:-PYJQYJpO e4GxzU}Z%7s\Uz)i,a1&ݞzǑR79kOj!y_L Xr0 sY+c NDz)\KnX?̸&8ٰ NTMͣבJ_3+0v6 3 5Ԏ9:Hb|~>0:K7Q }ǻ_g^_cyߵ%koP}_xSm^/#r

> stream xPwv!FeսTDbXT~jy~pwxǏ8`A@ 'qj2ښd2I1518I%3]vNN3;>yHBF$)IHN_; _/ !R7 Q7~dqɑb(7*VV)>ٺuqM@,V$+j(lZUhQ7u/][VVԔDk yW=(+0+%jC:W-6*RQrя ZdT\ ZhRZ 24J; bLFDb+C$)ēBxMaaaߊ+/7?|F.xDAstA6QyGKQbQ.#ǽz:# k:?m5Crlڟw'aⳬ>>Kv]A'T(C$&ŋW#C sd6FkaܨP߄p#7r=ڽ9f5Bm˯_\Sa]AK˜{S_+TiQXϒg4-| <64F}8スKd[t|^svh/6 D]PޙO?pZ&xeksMrL[g Nt͡L(QB@p(O~DOV+eHaJHN+̀ň}%JUw/9%[ج͛ld ϛM4tCEr8mNu 'hGIvaLf%O_FA2xN)i,:>=9i%47ekm<;TvmIRt`r!Ijٞ>fk)Ìl~G}!<Qf )PS-X^]].3Khu3=`8Ğ0͝9 -Ъ,O`F*YTgG/9=gBw I9-eRʪZYG)x^r 3M27R8SX8)'*vA} KloD;fnI* Q84"?p|'W^jlCg2ti{+~gϷkq}1IX*n^o|_Z3(f{DW¬?r KdeaXI4_þC*7:1sonFZ+9G)."(e"m`K<;endstream endobj 85 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3242 >> stream xWyPTwMC4H FT6I<8TA @7M4GC׷OnQA$ƨI4M2['?j3f~]~\![cƹ+٧y3! gnh ,aHxb]XR*eȄW 7lׯ,M~TV Kdɸ-?S8_qX)Ɖ32A<DZ$+ggfo^juDC$I>b+xXGIEl v;8"xX@,$R "hk!\hn?l\"אc S~hcZ\^D;kɅ J 1>ET^Xߠh-PF=`ۡ4lN/V=SdSB Ի܍7U%kMgTj@mg`}oQ ^T3sdZ^WE7(}_Ejc'.S<F#5j@NߋV0VYLFZ#lHB{{\>&p>\"μw0p.m<2(TSY `&5fj;膩~ PP0VSscpxNTjVܭ[ '*H"%E/* FF*Ƥ9#I?^Zvhvw4(?#mNVN.]I})hgVYȊQ*"9XMl}{v#"^*RQn3>/'r =)Y~UYSJ: FZ+np-JOLV1$;΍z舙-x;#k]>BP(ZBqU?cz0sYh#! °y`G r30ǜ@~#7PNNd# JwmѬW5UZ`tW5u9N}Y!gҲDbnCOL3|E-+-,sq쬓C%h=o 7}UM{~ 36;l.hXW~\BU/ӕrbVfw_GoGCZ.*"8s4:ЛiXaT%~6yh6IٴA)yV9iZisִy.*M./n)ev& #Uʿ,|Ρ[cW!ݎ8܊f)d({kMt|z$DpbD2xj\bT?z 7~nȫ5[ʷY#}(7}{.w}܀v3kl_nu!>ԓ.r3YSӥ L. v JUji/\]%X,5F60NU@^=spZj@vVnfRL9Nۦ/ο%ĿT)FQ*t =bwlf$ ;먼=/?WlƦwu_ȏ*<juwp)p`<Oi:|c|Pz-h`v/;۰)sv nŠ*nXu+i:~G!ޖoh$+|4R>jhǜeiWP\zsk|#S\2.@BV&n/ǧ*5oʝ[Ϙ+;(_Yk\W0G?xO{}[6g҉}(C>wTMuԷ77}|n=>Fk:dUݣ6zjVpspHM-;Z,k^ƫ Ӹڼvͽ@@,Tt p/"h42iq8q9H`PkݝV+!oec<*EW _s$endstream endobj 86 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2213 >> stream x pe{褻eqB݃k0AJP !0I&&=92$7s$L'(@ 4. ("nmg"jYZVmVWuuW}TDBRQѱk"}͒UIaHBBHPwؤSq1wn AT$Z7dg#E̟~.GkLX)C1)?굺L)_S&~ye&8WgH&8g|BJ 2 67QچZ`B EwQv/a7Aeq?ӬќE>3p6b|/Γn>zE] )W,Ykss+x}ޱS0o6Ύ$%3}A]> KmPiZ[zYgH$=6CuqfsIݞ]g\WAƁ ~͒vKf1 =_fp SFCj' [N]<ŧwkVS0]o~NQZ Cu"s pncħY,噸L?2X]L~h:~nIs<-hRM\ߠ7';vK߱+Ehr N$ǰU?rFy>،Z5.n~[>&xHiYz7dNjLԪ=[ͽyZɧE gzpU]釀i=wmZz@ wr1GY';799%6$1WaG1@w-<0HsY{W2hdY/VXcL-)ٯBdݲ/PMJJ,/xGwob ش Ĺ%Ɨ;1*kZhr[|#pՃG nMm!+EzIG%;B:Hq%|pNE["/u`sJ3FM^ׂ U'#GHցNyAn Hѕ-!R'|p],S>(O;Ik֚mrhIf[hG [463RW!{,qs|ŧ)x77f"˟1I [Xl>r& Ȕ3QRb ;~KTAŻoPuĥ(ۑצ5s]N8Vϻ)AcV*)SQKAt[. *_6{\ڇ }Pgs[`bFE: ¹ţvjK" NWcUSP JWګGG:(~rW:\k~Yzj U1ߘw'b[up43Pnlɂ+9#+n IULٖĦtPsSݧ}l8β+E0w_u]l(-i$Crڊ- ݎLT '9*6y6y6Tɻ\:w`c<#!ؗ%u۵wT;YSNhg6$R ͹s`PPb LyuykCмV)z'׵R' M Zv 7L&FWendstream endobj 87 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3744 >> stream xW TSڽ1{QV{zuڂÓ⫵:aqHIC/1 Q!VljkjokkO[kZou9콿+a\1 z%dtA).w cc~#HSⷥ'"&mykT龾^b#U[q^A䨈Xe2%kUUDrפIMM}^||bKNJU%Gy KZnKIH HcfB+SSaҷ/X582Uժ1kcgO>c&ì`2JfYìe&3&yy<,`|@ƗYLc1f&f1˙pf3)p \HA5nHgIӤ_d:LF!K Kg ~vݻ1 tvfot.̶V޵n苪@NʗTF^w>5U#c&!(^$qE8TBiFr3"Mv~&j1X2ȓఔBycM%/CUu u:vԠIMRT j߈zj4>^'l5C*㚲+w`FqAAg PlW_Lyd8N+{h#E,I7X%]P]bqb'>>R-W;!S)ijEN$QrZrŠY; <՛@dAѠ?P-Vm8|ۗ 6"Vj qTB7"rvtYB~ڶE>ooHYzV[:Fsk5! }p"NkFTxpr=!pOùJ5xE Rttm.djJ2ɬ,xZbC]Ɯjcٮr<4JXh}{DŪ!rܣ2q贐;Ή5`ؔMLA۳tgMmCd&\I qKYXm3@P.bAY|NNJ??!`cżʳ=YF\ʂEWRcguxxTbe"RYTe- _꟬b&V#4|c\ٱjJƓ/N)oTWf@&@d:V3&CR{D)7ZZ$+cpI$Id H"I$zoFzc@z~ ,kx'¿~>,z)6YYDyR Ush"y`$\}#!weW :Qjn}c}4pyX^يv`K27"3NxY>uSb7>p19)8dA~yH| zפ$.O$JY㮸2ySU}IAS)LN7m߾JE:]-ՇB()ĔuңPXw$%ë\Gpξ߮lJB HPWfR[ޭ,#?.?7n3$uQQ+iy܇P)='skcig٣>dv>Z{ qS`[lܝg 7B򏇄vě8DvfY ֥:uMg׊{3t:yu<, y/F'nB7BbպrE9($o9<,FѬjo5 d>YL#4ҫ^8^5`J>ݔbd| {.o6fX ځ3kt9DuΝF$Z6)?n;)ZzOfS

n~bc-jIa<؛f oSRvj,FyԬ?7Ĉ9?e)AS$H쫺b?RM*gL,9m:n~Lذ0zʥ0CmPrG,)sC?%4ڨ8)\_?fiS.5Hzb: DW)v|yK,Sƣ{^ +?ֹ seAO 'iӨ3r@NYVYү/vO:S3-1S%fn{9`ڀ0ĒԜ\t #_':Z$_ rxfMMCrpqMaʸ8ϝ59#im|%C.~unL(ջ{03luendstream endobj 88 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7661 >> stream xy TSDP{CBcw9-%“Dp1q8N0a@nA+"|"ȋu;"Gpqn|>91rgZp]^"Wz97w~p`4+qeWXEQNso taآKKw-tr_2sjߵ;1p#YGgq'L4y!lzSʉJ>Qk:j8AmFRQ&j4GmScjZHQDj L-P˩ jN>5H (bDj'ՓE LESSoS,I z zQɆQVZ0@P$GJhj4xZ `b/{.Y˭7D} }?[a3&ao5/7؎m/av9|@#50qăJ}[̥s0D-FmpCa~6I`D[RcұM-PfB,(أqTL]>i#+TG 5[ UZuZ#94A@7j/>8UJ%ѴgsYdoXcȆo#o*ۢE;!=eq9"%F cj"kyO?a-w7A0h _[yGJF|%ˬhK)[%6IW.QIO=("]jP?ӆioGIӲ*sm#Rt]#tV>J\x?H>װ0_dq2^jqKl1Lb+d~^Ps# Ga_G/?!1C3\Cp`pHvT5>A*uq y;F{Oe~^PzB hBդ{tKqTL&/E2 8#nW-+E{_ԨL QaږcEnmm:ƎFۓ/x0I=4<BBBV U\28 Y7E$_P;ڴ,;445`ʼF G7YPi8*2B8}!.v'>| ;Hl3Ö2P1<,ߌJx5*~(h =ME]Q`XW9R 2zC'(DY}Xl5wQ@H`{:R22NMiACrg_ܓ/v&.oI U-PNC)2/KUBbH۝q8{6^KWK%u5I Rc,0o8x-&$hݜ!oze x4њH~yK6lIt–3=[Zpb8Uxݰ'qU32+2CFNE4t.?ECx(Z&RtHõ4~IbSaib"^|m]*"_\B^0|Uu =N(oN ?Wk`O8Eշ!V2 o8xHayFzar2xq)ϛΡ>I<Nu~ؠw۠B$5կͻU*I]U7])d3PӚo7ͮ535WFA/䧠{lNEɁ jg UvMEϚTyIʴ4{8[:yơJ U@ ]^adI-HI%ȕO#+~QЂ{B)߲n|1T5낥;]^vzʥkyu6y^_M9DWʙhd2H -elQcA,))K AࢉըGrP&L9#P]Zʤ͠#RmVC uW܄ y^`VTj?Rһ! 6},W|E?ſgkM}dft-Zzc__pzy<}æ{TS~[ɰu0/Pihf&-ۀyi.TWZ]-n8GʑS$޴͊svmWça8 pxY>`ctp;hF&Gc W ~ٷHePe*k&revűR+g%d2(GgBT Ybi%Pڜ~ƬX{ۚ]@Wi*VeEQڔ(}mٯn-+%ۘbr{'5z"ͪ=f MohMD-cSzm[mˢK]AAH-KFo|MؼE5|B$&dq 5(pf=G4PG0hj##!!yH^yY-MگKhݢgBT)8=V=6'DLA2DsHZD˚PbD"\7IJHu"ہJuI.W̐z .G]JΎ?BA;61d$fȄphAV؍&`QbHw\/Eqج&͙C}'Z.y1dHIj5B1MWȃ>NUPUtNjU>'Q$^*j|-~!ٴshޖ¤ afY 6k ̋\i] ~~HJXTaSDh2 d':v@kO߭@Pa[y ͻzN 9xVQ+2H+jsG$ɉH' PQknQMMaƽ Z,-ULLAbqnYVEIbgݍswJhǮz/.IB\2  N1;zdzzFC5ƚ5HQ2a"ck:|&`[FJ,G4X\w:3\bsn!Փ=GF[ Y~c5@XOC뵹ZYGH%O+ȍXt:g"| 2hjT%k2!/AI)*|otlcOnGZ=܉j;_bGS_ T>$tݦi/>.<8@5"KjlOVG_Hr=Yqe 8p#=%SAvsJQS8ߵ-HN/]0m/cL}c0KP GGn:|]gU^T^[[YYK27r4Ih@PA1cۉDQXJTM-G2WY2`&vB#@Ԣ}ɿbƄ= ԑ`4= TsK*xuA͠=__z}p:vI"߫Q)'VUk7H8*Mj&]f;֪)7y E[L+OLN=ϓDcg1lFaeQqƽ h-˼ٗƃ- pZ~]I|T۔;i|gA&^?Mk ` 2V1c0qۄ6[T]d]C]JVȕrs=^kW{ Em{_<|m(ddYχd|5sys#oi`p6X9Oe*-q:k;;I@'+3ч7,bB>Bk9DieL+ʼA*(G:o_ȏE1(V؍ \EP Qt|7y%( D3Zd;0pVW{4MUz R*!~ E?:])XƯ*xg[ý7cE:mE {Zpfχxtø8?3;hjUU* 7MFr:-CBTӸt D"iB> e4)m _Sޓ_f%vVpo@ܪAW5ӣ^/h Ro^b7py΂`NĖ>ioPw1dzjC3>p!D}-p!lD: +Z,[7fm8&AʐB6[ nL#jb:|&NMa>~WX'*򚈸Ǚ[:V:ԲJM}_G_"Gu 4qgN3$x `'; ڒ*d%\'N3>2sJ ^dÜpKՠyaq)KY5 ueB*P_>'=G=N)tdoWDv{v5G!3PL˧҉5m;adU2U)*͈;e,(n7-- r13_ICQ]P'KF^}2}QJ"(ڏHl:xF&5jCI"?T2i ?Σ&</#&٣oJ~*[;\T4q6YJ\ !f$o:w.͑_cW@yQt܂RFݳŇa+$o-1>NI6f"~\o&bn.>& cOִdؖ Kd> stream x]1n0E{7w%fl(Jrce>"ŷx]]/> stream x{pSwv%₍dVY;lJ:$ ICXo,8y v,ْ,˖䇬+]=mY~6 6ɂIJL$NN'&CN43㎤w{G|E<>4+;{>)?Ģ\+f/T."GѱGu%RWT[f):D\S6sK/.=RrJVTX]J CYELeyEV+7>Fyյ25243GR%QHęo(*ԙoK22|f%KQVKT DUHԅo㫬H%Sy<"WRoݮ/ox4[[6~[[w3pmxyEo,@i%sK 4"̺|;)kS|GW$tZ lirEp}]ߤ+ZBQ_t2wg^z:m201/gq?+LjG#CCw|F뭤f|O@gRch'fۮ%ȇ|Њ:Y.0m7bڠJKނY?y?9-D&>d~(ᳺd%TJU >٤!45J]g  @,4i ۥzxIJNe:"yNA f0T\wA}s7pXhZ`j4<ChU$pк^$_si"n9DfGB> zp.'!G pE@ =B3)`XNtؤ;n"f6j+Qsoo_eh ht.9T'dMxЁ.~ ĸ ww4z='ZPnJ.*?#y -i/<H![rʊ\#/拤6=1mZZᐚH1aB>QwY܈tľcq~b3L`% _%>4ۨ@Pb?N~)3@PA,QU1.vmTwl;ܔ}vf FoF :}7\Gu |Y,V@x^ԻM uzc֑ D6C5zkD.pF#AB?M~pbmf3Y * J@*;4X +W7YyL>\(jFb~3?+bn߅Gj{i0|"XA!p}y=OuPdxED:"86;4e8LBYQsgi/B4z۩a1``ß9Qkw=u@tV g"FR5/Pē9H5G*tw!ڭ\&U--<Mp>W_,WsrzE<u dfS-U@xOb Bv؂/GDLDƺzil:KE٤RVc^J"cpU{ 0JQ-=Y|/?GKȴǰXk 9;zU~Dom j ,`OC~<|Cy^\BiC[%LKޜVT/yԜ KϙqBjFBd0wp3o,l%ɃIZ4Cj8qN9Z֡Q& DmWbGo97<5TdȯyA%"+N;=ϢlE`ʏy^ڸ[QW)%[&n÷+6O8]Q<}p>?yf'J3([ *lA?-%Yo)og{rʡpEaZc%2g>5XokI$S7i / ڀHPN|kdgg.AEv\أ|ͱv/J|MΎH \D;f}Gq=vueN<&+g67s/A_-.zMO yl  (^^Ril2+ rV,I!/~1ۛ˴{endstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1802 >> stream x{lSǯq04$]d5݆D1mmҩC+-4@̀4 vl8v~Ǝ'6qyl!J }hQ2QmeCʘ?`vi=}= p8oqoJ+T=(\?x~˯E_C53ˍ%*YSC#%U[JakW_~PE$k FQK5n IjDJGZK{[{%7wڛFP$:[1%8\"lXKZZ(LP,mMg0V 2A.=.s4]֕7yki:g=OqNzu*Uΐ`2y5'Vgx2R ]Å$g 79z@:jp{?Lvrr20/WB(Yy=F;ȸb^"p1ycYʢ456U[y1Ϫ钁"`8x ;9̉$ oq7jAiYܤ\Λ Q q ҫ}9x|z Rc G9_]}HyMTx Oxӝ@op)|ea/%7X6 ON);]&h9JJWV~@}p0N2'-7DZwq;}3є; =꫌]`5#O8uUAL'T79H%9Tz'G|aѥ輫eX"o vfky #c:5kAig!;mﳁ6ɜGV~X97 ؃jfWbрR(v;#3|2l}d: Ȑ'm!!8:Hv0QfY*7\HE1CVz:@lOr̓Rme7FD"nN8|6ї]K})6 **j&˛%gryHܱ{;fH"S4t0ȏyQ:h0lNaWQ_뼻YbQ&T4߼3s?NhmoU)Ā[ɤgΕ$] ~X7qz/_zS.ZZ(X֧%·\ aXvM7FM + =2 Hgd<`` ډ3ݿ~`ZWG WZ_ay"E**CʡD,#2G?k< jиlX5Y7dW>BQv8n/WdG"!/x4m",hn(Dt7Y̯3 ֳ"Yl;X.# 6ȼu=WIuz/w]S,`hM \X$H M}6DTVBW!}uk`$܃$r2pwj /O-@t*Oͤ Smf^!.U.S3r)62>%r~Oj2U-[o=Mlz\SqWv6kԈendstream endobj 92 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1711 >> stream xU}Ll0nhSݦ%BHT-MӤM dq_0v_wwyLbJ`Ĥ%H6['[n4iӤ9hӦӣy($IS64)lHQʿB(Bq֢B@' $ 74}e3jͪ;T{v*+*UuYWը,N:UflSmn6wpnZ֙ ƶةjحiQ1ͪubFwȠ벘5FUEcwjL&ySөifVTꖵ-ŁrNk\ە]; bQNLFD&&I%92HC7qrW2.^)N—  a˲eRC)z OG?|g)fQGX< Gܑ>Jwؑ >5H 0G0v쥷P<_} ݩq}]x狆B)Fw)svݲ--._DdTaWt{C<^h)CnS%[ ~[?%MT K ygxKBA*u/Ȁb}ϵa MŞvΐ PWΧ#ouJS00”9ΣI$e9Q!wң؅e-UwlHGOC a/jQeťqXk5fI{g9mp#kWg0,{ߡ%T:UO!{D@6d ]:+jMM/ɿ})Eu((4ezIϘ&'3IE15#h$_!P"Os[ɃA t4kk|$۾m|C)QqUsYwy(>|B|U5dqg(Z hG{L0]Yw)YDZyIiy RV+lGl`KFocxä{rŵ!,w( ֡g~oIhr9^ZɠkB)fvuONWۚgkDŽ|` e 9>GCSN&,63w3J8.TFiF,a%hO":#Ãˉ%Dts:*ZT p, ׼._X t"!p9I|ǔi UXЫ\v-V9'Tx /KP,PB\)VأJT?2,ԺeKd\[= K{Gqh|͓ Xx(LK*:2$n3,6G|I>?~T؝W%=o1'Pi8Sޠ'Hxc~piB0 HtHhXy4:vP : dqHN\X][j<~ܢT6X&B{-b* 1I<$c;'>T ىWu/M9DMs?, E,DE9 p kcBg'XǺzś*W'Iml٩tn˦1͙:tF*1e.|Q 6:7FAwendstream endobj 93 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2013 >> stream xU PevA0َNiEEZ 9@ .D9厏\"!"VcďTLڴj1IM)o:݃:iI;~{AWawI~xԣ/޶?I*YM>V(Y6X.٠iS*fV.SJ‡BNMi ur6+bJ^BYI`DKrd,MVi%[Jĝ #Jگi$i2 gU,Mv4U&OT(\* ~Nl%qD`jV$St{a[ NMH~& sR'U,ׂj;'n<c EȑB0RYlJuuˀ:Вw_CxyMw[M_%Uh^-s0eyCMEe}AkLHDr@9cvnK oƋZA$2 \%z(iB=?N48aQ$Pm׶evp"2A'Ǿhz3.c-bqItRhwo^?j^sL{|H8A7VVBJ诅]5 &'p8 :ު?gC>s d/:)gR0T; wF7~C̑s߼*MM5 5&W&ƪ8,ۯξ=Z+;{@jJ 6hn΁|ޢjm rEQ^[hçV)I (-js zݎ=P`/n)l+<~f,ݩsN8ɞ ,,tEגx.$./PTtGͽpa賮U0`-e!ڪ,M܂w.~m+B *cnqtA{9F ݘg*Y\JΜ``26ҿjc{M`N!ꩺuz#]n*C#yai?P'z6vY^t"|ĠYw]Hңwkz׭}>r=~b<X$^,jG"d1d= ['Z4[g5Kh,si?endstream endobj 94 0 obj << /Filter /FlateDecode /Length 169 >> stream x]10 E7Hc`H$JӁӤ!o3s]~KA?(u$Ò4@L UO*2]T|"j W5 q#t04G))?kFJFp Y(P@ Qk|7KiGD>W Vxo1ĒU cVendstream endobj 95 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 329 >> stream x=J@wz݃J^")U'Oҥ 4?$Cۛ'qyP&`^B|,V0V0 | B8B*^(wxŀ0mb m˲*hlWV@vtU1Q[!6>X4Bݍ k,׬T a;-h6ej[]}$ӘX6 < @(V:_)s〆GG4(!Nx:j$GcO~gPb/OiH0uD*ާ(=r~<$endstream endobj 96 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 609 >> stream xeQOHQ~&JG )]b#0;dz(V2w'wkwg}fV:o2CuE:VvZ2]-&E ~~ @Ŷ3-+>w7tQǗFy$gʩ죲0+v A[CŹ/m31# 5:ЈѤf#j w$%U5 |Z5blPMg$OiihQ|\Oܥ&51aĝzT3S}b$nXFBD6ڨM7XjzԊh> stream xmLuhW٠n4L3 KÇ,ӥpj)چaǵ](kGKKm)sK"D|c݋7E_@/ ;|☲q\;SwP:K/H(@=VZڇ_Dϣ^8nc1YxzH'fwwuJ3FX3m5pnЬ8ffYÇnw:egLuRn k.c4GvK}`.Z׮V>B36 ,v;;S{|˨n}вIFX~N̊@d9݈co/2BfǫnRR] P*-@Cro'D C!/c),/p6U+)" ~`a t́;hF[tPתqho KI'^I> _DHwh";ɿQNML'aTTVQo.ůRPl^i>N=І&LI"GrhJ7sĩ :z}v)In"fʺYvxVk߯C"FoŵQsCKd'W^$Z]ICJ> stream xcd`ab`dddu 21T~H3a!cO]nn?G ~(Ș[_PYQ`hii`d``ZXX('gT*hdX뗗%i(gd(((%*\"s JKR|SR Ab?M?o>҇]ޝ+ڝ͑¾lzٳTR> 7Qޔ=c<ȨߟgxwS?0X_4ѳժ?wk=9jʕ[u_.oߢfZ-Y1wºrxa[+'Woߍss$-<{ ~'Ncu[|>I<<20Fhendstream endobj 99 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 272 >> stream xcd`ab`ddds 4H3a!=<<<, }=\19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMUNL:)槤10002&FF|¾g.3%t/]Z]-pIly?헰Vξk?<<@ \endstream endobj 100 0 obj << /Filter /FlateDecode /Length 7035 >> stream x]Iu#to[n@P(lJ2E pPvp1 !ж~ߒU2g0Ь|-FF'.󸹼Pˋo.4qSyjG@x*ͣ//Myoɛ>y6}R۝snSowjs o0|FZ=~:mL3n7@Ri8?S ^FGzs oǨ2vd}n/ҀlH@Mt:%9SSfxJVV)$g36jcPF2NLFV8fB7qx5:3vxH3=lo2ɚ%:F2 (/OP,gx6` )yk~ Sb/Y9m-vi.% &{5M5I}Y*|)Lr!|HR.\G?#m-Cv)֗d [(imN8d)`}Ln8\{ؽj]=̓5Z-Qk^4ZiA$]yǽ pFk7v;Ea1rO`)ہ !iVZ"iמٷ&S;e▝3!gNi'Bb'mJ;7U{ g[]BӴj֚BqPѰy@Q:EаW=캠 1":l_`Y%Ɯ]˻gф9P\,< إ^.DH5Z.2gElÑKVA nAנT+Հ<aK<̢h}6LsKy^iX =&ݐWx$8p@^P!a~249b&8']_ $Ϙl҃KJֹᕅY].qZkѿ(SCcұFF4_PZtl"`P}ZhMB_v•1Hx IrItKK񌱤gܵИɖ>vrg@,:(;[7bNڞTB@{[:\G~=ks SE9Մv5zvR'GN0 !e1u٢Mi`@j4>+HڏBqP"H]E_.@ m'$OIV|퓙eh PupYq+G@m} &3T}y ^z(c=m1=m?^-{K Aa ` uk76<(yNicen)G`N5D#́^BEϮT 03cIBjZ} y;OaN#6 &q-`!i^,SWf|2G!pqK;FDZElGTags0cPUhW3gLZ%Ve('hb89dS68:9ϏةFoVa46vvQ/D#]g& rDwg8{7ްWR=1Ԗ(Z 4xN {*-{1du60u7 Nۧ];;tp˝^P4Ca"ӺC͹ T~ [jz"i 4G2 hGZFXgaټ( ~2 Wq9>;O^qo]fb݅ЛxL0xxˢ?` e0G/Ƹ:ώiw獔~罚V$Sf-\e_O{0mN ?<R RQ 0q P{4Ã^%̲!VCt$7.ry=  t J[~6UoQrv Qy"ښH+$>.AaE[p0wźMGsrtAm"而Ў R*#Sʣ{:9Ib0]$B %)nm2T 0\cB NϠL18ќ2O( ܁NAZo)*R4pk_Zٮx2*JIxhIs A0H܂=塀0WeGH8@q.Vdo=lLތcp[ߌny@ARF,]RźU%[W k|uiD>RΥ^w`FLKr]0-~GO1 @_T=PMafPؗzw@50l+eY)i@>+xG28 ȋ~xVbnsXT 2,,?h'O0dg?Ra7OW/J>ZLe՘ܗ11pv^Qbo-rDVxK"/j+w*w-U¿yT a"sƓMl+)ӛ Y*xx)N55Lgd4|7DP%xT SJF=xHT9$(̴Lխ6D,HuP Am$2C{ }I2n}x*H؊5o99c3 p6 NO {=d<<e`8 C1בbV*HPu0^Ue #0:IݻFl@a <6D<:o%BiZpeEs &axRzB$e5' ` lj,OKSA9ݣ0sГ,;0H2,&wkC OO"(0X\3 81_&-AIBf*>:z6ruw/#lBn}x~|<(gi@ݳ/bRjWq.xa>Zl񪬉*J~!9 xSnSD%DQB$_RI~)7Zz)/TMغ `F1#8ih ZLz{`T:c{i(>J )׍5U&Ō: Ǒ7I"oC38{0% }4/[~rʩPV+#o:r[9C|=a*T (槊k]Gb gVo4N*4I5(Ⓠփ"8߹oVȬ,ȯku<[R(CyW=ɉf'BxݑXv|TTU. Y8Z%I7 ߠ{ruh*lu:.he֖d*vp$2Q{]jzm4= f>3] JLEңEjiP[cw+j&*R9 .~__oڈsH{e_ ܖ|LfLUzNU\?Q\00L)liSLs*9k7P+sb{?GnncgS%ѢjDx462jjPóǁk7)RߛiE ǵݲ@U`J[\prn5)6~{dj)K4D45U41\͍ӌy)~uQozn4ֹQ<4I[?kKKB}u LoT+.o]w?8frsO,@*s]bLڑ{>i-YYbs[&끯V(`TxІ 6 Uf؊ gG0p)grKNZ<:j>D$gJ}u뚭VRHn+,gǼ=.p^ RRpĜ_tץBvӅZUWoLQ #:&_q4> Vvʕ/+)O&U~<Zos+ 4cyq?F˖ ]jCjƲ_iҬb?6l> stream x\KGr^_g mK~hO+Xa,v%:hm!iJC.-?ʌlZ0t`&+a&S_ٛ/;pvL]4>L>xmR}[hywÍvgov_=u)vO^HzgrɛdSypTSV:G|1_ݔ0{eq9{8Zk^WF)g"(ewa _?r/G 6r7J_n6GlXR_nA.”>6 6?$mNB0; V EhrYc|7vg1r.\tdLGU"WBޫUW*U%* aخǤŲpYqM h҃Q'I1)G WOM  pSbvLX#erU:ōe{lVOK/XnZVܘXh˷ 1ԏ$/Es<`? Yx=@u%ElY|xYo.ޓ#:dG33Z3~ӡLXoBc 1^Я:?h 4f59x\f" INO[&*E 'oXC8!׌x0Ay'[Ǫ |]F?AbA𶅲ۙP xT4h]PUR.@2=i0ltu6o?)Ey("h/W[_,#ж ek)؏<Ķ̌7rD7J&FC]썞2ʆ&"-! Tc+< ne%CCB<`h5.-%lvzڶp+\{ȾimlUȬgSQZtXL<`C??U E04)@ *ģ;΀ƈM*,8{H:mLQ`&nDO&i/mgid@T0xT~I#;mw}@tEd+Il˲HcVJ%4V D Ύ2)>x)cCPĨ]Be\ l6y:8ɏ3,]a5 6?`_&~`օ o{T @vǂE돎`:P|̉Tiӌ{+YAblW:Lytp !:;y> K={ےRa ́*U}q᜵fG\fWCQɹTqy.AS +گRܧljA&N7E V :35O<탰99DtKѲHw]*dQDκtkyMYo"<%%bscaZĂO-f*NuM _8)hoL(QF ؂c Y' S4mwCi<ΰL5 [@"k (.UWmE~@s-X%$b>:VI mX%rN[c;oU h@6D q^+=Ji!Y CFgceG1`2#r%3e+K##<bX+ϋ?/ZpGCf9qFc^pW n!e0_<(:WkwT,.Ao\$?̜w)(2} -9?5GMTn[ʛ%h(628+XK_a6M`4 qƣk(Hɥ .M ;Q}35P3lұ p[hb[v%񀉑egii!rH~-p[RmlsCҋpF;Rfs>^4γ@QC2kfc]fAy*H>w=쪏l`+4K}=!pv/=s5>0Eog~q3A $Y98hȁ0 Qb Qb/)1&2RS܃D&!IobD|7$m>?S}h^Y*UP Ju{h pRu>g6≎ȆHm'n4O&l[ 8lJ@ӑL@ B0hC< N#ƒwiy骓thj!5mҲaƽn S؆sCNgVdt; U0¹xg;/ j )VtELSYR&g!xEZ:Šnt6[v1\(X|f9 Yu(=Igϱӧ͌9jm8{^,|MbE}h#8ꏭcU\ԣ](^ TG o-i.8~<^KhN*y2-,j]ȹ6-췬jy'%fIF1-+?KZ=F&ͅe{`VFqdYq%Oseez =H($U%|Pԅ/COwMswK'q-b9/JݓK2Rv鸰25L{f񎖀_Zm5_f,38qtwpG=K-py6O i"/\=B2쏧Йx\/\ޝ7UqwaG[ WM}Q15O'ĥkn[Ed8$Z_f#zjr"q^ FR9&lxDmBTértC6%ge-cRGܱς=ꠈ`}; XgKNz[rgd;q64㘹/%>=#kQԻpsgrV:'q~[coё$*@TeOCL>lG1^M 3-CC2غt08rdI@ll6zj]]phLe|ʊ6nYqި9檂h84yk!e"M_S2!U]Tvbu9&лzuQ̗0x15]Y75phrcGUil].PO4ӳsOHeq ۔S%jC>V/r~^³f n2O2|r {rI7+ lлH[5d61Ԟ玊ibN)^ƫ#e6-`^܋<)#B!$~5Ƞ;]\&th;eF2.aT9'W[?.ɕڏFQp:U.J檨<汗y J/T0VB:8_I 4xH?:Uކrb 4Gi-zwj|Uܿ; ~bt"ouo/[ =Uk$ͽa1 7tERx 9o݄_:8'sh[Ce)}^7ֿsQC+S)pZN>Y &_\z3W)=L!2}6^U-I-4d %>Fc/vZ0ݖN߸#-rݪooV`\xqΈ t7o0DR4|?#d!_+yȀ]jk~/2Od9endstream endobj 102 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 682 >> stream xP_Hqn]6s{j;)RtpmIb^sysZSi?׃E)O6K "Y`0)z%N·\/À\0 SX(9#ē2^pOiQQT0gmuջ*JH2L&c*כKNmk(+U1N;*[agz*bǹ^7v֥n[nJ*sUT1SǸ0T[QҢ`a.Ǹ)+[ɸk,H8cXHl?"@A|.1G?Ԛ|'/wCF "jؐelNpA>1:-0D|2m݈-M\ oiͅ>HJʝTDkR6үjOj>֛wۦZf3!{\+C^6G#&Ԗ[EYn.;!+?"V8?,Ɇ;33_{r](]r>xXp(4pSӐ|1о]5<:Houþ 7qq.Z~†L6.r>4\. O9Y;L#x)*%bkcƠPJL ?3'endstream endobj 103 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1283 >> stream xukPWw nVi]ALGAE->PڴQt: 6BHGH1! !BDFD"X-Z_U:qluZhGGe 9gsKAIc׮]3|$L!y0Uo@Bdm澋#$$7;tfCFkTȌTϏR̎W$ 9EʨU竌$OV63ifLhU~QΠIRrZEHmآRTjśE tFAR ڤ^ vH"Vsdb JO|@0D"KBȋAAGRɽS&4[u'BK,l1O*Rd*`GΗWWxSgܞͫ9T+6J|x֮}I)wq&: yyV&\7DUy_Of;lb)Ś͍<)d,BCd/ endstream endobj 104 0 obj << /Filter /FlateDecode /Length 2080 >> stream xYKsE /=VIGBqÜ^LٻvѣG=;SmZ-}$[?ͯq{xڨamuu}{ :JU˛ ۜ{MF~Gw]uλ( v7ٙ[ʆ )bwP})n :|v@i ѷ° U6qATNw twB|gB7'9똊>Th #lǥ^)ChJ_Ӟ= ؔT)&g< lNE.yF}7 dr8XB7jevTg֒D$M3zi57籂R|$Bq>quy %W`)MݻJ)CHq9F^G!q//KI=܄m$3rOA<"c`[dde DRQn0XlQ5YCXl)I (<|<6^~b7Y#:|.gב m*m+Aje DC~N`f:b Gu&1jщa V8eg{݈ʇV4?B=wz_yҒxcb[2p2Qs%OawrUw KZaK/:_"Ia9S5O)5$8e }扽30m K.y 7B!􆎋:\ wYG޼jzJ5 E*%%L?3pp]`{zbvToE@>,.EQPY6۲.D@w4\lzGl4$%Uy{@V0z/Eq$jdLdBn44Ff2͝y`R%pR6?]F+r=yBL~-W[ψqXu;bZ4*c+W;̖\mӷJ!%bXlz:C?2<]qi9΢s\a\o{Q=z%7cR>,iߖ*8 h_s٨KFx"VY_HzkܗTXOX,o۽ON(!5䶫 97B/t^RG{?5a(A${Tm]nEq̈ofY odHYO}5 8=sq(\;ddУ3*Gu~ȏ";_?S&!pfla2٤3ٱ*)ʅěn9cӜ_þ\5}m6Q#48 &%_^dM#D{VijLx;K5mxpI&aQۚK z.$KvNjw-q;;.A0dΞ5sp8QEU=@Ve IT'Ѻvm64KBW͸4^y\|SgY6aַJ~Â6H^hp2 Ub;:C%>3d˲>zvSc?.ǵ|eX(Dp۾8<\4XϓdT1X酊kMSsZ2^A> L` Ƹ0NF N혩Dq>kPHڠ|MS_ғWcD3c 4mK@Vdm 5:656F PC+~Hr" %ZL53`>7g!)v9TL@Җ+*+we$jOSNA̞8C/lleMy9r F4A], %^D/ZKC*_`PN3NbG2eXb.|~%vendstream endobj 105 0 obj << /Filter /FlateDecode /Length 1780 >> stream xXKs7o~Ans=PwK-un@R| 9,10PʏO13a֬R{)=5{OCwqCFbyc6 p@]#C47gb~^vNDN3rwRBKׁcu Bwrb?Xtvg Kt@:iZuy\?}$$mwDdp -;Y$m+mK:"Qg뜅(nz} r܋ z=V'lll:4^ #-n)6@NŠD F2oG*L9 LiuZIuԵ#Nb}eFZ"6:?ə /2AqY AytRlҫ1l7ȱ1#AV OY_"%195P-8(EQf;Pk@[|"_<}P,[m;`RFL7x_1{Yu"J }RY-&^6/<_W@ބaLMHE_@-n`+_4\ZQ&qK)zUnFC# &8w6L*4oYz_] u"Eh&5$*:% (=zɟ˳7/Ͼ=(8~d8w( 0 M}$D+C|4l^=h?|41cl6i|p+9O;O&zQR ZBصĹZ+}ES Ư$t*=nؿI FrR|W5ǹ@FxO="iWRN.Ȇ"n{qG/wnP¬Q'owǩnfB3vFˀj Akz!B$w:{aYa-01X6NMy$4{}fD/T6& 0!;mj2}؜}JZ M;Q7rz: t/nxS+p|mx{6x;,2<Fr8Kn!x ~Z{aۇy>*Y-Q/,oj2T6sM|Z}6@|endstream endobj 106 0 obj << /Filter /FlateDecode /Length 163 >> stream x]O10 MHU0q u4=M20g]/Wv #z|QDP5ice⨃M',+SSY54R> stream xcd`ab`ddd/O,441u~H3a!;GՏ?dyzxyyX^(={ #Jgs~AeQfzFBHbrG~jvybIjhԒĴ|̼dMr#| 7E!Hd(&*$略g)$UB%azM23R33RssR%Yv~c6C"Ж'3~M;".++;;";;~^5;wv} l Q Κw䒐E!ק*[8{CSSCÔiYӦL.];5mZӔb%Lص`͛>}P- Fv&%q5Ne[ȵ[|>¾Y<> stream xnt9E 4ٲgF1#s@KC2 lRBvVf}~#&/_3:L7߿ lqjޔ'%Ux-ĸy[Kd/v{1Y!bRovZL1 ql{VRHio'-0(cPo(ByZ,DߊR  QvSC ~bщac%rqMQDp'i%Z{@ ;D*=z9F?oj/NڗiԆ_ilWm &LNY:ϻΫ<%@`쥞 Y=^xh7@=V u{5~6䤣tޗ?Poj:AH@l .|@ *^hW9z׉ӵW[$mWmkr *"`@a9KWขA[iCynHƴ i9{ND-rݦoimiT68L/`BCk+'_MDl+FQj~1I-0 $&)3}u 8PN*5Q;`1a'@, :sa%2Ϸlm9E)}MҤg{P PhbRYQU[r]P(u ZYX鬴_=X d Pb6T۬Cpie GuvE2<BGɈ5`N6-XQpK@s- 4ƒ82`:n{:'ַ`/O υph'4ո!\ٹmXY|Pj <*v$~GNQvA1_+p4V Ηi} #I4 ʻxjt7B*dEwp'yF(^u>S.vsK"O0Y1`Z&-gnynnZ DlxxtSJuPKhhbǦ~;ӃN{EN۟GM"vmTg*!t; >@T)<[2HE@^ Y6 pFO‘Hv m"7$20W)<d[sM)d٢W䌄E.mcX\i ?z!x۹ NH낲EF1uPy|pi_Nk׻ qqE,^b`!j1^l;+&>N1Uϙ d.1/B玖x 뤦һJoN`xd8_);ĽfgHdD q&+H5p{5ط4Y5{B֤I[D hc%vZ%K,hpVoQjoL vj.We矤dx*s9|Oas"K)ryPXL]slLALKisa/@3{vŔχJBcJ.Q}=C gZM^hҨ뢊yV@V##Il*egiʫ[wt!orvۙzsX29}ƹPQaM0f0D}*-մϗ%%=VJ:~'hOTQyx11&e~\z[Z"tB+ d4¨~&G %2GgZ$\r1=kܴ. f+]6>HE}ɛoA# (w2%јX XJt@cM 2lp1j+6\Ǖu؟[l*Uf]}yZB_rJ!7c$%ZQ?޳D+/:]$?fՖၖ҃5Aaқ< 56Bd:<9FOf㑫08sG\lr&~AP uF bS%,I2E%Gt.]|zP ݱ*)[X_c{BcJ>݊;V{vFcuqwQ'1.DLg=Ӏ͏gb؂0aUz8~/#7g/&N{4qc, 9n\V|-!<`,S&XvwLrG&t }@dxH6mI)VhzMyKQp{)!߰&fWIV2) 𤧒^C1Ih 5ʀGrIvX-k+Vt`ƢBsFcJKk4z&~${";UQ=?bh-%L {It:,#$AKFSi\l_pT6L9X9G`Ĺn8Q4`rűRU4mv\_ 9 ?M~c,d_9 qP j*zu  @+p%տLeTW=F (AӔGrA_l!x^L}^"?d:%'F&W%ߚoL xL8METC2|%[Ėg;Z)OF[.C@1ւ tÃYŲ_t_V|[?w1fR<*#Oa7@.+ui4ȸIR4b2! ^| `(˩] \ke>lZWLPljX ?IrZ[wT3HL  \iq]S֘ajq";z`~ioO+B<((:s R8&0%G ݬ<`(iꝺ-gH+rWLʷҍ4>UxxcS/57oT5I0a4Av(̽ po(߄N| 8 eVFS0pۈ쯥vzsOg/e:e5pke g7_NP̢TN*NJ$]3ʹ9|bsgK:cG:Ձ7Ǯ΅w5Wǖj?>ꫫyAޫڪ21˧_䌡$PBЎ^[)^!,W$V>zV@|{)a <"R&G:cZm>kXŠJ'aVc2je4r76왩XYwr3'Uw2}ɐB(6Ȼ_\ + &ִ]Y7gc)ѩBN1Y U.4k[&U+ j*|`f菪K]^EDK*^ұPw0cy۾u'%۴ڬ@j I w*L=hִ/ L ڄ M;R5>iUnS/DyFŔV`nNk퇆W *Y_]7OPga"E֡b_K'\{0_v;G.+MR+j趗s..zu'>drLe6bA5n0T"ͲV{/Xp*XtPiY"VPKo;Vs V:ݱB"v&rRtԘզ{ߐhftJEMF},A1xoZ>ru‡}d)>_0J wyXF:4+}7¥Qn43kiOU5,bYGڞk4ƼOnr>_OJp'./\'uox,YX~%"+&j+R>#R2+_8O~4åMQwON-r7[u30VU49n,9o%:(3K 5E^)-Mx\ 5"L"wșxk!}\/s`o+">ף3IӲ"LNjk pfcm_=ovT@PI/dc?rP1w(d/tVH_Xp#}HrE{\K6vaNNPbk?}9L H=ٝ[ X@3xGb6]aoѷ]R g@cJendstream endobj 109 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2714 >> stream xmV TZ#no&[ ET j#kA *EEVTy^j[zE󜜓3}߽#"H$Y2˻4~Mp:o&Bnbl8C(!etULTZ65rlo̐/SU1 pu\xY22FNM]V'.9355+\TE-6C'U)eZ:\!ZT$jr,HUJ by@&|UdmQbC{ϚC/"@,%^' /b91 Vos@b.C#wƒM!&}!t]@_ 0qb;.!.H̑Q$9la]\w _<,oɛwpߊX1ptQ!% -ʖvXR#}^^Q5i@TW\RQհORkf/Р De6W1ǒBQ i]䠑QOC쌝bw,e8/ñ^~JWۇD8ĝ%+=ZdF)LHOI9L{Bm Ӑdc%-1}Y-dޏ bx 4L$_u"B ;bt‹<(APB S TE +1꠵ەư}DVb9IjT$1a0&P=?jX0~۶XMe7U̮eIDT*Ck9u>ό(m}>FcWD! AW !iJ⌨QdU#j$! Ⱦ;/}~J!f-Ȍ[YRr:Hӎ[̓g<.p[z H(;YiS2* xw[& ္no"Yi^zˁOiJ+Bej `QCQ"k&: "6lKB,Gj4 u\u($5E^2hn{6Ke;6!j޲k?6&l]k@T}sϓÿU,6ѵh' Oɝmsͬ,v3^:@+D6[+U~hʢ|X a]ߵyٱ/4 Q@zYU_½)/S|?9YSjֱUQ=||LuHq\8W'hP ނoNke$_qnaW/ʳ Ē37ZdAV)iP8 DڸjY{Q8jMFY;HmۮDJfQW6<@(@wt!Cs]xĐurˤ1l֘JF4if/y UWW{CmNEs[]) o}"&:&n`Q}T\i-e>VشWMAJԉ 6}k(5#mLL_7`lڵ]DY_*l+yov +P=8 @}@IJK%O8nd]+aM YC -0!/gRr 2E"ExݙݽS`9l<1v1sDg88& LK4 ;Oq ^DxqG0KŁ Sa2k<5.`#mODKtIrmJ!%uxѓ}!B:~pBm'{@")/tG3_b v[a@lX_mS\_ UdD'jظ$U^T޺%P|J><#%EEQՐVRk2f?X {t}+-T;GwLOQXnuDfDZV֚¢%Lx%DI:4p7\P J U)oYG3ҧ&LYeRx$6Wn8ꜮtfssFifendstream endobj 110 0 obj << /Filter /FlateDecode /Length 151 >> stream x31ӳP0P0T06P0P05WH1230!U`aS027i`9'O.}O_T.p .}*.}gC.}h\nn@n.P9?47XΎEAmGTa?ߠ pS! B)endstream endobj 111 0 obj << /Filter /FlateDecode /Length 159 >> stream x]O10 ‚XЪ@p' aKB,N>al#gpƲ= LeQ7-Uy!'8 dNP+ɩڼ:MWHAB3O*g fh*qC in X3 >1Sfendstream endobj 112 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3099 >> stream xW{XS?1fVvfSsZX];Z* ^JNB$5r?o ""$Z"VkQZйUmչ^==buvۓ?r{_1u !oغ~≏XB[(BԞGgBPwPLB(rEU47O kaܒ˗=ŋǭ.)fe6d(r2¸-,i*nOJŊXQTH^'*ʼ99%9q/eʸE9q-|)ʔ9%q9%2 Y-{I&T<1*+;'7OZX^DsM\"G]1 &׊;ħ880# VEnʳhYXl!k03H\gt2kl\DF"^UQIjRv`?0MI¤GDl@ޠ% ڃF; rO(w mjO9vg8X[6w  ȣYZjr2;wVZlЁ^ S(&YC &p0 [ۗRMI{!*,uXȺp6YA'zXNiUJYOX &nsΟ, ;;Gqw(7f7-\cXEB_.bϊTZ8 S-cTgЭv3AдϮ28_LQ!.{\@}Qhŏ0bs)P!Baꓤ♘symf"?4v+|q ddž{y;-)l^&FہG‘Maxy갺AXOz'N  ksh(=ky+Shλ!*Œe 8ij03 AXYwMVIy 3" )*CsWS >/ =~D\ىg'?do^y*9>F}Hb0"PV Vҧ3e=D X|_yuS4V)lNƀb3inkuo#nMҨrMe WhR!"TFaQKOGj{Ar'WT]Uj7FAWςTGN$?RQVs˵P-.D>tpB7j0joegk[sSTDv[^sOj\EG.ПB1CRuu,PW<; mrz_x^: +s䑎]u>S@uUwt6<O|"p@ !0gGTJQ?Zh8%κr~dg(bM&JR{{Hlz=kf nfr F}a08ʳyv/6=lȂL{57bKAR7/0+vf!8l>8QzH6G3 B]8-Jv9{o== .N>H/Y ,jI\Vc3vg3#EyxaRgf w}2 g..Sf3 ū!|vTvD_OOݺ툡 =4 ˖-?Y ]ﵺxZrLq~MX,Q*nKOw ؑG#O"7' 6 =#a4 &464rPJ5Z |U8Pgljv(IR|vi姚 ;`7ٮUi [RKOV~>kSR9~ A$4pep2~3n܃T'B|=]c| N-;u>et~dr[艮;FlZv!Mȝ,&3eղP)6@M_g6SK]Vte9}=;|s&n\ȯ=lA J0&4 Zc#:BC*~an΁u9x|dx'D/4 W:= rȟ036^A^'+g|>:A/ӤRI֎,3j(/il6;~~F.+mR'31Utx^͵??G76P3' 6>K{oMo <:ȯUgt?xT+wn~Hޚvﹻ'gu_`ߑ.7uyyEM.H,So]GsΑ)Z:zņsI zJ]KZ)zN_*̷nt Uxj򒀮9ݶo2B!}[^ z`@+Do>ˇ `4 9HҼ82}ez,ؾwy ^fgq׮г5t]OHHMK+uSv&؞/yȊ. (a0-F#m6mVy5!MJAVQ"ٔtar;vZG?x4_USy~exaBTT [;½=,PmwP3|3gL]FG?bgendstream endobj 113 0 obj << /Filter /FlateDecode /Length 4075 >> stream x[Yo3g@G CA'QF$Ar ǧ{z%eوa^{㫯k^mD/7=>~s"6W'9HO(ܜ8Ioʍ&n4}qsz}tBE]nE*t۝QvH}8 a5<08FmhԲy*{l wYцؽube T$hxMڭ0+TЪ;O@GopW=lEug0˧5#3s%7;z,l4͒p'90Enq‹G7*! WFH1J WG[Nٸ*[BKqlp0zÖ|.ɻl,h.,$`|7<")2$)4;4ɃnB)f'uoMI8x0-[3[ {HeBFmzF#[i!* :eh}x$4 /pø,u%Gs$+n`3XN*$9^nxn8ɲ'K^G>==0o4i ʠ|(zƶXA*ӝࢌ&` -.AUͼwuk ]U \^L?{2z;3貅֠d0p'\餷N8|Muc?%xzD0CL)a*U)[$:4+3ur{ $-2'1,ͧ{epP϶(d3K~J%)ƨS9# 0zj }֐0sLF8V|QK)|$4HlF4 ghXݡtt1;wz{8fIhF;ŷ`?Je@5]_G^z]. AګAIZ=*8MZI+c%V051 @ 0Yମ4 K[ P(}p[B<ؘ>, ʴV<]j^Ĥ㑁T<%4B,2EXLNl?Pݛ_6Go3W֒Z4Ig>|0'Ģq;S_DИH==om! L$t⽑b!٬%BdgHaYӻAlrX¨.×L9 c#ܕpmHC,#\Ǩ2j@i==ox9JK{ڜt/0|"vɎm2e|Kvl4}y-hπ= `PDcxYMPt2|Ii w'b7js};R㓫޷lT+Qۀ"P>Ᶎ[2ݧMz~\X萻<9ߎF6/L _{x̔ogo.ގ.ڵb6Lh O[uwH"®U8;)ۉ~P^H0N2HŜL:9/,IKCI|ciIVX{12EӀXwS Q:|,a) 6,l?H8 dâQM,:[<>ɞŠBR{x=xTt-iQtO]۫+UWA,鎭 ]f#2|ZyX+К75lCJ%^4{P#"0Lq /FR-ii=@u e % K!'۝5T[9_RӗdNi顠ԍr-j+枢 6R>mpV Vh^-.:! 7"*Wu@-B4BWZޯ9eXc#tIA[O U`P<b(˷qه92ЅƂnR3nz _a^M)7%!eL-< LJAlD%|^$H$OրiЮI%UO9%}jߨz]I14f-7W RIo'|:';;N93TlD٨+3C? 8KjgTq,a(F@BW釸db]9M3J8X~®rꚜ\4V|Vn\#-cΆ,̾}-?S\-j9f71R0iǷ#dHQ#fiӫOSg\rDž#PgJsp|cά8,þq<3BA"蚘/<(S+_'7@Y}`*xcB-eg~ GP| ̋0iF{eG֔ƃ:Z0Jl*ULijJBSp89uAδq2sozTkcOĥĒw/Ut8RYwl\" z)YE<9V4a{H/Hƈ7qԻ) "ҭ)'(dUٺ=۱+d%, +OI΅rmӍ*n+`C#f414'Xn"ӕ[2_Y(1{{5sW+b{y׹ CK &ߌK zr&nN CpjceщiHKzg~_*%H td!* % PbHl4l4]j5Q~f ܒ탦P=H,GJXP]EFO .>7YpK-)j!$tcdiCžrׅwI,D.ָiJ-8D$(mdᨘytc ~)N;P}܋T+RxXyvS 9Z2fKbuݧ!ذ o:X*FlA;ⱬvL CIzc*%y-6/ܦPk⁘HMMIE"9=B> stream x[r ]k_|#ZeJp>@R"0APΥ*l5k̚7jϮM\G)]m͘U֛G<m&j77WG۝fϷ F(ps)vg d=GO'Noifh`NrQ[?Ny4 †N60&pC쨔MRfx`|Y`tNև7m 7yeaU?k&eV渀Gsfx#3jk3XVhrV|JkDp+ &g W+ SKb:J"X> 1nh/KIi J#@XLc6 go[ԗN~Qw .չDɲûE!ߩHNvسe#- nbd=WC?8% >-\հ Q씣w{ځ ʳur M3xh&F)c "#HN2FUo[?K)d :"^X,}9 }ƶn5k^!HJZZH&=\)01WW  ,(G)X:qSDy٦肚ddK+bv"`fLmOaBr@{VȠ`@ңoX۠b2xV|z7|ymBr l %1>O: KkFc3o'kO>%DKK/[bNzm2kz89 UlFqfFȴ=7xV+$4+Lb {s`MV/|E5ތcSvyf Ț2܅H'/ 8HlKqM&l" UMD:-&sk saAdqoY[MM;hڀR"wԧؤ ㅣ y2.Cr|%FI j)[E4`iQZsv >rȥm%Mp{X`7(Dnl?9oppCua)5XUd΢q,$7݋:JnK>nT&|]!l")գsaņ;fpn -*֕Rmzصw@K[hb^KKz I c>vh,-~?9 ?tԂ\9S)d~+%ۜ wu}mXDςs]wUi2z&)3xkBry{w akbZYѼ-u[˼dl;zQ.2zJ{`Y,;%`l A%Z^r 3[)5ɂ4V!P핱`Za 'C&~}D*T]gUq\ 9x'S'*8ONSzxWEAPVWw6Xm8(N۩&~n8!*쉤-d_Pܥ.L=v\HkY.8S+#liᅍR}wP#5r3@`wz47%J@uI\P%[HkTg1mjZfNfl^`^͉x-?(cù8.MvjlrUp 1w&f® [~cf0{]7%"}4A8 t"L|4:3_NwbnݽFNj붻 [.p"u5>Jx?(`opF=`\Pc՟EB),Dtq> stream x%]0Tik4#3~VD ?5L8٥DKߢYl?Sb0jL 2.jf̠.4.2E}߫yImA0-35?VSCC$  qn-b>!$nNuK"ĄHBH0uRKg*YQ:+Q3OVTLLMMMRS3kԬf >ӲtRлnѻY@gJ "Ao7BMJ1M-ܪBE7 5+ͼ7E:4cs;\~ZV9 M3`>u[3c0Q[C"䀢9>:^QBwbr0h;<!ܷ8K)`tzR~|jpt%Gz9<5 V> ,jX[VK#Eҿ&c<&= |vY{p&DS#EJ>?v* 96+1Թ>~x,& e(Lɇks* (< nqX^@Aq &yvuR jkQ= ;ͻ -C\\'⪌Jt`[taխoCI7%&w8> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 117 /ID [<3d1fbed2d203ba38c010ee4829f2490d>] >> stream xcb&F~0 $8JC?@6[7(E_Hv6"9H_ RD2FeUINa"H]`r;fH R,5lW4;7`sIF1 +X|"y@)6n endstream endobj startxref 84193 %%EOF multcomp/inst/doc/generalsiminf.R0000644000176000001440000002125012234660136016635 0ustar ripleyusers### R code from vignette source 'generalsiminf.Rnw' ################################################### ### code chunk number 1: setup ################################################### set.seed(290875) options(prompt = "R> ") options(SweaveHooks = list(mai2 = function() par(mai = par("mai") * c(1, 2, 1, 1)), mai3 = function() par(mai = par("mai") * c(1, 3, 1, 1)), mai4 = function() par(mai = par("mai") * c(1, 2.1, 1, 0.5)), cex = function() par(cex.lab = 1.3, cex.axis = 1.3))) library("multcomp") library("survival") library("sandwich") library("robustbase") library("TH.data") data("alpha", package = "coin") data("bodyfat", package = "mboost") data("alzheimer", package = "coin") load(file.path(path.package(package = "TH.data"), "rda", "AML_Bullinger.rda")) ################################################### ### code chunk number 2: setup-2 ################################################### risk <- rep(0, nrow(clinical)) rlev <- levels(clinical[, "Cytogenetic.group"]) risk[clinical[, "Cytogenetic.group"] %in% rlev[c(7,8,4)]] <- "low" risk[clinical[, "Cytogenetic.group"] %in% rlev[c(5, 9)]] <- "intermediate" risk[clinical[, "Cytogenetic.group"] %in% rlev[-c(4,5, 7,8,9)]] <- "high" risk <- as.factor(risk) names(clinical)[6] <- "FLT3" vcov.lmrob <- function(object) object$cov library("lme4") data("trees513", package = "multcomp") ################################################### ### code chunk number 3: alpha-data-figure ################################################### getOption("SweaveHooks")[["cex"]]() n <- table(alpha$alength) boxplot(elevel ~ alength, data = alpha, ylab = "Expression Level", xlab = "NACP-REP1 Allele Length", varwidth = TRUE) axis(3, at = 1:3, labels = paste("n = ", n)) rankif <- function(data) trafo(data, numeric_trafo = rank) ################################################### ### code chunk number 4: alpha-aov-tukey ################################################### data("alpha", package = "coin") amod <- aov(elevel ~ alength, data = alpha) amod_glht <- glht(amod, linfct = mcp(alength = "Tukey")) amod_glht$linfct ################################################### ### code chunk number 5: alpha-aov-coefvcov ################################################### coef(amod_glht) vcov(amod_glht) ################################################### ### code chunk number 6: alpha-aov-results ################################################### confint(amod_glht) summary(amod_glht) ################################################### ### code chunk number 7: alpha-aov-tukey-sandwich ################################################### amod_glht_sw <- glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich) summary(amod_glht_sw) ################################################### ### code chunk number 8: alpha-confint-plot ################################################### getOption("SweaveHooks")[["mai4"]]() layout(matrix(1:2, ncol = 2)) ci1 <- confint(glht(amod, linfct = mcp(alength = "Tukey"))) ci2 <- confint(glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich)) plot(ci1, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (ordinary ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) plot(ci2, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (sandwich ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) ################################################### ### code chunk number 9: bodyfat-lm-fit ################################################### data("bodyfat", package = "mboost") summary(lmod <- lm(DEXfat ~ ., data = bodyfat)) ################################################### ### code chunk number 10: bodyfat-lm-maxtest ################################################### K <- cbind(0, diag(length(coef(lmod)) - 1)) rownames(K) <- names(coef(lmod))[-1] lmod_glht <- glht(lmod, linfct = K) ################################################### ### code chunk number 11: bodyfat-lm-Ftest ################################################### summary(lmod_glht, test = Ftest()) ################################################### ### code chunk number 12: bodyfat-lm-maxtest ################################################### summary(lmod_glht) ################################################### ### code chunk number 13: bodyfat-robust ################################################### summary(glht(lmrob(DEXfat ~ ., data = bodyfat, control = lmrob.control(setting = "KS2011")), linfct = K)) ################################################### ### code chunk number 14: alzheimer-demographics ################################################### total <- nrow(alzheimer) stopifnot(total == 538) male <- sum(alzheimer$gender == "Male") stopifnot(male == 200) female <- sum(alzheimer$gender == "Female") stopifnot(female == 338) disease <- table(alzheimer$disease) smoked <- sum(alzheimer$smoking != "None") atab <- xtabs(~ smoking + + disease + gender, data = alzheimer) ### there is a discrepancy between Table 1 (32% smokers of 117 women ### suffering from other diagnoses) and Table 4 (63% non-smokers). ### We used the data as given in Table 4. ################################################### ### code chunk number 15: alzheimer-glm ################################################### data("alzheimer", package = "coin") y <- factor(alzheimer$disease == "Alzheimer", labels = c("other", "Alzheimer")) gmod <- glm(y ~ smoking * gender, data = alzheimer, family = binomial()) summary(gmod) ################################################### ### code chunk number 16: alzheimer-K ################################################### a <- cbind(levels(alzheimer$smoking), "Female") b <- cbind(levels(alzheimer$smoking), "Male") d <- rbind(a, b) smk <- factor(d[,1], levels = levels(alzheimer$smoking)) gen <- factor(d[,2], levels = levels(alzheimer$gender)) d <- data.frame(smk, gen) ### colnames(d) <- c("smoking", "gender") colnames(d) <- c("s", "g") rownames(d) <- paste(d[,1], d[,2], sep = ":") K <- model.matrix(~ s * g, data = d) colnames(K)[1] <- "(Icpt)" attr(K, "assign") <- NULL attr(K, "contrasts") <- NULL ################################################### ### code chunk number 17: alzheimer-K ################################################### K ################################################### ### code chunk number 18: alzheimer-probci (eval = FALSE) ################################################### ## gmod_ci <- confint(glht(gmod, linfct = K)) ## gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) ## plot(gmod_ci, xlab = "Probability of Developing Alzheimer", ## xlim = c(0, 1)) ################################################### ### code chunk number 19: alzheimer-plot ################################################### par(mai = par("mai") * c(1, 1.5, 1, 1)) gmod_ci <- confint(glht(gmod, linfct = K)) gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) plot(gmod_ci, xlab = "Probability of Developing Alzheimer", xlim = c(0, 1), main = "", ylim = c(0.5, 8.5)) ################################################### ### code chunk number 20: bullinger-survreg ################################################### smod <- survreg(Surv(time, event) ~ Sex + Age + WBC + LDH + FLT3 + risk, data = clinical) summary(glht(smod, linfct = mcp(risk = "Tukey"))) ################################################### ### code chunk number 21: trees-setup ################################################### trees513 <- subset(trees513, !species %in% c("fir", "softwood (other)")) trees513$species <- trees513$species[,drop = TRUE] ################################################### ### code chunk number 22: trees-lmer ################################################### mmod <- lmer(damage ~ species - 1 + (1 | lattice / plot), data = trees513, family = binomial()) K <- diag(length(fixef(mmod))) ################################################### ### code chunk number 23: trees-K-cosmetics ################################################### colnames(K) <- rownames(K) <- paste(gsub("species", "", names(fixef(mmod))), " (", table(trees513$species), ")", sep = "") ################################################### ### code chunk number 24: trees-ci ################################################### ci <- confint(glht(mmod, linfct = K)) ci$confint <- 1 - binomial()$linkinv(ci$confint) ci$confint[,2:3] <- ci$confint[,3:2] ################################################### ### code chunk number 25: trees-plot ################################################### par(mai = par("mai") * c(1, 1.2, 1, 0.8)) plot(ci, xlab = "Probability of Damage Caused by Browsing", xlim = c(0, 1), main = "", ylim = c(0.5, 6.5)) multcomp/inst/doc/chfls1.Rnw0000644000176000001440000006776112234660136015560 0ustar ripleyusers \documentclass[11pt]{article} %%\VignetteIndexEntry{Supplementary Material for "A re-evaluation of the model selection procedure in Pollet \& Nettle (2009)"} %%\VignetteDepends{xtable,car,MASS,multcomp,foreign,TH.data} \usepackage{amsmath} \usepackage[round,authoryear]{natbib} \usepackage{tabularx} \usepackage{rotating} \usepackage{wasysym} \usepackage[utf8x]{inputenc} \usepackage[left=3.5cm,right=3.5cm, bottom=3.5cm]{geometry} \usepackage[justification=justified,singlelinecheck=false,labe lfont={bf,small,sf},font={small,sf}, aboveskip=0em,belowskip=0em]{caption} \renewcommand{\captionfont}{\small} \title{Supplementary Material for \emph{A re-evaluation of the model selection procedure in Pollet \& Nettle (2009)}} \author{Esther Herberich, Torsten Hothorn, Daniel Nettle \& Thomas Pollet} \date{} \begin{document} \maketitle \SweaveOpts{engine = R, echo = FALSE, eps = TRUE} <>= options(SweaveHooks = list(leftpar = function() par(mai = par("mai") * c(1, 1.1, 1, 1)))) #options(width = 70) library("xtable") library("car") library("MASS") library("multcomp") library("foreign") #dataurl <- "http://www.src.uchicago.edu/datalib/chfls/data/chfls1.sav" #td <- tempdir() #derror <- try(download.file(dataurl, destfile = file.path(td, "chfls1.sav"), # mode = "wb")) #if (inherits(derror, "try-error")) { # cat("Vignette could not be processed -- download error.\n", # "\\end{document}\n") #} else { #### data see http://popcenter.uchicago.edu/data/chfls.shtml #chfls1 <- read.spss(file.path(td, "chfls1.sav"), to.data.frame = TRUE) #} library("TH.data") load(file.path(path.package(package="TH.data"), "rda", "CHFLS.rda")) ### warnings: Variables DC04, MZ09, and MZ11 contain duplicated ### levels. These are not needed anyway, so we ignore the warning ### for the time being. ### choose neccessary variables org <- chfls1[, c("REGION6", "ZJ05", "ZJ06", "A35", "ZJ07", "ZJ16M", "INCRM", "JK01", "JK02", "JK20", "HY04", "HY07", "A02", "AGEGAPM", "A07M", "A14", "A21", "A22M", "A23", "AX16", "INCAM", "SEXNOW", "ZW04")] names(org) <- c("Region", "Rgender", ### gender of respondent "Rage", ### age of respondent "RagestartA", ### age of respondent at beginning of relationship with partner A "Redu", ### education of respondent "RincomeM", ### rounded monthly income of respondent "RincomeComp", ### inputed monthly income of respondent "Rhealth", ### health condition respondent "Rheight", ### respondent's height "Rhappy", ### respondent's happiness "Rmartial", ### respondent's marital status "RhasA", ### R has current A partner "Agender", ### gender of partner A "RAagegap", ### age gap "RAstartage", ### age at marriage "Aheight", ### height of partner A "Aedu", ### education of partner A "AincomeM", ### rounded partner A income "AincomeEst", ### estimated partner A income "orgasm", ### orgasm frequency "AincomeComp", ### imputed partner A income "Rsexnow", ### has sex last year "Rhomosexual") ### R is homosexual ### duration of partnership org$RAduration <- org$Rage - org$RagestartA ### code missing values org$AincomeM[org$AincomeM < 0] <- NA org$RincomeM[org$RincomeM < 0] <- NA org$Aheight[org$Aheight < 0] <- NA olevels <- c("never", "rarely", "sometimes", "often", "always") orgA <- subset(org, Rgender == "female" & Rhomosexual != "yes" & orgasm %in% olevels) orgA$orgasm <- ordered(as.character(orgA$orgasm), levels = c("never", "rarely", "sometimes", "often", "always")) orgA$Redu <- factor(as.character(orgA$Redu), levels = c("univ/grad", "j col", "up mid", "low mid", "primary", "no school")) levels(orgA$Redu) <- c("univ", "jcol", "upmid", "lowmid", "primary", "noschool") orgA$Aedu <- factor(as.character(orgA$Aedu), levels = c("univ/grad", "j col", "up mid", "low mid", "primary", "no school")) orgA$Rhappy <- factor(as.character(orgA$Rhappy), levels = c("v unhappy", "not too", "relatively", "very")) orgA$Rhealth <- factor(as.character(orgA$Rhealth), levels = c("poor", "not good", "fair", "good", "excellent")) orgA$Region <- factor(as.character(orgA$Region), levels = c("CentralW", "Northeast", "North", "InlandS", "CoastalE", "CoastalS")) orgA$AincomeSD <- orgA$AincomeComp/sd(orgA$AincomeComp) orgA$AheightSD <- orgA$Aheight/sd(orgA$Aheight) orgA$RageSD <- orgA$Rage/sd(orgA$Rage) orgA$edudiff <- as.numeric(orgA$Aedu) - as.numeric(orgA$Redu) orgA$edudiffSD <- orgA$edudiff/sd(orgA$edudiff, na.rm=TRUE) orgA$wealthdiff <- orgA$RincomeComp - orgA$AincomeComp orgA$wealthdiffSD <- orgA$wealthdiff/sd(orgA$wealthdiff, na.rm=TRUE) orgA$RAdurationSD <- orgA$RAduration/sd(orgA$RAduration, na.rm=TRUE) ### Data set as used by Pollet & Nettle (2009) save(orgA, file = "orgA.Rda") @ \section*{Summary} In this paper, we first explain the statistical model underlying the ordinal regression technique used by \citet{Pollet2009}, including the two possible ways of calculating the likelihood function (section 1). We then show that the model fit criteria reported were in fact invalid, and calculate the correct ones, showing that this leads to a different choice of best model (section 2). We then suggest two other strategies of model selection for these data, and show that these also lead to different best-fitting models than that reported by \citet{Pollet2009} (sections 3 and 4). \section{Ordinal regression: The cumulative Logit Model} The appropriate model for a dependent variable $Y_i \in \{1, \ldots, R\}, \, i=1, \ldots, n$, consisting of ranked outcome categories is a cumulative logit model \citep{agresti02}: \begin{eqnarray*}P(Y_i \leq r | x_i) = \frac{\exp(\beta_{0r} - x_i^\top \beta)}{1 + \exp(\beta_{0r} - x_i^\top \beta)}, \quad r = 1, \dots, R-1. \end{eqnarray*} The model includes intercepts $\beta_{0r}$ for each category and a global parameter vector $\beta = (\beta_1, \ldots, \beta_p)$ for the $p$ covariates. \\ To obtain parameter estimates the maximum-likelihood method is used. The responses are conditionally independent and follow a multinomial distribution with \begin{eqnarray*} y_i|x_i &\sim& \mathcal{M}(1,\pi_i), \\ y_i &=& (y_{i1}, \ldots, y_{i R-1}) = (0, \ldots, 0, \underbrace{1}_{r-\text{th position}}, 0, \ldots, 0) \quad \Leftrightarrow \quad Y_i = r,\\ \pi_i &=& (\pi_{i1}, \ldots, \pi_{i R-1}) \quad \text{with} \\ \pi_{ir} &=& P(Y_i = r | x_i) = P(Y_i \leq r | x_i) - P(Y_i \leq r-1 | x_i), \; r = 1, \ldots, R-1. \end{eqnarray*} The associated likelihood function is \begin{eqnarray*}\mathcal{L}(\beta_{01}, \ldots \beta_{0R-1}, \beta; x_1, \ldots x_n) = \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \\ \quad \quad \quad \quad \quad \quad \quad \quad \quad \prod_{i=1}^n{\pi_{i1}}^{y_{i1}} \cdot {\pi_{i2}}^{y_{i2}} \cdot \ldots \cdot (1 - \pi_{i1} - \ldots - \pi_{iR-1})^{1 - y_{i1} - \ldots - y_{iR-1}}. \end{eqnarray*} To obtain the parameter estimates, the data are often (as by default in SPSS 15.0) pooled in $K$ groups, and the likelihood of the grouped data is maximized, instead of the likelihood of the individual data. Group $k, \; k = 1, \ldots K,$ includes all $h_k$ observations with the value $\tilde{x}_k = (\tilde{x}_{k1}, \ldots, \tilde{x}_{kp})$ of the covariates $x = (x_1, \ldots, x_p)$. The responses again follow a multinomial distribution: \begin{eqnarray*} \tilde{y}_k | \tilde{x}_k &\sim& \mathcal{M}(h_k, \tilde{\pi}_k), \\ \tilde{y}_k &=& (\tilde{y}_{k1}, \ldots, \tilde{y}_{kR-1}), \\ \tilde{\pi}_k &=& (\tilde{\pi}_{k1}, \ldots, \tilde{\pi}_{kR-1}). \end{eqnarray*} The vector $\tilde{y}_k$ contains the observed frequencies of the categories $1$ to $R-1$ in group $k$. $\tilde{\pi}_{kr}$ is the probability of an individual of group $k$ being in category $r$. The likelihood function of the grouped data results in \begin{eqnarray*}\mathcal{L}(\beta_{01}, \ldots \beta_{0R-1}, \beta; \tilde{x}_1, \ldots \tilde{x}_K) = \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \\ \underbrace{\prod_{k=1}^K{\frac{h_k!}{\tilde{y}_{k1}! \cdot \ldots \cdot \tilde{y}_{kR-1}}}}_{\text{multinomial constant}} \cdot \underbrace{\prod_{k=1}^K{{\tilde{\pi}_{k1}}\hspace{0.001cm}^{\tilde{y}_{k1}} \cdot {\tilde{\pi}_{k2}}\hspace{0.001cm}^{\tilde{y}_{k2}} \cdot \ldots \cdot (1 - \tilde{\pi}_{k1} - \ldots - \tilde{\pi}_{kR-1})^{1 - \tilde{y}_{k1} \ldots - \tilde{y}_{kR-1}}}}_{\text{kernel}}.\end{eqnarray*} The kernel of the likelihood function of the grouped data equals the likelihood function of the individual data. Both likelihood functions only differ by the multinomial constant in the likelihood for grouped data. Maximization of both likelihood functions results in the same parameter estimates. \section{Variable Selection according to Pollet and Nettle\label{VarSelPollet}} The analytical strategy of \citet{Pollet2009} was as follows: \\ \underline{Start}: Inclusion of partner income and partner height as independent variables. \\ \underline{Step 1}: Omission of any independent variable not significant in the start model. Significance is assessed by the Wald test without adjusting for multiplicity. \\ \underline{Subsequent steps}: Stepwise inclusion of the remaining variables in the order in which they improve model fit the most compared to the start model. The procedure stops, when model fit cannot be improved further by including another covariate. Model fit was assessed by the criteria AIC and BIC: \begin{eqnarray*} \text{AIC} &=& - 2 \cdot \ell(\hat{\theta}) + 2 \cdot \dim(\theta), \\ \text{BIC} &=& - 2 \cdot \ell(\hat{\theta}) + \log(n) \cdot \dim(\theta). \end{eqnarray*} $\ell$ denotes the logarithmized likelihood function. In the cumulative logit model the parameter vector $\theta$ is $\theta = (\beta_{01}, \ldots, \beta_{0R-1}, \beta_1, \ldots, \beta_p)$. In SPSS 15.0, the likelihood function for multinomial distributed responses is calculated by pooling the data according to the covariates (see above). Parameter estimates are the same whether they are obtained by maximization of the likelihood function for individual or grouped data. To compare several models, which differ in terms of their covariates, by the (log) likelihood function or by criteria calculated by the (log) likelihood function (like AIC and BIC), the multinomial constant has to be omitted. As grouping differs among the models due to different covariates in the models, the multinomial constant differs as well and the models cannot be compared by the likelihood which includes the constant. As SPSS 15.0 provides only $- 2 \cdot \ell(\hat{\theta})$, \citet{Pollet2009} calculated AIC and BIC by adding the penalization terms $2 \cdot \dim(\theta)$ and $\log(n) \cdot \dim(\theta)$ respectively to -2 log likelihood of the grouped data including the multinomial constant, leading to an invalid model choice. Table \ref{Pollet} shows the progress of model choice following the strategy of \citet{Pollet2009}. The invalid model fit criteria used in the paper, as well as the correctly calculated criteria, are shown. The number of model parameters differs, because Pollet and Nettle did not account for the category specific intercepts $\beta_{01}, \ldots, \beta_{0R-1}$. <>= start <- polr(orgasm ~ AincomeSD + AheightSD, data=orgA, Hess=TRUE) step1 <- polr(orgasm ~ AincomeSD, data=orgA, Hess=TRUE) step2 <- polr(orgasm ~ AincomeSD + Rhappy, data=orgA, Hess=TRUE) aic <- formatC(c(AIC(start), AIC(step1), AIC(step2)), digits = 1, format = "f") bic <- formatC(c(AIC(start, k=log(nrow(orgA))), AIC(step1, k=log(nrow(orgA))), AIC(step2, k=log(nrow(orgA)))), digits = 1, format = "f") dim_theta <- c(start$edf, step1$edf, step2$edf) logLikel <- formatC(-2* c(logLik(start), logLik(step1), logLik(step2)), digits = 1, format = "f") @ \begin{table}[t!] \centering \small \begin{tabularx}{\textwidth}{llll} \hline \vspace*{-0.3cm} \\ & Start & Step 1 & Step 2 \\ \vspace*{-0.3cm} \\ \hline \vspace*{-0.3cm} \\ Partner income & $ \surd$ & $ \surd$ & $ \surd$ \\ Partner height & $ \surd^1$ & --- & --- \\ Happiness & --- & --- & $\surd$ \\ \vspace*{-0.3cm} \\ \hline \vspace*{-0.3cm} \\ Calculations by \citet{Pollet2009}: \\ $-2 \cdot \ell(\hat{\theta})$ & 1868.1 & 405.6 & 752.4 \\ $\dim(\theta)$ & 2 & 1 & 4 \\ AIC & 1872.1 & 407.6 & 760.4$^2$ \\ BIC & 1882.8 & 412.9 & 781.7$^2$ \\ \vspace*{-0.3cm} \\ Correct calculations: \\ $-2 \cdot \ell(\hat{\theta})$ & \Sexpr{paste(logLikel, collapse = " & ")}\\ $\dim(\theta)$ & \Sexpr{paste(dim_theta, collapse = " & ")}\\ AIC & \Sexpr{paste(aic, collapse = " & ")}\\ BIC & \Sexpr{paste(bic, collapse = " & ")}\\ \vspace*{-0.3cm} \\ \hline \vspace*{-0.3cm} \\ \multicolumn{4}{l}{$^1$ Coefficient of this variable not significant based on Wald test.} \\ \multicolumn{4}{l}{$^2$ No reduction of AIC and BIC by adding a further variable} \\ \vspace*{-0.3cm} \\ \hline \vspace*{-0.3cm} \end{tabularx} \caption{\label{Pollet}Summary of variable selection in \citet{Pollet2009}.} \end{table} Start model and step 1 are the same as in table \ref{Pollet}. In the subsequent models further variables were added one at a time starting with the variable which improved model fit the most. The selected variables were the same using AIC and BIC to assess model fit except for step 4a/4b. Using BIC the model in step 5 was chosen as the best model including the variables partner income, education, age, happiness and difference in education. Using AIC as model fit criterion, inclusion of region and health could further improve model fit. The start model included partner income and partner height. The variable partner income was significant based on the Wald test and remained in the model while the variable partner height was excluded from the model due to non-significance. In step 2 inclusion of the variable self-reported happiness resulted in the best improvement of model fit compared to the start model. Inclusion of further variables did not improve model fit. Therefore the model with partner income and happiness was chosen as the best model with partner income being the only significant variable based on the Wald test. When using the correctly calculated criteria AIC and BIC, a different model is chosen. In step 2 the variable education instead of happiness is included. The progress of variable selection following to the analytical strategy of \citet{Pollet2009} using the correctly calculated criteria, is shown in table \ref{Pollet_korr}. Start model and step 1 are the same as in table \ref{Pollet}. In the subsequent models further variables were added one at a time starting with the variable which improved model fit the most. The selected variables were the same using AIC and BIC to assess model fit except for step 4a/4b. Using BIC the model in step 5 was chosen as the best model including the variables partner income, education, age, happiness and difference in education. Using AIC as model fit criterion, inclusion of region and health could further improve model fit. In the next section a further method of variable selection based on the AIC is used to determine the important factors for orgasm frequency. \newpage <>= step2 <- polr(orgasm ~ AincomeSD + Redu, data=orgA, Hess=TRUE) step3 <- polr(orgasm ~ AincomeSD + Redu + RageSD, data=orgA, Hess=TRUE) step4a <- polr(orgasm ~ AincomeSD + Redu + RageSD + Rhappy, data=orgA, Hess=TRUE) step4b <- polr(orgasm ~ AincomeSD + Redu + RageSD + edudiffSD, data=orgA, Hess=TRUE) step5 <- polr(orgasm ~ AincomeSD + Redu + RageSD + Rhappy + edudiffSD, data=orgA, Hess=TRUE) step6 <- polr(orgasm ~ AincomeSD + Redu + RageSD + Rhappy + edudiffSD + Region, data=orgA, Hess=TRUE) step7 <- polr(orgasm ~ AincomeSD + Redu + RageSD + Rhappy + edudiffSD + Region + Rhealth, data=orgA, Hess=TRUE) aic <- formatC(c(AIC(start), AIC(step1), AIC(step2), AIC(step3), AIC(step4a), AIC(step5), AIC(step6), AIC(step7)), digits = 1, format = "f") bic <- formatC(c(AIC(start, k=log(nrow(orgA))), AIC(step1, k=log(nrow(orgA))), AIC(step2, k=log(nrow(orgA))), AIC(step3, k=log(nrow(orgA))), AIC(step4b, k=log(nrow(orgA))), AIC(step5, k=log(nrow(orgA)))), digits = 1, format = "f") @ \rotatebox{90}{\parbox{\textheight}{% \begin{center} \small \vspace*{2cm} \begin{tabular}{lccccccccc} \hline \vspace*{-0.3cm} \\ & Start & Step 1 & Step 2 & Step 3 & Step 4a & Step 4b & Step 5 & Step 6 & Step 7\\ \vspace*{-0.3cm} \\ \hline \vspace*{-0.3cm} \\ Partner income & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ Partner height & $\surd$ & --- & --- & --- & --- & --- & --- & --- & --- \\ Education \female & --- & --- & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ Age \female & --- & --- & --- & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ Happiness \female & --- & --- & --- & --- & $\surd$ & --- & $\surd$ & $\surd$ & $\surd$ \\ Difference in Education & --- & --- & --- & --- & --- & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ Region & --- & --- & --- & --- & --- & --- & --- & $\surd$ & $\surd$ \\ Health \female & --- & --- & --- & --- & --- & --- & --- & --- & $\surd$ \\ \vspace*{-0.3cm} \\ \hline \vspace*{-0.3cm} \\ AIC & \Sexpr{paste(aic[1:5], collapse = " & ")}$^1$ & & \Sexpr{paste(aic[6:8], collapse = " & ")}$^4$ \\ BIC & \Sexpr{paste(bic[1:4], collapse = " & ")} & & \Sexpr{bic[5]}$^2$ & \Sexpr{bic[6]}$^3$ & &\\ \vspace*{-0.4cm} \\ \hline \vspace*{-0.3cm} \\ \multicolumn{9}{l}{$^1$ AIC for step 4a.} \\ \multicolumn{9}{l}{$^2$ BIC for step 4b.} \\ \multicolumn{9}{l}{$^3$ No reduction of BIC by adding a further variable.} \\ \multicolumn{9}{l}{$^4$ No reduction of AIC by adding a further variable.} \\ \vspace*{-0.4cm} \\ \hline \vspace*{-0.3cm} \end{tabular} \end{center} \vspace{-1em} \captionof{table}{Summary of variable selection following the strategy of \citet{Pollet2009} using the correctly calculated AIC and BIC.\newline \vspace{0.7cm}\label{Pollet_korr}}}}\newpage \section{Stepwise Backward Selection \label{VarSelstepAIC}} <>= ### stepAIC does not automatically remove missing values as of R 2.13.0 orgAtmp <- orgA[, c("orgasm", "AincomeSD", "AheightSD", "RAdurationSD", "RageSD", "edudiffSD", "wealthdiffSD", "Redu", "Rhealth", "Rhappy", "Region")] cc <- complete.cases(orgAtmp) summary(cc) orgAcc <- subset(orgA, cc) step_AIC <- stepAIC(polr(orgasm ~ AincomeSD + AheightSD + RAdurationSD + RageSD + edudiffSD + wealthdiffSD + Redu + Rhealth + Rhappy + Region, data=orgAcc, Hess=TRUE), trace = FALSE) aic <- formatC(step_AIC$anova[,6], digits = 1, format = "f") @ The stepwise backward selection starts with the saturated model, which includes all variables. Variables are omitted one at a time starting with the variable that reduces the AIC most. Variable selection stops, when the AIC cannot be reduced further by removing a variable. Note that the original data contains three missing values in variable \texttt{edudiffSD}. The corresponding observations have been removed from the data set before fitting all models presented in Table~\ref{stepAIC} but only for models involving these variable presented in Table~\ref{Pollet_korr} (since we assume the same approach was taken in SPSS). In our data a stepwise backward selection results in a reduction of the AIC from \Sexpr{aic[1]} in the saturated model to \Sexpr{aic[5]} in the reduced model. The steps of the backwise selection are shown in table \ref{stepAIC}. The variable partner income, which was included in all models when following the strategy of \citet{Pollet2009}, is here dropped in step 2. By stepwise backward selection the same variables except for partner income are chosen as by the strategy of Pollet and Nettle using the correctly calculated AIC. \begin{table}[h] \centering \small \vspace*{0.5cm} \begin{tabular}{lccccc} \hline \vspace*{-0.3cm} \\ Model & Start & Step 1 & Step 2 & Step 3 & Step 4\\ \vspace*{-0.3cm} \\ \hline \vspace*{-0.3cm} \\ Partner height & $\surd$ & --- & --- & --- & --- \\ Partner income & $\surd$ & $\surd$ & --- & --- & --- \\ Duration of relationship & $\surd$ & $\surd$ & $\surd$ & --- & --- \\ Difference in income & $\surd$ & $\surd$ & $\surd$ & $\surd$ & --- \\ Age \female & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ Diffference in education & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ Education \female & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ Happiness \female & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ Region & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ Health \female & $\surd$ & $\surd$ & $\surd$ & $\surd$ & $\surd$ \\ \vspace*{-0.3cm} \\ \hline \vspace*{-0.3cm} \\ AIC & \Sexpr{paste(aic, collapse = " & ")} \\ \vspace*{-0.4cm} \\ \hline \vspace*{-0.3cm} \end{tabular} \caption{\label{stepAIC}Steps of backward variable selection based on the AIC.} \end{table} \section{Variable Selection by Simultaneous Inference} <>= ordRegr <- polr(orgasm ~ AincomeSD + AheightSD + RAdurationSD + RageSD + edudiffSD + wealthdiffSD + Redu + Rhealth + Rhappy + Region, data=orgA, Hess=TRUE) K <- diag(1,length(coef(ordRegr))) rownames(K) <- names(coef(ordRegr)) s <- summary(glht(ordRegr, linfct = K)) variable <- c("Partner income", "Partner height", "Duration of relationship", "Age", "Difference in education", "Difference in income", "Education", "$\\quad$ University (reference category)", "$\\quad$ Junior college", "$\\quad$ Upper middle", "$\\quad$ Lower middle", "$\\quad$ Primary", "$\\quad$ No school", "Health", "$\\quad$ Poor (reference category)", "$\\quad$ Not good", "$\\quad$ Fair", "$\\quad$ Good", "$\\quad$ Excellent", "Happiness", "$\\quad$ Very unhappy (reference category)", "$\\quad$ Not too happy", "$\\quad$ Relatively happy", "$\\quad$ Very happy", "Region", "$\\quad$ Central West (reference category)", "$\\quad$ North East", "$\\quad$ North", "$\\quad$ Inland South", "$\\quad$ Coastal East", "$\\quad$ Coastal South") estimate <- formatC(as.vector(s$coef), digits = 2, format = "f") estimate <- c(estimate[1:6], "", "NA", estimate[7:11], "", "NA", estimate[12:15], "", "NA", estimate[16:18], "", "NA", estimate[19:23]) padj <- formatC(s$test$pvalue, digits = 3, format = "f") padj <- c(padj[1:6], "", "---", padj[7:11], "", "---", padj[12:15], "", "---", padj[16:18], "", "---", padj[19:23]) siminf <- cbind(variable, estimate, padj) colnames(siminf) <- c("Variable", "Estimate", "Adjusted $p$-value") @ In the following, the relevant factors for orgasm frequency are assessed using the procedure for simultaneous inference introduced by \citet{Hothorn2008b} instead of using model fit criterions like AIC and BIC. Therefore, we fit a cumulative logit model, which includes all covariates and use the max-$t$-test to select important variables based on adjusted $p$-values. The hypotheses are $$H_j^0: \beta_j = 0, \; j = 1, \ldots, p,$$ and can be specified as linear hypotheses $K \beta = 0$ with the matrix $K$ being the $p \times p$ identity matrix. Three observations with missings in variable \texttt{edudiffSD} have been removed prior to fitting the model. The parameter estimates and associated adjusted $p$-values are shown in table \ref{simOrgA}. The respondant's education is the relevant factor for orgasm frequency with a cumulative odds ratio of $\exp(\Sexpr{formatC(s$test$coef[11], digits = 2, format = "f")}) = \Sexpr{formatC(exp(s$test$coef[11]), digits = 2, format = "f")}$ comparing the categories ``No school'' and ``University''. Women with university degree have a higher chance of having an orgasm more frequently than women without school education. Associated with this is the significance of the variable ``difference in education'' with women having less orgasms the higher their partners' level of education is above their own. Further differences in orgasm frequency exist between two regions of China. <>= siminfPrint <- xtable(siminf, caption="Parameter estimates of the saturated cumulative logit model with associated adjusted $p$-values of the max-$t$-test.", label="simOrgA") align(siminfPrint) <- "llcc" print(siminfPrint, table.placement = "h!", include.rownames = FALSE, sanitize.text.function = function(x) {x}) @ Not only when selecting important variables by simultaneous inference of all parameter estimates the respondent's education was chosen as the relevant factor for orgasm frequency, but also the methods described in sections \ref{VarSelPollet} and \ref{VarSelstepAIC} selected education as an important variable among others. Therefore we further investigate the effect of education and take a look at the cumulative odds ratios when comparing the levels of the respondent's education. Again we fit a cumulative logit model including all covariates. The matrix of linear functions $K$, which sets up the linear hypothesis of model parameters, is defined in the form that consecutive levels of education are compared. The estimated log odds ratios and associated $p$-values of the simultaneous comparisons based on the max-$t$-test are summarized in table \ref{simRedu}. <>= s <- summary(glht(ordRegr, linfct = mcp(Redu = c("univ - jcol = 0", "jcol - upmid = 0", "upmid - lowmid = 0", "lowmid - primary = 0", "primary - noschool = 0")))) comparison <- c("University - Junior college", "Junior college - Upper middle", "Upper middle - Lower middle", "Lower middle - Primary", "Primary - No school") estimate <- formatC(as.vector(s$test$coef), digits = 2, format = "f") padj <- formatC(s$test$pvalue, digits = 3, format = "f") comp_edu <- cbind(comparison, estimate, padj) colnames(comp_edu) <- c("Compared levels of education", "Estimated log odds ratio", "Adjusted $p$-value") @ <>= comp_eduPrint <- xtable(comp_edu, caption="Estimated log odds ratios for comparisons of consecutive levels of education and associated adjusted $p$-values of the simultaneous comparisons.", label="simRedu") align(comp_eduPrint) <- "llcc" print(comp_eduPrint, table.placement = "h!", include.rownames = FALSE, sanitize.text.function = function(x) {x}) @ When comparing levels of education from ``No school'' to ``Upper middle school'' women with the respective higher level of education tend to have more frequent orgasms with cumulative odds ratios of \Sexpr{formatC(exp(s$test$coef[5]), digits = 2, format = "f")} (Comparison Primary school - No school), \Sexpr{formatC(exp(s$test$coef[4]), digits = 2, format = "f")} (Comparison Lower middle school - Primary school) und \Sexpr{formatC(exp(s$test$coef[3]), digits = 2, format = "f")} (Comparison Upper middle school - Lower middle school). \bibliographystyle{jss} \bibliography{chfls1} \end{document} multcomp/inst/doc/generalsiminf.Rnw0000644000176000001440000014715712234660136017221 0ustar ripleyusers%%\VignetteIndexEntry{Simultaneous Inference in General Parametric Models} %%VignetteDepends{multcomp,mboost,survival,robustbase,lme4,coin} %%\usepackage{Sweave} \documentclass[12pt,a4paper]{article} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{a4wide} %%\usepackage[lists,heads]{endfloat} \input{header} \hypersetup{ pdftitle = {Simultaneous Inference in General Parametric Models}, pdfsubject = {Manuscript}, pdfauthor = {Torsten Hothorn and Frank Bretz and Peter Westfall}, colorlinks = {true}, linkcolor = {blue}, citecolor = {blue}, urlcolor = {red}, hyperindex = {true}, linktocpage = {true}, } \SweaveOpts{engine=R, eps=FALSE, keep.source = TRUE} \begin{document} \title{Simultaneous Inference \\ in General Parametric Models \footnote{This is a preprint of an article published in Biometrical Journal, Volume 50, Number 3, 346--363. Copyright \copyright{} 2008 WILEY-VCH Verlag GmbH \& Co. KGaA, Weinheim; available online \url{http://www.biometrical-journal.com}.}} \author{\textbf{Torsten Hothorn} \\ %EndAName Institut f{\"u}r Statistik \\ Ludwig-Maximilians-Universit{\"a}t M{\"u}nchen \\ Ludwigstra{\ss }e 33, D--80539 M{\"u}nchen, Germany\\ \and \textbf{Frank Bretz} \\ %EndAName Statistical Methodology, Clinical Information Sciences\\ Novartis Pharma AG \\ CH-4002 Basel, Switzerland \\ \and \textbf{Peter Westfall} \\ %EndAName Texas Tech University \\ Lubbock, TX 79409, U.S.A} \maketitle \begin{abstract} Simultaneous inference is a common problem in many areas of application. If multiple null hypotheses are tested simultaneously, the probability of rejecting erroneously at least one of them increases beyond the pre-specified significance level. Simultaneous inference procedures have to be used which adjust for multiplicity and thus control the overall type I error rate. In this paper we describe simultaneous inference procedures in general parametric models, where the experimental questions are specified through a linear combination of elemental model parameters. The framework described here is quite general and extends the canonical theory of multiple comparison procedures in ANOVA models to linear regression problems, generalized linear models, linear mixed effects models, the Cox model, robust linear models, etc. Several examples using a variety of different statistical models illustrate the breadth of the results. For the analyses we use the \RR{} add-on package \Rpackage{multcomp}, which provides a convenient interface to the general approach adopted here. \end{abstract} \thispagestyle{empty} \setcounter{page}{0} \textbf{Key words}: multiple tests, multiple comparisons, simultaneous confidence intervals, \newline adjusted $p$-values, multivariate normal distribution, robust statistics. <>= set.seed(290875) options(prompt = "R> ") options(SweaveHooks = list(mai2 = function() par(mai = par("mai") * c(1, 2, 1, 1)), mai3 = function() par(mai = par("mai") * c(1, 3, 1, 1)), mai4 = function() par(mai = par("mai") * c(1, 2.1, 1, 0.5)), cex = function() par(cex.lab = 1.3, cex.axis = 1.3))) library("multcomp") library("survival") library("sandwich") library("robustbase") library("TH.data") data("alpha", package = "coin") data("bodyfat", package = "mboost") data("alzheimer", package = "coin") load(file.path(path.package(package = "TH.data"), "rda", "AML_Bullinger.rda")) @ <>= risk <- rep(0, nrow(clinical)) rlev <- levels(clinical[, "Cytogenetic.group"]) risk[clinical[, "Cytogenetic.group"] %in% rlev[c(7,8,4)]] <- "low" risk[clinical[, "Cytogenetic.group"] %in% rlev[c(5, 9)]] <- "intermediate" risk[clinical[, "Cytogenetic.group"] %in% rlev[-c(4,5, 7,8,9)]] <- "high" risk <- as.factor(risk) names(clinical)[6] <- "FLT3" vcov.lmrob <- function(object) object$cov library("lme4") data("trees513", package = "multcomp") @ \section{Introduction} Multiplicity is an intrinsic problem of any simultaneous inference. If each of $k$, say, null hypotheses is tested at nominal level $\alpha$, the overall type I error rate can be substantially larger than $\alpha$. That is, the probability of at least one erroneous rejection is larger than $% \alpha$ for $k \geq 2$. Common multiple comparison procedures adjust for multiplicity and thus ensure that the overall type I error remains below the pre-specified significance level $\alpha$. Examples of such multiple comparison procedures include Dunnett's many-to-one comparisons, Tukey's all-pairwise comparisons, sequential pairwise contrasts, comparisons with the average, changepoint analyses, dose-response contrasts, etc. These procedures are all well established for classical regression and ANOVA models allowing for covariates and/or factorial treatment structures with i.i.d.~normal errors and constant variance, see \cite{Bretzetal2008} and the references therein. For a general reading on multiple comparison procedures we refer to \cite{HochbergTamhane1987} and \cite{Hsu1996}. In this paper we aim at a unified description of simultaneous inference procedures in parametric models with generally correlated parameter estimates. Each individual null hypothesis is specified through a linear combination of elemental model parameters and we allow for $k$ of such null hypotheses to be tested simultaneously, regardless of the number of elemental model parameters $p$. The general framework described here extends the current canonical theory with respect to the following aspects: (i) model assumptions such as normality and homoscedasticity are relaxed, thus allowing for simultaneous inference in generalized linear models, mixed effects models, survival models, etc.; (ii) arbitrary linear functions of the elemental parameters are allowed, not just contrasts of means in AN(C)OVA models; (iii) computing the reference distribution is feasible for arbitrary designs, especially for unbalanced designs; and (iv) a unified implementation is provided which allows for a fast transition of the theoretical results to the desks of data analysts interested in simultaneous inferences for multiple hypotheses. Accordingly, the paper is organized as follows. Section~\ref{model} defines the general model and obtains the asymptotic or exact distribution of linear functions of elemental model parameters under rather weak conditions. In Section~\ref% {siminf} we describe the framework for simultaneous inference procedures in general parametric models. An overview about important applications of the methodology is given in Section~\ref{applications} followed by a short discussion of the software implementation in Section~\ref{implementation}. Most interesting from a practical point of view is Section~\ref% {illustrations} where we analyze four rather challenging problems with the tools developed in this paper. \section{Model and Parameters} \label{model} In this section we introduce the underlying model assumptions and derive some asymptotic results necessary in the subsequent sections. The results from this section form the basis for the simultaneous inference procedures described in Section~\ref{siminf}. Let $\M((\Z_1, \dots, \Z_n), \theta, \eta)$ denote a semi-parametric statistical model. The set of $n$ observations is described by $(\Z_1, \dots, \Z_n)$. The model contains fixed but unknown elemental parameters $\theta \in \R^p$ and other (random or nuisance) parameters $\eta$. We are primarily interested in the linear functions $\vartheta := \K \theta$ of the parameter vector $\theta$ as specified through the constant matrix $\K \in \R^{k, p}$. %%Assume that we are given an estimate $\hat{\theta}_n \in \R^p$ of the %%vector of elemental parameters $\theta$. In what follows we describe the underlying model assumptions, the limiting distribution of estimates of our parameters of interest $\vartheta$, as well as the corresponding test statistics for hypotheses about $\vartheta$ and their limiting joint distribution. Suppose $\hat{\theta}_n \in \R^p$ is an estimate of $\theta$ and $\Sraw \in \R^{p,p}$ is an estimate of $\cov(\hat{\theta}_n)$ with \begin{eqnarray} \label{cov} a_n \Sraw \cP \Sigmaraw \in \R^{p,p} \end{eqnarray} for some positive, nondecreasing sequence $a_n$. Furthermore, we assume that a multivariate central limit theorem holds, i.e., \begin{eqnarray} \label{clt} a_n^{1/2} (\hat{\theta}_n - \theta) \cL \N_p(0, \Sigmaraw). \end{eqnarray} If both (\ref{cov}) and (\ref{clt}) are fulfilled we write $\hat{\theta}_n \an \N_p(\theta, \Sraw)$. Then, by Theorem 3.3.A in \cite{Serfling1980}, the linear function $\hat{\vartheta}_n = \K \hat{\theta}_n$, i.e., an estimate of our parameters of interest, also follows an approximate multivariate normal distribution \begin{eqnarray*} \hat{\vartheta}_n = \K \hat{\theta}_n \an \N_k(\vartheta, \SK) \end{eqnarray*} with covariance matrix $\SK := \K \Sraw \K^\top$ for any fixed matrix $\K \in \R^{k,p}$. Thus we need not to distinguish between elemental parameters $\theta$ or derived parameters $\vartheta = \K \theta$ that are of interest to the researcher. %%for example the parameters $\K \theta$ representing %%all pairwise comparisons of elemental parameters. Instead we simply assume for the moment that we have (in analogy to (\ref{cov}) and (\ref{clt})) \begin{eqnarray} \label{assume} \hat{\vartheta}_n \an \N_k(\vartheta, \SK) \text{ with } a_n \SK \cP \SigmaK := \K \Sigma \K^\top \in \R^{k,k} \end{eqnarray} and that the $k$ parameters in $\vartheta$ are themselves the parameters of interest to the researcher. It is assumed that the diagonal elements of the covariance matrix are positive, i.e., $\SigmaK_{jj} > 0$ for $j = 1, \dots, k$. Then, the standardized estimator $\hat{\vartheta}_n$ is again asymptotically normally distributed \begin{eqnarray} \label{test} \T_n := %% \frac{\hat{\vartheta}_n - \vartheta}{\sqrt{\diag(\SK)}} = \D_n^{-1/2} (\hat{\vartheta}_n - \vartheta) \an \N_k(0, \Cor_n) \end{eqnarray} where $\D_n = \diag(\SK)$ is the diagonal matrix given by the diagonal elements of $\SK$ and \begin{eqnarray*} \Cor_n = \D_n^{-1/2} \SK \D_n^{-1/2} \in \R^{k,k} \end{eqnarray*} is the correlation matrix of the $k$-dimensional statistic $\T_n$. To demonstrate (\ref{test}), note that with (\ref{assume}) we have $a_n \SK \cP \SigmaK$ and $a_n \D_n \cP \diag(\SigmaK)$. Define the sequence $\tilde{a}_n$ needed to establish $\tilde{a}$-convergence in (\ref{test}) by $\tilde{a}_n \equiv 1$. Then we have \begin{eqnarray*} \tilde{a}_n \Cor_n & = & \D_n^{-1/2} \SK \D_n^{-1/2} \\ & = & (a_n \D_n)^{-1/2} (a_n \SK) (a_n \D_n)^{-1/2} \\ & \cP & \diag(\SigmaK)^{-1/2} \, \SigmaK \, \diag(\SigmaK)^{-1/2} =: \Cor \in \R^{k,k} \end{eqnarray*} where the convergence in probability to a constant follows from Slutzky's Theorem \citep[Theorem 1.5.4,][]{Serfling1980} and therefore (\ref{test}) holds. To finish note that \begin{eqnarray*} \T_n = \D_n^{-1/2} (\hat{\vartheta}_n - \vartheta) = (a_n \D_n)^{-1/2} a_n^{1/2} (\hat{\vartheta}_n - \vartheta) \cL \N_k(0, \Cor). \end{eqnarray*} For the purposes of multiple comparisons, we need convergence of multivariate probabilities calculated for the vector $\T_n$ when $\T_n$ is assumed normally distributed with $\Cor_n$ treated as if it were the true correlation matrix. However, such probabilities $\Prob(\max(|\T_n| \le t)$ are continuous functions of $\Cor_n$ (and a critical value $t$) which converge by $\Cor_n \cP \Cor$ as a consequence of Theorem 1.7 in \cite{Serfling1980}. In cases where $\T_n$ is assumed multivariate $t$ distributed with $\Cor_n$ treated as the estimated correlation matrix, we have similar convergence as the degrees of freedom approach infinity. Since we only assume that the parameter estimates are asymptotically normally distributed with a consistent estimate of the associated covariance matrix being available, our framework covers a large class of statistical models, including linear regression and ANOVA models, generalized linear models, linear mixed effects models, the Cox model, robust linear models, etc. Standard software packages can be used to fit such models and obtain the estimates $\hat{\theta}_n$ and $\Sraw$ which are essentially the only two quantities that are needed for what follows in Section~\ref{siminf}. It should be noted that the elemental parameters $\theta$ are not necessarily means or differences of means in AN(C)OVA models. Also, we do not restrict our attention to contrasts of such means, but allow for any set of constants leading to the linear functions $\vartheta = \K\theta $ of interest. Specific examples for $\K$ and $\theta $ will be given later in Sections~% \ref{applications} and \ref{illustrations}. \section{Global and Simultaneous Inference} \label{siminf} Based on the results from Section~\ref{model}, we now focus on the derivation of suitable inference procedures. We start considering the general linear hypothesis \citep{Searle1971} formulated in terms of our parameters of interest $\vartheta$ \begin{eqnarray*} H_0: \vartheta := \K \theta = \m. \end{eqnarray*} Under the conditions of $H_0$ it follows from Section~\ref{model} that \begin{eqnarray*} \T_n = \D_n^{-1/2} (\hat{\vartheta}_n - \m) \an \N_k(0, \Cor_n). \end{eqnarray*} This approximating distribution will now be used as the reference distribution when constructing the inference procedures. The global hypothesis $H_0$ can be tested using standard global tests, such as the $F$- or the $\chi^2$-test. An alternative approach is to use maximum tests, as explained in Subsection~% \ref{global}. Note that a small global $p$-value (obtained from one of these procedures) leading to a rejection of $H_0$ does not give further indication about the nature of the significant result. Therefore, one is often interested in the individual null hypotheses \begin{eqnarray*} H_0^j: \vartheta_j = \m_j. \end{eqnarray*} %%(Note that $H_0 = \bigcap_{j = 1}^k H_0^j$.) Testing the hypotheses set $% \{H_0^1, \ldots, H_0^k\}$ simultaneously thus requires the individual assessments while maintaining the familywise error rate, as discussed in Subsection~\ref{simtest} At this point it is worth considering two special cases. A stronger assumption than asymptotic normality of $\hat{\theta}_n$ in (\ref{clt}) is exact normality, i.e., $\hat{\theta}_n \sim \N_p(\theta, \Sigmaraw)$. If the covariance matrix $\Sigmaraw$ is known, it follows by standard arguments that $\T_n \sim \N_k(0, \Cor)$, when $\T_n$ is normalized using fixed, known variances. Otherwise, in the typical situation of linear models with normal i.i.d. errors, $\Sigmaraw = \sigma^2 \A$, where $\sigma^2$ is unknown but $\A$ is fixed and known, the exact distribution of $\T_n$ is a $k$% -dimensional multivariate $t_k(\nu, \Cor)$ distribution with $\nu$ degrees of freedom ($\nu = n - p - 1$ for linear models), see \cite{Tong1990}. \subsection{Global Inference} \label{global} %\paragraph{Global tests.} The $F$- and the $\chi^2$-test are classical approaches to assess the global null hypothesis $H_0$. Standard results \citep[such as Theorem 3.5,][]{Serfling1980} ensure that \begin{eqnarray*} X^2 & = & \T_n^\top \Cor_n^+ \T_n \cL \chi^2(\Rg(\Cor)) \quad \text{when } \hat{\theta}_n \an \N_p(\theta, \Sraw) \\ F & = & \frac{\T_n^\top \Cor^+ \T_n}{\Rg(\Cor)} \sim \F(\Rg(\Cor), \nu) \quad \text{% when } \hat{\theta}_n \sim \N_p(\theta, \sigma^2 \A), \end{eqnarray*} where $\Rg(\Cor)$ and $\nu$ are the corresponding degrees of freedom of the $\chi^2$ and $\F$ distribution, respectively. Furthermore, $\Rg(\Cor_n)^+$ denotes the Moore-Penrose inverse of the correlation matrix $\Rg(\Cor)$. Another suitable scalar test statistic for testing the global hypothesis $H_0 $ is to consider the maximum of the individual test statistics $T_{1,n}, \dots, T_{k,n}$ of the multivariate statistic $\T_n = (T_{1,n}, \dots, T_{k,n})$, leading to a max-$t$ type test statistic $\max(|\T_n|)$. The distribution of this statistic under the conditions of $H_0$ can be handled through the $k$-dimensional distribution \begin{eqnarray} \label{maxt} \Prob(\max(|\T_n|) \le t) \cong \int\limits_{-t}^t \cdots \int\limits_{-t}^t \varphi_k(x_1, \dots, x_k; \Cor, \nu) \, dx_1 \cdots dx_k =: g_\nu(\Cor, t) \end{eqnarray} for some $t \in \R$, where $\varphi_k$ is the density function of either the limiting $k$-dimensional multivariate normal (with $\nu = \infty$ and the `$% \approx$' operator) or the exact multivariate $t_k(\nu, \Cor)$-distribution (with $\nu < \infty$ and the `$=$' operator). Since $\Cor$ is usually unknown, we plug-in the consistent estimate $\Cor_n$ as discussed in Section~\ref{model}. The resulting global $p$-value (exact or approximate, depending on context) for $H_0$ is $1 - g_\nu(\Cor_n, \max|\tt|)$ when $\T = \tt$ has been observed. Efficient methods for approximating the above multivariate normal and $t$ integrals are described in \cite{Genz1992,GenzBretz1999,BretzGenzHothorn2001} and \cite% {GenzBretz2002}. %The procedures %are applicable to small and moderate problems with up to $k < 100$ hypotheses. In contrast to the global $F$- or $\chi^2$-test, the max-$t$ test based on the test statistic $\max(|\T_n|)$ also provides information, which of the $k$ individual null hypotheses $% H_0^j, j = 1, \dots, k$ is significant, as well as simultaneous confidence intervals, as shown in the next subsection. \subsection{Simultaneous Inference} \label{simtest} %\paragraph{Simultaneous tests.} We now consider testing the $k$ null hypotheses $H_0^1, \ldots, H_0^k$ individually and require that the familywise error rate, i.e., the probability of falsely rejecting at least one true null hypothesis, is bounded by the nominal significance level $\alpha \in (0, 1)$. In what follows we use adjusted $p$-values to describe the decision rules. Adjusted $% p$-values are defined as the smallest significance level for which one still rejects an individual hypothesis $H_0^j$, given a particular multiple test procedure. In the present context of single-step tests, the (at least asymptotic) adjusted $p$-value for the $j$th individual two-sided hypothesis $H_0^j: \vartheta_j = \m_j, j = 1, \dots, k, $ is given by \begin{eqnarray*} p_j = 1 - g_\nu(\Cor_n, |t_j|), \end{eqnarray*} where $t_1, \dots, t_k$ denote the observed test statistics. By construction, we can reject an individual null hypothesis $H_0^j$, $j= 1, \ldots, k$, whenever the associated adjusted $p$-value is less than or equal to the pre-specified significance level $\alpha$, i.e., $p_j \leq \alpha$. The adjusted $p$-values are calculated from expression~(\ref{maxt}). Similar results also hold for one-sided testing problems. The adjusted $p$-values for one-sided cases are defined analogously, using one-sided multidimensional integrals instead of the two-sided integrals (\ref{maxt}). Again, we refer to \cite{Genz1992,GenzBretz1999,BretzGenzHothorn2001} and \cite{GenzBretz2002} for the numerical details. %\paragraph{Simultaneous confidence intervals.} In addition to a simultaneous test procedure, a (at least approximate) simultaneous $(1 - 2\alpha) \times 100\%$ confidence interval for $\vartheta$ is given by \begin{eqnarray*} \hat{\vartheta}_n \pm q_\alpha \D_n^{1/2} \end{eqnarray*} where $q_\alpha$ is the $1 - \alpha$ quantile of the distribution (asymptotic, if necessary) of $\T_n$. This quantile can be calculated or approximated via (\ref{maxt}), i.e., $q_\alpha$ is chosen such that $g_\nu(\Cor_n, q_\alpha) = 1 - \alpha$. The corresponding one-sided versions are defined analogously. It should be noted that the simultaneous inference procedures described so far belong to the class of single-step procedures, since a common critical value $q_\alpha$ is used for the individual tests. Single-step procedures have the advantage that corresponding simultaneous confidence intervals are easily available, as previously noted. However, single-step procedures can always be improved by stepwise extensions based on the closed test procedure. That is, for a given family of null hypotheses $H_0^1, \dots, H_0^k$, an individual hypothesis $H_0^j$ is rejected only if all intersection hypotheses $H_J = \bigcap_{i \in J} H_0^i$ with $j \in J \subseteq \{1, \dots, k\}$ are rejected \citep{Marcusetal1976}. Such stepwise extensions can thus be applied to any of the methods discussed in this paper, see for example \cite{Westfall1997} and \cite{WestfallTobias2007}. %%In fact, the \Rpackage{multcomp} package %%introduced in Section~\ref{implementation} uses max-$t$ %%type statistics for each intersection hypothesis based on the %%methods from this paper, thus accounting for stochastic %%dependencies. Furthermore, the implementation of \Rpackage{multcomp} %%exploits logical constraints, leading to computationally %%efficient, yet powerful truncated closed test procedures, see %%\cite{Westfall1997} and \cite{WestfallTobias2007}. \section{Applications} \label{applications} The methodological framework described in Sections~\ref{model} and \ref% {siminf} is very general and thus applicable to a wide range of statistical models. Many estimation techniques, such as (restricted) maximum likelihood and M-estimation, provide at least asymptotically normal estimates of the elemental parameters together with consistent estimates of their covariance matrix. In this section we illustrate the generality of the methodology by reviewing some potential applications. Detailed numerical examples are discussed in Section~\ref{illustrations}. In what follows, we assume $\m = 0$ only for the sake of simplicity. The next paragraphs highlight a subjective selection of some special cases of practical importance. \paragraph{Multiple Linear Regression.} In standard regression models the observations $\Z_i$ of subject $i=1, \ldots, n$ consist of a response variable $Y_i$ and a vector of covariates $% \X_i = (X_{i1}, \dots, X_{iq})$, such that $\Z_i = (Y_i, \X_i)$ and $p = q + 1$. The response is modelled by a linear combination of the covariates with normal error $\varepsilon_i$ and constant variance $\sigma^2$, \begin{eqnarray*} Y_i = \beta_0 + \sum_{j = 1}^q \beta_j X_{ij} + \sigma \varepsilon_i, \end{eqnarray*} where $\varepsilon = (\varepsilon_1, \dots, \varepsilon_n)^\top \sim \N_n(0, \mathbf{I}_n).$ The elemental parameter vector is $\theta = (\beta_0, \beta_1, \dots, \beta_q)$, which is usually estimated by \begin{eqnarray*} \hat{\theta}_n = \left(\X^\top\X\right)^{-1} \X^\top \Y \sim \N% _{q+1}\left(\theta, \sigma^2 \left(\X^\top\X\right)^{-1}\right), \end{eqnarray*} where $\Y = (Y_1, \dots, Y_n)$ denotes the response vector and $\X = (1, (X_{ij}))_{ij}$ denotes the design matrix, $i = 1, \dots, n, j = 1, \dots, q$. Thus, for every matrix $\K \in \R^{k,q+1}$ of constants determining the experimental questions of interest we have \begin{eqnarray*} \hat{\vartheta}_n = \K \hat{\theta}_n \sim \N_k(\K \theta, \sigma^2 \K \left(\X^\top\X% \right)^{-1} \K^\top). \end{eqnarray*} Under the null hypothesis $\vartheta = 0$ the standardized test statistic follows a multivariate $t$ distribution \begin{eqnarray*} \T_n = \D_n^{-1/2} \hat{\vartheta}_n \sim t_{q+1}(n - q, \Cor), \end{eqnarray*} where $\D_n = \hat{\sigma}^2 \diag(\K \left(\X^\top\X \right)^{-1} \K^\top)$ is the diagonal matrix of the estimated variances of $\K \hat{\theta}$ and $\Cor$ is the correlation matrix as given in Section~\ref{siminf}. The body fat prediction example presented in Subsection \ref{bodyfat} illustrates the application of simultaneous inference procedures in the context of variable selection in linear regression models. \paragraph{One-way ANOVA.} Consider a one-way ANOVA model for a factor measured at $q$ levels with a continuous response \begin{eqnarray} \label{one-way} Y_{ij} = \mu + \gamma_{j} + \varepsilon_{ij} \end{eqnarray} and independent normal errors $\varepsilon_{ij} \sim \N_1(0, \sigma^2), j = 1, \dots, q, i = 1, \dots, n_j$. Note that the model description in (\ref% {one-way}) is overparameterized. A standard approach is to consider a suitable re-parametrization. The so-called "treatment contrast" vector $% \theta = (\mu, \gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \dots, \gamma_q - \gamma_1)$ is, for example, the default re-parametrization used as elemental parameters in the \RR-system for statistical computing \citep{rcore2007}. Many classical multiple comparison procedures can be embedded into this framework, including Dunnett's many-to-one comparisons and Tukey's all-pairwise comparisons. For Dunnett's procedure, the differences $% \gamma_j - \gamma_1$ are tested for all $j=2, \ldots, q$, where $\gamma_1$ denotes the mean treatment effect of a control group. In the notation from Section~\ref{model} we thus have \begin{eqnarray*} \K_\text{Dunnett} = (0, \diag(q)) \end{eqnarray*} resulting in the parameters of interest \begin{eqnarray*} \vartheta_\text{Dunnett} = \K_\text{Dunnett} \theta = (\gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \dots, \gamma_q - \gamma_1) \end{eqnarray*} of interest. For Tukey's procedure, the interest is in all-pairwise comparisons of the parameters $\gamma_1, \dots, \gamma_q$. For $q = 3$, for example, we have \begin{eqnarray*} \K_\text{Tukey} = \left( \begin{array}{rrr} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & -1% \end{array} \right) \end{eqnarray*} with parameters of interest \begin{eqnarray*} \vartheta_\text{Tukey} = \K_\text{Tukey} \theta = (\gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \gamma_2 - \gamma_3). \end{eqnarray*} Many further multiple comparison procedures have been investigated in the past, which all fit into this framework. We refer to \cite{BretzGenzHothorn2001} for a related comprehensive list. Note that under the standard ANOVA assumptions of i.i.d.~normal errors with constant variance the vector of test statistics $\T_n$ follows a multivariate $t$ distribution. Thus, related simultaneous tests and confidence intervals do not rely on asymptotics and can be computed analytically instead, as shown in Section~\ref{siminf}. To illustrate simultaneous inference procedures in one-way ANOVA models, we consider all pairwise comparisons of expression levels for various genetic conditions of alcoholism in Subsection~\ref{alpha}. \paragraph{Further parametric models.} In \emph{generalized linear models}, the exact distribution of the parameter estimates is usually unknown and thus the asymptotic normal distribution is the basis for all inference procedures. When we are interested in inference about model parameters corresponding to levels of a certain factor, the same multiple comparison procedures as sketched above are available. \emph{Linear and non-linear} mixed effects models fitted by restricted maximum-likelihood provide the data analyst with asymptotically normal estimates and a consistent covariance matrix as well so that all assumptions of our framework are met and one can set up simultaneous inference procedures for these models as well. The same is true for the \emph{Cox model} or other parametric survival models such as the \emph{Weibull model}. We use logistic regression models to estimated the probability of suffering from Alzheimer's disease in Subsection~\ref{alzheimer}, compare several risk factors for survival of leukemia patients by means of a Weibull model in Subsection~\ref{AML} and obtain probability estimates of deer browsing for various tree species from mixed models in Subsection~\ref{forest}. \paragraph{Robust simultaneous inference.} Yet another application is to use robust variants of the previously discussed statistical models. One possibility is to consider the use of sandwich estimators $\Sraw$ for the covariance matrix $\cov(\hat{\theta}_n)$ when, for example, the variance homogeneity assumption is violated. An alternative is to apply robust estimation techniques in linear models, for example S-, M- or MM-estimation \citep[see][for example]{RousseeuwLeroy2003, mfluc:Stefanski+Boos:2002, Yohai1987}, which again provide us with asymptotically normal estimates. The reader is referred to Subsection~\ref{bodyfat} for some numerical examples illustrating these ideas. \section{Implementation} \label{implementation} The \Rpackage{multcomp} package \citep{pkg:multcomp} in \RR{} \citep{rcore2007} provides a general implementation of the framework for simultaneous inference in semi-parametric models described in Sections~\ref{model} and~\ref{siminf}. The numerical examples in Section~\ref{illustrations} will all be analyzed using the \Rpackage{multcomp} package. In this section we briefly introduce the user-interface and refer the reader to the online documentation of the package for the technical details. Estimated model coefficients $\hat{\theta}_n$ and their estimated covariance matrix $% \Sraw$ are accessible in \RR{} via \Rcmd{coef()} and \Rcmd{vcov()} methods available for most statistical models in \RR, such as objects of class \Rclass{lm}, \Rclass{glm}, \Rclass{coxph}, \Rclass{nlme}, \Rclass{mer} or % \Rclass{survreg}. Having this information at hand, the \Rcmd{glht()} function sets up the \underline{g}eneral \underline{l}inear \underline{h}ypo\underline{t}% hesis for a model `\Robject{model}' and a representation of the matrix $\K$ (via its \Robject{linfct} argument): \begin{Sinput} glht(model, linfct, alternative = c("two.sided", "less", "greater"), rhs = 0, ...) \end{Sinput} The two remaining arguments \Rarg{alternative} and \Rarg{rhs} define the direction of the alternative (see Section~\ref{siminf}) and $\m$, respectively. The matrix $\K$ can be described in three different ways: \begin{itemize} \item by a matrix with \Rcmd{length(coef(model))} columns, or \item by an expression or character vector giving a symbolic description of the linear functions of interest, or \item by an object of class \Rclass{mcp} (for \underline{m}ultiple \underline{c}omparison \underline{p}rocedure). \end{itemize} The last alternative is convenient when contrasts of factor levels are to be compared and the model contrasts used to define the design matrix of the model have to be taken into account. The \Rcmd{mcp()} function takes the name of the factor to be tested as an argument as well as a character defining the type of comparisons as its value. For example, \Rcmd{mcp(treat = "Tukey")} sets up a matrix $\K$ for Tukey's all-pairwise comparisons among the levels of the factor \Robject{treat}, which has to appear on right hand side of the model formula of \Robject{model}. In this particular case, we need to assume that \Rcmd{model.frame()} and \Rcmd{model.matrix()} methods for \Robject{model} are available as well. The \Rcmd{mcp()} function must be used with care when defining parameters of interest in two-way ANOVA or ANCOVA models. Here, the definition of treatment differences (such as Tukey's all-pair comparisons or Dunnett's comparison with a control) might be problem-specific. For example, in an ANCOVA model (here without intercept term) \begin{eqnarray*} Y_{ij} = \gamma_j + \beta_j X_i + \varepsilon_{ij}; \quad j = 1, \dots, q, i = 1, \dots, n_j \end{eqnarray*} the parameters of interest might be $\gamma_j - \gamma_1 + \beta_j x - \beta_1 x$ for some value $x$ of the continuous covariate $X$ rather than the comparisons with a control $\gamma_j - \gamma_1$ that would be computed by \Rcmd{mcp()} with \Rcmd{"Dunnett"} option. The same problem occurs when interaction terms are present in a two-way ANOVA model, where the hypotheses might depend on the sample sizes. Because it is impossible to determine the parameters of interest automatically in this case, \Rcmd{mcp()} in \Rpackage{multcomp} will by default generate comparisons for the main effects $\gamma_j$ only, ignoring covariates and interactions. Since version 1.1-2, one can specify to average over interaction terms and covariates using arguments \verb|interaction_average = TRUE| and \verb|covariate_average = TRUE| respectively, whereas versions older than 1.0-0 automatically averaged over interaction terms. We suggest to the users, however, that they write out, manually, the set of contrasts they want. One should do this whenever there is doubt about what the default contrasts measure, which typically happens in models with higher order interaction terms. We refer to \cite{Hsu1996}, Chapter~7, and \cite{Searle1971}, Chapter~7.3, for further discussions and examples on this issue. Objects of class \Rclass{glht} returned by \Rcmd{glht()} include % \Rcmd{coef()} and \Rcmd{vcov()} methods to compute $\hat{\vartheta}_n$ and $% \SK$. Furthermore, a \Rcmd{summary()} method is available to perform different tests (max $t$, $\chi^2$ and $F$-tests) and $p$-value adjustments, including those taking logical constraints into account \citep{Shaffer1986, Westfall1997}. In addition, the \Rcmd{confint()} method applied to objects of class \Rclass{glht} returns simultaneous confidence intervals and allows for a graphical representation of the results. The numerical accuracy of adjusted $p$-values and simultaneous confidence intervals implemented in % \Rpackage{multcomp} is continuously checked against results reported by \cite% {Westfall1999}. \section{Illustrations} \label{illustrations} \subsection{Genetic Components of Alcoholism} \label{alpha} Various studies have linked alcohol dependence phenotypes to chromosome 4. One candidate gene is \textit{NACP} (non-amyloid component of plaques), coding for alpha synuclein. \cite{Boenscheta2005} found longer alleles of \textit{NACP}-REP1 in alcohol-dependent patients compared with healthy controls and report that the allele lengths show some association with levels of expressed alpha synuclein mRNA in alcohol-dependent subjects (see Figure~\ref{alpha-box}). Allele length is measured as a sum score built from additive dinucleotide repeat length and categorized into three groups: short ($0-4$, $n = 24$), intermediate ($5-9$, $n = 58$), and long ($10-12$, $n = 15$). The data are available from package \Rpackage{coin}. Here, we are interested in comparing the distribution of the expression level of alpha synuclein mRNA in three groups of subjects defined by the allele length. \setkeys{Gin}{width=0.6\textwidth} \begin{figure}[t] \begin{center} <>= n <- table(alpha$alength) boxplot(elevel ~ alength, data = alpha, ylab = "Expression Level", xlab = "NACP-REP1 Allele Length", varwidth = TRUE) axis(3, at = 1:3, labels = paste("n = ", n)) rankif <- function(data) trafo(data, numeric_trafo = rank) @ \caption{\Robject{alpha} data: Distribution of levels of expressed alpha synuclein mRNA in three groups defined by the \textit{NACP}-REP1 allele lengths. \label{alpha-box}} \end{center} \end{figure} Thus, we fit a simple one-way ANOVA model to the data and define $\K$ such that $\K \theta$ contains all three group differences (Tukey's all-pairwise comparisons): <>= data("alpha", package = "coin") amod <- aov(elevel ~ alength, data = alpha) amod_glht <- glht(amod, linfct = mcp(alength = "Tukey")) amod_glht$linfct @ The \Robject{amod\_glht} object now contains information about the estimated linear function $\hat{\vartheta}_n$ and their covariance matrix $\SK$ which can be inspected via the \Rcmd{coef()} and \Rcmd{vcov()} methods: <>= coef(amod_glht) vcov(amod_glht) @ The \Rcmd{summary()} and \Rcmd{confint()} methods can be used to compute a summary statistic including adjusted $p$-values and simultaneous confidence intervals, respectively: <>= confint(amod_glht) summary(amod_glht) @ Because of the variance heterogeneity that can be observed in Figure~\ref{alpha-box}, one might be concerned with the validity of the above results stating that there is no difference between any combination of the three allele lengths. A sandwich estimator $\Sraw$ might be more appropriate in this situation, and the \Rarg{vcov} argument can be used to specify a function to compute some alternative covariance estimator $\Sraw$ as follows: <>= amod_glht_sw <- glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich) summary(amod_glht_sw) @ We used the \Rcmd{sandwich()} function from package \Rpackage{sandwich} \citep{Zeileis2004, Zeileis2006} which provides us with a heteroscedasticity-consistent estimator of the covariance matrix. This result is more in line with previously published findings for this study obtained from non-parametric test procedures such as the Kruskal-Wallis test. A comparison of the simultaneous confidence intervals calculated based on the ordinary and sandwich estimator is given in Figure~\ref{alpha-ci}. \setkeys{Gin}{width=0.95\textwidth} \begin{figure}[h] \begin{center} <>= layout(matrix(1:2, ncol = 2)) ci1 <- confint(glht(amod, linfct = mcp(alength = "Tukey"))) ci2 <- confint(glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich)) plot(ci1, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (ordinary ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) plot(ci2, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (sandwich ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) @ \caption{\Robject{alpha} data: Simultaneous confidence intervals based on the ordinary covariance matrix (left) and a sandwich estimator (right). \label{alpha-ci}} \end{center} \end{figure} %%<>= %%dev.off() %%@ \subsection{Prediction of Total Body Fat} \label{bodyfat} \citet{garcia2005} report on the development of predictive regression equations for body fat content by means of $p = 9$ common anthropometric measurements which were obtained for $n = 71$ healthy German women. In addition, the women's body composition was measured by Dual Energy X-Ray Absorptiometry (DXA). This reference method is very accurate in measuring body fat but finds little applicability in practical environments, mainly because of high costs and the methodological efforts needed. Therefore, a simple regression equation for predicting DXA measurements of body fat is of special interest for the practitioner. Backward-elimination was applied to select important variables from the available anthropometrical measurements and \citet{garcia2005} report a final linear model utilizing hip circumference, knee breadth and a compound covariate which is defined as the sum of log chin skinfold, log triceps skinfold and log subscapular skinfold. Here, we fit the saturated model to the data and use the max-$t$ test over all $t$-statistics to select important variables based on adjusted $p$-values. The linear model including all covariates and the classical unadjusted $p$-values are given by <>= data("bodyfat", package = "mboost") summary(lmod <- lm(DEXfat ~ ., data = bodyfat)) @ The marix of linear functions $\K$ is basically the identity matrix, except for the intercept which is omitted. Once the matrix $\K$ has been defined, it can be used to set up the general linear hypotheses: <>= K <- cbind(0, diag(length(coef(lmod)) - 1)) rownames(K) <- names(coef(lmod))[-1] lmod_glht <- glht(lmod, linfct = K) @ Classically, one would perform an $F$-test to check if any of the regression coefficients is non-zero: <>= summary(lmod_glht, test = Ftest()) @ but the source of the deviation from the global null hypothesis can only be inspected by the corresponding max-$t$ test, i.e., via <>= summary(lmod_glht) @ Only two covariates, waist and hip circumference, seem to be important and caused the rejection of $H_0$. Alternatively, an MM-estimator \citep{Yohai1987} as implemented by \Rcmd{lmrob()} from package \Rpackage{lmrob} \citep{pkg:robustbase} can be used to fit a robust version of the above linear model, the results coincide rather nicely (note that the control arguments to \Rcmd{lmrob()} were changed in \Rpackage{multcomp} version 1.2-6 and thus the results have slightly changed): <>= summary(glht(lmrob(DEXfat ~ ., data = bodyfat, control = lmrob.control(setting = "KS2011")), linfct = K)) @ and the result reported above holds under very mild model assumptions. \subsection{Smoking and Alzheimer's Disease} \label{alzheimer} <>= total <- nrow(alzheimer) stopifnot(total == 538) male <- sum(alzheimer$gender == "Male") stopifnot(male == 200) female <- sum(alzheimer$gender == "Female") stopifnot(female == 338) disease <- table(alzheimer$disease) smoked <- sum(alzheimer$smoking != "None") atab <- xtabs(~ smoking + + disease + gender, data = alzheimer) ### there is a discrepancy between Table 1 (32% smokers of 117 women ### suffering from other diagnoses) and Table 4 (63% non-smokers). ### We used the data as given in Table 4. @ \cite{SalibHillier1997} report results of a case-control study on Alzheimer's disease and smoking behavior of $\Sexpr{disease["Alzheimer"]}$ female and male Alzheimer patients and $\Sexpr{disease[names(disease) != "Alzheimer"]}$ controls. The \Robject{alzheimer} data %% shown in Table~\ref{alzheimertab} have been re-constructed from Table~4 in \cite{SalibHillier1997}. %% and are depicted in Figure~\ref{alz-plot}. The authors conclude that `cigarette smoking is less frequent in men with Alzheimer's disease.' Originally, one was interested to assess whether there is any association between smoking and Alzheimer's (or other dementia) diseases. Here, we focus on how a potential association can be described \citep[see][for a non-parametric approach]{Hothorn:2006:AmStat}. First, we fit a logistic regression model including both main effects and an interaction effect of smoking and gender. The response is a binary variable giving the diagnosis of the patient (either suffering from Alzheimer's disease or other dementias): <>= data("alzheimer", package = "coin") y <- factor(alzheimer$disease == "Alzheimer", labels = c("other", "Alzheimer")) gmod <- glm(y ~ smoking * gender, data = alzheimer, family = binomial()) summary(gmod) @ The negative regression coefficient for heavy smoking males indicates that Alzheimer's disease might be less frequent in this group, but the model is still difficult to interpret based on the coefficients and corresponding $p$-values only. Therefore, confidence intervals on the probability scale for the different `risk groups' are interesting and can be computed as follows. For each combination of gender and smoking behavior, the probability of suffering from Alzheimer's disease can be estimated by computing the logit function of the linear predictor from model \Robject{gmod}. Using the \Rcmd{predict()} method for generalized linear models is a convenient way to compute these probability estimates. Alternatively, we can set up $\K$ such that $\left(1 + \exp(- \hat{\vartheta}_n)\right)^{-1}$ is the vector of estimated probabilities with simultaneous confidence intervals \begin{eqnarray*} \left(\left(1 + \exp\left(- \left(\hat{\vartheta}_n - q_\alpha \D_n^{1/2}\right)\right)\right)^{-1}, \left(1 + \exp\left(- \left(\hat{\vartheta}_n + q_\alpha \D_n^{1/2}\right)\right)\right)^{-1}\right). \end{eqnarray*} <>= a <- cbind(levels(alzheimer$smoking), "Female") b <- cbind(levels(alzheimer$smoking), "Male") d <- rbind(a, b) smk <- factor(d[,1], levels = levels(alzheimer$smoking)) gen <- factor(d[,2], levels = levels(alzheimer$gender)) d <- data.frame(smk, gen) ### colnames(d) <- c("smoking", "gender") colnames(d) <- c("s", "g") rownames(d) <- paste(d[,1], d[,2], sep = ":") K <- model.matrix(~ s * g, data = d) colnames(K)[1] <- "(Icpt)" attr(K, "assign") <- NULL attr(K, "contrasts") <- NULL @ For our model, $\K$ is given by the following matrix (essentially the design matrix of \Robject{gmod} for eight persons with different smoking behavior from both genders) \small <>= K @ \normalsize and can easily be used to compute the confidence intervals described above <>= gmod_ci <- confint(glht(gmod, linfct = K)) gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) plot(gmod_ci, xlab = "Probability of Developing Alzheimer", xlim = c(0, 1)) @ The simultaneous confidence intervals are depicted in Figure~\ref{alzheimer-plot}. Using this representation of the results, it is obvious that Alzheimer's disease is less frequent in heavy smoking men compared to all other configurations of the two covariates. \setkeys{Gin}{width=0.8\textwidth} \begin{figure}[h] \begin{center} <>= par(mai = par("mai") * c(1, 1.5, 1, 1)) gmod_ci <- confint(glht(gmod, linfct = K)) gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) plot(gmod_ci, xlab = "Probability of Developing Alzheimer", xlim = c(0, 1), main = "", ylim = c(0.5, 8.5)) @ \caption{\Robject{alzheimer} data: Simultaneous confidence intervals for the probability to suffer from Alzheimer's disease. \label{alzheimer-plot}} \end{center} \end{figure} \subsection{Acute Myeloid Leukemia Survival} \label{AML} The treatment of patients suffering from acute myeloid leukemia (AML) is determined by a tumor classification scheme taking the status of various cytogenetic aberrations into account. \cite{Bullingeretal2004} investigate an extended tumor classification scheme incorporating molecular subgroups of the disease obtained by gene expression profiling. The analyses reported here are based on clinical data only (thus omitting available gene expression data) published online at \url{http://www.ncbi.nlm.nih.gov/geo}, accession number GSE425. The overall survival time and censoring indicator as well as the clinical variables age, sex, lactic dehydrogenase level (LDH), white blood cell count (WBC), and treatment group are taken from Supplementary Table 1 in \cite{Bullingeretal2004}. In addition, this table provides two molecular markers, the fms-like tyrosine kinase 3 (FLT3) and the mixed-lineage leukemia (MLL) gene, as well as cytogenetic information helpful to define a risk score (`low': karyotype t(8;21), t(15;17) and inv(16); `intermediate': normal karyotype and t(9;11); and `high': all other forms). One interesting question might be the usefulness of this risk score. Here, we fit a Weibull survival model to the data including all above mentioned covariates as well as their interactions with the patient's gender. Tukey's all-pairwise comparisons highlight that there seems to be a difference between `high' scores and both `low' and `intermediate' ones but the latter two aren't distinguishable: <>= smod <- survreg(Surv(time, event) ~ Sex + Age + WBC + LDH + FLT3 + risk, data = clinical) summary(glht(smod, linfct = mcp(risk = "Tukey"))) @ Again, a sandwich estimator of the covariance matrix $\Sraw$ can be plugged-in but the results stay very much the same in this case. %%<>= %%dev.off() %%@ \subsection{Forest Regeneration} \label{forest} In most parts of Germany, the natural or artificial regeneration of forests is difficult due to a high browsing intensity. Young trees suffer from browsing damage, mostly by roe and red deer. In order to estimate the browsing intensity for several tree species, the Bavarian State Ministry of Agriculture and Forestry conducts a survey every three years. Based on the estimated percentage of damaged trees, suggestions for the implementation or modification of deer management plans are made. The survey takes place in all $756$ game management districts (`Hegegemeinschaften') in Bavaria. Here, we focus on the 2006 data of the game management district number 513 `Unterer Aischgrund' (located in Frankonia between Erlangen and H\"ochstadt). The data of \Sexpr{nrow(trees513)} trees include the species and a binary variable indicating whether or not the tree suffers from damage caused by deer browsing. We fit a mixed logistic regression model \citep[using package \Rpackage{lme4},][]{Rnews:Bates:2005,pkg:lme4} without intercept and with random effects accounting for the spatial variation of the trees. For each plot nested within a set of five plots orientated on a 100m transect (the location of the transect is determined by a pre-defined equally spaced lattice of the area under test), a random intercept is included in the model. We are interested in probability estimates and confidence intervals for each tree species. Each of the six fixed parameters of the model corresponds to one species, therefore, $\K = \text{diag}(6)$ is the linear function we are interested in: <>= trees513 <- subset(trees513, !species %in% c("fir", "softwood (other)")) trees513$species <- trees513$species[,drop = TRUE] @ <>= mmod <- lmer(damage ~ species - 1 + (1 | lattice / plot), data = trees513, family = binomial()) K <- diag(length(fixef(mmod))) @ <>= colnames(K) <- rownames(K) <- paste(gsub("species", "", names(fixef(mmod))), " (", table(trees513$species), ")", sep = "") @ Based on $\K$, we first compute simultaneous confidence intervals for $\K \theta$ and transform these into probabilities: <>= ci <- confint(glht(mmod, linfct = K)) ci$confint <- 1 - binomial()$linkinv(ci$confint) ci$confint[,2:3] <- ci$confint[,3:2] @ The result is shown in Figure~\ref{browsing}. Browsing is less frequent in hardwood but especially small oak trees are severely at risk. Consequently, the local authorities increased the number of roe deers to be harvested in the following years. The large confidence interval for ash, maple, elm and lime trees is caused by the small sample size. \setkeys{Gin}{width=0.8\textwidth} \begin{figure}[t] \begin{center} <>= par(mai = par("mai") * c(1, 1.2, 1, 0.8)) plot(ci, xlab = "Probability of Damage Caused by Browsing", xlim = c(0, 1), main = "", ylim = c(0.5, 6.5)) @ \caption{\Robject{trees513} data: Probability of damage caused by roe deer browsing for six tree species. Sample sizes are given in brackets. \label{browsing}} \end{center} \end{figure} \section{Conclusion} Multiple comparisons in linear models have been in use for a long time, see \cite{HochbergTamhane1987}, \cite{Hsu1996}, and \cite{Bretzetal2008}. In this paper we have extended the theory to a broader class of parametric and semi-parametric statistical models, which allows for a unified treatment of multiple comparisons and other simultaneous inference procedures in generalized linear models, mixed models, models for censored data, robust models, etc. In essence, all that is required is a parameter estimate $\hat{\theta}_n$ following an asymptotic multivariate normal distribution, and a consistent estimate of its covariance matrix. Standard software packages can be used to compute these quantities. As shown in this paper, these quantities are sufficient to derive powerful simultaneous inference procedures, which are tailored to the experimental questions under investigation. Therefore, honest decisions based on simultaneous inference procedures maintaining a pre-specified familywise error rate (at least asymptotically) can now be based on almost all classical and modern statistical models. The examples given in Section~\ref{illustrations} illustrate two facts. At first, the presented approach helps to formulate simultaneous inference procedures in situations that were previously hard to deal with and, at second, a flexible open-source implementation offers tools to actually perform such procedures rather easily. With the \Rpackage{multcomp} package, freely available from \url{http://CRAN.R-project.org}, honest simultaneous inference is only two simple \RR{} commands away. The analyses shown in Section~\ref{illustrations} are reproducible via the \Rpackage{multcomp} package vignette ``\Rcmd{generalsiminf}''. \bibliographystyle{plainnat} \bibliography{references} \end{document} multcomp/inst/doc/multcomp-examples.Rnw0000644000176000001440000003210512234660136020034 0ustar ripleyusers \documentclass{article} %%\VignetteIndexEntry{Additional Examples} %%\VignetteDepends{multcomp} \usepackage[utf8]{inputenc} \usepackage{amsfonts} \usepackage{amstext} \usepackage{amsmath} \newcommand{\R}{\mathbb{R} } \newcommand{\RR}{\textsf{R} } \newcommand{\X}{\mathbf{X}} \newcommand{\W}{\mathbf{W}} \newcommand{\C}{\mathbf{C}} \newcommand{\K}{\mathbf{K}} \newcommand{\x}{\mathbf{x}} \newcommand{\y}{\mathbf{y}} \newcommand{\m}{\mathbf{m}} \newcommand{\z}{\mathbf{z}} \newcommand{\E}{\mathbb{E}} \newcommand{\V}{\mathbb{V}} \newcommand{\N}{\mathcal{N}} \newcommand{\T}{\mathcal{T}} \newcommand{\Cor}{\text{Cor}} \newcommand{\abs}{\text{abs}} \usepackage{natbib} \newcommand{\Rpackage}[1]{{\normalfont\fontseries{b}\selectfont #1}} \newcommand{\Robject}[1]{\texttt{#1}} \newcommand{\Rclass}[1]{\textit{#1}} \newcommand{\Rcmd}[1]{\texttt{#1}} \newcommand{\Roperator}[1]{\texttt{#1}} \newcommand{\Rarg}[1]{\texttt{#1}} \newcommand{\Rlevel}[1]{\texttt{#1}} \newcommand{\file}[1]{\hbox{\rm\texttt{#1}}} \begin{document} <>= dig <- 4 options(width = 65, digits = dig) library("multcomp") set.seed(290875) @ \SweaveOpts{engine=R,eps=FALSE} \title{Additional \Rpackage{multcomp} Examples} \author{Torsten Hothorn} \maketitle It is assumed that the reader is familiar with the theory and applications described in the \Robject{generalsiminf} vignette. \section{Simple Examples} \paragraph{Example: Simple Linear Model.} Consider a simple univariate linear model regressing the distance to stop on speed for $\Sexpr{nrow(cars)}$ cars: <>= lm.cars <- lm(dist ~ speed, data = cars) summary(lm.cars) @ The estimates of the regression coefficients $\beta$ and their covariance matrix can be extracted from the fitted model via: <>= betahat <- coef(lm.cars) Vbetahat <- vcov(lm.cars) @ At first, we are interested in the hypothesis $\beta_1 = 0 \text{ and } \beta_2 = 0$. This is equivalent to the linear hypothesis $\K \beta = 0$ where $\K = \text{diag}(2)$, i.e., <>= K <- diag(2) Sigma <- diag(1 / sqrt(diag(K %*% Vbetahat %*% t(K)))) z <- Sigma %*% K %*% betahat Cor <- Sigma %*% (K %*% Vbetahat %*% t(K)) %*% t(Sigma) @ Note that $\z = \Sexpr{paste("(", paste(round(z, dig), collapse = ", "), ")")}$ is equal to the $t$ statistics. The multiplicity-adjusted $p$ values can now be computed by means of the multivariate $t$ distribution utilizing the \Rcmd{pmvt} function available in package \Rpackage{mvtnorm}: <>= library("mvtnorm") df.cars <- nrow(cars) - length(betahat) sapply(abs(z), function(x) 1 - pmvt(-rep(x, 2), rep(x, 2), corr = Cor, df = df.cars)) @ Note that the $p$ value of the global test is the minimum $p$ value of the partial tests. The computations above can be performed much more conveniently using the functionality implemented in package \Rpackage{multcomp}. The function \Rcmd{glht} just takes a fitted model and a matrix defining the linear functions, and thus hypotheses, to be tested: <>= rownames(K) <- names(betahat) @ <>= library("multcomp") cars.ht <- glht(lm.cars, linfct = K) summary(cars.ht) @ Simultaneous confidence intervals corresponding to this multiple testing procedure are available via <>= confint(cars.ht) @ The application of the framework isn't limited to linear models, nonlinear least-squares estimates can be tested as well. Consider constructing simultaneous confidence intervals for the model parameters (example from the manual page of \Rcmd{nls}): <>= DNase1 <- subset(DNase, Run == 1) fm1DNase1 <- nls(density ~ SSlogis(log(conc), Asym, xmid, scal), DNase1) K <- diag(3) rownames(K) <- names(coef(fm1DNase1)) confint(glht(fm1DNase1, linfct = K)) @ which is not totally different from univariate confidence intervals <>= confint(fm1DNase1) @ because the parameter estimates are highly correlated <>= cov2cor(vcov(fm1DNase1)) @ \paragraph{Example: Confidence Bands for Regression Line.} Suppose we want to plot the linear model fit to the \Robject{cars} data including an assessment of the variability of the model fit. This can be based on simultaneous confidence intervals for the regression line $x_i^\top \hat{\beta}$: <>= K <- model.matrix(lm.cars)[!duplicated(cars$speed),] ci.cars <- confint(glht(lm.cars, linfct = K), abseps = 0.1) @ Figure \ref{lm-plot} depicts the regression fit together with the confidence band for the regression line and the pointwise confidence intervals as computed by \Rcmd{predict(lm.cars)}. \begin{figure} \begin{center} <>= plot(cars, xlab = "Speed (mph)", ylab = "Stopping distance (ft)", las = 1, ylim = c(-30, 130)) abline(lm.cars) lines(K[,2], ci.cars$confint[,"lwr"], lty = 2) lines(K[,2], ci.cars$confint[,"upr"], lty = 2) ci.lm <- predict(lm.cars, interval = "confidence") lines(cars$speed, ci.lm[,"lwr"], lty = 3) lines(cars$speed, ci.lm[,"upr"], lty = 3) legend("topleft", lty = c(1, 2, 3), legend = c("Regression line", "Simultaneous confidence band", "Pointwise confidence intervals"), bty = "n") @ \caption{\Robject{cars} data: Regression line with confidence bands (dashed) and intervals (dotted). \label{lm-plot}} \end{center} \end{figure} \section{Multiple Comparison Procedures} Multiple comparisons of means, i.e., regression coefficients for groups in AN(C)OVA models, are a special case of the general framework sketched in the previous section. The main difficulty is that the comparisons one is usually interested in, for example all-pairwise differences, can't be directly specified based on model parameters of an AN(C)OVA regression model. We start with a simple one-way ANOVA example and generalize to ANCOVA models in the following. Consider a one-way ANOVA model, i.e., the only covariate $x$ is a factor at $j$ levels. In the absence of an intercept term only, the elements of the parameter vector $\beta \in \R^j$ correspond to the mean of the response in each of the $j$ groups: <>= ex <- data.frame(y = rnorm(12), x = gl(3, 4, labels = LETTERS[1:3])) aov.ex <- aov(y ~ x - 1, data = ex) coef(aov.ex) @ Thus, the hypotheses $\beta_2 - \beta_1 = 0 \text{ and } \beta_3 - \beta_1 = 0$ can be written in form of a linear function $\K \beta$ with <>= K <- rbind(c(-1, 1, 0), c(-1, 0, 1)) rownames(K) <- c("B - A", "C - A") colnames(K) <- names(coef(aov.ex)) K @ Using the general linear hypothesis function \Rcmd{glht}, this so-called `many-to-one comparison procedure' \citep{Dunnett1955} can be performed via <>= summary(glht(aov.ex, linfct = K)) @ Alternatively, a symbolic description of the general linear hypothesis of interest can be supplied to \Rcmd{glht}: <>= summary(glht(aov.ex, linfct = c("xB - xA = 0", "xC - xA = 0"))) @ However, in the presence of an intercept term, the full parameter vector $\theta = c(\mu, \beta_1, \dots, \beta_j)$ can't be estimated due to singularities in the corresponding design matrix. Therefore, a vector of \emph{contrasts} $\gamma^\star$ of the original parameter vector $\gamma$ is fitted. More technically, a contrast matrix $\C$ is included into this model such that $\beta = \C \gamma^\star$ any we only obtain estimates for $\gamma^\star$, but not for $\gamma$: <>= aov.ex2 <- aov(y ~ x, data = ex) coef(aov.ex2) @ The default contrasts in \RR{} are so-called treatment contrasts, nothing but differences in means for one baseline group (compare the Dunnett contrasts and the estimated regression coefficients): <>= contr.treatment(table(ex$x)) K %*% contr.treatment(table(ex$x)) %*% coef(aov.ex2)[-1] @ so that $\K \C \hat{\beta}^\star = \K \hat{\beta}$. When the \Rcmd{mcp} function is used to specify linear hypotheses, the \Rcmd{glht} function takes care of contrasts. Within \Rcmd{mcp}, the matrix of linear hypotheses $\K$ can be written in terms of $\gamma$, not $\gamma^\star$. Note that the matrix of linear hypotheses only applies to those elements of $\hat{\gamma}^\star$ attached to factor \Robject{x} but not to the intercept term: <>= summary(glht(aov.ex2, linfct = mcp(x = K))) @ or, a little bit more convenient in this simple case: <>= summary(glht(aov.ex2, linfct = mcp(x = c("B - A = 0", "C - A = 0")))) @ More generally, inference on linear functions of parameters which can be interpreted as `means' are known as \emph{multiple comparison procedures} (MCP). For some of the more prominent special cases, the corresponding linear functions can be computed by convenience functions part of \Rpackage{multcomp}. For example, Tukey all-pair comparisons for the factor \Robject{x} can be set up using <>= glht(aov.ex2, linfct = mcp(x = "Tukey")) @ The initial parameterization of the model is automatically taken into account: <>= glht(aov.ex, linfct = mcp(x = "Tukey")) @ \section{Two-way ANOVA} For two-way ANOVA models, one might be interested in comparing the levels of the two factors simultaneously. For the model <>= mod <- lm(breaks ~ wool + tension, data = warpbreaks) @ one can extract the appropriate contrast matrices for both factors via <>= K1 <- glht(mod, mcp(wool = "Tukey"))$linfct K2 <- glht(mod, mcp(tension = "Tukey"))$linfct @ and we can simultaneously compare the levels of each factor using <>= summary(glht(mod, linfct = rbind(K1, K2))) @ where the first comparison is with respect to \Robject{wool} and the remaining three to \Robject{tension}. For models with interaction term <>= mod <- lm(breaks ~ wool * tension, data = warpbreaks) @ one might be interested in comparing the levels of \Robject{tension} within the levels of \Robject{wool}. There are two ways to do this. First, we compute the means of the response for all six combinations of the levels of \Robject{wool} and \Robject{tension}: <>= tmp <- expand.grid(tension = unique(warpbreaks$tension), wool = unique(warpbreaks$wool)) X <- model.matrix(~ wool * tension, data = tmp) glht(mod, linfct = X) @ which is the same as <>= predict(mod, newdata = tmp) @ We now construct a contrast matrix based on Tukey-contrasts for \Robject{tension} in a block-diagonal way, i.e., for each level of \Robject{wool}: <>= Tukey <- contrMat(table(warpbreaks$tension), "Tukey") K1 <- cbind(Tukey, matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey))) rownames(K1) <- paste(levels(warpbreaks$wool)[1], rownames(K1), sep = ":") K2 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey) rownames(K2) <- paste(levels(warpbreaks$wool)[2], rownames(K1), sep = ":") K <- rbind(K1, K2) colnames(K) <- c(colnames(Tukey), colnames(Tukey)) @ and perform the tests via <>= summary(glht(mod, linfct = K %*% X)) @ where the effects are the same as <>= K %*% predict(mod, newdata = tmp) @ We see that the groups (M, L) and (H, L) are different, however, only for wool A (in contrast to the additive model above). Note that the same results can be obtained by fitting the so-called cell-means model based on a new factor derived as the interaction of \Robject{wool} and \Robject{tension}: <>= warpbreaks$tw <- with(warpbreaks, interaction(tension, wool)) cell <- lm(breaks ~ tw - 1, data = warpbreaks) summary(glht(cell, linfct = K)) @ \section{Test Procedures} Several global and multiple test procedures are available from the \Rcmd{summary} method of \Robject{glht} objects and can be specified via its \Rcmd{test} argument: \begin{itemize} \item{\Rcmd{test = univariate()}} univariate $p$ values based on either the $t$ or normal distribution are reported. Controls the type I error for each partial hypothesis only. \item{\Rcmd{test = Ftest()}} global $F$ test for $H_0$. \item{\Rcmd{test = Chisqtest()}} global $\chi^2$ test for $H_0$. \item{\Rcmd{test = adjusted()}} multiple test procedures as specified by the \Rcmd{type} argument to \Rcmd{adjusted}: \Rcmd{"single-step"} denotes adjusted $p$ values as computed from the joint normal or $t$ distribution of the $\z$ statistics (default), \Rcmd{"free"} implements multiple testing procedures under free combinations, \Rcmd{"Shaffer"} implements Bonferroni-adjustments taking logical constraints into account \cite{Shaffer1986} and \Rcmd{"Westfall"} takes both logical constraints and correlations among the $\z$ statistics into account \cite{Westfall1997}. In addition, all adjustment methods implemented in \Rcmd{p.adjust} can be specified as well. \end{itemize} \section{Quality Assurance} The analyses shown in \cite{Westfall1999} can be reproduced using \Rpackage{multcomp} by running the \RR{} transcript file in \file{inst/MCMT}. \bibliographystyle{plainnat} \bibliography{multcomp} \end{document} multcomp/inst/doc/multcomp-examples.pdf0000644000176000001440000023733612234660205020051 0ustar ripleyusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3462 /Filter /FlateDecode /N 81 /First 666 >> stream x[[s6~_Ią;'ر8Nʒ+ѩ_DMYpw.8"&bZE0T$aqusx0)?&##ğS1ER8&ADLgÔvhgY,;kjEh$TLkzNc5qbX3d ie,@Y%"Yf5"RxN5 f$Fi2EV1pu PbN2ƒ)+Ʃ0[t0$GCΡ>$*b ^,0)\.,X% ! qPZЍMR ހ  ਌,) -ݠei1g 2TJ#g7hb@9!4Bcf@9!!^FMB7.b֋̲Y3Kbe% RK(TUDeULD'GU@YYBAN*0_ +H!52aMKo7"N"c?;d Gg!⇟zs6x~N9JϦ緣 _eb>7K üDڟCN ~m4H.H .81)k&C5?J-٤3WlS;($ 5kޞdlJD] DeIJ̦ӬM~dwHxS=靈tCVnI:|`Ϟx|3l^]3B~V26H!~z d=۳"Dys~|b]԰0[2+B|)jҕ> zt\Ӏ<ٙHrVX҆Y~yU?bz$S~31>7| ~s3圌n _haײ g0zwuh>ڙ\B)A>CJ(?-P㟪YŰf* Ͼ|Fg`V?T$IЇ]XEǁ~;8 #Ns+|@ƙDžG [->d[|+6G!;ptn_6_dBַN[:.-Jt>q=#Q_~<$&xT<;>hz}\UPW,şSͦml[+!Ap%"mw2|;k[tQDғx  w :tA-kƠՄH͈qU -;lj4em5ĵ3muF oGB4&^%с*bFAWzڢR(\׈5]l] (?' g37m~]h0bAIfr}<+q@/W\eROo j~&svZdߕ;󻥚RE>"fjgXR,uӶһҷu1AGޟ O@8l+zm~VGWͯ.Q*CQ濓~{u|bKZ_fP|_rߌo絆Q,Nӯ7TQR+(zY6 }{veUTݍ5ڸU=%}}1S "QQSRgwIa8;@7SI uM;Xr M8%R+Dvu)zmkeQ~*OcT+KyoYU^)eJ׷KBz~;Kil#TuځH_BXw N.bwF$o`!M;B"XDFkB'ﳹD-+z@dZ V:JJY&uR,'¯Gu[nKu[:fz_T_zQǽ'GmYKiKZ.,ZHnmcLV[>.kvz&_(|Byu_c#@x46+l+[y<ùbdv&7__қ}[6VХ8B~䨓p'gE>JUR ޜx6]se a0w-Y_B Lci<{Iˏ͊MCj4MJM,齣;x8G'M;<\ƪr)V-@~ 9XFi$p㗟tݮo`+́\dQY&;0 Nu;RXhoȈw*4Ocg>mO;y|+vZt`z辁ʶ]a.1ͷpTlh MyGW%YU'"MZm#e JoUo|픀4M_\n4OYΖɺ~_"]w08ACfɪJK>i3ڰ۬t~᫹Г5mޫ{:%[{Mk6qLYN8d}4L$ӱYv(ѓg\WK<לM '&&${I J)D84u ܕPeH5Qꃴ~jυDu@qO5Wa˱vmƴ6dN.o_\d40P|-fh i:h{qoNl$-ǘ(8PI q'NS{~q:p=3[Ci>t>꡽s~}Ke UA'( mkVixö2Fr[9p?Pendstream endobj 83 0 obj << /Subtype /XML /Type /Metadata /Length 1337 >> stream 2013-11-01T09:04:20+01:00 2013-11-01T09:04:20+01:00 David M. Jones CMR17 endstream endobj 84 0 obj << /Filter /FlateDecode /Length 2882 >> stream xZ[[~_ zQ`~1ni㢱$H tY(;CsF6M^ ?옇÷3˙zwW~v}!fo/d8+ֻ0!̤f LFKgN^G5[.B8\"Z!J 0g?6Cw9:(co+Wiw6? 1ч^z b.7 n\ݻw|tY RndⰃ.mw;ndu v/p20 ҌmNUw9G:ed$vQVͤ죵 _[lBR, V"c*%0Ba;ض ltq'LAM xyNl$ʽ`1'ȩ{ Ir0WVIٽG?)i>:w? GeD'8@Щ& 3dAmTp1>:m%ZJ6 6f.49}* GQMg(1(JH6TI 1m0u(d`t^J*G[ʤ:xKn@Y\0(^.R6FƂ1]\^W 31W Bz:9ų!Tΰce;)+!Bl@G/# JB4A?u{ϙBNnu['ҔmS&%1$T^9:尟cie+bܷ9Qt QR;gmSqp.j% ! "q(#&*L܇<8q$uss8 =3vWUMvX|5gKTQ z3iFZ@CdY=oA_bazm\Fki ]MDQ *d ZloeB{IcnsuyTBA@P@ & !I e*7Rx.5~m:Zb<lZ b/%@<.X~]Q U-b.c &j|wJ]ހBY#¿&ߐs ByJ'S.3o&^|,7/\YKj7rrx-0PKr-(Pr d^eRH{Ecp,gJU,~?kGU!N06#G˪ &xPTZX7c~$ OY,ӖP[1t^K&NCyK-a'ID5ĭzZ7x qڷʳ&s 78nR$: 2 [Gp;`,h/G|mmM+WIr0(#Wt˧ST&T:#/ `Ki]J+]Ŕ|UrԝV>w#[]24>:Y#̚;FN1;&XbH$O%/5Bd«}d2f DhqU1ږHS"@q]Jmq.lk m3/~2rQl9Y#0V#@m^2k>s b/\RA=Q)J8@$%RzR1Y16uP]"Hnyւ犡X[ɀrP6 Gb28O..[Vf>oL5@yZ{I7fRԿXoO_uOs^5Y "0.IXǦeF8o:`%YJƜϰM4DH>=cK {dm9փA8i #k r(bgJsYgZ `R͞^3rnoe-ED꟬VoےEc쑻<'8>3d~'xLO:xm_")8h^։Ͼ )IvH[ #lwL"wnoje]6xi\v)r\5il}wQv?Vq@=BUbp-~˰5pn25;m>mUйO$(C;z_Qfl?D<\-bXsKrfQ9=raG*_9hdހ!WHsEtй1"p.wX5w Krw*&wC~Uܴҹ{lF]"QEapڀ!X&d:Nv5Gײ{siq@-bo &zֵXg$a@9ې vȾ!ۃ~)r]i~H $mjM&.u;]=<:^M1pnB w-&SNAyvRLǕ7l8 MCu׳|lW0.L=?ai\j?_ho rXQ}/c qі `wl<&MQĠIM 4H.O2PڞI9n(/AS&׼8N[R{ P+Ejɽ ђgV@NFۊtK7c4 6SxUVZFzR&,7`:|_bTچk J{ŭLץض^ڙm ZJ6 =a[:e7.ƫdND[mUz 㰧0eS~ M [+:\d} ACzE"?D&Qœ1N&0±5"Gqno>$b2S؃s@/¿endstream endobj 85 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1693 >> stream x}L0]uڨ-9{kҲd,Sޕf ) !`7`/  6c@xI5iqB(mJ[vS=>=HNڤNw}|H": IڑvpHqERp*r8d=~s>/E#d$YRV`KuEZrzr͛Q>YM)թU%4YѫG2Ӡi̼rml6nILHP E[=Йʃ2MIMrĬLW5ʅ%, Pe3wD}sZ͙.Z/QezSFQU5m'F󜧤Se6>89بxwC*NL. 5ipT(*w:.mn% 0_nxګi[U,.}7^sBM.`LBn02^\"e+QOWi7T~Gi h>wϤwJ'Ǐ*ݿON ¿l搗;pI5~|$]L/}󖳧lMGKL8Iqΰfs@lsy^N86}Fku\ qcY9cW/vo s]2,HfH$I@ً㣡+W!'O9ҀixL65lςmoTEu=k3:$Ht9/9--G`qAsуq[ tr^/"Q C$͑Y?2#?-C_1PM\[$CwZ]4z3ݯ)ĿӇeA:Lӝ(o꘩OqRK@h$=jؖ&̃?aꇛVC6aq{t!i 2N܅8#APZ!@(α9s7,}}~BxuEꇗoHveH ر r{> stream xmLSgǟ-VMsk#|YhEV`#dHB;-B! Ӻ@FF t˔Mg2e[B2]آ\lW [}ه}yr$a.0 åH~\mQaԍ,K"A7QS]1KXjOjݎJG/&HMMIw&'6*fnsZ=ڧZu9lF1~IKJzVgm]l6w\pI1괉%..gMͮr["DIIH6!\GI9H$Dk 8] 0#Dg#Tv^m3WAQ f9LAUp4_{酥ْ їZ"-\ѹ #0 SO% ( 5*ten8(psaFΪ7( Jkjh&0)*ajCPIcvܚ=[OHq<=Xb7 n[j:cGLCłK' ,<7ͿYn<t;88$h:Aid; \I&ۭp&1!Qp_ &Vj̵prr[Zo}3xpݒKp[МP,<>ݞyRo[t=w&aG*4LũD5VajlM+'n &w\d[vx6SLAA4G >x'ޥ&&̌j5,^ULZG_200<{H6. h~U>*eJmjg~0vK0۽̯HX,Y:bzef5KF,Ok[נ<+shyAӞURthMA5{9Z+QH(]JȰ*a0 3 (Eendstream endobj 87 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1979 >> stream xU}Pwu!YyıDQs=ū_BH&䃀$oSB`UVիuժߦssofgw<ϋcac0%Gަ|iCUA@Dء*'WPOІ㬡8Q+g+UFhY\B‚Y9 %>;CʒFB#7jzmFX Xe4ތ5ͳl^9ۨSzM)PA*X[x1: ~ʡT)կf" ;M`a;S>p zξgvn$$knWb6]&! =t*78˙@GE>_]{.s>q"B"L]ShL.uvK#Z}|/~Zo*˨+J\ZK{hsEuf:hsWnĔzt9KT BYob:'j7*2j/=C }B4M)($qRΜcwNR \:xGS*3Ã&&2 p[?Gj1>Nbp$ H[ʬYR*#+#QA2nMd̬$-nC@'kH ~5FAꖦ]G !1GEP j' a谭 y[x;6r)/~95h$mPlvTdAe醼"BhA/" ?j!˫+[+.'CFg=t<[N @ P VA)53ԛ! Tw G(|d>.@P]\tDb%牢{IcFxFb|'xdU 8 'X\JwMWI$Zl8o (5tpڙ+gOuY-K֭ ۅp#{q? WMz Ŕ#Iݞ~\ekBǬy|ZCEoZoKlb>?p3 u3Œ_.IYY4ttMF+<@o_jvduN*2'6 mM_"kInذ|0.\endstream endobj 88 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7218 >> stream xyTTFA5ĮAzF:0:0kl1Qc&F샛{ k}yG@YhʵS7.GzcKyW5 #Fϵg FAhP J]? ax&:L2a^o6oP!`0mqfDG{111=C&E<~C̶Q}}F; u0/na!hHa>E-:?lHn_"{e*_'k9 Z!d?t36yxNJ1e3foӟަQjCj4zZK9Scuzj<@mޥ6QjZHM\OEj15ZB-S˨rj&zZI͢VQPv=5N%SP)T_5 RS6T5G l)15b7~2=  G#+,ZeXDv"7ZHɌﲾg?v0p66 :Ƥvm]mė,eCv",w]; šzJMKȃ4GPC޽%28 A+/8.Z'k7B$w1ș;` nN* X#l%##e-M+hInS?*Q$߇EjQ7D߰|,,Oe_<0w߻WiejZ_% GOv*HV,,rU4JP ZM?ndF^)3S[h-!Y4d <x0fE9]Yp ?@3ckvT~'5 ^.us yF}Gf[|Vy!h#4{t[IlLK#Kgy,JCH+xVtCJ"o{5.Ь4mK42omƮIFHPg{T I92Psix# oڍHĿNq$7I,t.B)iy~͛ ӱiw'`D}{ETrk^h2.%z![өZ8jztVBoAH<1O),?̕3ӱ5y޾mᒤJ@ٜ̞'¦lp5݋^<وCjGS\ w )~ODg}w΄9N[b׮C@WT>Sa*!=/+OJi)Gu^>'7GcCt  fH¤QIA_uѨ[|>ciqŝk#Xbjy 䁽mBAod~}ScR Lԗ =8$Ƀ4ׁLw-@#u4 otfWm]'m= 'Baп/1HѬr3QBDhK0q2=~m!3glAXf,`6xϙXNYL2IYMy9Ղ|u%A}˯J)6z s_RxjXSM'kjӤ$3BV7d %S*v*u^ ]PV+5DɿN" fDT~h?ExZ)R;8W0p==Li\w`4#$mF!B<<m #D8?Y9"L-}e{O\/ft[#otW]XL_s@4RVɆǖ66ʒ nXKYj}Y)x8Ԡ(Pv/Tw7 B{jU^rh~CvOqK}!,QFiꃃzk.ЬWEwe3k=;vd5jZ &sAPͺ~t9祔@2QSWSQ뫹{?ƃ~?CC ր%" ,1a>4Sbr\M: kr3kW Zt_Mս"q8!zA%=ݙo0 8|E$3 -g7tL 2rv[Rd)JcOԫ=fPXDRS}qL6{Ԭ7=_!Á݆UZaOE%qqz\'My=Ǡ ndqŁuc%vMcS ԚX򢏃EP.VW)5jeb'J :SO~d3Er%!:!h,~s!hޖ fY,6m ̳<ۯ+b.E LtILm}qEu_O0_yݫHd$i6=5)'Cτ(]d:Gx-RRUYr=#HSTu\E6u*C"' xRUi(6Hr Z cA0o$ƇL*֦,ŋZZ"$ͻLtj"C)L|aJI^yNUiJO˓lIhz_vIrb\ 0. }1NA,x٠~ޔtdSn "|隠F c2_d,:r:; f_yraK Qo)ޗA^shQ=4ڒz_j_hE4TA^ `~BV ΢8ɓdQ3pn_9Ѵ%ė4mwoq.`ެˆ|S€HiG&gw~Kr{wSO/<>WT;mjV:jmRE^3=lCdeX4<"\a3T6Eٞ8:4 z۱xqe18eؙ#=-AVsJWSҹ!^m gM%#)]u~y uhYސji9m~qy{D~+#_'Ko"" _#e.6ԗ\i0[PgVA-SWDɫg'5٪>:44**4:d.?uJ4El@PA5ˑFX,%*Uf7w2OUD3 m;XԦ{ gfƄ766#XQYf>t9pk1(]ūAi$UUݪsP_ qXr]sm%zu~ ߣX۩we^>{H=CRdru !&)%-6v|?OR*APa2 [ߞDWπr̛i<1<?=DRNW;AWF8`3j5=3B0}ڵ}ݮүuTkіXŴʮvM+Mɲ:TWFxyv;kEW cE4]&O_f) YYEDXs2>y ŚIw廽:A!ֿ,4eHjo#fMhpFd/ y65AMZ=zvW K%&&dM7aE +5Tz3 * ZaGy⡤ ;7j5uUJaB^Gҏ],~?&NFoltJʄ9p$%"ixW\V߭ѱ>6&r/FΘ ۯR4u3[_C.*Se6|}2~Nnjkԡ Bw|Op^é̩ms}x%4Vbu`|Ն_d|BrN9\XAbĉkCLߡ( @Z 2ÿ!l5h˧C0tyTg ]L!e*d_wIk=+o1,?h{9ro kgh N'H4;l70J jjTVrU_k9}:~yL'Q<-C#E!;Ӗe˄FW~%ԋ>z0P1>Y{'3in>X? Ѕf`ڎKDKB\)#i(U:հwd9PlY<XI 0QAIS.EdsSn>`4{w\#F Sm79NThcw. J7t6 b)+ZGCo~bDLmeQ'rHFBޘ@uХʬt5 ILꖘ% [s\+t*ii |.;/i9=takn\63*:EyFEl%eu=Xj7&oyq K ߮u$2"}V$|]M%z[pudν?1#F ,|?' r)ƅAUvuwP\oxSAXi` z.9?i+ (FLˏGdܢH6މq\tgf`&ᾄ-%!["QE<ꦌZG1 -H( }$  uh#Y<#Yǁyy" mq f"f6b?^_5fbAéxU)95$CB iFl{~sfU 9`Ŋ)Σendstream endobj 89 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6467 >> stream xY \֟(oj]VU+n-((uAܰ#;$ J+.Am뫭vQU[3}7G~fn=9Q(H$Yr2[S;G.; b{`ؤ`')|>vk</~ѡod$ӹw\ !Ƹl/t oʝ<oѰ.\~jenU(0 5*Z"8 7]S;|K!8ΓS AtUF dI?c l1i,?L^xktwW\qq$% BAW/H[ ɩzRj>"gɺC#^m=a(>Q|s<3yo0޾[ų[QiiDzi3,3;,⩻0J O_u~Kypã-Jl@ R077*|y:u_^ gRl"]Nw!f0X~T?Jb^`InuxYcPB<YxգMzoH+I=F H/`l=G׌_>2߁W:6xĸ8'6rd6mN "RH!H}Z]K=zL#aDPM`< Y}{x7G̜10_4^cOʊ2#R}c8mEf0쀗m﹃:>):=鞫_t"SЧ`Y=>ijH=RVG?;Wo޺{}4QiM1ѩ*ެXЁ*X]jtXfU*Y̒B#df3ډg_E$j17xWGw`/Kbʜ8hOȥnrZA$q 5Pf9'jWalle|)mU !ba!Ksz"|e_ft; ~Czd[*P;`oAT,ċ-aHI! #W2ހOZjձG(/A $w&o]es'Qd21~[jz-L/gtKUQJ/(g^kqk8E}-'&P{Bfzom+jsjui XK%; .F4cxRޕ]劒o`T(y+ cšWqC9G̲˼+]b? }X<ϰ-V ࿅mxep+c[f"{lXp;&۳h )3V^ *}o|܃`RyfU^=#9 "1qhAk_z(l5tjY>l$Tֻi_f$ 5"lv,[ATT)Ke!QPۚ [H4BXX[RԊd.%6r=bf.Z0'(*S/9+iQ` ޟJ`2ѵj!N J "ɑpl䫳*eHգ]%:̽W`P$oe#/LJOG0'0=?hCX%iwap-!_7Rˠ286yoE;tq5u [,u5m?^rrZ=n5 6nOLzb>0+=ͬv Z,)T#}U%9Ak~Ex :kJ8sa-/CM@/ }Ǐ!ͱU+vF&K F Ђ2ڋl g!"eo1ڹ5dU8Z석"B!|PNrӐLw"$΢Vt5hmԘX䜿9׆FLE̫RH-7>/,7~cP=#w{{([s3:ڌS*{8etZn"js@m]cXc.lWiO`{ o􏇖_ux S+/aE&Cǃ ܏>w37_Oa͈ytF[}b]T-ϯ(fT$BLIE~]Eu5[<-x̭%~ESщCO,7}/VƋo'>b˧ f bQRZ JAqJCi/c:\Р㫊sMĴ%`똎.n0,|RrorܻYgg(w4 m{zLڎcHRFlN{g#:f{uS41 KKѽ6JjT`Ѹ.ߕK`:|Fz yN#W,]1.#0}"gOgHA(.-&MNr&Dã QeNXj#$yMO7KJJvYmo]gKJf@aaH,̈́$3Bx%бvU:r][E:K}b3% VjٲjMW- s$/!bTȯ$˄& tii1mbEᑼ{˺`tԫ>"hg:i9r;6qr[~YscͼbwYstV-:4֏'\Y")&/9s' d1 I(IRTV\i" t]g}UOH@k]sNC9媵=@].&@u8: 9 l*qG)qytTGk"(wk3Yң3z2M'L^cQsuu6şgRR1=IQgDs8pۇ_j9z}ɀ۸?3wL}EIm~jAb6WtiK6vp(ᶕmbf`A ٖkϡ3̭a Zi_JgZ0etn[WOx2z͎/&pqGO~z哷;gffg!Sc>YMo7C7_p71VW/C?Ԕd.084ZEORnl~lBBPp&"50dbɬC'N@̓_.CXkgXsK\䖯3 278wlYn=7ypyge%7fdj'{G:xrdɋ#bz XlOrS+& Pt<߱8>3R JUf3H %JĕH O_0& rr``fARg1i2yis:a5R.!ҡ= 5y¢\x?l/Bl`eeGQ endstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3782 >> stream xW TS־1$So@:ZbP,XP%e2Ad d'`0 "FbR>kjIAXv;*PY#~/CS8 ݏoT)"-K(܅[PR`,c-+ŔH~U!-da'wzҕ ݪp2QFsNq𑸜 L(;oo4.K,t1p.^|Bta)kE.qD⽅g @b%k2`,VH mDC0lP00wWFQNa^I"A3瑕c $"a$,N-Ձ{)kw#TZ?R\Ź<F4,M?©%J?]!&p!@&dY̦2hlqZux^)4Q]Cb4˲ {ј/o}˛ʅ'zL8F3!SJkm+NXj.K'o rło'nL:oҌyi\CѸ ՐbL.I)7/y_?I" 8ņǻ,{}/XJvbcXS_Rh~z{Dj!ry|ΆOgoq7?M4'$dWTWb-B%ۼjyh(2p/յ)ZNX:Sm9ߤO`%uIx.5RE_X1L^!^cd_Te1U&\ ́~Գ`}W)KZ1 _9wb(n-Ьb}BR6^"S{"vymKkhǝV4MGk[cW: 6Lj6=zh"D@ dBĭty'nH/e-Q}?)~oWzhXٴʲ f LPR |LFc9%[n'C~Zi+5 !=;' ܦZ+:۷t,!( ^Woc9t6vGcM /?|̴_7VI&ch14 Б^b# nn5kw9zy _9ۅ^CJDV=4VH0fyr5(@%7ӀnYԅ+p&uXX +)#.Eo.tctxZa9_ "?lMM5׾^I76ذ>63:],V $~a?4>?cp0n[>[tEPn{fl72uZ ,;nUبjd0ҍЯ?xq /ʉ'~ N^H1!mUGEۏZ,J'u S) dv{Lr6~~[2~r Nzz{ 'cjB- fF7fwj}yDVkk=L\fӖg4i SjDьsc<6d3g8ϧ#64ВS±RG$"5IBer+Jv ]LUʿ1? | gIҀ~V2Z~96gLj{ZPQ o)/* ^<T<&c/ĊٲT:dH菺bӿZSJpRiQeKIǕ;'E1;7U,6H׳sG:ܑa/v< 5܉2)s|bK9mWVCX9WGJ+t:B.8ϣ 4c0>#Cݾ^ Nͅt*?|YQo/LKK׷־[[${;o]T8CO{8ycGQQo3p9oƇmOh Sح-̵7EUWp$D?9 _s_# ں;7~>Px~ ,݂1mm(C1X`Ӄ 4 8 jsRƿ;B{/ ƢTg oLGHlUCpCx6rQÓ#qgMQC+CPy{|L; !4|ά7˄45l*-iIQs`<yٞԊcu7ǽ>k?3zotyaSXnRY&[qcMI/fCP2TW:%Ln ?7endstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3033 >> stream xV Tg%MugR-J}խ/[@ E@WP MSR!LQ[ۭUnnV,uw{=gN2{~`B- q<^!Op: \xj[Ѹy T(Rr%'D=xay||{,J OEŅ';<&DD%=Is̙iii3vHH^*<.Qv3ݖ%LIJJJgf|o²~I_Iʈz-:8f편.3f53Yx22:Ɨf63ә f+3+l&1L3@82i̠"PqaCrq}'Uև;;οsӈ#8¥ԥSW 磭+ Y7u}5_˝0_)xxteQ*ZX ~5a)6oJԷȒ'-/HQ5>}e+%Wn>K8⦖YJ ^ Y5hl.-9°;hH|yws\rYC75 AkpX Y> OOA%lVE >R>7s#y1p@JH{leXfWmtA:]m  Q YPR\r~rxM5곍5AgVVwb!Ӊ 'Hh脣5gdfCI%ȨUa!;}7.[̥?h6uD]n6li=u%$h#:\nq'AfsEEG繢:௼~jP1P/t֝ s%P4Ѳ)DHE'vPRQV-4;l7s(K48ExȕUqr<-U݆w5đ3fB;\k-9SߺVI-i-oo({ bsr 7븏~FIZqa{P}=~]`cΫ8?l00BzX+>Q&Cеnwk- )ot*`/,U8R+H7ߌ3'wN[E iqnVt^OsS4; o[lM? *31c;? ^Du`7[j+-‰s71ZZOsUAHu]|LvUq@P=tI#QWzysQ[WM^)Q ("ZVVw>si0K d$.* Q8p^ݎ(a5/p;9^hc]:\g] oC pQڲA:BNĿILyEQ.q:FS$fKٞbr7}rNh 4B,Z^]Ї72%#=;?9s!5vbp"3K@Sm0_1G-Y.7;wr3,xOmD[`LykJ.6CNRL~v6H~ϋ=<^r$\~Ŵ*QނwN]ҡfx:biA x#fPOO3ǓՏ 9@%&hgh-,5kl}bi?A.m3GH7gD!̂(G%4ݺ'uu =2˨ڼnlrF䉚EGyGL&0]ok2 G6&Zl<2q cg$q<_ܣZ/Peהbh, )ȎF8Ϋqq(vqA(a endstream endobj 92 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5578 >> stream xY Tڞ3j];JAj}mݗkY!@'_V d@Xnm*պvݯ_M̼߻<>#v!x<^܂V_?a| 7 4?ɸ.|гkh~{]}>-3-eĩ)g>0aƌic&?#a^F8uobfDIJRFN75I"KxffDqc3rƊɳ*IIX$Kڗ(S*1#)c@+I'Kg1g^Y s$y˥{V[?9emi3 }/gΚ̳㹱O8p2A %V3aK_5pb-1XG'6Mfb>1B, # 6b1xXL,!edb XIL#V]>1$4,Gt'z3lћC%']Mŕ 2g=|fD+k>d[LƅPwu{{gz{O{D/Io> }n}~ ɁO~FKX9;@Cwķ&=5W==pսj%=Q&pɓ( )9!xj"/8,&#Y -e47t=u}GOS4UEx$$W5L&sdy>"(}d3Y|-޴+O6[1pR;;\;NnF[c,MT'zkϼq: K:KE϶)/:5#,_aA#6:q!(-D臿t,rEN7))9  Ý؇p QUϷ)i1QI~{npM:+0]Eþ'l_0NnC'0O&;+V_6>> oy_^MWҰϡ'XD}+=0zɮ_~rW/|n #0W}!w:F|rVc zܨK=b;X4Bs`G_Bt@M|'8;v9v06\!OD08M̋O0]vG4}Ǥ %=80N'iBQ[M 1a_ h/TVLvpWµn4ˢoIؿMԟCF#{/̻r`VTt<'Q/Ŀ=绛gOl Jlbnzrf^f-i@u@/7 wyֽF7BЅY@5z 5u`0, %T:z#PDOKyƗ,`_].)3xر솚1 ZFsEU `w5W1scUlZ9˳tm)8D4]kX }/&`8J^vʭ H$zt8w5sp?ʑ4M"}T&\01㣨܇&90Eo|k,FF9wP+@l ёqCGC+aMc0M>W1^|5r$z]`!C^-MKi HƢe[ zA8GvZkYIJ* 夿KSV9 @֢Ǵa R@`VVP,98T;[@ xIa4["*-hu߼ `Y͆7U_R-\vG>T]GMɵG.^a_{hLb(LꈬU(4GINVC! CvAq[1p{qNG: *#^QpOjA(b Q,>ނGq.rM&G) Ρ.D†[Оf4`h>GjOZ#wMkӼT:?z[q3nյ)ǥy{ko\t5z mJS- 4!,]`ir_S)OU(:ygo605I!i|\@HvZ]Bsܬb5[%)'˛N\ јܘs,| I. N/e%ge сt;RPvMC3%3(S( izs7,1k*P!~ȉVҞ^Q3Ǖv5XMT^=nw jA#3֨Oh4[4l mzKU-RaN53V<)9972 ڬfn Ր@$Ё?',4rj Ċ'ꆆ`Qb=f /ު\g4dh?%0AА(V3q,HΨkVسpAH3ɂ*R\&mة:$ p05؄c p𘖅(uǒ* > pB4ElmD@}{J^~sTl=&(xjd@q#hu;\[P#]{Uj)u8jX4߶o11IuQV f+]8q /aFKkԹH[iꃊS5_mZ`BղVhfSK5|q6#+(`9~ɔ Ztg9| 7" F;L؍ޞq WرrUl&:ne~:6ʨHn/ }"W+7O\oR7B-{0< v hYJԜWsh[APLchv[8uYTL!A MӖ͉.y1/bO|n$6]+KD`^Aϵh/&gpI }\GCc$|W ;MOWL R}X6w3yԦZQUې(} 5Uu2HV^0)ۜ6PhF&SrdN%_Q&$z'pͪ:Iz['.^p 3 @^K]CB2pO9mqݏ,˛m~ Ʒz]2/v<^S`O` |7(%55#):HKcft⧦í5݊ /8s$F[+i2j7Oi i;eD/eL\/x㏙!iS~3S1m,AnMW@]>7P2\5 Ԇj(@8,J>@Q"\YP_}e9.k'E{ 4Ez#4.?G RW @m0)^Vc~ *̣-6ЍhE^Yd@aEIYA͌LnOR-] 8(->ʣ-݋h:tqӰ@չJبs\O|YWEG4u "ezF֙: p<q TnFd:(5TD1jXV{J"+dEbCk1s2Kձ߿zQj'85b b(OP-78J?:'@ƥq#[#ś~8 ߐOp|`ђ\xTZp3Kn$GD(Ǭpvki8Djy[2CN,yl e /ÐYdfh$U&sP,dF+1p(6[iѪmJ^oA>* ~+;wg'%Jljgэ{@[]V' ShIA"oh|Zauޯx>#u#{ELJB{(sw;1DZ_S_2ʤ֯,]c x*k䞤!k-JDWzA~9tݟኟa7NFE+Gt.?>QiyrZod<3Ƞ.y@AŶ11#}2s̛"Kz]4 vM Wɫ5undjN=6}7mH7Ua@jMľ&+@jmnQPZ Єoŕ/qs;^7{|휘u}b|6h„_Շ*>!↫(ްpsJc(VHuP'eNdgeS/v 5qJY0 ՞4 }]P)L~J+Qn`|eep*%E#MB8NeB8\Qp擗8V@("sP+mD|QA :;2DHQK[5e܂R8L]N"Yqpk=]eq!+rendstream endobj 93 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2152 >> stream xUkpE~,cCZV^y) @y6q+ ,ٲ$#ɖdJGƶ~O1\72IBf(a҅u͏;wc 30Ǔ3-_6ϽsoKtw" %3y jӐz㚲; fjJڢB^0tի2YltJ-ʗY2R酏M~Bo.\K,]j0T%mERC^)Ur\YK?җ.yyejTezV+j^/;(|eQLaZY"wk^-zr.lm^Ұw &%`ɢ4E g%%-Hⓛqt*^rY[9%:ŧ-E@ԙ]=tK@4d<'*_Q(?h6|;>oo2_8^B^o4fMNK܈ɢ&[%5ab޸N|QAm[\Ķڻ^WJ}sE8 U0鶿Ju *nuNX6o\"RBKfZe#W,iN(HPzJ(^]Jk.$lu5BNoCFW Zs9~~$m5ZvK#v!C|"p*{. 6R^\,z^{9Om5-:J24Uub1|bB` 5wC8bj+ժ G\pQy!IKyiNgrE Zm!wwh+BIqyA)G܁ bN'Nf22~%I (tONIœFD)~ ?yF/o[&wFng~dP?$6+_TnQ|tqoYmb_H]MoZ&GSuXIi~Dq]Gтpn=sonTXax0E[5Zɮkp=Lpv@JY(G {JJF%bʡs1hv zJݻ|\ +oFM /ZR@2>X-̼D?w[ a[XmֆF7|SKQvn98>`j>Q8e>`XJ>?5z>&;$wXc fz>-ZoMv%:|(ΐa3~`l0PeW q&O?gCdWK^&DܑGh|0 n"h; 4'#A|G Cݕgo3JRe, EMeW~B*2˛aolendstream endobj 94 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 700 >> stream xP[HSqN6#* Z Ib=yͣɘKO{0¼35RHV#A DJL9=||w#% !Α ]1 'A.yvo`H0WjjPQh:>%%9NPS 3c1ueVǕ0f&72\5uSxՙ+cY!=:\ T2{L1ɖqtоf>а*Z!$DBQ:‘w &Y$cER ~6OiV< ( F[s]%ZeE![5u/{_[/o@d@-W_=$pw<Q8ZXeV(lV`Ek-R}-84w3HP̶ѮX: {Њ)R{Uu[]Cc:xgKw']6W?/ FlbHrR͗MCʱϟڟͼkPb}]=8=-0#\Xv0Jl`/|Z 'v.TsOWXA?98~ofm~ER$/?sF~Srrfs WKUI a)GzUASt㲎vTuIS~X.Q7endstream endobj 95 0 obj << /Filter /FlateDecode /Length 3158 >> stream x[og!!@;÷&iREc Y'r$(wHrB48՛Dt} &od~8]Lr.:&'eH;Y)m'/f"9f6Ju1$8gZTR?M+24|)h>=8|A>~&1:EѦj9u}Rו-+Op/J}Y_Vꘑ7|Ō{'Դ;dÐ;N?N[m\UwPEbyG1}.s޻|& M@*;乿nf˥3BFN;ͣHAAEt!F c%c;bK\2A2b(0kZ.H +:~\Cwadt+Qx гsBJcߞ៶24ݧw8.4n& G ls0ohDҌ࢙ަa'>-RCMOFYYN{QoTdFDq*9geGGe)G@ڠvn6*da00*ePH4$d9qM2R5:ϡ%ȌUӷ8w_\)0!6o.F,ȝEpY+U%dksŮ0^3 =nfmRO~׺c/h" BT{TQ2 ^Vf[EZ(ɘiF髋!l,#0GɟBy7O!V0h!kZ䤐]IpIm6#a28sȘ54v_è ׭Ǖ+WBۀ0W$ #ٰ=e5{U1T peZ|q^ ˺,bJVɝ ϑׄ0D/ ӲKl|*"PC~ap7*Ɨjp76 r4EcAG!ܤx%u3 mKLMxeF2q< -48a nwzc%\ ~8:5bW9ZV%=R!6xq>h(wT4 4:&_5U7:&r?bHa/5dfᲈ:esJoO4 rv~t$ =#i=h] [D x r%r&?{M*s"$лlgҚhyVzwLMrjq&]$)Ï=}?[գV>N%G66P dQM0,?sDڗ4%w XgRնgLL[6 {4UkyC Pp~8 %ؿ`k AUu6RAkSPum\a!d(/ TӦqyu}|LKO]%e*@, w EJ EZR*Tyy* IcZՐKL [N 1Jp` 9%W|NQ70j1xUCnFe[VD>+ !j;]VđMWk[[hɄ}'YH!lV$kٙ{<5 T)vmAr5Ne0~M63ve2v\796@킘{*uڕX979H HN7lWWnܪ\T-cggZt&Ҧ*}0[6upїo%kf5Q>+Ñ99yաD[&W^mIQE;ƈ7z%;1>2buƜD/= Yy!rK6(WCbx(RрIWКF7@=RyƷ㭱6ɹ!V]>gM:Q5q;F[N0ېJ9N0o9$~`͈~v$d56IifRG ɻ|WFkfb7xEr! q]TW[j۱2`z@Zk 4'W7WQ)7(K,(uZN%dWYZNw\%osȧvǥ 5\6c!_w-슀\H$C1yvp>fxeef2^Y$ov5m#'<Ck`y>#LKfwL2?jx{sb Y`q1w6R_H[2xi?8Ü =Ã翳 endstream endobj 96 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 357 >> stream xUOKAgm5A-GR]EC:vSX֩\WֱE/^:Dӹ)AЭ}`vYB JvSn T9* T*WNٽݳg:AI-rv l54*ѱii50dI'ڶQNƴvSid7p[縎A\ffhw Pլc-< k2X߁.-_xܣQa> stream xZ[o[~g#A<%R[d"%[/=gg5<`E/273;X4r,ҿr3+?܏rv$r3:H7Mtʍ2P֍waof$Ne#D0rbtfjbГڸҦJWUZWJ*cFdYwUVJWU:'<Y3C_mjdzwO[ e(;:s<fB_{ͫv`ЧT07 Z~ؽ&a.+m` 8!eI6/q:uBbAxJE2ap"FGE a9JRyݦ@gDFJ"/8)í:tܾ% D-ۧ5k4XoG@MZ{.g@88n&4Y[2P)2pf|݌mZxU^;Ǟ9IWrGx%c$~W[73֧ͳӎwn|7-6:Ϟ%6NBa g\pC.Up;? c{:p#+0ϸ%LSJE_|}#5)>f Fs4wK੊;H-すJwu4Vp֋ =$R+8btGgtK}M,[OLNL^7љ!i#oq~TԾdvㆁ qAǿ`@3eDƔYS \90GnUbda{Ah=!0Y:If_frC!D{%%g=*sWp)ئ !(cو3vD$g[Z$LWZJ^Mgw(!t+r6=UV$q?;t:^%sAIO$RKe\Ye'&Z UUY֨uqw w)LÞ2 mjhAґJ?2>KD'x=Ʀ"h9,}پ"?:ۜ>R% UD瓃aԍ$(Fm{zp?#֋d9K߷#oJA8Wuo}Ֆ%GK=N|kt#i)j|~im$KUc h*2/Xi 8)E19y8/$Fޝҿ@"Ǖvx'L~g6z1 i_Cendstream endobj 98 0 obj << /Filter /FlateDecode /Length 4552 >> stream x[kodq,:@V7|?z#f7@ȖԲ9ElYcXN]>ŪSȞl,7ߞ˷~sxX-,ĨfJ@j'ܝМiMWg'b67?oߟ=[/ޜ?ɍJkİ9ŧf{',atfsvQDZ^9ճRYKHY,;",cr(ڕHKeBмri^]LZSg\+Kggk=Xo;e$ardx?2~vBJz*Q/yKpȁg޹fWV:p&z}/e7%ҸJJn2&lx?HėmlB8fQG}e&g>*^}v Xf1J'QM! X-9%`S`A*L 륥w W^/XLwKl@9p^c:ܖdfj4Hf%') ]rRL䓬j5-kґ'e^ 骤W^_l"9aYeH22hA̶OQIR?W^W{sDDZLL[|syynݶD2{3kE7 owWǧ%F[TDe͛F5@x}y#(0#3E k3`262k唅[Y":P'h LutA#8%\y "K CjDQњ#yݮun^MR͙BR5ELMǒ er,n(i]CI 5T16@P@R'"G鱤"HcɂETۡ'JBd+ }[A \IRrl6bFPІ_ˏQ̠@81˫bw'gvzs}IJ5=߀]7ĕ.m޿Zʹ{waKe@~*hz<6R&.h.җG4g[tG=]=oOAbN+d.9Q0u LZaQEQUrx;o%miW[R[XDpuE 촃5aHQt%tE@,Vaօ ԴSk 3 sQ,:G"V3xSZEh! t_l>m|SwI)a޵vw|*~\:黩izzȁ&c1c7P Bb}ر0PEnv<48= ZY+`he D<"%\4iDX6iL~2E5R,,]tM󋱐؁ޜR6emb޿~[("4}L3$K뺶.J*9]mݤ:]H6sZX}&YsmO`LZ 嘬 ^f$hBp ٮum]WZBm9&;jc*gﴙIלҎo7 kraݞlSѤ 7su d)c-]㛨tB9jbfX*"@!GI J`+&`.ּ͋d'umT>#sH ~Bͥ1w3|ߣG Vjt=fJ|&Q_1tXS?2{ӖvhI*uuZkTwy6#}GFԉC!kǏy!^Ê8MCFQ}h{HTAQ]j_c{`/ѷvsvÞƯ3w>#Ω9ƿ/sB -d}(~݉گGHՕړ?d;è~JO,Ŏ6&<%0 qƇ.Py` bLT;+^.4VJ$2DmN:Ă2- 榛]z.E3g/&1V~F:ۚZ6a{%#v\"C9J "Jumm`z /.vw9Z@v?Xd\ TGuUZJV|e7k]mn`tf}xyg_l5M3kߎ~o (\}K䔾dg\0Gr5uP@/3k\Bsт㷏ˤ( \$;*]l<++NPZaX!~^u-)&]L&}mZe|ϭa{gbxDwqp$T *1<2w&LRe/ϯ+5ҹ#32{5+6[)@ؘ'Y吊ֽ2o/HÛ^s|WIO}32/iCM[}zXpps˶Cz!4鍀zcg[j *;[9(9UeNΝعUA[J ʷ> N\.#w[>E|ˀԝN$]*073H{6CSdOH4 09)L>?s,d .f"4KIx&i7 0c1t? =JUEIɖp)gCyW}qe&]R(EٌJ*>cŽ!~fzΫq푆cqKh ߴ3>*q YxnYgWt1*IlV4xa 寜&)ef_i$D*WJ{KBO_eZq7{:@7R~D99)=ܢ;|D7og!qI0MK\6{6N#3j}3bf"`kCBpǒe3SV'yYs:Ȝ݃SK֘M^c>eikb"9jq#aC/۲ѧ/*Nc GnB);EMGo7Jbu R~ʳR0#2,yBNv+J}~HSS\ׯe> x4u[hDCҗdsw\JƔwՑLJPL%Y:-I?d[gu}a/@.$v9,ON*bž;,۾͑נs |@"cՓDjyʊFhҿT,a('+(7|S岞Y F8euC B{1w%pt%sD-%tf^!z]p1sJ !_$|6lTNvJgͩτ GTHaendstream endobj 99 0 obj << /Filter /FlateDecode /Length 160 >> stream x]O10 N( ]Z2D! }I[.%Mů F0Lu@v=|MUVBoh )jHUZk 6ἢ*h.O%Gs&#q*MK\1 >l_iSendstream endobj 100 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 vXЪj8(Nߗ,N>ˮGֱ4%"@cj0I!O X d7~ɧRR[9hy$TUX b'u(9K7SiZL!`\Sendstream endobj 101 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 301 >> stream xcd`ab`ddds 4H3a!O/nnW }=I19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU;OL:)槤$N-/````c`b`bddK{O=?0))(݋tWUg)..Z=G?تK%g/it=\{b^k$endstream endobj 102 0 obj << /Filter /FlateDecode /Length 174 >> stream x]; wN HbI D DۗGҡ-?l=0Qc- gHϩfXT lYw {fq 0*7#]'1+ ٕ'#kp$b8K1(aT [R`:|(.|Wendstream endobj 103 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 672 >> stream x_Hq6ݎ P5Miּr6v99n+ AW"gWhVҺN'PxR${(d@!{|x r<>-E1K뉳mm DKssqB2fJ ؽ1Dܢf#:L,K75FH157IɌD'ee$ʸrj) =’ Ijc 2҅t!DQ5(bdQ' ;+dnjޕhՑK*wL ig=ݗ-ƞ'rRD#‡a$7WK̦xF%S4;i␤/FSeebs=Ώ2.S9:ܸrG |<2Xq>4Lk6*A  B Qo]dݒfb_τ31|i--%nn"S|Į,Z \W=(` Oi:n]@= n|D꩑\!{@د`d^up7%kRQ ۻ;;>5EbWΛtSJ{V&<>yp!ZޚUTF )endstream endobj 104 0 obj << /Filter /FlateDecode /Length 2868 >> stream x[Yoγ1KzOwzq$/Gmh4Zd[@ߞ"*jF =b(Uq"Z9\E79яG2}9 fώD9ƷTgVi;^5O3*!T:ct}t+饐I;8o3-t ,r3x!NGk|hfiC|*z[,b+x᛻9ӟ[S)e+`q` m .Ap,k4) %Z؋#DBeZ|T"H]y,qu95pXL]b~"o ,?[kA$J?@+rn7ڨLR3+\,HLfTCQc @epЙ֡Of Z'StGت3 p8iL9C!BN7XKH@⳨WA65R57(sj;isXn5|>m'e"P2BiD9,GdXo+$&0V[ezA ;148aVTLvvM?2 v'C =Wu0{EfX*֚0]!Hw*UY/.,֫T:1x+s6W+n\JalQtɱg]9ϋX+{CǪ46}l,0<5ёP iS 5Us$7{}OR*'05؜ʰ oWTeh&#&}K[=}!jv^rL!>zDt`s;0aa91mv@~֗-kC"dBw: |,m6 әU f6t~J ;OJ碴n6qqh]֢VuZZhJnY6 ]֚f-)KKii>m>[p ;0qҚ3-"y{oPI1Q9pKMq s̮WI "IPɛf<0]H&=C*ɤW1JN՗Lgi N[43RJtR< ?ۉx},ӈRhq&)aH*m2@ޕei!%0baE*@@_OgNb7=\;%@"Y1cg9E#-,;~A!쎙3_.aHsԂm fj,.T 슈j 0o"؏|&b^FSHK|Vc-29Be94sRNɭT<VYN #? FfTj . Th3RQNUd8PJق^RmlT4cUUN3ֺTTUB!J.ȭ΢|YB9 Xe0ߢ:%rM؄XreXV c=[$0u^JP}= G̺&Z~Q~I>FԔS#be"*0"9~ߕrKB Wz#|/ļb|0e~p Ba6!SΘ9¸JWsL&4P:J!v'h_Eߗf-8c)s|\{TO:KDV_۰ o = ,_`<~?f̚l;ZBkޛFϔ o4sd"oM$O+? v A 瘿?z:?+Fendstream endobj 105 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 502 >> stream xcd`ab`ddd v541H3a!3#kc7s7ˊB``fd/r/,L(QHT04Q020TpM-LNSM,HM,rr3SK*4l2JJ s4u3K2RSRSJsS ӃP9E A L@00ֽucź>c9lߵ~L^2FrR}_nrlsguϝ:W>mr-S#z|gx2%[euweռG&Ddlk j讪=W2Is'} }wn=eKӻnn ߡkEt9`koߢ9~>':yn)?zٻv/k񝍭Dɕ3{VY3vgW>> stream x[K/ry2c;|?ȁ8q";H |KRv5㝕Tݬbw%bQw}|\7=:~q;d\->:-brzH;_7ZWP=E|,Jߍ#P׫7=sN>Z+ǧ7iX0rѸ^vԤR:ŪS">FhƖ)-UZaiit/ds+-[Zz~Zr2í)L=Ζ'?/[Bi-1EβEVLlA^ *;NKei.]iݔ[]Bui-_@f_JgGqϼ*gl9ũ.]5>Ӕ<4U|Y)Ž?`aG۠v AF NN3E |{'h**9!4y CUy.z` <[cWЭW.OXwZrs>z5$"áU0ʷDdduM r5\M bbPf.H i<r Vݖk.uXZ;()[u_ WZ^a:{NعagT\1; :/D_{(D | 5*i*z90c _q "yGXͼ~7Uj)Ba4* \&DWe %.0C^)b(̏nȩE:mn> l7&,j/c-IeEG wq ʩr.!BN;; "1Vw ƂFd? V1+Π7D$>N 3>{M֕I @-c5̱320E F3ۉa#f~v|J=>cYI`mB< kn,0}f7ܮnUbdZ ' B c0]epУ  Cl*or"4:N~ՃTҬS:%eQwWyOj;'Qtsl|X0w;C7kqThu ekzd$:AMycJˉR~qfyW%1U6˦ un ^Xylkҿ59ȂX|yM*S;4U6kQJ g4: EANuTEWP*mˤhb}s]ת? .)Ow[]a|3f9ӀrM^^F /"PEA8~}0,UW'UC̓>/#K禴Zpay}kא %?|S?NlZ8>&AovM4B<8/-++kđ('Joe^͢ץumrEVD j[hB/PZfDvս1r<,F *na7Á+!E4h 592!ڃ $M E_>U2Ip]*RBFbG4Il6HMPO97N8Tؚt,`Z=":l!8ԩ w@g v[ P_)7 #LS~Dw6TNN >!?zJRf$=u+PR<(|ҨhAV?KjU#t)O&i~,=h?$iWEKKV^3n$m>ڽml=QW؇*kJs}_Ќ[Kx8yg2:З`4vurYF b\͸^:(Ќ6$Mvͼ =o~`8c涏-W f쎑B=xyFGHWx(*g/w7 tQz# '[9h!nM!q]M,}˒&ꢰ 3 Lt0Gbu`# 2ć(OjDm;#}R: ֽjL^7qML:?.h?gyIyw8TK/̞yrOwlR]FDIʏHoUo=o $w> stream xW{TSw>1L5u9hQmZ۱:jAAFby "A@):s:u::[;kfc~']Gg$g!f 8;ׯ }],0?W̦>̂\?GO:DE'.SP^ * #W\yՑ/[9r[^XZZF 3 K#W$PϗM;@Ց%Ƚ2řoFNˌnfQ8|dy΁yÛ@1%G'dtPWdr[g]hթU˵R$Zblq4Ӎ}h&n~;FRA)%K@nz"ZzُF3O?ݫ6䀎2,z*+&|eRa 0*NbzA'tScz ;6br{?<p< 11StX[Twt]] {sREJqʎ@Qufc6˛8wȅFl.4dE>Ps.ב7|4ȿȁ{Ä+Z{6Z;1 yWuwF<@g G^YVzNJ;`"*<ŅeIDz~EalO".e9nnڣpQ9ZV\L;*x^0tP@q"W°T~׃VXjVASU!V`_W&][ mvALx"{N`(URoo vᒟxHq.dM6̤K-S+쀦UIA~^2IUgNv4Yk9HYͮPOTcǀttG)D 莣 0aׯnh{1\ЩP "5%LQh&T__Ys .Lmv^\jYIc 脐!F>U7\P(-2H@gA+uu"%;PGp So-eYX?]_u[iߏ^qp akHho|tϔ,«{6=<EZdb)*fgE .{}rNe"M],P +@aiFWꔊ%I=_!rߺc|XKF&F|7U& CX* DF HOU\YFzO靯nf8.KeJJ* Z*v-e1;ͮ`l<svP ?ݥٽK>MPt_83 ՛ߥ݋ؾ]'XŮĠ7T^ .ohԹ̔ۉM[nʍ|3;;/`OG-m8Zp컩/` sE9JsC_E9q^ w3ٕo%DgS)<&WI輗*T@ 3?P0|CV,*)7*k1֗[AoO npw-`0).ミKp>r{vo|jvX|CWW꒹ \nd4aP\Uԇ2L`3*UkMNrt:==#.zv@yuĚ[1 eG~|wEm;jPi(l#2 =\fA|{0:LPex*biX+B4T2ZB>tJKc٨ExXlL&r-ikB| xW >=U]xq>sp.΅ .<)tP`XR=c{BګF69*:r!sC$jC5}^(bҫXfQ_n ]|N|zBť2LHe@:3B+q|JEDGЌVh܇A;$ZM wml{5W F 퐤[ }G >?vA8P.R]{ia{ΞC;($G?7~(b.r~l\7`&͇tlzFZ>PO.tT㱩ف375Ο㫞? ^5endstream endobj 108 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 329 >> stream xcd`ab`dddw 641H3a!O/nn߷}O=J19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU8OB9)槤1000103012)ٽgf|;?̿ܥ;~3>,}} |g|Waq6;7<_s/wt\7Xp9|zaendstream endobj 109 0 obj << /Filter /FlateDecode /Length 2419 >> stream xn_KvC HlÐ';@F\ErivWwTU/$Nb|P>{~XA/T=<;qqru'?bl|tX!vP/C iLZl]ZA-B!4"tZ{c3\EBٻ:BHZ{gb׋h]*"tЈ5C:?ohK\[#(sЍDٗ~hUZsRg>E)?EZݐ3$rjm⑀G>%0hmN@12Š$P6v?!7@ G AX2AE0YUaB[G^#ǖuA{~p)|!x״H1B9B'G욻LН ?ӑ7{&X7Y ~r {#? r ?dc0TNA]喯aͦsa V `@Z !fp/˲9ܝ D)`l ^p^w\D* z&L6EЅ4Fb|eM0:iU&A ؁r՘SJMl:866s:&Y_;}L>F~Iz&@Nk}\khajH.Sq. e6b9fUڧatͫH8h onRrPU]?%rS*O aEHpxV`c'H)~>/ Ӄ$b)o}S)jŃ<_ $kXC O);zcXH e? (F[A %%,?psф%?vɏ]oK~lU qP#B6%4_*ghZA h@Oj !4/6ۙcSȮkoWBk %0[ӹ>v3N( {ZbaV/tGOCe;NFM8\IzX h5co6_āgLcf.+RT4j SyײC\A}: W1}㪵|j+rM֠Sv5XI:}BL7c9"/ 0 V`TH%vesYP[lq9Gmٙzؘ%׆V,RKACg0zS )FS>fv]`b)hI q ![ |Qaшu:XCJM5ﭦl0j@ilȆZ[ެ -q{({J|HdQK*w_"K5!],bg4(SL7cmu74$ѻM.Vǟ4e|O"Ӑ0 V\S1hLD,ҏ H4]>!YsI7l0qClso y߈CWdlfmB2aLݨ?5 դ?Y5eұ&uoK&,,sCF'FA;7إ˚H"biReoהMԚB^وj @]+G$q2B^3 l~&Oso ɀ kJ[rv4;dS+TԺ3[ձx@EI}?IvZgL-5jYtq"Lo7,dh599cf5%̺5$Q ~1.̱k~[Ry?FTzz>vA7pHoPOV£Za2G.7'~xP8S={uޔ=Sy֑~*M;#sxHqBzwZ/>-j _׆MPYXm](SD|F3():U̩.{ urcs l|9Ϯ' ԅ!qhc !iķ9+N> stream xZݏ ?h;F6З@#I;Erfv=N9n{8b4CrHΏ\2?8~rz}$&Gw|1y MbrQY('2[5q7JW3+aƮ2.+z6J51:x^M+\eUa}͎}8c&s(,Vuoo*RJW꒙ORbjVf6!V'8r7xQT w^mwN;2mŃ껂 % u tlz<ЄIi8UF\&Z+K=̮^`#Bs^H>FQlD4M@vbJJJDm|盧CzHDjF"LDFjN3;ml:>keogZ4&a@Dhe#Y4z /\4Niu, )/պ1 FIc )ͥ &aK;h7k$>E8xLKuE%R);`75._6eu`Ȟkya4x=VȻr~3%3IؼcR @wci6cBrAsL,d=wN]ZR&#%ѼDu.1 m z . ]7HT"&azd[#=iTˆ PZW1#noӮ}G*y"CKWإ;-to+<0G|zN{9c`|auzOڊ;i89+@g?}:3zDm|AT9a6Rʽ@NR?=yW.lt_ Pkk*,7gK*ku5(<+@z@I $%S&֩"ݓH&{ŒK P:05tǽ |Qel|q!v.6@: ǂ!pW{98mtğCTeh"Cjs7b5cqD6R/%|o.9axW{azM'1'~8sÃvN*PW.,χ?r;4>S'6~`~Fw68X!8H4 #/*/f 8GϫKQR Rq"57K cǮns]pEfu3WK /6ȨҜbP{)"3RڅJ!RG飙;J25euƒV  + I=+&a'zģ?#@)|,ǧ9OOJEXRT>f f|2:a:fmOT_h bmMR-{|z5L [~0 "tHEl@rpo.bz&7_.4T/үW$Ozj".S0 OH2Rֽ;d)8T!Y>݇\͑v\A_jwVsU껠TŚ11&n{ƺw{9i0oHe m:eoA9u)pug=2DY.h=waKB.:|تMR Eae SuKN !uLt#S !W0[|lqW2endstream endobj 111 0 obj << /Filter /FlateDecode /Length 2014 >> stream xZ[oSI ~ϯVtangLHm  xH@Ri}=b;sM٥B<{g{ƓOmJ{փEhR֧.??{>L0o[nkk‡ϋؼ^w^tuTpˍb3!>? PuNG*CS o:H!u ,2ČټzsAqB\XmGvﱠ72-MfmM^3u\Wt{Z"2}5;^`A p;Ɯ{$($H#Ea8Dk$z&؄\E2?A"@5w&㬿:H0;(FN`R=YmОak R* @:N3g,TASb~gLz'ceC-(L~ft3DnF-7fy: K>#A uVZA nx;Ec\E"ItEXMMMK+HX(sEa.= @lt388[D I KYk؂RZ@l9lC h`SN&,QpY΀49-\Vv*U\P3橐"6}6*B,Xc}g|mR"4(i< zByd,*Q@N/-Z2(R0"TTĩDզ<smyRm# dЦVFHl^~7,hcj])7I,stHov*7Q8eRmFR\!n(ks7;j 1LBүtN`/LԓG !e0o/9O{\JRܘLOU UI̋"^U} cCA}Ye;W2/'¶GRȡ%>EY{eYO'ᦁ$ L?`X* hL«QĵQ'j $$L^ UR/< 0T=Qg/jӯekѥIY)8UU-R]i7phTe{,>L EpJyV3tR8&B֗ .@W9=cA6TtGt\R1(PlP>y)BҰGm" ye//6,> $@D:Hau& SAȮols7>fq(SENvC2߅|c jUlhkaN -^ /%qzʁga?#a1R *Xs+ N;+AE^{8diCӳlXRt{:/4[ Q|iKJ4I3!PoeWI u[v ]2Ưv bnU4*I'n%f/W>fmp*3%$V'-endstream endobj 112 0 obj << /Filter /FlateDecode /Length 2473 >> stream xZo7WG[?H/:]cHV\ˎp{.gv=? !93ߦS~b=~z䷉b=:H7mtMN&QN֭waoӣ lVLۋUA73$|V>Fq0K`I3MT[)R3-nl,"+_$*+%|\GHFkprC5'}p X5RTb[™Ԛt9*TUm{[J1_O*բJqSe+%FF.^rWsɻrgٷHi*g0J&YS&4/b vɘsp}^gU+^0+d8( m*uLi9f>#fyJtȐDdk}>V N:kF( zKXBa+x14٠vgIBF;.NJ#$˰K?VEeaYQ7u^W mNh&;~>_O*u,`lmDK3k93oOу&N. 9GYDEFj XtSNZNm~6.)MΔZJti4yv$Kư] *Bj+t2ཀྵ.d}Adk/Jm6іEVzu`p1G^ $@ApvBӦHm\ EoB.RnfR+O xY9鶢Q۩슉 rBIO:Y߰XlZ$ MKu/:Mu q`0!U}}]$,D;!",%PuAP),Yqw*yeC%Z + 5`kIDܦblN=oWZKeޫ1nck?mƜKt)ަs!&3ԇ'{τkOih_q׌rD< ^3__{*w™͝yW`J^U][m;GgY/~YûStjǯj#9s`uzb޺r7j\22{ᷝv^fb$ޏ0QGsaTB `Vb(nlv 8|DZGqޤ8Laͨth`o1,-a9ad_.  d/j{fl٫ږcU5sXHF1"BOp"C |x iCZ2?2FDLX.а/%ZHn멧y>iÏ!naG9F3b>9[Rl  n-20ÐTu,cts[s8t PF_\3Ps"F8"f*|'{5z zo,6e-O쐽xh1]m}o {|E8c}X4nǧYz|QOTVjG)hHe[.(N`Om$t7p&HBhU+W, Y^N& ([W,"×_H7">t5FH6xD«RsU19–va.[|qY:GI^.j|1[⋻+"bZvm\?9iOp(ɜhx(s]XBx|J-B Y?K~ 7tF":̬tn4A+"^/nK1 %pL\‡Hd-x_y2@_P”eQ.bF=PA0R=/0|qyA|nB&ےo_W8|9-Ka4.ckWh54{%0[?#ql r:S1VGLM (WUendstream endobj 113 0 obj << /Filter /FlateDecode /Length 4272 >> stream x[[o\~W*irx3Ї\ZAS$p,9-+!\$;q3Ùor_I ?}~wH_<ǟ`@a VHXodpGmU0Fy145Y{ ,EsbMs ҈X+n6] Z:jwCC<+`td@z MW- lc);Zz>d{GE/r57VF(Ḩ|"?,ѢSb^_o-FտGٓ U[GaVڮ|bp!J5B?^hcH3'ɟb6JC8VHv b1>r9<1T&Za|Ůq3Yk<+PAId'e?}~+; CiHupڅB5B8* Cڿb)FTBgfR'Uv, d_@ ><)8ig*f$@~<@GnUQyAF^QGqoZp.P Ч/ԍd@jpܝ]QC+jgCOnsElR0mYqF_x ҒM Ye}*Jy+&s6DTFH"䑠kw&iV50֭󑥦gyՋܧc!)>K['fzJ{dq1)O/C 6\͓G9艪$|f]#(Y+'Fx}zJB) }arrVe}7b98%25S<=u+? be7qc`(j{VwipvMwUcL87Tıp}ZR !r1!ټLoK>p=ޞ4Sz Ә4Cr4Ԉ7hAarR.9Yl~bTUǩ~AmOq,~jF*!E2Y[w{q,epJc{޽teb\o <t~{7)2Y:b2&}ͬ[d;1!M$ճѹYzfKQ(iw+;&RCeo.mK6(tl y4= (!v$Q5*}IA1n? :9*@A f X"=H}"}0烃gqht Rª=Gc$ JgTTh>#.fCl"+]mɠ&ll[5e`XqgQɜ"!wPΌRUZ ӐO4r|'ed/RŹm8ewJ9#رߔT|z6V^f^=K";0mʀj]w&:4phOg,e-C eWr䣏.\uoΛc_"Υ\W[*ޚұX6uS;I71xNvL`xx^zQ*Ԥ$x/ԫErC70OtЛ8:|TVTLq^s>x22UfrL'T"fKx[yf\}wF$j\ V;)Lt3H`X}U?^G3("XZ]>N v><<9'd[d> ?mo'UdH$R@B ;zKv]GMVDe&u> G Yç8LҰ~H8wav匟­i)VUh2J.P DZ{v)3J),>2ٰԹ-rmD6ʋ@G$ײw2"$P?j y~^N.:'Wc Gs|Z6UT58lkYߩ w'ÜCP\-,$9efؖ MYlm^mgep5:od2c\5LtZ3OLEb{Ys!Zb1qԡo~I=?6*JcKgdo"ݑ;޴A:0:mˡ`ysb1:=Ws9/秶Lo,{I?iTt(۝M$q6\A*mFg`#f}k\挌DFA}ݵ=xͅY%}UgW*6KɖYIg9OpJh y.;=O`øץi0 x65(ԖojJ *3yjFshj-ASetiGT04>ROOS |;Ө(6Y`jYQcB3bV#Ƌd{}hFpH` aviF3q"-Āb*ދ_M,1rD o kOe5lw?G{k2((4;ZYuW1IGvB10\eM6Ng;51XGMk +viE&31NJpPw<;;(kɰ':^G {z~ Vw*.\/Pź4#4+c_դŖ=_o;d^gzt fvsUs8^<,*uA9X ٥M2GvːQYB^"JZ{eeS::@Z/|&anVȯz%Aj$ݮ9KنL"(]&=(NՁ9ԏ7A ķ/.DѨ<%xOaKZVh>8Ku& yá$?'`ɏZHŐȒĿȈ~]4 nx"u3j1F WH<5lob vv 0x@ wpWuFnߣ@'j]*_z#"݌lܵ#7?b>o'QJh?q&fc޲ {&,_V*YAHQt:FMU.qQS7#9myU<#4ǚEZX꘨cǺH˚}}Ej׃&o;W(/Z_HTT`#*#/ b-MONusV&p=]jF 3+ɻfAVM(!j\G S˲Wt/ pfd82SWGf}z8Ok8^${3sBaeb1mFpEE2N#_G@\uySپ>qd Mw(ٳN<ݣݭ:ClO^p.4̢V4o(H(ίSBGnd,]_TVii%%P/'G 銳endstream endobj 114 0 obj << /Filter /FlateDecode /Length 163 >> stream x3135R0P0Bc3csC.=Cɹ\ `Ac# RN\ %E\@u\@E\N \.@3c݀}o]s~Nin^1PBC/'Wual6.&.WO@.Ӷ/Sendstream endobj 115 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 UЅUqP(/ Ct;̇:Z?Eƪ@L4D `,,O\g|Ix@w q+q)ZD ĺ;{FVI%0l>nSIT @6榹I*`,Χ`_CSwendstream endobj 116 0 obj << /Type /XRef /Length 144 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 117 /ID [] >> stream xcb&F~0 $8J[? @6[7(y$w"9DA,-9D+H^c)"9HfJ i: "A$ 0LI-̿sIFfb9{A$O{4"A X/f endstream endobj startxref 81212 %%EOF multcomp/inst/multcomp_VA.R0000644000176000001440000003050011512634221015463 0ustar ripleyusers library("multcomp") library("sandwich") ####################################################### ### Source code for simulations presented in ### A Robust Procedure for Comparing Multiple Means ### under Heterscedasticity in Unbalanced Designs ### by E. Herberich, J. Sikorski, and T. Hothorn ### PLoS ONE 2010 ####################################################### ############################################### # Simulation setup for normally distributed data ############################################### ################################################################################### ### data generating process of group membership for n observations and four groups ### f: parameter controling the relation of group sizes ################################################################################### dgpX <- function(n, f){ n1 <- n + f n2 <- n + f * 2 * n n3 <- n + f * 3 * n n4 <- n + f * 4 * n x1 <- as.factor(sample(rep(1:4, c(n1, n2, n3, n4)), replace = FALSE)) X <- data.frame(X1 = x1) return(X) } ################################################################################# ### data generating process of normally distributed data in four groups ### f: parameter controling the relation of group sizes ### sigma: standard deviation of the errors ################################################################################# dgp_aov <- function(n, f, sigma, beta){ X <- dgpX(n, f) Xm <- model.matrix(~ - 1 + X1, data=X) stopifnot(ncol(Xm) == length(beta)) lp <- Xm %*% beta epsilon <- rnorm(length(X$X1), 0, 1) sigma_i <- sigma[as.numeric(X$X1)] Y <- lp + epsilon * sigma_i data.frame(Y=Y, X) } ################################################################################# ### Fit of an ANOVA model ################################################################################# fit_aov <- function(data) aov(Y ~ X1, data=data) ########################################################################################################################## ### Simulations in the unbalanced ANOVA model ### Comparison of OLS and HC3 covariance estimation for the global test ### Comparison of Tukey-Kramer test and max-t test with HC3 covariance estimation for all pairwise comparisons of groups ### r: variing group effect for calculation of power ########################################################################################################################## sim <- function(nsim, dgp, fit, beta0, r, n, f, sigma, K){ P <- matrix(0, ncol=2, nrow=nsim, byrow=TRUE) P_HC <- matrix(0, ncol=2, nrow=nsim, byrow=TRUE) Pow_Global <- numeric(nsim) Pow_Sim <- matrix(0, ncol=(length(r)), nrow=nsim, byrow=TRUE) Pow_Global_HC <- numeric(nsim) Pow_Sim_HC <- matrix(0, ncol=(length(r)), nrow=nsim, byrow=TRUE) for (i in 1:nsim){ print(i) x <- dgp(n, f, sigma, beta0) mod <- fit(x) mod_F <- aov(Y ~ -1 + X1, data = x) glht0_F <- glht(mod_F, linfct = K, rhs = rep(2,4)) glht1_F <- glht(mod_F, linfct = K, rhs = c((r[1] + 2),2,2,2)) glht0 <- glht(mod, linfct = mcp(X1="Tukey")) glht1 <- glht(mod, linfct = mcp(X1="Tukey"), rhs = r) P[i,1] <- summary(glht0_F, test=Ftest())$test$pvalue P[i,2] <- min(TukeyHSD(mod)$X1[,4]) Pow_Global[i] <- summary(glht1_F, test=Ftest())$test$pvalue Pow_Sim[i,] <- as.numeric(r > TukeyHSD(mod)$X1[,3] | r < TukeyHSD(mod)$X1[,2]) glht0_HC <- glht(mod, linfct = mcp(X1="Tukey"), vcov = vcovHC) glht1_HC <- glht(mod, linfct = mcp(X1="Tukey"), rhs = r, vcov = vcovHC) glht0_F_HC <- glht(mod_F, linfct = K, rhs = rep(2,4), vcov=vcovHC) glht1_F_HC <- glht(mod_F, linfct = K, rhs = c((r[1] + 2),2,2,2), vcov=vcovHC) P_HC[i,1] <- summary(glht0_F_HC, test=Ftest())$test$pvalue P_HC[i,2] <- min(summary(glht0_HC)$test$pvalues) Pow_Global_HC[i] <- summary(glht1_F_HC, test=Ftest())$test$pvalue Pow_Sim_HC[i,] <- summary(glht1_HC)$test$pvalue } Size_Global <- mean(P[,1] <= 0.05) FWER <- mean(P[,2] <= 0.05) Power_Global <- mean(Pow_Global <= 0.05) Power_Sim <- colMeans(Pow_Sim) Size_Global_HC <- mean(P_HC[,1] <= 0.05) FWER_HC <- mean(P_HC[,2] <= 0.05) Power_Global_HC <- mean(Pow_Global_HC <= 0.05) Power_Sim_HC <- colMeans(Pow_Sim_HC <= 0.05) ret <- c(Size_Global, FWER, Power_Global, Power_Sim, Size_Global_HC, FWER_HC, Power_Global_HC, Power_Sim_HC) return(ret) } beta0 <- c(2,2,2,2) b <- c(seq(-2,2,by=0.1)) n <- c(10, 20, 30, 40) design <- expand.grid(b, n) names(design) <- c("b", "N") nsim <- 1000 ############################################################# ### A: Normally distributed data, homogeneneous variances ### ############################################################# results <- matrix(0, nrow=nrow(design), ncol=20, byrow=T) results[,1] <- design[,1] results[,2] <- design[,2] set.seed(11803) for (j in 1:nrow(design)) { print(j) r <- c(design$b[j],design$b[j],design$b[j],0,0,0) n <- design$N[j] f <- 0.2 K <- diag(1,4) sigma <- c(2,2,2,2) results[j,3:20] <- sim(nsim, dgp_aov, fit_aov, beta0, r, n, f, sigma, K) save(results, file = "AOV_hom.Rda") } colnames(results) <- c("r", "n", "Size_Global", "FWER_Tukey", "Power_Global", "H1","H1","H1","H0","H0","H0","Size_Global_HC", "FWER_HC", "Power_Global_HC", "H1_HC","H1_HC","H1_HC","H0_HC","H0_HC","H0_HC") results save(results, file = "AOV_hom.Rda") #################################################################################################################### ### B: Normally distributed data, heterogeneous variances, smaller variances in groups with smaller sample sizes ### #################################################################################################################### results <- matrix(0, nrow=nrow(design), ncol=20, byrow=T) results[,1] <- design[,1] results[,2] <- design[,2] set.seed(21803) for (j in 1:nrow(design)) { print(j) r <- c(design$b[j],design$b[j],design$b[j],0,0,0) n <- design$N[j] f <- 0.2 K <- diag(1,4) sigma <- c(3,5,7,9) results[j,3:20] <- sim(nsim, dgp_aov, fit_aov, beta0, r, n, f, sigma, K) save(results, file = "AOV_het1.Rda") } colnames(results) <- c("r", "n", "Size_Global", "FWER_Tukey", "Power_Global", "H1","H1","H1","H0","H0","H0","Size_Global_HC", "FWER_HC", "Power_Global_HC", "H1_HC","H1_HC","H1_HC","H0_HC","H0_HC","H0_HC") save(results, file = "AOV_het1.Rda") ################################################################################################################### ### C: Normally distributed data, heterogeneous variances, smaller variances in groups with larger sample sizes ### ################################################################################################################### results <- matrix(0, nrow=nrow(design), ncol=20, byrow=T) results[,1] <- design[,1] results[,2] <- design[,2] set.seed(31803) for (j in 1:nrow(design)) { print(j) r <- c(design$b[j],design$b[j],design$b[j],0,0,0) n <- design$N[j] f <- 0.2 K <- diag(1,4) sigma <- c(9,7,5,3) results[j,3:20] <- sim(nsim, dgp_aov, fit_aov, beta0, r, n, f, sigma, K) save(results, file = "AOV_het2.Rda") } colnames(results) <- c("r", "n", "Size_Global", "FWER_Tukey", "Power_Global", "H1","H1","H1","H0","H0","H0","Size_Global_HC", "FWER_HC", "Power_Global_HC", "H1_HC","H1_HC","H1_HC","H0_HC","H0_HC","H0_HC") save(results, file = "AOV_het2.Rda") ############################################### ### Simulation setup for beta distributed data ############################################### ################################################################################### ### data generating process of group membership for n observations and four groups ### f: parameter controling the relation of group sizes ################################################################################### dgpX <- function(n, f){ n1 <- n + f * 1 * n n2 <- n + f * 2 * n n3 <- n + f * 3 * n n4 <- n + f * 4 * n x1 <- as.factor(rep(1:4, c(n1, n2, n3, n4), replace = FALSE)) X <- data.frame(X1 = x1) return(X) } ########################################################################################################################## ### Simulations in the unbalanced ANOVA model ### Comparison of OLS and HC3 covariance estimation for the global test ### Comparison of Tukey-Kramer test and max-t test with HC3 covariance estimation for all pairwise comparisons of groups ########################################################################################################################## sim <- function(nsim, dgp, fit, n, f, K){ P <- matrix(0, ncol=2, nrow=nsim, byrow=TRUE) P_HC <- matrix(0, ncol=2, nrow=nsim, byrow=TRUE) for (i in 1:nsim){ print(i) x <- dgp(n, f) mod <- fit(x) mod_F <- aov(Y ~ -1 + X1, data = x) glht0_F <- glht(mod_F, linfct = K, rhs = rep(1,4)) glht0 <- glht(mod, linfct = mcp(X1="Tukey")) P[i,1] <- summary(glht0_F, test=Ftest())$test$pvalue P[i,2] <- min(TukeyHSD(mod)$X1[,4]) # Tukey HSD minimaler adjustierter p-Wert glht0_HC <- glht(mod, linfct = mcp(X1="Tukey"), vcov = vcovHC) glht0_F_HC <- glht(mod_F, linfct = K, rhs = rep(1,4), vcov=vcovHC) P_HC[i,1] <- summary(glht0_F_HC, test=Ftest())$test$pvalue P_HC[i,2] <- min(summary(glht0_HC)$test$pvalues) } Size_Global <- mean(P[,1] <= 0.05) FWER <- mean(P[,2] <= 0.05) Size_Global_HC <- mean(P_HC[,1] <= 0.05) FWER_HC <- mean(P_HC[,2] <= 0.05) ret <- c(Size_Global, FWER, Size_Global_HC, FWER_HC) return(ret) } ################################################################################################################ ### D: Beta distributed data, heterogeneous variances, smaller variances in groups with smaller sample sizes ### ################################################################################################################ ################################################################################# ### data generating process of beta distributed data in four groups, ### smaller variances in groups with smaller sample sizes ### f: parameter controling the relation of group sizes ### sigma: standard deviation of the errors ################################################################################# dgp_aov1 <- function(n, f){ X <- dgpX(n, f) Xm <- model.matrix(~ - 1 + X1, data=X) n1 <- n + f * 1 * n n2 <- n + f * 2 * n n3 <- n + f * 3 * n n4 <- n + f * 4 * n lp1 <- rep(1.25,n1) + rbeta(n1,6,2) lp2 <- rep(5/3,n2) + rbeta(n2,2,4) lp3 <- rep(1.5,n3) + rbeta(n3,1,1) lp4 <- rep(1.5,n4) + rbeta(n4,0.5,0.5) Y <- c(lp1, lp2, lp3, lp4) data.frame(Y=Y, X) } N <- rep(n,rep(41,4)) results <- matrix(0, nrow=length(N), ncol=5, byrow=T) results[,1] <- N set.seed(11802) for (j in 1:nrow(results)) { print(j) n <- N[j] f <- 0.2 K <- diag(1,4) results[j,2:5] <- sim(nsim, dgp_aov1, fit_aov, n, f, K) save(results, file = "AOV_het1_beta.Rda") } colnames(results) <- c("n", "Size_Global", "FWER_Tukey","Size_Global_HC", "FWER_HC") save(results, file = "AOV_het1_beta.Rda") ############################################################################################################### ### E: Beta distributed data, heterogeneous variances, smaller variances in groups with larger sample sizes ### ############################################################################################################### ################################################################################# ### data generating process of beta distributed data in four groups, ### smaller variances in groups with larger sample sizes ### f: parameter controling the relation of group sizes ### sigma: standard deviation of the errors ################################################################################# dgp_aov2 <- function(n, f){ X <- dgpX(n, f) Xm <- model.matrix(~ - 1 + X1, data=X) n1 <- n + f n2 <- n + f * 2 * n n3 <- n + f * 3 * n n4 <- n + f * 4 * n lp1 <- rep(1.5,n1) + rbeta(n1,0.5,0.5) lp2 <- rep(1.5,n2) + rbeta(n2,1,1) lp3 <- rep(5/3,n3) + rbeta(n3,2,4) lp4 <- rep(1.25,n4) + rbeta(n4,6,2) Y <- c(lp1, lp2, lp3, lp4) data.frame(Y=Y, X) } results <- matrix(0, nrow=length(N), ncol=5, byrow=T) results[,1] <- N set.seed(11803) for (j in 1:length(N)) { print(j) n <- N[j] f <- 0.2 K <- diag(1,4) results[j,2:5] <- sim(nsim, dgp_aov2, fit_aov, n, f, K) save(results, file = "AOV_het2_beta.Rda") } colnames(results) <- c("n", "Size_Global", "FWER_Tukey","Size_Global_HC", "FWER_HC") save(results, file = "AOV_het2_beta.Rda") multcomp/inst/multcomp_coxme.R0000644000176000001440000004034211471214260016276 0ustar ripleyuserslibrary("coxme") library("multcomp") ####################################################### ### Source code for simulations presented in ### Dunnett-type inference in the frailty Cox model ### with covariates ### by E. Herberich and T. Hothorn ### Statistics in Medicine 2010 ####################################################### ############################################### # Simulation setup for balanced design ############################################### ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- rep(gl(3, n/(3*ncenter)), ncenter) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- gl(ncenter, n/ncenter) } ##################################################################################### ### Data generating process in the frailty Cox model with Weibull distributed ### survival and normally distributed random effect ### n: total number of observations ### beta: vector of effects of treatments and other covariates ### lambda, nu: scale and shape parameter of the Weibull distribution ### mu: parameter of the exponential distrubution of the cencoring times ### sigma: variance of random effects ### ncenter: number of centers ##################################################################################### dgp_cox_weibull <- function(n, beta, lambda, nu, mu, sigma, ncenter){ X <- data.frame(dgpX(n, ncenter)) Xm <- model.matrix(~ -1 + X1 + X2 + X3 + X4, data=X) stopifnot(ncol(Xm) == length(beta)) fixed <- beta %*% t(Xm) b <- rnorm(ncenter,0,sigma) Z <- dgpZ(n, ncenter) Zm <- model.matrix(~ -1 + Z) random <- b %*% t(Zm) scale <- lambda * exp(fixed + random) T <- (-log(runif(n, min=0, max=1))/scale)^(1/nu) # Weibull distributed survival C <- rexp(n, mu) # exponentially distributed cencoring times Y <- pmin(T,C) # observed time status <- (T<=C) # TRUE for events X$Y <- as.vector(Y) X$status <- as.vector(status) X$center <- Z return(X) } ##################################################################################### ### Fit of a frailty Cox model ##################################################################################### fit_coxme <- function(data) coxme(Surv(Y, status) ~ X1 + X2 + X3 + X4 + (1|center), data=data) ################################################################################# ### Simulations in a frailty Cox model ### Estimation of the coverage probability of simultaneous confidence intervals ### for many-to-one differences of treatment effects ### nsim: number of simulated data sets ### dgp: data generating proccess ### fit: model fit of simulated data ### other parameters: see above ################################################################################# sim <- function(nsim, dgp, fit, beta, n, lambda, nu, mu, sigma, ncenter){ coverage <- rep(NA, nsim) contrast1 <- beta[2] - beta[1] contrast2 <- beta[3] - beta[1] for (i in 1:nsim){ #print(i) x <- dgp(n, beta, lambda, nu, mu, sigma, ncenter) mod <- 0 try(mod <- fit(x), silent = TRUE) sci <- NA sci <- try(confint(glht(mod, linfct = mcp(X1 = "Dunnett"), alternative = "less")), silent = TRUE) try(if(contrast1 < sci$confint[1,3] & contrast2 < sci$confint[2,3]){coverage[i] <- 1} else{coverage[i] <- 0}, silent = TRUE) } coverage_probability <- mean(coverage, na.rm = TRUE) return(coverage_probability) } b2 <- seq(-2,0,0.05) b3 <- seq(-2,0,0.05) design <- expand.grid(b2, b3) names(design) <- c("b2", "b3") nsim <- 10000 lambda <- 0.5 nu <- 2 mu <- 0.1 sigma <- 1 ncenter <- 5 ##################################################################################### ### Balanced design with 105 observations ##################################################################################### n <- 105 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme_105.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") save(results, file = "coxme_105.Rda") ##################################################################################### ### Balanced design with 300 observations ##################################################################################### n <- 300 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme_300.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") save(results, file = "coxme_300.Rda") ######################################################################################## # Simulation setup for an unbalanced design with less observations in the control group ######################################################################################## ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(1:3, n/3)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- factor(rep(1:ncenter, rep(c(3,6,9,12,15)*rep(n/135,ncenter)*3))) } ##################################################################################### ### Unbalanced design with 135 observations ##################################################################################### n <- 135 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme1_135.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") save(results, file = "coxme1_135.Rda") ##################################################################################### ### Unbalanced design with 405 observations ##################################################################################### n <- 405 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter, nther) save(results, file = "coxme1_405.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") save(results, file = "coxme1_405.Rda") ######################################################################################## # Simulation setup for an unbalanced design with more observations in the control group ######################################################################################## ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(c(rep(1,5),rep(2,10),rep(3,10)), ncenter)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- gl(ncenter, n/ncenter) } ##################################################################################### ### Unbalanced design with 125 observations ##################################################################################### n <- 125 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme2_125.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme2_125.Rda") ##################################################################################### ### Unbalanced design with 375 observations ##################################################################################### n <- 375 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme2_375.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme2_375.Rda") ######################################################################################## # Simulation setup for an unbalanced design with number of observations differing # between centers ######################################################################################## ##################################################################################### ### Unbalanced design with 100 observations ##################################################################################### ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(c(rep(1,10),rep(2,5),rep(3,5)), ncenter)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- gl(ncenter, n/ncenter) } n <- 100 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme3_100.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme3_100.Rda") ##################################################################################### ### Unbalanced design with 300 observations ##################################################################################### ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(c(rep(1,30),rep(2,15),rep(3,15)), ncenter)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- gl(ncenter, n/ncenter) } n <- 300 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme3_300.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme3_300.Rda") ######################################################################################## # Simulation setup for an unbalanced design with many centers and two observations # in each centers ######################################################################################## ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(1:3, n/3)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(ncenter){ centr <- sample(factor(rep(1:ncenter, 2))) } ##################################################################################### ### Data generating process in the frailty Cox model with Weibull distributed ### survival and normally distributed random effect ### n: total number of observations ### beta: vector of effects of treatments and other covariates ### lambda, nu: scale and shape parameter of the Weibull distribution ### mu: parameter of the exponential distrubution of the cencoring times ### sigma: variance of random effects ### ncenter: number of centers ##################################################################################### dgp_cox_weibull <- function(n, beta, lambda, nu, mu, sigma, ncenter){ X <- data.frame(dgpX(n, ncenter)) Xm <- model.matrix(~ -1 + X1 + X2 + X3 + X4, data=X) stopifnot(ncol(Xm) == length(beta)) fixed <- beta %*% t(Xm) b <- rnorm(ncenter,0,sigma) Z <- dgpZ(ncenter) Zm <- model.matrix(~ -1 + Z) random <- b %*% t(Zm) scale <- lambda * exp(fixed + random) T <- (-log(runif(n, min=0, max=1))/scale)^(1/nu) C <- sample(c(rep(0, 0.2*n), rep(10000,0.8*n))) # 20% Censoring Y <- pmin(T,C) status <- (T<=C) X$Y <- as.vector(Y) X$status <- as.vector(status) X$center <- Z return(X) } ##################################################################################### ### Unbalanced design with 60 centers ##################################################################################### ncenter <- 60 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme4_120.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme4_120.Rda") ##################################################################################### ### Unbalanced design with 150 centers ##################################################################################### ncenter <- 150 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme4_300.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme4_300.Rda") multcomp/tests/0000755000176000001440000000000012234660136013307 5ustar ripleyusersmultcomp/tests/regtest-lme.Rout.save0000644000176000001440000000451412234530275017353 0ustar ripleyusers R version 3.0.2 (2013-09-25) -- "Frisbee Sailing" Copyright (C) 2013 The R Foundation for Statistical Computing Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ### mixed effects models > ### feature request by John Wilkinson > ### and Dieter Menne > > library("multcomp") Loading required package: mvtnorm Loading required package: survival Loading required package: splines > > lme4OK <- require("lme4") Loading required package: lme4 Loading required package: lattice Loading required package: Matrix > if (lme4OK) { + + data("ergoStool", package = "nlme") + K <- glht(aov(effort ~ Type, data = ergoStool), mcp(Type = "Tukey"))$linfct + + stool.lmer <- lmer(effort ~ Type + (1 | Subject), + data = ergoStool) + glme4 <- glht(stool.lmer, K) + glme41 <- glht(stool.lmer, mcp(Type = "Tukey")) + stopifnot(all.equal(coef(glme4), coef(glme41))) + print(summary(glme41, test = Chisqtest())) + + nlmeOK <- require("nlme") + if (nlmeOK) { + + stool.lme <- lme(effort ~ Type, data = ergoStool, + random = ~ 1 | Subject) + gnlme <- glht(stool.lme,K) + stopifnot(all.equal(coef(glme4), coef(gnlme))) + + gnlme2 <- glht(stool.lme, linfct = mcp(Type = "Tukey")) + stopifnot(all.equal(coef(glme4), coef(gnlme2))) + } + } General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate T2 - T1 == 0 3.8889 T3 - T1 == 0 2.2222 T4 - T1 == 0 0.6667 T3 - T2 == 0 -1.6667 T4 - T2 == 0 -3.2222 T4 - T3 == 0 -1.5556 Global Test: Chisq DF Pr(>Chisq) 1 67.07 3 1.812e-14 Loading required package: nlme Attaching package: 'nlme' The following object is masked from 'package:lme4': lmList > > proc.time() user system elapsed 2.172 0.048 2.219 multcomp/tests/bugfix.Rout.save0000644000176000001440000003372712211056074016412 0ustar ripleyusers R Under development (unstable) (2013-09-01 r63796) -- "Unsuffered Consequences" Copyright (C) 2013 The R Foundation for Statistical Computing Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > library("multcomp") Loading required package: mvtnorm Loading required package: survival Loading required package: splines > set.seed(290875) > > ### mcp didn't accept objects of class `contrMat' > ### spotted by Yves Brostaux > amod <- aov(response ~ trt, data = cholesterol) > cht1 <- glht(amod, linfct = mcp(trt = "Tukey")) > K <- contrMat(table(cholesterol$trt), type = "Tukey") > cht2 <- glht(amod, linfct = mcp(trt = K)) > stopifnot(all.equal(coef(cht1), coef(cht2))) > > ### several inconsistencies spotted by > ### Rich Heiberger 2006-11-28 > > ### need to be identical > stopifnot(identical(cht1, print(cht1))) General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate 2times - 1time == 0 3.443 4times - 1time == 0 6.593 drugD - 1time == 0 9.579 drugE - 1time == 0 15.166 4times - 2times == 0 3.150 drugD - 2times == 0 6.136 drugE - 2times == 0 11.723 drugD - 4times == 0 2.986 drugE - 4times == 0 8.573 drugE - drugD == 0 5.586 > > ### was: error > summary(cht1)$test $pfunction function (type = c("univariate", "adjusted", p.adjust.methods), ...) { type <- match.arg(type) pfct <- function(q) { switch(object$alternative, two.sided = { low <- rep(-abs(q), dim) upp <- rep(abs(q), dim) }, less = { low <- rep(q, dim) upp <- rep(Inf, dim) }, greater = { low <- rep(-Inf, dim) upp <- rep(q, dim) }) pmvt(lower = low, upper = upp, df = df, corr = cr, ...) } switch(object$alternative, two.sided = { if (df > 0) pvals <- 2 * (1 - pt(abs(tstat), df)) else pvals <- 2 * (1 - pnorm(abs(tstat))) }, less = { if (df > 0) pvals <- pt(tstat, df) else pvals <- pnorm(tstat) }, greater = { if (df > 0) pvals <- 1 - pt(tstat, df) else pvals <- 1 - pnorm(tstat) }) if (type == "univariate") return(pvals) if (type == "adjusted") { ret <- numeric(length(tstat)) error <- 0 for (i in 1:length(tstat)) { tmp <- pfct(tstat[i]) if (error < attr(tmp, "error")) error <- attr(tmp, "error") ret[i] <- tmp } ret <- 1 - ret attr(ret, "error") <- error return(ret) } return(p.adjust(pvals, method = type)) } $qfunction function (conf.level, adjusted = TRUE, ...) { tail <- switch(object$alternative, two.sided = "both.tails", less = "lower.tail", greater = "upper.tail") if (adjusted) { calpha <- qmvt(conf.level, df = df, corr = cr, tail = tail, ...) } else { calpha <- qmvt(conf.level, df = df, corr = matrix(1), tail = tail, ...) } ret <- calpha$quantile attr(ret, "error") <- calpha$estim.prec return(ret) } $coefficients 2times - 1time 4times - 1time drugD - 1time drugE - 1time 4times - 2times 3.44300 6.59281 9.57920 15.16555 3.14981 drugD - 2times drugE - 2times drugD - 4times drugE - 4times drugE - drugD 6.13620 11.72255 2.98639 8.57274 5.58635 $sigma 2times - 1time 4times - 1time drugD - 1time drugE - 1time 4times - 2times 1.443376 1.443376 1.443376 1.443376 1.443376 drugD - 2times drugE - 2times drugD - 4times drugE - 4times drugE - drugD 1.443376 1.443376 1.443376 1.443376 1.443376 $tstat 2times - 1time 4times - 1time drugD - 1time drugE - 1time 4times - 2times 2.385379 4.567631 6.636661 10.506996 2.182251 drugD - 2times drugE - 2times drugD - 4times drugE - 4times drugE - drugD 4.251282 8.121617 2.069031 5.939366 3.870335 $pvalues [1] 1.380883e-01 3.524764e-04 3.563710e-07 2.897682e-14 2.050268e-01 [6] 9.917862e-04 6.540452e-10 2.512705e-01 3.447725e-06 3.042641e-03 attr(,"error") [1] 0.0001910665 $type [1] "single-step" attr(,"class") [1] "mtest" > > > ### NAs in coefficients > tmp.data <- data.frame(EE=gl(2, 1, 24, letters[1:2]), + FF=gl(3, 2, 24, LETTERS[3:5]), + GG=gl(4, 6, 24, letters[6:9])) > tmp.data$x <- rep(12, 24) > tmp.data$y <- rep(7, 24) > tmp.data$z <- c(9, 14, 3, 4, 15, 1, 11, 13, 24, 10, 22, 18, + 20, 21, 6, 7, 16, 2, 19, 12, 17, 8, 23, 5) > tmp.data$w <- c(15, 9, 18, 21, 17, 11, 23, 12, 1, 10, 2, 14, 24, 7, + 13, 4, 5, 19, 16, 20, 3, 8, 22, 6) > > tmp.aov <- aov(z ~ EE+FF*GG + x*y +x*EE + y*FF, data=tmp.data) > > try(glht(tmp.aov, linfct=mcp(EE="Tukey"))) General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate b - a == 0 -5.833 Warning messages: 1: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate 2: In glht.matrix(model = list(coefficients = c(14.4166666666667, -5.83333333333334, : 6 out of 19 coefficients not estimable in 'model' > try(glht(tmp.aov, linfct=mcp(FF="Tukey"))) General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate D - C == 0 -8.0 E - C == 0 -3.5 E - D == 0 4.5 Warning messages: 1: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate 2: In glht.matrix(model = list(coefficients = c(14.4166666666667, -5.83333333333334, : 6 out of 19 coefficients not estimable in 'model' > glht(tmp.aov, linfct=mcp(GG="Tukey")) General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate g - f == 0 0.5 h - f == 0 9.0 i - f == 0 4.0 h - g == 0 8.5 i - g == 0 3.5 i - h == 0 -5.0 Warning messages: 1: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate 2: In glht.matrix(model = list(coefficients = c(14.4166666666667, -5.83333333333334, : 6 out of 19 coefficients not estimable in 'model' > > ### covariate interactions: fire a warning > tmp.aov <- aov(z ~ w*GG , data=tmp.data) > glht(tmp.aov, linfct = mcp(GG = "Tukey")) General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate g - f == 0 9.4468 h - f == 0 -0.1103 i - f == 0 -4.3988 h - g == 0 -9.5571 i - g == 0 -13.8456 i - h == 0 -4.2885 Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > ### stop with informative error message > amod <- aov(breaks ~ tension + Error(wool), data = warpbreaks) > try(glht(amod, linfct = mcp(tension = "Tukey"))) Error in model.matrix.aovlist(model) : 'glht' does not support objects of class 'aovlist' Error in factor_contrasts(model) : no 'model.matrix' method for 'model' found! > > ### print error, spotted by Rich > amod <- aov(breaks ~ wool * tension, data = warpbreaks) > wht <- glht(amod, linfct = mcp(tension = "Tukey")) Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > tmp <- confint(wht, calpha=2) > print(tmp) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ wool * tension, data = warpbreaks) Quantile = 2 95% confidence level Linear Hypotheses: Estimate lwr upr M - L == 0 -20.5556 -30.8702 -10.2410 H - L == 0 -20.0000 -30.3146 -9.6854 H - M == 0 0.5556 -9.7590 10.8702 > > ### coef. and vcov. didn't pass through > ### bug report by John Deke > lmod <- lm(Fertility ~ ., data = swiss) > my.model <- list(coef(lmod),vcov(lmod)) > coef2 <- function(model) return(model[[1]]) > vcov2 <- function(model) return(model[[2]]) > a <- glht(model = my.model, linfct = c("Agriculture=0","Catholic=0"), + coef. = coef2, vcov. = vcov2, df = 100) > b <- glht(model = lmod, linfct = c("Agriculture=0","Catholic=0"), + df = 100) > stopifnot(all.equal(coef(a), coef(b))) > > ### checks in mcp (spotted by Rich) > amod <- aov(breaks ~ tension, data = warpbreaks) > try(glht(amod, linfct = mcp(group = "Tukey"))) Error in mcp2matrix(model, linfct = linfct) : Variable(s) 'group' have been specified in 'linfct' but cannot be found in 'model'! > tmp <- warpbreaks > class(tmp$tension) <- "numeric" > amod <- aov(breaks ~ tension, data = tmp) > try(glht(amod, linfct = mcp(tension = "Tukey"))) Error in mcp2matrix(model, linfct = linfct) : Variable(s) 'tension' of class 'integer' is/are not contained as a factor in 'model'. > > ### symbolic description and interactions > ### spotted by Antonio Fabio Di Narzo > dat <- data.frame(y = rnorm(6), x = seq_len(6), f = gl(2, 3)) > lf <- glht(lm(y ~ x * f, data = dat), 'x + x:f2 = 0')$linfct > stopifnot(all.equal(max(abs(lf - c(0, 1, 0, 1))), 0)) > lf <- glht(lm(y ~ x * f, data = dat), 'x + 2.5 * x:f2 = 0')$linfct > stopifnot(all.equal(max(abs(lf - c(0, 1, 0, 2.5))), 0)) > > ### example from Bretz 2001 JSCS > > `tmp` <- + structure(list(gr = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, + 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, + 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, + 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, + 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("1", + "2", "3"), class = "factor"), age = c(39L, 40L, 41L, 41L, 45L, + 49L, 52L, 47L, 61L, 65L, 58L, 59L, 29L, 29L, 33L, 32L, 31L, 29L, + 29L, 30L, 21L, 28L, 23L, 35L, 38L, 38L, 43L, 39L, 38L, 42L, 43L, + 43L, 37L, 50L, 50L, 45L, 48L, 51L, 46L, 58L, 27L, 25L, 24L, 32L, + 23L, 25L, 32L, 18L, 19L, 26L, 33L, 27L, 33L, 25L, 42L, 35L, 35L, + 41L, 38L, 41L, 36L, 36L, 41L, 41L, 37L, 42L, 39L, 41L, 43L, 41L, + 48L, 47L, 53L, 49L, 54L, 48L, 49L, 47L, 52L, 58L, 62L, 65L, 62L, + 59L), y = c(4.62, 5.29, 5.52, 3.71, 4.02, 5.09, 2.7, 4.31, 2.7, + 3.03, 2.73, 3.67, 5.21, 5.17, 4.88, 4.5, 4.47, 5.12, 4.51, 4.85, + 5.22, 4.62, 5.07, 3.64, 3.64, 5.09, 4.61, 4.73, 4.58, 5.12, 3.89, + 4.62, 4.3, 2.7, 3.5, 5.06, 4.06, 4.51, 4.66, 2.88, 5.29, 3.67, + 5.82, 4.77, 5.71, 4.47, 4.55, 4.61, 5.86, 5.2, 4.44, 5.52, 4.97, + 4.99, 4.89, 4.09, 4.24, 3.88, 4.85, 4.79, 4.36, 4.02, 3.77, 4.22, + 4.94, 4.04, 4.51, 4.06, 4.02, 4.99, 3.86, 4.68, 4.74, 3.76, 3.98, + 5, 3.31, 3.11, 4.76, 3.95, 4.6, 4.83, 3.18, 3.03)), .Names = c("gr", + "age", "y"), row.names = c(NA, -84L), class = "data.frame") > > amod <- aov(y ~ gr + age, data = tmp) > glht(amod, linfct = mcp(gr = "Tukey")) General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate 2 - 1 == 0 0.04674 3 - 1 == 0 0.11693 3 - 2 == 0 0.07020 > > ### better error message > ### suggested by Rich > amod <- aov(breaks ~ tension, data = warpbreaks) > try(glht(amod, linfct = mcp(tension = "Warp"))) Error in chrlinfct2matrix(kch, levels(mf[[nm]])) : argument 'Warp' cannot be interpreted as expression > > ### cld did not find a terms component > ### spotted by Peter B. Mandeville > if (require("nlme")) { + data("Orthodont") + fm1 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1) + hsd1 <- glht(fm1, linfct = mcp(Sex = "Tukey")) + cld(hsd1) + } Loading required package: nlme Male Female "b" "a" > > ### spotted by > ### example code by Achim Zeileis > ## various models with and without intercept > m1a <- lm(breaks ~ tension, data = warpbreaks) > m1b <- lm(breaks ~ 0 + tension, data = warpbreaks) > m2a <- lm(breaks ~ wool + tension, data = warpbreaks) > m2b <- lm(breaks ~ 0 + wool + tension, data = warpbreaks) > > ## these two are equivalent: one factor with/without intercept > stopifnot(all.equal( + coef(glht(m1a, linfct = mcp(tension = "Tukey"))), + coef(glht(m1b, linfct = mcp(tension = "Tukey"))))) > > ## these two should be equivalent: two factors with/without intercept > ## but the latter fails > stopifnot(all.equal( + coef(glht(m2a, linfct = mcp(tension = "Tukey"))), + coef(glht(m2b, linfct = mcp(tension = "Tukey"))))) > > library("MASS") > xdf <- data.frame(y = gl(3, 10, ordered = TRUE), grp = sample(gl(3, 10))) > glht(polr(y ~ grp, data = xdf), mcp(grp = "Dunnett")) Re-fitting to get Hessian General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Linear Hypotheses: Estimate 2 - 1 == 0 0.3085 3 - 1 == 0 -0.9180 > > ### interactions of two factors > dat <- expand.grid(f = gl(2, 3), f2 = gl(3, 2)) > dat$y <- rnorm(nrow(dat)) > lf <- glht(lm(y ~ f : f2 - 1, data = dat), 'f1:f21 - f2:f22 = 0')$linfct > stopifnot(all.equal(max(abs(lf - c(1, 0, 0, -1, 0, 0))), 0)) > > ### plotting one-sided confidence intervals > amod <- aov(breaks ~ wool + tension, data = warpbreaks) > wht <- glht(amod, linfct = mcp(tension = "Tukey"), alternative="greater") > plot(wht, xlim=c(-30, 30), main="right side was missing") > wht <- glht(amod, linfct = mcp(tension = "Tukey"), alternative="less") > plot(wht, xlim=c(-40, 20), main="left side was missing") > > proc.time() user system elapsed 0.992 0.044 1.034 multcomp/tests/Examples/0000755000176000001440000000000012234660136015065 5ustar ripleyusersmultcomp/tests/Examples/multcomp-Ex.Rout.save0000644000176000001440000017170212234530070021110 0ustar ripleyusers R version 3.0.2 (2013-09-25) -- "Frisbee Sailing" Copyright (C) 2013 The R Foundation for Statistical Computing Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > pkgname <- "multcomp" > source(file.path(R.home("share"), "R", "examples-header.R")) > options(warn = 1) > library('multcomp') Loading required package: mvtnorm Loading required package: survival Loading required package: splines > > base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') > cleanEx() > nameEx("cftest") > ### * cftest > > flush(stderr()); flush(stdout()) > > ### Name: cftest > ### Title: Testing Estimated Coefficients > ### Aliases: cftest > ### Keywords: htest > > ### ** Examples > > > ## The function is currently defined as > function(model, ...) + summary(glht(model), test = univariate(), ...) function (model, ...) summary(glht(model), test = univariate(), ...) > > lmod <- lm(dist ~ speed, data = cars) > summary(lmod) Call: lm(formula = dist ~ speed, data = cars) Residuals: Min 1Q Median 3Q Max -29.069 -9.525 -2.272 9.215 43.201 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -17.5791 6.7584 -2.601 0.0123 * speed 3.9324 0.4155 9.464 1.49e-12 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 15.38 on 48 degrees of freedom Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438 F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12 > cftest(lmod) Simultaneous Tests for General Linear Hypotheses Fit: lm(formula = dist ~ speed, data = cars) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) (Intercept) == 0 -17.5791 6.7584 -2.601 0.0123 * speed == 0 3.9324 0.4155 9.464 1.49e-12 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > > > > > cleanEx() > nameEx("cholesterol") > ### * cholesterol > > flush(stderr()); flush(stdout()) > > ### Name: cholesterol > ### Title: Cholesterol Reduction Data Set > ### Aliases: cholesterol > ### Keywords: datasets > > ### ** Examples > > > ### adjusted p-values for all-pairwise comparisons in a one-way layout > ### set up ANOVA model > amod <- aov(response ~ trt, data = cholesterol) > > ### set up multiple comparisons object for all-pair comparisons > cht <- glht(amod, linfct = mcp(trt = "Tukey")) > > ### cf. Westfall et al. (1999, page 171) > summary(cht, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) 2times - 1time == 0 3.443 1.443 2.385 0.021333 * 4times - 1time == 0 6.593 1.443 4.568 3.82e-05 *** drugD - 1time == 0 9.579 1.443 6.637 3.53e-08 *** drugE - 1time == 0 15.166 1.443 10.507 1.08e-13 *** 4times - 2times == 0 3.150 1.443 2.182 0.034352 * drugD - 2times == 0 6.136 1.443 4.251 0.000106 *** drugE - 2times == 0 11.723 1.443 8.122 2.29e-10 *** drugD - 4times == 0 2.986 1.443 2.069 0.044316 * drugE - 4times == 0 8.573 1.443 5.939 3.84e-07 *** drugE - drugD == 0 5.586 1.443 3.870 0.000348 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(cht, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) 2times - 1time == 0 3.443 1.443 2.385 0.042666 * 4times - 1time == 0 6.593 1.443 4.568 0.000153 *** drugD - 1time == 0 9.579 1.443 6.637 2.12e-07 *** drugE - 1time == 0 15.166 1.443 10.507 1.08e-12 *** 4times - 2times == 0 3.150 1.443 2.182 0.042666 * drugD - 2times == 0 6.136 1.443 4.251 0.000317 *** drugE - 2times == 0 11.723 1.443 8.122 1.38e-09 *** drugD - 4times == 0 2.986 1.443 2.069 0.044316 * drugE - 4times == 0 8.573 1.443 5.939 1.54e-06 *** drugE - drugD == 0 5.586 1.443 3.870 0.000697 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(cht, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) 2times - 1time == 0 3.443 1.443 2.385 0.0420 * 4times - 1time == 0 6.593 1.443 4.568 <0.001 *** drugD - 1time == 0 9.579 1.443 6.637 <0.001 *** drugE - 1time == 0 15.166 1.443 10.507 <0.001 *** 4times - 2times == 0 3.150 1.443 2.182 0.0420 * drugD - 2times == 0 6.136 1.443 4.251 <0.001 *** drugE - 2times == 0 11.723 1.443 8.122 <0.001 *** drugD - 4times == 0 2.986 1.443 2.069 0.0443 * drugE - 4times == 0 8.573 1.443 5.939 <0.001 *** drugE - drugD == 0 5.586 1.443 3.870 <0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > ### use only a subset of all pairwise hypotheses > K <- contrMat(table(cholesterol$trt), type="Tukey") > Ksub <- rbind(K[c(1,2,5),], + "D - test" = c(-1, -1, -1, 3, 0), + "E - test" = c(-1, -1, -1, 0, 3)) > > ### reproduce results in Westfall et al. (1999, page 172) > ### note: the ordering of our estimates here is different > amod <- aov(response ~ trt - 1, data = cholesterol) > summary(glht(amod, linfct = mcp(trt = Ksub[,5:1])), + test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) 2times - 1time == 0 -5.586 1.443 -3.870 <0.001 *** 4times - 1time == 0 -8.573 1.443 -5.939 <0.001 *** 4times - 2times == 0 -2.986 1.443 -2.069 0.0443 * D - test == 0 -21.009 3.536 -5.942 <0.001 *** E - test == 0 -31.338 3.536 -8.864 <0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > > cleanEx() > nameEx("cld") > ### * cld > > flush(stderr()); flush(stdout()) > > ### Name: cld > ### Title: Set up a compact letter display of all pair-wise comparisons > ### Aliases: cld cld.glht cld.summary.glht cld.confint.glht > > ### ** Examples > > ### multiple comparison procedures > ### set up a one-way ANOVA > data(warpbreaks) > amod <- aov(breaks ~ tension, data = warpbreaks) > ### specify all pair-wise comparisons among levels of variable "tension" > tuk <- glht(amod, linfct = mcp(tension = "Tukey")) > ### extract information > tuk.cld <- cld(tuk) > ### use sufficiently large upper margin > old.par <- par(mai=c(1,1,1.25,1), no.readonly = TRUE) > ### plot > plot(tuk.cld) > par(old.par) > > ### now using covariates > data(warpbreaks) > amod2 <- aov(breaks ~ tension + wool, data = warpbreaks) > ### specify all pair-wise comparisons among levels of variable "tension" > tuk2 <- glht(amod2, linfct = mcp(tension = "Tukey")) > ### extract information > tuk.cld2 <- cld(tuk2) > ### use sufficiently large upper margin > old.par <- par(mai=c(1,1,1.25,1), no.readonly = TRUE) > ### plot using different colors > plot(tuk.cld2, col=c("black", "red", "blue")) > par(old.par) > > ### set up all pair-wise comparisons for count data > data(Titanic) > mod <- glm(Survived ~ Class, data = as.data.frame(Titanic), weights = Freq, family = binomial()) > ### specify all pair-wise comparisons among levels of variable "Class" > glht.mod <- glht(mod, mcp(Class = "Tukey")) > ### extract information > mod.cld <- cld(glht.mod) > ### use sufficiently large upper margin > old.par <- par(mai=c(1,1,1.5,1), no.readonly = TRUE) > ### plot > plot(mod.cld) > par(old.par) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("cml") > ### * cml > > flush(stderr()); flush(stdout()) > > ### Name: cml > ### Title: Chronic Myelogenous Leukemia survival data. > ### Aliases: cml > ### Keywords: datasets > > ### ** Examples > > > if (require("coxme")) { + data("cml") + ### one-sided simultaneous confidence intervals for many-to-one + ### comparisons of treatment effects concerning time of survival + ### modeled by a frailty Cox model with adjustment for further + ### covariates and center-specific random effect. + cml_coxme <- coxme(Surv(time, status) ~ treatment + sex + age + riskgroup + (1|center), + data = cml) + glht_coxme <- glht(model = cml_coxme, linfct = mcp(treatment = "Dunnett"), + alternative = "greater") + ci_coxme <- confint(glht_coxme) + exp(ci_coxme$confint)[1:2,] + } Loading required package: coxme Loading required package: bdsmatrix Attaching package: ‘bdsmatrix’ The following object is masked from ‘package:base’: backsolve Loading required package: nlme Loading required package: Matrix Loading required package: lattice Warning in Ops.factor(1, center) : | not meaningful for factors Warning in Ops.factor(1, center) : | not meaningful for factors Estimate lwr upr trt2 - trt1 1.551055 1.184063 Inf trt3 - trt1 1.396362 1.068776 Inf > > > > cleanEx() detaching ‘package:coxme’, ‘package:Matrix’, ‘package:lattice’, ‘package:nlme’, ‘package:bdsmatrix’ > nameEx("contrMat") > ### * contrMat > > flush(stderr()); flush(stdout()) > > ### Name: contrMat > ### Title: Contrast Matrices > ### Aliases: contrMat > ### Keywords: misc > > ### ** Examples > > n <- c(10,20,30,40) > names(n) <- paste("group", 1:4, sep="") > contrMat(n) # Dunnett is default Multiple Comparisons of Means: Dunnett Contrasts group1 group2 group3 group4 group2 - group1 -1 1 0 0 group3 - group1 -1 0 1 0 group4 - group1 -1 0 0 1 > contrMat(n, base = 2) # use second level as baseline Multiple Comparisons of Means: Dunnett Contrasts group1 group2 group3 group4 group1 - group2 1 -1 0 0 group3 - group2 0 -1 1 0 group4 - group2 0 -1 0 1 > contrMat(n, type = "Tukey") Multiple Comparisons of Means: Tukey Contrasts group1 group2 group3 group4 group2 - group1 -1 1 0 0 group3 - group1 -1 0 1 0 group4 - group1 -1 0 0 1 group3 - group2 0 -1 1 0 group4 - group2 0 -1 0 1 group4 - group3 0 0 -1 1 > contrMat(n, type = "Sequen") Multiple Comparisons of Means: Sequen Contrasts group1 group2 group3 group4 group2 - group1 -1 1 0 0 group3 - group2 0 -1 1 0 group4 - group3 0 0 -1 1 > contrMat(n, type = "AVE") Multiple Comparisons of Means: AVE Contrasts group1 group2 group3 group4 C 1 1.0000 -0.2222 -0.3333 -0.4444 C 2 -0.1250 1.0000 -0.3750 -0.5000 C 3 -0.1429 -0.2857 1.0000 -0.5714 C 4 -0.1667 -0.3333 -0.5000 1.0000 > contrMat(n, type = "Changepoint") Multiple Comparisons of Means: Changepoint Contrasts group1 group2 group3 group4 C 1 -1.0000 0.2222 0.3333 0.4444 C 2 -0.3333 -0.6667 0.4286 0.5714 C 3 -0.1667 -0.3333 -0.5000 1.0000 > contrMat(n, type = "Williams") Multiple Comparisons of Means: Williams Contrasts group1 group2 group3 group4 C 1 -1 0.0000 0.0000 1.0000 C 2 -1 0.0000 0.4286 0.5714 C 3 -1 0.2222 0.3333 0.4444 > contrMat(n, type = "Marcus") Multiple Comparisons of Means: Marcus Contrasts group1 group2 group3 group4 C 1 -1.0000 0.2222 0.3333 0.4444 C 2 -1.0000 0.0000 0.4286 0.5714 C 3 -0.3333 -0.6667 0.4286 0.5714 C 4 -1.0000 0.0000 0.0000 1.0000 C 5 -0.3333 -0.6667 0.0000 1.0000 C 6 -0.1667 -0.3333 -0.5000 1.0000 > contrMat(n, type = "McDermott") Multiple Comparisons of Means: McDermott Contrasts group1 group2 group3 group4 C 1 -1.0000 1.0000 0.0 0 C 2 -0.3333 -0.6667 1.0 0 C 3 -0.1667 -0.3333 -0.5 1 > ### Umbrella-protected Williams contrasts, i.e. a sequence of > ### Williams-type contrasts with groups of higher order > ### stepwise omitted > contrMat(n, type = "UmbrellaWilliams") Multiple Comparisons of Means: UmbrellaWilliams Contrasts group1 group2 group3 group4 C 1 -1 0.0000 0.0000 1.0000 C 2 -1 0.0000 0.4286 0.5714 C 3 -1 0.2222 0.3333 0.4444 C 4 -1 0.0000 1.0000 0.0000 C 5 -1 0.4000 0.6000 0.0000 C 6 -1 1.0000 0.0000 0.0000 > ### comparison of each group with grand mean of all groups > contrMat(n, type = "GrandMean") Multiple Comparisons of Means: GrandMean Contrasts group1 group2 group3 group4 C 1 0.9 -0.2 -0.3 -0.4 C 2 -0.1 0.8 -0.3 -0.4 C 3 -0.1 -0.2 0.7 -0.4 C 4 -0.1 -0.2 -0.3 0.6 > > > > > cleanEx() > nameEx("detergent") > ### * detergent > > flush(stderr()); flush(stdout()) > > ### Name: detergent > ### Title: Detergent Durability Data Set > ### Aliases: detergent > ### Keywords: datasets > > ### ** Examples > > > ### set up two-way ANOVA without interactions > amod <- aov(plates ~ block + detergent, data = detergent) > > ### set up all-pair comparisons > dht <- glht(amod, linfct = mcp(detergent = "Tukey")) > > ### see Westfall et al. (1999, p. 190) > confint(dht) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Quantile = 3.0638 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr B - A == 0 -2.1333 -4.7925 0.5259 C - A == 0 3.6000 0.9408 6.2592 D - A == 0 2.2000 -0.4592 4.8592 E - A == 0 -4.3333 -6.9925 -1.6741 C - B == 0 5.7333 3.0741 8.3925 D - B == 0 4.3333 1.6741 6.9925 E - B == 0 -2.2000 -4.8592 0.4592 D - C == 0 -1.4000 -4.0592 1.2592 E - C == 0 -7.9333 -10.5925 -5.2741 E - D == 0 -6.5333 -9.1925 -3.8741 > > ### see Westfall et al. (1999, p. 192) > summary(dht, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -2.1333 0.8679 -2.458 0.025762 * C - A == 0 3.6000 0.8679 4.148 0.000757 *** D - A == 0 2.2000 0.8679 2.535 0.022075 * E - A == 0 -4.3333 0.8679 -4.993 0.000133 *** C - B == 0 5.7333 0.8679 6.606 6.05e-06 *** D - B == 0 4.3333 0.8679 4.993 0.000133 *** E - B == 0 -2.2000 0.8679 -2.535 0.022075 * D - C == 0 -1.4000 0.8679 -1.613 0.126291 E - C == 0 -7.9333 0.8679 -9.140 9.45e-08 *** E - D == 0 -6.5333 0.8679 -7.527 1.21e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(dht, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -2.1333 0.8679 -2.458 0.051524 . C - A == 0 3.6000 0.8679 4.148 0.003028 ** D - A == 0 2.2000 0.8679 2.535 0.044149 * E - A == 0 -4.3333 0.8679 -4.993 0.000531 *** C - B == 0 5.7333 0.8679 6.606 3.63e-05 *** D - B == 0 4.3333 0.8679 4.993 0.000531 *** E - B == 0 -2.2000 0.8679 -2.535 0.044149 * D - C == 0 -1.4000 0.8679 -1.613 0.126291 E - C == 0 -7.9333 0.8679 -9.140 9.45e-07 *** E - D == 0 -6.5333 0.8679 -7.527 7.26e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(dht, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -2.1333 0.8679 -2.458 0.05002 . C - A == 0 3.6000 0.8679 4.148 0.00275 ** D - A == 0 2.2000 0.8679 2.535 0.04297 * E - A == 0 -4.3333 0.8679 -4.993 < 0.001 *** C - B == 0 5.7333 0.8679 6.606 < 0.001 *** D - B == 0 4.3333 0.8679 4.993 < 0.001 *** E - B == 0 -2.2000 0.8679 -2.535 0.04297 * D - C == 0 -1.4000 0.8679 -1.613 0.12629 E - C == 0 -7.9333 0.8679 -9.140 < 0.001 *** E - D == 0 -6.5333 0.8679 -7.527 < 0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > > > cleanEx() > nameEx("fattyacid") > ### * fattyacid > > flush(stderr()); flush(stdout()) > > ### Name: fattyacid > ### Title: Fatty Acid Content of Bacillus simplex. > ### Aliases: fattyacid > ### Keywords: datasets > > ### ** Examples > > > if (require("sandwich")) { + data("fattyacid") + ### all-pairwise comparisons of the means of fatty acid content + ### FA between different putative ecotypes PE accounting for + ### heteroscedasticity by using a heteroscedastic consistent + ### covariance estimation + amod <- aov(FA ~ PE, data = fattyacid) + amod_glht <- glht(amod, mcp(PE = "Tukey"), vcov = vcovHC) + summary(amod_glht) + + ### simultaneous confidence intervals for the differences of + ### means of fatty acid content between the putative ecotypes + confint(amod_glht) + } Loading required package: sandwich Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = FA ~ PE, data = fattyacid) Quantile = 2.8942 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr PE4 - PE3 == 0 -0.012820 -0.114108 0.088468 PE5 - PE3 == 0 -0.084398 -0.182355 0.013558 PE6 - PE3 == 0 0.019286 -0.084210 0.122781 PE7 - PE3 == 0 -0.010048 -0.120043 0.099948 PE9 - PE3 == 0 0.075536 -0.028027 0.179098 PE5 - PE4 == 0 -0.071579 -0.128779 -0.014379 PE6 - PE4 == 0 0.032105 -0.034133 0.098344 PE7 - PE4 == 0 0.002772 -0.073223 0.078767 PE9 - PE4 == 0 0.088355 0.022012 0.154699 PE6 - PE5 == 0 0.103684 0.042661 0.164707 PE7 - PE5 == 0 0.074351 0.002856 0.145845 PE9 - PE5 == 0 0.159934 0.098797 0.221071 PE7 - PE6 == 0 -0.029333 -0.108246 0.049579 PE9 - PE6 == 0 0.056250 -0.013417 0.125917 PE9 - PE7 == 0 0.085583 0.006582 0.164584 > > > > cleanEx() detaching ‘package:sandwich’ > nameEx("glht") > ### * glht > > flush(stderr()); flush(stdout()) > > ### Name: glht > ### Title: General Linear Hypotheses > ### Aliases: glht glht.matrix glht.character glht.expression glht.mcp > ### glht.mlf mcp > ### Keywords: htest > > ### ** Examples > > > ### multiple linear model, swiss data > lmod <- lm(Fertility ~ ., data = swiss) > > ### test of H_0: all regression coefficients are zero > ### (ignore intercept) > > ### define coefficients of linear function directly > K <- diag(length(coef(lmod)))[-1,] > rownames(K) <- names(coef(lmod))[-1] > K [,1] [,2] [,3] [,4] [,5] [,6] Agriculture 0 1 0 0 0 0 Examination 0 0 1 0 0 0 Education 0 0 0 1 0 0 Catholic 0 0 0 0 1 0 Infant.Mortality 0 0 0 0 0 1 > > ### set up general linear hypothesis > glht(lmod, linfct = K) General Linear Hypotheses Linear Hypotheses: Estimate Agriculture == 0 -0.1721 Examination == 0 -0.2580 Education == 0 -0.8709 Catholic == 0 0.1041 Infant.Mortality == 0 1.0770 > > ### alternatively, use a symbolic description > ### instead of a matrix > glht(lmod, linfct = c("Agriculture = 0", + "Examination = 0", + "Education = 0", + "Catholic = 0", + "Infant.Mortality = 0")) General Linear Hypotheses Linear Hypotheses: Estimate Agriculture == 0 -0.1721 Examination == 0 -0.2580 Education == 0 -0.8709 Catholic == 0 0.1041 Infant.Mortality == 0 1.0770 > > > ### multiple comparison procedures > ### set up a one-way ANOVA > amod <- aov(breaks ~ tension, data = warpbreaks) > > ### set up all-pair comparisons for factor `tension' > ### using a symbolic description (`type' argument > ### to `contrMat()') > glht(amod, linfct = mcp(tension = "Tukey")) General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate M - L == 0 -10.000 H - L == 0 -14.722 H - M == 0 -4.722 > > ### alternatively, describe differences symbolically > glht(amod, linfct = mcp(tension = c("M - L = 0", + "H - L = 0", + "H - M = 0"))) General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Linear Hypotheses: Estimate M - L == 0 -10.000 H - L == 0 -14.722 H - M == 0 -4.722 > > ### alternatively, define contrast matrix directly > contr <- rbind("M - L" = c(-1, 1, 0), + "H - L" = c(-1, 0, 1), + "H - M" = c(0, -1, 1)) > glht(amod, linfct = mcp(tension = contr)) General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Linear Hypotheses: Estimate M - L == 0 -10.000 H - L == 0 -14.722 H - M == 0 -4.722 > > ### alternatively, define linear function for coef(amod) > ### instead of contrasts for `tension' > ### (take model contrasts and intercept into account) > glht(amod, linfct = cbind(0, contr %*% contr.treatment(3))) General Linear Hypotheses Linear Hypotheses: Estimate M - L == 0 -10.000 H - L == 0 -14.722 H - M == 0 -4.722 > > > ### mix of one- and two-sided alternatives > warpbreaks.aov <- aov(breaks ~ wool + tension, + data = warpbreaks) > > ### contrasts for `tension' > K <- rbind("L - M" = c( 1, -1, 0), + "M - L" = c(-1, 1, 0), + "L - H" = c( 1, 0, -1), + "M - H" = c( 0, 1, -1)) > > warpbreaks.mc <- glht(warpbreaks.aov, + linfct = mcp(tension = K), + alternative = "less") > > ### correlation of first two tests is -1 > cov2cor(vcov(warpbreaks.mc)) L - M M - L L - H M - H L - M 1.0 -1.0 0.5 -0.5 M - L -1.0 1.0 -0.5 0.5 L - H 0.5 -0.5 1.0 0.5 M - H -0.5 0.5 0.5 1.0 > > ### use smallest of the two one-sided > ### p-value as two-sided p-value -> 0.0232 > summary(warpbreaks.mc) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = breaks ~ wool + tension, data = warpbreaks) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 10.000 3.872 2.582 1.0000 M - L >= 0 -10.000 3.872 -2.582 0.0232 * L - H >= 0 14.722 3.872 3.802 1.0000 M - H >= 0 4.722 3.872 1.219 1.0000 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > > > cleanEx() > nameEx("litter") > ### * litter > > flush(stderr()); flush(stdout()) > > ### Name: litter > ### Title: Litter Weights Data Set > ### Aliases: litter > ### Keywords: datasets > > ### ** Examples > > > ### fit ANCOVA model to data > amod <- aov(weight ~ dose + gesttime + number, data = litter) > > ### define matrix of linear hypotheses for `dose' > doselev <- as.integer(levels(litter$dose)) > K <- rbind(contrMat(table(litter$dose), "Tukey"), + otrend = c(-1.5, -0.5, 0.5, 1.5), + atrend = doselev - mean(doselev), + ltrend = log(1:4) - mean(log(1:4))) > > ### set up multiple comparison object > Kht <- glht(amod, linfct = mcp(dose = K), alternative = "less") > > ### cf. Westfall (1997, Table 2) > summary(Kht, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -3.3524 1.2908 -2.597 0.00575 ** 50 - 0 >= 0 -2.2909 1.3384 -1.712 0.04576 * 500 - 0 >= 0 -2.6752 1.3343 -2.005 0.02448 * 50 - 5 >= 0 1.0615 1.3973 0.760 0.77498 500 - 5 >= 0 0.6772 1.3394 0.506 0.69260 500 - 50 >= 0 -0.3844 1.4510 -0.265 0.39595 otrend >= 0 -3.4821 2.0867 -1.669 0.04988 * atrend >= 0 -314.7324 408.9901 -0.770 0.22212 ltrend >= 0 -1.9400 0.9616 -2.018 0.02379 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(Kht, test = adjusted("bonferroni")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -3.3524 1.2908 -2.597 0.0518 . 50 - 0 >= 0 -2.2909 1.3384 -1.712 0.4118 500 - 0 >= 0 -2.6752 1.3343 -2.005 0.2203 50 - 5 >= 0 1.0615 1.3973 0.760 1.0000 500 - 5 >= 0 0.6772 1.3394 0.506 1.0000 500 - 50 >= 0 -0.3844 1.4510 -0.265 1.0000 otrend >= 0 -3.4821 2.0867 -1.669 0.4490 atrend >= 0 -314.7324 408.9901 -0.770 1.0000 ltrend >= 0 -1.9400 0.9616 -2.018 0.2141 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- bonferroni method) > summary(Kht, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -3.3524 1.2908 -2.597 0.0518 . 50 - 0 >= 0 -2.2909 1.3384 -1.712 0.0915 . 500 - 0 >= 0 -2.6752 1.3343 -2.005 0.0734 . 50 - 5 >= 0 1.0615 1.3973 0.760 1.0000 500 - 5 >= 0 0.6772 1.3394 0.506 1.0000 500 - 50 >= 0 -0.3844 1.4510 -0.265 1.0000 otrend >= 0 -3.4821 2.0867 -1.669 0.0998 . atrend >= 0 -314.7324 408.9901 -0.770 0.4442 ltrend >= 0 -1.9400 0.9616 -2.018 0.0518 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(Kht, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -3.3524 1.2908 -2.597 0.0320 * 50 - 0 >= 0 -2.2909 1.3384 -1.712 0.0893 . 500 - 0 >= 0 -2.6752 1.3343 -2.005 0.0647 . 50 - 5 >= 0 1.0615 1.3973 0.760 0.7750 500 - 5 >= 0 0.6772 1.3394 0.506 0.7271 500 - 50 >= 0 -0.3844 1.4510 -0.265 0.7271 otrend >= 0 -3.4821 2.0867 -1.669 0.0917 . atrend >= 0 -314.7324 408.9901 -0.770 0.3951 ltrend >= 0 -1.9400 0.9616 -2.018 0.0459 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > summary(Kht, test = adjusted("single-step")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -3.3524 1.2908 -2.597 0.0316 * 50 - 0 >= 0 -2.2909 1.3384 -1.712 0.2031 500 - 0 >= 0 -2.6752 1.3343 -2.005 0.1186 50 - 5 >= 0 1.0615 1.3973 0.760 0.9999 500 - 5 >= 0 0.6772 1.3394 0.506 0.9987 500 - 50 >= 0 -0.3844 1.4510 -0.265 0.8908 otrend >= 0 -3.4821 2.0867 -1.669 0.2185 atrend >= 0 -314.7324 408.9901 -0.770 0.6625 ltrend >= 0 -1.9400 0.9616 -2.018 0.1157 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > > > cleanEx() > nameEx("methods") > ### * methods > > flush(stderr()); flush(stdout()) > > ### Name: glht-methods > ### Title: Methods for General Linear Hypotheses > ### Aliases: summary.glht confint.glht coef.glht vcov.glht plot.glht > ### plot.confint.glht univariate adjusted Ftest Chisqtest adjusted_calpha > ### univariate_calpha > ### Keywords: htest > > ### ** Examples > > > ### set up a two-way ANOVA > amod <- aov(breaks ~ wool + tension, data = warpbreaks) > > ### set up all-pair comparisons for factor `tension' > wht <- glht(amod, linfct = mcp(tension = "Tukey")) > > ### 95% simultaneous confidence intervals > plot(print(confint(wht))) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ wool + tension, data = warpbreaks) Quantile = 2.4159 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr M - L == 0 -10.0000 -19.3552 -0.6448 H - L == 0 -14.7222 -24.0774 -5.3670 H - M == 0 -4.7222 -14.0774 4.6330 > > ### the same (for balanced designs only) > TukeyHSD(amod, "tension") Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = breaks ~ wool + tension, data = warpbreaks) $tension diff lwr upr p adj M-L -10.000000 -19.35342 -0.6465793 0.0336262 H-L -14.722222 -24.07564 -5.3688015 0.0011218 H-M -4.722222 -14.07564 4.6311985 0.4474210 > > ### corresponding adjusted p values > summary(wht) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ wool + tension, data = warpbreaks) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) M - L == 0 -10.000 3.872 -2.582 0.03370 * H - L == 0 -14.722 3.872 -3.802 0.00115 ** H - M == 0 -4.722 3.872 -1.219 0.44743 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > ### all means for levels of `tension' > amod <- aov(breaks ~ tension, data = warpbreaks) > glht(amod, linfct = matrix(c(1, 0, 0, + 1, 1, 0, + 1, 0, 1), byrow = TRUE, ncol = 3)) General Linear Hypotheses Linear Hypotheses: Estimate 1 == 0 36.39 2 == 0 26.39 3 == 0 21.67 > > ### confidence bands for a simple linear model, `cars' data > plot(cars, xlab = "Speed (mph)", ylab = "Stopping distance (ft)", + las = 1) > > ### fit linear model and add regression line to plot > lmod <- lm(dist ~ speed, data = cars) > abline(lmod) > > ### a grid of speeds > speeds <- seq(from = min(cars$speed), to = max(cars$speed), + length = 10) > > ### linear hypotheses: 10 selected points on the regression line != 0 > K <- cbind(1, speeds) > > ### set up linear hypotheses > cht <- glht(lmod, linfct = K) > > ### confidence intervals, i.e., confidence bands, and add them plot > cci <- confint(cht) > lines(speeds, cci$confint[,"lwr"], col = "blue") > lines(speeds, cci$confint[,"upr"], col = "blue") > > > ### simultaneous p values for parameters in a Cox model > if (require("survival") && require("MASS")) { + data("leuk", package = "MASS") + leuk.cox <- coxph(Surv(time) ~ ag + log(wbc), data = leuk) + + ### set up linear hypotheses + lht <- glht(leuk.cox, linfct = diag(length(coef(leuk.cox)))) + + ### adjusted p values + print(summary(lht)) + } Loading required package: MASS Simultaneous Tests for General Linear Hypotheses Fit: coxph(formula = Surv(time) ~ ag + log(wbc), data = leuk) Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) 1 == 0 -1.0691 0.4293 -2.490 0.0253 * 2 == 0 0.3677 0.1360 2.703 0.0137 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > > > cleanEx() detaching ‘package:MASS’ > nameEx("mmm") > ### * mmm > > flush(stderr()); flush(stdout()) > > ### Name: mmm > ### Title: Simultaneous Inference for Multiple Marginal Models > ### Aliases: mmm mlf > ### Keywords: models > > ### ** Examples > > > ### replicate analysis of Hasler & Hothorn (2011), > ### A Dunnett-Type Procedure for Multiple Endpoints, > ### The International Journal of Biostatistics: Vol. 7: Iss. 1, Article 3. > ### DOI: 10.2202/1557-4679.1258 > > ### see ?coagulation > data("coagulation", package = "SimComp") > > ### level "S" is the standard, "H" and "B" are novel procedures > coagulation$Group <- relevel(coagulation$Group, ref = "S") > > ### fit marginal models > (m1 <- lm(Thromb.count ~ Group, data = coagulation)) Call: lm(formula = Thromb.count ~ Group, data = coagulation) Coefficients: (Intercept) GroupB GroupH 0.87219 0.12170 0.04351 > (m2 <- lm(ADP ~ Group, data = coagulation)) Call: lm(formula = ADP ~ Group, data = coagulation) Coefficients: (Intercept) GroupB GroupH 0.80801 0.21211 0.08422 > (m3 <- lm(TRAP ~ Group, data = coagulation)) Call: lm(formula = TRAP ~ Group, data = coagulation) Coefficients: (Intercept) GroupB GroupH 0.72529 0.10525 0.07109 > > ### set-up Dunnett comparisons for H - S and B - S > ### for all three models > g <- glht(mmm(Thromb = m1, ADP = m2, TRAP = m3), + mlf(mcp(Group = "Dunnett")), alternative = "greater") > > ### joint correlation > cov2cor(vcov(g)) Thromb: B - S Thromb: H - S ADP: B - S ADP: H - S TRAP: B - S Thromb: B - S 1.0000000 0.2841127 0.8492078 0.1712958 0.3142199 Thromb: H - S 0.2841127 1.0000000 0.1339935 0.8869262 0.3423331 ADP: B - S 0.8492078 0.1339935 1.0000000 0.1162019 0.2396233 ADP: H - S 0.1712958 0.8869262 0.1162019 1.0000000 0.2236344 TRAP: B - S 0.3142199 0.3423331 0.2396233 0.2236344 1.0000000 TRAP: H - S 0.3765291 0.7054480 0.1924089 0.5818189 0.5560384 TRAP: H - S Thromb: B - S 0.3765291 Thromb: H - S 0.7054480 ADP: B - S 0.1924089 ADP: H - S 0.5818189 TRAP: B - S 0.5560384 TRAP: H - S 1.0000000 > > ### simultaneous p-values adjusted by taking the correlation > ### between the score contributions into account > summary(g) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>z) Thromb: B - S <= 0 0.12170 0.10468 1.163 0.3747 Thromb: H - S <= 0 0.04351 0.10238 0.425 0.7267 ADP: B - S <= 0 0.21211 0.08394 2.527 0.0263 * ADP: H - S <= 0 0.08422 0.08209 1.026 0.4401 TRAP: B - S <= 0 0.10525 0.14287 0.737 0.5828 TRAP: H - S <= 0 0.07109 0.13973 0.509 0.6902 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > ### simultaneous confidence intervals > confint(g) Simultaneous Confidence Intervals Fit: NULL Quantile = -2.2713 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr Thromb: B - S <= 0 0.12170 -0.11606 Inf Thromb: H - S <= 0 0.04351 -0.18903 Inf ADP: B - S <= 0 0.21211 0.02146 Inf ADP: H - S <= 0 0.08422 -0.10223 Inf TRAP: B - S <= 0 0.10525 -0.21925 Inf TRAP: H - S <= 0 0.07109 -0.24628 Inf > > ### compare with > ## Not run: > ##D library("SimComp") > ##D SimCiDiff(data = coagulation, grp = "Group", > ##D resp = c("Thromb.count","ADP","TRAP"), > ##D type = "Dunnett", alternative = "greater", > ##D covar.equal = TRUE) > ## End(Not run) > > ### use sandwich variance matrix > library("sandwich") > g <- glht(mmm(Thromb = m1, ADP = m2, TRAP = m3), + mlf(mcp(Group = "Dunnett")), + alternative = "greater", vcov = sandwich) > summary(g) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>z) Thromb: B - S <= 0 0.12170 0.08719 1.396 0.2728 Thromb: H - S <= 0 0.04351 0.09814 0.443 0.7190 ADP: B - S <= 0 0.21211 0.07664 2.767 0.0135 * ADP: H - S <= 0 0.08422 0.06749 1.248 0.3358 TRAP: B - S <= 0 0.10525 0.13590 0.774 0.5644 TRAP: H - S <= 0 0.07109 0.13909 0.511 0.6892 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > confint(g) Simultaneous Confidence Intervals Fit: NULL Quantile = -2.2714 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr Thromb: B - S <= 0 0.12170 -0.07633 Inf Thromb: H - S <= 0 0.04351 -0.17941 Inf ADP: B - S <= 0 0.21211 0.03802 Inf ADP: H - S <= 0 0.08422 -0.06907 Inf TRAP: B - S <= 0 0.10525 -0.20344 Inf TRAP: H - S <= 0 0.07109 -0.24483 Inf > > ### attitude towards science data > data("mn6.9", package = "TH.data") > > ### one model for each item > mn6.9.y1 <- glm(y1 ~ group, family = binomial(), + na.action = na.omit, data = mn6.9) > mn6.9.y2 <- glm(y2 ~ group, family = binomial(), + na.action = na.omit, data = mn6.9) > mn6.9.y3 <- glm(y3 ~ group, family = binomial(), + na.action = na.omit, data = mn6.9) > mn6.9.y4 <- glm(y4 ~ group, family = binomial(), + na.action = na.omit, data = mn6.9) > > ### test all parameters simulaneously > summary(glht(mmm(mn6.9.y1, mn6.9.y2, mn6.9.y3, mn6.9.y4), + mlf(diag(2)))) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) mn6.9.y1: 1 == 0 1.47323 0.06649 22.156 <1e-04 *** mn6.9.y1: 2 == 0 0.14833 0.09638 1.539 0.5806 mn6.9.y2: 1 == 0 -1.38713 0.06476 -21.419 <1e-04 *** mn6.9.y2: 2 == 0 -0.19598 0.09455 -2.073 0.2331 mn6.9.y3: 1 == 0 0.44024 0.05306 8.298 <1e-04 *** mn6.9.y3: 2 == 0 -0.37449 0.07417 -5.049 <1e-04 *** mn6.9.y4: 1 == 0 0.16537 0.05197 3.182 0.0108 * mn6.9.y4: 2 == 0 -0.37132 0.07357 -5.047 <1e-04 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > ### group differences > summary(glht(mmm(mn6.9.y1, mn6.9.y2, mn6.9.y3, mn6.9.y4), + mlf("group2 = 0"))) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) mn6.9.y1: group2 == 0 0.14833 0.09638 1.539 0.409 mn6.9.y2: group2 == 0 -0.19598 0.09455 -2.073 0.144 mn6.9.y3: group2 == 0 -0.37449 0.07417 -5.049 <1e-04 *** mn6.9.y4: group2 == 0 -0.37132 0.07357 -5.047 <1e-04 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > ### alternative analysis of Klingenberg & Satopaa (2013), > ### Simultaneous Confidence Intervals for Comparing Margins of > ### Multivariate Binary Data, CSDA, 64, 87-98 > ### http://dx.doi.org/10.1016/j.csda.2013.02.016 > > ### see supplementary material for data description > ### NOTE: this is not the real data but only a subsample > influenza <- structure(list( + HEADACHE = c(1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, + 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, + 1L, 1L), MALAISE = c(0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, + 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, + 0L), PYREXIA = c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, + 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L + ), ARTHRALGIA = c(0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, + 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L + ), group = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, + 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L), .Label = c("pla", "trt"), class = "factor"), Freq = c(32L, + 165L, 10L, 23L, 3L, 1L, 4L, 2L, 4L, 2L, 1L, 1L, 1L, 1L, 167L, + 1L, 11L, 37L, 7L, 7L, 5L, 3L, 3L, 1L, 2L, 4L, 2L)), .Names = c("HEADACHE", + "MALAISE", "PYREXIA", "ARTHRALGIA", "group", "Freq"), row.names = c(1L, + 2L, 3L, 5L, 9L, 36L, 43L, 50L, 74L, 83L, 139L, 175L, 183L, 205L, + 251L, 254L, 255L, 259L, 279L, 281L, 282L, 286L, 302L, 322L, 323L, + 366L, 382L), class = "data.frame") > influenza <- influenza[rep(1:nrow(influenza), influenza$Freq), 1:5] > > ### Fitting marginal logistic regression models > (head_logreg <- glm(HEADACHE ~ group, data = influenza, + family = binomial())) Call: glm(formula = HEADACHE ~ group, family = binomial(), data = influenza) Coefficients: (Intercept) grouptrt -0.8664 -0.1384 Degrees of Freedom: 499 Total (i.e. Null); 498 Residual Null Deviance: 594.8 Residual Deviance: 594.3 AIC: 598.3 > (mala_logreg <- glm(MALAISE ~ group, data = influenza, + family = binomial())) Call: glm(formula = MALAISE ~ group, family = binomial(), data = influenza) Coefficients: (Intercept) grouptrt -1.9551 0.4114 Degrees of Freedom: 499 Total (i.e. Null); 498 Residual Null Deviance: 422.7 Residual Deviance: 420 AIC: 424 > (pyre_logreg <- glm(PYREXIA ~ group, data = influenza, + family = binomial())) Call: glm(formula = PYREXIA ~ group, family = binomial(), data = influenza) Coefficients: (Intercept) grouptrt -2.389 -1.158 Degrees of Freedom: 499 Total (i.e. Null); 498 Residual Null Deviance: 215.8 Residual Deviance: 208.1 AIC: 212.1 > (arth_logreg <- glm(ARTHRALGIA ~ group, data = influenza, + family = binomial())) Call: glm(formula = ARTHRALGIA ~ group, family = binomial(), data = influenza) Coefficients: (Intercept) grouptrt -2.6178 -0.1337 Degrees of Freedom: 499 Total (i.e. Null); 498 Residual Null Deviance: 237.8 Residual Deviance: 237.7 AIC: 241.7 > > ### Simultaneous inference for log-odds > xy.sim <- glht(mmm(head = head_logreg, + mala = mala_logreg, + pyre = pyre_logreg, + arth = arth_logreg), + mlf("grouptrt = 0")) > summary(xy.sim) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) head: grouptrt == 0 -0.1384 0.1990 -0.695 0.9181 mala: grouptrt == 0 0.4114 0.2538 1.621 0.3355 pyre: grouptrt == 0 -1.1580 0.4460 -2.596 0.0358 * arth: grouptrt == 0 -0.1337 0.3661 -0.365 0.9918 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > confint(xy.sim) Simultaneous Confidence Intervals Fit: NULL Quantile = 2.4749 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr head: grouptrt == 0 -0.13837 -0.63078 0.35403 mala: grouptrt == 0 0.41140 -0.21669 1.03948 pyre: grouptrt == 0 -1.15795 -2.26187 -0.05404 arth: grouptrt == 0 -0.13371 -1.03979 0.77237 > > ### Artificial examples > ### Combining linear regression and logistic regression > set.seed(29) > y1 <- rnorm(100) > y2 <- factor(y1 + rnorm(100, sd = .1) > 0) > x1 <- gl(4, 25) > x2 <- runif(100, 0, 10) > > m1 <- lm(y1 ~ x1 + x2) > m2 <- glm(y2 ~ x1 + x2, family = binomial()) > ### Note that the same explanatory variables are considered in both models > ### but the resulting parameter estimates are on 2 different scales > ### (original and log-odds scales) > > ### Simultaneous inference for the same parameter in the 2 model fits > summary(glht(mmm(m1 = m1, m2 = m2), mlf("x12 = 0"))) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) m1: x12 == 0 -0.3537 0.2850 -1.241 0.321 m2: x12 == 0 -0.6409 0.5765 -1.112 0.392 (Adjusted p values reported -- single-step method) > > ### Simultaneous inference for different parameters in the 2 model fits > summary(glht(mmm(m1 = m1, m2 = m2), + mlf(m1 = "x12 = 0", m2 = "x13 = 0"))) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) m1: x12 == 0 -0.3537 0.2850 -1.241 0.362 m2: x13 == 0 -0.8264 0.5824 -1.419 0.270 (Adjusted p values reported -- single-step method) > > ### Simultaneous inference for different and identical parameters in the 2 > ### model fits > summary(glht(mmm(m1 = m1, m2 = m2), + mlf(m1 = c("x12 = 0", "x13 = 0"), m2 = "x13 = 0"))) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) m1: x12 == 0 -0.3537 0.2850 -1.241 0.418 m1: x13 == 0 -0.4220 0.2849 -1.481 0.286 m2: x13 == 0 -0.8264 0.5824 -1.419 0.317 (Adjusted p values reported -- single-step method) > > ### Examples for binomial data > ### Two independent outcomes > y1.1 <- rbinom(100, 1, 0.5) > y1.2 <- rbinom(100, 1, 0.5) > group <- factor(rep(c("A", "B"), 50)) > > m1 <- glm(y1.1 ~ group, family = binomial) > m2 <- glm(y1.2 ~ group, family = binomial) > > summary(glht(mmm(m1 = m1, m2 = m2), + mlf("groupB = 0"))) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) m1: groupB == 0 4.855e-01 4.043e-01 1.201 0.407 m2: groupB == 0 9.356e-16 4.013e-01 0.000 1.000 (Adjusted p values reported -- single-step method) > > ### Two perfectly correlated outcomes > y2.1 <- rbinom(100, 1, 0.5) > y2.2 <- y2.1 > group <- factor(rep(c("A", "B"), 50)) > > m1 <- glm(y2.1 ~ group, family = binomial) > m2 <- glm(y2.2 ~ group, family = binomial) > > summary(glht(mmm(m1 = m1, m2 = m2), + mlf("groupB = 0"))) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) m1: groupB == 0 0.4015 0.4021 0.999 0.318 m2: groupB == 0 0.4015 0.4021 0.999 0.318 (Adjusted p values reported -- single-step method) > > ### use sandwich covariance matrix > summary(glht(mmm(m1 = m1, m2 = m2), + mlf("groupB = 0"), vcov = sandwich)) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) m1: groupB == 0 0.4015 0.4021 0.999 0.318 m2: groupB == 0 0.4015 0.4021 0.999 0.318 (Adjusted p values reported -- single-step method) > > > > > cleanEx() detaching ‘package:sandwich’ > nameEx("parm") > ### * parm > > flush(stderr()); flush(stdout()) > > ### Name: parm > ### Title: Model Parameters > ### Aliases: parm > ### Keywords: misc > > ### ** Examples > > > ## example from > ## Bretz, Hothorn, and Westfall (2002). > ## On multiple comparisons in R. R News, 2(3):14-17. > > beta <- c(V1 = 14.8, V2 = 12.6667, V3 = 7.3333, V4 = 13.1333) > Sigma <- 6.7099 * (diag(1 / c(20, 3, 3, 15))) > confint(glht(model = parm(beta, Sigma, 37), + linfct = c("V2 - V1 >= 0", + "V3 - V1 >= 0", + "V4 - V1 >= 0")), + level = 0.9) Simultaneous Confidence Intervals Fit: NULL Quantile = 1.8433 90% family-wise confidence level Linear Hypotheses: Estimate lwr upr V2 - V1 >= 0 -2.13330 -Inf 0.82288 V3 - V1 >= 0 -7.46670 -Inf -4.51052 V4 - V1 >= 0 -1.66670 -Inf -0.03584 > > > > > cleanEx() > nameEx("plot.cld") > ### * plot.cld > > flush(stderr()); flush(stdout()) > > ### Name: plot.cld > ### Title: Plot a cld object > ### Aliases: plot.cld > ### Keywords: hplot > > ### ** Examples > > > ### multiple comparison procedures > ### set up a one-way ANOVA > data(warpbreaks) > amod <- aov(breaks ~ tension, data = warpbreaks) > ### specify all pair-wise comparisons among levels of variable "tension" > tuk <- glht(amod, linfct = mcp(tension = "Tukey")) > ### extract information > tuk.cld <- cld(tuk) > ### use sufficiently large upper margin > old.par <- par(mai=c(1,1,1.25,1), no.readonly=TRUE) > ### plot > plot(tuk.cld) > par(old.par) > > ### now using covariates > amod2 <- aov(breaks ~ tension + wool, data = warpbreaks) > tuk2 <- glht(amod2, linfct = mcp(tension = "Tukey")) > tuk.cld2 <- cld(tuk2) > old.par <- par(mai=c(1,1,1.25,1), no.readonly=TRUE) > ### use different colors for boxes > plot(tuk.cld2, col=c("green", "red", "blue")) > par(old.par) > > ### get confidence intervals > ci.glht <- confint(tuk) > ### plot them > plot(ci.glht) > old.par <- par(mai=c(1,1,1.25,1), no.readonly=TRUE) > ### use 'confint.glht' object to plot all pair-wise comparisons > plot(cld(ci.glht), col=c("white", "blue", "green")) > par(old.par) > > ### set up all pair-wise comparisons for count data > data(Titanic) > mod <- glm(Survived ~ Class, data = as.data.frame(Titanic), + weights = Freq, family = binomial()) > ### specify all pair-wise comparisons among levels of variable "Class" > glht.mod <- glht(mod, mcp(Class = "Tukey")) > ### extract information > mod.cld <- cld(glht.mod) > ### use sufficiently large upper margin > old.par <- par(mai=c(1,1,1.5,1), no.readonly=TRUE) > ### plot > plot(mod.cld) > par(old.par) > > ### set up all pair-wise comparisons of a Cox-model > if (require("survival") && require("MASS")) { + ### construct 4 classes of age + Melanoma$Cage <- factor(sapply(Melanoma$age, function(x){ + if( x <= 25 ) return(1) + if( x > 25 & x <= 50 ) return(2) + if( x > 50 & x <= 75 ) return(3) + if( x > 75 & x <= 100) return(4) } + )) + ### fit Cox-model + cm <- coxph(Surv(time, status == 1) ~ Cage, data = Melanoma) + ### specify all pair-wise comparisons among levels of "Cage" + cm.glht <- glht(cm, mcp(Cage = "Tukey")) + # extract information & plot + old.par <- par(no.readonly=TRUE) + ### use mono font family + if (dev.interactive()) + old.par <- par(family = "mono") + plot(cld(cm.glht), col=c("black", "red", "blue", "green")) + par(old.par) + } Loading required package: MASS > > if (require("nlme") && require("lme4")) { + data("ergoStool", package = "nlme") + + stool.lmer <- lmer(effort ~ Type + (1 | Subject), + data = ergoStool) + glme41 <- glht(stool.lmer, mcp(Type = "Tukey")) + + old.par <- par(mai=c(1,1,1.5,1), no.readonly=TRUE) + plot(cld(glme41)) + par(old.par) + } Loading required package: nlme Loading required package: lme4 Loading required package: lattice Loading required package: Matrix Attaching package: ‘lme4’ The following object is masked from ‘package:nlme’: lmList > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() detaching ‘package:lme4’, ‘package:Matrix’, ‘package:lattice’, ‘package:nlme’, ‘package:MASS’ > nameEx("recovery") > ### * recovery > > flush(stderr()); flush(stdout()) > > ### Name: recovery > ### Title: Recovery Time Data Set > ### Aliases: recovery > ### Keywords: datasets > > ### ** Examples > > > ### set up one-way ANOVA > amod <- aov(minutes ~ blanket, data = recovery) > > ### set up multiple comparisons: one-sided Dunnett contrasts > rht <- glht(amod, linfct = mcp(blanket = "Dunnett"), + alternative = "less") > > ### cf. Westfall et al. (1999, p. 80) > confint(rht, level = 0.9) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recovery) Quantile = 1.8433 90% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82285 b2 - b0 >= 0 -7.46667 -Inf -4.51048 b3 - b0 >= 0 -1.66667 -Inf -0.03581 > > ### the same > rht <- glht(amod, linfct = mcp(blanket = c("b1 - b0 >= 0", + "b2 - b0 >= 0", + "b3 - b0 >= 0"))) > confint(rht, level = 0.9) Simultaneous Confidence Intervals Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = minutes ~ blanket, data = recovery) Quantile = 1.8429 90% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82222 b2 - b0 >= 0 -7.46667 -Inf -4.51112 b3 - b0 >= 0 -1.66667 -Inf -0.03616 > > > > > cleanEx() > nameEx("trees513") > ### * trees513 > > flush(stderr()); flush(stdout()) > > ### Name: trees513 > ### Title: Frankonian Tree Damage Data > ### Aliases: trees513 > ### Keywords: datasets > > ### ** Examples > > > summary(trees513) damage species lattice plot yes: 448 oak :1258 1 : 75 10_1 : 15 no :2252 pine : 823 2 : 75 10_2 : 15 beech : 266 3 : 75 10_3 : 15 hardwood (other) : 191 7 : 75 10_4 : 15 spruce : 119 9 : 75 10_5 : 15 ash/maple/elm/lime: 30 10 : 75 1_1 : 15 (Other) : 13 (Other):2250 (Other):2610 > > > > > cleanEx() > nameEx("waste") > ### * waste > > flush(stderr()); flush(stdout()) > > ### Name: waste > ### Title: Industrial Waste Data Set > ### Aliases: waste > ### Keywords: datasets > > ### ** Examples > > > ### set up two-way ANOVA with interactions > amod <- aov(waste ~ temp * envir, data=waste) > > ### comparisons of main effects only > K <- glht(amod, linfct = mcp(temp = "Tukey"))$linfct Warning in mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > K (Intercept) templow tempmedium envirenv2 envirenv3 envirenv4 low - high 0 1 0 0 0 0 medium - high 0 0 1 0 0 0 medium - low 0 -1 1 0 0 0 envirenv5 templow:envirenv2 tempmedium:envirenv2 low - high 0 0 0 medium - high 0 0 0 medium - low 0 0 0 templow:envirenv3 tempmedium:envirenv3 templow:envirenv4 low - high 0 0 0 medium - high 0 0 0 medium - low 0 0 0 tempmedium:envirenv4 templow:envirenv5 tempmedium:envirenv5 low - high 0 0 0 medium - high 0 0 0 medium - low 0 0 0 attr(,"type") [1] "Tukey" > glht(amod, K) General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate low - high == 0 -1.26 medium - high == 0 -1.34 medium - low == 0 -0.08 > > ### comparisons of means (by averaging interaction effects) > low <- grep("low:envi", colnames(K)) > med <- grep("medium:envi", colnames(K)) > K[1, low] <- 1 / (length(low) + 1) > K[2, med] <- 1 / (length(low) + 1) > K[3, med] <- 1 / (length(low) + 1) > K[3, low] <- - 1 / (length(low) + 1) > K (Intercept) templow tempmedium envirenv2 envirenv3 envirenv4 low - high 0 1 0 0 0 0 medium - high 0 0 1 0 0 0 medium - low 0 -1 1 0 0 0 envirenv5 templow:envirenv2 tempmedium:envirenv2 low - high 0 0.2 0.0 medium - high 0 0.0 0.2 medium - low 0 -0.2 0.2 templow:envirenv3 tempmedium:envirenv3 templow:envirenv4 low - high 0.2 0.0 0.2 medium - high 0.0 0.2 0.0 medium - low -0.2 0.2 -0.2 tempmedium:envirenv4 templow:envirenv5 tempmedium:envirenv5 low - high 0.0 0.2 0.0 medium - high 0.2 0.0 0.2 medium - low 0.2 -0.2 0.2 attr(,"type") [1] "Tukey" > confint(glht(amod, K)) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Quantile = 2.5984 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr low - high == 0 -2.0150 -3.2745 -0.7555 medium - high == 0 -2.2560 -3.5155 -0.9965 medium - low == 0 -0.2410 -1.5005 1.0185 > > ### same as TukeyHSD > TukeyHSD(amod, "temp") Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = waste ~ temp * envir, data = waste) $temp diff lwr upr p adj low-high -2.015 -3.274054 -0.7559457 0.0022853 medium-high -2.256 -3.515054 -0.9969457 0.0008562 medium-low -0.241 -1.500054 1.0180543 0.8737275 > > ### set up linear hypotheses for all-pairs of both factors > wht <- glht(amod, linfct = mcp(temp = "Tukey", envir = "Tukey")) Warning in mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate Warning in mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > ### cf. Westfall et al. (1999, page 181) > summary(wht, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) temp: low - high == 0 -1.260 1.084 -1.162 1.000 temp: medium - high == 0 -1.340 1.084 -1.236 1.000 temp: medium - low == 0 -0.080 1.084 -0.074 1.000 envir: env2 - env1 == 0 1.830 1.084 1.688 0.784 envir: env3 - env1 == 0 1.330 1.084 1.227 1.000 envir: env4 - env1 == 0 3.805 1.084 3.511 0.041 * envir: env5 - env1 == 0 3.660 1.084 3.377 0.041 * envir: env3 - env2 == 0 -0.500 1.084 -0.461 1.000 envir: env4 - env2 == 0 1.975 1.084 1.822 0.619 envir: env5 - env2 == 0 1.830 1.084 1.688 0.619 envir: env4 - env3 == 0 2.475 1.084 2.283 0.337 envir: env5 - env3 == 0 2.330 1.084 2.150 0.337 envir: env5 - env4 == 0 -0.145 1.084 -0.134 1.000 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > > > > > ### *