multcomp/0000755000175100001440000000000012661107225012132 5ustar hornikusersmultcomp/inst/0000755000175100001440000000000012661101017013100 5ustar hornikusersmultcomp/inst/CITATION0000644000175100001440000000137611471214260014247 0ustar hornikusers 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/0000755000175100001440000000000012437105401015202 5ustar hornikusersmultcomp/inst/deprecated/multcomp-oldtests.Rout.save0000644000175100001440000004253111471214242022517 0ustar hornikusers 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.Rd0000644000175100001440000001032311471214242021427 0ustar hornikusers\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.R0000644000175100001440000001302311471214242017425 0ustar hornikusers 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.R0000644000175100001440000001525111471214242021031 0ustar hornikusersattach(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/NEWS0000644000175100001440000002506512661100311013603 0ustar hornikusers 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/0000755000175100001440000000000012437105401013642 5ustar hornikusersmultcomp/inst/MCMT/MCMT.Rout0000644000175100001440000016762612240416645015306 0ustar hornikusers 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.save0000644000175100001440000016573712240415153016235 0ustar hornikusers 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.rda0000644000175100001440000003305011471214241015073 0ustar hornikusers} 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/0000755000175100001440000000000012661101017013645 5ustar hornikusersmultcomp/inst/doc/generalsiminf.pdf0000644000175100001440000063455712661101041017204 0ustar hornikusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4596 /Filter /FlateDecode /N 81 /First 671 >> stream x[Ys8~_Mjj *sعHD<c~~ ١gI`7 LY R9˥bM9J3ir\%NY42)4)mqLYA)SYk4%-59+ɌVIs\5j41)$ÐTk @TƜϙF3 si\?ZL9*-R i2Y 1#Xn0Y#YnmΌbT;H"->n8w6ADEKfA!L1 ZJ 4-d2@)`@9H#{I1UѵA{J\ZH$ 4K"dcS".np2Y*m A [G6AR>h/SL9MŁ$0i&?oƟd6&,TrQ!yr\<|(kFmN袇Cäg7MzTǃYC < 1=&6rnXU``Ō[MUQXź:7kULr؛T/%@h~BG_ٛ|.gi-1Y<.}YfkvOA_-g)q \W|,t؄.(9yz zwEE3" ̰o>6V_UCńapB<>v"x4S:|Ml X,+N# &^mq 5'qQ5.Nū~gcZY9(32+P A^nV"ݯÊd@ $^âlw/VQַt2F fē UfGA3Py 0*!/69L^먟H3EEQ9CDqIaeQXv04ab&LDL 3&|5TZԺ$jkFTH i~6o6 ju m ԰61M}Ty{^mѪDmJ4)2 lq͢ǻxfpkZ0J aka+hqRUg˗/ɇryZTr:-&d<Λ߆[ ~=O,Y 2`&yNI,c1" *z: ]ӹLf',x4 0Z0"dn)Y-W&ӈz~޳|rV.].n-{;'pe>A%[ϏA52ữYuB|l* ; ¦qtUc PW_|?/ B֚]ITvGtXD <.Fщtz6Ē`뭨=&kSstM ضPrW=G.@R;,LդUiK)Y|n)!P9Դy>ֈ[K|/{Wg|VG5-+rh%Լp1Oxp| u"|ll¢Ih -]w6Q"Hm5_?X?~/m{œa~[[4Sgm,X-X!U72ϱiZ'߾}]ob%CcG QthI.u!㌃*3 Szgu)81 i3;z<.c2Z3z=y襪FaO`} 36 ,@1:oK4KmQRf=r4!z4g RU ۴Iг KLԮs˜6D>MWyػ7Ҿk=w -g݃]/ϋ>"mT7;s H1F^8OqѸU8+Z'?+v6(S}C/+ȂI;+B{Q"9HoEs$}yl{{O}a}>h=XLҠQ1L1nA >]}GG:O 9NDP" mz|p#3`"R6vMy#v]4~=lD/ 0Z#TGgi'*mL];0&/SY-~Zjx{"M׵myʰ|1Ϧ:b(^1%{Ô}qOϘ߅GW]Jxwߞqα>Q B긑aJ>aL/2LV/EF  #ާ*Ի*H|KVK$QuD[1B$4uIK5VVŠXWvl}k"-֥?ٖJjjR*\"@MtQ"HQ4N2t*s)jH!"O4=HexdcNJB2aB6a{dP(T#8 LK.63X&29' Ha0W!*1ҎtueSL_K'ߐ&״ EI+R9GЈV!H]˜;%lȁk`1ׅQ~ڢdin(2M,Vx l20W0˹aȡP;1@*4-D8eYbi fJ*^)Gf H % <,, lK EmH %x-߅ z` >"o#_2Vߓxgi|uL#LmT- >g!#B)m^?BBe+A< :^MN)LK'FEI]<~p۴:}_*h߯Ps~Xf?K1TՂ$HiCN=ڥ>-Q(JĎ$%Exۯsp06{-+z̧y>#42 E;ۦ6=v2%Iʄ bmr6U޸Kk<ʠ'+og/ 952P@nY_xwh݉;> >jHn  [?mxC?iYzS}*UҎд_1V\%)ǭ4ܰ;Jz\m.4 DiAPOMM-1 z^)]+ 20?KA\?ė5t#RBXApA:Yzٚ$ޱoIZ0>gۻ`}<:*Vt )0nxw`Sh Q~s/i۵S+[U~-ѩJL:a۩ޤC T:e- g),A|ʚk86gt}"urж4'Q>C:-a) cs*uP%"BDMiC#' ǰPNjendstream endobj 83 0 obj << /Subtype /XML /Type /Metadata /Length 1590 >> stream GPL Ghostscript 9.10 () 2016-02-17T15:22:22+01:00 2016-02-17T15:22:22+01:00 David M. Jones CMR17Torsten Hothorn and Frank Bretz and Peter WestfallManuscript endstream endobj 84 0 obj << /Type /ObjStm /Length 3616 /Filter /FlateDecode /N 81 /First 735 >> stream x[YsF~_1IlR%ɖr*>( P$M~ I$wf===_ SZuoΤ4I5%,WL fJ r&2erO9cXBiyL{0 J ͌x0Xqa:;fR(0Eά#R2IlRj愒$\hc1Ap9ʙ)t!7XTyZ&- 28br,(C< W{ny4k 41lD 6@jⳡ ؁E_!fCROaٝ G ]G,3pc"_l2X)/D O,17KTl[b)qx"9{đ*2؜D, Ђt=`t+. ]Gz㏌Fj[.X/x_үN&*FMctew|>6m#^yA1cDٳqկ &hj:毞3{qYaҟ~IAhv֩DM7MSi}*Ozɐ i i i|!|y/A&?s}~gE_9~w.4 6OohVnYwޟBE~ZrR,q>^&䂎ov ck_jZE7@=~1ru!i8N9hKן>|)/l$?% >c>S>3NHg݅ć~_ +xٿ(zX`gt6,Б4@\2?74]Z[/~&d[MRt`s%- pM5,}'{X92~i=Ho7i@F܅si_Q?144O^ 躿͵vՋͥ3@p9ķ|p^O<3~֧gZi Çl/R>)OK?YyiWP0_?OP G \qR?ӤETd ?nf9h>R^1VpD 3q^E{xwH_%ɪ#-irC$"U+t"ʨ 0hfQ/I6roJ]CVBdy3u7֙Pd2,@)f702v;_q{aKW`⬁,NP "H[u=-6ẏw/p7o[ݡ>Ŵ d<%(xqB >gQyOW/_鸥5z@0zwGn[ `֤m_-ڊ/ r~ NףXl1MPWUW=G6ɯBr ]nNf1+FFQb FK8RR2^(GϪW-ɤy6B acmѴ]l˖,Vwvɂ #-quSvxB CǗv n[`z]vl nׇc;[˵^w)ޖߚ͆ ۈ]m|鱃D.; VŶ |}]%7Ipmꆲ (ۮ~]odcsŰ@/>WU9(_) lVt">"])hcףmϋ;jM3_\&֣Mw){O6SLj{jQ4^ƕi6^edtFa.5HNҺ,h`ǁݑ"ONk"eLQD:LA(3 \g>u<:L-3k.0l])ms0U}(,[%[ *s^LixÆ%l #E ."p#7hf\f8P⺧^?&߀g3K<Y3a=cKjwggw-'"{YIbf1D]EhvYW!]c6~gW/bk6arTgM/=aK\V|BYa-VNj&޼ NVj40lHJd Y@|(5û[K#tdrKCQT0a,=eă(BV-}WYI B1 ݅+6x WD:JDA+z(.QDu JiؙoJ6jE"#%[J:Ԯa]*/IoE*r2eNd)c/ac?(bDmVK3އ̓I:&r :&Z"3Jn;GzWJ:r\n \H̸!G%\(7eUO \7/g~ҟiOQ2ꖖuL<ҐS*;[3/b(lJMh,G9gϩ,Gq>ӓa}īz ΊOxᬼ?kvKM&j|iT7<\KgCib~Կlj++Z]Gտ/`"TT n*nZWV wG*tvuڟɇIJ+.YCOkbA$sMSTn ;U,wV78W7jh;\wo}GsyLaJhqFrh_ oZ:3B -kHWg .Mfoߙyt0D}Je;MU˅Xffu2|c3!BŜ:e1tp^FЙ SIZ,jfؖdY.nf63*̚y*wG1X3%ZFEktoD$b My]U:%> stream xZ]o#|ϯ/0$@Ag yx˿wriOD4ݙY':esWZF)NFT'Ouʟ̉U\/ni礱f\ cx6jt1Ebf?\=b٩Z83+lӔE N&Nk6Bp-7EEXID-9貳E+βNuV-h>F R4%mKic$Z\ʰ4D_ۥSuY?5#F .*rhܹ&.J@?1# *3Jj|R'b+&bkPVUc>jVJqRQZLIOi|kFh% dZ1tZ|6 VZa;  8d 7VHdP?YKq-qJ8Wnb\ݺ0/Kɺ^^j/=NNNN]7vX@ymWˏRKb1x ^pfgb5Gkzoڞ{7 ~5{7go縼3M;vy9wq9ĎlVjUm:v,ϩ9nu;iqjW Cji[wA>[zy380-+*._nﯯ"!V-<=<jů#a9<) :@Y2xJIuON!krHf'!|@ŸO2XpI-x+&rPoV,{ex31;BF֣쌱S'k$!k}X'#T@ O k& m1_ÐNT-+@f=!> DgA.%2.Opu>TWܿCdJL*~RPv@|Hz!PVxt kZۀ2S\<T>c ]u˘>L;#Z?ޑ\= g/MA&@̝3H `],[03 :"MeX (E)t8v9*7'#ka !ylwv(S x z@B `lΰmHsJ0BG&>FTS^% +,ӠRh*gjI^N ^+#<3`W; :W; |S!`ģ R -u(%n*5?V&iL ,Q` 2 &PrL'9IQ6<j {LܜM'"{71-#zXRԯ<-P1054= Se).!N)uBJL$79c L;|Fs(LaH$xd̳)"&O͐>wmjX/ջ/g>W~q_ſ]6{;_iHpo|"oTT)Aqi>~$SFJ 20e&n'DC݂Rϓ@EzC8{hwޫendstream endobj 248 0 obj << /Type /ObjStm /Length 2504 /Filter /FlateDecode /N 81 /First 721 >> stream xZ[oF~_1oۢ/@Q֋JE"36Y4t ΐDҲ%lwΜwfLd)+WT0*U30'jWǂg1wKT_:}@C2ihLh&h&cĔCH_F 4: ^GK+ia2Rg1 cP4@2i <5VaE8bH&كGC8YIdV(sAZ">(76RH:&2hTE  124 Z.!*%ia@\ӘBcbo%T"<i hZ)ЀZJ棆jbf5 :=,ԇ,#=,E"_F%TG+n4訕b 4^G/A>W&t#H+Ϥ$ v'`(G68K7 !/!\j:eWlkyL?u{;g%s<|-_N3eqMxvu|-{Oiʓb֓x.|L;UUNdq n߭,+V v1IZƶ){jN{ךZVJ5~Iў .-n;2/flw8p#;eN7fwfl[L-ۂ®RkrۦĶi9,ӄ55hy ٦elOIqw_ch:)ni*\zVr<'$%M[a_xvoKLgetW|g7ɉf]6lڻo/RsLR[b2HG}Fd-ji<"uCjӥ9'pm5l^)2ҍ,oV3rlB= 4i1)'e9:VI7c-qZoIQPR~PA%['a[0o_|U1)Z &Z kPE" =I(E{%=l&2a⑈4y" i=pk@PEm#"ep')` X-*Ti=ѓ4TwRTP,'F$@'Ւ;KzΎ8N٤&3#A'92gd/y״vi I9C~IJ,o1*RO`>o UgxC }}U9ϧ*]o6WԌ5\f擣 2n/:HEm?-Q.o˴J!JATbIb=hV1i7jJnCkO::J0xL 3A"_HK(zzd@IZƄIڮ<گrǯP[aejP`\BP $T UAY EZgeF.Ei-,p+2l*@(CF;5"+7~ %wa,۴{.D,,K'X-nQ[e~Z}xQa'gat>Jl-Y]ĭMIr7lvM cv`Djf5<hG0CA/)O,*7كGtɢѕhLRiBpGaa= CdOY{Vgg:k83=ƍeTْ9+sܒ̻w?#[OԦ,m"vڂǗ܋=kNv.uj=N{W \t\&gcr;dp;S(}t:\m$:\iv> IpxGp$u|L{dR'ɤtH:fwt(a.hS<^PɝTVKRj}B5*"M:ThQ!gh"_Q hXR;X ar@~AnU[ipJT ."Y~@KHXB~1vzHg81Sp!EtQBB ex)L;)ӯ*Lâ_F u?+M,58 Pot)~9wgiBbhO10)FTS1cާ}he;V:?T*[8ǪRDw#9tendstream endobj 330 0 obj << /Filter /FlateDecode /Length 7267 >> 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 adˀJ4 ;ia)&e> _4/~ > +i *m6'vdg7i)~ȣ!-GաhqW{^m\vj"ͱʠ'(Xhf˵4r[lj&Dq&S/+4ȧ Ҳ_+E W_}`b"iKU۫/?V̬j  CM/$-Y#lÍse%(6|2l>dFzۀyhP -0Am`-j\ XnNJPu, SeZI?cKk# p-Nyc4Z1£M"vb§Y/D@dhk6} pwJ! 2USD )/?IV)PBU2qOz{ zͧw& ;h'EAv]zhD)ݎEbWJB5o82@NK^1~!'$5<V\d<$J4FNɻ[>q$ڴa1q1cM3P-'GV@gzv}6Ф|B=eդ*,բkL8vжgmikۇdq|,uؾy$6e>Jo/%LNIڰJC<"^¥ηCظ[kssH2 @B]ס'T\-Zc7&KsUY ?g/iA*Ӹf=,|A|S/⺑B~T=VPj&`ÒPJ/I/Ckݑg*2~FbzwNI]]yDtSId[dn824?)WA*32J~Ĕi &ݍd10 z|hָ|;KTӆq_|RaBFJiW0cOwZʥc&òG[f=y0׶%YyUUi0Y>UcSXr?g,fY?3EYoiӨZ:e{ơ w%+_3i󁴺D9wˉܓZ5`)o8#sSNsmĢ"i#],!ŝ1#~6REWy~'8G0#`fv,fx͢ {t#27g.A]2'л.躮6Sе\J>YL}ioumJ}[⡮ڹ)=!L8fVpZx{LLI5h@O|ڛ  YMԠۭcYozi)2#lt8xdd8Mi^tf%kA/G\s߲AU?K}בß>(H==M[91pbmˬnUo%?tcRd)⊜M=#߈\B 1s&V{9*׀a#* Iks69lR5a3ToD_qAe,Yxc@/Y-a⬆ }#uN%Yk}-*dJىm<"2geS=߯ţXz6n̠O|C2+^jFc}PIT_ 3E$;Wkm]J3ia nd]Q$w1H]mJgX\6Fx^hJژk/bjU0Wkt:\OYzhK>c­Px"T{f?ԴkK4JHnd"ݻsQj+u6R̰W{iXs+Y #=J~GOIYJӭ9ښCjAq~c"QUsxkyܰ4uצ /g1о)- YMRruohOǹoRbΑ?to?C(<O&J$N$/kɚcoo+U$o*D)[n Qam[iu{@-%WV&a;Kt8Oj,vl٫_Q4Fy#aSs^c,KRc֎ROW،uI(m`^:5 䏨 jCul⪉+ޞ>6* Kss:RWj:Bn`9W:!)A:e%Q`YS)YFJss c*Z!L[z􂚅ť 5|ĄSL0OΤqM@cI+.)ZsЦiRB i>.,i,[JˁeJ*[yC[YDzC~sJ㜮wf?e8t!WÑR{$rE?GZcl;LېPXۑ >1hP5NM<"ۗc|=%ѵw)ޔ/"Z\Ue;|NC$F"t+UCz=!].u4T<&!.,(kZ<@4$!?t6&p/Fݺ0?{8w3{ p_r$u|V(U.zÉ_|,zc-*]ȱN2m)|K8r8^]Vΰuzt\PdO'&'ZB{vcXR0z˓CVzۘa#I{ {Gop?&6N"-))uK6@:C|]0Ɵh:uY!ѵxײkEvl$f7feV>ؤ#D*Iy=`!<ֲH fkY(U(oؼJ:knYZ+0Ca" v}j=+w RX2~H6 =|uWEvc_Xbyi|d+ZA'-1\ us)&Sٕ.WY) q6sUOXvd9ZX^A |Lퟍ}ǣB[fO%-iM9c/]~$ 8x/5 DPha:S]QLqcèryɞ|uI HyJ,UȔukM* a-}L:8R:;ل dY5E_6T>GxM}5m/cg *%=%~ :=r{$BOy{Ry8_,"MְI s[uhAUT3׷,*^zp^5j6>ɎP68}ՎfmN! ~- H,XZyfS ܅p|lLP.):_> 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Ԝ_|+Ѕ > L=D"֠v_ v8ξ6&ۥT~`Q/ ( _n#ӹt3x>6vWiBԑ76zi_j vGZHdL`^KcӼLH412 _$ /e(6+@_s&>'Z1 TMFmъe?|czӲ2k11 h`o"&"*ɇJ켉z_T`cA-H*vJavK1InȯNȂ #Z2E̅d3`@3zfP 93 VDm[E1S~Vl8E9hѬa6=Q5ͅ=.+ɤӄ7_(=XME|yc7h9D 0y*)aӡrHgH  ˇ\ F Βs>M7Hß_='p;i/dz«nSd pAJ Ͻ1iɄ!ѓl ̄ƲjyA4ˑΓ TvalaM<vr!X؁PE&`%W3k#[L@/:̈́eؠZo |{v4_] -<@G Ol":|CcW :5bL[AJQm' ,&TEɜd8`H>957 Y hZq.Qt)7 ~EԷ5o>C`995,N /Ms.,``ˇ?{:p\A52E"wj\kRvw͏%qK$&`#׬ Edy.q߿Uv3-L.A M vCh4Z 6KT`EN_ًpg.?}& cX⬀g3 S|sř[ vMjw˛Q<*}>|pmDz`R `~` BB;& OL9 #:rMDN>rķ 7y 7Vy?dTO|E;S43Bʤu݌CԹx7iQԆQ`BI388#"& ׯOLbsaKu0X<[6#B ay5ӽ[d#NnQrPwi%"`#Iu#1b0Tw}BҤ)9`l~4&;-pkh}Dشnz֊z }@q N5tPTO(jD! U øP#z3}|=WN8kٯ)Νy`d O||ɰ)Rf@N/z`Pڮr=f3e;7B KlLn?J~ïm,fppV` $k@~jp*~ܮI<\ܨ]m=8Li=3aQu1=ϜB977`E!`dn%3B`$u8'䦠d0!4DwO)S&~K@ 6]5xn:gc.s`=ui0Aisb 3)7t8R?Lg6]*V0*~S'ٶ0_Lxq` v\Na1`PY_4 $ {ѨnN.h<+Ȯ^gR|Wu$^`.@&vM}\]7t?=`92t4PL(/3VuR9*7yl3N;S4u Q+ܖUmg|332w7G+tBfAU] bKGJ!0p ]MP^vl9IZ#]aiK f4qnd̛:W||}G̈H^ϼK֞⛁~C?Hj4&,dQ:`JSDy| *Ţ{~3{Y_V=&tre%!F:(|ܨ K%Xj7Z -;fqE*B66Gz :EE(<0s5-@2V}Z9;vMj@d7p#d%Dp-ݜ'5 9[f T Evɩ,ɺfъK]Tu6.Er$K 8h~7%?KhϸG Zwke aQONaz:.S)<~ObSؿJ-*2Xps-؇H8B'aw^/vB9ncP/ K5FPU.@y8%EUSQK!ت&p@/yDj=yxA4TJF?@;xGͭlVG=1@* S@⟢ ߀G>D!/͢O laIXHJ11U Ƌ4VP#㐀 _ih X[Kx&ԩ#0g#T$݅^R"`8k5 5$D\b˩&O'siDF7i<_T%^b#6G*^^BǍU:{N7}kSGrcrp3uFAxhRӒEBR=6qqQZgw"(6iT-oi0g0ͫEE-O7TW5Hߧ+!ZK._tRzI@yWҼK\\nntBå~똟1/; +hog,WY\\ҽds dJ$n֔VorEJSv'dB;dI'kiިd9Kʶ!]0ryL$P-+ Io4ι6]ѽX*'?:=읗|2OG9]{-YKyd2p;#JlUt8\s: ؕu.7 K0 zm l#EԄ>_$ȏy4vm' yxUmQ az@ ٱ G7vAfBK;_-#%.<{]2OW|n9i%l3I{I.^c{noF{5 _&[o#Yb6>c36v?,Q~YѸf>n ҫ1G+j⚨WP+wP|s3Ǻw{59:|ucrMQ}}h2$aqݫ2qdoK ~pe?f 7qgj]MBTz=̫?;\I0LJByar2&t`Z ФY rCba4X$\ޤ4@U/7C2jldjLNO4ll(aP~ \zKzyafh5x9(<\Har%y%T\+BXe5If@p WAv0Չ92?jikQ([~Oz7h'VgmvSۋI~Hb凊J6MK/>z5E( ٽ7 5RF"HiY&υ^<0gsލP4tХK&l}c+Z Y x'T*?QU /QE-nE5([sMq(+}QdJo؝d[%"3R>vMh3m.p>*RlvuS*`dUo^̱U  u Ȭ^}iiI}T]~.nb&UfMc 8|wܵCd1{?O :C5&NNt5{%MKd(wvTWR 2*HE7՘nxYlןe_nۿ@8x6͝Y;]2!꽑H"3R{3Znjrny+\90wx!#F63f&xjWd06m evr7Cil {>w\5f* `wR6CIRendstream endobj 332 0 obj << /Filter /FlateDecode /Length 6706 >> stream x]Yq֓h1yceK]~3C-vGdfUEQC6ײmTG{&&y&^=/?{qHx#zVƜI9Ek+g_=\LBHiuݝVaw_謵{xD }]#zRgF{8!tp[ZeHeY| R5N(MAgaX&LO%9gaߤ^D:sae[xa޷0[D<Іl? {F^t@@oi OG&p{|] %P;] f۾\ÖyG(}bMRU$C$:( [U̳F1RJ5^f<^Opzȳzj;&G~;9m#|Eߙƪ)F S<"" 9m.*vX RVp3biN+mdOvnǏ~(ۇ^}߬+&?xh49g'* +Z[H^!߾/rfd4jOƄ|߱GA>W:m }&z.yS6GR$vHwFwlCDS4]% yPJڃ΂P <]}-$*_K# .QT~t-w:ν gv*HKAG8{oz[2L2Yh1k|EuEƱ;/s6Qa2OjZ}X+™!}&oa g/YUBa~ʸLN _U?#o>9(Y[rytrEq5P/B?5>> V;0ጺ/pp8^2i+ou?DlYO,2Cͷ8voy_|q\6ƙ @@*){tMB^3HbJ( b?5ހЇ%qETѩ.Nbi`2=*T!j0Id3F/(m]+Tb05)a.P_o'5' HOi)`q0.ālpq>$@NR0ߛ [p|3H(%ps J U;J6 rn<[G{)<D@d18A"4=RCf`w̚a V)iփ?+?W2bc#(¢/(U(/HF,pߔERd;6h p?6GKI8+٨k(P&36l_^wMm!t֟t={}ֹ ʂ5шҀ $i;Gx 5 ; b&2X\&+?tv?.1.q]Fa`g]ƼC D?0#3/y/q@"cqv&=O`%eeߓLN?9 V= F!fx+ݧ85}w\}'dO Vq-W#FJ׆kW24P_pBIG?"9J8eG`6^00wa\ X4(Ss+` 2w>f)5kaa0.TfO&x (aGT ̫+*"4Nm8d ߂1{0eWo$=K4E{i,hoB^~^N;|1j]TQvJbviD2:5k$=|ȶ JWE| `,Ah=/~_NO[U[8bT,{G8MYڑ 1Ei|@Ppp<:l{jLc;_ 8J:WQUonn 4C/fI1ESLF":R=([㜀;I d.6YK+5@R)KPtUCo ~ N7me@[bҠ.lѕ樓Mvl-굼 o 0H1/Z?\m~^8lkB2ߴoc _1C%O(hV$S.99tϔS-e֙XˢrSw'9,G2-3y3_39{!Qd7gGV'i2!P#OV+[чj #q4<nT J>Iz_jfB7N jdX>r~{3ZDOk9$7ZLytHܽj K&VEZJ$Bڅ->MJk Ѡ~$c7x^5٥ bE6e"B26*R*Y Xu8y߃k:e\i7EP1&nF`aӀ -Ok5zq[ai@PޥKMi>Q?( eIqcHsM-K¡=Kِ(_Aϓl \اWw ]g M؋j^m_0t®Y`|mlt;nQۆ5xEr-`18ʁ"+d7`8Y婃* 6X3$bYȮ_`Bз<He]xoTUJ& z^syfЯrHIۦx E*8g(DdOҡu ˄[x[Cuk=fwuYK TKlsho2;ȳjlUYf2Sq2 `%3H_e/C43L jTb5ìI0R 8)e1j{tRf)|Jsᓁk樄\zܯ6U YlvvUW~tb6ܞ-҃q bʀ54~ VNrW4avA̓c+=i7T&`c 'up;0W6N$3# .zP_T^;ϮXû[5 crR~]%X 9~SFiiکU'c`&ǁ7[Yt i e`Z_R!2U[J=uA%hZ)_bgV։ Pdkvb\UԴUF>?HRT*S's  n5~2lA9gQM[c Wv? ޭ_6SyR_ nUb6g;]a뻺xg7'Qf)[DO8Zw :% #̩TL<0@SͼDŽ]׋>R˸|7Wڧq{v'Hwޏc`rz|&M廲auBr44lR8J&+f>WV/Fd4dm"Y}~mpd<o5;1f5ʠa:Yg|ڐj7Ƹ^+ۙQtq•DX%Ӗ$7{n݆e++ڊB|DN,>ǣ)Iz92t. \q0grp؎HF:])Z6oS%ҜA`$]wD<P*;9`*JJs&V1t˚B+.̛rpu=b帿TU lwP=T <^q\첽oY5 )|+<@sP6&|!rY[)d\o31!Þ).HVΓ<Ҍ&O%GLhʰ 5[ W&.30ނ5Rࡹ׉ mti 0V3&A8F oЩ8dmz'm~8'e@]7Fi3JPX_%GY%}V[jD׾YguZaxTl"0~SƥAx/F<ݸ- |rW+e{$(IE]!+'e80hwP+r\R*7hzV6&ϧ`¬cK|V@+[o-*#6͠mD#5KLaząkL[Xkk%"o/M霃oU5NB|E3\#tMB"+ͤbY7yI\7)X2 9^߶_ {fϲsQbLc÷yJ6C9Vm16<^V8ss|mX~cKcUev|۸s[ QU[||){ pܙƞΝU7pChL)4Z~, WǥMke]_awYkT=FR9l\ N;nSXGM6.2%dUr,"> YV7A.E_*PE*js|\ Vؓlv–{3bs 0,uPF8/αɊFƒ^wqWNu0[L5k預7EH|7K#m_$~+-0C,ay^'C }^+DxɁ_n1 qDvw33Gc@cN2(0'lҋpX ,;"67G"}F=$隀MSyrFZT@ZbΌvc84!y_!s=ZT/|Up8v6B[s9L~4#VΏ2H^sk2㫵aq_1&pL{3CJ($ᗭξ&&]H54Y0Q`Ra}u]b 8"SYEj5_A8{znԔ9AX'Mc@uYeސ]PIŁ 0>6in{3C訟uAyh^)S k/3ijp9']_FfH~Dx=|)`g2> fJ#81J#G9]uga*9eS03|>SH0i6hSz#5 bl@7g'1%+BA$JfP&oթJO8mgU=o5Lt" ,&_!ט}J5ۜ- @̣ A^ #(o~F@B7Ix.{.#X!w7{5̾gXg bye;6_LfvUf0VqZbޕ1䅠q[uke)u!b6QE#&$WIY7%؛ƶ )HC'?Ap%c7RՑKsg+qȨvEsX:i14CI]K,{}YCepSJfX} 7;ϝǹNox>7bM5h4|y~%=@ܟqH0>2:V>`j]9u8ylq3cܐ"*g HtĪX.<@Fril /n]A*vI}tԬoCE|UWԒ|.|kl!lᤡc0͠[3MZ *@A+-ݹ`UR3㷁]}WftN߹i˜{T+/٤sMWOw}/BDhҦ_bvKV:łpl{tb^)?Xz]V2}7o34@ LC ZH8> 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+bBq]) ln\DŽ6O% GfGݜ H j1C%VJ_dAf? dPYq9Yɦא ns/s/WuTE<1{IdB>&S vO7xz\PS0TCW'R!|sq *=;W7.S'歓L:qޏ;ͫQ^zűw`kJcBpZ"p"'|#!ீveA$0D`< !/8qgҀR~oZx >\O'l§0:=MњH W & Ȋt9ղV/u_!v%߀DJ>{կjځu_zЪXiAWqa^$FDz->qmE9] tZvc$O_< U1T`dpyGm^fAQ>s\0QHjC ]FǡG??mgMJ1s >[Rp6UR}g 4⤴#@7.c>ny6Ut}^ɠ}h4r&PIMYקiuKj\'k rgH["~ #O#8W{I-IJbMcfոd6=@+rKc~B-Z5R Aڈ-;JX&)}":HX@{]2H9 Օ]|pVtߒ>A =5My벲0)^MY Ji+>S#Mg~"(ʔ -ئ_HpoD*3SX`$љ29..`Hvy^b aKm\24fCc"z o-HQd'XM:lQ0fK!L'G4H3=n"ЪGC\AJj6>Gw5O~T+*\k^9I)rK)n:٧F!ܣ^/Ic&P`~sm%RrC?/eeL*=*K U{'t+JV&Ŗ2!n7& 6пrH2WN>8ڙ:#3}u³g҈ydPeLy+~B@,D"z^UҾ0veHf).;M~-WW^Io_Ja-^mY7P G)>',bVT AhOҚ20c?AepV]>ڕ2%9q0OP@*w(۸[Uwb , j+9i nuzެkaJeR T-|s(&;ԁMAύsoZnЉDS63xf)ce/t\\hƒdXU?GVU<ƨJh"-?:96॓z\ȡQ9(6je!g IvxZ@^-,ZSvsr4e cu%i. q-~e:KT&eo Pk> ,HS i.`O3q &sŚϷKM.ڷZ55R)Mw/f?xA/iM3j0/ =f~m Io( 2K)BRhuNr397I'jՌL7qVl:81qC5`dj%A,}i7,]P#ªפVؤv'&?{g YIkvKYAyGE \gr2N0SQ$k M98?愝́@oZ~2x?j#bB?jQGA(*& 1 좒ۊ&M'eR I(Z阵M"`U]2pabnWm7?ل'J>ZB'>+YR5(Fe6Txp¾{Ԗ!4ʀfӥMFn_?[ ˑYU;8U3p6h~\ͭ7ףX%:WnJfWz׍X_a{Aaԡ478ԾͶF<7D,Zb˝f1yZCm4|JcU:ږj\U:`(~VyV{eP㳔e@Z ?o* DVq'.狓?[t&?3qiZ^i4Gx,~2kӿf7 )C|=L@Zp<硁RN(٨qVORi pḏEkm*e'shcy#}Лn[U/ syq.}øoӬ8>|KHO<]WѮD&u*/fkYk|v-E3z&.vue7ctv^ T{o X;΅]p ?f`9C VKk)mR}3r}i%<^JBIb ^6md%bb՚I+^_|kj6W3y(ߒ$K>tn!]}6>$g?"N`TJ!JoXp/,0SSL#ͰoJi_t/02bաxX\*rwBOw|v薵]bUu Ww- ڛr$xrU `;0a?pmi ^}|zUkZNXPjI@odIX lTxw:)"[ּy aM63iƗp X`PĮ2H?nBn&sn$&])4^*k@{Cq,c"ݚQ.0fTtSs.mD&!E;PAlPҡjRXiVچ5-:g5apvꖵ[9%co f\_9Xov&wNI=>zendstream endobj 334 0 obj << /Filter /FlateDecode /Length 6108 >> 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*PLSRobF3XTuãW0Ɛ&3x^(Ej$nb*p<oDŢWs{ϞE޼E 6R]zc¤jCXLôɲCgV?~1iGLg)=M~Qv&s0Vbct{AHQ9-,, T¯y4"PO!N$򩸐XAުBifP΍1dNFp76A@) ,C({z0ִk Hxw-j:~ YS0sCu08"5>Bqhxu00j<5U.㓤3d㔷Ȧ>OSR9vl|zYByJV _ju?.m:P,=URskl&pޓJۘF3gI-^2~bo;WҞ ~}ݼQiv"gYql#%Zpv) yAWíFNʋA2ogi5k}y9KX8;*~ݯu8?vnX1]8j\oܜs# "mfK kS*&{h@Yz]£Uq3?SC!x|gd1}U=}+6nأUD"RzקJ)>Y\,V1mC \/8g?I3XJܰn_-m?AZ&].t-£21ciQ8MC*IrA{f6پz_M[p ]> \ή  j$5SqQnNF圇0>2 =}~{0{ CI,LW7@L>߂U!w JyQNgp!}3P]C.czZ8 #mm8%7Yۉ,B&cMK_-#lG7v9_1R~+$;`?*# hֲai'1!X w 7(HZKnQY5pכeOJ GPU"doxcݧ\S)G#Fq}:gLL(8ax(D<[e 1xpRcN‰te J42՗TUdž#~h>i9ɿjI$qEΡߏy,M ULӸ2c#?b|XλV0UfKzC9O؏R%t(j3M*BX$ŤO(|F_Ɣ#}/.=Tbq!E/iL<[(=~3-IK^oy5xʫu'θsoMJUn 3,?PdE; W(rE(KclȳeWT'vܘ[aY :[;Gɱd?&CK*tS:_xuķk5}@ۈ~dS6.,bQgVzϷ&2/`Jux<}m^TԪeM[(^랟^ U޿qg Fv۽=uXyE>)^ڵ홖(^*/RMn]veuzsBKDLwa}Y~QUtaU`3 IF+9_{Y37D1 seWL/xzmgUnuS-F7C_S+LGӿsJ"czQЂn?6(!Db&&Ƿc^.&{;XJ68plS-̧[zjmG¾µ6R}kyr^prd?=w=f(%ĸΗwR߀H9bVt;2}Qh=KE/WuƑ4+e9R #3Fİ p]NTc-ʈ<;q~><|ܶT33,.\R* k&^oEU֟ p館R)PQH+.Wh妒V#7`97ַﰉp2dtՇMOJY9' E,:A4K {dA[Y4&˖gp}r PUxFպ6!_צZ|ؒ*l*ZiַsJc)øu;(ѺWD}ӧ2|]7Ĩ=WbPVta}g?êt|F,(}CMyV~)&7ogcBcE.갯yIec"=j~YhڅinT'X,Z$hT~d}V&18+u-˓?~<<ݼ78Dw7,6+|TdXV_Zrf_heZ<"G*h3d"i-M(k)}xwMŇtZm4咷Ƨ`'%l$e$}$;fEBeܞT%+%^\QYz~BO)>7qn, "y]ۉڭdN4x-gʂNuQF|FH,]g>aSu&d~us6ew_yڽ_-Ulq|u-̩Zf.usӉd.8ns$˷⮚O iiYIJmqkvPEWϛr>\4.>L/l3]ӗ Su/ƾ̟7n;R/ ehjѣ'ri9Kfɶ5^ 0>gR4vx!fܟݞ#O<2ٛtw|Syx bvFMO(/>/yckY`V™15&̳4;:(zL7[$.-moyğT&=zfxkJj sQw/EGendstream endobj 335 0 obj << /Filter /FlateDecode /Length 4530 >> stream x[I$G>pk,L}ӠI !FޡzZ38{ᑕ99ٱ{d}Q(odLmnξ>MoqD5`O*Mf>m6تQek-<ۜm1e7sVY+4O~CR->mvg#Z#nF9 Κ8<68S+.1(e㳝5 ÝqcVnί@,{eS)q*C8Gltc;^0|zy))ݯλ:^4&t ~l>9nw Wss5?:ZzOFA0Ge&.'Qy϶_@#t cTyj4Z6ЗN,W'xm3oJ>N!#ts.}x%?\wh;N1[|Tlv^YYO59[-C9A ̙aZ`0EU8٠6Mc$B0Ȝ`2u7Lnضx\o>*?]hNE8]1s<KWWi"BnОZ'; h3v}wm/q_ߤ6N*gAß %$͵DЕTD}$G\gjC2M:y01EM}U"'BuU@NV;-&J,jG{cF"nLm[0_VU]` X `= VuaZfz2jց-;6읭Co%:Ba2)Ù#̚LEa }Db_r?!Ic< ) +N~ζO^ rZƎ>YL{!@H!lRD.y7A[вa<2 i6R bxZ `d Vm @@>FoF& Bxp@~a}_. "ߵ=RqK$ P C4^p4P /j$21δ] R Ʉ X4h_`/&f,%;˙Q6Gx%pGk?2InKI%rIM!9 \E+]X2{`Tsgu$Nw9gP ]-*!t_&*۫J^{r6{ K5[1wa]`j{ˁM;y(e ݉8x/8\ߍ떽f`e[yo.:I~ڼ }/ V 7Gy9w;mAh'i&+3j+k6;yWb[l'ݠthS*yS Xj:,Y#p_'qGxda1 OYga_5~9N]'X4,PkGKK4 d?6SQ9R#}Pg@ԯY 8MRB0l-y47-|#!0(ʾlݜDEu#~MG 4FF_f;Ly ,w z+:g62 Yj' kԇod'ISL=0&858q+Y`?W-0?HP,S>oUxq=$rl]5UKox !,K-ltx*H {Y^7 o`Ąu׮"8 E򖀢VP?g7Cvas؜+2\帱EPyr ]\+A/,5A+WNUTM_KnIJJ睖UqD x@R%CdN iF n^<䰕&2#/U< ܣ+;޶+˲[xVEt>ε? _Wf];aVN?֕X!vR>2%Îd:1fYxSCDp}nK:0xceAt/Z7Fs\HBwuoEоCbr['UăX]H8EuWvhRc*Qu QD֕&@A!űܴ͹ xAջR˛B#xd?XH4S}tࡱ BJTx \YI+3՞1<h|1' $ya e~?!QP[sO!+ac]dIlyv;[{j48;O*GĈE%[?P‚g'dٻk_|ѠdsX=n/#$b:,/7$*Mwx:WcXϷ5c>N|Ul.6+ Lȉ'7Y-,-Z݇`S']E\)tjiq2gqn v)\@~{~3 |{6ϢQ kԛ{ޏ9N/^ë 5$ԑh0"g~6q 8,X\P>C4BU F>.Qs/y_8v:.~Rn췣vM]wo@!eE~AXd`qrJ?-5Gx`8TI&VkgeK$לgxm(A!\LHΔ* "TNւT;6fz;U%oCvLQjp1PsV]^4͕`%c]^MANT ԧTsHm`] #'c_} @~|i- &No@ESeooE JY~#O㯎|m7y5"7|R@Z5(]e&;|e\z殉/ϛ7LHmÓrAHGTa~XOE z8,os>KH^|3S zQmtp&H[W;*郁B>T} ׄqG|IԔp"Ы7ʁa;ӧӷo}w ߻#61=}}O|< qzOi_aaMc}z M6{o.{'/y!m#0C6؜}TKꤏjBςX>v!_Fendstream 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 2389 >> stream x{tU3ML"-b&ЖhD@eJ)i4}$i4mڦI(Q D]J+|#{|WY{'ܺgٳܹo~w^!fӖ0w4N ΀\>p?0grf\mtkZJ%|pʕ+ W W׈rLI׈TTE^.{ Tڇ4MF+WT>dP#QU $VµrJF,̝kj*BI[ԒzT,+jkHH"TTNKdD)YM%)rB\!7(ջbUB,beRqXp8snzSݖ=w9wYqRNsC8 pK?Pl9Q"9]=Hü9<=Vg[VQ͹pT5Y*+YSA"Ap &Zox罰MWokѿ{Gm>Tmn;FGv ׎=8oxya承~povK_G.(>FԮ6[ⲻn N.%P8u;ΐ2dmP]J& mvyv%$v>hyQ CNzg{B7f 0D >z1Y<ޡ83"]ܒReT" hׂ6ezUĦѥ8 0O2z)@,QH$_<wNSP=%CQ[hE?#k%@ `r~:ZݹmE/ 4&cM+U͏H0lb3.);.䴶 f=d\n0`1.WG~r: <6/p1m:>uϮNPoZ wԘ$.1ZDZh'Df 'H`2\f:OAua=}tߖ-m,z*31">_QAxٸv%ϼP&F\NP/t'/^ɇ\v,VO+\ڵf=_T7?gE1z_^BbNrAf C_4N֑:~W^ 9-vkFwÂ'L&+44w~ϛqaF} Q!d4?;.WCa$x7;@٥l1ۡA!e񚬸3O؊*eҕ5mdP}zGdz_~zbThp4Aon<$zNH2Vlq3Wnc<? #4TQ;e#-D?kO@-~䁩7 %d8(aCtS¥#RI6|S{\f7[V!-@"6orWxߏQM<0{=Z@f)R'g$oHW98tendstream endobj 338 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5282 >> stream xX XS׺=1$爊Qh5y"mi(( C@IEyH0yBPZV{[z^Jk;}n}};!f׿ZƢ#HX'f *FFIli*Roq|͍!B37 bIhdS讘?ۉ'rpj;{La۽Bl]"}"/An|#bl'3{O {sT۵aQ>Ρ!}m{7Sh0[P߰ax, kӢ0%K#EE{^e*;\ >kg?atͬf1+3YüΌcܘ :f"l`&381ӘM"f:,ff0Lf 3Y,c0˙_ cϬb3C0g3#kc| 6c$0%9>n}.J,XY";-wC;%Y?IV 0YJr`堁W ~2D71C< 7:"iD# j`™&ayDjChRbHXЄ \J~P>A-|Uw1 y:p5V/i*y~SYr_#2_n%`i%%R^>C8b9qLGI9*u8D;c̭+*R6ަi;[1* Kg̴9Ew4#4C(\/|8xaM&+O3 !&®1,+d HW6a4m(pT*mz[|t$k\J2eE|tw$q8#ǻN; 0(ql;=E*zU}Zq$W<,-!֕Vi%\Lm^1J?cP<:2C,QYCyNS֨qp˯K ρ+3C5 b=AIH&HK&yf%T1:LFbTlgh=nl1BoBr\^&h'dHUx`Ct2 8TCKZfKL2L%,XsJ.7TE]rIi 80YK2@>pUVR &gF4JQ")xLq&5}p/_xTL@^uܮ<˒ۜg: ǁ+&E:!%MZC\0 dhYM3faŽ9ڜm.Uz Я]:Ns> q9"* Ji+GIi0~6ZS^ <\c vXaqA^&|s2`xZrdǿf7)ˢfw3ˇb.˨&|\=Z'qE7/vĉjnmR݉~ E;,8$h5|\UJ {҄5nB[XT4~@]7$"''Q2ZxK* =طr|;&>6)2^ĺq`Z z>$3=qMz@!=Q9dsxuluL>iQho5ք2q|f ;gdTM%_Ns,~N 6.RbJ5w-5JyAgG ? vn2ޫ!p]ESYJ

@a7ȮD¢y\Zx΋C^q88cxEpPxTVZTS7-? 1VOSٵtB;'/f}:VUq :abj, ˦\9ۋӄ68aʓheYrjwh1Eeo#X̐,mTr k̿H'M s>"Z38BgPC$QIQQGS V yC@ϕ%/ަA]e+J{('f6) &  `F7S2DDb>3C.ne#˶9SDGClɘ2q;!#*8#6+.ꫠZc۸ng`&ES<>1OM?B o3`S *pʌYRꄢb9RٵU3əQz6[ٓIWp-mJ5t3#Cә8|^RRcTˢ$6N^PY3W454Qy0!5 џ(p< #d@;E[C?1尲]Ҿ)ROZ]H#P30sX:#n& ]1^.7~O>*6b_b^7l,jmkY4H} @u/򛁾 ;z',oo=Ef=4OQ_:yK=$J"Ҁl#;\Gq9z(_4*늫Jt4qQ{,,iRyGD)} (uo.n POe\U"6<%r.ŕs7^S^sh 2TMԅr2 8Se 8U^ gРowe(RhOzQ{J#ߊ7FMCфv#{xqOF%. <.Ͽ1v'? @$,w{Y;J~XXGUm q#nԎ1R-I_l/BLuڹu~H"cE6J1K7 h>noVEd՟/5WnJ/\іśg-'VC!ny3QȌmYoFWVlR$jSX㓩yk,m\_yP곈'ʨPTQo9Dy'+ pi22 [=q-ȱ7>MÞ))C#C~3\nM4=ϯV'k4J *<8Th\b4Zs# ѐ?3=3Bg{Oa!Lid|TՏfV.d$8A2E/vRI{C iٟ oċ)KCź b1炡ڍKWTzJ#,yI`"ޒ0]<Jrc<CX~.qj# kiNZὥkA$oג%B; ;.L2g:[՚Du.BtŤ8L1L/ƅ5:[hظH4Kp?ʤCi P`W{TeС?Q+RŶ~6<ŊoAK6&AW&tHs:*u_br#%гOq0N3|Rt?\K-ޅΞȏj -Q%vSegZ.*I+U\]Fn"Ec+ Pvl]#xg_c?dv@{aHP yáR\s-?nڨM ]_mDAcI/&#)\ /h|^+PBW@عFv>a">F9B(DK71Ǽ!f=jJ~ ²4y\Kbk%yWyp6vqAKSSX((l+B|S=*p8W&kwmMJji?Evw۶k__[]iQN]j?\HRE#1Uecz7 6F|ՀsdK6kDI?}yG V ?endstream endobj 339 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8288 >> stream xzXTGj13{=%bA&me5C4A1XFƘhԘ{!3&_n>ZzލD;u?oqρI[ 7hx/֏.Bvڌrm3ylL4fG5tk(yg>#4fԼ]s&N2! kq6ޡlyx{, 8{ؘv7.?0,#>#Xߕ-dm:-Z4dYaWDܹ*>c]luiǤSN>dY͙;|#㷍=6>c&L!jj65ZC͡Qkpj5ZO6P(Gj4CmR)[jSNbjZBMRed]j95ZAMVRөU ʞI9PET5j:R ʊޤ2Ah*\(oՓM%STJFYRT_H-)E9R)f7nM=ݧvOd^Eg2gz㧞zJイϠ>}X[^pO+-0x@뾯gً 7tVik7{oepjPoVsIKI mh_>d=9l0aPj=Hj }&huINɺP3s2B{\R נ¼hDA\+r13 +[ҋu]kQ 6tlLo#<(BF_NqJ9Vv0BNjLR@tٳ8n`P1DtZEK[,JcSޡJ+!TKVeADCbZjj[6eFZ ōQ1 /Z<uypj‹$j㫠tY9h$B3"3I4kHvQE⨅Pi^B D3w}Hs!+ҮZS)"d|o b>'Wipl=,{YmzMmtfatuQe"#ZM>sE|Du7ż a;ߎE5`geG?} go+n/ƽ~;OAn%B_{^RKӜj!>$^H|\PGj*2 BmBUsHe`\eOThGж)F[vn 7vN4:!Nl)j *_M0D$ZFB"<)V^bNQAxG㹩(y%h7$\K~\(9~ϒ#ÒR8*L_>^7$®]L:X(-fG֩˷6ƥFQeDPDI : :P@[Tܼp/ӱS;|v'H3gip!eNr,H&t$)9FoGaq9{3t ?44M=yzt%%yxaڶ+~\Tsė"kt81u9ؕ0T,+ީ8$- L6dG(M#p *y 6hUD=k$%qX|==gqmdq gZ#?M8QMF?~N1뿸e{<[ )såuFZ^>o˾@2zwf+Ч4,&(HΧ25(nxh(n`&Hka%g"DxNR97r!$0RYsh􍗡Å lX]mR LT(,-dSỊRh-r |#B`gt4R/#v{9p{YmŹev45V1j`=r7ʞԣ{AAo*>>3ϰ=:cFedyF8ۙ{sdǙ}I ID]HYH@xX`PyXu]Ye%Gq#G0zC⢵*?( ueD*TDGGl:v탳8>Q8"L'B9sLe:)DSrEj![Wj 27Ivk#6e؋ Iy# Uڜlʀ ǫO1rAIvA MJ6h \Gvm "TADD1LDDd[Pu6W_a(<+⬣*j#|i q¨"x\Q#hhی=~dCp A6-[g>69 #L2"^Φ@3;-Z wkMp~ Ce/ͩ*i%qI>ryT]DȪR.—(Q6C,4?/{B1.',$X.xΓ 4;c>v,_4N2gla]u9Hu/IBJdVxtU6uǡҔE$m22S8* ЮuVx jQ6&/45_=S׿ti9-"4/Bsu:e.32tE*"#)ʪ:( srNINS$[%n-ƲrH5GqM&ʾ)7Xus=r'X eVS0&˶qޅCh?f#^X8iu`.Sj̄&<,((&:Ⱦ kqSq1IOzsQ=_Ax4,pW;}0n ; efzʽ0oϚg)ϐ3&, )7rAYV~'+z ;*G YWMʳN/Y@^GnAY/Pf ŝZ4Em=嵹׮|qY-Yt}:J:m:yf\'s+HHb^ 7UM 'FNѨ2'5IubNrn.+KUs6hwe HuLitQt\jJ"^x.UTX sFT" u9:]%pcݳrQ*pξOD ȡS}p3Q׫AjZ439xZ?4Ea83am9˪rڔtdJBb?φJm̝"V̞\ȶLpkRdxx:c_MT~/"$AbxPq,aE$kBDŝ3la)EC3I\DE@?9Ik?1 g7g;)ݰpܙr/j‰B)pBK􀣨σ֓S%RԐLB"=l3U) YŐϔD$z6y7 Pߏc;~)a<^y$n;DZ2Yx/B\!"? /eSAV /@4{X]ǹ*e%GX0 ܂))wzG A郙;R8zx"dGг)=Nt\zaF qA]KӔdifh߼1QNRTaF"ݻbja_]kP',7|ԠJ@V'&%ɧ%G$1mC Ĩe;p (Q^|XwEЦiGs G醟דYάNxx5xeReNN+H)^ nTnٹZ-Qdmj6vFǭP̓^e GIB*Ei dabY˳$("LgiAuKү 羼-W#fPgmmE egwmq 悚o_/Otq5BB|: \"9]tN\QjZ,aD[Lpz7v}`4U l`]|Q$s.*ܘT:$4mI] 6Hkmy׳L}޽/CQgendstream 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+驠ֹJiy8"$2CdQ10QD:V˭ZXimqZkj߰{wq<<>{]l%D7l3$~7{!u3Ba0NRlrB[ߦAPx=~6S<̱a3wl;@=A6##6{#m,h֬ș3|?:&rOfp}^6+"l6zۘ7syp`4;fCwXEQ- ޱ<$tEUkt_>3kG-{n=w ?x҈NQQ3#j"LMj DMRӨmtj;ASP;O] jMVSk|jZOmlԇ(JLCԻhʚGT 5èE$ p،3177'z_tI0bƇ?ta7xkDሗ##[[]oۼ%-Pw9.zݳnrjv~>&f̝kw~܏I`@; rA]w=Z̎XPSgOV=TL}P}DT֩N`w\Fr6G :?Pif!\ݔ~ 8jSD-ge9c"  yTk\EWG!)+h&/jTTпjo^紙mZ9 M%`8o`ķ_x<SbѻdKZ Hҍ?]h1!,Rv-zڸp뺝X(y>-za~u |%}R !=M,̗lwY^$A3 znek@De+ⴥ7N|{w#4!a0ۻ;o ܘ~ @؟z@;~5:b̑-xNYNh]ĉ䅶ڴQ@H`+:R22NMiQc 3߿>X/q!z昷F}4$sNS' e LDT%$&pIi j#ճ^W\%{B_Ǔ褆rf7sa_hq2[ =)etKFD |T[ 7(utd-nfXlD_w_<_uoә)`7x.vh>6Kq7ንL&`\U4ԞȢ <m1q zt\o_P!˿`4yJOaO)Jڄ ;Qo"MO|C! &ӟ[:qѿ{L+m#y%w94gnW$gwz DoWwZfɡss%xf8,@k)"1",LOML![ą|9^0RV1x!?=`,9ҥ&}&Bpح3ͪ$eZ}cPWcoR@2BSh4eȐYekR 2dTJ hEfh!Magp*_}Z}SpytOu7̓sv ZɎJo3mx $yaKO aIIXRMTXM*m4[ԄT2Ϫ('{+!jbenBrzbb}=aiel3)Cv2=c'?oFvY۲h59}[U%ͰT*+ v܅;!ӈ!t J:ց^i&?,2[uZDСJPe*y&ʜc'7,ZSZ1Pm~ MO)"_dYA,_RR\תj6jD0&q!E>m&(,6LDG9U팸#m7cgXDy19FS"@WrJ8Mz>J }NC)9D=y_76ddžd)]k(7|+`?4_*2*wmwwB~)u1QhpHcPǐaJ8 irf( W5:Ab-CV  2rP裊#" .m'/;WYVYgtzP"m\V6r y $0گ|G~W0L4ؖM0q۟kh4W:Md|{S1ſLAF\c :UawTD) "u3D~(Uq8fŚcCg .y1lUvB;MWFԈ\U:P +CyifC=t ^%KT*C{ju Q$|]/ T;;5~y !%ta+2%咺L5Clx'cQHϜ3&QR1Wnq r5IJy8h<]D.{mb\_ {cd~ZW|AL<Dkt4p{#;|4ЄO\f;KbΛ .G+@f]r1'NM/".1-:˜Ȫf+nazQ]|Hd yR`h"8hYy-z~w CK*u]N00?޸0IrbD'-B,)o nUͱa%M MƁUT$21ŹeK"]{{+W~$E#  <϶ 4SwOmVoD' E7cr'줕N?|4]rAOwL_t"pB4\bԳ@9 |my.2nF򀜰S;Qpqp5i-duaҐmZWQG -ClՏ@/x+cPu[_;sX?tr &hT)ֹ m;!Sb񓪔ڔj\B;mdvl6Q\Q5rA1869Ʀl&/uzziÞ+=D܆ okے'G>ܔǝ֒|yagC$-X\QFy!T1mg#Ƚ3j+Ã*kj*+k!Y@͂&A9:a^;Ho!ZPTC))l" d<D/8~ &yAa K3$ʀȿ/0 ^w _Z=!d aaP{I_6GI"U/h*Q?R>hJE:v9Oi*%Hğma*W HxlaG{.!Zѻ(ߜF:"{iEx{w {}+-oTUF+x]>+k䅦LY+Yn5_7*;*SQ%,$r4 c+sys훫Ύߟ?…' ,=w$h*2]UO3"$pZ'2Yd=zSWƣ9|_ +, x*tMHA}VI ';V裾?5N2RmVҍr½{~ٮ`Y̽+Sǰ4cN#݈3pOuW3]|Yv]9gttEMu%dfltpz`yr}ŷ/l]<Z#ќ{ϚxK[zd%/4ё>ޱh ނeFn-~Ӣj8q)kLW_'VoA4:6d񒗣ŘBG+~k$Na6P9 q ϥsB]%(Tɪpe $RTdPo^5[궴䂟1ՠCLSHyPxO xGL0eŀxrj-DȎo>~u N׀ Wd~]YI ط ,Vjn  עݖ'2bx'E~.X?_m)d Eo]{TLQ)A*L-tnwNt v0?ý|Bw*m>s!4]ee?/eӐD;b^Ӂv?:Ly=^pYoJeNUh8Op hzCKpD.ĢO"sBNܷ |Gbp|]EpLNw~}X|6R; tMU?vϡrGhI=-]%̥/ۮ߸mf]~6s͞hK3#}妠Sƌ2&16."6waf;Z\n[uWoc 5 ~muv9[2O,'٧$)̴̼!F_tHhhIHSj.[6ya?րɬ}2CHVh 8S{?}w[*{ G餒k;8nEOMQ)$[rۚPo>s[$)c?`e{ƹi.CCzϾpp!܂4>oʆSS|w"LPh~x(1u. <,i[ϺR0otxFsCD4Fsru |_7J^HcˤXkqJx2={pڦ圇R > [g۱âf-mP hTkDW5{%sTY9FcVotuTi߽h  Q r`M)A4!rXm_Ը#b$E_mendstream endobj 342 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 413 >> stream xcd`ab`ddds 4T~H3a!G*k7s7bBO``ad+ns/,L(QHT04Q020TpM-LNSM,HM,rr3SK*4l2JJ s4u3K2RSRSJsSn%E )Ey@vfq6І Ff.&FFU?:~]|3O2W 3L7yJ<9u*[:~;sInd}EsiSnO|o$ޒ$'v5usTTOo.]2=^jFIS}yV۔t^tM *9r<Kˁ9Θ5g~~y?헰ξk<<@!?endstream endobj 343 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 428 >> stream x]KZqOs* qfb7c7Ak`E`U,RرWFa[uu"ZAT7]/b{v|9缸np:aԙGfܭ^H 6ˆQWgu3q^- w )1ƿ1Mk[z/vP4|8#] JTK/HXKq̵;#|/3t*yt{ZYnIi+F@YEʓBlF_gsZV4^aN1*Tk0$F=EtHU\RSѨNJilz=г&E3ٰ6ׅ]B29:„595'o]~*ħUˆ׌Tf֭Rي Bendstream 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೗rDx{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\sݪ*x~UX@1ޟ N{J _Q*%`z,g1[T51+LߖLX^fIQFP7g)P:k4y~0d| 8ؓB n#FrXd)z@y}O5j2BhA ?Jjk"Rn'%|pEg0X7lL;9@#7HŨۙ2®!"L[M&:X.+S,Bc龡 hãbӕIA.**L[BkNk{Nշ5S:ݸ'D;|7,P4tTy_&VzCSf|~T0QR[`!X&X&QsY3iOOhhK^ˌXOxIIdf61չ{_-W%32U]xt Oܿ=[=4s7btys;;h\emܣ1.{Sxla+F+WF"5?A2Hc2 i[SG/`=wai*`'vGҫ q3:>\J2)צ~OݏAȞ|s}w/#/e6ᒗ&b㩊DHhó_8wLևϛU{z]8Z|5~fvUC>9߼!.z6n>L,ވ_?TbK8!B`3#z͆H0H^mjxZ?z5}GTYq =FmÜq#mo>BCJ~Hy4Q]-+*bv1Ou3RKMњiK{vJ0sY e xaY˫$.gdY]D)٧U FhpvLGjrLBE=TE;cգekc],eHT+¼WeL |XJ’jzရ̤qvz}F;}R1=:Ę&UErXR8!~Mrh&OY\.jSشM hՄ8,ӎ9G9 E5>v!9VHzG;F9"> stream x[nG} |Z p'c$Nb+ }u-H1[U3S3Cɻ L{R]uN ʅ?냯k~]N_A cRZ8:?HʅWl׋5ϗr%Zcy\)Gٜc%TJJrehlQBR (Z[hi^b'BXo͚H6 g俏¢Ūi԰SX!:4o.MlMnލ пk.ϖPC kήp?Gc$vNZitdqhi1ܼo--{u0p&a1)P2ÆiD|!y7x\Y8m󯲙}Co*Y9΋Bm Ԧ0EzS0 8q[z#81Vm\76w|QEآLӢRZPb!>YoڷJذЀ'*pPSY1I'X?!Bigztp! d ͎^f& r#8P@Eʺ(f6,{GI:fEdR%3vCn16Dv<, Tjc vHR^xt;jO6UjO%[Y(ʤD/Nz]%>@.pqNM+뷯\;z_7f=3'š0 2X?NB@ea1o`p21|6K~*ՑJ#x'ѕ6:[@ʕ9u9vK?W{J%ҎA 8"mڝ^ߧ:3ۣp;QGOچVZ1*drkWʔ3OO^5x7xΞO obkop2vx,̟YZƆdc-h3Iu<{ࠍK0%*^ tH^=7'8qO`" GLv)5ȸP0Y!-ҋ *$ܽ dYzZ(ָGC!H9qYwW㜖 TWjk@RiQ)K`&GSUnfPHU7WwU8~L "L:!NQk|Ŝ @ 3^Կ}距 u5 b[EcI ˂WAjGXe ᇫp?NJw=iƥ0JӉ_vj@䮨7T 5pu™.RNλD&S'W]1^ QV.uGc O-tWY[06"\Jk(p 1Y+tz~zbԢ5\ԓ 'ZYaͪ:MI A|1WZ[a*P,/Uٯ9<`DTh3oy0$Y2dGd6!M!j Gc`QȞe3rpG&)ޯUdc c(RO*`G3Q>2 bܼPJ$l+%{;Q+ՁLxcLt>Ӗx{ziPKU*⋄C釓4웬3[ْy\xdGX|)JA23T5'Dp|rKe337 DTQ8ҍL<,5Q{'qY3)5<7*yU\?%7^!/A.C5;dgu)FlC%&(.S13tX"Tb{`5yxX#æ\$ϩ>?2(vrm)<5# ^>3n߂QcCu 𩬪QwU5™"g1*X.HP#=kkU 8O6T|􉕢0lIEC+-_3>_]`yК |#P0җ}V <8EPٱ4^PsS|1eW[<0:=\"`Rj(73m2nGE*b˲۶뛋}δӲyT@qL$|⡯Ji_=;ĞdMn(RYT5eB#WS{>~>!RHհnytZVL YAF]]Z;_rȽE{|AA})v,B)to HɂPPr E +&Ӭ8}A*?·ߗFna@FU60)I6x~QTE3fHb| =H;9'7&tN5Z ǃ^ 6/4%Qм&=v ^"Oe2#tֺ0{m'B3͜_sY.e1~NH.~Nr)Br)/,L=buD׸騱, kQHSߘ"}-6߲ǣj[ؖ2/^sg)-K/ɝZrNqUev6'5h XG5?ygA0=/̕d A{[";!b4oeo' pH셱ԁz>Chc0>I{ [-T3T+糵 ):[%3 U\ӵ=dDJq'?񲊒}HJ/faI>Jedɚ<{{ h6kZAeWCo@s6WC O>ew4Վm߀=_V5djp>9O—ςt| \% 3<]O󿼑T]hE|IڙPee>)Bփ(GZbJM^МP$qB6;\S9?QeOg ~FV?>8~), i^è܍C'%'=1ŃCh=_l!@J묺'N2Oy3Oy)')SK)eHN'KR՚.}NVRP.dFxؤzzk/> 0LwT4^F9Lendstream endobj 347 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5651 >> stream xYy|S!4\F޺UA'>Y}ߡtHI$m6{rsnf4BJ[ZH)Т"BAPyЧxf旦.as* %ww;'bB Z|ҙMpf,# aȦqz|7!ҬnO򸜔̸KFZi|jbN^ߧd=7}B=M*K7wԜ5ى2ybB=9+2c#O7-c43+7'Q\(C̗.ZH8gIR+8eyV$LZ&u~nxXEP1awD -C#9M 6mA}56u)@]ǠͪlY˭n6[+@+>(j 3DZkjb4Eb7^pc'Eubut< ou2]["LRf@ y|t-xy˷%H,=m!j廔I+!%˲Uqd+ Hi5|Y V0K\EOu-|χn^o}21CGt)F *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&*ܬ-=^)܂ihol;OU 7Ůd[M҆8Eh4qm.::$`(*(y~=FzEh9ZRMM󋖈+{R~'M_+( esO}lfB 6`I,& X,&:k)@ѢquSK%3H==dKX쥬zX;$sj x1/{.ϊ }6c+t0`b`"5n()b-\"(xO n k-`;^.AuT m-A9ÔBT:ť=O_]`VW+;s7&Q*i 1s>WЫGxn8d8վ@UucS&JTWȬɛ{5ta u+Nb!7VnRYd ׺t'V< 0+?Be,ۏlwy]N& `-1LfNVPS 謭K9Ch4o?q%B/>bzX~$%cƲd45 ejB&?Uy!dm{+2].~f&ZwP;1%aX*H W{!(x'28NnuYƟIL2$A-9\-4];}S9*GAv[As |ȅգrӶ % -9[ڰ m`ꉚ~!pv](0]Z$Q%lrԁ/hW |dg-3RǍ0cr;jj- Klv|5>p$3Of>l |`ՁPLFlٚc*S@jky!ͅĮV.|)-$H`p]!4\<NAÀѬ D.hXvB6v8L2Rn+4Du?SrweyJ2Gg3a@EΗ7uz+prBs2HɉUo X5O<#t˝zbԆsr8:88o%# ̏ZkYoe1&7_d$&5O}|p4~dNkݸ,aEo ~gS, YUƍ / ~XLA:o㇏iOUPGŋx wlkđeO=ѦX-: xB P*K,00{z:"tZhXμzU@KriJ ;&N{Zk*]Cfhj7Dϰd6/qשe]EJjĆo,E5}${üY|ȹA;|NWj ;X9H>B Ф\a[#F(;yDڂP*\%:>@^Cw?}ȏ/74/q,Q՗8m=}d BT"k܇1^Bj0fTkꖎ'e}J 0t'E E+jDW- c ۝&p YPNN^ZB{N׵^4OE: ItA85ҳ4q;yqzG"Myfέ3;^Vr eiVyI~"?i9t}Rav,U(do.}G>mż@gJ4ʃt=!\աe֐:_`b6Y X$}³# ͋WR嵸o؈]:q64[btw)+ mxE!BtjCJj. '^[w8;j4% t&yܾ[I;ùvTsKE*WJ&7d_ %RxCX] 5jo~^4'4_]u/tP:ruO?ޙk5UO9z %}i ɦ}s-~Pj y`hfm9N CD1; =ce҅  h~F\6Ub c3-cktQ+ IXUfj#`0z<,[zN5I t'NjlEJG{[9\"o\  ȌB7#0`%q- <*q&psȄ%+.˙MUxCd m+&ԆXIXA+ T+e19 uRe}.C* ` ><%s@R\a8j#p "Q>X Z*qҵ<Â?aYݧF:ˀ Hp<71ZT e54WQ5eoGoUQd^wltI nw+}޶C݇5,jˠ`hjM;Wܰ=ZDӓu1 жˆvy *ڬu^1⿋ÏzI@y#`ovpƔAJJ(c-#T4*B1M[oDj fYFGɆ֔írm"&X-pKԟPWdJ B˙D[)md$o- V:}N9pԗ%~OhnR)&`\2*P3物tJ܀ע w'&X0ڠ2 O/,I-SSJU X\t֣GΞEF Cz JQ[+}$7s [\GSJ C(jI's 1"<կ)+-$Ս%SevCVL|ܸ FhxyD/Xr_#܃ڂjY4S,S44oorҌ̘Ck"~/|x,pѯ5"EJ0S/Lk< N<zWS~aj*eA5,kkݻjwM T.?2y>8mq:J=^W ~6H)|LՔߘ+ϠQ(On_^u&ǡ.;*?tN&yTs`v=̖Zne۪jE.ϨwPcF>;; sTnendstream endobj 348 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5512 >> stream xX XS׶>18QSAsU*Zg[jUN8ee@@& C 8OWVhm:jkkV m#'gZ_' Xzk_Gsy+WHΕX"ǮW^5 %Drq(_f͚1gI|G#|I"$"g(":R"%$>qT* O#DG&ES",%H|G8O OLD}Fx{n;Do/H,JNƒ[En[=*8zU5q&>yJ#f>c}q ~[&b91I F+Ub5%wyxb=@L 6oDbxXD,&KD 1"KeLb 1!C-PO #U!X7чKl“xC D Żkh/mg=Q*%&d,pK*z{~>>}loy>/ <7 Ơ[}[x)xs^>6E^^^w'y_;Ê}܌Ĵ[c} c84Bd+6`=Z:vg.>n6q =g۽Lna;iPI}8NSgqțE4z,i7@:jxٯ`C4"U3wՠ.6Ȣ#`R$mHآ)fu㠂mP%!de$Y"й%qvtJ{^1;s=V~Qps.O?Cr;]`_Ǿw?uͮU tU4Lnt'4|&>H1f$ό햱f/2jj[t_`X')"L (|");JwJ!3s,@+ n4SKaDžw0\ 2tx v>Mc93~t/3 H?9Ă&ypPo;1ܷ(\stm7S- GQ0E^nkU3 BkU2(qifdBѝ) Ǔ&o{[X/}97TY?HXk/l:.6uuD낆?_HB!zR] jw efNb ݏ8dNcZ{vܞk G!.T'ʩ|r mtg/G:}[.kIS) GQ"zkʊ=[ pXUοSrDɥb ք.7WwIOtjOkAas6֞_~u%hn!qHV8^bZ*7N|S sی$q~c;ݞ׃JzvL"AmK$,tTطU.L{:ɔ?>p8Y١7jOd@'O/vpXjΦw2 f=W<#F-]COrunyOj,~3=\` mv+{7qzB"ޒ54 bݏx3;n 3z]qRtO=vH9zN1%*:m["1'6254WZXtIenXcaGwGmbJi >ʸ,>ԑsuri~7(W7w@K%eJr3ڠ]K~S^;(/T30:^Z Kރw. y*K5Kvgx+pX /Ѳx' {8 2(h B?\vy Ecm<ݤ͠1!U0ИksS*TQ~p;EBGjgZ_H,]x*]Zz`~ fX\H-](=u `"]azv@> _83k+jm!Sq]0lbQ"Z oQ5)LYDSJ4Κf<{߂Fa ǎCsܘJ*U%@ PNnߔ 9BnK|q3*ҳZ O*)R'L VeT +2eƢbF;r֨jQ49f↚*xgx:A쪿r2VcEĻ* J]{V'~A3֭m8.g FlIRnq'z<Q1[40:w Oi _# 2X}+:Y`$e;c}"K8 oZP|F>7oguuh<1F7/]nG tr PZ"JQ@ E{2t;v&NJ q.a|W:yۍH/*2K0Xj2;v$zސka!? WtrOgۭG2h~s7\>Ω %.tP˂WwV0((Ï>t[b}BX߸cW[}S3z;w&݄.W / }Z_lڢP-XQ]LC+}BG' &R̠9`.H!KlR#rPL5%Ws#AÓ!l0Jlnffn/mC4ZiBw?(lf_?_9+;ˍsKLXfML^*?dmUVgB2uB^ƜbM &ISedqLzv>.-]- bb[xZ。E 6 Kߟ)MFc0,݂^BA t"E^)U BGlup) 3S+bo'v A01H; xWTjLW7[i{EG"mVƲ ٻ8Mlu=+|l"αjI)4fb4tE#IX+|جq ʼt-QʦBt-ۤ 1 I-<#.4M&|ݮ9_8 hwq2>=uG7i3n#~i s(>ZoSTZ5(Wj*Z\YVx*L\@ |D"Qhcgן endstream endobj 349 0 obj << /Filter /FlateDecode /Length 7295 >> stream x]ݏGVO^aO+E⁋x^m) e71dg♱sϩeb_WW~7b7/o.Kv.ݳ/D]wB {EzT위8G)EapT ^_ͣG+ia__p=Z#n'/W0[/`'8*oa*w"6` aͼ~pα3zpOoit`(dpQ3`=v$G-CuAMXgyq-qɣwiF) ՁL>MBc :.GXV%ތR 9ox^KJnӨE?{j*OgG3eO5ُ&_/8 3vw`ҵ?ħඤq#/e\$/lz&$ЮC^Q3өW'䠥h @%NAmLb(%j`[փ2E\(0|p[NSw|ma6_G ܩ~4#{/)mʃ' b!a|NnpH<${PO6$ &=9 R swdO(-ձIm_3xvd(kOBa>O$YlFG(tF&-. RTP {w@ EW`Un: pr63' M+g.M+Rf˼Jk ?f 7:-skO vtaIykӫi ". ܳ ^#x/  >b[WO,sӸ9Q[-9`Fh-5[S(ZWΠSXXjyl7/*oI0]Xf 99Qiz#t8<HgtŞ.M[3l&!fUde6>`&;Z_vw6жc|<&>ޭXP%ȹW@>ἕr?T$$gLZ\v&Z8 ,XwxP9G2PG*+FDn,'r%ڱ~LƵJ%ޠ_S%0+!#E&hZ{jYo-X"e=JIŔw =80{h,2vitg ,#Joә-UBibf{5;8>yԔR M" {Đӄoj W7Qwp8H@G2ɢIP"??@Y1 pvFL^s1UڶG&Eqep_gxL5p^I ;s8恮Ap#ZXKHw 5YwBn!#3ʇҥzZZ@ Elm7.$BH #85N's@DYcrdj. Lݸdkӱ9wB ^*{uth*`&TOEk,^w I,7yzK@ (ئaҁgiZ+L_X ߱+]u z @zH 9:<"Fq"-}kADG M"CD \AH\RX]*/&*_rt^Ԭ K$Neo6mɖ!*Ođ:tTpOn FjsNRާ5^6 4q_ N4%WElpq']$b=lN'8r:"2w M¤9NxFox rj97۬raL c9J\_OVtF'>.>zFo>5kHUʥNbV3nQѐS#Ҥ5MF=V8 )NdNyFMvWcĈ{欠"7GN,߀?V:đFjK_[c t\R31kr_aDiY0W}@5-N镖8>N MVɇ-Mz:1Tas=G=:,lΤp=T F'կ鏟%B"7~bK-:`,YF^)10+!t٨9J4$ar3)Q`qvǮaD2›8#‚ ƝР5[) y͠y#F][slHrS(AU&ad1f;,qPnHib1tO8 *I1WJ~jGᝅD!BEI:kc KXdb7lXl Sxw%ebʘYR?OeuU3u~U0j`e3ʭx 6vU' mMQ]DFT2ɽD4X'3›k0V }xYkEvfeJID[uQ~`r HjI-{6%Pѝ [ ,%D8Aks zyv/ 7tzp 4eo+Rp6|:y9= ri46~M̎'2Ę$44tU_LuU"z)"uaȸKG o@;N7E"yYXwN<$@rJRUuˬ*'̅ 腓VYϴ̱xFSS\ '7^|CgX|U KL71}7_0dea3[~NR3J],|ZVEbnJ'1L4Z }hJTx(q4s\h`Ԇ(#MvӸ#FSdcwa2XT*us"3&IL@ex;r_oV3vUBןƸ;P]紈CLHQjzX"W5mds[:#,M.d/*Xjւʘ_\u?cxa)/e{mΌt)2t[43)")&i@rH~T5е ٿDo1VUŷHgeF\3d &KRlx:O 7+tϣ^65"(E}UZM~*Z}縍s2Ɗ\&vq(`,11u lly`ѳ:n2ޕ+ml'v^ZL= y> JP6UC+IX&0Pi|`NQ,#,nipT.)E><qm߹мBCURZ{KbC3QӸ' ƹ(:#`t5el$F.*o}uW'Ԗ oπkv=),|iu}5uAĢ-ycOL!'L&(&(rc-neFMέR\TAy%?'@Zq*P;yWeidwU^ZF=kˉkbepwfE`є7ex9Ddכ{Ѥs{ ω4U`2QyE^}UFQZILѴCk1sư_Ta4RD/0 ~vgmM]Z9saCL C#leI}2;' T@QUe`dDXmFI9Qi˧  X8Sm_8`^_ˉV7 [4!;PL@,A ax! +S»`%x;qYADfC3ɇA7h "*XRT-'%D?y" #t-NR8侳eZ:ש<75JU9)4)q(e͵+fl}D> Lqٜ$#ow,e ]JAyY%dM>į|[n!TyU}a ,Лr'Ǿ~u @r^=|zr)eˣњwu˚#q徐RL@ՁMAD.v@Ãk,Ke]VtnsjU4o&"M$Rn+laa)Ao g{yh%i>ej cp](ufZj%&SOtfa yBJEΚc[K~SYNnigM:ؘ6y4>_|̒u?Y4*>2y NaN4~"!/KVޜaAsK:n]6L Io=җq̓n]~`JZr?f^N?} mTs\yoY(k@\ VO A|cLk ӯQs 1$B MZN[rPI; D:T NA$,v=TT G Q>oycrU{~ݠQ;VYIys|Tp6-rS8mjMkѣu cQ;-/{p,{utSR﷢x_// dR{5"^lNExp-KhE^M&9si.R :{6zy_[ޤ0,1fk8fnj,MzZh5?LGb; Elhvc 7M~>U;XE/}P]B?4{;6c[5cSAEͿ# )W])X\ |U1WuqP"jowĶ Xuς޲BH&JlA\w8XvB,%zT4ot gNڌw,(з K54~W?߉ jfW{n1*,)anPj&S" `:m4^E&̐4O@+!&T$}·.v ;ESnZ|T̔$auumaޖd'LJTc'y`\fn]ostr@,W8YV᭒~V1Z .v8X q:{> stream x]Iq6|"|2  ï rˌt`Yዤ|ldsfsir4ԯwDfVUD.nҘMuVV.~LLL?Srw-dNh:h-:݋VLV*%|#1jgsk#Pdsk4564&΍_B6z 1Ÿsa ᭂ`U৔1 q?ckA)z!џ䣂fRg+QR`r˜yr^Fj#2ԫ[UU= es&%#O'oמCO>ƄLA+-|`HLE3F [eOÔNkdgyf뼋uOU> %:..37waG9fIbVHM& `Sq!Ha!@_%W6얭=toq}OToбq2͹e%UJü#BNu0a|5?509͎ &-@07 N1OQ 2V,=. ga6Kcx]V^7+7N^t*橀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[?n+ KRtw4|8UD`,shr&ȋ䢔ܤFWb&q =Zt{n`k%4[kkpt|ztr[1(WFxcf?6sqbzҠFf.RTC"qߦ6fi܈*c+jo[fbޔJDr,O6*k.CUol6T҉ιgrEWFRCJ+he=EPN}Dqфƒ6c{F+Y`|7ִRp%EG tj1 =v+`t6M71<[Mռɤq i |z56jq&j0y"(\o0;^qty9tk3/{0@}K-줙CMEJVQ|(7{SIZy[jR /oQH!®Ѡm(Xh)EvfWb+񎦌28߯{M=T\73SҪ2ԔtW|=nq^@o$$PN ┅PHPO%>6@*< RQ􍓩$>:Tb&zfKZ$ \\OI<^Jr;o<,j ;/֝VIyPQE)N/׵^JZ w[n0@:ޮjl"I?{ -jsAAAס l1,Ә84 {&`qЈ5ÇOTm‹Sjc9^E x4}b&1g/Q'g>^`ܻxnyCPvh`@{k_ϗ p79`=+ O"10yDߺm|8F刄:y|.=z^>/e"Z>q88|Rcy⤭j I88Jn,:*.X49koӆ4PhF-gbCm] eGD+Bh/a^Row9J r##Ä1y-$B׮0~*.]o ;n7? |I1"Zi-b u^%`ȯ1`>Ϯ5 6"\)m;g3[qG@YJ _SurtzB Jӕ,!sXsPkm)B~a{OokhQ1ĻBo4 &RFU Yj1U=mnGd@p6?ň{AHO]cLư!Wezn1nWd ]4c3H 3nWX4KpqO-o![j<)Hk*{!E$0}BYa cD26J8ԠE":0]?@.T#D ALz3!}*XhbݧkcEYd|4bI[QlSf{oK,,+\~Hc+y^4 ٕ <]磋΃H0k8 Z .-`Z,|R.SG*Wr }kӱP$qvЧY !wxF\'~3D66ha0U1 |^m!{hhҳ`" =f,6B2|y4ґrVzWU/;`{3:+F옧,Okx3UdHA%^sќ@ RKz@1F;4jmWyhp䕽~+D czX&N`ʼ*b +;7k^/q}rޭ&\yA†J 6 )zH,/i C2wӳŴ8Tk'Mu#,.k1'ѺY GaZp2 *U;7'\:q/]BZ 5@qUAu?U:7z\b A2<^_-("<ZЏ\%Y**uk4TN%=ߥm@yDz:A%#h]B Qگg[\9 R̩ "~_X> #U+mC6sJz˩l鼏 =8C 5"kLP!_\R˓QcD0Yg=CAq"jK\E dteI/L.#J-jȇZ M֋%Xz7ڙheI%6iN`P8*LjYJ!n8Fo c۵cȄe\!\q?,ȁ{*eeB:0ZCJ3ʈgY=4)%hN3VF~~_rptRonEqEX}ΣE5֐.7;}˝f,#1 [߬hT싡@NR.S : $=Pih>MڅTE#fdOWp4} =cp b;2K~;WV&ШB=:HWU9+cXe51VzXLL:L[ni! HANђCLŹ+$ū`T"JԵJi«Xp S[JFq$@\ךá\qYNȡ\s!rŗ+QW~\R\qusʫUy YÄ"jЬl3`$ggFLغ|BqŝoSX;ˌ2_t3>lOcQ`'%EaFX=Fј-R dxIrtl˚CْLA4,$AKӥR(>s%O&oqƫVÙyAϨSi4;:^dX`Nck±oUC?{t2@T'a95[8Ď}?#Ěf-`v#\l[o0Z>,d֕:LRs/4cZ= -/z85^DZ$CqUw]>+fۨ R $ m*&j^JDŽ_ʻHU* %Őa fcM+ft8R(P [ZNкN~;\T&!TbC.n'f`Ix(/Ipk\SG *pE.+>(n+ڝt)Y7᝭93|oݖ5܏sxʽ6!-U[,{,Ԭcwh\e w*{x$rb JX$W32wX1s"h_L!\irp0Y9u YbB4DSb[#m|*!,%Fܧe[u`os,\hҹ /s*fRt qHrűNf`j!3LIsPfP :/2~"ۯ~ kYwe vذ_Gc>TCwvF0'7P`<5vb$"֣K^ՒޱTVTĎbr?qԂb|4<зsnM]z$!U>wR~-} k>֠i~)QVG5LL2WkĀi&LonuѝW[̆B Œy9Nc6xeVl:X^ |¤%EV'iO&r7$7m--m jTrRiq9Do/j$) t%S"57)8T€3wQ>Sįq0ŬKS@5 5,xc?M au ~ TD_B4T,% A|0NO./GD=|O)miDɿI&XO䒖%X$nXD=#/Y{)m#dE-"Aj{Weg1C)2u܏| 9)z_F.WWG\, C9\M6n",evD6[7y-6eoG5F&(n\vcP= hhS3 f%Pa 7l.x\:OiZ~ʹ̪X{Rǽ29] k;Y1cN";6|T_ INCӼ{.C!ef,ΉQhc=!^ݼvT[Lle/̧݊䲥w) Ǫc3==c3$ YlqZ9<0<n_ \ryzXUBS洱 Dz.mP{T@mwA ,<]Ao@W,\YJ5 %ah4,f;rw.4?1BXvX|)FL/dm\ƯԖ7Q%w0ը~;fGs⿭Fj4$bJ]_+Yc9nf=de`G54RVCwͤA;zҥ락1z3#߼&kP/Aa'II9W6+x8gfYr86Н^yhvQ#oeHוA tJhFZ:$:D @ Wס6`z YM/CAAuT/:uD)T*La3&Bz Ns0xt ȎU>|.4ߴ<,_|uK)JWwTKchR\u;`H~j(g - Lھ.gES|]eyPw;b6%IiaB6茆gg3|P6'cxoD~=lv[=)ީ!S΅k)9f.uM+LgkƵ;FQRɵR"Ik8f:wDuendstream 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 \[UO .{q:֩vq|.3ZbP(PvHH͗}!/J Zej8VGgƎfss fX~!s?%gdLf?3pj}Y0@ik[vu%yGK2y%R8m[ّ<2' WgT=\V+҂*r6J2K}xe}YILWQWY]\^'>RG5yUe%%}yARGU%<{+6J7/<;O,~w˗,K=[[>& y6x("m|+6>÷|'w=|/e^oFNWIɏ W [=Oӷ .z"mFRmm?}mw|&Z.bD_ݹh#@9^33=m %G^TJ`w+:fQgԘHizޑ\ V+HEΝBIp,+BN!(P_̄ar{l0DD5SeϬ4)% ~0u~Mc j{25ez:;gl!TrlׁFNC %̄CZ/4\th|Zus%*?p:Dmޞfc8Nw@g)9S4]H_YSmC VɔE4aXZ8" 4Qa&<}ZQ[lfKE"ki$ãC'?pl>&oSPGAS A JBtV:j5N;}P~^%~׆gëzd2<:NuѠ#h*qm\2` $z  $'*AMlE]$ICjT"DgO7 z_]WMi=]gQj08 GA^DuˠkdZ8$H]BtGFY*(h3d;لHIΔ ZPjt lP3Z$z͗cc@xxv7:RWXDDt]&\}NN="@iNk1d&gXbx_뀨?d-G8SKD>C"6׫rvf+p{~Xԏj*VwQPƆArdp画Dxm_0xE2ji5ւR0ec"EYQI+dQ}-tF9Nu$80kbGl.9l`r]X}Nrƙn\~M\)\9Hn 1C5(|qgs3g1Ԝ٫kaŭu9DPpm8kجQ,8mtx^EwcT :92-jVVnpź=~I2[T5Y?сዹLްyos4R0 ;{Wc'8265U|V|-=Ү>,U;Z1WM06 &,7bV逮ހnSǿ[.QgXjJWm.ѓnZ&wf )OQ{46:==XXZ'Kkw&ڈS72͔EYsׂl8{44N:rfczڀ:#X|Ej&0R6  "&EhLRV3NmDb [`l6WS>툢o2/*sj+d%Ɔύ`tB Fs&LN;h^bm~EY*WUH<\6t!` wpɛ߉OEu q|,(** KMGFx`4*H'6o?䓺 >6}:y|(7=ViJ 6MS 3~aј|ךxu-}[3}_<՜8[> stream x}{Tg Nvf_X@QJD`"9"e2pq߲.D\ՠQtEbMMWjKrNs_9{>#$ɠԌ7W|,~BJsR-W s黑fmEw̩J]aJT,΋U$\ WD}r{QBbW ^#;D&F,#҉"x!lT"0X& 4@UKMn &4*Y¤=$ GqJBsTG/J-3s;T)6&[x5o'.@e0$l1%mf_Sgv:+lHD&R> v1w|y WK4ڄ%( RQ Cp{f36lnU[Efp:߁lU.ɢwl.,{S'{O7ԣ{8l.]پpuW\p}nX7BHk+27>nkϪ:n^DӶ4z/<2Sދr[Q?;ay;U3'`>9>me-8^'<gu8>a&۩{ɫSH Πlykg!2;:{gv} _Z>¡/`]$=hcP1m16U4ԥ@58w6}M~Bܽ7q+;>r{ORmU^ D.g'(Hp96µ;$X-hEuPC;濉B}(G^Z49;.t0 D?8q9bD r3th)GICiK>/.Qx1e wn7|XyDC49xg \92JKendstream endobj 354 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 355 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 356 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 358 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 359 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 403 >> stream xUKAgZ%>KY;QRbPQXP:.6RANtP`A7;/0YA>/  (ܞF!:as" ~;}ËB9:9Y=\,Q5Q:bɑ兽Hn>fendstream endobj 360 0 obj << /Filter /FlateDecode /Length 183 >> stream x]O  I*%]:!t`$c׌՚HGp:궠N0KFŝW-ғfIxX].<{WWCiXT m+DA?O 0D;QωLªcLޓBYvnk,.M _ws^nendstream endobj 361 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1619 >> stream x]TL`_3`#d;lmiPmicҴk&^t!M:6 0c0 b05S$#4ZE)ZZɚHk*")s]~{ˤ0,˪6m{nWaA|T!+)Ri; HO}W /3卌cLs=3ɜf||̱ v%g7k]RЭ) O~\P`=[mqL5m&RmdJ^f.ݚ*M|tn&T^8-zKnFн`_lW n⨩59,5 1wm`WY*NKf6RzwFYW^SnsV\bu,B'2 QlϘ+U~]a,6Ȇnela&3YTֳR^HVQ>4UZˌR*?Q U7L 8w;xD_uifbč 1Yez!0-@?x?(:a?vGbV<6a9O !tpRWqzBbBGX' d_!m0OxKj G@F(c.*,:+ʁ<\* Q'lxJ]oA#9Ԍ<0ˬ-K2?*:N)S;eTSb-I˶[p poȷC{/͚G(y29cTІό̸ 7e "^߾-EńZHj1E+WN dP^MM"!aD A 7NJ_-Lzc;2q#ib <]ݲS%SPq /$6S:~!|'/~6jgzcZb(\]TRz7x\Wl }ڷw/:A?9Ty!푽ߵmQxag{C1<rJWk<[$PQ40k vzx\K%HbV%~֙L0<ܿ L>m}Ƨ~6˧ޒm5fieCn!Uu}g^*.1z}N?Q_%Y?/"Tg/<"nLI8ƓY)`JTf%sb=㋱yU1vF7s<<1 Ljt+w2yb3'8s/NGhߌz5 G`l_wq8=c^>:c+%_+ ?=um,"?ٗ}g"&75Ҝ _">F;a%MbNu 7+=Ӛ{k;A. " qvGZRWn -^2-"i :n&+%Z"vyXH'ojr Z4R]'a endstream endobj 362 0 obj << /Filter /FlateDecode /Length 4357 >> stream x[Kw䶱w]s xgO>3BjHD-Ydq DZV>>fbP ?UKWonO.p ƚJY'A'mM0Zi! ^]D.oMc*cZ8UXnF6EkfD m(0 oQ?¨t+dyӌVǨV֧@*N?ˋH+8Z_][p`R%]u_|_M\ Ec~ۑ?`X|6FVBt8FC%DޅFkNGmWQ7‰ NG80ǂ(pFV $C,iMuY6K< .ˋ+땭 F9Q],ݫՇf74ÈF`\pzOLn \7Ȥ5T =ǼTSAN6}_>/W4~\ ol+mTcm,)wf X|zչu&PNnLkc) QG2Wa81i%ZW|+z~ 3= (a )Sxiduqw=_2_X k?י`( ϒ[n7>Glk<\4B)}26*a @yzwWM񴹩50X}y\RuOvHYZ˜BwZЇ.s8҅T@,H A G-a lv#;[<+ ;T\&ֹP]o+4Z#ɓz0%1"xSUbjVy %~ #PsxxTd雼"㱡W4B! k,+VJ$i5>2A :~ :w˩vGa4.&]ޥa?~ jeH%i@+ G.Չiy+% @@:1I_"4llgC" 6GVa+ #T02aaOp~b\-um=pFI"`\h wI֦`ٙ) Oe#bny)IPT-|!*l FS_of"$*LAaB 2|ŝD Q/ZPs,DNctP8[wa\(kb%!O>|)ZJI%𶍡FTfq!%NȪ`؁w\){*oY?&>b a8: `3ޫ_%/g='Zlm^tV/LK,mD>tFի%#( 殟rakWBrYc-g/BI)y\2y糥\"UD&%RΡG3;n-mu*yj4p>O{,IAv'1SB6#zXmVfhCHΎBi| wpS<Hzr$/qMOPXhE a꿛uØt=Q*r\pqc1oKJ$CQŰnޞXvaȝ1_+ "YBg$a]r>Mt`2Jbtb]6يE}u֘0cq?_JVP{j?Nwi v07= F,&+aqmi@*Ѕ?K0ܲ2Ȳ 5 = Gā97@> 60.f*R*1cTpTV~ qΜ(w%I*j}ȕ]b 'aBϾ5Y I ':͘zdHѮulb$¬jʈqb. 3r)A.i 23  vH?TACwcMX_.w8clix.(A>]'Sax+RŌnEܔOi τH8lB7NHc_$HKlOB$H1[l٢(C̺GNJ%Kc+)7*Y-;.`!FBu3X[`r[KN3XPBZPg$H<כ D ȏ]TzgJ9B(5G翼\ѡѾCތycsWôW'-ݳ~ځ{Рj$%ىnոQi:1 оd38h+m~ |S l)㢃P=`^SSf!tMmGqŒӱs%X+ c=ghYݹNkrAnz]inae98gTpet8!+I9? sIi)F>w7D^ "Vm3]J+0 (BDBHyJ=ڱQYPmf0zHr9!>\=3vPQp}!?񌳱z1ovVťћik5SOp*"E^@Ewv+T}kCF/I<><]hnџ/WViԭ},5m'+Q}c[۟6Kj EI~ @ON@c!}O4}c| fiY]\s$1KI9LY;?cNf8g0%=ÉD9;;;oVS)$XDތ2 ]5d+.<>Dkώ2͞2+r6bSdl&m'iz 8zweWq+'j,$EEyX-ߌz>34={`AWf6{>CK,>Ou q&Ř,@̺;5zʺLuMPaYUow?`/}FbWCgV#  @2L0Gd6Ry,)E nɯbh3(/:1}4l 6Za|IʞK$ <(O8Zy`mm?J1eYC-9d2tTb EO1;^;Ƞta-g֙E wÐr%JES?T嫝3l~qËNyD7=73J"ƎU4W18k6Wp "Y x1#>O|#ea_vY'8W+:-|ccendstream endobj 363 0 obj << /Filter /FlateDecode /Length 2983 >> stream xY[o~'#( ,p;KH]h-I"%E!)9~o73;宬&FQA3~ܐ6^f|us{Z"VzNJ&$ɒn]B ~}LqafaPb Q4Ө:"Waŕ$0Q\v$V7m" aaETX+ðڢi\iΐ@4#VXQ^B$_>ʒ-t)r\i):J41Gm~߈",+Ct) ր~1cQO!jYU$ڭT(Kp/!=Hn5q)n,k|Ч4oǫЎ2Q"DYc:NL'HSE!5-zHTXV!,p&F&|)g 2犖(lY4},A KsĄ/^-^|E/v|ߞB"rĥ77 CIЋuP$-0{SpY֬۳rN;BSfNpTr-#ƶѶ=hQK8RVuI.%n<)Isg+E{e(`wtρvG+{ʫ^bixM6A{C9&@E{r>2GۏF+Gĭ=:#Q'V* S>TνeC>,Y sօlZzt4X"#S{dM+ KSuU(ZJ]iEAY*\n/́d` 23vkm-mجCqiyrWrWvZ;1.B*2LC*A(]D)'\%|X8#WYgrOYC5˨ҕ jbK6ud(p3 ؐz"1',26H^־,}UA`̴"<_exw}AE\ OAu,|UD՘G(ETWw tF'\P$Phv3Z kI}v#0/LeU \ ea7Ca!}rKxBru'n|{Ŵv-a.Ha8eu5Ɓ")KaJ'LU/RdL]5*g_iJ n7H˜,|iPDL 膡n 3kQ R'at*n?J!a[1 +ӥK fptי..#(ˣ@p%puJ2^fu#A!.rzǸx[78N#6aLEX2&W$$,t}{5;@. '%_.cjfI~*n̒]qb_ksݿw6iE> stream xYyXڟ3LjKHĭ vQ^7pE@҂ U$N$aBUT, P{ݵZZ޶ޫW>{L&y9sλ}ODs?B$ Ul٘"6fȤs/~֏) 3ɳpuFz~aۨXW.cxXeZ"2*Q6a鲍i7EdmG<:VEl\.K"r~AK|}dc}|e>y|h/ [&[$=ehda1DElL{2Y,A)SarRE)d1pYbL.G$ʔoP&~ lL MMPײ2<6,IŻPEL,Q(Q. W$(Cx+ejBR"&~;xydh|x<2C4뷱U/W$&ȣ#޳eVS+[./$=[;fq %$.NZ,uHŪM7GoY2~B&M2uڈ3FϜ5fXO ~=A$# ?bO&Ub51$</b GCwu=b=xXDDb D,#&ˉ/1&$܈`BL &>! $p"C x` ׈b&JN&3$rUcE9QN*gJ҉L !u%Յo~^:uׯ@53ho,~nn7Ňyfs}Y9.h 5N|=e;x-Zd~CC4@IO/6^)9ҕmK/:qA ݚ4u۵cDu;,^Pa -p*b1R3}R8 uU0C[^݉[[M ɐv_*TW@/B%m).L~) kT&=2Cnjf$QcyFIJS3/)7`U`\Rۋ ˵ƕ^L_0оQv\tP q̯E!{}p9pVbDl;-z \'0#Н|uЍB8ţEdCUI􄃐'}`.՗'T8Qka#%Y:-qiptg>)XXCq/"R8룼o^_1wϭ\!C.3|݁.!ѧDײfp 3W^)$5Rnc#]΅F$rszQNTY^9f»1.v Z;Ynm5LTچB<~ٕnggmf̝2FUg6̋ I+N9lƵu]{ my[A)*X ljDP񽪔 L4YC7Kv+Hc(Oɱ ѷq^0QwsBK/*y\_`$,z$ߟ+8"e"Q!2v ;Pz8<#HЈ7}{yN:شh4NewsH9pt;n0f8z9*gOZ(u(Y[Vol>ye=LgJ;A5YאpXt{/t7uM2ejcPǮ<;i9|zPLr´ӏӅ@/!m #\͗thwh;'6j yfc8|9/Wݹkvo^^ @=fn66 3  ɇ\z}\}7 .L ['?ې J8@?Jf>7 GQt/4W\D+aZ4Zmc.-UT쫯+7,Z2i5ldJ*dUqb-NP&l 2 7iGq?8q߁TL!ۋ kIat:{-wFs!܄\WwH@ڜRiJpy`ؙc[>B"5dnt?O ]= Z*أ㇑+(gX$?{ڗZn/Z7B * m.xf؂v>e{M` \l8q?cr:6>.) d*zU FvϹ}z$ō1m9Y+%`=ʿBOͦ:rG K&-]o9͝/ja,1yA~0 Q[]_QX 1wӺʾ6SBE0h(RI PM@T0u8ٸo=/_: dh8Y(:ʛϷ4kbdeE|Ur-r:MqL3?,_C$,"4zG~jom9Ԕmwvrm{pA(K? WG3{Um'oV.OXvdž^:> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 366 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O0 }b CAp}Ilk6|/`,@4XebX8*/d{Sj$<\yU!t&D]MmL#z9dT'\~p8榹I*`~xS /qSendstream endobj 367 0 obj << /Filter /FlateDecode /Length 6724 >> 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)WS˫.n.N^8&h7!ysO^ `h0[z2}sqy3PЎ97/S~$'OvI{0cэ>S}3"bg3[VBפbPX@j2僌ᚴ4vepHSMay?Wr\,Z)h6.%˗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@":\ja%bњf<'kcӬM|U3ןYsV׽1fYaAJhn 9A0 ̉sskI`y~A-vGt J-4oδݱ0&n?!6, u(gn\NrR?GQ˟NT\]b Rݜ3\TQ(; qQ*Qթɭ 'l F&qߖ^P cidY,M" UƖb!;Ên{^ V4GTw!rsXr@4] ,ތdu&x rjl~޺+Oܭk K ܡóط_+6z۹r R z3`^4 q\6e7;SuN07)G]I{ Qav0q7\yo gHؔ꺁heb<+`LǪ\.c|&W bWѢvXJirNcJ8|EfM EXK$LZQTElJ}B ?{gK%xn>MJr!I/ ?Dk5.$IH^f d_s,M3ul_nWu6cwKqm` g'/[3+6B\?LR?.H! r>nj"8.!u<$o#98 5V%&2xʼ9\Cwʃ`۬GMy,y6X/Gw?%f-[Rfk} jr Xr I SPgK5 T;jZPbymN\%ϗgLXlͭkax SDGK;@w/v a> .B0W+e-7ڻ#7/Cp8ǎϝUkS  U-E/[aTֿ!W5>K=\_IF,6=+9îk> stream x\Yq~_G̛gv݇#@:,;)La띙UݝY5ˠ[[]GV_U?mԠ7 9?۸yp6~:MؼC&l^:+M4?=h7/nξ~aJ Jg4ˇ'o~nn___ac\>;|aIm!͋:{/mK j7O=Tyg=ts)GMԧx#_J4yQl:9~)loi58<^͟]ooY3ee:TmPEmM,- cXimJ -ԨcuNIp~dol;w :џ-FJ(gYH|ZÁ(=T2 p Nf\#~mBPP9Ox~Y{ٟΊ(eO8ʞ~.lСUtN*EX95?K%fgĹ>H֥~*Cr_swϒmvofQS)N֧n& ʁTxMd99-ʡU^UYUR 60?pW[q{w=Ehޑ&ʠZ{`\㺄I=蜵ނwQ=g];PAOw"a~`+8]JR&Th4M.mA񞟀N*u:զ4[d DјBstH` vev0fRߗy@39 fW#[,cf'/8Jȉ%uݖqVJ%HySdt_@k!y32jFG*A N/y"a z(eSL P4N5O]K)-gd׼$d0>' 8$/.s SWr伯S\o{"HNpC_Qobn4F@)ȅV! u\a'O")΅O݁vԣE &:k~J/y.Ee{!LI`y.nm_XJ".&QB 5; BmM!jÜJ1 *M+$em:VZOl*-"ܧ0- 5 $bv1ޔУj>`*%9jZ9\s F7u{U ˍkNk'+'r9d3υLOE%FLrYϞ+D@0>lΥq|#FLѓ8ӰwSk&xrH`ńC MCk*ZU3 +=k~WTu^eOA|ޓ~ъ㨭E jc50/xq ok#Y6̨ 1 QEdy^E )^2ULbK # 8gv9l/)!ߌTX8V3H4'`Wq VJH{=w%.vNm!ؘ2]G ^6:cя.s8@!99?%Ɓ8nc4>߼esM6geև~X%hEXJJ0dtYˋ֙0ӏ;C 'j~pu{BX&"B@$݋b"j`!ۘ"/L=hd34+mrm #J|[io \8Dq͙I:M-g߮[&O`5|ϬzXrOzW5^;9%^Ɏy@t;8B ґA-l4n$n5>0$A:ـ>g<Llѭ s kl#AҙGE=n_oK`puxYc'Cn@d8΢goHc'VޜS>' gM45 j6YXol?P.l20hصlrfl9(k$s`/>3h_)|0dy2_;Z`<`&$8ddD̑@8c}xnA R w@Y[4fٍ|`!!|4D0T7?;#Z;Bx)Z 1H2Y]7W^ j.ťiUwϓO8E T(G* i:C p~{Myb^w9Q\ qB^sˌI&ߑZX/ HzM-C9қ[Xl; Orqbe9Q1CPyG]F.E6[[^ fM_No_;>#hOB]WA]M!ԵW`Ov>ʙ?85҂F@Eyϝc;pـ> b0P'>7,./+  gNe V$ .gdPt9g=_+LZ4Lz' S-bl2ciy^EӰs&x\tT2xz*op@t:JMɻ@8 z7~iu\p~ˆ1v-">7o6c.{,y^p$-sJKN|,17TAdG1mb>;6N1K]5?O/DRrwRtJ-B <1"qZ4U3ّ1>]>/~{3rN>?pz/SgJjM)-W (\zo82Ș}^HM-6ZUg2E1*"$/Ÿ1l=#ՂqR-y | U.kZ覶Gϑ;iv@U7 fw/Le.Tm62d4?:Y+DZnOPfG ѿ14!8<ќY[DFt3OzQ]uvx;K_)v9#%`$rh{FQ'hʣ#S$ujTmč/.J5fzئ(s"-'Ztu"-b˲{DKqN C+i#R.g2<HHƛFUe@I/r3qynuܤt6U 8/XOT%8"[O׋tEIoEXhRe gd4]v[ƈRʱE-}+r%/]к5s+;[\U G)P^iĻab'Z]]sIµ۰6Ui]  !}b/h{,Ccóݿ%ĨT&\0+ ._hJ?0'IkTٺL jt=Ȍ/LXkBt/r?b1#x<$/M_}C{ŸHBr)lޞ淉8wLEV5! ǣyJ|s$v۝0^zف fY4L\j+TUeKWX5#X>s[@\| <ɲ3=/c??Jendstream endobj 369 0 obj << /Filter /FlateDecode /Length 4090 >> 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 !HPuA4HpK{ѭ-FNLT6%%Ig1uIF76N8Z} D9 +tIr K7!y^J}Z:H@4),!}cz{@OPIRQB&G5^\o&+6h?CI_un,9XVr:N >ؔv;n})e|HL[%DA{s@ԵykgnQu=fj4J@2ᑤxVHqy˓3Ɓ9;҆x $0eA0M(-a|WEɐkS)*I8EQēȼ41')fCH遷$Ѧ$xjmæ..A !Muh.!(D;whXmkjJ%uCxrNYea_98@FY4wp{\WC¯7lB?pIJ0R6eE3ڃNL!@%k1M8iL_)s2p?;(TSONi Ad'ux|긫Q1t 14Q$)y`6C~ E.=!.d 'F"z[)w4T/t4ø#6.R:Fp7!Y1n0Q4(~qcE|j8e|swrjW(Q'vu~l *Rr؜r%JP}ɡ=Q ]o,"W^"8;09kzIa6v[#v b8yWL@=C4pg}c)9wN1eN4 $?=h8V_iҀ6ccyd P$*,X |sk!|%UsC>z*7kn@߆Ϩn\Л*OR0P 6 >,aAΩ;tkP L6Ah䁦Č#B#~?$9M@*T%Lt+\(_ֲ7Π`T">X-;ωֺ_ǎsV!ppbr6VSSlbq{WsWY!yNeT1mQU1l„Hsi/Դ?t_:pyBFq s}4㓭IE_S. v!kYDqƴ5:$G]Δ aTDY p+4!BJ#{eJrɜ!ץ!Ti)<s^3kzx!U nFy2 z|\ԷHȁ2xr;JsEg44%XCW&_*'Z:D;jY5wcirs6 Sle 3҂MQCe7aWZ)g;1qJW R-Gd %p*Cko+=JE-oz">}AG׭]O}7N#[My-o7f?^s;]`-(#]O/˜rH,~ARsVBsx<: xJVcf|AfR}MRF7E^&@ekj˸+jxkZѶ'|JZ@R͍/) |Eh.u[z2zC3MuSgkJ&Ss3vޒov zfd=%[]Zu~fԿ/,$dUʿ`W(n-'rhue{rצ½.D^ QTM]WbvW]~BOſg!T*|ELuuu{pgڸ|RoMA?ތMMB*$*tSP}`um022d%>Q~cc2F7|kxi}9uxۿonnIS[ Oa{o4jW[BlynsXoNo͞~{L.waoՒ h? fߜҵ7uL8Lϛ_jo|9o׏x/[(s̷xD8]wY7n@ d\Z*~ӺkQxҝY-&J 2D[ݮldJ_/Ve׋>|yp(?{[炓]%<\Um@WJл\j#3"t-t1o]ZgxK\=W4YǐIk99*RzŹbL`\l!-ҹȔ|7 ]>Tendstream endobj 370 0 obj << /Filter /FlateDecode /Length 4601 >> stream x;iod; vooxFGY;H< FRF-:<V|d{=3`s`|"Xw߯ [=ݯ^|a%W2}]NϏBIr֪ѫU+^ ^Wm݊AG'~ NEowbpB60lrsV vz@%7dAUS meo^  qKF'#[8mk=6nDd߷m6? 룯WGzxuKPTWv,>c_7oo¼kԎ_!|~\qwjL&ݓC'= r,,=͐%^L:~X%kQ[dX׋q'2zYGϗgin0B|POWg2>D#^)H-a4,F햫#o|kRV+ڨAy2b!!VS†`9M#=@3rCa|4:&O!E T6tQ8 =8? 㕷=W3IQDۤ<`QxZGaX♔`4ƛC==Lyؚw ]Jc|+haW[=Up5LA4,_p*G8vޘQ oQa3~ŸC xEY^O:8 D%z<s,FwԔ`9VnIE걉mFع L;o+@v$ : JBUR2ء5&2! e1P2N" 0&;>=V|q~RrP}RM WUkK2*H:}`NڔOn189RJ@} ;zWWӿQTP6WS  9ɒ:m"r$qTP"IM  {zdDV^O{")m\S‘1\ ;ގUù'+ R|G!~Di!5tj 43p!3MFN/& 5O V-yA2$ 7(> OʩNfrpǜS eN߀5HH<k3뿭oVvF߀c#X2nU/JQLYx$\^΁f  L 0%OHTiPdt6B&PTCMf: hh!A:B~ᇢ?LaAU_BePfPzm$,!B6{9x_Gp$Be QQ2 V q0j2BD7E#@eA(­=e D`%)o~ħ_oEhCo]$Aj@F79oaY.]W[sxG`9}Wv&z̄qsq #Na!I*2 ]΂b~g${6;w`?-jI $C4V46HZґojIߪV%ݭvB;0#&FW\(Lق%Xjn^i&uEsU*IW!z@4=zm0Wc=rrR>^ `f4 c!UnTZ H\b i-//&ZYT&) di80ENf p P/; LE<1La> ̑ KqKe Ѓb׀_[9~ p 9 {cV-h5c`L)P?`(lbT"1c^$ Qب2 c`Dӊ1c3`$rۓ㓫94Im#01@v~}{wus}+-ϙDj0QPEO/eYU XҦlyVJe{2x`c8b3nPl"oKJSq]TёFԼLl! tvR& C5&8zt(X*V6&K8HW OxzmI`' !PQaYTyDJ[ cMԃ69l:p5f*rW C!˧L[75(ʫQMvEDƅ|(59ڼ4i&cj.KW)Tv/Tոeɮa[B? nꯤ7ީ2'= "LvhnrJ.UҌ}g|,l%v:dxR1{&GzȚtS7dcw>`K!Mlϼ+өq8ˤ!t:3RsY`W&?TXWj=er\=]h!x,h8mb1 ~O>鲧k7kqĨ ؝d=lгcb˝FIޜm@/ڴMx8:iW{3qY%FK.Ҏo^T> d?30 ;O@:<: pr5R]{b92Op:51ig0Y5N ޗ쭸\Zkb= 6$Eیe͜x^|؍hG(5RNykmd%3VPNچ<ܱ~/SA~*9;.XC~\Aj!ov5%5?HyA_]= n[HMH"}u$ɪ`9}"k8E_?ր3=V);tSICe> stream x+AY<K 䯧U=+pgQU]ޟNƕ8_}OODzwq{9DU0Fy'?:9}p k֧gʄ~(J7a6ghw8~^{Åݩt+L9:찥+^ҩC7{\ެ"ϧqwp{WF|=8*oBz9E~ {?vSS/42"X5 uDWUQ+,(~B&li_ҵA8Y&ڙ+HҶ%qt.0ALh0a$I6=QbrN@p)^7@`!3|Kf8`<uEGX\4ABFYs%EPE_yI2Ra[K3L]h<0w^K (Lk w LPjD"sZ@s%}[b񾨮hx6< GQ0g 'u k:Djͮ釧8$k#7T]NվH8,Nofj f 0w) $:=sNGhDH`qOԆ~5P!9b*]*'88SY}B#>uDztHϏZDI-''JOyj71>GȲ4f$!х- ]yh&嘼<Wd1hƹ9RY j/6+I5<jxС_J ߟzp7? 3 K*Ĭ1v}Tt&v!rZinGp8R^&CSHA2F"0Ngɒqq8l| dE?yzy )CG?%qmأn!ƅ&-5,vHi̘iO Z_]l%t'bbBG0k(ߋ"pB'6&(;)i1 w&%,'2V[B)ıކ#"4k_}C!o1,\߾_w #ӈ:nYEd5ҕ>{ի~}Zg=ؼ2Ӳd&.ɚ/B ^4$!ғCxN'<': YXv!z I.HY hܹ4i|Žn4BKj4y=&r\Jy% t6/{S\0Q-1oȤi2[n*\0c P*UҢ.6 ]}`rd~}9wPeńP;n_Ꮫf)_r۬a7y<+ioa;4%0mzu>oʳݬw=n>Tk9* &Yx=Lxؿo^#N.eA `᰽|V_novqw2aK%Ч{zxAb 8b<\}\U@ķha]/nJM<%ӡ}u\s'VckaSo㏲B*'}9#arpűi1V^nc s^ciU(?~Zi}YAzxv沬7L$7e0U VzW^vs6I0+Ϣ= `ן!F@);$֎G# á|[h-\uYO XP#ic8&M4q ;ϏS|Գ3dGbۉ% ,twEsN(p]iP$Qu ae^bV(uE=9+ `۔Z&QB MK%mA%&O;{~m%`$:MLtͶ*6׶ [2HIc}H f f> IxJKX,ILr= 3nHM*,iA I,'`1WJȼZwyv!OԘm|$+1u?ft25FhPB >.G 4r|83 Ɏ.'civRWfV#'ĒFK'.7"dt4 Ϧ~S:qFoyK6 4[T4t~E8WMt^ƓD!HMt^k){^aP]Kj *κ:QJ2i鈡GǴ{kC7b1s噗5F'ḼgeLn+}-xI~;#U8v[hddbd<\".i'ʑ;g(Ǚ&%6WMݗ`91 D9IOuMa\N^}[ F/ ש|HuKWy>eySّ*6I~kT"QD dP/e DDjWY5v)"i|p&\MG;c קYwI7>rMp! 7ڊk[#G0$BNb5֍O|aRj0MO"λYmܹD(呶Q.rp}5YBS]R`CbVmeJx}[0[ qRt_ .?μQb jjj8y~e0O6{C%|x~%A~K]D TA"`2=X"tᣥ-*FQ*f:qu  兾ԅ͹ G&!Uo* e-#.X2) hL]R6!_'3v$ǙE~e'/(;`4O%= ,(ݗ'ql7 pg֞T93y!D \+ 5̍ve xAWc;l'F~{tވy;a'#=$cì7 9wuL~o>?*\<-!S6ͽJw5)*X6"s?sl;n?ҫRV`DiһϺ>M%dxDU.u]MRsQW+myftWlXP.w7c23oB/jZŮ5}kv77ivdzҦ&xvV0]ɄX_|zu'W[򏩇tE"RK!]wh$P#{,&,A5S= #~pt(\SҘSK9뢌W#<ŏ }\ѝFaPhe.tO;P|aK%R鉛%}n%T0x]$u46bYFUGz:1솅3 1 8֬_NT+'5dXP5Yeob$ iHiSMTǯcI[fR2`z7cGM0U/ gBӘ5LGN~ٍT?wdsFGf4c_I6_ʯiekY =b2 JKuYr!l5)C0#O&+iqxnA9_aendstream endobj 372 0 obj << /Filter /FlateDecode /Length 5814 >> stream x]Y$q_~!@/ !W ؖI2,X!gg~#222gF'ȸ7;1ȝW.72uW~<{%0f'U˗yAx|}?y~8AH!B{8i G/Y 67JAy>-' K1FÌ8^ys8*N\XeXL<+#Wl6{@ E@@@Ln[;QqpREV c!D:RwѹL'$2YVI]0J}>:@31D3qc5]MyBri Jzi>U㑥tz6fzY5M;`rEZ':#SJT_K`SHmb_bP{ch`{0܋fani-,B֒Eg%Dvn ;eY""QY$W|pO;? A[%x h`ha|S|BHOTL\+k\eQZĿ%e!yRAV`z]NƖ͠Rd QiVG>Z CJM|tpڹqjR^21;AZ+BGe9XTTYgY6Q+i8TDSΉIb|0Բi4$n~_ߎr-vj l7G9mk+cmYQc/NK$eu)U )MA 1>JR{jMT +2Ois1F[2H OI$f&Q4# 0(*3hCt ҹis$F{l1|Uَ00Jg0ѻUb۶ \P<_Pxw$}~ǥ[i=3@'A\>|7yX5UTxvB3VtnJ&>Z9,0 rN.s\(AX8}Ib=W\ bi?qu@t*pe;{Y)%]0C S׾a{HWYL5V. /ync|SϖAG}V~%!IXΣcy9 JҩLo!4;: "Q4yNjV 1SUؚǻ*ʵxb'gt[]\ oQjI!4[jP'C XB<$Y ^㑎b4δ&E%o,NpxKKVJo.rBm Rt~ P)P?hCM\sFƂ`s2GR$:wyZ*EBL~¼+E\3jrn={SGUhȲ@rH1Eg~ۍI.N,ZZ< Btds Qt p$Sp=Njb֚*dNJ5? 7yCȪyH7;rC7@++CaM6e4#nYMٍ#9BM0+✼$<&&'bVkn8|O?UT#cd4W!bs,}Xa'Z3% &ˣaෘ-a)KKu@ /̈́]-Fgچh Zc\x }NC!z|*r˶j6mĿlmĸ^q}ec.s&6y1w-t;$OFB1C>!0bs@<`'3<C,Sg gW~vs;8teQbSb'z̡6amGYl"Q:|y.q5u 69r6:kP]xO-eyEBHnkK- THdPm  7|/w6WBs;p umG4K*B¬]gS|$>7%P yXcS[0SWWGݬAy%#Ivd쿚?w6!W^0z^ S'ƅEg1%э>6.,fE˩OG a HfN_[&_euA$b$RgCOW D+ߨ/uY:7.u &I|O I' nEշsZ \-U-Vyy IpUT"urS&һYj0\S_?˒LZ6@mG|ڦ՝nҢ:B湬ŧ>ΪЃX~ځ_4"M}M _xٴLSYLYɴ$ }CgU eFV3 _eOgRC=(V$5yKeXċ3` r&hx,[:Uc\J}T'9o5RQj'Iѵ7J;* (fڨ D%JdvF(jv\dgO隊| t|"s[~TF^⸟,16PN-t y'ŭd)#,|7y+%ϲv¶\;%kW( UJi)N kY` O$,tAHp#F-NⓃ975$}>F,"x3xLYi;k7LT)B б)B}! 4 eNC!h8 B\Zwʥe}>ڦSic67E= _)x$&f.Q"KzW]͠ qT&#:uf՚sb&սvwen~g>$ӑ@z: @6k{ Xqnީ\ x«L.S\ɥN"Mil9}=uE[唝zx 7.yNW)}M_kH9*EhwlQ.&?1@U*'JucyyG!19%l]H^ ؝m'fjzXE"֡:er"ˤ\/(6V1/PCwCtrxE6=w<7{SXNHoR!7~"ىz9Qת./ePx!aUS(7-P]{Lsn.rM]=rbn]ry ўtZ)\DDOw#*ɭmw ); D10 $!-*{O3pd:/Ԟpbr[j}-+He\3O]U%Z>|*nF!|Y<8h3*".ݡ%g?ٶF?6cN g;6::tAL+?˕g7Vz KFR=0jC0x-='wZ6.]SϧfF(~O~"^x(̺./ڟ…:Sx6ځ%+7& rjh4 -gå A\"% z[R r.3dD=X$=),}gB{n ʥ!n(+Zq8H]>z#{ ŲVT8[/aG&>땤3Ngp'}2k|8'tw!VSײ9}*89 a~gLnd<$_A*N5ƇH@i7T2](wmi`q}2;|1fM`Ehzy@Q@SI_$EE冀N0Fҫ)Q/|TIoPi!I HFKWNtZȓɱ|u `K6E;;Me6-}[0Fii5"δ\hTe,n4Q9iؚ_Yџfn_O[`uk5oȵ(ȵ5D30SW4A{1 RheWfP$ {…&DGC luz>t |Te~R7>\@g Caҕ𭃁}i''RNAڠ_[.&` 2cSj2頽S<ȟP9#>kHE\ixj1"~ob0ؓ 49>bO9QEXw fK;Җ 6]^ w;~l=S n#qOxTrI._>CMt`^okF>ش3K"Έb|~3em/Ӳ Ol8=R"&+/HV?b92lW1 _Y'N.Ƶّ4(!EZ^hmNdLB5oK6^yc6"=̖Fre[YՓYb|[eґsRUK/5t1"嗰M)rLAm%j3ieJK'~^vm]Qj{?4$`[+t`"s}6p>v=}5 ]cv] Լ*yBgO=a\Hwm] g\bY[, d}n/SDAyo.B &endstream endobj 373 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~8D4, g/PީoյS870+~yH @~BXm;MugvW^z^X_:+ JyiH|I_zR߯ݳW}{勺^_b^ tn\<`/`U<ŃĽxn{~ܭ X*(B}j.* 8~z{ř`xe6ǘPc!;o٬tq}0Z+)/O?6uBh' ;)?JOY^3_ 0uhGcQ/](̢kpԂi0G#܉Y[ ei F@3DЦa:)\Yb$ acRL0=feSum ]cWKQ2NԽɊ0u(2]NV(^kޚwnR\H:-U|O Ӌ~σ2ɼU]D` Q1X4\ƅ,ù Tn31mWGOI2?a /覠:*Uyh-07$==tդL>1,h-vf j=U_8aKx2~-Z #6 'p֜X:jT Z ޟuLب̣a&t1v̈́E!k{M0T';uتp'+s!7BŠ$^..$@D3|]T pKLU<صjW%?u>+jz5 uM9M(Rm7\Y" R؂+/Pҹ:BOHrY`^q:n°LPБ=R:n·]* ҏK CZ&Ƒ$K$ʢ-,6)D0[#,>_s 1d0!DldAS2JFCs4QjZ F܄O"WNzM/ƾseB!#sx:Z#UFz$f!`'W%!+@D@Nl3ಿgOyזq,Rs |4^L‹KC }pUM/@='hjir\͐ Kl(p}\語hUS+LsīHG=}R]:Q # a_-^A0TXf]ܚEjE+jLr1'FX7Ȃ\.\jTDwszQMN3$7V))c6k=8ZBbLK|{^$"*Ps @r~% }M5?O*ϋ?j{>(5?*` Z< G"촋MXMZ3eX!SB] N*AבHâ3ο>jz&2GN(s3QtPp5(} mPT$zs*b, |(*!_Dt_*K;]#f|AKqp^2NEGBڦS,ߏNБfOTG6ya*Vw4!dTԒIJ+: 7L]t2OY8\@8Z;*Քj|Y`T(:yVv`Xrf8RX*ig?8Uz[V0m:bZS- Z_ئ ;Gk3/S1%|p_-g&u=F4$(PjX߄S"4!v5<3%.k}3v Z |@EpVߞϡ0∃D;/.J.w}RǗ="5Ì5!e.A kNxEh5.mXYY k[ECf,CY ۵̎uKAvYCǘɰ3ȡA; aXgZ %<0tb^kta6t!cYRT^lzW9}و.s+q*4 ffݛ`,AKY- <χ:BJ{K  W[˦QXG龑&,^:DEQNBc^|M~Z ]Z tfE?4DCejb/SL3bǖǝGوJrʞᦐ/U ^֔3Gs|2O r@ܠIKN+F H}"L2,BB_29 GHbVs)TB+YdY1kJsRZA{.MLE&Q@it_['I(Jt5ظD‘Sm^7s֏ߨxEMHϤNFmSjt=J]?ֱ,6nid@uǞnSjÇC WGt VR- (oyd7^hWf3h+!)W OBQvX+aZr#ki|UTAd 6O5U!(BR!"$XFrsLԷwzYj.j[@Z1:n+; (Ko9z9HQʶ;C=J8[@ SDP[iɅ;49ksr>ה>id1Tjīcݒ:(SV׼Pm){&K9GY7]{(&.O1jZݻm=.=|s\a=ƊO .aN,잢/nt[gok`SfV"hp~uu*%O/D]xW]gp?SqUjRlX&sV#^]vm%36J 8UVcAbݚiJ.u"O wy)5Lt|X#n e?|?E2a6JŢУ뫡VCi"Xe&(sHoX%G*G$(T9^]Ħ> stream xcd`ab`dddw 641U~H3a!O/nn7 }=\19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMUMB9)槤1000103012)ٽgf|;?̿ܥ;~3>,}} |g|Waq6;7<_s/wt\7Xp9yendstream endobj 375 0 obj << /Filter /FlateDecode /Length 7026 >> stream x=r%qyfTyŇ=KrıLRvIRj_N7tc]\R{7z;q80@w[ި{UњYdF?`W'{;#s㽆VnnwFL3M06:(/Xw'du|ߧ:6ı1?>=d㨼1?9c#l?4Ku@YfFp\ss`v:8ir q8cZ< h]Ńk)>ӁQKvi!JHϤgrZ1vXtup*{{b4CW{(wAHc mEّB {Wϗ0Ơ52`<ߟE 젃e lZvɀ|+aPl«g:b˄lv7@ 뻲G!%\셆Z Bvڝ6h2!xOA ~ wYĒNT4ONj!Uap*̧ ,g U`pvt3ͫ?/*ƖbTa . @RG!pl ƫ7q˞^vG("/D}f KGnvr\,ѣU@7 pʒ:=!lUo(\r<&N|=pr-D>A c0eR Fz=Hv Fk_/$2Gp2uPpYnnON]29/G)kYb>|Z(L<$NZG.:2! ʻۋRftRv<ۋ @,eXXH3rD5$qۇ@'uD2'G:쵈v",+ᲀ&Hj0k'זrV)0ծ ^pS)GETt;&P :W1R e{7Wj|aso(f>M~t$Yzl[$R&{zy& 33ټe!؁Yt$7UM)$0HgG=ad$Ǐٸ"k.Dx0@a" .#s!q2 qQO5FW 47/Bq))z' {yB^k@yL '$cKQ ۓ^GswQɘIďW3\i{ms 1| N!FUa8:{J$5N8BEoLdQaa 9;C*@n $Yr'ɭEHޏ8|4R$~h=4J"m~zdg|g .dR>cI>TSIN h{6urWGb'̣f^kn(l]_L]3r&ӱ!/Z):thތKpj2Hu#cbqu{Lġ⷇|56NjBP[/'[[$NۤmLnTOoSZU:!;۳f* F*9${@e4΃)~c ux|@ ĺlʊI} 582Ԩ0*)5A<}S&l|WRXeA{OMYFqX k$zkS>QϻcuG(c18F@:L#S]<D2奚p+ALC@uL m;5vqUsQG">ӑ%&ؒ<=lֺId%KBQp+Y_NGVG0 aٟR'xrT /ZU."otoߓvfK_Y3ؒTFrE'°x<'Cb^ yΖPOOpzK|_H'{N~2r{ڟ7^d6Au_9 n.2{24t/ %ƫM6yoWlA}?(n9 .*z*fHO$q[_Y 2pO<>´, !&03  j'n3qr䪷H`ԉ@ٮ!+˙W3c©M}uROSY]ߔg!DT:֮F0yavfQ$}QG f,׺}:r;8^R- y >c{:Sv؋Ryڳ,(-j|/;u)=]<FI:+9D-h^2IȄ1.<5ae.Iz#k24B}UƦ pvMuK!{{0ОGוO*Ąl3񁛾2m *H;ïi ά3zޱ0Ô+]Z9Al}-DR-TDLewI=,xdy9`o]8dVUTÈ&k2E`l,G |tQ{3\E`-PY"z\0OINvRonb3.7fxu 7.zyLbaSe |fcG=_^bzKX9(Y T^F_f'bt K$ Q +_柉(ͮm 78R5_X/H{¢ʙr+|_<4Mz\9˟) r&`hF!u^.,M:(qۘE*1'&sGr*nE 1)э)'#Y1n/?!3;M7ʨ:`lP{t@Ù".Tu+!E-P;(ռڊxHvIGڡ4}x7kI^ҷY/pH:hWggerNLzJ%*q?'J۸=l4JKOXSfANr$ыCyInRf̍hfKPS3šL mq (*o(Rp vXVF!Q5Js)^O@cydWh8g4uZaFސw~qk9$}K,阞>7bϪQ}6y^ 1exW߫V8XYSk$mHW5]2Ehٜ[NSX'WDm;߲9ےOJ.:WyλbD DGoZo 5S@mH)}C/ 5E# s7I~ "X鷐^t"'\qK ͱ}&@VVjclz /K.;P\7 I᳨ {"e1zŸ,+Kb4%Clv7R %4Nx]r]F]$Ư{.Z ] OEXo?*L"&؜x& 9ѐ1]ca2㐞WA %cJ.YPJrq2cq3hQ\ٻFOT=+ #,F $4L.;"eK ړ8~_V1K0ߏĞoC\DzMi[rP]L{1(C=N>a7ܫr¸/H%ZDT£H* dEs=m4z1!^"XDm" 0uhCO*NXKe04f0$-J*{h@l <L`E4-Y-cJ_n Y/D+zLoDpx0>kĦR/CP^2NdhPMnUl'mAڊRT#2<[:yMVoheJyō;Zu|:=Q,2ErrdUzjS"]0,x Efp#W>"=~I1ﶟ7 iFiJ].4Nϰۅ>~R؁^Y>P3j*+S6!g<88unm(?qoS2"@jQ[Ď,bW8KWFWlG^nIr%QJVoq%ڬVUOH2@\<_>f%pvXvo5YS 6{vL{&IN5hkjGɺ>JAl1@%}ֱBɪz!y\%vפٓ(~`yXTmec1`;}DO郳 ֪0chJ,@o咼M(X.u :ĠKD*,?p$'kIw'BΎßRBu'mwG1{jC{'7_կ1Le<Uzj <77ޖB4PM:}dq}#՗ ^UcV_7*dCs+֜!_꨾EVtOS*ɻ k~i}yzg2\=Klvߧ@N]קedI_voZ~"?s uj6 9P:э6jˤI(Pk D}Z5IC<24̧b(ZԂѫChFRձ"*졘cL @4paYR щf@sJɕ^h)㲭m(b8}k]JB.]&Zx%ݶՍ[F@ d0=ୃºLJXSYZzjV Kv|Il46bks `jݸh%+_Z󘈔VקFgi%Ip%E{L;h-I\&;E> stream xcd`ab`dd v 5420qH3aÏew[ς 0012:)槤)& 2000v00tgtgvBWլuVкǟ> stream xZݏFw /s:mH[-pM=Zk-זw@ѿ/͌VeѤ!+8$䏤mJybmo^nVA;Myxi[S+if>daH.I !.)c#,-~ΫK83[%#1IJ(n=Xu8LL0fGV qlGN)LzKJIq5&'OP%ǎ!Y.*%MGLVVWq6!Xwm*nx di)xԥx|ٝm)`QS9wj0 #@Om jpd,οQ}{F"0r޴/cUݵ9bLFIWնޯ j;)j{XW =Ai޴˲x\fhw\7:^HɩC*$'%5XQ/KPBM؇P.6INN(jfA- y$NƥL!J!D"+g"$fܖu7҄c j(% \\J03..?>[2Ԕim,r01z.d,;e%vYnjR${ 3^j0ČGf峘9?~*nV piRQ_Χ^8 u=EO NX8mm=Nȋ]ݮgˊP*xKɩ֒ɢd/77fj&ڕP j1*+BsJB\8gRue XK$8TS!=+ҍw3zTb3"@W9+f2L 2BRe;R-rrU|LV1&4{a5ƂR rt{0ZR 2B ĸ7${8\ Lˬp-AG%FiSK~l $N4zahILwv4ҰTaj1qx۝vh%rʰ*iq޳xOf xZ笡N3mvn2!(c2^S%6}̩VZH8O%i`4Y`XT )u)o})wͽ߉Q#D3C7E 7XoH Ldo<Vq떡6.ѫ0@) S7SdHM"UI34UĝV'϶Z %lBh-3KIbA,nl7(Qz&[1piq\$WS7J(zQ>h4{N{s0'v!# 0 Eރ+p%Fc;fV:xeY1*T+},Kj 7b@͈f:t6DQRӌև{hNM^d{Vs0-_r1Uזyپކz*l1 R1'M ?LPaT7>NQ*Kصwudk@"j+yٞ^\[ m#$6 Q^.!3ilIe28Fii~}-Ub8Ǿ]A/Yd6ŒuaQp IFF0>jLഔv݃f1Jiͻxu3xu׿}樒7p`W Bf sm<ؔ M@ @`W̌*<C.nE<5l@6LZ2М3mJeSLRxu%|HE;F9 B.AO޴m=Y- }GzӜuSNVݬ㺳l VcN6^u*ק"P6U=> stream xY](2"q6>D+Qu%n ~sp&@,)v+7 LM{; -ӿ_%jJ2BjqTQGVlz^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,sx0Wp #`-LL e#Je4A^ @9 P NxDyI{/]Zd`vʤ20y(a!0G`NZԄDu~a~ "C ޘX +D90xJkNe{@ymBĜw1Xg1P["݌J"'Z~\k9]Q՚>s,ء |Ȉ,B6,8ڧCu։U%sAp!5 t`^q 0s 9TVfGPYߏs3"@cE"S#wSpC1K/ AZRq%\|]cJYmV1bBB@,ɜցE~I,k!Y|kYU"u8ˬiHXq2ہ<.׃{Ec: d?nw'l#σ{\x~$oC7KO0_ݙ bPF5%j4K:Ӭxn箨JRpU_܌\aFp0;"w94D?QQjV6qihwӉ`̙!9N@J-s[*xixs4'C^1dH]ܞS9w=;KjHgu2kS&l8.xM o5ݻHkĵ"s72l̳ҁh0Cgw[(#Ľ{{wRkAgQpQG37>Ǡ(L-xd7os}>[qnW?4_?ӟMB-C5Mxu>n i :dj;>iͮ9؅cnk懴fn648҅cQgʮK#wz$aҕ2}'߁OL|"~iWD]~W֜=2b> Z #fTnCR W￳#+endstream endobj 379 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)kuh'u>Xp+ϠtCl(ax ͭ<|Jdt~i#jƔn};Vؼm+roWM@wg\1zUP %#&V Ca$u>t~wr3ˎrUv-qFkPI2a'(+)PnwQxPTR"cT+J/Q\Ea>~Drks d,E12/LF!WPGW Ϻ[.V\ >oDO- {$){~!7:Cكk({eh0"{an=8{nwie7sǸbl6~yޮڲb49KT3K5.p K)&ի!R"tv0叱L0pCfb.c rʗGWb! _wh˟jYݠ89_\Uz{Ỳ]~Uw[RnP{g82X[p &j 1!FRT B.i.@ fR(|4p*&j %2 $tw EȷU޹`u SB(mdE/}@In( #U=4\)Qm-rm*t!BmVJPM\}YU:T.iB {ڦ X)wNܤb;}R/׻̜jO~I rfq;k._wvQ4w)|$t-[q i0 !ƺ-[#Y隷Box4@ɶ#1zlSvJ^{8*XQЮO5-#k>ߐ@'8mP%k ^;(HB0uKĄub̪Ca>>r6Ej4#iIÎ%%EYfPq `a38J;NMJa3!b4L!hm쟆yDZw<, .&Wѷ`l\Fz1XJsQaTJ \9jƓ]bM']>T*~?߬։<:;3u0p U} qt.& 1<xAsTd|{&€NREFcj":x'̈+S(ǎ9oTrC<\ :?U\ L+Dg]dc|J'<G!F$]Jc!"%R0| E[ssJYcg>FE]kjVFYH? 3va)GVE {/ʽ!aRe7-A͈>zSC.!!{G8 G0yb!FzPa[Hj]SxG{| Ը0pAḿ" : ]D@τ@촥4fKҏUzbXQiO{C|F6q%KQA^e!?}?=qg6da!Z:)جiĦ+GnC0 <59B}b)oiG 邕?vQ{?R { !SU: ّ=-6zVYYtYQĐo. PXqyBömoGޏKIfD,F=%nDjTMj51I8W YMeY$]O O1# 6_4>7nfHVa7 a"lʿZpg Fla$\8Blm J(.êkrC]H|R!ba~~ۉD{APL_dδ%`[;1?LC> stream x[Yo3-9yЬ}('DZ̓[fdsC^W-/,07 /bea̩ ƚoL[f:?M;_h|v򷣓'bǸgVN۸.ע᭶rȗss KHjX|s^R:m:0{5Y֑L\~3J=KB;:/(Ja95 ~@2Nk*{87YLZi+& ׾rl3nZҨH9Jx;;8jդ3){17A)|"D,WR&Ey*k@uQuLeq;`AVl7e2AL9CWfWb/T+^D{)& ~ .jוOy жm#!j 'Ag 7vҜ5_/C=+^ۓRcM1&u [o20D5^:29qZ[r @7জxKJf|8Y':ThPgԡO]jLJ Q74w]Y/ PРZ1Q2҉1.+r/`gWby?^U\ |R@fCV˰L4EQu!87tQ@ڎ cXH#j:$c4M v4ֹ @Tn+LAǗ4s@Sd9vH[YGI-ɇytP _:MSG!ɝuJ2Z.ksUU Z=["#onQ6_p tHni96_ہe%A G2(XB|w,rrGJ:vT^\#l%bJqda2dF8*i=EHe$#Lz0!' "_D`.ĔSZd"OEPIe6Fd;ؖuOAZB-" rJeXNN p,sfSqp,ƍ( Xed 6-]/ Tɡ(y:_߯RJ;lh"; c@28VX}S\ф:u b, ` ( ggc|^(bm ]Z8Gej2gEʮ "e)7_jEvje78daO9oDWj?!&!H0Z/ Lu'ޣoU@K+o)Ĺ\Wזf LHX$:xMpH‚5qe9WN[8/*T RTd҉J*rGUR]GR!bгy@1)8 !ösE,W4Nmpmܠk0PXE ^]f+~U57DR.tzɪՎLҷqA?ʖlHjqW# ׃K`SƴR辐rlOvK} ߂ *~N?.a3 xn#!YhdV).}܄*}vfOźG@iE|?Z6wr1ދ QyHptC8ӻ A+I!: X-Ig8Y\JwߣF|sFT3/~ǾԾ]xw ۞]Jy辷Mk>YKCBU3m#r6C i Ng@|569Mg" :Ո %}n"`}{/n$p]'od|AQI 0zzGW;g}//9XZ-endstream endobj 381 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 340 >> stream xcd`ab`ddp 44U~H3a!k7s7G'~%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`.~lendstream endobj 382 0 obj << /Type /XRef /Length 260 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 383 /ID [<6926d3b6691222405f5ff25157849e88><1144294277e4950cd8731822a8954c27>] >> stream xcb&F~0 $8J[?P /Fc|6h\w?A (/0p'3XJr"kd8PB@$G>"EIF 6K=Xo,d&]@X""AI)w2lg4 *.&yOolɶD| z_D ]% Xld dR` 7j150 endstream endobj startxref 210776 %%EOF multcomp/inst/doc/multcomp-examples.R0000644000175100001440000001761612661101017017457 0ustar hornikusers### 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.R0000644000175100001440000002517012661101017015155 0ustar hornikusers### 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.pdf0000644000175100001440000024402012661101036015523 0ustar hornikusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3870 /Filter /FlateDecode /N 79 /First 651 >> stream x[[s6~_i 7r_b;x|N%W~oD;;D܀q&LY0 LŖEb&aBڈ C&BRRX&@D*1%ŕf""ʊ)+-3C4L! C tl\1#9kft熙C,{Nr%L8.#2dI"I&4:EDU9c2b17WKfq(bi$S!5&K8hnF q+p+ X]\cc2 vJK<Њ AYs4( jPiY4(X"ʡ (K= `_ W,%f ,/@ 4,#,EѣTt,(+: %]<J,(+C6B+PV~-(sABsY0Jd RA4-ٯX}m є BP]~.6BJ!*a1b SW1]Lil}JvD-o:B'ǭD-K JȠV*DTԗE L=B(.҃ u)͓BJay"si~GFM,l{O4!!ۂPUF㫭󭷮Y& kAh"@(n!ꄠ?yײg\e[ u.&Vk#@cyj 1Vi ._JQ0`{/8ήj50F{h(vVY~j.Ǡ)w b|45'$/s(yHWO.̃O&uvٕ%ƃ{ &bὄl K~8ɳɷg:Odݠ"&ɼج0ܿp`m05͈괭hufv;n85+}/{!\ʆ/wPRiԍɩ%Ȇ"@t)tSqc fx_).~*u>Xxqqw7P/$&g^PR@6d>RO._^M,X-zݐ T:{vIX7[3&w0ҼO=>4<>Q;Za4$A$Z,i\Mt+[4`wb9bfeԍ$oہ>3kImЕuemMetTݨkp3;XV\^-D=ȲȒ6h Tvmv^B)E:Qh2`@^#ӝNymVB76amD MD:Qy7)L멼+vEL-ePRQ(ɗ-TFXJ ˶0a6*,Jr rdV#_Jӈ?Q9%*p֢@7gi:/sd 4gܛQ*(F'P?zzېJPeQhR]uE6+NtG63j] cZ½m9|5Y|kƖi@%@ۊ7v/_Umjo6O&i3NXq;G%E(ŕu2Dץ _bդ.RRfX-lFaFw.ތ(c|nj۶#bh<]e*[PjX稶6Ҿ[u(`KfP6ߟIf,ӭ;8uI0dd8W"e[:K mJjkZ*Y 8{=?|sl݇a9]F-8RahgEEs E} ]Vq ΥKv8Upn͐-2:X]# `Q?T,Y.Q|X!ΉTƗ躼+GDeDB~ө0/4EK} =I?a%xRۿ"K_>=iY +V,(•BӝZ [63Y蓓G>m,i,Q^0X_oGAꦑӍKgļujW;z-wb6qfk8cp;#fVD bCqI9;088D5@>N1@yC9{zXdu8V{ и}bʈ`U;-((U̒}F>;-(R/29ղ3\C>MȽЄH>7xJ=fΦsytZ.*%+rNY3$yQsQCr3GUeߦEgCMS 9⋏7D^s0endstream endobj 81 0 obj << /Subtype /XML /Type /Metadata /Length 1337 >> stream 2016-02-17T15:22:21+01:00 2016-02-17T15:22:21+01:00 David M. Jones CMR17 endstream endobj 82 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 83 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 84 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3240 >> stream xV{PT>z4i%lboILZ1.* xp]vYe,벰P(^HbDc$46i2>:Ӄhv:L?vv|yy}8Dhp%m_a!\\QA8C\\ bK41BQX+X_i ?oXnYbAFz!?.]U.a A\Dڵk 9)T *K2 %,|ukbI' "qD+W_næ+WEďbH$׉b+*xN xb (8XH,""'Y\P*;Nм_)lX Wc S~hCr##ڃ<@0A(OJ& I ,t;tZ:F?ڬe-:hGJ?oLrV-޹Ӷ:5P̡jC ZM5 g_Wzk`dy.2vv=5'`_y!^¨zHԞѻhթ}PUD +v_e7+qsц "4M]FR]ktfnj2}^lcz9@Y\f+4BQ47E7;/lx)^w_"RZAcmT`vwr¿OZ1;ļ5Y ${/@kv+hT(Ak?, BYI4:q˸@"Z֠/Z;5:Fu*M:+)GϥO9ؒ7Q3)2N[s`"딭 lū>Z4LԍſZ6y^V bRڤntN.c]L&Y dhl꾏_< lpRM#A|g6ܩ1WV-T&(#Y5RgT.iڮz&҈`\10yؽ3d?.YHfeP`,ȷyF2dgL^Pm٤exGSh2K٪ydgWT'h|v|[S LXi7,C?82ee(skPffr< sQ9.@KDzz 3Qxɘ2>eU{ۻ\ÌKg9 %8D38 orDqQk'n'?9?vwbIF@5(}>Opg -ŜX^mV'U93dvl%!qvm=CG<æmwh OhZ-t>}GTh`RUCdكD0CAa*d,ahyprp^B*:9/oߋ-6ިdW1T`rV7wv }mѯ!{NJ!WHG'NOr."wUKmi;k%P*r~Q=캯m7 zN1ShOD^gۋ%NEQpџP ޙKk/C;GVeRk`Js%Ha.߽vc^.7޿Exs9x+@lnmMl,P)*`$8Gz"9=.\gMV:Vjon7u9t»6 nCTn SA ٵ򞁚:?4߳Mq׶kʁ/>zuNvK0~ә>q/>Gc:яkfoJ- /gŨz;^❾5#юwfu0.ąҡ)Dj>:;z[Z86#! )ݥCfU(Jb5mlK9?\Ev3ӝ_tsvLO+RU15=|bUvu2 8ZS*&n QF!MT5AzvF(M(0'ݯfOWF h:;ȇ*].b3ؕăoS. Ĺv5kZkOǸ(0jPʲ+/W1kv5nƲj6B35gi v 5K់gGd?g.D{(/[bbmW*hW 1+Z sDGH[1.Tlin4ׂ+ыB_/: P`endstream endobj 85 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 86 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3745 >> stream xW TS־1{QV{zuڂÓ⫵!AR&(2Iv(cBآՖ֡}mRmxxk'o:+$}ηJAD"a^ 6v8Z">;H#aIO3JթNⓘnH%ؤ\DI۞3cǼx6eG21",ZH?Dyݦ KLrDb^^/*^ɪUa aPؘD0ӽ/6zGRbXG@lhX| 0b^X Y- ty؊TDF6} 2+f-̬g?f#3yYx17,b33%L/2&a3ÙS όf&R'&"X%ݔΒHrpz" ֓-r&V7g yHѐ\3]/ Z&q3}Ć';,EԸ8]l%%R v?IDt8HF8+!TN>WVçp}uU,2WϜ?fN+? az߲.>+myWtvy* }}ӏ/]&CMrW:s}YK.h= BEHwǣd kduI'<'wdt`Pr6i ޽_l叝:SGdTGlb(&b.ܝʅv*[; ~YM%^| p j1uWDCKT*嫡8-O iB&37_[\4 pXRc>ߖWdzǃ{A*b~'pj$ ˦@ny*joD U~,CSq*yqmp;0Ը Bpf(ҫ/ud8F+{hՂ!b'^yP{l3:ـ\hNY&]cq. N%]!@!VSoqRMF]hꃞ8voyDggõZU};\ą8 hP Y;ܔbȷ{5j83zBš|qea 1t9Țބt KGXlv~.KA:œ=Eمy% ZMN3Ev'jHx|Ԣ\ ҂ƪQݤ”nBcq&lR3m#D!QikdppjssunRfj.ʷd:HKśm'jA!39v˗_Ib;=2?`36\A[ KڳSic+++j:֝ؓi̪J0)C=F ]bWX5dC{&r1b T 3{gm׳l,˃ҩa#.yci74ZNڶrn.K3*'lCi^khX 5*଎CY /CbKl=VPA;R$ W7+5T 8jCon+V[I=k<N'op2[MՇZLUB~3gXNJ?A@IC&pw偞.^r_ ,t_x҉?S=EÖc+:O|ijbpnu$@#61cdv2 [A5 iY;Am;zT~5m7N?Oq<c7㙾:؀ {LI|S;^`xMt=~:ţ.\ >KNxFF-|04^DŽnu)>KSq!Vg#)DPQ[Tik SO9p`6RNU ! Za+ JBT)tL(ͻa"\o+˄ڥ0a+TKq8τ'Oo͛ ?8}}DJnFk>!YOGwq~,{\ ڎldWf9"M< &ۧ6w$@u Gc7q8ΰRA,+Cu:ܯeWru QXX sns#^!je O\n>kt3_n sQ =RА(UXX*d1՟ǼeW=?@q s=.~vK2~E):l]]l"#Btv Y貲xTuΝF$6-?`ĻIeZz_zC,q i 9 Y~ כJRӾw7_Owc E$uVJoOKKp 9QLd&콉〻-]5ܣ:> ۨ)WYDqm)nrcK&xkYI28m2qz@زZMNA^V+'KgQgdo<{(+g¡{TqZ [k@C;`? 2 3s}: oV?'}>y=Cax㾢+UeQZ?ȡb=M,p fE$Jr.N0&A|_-9ĔlU8lb tyokKsi¦]7/)>@Ok?% IF;ҨzɚR~}~p'T'/Ξfml2l2G O)2wī~s($$geS:_r8ނ?zjk|0}Z[0ŅGvSy#ZcB11Jk鳱W}3GU/|[߇DN|gohuhIk֑MB[%0GGl4N fu< B#GᤣM\B¡ pe,ΓS! !:8Muԛ '듫ףBBlQ-ru߹e&ZSR&#Y` ;Ը1:T00endstream endobj 87 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7660 >> stream xz XSDP{CBcw9 %“Dp1q8N0a@nA+"|"țG`^ю#fFD?~|dd8qa>3qWW./OEA͛g~" s\DQAY0lQ%ҥEEXku;oiĸIL2mfˬ #F3flm(jJާQkwuԻ5ZO6P#(j5LͣPVj5F-S bj"ZJMQSTj5ZIMVQQ)[JI7)z({@ R*IzQ}@/eCSoP5`  C-),ZZa@;" =2X {VrM>gyCV̲{c Um[ o:l7!)9z0:A=xJ˒'IHm?d!mCw>=H#buslj2+bA!OGo۠b M#]Y:gfҪsadg@tUi!\ݨV*MK%ge5a"uToz\D^ćP崋 5i<{KdpHVп^>y\ކun0Pa _[ yGJF|ˬhK)[%6IV.QIO=("]jP?ӆioGIӲ*sm#Rt]#tV>Jه\x?H>kX/YoYU/AUh S% 6&2?A/ȏEo쯣QOáؙ!Yhf8Qyp[~8U;vZ um\Qw٦cP5^R)'%x.KG) rC!H('vƴešo7]ޚ24*Le?T6Kڦ[jk=o3؉D߳M*4G$AL.d%@[%㡎3Ux^tL"M{" ]E!0Š-t d 12׻q ~Wx2Aݎ7=f}y߱?Es>3!rU"ӷb{*cʆ?q&CgĶn ģ~VY)eEt#ǀrv2}Nk ėt8]g†l@%ݍn<C#Dl ~oR> P>c ə Vl Y]+QH;0kY/ב򧤴kӚs ̐Q-黈!y-x0 xg`zhҝZl$\Ivƈ Рh6h B4UQ+ʳq`Cmty$T&* MD)" AY 닱1ԺL7+mr{v zXbYć~fuC7#w=W(Ai|S"! .ӗjwpgIRQGfހ͎lbQ* (-*~(h =ME]Q`p* ؆dz~Zm!#mNy>v,g6z̚s(NQJ LDK=)yjuYр!U93}/I̗yfet[Rpz@CU=#cbS'a` LvJHLi^5Ggɷ8Z*? Oct(ȿcVi|qsltG09]$Aψx+$:uC[a+,N ^6cDԟD<_ʂ݆#$< h{:ҹ0 5hEH5#qd#'k.N^J8KԈ8h ;_FMu(U%BsUqnG _\4\%mw\3~̀-B诮"(K[ A^w(~Mv"YYG=t)ϛΡoI<Nu~ؠu۠B$5ůͻU"I]U7])d3PӞo7ͮ=3=WFA/䧠{lNEɁ j"AK?kRE@$)dl{lf(% T9)# <ԁFtyA}f& ='="W?]FA B# h;~Fb8õj Kwƻν/W.]˓2Α'*TΤN/sKVɝz54’.(KX*}4y/ejc?եL}tApX! ̊S ]j>Xz K`Dz(+->#^lʃ&3gh nJ>r(%7 >ƈU'>>m1~ iѽtj6`~-9D epșVhilR bjJuUՒ#yĭ99IM߬XX8gg&pev#1)=v8=fN G?nfdr1&`j!ڏ=26 Ttm$X\N 8vwB|,Y?'lP+TK !t]mO{o[F *Q]ЪtT6@_[˯g bIBL{FOpjB ZQ˘iJ1T[mK-}Yt˷@مmHDQ떫ȟh,MI1i(u^qɏ+4VzUkׁ;x+W .SDJz[UEվ16dždTұ=^(7|-=''"ƗLM_zb Sk^GFjQUCn25]BOU B LhidMd?c /?@ P" ,1q4UbjDL:_ c$W1xkנCyy9z8ԆA[oTH yNCˢVФ??YPUJ4%䙤)Hh_Tk(&ԃuMRH9Q ZM|]3$^`u#}.߻?BA;61d$fȄphAV؍&`QbHw\/Eqج&͙C}'Z.y1d3j(cRG}P+*HUP ,JjU>'Q$ڞ*j|-~!ٴshޖ̅I̠Bl&yװx'bQH6<%c%s^"&kRd%;l"-')#$RiU*aυ^1vd[x v'ieh4\8 | Q>z;8ⷧؠfESfB4"j KLN0&8HW]qᴍ9L DF2PBL\"E>ُ#oK?EqM[yiRh*lk#y]Oۉ04*uEIv~E~`\$91"؃d!*Jt-2`\x))BҸ14jV%KKA"SX[UQX*wwݴR`-Z˰K/ci=A~=v!ncZXErwdȾj%!+a+_w3uu6R=q=j7ڒ?Tى_E4T@^0U~gQxYYEwp' O)s&iߊ/iع` ,{Qr&dFVH>$}ˈc;Qߗ^.`'~Xh 92}w'4DӴ4-Y"9օHCBCCyHRcDŽۓU7\A,~Ӹvt ɩ v$R%pk[&IH8}ϻ"K;x)?NٓR]KYeG6rkO(ΫUɠ#cdZŁZ?ny=ozHWu$%I/7gqeL6e)/sLƑvI<5 Bt]!T3UѺM'O]#W;YՆWUVV֒˛d}F9$h4( 1D(,%]M-G2WY2`&vB#@ԢϡŌ z5uG<2 7(+S\V —RO~~DyNV'vI"ը?єX\ R:hJI|W3玵jM3H+5QʕAD'&ƞG&%Y [dbYlW+xy.{kY̧Hh`G?3yB/>+*CQ%($m?R'#[n_oU%…:lԁayw?WȬ,W$tSU2{NC9ءq9_h%sT^_|oaM.R4ϰGwfZ>t|j+{ʾ#w+,J{u3`5 u(u|s'>#p*?}Ōp> k ?cÅe1nF:lXA@X4i ǻNx ͣGpp{ō喬Fލ:I;N15.8 ǻĹfo#ɌMRΝ`dB|OksǏhݱ=6#z@mgQ0mG6:y}J`o\zTHQ)A*L<`{syVI2X >BGCraF7=;[ [+=C;tCee/7eԋDb~MB_֣>RUӋh,=~hotHhhIH07yZFi)W$&*;_^̜9~HŝG `"ډ;=YxUSyK@exON׏od@ _ab rc4|8DzEὃ˯89yͼu}HihhHܹMN\fKf< OQ{B sWosj_N~t.0'05.\^bSk:0%/w~kjcsgY5QmaM3ߴYvn?TeC2Oㄡl fזËIKNX2M BH/&swp9 Hdʼn; -C6C&8 &9n+o>%.+`;Q9sQKB 7=xC9cZI Ex?/Z>7%why 1ʫِRiLʿn ZAф~Ԛ a?_pcc>NDQYE{-|'Ngd^߸,tm[XrVe ]W7~yZ\ʲhɏ#Nɀ p?l`ɽ<=-3H w GBk:Myڏ~!?Řh P"#!*"DAY!gƀ~hxl;0pVWk il2A|GTB@ Y~=#tR _UBYEEOַ{o$*p\NpӂcW5{>ţٹFcVrudWif߼hB{hiA*Z=Kך\:iB>d:ӤY2,zqO'y;!Ù(0Kʑŧޭw@fX,')0=7WK޲ rz2! O _h##zQۡ?=j+- jrf f6aJoyKYOo~v& ԜQF@::LI`]y\oO7v_TlMKmiԿ <⢹7`Iv| -%ΏlO*R9OeR8D4?4%((/S/\/>=9}\KQ AWendstream endobj 88 0 obj << /Filter /FlateDecode /Length 272 >> stream x]1n0 EwB7dV\%Cd4DgKu_3O᫹\_9mykM/)FRVs/wAM |XP\g||C5㲀<+YOLaW7Fۂx!iqa$t'xQIN5t'1=[E{{Z"<ju!_SgΞ\8{vD,/Hԏu|֊y9ZxJKćendstream endobj 89 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3131 >> 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 90 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 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1709 >> stream xUmL[ܴv՜@ڮ:5BF4M4aZ,p6 }{k\R[1)eIh3ҪIÖۇR"mTkvtttyIH$WX>+@4@С!V;\}ߐ&^F*ȅE8^?O_Թ%! }ÏWd@Z:d;Y:s鈇YnZi Y#Z@Qbxa,݊mX?޼m ;??@mw9v[q\hYp@ZNڕc}& LzpU~FIT=泌^o2D&3(88*dmDi9 0 A]@o8Q"hmzMx<sw"U+@ 4t7 @1BVy$T[ŸNS]#ٮQ}s~z>^AjDsR3B 6"i1)EokxƤ{ ymVD ͽ;51Ýcפ*ԡP4}ϯ1!0(' @ cAB1f϶vM26¯|*>*TT(CqH8;i7i%:Xi:wp&bL*PXpD(K<!Xpx'Qå@8rѴBsW7!|$ Vk F+Q"&ͷy.(|??T{@ce0:TAeI2)܀K'/\hO@!$vdT S5·r> Cr|+xUΈ{#\nQq>c4b ȲuMF(e=]?(oʉjWJOY=E ُRx=ޅw!E{+diE 1_>]KB{xm1ڵui_8Sޠ'Hxcn@il0HtP_z4:P Wr{Ϻ%K=L ZDQA*-HTھo;P3`\eN$iB*C2us}U"(h!`q/ Q8Ʊdc}c^U.u̩c4%ܔM3͚juF*1e{|QÊ ַ8冋A.endstream endobj 92 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2012 >> stream xU PevA0َNiEEZ 9@ .D9厏\"!"VcďTLڴj1II)o:݃:iI;~AWawI~xTRBo\TҞAs$YL&m\+ H _, lT4i)RdT+)ZC!UɴIzVnJ^B^I`DKvȲe,UVi%[Jĝ #R񀔑<4=, ==z=5wQ7BJ&7$RQA4^68 12U|*+JoVWt^^h68=A]KFoνV16g΢v~<9)ބXx>?D" a#cwqCm:p 8:4[材 qjifJ! Bw IDq Yv&pů! !ϱ_k4tT*~"0f`!&1NP?!634) BQD cP #åeEŠef#Ù7VUL⯡48 #T7.9e-d*χV)x\yšC&r(ʭU&% ө4O+nԬKU_,*,F`r8GйPTpXj,7o7TYñ5eN3'|<-ÜT DW Es0'FHI~Tcγ!a36+ڜwlpjXAo7hjvHg9h_F"szW"NZny6(<+%>cƵ[("RSɎq$D"V}L F&AtOr,^)< ku G TJE+ѩ/fK @K=r )6=mշ(~ЄB/"<'h YD,||Te)(,/)-Zc2@"$ؕ~'=$;yC^d2OUzCHV'f H43PӅzRT40=aQ$PI-ܮ!86AŸ[C[szޞyqwppIJP,3ܝuT4 1c[JUjj[eLLQr;;l Q̷_{{vw,WTsIv&am;,<.IuqB|͕K~Կݜ0?S9# 6 Hmx/״p-h`2G姻S`uW ^(tsʟm-7gr)I[<<]]ytOn!|rE^DO(ԁ^fg\c._1hֲ]䘽ԅ=`Fok؀}1 YEmhBd1o\ADn"~2OM}MMِ'[ Z S~X7 / f"G>MNT@!hAW]Yg8TvnkZh{QsAkCM6fG#ukv.YZ;f#0>endstream endobj 93 0 obj << /Filter /FlateDecode /Length 168 >> stream x]1 EwN nƈ%]2^1!Co@-zp\Ren7&$>> 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 95 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 96 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 98 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 269 >> stream xcd`ab`ddds 4T~H3a!<<, w }=D19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU;ML:)槤10002&FF|¾g.3%t/]Z]-pIly?헰Vξk?<<@S%\%endstream endobj 99 0 obj << /Filter /FlateDecode /Length 6775 >> 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`;l#EX ڃH9Zy0M-f()þ $Y!Y נ GfUhyhd#Xx3H*h_=&΀`ᓩ]r¬̮Lh9˂]\`p\v ]$4\:~e'DʳN:Tf{r gB-a28s"6[F:Xg$%qr`"\_g|)@59i:w50KU =ŨLrn]dQ4, #Hk2xnV\pK & L6ogD2f4x>#,nag5X'Jª"g8 ·8ӎZ%PvU =~r+^S*_ [M_owQizD)\Y_1̇+?Իn FwQ6oQKҜ$םdк(#+^:>-&X^]bgfK(-Bk(M pQIR㥝؝cաN9։1 )iɧ&"Θ4wsJf *o>psUp?S j%*Bi0^ FJ~ `(KAߝv)Ny(v1RfiI9ҍ之K c:^5[ +b ]UZxOTlrJ>\Vq I1z~& Iʯ;|>(Q n(%<2V\q\ݢ]ZWTbl~Ѭ`NޒwfӎJY.sv%ȓXb6mҬy*K>13i=i N{UcJ+FlI<boQΰr-L,buql^vK(dy'%a U$==V!;zA%o 5K"̞_ #"DCgi T9} Z1:̓);Zg(pG-3ֳQ~rsO27{C*+̩8v:4ZF/W}da(E1:&\F8;y5 %&X}$wj  jTdJ1BKyzKâY %@=gf>X̊9dZxFT#sc囟W,.3nBl~MSmw0=ysS|iʛ닧,!n ‹%TZ{vSx獈Q~c(U+md^t'a >8yp"oACYK[F Wk/d3N 'zt Fha lˋ/\^TW'.a?Q5fn5',ok~A2p >Ĉ(^ibnHI0m\Do{C: "K(R)I[Ng 81{np;N풔7D4rrYX*,YU7=k>S7su%8 OS1K'¦RXJnоM ܚv,B](> ͽeR;<N7>*:.M6@F Nxì`%RC$Mi zFKVe vE?_GU;, m9Ե)a0)ǀ+0xf܀ }ȭua|(\̑Ҥdux]1.#|-&ZQ5~Hw}2ETtgJJ&X>2Ẇ_&TD*s-T$r`VT) ԮT?O3y)ZVҤ~ጻLPURd/W, NeDL>YUY\mʒ[YL@鴖üb 4/kQ(˾{YU0(q<{pDSaz~ݜ-^a7Z҇9E8$F1 .^x,tp":5ԇiź5?E +)I_cSol&dSOza.XNoڃ2*q>:q3z'ƈ*dcrLws./DLrh$O{Us*QK`Sqc)b]CͩlJkʡCiG;_]'/OkJs4<GRM`W?<4VW'Gpj8϶l]"0|WCT&jz~{R)SV3gwj-kc% #c)"s0Z\"GmR(b6TFP@u 2>W-x 3ikMf&ط66*,`!]uys 8KRBݼ`t\6bM[=|Ϫ1ubh½J]*n^ O-tlzSN4I`\'ԼqdП]Mz!v.ظٔ$tU`ZUnKW_}6RM$ th7B8LH/ hO3@_69)2=S3b& }G Χ[:R hBzq2C{ {-n]hJײUo@chg܀u`0@X]<$ SjS$5}3O>c' $jV .pXuP^UN Qu 5qçOl)XrPkݒKT9WӴcRԫeY +80n<]k~[PI}I͉bznT5gG5:<ɬtqńnM7T>c%1! sqpU}tÿ=A!CLn|2W/l\l? 8 Ii*PtI w~8WWL<0- >Br[UF~h?%\B!^Ud<$Ln+`Tήhb_f^"|$X^[Ej H ,/g׻KbnPQעJIּIֽxsRH]7}UlY LјB\YVvfzfe¢B-^6TX#-/I\7]C(1<ƎD*WbC}θe+<#~_6(U)zUpxe/AQ?N"+7eY]V v2DP5} }4/;zrWVk#o:ty:@*Z )H臎l VlZL4q=nܢCڂ,8߹oVǬ,>.qYf"8SO(NN t lGM]qeu`x>sa͚ +H欪d9Гs@Eb22;59\[F0Qc(r xw]sE wg^_x5_89=0 ^]5P< |`C JXӣyjciD[#7+eEd=tNr NmHbwy_3\|F.iX.ԩ ڝ's؃ʥ-M`aW-I_.}2+wYh6`٩ĚjHxPA) =MZjT/6eŎ);SiSW4q Jg rLqө[ 3[>'?x͹_X8P9<s6wtؘViNUͬ ٬@+Cͼg,OSjUSxlי,ہ\VLWb:3QW93Bt@Ѥۖ\c 'BBd>3 4-MpD&JЈ61-7|S-',`Iۉ$]0M@UPx`w|n>+u{҉޽I"9ʇVf LoloYnF2'@k(ӑneXw'MKbT|| {wB7׮)DAsxrN(t= xչ]PoQOѲzqoK{L·:q4P|^(\WW`1y9`)6/;#~]ɮݠ$sa_6)6Z$w\k)Z}XI"3t;H%,e~wCXgQ"ʤʕJ#!*XōR)ӒQ2V#ׅ/{gd*3xG2MwxJ}JDnZ!NT,h\`2rV5 aL?~ʗ1o0to?ZR2U12͵цSYPc,0$cvpŭK,A4/\;;SYR3q߳{RlР^_S؂(*Lژ3v\!`>RVhx"*Lx:K]`hmTXڀLG"6u{]GF9<["VriHyά+lMD >'e:E$}tz'~ snPC3lE8SgSrJg j<:i5X %gc{u뚭VRHl ,YPyIZ$uܝ*YZ6;ު7Gendstream endobj 100 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 101 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 102 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1283 >> stream xumLSWMzo'Yu"ӱ9D, ӭBKkh\(:t|bf1nm*sQcs.v&~tΓ?yIȃ$G'$[<5:jd0TA4 %}5 e,?9m1.!#"3A_h6d9QQ|!'CSNu|QZ3rFzbXpl/#ԦN-j3+FjMVzo& ֠Ngj Al֮ϋ37fBXN$+yD1xH0$b*,rb1H&~r ,J擏oJ:/o8 J&d-|iDv VpT| Ʒg5}[p:Nw3V=z9"[ IuD?Ld85]ϑR,*L)QǾlmfqOٵNG?ٓv9ϝLĦm,qUHs/axVN)Y}DLH-LA 2p1fq!~tFw]5zn_eA%Z&5ّ ( :o|SuCkʡ"8 \ {p {ߙC (wvg95p_׮Ho6V>80?JI,i2ġ(f?TXXs6k69 O 07_ة ]Tm'ttd[AJ~A+T`$i{ R;Z؝ &(bw | Cq|~. ʹH3t)ͱ1ۜxnUh 5[Ux@rիɫFJ`m$QT>g|/3QeHrz+euos;]'C)mVVz\$*7{=ոJln-AB e?L>hv͎9O8Fvvp6KS'mOV7xOuܣ4BabS`;X8ax11[iy)@:a/ߤ9er R|VhIv*<(65@^@%qtz5fpjg(0u"a8}럋 ŕb.!Cȇ"!iuElUvqqwVovʒ&aS(qsTe4FUm8>XIފendstream endobj 103 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 104 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 105 0 obj << /Filter /FlateDecode /Length 163 >> stream x]O10 M@HU0q u4=M20g]/Wv #z|QDP5ice⨃M',+SSY54R> stream xcd`ab`ddd/O,4415H3a!;GՏ?dyyyX'={ #Jgs~AeQfzFBHbrG~jvybIj\ԒĴ|̼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$q3M2|,ʴCbH\Xчf@j#YYn,H9x`oOuUe֗,\ /߾39LWߞiVL8:>/*IIW._zRɮ! dzMH^n<Z/mkֻˍr *c]hg2' +8$ͫc1-w;1Bfqɞ)Qz ܶ= ; 0VV<ΔTP:O dI՟ٺ!`2(*,+y5"ϼIGm#B|LE6FfjqKD"Jq/ 3T {[(7Ϗ4,N!C٢+h#]mcY\磣MliD]B1s8,e@1ePy|pi[vk췛 y-gY0Bb.8+&DQ t ЪL!(KL;KP뤦һJoHx]dQw{c`͎:ȈH H5= p^0H VZ 2u!igd3) N+!{0@ݎ8I*r n!Ձ`(&[9|ִ9iqvAhN)u!03STàLG8Dx_/KبՄ2"/zA%zHC fͭZ24ٹ>41Q9Vj/9N0d!@-Ӵ9}EMZ_7֠[ G-4lm@pbPU2a=zm%O"="[3#@HpBCerENi8j@Hf6hʧ:Ɨ4/vk ˖v ٔe~ӂDPuZ|Ocֹ`&$.b:M% TAnS!>Î)$ɝt4xOo]Ts$yLS!\KPi`KPeZhNY˃`Z8-WHo&-xnR G⢑Wca<~<@tI%= !|; L`>1B$hbDHTdɩkHU*;">{lWzNcDz\SKaD/}c'rU_m@||I>3F$̃e~kM}#P)˭g utS?4ZsOZ8Y{X׵ |!|9 +V"ti_3O9p+F)u]8Ϊ5 6x#6U2F|Lmsz_.dneM`^apW`E"~H2)8,#Z!{D cA弤lB-窜_$z'y?%&%~^IUhf^9+F"N [RNAwe7h Ⱦjd!Ocv}vDpv,\*qo~B۬ CHpJ 0+?5pcƎo)"CĬq@aہr~BI9L/A]s( 盡MAcmʌaw<kk8=,3c8`P]}]Z _r8;:9;CՅo8Hʰ~ggBboYex)"10ap7[ y ٚ`}OxR]6yƜgyeHh:#Thi6D9ƾ TrT5 $5j϶w`<h]h`'߼TgCw% }kʞ2(\t B`\Ooy=;#su-nw9Q3rcX]yTWg>gb{ Y-A՚q:^ܝYs87I,F}IӀDPE܆tZ(x,S&XI:&# Gp)Pc:2Z851>S`R>;}5}jFHl4ɵ#$d߼Dr Hh+w.9ak|nv@]߼CCB& T(z`mwC־ն9ɣG8p΀?W`}Z!/K|Rթbx>x/scNeOV`.!00ϕxΝco&BXҸ]Җ)S&% vJo8c|v𤧒^b1IhY\+j[+#%K a*Z: +VtcQPr,)/u/);y |` tTa`7M@ BԠɚD9M' 9Cٶj 舧:9`9uD#-W+5Q9<|L"웵He?!/ibgGr7f}U}@SuLT)fOgfu+3,@ש֜"Q{d8j:*u2 b۔-R 5sȿ{ծfF&W%ߚJ^D&<&"*W9*sb˛W;kl"'vB0 c-h)h/K<<ؘ_,EwhE`_j%nrΑ[K;@#<āML4d^%VdځiX>Bc5ĢO 8+y!+{-͇M@r4~$/zW}L am?4X4n`Y殎e9qk,Bs{K{{ZrAaGўk/l`t” w>:ݶԲ.[S/edFVv>Th|E[xxUSo6eR?]l4X uFl(W]{żC0]j#_ﯳ4f.#&\C_+{8;ףD`NWqNa5p赲KG}RA ggO-TP̢TN*xH_hsxwT/ޘ]ocKi{7;_3-$?njB,?¼s낳G1S CSBYdyTn%r/ψYmvƌVf(a 3 I(2LwPO]ެU (=lܑ`=1B!W/5=~dbjLjeSKp-u l ZͯWppK3qa+ej8C%5= *23LR ݆H claJ r9[x> A @a-8nסkު)U94>3[E5,pDf񳣂Vc_nTp9*߉Guڷ1U_D`fi|i5֐Ŭ[Y;v# nszXJXmJ}a]mX{̂0NXդnc^ا=NƁ718pMF[A+_C`SIm݃8Niav2]FOM(pQlAIn7f[* ^Etxa3 5Nf+(?71.|TXQ* Q]U=sy؍ QMUԈgk~Ew&؛ s0R* kn Fc7YkC{z-`S褗}.zlgW lQ0Yy}9~arS YR`_ g +}JYa‹!ysI80_x?m !R`"hv`IJ]X^omn1%1ŋ}15~gK+Bc\\a|r>Gi?m\xqbXaE+% |w.%endstream endobj 108 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2711 >> stream xmV TX#no&KE\u-(bUPk `d "D?ȖBԢj=ϫZZmk]^[V -}TgG Hx8VHD;(AT%+=ZdF)LHOI9L{B'Ӑdc%-1}Y-dޏ bx4L$_u"B r`=dyQ`-i $xܰA-)} gV cAk/+Ia-r*ԨHޭcŒa(M xz^Ԍ?ӱ9ڱ~mޛn]5˒+u,Ur=|Q0z4+}~Ǵ1Cb>B 6Q ɪFbIB:6n}w^)CJO͜2P/4.G δ=y\@P4wҦGe6 %U(#|gQA WLBKFmsiA%CJC*E?6lqˁOiJ+Be*M`QCQ"k&: "6lKB,Kj4 u\u($5E^2hn{6Ke;6!jk?6&l]k@T}W㉳ϓÿU,6ѵh' Oɝm t78Z:N}-eCy2!rXRz&Y,Ȫ4 GHQW0k#rG(k)ٜmەQIv=٬6yC?3~ys. NN;|>R(&l2%6sWjovh۩ha{ 6E2MOW , S~HC;ѣ`c@Z/؛g0Ʈ28[C|<|N  pU;a)x<ī/2NC q (\a*L~}5<O Į6Iv 7^ Yiyz8D^@vBdH">p|}F}K,n> m͕{ 3QD ʋ[;J^OɇgY*xwⲶ$h_1TjMFܬk`$x~w>#}o|qYA)Xqt4 ˍPr8JґZSXi([._ݒ J@>@*%C;F=Čſ =_Z o8} g\ӕnlnnfendstream endobj 109 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 223 >> stream xcd`ab`dd v 144qH3a~'#kc7s7Bߙ3``bdr-(-I-ROI-S,H-/000030dGgb&,\{}d-鶴.5߫-s]ͽ+8L8}@Iݓ8&w,U]|~8M0wD\{帘p20 Uendstream endobj 110 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~/Q"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瞚ց0DT{?+? hwyNlZZ&Q̣g_]/b ˨`*E~6U˹<|ϽTR}X7\OqHݖG 1iEP7zJ='=YJ d.pfZ+^Rc/,ҫ)_tm/ιt?@{7D"ܬv9t):u"_^'\! ]Q&m.tv 8S@ H%ywݹI}GG ["d> 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=bhVrH(ٔ::4pK7^?0jSk3mָ/peN튟"/aSQ:!c̠KǴ뢽/`zHnsT g-52$L|z41I&~Sbof~GՒGRF_Lя,j# l _=lz^Z ME9Ƞ{Ywoeiz6"v뵳i-KxKwxBR' }SЃU s-:U*Wuȸ Rg41VDڸM#=/):mb% 2iEUP;Y:#\@5cAFX=͚JeoIaTTۧb7c%Tu\JZV|mS0JΩ}*aLs ELD67#,R'O&K񁞭<剂'R{Uץ8Q&#` ye;qq:=enדrŭW'q7gǫ絉O.qlIeM33huZx]M2#7{5 jSA83 "JHBUڌ&By(vu R hr*Ly~h<Duݜg9.(| SB`_p2@qzEҳ-ofx)H0Pdܐ-ս7cXa1NXg"DBFp1 q@L%+2Hh-KrD2x⩘|ڔ6[krAL`ZA\ l:lHY:FeœhBCUmR=g wG l˳h~&lnm`cяsS$M<|l J)'İR(&>-#gOxK||ɼř[ErcӚgp:ɬ[-KC1'4F.Gpo/_`ThB T=>~WY˷u5wEI6IBI33Ql/s$l|#;Ek5J̷Bh|O^8עyF`.m#ͻuVw~d˷4l^)Kn[3ܻF~|uk 4ܦ'Em3}n y0Gnøo Xs,ZZ<4C&LR*6i6c};eIZrU4!pp+B*C<kbO*rӞ6}邚8p:]bR.r(KL9Rc Y=zܝyXI.g-84HhZw/J8z_yendstream endobj 114 0 obj << /Type /XRef /Length 146 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 115 /ID [<61891023fc776bff118445c0a9edb687>] >> stream xcb&F~0 $8J+?M@6[7(~EHv6"9H R D2FeUIva"H}`r;XDLH)-\`Y"5yVQl/82YH))V6,2 endstream endobj startxref 83564 %%EOF multcomp/inst/doc/generalsiminf.R0000644000175100001440000002125212661101017016615 0ustar hornikusers### 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" vcov.lmrob <- function(object) object$cov library("lme4") data("trees513", package = "multcomp") ################################################### ### code chunk number 3: alpha-data-figure ################################################### getOption("SweaveHooks")[["cex"]]() n <- table(alpha$alength) boxplot(elevel ~ alength, data = alpha, ylab = "Expression Level", xlab = "NACP-REP1 Allele Length", varwidth = TRUE) axis(3, at = 1:3, labels = paste("n = ", n)) rankif <- function(data) trafo(data, numeric_trafo = rank) ################################################### ### code chunk number 4: alpha-aov-tukey ################################################### data("alpha", package = "coin") amod <- aov(elevel ~ alength, data = alpha) amod_glht <- glht(amod, linfct = mcp(alength = "Tukey")) amod_glht$linfct ################################################### ### code chunk number 5: alpha-aov-coefvcov ################################################### coef(amod_glht) vcov(amod_glht) ################################################### ### code chunk number 6: alpha-aov-results ################################################### confint(amod_glht) summary(amod_glht) ################################################### ### code chunk number 7: alpha-aov-tukey-sandwich ################################################### amod_glht_sw <- glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich) summary(amod_glht_sw) ################################################### ### code chunk number 8: alpha-confint-plot ################################################### getOption("SweaveHooks")[["mai4"]]() layout(matrix(1:2, ncol = 2)) ci1 <- confint(glht(amod, linfct = mcp(alength = "Tukey"))) ci2 <- confint(glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich)) plot(ci1, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (ordinary ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) plot(ci2, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (sandwich ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) ################################################### ### code chunk number 9: bodyfat-lm-fit ################################################### data("bodyfat", package = "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.Rnw0000644000175100001440000006776112661101017015536 0ustar hornikusers \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.Rnw0000644000175100001440000014716212661101017017173 0ustar hornikusers%%\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" vcov.lmrob <- function(object) object$cov library("lme4") data("trees513", package = "multcomp") @ \section{Introduction} Multiplicity is an intrinsic problem of any simultaneous inference. If each of $k$, say, null hypotheses is tested at nominal level $\alpha$, the overall type I error rate can be substantially larger than $\alpha$. That is, the probability of at least one erroneous rejection is larger than $% \alpha$ for $k \geq 2$. Common multiple comparison procedures adjust for multiplicity and thus ensure that the overall type I error remains below the pre-specified significance level $\alpha$. Examples of such multiple comparison procedures include Dunnett's many-to-one comparisons, Tukey's all-pairwise comparisons, sequential pairwise contrasts, comparisons with the average, changepoint analyses, dose-response contrasts, etc. These procedures are all well established for classical regression and ANOVA models allowing for covariates and/or factorial treatment structures with i.i.d.~normal errors and constant variance, see \cite{Bretzetal2008} and the references therein. For a general reading on multiple comparison procedures we refer to \cite{HochbergTamhane1987} and \cite{Hsu1996}. In this paper we aim at a unified description of simultaneous inference procedures in parametric models with generally correlated parameter estimates. Each individual null hypothesis is specified through a linear combination of elemental model parameters and we allow for $k$ of such null hypotheses to be tested simultaneously, regardless of the number of elemental model parameters $p$. The general framework described here extends the current canonical theory with respect to the following aspects: (i) model assumptions such as normality and homoscedasticity are relaxed, thus allowing for simultaneous inference in generalized linear models, mixed effects models, survival models, etc.; (ii) arbitrary linear functions of the elemental parameters are allowed, not just contrasts of means in AN(C)OVA models; (iii) computing the reference distribution is feasible for arbitrary designs, especially for unbalanced designs; and (iv) a unified implementation is provided which allows for a fast transition of the theoretical results to the desks of data analysts interested in simultaneous inferences for multiple hypotheses. Accordingly, the paper is organized as follows. Section~\ref{model} defines the general model and obtains the asymptotic or exact distribution of linear functions of elemental model parameters under rather weak conditions. In Section~\ref% {siminf} we describe the framework for simultaneous inference procedures in general parametric models. An overview about important applications of the methodology is given in Section~\ref{applications} followed by a short discussion of the software implementation in Section~\ref{implementation}. Most interesting from a practical point of view is Section~\ref% {illustrations} where we analyze four rather challenging problems with the tools developed in this paper. \section{Model and Parameters} \label{model} In this section we introduce the underlying model assumptions and derive some asymptotic results necessary in the subsequent sections. The results from this section form the basis for the simultaneous inference procedures described in Section~\ref{siminf}. Let $\M((\Z_1, \dots, \Z_n), \theta, \eta)$ denote a semi-parametric statistical model. The set of $n$ observations is described by $(\Z_1, \dots, \Z_n)$. The model contains fixed but unknown elemental parameters $\theta \in \R^p$ and other (random or nuisance) parameters $\eta$. We are primarily interested in the linear functions $\vartheta := \K \theta$ of the parameter vector $\theta$ as specified through the constant matrix $\K \in \R^{k, p}$. %%Assume that we are given an estimate $\hat{\theta}_n \in \R^p$ of the %%vector of elemental parameters $\theta$. In what follows we describe the underlying model assumptions, the limiting distribution of estimates of our parameters of interest $\vartheta$, as well as the corresponding test statistics for hypotheses about $\vartheta$ and their limiting joint distribution. Suppose $\hat{\theta}_n \in \R^p$ is an estimate of $\theta$ and $\Sraw \in \R^{p,p}$ is an estimate of $\cov(\hat{\theta}_n)$ with \begin{eqnarray} \label{cov} a_n \Sraw \cP \Sigmaraw \in \R^{p,p} \end{eqnarray} for some positive, nondecreasing sequence $a_n$. Furthermore, we assume that a multivariate central limit theorem holds, i.e., \begin{eqnarray} \label{clt} a_n^{1/2} (\hat{\theta}_n - \theta) \cL \N_p(0, \Sigmaraw). \end{eqnarray} If both (\ref{cov}) and (\ref{clt}) are fulfilled we write $\hat{\theta}_n \an \N_p(\theta, \Sraw)$. Then, by Theorem 3.3.A in \cite{Serfling1980}, the linear function $\hat{\vartheta}_n = \K \hat{\theta}_n$, i.e., an estimate of our parameters of interest, also follows an approximate multivariate normal distribution \begin{eqnarray*} \hat{\vartheta}_n = \K \hat{\theta}_n \an \N_k(\vartheta, \SK) \end{eqnarray*} with covariance matrix $\SK := \K \Sraw \K^\top$ for any fixed matrix $\K \in \R^{k,p}$. Thus we need not to distinguish between elemental parameters $\theta$ or derived parameters $\vartheta = \K \theta$ that are of interest to the researcher. %%for example the parameters $\K \theta$ representing %%all pairwise comparisons of elemental parameters. Instead we simply assume for the moment that we have (in analogy to (\ref{cov}) and (\ref{clt})) \begin{eqnarray} \label{assume} \hat{\vartheta}_n \an \N_k(\vartheta, \SK) \text{ with } a_n \SK \cP \SigmaK := \K \Sigma \K^\top \in \R^{k,k} \end{eqnarray} and that the $k$ parameters in $\vartheta$ are themselves the parameters of interest to the researcher. It is assumed that the diagonal elements of the covariance matrix are positive, i.e., $\SigmaK_{jj} > 0$ for $j = 1, \dots, k$. Then, the standardized estimator $\hat{\vartheta}_n$ is again asymptotically normally distributed \begin{eqnarray} \label{test} \T_n := %% \frac{\hat{\vartheta}_n - \vartheta}{\sqrt{\diag(\SK)}} = \D_n^{-1/2} (\hat{\vartheta}_n - \vartheta) \an \N_k(0, \Cor_n) \end{eqnarray} where $\D_n = \diag(\SK)$ is the diagonal matrix given by the diagonal elements of $\SK$ and \begin{eqnarray*} \Cor_n = \D_n^{-1/2} \SK \D_n^{-1/2} \in \R^{k,k} \end{eqnarray*} is the correlation matrix of the $k$-dimensional statistic $\T_n$. To demonstrate (\ref{test}), note that with (\ref{assume}) we have $a_n \SK \cP \SigmaK$ and $a_n \D_n \cP \diag(\SigmaK)$. Define the sequence $\tilde{a}_n$ needed to establish $\tilde{a}$-convergence in (\ref{test}) by $\tilde{a}_n \equiv 1$. Then we have \begin{eqnarray*} \tilde{a}_n \Cor_n & = & \D_n^{-1/2} \SK \D_n^{-1/2} \\ & = & (a_n \D_n)^{-1/2} (a_n \SK) (a_n \D_n)^{-1/2} \\ & \cP & \diag(\SigmaK)^{-1/2} \, \SigmaK \, \diag(\SigmaK)^{-1/2} =: \Cor \in \R^{k,k} \end{eqnarray*} where the convergence in probability to a constant follows from Slutzky's Theorem \citep[Theorem 1.5.4,][]{Serfling1980} and therefore (\ref{test}) holds. To finish note that \begin{eqnarray*} \T_n = \D_n^{-1/2} (\hat{\vartheta}_n - \vartheta) = (a_n \D_n)^{-1/2} a_n^{1/2} (\hat{\vartheta}_n - \vartheta) \cL \N_k(0, \Cor). \end{eqnarray*} For the purposes of multiple comparisons, we need convergence of multivariate probabilities calculated for the vector $\T_n$ when $\T_n$ is assumed normally distributed with $\Cor_n$ treated as if it were the true correlation matrix. However, such probabilities $\Prob(\max(|\T_n| \le t)$ are continuous functions of $\Cor_n$ (and a critical value $t$) which converge by $\Cor_n \cP \Cor$ as a consequence of Theorem 1.7 in \cite{Serfling1980}. In cases where $\T_n$ is assumed multivariate $t$ distributed with $\Cor_n$ treated as the estimated correlation matrix, we have similar convergence as the degrees of freedom approach infinity. Since we only assume that the parameter estimates are asymptotically normally distributed with a consistent estimate of the associated covariance matrix being available, our framework covers a large class of statistical models, including linear regression and ANOVA models, generalized linear models, linear mixed effects models, the Cox model, robust linear models, etc. Standard software packages can be used to fit such models and obtain the estimates $\hat{\theta}_n$ and $\Sraw$ which are essentially the only two quantities that are needed for what follows in Section~\ref{siminf}. It should be noted that the elemental parameters $\theta$ are not necessarily means or differences of means in AN(C)OVA models. Also, we do not restrict our attention to contrasts of such means, but allow for any set of constants leading to the linear functions $\vartheta = \K\theta $ of interest. Specific examples for $\K$ and $\theta $ will be given later in Sections~% \ref{applications} and \ref{illustrations}. \section{Global and Simultaneous Inference} \label{siminf} Based on the results from Section~\ref{model}, we now focus on the derivation of suitable inference procedures. We start considering the general linear hypothesis \citep{Searle1971} formulated in terms of our parameters of interest $\vartheta$ \begin{eqnarray*} H_0: \vartheta := \K \theta = \m. \end{eqnarray*} Under the conditions of $H_0$ it follows from Section~\ref{model} that \begin{eqnarray*} \T_n = \D_n^{-1/2} (\hat{\vartheta}_n - \m) \an \N_k(0, \Cor_n). \end{eqnarray*} This approximating distribution will now be used as the reference distribution when constructing the inference procedures. The global hypothesis $H_0$ can be tested using standard global tests, such as the $F$- or the $\chi^2$-test. An alternative approach is to use maximum tests, as explained in Subsection~% \ref{global}. Note that a small global $p$-value (obtained from one of these procedures) leading to a rejection of $H_0$ does not give further indication about the nature of the significant result. Therefore, one is often interested in the individual null hypotheses \begin{eqnarray*} H_0^j: \vartheta_j = \m_j. \end{eqnarray*} %%(Note that $H_0 = \bigcap_{j = 1}^k H_0^j$.) Testing the hypotheses set $% \{H_0^1, \ldots, H_0^k\}$ simultaneously thus requires the individual assessments while maintaining the familywise error rate, as discussed in Subsection~\ref{simtest} At this point it is worth considering two special cases. A stronger assumption than asymptotic normality of $\hat{\theta}_n$ in (\ref{clt}) is exact normality, i.e., $\hat{\theta}_n \sim \N_p(\theta, \Sigmaraw)$. If the covariance matrix $\Sigmaraw$ is known, it follows by standard arguments that $\T_n \sim \N_k(0, \Cor)$, when $\T_n$ is normalized using fixed, known variances. Otherwise, in the typical situation of linear models with normal i.i.d. errors, $\Sigmaraw = \sigma^2 \A$, where $\sigma^2$ is unknown but $\A$ is fixed and known, the exact distribution of $\T_n$ is a $k$% -dimensional multivariate $t_k(\nu, \Cor)$ distribution with $\nu$ degrees of freedom ($\nu = n - p - 1$ for linear models), see \cite{Tong1990}. \subsection{Global Inference} \label{global} %\paragraph{Global tests.} The $F$- and the $\chi^2$-test are classical approaches to assess the global null hypothesis $H_0$. Standard results \citep[such as Theorem 3.5,][]{Serfling1980} ensure that \begin{eqnarray*} X^2 & = & \T_n^\top \Cor_n^+ \T_n \cL \chi^2(\Rg(\Cor)) \quad \text{when } \hat{\theta}_n \an \N_p(\theta, \Sraw) \\ F & = & \frac{\T_n^\top \Cor^+ \T_n}{\Rg(\Cor)} \sim \F(\Rg(\Cor), \nu) \quad \text{% when } \hat{\theta}_n \sim \N_p(\theta, \sigma^2 \A), \end{eqnarray*} where $\Rg(\Cor)$ and $\nu$ are the corresponding degrees of freedom of the $\chi^2$ and $\F$ distribution, respectively. Furthermore, $\Rg(\Cor_n)^+$ denotes the Moore-Penrose inverse of the correlation matrix $\Rg(\Cor)$. Another suitable scalar test statistic for testing the global hypothesis $H_0 $ is to consider the maximum of the individual test statistics $T_{1,n}, \dots, T_{k,n}$ of the multivariate statistic $\T_n = (T_{1,n}, \dots, T_{k,n})$, leading to a max-$t$ type test statistic $\max(|\T_n|)$. The distribution of this statistic under the conditions of $H_0$ can be handled through the $k$-dimensional distribution \begin{eqnarray} \label{maxt} \Prob(\max(|\T_n|) \le t) \cong \int\limits_{-t}^t \cdots \int\limits_{-t}^t \varphi_k(x_1, \dots, x_k; \Cor, \nu) \, dx_1 \cdots dx_k =: g_\nu(\Cor, t) \end{eqnarray} for some $t \in \R$, where $\varphi_k$ is the density function of either the limiting $k$-dimensional multivariate normal (with $\nu = \infty$ and the `$% \approx$' operator) or the exact multivariate $t_k(\nu, \Cor)$-distribution (with $\nu < \infty$ and the `$=$' operator). Since $\Cor$ is usually unknown, we plug-in the consistent estimate $\Cor_n$ as discussed in Section~\ref{model}. The resulting global $p$-value (exact or approximate, depending on context) for $H_0$ is $1 - g_\nu(\Cor_n, \max|\tt|)$ when $\T = \tt$ has been observed. Efficient methods for approximating the above multivariate normal and $t$ integrals are described in \cite{Genz1992,GenzBretz1999,BretzGenzHothorn2001} and \cite% {GenzBretz2002}. %The procedures %are applicable to small and moderate problems with up to $k < 100$ hypotheses. In contrast to the global $F$- or $\chi^2$-test, the max-$t$ test based on the test statistic $\max(|\T_n|)$ also provides information, which of the $k$ individual null hypotheses $% H_0^j, j = 1, \dots, k$ is significant, as well as simultaneous confidence intervals, as shown in the next subsection. \subsection{Simultaneous Inference} \label{simtest} %\paragraph{Simultaneous tests.} We now consider testing the $k$ null hypotheses $H_0^1, \ldots, H_0^k$ individually and require that the familywise error rate, i.e., the probability of falsely rejecting at least one true null hypothesis, is bounded by the nominal significance level $\alpha \in (0, 1)$. In what follows we use adjusted $p$-values to describe the decision rules. Adjusted $% p$-values are defined as the smallest significance level for which one still rejects an individual hypothesis $H_0^j$, given a particular multiple test procedure. In the present context of single-step tests, the (at least asymptotic) adjusted $p$-value for the $j$th individual two-sided hypothesis $H_0^j: \vartheta_j = \m_j, j = 1, \dots, k, $ is given by \begin{eqnarray*} p_j = 1 - g_\nu(\Cor_n, |t_j|), \end{eqnarray*} where $t_1, \dots, t_k$ denote the observed test statistics. By construction, we can reject an individual null hypothesis $H_0^j$, $j= 1, \ldots, k$, whenever the associated adjusted $p$-value is less than or equal to the pre-specified significance level $\alpha$, i.e., $p_j \leq \alpha$. The adjusted $p$-values are calculated from expression~(\ref{maxt}). Similar results also hold for one-sided testing problems. The adjusted $p$-values for one-sided cases are defined analogously, using one-sided multidimensional integrals instead of the two-sided integrals (\ref{maxt}). Again, we refer to \cite{Genz1992,GenzBretz1999,BretzGenzHothorn2001} and \cite{GenzBretz2002} for the numerical details. %\paragraph{Simultaneous confidence intervals.} In addition to a simultaneous test procedure, a (at least approximate) simultaneous $(1 - 2\alpha) \times 100\%$ confidence interval for $\vartheta$ is given by \begin{eqnarray*} \hat{\vartheta}_n \pm q_\alpha \D_n^{1/2} \end{eqnarray*} where $q_\alpha$ is the $1 - \alpha$ quantile of the distribution (asymptotic, if necessary) of $\T_n$. This quantile can be calculated or approximated via (\ref{maxt}), i.e., $q_\alpha$ is chosen such that $g_\nu(\Cor_n, q_\alpha) = 1 - \alpha$. The corresponding one-sided versions are defined analogously. It should be noted that the simultaneous inference procedures described so far belong to the class of single-step procedures, since a common critical value $q_\alpha$ is used for the individual tests. Single-step procedures have the advantage that corresponding simultaneous confidence intervals are easily available, as previously noted. However, single-step procedures can always be improved by stepwise extensions based on the closed test procedure. That is, for a given family of null hypotheses $H_0^1, \dots, H_0^k$, an individual hypothesis $H_0^j$ is rejected only if all intersection hypotheses $H_J = \bigcap_{i \in J} H_0^i$ with $j \in J \subseteq \{1, \dots, k\}$ are rejected \citep{Marcusetal1976}. Such stepwise extensions can thus be applied to any of the methods discussed in this paper, see for example \cite{Westfall1997} and \cite{WestfallTobias2007}. %%In fact, the \Rpackage{multcomp} package %%introduced in Section~\ref{implementation} uses max-$t$ %%type statistics for each intersection hypothesis based on the %%methods from this paper, thus accounting for stochastic %%dependencies. Furthermore, the implementation of \Rpackage{multcomp} %%exploits logical constraints, leading to computationally %%efficient, yet powerful truncated closed test procedures, see %%\cite{Westfall1997} and \cite{WestfallTobias2007}. \section{Applications} \label{applications} The methodological framework described in Sections~\ref{model} and \ref% {siminf} is very general and thus applicable to a wide range of statistical models. Many estimation techniques, such as (restricted) maximum likelihood and M-estimation, provide at least asymptotically normal estimates of the elemental parameters together with consistent estimates of their covariance matrix. In this section we illustrate the generality of the methodology by reviewing some potential applications. Detailed numerical examples are discussed in Section~\ref{illustrations}. In what follows, we assume $\m = 0$ only for the sake of simplicity. The next paragraphs highlight a subjective selection of some special cases of practical importance. \paragraph{Multiple Linear Regression.} In standard regression models the observations $\Z_i$ of subject $i=1, \ldots, n$ consist of a response variable $Y_i$ and a vector of covariates $% \X_i = (X_{i1}, \dots, X_{iq})$, such that $\Z_i = (Y_i, \X_i)$ and $p = q + 1$. The response is modelled by a linear combination of the covariates with normal error $\varepsilon_i$ and constant variance $\sigma^2$, \begin{eqnarray*} Y_i = \beta_0 + \sum_{j = 1}^q \beta_j X_{ij} + \sigma \varepsilon_i, \end{eqnarray*} where $\varepsilon = (\varepsilon_1, \dots, \varepsilon_n)^\top \sim \N_n(0, \mathbf{I}_n).$ The elemental parameter vector is $\theta = (\beta_0, \beta_1, \dots, \beta_q)$, which is usually estimated by \begin{eqnarray*} \hat{\theta}_n = \left(\X^\top\X\right)^{-1} \X^\top \Y \sim \N% _{q+1}\left(\theta, \sigma^2 \left(\X^\top\X\right)^{-1}\right), \end{eqnarray*} where $\Y = (Y_1, \dots, Y_n)$ denotes the response vector and $\X = (1, (X_{ij}))_{ij}$ denotes the design matrix, $i = 1, \dots, n, j = 1, \dots, q$. Thus, for every matrix $\K \in \R^{k,q+1}$ of constants determining the experimental questions of interest we have \begin{eqnarray*} \hat{\vartheta}_n = \K \hat{\theta}_n \sim \N_k(\K \theta, \sigma^2 \K \left(\X^\top\X% \right)^{-1} \K^\top). \end{eqnarray*} Under the null hypothesis $\vartheta = 0$ the standardized test statistic follows a multivariate $t$ distribution \begin{eqnarray*} \T_n = \D_n^{-1/2} \hat{\vartheta}_n \sim t_{q+1}(n - q, \Cor), \end{eqnarray*} where $\D_n = \hat{\sigma}^2 \diag(\K \left(\X^\top\X \right)^{-1} \K^\top)$ is the diagonal matrix of the estimated variances of $\K \hat{\theta}$ and $\Cor$ is the correlation matrix as given in Section~\ref{siminf}. The body fat prediction example presented in Subsection \ref{bodyfat} illustrates the application of simultaneous inference procedures in the context of variable selection in linear regression models. \paragraph{One-way ANOVA.} Consider a one-way ANOVA model for a factor measured at $q$ levels with a continuous response \begin{eqnarray} \label{one-way} Y_{ij} = \mu + \gamma_{j} + \varepsilon_{ij} \end{eqnarray} and independent normal errors $\varepsilon_{ij} \sim \N_1(0, \sigma^2), j = 1, \dots, q, i = 1, \dots, n_j$. Note that the model description in (\ref% {one-way}) is overparameterized. A standard approach is to consider a suitable re-parametrization. The so-called "treatment contrast" vector $% \theta = (\mu, \gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \dots, \gamma_q - \gamma_1)$ is, for example, the default re-parametrization used as elemental parameters in the \RR-system for statistical computing \citep{rcore2007}. Many classical multiple comparison procedures can be embedded into this framework, including Dunnett's many-to-one comparisons and Tukey's all-pairwise comparisons. For Dunnett's procedure, the differences $% \gamma_j - \gamma_1$ are tested for all $j=2, \ldots, q$, where $\gamma_1$ denotes the mean treatment effect of a control group. In the notation from Section~\ref{model} we thus have \begin{eqnarray*} \K_\text{Dunnett} = (0, \diag(q)) \end{eqnarray*} resulting in the parameters of interest \begin{eqnarray*} \vartheta_\text{Dunnett} = \K_\text{Dunnett} \theta = (\gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \dots, \gamma_q - \gamma_1) \end{eqnarray*} of interest. For Tukey's procedure, the interest is in all-pairwise comparisons of the parameters $\gamma_1, \dots, \gamma_q$. For $q = 3$, for example, we have \begin{eqnarray*} \K_\text{Tukey} = \left( \begin{array}{rrr} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & -1% \end{array} \right) \end{eqnarray*} with parameters of interest \begin{eqnarray*} \vartheta_\text{Tukey} = \K_\text{Tukey} \theta = (\gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \gamma_2 - \gamma_3). \end{eqnarray*} Many further multiple comparison procedures have been investigated in the past, which all fit into this framework. We refer to \cite{BretzGenzHothorn2001} for a related comprehensive list. Note that under the standard ANOVA assumptions of i.i.d.~normal errors with constant variance the vector of test statistics $\T_n$ follows a multivariate $t$ distribution. Thus, related simultaneous tests and confidence intervals do not rely on asymptotics and can be computed analytically instead, as shown in Section~\ref{siminf}. To illustrate simultaneous inference procedures in one-way ANOVA models, we consider all pairwise comparisons of expression levels for various genetic conditions of alcoholism in Subsection~\ref{alpha}. \paragraph{Further parametric models.} In \emph{generalized linear models}, the exact distribution of the parameter estimates is usually unknown and thus the asymptotic normal distribution is the basis for all inference procedures. When we are interested in inference about model parameters corresponding to levels of a certain factor, the same multiple comparison procedures as sketched above are available. \emph{Linear and non-linear} mixed effects models fitted by restricted maximum-likelihood provide the data analyst with asymptotically normal estimates and a consistent covariance matrix as well so that all assumptions of our framework are met and one can set up simultaneous inference procedures for these models as well. The same is true for the \emph{Cox model} or other parametric survival models such as the \emph{Weibull model}. We use logistic regression models to estimated the probability of suffering from Alzheimer's disease in Subsection~\ref{alzheimer}, compare several risk factors for survival of leukemia patients by means of a Weibull model in Subsection~\ref{AML} and obtain probability estimates of deer browsing for various tree species from mixed models in Subsection~\ref{forest}. \paragraph{Robust simultaneous inference.} Yet another application is to use robust variants of the previously discussed statistical models. One possibility is to consider the use of sandwich estimators $\Sraw$ for the covariance matrix $\cov(\hat{\theta}_n)$ when, for example, the variance homogeneity assumption is violated. An alternative is to apply robust estimation techniques in linear models, for example S-, M- or MM-estimation \citep[see][for example]{RousseeuwLeroy2003, mfluc:Stefanski+Boos:2002, Yohai1987}, which again provide us with asymptotically normal estimates. The reader is referred to Subsection~\ref{bodyfat} for some numerical examples illustrating these ideas. \section{Implementation} \label{implementation} The \Rpackage{multcomp} package \citep{pkg:multcomp} in \RR{} \citep{rcore2007} provides a general implementation of the framework for simultaneous inference in semi-parametric models described in Sections~\ref{model} and~\ref{siminf}. The numerical examples in Section~\ref{illustrations} will all be analyzed using the \Rpackage{multcomp} package. In this section we briefly introduce the user-interface and refer the reader to the online documentation of the package for the technical details. Estimated model coefficients $\hat{\theta}_n$ and their estimated covariance matrix $% \Sraw$ are accessible in \RR{} via \Rcmd{coef()} and \Rcmd{vcov()} methods available for most statistical models in \RR, such as objects of class \Rclass{lm}, \Rclass{glm}, \Rclass{coxph}, \Rclass{nlme}, \Rclass{mer} or % \Rclass{survreg}. Having this information at hand, the \Rcmd{glht()} function sets up the \underline{g}eneral \underline{l}inear \underline{h}ypo\underline{t}% hesis for a model `\Robject{model}' and a representation of the matrix $\K$ (via its \Robject{linfct} argument): \begin{Sinput} glht(model, linfct, alternative = c("two.sided", "less", "greater"), rhs = 0, ...) \end{Sinput} The two remaining arguments \Rarg{alternative} and \Rarg{rhs} define the direction of the alternative (see Section~\ref{siminf}) and $\m$, respectively. The matrix $\K$ can be described in three different ways: \begin{itemize} \item by a matrix with \Rcmd{length(coef(model))} columns, or \item by an expression or character vector giving a symbolic description of the linear functions of interest, or \item by an object of class \Rclass{mcp} (for \underline{m}ultiple \underline{c}omparison \underline{p}rocedure). \end{itemize} The last alternative is convenient when contrasts of factor levels are to be compared and the model contrasts used to define the design matrix of the model have to be taken into account. The \Rcmd{mcp()} function takes the name of the factor to be tested as an argument as well as a character defining the type of comparisons as its value. For example, \Rcmd{mcp(treat = "Tukey")} sets up a matrix $\K$ for Tukey's all-pairwise comparisons among the levels of the factor \Robject{treat}, which has to appear on right hand side of the model formula of \Robject{model}. In this particular case, we need to assume that \Rcmd{model.frame()} and \Rcmd{model.matrix()} methods for \Robject{model} are available as well. The \Rcmd{mcp()} function must be used with care when defining parameters of interest in two-way ANOVA or ANCOVA models. Here, the definition of treatment differences (such as Tukey's all-pair comparisons or Dunnett's comparison with a control) might be problem-specific. For example, in an ANCOVA model (here without intercept term) \begin{eqnarray*} Y_{ij} = \gamma_j + \beta_j X_i + \varepsilon_{ij}; \quad j = 1, \dots, q, i = 1, \dots, n_j \end{eqnarray*} the parameters of interest might be $\gamma_j - \gamma_1 + \beta_j x - \beta_1 x$ for some value $x$ of the continuous covariate $X$ rather than the comparisons with a control $\gamma_j - \gamma_1$ that would be computed by \Rcmd{mcp()} with \Rcmd{"Dunnett"} option. The same problem occurs when interaction terms are present in a two-way ANOVA model, where the hypotheses might depend on the sample sizes. Because it is impossible to determine the parameters of interest automatically in this case, \Rcmd{mcp()} in \Rpackage{multcomp} will by default generate comparisons for the main effects $\gamma_j$ only, ignoring covariates and interactions. Since version 1.1-2, one can specify to average over interaction terms and covariates using arguments \verb|interaction_average = TRUE| and \verb|covariate_average = TRUE| respectively, whereas versions older than 1.0-0 automatically averaged over interaction terms. We suggest to the users, however, that they write out, manually, the set of contrasts they want. One should do this whenever there is doubt about what the default contrasts measure, which typically happens in models with higher order interaction terms. We refer to \cite{Hsu1996}, Chapter~7, and \cite{Searle1971}, Chapter~7.3, for further discussions and examples on this issue. Objects of class \Rclass{glht} returned by \Rcmd{glht()} include % \Rcmd{coef()} and \Rcmd{vcov()} methods to compute $\hat{\vartheta}_n$ and $% \SK$. Furthermore, a \Rcmd{summary()} method is available to perform different tests (max $t$, $\chi^2$ and $F$-tests) and $p$-value adjustments, including those taking logical constraints into account \citep{Shaffer1986, Westfall1997}. In addition, the \Rcmd{confint()} method applied to objects of class \Rclass{glht} returns simultaneous confidence intervals and allows for a graphical representation of the results. The numerical accuracy of adjusted $p$-values and simultaneous confidence intervals implemented in % \Rpackage{multcomp} is continuously checked against results reported by \cite% {Westfall1999}. \section{Illustrations} \label{illustrations} \subsection{Genetic Components of Alcoholism} \label{alpha} Various studies have linked alcohol dependence phenotypes to chromosome 4. One candidate gene is \textit{NACP} (non-amyloid component of plaques), coding for alpha synuclein. \cite{Boenscheta2005} found longer alleles of \textit{NACP}-REP1 in alcohol-dependent patients compared with healthy controls and report that the allele lengths show some association with levels of expressed alpha synuclein mRNA in alcohol-dependent subjects (see Figure~\ref{alpha-box}). Allele length is measured as a sum score built from additive dinucleotide repeat length and categorized into three groups: short ($0-4$, $n = 24$), intermediate ($5-9$, $n = 58$), and long ($10-12$, $n = 15$). The data are available from package \Rpackage{coin}. Here, we are interested in comparing the distribution of the expression level of alpha synuclein mRNA in three groups of subjects defined by the allele length. \setkeys{Gin}{width=0.6\textwidth} \begin{figure}[t] \begin{center} <>= n <- table(alpha$alength) boxplot(elevel ~ alength, data = alpha, ylab = "Expression Level", xlab = "NACP-REP1 Allele Length", varwidth = TRUE) axis(3, at = 1:3, labels = paste("n = ", n)) rankif <- function(data) trafo(data, numeric_trafo = rank) @ \caption{\Robject{alpha} data: Distribution of levels of expressed alpha synuclein mRNA in three groups defined by the \textit{NACP}-REP1 allele lengths. \label{alpha-box}} \end{center} \end{figure} Thus, we fit a simple one-way ANOVA model to the data and define $\K$ such that $\K \theta$ contains all three group differences (Tukey's all-pairwise comparisons): <>= data("alpha", package = "coin") amod <- aov(elevel ~ alength, data = alpha) amod_glht <- glht(amod, linfct = mcp(alength = "Tukey")) amod_glht$linfct @ The \Robject{amod\_glht} object now contains information about the estimated linear function $\hat{\vartheta}_n$ and their covariance matrix $\SK$ which can be inspected via the \Rcmd{coef()} and \Rcmd{vcov()} methods: <>= coef(amod_glht) vcov(amod_glht) @ The \Rcmd{summary()} and \Rcmd{confint()} methods can be used to compute a summary statistic including adjusted $p$-values and simultaneous confidence intervals, respectively: <>= confint(amod_glht) summary(amod_glht) @ Because of the variance heterogeneity that can be observed in Figure~\ref{alpha-box}, one might be concerned with the validity of the above results stating that there is no difference between any combination of the three allele lengths. A sandwich estimator $\Sraw$ might be more appropriate in this situation, and the \Rarg{vcov} argument can be used to specify a function to compute some alternative covariance estimator $\Sraw$ as follows: <>= amod_glht_sw <- glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich) summary(amod_glht_sw) @ We used the \Rcmd{sandwich()} function from package \Rpackage{sandwich} \citep{Zeileis2004, Zeileis2006} which provides us with a heteroscedasticity-consistent estimator of the covariance matrix. This result is more in line with previously published findings for this study obtained from non-parametric test procedures such as the Kruskal-Wallis test. A comparison of the simultaneous confidence intervals calculated based on the ordinary and sandwich estimator is given in Figure~\ref{alpha-ci}. \setkeys{Gin}{width=0.95\textwidth} \begin{figure}[h] \begin{center} <>= layout(matrix(1:2, ncol = 2)) ci1 <- confint(glht(amod, linfct = mcp(alength = "Tukey"))) ci2 <- confint(glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich)) plot(ci1, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (ordinary ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) plot(ci2, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (sandwich ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) @ \caption{\Robject{alpha} data: Simultaneous confidence intervals based on the ordinary covariance matrix (left) and a sandwich estimator (right). \label{alpha-ci}} \end{center} \end{figure} %%<>= %%dev.off() %%@ \subsection{Prediction of Total Body Fat} \label{bodyfat} \citet{garcia2005} report on the development of predictive regression equations for body fat content by means of $p = 9$ common anthropometric measurements which were obtained for $n = 71$ healthy German women. In addition, the women's body composition was measured by Dual Energy X-Ray Absorptiometry (DXA). This reference method is very accurate in measuring body fat but finds little applicability in practical environments, mainly because of high costs and the methodological efforts needed. Therefore, a simple regression equation for predicting DXA measurements of body fat is of special interest for the practitioner. Backward-elimination was applied to select important variables from the available anthropometrical measurements and \citet{garcia2005} report a final linear model utilizing hip circumference, knee breadth and a compound covariate which is defined as the sum of log chin skinfold, log triceps skinfold and log subscapular skinfold. Here, we fit the saturated model to the data and use the max-$t$ test over all $t$-statistics to select important variables based on adjusted $p$-values. The linear model including all covariates and the classical unadjusted $p$-values are given by <>= data("bodyfat", package = "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 as well as their interactions with the patient's gender. Tukey's all-pairwise comparisons highlight that there seems to be a difference between `high' scores and both `low' and `intermediate' ones but the latter two aren't distinguishable: <>= smod <- survreg(Surv(time, event) ~ Sex + Age + WBC + LDH + FLT3 + risk, data = clinical) summary(glht(smod, linfct = mcp(risk = "Tukey"))) @ Again, a sandwich estimator of the covariance matrix $\Sraw$ can be plugged-in but the results stay very much the same in this case. %%<>= %%dev.off() %%@ \subsection{Forest Regeneration} \label{forest} In most parts of Germany, the natural or artificial regeneration of forests is difficult due to a high browsing intensity. Young trees suffer from browsing damage, mostly by roe and red deer. In order to estimate the browsing intensity for several tree species, the Bavarian State Ministry of Agriculture and Forestry conducts a survey every three years. Based on the estimated percentage of damaged trees, suggestions for the implementation or modification of deer management plans are made. The survey takes place in all $756$ game management districts (`Hegegemeinschaften') in Bavaria. Here, we focus on the 2006 data of the game management district number 513 `Unterer Aischgrund' (located in Frankonia between Erlangen and H\"ochstadt). The data of \Sexpr{nrow(trees513)} trees include the species and a binary variable indicating whether or not the tree suffers from damage caused by deer browsing. We fit a mixed logistic regression model \citep[using package \Rpackage{lme4},][]{Rnews:Bates:2005,pkg:lme4} without intercept and with random effects accounting for the spatial variation of the trees. For each plot nested within a set of five plots orientated on a 100m transect (the location of the transect is determined by a pre-defined equally spaced lattice of the area under test), a random intercept is included in the model. We are interested in probability estimates and confidence intervals for each tree species. Each of the six fixed parameters of the model corresponds to one species, therefore, $\K = \text{diag}(6)$ is the linear function we are interested in: <>= trees513 <- subset(trees513, !species %in% c("fir", "softwood (other)")) trees513$species <- trees513$species[,drop = TRUE] @ <>= mmod <- lmer(damage ~ species - 1 + (1 | lattice / plot), data = trees513, family = binomial()) K <- diag(length(fixef(mmod))) @ <>= colnames(K) <- rownames(K) <- paste(gsub("species", "", names(fixef(mmod))), " (", table(trees513$species), ")", sep = "") @ Based on $\K$, we first compute simultaneous confidence intervals for $\K \theta$ and transform these into probabilities: <>= ci <- confint(glht(mmod, linfct = K)) ci$confint <- 1 - binomial()$linkinv(ci$confint) ci$confint[,2:3] <- ci$confint[,3:2] @ The result is shown in Figure~\ref{browsing}. Browsing is less frequent in hardwood but especially small oak trees are severely at risk. Consequently, the local authorities increased the number of roe deers to be harvested in the following years. The large confidence interval for ash, maple, elm and lime trees is caused by the small sample size. \setkeys{Gin}{width=0.8\textwidth} \begin{figure}[t] \begin{center} <>= par(mai = par("mai") * c(1, 1.2, 1, 0.8)) plot(ci, xlab = "Probability of Damage Caused by Browsing", xlim = c(0, 1), main = "", ylim = c(0.5, 6.5)) @ \caption{\Robject{trees513} data: Probability of damage caused by roe deer browsing for six tree species. Sample sizes are given in brackets. \label{browsing}} \end{center} \end{figure} \section{Conclusion} Multiple comparisons in linear models have been in use for a long time, see \cite{HochbergTamhane1987}, \cite{Hsu1996}, and \cite{Bretzetal2008}. In this paper we have extended the theory to a broader class of parametric and semi-parametric statistical models, which allows for a unified treatment of multiple comparisons and other simultaneous inference procedures in generalized linear models, mixed models, models for censored data, robust models, etc. In essence, all that is required is a parameter estimate $\hat{\theta}_n$ following an asymptotic multivariate normal distribution, and a consistent estimate of its covariance matrix. Standard software packages can be used to compute these quantities. As shown in this paper, these quantities are sufficient to derive powerful simultaneous inference procedures, which are tailored to the experimental questions under investigation. Therefore, honest decisions based on simultaneous inference procedures maintaining a pre-specified familywise error rate (at least asymptotically) can now be based on almost all classical and modern statistical models. The examples given in Section~\ref{illustrations} illustrate two facts. At first, the presented approach helps to formulate simultaneous inference procedures in situations that were previously hard to deal with and, at second, a flexible open-source implementation offers tools to actually perform such procedures rather easily. With the \Rpackage{multcomp} package, freely available from \url{http://CRAN.R-project.org}, honest simultaneous inference is only two simple \RR{} commands away. The analyses shown in Section~\ref{illustrations} are reproducible via the \Rpackage{multcomp} package vignette ``\Rcmd{generalsiminf}''. \bibliographystyle{plainnat} \bibliography{references} \end{document} multcomp/inst/doc/multcomp-examples.Rnw0000644000175100001440000003210512661101017020012 0ustar hornikusers \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.pdf0000644000175100001440000024507212661101043020025 0ustar hornikusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3523 /Filter /FlateDecode /N 84 /First 691 >> stream x[mS۸~tW BZ(nb!Isd;Lȝ˶t$EL2-bqdf20ex0'LDZ⇉&#a)ńdq*&Feh& ڡeJHwL:BKLkNadF% q6afVHJ5^VO5F210H)0jWV0tbgTIKbK+cN gU$m3g.`U̒*Y'xXPiXMl*, 9$`"EF1 E1"R={5~5وXFG ?A P١` v`!Q^<c*2, 8a ,r0E0$T:^PE} K؂# yP,%ezT-(KqD pjH=ߏ''=v>j/zw/}~xF|`?Lg;7鄔v7+D>N*d!~I8'G颥S)*_-dߢ&]#aV ׊=[>IF ˯o[L$3{<-1S>+1h k^OɪoWp/-8H-^ V-P>ڂ:5)Yv{h&1~YJ.8>8?Fg`V7T$IЇڰ T #iw#]ɵɤױ h`jb,nbׄ7c#yM%m59U|pO-λ Z-:bJ16[UaUkzˠdU#_0! u:?=Vƃ .i#ifɸ8zk0XK6֚5O kG=YTʀF0 LvDv4d1ȔHXtƥ÷ 4 V6! >0:.KiZg6)8#ȷEļl^uGD^VW-죟XTeK"fTht{Ĩ6^1;~{=O)?|U$!U фq0{b ǣRny6}O__ߏ_!śn9YZQ,4QKEw$w~<[_*j}3ɲRxĦBUC_xOTsyC󺪹^ϟ(8?o \a6]U;.&Q[]-zZsxϱRGjZ,i>OtY>d(L$N'jrt״&&鴻:*O+|vQl Uo+zTn[^XzzRzu=21ۗ#py(aHRڹ*8.ί_l*Edm|8u8-[ LP]r ׄJ1@Pa(,X7\v6j;ƶ^@^j3WjS(įRncLZ:{e 'gEo h4HrAP,Fu>RZot$0*$MĢ2!!jMhʇ (h|UtM+jMAQYeQQ2>CIm#_=TgZJ+N`~4+XQND[]n MkƮqwΎ[c|pЫ$Ԡ9j , pg9Cg *~:T !0%}ZW5T>vz,bz,fJZASσʾu7Ц#$Z+p:lGæ#Vq:0-5 %20Q.uP&!SpGDNg[|lR:U~)3Әfeکo;T~ Bz|>mB._cswDi#ޅ±nÏg躳\:^w5W4v.$: fJ+ ɦl[ u]T-(!+DUeYvL=U[jK{U[(Zʤ\tR֖L#xne _.Dn+)q ˮҮ[n Ё9avK6OXW+E(5ql?xyO`SwHK$eEmɵγ<Wx>p6%A79Ke]|UMwvHYKzw |K1ZS PQ:k8p d>A=nUkq! T{d%jP4y=4|0al|WO9Xܶɒ{ϝ߷|$` X.VUF5GxzAiD'ӖHS`:JPOgd̄;D% lirD;?{nȢhױ*;:.X:2Xl\a57ڞ>`>\m:'o\ht5I[їfz, iS[-`qF UvόFp('L%Wjz1\|ɋwxt;o>mc}Fw gMK]e\bOဩUxhR(UFf~/Ӏ1f`UN*;cTV*fh&ioɼr3t8wP?e6Z. gkﺩ"8BCzϗ{]u Q+ү+g>#l ҶБ1mUnX{r3vԝY鮵1e1pjCTILKzY:7nt66Ɗ9m l=aoԖzOE\].3 y䒃tf܋۹qv?f^E3TUt6ϡ\o0M> stream 2016-02-17T15:22:25+01:00 2016-02-17T15:22:25+01:00 David M. Jones CMR17 endstream endobj 87 0 obj << /Filter /FlateDecode /Length 2887 >> stream xZ[o\~}{ŨF+ $;6Pw!ggeM^ ?h%sw 1ʅwD,.Oޝ9.p BQIk'y\ȨGI;ۓ˕΄aVH-a8 H#z"F兇q10a18uZ)u? 1чQz bn@RE5e)H3$-pфhvE,1L۽㲚HM3R7J;VIQEYr*~h c2KqS 6))LRE æmx\ie=;!tpe opd'`#QJz$ePn*xkn5oԵ>Ahg8`fFJ25,rR.Vڌ*ؘ07R$_F਎fXO6FN%$#Ɔ@bb%.Q -kR:u= 'TT&C"B%C J)֛dco3g6,e)} 򀀇+k=\"2Jil 6?G'`AB g#8~<$zsѝTMJ)M` _:="WNeZ1)wmaN%A,HNYT/ ]@A )sxH7P V` 1VIe>D MckPRǑjM*^.%f3jvm֕]*e%^jܛI<,T b$%S c 53j2Kj" MP!bG+7(q&X\?@(e`zX@ )U1I eBO)nDжU-BA Rۓ/O; Ce pDmSك]FdyBYlf|E&S@E4r(@LE{U>]XT޼ 6rg J ޔ{lyDt~`_l1@Dox =: enr_7=,VʐO:`񇥵X=v vu=9~dM[lrEES>WΊ;:m9.e2GX2T,p^[l ;!$!niz*S"~aފؕ̈́#춿ɵ!|mmM+I%5àbDwROX GD~ PA NZM.+uVun+uP SwZ}_l0-0ՉyƬeadJ4]|?U>DC fIi3"H^̉IԞQ|HS߆ 0IZNU68ŅvtpҙUW;?U9 ~לA#^1Và pH7+feaؘ(ʥ*b(GX?bn/ATFf w~b|llM.$daMȃt1K<8y87PC0#j.fwmj|t%kyM Iki]SCC'N>4: bhj􆁖K&vۯ VfZ BqZD4juH-y8h=rG G|:)*IZ#>0{fnk1QO·ENl|vmmNMKF zmx/g`s{Ps 3YKw펹ӤIdrx0R#&z5m;/!Ԅ/tyiip}&F l>D|=Z|.XSrkgƜ#wry/圏S]2o h9ޢ :ܘqbZKٗz }My{ҭܝ F}ׯʗY:wuT ;/ [6& w]˖m^wgM=jxm@Kgf7:S ;1؆| LcocR{]i~L$mL.u;]=o:^Mc6w݄ -&Ic@Ju rw 8o/dt\Ix˖/}ٞv~!=}?:;߰zM>ꖘƅ) 1] m ]˥CvP,jQuS>hKe0,9p7˜]T9;>xE>K)cGpnV}bGKXyI5εV:DoJ=uѡZr/F_t+Vlk,`>Lce6dVYBkH4^[ U>"`̽6\+Pܻ'n}d.u\,Oܬ]X$0h#Ю )3]q36^&t jM+}s4!N)?vVu*Ƈ"D:}?D&Aţ &N*E}zb`-͇\BB |YfV|Gwz rɋӓ߿Q endstream endobj 88 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 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2219 >> stream xUkPWv Ү{u|b@0(*8 033<, (Fy aPQ@EsFMZ={ TluWWwս_swGC$IR!3}&O2@7pƌFjZ;:13@M)c~>r3(<8JHK*MtB* V~8}zrr򴨄ir<9N+Q$*tI^**A!<ܴg&Ak+t`VNMĻjni~!jK"6tL߹~> )x%ob- ‰ b1M!H#Jd!UCCguw+䔅F瘥y,<6DO^+WS߬nXS@1/+}Ia 75}xW8 t @ԛ,+ӡG^\nszAn#!kD_؇df"%fDaϞl DT;KMΣ*B+Imڴ b!xF͆M) ~1 WW~+CQ__[!7|7humFQШuFUOO"'Nh H=-k KHyk ju+1&c꬏5-<>5@rP)ZtC(4؋<ıF8F@2tOڠbũ +Wf@XYs`3e}ɶe0 Vl8˱%b0cO:K ,*7@0o,M{ E7,r"fxzI  _"Z NbPʝ`I~h,?}e[9C(ں Tq.k vߓOW졼[CDDAY$lP_YLxdC{$'IrI蜸}9K>>qC@OɗShec|Sp@j+03iė NOh}MOjJjQ@=] ;#'mmGx#?X,Vwˎv.c(05Cp dGoi9ơ{[(MIfr%ήژ/AgEc>DzЍ8Ƃ {*Z 4NǡˍQJ>YZa{pGߪ!$HOH荾f؁h9 ̰fPTDi12ow9e|AppPH[Bl9e*?df/0dH*"Q؀RRw$ՊC1϶w^^fAZ; L2q X")YH<)H@Duav,sv\L$'Zi-F3ٜ3b/K68Xсi*&Dk.>E їd./ׇl3*'PȷJ*:0YA tysJ5l})q+J@>kIe~U;HJw0Ғ K3 }[ԄjX 2&`J%]O솯[8r38fA-nH.]yꩦҠ8)  GR𐠔؁&1& X,\v}D`t-tzF+M8j>=4 BTѳLR~ dS@&2 5~+3D S C>H~~\2+i1&Yw +)vMrMZ^`v/>7|QJG$DȄqud}s_F,*D#zZZ2\*RUU݊S:X=!"|ƢPc| ՙNm3BL\W!ADBA#zjͽwK$4;cTx2ye{ @ nt|D2]WTêHd2Y{9u:Ű]k74V)*(,` i+yc5C]]Pwќt )-pZ7lwJlLendstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7153 >> stream xy XSJ<N:Tc-:YQq' $YIdB p*uZkV֪ZVnz䜳z׻}U/J X3ewa~x/~ k_;SY>w[~ T1H Ȕazs8sɓDlqXE rp0vTTG=#8rRh'&8DowXaahHJ`& FD8(jܐy-XXdh^+W8_9`mຠ'O:mf~1cm7aI}m(mʉE>FSw535ZKQ=j#5Dͧ&R$j >L-P%4j)5ZF͠SP+JCj.5`ޢPv=5F%QP>,*O}BPAA_j eECłR { KVV6ȕ~fN7M8qݠr[}P ?d}ʷ'vvm}ga_7FM9d$_*9+%r8>(L#ds۝BeN<ăBnJXbJ>MCY:oa֪A4(!>¸ I{ >8jSn 1G`="k|KE6|y6|.@cWЮ2XLԨ>jnڋep@ӿ_>q\5NnPb3 wԔX[ =t##eAܴ΍ zh$Щ("ݠi@/< %S÷oⷸ^AUkS>""du\9 TVO&-^qĆW duK ǃcCQ~Ebc*F3{X-Iݫa5I]B6c|(@?l/21AJ/UjMDDIr vx <-4e_a<i?<تИn(\YI8ŏ;~Q2^ M SZOy{%hm+5vN4ڞx6F@X>SJ4W$AL$@CťQXJq7:":Іgd$VHrdm۴{`/~ < ;z#" //[Cďѧ|?Gq9G&CM5etE盧} EODx6xEK-.fQ$]wP`qfѵI+@ :pwxSac6aTz,ġhZ)xkBԧpQzdU;gl'akVKHWuG>} xŋHRgqm繏a-Wݮh3sM4Ͻr4p Ut23 2CA}}P;'6'pHu4Zk@ BF,뺭xFuVz6JK^*7e,͡s inLPn`>"zVq33f;c (Te& b%؎,h@SV〪0>7Gw%Hs=rI s_\xjhcu+kJS$5BV7s+!9SdHPzB0gIhT"W^+&Nf@ct(Ԉ> ~h.?ExZ!R9;`?:xtydZp(Y#m4qOw&M5(W%>gt'DUηD_Uh4g'Lbԁ*R2nSh4:Hs!yMFeѼ렘*0M1'`mY")~m ,7ꎬL!Ņ|x/s8=KasjB~:,wAMw2DUgiͪ(eFkPBc_HV9+ MLya]v& !sgfaET YۍVdh,&Epʏ(U nKt{޳+KԹd n-sdE7ʅ41D IDs}-al{laca),) K !ઉդǒLOwڍE* Y#DQ U3(913pK/ ÂCWY8 @dJԦpdgL#BZQqFyʃz۶k[ >|fzxSqɉgzu\q C.4^f{JeI.LW]ްU-i7z%Kh4O9&q^aL>vTa=hB,.xD=ᭊ4kN0i8Ж`t͏#}c^; QBT6@! }T'*XUP *LYjUngZLKCt ?' WmV@l[H\$]sh +<-R.DIgl4a700o N΢z^ O=&Ǽ? }1xLHXIOQS)6׮4ˤ՝3dp{.AX#SROӱ'@d-Eiȕ?ПP*@~}.ex%6蔹٢sdu]!gCŐV%g&AU]SWjmXGrt_+{dfEzўjt4'Cυ(]dlꇨ:'~3`m<_ xuF4-{ %A,w\ 7k!L)i*|ll#=am9S.y}Ưd)/wI#T>"%Y{Ha#*Baapc(R9Duy+ocgClN-y~4*9_\:p洑w=Lq$R#~X+ַ"8jR奂gHs1i9jM~jqy{Dz+%_Kn$3=:E'>Ҍ׃K/ke k;MƁvM,= ùL]0ձ 'BO^={>IVuU!!!!UuuUUud%;V͂&ʽr Il`)Q"4eyʊ AC8 漂Dgp&.#\WBSA
(]NLJAUDd>5OƇ7dfݹrx}{ȒW^E _$ܗ䩃A*2 ²RȬ,Wwy|*SM] "3;5{NB?Òx/SiBfz/rӦhwONf!rG]ٖ-(Ͻ:u襨r9RT*`PY͹Ter3e}\5T;􂽷P-!}nű`^c4sJ}]>໊/f] WXoXeEvp.+G}4x!|l3́夂ɖ%LXj:fT>5([!jV&[ltQLW1,y hr(wi%o6^h{rokh2NH4{l?0hK ZcSRp_k>}9~iLf=^Ehqin;Rfdڿ2bFW>5ض!y>D)`o֜D9{q3u] 3PLqdp7ImU*R4`]2YrE7Z1ݨ=LS.$20m%HlƑ*,Fރ ~ &m75"mpwȻOc-pF,Vmm-ף!l?bD1ס,S[8 t0[R"]9z1xT x >DBjQF4:57W +M"="}÷_s4 -)0 8C@#+<% oW޺B3~!.d~`hm6jos ^T/ٵsi?ă02OKį1 "᣿SBNܵ|7FoaP_|]ű=1\rV2_H촕h;' 0%T aPf3IY[\aANu($0zd@0 xz p\{oY 3ƃEfƴJnp1Sl7ڦ+&>@?"D@'ں:nfw?Y,N^|G>_O]9՝tOx MlUHw*@Bm9my5EQ.ֲ-_Mx܂G#~/l ڇ{MWDhm>nك9I\?(^Hc۔xI)ŷTJ%$}ɝvD8O<♀ʒ]_m; ݈D@hS̙ mɤ=ՓȒ> stream xx XSWDz 9TP:WZqjAqDB a3(aFfHAbGǯAVmmױaLo<}kwk(>H$,rvq2haHGx'rDVbdeQ?\kaSbHH!Q؏ٳߛ`?u^rmA @دmRD؏Py]R9#0tL= J_P/yv @/N&u~,)β^ 9-- ^D4CGaJmWxܱ{ߵ~.]N=uZ3ߛ5bQs獙?qO2qһ5ZIVQoSQj4CPcu;zjJ}L-6PFj15ZBK-&SRS#5rS˨rj&LfQʚBI7(wޤl([ʎSCaM(⩾T??5P j0ĉ"EA}>}׈3-j,X^Gu;,<~oտjUV 84z/2[;c}҆7ֽ]ߴxSf#eB#C -zgXڇ/93/q׹?x~P>P(G `'` PЮU#JNKNG1L`5*^Х~yYLbVR]R Rvfa(1xjhmMb~j #6mB:JNFQ;it!YwE}v{3Vnt̫1͛h>/~Ṝ􋏐Jtn7F6n" 0]8rg?Oq4WʏF̭:Tb]MK_R]㦫sxGb)G[mUyq0(!8l-&C Xs`<78MDA1%Ũ*0"%>)K݉Rc~[tdݡ / o]ۣ(.ARwz"faK)#Ӣӈ:fXnw p+PYS`/|8-G[8Ѐ=0homrOR _X;! F(5/ v,atZӯ}8Akl둽j?Nu+ݝ77 k0H)atyfPƇSaϏ_sȴ=]6JLSʹݑ}lw_F>V'͉_Ŭckʹҝy!1E'BbmS>}&@{j'xsfLG:41jxhO}:-6n^9c`WmT [e26Fs>ۊl$V{h_eģTC1 h f*To[`[Fm ;@Te쀘$0L)J>eJTKnDnxJ<|aX.4BAtZpXdcHrYrFQ߮w~7y!D+rd( 2Q*)L0_VK]\KNuBHOZ]'$8s^CSiisgaX4C<;Q :TS[ǀbZYׯ4uѓ'>Y#dcF#C37Q{w3dZ*)T#U%yiKAt̅ 5g&?~ Qul?2>"q*x] -@ NF}h/.h#ԐU} k3vƇ!}088aONCr}S:ZѵcGwPcBKf ǭ[>1TCH-7>} ,S)h黟zngF]EqQL֏qhR[SFwɯeI%=RM 0=yKx0Ӆj3 lb.ObaKp%rɺTo?8Pbv39}k])>lz~E3bߺVPY+3 YISR_Wڳ.nw S1/įHK18scЇ(rol)5\LG,Q JLF(0PCi(#0c7ev̂GJst|Uq.6D3l?1>٢T$O,ؗTp1^Y9:  HeŜ3'6yf)HY6΢uQsk^JuX E1q:RS(#E:G,|XSu`k1ݑ5yFPKL&5&ȪMVO~Tf@>qxMғwG p< ,/ ڇ˕o )ѝ>1uG ;s$Tpu :'=gK}OUv.#̲f? jQV.da\77X Wo6k%θn]5W1fQTS)jmGPUؐ4D]!}saCyR|FtTЯhb@JJd`"ٸ.ߍK`̏9~Jz SE.GhW,z\1x}""WOWHA(6-:MNr&U+">QNDF3m$}MO7KLJzޜvYߚNO(OI0$fBzXL<^vn[v:r=ۄpM:s@ zq.Y36?NfBA}c~Ǫ#u$k6oV44oϴ@ӯ.F$bS(1'H?XQaDw6B!S=c˸}R?H@uh z 2(OЈqf^k;.qEFFbͰQP@ 3QxҙlƛSB۩kQ.o2}*Ibth.=,d JYM͖Wle6lgcU&vtxU(+R4(ۉro~yܝBu[KVWІ>% 2Ic:nV6,P !b0[cX'o^'  /HBPrnOytSFiSk3YKΙlB,+YMy`065 X$ȧ5wA@3?&$& 5cqg3Puq8x;\n9v}ŀ;x 7wq%l=s-Ӗl\y{ iL7GVAq!-ԞGg ?ldR*δXa]ܞ=7L}൓n>a<;uh鯦ѿh'ow]MO8StcE$ĂU[Q7[]B11J/ F(E2:( E0QEQyYY\}muq!M*VAlA.|A%rTU(W'~&ĐG& SfX:uw4^{r|9R41Jΰ -g78XHUผKJq$)J32wp5 K/хN/^lY9hN6h8<:0ao 9L$AgZa6/Aq>g ?DPq\f I&. -UVWJ꛽ώ#3n%o im'\k' 넶7+ Y,!M"?\NZdzaEf&C`~_]Hފmq.lJ;k+S{TӗpE#o-h E> stream xW TT0hN)^t43SC1` (Q. r`fppGIyI;u*-Wiv黧 e9kou}{0nD"aC_xu8N">&>+k3LRp?{FGO`\;J$4]fKFzs\Sy=?16YQJMT ᚍ sRS痞>C2C)ӼթqoƦ&kccC4ITރO7c#X%-56;T0̄I- SRU26,])lś ^9  c&0+L8YŬf"ט[fcBfd0P&YƌbF3O2<Rw&#Y(96vGj^ru?'[(F#?n`?.7fȣ kxݣy,5B=mQwK$zg1Ld02Xv0hbH.C)o >_=;4ME|j,爿lR~p~Ɓi,V#G:dd)8.A)Jp=J~ƽ&'s dJl(Bl E櫞Gl)BXOM|.iED؄%$pxs{:`wq@dOrZۦ?N>-{5ua Drp<=9\SKl퐜E)u9g P&~}ėl"8LA 8to)+/r|2k` ̬ ? PV}}gʏgU-d9 5yHV;.i<8ZhvxLCp1+CG_Df$"7*Nd=GFJe}wrӁ%8bMx56*L4^yNlQ_SM°8Kuʓ0OamS&7 I1x{!Ž\]&dpFގkDQvPHdg4f?y]n_헤pq_ eY"ze3py O=#ZMER8,T+xO#MiA , tUef׾>Ԁ)|o(-ʗV,܅`CeaY0er% Oq1%(yuiwJq*qrzkzjBj 81)a9\lL'|(.&~WO x%!@NhUL/qE`CupT!E6wH1ploIl!6C4w3XZ߃l#ϑ݄vy! @`@T/[R34<ȊZW|aHH|((ՃWkWCT[\?RVyB;F7,M?ڥ%J<~, 'CU3Zm n] Rld d"G.Uʟr.&HN3ߊ=2)x.![TЫbu` PC(A3QHGu`P̚2:8V=̢?yѤ:lRJ wvg LePR2NR/Rη@㨅H]Ի(G=λʧ6mysLݐ 2$Ob씫~@C3aY -ّT]!r-fSK%s[bBVեW([׭Pu^j/Q?Nũ<[ۍB%4׈N+ڃôB~#9m /A18$,D6M|p ]胛O.K"?-m|qoW{iPټȊPsg IVT |LFফc%$[ |\m0 !+/?ƃ۪:6w.'X Wɯc9tvqGc7M /?̴ܸ$H?VEf#h4ґŧ> hb$~ ngwzy;g*_<ۍCʻDV;{V6+ 4(C%5ӀnZ?ԅ+pv\X˩)C/6l.bC\TfIH b2?sUuގցG5L;%wz\ {*~4 aG`N5}>>wXϕ-(feEkX Y=Sժla`IPJ,'^O\bSwmUwvdYLORrN-7+;a6 %Z0>ƺ|Noo%}yDz[Ԟk>HVin@!3'(Iۄ zZ.TTXw76Yw=(?~w'%:cIt'[QNZwdR>Ȕsj K2U+ 7j N B\٨2 .maԣ9޲*p{C0PaZXz8rv%8 ~p S!y fMj:Oʆy+cNQ o,Z SaM6gɵԧo8$eRdf kpۦ˱\=Q(N/MC,ijP<^'aT4c<5z.,+@7~yUJtp82d/ڑf{3P*{WV*H"I˧=&+Seα(m/ C]JGhT8Uu$5GT~V {%H>: _r# ڣ7}!PTq ,݄uъꭆXC1Xl(ԃL L ʸk(ƿB ϋ dLGHl.CpxlQÓOtO(2!V bGkw 9F 붿oBdE^Yoy EOfn]TKu x2b{>P+zvoڴ)패Y_0wGoɳ# t nK*Gp9b7ԕWɺ21%ÄuCY=> 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 95 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5574 >> stream xX Tڞ3j];T;zVkZn(uT=! @wk[VZm~_g5{sHfyyGtBxyV^=~\pn ԅ{_܏w@O>5<@? C>+,iʓ;J?mڔ)ƍ2'/C3],].rSVwfgH)ONϒJ;dLz^$sSSJY)+3 3$R)2R7?yE I2 YsD/X )/H\ص:1䗄|a-a7PZR A^8T=Vcc$bTQ ˁ0ZrY8׍9^BrHP6i /FxܘK|k=!G&dM3>]~ 7[n[x7 ࢢw0sgwv\ 6&XhNt4|DP/VDzk|T= _>~/FkpAs3M ءd!uǨGt, kEknMQS2r$ :Q[ipQ5S r2$%Ww7^xAr%oVlA~嚪L]d\4^C^> /9aיWF}QOh7{ R-mk޺yݗWzQ#W}!w9mN% Ng¤޷v34-GsFGQ\@M^'8;v9vP;UN$86[q枤$30 ]g_rKm]{K{p0:MAZc? sC {'6VBm%H.+iԗE}ߐ FC&I?;G^w 5T̥̱uMy8^( }wWO ,)X*|.$[;_⃺;EՋ = #F)IkuLOvv.2ZT zL*3}N{ w^R<ͱeıA`sU"ϢkS"Lksx>`f*\ ԣTl|@KȇF`Y-& k'zJ>/g)|9NYsh W4)d <`iZ=A{=3 A9?_9\ҒW4]3VV}Tc H޲*mը"hvI4/"KwVhzPjکa|&j>*#Ы+iiZ@60.ـ{Ppe9H}k1?AK+lR{*XR)cPg<Ӑ:@$(%*ʏhS"?Dxよi:<45*TyyipuJ@d)fTUHj뫾~7| 7o* ؕцlsifIA]e6<{}q123PŢJTw ZN{V1^'+L9%mSCv* k2KuAԱㆿ`o zB[㈁TgA {z 0vRԹ26' :+^ w:vܪ{&s)I@3~D>Fllɝ`Rb{,;H\s+CEUɭБ~\nOlX~H򖙛*\ c)OѪv( TQmHٲM|ƹ<;3>'<گKLR-#^Pn:{2޽amV(:V^} -~8׿11骠Q6r=@H7 q_x ,,ZʢTSR@=@`M l#דZ;˝,pq T>O%hJ@)#E@g2Z xڀ{L= .וkmrs6V2km~;D _\{>TZ- "쉺sP/ :vׂ6 l%-o6BK @̺qW8(ߚ1#VqA ~;5ZF}4Z$ <_jj)ny߫4V6J__]smܣ4B04D(p \ 1(>3L|zФhl}+S=1ͅ{̯ +QJ̙gPZ- ҸCG {MN#.'G9ڽCe>n!u덛YW2u].W4=4;um@n(i!*5FP cC~Iւ p7=C2BU6[ h?}usx%[3sb5 t 6rWůczάШ5gڼ `cv\uX.Q ;?ϒmyp<ux=nZt+;X^UҚ- z,ir1ˈwʪEʭ_@=V (j]FO1{_,BYŊQ+Z]UqVUu!ۥ'lm}Fֺgś;w,GjEoKͥ (A rzmn5~ h8Fk}17lCl.ZU8(*04JF(@/ h^# "T塽6= @n8hM*`@ . ~K#[dd+`э`zv E "i8x q gQ¢.~\Y<+q;Y.`?>}]i=\#{Y9'2ߖfZq34ܼ*8ZSC"yEHK=]IV-qendstream endobj 96 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2153 >> stream xypwԱ!RIvE\e %j&l8aɖ%I,eK+=ƶ>dc!@ .̀eLJ0 k7vg~}}ñ30Ǔ2o߶|| {s0_'{ Y399&gcI8)ԔJta"իWeHljB['SKJJ>4y QpR/Yt`X"SheH z4[ShrfZ/@RH_f呩QZv\UReyJ5J/0,d~ky^[Lea =",ۈEWT܁,U>3D 3KM`FI˓qt rY[9%:ͧ-@Ԛ]t/OND 2CuSh4G ˞\[ /~(5;&A`N'%oDhQi0}XwK@O pr">ɨ 7殗Rz'=L?>C?LTCm[6WT00VȲwƕ@,K@=RۋFP []ʐQ$Ok f0zB0ӞvvZTjpݥo`IN;9F󺛈r'!mw FjE ' ^6XAk:RίHXVe>\DՏQH>7{Hv//EtIj<m5A :2Tc{[Gw6f)kI䞠l^np 0T~ Z겊+RrRv?_mMJU*F&{]d8P~ǐ3XtVo[tW^64"$ĢoY-~ lq%TCuue ]5>O._JqkrBZ /9wdaUgҟ.A? 4)R^\,z^sOĭ:J24Vb]1l|}n.*0 J5heyåg?𨓼Q1@μl~^4';r 3p6>- C VX*Tnq1;BKzKNۢpNfho` 04dVM0<D eßnC&]%ZU#B 16$5w rt}n_7{лqNȠՔD#@t1NQA2^M "xXv_ujNVw8]߲9"?z&z>cs}uMܝWR6O Dw]G#7&8=rL܂т񾱫0E[5ɮ0{=m@Q6)2 J]"ʡuqhr x,ݻ|ւl +oJM /ZA2>PCӸ @zaل䍼?ҩ 1_D֑} Np o>л'-pnQ7=,%؜{@F#WX63M鴕!lA/9hqWpNI@IwkE*J{0y?;"ۿ {qGzME,t侌y=/uWm(6 (07{M?5'E\.G'S~7.󢿣( #=_7OD ߈;i yn!UwXl_Rܢ Ee]RJY.3 BI=L|ehNor2Gvendstream endobj 97 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 98 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 99 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Εlmq6fNnju.̉,mc΂!#ldj5(j!T.WVJll,**H'l4Tϖ<PAZ?SAxAXv8S(-@]> 0%L7c @y_JQR2Ô276åE0= Ah|K̞Aw2sxC 1A jQѤպhDb2NӰ@{nHfJ:d8Y8i`'L`]Cj`b,@*5ڥJmV]Z"a@d5ꖥ^A/]+,]R_*9K{XdN85,?nZy F8o`l-q P^sV78vVN<:`k+p%Z%I${YBNʙnkel3GB?X@MWW=dyw`-6e::"׆M|i۾;HBRP(pbwgւs qsN,xĔ&9< ĉ#ٔ0% ˌ2)EjׅB}2Ry gEFJ"4!ݭ:tھ%qIZ3,S)0G#nHzWo~A v'1<Ҵ^gaﯹIct(Jw9^ UO[;HRZBl6rV5Jh>?2Uv*<&ǝs# n7 :iKc@W ss5Lc=|L\\M0q\r= f;"6I0tϛ`U\i=>WX{߮)Wmpd轴r+OsUW^r*%Tz9%#QF .oIO+W sRR9K*{]O$KiY$c' &:fIn2Q'_(j풘5'#e%dMմL#7d|IO;Ʀ$h9,}վ"?9ڜ>R% hd>>b`Ӎ >ʡ pK=}e2}N-Ho?xtpϾe[?azAh aRfC |$Z)$?_'A|vXt8Jzη 34P N'|d?G1X#N6_ GiaF;; ߙa{-9yU_Bendstream endobj 101 0 obj << /Filter /FlateDecode /Length 4692 >> stream x[mq970@ _Ā,lbԊ.^TLw59V9j A _۷~q{NJ/zҽ )\x5?cz|v8coŴus2s>N/ ī9T. c*xush\9ܰ032˄^pd8b 裝P}tr>~8!:^g8-]/*ùdd0T7%ʣ9lX"ل֮w(aa8kq}r?h:) c샜9"Uelzdn(#àz%gו!TVsJa8_ #T!X?΁^u }B 3#brWt#Ռ @fp3h\JlN g=Gj02S"X@ylc\(ieMb2J@z31Pwg90+5R,-Cb rs*)J:7G(ӠkIv\XV(y*H˕ Nq,;.}>rcPt8TdPY^D>kY#:e6镣8R'EWtGcsS.L?I!gvqb+%^;pN+"YTvowK҂&hPxy<9a]lvǧf/{I`WBHŬ"|"@> {,\)tFG\cm2#‹J{n*(Д3Y94g ~ZxDO}%6@J@;>MO(# tDY( 3BͤH$^Oit*|H1H Ӣu%JPT%Z8*JU*%iJʙqnP3F rEnt?,Uz>XE`jDŽhE1(s'Q]\vi}r`t{]a$C\RtW4%ҙ¦m*dmwݺ(u"a}Jl~$(h !4WtF6S̀^Iu=^[m T ȉ@]vYj!ŇlFTt`Zy\}FgE%bwzql*>&P= M.`DHBc8rX"7 ;GbNwmQVh"5)!?,.xDJ'hD4D&a I PPS w]XHXA/VT JnqSC(cAG2 rSF2KѵH6CqV)>,ľgFe8YLR2 emXW e-b8z. vܸjtzm.>f2ڗ ' |;qv>d?dS^3 ,:߫@&~ڇȩ|t8ŘHQq~ut2P3ܴ9`82A/SuS~n9@y&dh]EעC£8;+do*S&o#ǁ'HpJ=Js(m}׷*yZuLO4x'wA-Sy2=7exEV|W1s+ 0-'hYS51%fCj"X޿&SHA~0Q j] yISVUiOe4cUT\N&oדZW!RfC3$! *[ 9ueN=}Rǫ@gl*6*SiepJw\^҅%Ȼtz ER»?1~U=#p0 ȘXR!|qS1Y"7MhT|+]Q`ɐCU450ܕ(!EYPs^ܸݤK Qk@g yNX JWf\u\fe4my8{)h:}fM_gX3 mu$1\gb{̶3Ÿ4$Ufz+oTDza o8۽&)e^iJT2:Bwr7iwwOUqHH-ަGpr[Ta‘aڛ*~8n)ll\Ge2+sakCBpֶ͊iVmd׾-d?nhfkMn~tdYhR SL$0'ZCE$sQX|=<W|]|j`W|)"9PM(UIۜf@1ػC`M)s{~\)^L5iX.C`AA݇b$WϜCI`D!$93D/ds'<MCM=6G:#)۶/9uӢn2ZקUe_mf1a͟ò*!fL1wW˪ \x ipzk+J?CEDɓDyʂFHҾT ؃ܯOVQo:T/e-v7|rQOZX-1]žر!ڜ[KBn2ʆPY"!kev: &/QPu=Uf!/Aܑ8l&̑d%RK Ӓ}2S/0M6)rɑ,E'IM;\x)>4tAA?x8Ws(9SgWzVk7H_|1B,=I=.tY w3T*e$SC1E1O D kfX9yPvU^\oJ{^w97{endstream endobj 102 0 obj << /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 103 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 @N. 2D! }I:gׁm_Xց$i,Ÿ`kSendstream endobj 104 0 obj << /Filter /FlateDecode /Length 160 >> stream x]O1 y@,钡UĘ2 $,N>~ 3{ γM4%!Hg4XyguD!O$X 6~3oU]- R2Sendstream endobj 105 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 298 >> stream xcd`ab`ddds 4T~H3a!O/nnߗ }O=^19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMUML:)槤$N-/````c`b`bddK{O=?0))(݋tWUg)..Z=G?تK%g/it=\{b^j|endstream endobj 106 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 107 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 108 0 obj << /Filter /FlateDecode /Length 2863 >> 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_U80UoNF9[!3 Cg9PBg7Qtz0L 9৤jhƬ<6Ypd0A:>{_+'KoC&FcWfX:°9↽ c|F}q~,-,9ڇj‚`CՂݷU66~ojkR>Sѥ8RWZVj]J ]Tj,榔Ry^{'v^s3+Fo2~\#¯ϲ*wy}f/9]0yN=M>L(QwQ'Ň[러HJNnj ߑ6N]OS0;ĵbą9԰T]q9,JZ×N!QƇ4b-|  RRRŴpNCg++{Q6HJ41 nG'HzvR2 JUTv*X M c JNh/tP6Aɂ<t ,8zΚ!?ӆ# ӄ/HN9Dk3aN1`*bZ,c8î)- N m9$4I>& Ӻrq)#(n ^4[c0Y*Ђ)LX-GBfw^BT?'?^l+QP`0ހ(ag* j=hTP{uŹ!gNSi#qYQJc[=1r˻'Ro*uQiTM.!" /~~nBv FP,>2DfƖ-Oq C[YqRYR3FI||\'NjxW'(g.⊡SJ4gb!J8o`cKmi cE=3D@YWָQpy̿-I8)_A`GHcJ)]V kLo'N;o9F]"S„+3;f1c#襸B'dj\@ݐ LN>Pi=3'zOMZ雷m[\y]$3:]bpuJ|ߐJg!]c5vT%ўt9oӓӲ{L ̝ϠjRV.@+SyU~%֜y;ǕjO^;`=x|tgԢtendstream endobj 109 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 499 >> stream xcd`ab`ddd v541U~H3a!3#k7s7ˊ B߃``fd/r/,L(QHT04Q020TpM-LNSM,HM,rr3SK*4l2JJ s4u3K2RSRSJsS nӃP9E A L@30ֽ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[KoA9伇YIrdV8$6V|I -A~{ggk#t`{_N/_8:\ /KAF[}G_/?9ԝRɻ嶶njEm]ZwzR/'@ZhmX_rCz.jD߄mY/G9XE+zqt|E劚#|\;S:\>hKx2^GXE)JK鎝-g̮ʥ|z3I3jǖ3]~lz][ںS6늚?wjL+z%oA.+$DUm de<nw)|)υg^}/hsz2ӽ)N͡!#B4vT]:; .]><\@d6$ Y9o;hU&y,]u6xtk_Ap^4KlRLa 4,d'Gah6ViߨuH)Ѩ.{pJ. ;g]+.ѻx4..=p =uHg~[2b0 lY)"#v;4Mә %[ X'~nfw;A9zs׃F=d? V1!Π7D!N*<*sR=QwU7L|zԽЬ`Vi0@pehlC{BM eA78\G:h4/7 &n眢]oMu;ο1x.t{y· |LfNY%oӾYvwcD{v}qeamj}VBF߁傐#gX1#vhhk Md) 'Ro:f^mJ&փ׿ ̓SJNʐ i Bxg$|͖g1XMOx.o_5dJAMycFˉR~ 8fӼG*Mn[d#Bi6}5㚡opuz( z3:]MvH a.jn,hS15UIo*n )XM 3לy@b9p/KvcLLwq[h@*_g!" K:D!I_TֵsS[-uEe~_;Wӵ[ȅ_ojR'A6IpЛ)ȗc/ăbh߻E yjXk,x][+a.֠+BhKO2t2IlQtmyLc+VEe Ywg%j<4WG="kPK bN_m1)Bt0odM,=H&RPFu[mV6VSHx۴Ç,tǂ3OD\oi{jFNR{~7F9b#~֊J/j'6M*i?toTj2TˆNSd&,NBQa&=-k`u7$J㆜c0mۓ{ΙouUpUxĴSWicNwt4OC=$5mI3zwlʱ*Cou>XXe~SF<-it-O| B apu I:5P=:PA#3J{]MH~ݵT (I-Rj}>j)L"hf 7_,?A-o+IG+@IX{~H* AYir|ĕ{P"# +/vcG:-'(ɔKp~_lc`(ErxzXC٠ m^\O@4pki83'@O[ttzZvϣZ}Y Tt-ūN+*ڼ>╱!)>FN:C\/dbo K )s_7Ɉ lAJĖR4SScFl,qLᗷeS[!Etp&|VdHmJ-Ʈr l8·uCyizߕGr01vRkQғ-zWu#:0\ |͊QVbilEcha?}Ɍ`r-"Ͻm#w8C O]-X +b8s#"6mimBk(1J*d;"uq9ս</ QWw>t]&Ԙ_`gJx1Rbb%_1.հ!<7XXTA!.WM l"'W>]h{fHqyh Yt} Gh.uO}>nbY',B*qc>0#XA:Jĥ"[Ĥں-l YIę݈Wr'84jQ^~YYB lN,',G"lʙ6}ڟfS6eg"0KFçVF8Y>I3^eɟX ̒qdOj'!16'`u~>W.h?fyIy";%!Փ3K(Z v!uq$JR~Dr|0!h&hZyVId1cvendstream endobj 111 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 112 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 326 >> stream xcd`ab`dddw 641U~H3a!O/nn7 }=\19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMUMB9)槤1000103012)ٽgf|;?̿ܥ;~3>,}} |g|Waq6;7<_s/wt\7Xp9yendstream endobj 113 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'⸮yA̫*KA'fmkᴒžxT,(+D2nMX pBn(0'r*%KïZ `ɹКCǁ!ZB1e"% $L!Uo*!1xRPeU1 {y.S>R48Մ pq<:x01iPtD#J"WBA hғ5˄G4l]{]Zv jј-j_D r$=\3jђ%U,vxwXP2d  'Y|>S1p I)-?6;c_D<6{먏;*8՜yVZH0L&ץAm3KzGo< H`MqQ1:'иB==X?O ixHOɿ811Y0K}xN| vo24 Zʫ?ƒ'MA#H exA.ikImzTCGZ¾ j;V==:j忣wN|}/*1vDO"endstream endobj 114 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 115 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 117 0 obj << /Filter /FlateDecode /Length 4315 >> stream x[[o\~W*irx3'iM*Z7ǕeH C\IN@"7 yI O_};9ǗGod8;}u :s`=>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&'$l:w-s{ I M\ Ѐ=8]gf!lkXq74ijBHUz f`XNޱgQ$\M \|? ~4;`$Mc6yKԨWO}?IYYۈ6uv­.>`Vڮ8lŢp!9؂~ )G$c*F?ԶWZ}:4RL>Uq6&&&r51ݟJ53y(=QՂLuvi%9k$V^q_-G6Du )KarrVeǽ7b9%5R󲴮bm(~ʏlDBeetL_XztM] e]m/ήn/ f2wO^>=j;xt4zm9$$:v'/Qf0R*0ݲ%R '52o$EPC]sc[yx>vDv`j*۔պLthaОXʈ]e $P.G]:97ƚߤ:r]R~Xk ǂNHZcqqVf| lvH P=pWavL1 pQgLMNb,9/%5|5Hj`wzS> RغLt'= enHR5^RYcne&#Wĝľoр5g0p.F%^S.3 VOXRL]m$?3h"i@y2`tڐjcΓ9aɋiq d(ոu< WAS;/h){3AC%p0HU͛q ~ǎw`q>j6KUxVRbpmU@CV&QIi}]Z Ctwcdb[B4TdoOytmnge5od2!gcd59LBYb@]͙*\}^#,Jaki +|oP}{xUi0G.W ީSRr jk8st0\kY5D!iy5?)r~fXRC\s)%Q;NO YIJ>M~i\(6`X>cBcfZGlL͏zE@# Ҍ^=h'aB?O䣅PBc:[T%y4C@ta})5Ԯ~y)gJ )R:wNy'm }j}M-a&n?-z0M<`{MOXdf¿-2jSG2Tr\( [!](r($w ,}_Zo0jObn\_UMR:!TpJ-Ќ1},XL5iEzNw5<N`)L'G -4$6|Sxx8<+N q Reh= e/]F̶z㚦{ezX:ꠓR3cdO|96RVȺT4,p<--i#g 0ll +FLgsBC#_2dF{t]u{^"x۫%/e; CkT{QhPZ>*R-jQ%"x3;ͭ߃[W#U-_aAGɆ.jMuf*(NN)ߔ[\~XֽVn ;QWlR!SoaCRD>k囯g;lT )6!!}5fXߌ|T-]a}sE ;S\;Y]:g 739hU4!zL6XqHdae2?M~=d;ltY}Q6'OoB EX9D_KfS^UoJI%f:ΏSBGjdD+* -pL7endstream endobj 118 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 119 0 obj << /Type /XRef /Length 148 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 120 /ID [<7282ea227ba21e329cb13b2358c929b3>] >> stream xcb&F~0 $8J ?Z <@$w"9YA7"A$1SE&,L@$q)4DrHW`%l`VIF~n-``pۨ y "U(2C endstream endobj startxref 84116 %%EOF multcomp/inst/multcomp_VA.R0000644000175100001440000003050011512634221015451 0ustar hornikusers 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.R0000644000175100001440000004034211471214260016264 0ustar hornikuserslibrary("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/0000755000175100001440000000000012553727625013310 5ustar hornikusersmultcomp/tests/regtest-lme.Rout.save0000644000175100001440000000465212654130706017345 0ustar hornikusers 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.save0000644000175100001440000003624112654130706016400 0ustar hornikusers 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. > > 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 in chrlinfct2matrix(kch, levels(mf[[nm]])) : argument 'Warp' cannot be interpreted as expression > > ### cld did not find a terms component > ### spotted by Peter B. Mandeville > if (require("nlme")) { + data("Orthodont") + fm1 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1) + hsd1 <- glht(fm1, linfct = mcp(Sex = "Tukey")) + cld(hsd1) + } Loading required package: nlme Male Female "b" "a" > > ### spotted by > ### example code by Achim Zeileis > ## various models with and without intercept > m1a <- lm(breaks ~ tension, data = warpbreaks) > m1b <- lm(breaks ~ 0 + tension, data = warpbreaks) > m2a <- lm(breaks ~ wool + tension, data = warpbreaks) > m2b <- lm(breaks ~ 0 + wool + tension, data = warpbreaks) > > ## these two are equivalent: one factor with/without intercept > stopifnot(all.equal( + coef(glht(m1a, linfct = mcp(tension = "Tukey"))), + coef(glht(m1b, linfct = mcp(tension = "Tukey"))))) > > ## these two should be equivalent: two factors with/without intercept > ## but the latter fails > stopifnot(all.equal( + coef(glht(m2a, linfct = mcp(tension = "Tukey"))), + coef(glht(m2b, linfct = mcp(tension = "Tukey"))))) > > library("MASS") > xdf <- data.frame(y = gl(3, 10, ordered = TRUE), grp = sample(gl(3, 10))) > glht(polr(y ~ grp, data = xdf), mcp(grp = "Dunnett")) Re-fitting to get Hessian General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Linear Hypotheses: Estimate 2 - 1 == 0 0.3085 3 - 1 == 0 -0.9180 > > ### interactions of two factors > dat <- expand.grid(f = gl(2, 3), f2 = gl(3, 2)) > dat$y <- rnorm(nrow(dat)) > lf <- glht(lm(y ~ f : f2 - 1, data = dat), 'f1:f21 - f2:f22 = 0')$linfct > stopifnot(all.equal(max(abs(lf - c(1, 0, 0, -1, 0, 0))), 0)) > > ### plotting one-sided confidence intervals > amod <- aov(breaks ~ wool + tension, data = warpbreaks) > wht <- glht(amod, linfct = mcp(tension = "Tukey"), alternative="greater") > plot(wht, xlim=c(-30, 30), main="right side was missing") > wht <- glht(amod, linfct = mcp(tension = "Tukey"), alternative="less") > plot(wht, xlim=c(-40, 20), main="left side was missing") > > ### 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 > > proc.time() user system elapsed 1.044 0.028 1.069 multcomp/tests/Examples/0000755000175100001440000000000012661100761015050 5ustar hornikusersmultcomp/tests/Examples/multcomp-Ex.Rout.save0000644000175100001440000020013612661100761021074 0ustar hornikusers R Under development (unstable) (2016-02-15 r70179) -- "Unsuffered Consequences" 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) > base::assign(".ExTimings", "multcomp-Ex.timings", pos = 'CheckExEnv') > base::cat("name\tuser\tsystem\telapsed\n", file=base::get(".ExTimings", pos = 'CheckExEnv')) > base::assign(".format_ptime", + function(x) { + if(!is.na(x[4L])) x[1L] <- x[1L] + x[4L] + if(!is.na(x[5L])) x[2L] <- x[2L] + x[5L] + options(OutDec = '.') + format(x[1L:3L], digits = 7L) + }, + pos = 'CheckExEnv') > > ### * > 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()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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) > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("cftest", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("cholesterol") > ### * cholesterol > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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) > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("cholesterol", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("cld") > ### * cld > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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) > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("cld", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("cml") > ### * cml > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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 Warning in Ops.factor(1, center) : ‘|’ not meaningful for factors Warning in Ops.factor(1, center) : ‘|’ not meaningful for factors Estimate lwr upr trt2 - trt1 1.551055 1.184052 Inf trt3 - trt1 1.396362 1.068766 Inf > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("cml", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() detaching ‘package:coxme’, ‘package:bdsmatrix’ > nameEx("contrMat") > ### * contrMat > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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 > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("contrMat", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("detergent") > ### * detergent > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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) > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("detergent", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("fattyacid") > ### * fattyacid > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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 > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("fattyacid", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() detaching ‘package:sandwich’ > nameEx("glht") > ### * glht > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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) > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("glht", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("litter") > ### * litter > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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) > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("litter", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("methods") > ### * methods > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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) > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("methods", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("mmm") > ### * mmm > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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) > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("mmm", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() detaching ‘package:sandwich’, ‘package:SimComp’ > nameEx("parm") > ### * parm > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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 > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("parm", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("plot.cld") > ### * plot.cld > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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 > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("plot.cld", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() detaching ‘package:lme4’, ‘package:Matrix’, ‘package:nlme’ > nameEx("recovery") > ### * recovery > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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 > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("recovery", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("trees513") > ### * trees513 > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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 > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("trees513", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("waste") > ### * waste > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### 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) > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("waste", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > ### *