multcomp/0000755000176200001440000000000013200635404012107 5ustar liggesusersmultcomp/inst/0000755000176200001440000000000013200577146013074 5ustar liggesusersmultcomp/inst/CITATION0000644000176200001440000000137611471214260014231 0ustar liggesusers 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/0000755000176200001440000000000012437105401015164 5ustar liggesusersmultcomp/inst/deprecated/multcomp-oldtests.Rout.save0000644000176200001440000004253111471214242022501 0ustar liggesusers 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.Rd0000644000176200001440000001032311471214242021411 0ustar liggesusers\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.R0000644000176200001440000001302311471214242017407 0ustar liggesusers 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.R0000644000176200001440000001525111471214242021013 0ustar liggesusersattach(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/NEWS0000644000176200001440000002676113200561023013572 0ustar liggesusers Changes in 1.4-8 (2017-11-08) o use vcov(x, complete = FALSE) to make R-devel happy again. Changes in 1.4-7 (2017-09-05) o Don't add attributes to symbols when parsing character representations of contrasts. Many thanks to Tomas Kalibera for the patch. Changes in 1.4-6 (2016-07-14) o allow for strata and cluster in coxph and survreg models. o use \code{model.matrix} and \code{model.frame} from survival for \code{coxph}, \code{survreg} and also \code{coxme} objects now these come with contrasts. o fix another problem with interaction terms (signed interactions -x2:x3) Changes in 1.4-5 (2016-05-04) o fix bug in linfct specified as a character (aka expression). Coefficients of main effects may have been incorrect in the presence of interaction terms as reported by Melissa Chester Key Changes in 1.4-4 (2016-01-17) o make cftest() a little more flexible with parm and test arguments Changes in 1.4-3 (2016-01-02) o update Rout.save to mvtnorm 1.0-5 Changes in 1.4-2 (2016-01-19) o update Rout.save to mvtnorm 1.0-4 Changes in 1.4-1 (2015-07-21) o new qmv{t,norm} algorithm in mvtnorm 1.0-3 leads to slightly different quantiles and thus results for confidence intervals; update output Changes in 1.4-0 (2015-03-05) o much more complex functions of parameters can be specified now thanks to Susan Scheibe now listed as a contributor. Changes in 1.3-9 (2015-02-18) o allow longer names of contrasts (patch by Susan Scheibe ) Changes in 1.3-8 (2014-12-01) o report pmv{t,norm}() warnings (spotted by Christian Ritz) Changes in 1.3-7 (2014-10-01) o bodyfat is in TH.data and not mboost anymore Changes in 1.3-6 (2014-08-18) o make sure to use fixef from lme4 Changes in 1.3-5 (2014-07-23) o allow coefficients and covariance matrices to be fed into modelparm via coef. and vcov. directly Changes in 1.3-4 (2014-07-09) o suggest ISwR (for demo()) o NEWS in correct NEWs format Changes in 1.3-3 (2014-04-22) o do not link to non-suggested packages Changes in 1.3-2 (2014-02-12) o import TH.data, update Rout.save Changes in 1.3-1 (2013-11-01) o remove multmod Changes in 1.3-0 (2013-07-13) o new glht method for multiple marginal models and corresponding linear functions implements Pipper, Ritz, Bisgaard (2012), see ?mmm Changes in 1.2-21 (2013-09-20) 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 1.2-20 (2013-09-02) o make sure to use par(no.readonly = TRUE) TH.data Changes in 1.2-19 (2013-08-06) o fix broken vignette PDFs Changes in 1.2-18 (2013-05-17) o improve plotting one-sided confidence intervals Changes in 1.2-17 (2013-05-15) o fix typo in DESCRIPTION file o allow for levels with "-" and other special symbols for cld() o fix cld(..., decreasing = TRUE) problem (thanks to Luciano Selzer) Changes in 1.2-15 (2013-01-12) o fix DESCRIPTION file entries Changes in 1.2-14 (2012-10-11) o catch download errors in vignette Changes in 1.2-13 (2012-09-10) o interaction terms can now be part of linear function Changes in 1.2-12 (2012-05-09) o model.matrix.polr returns intercept which needs to be removed o handle merMod objects (package lme4 aka lme4Eigen) Changes in 1.2-10 (2012-02-17) o handle polr objects in package, not only in vignette o move vignettes Changes in 1.2-9 (2012-01-11) o new coxme methods Changes in 1.2-8 (2011-10-26) o new argument `decreasing' for cld(), code donated by Luciano Selzer Changes in 1.2-7 (2011-07-23) o new examples on 2-way ANOVA models, potentially with interactions, in vignette `multcomp-examples' Changes in 1.2-6 (2011-05-02) o `manual' na.omit before stepAIC is called in chfls1.Rnw vignette o use lmrob.control(setting = "KS2011") in generalsiminf.Rnw Changes in 1.2-5 (2011-01-10) o missing comment in multcomp_VA.R Changes in 1.2-4 (2010-11-03) o fix problem with plot.glht (lwd = 0 does not make sense) Changes in 1.2-3 (2010-09-24) o new example on frailty models, see ?cml Changes in 1.2-2 (2010-09-15) o fix dependencies, really o add book to DESCRIPTION file Changes in 1.2-1 (2010-09-13) o fix dependencies Changes in 1.2-0 (2010-08-11) o demos for "Multiple Comparisons Using R" by Bretz, Hothorn & Westfall (2010) o example on simultaneous tests against one- and two-sided alternatives in ?glht. Changes in 1.1-7 (2010-05-18) o mix of alternatives is currently not supported and also mcp() gives and error now. Changes in 1.1-6 (2010-02-25) 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 1.1-5 (2010-02-11) o fix small problems in `cld' spotted by Peter B. Mandeville Changes in 1.1-4 (2010-01-21) o more example data sets Changes in 1.1-3 (2009-12-21) 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 1.1-2 (2009-09-10) o mcp may average over interactions and covariates (Experimental!) o ylim argument to plot o update to survival 2.35-7 Changes in 1.1-1 (2009-07-18) o better handling of model.frames in `cld' Changes in 1.1-0 (2009-06-08) o new compact letter displays o force binary mode when downloading SPSS data files Changes in 1.0-8 (2009-05-26)) o new vignette containing supplementary material for a letter on Pollet \& Nettle (2009, Evolution and Human Behavior) o references updated Changes in 1.0-7 (2009-02-11) 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 1.0-6 (2009-01-21) o better names for p-values (feature request by Achim Zeileis) Changes in 1.0-5 (2009-01-13) o update vignette Changes in 1.0-4 (2009-01-07) o fix Rd problems Changes in 1.0-3 (2008-10-15) 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 1.0-2 (2008-07-05) o use new model.matrix / model.frame methods for class mer in lme4 (>= 0.999375-16) 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 1.0-0 (2008-04-01) o unify both vignettes o mcp() doesn't try to take care of interaction terms anymore 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 0.993-2 (2008-03-05)) 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 0.993-1 (2008-03-05) o new vignette `Simultaneous Inference in General Parametric Models' o warn if ... arguments are ignored o levels in trees513 data slightly changed. 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 0.992-8 (2007-12-20) o add model.frame and model.matrix methods for class `lme' (feature request by Antonio Rausell ) o new data set `trees513' o new contrasts `UmbrellaWilliams' and `GrandMean' (thanks to Daniel Gerhard ) Changes in 0.992-6 (2007-10-18)) 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 0.992-5 (2007-10-08) o remove non_function entries in Rd files Changes in 0.992-4 (2007-07-23) o update to mvtnorm 0.8-0 o better support for `mer', `lmer' and `glmer' objects (package `lme4') Changes in 0.992-2 (2007-07-07) o add support for `lme' objects (feature request by John Wilkinson and Dieter Menne ) Changes in 0.992-1 (2007-06-21) o fix LaTeX problem in vignette (spotted by Brian D. Ripley) Changes in 0.991-9 (2007-03-23) o fix some minor problems spotted for plotting or printing of confidence intervals (thanks for Rich Heiberger and Ludwig Hothorn) Changes in 0.991-8 (2007-01-22) 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 0.991-7 (2006-12-19) 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 0.991-5 (2006-12-10) o plot.confint allows for specification of xlim, xlab and main (patch by Rich Heiberger) Changes in 0.991-4 (2006-12-07) 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 0.991-3 (2006-11-30) 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 0.991-2 (2006-10-27) o mcp(fact = K) with K = contrMat(...) didn't work spotted by Yves Brostaux multcomp/inst/MCMT/0000755000176200001440000000000012437105401013624 5ustar liggesusersmultcomp/inst/MCMT/MCMT.Rout0000644000176200001440000016762612240416645015270 0ustar liggesusers 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. [Previously saved workspace restored] > > ################################################################ > # > # 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 Loading required package: survival Loading required package: splines Attaching package: ‘survival’ The following object is masked _by_ ‘.GlobalEnv’: heart Loading required package: TH.data Attaching package: ‘multcomp’ The following objects are masked _by_ ‘.GlobalEnv’: cholesterol, detergent, litter, waste > 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 Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = wloss ~ diet, data = wloss) Quantile = 2.8415 95% family-wise confidence level 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 > > 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 Fit: aov(formula = wloss ~ diet - 1, data = wloss) Quantile = 2.6758 95% family-wise confidence level 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 > > > ### 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 Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = gain ~ g, data = tox) Quantile = 2.7894 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr g1 - g0 == 0 -9.4800 -38.0628 19.1028 g2 - g0 == 0 -24.9000 -53.4828 3.6828 g3 - g0 == 0 -33.2400 -61.8228 -4.6572 g4 - g0 == 0 -13.5000 -42.0828 15.0828 g5 - g0 == 0 -20.7000 -49.2828 7.8828 g6 - g0 == 0 -31.1400 -59.7228 -2.5572 > > # page 59 -- OK > gh <- glht(amod, mcp(g = "Dunnett"), alternative = "less") > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = gain ~ g, data = tox) Quantile = 2.448 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr g1 - g0 >= 0 -9.4800 -Inf 15.6052 g2 - g0 >= 0 -24.9000 -Inf 0.1852 g3 - g0 >= 0 -33.2400 -Inf -8.1548 g4 - g0 >= 0 -13.5000 -Inf 11.5852 g5 - g0 >= 0 -20.7000 -Inf 4.3852 g6 - g0 >= 0 -31.1400 -Inf -6.0548 > > > ### 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 Pr(>|t|) linear == 0 43.974 18.109 2.428 0.0590 . 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 -- single-step method) > > > ### 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 Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Quantile = 2.6546 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 == 0 -2.1333 -6.3908 2.1241 b2 - b0 == 0 -7.4667 -11.7241 -3.2092 b3 - b0 == 0 -1.6667 -4.0154 0.6821 b2 - b1 == 0 -5.3333 -10.9479 0.2812 b3 - b1 == 0 0.4667 -3.8823 4.8157 b3 - b2 == 0 5.8000 1.4510 10.1490 > > # 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 Pr(>|t|) b1 - b0 == 0 -2.1333 1.6038 -1.330 0.53287 b2 - b0 == 0 -7.4667 1.6038 -4.656 < 0.001 *** b3 - b0 == 0 -1.6667 0.8848 -1.884 0.23839 b2 - b1 == 0 -5.3333 2.1150 -2.522 0.06707 . b3 - b1 == 0 0.4667 1.6383 0.285 0.99120 b3 - b2 == 0 5.8000 1.6383 3.540 0.00523 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > gh <- glht(amod, mcp(blanket = "Dunnett")) > > # page 78 -- OK > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Quantile = 2.4884 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 == 0 -2.1333 -6.1241 1.8575 b2 - b0 == 0 -7.4667 -11.4575 -3.4759 b3 - b0 == 0 -1.6667 -3.8683 0.5350 > > # 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 Pr(>|t|) 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 -- single-step method) > > gh <- glht(amod, mcp(blanket = "Dunnett"), alternative = "less") > > # page 80 -- OK > confint(gh, level = 0.9) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Quantile = 1.8428 90% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82218 b2 - b0 >= 0 -7.46667 -Inf -4.51115 b3 - b0 >= 0 -1.66667 -Inf -0.03618 > > # 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 Pr(= 0 -2.1333 1.6038 -1.330 0.2411 b2 - b0 >= 0 -7.4667 1.6038 -4.656 <0.001 *** b3 - b0 >= 0 -1.6667 0.8848 -1.884 0.0924 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > # 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 Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Quantile = 2.795 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr B - A == 0 -22.2032 -27.8200 -16.5864 C - A == 0 -21.5285 -30.7668 -12.2903 D - A == 0 -26.0152 -32.8403 -19.1901 E - A == 0 -29.0893 -35.6444 -22.5343 C - B == 0 0.6747 -9.0560 10.4054 D - B == 0 -3.8120 -11.0966 3.4726 E - B == 0 -6.8861 -14.0887 0.3164 D - C == 0 -4.4867 -14.9241 5.9506 E - C == 0 -7.5608 -17.7255 2.6039 E - D == 0 -3.0741 -11.1241 4.9759 > > # 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 Pr(>|t|) 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.0674 . D - C == 0 -4.4867 3.7343 -1.201 0.7416 E - C == 0 -7.5608 3.6367 -2.079 0.2342 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 -- single-step method) > 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 Pr(>|t|) 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.84703 D - B == 0 -3.8120 2.6063 -1.463 0.14906 E - B == 0 -6.8861 2.5769 -2.672 0.00981 ** D - C == 0 -4.4867 3.7343 -1.201 0.23453 E - C == 0 -7.5608 3.6367 -2.079 0.04213 * E - D == 0 -3.0741 2.8802 -1.067 0.29032 --- 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 Pr(= 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 -- single-step method) > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = w4 ~ ., data = ratgrwth) Quantile = 2.06 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr Thiouracil - Control >= 0 -9.4583 -Inf -2.6036 Thyroxin - Control >= 0 -2.1128 -Inf 4.4699 > > > ### 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 -- default contrast might be inappropriate > > ### choose comparisons at since = 10 > gh$linfct[,8:11] <- gh$linfct[,8:11] * 10 > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = score ~ therapy * since + age, data = alz) Quantile = 2.8023 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 6.1152 -8.6696 20.9000 t3 - t1 == 0 0.6661 -22.5825 23.9147 t4 - t1 == 0 31.4191 13.8723 48.9658 t5 - t1 == 0 44.6310 13.5089 75.7532 t3 - t2 == 0 -5.4491 -29.0470 18.1487 t4 - t2 == 0 25.3039 7.1338 43.4739 t5 - t2 == 0 38.5158 7.1727 69.8590 t4 - t3 == 0 30.7530 5.0327 56.4733 t5 - t3 == 0 43.9650 8.7868 79.1432 t5 - t4 == 0 13.2120 -19.8816 46.3055 > > > > ### 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 Pr(>|t|) 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 Pr(>t) 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 Pr(>t) cont-low <= 0 3.3524 1.2908 2.597 0.0207 * cont-mid <= 0 2.2909 1.3384 1.712 0.1376 cont-high <= 0 2.6752 1.3343 2.005 0.0786 . otrend <= 0 1.7411 1.0433 1.669 0.1484 atrend <= 0 0.8712 1.1322 0.770 0.5012 ltrend <= 0 1.9400 0.9616 2.018 0.0769 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Quantile = -2.2207 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr cont-low <= 0 3.3524 0.4860 Inf cont-mid <= 0 2.2909 -0.6813 Inf cont-high <= 0 2.6752 -0.2878 Inf otrend <= 0 1.7411 -0.5759 Inf atrend <= 0 0.8712 -1.6429 Inf ltrend <= 0 1.9400 -0.1953 Inf > > # 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 Pr(>t) cont-low <= 0 3.3524 1.2908 2.597 0.0207 * 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 Fit: lm(formula = price ~ sqfeet, data = houseA) Quantile = 2.5857 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr sqfeet * 1000 == 0 73.4435 63.8834 83.0037 sqfeet * 1200 == 0 81.4959 73.7603 89.2315 sqfeet * 1400 == 0 89.5483 83.5316 95.5649 sqfeet * 1600 == 0 97.6006 93.0756 102.1256 sqfeet * 1800 == 0 105.6530 102.0938 109.2122 sqfeet * 2000 == 0 113.7054 110.1310 117.2797 sqfeet * 2200 == 0 121.7577 117.1970 126.3184 sqfeet * 2400 == 0 129.8101 123.7487 135.8715 sqfeet * 2600 == 0 137.8625 130.0781 145.6468 sqfeet * 2800 == 0 145.9148 136.3040 155.5257 sqfeet * 3000 == 0 153.9672 142.4756 165.4588 > > > ### 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 Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Quantile = 2.6475 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr 10 == 0 -4.10667 -6.52736 -1.68598 15 == 0 -3.45389 -5.59418 -1.31360 20 == 0 -2.80111 -4.68112 -0.92110 25 == 0 -2.14833 -3.79776 -0.49891 30 == 0 -1.49556 -2.95818 -0.03293 35 == 0 -0.84278 -2.18087 0.49531 40 == 0 -0.19000 -1.48391 1.10391 45 == 0 0.46278 -0.87531 1.80087 50 == 0 1.11556 -0.34707 2.57818 55 == 0 1.76833 0.11891 3.41776 60 == 0 2.42111 0.54110 4.30112 65 == 0 3.07389 0.93360 5.21418 70 == 0 3.72667 1.30598 6.14736 > 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 Pr(>|t|) 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 Pr(>|t|) 10 == 0 -4.1067 0.9143 -4.492 0.00125 ** 15 == 0 -3.4539 0.8084 -4.272 0.00201 ** 20 == 0 -2.8011 0.7101 -3.945 0.00383 ** 25 == 0 -2.1483 0.6230 -3.448 0.01042 * 30 == 0 -1.4956 0.5524 -2.707 0.04470 * 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.65303 50 == 0 1.1156 0.5524 2.019 0.15260 55 == 0 1.7683 0.6230 2.838 0.03479 * 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.00294 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > > ### 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 Pr(>|t|) 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 Pr(>|t|) 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 Pr(>|t|) 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 Pr(>|t|) 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 Pr(>|t|) 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 Pr(>|t|) 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 Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Quantile = 2.5956 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 -0.0800 -2.8934 2.7334 t3 - t1 == 0 1.2600 -1.5534 4.0734 t3 - t2 == 0 1.3400 -1.4734 4.1534 Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > confint(glht(amod, linfct = mcp(envir = "Tukey"))) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Quantile = 3.0877 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr e2 - e1 == 0 2.0500 -1.2966 5.3966 e3 - e1 == 0 3.0450 -0.3016 6.3916 e4 - e1 == 0 0.0850 -3.2616 3.4316 e5 - e1 == 0 1.6700 -1.6766 5.0166 e3 - e2 == 0 0.9950 -2.3516 4.3416 e4 - e2 == 0 -1.9650 -5.3116 1.3816 e5 - e2 == 0 -0.3800 -3.7266 2.9666 e4 - e3 == 0 -2.9600 -6.3066 0.3866 e5 - e3 == 0 -1.3750 -4.7216 1.9716 e5 - e4 == 0 1.5850 -1.7616 4.9316 Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > gh <- glht(amod, linfct = mcp(envir = "Tukey", temp = "Tukey")) Warning messages: 1: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate 2: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > # 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 Pr(>|t|) envir: e2 - e1 == 0 2.050 1.084 1.891 0.0780 . envir: e3 - e1 == 0 3.045 1.084 2.809 0.0132 * envir: e4 - e1 == 0 0.085 1.084 0.078 0.9385 envir: e5 - e1 == 0 1.670 1.084 1.541 0.1442 envir: e3 - e2 == 0 0.995 1.084 0.918 0.3731 envir: e4 - e2 == 0 -1.965 1.084 -1.813 0.0899 . envir: e5 - e2 == 0 -0.380 1.084 -0.351 0.7308 envir: e4 - e3 == 0 -2.960 1.084 -2.731 0.0155 * envir: e5 - e3 == 0 -1.375 1.084 -1.269 0.2239 envir: e5 - e4 == 0 1.585 1.084 1.462 0.1643 temp: t2 - t1 == 0 -0.080 1.084 -0.074 0.9421 temp: t3 - t1 == 0 1.260 1.084 1.162 0.2632 temp: t3 - t2 == 0 1.340 1.084 1.236 0.2354 --- 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 Pr(>|t|) envir: e2 - e1 == 0 2.050 1.084 1.891 0.702 envir: e3 - e1 == 0 3.045 1.084 2.809 0.172 envir: e4 - e1 == 0 0.085 1.084 0.078 1.000 envir: e5 - e1 == 0 1.670 1.084 1.541 1.000 envir: e3 - e2 == 0 0.995 1.084 0.918 1.000 envir: e4 - e2 == 0 -1.965 1.084 -1.813 0.702 envir: e5 - e2 == 0 -0.380 1.084 -0.351 1.000 envir: e4 - e3 == 0 -2.960 1.084 -2.731 0.172 envir: e5 - e3 == 0 -1.375 1.084 -1.269 1.000 envir: e5 - e4 == 0 1.585 1.084 1.462 1.000 temp: t2 - t1 == 0 -0.080 1.084 -0.074 1.000 temp: t3 - t1 == 0 1.260 1.084 1.162 1.000 temp: t3 - t2 == 0 1.340 1.084 1.236 1.000 (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 Pr(>|t|) envir: e2 - e1 == 0 2.050 1.084 1.891 0.365 envir: e3 - e1 == 0 3.045 1.084 2.809 0.105 envir: e4 - e1 == 0 0.085 1.084 0.078 0.995 envir: e5 - e1 == 0 1.670 1.084 1.541 0.533 envir: e3 - e2 == 0 0.995 1.084 0.918 0.721 envir: e4 - e2 == 0 -1.965 1.084 -1.813 0.365 envir: e5 - e2 == 0 -0.380 1.084 -0.351 0.976 envir: e4 - e3 == 0 -2.960 1.084 -2.731 0.105 envir: e5 - e3 == 0 -1.375 1.084 -1.269 0.711 envir: e5 - e4 == 0 1.585 1.084 1.462 0.533 temp: t2 - t1 == 0 -0.080 1.084 -0.074 0.995 temp: t3 - t1 == 0 1.260 1.084 1.162 0.711 temp: t3 - t2 == 0 1.340 1.084 1.236 0.711 (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 Pr(>|t|) 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 Pr(>|t|) 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 Pr(>|t|) 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.134 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.134 temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.134 (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 Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ drug * disease, data = drug) Quantile = 2.6632 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr d2 - d1 == 0 -1.3333 -18.2815 15.6148 d3 - d1 == 0 -13.0000 -32.7912 6.7912 d4 - d1 == 0 -15.7333 -32.6815 1.2148 d3 - d2 == 0 -11.6667 -32.1069 8.7736 d4 - d2 == 0 -14.4000 -32.1018 3.3018 d4 - d3 == 0 -2.7333 -23.1736 17.7069 Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > > ### 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 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 d2 - d1 == 0 -2.1333 -4.7926 0.5259 d3 - d1 == 0 3.6000 0.9407 6.2593 d4 - d1 == 0 2.2000 -0.4593 4.8593 d5 - d1 == 0 -4.3333 -6.9926 -1.6741 d3 - d2 == 0 5.7333 3.0741 8.3926 d4 - d2 == 0 4.3333 1.6741 6.9926 d5 - d2 == 0 -2.2000 -4.8593 0.4593 d4 - d3 == 0 -1.4000 -4.0593 1.2593 d5 - d3 == 0 -7.9333 -10.5926 -5.2741 d5 - d4 == 0 -6.5333 -9.1926 -3.8741 > > # 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 Pr(>|t|) 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 Pr(>|t|) 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.000531 *** 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 Pr(>|t|) d2 - d1 == 0 -2.1333 0.8679 -2.458 0.05002 . d3 - d1 == 0 3.6000 0.8679 4.148 0.00283 ** 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)) Warning messages: 1: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate 2: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > 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 Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Quantile = 2.7781 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr feed: f2 - f1 == 0 -0.30153 -1.19808 0.59502 feed: f3 - f1 == 0 -0.62490 -1.51104 0.26124 feed: f3 - f2 == 0 -0.32337 -1.23010 0.58337 F-M == 0 0.29931 -0.59950 1.19812 initial == 0 0.08888 0.02242 0.15533 > > # 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 Pr(>|t|) feed: f2 - f1 == 0 -0.30153 0.32272 -0.934 0.36186 feed: f3 - f1 == 0 -0.62490 0.31898 -1.959 0.06495 . feed: f3 - f2 == 0 -0.32337 0.32639 -0.991 0.33426 F-M == 0 0.29931 0.32354 0.925 0.36651 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 Pr(>|t|) feed: f2 - f1 == 0 -0.30153 0.32272 -0.934 0.72371 feed: f3 - f1 == 0 -0.62490 0.31898 -1.959 0.25978 feed: f3 - f2 == 0 -0.32337 0.32639 -0.991 0.66852 F-M == 0 0.29931 0.32354 0.925 0.72371 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 Pr(>|t|) feed: f2 - f1 == 0 -0.30153 0.32272 -0.934 0.55422 feed: f3 - f1 == 0 -0.62490 0.31898 -1.959 0.18910 feed: f3 - f2 == 0 -0.32337 0.32639 -0.991 0.55048 F-M == 0 0.29931 0.32354 0.925 0.55422 initial == 0 0.08888 0.02392 3.715 0.00669 ** --- 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 Pr(>t) 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 Pr(>t) 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 Pr(>t) 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.0487 * 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.0487 * Young x Good <= 0 -0.1045 0.4194 -0.249 0.5982 Young x Poor <= 0 0.8696 0.3788 2.296 0.0487 * --- 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: lattice Loading required package: Matrix > lmod <- lmer(wloss ~ diet + (1 | i), data = wloss, model = TRUE) Warning message: In checkArgs("lmer", model = TRUE) : extra argument(s) ‘model’ disregarded > > gh <- glht(lmod, mcp(diet = "Tukey")) > > # page 205 -- FIXME: df??? > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = wloss ~ diet + (1 | i), data = wloss, model = TRUE) Quantile = 2.7282 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr B - A == 0 -1.030000 -2.188551 0.128551 C - A == 0 -1.780000 -2.938551 -0.621449 D - A == 0 -2.780000 -3.938551 -1.621449 E - A == 0 0.120000 -1.038551 1.278551 C - B == 0 -0.750000 -1.908551 0.408551 D - B == 0 -1.750000 -2.908551 -0.591449 E - B == 0 1.150000 -0.008551 2.308551 D - C == 0 -1.000000 -2.158551 0.158551 E - C == 0 1.900000 0.741449 3.058551 E - D == 0 2.900000 1.741449 4.058551 > > # 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 Pr(>|z|) B - A == 0 -1.0300 0.4247 -2.425 0.1085 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.0526 . 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 -- single-step method) > > > ### detergent data, page 211 > > lmod <- lmer(plates ~ detergent + (1 | block), data = detergent, + model = TRUE) Warning message: In checkArgs("lmer", model = TRUE) : extra argument(s) ‘model’ disregarded > > ### non-integer df are not allowed anymore > if (FALSE) { + gh <- glht(lmod, mcp(detergent = "Tukey"), df = 17.6) + + # page 211 -- FIXME: df??? / inaccuracies? + confint(gh) + } > > > ### 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 Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = waste ~ temp + (1 | envir) + (1 | envir:temp), data = waste) Quantile = 2.8564 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 -0.24100 -2.40284 1.92084 t3 - t1 == 0 2.01500 -0.14684 4.17684 t3 - t2 == 0 2.25600 0.09416 4.41784 > > > ### halothane data, page 214 > > lmod <- lmer(rate ~ treatment + (1 | dog), data = halothane, + model = TRUE) Warning message: In checkArgs("lmer", model = TRUE) : extra argument(s) ‘model’ disregarded > > gh <- glht(lmod, linfct = mcp(treatment = "Tukey"), df = 18) > > # page 215 -- FIXME: df??? > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Quantile = 2.8264 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr HP - HA == 0 111.0526 71.6231 150.4822 LA - HA == 0 36.4211 -3.0085 75.8506 LP - HA == 0 134.6842 95.2547 174.1138 LA - HP == 0 -74.6316 -114.0611 -35.2020 LP - HP == 0 23.6316 -15.7980 63.0611 LP - LA == 0 98.2632 58.8336 137.6927 > > 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 Pr(>|z|) 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 Pr(>|z|) 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 Pr(>|z|) 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.00744 ** 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 -- default contrast might be inappropriate > gh$linfct[,8:11] <- gh$linfct[,8:11] * 2 > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = score ~ therapy * since + age, data = alz) Quantile = 2.8024 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 6.1152 -8.6704 20.9008 t3 - t1 == 0 0.6661 -22.5838 23.9159 t4 - t1 == 0 31.4191 13.8714 48.9668 t5 - t1 == 0 44.6310 13.5072 75.7549 t3 - t2 == 0 -5.4491 -29.0482 18.1500 t4 - t2 == 0 25.3039 7.1329 43.4749 t5 - t2 == 0 38.5158 7.1711 69.8606 t4 - t3 == 0 30.7530 5.0313 56.4747 t5 - t3 == 0 43.9650 8.7849 79.1450 t5 - t4 == 0 13.2120 -19.8833 46.3073 > > sessionInfo() R version 3.0.2 (2013-09-25) Platform: x86_64-unknown-linux-gnu (64-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] splines stats graphics grDevices utils datasets methods [8] base other attached packages: [1] lme4_1.0-5 Matrix_1.1-0 lattice_0.20-23 multcomp_1.3-1 [5] TH.data_1.0-2 survival_2.37-4 mvtnorm_0.9-9996 loaded via a namespace (and not attached): [1] grid_3.0.2 MASS_7.3-29 minqa_1.2.1 nlme_3.1-111 sandwich_2.3-0 [6] zoo_1.7-10 > > proc.time() user system elapsed 100.174 0.628 100.870 multcomp/inst/MCMT/MCMT.Rout.save0000644000176200001440000016573712240415153016217 0ustar liggesusers 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.rda0000644000176200001440000003305011471214241015055 0ustar liggesusers} 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/0000755000176200001440000000000013200577146013641 5ustar liggesusersmultcomp/inst/doc/generalsiminf.pdf0000644000176200001440000064052513200577157017175 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4414 /Filter /FlateDecode /N 81 /First 668 >> stream x[Ysۺ~[s ;8v&N\;Y:yPdf"K_DC/Mڱ) ,bi&u 3&g9c*g,gR`R)dL 0SJ0e2e vL9C*ʜi, zkC.lIx9Jìqx25&w9\W e5Ԋy<1_ kZ5CSn${,F,-"XA %3x21 6@!)LgAsXYI#K!Ċc 0+%Q m3K,@ f98 "h0r#H!#";`JQuze1{4M?3ʺ7>M&1׼l7KvooJH/AsI~BGoy>zUe_:/y5f`mw$YuL6᷈)z&E/Ty . *lz,PHIezޥTz.Mǧ>4tVӊKsTTT6i &`Q ,^R7oߝMqxq,=} .ls#3 A  ?r>.cOBhFD>|6>*ka:\4+I# 3b}:$#2(+6]N& z2E#a! ĐOu`h}z$+"$v*"K61,- ja&>xD䚸L1q&.eLӈNud#I$v-Pw i7n ajl&u6FlmDwFJ22VIJ%锤Rd"LKmRԡnT&L sHphׇO Y]__fY܈F_?hgagb a١˃*B̠,'PLYQ%c2 j|ex^ao "6ٲwhƳ?@@%SY3{acazl<2ZG|_^?g7tg ag= Vl$Xj1f[NP7q}FV>!*t 'H.3A Tކy{m!"aEŘb{NϰXq=?c^^ ?S>s5_[}Wxh2:] w۩CbߣjRֲL^)lj3== CbZbg@Q]bmߦ%l=Σ_C{<b 4Iv ~8۳r 5yHfӒ_pxA,/Ag_/+V>!p]C} !æCu=Ӵ'޽-(L4Z&\_$tO$oFblMXX':*[Fm%-ʅFh|;F!A%=ܝ$BBVPVW"3@=nTlo dW*U{u+B a\X6mtќ :$$nJ*W2ϞU# iuGhzw\IgxW\T ~<ixx9=-xr4!ɧF 0'F *a 'uBq1Y.Qy`0Bm0U\Z,&Ʃ&m46ԏ_U@i O>t~_G&D{La7P䮯Ig9n+㌇B+h09o SĂ&wl\rV`M:V ҹCVݧ˽GѠ0pz #͡鬽oCM [>oj~E͒Td9ҬbӢM?+zg o{\)P[)yuDNOhTf !V;[Cwcm16$}QWuZڪڭ%UKRoak܊mP'o_=~\(絋HU~i]Vs?IߏLq{Hҏ&] 2>^wxaJkѻ^l9{~uKlFljlӿ~k3ڽD/~Ky0mvfg0GI;"-) )ʦ]%6k; @'sf97Zߦ.cVN4;t΀r4!ʼs+ͽaJ5>gy;jdx)<*) ( jT57y&Be 0&LF'35)2) s Պ-yvʦZL~ U:ʹ7尮Yk 5S>eOR};oJ|R%LF ?8 NwäCԔ{'1F˃ԟ g#Hw׹DNlil2]=ᦄMzBIJe-%㪊9&I8sY,zyql2r}rEc$ht`xO)]'Cfi9ŮUI&U\% ;=KàDMT~Tyl6Q MHF@y6th3n0 Mi4:S=Ec-gGHF,$FԵ@z(|pEv|Fߑe鵎SᏁMR&9hCw?o9cԩH`JSA2@yB"x#v6ma2GlC@E=)"%;8s•X(AN _T(8vŵV}), dlR-yK&W/Tʖ1ݾW/vԞpM辢L'}Oҹ`o ׇ(|􍃗 f(}>}OœDk&[*%oy5dtr}厦mi;SDl?Cendstream endobj 83 0 obj << /Subtype /XML /Type /Metadata /Length 1668 >> stream GPL Ghostscript 9.18 2017-11-08T13:54:06+01:00 2017-11-08T13:54:06+01:00 LaTeX with hyperref package Simultaneous Inference in General Parametric ModelsTorsten Hothorn and Frank Bretz and Peter WestfallManuscript endstream endobj 84 0 obj << /Type /ObjStm /Length 4007 /Filter /FlateDecode /N 81 /First 738 >> stream x[YsF~_1 sR%V$Jʎl偢 kdHȖ׃C`vmQ9zzznxR-J2yÑ1!cYʄqe,5,L,cb:2ͤeIY{ 3eLFҔ)"L StJ1ƅf:C%.,3JTC=3^S).0 !5*vbVgaHZMe Y/c6̥gI'2eNQR0+\_B҅b^:xBM(lS4&K !=)$QC* b2(Ȍ 01JՉ&#?'Td4Xka V M]ir ĀI 0L"[@+aH8G TBiKW44K#2hX41"FWԓD# ( :H6Ab}JDUDj")ۿb,7aS6 S\ *u7˫,0uq9-stQ*rvhzvD}OZ?qq<2GHϑC<4E<|l|l|lG^b{ӤL{sCu/98ڇi8gm[lb).k5~ofbU.,r4eHI&DMGⴼ5iʞ1{ЩLC q-X졑BgԄ(VeJ73) 5yq~Qb4S~g /x/oxɯ0N澥9&2yCR/V/y _b+?O/,b8(ȏSf oa-5]//^}MYFtm)1ȤpE7,+v5s+gٸbPMY*_oֽ6i Ф^Vot(`-54RG<XҎVCp7/|vQrJs~>Zi f/ +H*_S(osT(yyA _- @w[H_=-K` /IF'Pe_ rn?הrS7%bM"Vʭau̧zyu5zd',geuUKQ0Y^yH8+E){X\b5(D,զ*dX|޲d[A[-TP-]r}#I!`Vߠ$)@&KW92@WKmi@T.~*k$?M$+:ddb&44cД4lKS#!G4}ITPJ̓3hѩK@=!NJ% ]'2xڐO,"NN'pkL4lQ؝oU=#:RAvQiܚSIbs wtxBYl?چ Y P w݁- h(vO}=:yq 7_/;*<݁饃{ \xgǪoq7fɯkKfjb wYYh8`+\-nmo>'37Er a^Fܮ2@ m"6ZaL\D^ Q  d W;nts7%N9\ꭅRo=Ѵ}HF7Go^~st4z[a6mv5ҷ zFw~A֐h>U~ۮ;ƪ{o *w\noE憕 ^t=]q鵅6z}2Vӱ oo6[W7Iu$-eP}4?79aͤ|Z,/jK7+4"14Et;K-nBj'2i\-Lk h\'S[|0c)޸z7!xv5¹N&dTAP(W{x$V'].M h44;PKߧH,f"[q JDL}&Db 6ieGЄbv5M%>LϤz)%r'L4U<ބE e:M(a0dZîiG-uV ׽Y"LRH4.IU"?<>}Z]QF!iLcvS0akkFHmn3\C95ޙp·MaJO,*]Z?\WW-Gqͬ(b~nyOԠy$Jْ8WiC!T|ϊ1ɎVNr+9_Vr)$Q /ղOOE:^?Mq݋X5ŭkv!0`xh`ls2ZmG֬viX7zVru,7%5dH_Jc:{!Lk CK% t{o^yY̦Xgl q==c7`jhsAiisUH# ࠐ-ᾓlBui[̅ !$^HJihH4סzKWU&yjix[I^Fssv3ިj6B+4V+meTe(TI~,k"ꥃŦ4 8>]s4 w<\H]}hTnu@1o&/cG r~09|Z/,v+[Y7si5-Z Z)kSP hw#4_fuFAR $ՉnW#=/Cj䩂e)mo6"(}v-xFHyVk7{?j(M{5#XUoYe<܆1h Ul0"xLX^ЎBE*hHtCJbhEn`[_iQ) /1J#iů:KlOQ}V F123W H}Ҕo} 0z<ޤ4z_R F^VQIs ΂VS W`/EXkI|">9y4kS9Laz8HMkendstream endobj 166 0 obj << /Type /ObjStm /Length 2502 /Filter /FlateDecode /N 81 /First 735 >> stream xZn}WU} X;$~++Kӳ8.ԜK95S6TJp9M#|@K/pՊRv5SqF|ވ*-b$+j$) B2nT8IF*B;'hMP" Z ^`Ihvj6!yTLȑw w&qM#NL[铉$ڝ\yMT`+9I g/hŤդ"$LdveI59F@F+v`8"1!:(| xq[$CKsz]F005RS3SKc#D8ekpl,N9", %Γ |A}gO|Y?|=Y.Ws6&!pQQ1cnw{^JWn ~6gzZMO7OOkFA)[L}< `~pva{ 3FWw?}St?)Y꧔~J}v/Ư~6~>~/t?C3t?^ߪ_!\+{u lg}OWgogk= ?^Az*np T ا}k K]vAO[(<,Z8]mzN9o$!;_:p,%pN"vR%>>v=S%M䅯 6)(Xwa\ e q0B&Nա8|E*Th v#%%d puBϢ A8;mu<T`3&R/(62V" $<':$HnJV| +LRH’*yˊPMR3)P{9, M̐q |kq_A`kV&+D bIHvCeK*LVX( G1E )e~j`#WX*{@R"r͡Q]HWN]·IPj+\1d4vhn𻐦;a M{5҂CZ%:jal7bRh`VSR;M^s+^ױUL:BJqDrKɬ $.^1PUE71#>&MHuSHp5I"94*KT2&LV6XW O!L RPCdӤ#vpE)f nײ kЂMGM X"U wnjFfu J,pN ::U+zo@t/wut>oe{/|9?u^}tu̾_,'fz|<_\x8;_?{{tf p|x^5͑.5"?"^Yei&C%VYjvu!ӣsPh柎UMWۋ\_ͦףwt'f?- ~3;\@\Rܬȸ$ʩ B~>$޶2tfsI=trL>=b"*\O r a4QT<$K3Xձ &Ʊ0YHLRPܮu $۱7*r@-\= u2i Mdhdս)/Z%87]ɬ [V&6{ܙ1 (T7LOڗC3j9zOǏ][{uv2_}ݾL y7q툶1z=Љ5lj:mdq/(+T6_7/m/lzhxendstream endobj 248 0 obj << /Type /ObjStm /Length 2495 /Filter /FlateDecode /N 81 /First 721 >> stream xZ[oF~_1oۢ/@Qqċ[Hf<(2cDC II$-[R|s\sD&IiqLb:8\53 syqu,8zIeÈ4$tIof2a2FL04  n4@Ӏx5:z dZ(V~gZ+0mh ovÊRg1 cP4@2i <5VaA8ZVbx,DBp6=x44U #c%V($:hTFQA#ɘV-sJRgǜFG=sF8 S12 --$s^ s$!4"5 J}G Ǽ F'0$D""$Z|I*Vf5 :=,ԇ4#=,M"0kBGLL(Lh $ :DX$k2Gte\?YfsFk.|=lkeT?um+檻E{f쇫:xG/ib6x.bJ;UU^dø7gj<ϊ]?fxymֲ-|P/Nzj@9Y\kkn;K{rqPY[Z/dʋ3 ȎvӍ.gwl^iƶfԲPujZnWU-er#6-#tR#Tl ;/fw=Φ⶘YWm:Zk|B/VPWv1^u ͊O&,e/|]}mGl1O֫]}ͦE~fO,z9O'Si_N__0?e H.a,֋Id՗9KQ-u)U(&8A G]Fd-jI<"u]jӤuN`Իb~Q,ELndySͮwQ81za6^ra4Ȅ2 TGʷS  p%4Hv+(#$$Uod CGLM,EZnG@1DdAAع)H ._=J+HH`nQH9x]5$HY|h8%xCl'F$@'Ւ#;Kzw޼OWij>) ge}x$@>Ywb2 t!FRNG~%MI MַIj'0_L7K, 3 bK "fȼ_3vp O7˸ʗK Af`fAqT ULm*6U`שTR u{۔}?Fk+a33As' @(c~C*􈀒( T%nztpXQ;DoiԹBdAtT7:}/Z*07Tcl Hd-oN2̂adTfjj}|V痯yybx%%T-]ĝRAu70v >`z`DJjӃЦ1e(qdǷ%ݍnZ&nGX4<^of_yվ55>wE]6pIӵpCplO;dH!p:T~t:_J{PFۂAvRt7fmD~pdO|-a(2'8#KڧE֣; QB.2 oF^ Uv( \e*cx*TJwPi<ޠ3/z@aC 9C 6}S!:JEN-xZ>A*BV/5F >>JK8lEb=0R'C:É֘)"3> stream x]KwqSf/r~OwXI\u0C)|q]ChR JM*x~op00Kb)s`A!rY% O Nʛ]=θ{G{O \ޞz[mas|i[/b! 3l4taC7R͹`[} m&CH0yڽiIu_b~ ;W%b%wy@-xxA>QA3r6<ά3ir'g=o@.i#[5(kabStu#Sp̄32XJD$8O%6p*#2d9h ״ –:㾮K頼qwz +"-LBs y2SqOo+]j 4zryQ.%$xHBD} , "wֳ р:Eچ0yO NyR}y'\eT콝tej^ NY)|DU N J n~n3QL{b g߃hTɇ2^y-se+l(y(B/ˮ zcnrGEֈ^O؉s1\:DAzGhglB@+/O䀉Y\|;嫼n$̡֞2@>OChq4$a:LsAMUf kJa=M ^9lBI;cLXeĹԭyWĵǫ~A˖gKۺf+yO~O42?MDGΌHh`S32 e)Naߊ$ws:F@<]Xk¡3yZt#f-4`1$tkZ`7yI||wjЙ%iHp781`Ls#|qBdxiד7_x헣~&xzs|0LDu!VΛpK_q4AiYN҃lzwEiA%8Vz-mGдe`̦QoภWaO_M2:zJa cUJ{&NY J#.ܻT&Y 6pqF`?8b\*u7T%T5ZM!G&|"m@v[#7=DnloI(RKz;|̴L)N`#{ov/Q ƘSLWjh.i r6b BATeM=m;OKQ:b Դ r X a3-[#aǾ<5D8@|:8oo~g}rfT?3ZVPeOWFC %41c2Rw 4)>@A(޽,C @S:Ema ){PqH*y斺Z gu[/[Vf6oނ[xuJ˸ֆ(x\fn47{9NP: rSY U.:'*]ʞ" eM]k Zؾ]&ȆZI{̢ zz0(pF adK$u̝˰2l _ y]?V•E4hgtYb{@ozE?Q犃#H PK48i=/6am.;5XSeyp,n NZ{-658)Yɇrliٯ"J†YقtA>0ayԴ%t+f ݁Qچs&R,ƹTa>aS2#Rm@< 4~Ӊɠ6n`5.s,Eh'%([aCQTF)2-c xY$៱~Dl^_qFofNDOQ&i_1Ӭlb 245Dr•fTKH#vB2zBȼ^g1vBꪅ3T&bD.Mmm5C7dZmuzC߽8s@f+?'M7L3cE1ed 7\(%@?Ax :~mJ,s|~Elf<6lЬ#Vet mfrяsvg 6hyM$9mWQI1 AڠP|< SZ3z `/)8hR>!@jRvUjt5&ovds;h۳鴋C8>:l_rK 2u&nmx ^y m/Rۡjlܭ59\9$kbj [!w@C*.Q]-Pc9Ϊrri՟3 Tu 4W ic3^>nt )bqT!?T*B ]偂ҏz+n(5aIi t3Ta#1=Cy|\ɮ̍k4k\ i_ˋ\)QZ!+'A-Ҋ1aY jI Tr-[Ĵ:8cI?g ^j è*ۧ6S\Q +}<~T5rO_l:E4ۧ0Hd?yt&;ͧ 6'?{0u fu۟2ɇfL粏Yֶ]"KIg| OxR̪Y; 6ǜcq/M QejR͔pw[&{|=6%Py_ueM ;>#a?x.>>mqq)r1*_FTPA@Pj,%l-~Wm܆Dž=)" p优9(tu{%18+Z 5&gBNTVNA;n CgcsC.z729,kRt8j% U> l6>r}PWkxܔ&+{ -=R&$Z4 'c>rGǬ&]jVM17|4|P Y6KyJY2SV/:5ՠEo#o̠%վHYOFal ^Ğ8D6e 7^S[{ת7g1)nqExoDq.9e+RkwG揰ƅQɵ96n*7"8 YRG,1KqVC#.~*ż#ktKnJ8UXDQgM0Ǜ(| >?A81ɃO;:n ͠y*3!5xpq.R5,";0t̸dUmFpJQ.0_v>ncnRL"!q7`m4~XbZLu_)_`?!nW5(z\i@TU%ίUgv?o]j.S[&3=r6:Z ٴynji"/ H}_6U45^+aɡ aB8Q¹[,@y\э| kІVY/,H&ږx t8vϵk_ =&߳x5TD{cU4 wY%m&ċ9i gǗvŭU|*Mv&OQ~* -+ CT)y6N2 f}ˆܾ:O2A6x}ϲ˞WQ,=VFdlfR'sB!/#f>$Wqj .vW0{7(uUBһ6MLO.#]<4%|mL^Nk5*W5:nZOMħIi!܇#rX*& p4^~<:翾碴a([PԤ~18.r9QdcC^ni{U 5F[S,ɇ{=%1p(SX b*ƽq3jڵ%J%$7^2ePGH ]:apfX_諽4%]?ţSFz,%m͡d 8F?1CY(*htUMMrMR)ff/fx@߳ئ+ "P#ʅݾ&pm3p8Ri .'1H(i+#70[]Cpd37 $guk~|FJ Ѻ z;5m2ӯFc5 7b/r /y򄠷q4~!*rS;#ʛW4ܺ=㏫A+i|`Zj'F;uOJ냨mWBYʰ)9/1 %w F kGG)M'+l:$n60v] ~@GT}t5!ʺ۳c:Q6qDގoOgvu`9)5 ˍ g!7FH0Kʜ\+CdŔ ಒyrFttFk [vJ9tlqJR&-=zAp>RabB)HnqM'pg& S1~$_N9h4)!O4zv@-J@2%_,N"!9qN׻ei32:̌ j+H)CY#K1&mH(,HuA`4Mut?`ruX|˱GL_MZ̻oʗUFAz{^t>'VMRwuz*С .*`dl{MY b- WNIXan OX`=H 9:cw+w F*_qAb{X/>kDV.H'R6I 9F I.ZsgXwQ:=:ot(2-=1x) = I!+Dm̰NDёbZ7Mi`EUהlc ! |UFO4~ϺZkٵa"Z;6igsdi3̲kBkv+\lROV"rR$nW]a0mkDU?J*7l^%Uz5uli,MϕJC!0S>`;)\, ajt$+ˢU;/\|,Ov@@Z|A a)Jګ]޸s',;2Ϝ GLd, >>ISuQoGI3kySˎرt.jbqueQp] (y0Z)ɮt&E8AoaT< CdEjŤچd&Z_F)ersl/NV#KxsF&K>}6Bܱ3HxsВƞ炒 Lbq=!UND=</ng&k҇$-A@W:4 *S*ٙ[{C/el8{s?a5lId{( jGk6AɃDŽ`?o$Y~,I> stream x]I$uɇ.2|2X `6@[6$rm`8=K3d"^,Efdfu*;cb_>ϵ?&o}L?/o0 5篟/?,2; b>YKxAŨ{3X)/NN㻫pj?ޝ!<-v xLh! SNٺ&GZD 6:2Mn TLB+YI/auM.X @6M )O Ez~r##=%U% $ 8~9gKĖWbj'w6'P*eU(QEv̐pйnY1睺U{@vJ!?m J¹@[*( 8ZC:+ 0Qaw` =`Z PL $'p']b-lxJDIL9n3\f=6Ng 9yT䊷@Fn!a%>3^0)B>Q@D@V a*e6lHYaoAq]uC9\|w^5S4VK&8wztse&kX 1^y[钇ҍcr`*(@L +V}ZS L5#<csÓxzEw/G>z|, ?>@n2,XF 1_=]52AsEԜ_e|# L=D"֠v_ v8ξ6&ۥT~;E%4 DGCpNx:VBX_y+dhG4uv vSSOEROSzr}_&0i^_&@$ZR[NLkrԊ`ҋpՆrGт2]qu9_wGHrYhyM2Igwt=iācM޵͘C7\ dzC% vD/Qj1Ġe H$F;]0$7 7'Ddo" NTl20 ϙY=3T(x+a}6"Q)?tS6KO_4kh0DBLU Mdi/ G,O& ">1_{K <0ÇP9Dӊd$TwÏCP.gy/L\ƞG8̴MށЗrsU2m=rU)rbn 8ˠ}U%^ǴdIsddLfBcYr>E FtY}@Ço+@2 =?on,ɨ|vɥGD@M2x_v5lv*8ay0WlF k 4{wF4u!䕣|JEB"7FBG$Fhc`'',3L9cc>yOISr6>hL9wZv$"x8i0c/!"5.k蠨P̉Bl vs*`qG"]ayM\Sgrz,{+םpJײ_sSN;;CEʅx-n/(~aSt!.̀ ^y]9堑{fff)v0C#n,9zf+~ 1_X XoeOO7:wA"a%eI\հT ]%xy _Lo#ʔ35HP)$ss3/&_NvpnHV?,T? NR sBn jLVˁIHtWI2er)Ht 4 blEP7f=\.C Lpu2Am LTAn'Em PF^!ՙEB 낶?+P[ By&uG}_GLBdb%qCS ^*C7O!O %x=cU'ӭRzw6d3UH^_mYݝ-Pe}Y'0 8C?#sgxsy:A'd6T t$R p؋\U~yڔ,ɡ %kƞz9+5&ʙ`y-|\LNƼɭ.qw$̌ۊT<={i):t-OiBV1^`Jg)H͠X,7uelBAѝ1+W]Bj􈫃'iPTBkvѲ3km HZtR.kɺk#}4mg٠I\Yr :W-$c%HsɿcWݴ_D|7bKf ڬ_BG~~y\ 㺅mҘHL_mYjkVХM5_Qwy)m-R$|L򿄽6w9?_Sz`꿔q{+uW0Q 64֡2#W$~0hݢ"ŎYyj=ׂ}#t(j`z.p\1hI/#6%Ti_eh ͜.Sq]T5Uڹx!+6v%R'/;J_{@~gC塀Ր'&HSz*@_ST](wY4 $-, iVI\=f0ʲ$x10xb0;MRmKxKcuÒϤ:ulD궔ӰP$KW\LgfFKl8g`mrQrg9OUuő'mPblqcƍsTp(̹oݰ,l= #D$OzM!HXFMzgŐiG9~uJxL-FT/축:ʏi \3R񪆁X"N'ZvQ*}gge_}O{(_񐌲1aq~ZRK&M4r{B:vQ RX?ʀ|S|@˚ xT0蒚tQ4zAG һMɓ1ۮv*bl:ʃibc BZ =6q*rQjgw"(6yT-oi0Kh0իEEO7T,XHߧ;!Z+L.`trzY@yWҼK\dnrtBå~똠б/; ,hg,wY\ ҽesdJ$pVrEJSw'eB;dI'iިd9Kʶ!]0 rytL$P"-+I4Vɹ6ݰѽY*g?:=읗|2OG9]{/Y[ydp;#NlUt8^B ٕu.9 ]C#!6sMLjGqQ#OǮ!:O_/m6jA6lqAh}A>;|.5ȌY`qis﫰z4bg/Xf] {0A^f i&{Lr6ȇt|3;@c+E4akU LR!} 6y<Kb8[;7e mgZi?͍fJJnQyP&,chr`ߊ)HsD!]!3/OĢu}_]ܚ\јy.='W!E8 I1go&SR"vkm$3A:Cc64&gla&U/6}%JO{5ty|b?S62 nQLuA8.rlt\X5=3i]:\yG||0cI C(3PrP_,Pkj~;i1%HIi_$\g燀Ee֘hZQ jrQxz?b"K2_K"&jt \ӯ`Itd&)ӄ|ۗSx]sn2uP&4&(NOD_nD!^}tP9TMo Cjf7ȵEv]L dzfa,Uc/=d!8he KL zUU%ubXui?tmЕH~`ᢟw7m&f-jKpI:^ƼO>7ꠛט:,df0%R`ZKYЏpN STcFdK^}Yrm]Cڏ4fOuɸJ7#UHyzpmAdEAd;T &șٟ Q1Q03NjPPs Ipc47\Le?j~EP,dE.q7;o@M~̴M/endstream endobj 332 0 obj << /Filter /FlateDecode /Length 6709 >> stream x]Yq֓hh1yceK]~3C-vGdfUEQCײmTG _WKw/n݋G>鯻gv?{ Or֪r_NW~<RZgդD2:kBx=*,(%|0MҘ4Ґk"HGry竳{QɸPAߧe\:ۣӛݓera<B:<0 }[?:m<&,5g"̤3ix SP{2 Se*tL֗lC'C!|9IeOr|o7p|3H(%ps J U;J6 rn<[G)<D@d18A#4=RCf`w̚a V)iփ?+?W2b%:'\Gt1YE'gPPvlSZmLJq(z (B`dv)$hXM H}]gndHc68':w>kŊuIe hi@Sei;'XjB8L@f YdxG+^9++{(Θp`|nv)ӓ5h,)r:,%{ɉ+OW]Gg_{b^j)DC,G Or'o' Rtb? cjt5jDJYaH }y]57g쫩O x䡔k!a--'oCc2C" :hX F`8aK&HP(w:Z߰yOj_%:8 Ā|SrL:: ])>z 5F_P-' !ix9#U9s_\1h 3ߟ-_+D$8CQO䅢d^|$Cv,$$)BHTTPɆvcNp7 Nʏi5^ۂ}|~}e\u ?&bQV|{U˕;%|r nE;N,r-,ƅb"hw@r#eebzT'6xoAmuH7X%[|JJKi􌢃p` =X' E/ѧdN(X |A% ն`#Sݚ5 [>fG >k"pX䊍o /'(x@쭿M 1{VTzm&\άYUʅ‚8P>@ 8IGPD[>b58ˑΑEadGWE ',xwS7ן/@Bx>sRE+tOƸb8Iݕa@<IJ {u)$Zu^J]pd}#[q+ ua_/elgs(P-I~9oE` Rl㗘 a\Q'jY}elfY,yBɶC{Jp'۷ɥ7`ΡJnn.ZM}|@³9ue9APnk&O"0 Yb87$#+=<>>B|%]Ny֠RaGR>T%P 9 uO-QHֻ%W0qK@Tܟ r@EC9 ֽp-s'^t|ѵS-C|GA:OG$ {^5^? @mE"-% #i&%xP?zM;,J"K uN`EveQ C)|vpDjyI5͋2"}oOsE#UeUuj@ߖq`װQ (%sʦlSaרAT줸 n?:a%P򞥬H/Kne[AI@PN˫3ƻލ3I&kE 5fv@:aWM,{d66: c`nQ 5xEr-`18ʂ"+d7a:Y* 6X53$bYѰȮ_`Bз<He]x$oTeUJ& z^syfЯrXɼۦxJE*8g(DdOҡu ˄[x[Cuk=fwuYK TK!lsho2;ȳ󝪇lUYf2Sq2 `%3H_e/C43L jTd5ˬI4R 8)eQj{̈́Rn)Jsk椔\zܯ6U YlvvUWtb6-҃qD$!*2pkhHU5ꎭA#ѧrn6 /9 3)_lhD?so9P Q¯E5[#{cQ^ڏͷK"G`a>-8P; u ֤86f:5a6 lRKU\*D~Y {KIΩ/^k5>1K̊:qrAl.R5dQ0I)g*|>[ gPslX8@o疿QwןT^W+FU Nw";.:I@ԩYJN=xBNds2U%+]f&}O1UW\6l/2u|eAhĬzEB PɃc(|#-l$\V',LLbuȰgiQ{ K+$4cjSI 2l5H8IK ` "#xhuBou >IdQotj=9xyt^rGD@/H!Ph-6p׍+Q09D.?WIQvX`}~<ѵiu9YV@#LD0L9aTqqP/K.!G7ky5s }F9ߩ#JY,q*RxQ}Ga4ry4 /ej敭ُ_}H(B%䋔YjS$@_mHb x~0`BgEPZNTl{'88s7s<:$ Sn~q-X Q}e2ڋS,bsJZ*k$} h$07 gEN~ TE 1a7C3*{^wՙ3ݣNrϖHPUcg.E7kH3l(tKK?&C0Z7J0U{il9Xj jǴ>3īL~:ml `҅J\T샠A8R6-6:hi_ו-c*28=;]D_͗nMMu"{ TebHMn) IqP R ,:kAuSNY~l[l .# IW5&zR4~6vj6gK.(HuE8j? < Du6˞&y'2oa32~k 9gal`^NW+{iU$743 UeLa;y!hVAFYJ]@HEDM~Tш=}.1>3zMFcۆ$a!頊 Y̱ŃxoHǥQԹ[Y8 dTO9,մ@tܡ.%(2)%>rٛpcq]Kp<~&Wn4}>`Gɒ}O8$+|#E}~w:0-䑏ٖCSIChaAi ,g:.TV,[såf9o)Xts2 f]'1bV^I皮ϟΏ.^d0ФMslL ׬u- N | ļR~􎻬He:o_gh0k`܇> stream x]YGr_`ɀ^K ذzj Xk HCwDfVUDj LOUq|qe /~B_x!_w/w0f'U.r/'ˋsyBsyNO>~,ct2_\IHuP[ݿυthIdWlnnĀ0k4:GB[?~{ lwna./<庻MI|*-< `֩oE^\>'U((a96{OWyzXz2UDv +f[~UZXՒJü'<](d/(/D:Vƴ߮D3u@8}t>Pw]jti5<V"[96l<яR*?OpFJTb ;UaqmYp;v^|2S:0 p5  :v9L_y?BY޺ 7ޖ0ePZ桲xKyHL.SqUgҏ˃5f?R@ڻQV'5:5^cVpgjaj?AMuc̾-6]SD|4݆BQ݋B~\v,FBAmP@,o+*uhEQ;2XCL¿ٶ<5B2Ws iO9Z|Uvfؗ'y|5&u&e]3EǶ k+`/PTPaHOlLJո9PW?8MʅB ! x[F[AIzf 3'UwMQ6)~Mt1kưP_9T#A^Y'jO4|d?]qUҠ߯o7g#^'XiR!02mNgX fT9g>ipxa6]@e ݧc!/ں)gf9ۈ]EbU.qUNY`,[8;+egS̄]o1H[l}9̤t=+ȇI<<`qw6?&c28OZ|?t_U^h@N`_\vړ*U lO3 _]([A?~ZL4 PI9{Qn `7p*o!FK`@+m;x ieeفF( N;"(<:0?v 30X9I*8YY]kW h}`eXPk*Y\P5xy*H=\Z+b/W1S Y0Ro=zګ\5Dq-uoBf8YEa8VV@+^ZA|vhݗ*ZUA\el˯Oc[@loĨ(5;“U <.>!m^Q[a2pPDLRP||sQo0qh@QxO[1gYG \fCFFք?GQT8)(M˘<CӍu]_5F2h5M0 ƣI:ViRhSV`lZ8,![Y,(ҖHu;8|k64dBl^,`9erC~ÒD0xDv5. u="혻4rVqBl6bJΨ,I oq_x;^W# rmvui=%OishSp麬,$L**D.SV:RwZ#AH0Y)U:eB %&Q ÌhD h#Ʉut&TxE&6v%!]W8lyZ@`g,L#iw-.[| s{"9<4Vdր"A/q4bL*{29 L!$g~9WvM?]r `5l ?ע%mRܤ~N*Rgn.KV? [Xd4@[eK}YexJRD G-&'IegL8oM(7å %̥΄v-L_Ed,4"r{m٩SrEǪ_籃&]({ˎzU`K!/W[ZXˡW#d۩x}d;%Q"`ʹ(OIE>|C&i5ӣmLxj\@eO4ve z odw2ogF.gʁ6rk?d2JNZl€)w&7ZgEY>䥄!eK/;"7깉u`Ӧ`sܛt"ѪkL8YjX ]XԤ\!p,]o~nk]IڭK}\?q0էIlԚ0=T᪭ i:L܂Fb&rVMɵydJd-ċ!GK#aZ *L˥.,cO^K O Ě-\ n'n)M5-->Qư)Y@Z0'k>j:QOTiA5p(y($& #~32o`|yurDs;P[fl@պ+~E}q}EPZ&KD6vbpWO.Np+0],\ 5a!k*4C.Jh2m:qsK/*c7-=6]eCK.I pQcd?Ju@C0ju|5-)- ΐŀ](%fW$t"OQ@$aMMqIDl^o|u9/?'NFwK5% L]&PއSq *AKҨ}EӽGRʜLt &]7q|4("F\Ua s<3rHKY9> tb~# 7='}5;WHA4&Ĺ׵)J4lSF-00b 7_HnmI;GZqd3߯ Oc :gamA$qAoi!ʁS[+ cc*厄$/BݥȨ%$h_l[ ѻ]JyK:ho+ lpE}bpk%A2ZRƫGGTtjkj9J)4id*rM/mMKn?‹:v9^Rqu]xsMuIШw(=}M/1?E6kLY{²@^HR]Tpt FΜ-چ/Vi+O±V[͠5ml;)JˆjIyD)2`7hIM(0mJUl!l:$mg?GT˂k B=_'4?؍ȗS 3ZgoZi|"SP.I[ hL0)T𺊷˜<끓`EB< LR*/1PƥTfz7.:e\y4q"9FIZ5&MmbNLP@f8YjI0d1KE_u :1K?Ԉj56&IO*x3qVR8AV8aK{oL̔nblg:9ag/.+&lMutAB_l8 Z,`j.*黽XzbtY&i!鰹Č`Y[-"O.80 Qb7˫ F̛il %lp-wu,GxXy`2`*ZDG8a=ljfa ze@cV&#W-,**\ԇҙw^iD?֛տQ t;7ЅR%+yln0xN?XۜB]jf[#ZVX-FO}ؼ 6rzNT>1"_mKn*~kl?U[IR韡Yw46Pד_ ;Po4ۉ!OF/GnEK@/ajsB'z"eZp&ZU`tYP@nLk5}q  ɘAjӈu9ݎWg$_kA)G0 ኀޙtQt$I2*0ѳitVE糛'0^zq(^#xjρxX{(kN3M2[_kD2qdmʲ(4+xyJ-ϥz@Zi.Hh3P5J ,Gܾ#?!1^?.v/LRyW}^P"$(D|`2 ?Hsy?_<= T9cY6KD!cOYgL5;G 剎&? rBF˗{z =M,]mKWtM-+8Ӝ;in4ܪzygx;s u<f 1u3XHzl}D9麂'2Y6kMUyS5^ZYc4pkAH=6qcK/O*ڛx|w.4hjg1+e'|äb`JX^D]Q`uR,5%hg(j4U(J*cetmJxAo '+[feud6x#NZGH[oV)Go&Iv=r-"9a2!w5WVb{8 |h͍uI-nK6oGe3ϖ~Y_.E,l UKuj<~9e5DMn.pwi#od`e_MqImcK srBRc|/Kb{N+Թ>ȭ~QfϻoEUmʻ?7 OE6kms\'ƣ$)Uqr4sQNy6IJ2F5XN3_:қ(΋:cF59>'ԆVJ{T'vڽ*.wM왱M1)ѺeqgDwN6/Zhϥ&+^ejr-SR Z*Ήr}pUmTendstream endobj 334 0 obj << /Filter /FlateDecode /Length 6109 >> stream x\[s%qZOa)ajxpȩʊd[f9x=Zr"+3_Ow3ӍL*bF/__0?:'/~ w/ƃ?P׃_ksE~U W?naTct&mIziPxF!G1y8jУ7[ӐL"8dM0`FVˍCGD)Secr>(H}#W j [ +n~ONj l DiKo-R~q3Y`Kğu$ݏIp^'7;>S >FyRvt U N46 O7eZwVG+VkjfZU_u-]8dvkW1?2r%B0 1S4=-Ebc`wҺ6AqT/2<&V[\4divV{4:">F5Xn~|"\d.L|щ{8-$w8 KtPEAqҰ*SM$a.7nМJHkIoT;^?{__犍gs&\IuͫE4;v]oku,,BTY)_^!޹yAq)G =edKizeP3\aA(xʷy(Pqv[ZE6ИmD^d qCkPH|ҠS*#_K*/ i#v*PLSRosŌf>6WG߯Wa!Mg\  ;wQHz>HC'VMT],zŘq9)X1a[b*5e:Ѭ7&L86 ;4Lk,;{6owSy|:OEog?Ic%9F}@u!G#UQ{ d@|, g3l`!4[3(Ƙ[2'#J uw=R Mp=QkZN5BHdxtf_I,d9ġD[:bl ޸d4<:ψQL|u5^*j, 6<-q5zJ%"(R>Ү-ŬCvytA5j{Jv#:}Ȕ(8d^k`1,3X gKx^̓GxL;yy$ZHӁIkagY),E3 :؋5_y1Ilnmm}m*=hA퀜; PԤl(V0c v=S~E+d[tk+^ڃmdUzVʯjՆTf[۲) @)닳U'.hʏDu5"^.֙-3mO Ys ENcFHD.OF7 YR1BkD1ݞ.Nff瘝_W\4l+.Dù;S60/P1E3NTS.ӪhKmv|D/0Q+8#ˈ;1*%/Q rٴfEBu?KN$*5l+?DM>.㓤3d㔷Ȧ>OSR9vl|zYByJV _ju?.mB}ˡY{!.֠|M 'Q1#)g x.XXsa3@3RP#葞u'_/.k20Td FW;VgoTp ƃ0(_|Z ))dv=!c <;@yҀD$| βKW=YFJ Qm-?$'R򂮆[.Fd.@jp|[r([9 qw@Uyn_إqܰbqި9FD>֦UL8rmр:jolr]3摦́Qow%%SWC7rcad+kʋ.^ ]gU Zm9ͳ͕B fbm:Stv$֐NL9A+^ך?Q̀L31$NSmcCPΒG lZQ"oq>faߓ7ȉ >H7o+ۯb0Gw;u;!akp}.^,q~fe aݾ[~VMn][ʅGWeb nqU$&Fl!}Mx>wTW}*]>k@2IjG1ܜ9a}@e gs{|kA !`( 2cIXAo|[B2dW,#82-=NQOiߩ.X3l-m(rBǏ9D'fe9'4 u,CĂ5. 3Ejs'^֒9J7&DZ 5̭,īG2 ٸo,[3$o.UNBXUy*Sд緅.,fOX[Fe0pBC: jZI!ΜJume 9NcBpDn Pܢj7˞Ddɮ/"4NƺOݣSR ;FZ9rm;u,%Pp8JQK^!>wyj=:pcr*Ơ5;thd/ʏ G#7>|LT3WsUՒdI&0CXwApqMqeF~رVuwja̖-rL;JPhgi7UUII7\P%) {Gfy_\zĦ!BI^~Әx:Qzfb[&|jIW{5Nq;=ޚn fYY~8'#ɊvS(?DQVPƪ:Q{)gNdm1) ò&Huuv&S+6` c$,M!3T0$0tꊉojp;Vkɦ`m \YŢ0soMle'_y$ۼ($tU 1߷7FQ"=?0;A$>u*A"O{ ryz0R|R-l _k3-)Qr+,06T_Rk *0  =xE .W#+hnW}8Mԟª,g͓Vrt` f2n:*?b(}y.(*+)<+ ^Y,j[]f@Te4yTGJk:eAx6S{i$ܟȘw.넞Ey J|H}3o滶I2X+cWގM,?۔z.#閞kƑpTZq)>Esa⓯RxBgw͒YPV)ɲ \\:}!T>GM׽?F<$ VmRcJ;0n]fN:ua*Eb F $+1jϕ|Xϰ=" J_/PS_͛{YؿlQe}:enRYc_v!mڬ:*-  @G )"9iq|ǪU60b+ӫ:@*F_ǒjbiZs}7y,}Ә~CV ]S@-'RiL9ݍ+ _ 'WVg8`  L'Y~p_KZ{g=yGqk!,V[t7b)-IIh1IIa6ɎDGYQaA/?P9'UuɷJ0tb^߶1SMB'bvv55^r/كſianz.z7{l٢e/rݴ :{ݜ} le^vWv'h\6_]sxw\tٟ 3o򭸫GwZ'zgzdc=R|eGܚ/|>O:yM=&/aeCu-M庭T7KDnC?ZZth?cZkwr*ª uϙT78i7g'g7`Luur>;ߣT^:z]lQSin29"˷@ϋb8buyF6a2´p&uL ,#1M!d#cl?m^~~ps90՟IAv޽>{pd.Zҫ\݋e/E\endstream endobj 335 0 obj << /Filter /FlateDecode /Length 4519 >> stream x[Ks$Gns"zO8-6VYI-Ү~|TWet/kAoY_f~Fz/3>L_7.69icgE>WuZkCozʢI"_,lstxq6?:Zz/FA0Ge&.'xemt29;UVgo y,~F9QVhOGA e#S0&`| jc,.Rvvtc&|TҌ>+9[ r΃N5gÁ f Z#4/p&AŻarųn*о-Z^LQ;jm9?tbLrc<CWi"BSA3!vfb<8kb"LԦ V!߸* gKŖvzxo%NNw1XpÏMy7&6H~h-r ϫT`,M;.P m18.WD4:-BC֧Co%:AOa)Ù#ϚLEa }Db_Ҷ=搤1ZSl9%Lv-W"C|OnӞ R3tj DV-X0 hɅ4t!1<N`d P;X$DKՁ }< ^7~Mt&L%\DZV~N1&Z`/5 dxY>HO}q5L14zH65<{˖^//!x !,˓9[|+T+jGVM_@5@-ECˡ~r'nBvas} *:\ķqci ]u"3V^WH_9qWQh`6} /#*wZ.W@ƅ=&a-٣K:10Znpy'2z,?Q O0<;޴+˲[xVE$ ZTV/«d 0+Jx]?;wWZ)a2Ϙpp~,"Avs&QE])_ljiq2gqn v)\@~w~3 |s6OϢQ kԛ;vޏ9N/nϞë 5$a>)D%~2kw0,E`dTfCP9*bw KԸ[pGs*ߤ`v o,`ACw# )Rg/L6N.W92OrT\_v~~]hLY2kЩWކċbUDqjGu.MUT^-hJlMhӅ XUI;4m'5?Ëgy;ݵ5A\D62vմOXt5>?5zEpm[%ulIBcOf7$!-{_xρZjm};*szyO>qqaqAU<6 ؜}*KOeBςB>ԓp[|@endstream endobj 336 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 337 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 381 >> stream xcd`ab`dd v 5411qT~H3aa#eOBysg``fdS5t-(-I-ROI-SMCL,3sK2;gUbxÑNBd#.|{ujMu>(4~j}7%7ί^Z^Sޘ]]]0aS'M|UČ3̘!|!. HnB9fM~p 3f4^2q:ӦL{Ql'rϟ8g^ԽcZӴƖ&9PVuMu @7mVUe[]AR|Us8;w>n\{帘p20E endstream endobj 338 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 339 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8287 >> stream xz\SBu*,{0B'7 ;2Ņ:UUZvs顿=7jk߾'ʇ9g}IDT.H$ٯ4Ym8?@¿#t$Z@O1wU}]ohkH$ NL b3mͤYfqad;#nE[+XBdnQC$$x*S3Ag]`(jtj.Cy Q|*\kbUT$>ͅcP _:UW ŐF#5ZC|d -bG |]!B%HH~q7у X&vОJ.{JWwl?=J\̃[^?bޣlP_ɷ mґ EGhUیZ2~^T{.hQ?`;o~;IP_ޅYOp. 8C;Xsjm6>mU9Rf`?ძ6S*y 4z;+dڎT<-C3!K.d$Պdi"ţYG~O_NƣRm<()4=qo3`D2яQM1RY9m钠 E}ESLUJ/X*Ռdi箿(| -=x g&⮸ҩ}eҐ=03D1c d u$`2I&Lt"D.x'I*$Aar`/Oe 0 V?EbgoQj1Ty#jwS/fC%xb"x2!_Y^ -Smi6K-ZJO%0 t$(rteik;^oڝ- Xa[g:áGH1Wi2! \ЕdQiB9wRK] hZ~S!6ui^4ිUG>RkZ>q%^\i^>ӯ#XtL®YdYѝ =ɂ"}$mD3.eb4΢AF< yd:85})<)"`)lcZ5Nof^r|oV*o&־vʜF)*Aq߭"HRd@KmٗټY'8 y~x4 U"%nk450h$ͱ0K2JO[w\`4bٴ2+BK? W/.Jkt0J1?}f!L_fMU:?HDB? Zᮨ^QB5$Xj#~r0o99yhJUA&dh3 B|Qt4>B^2bG4BHNzՎaNqh`*+Cc=]ٓ3 I/ ,'o "A2r;G Ԑ* FrE-Y4_!;֙w4A*7N+3|:VZA|#ݺzxXiqx %HOHK΅lХ銾EMV&]N ֹEJ+ыZ?B;.$Y.vv.pfJ/?R ̡<&IhM`g~tÃGJu^N|*=^' GQ;h8-U:-,XTHh;55Ĉg/IA]O#V&}4>3Y.8I;+h DH@=qmzJzVaM( hӮɮ*hz.G+<݌>Yشrpnm'AqVZUz pQ8Gn"!Zh3-8- (3+'аUq(91MUڣ!Θ7mHmnƌ)ȻtSTB֜嬙KYUӖYyK~kTB hs*ZG)O% u >: &z-.x|D퀙j ^A5Jd)U$ٮ/'E7(tXS /`ƇkTeuF`&U> 묰U}9ּ4d)}Ѩ.V.@ oD H>""?2*L.h1_|"'tzϜDi|Lt5AYmqۼ`#ZčVq64pd,$3s oZ0H Àƈc{,*iYA6\l }9FSmy/FK^oٔ{D4Gv b~6z~Syy->'}9ĸ{"1K`.n/r [  ZX% m ?tBr@Yܖۯ.!7z}!3.%PgHԂ;Mcn] dQB-VUDTԕTq.d |Gs4}1BL] 4;&UOkȝnwn Soex N9/dr6I)e*%s[Bxa[]ݤE'-H9Rw7,l{[s$sPl$4)@dEj KWj!4;Ivk}#6y؋{JmvQz@*M\{(X`G+aAH;ߞuL pU (%c-V%B40|u#D]MG浺}W+ LXXEYZI8\5~"*o뿪NbƭҌ8ͿU4FxK'&r$IF(ܫ`fsqGMƵ8ᾆfWD_oSC8!XSn7 ThmPiR L/9(B7i҄kMqs*=Dz_/Kmſy14/T I?Ǘ.8.!nS(Txl OA"ҳTܶMFzʋendf\oҹ O{\=UiS2Kr.&=5YfEVhNg.FezPaGy$y[Sh TLo%uV}.?7+vJLe?h@*sCPCmϘ3L9vww7Q_u=e}{$~r;၏ظl*8\rڅv.Nk|%XknU!_p^0zZ঻Op(ZY0iU .CjȀF,400:*о!zBᮗ.'`+ldҷכڏ9tv%K,n"pNjc;9!z'1 1S=E-9]WEɟ>|?:$  (.3pa7 ;лΨn,nM:Q̫QF9'YDh`@ihmifF#Ne n}!wh0k.]4wǖ\vsD1.ccm3-Zt-dۼ6-p6v$41$R!OVL̾f UmҋF'u'hVkR:!;)'[*q\ | #팖yqGo(\ǔDFŦ$'$qK)27E-7[?@eL `"w3KgGq߇p}}R'N-G XKM^&?RRA;z* PmgU͗ &GYo^Z& !S!b޿N ̝S×ϚX6OpԅEket*}uTvl.f#"$Ab[x`Q EkDE3'lA FA$6"#P? DO4Ғ}<_sY]}_:`oϵU݇c4}nZA\6W N;z=(h93[⮉A*.Y IDd"l3E) EǔEFGE'x6z /PߏCQ?R(ZE&Y8K$& 6UGHr.euTj>E;Dda>iР bF~7( ʡ*7bs$'5!:S|w\!P$]%nҲ25G->8zv1IMmT֡YpA c>*CMe7ʉ4<po\{t6CTAGZnQuYzκLBUq,o؊`wS߽QS (懠h%6 $2b8lF4D$"Km-4Kя_>R6VC#"+* J_JmXXP!IukF?>B?◰) WwC6}sD]˹*}dq%yuǶ?wߌ)) ;h}(#nW+EȎdT\>yZ43ZU\M$N5~ie_A`!YHz(Ҽ}!!65uȂ~vZH4juBb<-)-8+o5\/Fh ێEzb7VN:m'L #Cv8:a58ebÏmNJOMZ:X/~OKT $~nc)xqϮ "Lr{δmXoڎO7~ _g}`yI%p/&ϧCJ%2z) "p;cIpQK˖& 9]Nr,S8_ZWPm /=E :|~y,O.WlD^K^@cͩ 艟2g Uk"JUVr]E;-\Zf̋hk4z|Bt1Da6JJП:$ߴx ~kN-?Iw+§D0p`/lA珿r1S-ӣG,tuK*4T.M1ݨSb̨:v2@m$⌼ q)[ $%e!CEiO<0^lg/jџz$}WћU@l@,v ]K!"5Q.x2V}DVr20I-mt$4pE0tʊ*v8ywrr!X iW쭉( Lt~YZZ|s%?D^>>eO%SUC_myQo2PR.vFTU{\zG'Pd=wKQo|PxS*QAn7|ӻ+$v;l-^Qn7~6> _7y&F?[lVVK2FJvF'Pͅc^`5HQ*1:I,(VIDY+ex*)Z%,^_˅ĈM򠵭@|agf7 .q.1Aktvۉ.BH7l0#H '*;0%52t>,"M=?쒶}&Vj55ʃ;)*'(EN&y`$ٮd$56v؃ug7}vϞz,sedendstream endobj 340 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1060 >> 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 341 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`dd v 5070qT~H3aQ#e7Bysg``fdS5t-(-I-ROI-SMCL,3sK2;oglҏHrNo~}W&.k8pY۪T$U$T'VVurTά3sV-X`Ղ&CFf͚:WNcoZ0ujn93g]Z0rĹ mmֹs'-нcn¢*朲천2/9fjM7GE]mec_cOÞ:I?f}띹w\{帘p207Kendstream endobj 343 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 431 >> stream x]KSqo;G4D."HE"!Ls (DLw{a;pGJ[1F?eEJPE(O y)*R<;ӲуY;Y&+S:˜RԀ?p3VqAHM/FARHӓf肮5ywp/rpx}p22֦V@1@L,E^7@ b|/VzUي endstream endobj 344 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!UV77De,+"W䞸:riFc `Il'D >׿n_O^ _|賗ʝ\>N.=IoO>->ȓWoQWq$/WG~nV`1tMޙnAXޮN\9<:n[cO eX l=} C8ݫ`,=4UA.tw +,?^c/'qvqB!>Z<suʗo aX8M;aAyvBZ ]/ݷ+`-~P*oPup{%XTwͧTүN qcۥezaMl&޵i-|_?R 6HW [{yQ;@hL!xD6|#yh[V8xjaVy(4=a.PoAn^m`zD9ٓS{%a`6g01 p(y`r O%oTI%V蠼Jc%ʀ$ǿAE7೗Dx{7aF< 0aߝ]V`&/7Ā>w `klwC;|t{؜߮h6VLsMFDv2n Kv>vƦrQk F±rU!- E? Ѽ: [{K rJH[;.2l/;m:7@ eNҚA il-gIZQW7&2缐$DgfK_Of:.`˺ ~4yϣje k.[3]1CnçX~-mW܀mTv0^H0{6]'ōŸh ѣD_Oي4YGϥ:ʝpUL۠7i;r]1^5C]̅VsV>B y-. eeR&lWV[XfگwQa6v?.e{:]"-65x.?}v 21I~A|gNEk<E[o *q)+)ע=9ޏrruF3$uJ .v[M&ގ$`n`R9J~kXk-kXƙ#sqưG&TLJ"`)GO[D?4L}zZÈ$Ě"n3@\".[e"obX?eoXR#,򧬋ZL qEt5,s裶#U4? WP j?g\; sЃ9:f[kB-Zs UR1LX+&1 SqC0n-?L9kSzqeT-[gi_(%zs.!@ . z#6 ٞs2O)C hlyw)Ћ/{5f1.؝#5A$[8{oil^ti"!'Uxj*OCHվC R X"[I#{rC-\tӮ\IETD5Ҥ(Ôe7 =e_G/fei{ h;`r@,;To_5뽾3H$3Z3a4eXdC0dߑoA xUU4d%S)iu+aRE@ ӿ0rl0-%==.01Jy|Y tMA8Yu G xp̒3K]6ﰮHzkRPA4 AsbMk,6+fFS٤@jvbs.Xb*w[L!I%U/)xaSG}gB8'\tNlInk j+}O&k e=yO"*ۆY6b a&T9֫ KR}UލP{Uk ي 5|yN0s >f"pݬ*#%n-|^Ϥ6'K2ϚF:6a=%s)EmpfOaꚕUm8 1t 8j+9cr ǩ8)%a IX+#X*ؘl*03ʪ"nTcKk6Pm]3RuBŎ)|uV z]'0()ZnJ~%6gaP\sS+ZۯI j>\  ӎx|NrD R1jvf"bb繱E2a ~<,*`G4^ ?>gEHX{:Y1B0(5"VvbL ꃲr( {>ℐXoh|¬8ظt%/opaA +ZSu5DfF7n kN)ߍ5K2T3?#Uޗ4 7.5l;=$LԮ`Vx*Xֺ:i\VAt2uS+!Z2#0֓61^RY壶M gpu+W˕s Lzr<#(oϖhxwM1fӂXY]Eq hQ 9ڿ2TpKnTEv`7w X;&@z*IֽWx.qHQ3?lw !o^SU}~ya@VK\qo/Y*p֥P!0Ei=fCq$ENL65t<pk>#v8 KyϊlaθRVg @\%Q<(V1`Jwhʹ%Ոa;gU,`SUY O3.Bo*#Y8 Ik59R TLˈ?*UtQUT5`.w2 Ka2&>,{ %aIK pf8;>p >UfbL\h"}9I ,)&xx4sWpBv)@lZĦjB_qiGOL;А+$=  (Ŭ/{Et`с蠑b)y d<"KA+NԁgS|Gԫendstream endobj 346 0 obj << /Filter /FlateDecode /Length 3973 >> stream x[YoG~o1'>:iK#Rv ]m&}U? '_=~q=?$\/>,ljqt~ʅWl׋5ϗr%Zcy\)GٜaBBo%vn2RA6O[Z!t )lGCq+M4KDMYѦ/pgQXA) /N%LkaaNм}{45Q6?ǻf7*9<[Z\ʆfC-9>5sj~0 ;Q1®/yv6\jA9ؒ~\.@8S!\&9X$7I[_qm|H qݕv-VdLuGPw/B[—˕VNgQмvl29bpyTOg9t 0  L؁ұ%R:ޮEI [\r` ` Fr/9676I6n+lšhNą#|1Gi((dsGhDڂ$PSNnJ%5?o/|H<|״`*O ]H[nĄvQVaaeЭrsQIS!yJZ{z: Š[a8'ЂХ=b"` FS.ls}F੍n-mR4$8r+4DBLM]-L[v!T `.'S0 ^4:X J%PDE.nӀ|nZ݀7٢92-6Cp"}OV .|C8I~VJ0̰aP3a>( t>807WҠ8?dr:sǷi&P|6)𯗸c|9,fS nKOuĚS$*à >tS sU*э<*%@+E}T kr hQ>R̂ H81r p`,g5t;z= ZMFpyz L)!֣zu2}kʪ@ ;"Vu. vFLEY#A57;@gzh vk2G",mm_g'F(X, ns ƈ}d`f{UOp<~8 X]4KRi@XOXA[ľtbqŏ]|.:<)+jb\6}jBQf0NsEIUĄn)?gEEUpyT_e X@ 7X"j|G1eV~|4pcMJw3%Yh}bIrq7|+sJQypQRen ҿyRP+LN|uҟ.LĂNf7'@"0җ<٭yq0@m!O ^F(/+"%-RC1m@v/ }s-=. 6,{mwL͋ct|ݝ]O'^F !$#)Hf)S֔) M:(!ȷ=m=I<aĐ,d1-e b`nȢ]'TRHoUݰK v y.')?[(&U1AyQd7w~} jӮot*^aTeieJU9#$/U&6CZ 쏾cGF„΃٭fUz0KK(mI<4fx`r0+ֺ0mG3?sY.c1NP.~r)тr)LSxD?-o_Qȱ sQHS"~-6߲Q- \]@Jj $+ Krg㯹_G%cֳ@56eWO{,w?ij@c%f7b}kYv7DF$a`_²}0XLya^m0 x7i3t`j|6AE<*ykx9߽,bH)'>VQx9C e$,ɦQ,YG\l|Af[專 _4_h aΆiVF?Yk?l[Ր?E?F ҭ'hb2wÔ$к[0L̯_Hb .kEJ~$ VL2F>)¨^Hߏ$'mĔ=f?9IzȆl 5Rv~.sЉQѣ ʞ>_t"hVs$6bU0fu9zhZ9${Rwc, Dpp  HyUHtU񉞓L'y3Oy-')cKSP%M?(M]\%-Q)ɻ2E-TJ2SpScѤRs}uZ˦y8* | PMendstream endobj 347 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 349 0 obj << /Filter /FlateDecode /Length 7297 >> stream x]ݏGVO^aO+E⁋x^m) e71dg♱sϩe2;nn^\]g_]wB {EzT위8G)CapT ^_ͣG+ia__p=Z#n'W0[/`OqTTw"6` aͼ~pα3zpOoitP;7* ޫQ .3#> Ag)=v$G-CuAMXgxq-qɣwiF) ՁL>MBc :.GXV%ތR c<|xDm%O7iT"=Vpx'³֙xDhɗ. BÌ85t)-i\&/KD"/lz&$ЮC^Q3өW'䠥h 4XrU c!(tz䣴!}K`Dlz@G~b3F}tnyq08XNok3_m[xt~aw?sAȞK| h[{ )pS=:˝h{yHD+mHo9 DVµpz8JaK~zuu\&Z8 ,XwxP9G2PG*W(XYDOK4dX^kJAzX5 $E 4ĒX}LK`f.CGLzԲ@[/,D8{`)XA|zp*aY/d,@Y8G(ߦ3Z,:j p|) ֛0Dv! (x13y:HPFx~\ܕO3MT``LփH_D!> >Mᠮ#&׳N_0'A@\dΊ|og4539\m`ʯqdRT W}IZj~`{ 0Ťc72ѫ%߈D~(_P'*j<`xg.VR1ҿI;|/] Z}`h]Zv3B"`0Sct=TJ>&'K:r4яJ6s'U\GwfR@%PE}'(ȝъ~әtx"mJJO&zT`ǎ/ZUǰϮqɉ0C bGO!˯/QwAAV@Dt0Y$2D4Z8,Хb%WJEͺܯ4NOToAQ9l2Ds(M@WO+\ !و~CM|Ή4\o{=eͨͰ fE@.Ӷ=w0ME@h`U@?_(InDO@#>: 3Nx9BaG&aROYx<`|g&:&0ћOi&@#RUr"`{Ti4$4F aSQ6ϥr ;⤵EcݽU19+7`բNqpa}1q<ĖXFx%L̚W!*dvх9kd.m>UP FSnz%("ϣCrw0p^ltN<4U؜pѠpO 3)=qϧ lr}?myDV{X]AOm)p cɖT0J6@^ GF-9U& 6OgK;v %ŔUh04ߪOQXΛnu 8QU0ڪGcCB<B7QK&HُD4 VvgɎ1ʈ)I"%xޚl^&1#&sF!d6x5g$ҁ arcymKO7/`\+ aƌqibn2:ݩ1(7X];'qɝ6Ī>S"tڹu`m.#TɪtLk ~)ҜK)ccL-|еIMUGv!+p_&!%NT ; U|cTG}[tO=()MpFNN8<{Q9U]wL2 ,V#lW[?j,'BIz~F,Mqu]K˕f]BE$4 at`g[23L$E/i/5<(3VƬΒy*0 @)ӯX7|je! -^Tط3+SO&ڪӄ]+SGRHjQ.9t_Xďdja1(~&ġ \8s3[Y(Ӄ+@)(E)§{m^$q@qDc/᪵*-`kADbzG3wY~E؋&Kp Fm7[!jlUEP|$yV&`E>C a$eKt:p!O< eS#\AܗPeE2w8'j,e-LLma.'bp XV =+]&@0~bw凌D31ȐT :a# ]5D8tUmrP^/3` g}* D2YⶦGb]0g+(Ğ>T%[$=4%: }>}@8a3RFWSf.MbdW]p|Mm " غaSN^WSK,7Ĵ_@ArdlNl2!b(˻A=+PV +n cD*Qo?eL7PS;y4Xݭe:ǾxU,Nv]a#?0:Lq).[澭Q wg`V MySkJLDvM:(9HS&I:x繞]U9]eDN|4;0vh a #0r* V5BZ4bT f2,m}KRK6g6br.Lbi618CC`H{d7z$N[>{G=2hϺe͑rcwV)& . ]v¿P; p6C ˬ|]'{eD")X{s9Ʋ4~Su7ɗ7isE VX%{ ti&nбo N0%/ڝ5&jKP(t>qť#߉Œc{ #`ۛŻ1rQђ'! ޢ[F:@C@ gga3fTV*G(uaQ<~ fBwEdQp+d -:DY2bmĠ;%e@_v=RHQ|%⻭#]zt.5t?E0w?&ͅX+wrAͅDw 닯0 ; 5()7X}SrbjvK8|qbja-D"C ުbCv,=b5\pg*!b8TD0oaⅆ))0N^Z y5Y-lO/fݖd[XT\H1'xCKL}EĠe4[ |˥ױ6ÆJ6 D 9ۤL8u oN1Ggs_Hi֝T\vŰ:ۨV,m{YG9!ЪVռDHTveT9 塕䢦>% v@pkڬN?ѝ҇3f :9}{kuwS,Lbd;a=9 dc[~q1Ofѐ^l N@VV: L,yysfE.Yew٬3o(/_$nLb!H_1_bYts"@IiA_zY-Sq/eq%XW?Epr*E0\O(hݻN|(d\h$r*I-_J Mey`Rp "a&J8 dM~[ x膍zg:nmBX0KsޅivnSs^k+)L_a i)}37k/d٭3&U:xm}uCpVgzyY ~cv*G7tnYԅG+"("dNcY*SH+ey{!WZ`joל9M"SjVc6>ӔºIhT) nz̿FZ@;Xʖb9ͲOzj [v@{۱-ڱ)Р|뫮,.ꊪ͘8(ٷ{_S`bcIOoPMKz$xYZ?% 6!p.L;].R{!Dv*]zhpPySt]] z e?zIeu3,blǟtج+Ʋf^/G5v1(XFl`0ie3ojt-s$S)GxR;.=jPRUu/싐/_* *ۏεyecrҞu[+Y\]Q8-w_9uqS52?wΊ޳!EB},XbX`n[O5opo!y.O5K,jHb 7@@q)"b81vڰn64mR46lĠy}#8oWqvĸcAmLH^v6rNcwjx3vY+}B=BL07k(n+K|0v/u"iNufHns' _xXS䗒t ߺ؁/MYkEHkqQBS- [RP31&'N@<0]/[p&&;-,c?0W>vUmx߁& !?N~$ Py9s$ gQL3=ZMp6d],۪6o78 Y߇\38%6CdElѡDL'k"GΟ6yHl;A:ej3}yg462yi0o[9ꄉڭQL"t#L;>DX Du3͢]XraO6جX֗ɝG)gݦpIG/4O4sĪ&44ѩm̚,F8endstream endobj 350 0 obj << /Filter /FlateDecode /Length 7560 >> stream x]Iq6|"|2  ï rˌt`Yዤ|ldsfsir4ԯwDfVUD.nҘMuVV.~LLL?Srw-dNh:h-:݋VLV*%|#1jgKȆ*&#D[+l0qd]K3Ic@*iS?IJv*N V~Jݡ 339)왟9G?;߯#E;W%B }3 ,8v1`8Fee7W㕷ث0{k~˸L:>JF\rN*߰=| 6VZ>f&N%(a4K)~s&:y놟һ|PK]uo]\f,o^2r2HA 쑂LJϭ+CBЁHK4l-[9zR<]w|c3dΛsK ثVyG-`)j:~"j`DsFLZ~` n |c!6e^;>=Xzq]Àm6hBLRI?oOWmo% p橀rlnߵ3 3~98Kylpm/! h5z pO,e/:m>?&8E`yG-ʏ>qt'Jh>*4^o^e} > `c™UfRʃБUJ(Uo?$ Up*"Dd<9|]Ql"rZpU@ $XIBg3l%iyQ)_QǕ0^NsZ.G)o,I~)M&qT!yMiB!j7<8XfBuR%Q6X)ժ:V kf %obYZ5L7+ee,T"=ןzX@ƪ=YE6g@f]4Lh*>Mգ_]<ݣl8Ղנ=Μ6K]e]#W8^I7V|Rw S5ӹV$kl'aL??9)3տZ dd j^'|B6R $t S31+:3Y('1ْcb"^ytKnb&P>IW`eQ42ma>z+I2cQ!0=g[skjut z[?(g+ KRtw4|8UD`,shr&ȋ䢔ܤFWb&q =Zt{n`k%4[kkpt|ztr[6(WFxcf?6K]އn{A]V+iܸoS jfnDS`_l3o AoJrO"9\'V5CTš* L7{6*\ayAKbDq3 "+#)!yn Td42U"(vK>eWWpqhBPA\1nMb~, ^c?kZ)8墣WE:in žGT0:¦ћ&j^d8ȴ>yp5m`A|5<X no8YSPsy=Csvڀ"W(>O`˩ޤyZ--j5k(Q$ӋL|cx\ahPR|i ٔ"uG+pxGSF z&*S}@ɩ `ij fwJDh/ 7vi(hnqBn(L$'tXRVh J@)CyD{TJt`*1U=vK@Y%T-.'ΤNG%V}7kN@y+$kw}}&aQe0(y͖StIA[Tm4GHU@ʔe} ~(T<(ըΔ]zzm/J-JN΅-7T A oWk6n۟=ݏ X mP[ _D uit`̆Y=E08hDy'*H¶{L)˜C`"|<@Gj>1۳3/YG]j < ej Z_=/2i-8rCbn>ƱürqV5$eHEPao 7i|[w#3~1O6y C2#"VV40 n/7|̻%GaB!}L`YҬ0ܱ|"BtjQ"} Q}|b`Gʍ.yOws`u &j`jNF,45y1u,2>vXt¤(6]nx= e %N C.?{|)F KC֩#{fm{Gr6ЕVMr 8,BXE8]=$zra4Y03Zj  uJ`H9_++IL* Ym=Su|LQvS\5Jqprי*2$ V\KhN%T= # tD6< `e^`[Օ { 1=,'j0eYm1TW5>9DV u]HUb akT}DP=Y$4NrCbZ}ÌYL :a БFz5ABؘophݬdž#0-MaDJeq̇ś.zizXV8WĮZ|JB]-O8r* PY:Ł| N=.1 XxrVOa G,5P[Le*6 <"cUetc n(ֳ-UלGφ\)eTO?/aԑ*X!Yd9^M=Tt !z5zFV H/.I(1dL3L8B% . p٢2:?χ^w%ݖCG\}C`Ts&,}=@LRĎwXxL2tڤPVa'0(HSiiHcĬN\w7AVgt71md2.z.۸=۲R*&+\$Gw¤zo?]&Ƀ*!EjVtBFƻj=15@ :=L\832 E>A,eFъlQP,iN-S.8{i(nƋ7ڥG,HFdz2g31R8JyC1>G+-@- ɬO4 L՘@_p&.O:F=G,?됏U.e4KvBx9jN>sE`s-yA!TeDFytH4'D+l??/tQ{98:XaetXCḢqec^"gpVk žN3~έoP4LuP ')a )څ?]`crm.*7#K~^DBDQ[D X1nCXj%`++jyhTu1,ŲޘKe+=,yh&W-74a$ h!\UU0*TMRZ4U,wRyC@)-KPW#lx kMʇTP8,'Px NߨK+?s )mӺ9O[ժ\οKެABʽOhVI^}0 #&l]>!s YXeuNL/l:B tg 1p(0a #TGh)i2K<X-tn? ;ʧ݂t\m)sqӵY5r t+>o<΋_@Z֝jYL Obe|ͮAqťkw127U.;%}\O1`X?1 휬lSf cHϝ_0yD*Ț5h_ `TᲺUi4QD  ՚1`d [Btafв¹0cu^Eتͯ0^`$_h*0ksQgkI ɍAAKKEdbZUkZ\[a Jm,@Mt /5)0L.jaT+k z1R?P C 'j#XOSCX…F',U>,a>1?e!&+u E1u,ӓ ˑQ aJ[(QoŽ (<%j= (V8dKV=^J`YQxH_p{-9#zYPpJ5G#!*_B`lo ޳Q(){d@!y9Wͺ[K,MsM$zQa0J:,!AB)&T<&Y oC0r|;7S|3r.*VŞqLqNNVLFX-H ȶx4ːudasb{u&h7]-V7[9-x6|1i"lLJoJ`"%ıLlu'X挢'I»!n#[ֳxnvO2 Oaۗ|W$Vz IJ Licz- 2h\ͨRY]'DG:H6q:& _Or3!+ex(hp0n*Eҿr7J^x lDHpapiN;_ٱʇυkq)9] NjSx Y*ˠr'Om ^q0B۷QsRzl#r*?4`,59nG̦?i5qrs\60B^W0 3֌k3+v5^kD q,gt$«endstream endobj 351 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յ Y b1MI d#"Y=ej8tM'v ۦω2AC)mY٫CZ*K X3: (4nhdTy(KxU~uѬ=EXc^8Aȣ(9 4|]ݟL_FS-MfV+1AmVj<`oL!haq/x4X{ >R=Ok#:c48y^@=y@| b 8*4@afRzFn$9 k֑VhxUF2G\ lcR jJ.|{*.+b}>/%ɋJPs03nM;,&LR04rf5aB1&4W:]05H]h3BSa>E/u9@4Sd,:o&jXW#09]Qu JDIh9Zٮ#^MR+03XeJjR-qvvv^O_ #C񉕻9G6+ة$n_s?9ذKpu R9Zq>O6'M:PIӋ _=—=w LbhBo1m&^kkiiyX-B>qz .1Z:Mf0:B,Az00LX W@6i9-`4@:O78Z³|8 1& ;~x'gκX'.LX89)Be-#h-c4nLtd.HCb҉"~o4 wC˜j`hҌ?u5{liZ AB'0i5' D3W.?_V1[KNǸVQ1?/D[V8^A*C}j-2局uQPO" }~7%uL4jI`Mo8Mg_W79Dp.oV.b 6W.3&Tfu?o@i! 6v &RּCo}kE3CShĒQt-|LJCΏ uR)nv Ph 6bU4ڪ،զiZuu@A^1]A#C&qp?PMaa Wʭ34Vj#dgnQhIO3lJ /ac~$bԝ]Um5 {U[J*iVU5Dz/g'u-~*$+ SQ[08'0?HYH 8^#Xgy/֬bJFo E10c23^ 2= a9%ǹQ9$ѧ(EB1t*gg̢k(!:Ju]:=@$ ]e'`b;{K_pJUiNNTC T^D1X]U!/9U!\\DvoeiQU//7I9p~? c$ChƩbuNqh_2.'6 %{W62vcpn6h(USLCҸ)l򉎫Cղʈ$]nͦp&_?>K{./mN<ۃ^ī.k+g)߶4Ԁ@l꒜S>}wm8 ttXQQF;:6+~alz{ #ƺ6n~JERD BX7;̈XfAoJ53&5 p&y-\@R cP1*)~M.siokgBm`CpقfM]oB+nP?THQ~]!U_Wٷ78\|dK ptZ{d}YRx4h=4͖E8oXsע\$*5Υf0 *u'h9Fj5,`J5C8`AĦ68 ]t⼼fkq7sj|ʉ;"B>,Bh%pα@yv,k'X7^zR7bh7]ヘţM7Eh˒pU4&uc1Ïcքh&nT&;addztoag7Չ=$uļ@GKt(NXc3۔ƨ}<6[\fE[7+3i]N'N|6½ֆ/%)QI]tz2X+j0`/b6 8pCte;|$UWذZ+ow#&p4!_; QgqQUA!$*YA.łw4Z&5dmsU4;?_?'o]y;6&S6 Ĺ Mn=u* -C`!:0aUdá2҉$<oYkc[=S/q*PIbq; %sr4&OJxYpI꒔/ѯ{ݯ%ڥ$1:c_G}mLgݍЊA`M/آ/]3 jF`V:<?M$S˟xYaf {Q) +{jF ɻeL`ZrͿ Ҕ{aEn'%(zuIʻ\J0gw~)?[8 n}wlTh`d"W^?s KT_f}AN)2;YoK~)EZ ;JXN-cf)x9"]U`#5hGFiVD6Mݕ%&UUhl(q4@iq_S/5OoӺ1Ys#UTl@jE~7^z|w;N3AV@>(1qv|V "'!({Rĕn=z?=s7чR瞷HK)]g1soup!I8>?L+lֹI lQ}>b{v^_?D%q=f<{h㿛nJϋ|.[ަ!\:`/['"}%e*ff=![EZݝh-yC7"T^<9i*Rm{4hG?&iIF~@+h! i݁#r=CnE"f6':':9ٹE>*Wy??K4KAVQ|HkhZ>r +Ȣ(F9ۏOOSh-Hn"OW/OAU2X-kϤ ⺄UыChu1DہpX6ޢR%> Wϯl߼-KKT{^T= /=\P Rendstream endobj 353 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2242 >> stream x{PSWs $XWܸTUDtkjTA# $$!H+bBERj[[N]:vӮ{. Ygsrrr;{|.Y.}f ;1}`8ǶN|4z4 ]^ '>q77( *YnF<%{xܹsSSRHUlBZɓH4܅\N-j)47gtɒuR`4NQ˔ x@*b&G%ʂBFVnJbҝZq"[*K MJ* YeB˥j*i\ZnSK5jYL.Qx1V 1FR3ǎN&y3xy <o3/k!$\^7//Mb\_ vQlOܫqg"A*%e# _Z11G%Q] ,rA:*JӜN M6 ?Uw-S+݆-YHtpsga7##w\Fo%J0 rnP[1EpH(_yZgU鴻g[ c"Rl/u;w|ɦm5 oNR"_sp<:v FǮy+2b.{}- q?z[Ћ*| X -M܉2GuFߑ Wr䡭 8mJ$Z[a'.a,6T鱃, zY3n>x G_zZ ZP4[Z[D ٜfV" )U ^2`䔍.vޑڵL%cB{l=2r!%&!H heQ >Ts*pYϕb;ren5*ڻ!sH8"|4/ Bpw_zЇB\?AkdeQt9 {JLXh1;DC? [:Mk0nL1gtd-i2qA;vCZjr3a`j|2I›Q4CRyhqFmƙF$ctԈP7qBRp'fheǻu89 fh%,aob[/)f.Zf^ŵC Π[ߣ UPU;4hqi6_um:TВw<|\*G ,8X7{ra7RjjumZHop8= agVi7[O98%?w6l% _ze-j_7nGP;;jDs2 A=HxrOP{* s:}N#\! jKH$JyNOl<q+ZH)< zi~#{8?Qu^o-8jwWYl2|Jm0 31fH2M֊83 Yv'2٤0Ďg=J°G]F qB#!޺{>fW7WyŠx$\XoDQ~}'䣳̜fk,U5mk#m-Y~?>))j__0K<> {jN$0y-u)\XkqL [BcYrip},I x#x'endstream endobj 354 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1644 >> 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 355 0 obj << /Filter /FlateDecode /Length 237 >> stream x]Mn V$k6&VQ `"8ܾqEoyvIq͵7b8 bRm}t/IuwUs~Y?읛ddMnqj6Hq8p\]hWv"{TӹDP1,AUؒȘv't $2px7Nu|X:Y MjL1_yե!y endstream endobj 356 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2100 >> stream xypW 8$UbO`W@ t:%#mlB [%ٖ:Vի[%˶|[s))$4%:K:]LLggg>~,>;^].8Ԓ),HBB|9%ϠQ|T rf\[5"dy k֭]%5$d|\*UʤjTW_,SHo(Rx2jpӊUbu$S)d Z&-IVO[ejR()"R*1 //PYqobX:ebml' ۍ=-8 pb x@G}9U*z[dN}L1 goxo Q.z]ܑ ?{z:mUJ9&4 Z}9dխw-`~7Jzvכ7ZiXЏ nΨ`!%׈m`m`Q%Z)<04D霕R@~hqJTؖx?npU.2i黛Tf|<0K_M)LWw3w(aGwo x.*PTh"X7ɾX3 0ξΚp\Y";t ^r :8!'=ty/&:O4}>|fT Mr+WQviҖ䅱g !{ +u='T223Le+}{ mFBJ QzD ;axK~9sM5WT(WD':#N"q klj.paSР&o=4ol~x+.Z? ^حvR+-flM@D]kgx?O_'yBIpZ$Ųޗ4 ml¨~˝jWZ0OTm=UwЪ$hMm /&Z]ї4̃?E(Ɋ֕[\ iR^,Ʀ Xč~w[r]GpUL=XFpXJnw{Pe)@iqj09SKWP7ck0z|WdbU5ЀDܡcs#ƯmM$$`endstream endobj 357 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 359 0 obj << /Filter /FlateDecode /Length 176 >> stream x]O10 P*KY@@8U:Q&1};џOgr[[G&엨8:b5pt2E+ _n&ؖU781*uU%;k%C2f 3ɺd@f@ۮ9➈%FTz9#V >d_(Yendstream endobj 360 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 403 >> stream xUKAgZ%>KY;QRbPQXP:.6RANtP`A7;/0YA>/  (ܞF!:as" ~;}ËB9:9Y=\,Q5Q:bɑ兽Hn>fendstream endobj 361 0 obj << /Filter /FlateDecode /Length 183 >> stream x]O; 97 iPKVU xD DۗOҡ0^Gk"& "ƪۂ b6JX])v^mendstream endobj 362 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1624 >> stream x]TmpݕdiCm*1")jpmI&кi$KEmHkaɶlٖt%K#~\ÄLB atdh`4 3&|EGts-(d ˲uVT8>*yB?ȀL9d*%bEbfq0aF3\enrv1a 9NJ=V+2Р{WjuLB$HInnܺǞ'hll,0ո N3yFP{:zGƪ_0X稩N&ꬭ39sZ)Ås3̂VڜjUWmrϦNBK\]wW}7kfpG0YE*|%m b 6v=l/1vdgW0db68+%qJEHmFN}˧L+Xr_|ʨřIrl4{vtEP 8O;|ͭw SBx~xKx: YTFdiPGD95c ݝH(n"iߢQT'zͽERNB\Is"}1s~hj5]ZFTN9g5L3$=^H}P;2e}x QNh㴜fAaxDh so`9xz\dhqI_LƫzH~}]~#{0ʽ\NOն0}l7 Id1T+&]NnhGOn({v3j&J|:D;Z*AZr*-fkObF?Ş/NS[٨}01o%2Uz^Ҥo~Vԣ'=λxYS8ħՑP.cRQȖSPF U A,ťu|4 4MoБv=^VK{XDq3ZM~<SbϟET5 y; RGг|wtejI _yc/v_|ycܨp,'RP( .hܩIoZB[cWݸO)OYp;28ڗ)]Y ?b@endstream endobj 363 0 obj << /Filter /FlateDecode /Length 4332 >> stream x[ɒ~ˡ;0b)d[FACwuMwij_ `mN[P5H$L@FT-/^V}Xs!M64T: :lXUoWiZU Q}h/·11n me?[|{J h#"T5J3~S6@4FҐ[Fԏ0* 8.x41%%FV_}T,|j}uf/*akJ4ƻbnvA![/ q7 aide,n< Xt.4:'.4Zs<ˆl4}NPp<‰Dy0"_x&A5)YHϤ>ox\r~^ `͢z{zۼ/vSTfhL Wo4>sՍ7f6QFJDZK9k#wûJ"Ok_[7|!,° gA㥦0>gc&7h`zNMo0hˆw艘;|W 5((IJQs3 -ĕy~'m8h/no}cK-yo&Hk 5I) j[SD0\Op)$[Ղq-r 밠.k2fhCͬ5o?9Il[wi%m0qjTsSő v>uk]hZRT@Ї_d\/F1i%Z(D-zq 9(Zq饅xduqw=_2X!82w/ 3 gwo8#B\# 5>fo~6)a ..|C/$gxE#*iq!%NȪ`؁O7\){|*Y?&>U wP0Ąb JV1~]y,gc+Ϫ{),dwO^b,h&3^-iA0w [Ⱥh0Ohn=}JJ~'-% "2 -v8>ь&w6*\cT ʋ摗<wU,:X6#NchCmn19:$ʭ?@lw)1?q_)-"x3̑faH^88%41R9Њ"A2p71z0U"48p~c1-e*gI&`{#ptOݣTz BVK -E݂kۥX_3  d^8vyy:H}Z$( \펋ud+zN5)Ycм2,XB]:MUXd:`'ލ`~aZ^+@+?OV8=4ô$SׁT )J` ese qNV$iOA)')a%: 28΄H8B7NHc?H^ٙ0Iʑb4+wQ"ٲEQudV)Jh-VSU@[ԕw\ΟBfPo")EfZ9L()FH푐9כD ]TzgJ9B(u_^h!oFa㴱9danh?ޜ.4:$;ѭ7*0MVA'FӴNڷ{#,Qbm@g T(Fx*8.h:-Wn|g۷!ğ.ǁ:Z3JN'c$qXьsc0&ˆ^ 5$r>%pΨ:X>qBV,lr~Br SL|n'2$ExNfw^Q"D.Tԣ[ YF@`4o.C%߇:F!\^3 @lva"뿽ş&o*EkX*m1],Zq{.nr]:7/?=O]>n4mZ\D  _B6Kp 3n<!?QuԽyL"`O[Zر`~CZ^`0CgF^srq&ꌯ_E[S=0„Ej 'j/mn o};L0lœm%YMR׮y`βϿyN<&_&UT' _p~)0qUMf\*m+c^*U~S8"1ɬ7I`uJTv.ݒ0T# 𠼑X|;{j0]w8*e Pl\OHU=LӅS1hY@,x.gﵑAM[g3/Pa Cʕ(N{<cS9v>Ͱ /}߈;<keD,@i bp6Wl)@4DoN32/t7ZqKYewΑ{?/tsDj0^Ow_rendstream endobj 364 0 obj << /Filter /FlateDecode /Length 2963 >> stream xY[o~'#( ,p;KHS'h#IJˋBRofvn˥FQA3~ڐ6^ogus{:VNFj%:nƔh(c9ߚ݌2|y3i1FELE1Kf&cg_DG3G_hGj(UG`NKBdbdLS h1+BXUKe+1RuZq#TzWi/MJi!Vѻ>0tuaݐ|`OJ>n$T rhpb|qҥF3c8LVbc=NB Y:%/: ̠DHyzǸx[738N#vnaw(܎VL4Baya`nKBqmOeO = 1DTBDKMU^'jҘȗr=oF Yd.Ӹx|kuE +W]m/yRw꽫Z o@h|kK'YL:SՠHR>Fb|2 b(nصkxW+C U0(FP=Uo)Ud7w8Z3o뗻gqv?wy؄x +owZ>CrS{?@efy&sWj?,d^-OBI`[>2^?,wuTpGR+X{ܮ7o>~=ၠ0> 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]O0 }b CAp}Ilk6|/`,@4XebX8*/d{Sj$<\yU!t&D]MmL#z9dT'\~p8榹I*`~xS /qSendstream endobj 367 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3596 >> stream xUW XLi?483A(ʖB*&TJV {-&a ջIS&hYڗ?g^Wss?,zP4M[e.JI 00XRۍRd%AVz؂/I}( MĥL] {QzFrdlQGw}rA_Q,JR'̥TiYQT V(g%g(#i+2IQSgO]rADAJԨ33,TL?r(W7^HMPj&5N͢FP1T,Gͦ>xj*5J(WjLQӨj,JQT8MEPT5H9P)9zR'(K7ՇKR2Sv=ES>MʂHK?zHq[*I<,[ܑ:H]#9RDKNMNsܯ=s%oIJRkGqB{}kGӽRZYuYZou1!5jZȂ|3^*F[1xJ/JaǫR mc n/;(P~qUJ.(Y]rW%rzVU ZXm5@!`/jZ8\YU~^}ArN&<9}y !l깄~jeo< BYfCŐ>i}'(-K ] <鈃p Fן` {./35d bPjN-} 1: /7 BofN["lU1>̟A0 {{bLQET#'0],8޽*DNtU#8kε"7tZſz =0 V(dA(zIj$\Yyo"{EMtnNk1haA2RC>a H>xLaa3g#';㡊nB0H3x C!P(kMۺTZk dlJj~ß<9nۛĽde sE d3ް6jx JKe`lMݹ:.[> 6RJYcaiZ8 >aqܴGk|u Γ)3a0Ay)&.P}Tmr8$8/% C}РLlyVݑCv/7ݲ qT(b$6ŋֵCqf{J!N(Y` cz\ԂOT7pMfi8oIBt GR#K0HL7|2TpcF\dƀ 9 ^p&5;%U:.oވF\+>kyeTgs/Ο ť5!ꂍKD-LB!=)+&xn-:n+£Ese."qiknuWwl?8Q1R[m!ZTGb  q1WHZԀ?)vIJ$֨TOXYuԅ&wbOX1e3RpḄ7tFk48UmxĚ+sD,?!fr  J.,(@ ї )7A'G;~猪h{v 7X{&dzu@B]Gwl_ok3ۣ8f//CJ)Rt^ةv,z ,3`HE&Z.֣C \act߄5,<GnF_-@|Q&fV؊y`O0 ?]?QwE![=)W |_l3'yE=g\/1$F=MW0Hڤ~2'B}umuWn"%8t8Hj;-1=šG^?Ԗܶz~g݇/nh8b֡֓K2ܹm9,o`WJj?iGpH)]HԱݪYZgr ' ؂qت q9&9H\l01u>LN* s2Ol}=K>L]+esXL^|˹% Ԃ;[u@12qN$`^C^)r^踤\:DE /;^Z-?Z'-亵\qkXp5'ZN " *o`+R*W i)qt͝[jeY3~ "B)-V r~4Xh>5/u$>p&(J{b ƬFVK÷h7:P55L ]f0H5#Ibm+!*kEֿ ya|# ??{ٹ-+{BK`؛f$3o' A=%.=5 9ۊB>eГor+ zaIXiz\Ԕ~]X_;:Qk `/|m޴yS\~RrB_ߛ3nF;wo;?ZZp1lP5VT=ܠ!*x0Niqqp+{R}-8`(ͯ,砟>q5.uZs ~4(y'Pb!~׫+ 8Eʚ#[\;HH 7޴2XX ~Y(5o*/+ȱIťC&cnz.$#}Gx,q;lb<)|x!?=8rʋVOC0Ā3w`E#aة"2 b牉!1tZGž6W-u[ 3S5RTtHχY "s]qoh#:Z2|?^Q8?7W],D~$ qw͛ڧa^mi?tj?ƢԨ촵6OkߜWZz5k=y9 xE}-[A1мTlv^7#&mt_)Șg%!dTvd\wR!{ę M;Mã7KGQW^>z qs'RP3Gέ4z(gq)ZVg3 tp$2S&d'}\>{6 w6#rbe[qz=KK_)8#8-F@Q R֍> stream x][oq~_yZ; `mk!FMQxђ_ꞙ Iy8׺|UuNI_ބw/w/~z''~ OX{Ԕ'/߾ȯj9yyχݞΓUl 3դf?] >7IM]#77 Eϳp;}Mz<"M99xOu <_jS>]xϳ2O!ZX<1OؽM&5z&5׸}JmW|]M(L>Cp?S#41^4$pvi@j@6`f?Wh$xYm cڼh~usSuW+w[VA@[5*4N02 9i,MI9No/g E!aLxx{qh_d sϘACV̬2 6!~܊ p?6pɇqΜHAф4Ӧo`y\dž-Jd2Wysc/c{:?磻` FHZ;ߋիH˃VMѬx?v#`|xhg g_w)Rs5Z^UH^&Ew#-4NLl]hhs42Ac@ؼ9xs XaY`AHM?{h8&o-Gf@6)eeH5EKg&N&xNRO*69| WX}@u&836ym63Op`ثeq!|;P"g L~k{Ą j)Aūf)w7wV/^]]rqj4r̛̿s04-=(hǜxu?'=FvzTvD3\u-~ekwkb@, p5ApMZ` ;QQ߲W8 tg)]ݦؼGܫv9.6.%˗hk+qMjnc>a/\MU+! 3Һ:G!"^@#Qfd4EDQ✭.VdWrи#VjMoI ]!٢5+5ܕ?n7WJ9U'X^ βۍ+òWBxmx-uTֿX[?@–hKޒd~A[aC \UۘT{Gp&5Yz4. mA%.=mdC-ɪ䡂ʬ}R($r|](fa:l^١Tp^Gd0>& +[UBlYLIJ0}Jkb gx22#dbXEI_,Fԋo,xg_XɎp?i5y}?ţ5-r%`a)Cnfs{sV"8\@OƗ*NίA"G¨azW\W%>2%rdaA,Ȭ,mY4,h"+rjpz`nbX*’Ia J~f] 0~M-D/N:˙@4ovv鑾%Q(dZLک*6隻| a+IoF1uʏ{I= ެҢpb$lx] Sɠ#4aY:K&F;:pw X BO EGWsX2`lGWP 2\3ſgW)uZ @Qsri/[y88Dõ=[9b\g9d*`+㒈Scx2 t@ƭCTxՇ D u4Ҵ Ixzڼ8/xlB-."#Ü@q/hGrWBU 06"1YX"o9*y?PC9K]h?lrԫ&z-s:T9'}9O Q=h\а{LQLQiSL(^3.¨Rzr޽Pʌt -7#YTQ3㎒S{&CrOJpHJ-6Aj./ՙ<|zl3tMٍ>9ʬaonmMlxJxֻ*!%YUriH3*,ÙF(1^mAqnUs3s|vpE}5r>ly/:'ق5'w/.?lPS\'0hz 8,<5@Ͻ=EȲglZJлt\V{ wkĐ~^YEǛOs7h38ʒJ|'8$x6qeX7D̙9lZ&@?_{o/(FFmNT 6 K7qb0hȼXw v& Z_?IK[.k\*As4kz%}v D\k_G5@drTi$5[~| H7)=lV)u]ҲU`_I'V `~U=I3ЕQZv9<^f[^L)vi oTKuե@Y|x\ 9р5 eXh;iGj-ܫO9{>VNbT ,^<ތa镨~f4:tEw5CgR/AgS3%2=vv)K*Xѹ,DQ3h[Q,2R f*o ,4j+'xv=[+X7gJFtG_mR<|p /&,%%v5xf(ߐLW(IĉY@8Vl'FST qRͳq)+[:?'h9mM>[;twB#IYG;~tC e#@9ykC1ɐk 6J kTnq .|!GlQ34E5IfOC`"nzY#'<{Kĉ(P) (fuV9uKJze{RF-rÏSA-mgݰơT"ʫ'Q"G~9bQ+#4ҰnCYB=476Y2͍3).%quEk񀞬M6QW;R]f]ê[e_ƘdUaPꛧs+6(.3'fR1J0W_kL&y_ uM}mBn&`i(icaMD:RtCx<|&lX\+*TQfqܸX+Թ,8p?Vb9gj)Q2pM%wUSU1[O"C;d-jq96L-CI2쳚 XDE -Bvɇ\oE-L'ֽv^yxTnnFL5ZyeZX^SVƬLua&BUan.+Rf-+¢`nb-1ޔϤ)u+*xWaBqYUݹ ]3ǞAM.nUHŮl Ebg圶ǔqH.'4P(\?uI>IVٔ䭅|.J-} BZ_A?.=~"S :|7i:kb]fIBУ`-r|ҿXfo_RYp\5;ƭ;gKާӽ,!D[2im^η¨*աCj}/z25'XlzV s&?]xphzNX)d3 [xtOd c"}7WKyXJ $6%7NM:[_RVc-v/:%l5YZR7S318{9dڼ$ ߲Lo> stream x\Ys$q~#3N~ C-)Lıı;3;kvvH]GV_fe5/o6n<͛4uSsy(ӛ<`YToAE9=~ÏϏOW>(5(v{/n럔>\>^߽COFzz{a`Jm!?풂1j Fn)c>/F)m2L?>I9o>%L|*! >F`xt VcSAkqjej?do'2Ɲ*sz\6&}%Cn@fRF9[uO5*eyS#<-1Ń x1rg|λA'7 3 /^k X:Pюج%ӏ\@@dÏC=K #~VT顯{QlCva@EsR)9o]/1; &Q2NSgTz_zrlz3KbfIqr>wQ6*EYTHI]ڢ M(PEouUE bԑ Qq'{GSCX=hb!>pk-8K[,>mlsYYQ-y9}j ajg[!& x!Ǚ27͐:4*ecF 7]~ =4ttJ `1z_b-~$.ˀ:I/Gr${<){rКtHތZﺱ Eт.̨xFHYJYH SG0k&$T- ~mG[wrty'w 솷DB7 sH@ B .d wqaU*A&ouu6JD)!Mب8y2I9.x&rю5.$l\ 5)Q ya LK`߹ۑv/X)d">Ej!ۘO7r;$%F̶c_ 8Dq. ?\G xZeCklK4lHVh2l0ŵdZٓyG*߃ ʚ1 0*ؒ}=!ACs(B=cbC  A{Кtst,9X-,IF DfrS- l7[a=V?] =5ҟ9t8[kئQD ;Z^ԃ_gD?G aB/#Rpw3ټy!@i uΠe0.nl{N:<֤sqnVdy!gO bNj/חo;f}()TQB̏ N)\٤15)j>:pP.sy0:=YO90'ڂ@mU5ѿWdzv5n;gtx*}DڵRc!zq"'|3R&KzI2;RdJ.RU/~[hڻ@ӣ- fF0+#m=JA 3HjJ9JS6Ka=xD^V+{76Cp>J1q Em*sǪԢ\yg>Ƥb;ZXՖּ^ֈB!ԏʎ&0=3T:8bӪ s%T D\ 4/#K!jsB=Ahm!u +o ̅&c"m1%T%R&F`->#v?mWe7C=߲Y]\Kǒ>nͅfD:W5V Wnԩ}:݉9V\p.:6mF|~1AJi I4J=տ#ĨT&\2+)_lJ(uyqFO̒֒ty$kX1F'3`Aѽ}eAY'5}mj]21Gb`7hl" x)OFzJb^8񋘋<*zt;¸.A]ḋpš _0RJ6i/WI?p|(0rr+&.}WQDHT?ņW7̵>Nkt6.7KMA4s'%v?]ս4|k v4-%Nri> k@ XxY4N$ :|H@fO9I/lES𙇶Xe]y7bLr?2Gk8c]an쟃 D#Ž _q)5J>r1AzM+gu L7Hca ݃_w!E۴ Xԏ2K]Yd{Ί&C.Tun aBƟXPCG-Wx+hcRɤ4O8}ǁ}a>:/<*z^+qx=29 PF OșȖnV4tA$o+oAlS$30DIX ^Gd0P0pQzBSťRz^\Ҵ&@Ɣϓx<iw/us8WOje0rڷk.=(<),<̓ZXED.BH wXE8-ЕX6"ccu_7 X9"S5,i%3e\HJ{VXle_vOiXzPA_7eחaO~{4!\'Ur= <&H迴TDžON[ <׾VbZI0AlfڑH v R;6`LW0^;' Ƅ<#y=w ,W}) YwTC!7| <,"cn*?Y*[)C]B[{[Q}A't+Q%5NZad, : " Qȵy{&Y_2[Ӱz$<T#鶻x ?T-Z/7㎵R͙6ᚏ܁yS:a )H-^K`ihdOM{T\10Gbϒ.UNN"JjDH;pq6{ݓe?EW6TQUU%P%k:ǻn,ӹ- p. PdYvHHendstream endobj 370 0 obj << /Filter /FlateDecode /Length 4091 >> stream x[#7r>?B0lkos1{5fFz%oOn l`5lvU?V?Xg KW^~,fgFU|Ϭyˬ]~l~]nϗ/ c-y6_oX+cB;**%O] 2>^IZkl[WU_!k~EҁxdZ),SY$#"VHכf'H8I`AJ )<uOE`,E~cL;Fqyh/`2gep!r:e:.qLһ^ qqi{!*α@Jr-&sd63W#WVsilz TTx/Ҽ &0P_Z㉩u zy˩\d,a{fNzsHt}'\ڪ[’G?62KlwCzh9%Su5$[o/әX?. %;f!3e{ܜ#x&dsvPzu\ Wj&{oq p "0_Y%i.8ɘjAw'qaΙ90xyG҉fpcTHX/m'HKuhgTt} m$_e.lXEX `^+)D~]:AX,}p(*_2̀L9LJ܁Lp'TU!b͑ ,Q>XP* ,IoG !HPuA4H@^tkѣS%UjMIIaC]M?ͯNyV`h"9Qt9Gv=MH^҇rau|"M EH櫡4%S>,TEi QMs)/ ME*됰si]) {9a:䅎¸)6mGy_4g$Ff_+}#ҟ7V Qy$}9?um٩[l,xTFY`Ӹ4h:PZj ;aSv1c#$Wc ǜ)2O)iԓiop$`.:cs ]y:c M eJXbMÐ_?aK!tD(#l‰Ćy]G/: ]x!M0˱T(n:%M{"cHuD@d 9} _X"1NZ>Jԉ+df0zuu6gsIb*TslrhO Bl {U16Gf6D1F#4q;v4<F"lݖ肘3N&ePϐ.M+Y_X6ĝSLMC< O<=*&UWAEe"4Fl:Xs^8Yí.3 9VZ_D\ͫ?jEзa3h,J& 򂨂~=#ä9s~ĮDs]e輄M5yi&1#ЈOb=IeN1G8g]e6 10ʗM3(>ƿy(Vs⬵.ױcU$E7_(\⸍U'k)ޕܕsVH^S?4fH#c_}2guiH$}0uZ 8׹fL󚇺^ȁqՂQ<Á^w5?-)rி5\rcv;-1MG}?UI<@J艃Zx%5¶0wV}XܜMdq;`ӪbPMbƕVNLԭ~ 5Y>FI<ʐFJs=:t*|K%ϫa%}PukS_j HVSE^j[WNo1A wHr2&: _q\.:$X_F{SMWɲ?P+ڇ2 qǚm&~ Rb/V=TsxJ4_,mV녌ne?c̼oS]ԙyڿ y\0󌤝۬/;3pOVV]@ٺ3 fUo:J<[.uˉ/tr]Y{&½p WGiUӡtGՠXFUWPS~Y3 #jAA.~]]ݦ74ܙ6e#%D[SO7cSP2 J(;T#i_3X]5L;1Ǫ YOT 7Z5Zv__]7@"i[TS?~mՖ([^m֛ӛ|v=f{8{X|dtB=χm|7tdmrNDě,orw2\1+-).}]ͷ5.F3|tJs9ZtpyK/IF:6>nnop9[+-vpYO)߃z\Oߞ$lW96tU-ŕ. ne] #]L[j)kײY8)WM{1d|Ns%Ǭʫ^qX*h5[Ht.2%M2HCTendstream endobj 371 0 obj << /Filter /FlateDecode /Length 4566 >> stream xis,7GlQT yP•PC(6ov|tK{f"GyGj[}ەJѳ_]ѷG2]?OBɸr֪KujE42?K_/6"z`NF3l8p{1}8dvޅ[О(B/%6)d,t9a8F%4j֮x&%B,)*M&AEOO !u^-mvF' )ieXpFq{!.fGU^e nGR k(Gw8rޘQ kQa5b\>SH,/'rFE䒂\gK[=jJ0҇+7פ"DI#\fs&I߂7sF k`~\Z;g%b*)|^y`lDMUHXSla~`|(YELG+8?Q)9 A'>쫪%RDv$>Eg`'zK Ϧ6[+%`kFx쎞l-q~7 qFbJTʙ,YQ& *y@AN5(,B GFd%Q= `'b]5%Õ\R5{,l`0,u7yIvbJY\Ӂu\cmθݾp++u[RNU(uiRFS󪭅Iն ՘K#['СGc) AbX,eU'EoV59KL&c.KWT/TŸUɮa[B#nʡ7ީ2* K{'›i2S~ zBj4c>u',"6,B 퐰]Lf2lC:TѴ<<&](|%YMm`Ͽ7I:%gҫ d"Wc&#(P)%B3(dź[y=SضxV\bf6@KcxhgJ =ks)FB,`L!Y6 R>JlsAz| oM0kQD F }&RRT) ?rqlːkrbÚGxO5k{R /=5MH2sO2vm&wpg\5o)=j?\7?QA ^Ę{4 %'IzIJ)R#>7im2ef"e̐lbᜱF q@ZO#iN&W K˗+nڤ_m@Q<*D7v:rV X$]?UFr".Ƣ'e`e=Pf Cn>,^me5g5nvk/`9-޹y5nVw Y FOzG'!^]< SxXw1 yVX3WyFi)]! Sٞ޽$5%"г @H_L2w>vN#`ܿLnXTמ,c#?5j!xн;~Ư뎋7V-вOy vv7uvٙEr<ՠj6cbRv|+pxypJk&g,V.QDA ^Q IaQ&!wX>HzSR)by^^?3;ܴF?E0,IUrDp& H?٦ր~QV);_uSICe"K%\ [VJJϛ$*7+,n8CU!JxOf|2dS0sw)&%¢EZm_H{5 bc2 C:ބPnn ]Y,VasKI\iaWumr6*TNlbH-^෻%+X9˶ Iյendstream endobj 372 0 obj << /Filter /FlateDecode /Length 5307 >> stream xnɮ&QS&$kCuQAQj$3.%D@cj'JyFQ e=ApC3*#gkD@Fy5*AXɝ<^6C@/f,LGC4H);V)| 8W {4'!!ѺQAy(S#{WE NJPdl܄>S: vЊ^577^mY7kKP FmH ;p 3>sD=pbYqc;E,GuC~<,\FH)\ԁLo$f5_<%YyOhw9U"᰸˾1+O0ԥL2rqᜎ;Jf>㙨 "0P 9bo."OM*=&8SYsB#>mDtHOXDI-'GJoyj` ?Gȶ4f$!х- ]yhF嘼<d2hƩ9RY!jw/ MI5<ja/{4~Xxp77|LOP%^bO*[Mt:‹No;T|I˸#VeR^'CcHA<La|׏;:57eMga{d MݺY-  jTj™OFK#&_ؠCV\ef&reL+y Gʠ|\,r,j bEDAi* αc"AI"#ZU+c8q !ڇV.$\yXP4BۜdKӏ.&ېPg%dTph'A#8fӸD|q_[bX"1@*xQۛbc#ո-~\JddLP) 8HE%$Kj* b:BHg\d'{OINͬxpp0@GC3Z} sY_FlNXW]\I y,5xX&Zi]l_>{Y֘I<$d3b8Is?& @.xLM_,&by`&cʤrcHxYn]<ٴPem(s%T#%l$zyvKŅZ!#jyp]\ݿ/<4ڗmW>C&7h Wu2c3θ+џDֳ;˺]%oE!Z?rڧeWe [7Lt# _=_HU/ K2Al%8aw\Y: Ӊ5$yjP6_ |h3ٳe5~D{ guFFOÄW*D]wÆڒq2኉ʸŗ,wtaS8l%.EOlor%@ kql Ι߯6wOjiB0 ~NtZvVu/7 &XL*vN\ , }:;8u]e7w~Yu߭WO & |s_߼FUEӽInY\_Haɂ@nֳ?|M!8|Ac|A?ߨf<y Rdg haUjR1o$Yj?OߧGꐯz9c~?\_ ?.dIitw˿_/Thv6jU|\2 yWJ=RQ |J_ugQj_mnvˢe.Dck)8]q?(%W?bD2}iQ_NH[ql;1|L ul3S6[>+ OE<+En`Pa}=1|,¿_?pUE;?nv70 n}\nI0+_Eֱ1ɢ)JrB\,C3ۜ2RB4Zͤ . ?K ӁXih1̮+ HX'q#,ɩxX"}w vK/yXz+G6xB^a%pAC)@L0r磁ehPC}9]0)a;ms .w$ d\}bL }iQxT|g<"yK]riWBuj׹6" };֭DW#vg)O^a r_j<  ɎP9rG9i2B輪 jUPpQ2G5/菵֖cF:rt8:#=S{"P62%H0NaD8C nh7Ñi=q Ƞ!TfevZ:/)i kRY;5#Sa(cjqjS_ M9:h{?x8b0ș=gZ$8;9e7CSXV>AdTm%qW}3&VheeӞ#^[Upk7S#wȤԂM<4]Q;e(f{d%M"9 -ȷg endstream endobj 373 0 obj << /Filter /FlateDecode /Length 5822 >> stream x][o$uV^/ݽz{vξ9᯻BZ_Ů|gfpdY/~w8*{ˌk6W\AX-' gK{ÌͿ?VXs8 1LX0/&Xg|s;%PZB%4P I)֟N {i`1͑Nc7&I }HVk7٦oBWrymtЌ xL Shsw!.'e\5c.n5_hXiaxd)P/atí__v.7ix"1>2%7@uo:t 9%$~^G G؃R^D6ss gh dx:?,5֚c.:D<3&sKӚ iB ٸs#}fRKaK@@ eerG|RSX漌9,g^?(&iyq\ u0vFqx> {VһLseX#bq# @N;8/DNG3p }$'ef8/ӻut&YEy!ѬW\;8X7 nŒaa.yjpa5h-4[ "!ol G>mKcGamaQc/V%X᰾a'iWBUnT5^-Z§9]o_) * Bx*("OIi3{%[PH!$xr5Kz/GghiLsy`$9NA ƃXHʌGdv DU3o**[sPtZр*ՙáSu KLז @gA^>v4delp7M((=p.FsgF`t p|0W{+S%Q yrk1#8/błG{y@`_QxR!1y<[ ۙ$h=G=])Sց o `rVé;?YLܝő E!>r$ 0t#j K~XpBR&LO' ϡ}A&W-wu}(qVIڙqŎQ@d|WS6BG u~25[s-IYǰ5=PF{f>!\< nĎdJ#Ioe̚sVƞ+bkmMސ672F$OBu KC7@+*C6d %޷iFܲjG|`W9yIxM`)LxOŬԗܚq~ʴT#d4 Z!*GiQcbH1sPCg0&Ȗg0Ŝ逸\}1]~i["=a`CNiI!%ۙb (t]!S~nC$ƭW}_n~P@{5JoVFm/M) 10t\c( 䘎`EMn^̾ n'|uI(9v'Fc[v ,d@H&s IS\`ʯ]hF!t=PX|(8Hvg} (p\@ nCeh{9]X5u@`s;}/( zپ(K&!?wE&B^R";&n r_2(Xl(Js p uJy| TQ3e`m2IT$?7) yXcS[0WWb/Ac1ciU%yOly?Lu b끹onY,ЭlX(t-'!UL̈jf3BWe~ qٸy?ٙi+ZnThT<l[յˑ5*2OMӛ8 86p(YEu6@] I5BT "0{N94<UNY*\A^U>w5^j' ѵ7J*3tmT\d_`*` IĘNUtFvEbiq/ >FbJNBM=B j !jU4@n [.YsiuZԊAxڰMokQ3So !Ao,Gl:y8`⑅zI#tu+ x1n N]&Y\(W^;2LP@s{H_@z< @6k{ Xanީ.\xRVH益6RK72Eܛtr:|80?:zx Yo0*i"Dy6uASc =ϥe_/ 1£B{6ouO@n:95BQI8>ԪǠ"ԪS!|Q̈;Suyq0F3b1JےnZp)2hEȔ%G>-ָ{W0p DkX# l@lλ@Ej06 cf&v~9,hleZR}/_*7wE`%}) ;Yތ365'יhE>Z\Rnf63leFhÓbxt"$?,L+i4=MqSrO6NPu.#\t#R L_LJeg]T.nQS.m±N6? 1dR%'ա!)` 7\֭rMrbn]&sy "ў錥R8FY$p[3ARd9vA4caS Pqc~g4CL/6'gp47~K/ BY-VHoox^v=_&RME̹ztw싙msoSZ ? c{FCNiagت^0jC0x='Ԯsҥk 4 S72YŅ%4}sScCQPgCPBIqq{ERHͲ gܼWF*_p)0BnIuXvSʴ b?>LFC:ALp[Zti 7~g䅧kx߽woUboX -J#R 'R8}2A>L[8XG{S@c 2'9W@ŔH8!NAUoRTb|[T[7*c6L9p"WFOOpˋF `a*Sf .OYS%#|A.$^ Y,]iu'~u3f mvv (u6-}0Feau^agZb42CD7԰zNJL l,W,-B:ȵշr5r!}\+65L7};k 8|ɵ2+3V@x…&DGCG tv9{>t |쥇~RW6䓌@ ]}I'7uWBNAڠ_[;_Y BJI 7 %J7ވ2ȟP>;)>Ua}ɴDT-zo-Q {&}Чس@NĠ0w]YnҎyMׯnwݏ-~ײg m$zGJ5k)i ģ'OP37DٵSeXlZ CS)Dly'S 3L' 0JDu@'< s;5;"!+^IdfU$3ƌO Ea?s—pV4A1ڸ6;%Ps i^(fuC^c ozĶbHN,z+U\=.%̇\\ vOV x8Mw}٥u|8])A8-RmrcjԨ _%+u7BORvzǻ`Fah~I8`RD'e2ǿFNmC=|(+endstream endobj 374 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 329 >> stream xcd`ab`ddH)K-LNuI f!C'Jnnw }wnZ189(3=DA#4(\S[[!bd`hT QpI-LSP2Rs rSJ2sJ|@@a``` f`0a`bdd)~w 0wv}Vۧ㷳o߬GBk,_!;@/8@5h6jlS~|3=;^*m‚$^wՁd r|%~lcz"B\OL0aNIyxNM5}}<=<| Lendstream endobj 375 0 obj << /Filter /FlateDecode /Length 6188 >> stream x][oq~Wy/6a&$%)H"oOUtU_G9=}Wnt2Ʉg7Ͼ'wϦg?=S/'JsgUu2klN^WgQGf.<yVTB^Nl/"R<~ʢB]7XEuW2_gQXD9OڛwfA9MR q-/X9ުF+{֫$ fS |^9PiT=קER z3*XU0\o}-\)[e2dߔLnt^~&w ėLF ["mRݨoy+@qXP^8`ާŅɵ,SC|D\"^'K4[5^g avAhBeiuZPJ.rś EQ }hRӽ)1r(J21Ĺ9фb5a8,N+0f|M?i3iq5l`;VPkp051 1j2X(c-0s6WP]&K/co{}p1j:|LtiFƈ078Weq],X3$l -[=GKMP]Ym `q/ 3]Eɳg&L`e;dJ=D&v']ҨKOPӠ(V " K*(= R:YYb!=VR"7ӵW!-6f8dcy8_Ic3$5Wlŧ6Hob4y40pvc;ocʾu&ش~"^tF,c.Ը{I,yֆB}]';Zt;l7Oԍx >B /~pGjѱ+*3xu.waiplCR']McQ.E 0k3*#\r~Uy Kًa}1T|w*!Ebu)L{}_*G,ߺVpێ>~>ei8yxݕޱ.֗Jnk^=҇*_Ty߹u@Uo~l}^ח[<. CfX.%nt2oU&Cwe@  q~6p?-Uq p̾FD tgËn'j;)jNJU"b @$IOF2]mf5)Ok+!Z{GjEZOUivN$_hH)͂ \z+5g<ǾNZ2oS6*h x]3acAȚ2|LNj*qIJ\HMzP1:ɶ 97QL%a(m>SvU-E]O3Zā /^ !F]DgS@T_ Wօ` Ԩtn+d&;ר@Nŵ0,*%taT!m+$u񐖉q$) Irh x Q?L"H2לB Y!C3Y-T(R,Mꄚւ$h7SHUg}ӋosYo^HlEѩ^g3ɺ,YH'5Ui +r Y7s=eT׷N5>HDBWWL%+YW:ry>>zxFъe/Ӵ\ 0Q x%F]^GӢS' ?ɍcU.mʠZέPi#0@$&%󞨳J<;T\~`&cI>eBfS dӵ'<JjyE#}ʻ,9s{;p"zVc#VPx@ӢJud;Ұ󯰏 mʜ9B cἁu;tc^XU&M)%%)!$@J/GGS|#61d)r*(N֎Ås5_08'Xw=1N8&@O6N,o#L[XTsK'W2)Q(̋"FL ,\%Wكp].}O1 AA, 7ᔄH/MxD ?(L KZߌ"PQ$s(8 K;>Kc>KvĀzeiH0v gHKsf~ Fzo[VDG@kQ$ǐpqP$ClvmE&㸆qR:uPu]1&G2,g "rhؤqg1Q6'~)Ku3zvx5ѝ̓·:Pz 7hRJl%%RwF9 PЗikLNi|՜b%UPJz{%YgpC+dZ\2V!^tS?Sh:cpсimqZ,WɁC}Ҽ>J] <6.Qd/pT<͜7*q@Qx8,F3E[gTf ,2yϫn̹bǔ`9$Ow ('Q'mnACvf3eZ%JHUP]?=֊m"lVEZ_5rBSCU#T'9Iw:^VdKE6V΅ .+[θ3w;RԆc$.pEb8R#1<ã{.>VijGr$M\d5O&YL5U}md@5/T{޻Rw~=` KSuGrV.@[KE\'W.k"j#`Ki`<7>_ ݖ7Z:fZk_Aݿj˩>QUi}"܏TaoZ$>ɜշĈtOHضQxtCнtO]#ːTj+Gj!kҏ{!*K{XW~)Qr\ :?EWyifbӑJzvj. CZrg RtRaˈkHs V'%p6F)PcޭdCdU !'֋"88pO[> 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 377 0 obj << /Filter /FlateDecode /Length 7027 >> stream x=ےqyfTylg+<KrıLRvʻKjHA>;fЍ˜(TYh=ߝ̓87~r'擋G='?/nN~Fh}"'Oy'_1N,gkvdӽa_,ύΓ Zy^f `iQt?Ay=V&mgӀ~G8Q0f'OYc<+oqOvﲀ=8MAi %p6GNsqN6H>X!<av`ZtrR]녡C+䙜VV$']9 Fޞ /jCd\C[Qv;Dޕ? Fӽ萁t쑁 ^ 1"!P~? x*䳎X~|Z(L<$^]\"u8je4C7=0ǃ:=*DA9frZ2d ?[YmaPb#3h~nu}oӻf+7[CKw `7#3[$} UV% Z$,_6yjQnKWdj,=Ej rr?m[E621TC~CY@!| 6\C,.FW`WAHV0ݩ~U4r[O֔EeftY9wgTygZ1R芓IVIe|`E8M`^X2y4Ŕk1)5(経i)*$o΋In(0JWzw̋\dJ-YYQj%c;_]T,QcGj52Q"'ꘑ>X&k %i(M"9.j.<O0g:2k-ɳmDXx]$o*:xdut3Ia#0[Rh"a 6S%:ēlO~ѫry.IN=Pjg+k&[G)g)Rs)WZt" k;y"UKp'9o~e%xE?X Ӳ,\,/ D]Nhɑ^Z.ɢR'er.I,g]Ό 7ƥ^h*#p}SX9H^RXÛE*Y91XuG0uvpĥvƽ[bD+H}MA(6Jjϲ,#ԥtDO%>2뜮H:yy'"ƸԄKH$m 덬=ʈҰADJE06͇^(omi@{P d_W>< niKPA=ELs`0vf=ǘ,^6gxLSvq+r W/[>@ӓlmY[;TDLpI=,xdy9`o]8Gd6UTӌOSǏujc٢S06 kQp", wm .$':Na)Ϸau01fxu(7g<\.r%EcSe |ncG=_^bjKX9(Y T^F_fbv K$ Q +_柉(ݮ 78R5;_.=O{¢ʙr|_<4Mz\9ϔgF~U4Lu^.,-:(qۘ&|99S7Oӹ$C}"7eWHV*p[ xM23TPUt3`+tJ EcGW[.Pv[;V[>Ÿf Z9?s *x\dnG<Z<2ٙm}pa}JZ^km\BB6:,q~̩m$*,Icު-fCR}k2Ty~h܈iƸ8jƵ8QC ]8$~7\E*mnUcw>?'/:"k h́7 @b_ݞoǖJ4%]kCT;n(҈ 'l8]88Z+t B8;k#XpbKڥxr⭸05.6bsٹ~a ;>x%pvmvZTOGZ 637Wʮ L^zE8?IVh aFy4Yptn/ dQ+iP i4}tV3tCcWi#oH ;qk9&}Kܖt,OgU}GE(ƾ_|^ 9ex7V8XYSk$mHW5mEY"xlmk'Ib,5+"O6 oٜÒOJ取.:W۸uλb'D @oZo 5S@cH)}C/ 5[E#5s".tDo!t"'\qK ͱ}mS ++c1f=ے~Ƽ!a>MLPE)ƌf@<86ƦhJج+ omJis@H:iI_Y] ;)~JUx *ǃ2;ga{,>`Z9=&CYP2v%_z o,g(3fW;V%5lTJ/0B}4J 줗wdu>.[TxԞ̘N&پ U2Յ~&|b]4;lBuF2S ª.Pk= 1-h9}:Q ~f#UeuW|ƕbBDqeEDm, 0uhCO*.XKe04f0$-J*{l@l kĦR/CP^2Nd4Ol&)t'mAڊRR#2<[:yMVoeJyw"H=#uz `+˓'GEqYY$dnԮݧdҎtowȋxd#F}TEz|bS}?1.Ӓ]`ia7 }R؁^Y>_P3j]*+K6!g<88uno(?qoS2"@jY[Ď,bW8Kf7lG^Ir9QFV|mVH'$FCI.FvukY*n1[0^fzoܮU}DmT>}PQlo$8 Q=HV ͋v]VO4~=ځCAH3&zJ>` N/5Q.{čϲ߁a*]0AAL$JDD"xYHIV~mOݹ;rv,*`ާ+l>t!S >~a*.}S[Wq\Y~ ӷ-#lHQ c( 1r@5? ڗUYOVXj_^sh ɀr~.}t_o\?-&Nj۴HlP{UHhU˷=_Q??i1nQ[&}NCtFLBT٧Fe譮QO䑩aCC)^EG rD7TaO,`Z:?뜌3ɒRN4sRN4ʺѢK尲F"CW2>u5y5Wm]0?a4mO t Bv ߑNMC ({|=[joPj=вMbQ_k_cKÍ _^:Hu}t}{^қ^D[XTyĴKphi0YH 5AlGjendstream endobj 378 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 192 >> stream xcd`ab`dd v 5420qH3aÏew[ς 0012:)槤)& 2000v00tgtgvBWլuVкǟ> stream xZݏW "/\ E4|EBxIT$3W[Zof_ T~k*yo f_| p+-(3b-4_*xcmss~93yŰ,TY,Wչ뮱=0r<]|n5}ڭ\v=uՕW ́}.Q(<X\@BJ\QqG*|7[>[:Wpf#X)KFc%"qc biȒ32bY1ı Ǻ8vFHEuosحXbV Ls\́?A(0>y:!8u/q>h{Ucv 'Rq[ N+ģC^܅J)͡9ջi8 Wq~RǝXpoocc/cyy ~Smt6<Ͷ{nyuuc5w.J=wam^8WusHԻ_M |L[UWS0Cw&7'JN=R!9, x\xj>fvIJp׀TDT$0 hY}EX&i0.uo T!Yb?s! oiW&l{QßE1dJ2qqɫq lO}:fLV 9fJKSxdV= fUW&]~rURSsXഈ5 t 7ݦ]y~8A82j-,HRqpsyca]ՠC"4׮) Yau [J\vDCE1eҳR,x77G M*s+B}b)ToϜ`/i.$Uf1().'Zǔ`cHNVc,( Hw+O- ):O|C;„ǻ RKҦR%W7H@A!ߵh[rhba-cruѧ;v3&*eiq޳xYCf&{h-d꽍B8Qie4Km\)YPpBJh@R!*ɡS`DwS{F fbnɗO@P`' sR 1*咽\F[9pĭ[9b\Af4uŔ.dlg*C>?FeY⠟,˒ZM}D z z sOg7T;k 4aC%c [l Hcm%r-S遀jnm7+-M$WJi'' MUPkkm 1t-Tܒh{vdQߦəI rp ^<˗f/|P4΋_>>7xDŽ`L]n;QEZs[gzi3(nN+Ffq>WҰNۄ&9fz2iIK17.׉!}ca2vM{u,Z&._e=Q(v=l>K=tv-00U0-܍lH teHtn,(;328cfendstream endobj 380 0 obj << /Filter /FlateDecode /Length 2520 >> stream xY](2"q6>D+Qu%n ~sp&@,)v+7 LM{; -ӿ_%fJ2BjqTQGVlz^0bFŪf IBe:j$L˪cN pTg:;ӌC,=NR Khon"@c1$'j*C&"<辙%ӫ&W\rLmVrӺMێ, e;m)Y SUj?l7VrF9OQ=q5a,+8y;rAP+Ò9y^5~9:2i[Bxjj,)];z,sx09~Ǩ. 2 OPɞ1j6 4e{T]l-t`kkMi".8@()ʍHQiiU9waϠl.b2 D41ltD`dn>ugHO >B-)ƠH/i"i {81]i/SD*+\'4)j[zvfRAnPC0PQVQXj=sl+>xL "ʞj ԝEk@4IܜK9%EfL +c QR1 | MMH^ۚ  b0썙E rBiN.s sıTΌ&Hyue*2ͨ.rnk!%6E^II=ǒ aLioʀ͇:8-kC#}=tQgJn(\Q%X2BY9Oί ڝb! 90CeeKpĹ h><#h-400Q$ў[?<5r7N8 714^Qhj{ɭ]hVL0g2/yDF9$0\l*%܋#mq߫bUOǔٲTD{xA>UB$py(m$JLG5TWsU/7YE9V䘙Vjc -$tyȒ̩hX\ŷU.^'{IJ9zmlP?oq!\Xc{!rflLA٪~jo-?wV3A@ ?< *>҂0>}1H Vn|=gY4VqISq|F83ې{/8##endstream endobj 381 0 obj << /Filter /FlateDecode /Length 3106 >> stream xZo. %ԼRNhC h(PB*wfǣ6y7;;,OI.n>^M~9$(z#,.+2+'g~5_v7әae\5Ϟl:#j__qj-۳_5mwyX7\/ndu(9\8٣j:ӨfհȇUBiroա4JMf`i'/^E1 6nh>{q1 lfa#~io.p"1Q,pz{_qc~$uG7oM"ΩfIlz M+s 2!O\Ǖ4WH;xe+\@fhT^s |֏)Ag{pDzQ'vdxeRQv浱Q]}6ESZ"&ڀ1QXX˳#3)zA #ww H BmPPaBF:#Qi&@}SRhgh aLFsBU /`cBHe^Te*nX@= :kRtUQߑd eaJ]P:?$lQrǙuhnrkfK\h`~iYeJ LX_*R;%FB Qdj0-oFuڶ ^p#k_̋U{*;_z&3!N"}V6A0P=[qy!&"yz7e-KlCnzn7=2E'X;pZ^o7| &ÙBu;|ڮxv5ߗ]w:bms:k8 29p5-ڧHr7r|G))7 vޭ"y-~}o/0^Wx=ܯʛ*~~ϸb|2iK G,M P;|-1H|}"; q%"gʗ([N!>";֠.e OPWXSܬ@'y E Ǥ-VX^ |8||Ȕ= Ybd (^#" B$xuBy]t3|ߢ 50ZIR+=CfouPʺ#o`D*Cs{pHf*nXń l6(r}]_enhsx1f.k ]HCRLȫWGCEP ac5a24\>LfGO/?揮,B c.ϗ?ղTAq>s`313zP7fL -&/`pe@M զAc Cx@ \ B[U]̤P&"7/i(ULJd@Hn6؋oN1s!B}wjQȊd_@ytQ MFzhR+@Z;T*C6!*۬t}t-\>*&. MRIv*c^w9.ޟjĂv<-%֊]пi+"&RHR{[+ckm` B$u[ڷFQ_ D2R{9mGbئ` pTʱ Z+]TkZG |!N5qΥšJ.vP>a80 !,(|8U"7"}}lJٷi:Gr!wˣӒ*9 \5Kx~~YOOqk)TNyQ?.f P=*pJa%Ѣ5Ԓ<enB3?ωWԶu9Nכcg}J!>Yc͠Zgp2`vΝ,ƧgVGC HV3 ȉiBBt? xXP*]L*&uo7Tiv$ c1B笫ªr.ȍ'NC|\kU6+Y!ӭay>uwf`ƁzR\2LLbxl:K{&ZXM-hJay?D8 1uGNo#W Q(C+r4x@t4$;ffOW.*RY;κNx8Z CHn]=!CD$K`$d]x#|s՜=hA~f$7;!>Ry w- j=q?uQu#eE;:O`7V|u>q^!s]jychxmaY6;}c _{C¤nZ惚e}􌽧x\U=`oC C^dqx`B> W'bݷԺ.p.qaڃ 01ǙE:A:!tDn5 iKigEh3 $Z9Űң8&j mJ(#&ĽʨCt)=r~zz3l'ɮ"C:)t؝S(Y,MWtppaP5yjhsh-R>Z.X [#+ }A(?+B0eu&#-zZ^/my,*,!,`i]@r8ә mc9ގJpIk3+͈-!XztK헍݌ըԌkb~uqZ~˲H @@+->?3cvGm$##uUlQi|o͐~oDH>~wI~p˃ÅH,vn#*<+7_A6Q\4U׭䆺>楀C 7 ?xo(*/iK"vb8&!dyFf ߝfendstream endobj 382 0 obj << /Filter /FlateDecode /Length 4145 >> stream x[Yo3-9yЬ}('DZ̓7̎/T>[fxsC^-/,07 /bea̩ ƚoL[f:?M;_h|v'bq)2aq%\F9qE[m|/= ԑr{d$ut$a$a &(Ik#gzov^uԝ5^P4ÚskA*mtSP .5 T%ʬ(qhЊC{-i(QEyĘM3+1*x աt+lU&OD" rJ:k Yכl( mPzK籋~,FPd5{1D\z;wh܅ BY*7s& ㋁BTh9 )j;$-G ۣ<:(/LucX:UJ [ iy{ *QRFl-Rh77(دC8LXW:R l$x4@B #X mg~H!Y99s#GJz;*/q Xb6D߇1%820aDT#δLYCW2&ij=cϣ\0O JCRb)D-k'J])hBN*1D0 [ӉxZRW1ö݄.}t-2V3B"eWi2tmyNb/zt; Ri22c07+u^ I|-oMy:G7}ުK |ڥqa]@kH3pJ\Q{y&$qGezc$aKܚ8Nœ*q'Jg* smMDQ*)㮣s)O 1{Y< S}aۏ9 [q"g +68ضUOn5a(y6[ .{! E:_o ,3)Uh"깯]{OCc(UQtlb:2&pӜR3$ #$v/Hݜe*IǫԧWnxX2G]Yb:>\72@(:3`M;2C靪j!)<P rN‡? ƃc9)t)>ȕk=NU\}T<%S_t^Lɡ` b>h.⏃rz8Hy\Y{s7ukAsXV`<UQlSY? W2eUNXiظV(Ef!hIcA F‡ CoL 2~Q/a3 x>p#߶!ݳBɼ+Rv]>r 3U"0t_uӊ)õlyb$\LbDd+$mʇW'SttIjT7w nD5#w빘a! /ak?bB)'WۘZ| kiHj'qdDPn|"ݠ98h{pvڦ1y,Q$A?u}-tE>C"ߡC_/Nom|w䟌<= *FPC*0we=Sſ3 Zendstream endobj 383 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 384 0 obj << /Type /XRef /Length 262 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 385 /ID [] >> stream xcb&F~0 $8J[? @65P85ÝϠ7xGz@q}`4;$] k`DDH u)DrH R?dTbKłHK`5 D5H`v|"eOH9zL)K,rlXdU``[0Dm.=` /DJa^VO9H28Qf/-"^I%ɛ6쒍 2 endstream endobj startxref 212796 %%EOF multcomp/inst/doc/multcomp-examples.R0000644000176200001440000001761613200577146017453 0ustar liggesusers### 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(K2), 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.R0000644000176200001440000002517013200577135015147 0ustar liggesusers### 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.pdf0000644000176200001440000024244613200577156015531 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3745 /Filter /FlateDecode /N 77 /First 632 >> stream x[Ys6~_M*EJJeKI@k(2Cr~v$9#ʞxDqt}=0"$!20hF I 'iIJRkgK%k D0oJ"D 7"C7QЈH ]1$I7(B^&I"8Q"QZB'04 }ER9u0POQ&!&m`P)&)NX809iࡄ2 #)0YNR)*$MRX$&t` 9X!Ķ\+Ia Hl3$)0qR 6@AŠ`y ,$UCB@-Yh0 ǁ Wم%dDiYJ  Xy KP< H p+PP9_=l0 PxNYv/rudz{{eoge1geN~7,Β'cj7[.kFϽqosx y0[E1/I/nl&0{ - 08Y 0^/kהopz}~M2Kb@QΞ` AL*l-kZzn%W!thT^n/g0._jϩ)fI6&)蘔Ǽn~%[n@f什s2z0=Wtg,V7Ų{7SxhO uA/?nx⇽*F2:۵([&(XI\ @/PwwGM-rɀDGyqPTP ~f4wc:S:s%}_H g$,q/Qp ( I Xq3А% w.|UM-j] /`o@z8(UY!CRX#Zgh6ko| _Vc kV;@;SrvPZ(3`[(ۡ,2-9=Ї|oZLs9*q~W`.3;_e`cͿR4P,LyLή>u2=((ռahPV}2WIϠz-N7/swՂZY%\Vkжlr#CK/:F'r v="60y]\޹v#PqI N8Zj85|8NLc&/$ hb[օ, @Obllms'WN9GU[.sH+zSW}܍JԼGs#|2ʖ4_٘Ol W85i$rl:7`وǏKqVOcתrs_aeDcmWwjZ_y `(N8ܿ8BMꙬ*a1:ʉ;ږIFQԊ0&hYdt"GB@bU_(*I%oQ?=B Ql[H]#z~ˬZX<@`@. -Sl̂sOqk 'BĐ 5rQ`zr!bȪk/ T*brn λgPOLB:piM?xl0adi qB!`DO͇+&Tcu<`u!эh(fVY}Z.Ǡw mqkPtc+%Ԝ蓼̡@![,f_~Sm+yK 7&˥&,q\ 8f٨VbREͩ^cy΅`Nc0Gfˋ˷]:bXŎ=*;v> e/D!qbx*/usJMцٍt}N IH6-?/xFE2*Unm'7tG~O;6>^ZSo O_qVm^^PVyY;;!OS*uh듄鶻!%T&{wߘoR|ՆoΘ<;LW楾Lsq6yWQ;K,Gr>'&z/=3O&hN7Bsg6tr c6T|Lft"؀F߬ی*գ_O.Q\K fj} 5Ϋ;aa,Twgp.?CqGydFc#ܸ48csou`D^mIaVf&qi}3%Vv|CvfZQw_w_KFY@#>DP ,Ϊ|uZC-IՕ'85?KvDRԉ"l!i1[g?nJpA*r Á>ɣ҂P[`>73qqC< 졕I$U$(;ķ!qi!\7/`jS]mXxR:RDn{Yendstream endobj 79 0 obj << /Subtype /XML /Type /Metadata /Length 1329 >> stream 2017-11-08T13:54:06+01:00 2017-11-08T13:54:06+01:00 TeX Untitled endstream endobj 80 0 obj << /Filter /FlateDecode /Length 5239 >> stream x\Is$u0>X>9mv)etVHrPD"|0 d{88/̪zYK/a չ|{{[VWz~ux!V]sK +[%Y]%VGrFᧇ7߬.yx|;xވ|hnh1*/<*4rTTD}T6R6NHO^y9LNmye"tFxС٧ Y 恗{ѶAp4 `ǻ5L$fln?o;nM i)LGDA|# dp1Vl~^K(59x$ $XVྴl'u0<P5Sp;AS84?u˙旄@#i0fN%%QˢGëssHS̟z?Zb<_:J"Ce!0i~HăS}MbYIj2n]010BZf}@x/ϴ0.fPHfg `I(]6>.7*fiq֐8W~[ wm !#w,-MT Q+C0Ъ }xLl>c%պ4l8Xbi\\@E ]H'%یAS6frR[cOŪ83[pL4n*gmH}b!~s]Q\f?3nH" _> owy\A5^v.#QG#E8#)^PoSNJ <6H֦zOLw;쑽bQƙfvJ;ZbMFU+Cf:wɦigM%,S㚏7Σ6"jKrDecKy3)O ]e ^ۢ7i :`t.tQ)TO';/ YX]U&buS@m2;`?,#)c'8sѐ"2v*QM6nNjmFqen,vU1g{?l?cJ7s  f%>SQKTx+(|ֺЦ^D^(p75*[w$˞^N",&s3/i,S6#s@с8or5ҏ ʢzZ\!GiΩe;[]%'`QD>-,L~FDahLm)eZF9$w94x3fP3FH]^0m+$y_O6 lvCd]ՊCjxԁ=vڗ)x^؅l6 $tՊV+)Fne']0.H4jkWPȬ#(AF=3a ǛSÑW9|-n4_%yD™xXx8+:jDRVYg'Թ ]gVajRD"d4$ Nt(-%4G1`JޒJmf6~ʤK@t"nh\UQVPM;z# m- [(#H-BoܗB#kЫTo)eUnL'SϤMp^tvP݈i~J"NܽZojW58%%\=? T|a 4 &s/An&AU)p}ݝdAýcѭmM6Br3xLҵ k]Arh 8Hyܤ[_UtS vT㤥']PP冄uX=[U'X㓚Z`J'Ɍ,6]JqҥV0HU$6_Gy\gFE9adU~AW HfvT$u ]5isTrpU.R*JejbMͪ-P*-Yw(sӭ1K<:RsϵYF?ekHs6S>Im50ϫaQQGQwҤtr;Jon\UWdBBFٽ s݉g%% g!Ϥzv(08"@Ek[A"(crDZ@gx*nfxƫrcC'9`Ta"b>/?/ԑ;L0V3ILܱ` lTʭR+}&/kS3({z"t[-0$ҵgJYEW\T:UȸO^ȃh[r`|] >."zc.fu RSxoڐ,Y8R=@Hi:V|Vs~#~lzЈ6`w\Rk2wy gBjz?O(ի{]s^.Ɋ*>T|'oB'1CP-Õ^!9Hwq^9 %Y>NWT 9C2A+kJW``SV4lEOŤ}0u}S=#alԇ۳Esofi={ࠈt$1sBUV_z) 8ʉ eδGUՅ㨒9*AFդqJ.yXjIקeO)'5Y^i"!3! tĖGu@ %?-m9JJ$n²cq#k).Ղ<&JBm+%Si@f̑3OXY.ϐS!!2[*s:T IԦ/@oA媪aJ$;ќLUt!8u2oA%F])۲0zog\U+/I\άFrh,i8?j9$g/PZlѡavhFٯTf29嘥!\M2bN`\53@ΘsH '@7_8Lx{U,]?g7d}<+RxVXauFl{=k~q>I@42}!TRendstream endobj 81 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1708 >> 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 82 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 83 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 84 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 85 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7662 >> stream xy TSDTP{Ci#+TG7[C ZuZ#9Z!թ98B0O7j/>8UJ%QesXdoXaȚo#o*۠ŁCz2Yȍ4UPIe28$A_/<.wznPP2ȑ{`o+խ3h5#CeVХm-+h$w ("]lPӆVnGҋ*smÿBt]#tVJ\??D>Yװ0Od2^*Z m5Bb+d~^P}~ȗEo|ccQ/!؉ .eCYhf8Qqp[~8;+w:o(u:nƼݽ'Mg?KH+U4!j=(2B&OK,\Os@veCV,pjW+Ȓ /-Lw/j^&kkШ0mK8"Y6^Rcx_CaI <A3B@f {T\n? YE$_P;ڼ,]FY< iX|_0 <@4s[6YMf!6kh ΫVk* y`=͐PIh 7%,ʊxP%AVgҚM7.7P|}cQKLmfɧYݦMW6J2ԀJ)T K yuu5;9,n'Q{Rf͎l7dQfT7ȠQA~?tngBJ"+uŵ_m)ܟo< 1hPꛓJ.pŠ/`tQ]4i_W|+Dl^A9o\sDSp۩* ߨ= ^rATl՝ERФͿ?J_-:x(@:ؒ[/h5ncsM'AdxA A$ueL莨9_{v )[{̠r|O4#ı?ظrFcL>T,JYtvgN+(Nդ9Ss̸4@k973)iH5?Zb;y*u$y5BЩ U "ҿ؉b:=EJ:f'U@f?BWA P6/6/)X9`. -ې\x! (@",PƧd# ܠc>9ID兰=fN<x)a7b&Ih ZƢșٱxs _q ~wD5:m&[4n^z^x|_ YAm!$r QʄET*7-i(7rאH[žJtB.hEԷ~=~W_!Rb[ C9䩦wTG\C 5(MB6|qh,yF=v!ؖjnS:XCr'$v|}ɱ5J>C=aE[GK,G4X\w:3\=sn.Փ=GF Y}c@k^(rks45!Ꙋ[!%y>qn0?b]<_ Sn뜁hZ"KvX+ųSy-07oWg@n U"PI߲:~C)܉j'h1Ȗ"wN}BSA訡MSӛ%_}l]hY48$Xb6Ej;&Uۜ 9:4 z۲mBp҉7Gzs<+$R%$s>jZ$$9uK͈T%&W{bm]83pnMܺFUN(c9Ff5]u'C"ϖߞ#-9M{>/W\0m/L}m0s) EEl>t]г&"00,,0"d./Yeh~р,cB,"T^XB e,dL삸aE/Ō wz5#XAIZ.t)m1(U՛A'U__z}h#DEFFU?ӔX| yR[&%grkՔg"Vk,QʑAyNŚq:9ֿγ4uPSrM:@"Vv7KΗde"4pL-ǫҔ$V֞JsѱSfA~-tyJK_~y![mvO>LGt[agM;˻X)-㿸.8i᱐_٦ZTe~j)*ndE23n w,f6H}'X1{a8SY' ԯ-cu6^-59ȓm杬KBB|XuR6]]4Igj)Tli=~U ?j:^`wԦb߼pvN~t.044έN\nBSuG |KdÝe<[Ȳ,zkNud[?o ?swm4>[Ώ Ky1xHl /DY?߱.zfo0w0V( HXv;ɈI-1Ք ۢwrn0zrBKki. 8meMUG7U痶 v0337{%Dx@|O(ehJA_jN!KqI+ܯo!FyuOTpHHqpcj.S4Ao*]@"N&~D!9+)"G Nvv,DR"!N(.""JP7Ob%Z>)0Q /)ۍڇ P_ބ17{&U r2Xkj50KK^j$!B|z!;@wlL%<0' .ʌ&3)Xkv)I.&T줹nPAR@?wd+#JRQBAZ]>&Pd>{;T8h(Цw'YX[Q',Vg[V͔~kC݊,ܐ~zk{,4 \/6R3r~ğqP<$A: xB~<6End:T/*҈p=+QDtPZu j?)Ъ&ctG3$$/Mbs;R qqod%k87<b6Οl)s#u2&E͞kqqQ^FVXժAk\$r9YUy7o"=pZJ9q:zES|*bRL8|۵'B~Eo-KݳGcAJyi[J޾);Cp k Q?c ÅϵlÅQ90V3T2vgq MƃWm4SZGn^tL}GOV6q5uue˗mD.,ghΜgvH4V'Nq< ↼ʨJ$%\'N>:{j ހ}eÜ0;KUVd=IˉY5 ueB#Q_>'zx>z<@1]ui'Ǿ?a>ƨuXxB~#0-J''(ׅHRTadHR%`#2;(ݴt4$e|$ )F=cua~q.,Gds<n1u4Ȼ]'mGi 8m2$.upq$lHFL>ӹ+d0X!B E{V;6GnDLb`QY0}g76:y}rq'o]zHOV~ID$nX#ө,I$&f%)FQTfqEM'v0Ȋ*xVFm00?0 8/A=%߈Ħ7jToRI?$BC%V  07=,: \l!};lpA&-KKד .> stream x]1n0 EwB7dV\%Cd4DgKu_3O᫹\_9mykM/)FRVs/wAM |Xk݇:㣄5_}bZ5D'3L a@dL#;dz*Nt;٪%,BpFVkmHX < 8{vٳw "tde}q@G~V̛> stream xypw% DLRdd96ɆdCO 89 ;lI>$˲%uYjuXmYnL cp8MLfb&;Sl~r:)gd6U{(dego[ۧOO$*( ^11 uQi_?=+G%|B;,RHՙkfe_\.QɊ +2 RIy(ܣ(IԺ5Jjh4W=Pv]FfH$8ME:rIB.\jDKTHԅJ|UdJ5U*U۵]x;yyy{xxkyx| oߙfʇM,.[R@ɥeKYv'R+]1Ӓf`ϰ|+;&5X ]bͤ f?K^nŝ ĸX2`  I߽?L@-=y@Z.?KO8O\+Z]]KZϽȇ|Њ:Y.0m7bڠJKނ,?OON"z2N?@Yf*h%A*Rj҃pxZuJq\KA5EgFD 6M* Z*vެ1 |mR)v{uЯ8, ]}3t!ZZib !OZiw|~"- Z7g\,[hcQǁ =0ƁАKTO AOϙޔ{D,g :ld@mDMl/271%ݵK-I(@leqam@? ct{ b܃Iww4z='ZPnJ.*?#y -i/8H![rFeW. ;ɿMQgx@-pHM۰FĨ;,nV :b18?Gl&mOQc bmT $ХLg/Ea&p*1_*l|i{Nwrt:7%5]!h{tn~iľ.:u |Y,V@x^CԻM uzc֑ D6C5zkD.pF#ABOqw 86t]% veiC7;(BMo&o퇘4ώXwZ^ H-VPc\SOs4{YW O'ZD#cCJCSFyd0,1(pf"Dwz6)*E.vWy{:^tA^aըjzv ::+"-ݯn$U@<ÉTs\}ȴvk1IeK @&a;՗*KӜua Rvc^J"cpU{ 0 ۨ,嗟}dcXze5&D?CE}n GLG'E!u? ?T)ּ .r4ͭ%o{+*On9!Wl$Xib$i y15~wu{D;~dWEV-8ZSբw,/ƭj7sEXۃɯE.Ww@ HkduoTeEB$ы`+OHPc!/yc4;fQt1Z.nO鼈^I|B gV.Wk"u=$K"9{Aonbk5+U5%Eէߛs7y7.Cs&w:}dS".}Z P=qmF5yIe{?66s{Ѣ>|b%[Mj~>ܝVn@gS'΀8Bv'8A$)gV_"equ?mcS4:.kT eh(Ht:p: ;r y;^5,'xZJ(h(^UQQUUQUwuɴ%nzE<,AʏyR^{ ^ڸ[QW)%[&n÷+6OU2NuOoy&܄ <}j |3%SG_m{A?-7$Yo)){rʡpEaZc%2g>uXokI$S7i / ڀ15Tq /u3M.B9T[1yJ,p$Ԃh LSXg 0UZ# 9$Wq[Ss3弰[[QwBh[~_H&6TǦ y0IuZQܳ{& >G:4$wJ3#Ɓ8ݞg>P2 5/J[$yxLyzw ,UT%hN43b {9^o 0 {hl"(~n⟽)b\b=vwfe<˸-'^1Hu-=1: qprYsj6 Q9+ KfK]MM eׁ.endstream endobj 88 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 89 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1712 >> stream xU}L[ܴuӜ@^ڴ$ZBXii>,p6`o^ى)1#&, mFZٺ)]uH&UC]@6]{t=$DI%T~䷊a_{1hjko+_G!EZ3H_>1T=5;UUjNժNZazmJi0˷4z{dTZ]w씛TN ^Uɏh5j|rc:U JNۦi:vV8[Vj J^yި)իԪn do.$t)8MdI%9O EMr\&!MkWE,>P 9CMƓtr$9vkcSվG9>0أ2qp qܥ f~ۼ8ؿS Sa06\.q9 C34Mj# c0̠*Z-)rOż_N-L]<7 $(R>B6=yk hu|*b&&}cKL #~~r_Ngg4X:h]7km}HLu۞]' zKĒJf.;j -𓵒D|@7 Bքs@А|q -X6 [p\"Afiŭv"9x2{ўEt +F!$DfVQEUI[Nr>n~e)>2);aS{IC"{CoxM28(`((=hHBXc8ǰ(-~zQguL|5$TUef~H(dJ+K3*[B<'8$3!z(T%x+ތ}H* ~pC+zf494?3i< BbCЫ7u!爋ˇG'dVS)C ^藭H{Ǐ#|rC)_[ `s8$, G"q:#qpyB0 PxoZy<> 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 91 0 obj << /Filter /FlateDecode /Length 167 >> stream x]1 EwN܎KdhU1!CoMUulo=a> 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 93 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 613 >> stream xURMLQ~.+$ w!BOP"4%E\ڕVf"(bٷ"bzH`Ohz2^o&ʋdfod JPli;~i9.*qh1g)}T&wN6$u̧-3=1k#u9_55Ѥf#j $%U% |F5õclPMsg$OkihQ|BOܮ&51ZamzT3Sݦb$nDl*]&qeljaQ+BPs7hC x2V@m,N7_v+f2L){:ny^tQV~J|c]'t@? rkJjVЁgʼί.¯OMDҧTwɬcl}8SڝGo8(v6_қT"mzE .,P@ V%yk?x%W{-ڟ.,0=3T ET*!3X;|޻x(Ļ/9J)"z54'zW)aZkD¨;xZEȎ!gg*BNe϶wbendstream endobj 94 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 862 >> 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 96 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 97 0 obj << /Filter /FlateDecode /Length 6774 >> stream x]͓uwk|Jn[O.bWʕvdTJN*%ܡv)Ty~4zfW+R:Ջ{|/{?󛫻 B?n?o6z 7cQn}qA_M*n\pgo.>m0z8lwƘ18owb1zw[XȠ1lnQH-D|Fz oYw[hE: 7cڋIkuY^6-EΡu];o3‹0 J G٧&ioz^9LSjx&HZS5XE-ٗ/G'y\np8̄|t^Yg{0QA`VuZk!e$/)[O/W2 `OϤ~ b/Q5vI=ZuL=Țʏ@pHz`RJ `; ,fhq@& Fo'?y$Gbj}E[jTa6-w, 0`MZ{ 7Q-k>㻇q`AK5|UQvqrS봘JǙKzt'bM@<흫80unl}o fO3GA#;FUUTL[k*c] \Dy e4>QaFL$AeN[qW$gԔzfW; Ty_OѮw!a_,5F4 l˼1*'aMT8u9e؎7iB0cfu`i*_nwЯ6}TBjVFM}| }D o]SXS4( $ |%{yK3Y%4fbYEj`%>\(;SδIy 8Py̮,hU(`jƏыhaB;XF-߀[܆8T)pW9qNpʷ[kYYa@۲;{'f Ʈ' 5RBӼD 8}grPNEf;43;N,",TA$n `b<|a߀͌,,kP_#낪c<4W<IKJ_$c4/GFg@qET.9arfK&i\ɜeAӮLG.A0R8.K]RT`Y.Fh?2"\'*3=njȳBjE yGы 9-C#,f HO8J90[3 i^i*[՞bT&9Zk.a(Yƀg`jn V5fj}t5qƤKT*exW4)w'>MTy͜숝jP+1Vo"tMcgn5rUkCQ_ VWO&Nw"Fa"՝0H gOF͑n%]e/\*^+יaMJX[`֯{ z]g#PҤhNxLѳ4Kǿo6, NR~F POp Fќ.9?&В%2d{f}Xw"[6vTrИ+AĂ,ofSY߈nNNkppS\Kt0ReHr=0x+Eb?w kdbcS[z@'=( L"i IltGݡHEj-v~[Yb%tp`b`F^!E (:uHS S:yph}]O:C!;o팚ok~ٛjPYfNűӡ02#CI(*w1$4 NyN(0IJ'cWs.`W|Fֶh'Sb=$,G5 p].c4;e\͊l- l~<3ɽź `V 3_B;,b|vvb@njc͛ KS\_4Z .X{!qbxp=ѣ^0F[ =hP`n_^|z%8>q7 QG7kDp9aysXsL \.!FFJ[GP0wCMzi"z|kxa]*D"GHL'Or==c3tpqj!bIE,Rq6fɊ8xY37𙺷C>.ISR@<7ry9"e>5'Rk^&  7ONiueplvyKQz5@'L&geB x!"gip-('b9xt -f:6ԮjS<*%f$PGJU[y1X*EY\˪1EӅ#rtw l Ԋp->\G֖/!1jqc?V٤>L+֭)jX M!HRz}`7Y. "|3 srz\Qщ9o;Oe6F$T!D4x#cJfpy$ bږGSw%ySZ uKYBjNe{4UZS5:M;9_z:yy^wV:Tџ8j"gA灧z8?3UdVY~$dc2;2Z~z7Q\WL7J=˼Sk \+i-%ܽK9y= 9jBgx)$d=6S7h P lě[nrӭ|VȽf GUPQuVl}li{-` rI :;%̿j~4 așt&I(Ӫt+ ^xtɗj&d$Csx gBx&M@{*:~|ȉM陲L]6X= t>ґf@ҳNdOޣhq5FtVBz#F;,)h!)hU"y?Q&QG|T+bpêm ,pJ'{wϰmf8>}bP_eH{ZK\ʹEz^-Sj^qXāqZK6ۂJKjN\@(ӏOsOħ=;]π'9Ifmv÷,& vk6((ь7LcnFO Tf-t#hO*EWv ebux]hx9pVOJS'DKbS5+M!̿bɆhYdWdۊ\2+E`.J &{!y/gp\L&FtvEo4{O*f#**RiFr]$e`y9Mo]RWsUN MŻBze6h`P,zʲ303/s jº_hyN L\a$SeO5Gُ!7v,&RľKub,t- x^c=1 9x-_o5üBU.rfV>Skè=`ʛؗ1Z AWUp{[4-.2J\Ml(1#$\3ĩ.d](LX| ӱxt)Xh!*u\[{ h+ Y6>Á5w-5#_GԞ8Np2AYݨJ˨c({ Yv\-8N!B3`y (TߔWFjZ@xSסlķR5DVJlL@oEʯu -G?tćd^X=|eEltdzOAv2eAř}sзdlz+ kdN^qG2gU%s9ȇL*SE ]/2RN#\FA1YҮi@;bWZ-̘WL;'ڪ<qYq/(%s/cThvjC:,#A$3rH3hLurNU^g?Q^00T.misj9Hr\"7GN&D-?~VC;xJQPoRՠx~)+vNٙJ㞺 MPܶX7c`zgsr[4 蔅o9ZSFt'/ło_ߝP]н;mZFcpݻvTM&:œtFsQν|l4HBx{BwxJ[t[ ev>ԉKBʾ⍾5;p1 ޟ3&O1~ |RNv% #"NiͰ"ZK2@ULۙD*d,XЕ:{Q&U,V\T,W0ϕ-nbLi<ԏ.1dC8{%So>Ri8TSV% uJ qb]ER,+%sp Q8& `&ؤTl~{{ڗ uxh6 ̂,c!>״+n]e yx-}dΒrUݣbDqTeƜp纥y薲BQU?d)_4C/h+rw:TW~f*=Q8b0qsO,@sfXOfk"VG>i-)d&}+?= M\CsU Ta+0o=$M͔X<󸘒ӽT:iuPISP9Dj.8S+[lRGEe[`1ulJK*"\~廓Ĝ_dץgWB4ܰ٩8V.,Gendstream endobj 98 0 obj << /Filter /FlateDecode /Length 5824 >> stream x\K$q#}vx?V'Ip($r>Pvwf8z HzfjHd~ewj;^븻{SNWjW9I 9)]ym7+M}~aLؽ;廫odSyᨦtVkc,ѻ)wMAxeq[ݿ?5Sn+3h;0__߽cSA~RN꠼A%MS0'ϲ 0hO< hRh6ӊ, `,*k7s8X{^NBl9oA6۬p=ĽN!M4>ksPsPNa?Do]c;kԃtNݬLba'O8c:X,|;LWAGѐE͖>>A; n΢)C g'cLO>^̊h aUJbV~޹H`xǤŴ>wVyRFyF>8 "cRU,8Ms0!M nF +B8bĔX(VE K$>˷2oiToj4_{=~Yx%PuD"B"m=7/-뱬w{_=JҀSU&I.B 0Uw-dc? WB&)e.j8yϳD<Qb'TE8˼{|$ yVHY-z/dQAxffN& OߟAca뙴0 uU=*v4 @bX4`iNf+y(΋DnVD{}:k r^~`2?$whdY^\Ģj2G01 cI <3e#!9ݱͨҼrz.)+h, j,*$@[֋L@?r08΢58KI*Lʤh}p̣Yʽ 6KHH8P C.i++5   x-6W,2ȬQ(׬J#lPc}We^7`X0dۺ~jB! (c`i1.RRsz~=1ZA4(4"^EL$hR]6Yr&k^>T8$[okS6(<Pble,\Ҋ;gTO6,F$)H+3ĭfb=~I0A@Thār$yl_Zt}%[StƊGžktЦ$Bh7M_ y6@Vg̣x VEj HamEv=Vpb$Į ɇJf]$!(䱮&K||`0t{ /~w9,D- *ZqѶ^ҼW7Rk`8bX rl>Hni!_@I!e@ȃ{+l=@@s^(={+yzrq#%r!Xqj qvT6UБiXZGBhe-Lw}3O œxZdfs٘S]ܭo*>Awv&fe#uF17-ƀ-1l\ô{~ߺ`&O05z"%_UEN-dn- $;Lh,18""~Bbm4LՋਗ਼ ټ 쀰B+=ԦVι0X>N#StmbI3gu1Hu#cNu;"6[-& h^tjQt*{N9W{@!{T Gtڰ0 h v5<' |AzV\ԅYF4'8Ğ7Uڊ oo 8J%]\%~Waչ3818Xxmk,HGW3XnԳ< gi2&ԖV1$U)y@2` פXbk~.fgi75nӠrTܖRD9lsCaIW3o>I/9ju՛)#oUR8 {<۪agc:.q`JtVcZ@'ˣtn>lVo6j-Q%RMI95JlZL bI v`_2%# "HG;TWSdوeӈײ箭y~=%;/bAMDv:XvZu!㢤[v+lun|:XJ`Q_tv\8vvGŽn2addFe"=@.s gQnGf0ӄX*$m6HfΕo*Ð[5U h|lXPÎa.6JS !B&ӎXĚkeO n*C^\O+ bv\_ܨ29.Kg>%UQ10 Ĩ*(y )BjA/j3E͗{U|,ZNdؕE"j*7ʡ6^q̀ um:e6jtmĝy Xu 7S읥{ p졻!W[:{]c߷"N-qx=|R2Ų/c},Xh QȆaMWVdtG T0SRsv/mt>s֘2yM-.t~݈i(t ~X_b2@Xѭf*f͏9"1H)*N貎"IJ s:{`=fV;E w*齎)-ҔC7_HD> @/ತhx> %MyhF߸@@n5sSp] Wj.K% h:ѧ1y!ڼ] ? Ǯs6%R%=Gõ]J"|ϭp?B'r wśߊFTnRU}{iK/Og5Cb@!sD^yͪ3dRgSwcmy-qel] ֒mlz6yxTx!.Y"@W5ZYF^w!Za(7ܳ_Yϲ5$'%౤#wXK1Hͷn! ؗr+ sF/U Ǒucc-c+,5*&>߸Cdq[u#d^|{*˝$;2~qXmlwʽjxL٧q[g!0~_ѲA/Y"4p/folUU4Z0<=KK0]`t=EsOCqG_]Z&4łBRצc__Ip:#u\gifSX# 9rxZY|RQvx ~%[1RM,gW:]_`,cÁ!Jsq# =ػZN(|*a`uA|e)Ş>rRTTڴ]-Ψq?(B+o5N­\fBI!Ѿx $ H5FOKFiCy}6ϥL4ؠ<_霦 ;޼1x=":W3Mc7yv#wp+ ۦVՈkN#87ưuq_ DނӘR],'hwe/8DѻqMyJY'c}JY$L)ԤӮV`MS]k[(K}lT6pAcjdcH|oL~ύ ?V |h Tm{zt'*TjwITUk{QvC.<tJݎS4k2|rC¶o'4nzCbѺ̩)J.٦MsWi=bĝR|@l<il2C uПQas".|Qn'{rnGrC(Ѹ'x!)E}nRP==zq/r0Om uWXhp5ʼe- mٌtGCNͳx6mendstream endobj 99 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 100 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 101 0 obj << /Filter /FlateDecode /Length 2782 >> stream xZKs#+<"oYW!\>9P/)]Jߧp@k])b_h_ۿte6OWw7npMdJ޴6ǫ[3~ 6\yy{Me1i٘P=g\qߒ MűX{zrvl⽌٣<.&[e[e3M^sqJt'TǗ@) ^Xx$.;|Þ%# @ymbpC-Sd}q P; nGh?N 3xˬ1ٔe@AIpsxMygX˼%*DJ8ݿn|g="H}/k*|̓Sܸ!y 9z=zzm.Rav rD1S4FFq( \~!{z6vs(w*oV<#[ ES\-mqÂpCÜoO8:8g߸?lGx=Z inZ"}E@NMm^^:'9j&ӈ`MbGXRjVic .5xybW]H:KvŴq/̩d)vl}=O4RR;-LSVݏh7{u/w ]4v%19 5̢Zh}N},PiuLQ&8̺v;DifrTI y$j z"qwg%K DȎD2FV5 yKh- 'XV"<&(^@镓ӌU1|H_f侬CSΤDay|=ɄG))xz Èd2hF/ BB#łaTWǃ\ $;-Wq_laE#"ZV6 1mFI3xJ;h1zBB8Q3 QGH(QQ őa(j!ᢿIͧ"T0L E3-T72Lխ#/bt_)HcعcO 6ZdEmkUjgGϚNK ~qF8D' ۪dVtO(AqU!@L!Z{\ dDIѯ>_h4[Pw HaB 椪VY̧JקڷJUk11睶Jݫ qx,Fċ;oWJbRМ"KD1wYtiͬ{Փ$+QESw >hR9S64$%d^4oH 7&6=Jt+ܔǸ".q0ck(YɡMѵшYS}KVV+q#5ʀc3Y-jFZ`[jy[c[?BtڃB~B`V~$ӴU#z'm4kƜ{.~AOVlFrIjWzaun4խ)|dےRns!9zRibl&O֢V=̏UcJuI#z[Vՙ>2Y,]AIӲ)4A5Aҗ[` GmMgnS ak>קqv=oJTÜDz kD/v>{vͣZ Ȱ6 $nH<@LiMU'c[aAMy+ujjLY.bH ez2䥎!'ʠ>GmĆVZ;|&{j}VxӼ沤j :FY>rp#jK ([vfRZ&:A<״yq\SI}k6KzUp` ~Cl" Hv~w`2m}MH%m@{~CW7~vUP\d`β}h{8Bӄ׼6&S>Yז}dOH>gR'enrXrwLgS.SiveuX/n>pZu'Wos9 YngZq9țԭ!\ r{9Ži}*zj3uƶ¶+ I"]l U{D}mG~ZQ }#1$d܄V"0+@Ը Q0m$\8c_=|2Twv=|bfe'g;%=^NeɈ[(FvE#%%O{~άfY@Y4T:s$jI-9yGh%H~&}/ lrk#:ڝ&qă.K;nWJsgB\~euGҺTTi@x-?ksï/Qri$6xWRFzho]W\s9Sm}O: /ڟ*8v&mShpa{?\ J͆oendstream endobj 102 0 obj << /Filter /FlateDecode /Length 1804 >> stream xXKG O~An}9LQ܀P],ϠHq=3 hӪu@gy2pc2q$8"CzTV^nmֵWݽ39Q6;uXή6OP߿ϣhZYXT+G/(1;GM׃C yvlmCBOm#9юݴ z}<9p DHn p z9.m۱V76 ypyAxRF4T`D93Ȯ-FQ|fMߌ5um_䵉DGY[eudS꯯8r1yt:$뻳s1Cj_d`,Q?e.iX:|Z6+VŘa W;*C^R (]TgC(iI6e:oA id E;>a&(DW,AZjEe[D#;iMVT^9ٌ16c d=Вqqbӊ(@1-@i+*ѐ+ G o}&@V瓑K(r5$b8H)} /`@2<Ěu}h#:kPt&%'rQ/"`N1}7Eb yEInY4`i*@TB-J)ɺS6Ip+'yX"_XbR&e=ȭB|Sӓvϕz)[y,KVit{"U"\兓.d R葍9[Bo}G2zwV /D AKFЖCRƖfT3VHEPf,:R p#@s%<r9A#aP#ZM#:H9&5lE.V1ѓ5?p$z\捏m0zC™+ -%jӦ6L9}D&]$DƹxTm3vInnˤaUHq)3rrU|8^bŔhb % MsB˓,'ȇnW_Ap7$Y v#GhAE)OJ#Jj [h躊+—±,M^V=#,+b/dJ?M&RwݗGڟOv7Nw]p9>ާlz?Z&Uum}Q!FQI]W}=I3txv7;]nvuI*jZ}Ok88Yw$BUVTs ^N 6놄ٺR@puRܸշ}/sɭCv9)dZ]ǹA!l+Y0/NQub DV4N(W*N^mLJ+0cq%H[[;u/ԛzZ< OWk}N^tTg_*y?ǧq jsѱ,J n|zch#؀) wyU >3Qo烻Q[/Xjp {-Bm@g6lB?(eX|8&YZMToJ/OK*C'".GαW0.囃ua?TB&C)aka3[s}~m)!_@~endstream endobj 103 0 obj << /Filter /FlateDecode /Length 163 >> stream x]O10 U*!0~ 8ʀ0%:t8K结ϲ==(ul"~H0Xô2qAVٍDԩBoh)jI4U6ֶI{`S]ڂ|Pr48n.1Ҵ4CN .S4endstream endobj 104 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 420 >> 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 x\Ks$qqơiAER b0X Hm3+UӍ)Wb+_ޟ~ux&V7g?*~s JIVg\8):?ߵlTf7OZ[|V1Z-ZRXmַl#VRHio'-RƠ_QD/44Yf~慗&D }+\6o`JG;KNms&zO(L|4Q}\_{ ]E>^GX\Z/'/fD7RY,8$PA+>3(iwxGTdM8$wVt%O*ܨ[Xlm:-" I6"W8%+/£bOsBg [[IńZG{0-VuN v1r GJ;Ѱ3(]2ձv 0;nTȂ><$N,*6Ph{MLIΞI^Y"1pQ8-#w}]D4moHW=@T)&Ro+y5"ϼIGm#B|LE6FfjqKD"Jq/ 3T {[(7Ϗ4,N|٢+h#]mcY\磣MliD]B1s8,e@1'ePy|8f[vk췛y- gY 0 ʆ Qԇ:!%hl'0;0/xlYԃX`1X{k$28(A h{O3 i_>UC?t|#F/:xHZLJmJ+ P!ms$rz+[8mK; <5[2G[.iLXzۣgELo6ƧkepS& /Ë粥Cl6@Y)߽+l i6erv? epXux$ﶉ?'Nzs 37UTOm c#G% >{rgmM.?#[՜? zi TTY1Su"r⩠N&Rděy a摸h(eXm&xGIB:?AkS Oqt Z躁,F;3~rc\{pEWqٓ_d༂tw;x8\X#O4~;;=qhjO1"XDf/ a,;_kSH\n8c(symG"< <-}̝E}9hê]0 !P&q.^k&1tE<( 'Yf#;b~ĦYhqtXmn^Ŕc~`|Zy߭T S}܋9 X$R&EUwDV9d!R#Wq,(4X\S>D1B$ҿ$ҤdK8`<a l 8g>ZĉQPb>,tw\f+q& FL=f78gkOYGmµ.͊2dg"Xe5#$vlsJO2so^N"9tN$4N q ;05~7; IioޡZ!TdT*SoGyxpJ6!Z\k_j}؜#]|&Bg' q8([~G]7!U*>'2w҅A,`7e@,wMsWG벜 CK}ܹh= 9TGL򠰋h5JE@60L:aJ;`wm[p j{jR|I+r;L1>"8*)7h.6Iʅ:i6bނܫA!|~.mYYMI3f/ٿ@]?QOH"0'{8B0^r8dZ٥> `3'*(YfQS'NJ$/]9;*o̮s1NMK/vΙ75j ja^йuYpd|U)ք!)lzS,z_W*Xgیy;cF|[+30ԤO&;׮K o֪qFcgIHsx^Qqht\+{?2Cbk2h)%^_+8ԥ;fpZrKjY;\RsnK`"3<$>PA m0 UWS$D^VZ߂z쭊ȘRE Ns>1Cq^t\WL~|m?;*Hk5V%I zT}SEEf+G ]c ^̺e Isli?:589\ Otѵ[fU7^,ᄮZM:q_;}/Jxd8|S!Ì :ߚ1mĺ5: 8v=Svo;ZЌ+ۥkiNB g_Ĝz3m6`5_K9S{ͮ\Yd=ѩj}BGEh"`AUU3]\K81ppZ1{gm0,E2Ap궱O`}o`;v<ԫ.'265NzVLlͿS/X7n &8Ee- b/XpWz{ڧ4̝U^)7W[=GU9ݶ"!fԅժ?hĬ.sj@Ę~?3Z1[G.t>9ZKʹo6y._?p1Z G,RJz9xendstream endobj 106 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2441 >> stream xmU TJG39mնZ *ڢU@Q0`!c >b"V+lw{Nb-fvN@99'yg&w}Ig'B"C}?s%)ټRps4Zfv(!H4@Mj6!.^x*iϋ/>HEEZMU(BxZdE&6AV<<^K]s^JuFE]b*]PmQhRt5JJ1YWFשP6 MPp^zlָ a>K| q b1X@l VALKR—#B 7b1 l_T_'km}.r,2doRR*:9E2eݔ+SlېF'J㿡K! 7{A!3;nL| /]T- l6h6\l4 %Ifhjlh40Qx@^y=&$c>rû= *r!>ȳ^+u/4yCŤSmI>^|(EL厽,&.D|'DV^ROA]ee]iX^{*O#g<&zr1?_墨9x}ė?GIygbL湂d"A.?ԓy;t.f nGBe~+۩3k 7T뻆Cc?PEy`w(8)9[Fh,zb260cm5} Ko,׼](;v)n*n,nJ~IXCfm@m3 ?; M&e Zlr9S1e,z]s9Q%`rW?Zm:+VVU&iH|D^uk^]Qӗ[Q-T[VVIZ<gW11U]DM!cC_ё8,k]: cB X Ͳl4d:z7} Υc+Wyk5bbu Fgy J+~zz^ X/אBv6LuָNr.endstream endobj 107 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3007 >> stream xWytSe!41W]PU6K@"ӦK.i4MlMڦiKC mZJB p@Q`FGE{cΙW'd;;:xÂV_9kljXO|QH?F!c(|$ ,'M 39pּys0s)qi(I(yB\JN#Nz9A.Q)3i&O ƥǥe*WGv7c-H"ːǥƥI-" Z._ NNA5x"@x&/;{#?*rq6A4r@N; foZ TFFc7q;,h([ #]Xf aֵ[ˡB:{ nY"h%v| >rQeq[,`QY d0b]1dM7ZdK *lrJOYqًB/zyo.Շ͑YrEJvLA(ɢ2Tn ]s(lY5Љ4@䀳Cru3x=~߈Uwv6]qhvʊ % $f59ꇖnX:ex<{9Y+RBϾGb 'ZuDws4b{we;<1!i #YM@ }^t/M-F+&H_bgöG$ M@4ڈx(J4jP7B<굹@y8ͺ0_~uvO})$ t-NC\ ^GK>Tb$ tR:$Fho13'lF> 5c6] *8>E-<_H߷RFFY:7b: !E ڳﺠߦ y* ztdaXfSM)} ɌfLB.SCg/Θ|A2[QDxRtPb(8 4 ;")TPkԝADMhUBvT汓ND} hW~R%d#[v3 <[;la7Bve4=5q4  u2I`BF専>l}`"k *2-{?@SڑšhoT}]ƶX'UɠTZswEwãn~Eg4]" =r* 5AjˋA,I`.RV XlAO`^=V𖘷9|o!GEd-2l6[38V/]S,ei5NIA.b ;0F5+X'fTAE8̴^s쁽"VCV`*dG?(X]*nܛCY}|KF I*+E-QWpgI DRIJ[,PK$z#g$IA*KiV/N.5Hˤ.KGZ 5u*oM{y/ :]b S7lVgUG"֟UڪSI\H7Rճz(D:QUG.w .{$}U| T4"ȷ-Fnu gNafƽckK&Nxw/u̚б) PgR=p*7ֻESO:3VYTN`(RKrCZggzvurlwꫢɟm͢3`ѓTE26t0pU5Fq9=<rU?&{*sNa&S*l-hJ)y +> stream x\Ys$qvqfQ]?,2M+3f.\pIGuUfM P(4꭮#+/w\LWotq{l}3CxQad_b.4쭱"xͳ?owi0vR܇6Wݴwp=o^lw%=|K#B4Mr?6q*?SA 2SܼL.fC))Yd9SN&ب/}oQl_~˰g4Id5.bs@ .` Sϓ"[Z1o~[v49H#;.V *{ 1:y-9"Dv1x{r;:u2pyt§x!(."6z$uË~ݞODh h#D4#XW׋???.l@3MvP'K LI)joM[4q\yWGe#A&9kp o]]%88N|r)/Iّ77ʕ#ͩg@F8p=RU$C4ei54+ 3ڄs)0B0R[x׬>٘!Dc h&5 ~w P:SBk~NxgX,[Suȹ7nȃ\gnpT8!?xԚE\vB|6TS"*irՔn/W{$(?zdwU4uAvO~u2LnAupM !`PJd =*V# &)4$&ty (s Y)}+Ag%#{E0LJ3A)]v;fxA+Ɠp%3yGiEOBnw1oUD7K|H =F4}6Ei, gDeBf^<.Լro&b%&+Յu^ F-!H)V3)D0\&M5*P3.Յ.7 .j*f ]e 2 Z06f/' \8Og{Ee`0 8mc:YX+GvH11Y oM^۽tL8UozK pfL*`aasyYS'=ՖAeVOf>( ">2]I1Aw-IL?1l N0mvcE::ro? buɪ ÓhH@Gybd6]r<E=o,$o <%Jwp/"5KxK/k`9ys|}, BAKlaf0I$[w`i`gv"xr9m\iKJ':I=z({ {> hGC;~VcX.`$,I`ux/{#t&N(G)ktBA5x|D]E2 GcB؊]VO .N_S7 " 5M=%򬝒(xXML2wmC !i$X@ }.lkr|a 0'6BW eԋ%JrFD1@Pm:^ټ*D^\p {^ʁ$Èu5O!=/D<}9k_Peu%$(Օldw}Ȋ*J[&dݔug4G'%LK0k*l=k2 %^Jܯ²IFvb1hUAR"H@J%c_`ҐpmE OgXs;pwrM둹Q4)g Jf0k]IL.#A ȹ7b;msEd/n۔➓Jm|q\L"00D1)ώ  8嗥{P1:e, 5>\HݕWϘ2e20kp & +kb)m[<0yٶuR+ԉD b9OKr&¯ע)!hȂ9, 14B6a)ɑBN&]zaaL,87Sg8k羏ڤ0٨|::{?=b2H h 8]4EMr*" vL sؤ@}j\N "Ǫ`?265 s;cˣŐ6[fHIR/:_aߧ} ǟK>Z,N>&7X!saq%e%͈MIMP3\Hf>=5>u\t(,œ弤#V'^W0jiީ*Bf;@¼O3ʅB KCnޫm(,V9t)FmQl. $7< T}|LK@„e >3p~Q@yŸe1%3̞If2^EV!5Glisf]K8l\QUw[' k*sFZ#J,]Gp!*9 4K>w#eO~Y#: \ֹIR?ؖD`UҚ2jć8Jfg=Zw)-V1iL.}bHte%{W!5yF"فyqmjnR%NCޖA`: T|L0QH>@ ˽򮨯_M051[N DT^f,Za5h1H12SKe-Nu_/E|ۧX ?`dn 3dV}Ac@Ҥ*c)Qjfߺ!=BŚ;k =c EINMr'M5d~ o;7c‘AiQu` XJelm'Pd6g*0oA ӬoF\Ξ4-sMcY4LB(F(~r`]NᾍsQ[u!n쾉Yfu.7]Gdx(6h9Ȋ?.~>w6V9>p#s2B]^q.$40~wkBv I]ǀ/Â"l?`2^I%?zX[uݻJNQyNG&EU |Ʌ]@OZR.TS|χF #)t#ʆz  CTwW>cE#xShO[Um &i Qz] =qSg4yك D\f>{!bx )$K?ʆ_-E<Ϟ7_׼SX^FxpQѨwWDs~$؟[LZXȺnŗ`+KsLb"dPĸ}3~/bQ"oOv|lTylV yhZ_u⧔8-s-^ e_f}!"oVmiۖg)QO}Ń={R+?WC4?\0p:?t|_oۍ̟qgڳPR·4Gc?|&grd5-,)>KuǷq8YGAIbb1`Uwo L>`І, 6TUTFj:~lǾ{^^~ٕD@҄E3̛,I׫n[>mbk,\KVZn+"-QBLBie S?(7Nqwz]^L0CvK81dm62!L\KH"*nn;K_yS6P瞚ց0DTyŽBB4Z<'M-U(CQ3v1eTK0k ֢R?*e\OIS *)>g 8nߣx" =CrǬsnI%· S{QiT3kb-t}dyC1[UQ/\d:Xtǔ}όg=߿zDgnVh:B:_v}XI/E F|TD.ʐ|gހ(6 L ߊ) T$rջ$#ޣބ-R2k1~ |s]Rf>Cxy.Jd"xx`\ASM4W7g1 ڥ=7(q"I'R~@iendstream endobj 109 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 692 >> 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> stream xZɒՎ2;|mZB2-9$cfp"~ IB@T" U#mW||7a{u1c۷lCƇ1Ooo668=7b eY. `o,,&Sqhd45sv0qrY~lH'`IO zg֨vb QdcajŚSDWl2~u 9ۗ00O[D +.3|"?-X"A`BOn[ G$Ro ~#O|E%CeEWʋQ.yl˷-=Kc<)!3TpX39JAPrqix`w1R"kPx$1j2%I1*'md~!ɰ߽lEQqЩUj5,,flp6R(5=bh{mn%f#{L2i;~C5;4-?2`D?ИG~daUYeC^d/ re"dн,;xѷ4{=S Y;ٴZ%%iF)P_ŪUb*_+zˌ :d\ZlѳADN+ "mܦ힗sȔ`j{MeyKȒC*(c? ?V.Ț K#rfM2V70rȃfS*De.A-nJ6)%kԈ>0&9kwοƉ"R&"nL|E @V`PDS潪R(0nCکR!pWOCLk8="Yі7k_<~$E(pUnrN1,ݰijbpJa3"!W#8 &˒xA$MHqƖإ9"ycZ ({(+Q)p \ft:t2N)-$t}ùL&aC9Sx[/2~6&d#GY4?660h|1WUG9 rCQ}}^>w6fbl)Nʳ'|Bxo<%`>Md-}"FE1i38LdVLA yrh-h]%롘AwZ #ߣs7 /0*a! yviR] A{ ^F[pٺ"$W$T(9 6GU>͑읎ɵ%[!G'S/kM5HwnSgɢ[6>J<#a\yӷadpm@QX-vt!N)I l?>MDIʝtBkP*uo8I8Z!! Ԃ5~1}p'Fs iOD>]yktAM8.[)QA9x%}zG1^[} <,$O³s\s~$4{%/g{endstream endobj 111 0 obj << /Type /XRef /Length 145 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 112 /ID [<1fd162e0823f2cb307b8e6ef9958a0d3>] >> stream xcb&F~0 $8Jy? @$;eA$/)"#S*S@$4˾@$>ɲD23A~) V "Y@$07`]$<F DUE&1 endstream endobj startxref 82819 %%EOF multcomp/inst/doc/generalsiminf.R0000644000176200001440000002120013200577144016600 0ustar liggesusers### 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 = "TH.data") 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" 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 = "TH.data") 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.Rnw0000644000176200001440000006776113157746202015534 0ustar liggesusers \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.Rnw0000644000176200001440000014735313200560730017160 0ustar liggesusers%%\VignetteIndexEntry{Simultaneous Inference in General Parametric Models} %%VignetteDepends{multcomp,TH.data,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 = "TH.data") 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" 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 = "TH.data") 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. %% The published paper has: %% as well %% as their interactions with the patient's gender. %% but this is not what the code does (probably a copy and paste error) %% spotted by David Winsemius 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.Rnw0000644000176200001440000003210513157746202020010 0ustar liggesusers \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(K2), 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.pdf0000644000176200001440000024433313200577157020023 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3623 /Filter /FlateDecode /N 83 /First 687 >> stream x[[s۶~?om'g:5Nl%8N:}e֩,["lZQgN .o]8b)f$LƂ%YuӉb1sx0)"&#eLjW"EDfI0%e2e@\ A١>aHL$$3#fcY4N@9)bY"'tzΠ(a*N*b"*bq%CUǔf4(e SWS,JXP1sLgN%ӊ%Ť!iVPQxB",41D$LKH` 4BA2Ey(BKSqBb4쭤[P,dA9rh`Il±`%ʉ%IBLHRX3GB+9PVZ' IP];C!J$^F(l= T \AYkbFR[@!NόEz.R =a89>c| {ƿ3h:Mq?NP4n^ ?T؏gnӫ8M^y{|Np6_2a ᇣ9Cnt𗼉lCȂ.Qu9Yd93ȮF |.t%Oa6%"x{ .D>弟M4>=.@͛!m0ݥc?qvl|%gC~~h˫ ߛ W G||?;錸G2daE = Bcɻ琒* !1ݝ&1~Q֤̊gGl v X:3+l 47͑W y1ZjMm%aMx3kO?%>Z'__}Ň9a JS|Z_mhWIgOkSzpOitnS2{X__ѕ, CGs?3~ɇӻ7 y-\?;MS% q9N4&Β6Κm&̈́ q68>>ؽ̈́+_P]:X3TOtXO५Uqܰ1. RxbAϕ%?ӝe5޵qng5;~k:_%UmM첝\a{*bFAWzh,U}iq]x#>|B]>sy/gl1ήeyuhȇz=BIdWet~˳?1ooBFOF\?=9j~wF+a|/KIogY?߁GĦ\ћ:["_+M͆'Mf7h`b#蟝5T;.GRX8lڶjGWWзݲњK(|=w.f[JlE}iTAzM^/&h2IE濓f'[K]i Yl>ĀRR.}|>&[Bۊ%`5Od[[j&Ǧӓ҉4kޟGE/2po({*UF^c닽T{G)uB3lߧk,8t9p--p+kBrz z-fjr8|p}-gs]uushЫP]m*U|{&=b*?&z6z[J6=oOި ( [U8A=#(j?)vshj!aT|S.0yWvNy S^%%/D\ۤJ> a:XQŠMnKuR`n!vU-4Ʈ{&_ӣU*qgtu[jt5 k+,7dUi/V;V}x ',+q8NHVU {*;=1=3%-)ykm eo ۮu[]sT.O.DaXo(XK1m˅Ê] HBo{D/hu:F SgkMe P~K 5bvw Ʊ]6jmABXѻOq> OkBfLVB"SkEGqdS-zZߋTOy/)˟')/2%u˲~Q,R?',źDDQT3WT&TT1e*kgwލ&:xU&΃S}X{I' fˁ}ՄI'#lt}6z,kz 4\as)(d6a"Z@}khwA6-Fô6'h XMM”QDV[ޯg |0K>UbYV(qIB} VV{_6IAiG:wOY̝`\*VM )FfՍJBvTevy@} /I괄pmgG5N`QDrm 7Z"ddIS Ã_`XBt]<7zۥ?,ծC4܈PcHgMXt<D+^._bSqYt(t4/Y%xCK6&{/_OO_ NqIZƳ7cXIQڜ n0Y[\Juo{ku76͚Rã= Xs~y&;ٴed6N㨥ӫ 56/U88Uc$,40L'Ս*qv{Eb}kaVݪ㦯_Gn*ayZv9¦_ >/q=ϴV +B+ݪ>+;Rzۯ> z=ZUnb@Xi:~}J!k\㬝\t2圖' M tCiL`3]Pk'@,Oҩ&*&?pqendstream endobj 85 0 obj << /Subtype /XML /Type /Metadata /Length 1329 >> stream 2017-11-08T13:54:07+01:00 2017-11-08T13:54:07+01:00 TeX Untitled endstream endobj 86 0 obj << /Filter /FlateDecode /Length 2881 >> 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? Ge D'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$,{BXJw:<* ( rj@$X2)DжU-1PI \,?.w 1j1ME %.jo`O!ɬ_od DT<)7h/g ʛFQ.%Y 5Nћr^9ZmwLI{(%~[A( 9M |2)="1LKma t֪S [ܣ*zl`GoO#eUozgK<(*R-1r ',ia(-:p%H xʼ\J Ȗ$J"q=<8_[Y97)ᭈry\bosmz|>ȶJƦT9evV +bi)V*E*HAW ӃUIХ4R}֕ZURb{\b*aNO-S.O SXkf#T'SucYT1$}L!2BՃ>_2mi3"H^̉IԁQ|mK}_~ 8.IZM68ŅwpҙT{?(6 ~ۜo+Tu8%<װؘ(ʥ*߶P~[)=]bJb,:.$dq3d~'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 87 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 89 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2041 >> stream xU PSg ގZ&LXUںGEKPHr !<JQkQv;v:;̝{g$I k߿$h#4[F6 6tOڻ]ON8ݚؾ"! T]!K bq/`>WooZn :oʭu:[tsݜQ+tj\(Ȗb: *Kl: {kğ:`̖ ir4bOJix \`zAd A0UP'=ٍœHqLX'bf2vS7 /}CyER_yFntM"ۨ6%<*opN$2xHyf "Sp2ѿ5좓&9KwDhrsa)r>(? &؊ƺl-F@ cȅL̤HKfj4k!TlbS=ҋfaf32<3ټj-]t^rA.f!>htO?btK&<,9o'Vm2{Wi7|(jYZ<(r7"J w狌[s("i=mg̿:\ɧFH5 ˍƊH~Nvԫ+=UW޶+* ; VܴAZhZ)()(hn|gDⶋA_pvGw`,´(L+ ?sմ>z}idrG"s/ \fu?n?.իa,e07: R,BbSW)a&eriIoM g[alΙixI};hme3ps"8-`%m1V(IkgZQ냿frK\ҩ?<E -{;\Y< X\3=[> stream xy TSㄕx*=jPZPgEdd"3D M<0PT[֪ZUokZ>w~]% {>ÎG тkM5]~ՏK腵/)0H,v5?m(6A Ȕa{M`?nԩv}"yyح "?9zm󉊵??**ߏ9%4 좷Eۭm(4$nGiqSL. FDح (jɼ- XDth^+W8_)`] ?tuθM:9~ig̜@+zrPj-DQ j"zDͧ6S j!5r>ާQS4j A-fR˩Y j%eO>l([j5J8ST05B!xlU{h7_A4mFwe=pZƶDџ(HzڪWjl>l?<~fOCH|I|KcUx.tD" u JNb`JA[%A;2ȑed@r*yo˦!vij N݅7$o~q.~>h<ֈ9r7>Rwij(_l:ΊX-0h"'>9-eEtÑC Grfă?S&I5Td6ËA5tOf#GZ<Ms%xXf># Λs cD]._ӻJ]P)7ΰxSj)~Ty㑘y{"~}.bH.A^]EA,MC`l42)10! t:fn 7/.3\| }~`Q?K7 x3PK(̩`Iѩ͵wPiANGf) o HWBrؑ`':D|1^u"LUPRE4B/D,ccЊ!nB#7xs'#..eYY.]|7m\j ")kыnPW9;} WԝHJP.tWÏNKYj!>h<"z]7A1]'s`*ĉcN{ 'DR7Zf}yޝ7;Sfs5 +7zNV\#G|ye{/ qG)CTQ [5qfnUDA (32d\lE=PN;X夌0R> 4#DMzAf^f>AETw Y vd&h_8CZkba.}#,M;Jݍޮ8ILLt*c  ׂ8zޡ^)*u y'A Tj0=щ2:+]ʔz%U9CN?DA3Pe%L36c. Yr!: f yGzKpv5tZz>x`ncZGŠTMzRNvF Bv].LGR2O3'@ST-Cȕ?Q1*D~u.r+tDh\Y\xpW X?`hӳnku"dلvעsƜpu>htEsDh[,~HXTm Dhdg#)FkOݮFPm]}Ϳvj@3IuD/-o. S&DHRBo2rOh/^koj*7fJЪd2Hf⊒K+r˒GV ̔E>qKbwSTcv t/fu # k`KwHSfn7"#Gnݧ|.,`'Hg]w anq> z[uGIuGu`Mr R!˹~.~ P :m* YdwE~K$j/Xtwو/%yn?% }wsf}6$FH=0;[U߻ӔW_|vyv ~''D+SQs_fd!>6FTItz}U#Q.{jHA VxS>]91m54*9_>l~ο&)8|)?KۙV[OYy}ܬC5U-TP4SHQk r8PkMG #:_Q? I&r)5p O=' t`I<8{1H"(!dWmuu<]1er2cjnd"DZi<β|`39?ɳ;24xtDCf}yF\ʊXɯO} :ɼTyfFvO_!ԯ d`mIm4Mrmrң6?ޯ A{}xV<0*atIy!SU؊oJH K;mgw숪Cg\Vד!M7ǻw܋Ѩ+k 2vE'9X0F ř9_;+)LzfùxcZmt=P-!]wlša~Esc4sZܽ]6U~nun0_aa>ixy{ 'Bl|' +/-O6凂հ 3!ր&[|DWGu2=%ɓqtı6ۛiVc:k և#*ƾx"1xbDӾVrӝ6?U *WűSǛg[)pxi+~Ӣz42B#!-u)HfLfl5Y™⃧s c Eٛu. ݜqw: 4*u ] 3PLqdp7I6E*ULTU v0,ʸ}'QB?-_Ҝnn%2$20måHʑWT FxRkȁiFE"F8ޙ>;>EaF$ ,Voi~:4s(V tx)gx?m+MiD\_JS>IDl^^5ǥ*U$&/XH-h3cCƖja3#~I ?m묋D!_XbZ0vmFmCmA6{&덖#5m:. \jt;v;!GbqÕY O<,=wS3 >-/&Мas_V,Hk3,qûB~+@;ع_UrZ擑΅:e3 31%n4[K͎/ǀSqh闫#ROdtO5Q&{+ds6^ \TGf`&2>,=4qʔHia|y:c% PHAN= iÀ X9h0Eofiendstream endobj 91 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 92 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 93 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 94 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 95 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2152 >> stream xipw%ulHj]Q՚La +qAXCd)Yҫ}ׇؖ,|b 5Gp9>X m۶._68{ޜ%*KtO" %ț3y ҐzFxY2P._$]z o-[-]Rhej6^PKt&H7Jf*5K %2nF[vQPWJs:B!nҨd*eK^޲4rB+ݦ+|eA^V(SKemo/ݚשW_ðllW4,;p8 S<<#Y&:(a qsIy˓qt*>rY[9%:ɧ-E@ԛ]0t?M@4d\'*_7Q*?h6|3.w_2_8QyP)o0MNKވ٢&[5ab޶.|QAmW\ֺ^WJ}sCS8 U0鶿Z*nuNX6o\m"RBKfZm#+W,iCNHPzJ,^]F.4lu5BNo;CFzW ZVV;œcbVS=4A8N NGzbd'tK4T u^u:Zݥǻd*/@(bOGp _U*!iGH*xD;h-/fM`&f/ȟs|!f|F9At&D"nG'S~7.󢿣9("=_NDވ9I xn!P"6UTd)7+>:DqE x?r "H&Pr+S?!_IXMMIҔDendstream endobj 96 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 97 0 obj << /Filter /FlateDecode /Length 3161 >> 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[2xiD&6sv2O|$~endstream endobj 98 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,]S/A] M4"%}جVڽڕlwHÙs4{l*4sME#"k?DL/'&28mӿ,tDtq1) TjxFi;]l'?lFl:[.U6պּZlEgfn89[}vպUI7[A6L;ls&6Y5],3] ]7_ֱZo]'\+}Qxt.e9, !u[%S}`nk59_2}S53\9J9e|jYx6Fn4aCtV FiFvN5cOK ZdQ-C0KRҰ,aY2@C} iΕl Emh26ht4֨o#TcD-s1@N\Amtt8a$SAPႠeT`:e4i.Z 34l ;1NNAwځ/I'o={X- ЃJ vR[wHDX!P Y ebWzK KTlaE׼JNd}Ҟ$Y5λ~MˏVX|+}K~G$"jM,S4Bn::X ',\eI` VI^SrZY'̑(2h~UYVޱ`bcQ6:/rmϡĹȗ^a;ؾ$)΍'vwf-x?7AĂ7NLoù N8ΈzM,SO(.![v]A(HW!- oK r&A!Qdt.pIAnjC[Dųu]e5fo'@Mwû΁=jങ(6D8gR5l< u?Z#s809Dhoxju΁7؞#sy :zM+_,}x: Mxo Bu\1p77 f_2}y֍7 {J|`~jOlpHՅs %3ku@ey~|^ %|wap!dO<;f@egXx~dO![gVĜ63S7=C85qRvxƽ,;^W+ |9 -LDa87 {}Ζ r6 S;=)ZwhLˎ2םcgDI~OZvQ7 Wtɪ un &F@ CGRF6?T(dVㆡ iэKn*":2SٓA8؜cD\:(wNc _!o +nPDu6$.sf81!d{C7{=sc1S25>Q2N X|4&g{bwó-u;pۊ4Ozx+hOM?U&n#)J^JߛjN[[{Y?Kq[(9)IqH~;|àCT]a?: t0Uj1ߊnx$=r9 IlǎOJt+͒eXN&Q{/% k@v]2!FJjȻ?o~ORGa56e>g&f"xNes, 操 _D8mO7s?(.\õ)=sc2}B7-H;uo?xtp;e[7az>)h )a:f \$Zr)$<^'1|jXt8Iz 34PMO"MK+qw'/ T0b׃b\endstream endobj 100 0 obj << /Filter /FlateDecode /Length 4672 >> stream x[kdq>:@7|?ZAa3mL!s%=wg+rbUȻ_QW9og2:=*ZQJƮnru[eu{&Vu&FmP~Ù\'ƫ`z^x:ww+%@je-au~φ_~s~0Zj3* ~f9;gh"1T8:.h?gMp*mݒ !!\KCoG#j +8:gW~ftr 7 ( 2anA7.? h8-\Ά.)`v9N(DK7*ap3"" Axv VH6a|]4 JX.-a@np mu\'.D* &E$tj5[,_O #@bXQ ebԨ1j@ aK2:%ЫaLaoR@nK n+C)Л-PᬗH F`]%.>2(oJz,z KPћzpsf#B>{=3RAug9t0$5Q,-C~b*r 9fiC4JtZV) v ǫ z0H;]wGT/jVTgsTWJ7+?g 5ogQ9ahrS pqtH@HpT.~¥')D;,:@st$ѫz(e±qTLTrps5M7B 1 pwZ];|p}|67,NL  Ľ:$$|LwrYl۶NŲ RA[V?: ]vGhB{3߬R O׀>pn#v{{ 1\mÎOiwk~~h ƥ L8AX/i=o߮gaG=\=71Jg{F2 ;EN IS I*lئ;Jƈz kI9l辎^Gb+JQN.״q> ?1 ߐ@Џ2ʀæm pKH-:jf[Z(YsuDEDd,c,}6#j S:0v_gVk)wJ\0y:f`^0LD%?y_%Kg*FJv\ևd).xhN0u153(M\D9=Yy` {J;_Ru$dX9FM #L^RN]XwK %-yf-=GV&Nz_8-z$I+$3fq9)fbm_@gMkW t iĆ OLz\jb=g6TQ uu{詎fDtn3R nf_tt4|^Q'Z߹κJ}ZkڜO]B}͚=ut[Gf;ctf૙{%ٗ'9.\u珴z;#Ps;>ENK{)H.LLw5sӂ8 6ۇi< MbG:gN뾟mBJ?/@&e~hRx8XODG`Ɣl{0Ec݋:vҚ>ye;ǷtoF z˻Z\%}O@T>Q)P=j2MΧZϯCz!4NL_fC3$[j &H}J]sOC骠茭^Cӆ^2Vd}5]]rB6 M FcQ-b >o &'i`ߧ{<ǂJh]fP4BZQF5f,'CRWC+AQ%EPs^޸IJQ5ր@e'̸>#=UH1 M>}RJe^2;QbLt!Ԍ T:'ڭhSч)\r>vxu~S"}EP|Sɠ?kR !?ikڤ[ܥN=nБ'ZɉM1%嶾h~< #1 7U.qR;q+K9dV1 BZ׆<]3SVmb׿-d?.hfkM^fVqJѤH`N뵚HCjDTr[v;ԛRBE2r‰PNQ9Ͷb]%kw$R6~\)^jNcYNC`AAݻ>b$Wkq^'Ρ&^Fh0"F]-uhYЗu2ʹw܀ !e;>WG2#)Cq¶KfLqUG&dhLl>IDS}Y}Y;A;A4OSmEMGB{H9zq4YI`{{4 ; MߔeGep'(OjYBژPTEx^;֒BϹ$tf/}ͮl89 /RƘZ6jӸb|m[EQ= Nz,^<;hB)LoY+%adP<',s?A l@mrܠ/RtԤ;ÉrHT]O>M{{u>g؝3=Jje&W%+`kz CeAj}͝cȩ!#'"ӺȮ9=ZCNZjѾ WWԹa?3$endstream endobj 101 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 @N. 2D! }I:gׁm_Xց$i,Ÿ`kSendstream endobj 102 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2340 >> stream xUU{TT?sFtsf(OB(@ _iX)aכB(O  jf(Rh2 6]ݺaqݻrZ{}єE UQ6'-ŲsҢ8OfbJun:Π$4"78?'+[+w^`BO<<}edi.dQSgh9yL@GgdR_8(J/mJIMKȌʎΉQ]xxz-S;TVSTZKR+ *ZIPT(FySAERSLʞYM ʚ\K=4/[I\I%[;mlvmvCr]] DrKksT[qRnF_yPZ1b A$5>S߹3 ŠyQcIMڊxQ[rc#<~|qMDzcD#Nb198̟R}S/Bl0BiEXB0.G]0i싃a~ho[y[^Oi|#]@6ѥ >xvHЇ_okɹ۱tY%89+z#8+BQZ$㻏vpҪW aHk aӣD 3TUò[ʝeDIo ^!}DhdQ-ç,%|+b2yK3M1p3Zç\LKu4qw] 7Y$]\{xw№.t]НX9(SM5f@$0h}wt9.U B:`~mϒ; 'H$I=z:mx:QxW[̣|֙ f9((MU)J|Qּ7] WZ|,}H6H}_֤o9C*0sK~:\Ϛe`ǃk (K-n0,?f?^mcF ?Xך,[qklǂ;Hx`^͒)1_KߕNAD:K78'r>7 N_Ζ>_n53x9>{'`?oM }n $w4 IZ"C6Lv,=J8?m -XA\ÇRzTb\>:Uaz6츅SZf2^Fy 镓ƋOfb?ՂK)-)k OJؙw7T|ɱshD7oƼN%K7`9010}+y$3ges9?y7^ wz%*bbPT:[ޙTCdN:?7|#C* fiź]1L5ZYr~[۳?!}lQendstream endobj 103 0 obj << /Filter /FlateDecode /Length 160 >> stream x]O10 vD,tah~ 8ʀ0%:t8K结ϲo=r_:6F$ir,ja:X8 dw z&UUVBoh )jH4U6ֶIG`BmRZyp8I.~r 6/XSendstream endobj 104 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 105 0 obj << /Filter /FlateDecode /Length 174 >> stream x]= wN HbI  D DHҡ-g}fpM=&jF@:di9 7ޟ4 l]Ȟ-?Qk\MHDHa$ߊoʓ58N]rU쇰\*L5FtWc~ >AWendstream endobj 106 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 107 0 obj << /Filter /FlateDecode /Length 2862 >> stream x[Yo γ1KzOX/ ;N6Vxt؆F䷇U]d8#Ѓ:X$*}?3^~ζbvvgïz:H3}t͎N@9&^WΎ/Gns1mS@f%;N=;I΅jB^nYL8!t-z [c8WX&*2A;ʧm׹0uf"(i|݄!% ;R1- ۂ>\N+y\JVQ],TT{M塅?(G%K_>nkl?̭:Uxp^,aeY&EE?/~*WT Tl?e]/PʹsYPj=EKzr*V C4E,Ry.G2AֵߢFZ^0[)DkeDDLCaas`) z64],0^w`X4hHAdWQ<67RuWszvN*ӑB۬snsZh'eh \M45Bb ]V6l.xW6f[~0Avht8Vʰe9=؜yiؖ5WiH쭉U4HgrI6\E2rb,Zpzq\e;o\뵆;Xl N9Qt|OJ_U80UoNz9[!3 Cg1PBg7Qtz0L 9৤jhƬ<6Ypd0A:>{_+'KoC&FcWfX:°9↽ c|F}q~,-,9ڇj‚`C8j FvVC  l^q4 FTdvų;f60DFQhnj_ )93*|G8ub?MVӃ_׊R6Syw O8娗(k _8=\DA\FN􏊵58@0,JJJyRRv:8n E3=KG<") ļ'yc Y" )IA.h+aTSR ԺFbe nl7%.(F8 5v&E@V$  -H²fd`=r;kdN$N#9ḧ́8*iIc :x'8KknlZWh$U0hpN^8ť菠i>7z]$4l dIC JK0U[Hb)yy QIxFaWCxNct T ?&QAQT;MQ;Opf D)m\l-kjJEQ5( vw 4wrp s q/A"ȚA[<92 nmdJ=d!ӓHy0{ڟm97̐Sn~`34@t"}AV `L*zq@tk'9E A{YS :뭈/ی;^r'$K7!aHKԂw3RimEX5DomY>?{%'fM"D!ua.e rXVik[rJ-0A`tsFTr>$6.*m `ˢ 0)Z@Uڂԑs6(d1;[KMppc/j5„n$uTb}<.ʤX b^3R>gd?a 3d,B2s_23rqs)Lx6^Wazh[U?d(Z%Gij mkE$)#Bթgbq2Q''SH\[e'ql;Y^ ؞3Q=vĻ+bO)b~ЌsYo+f 6^o?R~ [/٢3)-IeM*_Y*roGe1L$l~-eU"Y)wyX)18I|%w$N 2\<~K_B& in:K\mpuC609\B-fϧ̜0?M#6io޶oasuLty܋y5) ){ ~C;*MQgtQǗD{ľMONNy350w>Iю[!s Lٚ-We jZs*]IPIJ.f4…!^|yvlݫj".F^{L 291&Q.+H=MnQ{?f.UӠj a7˚8w@ٷqm3'[~x멾5^! 6e3ůEoIW=?{ W#9tv~_Oǘqendstream endobj 108 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[Io\A9<9J`+N^7!54I䷧75CJ:կj ƿǗ,.o]>.?Ǘ`<`N [cGzP*izZƝ1CNzH;_ kSn@Ek(W]kK8}ux_V!)J!{G'eXrzᴱ]I?ǭ1uÕQ_Ԣ>#Õ :*$LѬoeTvCwliw*j\=Χ'?!4vj?!h`ܿKf!9RO^Mkݶ)uEL\D3kh \uO"OO2<mw)|)υg^}/hsz2zT'v[1 ;'kl@N:Npj `W.ü/cV.!h$zyA) +꼆&e"~W@s]K ΫǬa9HRE)*&N T a Ç n&p~u![1r1+k OuCYtb|t1^k.uX{?)$)u_ WVA {\NعaW4\1Wt^;_ n hjDd /Dj6)ʎ5`{7N]ĩWkC& ݦX苵**/6 ,8eU@`<79Ҁ&+ <96TL@FْzB:)fiKOzdyrJI]q?mA(#LEщϢٲ,U`~7n⥼fG|˶ Ixm n ǂo˝,qfyW'1UܶFЅ>R/lkv5C ۜXdA,~Sy͈*^S;t]6k7@hӗuUpdA*'eL~Tb*ţuT@\2$>cyVUϘ ,26{x]cR+ BwAR5p: a\t!WN!F#i:7E QZ淭s5_\eqMC$FB415 z=|r,xpZ {WVH0!QPL,ϭr/xZ+a.֠+BhJO t2YlQtkLS+VCe ܽ ~9`"]Y7ZHX4y@)K%}:$^l⦆ r6䦒~_%Sw! K'liD 8Z\ NfUjSkO:$7O8|bۚAw,*:v!`t )wc@ O/1(fj1w ,h$+6ifrcwMP NeO&C%Lhk$}FZCIZZPKюgA˯a/F"˚gm:颞%_(kIEeC>+"Rnfro;3B_b$aI.wHbVur q DWO+^Ѱ](PC1Ѱm0uѷ[zpFE4 :' :@$ 8N`d̺ yiO yT8k0QxAO`#T2667n%q!z0HEpCs[B^WwAͨt C̊M/0@{Jx1R]p9@˦{`5nFA25 f:15h&ׅ~`cv.7y*R?O|yNUH7x#‚(*g[2w7{ rDWL&AbjsSJCe: ϯ}Y+$1,}YR7f3ۏjs&1G(앏oW9)qvE\{rtZCowKz0^ OXVI**`؝O@9L0]{q%QPRh@HĤֺh-d YIę݊Wr'84j?z90 W3^ $ӏYOX)OEؔ3am? Oٔ\2Y2>non=!i߫L>ӝY0lI$RB8F$,}>O#$b <Ɲ T3K(Z v4? %)?"9|0!h&h^Vj0;?LΙendstream endobj 110 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3368 >> 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 111 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 112 0 obj << /Filter /FlateDecode /Length 2425 >> stream xn[_AdblIP8@OIXDR(=ggJ)i*A燩Tfv"W&286ӗK 4v)7]^NA9Zwޅ3SaLN`}P_*Šg_ +СBn+ĭ=yQvr JWhSBtGξa~^WÍ Z=r@G q}ŠnVO+w\n`@ϫ㢘/F d[Á9"Bh|pȢy3Y٫]&P6BB( >Ie2]EBwg-kby/Qy:(녋ERlbȾ ל:=0?w {χ`HfPY af. 3XBC }0kY+xH0D *3{ k:xX% ѹΫH;[e1z1`l %޺akwT(u[;TTIЉ4!Fd|i!Cڡd"U уR< V} !8d44k\k_t*F~]S1K I@Qo䮞[̐c z畗Z眻=G /ثs04Y6&9sCx -5*Z?]UM52ѺJNc fl8EB\2w:sFk̓Fz&4|Qn\rxqǀS\(˳ k;x.baP3lIϗ22X?=(K$sw0řF^=!gHÂ3(j7.PB[9ldGb Qr\_u">~ GD $Wݙ'z j EMoo9tR¬Dh@+m {;v$w9}6&xV1FFC&gM;dt8@Ojru>f-\Fߎ˳RƎM` 2DSG7 A5S DHq +WlNςLMJTVȨ2j-Wx\QPp^fG(7ΨvD(jP'I,H'⸮q\k;(ͼ(thv0N+YK a;GE lBH$քOe7Xс,T?bsA*z[b;4jI68 ə;|%SZ,RrPNB0\*U_PG;Syl,EJSM(wQ#oFDnqo6e-y[&Z*J#[WRK鎦M.э- -m>v J(.xE&.z!,٨trQNF28nlJ)H59!,}xkvUpᅵrL]YP|"""~li"ɢ>$\o~CȁO;p[3529\HPw4}Ifv_K@@$ [VC?pHLNcۊS&+Rۣ_w[e&nHa`zc]ۙ(1$|-M5nuoX`"ѝѾb07.AG[?(y(&(=^sνLX|D&(ݵJ5aP٢M"W.J KУ:c:-QB]E͢ nw'hz`!CFq@Pb33 DjccO3ƮIkCzṎo^_͙gTiŸl!}]:6'~x1c>v'es{ґ~L,Ӄ`Ӎ?tlkS˟d0˳ԗ%;fv |!T=EmRMgM_ ooR.^<UfkėigX&ß]X@ 5Jn,zҤ;_䒦ƚԦH?t);fpozCJГV;Zjx> g1޷RJi* JT^N m endstream endobj 113 0 obj << /Filter /FlateDecode /Length 2738 >> stream xZo Gsr0HI}I ;KJ;E(3;䮸<- bn䐜pe&9|~HN~9Y|h&:fGe oY(mg_.d#D0rԎTtfԫ* Yv2/q:RWR +v﫯Ɓ3[*D)l?{{]WY.ynz+u,6i+f;kO|HWuu0|KOj{tpMƒôm}vc[}Wp!&Zc\BX0) (;[JDke '@T}ƬG%|P?AXJ%d41ŌKVE\ Y)])SN$KF̒aLFj3RƦ3%VfvEcBLaD4FZ6)0MbzᥞX U [AiJ*r (T/0 DPo5>(=/_-6 {j&D`Y}=4A`b2[>)J0^*Tu2&42Fc4`,y) tҊ滴.*3 '%t4TLPRx'I3փ]l"+aCFϲdAܮ;\A2=-/`sᢱƌ--l}ye4Ώ9Z|]G:&R)';{)љ.GVo (C;a!ȸM .K{r2fu1=\YVNӹPӏIbd:Ɛ0q>lifקo@ cRtQp ES CY gu`Ȟkya4x5VȻr~3%3IؼcRG{"CKWإ;-to+<0Gz(|]-'X I0 wp1sVǃqOu'15&VN5:I} N0 \8ͻ&)pa#hH-ƀz:Q~,  -)W 4 %)䒔"LQWn[rvtO"A7CfgD_ـ/[`>]"fFǒ1'9|uP*QX !8``cbJING<`BEˬ]Q&B:_>t~=-*II`IRϕz,_ ~}Q$-.Wy\FAx8噘]0jo T{J w}lp|>.F\)Ɨ y"{ ih_YoC*,daؖ3hMwr0%5ψRacѯժ xQHK:X!4A/ث꺝} qwX;úMCZRq Di-p1v0NmyVv3up:jR*RdszBl‹jO1i;6BJtZ! XDh %H %lN n?̤5Gm'r}iYVR!kƔ.cL{ƺ|raߐt߂Wsغܫ _ ܷ{2D,g4JI ՞kؒ(/0j&)Kb"݂ Z2);? % )}RFh;[ &bѓwendstream endobj 114 0 obj << /Filter /FlateDecode /Length 2017 >> stream xZoGBES|v#@*R *AjRC"U;{3~8"~;w*mQ}8iaSKi,zVŨڬ"36oGם])'c^E"ItWEXMMMK+Hp 3J(Ly2]2] DW-2>R5@{xlA) Dl9lCJh`SN&,QⲜirZ$:g;Qx hXXpT L4yXX)sO ̦ڽ*2 #X) L] @QmȐ2!s"}}tEb&"Q9R,m$)sh4Ò2aԊ,{,zew7LGT+;*.$B(t3橐26=6*-XۤeIQ!x & 24VYT&cZF9 jpH8D-ũqwX *6塘kAK6OګZ!yw`uMHK$\!eRګDJI JYp%s]-ĝwpfWF@^:Is3YO20(`adWas萖S4L8hL kPNS@YX+q #^,Rnmº)h3\=Mx0>Rg¾heݩJBZMJJ=8>cꕣaG8Nl~zJkꥨ@C;Ozx֢0<΋v~ښv~/kV_!6N@s!MB9{{C ! !忄̎}Ɔ)[)y\B2^NmD{=#(&&C@ᦁMO].Leۭ@fF#L+j†'ɲi C/%*B}^bj16SXFM-[S.LBEbVT|[VoaPvQQ5k<2e$Uk)}[ax?I~j~z* 1Z_op]mx_fk*e@ؤfS=8 -NJ @7 E Y<]TEa]/yn uwѴKFŇKQ:LVˁ ~"H6v{^,Dzc9 ĴYfD`B~OvC2߆aMAE9m-rK>(?HgH~C)r&OaVy!5g`ќ1,hlv^C:d*I*(^j9X X9/VK[R\&dקʮuUev_o e\fTe> stream xZo7WGŭhAS \1Ї@evJk1op˙]ʊ8Ѓ\r8 oSQ˩H;?=M|D6r3:H7utM&yJkY_+mǛW3Y lnc#$ϱQz CL Uʰ\Kk!+ ¯d %b&RZ9=>?:@kvn-> #Ҩ '&͋ (}}]P׳BըeijUBDGV?OOBAǪ~) ckƜ+K$ߕ"P7:-b>_j[(w͌X!CkslܕƷ(9#)ab0qfyB8k Ɛdm]pE`N:kF( zKSr0<*x)4٠v'BFc.NJ#k9P-K?VEeiw O+f]1Dqb4Fg(Eo%q|WKo|RϩcwWGd%cv%rOk.e,9׌RƩr+a~(~䲟F24C&W?TDeT?+:,,rPyĀf.4.ī^MFMQfUp2K]#3PGBa3\u}? ѵ6D&;1Q:[-SSƺ^_vAv]mobLq̻vBS+UaNXAiGEO F{0s%Po=HI/I$C4MR*ssɋ%ICO>D)^ 6Q> 8Kδmm-:Bfb|G!AlH|$QศDU9&#,1p0,0y!^$D#X\\Otb(q߫F& U{zDTgv2}ܴ˪^(CYmOЖYVzu`p1ץG#^$@9 UL"ypO.[Bg 1^k2zQU.-5)*s"mEBVS+&Rj9\ 暊B=&=b9~JciZZEk}i¨-7H[ɗ A)ۅETtvA7m'ai9aً.w N `Ų?* U'ihs&o: cK"%j{VVp=e5[jPyAVNRnw3 wޒ~\3f̡.Im:jAvp?d\|nwp˨ E< +c/rnC8_1c/ :[KT𰹊^poǐ(<2{WUňb!kƈxG}bpnGǐ6Ғ E ݹ1"Bs\r}4,Кo5R;b}kS4k3Ǝ/; H߱n"/ _f =uK_#A5kfd$8 #ȷ"^?NPk)#;Y$ƸWzǧQniTʰO4j_IMJTJ*LqaVu( lm%C i[m  Mm"\%ګsU-3 ZݤN& v-({,JBGXxH">|im`9'妈 91Jp#&;|p;GI^L|g[b ͢yI 5i$:Y ).B ]ӦaQѾݝ.v7;&lxρ4nAq <8i-'DεWJVdA/_sq%L\hb-;]cs!R޴  3jJ^f(=vXqۼ$LE|ڏwaw1mI@ٷ/+쿦c0@@X,A b^ iZ+BULJ/Ǔw.8endstream endobj 116 0 obj << /Filter /FlateDecode /Length 4314 >> stream x[[o\~W*irx3'iM*Z7ǕeH C\IN@"7 yI O_};9ǗGod8;}u :}`=>8J/c97)mO^>yҲa;'gGVrru^Z7n1JMk~[ΫJږA:/js+Z-ZqNȴBL)gAۺm N=򼣶p^ȁ.:yijŧdt5BN /}Wu*9 ؅,4y,n{S%KRBzqFd_k-$*4Ry\ aim@LH|XO|U#, T&'d0K2i/MpṘe QÃ6x+#8RAO11*A;@P4",ځ*ڊEkf.U:jwCC<+-:H+]Pm dh{}Eմ'3G#I0F1;f7xDjOqE~TMl7KsjȞd8oSg'"Nac kj{v_, w8- |tI2bD9:3 ]i,.R:1ppiȝ*k?y׸虴5ڊ6Tbk4`@F /}3{Y(JEKfU/­Q ~q'(c*bQ i9qcqd ' s]2:bNiO}=,S 0#WD*ؐ5 tW1IZ Ūi)_ 7wҀ_dQ Zv%0}zCݹF@ g=%0$v桦ѵy>S&c ږϊ,;mZ{""+ K62ԫPV 3Qa; E#@0ȹ1MìNk =)a<;I#KMmy8ܧc!)>K[,9SLjcb2`"g[^3l'rU-HTg*FPlVN"iydCTwʐXNl`̿F 'g^fz;#QQ/?L\#EM1/Kj ׭xF$T&ZFŎGԕ`=Q욜B?pnV)c}XLG6Cy +K2ɿ-1cZ{e6 3)-X"p\_#FyQ3^kKt8i!f;VHW!Yż$ R*5FMr/KM6Y1P* R|Tfyh Gj*Ţp0pjmNMdY$0)#\\<@OR[C0{kh9eю#A"oNY!;/Xrl7d9TWD`Xu޼wh1OoTzޞgT*3n\{X=.Z c۽x[ u NolM } ؁tMk><;F‡zjtf!(38[Ŷhޞ1. <&1!k4r6eBȺYkrxx໚3OU&R7F;XhT!V$ġ(HJ`] ASΧb5=A*Gp>"t)<a jt[+'G'C j.glSͰD& 6)SJlw.yn$T\2J:\6ZKeY0;)2t<*zBVvSwpG{pn&ز<ϘصۅSbA4}Јt0$u0j7H:4W+Ih"И==gw^byŐ,:P(ݭFD@o 8b .a%G^ن`JG.Sc:x[DCd~S=w| z)9;gOL^vS+&ل}`quu  UVH  %I(Kf֛:̵ӹ`nz:?NR 4cLK:SMly~S-{f ,uft14 ꑹl ̈́y> Ԡ)'ʀBb\q4^n wskg&HhUW-d bnQkoaZ7A~jݦ 0@ A70WuǭĮ?"1N*T?#@[9p+{Z>[$ ?+UkBJlM!uznFs'7#%˴e@}-jΔD/Nt9lMeL6Zy@u} #]=e"U]UyFX #-Ҳ~#B^YW-qtjܴ]MY$eQ€ؑa̦ۦKa|ep8;@u%x *HPd ?U(1h{G( `l! ߶:Z\QK7|:/2XK諌Z4$^+$Ʀ|+.YOY8b>eOkvӣ_OA&@c9+0]9{Vxgl<ۭbCi4ƁגW՛RqhRYCБ?JC1/tr endstream endobj 117 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 199 >> stream xcd`ab`dd v 5400qH3a#ewgς 0012:)槤)& 2000v00t;gu`Í ʅ|(YQϡ;çg /xk76i?~뙱wh7{r\-< jGendstream endobj 118 0 obj << /Type /XRef /Length 147 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 119 /ID [<3ecf6a635bd5982def782aacb023b150><51924ed3f3692ccc297efb9733f6f5fe>] >> stream xcb&F~0 $8J?ߜu@6[3(޹@$w"9A+ "@$1S@$(]"ŏHa"`Kv0l/`-@*`j`)Qn endstream endobj startxref 83766 %%EOF multcomp/inst/multcomp_VA.R0000644000176200001440000003050011512634221015433 0ustar liggesusers 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.R0000644000176200001440000004034211471214260016246 0ustar liggesuserslibrary("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/0000755000176200001440000000000013200576515013260 5ustar liggesusersmultcomp/tests/regtest-lme.Rout.save0000644000176200001440000000465212654130706017327 0ustar liggesusers R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-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: TH.data Loading required package: MASS Attaching package: 'TH.data' The following object is masked from 'package:MASS': geyser > > lme4OK <- require("lme4") Loading required package: lme4 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 1.304 0.032 1.331 multcomp/tests/bugfix.Rout.save0000644000176200001440000004241213200576515016357 0ustar liggesusers R Under development (unstable) (2017-11-07 r73685) -- "Unsuffered Consequences" Copyright (C) 2017 The R Foundation for Statistical Computing Platform: x86_64-pc-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: TH.data Loading required package: MASS Attaching package: 'TH.data' The following object is masked from 'package:MASS': geyser > 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 (attr(tmp, "msg") != "Normal Completion" && length(grep("^univariate", attr(tmp, "msg"))) == 0) warning(attr(tmp, "msg")) 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 : multcomp:::chrlinfct2matrix: 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") > > ### reported by Christian Ritz > summary(glht(parm(1:4,matrix(c(1,0.97,0.89,0.74, + 0.97,1,0.97,0.89, + 0.89,0.97,1,0.97, + 0.74,0.89,0.97,1), 4, 4)))) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) V1 == 0 1 1 1 1 V2 == 0 2 1 2 1 V3 == 0 3 1 3 1 V4 == 0 4 1 4 1 (Adjusted p values reported -- single-step method) Warning messages: 1: In RET$pfunction("adjusted", ...) : Covariance matrix not positive semidefinite 2: In RET$pfunction("adjusted", ...) : Covariance matrix not positive semidefinite 3: In RET$pfunction("adjusted", ...) : Covariance matrix not positive semidefinite 4: In RET$pfunction("adjusted", ...) : Covariance matrix not positive semidefinite > > > ### reported by Melissa Chester Key (Apr 22, 2016) > set.seed(2343) > > X <- data.frame(X1 = rep(c(1,0),c(20,30)), + X2 = rep(rep(c(1,0),3),c(rep(10,4),0,10)), + X3 = rep(rep(c(1,0),5),each=5)) > Y <- rnorm(50,4 + 4*X[,1] + 4*X[,2] + X[,3] + .5*X[,1]*X[,3] + .4*X[,2]*X[,3],.25) > > model <- lm(Y ~ (X1 + X2) * X3,data=X) > coef(model) (Intercept) X1 X2 X3 X1:X3 X2:X3 3.9847713 4.0607950 4.0317907 0.9166263 0.4455296 0.4604559 > > my.contrasts<- c( + "X1 - X2 + .5*X1:X3 - .5*X2:X3 = 0", # previously wrong answer (actually got X1 + X2 + 0.5* X1) + "X1 + .5*X1:X3 - X2 - .5*X2:X3 = 0", # previously wrong answer + "X1 + .5*X1:X3 - .5*X2:X3 - X2 = 0") # right answer > > (contrast.result <- glht(model,lin = my.contrasts)) General Linear Hypotheses Linear Hypotheses: Estimate X1 - X2 + 0.5 * X1:X3 - 0.5 * X2:X3 == 0 0.02154 X1 + 0.5 * X1:X3 - X2 - 0.5 * X2:X3 == 0 0.02154 X1 + 0.5 * X1:X3 - 0.5 * X2:X3 - X2 == 0 0.02154 > > # right calculation > (ok <- sum(coef(model) * c(0,1,-1,0,.5,-.5))) [1] 0.02154112 > > stopifnot(all.equal(as.numeric(coef(contrast.result)), rep(sum(coef(model) * c(0,1,-1,0,.5,-.5)),3))) > > > # actual calculation - note that -1 has changed to 1 > #sum(coef(model) * c(0, 1, 1, 0, .5, -.5)) > > > (mc <- multcomp:::chrlinfct2matrix(my.contrasts, names(coef(model)))) $K (Intercept) X1 X2 X3 X1:X3 X2:X3 X1 - X2 + 0.5 * X1:X3 - 0.5 * X2:X3 0 1 -1 0 0.5 -0.5 X1 + 0.5 * X1:X3 - X2 - 0.5 * X2:X3 0 1 -1 0 0.5 -0.5 X1 + 0.5 * X1:X3 - 0.5 * X2:X3 - X2 0 1 -1 0 0.5 -0.5 $m [1] 0 0 0 $alternative [1] "two.sided" > > stopifnot(all.equal(as.numeric(mc$K[1,c('(Intercept)', 'X1','X2', 'X3','X1:X3','X2:X3')]),c( 0,1,-1 ,0, 0.5,-0.5))) > stopifnot(all.equal(as.numeric(mc$K[2,c('(Intercept)', 'X1','X2', 'X3','X1:X3','X2:X3')]),c( 0,1,-1 ,0, 0.5,-0.5))) > stopifnot(all.equal(as.numeric(mc$K[3,c('(Intercept)', 'X1','X2', 'X3','X1:X3','X2:X3')]),c( 0,1,-1 ,0, 0.5,-0.5))) > > > proc.time() user system elapsed 5.112 0.124 5.243 multcomp/tests/Examples/0000755000176200001440000000000012661100761015032 5ustar liggesusersmultcomp/tests/Examples/multcomp-Ex.Rout.save0000644000176200001440000016432412722042565021073 0ustar liggesusers R version 3.2.4 (2016-03-10) -- "Very Secure Dishes" Copyright (C) 2016 The R Foundation for Statistical Computing Platform: x86_64-pc-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: TH.data Loading required package: MASS Attaching package: ‘TH.data’ The following object is masked from ‘package:MASS’: geyser > > 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 > > > 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 Estimate lwr upr trt2 - trt1 1.551055 1.184052 Inf trt3 - trt1 1.396362 1.068766 Inf > > > > cleanEx() detaching ‘package:coxme’, ‘package:bdsmatrix’ > nameEx("contrMat") > ### * contrMat > > flush(stderr()); flush(stdout()) > > ### Name: contrMat > ### Title: Contrast Matrices > ### Aliases: contrMat > ### Keywords: misc Dunnett Tukey > > ### ** 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.0637 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr B - A == 0 -2.1333 -4.7925 0.5258 C - A == 0 3.6000 0.9409 6.2591 D - A == 0 2.2000 -0.4591 4.8591 E - A == 0 -4.3333 -6.9925 -1.6742 C - B == 0 5.7333 3.0742 8.3925 D - B == 0 4.3333 1.6742 6.9925 E - B == 0 -2.2000 -4.8591 0.4591 D - C == 0 -1.4000 -4.0591 1.2591 E - C == 0 -7.9333 -10.5925 -5.2742 E - D == 0 -6.5333 -9.1925 -3.8742 > > ### 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.00271 ** 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.8944 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr PE4 - PE3 == 0 -0.012820 -0.114116 0.088477 PE5 - PE3 == 0 -0.084398 -0.182363 0.013566 PE6 - PE3 == 0 0.019286 -0.084218 0.122789 PE7 - PE3 == 0 -0.010048 -0.120052 0.099957 PE9 - PE3 == 0 0.075536 -0.028035 0.179107 PE5 - PE4 == 0 -0.071579 -0.128783 -0.014375 PE6 - PE4 == 0 0.032105 -0.034139 0.098349 PE7 - PE4 == 0 0.002772 -0.073229 0.078773 PE9 - PE4 == 0 0.088355 0.022006 0.154704 PE6 - PE5 == 0 0.103684 0.042656 0.164712 PE7 - PE5 == 0 0.074351 0.002850 0.145851 PE9 - PE5 == 0 0.159934 0.098792 0.221076 PE7 - PE6 == 0 -0.029333 -0.108252 0.049586 PE9 - PE6 == 0 0.056250 -0.013423 0.125923 PE9 - PE7 == 0 0.085583 0.006576 0.164591 > > > > 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")) Warning in RET$pfunction("adjusted", ...) : Completion with error > abseps Warning in RET$pfunction("adjusted", ...) : Completion with error > abseps Warning in RET$pfunction("adjusted", ...) : Completion with error > abseps Warning in RET$pfunction("adjusted", ...) : Completion with error > abseps 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.4151 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr M - L == 0 -10.0000 -19.3520 -0.6480 H - L == 0 -14.7222 -24.0743 -5.3702 H - M == 0 -4.7222 -14.0743 4.6298 > > ### 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.03362 * H - L == 0 -14.722 3.872 -3.802 0.00109 ** H - M == 0 -4.722 3.872 -1.219 0.44738 --- 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)) + } 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() > 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 > if (require("SimComp")) { + 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)) + (m2 <- lm(ADP ~ Group, data = coagulation)) + (m3 <- lm(TRAP ~ Group, data = coagulation)) + + ### 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)) + + ### simultaneous p-values adjusted by taking the correlation + ### between the score contributions into account + summary(g) + ### simultaneous confidence intervals + confint(g) + + ### 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) + ##D + ## 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) + confint(g) + } Loading required package: SimComp 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.0107 * 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.3354 pyre: grouptrt == 0 -1.1580 0.4460 -2.596 0.0356 * 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.4744 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr head: grouptrt == 0 -0.13837 -0.63067 0.35392 mala: grouptrt == 0 0.41140 -0.21655 1.03935 pyre: grouptrt == 0 -1.15795 -2.26163 -0.05428 arth: grouptrt == 0 -0.13371 -1.03959 0.77217 > > ### 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’, ‘package:SimComp’ > 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.8428 90% family-wise confidence level Linear Hypotheses: Estimate lwr upr V2 - V1 >= 0 -2.13330 -Inf 0.82209 V3 - V1 >= 0 -7.46670 -Inf -4.51131 V4 - V1 >= 0 -1.66670 -Inf -0.03628 > > > > > 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) + } > > 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: 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:nlme’ > 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.8428 90% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82206 b2 - b0 >= 0 -7.46667 -Inf -4.51127 b3 - b0 >= 0 -1.66667 -Inf -0.03624 > > ### 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.8431 90% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82261 b2 - b0 >= 0 -7.46667 -Inf -4.51073 b3 - b0 >= 0 -1.66667 -Inf -0.03594 > > > > > 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.5961 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr low - high == 0 -2.0150 -3.2734 -0.7566 medium - high == 0 -2.2560 -3.5144 -0.9976 medium - low == 0 -0.2410 -1.4994 1.0174 > > ### 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) > > > > > ### *