multcomp/0000755000176200001440000000000015075342105012114 5ustar liggesusersmultcomp/tests/0000755000176200001440000000000015075167045013266 5ustar liggesusersmultcomp/tests/regtest-anova.Rout.save0000644000176200001440000000505414172227611017652 0ustar liggesusers R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > 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 > tol <- sqrt(.Machine$double.eps) > set.seed(29081975) > > df <- data.frame(y = rnorm(100), + x = runif(100), + z = runif(100)) > > ### linear model > fam <- gaussian() > lm0 <- glm(y ~ 1, data = df, family = fam) > lm1 <- glm(y ~ x, data = df, family = fam) > lm2 <- glm(y ~ x + z, data = df, family = fam) > > gh <- glht(lm2, linfct = c("x = 0", "z = 0")) > stopifnot(abs(anova(lm0, lm2, test = "F")[2, 6] - + summary(gh, test = Ftest())$test$pvalue) < tol) > stopifnot(abs(anova(lm0, lm2, test = "Chisq")[2, 5] - + summary(gh, test = Chisqtest())$test$pvalue) < tol) > > gh <- glht(lm2, linfct = "z = 0") > stopifnot(abs(anova(lm1, lm2, test = "F")[2, 6] - + summary(gh, test = Ftest())$test$pvalue) < tol) > stopifnot(abs(anova(lm1, lm2, test = "Chisq")[2, 5] - + summary(gh, test = Chisqtest())$test$pvalue) < tol) > > ### logistic regression > df$y <- factor(df$y < 0) > fam <- binomial() > lm0 <- glm(y ~ 1, data = df, family = fam) > lm1 <- glm(y ~ x, data = df, family = fam) > lm2 <- glm(y ~ x + z, data = df, family = fam) > > if (require("lmtest")) { + + gh <- glht(lm2, linfct = c("x = 0", "z = 0")) + stopifnot(abs(waldtest(lm0, lm2, test = "Chisq")[2, 4] - + summary(gh, test = Chisqtest())$test$pvalue) < tol) + + gh <- glht(lm2, linfct = "z = 0") + stopifnot(abs(waldtest(lm1, lm2, test = "Chisq")[2, 4] - + summary(gh, test = Chisqtest())$test$pvalue) < tol) + } Loading required package: lmtest Loading required package: zoo Attaching package: 'zoo' The following objects are masked from 'package:base': as.Date, as.Date.numeric > > > proc.time() user system elapsed 0.284 0.016 0.298 multcomp/tests/regtest-interface-extended.Rout.save0000644000176200001440000003211314172227611022300 0ustar liggesusers R version 3.2.4 (2016-03-10) -- "Very Secure Dishes" Copyright (C) 2016 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. 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. > ### test the extended interpreter for the left hand side of linear hypotheses > ### Features: > ### - fully recursive expression parser built upon a small code fragment copied over from base::codetools > ### - the parser stops if any of the following conditions is not met: > ### - any variable must be addressed only once > ### - all operators and functions must finally evaluate to a a real valued literal > ### - function parameters must not denote an effect name > ### - effects can not be multiplied or divided by another effect > ### - additive or subtractive terms involving an effect and a numeric > ### constants must not be specified > ### - coefficients associated with named effects must not evaluate to zero > ### > ### Examples: > ### x1 + x1 == 0 -> not accepted > ### x1 + x2 -1 == 0 -> not accepted > ### x1 * x2 == 0 -> not accepted > ### x1 / x2 == 0 -> not accepted > ### f(x1) == 0 -> not accepted if x1 denotes an effect > ### 2*3 == 6 -> not accepted because no effect was named > ### x1 + x2*0 == 0 -> not accepted because this is likely an oversight > ### x1 + 3*(4-5+1)*x2 == 0 -> not accepted because this is likely an oversight > ### x1*3/0 == 0 -> not accepted because coefficient would become infinite > ### log(-1)*x1 == 0 -> not accepted, because the result is not finite > ### x1 + x2 +0 == 0 -> accepted because adding zero does not make a difference > ### sin(pi/2) * x1 == 0 -> accepted if 'pi' is not an effect > ### sin(Pi/2) * x1 == 0 -> accepted if 'Pi' is not an effect. However, if the environment does not define Pi the evaluation may still fail. > > > tmp <- multcomp:::chrlinfct2matrix( c( l01 = " x1 - x2 = 2" + , l02 = " x2 + 3 * x3 = 1" + , l03 = " (x1 - x2) - (x3 - x4) = 0" + , l04 = "+(x1 - x2)*-2 - (1/3+2)*( +x3 - 2*x4 ) = -1" + , l05 = "-(x1 - x2)*-2 - (1/3+2)*( -x3 - 2*x4 ) = -2" + , l06 = "-(x1 - x2)*-2 - (1/3+2)*( -x3 - 2*x4 )*7/-10 = -3" + , l07 = "-1*(x1:x2 - x1:x2:x3) - x3 = -4" + , l08 = "-(x1:x2 - x1:x2:x3) - x3 = -4" + , l09 = "-(x1:x2 - 3*x1:x2:x3)*-2 - x3 -5/3*-x4= -5" + , l10 = "--cos(pi/2)*x1 - 10*(log(10^-3)+1)*-x2 -10^-3*x3 + -exp(-2)*x4= -6" + , l11 = " x1 + x2 + 0 = -7" + ), c('x1','x2','x3','x4','x1:x2','x1:x2:x3') ) > > stopifnot(max(abs( dK <- tmp$K - + rbind( c( 1, -1, 0, 0, 0, 0 ) + , c( 0, 1, 3, 0, 0, 0 ) + , c( 1, -1, -1, 1, 0, 0 ) + , c( -2, 2, -(1/3+2), 2*(1/3+2), 0, 0 ) + , c( 2, -2, (1/3+2), 2*(1/3+2), 0, 0 ) + , c( 2, -2, (1/3+2)*-7/10, 2*(1/3+2)*-7/10, 0, 0 ) + , c( 0, 0, -1, 0, -1, 1 ) + , c( 0, 0, -1, 0, -1, 1 ) + , c( 0, 0, -1, -5/3*-1, 2, -6 ) + , c( --cos(pi/2), 10*(log(10^-3)+1), -10^-3, -exp(-2), 0, 0 ) + , c( 1, 1, 0, 0, 0, 0 ) + ))) < sqrt(.Machine$double.eps)) > > stopifnot(max(abs( tmp$m - + c( 2 + , 1 + , 0 + , -1 + , -2 + , -3 + , -4 + , -4 + , -5 + , -6 + , -7 + ))) < sqrt(.Machine$double.eps)) > > expectFail <- function(testname, x) { + if ( class(x) != 'try-error' ) { + stop(testname, ' unexpectedly succeeded. Result is: ', paste(x, collapse = ', '),'\n') + } + message(testname, ' expectedly failed. Message is: ', attr(x,'condition')$message, '\n') + } > > expectSucc <- function(testname, x,expected) { + if ( class(x) == 'try-error' ) { + stop(testname, ' unexpectedly failed. Message is: ', attr(x,'condition')$message, '\n') + } + message(testname, ' expectedly succeeded.', + ' Expected result is: ', paste(x, collapse = ', '), ', ', + ' actual result is: ', paste(x, collapse = ', '), '\n') + + stopifnot(all.equal(as.vector(x$K),expected$K)) + stopifnot(all.equal(as.vector(x$m),expected$m)) + stopifnot(all(as.vector(x$alternative) %in% expected$alternative)) + } > > expectFail('test 01', try( multcomp:::chrlinfct2matrix( c('x1 - x1 = 0'), c('x1','x2')), silent = T)) test 01 expectedly failed. Message is: multcomp:::expression2coef::walkCode::sub: multiple occurence of 'x1' found within expression 'x1 - x1' > > expectFail('test 02', try( multcomp:::chrlinfct2matrix( c('x1 - X2 = 0'), c('x1','x2')), silent = T)) test 02 expectedly failed. Message is: multcomp:::chrlinfct2matrix: variable(s) 'X2' not found > > expectFail('test 03', try( multcomp:::chrlinfct2matrix( c('x1 - x2 -1 = 0'), c('x1','x2')), silent = T)) test 03 expectedly failed. Message is: multcomp:::expression2coef::walkCode::sub: forming a difference between a constant and an effect as in 'x1 - x2 - 1' is not supported > > expectFail('test 04', try( multcomp:::chrlinfct2matrix( c('x1 * x2 = 0'), c('x1','x2')), silent = T)) test 04 expectedly failed. Message is: multcomp:::expression2coef::walkCode::mul: the multiplication of effects 'x1', 'x2' as in 'x1 * x2' is not supported > > expectFail('test 05', try( multcomp:::chrlinfct2matrix( c('x1 / x2 = 0'), c('x1','x2')), silent = T)) test 05 expectedly failed. Message is: multcomp:::expression2coef::walkCode::div: cant't divide by effect 'x2' in 'x1/x2' > > expectFail('test 06', try( multcomp:::chrlinfct2matrix( c('x1 - exp(x2) = 0'), c('x1','x2')), silent = T)) test 06 expectedly failed. Message is: multcomp:::expression2coef::walkCode::eval: within 'exp(x2)', the term 'x2' must not denote an effect. Apart from that, the term must evaluate to a real valued constant > > expectFail('test 07', try( multcomp:::chrlinfct2matrix( c('sin(Pi)*x1 = 0'), c('x1','x2')), silent = T)) test 07 expectedly failed. Message is: multcomp:::expression2coef::walkCode::eval: the evaluation of the expression 'sin(Pi)' failed with "object 'Pi' not found" > > expectFail('test 08', try( multcomp:::chrlinfct2matrix( c('3*4 = 0'), c('x1','x2')), silent = T)) test 08 expectedly failed. Message is: multcomp:::expression2coef: The lhs expression '3 * 4' contains a numeric offset term evaluating to 12. This is either an internal error or a misspecification from your part. If so, please pull these offsets to the right-hand side of the equation > > expectFail('test 09', try( multcomp:::chrlinfct2matrix( c('x1 + 3*(4-5+1)*x2 = 0'), c('x1','x2')), silent = T)) test 09 expectedly failed. Message is: multcomp:::expression2coef::walkCode::mul: The constant part of the expression '3 * (4 - 5 + 1) * x2' evaluates to zero. This would zero out the effect(s) 'x2' > > expectFail('test 10', try( multcomp:::chrlinfct2matrix( c('x1*3/0 = 0'), c('x1','x2')), silent = T)) test 10 expectedly failed. Message is: multcomp:::expression2coef::walkCode::div: can't divide by '0' in 'x1 * 3/0' > > expectFail('test 11', try( multcomp:::chrlinfct2matrix( c('log(-1)*x1 = 0'), c('x1','x2')), silent = T)) test 11 expectedly failed. Message is: multcomp:::expression2coef::walkCode::eval: the expression 'log(-1)' did not evaluate to a real valued constant. Result is 'NaN' Warning message: In log(-1 * 1) : NaNs produced > > expectSucc('test 12', try( multcomp:::chrlinfct2matrix( c('x1 -x2 -1/2*(-x2:x3 + x4:x5) = 0'), + c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3','x4:x5')), silent = T), + expected = list( K = c( 1, -1, 0, 0, 0, 1/2, -1/2), + m = 0, alternative = 'two.sided')) test 12 expectedly succeeded. Expected result is: c(1, -1, 0, 0, 0, 0.5, -0.5), 0, two.sided, actual result is: c(1, -1, 0, 0, 0, 0.5, -0.5), 0, two.sided > > expectSucc('test 13', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(--x2:x3 + x4:x5) = 0'), + c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3','x4:x5')), silent = T), + expected = list( K = c( 1, -1, 0, 0, 0, -1/2, -1/2), + m = 0, alternative = 'two.sided')) test 13 expectedly succeeded. Expected result is: c(1, -1, 0, 0, 0, -0.5, -0.5), 0, two.sided, actual result is: c(1, -1, 0, 0, 0, -0.5, -0.5), 0, two.sided > > expectSucc('test 14', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(`-x2:x3` + x4:x5) = 0'), + c( 'x1', 'x2', 'x3', 'x4', 'x5', '-x2:x3','x4:x5')), silent = T), + expected = list( K = c( 1, -1, 0, 0, 0, -1/2, -1/2), + m = 0, alternative = 'two.sided')) test 14 expectedly succeeded. Expected result is: c(1, -1, 0, 0, 0, -0.5, -0.5), 0, two.sided, actual result is: c(1, -1, 0, 0, 0, -0.5, -0.5), 0, two.sided > > expectSucc('test 15', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(-(x2:x3) + x4:x5) = 0'), + c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3','x4:x5')), silent = T), + expected = list( K = c( 1, -1, 0, 0, 0, 1/2, -1/2), + m = 0, alternative = 'two.sided')) test 15 expectedly succeeded. Expected result is: c(1, -1, 0, 0, 0, 0.5, -0.5), 0, two.sided, actual result is: c(1, -1, 0, 0, 0, 0.5, -0.5), 0, two.sided > > expectSucc('test 16', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(-1*x2:x3 + x4:x5) = 0'), + c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3','x4:x5')), silent = T), + expected = list( K = c( 1, -1, 0, 0, 0, 1/2, -1/2), + m = 0, alternative = 'two.sided')) test 16 expectedly succeeded. Expected result is: c(1, -1, 0, 0, 0, 0.5, -0.5), 0, two.sided, actual result is: c(1, -1, 0, 0, 0, 0.5, -0.5), 0, two.sided > > > > expectSucc('test 17', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(+-+--x2:x3:x4 + x4:x5) = 0'), + c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3:x4','x4:x5')), silent = T), + expected = list( K = c( 1, -1, 0, 0, 0, 1/2, -1/2), + m = 0, alternative = 'two.sided')) test 17 expectedly succeeded. Expected result is: c(1, -1, 0, 0, 0, 0.5, -0.5), 0, two.sided, actual result is: c(1, -1, 0, 0, 0, 0.5, -0.5), 0, two.sided > > expectFail('test 18', try( multcomp:::chrlinfct2matrix( c( 'x1 - x2 - 1/2 * ( x2:-x3 + x4:x5 ) = 0'), + c( 'x1','x2','x2:x3','x4:x5')), silent = T)) test 18 expectedly failed. Message is: multcomp:::chrlinfct2matrix: variable(s) 'x2:-x3' not found > > > > proc.time() user system elapsed 0.916 0.016 0.930 multcomp/tests/regtest-mmm.R0000644000176200001440000001117514172227611015650 0ustar liggesusers library("multcomp") ### compare results of mmod and glht.mlf ### code by Christian Ritz "mmod" <- function(modelList, varName, seType = "san") { require(multcomp, quietly = TRUE) require(sandwich, quietly = TRUE) if (length(seType) == 1) {seType <- rep(seType, length(modelList))} if (length(varName) == 1) {varName <- rep(varName, length(modelList))} ## Extracting score contributions from the individual model fits makeIIDdecomp <- function(modelObject, varName) { numObsUsed <- ifelse(inherits(modelObject, "coxph"), modelObject$n, nrow(modelObject$model)) iidVec0 <- bread(modelObject)[varName, , drop = FALSE] %*% t(estfun(modelObject)) moNAac <- modelObject$na.action numObs <- numObsUsed + length(moNAac) iidVec <- rep(0, numObs) if (!is.null(moNAac)) { iidVec[-moNAac] <- sqrt(numObs/numObsUsed) * iidVec0 } else { iidVec <- iidVec0 } list(iidVec = iidVec, numObsUsed = numObsUsed, numObs = numObs) } numModels <- length(modelList) if (identical(length(varName), 1)) { varName <- rep(varName, numModels) } iidList <- mapply(makeIIDdecomp, modelList, varName, SIMPLIFY = FALSE) iidresp <- matrix(as.vector(unlist(lapply(iidList, function(listElt) {listElt[[1]]}))), nrow = numModels, byrow = TRUE) pickFct <- function(modelObject, varName, matchStrings) { as.vector(na.omit((coef(summary(modelObject))[varName, ])[matchStrings])) } ## Retrieving parameter estimates from the individual fits estVec <- as.vector(unlist(mapply(pickFct, modelList, varName, MoreArgs = list(matchStrings = c("Estimate", "coef"))))) # "Estimate" or "coef" used in glm(), lm() and coxph() summary output, respectively ## Calculating the estimated variance-covariance matrix of the parameter estimates numObs <- iidList[[1]]$numObs covar <- (iidresp %*% t(iidresp)) / numObs vcMat <- covar / numObs # Defining the finite-sample variance-covariance matrix ## Replacing sandwich estimates by model-based standard errors modbas <- seType == "mod" if (any(modbas)) { corMat <- cov2cor(vcMat) ## Retrieving standard errors for the specified estimate from the individual fits modSE <- as.vector(unlist(mapply(pickFct, modelList, varName, MoreArgs = list(matchStrings = c("Std. Error", "se(coef)"))))) sanSE <- sqrt(diag(vcMat)) sanSE[modbas] <- modSE[modbas] vcMat <- diag(sanSE) %*% corMat %*% diag(sanSE) } ## Naming the parameter vector (easier way to extract the names of the model fits provided as a list in the first argument?) names1 <- sub("list", "", deparse(substitute(modelList)), fixed = TRUE) names2 <- sub("(", "", names1, fixed = TRUE) names3 <- sub(")", "", names2, fixed = TRUE) names4 <- sub(" ", "", names3, fixed = TRUE) names(estVec) <- unlist(strsplit(names4, ",")) return(parm(coef = estVec, vcov = vcMat, df = 0)) } set.seed(29) ## Combining linear regression and logistic regression 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 simult.x12 <- mmod(list(m1, m2), c("x12", "x12")) summary(glht(simult.x12)) ## Simultaneous inference for different parameters in the 2 model fits simult.x12.x13 <- mmod(list(m1, m2), c("x12", "x13")) summary(glht(simult.x12.x13)) ## Simultaneous inference for different and identical parameters in the 2 model fits simult.x12x2.x13 <- mmod(list(m1, m1, m2), c("x12", "x13", "x13")) summary(glht(simult.x12x2.x13)) confint(glht(simult.x12x2.x13)) ## 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)) modely1.1 <- glm(y1.1 ~ group, family = binomial) modely1.2 <- glm(y1.2 ~ group, family = binomial) mmObj.y1 <- mmod(list(modely1.1, modely1.2), "groupB") simult.y1 <- glht(mmObj.y1) summary(simult.y1) ## Two perfectly correlated outcomes y2.1 <- rbinom(100, 1, 0.5) y2.2 <- y2.1 group <- factor(rep(c("A", "B"), 50)) modely2.1 <- glm(y2.1 ~ group, family = binomial) modely2.2 <- glm(y2.2 ~ group, family = binomial) mmObj.y2 <- mmod(list(modely2.1, modely2.2), "groupB") simult.y2 <- glht(mmObj.y2) summary(simult.y2) multcomp/tests/regtest-Tukey.R0000644000176200001440000000061714172227611016162 0ustar liggesusers library("multcomp") set.seed(290875) data("warpbreaks") fm1 <- aov(breaks ~ wool + tension, data = warpbreaks) TukeyHSD(fm1, "tension", ordered = FALSE) confint(glht(fm1, linfct = mcp(tension = "Tukey"))) summary(glht(fm1, linfct = mcp(tension = "Tukey"))) TukeyHSD(fm1, "wool", ordered = FALSE) confint(glht(fm1, linfct = mcp(wool = "Tukey"))) summary(glht(fm1, linfct = mcp(wool = "Tukey"))) multcomp/tests/angina.rda0000644000176200001440000000260214172227611015204 0ustar liggesusersRDX2 X  angina 2 levels 0 1 2 3 4 class factorþ2@(\(õÂ@3\(õÂ@,záG®{@&W =p£×@00£× =q@%™™™™™š@*\(õÂ\@$³33333@/úáG®{@2\(õÃ@1Š=p£× @.õÂ\(ö@5B\(õÃ@#B\(õÃ@-\(õÂ@/¸Që…@0333333@)¸Që…¸@7Ç®záH@.\(õÂ\@2øQë…¸@2õÂ\(ö@2ë…¸Qì@+¸Që…@0E¸Që…@1}p£× =@/W =p£×@,Ñë…¸R@1îzáG®@6Ü(õÂ\@4™™™™™š@30£× =q@7aG®zá@2…¸Që…@1s33333@-Ü(õÂ\@5(õÂ\)@*\(õÂ@5‚\(õÃ@5333333@9J=p£× @@(õÂ\)@8záG®@2@@:úáG®{@ > options(digits = 4) > > 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 > RNGversion("3.5.2") Warning message: In RNGkind("Mersenne-Twister", "Inversion", "Rounding") : non-uniform 'Rounding' sampler used > 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.44 4times - 1time == 0 6.59 drugD - 1time == 0 9.58 drugE - 1time == 0 15.17 4times - 2times == 0 3.15 drugD - 2times == 0 6.14 drugE - 2times == 0 11.72 drugD - 4times == 0 2.99 drugE - 4times == 0 8.57 drugE - drugD == 0 5.59 > > ### was: error > summary(cht1)$test$coefficients 2times - 1time 4times - 1time drugD - 1time drugE - 1time 4times - 2times 3.443 6.593 9.579 15.166 3.150 drugD - 2times drugE - 2times drugD - 4times drugE - 4times drugE - drugD 6.136 11.723 2.986 8.573 5.586 > > > ### 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.83 Warning messages: 1: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate 2: In glht.matrix(model = list(coefficients = c(`(Intercept)` = 14.4166666666667, : 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(`(Intercept)` = 14.4166666666667, : 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(`(Intercept)` = 14.4166666666667, : 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.45 h - f == 0 -0.11 i - f == 0 -4.40 h - g == 0 -9.56 i - g == 0 -13.85 i - h == 0 -4.29 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.556 -30.870 -10.241 H - L == 0 -20.000 -30.315 -9.685 H - M == 0 0.556 -9.759 10.870 > > ### 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.0467 3 - 1 == 0 0.1169 3 - 2 == 0 0.0702 > > ### better error message > ### suggested by Rich > amod <- aov(breaks ~ tension, data = warpbreaks) > try(glht(amod, linfct = mcp(tension = "Warp"))) Error : multcomp:::chrlinfct2matrix: argument 'Warp' cannot be interpreted as expression > > ### cld did not find a terms component > ### spotted by Peter B. Mandeville > if (require("nlme")) { + data("Orthodont") + fm1 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1) + hsd1 <- glht(fm1, linfct = mcp(Sex = "Tukey")) + cld(hsd1) + } Loading required package: nlme Male Female "a" "b" > > ### 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.308 3 - 1 == 0 -0.918 > > ### interactions of two factors > dat <- expand.grid(f = gl(2, 3), f2 = gl(3, 2)) > dat$y <- rnorm(nrow(dat)) > lf <- glht(lm(y ~ f : f2 - 1, data = dat), 'f1:f21 - f2:f22 = 0')$linfct > stopifnot(all.equal(max(abs(lf - c(1, 0, 0, -1, 0, 0))), 0)) > > ### plotting one-sided confidence intervals > amod <- aov(breaks ~ wool + tension, data = warpbreaks) > wht <- glht(amod, linfct = mcp(tension = "Tukey"), alternative="greater") > plot(wht, xlim=c(-30, 30), main="right side was missing") > wht <- glht(amod, linfct = mcp(tension = "Tukey"), alternative="less") > plot(wht, xlim=c(-40, 20), main="left side was missing") > > ### reported by Christian Ritz > summary(glht(parm(1:4,matrix(c(1,0.97,0.89,0.74, + 0.97,1,0.97,0.89, + 0.89,0.97,1,0.97, + 0.74,0.89,0.97,1), 4, 4)))) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) V1 == 0 1 1 1 1 V2 == 0 2 1 2 1 V3 == 0 3 1 3 1 V4 == 0 4 1 4 1 (Adjusted p values reported -- single-step method) Warning messages: 1: In RET$pfunction("adjusted", ...) : Covariance matrix not positive semidefinite 2: In RET$pfunction("adjusted", ...) : Covariance matrix not positive semidefinite 3: In RET$pfunction("adjusted", ...) : Covariance matrix not positive semidefinite 4: In RET$pfunction("adjusted", ...) : Covariance matrix not positive semidefinite > > > ### reported by Melissa Chester Key (Apr 22, 2016) > set.seed(2343) > > X <- data.frame(X1 = rep(c(1,0),c(20,30)), + X2 = rep(rep(c(1,0),3),c(rep(10,4),0,10)), + X3 = rep(rep(c(1,0),5),each=5)) > Y <- rnorm(50,4 + 4*X[,1] + 4*X[,2] + X[,3] + .5*X[,1]*X[,3] + .4*X[,2]*X[,3],.25) > > model <- lm(Y ~ (X1 + X2) * X3,data=X) > coef(model) (Intercept) X1 X2 X3 X1:X3 X2:X3 3.9848 4.0608 4.0318 0.9166 0.4455 0.4605 > > my.contrasts<- c( + "X1 - X2 + .5*X1:X3 - .5*X2:X3 = 0", # previously wrong answer (actually got X1 + X2 + 0.5* X1) + "X1 + .5*X1:X3 - X2 - .5*X2:X3 = 0", # previously wrong answer + "X1 + .5*X1:X3 - .5*X2:X3 - X2 = 0") # right answer > > (contrast.result <- glht(model,lin = my.contrasts)) General Linear Hypotheses Linear Hypotheses: Estimate X1 - X2 + 0.5 * X1:X3 - 0.5 * X2:X3 == 0 0.0215 X1 + 0.5 * X1:X3 - X2 - 0.5 * X2:X3 == 0 0.0215 X1 + 0.5 * X1:X3 - 0.5 * X2:X3 - X2 == 0 0.0215 > > # right calculation > (ok <- sum(coef(model) * c(0,1,-1,0,.5,-.5))) [1] 0.02154 > > stopifnot(all.equal(as.numeric(coef(contrast.result)), rep(sum(coef(model) * c(0,1,-1,0,.5,-.5)),3))) > > > # actual calculation - note that -1 has changed to 1 > #sum(coef(model) * c(0, 1, 1, 0, .5, -.5)) > > > (mc <- multcomp:::chrlinfct2matrix(my.contrasts, names(coef(model)))) $K (Intercept) X1 X2 X3 X1:X3 X2:X3 X1 - X2 + 0.5 * X1:X3 - 0.5 * X2:X3 0 1 -1 0 0.5 -0.5 X1 + 0.5 * X1:X3 - X2 - 0.5 * X2:X3 0 1 -1 0 0.5 -0.5 X1 + 0.5 * X1:X3 - 0.5 * X2:X3 - X2 0 1 -1 0 0.5 -0.5 $m [1] 0 0 0 $alternative [1] "two.sided" > > stopifnot(all.equal(as.numeric(mc$K[1,c('(Intercept)', 'X1','X2', 'X3','X1:X3','X2:X3')]),c( 0,1,-1 ,0, 0.5,-0.5))) > stopifnot(all.equal(as.numeric(mc$K[2,c('(Intercept)', 'X1','X2', 'X3','X1:X3','X2:X3')]),c( 0,1,-1 ,0, 0.5,-0.5))) > stopifnot(all.equal(as.numeric(mc$K[3,c('(Intercept)', 'X1','X2', 'X3','X1:X3','X2:X3')]),c( 0,1,-1 ,0, 0.5,-0.5))) > > ### "(Intercept)" in char exprs for linfct > x <- runif(100) > y <- rnorm(length(x)) > m <- lm(y ~ x) > > stopifnot(all.equal(coef(glht(m, linfct = "(Intercept) = 0")), + coef(m)["(Intercept)"], check.attrributes = FALSE)) > stopifnot(all.equal(coef(glht(m, linfct = "(Intercept) + x = 0")), + sum(coef(m)), check.attributes = FALSE)) > > > proc.time() user system elapsed 1.164 0.064 1.224 multcomp/tests/regtest-fixest.R0000644000176200001440000000167614172227611016371 0ustar liggesusers ### fixed effects models ### methods and tests contributed by Grant McDermott (@grantmcdermott) library("multcomp", quietly = TRUE) fixestOK <- require("fixest", quietly = TRUE) if (fixestOK) { lmod <- lm(Sepal.Length ~ Sepal.Width + as.factor(Species), iris) fmod <- feols(Sepal.Length ~ Sepal.Width + as.factor(Species), iris) fmod2 <- feols(Sepal.Length ~ Sepal.Width | Species, iris, vcov = "iid") ## see next model too fmod3 <- feols(Sepal.Length ~ Sepal.Width | Species, iris) ## default vcov is clustered by Species glmod <- glht(lmod, "Sepal.Width==0") gfmod <- glht(fmod, "Sepal.Width==0") gfmod2 <- glht(fmod2, "Sepal.Width==0") gfmod3 <- glht(fmod3, "Sepal.Width==0", vcov = "iid") stopifnot(all.equal(confint(glmod)$confint, confint(gfmod)$confint)) stopifnot(all.equal(confint(glmod)$confint, confint(gfmod2)$confint)) stopifnot(all.equal(confint(glmod)$confint, confint(gfmod3)$confint)) } multcomp/tests/regtest-anova.R0000644000176200001440000000257614172227611016173 0ustar liggesusers library("multcomp") tol <- sqrt(.Machine$double.eps) set.seed(29081975) df <- data.frame(y = rnorm(100), x = runif(100), z = runif(100)) ### linear model fam <- gaussian() lm0 <- glm(y ~ 1, data = df, family = fam) lm1 <- glm(y ~ x, data = df, family = fam) lm2 <- glm(y ~ x + z, data = df, family = fam) gh <- glht(lm2, linfct = c("x = 0", "z = 0")) stopifnot(abs(anova(lm0, lm2, test = "F")[2, 6] - summary(gh, test = Ftest())$test$pvalue) < tol) stopifnot(abs(anova(lm0, lm2, test = "Chisq")[2, 5] - summary(gh, test = Chisqtest())$test$pvalue) < tol) gh <- glht(lm2, linfct = "z = 0") stopifnot(abs(anova(lm1, lm2, test = "F")[2, 6] - summary(gh, test = Ftest())$test$pvalue) < tol) stopifnot(abs(anova(lm1, lm2, test = "Chisq")[2, 5] - summary(gh, test = Chisqtest())$test$pvalue) < tol) ### logistic regression df$y <- factor(df$y < 0) fam <- binomial() lm0 <- glm(y ~ 1, data = df, family = fam) lm1 <- glm(y ~ x, data = df, family = fam) lm2 <- glm(y ~ x + z, data = df, family = fam) if (require("lmtest")) { gh <- glht(lm2, linfct = c("x = 0", "z = 0")) stopifnot(abs(waldtest(lm0, lm2, test = "Chisq")[2, 4] - summary(gh, test = Chisqtest())$test$pvalue) < tol) gh <- glht(lm2, linfct = "z = 0") stopifnot(abs(waldtest(lm1, lm2, test = "Chisq")[2, 4] - summary(gh, test = Chisqtest())$test$pvalue) < tol) } multcomp/tests/regtest-survival.R0000644000176200001440000000071114172227611016727 0ustar liggesusers library("survival") library("multcomp") set.seed(29) bladder1 <- bladder[bladder$enum < 5, ] bladder1$number <- as.factor(bladder1$number) cm <- coxph(Surv(stop, event) ~ rx + size + number + strata(enum) + cluster(id), data = bladder1) summary(glht(cm, mcp(number = "Dunnett"))) wm <- survreg(Surv(stop, event) ~ rx + size + number + strata(enum) + cluster(id), data = bladder1) summary(glht(wm, mcp(number = "Dunnett"))) multcomp/tests/regtest-lme.Rout.save0000644000176200001440000000465214172227611017326 0ustar liggesusers R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ### mixed effects models > ### feature request by John Wilkinson > ### and Dieter Menne > > library("multcomp") Loading required package: mvtnorm Loading required package: survival Loading required package: TH.data Loading required package: MASS Attaching package: 'TH.data' The following object is masked from 'package:MASS': geyser > > lme4OK <- require("lme4") Loading required package: lme4 Loading required package: Matrix > if (lme4OK) { + + data("ergoStool", package = "nlme") + K <- glht(aov(effort ~ Type, data = ergoStool), mcp(Type = "Tukey"))$linfct + + stool.lmer <- lmer(effort ~ Type + (1 | Subject), + data = ergoStool) + glme4 <- glht(stool.lmer, K) + glme41 <- glht(stool.lmer, mcp(Type = "Tukey")) + stopifnot(all.equal(coef(glme4), coef(glme41))) + print(summary(glme41, test = Chisqtest())) + + nlmeOK <- require("nlme") + if (nlmeOK) { + + stool.lme <- lme(effort ~ Type, data = ergoStool, + random = ~ 1 | Subject) + gnlme <- glht(stool.lme,K) + stopifnot(all.equal(coef(glme4), coef(gnlme))) + + gnlme2 <- glht(stool.lme, linfct = mcp(Type = "Tukey")) + stopifnot(all.equal(coef(glme4), coef(gnlme2))) + } + } General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate T2 - T1 == 0 3.8889 T3 - T1 == 0 2.2222 T4 - T1 == 0 0.6667 T3 - T2 == 0 -1.6667 T4 - T2 == 0 -3.2222 T4 - T3 == 0 -1.5556 Global Test: Chisq DF Pr(>Chisq) 1 67.07 3 1.812e-14 Loading required package: nlme Attaching package: 'nlme' The following object is masked from 'package:lme4': lmList > > proc.time() user system elapsed 1.304 0.032 1.331 multcomp/tests/regtest-Tukey.Rout.save0000644000176200001440000000670114172227611017647 0ustar liggesusers R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > 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) > > data("warpbreaks") > fm1 <- aov(breaks ~ wool + tension, data = warpbreaks) > > TukeyHSD(fm1, "tension", ordered = FALSE) 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 > confint(glht(fm1, linfct = mcp(tension = "Tukey"))) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ wool + tension, data = warpbreaks) Quantile = 2.4156 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr M - L == 0 -10.0000 -19.3542 -0.6458 H - L == 0 -14.7222 -24.0764 -5.3681 H - M == 0 -4.7222 -14.0764 4.6319 > summary(glht(fm1, linfct = mcp(tension = "Tukey"))) 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.03369 * H - L == 0 -14.722 3.872 -3.802 0.00105 ** H - M == 0 -4.722 3.872 -1.219 0.44740 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Adjusted p values reported -- single-step method) > > TukeyHSD(fm1, "wool", ordered = FALSE) Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = breaks ~ wool + tension, data = warpbreaks) $wool diff lwr upr p adj B-A -5.777778 -12.12841 0.5728505 0.0736137 > confint(glht(fm1, linfct = mcp(wool = "Tukey"))) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ wool + tension, data = warpbreaks) Quantile = 2.0086 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr B - A == 0 -5.7778 -12.1284 0.5729 > summary(glht(fm1, linfct = mcp(wool = "Tukey"))) 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|) B - A == 0 -5.778 3.162 -1.827 0.0736 . --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Adjusted p values reported -- single-step method) > > proc.time() user system elapsed 0.364 0.012 0.373 multcomp/tests/regtest-interface.Rout.save0000644000176200001440000001125714172227611020510 0ustar liggesusers R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > 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) > > testdata <- data.frame(y = rnorm(21), + f1 <- factor(c(rep(c("A", "B", "C"), 7))), + f2 <- factor(c(rep("D", 10), rep("E", 11))), + x <- rnorm(21)) > > # one-way ANOVA > coef(amod <- aov(y ~ f1, data = testdata)) (Intercept) f1B f1C -0.4394751 0.5151680 0.6886101 > glht(amod, linfct = mcp(f1 = "Dunnett")) General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Linear Hypotheses: Estimate B - A == 0 0.5152 C - A == 0 0.6886 > > # and a continuous covariable: ANCOVA > coef(lmod <- lm(y ~ f1 + x, data = testdata)) (Intercept) f1B f1C x -0.434528566 0.509444592 0.686181780 -0.009491201 > glht(lmod, linfct = mcp(f1 = "Dunnett")) General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Linear Hypotheses: Estimate B - A == 0 0.5094 C - A == 0 0.6862 > > # ANCOVA with an additional factor as covariable > coef(lmod <- lm(y ~ f1 + f2 + x, data = testdata)) (Intercept) f1B f1C f2E x -0.40849498 0.51296437 0.69200699 -0.05266965 -0.01613183 > glht(lmod, linfct = mcp(f1 = "Dunnett")) General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Linear Hypotheses: Estimate B - A == 0 0.513 C - A == 0 0.692 > > # and with interaction terms > coef(lmod <- lm(y ~ f1 + f2 + f2:f1 + x, data = testdata)) (Intercept) f1B f1C f2E x f1B:f2E -0.44532319 0.70282663 0.65613337 0.05552324 -0.03443721 -0.37862471 f1C:f2E 0.02753451 > glht(lmod, linfct = mcp(f1 = "Dunnett")) General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Linear Hypotheses: Estimate B - A == 0 0.7028 C - A == 0 0.6561 Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > # with contrasts as expressions > glht(lmod, linfct = mcp(f1 = c("B - A = 0", "C - A = 0"))) General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Linear Hypotheses: Estimate B - A == 0 0.7028 C - A == 0 0.6561 Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > tmp <- multcomp:::chrlinfct2matrix(c(l1 = "x1 - x2 = 2", + l2 = "x2 + 3 * x3 = 1"), + paste("x", 1:3, sep = "")) > > stopifnot(max(abs(tmp$K - rbind(c(1, -1, 0), c(0, 1, 3)))) < sqrt(.Machine$double.eps)) > stopifnot(max(abs(tmp$m - c(2, 1))) < sqrt(.Machine$double.eps)) > > ### coef.survreg and vcov.survreg need special tuning > ### thx to Z for pointing this out > if (require("survival")) { + smod <- survreg(Surv(futime, fustat) ~ ecog.ps + rx, + data = ovarian, dist = 'weibull') + K <- diag(length(coef(smod))) + rownames(K) <- names(coef(smod)) + glht(smod, linfct = K) + } General Linear Hypotheses Linear Hypotheses: Estimate (Intercept) == 0 6.8967 ecog.ps == 0 -0.3850 rx == 0 0.5286 > > ### new `means' comparisons > amod <- aov(weight ~ dose + gesttime + number, data = litter) > confint(glht(amod, linfct = mcp(dose = "Means"))) Simultaneous Confidence Intervals Multiple Comparisons of Means: Mean Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Quantile = 2.5558 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr 0 == 0 32.3651 30.0805 34.6498 5 == 0 29.0127 26.6372 31.3883 50 == 0 30.0743 27.5239 32.6246 500 == 0 29.6899 27.1591 32.2207 > > proc.time() user system elapsed 0.516 0.012 0.525 multcomp/tests/regtest-survival.Rout.save0000644000176200001440000000540614172227611020422 0ustar liggesusers R version 4.0.2 (2020-06-22) -- "Taking Off Again" Copyright (C) 2020 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("survival") > library("multcomp") Loading required package: mvtnorm Loading required package: TH.data Loading required package: MASS Attaching package: 'TH.data' The following object is masked from 'package:MASS': geyser > set.seed(29) > > bladder1 <- bladder[bladder$enum < 5, ] > bladder1$number <- as.factor(bladder1$number) > > cm <- coxph(Surv(stop, event) ~ rx + size + number + strata(enum) + + cluster(id), data = bladder1) > summary(glht(cm, mcp(number = "Dunnett"))) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: coxph(formula = Surv(stop, event) ~ rx + size + number + strata(enum), data = bladder1, cluster = id) Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) 2 - 1 == 0 0.7895 0.5124 1.541 0.494 3 - 1 == 0 0.3848 0.4699 0.819 0.941 4 - 1 == 0 0.7933 0.6487 1.223 0.727 5 - 1 == 0 1.3446 0.6269 2.145 0.160 6 - 1 == 0 2.4325 0.3440 7.071 <0.001 *** 8 - 1 == 0 0.8000 0.3502 2.285 0.115 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Adjusted p values reported -- single-step method) > > wm <- survreg(Surv(stop, event) ~ rx + size + number + strata(enum) + + cluster(id), data = bladder1) > summary(glht(wm, mcp(number = "Dunnett"))) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: survreg(formula = Surv(stop, event) ~ rx + size + number + strata(enum), data = bladder1, cluster = id) Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) 2 - 1 == 0 -0.4609 0.3232 -1.426 0.5374 3 - 1 == 0 -0.2325 0.2918 -0.797 0.9328 4 - 1 == 0 -0.6017 0.3422 -1.758 0.3184 5 - 1 == 0 -1.0458 0.3844 -2.721 0.0338 * 6 - 1 == 0 -1.4714 0.2949 -4.989 <0.001 *** 8 - 1 == 0 -0.3075 0.2944 -1.044 0.8089 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Adjusted p values reported -- single-step method) > > > proc.time() user system elapsed 1.208 0.079 1.282 multcomp/tests/regtest-mmm.Rout.save0000644000176200001440000001673614172227611017345 0ustar liggesusers R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > 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 > > ### compare results of mmod and glht.mlf > > ### code by Christian Ritz > "mmod" <- function(modelList, varName, seType = "san") + { + require(multcomp, quietly = TRUE) + require(sandwich, quietly = TRUE) + + if (length(seType) == 1) {seType <- rep(seType, length(modelList))} + if (length(varName) == 1) {varName <- rep(varName, length(modelList))} + + ## Extracting score contributions from the individual model fits + makeIIDdecomp <- function(modelObject, varName) + { + numObsUsed <- ifelse(inherits(modelObject, "coxph"), modelObject$n, nrow(modelObject$model)) + iidVec0 <- bread(modelObject)[varName, , drop = FALSE] %*% t(estfun(modelObject)) + moNAac <- modelObject$na.action + numObs <- numObsUsed + length(moNAac) + iidVec <- rep(0, numObs) + if (!is.null(moNAac)) + { + iidVec[-moNAac] <- sqrt(numObs/numObsUsed) * iidVec0 + } + else { + iidVec <- iidVec0 + } + list(iidVec = iidVec, numObsUsed = numObsUsed, numObs = numObs) + } + numModels <- length(modelList) + if (identical(length(varName), 1)) + { + varName <- rep(varName, numModels) + } + iidList <- mapply(makeIIDdecomp, modelList, varName, SIMPLIFY = FALSE) + iidresp <- matrix(as.vector(unlist(lapply(iidList, function(listElt) {listElt[[1]]}))), nrow = numModels, byrow = TRUE) + pickFct <- function(modelObject, varName, matchStrings) + { + as.vector(na.omit((coef(summary(modelObject))[varName, ])[matchStrings])) + } + + ## Retrieving parameter estimates from the individual fits + estVec <- as.vector(unlist(mapply(pickFct, modelList, varName, MoreArgs = list(matchStrings = c("Estimate", "coef"))))) + # "Estimate" or "coef" used in glm(), lm() and coxph() summary output, respectively + + ## Calculating the estimated variance-covariance matrix of the parameter estimates + numObs <- iidList[[1]]$numObs + covar <- (iidresp %*% t(iidresp)) / numObs + vcMat <- covar / numObs # Defining the finite-sample variance-covariance matrix + + ## Replacing sandwich estimates by model-based standard errors + modbas <- seType == "mod" + if (any(modbas)) + { + corMat <- cov2cor(vcMat) + ## Retrieving standard errors for the specified estimate from the individual fits + modSE <- as.vector(unlist(mapply(pickFct, modelList, varName, MoreArgs = list(matchStrings = c("Std. Error", "se(coef)"))))) + + sanSE <- sqrt(diag(vcMat)) + sanSE[modbas] <- modSE[modbas] + vcMat <- diag(sanSE) %*% corMat %*% diag(sanSE) + } + + ## Naming the parameter vector (easier way to extract the names of the model fits provided as a list in the first argument?) + names1 <- sub("list", "", deparse(substitute(modelList)), fixed = TRUE) + names2 <- sub("(", "", names1, fixed = TRUE) + names3 <- sub(")", "", names2, fixed = TRUE) + names4 <- sub(" ", "", names3, fixed = TRUE) + names(estVec) <- unlist(strsplit(names4, ",")) + + return(parm(coef = estVec, vcov = vcMat, df = 0)) + } > > > > > > set.seed(29) > ## Combining linear regression and logistic regression > 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 > simult.x12 <- mmod(list(m1, m2), c("x12", "x12")) > summary(glht(simult.x12)) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) m1 == 0 -0.3537 0.2808 -1.260 0.312 m2 == 0 -0.6409 0.5681 -1.128 0.382 (Adjusted p values reported -- single-step method) > > ## Simultaneous inference for different parameters in the 2 model fits > simult.x12.x13 <- mmod(list(m1, m2), c("x12", "x13")) > summary(glht(simult.x12.x13)) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) m1 == 0 -0.3537 0.2808 -1.260 0.351 m2 == 0 -0.8264 0.5874 -1.407 0.276 (Adjusted p values reported -- single-step method) > > ## Simultaneous inference for different and identical parameters in the 2 model fits > simult.x12x2.x13 <- mmod(list(m1, m1, m2), c("x12", "x13", "x13")) > summary(glht(simult.x12x2.x13)) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) m1 == 0 -0.3537 0.2808 -1.260 0.407 m1 == 0 -0.4220 0.2801 -1.507 0.274 m2 == 0 -0.8264 0.5874 -1.407 0.323 (Adjusted p values reported -- single-step method) > confint(glht(simult.x12x2.x13)) Simultaneous Confidence Intervals Fit: NULL Quantile = 2.3087 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr m1 == 0 -0.3537 -1.0019 0.2945 m1 == 0 -0.4220 -1.0687 0.2247 m2 == 0 -0.8264 -2.1825 0.5297 > > > ## 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)) > > modely1.1 <- glm(y1.1 ~ group, family = binomial) > modely1.2 <- glm(y1.2 ~ group, family = binomial) > > mmObj.y1 <- mmod(list(modely1.1, modely1.2), "groupB") > simult.y1 <- glht(mmObj.y1) > summary(simult.y1) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) modely1.1 == 0 0.8473 0.4186 2.024 0.084 . modely1.2 == 0 0.2404 0.4008 0.600 0.796 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (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)) > > modely2.1 <- glm(y2.1 ~ group, family = binomial) > modely2.2 <- glm(y2.2 ~ group, family = binomial) > > mmObj.y2 <- mmod(list(modely2.1, modely2.2), "groupB") > simult.y2 <- glht(mmObj.y2) > summary(simult.y2) Simultaneous Tests for General Linear Hypotheses Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) modely2.1 == 0 0.2412 0.4015 0.601 0.548 modely2.2 == 0 0.2412 0.4015 0.601 0.548 (Adjusted p values reported -- single-step method) > > > proc.time() user system elapsed 0.352 0.012 0.359 multcomp/tests/regtest-interface.R0000644000176200001440000000316614172227611017023 0ustar liggesusers library("multcomp") set.seed(290875) testdata <- data.frame(y = rnorm(21), f1 <- factor(c(rep(c("A", "B", "C"), 7))), f2 <- factor(c(rep("D", 10), rep("E", 11))), x <- rnorm(21)) # one-way ANOVA coef(amod <- aov(y ~ f1, data = testdata)) glht(amod, linfct = mcp(f1 = "Dunnett")) # and a continuous covariable: ANCOVA coef(lmod <- lm(y ~ f1 + x, data = testdata)) glht(lmod, linfct = mcp(f1 = "Dunnett")) # ANCOVA with an additional factor as covariable coef(lmod <- lm(y ~ f1 + f2 + x, data = testdata)) glht(lmod, linfct = mcp(f1 = "Dunnett")) # and with interaction terms coef(lmod <- lm(y ~ f1 + f2 + f2:f1 + x, data = testdata)) glht(lmod, linfct = mcp(f1 = "Dunnett")) # with contrasts as expressions glht(lmod, linfct = mcp(f1 = c("B - A = 0", "C - A = 0"))) tmp <- multcomp:::chrlinfct2matrix(c(l1 = "x1 - x2 = 2", l2 = "x2 + 3 * x3 = 1"), paste("x", 1:3, sep = "")) stopifnot(max(abs(tmp$K - rbind(c(1, -1, 0), c(0, 1, 3)))) < sqrt(.Machine$double.eps)) stopifnot(max(abs(tmp$m - c(2, 1))) < sqrt(.Machine$double.eps)) ### coef.survreg and vcov.survreg need special tuning ### thx to Z for pointing this out if (require("survival")) { smod <- survreg(Surv(futime, fustat) ~ ecog.ps + rx, data = ovarian, dist = 'weibull') K <- diag(length(coef(smod))) rownames(K) <- names(coef(smod)) glht(smod, linfct = K) } ### new `means' comparisons amod <- aov(weight ~ dose + gesttime + number, data = litter) confint(glht(amod, linfct = mcp(dose = "Means"))) multcomp/tests/bugfix.R0000644000176200001440000002025214442105224014662 0ustar liggesusers options(digits = 4) library("multcomp") RNGversion("3.5.2") 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))) ### was: error summary(cht1)$test$coefficients ### 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"))) try(glht(tmp.aov, linfct=mcp(FF="Tukey"))) glht(tmp.aov, linfct=mcp(GG="Tukey")) ### covariate interactions: fire a warning tmp.aov <- aov(z ~ w*GG , data=tmp.data) glht(tmp.aov, linfct = mcp(GG = "Tukey")) ### stop with informative error message amod <- aov(breaks ~ tension + Error(wool), data = warpbreaks) try(glht(amod, linfct = mcp(tension = "Tukey"))) ### print error, spotted by Rich amod <- aov(breaks ~ wool * tension, data = warpbreaks) wht <- glht(amod, linfct = mcp(tension = "Tukey")) tmp <- confint(wht, calpha=2) print(tmp) ### 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"))) tmp <- warpbreaks class(tmp$tension) <- "numeric" amod <- aov(breaks ~ tension, data = tmp) try(glht(amod, linfct = mcp(tension = "Tukey"))) ### 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")) ### better error message ### suggested by Rich amod <- aov(breaks ~ tension, data = warpbreaks) try(glht(amod, linfct = mcp(tension = "Warp"))) ### 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) } ### 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")) ### 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)))) ### reported by Melissa Chester Key (Apr 22, 2016) set.seed(2343) X <- data.frame(X1 = rep(c(1,0),c(20,30)), X2 = rep(rep(c(1,0),3),c(rep(10,4),0,10)), X3 = rep(rep(c(1,0),5),each=5)) Y <- rnorm(50,4 + 4*X[,1] + 4*X[,2] + X[,3] + .5*X[,1]*X[,3] + .4*X[,2]*X[,3],.25) model <- lm(Y ~ (X1 + X2) * X3,data=X) coef(model) my.contrasts<- c( "X1 - X2 + .5*X1:X3 - .5*X2:X3 = 0", # previously wrong answer (actually got X1 + X2 + 0.5* X1) "X1 + .5*X1:X3 - X2 - .5*X2:X3 = 0", # previously wrong answer "X1 + .5*X1:X3 - .5*X2:X3 - X2 = 0") # right answer (contrast.result <- glht(model,lin = my.contrasts)) # right calculation (ok <- sum(coef(model) * c(0,1,-1,0,.5,-.5))) stopifnot(all.equal(as.numeric(coef(contrast.result)), rep(sum(coef(model) * c(0,1,-1,0,.5,-.5)),3))) # actual calculation - note that -1 has changed to 1 #sum(coef(model) * c(0, 1, 1, 0, .5, -.5)) (mc <- multcomp:::chrlinfct2matrix(my.contrasts, names(coef(model)))) stopifnot(all.equal(as.numeric(mc$K[1,c('(Intercept)', 'X1','X2', 'X3','X1:X3','X2:X3')]),c( 0,1,-1 ,0, 0.5,-0.5))) stopifnot(all.equal(as.numeric(mc$K[2,c('(Intercept)', 'X1','X2', 'X3','X1:X3','X2:X3')]),c( 0,1,-1 ,0, 0.5,-0.5))) stopifnot(all.equal(as.numeric(mc$K[3,c('(Intercept)', 'X1','X2', 'X3','X1:X3','X2:X3')]),c( 0,1,-1 ,0, 0.5,-0.5))) ### "(Intercept)" in char exprs for linfct x <- runif(100) y <- rnorm(length(x)) m <- lm(y ~ x) stopifnot(all.equal(coef(glht(m, linfct = "(Intercept) = 0")), coef(m)["(Intercept)"], check.attrributes = FALSE)) stopifnot(all.equal(coef(glht(m, linfct = "(Intercept) + x = 0")), sum(coef(m)), check.attributes = FALSE)) multcomp/tests/regtest-interface-extended.R0000644000176200001440000002236414172227611020622 0ustar liggesusers### test the extended interpreter for the left hand side of linear hypotheses ### Features: ### - fully recursive expression parser built upon a small code fragment copied over from base::codetools ### - the parser stops if any of the following conditions is not met: ### - any variable must be addressed only once ### - all operators and functions must finally evaluate to a a real valued literal ### - function parameters must not denote an effect name ### - effects can not be multiplied or divided by another effect ### - additive or subtractive terms involving an effect and a numeric ### constants must not be specified ### - coefficients associated with named effects must not evaluate to zero ### ### Examples: ### x1 + x1 == 0 -> not accepted ### x1 + x2 -1 == 0 -> not accepted ### x1 * x2 == 0 -> not accepted ### x1 / x2 == 0 -> not accepted ### f(x1) == 0 -> not accepted if x1 denotes an effect ### 2*3 == 6 -> not accepted because no effect was named ### x1 + x2*0 == 0 -> not accepted because this is likely an oversight ### x1 + 3*(4-5+1)*x2 == 0 -> not accepted because this is likely an oversight ### x1*3/0 == 0 -> not accepted because coefficient would become infinite ### log(-1)*x1 == 0 -> not accepted, because the result is not finite ### x1 + x2 +0 == 0 -> accepted because adding zero does not make a difference ### sin(pi/2) * x1 == 0 -> accepted if 'pi' is not an effect ### sin(Pi/2) * x1 == 0 -> accepted if 'Pi' is not an effect. However, if the environment does not define Pi the evaluation may still fail. tmp <- multcomp:::chrlinfct2matrix( c( l01 = " x1 - x2 = 2" , l02 = " x2 + 3 * x3 = 1" , l03 = " (x1 - x2) - (x3 - x4) = 0" , l04 = "+(x1 - x2)*-2 - (1/3+2)*( +x3 - 2*x4 ) = -1" , l05 = "-(x1 - x2)*-2 - (1/3+2)*( -x3 - 2*x4 ) = -2" , l06 = "-(x1 - x2)*-2 - (1/3+2)*( -x3 - 2*x4 )*7/-10 = -3" , l07 = "-1*(x1:x2 - x1:x2:x3) - x3 = -4" , l08 = "-(x1:x2 - x1:x2:x3) - x3 = -4" , l09 = "-(x1:x2 - 3*x1:x2:x3)*-2 - x3 -5/3*-x4= -5" , l10 = "--cos(pi/2)*x1 - 10*(log(10^-3)+1)*-x2 -10^-3*x3 + -exp(-2)*x4= -6" , l11 = " x1 + x2 + 0 = -7" ), c('x1','x2','x3','x4','x1:x2','x1:x2:x3') ) stopifnot(max(abs( dK <- tmp$K - rbind( c( 1, -1, 0, 0, 0, 0 ) , c( 0, 1, 3, 0, 0, 0 ) , c( 1, -1, -1, 1, 0, 0 ) , c( -2, 2, -(1/3+2), 2*(1/3+2), 0, 0 ) , c( 2, -2, (1/3+2), 2*(1/3+2), 0, 0 ) , c( 2, -2, (1/3+2)*-7/10, 2*(1/3+2)*-7/10, 0, 0 ) , c( 0, 0, -1, 0, -1, 1 ) , c( 0, 0, -1, 0, -1, 1 ) , c( 0, 0, -1, -5/3*-1, 2, -6 ) , c( --cos(pi/2), 10*(log(10^-3)+1), -10^-3, -exp(-2), 0, 0 ) , c( 1, 1, 0, 0, 0, 0 ) ))) < sqrt(.Machine$double.eps)) stopifnot(max(abs( tmp$m - c( 2 , 1 , 0 , -1 , -2 , -3 , -4 , -4 , -5 , -6 , -7 ))) < sqrt(.Machine$double.eps)) expectFail <- function(testname, x) { if ( class(x) != 'try-error' ) { stop(testname, ' unexpectedly succeeded. Result is: ', paste(x, collapse = ', '),'\n') } message(testname, ' expectedly failed. Message is: ', attr(x,'condition')$message, '\n') } expectSucc <- function(testname, x,expected) { if ( class(x) == 'try-error' ) { stop(testname, ' unexpectedly failed. Message is: ', attr(x,'condition')$message, '\n') } message(testname, ' expectedly succeeded.', ' Expected result is: ', paste(x, collapse = ', '), ', ', ' actual result is: ', paste(x, collapse = ', '), '\n') stopifnot(all.equal(as.vector(x$K),expected$K)) stopifnot(all.equal(as.vector(x$m),expected$m)) stopifnot(all(as.vector(x$alternative) %in% expected$alternative)) } expectFail('test 01', try( multcomp:::chrlinfct2matrix( c('x1 - x1 = 0'), c('x1','x2')), silent = T)) expectFail('test 02', try( multcomp:::chrlinfct2matrix( c('x1 - X2 = 0'), c('x1','x2')), silent = T)) expectFail('test 03', try( multcomp:::chrlinfct2matrix( c('x1 - x2 -1 = 0'), c('x1','x2')), silent = T)) expectFail('test 04', try( multcomp:::chrlinfct2matrix( c('x1 * x2 = 0'), c('x1','x2')), silent = T)) expectFail('test 05', try( multcomp:::chrlinfct2matrix( c('x1 / x2 = 0'), c('x1','x2')), silent = T)) expectFail('test 06', try( multcomp:::chrlinfct2matrix( c('x1 - exp(x2) = 0'), c('x1','x2')), silent = T)) expectFail('test 07', try( multcomp:::chrlinfct2matrix( c('sin(Pi)*x1 = 0'), c('x1','x2')), silent = T)) expectFail('test 08', try( multcomp:::chrlinfct2matrix( c('3*4 = 0'), c('x1','x2')), silent = T)) expectFail('test 09', try( multcomp:::chrlinfct2matrix( c('x1 + 3*(4-5+1)*x2 = 0'), c('x1','x2')), silent = T)) expectFail('test 10', try( multcomp:::chrlinfct2matrix( c('x1*3/0 = 0'), c('x1','x2')), silent = T)) expectFail('test 11', try( multcomp:::chrlinfct2matrix( c('log(-1)*x1 = 0'), c('x1','x2')), silent = T)) expectSucc('test 12', try( multcomp:::chrlinfct2matrix( c('x1 -x2 -1/2*(-x2:x3 + x4:x5) = 0'), c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3','x4:x5')), silent = T), expected = list( K = c( 1, -1, 0, 0, 0, 1/2, -1/2), m = 0, alternative = 'two.sided')) expectSucc('test 13', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(--x2:x3 + x4:x5) = 0'), c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3','x4:x5')), silent = T), expected = list( K = c( 1, -1, 0, 0, 0, -1/2, -1/2), m = 0, alternative = 'two.sided')) expectSucc('test 14', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(`-x2:x3` + x4:x5) = 0'), c( 'x1', 'x2', 'x3', 'x4', 'x5', '-x2:x3','x4:x5')), silent = T), expected = list( K = c( 1, -1, 0, 0, 0, -1/2, -1/2), m = 0, alternative = 'two.sided')) expectSucc('test 15', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(-(x2:x3) + x4:x5) = 0'), c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3','x4:x5')), silent = T), expected = list( K = c( 1, -1, 0, 0, 0, 1/2, -1/2), m = 0, alternative = 'two.sided')) expectSucc('test 16', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(-1*x2:x3 + x4:x5) = 0'), c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3','x4:x5')), silent = T), expected = list( K = c( 1, -1, 0, 0, 0, 1/2, -1/2), m = 0, alternative = 'two.sided')) expectSucc('test 17', try( multcomp:::chrlinfct2matrix( c( 'x1 -x2 -1/2*(+-+--x2:x3:x4 + x4:x5) = 0'), c( 'x1', 'x2', 'x3', 'x4', 'x5', 'x2:x3:x4','x4:x5')), silent = T), expected = list( K = c( 1, -1, 0, 0, 0, 1/2, -1/2), m = 0, alternative = 'two.sided')) expectFail('test 18', try( multcomp:::chrlinfct2matrix( c( 'x1 - x2 - 1/2 * ( x2:-x3 + x4:x5 ) = 0'), c( 'x1','x2','x2:x3','x4:x5')), silent = T)) multcomp/tests/regtest-lme.R0000644000176200001440000000172314172227611015635 0ustar liggesusers ### mixed effects models ### feature request by John Wilkinson ### and Dieter Menne library("multcomp") lme4OK <- require("lme4") 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))) } } multcomp/MD50000644000176200001440000001243315075342105012427 0ustar liggesusersd9a79f6e5afcbba6e044e2d035171e4c *DESCRIPTION 436ec96f3cd15d84fe0195af79756df7 *NAMESPACE 25dc8b7f0ff050e027ca045c4c1ae2d6 *R/cld.R 86c9bc1e46e0217861bb8b16e5496ce5 *R/contrMat.R 9c26c4f97f5fce8257a0d5b29bd88544 *R/expressions.R b2bcdf05c0c07e95b2c537a0ba6a7894 *R/glht.R 0fd2d4345b64307b5c7737f3ea54021d *R/helpers.R 9dba312a1100ead0426531dc7ef25732 *R/maxsets.R 59b8a409c156171f336450267a5c9500 *R/mcp.R 2a908b5885569f86726f01ed479e104d *R/methods.R 4756b6e2ed189086490109391d2815d5 *R/mmm.R 152aafc38dfa2e01def20851d5ae81da *R/parm.R 89a738f023fdbe16cff5ed42b8c313e3 *R/plot.R 2ac5081d04afbd37bf416e2d189e34c4 *R/pqfunctions.R c915fa5fa08f6c97b3b23db83dee657b *R/print.R 903e3c5ab869b9ce5a74459b85d22789 *build/vignette.rds 591f052540e1edca9c1d4181661bce2e *cleanup e47d77ece20d7b6bd5360908b8cb9821 *data/adevent.rda 9b6cd0862ca8916ffe2d0fea5e196e02 *data/cholesterol.rda 592dcf8253e902597f2de495e6bc48ec *data/cml.rda 72a8a2a4a8edb1b8ff35ce0148db1307 *data/detergent.rda e8a33847c94deda1b7df7c0c522cf887 *data/fattyacid.rda f0411fe321285cd1d6b4371c2e8279f7 *data/litter.rda 9bea2474d2f805a25420293991b6c531 *data/mtept.rda c298df5ee9c95d89980ac42b97e7a837 *data/recovery.rda f3033fee09f12f3cfad26e8fccf308ec *data/sbp.rda 813799a244cf32c4d38419a0069a07d0 *data/trees513.rda 6e940b44f80af90e16e0eda38a8ba4aa *data/waste.rda 9b982e6ac6f6e03bcf6c5985fc5c3af6 *demo/00Index de110ff04e21cb95c1cfb854b93367cd *demo/Ch_Appl.R 75b699b0ab188063b76942f3f7fa381e *demo/Ch_Appl.Rout.save 24e4dddcd2ff68742a7c354304118d4a *demo/Ch_GLM.R 5f55d274380037bfc7318e4e7e235bec *demo/Ch_GLM.Rout.save abcec136cc3c2061438a0739b12c53c1 *demo/Ch_Intro.R ea46de75552a9ba0a233fce028b07f33 *demo/Ch_Intro.Rout.save 64ad37f52bd610f371273c1654ffbf53 *demo/Ch_Misc.R 53eef56dadc95a633e6bcb4e228ba98a *demo/Ch_Misc.Rout.save 7a06d9fc12cc38d7c3c6a16aa93e5932 *demo/Ch_Theory.R d316c2f75fb8f61c7b8e73fb39b65e9d *demo/Ch_Theory.Rout.save 61255d3d087c9618aba3365103a7e124 *inst/CITATION c330e0321b00523651d707a8b4399020 *inst/MCMT/MCMT.R 907242a5e32c8cae150f12dcd3019440 *inst/MCMT/MCMT.Rout 5ccc54941334fbd572cd4891c2009ccc *inst/MCMT/MCMT.Rout.save 26ccee8d5d8bc87c503e43bde27e282f *inst/MCMT/MCMT.rda abd0ee3bb82571b7fb64e8a2e1cf03a2 *inst/MCMT/multcomp.sas 05e1a3ac63d65116aa415b1b71bda887 *inst/NEWS 09ce7512593c1be00ee89ee431ca6112 *inst/deprecated/deprecated.R fe4cbe4e17edf996147191527f7e9efa *inst/deprecated/multcomp-deprecated.Rd 4fcad824fe2a0c192b10a18cd7da2146 *inst/deprecated/multcomp-oldtests.R 6f2f2667a0374a4f82e3a01067e18b11 *inst/deprecated/multcomp-oldtests.Rout.save d907054445c79c11992a98962d1eb11c *inst/doc/chfls1.R ce05718b9da7ead005053f493e83e08b *inst/doc/chfls1.Rnw de2d8c3600aeed50f5ec651afe37764b *inst/doc/chfls1.pdf 11763dfa2ce8432624a8105ed323fff9 *inst/doc/generalsiminf.R 322062c4d81f23400945e52ddd9febdf *inst/doc/generalsiminf.Rnw ddfb08f285a2ea26e0fbb107d3116834 *inst/doc/generalsiminf.pdf b8db88a39fe73ccefbd7deaaffdec3cd *inst/multcomp_VA.R 625d3532deb47821fb6964cc748cd343 *inst/multcomp_coxme.R 02a0956bb972a95339c890c34435a986 *man/adevent.Rd 5b84b06bb90c685c6752693dbcfcd8bd *man/cftest.Rd 173f1a6dfa71baef3274ee8df22805d7 *man/cholesterol.Rd da4c9f2280f9bd61d6cc596da9b199f2 *man/cld.Rd 78fec2a89429210566b4c18b2adbe784 *man/cml.Rd d2f6588848af8b44fc5c25ce9b49371a *man/contrMat.Rd 7ada2411bdfae6e73709fc7cc84e6260 *man/detergent.Rd 669c12e2eb8eb733f96aab92870179d5 *man/fattyacid.Rd 0e4596fcef1cba06355fc62c92776cc5 *man/glht.Rd 6b615e7eb07187bd068ab28950328102 *man/litter.Rd 06cf61adf26139bf274cfd1671949bbc *man/methods.Rd 4babdecbe5916b8e8e6f35bbee9008b3 *man/mmm.Rd 1306fcbf937e8749bd16ad793c76c020 *man/modelparm.Rd b4ed73769640f2fa2538195dcfd66c8d *man/mtept.Rd d7fed970443d0dd838a37bace993e040 *man/parm.Rd ede5b18ef9e0c79737078b43e41460e7 *man/plot.cld.Rd f485e831baba6270104f2e3bca3ac144 *man/recovery.Rd 760f47a9610cfb8556b849bd4b55925c *man/sbp.Rd 1284374eb09c4907ba9f5fcf3e226323 *man/trees513.Rd e39aa3a890fbaa03f75ef666c4a5c3d7 *man/waste.Rd 65ae23422858c188a5b0d9d99e4be34d *tests/angina.rda dba0e34338a2e90560d2c9867825667e *tests/bugfix.R 3baffaf8251f8c7f9c38a05330ecf355 *tests/bugfix.Rout.save 25dab2fe897a4579c79eb6ec500a7e3b *tests/regtest-Tukey.R 2285c7643c596d62d5a409ecf4d8864f *tests/regtest-Tukey.Rout.save eaec357b3c7f0e242eec323eb03566b7 *tests/regtest-anova.R 67f624f17a93659b2bbd9a3acd22e3c9 *tests/regtest-anova.Rout.save edc86bbc19a6491addff0df782546b5b *tests/regtest-fixest.R 2c8fbf836f9c847dd4192f875e2826aa *tests/regtest-interface-extended.R b47c078cc6786e9cfc52e5cdec0c6e6c *tests/regtest-interface-extended.Rout.save 3962ab7fab999b367a876b09d65f0180 *tests/regtest-interface.R 0c474d0d7f5b9e3246a82f9dba84144e *tests/regtest-interface.Rout.save 99c02a131f3e08cda0eb32b39ed01c2a *tests/regtest-lme.R 9dfe571f92df8f8a6a76b7870917c5f6 *tests/regtest-lme.Rout.save b7ba1b07cdad488d5c3e7c2507da63ee *tests/regtest-mmm.R d4e6e453d241422254fd05e6e0ffe357 *tests/regtest-mmm.Rout.save 42d2043f60f504cc7f508420c4e92671 *tests/regtest-survival.R c7aa3d238e8622944ab13b17430b859a *tests/regtest-survival.Rout.save ce05718b9da7ead005053f493e83e08b *vignettes/chfls1.Rnw acba174d6aa504f44510e772ea82825c *vignettes/chfls1.bib 322062c4d81f23400945e52ddd9febdf *vignettes/generalsiminf.Rnw 7416f77bc511c5029a9f9f7aa9a43cbe *vignettes/header.tex 8547da24406ebd4b24b4130195bc3e1e *vignettes/multcomp.bib 755b5003f06781709aaaf6f2798916a2 *vignettes/references.bib multcomp/R/0000755000176200001440000000000015075165526012327 5ustar liggesusersmultcomp/R/plot.R0000644000176200001440000000366414172227611013430 0ustar liggesusers # $Id: plot.R 351 2013-05-17 13:08:54Z thothorn $ ### uhhh -- mainly copy and paste from plot.TukeyHSD ### with modifications by Richard M. Heiberger plot.confint.glht <- function(x, xlim, xlab, ylim, ...) { xi <- x$confint ### make sure one-sided intervals are drawn correctly xrange <- c(min(xi[,"lwr"]), max(xi[, "upr"])) if (!is.finite(xrange[1])) xrange[1] <- min(xi[,"Estimate"]) if (!is.finite(xrange[2])) xrange[2] <- max(xi[,"Estimate"]) yvals <- nrow(xi):1 if (missing(xlim)) xlim <- xrange if (missing(ylim)) ylim <- c(0.5, nrow(xi) + 0.5) plot(c(xi[, "lwr"], xi[, "upr"]), rep.int(yvals, 2), type = "n", axes = FALSE, xlab = "", ylab = "", xlim = xlim, ylim = ylim, ...) axis(1, ...) axis(2, at = nrow(xi):1, labels = dimnames(xi)[[1]], las = 1, ...) abline(h = yvals, lty = 1, lwd = 1, col = "lightgray") abline(v = 0, lty = 2, lwd = 1, ...) left <- xi[, "lwr"] left[!is.finite(left)] <- min(c(0, xlim[1] * 2)) right <- xi[, "upr"] right[!is.finite(right)] <- max(c(0, xlim[2] * 2)) segments(left, yvals, right, yvals, ...) points(xi[, "lwr"], yvals, pch = "(", ...) points(xi[, "upr"], yvals, pch = ")", ...) points(xi[, "Estimate"], yvals, pch = 20, ...) main <- list(...)$main if (is.null(main)) { if (attr(x, "type") == "adjusted") { main <- paste(format(100 * attr(x$confint, "conf.level"), 2), "% family-wise confidence level\n", sep = "") } else { main <- paste(format(100 * attr(x$confint, "conf.level"), 2), "% confidence level\n", sep = "") } } else { main <- NULL ### main was already plotted in plot() via ... } if (missing(xlab)) xlab <- "Linear Function" title(main = main, xlab = xlab) box() } plot.glht <- function(x, ...) plot(confint(x), ...) multcomp/R/pqfunctions.R0000644000176200001440000001740514172227611015021 0ustar liggesusers # $Id: pqfunctions.R 481 2021-08-23 15:09:18Z thothorn $ pqglht <- function(object) { betahat <- coef(object) covm <- vcov(object) m <- coef(object, rhs = TRUE) df <- object$df ses <- sqrt(diag(covm)) tstat <- (betahat - m) / ses cr <- cov2cor(covm) dim <- ncol(cr) ### p value function 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)) } ### quantile function 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) } RET <- list(pfunction = pfunction, qfunction = qfunction, coefficients = betahat, sigma = ses, tstat = tstat) class(RET) <- "pqglht" RET } ### functions for summary(..., test = ) argument ### univariate p values for each linear hypothesis univariate <- function() { function(object) { RET <- pqglht(object) RET$pvalues <- RET$pfunction("univariate") RET$type <- "univariate" class(RET) <- "mtest" RET } } ### global classical Chisq or F tests global <- function(type = c("Chisq", "F")) { type <- match.arg(type) fct <- function(object) { RET <- pqglht(object) betahat <- RET$coefficients m <- coef(object, rhs = TRUE) covm <- vcov(object) tmp <- matrix(betahat - m, ncol = 1L) MP <- MPinv(covm) SSH <- crossprod(tmp, MP$MPinv %*% tmp) q <- MP$rank if (type == "F") { df <- df.residual(object$model) if (is.null(df)) { type <- "Chisq" warning(sQuote("df.residual"), " is not available for ", sQuote("model"), " a Chisq test is performed ", "instead of the requested F test.") } } if (type == "Chisq") { pval <- pchisq(SSH, q, lower.tail = FALSE) } else { pval <- pf(SSH/q, q, df, lower.tail = FALSE) } RET$pvalue <- pval RET$type <- type RET$SSH <- SSH RET$fstat <- SSH/q RET$df <- c(q, df) class(RET) <- "gtest" return(RET) } return(fct) } Ftest <- function() global("F") Chisqtest <- function() global("Chisq") ### p values adjusted for simultaneous inference adjusted <- function(type = c("single-step", "Shaffer", "Westfall", "free", p.adjust.methods), ...) { type <- match.arg(type) ### usual max-type adjustment over all linear hypotheses if (type == "single-step") { return(function(object) { RET <- pqglht(object) RET$pvalues <- RET$pfunction("adjusted", ...) RET$type <- type class(RET) <- "mtest" RET }) } if (type == "free") { return(function(object) { K <- object$linfct rhs <- object$rhs pv <- matrix(0, nrow = nrow(K), ncol = nrow(K)) colnames(pv) <- rownames(K) RET <- pqglht(object) for (i in 1:nrow(K)) { object$linfct <- K object$rhs <- rhs tmp <- pqglht(object) p <- tmp$pfunction("adjusted", ...) pv[i,rownames(K)] <- min(p) K <- K[-which.min(p),, drop = FALSE] rhs <- rhs[-which.min(p)] } RET$pvalues <- apply(pv, 2, max) RET$type <- type class(RET) <- "mtest" RET }) } ### Westfall (1997, JASA): constraints and correlations ### or ### Shaffer (1886, JASA): constraints if (type %in% c("Shaffer", "Westfall")) { return(function(object) { RET <- pqglht(object) m <- coef(object, rhs = TRUE) tstat <- switch(object$alternative, "less" = RET$tstat, "greater" = -RET$tstat, "two.sided" = -abs(RET$tstat)) C <- object$linfct Corder <- C[order(tstat), , drop = FALSE] Cm <- m[order(tstat)] ms <- maxsets(Corder) error <- 0 p <- sapply(ms, function(x) { max(sapply(x, function(s) { object$linfct <- Corder[s, , drop = FALSE] object$rhs <- Cm[s] tmp <- pqglht(object)$pfunction(ifelse(type == "Westfall", "adjusted", "bonferroni"), ...) tmperr <- attr(tmp, "error") if (!is.null(tmperr) && tmperr > error) error <<- tmperr min(tmp) })) }) for (i in 2:length(p)) p[i] <- max(p[i-1], p[i]) ### what happens in case of ties??? ### RET$pvalues <- p[rank(tstat)] attr(RET$pvalues, "error") <- error RET$type <- type class(RET) <- "mtest" RET }) } ### compute adjustment via p.adjust return(function(object) { RET <- pqglht(object) RET$pvalues <- RET$pfunction(type) RET$type <- type class(RET) <- "mtest" RET }) } adjusted_calpha <- function(...) { ret <- function(object, level) { pqglht(object)$qfunction(level, adjusted = TRUE, ...) } attr(ret, "type") <- "adjusted" ret } univariate_calpha <- function(...) { ret <- function(object, level) { pqglht(object)$qfunction(level, adjusted = FALSE, ...) } attr(ret, "type") <- "univariate" ret } multcomp/R/parm.R0000644000176200001440000000170114172227611013377 0ustar liggesusers # $Id: parm.R 243 2008-07-22 16:33:38Z thothorn $ parm <- function(coef, vcov, df = 0) { if (length(coef) != nrow(vcov) || length(coef) != ncol(vcov)) stop("dimensions don't match") if (is.null(names(coef))) names(coef) <- paste("V", 1:length(coef), sep = "") if (is.null(colnames(vcov))) colnames(vcov) <- names(coef) if (is.null(rownames(vcov))) rownames(vcov) <- names(coef) if (!is.numeric(coef) || !is.vector(coef)) stop(sQuote("coef"), " is not a numeric vector") if (!is.numeric(vcov) || !is.matrix(vcov)) stop(sQuote("vcov"), " is not a numeric matrix") if (!isSymmetric(vcov, tol = sqrt(.Machine$double.eps))) stop(sQuote("vcov"), " is not a symmetric matrix") ret <- list(coef = coef, vcov = vcov, df = df) class(ret) <- "parm" ret } coef.parm <- function(object, ...) object$coef vcov.parm <- function(object, ...) object$vcov multcomp/R/print.R0000644000176200001440000001136115055240750013577 0ustar liggesusers # $Id: print.R 508 2025-09-01 06:49:12Z thothorn $ ### print methods print.glht <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("\n\t", "General Linear Hypotheses\n\n") if (!is.null(x$type)) cat("Multiple Comparisons of Means:", x$type, "Contrasts\n\n\n") beta <- coef(x) lh <- matrix(beta, ncol = 1) colnames(lh) <- "Estimate" alt <- switch(x$alternative, "two.sided" = "==", "less" = ">=", "greater" = "<=") rownames(lh) <- paste(names(beta), alt, x$rhs) cat("Linear Hypotheses:\n") print(lh, digits = digits) cat("\n") invisible(x) } print.summary.glht <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("\n\t", "Simultaneous Tests for General Linear Hypotheses\n\n") if (!is.null(x$type)) cat("Multiple Comparisons of Means:", x$type, "Contrasts\n\n\n") call <- if (isS4(x$model)) x$model@call else x$model$call if (!is.null(call)) { cat("Fit: ") print(call) cat("\n") } ### : compute coefmat in summary.glht for easier access??? pq <- x$test mtests <- cbind(pq$coefficients, pq$sigma, pq$tstat, pq$pvalues) error <- attr(pq$pvalues, "error") pname <- switch(x$alternative, "less" = paste("Pr(<", ifelse(x$df == 0, "z", "t"), ")", sep = ""), "greater" = paste("Pr(>", ifelse(x$df == 0, "z", "t"), ")", sep = ""), "two.sided" = paste("Pr(>|", ifelse(x$df == 0, "z", "t"), "|)", sep = "")) colnames(mtests) <- c("Estimate", "Std. Error", ifelse(x$df == 0, "z value", "t value"), pname) type <- pq$type ### print p values according to simulation precision if (!is.null(error) && error > .Machine$double.eps) { sig <- which.min(abs(1 / error - (10^(1:10)))) sig <- 1 / (10^sig) } else { sig <- .Machine$double.eps } cat("Linear Hypotheses:\n") alt <- switch(x$alternative, "two.sided" = "==", "less" = ">=", "greater" = "<=") rownames(mtests) <- paste(rownames(mtests), alt, x$rhs) ### printCoefmat(mtests, digits = digits, has.Pvalue = TRUE, P.values = TRUE, eps.Pvalue = sig) switch(type, "univariate" = cat("(Univariate p values reported)"), "single-step" = cat("(Adjusted p values reported -- single-step method)"), "Shaffer" = cat("(Adjusted p values reported -- Shaffer method)"), "Westfall" = cat("(Adjusted p values reported -- Westfall method)"), cat("(Adjusted p values reported --", type, "method)") ) cat("\n\n") invisible(x) } print.confint.glht <- function(x, digits = max(3, getOption("digits") - 3), ...) { xtmp <- x cat("\n\t", "Simultaneous Confidence Intervals\n\n") if (!is.null(x$type)) cat("Multiple Comparisons of Means:", x$type, "Contrasts\n\n\n") level <- attr(x$confint, "conf.level") attr(x$confint, "conf.level") <- NULL cat("Fit: ") if (isS4(x$model)) { print(x$model@call) } else { print(x$model$call) } cat("\n") error <- attr(x$confint, "error") if (!is.null(error) && error > .Machine$double.eps) digits <- min(digits, which.min(abs(1 / error - (10^(1:10))))) cat("Quantile =", round(attr(x$confint, "calpha"), digits)) cat("\n") if (attr(x, "type") == "adjusted") { cat(paste(level * 100, "% family-wise confidence level\n", sep = ""), "\n\n") } else { cat(paste(level * 100, "% confidence level\n", sep = ""), "\n\n") } cat("Linear Hypotheses:\n") alt <- switch(x$alternative, "two.sided" = "==", "less" = ">=", "greater" = "<=") rownames(x$confint) <- paste(rownames(x$confint), alt, x$rhs) print(format(x$confint, nsmall = digits, digits = digits), quote = FALSE) cat("\n") invisible(xtmp) } print.contrMat <- function(x, digits = max(3, getOption("digits") - 3), ...) { xtmp <- x cat("\n\t", "Multiple Comparisons of Means:", attr(x, "type"), "Contrasts\n\n") attr(x, "type") <- NULL class(x) <- "matrix" print(x, digits = digits) invisible(xtmp) } print.summary.gtest <- function(x, digits = max(3, getOption("digits") - 3), ...) { print.glht(x, digits = digits) cat("Global Test:\n") if (x$test$type == "Chisq") { pr <- data.frame(x$test$SSH, x$test$df[1], x$test$pvalue) names(pr) <- c("Chisq", "DF", "Pr(>Chisq)") } if (x$test$type == "F") { pr <- data.frame(x$test$fstat, x$test$df[1], x$test$df[2], x$test$pvalue) names(pr) <- c("F", "DF1", "DF2", "Pr(>F)") } print(pr, digits = digits) invisible(x) } multcomp/R/mmm.R0000644000176200001440000000620414172227611013231 0ustar liggesusers ### value added version of dlm:bdiag by Giovanni Petris .bdiag <- function (...) { if (nargs() == 1) x <- as.list(...) else x <- list(...) n <- length(x) if (n == 0) return(NULL) x <- lapply(x, function(y) if (length(y)) as.matrix(y) else stop("Zero-length component in x")) d <- array(unlist(lapply(x, dim)), c(2, n)) rr <- d[1, ] cc <- d[2, ] rsum <- sum(rr) csum <- sum(cc) out <- array(0, c(rsum, csum)) ind <- array(0, c(4, n)) rcum <- cumsum(rr) ccum <- cumsum(cc) ind[1, -1] <- rcum[-n] ind[2, ] <- rcum ind[3, -1] <- ccum[-n] ind[4, ] <- ccum imat <- array(1:(rsum * csum), c(rsum, csum)) iuse <- apply(ind, 2, function(y, imat) imat[(y[1] + 1):y[2], (y[3] + 1):y[4]], imat = imat) iuse <- as.vector(unlist(iuse)) out[iuse] <- unlist(x) rownames(out) <- unlist(sapply(x, rownames)) colnames(out) <- unlist(sapply(x, colnames)) return(out) } ### collect multiple marginal models mmm <- function(...) { ret <- list(...) if (is.null(names(ret))) names(ret) <- as.character(match.call(expand.dots = TRUE))[-1] class(ret) <- "mmm" ret } ### collect multiple linear functions mlf <- function(...) { ret <- list(...) class(ret) <- "mlf" ret } ### extract coefs coef.mmm <- function(object, ...) { ret <- lapply(object, function(o) modelparm(o)$coef) n <- lapply(1:length(ret), function(i) paste(names(object)[i], names(ret[[i]]), sep = ": ")) ret <- unlist(ret) names(ret) <- unlist(n) ret } Estfun <- function(x, ...) { e <- estfun(x, ...) e[is.na(e)] <- 0 e } ### extract estimating functions estfun.mmm <- function(x, ...) do.call("cbind", lapply(x, Estfun, ...)) ### extract bread bread.mmm <- function(x, ...) .bdiag(lapply(x, bread)) ### set-up total covariance matrix vcov.mmm <- function(object, ...) { ret <- sandwich(object, bread. = bread, meat. = meat, adjust = FALSE) D <- do.call("c", lapply(object, function(o) diag(vcov(o)))) D <- diag(sqrt(D)) ret <- D %*% cov2cor(ret) %*% D cf <- coef(object) rownames(ret) <- colnames(ret) <- names(cf) ret } ### construct all linear functions and call glht ### Note: in glht check model for class mmm and ### call this function ### need to export and document mmm and mlf only glht.mlf <- function(model, linfct, ...) { stopifnot(inherits(model, "mmm")) if (length(linfct) == 1) { linfct <- linfct[rep(1, length(model))] names(linfct) <- names(model) } if (!isTRUE(all.equal(names(model), names(linfct)))) stop("names of ", sQuote("model"), " and ", sQuote("linfct"), " are not identical") K <- lapply(names(model), function(i) glht(model[[i]], linfct = linfct[[i]], ...)$linfct) for (k in 1:length(K)) { rownames(K[[k]]) <- paste(names(model)[k], rownames(K[[k]]), sep = ": ") colnames(K[[k]]) <- paste(names(model)[k], colnames(K[[k]]), sep = ": ") } glht.matrix(model, linfct = .bdiag(K), ...) } multcomp/R/helpers.R0000644000176200001440000002271014402341102014071 0ustar liggesusers # $Id: helpers.R 494 2023-03-09 11:25:54Z thothorn $ ### model.matrix.coxph doesn't return contrasts etc. #model.matrix.coxph <- function(object, ...) { # mm <- model.matrix(delete.response(terms(object)), # data = model.frame(object)) # at <- attributes(mm) # mm <- mm[,-1] # at$dim[2] <- at$dim[2] - 1 # at$dimnames[[2]] <- at$dimnames[[2]][-1] # at$assign <- at$assign[-1] # attributes(mm) <- at # mm #} model.matrix.coxph.penal <- function(object, ...) { class(object) <- "coxph" mm <- model.matrix(object) at <- attributes(mm) indx <- grep("frailty", colnames(mm)) ret <- mm[ , -indx, drop = FALSE] attr(ret, "assign") <- at$assign[-indx] attr(ret, "contrasts") <- at$contrasts ret } model.frame.coxph.penal <- function(formula, ...) { object <- formula tm <- terms(object) class(object) <- "coxph" mf <- model.frame(object) ret <- cbind(mf[[1]], model.frame(delete.response(tm), data = mf)) colnames(ret)[1] <- colnames(mf)[1] ret } terms.coxph.penal <- function(x, ...) { class(x) <- "coxph" tm <- terms(x) ctm <- as.character(tm) x <- strsplit(ctm[3], "+", fixed = TRUE)[[1]] x <- x[-grep("frailty", x)] fm <- paste(ctm[2], "~", paste(x, collapse = "+")) terms(as.formula(fm)) } coxph.penalcoef <- function(object, ...) { mm <- model.matrix(object) class(object) <- "coxph" cf <- coef(object) cf[1:ncol(mm)] } coxph.penalvcov <- function(object, ...) { mm <- model.matrix(object) class(object) <- "coxph" vc <- vcov(object) vc[1:ncol(mm), 1:ncol(mm), drop = FALSE] } #model.matrix.survreg <- function(object, ...) { # model.matrix(delete.response(terms(object)), # data = model.frame(object)) #} ### coxme objects model.matrix.coxme <- function(object, ...) { class(object) <- "coxph" model.matrix(object) } ### coxme objects model.frame.coxme <- function(formula, ...) { object <- formula class(object) <- "coxph" model.frame(object) } model.matrix.aovlist <- function(object, ...) stop(sQuote("glht"), " does not support objects of class ", sQuote("aovlist")) model.matrix.lme <- function(object, ...) model.matrix(terms(object), data = model.frame(object), ...) model.frame.lme <- function(formula, ...) { object <- formula ret <- object$data if (is.null(ret)) stop("object does not contain any data") ret } ### extract coefficients, covariance matrix and ### degrees of freedom (if available) from `model' modelparm <- function(model, coef., vcov., df, ...) UseMethod("modelparm") modelparm.default <- function(model, coef. = coef, vcov. = function(x) vcov(x, complete = FALSE), df = NULL, ...) { ### allow specification of coef and vcov directly if (!is.function(coef.)) { beta <- coef. coef. <- function(model) return(beta) } if (!is.function(vcov.)) { sigma <- vcov. vcov. <- function(model) return(sigma) } ### extract coefficients and their covariance matrix beta <- try(coef.(model, ...)) if (inherits(beta, "try-error")) stop("no ", sQuote("coef"), " method for ", sQuote("model"), " found!") sigma <- try(vcov.(model, ...)) if (inherits(sigma, "try-error")) stop("no ", sQuote("vcov"), " method for ", sQuote("model"), " found!") sigma <- as.matrix(sigma) if (any(length(beta) != dim(sigma))) stop("dimensions of coefficients and covariance matrix don't match") ### determine degrees of freedom if (is.null(df)) { df <- 0 ### check if a linear model was supplied if (class(model)[1] %in% c("aov", "lm")) { class(model) <- "lm" df <- summary(model)$df[2] } if (inherits(model, "parm")) df <- model$df } else { if (df < 0) stop(sQuote("df"), " is not positive") } ### try to identify non-estimable coefficients ### coef.aov removes NAs, thus touch coefficients ### directly ocoef <- coef.(model, ...) if (inherits(model, "aov")) ocoef <- model$coefficients estimable <- rep(TRUE, length(ocoef)) if (any(is.na(ocoef))) { estimable[is.na(ocoef)] <- FALSE beta <- ocoef[estimable] } ### just in case... if (length(beta) != ncol(sigma) || nrow(sigma) != sum(estimable)) stop("could not extract coefficients and covariance matrix from ", sQuote("model")) RET <- list(coef = beta, vcov = sigma, df = df, estimable = estimable) class(RET) <- "modelparm" RET } ### mixed effects models (package `lme4') modelparm.mer <- function(model, coef. = lme4::fixef, vcov. = vcov, df = NULL, ...) modelparm.default(model, coef. = coef., vcov. = vcov., df = df, ...) ### mixed effects models (package `lme4Eigen') modelparm.merMod <- function(model, coef. = lme4::fixef, vcov. = vcov, df = NULL, ...) modelparm.default(model, coef. = coef., vcov. = vcov., df = df, ...) ### package `nlme' modelparm.lme <- function(model, coef. = nlme::fixef, vcov. = vcov, df = NULL, ...) modelparm.default(model, coef. = coef., vcov. = vcov., df = df, ...) ### package glmmTMB modelparm.glmmTMB <- function(model, coef. = function(object) glmmTMB::fixef(object)$cond, vcov. = function(object) vcov(object)$cond, df = NULL, ...) modelparm.default(model, coef. = coef., vcov. = vcov., df = df, ...) ### survreg models (package `survival') vcovsurvreg <- function(object, ...) { sigma <- vcov(object) p <- length(coef(object)) return(sigma[1:p, 1:p]) } ### nlme:::gls model.matrix.gls <- function(object, ...) model.matrix(terms(object), data = nlme::getData(object), ...) model.frame.gls <- function(formula, ...) model.frame(formula(formula), data = nlme::getData(formula), ...) terms.gls <- function(x, ...) terms(model.frame(x), ...) modelparm.survreg <- function(model, coef. = coef, vcov. = vcovsurvreg, df = NULL, ...) modelparm.default(model, coef. = coef., vcov. = vcov., df = df, ...) modelparm.aovlist <- function(model, coef. = coef, vcov. = vcov, df = NULL, ...) stop(sQuote("glht"), " does not support objects of class ", sQuote("aovlist")) modelparm.coxme <- function(model, coef. = coef, vcov. = vcov, df = NULL, ...) modelparm.default(model, coef. = coef., vcov. = vcov., df = df, ...) modelparm.coxph.penal <- function(model, coef. = coxph.penalcoef, vcov. = coxph.penalvcov, df = NULL, ...) modelparm.default(model, coef. = coef., vcov. = vcov., df = df, ...) model.matrix.polr <- function(object, ...) { mm <- model.matrix(delete.response(terms(object)), data = model.frame(object)) at <- attributes(mm) mm <- mm[,-1] at$dim[2] <- at$dim[2] - 1 at$dimnames[[2]] <- at$dimnames[[2]][-1] at$assign <- at$assign[-1] attributes(mm) <- at mm } polrvcov <- function(object) { cf <- coef(object) vcov <- vcov(object) vcov[names(cf), names(cf)] } modelparm.polr <- function(model, coef. = coef, vcov. = polrvcov, df = NULL, ...) modelparm.default(model, coef. = coef., vcov. = vcov., df = df, ...) ### fixed effects models (package fixest). Contributed by Grant McDermott 2021-12-17 modelparm.fixest <- function(model, coef. = coef, vcov. = vcov, df = NULL, ...) { model <- summary(model, vcov = vcov.) vcov. <- vcov(model) if (is.null(df)) df <- fixest::degrees_freedom(model, type = "resid") modelparm.default(model, coef. = coef., vcov. = vcov., df = df, ...) } ### gamlss (donated by Marcio A Diniz) model.matrix.gamlss <- function(object, ...) { cf <- na.exclude(coef(object)) ### extract model matrix, frame and terms mm <- model.matrix(terms(object), data = model.frame(object)) aux <- list(assign = attributes(mm)[["assign"]], contrasts = attributes(mm)[["contrasts"]]) mm <- mm[, 1:length(cf)] attr(mm, "assign") <- aux$assign[1:length(cf)] attr(mm, "contrasts") <- aux$contrasts mm } gamlss.coef <- function(object, ...) { dots <- list(...) #class(object) <- class(object)[1] cf <- na.exclude(coef(object, what = dots$what)) cf } gamlss.vcov <- function(object, ...) { dots <- list(...) #class(object) <- class(object)[1] p <- match(dots$what, object$parameters) vc <- vcov(object, what = dots$what) index <- which(cumsum(rownames(vc) == "(Intercept)") == p) vc[index, index, drop = FALSE] } ### modified from package MASS MPinv <- function (X, tol = sqrt(.Machine$double.eps)) { if (length(dim(X)) > 2 || !(is.numeric(X) || is.complex(X))) stop("X must be a numeric or complex matrix") if (!is.matrix(X)) X <- as.matrix(X) Xsvd <- svd(X) if (is.complex(X)) Xsvd$u <- Conj(Xsvd$u) Positive <- Xsvd$d > max(tol * Xsvd$d[1], 0) if (all(Positive)) RET <- Xsvd$v %*% (1/Xsvd$d * t(Xsvd$u)) else if (!any(Positive)) RET <- array(0, dim(X)[2:1]) else RET <- Xsvd$v[, Positive, drop = FALSE] %*% ((1/Xsvd$d[Positive]) * t(Xsvd$u[, Positive, drop = FALSE])) return(list(MPinv = RET, rank = sum(Positive))) } ### meaningless ... chkdots <- function(...) { lst <- list(...) if (length(lst) > 0) { warning("Argument(s) ", sQuote(names(lst)), " passed to ", sQuote("..."), " are ignored", call. = TRUE) } } multcomp/R/glht.R0000644000176200001440000000725014172227611013403 0ustar liggesusers # $Id: glht.R 422 2015-07-20 13:13:04Z thothorn $ ### general linear hypotheses glht <- function(model, linfct, ...) { if (missing(linfct)) { mpar <- modelparm(model, ...) linfct <- diag(length(mpar$coef)) rownames(linfct) <- names(mpar$coef) glht(model = model, linfct = linfct, ...) } else { UseMethod("glht", linfct) } } ### K coef(model) _!alternative_ rhs glht.matrix <- function(model, linfct, alternative = c("two.sided", "less", "greater"), rhs = 0, ...) { ### extract coefficients and their covariance matrix, df mpar <- modelparm(model, ...) alternative <- match.arg(alternative) if (!is.numeric(rhs)) stop(sQuote("rhs"), " is not a numeric vector") if (!all(mpar$estimable)) { ignoreOK <- all(colSums(abs(linfct[, !mpar$estimable, drop = FALSE])) == 0) if (!ignoreOK) stop("some linear functions are not estimable") linfct <- linfct[, mpar$estimable, drop = FALSE] warning(sum(!mpar$estimable), " out of ", length(mpar$estimable), " coefficients not estimable in ", sQuote("model")) } if (ncol(linfct) != length(mpar$coef)) stop(sQuote("ncol(linfct)"), " is not equal to ", sQuote("length(coef(model))")) if (is.null(colnames(linfct))) colnames(linfct) <- names(mpar$coef) if (is.null(rownames(linfct))) # { rownames(linfct) <- 1:nrow(linfct) # } else { ### alt <- switch(alternative, ### "two.sided" = "==", "less" = ">=", "greater" = "<=") ### rownames(linfct) <- paste(rownames(linfct), alt, rhs) # } if (length(rhs) == 1) rhs <- rep(rhs, nrow(linfct)) if (length(rhs) != nrow(linfct)) stop(sQuote("nrow(linfct)"), " is not equal to ", sQuote("length(rhs)")) RET <- list(model = model, linfct = linfct, rhs = rhs, coef = mpar$coef, vcov = mpar$vcov, df = mpar$df, alternative = alternative, type = attr(linfct, "type")) class(RET) <- "glht" RET } ### symbolic description of H_0 glht.character <- function(model, linfct, ...) { ### extract coefficients and their covariance matrix beta <- modelparm(model, ...)$coef tmp <- chrlinfct2matrix(linfct, names(beta)) return(glht(model, linfct = tmp$K, rhs = tmp$m, alternative = tmp$alternative, ...)) } ### symbolic description of H_0 glht.expression <- function(model, linfct, ...) glht(model, deparse(linfct), ...) ### multiple comparison procedures glht.mcp <- function(model, linfct, ...) { ### extract factors and contrast matrices from `model' ia <- attr(linfct, "interaction_average") ca <- attr(linfct, "covariate_average") if (ia || ca) { ### experimental version tmp <- mcp2matrix2(model, linfct = linfct, interaction_average = ia, covariate_average = ca) } else { ### use old version tmp <- mcp2matrix(model, linfct = linfct) } args <- list(model = model, linfct = tmp$K) if (!is.null(tmp$alternative)) args$alternative <- tmp$alternative if (any(tmp$m != 0)) args$rhs <- tmp$m args <- c(args, list(...)) ret <- do.call("glht", args) ret$type <- tmp$type ret$focus <- names(linfct) return(ret) } ### call Rich' function for raw means ... glht.means <- function(model, linfct, ...) { args <- list(model = model, linfct = meanslinfct(model, focus = names(linfct), ...)) args <- c(args, list(...)) ret <- do.call("glht", args) ret$type <- "Mean" ret$focus <- names(linfct) return(ret) } multcomp/R/cld.R0000644000176200001440000003635114332455131013211 0ustar liggesusers### compact letter displays cld <- function(object, ...) UseMethod("cld") cld.glht <- function(object, level = 0.05, decreasing = FALSE, ...) cld(summary(object), level = level, decreasing = decreasing) extr <- function(object) { stopifnot(object$type == "Tukey") mf <- model.frame(object$model) if (!is.null(attr(mf, "terms"))) { tm <- attr(mf, "terms") } else { tm <- try(terms(object$model)) if (inherits(tm, "try-error")) stop("no terms component found") } ### not very nice if(inherits(object$model, "lme")){ mf <- get_all_vars(tm, mf) } ### covar <- (length(attr(tm, "term.labels")) > 1) y <- mf[[1L]] yname <- colnames(mf)[[1L]] stopifnot(length(object$focus) == 1) x <- mf[[object$focus]] xname <- object$focus K <- contrMat(table(x), type = "Tukey") comps <- cbind(apply(K, 1, function(k) levels(x)[k == 1]), apply(K, 1, function(k) levels(x)[k == -1])) f <- if (inherits(object$model, "coxph")) predict else fitted lp <- f(object$model) ret <- list(y = y, yname = yname, x = x, xname = xname, weights = model.weights(mf), lp = lp, covar = covar, comps = comps) return(ret) } cld.summary.glht <- function(object, level = 0.05, decreasing = FALSE, ...) { stopifnot(inherits(object, "glht")) ret <- extr(object) signif <- (object$test$pvalues < level) # Order the levels according to its mean # Tidy up: ret$y[1:length(ret$x)]], cox models concatenates a vector of live/dead # I think this way is easier than to deal with gsub later and it's more general lvl_order <- levels(ret$x)[order(tapply(as.numeric(ret$y)[1:length(ret$x)], ret$x, mean))] # names(signif) <- gsub("\\s", "", rownames(object$linfct)) ret$signif <- signif ret$mcletters <- insert_absorb(signif, decreasing = decreasing, comps = ret$comps, lvl_order = lvl_order, levels.x=levels(ret$x), ...) # start edit ret$mcletters$Letters <- ret$mcletters$Letters[levels(ret$x)] ret$mcletters$monospacedLetters <- ret$mcletters$monospacedLetters[levels(ret$x)] ret$mcletters$LetterMatrix <- ret$mcletters$LetterMatrix[levels(ret$x),] # end edit class(ret) <- "cld" ret } cld.confint.glht <- function(object, decreasing = FALSE, ...) { stopifnot(inherits(object, "glht")) ret <- extr(object) ### significant, if confidence interval does not contains 0 signif <- !(object$confint[, "lwr"] < 0 & object$confint[, "upr"] > 0) # Tidy up: ret$y[1:length(ret$x)]], cox models concatenates a vector of live/dead # I think this way is easier than to deal with gsub later and it's more general lvl_order <- levels(ret$x)[order(tapply(as.numeric(ret$y)[1:length(ret$x)], ret$x, mean))] # names(signif) <- gsub("\\s", "", rownames(object$linfct)) ret$signif <- signif ret$mcletters <- insert_absorb(signif, decreasing = decreasing, comps = ret$comps, lvl_order = lvl_order, levels.x=levels(ret$x), ...) # start edit ret$mcletters$Letters <- ret$mcletters$Letters[levels(ret$x)] ret$mcletters$monospacedLetters <- ret$mcletters$monospacedLetters[levels(ret$x)] ret$mcletters$LetterMatrix <- ret$mcletters$LetterMatrix[levels(ret$x),] # end edit class(ret) <- "cld" ret } print.cld <- function(x, ...) print(x$mcletters$Letters) plot.cld <- function(x, type = c("response", "lp"), ...) { mcletters <- x$mcletters ### ms = mono-spaced msletters <- mcletters$monospacedLetters ### v = vertical vletters <- sapply(msletters, function(x) paste(strsplit(x, "")[[1]], "\n", collapse = "")) vletters <- vletters[gsub(" ", "", levels(x$x))] msletters <- msletters[gsub(" ", "", levels(x$x))] type <- match.arg(type) dat <- x[c("x", "y", "lp")] if (is.null(x$weights)) { dat$weights <- rep(1, NROW(x$y)) } else { dat$weights <- x$weights } dat <- as.data.frame(dat) xn <- x$xname yn <- x$yname if (!is.null(list(...)$xlab)) xn <- list(...)$xlab if (!is.null(list(...)$ylab)) yn <- list(...)$ylab if (x$covar || type == "lp") { ### boxplot to make use of "..." argument yn <- "linear predictor" if (!is.null(list(...)$ylab)) yn <- list(...)$ylab boxplot(lp ~ x, data = dat, xlab = xn, ylab = "linear predictor", ...) axis(3, at = 1:nlevels(dat$x), labels = vletters) } else { if (is.integer(dat$y)) dat$y <- as.numeric(dat$y) switch(class(dat$y), "numeric" = { ### boxplot to make use of "..." argument boxplot(y ~ x, data = dat, xlab = xn, ylab = yn, ...) axis(3, at = 1:nlevels(dat$x), labels = vletters) }, "factor" = { at <- xtabs(weights ~ x, data = dat) / sum(dat$weights) at <- cumsum(at) - at / 2 mosaicplot(xtabs(weights ~ x + y, data = dat), main = NULL, xlab = xn, ylab = yn, ...) axis(3, at = at, labels = vletters, tick = FALSE) }, "Surv" = { plot(survfit(y ~ x, data = dat), lty = 1:nlevels(dat$x), ...) nc <- nchar(levels(dat$x)) spaces <- unlist(lapply( max(nc)-nc, function(x) return(paste( rep(" ",x) ,collapse="")))) # old.par <- par(family="mono") legend("topright", lty = 1:nlevels(dat$x), legend = paste(levels(dat$x), spaces, ": ", msletters, sep=""), ...) # par(old.par) }) } } # Function implements the insert-absorb (sweep) heuristic of Piepho 2004: # "An Algorithm for a Letter-Based Representation of All-Pairwise Comparisons" # # x ... vector of logicals indicating significant comparisons with hyphenated # names e.g. A-B, treatmentA-treatmentB, ... # Letters ... a set of user defined letters { default is Letters=c(letters, LETTERS) } # separator ... a separating character used to produce a sufficiently large set of # characters for a compact letter display (default is separator=".") in case # the number of letters required exceeds the number of letters available # Decreasing ... Inverse the order of the letters # levels.x ... levels of the grouping variable insert_absorb <- function( x, Letters=c(letters, LETTERS), separator=".", decreasing = FALSE, comps = NULL, lvl_order, levels.x){ obj_x <- deparse(substitute(x)) if (is.null(comps)) { namx <- names(x) namx <- gsub(" ", "", names(x)) if(length(namx) != length(x)) stop("Names required for ", obj_x) split_names <- strsplit(namx, "-") stopifnot( sapply(split_names, length) == 2 ) comps <- t(as.matrix(as.data.frame(split_names))) } rownames(comps) <- names(x) lvls <- lvl_order n <- length(lvls) lmat <- array(TRUE, dim=c(n,1), dimnames=list(lvls, NULL) ) if( sum(x) == 0 ){ # no differences ltrs <- rep(get_letters(1, Letters=Letters, separator=separator), length(lvls) ) names(ltrs) <- lvls colnames(lmat) <- ltrs[1] msl <- ltrs ret <- list(Letters=ltrs, monospacedLetters=msl, LetterMatrix=lmat) class(ret) <- "multcompLetters" return(ret) } else{ signifs <- comps[x,,drop=FALSE] absorb <- function(m){ for(j in 1:(ncol(m)-1)){ for(k in (j+1):ncol(m)){ if( all(m[which(m[,k]),k] & m[which(m[,k]),j]) ){ # column k fully contained in column j m <- m[,-k, drop=FALSE] return(absorb(m)) } else if( all(m[which(m[,j]),k] & m[which(m[,j]),j]) ){ # column j fully contained in column k m <- m[,-j, drop=FALSE] return(absorb(m)) } } } return(m) } for( i in 1:nrow(signifs) ){ # insert tmpcomp <- signifs[i,] wassert <- which(lmat[tmpcomp[1],] & lmat[tmpcomp[2],]) # which columns wrongly assert nonsignificance if(any(wassert)){ tmpcols <- lmat[,wassert,drop=FALSE] tmpcols[tmpcomp[2],] <- FALSE lmat[tmpcomp[1],wassert] <- FALSE lmat <- cbind(lmat, tmpcols) colnames(lmat) <- get_letters( ncol(lmat), Letters=Letters, separator=separator) if(ncol(lmat) > 1){ # absorb columns if possible lmat <- absorb(lmat) colnames(lmat) <- get_letters( ncol(lmat), Letters=Letters, separator=separator ) } } } } lmat <- lmat[levels.x,] # consider order of levels.x which will be applied later on ensuring that argument decreasing correclty functions (AS 2022-10-14) lmat <- lmat[,order(apply(lmat, 2, sum))] lmat <- sweepLetters(lmat) # 1st sweeping lmat <- lmat[,names(sort(apply(lmat,2, function(x) return(min(which(x)))), decreasing = decreasing))] # reorder columns colnames(lmat) <- get_letters( ncol(lmat), Letters=Letters, separator=separator) lmat <- lmat[,order(apply(lmat, 2, sum))] lmat <- sweepLetters(lmat) # 2nd sweeping lmat <- lmat[,names(sort(apply(lmat,2, function(x) return(min(which(x)))), decreasing = decreasing))] # reorder columns colnames(lmat) <- get_letters( ncol(lmat), Letters=Letters, separator=separator) ltrs <- apply(lmat,1,function(x) return(paste(names(x)[which(x)], sep="", collapse="") ) ) msl <- matrix(ncol=ncol(lmat), nrow=nrow(lmat)) # prepare monospaced letters for( i in 1:nrow(lmat) ){ msl[i,which(lmat[i,])] <- colnames(lmat)[which(lmat[i,])] absent <- which(!lmat[i,]) if( length(absent) < 2 ){ if( length(absent) == 0 ) next else{ msl[i,absent] <- paste( rep(" ", nchar(colnames(lmat)[absent])), collapse="" ) } } else{ msl[i,absent] <- unlist( lapply( sapply( nchar(colnames(lmat)[absent]), function(x) return(rep( " ",x)) ), paste, collapse="") ) } } msl <- apply(msl, 1, paste, collapse="") names(msl) <- rownames(lmat) ret <- list( Letters=ltrs, monospacedLetters=msl, LetterMatrix=lmat, aLetters = Letters, aseparator = separator ) class(ret) <- "multcompLetters" return(ret) } # All redundant letters are swept out without altering the information within a LetterMatrix. # # mat ... a LetterMatrix as produced by function insert_absorb() # start.col ... either a single integer specifying the column to start with or a vector # of max. length equal to ncol(mat) specifying the column order to be used. # Letters ... a set of user defined letters { default is Letters=c(letters, LETTERS) } # separator ... a separating character used to produce a sufficiently large set of # characters for a compact letter display (default is separator=".") in case # the number of letters required exceeds the number of letters available sweepLetters <- function(mat, start.col=1, Letters=c(letters, LETTERS), separator="."){ stopifnot( all(start.col %in% 1:ncol(mat)) ) locked <- matrix(rep(0,ncol(mat)*nrow(mat)), ncol=ncol(mat)) # 1 indicates that another letter dependes on this entry cols <- 1:ncol(mat) cols <- cols[c( start.col, cols[-start.col] )] if( any(is.na(cols) ) ) cols <- cols[-which(is.na(cols))] for( i in cols){ tmp <- matrix(rep(0,ncol(mat)*nrow(mat)), ncol=ncol(mat)) tmp[which(mat[,i]),] <- mat[which(mat[,i]),] # get items of those rows which are TRUE in col "i" one <- which(tmp[,i]==1) if( all(apply(tmp[,-i,drop=FALSE], 1, function(x) return( any(x==1) ))) ){ # there is at least one row "l" where mat[l,i] is the only item which is TRUE i.e. no item can be removed in this column next } for( j in one ){ # over all 1's if( locked[j,i] == 1 ){ # item is locked next } chck <- 0 lck <- list() for( k in one ){ if( j==k ){ next } else{ # pair j-k rows <- tmp[c(j,k),] dbl <- rows[1,] & rows[2,] hit <- which(dbl) hit <- hit[-which(hit==i)] dbl <- rows[1,-i,drop=FALSE] & rows[2,-i,drop=FALSE] if( any(dbl) ){ chck <- chck + 1 lck[[chck]] <- list(c(j,hit[length(hit)]), c(k,hit[length(hit)])) # record items which have to be locked, use last column if multiple hits } } } if( (chck == (length(one)-1)) && chck != 0 ){ # item is redundant for( k in 1:length(lck) ){ # lock items locked[ lck[[k]][[1]][1], lck[[k]][[1]][2] ] <- 1 locked[ lck[[k]][[2]][1], lck[[k]][[2]][2] ] <- 1 } mat[j,i] <- FALSE # delete redundant entry } } if(all(mat[,i]==FALSE)){ # delete column where each entry is FALSE and restart mat <- mat[,-i,drop=FALSE] colnames(mat) <- get_letters( ncol(mat), Letters=Letters, separator=separator) return(sweepLetters(mat, Letters=Letters, separator=separator)) } } onlyF <- apply(mat, 2, function(x) return(all(!x))) if( any(onlyF) ){ # There are columns with just FALSE entries mat <- mat[,-which(onlyF),drop=FALSE] colnames(mat) <- get_letters( ncol(mat), Letters=Letters, separator=separator) } return( mat ) } # Create a set of letters for a letter display. If "n" exceeds the number of letters # specified in "Letters", they are recycled with one or more separating character(s) # preceding each recycled letter. # e.g. get_letters(10, Letters=letters[1:4]) produces: "a" "b" "c" "d" ".a" ".b" ".c" ".d" "..a" "..b" # # n ... number of letters # Letters ... the set of characters to be used # separator ... a character to be used as separator e.g. # n=5, Letters=c("a","b") => "a", "b", ".a", ".b", "..a" get_letters <- function( n, Letters=c(letters, LETTERS), separator="." ){ n.complete <- floor(n / length(Letters)) # number of complete sets of Letters n.partial <- n %% length(Letters) # number of additional Letters lett <- character() separ="" if( n.complete > 0 ){ for( i in 1:n.complete ){ lett <- c(lett, paste(separ, Letters, sep="") ) separ <- paste( separ, separator, sep="" ) } } if(n.partial > 0 ) lett <- c(lett, paste(separ, Letters[1:n.partial], sep="") ) return(lett) } multcomp/R/expressions.R0000644000176200001440000006577014231530652015040 0ustar liggesusers # $Id: expressions.R 485 2022-04-25 14:35:22Z thothorn $ ### determine if an expression `x' can be interpreted as numeric is_num <- function(x) { if (length(x) == 1) return(is.numeric(x)) if (length(x) == 2) return(is.name(x[[1]]) && is.numeric(x[[2]])) return(FALSE) } ### expressions as.char <- function(ex) { if (length(ex) == 1) return(as.character(ex)) if (length(ex) == 3 && ex[[1]] == ":") return(paste(as.char(ex[[2]]), ":", as.char(ex[[3]]), sep = "")) stop("multcomp::as.char: Failed to convert expression ", ex, " to character") } ### extract left hand side of an expression lhs <- function(ex) { if (length(ex) != 1) stop("multcomp:::lhs: expression is not of length 1", call. = FALSE ) if (length(ex[[1]]) != 3) stop("multcomp:::lhs: expression ", sQuote(ex), " does not contain a left and right hand side", call. = FALSE ) return(ex[[1]][[2]]) } ### extract right hand side of an expression rhs <- function(ex) { if (length(ex) != 1) stop("multcomp:::rhs: expression is not of length 1", call. = FALSE ) if (length(ex[[1]][[3]]) == 2) return(-ex[[1]][[3]][[2]]) rhs <- ex[[1]][[3]] if (!is_num(rhs) || length(rhs) > 1) stop("multcomp:::rhs: right hand side of expression ", sQuote(ex), " is not a scalar numeric", call. = FALSE ) return(rhs) } ### extract direction of the _alternative_ side <- function(ex) { side <- as.char(ex[[1]][[1]]) if (!(side %in% c("<=", ">=", "==", "="))) stop("multcomp:::side: does not contain ", sQuote("<=, >=, =="), call. = FALSE ) alternative <- switch(side, "<=" = "greater", ">=" = "less", "==" = "two.sided", "=" = "two.sided") return(alternative) } expression2coef <- function(ex, vars, debug = FALSE) { ### uses walkCode and makeCodeWalker from codetools m.rhs <- rhs(ex) m.lhs <- lhs(ex) # get_coef_attr and set_coef_attr are replacements for attr and attr<- # expression2coef originally added 'coef' attributes to symbols directly, # but this is no longer allowed in R. Adding/accessing 'coef' attributes # on symbols has a "global" effect within a single invocation of # expression2coef - they are held in an environment named symcoef. # Previously adding/accessing 'coef' attributes on symbols had a global # effect in the whole R session. expression2coef never allows a binary # operation that would have the same effect (variable) in both operands, # but if that was ever supported, the scope of the 'coef' attributes on # symbols may have to be revisited. symcoef <- new.env(parent = emptyenv()) get_coef_attr <- function(x) { if (is.symbol(x)) get0(as.character(x), envir = symcoef, ifnotfound = NULL) else attr(x, 'coef') } set_coef_attr <- function(x, val) { if (is.symbol(x)) { if (is.null(x)) rm(as.character(x), envir = symcoef) else assign(as.character(x), val, envir = symcoef) } else attr(x, 'coef') <- val x } set_coef_attr( m.lhs, 1 ) if ( debug ) { message('expression2coef',': lhs is ', sQuote(paste0(deparse(m.lhs),collapse=''))) message('expression2coef',': rhs is ', sQuote(paste0(deparse(m.rhs),collapse=''))) } effects <- walkCode(m.lhs, makeCodeWalker( # dispatch operators handler = function(v, w) { if ( debug ) w$trace('handler',v,w) switch( v, '-' = w$sub, '+' = w$add, '*' = w$mul, '/' = w$div, '(' = w$exp, ':' = w$ita, # w$fatal('handler','operator ', sQuote(v), ' is not supported') w$eval ) }, is.effect<-function(x) { # vars is visible as a parameter to the enclosing function expression2coef as.character(x) %in% vars }, eval = function(v,w) { if ( debug ) w$trace('eval',v,w) parms <- c() for ( e in as.list(v)[-1] ) { coef <- 1 if ( debug ) message('eval',': walking ', sQuote(e), ' with coef = ', coef) parms <- c(parms, p <- walkCode(w$setCoef(e,coef),w) ) if ( is.effect( p ) ) w$fatal('eval','within ', sQuote(deparse(v)) , ', the term ', sQuote(p),' ', 'must not denote an effect. Apart from that, ', 'the term must evaluate to a real valued constant') } cparms <- c() for ( e in parms ) { cparms <- c(cparms,parse(text=paste(e,'*',w$getCoef(e)))) } if ( debug ) { dumped <- lapply(cparms, function(x,w) paste(x, 'with coef =', w$getCoef(x)),w) message('eval',': cparms = ', w$enum(dumped)) } res <- try ( do.call(as.character(v[[1]]), as.list(cparms)), silent=T ) if ( inherits(res, 'try-error' )) w$fatal('eval','the evaluation of the expression ', sQuote(deparse(v)),' ', 'failed with ', dQuote(attr(res,'condition')$message) ) if ( length(res) != 1 || !is.numeric(res) || !is.finite(res) ) w$fatal('eval','the expression ', sQuote(deparse(v)),' ', 'did not evaluate to a real valued constant. ', 'Result is ', sQuote(res) ) res <- w$setCoef(res*w$getCoef(v),1) if ( debug ) { dumped <- lapply(res, function(x,w) paste(x, 'with coef =', w$getCoef(x)),w) message('eval',': res = ', w$enum(dumped)) } res }, # call -- evaluate construct directly ( this should not be reached ) call = function(v,w) { if ( debug ) w$trace('call',v,w) w$fatal('call',"there is probably a syntax error within subexpression", sQuote(deparse(v))) }, # 'a - b' or '-a' -- support for subtraction of effects or constants (but not both) sub = function(v,w) { if ( debug ) w$trace('sub',v,w) uminus <- length(as.list(v)) == 2 minuend <- as.list(v)[2] subtrahend <- as.list(v)[3] if ( debug ) { message('sub',': minuend is ', sQuote(minuend), ', coef = ', w$getCoef(minuend) ) message('sub',': subtrahend is ', sQuote(subtrahend), ', coef = ', w$getCoef(subtrahend) ) message('sub',': uminus is ', uminus) } exp.coef <- ifelse( uminus, -w$getCoef(v), w$getCoef(v) ) res <- c() for ( e in minuend ) { if ( debug ) message('sub',': walking minuend ', sQuote(e), ', coef = ', exp.coef) res <- c( res, walkCode(w$setCoef(e, exp.coef ),w)) } if ( ! uminus ) { # if uminus becomes true, subtrahend is a list of nulls. # As a consequence, e would become null and the program would fail for ( e in subtrahend ) { if ( debug ) message('sub',': walking subtrahend ', sQuote(e), ', coef = ', -exp.coef) res <- c( res, walkCode(w$setCoef(e, -exp.coef),w)) } } sum <- 0 symbols <- c() # split result set into constants and symbols for ( e in res ) { if ( is.numeric(e) ) sum <- sum + e else symbols <- c(symbols, e) } # do not allow a reference a single effect to occur multiple times. # to do: could be folded into a single effect by summing up coeffs if ( length(dups <- symbols[duplicated(symbols)]) ) { w$fatal('sub','multiple occurence of ', w$enum(dups), ' ', 'found within expression ', sQuote(deparse(v))) } # fold constants into single number if ( length(symbols) == 0 ) { return(w$setCoef(sum,1)) } if ( sum ) { w$fatal('sub','forming a difference between a constant and ', 'an effect as in ', sQuote(deparse(v)), ' ', 'is not supported') } symbols }, # `:` `a` `b` -- support for interaction of effects as in A:B:C:D # `:` `-a` `b` -- also support one or more signs before the first term ita = function(v,w) { if ( debug ) w$trace('ita',v,w) tmp <- deparse(v) prefix <- gsub('^([+-]*)(.*)','\\1',tmp) name <- gsub('^([+-]*)(.*)','\\2',tmp) sign <- 1 if ( prefix != '' ) { for ( x in base::unlist(base::strsplit(prefix,'')) ) { sign <- sign * switch( x, '-' = -1, '+' = 1, w$fatal('ita', 'strange character ', sQuote(x), ' seen in ', sQuote(deparse(v)))) } } res <- w$setCoef(as.name(name), sign*w$getCoef(v) ) if ( debug ) { dumped <- lapply(res, function(x,w) paste(x, 'with coef =', w$getCoef(x)),w) message('ita',': res = ', w$enum(dumped)) } res }, # (expression) exp = function(v,w) { if ( debug ) w$trace('exp',v,w) res <- c() for ( e in as.list(v)[-1] ) { res <- c( res, walkCode(w$setCoef(e,1),w) ) } symbols <- c() for ( e in res ) { symbols <- c( symbols, w$setCoef(e, w$getCoef(e) * w$getCoef(v) ) ) } if ( debug ) { dumped <- lapply(symbols, function(x,w) paste(x, 'with coef =', w$getCoef(x)),w) message('exp',': res = ', w$enum(dumped)) } symbols }, # '+ a b' or '+ a' -- support for the addition of constants or effects (but not both) add = function(v,w) { if ( debug ) w$trace('add',v,w) res <- c() for ( e in as.list(v)[-1] ) { res <- c( res, walkCode(w$setCoef(e,1),w) ) } symbols <- c() sum <- 0 for ( e in res ) { if ( is.numeric(e) ) sum <- sum + e else symbols <- c( symbols, e ) } # fold constants into single number if ( length(symbols) == 0 ) { return( w$setCoef( sum * w$getCoef(v), 1 ) ) } # do not allow to reference a single effect multiple times. # to do: could be folded into a single effect by summing up coeffs if ( length(dups <- symbols[duplicated(symbols)]) != 0 ) { w$fatal('add','multiple occurence of ', w$enum(dups),' ', 'within subexpression ', sQuote(deparse(v))) } if ( sum ) { w$fatal('add','adding up a constant and an effect ', 'as in ', sQuote(deparse(v)), ' is not supported') } # associate expression coefficient with all leafs res <- c() for ( e in symbols ) { res <- c( res, w$setCoef(e, w$getCoef(e) * w$getCoef(v) ) ) } res }, # '* a b' -- support multiplication of constants or multiplication of an effect by a constant mul = function(v,w) { if ( debug ) w$trace('mul',v,w) # collect all leafs, including constants res <- c() for ( e in as.list(v)[-1] ) { res <- c(res, walkCode(w$setCoef(e,1),w) ) } # fold literals product <- 1 symbols <- c() for ( r in res ) { if ( is.numeric(r) ) product <- product * r else symbols <- c(symbols,r) } if ( product == 0 && length(symbols) ) { w$fatal('mul','The constant part of the expression ', sQuote(deparse(v)),' ', 'evaluates to zero. This would zero out the effect(s) ', sQuote(symbols) ) } # also take the expression coefficient into account product <- product * w$getCoef(v) # if only literals, return constant folding result as single number if ( length(symbols) == 0 ) { return(w$setCoef(product,1)) } # prevent multiplication of fixed effects as in 'A * B' but still # allow the multiplication effects by a constant if ( length(symbols) > 1 && all(unlist(lapply(res,is.symbol)) ) ) { w$fatal('mul','the multiplication of effects ', w$enum(symbols),' ', 'as in ', sQuote(deparse(v)), ' is not supported') } # associate the folded real valued literals as a coefficient with all symbols res <- c() for ( s in symbols ) { res <- c(res, w$setCoef(s, w$getCoef(s) * product )) } if ( debug ) { dumped <- lapply(res, function(x,w) paste(x, 'with coef =', w$getCoef(x)),w) message('mul',': res = ', w$enum(dumped)) } res }, # '/ a b' -- division of an expression 'a' by a constant expression 'b' div = function(v,w) { if ( debug ) w$trace('div',v,w) # const / const is allowed # fixed / const is allowed: -> coef(fixed) <- 1/const # const / fixed is forbidden # collect all leafs, including constants if ( (lv<-length(v)) != 3 ) { w$fatal('div', 'internal error: length of language object ', sQuote(v), ' ', 'is not 3, but ', lv,'. Please file a bug report') } dividend <- c() for ( e in as.list(v)[2] ) { dividend <- c(dividend, walkCode(w$setCoef(e,1),w)) } divisor <- c() for ( e in as.list(v)[3] ) { divisor <- c(divisor, walkCode(w$setCoef(e,1),w)) } if ( length(divisor) != 1 ) { w$fatal('div', "can't divide by ", sQuote(divisor), ' in ', sQuote(deparse(v))) } if ( any(unlist(lapply(divisor,is.effect))) ) { w$fatal('div', "cant't divide by effect ", sQuote(divisor), ' in ', sQuote(deparse(v))) } if ( any(unlist(lapply(divisor,is.symbol))) ) { w$fatal('div', "cant't divide by symbol ", sQuote(divisor), ' in ', sQuote(deparse(v))) } divisor <- as.numeric(divisor) if ( !is.finite(divisor) || divisor == 0) { w$fatal('div', "can't divide by ", sQuote(divisor), ' in ', sQuote(deparse(v))) } res <- c() for ( s in dividend ) { if ( is.numeric(s) ) { res <- c(res, s * w$getCoef(v) / divisor ) } else { res <- c(res, w$setCoef(s, w$getCoef(s) * w$getCoef(v) / divisor ) ) } } if ( debug ) { message("div",": dividend = ", w$enum(dividend)) message("div",": divisor = ", w$enum(divisor)) message("div",": res = ", w$enum(res)) } res }, # leaf(e,w) -- gets called with `e` being either an effect name or a literal leaf = function(e, w) { if ( debug ) w$trace('leaf',e,w) # leafs holding real valued constants tend to lose the coefficient # attribute during implicit conversions. Hence, multiply the coefficient # with the value and set the coefficient to one. if ( is.numeric(e) ) { return(w$setCoef(e * w$getCoef(e),1)) } e }, # return associated coefficient, or 1 if coefficient was not set before getCoef = function(e) { a <- get_coef_attr(e) ifelse( is.null(a), 1, a ) }, # set coefficient of `e` to `coef` and return e setCoef = function(e,coef) { set_coef_attr(e, coef) }, enum = function(x) { paste0("'" ,x, "'",collapse=', ') }, fatal = function(name,...) { stop(paste0('multcomp:::expression2coef::walkCode::',name),': ', ..., call. = FALSE ) }, trace = function(fn,v,w) { message(fn,': v = ', sQuote(v), ', mode = ', mode(v), ', typeof = ', typeof(v), ', length = ', length(v), ', coef = ', w$getCoef(v)) } )) # end of walkCode(lhs, makeCodeWalker( ... ) ) if ( any(idx <- is.numeric(effects) ) ) { stop('multcomp:::expression2coef: The lhs expression ', sQuote(deparse(m.lhs)), ' ', 'contains a numeric offset term evaluating to ', paste0(effects[idx],collapse=', '), '. ', 'This is either an internal error or a misspecification from your part. ', 'If so, please pull these offsets to the right-hand side of the equation', call. = FALSE ) } effect.names <- c() effect.coefs <- c() # There might be only a single effect as in 'Agriculture = 0'. Thus use # c(effects) to prevent the for loop from running into an error condition for ( effect in c(effects) ) { effect.names <- c( effect.names, as.character(effect)) effect.coefs <- c( effect.coefs, get_coef_attr(effect)) } list( coef = effect.coefs, names = effect.names, m = m.rhs, alternative = side(ex), lhs = deparse( m.lhs, width.cutoff = 500 ) ) } ### interpret character representations of linear functions chrlinfct2matrix <- function(ex, var) { if (!is.character(ex)) stop("multcomp:::chrlinfct2matrix: argument ", sQuote(ex), " is not of type character", call. = FALSE ) if (!is.character(var)) stop("multcomp:::chrlinfct2matrix: argument ", sQuote(var), " is not of type character", call. = FALSE ) K <- matrix(0, nrow = length(ex), ncol = length(var)) colnames(K) <- var rownames(K) <- seq_along(ex) m <- rep(0, length(ex)) for (i in 1:length(ex)) { expr <- parse(text = ex[i]) if (length(expr[[1]]) != 3) stop("multcomp:::chrlinfct2matrix: argument ", sQuote(ex[i]), " cannot be interpreted as expression", call. = FALSE ) tmp <- expression2coef(expr,vars=var) ### (Intercept) lost () in expression2coef if ("(Intercept)" %in% var) tmp$names[tmp$names == "Intercept"] <- "(Intercept)" if (!all(tmp$names %in% var)) stop("multcomp:::chrlinfct2matrix: variable(s) ", paste(sQuote(tmp$names[!tmp$names %in% var]),collapse=', '), " not found", call. = FALSE ) for (n in tmp$names) K[i, var == n] <- tmp$coef[tmp$names == n] m[i] <- tmp$m if (i == 1) { alternative <- tmp$alternative } else { if (tmp$alternative != alternative) stop("multcomp:::chrlinfct2matrix: mix of alternatives currently not implemented", call. = FALSE ) } rownames(K)[i] <- paste0(tmp$lhs, collapse = "") } list(K = K, m = m, alternative = alternative) } multcomp/R/methods.R0000644000176200001440000000500214172227611014101 0ustar liggesusers # $Id: methods.R 431 2016-02-03 10:58:04Z thothorn $ ### methods for `glht' objects coef.glht <- function(object, rhs = FALSE, ...) { chkdots(...) if (rhs) return(object$rhs) ret <- drop(object$linfct %*% object$coef) names(ret) <- rownames(object$linfct) ret } vcov.glht <- function(object, ...) { chkdots(...) object$linfct %*% tcrossprod(object$vcov, object$linfct) } summary.glht <- function(object, test = adjusted(), ...) { chkdots(...) ts <- test(object) object$test <- ts class(object) <- switch(class(ts), "mtest" = "summary.glht", "gtest" = "summary.gtest") class(object) <- c(class(object), "glht") return(object) } confint.glht <- function(object, parm, level = 0.95, calpha = adjusted_calpha(), ...) { chkdots(...) type <- attr(calpha, "type") if (is.function(calpha)) calpha <- calpha(object, level) if (!is.numeric(calpha) || length(calpha) != 1) stop(sQuote("calpha"), " is not a scalar") error <- attr(calpha, "error") attributes(calpha) <- NULL betahat <- coef(object) ses <- sqrt(diag(vcov(object))) switch(object$alternative, "two.sided" = { LowerCL <- betahat - calpha * ses UpperCL <- betahat + calpha * ses }, "less" = { LowerCL <- rep(-Inf, length(ses)) UpperCL <- betahat + calpha * ses }, "greater" = { LowerCL <- betahat + calpha * ses UpperCL <- rep( Inf, length(ses)) }) ci <- cbind(LowerCL, UpperCL) colnames(ci) <- c("lower", "upper") object$confint <- cbind(betahat, ci) colnames(object$confint) <- c("Estimate", "lwr", "upr") attr(object$confint, "conf.level") <- level attr(object$confint, "calpha") <- calpha attr(object$confint, "error") <- error if (is.null(type)) type <- "univariate" attr(object, "type") <- type class(object) <- c("confint.glht", "glht") return(object) } cftest <- function(model, parm, test = univariate(), ...) { if (missing(parm)) return(summary(glht(model), test = test, ...)) cf <- coef(model) if (is.character(parm)) { iparm <- match(parm, names(cf)) } else { iparm <- match(parm, 1:length(cf)) } if (any(is.na(iparm))) stop("cannot find variable(s): ", paste(parm[is.na(iparm)], collapse = ",")) K <- diag(length(cf))[iparm, , drop = FALSE] rownames(K) <- names(cf)[iparm] summary(glht(model, linfct = K), test = test, ...) } multcomp/R/mcp.R0000644000176200001440000003333014172227611013222 0ustar liggesusers # $Id: mcp.R 456 2019-02-27 16:16:46Z thothorn $ ### multiple comparison procedures for levels of ### factors in AN(C)OVA models mcp <- function(..., interaction_average = FALSE, covariate_average = FALSE) { linfct <- list(...) linfct <- lapply(linfct, function(x) { if (is.numeric(x) && !is.matrix(x)) { return(matrix(x, nrow = 1)) } else { return(x) }}) if (is.null(names(linfct))) stop(sQuote("linfct"), " doesn't have a ", sQuote("names"), " attribute") classes <- sapply(linfct, function(x) inherits(x, "matrix") || inherits(x, "character")) if (length(linfct) == 1) { lf <- linfct[[1]][1] if (lf == "Means") { class(linfct) <- "means" return(linfct) } } attr(linfct, "interaction_average") <- interaction_average attr(linfct, "covariate_average") <- covariate_average if (all(classes)) { class(linfct) <- "mcp" return(linfct) } stop("Arguments don't consist of either matrices or characters") } ### extract factors and contrast matrices used in `model' factor_contrasts <- function(model) { ### extract model matrix, frame and terms mm <- try(model.matrix(model)) if (inherits(mm, "try-error")) stop("no ", sQuote("model.matrix"), " method for ", sQuote("model"), " found!") mf <- try(model.frame(model)) if (inherits(mf, "try-error")) stop("no ", sQuote("model.frame"), " method for ", sQuote("model"), " found!") tm <- try(terms(model)) if (inherits(tm, "try-error")) stop("no ", sQuote("terms"), " method for ", sQuote("model"), " found!") list(contrasts = attr(mm, "contrasts"), factors = attr(tm, "factors"), intercept = attr(tm, "intercept") != 0, mm = mm, mf = mf) } ### convert linear hypotheses supplied as single matrices, ### type arguments or expressions into one matrix mcp2matrix <- function(model, linfct) { ### extract factors and contrasts fc <- factor_contrasts(model) contrasts <- fc$contrasts factors <- fc$factors intercept <- fc$intercept mf <- fc$mf mm <- fc$mm alternative <- NULL ### linear hypotheses if (!is.list(linfct) || is.null(names(linfct))) stop(sQuote("linfct"), "is not a named list") nhypo <- names(linfct) checknm <- nhypo %in% rownames(factors) if (!all(checknm)) stop("Variable(s) ", sQuote(nhypo[!checknm]), " have been specified in ", sQuote("linfct"), " but cannot be found in ", sQuote("model"), "! ") if (any(checknm)) { checknm <- sapply(mf[nhypo[checknm]], is.factor) if (!all(checknm)) stop("Variable(s) ", sQuote(paste(nhypo[!checknm], collapse = ", ")), " of class ", sQuote(paste(sapply(mf[nhypo[!checknm]], class), collapse = ", ")), " is/are not contained as a factor in ", sQuote("model"), ".") } m <- c() ctype <- c() for (nm in nhypo) { if (is.character(linfct[[nm]])) { Kchr <- function(kch) { ### check if kch is suitable as `type' argument to `contrMat' types <- eval(formals(contrMat)$type) pm <- pmatch(kch, types) ### if yes, compute K from `contrMat' if (!is.na(pm)) { tmpK <- contrMat(table(mf[[nm]]), type = types[pm]) ctype <<- c(ctype, types[pm]) } else { ### if not, interpret kch as an expression tmp <- chrlinfct2matrix(kch, levels(mf[[nm]])) tmpK <- tmp$K m <<- c(m, tmp$m) if (is.null(alternative)) { alternative <<- tmp$alternative } else { if (tmp$alternative != alternative) stop("mix of alternatives currently not implemented") } } if (is.null(rownames(tmpK))) rownames(tmpK) <- paste(kch, 1:nrow(tmpK), sep = "_") if (length(nhypo) > 1) rownames(tmpK) <- paste(nm, rownames(tmpK), sep = ": ") list(K = tmpK) } tmp <- lapply(linfct[[nm]], Kchr) linfct[[nm]] <- do.call("rbind", lapply(tmp, function(x) x$K)) } } ### transform linear hypotheses using model contrasts hypo <- vector(mode = "list", length = length(nhypo)) names(hypo) <- nhypo for (nm in nhypo) { ### extract contrast matrix for each factor from model fit if (is.character(contrasts[[nm]])) { C <- do.call(contrasts[[nm]], list(n = nlevels(mf[[nm]]))) } else { C <- contrasts[[nm]] } ### and transform the original linear hypotheses ### K beta to K C beta^* if (intercept || (!intercept && nm != colnames(factors)[1])) { Kstar <- linfct[[nm]] %*% C } else { ### model.matrix has `contrasts' argument even if no intercept ### was fitted and the contrast actually hasn't been applied ### This is, however, only the case for the _first_ factor Kstar <- linfct[[nm]] } pos <- factors[nm,] == 1 ### interaction terms (if any) if (sum(pos) > 1) warning("covariate interactions found -- ", "default contrast might be inappropriate") hypo[[nm]] <- list(K = Kstar, where = attr(mm, "assign") %in% which(nm == colnames(factors))) } ### combine all single matrices computed so far into ### one matrix of all linear hypoheses Ktotal <- matrix(0, nrow = sum(sapply(hypo, function(x) nrow(x$K))), ncol = ncol(mm)) colnames(Ktotal) <- colnames(mm) count <- 1 for (h in hypo) { Ktotal[count:(count + nrow(h$K) - 1), h$where] <- h$K count <- count + nrow(h$K) } if (!is.matrix(Ktotal)) Ktotal <- matrix(Ktotal, nrow = 1) rownames(Ktotal) <- unlist(lapply(hypo, function(x) rownames(x$K))) if (is.null(ctype)) ctype <- "User-defined" ctype <- paste(unique(ctype), collapse = ", ") attr(Ktotal, "type") <- ctype if (length(m) == 0) m <- 0 list(K = Ktotal, m = m, alternative = alternative, type = ctype) } ### contributed by Richard M. Heiberger meanslinfct <- function (model, focus, mmm.data = model$model, formula.in = terms(model), contrasts.arg = NULL) { mmm.factor <- sapply(mmm.data, inherits, "factor") mmm.levels <- lapply(mmm.data[mmm.factor], levels) mmm.rows <- sapply(mmm.levels, length) n.mmm.rows <- prod(mmm.rows) mmm.new <- mmm.data[1:n.mmm.rows, ] mmm.factor.names <- names(mmm.data)[mmm.factor] mmm.rows.forward <- cumprod(mmm.rows) mmm.rows.forward.prev <- c(1, mmm.rows.forward) names(mmm.rows.forward.prev) <- c(names(mmm.rows.forward), "all") for (i in mmm.factor.names) mmm.new[[i]] <- gl(mmm.rows[i], mmm.rows.forward.prev[i], n.mmm.rows, labels = mmm.levels[[i]]) mmm.numeric.names <- names(mmm.data)[!mmm.factor] for (i in mmm.numeric.names) mmm.new[[i]][] <- mean(mmm.data[[i]]) none.data <- model.matrix(formula.in, data = mmm.new, contrasts.arg=contrasts.arg) none.linfct <- aggregate(none.data, by = mmm.new[focus], FUN = mean)[, -1] rownames(none.linfct) <- levels(mmm.new[[focus]]) data.matrix(none.linfct) } mcp2matrix2 <- function (model, linfct, interaction_average = FALSE, covariate_average = FALSE) { fc <- factor_contrasts(model) contrasts <- fc$contrasts factors <- fc$factors intercept <- fc$intercept mf <- fc$mf mm <- fc$mm alternative <- NULL if (!is.list(linfct) || is.null(names(linfct))) stop(sQuote("linfct"), "is not a named list") nhypo <- names(linfct) checknm <- nhypo %in% rownames(factors) if (!all(checknm)) stop("Variable(s) ", sQuote(nhypo[!checknm]), " have been specified in ", sQuote("linfct"), " but cannot be found in ", sQuote("model"), "! ") if (any(checknm)) { checknm <- sapply(mf[nhypo[checknm]], is.factor) if (!all(checknm)) stop("Variable(s) ", sQuote(paste(nhypo[!checknm], collapse = ", ")), " of class ", sQuote(paste(sapply(mf[nhypo[!checknm]], class), collapse = ", ")), " is/are not contained as a factor in ", sQuote("model"), ".") } m <- c() ctype <- c() for (nm in nhypo) { if (is.character(linfct[[nm]])) { Kchr <- function(kch) { types <- eval(formals(contrMat)$type) pm <- pmatch(kch, types) if (!is.na(pm)) { tmpK <- contrMat(table(mf[[nm]]), type = types[pm]) ctype <<- c(ctype, types[pm]) } else { tmp <- chrlinfct2matrix(kch, levels(mf[[nm]])) tmpK <- tmp$K m <<- c(m, tmp$m) if (is.null(alternative)) { alternative <<- tmp$alternative } else { if (tmp$alternative != alternative) stop("mix of alternatives currently not implemented") } } if (is.null(rownames(tmpK))) rownames(tmpK) <- paste(kch, 1:nrow(tmpK), sep = "_") if (length(nhypo) > 1) rownames(tmpK) <- paste(nm, rownames(tmpK), sep = ": ") list(K = tmpK) } tmp <- lapply(linfct[[nm]], Kchr) linfct[[nm]] <- do.call("rbind", lapply(tmp, function(x) x$K)) } } hypo <- vector(mode = "list", length = length(nhypo)) names(hypo) <- nhypo for (nm in nhypo) { if (is.character(contrasts[[nm]])) { C <- do.call(contrasts[[nm]], list(n = nlevels(mf[[nm]]))) } else { C <- contrasts[[nm]] } if (intercept) { Kstar <- linfct[[nm]] %*% C } else { Kstar <- linfct[[nm]] } pos <- factors[nm, ] == 1 cov.ave <- ((length(covariate_average) == 1 && (covariate_average=="mean" || covariate_average==TRUE)) || (length(covariate_average) > 1)) if (sum(pos) > 1) { if (!interaction_average) { warning("covariate interactions found -- ", "default contrast might be inappropriate") classes <- character(0) } else {##recover() Kinter <- c() for (i in which(pos)[-1]) { ## for (i in which(pos[apply(factors, 2, sum)==1])) { ## rmh [] k <- sum(attr(mm, "assign") == i)/ncol(Kstar) ivar <- rownames(factors)[factors[, i] == 1] ivar <- ivar[ivar != nm] classes <- sapply(mf[, ivar, drop = FALSE], is.factor) if (all(classes)) { fact <- 1/(k + 1) } else { fact <- 1 cov.ave <- cov.ave || !((length(covariate_average)==1) && (covariate_average == FALSE)) if (!cov.ave) warning("covariate interactions found -- please choose appropriate contrast") } if (sum(factors[1:which(rownames(factors) == nm), i]) == 1) { Kinter <- cbind(Kinter, Kstar[, rep(1:ncol(Kstar), k), drop = FALSE] * fact) } else { Kinter <- cbind(Kinter, Kstar[, rep(1:ncol(Kstar), rep(k, ncol(Kstar))), drop = FALSE] * fact) } } Kstar <- cbind(Kstar, Kinter) } } else classes <- character(0) hypo[[nm]] <- list(K = Kstar, where = attr(mm, "assign") %in% which(factors[nm, ] == 1)) } Ktotal <- matrix(0, nrow = sum(sapply(hypo, function(x) nrow(x$K))), ncol = ncol(mm)) colnames(Ktotal) <- colnames(mm) count <- 1 for (h in hypo) { Ktotal[count:(count + nrow(h$K) - 1), h$where] <- h$K count <- count + nrow(h$K) } if (!is.matrix(Ktotal)) Ktotal <- matrix(Ktotal, nrow = 1) rownames(Ktotal) <- unlist(lapply(hypo, function(x) rownames(x$K))) if (is.null(ctype)) ctype <- "User-defined" ctype <- paste(unique(ctype), collapse = ", ") attr(Ktotal, "type") <- ctype if (length(m) == 0) m <- 0 if (!all(classes) && cov.ave) { ## recover() switch(as.character(length(classes)), "0"={}, "1"= {if (length(covariate_average) != 1) stop("inconsistent covariate_average") c.a <- if (covariate_average=="mean" || covariate_average==TRUE) colMeans(mf[, ivar, drop = FALSE]) else unlist(covariate_average) whichCols <- grep(names(classes), dimnames(Ktotal)[[2]]) Ktotal[,whichCols] <- Ktotal[,whichCols] * c.a }, { ## 2 or more stop("not yet written, similar to 1.") }) } list(K = Ktotal, m = m, alternative = alternative, type = ctype) } multcomp/R/contrMat.R0000644000176200001440000001165314172227611014236 0ustar liggesusers# $Id: contrMat.R 454 2018-08-24 09:25:47Z thothorn $ contrMat <- function(n, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott", "UmbrellaWilliams", "GrandMean"), base = 1) { if (length(n) < 2) stop("less than two groups") if (!is.numeric(n)) stop(sQuote("n"), " is not numeric") m <- NULL type <- match.arg(type) if (type %in% c("AVE", "Williams", "McDermott") && length(n) < 3) stop("less than three groups") k <- length(n) if (base < 1 || base > k) stop("base is not between 1 and ", k) CM <- c() rnames <- c() if (!is.null(names(n))) varnames <- names(n) else varnames <- 1:length(n) kindx <- 1:k switch(type, "Dunnett" = { for(i in kindx[-base]) CM <- rbind(CM, as.numeric(kindx == i) - as.numeric( kindx == base)) rnames <- paste(varnames[kindx[-base]], "-", varnames[base]) }, "Tukey" = { for (i in 1:(k-1)) { for(j in (i+1):k) { CM <- rbind(CM, as.numeric(kindx==j)-as.numeric(kindx==i)) rnames <- c(rnames, paste(varnames[j], "-", varnames[i])) } } }, "Sequen" = { for (i in 2:k) { CM <- rbind(CM, as.numeric(kindx==i)-as.numeric(kindx==i-1)) rnames <- c(rnames, paste(varnames[i], "-", varnames[i-1])) } }, "AVE" = { help <- c(1, -n[2:k]/sum(n[2:k])) CM <- rbind(CM, help) for (i in 2:(k-1)) { x <- sum(n[1:(i-1)])+sum(n[(i+1):k]) help <- c(-n[1:(i-1)]/x, 1, -n[(i+1):k]/x) CM <- rbind(CM, help) } help <- c(-n[1:(k-1)]/sum(n[1:(k-1)]), 1) CM <- rbind(CM, help) rnames <- paste("C", 1:nrow(CM)) }, "Changepoint" = { for (i in 1:(k-1)) { help <- c(-n[1:i]/sum(n[1:i]), n[(i+1):k]/sum(n[(i+1):k])) CM <- rbind(CM, help) } rnames <- c(rnames, paste("C", 1:nrow(CM))) }, "Williams" = { for (i in 1:(k-2)) { help <- c(-1, rep(0, k-i-1), n[(k-i+1):k]/sum(n[(k-i+1):k])) CM <- rbind(CM, help) } help <- c(-1, n[2:k]/sum(n[2:k])) CM <- rbind(CM, help) rnames <- c(rnames, paste("C", 1:nrow(CM))) }, "Marcus" = { cm1 <- matrix(0, nrow=k-1, ncol=k) cm2 <- cm1 for (i in 1:(k-1)) { cm1[i,(i+1):k] <- n[(i+1):k]/sum(n[(i+1):k]) cm2[i,1:i] <- n[1:i]/sum(n[1:i]) } ### row <- k*(k-1)/2 index <- 1 for (i in 1:(k-1)) { for (j in 1:i) { help <- cm1[i,]-cm2[j,] CM <- rbind(CM, help) index <- index+1 } } rnames <- c(rnames, paste("C", 1:nrow(CM))) }, "McDermott" = { for(i in 1:(k-2)) { help <- c(-n[1:i]/sum(n[1:i]), 1, rep(0, k-i-1)) CM <- rbind(CM, help) } help <- c(-n[1:(k-1)]/sum(n[1:(k-1)]), 1) CM <- rbind(CM, help) rnames <- c(rnames, paste("C", 1:nrow(CM))) }, "Tetrade" = { if (is.null(m)) stop(sQuote("m"), " is missing") a <- length(n) b <- length(m) if (!is.null(names(m))) varnamesm <- names(m) else varnamesm <- 1:length(m) idi <- 1:a idj <- 1:b for (i1 in 1:(a-1)) { for (i2 in (i1+1):a) { for (j1 in 1:(b-1)) { for (j2 in (j1+1):b) { CM <- rbind(CM, kronecker( ( as.numeric(idi==i1)-as.numeric(idi==i2) ), ( as.numeric(idj==j1)-as.numeric(idj==j2) ) ) ) rnames <- c(rnames, paste( "(", paste(varnames[i1], varnamesm[j1], sep = ":"), "-", paste(varnames[i1], varnamesm[j2], sep = ":"), ")", "-", "(", paste(varnames[i2], varnamesm[j1], sep = ":"), "-", paste(varnames[i2], varnamesm[j2], sep = ":"), ")", sep="")) } } } } }, "UmbrellaWilliams" = { for (j in 1:(k-1)) { for (i in 1:(k - j)) { helper <- c(-1, rep(0, k - i - j), n[((k - i + 1):k)-(j-1)]/sum(n[((k - i + 1):k)-(j-1)]), rep(0, j-1)) CM <- rbind(CM, helper) } } rnames <- c(rnames, paste("C", 1:nrow(CM))) }, "GrandMean" = { CM <- matrix(rep(-n/sum(n), k), nrow = k, byrow = TRUE) diag(CM) <- diag(CM) + 1 rnames <- varnames }) rownames(CM) <- rnames if (type == "Tetrade") colnames(CM) <- NULL ###levels(interaction(varnames, varnamesm)) else colnames(CM) <- varnames attr(CM, "type") <- type class(CM) <- c("contrMat", "matrix") CM } multcomp/R/maxsets.R0000644000176200001440000000316614172227611014133 0ustar liggesusers # $Id: maxsets.R 229 2008-04-04 11:47:30Z thothorn $ ### compute all possible (ordered) subsets of the index set K ### cf. Westfall (1997, Section 3.2) allsubsets <- function(K) { if (length(K) == 0) return(list(NULL)) if (length(K) == 1) return(list(K)) ret <- as.list(K) for (i in 1:(length(K)-1)) { tmp <- allsubsets(K[-(1:i)]) for (j in 1:length(tmp)) tmp[[j]] <- c(K[i], tmp[[j]]) ret <- c(ret, tmp) } ret } ### check if any of C[,1:(min(K)-1)] is in column space of C[,K] ### cf. Westfall (1997, Section 3.2) checkCS <- function(K, C) { if (length(K) == ncol(C)) return(TRUE) CK <- C[,K,drop = FALSE] Cj <- C[,1:(min(K)-1), drop = FALSE] tmp <- Cj - (CK %*% MPinv(CK)$MPinv %*% Cj) all(colSums(tmp^2) > .Machine$double.eps) } ### remove redundant index sets rmsets <- function(sets) { if (length(sets) == 1) return(sets) rm <- logical(length(sets)) for (j in 1:(length(sets) - 1)) { set <- sets[[j]] rm[j] <- any(sapply(sets[(j + 1):length(sets)], function(x) all(set %in% x))) } sets[!rm] } ### compute maximal sets of linear hypotheses ### cf. Westfall (1997, Section 3.2) maxsets <- function(K) { C <- t(K) k <- ncol(C) S <- 1:k ret <- vector(mode = "list", length = k) for (j in S) { tmp <- allsubsets(S[-(1:j)]) for (i in 1:length(tmp)) tmp[[i]] <- c(j, tmp[[i]]) if (length(tmp) > 1 || length(tmp[[1]]) > 1) tmp <- c(j, tmp) ret[[j]] <- tmp[sapply(tmp, checkCS, C = C)] } lapply(ret, rmsets) } multcomp/cleanup0000755000176200001440000000071615075167046013506 0ustar liggesusers#!/bin/sh for f in ./R/*~; do rm -f $f done for f in ./man/*~; do rm -f $f done for f in *~; do rm -f $f done for f in .*~; do rm -f $f done for f in ./tests/*~; do rm -f $f done for f in ./inst/*~; do rm -f $f done for f in ./tests/*.ps; do rm -f $f done for f in ./inst/doc; do rm -f $f done find . -name "*~" -exec rm -f {} \; find . -name "DEADJOE" -exec rm -f {} \; find . -name "svn-*" -exec rm -f {} \; exit 0 multcomp/demo/0000755000176200001440000000000014712342561013043 5ustar liggesusersmultcomp/demo/Ch_GLM.Rout.save0000644000176200001440000004206414712341452015710 0ustar liggesusers R version 4.4.2 (2024-10-31) -- "Pile of Leaves" Copyright (C) 2024 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu 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. [Previously saved workspace restored] > > ################################################### > ### chunk number 2: setup > ################################################### > set.seed(290875) > > > ################################################### > ### chunk number 3: thuesen:ex > ################################################### > data("thuesen", package = "ISwR") > thuesen <- thuesen[!is.na(thuesen[,"short.velocity"]),] > thuesen.lm <- lm(short.velocity ~ blood.glucose, data = thuesen) > > > ################################################### > ### chunk number 4: lm-coef-vcov > ################################################### > betahat <- coef(thuesen.lm) > Vbetahat <- vcov(thuesen.lm) > > > ################################################### > ### chunk number 5: lm-C > ################################################### > C <- diag(2) > Sigma <- diag(1 / sqrt(diag(C %*% Vbetahat %*% t(C)))) > t <- Sigma %*% C %*% betahat > Cor <- Sigma %*% (C %*% Vbetahat %*% t(C)) %*% t(Sigma) > > > ################################################### > ### chunk number 6: corr > ################################################### > Cor [,1] [,2] [1,] 1.0000000 -0.9230802 [2,] -0.9230802 1.0000000 > > > ################################################### > ### chunk number 7: lm-partial > ################################################### > library("mvtnorm") > thuesen.df <- nrow(thuesen) - length(betahat) > q <- sapply(abs(t), function(x) + 1 - pmvt(-rep(x, 2), rep(x, 2), corr = Cor, + df = thuesen.df)) > > > ################################################### > ### chunk number 8: lm-partial > ################################################### > delta <- rep(0, 2) > myfct <- function(x, conf) { + lower <- rep(-x, 2) + upper <- rep(x, 2) + pmvt(lower, upper, df = thuesen.df, corr = Cor, + delta, abseps = 0.0001)[1] - conf + } > > > ################################################### > ### chunk number 9: lm-partial > ################################################### > u <- uniroot(myfct, lower = 1, upper = 5, conf = 0.95)$root > round(u, 3) [1] 2.229 > > > ################################################### > ### chunk number 10: lm-C2 > ################################################### > rownames(C) <- names(betahat) > > > ################################################### > ### chunk number 11: lm-mcp > ################################################### > library("multcomp") 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 > thuesen.mc <- glht(thuesen.lm, linfct = C) > summary(thuesen.mc) Simultaneous Tests for General Linear Hypotheses Fit: lm(formula = short.velocity ~ blood.glucose, data = thuesen) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) (Intercept) == 0 1.09781 0.11748 9.345 1e-08 *** blood.glucose == 0 0.02196 0.01045 2.101 0.0645 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 12: lm-confint > ################################################### > confint(thuesen.mc) Simultaneous Confidence Intervals Fit: lm(formula = short.velocity ~ blood.glucose, data = thuesen) Quantile = 2.23 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr (Intercept) == 0 1.097815 0.835837 1.359793 blood.glucose == 0 0.021963 -0.001348 0.045274 > > > ################################################### > ### chunk number 13: lm-confint > ################################################### > summary(thuesen.mc, test = adjusted(type = "Westfall")) Simultaneous Tests for General Linear Hypotheses Fit: lm(formula = short.velocity ~ blood.glucose, data = thuesen) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) (Intercept) == 0 1.09781 0.11748 9.345 1e-08 *** blood.glucose == 0 0.02196 0.01045 2.101 0.0479 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ################################################### > ### chunk number 14: warpbreaksBoxplot > ################################################### > plot(breaks ~ tension, data = warpbreaks, + varwidth = TRUE, main = "", xlab = "Tension", ylab = "Breaks") > > > ################################################### > ### chunk number 15: aov-fit > ################################################### > warpbreaks.aov <- aov(breaks ~ tension, data = warpbreaks) > summary(warpbreaks.aov) Df Sum Sq Mean Sq F value Pr(>F) tension 2 2034 1017.1 7.206 0.00175 ** Residuals 51 7199 141.1 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > > > ################################################### > ### chunk number 16: contr-1 > ################################################### > glht(warpbreaks.aov, 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 > > > ################################################### > ### chunk number 17: contr-2 > ################################################### > glht(warpbreaks.aov, + 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 > > > ################################################### > ### chunk number 18: contr-3a > ################################################### > contr <- rbind("M - L" = c(-1, 1, 0), + "H - L" = c(-1, 0, 1), + "H - M" = c( 0, -1, 1)) > contr [,1] [,2] [,3] M - L -1 1 0 H - L -1 0 1 H - M 0 -1 1 > > > ################################################### > ### chunk number 19: contr-3c > ################################################### > glht(warpbreaks.aov, 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 > > > ################################################### > ### chunk number 20: contr-3 > ################################################### > glht(warpbreaks.aov, + 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 > > > ################################################### > ### chunk number 21: trt-contr > ################################################### > contr.treatment(3) 2 3 1 0 0 2 1 0 3 0 1 > > > ################################################### > ### chunk number 22: out-1 > ################################################### > warpbreaks.mc <- glht(warpbreaks.aov, + linfct = mcp(tension = "Tukey")) > names(warpbreaks.mc) [1] "model" "linfct" "rhs" "coef" "vcov" [6] "df" "alternative" "type" "focus" > > > ################################################### > ### chunk number 23: out-2 > ################################################### > warpbreaks.mc$model Call: aov(formula = breaks ~ tension, data = warpbreaks) Terms: tension Residuals Sum of Squares 2034.259 7198.556 Deg. of Freedom 2 51 Residual standard error: 11.88058 Estimated effects may be unbalanced > > > ################################################### > ### chunk number 24: out-3 > ################################################### > warpbreaks.mc$linfct (Intercept) tensionM tensionH M - L 0 1 0 H - L 0 0 1 H - M 0 -1 1 attr(,"type") [1] "Tukey" > > > ################################################### > ### chunk number 25: out-4 > ################################################### > warpbreaks.mc$rhs [1] 0 0 0 > > > ################################################### > ### chunk number 26: out-5 > ################################################### > warpbreaks.mc$coef (Intercept) tensionM tensionH 36.38889 -10.00000 -14.72222 > warpbreaks.mc$vcov (Intercept) tensionM tensionH (Intercept) 7.841564 -7.841564 -7.841564 tensionM -7.841564 15.683128 7.841564 tensionH -7.841564 7.841564 15.683128 > > > ################################################### > ### chunk number 27: out-6 > ################################################### > warpbreaks.mc$df [1] 51 > > > ################################################### > ### chunk number 28: out-7 > ################################################### > warpbreaks.mc$alternative [1] "two.sided" > > > ################################################### > ### chunk number 29: out-7 > ################################################### > warpbreaks.mc$type [1] "Tukey" > > > ################################################### > ### chunk number 30: summary-1 > ################################################### > summary(warpbreaks.mc) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ tension, data = warpbreaks) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) M - L == 0 -10.000 3.960 -2.525 0.03846 * H - L == 0 -14.722 3.960 -3.718 0.00145 ** H - M == 0 -4.722 3.960 -1.192 0.46308 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 31: summary-1a > ################################################### > warpbreaks.res <- summary(warpbreaks.mc) > > > ################################################### > ### chunk number 32: summary-1b > ################################################### > warpbreaks.res$test$pvalues [1] 0.038404929 0.001441352 0.463068525 attr(,"error") [1] 0.0001839626 > > > ################################################### > ### chunk number 33: summary-2 > ################################################### > summary(warpbreaks.mc, test = Ftest()) 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 Global Test: F DF1 DF2 Pr(>F) 1 7.206 2 51 0.001753 > > > ################################################### > ### chunk number 34: summary-3 > ################################################### > summary(warpbreaks.mc, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ tension, data = warpbreaks) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) M - L == 0 -10.000 3.960 -2.525 0.014717 * H - L == 0 -14.722 3.960 -3.718 0.000501 *** H - M == 0 -4.722 3.960 -1.192 0.238614 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > > > ################################################### > ### chunk number 35: summary-4 > ################################################### > summary(warpbreaks.mc, test = adjusted(type = "bonferroni")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ tension, data = warpbreaks) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) M - L == 0 -10.000 3.960 -2.525 0.0442 * H - L == 0 -14.722 3.960 -3.718 0.0015 ** H - M == 0 -4.722 3.960 -1.192 0.7158 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- bonferroni method) > > > ################################################### > ### chunk number 36: summary-4 > ################################################### > summary(warpbreaks.mc, test = adjusted(type = "single-step")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ tension, data = warpbreaks) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) M - L == 0 -10.000 3.960 -2.525 0.03852 * H - L == 0 -14.722 3.960 -3.718 0.00144 ** H - M == 0 -4.722 3.960 -1.192 0.46308 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 37: sci-1 > ################################################### > warpbreaks.ci <- confint(warpbreaks.mc, level = 0.95) > warpbreaks.ci Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ tension, data = warpbreaks) Quantile = 2.4135 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr M - L == 0 -10.0000 -19.5581 -0.4419 H - L == 0 -14.7222 -24.2803 -5.1641 H - M == 0 -4.7222 -14.2803 4.8359 > > > ################################################### > ### chunk number 38: sci-2 > ################################################### > plot(warpbreaks.ci, main = "", ylim = c(0.5, 3.5), + xlab = "Breaks") > > > ################################################### > ### chunk number 39: warpbreaksCI > ################################################### > plot(warpbreaks.ci, main = "", ylim = c(0.5, 3.5), xlab = "Breaks") > > > ################################################### > ### chunk number 40: sci-3 > ################################################### > cbon <- qt(1-0.05/6, 51) > cbon [1] 2.475514 > > > ################################################### > ### chunk number 41: sci-4 > ################################################### > confint(warpbreaks.mc, calpha = cbon) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = breaks ~ tension, data = warpbreaks) Quantile = 2.4755 95% confidence level Linear Hypotheses: Estimate lwr upr M - L == 0 -10.0000 -19.8035 -0.1965 H - L == 0 -14.7222 -24.5257 -4.9187 H - M == 0 -4.7222 -14.5257 5.0813 > > > ################################################### > ### chunk number 42: warpbreaksCLD > ################################################### > warpbreaks.cld <- cld(warpbreaks.mc) > plot(warpbreaks.cld) > > > ################################################### > ### chunk number 43: cld-1 > ################################################### > warpbreaks.cld <- cld(warpbreaks.mc) > > > ################################################### > ### chunk number 44: cld-2 > ################################################### > plot(warpbreaks.cld) > > sessionInfo() R version 4.4.2 (2024-10-31) Platform: x86_64-pc-linux-gnu Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/local/lib/R/lib/libRblas.so LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8 [5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 [7] LC_PAPER=en_GB.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] multcomp_1.4-26 TH.data_1.1-2 MASS_7.3-61 survival_3.7-0 [5] mvtnorm_1.3-2 loaded via a namespace (and not attached): [1] compiler_4.4.2 zoo_1.8-12 Matrix_1.7-1 tools_4.4.2 [5] sandwich_3.1-1 codetools_0.2-20 splines_4.4.2 grid_4.4.2 [9] lattice_0.22-6 > > proc.time() user system elapsed 0.678 0.068 0.798 multcomp/demo/Ch_Theory.R0000644000176200001440000000242714712341746015063 0ustar liggesusers ################################################### ### chunk number 2: setup ################################################### set.seed(290875) ################################################### ### chunk number 3: padj-1 ################################################### p <- c(0.01, 0.015, 0.005) p.adjust(p, "bonferroni") ################################################### ### chunk number 4: padj-2 ################################################### p.adjust(p, "holm") ################################################### ### chunk number 5: simesplot ################################################### library("mvtnorm") set.seed(12345) x <- rmvnorm(n = 100, mean = c(2,2), sigma = diag(2)) p <- 1 - pnorm(x) plot(p, xlim = c(0, 1), ylim = c(0, 1), ylab = expression(p[2]), xlab = expression(p[1]), col = rgb(0,0,0,1)) abline(h = 0.05, lty=3) abline(h = 0.1, lty=3) abline(v = 0.05, lty=3) abline(v = 0.1, lty=3) ################################################### ### chunk number 6: padj-3 ################################################### p <- c(0.01, 0.02, 0.022, 0.09) p.adjust(p, "hochberg") ################################################### ### chunk number 7: padj-4 ################################################### p.adjust(p, "hommel") sessionInfo() multcomp/demo/Ch_Misc.R0000644000176200001440000002130414712341541014470 0ustar liggesusers ################################################### ### chunk number 2: setup ################################################### set.seed(290875) ################################################### ### chunk number 3: packages-5 ################################################### library("multcomp") library("coin") ################################################### ### chunk number 4: hypergeom ################################################### layout(matrix(1:2, ncol = 2)) x1 <- 0:8 x2 <- 0:11 plot(x1,dhyper(x1,50,52,8), type="h", ylim=c(-0.001,0.3), yaxp=c(0,0.3,3), ylab="Probability", xlab=expression(paste("Number of events, ", E[1]))) abline(h = 0.1, lty=3) abline(h = 0.2, lty=3) plot(x2,dhyper(x2,51,55,11), type="h", ylim=c(0,0.3), yaxp=c(0,0.3,3), ylab="Probability", xlab=expression(paste("Number of events, ", E[2]))) abline(h = 0.1, lty=3) abline(h = 0.2, lty=3) ################################################### ### chunk number 5: hypergeom2 ################################################### layout(matrix(1:1, ncol = 1)) ################################################### ### chunk number 6: adevent-fm ################################################### data("adevent", package = "multcomp") library("coin") fm <- as.formula(paste( paste("E", 1:28, sep = "", collapse = "+"), "~ group")) fm ################################################### ### chunk number 7: adevent-coin ################################################### it <- independence_test(fm, data = adevent, distribution = approximate(B = 10000)) statistic(it, "standardized") pvalue(it, method = "single-step") ################################################### ### chunk number 8: mtept-coin ################################################### data("mtept", package = "multcomp") it <- independence_test(E1 + E2 + E3 + E4 ~ treatment, data = mtept, distribution = approximate(B = 50000)) statistic(it, "standardized") pvalue(it, method = "single-step") ################################################### ### chunk number 9: gsd-1 ################################################### library("gsDesign") x0.0 <- gsDesign(k=4, test.type=1, sfu="WT", sfupar=0) x0.25 <- gsDesign(k=4, test.type=1, sfu="WT", sfupar=0.25) x0.5 <- gsDesign(k=4, test.type=1, sfu="WT", sfupar=0.5) ################################################### ### chunk number 10: GSD-a ################################################### plot(x0.0$timing,x0.0$upper$bound, type="b", pch=20, xlab="Information fraction", ylab="Rejection boundaries") lines(x0.25$timing,x0.25$upper$bound, lty=2) points(x0.25$timing,x0.25$upper$bound, pch=21) lines(x0.5$timing,x0.5$upper$bound, lty=3) points(x0.5$timing,x0.5$upper$bound, pch=22) legend(x=c(0.6,1), y = c(3.6,4.0), lty=c(1,2,3), pch=c(20,21,22), legend=c(expression(paste(Delta,"=0 (O'Brien-Fleming)")), expression(paste(Delta,"=0.25")), expression(paste(Delta,"=0.5 (Pocock)"))), bty = "n") ################################################### ### chunk number 11: GSD-b ################################################### plot(0:100/100, sfHSD(.025, 0:100/100, -4)$spend, type="l", lwd=2,xlab="Information fraction", ylab="Cumulative error-spending") lines(0:100/100, sfHSD(.025, 0:100/100, -2)$spend, lty=2, lwd=2) lines(0:100/100, sfHSD(.025, 0:100/100, 1)$spend, lty=3, lwd=2) legend(x=c(.0, .27), y=.025 * c(.8, 1), lty=1:3, lwd=2, legend=c(expression(paste(gamma," = -4")), expression(paste(gamma," = -2")), expression(paste(gamma," = 1"))), bty = "n") ################################################### ### chunk number 12: gsd-2 ################################################### library("gsDesign") gsd.OF <- gsDesign(k = 4, test.type = 1, sfu = "OF", alpha = 0.025, beta = 0.1, timing = 1, delta = 0.15) ################################################### ### chunk number 13: gsd-3 ################################################### gsd.OF ################################################### ### chunk number 14: gsd-4 ################################################### gsd.OF2 <- gsDesign(k = 4, test.type = 1, sfu = "OF", alpha = 0.025, beta = 0.1, timing = 1, delta = 0) gsd.OF2$n.I[4] ################################################### ### chunk number 15: gsd-5 ################################################### gsd.OF$upper$bound ################################################### ### chunk number 16: gsd-6 ################################################### gsd.OF$n.I ################################################### ### chunk number 17: GSD-c ################################################### print(plot(gsd.OF, plottype = 1, xlab = "Cumulative sample size", main = "")) ################################################### ### chunk number 18: gsd-7 ################################################### gsd.OF3 <- gsProbability(theta = gsd.OF$delta*seq(0,2,0.25), d = gsd.OF) gsd.OF3 ################################################### ### chunk number 19: gsd-8 ################################################### gsd.OF3$theta ################################################### ### chunk number 20: GSD-d ################################################### plot(gsd.OF3, plottype=2, main="", ylab="Boundary crossing probabilities", base = TRUE) ################################################### ### chunk number 21: GSD-e ################################################### plot(gsd.OF3, plottype=6, main="", ylab="Average sample size", base = TRUE) abline(h = 467, lty=3) ################################################### ### chunk number 22: ad-1 ################################################### if (FALSE) { ### asd.sim doesn't exist in asd anymore library("asd") res <- asd.sim(nsamp = c(110, 110), early = c(0.3, 0.3), final = c(0.3, 0.3), nsim = 10000, corr = 1, select = 1, ptest = c(1, 2)) res ################################################### ### chunk number 23: ad-2 ################################################### d <- seq(0,0.3,0.025) len <- length(d) nsim <- 10000 if (!file.exists("ad-2.Rda")) { res <- matrix(nrow = 4, ncol = len) for (i in 1:len){ res[1,i] <- asd.sim(nsamp=c(110,110), early=c(d[i],d[len]), final=c(d[i],d[len]), nsim=nsim, corr=1, select=1, ptest=c(1,2))$sim.reject/nsim res[2,i] <- asd.sim(nsamp=c(110,110), early=c(d[i],d[len]), final=c(d[i],d[len]), nsim=nsim, corr=1, select=2, ptest=c(1,2))$sim.reject/nsim res[3,i] <- asd.sim(nsamp=c(110,110), early=c(d[i],d[len]), final=c(d[i],d[len]), nsim=nsim, corr=1, select=5, ptest=c(1,2))$sim.reject/nsim res[4,i] <- asd.sim(nsamp=c(110,165), early=c(d[i],d[len]), final=c(d[i],d[len]), nsim=nsim, corr=1, select=1, ptest=c(1,2))$sim.reject/nsim } save(res, file = "ad-2.Rda") } else { load("ad-2.Rda") } ################################################### ### chunk number 24: ad-3 ################################################### plot(d, res[1,], type="n", ylim=c(0.4,1), ylab="Disjunctive power", xlab=expression(theta[1])) lines(lowess(d,res[1,]), lty="11") lines(lowess(d,res[2,]), lty="44") lines(lowess(d,res[3,]), lty="13") lines(lowess(d,res[4,]), lty="F5") legend(0.22,0.55,c("A","B","C","D"), lty=c("11", "44", "13", "F5"), bty = "n") } ################################################### ### chunk number 25: mcpmod-1 ################################################### library("DoseFinding") candMods <- Mods(linear = NULL, emax = 0.2, logistic = c(0.25, 0.09), doses = c(0, 0.05, 0.2, 0.6, 1)) ################################################### ### chunk number 26: mcpmod-2 ################################################### plot(candMods, base = 0, maxEff = 1) ################################################### ### chunk number 28: mcpmod-4 ################################################### data("biom", package = "DoseFinding") res <- MCPMod(dose, resp, biom, candMods, alpha = 0.05, pVal = TRUE, Delta=0.5) ################################################### ### chunk number 29: mcpmod-5 ################################################### res ################################################### ### chunk number 30: mcpmod-6 ################################################### summary(res) ################################################### ### chunk number 31: mcpmod-7 ################################################### plot(res, complData = TRUE, clinRel = TRUE, CI = TRUE, doseEst = TRUE) ################################################### ### chunk number 32: mcpmod-7 ################################################### detach(package:DoseFinding) library(DoseFinding) print(plot(res, complData = TRUE, clinRel = TRUE, CI = TRUE, doseEst = TRUE, lty = 1, colors = c("black", "gray", "black", "gray", "black"))) sessionInfo() multcomp/demo/Ch_Appl.R0000644000176200001440000006647214712342474014516 0ustar liggesusers ################################################### ### chunk number 2: setup ################################################### set.seed(290875) ################################################### ### chunk number 3: packages-4 ################################################### library("sandwich") library("robustbase") library("lme4") library("multcomp") ################################################### ### chunk number 4: BoxplotRecovery ################################################### data("recovery", package = "multcomp") plot(minutes ~ blanket, data = recovery, xlab = "Blanket", ylab = "Minutes", varwidth = TRUE, main = "") ################################################### ### chunk number 5: recovery-1 ################################################### data("recovery", package = "multcomp") summary(recovery) ################################################### ### chunk number 6: recovery-2 ################################################### recovery.aov <- aov(minutes ~ blanket, data = recovery) ################################################### ### chunk number 7: recovery-3 ################################################### library("multcomp") recovery.mc <- glht(recovery.aov, linfct = mcp(blanket = "Dunnett"), alternative = "less") ################################################### ### chunk number 8: recovery-4 ################################################### summary(recovery.mc) ################################################### ### chunk number 9: recovery-5 ################################################### summary(recovery.mc, test = adjusted(type = "bonferroni")) ################################################### ### chunk number 10: recovery-6 ################################################### recovery.ci <- confint(recovery.mc, level = 0.95) recovery.ci ################################################### ### chunk number 11: recovery-6 ################################################### plot(recovery.ci, main = "", ylim = c(0.5, 3.5), xlab = "Minutes") ################################################### ### chunk number 12: CIrecovery ################################################### plot(recovery.ci, main = "", ylim = c(0.5, 3.5), xlab = "Minutes") ################################################### ### chunk number 13: recovery-7a ################################################### contr <- rbind("b1 -b0" = c(-1, 1, 0, 0), "b2 -b0" = c(-1, 0, 1, 0), "b3 -b0" = c(-1, 0, 0, 1)) summary(glht(recovery.aov, linfct = mcp(blanket = contr), alternative = "less")) ################################################### ### chunk number 14: recovery-8a ################################################### contr2 <- rbind("b2 -b0" = c(-1, 0, 1, 0), "b2 -b1" = c( 0, -1, 1, 0), "b3 -b0" = c(-1, 0, 0, 1), "b3 -b1" = c( 0, -1, 0, 1)) ################################################### ### chunk number 15: recovery-8c ################################################### summary(glht(recovery.aov, linfct = mcp(blanket = contr2), alternative = "less")) ################################################### ### chunk number 16: recovery-9 ################################################### summary(recovery.mc, test = adjusted(type = "free")) ################################################### ### chunk number 17: recovery-9 ################################################### summary(recovery.mc, test = adjusted(type = "holm")) ################################################### ### chunk number 18: immer-1 ################################################### data("immer", package = "MASS") immer.aov <- aov((Y1 + Y2)/2 ~ Var + Loc, data = immer) summary(immer.aov) ################################################### ### chunk number 19: immer-2 ################################################### model.tables(immer.aov, type = "means")$tables$Var ################################################### ### chunk number 20: immer-3 ################################################### immer.mc <- glht(immer.aov, linfct = mcp(Var = "Tukey")) ################################################### ### chunk number 21: immer-4 ################################################### summary(immer.mc) ################################################### ### chunk number 22: immer-4a ################################################### immer.mc2 <-TukeyHSD(immer.aov, which = "Var") immer.mc2$Var ################################################### ### chunk number 23: immer-4b ################################################### glht(immer.aov, linfct = mcp(Var = "Tukey"), alternative = "greater") ################################################### ### chunk number 24: immer-5 ################################################### immer.ci <- confint(immer.mc, level = 0.95) immer.ci ################################################### ### chunk number 25: immer-6 ################################################### plot(immer.ci, main = "", xlab = "Yield") ################################################### ### chunk number 26: CIimmer ################################################### plot(immer.ci, main = "", xlab = "Yield") ################################################### ### chunk number 27: immer-7 ################################################### immer.cld <- cld(immer.mc) ################################################### ### chunk number 28: immerCLD ################################################### plot(immer.cld) ################################################### ### chunk number 29: immerCLD ################################################### plot(immer.cld) ################################################### ### chunk number 30: immerCLD-2 ################################################### data("immer", package = "MASS") library("HH") immer2 <- immer immer2$Var <- ordered(immer2$Var, levels = c("S", "M", "V", "P", "T")) immer2.aov <- aov((Y1 + Y2)/2 ~ Var + Loc, data = immer2) position(immer2$Var) <- model.tables(immer2.aov, type = "means")$tables$Var immer2.mc <- glht(immer2.aov, linfct = mcp(Var = "Tukey")) immer2.cld <- cld(immer2.mc) immer2.cld$pos.x <- immer2.cld$x position(immer2.cld$pos.x) <- position(immer2$Var) lab <- immer2.cld$mcletters$monospacedLetters[levels(immer2$Var)] bwplot(lp ~ pos.x, data = immer2.cld, panel=function(...){ panel.bwplot.intermediate.hh(...) cpl <- current.panel.limits() pushViewport(viewport(xscale = cpl$xlim, yscale = cpl$ylim, clip = "off")) panel.axis("top", at = position(immer2$Var), labels = lab, outside = TRUE) upViewport() }, scales = list(x = list(limits = c(90, 120), at = position(immer2$Var), labels = levels(immer2$Var))), main = "", xlab = "Var", ylab = "linear predictor") ################################################### ### chunk number 31: immerCLD-2 ################################################### print(bwplot(lp ~ pos.x, data=immer2.cld, panel=function(...){ panel.bwplot.intermediate.hh(...) cpl <- current.panel.limits() pushViewport(viewport(xscale = cpl$xlim, yscale = cpl$ylim, clip = "off")) panel.axis("top", at=position(immer2$Var), labels=immer2.cld$mcletters$monospacedLetters[levels(immer2$Var)], outside=TRUE) upViewport() }, scales=list(x=list(limits=c(90,120), at=position(immer2$Var), labels=levels(immer2$Var))), main="", col="black", xlab="Var", ylab="linear predictor")) ################################################### ### chunk number 32: immer-9 ################################################### library("HH") immer.mmc <- mmc(immer.aov, linfct = mcp(Var = "Tukey"), focus = "Var", lmat.rows = 2:5) ################################################### ### chunk number 33: immer-linfct ################################################### rownames(immer.mc$linfct) <- gsub(" ", "", rownames(immer.mc$linfct)) ################################################### ### chunk number 34: immer-10 ################################################### t(immer.mc$linfct) ################################################### ### chunk number 35: immer-11 ################################################### plot(immer.mmc, ry = c(85, 122), x.offset = 8, main = "", main2 = "") ################################################### ### chunk number 36: immerMMC ################################################### # par(mai = par("mai") * c(1, 1, 1, 1.1)) layout(matrix(1:2, ncol = 1)) plot(immer.mmc, ry=c(85, 122), x.offset = 8, main = "Mean-mean multiple comparison plot", main2 = "", col.mca.signif = "grey") ### plot.matchMMC doesn't exist in HH if (FALSE) { plot.matchMMC(immer.mmc$mca, main = "Tiebreaker plot", col.signif = "grey") ################################################### ### chunk number 37: immer-11a ################################################### plot.matchMMC(immer.mmc$mca, main = "") } ################################################### ### chunk number 38: immer-12 ################################################### immer.lmat <- cbind("M-S" = c(1, 0,-1, 0, 0), "MS-V" = c(1, 0, 1, 0,-2), "VMS-P" = c(1,-3, 1, 0, 1), "PVMS-T" = c(1, 1, 1,-4, 1)) row.names(immer.lmat) <- c("M","P","S","T","V") ################################################### ### chunk number 39: immer-12 ################################################### immer.mmc2 <- mmc(immer.aov, linfct = mcp(Var = "Tukey"), focus.lmat = immer.lmat) ################################################### ### chunk number 40: immerMMC2 ################################################### plot(immer.mmc2, ry = c(85, 122), x.offset = 8, main = "", main2 = "", col.lmat.signif = "grey") ################################################### ### chunk number 41: immer-7 ################################################### summary(immer.mc, test = adjusted(type = "Westfall")) ################################################### ### chunk number 42: immer-8 ################################################### summary(immer.mc, test = adjusted(type = "none")) ################################################### ### chunk number 43: immer-9 ################################################### summary(immer.mc, test = adjusted(type = "Shaffer")) ################################################### ### chunk number 44: Thalidomide-plot ################################################### lsmDat <- data.frame(dose = c(0, 5, 50, 500), doseC = 1:4, mean = c(32.3651425, 29.0127426, 30.0742635, 29.6898998), se = c(0.8939097, 0.9294513, 0.9978421, 0.9902196)) library("lattice") print(xyplot(mean ~ dose, lsmDat, xlab = "Dose", ylab = "Litter weight LSMEANS (g)", panel = function(x, y, se, ...) { lsegments(x, y - se, x, y + se, col = "gray80", lwd = 3) panel.xyplot(x, y, type = "b", col = "black", lwd = 2, cex = 1.25) }, se = lsmDat$se, ylim = c(27, 34))) ################################################### ### chunk number 45: litter-1 ################################################### data("litter", package = "multcomp") litter.aov <- aov(weight ~ dose + gesttime + number, data = litter) ################################################### ### chunk number 46: litter-1 ################################################### litter.mc <- glht(litter.aov, linfct = mcp(dose = "Dunnett"), alternative = "less") summary(litter.mc, test = adjusted(type = "single-step")) ################################################### ### chunk number 47: litter-fig1 ################################################### library("lattice") contMat <- matrix(c( 1, 0, 0, -1, 1, 0, -0.5, -0.5, 1, -0.3333, -0.3333, -0.3333, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0, -1, 0.3333, 0.3333, 0.3333, -1, 1, 0, 0, -1, 1, 0, -0.5, -0.5, 1, -0.3333, -0.3333, -0.3333 ), ncol=4, byrow=TRUE) contMat <- t(contMat) contNames <- c("Williams 1", "Williams 2", "Williams 3", "mod Williams 1","mod Williams 2","mod Williams 3","mod Williams 4","mod Williams 5","mod Williams 6") contMatTrl <- data.frame(cont = as.vector(contMat), type = factor(rep(contNames, each = 4), levels = contNames), type2 = factor(rep(c("Williams", "modified Williams"), c(12, 24))), dose = rep(0:3, 9)) trellis.par.set("superpose.line", list(col = c("lightgrey", "lightgrey", "lightgrey", "darkgrey", "darkgrey", "darkgrey"), lty = c(4, 4, 4, 1, 1, 1), lwd = rep(3, 6))) trellis.par.set("superpose.symbol", list(col = c(1, 1, 1, 1, 1, 1), pch = c(1, 1, 1, 2, 2, 2), cex = rep(1, 6), font = rep(1, 6))) print(xyplot(cont ~ dose | type2, contMatTrl, panel = function(x, y, subscripts, groups, ...) { panel.superpose(x, y, subscripts, groups, type = "l", ...) panel.superpose(x, y, subscripts, groups, type = "p", ...) }, groups = type, xlab = "Dose", ylab = "Contrast")) ################################################### ### chunk number 48: litter-3 ################################################### n <- c(20, 19, 18, 17) -contrMat(n, type = "Williams") ################################################### ### chunk number 49: litter-4 ################################################### -contrMat(n, type = "Marcus") ################################################### ### chunk number 50: litter-5a ################################################### set.seed(1234) ################################################### ### chunk number 51: litter-5 ################################################### litter.mc2 <- glht(litter.aov, alternative = "less", linfct = mcp(dose = "Williams")) summary(litter.mc2) ################################################### ### chunk number 52: litter-6 ################################################### glht(litter.aov, linfct = mcp(dose = "Marcus"), alternative = "less") ################################################### ### chunk number 53: litter-7 ################################################### summary(litter.mc2, test = adjusted(type = "free")) ################################################### ### chunk number 54: body-1 ################################################### data("bodyfat", package = "TH.data") bodyfat.lm <- lm(DEXfat ~ ., data = bodyfat) summary(bodyfat.lm) ################################################### ### chunk number 55: body-opt ################################################### op <- options(width = 70) ################################################### ### chunk number 56: body-2 ################################################### K <- cbind(0, diag(length(coef(bodyfat.lm)) - 1)) rownames(K) <- names(coef(bodyfat.lm))[-1] K ################################################### ### chunk number 57: body-opt ################################################### options(op) ################################################### ### chunk number 58: body-3 ################################################### bodyfat.mc <- glht(bodyfat.lm, linfct = K) ################################################### ### chunk number 59: body-4 ################################################### summary(bodyfat.mc, test = Ftest()) ################################################### ### chunk number 60: body-4 ################################################### summary(bodyfat.mc) ################################################### ### chunk number 61: body-5 ################################################### vcov.lmrob <-function(object) object$cov summary(glht(lmrob(DEXfat ~ ., data = bodyfat), linfct = K)) ################################################### ### chunk number 62: scb-2 ################################################### data("sbp", package = "multcomp") sbp.lm <- lm(sbp ~ gender * age, data = sbp) coef(sbp.lm) ################################################### ### chunk number 63: scb-3 ################################################### age <- seq(from = 17, to = 47, by = 1) K <- cbind(0, 1, 0, age) rownames(K) <- paste("age", age, sep = "") ################################################### ### chunk number 64: scb-4 ################################################### sbp.mc <- glht(sbp.lm, linfct = K) sbp.ci <- confint(sbp.mc, level = 0.99) ################################################### ### chunk number 65: scb-4a ################################################### attr(sbp.ci$confint, "calpha") ################################################### ### chunk number 66: scb5 ################################################### plot(age, coef(sbp.mc), type = "l", ylim = c(-30, 2)) lines(age, sbp.ci$confint[,"upr"]) lines(age, sbp.ci$confint[,"lwr"]) abline(h = 0, lty = 2) ################################################### ### chunk number 67: scb ################################################### plot(age, coef(sbp.mc), type = "l", ylim = c(-30, 2), ylab = expression(x^T * (beta[F] - beta[M])), main = "", xlab = "Age") points(age, coef(sbp.mc), pch = 19, cex = 0.6) lines(age, sbp.ci$confint[,"upr"]) lines(age, sbp.ci$confint[,"lwr"]) abline(h = 0, lty = 2) ################################################### ### chunk number 68: alpha-data ################################################### data("alpha", package = "coin") ################################################### ### chunk number 69: alpha-data-figure ################################################### levels(alpha$alength)[2] <- "med" 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) ################################################### ### chunk number 70: alpha-3 ################################################### alpha.aov <- aov(elevel ~ alength, data = alpha) ################################################### ### chunk number 71: alpha-4 ################################################### alpha.mc <- glht(alpha.aov, linfct = mcp(alength = "Tukey")) ################################################### ### chunk number 72: alpha-3 ################################################### alpha.mc$linfct ################################################### ### chunk number 73: alpha-aov-coefvcov ################################################### coef(alpha.mc) vcov(alpha.mc) ################################################### ### chunk number 74: alpha-aov-results ################################################### confint(alpha.mc) summary(alpha.mc) ################################################### ### chunk number 75: alpha-aov-tukey-sandwich ################################################### alpha.mc2 <- glht(alpha.aov, linfct = mcp(alength = "Tukey"), vcov = sandwich) summary(alpha.mc2) ################################################### ### chunk number 76: alpha-confint-plot ################################################### layout(matrix(1:2, ncol = 1)) ci1 <- confint(glht(alpha.aov, linfct = mcp(alength = "Tukey"))) ci2 <- confint(glht(alpha.aov, linfct = mcp(alength = "Tukey"), vcov = sandwich)) plot(ci1, main = "Ordinary covariance matrix estimate", ylim = c(0.5, 3.5), xlab = "Difference") plot(ci2, main = "Sandwich estimate", ylim = c(0.5, 3.5), xlab = "Difference") layout(matrix(1:1, ncol = 1)) ################################################### ### chunk number 77: alzheimer-demographics ################################################### data("alzheimer", package = "coin") 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. ################################################### ### chunk number 78: alzheimer-tab ################################################### x <- t(atab[,,"Female"]) lines <- paste(paste(dimnames(x)$disease, " & "), paste(apply(x, 1, function(l) paste(l, collapse = " & ")), "\\\\")) for (i in 1:length(lines)) cat(lines[i], "\n") ################################################### ### chunk number 79: alzheimer-tab ################################################### x <- t(atab[,,"Male"]) lines <- paste(paste(dimnames(x)$disease, " & "), paste(apply(x, 1, function(l) paste(l, collapse = " & ")), "\\\\")) for (i in 1:length(lines)) cat(lines[i], "\n") ################################################### ### chunk number 80: alzheimer-plot ################################################### layout(matrix(1:2, ncol = 2)) spineplot(disease ~ smoking, data = alzheimer, subset = gender == "Male", main = "Male", xlab = "Smoking", ylab = "Disease", tol = 1) spineplot(disease ~ smoking, data = alzheimer, subset = gender == "Female", main = "Female", xlab = "Smoking", ylab = "Disease", tol = 1) ################################################### ### chunk number 81: alzheimer-plot ################################################### layout(matrix(1:1, ncol = 1)) ################################################### ### chunk number 82: alz-1 ################################################### data("alzheimer", package = "coin") y <- factor(alzheimer$disease == "Alzheimer", labels = c("other", "Alzheimer")) alzheimer.glm <- glm(y ~ smoking * gender, data = alzheimer, family = binomial()) ################################################### ### chunk number 83: alz-options ################################################### op <- options(show.signif.stars = FALSE) ################################################### ### chunk number 84: alz-2 ################################################### summary(alzheimer.glm) ################################################### ### chunk number 85: alz-options ################################################### options(op) ################################################### ### chunk number 86: 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 ################################################### ### chunk number 87: alz-3 ################################################### K ################################################### ### chunk number 88: alz-3 ################################################### alzheimer.ci <- confint(glht(alzheimer.glm, linfct = K)) ################################################### ### chunk number 89: alz-3a ################################################### attr(alzheimer.ci$confint, "calpha") ################################################### ### chunk number 90: alz-3b ################################################### qnorm((1-(1-0.05)^(1/8))/2, lower.tail = FALSE) ################################################### ### chunk number 91: alz-4 ################################################### alzheimer.ci$confint <- apply(alzheimer.ci$confint, 2, binomial()$linkinv) plot(alzheimer.ci, main = "", xlim = c(0, 1)) ################################################### ### chunk number 92: alzheimer-plot2 ################################################### plot(alzheimer.ci, xlab = "Probability of suffering from Alzheimer's disease", xlim = c(0, 1), ylim = c(0.5, 8.5), main = "") ################################################### ### chunk number 93: alm-0 ################################################### library("TH.data") 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" ################################################### ### chunk number 94: alm-options ################################################### op <- options(show.signif.stars = FALSE) ################################################### ### chunk number 95: alm-1 ################################################### library("survival") aml.surv <- survreg(Surv(time, event) ~ Sex + Age + WBC + LDH + FLT3 + risk, data = clinical) summary(glht(aml.surv, linfct = mcp(risk = "Tukey"))) ################################################### ### chunk number 96: alm-options ################################################### options(op) ################################################### ### chunk number 97: tree-1 ################################################### data("trees513", package = "multcomp") ################################################### ### chunk number 98: trees-setup ################################################### trees513 <- subset(trees513, !species %in% c("fir", "softwood (other)")) trees513$species <- trees513$species[,drop = TRUE] levels(trees513$species)[5:6] <- c("ash/maple/elm", "hardwood") ################################################### ### chunk number 99: tree-2 ################################################### trees513.lme <- glmer(damage ~ species -1 + (1 | lattice/plot), data = trees513, family = binomial()) K <- diag(length(fixef(trees513.lme))) ################################################### ### chunk number 100: trees-K-cosmetics ################################################### colnames(K) <- rownames(K) <- paste(gsub("species", "", names(fixef(trees513.lme))), " (", table(trees513$species), ")", sep = "") ################################################### ### chunk number 101: tree-3 ################################################### trees513.ci <- confint(glht(trees513.lme, linfct = K)) prob <- binomial()$linkinv(trees513.ci$confint) trees513.ci$confint <- 1 - prob trees513.ci$confint[, 2:3] <- trees513.ci$confint[, 3:2] ################################################### ### chunk number 102: CItrees ################################################### plot(trees513.ci, main = "", xlab = "Probability of browsing damage" ) sessionInfo() multcomp/demo/Ch_Appl.Rout.save0000644000176200001440000015133114712342510016157 0ustar liggesusers R version 4.4.2 (2024-10-31) -- "Pile of Leaves" Copyright (C) 2024 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu 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. [Previously saved workspace restored] > > ################################################### > ### chunk number 2: setup > ################################################### > set.seed(290875) > > > ################################################### > ### chunk number 3: packages-4 > ################################################### > library("sandwich") > library("robustbase") > library("lme4") Loading required package: Matrix > library("multcomp") Loading required package: mvtnorm Loading required package: survival Attaching package: ‘survival’ The following object is masked from ‘package:robustbase’: heart Loading required package: TH.data Loading required package: MASS Attaching package: ‘TH.data’ The following object is masked from ‘package:MASS’: geyser > > > ################################################### > ### chunk number 4: BoxplotRecovery > ################################################### > data("recovery", package = "multcomp") > plot(minutes ~ blanket, data = recovery, + xlab = "Blanket", ylab = "Minutes", + varwidth = TRUE, main = "") > > > ################################################### > ### chunk number 5: recovery-1 > ################################################### > data("recovery", package = "multcomp") > summary(recovery) blanket minutes b0:20 Min. : 5.00 b1: 3 1st Qu.:12.00 b2: 3 Median :13.00 b3:15 Mean :13.49 3rd Qu.:16.00 Max. :19.00 > > > ################################################### > ### chunk number 6: recovery-2 > ################################################### > recovery.aov <- aov(minutes ~ blanket, data = recovery) > > > ################################################### > ### chunk number 7: recovery-3 > ################################################### > library("multcomp") > recovery.mc <- glht(recovery.aov, + linfct = mcp(blanket = "Dunnett"), + alternative = "less") > > > ################################################### > ### chunk number 8: recovery-4 > ################################################### > summary(recovery.mc) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recovery) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -2.1333 1.6038 -1.330 0.2412 b2 - b0 >= 0 -7.4667 1.6038 -4.656 <0.001 *** b3 - b0 >= 0 -1.6667 0.8848 -1.884 0.0925 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 9: recovery-5 > ################################################### > summary(recovery.mc, test = adjusted(type = "bonferroni")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recovery) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -2.1333 1.6038 -1.330 0.287 b2 - b0 >= 0 -7.4667 1.6038 -4.656 6.1e-05 *** b3 - b0 >= 0 -1.6667 0.8848 -1.884 0.101 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- bonferroni method) > > > ################################################### > ### chunk number 10: recovery-6 > ################################################### > recovery.ci <- confint(recovery.mc, level = 0.95) > recovery.ci Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recovery) Quantile = 2.1816 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.1333 -Inf 1.3655 b2 - b0 >= 0 -7.4667 -Inf -3.9678 b3 - b0 >= 0 -1.6667 -Inf 0.2636 > > > ################################################### > ### chunk number 11: recovery-6 > ################################################### > plot(recovery.ci, main = "", ylim = c(0.5, 3.5), + xlab = "Minutes") > > > ################################################### > ### chunk number 12: CIrecovery > ################################################### > plot(recovery.ci, main = "", ylim = c(0.5, 3.5), xlab = "Minutes") > > > ################################################### > ### chunk number 13: recovery-7a > ################################################### > contr <- rbind("b1 -b0" = c(-1, 1, 0, 0), + "b2 -b0" = c(-1, 0, 1, 0), + "b3 -b0" = c(-1, 0, 0, 1)) > summary(glht(recovery.aov, linfct = mcp(blanket = contr), + alternative = "less")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = minutes ~ blanket, data = recovery) Linear Hypotheses: Estimate Std. Error t value Pr(= 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.0925 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 14: recovery-8a > ################################################### > contr2 <- rbind("b2 -b0" = c(-1, 0, 1, 0), + "b2 -b1" = c( 0, -1, 1, 0), + "b3 -b0" = c(-1, 0, 0, 1), + "b3 -b1" = c( 0, -1, 0, 1)) > > > ################################################### > ### chunk number 15: recovery-8c > ################################################### > summary(glht(recovery.aov, linfct = mcp(blanket = contr2), + alternative = "less")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = minutes ~ blanket, data = recovery) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -7.4667 1.6038 -4.656 <0.001 *** b2 -b1 >= 0 -5.3333 2.1150 -2.522 0.0279 * b3 -b0 >= 0 -1.6667 0.8848 -1.884 0.1050 b3 -b1 >= 0 0.4667 1.6383 0.285 0.9150 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 16: recovery-9 > ################################################### > summary(recovery.mc, test = adjusted(type = "free")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recovery) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -2.1333 1.6038 -1.330 0.0958 . b2 - b0 >= 0 -7.4667 1.6038 -4.656 5.64e-05 *** b3 - b0 >= 0 -1.6667 0.8848 -1.884 0.0640 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- free method) > > > ################################################### > ### chunk number 17: recovery-9 > ################################################### > summary(recovery.mc, test = adjusted(type = "holm")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recovery) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -2.1333 1.6038 -1.330 0.0958 . b2 - b0 >= 0 -7.4667 1.6038 -4.656 6.1e-05 *** b3 - b0 >= 0 -1.6667 0.8848 -1.884 0.0675 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- holm method) > > > ################################################### > ### chunk number 18: immer-1 > ################################################### > data("immer", package = "MASS") > immer.aov <- aov((Y1 + Y2)/2 ~ Var + Loc, data = immer) > summary(immer.aov) Df Sum Sq Mean Sq F value Pr(>F) Var 4 2655 663.7 5.989 0.00245 ** Loc 5 10610 2122.1 19.148 5.21e-07 *** Residuals 20 2217 110.8 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > > > ################################################### > ### chunk number 19: immer-2 > ################################################### > model.tables(immer.aov, type = "means")$tables$Var Var M P S T V 94.39167 102.54167 91.13333 118.20000 99.18333 > > > ################################################### > ### chunk number 20: immer-3 > ################################################### > immer.mc <- glht(immer.aov, linfct = mcp(Var = "Tukey")) > > > ################################################### > ### chunk number 21: immer-4 > ################################################### > summary(immer.mc) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = (Y1 + Y2)/2 ~ Var + Loc, data = immer) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) P - M == 0 8.150 6.078 1.341 0.67005 S - M == 0 -3.258 6.078 -0.536 0.98243 T - M == 0 23.808 6.078 3.917 0.00678 ** V - M == 0 4.792 6.078 0.788 0.93102 S - P == 0 -11.408 6.078 -1.877 0.36074 T - P == 0 15.658 6.078 2.576 0.11326 V - P == 0 -3.358 6.078 -0.553 0.98035 T - S == 0 27.067 6.078 4.453 0.00202 ** V - S == 0 8.050 6.078 1.324 0.67982 V - T == 0 -19.017 6.078 -3.129 0.03768 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 22: immer-4a > ################################################### > immer.mc2 <-TukeyHSD(immer.aov, which = "Var") > immer.mc2$Var diff lwr upr p adj P-M 8.150000 -10.037586 26.3375861 0.670063958 S-M -3.258333 -21.445919 14.9292527 0.982419709 T-M 23.808333 5.620747 41.9959194 0.006783701 V-M 4.791667 -13.395919 22.9792527 0.931020848 S-P -11.408333 -29.595919 6.7792527 0.360680099 T-P 15.658333 -2.529253 33.8459194 0.113221634 V-P -3.358333 -21.545919 14.8292527 0.980350080 T-S 27.066667 8.879081 45.2542527 0.002027122 V-S 8.050000 -10.137586 26.2375861 0.679824487 V-T -19.016667 -37.204253 -0.8290806 0.037710044 > > > ################################################### > ### chunk number 23: immer-4b > ################################################### > glht(immer.aov, linfct = mcp(Var = "Tukey"), + alternative = "greater") General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Linear Hypotheses: Estimate P - M <= 0 8.150 S - M <= 0 -3.258 T - M <= 0 23.808 V - M <= 0 4.792 S - P <= 0 -11.408 T - P <= 0 15.658 V - P <= 0 -3.358 T - S <= 0 27.067 V - S <= 0 8.050 V - T <= 0 -19.017 > > > ################################################### > ### chunk number 24: immer-5 > ################################################### > immer.ci <- confint(immer.mc, level = 0.95) > immer.ci Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = (Y1 + Y2)/2 ~ Var + Loc, data = immer) Quantile = 2.9929 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr P - M == 0 8.1500 -10.0408 26.3408 S - M == 0 -3.2583 -21.4492 14.9325 T - M == 0 23.8083 5.6175 41.9992 V - M == 0 4.7917 -13.3992 22.9825 S - P == 0 -11.4083 -29.5992 6.7825 T - P == 0 15.6583 -2.5325 33.8492 V - P == 0 -3.3583 -21.5492 14.8325 T - S == 0 27.0667 8.8758 45.2575 V - S == 0 8.0500 -10.1408 26.2408 V - T == 0 -19.0167 -37.2075 -0.8258 > > > ################################################### > ### chunk number 25: immer-6 > ################################################### > plot(immer.ci, main = "", xlab = "Yield") > > > ################################################### > ### chunk number 26: CIimmer > ################################################### > plot(immer.ci, main = "", xlab = "Yield") > > > ################################################### > ### chunk number 27: immer-7 > ################################################### > immer.cld <- cld(immer.mc) > > > ################################################### > ### chunk number 28: immerCLD > ################################################### > plot(immer.cld) > > > ################################################### > ### chunk number 29: immerCLD > ################################################### > plot(immer.cld) > > > ################################################### > ### chunk number 30: immerCLD-2 > ################################################### > data("immer", package = "MASS") > library("HH") Loading required package: lattice Loading required package: grid Loading required package: latticeExtra Loading required package: gridExtra Attaching package: ‘HH’ The following object is masked from ‘package:base’: is.R > immer2 <- immer > immer2$Var <- ordered(immer2$Var, + levels = c("S", "M", "V", "P", "T")) > immer2.aov <- aov((Y1 + Y2)/2 ~ Var + Loc, data = immer2) > position(immer2$Var) <- model.tables(immer2.aov, + type = "means")$tables$Var > immer2.mc <- glht(immer2.aov, linfct = mcp(Var = "Tukey")) > immer2.cld <- cld(immer2.mc) > immer2.cld$pos.x <- immer2.cld$x > position(immer2.cld$pos.x) <- position(immer2$Var) > > lab <- + immer2.cld$mcletters$monospacedLetters[levels(immer2$Var)] > bwplot(lp ~ pos.x, data = immer2.cld, + panel=function(...){ + panel.bwplot.intermediate.hh(...) + cpl <- current.panel.limits() + pushViewport(viewport(xscale = cpl$xlim, + yscale = cpl$ylim, + clip = "off")) + panel.axis("top", at = position(immer2$Var), + labels = lab, outside = TRUE) + upViewport() + }, + scales = list(x = list(limits = c(90, 120), + at = position(immer2$Var), + labels = levels(immer2$Var))), + main = "", xlab = "Var", ylab = "linear predictor") > > > ################################################### > ### chunk number 31: immerCLD-2 > ################################################### > print(bwplot(lp ~ pos.x, data=immer2.cld, + panel=function(...){ + panel.bwplot.intermediate.hh(...) + cpl <- current.panel.limits() + pushViewport(viewport(xscale = cpl$xlim, + yscale = cpl$ylim, + clip = "off")) + panel.axis("top", at=position(immer2$Var), + labels=immer2.cld$mcletters$monospacedLetters[levels(immer2$Var)], + outside=TRUE) + upViewport() + }, + scales=list(x=list(limits=c(90,120), + at=position(immer2$Var), + labels=levels(immer2$Var))), + main="", col="black", xlab="Var", ylab="linear predictor")) > > > ################################################### > ### chunk number 32: immer-9 > ################################################### > library("HH") > immer.mmc <- mmc(immer.aov, linfct = mcp(Var = "Tukey"), + focus = "Var", lmat.rows = 2:5) > > > ################################################### > ### chunk number 33: immer-linfct > ################################################### > rownames(immer.mc$linfct) <- gsub(" ", "", rownames(immer.mc$linfct)) > > > ################################################### > ### chunk number 34: immer-10 > ################################################### > t(immer.mc$linfct) P-M S-M T-M V-M S-P T-P V-P T-S V-S V-T (Intercept) 0 0 0 0 0 0 0 0 0 0 VarP 1 0 0 0 -1 -1 -1 0 0 0 VarS 0 1 0 0 1 0 0 -1 -1 0 VarT 0 0 1 0 0 1 0 1 0 -1 VarV 0 0 0 1 0 0 1 0 1 1 LocD 0 0 0 0 0 0 0 0 0 0 LocGR 0 0 0 0 0 0 0 0 0 0 LocM 0 0 0 0 0 0 0 0 0 0 LocUF 0 0 0 0 0 0 0 0 0 0 LocW 0 0 0 0 0 0 0 0 0 0 attr(,"type") [1] "Tukey" > > > ################################################### > ### chunk number 35: immer-11 > ################################################### > plot(immer.mmc, ry = c(85, 122), x.offset = 8, + main = "", main2 = "") > > > ################################################### > ### chunk number 36: immerMMC > ################################################### > # par(mai = par("mai") * c(1, 1, 1, 1.1)) > layout(matrix(1:2, ncol = 1)) > plot(immer.mmc, ry=c(85, 122), x.offset = 8, + main = "Mean-mean multiple comparison plot", main2 = "", + col.mca.signif = "grey") > ### plot.matchMMC doesn't exist in HH > if (FALSE) { + plot.matchMMC(immer.mmc$mca, main = "Tiebreaker plot", + col.signif = "grey") + + + ################################################### + ### chunk number 37: immer-11a + ################################################### + plot.matchMMC(immer.mmc$mca, main = "") + } > > ################################################### > ### chunk number 38: immer-12 > ################################################### > immer.lmat <- cbind("M-S" = c(1, 0,-1, 0, 0), + "MS-V" = c(1, 0, 1, 0,-2), + "VMS-P" = c(1,-3, 1, 0, 1), + "PVMS-T" = c(1, 1, 1,-4, 1)) > row.names(immer.lmat) <- c("M","P","S","T","V") > > > ################################################### > ### chunk number 39: immer-12 > ################################################### > immer.mmc2 <- mmc(immer.aov, linfct = mcp(Var = "Tukey"), + focus.lmat = immer.lmat) > > > ################################################### > ### chunk number 40: immerMMC2 > ################################################### > plot(immer.mmc2, ry = c(85, 122), x.offset = 8, main = "", main2 = "", col.lmat.signif = "grey") > > > ################################################### > ### chunk number 41: immer-7 > ################################################### > summary(immer.mc, test = adjusted(type = "Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = (Y1 + Y2)/2 ~ Var + Loc, data = immer) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) P-M == 0 8.150 6.078 1.341 0.38995 S-M == 0 -3.258 6.078 -0.536 0.82566 T-M == 0 23.808 6.078 3.917 0.00459 ** V-M == 0 4.792 6.078 0.788 0.43973 S-P == 0 -11.408 6.078 -1.877 0.26897 T-P == 0 15.658 6.078 2.576 0.06162 . V-P == 0 -3.358 6.078 -0.553 0.82566 T-S == 0 27.067 6.078 4.453 0.00200 ** V-S == 0 8.050 6.078 1.324 0.39845 V-T == 0 -19.017 6.078 -3.129 0.01901 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ################################################### > ### chunk number 42: immer-8 > ################################################### > summary(immer.mc, test = adjusted(type = "none")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = (Y1 + Y2)/2 ~ Var + Loc, data = immer) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) P-M == 0 8.150 6.078 1.341 0.194983 S-M == 0 -3.258 6.078 -0.536 0.597810 T-M == 0 23.808 6.078 3.917 0.000854 *** V-M == 0 4.792 6.078 0.788 0.439728 S-P == 0 -11.408 6.078 -1.877 0.075185 . T-P == 0 15.658 6.078 2.576 0.018029 * V-P == 0 -3.358 6.078 -0.553 0.586700 T-S == 0 27.067 6.078 4.453 0.000244 *** V-S == 0 8.050 6.078 1.324 0.200289 V-T == 0 -19.017 6.078 -3.129 0.005288 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- none method) > > > ################################################### > ### chunk number 43: immer-9 > ################################################### > summary(immer.mc, test = adjusted(type = "Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = (Y1 + Y2)/2 ~ Var + Loc, data = immer) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) P-M == 0 8.150 6.078 1.341 0.58495 S-M == 0 -3.258 6.078 -0.536 1.00000 T-M == 0 23.808 6.078 3.917 0.00512 ** V-M == 0 4.792 6.078 0.788 0.60087 S-P == 0 -11.408 6.078 -1.877 0.45111 T-P == 0 15.658 6.078 2.576 0.07212 . V-P == 0 -3.358 6.078 -0.553 1.00000 T-S == 0 27.067 6.078 4.453 0.00244 ** V-S == 0 8.050 6.078 1.324 0.60087 V-T == 0 -19.017 6.078 -3.129 0.02115 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > > > ################################################### > ### chunk number 44: Thalidomide-plot > ################################################### > lsmDat <- data.frame(dose = c(0, 5, 50, 500), + doseC = 1:4, + mean = c(32.3651425, 29.0127426, 30.0742635, 29.6898998), + se = c(0.8939097, 0.9294513, 0.9978421, 0.9902196)) > library("lattice") > print(xyplot(mean ~ dose, lsmDat, xlab = "Dose", ylab = "Litter weight LSMEANS (g)", + panel = function(x, y, se, ...) { + lsegments(x, y - se, x, y + se, col = "gray80", lwd = 3) + panel.xyplot(x, y, type = "b", col = "black", lwd = 2, cex = 1.25) + }, se = lsmDat$se, ylim = c(27, 34))) > > > ################################################### > ### chunk number 45: litter-1 > ################################################### > data("litter", package = "multcomp") > litter.aov <- aov(weight ~ dose + gesttime + number, + data = litter) > > > ################################################### > ### chunk number 46: litter-1 > ################################################### > litter.mc <- glht(litter.aov, linfct = mcp(dose = "Dunnett"), + alternative = "less") > summary(litter.mc, test = adjusted(type = "single-step")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -3.352 1.291 -2.597 0.0160 * 50 - 0 >= 0 -2.291 1.338 -1.712 0.1119 500 - 0 >= 0 -2.675 1.334 -2.005 0.0627 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 47: litter-fig1 > ################################################### > library("lattice") > contMat <- matrix(c( + 1, 0, 0, -1, + 1, 0, -0.5, -0.5, + 1, -0.3333, -0.3333, -0.3333, + 0.5, 0.5, -0.5, -0.5, + 0.5, 0.5, 0, -1, + 0.3333, 0.3333, 0.3333, -1, + 1, 0, 0, -1, + 1, 0, -0.5, -0.5, + 1, -0.3333, -0.3333, -0.3333 + ), ncol=4, byrow=TRUE) > contMat <- t(contMat) > > contNames <- c("Williams 1", "Williams 2", "Williams 3", + "mod Williams 1","mod Williams 2","mod Williams 3","mod Williams 4","mod Williams 5","mod Williams 6") > contMatTrl <- data.frame(cont = as.vector(contMat), + type = factor(rep(contNames, each = 4), levels = contNames), + type2 = factor(rep(c("Williams", "modified Williams"), c(12, 24))), + dose = rep(0:3, 9)) > > trellis.par.set("superpose.line", + list(col = c("lightgrey", "lightgrey", "lightgrey", "darkgrey", "darkgrey", "darkgrey"), + lty = c(4, 4, 4, 1, 1, 1), + lwd = rep(3, 6))) > trellis.par.set("superpose.symbol", + list(col = c(1, 1, 1, 1, 1, 1), + pch = c(1, 1, 1, 2, 2, 2), + cex = rep(1, 6), + font = rep(1, 6))) > > print(xyplot(cont ~ dose | type2, contMatTrl, + panel = function(x, y, subscripts, groups, ...) { + panel.superpose(x, y, subscripts, groups, type = "l", ...) + panel.superpose(x, y, subscripts, groups, type = "p", ...) + }, + groups = type, xlab = "Dose", ylab = "Contrast")) > > > ################################################### > ### chunk number 48: litter-3 > ################################################### > n <- c(20, 19, 18, 17) > -contrMat(n, type = "Williams") Multiple Comparisons of Means: Williams Contrasts 1 2 3 4 C 1 1 0.0000 0.0000 -1.0000 C 2 1 0.0000 -0.5143 -0.4857 C 3 1 -0.3519 -0.3333 -0.3148 > > > ################################################### > ### chunk number 49: litter-4 > ################################################### > -contrMat(n, type = "Marcus") Multiple Comparisons of Means: Marcus Contrasts 1 2 3 4 C 1 1.0000 -0.3519 -0.3333 -0.3148 C 2 1.0000 0.0000 -0.5143 -0.4857 C 3 0.5128 0.4872 -0.5143 -0.4857 C 4 1.0000 0.0000 0.0000 -1.0000 C 5 0.5128 0.4872 0.0000 -1.0000 C 6 0.3509 0.3333 0.3158 -1.0000 > > > ################################################### > ### chunk number 50: litter-5a > ################################################### > set.seed(1234) > > > ################################################### > ### chunk number 51: litter-5 > ################################################### > litter.mc2 <- glht(litter.aov, alternative = "less", + linfct = mcp(dose = "Williams")) > summary(litter.mc2) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Williams Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -2.675 1.334 -2.005 0.04365 * C 2 >= 0 -2.478 1.123 -2.207 0.02846 * C 3 >= 0 -2.785 1.046 -2.662 0.00941 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 52: litter-6 > ################################################### > glht(litter.aov, linfct = mcp(dose = "Marcus"), + alternative = "less") General Linear Hypotheses Multiple Comparisons of Means: Marcus Contrasts Linear Hypotheses: Estimate C 1 >= 0 -2.7854 C 2 >= 0 -2.4776 C 3 >= 0 -0.8443 C 4 >= 0 -2.6752 C 5 >= 0 -1.0420 C 6 >= 0 -0.8343 > > > ################################################### > ### chunk number 53: litter-7 > ################################################### > summary(litter.mc2, test = adjusted(type = "free")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Williams Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -2.675 1.334 -2.005 0.02448 * C 2 >= 0 -2.478 1.123 -2.207 0.02374 * C 3 >= 0 -2.785 1.046 -2.662 0.00978 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- free method) > > > ################################################### > ### chunk number 54: body-1 > ################################################### > data("bodyfat", package = "TH.data") > bodyfat.lm <- lm(DEXfat ~ ., data = bodyfat) > summary(bodyfat.lm) Call: lm(formula = DEXfat ~ ., data = bodyfat) Residuals: Min 1Q Median 3Q Max -6.954 -1.949 -0.219 1.169 10.812 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -69.02828 7.51686 -9.183 4.18e-13 *** age 0.01996 0.03221 0.620 0.53777 waistcirc 0.21049 0.06714 3.135 0.00264 ** hipcirc 0.34351 0.08037 4.274 6.85e-05 *** elbowbreadth -0.41237 1.02291 -0.403 0.68826 kneebreadth 1.75798 0.72495 2.425 0.01829 * anthro3a 5.74230 5.20752 1.103 0.27449 anthro3b 9.86643 5.65786 1.744 0.08622 . anthro3c 0.38743 2.08746 0.186 0.85338 anthro4 -6.57439 6.48918 -1.013 0.31500 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 3.281 on 61 degrees of freedom Multiple R-squared: 0.9231, Adjusted R-squared: 0.9117 F-statistic: 81.35 on 9 and 61 DF, p-value: < 2.2e-16 > > > ################################################### > ### chunk number 55: body-opt > ################################################### > op <- options(width = 70) > > > ################################################### > ### chunk number 56: body-2 > ################################################### > K <- cbind(0, diag(length(coef(bodyfat.lm)) - 1)) > rownames(K) <- names(coef(bodyfat.lm))[-1] > K [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] age 0 1 0 0 0 0 0 0 0 0 waistcirc 0 0 1 0 0 0 0 0 0 0 hipcirc 0 0 0 1 0 0 0 0 0 0 elbowbreadth 0 0 0 0 1 0 0 0 0 0 kneebreadth 0 0 0 0 0 1 0 0 0 0 anthro3a 0 0 0 0 0 0 1 0 0 0 anthro3b 0 0 0 0 0 0 0 1 0 0 anthro3c 0 0 0 0 0 0 0 0 1 0 anthro4 0 0 0 0 0 0 0 0 0 1 > > > ################################################### > ### chunk number 57: body-opt > ################################################### > options(op) > > > ################################################### > ### chunk number 58: body-3 > ################################################### > bodyfat.mc <- glht(bodyfat.lm, linfct = K) > > > ################################################### > ### chunk number 59: body-4 > ################################################### > summary(bodyfat.mc, test = Ftest()) General Linear Hypotheses Linear Hypotheses: Estimate age == 0 0.01996 waistcirc == 0 0.21049 hipcirc == 0 0.34351 elbowbreadth == 0 -0.41237 kneebreadth == 0 1.75798 anthro3a == 0 5.74230 anthro3b == 0 9.86643 anthro3c == 0 0.38743 anthro4 == 0 -6.57439 Global Test: F DF1 DF2 Pr(>F) 1 81.35 9 61 1.387e-30 > > > ################################################### > ### chunk number 60: body-4 > ################################################### > summary(bodyfat.mc) Simultaneous Tests for General Linear Hypotheses Fit: lm(formula = DEXfat ~ ., data = bodyfat) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) age == 0 0.01996 0.03221 0.620 0.9959 waistcirc == 0 0.21049 0.06714 3.135 0.0209 * hipcirc == 0 0.34351 0.08037 4.274 <0.001 *** elbowbreadth == 0 -0.41237 1.02291 -0.403 0.9998 kneebreadth == 0 1.75798 0.72495 2.425 0.1319 anthro3a == 0 5.74230 5.20752 1.103 0.8946 anthro3b == 0 9.86643 5.65786 1.744 0.4780 anthro3c == 0 0.38743 2.08746 0.186 1.0000 anthro4 == 0 -6.57439 6.48918 -1.013 0.9293 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 61: body-5 > ################################################### > vcov.lmrob <-function(object) object$cov > summary(glht(lmrob(DEXfat ~ ., data = bodyfat), + linfct = K)) Simultaneous Tests for General Linear Hypotheses Fit: lmrob(formula = DEXfat ~ ., data = bodyfat) Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) age == 0 0.02644 0.01930 1.370 0.72178 waistcirc == 0 0.23243 0.06714 3.462 0.00433 ** hipcirc == 0 0.32863 0.07571 4.341 < 0.001 *** elbowbreadth == 0 -0.27318 0.92260 -0.296 0.99998 kneebreadth == 0 0.77661 0.52679 1.474 0.64581 anthro3a == 0 2.12400 3.68426 0.577 0.99704 anthro3b == 0 10.27634 4.76233 2.158 0.20501 anthro3c == 0 1.93582 1.39153 1.391 0.70633 anthro4 == 0 -5.82252 5.55661 -1.048 0.90697 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) Warning message: In RET$pfunction("adjusted", ...) : Completion with error > abseps > > > ################################################### > ### chunk number 62: scb-2 > ################################################### > data("sbp", package = "multcomp") > sbp.lm <- lm(sbp ~ gender * age, data = sbp) > coef(sbp.lm) (Intercept) genderfemale age genderfemale:age 110.03852854 -12.96144428 0.96135261 -0.01203008 > > > ################################################### > ### chunk number 63: scb-3 > ################################################### > age <- seq(from = 17, to = 47, by = 1) > K <- cbind(0, 1, 0, age) > rownames(K) <- paste("age", age, sep = "") > > > ################################################### > ### chunk number 64: scb-4 > ################################################### > sbp.mc <- glht(sbp.lm, linfct = K) > sbp.ci <- confint(sbp.mc, level = 0.99) > > > ################################################### > ### chunk number 65: scb-4a > ################################################### > attr(sbp.ci$confint, "calpha") [1] 2.974583 > > > ################################################### > ### chunk number 66: scb5 > ################################################### > plot(age, coef(sbp.mc), type = "l", ylim = c(-30, 2)) > lines(age, sbp.ci$confint[,"upr"]) > lines(age, sbp.ci$confint[,"lwr"]) > abline(h = 0, lty = 2) > > > ################################################### > ### chunk number 67: scb > ################################################### > plot(age, coef(sbp.mc), type = "l", ylim = c(-30, 2), + ylab = expression(x^T * (beta[F] - beta[M])), main = "", + xlab = "Age") > points(age, coef(sbp.mc), pch = 19, cex = 0.6) > lines(age, sbp.ci$confint[,"upr"]) > lines(age, sbp.ci$confint[,"lwr"]) > abline(h = 0, lty = 2) > > > ################################################### > ### chunk number 68: alpha-data > ################################################### > data("alpha", package = "coin") > > > ################################################### > ### chunk number 69: alpha-data-figure > ################################################### > levels(alpha$alength)[2] <- "med" > 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) > > > ################################################### > ### chunk number 70: alpha-3 > ################################################### > alpha.aov <- aov(elevel ~ alength, data = alpha) > > > ################################################### > ### chunk number 71: alpha-4 > ################################################### > alpha.mc <- glht(alpha.aov, linfct = mcp(alength = "Tukey")) > > > ################################################### > ### chunk number 72: alpha-3 > ################################################### > alpha.mc$linfct (Intercept) alengthmed alengthlong med - short 0 1 0 long - short 0 0 1 long - med 0 -1 1 attr(,"type") [1] "Tukey" > > > ################################################### > ### chunk number 73: alpha-aov-coefvcov > ################################################### > coef(alpha.mc) med - short long - short long - med 0.4341523 1.1887500 0.7545977 > vcov(alpha.mc) med - short long - short long - med med - short 0.14717604 0.1041001 -0.04307591 long - short 0.10410012 0.2706603 0.16656020 long - med -0.04307591 0.1665602 0.20963611 > > > ################################################### > ### chunk number 74: alpha-aov-results > ################################################### > confint(alpha.mc) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = elevel ~ alength, data = alpha) Quantile = 2.3722 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr med - short == 0 0.43415 -0.47591 1.34421 long - short == 0 1.18875 -0.04539 2.42289 long - med == 0 0.75460 -0.33154 1.84073 > summary(alpha.mc) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = elevel ~ alength, data = alpha) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) med - short == 0 0.4342 0.3836 1.132 0.4924 long - short == 0 1.1888 0.5203 2.285 0.0614 . long - med == 0 0.7546 0.4579 1.648 0.2270 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 75: alpha-aov-tukey-sandwich > ################################################### > alpha.mc2 <- glht(alpha.aov, linfct = mcp(alength = "Tukey"), + vcov = sandwich) > summary(alpha.mc2) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = elevel ~ alength, data = alpha) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) med - short == 0 0.4342 0.4239 1.024 0.5594 long - short == 0 1.1888 0.4432 2.682 0.0227 * long - med == 0 0.7546 0.3184 2.370 0.0501 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 76: alpha-confint-plot > ################################################### > layout(matrix(1:2, ncol = 1)) > ci1 <- confint(glht(alpha.aov, linfct = mcp(alength = "Tukey"))) > ci2 <- confint(glht(alpha.aov, linfct = mcp(alength = "Tukey"), vcov = sandwich)) > plot(ci1, main = "Ordinary covariance matrix estimate", ylim = c(0.5, 3.5), + xlab = "Difference") > plot(ci2, main = "Sandwich estimate", ylim = c(0.5, 3.5), xlab = "Difference") > layout(matrix(1:1, ncol = 1)) > > > ################################################### > ### chunk number 77: alzheimer-demographics > ################################################### > data("alzheimer", package = "coin") > 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. > > > ################################################### > ### chunk number 78: alzheimer-tab > ################################################### > x <- t(atab[,,"Female"]) > lines <- paste(paste(dimnames(x)$disease, " & "), + paste(apply(x, 1, function(l) paste(l, collapse = " & ")), + "\\\\")) > for (i in 1:length(lines)) cat(lines[i], "\n") Alzheimer & 91 & 7 & 15 & 21 \\ Other dementias & 55 & 7 & 16 & 9 \\ Other diagnoses & 80 & 3 & 25 & 9 \\ > > > ################################################### > ### chunk number 79: alzheimer-tab > ################################################### > x <- t(atab[,,"Male"]) > lines <- paste(paste(dimnames(x)$disease, " & "), + paste(apply(x, 1, function(l) paste(l, collapse = " & ")), + "\\\\")) > for (i in 1:length(lines)) cat(lines[i], "\n") Alzheimer & 35 & 8 & 15 & 6 \\ Other dementias & 24 & 1 & 17 & 35 \\ Other diagnoses & 24 & 2 & 22 & 11 \\ > > > ################################################### > ### chunk number 80: alzheimer-plot > ################################################### > layout(matrix(1:2, ncol = 2)) > spineplot(disease ~ smoking, data = alzheimer, subset = gender == "Male", + main = "Male", xlab = "Smoking", ylab = "Disease", tol = 1) > spineplot(disease ~ smoking, data = alzheimer, subset = gender == "Female", + main = "Female", xlab = "Smoking", ylab = "Disease", tol = 1) > > > ################################################### > ### chunk number 81: alzheimer-plot > ################################################### > layout(matrix(1:1, ncol = 1)) > > > ################################################### > ### chunk number 82: alz-1 > ################################################### > data("alzheimer", package = "coin") > y <- factor(alzheimer$disease == "Alzheimer", + labels = c("other", "Alzheimer")) > alzheimer.glm <- glm(y ~ smoking * gender, + data = alzheimer, family = binomial()) > > > ################################################### > ### chunk number 83: alz-options > ################################################### > op <- options(show.signif.stars = FALSE) > > > ################################################### > ### chunk number 84: alz-2 > ################################################### > summary(alzheimer.glm) Call: glm(formula = y ~ smoking * gender, family = binomial(), data = alzheimer) Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -0.39442 0.13563 -2.908 0.003638 smoking<10 0.03774 0.51113 0.074 0.941140 smoking10-20 -0.61111 0.33084 -1.847 0.064725 smoking>20 0.54857 0.34867 1.573 0.115647 genderMale 0.07856 0.26039 0.302 0.762870 smoking<10:genderMale 1.25894 0.87692 1.436 0.151105 smoking10-20:genderMale -0.02855 0.50116 -0.057 0.954568 smoking>20:genderMale -2.26959 0.59948 -3.786 0.000153 (Dispersion parameter for binomial family taken to be 1) Null deviance: 707.90 on 537 degrees of freedom Residual deviance: 673.55 on 530 degrees of freedom AIC: 689.55 Number of Fisher Scoring iterations: 4 > > > ################################################### > ### chunk number 85: alz-options > ################################################### > options(op) > > > ################################################### > ### chunk number 86: 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 > > > ################################################### > ### chunk number 87: alz-3 > ################################################### > K (Icpt) s<10 s10-20 s>20 gMale s<10:gMale s10-20:gMale s>20:gMale None:Female 1 0 0 0 0 0 0 0 <10:Female 1 1 0 0 0 0 0 0 10-20:Female 1 0 1 0 0 0 0 0 >20:Female 1 0 0 1 0 0 0 0 None:Male 1 0 0 0 1 0 0 0 <10:Male 1 1 0 0 1 1 0 0 10-20:Male 1 0 1 0 1 0 1 0 >20:Male 1 0 0 1 1 0 0 1 > > > ################################################### > ### chunk number 88: alz-3 > ################################################### > alzheimer.ci <- confint(glht(alzheimer.glm, linfct = K)) > > > ################################################### > ### chunk number 89: alz-3a > ################################################### > attr(alzheimer.ci$confint, "calpha") [1] 2.727109 > > > ################################################### > ### chunk number 90: alz-3b > ################################################### > qnorm((1-(1-0.05)^(1/8))/2, lower.tail = FALSE) [1] 2.727008 > > > ################################################### > ### chunk number 91: alz-4 > ################################################### > alzheimer.ci$confint <- apply(alzheimer.ci$confint, 2, + binomial()$linkinv) > plot(alzheimer.ci, main = "", xlim = c(0, 1)) > > > ################################################### > ### chunk number 92: alzheimer-plot2 > ################################################### > plot(alzheimer.ci, xlab = "Probability of suffering from Alzheimer's disease", + xlim = c(0, 1), ylim = c(0.5, 8.5), main = "") > > > ################################################### > ### chunk number 93: alm-0 > ################################################### > library("TH.data") > 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" > > > ################################################### > ### chunk number 94: alm-options > ################################################### > op <- options(show.signif.stars = FALSE) > > > ################################################### > ### chunk number 95: alm-1 > ################################################### > library("survival") > aml.surv <- survreg(Surv(time, event) ~ Sex + + Age + WBC + LDH + FLT3 + risk, + data = clinical) > summary(glht(aml.surv, linfct = mcp(risk = "Tukey"))) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: survreg(formula = Surv(time, event) ~ Sex + Age + WBC + LDH + FLT3 + risk, data = clinical) Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) intermediate - high == 0 1.1101 0.3851 2.882 0.01088 low - high == 0 1.4769 0.4583 3.223 0.00367 low - intermediate == 0 0.3668 0.4303 0.852 0.66918 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 96: alm-options > ################################################### > options(op) > > > ################################################### > ### chunk number 97: tree-1 > ################################################### > data("trees513", package = "multcomp") > > > ################################################### > ### chunk number 98: trees-setup > ################################################### > trees513 <- subset(trees513, !species %in% c("fir", "softwood (other)")) > trees513$species <- trees513$species[,drop = TRUE] > levels(trees513$species)[5:6] <- c("ash/maple/elm", "hardwood") > > > ################################################### > ### chunk number 99: tree-2 > ################################################### > trees513.lme <- glmer(damage ~ species -1 + (1 | lattice/plot), + data = trees513, family = binomial()) > K <- diag(length(fixef(trees513.lme))) > > > ################################################### > ### chunk number 100: trees-K-cosmetics > ################################################### > colnames(K) <- rownames(K) <- + paste(gsub("species", "", names(fixef(trees513.lme))), + " (", table(trees513$species), ")", sep = "") > > > ################################################### > ### chunk number 101: tree-3 > ################################################### > trees513.ci <- confint(glht(trees513.lme, linfct = K)) > prob <- binomial()$linkinv(trees513.ci$confint) > trees513.ci$confint <- 1 - prob > trees513.ci$confint[, 2:3] <- trees513.ci$confint[, 3:2] > > > ################################################### > ### chunk number 102: CItrees > ################################################### > plot(trees513.ci, main = "", xlab = "Probability of browsing damage" ) > > sessionInfo() R version 4.4.2 (2024-10-31) Platform: x86_64-pc-linux-gnu Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/local/lib/R/lib/libRblas.so LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8 [5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 [7] LC_PAPER=en_GB.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] grid stats graphics grDevices utils datasets methods [8] base other attached packages: [1] HH_3.1-52 gridExtra_2.3 latticeExtra_0.6-30 [4] lattice_0.22-6 multcomp_1.4-26 TH.data_1.1-2 [7] MASS_7.3-61 survival_3.7-0 mvtnorm_1.3-2 [10] lme4_1.1-35.5 Matrix_1.7-1 robustbase_0.99-4-1 [13] sandwich_3.1-1 loaded via a namespace (and not attached): [1] tidyselect_1.2.1 libcoin_1.0-10 Rmpfr_0.9-5 dplyr_1.1.4 [5] fastmap_1.2.0 promises_1.3.0 digest_0.6.37 rpart_4.1.23 [9] mime_0.12 lifecycle_1.0.4 cluster_2.1.6 magrittr_2.0.3 [13] compiler_4.4.2 rlang_1.1.4 Hmisc_5.2-0 tools_4.4.2 [17] utf8_1.2.4 data.table_1.16.2 knitr_1.48 htmlwidgets_1.6.4 [21] interp_1.1-6 plyr_1.8.9 RColorBrewer_1.1-3 abind_1.4-8 [25] foreign_0.8-87 nnet_7.3-19 stats4_4.4.2 fansi_1.0.6 [29] xtable_1.8-4 colorspace_2.1-1 ggplot2_3.5.1 scales_1.3.0 [33] cli_3.6.3 rmarkdown_2.29 generics_0.1.3 rstudioapi_0.17.1 [37] reshape2_1.4.4 minqa_1.2.8 stringr_1.5.1 modeltools_0.2-23 [41] splines_4.4.2 parallel_4.4.2 matrixStats_1.4.1 base64enc_0.1-3 [45] vctrs_0.6.5 boot_1.3-31 DoseFinding_1.2-1 Formula_1.2-5 [49] htmlTable_2.4.3 jpeg_0.1-10 vcd_1.4-13 glue_1.8.0 [53] nloptr_2.1.1 DEoptimR_1.1-3 codetools_0.2-20 stringi_1.8.4 [57] gtable_0.3.6 later_1.3.2 deldir_2.0-4 lmtest_0.9-40 [61] gmp_0.7-5 munsell_0.5.1 tibble_3.2.1 pillar_1.9.0 [65] htmltools_0.5.8.1 R6_2.5.1 shiny_1.9.1 evaluate_1.0.1 [69] png_0.1-8 backports_1.5.0 leaps_3.2 httpuv_1.6.15 [73] Rcpp_1.0.13-1 nlme_3.1-166 checkmate_2.3.2 coin_1.4-3 [77] xfun_0.49 zoo_1.8-12 pkgconfig_2.0.3 > > proc.time() user system elapsed 7.712 0.076 7.830 multcomp/demo/Ch_Intro.Rout.save0000644000176200001440000001441414712341510016355 0ustar liggesusers R version 4.4.2 (2024-10-31) -- "Pile of Leaves" Copyright (C) 2024 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu 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. [Previously saved workspace restored] > > ################################################### > ### chunk number 2: setup > ################################################### > set.seed(290875) > > > ################################################### > ### chunk number 3: packages-1 > ################################################### > library("ISwR") Attaching package: ‘ISwR’ The following object is masked _by_ ‘.GlobalEnv’: thuesen > library("multcomp") Loading required package: mvtnorm Loading required package: survival Attaching package: ‘survival’ The following object is masked from ‘package:ISwR’: lung Loading required package: TH.data Loading required package: MASS Attaching package: ‘TH.data’ The following object is masked from ‘package:MASS’: geyser > > > ################################################### > ### chunk number 4: TypeIerror > ################################################### > typeI <- function(alpha) 1 - (1-alpha)^(1:100) > results <- cbind(typeI(alpha = 0.10), typeI(alpha = 0.05), typeI(alpha = 0.01)) > plot(results[,1], type = "l", xlab = "m", ylab = "P(at least one Type I error)", + lty = 1, ylim = c(0, 1)) > lines(results[,2], lty = 2) > lines(results[,3], lty = 3) > legend(70, 0.2, c(expression(alpha == 0.10), + expression(alpha == 0.05), expression(alpha == 0.01)), + lty = 1:3, bty = "n") > > > ################################################### > ### chunk number 5: thuesen > ################################################### > data("thuesen", package = "ISwR") > plot(short.velocity ~ blood.glucose, data = thuesen, xlab = "Blood glucose", + ylab = "Velocity") > abline(lm(short.velocity ~ blood.glucose, data = thuesen)) > > > ################################################### > ### chunk number 6: thuesen:lm > ################################################### > thuesen.lm <- lm(short.velocity ~ blood.glucose, + data = thuesen) > summary(thuesen.lm) Call: lm(formula = short.velocity ~ blood.glucose, data = thuesen) Residuals: Min 1Q Median 3Q Max -0.40141 -0.14760 -0.02202 0.03001 0.43490 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.09781 0.11748 9.345 6.26e-09 *** blood.glucose 0.02196 0.01045 2.101 0.0479 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.2167 on 21 degrees of freedom (1 observation deleted due to missingness) Multiple R-squared: 0.1737, Adjusted R-squared: 0.1343 F-statistic: 4.414 on 1 and 21 DF, p-value: 0.0479 > > > ################################################### > ### chunk number 7: thuesen:mc > ################################################### > library("multcomp") > thuesen.mc <- glht(thuesen.lm, linfct = diag(2)) > summary(thuesen.mc, test = adjusted(type = "bonferroni")) Simultaneous Tests for General Linear Hypotheses Fit: lm(formula = short.velocity ~ blood.glucose, data = thuesen) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) 1 == 0 1.09781 0.11748 9.345 1.25e-08 *** 2 == 0 0.02196 0.01045 2.101 0.0958 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- bonferroni method) > > > ################################################### > ### chunk number 8: thuesen:mc2 > ################################################### > summary(thuesen.mc) Simultaneous Tests for General Linear Hypotheses Fit: lm(formula = short.velocity ~ blood.glucose, data = thuesen) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) 1 == 0 1.09781 0.11748 9.345 1e-08 *** 2 == 0 0.02196 0.01045 2.101 0.0645 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ################################################### > ### chunk number 9: Bias > ################################################### > n <- 1 > curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, ylim = c(0,1), ylab = "y") > n <- 2 > curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, add = T, lty = 2) > n <- 5 > curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, add = T, lty = 3) > n <- 10 > curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, add = T, lty = 4) > n <- 100 > curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, add = T, lty = 5) > legend(-4, 1, c("m = 1", "m = 2", "m = 5", "m = 10", "m = 100"), + lty = 1:5, bty = "n") > abline(v = 0, col = "lightgray") > > sessionInfo() R version 4.4.2 (2024-10-31) Platform: x86_64-pc-linux-gnu Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/local/lib/R/lib/libRblas.so LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8 [5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 [7] LC_PAPER=en_GB.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] multcomp_1.4-26 TH.data_1.1-2 MASS_7.3-61 survival_3.7-0 [5] mvtnorm_1.3-2 ISwR_2.0-9 loaded via a namespace (and not attached): [1] compiler_4.4.2 zoo_1.8-12 Matrix_1.7-1 tools_4.4.2 [5] sandwich_3.1-1 codetools_0.2-20 splines_4.4.2 grid_4.4.2 [9] lattice_0.22-6 > > proc.time() user system elapsed 0.582 0.050 0.633 multcomp/demo/00Index0000644000176200001440000000022114172227611014166 0ustar liggesusersCh_Intro Introduction Ch_Theory General Concepts Ch_GLM Multiple Comparisons in Parametric Models Ch_Appl Applications Ch_Misc Further Topics multcomp/demo/Ch_GLM.R0000644000176200001440000002054714712341442014224 0ustar liggesusers ################################################### ### chunk number 2: setup ################################################### set.seed(290875) ################################################### ### chunk number 3: thuesen:ex ################################################### data("thuesen", package = "ISwR") thuesen <- thuesen[!is.na(thuesen[,"short.velocity"]),] thuesen.lm <- lm(short.velocity ~ blood.glucose, data = thuesen) ################################################### ### chunk number 4: lm-coef-vcov ################################################### betahat <- coef(thuesen.lm) Vbetahat <- vcov(thuesen.lm) ################################################### ### chunk number 5: lm-C ################################################### C <- diag(2) Sigma <- diag(1 / sqrt(diag(C %*% Vbetahat %*% t(C)))) t <- Sigma %*% C %*% betahat Cor <- Sigma %*% (C %*% Vbetahat %*% t(C)) %*% t(Sigma) ################################################### ### chunk number 6: corr ################################################### Cor ################################################### ### chunk number 7: lm-partial ################################################### library("mvtnorm") thuesen.df <- nrow(thuesen) - length(betahat) q <- sapply(abs(t), function(x) 1 - pmvt(-rep(x, 2), rep(x, 2), corr = Cor, df = thuesen.df)) ################################################### ### chunk number 8: lm-partial ################################################### delta <- rep(0, 2) myfct <- function(x, conf) { lower <- rep(-x, 2) upper <- rep(x, 2) pmvt(lower, upper, df = thuesen.df, corr = Cor, delta, abseps = 0.0001)[1] - conf } ################################################### ### chunk number 9: lm-partial ################################################### u <- uniroot(myfct, lower = 1, upper = 5, conf = 0.95)$root round(u, 3) ################################################### ### chunk number 10: lm-C2 ################################################### rownames(C) <- names(betahat) ################################################### ### chunk number 11: lm-mcp ################################################### library("multcomp") thuesen.mc <- glht(thuesen.lm, linfct = C) summary(thuesen.mc) ################################################### ### chunk number 12: lm-confint ################################################### confint(thuesen.mc) ################################################### ### chunk number 13: lm-confint ################################################### summary(thuesen.mc, test = adjusted(type = "Westfall")) ################################################### ### chunk number 14: warpbreaksBoxplot ################################################### plot(breaks ~ tension, data = warpbreaks, varwidth = TRUE, main = "", xlab = "Tension", ylab = "Breaks") ################################################### ### chunk number 15: aov-fit ################################################### warpbreaks.aov <- aov(breaks ~ tension, data = warpbreaks) summary(warpbreaks.aov) ################################################### ### chunk number 16: contr-1 ################################################### glht(warpbreaks.aov, linfct = mcp(tension = "Tukey")) ################################################### ### chunk number 17: contr-2 ################################################### glht(warpbreaks.aov, linfct = mcp(tension = c("M - L = 0", "H - L = 0", "H - M = 0"))) ################################################### ### chunk number 18: contr-3a ################################################### contr <- rbind("M - L" = c(-1, 1, 0), "H - L" = c(-1, 0, 1), "H - M" = c( 0, -1, 1)) contr ################################################### ### chunk number 19: contr-3c ################################################### glht(warpbreaks.aov, linfct = mcp(tension = contr)) ################################################### ### chunk number 20: contr-3 ################################################### glht(warpbreaks.aov, linfct = cbind(0, contr %*% contr.treatment(3))) ################################################### ### chunk number 21: trt-contr ################################################### contr.treatment(3) ################################################### ### chunk number 22: out-1 ################################################### warpbreaks.mc <- glht(warpbreaks.aov, linfct = mcp(tension = "Tukey")) names(warpbreaks.mc) ################################################### ### chunk number 23: out-2 ################################################### warpbreaks.mc$model ################################################### ### chunk number 24: out-3 ################################################### warpbreaks.mc$linfct ################################################### ### chunk number 25: out-4 ################################################### warpbreaks.mc$rhs ################################################### ### chunk number 26: out-5 ################################################### warpbreaks.mc$coef warpbreaks.mc$vcov ################################################### ### chunk number 27: out-6 ################################################### warpbreaks.mc$df ################################################### ### chunk number 28: out-7 ################################################### warpbreaks.mc$alternative ################################################### ### chunk number 29: out-7 ################################################### warpbreaks.mc$type ################################################### ### chunk number 30: summary-1 ################################################### summary(warpbreaks.mc) ################################################### ### chunk number 31: summary-1a ################################################### warpbreaks.res <- summary(warpbreaks.mc) ################################################### ### chunk number 32: summary-1b ################################################### warpbreaks.res$test$pvalues ################################################### ### chunk number 33: summary-2 ################################################### summary(warpbreaks.mc, test = Ftest()) ################################################### ### chunk number 34: summary-3 ################################################### summary(warpbreaks.mc, test = univariate()) ################################################### ### chunk number 35: summary-4 ################################################### summary(warpbreaks.mc, test = adjusted(type = "bonferroni")) ################################################### ### chunk number 36: summary-4 ################################################### summary(warpbreaks.mc, test = adjusted(type = "single-step")) ################################################### ### chunk number 37: sci-1 ################################################### warpbreaks.ci <- confint(warpbreaks.mc, level = 0.95) warpbreaks.ci ################################################### ### chunk number 38: sci-2 ################################################### plot(warpbreaks.ci, main = "", ylim = c(0.5, 3.5), xlab = "Breaks") ################################################### ### chunk number 39: warpbreaksCI ################################################### plot(warpbreaks.ci, main = "", ylim = c(0.5, 3.5), xlab = "Breaks") ################################################### ### chunk number 40: sci-3 ################################################### cbon <- qt(1-0.05/6, 51) cbon ################################################### ### chunk number 41: sci-4 ################################################### confint(warpbreaks.mc, calpha = cbon) ################################################### ### chunk number 42: warpbreaksCLD ################################################### warpbreaks.cld <- cld(warpbreaks.mc) plot(warpbreaks.cld) ################################################### ### chunk number 43: cld-1 ################################################### warpbreaks.cld <- cld(warpbreaks.mc) ################################################### ### chunk number 44: cld-2 ################################################### plot(warpbreaks.cld) sessionInfo() multcomp/demo/Ch_Misc.Rout.save0000644000176200001440000004421714712341720016164 0ustar liggesusers R version 4.4.2 (2024-10-31) -- "Pile of Leaves" Copyright (C) 2024 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu 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. [Previously saved workspace restored] > > ################################################### > ### chunk number 2: setup > ################################################### > set.seed(290875) > > > ################################################### > ### chunk number 3: packages-5 > ################################################### > 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 > library("coin") > > > ################################################### > ### chunk number 4: hypergeom > ################################################### > layout(matrix(1:2, ncol = 2)) > x1 <- 0:8 > x2 <- 0:11 > plot(x1,dhyper(x1,50,52,8), type="h", ylim=c(-0.001,0.3), yaxp=c(0,0.3,3), ylab="Probability", xlab=expression(paste("Number of events, ", E[1]))) > abline(h = 0.1, lty=3) > abline(h = 0.2, lty=3) > plot(x2,dhyper(x2,51,55,11), type="h", ylim=c(0,0.3), yaxp=c(0,0.3,3), ylab="Probability", xlab=expression(paste("Number of events, ", E[2]))) > abline(h = 0.1, lty=3) > abline(h = 0.2, lty=3) > > > ################################################### > ### chunk number 5: hypergeom2 > ################################################### > layout(matrix(1:1, ncol = 1)) > > > ################################################### > ### chunk number 6: adevent-fm > ################################################### > data("adevent", package = "multcomp") > library("coin") > fm <- as.formula(paste( + paste("E", 1:28, sep = "", collapse = "+"), + "~ group")) > fm E1 + E2 + E3 + E4 + E5 + E6 + E7 + E8 + E9 + E10 + E11 + E12 + E13 + E14 + E15 + E16 + E17 + E18 + E19 + E20 + E21 + E22 + E23 + E24 + E25 + E26 + E27 + E28 ~ group > > > ################################################### > ### chunk number 7: adevent-coin > ################################################### > it <- independence_test(fm, data = adevent, + distribution = approximate(B = 10000)) Warning message: In approximate(B = 10000) : ‘B’ is deprecated; use ‘nresample’ instead > statistic(it, "standardized") E1.no event E2.no event E3.no event E4.no event E5.no event E6.no event A 3.311225 -0.2557444 0.3114649 -0.3420494 1.155913 2.019139 E7.no event E8.no event E9.no event E10.no event E11.no event E12.no event A -0.4529473 2.264737 -1.00957 1.418682 -1 -1.418682 E13.no event E14.no event E15.no event E16.no event E17.no event E18.no event A -1 -1.418682 1.418682 0 -1 -1 E19.no event E20.no event E21.no event E22.no event E23.no event E24.no event A -1.418682 1 0 -1 1 -1 E25.no event E26.no event E27.no event E28.no event A -1 -1 -1 0.31773 > pvalue(it, method = "single-step") E1.no event E2.no event E3.no event E4.no event E5.no event E6.no event A 0.0039 1 1 1 0.9998 0.4414 E7.no event E8.no event E9.no event E10.no event E11.no event E12.no event A 1 0.2092 1 0.9976 1 0.9976 E13.no event E14.no event E15.no event E16.no event E17.no event E18.no event A 1 0.9976 0.9976 1 1 1 E19.no event E20.no event E21.no event E22.no event E23.no event E24.no event A 0.9976 1 1 1 1 1 E25.no event E26.no event E27.no event E28.no event A 1 1 1 1 > > > ################################################### > ### chunk number 8: mtept-coin > ################################################### > data("mtept", package = "multcomp") > it <- independence_test(E1 + E2 + E3 + E4 ~ treatment, + data = mtept, distribution = approximate(B = 50000)) Warning message: In approximate(B = 50000) : ‘B’ is deprecated; use ‘nresample’ instead > statistic(it, "standardized") E1 E2 E3 E4 Drug -2.490875 -2.434497 -1.289555 2.330816 > pvalue(it, method = "single-step") E1 E2 E3 E4 Drug 0.0358 0.04236 0.49854 0.05478 > > > ################################################### > ### chunk number 9: gsd-1 > ################################################### > library("gsDesign") > x0.0 <- gsDesign(k=4, test.type=1, sfu="WT", sfupar=0) > x0.25 <- gsDesign(k=4, test.type=1, sfu="WT", sfupar=0.25) > x0.5 <- gsDesign(k=4, test.type=1, sfu="WT", sfupar=0.5) > > > ################################################### > ### chunk number 10: GSD-a > ################################################### > plot(x0.0$timing,x0.0$upper$bound, type="b", pch=20, xlab="Information fraction", ylab="Rejection boundaries") > lines(x0.25$timing,x0.25$upper$bound, lty=2) > points(x0.25$timing,x0.25$upper$bound, pch=21) > lines(x0.5$timing,x0.5$upper$bound, lty=3) > points(x0.5$timing,x0.5$upper$bound, pch=22) > legend(x=c(0.6,1), y = c(3.6,4.0), lty=c(1,2,3), pch=c(20,21,22), + legend=c(expression(paste(Delta,"=0 (O'Brien-Fleming)")), + expression(paste(Delta,"=0.25")), + expression(paste(Delta,"=0.5 (Pocock)"))), bty = "n") > > > ################################################### > ### chunk number 11: GSD-b > ################################################### > plot(0:100/100, sfHSD(.025, 0:100/100, -4)$spend, type="l", lwd=2,xlab="Information fraction", ylab="Cumulative error-spending") > lines(0:100/100, sfHSD(.025, 0:100/100, -2)$spend, lty=2, lwd=2) > lines(0:100/100, sfHSD(.025, 0:100/100, 1)$spend, lty=3, lwd=2) > legend(x=c(.0, .27), y=.025 * c(.8, 1), lty=1:3, lwd=2, legend=c(expression(paste(gamma," = -4")), expression(paste(gamma," = -2")), expression(paste(gamma," = 1"))), bty = "n") > > > ################################################### > ### chunk number 12: gsd-2 > ################################################### > library("gsDesign") > gsd.OF <- gsDesign(k = 4, test.type = 1, sfu = "OF", + alpha = 0.025, beta = 0.1, timing = 1, + delta = 0.15) > > > ################################################### > ### chunk number 13: gsd-3 > ################################################### > gsd.OF One-sided group sequential design with 90 % power and 2.5 % Type I Error. Analysis N Z Nominal p Spend 1 120 4.05 0.0000 0.0000 2 239 2.86 0.0021 0.0021 3 359 2.34 0.0097 0.0083 4 478 2.02 0.0215 0.0145 Total 0.0250 ++ alpha spending: O'Brien-Fleming boundary. Boundary crossing probabilities and expected sample size assume any cross stops the trial Upper boundary (power or Type I Error) Analysis Theta 1 2 3 4 Total E{N} 0.00 0.000 0.0021 0.0083 0.0145 0.025 475.8 0.15 0.008 0.2850 0.4031 0.2040 0.900 358.4 > > > ################################################### > ### chunk number 14: gsd-4 > ################################################### > gsd.OF2 <- gsDesign(k = 4, test.type = 1, + sfu = "OF", alpha = 0.025, beta = 0.1, timing = 1, + delta = 0) > gsd.OF2$n.I[4] [1] 1.022163 > > > ################################################### > ### chunk number 15: gsd-5 > ################################################### > gsd.OF$upper$bound [1] 4.048591 2.862786 2.337455 2.024296 > > > ################################################### > ### chunk number 16: gsd-6 > ################################################### > gsd.OF$n.I [1] 119.3366 238.6732 358.0099 477.3465 > > > ################################################### > ### chunk number 17: GSD-c > ################################################### > print(plot(gsd.OF, plottype = 1, xlab = "Cumulative sample size", main = "")) > > > ################################################### > ### chunk number 18: gsd-7 > ################################################### > gsd.OF3 <- gsProbability(theta = gsd.OF$delta*seq(0,2,0.25), + d = gsd.OF) > gsd.OF3 One-sided group sequential design with 90 % power and 2.5 % Type I Error. Analysis N Z Nominal p Spend 1 120 4.05 0.0000 0.0000 2 239 2.86 0.0021 0.0021 3 359 2.34 0.0097 0.0083 4 478 2.02 0.0215 0.0145 Total 0.0250 ++ alpha spending: O'Brien-Fleming boundary. Boundary crossing probabilities and expected sample size assume any cross stops the trial Upper boundary (power or Type I Error) Analysis Theta 1 2 3 4 Total E{N} 0.0000 0.0000 0.0021 0.0083 0.0145 0.0250 475.8 0.0375 0.0001 0.0111 0.0429 0.0700 0.1241 469.5 0.0750 0.0006 0.0437 0.1395 0.1811 0.3649 450.1 0.1125 0.0024 0.1281 0.2924 0.2569 0.6798 411.0 0.1500 0.0080 0.2850 0.4031 0.2040 0.9000 358.4 0.1875 0.0227 0.4910 0.3752 0.0931 0.9820 307.2 0.2250 0.0558 0.6745 0.2428 0.0251 0.9982 267.4 0.2625 0.1188 0.7648 0.1123 0.0041 0.9999 238.9 0.3000 0.2202 0.7416 0.0378 0.0004 1.0000 217.0 > > > ################################################### > ### chunk number 19: gsd-8 > ################################################### > gsd.OF3$theta [1] 0.0000 0.0375 0.0750 0.1125 0.1500 0.1875 0.2250 0.2625 0.3000 > > > ################################################### > ### chunk number 20: GSD-d > ################################################### > plot(gsd.OF3, plottype=2, main="", ylab="Boundary crossing probabilities", + base = TRUE) > > > ################################################### > ### chunk number 21: GSD-e > ################################################### > plot(gsd.OF3, plottype=6, main="", ylab="Average sample size", base = TRUE) > abline(h = 467, lty=3) > > > ################################################### > ### chunk number 22: ad-1 > ################################################### > if (FALSE) { + ### asd.sim doesn't exist in asd anymore + library("asd") + res <- asd.sim(nsamp = c(110, 110), early = c(0.3, 0.3), + final = c(0.3, 0.3), nsim = 10000, corr = 1, select = 1, + ptest = c(1, 2)) + res + + + ################################################### + ### chunk number 23: ad-2 + ################################################### + d <- seq(0,0.3,0.025) + len <- length(d) + nsim <- 10000 + if (!file.exists("ad-2.Rda")) { + res <- matrix(nrow = 4, ncol = len) + for (i in 1:len){ + res[1,i] <- asd.sim(nsamp=c(110,110), early=c(d[i],d[len]), final=c(d[i],d[len]), nsim=nsim, corr=1, select=1, ptest=c(1,2))$sim.reject/nsim + res[2,i] <- asd.sim(nsamp=c(110,110), early=c(d[i],d[len]), final=c(d[i],d[len]), nsim=nsim, corr=1, select=2, ptest=c(1,2))$sim.reject/nsim + res[3,i] <- asd.sim(nsamp=c(110,110), early=c(d[i],d[len]), final=c(d[i],d[len]), nsim=nsim, corr=1, select=5, ptest=c(1,2))$sim.reject/nsim + res[4,i] <- asd.sim(nsamp=c(110,165), early=c(d[i],d[len]), final=c(d[i],d[len]), nsim=nsim, corr=1, select=1, ptest=c(1,2))$sim.reject/nsim + } + save(res, file = "ad-2.Rda") + } else { + load("ad-2.Rda") + } + + + ################################################### + ### chunk number 24: ad-3 + ################################################### + plot(d, res[1,], type="n", ylim=c(0.4,1), ylab="Disjunctive power", xlab=expression(theta[1])) + lines(lowess(d,res[1,]), lty="11") + lines(lowess(d,res[2,]), lty="44") + lines(lowess(d,res[3,]), lty="13") + lines(lowess(d,res[4,]), lty="F5") + legend(0.22,0.55,c("A","B","C","D"), lty=c("11", "44", "13", "F5"), bty = "n") + + } > > ################################################### > ### chunk number 25: mcpmod-1 > ################################################### > library("DoseFinding") > candMods <- Mods(linear = NULL, emax = 0.2, + logistic = c(0.25, 0.09), doses = c(0, 0.05, 0.2, 0.6, 1)) > > > ################################################### > ### chunk number 26: mcpmod-2 > ################################################### > plot(candMods, base = 0, maxEff = 1) > > ################################################### > ### chunk number 28: mcpmod-4 > ################################################### > data("biom", package = "DoseFinding") > res <- MCPMod(dose, resp, biom, candMods, alpha = 0.05, + pVal = TRUE, Delta=0.5) > > > ################################################### > ### chunk number 29: mcpmod-5 > ################################################### > res MCPMod Multiple Contrast Test: t-Stat adj-p emax 3.464 < 0.001 logistic 3.235 0.00184 linear 2.972 0.00315 Estimated Dose Response Models: linear model e0 delta 0.492 0.559 emax model e0 eMax ed50 0.322 0.746 0.142 logistic model e0 eMax ed50 delta 0.169 0.773 0.087 0.071 Selected model (AIC): emax Estimated TD, Delta=0.5 linear emax logistic 0.8951 0.2886 0.2255 > > > ################################################### > ### chunk number 30: mcpmod-6 > ################################################### > summary(res) MCPMod *************************************** MCP part *************************************** Multiple Contrast Test Contrasts: linear emax logistic 0 -0.437 -0.643 -0.478 0.05 -0.378 -0.361 -0.435 0.2 -0.201 0.061 -0.147 0.6 0.271 0.413 0.519 1 0.743 0.530 0.540 Contrast Correlation: linear emax logistic linear 1.000 0.912 0.945 emax 0.912 1.000 0.956 logistic 0.945 0.956 1.000 Multiple Contrast Test: t-Stat adj-p emax 3.464 < 0.001 logistic 3.235 0.00184 linear 2.972 0.00315 *************************************** Mod part *************************************** ** Fitted model 1 Dose Response Model Model: linear Fit-type: normal Residuals: Min 1Q Median 3Q Max -2.097 -0.445 0.136 0.512 2.164 Coefficients with approx. stand. error: Estimate Std. Error e0 0.492 0.0998 delta 0.559 0.1885 Residual standard error: 0.714 Degrees of freedom: 98 ** Fitted model 2 Dose Response Model Model: emax Fit-type: normal Residuals: Min 1Q Median 3Q Max -2.000 -0.442 0.130 0.429 2.088 Coefficients with approx. stand. error: Estimate Std. Error e0 0.322 0.152 eMax 0.746 0.236 ed50 0.142 0.180 Residual standard error: 0.706 Degrees of freedom: 97 ** Fitted model 3 Dose Response Model Model: logistic Fit-type: normal Residuals: Min 1Q Median 3Q Max -1.9832 -0.3970 0.0792 0.4508 2.0550 Coefficients with approx. stand. error: Estimate Std. Error e0 0.1691 1.098 eMax 0.7728 1.117 ed50 0.0872 0.262 delta 0.0713 0.119 Residual standard error: 0.709 Degrees of freedom: 96 *************************************** Model selection criteria (AIC): *************************************** linear emax logistic 220.4986 219.1383 220.8288 Selected model: emax *************************************** Estimated TD, Delta=0.5 *************************************** linear emax logistic 0.8951 0.2886 0.2255 > > > ################################################### > ### chunk number 31: mcpmod-7 > ################################################### > plot(res, complData = TRUE, clinRel = TRUE, CI = TRUE, + doseEst = TRUE) > > > ################################################### > ### chunk number 32: mcpmod-7 > ################################################### > detach(package:DoseFinding) > library(DoseFinding) > print(plot(res, complData = TRUE, clinRel = TRUE, CI = TRUE, + doseEst = TRUE, lty = 1, colors = c("black", "gray", "black", "gray", "black"))) > > > sessionInfo() R version 4.4.2 (2024-10-31) Platform: x86_64-pc-linux-gnu Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/local/lib/R/lib/libRblas.so LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8 [5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 [7] LC_PAPER=en_GB.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] DoseFinding_1.2-1 gsDesign_3.6.4 coin_1.4-3 multcomp_1.4-26 [5] TH.data_1.1-2 MASS_7.3-61 survival_3.7-0 mvtnorm_1.3-2 loaded via a namespace (and not attached): [1] Matrix_1.7-1 gtable_0.3.6 dplyr_1.1.4 compiler_4.4.2 [5] tidyselect_1.2.1 xml2_1.3.6 parallel_4.4.2 tidyr_1.3.1 [9] splines_4.4.2 scales_1.3.0 fastmap_1.2.0 lattice_0.22-6 [13] ggplot2_3.5.1 R6_2.5.1 labeling_0.4.3 generics_0.1.3 [17] tibble_3.2.1 r2rtf_1.1.1 munsell_0.5.1 pillar_1.9.0 [21] rlang_1.1.4 utf8_1.2.4 modeltools_0.2-23 cli_3.6.3 [25] withr_3.0.2 magrittr_2.0.3 digest_0.6.37 grid_4.4.2 [29] xtable_1.8-4 sandwich_3.1-1 lifecycle_1.0.4 vctrs_0.6.5 [33] glue_1.8.0 farver_2.1.2 libcoin_1.0-10 codetools_0.2-20 [37] zoo_1.8-12 stats4_4.4.2 gt_0.11.1 fansi_1.0.6 [41] colorspace_2.1-1 purrr_1.0.2 htmltools_0.5.8.1 matrixStats_1.4.1 [45] tools_4.4.2 pkgconfig_2.0.3 > > proc.time() user system elapsed 1.403 0.065 1.474 multcomp/demo/Ch_Theory.Rout.save0000644000176200001440000000735114712341753016547 0ustar liggesusers R version 4.4.2 (2024-10-31) -- "Pile of Leaves" Copyright (C) 2024 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu 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. [Previously saved workspace restored] > > ################################################### > ### chunk number 2: setup > ################################################### > set.seed(290875) > > > ################################################### > ### chunk number 3: padj-1 > ################################################### > p <- c(0.01, 0.015, 0.005) > p.adjust(p, "bonferroni") [1] 0.030 0.045 0.015 > > > ################################################### > ### chunk number 4: padj-2 > ################################################### > p.adjust(p, "holm") [1] 0.020 0.020 0.015 > > > ################################################### > ### chunk number 5: simesplot > ################################################### > library("mvtnorm") > set.seed(12345) > x <- rmvnorm(n = 100, mean = c(2,2), sigma = diag(2)) > p <- 1 - pnorm(x) > plot(p, xlim = c(0, 1), ylim = c(0, 1), ylab = expression(p[2]), + xlab = expression(p[1]), col = rgb(0,0,0,1)) > abline(h = 0.05, lty=3) > abline(h = 0.1, lty=3) > abline(v = 0.05, lty=3) > abline(v = 0.1, lty=3) > > > ################################################### > ### chunk number 6: padj-3 > ################################################### > p <- c(0.01, 0.02, 0.022, 0.09) > p.adjust(p, "hochberg") [1] 0.040 0.044 0.044 0.090 > > > ################################################### > ### chunk number 7: padj-4 > ################################################### > p.adjust(p, "hommel") [1] 0.030 0.040 0.044 0.090 > > sessionInfo() R version 4.4.2 (2024-10-31) Platform: x86_64-pc-linux-gnu Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/local/lib/R/lib/libRblas.so LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8 [5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 [7] LC_PAPER=en_GB.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] mvtnorm_1.3-2 loaded via a namespace (and not attached): [1] vctrs_0.6.5 cli_3.6.3 rlang_1.1.4 TH.data_1.1-2 [5] generics_0.1.3 zoo_1.8-12 glue_1.8.0 colorspace_2.1-1 [9] libcoin_1.0-10 stats4_4.4.2 fansi_1.0.6 scales_1.3.0 [13] modeltools_0.2-23 grid_4.4.2 munsell_0.5.1 tibble_3.2.1 [17] MASS_7.3-61 lifecycle_1.0.4 compiler_4.4.2 multcomp_1.4-26 [21] dplyr_1.1.4 codetools_0.2-20 sandwich_3.1-1 pkgconfig_2.0.3 [25] lattice_0.22-6 DoseFinding_1.2-1 R6_2.5.1 tidyselect_1.2.1 [29] utf8_1.2.4 coin_1.4-3 pillar_1.9.0 parallel_4.4.2 [33] splines_4.4.2 magrittr_2.0.3 Matrix_1.7-1 gtable_0.3.6 [37] matrixStats_1.4.1 survival_3.7-0 ggplot2_3.5.1 > > proc.time() user system elapsed 0.785 0.087 0.866 multcomp/demo/Ch_Intro.R0000644000176200001440000000471014712341503014670 0ustar liggesusers ################################################### ### chunk number 2: setup ################################################### set.seed(290875) ################################################### ### chunk number 3: packages-1 ################################################### library("ISwR") library("multcomp") ################################################### ### chunk number 4: TypeIerror ################################################### typeI <- function(alpha) 1 - (1-alpha)^(1:100) results <- cbind(typeI(alpha = 0.10), typeI(alpha = 0.05), typeI(alpha = 0.01)) plot(results[,1], type = "l", xlab = "m", ylab = "P(at least one Type I error)", lty = 1, ylim = c(0, 1)) lines(results[,2], lty = 2) lines(results[,3], lty = 3) legend(70, 0.2, c(expression(alpha == 0.10), expression(alpha == 0.05), expression(alpha == 0.01)), lty = 1:3, bty = "n") ################################################### ### chunk number 5: thuesen ################################################### data("thuesen", package = "ISwR") plot(short.velocity ~ blood.glucose, data = thuesen, xlab = "Blood glucose", ylab = "Velocity") abline(lm(short.velocity ~ blood.glucose, data = thuesen)) ################################################### ### chunk number 6: thuesen:lm ################################################### thuesen.lm <- lm(short.velocity ~ blood.glucose, data = thuesen) summary(thuesen.lm) ################################################### ### chunk number 7: thuesen:mc ################################################### library("multcomp") thuesen.mc <- glht(thuesen.lm, linfct = diag(2)) summary(thuesen.mc, test = adjusted(type = "bonferroni")) ################################################### ### chunk number 8: thuesen:mc2 ################################################### summary(thuesen.mc) ################################################### ### chunk number 9: Bias ################################################### n <- 1 curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, ylim = c(0,1), ylab = "y") n <- 2 curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, add = T, lty = 2) n <- 5 curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, add = T, lty = 3) n <- 10 curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, add = T, lty = 4) n <- 100 curve(n*dnorm(x)*(pnorm(x))^(n-1), -5, 5, add = T, lty = 5) legend(-4, 1, c("m = 1", "m = 2", "m = 5", "m = 10", "m = 100"), lty = 1:5, bty = "n") abline(v = 0, col = "lightgray") sessionInfo() multcomp/vignettes/0000755000176200001440000000000015075167045014134 5ustar liggesusersmultcomp/vignettes/header.tex0000644000176200001440000000424214442074470016104 0ustar liggesusers \usepackage{amsfonts} \usepackage{latexsym} \usepackage{amsmath} \usepackage{amssymb} \usepackage{graphicx} \usepackage{parskip} \usepackage[round]{natbib} \usepackage{amstext} \usepackage{amsmath} \usepackage{hyperref} \usepackage[utf8]{inputenc} \newcommand{\Z}{\mathbf{Z}} \newcommand{\A}{\mathbf{A}} \newcommand{\X}{\mathbf{X}} \newcommand{\Y}{\mathbf{Y}} \newcommand{\Cor}{\mathbf{R}} \newcommand{\cov}{\text{cov}} \newcommand{\K}{\mathbf{K}} \newcommand{\m}{\mathbf{m}} \newcommand{\uu}{\mathbf{u}} \renewcommand{\S}{\mathbf{S}} \newcommand{\D}{\mathbf{D}} \newcommand{\Obs}{\mathbf{O}} \newcommand{\R}{\mathbb{R} } \newcommand{\C}{\mathbf{C}} \newcommand{\E}{\mathbb{E}} \newcommand{\V}{\mathbb{V}} \newcommand{\N}{\mathcal{N}} \newcommand{\AN}{\mathcal{AN}} \newcommand{\T}{\mathbf{T}} \renewcommand{\tt}{\mathbf{t}} \newcommand{\F}{\mathcal{F}} \newcommand{\M}{\mathcal{M}} \newcommand{\abs}{\text{abs}} \newcommand{\diag}{\text{diag}} \newcommand{\df}{\text{df}} \newcommand{\Rg}{\text{Rank}} \newcommand{\Prob}{\mathbb{P}} \newcommand{\cL}{\stackrel{d}{\longrightarrow}} \newcommand{\cP}{\stackrel{\mathbb{P}}{\longrightarrow}} \newcommand{\an}{\stackrel{a}{\sim}} \newcommand{\Sraw}{\S_n} \newcommand{\Sigmaraw}{\Sigma} \newcommand{\SK}{\S^\star_n} \newcommand{\SigmaK}{\Sigma^\star} \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{\RR}{\textsf{R}} \renewcommand{\S}{\textsf{S}} \RequirePackage[T1]{fontenc} \RequirePackage{graphicx,ae,fancyvrb} \IfFileExists{upquote.sty}{\RequirePackage{upquote}}{} %\usepackage{relsize} %\DefineVerbatimEnvironment{Sinput}{Verbatim}{baselinestretch=1.05} %\DefineVerbatimEnvironment{Soutput}{Verbatim}{fontfamily=courier, % baselinestretch=1.05, % fontshape=it, % fontsize=\relsize{-1}} %\DefineVerbatimEnvironment{Scode}{Verbatim}{} %\newenvironment{Schunk}{}{} multcomp/vignettes/multcomp.bib0000644000176200001440000000425114172227611016445 0ustar liggesusers @book{Searle1971, title = {Linear Models}, author = {Shayle R. Searle}, year = 1971, publisher = {John Wiley \& Sons}, address = {New York} } @article{Genz1992, author = {Alan Genz}, title = {Numerical computation of multivariate normal probabilities}, journal = {Journal of Computational and Graphical Statistics}, pages = {141-149}, year = {1992}, volume = {1} } @article{GenzBretz1999, author = {Alan Genz and Frank Bretz}, title = {Numerical computation of multivariate $t$-probabilities with application to power calculation of multiple contrasts}, journal = {Journal of Statistical Computation and Simulation}, pages = {361-378}, year = {1999}, volume = {63} } @article{GenzBretz2002, author = {Alan Genz and Frank Bretz}, title = {Comparison of Methods for the Computation of Multivariate $t$ Probabilities}, journal = {Journal of Computational and Graphical Statistics}, volume = 11, number = 4, year = 2002, pages = {950-971} } @article{Dunnett1955, title = {A Multiple Comparison Procedure for Comparing Several Treatments with a Control}, author = {Charles W. Dunnett}, journal = {Journal of the American Statistical Association}, volume = 50, number = 272, year = 1955, pages = {1096--1121} } @article{Shaffer1986, author = {Juliet P. Shaffer}, title = {Modified sequentially rejective multiple test procedures}, year = 1986, journal = {Journal of the American Statistical Association}, volume = {81}, pages = {826--831} } @article{Westfall1997, author = {Peter H. Westfall}, title = {Multiple testing of general contrasts using logical constraints and correlations}, year = 1997, journal = {Journal of the American Statistical Association}, volume = 92, pages = {299--306} } @book{Westfall1999, author = {Peter H. Westfall and Randall D. Tobias and Dror Rom and Russell D. Wolfinger and Yosef Hochberg}, title = {Multiple Comparisons and Multiple Tests Using the {SAS} System}, publisher = {SAS Insitute}, address = {Cary, NC}, year = 1999 } multcomp/vignettes/references.bib0000644000176200001440000002430414172227607016734 0ustar liggesusers @book{Serfling1980, author = {Robert J. Serfling}, title = {Approximation Theorems of Mathematical Statistics}, year = 1980, publisher = {John Wiley \& Sons}, address = {New York} } @book{RousseeuwLeroy2003, author = {Peter J. Rousseeuw and Annick M. Leroy}, year = 2003, title = {Robust Regression and Outlier Detection}, publisher = {John Wiley \& Sons}, address = {New York}, edition = {2nd} } @Article{mfluc:Stefanski+Boos:2002, author = {Leonard A. Stefanski and Dennis D. Boos}, title = {The Calculus of {M}-Estimation}, journal = {The American Statistician}, volume = {56}, year = {2002}, pages = {29--38}, } @Book{mfluc:White:1994, author = {Halbert White}, title = {Estimation, Inference and Specification Analysis}, publisher = {Cambridge University Press}, year = {1994}, } @Article{mfluc:Bera+Bilias:2002, author = {Anil K. Bera and Yannis Bilias}, title = {The {MM}, {ME}, {ML}, {EL}, {EF} and {GMM} Approaches to Estimation: {A} Synthesis}, year = {2002}, pages = {51--86}, journal = {Journal of Econometrics}, volume = {107}, } @book{Lehmann1999, author = {Erich Lehmann}, year = 1999, title = {Elements of Large-Sample Theory}, publisher = {Springer}, address = {New York} } @book{HochbergTamhane1987, author = {Yosef Hochberg and Ajit C. T{\'i}tulo Tamhane}, title = {Multiple Comparison Procedures}, year = 1987, publisher = {John Wiley \& Sons}, address = {New York}, } @book{Hsu1996, author = {Jason C. Hsu}, title = {Multiple Comparisons: Theory and Methods}, year = 1996, publisher = {CRC Press, Chapman \& Hall}, address = {London}, } @article{GenzBretz1999, key = {135}, author = {Alan Genz and Frank Bretz}, title = {Numerical computation of multivariate $t$-probabilities with application to power calculation of multiple contrasts}, journal = {Journal of Statistical Computation and Simulation}, pages = {361-378}, year = {1999}, volume = {63} } @article{BretzGenzHothorn2001, key = {317}, author = {Frank Bretz and Alan Genz and Ludwig A. Hothorn}, title = {On the numerical availability of multiple comparison procedures}, journal = {Biometrical Journal}, pages = {645-656}, year = {2001}, volume = {43}, number = {5} } @article{Genz1992, author = {Alan Genz}, title = {Numerical Computation of Multivariate Normal Probabilities}, journal = {Journal of Computational and Graphical Statistics}, pages = {141-149}, year = {1992}, volume = {1} } @article{GenzBretz2002, author = {Alan Genz and Frank Bretz}, year = 2002, title = {Methods for the Computation of Multivariate $t$-Probabilities}, journal = {Journal of Computational and Graphical Statistics}, volume = 11, pages = {950--971} } @book{Searle1971, author = {Shayle R. Searle}, year = 1971, title ={Linear Models}, publisher = {John Wiley \& Sons}, address = {New York} } @article{Shaffer1986, author = {Juliet P. Shaffer}, year = 1986, title = {Modified Sequentially Rejective Multiple Test Procedures}, journal = {Journal of the American Statistical Association}, volume = 81, pages = {826--831} } @Article{Rnews:Bates:2005, author = {Douglas Bates}, title = {Fitting Linear Mixed Models in {R}}, journal = {R News}, year = 2005, volume = 5, number = 1, pages = {27--30}, month = {May}, url = {http://CRAN.R-project.org/doc/Rnews/}, pdf = Rnews2005-1 } @ARTICLE{Zeileis2004, author = {Achim Zeileis}, title = {Econometric Computing with {HC} and {HAC} Covariance Matrix Estimators}, year = {2004}, journal = {Journal of Statistical Software}, volume = {11}, number = {10}, pages = {1--17}, url = {http://www.jstatsoft.org/v11/i10/} } @ARTICLE{Zeileis2006, author = {Achim Zeileis}, title = {Object-oriented Computation of Sandwich Estimators}, year = {2006}, journal = {Journal of Statistical Software}, volume = {16}, number = {9}, pages = {1--16}, url = {http://www.jstatsoft.org/v16/i09/} } @article{Yohai1987, author = {Victor J. Yohai}, year = 1987, title = {High breakdown-point and high efficiency estimates for regression}, journal = {The Annals of Statistics}, volume = 15, pages = {642--65} } @Article{Hothorn:2006:AmStat, key = {575}, author = {Torsten Hothorn and Kurt Hornik and Mark A. van de Wiel and Achim Zeileis}, title = {A {L}ego System for Conditional Inference}, journal = {The American Statistician}, year = {2006}, volume = {60}, number = {3}, pages = {257--263}, } @Article{ salibhillier1997, key = {552}, author = {Emad Salib and Valerie Hillier}, title = {A Case-Control Study of Smoking and {A}lzheimer's Disease}, journal = {International Journal of Geriatric Psychiatry}, year = 1997, volume = 12, pages = {295-300} } @Article{ boenscheta2005, key = {530}, author = {Domenikus B{\"o}nsch and Thomas Lederer and Udo Reulbach and Torsten Hothorn and Johannes Kornhuber and Stefan Bleich}, title = {Joint Analysis of the {NACP-REP1} Marker Within the Alpha Synuclein Gene Concludes Association with Alcohol Dependence}, journal = {Human Molecular Genetics}, year = 2005, volume = 14, number = 7, pages = {967-971} } @Manual{ rcore2007, title = {\textsf{R}: A Language and Environment for Statistical Computing}, author = {{R Development Core Team}}, organization = {R Foundation for Statistical Computing}, address = {Vienna, Austria}, year = 2008, note = {{ISBN} 3-900051-07-0}, url = {http://www.R-project.org} } @Article{ garcia2005, author = {Ada L. Garcia and Karen Wagner and Torsten Hothorn and Corinna Koebnick and Hans-Joachim F. Zunft and Ulrike Trippo}, title = {Improved prediction of body fat by measuring skinfold thickness, circumferences, and bone breadths}, journal = {Obesity Research}, year = 2005, volume = 13, number = 3, pages = {626--634} } @article{Bullingeretal2004, key = {490}, author = {Lars Bullinger and Konstanze D{\"o}hner and Eric Bair and Stefan Fr{\"o}hlich and Richard F. Schlenk and Robert Tibshirani and Hartmut D{\"o}hner and Jonathan R. Pollack}, title = {Use of Gene-Expression Profiling to Identify Prognostic Subclasses in Adult Acute Myloid Leukemia}, journal = {New England Journal of Medicine}, year = {2004}, volume = {350}, number = {16}, pages = {1605-1616} } @Manual{pkg:robustbase, title = {robustbase: {B}asic Robust Statistics}, author = {Valentin Todorov and Andreas Ruckstuhl and Matias Salibian-Barrera and Martin Maechler and {others}}, year = {2007}, note = {R package version 0.2-8}, url = {http://CRAN.R-project.org}, } @Manual{pkg:multcomp, title = {multcomp: {S}imultaneous Inference in General Parametric Models}, author = {Torsten Hothorn and Frank Bretz and Peter Westfall and Richard M. Heiberger}, year = {2008}, note = {R package version 1.0-0}, url = {http://CRAN.R-project.org} } @Manual{pkg:lme4, title = {lme4: {L}inear mixed-effects models using {S4} classes}, author = {Douglas Bates}, year = {2007}, note = {R package version 0.99875-9}, url = {http://CRAN.R-project.org} } @Manual{pkg:mvtnorm, title = {mvtnorm: {M}ultivariate Normal and $t$ Distribution}, author = {Alan Genz and Frank Bretz and Torsten Hothorn}, year = {2007}, note = {R package version 0.8-1}, url = {http://CRAN.R-project.org} } @Article{Rnews:Hothorn+Bretz+Genz:2001, author = {Torsten Hothorn and Frank Bretz and Alan Genz}, title = {On Multivariate $t$ and {Gau{\ss}} Probabilities in {R}}, journal = {R News}, year = 2001, volume = 1, number = 2, pages = {27--29}, month = {June}, ISSN = {1609--3631}, url = {http://CRAN.R-project.org/doc/Rnews/}, } @book{Westfall1999, author = {Peter H. Westfall and Randall D. Tobias and Dror Rom and Russell D. Wolfinger and Yosef Hochberg}, year = 1999, title = {Multiple Comparisons and Multiple Tests Using the {SAS} System}, publisher = {SAS Institute Inc.}, address = {Cary, NC} } @inproceedings{Bretzetal2008, author = {Frank Bretz and Torsten Hothorn and Peter Westfall}, year = 2008, title = {Multiple Comparison Procedures in Linear Models}, booktitle = {International Conference on Computational Statistics}, note = {submitted} } @article{Marcusetal1976, author = {Ruth Marcus and Peritz Eric and K. Ruben Gabriel}, title = {On Closed Testing Procedures with Special Reference to Ordered Analysis of Variance}, year = 1976, journal = {Biometrika}, volume = 63, pages = {655--660} } @article{Westfall1997, key = {318}, author = {Peter H. Westfall}, title = {Multiple Testing of General Contrasts using Logical Constraints and Correlations}, journal = {Journal of the American Statistical Association}, pages = {299-306}, year = {1997}, volume = {92}, number = {437} } @article{WestfallTobias2007, author = {Peter H. Westfall and Randall D. Tobias}, title = {Multiple Testing of General Contrasts: {T}runcated Closure and the Extended {S}haffer-{R}oyen Method}, year = 2007, journal = {Journal of the American Statistical Association}, volume = 102, pages = {487--494} } @book{Tong1990, author = {Yung Liang Tong}, title = {The Multivariate Normal Distribution}, year = 1990, publisher = {Springer-Verlag}, address = {New York, Berlin} } multcomp/vignettes/chfls1.Rnw0000644000176200001440000006772514444336767016035 0ustar liggesusers \documentclass[11pt]{article} %%\VignetteIndexEntry{Supplementary Material for "A re-evaluation of the model selection procedure in Pollet \& Nettle (2009)"} %%\VignetteDepends{xtable,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("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 by Pollet and Nettle.} \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") @ \begin{sidewaystable} \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} \caption{Summary of variable selection following the strategy of \citet{Pollet2009} using the correctly calculated AIC and BIC.\newline \vspace{0.7cm}\label{Pollet_korr}} \end{sidewaystable} \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/vignettes/chfls1.bib0000644000176200001440000000436214172227611015770 0ustar liggesusers@Book{ agresti02, author = {Alan Agresti}, title = {Categorical Data Analysis}, year = {2002}, publisher = {John Wiley and Sons}, address = {New York}, edition = {2nd} } @Book{ Fahrmeir2001, author = {Ludwig Fahrmeir and Gerhard Tutz}, title = {Multivariate Statistical Modelling Based on Generalized Linear Models}, year = {2002}, publisher = {Springer}, address = {New York}, edition = {2nd} } @Manual{ multcomp, title = {\pkg{multcomp}: Simultaneous Inference in General Parametric Models}, author = {Torsten Hothorn and Frank Bretz and Peter Westfall}, year = {2008}, note = {\proglang{R}~package version~1.0-2}, url = {http://CRAN.R-project.org/package=multcomp} } @Article{ Hothorn2008b, author = {Torsten Hothorn and Frank Bretz and Peter Westfall}, title = {Simultaneous Inference in General Parametric Models}, journal = {Biometrical Journal}, year = 2008, volume = 50, number = 3, pages = {346--363} } @Article{ Parish, author = {W. L. Parish and E. O. Laumann}, title = {Chinese Health and Family Life Survey}, note = {Accecibilty verified on May 18, 2009}, url = {http://www.spc.uchicago.edu/prc/chfls.php} } @Article{ Pollet2009, author = {Thomas V. Pollet and Daniel Nettle}, title = {Partner Wealth Predicts Self-Reported Orgasm Frequency in a Sample of Chinese Women}, journal = {Evolution and Human Behavior}, year = 2009, volume = 30, pages = {146--151} } @Manual{ rcore2008, title = {\textsf{R}: A Language and Environment for Statistical Computing}, author = {{R Development Core Team}}, organization = {R Foundation for Statistical Computing}, address = {Vienna, Austria}, year = 2008, note = {{ISBN} 3-900051-07-0}, url = {http://www.R-project.org} } @Book{Tutz, author = {Gerhard Tutz}, title = {Die Analyse kategorialer Daten}, year = {2000}, publisher = {Oldenbourg}, address = {Munich}, } multcomp/vignettes/generalsiminf.Rnw0000644000176200001440000014735214442074521017454 0ustar liggesusers%%\VignetteIndexEntry{Simultaneous Inference in General Parametric Models} %%VignetteDepends{multcomp,TH.data,survival,robustbase,lme4,coin} \documentclass[12pt,a4paper]{article} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{Sweave} \usepackage{a4wide} %%\usepackage[lists,heads]{endfloat} \input{header} \hypersetup{ pdftitle = {Simultaneous Inference in General Parametric Models}, pdfsubject = {Manuscript}, pdfauthor = {Torsten Hothorn and Frank Bretz and Peter Westfall}, colorlinks = {true}, linkcolor = {blue}, citecolor = {blue}, urlcolor = {red}, hyperindex = {true}, linktocpage = {true}, } \SweaveOpts{engine=R, eps=FALSE, keep.source = TRUE} \begin{document} \title{Simultaneous Inference \\ in General Parametric Models \footnote{This is a preprint of an article published in Biometrical Journal, Volume 50, Number 3, 346--363. Copyright \copyright{} 2008 WILEY-VCH Verlag GmbH \& Co. KGaA, Weinheim; available online \url{http://www.biometrical-journal.com}.}} \author{\textbf{Torsten Hothorn} \\ %EndAName Institut f{\"u}r Statistik \\ Ludwig-Maximilians-Universit{\"a}t M{\"u}nchen \\ Ludwigstra{\ss }e 33, D--80539 M{\"u}nchen, Germany\\ \and \textbf{Frank Bretz} \\ %EndAName Statistical Methodology, Clinical Information Sciences\\ Novartis Pharma AG \\ CH-4002 Basel, Switzerland \\ \and \textbf{Peter Westfall} \\ %EndAName Texas Tech University \\ Lubbock, TX 79409, U.S.A} \maketitle \begin{abstract} Simultaneous inference is a common problem in many areas of application. If multiple null hypotheses are tested simultaneously, the probability of rejecting erroneously at least one of them increases beyond the pre-specified significance level. Simultaneous inference procedures have to be used which adjust for multiplicity and thus control the overall type I error rate. In this paper we describe simultaneous inference procedures in general parametric models, where the experimental questions are specified through a linear combination of elemental model parameters. The framework described here is quite general and extends the canonical theory of multiple comparison procedures in ANOVA models to linear regression problems, generalized linear models, linear mixed effects models, the Cox model, robust linear models, etc. Several examples using a variety of different statistical models illustrate the breadth of the results. For the analyses we use the \RR{} add-on package \Rpackage{multcomp}, which provides a convenient interface to the general approach adopted here. \end{abstract} \thispagestyle{empty} \setcounter{page}{0} \textbf{Key words}: multiple tests, multiple comparisons, simultaneous confidence intervals, \newline adjusted $p$-values, multivariate normal distribution, robust statistics. <>= set.seed(290875) options(prompt = "R> ") options(SweaveHooks = list(mai2 = function() par(mai = par("mai") * c(1, 2, 1, 1)), mai3 = function() par(mai = par("mai") * c(1, 3, 1, 1)), mai4 = function() par(mai = par("mai") * c(1, 2.1, 1, 0.5)), cex = function() par(cex.lab = 1.3, cex.axis = 1.3))) library("multcomp") library("survival") library("sandwich") library("robustbase") library("TH.data") data("alpha", package = "coin") data("bodyfat", package = "TH.data") data("alzheimer", package = "coin") load(file.path(path.package(package = "TH.data"), "rda", "AML_Bullinger.rda")) @ <>= risk <- rep(0, nrow(clinical)) rlev <- levels(clinical[, "Cytogenetic.group"]) risk[clinical[, "Cytogenetic.group"] %in% rlev[c(7,8,4)]] <- "low" risk[clinical[, "Cytogenetic.group"] %in% rlev[c(5, 9)]] <- "intermediate" risk[clinical[, "Cytogenetic.group"] %in% rlev[-c(4,5, 7,8,9)]] <- "high" risk <- as.factor(risk) names(clinical)[6] <- "FLT3" library("lme4") data("trees513", package = "multcomp") @ \section{Introduction} Multiplicity is an intrinsic problem of any simultaneous inference. If each of $k$, say, null hypotheses is tested at nominal level $\alpha$, the overall type I error rate can be substantially larger than $\alpha$. That is, the probability of at least one erroneous rejection is larger than $% \alpha$ for $k \geq 2$. Common multiple comparison procedures adjust for multiplicity and thus ensure that the overall type I error remains below the pre-specified significance level $\alpha$. Examples of such multiple comparison procedures include Dunnett's many-to-one comparisons, Tukey's all-pairwise comparisons, sequential pairwise contrasts, comparisons with the average, changepoint analyses, dose-response contrasts, etc. These procedures are all well established for classical regression and ANOVA models allowing for covariates and/or factorial treatment structures with i.i.d.~normal errors and constant variance, see \cite{Bretzetal2008} and the references therein. For a general reading on multiple comparison procedures we refer to \cite{HochbergTamhane1987} and \cite{Hsu1996}. In this paper we aim at a unified description of simultaneous inference procedures in parametric models with generally correlated parameter estimates. Each individual null hypothesis is specified through a linear combination of elemental model parameters and we allow for $k$ of such null hypotheses to be tested simultaneously, regardless of the number of elemental model parameters $p$. The general framework described here extends the current canonical theory with respect to the following aspects: (i) model assumptions such as normality and homoscedasticity are relaxed, thus allowing for simultaneous inference in generalized linear models, mixed effects models, survival models, etc.; (ii) arbitrary linear functions of the elemental parameters are allowed, not just contrasts of means in AN(C)OVA models; (iii) computing the reference distribution is feasible for arbitrary designs, especially for unbalanced designs; and (iv) a unified implementation is provided which allows for a fast transition of the theoretical results to the desks of data analysts interested in simultaneous inferences for multiple hypotheses. Accordingly, the paper is organized as follows. Section~\ref{model} defines the general model and obtains the asymptotic or exact distribution of linear functions of elemental model parameters under rather weak conditions. In Section~\ref% {siminf} we describe the framework for simultaneous inference procedures in general parametric models. An overview about important applications of the methodology is given in Section~\ref{applications} followed by a short discussion of the software implementation in Section~\ref{implementation}. Most interesting from a practical point of view is Section~\ref% {illustrations} where we analyze four rather challenging problems with the tools developed in this paper. \section{Model and Parameters} \label{model} In this section we introduce the underlying model assumptions and derive some asymptotic results necessary in the subsequent sections. The results from this section form the basis for the simultaneous inference procedures described in Section~\ref{siminf}. Let $\M((\Z_1, \dots, \Z_n), \theta, \eta)$ denote a semi-parametric statistical model. The set of $n$ observations is described by $(\Z_1, \dots, \Z_n)$. The model contains fixed but unknown elemental parameters $\theta \in \R^p$ and other (random or nuisance) parameters $\eta$. We are primarily interested in the linear functions $\vartheta := \K \theta$ of the parameter vector $\theta$ as specified through the constant matrix $\K \in \R^{k, p}$. %%Assume that we are given an estimate $\hat{\theta}_n \in \R^p$ of the %%vector of elemental parameters $\theta$. In what follows we describe the underlying model assumptions, the limiting distribution of estimates of our parameters of interest $\vartheta$, as well as the corresponding test statistics for hypotheses about $\vartheta$ and their limiting joint distribution. Suppose $\hat{\theta}_n \in \R^p$ is an estimate of $\theta$ and $\Sraw \in \R^{p,p}$ is an estimate of $\cov(\hat{\theta}_n)$ with \begin{eqnarray} \label{cov} a_n \Sraw \cP \Sigmaraw \in \R^{p,p} \end{eqnarray} for some positive, nondecreasing sequence $a_n$. Furthermore, we assume that a multivariate central limit theorem holds, i.e., \begin{eqnarray} \label{clt} a_n^{1/2} (\hat{\theta}_n - \theta) \cL \N_p(0, \Sigmaraw). \end{eqnarray} If both (\ref{cov}) and (\ref{clt}) are fulfilled we write $\hat{\theta}_n \an \N_p(\theta, \Sraw)$. Then, by Theorem 3.3.A in \cite{Serfling1980}, the linear function $\hat{\vartheta}_n = \K \hat{\theta}_n$, i.e., an estimate of our parameters of interest, also follows an approximate multivariate normal distribution \begin{eqnarray*} \hat{\vartheta}_n = \K \hat{\theta}_n \an \N_k(\vartheta, \SK) \end{eqnarray*} with covariance matrix $\SK := \K \Sraw \K^\top$ for any fixed matrix $\K \in \R^{k,p}$. Thus we need not to distinguish between elemental parameters $\theta$ or derived parameters $\vartheta = \K \theta$ that are of interest to the researcher. %%for example the parameters $\K \theta$ representing %%all pairwise comparisons of elemental parameters. Instead we simply assume for the moment that we have (in analogy to (\ref{cov}) and (\ref{clt})) \begin{eqnarray} \label{assume} \hat{\vartheta}_n \an \N_k(\vartheta, \SK) \text{ with } a_n \SK \cP \SigmaK := \K \Sigma \K^\top \in \R^{k,k} \end{eqnarray} and that the $k$ parameters in $\vartheta$ are themselves the parameters of interest to the researcher. It is assumed that the diagonal elements of the covariance matrix are positive, i.e., $\SigmaK_{jj} > 0$ for $j = 1, \dots, k$. Then, the standardized estimator $\hat{\vartheta}_n$ is again asymptotically normally distributed \begin{eqnarray} \label{test} \T_n := %% \frac{\hat{\vartheta}_n - \vartheta}{\sqrt{\diag(\SK)}} = \D_n^{-1/2} (\hat{\vartheta}_n - \vartheta) \an \N_k(0, \Cor_n) \end{eqnarray} where $\D_n = \diag(\SK)$ is the diagonal matrix given by the diagonal elements of $\SK$ and \begin{eqnarray*} \Cor_n = \D_n^{-1/2} \SK \D_n^{-1/2} \in \R^{k,k} \end{eqnarray*} is the correlation matrix of the $k$-dimensional statistic $\T_n$. To demonstrate (\ref{test}), note that with (\ref{assume}) we have $a_n \SK \cP \SigmaK$ and $a_n \D_n \cP \diag(\SigmaK)$. Define the sequence $\tilde{a}_n$ needed to establish $\tilde{a}$-convergence in (\ref{test}) by $\tilde{a}_n \equiv 1$. Then we have \begin{eqnarray*} \tilde{a}_n \Cor_n & = & \D_n^{-1/2} \SK \D_n^{-1/2} \\ & = & (a_n \D_n)^{-1/2} (a_n \SK) (a_n \D_n)^{-1/2} \\ & \cP & \diag(\SigmaK)^{-1/2} \, \SigmaK \, \diag(\SigmaK)^{-1/2} =: \Cor \in \R^{k,k} \end{eqnarray*} where the convergence in probability to a constant follows from Slutzky's Theorem \citep[Theorem 1.5.4,][]{Serfling1980} and therefore (\ref{test}) holds. To finish note that \begin{eqnarray*} \T_n = \D_n^{-1/2} (\hat{\vartheta}_n - \vartheta) = (a_n \D_n)^{-1/2} a_n^{1/2} (\hat{\vartheta}_n - \vartheta) \cL \N_k(0, \Cor). \end{eqnarray*} For the purposes of multiple comparisons, we need convergence of multivariate probabilities calculated for the vector $\T_n$ when $\T_n$ is assumed normally distributed with $\Cor_n$ treated as if it were the true correlation matrix. However, such probabilities $\Prob(\max(|\T_n| \le t)$ are continuous functions of $\Cor_n$ (and a critical value $t$) which converge by $\Cor_n \cP \Cor$ as a consequence of Theorem 1.7 in \cite{Serfling1980}. In cases where $\T_n$ is assumed multivariate $t$ distributed with $\Cor_n$ treated as the estimated correlation matrix, we have similar convergence as the degrees of freedom approach infinity. Since we only assume that the parameter estimates are asymptotically normally distributed with a consistent estimate of the associated covariance matrix being available, our framework covers a large class of statistical models, including linear regression and ANOVA models, generalized linear models, linear mixed effects models, the Cox model, robust linear models, etc. Standard software packages can be used to fit such models and obtain the estimates $\hat{\theta}_n$ and $\Sraw$ which are essentially the only two quantities that are needed for what follows in Section~\ref{siminf}. It should be noted that the elemental parameters $\theta$ are not necessarily means or differences of means in AN(C)OVA models. Also, we do not restrict our attention to contrasts of such means, but allow for any set of constants leading to the linear functions $\vartheta = \K\theta $ of interest. Specific examples for $\K$ and $\theta $ will be given later in Sections~% \ref{applications} and \ref{illustrations}. \section{Global and Simultaneous Inference} \label{siminf} Based on the results from Section~\ref{model}, we now focus on the derivation of suitable inference procedures. We start considering the general linear hypothesis \citep{Searle1971} formulated in terms of our parameters of interest $\vartheta$ \begin{eqnarray*} H_0: \vartheta := \K \theta = \m. \end{eqnarray*} Under the conditions of $H_0$ it follows from Section~\ref{model} that \begin{eqnarray*} \T_n = \D_n^{-1/2} (\hat{\vartheta}_n - \m) \an \N_k(0, \Cor_n). \end{eqnarray*} This approximating distribution will now be used as the reference distribution when constructing the inference procedures. The global hypothesis $H_0$ can be tested using standard global tests, such as the $F$- or the $\chi^2$-test. An alternative approach is to use maximum tests, as explained in Subsection~% \ref{global}. Note that a small global $p$-value (obtained from one of these procedures) leading to a rejection of $H_0$ does not give further indication about the nature of the significant result. Therefore, one is often interested in the individual null hypotheses \begin{eqnarray*} H_0^j: \vartheta_j = \m_j. \end{eqnarray*} %%(Note that $H_0 = \bigcap_{j = 1}^k H_0^j$.) Testing the hypotheses set $% \{H_0^1, \ldots, H_0^k\}$ simultaneously thus requires the individual assessments while maintaining the familywise error rate, as discussed in Subsection~\ref{simtest} At this point it is worth considering two special cases. A stronger assumption than asymptotic normality of $\hat{\theta}_n$ in (\ref{clt}) is exact normality, i.e., $\hat{\theta}_n \sim \N_p(\theta, \Sigmaraw)$. If the covariance matrix $\Sigmaraw$ is known, it follows by standard arguments that $\T_n \sim \N_k(0, \Cor)$, when $\T_n$ is normalized using fixed, known variances. Otherwise, in the typical situation of linear models with normal i.i.d. errors, $\Sigmaraw = \sigma^2 \A$, where $\sigma^2$ is unknown but $\A$ is fixed and known, the exact distribution of $\T_n$ is a $k$% -dimensional multivariate $t_k(\nu, \Cor)$ distribution with $\nu$ degrees of freedom ($\nu = n - p - 1$ for linear models), see \cite{Tong1990}. \subsection{Global Inference} \label{global} %\paragraph{Global tests.} The $F$- and the $\chi^2$-test are classical approaches to assess the global null hypothesis $H_0$. Standard results \citep[such as Theorem 3.5,][]{Serfling1980} ensure that \begin{eqnarray*} X^2 & = & \T_n^\top \Cor_n^+ \T_n \cL \chi^2(\Rg(\Cor)) \quad \text{when } \hat{\theta}_n \an \N_p(\theta, \Sraw) \\ F & = & \frac{\T_n^\top \Cor^+ \T_n}{\Rg(\Cor)} \sim \F(\Rg(\Cor), \nu) \quad \text{% when } \hat{\theta}_n \sim \N_p(\theta, \sigma^2 \A), \end{eqnarray*} where $\Rg(\Cor)$ and $\nu$ are the corresponding degrees of freedom of the $\chi^2$ and $\F$ distribution, respectively. Furthermore, $\Rg(\Cor_n)^+$ denotes the Moore-Penrose inverse of the correlation matrix $\Rg(\Cor)$. Another suitable scalar test statistic for testing the global hypothesis $H_0 $ is to consider the maximum of the individual test statistics $T_{1,n}, \dots, T_{k,n}$ of the multivariate statistic $\T_n = (T_{1,n}, \dots, T_{k,n})$, leading to a max-$t$ type test statistic $\max(|\T_n|)$. The distribution of this statistic under the conditions of $H_0$ can be handled through the $k$-dimensional distribution \begin{eqnarray} \label{maxt} \Prob(\max(|\T_n|) \le t) \cong \int\limits_{-t}^t \cdots \int\limits_{-t}^t \varphi_k(x_1, \dots, x_k; \Cor, \nu) \, dx_1 \cdots dx_k =: g_\nu(\Cor, t) \end{eqnarray} for some $t \in \R$, where $\varphi_k$ is the density function of either the limiting $k$-dimensional multivariate normal (with $\nu = \infty$ and the `$% \approx$' operator) or the exact multivariate $t_k(\nu, \Cor)$-distribution (with $\nu < \infty$ and the `$=$' operator). Since $\Cor$ is usually unknown, we plug-in the consistent estimate $\Cor_n$ as discussed in Section~\ref{model}. The resulting global $p$-value (exact or approximate, depending on context) for $H_0$ is $1 - g_\nu(\Cor_n, \max|\tt|)$ when $\T = \tt$ has been observed. Efficient methods for approximating the above multivariate normal and $t$ integrals are described in \cite{Genz1992,GenzBretz1999,BretzGenzHothorn2001} and \cite% {GenzBretz2002}. %The procedures %are applicable to small and moderate problems with up to $k < 100$ hypotheses. In contrast to the global $F$- or $\chi^2$-test, the max-$t$ test based on the test statistic $\max(|\T_n|)$ also provides information, which of the $k$ individual null hypotheses $% H_0^j, j = 1, \dots, k$ is significant, as well as simultaneous confidence intervals, as shown in the next subsection. \subsection{Simultaneous Inference} \label{simtest} %\paragraph{Simultaneous tests.} We now consider testing the $k$ null hypotheses $H_0^1, \ldots, H_0^k$ individually and require that the familywise error rate, i.e., the probability of falsely rejecting at least one true null hypothesis, is bounded by the nominal significance level $\alpha \in (0, 1)$. In what follows we use adjusted $p$-values to describe the decision rules. Adjusted $% p$-values are defined as the smallest significance level for which one still rejects an individual hypothesis $H_0^j$, given a particular multiple test procedure. In the present context of single-step tests, the (at least asymptotic) adjusted $p$-value for the $j$th individual two-sided hypothesis $H_0^j: \vartheta_j = \m_j, j = 1, \dots, k, $ is given by \begin{eqnarray*} p_j = 1 - g_\nu(\Cor_n, |t_j|), \end{eqnarray*} where $t_1, \dots, t_k$ denote the observed test statistics. By construction, we can reject an individual null hypothesis $H_0^j$, $j= 1, \ldots, k$, whenever the associated adjusted $p$-value is less than or equal to the pre-specified significance level $\alpha$, i.e., $p_j \leq \alpha$. The adjusted $p$-values are calculated from expression~(\ref{maxt}). Similar results also hold for one-sided testing problems. The adjusted $p$-values for one-sided cases are defined analogously, using one-sided multidimensional integrals instead of the two-sided integrals (\ref{maxt}). Again, we refer to \cite{Genz1992,GenzBretz1999,BretzGenzHothorn2001} and \cite{GenzBretz2002} for the numerical details. %\paragraph{Simultaneous confidence intervals.} In addition to a simultaneous test procedure, a (at least approximate) simultaneous $(1 - 2\alpha) \times 100\%$ confidence interval for $\vartheta$ is given by \begin{eqnarray*} \hat{\vartheta}_n \pm q_\alpha \D_n^{1/2} \end{eqnarray*} where $q_\alpha$ is the $1 - \alpha$ quantile of the distribution (asymptotic, if necessary) of $\T_n$. This quantile can be calculated or approximated via (\ref{maxt}), i.e., $q_\alpha$ is chosen such that $g_\nu(\Cor_n, q_\alpha) = 1 - \alpha$. The corresponding one-sided versions are defined analogously. It should be noted that the simultaneous inference procedures described so far belong to the class of single-step procedures, since a common critical value $q_\alpha$ is used for the individual tests. Single-step procedures have the advantage that corresponding simultaneous confidence intervals are easily available, as previously noted. However, single-step procedures can always be improved by stepwise extensions based on the closed test procedure. That is, for a given family of null hypotheses $H_0^1, \dots, H_0^k$, an individual hypothesis $H_0^j$ is rejected only if all intersection hypotheses $H_J = \bigcap_{i \in J} H_0^i$ with $j \in J \subseteq \{1, \dots, k\}$ are rejected \citep{Marcusetal1976}. Such stepwise extensions can thus be applied to any of the methods discussed in this paper, see for example \cite{Westfall1997} and \cite{WestfallTobias2007}. %%In fact, the \Rpackage{multcomp} package %%introduced in Section~\ref{implementation} uses max-$t$ %%type statistics for each intersection hypothesis based on the %%methods from this paper, thus accounting for stochastic %%dependencies. Furthermore, the implementation of \Rpackage{multcomp} %%exploits logical constraints, leading to computationally %%efficient, yet powerful truncated closed test procedures, see %%\cite{Westfall1997} and \cite{WestfallTobias2007}. \section{Applications} \label{applications} The methodological framework described in Sections~\ref{model} and \ref% {siminf} is very general and thus applicable to a wide range of statistical models. Many estimation techniques, such as (restricted) maximum likelihood and M-estimation, provide at least asymptotically normal estimates of the elemental parameters together with consistent estimates of their covariance matrix. In this section we illustrate the generality of the methodology by reviewing some potential applications. Detailed numerical examples are discussed in Section~\ref{illustrations}. In what follows, we assume $\m = 0$ only for the sake of simplicity. The next paragraphs highlight a subjective selection of some special cases of practical importance. \paragraph{Multiple Linear Regression.} In standard regression models the observations $\Z_i$ of subject $i=1, \ldots, n$ consist of a response variable $Y_i$ and a vector of covariates $% \X_i = (X_{i1}, \dots, X_{iq})$, such that $\Z_i = (Y_i, \X_i)$ and $p = q + 1$. The response is modelled by a linear combination of the covariates with normal error $\varepsilon_i$ and constant variance $\sigma^2$, \begin{eqnarray*} Y_i = \beta_0 + \sum_{j = 1}^q \beta_j X_{ij} + \sigma \varepsilon_i, \end{eqnarray*} where $\varepsilon = (\varepsilon_1, \dots, \varepsilon_n)^\top \sim \N_n(0, \mathbf{I}_n).$ The elemental parameter vector is $\theta = (\beta_0, \beta_1, \dots, \beta_q)$, which is usually estimated by \begin{eqnarray*} \hat{\theta}_n = \left(\X^\top\X\right)^{-1} \X^\top \Y \sim \N% _{q+1}\left(\theta, \sigma^2 \left(\X^\top\X\right)^{-1}\right), \end{eqnarray*} where $\Y = (Y_1, \dots, Y_n)$ denotes the response vector and $\X = (1, (X_{ij}))_{ij}$ denotes the design matrix, $i = 1, \dots, n, j = 1, \dots, q$. Thus, for every matrix $\K \in \R^{k,q+1}$ of constants determining the experimental questions of interest we have \begin{eqnarray*} \hat{\vartheta}_n = \K \hat{\theta}_n \sim \N_k(\K \theta, \sigma^2 \K \left(\X^\top\X% \right)^{-1} \K^\top). \end{eqnarray*} Under the null hypothesis $\vartheta = 0$ the standardized test statistic follows a multivariate $t$ distribution \begin{eqnarray*} \T_n = \D_n^{-1/2} \hat{\vartheta}_n \sim t_{q+1}(n - q, \Cor), \end{eqnarray*} where $\D_n = \hat{\sigma}^2 \diag(\K \left(\X^\top\X \right)^{-1} \K^\top)$ is the diagonal matrix of the estimated variances of $\K \hat{\theta}$ and $\Cor$ is the correlation matrix as given in Section~\ref{siminf}. The body fat prediction example presented in Subsection \ref{bodyfat} illustrates the application of simultaneous inference procedures in the context of variable selection in linear regression models. \paragraph{One-way ANOVA.} Consider a one-way ANOVA model for a factor measured at $q$ levels with a continuous response \begin{eqnarray} \label{one-way} Y_{ij} = \mu + \gamma_{j} + \varepsilon_{ij} \end{eqnarray} and independent normal errors $\varepsilon_{ij} \sim \N_1(0, \sigma^2), j = 1, \dots, q, i = 1, \dots, n_j$. Note that the model description in (\ref% {one-way}) is overparameterized. A standard approach is to consider a suitable re-parametrization. The so-called "treatment contrast" vector $% \theta = (\mu, \gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \dots, \gamma_q - \gamma_1)$ is, for example, the default re-parametrization used as elemental parameters in the \RR-system for statistical computing \citep{rcore2007}. Many classical multiple comparison procedures can be embedded into this framework, including Dunnett's many-to-one comparisons and Tukey's all-pairwise comparisons. For Dunnett's procedure, the differences $% \gamma_j - \gamma_1$ are tested for all $j=2, \ldots, q$, where $\gamma_1$ denotes the mean treatment effect of a control group. In the notation from Section~\ref{model} we thus have \begin{eqnarray*} \K_\text{Dunnett} = (0, \diag(q)) \end{eqnarray*} resulting in the parameters of interest \begin{eqnarray*} \vartheta_\text{Dunnett} = \K_\text{Dunnett} \theta = (\gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \dots, \gamma_q - \gamma_1) \end{eqnarray*} of interest. For Tukey's procedure, the interest is in all-pairwise comparisons of the parameters $\gamma_1, \dots, \gamma_q$. For $q = 3$, for example, we have \begin{eqnarray*} \K_\text{Tukey} = \left( \begin{array}{rrr} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & -1% \end{array} \right) \end{eqnarray*} with parameters of interest \begin{eqnarray*} \vartheta_\text{Tukey} = \K_\text{Tukey} \theta = (\gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \gamma_2 - \gamma_3). \end{eqnarray*} Many further multiple comparison procedures have been investigated in the past, which all fit into this framework. We refer to \cite{BretzGenzHothorn2001} for a related comprehensive list. Note that under the standard ANOVA assumptions of i.i.d.~normal errors with constant variance the vector of test statistics $\T_n$ follows a multivariate $t$ distribution. Thus, related simultaneous tests and confidence intervals do not rely on asymptotics and can be computed analytically instead, as shown in Section~\ref{siminf}. To illustrate simultaneous inference procedures in one-way ANOVA models, we consider all pairwise comparisons of expression levels for various genetic conditions of alcoholism in Subsection~\ref{alpha}. \paragraph{Further parametric models.} In \emph{generalized linear models}, the exact distribution of the parameter estimates is usually unknown and thus the asymptotic normal distribution is the basis for all inference procedures. When we are interested in inference about model parameters corresponding to levels of a certain factor, the same multiple comparison procedures as sketched above are available. \emph{Linear and non-linear} mixed effects models fitted by restricted maximum-likelihood provide the data analyst with asymptotically normal estimates and a consistent covariance matrix as well so that all assumptions of our framework are met and one can set up simultaneous inference procedures for these models as well. The same is true for the \emph{Cox model} or other parametric survival models such as the \emph{Weibull model}. We use logistic regression models to estimated the probability of suffering from Alzheimer's disease in Subsection~\ref{alzheimer}, compare several risk factors for survival of leukemia patients by means of a Weibull model in Subsection~\ref{AML} and obtain probability estimates of deer browsing for various tree species from mixed models in Subsection~\ref{forest}. \paragraph{Robust simultaneous inference.} Yet another application is to use robust variants of the previously discussed statistical models. One possibility is to consider the use of sandwich estimators $\Sraw$ for the covariance matrix $\cov(\hat{\theta}_n)$ when, for example, the variance homogeneity assumption is violated. An alternative is to apply robust estimation techniques in linear models, for example S-, M- or MM-estimation \citep[see][for example]{RousseeuwLeroy2003, mfluc:Stefanski+Boos:2002, Yohai1987}, which again provide us with asymptotically normal estimates. The reader is referred to Subsection~\ref{bodyfat} for some numerical examples illustrating these ideas. \section{Implementation} \label{implementation} The \Rpackage{multcomp} package \citep{pkg:multcomp} in \RR{} \citep{rcore2007} provides a general implementation of the framework for simultaneous inference in semi-parametric models described in Sections~\ref{model} and~\ref{siminf}. The numerical examples in Section~\ref{illustrations} will all be analyzed using the \Rpackage{multcomp} package. In this section we briefly introduce the user-interface and refer the reader to the online documentation of the package for the technical details. Estimated model coefficients $\hat{\theta}_n$ and their estimated covariance matrix $% \Sraw$ are accessible in \RR{} via \Rcmd{coef()} and \Rcmd{vcov()} methods available for most statistical models in \RR, such as objects of class \Rclass{lm}, \Rclass{glm}, \Rclass{coxph}, \Rclass{nlme}, \Rclass{mer} or % \Rclass{survreg}. Having this information at hand, the \Rcmd{glht()} function sets up the \underline{g}eneral \underline{l}inear \underline{h}ypo\underline{t}% hesis for a model `\Robject{model}' and a representation of the matrix $\K$ (via its \Robject{linfct} argument): \begin{Sinput} glht(model, linfct, alternative = c("two.sided", "less", "greater"), rhs = 0, ...) \end{Sinput} The two remaining arguments \Rarg{alternative} and \Rarg{rhs} define the direction of the alternative (see Section~\ref{siminf}) and $\m$, respectively. The matrix $\K$ can be described in three different ways: \begin{itemize} \item by a matrix with \Rcmd{length(coef(model))} columns, or \item by an expression or character vector giving a symbolic description of the linear functions of interest, or \item by an object of class \Rclass{mcp} (for \underline{m}ultiple \underline{c}omparison \underline{p}rocedure). \end{itemize} The last alternative is convenient when contrasts of factor levels are to be compared and the model contrasts used to define the design matrix of the model have to be taken into account. The \Rcmd{mcp()} function takes the name of the factor to be tested as an argument as well as a character defining the type of comparisons as its value. For example, \Rcmd{mcp(treat = "Tukey")} sets up a matrix $\K$ for Tukey's all-pairwise comparisons among the levels of the factor \Robject{treat}, which has to appear on right hand side of the model formula of \Robject{model}. In this particular case, we need to assume that \Rcmd{model.frame()} and \Rcmd{model.matrix()} methods for \Robject{model} are available as well. The \Rcmd{mcp()} function must be used with care when defining parameters of interest in two-way ANOVA or ANCOVA models. Here, the definition of treatment differences (such as Tukey's all-pair comparisons or Dunnett's comparison with a control) might be problem-specific. For example, in an ANCOVA model (here without intercept term) \begin{eqnarray*} Y_{ij} = \gamma_j + \beta_j X_i + \varepsilon_{ij}; \quad j = 1, \dots, q, i = 1, \dots, n_j \end{eqnarray*} the parameters of interest might be $\gamma_j - \gamma_1 + \beta_j x - \beta_1 x$ for some value $x$ of the continuous covariate $X$ rather than the comparisons with a control $\gamma_j - \gamma_1$ that would be computed by \Rcmd{mcp()} with \Rcmd{"Dunnett"} option. The same problem occurs when interaction terms are present in a two-way ANOVA model, where the hypotheses might depend on the sample sizes. Because it is impossible to determine the parameters of interest automatically in this case, \Rcmd{mcp()} in \Rpackage{multcomp} will by default generate comparisons for the main effects $\gamma_j$ only, ignoring covariates and interactions. Since version 1.1-2, one can specify to average over interaction terms and covariates using arguments \verb|interaction_average = TRUE| and \verb|covariate_average = TRUE| respectively, whereas versions older than 1.0-0 automatically averaged over interaction terms. We suggest to the users, however, that they write out, manually, the set of contrasts they want. One should do this whenever there is doubt about what the default contrasts measure, which typically happens in models with higher order interaction terms. We refer to \cite{Hsu1996}, Chapter~7, and \cite{Searle1971}, Chapter~7.3, for further discussions and examples on this issue. Objects of class \Rclass{glht} returned by \Rcmd{glht()} include % \Rcmd{coef()} and \Rcmd{vcov()} methods to compute $\hat{\vartheta}_n$ and $% \SK$. Furthermore, a \Rcmd{summary()} method is available to perform different tests (max $t$, $\chi^2$ and $F$-tests) and $p$-value adjustments, including those taking logical constraints into account \citep{Shaffer1986, Westfall1997}. In addition, the \Rcmd{confint()} method applied to objects of class \Rclass{glht} returns simultaneous confidence intervals and allows for a graphical representation of the results. The numerical accuracy of adjusted $p$-values and simultaneous confidence intervals implemented in % \Rpackage{multcomp} is continuously checked against results reported by \cite% {Westfall1999}. \section{Illustrations} \label{illustrations} \subsection{Genetic Components of Alcoholism} \label{alpha} Various studies have linked alcohol dependence phenotypes to chromosome 4. One candidate gene is \textit{NACP} (non-amyloid component of plaques), coding for alpha synuclein. \cite{Boenscheta2005} found longer alleles of \textit{NACP}-REP1 in alcohol-dependent patients compared with healthy controls and report that the allele lengths show some association with levels of expressed alpha synuclein mRNA in alcohol-dependent subjects (see Figure~\ref{alpha-box}). Allele length is measured as a sum score built from additive dinucleotide repeat length and categorized into three groups: short ($0-4$, $n = 24$), intermediate ($5-9$, $n = 58$), and long ($10-12$, $n = 15$). The data are available from package \Rpackage{coin}. Here, we are interested in comparing the distribution of the expression level of alpha synuclein mRNA in three groups of subjects defined by the allele length. \setkeys{Gin}{width=0.6\textwidth} \begin{figure}[t] \begin{center} <>= n <- table(alpha$alength) boxplot(elevel ~ alength, data = alpha, ylab = "Expression Level", xlab = "NACP-REP1 Allele Length", varwidth = TRUE) axis(3, at = 1:3, labels = paste("n = ", n)) rankif <- function(data) trafo(data, numeric_trafo = rank) @ \caption{\Robject{alpha} data: Distribution of levels of expressed alpha synuclein mRNA in three groups defined by the \textit{NACP}-REP1 allele lengths. \label{alpha-box}} \end{center} \end{figure} Thus, we fit a simple one-way ANOVA model to the data and define $\K$ such that $\K \theta$ contains all three group differences (Tukey's all-pairwise comparisons): <>= data("alpha", package = "coin") amod <- aov(elevel ~ alength, data = alpha) amod_glht <- glht(amod, linfct = mcp(alength = "Tukey")) amod_glht$linfct @ The \Robject{amod\_glht} object now contains information about the estimated linear function $\hat{\vartheta}_n$ and their covariance matrix $\SK$ which can be inspected via the \Rcmd{coef()} and \Rcmd{vcov()} methods: <>= coef(amod_glht) vcov(amod_glht) @ The \Rcmd{summary()} and \Rcmd{confint()} methods can be used to compute a summary statistic including adjusted $p$-values and simultaneous confidence intervals, respectively: <>= confint(amod_glht) summary(amod_glht) @ Because of the variance heterogeneity that can be observed in Figure~\ref{alpha-box}, one might be concerned with the validity of the above results stating that there is no difference between any combination of the three allele lengths. A sandwich estimator $\Sraw$ might be more appropriate in this situation, and the \Rarg{vcov} argument can be used to specify a function to compute some alternative covariance estimator $\Sraw$ as follows: <>= amod_glht_sw <- glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich) summary(amod_glht_sw) @ We used the \Rcmd{sandwich()} function from package \Rpackage{sandwich} \citep{Zeileis2004, Zeileis2006} which provides us with a heteroscedasticity-consistent estimator of the covariance matrix. This result is more in line with previously published findings for this study obtained from non-parametric test procedures such as the Kruskal-Wallis test. A comparison of the simultaneous confidence intervals calculated based on the ordinary and sandwich estimator is given in Figure~\ref{alpha-ci}. \setkeys{Gin}{width=0.95\textwidth} \begin{figure}[h] \begin{center} <>= layout(matrix(1:2, ncol = 2)) ci1 <- confint(glht(amod, linfct = mcp(alength = "Tukey"))) ci2 <- confint(glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich)) plot(ci1, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (ordinary ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) plot(ci2, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (sandwich ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) @ \caption{\Robject{alpha} data: Simultaneous confidence intervals based on the ordinary covariance matrix (left) and a sandwich estimator (right). \label{alpha-ci}} \end{center} \end{figure} %%<>= %%dev.off() %%@ \subsection{Prediction of Total Body Fat} \label{bodyfat} \citet{garcia2005} report on the development of predictive regression equations for body fat content by means of $p = 9$ common anthropometric measurements which were obtained for $n = 71$ healthy German women. In addition, the women's body composition was measured by Dual Energy X-Ray Absorptiometry (DXA). This reference method is very accurate in measuring body fat but finds little applicability in practical environments, mainly because of high costs and the methodological efforts needed. Therefore, a simple regression equation for predicting DXA measurements of body fat is of special interest for the practitioner. Backward-elimination was applied to select important variables from the available anthropometrical measurements and \citet{garcia2005} report a final linear model utilizing hip circumference, knee breadth and a compound covariate which is defined as the sum of log chin skinfold, log triceps skinfold and log subscapular skinfold. Here, we fit the saturated model to the data and use the max-$t$ test over all $t$-statistics to select important variables based on adjusted $p$-values. The linear model including all covariates and the classical unadjusted $p$-values are given by <>= data("bodyfat", package = "TH.data") summary(lmod <- lm(DEXfat ~ ., data = bodyfat)) @ The marix of linear functions $\K$ is basically the identity matrix, except for the intercept which is omitted. Once the matrix $\K$ has been defined, it can be used to set up the general linear hypotheses: <>= K <- cbind(0, diag(length(coef(lmod)) - 1)) rownames(K) <- names(coef(lmod))[-1] lmod_glht <- glht(lmod, linfct = K) @ Classically, one would perform an $F$-test to check if any of the regression coefficients is non-zero: <>= summary(lmod_glht, test = Ftest()) @ but the source of the deviation from the global null hypothesis can only be inspected by the corresponding max-$t$ test, i.e., via <>= summary(lmod_glht) @ Only two covariates, waist and hip circumference, seem to be important and caused the rejection of $H_0$. Alternatively, an MM-estimator \citep{Yohai1987} as implemented by \Rcmd{lmrob()} from package \Rpackage{lmrob} \citep{pkg:robustbase} can be used to fit a robust version of the above linear model, the results coincide rather nicely (note that the control arguments to \Rcmd{lmrob()} were changed in \Rpackage{multcomp} version 1.2-6 and thus the results have slightly changed): <>= summary(glht(lmrob(DEXfat ~ ., data = bodyfat, control = lmrob.control(setting = "KS2011")), linfct = K)) @ and the result reported above holds under very mild model assumptions. \subsection{Smoking and Alzheimer's Disease} \label{alzheimer} <>= total <- nrow(alzheimer) stopifnot(total == 538) male <- sum(alzheimer$gender == "Male") stopifnot(male == 200) female <- sum(alzheimer$gender == "Female") stopifnot(female == 338) disease <- table(alzheimer$disease) smoked <- sum(alzheimer$smoking != "None") atab <- xtabs(~ smoking + + disease + gender, data = alzheimer) ### there is a discrepancy between Table 1 (32% smokers of 117 women ### suffering from other diagnoses) and Table 4 (63% non-smokers). ### We used the data as given in Table 4. @ \cite{SalibHillier1997} report results of a case-control study on Alzheimer's disease and smoking behavior of $\Sexpr{disease["Alzheimer"]}$ female and male Alzheimer patients and $\Sexpr{disease[names(disease) != "Alzheimer"]}$ controls. The \Robject{alzheimer} data %% shown in Table~\ref{alzheimertab} have been re-constructed from Table~4 in \cite{SalibHillier1997}. %% and are depicted in Figure~\ref{alz-plot}. The authors conclude that `cigarette smoking is less frequent in men with Alzheimer's disease.' Originally, one was interested to assess whether there is any association between smoking and Alzheimer's (or other dementia) diseases. Here, we focus on how a potential association can be described \citep[see][for a non-parametric approach]{Hothorn:2006:AmStat}. First, we fit a logistic regression model including both main effects and an interaction effect of smoking and gender. The response is a binary variable giving the diagnosis of the patient (either suffering from Alzheimer's disease or other dementias): <>= data("alzheimer", package = "coin") y <- factor(alzheimer$disease == "Alzheimer", labels = c("other", "Alzheimer")) gmod <- glm(y ~ smoking * gender, data = alzheimer, family = binomial()) summary(gmod) @ The negative regression coefficient for heavy smoking males indicates that Alzheimer's disease might be less frequent in this group, but the model is still difficult to interpret based on the coefficients and corresponding $p$-values only. Therefore, confidence intervals on the probability scale for the different `risk groups' are interesting and can be computed as follows. For each combination of gender and smoking behavior, the probability of suffering from Alzheimer's disease can be estimated by computing the logit function of the linear predictor from model \Robject{gmod}. Using the \Rcmd{predict()} method for generalized linear models is a convenient way to compute these probability estimates. Alternatively, we can set up $\K$ such that $\left(1 + \exp(- \hat{\vartheta}_n)\right)^{-1}$ is the vector of estimated probabilities with simultaneous confidence intervals \begin{eqnarray*} \left(\left(1 + \exp\left(- \left(\hat{\vartheta}_n - q_\alpha \D_n^{1/2}\right)\right)\right)^{-1}, \left(1 + \exp\left(- \left(\hat{\vartheta}_n + q_\alpha \D_n^{1/2}\right)\right)\right)^{-1}\right). \end{eqnarray*} <>= a <- cbind(levels(alzheimer$smoking), "Female") b <- cbind(levels(alzheimer$smoking), "Male") d <- rbind(a, b) smk <- factor(d[,1], levels = levels(alzheimer$smoking)) gen <- factor(d[,2], levels = levels(alzheimer$gender)) d <- data.frame(smk, gen) ### colnames(d) <- c("smoking", "gender") colnames(d) <- c("s", "g") rownames(d) <- paste(d[,1], d[,2], sep = ":") K <- model.matrix(~ s * g, data = d) colnames(K)[1] <- "(Icpt)" attr(K, "assign") <- NULL attr(K, "contrasts") <- NULL @ For our model, $\K$ is given by the following matrix (essentially the design matrix of \Robject{gmod} for eight persons with different smoking behavior from both genders) \small <>= K @ \normalsize and can easily be used to compute the confidence intervals described above <>= gmod_ci <- confint(glht(gmod, linfct = K)) gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) plot(gmod_ci, xlab = "Probability of Developing Alzheimer", xlim = c(0, 1)) @ The simultaneous confidence intervals are depicted in Figure~\ref{alzheimer-plot}. Using this representation of the results, it is obvious that Alzheimer's disease is less frequent in heavy smoking men compared to all other configurations of the two covariates. \setkeys{Gin}{width=0.8\textwidth} \begin{figure}[h] \begin{center} <>= par(mai = par("mai") * c(1, 1.5, 1, 1)) gmod_ci <- confint(glht(gmod, linfct = K)) gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) plot(gmod_ci, xlab = "Probability of Developing Alzheimer", xlim = c(0, 1), main = "", ylim = c(0.5, 8.5)) @ \caption{\Robject{alzheimer} data: Simultaneous confidence intervals for the probability to suffer from Alzheimer's disease. \label{alzheimer-plot}} \end{center} \end{figure} \subsection{Acute Myeloid Leukemia Survival} \label{AML} The treatment of patients suffering from acute myeloid leukemia (AML) is determined by a tumor classification scheme taking the status of various cytogenetic aberrations into account. \cite{Bullingeretal2004} investigate an extended tumor classification scheme incorporating molecular subgroups of the disease obtained by gene expression profiling. The analyses reported here are based on clinical data only (thus omitting available gene expression data) published online at \url{http://www.ncbi.nlm.nih.gov/geo}, accession number GSE425. The overall survival time and censoring indicator as well as the clinical variables age, sex, lactic dehydrogenase level (LDH), white blood cell count (WBC), and treatment group are taken from Supplementary Table 1 in \cite{Bullingeretal2004}. In addition, this table provides two molecular markers, the fms-like tyrosine kinase 3 (FLT3) and the mixed-lineage leukemia (MLL) gene, as well as cytogenetic information helpful to define a risk score (`low': karyotype t(8;21), t(15;17) and inv(16); `intermediate': normal karyotype and t(9;11); and `high': all other forms). One interesting question might be the usefulness of this risk score. Here, we fit a Weibull survival model to the data including all above mentioned covariates. %% The published paper has: %% as well %% as their interactions with the patient's gender. %% but this is not what the code does (probably a copy and paste error) %% spotted by David Winsemius Tukey's all-pairwise comparisons highlight that there seems to be a difference between `high' scores and both `low' and `intermediate' ones but the latter two aren't distinguishable: <>= smod <- survreg(Surv(time, event) ~ Sex + Age + WBC + LDH + FLT3 + risk, data = clinical) summary(glht(smod, linfct = mcp(risk = "Tukey"))) @ Again, a sandwich estimator of the covariance matrix $\Sraw$ can be plugged-in but the results stay very much the same in this case. %%<>= %%dev.off() %%@ \subsection{Forest Regeneration} \label{forest} In most parts of Germany, the natural or artificial regeneration of forests is difficult due to a high browsing intensity. Young trees suffer from browsing damage, mostly by roe and red deer. In order to estimate the browsing intensity for several tree species, the Bavarian State Ministry of Agriculture and Forestry conducts a survey every three years. Based on the estimated percentage of damaged trees, suggestions for the implementation or modification of deer management plans are made. The survey takes place in all $756$ game management districts (`Hegegemeinschaften') in Bavaria. Here, we focus on the 2006 data of the game management district number 513 `Unterer Aischgrund' (located in Frankonia between Erlangen and H\"ochstadt). The data of \Sexpr{nrow(trees513)} trees include the species and a binary variable indicating whether or not the tree suffers from damage caused by deer browsing. We fit a mixed logistic regression model \citep[using package \Rpackage{lme4},][]{Rnews:Bates:2005,pkg:lme4} without intercept and with random effects accounting for the spatial variation of the trees. For each plot nested within a set of five plots orientated on a 100m transect (the location of the transect is determined by a pre-defined equally spaced lattice of the area under test), a random intercept is included in the model. We are interested in probability estimates and confidence intervals for each tree species. Each of the six fixed parameters of the model corresponds to one species, therefore, $\K = \text{diag}(6)$ is the linear function we are interested in: <>= trees513 <- subset(trees513, !species %in% c("fir", "softwood (other)")) trees513$species <- trees513$species[,drop = TRUE] @ <>= mmod <- glmer(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/data/0000755000176200001440000000000014172227611013026 5ustar liggesusersmultcomp/data/mtept.rda0000644000176200001440000000140314172227611014645 0ustar liggesusers‹Ý—Ûn1†½ÇdWBBªx DfœÓ}¹G\õ6””›´Ai€·/l‚Çÿ¿CÂ4’ëñáóx?{õóíôw}¡ e_„²ºþCé†Ò<·ß!T7§ÆP¿êýx¥xýetÀínûs»{¢·ÉÀ©·¾=üø–âÉ§Ýæ~ûeïoÆýnól\^ías܆èe(vWêp¾;çY§¸Jµ9¯RÍ}<׿·Ô.¯´ë+|Aã-±<·¼Ó¼UTz+ÆZ㞥r}eï­p±­Ù¤u٠﫦bkÔn-ï™×᳨/äµ3<ÍóŸ"Õ%õµ©ž¸~žÏm?§Kå7I9nhOuªßÑ>3¿ÖiþôÊ~¬ÏîI =z÷qÿû.¾”×ÎÆ>Þ ¯ÃçÎÐs6ŸÏïß¾ÏvO-s|×xœûZ♩Üúv–œ¯ ã»Êk³ÛsþÝOéÆü{Ø^èóm>ã:Œß‰Šú½ƒ&Œ÷Áü{X¸ñÊÕ—ÞÃ&yëRÜ|Ÿù±)µ'4¯Mí)1Û‘'ÏÇþmÍi*¶¯†úNã=õóží}ìÃx?¼_ãz—ÏêŽæY驿ý·®0ßPž)õ´.?“õÕaüœÞGë>Ÿ6[ûù4aÝñ°Ý·OÇÔQ~œåHr¤9ŠW­~‡ñïpÿusܼ8 9\Þî°ÿõžsïÓ@a™Š¹kË3ËgK‹$ïLæ9Ê„fB33331ÏÄ<‹L,2±ÈÄ2ËL¬2±ÊÄ*ëL¬¨ffç×9ÌO?„À˜` LE`X66¶¶¶¶¶¶¶¶¶%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % % % % % % % % % % % % % % % % % % % %J"”D(‰P¡$BI„’%J"”ij’Ó/hâë¶multcomp/data/detergent.rda0000644000176200001440000000070714172227611015503 0ustar liggesusers‹Í”ÏRÂ0Æ“ŠtF‡߃‘$üU¤ ¾€'nN…âÁ NéèQŸÅ§ô„¦’ýj£ =ÊÌf¿lvó#™mn¦3áÏ|ƘÜŠ]-+Ž8cºöõE”FÉ}´JsOu@g¸ÇÚ‹]R)sJš[Ò*%­ZÎ öâè9Š7Z5LFåcW$¦$®­­ªó8ÜÐNÜdyËpž®­¶ÖMÒ Ð?÷´Õ´™JÿÿçeÇw>͉}w'·­\Š\Ê\ª\¶sÙÉe7—½\ö¬hÄÙïþÏ g'Ù…çìû\iüÈøa1þú‘µ÷}>˜üA±~o>ñÚÅ:{ýWÝØäV>ÅGVjMšÆ ÞêUjòö}¤I^2iÅJñ`‹‡Š˜¶i­ôË&Z( ^D¡‚^ô&z<Ø‹—zðR‚Òs¼(^DñT}ÛÙý›> AìÂvfgvç7;:oøØˆ‰†6¢-!#ñÕhØÿ2¢FÌ—{f¦kµÊ¢aDöK—/Û}9¸½cwgxgd—fôÿg š•K•™ª¯ul{ÙJiÅVJØÖ¦ˆJ‚´ŒÏ”«:"O–Çkóþ;[þLÊ7¢|bÝoˆ{ 6âÔwtôÐ÷µ*­­øÊ+êcéÝ•ãåV‡>_ë^%z/7ü :>)ÑøFÜ[xHE﹃ ‚eþþÀÓ®åM¢g>Å»@ô".äiû æ¯Ëå *½”KJçÙž=½¼éï¤ÌûûOqœœÌfè Ñæf¾1T¾}Î+»ÎþâÞ_Pñ²ïXÒ·>ð}퓼¿÷5óÄ'¾g^ñ‹J–”=÷SÕåçUPüÂæå:¥{˜(¬êº]æQÊ_5ä ûçQxËû 7™ŸSõqT|OÙ‹_»äòTže§|_ºÂõë-óùÂÇŽ“=#ò åUžB½-pþÙnöë:Òeηÿ,çK·Õûªs¥GÒ}¿+GÝ ÒØ)mewëà9;x>°þËßÈÞh:ŸfûšÝ«Ïn Ý«Y]ݳYüfõúçº7ã5±»u ¾?tOÙgðo,©lrÝbð:í“2¡¤´·*½½Î/í1¥kL푳³.Ž>—¨ãêóÚÞQ75CÏ¤Š§ãt¨u²î|¢Îתöʮۦb´)¬ÎÖ8§sí ¶ƒ¹òl%ØR¢óÕŠn K•é©s5µÚ;U©ÖjÓ³ðÎ]œ“ ^ü2v¶•øD¹Vî™\ôllq~©§=¨›XZ+¦V„V¬`£ 9Zqµ’ÑJ¯n†é´44š€fAC#M;Ð\hh`˜`˜`˜`˜`˜`˜`˜`˜`˜`˜`0 †C€!À`0ø8 Û`Ø`Ø`Ø`Ø>lÀ°Á°Á°ÁpÀpÀpÀpÀpÀpÀpÀpÀpÀpÀpÁpÁpÁpÁp-ƒ?«¶~«ÊË€0 multcomp/data/cml.rda0000644000176200001440000001130014172227611014264 0ustar liggesusers‹Ý\wœUÅž³X"IL,AdU–&H“}ï- €Y ±&ÆDSŒlp5& º¬`b[šÀ²"[XšÀ‚,e•*Eˆ’˜Þ{OHï½ÇÄä;;ßÜ}LæÞû`~ùåùeîéçÌ™yÃ^7áÆL÷»cJLÉKÅ”tÃå %øG§ºM™6ÿžË“_Ž7Ïóõñ„’c„nE „N:J8ù(á%t…B÷ã/-^Fx¹§æÁ+Š€W%œö_€Ó=8ãáÌÿxÕQB<8+=Î.zýAéq€sç¾Èp^ ô&”#ô!ô#ôσó0èE‚ ƒó`H % óàBÀˆ" ¼È²EBPu p‘ל4µzfõÔÆVæ‹øTÊÝEÆ]dÝEÎ]T¸‹‘îb”»í.Á’òÑUyt•‰®²ÑU.ºªˆ®FFW£¢«ÑÑUÄ#ñÈD<2LÄ#ñÈD<2LÄ#ñÈD<²lÄ#ñÈF<²lÄ#ñÈF<²lÄ#ñÈEij›w/1ùv éÇÇ·Ï+޾ï_ßf>Ž‹½òiÆIò/“ÿ,cIvòã®{J Ṗ열ZóóÔ·—Ÿ¡Ž[Aú1àû=.ö ɽ´ÕfÈŽIùoI6MóeœÏâ|áÇRRÞ‡ìçû ¤»ï×8:!¿¥åƒ![…â#c¡| Å{Èæq<’òÍ·GRúüâæ”´÷m—d¯¸\ŽšâjœÿŒcµE(ù—±]ŽÑ®à„ÚšÚò¼ëLÞuÖ~ÓÍ}“ÞIø^ UØ€d±Õ8äõ8Y3Ä3D'í›P”†hÄEg’üqr§Ù.î›4}’쑤cšlIº%Ù#.N ‰—$$ÑJ¢{,1–dË4'á4Û¤ÅKZ'Ås’œi6Hóg±ú§Ñٹغ‘–gI~-Ô¾q²“¯ÅÄ’- ‰4\¬o’lg—BêCšIt“üú>-¾’|[HÎê×Br¤¿ñþˆNBßuî2¹½ ݶJïŒë®èÖˆþ^0 Û—»wøc÷Ût#D÷+Ý¿¾ÒØ=¼×»w©¿ Œâs·¯çöéõ¹î©^ ¸ÔØ}ÖRÒÓÍ”Á[ÆgŒÝCT9&^ÍwWó½>ïÃqãÝ{Ÿdì¾åpc÷‘O£üº§éôåxý¾åèI™ñýPÊ«éE;•ñùÊâìx6í)ß»K¾ÉûBÒN.ÏÆS/}ßòô¥Ÿ’׎íIš½iï~ôëDÓ•ëî÷½s)Ç Óõ›@ÖtÅI%iŽ1]±áü0Ž6AT£ë­.æ&qÌ Ê2š¶8¸”6I=ÕðÞåNoÓ§Ñ×Cˆ/§mzSÖshŸ Ú°œ¶ÒñÊ1Š6Çq=h‡‘|§±u¯'ðù0Ú¦ÜtÕ$å_Æûq´÷XÚ¸”¶êK»)ÿkódëA{¸ßZú“Nmä~ŸÉÑþg™®\¼‚ßœaºbz }Ö—t'ò;ǧ7õFڽȳ¿Ïš®zXN=Êé§ åkºâ¯_Þ½Ú¼'måêT†÷¥¤¯÷ƒùìBÞ»xI?^F9FÓ†ªÃ¹´ëpÊ›£­G“îÒ»”cÜo_®®Ž£ÎçÑ>9ÓU“\L•Ò'™®˜»œô]Þ•Óýé£×›ß.vÐJyºyÆÅ޾O:—Ð7דÖx>Nýèk÷½‹W£Jóx Í yžkŽ<ç’¶³ázG$®7õwdBýQRŸÚ5ñù–$ððwüÒz\Ià]bÌì4ùôü]®Ð{ŸhG5ÔÓÇñMòKÜnï›Po’)ÄÏ—8Û…ôðiøþ Ù6ô.ä·¤8òõÈ–”q¶ õåqúù¾MZ+„ü—d›´Ý̤|ñÇûïâÞûcâb>i—6MÏ/’rÅÏý8{†bÅÏBs²Ðœ ÙÅëËžoÛ¤Úg—¸X‹‹Ã,qqŠïPì'ÑLÊÁPžÅÕŸ8ÝBõ ;ÆÙ%.Bz…âЗ#.¶B5'¾ðy…hø¶•˜_ŽØ+ˆŽ¸°iÐ݄ʚ˜ë£4Zþû¤û¤o y^ˆ>þû¤û$þ¡q&pzWŒ|/&Äéš$C¡ò3®Xšq6M£S¨^…Èã÷¿IÒ+ô¼Ðgi69¶Hz_ˆLÅÚ®žÅØ¢˜÷>mÿ:t’'MFcÂ2Ä}—D'Mÿbèå?+”Oïãù}1|ŽÆ.iöг]h¼ÿÍÑÈQ,œ ô|åîot¬Üð-‹´[üì×,Þû ‹w}Ôâu÷Xüä-^Pgñ3OYÜØbq[w‹ç ²øé ‹[þjñòïÛiqÃB‹añÖÏqÜT‹W¼ÌâšJ‹ßC<÷§wœ`q3é<1Úâö‘|>ÉâVŽ»å0åù‡Åk8~)ùÍj³x[Îâ‡kqù® ¾õ7Z¼Œ|©×úÏX\7™v¢^+ÿÈñK->ÄqퟢÝ6ðžök¤Ö_nñS½-þÀ7-~öI‹7Ò>{ª,Þw¥ÅÏP®ý-~¼—ų)Ûé|^Fýèß ûxoHŸ~\v=íòwÞS¿6êÓü%ÞÁâGi÷Õô{õyö“Ï¡ÿžþŠÅÏÝnñò·Y|pél±x/ýÙñ‹—’ßÎ h·±?ö`ÜΡ^Ó©gån"Ýzú§Ž÷ózZ¼™öÛXoñŠZ¼€r¯¬´¸åQ‹gS¿µCiŽ[ÍûÛ,~¤ÎâÅ/!Ý×q<ãg!ß¯ï ½§-¾ò7ñý²s,^Eÿ?À|Z‰Å»ú“>ãwÛ}”Ÿ÷í«Žä¿|žêgqÇn‹wßÄ{•[?(ÏÖ3.¦ý8®–zÏ!Ÿú…GÊÑÀç‘^=Ç7SÞÙ“-^ýN~wÈâ5´Ã>_Ziñ\Úµñ—¤Ãxz‹!?ÊÙÂ|o¤Þ­¤»ð•ßE{.gXÖ@y[ìâgãå&Ê3øÔ§™ù³f#åsuÐÕ¥'¨7Ÿ×17ýÞâU·å~O¾ï¥|môÿê¿’yº“vÞ2ãæPnÆE õXM;·\eñò_Jù—3®[h‡Í·ò=ó~)ãûÍÆâûÍ‘vXú·–ôäófÖã…‡,^@yï»Óâ%´ÇâÉüŽ~YÈqk)¿óO ùÖ“žË³Fb—§Õ¼_À:¸Œõ¿‰ò,&ŸGHg>ór í^Ǽn¦ß ½ÖÑ~m¬«/7TRNæk=é¬bÝwõnÇ­æ<úõ~˜üV8ÌxýømŠTîb]ß6¿wõ–zN)£žÌ‹–çÈ—õs[Æâ}'[¼ç2‹?Ïâ§g;·sÜ ÜdñzÆ_Û ob|5‘ßs§Z¼wŠÅ³™¯­”¯…ñÝþg‹›)oýÜÎ:ØÈ¸^ØÆïWŸàxÒ[FzK[¼ˆù·ˆþnb¿³qíâ¥y²ÅVZ<‹ñ}ëT#é=D¹fÑ.w2^–Ò®ó¯§<÷º:çæ æK#ç©%|?‡t—SÏ™¤Ó@yf/b½œKù›o¡>”ÿfC½h‡wð»Æ«Ëã™Ô{f™Åó(Ç­”Ûõ/÷ñ~>õœÍü¼ŸßÕó~å]À|™C{oæ|½‚õx7ëØSìî'ý ç[¼qÙ~é¹|áóí³xãbçµo¤¾»KI~ÞÃù¬‰ùÖD?`+åkaïŸeñôóêïòc5ëüVÖù]ߦ}.¶x;ýäÖ+‰7±Oróš[ﬢ>{(ϽÔãÐä:{ØÞßSgñ:ö[ÞE:Ôk'ûߥŒ›ûI¿•q¿ÆPnƧ[_=Êïv2v\A=H/óg>åèà|±öè`Ÿràofuïg§6ÊÇypí²óŸp¹Õ÷À{¿Ÿq´‡þÛÎ<<À>f ãv7×G»Z\˺¼ñ5—õb#ãÂÕ×·²¸…ñàæù |¿’ñ°‘ë껀òØôÆüL¿5P¿Gé_×­%ÿíÏ’>í¾™õcûp×læ¼Ûʾd1ç¡VÖvÖƒù”gñ^[üÿ¹xGÕ´j÷?OæÃ“¦TßQ[]ûSjkª«j§át›Q}»¬º­Ú «¹}Æ»o«™~÷ŽÊŒÚªÚ»g÷ÿnŸVí1?¥fú¬áNwTAÛ]¢ê6ÂmµãÝ€Ù€motiü]Œ?Ñtþ²!XÒÈ|\$‚±¢[ú' ôÈ™¶%jßÀ$¢¿lœ€9%FP!.P[Z˜~DK­šíõ€É€g¿Áó3S]A™´:÷ˆša(z´ä€¶”:-}ð7ÓùŸˆ: J†,ì|ð'ê®?×è4ìŽä¨ 4ܵ4ë²YõÑrrã‘–2ð³  Kü™-_Ç»3 %˜bå^BI°ì,©ÓœhÈhÛ¥)ªåI—rÚf@£a§-œ–-µ?üß   L½¼¬@FQ@®Î£-˜reBP"é( ‡@A)ØC®È¥øVt;éaÒZ´UÒªôhNºù,@í„é[°¤—6¦xQûê¡e¹ i£µìwx‡–Wz0õÊ[è}é/ˆQ{ê1TÝÐã5îh¦;†£Ó|d´\kêé6„n ýËtþˆ&°—@6A\ÉC,kò ʯ NòŠÚíWÀð  È\ÓulM§‰÷è¬Û* œˆîÀ!!-þ_rA)è& ÕùgOôØ—ítGô´¤ßе [?| åàç€ç¹Á70€o¥L ƒ,`9",ãe5±+ëÛXê òN4¦@O¾oìÑ#mÝÑO-³ºÆÓu´êù#ŒÃ{AÞrX¶T.y;@Ëà^`Ä­@vÏ䯽ÒVE§UøØèt†1º]ƒHPd0í‚ nʦ¨¯ÿbìÏ :]»£¸:EM¨~°• ®ÈûÈáÎ?û¢EOË©NaÚ^ê±+=6¦­âÅh)žÐ’¦5J×®:­ ž–]ľŒ¶6º=  ìetŠA¬ ~Ð:¢òa $hS2J@ÚHý-VÿÒ€ öq!h<KA<ËrÀãäµ`øV+òM€Ò×?ç£Û¨:Uëô¤åùnÞ÷šð‹ >ôÄœ|€Z"¨‡¢ùàmit™¨GîÜZîµNèru%@§QÍO«ü‡‚ñ‚z-°µ`–Ôkyy+¨¹[‰úN[Cmôˆ›n;bŒÑ˜Cüê¥ ŒÖ]]èv¦Nqz”ñbt9¤[G¨ïF[{A´‚š©“A0NP§õL³‚¸”ï“‚X4ŸF-¯`KƒùÂüÏ“¢m¶þy#m?t rÀìhLê­²ëq+ØWq£ýAÿðƒ`9"¨A ZA<rZ4÷Ôç:è ªõðóÀÚèÒGóMë jhíÕ\Ó¼EœÈo´N«?Qc:bê²5Óhû¬q¡ó&æ AÞ âMT•SNªµmÓÚúó,S³ïÆ“,(ÓÌÃ^‚«ËšˆÛ±sè5\¿ /‡`xrݧp BLƒÏƒ_ZmfhR?Äv¥~]÷‚z3¼‚r®­Øq±”Ÿ&Ԟʧc—·‚ ÿm)—ãk`ƒ·"·ºøDÞuÊ*°¡þÞ!îû BTÏ4û£ã8èùÈæ Äý.Ñ|I…˜ÙÌæõÙmÀýºZÖñSÑ5y~£NÅ TÖ+näÍAø­¢Š=±Ø²Åx‚/4h[®ä»ØýùL_4°ç,û¢ªsyój¼’SZä¾NZÏ/;îÄ6ñ¥Û<ÄOÛù}¾½ ï™& jíñª™Ì’“ñ¡;`èNóÇÉÞ&`sÚýO‰l±R½|ê–cYÅ&ƒÉŠÎ­±J_iÔÚÌ“ô{cVÏ%ÖVlá ¨ˆ A€D’¬ bãX$‚Ä!Q$RE/ÉÒ?Þ}O½¦˜Î8R˜¡XÇ—¯&5û›ÈÑñ°ä#³»Éòü´Ué6BH!ûŒ-&Ò>"!ò‰]¯;Sµ'Ó} Ï.y"Îì:ÿÉù×AÄA$_gÕæd꣥Üg¸]¹{ ¢A—«ªÖGnù´Ñ^W}ÛY:Ûà ºõ<õÙ.îü^¼»˜ùuX“úýiPsù 7Ï7A—7ò3Ÿ“{¾úgã5ú`øhÒŽwµnÞLϯ‡×æ½wY®4þ\Dú¢{½Øw¶Ñ ù¤k?¡`îK"¾õˆ/="†’aɰbX3lyf&Z`¢&Z¨-A+дÁ¡àPp(8 ‡‚CÁ¡àPpÁApÁApG Géî÷=ë–Umultcomp/data/fattyacid.rda0000644000176200001440000000074614172227611015475 0ustar liggesusers‹µT;LA]îã%©­±¡ð ²1ñW"•ä¢Q m¬©µkjjmµ¦6ñÂ5+qw·ÏÄBt“ٙݛy3óv÷’ kÖšÅ3˜a…˜a ³ÏSHÈ Ç.•öíôæcæ¨rdæÐëBÂ=JÒ÷ƒ˜(Æ?HèwòåpÂÙÌn&[Ö1*wÍÄâ¤oNùæ´oÎøæ¬oÎðûÓY»xÔ±Ó¥\AXïB†åUàmG ­½JÝŠç/¸}¹,§Æ¹{2V[uOø³XE_®x[®Æjü)ž—ž¼c)ƒ?Ý.W#·¼#çå*oÉ9r¨ã=–ü†ó˜R‰ŽÞD5làœß+ØÜæ©gZ·¨¾Îg¼Îƒ¼øÞº–ãF¯‘×­«Â¹;©o«²#¾?é¦nùýP\ƒxÒu–U!üðÑü‰—Sƒ7ˆôó@ü#xèKç! ܦ¢gþšGà6dÛÑW‹~‘_óFüà|°ð€{u ^çGýÀx½#ýL<Ñ=àñ |ð…¾½À÷ù qßèÜ‚ÏcÛÞÊày´i$a-ͦ…Ü^ Aò'j‹©ÛíV>Ínà­YvÉŽ9BïíýØ¢d³multcomp/data/sbp.rda0000644000176200001440000000107014172227611014300 0ustar liggesusers‹Í”[kAÅ7I-4 x¼àµ¦ÉÜ’à][?€O}]ÛM_ÒT’ >T•*RAEÅ¢ "êƒúåªgÍ™Câ!¿“Ù™ÿof3Ù‹Ó³¦<[N’¤˜7€âX—˜¥Þ¥Ë¸nÉ#>ëÑÎüþï)üߌ<¶ñvv%k÷6rõyïØbÚÎâˆV6ø62oÝ\;íÅi*ÖJçúK]¤5‚U°‚·àø–Á+ðœýOÀ}Ð7ÀMpäõú—ó¯‘7¬±Êñ×ÁWöýOÁkð ¼?¸–Ïàûßq ˬ×z<´†®-Ÿ›|!Ñ}|ïY;_×KîóxĽÝ‡žÍAp L³ ΃#là Ûã`/ïU9oØ òc¿ÖÜ&§Án°“ÎÃàÛÜ{Ží48ʶÉõäíIÖždý)ú¶Ós8ÖÛ ,¨sþ°\àNñ~•û9öqÜ®kô˜uÒÅ,³;DzÎ|ÖM†ÿøƒ˜.ü}N'ºKW+ÃEfx£P‹ÁÄ`cp1øB õ14еªRMÉ(Y%§ä•‚R]©¡$‡‘ÃÈaä0r9ŒF#‡‘ÃÈaå°rX9¬V+‡•ÃÊaå°r89œN'‡“ÃÉáäpr89œ^/‡—ÃËáåðrx9¼^/G#Èär9‚AŽ G#4'¹ô+}É–çÓ~Ziuq¦“Á‹ví7Eµ¨Ômultcomp/data/adevent.rda0000644000176200001440000000123514172227611015145 0ustar liggesusers‹íœKNÃ0@—ò©„„ĉ jþK\€K"(lJ‹J-Gá¤OœÄ vgÔˆAkB?EDi´Zçqpaâòòïô§Aü;};ÑA~ÕW‘PÑŠUt¤¢c¨èTEgQÔ¹êïC؇P@xá!„GCxá)„M@6ÙdM@6ÙdMÄÙº“ñës¢©“ñû^ÜØùÊÁ?äÃl6»M™ŸÞ}8 ÷&ò”ß9b_ß’^’GETmultcomp/data/waste.rda0000644000176200001440000000074514172227611014647 0ustar liggesusers‹­“=LÂ@ǯ-˜ØDC¢¤HÑ„88Ää &:¸À"KEI@ItvqqÖUgg\pvqaqÑUô®½{©èÀà%wýÝõÞÿÿ^ïšÝÈQ=§BT¢úب1ô©lP Œ²§¿c5[6!Ú›°·Ú{NÀp]²+ÃõÉTìC»Òd*|Õ·WÞݬUj#U»XnWë+T¬¦TPäÖ’UhÕŒúžŠeƒ•ùD÷‹þÏûxºê—ÈÐ/k´÷¦NzxÙÃ)WK“ZVKÆyµÊÇÞïÎò<çíÂl{¿s»ËÚ#˜m¾ðÑ›$o0u›y=1nÁàcæ Ìg7~VćôtýòI‡àæõäQo ¦ÅþÐ ó·é˜q–³0÷Ùc;!²ãBÔ Oƒecý £ßüƒ«9sóÔõ‹tÝ|cBgá¥Ä, è‰#4x)ö­ªýëZµìj]°Ÿ}ÎrCNÄ/òçÇÕ‹VËZ*5˜à€Éh£ÖYò"D‘«ÈSUä‘*ò<•”„ «Ö$¬ Pq¤EJ"-#¥VV‘ÖЃ¢EŠ=(zPô èAу¢Ed\\Òþ7·w¡x¹multcomp/data/trees513.rda0000644000176200001440000002240214172227611015071 0ustar liggesusers‹íÝçŸWzÝñ±´e¯%ç¸Î’Ã.êÜç&ç ç,§u”!i‘ €´–sŽrÎ9çþ>ÙSç‡Úªîê¹gWìQÓ]uŸêºUßêé9ýá·}ëõæß¼¸¸¸}qûÞGuùÑâÛýçÖÅÅg?óÑ¿÷Ÿ=yôèižÒÅÅå7=ò£¿áââÍïûÊ:·WjëñåsËõ–ÏÝ:°|kåñå8·Vzì}þØs§Ž·u<öÖuÇØ»Ý©ã_gî_×18tNmW[çÚȾÛµuOYoíØÛï”}×ë;V×½_ŸÒ÷uÎãÖ}þÔûÿ)÷í¯ç:v ¿J[÷Œsûæ¹n¦öÞû_U¯Wq¯Þ{ï=åw§ë¾gØ{Ì^×y¾ö¾óuŸ¯c¼³7777µ?×ý=àkeÿ_Åø×½7î¥_ Ÿs|R¯íPÝ^ùwk̵ßS¯[Ë}Ýzlk·æïØ{ù×ýž}ôÚùzûâØ¹öIõ™ŸW5Ïçz=ó{èx2lï{y>ÈÂSÛs_Þê÷I]CŸ¶:toØs¬·Ö[»_­õ;´Þ©çбý<ôØ)ï ½7ø¤ï¥[ÏíÝcÇý”sçÓR#çáÖõpì¹½ÇÿИ·7ž[[gOïc×ïžklïûÐëžß7±Íž×32ö«ãU¾¦SÇ:õÞ>àîK¹Ò{ï?úžGï?ýhé³_yöãG/¿÷ÑÓ‹·¿ôx±ÉÝ·Þøôj‹yœw¾õìñ“–¾ÉÔ{ÏÇ¿—øùþâ_>wõóýÅË寇:´¿w±¼u&ì­û×XŸuëÅþ¼Šñ¯^×Ösœû­uý¼|îreùêç«m/W»·øym›«ŸŸ¯{?ß½øê}»`_ï©CëìÙ~«®®+Îóòœ»zn9'WÝAÝÂz÷°|ñØUß½êq›å¹¹ìÁײ\¯y­–&qûCÛ«[ƒÛ’µœ£­â±¼µØ~Ï1^ëyoe¼»ÿr™×êÖõ±¶Î¡íö¬skG5O–ã»GlÝ'¶¶ßZ뺬åãÇî±|ìîÆ8[l½Þ«ó`ùØžógí±c?:wùÚ¶úÞÝïPÿËŶËý8tlö‡åÏ´ŒÎßÃãkÇüÔkøþÆã[çÞÖz‡Î3Þƒöž¯k¯aùø±{ÄÖº[Ûí]çÖâù+×ö{yo\;øšiçÚ¹Ê^ËuøþbˇcšÇSž;T‡z¯×éñªöçka¼O²–ïÕÖÖá=ñþÅWß'ï/–—÷’µ{+·¹w`ì»GÆÙÚÏåkÛZg­Çòü_ÿãdéÓŸ|÷[^ütùÎ{O^,Þùð½/]=üÙ§ßyöåÇßþÜ7?~öî£'ßòâñ»ßñèÑ[ï^¥Z?ü®ãçï~Ⴧ¾ÿè Þÿà ï¿÷Á<Ò»Ÿ¼ýòHÏwëòj·^GCœŸ¦ú¤âÚ?êÔ›ÿ§¹îœkw~pÿiªSÞ ~Úkë§çúêÚzw®¯®Ïœkw½y®ÝõƒÎµ»~ð¹v×7œkwýsí®z®ÝõÙsí®v®ÝõçÚ]ßt®ÝõÃϵ»~Ĺv×<×îúQçÚ]?ú\»ëÇœkwýØsí®w®Ýõãϵ»~¹v×O<×îúIçÚ]Ÿ;×îúÉçÚ]?å\»ë§žkwý´sí­—¯Ï{þwû[ÓÕ‚®ÒÕB½Zè/nOæ¥i^JóRÌKy^ªóÒ<Šæm¥yiEóš·Hsß4o›æ-ÒÜ7Í}Ó<¾©?7P7õaÌMý²þÓêg ÔϨo¨Ÿ5P?{ ~Î@ýÜúü@=¨i 4Pi b Ê@ÕjÕêç Ô/¨_4P¿x ~É@ýÒúeõËê[êW Ô¯¨_5P¿z ~Í@ýÚúuõê7Ôo¨ß¨/ Ôãúp þÐ@=¨§õl ¾{ ¾g ¾Äw®ž„«'áêI¸z®„4½´,,',–1Œ¼èµ9:qzyÀ2Fôøz®ž„«'ÅKëc&\= WOÂÕ“põ$\= S›0µ S›0µ S›¶mضaÛ†m¶Åi‘pZ$œ §EÂi˜ÏÀ|æ30Ÿi×Xà \@k,pf=0ëYLo`Žs˜£Àæ(0GQ°mÁ¶Ûl[°-æ70¿ù Ìo`~s˜£Àæ(0G—nÆ¥›qéf\ºù¶ÅüfÌoÆüfÌoÆüfÌoÆüfÌoÆüfÌoÆüfÌoÆüfÌoÆUíÃ|é£|éƒ|éc|éC|é#|é|éã{éÃ{ùñÑ=þ–çkÌÏÜýÒÃ=}±ú«Õß~øÁÃï|ôâ§7ž~øè­÷ž¯ô•ßøìÙ{o]={çÃ÷?[ ú™'¿üy üñ×ež?qè»KW/ãÖÕk¿uõU­éê‹AG¾ß¤y)ÍK1/ù›Nów…ð§ù»GøöÓÜãÈ÷ æš{hîoIÍ=Ž|_jîqä›Ss#ß¡š{ù6ÕÜãÈ÷ªæ§|ÃêÅÒÜ#Ï=òÜ#Ï=òÜ#Ï=ÊÜ£Ì=ÊÜ£Ì=ÊÜ£Ì=ÊÜ£Ì=ÊÜ£Ì=êÜ£Î=êÜ£Î=êÜ£Î=êÜ£Î=êÜ£Î=ÚÜ£Í=ÚÜ£Í=ÚÜ£Í=ÚÜ£Í=ÚÜ£Í=úÜ£Ï=úÜ£Ï=úÜ£Ï=úÜ£Ï=úÜ£_õ¸œ<ðâäEÿZñ y1¼èwúŠ«›Ýmr·ÉÝ&w›Ümr·ÉÝ&w›Ümr·ÉÝänr7¹›ÜMî&w“»ÉÝänr·änÉÝ’»%wKî–Ü-¹[r·änÉÝÂÝÂÝÂÝÂÝÂÝÂÝÂÝÂÝÂÝÂݲ»ewËî–Ý-»[v·ìnÙݲ»ew+îVÜ­¸[q·ânÅÝŠ»w+îVÜ­º[u·ênÕݪ»Uw«îVÝ­º[u·ænÍÝš»5wkîÖÜ­¹[s·ænÍݺ»uwëîÖÝ­»[w·înÝݺ»ÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙ’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’dK’-I¶$Ù’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„- [¶$lIØ’°%aK–„-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-ɶ$Û’lK²-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-)¶¤Ø’bKŠ-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-©¶¤Ú’jKª-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-i¶¤Ù’fKš-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKº-鶤ےnKúlÉéÁŒÉóå ËÂrÂr`9c¹`¹b¹a}'ôÐwBß }'ôÐwBß }'ôÐWè+ôú }…¾B_¡¯ÐWè+ôMè›Ð7¡oBß„¾ }ú&ôMè›Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7£oFߌ¾}3úfôÍè›Ñ7£oFß‚¾} úô-è[з oAß‚¾}+úVô­è[Ñ·¢oEߊ¾}+úVômèÛз¡oC߆¾ }ú6ômèÛз£oGߎ¾};úvôíèÛÑ·£/¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á« ^Mðj‚W¼šàÕ¯&x5Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á+Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«¯¼Jð*Á«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼ xð*àUÀ«€W¯^¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼Êð*ë ¯2¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼*ðªÀ«¯ ¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼ªðªÂ« ¯*¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼jðªÁ«¯¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯:¼êðªÃ«¯oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv!ß.äÛ…|»oòíB¾]È· ùv}œo_ýŸZ¿ùöÃg?ÿΓ‡<ºøøl}ñýÿ:íJS)/multcomp/NAMESPACE0000644000176200001440000000361714402340314013333 0ustar liggesusers importFrom(sandwich, estfun, meat, bread, sandwich) import(mvtnorm) import(survival) import(TH.data) importFrom(codetools, walkCode, makeCodeWalker) importFrom("graphics", "abline", "axis", "box", "boxplot", "legend", "mosaicplot", "plot", "points", "segments", "title") importFrom("stats", "aggregate", "as.formula", "coef", "confint", "cov2cor", "delete.response", "df.residual", "fitted", "formula", "get_all_vars", "model.frame", "model.matrix", "model.weights", "p.adjust", "p.adjust.methods", "pchisq", "pf", "pnorm", "predict", "printCoefmat", "pt", "terms", "vcov", "xtabs", "na.exclude") export(glht, contrMat, univariate, adjusted, Ftest, Chisqtest, mcp, modelparm, adjusted_calpha, univariate_calpha, parm, cftest, cld, mmm, mlf) S3method("summary", "glht") S3method("confint", "glht") S3method("print", "glht") S3method("coef", "glht") S3method("vcov", "glht") S3method("print", "confint.glht") S3method("plot", "confint.glht") S3method("plot", "glht") S3method("print", "contrMat") S3method("print", "summary.glht") S3method("print", "summary.gtest") S3method("print", "cld") S3method("glht", "matrix") S3method("glht", "character") S3method("glht", "expression") S3method("glht", "mcp") S3method("glht", "mlf") S3method("glht", "means") S3method("coef", "parm") S3method("vcov", "parm") S3method("cld", "summary.glht") S3method("cld", "confint.glht") S3method("cld", "glht") S3method("plot", "cld") S3method("coef", "mmm") S3method("vcov", "mmm") S3method("bread", "mmm") S3method("estfun", "mmm") S3method("modelparm", "aovlist") S3method("modelparm", "coxme") S3method("modelparm", "coxph.penal") S3method("modelparm", "default") S3method("modelparm", "fixest") S3method("modelparm", "glmmTMB") S3method("modelparm", "lme") S3method("modelparm", "mer") S3method("modelparm", "merMod") S3method("modelparm", "polr") S3method("modelparm", "survreg") multcomp/inst/0000755000176200001440000000000015075167045013101 5ustar liggesusersmultcomp/inst/deprecated/0000755000176200001440000000000014172227607015177 5ustar liggesusersmultcomp/inst/deprecated/deprecated.R0000644000176200001440000001302314172227607017421 0ustar liggesusers simint <- function(object, ...) UseMethod("simint") simtest <- function(object, ...) UseMethod("simtest") csimint <- function(estpar, df, covm, cmatrix=NULL, ctype="user-defined", conf.level=0.95, alternative=c("two.sided","less","greater"), asympt=FALSE, eps=0.001, maxpts=1000000) { if (is.null(cmatrix)) cmatrix <- diag(length(estpar)) object <- list(object = NULL, linfct = cmatrix, coef = estpar, vcov = covm, type = ctype, alternative = match.arg(alternative), df = ifelse(is.null(df) || asympt, 0, df), rhs = rep(0, nrow(cmatrix))) class(object) <- "glht" .Deprecated("glht", package = "multcomp") confint(object, level = conf.level, abseps = eps, maxpts = maxpts) } simint.default <- function(object, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott"), cmatrix = NULL, conf.level = 0.95, alternative = c("two.sided","less","greater"), eps = 0.001, maxpts = 1e+06, whichf = NULL) { if (!is.null(cmatrix)) { K <- cmatrix if (is.list(K)) class(K) <- "mcp" if (is.matrix(K) && length(whichf) == 1) { K <- list(K) names(K) <- whichf[1] class(K) <- "mcp" } } else { K <- list(match.arg(type)) names(K) <- whichf class(K) <- "mcp" } tglht <- glht(object, linfct = K, alternative = match.arg(alternative)) .Deprecated("glht", package = "multcomp") confint(tglht, level = conf.level, abseps = eps, maxpts = maxpts) } simint.formula <- function(formula, data=list(), subset, na.action, ...) { cl <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action"), names(cl), 0) cl <- cl[c(1, m)] cl[[1]] <- as.name("lm") object <- eval(cl, parent.frame()) addargs <- list(...) whichf <- addargs$whichf if (is.null(whichf)) { mm <- model.frame(object) whichf <- names(mm)[sapply(mm, class) == "factor"] } addargs$whichf <- whichf addargs$object <- object do.call("simint.default", addargs) } simint.lm <- function(object, psubset = NULL, ...) { beta <- coef(object) cmatrix <- list(...)$cmatrix if (!is.null(cmatrix)) return(simint.default(object, ...)) if (is.null(psubset)) return(simint.default(object, cmatrix = diag(length(beta)), ...)) psubset <- which(beta %in% beta[psubset]) simint.default(object, cmatrix = diag(length(beta))[psubset,]) } csimtest <- function(estpar, df, covm, cmatrix=NULL, ctype="user-defined", ttype=c("free","logical"), alternative=c("two.sided","less","greater"), asympt=FALSE, eps=0.001, maxpts=1000000) { if (is.null(cmatrix)) cmatrix <- diag(length(estpar)) object <- list(object = NULL, linfct = cmatrix, coef = estpar, vcov = covm, type = ctype, alternative = match.arg(alternative), df = ifelse(is.null(df) || asympt, 0, df), rhs = rep(0, nrow(cmatrix))) class(object) <- "glht" ttype <- match.arg(ttype) if (ttype == "free") distr <- adjusted("free") if (ttype == "logical") distr <- adjusted("Westfall") .Deprecated("glht", package = "multcomp") summary(object, distribution = distr, abseps = eps, maxpts = maxpts) } simtest.default <- function(object, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott"), ttype = c("free", "logical"), cmatrix = NULL, conf.level = 0.95, alternative = c("two.sided","less","greater"), eps = 0.001, maxpts = 1e+06, whichf = NULL) { if (!is.null(cmatrix)) { K <- cmatrix if (is.list(K)) class(K) <- "mcp" if (is.matrix(K) && length(whichf) == 1) { K <- list(K) names(K) <- whichf[1] class(K) <- "mcp" } } else { K <- list(match.arg(type)) names(K) <- whichf class(K) <- "mcp" } tglht <- glht(object, linfct = K, alternative = match.arg(alternative)) .Deprecated("glht", package = "multcomp") ttype <- match.arg(ttype) if (ttype == "free") distr <- adjusted("free") if (ttype == "logical") distr <- adjusted("Westfall") summary(tglht, distribution = distr, abseps = eps, maxpts = maxpts) } simtest.formula <- function(formula, data=list(), subset, na.action, ...) { cl <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action"), names(cl), 0) cl <- cl[c(1, m)] cl[[1]] <- as.name("lm") object <- eval(cl, parent.frame()) addargs <- list(...) whichf <- addargs$whichf if (is.null(whichf)) { mm <- model.frame(object) whichf <- names(mm)[sapply(mm, class) == "factor"] } addargs$whichf <- whichf addargs$object <- object do.call("simtest.default", addargs) } simtest.lm <- function(object, psubset = NULL, ...) { beta <- coef(object) cmatrix <- list(...)$cmatrix if (!is.null(cmatrix)) return(simtest.default(object, ...)) if (is.null(psubset)) return(simtest.default(object, cmatrix = diag(length(beta)), ...)) psubset <- which(beta %in% beta[psubset]) simtest.default(object, cmatrix = diag(length(beta))[psubset,]) } summary.summary.glht <- function(object, ...) print(object) summary.confint.glht <- function(object, ...) print(object) multcomp/inst/deprecated/multcomp-oldtests.R0000644000176200001440000001525114172227607021025 0ustar liggesusersattach(NULL, name = "CheckExEnv") assign(".CheckExEnv", as.environment(2), pos = length(search())) # base ## This plot.new() patch has no effect yet for persp(); ## layout() & filled.contour() are now ok assign("plot.new", function() { .Internal(plot.new()) pp <- par(c("mfg","mfcol","oma","mar")) if(all(pp$mfg[1:2] == c(1, pp$mfcol[2]))) { outer <- (oma4 <- pp$oma[4]) > 0; mar4 <- pp$mar[4] mtext(paste("help(",..nameEx,")"), side = 4, line = if(outer)max(1, oma4 - 1) else min(1, mar4 - 1), outer = outer, adj=1, cex= .8, col="orchid")} }, env = .CheckExEnv) assign("cleanEx", function(env = .GlobalEnv) { rm(list = ls(envir = env, all.names = TRUE), envir = env) RNGkind("Wichmann-Hill", "Kinderman-Ramage") set.seed(290875) # assign(".Random.seed", c(0,rep(7654,3)), pos=1) }, env = .CheckExEnv) assign("..nameEx", "__{must remake R-ex/*.R}__", env = .CheckExEnv) #-- for now assign("ptime", proc.time(), env = .CheckExEnv) postscript("multcomp-Examples.ps") assign("par.postscript", par(no.readonly = TRUE), env = .CheckExEnv) options(contrasts = c(unordered = "contr.treatment", ordered = "contr.poly")) library('multcomp') cleanEx(); ..nameEx <- "MultipleEndpoints" ###--- >>> `MultipleEndpoints' <<<----- Multiple Endpoints Data Set ## alias help(MultipleEndpoints) ##___ Examples ___: cleanEx(); ..nameEx <- "angina" ###--- >>> `angina' <<<----- Dose Response Data Set ## alias help(angina) ##___ Examples ___: load("angina.rda") # perform a dose-response analysis using simultaneous confidence # intervals for Willimas' contrasts summary(simint(response~dose, data=angina, alternative="greater", type="Williams")) # compute now adjusted p-values for McDermott's test on trend summary(simtest(response~dose, data=angina, type="McDermott", alternative="greater",ttype="logical")) ## Keywords: 'datasets'. cleanEx(); ..nameEx <- "cholesterol" ### * cholesterol ### Name: cholesterol ### Title: Cholesterol Reduction Data Set ### Aliases: cholesterol ### Keywords: datasets ### ** Examples data(cholesterol) # adjusted p-values for all-pairwise comparisons in a one-way layout # tests for restricted combinations simtest(response ~ trt, data=cholesterol, type="Tukey", ttype="logical") # adjusted p-values all-pairwise comparisons in a one-way layout # (tests for free combinations -> p-values will be larger) simtest(response ~ trt, data=cholesterol, type="Tukey", ttype="free") # the following lines illustrate the basic principles of # parameter estimation used in all functions in this package # and how the low-level functions can be used with raw parameter # estimates. # the full design matrix (with reduced rank!) x <- cbind(1, matrix(c(rep(c(rep(1,10), rep(0,50)), 4), rep(1, 10)), nrow = 50)) y <- cholesterol$response xpxi <- multcomp:::MPinv(t(x) %*% x)$MPinv rankx <- sum(diag((xpxi %*% (t(x) %*% x)))) n <- nrow(x) p <- ncol(x) df <- round(n-rankx) # parameter estimates and their correlation parm <- xpxi %*% t(x) %*% y mse <- t(y-x %*% parm) %*% (y-x %*% parm)/df covm <- mse[1,1]*xpxi # the contrast matrix contrast <- contrMat(table(cholesterol$trt), type="Tukey") # use the work-horse directly (and add zero column for the intercept) csimint(estpar=parm, df=df, covm=covm, cmatrix=cbind(0, contrast)) csimtest(estpar=parm, df=df, covm=covm, cmatrix=cbind(0, contrast), ttype="logical") cleanEx(); ..nameEx <- "contrMat" ## Keywords: 'datasets'. data(detergent) N <- rep(2, 5) # BIBD: prepare the contrast matrix = all-pair comparisons for # the 5 levels of detergent C <- contrMat(N, type="Tukey") # the additional 10 columns of are for the 10 blocks C <- cbind( matrix(0, ncol=10, nrow=10), C ) # numerate the contrasts colnames(C) <- NULL rownames(C) <- paste("C", 1:nrow(C), sep="") # adjusted p-values summary(simtest(plates ~ block+detergent, data=detergent, cmatrix = list(detergent = contrMat(table(detergent$detergent), type = "Tukey")))) # whichf="detergent", type="Tukey", ttype="logical")) # , cmatrix=C)) ## Keywords: 'datasets'. cleanEx(); ..nameEx <- "recovery" ###--- >>> `recovery' <<<----- Recovery Time Data Set ## alias help(recovery) ##___ Examples ___: data(recovery) # one-sided simultaneous confidence intervals for Dunnett # in the one-way layout simint(minutes~blanket, data=recovery, conf.level=0.9, alternative="less",eps=0.0001) # same results, but specifying the contrast matrix by hand C <- c(0, 0, 0, -1, -1, -1, 1, 0, 0, 0, 1, 0, 0, 0, 1) C <- matrix(C, ncol=5) # numerate the contrasts rownames(C) <- paste("C", 1:nrow(C), sep="") test <- simint(minutes~blanket, data=recovery, conf.level=0.9, alternative="less",eps=0.0001, cmatrix=C[,-1]) print(test) # same results, but more detailed information using the summary method summary(test) ## Keywords: 'datasets'. cleanEx(); ..nameEx <- "simint" ###--- >>> `simint' <<<----- Simultaneous Intervals ## alias help(simint) ## alias help(simint.default) ## alias help(simint.formula) ##___ Examples ___: data(recovery) # one-sided simultaneous confidence intervals for Dunnett # in the one-way layout summary(simint(minutes~blanket, data=recovery, type="Dunnett", conf.level=0.9, alternative="less",eps=0.0001)) ## Keywords: 'htest'. cleanEx(); ..nameEx <- "simtest" ###--- >>> `simtest' <<<----- Simultaneous comparisons ## alias help(simtest.default) ## alias help(simtest.formula) ## alias help(simtest) ##___ Examples ___: data(cholesterol) # adjusted p-values for all-pairwise comparisons in a onw-way # layout (tests for restricted combinations) simtest(response ~ trt, data=cholesterol, type="Tukey", ttype="logical") ## Keywords: 'htest'. cleanEx(); ..nameEx <- "tire" ###--- >>> `tire' <<<----- Tire Wear Data Set ## alias help(tire) ##___ Examples ___: #tire <- read.csv("tire.csv", header = TRUE) #C <- c(0,1,-1,0,10,-10) #for ( x in seq(15,70,5) ) { C <- rbind( C,c(0,1,-1,0,x,-x) ) } ## numerate the contrasts #rownames(C) <- paste("C", 1:nrow(C), sep="") # ## simultaneous confidence intervals of two regression functions #summary(simint(cost ~ make + mph + make:mph, data=tire, # cmatrix=C, eps=0.001, whichf = NULL)) ## Keywords: 'datasets'. cleanEx(); ..nameEx <- "waste" ###--- >>> `waste' <<<----- Industrial Waste Data Set ## alias help(waste) ##___ Examples ___: data(waste) summary(aov(waste ~ envir + temp + envir*temp, data=waste)) #summary(simint(waste ~ envir:temp, data=waste, # type="Tetrade", eps = 0.01)) ## Keywords: 'datasets'. cat("Time elapsed: ", proc.time() - get("ptime", env = .CheckExEnv),"\n") dev.off(); quit('no') multcomp/inst/deprecated/multcomp-oldtests.Rout.save0000644000176200001440000004253114172227607022513 0ustar liggesusers R version 2.6.0 (2007-10-03) Copyright (C) 2007 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > attach(NULL, name = "CheckExEnv") > assign(".CheckExEnv", as.environment(2), pos = length(search())) # base > ## This plot.new() patch has no effect yet for persp(); > ## layout() & filled.contour() are now ok > assign("plot.new", function() { .Internal(plot.new()) + pp <- par(c("mfg","mfcol","oma","mar")) + if(all(pp$mfg[1:2] == c(1, pp$mfcol[2]))) { + outer <- (oma4 <- pp$oma[4]) > 0; mar4 <- pp$mar[4] + mtext(paste("help(",..nameEx,")"), side = 4, + line = if(outer)max(1, oma4 - 1) else min(1, mar4 - 1), + outer = outer, adj=1, cex= .8, col="orchid")} }, + env = .CheckExEnv) > assign("cleanEx", function(env = .GlobalEnv) { + rm(list = ls(envir = env, all.names = TRUE), envir = env) + RNGkind("Wichmann-Hill", "Kinderman-Ramage") + set.seed(290875) + # assign(".Random.seed", c(0,rep(7654,3)), pos=1) + }, + env = .CheckExEnv) > assign("..nameEx", "__{must remake R-ex/*.R}__", env = .CheckExEnv) #-- for now > assign("ptime", proc.time(), env = .CheckExEnv) > postscript("multcomp-Examples.ps") > assign("par.postscript", par(no.readonly = TRUE), env = .CheckExEnv) > options(contrasts = c(unordered = "contr.treatment", ordered = "contr.poly")) > library('multcomp') Loading required package: mvtnorm > cleanEx(); ..nameEx <- "MultipleEndpoints" > ###--- >>> `MultipleEndpoints' <<<----- Multiple Endpoints Data Set > > ## alias help(MultipleEndpoints) > > ##___ Examples ___: > > cleanEx(); ..nameEx <- "angina" > ###--- >>> `angina' <<<----- Dose Response Data Set > > ## alias help(angina) > > ##___ Examples ___: > > load("angina.rda") > > # perform a dose-response analysis using simultaneous confidence > # intervals for Willimas' contrasts > summary(simint(response~dose, data=angina, alternative="greater", + type="Williams")) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Williams Contrasts Fit: lm(formula = response ~ dose, data = angina) Estimated Quantile = 1.978 Linear Hypotheses: Estimate lwr upr C 1 <= 0 10.4990 7.4351 Inf C 2 <= 0 7.7470 5.0936 Inf C 3 <= 0 6.2970 3.7953 Inf C 4 <= 0 5.2465 2.8243 Inf 95% family-wise confidence level Warning message: 'simint.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > # compute now adjusted p-values for McDermott's test on trend > summary(simtest(response~dose, data=angina, type="McDermott", + alternative="greater",ttype="logical")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: McDermott Contrasts Fit: lm(formula = response ~ dose, data = angina) Linear Hypotheses: Estimate Std. Error t value p value C 1 <= 0 2.095 1.549 1.353 0.3161 C 2 <= 0 2.349 1.341 1.751 0.1609 C 3 <= 0 3.164 1.265 2.502 0.0315 * C 4 <= 0 7.877 1.225 6.433 <1e-04 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > ## Keywords: 'datasets'. > > > cleanEx(); ..nameEx <- "cholesterol" > > ### * cholesterol > > ### Name: cholesterol > ### Title: Cholesterol Reduction Data Set > ### Aliases: cholesterol > ### Keywords: datasets > > ### ** Examples > > data(cholesterol) > > # adjusted p-values for all-pairwise comparisons in a one-way layout > # tests for restricted combinations > simtest(response ~ trt, data=cholesterol, type="Tukey", + ttype="logical") Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lm(formula = response ~ trt, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value 2times - 1time == 0 3.443 1.443 2.385 0.13816 4times - 1time == 0 6.593 1.443 4.568 < 0.001 *** drugD - 1time == 0 9.579 1.443 6.637 < 0.001 *** drugE - 1time == 0 15.166 1.443 10.507 < 0.001 *** 4times - 2times == 0 3.150 1.443 2.182 0.20503 drugD - 2times == 0 6.136 1.443 4.251 < 0.001 *** drugE - 2times == 0 11.723 1.443 8.122 < 0.001 *** drugD - 4times == 0 2.986 1.443 2.069 0.25124 drugE - 4times == 0 8.573 1.443 5.939 < 0.001 *** drugE - drugD == 0 5.586 1.443 3.870 0.00307 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > # adjusted p-values all-pairwise comparisons in a one-way layout > # (tests for free combinations -> p-values will be larger) > simtest(response ~ trt, data=cholesterol, type="Tukey", + ttype="free") Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lm(formula = response ~ trt, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value 2times - 1time == 0 3.443 1.443 2.385 0.13805 4times - 1time == 0 6.593 1.443 4.568 < 0.001 *** drugD - 1time == 0 9.579 1.443 6.637 < 0.001 *** drugE - 1time == 0 15.166 1.443 10.507 < 0.001 *** 4times - 2times == 0 3.150 1.443 2.182 0.20504 drugD - 2times == 0 6.136 1.443 4.251 < 0.001 *** drugE - 2times == 0 11.723 1.443 8.122 < 0.001 *** drugD - 4times == 0 2.986 1.443 2.069 0.25129 drugE - 4times == 0 8.573 1.443 5.939 < 0.001 *** drugE - drugD == 0 5.586 1.443 3.870 0.00313 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > # the following lines illustrate the basic principles of > # parameter estimation used in all functions in this package > # and how the low-level functions can be used with raw parameter > # estimates. > > # the full design matrix (with reduced rank!) > x <- cbind(1, + matrix(c(rep(c(rep(1,10), rep(0,50)), 4), + rep(1, 10)), nrow = 50)) > y <- cholesterol$response > > xpxi <- multcomp:::MPinv(t(x) %*% x)$MPinv > rankx <- sum(diag((xpxi %*% (t(x) %*% x)))) > n <- nrow(x) > p <- ncol(x) > df <- round(n-rankx) > > # parameter estimates and their correlation > parm <- xpxi %*% t(x) %*% y > mse <- t(y-x %*% parm) %*% (y-x %*% parm)/df > covm <- mse[1,1]*xpxi > > # the contrast matrix > contrast <- contrMat(table(cholesterol$trt), type="Tukey") > > # use the work-horse directly (and add zero column for the intercept) > > csimint(estpar=parm, df=df, covm=covm, cmatrix=cbind(0, contrast)) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: user-defined Contrasts Fit: NULL Estimated Quantile = 2.8416 Linear Hypotheses: Estimate lwr upr 2times - 1time == 0 3.4430 -0.6584 7.5444 4times - 1time == 0 6.5928 2.4914 10.6943 drugD - 1time == 0 9.5792 5.4778 13.6806 drugE - 1time == 0 15.1655 11.0641 19.2670 4times - 2times == 0 3.1498 -0.9516 7.2513 drugD - 2times == 0 6.1362 2.0348 10.2376 drugE - 2times == 0 11.7226 7.6211 15.8240 drugD - 4times == 0 2.9864 -1.1151 7.0878 drugE - 4times == 0 8.5727 4.4713 12.6742 drugE - drugD == 0 5.5864 1.4849 9.6878 95% family-wise confidence level Warning message: 'csimint' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > csimtest(estpar=parm, df=df, covm=covm, cmatrix=cbind(0, contrast), + ttype="logical") Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: user-defined Contrasts Fit: NULL Linear Hypotheses: Estimate Std. Error t value p value 2times - 1time == 0 3.443 1.443 2.385 0.138175 4times - 1time == 0 6.593 1.443 4.568 0.000342 *** drugD - 1time == 0 9.579 1.443 6.637 < 1e-04 *** drugE - 1time == 0 15.166 1.443 10.507 < 1e-04 *** 4times - 2times == 0 3.150 1.443 2.182 0.205041 drugD - 2times == 0 6.136 1.443 4.251 0.000977 *** drugE - 2times == 0 11.723 1.443 8.122 < 1e-04 *** drugD - 4times == 0 2.986 1.443 2.069 0.251301 drugE - 4times == 0 8.573 1.443 5.939 < 1e-04 *** drugE - drugD == 0 5.586 1.443 3.870 0.003060 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'csimtest' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > cleanEx(); ..nameEx <- "contrMat" > > ## Keywords: 'datasets'. > > > data(detergent) > > N <- rep(2, 5) > > # BIBD: prepare the contrast matrix = all-pair comparisons for > # the 5 levels of detergent > C <- contrMat(N, type="Tukey") > # the additional 10 columns of are for the 10 blocks > C <- cbind( matrix(0, ncol=10, nrow=10), C ) > # numerate the contrasts > colnames(C) <- NULL > rownames(C) <- paste("C", 1:nrow(C), sep="") > > # adjusted p-values > summary(simtest(plates ~ block+detergent, data=detergent, + cmatrix = list(detergent = contrMat(table(detergent$detergent), type = "Tukey")))) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: lm(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -2.1333 0.8679 -2.458 0.15020 C - A == 0 3.6000 0.8679 4.148 0.00586 ** D - A == 0 2.2000 0.8679 2.535 0.13155 E - A == 0 -4.3333 0.8679 -4.993 0.00111 ** C - B == 0 5.7333 0.8679 6.606 < 0.001 *** D - B == 0 4.3333 0.8679 4.993 0.00103 ** E - B == 0 -2.2000 0.8679 -2.535 0.13165 D - C == 0 -1.4000 0.8679 -1.613 0.51052 E - C == 0 -7.9333 0.8679 -9.140 < 0.001 *** E - D == 0 -6.5333 0.8679 -7.527 < 0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > # whichf="detergent", type="Tukey", ttype="logical")) # , cmatrix=C)) > > > ## Keywords: 'datasets'. > > > cleanEx(); ..nameEx <- "recovery" > ###--- >>> `recovery' <<<----- Recovery Time Data Set > > ## alias help(recovery) > > ##___ Examples ___: > > data(recovery) > > # one-sided simultaneous confidence intervals for Dunnett > # in the one-way layout > simint(minutes~blanket, data=recovery, conf.level=0.9, + alternative="less",eps=0.0001) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: lm(formula = minutes ~ blanket, data = recovery) Estimated Quantile = -1.843 Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82239 b2 - b0 >= 0 -7.46667 -Inf -4.51094 b3 - b0 >= 0 -1.66667 -Inf -0.03606 90% family-wise confidence level Warning message: 'simint.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > # same results, but specifying the contrast matrix by hand > C <- c(0, 0, 0, -1, -1, -1, 1, 0, 0, 0, 1, 0, 0, 0, 1) > C <- matrix(C, ncol=5) > # numerate the contrasts > rownames(C) <- paste("C", 1:nrow(C), sep="") > test <- simint(minutes~blanket, data=recovery, conf.level=0.9, + alternative="less",eps=0.0001, cmatrix=C[,-1]) Warning message: 'simint.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > print(test) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: lm(formula = minutes ~ blanket, data = recovery) Estimated Quantile = -1.8431 Linear Hypotheses: Estimate lwr upr C1 >= 0 -2.1333 -Inf 0.8227 C2 >= 0 -7.4667 -Inf -4.5107 C3 >= 0 -1.6667 -Inf -0.0359 90% family-wise confidence level > > # same results, but more detailed information using the summary method > summary(test) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: lm(formula = minutes ~ blanket, data = recovery) Estimated Quantile = -1.8431 Linear Hypotheses: Estimate lwr upr C1 >= 0 -2.1333 -Inf 0.8227 C2 >= 0 -7.4667 -Inf -4.5107 C3 >= 0 -1.6667 -Inf -0.0359 90% family-wise confidence level > > ## Keywords: 'datasets'. > > > cleanEx(); ..nameEx <- "simint" > ###--- >>> `simint' <<<----- Simultaneous Intervals > > ## alias help(simint) > ## alias help(simint.default) > ## alias help(simint.formula) > > ##___ Examples ___: > > data(recovery) > > # one-sided simultaneous confidence intervals for Dunnett > # in the one-way layout > summary(simint(minutes~blanket, data=recovery, type="Dunnett", conf.level=0.9, + alternative="less",eps=0.0001)) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: lm(formula = minutes ~ blanket, data = recovery) Estimated Quantile = -1.843 Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82239 b2 - b0 >= 0 -7.46667 -Inf -4.51094 b3 - b0 >= 0 -1.66667 -Inf -0.03606 90% family-wise confidence level Warning message: 'simint.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > > ## Keywords: 'htest'. > > > cleanEx(); ..nameEx <- "simtest" > ###--- >>> `simtest' <<<----- Simultaneous comparisons > > ## alias help(simtest.default) > ## alias help(simtest.formula) > ## alias help(simtest) > > ##___ Examples ___: > > data(cholesterol) > > # adjusted p-values for all-pairwise comparisons in a onw-way > # layout (tests for restricted combinations) > simtest(response ~ trt, data=cholesterol, type="Tukey", ttype="logical") Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lm(formula = response ~ trt, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value 2times - 1time == 0 3.443 1.443 2.385 0.13816 4times - 1time == 0 6.593 1.443 4.568 < 0.001 *** drugD - 1time == 0 9.579 1.443 6.637 < 0.001 *** drugE - 1time == 0 15.166 1.443 10.507 < 0.001 *** 4times - 2times == 0 3.150 1.443 2.182 0.20503 drugD - 2times == 0 6.136 1.443 4.251 < 0.001 *** drugE - 2times == 0 11.723 1.443 8.122 < 0.001 *** drugD - 4times == 0 2.986 1.443 2.069 0.25124 drugE - 4times == 0 8.573 1.443 5.939 < 0.001 *** drugE - drugD == 0 5.586 1.443 3.870 0.00307 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) Warning message: 'simtest.default' is deprecated. Use 'glht' instead. See help("Deprecated") and help("multcomp-deprecated"). > > > ## Keywords: 'htest'. > > > cleanEx(); ..nameEx <- "tire" > ###--- >>> `tire' <<<----- Tire Wear Data Set > > ## alias help(tire) > > ##___ Examples ___: > > #tire <- read.csv("tire.csv", header = TRUE) > #C <- c(0,1,-1,0,10,-10) > #for ( x in seq(15,70,5) ) { C <- rbind( C,c(0,1,-1,0,x,-x) ) } > ## numerate the contrasts > #rownames(C) <- paste("C", 1:nrow(C), sep="") > # > ## simultaneous confidence intervals of two regression functions > #summary(simint(cost ~ make + mph + make:mph, data=tire, > # cmatrix=C, eps=0.001, whichf = NULL)) > > ## Keywords: 'datasets'. > > > cleanEx(); ..nameEx <- "waste" > ###--- >>> `waste' <<<----- Industrial Waste Data Set > > ## alias help(waste) > > ##___ Examples ___: > > data(waste) > summary(aov(waste ~ envir + temp + envir*temp, data=waste)) Df Sum Sq Mean Sq F value Pr(>F) envir 4 24.6854 6.1713 5.2532 0.0075463 ** temp 2 30.6928 15.3464 13.0632 0.0005185 *** envir:temp 8 22.9116 2.8639 2.4378 0.0651340 . Residuals 15 17.6217 1.1748 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > > #summary(simint(waste ~ envir:temp, data=waste, > # type="Tetrade", eps = 0.01)) > > ## Keywords: 'datasets'. > > > cat("Time elapsed: ", proc.time() - get("ptime", env = .CheckExEnv),"\n") Time elapsed: 11.652 0.388 12.217 0 0 > dev.off(); quit('no') null device 1 multcomp/inst/deprecated/multcomp-deprecated.Rd0000644000176200001440000001032314172227607021423 0ustar liggesusers\name{multcomp-deprecated} \alias{multcomp-deprecated} \alias{simint} \alias{simint.default} \alias{simint.formula} \alias{simint.lm} \alias{csimint} \alias{simtest} \alias{simtest.default} \alias{simtest.formula} \alias{simtest.lm} \alias{csimtest} \title{ Deprecated Functions multcomp Package } \description{ These functions are provided for compatibility with older versions of \code{multcomp} only, and may be defunct in the next release. } \usage{ csimint(estpar, df, covm, cmatrix=NULL, ctype="user-defined", conf.level=0.95, alternative=c("two.sided","less","greater"), asympt=FALSE, eps=0.001, maxpts=1000000) \method{simint}{default}(object, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott"), cmatrix = NULL, conf.level = 0.95, alternative = c("two.sided","less","greater"), eps = 0.001, maxpts = 1e+06, whichf) \method{simint}{formula}(formula, data=list(), subset, na.action, ...) \method{simint}{lm}(object, psubset = NULL, ...) csimtest(estpar, df, covm, cmatrix=NULL, ctype="user-defined", ttype=c("free","logical"), alternative=c("two.sided","less","greater"), asympt=FALSE, eps=0.001, maxpts=1000000) \method{simtest}{default}(object, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott"), ttype = c("free", "logical"), cmatrix = NULL, conf.level = 0.95, alternative = c("two.sided","less","greater"), eps = 0.001, maxpts = 1e+06, whichf) \method{simtest}{formula}(formula, data=list(), subset, na.action, ...) \method{simtest}{lm}(object, psubset = NULL, ...) } \arguments{ \item{type}{the type of contrast to be used.} \item{cmatrix}{the contrast matrix itself can be specified. If \code{cmatrix} is defined, \code{type} is ignored.} \item{conf.level}{confidence level.} \item{alternative}{the alternative hypothesis must be one of \code{"two.sided"} (default), \code{"greater"} or \code{"less"}. You can specify just the initial letter.} \item{asympt}{a logical indicating whether the (exact) t-distribution or the normal approximation should be used.} \item{eps}{absolute error tolerance as double.} \item{maxpts}{maximum number of function values as integer.} \item{psubset}{a vector of integers or characters indicating for which subset of coefficients of a (generalized) linear model \code{y} simultaneous confidences intervals should be computed.} \item{formula}{a symbolic description of the model to be fit.} \item{data}{an optional data frame containing the variables in the model. By default the variables are taken from \code{Environment(formula)}, typically the environment from which \code{simint} is called.} \item{subset}{an optional vector specifying a subset of observations to be used.} \item{na.action}{a function which indicates what should happen when the data contain \code{NA}'s. Defaults to \code{GetOption("na.action")}.} \item{whichf}{if more than one factor is given in the right hand side of \code{formula}, \code{whichf} can be used to defined the factor to compute contrasts of.} \item{ttype}{Specifies whether the logical constraint method of Westfall (1997) will be used, or whether the unconstrained method will be used.} \item{estpar}{ estimated parameter vector. } \item{df}{ degrees of freedom. } \item{covm}{ estimated covariance matrix of \code{estpar}. } \item{ctype}{ a string describing the kind of contrast matrix used.} \item{object}{ a fitted model.} \item{\dots}{further arguments to be passed to or from methods.} } \details{ The generics \code{simint} and \code{simtest} implement the user interface for multcomp versions up to 0.4-8. The user visible functions \code{simint}, \code{csimint}, \code{simtest}, \code{csimtest} have been replaced by one single function \code{\link{glht}} which offers \code{\link{summary.glht}} and \code{\link{confint.glht}} methods for simultaneous tests and confidence intervals, respectively. Please use \code{\link{glht}} for your analyses. The old user interface will be removed in future versions of this package. } \keyword{misc} multcomp/inst/CITATION0000644000176200001440000000077314367201637014244 0ustar liggesusers bibentry(bibtype="Article", title = "Simultaneous Inference in General Parametric Models", author = c(as.person("Torsten Hothorn"), as.person("Frank Bretz"), as.person("Peter Westfall")), journal = "Biometrical Journal", year = "2008", volume = "50", number = "3", pages = "346--363", mheader = "Please cite the multcomp package by the following reference:" ) multcomp/inst/MCMT/0000755000176200001440000000000014172227611013632 5ustar liggesusersmultcomp/inst/MCMT/multcomp.sas0000644000176200001440000004672114172227610016213 0ustar liggesusers/*************/ /* Chapter 1 */ /*************/ /* Thuesen example - Data */ data thuesen; input num glucose velocity; datalines; 1 15.3 1.76 2 10.8 1.34 3 8.1 1.27 4 19.5 1.47 5 7.2 1.27 6 5.3 1.49 7 9.3 1.31 8 11.1 1.09 9 7.5 1.18 10 12.2 1.22 11 6.7 1.25 12 5.2 1.19 13 19.0 1.95 14 15.1 1.28 15 6.7 1.52 16 8.6 . 17 4.2 1.12 18 10.3 1.37 19 12.5 1.19 20 16.1 1.05 21 13.3 1.32 22 4.9 1.03 23 8.8 1.12 24 9.5 1.70 ; run; /* Thuesen example - Bonferroni adjustment */ proc glimmix data = thuesen; model velocity = glucose/s; estimate "Intercept" intercept 1, "Beta1" glucose 1 / adjust = bon; run; /* Thuesen example - Westfall adjustment */ proc glimmix data = thuesen; model velocity = glucose/s; estimate "Intercept" intercept 1, "Beta1" glucose 1 / adjust = simulate (nsamp = 1000000) stepdown (type = logical); run; /*************/ /* Chapter 3 */ /*************/ /* Warpbreaks example - Data */ data warpbreaks; input recnum breaks wool $ tension $; datalines; 1 26 A L 2 30 A L 3 54 A L 4 25 A L 5 70 A L 6 52 A L 7 51 A L 8 26 A L 9 67 A L 10 18 A M 11 21 A M 12 29 A M 13 17 A M 14 12 A M 15 18 A M 16 35 A M 17 30 A M 18 36 A M 19 36 A H 20 21 A H 21 24 A H 22 18 A H 23 10 A H 24 43 A H 25 28 A H 26 15 A H 27 26 A H 28 27 B L 29 14 B L 30 29 B L 31 19 B L 32 29 B L 33 31 B L 34 41 B L 35 20 B L 36 44 B L 37 42 B M 38 26 B M 39 19 B M 40 16 B M 41 39 B M 42 28 B M 43 21 B M 44 39 B M 45 29 B M 46 20 B H 47 21 B H 48 24 B H 49 17 B H 50 13 B H 51 15 B H 52 15 B H 53 16 B H 54 28 B H ; run; proc sort data = warpbreaks; by tension; run; /* Warpbreaks example - Tukey adjustment */ proc glimmix data = warpbreaks; class tension; model breaks = tension; lsmeans tension/adjust = tukey; run; /* Warpbreaks example - Bonferroni adjustment */ proc glimmix data = warpbreaks; class tension; model breaks = tension; estimate 'M - L' tension 0 -1 1, 'H - L' tension 1 -1 0, 'H - M' tension 1 0 -1 / adjust = bon; run; /* Warpbreaks example - Tukey CI */ proc glimmix data = warpbreaks; class tension; model breaks = tension; lsmeans tension / adjust = tukey cl; run; /*************/ /* Chapter 4 */ /*************/ /* Section 4.1 */ /* Recovery example - Data */ data recovery; input recnum blanket$ minutes; datalines; 1 b0 15 2 b0 13 3 b0 12 4 b0 16 5 b0 16 6 b0 17 7 b0 13 8 b0 13 9 b0 16 10 b0 17 11 b0 17 12 b0 19 13 b0 17 14 b0 15 15 b0 13 16 b0 12 17 b0 16 18 b0 10 19 b0 17 20 b0 12 21 b1 13 22 b1 16 23 b1 9 24 b2 5 25 b2 8 26 b2 9 27 b3 14 28 b3 16 29 b3 16 30 b3 12 31 b3 7 32 b3 12 33 b3 13 34 b3 13 35 b3 9 36 b3 16 37 b3 13 38 b3 18 39 b3 13 40 b3 12 41 b3 13 ; run; /* Warpbreaks example - Dunnett adjustment */ proc glimmix data = recovery; class blanket; model minutes = blanket; lsmeans blanket / diff = controll('b0') adjust = dunnett; run; /* Warpbreaks example - Dunnett CI */ proc glimmix data = recovery; class blanket; model minutes = blanket; lsmeans blanket / adjust = dunnett pdiff = controll('b0') cl; run; /* Warpbreaks example - Bonferroni adjustment */ proc glimmix data = recovery; class blanket; model minutes = blanket; estimate 'b1 - b0' blanket -1 1 0 0, 'b2 - b0' blanket -1 0 1 0, 'b3 - b0' blanket -1 0 0 1 / adjust = bon lower; run; /* Warpbreaks example - step-down Dunnett */ proc glimmix data = recovery; class blanket; model minutes = blanket; estimate 'b1 - b0' blanket -1 1 0 0, 'b2 - b0' blanket -1 0 1 0, 'b3 - b0' blanket -1 0 0 1 / adjust = bon lower stepdown (type = free); run; /* Section 4.2 */ /* Immer example - Data */ data immer; input loc $ var $ Y1 Y2; avg_yield = (y1 + y2)/2; datalines; UF M 81.0 80.7 UF S 105.4 82.3 UF V 119.7 80.4 UF T 109.7 87.2 UF P 98.3 84.2 W M 146.6 100.4 W S 142.0 115.5 W V 150.7 112.2 W T 191.5 147.7 W P 145.7 108.1 M M 82.3 103.1 M S 77.3 105.1 M V 78.4 116.5 M T 131.3 139.9 M P 89.6 129.6 C M 119.8 98.9 C S 121.4 61.9 C V 124.0 96.2 C T 140.8 125.5 C P 124.8 75.7 GR M 98.9 66.4 GR S 89.0 49.9 GR V 69.1 96.7 GR T 89.3 61.9 GR P 104.1 80.3 D M 86.9 67.7 D S 77.1 66.7 D V 78.9 67.4 D T 101.8 91.8 D P 96.0 94.1 ; run; /* Warpbreaks example - Tukey adjustment */ proc glimmix data = immer; class loc var; model avg_yield = loc var; lsmeans var / adjust = tukey; run; /* Warpbreaks example - Tukey CI */ proc glimmix data = immer; class loc var; model avg_yield = loc var; lsmeans var / adjust = tukey cl; run; /* Warpbreaks example - Closed Tukey test */ proc glimmix data = immer; class loc var; model avg_yield = loc var; lsmeans var / adjust = simulate(nsamp=40000000 report) stepdown (type = logical report); run; /* Warpbreaks example - Shaffer adjustment */ proc glimmix data = immer; class loc var; model avg_yield = loc var; lsmeans var / adjust = bon stepdown (type = logical); run; /* Section 4.3 */ /* Litter example - Data */ data litter; input dose $ weight gesttime number; datalines; 0 28.05 22.5 15 0 33.33 22.5 14 0 36.37 22.0 14 0 35.52 22.0 13 0 36.77 21.5 15 0 29.60 23.0 5 0 27.72 21.5 16 0 33.67 22.5 15 0 32.55 22.5 14 0 32.78 21.5 15 0 31.05 22.0 12 0 33.40 22.5 15 0 30.20 22.0 16 0 28.63 21.5 7 0 33.38 22.0 15 0 33.43 22.0 13 0 29.63 21.5 14 0 33.08 22.0 15 0 31.53 22.5 16 0 35.48 22.0 9 5 34.83 22.5 15 5 26.33 22.5 7 5 24.28 22.5 15 5 38.63 23.0 9 5 27.92 22.0 13 5 33.85 22.5 13 5 24.95 22.5 17 5 33.20 22.5 15 5 36.03 22.5 12 5 26.80 22.0 13 5 31.67 22.0 14 5 30.33 21.5 12 5 26.83 22.5 14 5 32.18 22.0 13 5 33.77 22.5 16 5 21.30 21.5 9 5 25.78 21.5 14 5 19.90 21.5 12 5 28.28 22.5 16 50 31.28 22.0 16 50 35.80 21.5 16 50 27.97 21.5 14 50 33.13 22.5 15 50 30.60 22.5 15 50 30.17 21.5 15 50 27.07 21.5 14 50 32.02 22.0 17 50 36.72 22.5 13 50 28.50 21.5 14 50 21.58 21.5 16 50 30.82 22.5 17 50 30.55 22.0 14 50 27.63 22.0 14 50 22.97 22.0 12 50 29.55 21.5 12 50 31.93 22.0 14 50 29.30 21.5 16 500 24.55 22.0 7 500 33.78 22.5 13 500 32.98 22.0 10 500 25.38 21.5 11 500 30.32 22.0 15 500 19.22 22.5 11 500 26.37 21.5 14 500 28.60 22.5 9 500 19.70 22.0 11 500 32.88 22.5 15 500 26.12 22.5 13 500 33.20 22.0 12 500 32.97 22.5 14 500 38.75 23.0 16 500 33.15 22.5 12 500 30.70 21.5 13 500 35.32 22.0 17 ; run; /* Litter example - Dunnett contrasts */ proc glimmix data = litter; class dose; model weight = dose gesttime number; lsmeans dose/ diff = controll('0') adjust = dunnett; run; /* Litter example - Williams contrasts */ proc glimmix data = litter; class dose; model weight = dose gesttime number; estimate 'Control Vs. H' dose 1 0 0 -1 , 'Control Vs. HM' dose 1 0 -0.5143 -0.4857, 'Control Vs. HML' dose 1 -0.3519 -0.3333 -0.3148 / adjust=simulate(nsamp=10000000) upper; run; /* Litter example - Williams contrasts with Westfall adjusment */ proc glimmix data = litter; class dose; model weight = dose gesttime number; estimate 'Control Vs. H' dose 1 0 0 -1 , 'Control Vs. HM' dose 1 0 -0.5143 -0.4857, 'Control Vs. HML' dose 1 -0.3519 -0.3333 -0.3148 / upper adjust = simulate (nsamp = 1000000) stepdown(type = logical); run; /* Section 4.4 */ /* Bodyfat example - Data */ data bodyfat; input age DEXfat waistcirc hipcirc elbowbreadth kneebreadth anthro3a anthro3b anthro3c anthro4; datalines; 57 41.68 100.00 112.00 7.10 9.40 4.42 4.95 4.50 6.13 65 43.29 99.50 116.50 6.50 8.90 4.63 5.01 4.48 6.37 59 35.41 96.00 108.50 6.20 8.90 4.12 4.74 4.60 5.82 58 22.79 72.00 96.50 6.10 9.20 4.03 4.48 3.91 5.66 60 36.42 89.50 100.50 7.10 10.00 4.24 4.68 4.15 5.91 61 24.13 83.50 97.00 6.50 8.80 3.55 4.06 3.64 5.14 56 29.83 81.00 103.00 6.90 8.90 4.14 4.52 4.31 5.69 60 35.96 89.00 105.00 6.20 8.50 4.04 4.70 4.47 5.70 58 23.69 80.00 97.00 6.40 8.80 3.91 4.32 3.47 5.49 62 22.71 79.00 93.00 7.00 8.80 3.66 4.21 3.60 5.25 63 23.42 79.00 99.00 6.20 8.60 3.70 4.28 3.67 5.28 62 23.24 72.00 94.00 6.70 8.70 4.14 4.48 3.85 5.69 64 26.25 81.50 95.00 6.20 8.20 4.00 4.50 3.85 5.58 60 21.94 65.00 90.00 5.70 8.20 3.72 4.11 3.48 5.29 61 30.13 79.00 107.50 5.80 8.60 4.01 4.34 3.89 5.51 66 36.31 98.50 109.00 6.90 9.60 4.42 4.80 4.33 6.14 63 27.72 79.50 101.50 7.00 9.40 3.78 4.05 3.97 5.16 57 46.99 117.00 116.00 7.10 10.70 4.14 4.44 4.04 5.64 49 42.01 100.50 112.00 6.90 9.40 4.25 4.64 4.28 5.98 65 18.63 82.00 91.00 6.60 8.80 3.90 4.00 3.28 5.20 58 38.65 101.00 107.50 6.40 8.60 4.15 4.71 4.05 5.88 63 21.20 80.00 96.00 6.90 8.60 3.70 4.06 3.26 5.18 60 35.40 89.00 101.00 6.20 9.20 3.73 4.47 4.27 5.37 59 29.63 89.50 99.50 6.00 8.10 3.89 4.29 4.27 5.57 32 25.16 73.00 99.00 7.20 8.60 3.16 4.02 3.45 4.80 42 31.75 87.00 102.00 6.90 10.80 4.16 4.63 4.40 5.78 49 40.58 90.20 110.30 7.10 9.50 3.95 4.12 3.60 5.42 63 21.69 80.50 97.00 5.80 8.80 3.51 4.03 3.54 4.99 57 46.60 102.00 124.00 6.60 11.20 4.30 4.73 4.51 5.99 44 27.62 86.00 102.00 6.30 8.30 3.88 4.29 4.21 5.37 61 41.30 102.00 122.50 6.30 10.80 4.24 4.71 4.35 5.88 62 42.76 103.00 125.00 7.30 11.10 4.24 4.63 4.34 5.91 24 28.84 81.00 100.00 6.60 9.70 3.97 4.47 4.18 5.47 54 36.88 85.50 113.00 6.20 9.60 4.33 4.65 4.32 5.86 65 25.09 75.30 101.20 5.20 9.30 3.12 3.80 3.47 4.58 67 29.73 81.00 104.30 5.70 8.10 3.77 4.49 4.43 5.39 45 28.92 85.00 106.00 6.70 10.00 3.53 3.80 3.48 4.88 51 43.80 102.20 118.50 6.80 10.60 3.99 4.45 4.05 5.53 49 26.74 78.00 99.00 6.20 9.80 3.82 4.16 3.77 5.27 52 33.79 93.30 109.00 6.80 9.80 4.14 4.52 4.37 5.80 66 62.02 106.50 126.00 6.40 11.40 4.64 4.92 4.61 6.26 63 40.01 102.00 117.00 6.60 10.60 4.12 4.65 4.35 5.83 42 42.72 111.00 109.00 6.70 9.90 4.42 4.84 4.57 6.17 50 32.49 102.00 108.00 6.20 9.80 4.01 4.54 4.38 5.65 63 45.92 116.80 132.00 6.10 9.80 4.45 4.78 4.41 6.22 62 42.23 112.00 127.00 7.20 11.00 4.34 4.70 4.19 6.01 42 47.48 115.00 128.50 6.60 10.00 4.44 4.74 4.62 6.00 41 60.72 115.00 125.00 7.30 11.80 4.68 4.97 4.45 6.33 67 32.74 89.80 109.00 6.30 9.60 4.08 4.18 3.71 5.51 67 27.04 82.20 103.60 7.20 9.20 3.58 4.08 3.96 5.04 43 21.07 75.00 99.30 6.00 8.40 3.53 4.06 3.17 5.01 54 37.49 98.00 109.50 7.00 10.00 4.46 4.67 4.46 6.08 49 38.08 105.00 116.30 7.00 9.50 3.92 4.39 4.15 5.62 25 40.83 89.50 122.00 6.50 10.00 4.11 4.68 3.99 5.79 26 18.51 87.80 94.00 6.60 9.00 3.26 3.69 3.48 4.69 33 26.36 79.20 107.70 6.50 9.00 4.04 4.34 3.78 5.55 36 20.08 80.00 95.00 6.40 9.00 3.36 3.55 3.28 4.51 38 43.71 105.50 122.50 6.60 10.00 4.19 4.67 4.51 5.85 26 31.61 95.00 109.00 6.70 9.50 4.13 4.43 4.20 5.63 52 28.98 81.50 102.30 6.40 9.20 3.92 4.38 4.10 5.56 29 18.62 71.00 92.00 6.40 8.50 3.35 3.90 3.34 4.75 31 18.64 68.00 93.00 5.70 7.20 3.42 3.90 3.39 4.94 19 13.70 68.00 88.00 6.50 8.20 3.39 3.73 3.16 4.69 35 14.88 68.50 94.50 6.50 8.80 3.29 3.56 2.87 4.46 27 16.46 75.00 95.00 6.40 9.10 2.99 3.44 3.38 4.35 40 11.21 66.60 92.20 6.10 8.50 2.40 2.58 2.05 3.18 53 11.21 66.60 92.20 6.10 8.50 2.40 2.58 2.05 3.18 31 14.18 69.70 93.20 6.20 8.10 3.10 3.36 2.76 4.14 27 20.84 66.50 100.00 6.50 8.50 3.50 4.14 3.76 5.04 52 19.00 76.50 103.00 7.40 8.50 3.33 3.73 3.21 4.64 59 18.07 71.00 88.30 5.70 8.90 3.48 4.13 3.45 5.03 ; run; /* Bodyfat example - Linear model output */ proc glimmix data = bodyfat; model Dexfat = age waistcirc hipcirc elbowbreadth kneebreadth anthro3a anthro3b anthro3c anthro4/solution; run; /* Bodyfat example - Global and adjusted individual F-tests */ proc glimmix data = bodyfat; model Dexfat = age waistcirc hipcirc elbowbreadth kneebreadth anthro3a anthro3b anthro3c anthro4/s; estimate "age" age 1, "wai" waistcirc 1, "hip" hipcirc 1, "elb" elbowbreadth 1, "knee" kneebreadth 1, "antha" anthro3a 1, "anthb" anthro3b 1, "anthc" anthro3c 1, "anth4" anthro4 1 / adjust=simulate(nsamp=10000000 report) cl; run; /* Section 4.6 */ /* Alpha example - Data */ data alpha; length alength $12; input recno alength $ elevel; datalines; 1 short 1.43 2 intermediate -1.90 3 intermediate 1.55 4 intermediate 3.27 5 intermediate 0.30 6 intermediate 1.90 7 intermediate 2.53 8 intermediate 2.83 9 intermediate 3.10 10 intermediate 2.07 11 intermediate 1.63 12 intermediate 2.53 13 intermediate 0.10 14 intermediate 2.53 15 short -2.83 16 long 1.60 17 intermediate 2.27 18 short 1.23 19 intermediate 0.70 20 intermediate 3.80 21 short -1.47 22 intermediate -2.37 23 intermediate 0.67 24 intermediate -0.37 25 long 3.60 26 intermediate 3.20 27 intermediate 3.05 28 intermediate 1.97 29 intermediate 3.33 30 intermediate 2.90 31 long 1.45 32 long 4.10 33 intermediate 2.77 34 intermediate 4.05 35 intermediate 2.13 36 short 2.57 37 intermediate 3.53 38 long 3.37 39 intermediate 3.67 40 intermediate 2.13 41 intermediate 1.40 42 intermediate 3.50 43 intermediate 3.53 44 intermediate 2.20 45 long 3.20 46 intermediate 4.23 47 intermediate 2.87 48 intermediate 3.20 49 intermediate 3.40 50 long 3.20 51 intermediate 4.17 52 intermediate 4.30 53 long 4.23 54 long 3.43 55 long 4.40 56 long 3.27 57 intermediate 3.07 58 intermediate 4.03 59 intermediate 3.07 60 intermediate 4.43 61 long 1.75 62 long 1.77 63 intermediate 1.33 64 long 3.43 65 intermediate 1.03 66 intermediate 3.13 67 intermediate 4.17 68 intermediate 2.70 69 intermediate 3.93 70 long 3.50 71 intermediate 3.90 72 intermediate 2.17 73 intermediate 3.13 74 intermediate -2.40 75 intermediate 1.90 76 short 3.00 77 short 5.63 78 short 2.80 79 short 3.17 80 short 2.00 81 short 2.93 82 short 2.87 83 short 1.83 84 short 1.05 85 short 1.00 86 short 2.77 87 short 1.43 88 short 5.80 89 short 2.80 90 short 1.17 91 intermediate 1.60 92 short 0.47 93 short 2.33 94 intermediate 0.67 95 intermediate 0.73 96 short 1.47 97 short 0.10 ;run; /* Alpha example - Tukex test under Heteroscedasticity */ proc glimmix data = alpha empirical; class alength; model elevel = alength; lsmeans alength / adjust = tukey; run; /* Section 4.7 */ /* Alzheimer example - Data */ data smoke; input g$ cig$ c n; dg = (g='M'); d1 = (cig = '<10'); d2 = (cig = '10-20'); d3 = (cig = '>20'); 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/MCMT/MCMT.R0000644000176200001440000002477514172227611014534 0ustar liggesusers ################################################################ # # 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") set.seed(290875) load(system.file("MCMT/MCMT.rda", package = "multcomp")) ### weights loss data, page 47 amod <- aov(wloss ~ diet, data = wloss) amod gh <- glht(amod, mcp(diet = "Tukey")) # page 49 / 50 -- OK confint(gh) 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) ### tox data, page 56 amod <- aov(gain ~ g, data = tox) amod # page 56 -- OK gh <- glht(amod, mcp(g = "Dunnett")) confint(gh) # page 59 -- OK gh <- glht(amod, mcp(g = "Dunnett"), alternative = "less") confint(gh) ### 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) ### 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) # page 76 -- OK summary(gh) gh <- glht(amod, mcp(blanket = "Dunnett")) # page 78 -- OK confint(gh) # page 79 -- OK summary(gh) gh <- glht(amod, mcp(blanket = "Dunnett"), alternative = "less") # page 80 -- OK confint(gh, level = 0.9) # page 80 -- OK summary(gh) # page 80 -- OK (univariate confints!!!) amod <- aov(minutes ~ blanket - 1, data = recover) confint(amod, level = 0.9) ### house prices, page 84 amod <- aov(price ~ location + sqfeet + age, data = house) gh <- glht(amod, mcp(location = "Tukey")) # page 85 -- OK ( * -1) confint(gh) # page 96 -- OK ( * -1) summary(gh) summary(gh, test = univariate()) ### rat growth data, page 99 amod <- aov(w4 ~ ., data = ratgrwth) gh <- glht(amod, mcp(trt = "Dunnett"), alternative = "less") # page 100 -- OK summary(gh) confint(gh) ### Alzheimer data, page 103 amod <- aov(score ~ therapy * since + age, data = alz) gh <- glht(amod, linfct = mcp(therapy = "Tukey")) ### choose comparisons at since = 10 gh$linfct[,8:11] <- gh$linfct[,8:11] * 10 confint(gh) ### 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()) # page 111 -- OK gh$alternative <- "greater" summary(gh, test = univariate()) summary(gh) confint(gh) # page 174 -- OK gh$alternative <- "greater" summary(gh, test = adjusted("Westfall")) ### 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) ### 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) summary(gh, test = univariate()) summary(gh, test = adjusted()) ### 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()) summary(gh, test = adjusted("Shaffer")) summary(gh, test = adjusted("Westfall")) 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()) summary(gh, test = adjusted("Shaffer")) summary(gh, test = adjusted("Westfall")) ### waste data, page 177 amod <- aov(waste ~ temp * envir, data = waste) # page 179 -- OK ( * -1) confint(glht(amod, linfct = mcp(temp = "Tukey"))) confint(glht(amod, linfct = mcp(envir = "Tukey"))) gh <- glht(amod, linfct = mcp(envir = "Tukey", temp = "Tukey")) # page 181 -- OK summary(gh, test = univariate()) summary(gh, test = adjusted("Shaffer")) summary(gh, test = adjusted("Westfall")) # 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()) summary(gh, test = adjusted("Shaffer")) summary(gh, test = adjusted("Westfall")) ### drug data, page 187 amod <- aov(response ~ drug * disease, data = drug) # page 188 confint(glht(amod, linfct = mcp(drug = "Tukey"))) ### detergents data, page 189 amod <- aov(plates ~ block + detergent, data = detergent) gh <- glht(amod, linfct = mcp(detergent = "Tukey")) # page 190 -- OK confint(gh) # page 192 -- OK summary(gh, test = univariate()) summary(gh, test = adjusted("Shaffer")) summary(gh, test = adjusted("Westfall")) ### 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) # page 195 -- OK summary(gh, test = univariate()) summary(gh, test = adjusted("Shaffer")) summary(gh, test = adjusted("Westfall")) ### 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()) summary(gh, test = adjusted("Shaffer")) summary(gh, test = adjusted("Westfall")) ### 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") lmod <- lmer(wloss ~ diet + (1 | i), data = wloss, model = TRUE) gh <- glht(lmod, mcp(diet = "Tukey")) # page 205 -- FIXME: df??? confint(gh) # page 207 / 208 -- FIXME: df??? summary(gh) ### detergent data, page 211 lmod <- lmer(plates ~ detergent + (1 | block), data = detergent, model = TRUE) ### 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) ### 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) 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()) summary(gh, test = adjusted("Shaffer")) summary(gh, test = adjusted("Westfall")) ### 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")) gh$linfct[,8:11] <- gh$linfct[,8:11] * 2 confint(gh) sessionInfo() multcomp/inst/MCMT/MCMT.Rout0000644000176200001440000016762614172227610015266 0ustar liggesusers R version 3.0.2 (2013-09-25) -- "Frisbee Sailing" Copyright (C) 2013 The R Foundation for Statistical Computing Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. [Previously saved workspace restored] > > ################################################################ > # > # Reproduction of examples presented in > # > # Multiple Comparisons and Multiple Tests > # Using the SAS System > # > # by P. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger > # and Y. Hochberg > # > # SAS Institute Inc., Cary, NC, 1999 > # > ################################################################ > > library("multcomp") Loading required package: mvtnorm Loading required package: survival Loading required package: splines Attaching package: ‘survival’ The following object is masked _by_ ‘.GlobalEnv’: heart Loading required package: TH.data Attaching package: ‘multcomp’ The following objects are masked _by_ ‘.GlobalEnv’: cholesterol, detergent, litter, waste > set.seed(290875) > load(system.file("MCMT/MCMT.rda", package = "multcomp")) > > ### weights loss data, page 47 > > amod <- aov(wloss ~ diet, data = wloss) > amod Call: aov(formula = wloss ~ diet, data = wloss) Terms: diet Residuals Sum of Squares 59.8792 44.7040 Deg. of Freedom 4 45 Residual standard error: 0.9967057 Estimated effects may be unbalanced > > gh <- glht(amod, mcp(diet = "Tukey")) > > # page 49 / 50 -- OK > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = wloss ~ diet, data = wloss) Quantile = 2.8415 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr B - A == 0 -1.0300 -2.2966 0.2366 C - A == 0 -1.7800 -3.0466 -0.5134 D - A == 0 -2.7800 -4.0466 -1.5134 E - A == 0 0.1200 -1.1466 1.3866 C - B == 0 -0.7500 -2.0166 0.5166 D - B == 0 -1.7500 -3.0166 -0.4834 E - B == 0 1.1500 -0.1166 2.4166 D - C == 0 -1.0000 -2.2666 0.2666 E - C == 0 1.9000 0.6334 3.1666 E - D == 0 2.9000 1.6334 4.1666 > > amod <- aov(wloss ~ diet - 1, data = wloss) > K <- diag(nlevels(wloss$diet)) > rownames(K) <- levels(wloss$diet) > gh <- glht(amod, K) > > # page 61 -- OK > confint(gh) Simultaneous Confidence Intervals Fit: aov(formula = wloss ~ diet - 1, data = wloss) Quantile = 2.6758 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr A == 0 12.0500 11.2066 12.8934 B == 0 11.0200 10.1766 11.8634 C == 0 10.2700 9.4266 11.1134 D == 0 9.2700 8.4266 10.1134 E == 0 12.1700 11.3266 13.0134 > > > ### tox data, page 56 > > amod <- aov(gain ~ g, data = tox) > amod Call: aov(formula = gain ~ g, data = tox) Terms: g Residuals Sum of Squares 3478.949 4410.101 Deg. of Freedom 6 21 Residual standard error: 14.49154 Estimated effects may be unbalanced > > # page 56 -- OK > gh <- glht(amod, mcp(g = "Dunnett")) > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = gain ~ g, data = tox) Quantile = 2.7894 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr g1 - g0 == 0 -9.4800 -38.0628 19.1028 g2 - g0 == 0 -24.9000 -53.4828 3.6828 g3 - g0 == 0 -33.2400 -61.8228 -4.6572 g4 - g0 == 0 -13.5000 -42.0828 15.0828 g5 - g0 == 0 -20.7000 -49.2828 7.8828 g6 - g0 == 0 -31.1400 -59.7228 -2.5572 > > # page 59 -- OK > gh <- glht(amod, mcp(g = "Dunnett"), alternative = "less") > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = gain ~ g, data = tox) Quantile = 2.448 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr g1 - g0 >= 0 -9.4800 -Inf 15.6052 g2 - g0 >= 0 -24.9000 -Inf 0.1852 g3 - g0 >= 0 -33.2400 -Inf -8.1548 g4 - g0 >= 0 -13.5000 -Inf 11.5852 g5 - g0 >= 0 -20.7000 -Inf 4.3852 g6 - g0 >= 0 -31.1400 -Inf -6.0548 > > > ### coupon data, page 62 > > amod <- aov(purchase ~ discount , data = coupon) > > gh <- glht(amod, linfct = mcp(discount = rbind( + linear = c(-3, -1, 1, 3), + quad = c(-2, 2, 2, -2), + cubic = c(-1, 3, -3, 1)))) > > # page 63 -- OK (t^2 = F stats) > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = purchase ~ discount, data = coupon) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) linear == 0 43.974 18.109 2.428 0.0590 . quad == 0 52.820 16.197 3.261 0.0072 ** cubic == 0 -0.802 18.109 -0.044 1.0000 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ### recover data, page 66 > > amod <- aov(minutes ~ blanket, data = recover) > > gh <- glht(amod, mcp(blanket = "Tukey")) > > # page 68 -- OK (small differences due to simuation accurary) > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Quantile = 2.6546 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 == 0 -2.1333 -6.3908 2.1241 b2 - b0 == 0 -7.4667 -11.7241 -3.2092 b3 - b0 == 0 -1.6667 -4.0154 0.6821 b2 - b1 == 0 -5.3333 -10.9479 0.2812 b3 - b1 == 0 0.4667 -3.8823 4.8157 b3 - b2 == 0 5.8000 1.4510 10.1490 > > # page 76 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) b1 - b0 == 0 -2.1333 1.6038 -1.330 0.53287 b2 - b0 == 0 -7.4667 1.6038 -4.656 < 0.001 *** b3 - b0 == 0 -1.6667 0.8848 -1.884 0.23839 b2 - b1 == 0 -5.3333 2.1150 -2.522 0.06707 . b3 - b1 == 0 0.4667 1.6383 0.285 0.99120 b3 - b2 == 0 5.8000 1.6383 3.540 0.00523 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > gh <- glht(amod, mcp(blanket = "Dunnett")) > > # page 78 -- OK > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Quantile = 2.4884 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 == 0 -2.1333 -6.1241 1.8575 b2 - b0 == 0 -7.4667 -11.4575 -3.4759 b3 - b0 == 0 -1.6667 -3.8683 0.5350 > > # page 79 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) b1 - b0 == 0 -2.1333 1.6038 -1.330 0.456 b2 - b0 == 0 -7.4667 1.6038 -4.656 <0.001 *** b3 - b0 == 0 -1.6667 0.8848 -1.884 0.182 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > gh <- glht(amod, mcp(blanket = "Dunnett"), alternative = "less") > > # page 80 -- OK > confint(gh, level = 0.9) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Quantile = 1.8428 90% family-wise confidence level Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82218 b2 - b0 >= 0 -7.46667 -Inf -4.51115 b3 - b0 >= 0 -1.66667 -Inf -0.03618 > > # page 80 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -2.1333 1.6038 -1.330 0.2411 b2 - b0 >= 0 -7.4667 1.6038 -4.656 <0.001 *** b3 - b0 >= 0 -1.6667 0.8848 -1.884 0.0924 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > # page 80 -- OK (univariate confints!!!) > amod <- aov(minutes ~ blanket - 1, data = recover) > confint(amod, level = 0.9) 5 % 95 % blanketb0 13.822802 15.777198 blanketb1 10.143553 15.189781 blanketb2 4.810219 9.856447 blanketb3 12.004962 14.261704 > > > ### house prices, page 84 > > amod <- aov(price ~ location + sqfeet + age, data = house) > gh <- glht(amod, mcp(location = "Tukey")) > > # page 85 -- OK ( * -1) > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Quantile = 2.795 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr B - A == 0 -22.2032 -27.8200 -16.5864 C - A == 0 -21.5285 -30.7668 -12.2903 D - A == 0 -26.0152 -32.8403 -19.1901 E - A == 0 -29.0893 -35.6444 -22.5343 C - B == 0 0.6747 -9.0560 10.4054 D - B == 0 -3.8120 -11.0966 3.4726 E - B == 0 -6.8861 -14.0887 0.3164 D - C == 0 -4.4867 -14.9241 5.9506 E - C == 0 -7.5608 -17.7255 2.6039 E - D == 0 -3.0741 -11.1241 4.9759 > > # page 96 -- OK ( * -1) > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -22.2032 2.0096 -11.049 <1e-04 *** C - A == 0 -21.5285 3.3053 -6.513 <1e-04 *** D - A == 0 -26.0152 2.4419 -10.654 <1e-04 *** E - A == 0 -29.0893 2.3453 -12.403 <1e-04 *** C - B == 0 0.6747 3.4815 0.194 0.9997 D - B == 0 -3.8120 2.6063 -1.463 0.5791 E - B == 0 -6.8861 2.5769 -2.672 0.0674 . D - C == 0 -4.4867 3.7343 -1.201 0.7416 E - C == 0 -7.5608 3.6367 -2.079 0.2342 E - D == 0 -3.0741 2.8802 -1.067 0.8153 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -22.2032 2.0096 -11.049 8.88e-16 *** C - A == 0 -21.5285 3.3053 -6.513 2.05e-08 *** D - A == 0 -26.0152 2.4419 -10.654 3.55e-15 *** E - A == 0 -29.0893 2.3453 -12.403 < 2e-16 *** C - B == 0 0.6747 3.4815 0.194 0.84703 D - B == 0 -3.8120 2.6063 -1.463 0.14906 E - B == 0 -6.8861 2.5769 -2.672 0.00981 ** D - C == 0 -4.4867 3.7343 -1.201 0.23453 E - C == 0 -7.5608 3.6367 -2.079 0.04213 * E - D == 0 -3.0741 2.8802 -1.067 0.29032 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > > > ### rat growth data, page 99 > > amod <- aov(w4 ~ ., data = ratgrwth) > > gh <- glht(amod, mcp(trt = "Dunnett"), alternative = "less") > > # page 100 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = w4 ~ ., data = ratgrwth) Linear Hypotheses: Estimate Std. Error t value Pr(= 0 -9.458 3.328 -2.842 0.00982 ** Thyroxin - Control >= 0 -2.113 3.196 -0.661 0.42184 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = w4 ~ ., data = ratgrwth) Quantile = 2.06 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr Thiouracil - Control >= 0 -9.4583 -Inf -2.6036 Thyroxin - Control >= 0 -2.1128 -Inf 4.4699 > > > ### Alzheimer data, page 103 > > amod <- aov(score ~ therapy * since + age, data = alz) > > gh <- glht(amod, linfct = mcp(therapy = "Tukey")) Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > ### choose comparisons at since = 10 > gh$linfct[,8:11] <- gh$linfct[,8:11] * 10 > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = score ~ therapy * since + age, data = alz) Quantile = 2.8023 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 6.1152 -8.6696 20.9000 t3 - t1 == 0 0.6661 -22.5825 23.9147 t4 - t1 == 0 31.4191 13.8723 48.9658 t5 - t1 == 0 44.6310 13.5089 75.7532 t3 - t2 == 0 -5.4491 -29.0470 18.1487 t4 - t2 == 0 25.3039 7.1338 43.4739 t5 - t2 == 0 38.5158 7.1727 69.8590 t4 - t3 == 0 30.7530 5.0327 56.4733 t5 - t3 == 0 43.9650 8.7868 79.1432 t5 - t4 == 0 13.2120 -19.8816 46.3055 > > > > ### litter data, page 109 > > amod <- aov(weight ~ dose + gesttime + number, data = litter) > > K <- rbind("cont-low" = c(1, -1, 0, 0), + "cont-mid" = c(1, 0, -1, 0), + "cont-high" = c(1, 0, 0, -1), + otrend = c(1.5, 0.5, -0.5, -1.5) / 2, + atrend = c(0, 5, 50, 500) - mean(c(0, 5, 50, 500)), + ltrend = -(log(1:4) - mean(log(1:4)))) > K["atrend",] <- K["atrend",] / -max(K["atrend",]) > > gh <- glht(amod, linfct = mcp(dose = K)) > > # page 110 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) cont-low == 0 3.3524 1.2908 2.597 0.0115 * cont-mid == 0 2.2909 1.3384 1.712 0.0915 . cont-high == 0 2.6752 1.3343 2.005 0.0490 * otrend == 0 1.7411 1.0433 1.669 0.0998 . atrend == 0 0.8712 1.1322 0.770 0.4442 ltrend == 0 1.9400 0.9616 2.018 0.0476 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > > # page 111 -- OK > gh$alternative <- "greater" > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(>t) cont-low <= 0 3.3524 1.2908 2.597 0.00575 ** cont-mid <= 0 2.2909 1.3384 1.712 0.04576 * cont-high <= 0 2.6752 1.3343 2.005 0.02448 * otrend <= 0 1.7411 1.0433 1.669 0.04988 * atrend <= 0 0.8712 1.1322 0.770 0.22212 ltrend <= 0 1.9400 0.9616 2.018 0.02379 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(>t) cont-low <= 0 3.3524 1.2908 2.597 0.0207 * cont-mid <= 0 2.2909 1.3384 1.712 0.1376 cont-high <= 0 2.6752 1.3343 2.005 0.0786 . otrend <= 0 1.7411 1.0433 1.669 0.1484 atrend <= 0 0.8712 1.1322 0.770 0.5012 ltrend <= 0 1.9400 0.9616 2.018 0.0769 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Quantile = -2.2207 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr cont-low <= 0 3.3524 0.4860 Inf cont-mid <= 0 2.2909 -0.6813 Inf cont-high <= 0 2.6752 -0.2878 Inf otrend <= 0 1.7411 -0.5759 Inf atrend <= 0 0.8712 -1.6429 Inf ltrend <= 0 1.9400 -0.1953 Inf > > # page 174 -- OK > gh$alternative <- "greater" > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value Pr(>t) cont-low <= 0 3.3524 1.2908 2.597 0.0207 * cont-mid <= 0 2.2909 1.3384 1.712 0.0891 . cont-high <= 0 2.6752 1.3343 2.005 0.0454 * otrend <= 0 1.7411 1.0433 1.669 0.0891 . atrend <= 0 0.8712 1.1322 0.770 0.2221 ltrend <= 0 1.9400 0.9616 2.018 0.0396 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### house data -- regression line > > houseA <- subset(house, location == "A") > > lmod <- lm(price ~ sqfeet, data = houseA) > K <- cbind(1, grid <- seq(from = 1000, to = 3000, by = 200)) > rownames(K) <- paste("sqfeet *", grid) > > gh <- glht(lmod, linfct = K) > > # page 123 -- OK > confint(gh) Simultaneous Confidence Intervals Fit: lm(formula = price ~ sqfeet, data = houseA) Quantile = 2.5857 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr sqfeet * 1000 == 0 73.4435 63.8834 83.0037 sqfeet * 1200 == 0 81.4959 73.7603 89.2315 sqfeet * 1400 == 0 89.5483 83.5316 95.5649 sqfeet * 1600 == 0 97.6006 93.0756 102.1256 sqfeet * 1800 == 0 105.6530 102.0938 109.2122 sqfeet * 2000 == 0 113.7054 110.1310 117.2797 sqfeet * 2200 == 0 121.7577 117.1970 126.3184 sqfeet * 2400 == 0 129.8101 123.7487 135.8715 sqfeet * 2600 == 0 137.8625 130.0781 145.6468 sqfeet * 2800 == 0 145.9148 136.3040 155.5257 sqfeet * 3000 == 0 153.9672 142.4756 165.4588 > > > ### patient satisfaction, page 125 > > pat_sat <- pat_sat[order(pat_sat$severe),] > lmod <- lm(satisf ~ age + severe + anxiety, data = pat_sat) > K <- cbind(1, mean(pat_sat$age), pat_sat$severe, mean(pat_sat$anxiety)) > > gh <- glht(lmod, linfct = K) > > ci <- confint(gh) > > # page 127 -- OK > plot(pat_sat$severe, ci$confint[,"Estimate"], + xlab = "Severity", ylab = "Satisfaction", type = "b", + ylim = c(30, 80), xlim = c(45, 60)) > lines(pat_sat$severe, ci$confint[,"lwr"], lty = 2) > lines(pat_sat$severe, ci$confint[,"upr"], lty = 2) > > > ### tire data, page 127 > > amod <- aov(cost ~ make + make:mph - 1, data = tire) > > x <- seq(from = 10, to = 70, by = 5) > K <- cbind(1, -1, x, -x) > rownames(K) <- x > > gh <- glht(amod, linfct = K) > > # page 129 -- OK > confint(gh) Simultaneous Confidence Intervals Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Quantile = 2.6475 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr 10 == 0 -4.10667 -6.52736 -1.68598 15 == 0 -3.45389 -5.59418 -1.31360 20 == 0 -2.80111 -4.68112 -0.92110 25 == 0 -2.14833 -3.79776 -0.49891 30 == 0 -1.49556 -2.95818 -0.03293 35 == 0 -0.84278 -2.18087 0.49531 40 == 0 -0.19000 -1.48391 1.10391 45 == 0 0.46278 -0.87531 1.80087 50 == 0 1.11556 -0.34707 2.57818 55 == 0 1.76833 0.11891 3.41776 60 == 0 2.42111 0.54110 4.30112 65 == 0 3.07389 0.93360 5.21418 70 == 0 3.72667 1.30598 6.14736 > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) 10 == 0 -4.1067 0.9143 -4.492 0.000370 *** 15 == 0 -3.4539 0.8084 -4.272 0.000583 *** 20 == 0 -2.8011 0.7101 -3.945 0.001159 ** 25 == 0 -2.1483 0.6230 -3.448 0.003305 ** 30 == 0 -1.4956 0.5524 -2.707 0.015542 * 35 == 0 -0.8428 0.5054 -1.668 0.114860 40 == 0 -0.1900 0.4887 -0.389 0.702571 45 == 0 0.4628 0.5054 0.916 0.373442 50 == 0 1.1156 0.5524 2.019 0.060533 . 55 == 0 1.7683 0.6230 2.838 0.011862 * 60 == 0 2.4211 0.7101 3.410 0.003587 ** 65 == 0 3.0739 0.8084 3.802 0.001565 ** 70 == 0 3.7267 0.9143 4.076 0.000880 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted()) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) 10 == 0 -4.1067 0.9143 -4.492 0.00125 ** 15 == 0 -3.4539 0.8084 -4.272 0.00201 ** 20 == 0 -2.8011 0.7101 -3.945 0.00383 ** 25 == 0 -2.1483 0.6230 -3.448 0.01042 * 30 == 0 -1.4956 0.5524 -2.707 0.04470 * 35 == 0 -0.8428 0.5054 -1.668 0.26440 40 == 0 -0.1900 0.4887 -0.389 0.92440 45 == 0 0.4628 0.5054 0.916 0.65303 50 == 0 1.1156 0.5524 2.019 0.15260 55 == 0 1.7683 0.6230 2.838 0.03479 * 60 == 0 2.4211 0.7101 3.410 0.01130 * 65 == 0 3.0739 0.8084 3.802 0.00510 ** 70 == 0 3.7267 0.9143 4.076 0.00294 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > > ### cholesterol data, page 153 > > amod <- aov(response ~ trt - 1, data = cholesterol) > > gh <- glht(amod, linfct = mcp(trt = "Tukey")) > > # page 171 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -5.586 1.443 -3.870 0.000348 *** C - A == 0 -8.573 1.443 -5.939 3.84e-07 *** D - A == 0 -11.723 1.443 -8.122 2.29e-10 *** E - A == 0 -15.166 1.443 -10.507 1.08e-13 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * D - B == 0 -6.136 1.443 -4.251 0.000106 *** E - B == 0 -9.579 1.443 -6.637 3.53e-08 *** D - C == 0 -3.150 1.443 -2.182 0.034352 * E - C == 0 -6.593 1.443 -4.568 3.82e-05 *** E - D == 0 -3.443 1.443 -2.385 0.021333 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -5.586 1.443 -3.870 0.000697 *** C - A == 0 -8.573 1.443 -5.939 1.54e-06 *** D - A == 0 -11.723 1.443 -8.122 1.38e-09 *** E - A == 0 -15.166 1.443 -10.507 1.08e-12 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * D - B == 0 -6.136 1.443 -4.251 0.000317 *** E - B == 0 -9.579 1.443 -6.637 2.12e-07 *** D - C == 0 -3.150 1.443 -2.182 0.042666 * E - C == 0 -6.593 1.443 -4.568 0.000153 *** E - D == 0 -3.443 1.443 -2.385 0.042666 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -5.586 1.443 -3.870 <0.001 *** C - A == 0 -8.573 1.443 -5.939 <0.001 *** D - A == 0 -11.723 1.443 -8.122 <0.001 *** E - A == 0 -15.166 1.443 -10.507 <0.001 *** C - B == 0 -2.986 1.443 -2.069 0.0443 * D - B == 0 -6.136 1.443 -4.251 <0.001 *** E - B == 0 -9.579 1.443 -6.637 <0.001 *** D - C == 0 -3.150 1.443 -2.182 0.0420 * E - C == 0 -6.593 1.443 -4.568 <0.001 *** E - D == 0 -3.443 1.443 -2.385 0.0420 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > gh <- glht(amod, linfct = mcp(trt = c("B - A = 0", + "C - A = 0", + "C - B = 0", + "3 * D - A - B - C = 0", + "3 * E - A - B - C = 0"))) > > # page 172 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -5.586 1.443 -3.870 0.000348 *** C - A == 0 -8.573 1.443 -5.939 3.84e-07 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * 3 * D - A - B - C == 0 -21.009 3.536 -5.942 3.81e-07 *** 3 * E - A - B - C == 0 -31.338 3.536 -8.864 1.98e-11 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -5.586 1.443 -3.870 0.000348 *** C - A == 0 -8.573 1.443 -5.939 1.52e-06 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * 3 * D - A - B - C == 0 -21.009 3.536 -5.942 1.52e-06 *** 3 * E - A - B - C == 0 -31.338 3.536 -8.864 9.88e-11 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) B - A == 0 -5.586 1.443 -3.870 <0.001 *** C - A == 0 -8.573 1.443 -5.939 <0.001 *** C - B == 0 -2.986 1.443 -2.069 0.0443 * 3 * D - A - B - C == 0 -21.009 3.536 -5.942 <0.001 *** 3 * E - A - B - C == 0 -31.338 3.536 -8.864 <0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### waste data, page 177 > > amod <- aov(waste ~ temp * envir, data = waste) > > # page 179 -- OK ( * -1) > confint(glht(amod, linfct = mcp(temp = "Tukey"))) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Quantile = 2.5956 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 -0.0800 -2.8934 2.7334 t3 - t1 == 0 1.2600 -1.5534 4.0734 t3 - t2 == 0 1.3400 -1.4734 4.1534 Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > confint(glht(amod, linfct = mcp(envir = "Tukey"))) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Quantile = 3.0877 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr e2 - e1 == 0 2.0500 -1.2966 5.3966 e3 - e1 == 0 3.0450 -0.3016 6.3916 e4 - e1 == 0 0.0850 -3.2616 3.4316 e5 - e1 == 0 1.6700 -1.6766 5.0166 e3 - e2 == 0 0.9950 -2.3516 4.3416 e4 - e2 == 0 -1.9650 -5.3116 1.3816 e5 - e2 == 0 -0.3800 -3.7266 2.9666 e4 - e3 == 0 -2.9600 -6.3066 0.3866 e5 - e3 == 0 -1.3750 -4.7216 1.9716 e5 - e4 == 0 1.5850 -1.7616 4.9316 Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > gh <- glht(amod, linfct = mcp(envir = "Tukey", temp = "Tukey")) Warning messages: 1: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate 2: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > # page 181 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) envir: e2 - e1 == 0 2.050 1.084 1.891 0.0780 . envir: e3 - e1 == 0 3.045 1.084 2.809 0.0132 * envir: e4 - e1 == 0 0.085 1.084 0.078 0.9385 envir: e5 - e1 == 0 1.670 1.084 1.541 0.1442 envir: e3 - e2 == 0 0.995 1.084 0.918 0.3731 envir: e4 - e2 == 0 -1.965 1.084 -1.813 0.0899 . envir: e5 - e2 == 0 -0.380 1.084 -0.351 0.7308 envir: e4 - e3 == 0 -2.960 1.084 -2.731 0.0155 * envir: e5 - e3 == 0 -1.375 1.084 -1.269 0.2239 envir: e5 - e4 == 0 1.585 1.084 1.462 0.1643 temp: t2 - t1 == 0 -0.080 1.084 -0.074 0.9421 temp: t3 - t1 == 0 1.260 1.084 1.162 0.2632 temp: t3 - t2 == 0 1.340 1.084 1.236 0.2354 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) envir: e2 - e1 == 0 2.050 1.084 1.891 0.702 envir: e3 - e1 == 0 3.045 1.084 2.809 0.172 envir: e4 - e1 == 0 0.085 1.084 0.078 1.000 envir: e5 - e1 == 0 1.670 1.084 1.541 1.000 envir: e3 - e2 == 0 0.995 1.084 0.918 1.000 envir: e4 - e2 == 0 -1.965 1.084 -1.813 0.702 envir: e5 - e2 == 0 -0.380 1.084 -0.351 1.000 envir: e4 - e3 == 0 -2.960 1.084 -2.731 0.172 envir: e5 - e3 == 0 -1.375 1.084 -1.269 1.000 envir: e5 - e4 == 0 1.585 1.084 1.462 1.000 temp: t2 - t1 == 0 -0.080 1.084 -0.074 1.000 temp: t3 - t1 == 0 1.260 1.084 1.162 1.000 temp: t3 - t2 == 0 1.340 1.084 1.236 1.000 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) envir: e2 - e1 == 0 2.050 1.084 1.891 0.365 envir: e3 - e1 == 0 3.045 1.084 2.809 0.105 envir: e4 - e1 == 0 0.085 1.084 0.078 0.995 envir: e5 - e1 == 0 1.670 1.084 1.541 0.533 envir: e3 - e2 == 0 0.995 1.084 0.918 0.721 envir: e4 - e2 == 0 -1.965 1.084 -1.813 0.365 envir: e5 - e2 == 0 -0.380 1.084 -0.351 0.976 envir: e4 - e3 == 0 -2.960 1.084 -2.731 0.105 envir: e5 - e3 == 0 -1.375 1.084 -1.269 0.711 envir: e5 - e4 == 0 1.585 1.084 1.462 0.533 temp: t2 - t1 == 0 -0.080 1.084 -0.074 0.995 temp: t3 - t1 == 0 1.260 1.084 1.162 0.711 temp: t3 - t2 == 0 1.340 1.084 1.236 0.711 (Adjusted p values reported -- Westfall method) > > > # page 186 -- OK > amod <- aov(waste ~ temp + envir, + data = waste[seq(from = 1, to = 29, by = 2),]) > > gh <- glht(amod, linfct = mcp(envir = "Tukey", temp = "Tukey")) > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp + envir, data = waste[seq(from = 1, to = 29, by = 2), ]) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) envir: e2 - e1 == 0 0.8767 1.2013 0.730 0.4864 envir: e3 - e1 == 0 1.4933 1.2013 1.243 0.2490 envir: e4 - e1 == 0 1.4033 1.2013 1.168 0.2764 envir: e5 - e1 == 0 3.4133 1.2013 2.841 0.0218 * envir: e3 - e2 == 0 0.6167 1.2013 0.513 0.6216 envir: e4 - e2 == 0 0.5267 1.2013 0.438 0.6727 envir: e5 - e2 == 0 2.5367 1.2013 2.112 0.0677 . envir: e4 - e3 == 0 -0.0900 1.2013 -0.075 0.9421 envir: e5 - e3 == 0 1.9200 1.2013 1.598 0.1487 envir: e5 - e4 == 0 2.0100 1.2013 1.673 0.1328 temp: t2 - t1 == 0 0.0080 0.9305 0.009 0.9934 temp: t3 - t1 == 0 2.7120 0.9305 2.914 0.0195 * temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.0197 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp + envir, data = waste[seq(from = 1, to = 29, by = 2), ]) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) envir: e2 - e1 == 0 0.8767 1.2013 0.730 1.000 envir: e3 - e1 == 0 1.4933 1.2013 1.243 1.000 envir: e4 - e1 == 0 1.4033 1.2013 1.168 1.000 envir: e5 - e1 == 0 3.4133 1.2013 2.841 0.253 envir: e3 - e2 == 0 0.6167 1.2013 0.513 1.000 envir: e4 - e2 == 0 0.5267 1.2013 0.438 1.000 envir: e5 - e2 == 0 2.5367 1.2013 2.112 0.474 envir: e4 - e3 == 0 -0.0900 1.2013 -0.075 1.000 envir: e5 - e3 == 0 1.9200 1.2013 1.598 0.743 envir: e5 - e4 == 0 2.0100 1.2013 1.673 0.664 temp: t2 - t1 == 0 0.0080 0.9305 0.009 1.000 temp: t3 - t1 == 0 2.7120 0.9305 2.914 0.253 temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.253 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp + envir, data = waste[seq(from = 1, to = 29, by = 2), ]) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) envir: e2 - e1 == 0 0.8767 1.2013 0.730 0.846 envir: e3 - e1 == 0 1.4933 1.2013 1.243 0.694 envir: e4 - e1 == 0 1.4033 1.2013 1.168 0.694 envir: e5 - e1 == 0 3.4133 1.2013 2.841 0.134 envir: e3 - e2 == 0 0.6167 1.2013 0.513 0.944 envir: e4 - e2 == 0 0.5267 1.2013 0.438 0.944 envir: e5 - e2 == 0 2.5367 1.2013 2.112 0.267 envir: e4 - e3 == 0 -0.0900 1.2013 -0.075 0.996 envir: e5 - e3 == 0 1.9200 1.2013 1.598 0.458 envir: e5 - e4 == 0 2.0100 1.2013 1.673 0.420 temp: t2 - t1 == 0 0.0080 0.9305 0.009 0.996 temp: t3 - t1 == 0 2.7120 0.9305 2.914 0.134 temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.134 (Adjusted p values reported -- Westfall method) > > > ### drug data, page 187 > > amod <- aov(response ~ drug * disease, data = drug) > > # page 188 > confint(glht(amod, linfct = mcp(drug = "Tukey"))) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ drug * disease, data = drug) Quantile = 2.6632 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr d2 - d1 == 0 -1.3333 -18.2815 15.6148 d3 - d1 == 0 -13.0000 -32.7912 6.7912 d4 - d1 == 0 -15.7333 -32.6815 1.2148 d3 - d2 == 0 -11.6667 -32.1069 8.7736 d4 - d2 == 0 -14.4000 -32.1018 3.3018 d4 - d3 == 0 -2.7333 -23.1736 17.7069 Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > > > ### detergents data, page 189 > > amod <- aov(plates ~ block + detergent, data = detergent) > > gh <- glht(amod, linfct = mcp(detergent = "Tukey")) > > # page 190 -- OK > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Quantile = 3.0638 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr d2 - d1 == 0 -2.1333 -4.7926 0.5259 d3 - d1 == 0 3.6000 0.9407 6.2593 d4 - d1 == 0 2.2000 -0.4593 4.8593 d5 - d1 == 0 -4.3333 -6.9926 -1.6741 d3 - d2 == 0 5.7333 3.0741 8.3926 d4 - d2 == 0 4.3333 1.6741 6.9926 d5 - d2 == 0 -2.2000 -4.8593 0.4593 d4 - d3 == 0 -1.4000 -4.0593 1.2593 d5 - d3 == 0 -7.9333 -10.5926 -5.2741 d5 - d4 == 0 -6.5333 -9.1926 -3.8741 > > # page 192 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) d2 - d1 == 0 -2.1333 0.8679 -2.458 0.025762 * d3 - d1 == 0 3.6000 0.8679 4.148 0.000757 *** d4 - d1 == 0 2.2000 0.8679 2.535 0.022075 * d5 - d1 == 0 -4.3333 0.8679 -4.993 0.000133 *** d3 - d2 == 0 5.7333 0.8679 6.606 6.05e-06 *** d4 - d2 == 0 4.3333 0.8679 4.993 0.000133 *** d5 - d2 == 0 -2.2000 0.8679 -2.535 0.022075 * d4 - d3 == 0 -1.4000 0.8679 -1.613 0.126291 d5 - d3 == 0 -7.9333 0.8679 -9.140 9.45e-08 *** d5 - d4 == 0 -6.5333 0.8679 -7.527 1.21e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) d2 - d1 == 0 -2.1333 0.8679 -2.458 0.051524 . d3 - d1 == 0 3.6000 0.8679 4.148 0.003028 ** d4 - d1 == 0 2.2000 0.8679 2.535 0.044149 * d5 - d1 == 0 -4.3333 0.8679 -4.993 0.000531 *** d3 - d2 == 0 5.7333 0.8679 6.606 3.63e-05 *** d4 - d2 == 0 4.3333 0.8679 4.993 0.000531 *** d5 - d2 == 0 -2.2000 0.8679 -2.535 0.044149 * d4 - d3 == 0 -1.4000 0.8679 -1.613 0.126291 d5 - d3 == 0 -7.9333 0.8679 -9.140 9.45e-07 *** d5 - d4 == 0 -6.5333 0.8679 -7.527 7.26e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) d2 - d1 == 0 -2.1333 0.8679 -2.458 0.05002 . d3 - d1 == 0 3.6000 0.8679 4.148 0.00283 ** d4 - d1 == 0 2.2000 0.8679 2.535 0.04297 * d5 - d1 == 0 -4.3333 0.8679 -4.993 < 0.001 *** d3 - d2 == 0 5.7333 0.8679 6.606 < 0.001 *** d4 - d2 == 0 4.3333 0.8679 4.993 < 0.001 *** d5 - d2 == 0 -2.2000 0.8679 -2.535 0.04297 * d4 - d3 == 0 -1.4000 0.8679 -1.613 0.12629 d5 - d3 == 0 -7.9333 0.8679 -9.140 < 0.001 *** d5 - d4 == 0 -6.5333 0.8679 -7.527 < 0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### pigs data, page 195 > > amod <- aov(gain ~ pen + feed * sex + initial, data = pigs) > > S <- matrix(c(1, -1), ncol = 2, dimnames = list("F-M", c("F", "M"))) > gh <- glht(amod, linfct = mcp(feed = "Tukey", sex = S)) Warning messages: 1: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate 2: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > gh$linfct <- rbind(gh$linfct, "initial" = as.numeric(names(coef(amod)) == "initial")) > gh$rhs <- c(gh$rhs, 0) > > # page 194 -- OK > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Quantile = 2.7781 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr feed: f2 - f1 == 0 -0.30153 -1.19808 0.59502 feed: f3 - f1 == 0 -0.62490 -1.51104 0.26124 feed: f3 - f2 == 0 -0.32337 -1.23010 0.58337 F-M == 0 0.29931 -0.59950 1.19812 initial == 0 0.08888 0.02242 0.15533 > > # page 195 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) feed: f2 - f1 == 0 -0.30153 0.32272 -0.934 0.36186 feed: f3 - f1 == 0 -0.62490 0.31898 -1.959 0.06495 . feed: f3 - f2 == 0 -0.32337 0.32639 -0.991 0.33426 F-M == 0 0.29931 0.32354 0.925 0.36651 initial == 0 0.08888 0.02392 3.715 0.00147 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) feed: f2 - f1 == 0 -0.30153 0.32272 -0.934 0.72371 feed: f3 - f1 == 0 -0.62490 0.31898 -1.959 0.25978 feed: f3 - f2 == 0 -0.32337 0.32639 -0.991 0.66852 F-M == 0 0.29931 0.32354 0.925 0.72371 initial == 0 0.08888 0.02392 3.715 0.00734 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Linear Hypotheses: Estimate Std. Error t value Pr(>|t|) feed: f2 - f1 == 0 -0.30153 0.32272 -0.934 0.55422 feed: f3 - f1 == 0 -0.62490 0.31898 -1.959 0.18910 feed: f3 - f2 == 0 -0.32337 0.32639 -0.991 0.55048 F-M == 0 0.29931 0.32354 0.925 0.55422 initial == 0 0.08888 0.02392 3.715 0.00669 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### respiratory, page 196, program 9.14 > > amod <- aov(score ~ treatment:agegroup:inithealth - 1, data = respiratory) > > CA <- c(13, 0, 11, 0, 13, 0, 17, 0) > CP <- c( 0, 14, 0, 12, 0, 19, 0, 12) > CA <- CA/sum(CA) > CP <- CP/sum(CP) > C1 <- CP-CA > > CAO <- c(13, 0, 0, 0, 13, 0, 0, 0) > CPO <- c( 0, 14, 0, 0, 0, 19, 0, 0) > CAO <- CAO/sum(CAO) > CPO <- CPO/sum(CPO) > C2 <- CPO - CAO > > CAY <- c(0, 0, 11, 0, 0, 0, 17, 0) > CPY <- c(0, 0, 0, 12, 0, 0, 0, 12) > CAY <- CAY/sum(CAY) > CPY <- CPY/sum(CPY) > C3 <- CPY - CAY > > CAG <- c(13, 0, 11, 0, 0, 0, 0, 0) > CPG <- c( 0, 14, 0, 12, 0, 0, 0, 0) > CAG <- CAG/sum(CAG) > CPG <- CPG/sum(CPG) > C4 <- CPG - CAG > > CAP <- c(0, 0, 0, 0, 13, 0, 17, 0 ) > CPP <- c(0, 0, 0, 0, 0, 19, 0, 12 ) > CAP <- CAP/sum(CAP) > CPP <- CPP/sum(CPP) > C5 <- CPP - CAP > > C6 <- c(-1, 1, 0, 0, 0, 0, 0, 0) > C7 <- c( 0, 0, 0, 0, -1, 1, 0, 0) > C8 <- c( 0, 0, -1, 1, 0, 0, 0, 0) > C9 <- c( 0, 0, 0, 0, 0, 0, -1, 1) > > C <- rbind(C1, C2, C3, C4, C5, C6, C7, C8, C9) > rownames(C) <- c("Overall", "Older", "Younger", "Good Init", "Poor Init", + "Old x Good", "Old x Poor", "Young x Good", "Young x Poor") > > gh <- glht(amod, linfct = -C, alternative = "greater") > > # page 198 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = score ~ treatment:agegroup:inithealth - 1, data = respiratory) Linear Hypotheses: Estimate Std. Error t value Pr(>t) Overall <= 0 0.7360 0.1908 3.857 0.000100 *** Older <= 0 1.0733 0.2635 4.074 4.55e-05 *** Younger <= 0 0.3190 0.2795 1.142 0.128149 Good Init <= 0 0.6093 0.2844 2.142 0.017263 * Poor Init <= 0 0.8611 0.2573 3.346 0.000572 *** Old x Good <= 0 1.2187 0.3870 3.149 0.001072 ** Old x Poor <= 0 0.8154 0.3616 2.255 0.013135 * Young x Good <= 0 -0.1045 0.4194 -0.249 0.598177 Young x Poor <= 0 0.8696 0.3788 2.296 0.011864 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = score ~ treatment:agegroup:inithealth - 1, data = respiratory) Linear Hypotheses: Estimate Std. Error t value Pr(>t) Overall <= 0 0.7360 0.1908 3.857 0.00060 *** Older <= 0 1.0733 0.2635 4.074 0.00041 *** Younger <= 0 0.3190 0.2795 1.142 0.25630 Good Init <= 0 0.6093 0.2844 2.142 0.05932 . Poor Init <= 0 0.8611 0.2573 3.346 0.00343 ** Old x Good <= 0 1.2187 0.3870 3.149 0.00643 ** Old x Poor <= 0 0.8154 0.3616 2.255 0.05932 . Young x Good <= 0 -0.1045 0.4194 -0.249 0.59818 Young x Poor <= 0 0.8696 0.3788 2.296 0.05932 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = score ~ treatment:agegroup:inithealth - 1, data = respiratory) Linear Hypotheses: Estimate Std. Error t value Pr(>t) Overall <= 0 0.7360 0.1908 3.857 <0.01 *** Older <= 0 1.0733 0.2635 4.074 <0.01 *** Younger <= 0 0.3190 0.2795 1.142 0.1955 Good Init <= 0 0.6093 0.2844 2.142 0.0487 * Poor Init <= 0 0.8611 0.2573 3.346 <0.01 ** Old x Good <= 0 1.2187 0.3870 3.149 <0.01 ** Old x Poor <= 0 0.8154 0.3616 2.255 0.0487 * Young x Good <= 0 -0.1045 0.4194 -0.249 0.5982 Young x Poor <= 0 0.8696 0.3788 2.296 0.0487 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > ### wine data, page 199 > > amod <- glm(purchase ~ customertype + light + music + customertype:light + + customertype:music + light:music + customertype:light:music + + handle + examine, data = wine, family = binomial()) > > # page 200: FIXME (SS3???) > > ### wloss data, page 205 > > library("lme4") Loading required package: lattice Loading required package: Matrix > lmod <- lmer(wloss ~ diet + (1 | i), data = wloss, model = TRUE) Warning message: In checkArgs("lmer", model = TRUE) : extra argument(s) ‘model’ disregarded > > gh <- glht(lmod, mcp(diet = "Tukey")) > > # page 205 -- FIXME: df??? > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = wloss ~ diet + (1 | i), data = wloss, model = TRUE) Quantile = 2.7282 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr B - A == 0 -1.030000 -2.188551 0.128551 C - A == 0 -1.780000 -2.938551 -0.621449 D - A == 0 -2.780000 -3.938551 -1.621449 E - A == 0 0.120000 -1.038551 1.278551 C - B == 0 -0.750000 -1.908551 0.408551 D - B == 0 -1.750000 -2.908551 -0.591449 E - B == 0 1.150000 -0.008551 2.308551 D - C == 0 -1.000000 -2.158551 0.158551 E - C == 0 1.900000 0.741449 3.058551 E - D == 0 2.900000 1.741449 4.058551 > > # page 207 / 208 -- FIXME: df??? > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = wloss ~ diet + (1 | i), data = wloss, model = TRUE) Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) B - A == 0 -1.0300 0.4247 -2.425 0.1085 C - A == 0 -1.7800 0.4247 -4.192 <0.001 *** D - A == 0 -2.7800 0.4247 -6.546 <0.001 *** E - A == 0 0.1200 0.4247 0.283 0.9986 C - B == 0 -0.7500 0.4247 -1.766 0.3935 D - B == 0 -1.7500 0.4247 -4.121 <0.001 *** E - B == 0 1.1500 0.4247 2.708 0.0526 . D - C == 0 -1.0000 0.4247 -2.355 0.1279 E - C == 0 1.9000 0.4247 4.474 <0.001 *** E - D == 0 2.9000 0.4247 6.829 <0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) > > > ### detergent data, page 211 > > lmod <- lmer(plates ~ detergent + (1 | block), data = detergent, + model = TRUE) Warning message: In checkArgs("lmer", model = TRUE) : extra argument(s) ‘model’ disregarded > > ### non-integer df are not allowed anymore > if (FALSE) { + gh <- glht(lmod, mcp(detergent = "Tukey"), df = 17.6) + + # page 211 -- FIXME: df??? / inaccuracies? + confint(gh) + } > > > ### waste data > > lmod <- lmer(waste ~ temp + (1 | envir) + (1 | envir : temp), + data = waste) > > gh <- glht(lmod, mcp(temp = "Tukey"), df = 8) > > # page 213 -- OK > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = waste ~ temp + (1 | envir) + (1 | envir:temp), data = waste) Quantile = 2.8564 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 -0.24100 -2.40284 1.92084 t3 - t1 == 0 2.01500 -0.14684 4.17684 t3 - t2 == 0 2.25600 0.09416 4.41784 > > > ### halothane data, page 214 > > lmod <- lmer(rate ~ treatment + (1 | dog), data = halothane, + model = TRUE) Warning message: In checkArgs("lmer", model = TRUE) : extra argument(s) ‘model’ disregarded > > gh <- glht(lmod, linfct = mcp(treatment = "Tukey"), df = 18) > > # page 215 -- FIXME: df??? > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Quantile = 2.8264 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr HP - HA == 0 111.0526 71.6231 150.4822 LA - HA == 0 36.4211 -3.0085 75.8506 LP - HA == 0 134.6842 95.2547 174.1138 LA - HP == 0 -74.6316 -114.0611 -35.2020 LP - HP == 0 23.6316 -15.7980 63.0611 LP - LA == 0 98.2632 58.8336 137.6927 > > gh <- glht(lmod, + linfct = mcp(treatment = c("Tukey", + Halo = "-0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP = 0", + CO2 = "0.5 * HA -0.5 * HP + 0.5 * LA -0.5 * LP = 0", + Interaction = "HA - HP - LA + LP = 0"))) > > # page 217 -- FIXME: df? > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Linear Hypotheses: Estimate Std. Error z value HP - HA == 0 111.053 13.950 7.961 LA - HA == 0 36.421 13.950 2.611 LP - HA == 0 134.684 13.950 9.655 LA - HP == 0 -74.632 13.950 -5.350 LP - HP == 0 23.632 13.950 1.694 LP - LA == 0 98.263 13.950 7.044 -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 30.026 9.864 3.044 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 -104.658 9.864 -10.610 HA - HP - LA + LP == 0 -12.789 19.729 -0.648 Pr(>|z|) HP - HA == 0 1.78e-15 *** LA - HA == 0 0.00903 ** LP - HA == 0 < 2e-16 *** LA - HP == 0 8.80e-08 *** LP - HP == 0 0.09027 . LP - LA == 0 1.87e-12 *** -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 0.00234 ** 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 < 2e-16 *** HA - HP - LA + LP == 0 0.51681 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Linear Hypotheses: Estimate Std. Error z value HP - HA == 0 111.053 13.950 7.961 LA - HA == 0 36.421 13.950 2.611 LP - HA == 0 134.684 13.950 9.655 LA - HP == 0 -74.632 13.950 -5.350 LP - HP == 0 23.632 13.950 1.694 LP - LA == 0 98.263 13.950 7.044 -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 30.026 9.864 3.044 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 -104.658 9.864 -10.610 HA - HP - LA + LP == 0 -12.789 19.729 -0.648 Pr(>|z|) HP - HA == 0 5.33e-15 *** LA - HA == 0 0.00934 ** LP - HA == 0 < 2e-16 *** LA - HP == 0 1.76e-07 *** LP - HP == 0 0.09027 . LP - LA == 0 5.61e-12 *** -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 0.00934 ** 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 < 2e-16 *** HA - HP - LA + LP == 0 0.51681 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Linear Hypotheses: Estimate Std. Error z value HP - HA == 0 111.053 13.950 7.961 LA - HA == 0 36.421 13.950 2.611 LP - HA == 0 134.684 13.950 9.655 LA - HP == 0 -74.632 13.950 -5.350 LP - HP == 0 23.632 13.950 1.694 LP - LA == 0 98.263 13.950 7.044 -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 30.026 9.864 3.044 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 -104.658 9.864 -10.610 HA - HP - LA + LP == 0 -12.789 19.729 -0.648 Pr(>|z|) HP - HA == 0 < 0.001 *** LA - HA == 0 0.00903 ** LP - HA == 0 < 0.001 *** LA - HP == 0 < 0.001 *** LP - HP == 0 0.09027 . LP - LA == 0 < 0.001 *** -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 0.00744 ** 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 < 0.001 *** HA - HP - LA + LP == 0 0.51681 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### multipleendpoints data, page 218 > > ### lmod <- lmer(y ~ treatment:endpoint + (1 | subject), > ### data = multipleendpoints, model = TRUE) > ### Leading minor of order 9 in downdated X'X is not positive definite > > > ### obesity, page 220 > > ### heart, 222 > > ### _____________________________________________________________________ > > ### add additional examples below (because of the seed) > > > ### choose comparisons at since = 20, page 104 > amod <- aov(score ~ therapy * since + age, data = alz) > gh <- glht(amod, linfct = mcp(therapy = "Tukey")) Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- default contrast might be inappropriate > gh$linfct[,8:11] <- gh$linfct[,8:11] * 2 > confint(gh) Simultaneous Confidence Intervals Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = score ~ therapy * since + age, data = alz) Quantile = 2.8024 95% family-wise confidence level Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 6.1152 -8.6704 20.9008 t3 - t1 == 0 0.6661 -22.5838 23.9159 t4 - t1 == 0 31.4191 13.8714 48.9668 t5 - t1 == 0 44.6310 13.5072 75.7549 t3 - t2 == 0 -5.4491 -29.0482 18.1500 t4 - t2 == 0 25.3039 7.1329 43.4749 t5 - t2 == 0 38.5158 7.1711 69.8606 t4 - t3 == 0 30.7530 5.0313 56.4747 t5 - t3 == 0 43.9650 8.7849 79.1450 t5 - t4 == 0 13.2120 -19.8833 46.3073 > > sessionInfo() R version 3.0.2 (2013-09-25) Platform: x86_64-unknown-linux-gnu (64-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] splines stats graphics grDevices utils datasets methods [8] base other attached packages: [1] lme4_1.0-5 Matrix_1.1-0 lattice_0.20-23 multcomp_1.3-1 [5] TH.data_1.0-2 survival_2.37-4 mvtnorm_0.9-9996 loaded via a namespace (and not attached): [1] grid_3.0.2 MASS_7.3-29 minqa_1.2.1 nlme_3.1-111 sandwich_2.3-0 [6] zoo_1.7-10 > > proc.time() user system elapsed 100.174 0.628 100.870 multcomp/inst/MCMT/MCMT.Rout.save0000644000176200001440000016573714172227610016224 0ustar liggesusers R version 2.6.1 (2007-11-26) Copyright (C) 2007 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ################################################################ > # > # Reproduction of examples presented in > # > # Multiple Comparisons and Multiple Tests > # Using the SAS System > # > # by P. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger > # and Y. Hochberg > # > # SAS Institute Inc., Cary, NC, 1999 > # > ################################################################ > > library("multcomp") Loading required package: mvtnorm > set.seed(290875) > load(system.file("MCMT/MCMT.rda", package = "multcomp")) > > ### weights loss data, page 47 > > amod <- aov(wloss ~ diet, data = wloss) > amod Call: aov(formula = wloss ~ diet, data = wloss) Terms: diet Residuals Sum of Squares 59.8792 44.7040 Deg. of Freedom 4 45 Residual standard error: 0.9967057 Estimated effects may be unbalanced > > gh <- glht(amod, mcp(diet = "Tukey")) > > # page 49 / 50 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = wloss ~ diet, data = wloss) Estimated Quantile = 2.8415 Linear Hypotheses: Estimate lwr upr B - A == 0 -1.0300 -2.2966 0.2366 C - A == 0 -1.7800 -3.0466 -0.5134 D - A == 0 -2.7800 -4.0466 -1.5134 E - A == 0 0.1200 -1.1466 1.3866 C - B == 0 -0.7500 -2.0166 0.5166 D - B == 0 -1.7500 -3.0166 -0.4834 E - B == 0 1.1500 -0.1166 2.4166 D - C == 0 -1.0000 -2.2666 0.2666 E - C == 0 1.9000 0.6334 3.1666 E - D == 0 2.9000 1.6334 4.1666 95% family-wise confidence level > > amod <- aov(wloss ~ diet - 1, data = wloss) > K <- diag(nlevels(wloss$diet)) > rownames(K) <- levels(wloss$diet) > gh <- glht(amod, K) > > # page 61 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Fit: aov(formula = wloss ~ diet - 1, data = wloss) Estimated Quantile = 2.6758 Linear Hypotheses: Estimate lwr upr A == 0 12.0500 11.2066 12.8934 B == 0 11.0200 10.1766 11.8634 C == 0 10.2700 9.4266 11.1134 D == 0 9.2700 8.4266 10.1134 E == 0 12.1700 11.3266 13.0134 95% family-wise confidence level > > > ### tox data, page 56 > > amod <- aov(gain ~ g, data = tox) > amod Call: aov(formula = gain ~ g, data = tox) Terms: g Residuals Sum of Squares 3478.949 4410.101 Deg. of Freedom 6 21 Residual standard error: 14.49154 Estimated effects may be unbalanced > > # page 56 -- OK > gh <- glht(amod, mcp(g = "Dunnett")) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = gain ~ g, data = tox) Estimated Quantile = 2.7909 Linear Hypotheses: Estimate lwr upr g1 - g0 == 0 -9.4800 -38.0785 19.1185 g2 - g0 == 0 -24.9000 -53.4985 3.6985 g3 - g0 == 0 -33.2400 -61.8385 -4.6415 g4 - g0 == 0 -13.5000 -42.0985 15.0985 g5 - g0 == 0 -20.7000 -49.2985 7.8985 g6 - g0 == 0 -31.1400 -59.7385 -2.5415 95% family-wise confidence level > > # page 59 -- OK > gh <- glht(amod, mcp(g = "Dunnett"), alternative = "less") > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = gain ~ g, data = tox) Estimated Quantile = -2.4485 Linear Hypotheses: Estimate lwr upr g1 - g0 >= 0 -9.4800 -Inf 15.6096 g2 - g0 >= 0 -24.9000 -Inf 0.1896 g3 - g0 >= 0 -33.2400 -Inf -8.1504 g4 - g0 >= 0 -13.5000 -Inf 11.5896 g5 - g0 >= 0 -20.7000 -Inf 4.3896 g6 - g0 >= 0 -31.1400 -Inf -6.0504 95% family-wise confidence level > > > ### coupon data, page 62 > > amod <- aov(purchase ~ discount , data = coupon) > > gh <- glht(amod, linfct = mcp(discount = rbind( + linear = c(-3, -1, 1, 3), + quad = c(-2, 2, 2, -2), + cubic = c(-1, 3, -3, 1)))) > > # page 63 -- OK (t^2 = F stats) > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = purchase ~ discount, data = coupon) Linear Hypotheses: Estimate Std. Error t value p value linear == 0 43.974 18.109 2.428 0.0589 . quad == 0 52.820 16.197 3.261 0.0072 ** cubic == 0 -0.802 18.109 -0.044 1.0000 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > > ### recover data, page 66 > > amod <- aov(minutes ~ blanket, data = recover) > > gh <- glht(amod, mcp(blanket = "Tukey")) > > # page 68 -- OK (small differences due to simuation accurary) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Estimated Quantile = 2.6524 Linear Hypotheses: Estimate lwr upr b1 - b0 == 0 -2.1333 -6.3872 2.1205 b2 - b0 == 0 -7.4667 -11.7205 -3.2128 b3 - b0 == 0 -1.6667 -4.0134 0.6801 b2 - b1 == 0 -5.3333 -10.9431 0.2765 b3 - b1 == 0 0.4667 -3.8787 4.8120 b3 - b2 == 0 5.8000 1.4547 10.1453 95% family-wise confidence level > > # page 76 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Linear Hypotheses: Estimate Std. Error t value p value b1 - b0 == 0 -2.1333 1.6038 -1.330 0.53278 b2 - b0 == 0 -7.4667 1.6038 -4.656 < 0.001 *** b3 - b0 == 0 -1.6667 0.8848 -1.884 0.23817 b2 - b1 == 0 -5.3333 2.1150 -2.522 0.06765 . b3 - b1 == 0 0.4667 1.6383 0.285 0.99120 b3 - b2 == 0 5.8000 1.6383 3.540 0.00528 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > gh <- glht(amod, mcp(blanket = "Dunnett")) > > # page 78 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Estimated Quantile = 2.4887 Linear Hypotheses: Estimate lwr upr b1 - b0 == 0 -2.1333 -6.1247 1.8581 b2 - b0 == 0 -7.4667 -11.4581 -3.4753 b3 - b0 == 0 -1.6667 -3.8686 0.5353 95% family-wise confidence level > > # page 79 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Linear Hypotheses: Estimate Std. Error t value p value b1 - b0 == 0 -2.1333 1.6038 -1.330 0.456 b2 - b0 == 0 -7.4667 1.6038 -4.656 <0.001 *** b3 - b0 == 0 -1.6667 0.8848 -1.884 0.182 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > gh <- glht(amod, mcp(blanket = "Dunnett"), alternative = "less") > > # page 80 -- OK > confint(gh, level = 0.9) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Estimated Quantile = -1.8426 Linear Hypotheses: Estimate lwr upr b1 - b0 >= 0 -2.13333 -Inf 0.82186 b2 - b0 >= 0 -7.46667 -Inf -4.51148 b3 - b0 >= 0 -1.66667 -Inf -0.03635 90% family-wise confidence level > > # page 80 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = minutes ~ blanket, data = recover) Linear Hypotheses: Estimate Std. Error t value p value b1 - b0 >= 0 -2.1333 1.6038 -1.330 0.2412 b2 - b0 >= 0 -7.4667 1.6038 -4.656 <1e-04 *** b3 - b0 >= 0 -1.6667 0.8848 -1.884 0.0926 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > # page 80 -- OK (univariate confints!!!) > amod <- aov(minutes ~ blanket - 1, data = recover) > confint(amod, level = 0.9) 5 % 95 % blanketb0 13.822802 15.777198 blanketb1 10.143553 15.189781 blanketb2 4.810219 9.856447 blanketb3 12.004962 14.261704 > > > ### house prices, page 84 > > amod <- aov(price ~ location + sqfeet + age, data = house) > gh <- glht(amod, mcp(location = "Tukey")) > > # page 85 -- OK ( * -1) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Estimated Quantile = 2.7951 Linear Hypotheses: Estimate lwr upr B - A == 0 -22.2032 -27.8202 -16.5862 C - A == 0 -21.5285 -30.7671 -12.2899 D - A == 0 -26.0152 -32.8406 -19.1899 E - A == 0 -29.0893 -35.6447 -22.5340 C - B == 0 0.6747 -9.0564 10.4058 D - B == 0 -3.8120 -11.0969 3.4729 E - B == 0 -6.8861 -14.0890 0.3167 D - C == 0 -4.4867 -14.9245 5.9511 E - C == 0 -7.5608 -17.7259 2.6043 E - D == 0 -3.0741 -11.1245 4.9763 95% family-wise confidence level > > # page 96 -- OK ( * -1) > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -22.2032 2.0096 -11.049 <1e-04 *** C - A == 0 -21.5285 3.3053 -6.513 <1e-04 *** D - A == 0 -26.0152 2.4419 -10.654 <1e-04 *** E - A == 0 -29.0893 2.3453 -12.403 <1e-04 *** C - B == 0 0.6747 3.4815 0.194 0.9997 D - B == 0 -3.8120 2.6063 -1.463 0.5791 E - B == 0 -6.8861 2.5769 -2.672 0.0673 . D - C == 0 -4.4867 3.7343 -1.201 0.7416 E - C == 0 -7.5608 3.6367 -2.079 0.2341 E - D == 0 -3.0741 2.8802 -1.067 0.8153 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = price ~ location + sqfeet + age, data = house) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -22.2032 2.0096 -11.049 8.88e-16 *** C - A == 0 -21.5285 3.3053 -6.513 2.05e-08 *** D - A == 0 -26.0152 2.4419 -10.654 3.55e-15 *** E - A == 0 -29.0893 2.3453 -12.403 < 2e-16 *** C - B == 0 0.6747 3.4815 0.194 0.8470 D - B == 0 -3.8120 2.6063 -1.463 0.1491 E - B == 0 -6.8861 2.5769 -2.672 0.0098 ** D - C == 0 -4.4867 3.7343 -1.201 0.2345 E - C == 0 -7.5608 3.6367 -2.079 0.0421 * E - D == 0 -3.0741 2.8802 -1.067 0.2903 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > > > ### rat growth data, page 99 > > amod <- aov(w4 ~ ., data = ratgrwth) > > gh <- glht(amod, mcp(trt = "Dunnett"), alternative = "less") > > # page 100 -- OK > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = w4 ~ ., data = ratgrwth) Linear Hypotheses: Estimate Std. Error t value p value Thiouracil - Control >= 0 -9.458 3.328 -2.842 0.00982 ** Thyroxin - Control >= 0 -2.113 3.196 -0.661 0.42184 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Dunnett Contrasts Fit: aov(formula = w4 ~ ., data = ratgrwth) Estimated Quantile = -2.06 Linear Hypotheses: Estimate lwr upr Thiouracil - Control >= 0 -9.4583 -Inf -2.6036 Thyroxin - Control >= 0 -2.1128 -Inf 4.4699 95% family-wise confidence level > > > ### Alzheimer data, page 103 > > amod <- aov(score ~ therapy * since + age, data = alz) > > gh <- glht(amod, linfct = mcp(therapy = "Tukey")) Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- please choose appropriate contrast > > ### choose comparisons at since = 10 > gh$linfct[,8:11] <- gh$linfct[,8:11] * 10 > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = score ~ therapy * since + age, data = alz) Estimated Quantile = 2.8283 Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 4.0650 -8.4009 16.5310 t3 - t1 == 0 -6.2937 -22.3424 9.7550 t4 - t1 == 0 27.7577 14.6935 40.8218 t5 - t1 == 0 30.4296 14.2505 46.6088 t3 - t2 == 0 -10.3588 -26.7872 6.0697 t4 - t2 == 0 23.6926 10.0036 37.3816 t5 - t2 == 0 26.3646 9.8522 42.8770 t4 - t3 == 0 34.0514 16.9502 51.1525 t5 - t3 == 0 36.7233 17.9933 55.4533 t5 - t4 == 0 2.6720 -14.5908 19.9347 95% family-wise confidence level > > > > ### litter data, page 109 > > amod <- aov(weight ~ dose + gesttime + number, data = litter) > > K <- rbind("cont-low" = c(1, -1, 0, 0), + "cont-mid" = c(1, 0, -1, 0), + "cont-high" = c(1, 0, 0, -1), + otrend = c(1.5, 0.5, -0.5, -1.5) / 2, + atrend = c(0, 5, 50, 500) - mean(c(0, 5, 50, 500)), + ltrend = -(log(1:4) - mean(log(1:4)))) > K["atrend",] <- K["atrend",] / -max(K["atrend",]) > > gh <- glht(amod, linfct = mcp(dose = K)) > > # page 110 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value p value cont-low == 0 3.3524 1.2908 2.597 0.0115 * cont-mid == 0 2.2909 1.3384 1.712 0.0915 . cont-high == 0 2.6752 1.3343 2.005 0.0490 * otrend == 0 1.7411 1.0433 1.669 0.0998 . atrend == 0 0.8712 1.1322 0.770 0.4442 ltrend == 0 1.9400 0.9616 2.018 0.0476 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > > # page 111 -- OK > gh$alternative <- "greater" > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value p value cont-low <= 0 3.3524 1.2908 2.597 0.00575 ** cont-mid <= 0 2.2909 1.3384 1.712 0.04576 * cont-high <= 0 2.6752 1.3343 2.005 0.02448 * otrend <= 0 1.7411 1.0433 1.669 0.04988 * atrend <= 0 0.8712 1.1322 0.770 0.22212 ltrend <= 0 1.9400 0.9616 2.018 0.02379 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value p value cont-low <= 0 3.3524 1.2908 2.597 0.0209 * cont-mid <= 0 2.2909 1.3384 1.712 0.1376 cont-high <= 0 2.6752 1.3343 2.005 0.0791 . otrend <= 0 1.7411 1.0433 1.669 0.1483 atrend <= 0 0.8712 1.1322 0.770 0.5012 ltrend <= 0 1.9400 0.9616 2.018 0.0773 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Estimated Quantile = 2.2202 Linear Hypotheses: Estimate lwr upr cont-low <= 0 3.3524 0.4867 Inf cont-mid <= 0 2.2909 -0.6806 Inf cont-high <= 0 2.6752 -0.2872 Inf otrend <= 0 1.7411 -0.5753 Inf atrend <= 0 0.8712 -1.6423 Inf ltrend <= 0 1.9400 -0.1948 Inf 95% family-wise confidence level > > # page 174 -- OK > gh$alternative <- "greater" > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = weight ~ dose + gesttime + number, data = litter) Linear Hypotheses: Estimate Std. Error t value p value cont-low <= 0 3.3524 1.2908 2.597 0.0205 * cont-mid <= 0 2.2909 1.3384 1.712 0.0891 . cont-high <= 0 2.6752 1.3343 2.005 0.0454 * otrend <= 0 1.7411 1.0433 1.669 0.0891 . atrend <= 0 0.8712 1.1322 0.770 0.2221 ltrend <= 0 1.9400 0.9616 2.018 0.0396 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### house data -- regression line > > houseA <- subset(house, location == "A") > > lmod <- lm(price ~ sqfeet, data = houseA) > K <- cbind(1, grid <- seq(from = 1000, to = 3000, by = 200)) > rownames(K) <- paste("sqfeet *", grid) > > gh <- glht(lmod, linfct = K) > > # page 123 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Fit: lm(formula = price ~ sqfeet, data = houseA) Estimated Quantile = 2.586 Linear Hypotheses: Estimate lwr upr sqfeet * 1000 == 0 73.4435 63.8822 83.0048 sqfeet * 1200 == 0 81.4959 73.7593 89.2325 sqfeet * 1400 == 0 89.5483 83.5309 95.5656 sqfeet * 1600 == 0 97.6006 93.0751 102.1262 sqfeet * 1800 == 0 105.6530 102.0934 109.2126 sqfeet * 2000 == 0 113.7054 110.1306 117.2801 sqfeet * 2200 == 0 121.7577 117.1965 126.3190 sqfeet * 2400 == 0 129.8101 123.7480 135.8722 sqfeet * 2600 == 0 137.8625 130.0771 145.6478 sqfeet * 2800 == 0 145.9148 136.3028 155.5269 sqfeet * 3000 == 0 153.9672 142.4741 165.4602 95% family-wise confidence level > > > ### patient satisfaction, page 125 > > pat_sat <- pat_sat[order(pat_sat$severe),] > lmod <- lm(satisf ~ age + severe + anxiety, data = pat_sat) > K <- cbind(1, mean(pat_sat$age), pat_sat$severe, mean(pat_sat$anxiety)) > > gh <- glht(lmod, linfct = K) > > ci <- confint(gh) > > # page 127 -- OK > plot(pat_sat$severe, ci$confint[,"Estimate"], + xlab = "Severity", ylab = "Satisfaction", type = "b", + ylim = c(30, 80), xlim = c(45, 60)) > lines(pat_sat$severe, ci$confint[,"lwr"], lty = 2) > lines(pat_sat$severe, ci$confint[,"upr"], lty = 2) > > > ### tire data, page 127 > > amod <- aov(cost ~ make + make:mph - 1, data = tire) > > x <- seq(from = 10, to = 70, by = 5) > K <- cbind(1, -1, x, -x) > rownames(K) <- x > > gh <- glht(amod, linfct = K) > > # page 129 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Estimated Quantile = 2.6476 Linear Hypotheses: Estimate lwr upr 10 == 0 -4.10667 -6.52739 -1.68595 15 == 0 -3.45389 -5.59420 -1.31358 20 == 0 -2.80111 -4.68115 -0.92108 25 == 0 -2.14833 -3.79778 -0.49889 30 == 0 -1.49556 -2.95820 -0.03291 35 == 0 -0.84278 -2.18088 0.49533 40 == 0 -0.19000 -1.48393 1.10393 45 == 0 0.46278 -0.87533 1.80088 50 == 0 1.11556 -0.34709 2.57820 55 == 0 1.76833 0.11889 3.41778 60 == 0 2.42111 0.54108 4.30115 65 == 0 3.07389 0.93358 5.21420 70 == 0 3.72667 1.30595 6.14739 95% family-wise confidence level > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Linear Hypotheses: Estimate Std. Error t value p value 10 == 0 -4.1067 0.9143 -4.492 0.000370 *** 15 == 0 -3.4539 0.8084 -4.272 0.000583 *** 20 == 0 -2.8011 0.7101 -3.945 0.001159 ** 25 == 0 -2.1483 0.6230 -3.448 0.003305 ** 30 == 0 -1.4956 0.5524 -2.707 0.015542 * 35 == 0 -0.8428 0.5054 -1.668 0.114860 40 == 0 -0.1900 0.4887 -0.389 0.702571 45 == 0 0.4628 0.5054 0.916 0.373442 50 == 0 1.1156 0.5524 2.019 0.060533 . 55 == 0 1.7683 0.6230 2.838 0.011862 * 60 == 0 2.4211 0.7101 3.410 0.003587 ** 65 == 0 3.0739 0.8084 3.802 0.001565 ** 70 == 0 3.7267 0.9143 4.076 0.000880 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted()) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = cost ~ make + make:mph - 1, data = tire) Linear Hypotheses: Estimate Std. Error t value p value 10 == 0 -4.1067 0.9143 -4.492 0.00129 ** 15 == 0 -3.4539 0.8084 -4.272 0.00200 ** 20 == 0 -2.8011 0.7101 -3.945 0.00380 ** 25 == 0 -2.1483 0.6230 -3.448 0.01043 * 30 == 0 -1.4956 0.5524 -2.707 0.04465 * 35 == 0 -0.8428 0.5054 -1.668 0.26440 40 == 0 -0.1900 0.4887 -0.389 0.92440 45 == 0 0.4628 0.5054 0.916 0.65305 50 == 0 1.1156 0.5524 2.019 0.15261 55 == 0 1.7683 0.6230 2.838 0.03478 * 60 == 0 2.4211 0.7101 3.410 0.01130 * 65 == 0 3.0739 0.8084 3.802 0.00510 ** 70 == 0 3.7267 0.9143 4.076 0.00293 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > > > ### cholesterol data, page 153 > > amod <- aov(response ~ trt - 1, data = cholesterol) > > gh <- glht(amod, linfct = mcp(trt = "Tukey")) > > # page 171 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 0.000348 *** C - A == 0 -8.573 1.443 -5.939 3.84e-07 *** D - A == 0 -11.723 1.443 -8.122 2.29e-10 *** E - A == 0 -15.166 1.443 -10.507 1.08e-13 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * D - B == 0 -6.136 1.443 -4.251 0.000106 *** E - B == 0 -9.579 1.443 -6.637 3.53e-08 *** D - C == 0 -3.150 1.443 -2.182 0.034352 * E - C == 0 -6.593 1.443 -4.568 3.82e-05 *** E - D == 0 -3.443 1.443 -2.385 0.021333 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 0.000697 *** C - A == 0 -8.573 1.443 -5.939 1.54e-06 *** D - A == 0 -11.723 1.443 -8.122 1.38e-09 *** E - A == 0 -15.166 1.443 -10.507 1.08e-12 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * D - B == 0 -6.136 1.443 -4.251 0.000317 *** E - B == 0 -9.579 1.443 -6.637 2.12e-07 *** D - C == 0 -3.150 1.443 -2.182 0.042666 * E - C == 0 -6.593 1.443 -4.568 0.000153 *** E - D == 0 -3.443 1.443 -2.385 0.042666 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 <0.001 *** C - A == 0 -8.573 1.443 -5.939 <0.001 *** D - A == 0 -11.723 1.443 -8.122 <0.001 *** E - A == 0 -15.166 1.443 -10.507 <0.001 *** C - B == 0 -2.986 1.443 -2.069 0.0443 * D - B == 0 -6.136 1.443 -4.251 <0.001 *** E - B == 0 -9.579 1.443 -6.637 <0.001 *** D - C == 0 -3.150 1.443 -2.182 0.0420 * E - C == 0 -6.593 1.443 -4.568 <0.001 *** E - D == 0 -3.443 1.443 -2.385 0.0420 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > gh <- glht(amod, linfct = mcp(trt = c("B - A = 0", + "C - A = 0", + "C - B = 0", + "3 * D - A - B - C = 0", + "3 * E - A - B - C = 0"))) > > # page 172 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 0.000348 *** C - A == 0 -8.573 1.443 -5.939 3.84e-07 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * 3 * D - A - B - C == 0 -21.009 3.536 -5.942 3.81e-07 *** 3 * E - A - B - C == 0 -31.338 3.536 -8.864 1.98e-11 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 0.000348 *** C - A == 0 -8.573 1.443 -5.939 1.52e-06 *** C - B == 0 -2.986 1.443 -2.069 0.044316 * 3 * D - A - B - C == 0 -21.009 3.536 -5.942 1.52e-06 *** 3 * E - A - B - C == 0 -31.338 3.536 -8.864 9.88e-11 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: User-defined Contrasts Fit: aov(formula = response ~ trt - 1, data = cholesterol) Linear Hypotheses: Estimate Std. Error t value p value B - A == 0 -5.586 1.443 -3.870 <0.001 *** C - A == 0 -8.573 1.443 -5.939 <0.001 *** C - B == 0 -2.986 1.443 -2.069 0.0443 * 3 * D - A - B - C == 0 -21.009 3.536 -5.942 <0.001 *** 3 * E - A - B - C == 0 -31.338 3.536 -8.864 <0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### waste data, page 177 > > amod <- aov(waste ~ temp * envir, data = waste) > > # page 179 -- OK ( * -1) > confint(glht(amod, linfct = mcp(temp = "Tukey"))) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Estimated Quantile = 2.5966 Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 -0.2410 -1.4997 1.0177 t3 - t1 == 0 2.0150 0.7563 3.2737 t3 - t2 == 0 2.2560 0.9973 3.5147 95% family-wise confidence level > confint(glht(amod, linfct = mcp(envir = "Tukey"))) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Estimated Quantile = 3.088 Linear Hypotheses: Estimate lwr upr e2 - e1 == 0 1.38333 -0.54904 3.31570 e3 - e1 == 0 1.68500 -0.24737 3.61737 e4 - e1 == 0 2.01833 0.08596 3.95070 e5 - e1 == 0 2.75333 0.82096 4.68570 e3 - e2 == 0 0.30167 -1.63070 2.23404 e4 - e2 == 0 0.63500 -1.29737 2.56737 e5 - e2 == 0 1.37000 -0.56237 3.30237 e4 - e3 == 0 0.33333 -1.59904 2.26570 e5 - e3 == 0 1.06833 -0.86404 3.00070 e5 - e4 == 0 0.73500 -1.19737 2.66737 95% family-wise confidence level > > gh <- glht(amod, linfct = mcp(envir = "Tukey", temp = "Tukey")) > > # page 181 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 1.3833 0.6258 2.211 0.043017 * envir: e3 - e1 == 0 1.6850 0.6258 2.693 0.016703 * envir: e4 - e1 == 0 2.0183 0.6258 3.225 0.005662 ** envir: e5 - e1 == 0 2.7533 0.6258 4.400 0.000517 *** envir: e3 - e2 == 0 0.3017 0.6258 0.482 0.636715 envir: e4 - e2 == 0 0.6350 0.6258 1.015 0.326318 envir: e5 - e2 == 0 1.3700 0.6258 2.189 0.044802 * envir: e4 - e3 == 0 0.3333 0.6258 0.533 0.602063 envir: e5 - e3 == 0 1.0683 0.6258 1.707 0.108391 envir: e5 - e4 == 0 0.7350 0.6258 1.175 0.258487 temp: t2 - t1 == 0 -0.2410 0.4847 -0.497 0.626263 temp: t3 - t1 == 0 2.0150 0.4847 4.157 0.000843 *** temp: t3 - t2 == 0 2.2560 0.4847 4.654 0.000312 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 1.3833 0.6258 2.211 0.21508 envir: e3 - e1 == 0 1.6850 0.6258 2.693 0.08351 . envir: e4 - e1 == 0 2.0183 0.6258 3.225 0.03964 * envir: e5 - e1 == 0 2.7533 0.6258 4.400 0.00569 ** envir: e3 - e2 == 0 0.3017 0.6258 0.482 1.00000 envir: e4 - e2 == 0 0.6350 0.6258 1.015 1.00000 envir: e5 - e2 == 0 1.3700 0.6258 2.189 0.31361 envir: e4 - e3 == 0 0.3333 0.6258 0.533 1.00000 envir: e5 - e3 == 0 1.0683 0.6258 1.707 0.43356 envir: e5 - e4 == 0 0.7350 0.6258 1.175 0.77546 temp: t2 - t1 == 0 -0.2410 0.4847 -0.497 1.00000 temp: t3 - t1 == 0 2.0150 0.4847 4.157 0.00590 ** temp: t3 - t2 == 0 2.2560 0.4847 4.654 0.00405 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp * envir, data = waste) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 1.3833 0.6258 2.211 0.16945 envir: e3 - e1 == 0 1.6850 0.6258 2.693 0.07066 . envir: e4 - e1 == 0 2.0183 0.6258 3.225 0.03100 * envir: e5 - e1 == 0 2.7533 0.6258 4.400 0.00455 ** envir: e3 - e2 == 0 0.3017 0.6258 0.482 0.85632 envir: e4 - e2 == 0 0.6350 0.6258 1.015 0.70669 envir: e5 - e2 == 0 1.3700 0.6258 2.189 0.20300 envir: e4 - e3 == 0 0.3333 0.6258 0.533 0.83721 envir: e5 - e3 == 0 1.0683 0.6258 1.707 0.30999 envir: e5 - e4 == 0 0.7350 0.6258 1.175 0.57577 temp: t2 - t1 == 0 -0.2410 0.4847 -0.497 0.85632 temp: t3 - t1 == 0 2.0150 0.4847 4.157 0.00517 ** temp: t3 - t2 == 0 2.2560 0.4847 4.654 0.00330 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > # page 186 -- OK > amod <- aov(waste ~ temp + envir, + data = waste[seq(from = 1, to = 29, by = 2),]) > > gh <- glht(amod, linfct = mcp(envir = "Tukey", temp = "Tukey")) > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp + envir, data = waste[seq(from = 1, to = 29, by = 2), ]) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 0.8767 1.2013 0.730 0.4864 envir: e3 - e1 == 0 1.4933 1.2013 1.243 0.2490 envir: e4 - e1 == 0 1.4033 1.2013 1.168 0.2764 envir: e5 - e1 == 0 3.4133 1.2013 2.841 0.0218 * envir: e3 - e2 == 0 0.6167 1.2013 0.513 0.6216 envir: e4 - e2 == 0 0.5267 1.2013 0.438 0.6727 envir: e5 - e2 == 0 2.5367 1.2013 2.112 0.0677 . envir: e4 - e3 == 0 -0.0900 1.2013 -0.075 0.9421 envir: e5 - e3 == 0 1.9200 1.2013 1.598 0.1487 envir: e5 - e4 == 0 2.0100 1.2013 1.673 0.1328 temp: t2 - t1 == 0 0.0080 0.9305 0.009 0.9934 temp: t3 - t1 == 0 2.7120 0.9305 2.914 0.0195 * temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.0197 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp + envir, data = waste[seq(from = 1, to = 29, by = 2), ]) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 0.8767 1.2013 0.730 1.000 envir: e3 - e1 == 0 1.4933 1.2013 1.243 1.000 envir: e4 - e1 == 0 1.4033 1.2013 1.168 1.000 envir: e5 - e1 == 0 3.4133 1.2013 2.841 0.253 envir: e3 - e2 == 0 0.6167 1.2013 0.513 1.000 envir: e4 - e2 == 0 0.5267 1.2013 0.438 1.000 envir: e5 - e2 == 0 2.5367 1.2013 2.112 0.474 envir: e4 - e3 == 0 -0.0900 1.2013 -0.075 1.000 envir: e5 - e3 == 0 1.9200 1.2013 1.598 0.743 envir: e5 - e4 == 0 2.0100 1.2013 1.673 0.664 temp: t2 - t1 == 0 0.0080 0.9305 0.009 1.000 temp: t3 - t1 == 0 2.7120 0.9305 2.914 0.253 temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.253 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = waste ~ temp + envir, data = waste[seq(from = 1, to = 29, by = 2), ]) Linear Hypotheses: Estimate Std. Error t value p value envir: e2 - e1 == 0 0.8767 1.2013 0.730 0.846 envir: e3 - e1 == 0 1.4933 1.2013 1.243 0.694 envir: e4 - e1 == 0 1.4033 1.2013 1.168 0.694 envir: e5 - e1 == 0 3.4133 1.2013 2.841 0.135 envir: e3 - e2 == 0 0.6167 1.2013 0.513 0.944 envir: e4 - e2 == 0 0.5267 1.2013 0.438 0.944 envir: e5 - e2 == 0 2.5367 1.2013 2.112 0.267 envir: e4 - e3 == 0 -0.0900 1.2013 -0.075 0.996 envir: e5 - e3 == 0 1.9200 1.2013 1.598 0.458 envir: e5 - e4 == 0 2.0100 1.2013 1.673 0.420 temp: t2 - t1 == 0 0.0080 0.9305 0.009 0.996 temp: t3 - t1 == 0 2.7120 0.9305 2.914 0.135 temp: t3 - t2 == 0 2.7040 0.9305 2.906 0.135 (Adjusted p values reported -- Westfall method) > > > ### drug data, page 187 > > amod <- aov(response ~ drug * disease, data = drug) > > # page 188 > confint(glht(amod, linfct = mcp(drug = "Tukey"))) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = response ~ drug * disease, data = drug) Estimated Quantile = 2.6635 Linear Hypotheses: Estimate lwr upr d2 - d1 == 0 0.5611 -9.8011 10.9233 d3 - d1 == 0 -16.2500 -27.2902 -5.2098 d4 - d1 == 0 -12.4500 -22.6000 -2.3000 d3 - d2 == 0 -16.8111 -27.8513 -5.7709 d4 - d2 == 0 -13.0111 -23.1611 -2.8611 d4 - d3 == 0 3.8000 -7.0413 14.6413 95% family-wise confidence level > > > ### detergents data, page 189 > > amod <- aov(plates ~ block + detergent, data = detergent) > > gh <- glht(amod, linfct = mcp(detergent = "Tukey")) > > # page 190 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Estimated Quantile = 3.0633 Linear Hypotheses: Estimate lwr upr d2 - d1 == 0 -2.1333 -4.7921 0.5255 d3 - d1 == 0 3.6000 0.9412 6.2588 d4 - d1 == 0 2.2000 -0.4588 4.8588 d5 - d1 == 0 -4.3333 -6.9921 -1.6745 d3 - d2 == 0 5.7333 3.0745 8.3921 d4 - d2 == 0 4.3333 1.6745 6.9921 d5 - d2 == 0 -2.2000 -4.8588 0.4588 d4 - d3 == 0 -1.4000 -4.0588 1.2588 d5 - d3 == 0 -7.9333 -10.5921 -5.2745 d5 - d4 == 0 -6.5333 -9.1921 -3.8745 95% family-wise confidence level > > # page 192 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value p value d2 - d1 == 0 -2.1333 0.8679 -2.458 0.025762 * d3 - d1 == 0 3.6000 0.8679 4.148 0.000757 *** d4 - d1 == 0 2.2000 0.8679 2.535 0.022075 * d5 - d1 == 0 -4.3333 0.8679 -4.993 0.000133 *** d3 - d2 == 0 5.7333 0.8679 6.606 6.05e-06 *** d4 - d2 == 0 4.3333 0.8679 4.993 0.000133 *** d5 - d2 == 0 -2.2000 0.8679 -2.535 0.022075 * d4 - d3 == 0 -1.4000 0.8679 -1.613 0.126291 d5 - d3 == 0 -7.9333 0.8679 -9.140 9.45e-08 *** d5 - d4 == 0 -6.5333 0.8679 -7.527 1.21e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value p value d2 - d1 == 0 -2.1333 0.8679 -2.458 0.051524 . d3 - d1 == 0 3.6000 0.8679 4.148 0.003028 ** d4 - d1 == 0 2.2000 0.8679 2.535 0.044149 * d5 - d1 == 0 -4.3333 0.8679 -4.993 0.000531 *** d3 - d2 == 0 5.7333 0.8679 6.606 3.63e-05 *** d4 - d2 == 0 4.3333 0.8679 4.993 0.000398 *** d5 - d2 == 0 -2.2000 0.8679 -2.535 0.044149 * d4 - d3 == 0 -1.4000 0.8679 -1.613 0.126291 d5 - d3 == 0 -7.9333 0.8679 -9.140 9.45e-07 *** d5 - d4 == 0 -6.5333 0.8679 -7.527 7.26e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = plates ~ block + detergent, data = detergent) Linear Hypotheses: Estimate Std. Error t value p value d2 - d1 == 0 -2.1333 0.8679 -2.458 0.05002 . d3 - d1 == 0 3.6000 0.8679 4.148 0.00272 ** d4 - d1 == 0 2.2000 0.8679 2.535 0.04297 * d5 - d1 == 0 -4.3333 0.8679 -4.993 < 0.001 *** d3 - d2 == 0 5.7333 0.8679 6.606 < 0.001 *** d4 - d2 == 0 4.3333 0.8679 4.993 < 0.001 *** d5 - d2 == 0 -2.2000 0.8679 -2.535 0.04297 * d4 - d3 == 0 -1.4000 0.8679 -1.613 0.12629 d5 - d3 == 0 -7.9333 0.8679 -9.140 < 0.001 *** d5 - d4 == 0 -6.5333 0.8679 -7.527 < 0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### pigs data, page 195 > > amod <- aov(gain ~ pen + feed * sex + initial, data = pigs) > > S <- matrix(c(1, -1), ncol = 2, dimnames = list("F-M", c("F", "M"))) > gh <- glht(amod, linfct = mcp(feed = "Tukey", sex = S)) > gh$linfct <- rbind(gh$linfct, "initial" = as.numeric(names(coef(amod)) == "initial")) > gh$rhs <- c(gh$rhs, 0) > > # page 194 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Estimated Quantile = 2.7965 Linear Hypotheses: Estimate lwr upr feed: f2 - f1 == 0 -0.44099 -1.07347 0.19149 feed: f3 - f1 == 0 -0.67300 -1.30261 -0.04339 feed: f3 - f2 == 0 -0.23201 -0.86449 0.40047 F-M == 0 0.42435 -0.10799 0.95668 initial == 0 0.08888 0.02198 0.15577 95% family-wise confidence level > > # page 195 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Linear Hypotheses: Estimate Std. Error t value p value feed: f2 - f1 == 0 -0.44099 0.22617 -1.950 0.06611 . feed: f3 - f1 == 0 -0.67300 0.22514 -2.989 0.00754 ** feed: f3 - f2 == 0 -0.23201 0.22617 -1.026 0.31786 F-M == 0 0.42435 0.19036 2.229 0.03807 * initial == 0 0.08888 0.02392 3.715 0.00147 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Linear Hypotheses: Estimate Std. Error t value p value feed: f2 - f1 == 0 -0.44099 0.22617 -1.950 0.07614 . feed: f3 - f1 == 0 -0.67300 0.22514 -2.989 0.03016 * feed: f3 - f2 == 0 -0.23201 0.22617 -1.026 0.31786 F-M == 0 0.42435 0.19036 2.229 0.07614 . initial == 0 0.08888 0.02392 3.715 0.00734 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = gain ~ pen + feed * sex + initial, data = pigs) Linear Hypotheses: Estimate Std. Error t value p value feed: f2 - f1 == 0 -0.44099 0.22617 -1.950 0.07358 . feed: f3 - f1 == 0 -0.67300 0.22514 -2.989 0.02667 * feed: f3 - f2 == 0 -0.23201 0.22617 -1.026 0.31786 F-M == 0 0.42435 0.19036 2.229 0.07358 . initial == 0 0.08888 0.02392 3.715 0.00677 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### respiratory, page 196, program 9.14 > > amod <- aov(score ~ treatment:agegroup:inithealth - 1, data = respiratory) > > CA <- c(13, 0, 11, 0, 13, 0, 17, 0) > CP <- c( 0, 14, 0, 12, 0, 19, 0, 12) > CA <- CA/sum(CA) > CP <- CP/sum(CP) > C1 <- CP-CA > > CAO <- c(13, 0, 0, 0, 13, 0, 0, 0) > CPO <- c( 0, 14, 0, 0, 0, 19, 0, 0) > CAO <- CAO/sum(CAO) > CPO <- CPO/sum(CPO) > C2 <- CPO - CAO > > CAY <- c(0, 0, 11, 0, 0, 0, 17, 0) > CPY <- c(0, 0, 0, 12, 0, 0, 0, 12) > CAY <- CAY/sum(CAY) > CPY <- CPY/sum(CPY) > C3 <- CPY - CAY > > CAG <- c(13, 0, 11, 0, 0, 0, 0, 0) > CPG <- c( 0, 14, 0, 12, 0, 0, 0, 0) > CAG <- CAG/sum(CAG) > CPG <- CPG/sum(CPG) > C4 <- CPG - CAG > > CAP <- c(0, 0, 0, 0, 13, 0, 17, 0 ) > CPP <- c(0, 0, 0, 0, 0, 19, 0, 12 ) > CAP <- CAP/sum(CAP) > CPP <- CPP/sum(CPP) > C5 <- CPP - CAP > > C6 <- c(-1, 1, 0, 0, 0, 0, 0, 0) > C7 <- c( 0, 0, 0, 0, -1, 1, 0, 0) > C8 <- c( 0, 0, -1, 1, 0, 0, 0, 0) > C9 <- c( 0, 0, 0, 0, 0, 0, -1, 1) > > C <- rbind(C1, C2, C3, C4, C5, C6, C7, C8, C9) > rownames(C) <- c("Overall", "Older", "Younger", "Good Init", "Poor Init", + "Old x Good", "Old x Poor", "Young x Good", "Young x Poor") > > gh <- glht(amod, linfct = -C, alternative = "greater") > > # page 198 -- OK > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = score ~ treatment:agegroup:inithealth - 1, data = respiratory) Linear Hypotheses: Estimate Std. Error t value p value Overall <= 0 0.7360 0.1908 3.857 0.000100 *** Older <= 0 1.0733 0.2635 4.074 4.55e-05 *** Younger <= 0 0.3190 0.2795 1.142 0.128149 Good Init <= 0 0.6093 0.2844 2.142 0.017263 * Poor Init <= 0 0.8611 0.2573 3.346 0.000572 *** Old x Good <= 0 1.2187 0.3870 3.149 0.001072 ** Old x Poor <= 0 0.8154 0.3616 2.255 0.013135 * Young x Good <= 0 -0.1045 0.4194 -0.249 0.598177 Young x Poor <= 0 0.8696 0.3788 2.296 0.011864 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = score ~ treatment:agegroup:inithealth - 1, data = respiratory) Linear Hypotheses: Estimate Std. Error t value p value Overall <= 0 0.7360 0.1908 3.857 0.00060 *** Older <= 0 1.0733 0.2635 4.074 0.00041 *** Younger <= 0 0.3190 0.2795 1.142 0.25630 Good Init <= 0 0.6093 0.2844 2.142 0.05932 . Poor Init <= 0 0.8611 0.2573 3.346 0.00343 ** Old x Good <= 0 1.2187 0.3870 3.149 0.00643 ** Old x Poor <= 0 0.8154 0.3616 2.255 0.05932 . Young x Good <= 0 -0.1045 0.4194 -0.249 0.59818 Young x Poor <= 0 0.8696 0.3788 2.296 0.05932 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Fit: aov(formula = score ~ treatment:agegroup:inithealth - 1, data = respiratory) Linear Hypotheses: Estimate Std. Error t value p value Overall <= 0 0.7360 0.1908 3.857 <0.01 *** Older <= 0 1.0733 0.2635 4.074 <0.01 *** Younger <= 0 0.3190 0.2795 1.142 0.1955 Good Init <= 0 0.6093 0.2844 2.142 0.0485 * Poor Init <= 0 0.8611 0.2573 3.346 <0.01 ** Old x Good <= 0 1.2187 0.3870 3.149 <0.01 ** Old x Poor <= 0 0.8154 0.3616 2.255 0.0485 * Young x Good <= 0 -0.1045 0.4194 -0.249 0.5982 Young x Poor <= 0 0.8696 0.3788 2.296 0.0485 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > ### wine data, page 199 > > amod <- glm(purchase ~ customertype + light + music + customertype:light + + customertype:music + light:music + customertype:light:music + + handle + examine, data = wine, family = binomial()) > > # page 200: FIXME (SS3???) > > ### wloss data, page 205 > > library("lme4") Loading required package: Matrix Loading required package: lattice > lmod <- lmer(wloss ~ diet + (1 | i), data = wloss, model = TRUE) > > gh <- glht(lmod, mcp(diet = "Tukey")) > > # page 205 -- FIXME: df??? > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = wloss ~ diet + (1 | i), data = wloss, model = TRUE) Estimated Quantile = 2.7277 Linear Hypotheses: Estimate lwr upr B - A == 0 -1.03000 -2.18834 0.12834 C - A == 0 -1.78000 -2.93834 -0.62166 D - A == 0 -2.78000 -3.93834 -1.62166 E - A == 0 0.12000 -1.03834 1.27834 C - B == 0 -0.75000 -1.90834 0.40834 D - B == 0 -1.75000 -2.90834 -0.59166 E - B == 0 1.15000 -0.00834 2.30834 D - C == 0 -1.00000 -2.15834 0.15834 E - C == 0 1.90000 0.74166 3.05834 E - D == 0 2.90000 1.74166 4.05834 95% family-wise confidence level > > # page 207 / 208 -- FIXME: df??? > summary(gh) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = wloss ~ diet + (1 | i), data = wloss, model = TRUE) Linear Hypotheses: Estimate Std. Error z value p value B - A == 0 -1.0300 0.4247 -2.425 0.1086 C - A == 0 -1.7800 0.4247 -4.192 <0.001 *** D - A == 0 -2.7800 0.4247 -6.546 <0.001 *** E - A == 0 0.1200 0.4247 0.283 0.9986 C - B == 0 -0.7500 0.4247 -1.766 0.3935 D - B == 0 -1.7500 0.4247 -4.121 <0.001 *** E - B == 0 1.1500 0.4247 2.708 0.0527 . D - C == 0 -1.0000 0.4247 -2.355 0.1279 E - C == 0 1.9000 0.4247 4.474 <0.001 *** E - D == 0 2.9000 0.4247 6.829 <0.001 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported) > > > ### detergent data, page 211 > > lmod <- lmer(plates ~ detergent + (1 | block), data = detergent, + model = TRUE) > > gh <- glht(lmod, mcp(detergent = "Tukey"), df = 17.6) > > # page 211 -- FIXME: df??? / inaccuracies? > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = plates ~ detergent + (1 | block), data = detergent, model = TRUE) Estimated Quantile = 3.0423 Linear Hypotheses: Estimate lwr upr d2 - d1 == 0 -2.3241 -4.9020 0.2539 d3 - d1 == 0 3.4819 0.9040 6.0599 d4 - d1 == 0 2.3272 -0.2508 4.9051 d5 - d1 == 0 -4.3787 -6.9567 -1.8008 d3 - d2 == 0 5.8060 3.2280 8.3839 d4 - d2 == 0 4.6512 2.0733 7.2292 d5 - d2 == 0 -2.0547 -4.6326 0.5233 d4 - d3 == 0 -1.1548 -3.7327 1.4232 d5 - d3 == 0 -7.8607 -10.4386 -5.2827 d5 - d4 == 0 -6.7059 -9.2839 -4.1280 95% family-wise confidence level > > > ### waste data > > lmod <- lmer(waste ~ temp + (1 | envir) + (1 | envir : temp), + data = waste) > > gh <- glht(lmod, mcp(temp = "Tukey"), df = 8) > > # page 213 -- OK > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = waste ~ temp + (1 | envir) + (1 | envir:temp), data = waste) Estimated Quantile = 2.8563 Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 -0.24100 -2.40232 1.92032 t3 - t1 == 0 2.01500 -0.14632 4.17632 t3 - t2 == 0 2.25600 0.09468 4.41732 95% family-wise confidence level > > > ### halothane data, page 214 > > lmod <- lmer(rate ~ treatment + (1 | dog), data = halothane, + model = TRUE) > > gh <- glht(lmod, linfct = mcp(treatment = "Tukey"), df = 18) > > # page 215 -- FIXME: df??? > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Estimated Quantile = 2.8252 Linear Hypotheses: Estimate lwr upr HP - HA == 0 111.0526 71.6407 150.4646 LA - HA == 0 36.4211 -2.9909 75.8330 LP - HA == 0 134.6842 95.2723 174.0961 LA - HP == 0 -74.6316 -114.0435 -35.2196 LP - HP == 0 23.6316 -15.7804 63.0435 LP - LA == 0 98.2632 58.8512 137.6751 95% family-wise confidence level > > gh <- glht(lmod, + linfct = mcp(treatment = c("Tukey", + Halo = "-0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP = 0", + CO2 = "0.5 * HA -0.5 * HP + 0.5 * LA -0.5 * LP = 0", + Interaction = "HA - HP - LA + LP = 0"))) > > # page 217 -- FIXME: df? > summary(gh, test = univariate()) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Linear Hypotheses: Estimate Std. Error z value HP - HA == 0 111.053 13.950 7.961 LA - HA == 0 36.421 13.950 2.611 LP - HA == 0 134.684 13.950 9.655 LA - HP == 0 -74.632 13.950 -5.350 LP - HP == 0 23.632 13.950 1.694 LP - LA == 0 98.263 13.950 7.044 -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 30.026 9.864 3.044 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 -104.658 9.864 -10.610 HA - HP - LA + LP == 0 -12.789 19.729 -0.648 p value HP - HA == 0 1.78e-15 *** LA - HA == 0 0.00903 ** LP - HA == 0 < 2e-16 *** LA - HP == 0 8.80e-08 *** LP - HP == 0 0.09027 . LP - LA == 0 1.87e-12 *** -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 0.00234 ** 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 < 2e-16 *** HA - HP - LA + LP == 0 0.51681 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Univariate p values reported) > summary(gh, test = adjusted("Shaffer")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Linear Hypotheses: Estimate Std. Error z value HP - HA == 0 111.053 13.950 7.961 LA - HA == 0 36.421 13.950 2.611 LP - HA == 0 134.684 13.950 9.655 LA - HP == 0 -74.632 13.950 -5.350 LP - HP == 0 23.632 13.950 1.694 LP - LA == 0 98.263 13.950 7.044 -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 30.026 9.864 3.044 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 -104.658 9.864 -10.610 HA - HP - LA + LP == 0 -12.789 19.729 -0.648 p value HP - HA == 0 5.33e-15 *** LA - HA == 0 0.00934 ** LP - HA == 0 < 2e-16 *** LA - HP == 0 1.76e-07 *** LP - HP == 0 0.09027 . LP - LA == 0 5.61e-12 *** -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 0.00934 ** 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 < 2e-16 *** HA - HP - LA + LP == 0 0.51681 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Shaffer method) > summary(gh, test = adjusted("Westfall")) Simultaneous Tests for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: lmer(formula = rate ~ treatment + (1 | dog), data = halothane, model = TRUE) Linear Hypotheses: Estimate Std. Error z value HP - HA == 0 111.053 13.950 7.961 LA - HA == 0 36.421 13.950 2.611 LP - HA == 0 134.684 13.950 9.655 LA - HP == 0 -74.632 13.950 -5.350 LP - HP == 0 23.632 13.950 1.694 LP - LA == 0 98.263 13.950 7.044 -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 30.026 9.864 3.044 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 -104.658 9.864 -10.610 HA - HP - LA + LP == 0 -12.789 19.729 -0.648 p value HP - HA == 0 < 0.001 *** LA - HA == 0 0.00903 ** LP - HA == 0 < 0.001 *** LA - HP == 0 < 0.001 *** LP - HP == 0 0.09027 . LP - LA == 0 < 0.001 *** -0.5 * HA - 0.5 * HP + 0.5 * LA + 0.5 * LP == 0 0.00767 ** 0.5 * HA - 0.5 * HP + 0.5 * LA - 0.5 * LP == 0 < 0.001 *** HA - HP - LA + LP == 0 0.51681 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- Westfall method) > > > ### multipleendpoints data, page 218 > > ### lmod <- lmer(y ~ treatment:endpoint + (1 | subject), > ### data = multipleendpoints, model = TRUE) > ### Leading minor of order 9 in downdated X'X is not positive definite > > > ### obesity, page 220 > > ### heart, 222 > > ### _____________________________________________________________________ > > ### add additional examples below (because of the seed) > > > ### choose comparisons at since = 20, page 104 > amod <- aov(score ~ therapy * since + age, data = alz) > gh <- glht(amod, linfct = mcp(therapy = "Tukey")) Warning message: In mcp2matrix(model, linfct = linfct) : covariate interactions found -- please choose appropriate contrast > gh$linfct[,8:11] <- gh$linfct[,8:11] * 2 > confint(gh) Simultaneous Confidence Intervals for General Linear Hypotheses Multiple Comparisons of Means: Tukey Contrasts Fit: aov(formula = score ~ therapy * since + age, data = alz) Estimated Quantile = 2.8067 Linear Hypotheses: Estimate lwr upr t2 - t1 == 0 5.7052 -8.5828 19.9932 t3 - t1 == 0 -0.7259 -22.4623 21.0105 t4 - t1 == 0 30.6868 14.0897 47.2839 t5 - t1 == 0 41.7908 13.9730 69.6085 t3 - t2 == 0 -6.4311 -28.5211 15.6590 t4 - t2 == 0 24.9816 7.7590 42.2042 t5 - t2 == 0 36.0856 8.0330 64.1382 t4 - t3 == 0 31.4127 7.4791 55.3462 t5 - t3 == 0 42.5166 10.9143 74.1190 t5 - t4 == 0 11.1040 -18.5382 40.7462 95% family-wise confidence level > > proc.time() user system elapsed 436.811 1.292 441.081 multcomp/inst/MCMT/MCMT.rda0000644000176200001440000003305014172227610015062 0ustar liggesusers‹í} œÅyoOÏì© YâÔ±’`º¦»gvWHÚÖ’…@7—ÅìîìîÀîÎ23+!Hl|àŒCÇÁà_IŒól°Mâ#ÛñÌ3ïìÛø9ð𪦾¯¾êÚ4»Ûßo¿­»þU_õuuOUõG­Æ£†a˜†YÃþG™7f²Ã8­¹u©®ãé\>mÑ,x.ã9Œï3¦E€õ8Ã'Þ¯\©<Ó‰ÔþF|Øpu9• b›ÓT×à ó“ÕHåˉ/GŸ§"•3>Kåó«/Hþ~õL=ÔÕèÊXõjºèe©±\iùrËpžêz¨R¥2+5F§‹~DÕÇJïEÓINjʑát¥Rý­ÔFŽT¨‡!ùQ9:X*m´::õpMö»Ò骇¡ýšZ4]õi´ïVCš\šîz8V urrh¦éáDèU¨«c§™¦‡!UN“ñ›g¨‡¥)´wãGA²œêzêÈô ©®‡œB]œú4ô°šH] ÇÁØi¦èaH§†Ê£¡ަ›=<ý™Nz8Ýôa&ÑtÒÃʧj³¡VFÕvý¦ …z86 õr|(ÔC¢P§NMw= ukjÐT×Ñί˜Lžjtªå¥qõ° Ú2¥Ù y,ì9†©¶/}<Ý—g¾Ó Gñp¦íÙB.ÛÁ†C¹tªÐŸ(h¥k:ûRy,ܵݩÎB6Ç|¯êÙRýiÌ~.d¦ÒqòZäµÉë7AÞ$y[ÈÛJÞ6ðÆÄÅWü–â·¿£øŠ?©ø[«âWp-×Rp-×Rp-×Rp-×Rp-Ä­éÉe‡…À£¯i—¤±+UH­ëÎ1ñk—¤!—=±N½,÷A‘66‚-`3#ØÆ60‚­‹`Ó"Ø® Ô—À”À”â7¥ðM)zS Þ”b7¥ÐM)rS Ü”â6¥°M)jS Ú”b6¥M)bS Ø”â5-‰aK [bØÖ¶Ä°%†-1l‰aK [b8ÑŽÄp$†#1‰áH Gb8Ñ ‰‘ ‰‘ ‰‘ ‰‘ ‰‘I‰‘”I‰‘”I‰‘”I‰‘”I‰‘”-£Eb´HŒ‰Ñ"1Z$F‹Äh‘-£Eb´JŒV‰Ñ*1Z%F«Äh•­£Ub´JŒV‰Ñ&1Ú$F›Äh“m£Mb´IŒ6‰Ñ&1Ú#ß°¼qòZäµÉë7AÞ$y[ÈÛJ^B‹ZœÐâ„'´8¡Å -NhqB‹ZœÐ,B³Í"4‹Ð,B³Í"4‹Ð,B³Í&4›ÐlB³ Í&4›ÐlB³ Í&4›ÐBsÍ!4‡ÐBsÍ!4‡ÐBs-Ah BKZ‚Є– ´¡%-Ah B+ }®MõÝ gCÆ`îÜfLÎ|1Z&ÇÆÈ5þÌÅ`⼤d¤M(H›P6¡ mB!0ðLË ”çÅŒw0ÞîNÆ-àb˜óQÆÛÁ¿‹ñUà^ ule¼Êl†0æ½Øœí—Û þ]¿òðzB¹vȳÜvÈ{)äÝ ù¶A{ÌJ_Og<x)ã³ŸÃø pωÝi<ÌÕø$ã5Œ@¾³¡.>ƒ}ã…À‹ m1ãYŒ×B™3 ÞÅ€;ê™ÏxÄob<ò͇zÏw•æyWBøLè[àÍQúº êl9páƒo ÈŽË›»‹o„<롟.ÈºÕ =H@}[ÁuA6k!¼„ñ:Ç›73¾’qãýpm\À<Ìø HçñÇ î:Cè×A¸Æÿ2ÆG çBËc¨å1C]¡7K ž„`4Õ“oM>3ÐIÎlæÂ5XZ¤pêk„S_á+9õ-ý¸5ìÎV›èÉ ¤àæÆo$|Ðrôri¼o|ã}ÃÃþD”úñ†W˸Žq=Êj äã7 ËmžwMó‹_ºËµÁ]só³;^x‹{Þ‘ÆÍƒ÷?énØpÿ“›otWÝËé}îÅl׸+?msr×ÿVä·Ì»XÊãnü^¬Ñ]Çs5¿ä&¶‰øà®œõ5KÙÿóÛÜ ¶¨g5-yÄmùÊà o~v—»p¬—E¼õY<´ÿy÷B,±pãÌa7»ë¡Ýk¾Å3pã¿\È{ä&Ÿõ9ÐúÕ’ÚÉ]ë6¨'/Ú³ò'ŠÎj÷hwâ-¢ hwÛnÑ_òµáº–[Tjw#Ègäkëd°ƒ¸ è_ËOE9gE1^»Dázź²y´ò‘ xêséü`v Ÿ.÷ýˆ¼'È;@xO˜ ÷ÝVÏëLå:ÓÙžô@¦3S8 F›Ï”¸‘{Á™"%Ò«•ÆÚîSÙïÑbãMsªÒxµ},õL%ùa[ËÇ!ÍLšJú<Ó)Ç!7…ãò)Ç!Dæ©n@HeÑHãXµ«f€?(éuši£yÎë}ÀTêªk4z=R»ô>«þRXå¶E•¥_™ öéeÌò–KåÈÂ/ÏXt®œ¶TZÏH²ŸhÛç×Öj¹—«ë‰3ž4–÷T¥âÂyëô£±^Su‡úRHS“ªå~Ì)| éTÒT¾UÓ8.‡N•¬'w4xÕ¬‡Õܶé@~ã¸Ô»L ÊÑ҃ʅËyF©=~å‚ðJµ#¨N¿´Ñ<ã«íÐý•ÈÁO~~uå1ÊÈ„å‡7’[NÛÊчrû„¯³_|9õUª›¥Â~m jºSí~<…óòfš.L§q<Õh¦éZHGá8®n Ÿ+C*‡ÆcWƒ®UCB i44º;UïÇḠ)$¢©:ŽC ©šèTßWÂqRH§†Æó=g8Ž'žÂ÷Ò!M4…ãxlŽÑª&rŸêg†Bš)TjWëX¬Öv…Ò©  qÎC iêPø|RH§–Ê™[–º¯†ã8¤é@3ý9k2ÞsÍtOeÍÒ±ÖRå4ïÇáµ)$/MÄ8Ç™ j‘Cµ´#¤‰£©x?iü(ãÓƒÂqR8–§>…ã8¤j§ÐΔ¦pO6 ÇqH*…çÀLM ÇqHÕDá}yt4Þãx2í¹zÍ'w<êœ yL¥{èTjëDÑXlUüÂûqH“MáXªd‡ò)¤ê$Ç‘Ææ ãè ãØ cÇæSÀãû_Á8Mñ‘W˜ûIÆ_`üQÆŸ…´5àfßÃêTêâå¾¥„÷€{ñBÆ}Œ?Ì8ÎxÔËÓ¿î¹€‰åßÈø½õK¾ ÚâB8 î› œš·ñÓ¬m#Ü"ór3¾Ú÷WŒ¯‡´ÝŒoeùÁ˜µ1Âåó碿Åö½äq;ã/1NBý3·•ñÃÌÿ{ˆãî_¿ñÄýsßX1~ük”öñ¶¡„—1Þ˸‡•oRây}2~ ú°ê´_Θis)ð¿\~mv0¾ñIÆËøp]xÛ>ÄøãG!ÿ;—A㣌¿¢¤q>"dùùJp¿l½âyzÁý.ãJÙa|:+ûkhÃŒŸd¼™ñ{EžÈ«ÌÝ.d[Ô‰(Ìó}Žåù\ ¦›.›% Ç»„ŒÌŒ¿ ò¾äÄåò¿3=Ž|QèO±žs_cî#p]˜îFnxâ®eq|,-ã%òC¸Fk Î[ÿ5ø[A^\ÇŽCç:Vîâõ‡ëå*ÆŒßÅx6Ô±ò¿‡éÑ4Žà˜âÆ”ø¨â¯ ÈÏ݈– È«fP;bÆðöå­el‚[ëcßÔ|ŽB³Œ¶`ýjÙZ¥Oµ +=®Fñc=è*aõžQâ7jxeSêˆ*u©X~²óóc9Ó~ítyFêQû§Æa8j ¿þ*~4W¿^z¿1Í4üû¦¶×ÔêÑeijåuùªøA²ôg¦R¿®“~òd×?ÆòƘ1Nc¼žq—Ea¨?›‹{B–'d{BŽ'”ð„’žP‹'Ôê µA¨N oðãÞ å ÚÞ ã &¼Á¤7Øâ ¶zƒÞVYÞVYÞVYÞVYÞVYÞVYÞVYÞVYÞVYÞVYÞVÙÞVÙÞVÙÞVÙÞVÙÞVÙÞVÙÞVÙÞVÙÞVÙÞV9ÞV9ÞV9ÞV9ÞV9¤R=¹ìÐ „¢]©“˜/_È¥X^¡ÂQTá$7v¥ ©uݹTZä¨Á/@޶'‚-‰`"ˆAiDP”@ûÁ^›ReM©­¦TTSê¨)ÕÓ”šiJ¥4¥>šRM©…¦T@Sêž)ÕΔgJe3¥ž™RÅL©]¦T,Sê”)ÕÉ”šdJ%2¥þ˜RuL©5¦TSêŠ)ÕÄ”bJå0¥^˜R%L© ¦TÓ‘ŽÄp$†#1‰‘ ‰‘ ‰‘ ‰‘ ‰‘ ‰‘”I‰‘”I‰‘”I‰‘”I‰‘”I‰Ñ"1Z$F‹Äh‘-£Eb´HŒ‰Ñ"1Z$F«Äh•­£Ub´JŒV‰Ñ*1Z%F«Äh•m£Mb´IŒ6‰Ñ&1Ú$F›Äh“m£ 1¢ñ È'¯E^›¼yäM’·…¼­ä%´8¡Å -NhqB‹ZœÐâ„'´8¡Å Í"4‹Ð,B³Í"4‹Ð,B³Í"4‹ÐlB³ Í&4›ÐlB³ Í&4›ÐlB³ Í!4‡ÐBsÍ!4‡ÐBsÍ!4‡Ð„– ´¡%-Ah BKZ‚Є– ´$¡% -IhIBKZ’Ð’„–$´$¡% ­…ÐZ­…ÐZ­…ÐZ­…ÐZ­…ÐZ­•ÐZ ­•ÐZ ­•ÐZ ­•ÐZ ­•ÐZ ­ÐÚ­ÐÚ­ÐÚ­ÐÚ­ÐÈ–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XE[òª˜÷ñái–iÏÉþø{ ތѼ/‰Ë}ÿ[î{ñ2/à]6qª[‰lEÏ6ôlGÏô\0“®íNu²9!QÅ…?M¨ÆüºŽq=”lœùæòþ¸sô¹ï\uÛíîÊ/7>¸gý[ÝÅó@û}í\·þ>»âoß“»äÙOüé}çpkþi¾{îRwÁ§nùÔ«ÿÚïšKïhˆºK–|ûöo ^ä6}çŒßïÛµØ]ùij?uÏsîrçž3.¸7î^¸ýž7×®üßîìYóÎÿëŸw—.üÚm/d3îr÷[ŸY|ô‡nS¡ÿ_ÿ£õíî™ÛoÙ½¢í‹îú¿¹õÿ½îIwÙ'vþBí»Ü ŸÿËcµ/Ýí^øóï<žZàº~ï›ýúÞæ.;ûÈ–‡’7»ç¾dïñcO¹ÍŸ¯ûê¥×>á®üê1·iîþâ¡sW?üãøË÷½ÛµÖþ¢ùΟÄÜ ¿»ö‰Î_ou×=·ûÎE{þÒµûéžû^ip×Þ¼ÿÌoÔs/¼ð¶%ìÞ]õÏ_9í®>æÆÿ⥻/É¿Å]~ÿíé»?¾×¿ô¡_ýõ§Öºñ ¹$Þ:ë™ÿóí?u/ÚòÞwîýÏ‹\ç6Öí ºëï`ÿçüÂMþð®kš_|ÜmùÍÿ]õð-7ñÞ‡Þüì.׺|×O?tîO\§ãžŸ=û‰;Üøå8»þ}¦öZ" ×+ZÈP[3à©Ï¥óƒÙ¼þ”'Ÿé§¼ð”WúÀ°ÛAmgvˆ)Ü L¸4ÃMG•…=>†Rè’7Ø®¸â•÷Ï.+HL^ûÎía³ëÆÎ À÷èØ0Ýù°»ÿ'b¼^Þ÷£¯»Û›_üÒ]׬v|Úæä^ƃÍ/¹;Ûîeô>wëwy±…îî?*ft<)Êï_z pÜ%Ü׈ôƒÛ„}ØûÜæÁûŸlt÷¾½›“{Ð~²qóàÿÀ÷÷ó†¹û>(Ú·ße¹7ßèîÞ.òíP”Û¹N´{7ØCK |.¯~³»ã7¢Ý—žÅ›y‹{`…ïù3Qï%7 œC_ý<ø9ÑÎˉvìx‡°»n58¹û á^¾±XŸf¿Lt}W&Ï´nXýàP®³75Ìv5¡íªÛ5 »ÒЕfSÌž4¿ÊÃ&™ã½èc¼”9 ödš]òRtÉKÑ%/E—¼]‰r,QtšÍ4=2kDYtH™uH™uH™uH™uHõíêÛ!Õ·Cªo‡|ꈗgðQÌg3>‡ñÆKŸËý·²*3: ø\-ž—[ÄÓ0¬¤51^¦ø—‚9¸çjaOô#>¸ü7è3Á¿ÂgLÕ1YŒ¨éèËvÞ€òìKÒùpY¥F¸J'sºú;RÇú2ÝL·òб7Ôyd5¯ÄvÞÅøÆŸ~”ñƒñ·ñ÷óD?bücÆÏ1~‰5 "²Òÿ›ñ»¿ŸñýŒ¿ÌøëŒ ü3eŒ‹0ƒ9¸˜¿žx‚¹G•vŽ¡<Ç“”7/Ã,Oúëe¬+u2þúÎô@>›KwUüûe8;¬䛄º®,¿³æÁð»?WÞgGTŸÉ'Õ°„4u)¼Žå—Q5ÅSqݪQWª­=•’*Ój”¯UƒÝ¨¦±8ÙÑÜSIÕ  ãMÕ$ß©@3y,†49ŽÅ‘ åSÍcq2®a¨'ãKSé^Xms‘j‹‘ÿxÖ¯sH! Òõ¯ZÆb8&¦>]Ãj¼¶ÕØ&‹ãùgµÿX:–Õ7áQ"£ãr—äWמöü茫j{»Ò©B/†ú3ÇÒ7ô@(šëîÀ„Ì@wºS.‰H岈 õõƒ¿.—èNeú°”ø³âŸ­Ÿ5Ÿ­«ägëIXO¾pÛm¸í½á¶[á ·Ý o¸íVxÃm·Ân»Þàm·úr³XWnˆÍëŠkÍØ|¹¸b~—Q}ÏQUö|°ªäî…2÷,Œt*•Ð4­Çsp©¬ÿƒA™;v) Ñ7b„ñ"åtã5ŒWB7§´ûwX,7ÄŽŽ¥¯½öÚ îL`¾Ûâˆã»/š Þ9×d(;7‹·‡ïá»L–AÛNã釷w‚,w–!®8ßLaíø-´)éEëþ3”¸ÓY^®ó ±³e6g÷;ChÒ<èsô‡Ëh¶(ïy¤Fó¦V´¥+“Owí -Í€'h+ò.c$žðÉ|á“o?ùŽf›uw¦¯ÎÞí1‹ŒàûGÐ?èm[ÂjÝX×xù±î‹ßÌøããŒßǸ›ñCŒßÆøŸ ýÄ­F‘ž0ÄË/¾­æNÆoaü&Æeüw"ÿÖ‘Ž\j ËÐŒLÝ@g¶/;p²â÷o‹°¦é`…t-«ïÎä{;³ý gü¶Áw²GÚ?]øÜõo|å2üÅà ¾ûžâIvã¯>8ðw×]+ÓOÞýxï6<'ÓW^óÆ?ù»_Éôû­æÇþõ\™¾úW{´ëMq™þ'™×¾úÔ=)Jx öxv¿L¿ýóÿ}áÛ÷|XӼ홃R¢ƒR¢ƒ(ÑXÞ<Ä•·zz$odÉ[ bƒVЄ+X­0GÄï²Ôv ô¤ð´>pù ª‡bH%Œ.æ3|Ò"ùüòèùÔ85?W´F%Ÿj pyÞÍ"è¹X¸:š–W‹y-òÒa©¹tª÷„ʲª‰ã[þñÈÃ6¯÷¦ú²…ÞÔ@Z3Ø{4™úMúK=®•úɤNãz4nÔx–Ƴ5ž£ñ\çi|šÆó5~Æ ¼UåÅÂp©°ÿãù®­Ò·}{dÜž}e?)²+ÂÏÔçç«ÏIç;LÿÀøy£x¾z„Ÿ3Ïϸÿ$c~¾: ‘O0þ8ËÛ(òGî:"‚ùZvÛ°§ ól1ØøðŠ°©A䫌/~ã—Ÿ`ü˜!΃gOF‘%Àïaü à¾Ñ(ž©ÏϤü=ÔõSQ&r ã“Pëuäý÷û†8‹ÿjÀû ãï2þãcyÿØ(žçágÉg¡_ßcüô›+€inä ›Ûß0=‰veñ¨¡hÉúi{},—*¤+6l{Œi4C¾ð9iF>'¯ô/„úý·¦7ÊáYøJ÷:cø½w²y¼^–O岚 –±ÔM4ýî8qÕ"ÖYÈõ•}?ò»º“=³šáøžQ¦¾9 ÓöŸùÉ&³ MkAšÖBY?ÌÈ‘ÆßÅ^Á˜?€_ÆørÆ…¸Œ€ÿRȘ¿øÙÆx/”åþÝvâ¶0~=Ô{ ”áõìðaÀçeöÖà?øXöR¥m{¡MW@{€CXß^Å¿_iÛå¾Ú· Ú¾ Ú¼âyÞ«óˆRÏePùbhãV(ÏÝÍÐæ‹w@0_{ïÖkÓ¹ú¼p¯1 œ-ê9 çÀ^ùŒˆ?â ÷(„BzÇ™¢=GˆrG¾,âåEøØgEúU€wàNáî?)âB½û G!ÿ!h÷a8÷ö(žû”HC­À¹úáºWÄ_ ý<ý9 ù®€órþ8¯ö0ÈóÊûDþC½ýG¹íƒö¹‚z@¿'ÂWAù«Þõ@úÁó¼í< í9 îp]Bý‡… 1bBj`7óúÿdÜÌ–³Ùôé,îæ¾™ñ˜q¿“ÅÇÂ,o]7 ÿ’iæ¿0þgfÓíšï°¸ï1fõ6þ# ÿó³ J=ËS?Äò¬dq £ö^®ŒLKÏâ™u¨}sÙ£ž )Æ0ždþ×D ¬áõÌ–Ô~ñ,̆Y}/K{?s¿ÍÜ¿gñϳx6™©a££þc,îjÆO3¾žÅo\÷ã{†…Ÿeù–2~ g+r(ÑzrÜÅÇŒò 0Ôk /¦ÕôR£„ý]bŠß·A©Ëc¾¨Ò–˜‚‹fÁTòE”>`™ƒ‘”²µf,`"Wß—íL2rúV3˜Ëtâü­6cw:o£©žÊ_ºF8 §s§d:§OGŠO#ž_È6?§¨ôÍU… #+Þô¤ö[}®G£¡•Œ¿ÊMõüØo4˜<- «Ó0ß¾ñï!_=_E+Ðx™ZæY ›&~ØZ¡Þ¡|ljÌq|˜ä?åóÍ0çùp¦Ã¹ÔK瘖W5¢zÆGµü1_ϧc×øø£>:¾š>¾6ˆW£Ô£ÇÉE/«Æa]#áëþ |¿6WŠïwSÔå ÀQÛ¥^ 6á:ä'?Ùûé_Ð5®ñ)§ÇùõQ•¿ÎA2ö“¹_›Jåׯ¿~.Ž?¦âÃM’ߤŠ7Jt1^¦ë¤ä3á&ýšR¦hƒ”8•_懛¾Z^ºjZ %_ñ”¶˜ùQþ¾õáirÑåä'ŸWÕ|.¯Ö?2 |Äà%ýTûwᶃûØ à>£ÅkùÚŸñÆK÷¯‹ùuBüvÍ–O+¯·'ï±áõ‰~¿ìm¿ìÇ ^W'=¿,÷L@»ŸñËv¢ûryåõüz;ƒÚa@¿e>½œê—.'½<ºíAõ¤—K_ÐÂz} —£¸ÞxúõV¯_ª|P~½íÚø ¼Îùt<Ÿþ‰~åÙ?^o)üômÄúƒÆOàõ(Oäy`ãó\>ÿ­åóßãžå ÙžοkOdºÓT®²£û™FènÆø;~ûŸˆïBný¼ø.ãÖëEüÆCâû‘­;Eúö}¢ž‹~.¾»èÂï…­ð{œ íÝíÚø„HoHäßõm„ïRº‹E{\ø>d~çkûŠÀ³,ú¹ ðÛÁÝ ñ½ ry·h×Àßßͽh¾øŽ¤k‚\á;—›n58¹‰»E;¶|KäÛ¿^òIBý›!¾ý—âû•›¡­ïþHô×ýc!¿¶”(¿e¿¨×nõl|¿KÝMÐN®—;(Ú¿q‰HG9ºðÝÎí׉öºð;â(·õÃÅïbJ½JB¿¤kxÝÄ·ha½\B/¯…‡¥Å…5ÛS*_©~á%Ü ~•’KP?KÕ_J^˽^‰ø-¬Õoˆ'B~óàqpƒÎó'öÓ”4îÎ6hÓNøç(é<¾ü˜Þ`Ðf ùJ=Xn¶‚‹å1^ݤoškÐ[Ź;æ*åg+i¸s_»Ï3¼¯ß1nŽVÛ:ßZX—•»ÔkO¤3=½ò˳=é|AY\W;0Ôß‘Îi3¡ÝF8 _ÆO×ås£ØÌ>¿¨¯ìK§º³™BÞ;ÝðÏ'Žçô4äCöòd-ø 9äK²çµŸÅ™ç帤}}©ÎtG¶¬×xÕt#0Ñ;Ò4®ò³Œ…/Òøtk|†Ægj|–Ægk|ŽÆçj¼Dã¥/Óx¹ÆM¯Ðx¥Æ«4>Oãó5nÖxµÆh|¡Æk4^«ñ:×k¼Aã¸Æ–Æ¶ÆŽÆ “·hܪq›Æ5¾HãMoÖx‹Æí»oÕx›ÆÛ5Þ¡ñÅ_¢ñNwiüzwk|©Æ{4¾LãË5Þ«ñ>÷k|@ãƒÒø°ÆWh|Dã£_©ñU_­ñ5_«ñ4>¦ñu§4îиSã.ÓwkÜ£q¯Æ¯×øû4î×x@ã¬Æê}ïo±0†ÃpÃaxš†ñ¾3èYŸÙ È_.† ¿¡äBØTÒ ·ÏaSÁÂòˆg*á¥æÇtîâyu†·½ˆ¡··Nëõ cû·Vi¿^¾^ 7.¶¡Né³./¿ú°¼®U\¼v˜¯VË?ÒõRñÔþ!~Ô§¼º½R]¸‹¸ø|¿@ɃuÖjõ×(åb]?§-2ü¯7öûòŒ(õEÆúPnxF7â5*a¬_½>jýª¾¨r¨1hK)rD‘WD©Oïo£1üzéú£Ž'u|¢<ñZb]õ:©ý3 ïÔÛ5H_Õí§êvXUÞjXM×ÇGT‘¯š_—¿.½|)ùééªýAUñq|Ô(òÆüj¢ÆðþÕúä×õYï_L«OÕOuÓ‚ªKjT{[¯äWõ?HžAú¦æ×¯¯*¼Þˆ©ËC×/Õþ žâØTÇ;Æëö¬QÁÂt]¾úý@(OÃ×Ç÷çúaÇ(Öå‡:®§/´Õ㯎(ÓŠ×6oµá/úÒþ¢?­~Ñßô<GøÂ°…a#oø6á ?Â&¼„~„ ¼„6Na/¡‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±È–XdK,²%Ù‹l‰E¶Ä"[b‘-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù›l‰M¶Ä&[b“-±É–ØdKl²%6Ù‡l‰C¶Ä![â-qÈ–8dK²%Ù‡l‰C¶Ä![â-qÈ–8dK²%Ù‡l‰C¶Ä![â-qÈ–8dK²%Ù‡l‰C¶Ä![â-qÈ–8dK²%Ù‡l‰C¶Ä![â-qÈ–8dK²%Ù‡l‰C¶Ä![â-q¿#×ê²é|¦pÒ_“*î0å««b²9JŽVÀ‘‘9à+7{¥ï0úöȸ=‡^ø ßê¹ÖÃV¾ `+¤[“à:·œ\ ÜfغÙlˆðJ¯í[×B}k >ëLïV °5²Â6”· >,¿â7€»Ü8´Ã6Ô[ÄâPÏjpå–1ÈÄ£» Ú‰ýIBxöú…õ-‡pä[‡xXâ@¾ó $!ï…пÅPn>ä[å–£\1Ô{&¤/‚ð\È·ÊŸéM¿Â+@γ¡æ›í8Üsµrõ?Šù!}±·¿ 鯃ôpÏ‚|  ]Ë¡ !ÿ¬Òk!þ,,ñuØÈ? ûíåæCüBo>C¬§å£þëŒïcƒàæþ˜ñÏ? ü(ðÇÿã¿bü4Ë»F¼ûŽð¯ÝÃâ¾mˆ1ò²ŸeÌFV¤ò<ÂøaC|µ‰@ðq£øå&Ži¼ ð#sEZ1ÿH`†1? eX.¾:0žVÚ®ÿŽ¿—tâ º•×ãÚ_\ã‹kyqÍ.®ÍÅ5¸¸Ö–k#ר­—Åu±¸þ×¹ÂzVßoÞÕôä²CxäBc'ÿ#3À}…õ½}Ù\¦Kî3<ží’»é÷ hX 9Ÿ1Œ©÷3ưûú`ªp,ŸR¾zTÔv®Éh'j$×ä8h&×^1®0çšÊ5˜kuÊ-‡4î¶€ äE ÞLnë7(iIÀæq[ê±!oK+”´{#”á#v±k‚åC7",]ûï…¥CWZFH—ã ÍrGµüZý®!È…ßÛ_…t½S³ÌVdÄûÎ/û6C¬ž¾ä»äÀ-Íe¿Ý+Úm¥ ŸÁðUÅ›@N—œ6ü*N‡#Ÿ>žÎI‹‘¸)“æs@Hdæ&ß]±ýXlLsû¡±Ø`¦'¯Mœ—ÁÔJ'ÀAm¿óüj´É/ÞJFþÖ­9(%6˜(g<¬z&8Þ÷“af·ìc·ìc·]QÔ¥“èúîóâ_™žËÊ~4Yâ®h§¼¬xVœV²¼¦xüˆËM #· N-Yq«/»AœªÒô¢8…fš`ÁVå[°r9è¤Ò÷þ û¿ïâêâêâê(k¢n Ô#»Ô}ýx&€ºÏ?D —i„øÙ†÷2\ïÏýs•úy¾:Ã{A¤qÿë”úçh 'õu}©ä§šêú3C…t¾â‘³ÚGNÕ½¥ÓGñ,þ©– ›dsøËZ#è7øË ñ6£ãúÉß7ëçHègDà9~ç=ð:ù[:|ëÆ;ܘ<ßI¯5¼ï½ñ]·zf…Š‹gQ,V°ñüõœœˆ´CÃÉâ©gj,2†Ÿ‰}\jÐ{t^×jÀá ÏVà““JßyßÔ3(ÖÞ3 l(£Ê\í?çåJ=øž~-”çØÛ”kˆùä¤îÑçøªóbþ¨V^ý55ª„õ"ªW÷š¨íPçµú3GT ëõ©ýCÖó©x~íQË«ýiyü~áõ«S•—ŠóI‹ùäC?^C]vª\õg½_†O½˜®·?ªÄZ^?YªòÖó`Hj¼þ+|Ð]mžTNmŸ~}ýäà'[?}ÒËøaE o;ôk¤‡º~躭׫÷E•'æC ºÞj¿Ôò-¿áS—ß8ÔÛ§^'UGFÊãŽÁýFýŽhéú¬Q×M¿ñn(õ¡‹éx u=‹úÔ4Îüú¤Û C‰SǯÞÌ«ËUÍQêV)HŽ#]C Æðþûa«íôúµ2Wï·^Þï @•‰©Õ‡ùÔqèg«üÚfjÑʨcJ·kjÛ ¥¼Z·¡ÔágÛG²¥úµó³[~új(qº]”UëöË£Ë^Su'è¢ê˜ß8äÌçCY7/êqíKüâÓ~I…Âò—ÎÙFw®qÑ~AÅrP_ûï`mÌo´54€ Áúä/º¢>YNÏ8r ëÀÁvµ¿í„|ò—^ZûóZ=®ÄÇ_‚´_¢¡Ÿ2þcDB\)OŒ¯×º‹rGËŸàÖB{±ýßÑÊc>¼~ ww.¸x]~§åŸ¥…Qoæ€\ëµ_è1Ÿ¡…õzP?ð—þ¯ ×µýgÚuýkJûåûû®ƒx¼î¨·ˆá¹Z~Œ9KùNûgôB¶õäaˆ7<øL1Yìgã&š§qÿ|È­ÝÚY(~S¼ò©àÈÎa*1¢÷Ë7Ù—¼šTjŒ¸¾*Q³·¯‹¿Ýqevh ¿P¦F¨-(å©å殞O/?’$Jå/·½~šYæHšìçêu”ª³œºüþ§úîÌf»Ð¿/›-K<¯˜ñWVe—™“/(sò%hN¾ÍÉ— 9| Z“ïÌÊaÃͨgU{¥ò… ½éTÿ­µÂ7ØY#|ƒ]uo°…/<.#<.ØÒÇe [£YÈp«†Ë}ŠwхƸÏGü×ñmE϶rlºmk4è' þs ŸÍEˆGA_RA>þx¿Ð]«"¹kp <ŽØ[yX˜„|­°u¨MÛʳËA:–ßåpË‘¬oàA= \í¿*©?uÞ•¢ýƒ½Ý™ÍW¾Ãa!^©{çÑõ;ZÈÞ¤©÷9Fi5zã‡\áIÿõ¯Ã÷H¡ôH¡ôH¡ôH¡ôH¡ôH¡ô$Ë2Ø_ìWlÂ|Hã…ý] KVÂ’ÖcðaÃ+àC„×'TÿŠO‹7ŠîƒôÃPÏ"`Éí¡yâC’û`é.º5¼£w‰|‡ÄRÞ#°”v¸W@üш%¹GÖ‰%»ûÁ= x> ê ’üEäzðÀ’VÏX;ǘòcMøÆm–7Šõªõltg:i{.qõ0LâÚKeߥ8±íC9|øŒíÊôô’?Sýèžì‰²Ç¼“,ær!_qU;oHâù/ìÜV¬ñ¾ºæÙ W—*tfåF7X¤Zá=×÷Œ‡^ê—kN!—é¼A»fupÍfû\3ýÚiæzr®áì2®¡ß5ísMõk‹a¸Æþx·²#±R.¢”SIÇp±œO}#â•+U¦Ãx,C‡…Îö² x<ßI—·±k¨¿ÿ¤ç¹»/{â˜7O/SŒ©p,Ì6&ÝF[ïX`½ëèS¦èEÙãI¸š|1­îß!¬(,§Îw Ýÿ>ÖžnôôT,ÂaKôK‰pØn¨Ñ,…ê3yó}ΘſßÞ—éLäþ9CžÈ2ß/Ö*ˆQ¯ßwQ»ç Gx¶—mw8_’ÍÇÂC<ºpÝjRÒù ƒë>/Ç4.‚|jcu=1”t=>¢¥«bVÈw7teR=Ù|&ú[²6 å%¨)d )\Ü_—âë=óìðçñkUŒ—­b-ÄÕÛ•d]kN¤ò1£ô¦ÆQ>0{ `ÿ iT rRV¨lßÞ^ýIH=£yóùoÒLËþ¤eÒr’™–“ÌtY›4 µA¯¯'ÒÏ~‹áÅÃÒ/‰Ï¶7Á €&x*Á37ÁÁ%ð9ú&Ø`x6ž½ÃÓÕÿ¨w)S¿ž¦šîx¸±±êYOi@=+ÄÆDÍjÈéZ!ÝwïšôÀñ Þ¸£¹´Œ‡Anñ |cÝ;Q«u ÎúÉÃWgx$™Æ^˜rtÊQÐ)GAgY[¤KÞ&Ãâ•«±½ãQßDÉq¼®Ãd^c3ीÙ'ï }ñIÓøqêѤhödµa²Gë©Ðø‰ècÅß/5¾¿,7PãuŠ€UâLŸ|*ÕÄc]¦â×à >uE4|ðm8b¨ùUU¢~ä×/½¼_º©¥ëýSÓbZ~½­Ü߃S¿›…¤ÏàÔºÕ|:>~Ó-¨ïAå"ñØF5¾Üú9Ï HWåcäõÓUÔlγ”xüUGŒÚVLï½úÊW-«úg)yÕºê”z0/^«E†W#PNý†š: Ç7·j]˜æ¯êö½N)Scxû¤»2jx¿3i*uðþÎ1†ëf£Aß*ıhô]Á¨1ü~Ø6Ä› ¬~OQ}²AÙÌRêAFš§´CýÆÜlƒä‹×µÆ ïÌáõÃïJEF(C¬·^)ƒz×iÐn߃Eê‡r½©<þò5»s(_Èö§s…“ƒWÓ—éé•/Óû‡ò™NÔö¦ºúäJúôMü}ºþÆì#FøÆ,\X.,-úÂ…¥è ¿Ã&¼áwØ„—ЦÌwØFñ+G͉¾l^9è°øxoãÿYÎk<¿W…ApºmY§Ýú¯Gž蹸ìgCv›çw¦|µçãóLËm†ß2WÁâìó!ÌO¼a$Ó›ñ;¿Üó Ü°×µ Üó1Ê­À|à"Þ*ÈùÎÃò¾ê9âWb9hW¤¯€ôØ~¨o•ÖNùý H_áeÆúðûxèl³ÖÄY­õë|¨åˆåÿB=öoäEï]yPX$Ð. ‘SàpR<&ÅÜt½úÿm‹Tà7multcomp/inst/multcomp_VA.R0000644000176200001440000003050014172227610015440 0ustar liggesusers library("multcomp") library("sandwich") ####################################################### ### Source code for simulations presented in ### A Robust Procedure for Comparing Multiple Means ### under Heterscedasticity in Unbalanced Designs ### by E. Herberich, J. Sikorski, and T. Hothorn ### PLoS ONE 2010 ####################################################### ############################################### # Simulation setup for normally distributed data ############################################### ################################################################################### ### data generating process of group membership for n observations and four groups ### f: parameter controling the relation of group sizes ################################################################################### dgpX <- function(n, f){ n1 <- n + f n2 <- n + f * 2 * n n3 <- n + f * 3 * n n4 <- n + f * 4 * n x1 <- as.factor(sample(rep(1:4, c(n1, n2, n3, n4)), replace = FALSE)) X <- data.frame(X1 = x1) return(X) } ################################################################################# ### data generating process of normally distributed data in four groups ### f: parameter controling the relation of group sizes ### sigma: standard deviation of the errors ################################################################################# dgp_aov <- function(n, f, sigma, beta){ X <- dgpX(n, f) Xm <- model.matrix(~ - 1 + X1, data=X) stopifnot(ncol(Xm) == length(beta)) lp <- Xm %*% beta epsilon <- rnorm(length(X$X1), 0, 1) sigma_i <- sigma[as.numeric(X$X1)] Y <- lp + epsilon * sigma_i data.frame(Y=Y, X) } ################################################################################# ### Fit of an ANOVA model ################################################################################# fit_aov <- function(data) aov(Y ~ X1, data=data) ########################################################################################################################## ### Simulations in the unbalanced ANOVA model ### Comparison of OLS and HC3 covariance estimation for the global test ### Comparison of Tukey-Kramer test and max-t test with HC3 covariance estimation for all pairwise comparisons of groups ### r: variing group effect for calculation of power ########################################################################################################################## sim <- function(nsim, dgp, fit, beta0, r, n, f, sigma, K){ P <- matrix(0, ncol=2, nrow=nsim, byrow=TRUE) P_HC <- matrix(0, ncol=2, nrow=nsim, byrow=TRUE) Pow_Global <- numeric(nsim) Pow_Sim <- matrix(0, ncol=(length(r)), nrow=nsim, byrow=TRUE) Pow_Global_HC <- numeric(nsim) Pow_Sim_HC <- matrix(0, ncol=(length(r)), nrow=nsim, byrow=TRUE) for (i in 1:nsim){ print(i) x <- dgp(n, f, sigma, beta0) mod <- fit(x) mod_F <- aov(Y ~ -1 + X1, data = x) glht0_F <- glht(mod_F, linfct = K, rhs = rep(2,4)) glht1_F <- glht(mod_F, linfct = K, rhs = c((r[1] + 2),2,2,2)) glht0 <- glht(mod, linfct = mcp(X1="Tukey")) glht1 <- glht(mod, linfct = mcp(X1="Tukey"), rhs = r) P[i,1] <- summary(glht0_F, test=Ftest())$test$pvalue P[i,2] <- min(TukeyHSD(mod)$X1[,4]) Pow_Global[i] <- summary(glht1_F, test=Ftest())$test$pvalue Pow_Sim[i,] <- as.numeric(r > TukeyHSD(mod)$X1[,3] | r < TukeyHSD(mod)$X1[,2]) glht0_HC <- glht(mod, linfct = mcp(X1="Tukey"), vcov = vcovHC) glht1_HC <- glht(mod, linfct = mcp(X1="Tukey"), rhs = r, vcov = vcovHC) glht0_F_HC <- glht(mod_F, linfct = K, rhs = rep(2,4), vcov=vcovHC) glht1_F_HC <- glht(mod_F, linfct = K, rhs = c((r[1] + 2),2,2,2), vcov=vcovHC) P_HC[i,1] <- summary(glht0_F_HC, test=Ftest())$test$pvalue P_HC[i,2] <- min(summary(glht0_HC)$test$pvalues) Pow_Global_HC[i] <- summary(glht1_F_HC, test=Ftest())$test$pvalue Pow_Sim_HC[i,] <- summary(glht1_HC)$test$pvalue } Size_Global <- mean(P[,1] <= 0.05) FWER <- mean(P[,2] <= 0.05) Power_Global <- mean(Pow_Global <= 0.05) Power_Sim <- colMeans(Pow_Sim) Size_Global_HC <- mean(P_HC[,1] <= 0.05) FWER_HC <- mean(P_HC[,2] <= 0.05) Power_Global_HC <- mean(Pow_Global_HC <= 0.05) Power_Sim_HC <- colMeans(Pow_Sim_HC <= 0.05) ret <- c(Size_Global, FWER, Power_Global, Power_Sim, Size_Global_HC, FWER_HC, Power_Global_HC, Power_Sim_HC) return(ret) } beta0 <- c(2,2,2,2) b <- c(seq(-2,2,by=0.1)) n <- c(10, 20, 30, 40) design <- expand.grid(b, n) names(design) <- c("b", "N") nsim <- 1000 ############################################################# ### A: Normally distributed data, homogeneneous variances ### ############################################################# results <- matrix(0, nrow=nrow(design), ncol=20, byrow=T) results[,1] <- design[,1] results[,2] <- design[,2] set.seed(11803) for (j in 1:nrow(design)) { print(j) r <- c(design$b[j],design$b[j],design$b[j],0,0,0) n <- design$N[j] f <- 0.2 K <- diag(1,4) sigma <- c(2,2,2,2) results[j,3:20] <- sim(nsim, dgp_aov, fit_aov, beta0, r, n, f, sigma, K) save(results, file = "AOV_hom.Rda") } colnames(results) <- c("r", "n", "Size_Global", "FWER_Tukey", "Power_Global", "H1","H1","H1","H0","H0","H0","Size_Global_HC", "FWER_HC", "Power_Global_HC", "H1_HC","H1_HC","H1_HC","H0_HC","H0_HC","H0_HC") results save(results, file = "AOV_hom.Rda") #################################################################################################################### ### B: Normally distributed data, heterogeneous variances, smaller variances in groups with smaller sample sizes ### #################################################################################################################### results <- matrix(0, nrow=nrow(design), ncol=20, byrow=T) results[,1] <- design[,1] results[,2] <- design[,2] set.seed(21803) for (j in 1:nrow(design)) { print(j) r <- c(design$b[j],design$b[j],design$b[j],0,0,0) n <- design$N[j] f <- 0.2 K <- diag(1,4) sigma <- c(3,5,7,9) results[j,3:20] <- sim(nsim, dgp_aov, fit_aov, beta0, r, n, f, sigma, K) save(results, file = "AOV_het1.Rda") } colnames(results) <- c("r", "n", "Size_Global", "FWER_Tukey", "Power_Global", "H1","H1","H1","H0","H0","H0","Size_Global_HC", "FWER_HC", "Power_Global_HC", "H1_HC","H1_HC","H1_HC","H0_HC","H0_HC","H0_HC") save(results, file = "AOV_het1.Rda") ################################################################################################################### ### C: Normally distributed data, heterogeneous variances, smaller variances in groups with larger sample sizes ### ################################################################################################################### results <- matrix(0, nrow=nrow(design), ncol=20, byrow=T) results[,1] <- design[,1] results[,2] <- design[,2] set.seed(31803) for (j in 1:nrow(design)) { print(j) r <- c(design$b[j],design$b[j],design$b[j],0,0,0) n <- design$N[j] f <- 0.2 K <- diag(1,4) sigma <- c(9,7,5,3) results[j,3:20] <- sim(nsim, dgp_aov, fit_aov, beta0, r, n, f, sigma, K) save(results, file = "AOV_het2.Rda") } colnames(results) <- c("r", "n", "Size_Global", "FWER_Tukey", "Power_Global", "H1","H1","H1","H0","H0","H0","Size_Global_HC", "FWER_HC", "Power_Global_HC", "H1_HC","H1_HC","H1_HC","H0_HC","H0_HC","H0_HC") save(results, file = "AOV_het2.Rda") ############################################### ### Simulation setup for beta distributed data ############################################### ################################################################################### ### data generating process of group membership for n observations and four groups ### f: parameter controling the relation of group sizes ################################################################################### dgpX <- function(n, f){ n1 <- n + f * 1 * n n2 <- n + f * 2 * n n3 <- n + f * 3 * n n4 <- n + f * 4 * n x1 <- as.factor(rep(1:4, c(n1, n2, n3, n4), replace = FALSE)) X <- data.frame(X1 = x1) return(X) } ########################################################################################################################## ### Simulations in the unbalanced ANOVA model ### Comparison of OLS and HC3 covariance estimation for the global test ### Comparison of Tukey-Kramer test and max-t test with HC3 covariance estimation for all pairwise comparisons of groups ########################################################################################################################## sim <- function(nsim, dgp, fit, n, f, K){ P <- matrix(0, ncol=2, nrow=nsim, byrow=TRUE) P_HC <- matrix(0, ncol=2, nrow=nsim, byrow=TRUE) for (i in 1:nsim){ print(i) x <- dgp(n, f) mod <- fit(x) mod_F <- aov(Y ~ -1 + X1, data = x) glht0_F <- glht(mod_F, linfct = K, rhs = rep(1,4)) glht0 <- glht(mod, linfct = mcp(X1="Tukey")) P[i,1] <- summary(glht0_F, test=Ftest())$test$pvalue P[i,2] <- min(TukeyHSD(mod)$X1[,4]) # Tukey HSD minimaler adjustierter p-Wert glht0_HC <- glht(mod, linfct = mcp(X1="Tukey"), vcov = vcovHC) glht0_F_HC <- glht(mod_F, linfct = K, rhs = rep(1,4), vcov=vcovHC) P_HC[i,1] <- summary(glht0_F_HC, test=Ftest())$test$pvalue P_HC[i,2] <- min(summary(glht0_HC)$test$pvalues) } Size_Global <- mean(P[,1] <= 0.05) FWER <- mean(P[,2] <= 0.05) Size_Global_HC <- mean(P_HC[,1] <= 0.05) FWER_HC <- mean(P_HC[,2] <= 0.05) ret <- c(Size_Global, FWER, Size_Global_HC, FWER_HC) return(ret) } ################################################################################################################ ### D: Beta distributed data, heterogeneous variances, smaller variances in groups with smaller sample sizes ### ################################################################################################################ ################################################################################# ### data generating process of beta distributed data in four groups, ### smaller variances in groups with smaller sample sizes ### f: parameter controling the relation of group sizes ### sigma: standard deviation of the errors ################################################################################# dgp_aov1 <- function(n, f){ X <- dgpX(n, f) Xm <- model.matrix(~ - 1 + X1, data=X) n1 <- n + f * 1 * n n2 <- n + f * 2 * n n3 <- n + f * 3 * n n4 <- n + f * 4 * n lp1 <- rep(1.25,n1) + rbeta(n1,6,2) lp2 <- rep(5/3,n2) + rbeta(n2,2,4) lp3 <- rep(1.5,n3) + rbeta(n3,1,1) lp4 <- rep(1.5,n4) + rbeta(n4,0.5,0.5) Y <- c(lp1, lp2, lp3, lp4) data.frame(Y=Y, X) } N <- rep(n,rep(41,4)) results <- matrix(0, nrow=length(N), ncol=5, byrow=T) results[,1] <- N set.seed(11802) for (j in 1:nrow(results)) { print(j) n <- N[j] f <- 0.2 K <- diag(1,4) results[j,2:5] <- sim(nsim, dgp_aov1, fit_aov, n, f, K) save(results, file = "AOV_het1_beta.Rda") } colnames(results) <- c("n", "Size_Global", "FWER_Tukey","Size_Global_HC", "FWER_HC") save(results, file = "AOV_het1_beta.Rda") ############################################################################################################### ### E: Beta distributed data, heterogeneous variances, smaller variances in groups with larger sample sizes ### ############################################################################################################### ################################################################################# ### data generating process of beta distributed data in four groups, ### smaller variances in groups with larger sample sizes ### f: parameter controling the relation of group sizes ### sigma: standard deviation of the errors ################################################################################# dgp_aov2 <- function(n, f){ X <- dgpX(n, f) Xm <- model.matrix(~ - 1 + X1, data=X) n1 <- n + f n2 <- n + f * 2 * n n3 <- n + f * 3 * n n4 <- n + f * 4 * n lp1 <- rep(1.5,n1) + rbeta(n1,0.5,0.5) lp2 <- rep(1.5,n2) + rbeta(n2,1,1) lp3 <- rep(5/3,n3) + rbeta(n3,2,4) lp4 <- rep(1.25,n4) + rbeta(n4,6,2) Y <- c(lp1, lp2, lp3, lp4) data.frame(Y=Y, X) } results <- matrix(0, nrow=length(N), ncol=5, byrow=T) results[,1] <- N set.seed(11803) for (j in 1:length(N)) { print(j) n <- N[j] f <- 0.2 K <- diag(1,4) results[j,2:5] <- sim(nsim, dgp_aov2, fit_aov, n, f, K) save(results, file = "AOV_het2_beta.Rda") } colnames(results) <- c("n", "Size_Global", "FWER_Tukey","Size_Global_HC", "FWER_HC") save(results, file = "AOV_het2_beta.Rda") multcomp/inst/doc/0000755000176200001440000000000015075167045013646 5ustar liggesusersmultcomp/inst/doc/generalsiminf.pdf0000644000176200001440000062652315075167045017202 0ustar liggesusers%PDF-1.5 %¿÷¢þ 1 0 obj << /Type /ObjStm /Length 5454 /Filter /FlateDecode /N 99 /First 842 >> stream xœÍ\YsÛF¶~¿¿¢ß&©©½wc*•*[¶ã$¶ãHN,çVh ²P¤BR^æ×Ïwz”a™JbšÂÒÛéÓgïÓ”Œ3Å„¶L3WYf˜àÂ0Ë„4sL(á˜G#XÅ„5T‰Š£†`R”I&¨Ê¤¶Ô“Nãj˜âWË”ÐèÊ1¥¬dh¢œÃûŠi¡,“œi‹¡¥` ™”Ì8ãÐ)³B£sͬô(XãHˬ5ƒ0뮞9‰Î%à5¨¬8sŽW”9_áYbfè_)æ5QšygS†U4q€P ¦«¬C;Ï*oðóå³Ó˜0—èYc’\D@%¸1ÓàŽ;¦5n¼E„Ú4'ÜÄbêB \ íQ= ‹&èÄœ€]!0| Ž"ô,i z–H$ÔKÄZ‡iIBztlÅ êcÅ*`=+¥ …¸Ñp‡ž –HÚŠZ¬ †¶èÙ ðŠçQ=[Y¡=[…&6¬>æåгµÎ1‡ž­'ì¢g1ZT'°$@‘p ‚¹À7XÜ8Okƒ› ‹” Ù3ž½ÄJ¡Txn=Q‹Asž=MÙ£gOÔç Q!j‚2D%àATšV=WdæÑså¹d‘l… ˜‘M‚–AW\‚D+ÉÕåqãˆpc7¢I^Ü+G7褵a™«*¢}B縓Úýß×_³òi½žœMÖb"0Ö1+¼^Ïšy½G…çç“7õ“Éëz¶bÔàÙõåŠý?Šèá„•Ø7ß0žž³¯Ïëós@Ë¿¡·²Wç7úz[sC×/>\Õ¬<Âð³Åˆî]¯/Ëܕќ[\lrGÏßšƒd9×>•Ó{¿©›Ë­ˆ÷V§ú6•ç÷¯Ó{™Þ›Ø—›ìnoø¦N¸ÊôÞ¥ç £Mm§ôÅÄ–õdÝ,æ&ëš}ñà?XKœWÂkÔ¿¹üçÿú2ÕÃü¿x2yQŸ²wÍú‚]OËe}Žâêï˳ûOgëîùrqv=­Ñß·ÏŸ°o/«õjºl®ÖXð‚ã?êœ\¿þ½ž®3ÊõÙfÚ.Mɪ„ž WNSÄ”^4ëYÝ.”Š¥ö,¶¢‰Ddš´8©Ç€ô*•Ù 2óâÒˆt¡ê,¸ëÔ1ÅœvHtÞŸu5ÍÀæñÏ"L6Á¬¾É”x´¸ž¯I˜—?4gDô¬D·&üõáoþBƦ«N×x±&=ƫԩzd5ieºæV‘å¤ãé*Ó{—ž}zŽW)tºÆv.v«bmŸ~Ël9/3Ù|¾XÓ”TR¦!eM&ФJ×4”L3‘¹]M&dœ!Ôkýh1_×s ¤G¶ZŸ5“û‹÷AŒ@'T¦@s¯Eñ÷AºDƒ,$ŽëÕâz9­£øy´ %QIVº§'õ•Ï<ÂLë÷ë$h6“î/§CÍrE7¡‹'Ü“2îH¤V¦–ê§^ž¾ú•ˆ•² 6¿žÍìg4¸L”'‘„hU2Ù·$™H0°M–Uz_³µf:Q—HÔ”ÖN¤µiíDZ;‘Ö®¿â@k!E|ÚZlæaÕTÇѱK‘§=G K,dâœMž²MW—®‰S9ö§.5õDä·œºIÒ$NÝÄqLœº‰ó1q:&ÎÆÄÉØ]¬¥5§$‹n9'!µÒ$Ç’sjÜú@p»Ï;‘ÉN¡eá­dÖýɪ­ËG?Þ{þò῞CV•çÓÅY3ÃÊ—ÍüÞ|Õl^évt1Y’>CC|•«"iŒ õBA½ÁX‡¡ ‘áˆã¾lÎÖ„#xL£7ñj¯#‚³ýhXCÃQ=ºJgBITŠñê@*¡ÜÄ>¸BìéJïkWn5%lÆ'ûñêqݼ¹€°…‘[Ò´¿_”ß–ß•OËçåI9)§åYY—çeSÎÊËr^.Êe¹*×åõ—A¼‡Þ¾‚-Í&oVä’.8¸ŸWÊÉã¤Q‹ešY ?,)îðêÙä².×w°p›é½ù(ZjV+¬U@-#Rž¬ëË_‚Dï ¿³nåiš¢†ÀÜ¢?ÿð—Ÿ<:~*4´Ã†<ª$ë6Dö[DaDAuFÑ„†ó1\ —¬³&ñ±] Q/›Õ—“õEõ<#~ˆsÐù³Ö1î†ßBÂMHWìҭ؃ó-4=~öóñ·XÓû¢‡c=Ä1üð-û!ãɱH–ÎuIÁ]Ìoˆtö}·?ºÅÁôtä÷ZX>1¼QÿPUÔ'ÝÁ‡Gïa’@¦«ÐŽ=z°aº.DU”ÚÅéÞ†Šš¢tÅP$E`xŽÀ Mw}ÐÛ\Šö(Q©âªé‚ICwÔë¶à})à»w¯¼_•ÊG!~(Ÿ@*<+„d8†lxQþR¾„„xÝʈóæ-.ßå›ò¢„óuQÏ!8þhEÇb^—W%|²fqVþy½ ’ÆÈA¤¬ê·¨½jÞC¸¬/–u]®ß-Êëòmù®üPþ·+n$™ìíPÔPü9&7 }?$ý>aŽ6°1>&l€þ-.øîèÁ£‡Q²É.˜!Ø­Ž“¡Úe‚ÑÚ‡o˜À@± áë+ƒëC´Wõ(±ÚAñµs`}j©<_¾y#m¸Rí±_ªá ^Ë) rTz;Ö‚,¤ƒƒDe ÆŸá*´°Xl&¤÷á9°(üƒ0ÏЕ( ÛAßäSùvZñoœšieÚ«¬ªö}ÏFĉ:B½TNï#Zâ5¿#0èJ_ê3£3#a‹5M5ããk>l™óû-ö¥øa‡Çú<0ZŶmyöð‡Ó—ÁzæÁžÚ°Y67nr!äЯíB»­5îBÐÖ– ‘¢°$o!áF ˜ðìÔxQöäá㟢“Â{h¾É‘vÛ¡C§-T…rÛLH“è0axlq>]\}*¨GÞNîÃy(£ ÇÐÑïr›¸X¹ïJmè{´yøøôñ“ïÁ?/^ˆ±h×fë[nœ‹u#MûÝ¥4ö½¿í§?^î}ûíðËeñnH.ä–÷Þf™ƒ=L÷6ÉdŸu_àn‰ÛekË\—ïzÄÔ'b#è ÓXJ;é4ò€ÚÔÚ¤0¤µÉûΜú’•Þ$ŽßGx@ oQ–÷A>þ.7»7¥ÍÀøê‹‹õúê?eùîÝ»âu³¸¬×Ëf:™}õ;4Ô|2+ Í¾ ñÁû‹åY½LB-ØeGá®"=<Æd(ô8]‡ÐŒ, mT+UÀÃ0J”R ´.*X²¥Ú'Íü. ‰þ­€;Qp®‰±ŠŠvÜ+UÚ÷Ǭ6ã?†k’þX9&L¾¯XÞê9¦Üˆ*ß+–vOpo˜Ìmá³åýcM>^¸ß’.Ï>yúë ©§ßõâ¬bn2Q•ÊÉGÊKÖUð!³¹§±¶:ìnnYŽÒ˜ö½ñÅYMk*ZýÖ›?ÙÓ~îÆÛÍfäƒ~5;û4.Ãä/cý°<Ä©É*%:Ô ô lÒ*ÍŽji Y«X_™î\·ãD=)[)õÖå÷°(O£=9»º€Üª×“rzÑl Ê«UÄÞÃ-œÐÛ7´c_/³ ³¼¼&§ðz#Ö®.SrœY2©ƒðW”ï{bNì3•ˆ¥kF Ä\B¶bn@“cMF9Z¥¾úñÙñ#2IO^õý²,q[¢çÛ4o†4O¦ò¸H‹ÈÆÅé»[›kk¹N}×k›?Áî¸ùªÄ¨Ì˜ýè¸ä.Ç5î°ïû…Ûv[Ÿ¨Ý€¨)–2¹ºZ.ÞÇ(Çd¹\¼‹Ñ„דeùz9™Æ0C¸‹xqIÁ ´hÞNfõ|Zg*4óófÞ¬?j¯.›ù5þlÝ\Í>$º'Ñ&Æ;beMšÕõëU½?\6³É²–ØcÈ%«X ëÕ†y8  [èX°î#°W™…‡”,²0B¶€–…SI¯ªBs½Iè)>Ãe!•¤¸ZáÑ<«l­}¡üHw4}4²}äE¥ƒ(êíoæÍŸÏOÊÈŽâ-78ŸüøËãW?ÑjôtèMºßöDU5,~l¼ÇªçÜOô9Lô8ì¸<éËï6¤oH¯ Ý"Á,—¡õníg ð1’z+~âù!oµ¡]øqRŠÂ9±‡l 4nB: í iÎ ï=° ª>™l#5úˆ )ÊïHâÈûiŸM¶¿ Վ¢ß`Qr]Z&è×ÂUûD€¶°Î ™HÔ:ñ”˜l½.¬‰ÌONX^Tˆ8’nv' ŸHÚU(r%/$ O ‹¿#àFbN 7‡ÈΔ ïÁ;K‘Ò‚"¥ŸÛP°§¼ºž`wB¾› ÖGÐªÂÆ /‚O¢Ø]P^Ýß ›³Ź#h’Tåh|>hXR}e7°U² ÌèÚ$trDK?JÑöUA!/­lQÉ‘^êWaMi³/§(S‘€ý|à>GQˆÊAÌ€7½-(”"¹ÆÐ´YU¬?Opç JÞ— xª ý8>rN”ˆô]Ë]F¡´¶àr¯Ð… Sc€Þðl­„xãŸ%r¿L6’¹\ë»ná!¹öZ%XDa(™E`qÁÖÚʬ2wΠÎ)0¢Ý ο8íq#ö±ƒ†P¦K.»!ÿàœ)Œ¦ÓC®àtRÆf%CÊì¦ƒŠŽ¾‚qĨ}ë •ÄE a!­c‚8 )=2Öz†9tRئMPAüZÊœ9ú‚M[U¨exA§¡´çÄ*°}eaåX¸6—/=&'ÿÅ ôšÓn ½Úí쀱û–ö£ñ¢15؈ïgî©Á”‚k))ƒSjŒ]3ól(QΆL€Þ%ë—Þ† ¾XOЖ=­Ãöaåv³mâ7ß+¾yŽPÑEc|HèÆ©BÂ&ÕKHTÓ¦þ´ â[÷}ìÞÒ&O(§ Sø~nSøâ6SJä;¿1ï*ço¶ðû»÷z_$ÊÅRAç~Ö/¿•!3 ÒÑ‘(36{zzzÿè8îiu¹@ä37äT½Í[Yárl4¶Ô‡+ý=䗞ư]k;¾Õû]ÍeÔñïGv[ûÌb¥ÙÍ,ÃŒ×çåOv9¥]ŽÕ´ibºXΪå¸ðõº ÿA{{ž’ëÚ›œC×É­É;#[96q“ä‰s7¥ÉíIŽ 9;×s¨µÕt±¬oJß‘U®/D,ܽ㜳\7ì?àν;δ®}a Ú!ö%™t¶œÕ®°êÃÓ#Ú:yò ©»„ÄVÂÉx!ÑKAØvpÓ·Ÿ±ºpSŸÛ©czéרUûæñ>­d_úŧ%]HµO <" ëʃ±þÙb6CýºÏû;Ù¾Çôã÷ Ÿg. }6®|,y,¶‚ïbä­±-fê²òWbtúHµ//ïæs>ëÙÛzÝL'];7±å Œøù>™’0èíÞð¦.(¯) èç àjÓ¦¼¬ gïÞa¼8)àj«p ®¶0wœÛœððÐ̾JJu‘´i!(7‡üF:-S|$híΉ‹{{.Ñœt`ÜEƒÔGÅÔÛG‘‡: ëou¼ñŽ+tU8J-f…’Í'aöÓ]_!Uáà i EîÎNà*àØ’W¬LB„Ç ­)ÈC—ß„é3›–ÚRíýèLz ãû6ç;íË}2ž~p&ÞƒT^cJ¾JÉþw ÒÁû7”M[hŠ2…u:D+øØ(ÿØ<µ£ã{ϊ㯮– ú½‹b±|sëô4EK ¤ü"üN…ðìßU¡ º£P¢ _%t@²0trVê‚r¬î°¦åñ¼~·*?¥ñã.D³´¦c¶Ðô“L¤WFÆôþJ ÐíõÐõåõKRÚ‚´c¤%À ¿ …Rô+B¾à´[ù°-ô¹g” çȺ²ä/]1c Iâ_òBXÙ®˜Rªc™öoX1E;d¤¾ (T +«0Õ…"%ï~.~­,Âb»B9Õa^(q`ôÜ–dQI×bWÀXðü¨r”q$ù™¡È¹¥h‘ ›Í ]ñ±)6Ÿ€ßßWëÉzµ8¢ý­e#ø-»rP’>*%ú%µ–ï <õ¡Eû!oùò‚Nº+Ún§ß烆Rîîá¶eë[À-.(&-Á´«‡Iù² í±ùC7ˆúDïø¦7”4ççõ’òGã¹#óªYH¬f1šôEC>4Ø,/¯Y9¿¦tû˜2M?žByØ!.•r°S}~mò«égrRø€ÅÍ7N°é6pÓY¶î¡³uËYLšeƒdYÖfÑÒú6s6âi“‘Ëz©´t¶~“Ëzéºá'ÌRª-ë&‡“4›„`úm¥6µ—å,`Êûb›> stream GPL Ghostscript 10.00.0 2025-10-19T15:56:53+02:00 2025-10-19T15:56:53+02:00 LaTeX with hyperref Simultaneous Inference in General Parametric ModelsTorsten Hothorn and Frank Bretz and Peter WestfallManuscript endstream endobj 102 0 obj << /Type /ObjStm /Length 3788 /Filter /FlateDecode /N 99 /First 932 >> stream xœÍ\Ûrǵ}ÏWôcN¥<}¿U¥REIV$Ų}(GrÊ05¦@ €‰¯?kõôƒ Š ÅB3ƒéîY½÷î}›ÝÔÊ %´rÂh‹£Þò:ˆdxñÕ’ÐFeœàk~Ñh<~ÖZèŒa4ÚcÑ#¯ØÃv·¼°Úœaq†“(¬7'IØÄgë,œr†ÏNg>P g=#œçÉ…À_œpɰ±.G6Ât& o@™$¼#x“…÷À•ð µÕÂ'¨Öˆ`ÃZ‚æ‰!à±^„L¨6ˆ¨¹EcøK q’Eôœ²S"†ŒîN‹˜žžLãÕÏÇóÅòéÇÑ\ÀD”‡?kgóñÅr6/^Rñͨ6¢$ß\þ¼,'Ý#éžü÷ñ‡åG,å¦à!˜räÇiN+%%†ŸTVnL};öä7y¹ù“íz;‡ëŸ®¸8#©# “|:ºxÑŽÏ?ö—˜iûGy"ŸÉ—òoòT¾•ïä{ù£ü$—ÿ#$IÁÞ_‘ˆÏ'£óí:ÝÍ2Û'=‹y?à ä°?u÷ž'­…Dt"^~úvô©ÝbÍËåh2>;™žOZ´”¯Ç‹øR¨(èëÈ7ËöÓÅ>è<à‘|Wçä`E¶áý›?~÷5žvš¨Ém10›b/â@1(Z¨ûxú­ƒï6+‡­ËµÞÕjø‰áf!qÑ ®|¨Ç¼Öì[ýÂ6›"Dÿx Bªw BÏ :­l½Mä¿äTΦ­¼˜\.äR.?ÎÛV.ÿ3“—òwùßv>Š–)ÒTdËšM¹âÍ?•Ï^,«6kÕ‡ŠB†›Ä öqK¬^}÷äÅ«¿âY¯_åŠî_‡êJœÀÀmqri•ÙÿMǸeÈÕuØ)a!™=|÷fßÛ~LÑþÌî–\üžn7¦®;º•Ì[xl®Ä{¶\‡â¬x¸@.v­-ÄnK¹ùuåæ×”Û+9’£ÉÅÇ‘<›}ú4’äXþ³ÈèôR^È_åb2Z|”‹åh¾®ô Çé$s]á}ß±Ü pLù´ Ñ4›¢¹..Ê&LànÑÜ’Æg/ÿöêíÉŸ^¿yòë05—Ô¹ r É:LË…¢§]ok øNkZÃyó½<PüŠÜmn®ë à›ý7¨m7©½AŽCUò‡Òû›gïþúí7`ç›÷ÃÕÏ0pcõï"rÚ rØEäÁÚw׬ýM{q?Ÿ¨Òž;|þMv¢\^q¼´ŸÐJNFËåø¬]Î.ä§ñôr1\xÁí^wªÜ¢ÅÛaü¦¬sé`ƒp“ÌæÚy•ȲòŸÒ;î/ÐÎjåñ»÷?2ÎjsB.éÆ˜Øéåd¶/€ŠÞï{ÀÇhàÿÛšÄ<–QM„u×E"¯dä›ñô_=ÈâŸ>6ã›­¿iR2û°yÓPK_ ÝÜ1À©o®OD3M´Ð®QÛ&‘G;Á¹¬›x Æ©aÚîQ@‹dc¢T7– 3¥šl «!ë}±ô@q³¶QÌï"&‹L:…‰0ñ Ì>~ay‹®†+lÉ4NåÛa;e®®ÆÎ§%—WÏ}½>…—Û«×Sf%U߈)?­û SrâõÂQ/(hýy*Yq^܊瓯(W?o^­].dq‰Œ*̵øËú¼×,7µMQlÇ_u) "‚u™<Ð4ê¦ì花c$Q'èsÌfÙ3báqS»ke7ÌNn\ö{õ»j@0© U¿CÏ*¯ãz2Ì-qÁÞÂì3‡.å&EËÆMIÀxFÄÍÞÂLF󅽘æ/ÒÀµ7°Cú• Uº7±;Þ»&ó5õnAÓ,ÄLN““|«Ÿ¦ø sï6ñlÎpv…-*øªù°]ïÒz4p&¬ƒ¤¡»Õö¡B"¿08‹ 1»´‡#_áÝ Ü)3ºÏ8>×â´¬ƒÚ`¡ˆm@Kêjæ–¨kÜ1yØ›¢5ᇫ‡°fŸ€ÃÄ ÐøÌÉtSà!4IÃW´_ü|Å7S=8j΄§5‚ú}ÆÀ$¨´gCj,–æ£g¡7ø2¬ç”j¢z0¶Þ„Àä05×ÅãÀSÃÒª¼!ÄÇ…Í! SnSA&Eƒ È,¡ò¶q|Yer‰á¾(6ís“õ\ò åïîØ®u%¡îù{F-¦“±×Œ‚«&Íá…˜0V¾›>:¡I|ØÍb”)^8Õ]0GõÜn¯ƒ­¢ÖWàî4¬ï|àœe±ÌÊÆ‡wƒN—¯ÀÁm)ùÀ1ñc°"®ÀeD‚0îz%ì±X—Öƒë³ì\Õ†Î.¢†ŒÐ/Ø•%u_šVžqrM[’/>¶ DX35ù(ÀG½1iîÓ1ÀÃ@0êcQ[å„@Ëàè»t|6æ» ´ú‚!ÝV·ª$ µ‚0ÔrÈPË!C-‡Œªk­g¬µž±ÖzÆZ »‡ý4¬@´G«@Œ5³|» ăD.¯޶ÑÀÛŽz¯E͈ÝKëš öØ’z‹Ðzˆñ»Â,gb£²Ûë"Y¸H¬Q %3h˜OÊp73¼sÜü |~ ‚„£–"îÑ zƒUvÁª‚†(|Dgï¾1t½÷æRSj<ÄV£Iɲܩávomõ½G4׃sÖ!,Õ+pз*Æc€»KÂÆyWÜHÇ7À.36|[†^Ç}¿x{#o""Ó²ƒÒe©Cst·$ÒÝ’Ðwgq7qûQf×ÀÜ]´ã?Å=NÒH§Ñiâ¾'$W¯­¿_g"Æ©}òOm[öÁPÖ–²’²CÎØG—A=FíŠkÄq`ƒõ{½Yèznõñ΄pc•mŒ¹§×sÔÚ­ÖµCÑßûÓÞ ¢æ¼ðTm,Ö© y×Eí‡áºzý¢ü»]ŽÏF_=™M>\[MyMiäç›^ _2±¨ÔE&Cö©Díu© 0'‰;ùàÎ'nl1œºw÷Ýçò‚òúŒ7‹Jµ…“཰YßQPî.{,z bƒ á>´Ç€ÍjEF9¬·#&x/t®"¼™ã¾1ü p™oˆõ8ÄŠ¼t;p§Ü°Õï—;循޹;5wz=ÉÍiÜz¨½óܵ©ÝÞB¾NžY9Tö ÷|!éŒé½ ÍõØt@hÌÖ=¸2?p7ŒŠ€¹À‘)7€…?éàØûO]ޝ9œYaË,…ÍRqïÏ%8J‡$ª®â‚’E@sÿÌõØ «üèKöØÐÚñ_ÜÛ5Š`÷jß²Ó_wòö9kzÞ¾=xÓƒÛQq–ÛŒ³«¾Œ;á½éë¹ú³þ×ÕµÖbøwû®Úq»ÝîÏöØÃžCLÃQûó5ü'ÿîk¢ÌúîiZš=—/åkù­É3y6›Ì¦²•çò|ÞŽ–í\~üýâc;•9i ù‰;ú½a«Z²AE˜,ûÅþ3ÛÞ%f®JÁ¬]ߌ㺻üo;¶lí?Ü›ÍZ°Ñoƒ9¯W†ñ—®2,î+ ì3wpynDîg4ðêŒß›‚C°ð|´-þs¬@_¢©{<“+y¯]¢^jôSo¥ŠÿÕf‰à¾(6¾ÐËå¿…l~—)ÿâØveø/0rßîFåv{6þå—+…yJR¡Û8SÊ>뮚²—hµ³†é_ ò9Oâr/èæ%§—‚e™e/Tè¶Ï‘e Ý‘ž‰9 «PÅzE© ŠÖ¯ŠõjÔõΛ½ÏçŠa)«X«IÜ~4(z]ë½ w7kið­RÖRº¼Q…»›:ÿ]1µµendstream endobj 202 0 obj << /Type /ObjStm /Length 3174 /Filter /FlateDecode /N 97 /First 900 >> stream xœÍ[Ùr7}Ÿ¯ÀcR©q\,S©T9öhâŠIQ3Y˲DˬQ(—Dgùû9îæÖ”HQ´¤Þ€Æ¹ûÒ 5NeWެ¼Ï8ðÄš¨b"“ÊNÆeE&a E6á‘"Ÿ#N,^A˜ƒ?Ê“Èã/àmÄÊ:oåJY62¢ÇmÂEŠ2++g,ž[£œulI9'kY«Ë`딋o¶^¹Ä2x Éà <•wòV›@Ьn³ò/³ ÀÇPŽ”Ï²–acSLœ¦b'À+.Ó]P¬Œ‰Š 3\Rœ ÎàRÆ`o†àÈÞÈ«¹ãTˆ‚Ç{RÄ{@I4B  O@»—“YIEŸ 2ˆA€±*Þ³€g«%ðJÎɉWÉg¼‡Y¥ âkR22+ª”ƒ<‚ ¬µœU¶³‚QÙË¢@™9ãQ°*GÐm1!§„Á«œ±Ž ¹Spfeýqæ½ÜK8 "˜ ú…‘ш¦€C6BCLŽ@ƒW¦`HœH„-À™KX ¼!b!c Šƒu”( IÐN¢¢ƒk@A1.‰í‚XâeÂ`P³„Å*y9ËX#a ›½ŒÃބŠ…œo¡l ±¨$Öp,ÒcÈEhŒÍXúˆuñ&‚”É[TPòŽeÖð,J™ƒœ 0òÑËÜ$öRÆa 6–ÿöå—jôbr;W¿ªc«ÑO?ÿ¢À¬h’6 šg¯®Ô5únòç¼kõýÙÍd6W¡^ÝL~W±9ÿÏt~5Q_¾›¼{gŒ¿0&àÅ4êÎd“æ¾\s½m}vÑŒužÜî+õÕWñóëXüï¶Ãž—°C.:F걟LonçÅÔa¯ÎÊU_ ‹ƒ„Ùâ§ÖH‹ 9…¼öyç¹!+V6ÒÚqܼGžE×Ìñ¹> = Ê8¹'ï㎕ Ôâ¬lð&kˆ{M„a‰ÒN¤÷¦nd~ sÔ /Ñ![ÅRù΋—Ë€#¬›Í®ç· R²)A(¹Tsl¿ç2›ƒ¤[å|ÕÀד‹éÙ××bžÜáÌùvò¤‘9õ±¤ºßñäöúãÍùäVÉŠ'×ÂÔjÄÍõùéDØ<úþÅ ø#¼|t8ýëÃD^u9YˆTË1:m eË"ؘB„jÕ„ZŸUXØšÕª+ÙèÏ6±ÔWVr=†zŒõ˜ê±Á)Éfs¬"ȶ]=ú "¡C‰$óCD²ìßEƒõÆ ²Ño·~µÍ ‚Éf}v;)ðGÏ~:=ùùô‹ç¯OOá(Gÿœ__Lg—jôãtölv;ío”Ø÷üýÙ‚ŽâAÅùÍôÃüú¦T¢]Hì~|;/´ ¨eD³ðÓ‹ù{‘w@ió¦Ó‚ÛóB0d6z~öá›Éôò}{‰· ƒ??/,#ùäêìò…#£¢*/ÿºh@8–Ùoš''Ó« Êa_ÝŠÜúîì·É^ÎÏ®¦çÏf—à0._OooÁƒYj_P6ŸüöjÂEšØÑ²ùúæbrS¡˜¢å‚š‹ªn!x«QLwFl"Ý7% x.3"iˆƒŽ¨óaTZJ=¦\áç_MgÿkA{ll$å—·=8‡TŽÎ[¯³sCàRÒª*‰Ìެöΰˆ§Ÿ›£ÜCó^K'â8М±šüLKº.ýŸܤ“®×Àæ Jfv6ÉIºWÆFíÅýÚ Ë NK_‹2L“è‚ÉJ«ÐêdŠêŽÂ2*ðŠ¥çtaÕI õ'È7›|HXw•¡K¸¢ué’:˜cä"qã¥çÃÚÀƒ×•è200(Ió ¶i¬4e#tRZ_F3fØ¥ç.¶’L÷¸Ø‘ÎÒ8ÛרãÕÞÆEWÛsé,×séSj/ È5tŽ ³I‹v"óÎ,tÙ¸ ŠIÚÌš‘,!Í<ô‹ñ=Haïãy(fÔeƒ^-ñ‚¬‘{zuë¼Ë:zÿi±yvP¬¥ÙxhžÖ¡¤ÏÁ9!ŸœN%æl­ê> lmbE§ ýo ®–ô'ÅFlÉ¥D,Öt$p.IìCàÚˆ­‡¸è‰`ËAG”#-6k‘Op>¸õèrGÃj%I ¤*ˆA9"K’P‚$€"ipŸW1NóxIU¢€¢ ]ùª”!Q¯pöA1ùà|‡$ œƒh1ãXà¬Íp]<$V†ñ¹ç‘-G¯'Ž%µŠ±ÇÐP‹C€{H¾l#`$ù®˜4E*vòå¥m¤E…‡%̨Élê` ×Bˆk·üR l;\ áLwÂ5¦D*´‰ž|S®»`j¢<˜&.fƒò¡¹mLåkrÛ6K™‘óľÑǵQǵQǵñǵñǵñǵñǵñǵñšc¹±W×}xc¯åÌN½¾±ö÷/N_þû‹Ó“ñk’oÝ}kM¾a7í§®£F.¬·Ô¸èZjeÔ½zj¾¹ÜSóÞ.öԚˮ§öj6™4Ö¼Yk¬yÇå+µÊϾ±¶Æ†m­5gCÛZƒöíÑZ{ˆ­“ƒË‰ðS0-/{^¡d‡çFMúè}«íM‹zGvM$”£T6¸è$f êxÿèeÐØ8"ööØf!<¶M©þ¡2ªß]ôÚ,€¯Êe«Ö'Å­‘¢½ç4Í \ˆ±9Ùl ”KåMˆ,qDÊA¶ yMù IÌà‚ÃÓÔƒ‰ü±À±tjÝ A¨ÿÛ‚³k”ÒSg=#ap=¸h4ónضä ÒÄ“Ýw÷Oú6Òjbۜ莌b!úóÁ¢ÿ>_Z·$QCôß7Wª/’„ͱæD!mÈÂÁ¸÷àÂîù.Y§S´€hQ•ø!³÷¢¼ðA>c¸ÔÉHÙHóè /6=X% Êd–O]YKòêkÕ “>18‰2©´¬+89’?8iíçá^ |äB™× YsÙ⹸=J—{û“x(KŠûT{ø“ºæCb­³b­³bõ)1lð!é`”Ç=(¬^ ³V{ÙÉìÿ¤E Òo`(âA;n{`cóe|Å–œ¨G RU3ØBMFGÙÄ-={W 9Ù¹/=ûðø=û­Ø,Ãw¸ÐaK^ùEÅ.ØØýXÈUÖ]H>˜!íŒÇD²?ÿî.Oùý@vwPºOº&yz\òH…¨S5úïøe'ŽóùôzÖÜúìý|þá£Ñü¡gço§zvõ›žMßëËëßG—“ëÏ ­ÃúDÒ^¯å3mqïÔ¬G+îƒìÈf›O DÖN>>Ɇ¤¦Ã¦6»c“T&˜ÔƒsNçäwwð}?jã¦t„ÿP[Õe°Ä:£‘6a’Õò— YŠ?hå¶;6ù”$?ÈêÀ±Õeå±ÀQ„ nN°§ØƒKR ûC€[­âJÝ<|’OQËîӡ|ãÏ»ò3+›un9P~â i¸Ìò»0d¾ÿn¥q«ù¤àê×pëá$­4 Œ6HÎm=Mî˜îØÉsˆ Ød¿ÅcaÛÞ¥­!¶àRÐO›ÔÎòó¾ŠÍRÖ凑Ç·}ïhIuSϸò‘òi@sp5å÷¹-4€¸«P÷]mísÓ¯¾ýå_ã²ù%ÙläÎÒ¹Q·‘j±¾‘»m5öß›VùpÏÜdìöïM[šžN~ ÃVI.Èk‹d^Lß½›  ¼ÿ׿s_ó]NÈnÐuƒñÆÿž  endstream endobj 300 0 obj << /Filter /FlateDecode /Length 7516 >> stream xœÍ]IsÉq¾sæê;nzpO]kWY§‘-…e[rHbø"ù€!¸À€ähôëKUwfuUãäØ öt×’•Ë—[½ïϦ£9›ðåÿ_¼}6½~öý3COÏÊÿ½x{ö«çÏ~ñGïàÉ1OÙœ=õŒ?1ðÈm g³5ÇivgÏß>ûóáæ|:Z3¹˜×럷çÓ1ä<ÏöðGãL·Ëûó gì1æùð_±9§wç6s2ùpo{3»9Á‡ð†ËÙϧ™BÊöð€ý4…ì?ÇñÂ1MÞ€ÇsN9”…ÌS²°îpu!ód`!°¾§ÉËüu7PörUÖoL.¹_ÑÉz«¿¿‡W€žsˆw€£ø)ÈÉ‘óq2Öà4=ò‰->КP„iṡIÌ4ÁÎohãцŒKrÆÁBüáŸáišBŒ¦#’‹[%Z¤Ô=WÎ¤ŽµlIœ‰XÃ=•£"/ÞMÞE»,(ñøêÄã…£fõ6rQÇzÄ¿ÓdLJ¸«‹º­ xðÙòîþÔçÂçpà&ÏY=eZcýáNÜ´%3.L1880\º‹Þ'öî\ìN±oœ‚‹31 ‡œða]’(¤¸É.À©KŠ¿æ9—ø'(‡ ËÖA§Ó—3› P¼! 2wöùð#€Gs÷ŠÇ…åÉcÇþ•ØžNI>¾ÅY¼áÞ—e£Ž—Î1Ù\r¸äÌð/+ç½/^‘,À‡ÛOþ“åg95ËM‘Ìq‘q²x†.eÊc»f”r_è”’Ku»aòÖ‘N€ ½ …µ“Ÿ[Qþû·‚p8›¢Iíäò꼑nù°Èo¤ÈFäýC:•¿Í@’²–*2ø‚Kóª\¤À<:ˆ&—zÉkR6 Éb\Éì ¼>Ï ]þð›óämÃá'?ºØøíªã.oV]LŽrú>±ªNÑyͪ< Þ¨ŠáÙ‡ÆCuʺo™\i{©—"ÙñÇ¥5·™¹²Óvâ—ÓŠ1Õ—éœËv¥ºÀHóÆäî¶g"}TøéòîÚÃw«Úx½Y«Ërúy>: H£Lÿ–ÆÈ` ?¬# sñ^HŸ”Ð;´²³11fX“bÊvÃ~>†hs­¬vNébQloHð@½'­`y¸1‚^y×—ž»‹ÕX±px°À³o ÇÇUÓ‹‰ð9Ê9Ô¤¤åã+!HRîH?Â?Û;±*X^`¸d³Vˆú Ò°&’†Å9&$¢“x†4Kî(îWDÅŽÙcË—eYŽqWwvP|öùõËUâ°AØ+Rß02bÈËw+oÎ[`odäNvötÊ0#.Y Æ} g?U@f³-Š,ê 4T"$#7hƒÅÅs™÷Âfè>ª=F ý;³ÚvVácz²ÃÎÞ¶ÞÀHÜÑVá]›™Íš¢®)ö%[‹Ø93ÈHUhþ ÔªóÇiB9|M Dqie±+ù†œõVù’÷ ®àášô¬!ÉÈ/™ñ“…e°E0€Àf=›†ƒ «mPóLÈ…ñGïÃ\ìäúYY)¨+€ùÿ#†(D‰€ÇLÁœ ™ÐlÒSJyV ¼*s‚AORöÀd™`|øîI=¦y‘Ô‹õ]Ü´G[cÕ¦¥ì)9‰ÜÏùtÁN~ªðÓBLBÕ,øL±X}°UoóÝIñ"e:ªDQPXDçJ 4”H>½9Íq(Àߪ‘´tŒÎÝHæ„p‹ùÄ>÷fÓ §À¼Œö#Ïãýà<Ø»·€Üà‹Õ»_Ƹ~±eúð¸°75À&&x2jÎ!<sܹ©5s~‘3<€ù[d'ƒex‚a‘ Ái/„ñhT¢,5.hÓ‚µa‰¤³ã”¬C°[;!„¼« ÂÄÜ1d<@ÃgÏÿãÙóüóáw[¡Ÿƒ…ÿUq0a=÷i ÇcK¨dF•þƒñ`Í-{Ý&…DÖ>²öêË~§Ó¨uz «Ð¯³5S–âËh ð!hÁ>Î ü·rõl]o–+…ã6%<…›[ûá-*?|ÅóBÇËÓ²“WÅ/e$Å$òƒ“$Re2Z¼nKH°_Ä땲y„Ä=¡ÖUÁáã®° Íj{¹ü â'd¯òôÉÖàNy|IÛ€Ó´ìÁ¤™à1lC›òêg=c"mÐû);ûŽ%0ëIZ<ú”§(½µqoý\âŠPÐáˆqíÓÌJØÛà >HPqsSM¼Ÿx¾˜øhx®7…q<¹ú0¨1G!p„X_“J RW¾ÛPŒ ÍÖ›Ö´º‰à± Íäqpƒ(p$Víô8§Xœâ[Ò1S E3 þ€Ù|ó±ÐŸ4ë§VB;ö8Pá\ñÊ_­Lßãpï­µ³ä˜ˆ'¦D÷M+¯Dê9fN¬TB·a !Áevy‹¡ÊvŠnö©p8aå ö#ðèÁTý¶ž¶ͧ”¥DMå(½|cŒ™ˆÕŒR B¶où Ø ªa;¯¤ÑHâq‡—о.B5Ä>n`úµäÎ<ÁqÜü¨ûÔåÑͦUif•{Å£‚zM›?65aH„”)Öj¾Ë¡ÿœÓ8ìk}õ°3‡çã˜ì[@D+¹™"m!:j´i*©Øí7ô~œcæè*îY~Ç&¯ó~;@äÚX_kAÿPÿEÊE!ÿ¬f{UW緛ǷC«a'\¾ÞB_øÓWwçc³ ÏQ=É¥eq´` wG9ÍøÃT¨ê:«Ò‘$Ó>¥ÊáE#_ kç„ÉÇÙøÊe×…¦(`·ëõº§®Œ„­ -bßË®VÈäákÙýjÒž°PÕöpŸ@ˆÑJAïÐÞ)ÄÁÁ2~9Nêe#,Òùû² [±Ù›ú¶t@¹&€í8)kÌn”kHÊâjî"i~6}B( GGç@‡jä*ñ}€›sh‡zr(‹ÙÖM¶ÛU?mó–Ћ·˜uü0¨ÁL´_âÙ&„S?íÅpŒ[gÚO3YŽ-WFôžçB‡ì-=Ó Py`ïÔ¹Öþ ´Géõ«Ç-”(®dÎNËáUåœútѰ؇½rBMX„ÐMªqtÌ ¦*ºõA¸§÷«Ó‹¬f) L-’˦±an`[4e\†¾nx¾œ³v©Ýÿ®„|Ù Šˆ¸ ×€>·ás¶#V}Û€€eÝ;pü¡.‡`™À™k#£shq)Ñã(óE”Ô l’+µ‡"+'¢Œ!ŠvTÞ1/s©Aåeùfü ±Õ¯%¿6jÀ“ªY<Âë×R®Õ—²·ÎkŸ¨+ãé <º9É1¤"]×úà'6~šûr\|TLRÆÆvþZ,‚JFL€q$¯H£²›s‘Ò¦„CµŒO±ã°¬—À€¥À€M?MnÈ"ˆHi”XØî·k«V±®Ñ,2!‚ƒš´‹M3`w­f sl¬ÕÝ´‘i­ÕE/óÀûµ›‘üö…âÄEºõzò—õ0Óá_þY3£mbÜ09.ˆFÏ5†ºïW'TÈÏÖ¼.c×üq¢”µunÃ\%*’oÐñŒN+UfÉRâ;ð+™˜d³àÙ°“²,¤Ò©!Ü•f‘Ñ÷nY'§Œä;èºCñšçç‰ü¼¬%è»®}£bN(ý¬q =«Û”‡2|â2]ôŽþCJÆÌyk~Ê÷« ÿ Øë 6Š•RƒO©S(üÔ.tùûûÕíû0€[ª¶Ì. a¸Ž•!¦Z>"v¸.¹„ùI3ÝsÒ´@©*›?(S)Pú†âìöá F.½MÄwÚðñpOIS”Iª‚Fìº~éõЉPø•9ÝÉ¢± ÛÕJRmXE®æ”U±»üÈ)aÉK!/¥œµE Öç£Ñ*T AªÌa–‡¶DÅ1£˜Æ(Ö)ñ1…·9-±—9Ž­-ºë3×J©Í;^˜Œ{­Çhš‰8(:ö€Ÿ$\Ë€Îö’£[r6°¤rA€ÕÜd–Ç:TørµtÝ=f-ov°»ëyÛtÚÅÛ1»ÆyK¶¯¹q]ÿe‹-‰™JG-œ¥–ÉØÃÖ± ÞJÃü(·yBÂDjo‡¦± ·ÖLç0ÝsÅkÈ:#ÖÄð¹Œ7R4o… ¦VæÅ`b'¬O¨¸Ð#—âýÎQ½^_>AÆÊß„›)qX*&n¨W®Öw¾ùý²B8ð_çÉ"Sr²MxlÛ`ÛÃÂ<ŒiÄ¥úÚY=®½Ÿªä‡FEY¡×­E€èH-ΧÞM8ÙýªÂ~åS·Ä‰y eÏáÆLº¸[(Ý&j´X\IÁÞQùAÕ´yqÜú¯Ÿ?ûÃ3nûßéÛÓÙ‡Ò·&X± gÞ¿JßÞ¯„‹|¿î5ø(þ¦Wsn* ©M¯þ^ ÁÜú–äýÖàUÙÚSwe&ÕgÞúã<ͼ«¿p œÒü\²ü=ÂYè 캗Iþ¹žy*: LîçìÎÙc;÷_Ι¦ijùT¨G”EX¿‡W̸]ùJ ˆ—š´Õ­´xÂqo5šãªß½ rOSÈÇ׫پmõÖµ[ýæœÊŽB[í‰óÏ\ç†dĆ#í#¡–*š@–*ñÐêÎ*ëÐH˜ŸBR=ñk^sؤ¥ù„ýÓGõè3ÖxpÚVm—PûOâ†×2ªxt¾­Í¨Ñ\òŸE:HL» uu.‚HÊÔcèºú³,ÊB×s½/Õ²FUQKöÙê'å£3é̘Ʌ*à_KÚ3еˆqÖ\ûš×r[ï©m)÷Gägœ”&¾–àSŠ?C+bg®sVÓ„uþ D?‡èX‘f§'0‚Ny$ÏÝsòì€ ll·wΧ±Ià6'f>{ï3¦ó Ã=,ðóÃçÙkN»ŸîìüdsˆíÙ- ™åŸ+ã9: [»vwç«">®#žÞ¼À¾g*G=(‹l1¡”“pk¶‘Æ&‹€¯cÑ‚Ê Y|W«õ¤úÂæ„h41Dµ™³xÛH3Uܽ­KSúà=>Åü ÿ{œÚ–ÖÊæ}=4¶We6vy.œVã~¡ñvŠ]¤ƒ¬R}ÚÜâæ°Ñ Íxæ™,éßGOó@¬å  )Í$\%ùö©õâ.P&úW'm↧å=)Á¢" MØp½X¶Ê’r<ìºMÔ1­42EÖh…€+Ra£Ör)D•*Kµ'l”Á½‘É0w¦>¾>=j;³Ê\„„´«8´a}k±6Å<íAQ¤(›TÚŠZM`-9Ì'åímS=ï#çØ:÷uwĆ·ÑM Ê‘CØÞÝ«h‘C±–2S)Á¯I­%€Š> úL°ë“ Bw×@‹šŽ©Á°{]|Rt/ßôróliîäöû5¡:ƒ£²KË£L„W-K^6IŠ7T¸ÞÚEo7º¦¿˜ÿbÕ0*ÜøõHj®xø=G[xÒt|㋪Ú7¼ÌJ ÿ Ùî¤Æ^ꥒEiÞ+ŠÛ©Ôn“}]a݉óóžÚ& ¤]kÞDL~\ê&´ÈÚ¼% ¹ý›zF¡QÅÜD±K)Ë^ªG9©Ø@RGˆÜÛ ,/õWai4rmÑ&>"U–qQsÒ‚|£*ø*½Ç‰]wÖVgbéà~iÏÊ1ÕË48ÎG öÚžÕ0@À”KÖ†êz±àÉ]Óã±›òzš«c<å¶I«QQMD˜±È[²Ú(ùüP7¢4Ý?E×xä¸0ÃåAEW/(ݪÚÿÉqg·çƒ|çAK‰XAiµ Ôjgc&oæñìâ¼]­áÿµÓkØFöÐžÇ ³¼Ó%4ãž…—õ•<²…Kð­öB-~Ïߦ)ty¾‡ù8Î&Æx«Kç’)qI» áiÖv i­c‘ÇŠ½(9å¡w)Ì\Gÿ•þÁNRÞóË.â¦Þ|Ó%Ššoi¨zÊÔNe©áoÜR%Z}¾`€‡DÇùUûvµÙ[ÒÕáÒ¥?Í£œÙwkËÔžË,q^Is6í}½¨âÏ•S<9Ž¿vP­oüuUtƒ«9T~A¡XÑ)%UêùA¶ékü ´Ñ0¯±ÊZi M ìã™LKÉÝÔU\ÞB^ïÊ»ÜëNÁ†³{ehC¯¬ÈÝýƒlrªo‰7Á€ãØúÒ½¼5é<8O¬ïï)—;…ž¿ û^$ É'—«Ý)x¬ éT’®Ó‰\eœ´X>¬ó¾ë‹D›òç£ÉñâåH‹Z"?û¥ ò%*µ¸µÑ×´ŠßâEY…=±£É-ì)61*Õï´0ÛÊÄ’*{àIMž;ƒ²(è‹{Nº‚ Ÿ²ÁsîߨB@_Ewn®Uï“.Q)¤ÐRÖ) $9ºâú3öuÅóAü݆Sê¥ÇºÓ袌ÝZ*2ù„ë>W,´!’ÅòÒfÜb$Ü11_>JÍêÛt\‘¦Z»8E-ÏÕ]Û¶»ÒJÚú«/)Î0&|wꮨÌuV}B:¼ó¦®N¥ ‹S)|ÑOì.„Ñ1žWžRÁ6aÇÚK±Ä µ¡S-,mïž‚m7×Û.Me¨.*…t[„, ‘A%ãÇz±Ö–ª p â4aÈ~“Æã㮢Ûdtd¹ý}Z<øÑÑ\ž«7ëØdļ§Ó7¿—t±BÉ¡ÈT<•’;dšZJ©”1³Š¼l#$[‰•IŠ_®7«QgUImúpô·¬þÛ´¢”LÈ[éÀ)ñPáÒQkmÛ>T«äv¤ôWO]ô‚:¤R\M/ïín%¡ú ×ÀÞþ¿ßÃØâåì6«@ª Â5bl3ù˜v¢¸ûWÝÕÎ!¢­!S0öŽ>jÔ4¨}šã’_?yã#ÏTZH_Ÿ÷#%mï`ô‡Ø·¼|(ÒFAЧ¬¯èºù‘ ŠÀi’‹JZc«œ‘Q¬J´’¸<ÔCKzÇãT½¹Å·-i(.£$ýõh®FáåçÝ6žJ,aˆ°>®þ"á+J¡þrëó|j¡Œ6NÇï_q3D%R/uÚw6;…DL¬°Qø¯äÞ¹? 6ß§õä›I+kñör`³òuøûZ‡j| ³Ø¦;OËNöÜìÍùo;„èݯ4­FLˆa[®(͹,ö1•ëí5«w Fö±Ék'OEØMŠ'ÕKlÆ6ÓÒoMäèn`ÀíÆ^Wü:Œ5™›,eäOèåû øj”D|(ûÎÚE»ãÇ!wÒlê² &Çi ‹ïΗ‡˜vs‰ë`…þ½‡—ü:­‚«µ«È[%7FÃÈ0k‘ÊR]ÑÚGd[%ŒÞ žàª²hàB9Ø#z:x£ÈýãÝŠ>[.%¯u÷Þ¨JN-¸Ã€Ï~œk€ ü÷¡Ô.€%e¹séÑ+jVW÷7wÔ`Á†Q6 +JRA»w Œólº@A“–ǵ™ S½Ÿú©)^¥È4™Íª)PŸ*¬±ë>ô®ì,u‘<[O%}óž¦"/oè뚥YÕÞó—snçtÁk›AUàÐai„à¿m_¥gÊY×ï=”-Q(úKd±d³5&·ãL±‘? EºˆZ>¿³@;(ì3¼ª7Ô—!~NWÁìñ·{ôÐcCòµô/ÇùzJÓný"¿âFcÞ´xÓÀ<1Šh£:rÝ‹:ð§“ë ó¥´ ,I‡ò6—ª¥[¹*ÂÑë)ér¯;H ¥öùA¶Ñµ IÝÄZ° ð¸oÃ[õHѾѺ²âç{~:gîEb…Mæ?L¦ g7`~‰®K鉙/@º"4(4r&u|Ëî^ñ¨TŒ0_ŒÛ A—Èb{áX½ã$¬>Ql½³àc¦Êh97ÒÉTf¼ò±03¥¯ä5ÓÝDO4-Žä“$“>]­Vçְš¯m}4W‡„ûÓ)ÀáJKú(î +Q !cÃHÂ=MyÓ$$Vrêd7qܧ6l£r§ …+]?¡$l:®w)Åf¡‡on˶Œ~Æc?rñ±äòò1»å µj-V´ƒ6OZ$<é[ógcº40Z÷ëæZ;¬„Ö¸‹K]꨺UvxçÖm9榡°Pdž”B(ïŒ-¥ÿ2FΜÕÈ3ÔüðŒ%,áûÕ|Ë,A¥ê·ò÷±ðaš¸; NCgþßpÜ"7?»%táû2ÂÖƒê¤Ó:uôY÷uàj#þ*w{3ò‰1­C4[Š»íµ{Ìì,öï1y¥d‡Ê,SMXÃ+ ›léôÆ6¹çý’}–©Â'%­¬Jhô{“æPÅ_sžÚߟ¢ç(Uð:h ~ñ—¼öR*Ÿ/wøƒÕäLÝ{ðEÏ8i bÉ¡ñÚMüõh”ßm„lhûSŠDÌÖ´Ÿ–ض*ŸÒ”Ü)„źö8‚ÇÍ]ËŽî>& Z?æ(u›rsôZÂæò«šxøj-”óN6¿ôG~®?Èöç‹C~ýôMàßkøÓs¿aA ü`߀W1ƒVP<Ö» äÏþbýcendstream endobj 301 0 obj << /Filter /FlateDecode /Length 6383 >> stream xœÕ]K$ÇqÖɇ….ÖÉÇ1|é1Ø¥Êw&Ù°a -¹€‹6°áî3;Ë]Š«_ïˆÌ¬¬ˆ¨ÊêêÙ¡“ØS]ùŠŒŒøâ•ýýÅ8¨‹ÿ­ÿqûd¼xõäû'*?½¨ÿ{q{ñÏOŸüòK«.”’súâé7OJu4ü§†1˜‹§·Oþpøãåqô8*¯ñó8§áßÃùæÝ%|TcÌO2ðÜ@Sí‡T Ÿa+?Ž&úÛKìNyo…/ÆÁ$=Æt¸¡Ï?b×cÐÁþDF¬]*xýòø.÷âU0‡y¶jt1Z˜`~=Ž*ÏU¥0zÇ&ó>“ŒŠÓ:“óÁD±NèFC7áðWÇ™,õuÚg^ˆ²:ÙiQz´ZèsÊX#¶~EZ_“Ö‹·p5~ô‡·ì‹²6?Z[)‘éùœ½#&2/î–mï}%p2Œò¤F ûáL¦Yî5¾n±¹xÊ)9±ÁûËÿyúïOð/Ø`¼§/×î.@SÓº“ÌP§{_FѰð—e{•‡Þ+=µ±þðî‹V>ч7w„®oó0)FÅ–ÿ²Ìn¸~3­&-WS‡¼&zK¿xÖªÍæ¾ÇÑ)w. IñË/MºPfî,žÇãD›£IC„³š)¤/)¥!¥pøíÝÔ7N}ì8z]¹Õ§îôÑäÖzìFh é›ü:ÌÄæEä$søÝ¥CZð— K¹0Ö•)'VfÑ ”W¦SˆJ±ØSƒ€L(]è{r/èZ¥²j.…pë|‚ÅþæÉÓ¿ÿÃá ²=op¹¶¤±snÚ`»0ñ¦Rxí_÷(9à#RÛyͶûù\:Ô ¶éšÊÊ5y| ôv\°á¤4‡5|ƒ´„iM]giCî]€žSãã"¦˜Ìz1 ‰«²ƒo®i.Ø\v¼ÜnYˆ#]‘À^»i‘õùB&áð~›h“ê™vɇ‘oJÛ U÷äúY« `uØMT>:ÍÆâ²ŠMû®ˆžĈR“èák¹/óQâ4¿¡Ý¼¬ü¢HPtŒp8×? KÀö«y£["e¶²*Ÿðè’×;Ä)Te86Ô Á#—J„t ÷d†äD …Ž‰Ž ­u¡PêÝ|ø®ä) ˆÏÊ~ÆZ"“6ϧ’œ\ŸÎÂ_ƒV®ïÑ«:ìu9ÑÊÂq¥dÈ[åR2õ¬iˆã€æW^QxîPÁÒ3úZL§¨€ó¡èåd¢ªõ^η~þ>Ÿ,m¢G“¾ô¥ Ì÷*O9$×íq!½¢å"½qË‚½[cÐ?N¥ÃÓ-˜7ê­«¼€Ë\—6Lˆþ»/”‚tCNÁ;¤ÑLg‘s—UU´ÏDžÈ˜;›ßxGñÁ'ïùú‡%AF« QC\Pq: Bîãf¤.Τӽ^^‘Ó³|ÀÕƒº©ÌÓ`ÃêÙ¾– ŒщråˆúŠ–u´‚W퀭f’›¨]*xßQ‚õê,¼-œï[e\U1ÄNŽSí_‰)ÚÑ©ÿpÿàH'w~é›y7—ºL/ޝB¸”¡Ì nšl!—f9Cö½Ž„Ø4¯n¨Çû¼F¯5˜¨kÆöÏ .De*á­FkZL‡Ê!"6|%Qýáçì‹……bÔ>ëkF~$?pë>Olbþü ýã»ù”±çwhx¢û9zßT ľ”ë;‰³³’)qùÿl¶ën*8ª¨Ñ{5I Sö½z1ЇiŸÙ„!½ÑæÈlÍ ˜ÍaYÉ3åÕ`@[M<ÿ‹vÍÎS Ù\ƒyºpûh]= –‹ƒ!ØÔ€Å—râ8yÀûñ!XØ‘P(¢õ*ŒLƒS`^]Y£gÙŠfÂ|% FßéÈ‚#)ྣ l :0A:ÓH§dàÛÒg‚>ïØÞãS ÃTO«’öVä…GèHœÉžM—±YBo¶!] ñô=£³ßbÆlºu°'ØQ8*¦©í 6áˆzBÉœd˜Ô^éé-j0{ø¯ËArjµv¾&T™Ð{i¹S‘lí5õQÔÂÙ’W¶å&Ä–š{Aú.‹+ÁÕ÷ñ®Œ²Sc~£²uu½°Žî«oÀ'à‡)ž¢‰cþnÛšÁ°ˆéíÏgüpø5·Ô`,'¯Û8ÿ1sËê¤@®šQu¥°˜ ì}\Á¶ßÔS›‚­lª<óbþïiÛv7….-kÖÙdŠDÞ ¨qc‚ šÖÆu©š>ânI$‰â úm6aÁ2¼†S²ð×?ï™LíÌÙ®»”;àÚ’?¼šçõzÙ«ì…3´,Ì.¿ˆAðÚ”6‡°)ÁnˆB£e¿Ûh³Ý†ÁÔè˜ è¤¸ ?ž°#F7€©ÊŽ}[@ƒ^,µ“Ú13€ù²HÏ8ÆÐÁ$NùŒIBL¥Éw™+TrºX iP³ò$CGŽcc*­/4¦­:|‘9 H£ŠÏÆb§PP? £nÂ…ŽŸ…*n¸ü\Ç÷…y0ûä—¹ë,qVp€†E;Í ó“E sxsÙ;1ìf†E}çt x;`yó‘åL?¿*ƒ`ÎUúû|$eã”?èmÁ¤Áòñý¸¦ ÊAúB€;f OÌ)Ÿ¡ #:jKÿƒDÎñ¬> r€}ñ~>·@² ?¯Ê¾ñV}.ýk2ª'_žÓŽ8»ôcçMàŒ3©`þf"F×ëò¾Ãê\Rv¼›4èh,jC'{~:2sAFbò Ab|œ/P}³ Þ…ë·§-¼³í¼>"ó\!w ¼n‚ƒç̃¹úu3"¦Ì«G¡1¥Ý}¡o•h8 u!Ü”•£|åa¢ÒF•'+D=Dç¾£ÙIu#Șv5&„SòvÖã™ýC¹8Æ}òJ“þI)ÛèúðC˜èËSÞiÙu†“ˆd?à=Å‘_7ëû#9¦Á¬;ۇЋTÜOqéÀx­ªÇ:§{ÞOPƒ×{ Õ3ŠZ8Qˆ‚‚ªÝ\‚ Øf¼+P‡#‘®°¼¦Òz©© »}»¾—×Ì=7m+Óß×pJײßrSÎ]:÷Ë;SB$ll¬š¯±šý_Q ÿþñVüQpS¢ŒÑá.΂ ŠA]˜A9ŒœæÁþW¯œuÐÊ5Ùð=²f »”áe7Øüꉘ%‡ïqÀLn= â5Ln¿cX1ƒxl´Ç±m(„‚Ö[#)|¦~Vàé €°Íó]€yX+%AÉ–¯#’ŸÓNx„…0‡n·D@žD/"¿€î¦æ_ÍoÑí“#Ù×x„†M–<½œË"j¿™7¹ž9‡{niçEå«8BÁ×ø†¤ne¾ ¾)Rõ'—=ÞÉúÄqIÈÍQÙ,üa†`%ò7«…þ*S¦Ì^›ý2%Z¥Îʃ˜ÔÏμµº=b‚32 "‹½åŸ~»due1þ‘§n•í°:?Dtê­ÍÆYÒ*À’6 f区pÔXý¿›|íøC¦ ªT¼+­~v‰ÁVöãß^v2AðÔÖ3øWRR /¬!¸ÝNœ³· wÊtý”ÃÓ`PY_4 ¤Èé¢QÝ’6€a]œŒÝ€T>‘ÑK°ò€öe&uIH½*¯£ƒ&CTöâÔ&fwÁF×Ö5¡ÛsK÷³Ë’”Gþ½\†n¢Bq Fk†iu噜=;ª^ioV ‡^É”“ùóÎ\e" xÂfØ $ÿdmž}½·CŽ¡ÓŽ¦çÿÛ%؆°±Ÿ’¹3¾ÙÌxžOЉ™µšx@vµˆÇR:’tŽ©ít…ÁÇh¹Ó­õâ»–2WwÓyyVºœ‘Műú ë5mÇ¥ž—äz=-KZé3å¬Ú°Ò¯È9®¶‰guÄvg%ƒ5»5<ÐWtž;l8ùúž„…;!•À{YÔµ1÷ÁZ~þgSO¢øf Сó °ZÀ¶À!?bV.ªõ="*}¡ñIôM%1Õ p—>­E —kZŸÎE÷:'C±6?ÛömäVFþz– zš”nèBªf±åÀ˜ˆu‚©Zþ¥œ „d`td­(B­\’Oþ»êæý=`>'à‰à’6 w ÆíÍVxêgj.²ä$5µE´¹v+”̤Z‰¦¯ò¶}Nv-½h…A·´ Zq  K[—‹"žSwÊq-oó5¾ìs(W&@~Jö¿ZÀF› — }Å·éÉÿJ¥!À#Ö5R ×Gé°`ˆí'Y)Hcgùtôã¬Ô%XˆÙµR®ÏtN%O´È¦_öÃ3ûU‘ s¶µDF ³@ËÔЀᚰ7yFó—ué̓ê. IéSÒ“÷»MQ«°*0õ`…9ù7EDb6Ú¶ˆÄ Â#ËÈ¥S=„sKÉ­xø8jÛnùÂNÐöŒ9ƒØŽˆ.õvñºÉƒˆÞëœßÿœ†@@äº;»,8ÎŽ^ZÅò»Î‡:˜ù¤ü©â=ÈÿSy{D‡üc”^êñ˜àøŠ Xä×ïèK‹˜Ä#È4@\˜íƒªˆ³‰GkåÕ§,;xÄ£ç(¢öRÞ7:ÄyWÆùOXÞî€ËWw9‹e4|,uà5uY´Ó‡¥$Iuî¬ûý9‰<ám-³a¥B0‹j¦«TaÙ&Œ³V‹ž&¤oõ0˜àv‰“2ÖæTf#êßPÜ"³q‘ùdÃt•5Àèsuâų@åikS91I…,LÓÆì9i,<üÎ岋ŸÈÃ)‚£_xøN¤Œà1ˆM_ÖKèÜ¢÷eZЧ¾O“U"vûðôö±m Ë+¸éÜQQ²­Ò8fÚQN/‚ ŸiŠúÌœÑýô‹dtŽ¡ææPˆ&Ô ‹–‹Ô|¨ªäíÂý2A~+»˜]"ÖmÖ¡¾ÝV{qˆÙÒ˜žhµ¹$þÅ(qÐaÖœ{Uz}áÌ0zh'HáÂàcç»Ê·çä½ÖPñTã–,›rdæ[”h—àš~%d½¼$YŽL:þi–RÒÍž'¼åZmZl_BÙê…tâ>ü`TÌé&=ÄAÑZá èW7/ò3ÆgmvàS/Û³Yõ~ObãçŠj"ÿÖ¯7ÍÂüL/ˆ_çÞüÅý*„ÉI¨üጪÅõ¦7ùÓì"µ‹kSvíé‘]7¥vVÙuaÖLÏ"Ž•ÅÓO‹=9]‘&( ìûGÈ~z°ùý/R¦IÙŒ!òÒôŸ Y,ºæŸöú‹•*Â*G´s©"Jå=”Ū$¼‡†;²„Ÿ¬j‡49;[:xÿS¤Æ-+uÍ–>«Rq¶¦O˜žâ"²S•Šc¾n„%¡ýÔ…7îžÝUœè(¼ØºÂ_'~¹É\5Q“û6Ùb—9ì–(8Ø'‹Ð% Ô"òðû'ÿ—4×endstream endobj 302 0 obj << /Filter /FlateDecode /Length 7019 >> stream xœí]IÉqÖÉZþÏðÁ¯yåÜ ‚0ò&/m„}ÐØÉæ [ÓdÏ4I ©ƒ»#2³ª"r©WÍnJ#A˜Ø]]••ËK}s“<ü¯üûìå#qøòÑ7dºz(ÿ<{yøñãGÿ #RNÑZuxüÅ£üˆªèó#¯ðc4徎?y¡ì™^œ”“ÇË´)læxuË‘ÎmŽOà•ñøåúãçG|ÀÃÛ¢)3tl=a2B„y=¿¼8ÉÎBÜd¢’ñ`'¡‚ÔùÞ%JÅà\ZÜt ‡Çÿùèñß]¦œ¶Ñ^)¥?¿¸8iå¦ ,_Ûë|]Fw|×%ÌËÙy;£u^Ü8¼V]ˆ4ÿ!¤„QRs*á …ÐÁoà²ð*•'¾É] –‰:>»@eo4ÈÐ"Æ“y#¢–¡è¥¤?[im¢ŠÊ.¢m™B¦ƒ¿Jó;£ëw³ÑÞåQËx¼Š’K¹q=`¹àrH·8ïêWõá{Ç3Dáæ»Oùxe=ˆm|iRµ™â¤Ë~¾RŸkËׄÒWù/Ö-UEȾB¾Î¦ƒ$‚\+MçQ æšñ´¶œ¡-žPBÂ쥮‘f`DõëòÌ~poüšJéÁߨ#g°=`'\ϰ½ø‡Ž"-èê.h/ãlNÙ{cÉhú‚oÊLßm“lŽ,oÿÛcgnðí1Þße{Œ?·=tæJB™u.*·y^RY°0C£&QÐø¶tã0}h ðŽp 5 ; b&8`Aÿ!à‘¹Lf~nçåÞ{ƒÆ#>c:¿ÙM¸tñÎÑ"‚¦±âOÌþÝdvæ%Ÿ¤Ó“5H„1'?*îÁL2KBÃïÈO&;²ÃOF®:ù<[_;at=_ì0J߉¦½—|'7¾•øcßïdaÜï#ì;ÿ”¯ÙœØîÇÀŸÁÓw¢›@&˜þK|¦ñ-¸°ŸWÃûØäS™ƒ”gc£ìèÒ²7c£"¡T Ž&`Ku-<„’"ðMŽúNÌ`gJL ~QmöPÛÉ-†Èé/ND’«."ä—pÓmÒ_)0‘À ¤Qn?Ø/—1´`\¿f§ó¶ CŸíÓñѾ¦¿°¿¼IŽu0!Cq ú…לÄHü».ä˜tôý;˜3®„¯LƒûèiÊO‰O9é«°_n€2Ìë²Ó0²œbXΔ“w$¾,rî—l-× ¥ÁÂß"bš:èÌäåòû‹nüÛy&BíÄHH2á€*· †DɼüyßÐ$Öcu…,Μ-B’Û²(dÎç  SÒ€ê@‘ JÁØÝÑ®cL”Ù â†QIyïðžV† ­1“ö&co¿äg¾{z?¿MÓ²Þ€bhäú8Q…÷ z¼Õ4dý|iøÀr%~$ô+c‰‡>…Ä899>·â^ Œs'éc–òZs`¹F ãBulflñAÑä`¯á+ 49J˜dìÕb2_E%rX™Xä†•Æ ´Í'žkã[ÀßgOò}¦›¼(Aøê –cpbYð>%%»ü‚†ºú =«è$-0œEœ r÷´m”‹Úu'—Ò*ÝF.ù¾ > ’ÙëÓ¬ø> »ùœm;y+…oLP ¾.)|uþð•E¢èI®7ý/?m Æ/'æ'ø?ì©¿© æ  1ª;‡TTº—=ó½m˜&ÿ¸ìY3«Ú‘ 1„ÅèGa€u`xä’š<ƒ8"Rý úNâ5¤ÙxÅËŽ‰ÎޱþÞÂ/a2ÎG.‰·’zR½ã¿îêïÜ?ž³ïþñ¯˜ž.;f=0tðrvüçdŠS4é Œ1Å$p(ýÏ’²º+ÕC€²5Î xÆý·“”˜%ÄO6EÄö^K<Ï+50¨½kÃ`¸”â¡èN«f‡D߈Aü QœnÚÊI{5…Ä–p0 ›nÿ—‹ Ðѕ樓Mvôlþ ö‚ú-Ïó= ,¸¯©×ò–þBò±¿Ædhœ¯"Å t0¿ð²2ˆT©Úx³~^^À8ì-×Ô…%”Ý>QŒÉçelxÍ »ý%³+9Tò„’­_‘E­Õ*¯$j¿N½kÝ30Û’“[9…§Ó¬3±–ISå2o¦îl#NrPF<ŠÊrÄ)C "Ý‚õ=có™ç<ÞLÜ#žüuM<³«ß\`º²EpnI"zSN0û_ù-rÞû<øÛjó¤òýW×Wt:MÆUÞäjdBdPc>b”úOVêÓü+zË[ŠâÑ›j§¤À -q4<³nñŽ”¼…Tâ Jš>IçúfÉ¿âŠ̆n¼Õ", ÷|%ž¥²¡Øa@T[ì™} î«×‡ôû'môÌÙG>çZŒàÞ)ÉÐ×-?¦4ÎÌF\R«F5$ ¿ØÆuîž4^Ó÷þÙ/ïó @Óm…†«Î5-%u’Ï í¢–i&%‹µåÅåç`P?Áó±j¼M¯’].'—fέ¬ÈÔ°l]¢S(XÑ@¦ÕfQe”Â8J…¿r¾Â;Ø"V+öE¾ÜäM¾Áë``ðʃN¢æó2®´›¨½…Øows=·@#ùQð¯e ÐUÕi@ß§µ ½Râ¸pä­Áñ`Û×°t®È~—™S6eeû• ÇŸÜ zñWÙË´“ÞÆÚ·‘âþ«›"VD°S–„C)Æ{–²!QÈ¿(9•Áo…ƒQŸ'Ù9¹:±O¯®/$ÚîøftœI&4™c/L¨1¡{5uvÆŽÒ »*fØ'“.bù?=ïÈ=-¬Á0¤Ãµüõ6P¨Á7’k¥à=‘/ÕÅ)`VƉTôWY-»«0=9’¦ñ¦v|êØ¹Rn݉ÚG¦3©‹•b1SùD¢; S1ìùÐèȺ_ï`²Ô·ôþ×ùJhf)å‡atadàј¾ÙSÕ¬Ö%ùùQò2:¡¦Å@¥mлZ­ê;ê{»ÛâÀgÏÐȘr„Û÷à¶¢AUз/Q‡62Œ.¶_Ü€º3ãmåUÔ­=÷˜rT>˜ÝqÕÞúm2¿MUt¤Z^ KeËŸD}“ÙA¬Í^™ïÔþ÷¨‘#ápRdˆê~<(ˆªMÏgX¬!Þ-ÍÑÞÕàËï-IéáÝÜ»z VCŽVŸ1À”ÔÃüZÚk vlú j’Öäà8µ6V%…EÑš²Gp¦ƒ· oaRK=ýÝ‹É\*D¦{i»|KI¨ÆýÉZx|­Éø”ÄÄ/12+bëÄÈE(¢µÓT`vi»(BpH1u¸»]·³Sœ¬Ò¡jÀô!B"_—¦Ò˜:©œ3•ÀxO1×[V°«aÿ“aã Îé=›­jêj{À€ïÎÍ~ç1Å Ö#»£ƒÛ»õò'3•0Eù•€¾î‡Q*fkq¾·Ó¦ˆN:¿«ëŽk6»rÒ*uª²€Î„öìžxH¡§dï€T²QU‘„9›ªž)™G†‰×‘ª™÷˜ð óú²ñJîE6³–qÌ¡Ë/âN%IùìT†Ï«ËO$Û‘®úkz>ö@5ôá„÷øhMΜÊgeÃ6Ú”õ&E HÁ÷!¥çi´ hN9˜“Kâœ-™ŒdªV˜õ\½Ô’Ñp qE¶ÝŽŠ´g1Â÷ù·‘ô‘8ð¾ÕHúòÞ”Yµ«QýÓI½Ûðgé1Ù+¦Rl=º«Ôh½%u®uXûK|lXƒc'“Ê"îTþ¦1<¤²qNçh´«r\ÄÚÁàLCûOo·'àÎ î¥U5¥Ö ¤ìL·_¾ˆÚaÊèÅNJhdωü™ŽéeŽM>ÌRÕÞŒ‰¾!é° ÛüFò›Õ.x[I@ŠD¬•ýëB7¸ñݪ]ͯSügÄÐÍ^V®¸Û¢ÈI4EÑeaaæ Ü¬£˜ÖšÎÍÓ®L@R5¾çˆùò0ÚŠËÛl„ÐÃSo–^Ò40Vâ·r .f¬QŽ4;èX´ÏVGƒBEsÜÅyU{÷¯gaŽ;¨‡Ùü(ÈCÏõ„Ñ´ÕÞ¬3Ô·[½FÓ¿¾1T0(Çý”…;]Dß®Ö_ó„³Ý—^/šš2'(ëD²©y~ð×ý˜#=(%P]æÅ¨g™7däs{×=7TRq ®.:gŒ}ÚÆe»›yüÞLÀélS7ºê§–ªcPîüBŒÆ.•j¿õJ™bXy}©€µOS¯€ç3Ù{2M­Þú¯æ€ä;Âëéäƒ=Nñ: –1¶J`â…e+,ãÌÇ8g*vÊ{¹¯ÒOV¹ƒÂêj„®/˜DŒÚ>t[TìˇðÅSH0ð7º‡Y bMÕZ¦…Óu<•´&·•AŒMhN:æ”&FЧcŠDýkÚM°Ç¼ÈîŒ {VÞ<-RXº¬f€]•WùK{­ßt5ÂÎëâ±%0÷§Óh›©ÌpåòU6¬´GO„™‹V'³IÃTd¶L€c1L~V%ï0¬ 9‚ ¥ Àp`~låm&ª,^«NmTLÆ$p<Ùì¾È^]HQÐe”lªàʹp0%3¿NwI\)SM·xOÎ÷&ÂsŽàË“ÞäȈ ôÜíl°³lñÖ†°•ÓBŸQž¨U© fð Kn²&Y  lÿ°Éë2¦° 4“«6#yî~£¾¥®C¤Â¦_žL0ïU}báÅþäÀ…tå£sêA¥²n’Êò¡Ñl·!E[Xõó¼I5„Eš±â-H®NsHñpà[ª„Òvi8Ä®Ù8à&ôEæ5N(UEö¸h6Lg6-ºÞo:ŽUÉòX0øúy¡@ •íNI™àõ‘_Ížìà$KÇ°ÓÆsM;÷ê)®ò&#O 'Ç_¬y£VD£#ö£OߪüoìNY2 ´ÏíúÉ‹.$o@Í'wîLy`mTo½;+5©C8'Ï”f”%n&¿”#2˜D…¸â[ÅfûçÝé"‰ŽX]K|å…çRW)œÜè“¢/–&ÌV/.ôˆòËGx_çw#^÷ _cÅÞ:`…À_¤eMƒÛ@Pg*ÞÆuåèÇ[1õQK>—‡è lŒ5øÀ´t4®h'—É-÷Y–CøÈó·§.¶…“†>ÖÂ4ƒZº}¹º,ý:š4±WØ„V,ñºsÀªäÅ¥ü¤I_Æ«¬íÁíÜËWñ~hýÌPºÞ¹š Ñv¢!sk—jæ%1u.kÀœIýñ .¦±Yðâ,WàÊ cV£"é³nª|Pç'Ù¨ÀT^•-Þ¦y«XÐ’á@Æó”æ |î Å<ù Þ9` µ¹“±Ï}³-ëaˆ'Ü$ÂÏ‘v…ç&‚Œ—›ÒMoK<’õö"¤¯{)ÌÞð‘4­„ÐÏý?Ðo¡endstream endobj 303 0 obj << /Filter /FlateDecode /Length 7319 >> stream xœÅ]Y$Çq¦_×z°õd@/ûeFd—ò>HÈ€ dÑ€¨5,Ù²=É!gw–{\ÿzGDfUEdVVwϬhH{z«òˆŒã‹+ûÛ 5é …ÿ«ÿ}òâºøòÁ·4}{QÿóäÅÅ??|ð‹/œ¾ÐzÊÞ›‹‡Ï”WôE4ð=©h/¾xð_—¿¹:¨É(¥M¾|{u°ÁN1çË7øµÎ9ètùÕ•š”vÙ&sy‹ßûœSô—ïð{¥CpÖ]Þð?žâ@îòñÕÁÄËgôÌ‘._âÛJ+Ÿ’+C¥l 03."[˜í[ÐÓ² œ<=¡sTÁÃzØ(Ä(ôxÒ¦\e¢Me5~Ò)•=Ö™®ËCÞ% o¿¸‚u¿ï•ý匶uô ί&›as¹îŽM´Œ~ 9,¬WŽú¦¬ÆhX_Žôþ)&§£ô5ÒL+k³øú% 䢉Þ^>aÿPÏAg{ùJŒÿzÝÍ-ž3xfÍΦöHØðïšqþûáoX`:ë0ÛçÀ_üݺ[˜ OVÐj™‹J]=‘„v[>^/|Õ3JÜ–-{àŸçìërfAG–žH*\ö£Ò™kc¼It„✵2ùË/ËAs¦`¬$9Ì49h79t!M}Áû•¥UŒå b†Exq~e5Þ¹9×½iLoj¾Þçõ[íá{õÁT~«ò*äòK&Q• NŒæ_mC³Ó~Rο*ÓÃÒ+ßÕy^¯"zO¶[èÞ0ÛòùXB6´„±ÐK¡k%'&”ÒGe/AE¾P®É^ˆQ^ýTò67„fÚï¦D uÀ8K|ÿDð4 Ÿ2¨hfứ󵿻òžµóŽPjï‘\ÆÆñ…OÜœØözžè[z7'eŒ)'°3œ®Æ§Q敱Àÿ@2“cyé¯ñ%§€my§±Xð!À¬üëÊâ:ûºà*‡oÄy- óéLé$4À­Ô0`R‚Î_ñ±ëùë ôÂÿ”ÿq}(ûQÆÇ"õ>L¸"õ¾îà;RdÀÈa–Aímš‡*àÿã3¹x Áã0 7bû·«Îä_OWï"Ìl/ÿÀò*aÚ»ÍÙØ^'«Áùu:ô5È^g‹¨¡€µŠV¨gZaäjŸ ‰É.Ÿ¬pb„<“?9m=Ìj´«XÁ¯u¬!ðDA7L°¤yÙ»›h–•/qžœáÅm8Á‰^W‚*\¬d–ù¨ì,Š›€H’ÁF¦}=J\ôŠNNÙ í¡‰ÞTZ`帥…£;ë z!Jé¾$b4ìQ0¯ª†"—•`Ò4ˉâOø³Ä’„ôÌ‚hºÐ#0´#ùÅ=k•GB] Ü™•\êÕxìÍ<‰”z-6>êŒOòhÝôØH ‹ñŠ ®Å' î ‚Ù— ³%Æàk|<|ŠišOV›&QPÙuØQ(8JÒ {QÈׯë­s* 3Ýau†Å8Q$ˆ¸%5=äÍúv{ERe Žíå¯o‘=lÖúò{¤2XC©L¿Ãdzíy¦hÞ…d¡@æ¤ÎÓPŸ ¶·2:ÅC¯âì(Ͱ¯L4ò6¤ù®klMêLÊ"º.ŠŽmçëb·VÀ㿤Cq±Ç'röCA«‡¡#³ïWã^ç@a_ý`šT ?‡ˆ >> ÓƒiCJ DS[gßÚAæ!=3¼/s%à™“ŽŠ´:¬ÿ{âG—T‚«º iŠX‡fºz蘎5LgX¸¯LµHPaºWÖí` è  ÚÓù8Ÿì'Ôº-ñüŠ/yÙ¸©ØßXÐï7·»³Ã¯“IÃm,Úlxô4©YÖ!ØáÝàUþhM›³Å(V*H£ø½ð•°ÓL*pÅÞ⎒³[ Ÿö{8¼Žò¨|ô@é/[RÇ® Í‹ØÁËò íÀÝçÂ&Æ’ý¾Œ“:/Ú‡©„gf9ۉݔç±Ñ*—¸ª`¼_°T²|–=œ¹‰ñ7¾7:ê-ŸÍX0~Š¿¦§sÒ¾>sÙÀû ౹ɂé¨zVȇ¹²#žž6°×|q€³¾<¦äcí2üú8… ƒßÀéÏ€«µø?:ÅO›oËÇÏÖú=p·Ó†)9p*Å&¾ÁW@{ll›öd“IÇö$}U8g‡>ªØÓÌó*6¸Ÿ¸ e/è'áÀõw«5¿[ˆ:Ÿ†øÏ•tå?pÏ‘³åöŠôh¿Ë€«¼©®ÊXš˜[¤Ýž¼*À¸±~ãðˆ·€]Љ¦7¾¦ýJ×[,[Î4ÚÅ!òH괳ˀ(`f8:0?~ 3ŸÁy=iõ8€_·òYéE][ÀŠ‹•ò7 ÐY„}nÃÁ*° ÕTÎ’‘êìyù^ËPáÔxe*uwgd¤‡ž\-LÆ­é5÷Öåö`±BKžÍ¥RM’ekIΤ¹1µ­ßÔ z3®¥' ô“q­_®’[ÞÑZŠŽ.5ñP|Ê0ëLŒm7×–ƒEE¦Íä¼­,K‡O¸X…!%öŽ™è¾e󦕜&ª®ÊóÃí®%UÁ= .¹ ;¹µ>…¸¤ZÔ¯ ÎQß·bÒVªïïDe@P2ß6Áváá™4¤4pœª§Té (©ŽZNmRR uÖ‚ì\ç6cƒ2~ѹ?YTîèˆ-R ®Y|UݲekÊIéQ,F<¯F<®–;óŸ­|ÓrÜ5SÚ•I>üzK¤4Xí5¶( éþ7:Ý!%õ Ó­1ä{üùrõép ÿòðÁìës¹NÊÂWAƒ ã?a6÷s{7¶Á3ÍýÝw_½8WX’7U|•ÞÛE‘|ÞJR”fgZñ1öz»ªåÄæôôÔ1­û’6‚VÅJ >¾©ˆ 3õŠ øZÓǺ­¸>qmeè9н]­ tZ¼›/tÄ8©#ïO_<ØL[L¿^bX p'‚>˜™Ä@lÒÀASÀàß"Æ÷WüàÝ:p—ÅÐ1²Í~mo3°•Ú²~f/m†ÄoÎOF݃¯¾~_žÄ% áV Þhá=µQ€»ZžÂ†vËw°ãò±’³Šv,ͽQP¶ø£:ÇTÕÅ+¼Fjª´Ï˜îŽ5ª4¥nš£ã[Ü©[ð«¿gÀûš»õm•Ê<"Ï.—¼wr&´e_ü|pVô¤¤SCßj×ÁÈX5Қü³éÏŠp1«¶l’¸äYjÙèô-T”z°V–#ñL¶äMºhЬܢ|?+Î5ÌŒbÓ/jî9L,ò7¢V,÷ÅX’É3ˆh#„w)„ãúÛut!£4¸L.£/,6÷®ØE*®¡ E†y^âÑæ­Ëè@´%ü6.ÞX¢o…Hsòìé¡5^!@_[\塹p—´d)¶“˜èÔÚØ–k³¾*B/p4O !Ûb‰ßôˆ?çÈ„«\›È)õú‘eçg>¿šË>XÁÍ®—¸ÍÒ›äU/CÀk&yòöŠC׊˜%§.ÆZ‹¯Aæ% ý 7Mª©`(gî‡ù¨<®¾ó€×kÊŸ>¾`â"âNÛ­BôuJä¤Þܼ¯k_ŠÏê˜ .Ãó%4ŠT× «B/u:Aþ¸©Ûå„­’eã(òÌ7ÿ¿ÕÔ¨ó– \)ÉñÑ%OV‰ÞT˜¶F”Ñ¿ñX$³ÔµŠ>£†>8š6ò´Efþªì`ëo9—ϤQYòÈ H߃më"¦Á=%Û¯ËØIéSS]x(•»¥²[å’²ÂëML;ÙhÖ²«ÍÒ´ÕÔ¾-óÇ4öeXøjC1ÍL¿¥˜6ÙÑîòãv‰ØRuÍÈ+éEzËê¹PÖKlÁðîõÚn”Ãã>«ü²J³:È%Rã£àãJQþÖC˜³ˆ‘êY~Ãà&q-šûÓc¸®ÇŒ}ýL„èÏ€0ÀjÚn\@â5™ÏÊ4ºõeo†Œ«}od\¶9Ìï6 ÔgF>d«Æ*aì>*W°rÓ;„Ø Æß2¥–«ËJNZl­ÊŸ©/6:üÞ®«ëaÊ&"?+Ìò¾,%Q‚‡Õ4á¾bÞ(öV)$»SìÍv¨»‡®›ä^Zn²D¢U×´ ™pR6—BÀ,+\VÑdÆa.=tcÉn2¬ªÖÊX†„É£¨9cÔA4yñxîñŸ;AIQoüêjŽ€ xé¤N‚6u—JljT¬9аšðF9Ê™ÆÃrè{åH]ÂN0o80ÏêÊUÈk•Â#ŸåsXÉ}jJo®cÞ p®-q…qî'ë}IÞÊËâ}R‹ß?ßqð_o1aUâT&¡ï°GÐZ9ôÂÂ,âÄ zø©ÁU{åÓ<Óup*ÒLRKôiH‚Á&þùvéÇ)%ýÞš®[DzFn2µ£šqñböKñHŒôÒH˜JD?Šš¡œ¦õR5FèØÂSz³XÎM I—§‰ÎwbE.Ö§0wÍJÚÕʧ––KJŸh›ìZcXiôF(„YÿÃú3æ'[ƒK_ïuY¨'ý´ û”¼H>IC$g2µËïfTæ Œo6mð¼%GT8·µ5ètÜ~B (ÂZoê*Uß_óA¿º¹f(b-‡~[ô%¢Ÿ7‚pµô×N:4‘`î—(X¹ãñÕÁ£ÁzÈŠ1<P£f67(“ß58¯Ÿo¸î§X°Æ®5ÓE›pÙ–¬tQ6°ÀŽ.Õf‰Ó$vžëwæ=༿4 øbJðl?vJ|ié¹ká¨Þ€Á¦ïOê¼H£ä„W{˜çt T­ìýù;q Åu`ôª|€’ÖÔëD†vU†ð‚ ž—¿£§³ÂDðË&daá(u¥ž†Yµ¾ÊbÆË/è‰dCeîH¥à_²T%Ža@U^’É¥ a:]l޾\TõT46ˆmš&p æƒáåÀŒÇ"=J^t)•í¾ŽA¥*†f}ñ´ý«•9ŠŒ¼Yß܉ÁÒ¤9›ûæRp÷‚PôˆÓ?”b±ÝÕ;,|Dq®Åvºf”ØtC%`¦åxÿ³à4W¯‹Jtl,º4eþÄV¼¥í rT/Þ‘Ú™HË“â)•Ù˜À‰ôƹÔPF¶¥Ú+ÁÊY/`%la£š›tØ%" æÒ¥zv-_é*ÓNqk[åà'ôt‘¼x8D³)–èšÔ}8Ò¶?;¶Æ&xåtå}Z‚Í)Á·º$ñc ÛˆVç›IåÀðí”Àr–7Ñ‘ÅÚì çz@dFÙ3²-v¯´°;9—'g–ú?­ºxCÈ]H[ÂÀû2ZaÔ) ÞÙOM÷}³õy»DVÇбªÜ…s£%¸²žõfpiÏ^m£–.¬_‚PGÔ‘¶@½°õ‹€!Û: ûÄšù3õ¼}×w4 w[rÙñˆgLr…¼5¤i>ŠÛ}ެP4ï`ó‘[»8šnÓv9´™NnçŽ(û{±€ãlh›¼Ø^ÊõG㛌"(Ü‚\*&š>™û¨Ï¸¨qþGÞ†l ;}ÆQø–E×6”–½ÁËA²0\!÷¶QN¦Pü}:>õ2/F,®Ì§ë+êRÞ_asÁ€DÜž½6 6ç´k„w@0Þx½6WCUÄpèIï\CøtСê&Ä¥AíUaàùž¾?.«~¶»&<™É¬™»¿o!IÓÞë¨)–•µá$œÑ¨8oygO9•(IË‹ ^ž=Ëã®öœëy[F†EÜÈí^¹‹¦5]Z0“ùg9ਜŒ*]Î)ÄA㵤2blÓ>ˆ—>i#=¨–~Šôt¡îg;÷Àþ6Òù†"ݟК`ÛE`yÖxÈÅu8«…ÀžîºsLml>eÓ–¸€£IÔWÇP/¿ë°‘pàñºa5ó}3é¶H›´£™‹»·*ÿЛD×t³ïjóÇ5ÈÉtòâPÎãL?SD éþg_‰£ÖC‹ƒ9eŒS«$$op]Øzzô,cš&,ƒržFi®ÛD賫‘§@š^ú¨]\kjÀtt/PÏ’†©ótì2ÅÕh³K²ä,è âA›ÍÞigi·Sç+û«ŽÖ©ÁU9€ÄppâL·šµ5Ë'V¦Ð©¹‘@—H0“¸ÜVvœXñ\Záv%­þÔLÒ]†•´]Tôy`¨ó: %NV`unï¸gí‚“ ¹ ÝOzÿoö^Þš)ßb'ò²HÆÄ@9ÞG€Ó DžDŽhV\Žì…[.]ü ÉÓ`‘SÄ)ž-MölaZ{_:aj–4{4 ¬=ºhôÒßî3àzG2ÄšÀh\L@‘T3|0ï¼ï{»˜ò<,P*(#²6ãD¿åæÏ‰y„KÇ}L,Õ]‘uáRM„«Ëfÿˆ.æ~üÍbÏ­i±Ñ]]LýĸGôl_¸ÙDÆqÌcÍ.ø Ö‘þeÒ2ó îìI²œ”Dk’öئ*Ó~L±tìl­Ê;gé ¹q/`XKûGâLùȼÚ1Ï…îµrwÏì÷·ôv)‚#Ƚ÷³›Ìîâ+À%x÷râVe!gˆëÅ`p¹Þ •”oœñK£¦Ûâ‚ÔŠß/Ïâ¯îo¾¥Âxcû'ƒ¼qÄ²ÇšÚØ.K5¡±2ºux_^>ÆÛ ¶R¢-;OŸ²ò±eíæ+XGih‡×5ÆfÍ᤯¯ÝqÅG2ä\w·ZMúõ¦ò¢ •‹ôö~µ„~ÄÒ½w;-t9‹LAïüÂHIG¾Ÿh(œp ³"õöC+õ}…”Y‰ý¯íÓ ÔÇßä[ë º;uQ  Ö€/v£¾ ¬+–)‰¸ê7„´5fŸ)hY~ -ô•AmTF±JËW‡¢Ç„mq2eep·I£j/eùE:x{ S.kÓĪ©»K=2¸¡í]jµ·[È‘áÉáÏ5ˆÜúîï–aˆÃÏW‘ î˜[,úÆ–”àÕWÝC®×éÊå„À+QEê…r1 Ýf1üA¾ Æœz¿ºT¥5"Z#šË¼ÖŒú¦éü iSXK¹øçf3yÇαÍx™ XuJ -fž<ŠöI±(ÍeÆ4¡¨ØÝ0OyçÜPTl}‚.éûHÔz9w§Òº[®]÷OìäÇŽÅñ”‰Ô¸›8/ÄÛ²¸îÇ:Zœ«ñö‘q¾i‹èå&};$z—‘òv-7¿sD¬Ë~H¥]$ÅÞeä¢[jØôX¬qf`FLgbÚýÄxî‰ñùÿ7s<®ÙJK,âŸ]bµÒVØê”ä#æˆOK>‚ò…X7£éyzéß_M5ºÉ¢9¶/0FW\{ª\DDäEº ÑŽú¾Zg? VÌîàWÂÛ‰·ò$£»¬·kbªâ™z}èH…⹺ ØN4ÞõJ4ó ƒö'ܸÎÃkµö®‰<š—m~9ˆ¿þ¿2pÂSA¸j%‹tÇžãúcþ¸Ü ·r¡Ø“•¡þÊÍ ot—¹.ð÷Ñz"Ç[ôú¬Ky¶iµY\£ õ²£Æh7Âé`¥îe£y’²½‘«âÖþF³Ä„PF›? fÍÄÿÕ®Ñøom»WbLlÙMƶ5{âaÕ<ìÖ‚‚ýã9 üz¯Ñ8%*Ù<…š á# pgìéšBWRŸ(wñš~'iíq˜Ôqàñ¼Kbìåõúß}-w ¬î†f»ÞHI0°A<îûÑRÑGþîùÀëcuW # “<\²c,A“¬¶ò̪c¥‘Qã]LX Á9Œ•ë½> stream xœµ\Ýs$·qÏ3£§ü[~ÉnJãûçê¬(Ž—-ŸYöƒãšä)-w)’§óù!ù×Ó `€nÌ`ÅÓ)ÒÃÍ`ºÑ¿n`øíFLr#ðÿòïÕýÙ·g2:19¹±Þ™I‡RÎMÊl¤2zRqóx³ùÓæp&¦oÏ”’fRaã´v“PíÄFi1 ‹]ÏÞœI£¬Ü¼?“›¯ÏÄæ—mˆŠfs¦¬§ û³?œýy3Sb2QÆÍ_`×gf1ÀªÚ¯Ï”Ži QNÁ#©Ò2/iÕ6'Åäíe7ÊŒyX|OÓÖ’iŠžfé5·¤^§…ƒd|œ¬Ú؃ŒMK«-a²º7IïÊNjS9ίW0­P“võw#â$tÞÞÓi@iÁrS øh'ß&ȯÐ^Àüû¼¾2¼ãàŠpå¢ST„+Ÿ„¯\¹hõäBu~o|ÕeÙ•B}Ïs4Æ ”Óle&éÉù½±ÖzÔug œ7''ÇXsqò†°æNߦÍң.¼Phï8å da%á̸)X2E~§œÍ=æE œ‹ÄXzŠŒPH´{k¡‡K«›¤Ô½1 4¿yˆµjò¨½Z{è––—›²QOx” k0ûÖR„´j›÷!gmqFunÊÈ-ì#¡©4hS›%éܫќ{•–ýËă˃=…6¸˜{ÒbÔdÃF‹`qbx“²›yùóûÕ™–0AP­‡iU õ=Ï‘F”ú”F 2éS›#¿ÃˆºŠ¹Ç¼ÊB¡ããŠò|¢~O[âktÏú6my'¬Í=æ…í5u#œâgÁ‚pdŠüN8«=æ5 œ3ç'ï9gvŠ’²{ )ké±–{4^2…ÆIšƒòšäåM§XÑxKÒc^e¡Ðñ‘xs\Yƒ„6`‚¤€„]‚ÞkF]G8ísHÒQÛÉ„ÚòFíøÍéŒæ¾µ”õ$£žÛ<À€ÀzA0íZ{k7”f@¤ÒZ2ÍÒ«Ñœ{•–ý‹¤ó‡³ß#&BÎ#H^ƒaðñ†ÜVò“R3&âÌW¸S#jT½¹…‚”Ö«µ@d†ù?B«¶^}:cë%½k nÊ?W÷›_\œýôµRzÀ3hµ¹É] ‚ÏÓ~cì=¸‹û³?oŸn»s DØ>ïÎhdåöîð|¿à„RÇíýÍõÝåó ü®Fy½Ýow¹øõÙ— ä ;£’“ÄÀ:·¸¤3”[ëOÊ×ÚËÉÛfH¯¹…õ2°™^Ò^¥…õòJf—^{•Ö«¬•ô"«™´QÒç(r ^ÒÉäC&‰¿¡¸ÏˆT ØM³ðh•)»Uå1è­i­.É·nŸuSD䘷1Ñûí«ìjŒAm¿øêüõ—_ÉÍ«ýþf³ùÍÍáíóm¢Ð–äÁ^ð)À¥$_þíáñæééîx€1‰Z0jûÝ@U×´½Ù¯ló0» ¶à…ðè´›þÎ-ûÕ^­1¢dChÕÒ«£Ogl½>ÖZÀóJóŒ•(²:l~¾ÌV!527Ø`øÜ mÙïOZ*x-)˜X6·‡8Í!–iÿc''!œrÛ»¤BJ«Ãö-<ë¨DˆÛw»sh—À¾ÛG| þ3[0X ú"CØJlvB€'Ýþlw.q…?}-ƒ¦+°˜"ÜÄæâ&¾LS8‰öN†?@³‘ ¼Ä-i½lÏ™6g°H€}+”¯ËŠ!âš2MâäÛ}ô”›mL 6Š¡õßw¸! ‚Y€µÙ>á@¯ ‰ª >x€GÐZcJw%Œ’zû×4¿ˆÖyå;öö\hË`^öúHx=d¹FØñc[ülkÄE&»!kÃò¨P¼5u‡8¥=2‚D”‘¦ãþÖ8}`<¾iÿ'ö \J1…u¹žYcûÂøáSݲ·Ë¼Pðzl²»úx@ @ÿYìR:¼½ZˆLPX*„‚5ALÊÄa3îI×ÉÚ4&î€«Š‚gÌ}AŽdÜs“Ë-} ¯òŒ\ã(CîµO˜æ"–HïØô—è}ÁíØss› «ø, _{áLR=Ú …c4Ø÷u"ŠÒ•Ež(Câ_¸†ñvæz1Éì¸C64U™îR¶¤a›!îØ gùâ+¤)­Šq`ö€pë¶œçÞBYû†`¼jû%áö+ò,‘ !G•qhiĦn²(`ð¸û!ý`< CMwt¡1³¦SõžŠC½hômR™ebÅàuüG4ׯ—Z–ž“ÈN7ЩQM¢‚·Ð{t FU=ØS¯H|r^/P†Ì…®}uãDOUö}ûvû¼»øz±µ€äeg›ŽQ~JÓl ié}襚åÎê.w²&h©Àú•ïœ6ÛW"8*Ãhï³¥Bb:ªd5Wëýùê?co×ìm¨lW\ò„–Ç«ì4¥dúH)>&9 ­1Ä`~²3®Ìgsøn"e‹˜Õ¡_<ê–€ HMoÄ•©íö=,óºßt‚*â1÷À4ã2?:ØIæ:ɦ%\CRPì9컫8›ÅÂÝW I=ÑRg-×Òêa}žz‹-¶„[C=ìeï;R++=”À¢²p¬ùMn†D„a¢ÛDÆz“ ùÜÇŒ¬®¹h¶6FÄ8´—Ϋ¶¤©¸@o!òZº€¦ Ü‚r Áê8ÒW¦èÔ.›™íóL‘ãÌä÷‚Àê!øŽš×ãº3 C?dâT}°tàuVNHâ<¤>E9¿Fm FúLpi‡¸ ·¡GÌ®©‹œkq’Go×¢lò ¤È̘A¯NciØ î:Ñh™A£04èî>9ÉqÜžÂgá£Ï9c9Á` ×/¢(SO!HБ“ºÄÏèËp¨;èÝ3žÔ€¢2ƒ>TÔõ¼nˆ5 ïlÖ¼³ ÑQŽØÔ’RFHlŒgî{K¥ñ½¶£XrW€¶ B³¢êÈ€€zRÎÚwôŠg;Ô-1­S€‘¤ ¦ŠÅÜ‹¦‘C…2YÙǹ¤u(‰ *Ù"«øìX!Vbé Úrc¦Þ៴šÛy1A¢vÍ k´b WIpAØí7ØÔH®ïKdºó¶áhbâwÌà¸2& 5]A[½I<t6Z¦µ_Él•SST²K†ñöu0XI ›&O7jH,ÖD#y¦3ÈZwÉ•”Ç-½®Ìá7FFPi—ë/Ú‘r}î(ÑãC,@¿Ùç·jßû™Oӷ眢àæ/2â&¤—‹„Íå‚.P—œÃÿÞ6EøTâ©yÔÝ´ú›¾ÆÆjä&ÿC¹Ó©^Ë™Û5­íd˜=™M³Éœƒ¨q|ªˆ£‡IJìvç1Ƥ¿*À/Ú¼9J(óöB+8Úä0À@˜O*bÁu¨âó EŽzº€O}V€cÑGÏúÜ%ÚÚ‚:IHF™’Ãiè"c[>Œ¸ìˆãäSa÷7gÿëžv¥ÊÂHú—‰02‘^8œÊq2­<+&¬Ï YWeKÌŽ­ÄŒð€žÌö‹¤Ã1@h;Þ“¾ÙÄmàq<”½õ¥ž£"NŸÝ¬Î¨ |*”Áò ‚A¦àø¡‘%o£´ Æ9p ³ã-ér$}î’¬–0ä©Á*³Î/Ò[Hg}dYþq0ä¦=[uX9C•/µ†VÈHiRu[Á…iM¬7Ã' ôˆ-¢ ;^ܹÄhb0¯ø.G'szp2îZ:0C¨|CÇ27ñP- ë2ƒàËk(4 î Íp*qž‡‘+€­þ~tõ±<Á]¤Ý!]O7‡S’ý~NC|÷W\7‚ec邞JåRA¦Z‹î$Æó²@‰36¢¦`˺%Y­ŽR?µ,…6¨¤pYu&5$8Ngb ¼¿ãÙ+Ã2Y»,îœW`ʸ¿ˆˆÙاÇì‡þ¡€œSÕŒ†H¿t‡6<[X­–y˜ÜÔKʤ£ô âMPµ–á¸+k<ö²œ­í<…@×`àÏË">õ¸ˆ: $ˆ~ˆ{§ÓgXBS’G‰å Î**øøƒ3ƒž«wë‡&ç—·4sIÇu†Q¨VIEŽÁ…. äHrŽŒL âÞ’zÔT7AA>u7¢r¢†ŽÃË®ô8@²¼ÇÀõûéúˆ–aŸÆ?™OQJ’vGÑ?´ÕΧ`<:¿åÅrâÉz6ìP’ò£Šd´\DN·™úØA¬Ì§@Y+Ζ>(Ç5ò¦uÏ· à­;êNÎ3üF –í­HǺî&áZñþS¡+^ðxyÔÚ)8Cêà öÿ@`ÔCÍ(—êo2J,b(”ŽÚ¾Úýº ê Ð9tŽ}÷^}²/Xºò„n3±rÛ•TÃ#s~™g ƫΞñô:“ïnõÕI“Mâ£k§?Y÷ØÅ'OLQ#R£HÝwêÖ%sÝí„4Þ'Ü]Mh€EÈ"ù¡=‡£‰i˜úŽÂeÔ|úo€r;üè+«›ÎÝ;ŸyúÁ]*/•…œÈgÓ@ ·‹V§âÚ°D¶¼7G`‹y6»dÀÌÞ`£ô(.5#"+i™ýûD ¸óô‹Z÷ Ì=bg?¹1R_Ų3b ‹ƒR?ã¯ý8­ˆ¥)·÷²eŽ!22¤›+ŠiŤ6O'ع‡—éü®(÷?påY¸^ü˜ÉTS0d%Ÿã3=kã×[ð˜°] ͧO0P©ÕiÄÐÚùçT…g¥ðÓ‰:!<»ý|Ù‹{Q$èALõÔEº,?k©ŒÙæÝ ù,ª ˜äíiÉK¥QC™ä}= Âhé¹àW%~n°‚/zÃÿ>ÑK´ÅHdo„†©X5iJ×`‘X ª¶ŒÂ—>¥º§|ƒ ü²ÐºRì›C+öÇ‚(­”Ó3fÑ–³*iá'¯ÝKu\MÖ¶kÐtõú²‡ x©Â£Ô[‰HNo¹Æ·Ø€HÇÚ$ÒÓ×÷R Ou!q Ó—¹¿ Dð”zàåzüØî£®6 kúå½dòxù\GˆtPófaº¤êXÃÒš,«Fér¤bxÞ p] Ë2àõbãêU(Í.â±ëMùô|N†D:«›Ÿµó¤y/Áÿ'ù !¡åuB´þœ”{° ”®·ù÷¹F.3¬Å/eL„÷øÍir'ùã/½²áç&’Ey sEµ8™Æµbõ²;¥©¾çž¢•‡N«×î÷I*¯ÆàtvF'EÉs>꼋ÎQñ€•ÿo_'·ì™{Ë,'×-à’rO LÿÀïŒò½X0µæ+1nûÛÐ.×Aö/ùl*ñ‰–Ñ_ÜMLð;¯'OØæþ±>ZêË'¹½U»Š˜¸U.k*óøô-Ø+æ­ {Pn|A|P"·X—05e©£û+¬ÚE>]ê´ [ƒ&’õ3yâ3Ôåg _.w*!OÜÉŸK•›ãèz•ÐÌW el6O€ò5Ѩ’ÕÕ}»sšÇû„¯’þ¨»à‘Ĺ0_bâP ñ¬—÷©ëAj:Oß¹¾O—WÅ|G§`w©S)Ìâú\ŒtéÖÊÊ'<Î #ÃêéI"Ô×bÞWZ^}X`hð}¾0“`çüÅʇLZ·¯~û»tû (ÿq‡pï2½ÊLôåÍ| Þк}\ŸJYœÒ§Y¤= [+Ÿñžúxû #Ã2æg£ù‘xþ-‚Çêr½ ò_ߘíh-ÐÒh¹Ò$b®àãn³”Òê_7;_+ M­Ûô‹µv° ƒhÿöX@n3Hê4þ͈ÎÅCk%d•ЀG§,Á!žutAÜ"}ÝyÊû»ûWK YùpuöþnV®%Ïõlš¹,8(Iž¼GÑbv’<“¾À+ÙIw8:*×9Çzùç•eIŒ]†g ù‹±rÆ0Êk:Zd§Î?+K>;Ji,‡xÉñó*΀EòÁs¬¤å“ô/XfójÏS¨‰ɼ®²àß Ø+U®uΗéÉzD¢óSkƒž²òó¾>=Ô§Û•~mìçm +¯êÓ7ݯÎ{0’ùéf&ãSª<þ¤þ~UŸŽõé®>êS2Nãc9L¯ ï²6Þ×EëÓuëø¯µñ¼ÍÇ|·&ð›1߬ ¡ýê,ÿÓ¤Òä·'ò[Ê¢I÷¹>ÝÖ§ÏÁëÚx¹2ärukÖñ°2Íe¿!Ë»àø'¯ ‰62}<Ñ—ÜÈŸûø?ð»àendstream endobj 305 0 obj << /Filter /FlateDecode /Length 4108 >> stream xœ½[Y“Å~ßððÛ<9zf¨û°Ÿ„%n°°Ãá‡ÙCË«] !xðïñ¿tÕUY==Bà#"ÔÛ[Wf~ùåÑ¥ç µÖ …Êß—»3µ¸9{~¦éí¢üu¹[¼~öÞ߬_µÁøÅù³3ž¢áUX!šuôiq¾;ûçðt©Ö*[ë¬náÙælCvKã×)»á¥øýv¹RkŸ³òvxÏZ)gí°¡yZå4ìÅðkâ”ò~8,ñÉdm»–+«4ü&ÒFwk<Ã5bÎYgXwwÖÄá^ì.¶Á™Zé Ýp A)cð¯óÎVÖ¬M°q±2nU°‹ó+ÐËžbDàT ¤·Ãcœ ?h§û¨œ×–NU6ºïtÒtµå}èWǑҜÑýÉy»NJ|­sèUOSù(n”A§âÍÆáÓÃr›úÝp55O1÷¶iÿÅÔÑT€).´[[ ‚Éx¿VÖ-âÚå¤<+ï\ÖF (s²œ³Ò –Ì r¯ÖF+óΗɬƒ6y8Ü£áà€*Àþ¨O㊜&çQËšÌc-ŒÑà ʴz8ÈÑßâ3%šÄk »jœ:¾çs:Ý3Ãqt4‹•ŽëlMâs~H++•4ÄWÖGÖ¿{€b¥·dåœ=Ó/43g¾Vɇˆ¢YBÊŒpZÚðßAmðïþàh¸“Á³»ar‹û¶ÅÓnçz Ð¿öQù‰o#ä÷ÅI“ t:mÌZ±m1÷'Í圷Ä,ϯÙàì*[d\à z‹Öɫ۬Óði;\á ¤’ÛFý9wü“ŽðœünÛýÔÿN*Š |µqR9+„"P ÍÃW„ ž’¦Úüai"è )Q;ô×y&¸GH†}¡©X'>š&&ø0 µè½©J$üX0â #~aU@NOV—àÛ‹çË%í¤5¸e{{-jE{¯ŒÉëbÁ¿7ÙçYܘÛÌ#ù¾)¶`È%`ßWU]³ª`õÁ X›€2ãð.P ¡…~ƒS¬êÂ~~µÌ~ë!.ô¦AÕÚ³u`‹üÔІýëtî;… aÃp%=Æàc4‡3ÑGˆš5´™‹Â"9ƒ¾î‘};¢E*^¬œY§”J´þë2YØÄš²„å⦄DïÕ#? ­Óðþ9•/‰ñ0¸X­œKF‘ŸJ$ f6XhpeÜ$X<°$R«ºTe‡£p­KÞÍqm1C4¹&ƒ.Å ,]SŽQì"XQÚ…·5t¦Æì ÀÑRu©òzÄiÏŒ¡×›†Ú×ˤAV <?‹Ý·Šz‘$ç…Åà aOçVIH‹Œ·ïhxò*åŽk|¼=)øž}Ò®.¶bÎS0ÆŒsé0aBvB—Sñcc*ò{H+ŽÑô³†›!yûaéÑbbÜ71NJôP˜ ,ÿEÛœ±ñÍwëR\e«Gx ˆW5kÖFsÆm(¨°›ðé%2ž`èôàÛ`'”¬$i¶×¦ì›¿/RvÔ‡yø¨´©4à+xNÀSÇÑX!FœŒá½ÃœL®JØ›2ž£ˆ• ãÅÂß_OkXä[‰ ù¾ð¾¡;ç g=µ½ ÏÁö˜rÐŽJ·ËQŸÛ)WO(ÑX(¬™@ò|T«òÂ~”‰¨°ÝÉùY—2¨;æøìƒá.\.’ü´i\‡å²x²n:ñMÌ6MÔJøbŽÞ?ÎRQÝóÊ0ßFÐs°, `)È ºbp^ñø÷ñ¥¢°Sn>rÂurÕ­ÀüWë.0KXwZx´¤¤PCŠɦõ J¥YàÏ—D’¥_4?ŒyAQ:ÍȈ 8]׃f1¯*#€ãZeÄP‘O5·êT 8A4˜Í¦µÅ앤xıIú¢„è Á¢<Ž>–R¸”4`¼ê!.²øØ€ª^Œ.bå!VL¬³¡ÞƒI®¥ êíXB= ètGàP[0í`[N)´â4*$ÂÍžš ^ÅZÕ»è‡ÃËe=x–³‘Z-·$…²¡RYúÙ’ë~m»EPf °6n|MÚÚ³ br,y}Ûì%HYÆ·0X@‘/×½;¡eù|ØóT íáN–,‘DÚÃÛ$bªº%·edY¸ŠnršˆŽo±W$7UR\uäø¸u2Ú0g€_¤Ò‰QP”mŠR-ô?{@åæ®éîÈxS-q©¾ ø-'ÇömEðÐè)g‡ä‡Üˆ2Æ´P §gmGîwe(9’²]{— _íßB.tUà·m; t CÞ-KñçåX4:ÚRÿ´ç ÆžBíÇZP*viàN[šÆcÐú8*µtPàÏÊpK§,G¶ÕK²‡{ø:†È€ƒ9–CÛZMóÊ9K\¡R‡ê‡¶yr‚ðâc1yô–¢6®x$’HÁºÎTR±³¦[o„Yå1Èqë‘Úû-§ðÀñ+ (53R¤s8´“ª×Ë :'d ù\’ÐÃ3§Ê`sQ™DÈ´-a)Ô8#X@8Ð$ö5 ¹"§AûBjL.ûbTæÍ ~ý‡öÝĨE›Ò#‡ÈEúqÝð–ØTk“ÇHû!µYõ¬¼%!—(=̦Žýj@VàliO¶}tÁJGá-$\èšl±@MÎÄU*³núÀÃÁÝ™ãz<•‰Ï¨ÌÎÌÕž@»2QÙ^iu°Tñ †ßp',8õZ·Dõ Sß×Ü効ã­+ž‡„{R€QÚ¦ó– ‹vrWªYºq¨ñ&©ßÍsŠ8¨\ú¶9ßë–}ÃfÌnFß+_¶•7ûÉûæ £äÇX¡ÍKãÐ÷bqfm8ocodˆ—õ¬ÿÿJ5,$ÉN»cðÑÖc¥^Ånï€;šÊ…yšÉÊLó •ä+§ÒJ³±Ì«@¸ó˜o!²¢BwÓ^âuC=¬äM©2`©ñ\“s`Àa{‡1K…E=ÂF÷¯]òÈîÐ ¹Ï(È*R°/äR– P;›µ€:ŒÓ”Ý]J¨— 1[¹D [žÅf¿Eq„#d†€SÈÃ2'³ï Gÿ†*[$­Ged7M¢"aåºÉð!?ÂØXb‡&Ã=…4Fò/g§€;´ µÀ= À –Ûqõ{^ätÄê+:g6’û7E€Î$´“†5ú‚ÁÔ‡?ÏŽ’^ÍEn™”=dìMjqœÑM5jpÌ}´r£#œˆ oï›i’1zÕó/ÔlGù#‹ÅË|ꃂôqáÍŒK¯‰®2qà1ãz7•rõd}µÇ/nW-¼œ_Bžã7Z––Ùó[ÕÍѩٶ'нÙòTü¼#%ØTld!xÝ"Ð+¼Mâ'¬¬›¾våždÝ')·õ< }¹§úi–;fG|Õ×.ìoSô)‹Œ+—øqž7æ¶"ïª[•G·ÑuÏűôÂÏiW Z‘¾r䮢 ÐÛô%¼Ì.X6ÀP©ø¼Ór¹ ~rJ†ˆt>cÀqÃ9;€‡ô#T˜Dy<²Ë›:''ª‡#Ê.{ÈjµÅ=¾ß’Ñ¿ÇJüKõÙí´_ÒÅ@ÚrÞÇ/Z/F:Ãïâs<Õ•‘I´Ã+º«Cø-øêóÆ=‚Äо Cû"}Ý\ 9ÞŽúI10u’(âA|=!Vwm¢:@Fà«Z94©N–·¬‹®ôÛì[óETþ§úƒU(xõD  Ce‹É!¡Õá'ë¬Ü²„͹ ømä =«·MàH—7íŽ.¡ÆŠÌá½€™ÀLM£=ÕÞ‘ܵìBÀ¹$%*Œ$ž‚·8×|çÍYI+3%ª}NFÇ€\åÑgŸ—OGÃ×K½ÿ„ßFá÷ óÿ’!”7-,¡ÐOñ7 ˜jknRñÞ°ø)äi%,{¬s90™oŸBð:ê6’-àÔ~G}+™±OFÇ`GßôAEöæ2bQGÉæO° ìÙn⤖üàüìË3 _¼:S‹ÇgѨ…Æ`;¼é×9Ž/¶gOOÞÐu~†6É ºx©+à'Uo0ãÝáåùwü ïF™@_ˆaXŠàR˜dxcÇϬœ+Fc8WÌ_ ò‹3d(—¨îœ¾Åüq½5çÒéº5àR°c·Æ…ÖvÑÁ_ ±ßŽR@ÈX±Ô¢ÆK¼D:pô^ä>Ü/èâìe ¸ÉÆÉå*e8[è&à-ÑëQ(-Îü²>•Þ¶²¹tϵv~"~]¶¤Ø&‰JÄY Ž?uâ•·¡\D€l¶’Bt¹~ÔJ9ŽÕ„*Mƒ"ݘdŒñqFRb|ØÒh¢·c» 8Šñ¢|×'öMØåÊQAáb 6É×øÙ@i¼0Ûšú:ÔOS\qAüuŒ==x5®>ó#`/„j_j"rÚ©a½3­ñ&ù=/‚kÛz";X~¶Á–þ%°w,·´3¶* lhˆ>÷÷Fã‡;îÚXK­‡­Æk©Ònñ¨ñƒnÂ{Ïå m”®‘ô «cøÏŒói¼5îkƇ#0ÑÃîž¾a)€Q ÝhÇëJà6Ÿ| œå«†–¯¹ý“ð®Ý Í\/4s±çYcC‡šmqsÃUÆ›ÇÍ™Š]l¦»l[±Ãx¦Œ¤\¢âp{¼QñcîLs?T°yô.OÅœû¾z¿¹mfÈdnrÞ™Sƒ)€t[ûáOØZâfZi·yý°ž…ÝàÝmƒôoúŒUüƒU¤­+)¹§à=~å‰yŽhô¾êKÀ¸&íûÓÿÃe‰šBñ.BÔ­-xÞpÝQÕ ±Ö øaäøé®>ý±>½7óôêOkòöAû·*· .xÕ{ãÓ¡>íêÓu}jÇ»¯O·õé²>mêÓ¶>þæB؇ßêÓË™•÷o\o=³o[d²7ý“™ÞÇ‹µ ¥Yû¿bÍÖZ7o— H›t J+t,¼¾EYZÉwõˆ®éè8_žýlrò6endstream endobj 306 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1907 >> stream xœµViPgîv`º$ÑØ^µéÆRãEv©õÆUT‚E£A9EAAd¢ášÁaúáä&ÃÝœ¢ 1€è€ˆ¬†¥4R&YÇ®cÌ&«[¥_O>¶j?T³µµ[ûcûùÓ?º¿®çxŸ·iÊa EÓ´ÒË×ß}ÉÈÝt8loµû;‚³œ,¿;}"¢&\{­ëujäzã@|âAï¤dŸðHßÝQ{übbã(j åGPÔ\*ˆÚFͧÖRë¨EÔzjåM¹S)Ê—ÚLM"Ÿ¢¨©{´}Lê˜sŠéŠŰC€Ã#Ç`ÇsÊ™JPÞeò˜6KÎq‘M É®úqÚÝ£ƒú8[æÁ<Öüçg]äUö°Ðu¨a@!{¡}š´èo˜Æô¢9xžøp¢ýð;4‘Ç!8ŒÛ ‘õI§;r.B;œ1vKÇO5Ûȹm‰5ÑM;Ába·~KBpü®°Ô(`]гÜ~°!æªÍGÜwý¹É$æ˜xHÖª–g–•T™ê›÷WĬ޷&:S­Äì¿eÜI84€ ê^°ðJ‡ÁaE^j¦kO¢Œ“ tE^ÎYEC¶N¤ó9º¬ÌÝþ–ÃÀbEäÖ­îOR²…OÓªt•êÒôªdØË† r󈼯æsÌ`ЫÅCžÅ¨ bA¾ÁP˜Ï+«)(ªH8¡ºì=þhK¨K+⚢Má…%ëÍp™•̽ŸÌÙoä GóÅ\`AîG‚‹}ßa ‘äyÝù…¼~Pa§Q0×–›…—˜ƒú H€xXeˆ2NªFæOÆŒ½‚ƒÇàÉY±³ðªëÈL°ü³¿"ÇÛó°PÎÓA Øb0Z”ɼ䚮åC—¼eËIO˜†Wc7¼Gàpô6^ˆÖ}u³¡¯Iø(¢>>XÂÇJD{F¬ç%´¬‚þ¾ñVZ Ïå«„]‘¯Z©Ÿíþ[={øÏ¸…Iì€Øþ–K7ø>u³!aWøÈŠ<É-þÍÖ—¹EgåÕܨg™%!k×,ÓžëæÑmqó4Ô!’Å ¼aR|iZ­jîÁñ¡ÂJÖ°H‰œ %Æ/« K@?2.èHv'‰FSh‡,s%0DÛ¯ß1Ûa¿qD1f¨B„á6&$¼HJš6h!°Aó«)!Y· Ã–Š¡›úôeÑóá<ŒJ8„á§ö+Šv¥¿¯ÏžF}Aiua}mjñº£¢˜#T~zÁzØó½¡K„PÆO¿N÷n´zD±ž_'÷ôÚšúªxch}d;°•=æ›ÂEµ?³9A“Ýíü¶ÎÃ74pÇîÖÎÆÒžKÍ|W]o^³‘u‘çk¬¨êú +}|…)Ðôw.5¢ã«5¥¦†Ü×½/xÎpŸG&qÚ·‹Ÿ ×›Sœ'æjµ¢˜¦TËý…»É³ÍEoßèí?u)5°ŠäíÁKá¦UÈâeв»qÙe¢!… À$•òZñˆ\ÅL"ì\Aäª6žZ‚3PýB®p¶V» JÿÇ„¼Lcv!L+cA^Ê´Ožj¾« É€ äÕ:ã2 Ð;:2ˆÒrÓQ ×x ¿Á¤€(fÁ±Ãw¦¾H˯-(¾u„®Å¦@öŸ“Æèò#–;{îb<Oyèöý½öAS¾°–AãÊ…ü#³mø:qꄤC1q1GS=0³  íˆ-‘:[U{«…ÒÈõKy“Ëкç§%Í:¥syy`„"öIÐ_°rÆ’·ðkxò£O‘CûÓJS6èµ¢>]Ç'{ƼaV“Ðkƒ~8ËÊ8šõeói¸ › Øt[=é6 ­¿Zl¡ŸØ¾!ý¶pdˆ”fÑxå3ÝŸ”–é´E¼FŸ¢…DVU¡1›+ ¥¶½Õ‘þ«vÎà±Ó Õ-|ÿ¿ô› uU¢«ÄÒ©èÊ ô>ºÁ!%â¾½ûè‘Û}Î'ªwkí»0mö²å³cM¡-áB뮚[)šóiEº¾ƒ[ €õÚîéá:ç÷ÈUˋѠmççíl2æ7™yC.ËÛÎûÜý° XDùàiwêé «>R\¢ÍÕC€9ÈœdJ¬‹oÊl†föÝ×ï=üžPÆç’cL£]=¢Ý©õ¹ í9ìôÓþÅæ­%Nµÿr›ÚK_Yã#h_J6ùù¬»ØÉ{ç® 5/*ÓoûY`%Dl>ÉþÿûÿôÀsPÇ;çqàìÎ)ꟓ`i˜endstream endobj 307 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 329 >> stream xœ>Áþ SFRM1440‹‹ø0øf‹ ‹ ›÷ÀÑÎË asteriskmath*‡áÿ="ÿÛðÄvøBwÊ÷Lk¸k÷LÈ÷x÷ ~–}”~•CÁ‚’•‹à€‚€€rËt«{ŸŸ|Ÿ…‰w…w|wk{Kt‹r€”€–——•’”ÓÁȘ•™”˜–ÐS~PR~~œš–àÃ~ÆÄ˜€™‚˜ÓU”„——‹È–”––¤K¢k›w•wšw‘Ÿ‘ŸšŸ•«›Ë¢‹¤–‚–€„‚CUà~}‚~€ÐØÆÄ–†šzy†~~ÈR˜QR –? ‹ ‹ ‹ R €:endstream endobj 308 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4821 >> stream xœ­XiTTW¶¾eAÝë„ã É­8$#Î[íE08#FJAfDæA@dªjW£€2ƒ2•€ ^Ô q@£Ñ¸:$Úbž&&¤ßê}É!ï½S…&v§{­÷z½ª?µÖ=uÎÙ{ûû¾}eŒÅF&“)œWÌcú5 ÈΟ3û7ZÂ9Œ°8üꄃcÑ{ÌO£NfLŸ˃W„8„® wŠXù~Ôêè}»×z®‹õrŽó^ï³Áw£Ÿÿæ€-[÷n rµ›5wÞü ß±·e˜)Ìf*³‘™ÆlbÞ`¶0¶ÌVf:ã¼Ålcf0®Ìvf3“q`ì˜ÌJfãÆ82³'f³Š™Ë¼Ï¬fæ3k˜ÌBfãÌØ3ë™EŒ3ŠËŒcÆ3<ó 3±f8f! ‡±`â™Ç2WÙé!ó‡4Ëeòò‹µ-ß²¬´DÅBÅAv.k䜹NNš8ôá°˜a׆¯~w„ýˆê‘ÌÈíV£­Œšs_ÅÑöå*r,.Á×ÅpŒ'¯ãP²HI¦ü2Ž—úþÂÞ‚«Áë«<ò6‘ÔÔ-î[œƒL•Z6ÂÈ<@+9º`4ß[Œ–}‚V»‚9φ}G6”·}´±Æmçîˆ÷£í× ²øïqÙ¬ëÔŸ‚šºA¤/  c)è*E¬è6]w ÊE¹t¶)?PB/ü¥JÑlxJ»ã|'Ìÿ!ð²„íËö\¦±I¥X–á9OˆÃŠÇ œ …ö‡ÈN¤M#¤¥I ²Æ[è|Kޤ?šËžº/)-Aˆ;’çœÃüðÉ;jà • -©§RÚR{Á™Û¸+~—C°x=NÈ<¤5Äé‘J"cc ¥4W…¥BvÖ¡ülC[H;Ó"Žjù´÷ÒÞúEÊ=~¹žyªƒ.á4×ó©îÈ£ìµÑzA¯Ï,® ²+iqj“Dt¥afDâ Údý³0–¿)*|ÕàE<Ü 4TŽy“]º:!ØmQI¯›à}UsnÀ9ø®íJ÷½{p¾ÚXAÞzvȾ o—®Í‡\)¼Ud&y…D’h¤0Çv¶—+†÷„æwŠŠ)\'¦·á¨2 qY™ì*‹rÜ.Mæq¤HFâ•BkBofr~WI-K˜»Ñ×>?zã²p^åºì÷Þ׎VýU´œ­"ŠƒåÌ0…7¥ÿTTø«çÒð¼`.ø›Ã{J I>Ùß=1A•m6<¦•oƒÇÐl®¼¶biýgOXÚn´à²ó¿²$ž“Öó/°çÂ:ø¯_»N[Ñ-àw,Yû*XÛOBžÕœƒ-‚n•s,EÖ9 Z•C7ü¼‘ÆÑ0°‚†ñ½¨ðSÏOú~æË~?Ð7ò©á œ ß'Ï¡=þ»*³\-ʤUÒp>ç°!§8‘ ×kÃ!Üõt¦¿³¹'µIZÐf&+è·Ñ`yATk×j‚ \õæEWXœ:0ô`Xæ0ØTCVAÎa± îßo% £ûës/šö ûG@0xè#÷/…r¨HÎŒ·¶'ɳ±Øò’¨ÒºhB ‚tAzÓšSl‰[î>ЀV¢Õ¸ÙÖ‹0Ù²]T„h7Q9 ú`ófYœ00,'.+¹Ê|ƒÙÅ÷0ÑúIÈ‹0ßí04äUR¾ˆK7¢{=Ú™È}(Î3éÖBìæ¿Y~‘ŒÚC&hæº7ÇÔÖ7”·7D•huByVžþp—kÜV)ýX2MM&¸ÁnÑÓÀÞžÍåB4lûZhW”BUY²>I§T Ê9¢8Ç/\ìy¢‡ ua~…Ï pŠ\Z.-áq#:×Õ²î€ÈiµAàCõÈ×\A¶* :Y šô ÒAZ­ñòÿ•!ìOp))ÉI5eÐ&É¢Óº”­;  :Ìë"Ù ÎN9Ä Bu¼7ÿM\ú×ðƒÌoÆåÀ³.¶K¬ˆh ¾68òû»h‹vÓ{‰ÌÍ;>4@™³oìh=ÔF8QèS¸¶˜‰cG¼O|Àž_ð…À²°VzÔ3ÚŽ^e’ìE.Îa-¯R¤9ÄQ½›Üj©‡‰ OõtØEw°{9R)Éa¢2JEÙdå’£4”Ï-Ñç^}Ç;õ ƒ8Ó…DmFh•ïð›pvj¥ÍGÿ˳&§FE¬IŒ¶ qóKƒdÐè2uÅ9ÅÐÄ5FT„Çx«ZvÿüÌM±T°’6RŸ0ªMÖHƒ†cäø¡4“OIMÚ‘Ü ]_^³”X/œC^'ÓŸ-¡Ë^­G‹‚C 9>S›˜)¤í‹Z»ü`oElkl«¶º¸+€£Ÿ”hÔ‡«Ÿ×¼€L·THBpO¶HÚ”Ê C(¥Pš•Ë ˆm„:J iÀíS)ŽëD½ŽC—Æh¶QûØhˆÖ§é  ƒ NjÒ±9ð ;!+±lÊ «(»ã¤¬uwÌâv‚¤¾|&©ï©H¼é&ÔU†Óúm„6É‚öDÓ?Iz“Ï+äpå V ׉ÄÁRTä|]Ô… pÝ r`€IM¢0L±‰*‚#~®(Å]–*EêÛ)«É(à¶*^†Ÿ)Ÿ®&²ÒÏ7dE\puBKR\¢¾¬ º ›‹Û«O@=ãk}¸—Z²[ZÔ-Çcýóù¤b5DÓs¼ÿ­Ôd%û?å'dS°©…üJ¥ÔËÒFÖU* å@•­ŒJªV¥ñ£—sÓû™ÁWÆ–C¹&W[­-Dq<Ÿ/U¾u¸ø¹ýF.ÍÀ`¾:WW×çG ÒlÂÏOQõÆ_RS<±óÇòÒȈÓdÈPF¬ßíE#°sIÙh¡;k@öpß™Iµ>%©½_Ñfúû&û¹ÿƒÇdòŽ$ËÉûDIÆ‘ýd?N#Ãq®¡¾l,F äéá7€Û‰°‹{?ÕÞϨ_ê­»ÖøÙ….À9¿ºU5ëtka,Õ® v[·Ík µhx‘öúO"†eß"sÇÊуê÷qú zGW`Èm–œv Â8昚c å'Úý;fOó$ áÍMª‹ä§áÒ¨ýüxú¹¬»Ó`°Ïóh­ÀQ?|ŠÃQfÿyKIÈ y(~/ÑéRÿH#aý‚…àLF*çS,ªÉN#Îüö–#OÈj¨Î (—ãÜ/ù0}X-~e^NW”fŒ½D–ÕÅ[_œ mN.PædÊÒª5Ì…—ÄÖÔ”©ªŒoöŒ÷Sø^ud…вŒÜèøG#^G#•{½Ô¾t,KÒи?}k$lævœzqî'=7q™„rÿÆ;Á•3g¡çæMpþ`;¬wRvwþ‹Ž¸]Þ{¶Oµõ9uêòI(Q¾˜ÉL=ôû±l¥›×öA‹/3ú™.ƒ$c¸ˆõF¬Çš=}ÚM/ES4=«> nq?Íø’¼+¯~ÍþCsöþ*Rõì¸Ó_)ÊàTù”B8Ã:ÈÌ:ºåÉ4¹ßå=-¨¤d›™¶_«ÌtßBǨ´ ©WÕ•é]Z7.>©ÇÛ¸­’#B¿ëï)p¬ZéŽä5¥£ùá|Α}ƒŒ¤_ø“~M»=üý=<šý;ÚM'²Ž8Pš¹ôëz†úgriM«ŠBC½w–l¢|<Æq>±ØXî^»GÙæfL}U™Ñšœ£9Uòxr;ö­Z¼’Œ8Н§ ÚRÈŽzaãטm|¾NWQ)ÔÕ]tÿ4­•*ì+Ÿ|‹Ã.Çœ oRî¾àÿNyHn@^RV@Qp uò]UzѶŒLöÉ ñÙÔç¼ðò&јPŽË/Êð¨ÉéŽî·ç>WD“tJËù8$÷>ŽîôÀm2Q¥è2üºé÷¯Ð58ÉL”nw±tAî¢|"7O-Uƒ-ìjr4‹§±ÿÛ÷E…y¹›|K¤:ˆÎÖ½ÜÒêÌ4uzºF«¤T2ÞRÚÌþ#âþ‘DК56Å>& Ý&9¦2\ÓW™^Ah*ßTÄšZ…N-CJg®­Ôw~°°îÿ`TL‡4PÌvP«sJÓô+f3SËûÔ›ZK&Ïóg“gˆÔzP6öíúÞ´‰/òÇMÖd¹äfyÏd¯R'â Ïíõ]“B-gj-ØÔ!/·„ªÉg4QÿÝö¢ùÌ Ø¯ÿ­½]C…˜GK t›ížÁ¸ÿ§—$ÿ«~ý¹t0öŸÐØM¾¼×û—6’ʺ½.Ôì¹ÙZ{]™2°ÄšØJN–÷M±¿Cc÷¤½ém޽—m'£§’«ÿú9úþ2${vJ%Ø‚B}^%N•–ZÓaa ÍX 5铟M‡ü W<“`©œ"uÿŒ”Î`M•¥ Ûƒsät›ïðoöxѯÍÍÔw©iåÓÅ“e2j†Ëñ“~9ßÂêµSÀßô’«Dè.á ˆ…Šm1| &<…–A€s¬i ƒpªQ”Áitä’ †SªŽHÛ‘¸?#õ*Å¡¨­úøjmUÙ‘O–9}¦\„³™{‡XM^¼Ê~cW|UC[Å™aÕþ9Bí±–l:ò>(xÓsKŒÓòÙJ2ìHN¤Æ'Æ&V²0›ÔÑ@UײåO¨4¶ÊÚéo™I´ÂðKþNÖò÷\`æ{{¼‹Ê•Çr+Aä:ëÝwû‡n_|Ç -qÚ‡½tŸŒªΖõžƒ¯¹»tr1Åy…£ª1ÂØYÝp¼<¥}kŽPߨšEùàŠÎ9 ¶Æ{*cwEh|5áš4-Äq±¡t0(%GšÇ&“T(qÿ¹¸Lúƒ¢Z›²?â“ry`¥Š¸²¦áÁä OÀh5grµZÒfžÎ&ƒ±}Œ68ÍøG–Éwã"Ó|:UÒñ‡3s´tŽÂWï EM®¦ Q­ŒTåΘ©ž°Ü‡¦ëÕz5pñ°_IN°û ¡² Ë›-®o¿ ÜUX1[îIAÊo¿ý{iw‰èõÇ ™ëö(ŽˆwMY¿´gÍç+ßßÁ‰8æ÷Èð˜ÝÚ wÁ|7üÉØ…cªMI •¨”£“dÉC6ôäv•¢Õí‚*:‘V¥džª÷ÆP®¨ i5ÖV¶Ÿ ütÆ<òÞfÒ¼È!ôCÙ7·ð ´µ»n›° v„ "ù=]—\—Z=tT¸8ü‹ãå¡{³C¬†HÊ-;ÔA¾á‘¾æ×‹IåRŽ¡9Â&O*}Ã瀞:èZÌ&‡.Ìàž­ÉSs*…?É¥¬Ý”ÝZt8;ï6¢yœ¨pš­Î$cÈR ®6+ÏCîa1ûºÐÍBoÎ?}ÝÄŽøŒ*€¹Þ•£«ôŸñÏ ^‰I ¤s)IyÅ?>Â×nú´iç^¯ZŸ³Íee:`% ³°/1F ƒÃaÄX†ù^¾—endstream endobj 309 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8129 >> stream xœµzXSgÛÿ‰‘œãB«=ª=Ѻêª{¯Š«Ü8PÁ¨@Ø›@$$¹{'a´ Aq¡¢µÎ:jÕjÕZ­V­µóísèCßï{Nâjßöë×ÿõý¯£^pù<Ïyîõ»¿;QíÛQ"‘H2Ëuù¨ÑÂO½·ãÔ_[ ³:·/è=¤¥;ºùÜõD7ÛÊÛ}ü7Qµv¦lKÀÚYæÏ ™ú~Øüð›Fn^µÅ5zëb¯%ÞK}¶-ß¾bÇJ_7¿Uþ«‡ÆwÖexÌ»#6Ž5zÌØqoŸ0qR·ÉSôè1ÍyPÜúwK:9RÔÛÔjÕZJM¦úS˨)Ôj95ZA ¢VRïPnÔ`j5„ZM ¥ÖP.Ô0j-5‹N¹S³©w©uÔj5—IÍ£FQïSó©1Ôj,µG-¢ÆS®Ôj15‘êL%RþTJF9RTWª5“zêNõ ^§Xª'A½A9QÎÔ›TÕ‹êMI(9ESqGeQ Om§:PEɢޢN”;q#ÕžÒŠºˆ®µsmW'ž&ÞÕ~L{Uû'›.I&HÊéEô¦sªÃò?w\Ü©c§”Î »ôî’Úå®c¸ã…®;ºì6®Û×ÞxmÇk—ºOïÑ·GÕ뾯eÙó='÷¼óÆŠ7ŒNŒÓIg­ó§ov|ÓúæÓ^)½J{íëuµw×Þ®½Ï¾Õó-Çr¾Ò®Ò„>íû¬ïs¥¯{ßœ¾¿-}û^¿ý~îß³ÿšþm¦P øiàü%ƒ˜Agßiá5Ž­Á`E­ül³ˆ£u›œ£M“ƒ´u öj{ì$ß´PÇÈèSì‚J8åÚæÎý¬ô&}°…üžcî~ä섌’cx”1´ qö_ÁœŒ.1Ü K*á2”Ø7-€(72ØÄ³ˆÁ_:àX‰#ßV¾·Y„¨shË91¿ %³ð*CwÊv¯OÛCÀkbb£ûQ‚{+dô…Œ$w).¥=°€¼¤ÜÐB^a…–ç7[û¤h1ýóÅã§Oç­YÌáø¿\»‚AWÅØÑê`·Îó½ø×YÄ¡ …¥Ö¦Çzg+½Q«€5 !Ô@¶ÉèFMnDƒ"Y¥JÀñl'Ü ­×¤&§ƒÑ9ÏRPËYéíTAÌûž«¥¶ø¢%¸Ê OÅÚè`ß-£tÎ2z¯!Cœ{î¤M†¸2(„lczZ&„|Ðx¬NKÐë Ù⣢· ñ(5\'vTÂ'PjßµB ´†X2Ÿ„ô¢í±Šw }ù@¼·u+3Ó—S”ÞÒ¶JÚ[£œÅEÈøÎÄÞ¿ûÍM—Ïq§\é㢋gá*óåØÛø ÏÅŸ°È@ï2¤7q¨»ä»ÚqnóWOÄbé;ø+ÖS›¾KЬh ýMó„é“Ï,uäåÊb~´YTu U]óžh‹ØÁ?bwÖwǯ7IPÇ'ߢîÞ=Xoð( ܧûö@=œªÞW¹·© vÞ¨Š­Õ`xÃ6p Z°nC¤¼ úü†˜ÿ–ÿ’ÝutÎ^`¬ô ­–, L»«­–¸8­F#ÅÓp%^ŒZTYÚHs¶”§± ÕN&‘ €ÙÏcó äjŠ}~ì„×>÷¤Äp‹øØ ·žù8‚vÑfÕHÑzÚ±uu¸µu„UÔò)·öiÆQ©Òi•*Î}ªÇñy5³À/ģɳoAcñH4M|ˆú¡vÙ¦PêÔIÒ<3s†3¯Øƒö¡=hiÓ埿‡˜¥†xÐä“)fâ޼ʊF˜ùáÅ¢ŸÎ¡‚kb¤Å“X{¦»ÐEÁ[σèïŸ õþ-Y¿(Y#=Oc©P2—Ò’<¥m;þ¢ fðY,˜@Ÿ]Pµï©˜«'Gâö¸Ó¼±Óýd¹¦ihI¬*Gþ1T·Š‰Õ|‚˜ßÙÚ›ÍÈ=¤3yjˆäÚI8Ä¡X’Žªo¢ñä>c%m}~ëèª×•p¼»¤:„I’pßðx0xšÄ±5þYPߺÁ÷| Þó§©Š~” )èM4¹"7Ri#ðd)îùÛÛöLä÷ØóôgÉmøxKãü}³a lºáËgîØ´dó’;|îKÿÕ\Ceò®l„Äûݨú­ÇfPµë7;áß F¢–¦²æZ)výŸfJgÁ7Jêãí¥‰fÆÒGHŒ:_úâÊ=ãVK[ß%•xÆŠêªE¨÷Mä^,níŽ2Ù0I2O#è-±SÉú›l¿qÒbT&§ðÊD‰½üœ%hT¯ÍÇý™bI qhk”™%v•¿¨æ‚£Ýì8úÓ™_nˆ‰Ãä쓆Ÿe@—Ê%&Ǩ ‘•( ÌæÜŠªÀÊãe#"Uœ‰%øÍ?ÕJÃ1¨"°ôÉ3X’?»–XÕƒXÕLþØ­ZY,æ/ìo«øÏKIJ _‘3jàXmgøÓcµ9µRd¸G?ÊÚ1ÁnîåŽáÜ”õÌÜ×$¨?XWåá¾Ä\G¾§ÒÌ/íÚ‡¢ö‰ÑM~Š­Î#Ã’8¿2¿4_âÅ.>óW*`[ý6é΀’ö'SäjÊ"Šbsà €Ù¼nÌüuõß…qÉE ×鵩ɠFê()îMG:˨×[ 9c:ò ê×·ìe~>râFËŽ ™RŸêÀ´ù9þi.yp’©¶ì¿Diïú8}b:¤“ Æ"â”Ìp+гòïØaÊMq«¹³»Sg Úiç‚?øÂX´¡M5}/%ÞGºÆüFbÐT¼ä ÚMjYÓ¥»?-ÂsÊ9ƒâeí#%ý*²ÈjFÒu>ŽQxA–1Y|r³äl´Èw׎ `2 ­€`F7ÉoZÑD³èÇs¨w±M岨¯÷E‹Â$ºá>CGj˜ˆ;¸šÆâ+¡GÏì:}™û0l%=K¶ië &­%uÀà ÚTpÍ´ÁÊ8O7OÅF×}²—I4Ûï’’œyPž‘•›oÙÕXZ}«Sa9Q‰‰1¦rÃ!ÒØw‘M'í›VA”!d'cÇ”f´½tSTDèÖ”Ö¬KÙ¥íq1šQÙœš^â½×ë÷ÜK¼r}ð¦íRƒ E`È.(­m²¦êçx¼ò}å¦i„ß¿µàÛj¢+â, Bi¢Wà¼'(Åáx0cí4ÿ€®5äÜ媬™v ¡¼þ0ú¯@•‰Àz6š‹®ñ «ÈtUÌFwÙŠóô&x3¾$/j¬N›JÔ™dåltÂbT¦Ê#úNï\^f[s'%&Dq¹}Ë ÈPçú¡Ámíœ<û‚691Ú?ÐË¿È"BMjMidnTt¸RæUç}ôxã¡3åøæ)‹‘õV‹‡yÜ£ó6Þ6‡F—–˜ò¬ç県;¼ÛO „Œ9 §*Ô933 4 :M¼F6ÛÍß ˜Å“¢ahòÆæúc±[K¤Ž¿²Ïü'-å ¯ˆQtë06ɤ#&2xÄ n¢§aý0§;j“¦GŸsºap BÊïÕÓHõ[G‚‰YàœIÄmZ>JnutÒ·]•¼ÔŸÛtÁç/¨‘­ñ•Ï{! .1ËÚ>v"6C1ïlUðíÄükü 63[/&; ¢9|žÐæ1„6§ý`ªC"’IŒïn{Ë!ÊźAXó"š°$zî$°É«éI¼XtFŒŽ ÄùYÓ ¢Ã­k“¥Ì ÁøuÜãñ`ÔîZS³)O:—F}_´6þ_ô‚¶+, ºF²m³l-0A˜ÊB«.ç4ï’š«ª›á4ÔxdÅäD“°G½"Âz—ò£JÅ(¼u›«Ó‡‘· —IöBT$1m»iÙ_»Ù*åKèŒDÐfÆóo¶=pÊ’ëué  ©zÃ_¤­pà±-ÝVÙDÚ*²§ÛcX/“¶Í§í9hB³lz3ñ´˜ïbÙb˜¾w{„»`ɘþ¸vúa¡ãö!Ê’¦NU%’þ©•Mx?t0›V¢™R­7±hÔ½¢JøÒp_ývb¡!¼¤uj±Àã|Š[W£¯Y´C£± ‘ŃñXBº<ÑP< ÍBóÐ;h ÚÀáø>;;}ƒ2‘Io?zŠzÃjœ‹{"uDGlðˆÒÌ"$:ó€ó÷&æ`Å4ê ¹¿cF¾V•Ã%ë‚@ƄĔ””ÖùX×Í™ê6€Ã¦É®ã›Ë̽±§”6AN¡cÅH†ˆŽŸ&A~¹ñý“!÷p/)¾ÿ¢þ–€i‘‰EevuõHBvظ k ~¼É‚ÜŽ}iA‹èÔE4ëâîCÄÝh>{À¯²¹þÂg‰õ¾;¥»€‘ ù«U&«• `äYñEÆâ"yå¶Õ[}cåœɶ\"óG½?oúòï¬i|l”Œte5Áê q|`53÷ÑrÔuzzôjYÒGKª¹5åka,†$ˆ2)³L`´¬<æ©’ß—Aca…Ôd­Ê²s†FÁæè@i¤Ì_LFìP—Cfv×—K‹ó2á0·‘Œ]:cýéó¹”Pe5š[ÈýúAòjs°üßΦ¶†[Hd›Ñ1{d÷<üÖ"æ'£‡ìÓ’ÏÎÀgÌìp÷çð‘?‰íó!Æí߃ÉT†Þ uŠŠ€¼Ýœ S!¨ic~ìžÐãÀ\ϽkIƒL…TJT½Dè @y ñ¨.]µWS–Ôœ¼Ó¿Z‘T±2ŸžÃNš/ȱ¤fê«À ÌMô:à¡c×/Ä=I”O2 ¨Ç¡ÄÈ…ocËÃK‚ÂÂýK#K«‹Ê‹9ÌáÅÃÎfª†•½LöƒäòÙp>x6BL6î–òí 4„[[GUˆZN Ë'Äh+?Ž]“ëÑ g™KÇÏ\G‹ñøiœ!’³žÉ4äa“RšdˆKâv,^wz~Ž'‘RâÉ£¬+ô¬Û"­ÙZ“ðITMâ1yžê@hµ¬`Þ[5{¢‡kö^wnÙ‘ä˺]:¸žËG›|LÓrÒ¹Ô K]F~í–3Û¿$ÞþæcÔîTè¾À]Rï}Ù[³‚¤|ÎËm~Ø~ûq„'qDUˆ)$ <,0¨8¬¼ÊTZÊáA6G\ÍR©?½R1s™ÖòB¹rc†‰P…’è¢àè¨u-AG.túÇ+„fêú˜ˆÏ¾­“Ù¶'’(Û8&άE£ ©„ ­Y£‡P¦ÍJoù`ÎG&Ùiøv“ç'Øió°=ò>òVÊ ™©+˜€铇GÛD¹@÷$;QˆÀŽÂWÄ‚>)ôr¦%#ãâÉ&½E qÚ BQ‚`ÍsÆZ¨ËI€&""JÇaÒáøpúOëFˆº ›Bå+uó/úìño0—ž®¹s”\N––WA¨¡ö¥Dm4 ­ŠäÇ›våú¯ SE³¸Ï°I×ôk@³8þõ¿U¨Ž4€˜·Q$½zÇñŽô©ÏlŠ+HëF:“ŒP¸—½)Оç­ ö$ïŒñãÙŒkþqÂ}-­o ÊUÌ#þ&›YVØt]ðã}~e¾yX—„ÈjUr¼¤Mé„×ò…jTœ­ÍPfS3lãçyÏÀi(€ü-(®­Í¦ ó7Ö§š°õø«ãwæZ7ýæ&¦%1[培/úÿ:ÿAÇ_ìn+üÕSüëkü-¶à Õܬ¦:šÌ8¡)mÆX£&C`—©©Æ|qL· †:ÔHbðï:1ßŰÈ*É+‚"S4Ñ™Ø*üEQ‘Ëa+¶Òò(ˆŠ,„|)"¿IäUD€!Ÿ#]™¿ôµè§¯Ÿ|-FkøÿbËÂ-Á!aQÅQ¥eK‡–õ¬ #ðl /+-.ªäì®CêúE0=D^${?áç²*Pê´ÂrBï: Éwë?Ê:¨Û^ÅmÒø)d¥q…E¥9Õ‡×ï›>w\‹))¦ÿ@Uþ,ÕÑM4ŠÞŸ·YŠ+þç•ΣRìfAï‘Ö1Ë,F«“ÙÓá»·Ê"ÂMaUùÙéÆ4.%EOÀ‡1€\½0h‰çi²†\:™QÕÆÌkWýÜF+Ê,|f!¿Ôg’.\Mªˆ<ê”í¹~L¿>+ûÿ¯Íðú»5¸µ¦G?¾¶ïÓ$•rúdN‘¨$oKL‰.L`ð{ÄÊhY‹(åŠQ)Zƶà\7Òâä(Ó,^.~bÍmòÁðDt÷‰-:ÄV„Z‚e¡Áþe‘%Å!–rœbùu…YÔ¿&æ]Z=X£0)10¹Ê´Ä8MBœšÃ÷ÿí¢Ž¬vVd$fç¦de§räX~Ð4Ó,úÔ,~̇²ºtr Jܼx13SÈw†xS0u&–¸–li°šŠË+"‹ýã"uÂkÃÍ­ošE×PÆ51¿}ÊÂmõMŸk›oÏ*v‡e0[æ=1`‘Ò0CÒ]jgïžq1äÜ…æ#ÖµW ß oÄWX_XP‰DŠ“pð±[p¥à£Âó‡«m"Ô4.w9!*óà}˜¡X‰Û-ŠÜ&Œ÷å$¸ Ö&R@Ũ±•eK@Á…®õîDè—°+gÚŠhMüÎO&©0¸0}¿Ÿÿ?¼õó³öM;ÈáÞ÷Ù¸Ì-åpˆ9w¡ñü峫g-öt_æËÍ]Å¢.SË£÷ûÁbçÓWOïrúöõÏœ«²»´þÖC3?ð¹Kùv¨‰ÅŠ·Ý—„¬J© æÒ$éÚÚ4¨cŠcMAA1ÑA®Í›î¢×PäŒüQ1n~ n7dq³ÓÃQß]©o9læðëã‰W'˜bê 'ÝÇá`ycQE…µ>ëÚ¬P³;Œ‡Xf‚×Ð1Üs¹óŒò®¬)ý¯” Þ‘òÂó=þâñÝöÿ ûÏ›¤mçw±3º­ Û`öâ÷T‚ˆÑÚr3ýÒÔ¡NsÚýynšÒÓR¡…+Ìè¿Pºù+³ ±V£ ¿âVÀ"zùÝÙ.³'âŽØñò”Ë—ßGb÷ÀóY¹K:rA³/§åkžÖ¿ïšnÒºÖ6-ÓF[RjÔÊDná¸ñ‰^I$ôäëá–°¬ `þpžU[Ñ,=çu\m% ÿ˜ñè.½Î©mùo“U Z ¨™‰Y™Æôt#WÆÿ³÷ 5aAHv{ ùb^ÜÚ•-È%.72EÑùÑrU’‚`Z'<̨2ªÓÔÎÂìÇÊsVT(4²¦s1:Y&¾ŽÙèȈ°…{ÛõÑù“Öƒ‡¹²°Ó+ïÀU8ý¡á©í WowpÆM‡œøà£#÷jNYêî 4t‡Ž<¯~ydOeL@2¨’¥ÞÁ›}–ùy%«£-PÏ ¨syå×Oá*“¥C̤ÅsÜÞ^Ÿ9¯l.gHJB¦Q«µZæÃ³lø‰„ ÐÄܬ¯©=–:6bÁ¤Qá!ÜælÃÈŸíºlq’ ˜I÷O•§î©¨“êSŽ|˜‘)Ô%ß`¹uP„$(OŒ´‚By÷.ˆE’Ý¿ ߸quhp¨¥µ¯¸uúŒ}ÁCÛ¾”¼àü—D£þéÿØ>MQ>›wuÿéLå9ätéqè0?½j>ÝB@é꬇M™°f(‡»Ï]{É¡* Â\«J O( ¾…îqu¹›–×xÜw vÄ킵\’ICH0Bºîå,Ü‘ÁNó|½U2½)‚³¤¦@S“£õ®Ûþá½;WP;®G v ~xg#g`?— ýìŠô6žý@t ]óoµce²ð_ˆyŠŸ%"'"7¼!,xýê<¹“Õj1ï„|¢"ªÃÍñ渨ƒâ²Gl±°.4ÂÞpæüSÖEÎ?diÝpªåוfÑ·-bt‘—†èÂA߯@“m´êš‚Ô1Ë~TšÚ7iÖ`wnÍÀÐ>€»Âè<ÜéHŸpç[ H×N5Ò¤/OE‘äØd`ášu[˜¥¨ó¤s `’ÕZ•´…ÑÒïÇ“o¼j=žBSG¥ÝÙ*£65÷Öåoq‡(A ÎŒ0ÓØÍcáë&ÅètÍÈ2o!tV•=ÐQ'¤ ©pØÇdLؾÑ$ ÑA¨%ã6‹+¬HvVf@Ç7IÊ‘Ü!L…'-’᱄ÈUIù /¦³Dl=óõ 1¿@˜ÏJ¬˜A$_657åç©5iœÏÖn«Z»Å+*$˜ ª[a f(n¿ºïÿZ;lýÛ‰..GH?Ü©?™ÞáV.PIò,:Sž¯JŽ%ùª ºŒ¶Køß 8›Â¹û5œËŠÀ_iDÍ&óZ`ÞÅôš>ÿwBèi¾¶½ ÁîŸî×¶T×)ƒÍœ§v{btVLJªK"éÇ`švä:¶Ÿ`îÜ:w„ΠswŠúoÚ*§endstream endobj 310 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6241 >> stream xœµYy\S×Ö½1{h%½ÔwS«­­ZëL­ÚŠÖy Š8"ó$2Cd†’ì„Qæ)‘„!Œ"8 ŠÖ±Z^ÕZÇŠµÅáµÖªÕžKßpÀöýÞÐï÷Á?î¹çì½×Z{타²B Ñâ5ë§O3ý4Ö {þ&ïu·„BaQ2V2ÜÅŽBÂW޾J™¾æ9/ Ù²84lIøÒˆe‘Ë¥+v­ŒòXí¹:Æ+Ö{­£¯Ÿÿ§€ ;7m1彸©ÓfÌœ5{ÎóÞNQoRŽÔxêSêCjµŽZO½M9Q© Ô;”3õ.µ‘šDm¢&S›©EÔj µ˜zÚJ}Bm£–PïSK©iÔ2j9µ‚ZIÍ¢VQ³©ÕÔÊžZK}@Q#)+*„z…E‰©×(–z²¡ì¨±-FÍ'AR”Z0ZP,øï!jáPa‰g‘kii¹Kô–è,=’naÄŒ/s{è‚¡½Ã ‡¯ñʈ¢ÏF*G>±ZauíÏWº^}ãUÕ(é(lí,¶‡‰ï½–þÚ)vþë–¯Ÿ´ ²i³9osÇæ¿lclÛeÚýmtñ˜IcZÇŠÇ~ÿ—Z^aÕ› F´Åȯ¨Ôõ:ù7{W³i…Êœ8ˆ…<-{õý`³Ù+ÞYÅÒ{Õ4M`„NeêèˆñFzK¸Þ¡ÎSk$‡‘%Ñqüž:]#‡t» 'å馌K°ÀaU›Ò´$†v„„Y=ƒu|‹,ñ K,Yñ`ä-Û¤:k4ä"ò¹h#>„† G,ÖÒ®2XN^Ô¨>¦©Ù»¡ïå28$A«é_.Ÿ¼p>ßy=‡þå³› Tµ r¢á.›J*ÖÁ"pqYȯ?§ñ8™e ->t)7u«Äªw3ÉJ—µ­‘¤~´èg1Âù!,RÑõšœv½*zÔ8g㪭öX(¹ŸÌ>*¿x¾f¾{ÿ6~ëX)º®‘ùIú*iñs?¥ì#."+Bv÷zþöÝÜ«XX Yƒo²x”ÈE™S/Aô)ý¸mêòO6Í ±â2=?M'¨îFµÝB~' `Ñk_à‘xÔ$,À£0ûËd4|òs8 »°îঠ=~ÎA´À‰ÊƒU‡Ûµûá Ü î°|Àœ¥nRW·à-À˜+ß+0 лBþWþÛ|îLf0F:Pé¥ …@X§ S“ìÒ­%ÑQ2ybº\‚çb-^ޤæ²ì´úÌCœ‘öS,oð€íjiAý%äÊJÂ/þÁo¢â5e\&gkËФ0•%’þH‘×"AδU¯¯ÔØûžÑúä3~gc¸ÞFüð$úÅ^hžŽÖ"ûŸ1y“(ùn—‚Ç¿1 €Y‹77 cñÔ‰65œC‚žiøí N“Š"`J C+A»éRÈ‘¥§CR ·ÅÁ·ióÑÉ`'~ˆñl<»“twâF4EÇÛµ…ë­_\D%Ý6âGh!?‚í¢ñ2.çÈÝ$âoúü!Ö îÔ  Ž)ÿÇùô:+®Íù0hø/?!‰'=Æñ£àá%e2p1‹"èšc5Ç€¹rn&¶Ä#—Ø;xùT´†J´ † ÆŠ¯8Ñ$}T…uC7*!Œø†õ‹—ýû𧤴Ï4Kñ£êDÏóóÆ`æÍIøu<êÑÛˆ!ç¿­t5L dñ8vÆ„H#v†º³hm¢ÑðKÝ_ßj›µ‘p`>áÀY#ªo ±=h«MÖgè…hì vÏ_‹ÚP¾e¸(O\„ƒíà\q~”¿sŽDÊÂE³e“¸é(UÔOV„Þƒª %XÂèE!HjÙwv-Vü˜AxÑõâ®ø:š‡¾eÑKLU0³S|èwQhQ·kªa?´Ã~3¢vÑÊü& šJÈÔs-G* §PE%A¢×•é êêkÜ9ñõEà·<ÁÐà f»îsƒ× ù›½óÙ¾Ã/I¬} áÆŒÀ­pÂô(l” Õ]úǼÁ€íwLæf£ì€GˆÐ$Ð;•`ŽlÅs2?§Üº^~Åè#؈{7ÚÈêÒoÇÁbf³¿×{¿SßFsŠBUæn`!5F‚méXHÍÏR«ËË94eå=©´fôá¿~u<¨6©@Pçë‘KôÌ)yáéцֻhHÖô@ §NÞCËBV¹ä‰™iJHJä黓Ó>ÕžOªgå³ÜÉ¿$¤J*÷Ô…UË¿J ùÑKÉ(ÜÈ¿efçœÿFq<ï<[(Ýï•ÌÈ-– EtKfÖD |U”AàsÀ/Ã$uô½ ™¯d-nÇXœ²omDÇ_·ÔŸýõþt<ñßÒugó‰wÀ¯Åsð ì=Ð,<­—ˆã¯À-CÃÂ[™M¬@!FôA…à—‹h4A©?Eãx°üÍQUÒfdàD܉é?yŠ4ßñó5i‡ûà*4šñAdl1êÄÅö*™NÚFò²KFócn²Ói4!ßÒH/IÉé ô@ˆÆ_Ò/¥gm[¶È>½½“Cßüå(fHð$zLCS8qôI8X]ó9c…þk )Œí"©)þŒü›œÁÙ|—7̈Ì@ß̈L!›Ï…™Î|“œ¸nœ9Œž¯0Ÿ¹R¦åGå|‚Ÿ…î²{ö–èR“>© VEBl×Äö÷™fU~$DC²2=]öεŨN^H€«±3´@WÊI ¡à¥2wú@š‘ZÅ «©?÷Õµ‰¶¹²Â8¾ääøP“‡¯UŸÔèˆmhQÕ£‰¬aÌâB0=^‡|ÛMP<1A#YtiÀ™¥ï¡žV«s‹ªÚqGdqÛ–¯Ç ZwcQæàîC¬N ‹.’½•@Ìï'wý>ƒ¯¥ è®Þ(òSL#¯ô†ÿªÒ|™Èd«¦ð«œø9~íñ;®£ëЈ¼¼Ý  *WrÁSW&ù#æ7Î<€f%þôük:A›}NR:š‹Ý“oR¦0b8|E$ó-õ¢ì§åÍhq"®ë™,%¤Ù%ä˜Q·¨9Ë—Œ‡írà 1 ÃDƒmÉÎŒœ³Ï¿ú»‚FoLü/Ĥƒ›Ü Φw¼ù.f±ø§w >àPƒ¾ŽAZ ìA“Š(e±AÛ\¥î&”"ö…µ*NÖ¬9[sHkÜW‚°±-ÞèšKÎó‡Áfl5?·Zˆâ{g°É*u4Ùè£ÀQ1T¨ŠU{jD3}åt(¸L0ÏŒšz¨‡ŽA;=Ú«$|)•¦VeÊù)}l÷$©U9ÀAN¹„ï « ý¿j«2`«Æ¿9ÏÀ%TÒ÷1Ý_Ø -Z¤³&£\rW¸¹²(‹ÍFïÞÑ7ó,ñ–àä],ªé2@ûØù8óþ&üq/…>Æ(ÇØîàÅ,~¼Y¡a¿»Ñ˜pls5·±z¬%:á©ê™»Œ@;_dß^zìøá}Í3$gDw‘ÌvþdË»’þ‹3SýNˆ†\cÿÿî8ìÁÍ1Ö‡AÏþH=+Tkž³ÐÈÖW_,é"ã6Z¯eñ¦G¾Ø#'ìÔ nT§>¡©$kÜhEzV ™¸3ù}l]¸6$Pª 3VëµuDË:É ?­Úú¤!ìúòÂFƒø zÊÛ²ø5ãšbïpÚîÒ‰s7Ð<þÀ5›SËAž?0˜ íf矪R%¥rþëƒj<[gç/´Ÿ9îƒã‹n„JòÓ%]ŠeÄ«RkS«}µay„vÌ'[ۜձ‘[wBqAÕ¤ÊKÅàØäb›rÔšüÔõÇ;.øõqzë'4D"¾?¯¸mOFntšô†’ïùsV¼t>_Iòòò5åeŠ)/×÷˜ºß´kòìUi‘PÆgVAcˆ© ‰‰ Ût2äÔÕÏ/Ü'ŠÜ;Õ¢&¢288""8¸2¢¦¦²²†_’õ¹ZäÐ,hңܔ«öNíËö!Q4–é-B³‹ëÑd(#…ÍSjÓA‘ éa; áMÎ+PÔšñ“ïgÐj¦‘ý&5HøJ* ¨,3Ÿ@¢È ŠŠðló¸ÙoKPX›àE—ðÅK¨ÕBÖ@-ìWíWþµgô…Ï®ks‚»èØôhò\µúŒFKÜEª¦ÿ9_‚Ïq,FËlUš´lÒ±3/ŸÍË=¬M£5¹–`E"„¶F“Я†åª<$BTBñgã°•-ùXì:»„hIïJö^£”~yÞã=è‰<7ÿDì¥ÚÞq¤÷nö øÛlQsUÍ—ê[,“ßzy‹Õ©Ò†‘Fœ¢+åxUß.[ìÄkäEæñ¢æèÍYK‰YÜî¿þ5_˜ºŠïûÍ6':KQ¥ ÉÊ*"rûõßßWš‡±Žÿä•åŠú ß9仾¼êüæåUgGö+èO`ÙoÂ߯‘–:×b2DAÊ@™I`Õ`ÿªª ã™\‘B8©ÏÓÏâU™Êl2ÉÔžƒ9ËÌ~Û]ãÙ¿æh¡ÀO·ÄKúðl^¦Ê 4ã_>2Ó |‘K_¯mFrÆîB õÉÉ,Dsù,[ôa_vÿ‡výŸ2ׯÆÀˆîi2]¡ÕL´=Šºù ìáœDO Þûï!Ä il§"_`'îV)•0C–¢Çw÷^Û´;²‚óTÊC Ž 0$–ïÝ[R{fC›ÃT<|3pXôwmîŸo®ÓåØY» uŽÓZßEC¥:“pS³"Z½ücBÃÂJC›J ²só8ÆR­V%¬ Yëæ"‘ËɩҙԬô¬‚›7ÍY¡»Èñ´ • Q rdOã²u¦þ‰H‹>]ȧ£\V×—.5í/w_цãì?j¯êzmu‚–n”Û-äÝÑn¥ÝòÿzûsK<À…yNݹ4m̃…™Ó[?>ðᕨ8×´¨»˜un2Ø_a½áS}̲³ðÎÀèÊ=Qކ_Ý£'Vª+¦ü<'øV“l™lUü”õA®`š?á:zþü‰Ñúèsäv¿ß‰¯³/ž¡iˆ;{~¶C¢é·°¶tx†ÓQÈ(m,h5ÄüS” Rp{¿8Ñ|˜û>œ;oËü k$x™lj„ø9O‹ªÑ"âQÓ‚RÝvǧ¦¬ ŠeÚTZ}™˜ä {Ѱ'Ÿë­ÛÅœ§hÞƒŸÙˆ1… çìíªÓ—HX·gžœüöÇŽè¢kŒºš£.Ï;º ›€iýL:=I¹.ÌM´m‡"\•¢ŠP¦BŠ*U»qŸL–¥ÜAÑíæeïâ±KƒÝÜ–žñ—4¦u°i ­ŽØ™à6íá $@V÷ï?åÈÖp{õñZsVŒh´‘÷¨ öëBÔŽæ²³LÓ‹·Ë¤üdònƒãÊ?` ¾ûÙ8‘ßFW@v\²Âtc†Ïöí ôFz#‹"¤à‡ZšCGC~B«uȦÛúèãmFÝC¬³høÜŸ1µÍ=ÎßC›è y}*™ßÑ+—îf+²RUJP¤I¢’·F-/Øžã¢MÉP’L3»!%N‚;èH)ÊÑddgrù%Í'¾NÐoÏ)ñÕxÃFüøƒc„G„·oØv"BëÇžÉ @Z~}©¾²2VàŸº}öÅIÈB"þ1ODb‰ùÀü›{»ïï'uº‡¼¬¼g#îC¶è¶’FÙèÕ¦c•mò:.Þ \+ãu%µ{Zκù¿†ÇI"L"þ W 擇HøÃßÈ:ñŒ±÷-ßÍQÛ4_eWCÐYyqL;Ü"3纟5F®Ì6ÃVÒ¶Äú9n'¾;诧P)9ÎÑȃÈp0ò¨é?öüvv{mz”2ç¾h»|å¦Åë½·9úsºxö«æŽNèbÌ85mâ‡Sc4®m.\~Rs¸ž8˜gë‚g;½3zÜÓåÏ‘åÝ¿6Éù´qÑÚ¸¼Uû™‰,zeAut{¬µsX¸iîìÅŸwŸ®»ðm;×/#há òÂúî‹h"#OÐÞê .~Ý'dI'^°Ê!5…LaV‘ü¯n!¦Fùµó èdi@­ærÔùšÜóaäÇQ ™»÷Gcôèlµ°w5É*æ¯ pgØtlç¾ÃÇ÷yøfK—¶±ÇÔj}•Î*9±*öƒ‡õÑá»ÓRU ɆI®ËÜ7&cú‹¢OœýòIÊá¸îOÖ8l瑽¸q7m’ëö°Pp¶›u{õãoϨoæ.:ž‰;×àü)Í]¦Ïµ²¡·daîì¯k< ã•+>œƹÏcu.ÅAÖ”‡4mjö]µ~Mj0D>:ñMCÓ‰N¤[ýî'KGÜòízøß`º¦DâQÏ‘öCÿtŽiòopúÔÍ'= nvÊ f f6aJòÔ{äû§£®C/XdI?ºÝöEGu4¨9«Œ2™'¹:¼*™Ø¨d2¨`š¶â†YØWŒ #†Áˆá0š¢þˆ&Gendstream endobj 311 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 323 >> stream xœ8Çþ SFRM0700‹‹ø{øf‹ ‹ ›÷ºÑÎË asteriskmath*‡Ûÿ€Óÿ9NÄvøBw÷ËS²à÷¡÷¨a§a©a¦‚‘”‹z}{yq¦†„µy¶{´xbx`{ayy„p†‹qy™{œŸ¥¤—œª « ª ‹~ˆ~Š~‚1Š‚ˆ‹y˜}žšš•œÐÀzƾµoµmµp”…•‚—‹œ™›¥py’àa`›bž´ž¶›µ’¦‹¥}›zwqrzÐlvkvlvàÁœÄ¿‰œ|•|‹x~}yŽŒ‚”1Œ~Ž~‹~ –? ‹ ‹ ‹ U”˜endstream endobj 312 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 374 >> stream xœk”þ SFRM1000‹û¤ú³ù™‹ ‹ ›÷íÃÀ½©ªÿM@ÿV×û¤´÷f«ø_«÷{³³÷Jòù³ø¨ù™oˆp‰p…ûxVû;ûf‹û‹‹ûl÷ûs÷}J¶~¹„¸‹÷¨‹÷i÷€•÷ŸŸ÷ û_÷’ûÆüWü³™÷÷H÷„÷¬™÷€÷eû\‹û£û‰ûOûû¨ûnûR÷>÷nc†£Š¤ˆ£øY÷£û}ûWfû…vˆt‹u‚“û+÷'÷‹õ‹ïÏ“÷“‡‘‚‚ˆ…ƒ…2=O4‹T‹T¡f´c¸Ì‹Å‹º‘¿¥³¬ÂÌ­Ë‹è‹ÄEŸ6€ˆ~‹–“÷J’‰”‚ymW‹†‹…’‡Žf¦`›]‹…‹†Š…‹ –? ‹ ‹ ‹ x‰¬endstream endobj 313 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1574 >> stream xœT}PuÞåŽÝ-/ ÖÕRgwʨfHSûRÆÊ$ÅÐJ,”B%9¼8¸/8yOüˆ¢ãû“à Â"Ç„ÔÑÔ=kò44›Áš’5Mû˜y×~4µ Š8ôµ³ìoæÝ÷ù½Ïû<Mé#(š¦ÙYIÉÉ“&jŸâzâP|W#Ý :0èkÆrSc‹>µÿvJ{F¬6¿fɵÚS—¯H3f¬2eŸð`Yß9.²(òWææVÏÆ²ËØ*Å?\ñƒŒ!9Y޹Æäð(þ4Æ+#„f¨^!Îdò-`Êj´›„^¾q‡O46Y _zg3üîË'wîÝï1/‰}%ÛW·C«?¸ÎÅ\Y¼kšÈŸž)§b—ÊxZ¦? c ¬SÒÑ$`ô„Ÿˆžè'ÜO¢ áŒÀˆ ?bŒHRÉ#ÂŒ¤Sç~øì³_|š8qBÒô’Ú‚Xd|PÆc×FØ¢ŽÐñX+>´ÿèÉC3Ž›8ûqãÙ‘Ü«oOݵ®8¤/^@£&_ºë¥§)Câ/¾³Á“vÓÀ½Á˜DŽcÂw£øÝhÁùÂùÃ?âm¢;§ÖÎï­Ùá-üpÊâyÎg’%þt ÛTúf†H"—²LõP#u“Püz˜j $\Ñ1ýô“ñÒÊä°- #à¦: Vå¨W!SÎ0ÛÀŸa›]œúp?ñ¨–Î’2&îXz×Éî]=uà3®*·å‰åIϯÍî Øúš'kC\ß»oÜ™>¨®‹© @Sc6H)x†é»÷MbÈPW>)¾0s¼Û,âvvhE%ÎéyG;´¿ÙÔ–½Þ‡3¨“é¥H§,Sgiô©(9à”Ë8sT¶Ã6©“YBöF–3ëÖ|TØî€;?€ŠÊ:9pÖí©ðsnfó‹mä–MÅUyuPmPQ³ÉÏ]§a’|YŽ9~¥“T*lJD³à7u”ï.èW¯hWêÚÍŚ؋¾!÷¼ 3³|ùõÕÁÊ6·o¸ÝÞ÷ÛP Ü—ûLOIü2»ŒD-‰p4ñg‘·µAhëž&®HÉc,ä‚m¥3=/ŠKZÞò~ç·m»éÚR|ˆ2FˆÙ¥úñ‡rÜ»…±ƒ­µ¼‘ïLmW¥=f²%Þõ¤83LY¢ïb‡ØaÀ~]aÌéÑ)¯"-WCiþÚ ö±tcé àuü‡Ž ²8Æ÷>¬“ÜÆmõÀÕûjßé)dú2ö!b8‹1(µ\ªíÇÁ2} Œõª­§áBÁ· Ú™w‰Œ$Ãâî#Qdø•{QÀ;ö|Ð ÅeŽɺxÑ:3L‡éç˹ž®ÃŽÃ>Y*ïáú=wLc†îS¬Ny?´D™£¥‰ˆóÿ†¡‚ ­ÿYNテi—ÔuœÃ2ZèwòÝŒ+[U]ƒj8Œ$!rÛu0õÜqÃËw3üeƒ>hõ›ÍV«Ùì·ƒ~P[qÈJ‹Ö½£GõõÿMÑôŸÌ GöŽg Ò²¯¥™T­†Â®î Ø[¹`n­-ך·úÉKÐŽ±ï¡áS‘?§üò· +25N>V>¿©¦‘½Dt>3(oFξýq˜öjK+±Â†F;8ËìgÅïI$Ħۮ{¶Ÿ¤Kø4Ëwö´ïißîÉKIë¸Îþ©›Šþ³äuÖ ÈLÎZ¾f¥Ytµ˜ëVÇwgBVAŽUS Ö§*uÊT¬ªZ¡µÕ…9ÁÁhl…*M¯€Ñ4.Åh~Ú²2Ó,&Ó«ÙÍ;MMcS|Ws½ô!å’r5JØZãxƒ«sÕÚ­%®5¥"ùú„’ür€â;Õy^ÿÖê··ˆýqîæŠ~hwrX?Q¼Uï4ní`†Šú xÎÀendstream endobj 314 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4550 >> stream xœ•X xÕµ–­ Y ±«Æb™)¤$„B³P KË4qb²ï±Çû"o’lÙÚ5š9í‹%Y–dy_â8Nlcp6;7$ð(“ÍL)¹F?„¡9èêþøzf¼uüB<þÍ´1=°`¨Q3„YǪõ>p6G9h¦ÐMÒ´0Íx?´øô` 6ÙgÝ1!½–‰2Ð>_k›×':ñ¾Ógó48xºAÃ@¹OZ \ &-¨õnÖE…™f#¨X&“51z–Hã§æ€è›Þ/áÎ_‘µ¶ŽŒóµËý6¯ φWe´ hÉ\i”påx6¨ >ÖNu3 3èŒeµ`Ú3…TtÞ8yìø!òW(IA"UƒŠ«››c:å5T{)t«ð¡Íj×UÖÝÂ.«ÞX¡·üˆ%êp¨z?Ø#1Z(4ƒc"s˜úMP·Ü~·§×¥з]1à0i¼VØÞ…VÎ1óá)´qJ2,dÈL¥´1->EÆfô79h¢†¥1x…‰áúrÆ}V·'0ŠžpµRþòŽÃ¯RQZŽ–ºcê‰mÛØ £Œ§·‚2¨nPåa6fýC-_²±Êª§ÕÔ¤Næîìì ý¾¾ÎA F¢vì)R+wP•ÛöíÙÄsºvÎcsRiü³‹ýøâ¢~#ÿ´ '‹Åx8¿@EªGK:!¤ iÂ2áÞ{/d¿1>2Ô£llžpŸ!ßPª½¬\‡wirYÝÁæ"uC‚f&4»ËŸ4{ñ.6›½‰b]f©¦AUS~àà^ r«MœíA)-'©þ«c8‰Ü´ÖÈZY†J›^]è4þî¿4ýœFïÉ>“¾ãª+kd,5C³`“ƒÆh8ÂòjHuX]&K×ÑdíÊÚï±J:…Þ£œýÈÑmR´8rä3ÔXK3M£Óêr;ŽŒ¡§ÁÎù0›0‹ÔäL™T¥µÎ Í—À¤³°´UG ·Ï30úu Ÿý§\-ÑY¾|S‡›<]¼ÄcŒ;ää<œ›JCÄÚuGz**žœ” }ü2Ù§ÒßìsJêAé1´Ì‘ä±[nô6«­ÅFò°ð`êR¥“ÒçÿXú¼Ðl,°ê¡Q¾·ïà¹ÿ<ƒ–¹]´ÝÌÐ@3$‹¿Lõµ»ö­Ë¢”i‹Û ÅÀ ¾ŠAœêBǺ0ˆã’iÿ'™·Ÿó½ DÄ7—.êZT”0_ª‚ZN5›½³KN‚QÇ€™ÖPY‚%U8+D¦¹¡ò¯?ãu4‰×³ ¯6}%¿Zp~µáIŠ4YàñÙÀÍy¨+¨'“Ö=¿SÈc̺ÒzØÌZÃמÆÖF/ÿ†×w‰ú¹„ïáÿ,óts¾S@„çâ¦ëT ¨©­Ò,¶9@’zå`©6éOÁ¨aÁD×S¼™}Š{ÖïÞòBØÖŽ;X'뢯½«+¬•ªsô/lxõÀ[ŸüöÊoxQòŒ£l4}h m™X’1ŠÎ _Ÿï¡I™®½bhÇ?æÛÙ±á¾N*ãÝ;±ºîÛ»!‰ „ûƒÁAÌ5‹†&5›U°Ú”1íÑV»ß{œr·9ãž®cè>︈ Î¯)6h2×GÃÿªÞoŠŠ;¯¡7¯Iø2þ~Y±Y[*¢ªÅ쎵wœÜÓ’“U¸Ie «²Ñ¡âžmÂ’šYÙá\ŽêG’˱. F½9U5æjíªP¸S³©lëv[ j›ÜžnQM@U¥¨-ÎS ¿Ü?x"F†7ŸVâÆ´$þåŒVªâÁìÜý@¨ÚOÄáð©£èŽÐdÿÈK ç b¸r8gË?*Ïâ+áazµÌæà\àœ­ìn¬d«aÔl%cbqÄgB±ÚT “ û¨°ìBë8/Æ;¬íä̈´XÖ¬ÎÖg²ŒU,aqX\ÎÑä O¢E±sHÄeiÂ:+05%Ü6Ó¯?Ìèïyåœd:ÛÚ9h£Ð*it0m@ø}XóL X ÞÖCêµGòŽ4i(!l‹¡'®‹ÑÓQ ÚAË.¨†s‹ë55¡Šþ&¿Ãë%9Ά— 8h°™_È~Òiñ6Ââ´8=ï¾æaŽ'àºø£ë´áeYWU´ªLYUU–P&º¢‰>ë…âX2Kï‰ê£éH2öa ¿Ž¾—µU3ôÃë02ÜÚãÛ~²öè×ЉV›êD"G‹Ô‘»þaülHëÓjéR#¹Nè±(i¬—këoÛÄõ‰1*ã}èòu4¢õ™ÎO/ï¤!0Ô$ pÏÌ;¬…1ãÓÑô¡.Wk§›L›æÊc¼?*þÿkÉôr¾^ÁŽó=:¯œ8µ‘1áq€[ƒÿÙdæX3Éãñ»·ÚCÍ>õ+Ó!•¬Åksž0ùÌÌ â2]ŒÁB`ÒµºÉLñ~A? ت$×0ºõÎfs1¨Ó8‘ 1þ½¨!š~1Êo.ÉØ‹>@É*>p+¯–|ht7ÕáÂ@ bG£{1çtبÐñ—º óéÈžDV §ã>A'Ä2 : qŒ»X»ìì¼ôv{7"PffFß)á»À„Ž„ób»ÄùöW‚n3g1²4.1ºrEC=4B=@ÅåêŸÖ]BzÔšéñÚlødÜ»Åj#zÓ\£9t¾.á!—ìúÖOî–à×RáîïyìÆ¥·“o’Á-=åÃ@œé8×ä5 >^ÇPY]SD ¼~‘ºÒ(l„×V,£jšl< x|ãZbÃ:Ùƒ=fÀÛ~FùÚØpüFÏYêÄÕs=£@\!ãáJV•(m›×¾ÓÂö(ú~”_¢<£DcÊô/ÄW›E ¯.ÉøË7=ô…ˆO6¹óµU‚l­°f©‚Öü÷<Æèbœ w¶ÞΫ¨/Ó·åì¾ 2þŒ–¢ÛQ Z1h¬í¥´-š`}€ÈøË[ƒ#ß»MxJX'ÃBͨ YµËçq1ˆ@„ ÒDÆ nO²d°µâÑŽ¨Ü g µ›¸âгöæöV—;Aeü¹W,Üud×ïU,zòñ=ÏñTÞ…7p/‹•` …ûÐ’khþug̼Ýu+—C(ŠñS?.¦·ÄÑ­K2ÞåÓPšŒ9ż›÷KåéÂñ§pé»e½°Zapƒ‹k““Š]zýÔÜ/QQaå½Lµf%¥ÚX$Ü å„Ñnð„¼}C~2ñ ׈sˆÈµ'Σµï¡Õîp°ì„uKÒ63LÁs¥Ïïj •û‹ÄPï¯FÛ¢Á(úÖ°¸½µ³U‚(œ½ý€½f;vÓ•{ge©US@•„´­'.ývàãæ(9Ib;nuhj D²ŸRîZÿä‘Du³–Ê.*Ü»‰g/mý eŽÿ"˜ì±,ŒÕL“:•â°ˆkÃoö·½2ÕOõdÞvœsàdÂt‘|Pcâ*8>å¬NÅøï&oB&QΤ„/GÝ2gWõŽºÅø×}ã׿ÅèC™s÷-ò¿»p)£ë-¸ fþ4ycŽnN$™PCÏ ÏÎà³=Õʻے’zfDV§'×ükWœêEßxçÓ€˜êÞ½U ß PwÈ\¬Å½7ú>úZƒÖ\¬xûaáÛYÂaó¬’¼øž‹—oƒŽØŸ.¼åoJÚÂc¦â‡Â²û…”_d½¯&w[’µŒ–W%XÎqD=¤ÝÛ‰V:¢I¡›Ÿ7$}4!A¸íÅ£Ñô€Õ:Vÿ¿îqÌnÒÑŒ–¥É…?¦ânËMƤA@÷ ›ÑB$CòºËGR¥ËL&†Ü,äa‹v« ?@̺m^rFóK4O–î;n¬ê£„‰lç‘ãW&д|øåÚÔ?\MåoÞV„r¿WûŸt£ŸDÅ'&ÐvÛxÝ(þ|­ð-a…ð’P±Ï'¬üºÝŽ#%)œî’…&b׆Þì›<úòîbâåßÉ·î*R(S©¬rEí†ü e; öâv¨¤2ñùTø lÃÓø·“®"úvÑQñï'~GOž•ðfÄË"ïr'¡Ÿ¸¢Aé«ÖnDOÞûùž‹JR!¤Ôf—¿˜óHá‘C@<ÍNF[ ÏQÊտл»½ý–ZÏQgÄ…0qq_WnYuCžŠü?ùIkL唥ÆPHשŸÊ4$u ÿì(ï«eÀæÁïÑ‹ChU«%B;pÙݷɦ±S+ÛeßíÙy.SãŸ]~Ù¹aK¶n‡úQ2œŸòptáͰp>,\ ÓE¢ÿaV¾#endstream endobj 315 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2097 >> stream xœU{TS÷Ï%\,Åú¸ ­æÎ¹3ç6ÑÕnºZÛ©µjO=Bå!b€H H!IÈ;÷›› „˜D´"R*¢6ÕZ«}ØYwÚi·õøZí9=ëÜïÂwv£Òs¶v÷w÷žïïñù|¾KbcAˆ_Ù¼5siÊØë\vŽ|?Ü BHˆm™ß?NC«§¢_>#ˆ'ˆ„Ys._µvKF~YYyi•t¯*_ž_^^ª.—WHåÒ=REEQ¹4¿BZ>nä²J~PHeŠB™BV¡‘K•Êq[¹´P.­Rªv*¥JÙ¿“@ ˜±nóë"¢pwQŒ y^*5méÌéIÁÁbÁA« \°]#Èt :+a#ìCá XÂI¸3yB‚XÁ ŒÙóvÌažÐû\lsìP\VÜYÑ|‘St_lÿ“Ì#ßål‰Ã%ˆB™—ÓÞCß›>ãèðÕádjàE“\2ú´(RÕ鬙e<†®@óþnèb»üPV CïÂßÀKv,4צãiût;`w›æ˜Í.i%Z»ƒot`{Ù Á…£‘£oõ^A/´@Îø¥‹þ†œqÔê±¹Âïî®71: 6‰Úo½ýMà‰’D‡à3w@ÅšmuN kw2N ÛÎuuЉsbfÞž$FÖÿEÈQ\”êÀ³NâÝïc2œçW5€ X®ÿñÌùϾB¥È›´ïù"¬e޽Î2‡Þ¥8äñë'ƒ³ÃV«6˜ô´Òio±´E ‹_Ž„'Q´=ã¨w°à%]ŒßdeU•dá~ü_¬(?«é-F?Q 8íMí}[³¥X›Û6Ð@¾ÊV©[¡ÆIkñÖ•X¦‚* k¡Ð« ZÜv°¹O•[j]DKªmcÜð!\@óƒC(J=Œ~F&_äRwt»J¶…_êÇS/áo¾øëæJãƒf5ú½ÍM‡ðÔrul°MeƒŽg!L¶˜aß‚ÜüZ¤´Hùr^YŒg–àYrL¥Ý”™¨7ÑOK~(»e2J e10úR|`n)Ë&5:ê`—{o›ÅeÈêÊL¥ü¢úðGChÞ@ }mèF ü‹G€>ÔÞ‡‚×'ä¡+êµ Ô€–ÆÝ¨SÔ!µ4ÕÁ±VjuZiÁí8"züÍÝ›¼N”ˆºPæâ¯„( 9©Ne›B¡T*mÊÎζ¶NI"gÃÎWØÆÉ‚’,D=ÜC úÚ?BD½Ûár‡ôA¿ %c #ÁUbØ%»‹R»Š±0V+˜¡Î Ìë©"–SÏ«QDâ,1äCÉ)é±=WôÇ€ô{ÁßÀOtЛ\Y‘Ú!›²ŠaÀØZ© )J½7ö Ày’‡ÌCÙÊãyªOˆ– çRŒq×Hþ½\¬M0ȇè#èÅ!Nš€.Çñì݈ Ó4Rïßý»ƒ×ÄC?‘¾·Žtö²aÇ5µÁ•Ý£´ù'0ñÐC$»· {]ƒ HƒôãéKÖÁ’¦ §a‚!=Ç«”„*;ë[Q”[Æ<é q›yä 8µKFÝÞŽ²uvÖÉuu½‰µûõ4ÚŽs0ßõz»LÉúCƒ—e%(›o¸€eê-Hnôúü,¸lnšañ2´4smD“ÜžýMnƒå)ÔóÞñéŒV«^/áOGÚ>â&‡„à –z£½O⃟Þˆã;^$.ä2¨Ég²¬ŒÄºníÎ×` dvo;’Þ“Þó‹×üa‰Êkô4¸¸h÷×7ºÎÀy8-?S|®è\Ñe ï^»z‡Æµ±:Ön5XTÿ×&ÿüÚ7tâHÍèÈáð<´ü²ÆÚÜuÆM|¹Ó5‚·ÕÁ\’ƒß]øÅ 4ºœ,ÔC½ÙiwìhÅOŸ–¢U¶FÆ©Ò¨Ý·éø«tpOgñ‰òaµH3¡@€W`qAθVï¹þIµJÔˆžEâoÑ< Qʤ\JáÕxž…—ãåˆÑj¥N²§ˆð<ÀâouèÙ±8ÀsûÐâw$8áçÑŸ¨f§|Ð`õTמBMIûê­c%Mg4èu^‹ßBsa £A jcs²Þgðql’pGpÎÈJ¨¡G{D5•OüÙß4vOøóenÕzà{žB ÍÝMšØ£jÌrGT­~\3Л“$¸7)ZFjô.9BDÃÜìO¹Ùa!çFmTú'ºýòC[û·2€Äñ«q ŽÇâkXˆÄH|óöWƒô¹õ5ÝåÑܨfˆ×1þ:ŠAñH¼ ±‹_HY™E·Ë¨w>¿ö=ŠòÁ¹ùK¾ú»e[r‡*éòŽŠî׿$×åQ;_YósÌÛç¥ÿpë»ÿüÍùþüÊ}¨ì üâªÿ¢ñ î6åw{ÝÐ8žƒÕn•ŒžÆÍZ£ÍÆd0xLÍfî4nJj2±Àÿý>Ÿßgõh½ôh1qœgTý?U?¬³òAÓÇçw÷‰b8,Â/áçðlœŠƒ$˜B¿§QxRlE¼EÈ+„æ ߖиþáêIÕ<™=–ÆÉQ”ø(?Ñߨ°¹Áh1šªøÔúÕ†´µ° ²OdÈØ6°ž×ŸxǤ”4Ãï :iŠùâäE¸§òó†rÎä|Â;€¸€bnÓ‰’)±+‚ ñ0ž‚„éÁrVéÓendstream endobj 316 0 obj << /Filter /FlateDecode /Length 5831 >> stream xœÝ\KsÉq¾3|p„ÿNvOÑÛõ®âÚ]‹¢ö%.W–å ,ÍÕÁÝ™YÝ]™Õ݃áÊ\;RÄUÕõÈüòËGõ_OºVtø¿þ¿ç7Oº“Ë'}¢èéIÿŸó›“ß¼~òÙ+«N”j“súäõÛ'¹‹: þ¯Ú.˜“×7Oþ½ù×UÔm×9ÓÜ­`àäsÍÙê´k]J1¸f »NyomÞ­NµKmT¦ù ¶±]§]È]cˆÁ7k|¬¡ƒNÍk¥Œo~fOŸÂÁ´jž_ãØª‹Î¤üNßu&zx'½&ÁÏßâc=“±»6$˜6 ž.F;7xÂñ _Ò]L}ë.9Ll.úÁSh¾Â?„mÐÍÃ…hõºGe£j6´º³V} =Î36ÏÛü»ƒß/vlö{Ú a¿®Ä˜»2¥;üC„}WÃûà“÷ j´ƒ¥‡æ[xn•vŠöÃ+ܲ}>¤ÎÖc¯ódt‡»§´U©yMnØnócº£cê <k=gmp7m" ›ëáp<ÕeÀ7?­þãõË'Æù6(‚öúd‹Á暟ï›Íõf³TÑÆæCžzHšïÐÛüZÀÄqA°ú¼¥<,©¹f{±¹a«ÃiëàæäTÙÖZ¯òôøúv´>oème›n¹œñОuɨØïY¯ ÷Õ˜0`²t€F{9\Ö·Ðy-AjaèäaR¸ÖÄ(Îè‚^b µõÃ6L†áøD@¦îÃg¯T” ’ÛÒ×èÍîf½Ç¡´ °Áç+‹:bq`N'4/Y—ݵï`ÅÍå7V(ÔÁo†7>-ÂnËɶÏnh££mu¥ÉŸWLžåí°:Á›}iĆtlÈ¿Qöì±ãÇŽl†š5îJã®4V¬Å°ç§ÚÄ6¸“S]ïcÈ ÿhÔµVÁrœ¾ÁX›–~tm@±ÍëUÄ­Si‚G!Á¢ ÃϘt40Xy¼&Dì‚ÆÙÑ„`rF>˜µy‡|£ÖJ\¦)v0¨«lƒ¤‹áźùA!v ÓÕ–IˆëwÐ6?âòSÕí¾¢Ó*(Ä €&yLsͧ$þ§B¢ùz4 …Eû=ã ãÛå>ë¼qžQ×ÀÁ&=(7E„e˜·¢&0òlöD6Sü‚Få¼­„õVÆ ¡é,ÈGsÁ{>ÈaÊ.äуðÝã[5¼ Ùlm2*ÁœR…äy”rf„cú=ЄEœ÷Y{x¹6Þ©i·â: 1l9mù ™½Ød¢&‰óE@Ç,Æ¿£‡ Ãdæ!8ú6†nDDì,¼k»_ÓÎ88K ‡p¶ßìXÁ.jB¤ÏwÛ·ÐÄaØ¥õöƒ¡ëé€!}ßmûßÀS>ßÝÜ>ìÙ@ØÄ7ßã£ûýæü~µµO­W–¡6HÀÄQŠºyxŒ¥Å¸3¾ß. ! oø?²!ÖÚi8U®)YÉX•´‘#æQ?ÐÍÓþŠ„lvH{W œQ‡æ8+¬í5ÇeñA?½d;³."Á!Í H4,£ù=>V(†Q¨r–ÞuHG‘7ÑY¬£Õ~™!¯ûEv©ù¢Ð_Ü6,É#K‚AB»Ÿ÷í¿Ê$°úüÏ Ú%æKt_ œ´p‡Íš/ëîjJŠ“açd…–­¼KV¶fðÄÞó½˜#‘|Š5ò[ÕYOkÂ÷£Z &%Ôˆ]4!ˤ×@Äad€’í¸\¬óD´²â=oóDTB¨GŸ#Ú€Ô2àâmþ³ìÄÇša¬´>ÇÍnºqék—ñ×›-ov)…ét9¡\ûâ¾ÀXÆ8q'8Ø"}ÚâÖ“w\„úpþG‡C>àE+ç&W¸R¬MÍùU£[¹óhoÎ;Ï,®äóP¸Ž(&Yø¼1‹ÛýôÉѨNWª•“ ½ÍÏÑua#ʨÕaW»‡¤¤ü—?pgAÚÅa¢>Mo`{+&~Q&^;2ìÝ(c üèd Dó…ˆ’ôooòƒ^Xí[×bȼq ý#ßþ—©¬q °ï1®ÉËùrUÄçòúl{Qþ4òQ4zŒyÐfÁÁ÷šâz—‡0A1O¾¡ê¼JxòJwýbs¾ ˜#à.µ6&561«Ù#àAé5„(ÔÓ¥…Ì'1üqrC=x Z§$D—†øõ‘‘ža†Ÿ×ñ†d•Q"$Qaà"m9Ë3õpœ¿£">ÃPÒ$¿á`'ìÞ¦PXÁS)Ô/ˆÆ Šø";\„b ¾±Üà¿Ü’;e!5iÞÜ j%óî½\€et…3 ÈÈ$°Þ‹ä©oQâ£U! ’H^¢ãžázT¸È¬#?ð oaD{÷*¨cP4ÅÇ„<ÄÀ<œ‹´ó·äì„ò[LdÁX,Î2 ÞâÁƒL;œ‘IA7?Í™˜‹éêɳ\ì‚ËÒb ……&E›š°‘ œÌ@?Æ6&!ªa–ró¸¿ÜçÆrE¥×Mu[0kƒ¨ËèY™‹)'·ÒëÕùTBr#ÅÄw"0sÉj—¡V´+ôºÄcG‰ôÓÙA­fº™Uª_´$¹‹aÄûæý‘Q*XÏíó’Ù`º2¥`½Êe™¯|ÍŒKÆ}kuÍ­Ù8Óxì^åéš1là¡Ø{n“¤.¸‚ëlÔá/½£ýˆ±¬çÅ”çQ).˜y«ý˜ãúöÍÈ·Ö÷›ý‡“ip-á‡ÃäÕú~MÉ®øp–ë  åüj–›EàÔàcÏp3Æv–RZŒ¾Í¥´²Ê°t£Gœ@‰”ÖìKmi1Î0‘Òâü®:omϳR¯%U6_€Z‡±Í*—_K« 6 ÿYž* 4Ão§¯1áU»ns²…ÉË âñùßyïŠS xåYi ó\¯`Ãwœ‡R V,´àÍͿ姕£¢LðLÀ8GEX›Êߣi¸J¥ç¹Ý8v~É; Ã,ZQèd.g¶t[T+W ”uK$éÌ"X–*¤a¸ƒŽ8q™ô’ÛV!ç[nN{30«¨O­P†%ƒ|ÇÞïC7ÃZGÜ„e ÅíUŸ]If×I˨œÀ=‚<ϸt¨yDPóPÂF±¬EšñÊ4ßXK(žP›6:[{n%¢~Ç•ak­ôbÐ( iSCX¿â¥K‰•wØÑƒäù£3óD+³ó(ÀSŸ3"\𴘿áFe[ˆÙ"²ý É’œ¦žþ|3è?ø¥¶œh.JQÓsD6+•‹\©RëSŒ#_Ø—áæTжZû4úƒÜÕ»¥iG¤„é äÍ$_#ݸ‰ïkr9¼»*Þ¢i•­!‹íâàn˾×ržSŠàiU2§JÁÒ´íÜE¯Æ€K'D.ßPcö…¤B¯éT$u—‡ÁÉ¢>,LXÄ;—Gšsœ3"|eÎqj˜.ø¥â~¸ GÇú¸5/u€lxΪ-D‚Ž£ØT2˜vu¬ ;ÅR<ò•÷EŠuf.SóšÜ2P +YXõI¾ü:é£1; #nn®K—Zk™BâŒá\`ÏdD•ŽpÀŒ±s®ŠûÛü¡´ˆì1‹} ú˜5­-hL˜£NÁÉ õç¡ÏEòçÜ\%{8*¤sÍ.·¡&Lßå±Q… =+<ãœûçòcA6_ûºrv3!8®DOÖ%*¯ó>OK+¿u¸Ë-°lõPUî°qÿ«¶¸?ëÊÊ Î‚“$²¢4¤”öö~†“”Ÿ¥æ7COY}×Aó‹é™dìÿeóû¸£AÜG™¢ûÈìŒÉ)Õl9éçy¢ª\+?¶ŸÒ§€­k£+Ðeè¤&ИÝI†Z É(†iÕ<6мÐlŠH lìko1ëãdØ¿aà†Ádȫʀ´ËFöEÑ;Q?C6¶[,T¡ÀÄeÆÏ•N›`bàù_X€ ÷Ø& +ò&m~œ0ß]`b¦ù§•‰ø"Õü£äE8V‰\ÐwšeØÄ9fÕU ÁCÆØ*Ë5¥K~¤ë,Uúp½ßÜb!‘Ž|kTà ¤CêÙi㱄• £§×w+Nƒvìr™¤Âðì ,y؇>æ×¬ünoZF¡†&Äk^Dôy;œ®o~܈Z¨åD2MÓi’­hú?g=ôcùZ/5»É~ÏÜC`ÁÝoX=îû¬] ºö:A0j4§ìg™SöGøü±hb8äó+`aFUŒe¨N·3Ñ&¬2ášš‰jŒU17<—kÝeÊrä"WK{È–,´í<¥¼xj÷)'£:û ·˜_áẊ ËÍêØ[9­™XÜx—ß ®& qm”HÚ#Wñžuœ†…Ýcõ,lZ ÁÐïkõ<£¥2º ±ì›bÞþÄÌ8ŸÂ†kÔ5+©ÚTnŠëÈïižgæ’\ $qP×\ ç Æ¾,2»Ë[ã;Q¦Ìô´Ü—"sj3æVn²¬ƒÄö¢m;]畦ÄÒy¯‰Xj¬Ô1i,þ5éºr 3g¢ÀJxÛKuU“œÍ̧ëÁö&Ùw)‰MTÝçêÅ7úþ,)3­œÑ†%°&è£rÕX¾ðš£R*ûàÎû«]q®àT9ÄÄ]êCù<Ðñ eÀ"ûÿ÷ÈïúÝÄLŠcYÌ®ò‹Á-£{%ü-WbŸ§ ²éåDéÁÄÐ_Çùa‹×ˆ^_?yV ¸&ØÅ#Mnƒ ¾¿Då?*3?KçÝóÌ<Ö¡7•(_8øAȆ`µÍõþÒm%G9-¢ûç«1Œ/î>Õ'åéš&}¬€óå£Ìûùg„¡Ž¹[†NÊj>nɪƒÎ.JÀ+Ûü8_Ä+;Üë±± É¢”®bËy£(qÈS 麨ît¾Ä‡íT}SÝt¤Úò3#ý:κqø’W£Æ©°ÝX¸\™1 W³PÿHu”|_æÁ]R¿òMtmÑüècsîy ÜN8íù”ÿöRÁDízLàw_EJ™¶tu¨Eó³P|Yùæü$ƒfê´ËO½ZpÒ¯|͆ÂÒxÀc¤ƒÝEZf÷}¤3…:FñO÷Ë«æ¤pþÒ Ö¨*{ÜwXÞÍßòà0„G"Ó”öä›)GÔär±§ü3 ¾n¹|ÉÚ«Qþ·czgŸKÄ ãj ±ãunŒô¤Üs˜TÐ÷ñމ¨åÇ êË|U†œç‚XÌÞ‚õ ËióÍðç+rrQA¿BGÕcíl{ùpv¹ÎÂú±Léðd9qÊÑ`øú§MïÞÒ÷%nÖÛ= ݼÝÝå6ú…ºŽŽëØ }õ?ù’>Åà)’ÉÂÈ‹,oÁŽ]Þ §ÏÿùH)kåé"Ü¡Rnš Åö@š•G¡h!a²¦Ç‰´{.eÈ‚O¥Fõš{ÝÍYò éKp©˜òáúÑîÍÃ=]ÖÇЄå÷’Æ(ÊeþÅ[ë÷÷Xæxj(\;Da¬"õÛ‡ýõ“aøW .Áh½_†ù|±VÈu Ç?K7íRór5¤8ÅI_mG[ßÊЦrX~Üð¯uU¥¨C±T;Ä_½ÚÒU ~üþß\wU<îVèq5Å2•33‹»ÅÒÇ•\ðH¦à¡9%JìÙ7Ä‘Lü²¹*ñ7CçÃjÛ7ùãxðÆuú¨ŠzVyZ¢˜Ý@LàG§5±Y²ÔÑÈ:ÿðä¿…mB&endstream endobj 317 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 287 >> stream xœëþCMSS12‹vøîù_‹ ‹ ›÷–þºRS34OÄøˆù ‹ ÷¼Ç÷™Ãæß÷ÕÚø+÷Ú÷ªÆ×‹Õï âû!û€ýJß÷Ñ÷0÷MûÑáü?ø ÷™÷!÷ ÆKHMUGûø³vÎøðÌÁØ÷­Øø[ù.b¡Y¦2‹û4+'D¶]†¼Y­‚Ë{àv™‡«jœyšk‹hFRK5B=¨ÁP|:æOス‹÷æî÷Ël»u¤]¼f•HœGœr‘u ~™p¤‹¸ÈÂÆãà¸jk¯ 7Ÿ ‹ ‹ ‹ r²y`endstream endobj 318 0 obj << /Filter /FlateDecode /Length 4114 >> stream xœí[Ûr·}g\ù†}rÍV™cÜ/z“eW)*[±%Ú.'Î/Kr%’+q—’Uúùt703 ÌÌ’Šå·Äqy‰ÅµÑ8}úûv!Z¹øOþïéõX\¼=TºÈÿ9½^|stðõ #R¶ÑZµ8:?HMäÂ+ø¿l…׋£ëƒ7/—‡¢RïcsÉÿ8^*ß©m󋃀ÿ™æŠªcœ¶Y-µ²­Œ¶y_8!tpM‹Åz2}ÿ6ƒÕE«„ »­NCñ-|”Ñ g¡{ì]:gtYº”ÿ9zë’¡XX”­:ÂâŽÎ`=ßc#„²¾Y߬–&¶1Ûßœà+uóŽ'œŒ²Ù,-NOúæluµ]¦JËyÕj#T7Læ“ ͳ ­!å²éD´ÎëÐÜ$»Ä›_×iMJcó5}Hµ‚Í—é£1[¬ëiÃÌzÃ;Ú²Ž¾ê†³ÍóÕ÷ÊXú}Ú|óÛ2HìT¢á•*úæ5}tÊÚ¾7h&¡TG¨›ÈÚyZ7˜AñÝJö1fqŽæ\”Ép/°fpÆë4˜að¶9YÂá£,lCS“R»f—°&Ù§0Uùÿ)®,ˆW(*}Z``*eË2ç+ŽÎÙEâÜ?3–½#%´Ž³¤h›Lªd•òn®XÜ)ú9™Ç16D‰vüˆ#–Ù($ähcȧœ±`‰Öž$Ý+<.½÷Õ„ª]+ˆ=u¼ËÚƒ•ène¢ˆHë‰^œôºâ‚°É>¸äüçjL©ieýö•kGïëÝÔ[™ZÝ3sÒ9T&Ñ1Çä/[,dLvp*fáPA?ÞæNú†m6'K‰“„£x·Ý¤üQÁ¾oW êèuR°Ò0øpòPGMÇ÷u |síÓ$æìÏ;!„ù ¥uœ1ÈÖûR>‚œÏÏ/†ýü>åxÈpôïŽ~ʲÖí¼ &ƒž’Á´ ­´vaŒ:i“v9Œµ«v×Hee"á ßSé×C³¯Y…'}.=îKŸÍZVáE_áo8‚Ű·ý×›¡ý+VaÕW8\C;4«A8U¸(“|2ó§ëŒVª˜GiànccH64Ö‚6“´ëU•¼)‰gï-³‘»S‚âÅàc«C¡Y—í¹9¥‰ƒ~ˆ,ÂP\†ýA¸ õtø5ž;G ‘.…9•¡#ã¿õAùޝ½`à°C˜˜•s÷"Ï’aÖ–Géi‘æ¢<”óʘò@âdÆ*ëÝÕnýî8Ó2¡•j óJÕH{Nù™ÒÒ£F¦‚°ƒLŽô.§‡¿Mæ Áv—LçPØ;¹›Oã"äÚ1)ÌGÃ* Îf×EؼáØÎDÙ ƒé/hk”§æ*_1ïæfH%‚ûœçôïq#:nç2~B£5¼.âšÌ‘¶>†J¹û&»,äˆI Ó‚Ûƒý_Ôl¤:§!Oáû5¸îtüHa '–L5 `™Y;ÐÜžë!ö$à ®,±fÙ}ÍdÓ>¨jR%%ȃ‰¬dѺc²yŠÖ–1e(ÂŽ/³ÿÃ^²_sTyÈ•Ál4²±RîQ%ÁÆš7ƒ>è“,I$Ù‘,™¾€îTÈATHÑkJ„tµi¹é³IAî¡"¤2@¢œÇ¢CRέo¬7Cͪ°»»ß—ƒŸ<âÝÄ¡Îý‚gBL{ì'çnÙ(ûO!@ hn⟠”rÁ¶bÀϸş?@מ˜Ì>’†–+ãê…d?äûs÷$y`[é‘]i¦x¢<Ø'¼=Ú?m0ᑚ1ÖþÔ% N[Æ¢õþ-¢õîkاX-µM,UÈ) HœÓ×1h4Ø7Yu7Žo9 ñ-¹™™û ˜žA÷ñŠG†x„YbÉÈ·Ëj›rt)BÍLÀ± \ Ÿ¦¦ÊÕxgògäo’§¥‰:¨JÇëp¼©©T9œ¥›ógOÅê*UQÒ{öE´àèÏ\E¤C¨¡Ü¸R±äµÎºûzWå—sÇvÿ5.¹ñ!§4¸ HÕ`Çì®’Í·ŸIÙ«{¦3–Ói³Ý•|<– mS1(QˆvÐ]üAžAA•"l*wRí¡²&¯¬÷`!ÉSª/)äÅîýÀ‘÷…\À"rJçgQŒ‡<5œ›Gð «x¤ë{ùÈj˜éˆËŠÙLî¿ `£Ôw¼aˆªÝ]À§FUò‹OQU{â7,ªöO Æ\6‚q?=¯B=ó7X¦EmY×Á3—òàÙw±WUŸî9¯½ñúÒa(k‚<´'<7ª¦§C좳JÌp<è¥í¥˜”¦$ i:ÍOiã ÝÎÓçåÛ!z=ðíH¤7)94Ñ5ÅÑ+¼w‚ôÐÏ¿>»»VŠî¹ ±µÝ÷3I˦Î_¹¡ '’Œl²düÙ‰dŒ3HÃÞ©U Lùl V¥Œ¬(ãã,eÿø=ßNñç°×¸ë®dó/vW…oþýï½ÔÔ¯¨¬ ™é;V<ʽ¥m)Y"w›ë< ¨¶86\¥d)qlðêÜYÌ,ç4m~°J ¤äjs²ÉX—†ñl, o= /Sm¼Øú$Ï4Þg¹úãL‚T“¢XÜ›fƒûoÅÞ¥KØ2åínØËäÛs\î4!IåaÐbÒÀ²™}Dv8uI°þ#¹žóO[™ÌW=Qƒ!ÞôíÚƒTiÀ ÝêþÍYG)sÎ÷mêttN sPУŸÓÈäHM™ ßtMðrss¾{ÜÑâU*É»Q|É¢Tñ\#ÒËtP9¸º<“ “¤œ«<âÌêœî Ól*÷约D.¡Á_örÄûþ]h‰ÚÉ_ñpä}_áýd){ÁÁ~lû |Ǭ´o¶­2ËTá|rêŸò^„/#ßéÖyS±èwC—Ü$3ÌPºîKåÐLÌù?¾W‘ZµÁ©…ª•ÆôïUòJ_Ö”û¡PŠ¿0ú‘¤Ð’´Õ¹5½‰|Å*óŸÖœ}’Þ¸"¡é¤õbêwbôBs]N‘“щ_{T¢)X‚XÔç‹’3P]ÏêñŽÄ GV÷X*CqAüÀ»™Ù|ŠÁ3àï¾.‡Qïy7-8_ûöpó©7Ô3¿ì{P€2Éáh=ðÇ:ñ Lzôã &ËjÔÌÔìúaá "¦ta?æÔ7‡'rSv? !ipðG™ˆÐEóý1iê>ó!ú+Ÿý`TS0û™KzŸ3()$M1.þjEý?*É,ÌVñŽE“j›ëů뭥 \œù<‘Âb P]îû-­‚´u¨ [ëòK æjb?üÖ½ýendstream endobj 319 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5494 >> stream xœ­Yy|Su¶¿!4\°VA£8÷º Æe„‘E@Ù)Pö­t‡´i›¦MÓfOnÎMҬݛ&]H7ºK)Т"eQQP(*øf†qô>߼߷óæýÒÔe|<Ÿ3>þ)Ÿ´¿$¿s¾Û9W@ŒC‚q WÄ-›ýdø¿“3øß|ÚÑBˆ[q?%š„6Lü·;ŽÝI„ÿÍ|qÿéÂŒE‹eYK²—æ,“¿œ»K±{yÞžù +÷®J\”¼6e]\Úúô}g<ýÜmñ±Šx˜XM&™ñ‚ñÊñ_Nh¿íÅÛþm¾ýÎÛ{b$1¾£úÎÅw¢‰ñ»&½íd|ãË á·óÉ|6¯áç¡13Ð]Hpå²ÓE߸^ñiøïu`Й,Z3µŸÁá g={ÝÀ‹æŽî£ûßýý[‰KxzG“m. µã´.(öXÙ \rÎÌo¢™l,=#ü”¿[¬K×ö©Ö€BçdŠézZ š™àw¸3@^N&”»YgZN{duÉ}øS¸O )7¶½õÒò¯è´öh’?ågBn* ßÈ»šN]{ȶêÄ ëRø‰¹»èäÅ»¥é@®0ü—ÈfuÑ1!9CQAAè·…Èóó1Ò'B+ДŒhÚ³Ÿñ14¿x©ØÝáü%¾!Á±ç[#åç,œŽŸ÷ü:\ÉGDad¸¬.«êãœg‚¨½Iš Åv7X%=0Í`6S £Ë5ªãøûv¯å§ÉLj¾ÇÕ»¨)ê†è—Rš§—2:z¤Éæ°(ØKX{©zÉX;ë»$ü†˜s*3•;?/ëY ŸF¬û “mÆØ(BÑÞÝ+µkL£ÁÈhÀHªÝP\¶*U‹.Ø$^äSÃEù£·t30˜yüäá®—†Kù€eåd 7KSƒ.½_†á0ý’£N±­¤Ýñ1Ãð« LŠ‘ò ]yUCi[ÿ§tÛÞœ‰”öäÎòŒšÿÕ#`|Dã;õzúì€OðÁeôÊQ!7‰+N21ûÀDª*_ ²ªõðžŽWøèä);«ån U©¬6¾ª©3öA™‘õ?&iSYŸš:b…nLš^u¨ëÍÖ›S”«ögWg/4%”œrIÙƒž;ŒþZUÃ#÷ÿ”Ó¾)ä긿bq9zð1ϘL˜µI˜µ{0kFY;reÚ%êj¹‰ÑYL4?ax_þKëæ¯É^Ø[k8b³XÁ dKMc FY&7m„Kú÷þþÆåk0ü©o¯ûfåÀ''Ð|á hžX¿Ï’:R•þëõkÔÇ[UžlùUÞm÷üÌ ¦ÎVo…$rú9ýõ­ŽÁ6ʿꔡ.Aç; Ê»{У0HÞªªö@A¢|}Ú–x õ=àl( UﻂŽ:ï!(Ž`U/S™¨ïs qZÈI¹Ib›lX.½ºÒ¼4}P‹¢/¥$뀇£ÅÔ'û–Ÿëî®ïí ½+{5ŸÈuUbC檹k€ÜÀ\.9ÖŒ&TtÑõ§{û_rÐù¤ÞbVÁOù¤¹Xâô¡×. ¹îqqŽ¡0r¿³›¾8ïþMé»3 (uKúÁM@>º‰—ä†ëée­ÅtàÒ‘#‡ ”[²5{té´1'…ŸÌèÔ)²õÛÁ9Wt9k¡„¬Vyò3ss2öÊëênnèñS®¬úí˜)_ô#‰oäBÀäiù’­q›Üe8\Uãj.9J;üžnçê!ßÐ öĨR‘ߢ¥4 heœ¢þÐSb«“µá²ºõ¬Òò¨6VeÑZ Ä‚[v ´#£·©©ÃÓµI jÉ¿‰;Æ¢(4 =ŽP›vïQ*)fø6ñvÕk=Þ.ÿïh›Çê±y<§†Žß*%aÂGèÏÝÎý‡ØÝît_Òñèè=°‹ÙƒýkOÄ¿þoYI³E5À‚£òÚ‹#˜7Üi°éÕ‹LKív'?Èg˜–8)¿Ó×ÿþ±ŸRÍ$.àèÒ÷¬Ã´û¥rùj£¿¢‚Òì(ŠOŽOÛž$O† –êÛXÙp(W—åê÷0kâ;Sû¿¾ñ—Ïj©‘®¡ž‹}‘x¿÷²[ÀË,9 È"e~£ÛÓîèÛÕ¾òÛ´?åÔªÑ×¾,sê\³Å¢ÕQþVf\FïÉÑÐß:x´õUpÀq(ÛBÆ|CŒ†Õÿú‘A†­™/’ƒ4Jþæð{±ë¹3ŒßÂfaÎÝ.ºE¦½gØ—¿t ³‘5–<­Ëb§@“5ˆ£yÓh4ÿv ÜÇJ8Öºq¹Y4™ëˆeEocUXÍ% ÁY±ØUÊ Å/ó ¿ó÷~h£[ñ yûa{Ä·ðÃG4ƒå>Tæ+ hšxÉ’í/bÝÓáNy€-qRåµ 8y üi•²²¼& ÿøº+à2Xuj‹Yk¦³–¬Í•B>82JÓ*Špô0ƒôLçážÞÞ®Ï>¹ŽH¨"]:À·µꩌ­ª\,tg^2 ò¥¹p÷ ;&¿ÇN{[«ƒàƒJm™¡3+.d¦h4ä·j7BϰàÂÜdVûOq›µš×ªšeÁ¿DK‹ØJé¸j±>cÕœ[ªà)ÇfÚ¬ŠÉT#XÙË}(®8Ýãl·’øn•#&&…}Ì~ØéÖýá¦è1u1œt»Å§Æ/kñÐ`àÇÇÅò/s Ær +ÇßZôŽÜ `ð‡éÝûOa(–«E Ã_Û‹Ø0„°Y°öʈî!™½€)$:ƒŒ­B” ÄÑj@“z;V?ÌÓSøES~ò÷¼¡Gy³L{¥ùó€§“vøÄ]è©/Zvæšï¼•<üÃ8 ýŠG¶"ä ѵÎÔUyÚñëh“yÇ–Yx‚$ ÆEò^øÒÇM «äÿ Ù…ò|†²ˆ4Y+μò$?…Ÿ:óØš·÷v:é4þuúÞùÏD )éõ»Ý>(#KµÙ¹²ü´½Ê¡¯.¾uÅG©ÐZ±.uå¼õ@®g†JŽ4¢¨ŠºSä ®9Æbd´ôßqùÊÈ2kÄiìO°ÙÄh0›ù©ÃWÍ…Ì’BwQåG½ÓJáÙÚÀÂô'üâEØ+»S¤¸ƒÛä5¸‡oøÐëØˆ]ç»p6Ô£›btgðãàcòÃßác(Þþ3›Ø #jÜqË&žCµQˆ]©Ü¨Ô¥èe´^ªMĉé…3²×>lüÚÎüx†ÃN«Ü(MN2 ht·7Ñ`-n‡28»ûàö*òÙñÑÛ¨ÒÕì´¹Y‰ÓÚÕ@žþ Ï3ò«ùa¾D O} @wõ¢ !¡¸ZåÍÏËTJspBóÕVÕSüòa§X—… %×tÊ[þðãúeÎ^ ¤º¨¸¶¾¬­ê(}Íu×Y]P%éOmH˜™ÊO3þÀï›ëob¿÷ƒBiÈ×çáö÷Ƀ¡Ù ´ù4ÚuJ"B/ˆÙ‘GxƘ±‡è¨í«Ï¿yXÇóc0"£s¬»Ûèšì*㻹%¦î"Ó£ªJ€í䬙5oQçWkƒ£–b]QøMŒjÆ¢4Qù‹™Ña´àIÝjgÙÕ;ذ»7í HÐí8©Ýî¹²§wS­³.®Q8ÒÜ[Ëà"yýÊQ4ðcÓ !ß´Ÿb À€…Ävz#K·Ðj¬óD«€kÇ™ÀyÀQŒ#–`¬|7º /íÓÅ›•á ‘R=²!²UبF´ÌŠ­XIX—¨a Ž •+ùå±ø{ê#ë$›‡e}.êšî¯E÷Ù* €IoÃ><Øuhuš¹ )Š`Ï .ú0µöÁ8Æô…áåñŽ _‘(”¬g 8éZ­žQÁú 4¿žÁsC¿hO­yH K%8ž1ÿT‘‹eµ·×Ö7WRÕ­¥oàÙå{oU­U¬Ü d^‘·ÉV÷Aº¸ìà…‹sk¶¹‚¾@W_Û¡®žÃØÿÝj–I1êdP02AÕÍõŠÆ«wlØ–@­[š«ËÓ‘Øu1¢î ÐÖsˆóžéqüÐy3 ‘ÂjZ-·t^¦ˆ1<É»Ÿ÷èÃS\»©ëzÀÞìðÓæ¦üËéÔ. P á'\]ö; ´1XûÇ©dÓøB±‚›¯GjþÓ f´æ“†YF‹G¬ɆÖäí¾À2ªª¥ì-̬"F“ X¾Í¦³¶psþª”†–˜PwdJ ‰ÂBËÃO "bùÿðÔ`SR\e8·5°ÖÀæô¤M¿ä BI…Ó礬žô˜£®Øï¨)ö{Ú_Gão†¿i¼2É£—ñ•¸f`$jWá·¾Iׄ ¾Éà΋»>h·ûñÔæf¡’tmÊŒérÀáË* ÷ËPy§ÅA»,]fH…"ƒÆ¤ãK†³cåcñYêα·gtÕ’:²-| r¬ÌÈÙȶ°´½XŸo¥Y%›„Ó¬Ù¤³0¼~xel.g¶ø-µo³g,‘uãRÈŒ ÏX4²¸(=º,–®ÿ«€ÍS9HJÁjs•£fÎ[3ì``Æ/b¹wƒþ­|‚@ˆ°ÅúðüeóZŽjp„ ¤øµ¢\¬$f5c0(ÀPEäÁ@ z*èr—|nÚ"¶•„§Y<»yTz¥I¥£ô)ü]ZaqJ©Êž\¢Ä½ËÇ蘆=ræô(æ ôTZÒ£/SH 2ŒéC{ù‰óø{×>6wÆvY¡¾ Û„ÙUèp”z=%”Ûéq?”ÃÁ¢­Ô}2'•Ÿk*2ÊÃ{nÜ´êÒ²šbª MuXÜxÆ’4 –•Úõ¥z3X0wò rC&Ö ìð^ô8|Ž4Ÿ °R¿"DG¸ûÅ5U²4é>©¢4·¡¥¡©ú5CܘíΗ¦g¤çTä×64×µà»þ}2¼P3’ g ¡g†Ð´!!wòÇùÐs¸ê«²ãîµëPT*öéµYXÃÂù°®¦&س³fç4?1IOåðc£ø|‘·¿ôÃò£Þ§£Äãu*Ú° 715ù™†"9¦ð·»wøWò±©-PQ¹üÂ\y]ˆBy¢¥üŸ´[Oç'H,ôÒz¬3ÙU‰ßQQþ‘s2¹|ÿŽ£ŠÞóÇO+©¶Áô [LÆPÆþÚ=¢'@ôm=‰ þgíxendstream endobj 320 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6157 >> stream xœ¥YXT×¶>ãÀ™cC£žÆœcÔ¨ÄH+&vc±`G±`£IÚ ¦³‡¡÷ªØ¢b¬QqLr3ö{‰ÑcŒ&׬ãÝäÝ·‡Afrc¾÷Þ÷ø>gŸµ÷Zë_ÿ¿ÖAD9t¢D"‘dº×âÅ´üÊk°\0¾ôpÔv¡nbÔÍ¡´ÿ;ãzÁþ7 _ã=)Ë×¼©!˧…Nû4|†tfĬÈÙQs¢cÖyÊüæÊ×{Ån˜·qÓ‚Í ý½.Z¼eÙ{+‡¿ï;ÂmÍk?ü(~ä¨ÄÑcÆŽs8þãw'L:i˜+E ¤æSã©AÔj0µz—ò¦†P‹¨¡Ôbjµ„r¥–RïQ˨åÔ4ê}j5AùPŸRnÔJjõ5“šE}DͦFRs¨Q”5šò¤ÆPs©±”5r§ºR¨nTwjåDõ ¦P=©©ÔT/Ê—êMõ¡ÖP,õ&Õ—r¦\(1Õz‹¢©·)Žb(žêLu¡æ“QT4õPä/ºÒ©o'u§â9â}nzG‘c6ÍÒRZ¬’T2£ïìܹ¨Kÿ.q]Ì]—vý¬›W·Æî}ºçvâ´ÐiGÿžN=•o¼÷FJ¯wze÷zÒ;¼÷Å>lŸÏØEì?ßüð͸7›ß|Þ÷;ãúúôÍé{Ñy€s˜s¡‹£K–˯ý|ú™ßšñVQÇþkú_{»÷ÛÛÞnå&r‰ÜY~/ œ„d“ÐÝ ªÖŠá+á«Øƒ"Q0JJSáž­[#QHH*梋ëP}} ækÁÁÆÒµØÁ18âÏ·#Q Õ0‰ÍÙv’³1ZZY<iŽb¹³uÇË&ÑOfXl cáû³ïñ³Öl”År»PñznN,Ö‹{ñY?Û ¥‹kÉá(÷ƒ9ô“³ÍÇM…ÞŽó“¼~ݶŸ 0‰`\cA2Çrë1ÃÈýtBXÛcüìö1¸9–Õ´?ú¾m_ ݱ »`ƒ£Ìö×ÇÖm¤(† «žãUޱaíxl;AŒõg?“è¡âÌâÓ°mf,k«[ÖSÔ¡"RhŸºý‚yB¤ôä!t‘¹´àîÄáÞ¸Œ?è)¹]íµyÕ†yãxLá},ÄA_É3ØŸ^#y²›Ê·M"“Œ$¾« ˜…7>|J–RÃoà^? ÿý÷~‚^^‰ÝÙé^ß>~ôÍéóç¿™ã6ÜkÊt‹$“Pjí1Ãñ³b!D¸Å–¢ÊP¹:Y™Æ¥+òt¥ßNß’uˆÁìÌáYØ:á· t¾ùè~C4JJˆSÇfð üÆe,bÜÆ‚†Ãð{@=<~jíż.*Oe@L*7X¶ÃRŒ|…‰,³Vc)k—è@º:lWH b^C™¹†sy;JOèêHG MÌ5N2ÌÎLÝÊåìb¬‰ùØôÂ$j1ƒŒ¤f$ìb¿õ¾ßZ÷šV_©oÊܧåP¶VkÌ,Ô¡BT…¶£&éÎPŠBd,LóŠYë¹Íb>ýÇüG_gïü‚3ÉØ˜êjkdÃc2õ ¼Çi–49Ñ~2ÿØU(1 Ö6î=õûvèÎwäî^‹ªá_,Œ€eŽõUíygKÞ„Ž`4H:’6œþ5ùÉ®# töàq¶câ«û­÷#”·1íZ:–áŽ;ìÀ#¶­&Á2xÒ¯ŽUÕÿqÇbn ]ñp¢öîŽvuÐÉj'…ñ÷ ×ÜËQñ zbÛþí5rÃL‡(ÎüµLZó,ìk¡ŽzîoDwvø{Ê *b|*©/ìœ|Ïvè¦VE :QVuº%)³ª“œóÀ*‹:atbL¢}×ÿ‡Z ï?Ið&¸UW¦¤Ô¹Æ¹êõ‹ëh€[³RPÒ¸ ŒðÑñ¡ª骕ÙZN ˜ª¸ÒHi|l䯯õGž4›«ã:Då2ð5Kÿ%bk¥H™¦HPsQ‹}Tˆ;ý££õ$µ}댚<>'C«Aj_ƒF˜ÊŠ’ºsCÐòô 2ŽÍZÑ‘èCjÎÃüü†EÖ»ÛÕ\÷#ôµó¨‘ËÈÝÔTZU¸õäd?ù“µ#¹%Ãlÿ >k7A®íù÷Ûû7o 6ÒÈhëLµ,ô¤9ÿÃ÷¦iÿ]ã ]m £…à ú§æK½WÏÁ¿c1Žå-0³ÅÔ~-¢³fXdþ줼¿b“|Ññ ]VV.oHhJ܉˜‡ç/Ý«Q5D7ñµÅÕº­>¸^£ELaMî¶Šø¦EòÕiëøÀª€ÜPÄ|8cÚ˜¨ì[7ó²Ðô-( ù—…æ¦.Þ³m`ÜŸÍ%\ÖûÙ×w`0ž¹U@³+Vï?uêÀþÃÇš}½½×ú.åëñ3ÖuÚþ%Ù;vUñU%ùèbîC'4ÊwÚ×¶ñ€7¾h›©N\±LB{ÐP´'ï‚þºv3°?ºÏÁs¢Ãp3Þo ƒ9ÅH[ÈI·yKóãr-(*/Ezùöä K „U§!b”t‚ÉÔÚtšß;!;iUeh4±\ýJÜ‘z å0úC_¢ ù‡ L••?¢ÇÈY°0ßMFKˆIŒŒc^ÍåíŒÿ×ѼÿÚµ*þÿÓy’É·½éïEzBOó!sßÞ‰ðN²'·GÇ™ÛÓîà.žô¿ëýBéÞG¯“þ´5†VE‰_‹f Š€ÒðÚxÒŽŸ6œÛiH-ŠØ’‘ªL_/CûOžEú”¾wbb}„!)ÁL; B.Ñ?ìŸïã³fþŠüðRªOß°51©4&F*5ÄÔÔ 5ž‚ûÛfÉßñYLÛa»Áæõ0¸K·E²cÒ>ú5ìýZ,ÌiŸ´£3ë’8ŸfïBd“'Z°cƒ^Åï[W–öO镨²´šÐò¨|) e–¬?aÌô]÷Õœ¦DS¶¥} Á\ÛbÌÌÝWÈX{N¹—Œ!޾ûþüÚýéYüú½²¬!Õ‘ú yŠL¿’ÀèsæØ‘Ãç®]?¶ˆÓÉ2·Úæ2“°Çâ÷Á0xÞúZÏç¿ò¼•òàÔú!âÐÚÐMaþ¡(‚LQÚØ,¦íÚ L ™þ3Ú³s/:z„ËÏß}]e„™’Wá°ro­ú™Á¥½q—×LxoXÕdŽMMC¿VÅJ;œùQÏÊN&Ñï„×w@.á%èâ¸ÍއØòµƒÆc±›#üfÝožíÎç­ŠÕvyb7±ß¡¯]&m×HÇ W/ÄÀÁf>Ì v!Ë$ºb†DR_žÄ»:»Æ£«3â'4y,Y¶ÔóP<©“üͺ_iÜýöˆ§Ooÿݹÿ;Ú%µ«R§Vv²»þÚ.NtÇë¹c-ÀX¾Å ha+8ŒòˆÛÆ©J¢v¯D«Qpˆ"UÓäˆÙb5W…x|VÕnúΫn3˜‡¹’;;íߚ뿊à IÇ‹²Kÿ§%äp©Fa·IT $‹…Í$|9õíA™j‹I½_Uz§zi6ºïÂ*XŽ2•¤K%Ÿh”–ºû¨g“žIS—Q¬Þ³\ìl7e¶›ªGz^K_l5èb2eÛ‘K>2¢¼ªLý“u˜ 0Y¾_àØ¬Ôü˼½etå}`ú‘Ù9æK±0Ip` õyy¨„©ˆ-LP*Ôé*‹g¢­ºïQ¥KYBQ\\B’<)´N£]ˆ"±øœ³J§ÈV"&!6IŸ—Z¨âñÂÌÜ$Uj*Šw‘•%çäfëôˆÏi<3bÑ$s‘—$•”•U¥ßG[¹§óªã2Qr).+¬(Tæ¥êyiÉâz?£å€î¦—® a€3_ö´½gÃÓè@ejÿ‡§$XŸ²ƒivÀp}éjÆ]#|b† †v|A- é¢FÔØlY5ÑE¨‘ômÁ „IƒPP`CÛ›<ˆNDA¤XŠ9«$BpAý)1ÔëXupÌFŸØÔŒx5’1‰%±¥uOu,pßšM1!a5 úm¦ž³y 'G8øòvˆO³ƒ´ë®ØÕîzšµ©$B­YtBf™,kYÛÁÏе€åX¾à(†3-lSXuHT´¥6|[Su]½ån¯Œ¸ý­ wãËHƒè¤0X,,{Ù‡ÕåèrPcŒ-ŒVĦ¨9|ó¹éÊt%RºD—%•sK ²-¦…^`!‰¯§I j!ÕÇÈ狚£G sr²–J㊢ß&íÜÝPRUY-7†¥ÉO³)Ê3ì" Þ&æ gLa‘+î‡=ñ¼§Ø(ý ýÀ“Ãëq!;a.tWp=÷Ë¥Kç†bWm°¦çä8 ë“Âu¶ՆĪRUœlmàÒ¥iñšè ÎÄæ'U¶4ïËÔq­SGÙ½ÏTÙªjÝ+x^¾Ív`åé{l 6–»‡@Ì=↥ ž4zܺéúòÊ⺠¥^Å;°Ã„˜»W|FO\0É*‡áEÉ©éé(ÉÅržÓ•zd á3¶ÑVY9r¿†Õ&Ñ…›C6̃ãìo¦-™³ÐkÔÐÕÇ‹3µ™Z-Ÿ•£ËEyŒ1®"":&1xôcOp‚^w<>zaÔnî«Ýu_¢/˜+SÌ$Ôâ‰+§Ö¤”ZÎWªÈCZnÛîs™eˆ9{dóª™û@%¿)#.# Åd¨QbDemÉO…΢{ðØòZŒÄ:¡8>Y©NUpÍZ¿¤@ªlenXƒ¬0  Àð…T‹äL|qBIANv^.§Õ6ï­F¹H¯ÎQÔW$ÕY^ŽÔæçÖTT•¡òö¯“IèA’p¦E¼”lj"nåŒQZ¸Ó|»ºùÔÆó¡ÓÛÕøÝ¤Ì à"é¤Ö$É<±µ !ð«#þUb êg&gÝogBÖ6:)¢ƒŠ`$ Hº­4+;?—Û¶c鈹vèÓO?ž1wܲ¥5å|VVN9x]dqljzøÛÓ¡tÿù8<›ò3kT‘ë8XܾãSð Q®ËPIÒØî±ùàüÝ/?“´W¥—Ä¥©ÓÔ(ž‘G×Ö–TTó;8÷%'¼«@<ãñïï’I»óèûƒ–{Ë|×rdößÈ‚þZ­6éx¤O+B…Œé¸éÖµ³'Œö˜?½­âŒÂ^“¨Ùü%q³ q/ÃÁÉX<‚é¦-Á´–ß‚y@,ä“™¸ˆ±„Ã×i­ª8²mÊÝÜÞÉ«¹vH¶½%=i†*âË]¸ÍÞ¨þüjan¹_Ãqg÷‰ãZv5’´q&Zĸþ0šàÑé‡{OOl:ÿn#7¥ž°èðñ¦CW¯šV.^âí3‘ǧÆÌýêô…3'oÝ1ÏŸ=Ãcá¸6N¼n½Aôo*é[ê΃{âSçÿM fV[¥¬@éh½FçS€×;k“µáuh+ÒÖj‹˜ kYÝ!ù#Ŧ̴à¬MІoEu–ŒÕONÁ’3T^ ¤ fS°Ë„a#H[ª“—eëuy¤¨*Œááñ²È;W¼è ,,…,,ùj a­±¸îòÝèßN´÷ïáð`;qñ™ë÷Ϻt{ëè<^›Ž2tZU¦ ©˜yÞ‹&pV ‡u6ºü•Çñ‡×q»û)v ÒOë)Ñö–/[ž“±àN8<« 3 éÛ8> stream xœ•X xåÖžP2 P‚ƒ-xg„*(”]YÙeG(kK t£k’&Mš6ëÉÚ&MÓtI÷Z°€¸põŠB£¢Pà**¢WAÅ{Ý/~Ãýðyþo’JÊñ÷7iû<ÍLÎw–÷¼ç=#¡úö¡$IÿùËV/]³fÊdñ>Ë…_n,–Z"%‘}}÷ÞûÃPd‰Bw ~c%¾žx2müôù f>••½('7oûÙŽ¥òŠ„Ä]+“’Wí^½foJêúq›ÆÇÅO˜¸uÒä)Ê©Ó ¦~ìþY³ç<øE¦VPR±ÔJê~êYêj µšK­¡ÖRQë¨õÔjGm¤æS¨ç¨Ô&j!õõ45…ZD=CM£SSÓ©¥Ô2j95“HÍ¢"©»¨9Ô j05—BEQC©xju7µ•NEP#))õŠ£xª?5€šK¦úRr‰T¢—\ïóXŸS#ô}ïï«“FI;èQô¡~³û•1s™ãýçö?1`áßÀûÊ^‰LŒ½|é½—Ö,˜0'vŠhDJ’ÏHý>.²»¥¬LE¡7O¡/ÒszFa(Þ½[åf`ðD< /Çë1wÓÄôè ÁΗ¦•A¶ŽÏÀã)ÀÌØpåG4‹‡út¾kåÕ–œþ2g£#'âÌš‚Í’¦y¯°µ™mi§€Aw¡HÔB}ç^˜¼*~ŸlßÞ„ÛÁ1íf3Ç­Ý‹RØ$Uk*•µÅMÐVï%ÞÆ¿½Ùù0oY?SS¦Îè–”î4¥w¡*ƒ…ÊèU¨-4‡†¢ehÕ/Ï!Gñ8j9û †•à©éxô4<ããzš!'€¶$hêdÑpÚ¬7ÊAÏdú åÍŽòjWù£Õ °Æ¸ŒÕ{SLªmÅN·£­Rd¤9Å ``²ªõ­Öò:;ç9kóÜì‘›ýÃa7½L{)ðôA°8\Ç­åžnp2bURMÊL=§Y(ÅÕ=Þ½E\{$Àηò†q<Šv´ù¾µyj¯~üéu°ìl1¸i¬ö7žœ êñ‹–ªT¼Õk¯û­gqŸðñô°Gü‘ TÔÌ¢‘´!L cÒš¡¤Õêó‘ð°–ÃÝÛkRìÔsx$ÝöH‘õà à9~b¯"M 1–ØÕñô­Þ@QTˆ 3ØÄÚu $~dûì ^ÍÿW>ÿBñéBØÆ˜àq<&~cÙ9 gð›*R!LEÚu¦õSPÌ(<êª*›ó@ ÷RÂ)ð”>qè_/?Ÿ×”ZÃï­MwÌölt­rÁ~¦®ù¢?µ¤(-œY¯MxÚÀêq´7”¾ 6Æ]\•­S¹sg?ÕHÐ\‚ÿCÍ¢Yá*ài´÷“^(I5å+\þ$éäpüŸÐ XcTìªc{;ýíŸÎýý¬˜ÒÜB]¦SÍ]`(f)¨p‚ÕVÉßFM„[芦žlá´*£'‹5ô¼EŠ“Dº–þî=bêÓèüßF N½ŒÒT½ çþþ=¿e@‚hB;j!Š%u¶€ý£ ³Ê8]¾2isÂb`›ü•%¥/ÙyG³½ÙÑì9MÒû⿹[‚ ÒÄ<ô4·¿àl9ÊÙÒjÁÌ…Þ”Aœ1øÑu’ )D{(è4Pó¸x\ÖÑøüþô¾tø»¡BYi¤O⯜ÉÕP15P¾6æ–a}"Bð‰ÆëîÏ—é±øU©™&_*×^О7»’a7 SoÄÒhò¹ÛRef4௑±pÞ4dÞ¸­:A?ÀÏ[³ÍÏZ²­KáiXÊø©ðÏ˹Ý'ëê`,  !ÏýxÉ:Ka'T@-xÚ™P= |¼O ’†N²J$Á3·ã˜áWùK;íǹZG;”óoûJ¥Á”g6ð ØUx³äõÕ×^íò4æª2è_¦©>è›J#G¿êcV·Û˜Ÿ”·¯`GQ20ë“êžFƒ:P”-ÌÄè ô–ì©?<»§…"kKqõ1T-m wÊú÷Yû‡pt-ŠA}Qÿo±Mš—y‹±‚v² ›¿ÅÂNR¥c´ï7¨b&D”PÍO³òikÝjþ?ˆÇãéÒ-aÄ &T  È㯣Ágñ`irîodÕ_tN¼VÀ'ÑcÐti¨ iÏP,NŠMa%ÌñßОyÓ`Ì'Ð6Ĉ\Yá‡W¬ÜïÐWñÕ?5Q!ˆ.ÑûP ðŒXÅiÑLóZ•Þó0ðö±C:G—jRí b±»° R’ª+½[,˜ßþaÓµ4ˆ‹R—ëÁªkŽY‹à6êug#‘jȦ! 0Ç€aÛ#ZÕŽ¥»L ³£ÄáS¡­ISìÖÄïhI?ré­œhænƒëg‘ã‹A†$¬WëÍÌ1èòµ\vâ¶œ-À<¶©ël÷)…8O+ݼÅl1Y€Q@ò_[Ùá3a~æa7úÁsSHŽc^¿æçÂÀ)(Öãv—BSŸùþ–Nƒ"ƒ.ŬÕn$ ­œ­ÖÒS.Ž º› ~S]XT²˜¬Z¨à I¢ÕåØo¯+=FÈLdýB$šŠÀT¼Áuto„œ%MZÈY3OϯÞÕ²bˆŒÄýp,îûþ¼¯^9æo;Ä›õf#h‰ÜmLˆ7êØg·¼ò’|ùŧªŸÎ5èS‹6ñªG>½zHâÞ.tw@rå,j#>lC«ÙÖ øÝ×¾Gãxù+ý|’¢áo_i æØ¨Wòûvl’mfÙœCßñå]l}w÷É À| 3³Ô`2ßê@2¯%èŒ8‡öˆýi»ßâ¶×8;š;?Û¶v°SÑê9øÆ“ ˜µu§ZÃ-¥ÉŸÄóðMp&ZÔ69¾G®, #©žŒˆÀÈÄ¢!4ºç+Ô÷ûÖˆûðXö.¢înå.“¾$¨ØÓך–ì\ºbÎ~tøò.ôä›'ºP|—Ä{òðYd8RlÙ¡Š¬Œ&úË«­6Þ§iUæ»+Ÿ_«×Õj«øæŠZ[¹Å‘é/òã÷W6UªÛWeo×§næ÷ùw»öóÀÃS'%ùR¬^–­ÚC‹²*²§Ç«çA³ðÒ4‚ ™ üˆãqöx. õc7§v{ëdWàÅý{â—=»b9Ÿ†¿eÇ­è°s"ÿÛn¤¤‰aJº3âÄäüé•m'ÖIÿÔÆ\W6ö¨Ì¡è—3•Ý÷ S £Ð öãígàsnõ,åð3ÿo½"jÏaÇ/Ó¸7ËuúLs¯YZ(`žx)çùs-ŸÖ–.V*!MÏ™ÍÚ-¹d¥.¶7y-öÞ^ïh‚rf˜juw`°´]´xžþ¬}Ãöµ«=t Ú—ü§ˆà{ýÇa¬ð6[/«MOÉNÏÜçÏmlihháð„›Ví•ãa¸Ž¥ÿ†.„rÒÂxt¯ ˆ¢o­qhØ»Èðn„Ðyû*'Ó©õFÌ`R¥ïè\ãJ 2¸_ÜÃãÖ×§×äòͺeïäG¿¬®M‚DfùŠùÓòp$ü«Âꀮ^æPj• ,â ÚL<ŒAI\cw=_ÍMzWó*™:ì?õå;Éå|F“ÌÛ s¤”è¬)ž¬8Äœ:}ò"’ZNˇÜö†w­ /`1dÚ {þPü¤³HÛè’4OGe1t«­‚,UDf°V0(:XêÕ½–›'ÃR"þÖ „’D]F¥,“ý¤GÂhÀÃCf?Wàño¢oz§}q¸<Ç‚g­ëuÖÄðYÛh«ÇV[úòW¾†'õ~°‚„«šA‡³0ò5žî.ÂJâYxD/p\ê5‡„—;!þ¤ °™Y·«œlHçm¤KëNmïÆí5'iÍF½۱Gz§ûË.”Ÿ÷\(9 Nð1„åç®Þ±S£åÔ‡÷–eB&ì.ÌÈ64åˆ+UÏS:hæEÎÍ 7ß•?>žø^äÚ‰ïï$TþV‹Ya#~úA|y'Ž• äe·´€[TÂÏú‹Æ.sYéXÈ‹4á„‚ Œ™¶”:¶]µ~dÿØòQÏ¥ÓNÙ¬ Ã9•º 3/Ds¢9v˜L[ÌÁ·1¶22w¸jÀ_Î9\_"eÙ!Æ"§!ß¶Æ’dÝe7X B;8k>Ë_`-ý€ÔP|™ÍAµN¢»êFÔH~åQ Î*Ô15ªR•ÖhÒi8,âýhŠ’ ]ht:`aÓ—oR)t:³LyŒº,Ïÿêûá/¦wnÙ¶/ioRcn[©,6.ݤ÷±§ÅAÈ0Ô[‹zõãK~•âɽškMT8ö‹šÕwK~&G)$²pX羋Írphºr†mÍnJÞ½;51µ6ã`{{ëó¢'qÝ’—D#“â~ׯLÿìÉ_…ºáƒYG‰½ÜLu¾O&+Vs7×üº¸XmÔAQŒ¼BQS]êq;¹[ÄízíL„Ð"ÜÍ"v ’<€ï%ïUx;Ž~wÔ÷è/h$Zƒ¶r¸Î>“ðéOhéOè¾ÏÏš>›ˆ—é‘ÿƒ?ÖH„8qz„æÕVä*Š5:§ÌŒr¾NiÎ5A*£q*uVÕ¶rOÝœ!ëÅU¶ðö4ƒ¾JG+#„‡nŒ`-.‹•ØãJÕ§(`ú×y& ˆ˜—{báK-=ãÁ(´«ÈÓ! D[YÄ|zâ2|Æ|óÄy"4GÏÂ}—gÖ(j›üu nÇààêŽþm`Þ{oïܱ¸ÿ h^§Ôè‹@‚ïWt%T³Þêv‚RFœmªØLÜP‡¦(²v‰OIÞ½Š:‰æ9‹^c¿>°*þ©'çŒUL³¾–ÉÛm^i߯¼ŠœM°¡püõ]ß û~¾þý«é¯¯ØÏ}ýZågÐÈœZ{÷Çã×.ØÜV\VW_ÝâÑ—€…;ØÞm©¦ëHFBZî¶Ä4~WFªi·i¥Ae&I zHœÔ(R‚æ¡›B›ð[^P-/ÔеœR½co6®¤È_­¨Þ {`W¦ºhoN¶䌪\^åv:mvÎ[öbG=ám§Þ­®Î®R¶­¯ÍW_ÙZÓHÂgB¶Ðt²ð‰êI Vq {in? j³.y. \£t©ê|6›ËŽüÊ[ŽV`ºÛÖ®?aÞäí}ÇT¼»Äí#“¢JU—¶ ÖN»¼ák4Eý€î¾¶øblÆVCÎ&1:DÃI±IßAÒtZ°›Õ¦² >u›a»ÆÌåáçL*© 2Úl>ŸCÙhÛßêDô éFáaÀwâ|êŽí9Óè´]âVôiTp:B.¼Æ¾¦kÍq&ª´Eù däåÙ-¯X_­êÞ|rŒ›s´ØªÈj.j« £bŸ3iŒ2³‰¼Í&Ü/oþã0 V~Q²¬Š~Ø ]„Þ UÛ¬Þr»—4vcŽ/÷9xV9õç.k9}ºQN2,÷hªí5. g¯±ºm5¨OÙן÷ðñòSx™^vµ+±^€7O¿øVãÃ-ì~Ý©lX+W­] ëú†_ØJ:¸YÈgÝN¯›»V^®Ð™Š 8|o—iŠ5¤@N‚ljÑ…âY¦ªÒ[SUXRìà±-gZßýI·ä!-B°¢ïÙ²vÂ[‰"íG狼Õ&¶ûÇ8Žõ‰Œ–"^Á´f7¹ò<¹ö¥Õ±Õe%eà…ª·Þ†£Äh¥[C† “/SgË=E%z¹ñ3ø"^Z¨S‚<&§ª ²Ôes”ŠåyÔ#‹”&¬œsײà-rª]\”¡>da¹Ô‚6¢T4Üiw•€—ñùrvârü>¼Ý1íÔ4®yç©ÍÀ48kJù°©¯‰© B$ /è>ö‹ŒÎt`2uyEªRGËÿ8§÷ðx:ÞˆÓð=:ƒ¶TL‘#¯ñª@³ÑQn7 ¯<=²?D€È9”¢þ²4,¶endstream endobj 322 0 obj << /Filter /FlateDecode /Length 4932 >> stream xœí\K“·‘¾·÷GTì©zC],¼Þ$Ûk‡ÖvXÔ(|}ö49#öLÓó Å݃ÿº¿P¨D=Z”ÄØÃÆÚá`•‰||™ÀøM߉¦§ÿæ÷·›l„p¾ ¡ÑÁ†ÎšFY'ñ]*ÛwV5÷‡æoÍÝÆtÚj­šÑ|ÿý°é›?l„ïMgczÝ9ÕÜn´±”¥ç¸ùvN4th#;é"TÆuJ3¢ÒéBÀ#ÊŒFiðí-#*=ŒJ÷BvŽ3ž;8Íd/lwŒªoÞ£X›üÏþ¶ùêbóì…”ªñÓª÷ÍÅëMºh„Ã,[S¢3Þ5·›ïÛ¾ë·;¤èl@CÆøÖhhÞ°5üøE`‚¿_|½ùýÅæ›°Át²1 ÷Ždž:¬Ó}ç|:—9† téáDÞ…NkN”{‘탦O#ÑÐÉ”€ú N”{8‘‘P¸Š(÷p¢¼FÄv÷3Ï$¨]P%«:iã™´§ÓUó²==^î_nñKñr»½øa³“®³^ÙÇ`”ÍÅÕ¦½|¸~v{ùîxxv8Þ>;ÞÜ0Dõi„öÁÄ2¸8àtù–&•ÆçYuçMp®šõÕá°¿™´6Q¹N‚JWDïnîh1/Už)@!ÔÀ_‰¾oÞÝowÂt½¡}ÚÓüˆ¢5ßÔòg¥³ð º Ý*œq—š\Âôp4~‚%Õ¹-sQ˜B´ 0Eõ Ñ\õF%ˆ”x4‡BÄÌáûFXˆAA0ðNRŠæïPŸ«eg˜;lèÁ®Ìã=>¹Îh®ÃG£|-&/t¸5xë;[KÉ{ÛAaG1+ÕY[‰I Oîm“t˜º7µ˜ˆÃå¤,×™JN²×IIZ-h".¥_äCG†at6ÚßË–”ÒP&@2;¦Íù›ë„³ÆæOŽ’PÛ>zÇM.}ÚIÛ9 \Ñ)íÜÒb;úfqäg‡Ý¦OƒéZ×+1¿)8ûàýd±äàôaWã'ø#g‡Oõ¨èIza­äûI·*Õ*Ž=´ AÓ¨ÎSñÈÒÞƒÊí8…RÆ J;®@#†ük\3Î@žÒ²5R›Fd&‚Ìâ0¾ÚÂ~óÕ†FØÑ’[ÃУdg%­%mOzŒvè‚/íȧ‹~g Ð ðaŸ›i"ÏÂwô9RÍžÚQnyýbà/¯7v}yÇr1nˆÚ¡I¡Ÿ M,BèÔØ#{¸)ʬ—ØoÆž^¿” H‡éé7ÍOŸÎò°šõ¸ çH:Â<ÍÐCjK!Pa5ÛŽ`™ÔøW”&¸ÓpMà{$€òH1N0´ó4bèñðªÀ0Cï©å°Dnî7…‡ p'˜ì"mM‹ˆúF÷8ö&ÎpУ šÈi šC›8%Uc¤ˆl|n¦"yîñd‡ÑÖÆƒ-Ó§v]f` (,ç ê-¤}I+Ḩ—xcé´qÔt4»”ŽPDic]‰ð"%£ðžBÞ8ÁÐNKÄ¹ÇØxÈe8E:ä²FjÓˆÌÄ@0ð8LPï"ní›OÎo~AÈ’ðì ‡í·½N(þ¯÷§W—¯nŽ7›Óëæw—·—oÍo/ŸWÍ«-Ô´Æ·›¯îO[ îÈýÃÃÍÝ›…­¤Z?…Ëw¿9» ¸AÇÇvád£)£M;øÏ-‚Ko¥mo¶à`β}ƒß ‰†rÜîh}ï\hï©á{üG·‡íNÁ_ƒ¨Õ#ùs`NÚÚ³ðŸœC)Œ%6":}ŒC¬p*Mjû^y‹I‘þ# š¾ô>”^3Œ@¿Óâõæ 9J9,}•w3ÔíåÈú#õ»tHݺ÷rÁŽ´… í_‰ÎTH’ýÔÀ^í‰1ò* 1`s¿ŠköñÞpª#oT_·’ÌKC’¬ýdµ×©øþªšŸ-|»{õFtCßÄ j¥e:HØmoÚý–$/ä+â'ÎÕ“—óVJb€X d¶cÖÁØ&y‰ÃÑ´B}°ƒ‰ ';8T‹ìЬ¡+JÁ— E*&2E10˜ŸÀzp²ýÀfálߤµ”Ö=ŽõŽOô&q„” Ò¥Íiø“Jè÷ææ$mSfbÔì<¹CØ—¦ý11ì‚Oú•yŒê#¤òbm«4óúG±ÙÁwh ž2;¢Bà¶Â·ï¢0aÁ¦šˆÒ÷HTeׇtÐq¸7œqûíŠupEzÇi’þ øa•œx&§° pørD¬ö¿ç;8Rqb¢}ÉÔ‚žOÏ\Te4ï£Ñ„Zwif ›šxèS eêÊYÙÓä.ݾÝBûdÉfø ?DíñÒJ’.Y†·}t4¼ÒŸ6ÿñ}ÅdÒ HxXÝ“4Ï`°‹JŽ„ ˆ¤ïs_õº¬ ¡‘D…|¦t×þNYä0¾éžÒÜVApü<ËÐÀ'ä·åç\s)sy¦»ˆÂ¯Nk¿ÌXå@«ÆG6?2¦(=‘O4ï]" Ae§00z¢ÓÖP`r)´sÙ;Òôâhv­G+Òá"¾J3âwåfîr7â,Æý -qò•`OÅYQ"Ý‘‘ò0¦ŽÇÔŒµ’JZFÂ…­îanßÂ*åN)F¶›°ò½Q:o+­}Š26Áº!l'Ò™ÝôHÏMMl7"9N+æŽ3*™÷>¸È'o Ùœ’Ñœ}o`Í&dMyíZð<&Ÿ•˜ØtgÉf§ ƒòrê®ã6i“éZv&ŒäºŠB˜T"õ‘¢–Ü‹2ødOÏU¦GÄŸyåLý>¹KS¹Ë»4ŒT¢"Îý=¬éÛ5Ñì+Õ¦S…ǨÝÅ©R3QwÂ÷?9#eé<’)å)dølkà™çÿÙS#í£0_M½«ÆSåo¦bñÎ;»ÎGËa2ÂÎtj.ÀÒgƒàÄ`Q§+‡ ü eª!˜öËmtÑà¤ï£[ú·µ¼²©/04ôÑ[³ˆq=őöÞÕx± XÀDQ°‡m‰wÑö w1ÖÕ ÉU<¬V\[žû|æ.÷$ ONãz°†Á¨\ w×ÕB ¡î`X Gîð±‚ðÝ8_ŸÏWYë&à£èÊ-ÄQò¹gXI©(F*KNbþÄÌ ÞÔa»òKÅ¿pÑ>qš‡´[€ÊdºÃ}¦ÕO & EníLTÃbf‚~&)Q“¡&Œ‘ÿim¢)œV„…@¯¢ -5ž&ž£–'ÁYgƒµõÑ2ƒQ  ¿¤A§ÙùcÒ[­s½ºN$›ƒ;’n-ügQSñ)Öþ~ô%7,X<ÕÄ­ŒÇÔ‰1‚Ï•]ÎS—ÈÛÕ uÉEǤ ubð !Ö`Và9˜ÓÒÅüC†9ˆáù\lFWéÁ5‘ûcçp,™^Kàlé<`·u‰«"ÑY¨ 8©E¥Ïƒ?QÖ$&˜’ûOW" g·0—÷S¿>A1é¹¢ÕH¼ š‡´{),G ï*@¿lÙ»-íÀ«IXª]M\×h¯pØL÷&¦­c˜˜Þz²4Ý˯&Pq÷£ W¹Ê¶RÒ€-YU×/²£©1TÒÇ{³â®î·ÜEa÷v¢ùƒËãÂˑ̛ƑÿR“q4›ñ•—˜¢ltOµa²´‡¥†9aHB¨#dш…ÍÅLýu¥4¿±v8ôhh·©‚a9Dâr¨O h)ù¨€7Ïö“ܬ˜ŽEÆ‘OkÓÄ¢wÒ$‡0“¨Êh³²Â2¼bBÁ4€ÈÂN\Ô®ªãºàaJgÐíÇ­Añ¢“1?øÛMÍC©?üREè‡!oiðÛ–Dù6F:‚§xˆdî‘+áÀ³)̲Ø5Ø5Ð\2Wz™ìL Ïù0,X›v¥Èƒ2¼ÝõU ³ëºm‘ò©† ¤V©$³ÂµŠjj¹ú1¢ótþCÍã}âÄTàöæÈÙzu/½ÏÆaÏÁo Á ÖûeéýË8¬c/ ÁŽ’ø¹jÙûòù4ŽÿŒ÷ ûÅ=tã°Óâ¼o>Ob RÔþ"‹É,k›«ƒÅŠ›˜Ô¤è†’Šã 9A ,'X …Uh[ÁœœÓˆ™f¹³*ñÎfgžÐZêsiAÉM(þ#Ôˆ)ôfLÌÄ™ãÅ®$6‚’±® ô!VRt‰S¿(Õ x‘­ÂÊÇ™çô¶òœpO˜ÿbJ=Q$Ùi×»z?;‡èÉ83»Ñ½¦+ºvÓÀ\_kÍðkÊj¦ 'D”÷%I 2CB!sv?tf£=ÅÄû‚!êYe-¾‡n=%åÀƒ÷§9Tî‡ Û’'kS³cÅéêÊ£§ içÙŸ r‚Èŵ%#ý߯®!¸vǬèMšuŸ³ºFç#½®§fgRg‡$)ÖRÆwÜœ—øú"³v1ûÊKÉü|¦’9zµÅJcꃸL¸”Mg> !^tRë5,Tô–D…\ÿ–Á‹!8­`!Cõr ™Î…‚ÊûÌ‘P_9wƒÍ7÷:e§å®÷£¹Õov¥ÈµVIâu¬˜^¥û¸.Ps4þ—/§øoWtè´/€óÍ¿·1þ0FõËqØq‚«Á ë½e½eØ#x}²ºÐ!k8þ÷-é‰îÕô:3©“£«¦a;œ¤o›aô>ø!PÖ ÍÎAk ½¯S4ŒòV@Ð¥dYÒÛLl±œñI<€ª6çÒ ó‰c÷Ò–Ò…Ép_ò»¨8íªÐYU ßl§®;êL}%¦œŽ7Î_1kˆÙ“0Æ©¶¾”]»7ŽîˆT~cœ©ïDØ$«PUõ†28  é|¢éMËJ`•¥û4âdv+'ôã蜦w›N/Ìù»¯%Ž£,2^ˆeŽ^^ .b~ÝN–X+5Ž‘!€1BÄòBHÚ‰]î¤R‘h½rÈQús9e­(‹Ò¿Î)/;OOЗZÎñö ŸowVÓ¡‰×½ ~wØjÂà0 nTkßx—Û›[Q<àîð›ÔB¢Òî‰wzxOü”†;Ù^Ži÷§ø‚­@Yyû­Î_ì—‡eçE©›2Š9/dñ:¶ò ‹nÂnrqT>æ¾ãfõ9}ƒA:ìÚÈ:"ý/ò •"ÃŒqÜð"ĸ$ƒÿ»~ã×T}âóyáéª^ÛM}Œ—0k ¬ò™ª˜Ã“¾Å§{ìºu½FT'£Ã“>®¿Ýv¼Ô#u`$~dÊ<(Òå¾BüÕܵc„íÄ'¹µ[^¢¨_ÆŒH®BloøËÅ}cC®^Ñ„À0—Gü89 ÍG§0‰£ÖºB&Ì?Ï«O‰~ûT?1CQ„ÝàÅ?’g 'U5x±˜wDÊã¢OM5ˆ].'¹kWô¬›±øÝÕ)‰Îø Fò‘O|¥*?_}îWÝê0’J8ñåK_•ÆúÝËäa+Ɉ.åþ˜ j1ÐÍ®Erz=õã³¹‘¦0¨Ú¯Ù£ÌÕ;î»jtRb‰Ÿß¥‹Fë;aØ ’5¶Í÷\M6«RÖ­oǯó{s]ÿ­=Ï\x) „ŠO‡ó‡éV¸¥QîâÉ®ëGhõ“–r‰ÆË—ÙÂÓ57fIoÙ8©Ÿp&SY(½ù‹Ï½0ÓB;ó¢ñ#šäFÃ+üÇÄ‚ v^*w”búqÌëÖ½ïCZ@LžÜ¼ÎÝáüb¢ñí_¾Ì¯¬$Âï¸ÿ£‹¬RâPR¬µôPÿ÷+ä"Mn qmÇ óréïmRQh>6;¨èô~³yÌöaz^ƒkX³»›»A™ÄÙ2- «zqU[³ÁtƒY_òúq[~ÞÍl&_EOó龜k J/5OY¥,é6f$êØAõ2è Øü" –î>…™ŠãÕ·³‰5ákOÏò㣮Éû IÏß"ô*axZg]z8y¦(N{%|þ‰ê2Ï® ž¿3™M/¸!çÓ™þ}P]ÑŽO ’õ{«éèôÜKwª/åÁ3÷\<¡:_˜ÁŒÞ—øðÇXŽÑ (úéö2Þgؘaý™>ô€ =sê§¾:R’ETâ$F¼LÜwé%¤¾³¡~ÞÞìèÏ©gxXuN{^ë‰CâáXÊ i&ïX÷É©Â$ýåA Ï“¾¦‚¢vü¹R∓ecŒ—¡CB7³ GĦÊèøÁÀc*p°iûËå#öÿ%ñ/Š&@endstream endobj 323 0 obj << /Filter /FlateDecode /Length 7267 >> stream xœÍ][¯Çq¶^üpà'#€ä!ä!gídúÞ-A$²$Ž-1@((R¢(žCJ¼HT~}ªº{zªú2;K:² ˜\öôô¥._]ç»Ã<‰ÃŒÿÍÿÿàöj><ºúîJÄ_ùÿÜþáÞÕߪÅAˆ)#÷¾ºJˆƒ“ð?1ÍNîÝ^ý×õ¿?}x<ÍÓ,æÙ¹pý%þEγáúùñ¤¤™¼¸~y„w7[sýum¼×8ZI ãýõòà3®g«`ÄS:ü!ýËcíÕJӰߟávž•·0ù‡éÍ"Øø6` áú«uÿ}ïŸá Œgg õä žÄ½‡°õ߯ÑÁ #Òh?Ü«88L6x¯'1¹ ƒKÏÌøŒ‚7žá§ì' ÿ/¥Ï¤ÉYK¡`§ñP]PtµyV8u}C‡³¿<;–õ<ÛëÈ£/ÒŒR6ãó#™|=ÅÛ4:„pýY¼Ž9딇»œaUZy~—x3RÌJ¾~3ðç¼ãAþÓ½«?^%j{~)y*¥&¸aN£r}™ÿ⩵‚ëÈ?žµÎ”½Ç}²¿—øg?ÏF˜t鎑ÕIh˜q¶‡“”Sü oý>—%ËÔ%u)£‚¨¨+$ŒÐn@]Á¸YqêúˆN½8!'-ÍBòÿXÈWåEy²(ÿz ÊžøYÚ†¾Ã#v2Þ‰ÂP¢f¶e=I "¿ þ¨<ËÍ™OÂL³Æ>¹É)®Óar°úƒ„_,Q|æók~×&žáDÕ$ŒÆŽƒþ§>rSÑ䃟ÍáÄžúk| Äìl{{°°ò å9‚°3'Dzg~¶M­éåÎnq´½HÙ=$‚À•{øüXOÎ6$³ìäœ ùD##ÁUJáz[8}Nì‰??ž¤ó°%ýûzuìuiÛ×Lô$žsbö½™IÀ?J~fôÚ“Œ_¯@~XðC.üêãÁ¬5¼.þt“`ê9ð"©`@ç ò 5Å7¡AP‰PäÂõ&ø+Nj6pÔ®#ᲚÈÂÓ ÿ]t¸0 HQ=äÞ)Mý-…ì/ÏãnCÐÕ¿tð„“ׯ£6sÒYnñI´Ù8>(áùx†GáÒ`C òÆÐäE¥ ð)ÌJ—ù8=¬-¬ïú ¦F^±¿mS)Ór0OqMÿ ”<ܠЀ¿!ÁM:]XRÞÚòªxtZ(ƒX‡HK׬"rƒ×H!ª%¾À—ÎÚŽæ÷xOo±Ü­+Ò/ó˜Ï,3Ù—qsp£µ|yDúS µä\X,B¡µÔlM j8t£fY^¹BNaa9×Û» `ãü˵|AxEÿB/¯B?ø6˜”Á2Î|Ýå5ÉÉ…JÓ{OHœ–ÃØ1imE:£YêY‘ïÂ{ܲ5cÊfÎï@Rñ,µÇG¤BŽŽþü>pÅ쑈òÞ[Ñ9ôZ±~N¬¯ÆµÔJ%Þ ßò;lÚù †ÂÉdý$‰š¢GnfBS,>¥S€%0!÷#ÙE&h¼Z{nY o-Pú/û2À¥$˜b`eÙ7‚ø>ôäTDÃì!¢=² odì*ÒèÎ@¼Y8G”(?Mg´T ¥UŠ ˜íùê>àøä~WJ1 ó= ¬7aˆ(ìm‹!— ùß(Ôx¶2y:“áLÈPF„ß䙸x–~E.ʃ/3ÙÎM T‚``ûLÖƒH»~|…ø,ø|· †ƒºŽt„>y/3‹ël×¾\uzÜU búóûèüq‘9+†ƒ_.³ù^¯(‚iØ.>Vrxœ¶íƒå*¿Æ‘IQ5!® ®ý3ú,“_п €j lD@ªùS¸®¤»ßûƒU,2™üKj=扮Apó ]ZÒXÀøüK”‹Há÷‰ò¥ 5âYo¢öÊý…wæB¼n!#ýÛ´3ëʇ›øÒV=µÐ&âVj-ö¡u°ßÖ¶6›A¡_¤ä÷G†œÓŒO— è8 R¢,õ r²dšÇO«i8c¸(„†^Ü2Mt⢒­MÇîÜ -àz•ªÐ÷ëèíÑTÀ,j· T¢O‹Ek,^Ôw‚ ÜY,­èWƒyFK@®ÁÏŠ (âÖ¦¤ôŽaÒ«©GiZ+L¥–_ï¯X ß°ý¢Õ+]u ;ìz@þ—œ yH Ó9ýÑ:<"¦rJ?d‡H.¿º¿Dq­ï‚`ƒt­€<ˆè¨a²¢Idˆ(C+i´pž+X Ò¡KåÅBå-W>O‡îEͺܯÐ'ÑŒ§p*ûˆŒ |ƒOÓA¨Q9‘l2¬òDœ¨oï$M@WOÅÛ\ ÷é)ý!²Õˆ~EM|ΉË4\Šà¯€=¶Àûò`Çž²fÖÂÓËfX‚†_p³b` .ÖòËô^ÄyÛž»˜¦"b z4°ä¦ ÈŸî/nqú¤‹D 7£' ]MÙå„§¼Àßm¼œ¡LÁÝ0Hh€#pc‹0©ÄæzÎç,óÆG<žÙ[0>¦E#ƒ<ŽÖ~µ¬œ›öm6¹õ{‚ÃÙ¿0&ã†1Î [ÏÛœC%Wnn«|9£Ä‹&ËÃÅg£³Ï&:²‹Ï&0óü庼‘Ñ›OÍäiÄ.@òzFs/~«ªˆ„Å€š™¬u‹t$˜AŒ&Õ¬á <îIʽ¡si…ÃpœK8®‰Kð RqÒÚ… ß$ÂÖì…¯ ä˜Qormlü|s|íÌ¢êàò²ŽŸ áH#àCÂñÈhbH] SÎs sá•l)Aј-©¯BÊRÈÌ0£sÕ3È ÈZÚ´ÌMP E‹KùÅòJK\QôÁ&®ÏC“cC‹RòÞ7ÍM¸H/v:C^BÿŒ·®3'ÌZ4(gÌS¯ÃÆ6ƲKÀùCI6¹â>À?ÚèÐü ú5ýñÃuÀ¶@ˆ6–â{h"®­<иñ3[â§oÑ…'4ÝÐY¼ƒÊFV)Ö¤0ÚƒD¹F—ËNÅ~¿F=¿9U¡$ «”£~ 6ý‰ý¬¸þZÔf†K´;ÍŠïŽ%~ÅTÑã!¸‰3"(ØÐŸ‰aÜýYÃÚYi€Éáz¯6Ea¢3o=Â+d¯#^ÀÁÀˆ5¾¥Ž­Zzyô¾96$9)€ƒ *lµ°d²‹ä—ý@DJ7ÌÀheu–Ä8¡®L˜âýZ$"YÂxð7¦köÕlÆfó2)LoŽÉhtõã(4 DýÀøo^´µ¯4úvíðK´Áó5yŽ&Ñ”ø|?½†7ŽO¼d”ãγœ”í\º~jk¼b@¸¿QKÔÓƒx*r¬`qyvø†…£;3Æ¥=8£v—ÉùÖÎN±'F†ÉiÝ:;ï&gÏɃÁh’³é '^õq£±ËÐÌ­“8p´ÛïÛÚ´rb~A•¨ OÇıΠ’÷ìœhÀ¶Ö\JHᘛcma„¡a7Vn+¾î2Õ’§²°À}™€vX Ú.;Qq'xðèÌV9æ¬Öc¡: íã¿,÷ÿäßAK‰h 0¸PFžÏu2vr–ÇÂâ¡X Ó&þ‡Ê„Çäç¡îzÁDâ1¡o)So¤•Ä ;Ô×÷ûÃ+û‘PBR†П|9M¶I:¯¡ki`¹Ò °è±PË0ÝÅ{1na3àÐøl WÆx†‰›Äw¹è%å…S>/Kê‹QUUeuþ² XÕAËfÒFÛnBŸ °]5H[S{T›hÙ¬‘ìSâb:¹·•é “& ²\ÃùØ;M½cuÒÞ°™ÑcW…€¸V´ø»¨\±¯WN¦žd K´U— ‡þäçŒ 6 -/§ÊÞ„¦‘Т¸`rpå¾ $°xÝÉ´ ïs£]H?)áþD„‰C/L7î䟿e¶î·…~»Q:=9Kzœ­;Jn…+]„ü/£–Rp6m²n“í<æ\ü9¹4šP›¿&æFüŽŒù*±% ¡uM¬( ]•û]•HÑG¾vJåωdmŒÓÛtÑ%Ëšk X)H°Psb#¦æÂS_$t5‹ÛˆÀN4¤“uˆžM¤10X†>û"3¿w.‘prR*)‘ßeYL*JA£ˆ…*€e”‘ª&ñ‹lõ˜ƒ„ ô“J}Q¢còðƒÌãaÉ]²ˆÆº4€P`uÀ¶þåêÞßn5Ý8ƒ¤ž¼ÖE|²-7zE±jRÞtlƒÒÜ ‡`.é–íxÚ®ò{G,2yÒËP©Ø.¾äFñò…™)ýÝ€ÛHˆÅm:Þ΄ëR x–h<©›Ö1GòÔ Ò#nòysÚƒêº&–0•5pKJb„9Ó. íåá?K¿bþÈŽýµ®Æ%c '‘Ü—Ö¦¬¥ãÝÝO¡“-q“ŠuSÛ”aF:_•“4qÈ+_òˆRR‰ŸÜZy¸aÖÖÇA”k麰É$ ›˜­)ï¿M•”Êt˜ ºJÊû8ñ¶Ï%ì™iñíi*ÝVXo)Ùö4I¹_äªáíû˜ÞðQ”©RxOíÏÀc¿~Fg.Úll|DägÝÀæDÜ|¹Gäƃ«”ã`…`ÃC+|’øÆáPW? %‚ݱ]Ù… 7nƒ‰ ›<Ô˜j•Ûð¤µÑjßñ±ü:#éÏIé1˜YãM«üu˜=ÂòÊŒ¶ Ü\w“|I—v±¶a¤+*Ë öv—Ø2î /ÐÙ`”ÚBÓ‰¬!áªãŸ›tì=Ç»þýìˆ(˜¡ûWý¾CبíbpH:YîiŸ2gZ+±„€O¥Â0 äÉglcüNfÀ¯ûÍSð/ÓR…Þß‚,Þ‘“Œ2õ§‘poQ€)5½ëþ‘Îõ3Ò?Œ2Ò°‘ÂÅiس›‘¶”YÙ&M—ûþlÆk5˜—¥d ­oš”º3ý"S÷7D¾ÄðÀ+D±X±ê¹-:­DYPXET_zƒaåÃ>é F‚ÐHïEl–±;¥7YR-½û*âÄž¹á±Ы?üä7WÂc°<€½à'é·W½/ÀqË/7WŸ]š4ìa‘>”KÀ¥ò&Xy7‚+Wݸ‡jGP®IM-eWUžhñ[ :Î7ä“ãVÄ %HyÑ»Vþ­5ÅŽdYR4z.â¤çÙkP¹à.ÔAÚâu?é¤g/·3I|þÿQÁ~¾•‚‰–\ `ú®àÂȲ;ƒ™†Y&ä¡ë×tÒLV­°‡>IøpÕ—u‹bmAc};!âÿ8|)æÜoˆ{‰É°¾ËóIºÈ˜'Ô§øQ¶•ÀgoÌl޵ûµET Q(%g‚bØŽ@­É'ƒÜÂ¥Õ]Pck2Á¦r<Ñ»BJ7å­V¥Ö,ÖéÊq¼e#ÒÛÖÆÂêl§rn}ã£þZy³Tºçe+MçàvGD×ÜÕ®Sóvñ]6y#‘r{™‘ýž`…eT„ßïªAe˜ôê~/mäuÍG©&ƒ2µÄ1¸ÿ³q h t] ‡©—Z‰ª!ã’½™,›˜øBiâ-šc~Ñ÷s£Í¹nµtŽ%6¿Þ9,'wÖ4̵ǧ?c¹lÌ£<b?ÁOŽ>¦Múº=Û*Ò @Ÿ}©‚<2<ˆ§°TËØ—W'šI?‘—%MoMàÛ°`Ñ hÆÉ&mŸþìVÆDG´f—Íj½<Óùžÿ FÒê›ÆD#Á-¶bŒes%ö;G×Á>gâ3˜£äõ¿r¹ÓÝ(ÉŸ¾…vcüCªA®ÜåOY,k¥„ºÉ@\ –Ù/œÜ,®ŠA§|gÌsãØË¯;íI¢w×× ,ŸL"Ɇ45št £÷|ô ÊG’vÏgˆüa“½>æ¯B™m,©T8œƒHXý8û;(‘©2NB -c ¤|ü?å}ËIWMíiì¾ûY £F£ZÑ3fí·ë®!ø¬äÝ&JôyPþÂqÚ²È]M¼ãh·«Sù¨Oó@Ö…Z¦O2ÞŒUƒí´”±ìY;ÅõÒ¶îŒù§v¥.'>îL[_]/A4F±Qñ;\Ô¦¿^^ȤcÜzþLÀØ€ŠFïåãý@á:kk¼ðhEëþž¥ŸM&ë´9–„;Þé¨P…DºRÒ·Ç”"³¿¦6ñ†F½zÆŸ©;ÕÞ¦¹ª¤0¬ÙÑ1£fóã8fíÙØëöÓùJMi‚ZhŒýÎ5?ÖNÚG£bû³ Elh¼v3bþíÝwŠÞúùM·ÆÂ~>ÀUö¬;ùXVÎéü¢ï—}˜ÔP‹m¡Ÿ©¼Á£½Ã^ö†ÝÙÚ}±îl 4¨¨ù÷I_$åöª+‹Ë6¯º¢j3ç2»!JDm®û ïo(q|4±KˆdV=§Å/oÙQ²M+ïF$ø &µêƒJ˜IÔI0ñfbÜáâêÙR Ñ8?JøõÚ¹Œhté¡Àyþµÿ1¿!OÐýYž˜ñËGŒèÞÞ9S]ÎÃeWW‚^£9ô¢gY¬Ç/ D¿ ùù4ktYyá Ë»ó?Ã{óçC=¶êáʳÑÀL²À릖¤)¹‹1Á2º_uK?>‹^ïT6¸¯„QÏ+›u‹¬rcoÙ˜éM2¢r´MÏ®õ%T!%°3üê²þfÛó &%ÅEEø¢nÑÞD|ùzº_lVůWµ¶z®Í+[–ûílät–ör¯ÛV•MsuÃöv'eà´¼®jÿ* fÙçëF]ä–â@me,‡|pÐBÕ⯭h‡Cä… ]ޱ`ݳފióëI¸m)¶?ڼé¾ï{†äéùÕ|´Ybëü½à {^1l³H/ÏŒ¿7†@ ÿ¦¸\Xý•]‘ fpV1œ›} mØ~Z7cÉø:O):]öÅ 6fPÅUú¤¾‘óEÙ·Ç‹:iwbܱ ÀØ6d&$¯ÝÌÒT_¶ŸJ%ðBÌšÉ`µþxã­Îvì„ùÅPºñ–g%¬­õ:ZmÁäZD!ÄïL©ÇÆ­RkÒ˜v(5Q§†Œwì&ïà0—áVOÞ”±x™h¶Så—’tß»…ýáHÂÖnÓZüÈÑIaáé,IÖ°.X`«'wˆ™[R­PCQnÚ›c›C l'–ýgó"š»—m€{\¤n·wó¹qžíf<^ù> stream xœÅ]IÉq6|ð"|2 øä ÃÝ_9÷Ec$X–lø"‰€’ “l.=ÓÜ9£¡~½#2³*#r©÷z! Pë1++—Øã‹¨÷gb‘gÿSþ÷Ùëâìåƒ÷dúõ¬üϳ×g¿|üàŸgä™”K´V=~ñ ?"ϼ‚ÿÊEx}öøõƒ?œ¿¸8ˆE !U<{!­sêüÃÅÁ8»!Ï?⣓FÀßNÜùk-¤‰:¨óçu–ÿ~üðrèË­X¬T¸„Ç—ðÎO8ÚÆ¨Í£`K‹"¬£ŽöB˜286Ø,Ò˜¸þ]»~ aqÚèmêG+ÄãùŸÊ&¥ç¯ðo!¼Uðº58øSJíŽmؘҏ½çq4ìIY_ö·°D/$ö‹s>ú³ƒ\|TðGz滺¢ÑNà\TêŒ=s…W"”0Jj¼7ã,ÒÁãTN³nnÙë€ÛHc¤;¿lÿaÛõ›4«ñÊ[œUU¸=þ¶O ßeÜùçL:>JF\ßçùTæÃÞö fò.&dÚBXiá‡Db*š•8•¸ ´j¸"F/ò‹Ð,]~Z¦tZûÝs —œ×<[Ì«´[ç]t.Ÿ¾JŸ__eFP@-áüj°~ëâ¶c)¼óüe]öˆ|”‘‹Qn%ŸD *iåˆÜb¢Pz}¨Ä—Š‹AJAú<¹ÒpaleÙÉQF GýæI½ë‹CZÖAG zØÈxÒ'ór^_(_._Â\ÀY¥´:¬7b­-ä”þáÂ_Ο·&öQƒ *ƒ3Úœ“Ťã÷Æà%gàë… Á°)óéˆ`u<çÛƒ£ÏÿxžVë…³ 0àš¥ ZòµÐ¼*'Ó^¯ÔvÑÆ¯öÓJ2£ëK°D–ü¼%Fx* ›ŸË‹Çßö’Â0Ž›0~ÂøŠðÄ%n<Â‘ì² ž Š˜ÿň18!GË2v1Z­ïüÛc;†Yƒ&Òï1K…À;øÕáõ@D .±Þó§tÏæ¡s| ÌúÇ‹üš B3·"ï¤c KùÇ#Žò32âSy¥T‰MŠVVÉÜxMÞyL¡áI˦û@L6|DWÁá!Ç”3¥/¦«Ì¢”Ûa «”PÒ«Ñ}ÚEÁ®«€™"hTèb­–Š0I™a?ßllåùFä"µà¦€ˆA(5\hPQI¯£"B“d3hÀØ"ØlÙÀ%•iTxQƒ)Ý_–ýa,êžRÑô=ý?Ÿª´a"† ⋃6(áT­™ü¨†ß£S΄SÙ59v’Æ?ÿ—}«Mmª w%[¤ ñÉ£mÒü»<§  ’‡˜!D:¢Ü(gsïbc[#›ÍI•TÅïÙb™¥Ôš>u£6ô g­fô ä;$oƒ²b;ìÖ4L‡·ee-T÷O¬{ª ¯?çSõp€LT1+â;r*o¨ôÅœ˜it³0©¡ñ¯ß"Ñ ¸,>ßw@¢Æ+$’-‚ØUÀÄð'Z›ÀoV5ZÁmb…¼¢\/uÈÀ\l#)f¬á†ÅÀvrVÉO6‹`ÎÖÊNt ûÿ„û­ŸÔÉfO¦`’›0-'+ç)µØ*;cÊ HP® ÞdwM?$K8~í¥äº€ØÇ|äàe5IKÀÛa@@|ŽFNSóèWüöAvÈ?ÜÔƒ×`=çΜ÷‹×6»ñŠkí2ÿ§¿ÃËȧF©¦3;>&›î¼ä•Sˆt¤†—áƒS­Ð¹æ^$õžÖë|'|•ÿò%LD>?¥Ã)\Ï r BIØ•êßµîzkÎoGÞVòZÀ ÔLb2µž,¾(ìî N2©åŽWR:E¨™˜WÆXcØ™lÊwTÔ­ÿ' ²ÕLx‹bÉ ü˜„ˆWÞí ‰'†Î<›„» ¨”Ãf@¥WÒ(::X9ˆCK†=ÌÖÃõë˼u|A°AØìhƒÝÊh’läGò3‘Çh‹‘3=ˆ­9é5õ:†Î¿;ÖmÞáoZç?"‚ãâ’«”d°;=#ð /ŽcÓ Xˆ,œ¥Ó˜ë4À8tñ Ø I²ü[&Š`ÆyЈ€‘šy?äåÃ+HÂ~x\á-(ðw­³Ë‚Cீ!|2@Gášj>1‹×˜Å;°‡h3³ø¬³ð.õa‚[Å”š8PÄß:´ûågÒ hŽG1¨sÏ÷Šio¬ +äcªo àc^71öî[cŸ‰Ñ"a÷'ÎþúÖðy^Ÿ¤‹Úˆ2uö&£¯ž•×K™ý´ˆžOœ…¡q¶œ‹ëív1©.°Ã¢rqÑVuÀ„¤e0¤¢RhXn{æx4‹®Š&€ V]Î6šó¤>Tà-ú»ir/¿¹÷ã`ü4¦þ1Ï®„EËËÓÀɶ‚2Œ V¡54ò›0 €a/©wb€,ºò 5Gy‘aÁÈ™þźÁýøÉFɉX¯ö»j¸ £}r1$ãßIdþ0‰%ñGxƬÉh¥³ˆd,vl×ù”@ ¿Ú†®kxGCI#IÁbš314ŸCj@møM%þ&¹RÚxã«ðOg¶f+»Rg*e–ÒÂø³C@C!èI†¤×ë”zyÝk¼^º’Fé¥RÁ 5‹´°€MIÿÎ\;´ZûdJC€0©ßÄ#yßÏðO—ÜäŸ5¿æ?¿©Ž EµÇoÅ…tÑh+i\“L¤‚ª@²åIÍ*fÓÓðÙCú4Võ¤K¸ ž9|”=Á}–ùW̸„ˆô44Æì»k |c]¦Ÿ1L9Çmðê$_½qÆ4ÄA¹$;èMÞ‘ßGš¬ãî˜)v»Á¥íoQÂMrÉ{ÒØmIx Ùë·PãQ¹ˆôDZSãÝ)’3 ½"ù„)|(OìÒÝÄ‘•<ÍS0É¿ÊûÈ7’±QGͰÛ¯è.’*>´Ù€5vÉ—ÍõÐñ xR—cÜëéÀÉwÉËÇCÔËÅý[?"Þ) KòÁ|ºï2"å\”ËU\ן²0‰VêLáCõ6ÑU Ù#mh)1Æý–΂שѽ1ÙG„£-›>ñpx/ðѲšÍ’Í ƒ€“çY¸WËôJ`.æ™u¬* Üë¡–Vj‘ˆØüÏÿéçÿuЈõ™&‹ [ïð§2„ gÉÍëÎÜ%-lK°‘uêDƒìCžž¹®s¿cÒg&ÕË<¡ §Õ9 µ±…Óª•Ç  MqŸj|À&}uëc$çf^Wù]I?ô߃Y„rêì$¬E2?dLþ´E1JnH{Ãc°dŠÈèð¶Ø@A¶Ñÿ¡ê[•~ ~Sô› 6"+ Ø&ºZ£ T8¶§>n­ä{º»•|I…#K_r»8‰èÌ›«#\G_f~‰SÄÚûªØ{®øø,FÜ X¨¨Ýqž4#·D‹¯uwà¨è4aõÔè®^3ó… f}®þã,^%Zz1†X’¦+3~Z¡ZÜ,ØÇÀc|§€Ä¼J„Íè`™ÙUérWzV$NØ-ß*Ù&ü·›íð„#÷ë)]Зu³ù”2óXÛô¹OïÈââäü–¯3UdA¹Ò#¹®Gò¹X[`:©-½=!úo™ ÅñܵdávØùeÞz=j£¬|•†BPý[ÄYe*\IYôÛÄÞ´<çÈJBfð&°ù$üûzäïŠ7¤ô0…puWaM‡:zõßµħóêÙ’úìœêð·ùWÄìÏc5UÔÁ–Zå)+ØÒ6$l·.¬ŒiW°qeVLü>0\õà1šÔ©˜¡Ó3óR°¬B…Ä¿¸¤Z—ÊO23§‰2a±Î02¹}UƒâDÒ*Õž0¸Þ'ÀÁíŠ6˜é:ËV’þþ>Ô\æ‰xøéc™= ÔU?Gfz¸£Z+œòùëlKðôõ,—CÿÞI jg’A<:"ª}•ÃCú/ÓêdLªB± ™Å¸.;H!McU¦ ùÏQ¶:µOp¥FÞÙðè<¯ƒO Éóám0ÇÈ„ÜìÞ)Ķ ?lhƒ;¾Ë ÊÆxHohL›l|cqÓô÷ž¢“ÆÞðī;ý\™ï]k&Þ4¹“UZJËî½TtƒäŽŒ·Iî{R`"%w‚ãÉ N{–͸*jßV!e*Š^}N$ùÑ¢ŽY™U‹ö¢ £0\¡XÞ„—6לq-ŸS£­.ﻑ${hV\þnúÄó<7ú¥'…,ËJäN6{ƒòOª Wý™™Óü„ô”2¶½13q9ñHè‘­¢o’lßX¬¶é¥Ä&¼~ý²ÏèöèßTÝB:Ù´XY5á—mC†13}¶étkÛ–‚‰ÝìV ~¥®Q:¡@¶"µx. m«2âvD¸¼'¨l$£¦¨ˆÅ;Õ¦¤ñg»å‡E¢Xµ%áÉ“¿¤³$½ó$6“Øc£9ý¦ˆÞ}'Þ‰æÞõ2QæM0>_i|9ÆÓ§@_즕;èKëDZjç§&r9Sx|àÞº4–/×¶Ã'»ÃèI#ÝÇ @¹±Gþ&“+èæ1(ãÜþv'…Öt)²Û¼/á}|9 ŒA|¹<|g©wÐÖ® ×ÜQúi?ËÓïBZr+¬¾ÁöêY¬m &ŒÄ̬S³wUµŒû´æÖ9ºó¢êžI£(»\ ÓR$—tãäVÒ«™»×àt­²º×.;ØE¬/}ÛÖŽ¤–›G·í¡ƒÅÎñ©[È…ý¹à‰Ü![ÿ÷3“žæ‚èï”yîÖH›4ߤ³ÅÇž K§ÛYj÷cžS*´0Ó·¹å–Û>‚2øbAÖ_æÙ1½×rͤ,è¤ã˜fåŠo7I¯‹s›®¯ªÁÒc8fؤ“æXñ©Î|=•¡@t^düúãì¿ „ûm²®ÝIA¨^t¯‹ø‚²ÛË•^"núX«¿ÝMrÛæÃ\›ò¾2W¾×NÌTĤ!ãÖ÷zöÅ“çµÃò4:öj™7|5.q¢m€†ùʼnÄYC.ôçïy`jÃh±y>cØÛ¹À7ù¦®¯ˆ=ƺ¥;)¿–ˆÁ×aÁý Šƒ›$kfk°4͸}À¬+fó%¦Ùêg•-LL¦Ö¡Wµb"4ÉM¡7)·ú˜ÑWÓ/ M„ s³×ƒ– Î…9«ë)žÞÏ_a¾2®Ér«Iy›,/ø~ÐTû¹0™k)rÑVkŽ*ÜIÙýzáüÍ»Aßì^ÛQE›>㤨êͽš\B.VJ>5mH‡è- ׂ²ý=$?¥éöTu*0Wý@î{bæ&{:¥—º€”JPÊo‡‡p»¾€˜å3ÍIüƒQ̶ý1áú{ê{¨³Ll.â>ûàÇf~ZÂznä}O_1p~ÁöæS*»Ç¶‡ü}{‡“šcÒìªR±Å—P$3!^Þ;ñÈÂ8½¸ ¾YPõò½!]ÜO;L%jþ]º¸3A`çÅvƒ7nƒÉã±ZâŒ<:ŸM®w#'/y™wì•)Al#d[Þj¾@Dá@¼+þÖ+sØ6sEôܱ¢Jé”fwkë6ïGð}tËLÍäoßUżg=3Ç#—5ôÿÑ\[0ÃGdsOÁ!Äy9×’M½-Ö8óžµ ¶`VÖÎÈfïëëˆ]$z¹ÛYc™‹0+£›,·°ÝÜç!”Ay¡4úï mšpF žÁó*ÝC‡ÍCñ£d¼™Sοú2ÿX/Ý[;ÐØ)þš »¶?'Ý\ŽUT»ž´~oÓ>¸:£73t¬:ò»ëj|NÞïÀôÒŒGÑþ$)ÇàöjѦB÷Ž@ðOŒËl§µ§ÀƵ]|˜ÓÛ ÛºOš x±þ¼ß†|}ôÄïŽ2œk•Ϭþœg¹M5ÛQc±–¯£LÊé‚rb ú2ÄúÖºÔ®±_ U_r¯3!³éEùTQÐ<ÝÀAPÃ&U´ö‹neüs¢ Ê×,TjKÄïz$á2BzÇ[‰£Is¤•x›ÛtÚyÅ{|øÜ¶i޾éxØðÖµm§ìR*ÊÓ¯+КÀ¥BK’Çs`ŽÈJ¹|>êÈ#·‚ÀLpüÔ5Áˆ¶åXA\L`¦Ðþ÷ܨ7À¾kzƒÏ¹ÍÀ¢Ê©ä½þÐIƒ¦ñ$Âö8÷lGĦ4gÒÀí;wŸŒEÃo|j3Å/<øÜ¿éÞ¡xø)êZ­skíJ £ö{p»ÑŒ”k•I‰Ü…â}JMzœ7È´Ñ46¦m„Ëì©3jz%Æm:J¶g1"7Á—rj[žŽÀõ_· NKþ™qªK)5«ˆKmßÈóO®ŽJLß}g.ëüÃЃFC»Ó©z¡%`Äô…ª üó6{ݪ¶>†•À@­‰¶9ÅïÂtèÑÿ\Õ‘)‹b7dýUº„öŸþÞP‘ü£?}.ûdÛZI®F@†ë½ß\JûõÐg«;ôpIhöØA‡øA™òáÍ^Øk¾öÊ‘7§ìe$TÏôšÄ‚ÉhŸÅ¶V`›©à1z&׌Â>_Ì”zM¾E%"è}°‘LÀ’‰âšÎûíƒÿ¸ÉIendstream endobj 325 0 obj << /Filter /FlateDecode /Length 7027 >> stream xœÅ][o%¹q~—ƒ<äyñQ0:æµI&ðƒí8±w0;A4’fFÞ#i,Íììø×§ªÈfW±É–4RØÀö´Ø¼ëòÕ…<>V{}¬ðå¿ç×GêøÝÑŸ4½=.ÿ9¿>þù룟|cÓ±Öûä½9~ýö(¢ƒÿë½ öøõõÑvÿríÞ(ïwŸNNÕÞ§ƒßÝÀ 1ÆváqŠ1¨¸{ÏZ\Âk«&«4>uÚí£ö»ø6)åÂî k¥ÔäJwS„Qøëk|¶Jéd©?] 8âòš}yE.j»;Ï#:xä}ÜžœšiŸâvËD¨ç4i•vlRtÁìîq] :v»ýòú¿^ÿÎiA:÷I ßë  Ø¯±µMÚÝà3dR:©cóéÞONÏŸ¾»¼¹¼;ñjï’ ®þryât`ÌøÔ Ïzw¸º¹„V»³»üÎÅ´»¾¥–f~qy¸?éNÔĽó`¯ðãi¯”¡=ÔiRÎå=T*ù)Ø´9uj‚¿9"SHÎÆ¸ûÛD¥¼ÆýBFüR½.ü#~è÷§ ýi=A—»«{Ñ÷+Ä0å]Ìã_½á|âÿ`³¼ºÅ?LJÙ8!‘q’JØaÜV£€ oó[£Üzy¥ÃËe6H®S«Ì~²Óñ)òŽ›t¦Ó‡ü tR^nà®P˜ˆ^;žÀpÔ:z›ø4 £µÄ[èÄx„o[2Á" ð2r8¼œ&g‡Í*¯5¨É·=Ÿ7RôRÞ`þBkåctbŸh$—l4|¤õS¦&þñ%wA%|ìt#þõ­l‚õ7¸=1…×ï>KYÂ^¡UVu÷ÙÈ¥ÖrÓ¡?x—šé̋כ@t‹/Sç } k bK>ˆn>2‰¹%Ù´Àc:ùY9oó/ã·4Z1"v~/¹[ØÑ_Iq¤« êŽä¯Ð$ËŸ™4oòG“× 4wšÑ²ÁöX`|9XühÐZÑé€[æˆb4Í^".-™&¢W0ð/)/7\HÞ2ò]–ÙÀöýŒvÎ8!ƒ™S-Ȧ›„²¼Ìc=UeCýß-²Œ¦+À4~Y1ïý‚z¼møœíçHËìÑbz°.a÷ûÑÑÎÂ<ÁÈ€`Ât¢ÊÚ ‰ Û,t#±ü]0öM•ÉýÙe"*k[Õˆ:#d SÔ*O*ÆSj5 ‰ {k¦Yìšœh«Íóln!os%§½)P$j.É|ч!Í6Åob1>ˆlTfÞ™™òßÏûcÓh’P|”Slí€4>Ó˜é&MãÚ¾òëíb$¡´ÆÁ{IžÛ‚Qn3˜Šœõ×»ŒÓ¸8vRñ0A½à‚4áwyV>:n9o—·þ)ŸÊ÷ÈÀ°4×Pûž¬ Ë‚]K¬ñˆ¨qGæQ2Íd€s;C-c‡7¹ÞãÞlX¡¶0&U_å©"®Ú²Ø´6íMTöR y½nD!S•´Nt³@JÅ%PÅÈD~RgžCúÁ†Áó¸ôH",fcôp]ˆE7ì[¡Â¹~¨dòüIvÓè:>å¼Hi&f–R—2M¥Í)Æ óùò²Fyè#ÖóƒpÞ½çÂ#Í‘:EAº7EHásP&S]ç­AàפžÅ~i0ãÁïO¼#'O°ØU¨&¹•Ê™lp ·ƒ›¸ÆÓ”@ýýæèõ?üa÷ò.Áj‚‰N9k‘3õÞƒ:»¹Èÿ@Þ¸¹½9-ÞR1PKаÓ÷-u1ÎâÁ¦Pj?,XºÝŸçÄ_ÿh`ÛVê!ãZ䚉xAL`e‰˜béæo†è83‚ò¦"‡/¹Ch:D8=°p· ÑbíÖšµèƒMƒkÆgÜ7.¨Ô:§šWœ7p„lit$z•e2Ý!gn~%€Û ¦i.2‰@:Z½DÊ×bìÆÎÜÅÚiæìIKª´ÉÞxÝ€ï‰íôÌ–Hko«ÓŸ!;Åàcn`[5ÖŒ|aµ…W{Š_Só Ô kq3øRØï/Ët¥ëC=†¤³ÃY`üÇëròØL®…Z§°°Ï–SÈlƒ\ª` ¢ÙFXû,å÷%O½ð ×±NaO8ä݃U=¡0:4ò´¡èÈjv‹‘‡k@lËÑg{€>¦5°äŸ©a0eäÿJ\Ÿqz¬\}3ÈšMVÏÆÉ§Ö¾Zók–ÆÆ_˜>Å)Α‚7¤íiI5“² Ê$dvÛ“YÛϸb…ÐQ<9tÈ]¤$ùà6¿ž´Š:'ÌÇy"z(¯l ‘¤Ý/hHbÇGÉà×µ/QþP‰“$oK­\¸Åó¦6È3 ‘s4÷ˆÈá猾ü@p¿›éèF|wYfÛ1Hâ ÌeÒK ªôÖQ®™Y/ro¨Å.ó—ÈBœŸ¥çýŒB %æ¤ÎqµÂL~XåÜ·©‡•÷ZÖ(K…üœu(™ áF²¨÷-kó‰·A\ ÃM[±¢ºýk¯ oEŠòPÏ•Þ?­»éŠhTò+¥•r4¶ˆ*mºŠ`VVdÖÐrA0¢“º¤C#¢ÔM«'ò¼£ŒWõÀ©è £a¸ Xù5k^Ö<Ïf~_CKð§Åtab¨•ëòÑUwúŒzl3w×.Ì×ìF?ôºòsPu†¿¸«a-Ƨ&ÓÔM4Qî$«1Z2fmI«MûT‰:šwÙÑŒZJÀZõIÈüáÄ “"!Èç‹+:Ê‹°Oט8÷Ràmáõ¬ö\ߊû0œâ9‰€ö”§%_}mV©è%Ä}ÿØØÆšÖø=ŽŸtL0êåÕ›O°ZO"háä.»ÇpT0{ÓÕnÜtRð íOÉ?óàQ2¨IrÕwäšÜKÕJmj2«lcÏw«˜¥ ²Aò“nÊŒÝ'àJã” "›ïLV*ó䞃7䦰Rî…û§_¯Nq¾hgdꊺŸ^Ò8ñ'Ù—ÍÌ\!©„w"ä6ˆÿÈP<›¦˜óAþ%+y¬&0 Z¢À™‹9ç ÀE;ŠÞγ§TÔGBÜoøë]îrR2G‘Û3SP”5FÄõ³¼œ¨A>§Ý_hç0Ì÷\1·‰Ç)Óüñ:™‰%­€pÏ„G$ù™]@;LmO"m »œõ»o¹u(ç ÿ‡T5»°Ž¡ã4á_RD¿|}ô»£\Hs7®¼iB|¥òœÏ½¶î؃ ¦”ßLlý¢rìòš ûÔAN÷ ´¥ËB&CiöuÌœôÓØ³û¸S9I°òtY6¥2°üG’°Žxš‡æýU;ù.7fòr¶à¥Aàob¿Ÿùn åÇBÏ&žñ…nÅúáZ¼¥Dm£g2‰Akq ~ꇯ’½:Ë_û4N‚tÂR~JÕ„"É9]•ÐÅή¥Û[SQd«¬Ï®"sx×Qxd"¤0Äng WÞ4R 60r“{Ã·Š‚FØ7Z²&tT_Þ«7CMÒ+°wدAr4déUFûj|+>–aiÜ®õ:¸æ½‰€p$ñl†õTÁ¦c kBi´»t/¢Ò¬ ¨rɘ)u±— “@ €°~F»´Eý¯rTsqÎáJ ‹, SxÕyÎPe›X­šEÌÂbÂ2¬3`±J®"Iº }܉bž»ÅÝ[R„Ÿ zkz>“WNÇN QÞ(öɣ䙿ØXø¶2cÑ.%‹ÊØ~97–V‰ÊhE„s½Z¼»6ƒÎ¨žÿÈ»l2w‚{7R‡”ÐuÏÌÏt]¬Ð§¨6NØœ0°ûàkýÀù Ë$®,VÖ4/¬å°Ò8!ŠÒq­žµ\cï_D³a@ «ŒÅ0û2ÿ¶šûÔú@­O­Þƒ0Ûú ÎJE ®ê-–…3-8é¶ l›À “ëg=•q—jhç/³¾¦Lšë*YB  ž2v® ×I–{ß°ÖT'®Ã+NÃå/… XMŽ×²7DVx2$ìN_€MP`ñŠ bä——u篨؛,G†y‹‡*¼È«Qÿ<¡t~’`©åL©)®–>.y(½ëv*­ÌFÌ0¿}ÖL¤m œFj-n“³aÙLz;­Êm9.Áfh!EÄó~MeDó w‘ºÀ©bOœZ‡gKi¬ NTÅdžROgf‘E8¢Šœ>éÕSÜ/æ„isà©ÉrÓœ1é4®‚ã4åŒQ¶¬Ô,´™¶r6¢µ0ZŠë8Paª~uúp6,û(ö=̼¹6TOŒ Ö×ÿ²MÿQÕÌMÛ ÐˆŠY>äZÎ…ȬÂu5*vº€3iݶ‚O‘.°9ÎD´ðõ\ÇSt;a^貤ۆ@ð.wu§T¥-ˆ`v×·Ô ®D zÚ J oļø™L‹Z•KpKð7žI7.kå 4kl«›ŒúÃ'1$­`³qˆòMœ¸Õñ€Žt y[M}4Ç`ÜÁîb#@ÍISŒ Ñ—v¹q¶°€­œíÙ3@ÌÞ±øfÌ0ÓD§·6 x°‰îWFx³ »s„sàI™k˪§|¼GÒ¿k`Gq¢Êâ”H–òzÅŠÿ¸“`b.ïUI9ü·„z?ùÆGËÔLÑ—ñÏþŽ@—ÂCj-ö{çÝ”z[ -\p½-öûÉúääÿñdÞÌIˆÉ*±Ùd¢‹½BìHÕ?Ä,ÒOýaQ郄Üvoíˆf€1– àý{>ËÊa„^Z¤Ë^q×TÙuËå¹€çLU Jò´ ÆZÝâJ¦(}_NW‹¢…œPwS§(×ä.â;2Ê«C=O"vÎ%ªçå=y7ì€ÍÃgÖDPÑTÛþ³:·UÂ=|¨Dª–~}Z%·Û•Ca9`ÒÛLŒ©1¶ØzÒþ« ü¼ÝJ l›ãñT7$AÄêˆV9ƒå°b6+—Ë ßùáš¾õY°¼Sƒ¡Òò€õ>BÎDÆëêÏ‹&oK!¸¡&â+Kù2¤jðƒLžÉà1·EB¹ŸÎTWÝ­ÏáÔr×^fñã;ñj†¬›56Q ÇZ‘’‡°©H{ñiBW¸FæÆ°ê¸Ày•a†‹~+µNÆQ±† ™µ¹ ’·þ-»LÏ•ìr×cÐþ#Œú–³j±žÀ¢Ñæ^7õÔøoÏ xc‰Ì”c51ù£¡  Ø Ét<¹N¾*ûY°e£Y§係#ö9/÷t«TÛà íßœÌaÿA wA>_¤@|mÐÊp“$È«—º¡a÷²_³°€â ]^&mêÑ—ƒÿÓK,*‚Ò±Fvü-W_%Úæ5‹ašO¦D™‡T\!prip¯ïTØ“–»(æxæçLƳRœ”—î$+WyݵlºDŒq•—b&¼!:ÙïÃÌd üÅùœEy<øäà/ÁL°ë vŒìx‰\2}9¬Ð¾’ÓxzA– ý_ìW `Id¿zYObKˆ /"üÆ`@=®…ùsÕ”ä4%ZS±ûÐ1Zf-ÏLnúFÕiEß®b¶W¹J ùØÏk¢kìˆß,ÚLúß-££w7ˇiÐå(_ 1ç ã*\ç¨äy7"•…Ælñ‘±¨<¹õåË/‹Rž •ÅpUÑrø{¾ÒÅÄ}‡CcQAÏ&â$ 1…–íT (åföð.ZÝ\ÉqjÁ†´Å ìÔô°BñÉ׉ð`)І⯯=ß)–Žc@£<)+åÇkïòC['qŸ»÷sTÃN¹áuôš9„ƒ/fšº6‚ úþJ…§ⵯÏ«jh…VaXr–ÅÛ¼ˆþÄ“°¼Cn8A‰”t¨«¬¯E‰™ÃxÒð¨å¨Òr$½3ıúö8tDh9ç2„„‘i#: ž×%Í,^]¼E–qZ{Sëʇuðz [à®n¨‡¸›kT.F3-Ðè–çÆ{¼C®B7£ßå8¶?9Oúï×…Éç ™@çÃù3Ë4„™Ù‹,<ú•«m*b—”Ï:e³ˆNЃ/80Y)¤,^Q×Öã¡­’í†e„^ ÉÝÍKØh^‰ÁÛ::Àe¤]¼Y’b"u†×ª€:óæ7­è´÷âí'·ÜÂ×fzžea1Kä¬\Î7y5X|úÏ'5VÖ)‡N2IJÕ|XÇÍf#×-Í­¤ü…0ª<°§Ø ަâA3E¤Šíèër• q ؘôœàJx§ýйŸÍÕ´€ æÿ‡«=I¯¹ZxÔrS[=ªi³”Ã[zÚ͇%ñÁçS%¬&kñ¹Z$ýÍ;æG°ˆÓaÉÒ /+ÜŠP×þGßù8~²"öôøðì§¶%ôähn:B§ Š/qà°ž{1Aßͱ‚°QÑŠ-bsZêƒÉ’ù„73ÔÍ¥J˸£Èá¥PU2FÞ¸L¸ÈkÔæÈöà>£­Kx÷³'?p¨šÓ ½ÓàH­—¸æsã4© ³(´’Û&„½`ýQÓ¾ÊШÄ+sëúFÑ7KSã›°®xÇÑ17î¯ôkëÆ>²·Ÿ¸|6ž¼ä˜¤á¿aÖü/¡× ž!™¬ìzë¸Á œ©Hûhš_&¯aµßO!È®)ïHYnº&Hd£æÚÊõ]«#ya˜j¿ê ã)ÆÙŽ£Ò‘G»í‹ãü±d䪲¶—©—NĆ!ÍôÂ…åˆX&POb?¦ÙjÉÓˆÄ0Œz8Ô$‘SôD(ëë[JŒâÔªH¬SUK ¨H…[ãë›–-d#ìö¦¿œ n¶(#úöÀÆ\(»å k¥åèyàÚÂg¡ž .¸éxà>Z÷¸Çé€w ZV¸ÝòÀyÌ…Ü\íÚ+Í‘N›×†¯b³x½W§à××RÚÌf‚_åë9ĽøRÓ_Š-Z‰3F§ÿxÇÅüKž-¼n™xÿBÇñÍíí-…[U²$Ó _Iµ¾I¨…9ÀfÄ[o‚;7õ¨%»x££œ£ïœœ¥C«»iEoF‚}1o\;ø?¾R™¾ Û1È™s¦¿à¼%2±Ú·á~x‹áþa°ˆ?D5ã¢îuu¹¦e6ÉeÕ>S×Oô,|kï9-:ý¶Þßl¼ÍD0zû‘yq£ÓÆEe©ª²d gã¬Òˆ*l¥Ö[º;šÒ°rŠÇþÃFÚÆºÿ3Ì¡þL³{Ö.…’7«Ž½¨y¾%Î!æ_Jä#Ó)ø&Œð´Ì 3Á›Ç×î ƒ ͱøÒ'/ÄôoYßëC“ÙEz÷CãY7Ø–'Wt'À¦O®èƦTÑmRxTEwÂÉ,¾Ù<Ú\l䆯ªôÏfàN>£j¯Ë,nûàÀøj‰¯:8õÅc.¨âvÍk/þŒ*,¢ü˜³’ ¦^Ø@áh6¡•8†—€Ÿ/Xbt°œï»ü9ˆC5yÙoê†âOmÈ´á–‡Bòej6kádðómTVôk7®"òóÅ&p›†<žx½eo©t4¿ÎÚ1· ¯9`—–ÑîNôsà+å×’”ÙÜÖÉ|ÿ"sÜ_‘;.öð8úÎ.›Î3‘^ä¶gBsO÷²¦7ÃVe b×ÖÒsÍ@Mâê¦ênÅÏÇÒZÙ‘r{LdùégE4ƒ*•Šö~âaÉó°-Š!6ˆS ? ~`p­Y ¼*ó”äûĦ°¶÷y2x Js¿l™¢¼”ËÓÑQ³ûÓ¶kØ^űºj O¥¶˜ª¹­5º½tY2½sãŸ÷iJWWÞ¡\éù‚öÝáúäõŸzùEïŒüŠéÑn­Tß½töÚ§õ…ªîÝ?ùö‡ï»W졯Ó£zF”gys¸¾ìM“2°‘Ïsó^ýfº×—Ü‹Ý3uÖϤôr ‹Týòþ¢‰<Ðîû;¼ˆÐQÚu¦×».±¬ßGoªÖ¦() ȯÎ2xÑzx±“Ä&x[´ûIë1P[2ŠøëF뻂X·C_¨ŠÐcNX4W ‚)Ý^ …“‰*H¿h|<uI2ûŒ/'•fo']~Äçݲ¼ö}µ¿Îdž:cöº=ôVh@"ys+ 9p;Å¢à¥=±bè¼ù(DÆ®÷¹Ï­Š2Êùß+JŒñ2ÏÌI>8t¢±YMÞò;¹zŠ$ciåñç#uü¯ gˆ‚9Ö!é½?¾> Ü¼Èòâpôí“ëÁQô"ýW»Rú·>lZü ’Mµ«5yϛʣ£Ù‡CÁÞM foŒöøã‡ó›§O+¿=õÀ¦¿ÃéÙü»¼åÄ›²Ç¨êħìéǶž3e¬ÑJÍ”¿,jIÜ\À5Àéªþ 7° hT µŸ3»¨ðÇTäì¶îŒnÜ|çå’G¤è¸›„\½Ž h¾îš6«éGnþgmЄŽJ€kûpÝ÷<.ª.º”Ñ¢M$’mê]4?ÎB°qY{Ö,–/|~o~!¤Û¦£ŸæßsÃßIðÍ…i1+ó›b ‰ïð€´iCfû¢çèÙ|aóÖ½³EAfíbjÒC?,mò>úñà\Âôæø÷¶uÃô0oyÙƒFŸÕ‹ÍÄkx[] Ñ0aö-ê ‡… ¯¸}îú¿ç=óÙ[Àú0-?Q4Eä$•N<.1ÜØÉ®Ïÿ¸–@/Ì7XYÒ~åRè0£ ÅNT¬4?½¯Oëì&»‰Ìùé¶>]Ô§Ëút¨Or¼1tŸãòòª>ÝÔ§·õé¼>}ìusÖŒ2Ñ!ÏO—õé®>ÝÔ§³ÎWõé{ÖK.ì~º<ž×¿’àãßwºü\ŸnëÓ¾>Ýw†¾è,à¢3Æ«e6ËËCçãûæÉ«ÿ}}z•3`U¨7Æ-~WŸîêÓe}:«O;½ë Ì*G¦2úàÛ ‘ïêÖ¾¯O÷ËÎÿtyT=ÎØ×—½'˜DW%,÷ǧCdºåzGä~wô¿þÆõËendstream endobj 326 0 obj << /Filter /FlateDecode /Length 5793 >> stream xœÍ\Ys$Çq~‡ù#&ôâÅN«îCa9‚4iʲ$ b©,ŽÝ!q,,©õƒ~»3ë̬î`°DJÁîBÖ••ÇW™ÙóÓFLr#ðßòßó›±yuòÓ‰L­›òŸó›Í§'¿ùÆÈ”S´VmN¯Nr¹ñ þ''áõæôæä»í›Ý^LB á}ÜžíĤ£!nï±=øÇ¤f#‚Qn{³KÔÁ긽D%„TqûíJJí #¬/záìö€ÄB:g´ÙžïöFèI†ˆ ãÔjò1´Ú ýn·W~r":[©Ñ06ð"ͯڸíÛ•a†¤5Ât1oÓ¦MÔAÁTÊ_ õu& Ê·2„’e—Nƒ¤¸’h×i‰•ÿMfIk >øºÖJO—òãÎxšÎyö©„QRo÷HmàÕúí_vŽZZ³JÍ^ôeq#ëÇõ×Ó?œha'­ÈÙéˆÖ´Û;ga~½ý<gŒÈÀÞí. H‡*‚¥”UíÄ%œ­…•˃c Y¶`*úíáaGØßö¶ŠAùh¯*ËÝüXÊ<õTpc(ùÆÆ¸=Üì@Æ`’*>™öš07¾¯;ßK3ãdf@™ÊÚ² 1x k$jqÙE÷ŽÐ¼¥4°U%¬Þ.pÏiç[*ÜŸÑ— úBï–*W 4èÓßÛÄ )’n"u41/?Há•Í£4ÿœÅ”«Æõ ^yOŽíé¬ï‰‘Ÿê(ŒWÞLeå±Ë · i^!Üö%Ó2®Ã~©o®F}‹­b‚cËœ£i¥áÂÁwѹÌT´Ž‰%‘ç ¶¦‰·Ã:³ª…Iùªi÷dÞwy*Ø–øi# g ÂN¹w{Aåý„åþ9 E0äëÊ…¸d$Ò>ò‰dKCÕ}åÔ‹ï3ã=,…ê}Q½Ä‰¬yÖg†¼ê}‹K ‹ü·’6PµÃóS3aOmÿ¹CI±~pe¯È‚™¢.»\æW§':Éøþ}]¶´h9ãÆÁ‘É ³ßV} dü÷:LÁð‘ÁlË6äO'A›É;µ1ÁÊɸ’y#£ï7÷—›¿lnέ”†&0mA³ÉC€`v‹gáóì§;)#ˆpöÇJ"¨™© ÐÅ»Í÷Û»û‹ÃíÊDú³„Ƥ0‘±t"oѡڬ%Û?ïN(‹ñ“õ"1LšZ‚øLèÞC¢¼í”d´äwcØPÊïwHš8µÄ+£˜3=òÊNÎ{g7¿+þÿÿ¸÷õ‰ ÆOˬb8®›@\eh-×'^ j-å$SéEžÒ±j ¥’^OÁRªÚB©À±á3¡ª-”ÊD<"JU[(•sàbÙXµ…R û&œ TOI\œ²&q €Ý6°TYàÐç‚ÄG0#v›ž•Ä…û­L/ Ã˜v/M+¤6ÔX º`-BiqRü>Õ•}ë-Œ*؈#T¥…RÕñ;ñ=Ù‘ô/:Xˆm,ü¸¾»}µÙo·— bÊÀ¼8œ=^&¨89 #‚ép|Ùâ–n¯ï’±ƒe}…{ €ÌÀ9²u›j™€ Pø±s5¬q«ˆ†”0¨ÚD;ÐGl °÷¯ø¨"0XÅÅ“kgR©–ΤŸo£"çûHÝ$´Š¤‚-ù+0ÿ"©üºš:-ZÙèl°Ïß±G]B¥h‹.#ðMœŸ|qÆN zþ­Åù Ô6á4Ðúâk ¾tVõæ5p¡„QÄ6@{Í3`‡Ö[P›>€If»O‘ß¡G[D¥h«Î# »È[SF#Ö#BÛ[Š8¼Ç zÙh@6àÕ‚£j¯0­r€!!ðUaKÏ{Ôà…€3h#8Zõ)ò+v(K¨¯+¬ýùÒÆ>!ÎZPI“ $fƒþX¯“™ÿòpuµSh§\î/oÏ/¹¥ý8,ó”™ã‚“h¸K¡NðM«O.ñ.3-bKÛ°¥v[ÊDlùpv{ñËáüõ ¢„Õy°*OJÿÏ€'@ÛGÑ…ûh’]‚'çT­…`-#Ó½—RÕJ¥ÁXÃæ Um¡T¢¤¶µP*‡’@‰J¥  KšT[Õ¸k‡C“:ê„*ž@“ …¤hRq4©£Õè×»Y«-Ô¯/PPh¡™ÇnTÍú7*âýÇñ;ÕG I LõJ~šôÿ4Ù¸õhrÎG+ÐD¬œ\;“Jµt&ý|Õ3Ñ互.¡I#p— ÖÅò…Q:–¾v•̾¼¯æTúÚA[A?M"n€£_@“ |†}À¤RWÊ0 `#:ëÀ$Ü/E4Ë`æ "¨U0i4ÂMKYÙZ24%3T°h´VSÚV“F=Ûß¡›"½Ëk…y½!áÀÞ;ãÄ>|E’}þJÑV\Fà;H¨ÄXŒÞÓ›DoI@ÐXŸ¯ 'Â;Ü(A’(guŠð®÷/oãõ†{ï ûøFöTжä2ßBÞõd"•ÖÞ’` ¼ƒUR &£=šø$ ü“ïO•†!#´÷ózK‚}„ ûIöUTŠºÊ:ßGƒ’ŸU-è#ÈÉ$Aoþ¡ä“6º@É÷L‚‡¶µì Çy]§h1 "×äaÊ’ÒÔ(öѶ ¿Uü·%„ú›o$Xh²‹±$[Ãö9>ï¤Ç4F)¿Á(ªÌ ªÒzƾãրŦ"ÓïxÖ‡¤hê†dua½&ew€ZÒ“E½16d&Yò…$ÖX&ÒÐÔI_ÍòÙ_éãé®JÿÙ˜Ûà¹Ö!ãÕ2,Ç“1މ—Ä×R )#…Ö1g¼à´y:ã:gŽ0œnëƒ2OxÅånk³>–ÖDõñÌS!?ÜòÜ+IÁ¤´ƈl`Ì5AK˜ð бD®ÀmWXLJjK=0IÉYHÎmLŸ€s“ qHóÐj„QÊ‹‚æ#R!*¦ÛÀi´¬Í5OÍö-]᳌&+µ`} ‚€4¬zAèË89™t–I-°œsZw…”<‹ËTø2ý˜€ëå8|Œ‘&·x’¾01ç\|N..Íé*çÒIÒC¥ƒ#úš¨SÏW Ó é 1õ$`Á‰b>á’‘lœQ×hîþçäô×ßmÝ´kLQ»}L醸ý#¢a ®® îæ61„ÍÝEK´û´Ø2Fa ÃÈ|Æ.b£P¤1îPáàþgxw…Ï ˜å¶§»€ÑTµ½ËýDTELpí;vÓ»ýHà~èk 8•—äð1$­ÒXû~)`E‚KìSp'’úcs‹à 5¬]Š’üûº0íEÖ(±ž.V2PEO' ÷-|o‰âÍäï1·ú¸P‚RÔƒå? … ˆU)Ë·’ÙÝG§_ œÜ3Ù$ýº½ŠEô=ÚO“  Œ—ï­èE«•Lo@´†ºä »Íý?æ1°Âj(fHà1­_Â3•³ªº€ŸQÙÁ£rŸŸý¡ÓÚ3oôfͱ4=±Y¦,]ùUnE$ö†­ŠX¦yqX1£Ìd6³xxF“¶'«ÍÌX™èUÇ-++χ…ƒá¸à§ÝP3¶P4EÌ80;t°©!T‡þPv“K¦x}Uª÷Uô,¢åiCïºOá»ÐÏK¤è,Ù@Àe'Y8åM*bY…€½iQnÑ3•ÄÒÁ^¶^ïr#8µ’ƳÝryÕCî©ÐÜó³êI²ï‚k5Uh%'0Þ•ÑoНQzÍÇäq*ñïpƦUncžÜÆUlL·CŸ܈£ nä¨%±LÑ}"Á\³¹q */MJµÎq…¨Í«ö€.œk¦õZ@¶×4î&y«àß¹•GË0J9rTrZ õšr`ÅPH=0Ƨ›ñxqhÅiylÐ_²ëT¯fbø|¸"ÈdÐ&ØK «ñˆºÝuu#7ÚEÙpír™–`a™J-É.f›¬ÑDx­t¨ÎÖ“ýI¸r:›ù5Õ.®§é„Ìé±MU‡Üô5¨4ÞØ…ë&}Ö ïm0M=8Á=ÕÍàðhù`Œ@aMà1›ûT@HΔ;Ñ#…€T$™iùjÉýéþ˜/rUÞÑrd—UîùI-f×é¥ë|ÈÛT¹Æ²øèüÌG¤ƒYžUœ<– à‡*^d¡Ìu2Õ${?ÜÍ»è)(o¾©.–âÄ@Ç”´êä¡xw ZN¾ßðÊèÑs…m–õe2p“åUí<ò€ÔÛ¯¸ô%Ø­ݹÅ ¥eÂþàÛ=Þk`‡Öl¿!$gé¦RÞç·Ÿ¿\.Í&¦˜´çˆõû¹²zGý2—‚xûy¹v:TÔÖÌm 7¹Uó>H8ö<š1 ðHNê¹B^ÐhMЪÊö£*3R˜ñ";âM{›êðiˆÑUE³^®9©ÌÕ…r= 6.ýœÉ~>_fƒÞ*ç€5jÉlÓXŸk:X›¸¨Ë»UßñÌtS5~Ò¯Cº0†÷^å¹ÐS­X³*ÈÍI8~,Á6ÒåÍi¬ â|;j’¡]äÁÍY7›âì$Ö¿ê –<2zÂsr \eùÛútçã‰TtÓïŒþØÂ[ü±#‘w…RÎ*æ³xþ- Q¾Y¥—¥µÅ_×Ñu)bÙ‘ãÏ3{&´1"FŽž—]–¸¦Ü›~/§†öE £ì+²nšx4TJc¢UêS’ãšü!™S5…"ÿ—£n³H&nœ«ÙÔÖ^Oj¼¹c› àPsOâˆi9qýs˜•¨çC™H²ÈöüÓˆ4¸9ñ)0·v9YýdÕv~0% påUÇEG´Œ|@“–)Çÿ2»ä‘M.a•eÅE)0«¡ià%?[ `º'ZÂàø]›®Iáˆß%ég.éÃ#\ÐÃ¥fÏs9°|É‹ ñ  ³|Ø._ñVÀãê—i׳$Eá ÷ŠÄË­†…ö$¡Ø>¨¢˜q¾<@k6}NDÙ™>HœÇˆBˆ~D‹$a²üÍæˆ•sÍœáÅÏÞgônÃG›Ã¹åý¹é<'Çõ½´ÅJ†òr#~¿÷\Œ¾ðÉç3c£­ŽÚš„k‘Ña#lV"ÇÓ°_ÐÇ FRBÌö†vÅžÑR¨î1™šÃÓ³ÓÝ¿)‰‰¨–Œ}qÎÔ±±Ø~–BàùFSÖ¨óô:z"–´Tå­óDàz\Ck‰×:ú-fu2ÉÏ]æd xˆÕ©ï¯X¶æcºˆiͺ6.òè710ŽÆ*46Û/ |Ò›äUb Éýý˜ØÈÕ‘+ürÆ•‹ýXx§_ÄaTŽ~¥8—yˆoLdkU/ázv ÇS”à —% ž HÇK6Œ –®ñ®T%ÆÉ:_ôryžøÓ3÷ÏÍWš/ ŒlnEù¹ïÊŠ±dÊ”.8TŠl\9|–nyM\ëCK ®fú9ó¬ÉôEÔ¦ìø ·V¿~žiœ@ -søÀHÝVnøu)çUˆŽ§ Éî^RMÓ÷}žoCÞàõŠæ/…¸½üð¸Ä³îFÛ„IôŸÁi% y1Ëͱj'¤x=mž“‹ÆåÍsÑéJ‰°NXà§Î$5ÿ™­ >0i«ñ ,ãùnrJº{²aXlp‚O@êÏ'’þ4)i¬: ~ÜÝ.3ׯçA«vÙa׎69ÁÏ(䪓¥H¾ž9ë|¸ç'±×V¦­Guçìfˈ36ÃÙkp€+ö—ÿ‰uÖé1,¥œJ,Z¿5'žËÙœëÊ,=ÿ‘…òó” M‚\RUÔ‘¢»Åßiy‘“}$W…²]ë"Oµ\fFc–ÑVXKŽ~ø?zÍ ]§iÌFö öù×ð‹íVF÷vG]Ô\/°k=êâò=,í@x=žÒDˆ)bfl‘ãtBñû<ÁëZ{$gYÙ²UN¿IcÓÄGÐE"‘ë®ñI0°ð1˜ˆê“x&ÑØ¤O¤ònEýnób0ÔgÃÂ¥„Š8¿Eñ£'!dºZRÊÅùVñ⾎†Úˆô?¢ ¦¼/â¡òmø¡"2ˆà]ÖB7×t‚‹üËÖ ¬Ì ]žµ¶•Àß’ø9¦tø]«±D®jÌ#Ç“#`Äa¢Rú?#–å(•¹÷«a/µ#h#Qf¬Ø±üuûð‚/Üá\þ™ë6“R.6»@c$ÝÃQg:ËlJ׊¯Ïùöq#2òòŽ"u0ø7Ÿ@£ÏÌ*Í"f?Á•ƒW¥‰ŸE¬·cáh‰Pç«­6B­Ý«÷ºD—oõ¤ü.ó–ϽÕ3Þ¥ æÐá™T`dXQ9BÜ rþŠô' ­–ÚxgQ¯D*’`ÅT ¹|Zú •Îò«kjýW×ÞŽ¦aQ 1ô˜ð¸?š—)ÌWGÂm·«óP~_F·ØK£\×=ç9#ê‘6æš|ùò*ìäXUCR@’· ¹Ã¯·âûãV~­Žü|Z´a0dg!³nùð„~““‘Ö\×eþdD.ò+!‡Eãce\,µrVŽå"ñë”0$¡Ø•–NvA•þ‡nöV3Ë$ÿ•“\Y/µù©œN©ªµ¯£. ¬.ë@n‹Îñ¶2ÛÔò1Çü4ÑÒ-îÁ$'¹è\(™•oÚ§‘ÿ¾Û[¥Ò§­ñ¬ýBÞc{êmßoÛã¯ÚÓËötמ.ÚÓ»ötµ0àãÂx/úºÞ,t9Ïkõ`v}:kO¯ÚÓeƧ’Õòø«ö÷Óöôûö4µ§‹…±ÚúxßïÒ%¤)rþ¦i‘Ý­ñmÛÖÍÂSßôý?Éa\/t¦‡Ñfþ·Ö¸ïK½Ëั/ÛÓWíéÛötµÈ¨Æï¿÷ÇÎܽñ)>/áËö÷»…óz÷ÄÒÈy G7ûº7+N=ÊÿصLìèBò×½ô›ßßrH:HÅuê†tJµy¬+Ò|×Zï—û½]\2Ojpy.×lÃ#œeÿûW­×·,jR[yæÙJ“¾ˆû{j"^ô©.–¹ôH†-ü®ú²wº|Fîô®\±-V‚GÊÆÝñû€R0½5›½ö¸äle·ØK?Åù§“ÿ ýzendstream endobj 327 0 obj << /Filter /FlateDecode /Length 4340 >> stream xœÝio·õ»Ú± Xëz7¼ ¦)Ü"@›Dß’Ö­­¥•¼’bHòÛûx ùÈy³+[ 4ù`ŠK>¾ûâ̼›±%Ÿ±ðþ÷øjÍÎ÷Þíñ8;Ëÿ_Íþr°÷é÷ÜÉçK¯µ˜œí¥=|fÅÌ2³4Âήö~ÜÿvΖÒnåþj¾`KØtf ÓŠ Í÷OÑìa™Ý̚˥Ù~~(?ß Ùë2{WϺ@ NË‚Û‰Ù²í³ºàßÿØã<üåf ®–Ji éHú¦®Çï @LèU™=¬Ûî<¥Üìÿ@B;©û–a­‚µ#±AÛ6eÛu³`Øö8ðõg’í—uÓ=ã¿ÈÃ~Ú¯¿D+~)+ë‚_ЂŸæ-Ç-Ë O,G¼;§ñúMQ§ –Kíð¬X¼X…,Ð…ÔYX!˜ÖKƒ·-ÑV¶a`š:MÎ\+1 Ë—]¦.`ó”]ª.ðZÖ*?;øvïàåûïëÂCiEšMÕËcÚ²7hAQ»/êÚA8‘mÙ4)¢@’ Ûʉ¹³EÌ”8D…«ÑEÃs`" ±V5ø”}Ÿ“J±lI,à•e/ëÚf8–d0’$É Z$7X$„|7uÛ™¥YÀ[job“{-I®¢µ™d’!MËaX‘ù šš˜BaØ6%3já;%³º­ZÔi]y‰V!÷]gß—Ù#Úë×X† ød"0îp²Ï-‡%VVBÈVMct;\§›S¶j(Ž,΄ :¸I¤ƒ­Þ èð 1a©#I¾­+פHNIù"›£3 Òé^ Ò™ŽwTT¡"2TO3‰!™QLÒu›kÜ'¥!¾:GNk€!÷™]ŠSÝ9Ö75–Ô!-©†¹Û)ÙHê ¹‡d.Œ®.‘©PqÛѪ§ ÍFòÌ"ô®ÜCSØø§çH¡ìï-ˆ£§Bhã¡(i4‹öñjNx2NòFÖ¬c*O ´Û5‚ÀŠ>È”ºô«VЬMMH—þ¶":þ[¡r›Ÿí6y÷®F4Û¸êéy:Úõyºž´•.»{¾LÔS²»,†­¥U"–äò2¾1šA"šæÇTРSu"üÓjƒäO‡Úf‰ºV¯z_†0X •q¬½wV+ “óór(jMÎÏ~ ‚BÅÎkʇL\¾}y—Ó÷í Î['RØð T¿í(´ºº&lzCÂÄ'½ÀNaG ã»HxU{0Má¸lé&@QuÀ›ÚÄǺƒ»&_‘Rüš½/³¨aÕv’Pî8{S>d•Y6Ý“ n‡ýt½A7â6OB0Í ’¿%Ma]Áž“$œ6О̮›Ê®+œ–“Û.c¥DÖw´>ý^qÜ(ák}º`Î'ógœ1k}`&ìü§âÁŒi«ä§áw½ä^'ÁXï•WgÇ™:±P0Æ…ªÃ¸òÒ‰È-˜5FIà0Ö‹)0ÀaRƒpó’»z¸·ÌèÄú|ÜI‚êÆôAž&Ì\bpY0RŒ­g¨ˆ€àRcÌkc¥Ëá+BH¨ ¦—©>*«nÓv@&éqùaÝüÕnÂ8oÎŽó'ô; 9“Òï? KSwDæ4L¯0v=ª‘Þ7®k«ÞŒð ’PÒ¹ÐH¬´ÕbáÞ΃šIÐ+i匥†iË„tªZ¸d±Œs8Wg¦Ôþ ËxwÉ“&K?;‘ÊDM^ g.$b"m–¨*CTú>5·cD´˹„c¯CýÌ,RX´ACL¶uÏŒ ¶.eöZ`Šét}J,"o%8 ÆÁ…†-Ö]d?HÐÂÒǰ yîRÌÉTv î’GÉe„#fÌúvÁ&é¹bÁ£È·éhÅüþ_`æ˜ذ ½ 3R$:ðÁqI¢¸ýÍÁÞw{éNe3} Óút £œgLº„ù»–ÃÞ 8× #+4S•F•¡”vNE¾µÿz…ºq-Í+üGgvƒ×AD(½ ÌKcuK4DW öG1”7ï%ª ¨MÚk³Ò7ŸCžƒd—©Ž¼y€Ì¾›ôÃ7Éã:Å îøÊ»†Ì0¢+8m¼ #Ñ©€Ù2ßycäHn£fDWŒ|÷Yž1!MnGgà±óâTs&Æ%„ôp„m6^×ëà¹A‡} œšë캅t¼ &‘ôàYñywÉ9k:Úºè‡DƒõÃ\g˜À¯{ H8m’Ê'\`’VÈ3c/= =I^/sO°#_…$Ç1ºÖìmƒF00ÁlŠýâ<gõ}“±…BD·€MhÈ ®dìa³Ÿ¹ØhÑ«&UAwÑM†Æ¾C/¤‰¹P.É’G—d¹†{¢tZwX7îÇ¿HC¶#¢g ‡/²upXâXÓ>ŸŠ˜R¦ãž4æô”â“õ_££ˆ¡ƒ³Îw‡õZM¨É ®'—ÜÖ²R%ÅT¬è^ŸVÓž(B^…'F`µ+þÅØ/¢yµñ3Ù†öÂ4ÆqÕ1ÊÌF‹½NÖÈ! sEÇA™úÛ¡ññ>Ñ`ãêÐq®gÚú Äœq2;^æ]³ ð2õÔ©Àù<*DÖí¾ÑŸÊñçø† Æ´F8Ñ(\§[²r³äñ5RŸ8’ÈGAÈ4Á­°Á Ú|9‡Ì©¹æ¼p’ò[Cúý¬4Š 2w©¡$÷Ê·µlWúæÔ™ëÈèEºXÏ-ê¿Íy,VÛîs>YkÝô°S×È9°‰àø­ Ž%¶ÁñKÌþ±S¹Kó6Ua¨û kœ©§%ãþU¼0lÖð"à;u×s^½âÄŠ©ÜnXŃë²0Ñ?æÎ: º[jÚqñ;ÔÛ.]¶WÈ]Ã\ûœîÇw‘„Åød;?çg±†Òg1ÄkÌ×?DÏo„hfû.#d ±ÅO¬=.\¸$Œúy˜ikÞä-òêÈGΜäÌ;‚è¼;ÆJ. NÅIDME´Û»¡yÔß§]õ¡6"^ü#û B×,xÈ–iÈpNÒÁŒKlmÊŠrôÉœ¡Ö¥1‘ôQT™^Z©9q¤×¹ýÉ{ÕAknh}]oÉÕ‚›QžÎŒ—zq¤ã37O³:D<$@Ôõç¹··ýRœK.ªÍ´ý súî÷À¥‘sÌKÒu_î%;„¸ê5Jœ;/ßVR'MìZ:cülÙi%ªwe=¥ónŒMmÎfdšÙ¶0«ÝŽ+-Z„-&µ½¤\*ÆØ7®DµRÎh†%CK]ò9©ÉÌ÷|” ×€]O¨5é^{Kô(9×£‹¡âsf;Jð½-¹Ï‹¾Ï’6{rÝ:XûÔS\å¾þYÌn5Uäå¶¼5Þ˜® ]É—5ÓØÝe|2FàhCÏd1WËãÏÚœ>\”êö¢4ÃI9œÏñãû’Ã}9_h!‚º-ÃäaiFuô}~Bü|YFetQF§e´*£+â× qÆ«ŠëMÂÕÚ|p—Ñ[â×ó2:ÀØø|~~BÀ¹.£U­Ë¨î‰/L~¨ÃÏ a‹:yFpô˜Ç5Á)$˜ç‹#qjmÊèOetBpç–Ø{HþŠd0L’ÒøªŒ.Ë豌.ˆó*6Û)©g¼šÏÿy¾°±ÙÍã*3ÆÕu·UŒˆ”ªNY>íÙUÇî¶REãý?b(|§û“ ^&«™Wå=Ùaç›+¤ðÈ®~­Ã[bSeø[‚Õ¼Ï+s_Öá9Á¡ºçd+ÿ¸êÂjwhŽòPuåo-ØWÕ}i9¸/d ”Sª ]2z Máh+ï lWŸ*õÈ >@#oËä=AÍAëÑEèÞ9±«xÙ’=ÍTBsbü×µgE¿N‚Ÿmê?«Ò† ó ê²ÉîÐ×EêôÙ¼¾Ûfľ{±áÅ]üÞÛÃ0÷kC¯ ·Bpröv^Îj ·4{>@}Y¡"bÑ &øÕ/üWÛ·M³¯¨g}ó,þŒ[!i”³ðK€Ô¹iM“}E’M~D¦‘\L  ‡¬Hä79×táÑ€ò‚^ó@]>"$KWˆgH(ÏGŸ©°Y·tž»„Ô×4Ãê3zg¤"£Gûètœ’ê…¾êp»ÍØl|ökQ<çÿÑ7Œ>è•6ô #òÜX"§Ïü†QËr‹*ð¼ýï¥tfCkýÞ]£²Æ8ž^“­+ȯÑÐ_"h_GoLoÿÖ~p·~c½÷kšå…TŒ¥ °ô$n׋™ô+©˜dƒfñ‹¿Û¿ëB¾Ý'@Å´šAI»tV'É£çu»=^.}·÷_ˆRÞ]endstream endobj 328 0 obj << /Filter /FlateDecode /Length 4264 >> stream xœ½[é\Çqÿ>Ñ10d&Ñ<÷}Š Ž$¢aÉäe{‘\s/í.e¯þzÿªÏê7oƤ˜$°Ýýª««ªëìîùi-&¹ô¯ü=¿Y‰õ›ÕO+™F×åÏùÍú›“ÕoPÞahŠ"ÊõÉëUž#×^῜„×ë“›Õ«ÍW[ÀDgLÜÈÞ½ùeo¾ìÍÓÔôBÄÍuo^nwVi´S"ÚI(jji €´RÓÉ@£²Ïq*øIHúš†ÄöO'ÿ¹’z²&ªõÉw«“yu€Ê]oª#l$*_öæA6ŒŒ’³!:ò(¢³!6ˆö¯?ŒÊ_-l±(ly”JÑЕ¿ýÁȵ”S´V‘Úh19m›ð‰•qs»Ý ÌÂû¸¹ÀÂÊmÎiL !¶Q;K°ø< á@µ˜|4:„ á„ÐÁm©-c”"l®"„õ&ØÌ0:g´Ù<;i7g`Ê“ 1Ú¼/ôØ Љ)ëA4’.òôìæiKËyâî2'A~£íŽÑv“0C˜Îë°¹zï‡^Æê„1œ26úvg0\rw€7Âiðq;À6ô.渂Û$3ã•·zÀ|™ ¤.BVÂPçv«Hd­;’œ°1mUÂ+»y`Ã?o­I¹6\st™/È÷‘Iß´¯–œÓɼÑù¶-×¼Ê{kT„5Ô§½RÚ¸ª|\Æa£ƒ„4Á›‘šG DINGVz,×ú]%kWé\ÈÄý°•¤ÂXêk²Eø7oÚàMjYOU[­õçÖ:o­«Žæ«6¸ëƒç o[ë5óÿõ©µ~Üd½¯Ä¢uÝZo[멵§Ü´Ö]k]´Ö•lŽûªµn[ëuk³•ÛäëÍÿêôly33ãdõKÿ[S[Ÿ/|ý5Ûq|«Oƒ÷ ­.ÑçOÙ£?/ˆ¾oÑç _;–¥ \ÚÞ®DL#ÔÒàÙQE‹¿è4ü­ vN[ë¬2SüMÛƒ?´ÖÃÂ^õ==]ëû¼ä"ºæ<÷…;ê×}ðwmð²µ~^»^ ð~aå®uoú"/ÐüÒöþmk].hËMVJ§'­CUÊøÐZ¿i­/Š.•9Y—¬ÏSÿÎ9 h‹»×·ùfa÷xaz%–tCvÈ=—;O ShŒÍŸ°Ø^Òoþ¥¬I)blKóŽ– Ž LônœÇnÈüX¾Æãü-‡¹\NßÞs˜ÇL‹þxÊUhøŒw.xçƒó­´š9œoñŒ±M|À°’B#/Gº¥1¬ÝÑt+­2¦Ô ‡*z¾‡²{ÎÅ@.gé©S6O­Æ”0ç4­LõÊ·ÌòÄ›½­*² 7i» ™Û¿Ÿ¬¾_åÂöáp)<êm­„5ê'åÚz$ÿÎärXwjþF5ÒG5¢žPU*,nþû1³az&^ä^´O:쉆„}Û¯! ÈÕc¼Ìò.ݧÉ#ý¼xÈ™ó°&׫§®WWwC=(³ ƒc æ³ 31oƒ|MU*ʃàëÖÚÊV®'/3*ØÂU²ü}ê½2ò¨×Ø‘K@Õ`Ê„¨ùZ`˜b‹ð;¸––|È8þX޳q–X‰YØ@7ÎcÀ³ê´à‹‡kÃQâTÖ#ÇP›‰?©àXÂw¹L‹¸ EÒiM™T¢!Ø™ñ2oóÏsÇRèÝÆÕEéA©? «{Ú†êøÎ^í­e¡ntnãžÏËG#Â¥¯Þáõœ©æ†[û'x€æ¸Yí¾oQÛ®P•ÛL:XmpäJó—E)’™<$A,Üð-cºòŽØž?tR¡ÊVf5`¥p3Â*˜1'=ò¸^Üs3Ü'à,ì9þg*v²Ñ8Šò†HÍ2ÏsÖŠ·ÜbFm-‡@Áë& 6Ì×ÍÈI£ƒ²òôâöÀÉÇÌáÑh“Ññ³ §tNLØü•ôÐGá¹@G®“ºYµœ&< ÿ€;ß÷¯N)Š[tæœ-$""n`t­\Db¡×ÚyüE—2I½~¸\ÿÏúve'ãŒÑë¿"4¢h_ÿÁô?V^xRk­@¼’ë›ÂñÙF®WܪқÉÛ£ŒñSd0u€ÃDGqžÕ¥ ²äݪ0(³˜_°p¨7Œ?uôì^éu˜¼Ñ"ð´Α×Zè)h—Ó l+ kÍ$=:ŠwLêØtÌ;9þ%ô²²mÛX”™°:j3Ù$ö2B~ ú—÷fÊ{9yßF(JƒŒâPed€òÛë8T  Í$oUF8”‘9'§«Ž P”8áÊÈeµ\àPed€*ÒaPL^»ÏÀïTáoiŸ7_+ñåËÓëËíÉ_V»ˆÏ.ÚµŒä'È·o¤Ø1ˆ€4_I†a µ›I1E‡Íïïn/;äàôl‰W‰†o·*æôðò†`S´Ár2ZÍ—{U(ÊðQ3pKd"âQ¡ Y:§#QúíV§TË0è¤ÂÉ;Uu)&¨ÊZÒY˜~<âž&Ì$µ·¯Æa=ïí ëHƒZÒ‘¦o jIßšî6¨ÝívP¡–ì ÛTƒZ²©fŸ jÉ>›­7(fë¯ ZÊ{ôš’‚ÈÿU¾Xv÷eÀ >O!–ùžr!n=ðÃØýÉšAîJCS´cr×U‡mSÑ Wdb×HÖáñ±+ïý;¸Ò|#”£a˜Øµ¡Œ\b‡É%\Lì:€ø0ˆ]i!‰í.v$÷6&v%Àn4LìÊ CàbÿADyÔ Š$LW>9—7ÉæQk"~RÒØýJý4IÞ1‘¿˜HF²Ì)®¦LÂÆ Fçø4}nßNGd&N/"LÉŽYB(QÏ!ë4䛿lé ¶'Æ9éËŽZÁT¤O‘ŽaFö EóºˆÌûÈvRi(O\Fg&aýyÉ™!WA5-™=ô°Ö)™ÑÔ50JloDŠauëŸctÐ’.7µ›WHꈠ ¨# b"°%rÿ|Õ‰¨ê‚aäâ|õÍŠ–IZ߸‘[ÆH™'õC¢4r ¥{¾ÒÐ<²—2€}‡PmzïçhB2Èd­Pï¾Bîg•„ QIÌæLdΖAÌêž§XØ„Cš,éì€ú(4©ONVµ>v"Ó BCĆa¨ý¼FšQF44Q¯;rך­‘û4£RQ!*•ÃÈGbNÓQ-Óf‰´€¦ÛSE}‡‚>õ=mëc4TÏyÕ´žahý´ͨ#0ʤÒ^·5rŸfT**D¥²bùÈÌ¡lL¼ûù>’TýœÊGøE}eZ‡4LË4Ü>cS¤dÓ[?-f”ÐA 5 †Îá깓T¸¬_?Wúêô‘ƒÌV@舞¦>âm²„P¦ùâ(ú!…¤Ò?§‹l”™l~éæ¼@]Á@jD†>÷ ¾P!ÉÁÈB14(*¤m è¬Àä ¨)…PÎÒÁ@ë“ L)P…p:U³ AíçhFq1e– Ýܰ%R—à ås¡¯NèÏ<)èeäq¿DxaµV zMµr ¢YÎ$TëcEW”¶ ad¢¸!¨ý¼ͨ#È…hBE€©#["÷iB¡¡ ËôÄÔ‡ŸüšŒÆÒ©: 4ÄSYü‡‡»³Ó³«ë«§çõÝëõï.s=}AøÍåõÝýÕí›õ‹ë_Þ^^Ý\>ô"âÀÁÅ?,+“}ÿ‘—´%†Nwm¦üÛvG\“¥M'W{gÉ鈮>“"¿9¢ÜUÚîà_–3Azå¢9–¢ºiW+ùÜ!îÇûùÐ/t°&••ùÀªŒ^¶Ñ«>ífàa¼R™‹ßHhW¡b¸dŽâúQþi:ë "sÆQ *7<|DÍ.ë÷áùiñôïv~@ÇŽÝfLjù|ÝÅüÿ½çJ ~Úý¢¡¬4,œÔæWŒ­×3¶ÊÆ?dýÁ‹ªª›õ€9²J.Ó3¶ gÃu칎>—Uƒá«ÞåQטº'ªêõž›ÿÓ ÉvÆž¥d\(ÄÔì(ýÀU;õ½)¥¬·6ù„}ÿÖF{áŒ[¸µ1qó\ÛHíÊ­ »­JgÐn4¦Ù•ÖÒIþfs¼³i Só&pü)ƒrù¡(Œ0]öå×nÚ¶÷œf»‹‘NvâæEY ¤WFÔD½©²i–aÚJETù®Hcƒ7/ŸóÓ=ýŠ–Ò¨¬£(ß¼°›»«¾ÜEžåà¾KÐÂÐsƒ÷É!%ÞmU¾~dÈ’ïB¶oËlA|š‘¡V…iÞ]õªÞº¢¶rùÊG™IŽFO.Uy¹ À¥Ð*ûX84Ôƒ‹¯+©:ÿ€ÇÆÒ7Ç/S\šòýMÐ" ¬\ƒ©t †Í¹ƒ™¾®k›vm´ï¶!ƒþZ¦A?n™îCØãèÃGžÛ£’^î=Fz'‡3“3î¸/~Ïôèvë¥0ôLÜ"Eª÷vé½Ê¸ˆ¯˜¾È›£?|E:Pñ.[ é@v…p⪽Gºôh~?TEó㦳òâ%[é»m{Áðã6Ãzçò˜ÛÌýìß’¸sb/Vøýæx :»|,ï§Ê˃Ìàè©Ë=½ÌÏÇ UO2Ù5šNx®tÃ-=· ¾%Ëlÿ¯™Çf*2ÞYïØ#÷´,Qºñ™{…¾O—î_=2Hm|zl×=Ï·ˆÐ¸½+Gv=s*Ä"öG ï’÷@•´—yÌLl”ò‹O“"ú@ôS¿§_¾]ÁcÆ¢ÄÞÅ«É&°œæ0›]ðβí¾N²$‰”@¸þj½ÓýÜé’’†_Aï%yû7úüA~Ñ:e˜y¾|gXøcúœ6(܇®º‡ëíÇ¼Ž¤G19¯DÈbàÙ ‹tF3<à6Ï‹MPˆNR žRü¡Æ¹m/mxP3‘Oy†yr–äJö e BÓ/o?-:ƒAÏÆÝ&‘(ÕD(bÓ‹žÑ/¦ahÏþc¿‚}ÆõG3LïB¼†obýT‰*b\ªqÕ™L "FàJQŽø¿ðî.•åa¶²°þêåç(gÞzXûßÞÓÎÍìw@"íÏJK-rdÓ ¿Þ{¶ØÔáËI‰ïñš–?òÞE3)»Þ9i[ž˾´_߯þk*’¥endstream endobj 329 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1176 >> stream xœTÿOUe?‡{Îyp»tô²Ø7-Ëб–6…É ~íâppQÁH‡y®pï}<L!QðÒ.¬8­eAk+µÆæˆ¹†IN]lLRŸs}¯[/âè<;ÛûÃgÏçó~>ÏóòœÂñW"sÉIóÿ&¨D‘VÅ[I·ú|Œr¼AÂ8¬b”àý¾Æ_Õ5èÿóJs+4B“ÜQ •–€Gª¦ÇÄ©—ÜÄE cŒHÜ­µC=ÔD—7A‡E?+A¯˜/ÕÒÐCT¦;@¦IÌó™ù»$`”ƒ1†~ÿzÅú(0oÕÓæ`2F`1VÒTŒ Ù±4ûébEŸÂåä6\·õåvï9»¨4ôHnÑ΢]Å«@6é™Ç}:ÑðõvþòøÌ€ õD4š€ïæKîäÉÉN¹xœ^"ñ7ËGF¿þqÔ2”ŸK2”ìßÓþê¼®¥h6àEÿb…Ùl—A>«ePô …À¬ÄÇB`5 ¾ gT ¦'ÂÂÍÌݦ¯U°w·liþ ¢5²Åå‚Ý,ªôÿF©>ww“Ý$FGDœx¤‘W²Šƒ’ &h è1 È¡;HÅdf÷R¯êl¨ƒúèêíPa±¯zÅØ÷ç7ã Ù õÇNÉ&ÿ˜½·Rþ^ôi‘³Îc?Æ/Ž:¢wá=_ðõŽÀòô’ še ˆs¬R·úOõák‰ºŒáÒ—àµw¼ßccû˜ÁjÏ÷¶Á¢›î´Þ9u¦ÖsôÛqÔ[·me)lÇpí]9êÈñ!Ç(åzeß®ÐPô±F¸Æ“–ã^M×Åšü̼ÉAgæù ØCðt™ôapÈZo¾… &iŠUSgà ¸7`lÎû}rŒ0@óš"H¦'é¬YX/6 ïÍýÿ-üI¹[0H…¤›öUYªnmút3¤@nVåÙ!M¯­äjÄÒë­¤SaËzqá¡Ùˆ6‚üøàµ¾ŽŠt ½ð?!Äd Ö´CÁÆp0FrÜ¿…§endstream endobj 330 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1482 >> stream xœ}“{PTUÇïå²÷^tAÀn#Ms¯‚04¡Ë0MÔDËò‘4"b - &»,—…r—ß²ж»è²+¸¸®†/tEQ²$•>& Ãì]ù»ÛÑ™.66ýÕ9œsæw¾¿3çóûþh*8ˆ¢iZ5oÉË3‡7I Ô^Pšu°ãQvQä­ˆG §†GØÆçµº¢ŒåÙO‹Oxr6E½HM VP+©*‰šN%Sj*‚ФFSQ"5JIMSê&K—…å}É”3½Á ƒ·©T*³ªG6…É7À'‡{h éÇÜ~F.ƳÂW]Ñ¥ÎË7ŠÕ?²dB™JÃõm«L‘ˆƒK5ÂbQõYÃ^hcÐfêPÇø¸ÅF8!á"nèÚ©?´§%‹¤èÿï†:•‡ïùhœ4('üÆø‰‚ÆÅ]®)Ë”îîâ2ÍeÏŠ:ÎâBœ€“q ® ñ ²@"Ñ÷Da¹î€$ïçÔÔùEäØ+Л}|uO"Œ…xb“ŸËJ_üzðar|¹WõáL'Aýø¨—Á¥r´€±>‹É9lõ´ô¸©&>ï&iæHÈÍ"ÿù#|!žÍYÁ%ådf,„‡¨@*÷È£Ž?€„7ä¹Â&s¹é«’çLßÚÖ!âuŽÄ ÓêS‚D&só`*>õý{¶¿-Zf±[¯òq *êNI8Ä…ÉÝ$Í#î£ùE¼.4u·Öû,¼Ë2™al…•°ÑªÓp-f[ h¡ªºò-ãXòÖ£½Ò5PµÇkq‰>.Õ”:(€× ûI'ØÌ ˜@þ“:.wþ|à7—쩮ƽZxO]§×–æ¬mËìl¿S_«ü1§Ü‹ë›q¦‡Þ7ˆu}Œ…‚ëp¦üIÆ‘ðÉãI8š„‘8ºãŽ»ÖT_Zf®¬2K&O7A*¬iÌõçú¡öñ–fa;ŽýzO+`Ô’q-ئTüÎoÞb¯f ÷DVOô*/kÃÙî&œ»Á ÛÌ»·ZÊa3·ËCŒ˜¡a[­HA›2•¥õ¾‰2¸°”äܰ³±v{M‹¢VR¸7ÛÈlÞË*x‡ý¥ÔŒ¹È`6 _÷}Òyìí&K”Ë7 ]1ŠÁ²¶æ>­ÝÕµ¥PúâŠ*2žðcäM‰ý×øwß}`æÃÖ.h'tÂáÿ˜ù'®¯Ë ÍYŽÂ({CïÐÛôo¾¸Ðd¼ß'Ñ!EvðÑ:(ªÝpR!r>¦?öc“–ñ3òBÔ x’µ¹ÀíÖA"'±µK«A$í¤3è@«uMBåÄ@çvƒË¦”ÏSà ŒðÐGÑ=Èȼ À²^MÏÚof¹–‰„5S y暃U°È:±ýiÿs— OC; Ø;~i½`„^žhI¯ð$9 †Êºá{å—ŸÂg;Î4Þ¾RßàÓbç´Ëa,€— ÞøJAt’A3Übõ~ßq¥ÃŒW<ˆöš-›Äôõ+óã€×p{¡ ÞßËß­ç2MÆ81KõÀ eÞ€£÷‘dqq¦­Òpª/ñסŸ}ôé!ÔþÀàALöc>‡í£îsgà[GNºL"ˆú™i )‡+m^û¡ÎÕ`[.žo:üwíÏ̈™›HFP‰D’‡e`†ÍQ²Ä¶àUkÒW¬6VU$B ð$‰·ï"2xè÷÷›éK·1ýßÁÂÕŽeÑ$âùÌ•Ëç8OgIï5¹}ûµîìMyÅëãn/A£¾»õëõEý\ÒUϹ>¸Æ_‹ïŽ;kYbfSI³×éjiͶé,â±3—­»€oî¯?ã:C‰”›£5/ÝZX]Q ¥¼a;4ˆŠ0Ô³üô¹À*&‡‚Ý©X ¶H÷BØ-ùJÉ`—¡$K°ïQ"úáH»E¯Dö(‘0qDð §:Ô#@=Ô‘õ7´^endstream endobj 331 0 obj << /Filter /FlateDecode /Length 254 >> stream xœ]‘½nÄ „{ž‚70þ è$k›»æŠDQ’Àx9¹8Œ8_‘·Ï°ŽS¤˜•>–ш¡9_/×´lºy/køäMÇ%Í…ë³Öß–¤ÚNÏKØ~If¸û¬šó«Ï_ß™5.pÜùÍß¹ùèí Gín ëÌìŸn¬FchŒ‘§ùߪ}ÙS<®N´ËL=©±u$Â?öØô²íBÅ™D@ÙFu]°ÀÁ“ÈL5Ú–DÆ`‡Š'Oá³âµâE¦•\L “È@‡çUƒ Dˆ“ WƒBœaÖ Ž·Ö6j¯G:> stream xœ•}P÷Ç÷<8W%hL/I²«F;IlfìL§Iª&щ/€` TD%*òzwàÁ½,÷²·»÷ì½sÜÞÁpœIåÅPñ%NµÖ—ɋѴÓvœ¦¶¦Óvô·dM§«dšd¦d:÷Ïþq³ßÏó|¿ßgXÊ L¡P¨ÞÌÎ^÷Êç§µ’{jÑ”5Ò”–Òú ~s>J}üó¹—æaJùxZiEÍÞÒª:­®TƒaØÜªšZÝúÒÝûÊ÷/_9ç©×1,ËÃò±-ØRl5ö¶Û€mÄÃæ)«à°y²–‚Qg3üÊ9ʾ”¢”¿¤V¨ÞRQª±™¹3OâkE6}*Ã’ɤB|âŠ÷º£WÔîHpÈ Ÿ¾³¿ÿıÑË€vÔ¿S*©ô…¤¹h0ãùǪGîA „ Ím§8»…%´¯–î.Ü` vvâÁn224ŠfÂüã‚Á7QPXVEØ'KÞß {@£3Th‹-ۀí~& 𞄟ˆž<áÓÔ58ô¶r’³71¦÷¤3#­×ÅlB4 ù ·/0àíÀÓÅ>éÝ~´tz„œÊ“ÒcjÛ~ζ pzk³ÃKÁãþ®Cë‡ñ´ç<ˆ…M@¯Ù½Ö‹f‘‚®oÏiÀÑ\ô#´-ùrÃ¥å¹E;+«Èúkoƒå^Ýö¦­À~‡W˜ˆž=x·_§µ0ZÎF^7¨½màŠD‡ÆF:n¯nAå&²vKQI1àY†~—«…w“ébÕ·à#7”b¸LÍ{xxq°R;wWˆ¦xåX6àÒé)‰”žîrî§ãG&zI'[!ÍgyàÜèÄ)3èi¯-(tºx<¥º Q6øwåÁë‰fäR3F`õ9%¶zÀ©>y¬ç~|”®¶¶Uä|ó''Ú£dtío¹…Ρ@[û`øxd¿üÅÑš0½£/Ø ¸ÎK¶5øºI_wäCO´ý“ oW˰lm§>`6j,"KJ¨·­-¨ßÿ?L¸[M1šèZÒ\ œe‡ó‘Gx¨lìá¡©Ÿ¨y—[÷2ÍSÁr:b3SÇYœÐi Cè8ÐVÚVî8@JÓÃdþÿÃL»óÆ“?}= ¬þ³âOWú¯*ÑÄTŠ:nhÕÕVi+ëZ ‰ƒ]½„ôãJõ‰p4fí9õ·ïßÝò;å.S”·§ËúÈ`O°§¥§ïVFsg¨Úðñ]‡¶¾X*-0O÷ÒtÉ;G{zåÄÕ§ÉR)»»JÚ‘ÿðÇxé®+ÅŸÊ<1cL[Y[]«è»zÉ!•}ýsµ1§p}Àèáø¾ˆ§šñ®¡¾ªFS^vXsöš1„Òz‰Ûè+wÈ€HædÉy ³¿AËñ½W&&Æï™ÊM¬ü“Æ-I4r;òÈCtö“3U¢±d# œ£=ø\]œ™aSl ð~ØC‡÷Z†'éËzÈ88 kæLàÀ7î87œè‹ D×áÖÁ‡Oo”n`sqíÛò)ª¥ã=òv’¼ÇÓ -ðùâèVÿáøÀ@H˜<=vø8b–-v('^×fŒ÷ôÆ h·å”äçyùš&ƒ]vú¸ônZ…” ”›T¢ÜˆÖ›ò³³–ãd[€ö‡~÷šuQ;Z²÷@uMu¬úpW$ÌébRrw|µ¹]q^\¦˦¶ª}ap,A³¡, !Iÿ^A›€6Ó´­žPÐC¤O½6]ÖÑ[è×+E?Z þâýèIàÍ´Çjv2õ4Q½$w% 8Ý­$‡ÖHªÁ,¹Ï å<+-|þʪ{W?ê>ÿ_qÎülÿD,DÛıv–4”îã`’CÀ türõš /kò/ØÞ{óPë?]&uætט„¾ÝBN$˶ܗ'—4bÚ¨5~{Ëy †¬\#aáXñ‡®Æ`¢›¶Û5£oÌbL{¤ÅŒÁ^%]LðÕ”züîѳ(=Žž–WòðÄê›jlÄ:©Azmñ’ Y/)tˆYíŠVÑ¡mèuØïuÉiõÑ~Wã`„ôReÚȵ²Á&ȤÀiãê¤ÒÆA“+ÕFÛiK€ 2$z}å i¡ÝlÖÊ{¦=¶ Ë ^ÄâÀ—÷3Ð i¶ÇÑBy™Ì …wzz>ÿÏÐKT;™NÌNy¹=m¤Í†´96ÃþšYendstream endobj 333 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 495 >> stream xœuÏ?haÇñ÷šxyMh‹/(Ȩ(tÑÖA3*("4¥’dÐEŠ` • æ’ØÚ&mÔ§—hÎH½x6i‡´gÅÿT4Ú‚±Ð,º¸ˆ‚ƒt(ˆÂ“ðv0ÐAð™~Ëß@œMD—¯ó°¯}Ÿ=·Ô:k‡6€äÉ™«­‹-¯6½ØLìk:á'¤ì'Žúq’Ea©zÕSE°ð¡…eKX³¾[èµ~X4°ÌÒí:ñÌÇÕUÜÁ·<çLáÏD5 jäè¯Óñ²~ÍJÆC*DÔ˜2æEÓón®ø“úK½x‡çSËðJ£¥ ³o>õÂn8r:°÷"å^L² ˜y÷aº·ð§}rPäÛy™é&`œV5ŒC!nRÅ(\‚]¿é‚!èÓUê©u×ó‹¾±„_vþÉF~+쑈m<–ÎÞŽmË ¦àP”qúHfXSºõÐJ1‘ ®Cò-÷õ1`3E…ïYàn™Wþ2—n$‚638šðÇØ“ÿ0»°À¦fS%x #¥óssÃk=uæñÞÀ®0å]x™åaúý—ùsÜÍYO˜wÈueÅVNÁ­†2 “ÿQþÄ"ËŒ¥Çt0à¾fhF?~ôóAÚ&zd·óÀ„´$7HÍ µò‘“ÿ¼endstream endobj 334 0 obj << /Filter /FlateDecode /Length 177 >> stream xœ]OA ¼ó ~¥j<4\ꥇ£~€.Ká@(=ø{ µÆx˜Mfwg2ÃÚîÒ9›(»ELÔX§#Î~‰€tÀÑ:R ª-¤+&k{ž¯€t}@³ñ«šÝë㡬ªM^ã`TnDÒp.c$A§ÿNõ&ÌÏg†•¤©…,‚Ÿ3EYÀ¹:·]—sÄ=…%Ft©ô(9s<ëð[5øUty!‰YÐendstream endobj 335 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 266 >> stream xœcd`ab`dddsö Ž´±$º½NþéÅÚÍÃÜÍÃ2åû:¡[‚—ùÏ 0012r¥æ¤æ¦æ•ä$–”d&§–ä00003Ù10,clgì``addÑì9ò£ƒïç¹ïå;Ÿü”fþéÿ½\töÂîE‹J»«åÿ\d«.í.)YØ=[žïg„÷Îï Äødó›( ƒØf|—ÿÎñõ»N7ÇwK6¸Äo¶ß¿U+üvúíü]í·üwwùï6Hò–l¿uºs|­û.ÏtG÷‚Ÿì;HídþáñSFôûN„Ò¿ÜlUÇÌ‘ÿ¾ãÏW¶ªîÒE‹ºΖãëæáêæáîæb`&p~mendstream endobj 336 0 obj << /Filter /FlateDecode /Length 184 >> stream xœ]O˃ ¼óüÚcÃÅ^<´iÚþ®á ÄCÿ¾<´‡†d˜™ÝÙj¯£ÑVoå Em”‡Õn^`Ö†4'ª´ ;˯\„#Õpîýq@£°ð»X zžÛKþjJHZ«¼03¾®yÈ õ'±˜pwž£3;˜x¤ ÏÀÛHYTXQU¢QaEíòðcLÚ“©Ü¼òY¹vj« ü.wÖ¥ _v¦^mendstream endobj 337 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1453 >> stream xœeT{LSw¾—–ruÀ|¤ŠËõV;eqºE²áæÜXÔÎiĉ¯eA àðU iBÞžÞò*`Ac«¸?T”©Ñ%¾ækÓÅ(™'S“ifÔ˜àcñÜr®n·ê³ü’›ïäÜû}çûs.Ëh#–e£>Ÿ;cIÂä0€|†üöp$Dk ZÛÁëÃC±ñM¬Âİì~Bb꼌•vW󿫬¹fKVaNAњ¬Ò5Y–ÜU…¹yÖìó3l)0ç¿ Â‰Ô‰Ô õ¥×?1‡¹-E¹Ë­«U´ÎZT¼reV8øŸ˜õ%´®Àa}…­k†‰ùša‡ 6<}ɧ“?K`Ø:ÖÅŠ¬›ÖÃJ¬—­gØF¶‰mfbÕka´L+b3Ù«ó#~Ö¤h$ípm¡öt仑5²+V>ÊãWÁmwù¨†»Û‚ì‰{¡/îiñX¡ß!m B'·ÓÒa-²Øò—Î:“Nb9îÿMø{Îâ…cx© ºñ›.Ô·R{`;t®«¯[!®/ ·¢³lËÖÎö]ÇîIŸ¾€XZ–.¸*‰WÜñĸ–Þ[E)+ÈPššAiÉ`†¢-nàbåLžJ¼¶v3‹“z4rOÕz¨%Ñ›qhÖÕ,üÈz«ê!Üìøç`4Žðù@‰k©†:ÛÂy¶ra<ÅÌ&P±“2p$Mk©8;}põÍÐbxM¢²Gƒ§”“z@£3h$Ns´Í¾\ \­S¬®“\õ.ÃÁÅg“÷Ñ[&ûÆÁû_5~í„\“–²dAUˆ rÕMbCûñÓþ6áÆœE`‘êãàu×UÓeÜÆ‡&é%·Ïá.¨ó6{|Ï<Ì»Ÿ‹Ä`úr@'Èi8 ýø9ÎðzÁv愊rª«„IIcÈ0“ÌË(ÎJ‰@É@ŽýÀ²}ŸÓ î– Y³óuõÛªú‡OúT‹{MxŠ–b±½#oOQÀÙ(B9pŽ*pÔÕ×I¢¡+ÿXúŠ@†Ò÷9A™IÑ´‰Lô¥(Š.pq´l Ù'ܽö =h>€£ƒ80‘‹ YÕ­ ðƒ¦¨¢9×5¡4þñ…­Ëë63©Ä‰ØšŠW@V‹ îÆ>LÂ#½h¼víÀÕ«Þ°W»]›M ›tʨd‚’Êè¿”1ØDG7[ÈÞgn«Àœ¿)ÜÌ¢rÚu¼•§uzG'Èc¨ ~·%w_öîŠ6ìÀU¼´ºË|ÎtN½óDj½HW@ÑÍÔGItäc2Nš•%ºþ3Üæ— ½]À›xêo9ä$Õ饧¶@¿±‡=Ñ#÷öhB‹ŸÎÑÛ¡ kìläGQ¸ˆ’p"-VOM¤E‚ò(êU¾/ §¡58A=FŠ O„X>²“ïwÝ൲¼ö¡Šõƒ#-ºœ·Ç΢¨•%µÖR:pJŸNn”ï45K^h¾3g‹’'ÿ¨Ã·à–Ý'«¾±¾wigÙùÌ®d®SG1ØÉS¶Î n·«Æí‚uP)o{’§´+P îQ•>Ø$Ćþy>6·Õ@/Ö—@ ¸+¹œ(PYêßž,¨¡rL¡ìöÒúZµÁn»¸µ!ê&Öø ô§œýŽü“;TËùk ø9ñˆÄò`5ÖÁoBó¯Ê½øP¶7½Xd'”•©{% u.Nññ”Aq´q*ÈSWa å¨S¯Öã©l„€úÇP´\æþcÞÝZ%À¥ëŠkÀ>ÎMUkI2,Tü4Šúi5ýâ|¾¹ŽfhïP5%¡Þ‹Ã1þ>f`n¼Ž'ºeÆ»=€9€n`õ/øI2$û ïÏB i°œR0Û¶©®A/ÛSœ­ªÊ†RÞWÖ_Qîyž$qöF ÇuhO++ Ö–®Žу!ú ˆÆ0ÿljÓendstream endobj 338 0 obj << /Filter /FlateDecode /Length 6373 >> stream xœí]Y$Çq¦_Çzòƒ!@/ ùÝ2»\ygŠ !Ê´Û2 Q[†i˽8äî ¹»CŠüõŽˆÌªŠÈʬîÙlÀötW^‘q|qdÖ7»qP»ÿ+ÿ>~y1îž_|s¡èÛ]ùçñËÝo//þîS«vJ É9½»|v‘›¨]Ððÿ8Äèv—//þkÿÝá8z•Nû/ðó8§á¿ýSöË«|Tcßþ÷å¿À0!òaŒÁ8Øåèý#|ÚÀÓÉä§# ?¤0*šþíjÉ*›Û\cŸR²¥\H´ :ìD›GãÌàÕþ¨õ8šèsk'æ§ô”Óü~O۔̨ÊüF6¿0ŒQfgcBL¹‰&¤è}szvÛE£'DY5ºíþê€TVÞ[c÷à“ôÓþù2õýg{ü#’mÑY;˜¥›×ñ¯õÓJÕËvÚìÒ࣎*·y§Þ9‚lH°ÑæØÆÁµ.ôŠr?•sIÒëï‰ÄÀ/±5 ’Ø)_‘ëy[âÔ¦^MGLí/V¬Æ§«‰ã¬¦Ìa!››Ø}?¸è’H¬æþ›⇠ÝîP~`û—]armj9à»mjIæBjÙ*j}vî·¸ÿ…µôhµ2û×ùk­Üþ |¯’­„<9LDqÆgTÒ…G§DOg>?àuõþ†}}-ŸŸ™úE`íþåd :“øo*=£MTr‚^L¢òÙ4÷3–g…:{ χhUˆbô«,¥Î'hšg«AF9Ûy(Þã“i™~ÿíÁÙAë²ÑÊ@¤°¿bÝ]ç!•‡ï³Kç|#ts³4}¶­‰0…ÔíQùÁ›X±$ìG‹Áà£õIí ØX¤„TªK)×R©ðc2iô +D³¿ª²ÖãÊŒÑOⵦIV–@XÕT€è¡ôÔüSl£`Y¾½.3PÓÓBuuÄMUesÃè]á£2‰§ùÐëbn aŒÏœ«bJ*æ¹Î"/ˆ¡,ð–^3=-¦%…‹ÆÖ¼§éB¤c–åãÏ—þDÃo:Àåræ9iù0}¯P îÿPËâÜøñg}4-´ gõëÂÿxyñû‹Œc^Ýø{Ì.ŒDF?F¢…ÒÿÝ»öƒÕ^v=Ž `†¹…±&Æú>zxHrƒÓJ¾RÊß—#—þÂ^¢&vGµÿš«–WµuÅùù ÓQ’ú8j‚éð¶"Ž1xÁO/óŒ£òÀ£r/*ðSµD¸£‚­ Y:K RHÓÄs•Gy‡)©Xq¥\¤*­ƒCþ’’Fë³´¾?p©¿å|Îÿx-5Ú’ ­Ú¯h©”ñ›R}o®Ë6xïw>"[¨Ìz~Ù»®„ÛAµ€ûåB¼èþq+ØùuE¯ÂMŒW9c1î¬8wfµ è™Q@“¯Å3ò/1k±¸Ç•àY°|Àllñx­Æ‰k;ž ù*ëÂÑÙh`i/‘¯oûS|Ó¦™@eœj7 Š»å"Z¨ 6{%°É³šå°lÕ¢¼Ÿ.:} ÕLÝ÷ÔS~Ȧp "öb»ó0ÌîäUå.neÍy1ú’þÝxgÒ?^ t Vb´ŸÈ‹Zh¤žÒÏÈ–0˜ù>žzZ)«Ñê-ê-Ž®âüàÜ-­@¤ nTžåŸó^ð?Ø ^/”]ãGeÂ+áM@ š÷¹ 1賦´B Ó÷}‘»î≰©+ð‚{Öîù²-'^¯?kÔ9ËâÀì&3nÂ_&¾}R-EÈšXÉ1ŸÀ0C_“à. ìzÔÿ'×4-öeŸ(„²?·>F`ýwØè€¾Í#ü“Oˆ(ŒE–3û—e}¼@÷ý'‚%0Ÿ?(˜’š=:Ô>ne4Æ8(?ǃþ¡˜møºÑ*£$âï+Áš„<>þahKX?z@@]ÿ”7%)íaÛ ¹>B©…©9"yž~ü ~i"bDd_æÁ´ÉýG,ç’s~‘{†y>«TGÁr¯ÊЊ¯©ƒûÖЃðÿM%ÐIˆNø¶O«‹Uà»pËïÉBˆd:^IËs4à–Eí&æø†H•⨧èRí1 ÇùqŽ&³‹¢Çdª+O|¥û¼K•îÿN0îœÍjk €6áQ–}’Õs ³òG‰ìyy‹yh“©˜ÛJ6È$ßó2ù¾}]\ ­+ÕC²U@¡ "tIawÔÁJ!ØÖŽ·ˆð¢8i•r„Ûd`¡ 9¿Å^É0(ö¨•W5/ kƸ˜ëÛ×'äÓƒ…Pî-øÀø±Š¨¹1ËåÜü燣Óà‚%!<´jÓ8] ¾ °¯+FËs–¤m€+ Ø@ä›smbt (}ô倶§:ç€æFµ0Ô´ƒs*¹Æ¿ÜÖ` mŒ™Ày,¨m’h….q‹$¿Æ(.dßæï/€Ù6`’ëáêФ (´o7U½šiZf–é%þñýå’`–Va E*¦ü2#éh•jï4 ,o%W$ŽÝ|³ÿ8Kò¨]¨2¨ rÈyáà/HÉavÓmÁ¨# æaÔ¶‚.[>jˆ”âÙĨ =ˆ5 ÒUýg8‚Èa]PÒ^hÅ)¬ëaest:ê¿…‹…s¨§ì{®îPÓ#²¨ß^‡U¹) v|À™TH²kJÞÁ:ê`ýëü50=Ã9µÔÄ3"cX*U¸ìÑb\8?ð.ß,]vFsý¡ "gFô’P¼A&\̦üÉ©|/¸ÂÓŠžTë;¶ÒkO&ÆhûJx¨Š=5 /kû˜ÜeT&_L}¿¾ÎrU¥Woò^ÙFDˆ<+k8»%5 ‚[µ¯ #„$(@ŠP9q˜T Ž©E¨€ëŒê¬NËs*^”œalä fÉb)–’å{UÊ>_2ê*ƒCçÌÎi3D³;ûi¦¿W~ÿÑaNŸž›©¡$3u¹ô³0kN›œi95Ê4ÊÂzZ¯\¨hjL èLN麄‘î'`p.H’½÷e@Ö¸Á'+;få>ûqYʸÐ7>H\4î0ÆŠÀ6Ϭ9%²&zò¨Õà},Ðìß*’›»£g§Â¢ °ÑR\ùñŠg¦‚J®Ù±"ËÇÛr¯½­ÚðÅ`(GÆ…•Ü´<`®€ú®ÚiÆÎ5ÅÉŠñ“bÏÙýs\‡Œ$ËGh€ªÀ‚·†زǪæ¦Ä5È“]Œ÷m¯£*0H«¥Ú˜¦±¿^ˆÍªg*1DA{!Ÿa3CÞ2À,ÕzÕb!yP‹N”ŸM±Šàà೯ ʊ;*kS² »˜^ÆÈ 2®í÷w‡u±£åWLU½7KPYæ¦_ìõZ\œµqaë)Ͷ0lc]~A+@Ú«¢Ùa8)×Ý?Ö±E,Œd¶õÝʶ‚FÑ«v^²æßÓT¼ Â¡lÄZm×±˜S ›µ!¸Ì’®¾ Ð+ø?KJ’ÍP›¡Pã³ì,ÆKÊåW­8Ê÷KÈåÝjZ¸lEÞ ”2à͸([ác MȤ­õ 'ÆU˜DBs]lQ OU•@û¡ZûQló"_´noÇÖ4â²»Fä®öÿtˆ [§ãD9)£Eh¼—ÂwÝýãÎB£}¢2~a€XˆUTVΪµØÏ/·nj×63{˜][,ž‚A×ÖG‚YGŒþ²cw^µQä5gi³zÕž«¨XEÌBŸ_Ρu8UÎQS¼™Òƒ2µLqËÅÆ¬êXÊzV'2éÐkíE“ŽZö•HçàSí5öê ±æF•…®«BâÇ)Ô"ØaÃÊ}N$Ëa$ÃNõ±ÀnU¿f—Aã‘»û¥ OÕ¸5D»„Ò&ùwêuW1fñ]ð¤×ƒ†~×|æÇªv«›Öºf(h›×)Jù6•nÞ!>&,Ÿîz’̸ÎO²p»£EŽåØ©UHKQ8 4‹‰µmnΠBËg¥ÁØ9ÇŰ=#øË‰.óÙ¡5g?^Ø–WÊ?ðù6ëܵuÀ^­"÷ñï=&½ìºÔJë°ÈU{7¹Võù¤—J•Gõ¨®q6¤yÀUcý{ŒUAêúÐõØ8t-ÙGÙf€F(°~ÉuéhÝ0\/º.O¬T±¿inêvLbØU)k+±xª˜ «ìÌÈ‘´r`ð$,&Mš¾quÐ{ã6‚>f¡ÛüͶ TÌ2 ¯‹[WŒj‹µ‚´É:-ÂxâT`ñ…À/çÃ%«Z‡mo·ÄLWeG ï£]l§–*“©ê¡öE’‘¡æíbÄþZœ¹(<Ô¦ ªBà ­ßé¹ô6Ù€µ†-—rù75ST#&ÌÙæê;`޶\v¥Ò•ÂÒiàU…yXW˜Ï |Ó_Ùiœú€Å`qÄЧÏå?LåÃ®Ë )çɨq ó7¥>~nsÊ¡RâJš·šÖrúsV {bL^ä07?QäðgL £»„¸K]ñ ‡œŠT=½RÝÁ mSMk°=Aµs<¥>ÕúÕ s›•)4Ðo¬õj¥òS9¼+"ÂS"åMÛl¾jZ˜µgOö¼·„6¦p˜2‚M“ˆðèå!b™2–ôb=­diOó¾›M7¸tzÌ1Y*–ÞL`Ì¡­f0H‚ž:Á#s.ù=¼ÁAÓJ7’ä¨ô¬,殼¦xZ¦ã:˓ɱ¾wŸG-ËΉے¿3b£9ƒ²ßæN΋ßòJŒ‰@?mø–F]Ÿ¤.òÑËìÌÓ Ý* –gÈbYè&/±`•Ö‘ïÏ)!9"!+[ó½<œyý‰p&(eêÓi›EXÀ!/ÂZ+÷U8ó^ÚýDéš­æ·ª]«Õ¨ó6VóÈ`<¾§¯äÕi•k“Ì™žMÄ›b+¸È.šA½B5*Õ-.ÕÉßRÇнqåžiyŽyf7H·†nUæ¶ð±†x7öøÕÛ:æ`AP­Û@1%“Íöx=Ä")£óÚ0ûZ; ¼Oœ#]ßšGIÁÞŽåœ=8æ—_âúØ£Ýåï.ö¿9¼»Žœ8ÐØ°›)ÅŠàÑGƒW3åáq¯k?®>ýÝÅå¯D›qi£m¼j´Y©’`@5óö ­î]$_‡·E;¼›Àî€ Ftª&݇ ÒÄèÁ¡'H7ž¹tçsÙýË.=û LÛíVT¢6ÅÞòºWç¼;×€œƒÁ¶aêhÊùþ^w-tÁ§·–¹¤~bÇú£Rüf}=ý3|gv„ó®¾sø¿ê:Gõÿ®óDø3å‰Õ½…;Ü:>m– !MÓê†Ä¦Å#6#3þ¥ˆä•Z`·âO–ÚB–%ܸQ’©~êô¬9lW#o–öݯ³š GÅ矼æ0{xjagh'Òt* «ë.ɽVªçè›ÃƒSþߌìæúÜ›èŒç\XññƳ kÝ骶ìü7BܳE¼²ò²gðÒ™"ÅAÌF•8 [ Ëêen~Uâ‘#T”]ÎÇjÆdJq{*ÕÔÝä§]¾I­ž©‹øqX¤üºŠS)wNv¦qúu'‰éWÔWÐ@F–úþ¬ØK©äNñk'õ¬Ã¯rË8Šc,¡}ïêþ€ŠÑî€èMÎúþ1 zÈNŽÿ°äëe çR·Ügšûmïd¥B”ÓÈÓÆÀ¾›j½¬‰yv¼ú^5wè΃{ ³Õꋸl&êÓ'—ºwá±#çÝ=Š>ÞáPËöå´_°cWgšÅ™ûüþÅ‹Gòxó¹ã£a\Y•Ë;ÀoHU|îhb>ôÝ3ïòòƒõ¹›ÕÒÝÛ5^å±âÆXe:¨ØOŸgjŒz⺈'¹{ÜÙîxô{ë]±¾¾J.ŸÙè#óêuª 8Ò ®ª¡p£ÆªÊaàô‘äÊ:ÕFõCIëãóñBã,¿ª©SÀwÖPÓ²»±x‰ uç»)Äí|èÔãt'«Ê¥Hñ LsP|.3*è±m}¡lJèß’‘²ä“zð²>µ¾Œ|†Œä4J=Ëßb¨Ô©Â7øt>vÈÔQó°hïì9 òq{ÍpK´±˜øî¹X2UH> °§õÍq´1ýÛâ° ÝZ†];¶© ÆrÎwŒlT»‘†CÂ¥Ò ÿ©sMò"Râ8raÌóZ¾•ºí8ëa©zzSÂêÚYÀ”þœ’­Ó—h_}Î¥Z”ãqE+”+UKªBÞ~BÀÛ¤ºªofhL-Œù\Ê&®˜4ã)JÒ H›™rÊ€©ŽWÜLwÆæÓ¾Â£&§b] V. ik›§‚[ó1âlÉ\r‰.KÕx’tT½sÉËL Ékl\Û]¼”'¹óDš¯ynP˜ÂŸ V韃«NPðó šâÚ«üòùm&¼MÍø.ÈŸîª)ÞäÕâýI[U¾ôFLNƒ×ïóÃ5Éh|„s·ÿÓ`—H˜J` Âyˆ¥SŽ|UéeMU‚rÛç­vó©“žžÀ EX¶«{ßT7¿ÞÓÒ7‘F^“Ò»¿“Ûø"õxìûÅ'î´6oJj]cNoÆ ;6j:;Bة䘜bh °È€ ºÉèddè¼–à£eº®s«±†¥ìûúÍ)³t®ïy^_ÇVñyÙ~Ë€@ðz! ¢mòõ)ø„á^Ö3½=e²?ÓñÆ›¼Éx¤áG{ßDó:OóÀˆ³è SOÛ"¼~E2]X½¢av¹N Ú_¯ÞË0’Ù¸ïH7;ÔçíŽsiX‘˜üþ¬ê} gèÁW‹ 'lßOâ5·˜Œ1ja0™¸ð;Er¤ànu»»×Î'çešIïÇ[]ðÎ噳 ªî#2AWuÞPHº{P§ÇÅw¹–ïFØ8e‡ÓXÇìY!uou—`ÁOrÿA¥g"eR…'_¿VŽö£[|sNðбv¶ ì]¨Pv þÝ/³'ZªÀ¥~óPrY°¬R»“?~Æ¥ôìlØk–Šv‘EmþO¾V…M Áy/W«RÌ¢]ñM¨h;•i(y¤nq?+>ž½)vQïµ)*HûóyWql^­M¨Ñÿð26¼¨T7W·ìæ@\!ÎC…Ì^v(‡¬r GJ“ÁtñhYyibëúßß_ü//{è˜endstream endobj 339 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2163 >> stream xœ…UyPgï±§ c+"Û]©1qUÔ芫YPÑÀ.žx$+⌜2 Ã1¼‘sd@`—P/V<µâ¨ÈêFc,£QwÝ}“úøc{„Vvk»º«ú}õ¾wü~ïQb;J$I–Ïò¶ýr{HŠÕøsà­“œìÁI\åáìŠã]þ>®ç=Êö¸ÅÆíZ–°u{Њ°ˆè˜éÞ³f/XøéÔ(j%µŠZMyQÁÔ:êcj1µ”šAͤ–QŸQAÔ Ê™r¡\))5™ú ÅSc)j’àžS™T¯ÈGÔb·ÄÎh÷ƒ}²ýq¬øÞ˜ùôxz½„’xJä’³Ìt&‚ék?vÕØk³µÌØg6»>³`°e¢ô.°ŽgÛ r;·˜VÊ!:¦ ü1Ò:"áÚÐ-­rPò¡èOK½¸ÙyºÇ·’#É;$oô¾´éM­—F¿Üص“Þú 6ïT(ÁwŽo™Eç,h²Ø[#0šE—?1ϘJ\ˆôéoÑížþˆ®ÙJæ²~AO]¹rýÆå@ïA¾~¼`‚ÈÍ8ÓŒW‡S(R¸ƒ °š½p¾çÒÍó‹?™æè¿HöàG¦ˆlíR·ƒ¢gOQŠãf?ÿÏ›S¢wòÒgÍù†°wlú_ ÓC EÚ^Ñ+ zXŽYìñØÄ¢½ ”í¡®†{"©º2PnãˆFbázZ»¶ƒ±–ë—´æìÛÉ ºüâ¡’?0¨Š‘p]iü%þ6пåzÃŒæhóDéK9©ù&}½{xx¤÷¦µå·å\îþ=åñÀÈ )™ÿX¢y‹®JÛ¡çNFôä7 ÀÍnûö/} ÿ$¬1ªx˜Â«æÔŠpºg 8È­4‹óGÂ'óïÒCH$%s>Ÿ ‡IÈñÉ£§]è¿y§ëá~0Ê" ’R¹‚ 5Y‰À| gLü˜­*³‚ÝSÖn)ºÒFC<¤ñ¤“N‹‡˜è7pQƒ*B’;GéQCø›q–ù…Ùõ¬eËC ª$ÉjׯÖEŸ(覩Z[ä¶5«¸PÃc´äúº{äÃ-ž°8ƨl¨lÒuh9(Ójk÷´ æog¢—òÒnâŸGÆ}>Í}Ù¥ÀWœ4©úJ»[™L\ÁþN‰´#%"u3h€ ÚvðÐÉûèYÄ¿-û~ &<´·†£ˆmŠ…eV~r6—“®Øä̼%×hB N65¯•Õ¨€i0V7÷›‰ïJâ1‡8ýà‰®È|^=„~`Á³èZ/šzí±Ë:†ÍˆPÇæÄ2tV÷Ôç—d5ÈAÌZ:M.@e„6~P%‰JfäîkIÅ[ãµ’òË$¸(½,±"¬8»D£ÏÖCÊÊ …%ßa‰¾‡ÑÆÓÿõ²JÒf”_+tÄ•:žyËæ“^LÂ[c½ÁfH+ÜÌò¡p Š7 ªä#Ò¿FÊHnÓÒø§Á¼ YUA#LjÑvòÖ“ä­Æû´2a8Ó`\Áp×x\ÄñfÑY 6f!®e5ÐôŸ“ ÄqšGœ_NAݺ¿7ÙXHÑä)²ùÝשãÀ|O)ï3Ú‹¬¡ÿÂÙkpúäºm™”‹èwîìE ¹èÚ|^a›œ‡Î¯¾1QúïLTáRvÝÖîžsGžùë_6­_ºŸ%c ó;Oó¸ÿÆÃusjoÔ7UhKvÕg了^ß\¯h]—ùEÁÎ^Y.« fúRßy[ª#+¼”P™Jõîwäº ¿Í°2™¹¯Wàxÿºï»Ž”S¿äÒK·ÖÍÆŸÖ@:hö¦Ad2 µ°ŠöŠö1èH.±^¾]G÷ëÚÚjyS•úyˆc`n¨ï¯_õÜ×ì›IEfš…„fcGÉwG5ûzÔFééEGÛk›È"«'›ß’ )ÀD 5ª¾âIŸ$"ixY<êÙ$ˆàq¹Dzòá‘î#õ†Ô@ލ$Š_6ÊÀ;JÿW%WR HÏŽÙ–¾#ŽK;·?é(ˆQ%ì¶ñˆ ×D½Vo{«6°úvho—AO®Ó2ÉÚAo$Ól-3‹NYðPB±xžÅž8‘رq'dÅ+2QØSâèŽB(2RÆ. DœŠS,?Ýì¿öñ"S‰Ã¢atͯ„q™+à{Ùz›µÍgENFF.6oC¦"_Y”qŒ|neÍ‘’ΣÜàoÉÛÊÆ¢°½‡°¶æ™Eg°ÙbÿõyV­ÉÉm‚*ÓJum|ãð&RÄqDM_8ýã@×áK½Ç/Ã7 :M ÎÄa¡Ï¼ð¦Ìjc}u“>·B]ÊUïn= ÌÝ[!sü¿Xü&ttÁtá&t±ÇÛV1ÛÓ&Žo‰oë4µ¶r䂸WgÂÍ^£5´vèUV%[^ZQ5L½B¯Tç¨U¹K¶«sÒ5 ˜ée™û²ñ> s3¨ „Q[U£¯¯NKyrƼkn 6²º›9¨Ð”g•’ûæ¦ÒåiÕÀ(‰ á4›ÇÃ$€_fö‰5UºB­Î`‹ÍÇøs‚@‡ŸÀmÀ:*³‹Rôä½{!8 P /:‘G÷GUå¥EPÉ”åÖÆÇ’-ÄèˆãñYíŸs=‹Ö ƒ¹±¸¶Œ1ö•Àík¼À:†|/;µ¾ß·7yN²&­<»8ÇùDTIæB x…žLöNËÒäB£)I65ãtCçÌ9ˆSâœÆ‚“89‚“+Eý¾v²endstream endobj 340 0 obj << /Filter /FlateDecode /Length 5502 >> stream xœ­¤ Îûá¯CÄ”µÎäˆÍ³•t€Ã[ævõûÿ½£„_[§Ñö€·È¦— £7*ð£np?ŽF$²K!•ÃyfFaa‡ááòkãÀ:zíp¿2z-¼ ”¾çï/&" Në(JÌ+2„öÆC{çÓ÷°ö”Æá)÷¦cî ½ÖÚŠtÚk*>‰Ï¬1¦• ìVxÖ>çô‘Ö"—Q.'‡Œ8s!è 3{x-íð×Î4€MU€‰Sïèïé‰úÂZ­t¦KþƒJ÷Y$žÊËVp?8Âùk ÿ§S=n.ì¨ÿnçÏY•Ý,k>áUOõI ¸±a¤m¥Kúï,n…ˬH¤H êšô¾(½_Õi_‘ŸÊ€OÝÞuvE–ïIïùcÓ.Ê€KÒ».½WuÚ9pFÖ­½§¥÷cvO|UœÖÇdÑ……V¿Ü@ie× dŠQé9p‡sÀiT ¨–ÌíÈX3Ëý¨Íýè­W(oLo'6FÞEõ6?ÉLÒ?—©;’GºÆà0ÝSVGð“n0.é†?à(3‚Þ%¾÷F[%†ï¢‰ñÎÉA“+£X+%ÃH»§°œÃ~Ö S³5‘ðB§D´r@‘ª,a($±`- Z™N¸H‹…ÀÂQÄ¢ÞWç€IzÖÔ¡Â¥A6‘Z r¬F<2þ(/ ö‹2S÷‰®Z‚ödgŠ\ï“îžAÃÖi‚ÇníôSL<ÁeÑ›t0ÔìÉÒ¢àídio0@?P6@sFΦHÔ€ö(’¢Ç8CÌÖ(èçFãùÆfŸ£RsA*mûd̂ӳæœ@øž.~± ãI3n¸y&KA£ –QRûpC‡ðP>GÑZê4X!+q‰¡G9$Bë¡í¹¡=L›ÂOÜÞSÀΦ!€pÿ›¾!.ÁÇê,ù< ˵ÅáÅó¡[Äl8]'j9ÕðÎdäÛØ„?†oã¤pbx þa%xIŸØÉ©jk<Dz<•;ó ò1ì0ÁºØtpèщÔ8V+ïg²“ø‹,|~¤˜„ÊÃÇ*ÊÜA¾*Žó&mž%Cѯ¢Hfõ5Y2b){¢K¦¸%Ñ(ç1CÄLÁÙŠ\.‰Ts¾‰q›÷­_¶7¡$Éœ 3„ý&€í(ƒN®itšÁÕRvŒ¤˜+„ ’(‚q„&1"ü!±¤W­ÖÇy9´ö/ 6 UâX4²ï½èkFÜëe¦;®<ÕX³«A1‚-hć„"ˆöW>"”+Ï÷tïVn'Ô‰´ˆ bf¼ñÜÐÛâe÷Ý7dOÔ¹Ö‚<†ä½½Z!|Z»F&.ÝnwËi'ƒÑBÂñ8¿n2¶FÓ˜ êDLÅÿÇiͤž„{»üJ¬¦0^³õeeÙ‘nŒÂ–%;”ÿ‡s}óŠ‹&ý—71K¶‰¾¹7ÅwÉ@Áî`¬˜Úø8ã☕#J†£è¦€;«-—/®]âV¾ñ·gI³ˆù!íéžÔ¸$ÂK+cÐfÑ×sÚѰÑîêIõ=(ÔGω)C`BÌÔŇêºvF1€ýP]r,ŠWºaZØ ir4²— À]f²ý„K>,œ§C* ‚ÛfD¸×Mƒ”ÄfP•øÔCøý*ЏoW^ ?•¢À¼€"gˆ© $ê¶9 ˆš€;£~a9šeþÀùçÆ•ÈÔfÂÜfÌ2Ò¸DRi;'m–‡¦2Câ¤Æ…WéÜxâÇK¢ð¡ _v\ÍêÓã\‚Lèw|Of'œ›à°Dß-ÎDáZ0\³4 G´Q~¸—ÄTÂr¬WüUk1ÛÐ{a†©‹‡êgR¦ø…á·¿.ªMú&°µ¶Xz¢x,Üø©“¾JhDvÉ@of2™5ÏW"6€•fo7̽¦ƒŒ,cTš~⣣¥­~{Õü’0å)Ò Õ!DåDu—;Û¶±‹4HÛ¤¯¥O •òþO»™þˆFQ pg?‘ð÷ÀÈ٠ǀöK.ÿCVB³M4C£aR×SrNzõ( ’3–Ͷ¯ý5e?âQ ®L Ç¡M šñUÄJ¾¶uš·ûšØ*2ÄÕfTضç×U³tŽ ~&6Sly_­µô4¶ú‡Ô‹ûÓ2‘ï2iûžx´€`|¬UÆhÞä£ì/>GTo°Ú˹  ¶žeÂ`‘IÌìF1BF-X“B”ïNœ¸œÊœèzœ¨'NŒ#Nl2–G9ÌÚ›ÉsÅÄQhˆí@,Þ×Õõ Ïæ”g´ø ÛÞè™â¦òQ2Áf÷¬Ì$RkvFxFÿ"Yy¿€EøñNSá]ªãX]öiê§z`Ù“™‹i”Ì]Jš]HÆ9¡ýÓª^¢4û㞨 Dp_g ˜ÔMAÙTH¶Ç¿Âþ\¥ýnK·%_Œq‘Ùœ…c[q³ˆû`ž–¹Ä8+·%›Ä?¨½Ê ø¾ÀûÛÊ “Ž[NîëJ)|Ç<µ‹Ö`.\þ4AbF7äü'hn1h¨ÞƲ‰×ç¡(ÇäµÞæñpr%²x§ú!vǹqnŽƒTvX¨£~µÚãMñ›cbjo*ÍÜI5<ój¼8ø-c¡Í_ö~h*1üˆI'¼±¡ ŸW“g_·f{âòxS³ýb)21kO¼X .:½Mì<¥¥¥Ìm}à®ÛCÙ •GIæPd —‹4&ìò rrÁ$„§MÚB‰i±e}›ÏÃ$´³ëBÇ"¤$7ùP<ÑûHjSjÕ¨ÔÌê:©Ìh Ÿ3ôT>bòÅȉ –}È&˜kÌÌL®n¹ŒiïΦŒk©}É Ò|C/–zF96Þ³…zÍ®\{‰PHƒW?x°wŽ×¼Ð Dj>µ2:¹ZMÚ‘+c8r+"/é\žêî'‰Î›wîX¹M#X9ËI¹6cq1Ù‚Ì-*˜f uV"KŽIÅ «“ ÜELl³iÍÝBñ Çckݪyb‰ˆÛ4^ÙXx4šjc#Ö¸™ó- ܺMÉȘX¡RøÎÏ ­T“XŽ_š)­b°:/”ؤ‹™Q,çñª{áv•ÖÁàùÉÞhÃyг¼p÷v3ë1^$,ܨ\ ÐÖÐ "ª¨Vß§êÆàÕ²G;e¡VsY9éâOÑ[Ô@ƒrš'Á±-Œ«Îê/‹Ý’+éÖA–ÒƒmA\×àÑâ‰ð®MñJÊãjû2ö…÷¼€™ÄM:¶vkRq¸˜€¶È± 2âÊcÉÓë’§&“ Þ„œÅÚzJâ–ó|FD3Þ[Lò»„ƱŒ—\V²ÒÀ)áe6ܺq¹Û²hÅ­œ×dtj ) _äx ó ½a’þZïw÷ßîìñ—ᇘ߶Ò¿[í™Xˆ¦a꼌-ãЛZGuà•νv6vÞ•ÖMiÝwúŽKë´´ Ÿšï´Î展§`sSZç¥uYZÇ¥õ|›vÞw^u–ÆüÑ4ûŸµù®3ýsýùËÚü¦ü~JæôFþX~UZ¯§ŸC‰9ñéÂâÛÒzÓI¯6Uôˆ’Vìÿ~ùYu§ß”ßÏKë¶´>”Öó¸øÞ´:RX/DWµèDÛƒÒª¸>¨¸xY›‡å÷‹Á¯:}‡dÅù\ ([Üì'ÉHeÊËN«¦òûCË+ë_”ÖYƒ‰fÊmg?*§Sëy{;žN:xÚt1ÙyݓěΆ·¥õ¡»ø–ß÷KëŽÌ™Ë×CiÕ¹@Ì~sÒ‹¬`Ù˜µðgT!ó绚עռ—%Su×D|©wS§µu“i/á­‹•i` °¡pЭü½ííF¦ÔÞ¦ªÑ#ìð‡þÂ}(oJïAvQ·{K1Õ­œ>&+táySç=׫Z$Í›Ô{ö~x/÷*Ù!ÊR&²_—\"pí­%ã× 3äà刯»t¿¬óhåûApÓÝî¶Oá+2 ‡$hO28é*µCœ.õ*:_tY“ðî‡îºuÚk xw·M÷è½£o–© ®§RÖMzü÷}aÞôNvÛ=æ¾ b=/)ØOayÄI—ozÌÐ罃 åˉ”ïú“êª÷ ÐÔÃ÷õÛq÷¼îKzﻇ¿êÓ'zLYþY—#Г•?×_Nçü†,vJ€Ì?Y§üXzE&½®”Eß’ß¿Má^¾Êâ ½aðØÃBЯ}ãÖN£‹ïˆUçl7}ö¬‚Gåêy=ÇQߨl8Ãà/뮇}UuÞ£ …æpÕSâ•9‘Â<+¢×Æ¢Q°oû«÷MÓƒé$oÈÏDÿö´+1g]f½]è-Ó^ð3AŒ¸¶R5Wˆß1+üd;èK ±ﺫª¯+Y 7]=À.êÊ´¿Ox½ïóR¥ï]ÆÿéïïRÓÄß‘î”Þ¿×yÿhôã"ŽòIÌM—‹º–8êRê ÇGÇu{êκbtʘ¯êíÒKdr„˜Ýh±6SÁÂDݲ®(ë’#°' kËzëë4U§y2Àu H Bw–/³$ÌAÀ­ˆ¥°óic÷´×•Þ0aô‹FìxTvÑ÷~>U¦Ü«¨%>"až¢.ó^’î—µ …\"O¹º®ìÈKO&×vKºKŠr•YÄ2RR‘”(lÞˆ¯/Õc—*ªôv¸ ¯_ÔÞµPPµ˜\/¨ÇžóÕu[ŽºrÙ·”ÇÄR.°€!d0aQ¾zt·L~z,Pg鞬Ž}èÃàë<ð@oÒ’ê"ûŒÚHâ½:ŒŒíT!3\ˆª«CwÕ¥Ù ÃXÇ“¡œuÔãj˜_0|L«ýDºÇÛ±;-ülâ–>>g&$¦I?uפ;=£Œ÷ˆÐŠÇŽðŒÚ™G3=×üÜ¥J““—"“Äœw¢£gÓ¥âßHï]ÏI뫇£ºíõ¯trX4õÞÏ}çóæIâªÌL”¿íŠQ‹§Ý#³ÕžŒ®ëŠ.æ%u§Õ7í}Ák½¸ö±KºŠ˜,Ä7QüGá<ÿJªt‰uìÂ_¨àÅOªÔV#ÄaM%St­½¥à»ÞÕ?h½lºŠ)w¬ñ (½‡ÄåÛœ¶ŒŒÝúå+™…Ç ¥Þ7i#8F±*jÄ»Pöþr^ǘåz¸„}JýÀâcïæâ9ïÈOÉ k¾€\Ú‰‹Ç:`VlC+NÎéä²óc±™m¶=,IÀºå÷…ªzºf[Ñ'~ÖÈ4¡0-vO–ÞǪ«©Hý!]°º`ýHBŠõé‹üî”˨œ.¢cqQû¹"k†ý’†h?{G·E¡ –g. b[‡ƒ a}"‘œæa ¯¼}ædûBò«TØ+m#ó*PÑz”“ê´ëUÑa`»¾|Áç±0DÉáãô€Î«¤íl˜ŽÙQI9G)|lè†â«2“:8Ž—Ã)Îz{crž‹PéˆÄX™8~w°xÄ•µQ61w†ããäå9黿A®…)ÉÛö™#Ö zñ¡^âf#Bª!rzþ…ž¶@ ßà§÷3 ÐÉçt¬3kŠT‰iðÅ¡†é”!Eî]ÒŒ¹Fð€ÏÊ@‡Äüªò³ç+s5{{ÛÔ ôë+x1(ü¶t3bÓ¶EÊ)<¹T›¿ô^ÔJu*©Ze•xTr ºé´êâ'½"µ4 1éµ8VAwËÜš/ÔàùñIzkŒX|øöxüRa4q Ùø¬hjózÓÿXÕbpöØô¢0·æS˜ ŸÕ“f,>Öýˆ˜*>{:¨Í§–‚áøPK‡¦'¼E3÷+ñ' ‘ƒØSÎRFSàa äúªq±À”Ðu63Ú+!Ù«ÕI2ñ‚‰_û_ìÖ–Œ'î#ѾHà²/CtY¤aœ(Çå¯ýf…vYƒŸ<¢¡Pu¾»@˜uúðB$WM9{¨ËèÅù9¿gØcˆr†“j9 AcÔ KåòöË15åÌjë >–à/Èáz\<$X|ü¸Ôôœ‚tòGÊSûLŠòyUöÒ·ñµIÚ}á;uq„‰ßY|ÁÞ*9dðñ›bÌåÈÿ#©«¼âȪ"©±K…„Æi|‚Å_—ãL?¶Õ°ØkÇ6B[k¥\~ú¹Q9Ð&½Ýfý‡ø½º#³¶â_Ï>CõÈS£YmõÔK<0Dˆ$ÊЧ)!ÐÂSîãj¬‹ŸøÂr¥Ôœ,}®¦ Ýå’Ǩp®gµÆôkp\/D(¿ÞÅ‚Ÿ'Ôv'‘˸à†+Ä'8=Åéý { ³ ôCWÔ|p±å¼ŠfáÛ7É”—åäRìïÃÃlÙêIoª7ú0UÅμÑX(í1ƒÂý4ü¾…j8yþ­Šì?±Jè§øä¸O)†hD¢,>,ßž[‰¢Kv/ذKß‚ÚöY8~¨C¶[rhåé§Þr=ôAjZ* ÌÙ¢b”¾Õ%šÚÜ º < Ðÿ°Wó¢RݘeNuØ]5Ñú÷ÙN6OrÒûYÖ¢·]ˆU Às9â'/b››øœ?ïü [€µendstream endobj 341 0 obj << /Filter /FlateDecode /Length 6652 >> stream xœ½=Ûn%7rïZ#ù=,°G‰tÜd“ݤ‘ °xáÄÉÃ:äÁë iF#Ì‘4ÖÅAòë©*²É*^ZG£ñb0§Åf“źß·ÃVø¿øß³«ƒáðâàÇEOãήÿøêàËïŒ:Tjë­Õ‡¯Þ„WÔá¬áÿj;Ìãá««ƒï7<:¶£÷³™7§GÃÖ(kçqs‡•÷“r›78Öà´ßœh ¯ÓæOÃ0ºisõvPãæþ_œ‡ÉnÞáŒA Ö9ƒ«à›ÊÉïØ_ՃѰÊ% áá4™Ñl®ŽhgG{Ì_ óýØÚã°õÞm>Àp¼ÅwÔ0ÂRgì1Ÿr}¤gøø¬ãY¦ÁñÝ „Ó;ÓáTÞT¤œß¼O•ÂÍàI¼æÑ„ãy¨ôø‚}§u(:6h…ÐJ  N Pð6L˜‹¿£E̬g;&¤ò›ËO p§kǨ à¾ÙñÍ_…ë˜-̳å­#d=Å­'ð=\†õí ã÷~¶ã½áOoó›­“\'Êl™T€LJ¼§­õÓñGÁ–g¿P…²ðÙ/8qqT&LµÞ@tç=Pˆ (¹çðæŒOÐÐyAÅMš¹Åùœ²Dìòö㺂)J,Sß“ñp´GD‚ÊvÏNÅQÙ¬»ð: ß%Ôà´'¶A0”èéœ 7?{3Âüíщ="ÚæI Ðwâó´º#ÎÑ£ÅÛŒˆ?ÑmH”}Œ@WF`çi ÊQmí8/Dù>,0«’–—k–4ÃyF—b¥ò¦CGÄÍrïva >žÙ"–§ð¦…¯òË?Íl•3Ûo Ÿx°@>v®É§ºòH> e¸ÙF>Žzóöàu@;¥í ÒVеH„·Y8ŠégÅtãD·£FxAoþ²Éoþ7ó¾I:”𬗄ZRl]OºKa´35ã\SLšt†ðlwZ3Ø¿-ÕµŒ™ÿŽÓ_Ž0{)P®Ãs䱤»ø‹EÝ0Ê IÅ€7í¥I×b9¶_$ZíAx„jl~k Ñå¹ÙÍR2ㆠmèç”!ð¸:=ØB¼Æ®'qåé¦Ç’5ÓQk è Ì`ùŠfg2! ÙÁrœúœ{GÈ1èE±EÀR«£C~¨µY$úÃíŽÈP§uºO(‰ëúqù­éP°¼–F "3qn>5Ðùq‡³ ÅMàLMÜ„Œ]‹é’¸én—¯*äùüSWð|óšXÕX‰ÙQLðS•8†õ"‘MÄ=üGS½é(ÆÕÆÿpɸò>¼€) 6ò´×QXÙíèÌBi=ðm‹Èi™S’*õ‡ Š=§3 6¢ê£7:ršpƒï´Fµ°£÷x^­&_kžqYO<` ãÃ9Ó-K˜ßY dŠÒ›Žv§Sx±›¯Ëˬ±ë¨]‚xz—/d¼xõ<ïàºK¥ àŸ:DÞ<{`¸á¬ÿ'!‚f,ÿ3ƒ$¡“à:d×ÕÇ¢ƒ4Icdó t3ªY^ð])ùñPØ`iÀ•æ'‰”Ó0ß‚aU˜à Øsz:ç!çÎCXb&¾ñÛ6±:íu¨%Û8'‘]ð’åYØŽÞq<Nˆú#¿2»q!Ù, ¢”xœ•4ƒ‚PØË`IëׂæF%XÛY\‚Ç{,Œ2c@tySˆ·¨K'tÇJ—£×œB¢T3†\B,iª£WJN‡l,ɨþÏ ‚x³§f­ª¢òÑŒ[d+™Ä+Äo(¢¥#GHXÑ)[¼xF4%²9÷yN…\ÜDŠ°Ú‹$p2èÈ]{ê7ËQknž“ÆM_œxq‚Q³3nè΀w&#sì3‰«â/„•ÊnÍ8-X)ý,ˉ{2íAan™ ù·‚&ýëàËú| KÏ~–âµ,´»CAe ú7¤r+°Ä–̨œ ¾ìÐÀU’.’ÿóÈ¡3o¶:‹÷ƒôÊûpÞÙ“0(ÎUFAA‰x6ja漤Wî¿b~¿}Œ½’p—½3#°2Þ9wPü®¦ªÒá&ìDÐAWÞ¥Îä§Šá'•x· J—«¶ÆQýEØ rhý÷Ì~{Ê-Šhóåw£çžníJÑ…ºvt!Ö‘^áEœ5£à:7æ(,#æ Å8•|šÇø*pÿi TýúÕÁŸ‚Cýö¹x8Ñvž§Ãi4p:ÇÜðÉ”MV|GW€Çûf»yîFàõ­žœÜÈq$Æ—œÐh¸-×e ÔzI1‹æ%‡"ÿëü+ÊúíhËCuŒn¦ì}–CŽ5–‹“‡„ØÞ,ð%÷©ô7Æ%øsæj‘èË’%s­g1c 7û†%¨k½€Ë®±Ü£z>’ ¾bràdN\“¹äæ½ C-Óë]Y<ÿƒsÿ«eÎ'Ó9RéÐ~Z0®QÈݼä}íé’ÞFe4/®v¿+ÊÿEø,0/®ÖðÃ݆ù¡¡ë3uŒ6ï=W ý{òx‰ý÷ˆÍ–jÓä(¢¸')v ›ëeÿšt8ØÜ€Ø4Mh X<¥r¦oEýpÁJ=Á÷@ÿ[ Ý´‘ø.¼ŒËßt“¯Ò Z=\$%\†J¾‡åR‹h{úÄa¥zˆ³°àlC=W-ä&0û„¹“¡#÷Æ•D/gz5á–Eåñ„=OÁê’Ì­øàÕ‹ÊéYvôØJ¡ì¬äý1ï{tÄ…ÃK¶â±Ö΢žÍ§,`)ÛS@îæ0ä$Ÿ>.ŽH\šø\ù~è5›æµ¤Å§]ë§Këçá£H¯“ty樧‹ š‚p:ÌðOJO£¯JiÒ\S¹îNK[“±Ë’ PJGŽ,ÁÕe´7^Òx>št\eoAG@W;ÃÐÏ\Æœ—´çFNgo{R»øa›+—¢E*Z÷É!Κžü”„Žw%AAó]‡ÁmDá~Xá.ëœÉ‘C6òÌJ›=ÈuÌ)€PºÍo3)r·œH0y €è´QÄ‹KÂÈ1 ¦yž‰k_5¿ã†¹"îQÍOøÿjgm@ɇZQmØîçáÞ×:!>TÃ,à.7…²r=¥E¦Ì«L銋÷†­ÌKrø÷bÓ Uw¸U­»«DRï⌛³» ±.×ãÂæuí޾éÝeê +ù1 º«:F½È„ã¹9X¦tÀêÈ7Jzö²á¥,펨`Šü átëʦk®û´2cútÒ+üñ‚ÉkçCÊ}cZI+‘ñªäƒ,áEcÄû.,ç%[ñ@Çóµ‚!Å¡‚"@A¼®ÚÈ—A;BiŠ€|-öüFÒ@‰9¸R=v)¿«ôORǬx÷>¢A+õ쉢z E•æ‚ ¹"ߨ#¨ªtÉ:`Ô¡¶HB‰¹T éñzt+cŸ¯ü§izÒWwœØ{“k\ÅdOËexU'YRpQI1 ­“«fŽïŽ#*+˼ o¢ß4X¶vÒÜÚ³c¢ë¿‡ÔÇ!Ÿ-ó5”|ŠÙ—¤nÔ`¦®nZør¿ünvÂéæµuòü~›µ––›îx]Böߣ.3n­+õÞÂrÒ *cibsÈÕ7¢©`åBéJ×Ý6Ëå %uÅ_Ôñ6Ü.»9»Qû&ußIÅ‘™p{:jѰ™ÃÂþíŠæ'\^§xWeR^{Û~ÜÉ-(x—"s…|î'°‹íð"®£›4ºO# âex2e£&\=œbvÖ7A~Ïž¥‹ý}ÞNÞ÷m€”ËÈ28-£1ŽóÒo»j€)ö1¿Ì¶øºñÎuݬ®}Úø »éÙ8L Ö©êÛ'è&ßÃeá jÉ–ÉêºñJ¾Îw­eÞ_ƃ}lÜæÛ0®£ ÝóÐ øUÑPÉ¥>¡jÈxr.InßÀÆaÈI r[šìÿqH³©ÄÅD‡4©ñ”ëIÅ3ðUY6ÁÂARÀvt45n w»ôDID0@ÿ¯YSî§\CÈì¶÷¸/¼Ù–«Ð=B·Î²ç [¬#Õü¾@äs³…Ù|²uÿS+/`WhCË¡úa.©ÌIÌÓ³ß:«ºªŸu+˜÷·DƒÖcSQDm.™ÝË- u^kSô,W¤˜KS*8Ù®N{ß0þŽ= 0¬‚×Ï ß„j•)¨H1b4ÈxƒH ãÇ~ÍíáFØuÿ¬ñ¼öSÎÚ¨¾ªÖ•$géáå2嬡¿]wù¾üë}KT´”»wýWž# Ž[JSKvg1”U¥û¦ðíS";kCOz9ÙoÓèeÀ]¿8•‡ìé_G§ùmcfë{ïWÿúSë+-Åû·¿Þ4|»ú¹{~’}U²_ó~—Ñ÷itœF:¾J£1~XÅ¿¿gd¹Œ²ºþUé4úaEn=~v”e~©ž#çA¸{v’ûÂB3ju˜svUîø;ï¸A'€ÁbóŸÉfAI¢š„ÙSÚmAÁõ0èð'† lË9•Út i÷’”1 ø*âá8›í¸Ü›,Ì^¦1ÅÎ[¹4U6Ì$ãy>!«[[MÙ¹¤']·ÐE€0Æ K/T¸ÉB«å+æ[³Ù\o Û*¨ÖòöÒ+hqW+šø¼_«È1 ‘Lóä§i1"Ɖ»}e<,`cQPfÕè+Yb)Þ«d¢ýØ=Æ­+®–źÁO­ìDøÔ­îãÖ÷€gèýòv#²"šÁ›âÀø¢I>…Çéã€3”“Yü|JæÑCQ¹›cDuL20“ǰ4Fdeæ Ef]wËýÞÓ@/ rN”Ïe6ÿÔÑ¿…9ÔIÖ6‚ç 8¾ÉGŒ³*¯ ªmXÆŠÁŸÕT¾ŒÑ*ï©]Q—ŒÈ]x/diu˜©øhˆ)x?•Ñî“;ÕK¨ ê¢ò‡ùœ;Î^Ž{ËðM”a:8ÊXË ÄÏz“΂ê¯ÂcEe~exêD&ýEIgr»³Xt8riÌX:ÁízÒPI.€->ä¿àÒÊ«M‚õ¬×yû´8¯ÈâërL¹›ª~Eä®™Qh1Dبû† y/›¼ãÌ:¡üè^à~V5 žÛÎPºÈzl5gqVa”êï·¨A†´ÔU5l{¯­ã[²L"äÖª-èM ñ­‡ùÞ~Qø#Ú‚ë2´O8¤e¦ïÓ D}:Ö-¢@ÙF8rúnްZ âò8…c#4ú­WØjÂM±cî"˜ˆ^a˜»‚ç*NQj-馬¸0ÊÂx,@N žv?ñ^T•€Ãç˜ØÊ|vUÑYKæ2::‚%º „£©.«ñÉx&"{WdB_ød¡,€¹á¦mzUÅz®Ù_„7“§eÈ`2#a~—5¨¯~ëÕ sk>:‘†N:(ÁÿæšH¸L,’á¹ X¤‡™òÿIŸ–Êû8á’€j4& ^G MM¾iøÁ™á÷oµñ9Çt¦Þqÿ^?Ü@IïôüÊKA¤rÞ+U<­vÙÝ ~€÷l¼QUê-í¡•b®<™ñ B{n VÂÆ;/I“Kµ•a²˜i"s=¶ÓBv'kŸ÷+ùÞ„Iªâ¾"…*ÿ4l [ùÄZ@þQe]¯¤¸K`7×õzY>ÄeÕ¶è•ÄÓÏ?£ÙŽ•^Þ‚=0ß§`[³èZÊÄü05¢=¹Èº–Ž—ÄÜE†ÒŠß?Š(7Ó×¥*ø Õ{Wôaà¸'ÒÖ»m·ÚPz.€°ÃˆúC ¶ÀŒPF¹+9L÷’ cv;r}^ÝàRÊŒcçÈÇɾäpVo•VòpG™}ŽZB5Yj6À¿ñÍ<Åú™ù‘g¯ïá–­ÿõ.Ècæ¼*.(á¥çÃ|?,£é%ž/…îߺâ!hþÆî5DfqþîPƒú©g¹Ž×­®Ü €æ/h¨£ÚUL€§–Ü¥½8g¡s|" ‘#a1i$Ù0}Q3p ?J=]ì> ’ŒÆšJ$Éf€8 Ù^ÿ,ü,ü"ßW çRuÆt?5:ö\Ñ¡óv¹æäb´„(#´ô5} ¶z¿\ôú˜Ñ®c~]wMº2Ãmžˆ{—Ja*§Îýkø”ÊQ¥½s} ©|Ž\@‰]…UKŽçÓ0´ÞÊq;Œ\÷j„~cZ#¶º`:kÑ7©í1Jù—²@ïí’‘¨ú :µv½¦|Œo¬ô[n ›rvæ}ß¿ô˜œ)>€E] ÃŒ¦,Û7}»u¬ 4¶µhÓóÄ»½ ˜c7/Ò™}Ùë±² PB§þ~‰ß¥z_µg9MÌСBY“³‘_Æüý”¹%}<FÖ?Ur!Xe|Üvg‘Ëûεc%vŒ½ SÜ@¤†CëeÝ‘°µ„õEØÉjÈ"<™ÂYŽ{§Ãó^ý`q¿˜¶U”y¡ñÊ3²«Þ­»hõAíŸ*öÕtc7ɯQµåÄ=¨FoDFöfÀ‚ÁÐëd²­%ß'Ôh¸I¢÷ 9½…+|×é¤}Íb]œ>ä3Iç>ËëêØZk>ÊÅZL¾@<·oܤÒÕ.óÚ’#bÝ“ ˜Žk…Ç ÔØ(„Ií4àVíXÍ!>Å_:€ªÎ5k…ô¢‚y¤‚úI„'€J›$e‰½…O“¶•zƒ»iµCúÌ»K.!0ç›%Q…?BUMc…ßîföÍn*ìf¢üf"¨wkB¨èÖí›Ô–㥰«_)B‘n[ÃXÏïÞóÀ—=ð}¨Ž­õ«²¼—ZSÏŽ`&°¶˜^Q´Ý"À+P¡ç>íö ‰ÓU—w8eh(Û½Xhþ\zïÂI°X¼S-ÕO‹u:/Ÿ/Û¬#ËgOÔi¨›ƒ}ºR9´ªÄnØ%66(^úÛ)_ÿ)Š’ ð#Fo•Uæp„ÿØÁ…Oý—´rËÌb4ïÍRñðD¼V¥;}x2 ß²[céÝlYcUb“™©Za¿EŠÔ‡â^ôtW&d‘+%ôE¸ÚI•VQÌ0¶Tç¬!gÌW¡å•´¬OðÁÃs‘Á0v%¯YÇ)o¥jHteÖšiˆ­èF·Í&¯K~2†Ñÿ “Ñ£Q¨Ø7Íûñ±Ø”RRë|Ëù(ÒöZ,ÕÍ÷XiDÈ^@Ya‰ ®Û©&X`§¹{àjôú鮄{ùÉ_—ˆ 0·ÀºÎaÔ™[,‘ÏFec€Z'®,ý2ËÉ&t¹d“ïâcŠ@0µy!ILoºDÙe/Q†õM°nöèBÀÍöùqjï¹PF6þ pF¸ûuöh“[JßÑ Š†ò· ¨3¨HK»í¹!|rzšÏî¾*nYµ±4û´±Ì‰qvÓóI\/grEpÉ—[èIS<4ìb¨u΂àùfl—$`íUÚ]lßTÀf̺|Ùå‡áojk•3]8[êÖ3ó³ìµàÂoLü!¥™Éà3O/igÕ.æ‚ ûT>wRåNU)WÅŽ ûT&«´ZÉçæ‹Èu‡™L••Ÿèê](§×AÝs:$ ~M¡-.÷+È õ="_vU9oøü7 iëTZ²¹êŸP¡½Ü Én•D‚ãTõ{î¬ i÷&ÈùA‘ãþC&d®YåI{ãlüíQ–Î,Ú6^ñZ‰af@í¹ܾ%‡'íxÚjÉa¶øpsÈâJ—N›Su~Ú ?ìÃj]‰ª¸¼P¥5š]8üÍd" £÷A.sÒÊ$- ËEÎØJ9ÇYƒLñ“º(ëá‚¿Õ6´~žj‘E8A%NÛšæÉ1cœ2Ã9™µ5ÊÒn›(³¡È Å/ZçÖX¾ˆE¨Ô‡vöJnöqû¶jbwñª/AÖSŸê¬-e-ڕ°ÒiÅ×9q#\ÁÞéUDz4 …zsáé>{ïüÞN_wg”¾ ]PѤXËS}*ëz"ÕÒ ‚å<ªh)¶Ö‘ß÷ Ø ¨¨)-ÉÓ~£ž@MÖ˜%Ý0º/ì5ÄOê_„ ¢šr½BºxQÛÚÌ^-½rÚQfeù»}˜æ?µ˜ýd£ÜÓö,ãíÌÔ7[{È"ô.ìO•N‰ýëlÞÝê"–*É%£Ç¯U¿ú'¥á„J«W9P³¡VVƒu:Æß¾ë'§ k6KÛOùŽù§ùV€¶ÞÓï?øYhgÙ…V˾æœÛýœ¢óŸ> üDŠxW¥\ØEN$nH^î³ØÍ»ï¤üÕÎD-þdµ±ATä"pOå“üùàÿeÖ¾endstream endobj 342 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 166 >> stream xœ›dÿCMSS10‹‹øýùJ‹ ‹ ›÷À½ºR3Oøˆù‹ ÷¼È÷˜Ãëá÷ÚÜø7÷Úò©ÎÒ‹Üîûâû#û…ýJá÷Ñ÷2÷PûÑäüGø÷˜÷$÷ÍPDDKPû  7Ÿ ‹ ‹ ‹ ù> stream xœÅ=Ù’¹q~¦õžX?¸Ûf—pR(«Ë’åBå#$[ArxŒ4—fHjé/ðg;@2Q@uÏ”b7b{kT"‘w&²þt&&y&ðŸòß—WOÄÙ›'z"ÓÓ³òŸ—WgßöäÛ¿2òLÊ)Z«Îž½~’§È3¯à_9 ¯Ïž]=ùíîÙþ &%„Tq÷ á­‚v¯öܤ¤Ý½Û+?É`õîÏ{å&¥ßÝàŸíä„ÙÝá<£‰f‰)Háa+ø)¤€iq÷‡8!tp»‹ô\…èv×éRØL~.¤sFþ—7õ]t¡»=‚µ 0BL:*âî=IaxE¶zûˆQãÞŸ–6»û:࿟ý+ PÍphçÏÎuÏÓ;ôzwI ÂTVæXóÓë:íywÚyú¡·XŽŸ¯‡3• h ‘"ZçuØï²»7¥&x‹š¸«@¾%àÜo„lEÐ9{5Eÿ·ÒQ¯<ÐÔu;¬’Ýr4oGcø;2 )a”Ôie:}÷Ëü; Éo€A»‹†2\>†°#O_ç§2ª5`R:¡ÂåÙÑ^V‚ׇ)SrPÑÏ„Ÿ$çHf^|@êUÒ1šÆ9(œxvf2ÆÉ|¿Ûå¹ÖÚ|‚2ÂÑòßr÷ëÂ@Âû˜øÙG£/Ép„FI©çÚ²ëëBj?zöä—O²ð¹{¨´‚LÚÅ3/Üä”Ï"Ks",ë?xi£p|éßí v¬Ø ^ÓMVò®¬å$]03õ_á|2FȯÀO<ñyôÓüâ|¡[€Ë²"Òiw „†òK©†´AøŠàRö £I ÊäPqVY¬b¨ËHøóÇ4ß©Yæ”ùßY˜47=œƒ S1Ìä…‡´û¿ý³?ô8ǃî˜Ïñ¾&Â+DA¢àLçä§‘žNû²°A´jlÐ’yG,Ÿ·#Õ°^8ý²ªÖWˆÉšþM×*x[§<¯#^.#¨ð}µ<}=˜wÕwNì®urÂrË þjeßn*¿]Rb|Ïè”7(EÍ’މhkÂ~}rS`ñD ¹EùHz C5ˆ|䜿A* @á¥w%'HûYg*Z;ߣovŽO=J#€ɶ1ŸÖ6t²<ÈÖª^hÝʇ¼y1P)íÙÌêÁ)©õÎdÓ‡*CZ¡H¶ó&/dcfûò“"ðcz?hF4bˆ`£Dö¾—yY4ýÆ6íý`ó逃F“âb´¨E@©?ÓÓ-5ø¨•×;éÖ"ŧ ¥;º¡ׯfÐÓ.˜mIaÏú$šÊÇv;Õlš¨t+Å]g¾G „âî®^ÞöÐ[²&ÌX˜}äJˆ7U-ÝÍ{@eF| §xögp þÖôŒò3ˆ›´>»z¢œ‡÷ÄåÉå“_?Ðq€&‹KÂ:Âe¿ë-&H(GÓç·ã)Äê|Éñšö§…Ž“ÐdSZDIŸ<|S°Â$…á»"”AU1‡| LØ^ïÛ °,5moéùigÁrÃÝHàù´? YY»£CÂÊŸZJŠ›<ÏÆH<è2Œã•{"ËÙ2kˆÐÞ€ÇÎ˱E¹Žy–EÎ+ëeädcÄDjŒ¤ØØ[ø:h/'ÅDÃxÀešx„ŠDãVæÛ¤"Øgr~2ÙÆºéðG^iÛö¤`'¶lÚí8mÆÏV”Åî:þ@Âæ%`hð¨¨|ߣÆîüD^C”’KŠo2À XY‘ˆNMÛ[Ù$†Ä}´“_ý5Q ,E¡Á"²– `i'£¦±˜¼ ‚ ™79>PÈ­˜„EbäÞÖ}Y[ʵ6îi)*¿Þg¼*°:BËYnèÉÄ…´Þ•Ç80óWKºÐp土UÅnd¢$R¨ ÚÕµB!èsèMÒØÉ¿Z §BÔlÃ]ÍÕOµá#•Üѱ&ÍÚd¶3ÇSÅ4TÀß&P™ÌÔ’Ú6¬oÒR‰³Z.É<èù/ä0ñh>²°¦× [’ç¹ç™öÉòlÀºÌd)Á€®ù’÷ Ž‚[«Ä ?Þ•ެ ôafXøN@4±áJeNa¶à%ûlºd˜è®"qŠ.ÚÇ)‚r'Ip©¾ x×hJ#ôä¢kxò{ûƒTºÝWd‘gË"ï™tï„ß?’_íO¾;;¹š^Ù†‰9š›}4fVÞæç"ù”‹u?*îxW)šÃÖã¡yžÒ ¤Â" Ö^¥ô¼S±§•›HQñŸíCZ/6ôüÇž×ù±’è?4ì9ûqë<Îò1×ëÿcAš³! .Èl‚:ê¾^Psü>i7ƒ‡AÜ8*ìÉPÒåfÝ}S)i3t>($cþ-ç5¿jèg3 ¶ö¤ÜìZÔTΤ7jx¶1x[²¿àÒñ(ËMÕ‹«¨q#¸,hbÁ¾c$ÜIîqÎÛ¶_áÅj‰OÑ…H¦&°!æñ¦eY2 1i§‘YpClâ'n¼áDËm&NŽ\õöôwyÌ55; (7”;$Ëô–Är–ÕÚ$Ù¸„j~ÓØ{]¹Ô3í4Eίt*3·ãsNÉKiƒÂ(ƒ™=ܾT\^z•ý@9Kþ¢rŸ×óÑŠˆ1v ¶fGûŽ2ÍT„'b³h5´<à`ʽ[b$+ȳ›€Zóx!øaE61åœné˜Aâ(6Jåñ{jϲ ,·¨ñ½˜.T¨ŒtùÓLO%ùsbVa’Í­l’êÜ‚æ…"‹ŸtžßžËMãÂSË“ÄüO*ÉÛ Ò«Z2¡4nüJ¢QÝ¿ªYcÓúGÚütªÓ^7g»²WûŽö 8È¡­!}P¡&æf»AŽGnúê˜iKPqQ§}C÷¼;Ù,ÓŒYÏ1&f$‹—%„è<|+ïXÚÉcö•ÅzׂÐ:§– >ˆ~Ý/ð¼å‹439%c‡xQu©äBb„ý!Ü캦ª˜ìiDLêÅpI=¶Ñ,}u³di¼y’9`†o[Bö *°¢›#Ù¯MU£ô$°ˆóËDü4þñÓ#~*Yf¶˜ŒM•)À>Ú):¦Ì|átÙz3\E`YƒS* w|™{\0ÏÃINtœRw{z¾ -†‰o±?pÙ¸] „`8Ð'¹9ãØçñú§e‘ûŒ(%Wæ>åQöXÁÀWèæ 8F›Ò#}H„`rãb¡GâX%¨X †æäAjŪ5™ª=hp€¸»éëŸÿgÀùØÝ¿ï¥ð©"ék$Í àQ„Å+_ÿüd/¿H mïf •‚’›fn‡P˜¼¡tÆ¡ÐH}»Ÿ´(î„Ñz²r»ÐöUÞÖÇ<*g6 Èm¤ð}1ðÐøëü¸qh*š$öÁ™S.Æ”l‘ß”Ó(Ä1:¾¦ÒñUfðÂM$P•÷6 ë²£ÌAºf>J Q‹$k²x*ø>'&×KèGóJà§)s¦‘ŸÖ¶˜!æÃh¡ýM™ð6ÉVuCŽq« a߈ë,Îx×Mi«2š°’«3TýP݆t `?L‹Ãt½ññJˆynK0˜Ç„·z%Á Ù.i°P±v÷[;U[âð’>Ÿv ïÑZ’›™ê–s¤«*x\dnG<²šçÕ¡ö¸ÝxR1Àë¯ßl–´8¨:·Ì{>Â'¨¸ŠúSöÒ—­2Ø~Xg~='9iä¥ÆæØ¾ÈËÙóU,Àa¸¶6–CŒz«XÀþ° ¬j.V<¸TÜÄ7&YP¸²|VÅ3QW…OÄì:h”Tè7Øx’%BGÕ×y4ö×X¦dhC:ò¿j…ÂìÉ€´­\C ?ms‘n¨n)]gS7Í6…,翤2k2¢¨y2ÂÒ÷%uQN%*ÕH@4‰e<L¦”|–uÜk½<Ÿ“]d å ÓÏèÈÑ”øn.²02ðHÏ›¨†V“•¾‘,år¨4KÄ~#i)Tè%-?Gj ¼_tšÄ\u|¨Ô÷¤È³÷ ¡®J-áûªúÃ&Ž0÷O¢"½“ŽÇNzðÕöŽl¦: „û¸löUáa{2cÚl4)‚³}ÍÏGø¿¸þ|‘Lme~Ä ï\D\…ìF7Miüüy3ÍmHª[êD† ï3l˜@ÎM3Lh+«ÚË(A .¢  [} Фo㸸¯pJ÷%ZpŸÏD6£ŸÚÈ…:"dMÕsºîª“¶òe:m™/I\9™.¬ÂŠØGd…ãðvYšµÖ¬guñåæL`ªì%™Àô2šÒ}XmŠšG$J*wjD²n‡Ô “Ah„ÐütËfNhò›BçH1~ÖVT®­(UÏõ‘)d¹û_†G~M§L¹é"^+Ø}¿ú ½ÔA­½xäR¤‘ùBbÛÅŸc ÍásìycyòLû¨*®(‹ŒÌm‘œ€L\Ýä§niDu$•vB¨{£Š¢ÊÇ@^¤{&7r‡í“ -òãû’ó˜ûîû‰éÀB7¿pšvéD˜æÜ®í#Ë㌠»±]8hé·®õLÝX./?ÎïM…$óUæ‚‚G•µÎ¥\ü•‡9PÒuœ6¹Õ7àl’Ž_ÊÒ4©;Ÿ˜à\ý€4k½‚wmtí·u•´ ¹þVG4±Ë¡+.‹¹˜œŒp‘47¸…*À¶#x/Êf ÷|EÆç$;÷‚è¨Òrl#­·º}À2mN*§›ë'$Fc Yî.åFzžpß ’„” þuï¹t}ñx³˜-u˜î`3½7î\‹ \Š*ÞIÏ Ètd¢®æ4>}Ô“q¶õžÁQ’óé7²Æo¥Ä¤Â`¶_‰Ók*Dh!ËG¬¤~ÉÍ‘œ.¹›oÖ«$uÜï ´xReÕúW[ìØ£N‹ª)yéw3i-9›¨`«6aŠÑ<>}¼ÙZSÆ^ÂKLM…(ª´p=¡^’7»Iªß‚…éa*á²]—ï½0êAªSQN¦fJdýûD¡"™¸t[ÎÁñ—(òøi¶V›>ë¦i¦sy")ÔëùìX8ü!e)TÀ|Ì«aå?Ól¿¿Ã>´!ÜÓÚ3>¹æ¿i_c™ÊÀZÌ`Ò]zj < Oå­—UoœÖÉ-½¼Þ7^C5Å}nú-ãš‹l8/+K=– ˜_Õn`”2Æ«7*T*DóõÖœ!Öåɘ:lš Õ·jdÞk†9*Ø<¹“y¾ûg¨YUôäuƒ…­NæmC‡Õ4ÚÉüf_xË´ß“õîɇÆHYÝÆ¦¸{C´Ò¤ÚïåÊõ³:éWdÒo–I?Ú6í$(7[?Öch…è|Í·Å¢/+X”U>Ôö~ÑGAÿœ~ß;§j{Çð¦N룶NúÕ2é7uÒ1ÔZ9IÙdŸV*ó/ÞõÕŒévë)L™êæs5„4ŸK±¶¦oªµàuwô.ú8bpWÊ&ºÑ¯âµ´­mM*‰¥ {ªf±¨ƒi¨Èÿ®s6:ì¤jJ!9Ñìzpâ¤W×ÃVÊz¥EçŒËqeŒDìC‘ÂéÇÖ¯od<ºé¦5y¬K¿NwòØuË]Û°<¾b4ÉmO¸øt bq #¾œ_’~Ÿ©2u%x °-ð 1ø4–Vj¯½¨šAi•öøêšŸâu—Œ¶Ú5¥Bú¨Ê˜;¢ï\@´ÿüá‡^j›ÇD¤ôÚ>uºü~ÌïéͯÏ"‡û-m,ª¶%kÊæ¸ñ”š¢’THÆ^>¨¤à·¸ÈÕ– Ü(©nŽÇÉﯰʈ"]•ǬÝýbÏR©¬×n6xÊ'–v³€æÖ¤lÑy;Awb#ÛÒp‚LÚ8ó™™È'f¶.F\®‘–P*:7Ó;ŒÔÜ{LHî!À²lCÚ ÎAË{ɾhs ×q]6c¤mVÁåHâ•EÚX"?º¬ƒC°ß[Ó§k,qä÷ôÚ´àL§;Œ_¶M¦±ÉìùNƒ¦ TK ÌR´±OB˜nzÈ“þ)XŒË‡µVÝÇFÁ›AGˆË!'~̘ö+F¦ré–Î4`)ê„Ç@ ¹¬7£xõу(, ¥Ž.ï¯mòš€/ËŸZ•ÞÚô ¸`‰×!K§É¡¹Ãº,>ø®eÇ‚"ÞU¨v© ì¶ X Ávº Y§XA ‹œ6éßt)×·›¨Ë2u†©r…vÚLõûZ«u“8(Å@åyJ€"†µ&5‚½f£Ÿò±(°ø§¨Ü™Œz ¹Ã÷O8[³R=xùÔX[Óå鵪O†ÞpI ]žúXq¿„0c=e×ÅÞƒ_ ¦”×|g{fÛa Xìüƒ¡¬Ê“a(òåïª~R}ÂA'|ô…HÌ€HQq[°É6}¥6ùYHÌhŸîL#1¿IbMMÞÚ ¢µ$wYRa‡QBaùzÜLnènÓ†\º;Û¹û=n Bʽ6®ç0®H_üàÆÖðÖöËõ‹K–‚—¡, ý|o% lÄÞÛü'ùÂÑ Úcû›,—ôUoäùKh7©õæ¤ð0¡<ì[EáiºØÌß'û·'Ïþñ·Å›Ò°Äò ïÖŸ`¡V œšŽ¬RvêT†#©÷9ìê“ÝK+ãñϱÌ.‡{ݽ¹|û®ûE= rÁd ïk‰^‘Ñãê¤")ÖE›m¿_ï8(5ýNÙÛÅÉ¥åÀhTeÐðZÞ²™Bm­×Q汦a¶»Clíìɇ »Éú‰·Ï°ÃG}2Ö. *4T³>>Ÿ±]òÿnÖM&Fì-þðOUœPá_ %ÞÃ>ÃïC©¹ÖÿT3¿W rxÐøíò¬¿O²d|ë<ä9Xš?ÏÉé½tí¼£Âh¬‚gs:* )®JÁ5tAJ¶~]GqðLÄÆgh‡áEç4öŸ²@к^¿@hФ=»œ¶Ñœ)|-"uþîBiaÂPNñ¯9¦@wþN›(cx4|å7®$%š2&·øyKõmë0-é‹ûÊZïZÌ<ÔïàGò¥Ç{¿ ¥8ïm–m®b…„ù°dqU1s¿/¥ŒjÝØNwÛõBëÆv½Q¯ò›xP4q|€ÉMËwrÚËØ×‘@®l]åå0?ĤÍÅ›$íç2ïwh†…«¼BuùIðÊZŠM3f¥­zr·(ݶߕ~׊­FtOJ‘.ìµ~´¹# Fi$ðw¸¨ŽÑß¹'æ'­A^œø/6LSR•ÐøšX˜€AÔؤ Ãvpˬ¾šSüq‹°V*¡«Þ¢—.2¿XcÚº³î×óã¨Béø£Dªã<áãÔ|&cõÐm¨/KáL{À'Þ{™}p㮩¦2iLàÖµ•gï «XC'²›:r=¶&÷ç©øëótG¾NªRû÷Óæ4 *œÛ|rž&Ý zíÃpIÔ-&¥­£RôýòáÁÈëÁyõ¯\”T=~~}a+Z© 2|5–&žöÉ"£áš ìçúd‘Q!eß²h­íÜ?éK÷ˆZ)eXLª¦Ñmêñ¼{À=.ë&í"‡ëégÁI캮_xŽ • ?OÄS‚}%¥å/ÿîçØsj»C¦ÁóAqÄ|0©½:@ãúêtzu²¥Ð6nÂþ%ü|ë¡ö#Úþ³œ/XÛP- 8‚_àñcc`nþtO¯A o—ü ¤çù‚ÿ´Žžd6–{`žy¿å/HöžÌhüy¦$6ŒJ_|S@×8A:÷Ë'ÿn¿±ìendstream endobj 344 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 144 >> stream xœcd`ab`ddä v ò5420q$º»¸ÿðcíæaîæa™ýGèà~þ= ÀØÁÀPÂÀÄÈÈnóŸÑÍŸï?ãË2†Ûe?„Ê” ø^õÃWT³ÎÖ±[‰Cë–ÞwæÏ–^ðÌéýo.9ámí]mÒ|r\ÌÓìy8»y¸ºy¸»y„6õ)Ñendstream endobj 345 0 obj << /Filter /FlateDecode /Length 2624 >> stream xœÝÛn[Çñ]èGn P…y²÷‹Q·@ƒM<Äá[’*IILHI¡H¹zé·görvgçˆãÚµa/gfç¾;³çç ëø„…?ùßÅöŒM®Î~>ãqu’ÿYl'›Ÿ}òŠ;=á¼óZ‹Éüò,Ñð‰ð—wÌÊÉ|{öíôÕ9ü‡a¦9Ÿi!:ïÜô¢,n#¤­žÞhY  tU M® ´¯¬ÿ\guñu}7-`ÑÚ,b€n ´,Ðó~›y‡Åun tY Eö•øe·æ]²Œ¬2Ö­WÄÖWhú&·~V~ŸèP Ÿ"¤¬Ì»è±@Ï ôÝ9¿ŸqÆU§”á“ù—gó?½³ è¡?xëÝè²@ Ä%ÈÂ]6á.|Ç”œÌ Öqv2_B°ƒoX'½á ùçç3ÖƤ3°ëš—ÕUYÝU²‰p‡V÷eŒ;Ó\vlWß”ßW¤Wu3,ÍuAXH^È0ß]AØ’’/+æ{1ÂWC¤.âïyuCò½©W¤q®I“ÜV²„€XwÏŠ{Kà÷®iâ=iplÒrKÒà§ 3ë]~Oúé·kDœi£ŒOÙùÌ[£;í§<®ß°ˆõZ+ß§ë¦2½ )J¾B„]q‹‚¾‘/ e°x, $=’¯–“7’ï}:Ópã²®ðcPpV¯^hTEy±'¥ÆVå(-?¯tÏHºG´z‡l@’…Â3”ìÛFƒ‚ú}¶77 ‡yÙâPé~"3Kö¬Ý÷“WŠãªœŠ±ëãb°cÍ)³ZÀŸäºô Yޅꜵp¡‰yŒ¾%Cy‰V  í†LÖýÓÚXjßK‘R[0ç§ÿ£ÊphòéHǨ÷ž3—Α¼ûH¯;ÇU uÆ™vNGaA©§¯†ü–0jÈŒtpç>Æ ÷†)Õ;!ŸWÂ+Ÿwa^+]¨Ta{ÁtBb‚)Áåër°/®bÎb®“ñTN–#"Ú‰ÔìÐVBuÞëFl0¥0`Jc±hÈ~h§ëg•,¿áàJUº¸!€‚[ÞJ¹–˜nD)Ìq™6b|ºYgorR4H±ðÀ¦D0`/<6ñ!Þk¤Ð ‡ëC¬á·8Ý w[d&À瑃ÓRˆ‰ì¸ÖÀ.2ûç0ºµÃÑ=ã‚Jo&³†ê÷1†ÁJ,S9h(:o)Ñ9ˆúp.wÖƒ4HlãâœÊ£™‚d‘F•èLX«IÝ«“‚Yí+@Ÿp#ÍÐZggç¼Á–Îa屢¦ÒB´òAAê€Äôáê:wÊ5!¸‹Æõ’»Üp%aÜ~Ѧ|Â*‡sZú†ý¾²ßE…,3ºÝéß5ɲÑMsÙU¬ó²”Ão²×|£ÐQ=zÞ†¸¯è²w…¿a¢½±éèï×q4¼@ ê¶AÒÌæÞÑçæ‚ì‰e±vÂ+¢_=\èm·Ñ¹—'=ÕHYýAwI R/tIï¤åcξñfïÓÌ8³Œ…D€äJ­²ÎG2«øb¨ CI®òJ¦‚Àd¹yâx²õp…ÊU‹tA@ýo€a û3R [È4©„®dž$³ÃÚ4¬Ŧ§+ÄCY\éþðÿQ!Ó²aš’{Ú ™çípê7׉ºÙ\'>î™Y(xa¡È:€J.K†,KÀ:h=^–ø±[[î*B8þLPh†qÉÝÒ­ H.¹ž,Úokº÷ÆÓÇ“¦-ê¤íe{ýhÆ7Èp¤Çj|r3àóµ t”4†ä«G¢+ÏËá,ðƒ+Tyàúë¾®JÊFca£æ¿Né1?‘ެBŠhgvT£FIä¦!Õ4¤ƒ<þßMgÁdΖÁ(Êõ’k‹B„Šôè†GÌ¿¢‰4¬sê‰N7kÆ;]ÕI«Ä‰~¼& îÇ×Ô]cÿÔ¨-7ž#5ÜIés‡£n G”Q]šÇŒ^ãj0zQFÝ`‹ÛëÁü$raGn—PcFfÚXÓ»f§îêÛAl؉û0~.ì±\‡ó:JØŽÀ(Rv•÷cbh½9šsg5ÄT/MdGÐ׋6fÜòÎj—o`á}¯¿× w3 ÅVÛDñµRÎöÆ)ãÒêÍP±I(øaÖ¬½m´Xb‚á?Ö)n‹ýí±zÞs7ŒN ™½ެTŠèdé½d"èÎYÝãÎ*nšÛ &›G‡ –½xð !®7Ç¢¶e2Ž÷í{Á:!åçŽí¹°ƒ|Hä aó,3²ÑªÉƒê†´FJ›äÕ`c=Èš¶"eìß õh6wz%H1˜_óp/‡SVâ¹ ‹¿«Õ(OÕe;UO›Þ£°UŸ÷ƶ8ùZ—•8Œ#]jš‹L¦¹ë‡ /÷–7È›Ø Ï; ¥?ÖcÍÜña|0“þMg„Ô7-Ô/O|úô.çp’ìHÛoêɆïpõ\? Ü}t³»Díñ=ò1+d÷õvúééC™rIîVÉÐaÑÏO_ÉVô¡ Œ|7ƒÛxTƒ»Î…W›hð¯è‹6-u¹£÷\ÕÁŧ¤ÅÑÍß„ohÔv÷§\‚܇Z÷Ë¾Ïøª‘‘0ÜMc¸áEå:Çv:ýõK'½# ‚Tß{WÉjséŸÿNGèžÒì‚qäå’ô*ºVã{÷¡ lÕJŒ¼ìý³"CoE†ûª ½^‹ÿÔÏâF"³^žëêUAððàyvIº§­<½4/«4”bwôf•ëðúSVˆÞ½_ÓI{AêX¾3M뤂 {G<íÁC-¼ÚH>ø¬ u™xàðÇ*Â%©Ð–èjRÜÎÍÊêkšì‡X¯ð‚ÌlÉKdIºì“d‹v·td>«*Ó‹A¿¤5¤O¾¦Ì&Iþ~~DJ¥ùHŽTQïGV Ù‹AphßYããáÏšS™Œcêf0ò™Šnlõר’¹8ÓÅÉt‡šƒ”–úÃj×ü/Ë/ë2ëß-G†‹#ã`<‡®«ºòmfo4cªÜ ¸‰úºÊIn²Ò)RLÖr{¢Ž½“uõJ¡CšÕ‘oó.ZYÔ)C«õ‰Íš5÷„SFæášô¶¬N´”Õü¢1;RÁõ1|\o #þåZñ4Ò?ù(Mº¤yU"ýKò­3_IFÊ£”s.åɬ†›¢‹Œ²C “ÉÎø¾,ˆ–vK4¼»=¾§Îx02—ZAŸæ;FÞñxIÖóÁãËgó³¯áÏ/‘Àendstream endobj 346 0 obj << /Filter /FlateDecode /Length 3311 >> stream xœíiodGñ»áGŒø²žeç¥ï#b#‘(!B‹DKHdñú&¾â±½XŠøíT¯»êM=ÏAB`åCÚ=UÕÕu÷«ÚŸb ‘þ«ÿ?¸Ø‹“ŸvdÞ]Ôÿ\,>ßÛùä[ôBÊ!Z«{Ç;G.¤òƒfá•„׋½‹ïw¿[ŠAG'½Þ=[®Äà„ÐÁí^À¶‘ÊÊÝ;´{Þvo;Ú>¸lGh÷ khëåÊJ38©v÷ú.F[s§!´ã¾{…Ðn„·ûž0ÏåMÛÝïhçý¸WXRmy‰(! ,?_w¼qÝðð=nÛîé6ùÐݶþÛÞwVÖ‚Òu\¬TBT`‡ ö?u’s î»gm÷šH]¼]ñ Vïïì7€ö¸5¯áKÐÔsÕa+;pK^9¬öº8?eMÙî,݇Žöfœ=í–½ú>wõÛyí=híübïÕÎÞóïw¿âù–»Ù>Ëâ=B{½ÛðŽY­Þt¼ p×ÎÉÕš¼õsÄšÞ½G»œSþk$µ?g™#>þ YNÀ‹Îì!«ÿFn^vn¸‹]ó‡uª¯—T½Íe‹z_ñêåÃñ­ÂÕ×èçħÛÁ!åwÚ§ô.ÒÆÁ»°X¬Œq²Ä¡/Idg,–OJHÛ·„¦¶ïXj‡oèjCL`gì ኌh·£\ïùdØÇóøgþ\äwŸ¡íŸ9ÝüŒñ&Ö³¢"·¾ˆ|&yݲVÔe€B88d5Å:ÊQÝjVú錼‹8„´í—}[,áÒF6¦eƒeÓ)k`€Z®”õð@¶Âb…†…w]åÁÉ]IÌ­AHOu<Áãu.#Áë—£—µ®Çèq¾-™ž°úaÃÎ3úix/;YЉuV'õlM`’z\œšQ°e%#ˆAÌj(?3,(tX° kF7¢a¹ ‰òšpª§V΃'Ï*Z ¨<³²òòHc ÀP7*šÞîÉ–¥›Êˆ­µ¥c=+ðŠnKÅZŠ'–°é…)Ý/\uR+„”×6Æàíh3/³^»`÷šù˜È{TÈo_‡ÈTØD I\ x7æ Ô¨ýПãeÇ{Þ?­•W£`}HŽH?°4ñIÏpôßâšrÛžaÞBÌr<ôÞ ):3•B’›A"û÷¬ÿÁ–á3o‰^µöc¯?°¨!/²„ÃþÌ›7ïÄ`¢:ñ™QókÖ.;Ù“­/Õ»‹ëº‹‹ÄR W5œÊ¦UÛ'߉¿Þ(¨\0cüøæò B;ãòçER!:êò‡˜ ù¥:—ÍΕ¸õE—m%ô¼×!¾ö‰ÏŒNu•N1R'¾a” R"lK~ª„S Rxe‰›•ài¢ªÜR(a”ÔUVÙ Ö… 8œ fˆàƒ§ß‚røAE_%R ^W?)\:á :Ù—u£/ßÄð¸Ü iD£C˜ˆ £JáºÓ%vþ«² •[öÏ~Eì5%%#ý”~Z4¥91õñÜ ªF!̽Mêôqò{]â”Å«|èG'’Œ€*ðbrœ÷ÉíÄEK2ÕàÙõ#XÉ›YÛ&ŽI2Cs/O_{ÀB Õ“´ìSrˆ¦e¯³àfõÎGîUFÃ8µQÑDjú÷¼çKÄÁ,8É»'X43,—‚Å€ôS Þ”J™Tù¦£b®hh’ÕHNœéüõvšîG~’nƒ€íÓLŸp>õìšoÇ|š¬1Œ>X‡VÇ9×GÊE.RŠ¿àpÓCh¹ú»jצ~K Ê &Êô™/yEô-¯ÃÙQ.#q*›­º‹ýL»Ê^@¾¥ô\<`ßx¨³Ä>sÂ`S$6Ô³ÈIWòá{99dCp[  ü1¤¦@Ú¼NR™Ôå£1ÐãæŠñQ°ÂbÁ^2ïâuÊq‰¦ªIYi(Φª:Ó1Ú(}È!f¤!*»Þ®Ï¸¸¹"ÖRìCO®AÚ J©‰ãÎÔ·XAć‰á#kO²OeÛÄ2—ÁD#§:¡gjSJzòr”Ú½w殯-'ñáôöià"ÚüVÎÕ¬£vÝ$KjÁé=ƒiÅ­ÓsŸ†xØ6=gž%ç=6=×çvþ?¦ç «UÝOSÛ¦ç:ŒÁÚ:U£Vð]8Ï©žž¦ç>dz©T²¦bxE³þß¹[¦çë‚D…ÇÆ$Ÿ¦ç¨Ÿ¦çž¦çž¦ç¢ùé¹1‰ÿeÒ—ÝÒ±Ô2Íš¹Ö€È݈Ç;Ò¦–øcMøGfÎ Ö·ך7K¬´¶û%¶ÍÖÅV>_ÓN¥ãlšš‹#OL ´ät˜´7:HeòŽ´&Ý$uúLˆO(aôÝ>_dA×Ñx úòßûô?–i$M;>¥Ch´Q› Ñ‘vÀA!Bv…¬¦€úµ‹ÎT7HŸnëû'/ëlU¡ô‰eˆQ†ÂXƒÅõ'y+8<»(­·Y>f–N{;DãÒèA™2ïöWt·#Â9–òdp£5›ˆ^×T¨:•'ü¼ñø¢6>jŽÌ,hzwÕmg#[;™þz%ÒŒÙ/'NªÞóJî—¹’ @$’³SHÑ2͘)Ò?«Ãµá|VÝTä²÷·¶ïÆ )òþU7ÔÒ$‰.s@G(ïsäðÊ·‰CiÛ¤O ä“¶¨ ¹ÑM»ÍißÇ4ùñ®³’&tæ–6Φ€Sc™o7ã|–’3È=I@}"‹vB¹¡Câ³›#3Îéw§¬ÅØhå³³$Ìt‹5AK5ÇÚìxF’¨n¢º$§iPŸaaÌ6´¹Á…TX¥s‚HÈ_ cš>ÂŒ».‰vú× tX{e™f¶ƒ hšyÆÿ¦—+ædñ¼(ŽyŒ{œó$ƒËMÎdàö AL`/¬“Y¡âp4ÈÕDúHÙÛ ^ŒÐ†܈»uš)ƒ„†Š> stream xœÅ[Ys·~g¥òöÍ\–vŒûpY®JËIdWb™o²+¦v—GÌKÜ¥%¦üã `fÐݳ=;›²T.=Ñîþú0|;œ‰ü¯ûys$fGod™uÿ-of==úô• z&e­U³Óó£–Fμšyá§üìôæèõñ«¹httÒëãõ|!'„îx“¦TV_¡ÙU}²3´àº.Ø ÙÏ`üãé?dhŒNR-¤iŒ±IUä[àˆ·¼/”u±qÇÍ~7_X©'¦[³¢bngu¶òUÇš2VÂچ𞧺,¨2N¶Ê,€Ø!â¦nѬ­³¦S+Ñïeýuƒf#"ª{ÅLo’Y–@°(X ß…Ê'dè$¯ZDäÔÖÕNQ˪Є˜ÌùÍÑéÉëã/ç¢^Wês4{ް¯dK´àª.XWëg·@¶Çƒk„ qýW<í–õÇ›:{d[¢`5ë÷,·Ð5€>â‘=T²;² 'Ûöþ÷ËTx?ò2þ›ß÷‡ãJøšþ•3ø¯˜n>ˆ6Þä…}Gþ@9Ÿyà½ܳ&ÏRµ1BâÔ±Á ^/`7äê)˜È!Òå!Of’ÆH@_WÄ 9¤QVˆ<_ˆG¥ 6ÿ˜í,yÆ'hú¤ÒP¨%£M (j.¨G&Ž > ^˜È"è*‚W]T2ÍC¬V iòbTHÜ Of‰E{2f=7› š­øŽvÈ’|"[òû-XhLcãˆÜŠu Œ™Á ³ P«¹$|32›TO9´&aWËã¤7Ld2ï Ìrobïñ—¼Ñï±Ñiª3RªÜùŒ¨.„‚ZÙt .% ž¯TÌTÓâ)š}áÛ­ÀÇ NO‚¶¯‡‡ç&W[–5ìyÈß  ³ïê쾄‚¨8D¡ËEô’Í÷<<`ɺëž.JÞqòˆ‡’åkXwÒ“±èð—K}Zü~{Ë"±faE¡†ÀÑcÅfÓKˆ$¾ñöl¢ö 'Š–GFàÓ-Ž˜®h©)x¥âŠç-Èë…gÊ Îx ˆm÷÷ÀšµÐ6ú „gð‰˜Ë[—y6¹YŒT‰?6‚qS2Ñ=(Ö-̈[|dë¿ëóm4JåŽ u,¸ž²>YÞú´Þg}ÏÌLYŸ/|#¨úzÔ|l–_8P×&ý`É ‚ƒ—7¨›h¡å(x{alÄi¢SL˜í÷aŠñC6þäEÒˆÛV…Xqp<†ÃÇ!9æ1|²1þ& ¸féD&P C"âV¯ŒmŒÁÛ>޾‡•¸Á¾¨{bP¡Á>' ôÅ ‘p·mj7M`™Êí'XÌŸPoúIŸ*¦ÛrNKôÓT¿[ùËŽÅrJ…O`Á$3ËÉØP½V8?€0+D$©µ·¡w£}[^mÈŸ°GRÉ -àRɪ×kÍþ+õ30‡fmÈß_!ËÞÁ[aI#UsÜ Ck} øS5å†6>qΧ¹Õ+Ö:7{³ z+x$ør÷3î욈UÕyEr\ÇTº·hÁã„[Œ(Is R‘çæºà\.ü…ßî¿\TðîOßsQØ\A8f” '5 ›‘ÈQ–©žñh^Lé€=æ Ͳʼn'GCeÅ6*ñü‰¿ív¶ÿÏY芆KƃوîqÏÛìÖí¯97[S„{>)Hʺ=g¸.>}e$~‡U²qÞµNój%„T±í …ðV¥YVí|£¤)¯DBŠ`uìÌ«Dˆ%²eôÂÙubâœÑ&?QfÊ ú¦²¬>ϳ!íeŠmêjBZK[ÙLÑÔG£C$”ÄÈ5>¸öÑ­“þ±•ÞYad Œ–hYö`%¥vÝÆI%5´%Ñ:¯C›ZÚÖœ>gmë)ýL´/A/óê „•–3~9íQW 6½…ÎgP$ÁÙ Ð|0ÒJŒ5Tø¼Êˆ`”ëìÞ‘<õflm"£Æô>Ðm|€l·®ª›ßΕkbÔ3%´Û¼"–`Äö`ÎâmJ*$å÷>Ï §¬Í±ª}Èúv¾£´é^Ì;&Ëb¿ RyÀRßo;—-µæé+e6R©.‹(Æ+o5˜+9W2„Ï& ØxÏ¢*z‚^·¤¨vß:±uQ¼kûðïe“0ßg)]Ú)ÇM+“Úº%UB×µú bè‘`EÈ¥ì*ÛXŒ² ~Š×(àpðõ^.¼§;"³æl£²bù5%'™tyBAVTÌ’øÜu—ÍбdŒ)XÚÒuJ`¥ùl=Z‹]º=‚Ê\fS9ù"µ-J¥ 9úáçå÷6ùè&—uòM]ÕÑm­êè‡ã:uô 8®>gut1äã¼O€ô£uÝÖÑEmë貎›eÝ1 Ï9Øù†!^É;]=Ò§>_Ë´ø,Può®šè˜ò¦ŽÖu´á`z “ó w8dŸ¬Øæµ?|]G‹:~œ3rÖö×utÀ¡ÿøñu]ÖÑvÂÊSÔ †‡êx$\1Qpl[ ~×Cwž8¹|‰òØ5î-hi-ùÍIÒÈ·gW‘Vº±ÊF)䇧y¹\·· *&ñ#¹^½Å«SŽ5"6*…™Êý£ô8c?â4MvYeºj¢j“ýnó(…ÖqO¿Z›Ô›ŽU Õë¶fyK»œ¤]:ñö}Ë‹¶ê„Ô*p¨Ä|b‰²_]Τ&5Öw 1jX€rîTùÜ/›Æï”ý<ëJÓúTÒÈÔ“!,ù¹ãg£óI•/UU–ªÚ“ÑÓjG´ïpÔ‹ºI¬'þ ¬, >xǘ¢çvݳoÜ©g•=ÅàÈwWZ¯„»$ìÿLø,ÉÙëTšïYŽJøÐî³éM êÕà8œ:Ÿô£–ƒÖ‡´8;Gën»ÊÿP îúy>­#.£íIÉaoÞÔÉG¦òÀêÒC=gLJüû’:Óì@GÂÕF>Ÿ¾`úžš)˜»ÍÅÎýÖ6:EþlÑZ½ûŠþkþ² ¾„åŸÐ¥Ý5\†}Ãß6bfì»Æ\­ýM?Í™‹o]ü)\¸mxåÐåq‰ °L~¼QªµÌÊp7®½.£šÀ,¼бXM&ôþÉ„Ì? />ø§æÄŒtÏþÏ4Æ¿¸í!ަŸãWÂ…uVôýæAåîÜ®[ݧžøAkÏam¯dùÖÇz1þÑþ˜ýdï‡6äÓÏ1ùû'Óö³C^äù6tÏ›Ùùyä¤ú¿ÂaAÂ_OÂ,þCÖ0ƒ¡öZ¥-­™-´oRèÅ6Ü$”]Mé¿:=ú.ýû }ñ£endstream endobj 348 0 obj << /Filter /FlateDecode /Length 3557 >> stream xœík$µñû*?bÄfÈMã÷åˆ8ˆQxì"…}ïÂìƒÙÙ#+¡üö”ín»ª§zfïrä„@:¯ÇU®·Ë®êg¢“3‘þëÿ=¹>³‹ƒdžõÿœ\ÏþxxðþW2è™”]´VÍÏ ŒœyÿËNx=;¼>øvþÃBt::éõüf±B7?ƒi#••0j³ÇuvÝÀð‚£ºàÍnêìåbi¥îÜü9úùy?)Ý\,–Ò dÛ kCÀlÅêÛ‚ˆ„6þÇ៤éŒqrvøùÁá{ßfRÆ ­uv]go˜&ŒW¦YÓ"¤1PÞVtˆ‹6kê¬â÷”·7ÏÐñ«0Y†üç®Îº¶ŸA ô/ÍÐÉ«0$X†41.Æúv0”­ÏÄ7g}&n€X<ÔÙçm±³l ˶H_g /ÉH9S¡ Q©³OÐ ÝV¬Çl¼X ‘áB÷¬> ”h×ålY]ý"Ü'æŽO*Ù$öq#ý“6T‹¥Ö‚/Úäáúû¼"ûc@+”Ð%¥ÔúB©(Åž#+òŽXR„LÙÙ˜#¨Ã/C òAuʬ9=,y°Q8zÿ+#ñáŽKìö&’-@H!¼óüÇlÖù.H™µ,£³Ö_€%6“Ž›´DISŒB !U,žL4²bÌË×ΦP—÷XdLó¹ê÷Ï€ÛûøÉ”3®Í‹ÎG£C˜¿Ló>F f~•×mŒ€½ŠÛ+âÀŸ0iMZ¢„QRrnÒ^®‹Q'Ê*ñ‰'ÌvAx]hÑcÜ…v­ó:`á] }V‰iPŒ1XDûªÈ@ˆD¢ò+E«W˜§Uãã²®Ì\8 ¾K?Êþ&¯ 8Úb£Jà~‘]_úÎ[)Nö¤"Ñväӊ´ÐÄrìFUä d OÅ¿zìí1‰Bù&>7¿º)Ê—ˆ"–˜˜I¸¢êmBiãÈΈ/ÌÉé Õ´]A@J° a¥-‘£gtY”Ä/ã,ÙŸÁ YØŒƒ±pšúÇ™m¢Ý#:KÓ£¦ö”[Ê0$r¬ÚI:80¾jk¯ÛlŸõM¢Ž·§#œ×³½@@ßT s6ûÝ ðÿn8Q†öløùt zâ"Z ŽY»Æ¸}¬“4!sÙ¢¢!µûœ×o½ƒÁÞÀÚ8¢îX‡]²}?1[ÁF÷)Ó_atxA™‘ƒCnU?_³ØNqŽ^±f­õ–,Àª]½œ¸t±&Žhü‚Ý,ßxzÀÑŠŸ9Ýü¼ë"Ä‹Éî‚§kú oÕé2Ä_ṡ+í°?e¸|ó³Ã`ø&*¾ ©:«ÈnýËÖ.ÇA‰}P˜ðºÀ’ÛÏé¾YÜõ'ÞÛ¯Xj6zÂ{ù-˜|œÐ™™¥²^L³ÕD(‰0˜²Ø+i‡Ê9!{ÞL›vT¥G^`Ü^ÃSìí^5‘½Gu–uÉKüKœQz¦Ý¡’ö^ÙxaÕJ{t˜x²HLã ÁÅê2°ªÒHUõ…ð²ÅůWÕ0þÀú,ïÉõiÆÃÏŒnÎHê…^P¹üâ§:{̇t>!;8õöª´ð²ä%ßaa±6ɪÙ׸(yC¬jšS£X%Û›Õˆdè}¾‡¶Ãá½Åΰ­Ô_w]¤kœ¸V ¹\àS¼1ÖHÀdášò‡«ÜVÚÿ}M§×‹Ýw* âí)+Ž3Nº‚P³;Ý Ƨ Uë/«”·P—Ú­‡ÄÏ)%40·O)léÅìSŠY0žþ—Jy µµ^)1G°ÊfÅëö‰W¾–*­ Þ¾•˜ÿjꃽvÜ>ƒ ŒÉ±›H–ȉ»Ý«¤Š¥Ç3ªjˆ®%Ïccðvpº‰wË‹ºVuKâωõ¡;Î/[¢ˆÒR|‹û K´Oó+¶ïÚâ÷ðKßE׸=÷-&­þn_Z]ñË'Ü»å>ÞÅ¿™åhì(ß *lu˜büò«ÅïÑìCEoXôq ¥™Ã¶wí ˆ½ì·ÍÕýÏßRø·¹õ“,Wâ3ƒæïYW¸ihÇõËí¬|ùtqÝ5q¡gß3ì…[NeãG®=Õð¿f@-”¬²\»+T)­ÎU@|çsm7ôlºJ‚a’ÜóÏ%,,Q™–i"¨ÞšNCª¸¨ôGÊtãw_%¢–ã¢k?[,P]Œ&Qä€Héñ67­ªeªƒ´xy‘ÁPéM5ÑRqzT&U³»¶*…ž O–dã-uÔ¼¦/nÒ¢5.Dâ‚;f=ߥ1Š– K Ôxå­wPQé´Ž"—‰ƒSŠ,¾˜R¸D‰T}ܪæg¥®Li ¼ç¾0¦”U¡Ôpq™ݰo”J}<5ùS9zЙˆÛ:ëkáUenªÜþ€—ßoË*“< a»¡EÒ*µñÌ?}Jî™K•q,ÜïǻʎzóÑÚù*‹¤­ÒÅ!óTt7I~w‘d„`I\µÚÆÎiQ•KH‰º¬bæ;ðK™ÃÚ˜º«–2uľS(Ÿ±*ç4aLçµzF`à̃X„7ÿh… 5ºlÛ¹ÔŽ–í'‚qò—É\$UPßc’ëà‹ SË…-åÙG%Y«M¦=ÿ BÑs>÷d~2.¡¢=ã C·Á˜›Ü•Aœ#k8H×W[/ƋÃ/JWízº—jfhÃÕJƒ‘ê™2¦Ó®´âþ-‰%÷ ýiÔ£ô09!5¯Lˆ…KŒw„g,æ×ãŒ]DŠ~«ðR¢BhLî×e-¨ÎKöNgó OÀîËlê“Ù7[èY"u‚ñÖÙÑ©"t$†z~`ãé~Ÿí>na;+ä ä+œ¦!ôéü³)'‹S}¢äX¤w´¢ïšå’EgeIíp"ÿšîöí…œìAè£÷¯¤“à‚¦=É&šØõ9H‰¢sØ`é>ð2ÙiM9+R©s³¦ý»z´ìºh=× ñnæ3›%Ãæ®|øŒ}Àùj^&÷¿*©ûÞ %½7¢Ýù &ãòo/ƒ>·^+sïߥÍÓ*?Têˆã6ÒêZMÔã0ž€íVc´ä’š`;:•¯3ÁBƾ'5½7àLgƒ2l:¬ÝBŠÔê¢P¿Öq’²p—UM7ìE®Ö‘‹ôÖ-Õ8Ò'¦áH¿Ûù:Ä—ˆnW !L3’FÏ=vâQüW ÷E¥rß7½Ú׋‰Öðá½fÇ7?Úu$Ò]úŒK:ï.q*°ºÂ^zY.Ñà=ò§ ˆßÀrV-"=8§l¶²ìj­-€‹Õ­>¨ÖºÕœn ³uú­4§?¹Õ|w?ûšél?;ïç×Ñ‹:ú¦ŽÎë討6÷>·ùöîþþ¬Mž²àm®.|Þ†Çõ÷Û:jx÷Öˆ`J\¿_,½Ö6½s0ò¹aÄÌÉqÅÒ½ª{_×Ñšá¥ñ×Dv¬»a¸âðµ}‘VïëèŒAÓFWÌv,{ïÔß?«£¯ëHÕ‘È#“ËHÛ£wê<‘VÛ‰=_&‡ÑM×ÑImðó6ü Â@V±­iòðûíÓ}©#Zzø@%üöÅÆo_lŒÕþ _l¬YãÐ×·“ªà³SWÄʘO:Ћ ôMzýO:Êì)ÞŸ­8Ž?ê0}ý±[‡SŸuð4rôLtÜp`¼~VŒ'óü\¹ éŠR?àãS~$½v[¾SfͳӢ ¾JðŸŒlXÄþyÁ*ë¶ø³6ÄŸ€¨Üc:éÙ;Œ´¾Ó)µŠ]sû/ÆkJg¨Gæg®/þéeendstream endobj 349 0 obj << /Filter /FlateDecode /Length 4403 >> stream xœÍ\YoÇÎ3m9þÀy){Ç}Š"À‰cÀq ó”æ%Š0‰¤äã×§ú˜îªžî]R¢ƒØœí£îúªzV¯Wlâ+~ò¶:Ýy½ÃãÓUþut±úÃþΧ_s'WœO^k±Ú±“Öð•ðOÌÊÕþÅÎ?woöØ$½áVî^ì­Ùd“Îì^ÁcÅ…æ»ß¢§gåée]vŠ&<-8zÊöÖÖ2?iòn"3æu²N°h‚-ÔÞZ0m&C÷*CVñ.9¶æZñDX0• lD‚æ2RÐ[äÑS…(($òî´Ù¿÷ÿ¼ÃÕ¤”á«ý¿ìì?~h=ñ.‡ëòTÔe0Ápã¦ôqyØU£Ù"o*ƒžë*Ù3 L­ÃúàL‰ÓÈûû’eH¹I¥|HO5QÓUŸ­Ëš ëÆUðÃkõÒß}¼O#‘” ®;Ánñ>Ù•ëÚˆ­ÞÇ»Ž¤»Þ'7{_ßòt%q¤¾…rN뚴沬9FOOÊÓëºì9špP&œ“ewv›rÌ刮X×éü¶Ð(»4ŠÍʱ] DŸ1Û#±„FåšÐ8JaóÓ'ýe'hßúô¸<=©Ë®Ñ„çeÂzzŽ–•ê± ÙawqX‘ÈÜÓnà ç¶hÊc“Z…L;Ÿõ.F$t}¶ïÔŒxÁÏ5{– OÊ„‘á”e£ÈÒ7œ²¬‰,sâY÷ééâv×´42¢~ÔîžÖÇb&¦nÛ¤îíT’ŒtW0ÖÍsšPlG1ie.ïBvÔ²ÖóÇëbcÇŽ£G™üÿ„æ\°îZÊÖÓׂ¯ÁmdJõ©ï! á6¥^JCTZ²åÏnpêÚ%ëÚe7zɺïãdaŽMÞ‰Ù£ ·Ö–§RkC¾‚ycí½³z1¯3ÏÐÌÓ®¥T»|A‚óLýQ}zµÍÀnHä+ªau·oêäÇxˆ…1oüh³—÷ÃçEßt÷Ä'=ºþçÛXx´5É1lâK'Ê÷&“$Ää­Ð"NÍ Š$çKVü×nÝçó®`%¾ÚFnÊliWØÒ}¯º°øºûô¢ž…Aø-NåéuÕ⋾©¢‡}Ϩð¯»@¼•e4Z¢£·0rFÖÍ~¨Z»Åg”!Î 'Tª‹eW³¬ûçàí5F¢&í_­£µ‘BÎ_ëæoºôŸWBޱÒÊðm×ĺ²?ê«ýIåÀvÝÉîuý­&6‡"¢Þ˺/Î9í;/ëC³SbcG9!ŽRNÃD¼èZïu÷<¼Ý1²Ø‰y¤(•䑯Gö<¹žóf«ô¥ô¶ïؘËÓ£žŸT#3ýtÞÍ÷ ~“’r#𹑑•uÇ}±Õ¤:RÎŽóqˆˆõ)±€îiu_,ìn ˆz×vŽýŸÕM¿DËÿˆ fOÒ¨&À˜®ÙššŒ&ŸA<©ö°ËëÀGžóÅ •Ã^Ž·MÜ"Ä4À;ÕÁû‰ãt¦|Û3ƒ~λíò@µã«HcŠJþӯǗ‚OÆTUì‡Ù‚1.|cV ø ö¦ŒƒÏ|:“q¦S‘ë•tŽD¾ÈSR¥\ĽeFG`scàÂL‚k—ö¶0) 4O>A´œf8+áyœâ¼çŽL Ü[g…ÊX%?>K\Í,h"}8Õ;µ›™€Á³™7d÷ˆ0ÐüÄ’`JpIV\ö€b”²^'@'4`$LqœÏb÷ÚXé°x† X‰ÁS0#´P!-´„ë‹D•qZek øŒ¸Á1¦¹ž#•b~Öé|êiÚžvâÌié3‰;ؾIvÂ]8!V8BOÂʹ¡'Sâ o˜„öYaJõO²xÆK¼#"ø6ÍvÌî~–ˆwÄcvŒRºö„Qx.@÷. $ñœë¨'¼Ý}„T‘J·,šr3ó`UÖÏ®Á5H%.ç<œ‘Ø7íI h¢-âlØ7_&Ëd* EH°b¬°i+ •gçÕØ‰ ÂÉœËN¢^ÈÂ×ÑoÁEM óÈÆG^{[o¨]&š=xÄBíóŽdÁMæ)wñ£5\#Gˆy’9%Zº^‘¿>m”‡¿uÊG庑=$¯Jë+D>gl¶Œž|ÎÓR°Þ–Éèk’O¬v°ªn«ôÏÎÏ‘Cü÷QuŒ7xÒ9aË1>©÷ Ôhnä¼È[^áͯûÓÑ9É¡2£ë‚e¿‡Ø¡ïü x—šESjƒÔ°?78w½¤Y/N, ÒE›ZâÀýR2ž¢ŠòÒ‰ž¿I'r/uR1‚™¯ª‚ t#ñbÄ:άÐÄf^EvBòÄI¤Á»Ž·È)ˆhG€HȺÞ̦’ж[ô䬞ç®ë\H:DB!†Éj{²ˆC4»‰˜lõÞ 6 sg,€PA–Ê-3ycýœI0üøÅBi1*-4Åœq2$©]8 £í˜8/±g}ˆÿ ^Olou2Ûœ¼ŸGG%ð‹.2ÌtÞì¶ùQH9iÛ–¤Ô愌pe>^ëê’ÑßÃý˜ððѸ³«"D‰µzˆó²•C¼–¤P’É'·A6À¯ p,au¤ØHðni9v¦¿µƒZ"ÄÍ}ð + ‚ 6¼Á3?ˆV¤¾»ƒY’œžE*){lãºÜÀi. W#f;دJEó]”¬–‚v ˆ‚‡TżA®-›„eŸYàäœðŽÂŽ¥rVx²Ù(9^€-lðRö’Ê¢oü ¤„¡"+‘HâžclJ]/êÝ «åTXä@JžE¢Nüë»UŠ¥ÄÜbÓ°gꡯc”púÐàÔ­`™EËŰhöQ삟„M,ڱþŒ› "šBFg ¶ì‚þÃAÅHžŸŸå(¯R”¶Ý@—75º‡û€¦Ö&s&HHRv™Ö³\hš\V^Èÿ"mÇè$Õ¾ŒþØ*ª¢Û.HÅÕÊ2opî›Ã<å|"J©»ôª›PPšl¦„=C<_FËèÅ—iFÁÄ&ó:lw â´ÿ±&M¼œ·Ú’v>,iå‡tpèìÐ.êsŽs][[ö#ÍÂ)ÉÚË0!‹ã¼ã~l,+ðg볊ánà âÖLqn”s>jÄÅwFq^Rži|+ãÃNOa² u"jT$w4%eâš:× %#ļ®Ð“ê<"S€˜Ê>΂áè#ˆ±Ðöcâ¶Š]~øÍ­K”Y0`¯pœº“íÔôä]ƒŽC¹ÏSÕ¾ Îõ$j¿½æØs]/t›Éùf)oéÛ¸¨ˆÝЖlLj‰«eã‘ÅöëFÛÅPdÁ”1“º’[îÏŽó^Ü:â|¼'O3Ú»ÒV&Ä“"ÚQè¼­›rIõ¬„5]¶¶ r³Î‘Ä VÃeòÙË`<7v³wšéq¥%™À(j®7hi5/fЧñ_6íR©m 58xj§G /~0°·1ŸƒŽ;ˆ‹:ó² Š[4p"@L€°ðÈzD +.cw>ø·r®0‘—N²¸¾“ï,Òj¡oNC¥Š[´Š£ê!N'$I?!À*¤8¤4%Á-¯ó++”ƒô@ƒ°𛹸ýb2Ow^;@Wè^Ûð†-÷ƒ¼ÛXÕ BŽF,òçhÜÉ«Œ€YΫÜÞ1¯ò*Õ?@W@È2çU•¡ÈïÂ"ïa}'Õ“¨)îåÞL ÁåO7 Ööâ†Râü³„Áû†Ì*àÜŠ€†{±¸(ú |Q)XŽbM¿I¶ 8ë[NÀ227¿ô¤ø5µÌ5:¾Zƒ@Ë.ïµlZµ±pž/öÒw«6œáÒõÜ j´´çÕkÐÖ¢ø“A%¾ý%K?ñ«¶Æ\ààÚå–»½q™ÛeƒÖþ¨3¹ ·±ôz#ö¶TEÚÅ×{o6ÞPs#1÷Ò†Âòö#7׆µO ø¨‡Cʦï+[±åÛ}ýtî ®°R“Ðц³|=F Piû–QiŠmºòœ[CÃW{2™¨ÿæ Ì´¤cŒH¸oK¤Ûe,ÄOtC[ùû¾v˜šó7ví¥˜¬rî¡®"Ö`éžbòÕj®Ëï'¿:„ÎÕ§V êŒáû³i¡HïÊ ­›öXnËé 7s=g’¥*ãå%Ï\ÿÑÖLßp¯ú¯øÌ²¿&PeÞo>É­W’"|»×6w²eÿ—Ø£ký-2xúÂzš3Éûð5î­‡ÙPå`Z®öz½‘—uîinƒŠD‰ÂïôªFécùvšfN¯ —yæynĦ£×á,i}ýÚ–÷Ðòî³½µ2Þòµ—öÖà=¬š$¯Ãƒ:<¯Ã“îO·Ñû¤ßÿ´û‰$VQÏ“:<­ÃçuxP‡çuXhЙ†øôYŠ:dåócÙŒ¬ÞñÜØ=SFœQ9J;W¿_šmúª/ëð¤ŸÔáÕÚNêð¢êðÏ]KcBHÿ•× _±7"> stream xœ­RÿCMSSI12‹‹ùBùJ‹ ‹ ›÷/Á¾»R3`øˆù ‹ ÷¼Ç÷™ÃøòÛøu÷ÍŠŽ‰‘‹Ž‹ŒŒŒ’÷3¼´ò‹Âä5Ðûû€û(ýJßÎ÷Ñ÷0÷ ûÑáû·ù÷!èÈdFBA;ûû" 7Ÿ ‹ ‹ ‹ ÑüAõendstream endobj 351 0 obj << /Type /XRef /Length 243 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 352 /ID [<57339a51bc8fa791a39733303389b410>] >> stream xœcb&F~0ù‰ $À8JŽ’T ÿ3ˆžd³éR×Ó’ÑÔ5JR3uiœLWW¦«Q’Ò´d®³È–[JK’– Rf+ˆ”}"E“@¤`ˆd?"™À©NØH2*È€uí‹Ï“@$[#ˆR‘œ= R\D2V‚M‹›|¬7Ì6‘"}`ÛׂL–» fïë} Öe&Á55ëg°-ª`3ÝA$ÇwÉì ù&SÀ$#X%Ø.}°{À¾;"¥ÜÀjÀþµ³_Hî.É Fn%›¬W¨¬Fˆ{Ž*= endstream endobj startxref 207693 %%EOF multcomp/inst/doc/chfls1.pdf0000644000176200001440000023777215075167045015543 0ustar liggesusers%PDF-1.5 %¿÷¢þ 1 0 obj << /Type /ObjStm /Length 3962 /Filter /FlateDecode /N 74 /First 610 >> stream xœÍ[YsÛF~ß_1o›”+ Ì=ØJ¹JeÙ¢¬è°,§ò‘°„ E2$ËùõÛ=ƒk0 JJíâ˜Áœ_ß-Fb‰¤Djà†0­ˆ""–D¥%1$aš$„²„ªbx „& aLÀ•¦(4!K˜!T.ðª7‰"TÁá%5DHï"Œ†Ê1t Œ 7Б†Á{Nt@àVIèžI¢ ‡Îѱ‚Î4Ñ\À{C´Äç„hm4á111LƒSbx 3b¤4„sb´0(b Ï’$ ¹" ”p˜¡0°0[e`ð IŒ†AÂÔâ8†QÄcªc"ܰŠp5´þ(¥0ó£Ì0"`ÂTB÷0BJÁ”©–pƒk§•!pO©I .=e (¡e&a…%´Ì ÌJBËœ \¸að+¡eÎa€Zæ:‚ÉQ®eBàrƒ …Û‘@e- ŠK - ]C›TèQáVI7вP°ò Zo4Þ$1,8Üh€–Eïaú0-˜‹†–%…¥Ðвä -KÃM¥°âP-K¥ø?~þ™DÃl•ŽÓUJ\19#Ñiz›-söáâû<#Ñ”Of·äí[ûÉÞ"KWùlºŸ®2òÃþ¿YŒ‹Ch]Iþ&fÿŒãþXÔ›-ÈÙgxÎÆO}qº˜F|rxzLïfËÕr´Èç+ØÐÅð÷c5†ÙÃt}ÈÇKò+PŽÀØ{Ñîâ^JWEº'Xo¼üVNÑͺj|ºÊ¦«% ×-Ã0çéîì:ŠáP@\:aøõiº€šåreËÙÃb-a3hqë–u1g+h!:Ý@·Ùã xû¶9‚r»é2³_G'ŸÎ‡oÎgCª¦¢ƒéh6Χ·$ºÊ§;Óe^¿ä‹åjï.]à¸mïû™[>Ø„b&ÇiQ…aGç7+Û9–#q=_åãÕ.­QÔÎÚA¼öºº†ÂŒ¶÷¬h¯Y´5][\Éâ·n@mÇ®ÆÎr„k¬cŽPœ¿ËòÛ;|Œá¦‚«úC4ŒÎ£4Ê¢¯QM¢ûhÍ¢y´ˆVÑCô …K­üÄb˜è`’Þ.‘ÙÉî–[k œØ×o®pO2Ãvë‡oNÒû¬cgŽ€HòÑÎôv’AÝh˜/—°-vëÁØÏWÙý'‚ü¨±Ð-Š>SÀÁ$ >î¡¿‹£-ðkw“´‘;Õ šáÞp#ìévŠsåvÌÔ¿ <˜6BTb֢Ǖ)®7 ¬Ù®€ Ä;¼2cŠ÷î® ",?‡Å²µì7R“6RälD*ìg‰TÿO"•…Hýrv°óñÜQC*}.R)  ªúBÕcZLobZ]‡Yª”ƒ6è3ÍûT–Ás¼®Â€ôGE„K Wißâ›rDx50+[Ë$ޤ@ús£ì5€&®@ MÔˆÐÜ¢wž@o¢£Ùý=2È»ƒ´l‚Ž&¬è7è£Å ±‚uÇáÁΗ»aǰ3OÃN‡°»Þ=89¼†þv?ƒ*Õv–ÊZ°ãmØõ–•”ÇæY<–mˆ”¢¨¡PMŒA¸1¨WKIJMÕAmÅ%èЈÃN±b ¯2v,º|ï†!P»hk¥0P\A!%h"ب©Q|ŠdQ*P¾hÜŽ¢cÌ'ÑG@äè‹èàÒ¡q2›ló+èLÑ­æï4gÀ9ç%‹¼[dYÅ(¿µåy¼Iž[3Ù‘úx¥m¼øÙˆWUãU>-ÐÁðº³sðñÓ¡£8‘ ¼ZÞpÖD)R}¥2@)ë‰RŽö¯u-0±’šÅáFKÉ;á…&(Gk®Ôìð¥/\±¾'ÓÊkWƒ…¦ÛhŠ  ‹¦.J8ãÊ8šQ  h1A2À/À¶Q¶% c`¦Ùï±-¾˜Ñ¢éW†`e^å•£*P¼·“‚gÉœÍm€l½¢ßÛE^ˆ×òvŽW<±Í§Ô ûØP+v£=ËÁÑ!pñ£è}@=—@?WѵGCޝ#%Ùf£ì~œ.ï¢lj/@]ð—ÃߟYMh•šòŸŠâ UÅ‘]§ºÂ$Ÿ£?¢?f«l|3±ÊWÇ>ÕÚÍ2ûºYæÑr‚£ Iù1úýê>²¢i_ý"Ô–:¢në>¦$œŠ¨"Û¬ûЧ‰: ã÷ŸN_Þì ‡G´)u4¨˜…TÜÏ.›]Nsh6¾O†y[ú¨&Ô…J|Ñ »(z»ƒimÏuå†;µËˆºo%pW´l¦m)PÕjK"¢Z„bˆmŶ$ÆUV,òJÑ“Ä^Ò%¤”o7ª&Ù½‹>XòºŽn²UZPÓ]InŸ€<æ%üç¹5*WwXû±-Šä:Ø2Wj@,ã|ÔŠ6j[Ú„Yð%f9ï‹Ù½ÝËýÓ#ÛAÓ’ÔåH*ÈÊ­<0 {«G,ióâ%>L¼D‚%•SÂj/VkºBàÔm¸(…ž†í* L,Ú0k`À„+M`§°² —z£ ‡ÕF;¬¶ýÓË‹SèìüÚgcå°*LÄAË,4Ôúê"ºà(zW©ºV¿úx ›¸ñX[nÛÊ Ÿ}K(ZˆÅîÄÃ眆ó!öUÏÇ…ê@ºX̾¼½™­î¢›tÝ,ÒQfE±½sÂ^ÜC{Ñ$[.³?RñùôaÝ?LVù|ò½@.ö™-2@p:ÎGPk™ßç“tÑD3:Ñ»2ŠF9Ô³jƒ¹…¯¾hVº/O쾜^Ag~•nãÙdÀ¡É××ÓЇÜ{ú-a ãæ›ò·«ýa½r'‰Ú¨ðú*¯Áb\²Í™1¸ã·¹XGùbôpÿu’=6Œ½BEµˆÌG“ôôQçØ¬{NP›¼Ï]S¨Q®òÉØi’ýõÇØ•0ñCÈ–@© ë#ª/b}Úìðï^¼ß\cgM‰¬J¿sí°%2 MÁ¾è• °•g–ÐÿðR<¾Ï<ôƒ)í{´gK9€!žj”©ÂJJ0AO‹² û( ÞÆõ }ÙÚÉåñà—w–ozªZÜF‡XnªK*×¶E¡ØuGþ§@ÀÞŸRÔìcIºZå£l5›;Ñרúµ¼ã:TÌ’r©ëØ·'½÷\öÝóãÓÓ3hÿ೯‹•N«jÓMè¾d¡~.{rºÉ¶ë{éŸí}ãÜÛ7÷Xí›Ubî@IϾMkµ¦|ãÄAõêaîWy˜òÂ’Wã|9Ÿ¤žrNE¼Î·€Ú¹-¦ ¨Çåà ð¶¶©/Lo3íôèü—3뽈MïHJFy¨ ë-$ZN¬úŽ $ál9 ÖÞÌ|H¯––`EÓ=“Û7!ùJŸ|½HXâE¬âw/œ‹îà?bÁ×»±Ð ;1‘­½ EÁRotIQ‹ûÑ níÁ1ôxhm;Õs_Mè>âÞ÷Ý×dc ¿ƒ¬­ƒOí¤o1£½ü{·àí1¡ƒ7æ{ÆÛ{æ¯aoû¸7þ28º¾F“å¬ïuD“x[9CÝ´×ÙäÚ¡û(½•G9Vëù6ë’w è(È<ÉmÃ_ìÀ'å-Fϵ6½¨;ï.‡ÇŸ¬Dm®µ*ÍÈ Zok9}×7Q¡ýýµuÕÚn¡Iî¢þª.Þ½MŒ' |†Y€…ÖrF1i­¼Ç¤²ò^ªÊûÝ=Ð+¿»˜•ßb4¤üÿÊoAß`å·#Œå='¼ü–cÖay¯ /¿m«¸Kˆk£‚•^‚%Šm•‚õ¼lÁ½Ð cC4Ì3X•©ß×Q‰¤ðŽÅE¹¶ÁøÒÙBcÖ•UzdÐoS^1^_¾/‡‚Wœ*¾«½86.™;U[Rô×çÆ$19´™%‰¼ ¢ø^ìÑmÔ±xÌ·6úQÄvüðû¦¬©P±ÀßSbÛqÃ$0êDoŽÖÙ}r÷' š««Áé™õ.éçk"Ð.ú:Þ¥J¼3ô°øæµöÌ4»£VÕ(7Ä€lR9°X²Ä6éoCºæ­QOé¨×Å?*Îþ7ps¡‰(ëÀ6 ÑÉ©i¿œU?'¡¸1çpLôÅc’âEâcçèËçË&(^´2a¶¤ù3×F⛿]GY‚×òôK›ošµžj³]×IûZ-ó™òºK0ÁHR™R’Vù«–W;ü¬AÜž½ÍÐÞ]›n…™2˜SÆZŠ/ȹ6i›¾‘¼i•n¥×„6'¥¾ÛÛíº$Ø-0æ]Éç++˜TÔÇÔÖ\Û\hM1} %¯Þ#ëìvÕ¯;¤MPÅÿÁ;¼ÖOåˆP°±‰€¦¨ï2øþ§G‘_bRkGjõLR÷Ø©F¼¯ðv륢6äýÊÉv_ lðò`¡á‰íµ…ºÀeÀ`³›G>mruÁîo10®¬£0%f ;/gç/ûŸ•£‹O‡»Þ|K—ßýHl)Þk[@†äÕ¶æ;×ÛƅÔÍÔEè=‘@D ¨ºÇZ¯ÉîÓI滫Ö$õÄ®Lei!/ˆ·V¥¯2öPfš(êVH9šÈn3’Æ/·#{rއÃ˽_\ îL:Œˆª¶" y_=@;îê®Rw¸ß0'ª!aíc ”¡Nn¶mÚŒ8†Z±MsS¶½–ë$X§\ÌÔhZç«Þ†o­CYÍ“š(‹Î0I7^ƒ¸äåˆ{Žê¹fn > stream 2025-10-19T15:56:53+02:00 2025-10-19T15:56:53+02:00 TeX Untitled endstream endobj 77 0 obj << /Filter /FlateDecode /Length 4054 >> stream xœÕ[K#Ǒ޽6ö¨ƒ ëÀÓ"ék+ß™#È€ ö.$Y²X,4{à°KÝ”Ød‹dk4ûøïþ"²²^,6ÉžöJÆš¬ÊGdÄ_<’óý¤,䤤õßÅýU9¹½úþJòÓIýgq?ùÝõÕ¿þÅO¤/”´frýÍUš!1ÆA»‰3ªÐ!L®ï¯¾_=><¬¦eQjË`DuO_LPÒ+Q­§Êe”ØÏ§3z!ƒ¶VlßMgZj¼râ³úŽNy±¯¶K^N9é­¨ß)kŒ+š¤Šˆ•¿áçV–V[±éÚNÿëúßq„Ø=‚*eqŒëý[,¤‰‰áÆcED5ë.Sý0OÇŠ¾ Z<Î÷émtÚj±LÛC 1ˆÍº^®ŒbóMýÙ‰}WÄ»ªÃÒ.àÞ=–ZÜTíè3iC¡J5™)YD’ä;^T›R[/ê)!Æ]OMÀò҉Ũ¨2”¾#ªéèJؤ¹6ŠEÈÑréÃÍc­"ƒ i¶ÅcÓ×À:?÷â‹ ¬ÄëÊ(º¬ö­Òÿ9KaÄçÝuªžä½/½¥Z1^‹®BÔûzšžH‰÷ Ø…­U„(¶´&3H ƒI±Øíï¹.º(ª-¶ èJ-þÔ}üf:S8œ ÐÐv¹˜Ò—Höm}DS=¦ŠëiPdqÀb»ÛWë´f4²»æ¦Þ7–RJ \V"5iñûyçù²Zµo>߯ªz“ÈJV¤%-®{[ÜÏwùtF|1åÑ ‚¬VЭ1=‘¦ÐÆ%i]ØÒOfÆ@¥JûªÖ|ΊÇî—šl Ä¥ÏP€9ßò­£5â]ÞÊ‚XŠXFÉŽJ»·|zuýë¯Å¿AgFEµØß-wô-0,ælŠR‚Nª-Te¬Æ)Þ&£דqèa€ö[õãÃj¾\·öwi¬Ø§ MˆÒ×»ýr1_ep²M²°Ž=¶~áÅãú˜‘´^­Þ-×·ùelVǸüöf¹NkÚHl«ÛmµÛ-ᛤ°¢íh`_dìØZÜ­—ß?b)¥A‚@à㮺Ißhá787´Šï’ß~AßaT:O,U´ì^<˜¯y*(†ùoHv<1„Òî•\ êUV²â—ëÅêñ†Ï—wæó¥…¡JWâñÛZÄÏ$kÀó4³ÞíZi‰VóXdñ¸šïI„¬0Û¨‹‰6оA¬–ߥÕÈ7VË»M£E׎4Á3¥¨gŠdÑÅ~É|¼»ªyÄËùzZLg® üí?¦"šM<ÉK²í×Y"'v%™¾Íë)¼¤):ŸÁòŒÄ¥QV|¸oåX0ôJ£XRó+ +ùÖηûŠ¡$pqÓb-ª¬¼ŽçlÉ8Qr  GÁçžvædT$W 4@±µøaj;˜¯–7›8.$¼Õ² ;›$ Ñ{P×b³ÝVi‚%ÂVµãµ"ƒ¨§Å„Dž˜™ÖÔ5c¤w^¬ªùÍ®3t“—ç,#‹v³ü¿nÖOŒHکɪ¼Û,$­·Œx§Ç±µÈÔ`ЇŸãlF‚xŠôõsÕ–ŠeÔLô*)í©Åîñö¶³Aì»]mÅM=P@”¡˜–FCƒû-Óœà ØávYíò[_È24‚[Õ—|W­Xò†8Ö¦º@ÙP$µæÕ®ª¿b…›ù~N!Îi¶#D[:E8p›@_;ŠMÞÔ®´í6y˜fSçm#[:½ñ­yY"b«´NšMç ™nöឦyÝ8¢¤ˆ]»„Z·;°ˆYÉk„’TLšèšh]Q$ÄÃD®_4S4ædÞ¤f@Ot½fÝ7,שaÕz;lWo ºÐô±ä¥zëBßX MQzÓð„œÎ¤,KòÌ?wCúM7 Öh¿QÀÓ.ùKwJÅiõÚq›^Pþm{/Rpœµ^ÁGB`ŽGjÓyAJq.qÈ#߯ ÝO5'™&ç)i4‘¦I¾™ëµøts»Ü§¯dÒÏX.T7P©!Æ2ìÇr˜& ]3¯yÏ®?xØnÀÏûü'8¤†ÀzQZ$‘O%‡äxJ(„Æ‚¬ŽÚçQ‘8ÙÒŠ@¶¦¸[Kí{Rc¦36—HÿI»[ìíU=:N¨ (y°+4À4™ÉÉy4i —ž\¶Î»•ìnà ãî•Îë9øÖ³tw’uo}’ À»þö@p[ -eÁ?8/<´öŠ>:|´écçiúøq;à/$< Ð:&<<Ç•õâö˜¶ 1 ¢"$­d`ÎŒžOÓ¼¦2ý$é# ߣf’@ ñž§eoBQl¤C0\Â#eÌ›Pè )í^€H(+^·YrÊÂà,e‚&rKSS=,96nçëïRJ®©n2¹!N=î›ûª}° ´ÙrPÊä´Üå÷Š\ =&7¿o0ÿ˜:Â*“- ÑÚ¡Ù×ãHRU/üZü–’ñýò£<Ø·",¿µ†3°†C‰ Ò pGßÊ¡°2J“šªÖnñnlYS(#Ãûº"`>æŠÒ«¾+~@sB ýÇQàIœÁ6˜ØÔßÁJ5\ò-oÇFô×eë8?ýepZ¥÷'™G÷wЃ¶\ —äjD^GG—2škjM<æ•Á¥ñÑ`i`æÇvä, u>䢕…s¾äFÒ ¯œ †E%c奓ÅïövSäl-™ž™NÈ¿qòd©È{˜{à'sOø:g|uŸ^.ÃMP—q.£‚órSkg˜‚ós¤©×EYHzb¸ÕÁ­ò@7‹êa¿׫ÕlôÓ¹]_ ‘Ò”rð‡FÒ†Õ¼n9qÇOs>ö.ë¡®M´œ!Íé£á·«Í›ùª]ëa¾ßWûjÛŽî$h‹ýf;ª¾™ô Y9Ì&YŽJ9X Ÿ’~ü§®Te„ž¹zûœ6—L>œÓc;Ù«rÀ|Ït·ñzÈ@Új¤Öñj/)USÄI™Ãi 5Û§Ã`C‹Áƒ¶OÝž ÖÞhhB’hbd%71Ç,KŠòõèEÝRvPÞî«]êaÌ$¸0€vfM—“ýžîdó­aºC‰bófÏ×éRDuQKìA% ÷´zžeë>-]±€7îç?.ëJDiñx?ËÍg¢ŠÜ|®{Ñ¶É xýš1Æwßpå£R;Ž[þM_‡z…¦Ì}æq+b&·à(ÞªÝØ-Ã|Û´“<Õx7KjÍW«wu‰ ëvÃa§!·¯ênRª›zpX­6Í5ÆÛ܉ª ¹Ô‰ºoJÃÇU®/]ÔAlî—Ü=âR*Cù¹]¾yÜ/›žwºÕLeâÛåþn¼¿á(¢ÒuªbŒ'8¼F®ž+Y¾ŒÒƒüDq¥ëª¡7çt $Ûzét DÌ‘P°·6:ô…úÅtñˆŸ =}PAÉäB#õë‘Ä‚ÓÎF‹_NG…겤BúðLO—u™R›9§ò+*­)¯jåêØe†pá71²|>HJ{Òöϡ=>iíq*`ˆ;š—q7È¡ ºYÿ‚àÖ¬ÿÌàöôQÃÙ˜ŠâKw€“”ŠÊe#½ú…½¤0×ME;¥Á ÌÛ`Û±r˜ŽЬ‚V°A¡Ÿ$Œ"͵o(Lh»-ê²G5ƒ¡Û[Âægu2ŸZÏÖë~º®b/—CÕs€y AžBCÿ÷þûÿêÍ»ö¥g8Ú'•¾— —\1*jì¾QoôŠX1Ó (ÉWÓ‘.( wÿF-ƒx«\º±OçèÈÁxç.ÓùKÚ[5.ù±(4Y_G"ñј¨Ô·mÞvFw2+R|—z‚‘£y<µ's2ÚÌôèN¶'iÇš¤žvgo v. õé ¿"⬄~ŸÁëF¾¯7)õQ±¨•|)™SXûÿgóÑ`O µDÞ‹Å¥;›Åé糸tæÅ)E¯4e•M,N èˆÛ 3(ÝË-žgá>ìƒÐæOööm¨mV¾è F'ͺ€$Îõ´.I Ïù$I˜~Ó䧹à.âÅÉîAUñÄƈ‰=ýØñRŸÈ¤£¿ÀÄêä‘n©,üÁvX}¾‰_¢F;qMåÌ©zf¨$ǽcÍÕã½ô¿ä«Ê‹@pöU%ýì!}Tƒ§ÛÓCTk.UÙvµ.¸û¼TõÝçEE²ì&£Æ ‡-UR¥ŒnÙøoYëM—ùÖbüƒM´ÔY\ŸÄý4!¬4£:Cý×%Ñ ƒ“v/ëDqp1’Ò×Ã|®¿B£³N=¿ëþ´|ÊÖÙÄh”aÈwúâ&Á·Úvæ€Dýž¥+SG•c_Ð<›ì×VŸÿø¤kõúF§ÛÏS¦ú*Sý­•ùõS4üÑo·õïYl!;K ÷2Do¿^[XŽhxÿ†öÙþKb£¿*3HþqÖóðól+ÈKŠ"ÙôoNé)Яs~–×`#5£íg \³™Â–¶ ÇöñÇ“–:¡ÿä;Z§ôNPS+½” ŒñgÒª,lR´¾ä@Ù»»üEò¿j™Æ¥/²4ÒÄÞ‹‘ýȵē{v’·³u¦M©ôPg5;*Ѿ3=ÐÊ¡kLºH7^èš~ÓùÙÅ®‡i˜cÆ•¨¨Íy’ô( èÂGV{[zñ1¿¼ú+YòªÊendstream endobj 78 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1799 >> stream xœ•yPùÇ{˜_‹Ýej<ª›¬©Tb‹Ýd³»ÑdÕÍâ9äðªA9¤„†¹™a®~s8Ì L¹cuVeS^+qq³$±rìn²FƒÆßPM•éY³Iù_ºººªû׿zï}~ßï{"j !–f$¥'¿öæëoE^V—½0¶ b!ˆ£ükÐPì?^¾¹âüKDäZ!++¯¨Rä©“ ‹3JJ "•H#vD±›ØBì'ÖIÄVbñ#"™H!^â#ˆ(%æ‚ß,ye #Ü(œ‹ªz½'z@”#r£uÏo¿L,·;Øp¢Rð4„…„#áMR¹ÛëÒÜ *6ÔgRrœÊªQe…ë$3ÐÍžù‡×|©»(΂ŠËì¥T]d]+’W¸úi¬C0ÈŒVôÊûò=ù° R²k2˜Æ/&˜¹H´V‡w+Ákø—×…XN•rbÝÖoBùê-n)^—}‚£ñ’§[°˜{…âVs ãü¶å¯¿;åkð»}0gÞñlrhjPC¦ugaNei‘ª6@î¬iš´{Ák÷’|U\žW ž„°÷ºp(R–õu[sèÅõ˜ÈÂr»Œ2DÒ׈ʫ\AÚ³NdOUÃJ,þGá¨?åÝmˆV5ª\*Ø;eŠÌxÜÊ™¥–wó¹¥ß23åÒßDЃcäÔô…©/F¸Ø f03Н»t'ñðãóÂÁé6˜#tsX*­pÑ8Á ÷Ç¡I뉦N¾îFÆc«©7š@šcÚv;ðúÚ ýGRßOϪ¥,Œ~'›Èâd¥`>$ÄTxQš¦áÖ¬¥´÷95=£=ùÓäOgÛæ®R¿â?é:Ð’¹µo§e诇(Ü‹X.'#œ·:¼þdƒ2ö+AÄIfÿ#‰!ŸqŸ–Ñ‚Žæ^GPä8(ceãÆa¸—GZ/:~c<ѬQzFiÉü qbc´dVîG§ÚŒù4÷ ´¹è7䲯.-UÓΠ‹ä»ž‹£¾'üe쯯àÜÐnüý8É£/ñC©ïìÙà·ÞÛN¡DàÊýŒjs%T“&Ô°ãcù%Á•ž¶)Ò!rì=8d£HòùÐÑÀ)÷ yG½•XR’G…ösïBÐËôèe=™ü‰f•+2, _YáÓžèäÁwjýJ«…a¬>ÂÒï"Øq09ÉBšE9¹“óÿ™æ3~øG‚ÛVžgþð»Ry+ºÅíëÇO¯wÖ7ÖBh´e&µjoÙ– Gçmwúš¡ƒl×ûT*½^yàLÅðíàÌå.ªïîØ¿Î>ÁÄÊŽQßÈ% Ynu¶©UZ“Ú¬§e[J~^¶Ùb´mF’Ù›-ÍÖ&åd|ùMÙ­ò›V¥šH'rvö8üüf©0;Ž×ÝÂ2V€éްíŠðÃþYÔËZ LL=ÔÓ‹u(¥ÀÇ p‹öʺB´#<éÏêÎìÈZ9ÊEqQ£\´ïP'ì´ùáäüñsñºð÷.ãuÇ›ÚÝíŽÅ¿Äç—Úó)£ËÙ QI…ût£Ã tØ…xí6‚‡îuõS,·J¤·«s¹ÜŸ’ðïë[õΈrOX¿î 7pÍ”ð6JqPÔäv6?Øó%ÍÅlâ‚WoóÝAl¦=¢iøèLÇm‡Ëá7yÔæ²ÖXË fJ‘›S¼dp¤EÑ‘>a™…iÒá—:ï ÿý0½?kHu˜§äCR#v\ÎâßòÎ Ÿò‡·Qþ ÷7Ña9s˜2GÜX&*•»hü±‰W!÷d÷íËÎVð[›M¤Ê¨ÒkZ4 ÍóuŽh/Nßh¯Š®-ã3EBDÍDÈÇ(;y“LG ÔŠú×åÑÜé¯]ŸÄêQUß3Ãß@ÙX&UX *Ð*¿¢;ÐÖÑIIk»*)É´ÍÆØWó¾Ô±Öê…¤nF{aÏLÄI‚®IÏe}XqHLÜûüñÝü™÷úéí}¬é#ElõŒ“÷nLÝ}rí‡ ^ÊQÇèšlp»i\‰$mG·Ù Ù-×S’àÙ¶ž´ÕßzkãÚuWS¿ÓsŠÏlýk]z—Ž7F=²lÞ“ôcØ[{ó/*‚µƒ¶aÆãò€41æzš“!I XÁâ¶“.Q3t†ZÿÃø摈øšP0`ÛO/ "e ™­F• ¾ï.ˆ#Š]ñmâ¿£(?r¿8ÆQ±Œ)xae¢é¾G®¶¥¥Rœ UÚsÿŸe ª‚*§5@b‚ Ôö*†²½y )yútÞ^5åõoâ‡Wêû5™‘áEÅ[Þ/q ˆ—8– þ A‚¥Áendstream endobj 79 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4201 >> stream xœ¥WytUº¯©¾" ˜×CÇ0U  â6î È8#"hd„ÍB²=é%ôÞU]ýõRÕKºÓétw¶&01AvYT@pCç×qÞ,Žón2å;¾Û*3Ç¿_ßÓ9•“sr¿ï«ßö¥Q7L¢ÒÒÒnÌYºîùè‰Ô/Y²{bÿ„u2LM‡©7´ÌºµõVG^QûRÕºµv£ wƒY}N)sCŒÙ{„=€‚¢¯©e›úYˆ5'‚ÑH2ÒIF»U^¿G )ÈédK*qþ¼]þ|2iõ–™TH=ž«I>³ÌÌÄAŒ•¶‘úáMð„L‰î äW.+ûMÍó¬¹ÒTèÅ}Uƒ áÿhg\ ‘ss»%y.,`töHsÐtûXO(ñá±ÿ†k™/ìèÉ]¿|gžš™þ}ÚÇÊËNÃÔk8p2:¾B)Ïl¼[þ5È·¢ÅûŸø’ ÐxZè¯ø—¾E+?ŸË¼-3JG‘­Ä\¬~2W¦ÄÑëEýq÷ûz}±÷âô/£©ö¼€NÄ×äÙÁî´³?Þ(¯Orê‰idR‹N¤&µâ„2R-ƒíëê:ûæÐ—ð1:[síñÍ»vïf–õmV'+ªíŒÓ!pdˆœ(H½f<^gbmýΆ–ìƒòwC5&}¦Õd£€Œ´‘ã¬Ca>&£R’\Þ¬†+Lp4Ø×'ôeE)äãÜvVOë Ö%DÀï ¸ýÁ—U¡Ñàhxa+îPòy–m†mºg¶ËÔ9è<íù}Ao“'È๑3cŸœ‡L‘>è®…ràp Ò«kÆOÓfü¥S¡sèëA‹šŒ­ÑDÇáÅ®ºÛ òÕŒÃ~Ágí­h+@ÿXã'ï°Ù¼‚Z&ørìÝý€âR^Ík8 »DrXf°d cÐfÜt·èê”Ú_ÃUäôè/Cb|Ì’ªÄt½|×0žõrú×ï(;Ú›“-†`ÃncEåÒó•'>ûäÂ×—×u=f‹šê¢Ð‹N?pŒñÐýξZO!ÒÖ7j AK8ØÓvrsrãSKV>)ÏÄË.ƒ¬`—,Ý’½ccü=…©'¦¥îz0‰7ëÖÏW &9ke­Ê^g¯†T˜ØvâíáÏÆâŒËë‘@Dn…ÓË»8¨õRM¥¾¶¶¦P½-–bœ½„ûÝ>·è‡Ì‹tŠ}"á¨$5‰‚ȹØûèðÉØÉàIÔj 4ÖÚô:;S$ÏÌ`n€L—КŽüd´Ù .ŽpRƒÿÅ¿s$S†Kƒe¯Áyˆâ™‚÷¿Ës@)å´e¼ÃîäI­ÖV!‚| èiêõ÷Œâå*_g¨:PÈ0VÙkÕ³FÖru÷<™<]`Þ{¹ûJÇ6ÐLBz¥$Y´¨Hž^Î1vI»<Ïï3­’¾±X›o,bëVUgà ”=´íìÁÃÑÔl3®—{÷Ñ‹ø¡t¼‘ð5×V¾NŸg©$¢!ز‹©KÂóàm&lÔU*,Õlís¥ÏÀ´zÏú?okÁbè oÜÛm¨,×htšÆY22A­X uPb)5—Ö.Ì—§<(Çv|ðt×›ñSl°;Ü=è@}ÿšŸ+ÈÎ+]´¸£³xÐ-ø!kÀ|qQ¢å¬šëhe]¾©ã æUÂWj±«¬UÓ¸Wß¿ ¶Á¶ÒªªåË î…‡ÑŠ=¿?|tp¨9…›”‚7: Eòl•Ã(8“:/wíV@Ô€2õá„9‘uZ¾ ½ü;DÎÃ5:-F1m×,*¤µ¶E÷’R‹gt‰)f‚×áá]D›J ÄV*èÁmÑ"§Â*ñ Ñá}N™7 v‡¼Ð®¶Õ9ê27üÿçš2yÒ輤‹´z ¿>1[É×ÙÕvµ<í;­Ê´MW•kG&Ú.ð°ýÍö7´3ݰWè&<ˆÍ’Ýͱ]ìmA$üq1Ž'oTy#b‹»¹èDnóÚèúÞ9=súæÈ´Êmk‚’èf€Voè›ñûUá#Á£‘#Ádâ —ü¨zëQˆ<ñÂÝìfê Î]Èdåµç°‘MËiçǪovš¬1.noÅóóð[ðäMÄíΞš¬ŒcvÎÉgÍ¡Ív»Ñêü’è‘@Äù®ˆóãÉ'±µ{fÆ{ø¡åÖ§Ÿ+Z¤/°ív Å]·ÿåê[£g1.Ç^$Úü#Žg r³·¯´FwæÕÞàA‘õ¸È!1ÛŠï㻃±¯ÝÚ½•ÉxçI5ò`nN¸â¢F-ÂÅúÚšü!Mÿù¾?œŽ1]4ÿgËGÍWbW‚WЧ´äö¦Èà\fín[=­ÿHÓˆ˜ ¿2Qˆ™ýµS«' _¶ÔÔÙ>X(þUƒÌ.k`x5äi‰Ðf+g°‰‚T:©á2åJâ±¾L›˜t9Âï(ñBúלּxúãÂW`ä6Údu4X%Áçõ¸ÀÃé–vg}­±Ü^ÃÊS¾+åuBe½)Ó`U“¤‡Ì´ÉÆ™,äŠî½nèf‡`PÔDœÞϹl¬–ÖÕ¹‰ˆÑNàJ•›<¹È›PJ¾.©ó0ÎSI1ˆìñ èóÈÊ…ÊÓÙëÄNÃ%ã”2räOúHŽEA…íÜ®ÎM° wï@?¢"¤ž¸#TBÔ ¡K,»ï´¾„Rî“t÷yi ªÍ•ÖZV·I»Q·ÉX\_ …(?ºëäïþ;_–Qõ§˜z[¸…õ+\íÁv_[ë¡èX”|Uþ¸/A<å€n` óÎWj…úTêi 6FÛb­ &#1‡õLÆ1Ap YÓ¿§þ:%UØ:MÚ‡ÒqÿÄ Ê•öå^¨DV‘,:Ú&hìN›“c 9 ësÈ©øA/*ˆo;Æøè ¾6œA$Ú=\• σ¦ÞÒÚ6kfñŒqžÌŽdÑLrâI)ãO§æ^Ïf/I7â?…æÏto€È)¬Ül6?Ù “UÉî×cg3„n¦i¸õê6¯C²«$‹ËDìAÍ‘ó¬Ü§ú1˜¡‚Yˆ³.··]LœÀªÖw^ÿŠÈh_¸¤h‡a§9ŸÝ,oüWŒ34ÙR1nèÞ#µàeªø‡‡ñM_´G }«Â´¢a•zµ±D_»C±³»lèbÿµ3Æ«HÄ©6“7³„ÑÚ››Ûýí¾-q2rZl; ½õÒÞÜUk¶nªN97ÙÑðúÑ´¯±Eiã¸R¯]rJ ÞNGÄÎÏN2±¼&Q–hýOžæQOØ‹zŽaý`Í€ÃkIÖr)\b2 õ t´Œy‚)¾£ˆ1ØX§«W×,mŒüµ¬QòEÕ…;U—tv°nDì#9NDÔìë–¬Uÿ³ÀôöéãÚ ‹ÒÈë´³|›ŒÊçÉ‹´Ï4þNøÒ)à®øýgzyÉJ6¯Çëö×õXclõk–7áuø¶íöýe ßÿ{|ÎÀ“E1 `‘m„lÌO—iÔÿÔ“ËÞ=Ž›'ÌJÁ NÀš(óÕïYî_ KaIãbýÒ—äìÅòb™•³l6M#ñ ‡Gð’/äŽÇCMx^ð7|° EÜgÚ¯V]rx9‘ƒÔM) `¦¤7ývê0u L½ ¦ÞJQÿûãéÍendstream endobj 80 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2462 >> stream xœ¥–{PSWÇo ÜsDJ-Ù¬:Ô{×uk§»v­µv\w·í(µ[)-m„òA„‡wrOBHBxHBáq! Oµ-µµ´¥hÑV¡-ºu;³­[»íºëœd.;ݱN÷ŸÝÙ{þ¸sçþñ;¿ïïs¾ß# –`yò®½ñ›ì±ÐG âR‚ÁŒp)D‘a­®Ø#¸rÿäJ"ôˆ¥E±Ï–ÈJÿp(3+!;)7/ER¸qA$IÄCÄ"™H!ö;ˆD,±‰ØEl&ž'v[‰x"¸ÄOù¢üKNže/ën6‡m› ß>B®'màP >ƒ;aùòèå‡"ìß v%Qß/£?!Ìl Æ#ÀÄ Îšú;ÄÒ6ÀöМä(ô{)).dKTf¢q˜=þÍ7ï5'%Q\ È• ©Š;ÿÉ#ÅæaËò3}•=¥£¯´d —Ñ!e^šºF[c¨fn­Žú^p£œP·kgäÑìî_%šÀ½âŸ©ý5âD#ÿÈ ñjyã6^N‰æqØ6|·†MôŒ!†[ÉÙÄŒ…Ö¬ýÏóƒP4ïpµYÝ1Ãh¨¢³ðx¦5½ˆ’™¸ì´IŽ2mCW4—MNÔÈ8!ßð×m„¹GS\ßËo¯ý4 þr•Èu"øŒXÔ/õƒþ>C¶–Ñ!½è‡ u…55fTËKÐ D‡ñÆ\FÚ¦ÏÎ]þ+úâg¸0¼ƒË¡D®òrFƒ'Åb sΉ² 5…H‚à“¤\nñ;Ìvd§Z€'rBQrŸ¦®“ÑŪ·w¼ñœý ´Õ"SÚæ±~.xšÅC¬Ç,àWÚ…£Á§ÄÒ>0ÐgxUÇh—v˜%1äSià-r7„—‘µ ºé5^P•¹ UÁ Íö„½µ³¯Q؇×Ñi–[‡ã?ø«üìÁç—ÿàž\Žñpþ'4},¨¹+ûÛ½x’ó‚CŦ]w~€|‰uØn¶!p‘^[oSëÁr>)hBMæFû»õ‡iNÇMbë·œ¤Ü,¹t\UÞ*6ð'zü#|hf®}•èµÂľᓞ“ž;µ'…Þ6p±EÜZZž»V<…&ÑŒÿØ[ÐLŠªÒêòFcN þAëü¸ìe ÕgähÇ;ùª¦j47¡Fxã‰7·=û÷Ò¶JŸÏÕÖÑ©h•Q8‹‰7Ñk±éq±Ù©½o|ñÙĵ&ªÅÒ´ÔÁ%ûâyÔ‹í!,±k^Øë.™‹ß¯¥Éå;51R0…Öàˆ›·ðýnÁ_zA–QJ3ør8n]dĆWôÒœâüÃåY(eûdǵMšFÔ ñv€š™fÔ ß½xj /óqQÛ´HÃhC,Œþ$ĦvÁñy!þgŠÈd6"XªT”–´U´wxZ»¯nöÇq÷måÂ9Èë¼»­¼058ËÒ›µ9 0VƒÅ€ªª2ªûS³“\—‹W\»Ú…E8lô´2ÏGß%ƒ †‡°ð6û–°l·©Š^dÁ®TíA~Þù,8øbÃy'/¯3d7®òÙ±²×Ï®›]ÿG¬îM?ûˆË –ž†i03éçAÈ—‚ñIÍnz1pÁÀ`…%ü^s›=ö¬šÞÆÕb CµÝÀßŇábÈ)6QeKi÷?¤¡¿‚Oôæƒ(Åç(“|'ï¿*÷^óµÜË·+˜æímhÉUý>}ú\5‹­ÒËXöa™øˆ¡º •ÃòÖ¢¾¾6ŸIoe„}e42Ƙ¨à‹æžà²>¿ |3ø[±’“…·“Ö×-—Xßð;ÖSN¯)Ÿ^™9ºÜZÞFÔT¡ÿM$³_µŽÑ/@6†÷ Ⱥëû)?ù!º¤ónuäYrëòø@P.‚òr ¦…ý÷´âÏ]ï=­ X)-­¤ƒ$ïnÂMïüÛuãÿ»qü×3è»s#KkIçgðB¶22¤v6}Å£„•{™&Â=]ŽÇù~vz…x‡[lV!~“Ë’²² O4‹ÞjªC-Èw¼±­cäØt«>H-T–”µ+ºZ›íNgˆç`!gkYìöÆæNNá5ø½vap?Ž—‘{RS) ™Vh´Èo°ê­È†œcg\Ý#££Ç|M]íî®öS,—'hT[/5À ¨T¨+òS${2_2tj=Ÿ¨¤ÊVÑSã>8ùä¢Éj¬ç³Öé´Ûì'Ïœ»„¦á늹Ý[2¶>µ»5Þ“@™Ceä[ÑWKŽT(3Rã3ÐN¸ñË”ëïÐ=>NYÌuuuÈŽ:´#’ÉÒ7|ûúàmzQsÅÒVÖ\Ö(ˆ?‘8‘bÓ5h銕՚yÖÑlŸÎ¿~Þïè?ÖM»ûü^7 ÇæÄF·Ö¥w«Gô'Ð(s]:w¶~›,½0³$ª”W•+•0ŠŠ6>¹EF È(2š þ’ÖZ endstream endobj 81 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4251 >> stream xœ}W TS׺>!pÎqB%æ±=ñ¢m‡Ö¶¯£GăPÂ<„)!@²CÈÄ,2³T**hZµê³¶Vk½·¶zkß«ziÿø6wõíàз^ïzœk‘lØþÿ›~åìD ‚1[½Ïظø„ĤµÉ)Á!ÒdÞ¡Ã|Â7EìݹÕ÷ãèm1K^cé»åCͤ6Q›©­”/åGm£æRÛ©”'µ‚Z@ùS+©…Ô*jåE-¦VSK¨5ÔZê jµ”z“Ú@ySoS)7JDM¡ÄÔtê5R'ÅP±‚ ­“È)E8_¨Úg8k]»œ¤×Ò f SÈÎaÆxŽ»~l㸱ãÇGLNØåêæèz⌉Y“ÆOò™t~rÚä«nÒßû,”ëïN!@éxûD›[¼7÷ç¹Ã8­_·•Ã¥£/¯‚ruh:R[ãûšÑ ´jWŠ+º«Æ i×ß…:É=0d+ï3a | “ç€xªh¸çÉ ±lx䱇̾€ùU2t¯¢ÑdEÍìo³.ÏæDöÛµßwÿ—;º´kÐǺ£ÞùéXüö?ÝÅ0ÞL#jÐÖg³¢áAyí&_w´3m箸ȔpmbñëpG Vx—œjÒ6SöCI5äTò® ùÞ¤$C,éÂ+·©ü»´U`J€‚Åî/Æã³<Ö"¼­i\s2¸ïÙÌÓˆ… àz –žL?Þ'õÿtyÍ rÏD\-dÐqÝ™ƒ=õõí¥mè:`^V”¢KA©lƒü5[bÂbÂ3ÃQ ­L´ÉÛQ_ÁAöé°³möénm°ÂcŠ!isL¡‘ý\W¯‰’ŽT3¢ágíÞIwîãSÐuôMcÿg-½åÇÐ1\VçoõO â± cwÆ:±zE¼ÇL´5Æ,0"ò° b mWzŽ!ö·áTÑÕ¶gpøì®’BJ ¬Ka}W¯Â8.+K•…ÒXÑÕˆ¦äÖöº¦–cÛ­{¼·oñQrZƒ©|rGÏyª*Ù¾¢Ù­û¤õ„]˜*ºÿ¸]Ü{$÷bü¶÷±´”É?½çÐöyIlqœAfZQ‚Ù¡ÏËŽœL\iæ”HUÉ™è2ƒ¡B*zhÔ îwKA™¦HB¹\J©LÕ§ëÓuéˆõ|-3¯ÀøÔÿÈ’RÉ@›ØÞ) á–—DwÄ}WX¢BJÄfådJ±+ƒ µù(ŸUêóJÊÊËMfÎd4Œ&2!A[‡ãmѳ~§ÿzNô 8°åØ#Õ|e’¾@ gƒÂÁ£‡`ZØæ'cF%: bëjó£¥#ÀtëNœé 9MƒIà|æí .xö–€Ô¨=R•г¸pw~è¾ÈyDf D²FyO¾ ‘gT0Ú¯:˜Rì´\*gsTZ•C¾,™ÏÕù‡0V¨q £ÕÞÙËvËöîÉöC¬Á–d´—[8Àf¿BÀõH8Н!¦§³†°ËqLÃŒAiÊ&wdgÈUI;c6mÈg 蔫ÏÑW•WY•µ%ÕFpÑêÌd$g·œŠíÿ¾ÿæwÜ?ƒig`z™URÚЬkDl©’ôÌJ‰R&û`‰$7171'‰ ±C2ŠDÁýÓžOït#l_,ÎÈÎÍDÉll;vÎHwV·Xïâ)ºp©†ÞŒ6eî ß·­f1÷h1¼tåZë%§7K™µ¨Šò¸<:•€9/;)`wBbgïº.7KˆûMnl,(¨'St}ÎÇWúì÷É ù§m¼Í¤É4‘\´ |YD dÿ²8µ,Ù’:í[¼æk¼ö¼Î¤Ð§Ô£ZT\cªº Þ·Àû&l4W—Tªu#%2øŠ'}æq ­@êaçŸ[Fg¡ m&b£ö×‘Æ «ŒjcÞ4k°xÖè÷Xý‰ø¥·Â'hñšP쌰ZÐ<ÿ’×¥ÕbÿŽ£ßº.Þ>ñyÃt›…Ø ÞÂYŽ™ Öš™<÷, øò‹žŽ£ûÐ)ôi"tfyzyä`)xǤE*#Ñ´±-ìÝ—5¨:¡©Cõ…u{ÜÄ:ÆAñ0^&Ú(º N„Óž²k#ÔhLXj§À™Çì÷ôý¿™ÍZ­…KÏVfb‰î|ܘhkmlhò³x-NðŒãrP<á4Þ/Ž@RÛ §È¨ÿB’×'0MØõBfà{ÞjÁ—6Û1S0˜ºˆ³Ãý‰ÿãøN+sÔ µÆ  ¿Ð.ÿ¨ðÄÝÚ çá¶ÀÛßßhìÖ˜.·SÞê…èGæSEr€qb|vŠBaU1ͱy¡á(˜Å¼Ÿ~óo0¿¨ßþýžÇù}ÊÖf#v÷ÞúÃÒbFWn(5–ò鹇{ç1ÿëAE‹Ü&m(i(mÒ[T!›´?³¶¶j-¶!fï^EJ§Ñj4üJsžžýšSn Ÿ>çõmóêwu$Iu¸]ŒôÚ"¤GÍ¬Íæ2}9*Cì}úä/Èk¹Gê–µ «®åJ‹Û˜–s7¾ØèÉ©˜m ¿•ñrKµ‚˨ÖÖÖ³ÿ+üj“ü¿ìÕ‡4ü<‘ ¹³©…KG.þ‘;ÿUô·0¨KÓb‹ëó#Ñ=úpOº·K°‹ÃÜ—¬¥rl©<ôÚ€'ÉbL›*Rüáðc/˜‹—#ß”®dD«Þ‡•Ÿ Y¯˜8SRhQDÔ.A^Ü[È › ަöoQXÒ-éúrCyQ¹áóú 躾upƒu­uEÑJÄ.Á7ÅÀ?b†Ð—…í5qEaèc´G'Kð×ìv ^°$ƒ|ü'3SÜÃ{X’WNÝ9ìÈ^ a…ÎŒXѹºÚ‚X)þÎK™üûB,dDwz@#]ŽÊ“Ë#Ý÷Z£úHm755¡¶3®=˜{ÚØþÉ„nÁ¹;põ¯Bp?.>±ûFúEb ì?®‚ôÛ_yvJc*" Qæ ¿Ò5MèûõgÝAðÕj,¬æŠr ³ ÖD—ô$Sט•òÄM(“ÓÒ*}N©ÊÜì_º±³°ÓfüÒ[ƒ^×£¥ûóTéÈR™±Š÷zâñ¸.¥Ê’ŸÌ"Åqþk¦éÔÅ*8ðO'‰!Ǩ¬D¬…ÞÈŠPöß$æúv½ ±Í*•&å°ÉöÅ$+†;²bˆn[(J(L@ D¹ß§û?9ÙwõägÑ0 <åÔÌE˜ñ›ÜšÐÞÓÐÚÞÛÎ=½9§Û¾";ÜúA2 &Âpå™^ø‹ýkqKKQà¡îh©ŠAÞ‰ï¯ÌL(ØiAñ¬š)Ê)E Oé^CD¹u“¶.ºhO¸ûFÕ¢W¶‡–Yý9ÓQÜ@(ŽÚ’[# ¬Š‘ï ÇÎ0#æâÿv^~øÆùE%RÑ…Ë-·ú~vÿ×¹ô], ··i_WW£µ³#¡)Š{ÞlÃÛCRÜà<¸x±?´Áëb°á13dp™Ÿcðóì>tyQA2dR%ge¼†g`'<íU<ƒ@½)ÙCf±è>Àu|ýÒë’í›Rw`:I"Ä‚£TòDÁFX?Õ(sS=êb»âÚ‚¹<|þÿyו+,]6~ ?‡Æ»QÔÿâ;;endstream endobj 82 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8307 >> stream xœ¥y xSÕºö¥{m"epo™T™§–y,ƒt¤Ch:%Ó4Í¼Ò M“¦é”4Ò‰¶@)ƒÌ ÊŒ(ŠàÀõ:Ü£®ÔÅ=ç_;­zÎïÿsž{»óäi›½ÖúÖû½ßû~K@õïG ‚ë—¬ ›1}î‹ücö`Ó¯òžÂ`8(ê_>fBkª†„CN¥øŸeoì]¼u¡dQÊâÔ%iKÓ—e,—®íÎŒ\•–³:vMÜžuñë6$nLÚ$Þ<æù)¢©Ó¦Ïxâ…™³^öÒì9s_ž0tâs£)êj55–ZC½L£ÖRÏRë¨ñÔzjµšHm¤ž£6Q“¨ÍÔdj µ€ÚJ-¤¦PÛ¨EÔT*‚ZLM£–PÓ©¥Ô jµœšI­ fQ+©©UÔKT5› §æPbêqj0•L ¡†RèJO ©á”ˆz‚’Q#¨Pj$5ŠM1T<5€(H-'á U&è/¸Õov¿¿éú3ýÛ‚§Ÿ£Ÿ£»A43œI0g@×@v ià7”òøs×6ø!s† †J†þ:,eØÄ[˜á1Ãoˆ<¢GOt˜5¢!ô¥Ð+#ƒFVŒzuôšÑ7ÆŒ3wÌÊ1¹cn?™þäûOÞc¸Ç9íSoÝvû@d²a7«#‰/Þ›fnçP8¸¾ÿ˯/ÚV®aq&Ø#ÑIØŒÞÏ%)ÆIôšrëÓº·–n‡«`ØÎìõ†BÉP'ÊØ¨”¢ïªÑŸQ‚žú]úrÅW#„]]=óEbP KÈ´6h¢¸Gª*¨fâ4‰ù #, ¸„UÕ†êџß|¿˜¦2Xï¯:»Ð›Y,³È ³¸ÂXfa„m—jΞ¼6 Þ\yjUMLY”) 2ƒ™™†ÌÑðzƒ®‡õzoþiIÓ¸†™¶`Ťìl#ÌfçѲ,s=‡ÎõGÐè²zXB »®À›‰Ö Œ Ì|%üE™‚üwÁÏQµþ)AãG¨ùN’û׉ððÜׯBÌ<ý ˆžDÃþ‚¢/ `<ŠÅ£q±È`ƒ%ÐÆ|T‰†£Ám›8ùå,ÄCÔ¬š~F\Q}¨·C»ÁÎôâÅ\¯”ö<í A÷;zæ‰$5 z åòÒ[^‰¼ecèñ¹'çŸS’W¢„Y ~ @•Q ™ÈD]›J %b „í^S0SOçC¹!2 ÉÖÎb£ Z94@·Ãaw!¥†V4V¶y½õõíŽÈøð61ð4(R2s3 r9ü$NV+TjÅH=­µ«ìê’¤c¡‰'Èûv¨¶XUK°TïƒþÛA†ŽGÙ{~JÖÔó¼Opúë ÿ=?m=µzß«Á›ð$ü^7 çñ<´•+¥Q¨Ñ¿@4†q芕Y–7e6íÙóŸ‹à’¦í§×^Éú~V~}õzס÷ß…h8¼†ƒÝ¸Ÿ1ßYgQq ‡¬Àb°+•ê|µ–ÍMËN—§2½pÇ}hªÛÿœWðÓeTþqP#x7h¬ÓÔ¥ðˆ`€ðû8#Zä‰|[zŽDû z õ›ƒhØwñþ‘wjnÃÛMæã7*rвaIðlü™hPãþ18‹¢÷Š¡2/Ð2iQk±ÑJöÛ_`‰`Œi5ÛϰH@‡§“;â.†•M5¾ÄGiЙ@”¦xø(µÝAå—ƒüƒßáp W­$SIõIARª©ƒóŸ2}~zÊòB»Ú©²LÞíÙNöuÈóOáÇ0x€û¡g6lãp9#r€»ûÑÐ_.^º¾„Å/¸~í–Ýù ]¾A'˜RQ¨ê?~m2O“|¨Í'@ì]´Ýt_ÜZš´qj‰ ÷¨ D%j½Áñ¿ö#{p­WÏßµkçŽÅ†5dÃè´,S ‡j¿­p¿Þ-qeÅPÂ(½¨"M  Ä ÎÍJ¢ôñ$DÈH7U™jø„?/:v´F™×oe¼´¥ ”§û¸ò§K½¨ù3OøhÌçó+q¯…°åða9õƒÙl€ÖrÕ…90J˳Üz¦¡¢ÒÛS°jûºÍùœ øLÑݤÌu…Rô¡%IO¿É;Bxì¿üÆHÙŸ1"Ìåk„ðX-Éôëi9Ì1HD$›qÈø18sV7‰Ëæ—ž ¦'c—¢Rº¹ÂL–Ì%_-Q¦uÅÛþX²n)¥tû—ÈBZ£<·ôðáWŸ·‹*Ä'röÁkð~ígø^\÷úš4»Ä”j‘šC£m[ªá1æÜ{Çn´î\nc•° ”þà0ÚIRm±:[)!“5ÐdúV)£4Å’ ™ðñ² ˜BƒWs¹®Âî$c³`¥ló«±ÞÏbuŽ"7Y‰J£-äp(€ƒš,¼°(ßÎºŠœMåNfp[æC¹>ÿždü > ò?xOTšÚ]™bc1¡¹yZ Ű˜ÙW[ÔÍúp£”ÃJ#aŒýmêÝJC!,ä`¾‘ð#3aÄÌɳNÁ&žU]‡á7žŸï¼¨ãlÍ9ˆúÃ[Óq?s–nO5dJÿ¶ÙvbSËb £ ñj<ÏÄ»p‡— Ý7/V¿w‚ë…“ÒëÂ-õ¡0YÈ_/§yјšÂ[h¢ÿ‘hi2y–•áG÷q ÅEb—¤&êpö!ÈÜ©øü"×™`®1æ2Û æ¯YWpå‹jÐ3@xćŸAa ¯xðPúʇöÕ›d0¾Kª-ŸK’Ê¥ŠÈ%¡TŒh ìâËÅ“õÀÙÚÉ¡*tWRWv³ôŸnT,f’,û¬Æbžg*ÀþfK³Ãa€vVØæÃüÍéº`ÌJhÉ¥inPÇpX…O#Øßb:ÀzèßnLÓõÉ“R©J›•L? PFo$ŠÔÂ&½%¹ˆ  Þà^ãÞ2IýÖs'àix¼­ê”ñ…Pô´=Ø—’’LÝœ°ý àqŠ`ám± ´µè#8¼,ˆýbt¼ó-%«¯‚äbÈmZý±Ÿ"ØóL]oøFÛùؾé·6ib¸Gm &I(ÏãEp=„5$&cùZ^|’…Peèh²6;Ë ÐÁ >Ìß×»J·d•S}‚*ÿB‘¸ œ„椺Uû'ïŸÔ>É’oÎsÁXuÝÕÞpÕw­áªçŒ·õ©®`±.x¦„®1ÔäA Ì,È*ÌÊX›º.}­*[U˜ÿ—˜/c¾Ôky±aVO#¬æ¿EÖõ·ë”Ì-Eaþ<_ÈñÐT¢,ºÑr¾ ­-Úhî`¶1f3aYã^ܹ«¶3ƒµÑ>»‘fÖfÖ&íÍ%Ìþ$âÆ]CýXÿv°¯Öx„åÎ×úÞÅTò‹)§¡9¾fyËä¶©-Ï› LyN=SD{ ëýÒ–ê•䲺¬.s9c¤Ë—´.ó,+w­pCrO™ÑTfv4|Ú|×÷©ç]×Õ«üì—ê‚§Hè:C}ž)™Ñ(WË5òÔEi %‹u…ºB½’1Ð)‰ùKÂ}+¯k7V“d_GfÒù¥q&•™Gz ËT¤«dy1òؼ•´@ªÉ ßÕx5…5é—R/e\Òkyº¨k5V²Ý+ø”né>”Pæ¸Cºn¡ÈË7 =G?#ªknw„Ìõް%\À4~% ç.¾Ê9écæÓûœ‡ÉM‘ Q‡alm5w17Ò¶¡\¢Ý¤Ú_ë r°ˆÿ­”ùjæ©9«^ŒUR‘Yç­ª¬­ÉªNÕë PÏ¢DØ s<éMÒ†ŒiCìÑP­Ei# k-¶šÌÍ¡GÎvž¼ ³/Ó•ö,yì†Øô(Ž¿½Ð®*Ù}*´Ðžã‚NèrÛœÆ4ù„Wzü“ݨXFÊ,ª¾ÔÈã² 4ó•öÑ÷ ¦¨ãBíöÓ)'ˆ üíÏhê?õÇ¡›v§DÇqè:Qd "]DáŽÄ˜TqtV Ü ã : ¦)'áÁ‰Éêd˜ ™´,ÇÒÀù»ÀþVK“£ÄKØzZØîÃc€ðÊï)w¹ýwø±„'«üóE8M9­¯vNÛ7eÿ4Sa±*aNvª:GºY¼`$ú®8ÏQmv•AS“íÊHÍË’n9*éºÙ~ã:Ö{þêwQ‡Q¿‘•‡¼ígˆãqû€ðä"]ð, í5xra É—|"cCÚÆŒ Y;CµJ­RǧLa]¾WQ›r1õbò»ºb-@·0"ÿ”iä1Yü¼‡á‹Öd¯ •ø¿ù‡ˆR¥9)éU^oUU=g¼à]Ï À8Àš>ôÒ{íWë8“Õd#édz‹¶HCĪ:2?7-62cdžŽAà³OóC1g£ÛáQE]"qé+ãžþôL½¿úƒ î€VvôÒo‹O«â•÷(¬ÜT¸‹(Óص±ø2‘ÐÎý6‹´$Ó&Ù9ñm<ém<ù ~~¤EaN+‡.£Åkvt£¡gѳ§Ð³ä½Äc÷X=ÆG§BaaÀ@Å$e%ïUßA€¯s£þ(ˆÿXç:›¬M¥¥<±ûðl¥SæâäGïc‰ÿ}¥+ËÔ7£×/r N|TàYÁ^º¨µè §ÁÛ|Ä´Ÿèö`z™Œ‡NÃC4jU!T2J«¶„EérN ¦Û­Ý––˜·MGÂ…ƒi›Ó^jwÞAýï!y·XmÄV2%…¦’ù4rû'{ø4j½ƒª/¡s|è`­~5‡ãABG¤wyÒ  ãñ0t£a§Ôtur˨š‰bÓÎÿ+À÷A‘ À›ö›WT—z,ÄÛ¿½JnC9‡_0OSX¨HÞ™¼¾w^+x_O|¹¾Œù­åÑÄ ùzÿ õA·³øêô¹Ü£°d“úMÝd²m›J.ÙÛæ/URW²+­¥h0^€¼¨¸ÀšC¤œ‘¶•˜¿.´u‘p'‹A×ÉÂÜ£eì/H<”]ô;NÑÞj4ß-hü)I(O„Òv‹Åþݦïð`üøL,À >ƒѨ.îÿ°3š‹LÐÌXÕMŽ:^¡fSwïØ» ®‡Û:3Žgï7tÃ.ÆX-ú°ëáÝûu’P?OÉj{æÔd!Dx&}Mj©?¸g£hrÎ4ñ"< .E€xõ¯l…-eÍÎÆZ_kc""Í¡-Õå*óT0ÉpeÖוU{º#<13V-™Äöú´€Â¼Z‹.³ÂÝEgÈòº9ÿ½¾Ì ÈÆc}²±O"%&[;8¤Cáàa1xWÙ?>we’3³( f˜NÂE¨Ô–[Ý,zŒþàf,§NßËŽ¹V¹2½Õï®AëÏ~Zƒt^‡,¤á¸Ö‡.!üëÏh“Èd2Å"•b+RêRáÏ;”»vGŒ‹^J{û ôDÛ·(ÓucÙ%´ð›­)õ+Kʬe\Cvc~‹ž±Ñwà•cÎ{ŒÀ–üfi­Þ¤/‚&¦8«W4B34ÌP¥V«‰Ñ‚g¾«ÊVVּוŸ›‘Âêt:­ªUCYE®™ o“IÍÒѯÁù•¯2Ƹv7¥1Ü$²ÓÇ|'Ù¯éÓð¹}9£óŸ¯Z>Íw¹€=‰‰JÁ©Ò[·.y×®Ü*_8]Ú‘3¿%}ÀŸòI—Pìå ~+*Asv÷¨ĦjSØÔ»G:€M†–ì†ôý;ÊvÀp¸,:g­ý•ïçÝ©!*ÒT‡N»ÑiBÐÜtäaпÛÌ AÍûÏÛ†½2šõ#â÷XNýö ©¤IL€K½á÷e.m¹Þ™#oµÜ&¢¬0×”^ çÔ‰²˜X8@+w}Ú[Q}³ú‡#ðˆxعiŽÌ"Y<ÁøSªµvG{ƒ¾û£xyÛÖyyœD+!xà±3<‚ÝDúÌMª¿KÄévôzüf¯f'ïñ£Rõ[ÈÌc}9@’bjæü (C”¬ÍK‡Lz¹¤¹©ª¶–$vMN}"+üJ§3èG÷n‹´I)í ¯9}Ý<Ï‹mpRÔ¶ùËŒ·!óóƒ/ЀûÍhæäfy‘ܼ¨"4Ë’iʶm¯N>¬}‹ÔËëï\¸õóÅW'T°¦<]rdlf«C{A±¡D©D¤°[ºcê—@fʸ¥øñ—-ºµ—û:õVáŒÌ[·tîÄñgËê‰$6”0¥À@œ·2JZÉád‡ŽZ˜©4ÊKÙ2SÅ‘Šš>2áeÊý—±|\ÞæãRZ›t;8ü5€YÆL˜ÅlVÏ^ž%³ç°Fà6•VÁj¦NZž!É‘JXó–ó².xž¹`ýñuÿN܈‘¸¯'CÐU¢ÆÚO÷¼"ÊÄé¤tZN]mnkn=cê†ÌAÚãÖ%ò>,2V× °¤@×s¶7˜-©_EGï1ä=X«ÛØÆ¶Òçá5•gŽ-ÞgÚÃxéÌ@»ãwÕŒ*d&Ïÿ;{IvˆÓÍÜC=êjªKrœ9ŽÜëφZ•69Ìg²dÚ<‚”õ> EiÞÜòüJyeü±„cqG5¿j+c—ºN|ò€o’.ƒ G~~ZjvNûf\d<ãOïsð2_ÏÈÆ@¬§!Ðãͧ3\õš(¥A U~pè]Š^CAw¿ÿ¡‚5×kˆe¬6T?‹ª¬2V9Ë«=­¦~@‰t/XÁá[N•NÂÔNia†6.€ëNI/+öÚaƒ¾*¼¦èhî7v–wæùÚ›.=Ï÷V˜Ößô=&‰n/+#1 Srªi×Ü·£´ç%â ùUx€ÖèËä¥r‹Ìš}¯½×“÷’ôP³Â¢vS`±š6Oè ´ê »‚ÂÊ÷»ÜìkI»¡[åʵ*C‹4F Ôôº@ÙæÐíxHBÞUYê̬•hÎôò24[Yª·è-ÐÂ7§kÁ:þ9 ·9ôê›ÿpÍ¿þõ)ÈjpµóÁ·çKÃ7³XùO´ù¯>ï¥Õ4›yZMëÚâØ½I™·…”ÅõðÚÕü¹I”,»kï¦Â-¼Xúlýï›òk†»o›Œ7ýçˆËyt?èžß#r½{þèEÈ|yxökœ¨§…¿±fùÖ ÛÖoÙ M Uj¡òÜ¥eüÁt=z8<µX·-G¡ÑôpgÈ#÷0x6}òä©gŽ_yçÞeË26€»þô¤éóÆIÊ’ÛêÝîzo¶w/ Ôô투¾gpmÈÙ›ãW‰"j@¯ˆPÕ:*^¿‹Í¢…™b"…ݼHÙ빉HL[:¸‡ßû&ø×h6Z •?$T¤Å.ŠMc—`zî¿÷“Ë ˜M4§šÀ¹Þ'BZÿ€àGú¶IVçÒØÛ>™àÇ”w7è"²¬ dꪪk½™žÔi¦xÚÍé¿ A_ÿˆÿ~€‡rJz‡>*31‘A»A£²QÓ߇ïxŸ¶X¬VXLŒ€Á¢1i £§#²ß”o»`TI”KS¤6iŒäŸ¨Ó4 ¾ ‹ í[…ÝÆ6¶¬<3}ÐÐWW[ £áBõ+s#sT9º¸®<™}‘é¥ÿ+R´ñ{Á_Ýh;èGÿ#B5d‰*¸"%<"‚Ø ž[5VÅYßîv²ÞýÎÃð0Ó-?·–MÑegÀTFRî+//.+aQÌÿó/÷¥}ƒÿJ 8»‡öÞûl„Єè#‘†-¿\¿Úذ¯¼¶À6EU2“–¢HJ/—©Tî5:½¶zß üêd¼ OÃøE$ÚÀz”^Þ€gº:Î0Ÿê:JuBý^Gýñc«7F‡e²FLktÛ÷ãO—›ço$Å‹w ³TaÀªé™6é·šào§ç¤”ú?¿ÖFdÊâûAŸõÌ%â]D>Úëu‘í¦k ·¨2h-½cÙ–•»­‹AòÉj~úƃCÖh ÜoÕÎÿ_î¾ø¾ÄŽ ÒìO%¯½·ä] ”<|·ÿÿuÿ©.Ð9ï}"ŸI‡ (–»ƒÐÒÿU"õeæ³ß£2.™Õþt‘ž0¹.Õ]8zÔD~ˆ2²¨-¹$V*gÓ¢ä;àf§sí9¶ÎTáµL½¬Fœ“£ÊSò™ù?ÿrï¡"Î’þšËìû³|À®šŸ§É’åçã!xÈ6¼âW ;W gñP³Îª±ie²˜·ÂÉGƒâÑ\ˆ¦Aôr3 GCÑP‹¥”÷Âv‹Æ¬!Q6è †Ñ}ceòc PÖÙ  d­žì›*j3íù?ãfüij ~>Ïš„§IBUª|¾µ©1ë,¬‰.-ªv—–¢ahØ14¢y­\ƒÂðx4DkR[ÔÐ@.½ï".ZÝg̬ƒ,„(¾8bD¿ýéO­>ÏÐ|qøÞïÊûŸÎåÿUÇ‹1€\¥LZu–§®ÌSÝ኉ÎJ•°Â[3Ãm £Éªoæ=Ç F¼zò£†:•¼–ÍTçäà ˜âÖ)ˆÜ…DÖêÌ r¼>h4z  ¡¨ÿ 8öÛendstream endobj 83 0 obj << /Filter /FlateDecode /Length 296 >> stream xœ]Q1nÃ0 Üõ ýÀ’cK `hI— -жe:ðYPœ¡¿ï‘N:t¸N¤x²9_ÏyÙtóQ×ôE›ž—> stream xœ­—{pSuÇo(EÙ¶êÞ+º¸¸«,«î¢+jE@@ÞH …Ö¦¯´´iÚ¤4¯&79¹7ïWÛ4½}¦)i+ÝByh‹Pyå¡Ëꬢ«ë¸î8¿Ô«ÃþÚ2º³º3ëÌþ‘If’œœÇç{¾'"bú4B$Ý–ºvíªÅL¼¼§PÈúzöøÖHCâôÆ{“ æ¢ûîølÎÛ·ÓE¢„ÛörŽ2KQ ÌÇOEåÙe %AÒâ4E™råj•z}þÆyáKSæfÄ:b)±ØDl!"iD:±˜XE,!^ VkˆÙÄ‘YĈ,"+q'N…˜NÙ¦=?íMñ²é+Ò$3%ÇnË$“Èø ÓÌ3¯ÎzhÖŠÄ{£³çÎŽÅ™¤øgZ>¾ˆ¡¯O4œ_}CÊÔÔ+ÁDªƒúÈvQ6ÖÈÙΜìä¼£ÕÞäŽØì Ñ‘Oþä'W¾6]øyu&­WZë@KîèÍ?t£=èöêÑSc¢*WÈ7¥Yeô¶¶{Ú<<Ý<2ˆ¦Áqò\æ@êâôÕÊ*Êtìåhd€J¦SWÔ®3©óëµÙx'Õt!|¸ȰO#¯`´š—è¤øeˆŽ‹¢¢øø˜4ìîÞ{Ó‘â³yB¤Ûd7P¥PÌ(@ù\!¼šø@½TZ¯ÕáŠX*ª”¥f-Ôaazµ>,ØRÚŽ€7è…°¯ª–3%Pk¹²[_®Ôz!p®/óÐhŽðžá´À¤“-ðÊšEä:wMŒ>D¯K­×΃Ú ESbª,ƒòIèùžÐÀðú`Á†ü­Ê:ªll‹·È6 Ò² ÚÝëaéØWcí1 ›{õŠªVæ ÷ÑÕkó³vA=(¡"Ðîà[ ‹ìÜã®Ù]VZ˜ñjå±¾óNŽòçöÉNùåq$mŸXÈz‹Ùh¡å÷­(/RVÝÃ+ÝwkX#dñƒW§¬€8ã;!ŽWÅïÚ'¶£‹ ÕzjtÕõ5zÊb2™ÕÆR£¢^±SX™l®É\¾ ÈmÚý›NŮҲû Lö§-Ìæë§Ë6:¨Îݸw–éJ*:{žz#ì {z÷ûbM]]”楺ôì­¥9Ń\Õ¾F@ÐïõxÐLFvR^žv ÷Ô—_~‚º¨¤ñ;±_é@§±\£cè-)zJ‚îGô?ÑôË«ÞË•öÿˆÉöèîøÔÓËrûüTòþˆâyY売<:mç:^ÚÂ)Þ¤åщýS¨î?7zý'£hðø”Ã3„Ö:ÛcÌ{Õ° Œ`ft–:ËÄ]¸~ {¸»³±Ÿ§Úø^–œl‰Õ\ËP•Ï*·aŨ4¾¾&{«½‘¶7¼pvMä1_4ÔÓÓÚvxäàþ#à°V¿ÅîzÖ VÖ²ÑË nr‹vDø}Ýʽ;K2 O¤R9²ìœ<ênaK zú+ZÅ‹Ñ.›t¬lŸL^YV¢—îõì/ű6› H›ÍZûLþ:¹œÆkÞ‚O £Ãìð]¹ŒfP8 |%úà+1Ú<"”·——·•G"mm*)~JØÚ‚åÑM>È#/º9mÎûÄiñÍiOÝ$ðúÎæSK7”T—æS›³7ÿZµLXòíœd«ÙQïl•¬;"ÉÍëä^‚KðNïÐÃ{ÎÀÛp1w8¯}tïñSp‘V K¥“ÖRŽ7c¥Uç`½}´€&ÝŽ6HayNêKE o%»Ÿ)›lrÚZ2Ì… lÝþWòE¶ vCùÓ%2Ù–•y\–3zÁ Žfú rò\DK°’RF{‹Öa"Îá£îæ¨}tDŒBñR” ‘ ô™°“§pxwùêðQÞ ;­ÒÅá,Öïˆë¨o˜DI bm ¢…«’=»väËJ3ð]h½ßÍÚÝNêÈåщr\R(ÌÞ"ÌÎzÄPƒ;o$U†@·»«ßOxjôRºÄ‹ÇPlLßg¤cjDÏhá7B¯ ^ÄŸ yh!@JJ8!üBÚt&|eàBç‘þcC@q®Þ˜nØV¾€ÖJµ夿¯ÈIÏÄk¢"r}Ð9Úñw\öïêøñGyÑõ³¨¨MÜø¹ÔÂ0 þ3brœŽÃåv…›Ýnï“‘g.Áô¶¶4½‡ö—äž±Z zjõšÜìà;«‡ÿâdršå€ ‡ß}»Ò=L6ÁÉõ¿FøƒRGmDE f‘gÏIYß~TvÍè<Ú2Ðd òª…'„'…Ôíit5súãáÄ8gAâ\‚ø›cC»endstream endobj 85 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1643 >> stream xœ”klSçÇq0§Ô$-Ô›SMç@»VkáK[m+TšÔU”KÌ(iHÈH‚ã ¾;¾Ÿsžã»ßb“8±'v.[H2BÒHi%Š(ݨ@[ÙP¦2&íÃô:v˜¶}Ø´÷|yÏ—G¿óüÿç'ÀÊÖ`@ôΞ=?{ó›Ûó ®áÁö•]kA,qYâ;ë¶o¼õìåŠÙg°oÎúŽS]»µ²ãm'v`Ø>¬ ;€mÃj°7°]Ønì=¬{šŸ‡•a†5Ï_þ¾ìÒZÙÚ¢QÑÕU¾"µäJdNPÚtÍ·$DuèM‰'žðÄc€M çÏM_|¬O]÷ó£œHSCšÚÀ&\v®sêþ$Ú Û2 ^Ï X‚>*sâ½qHÅŒ`®(¼žGO‘Qåð± €£ ôz½ô×ÝWÞÚWÛØÞAª¯¿ –'¼Ê#ÝÕ@ýot>yiðÁ€Raq)h¹¤—øzÁONÌL¥ÇŸKÕiUmnßOÊÖÖ×¾S3àv÷°²¼¤°ô¡¹å(-¸'D!é™ê™ O³îÀëó„'3ƒ#CE_z ÉÄÌ VG+XqU¯¡?›ïÿÕØÉQÙÎÃGN©‰ÓK;ÿ;ãÿ·ÓÑ@®$Ê<…Ò£‚ T,½,aÜÎ0°àî„_."ìf¡o~d¼oÆdc,OpøíÀ@'e¼I¤ƒ.°²vhvó¯v#hÖgÈ “ Á úÓ:š±Ù¥år9©‡Û¸óÒ/Ñç¡1wè7Py&)–‰ê5 šÑ‚ÜÃq@cŒ@oaô.†¡L$÷üâµ…¶½ •>[—ÇM ¸Ù‰$¢S ã€û⌛AǸu¤ÚM¹! þÀ '1¶JÑ÷ŽÄxm=*¯µÒoš_À©V¦Û²JlJ„'ÜlˆX-EERÙÌšú"_·~®!WXž\íÛ§÷ ׄ¥xiƒÄ7ðÁÓ~³SÉÈMí´sª÷qv)C5ìø1à5º±™ÅâŸÒ‹dxЂ$¾PŸ?ü½Fn‹ùqVþ°‡ÈÜ™å[Y”j›Ò®%·èª¡å†üãsžôa<`in©mkl’´xNç?òzgÀh£jÕ/t5uSM×ÿ†ÖÝFòDùʤ:g/ Ù:WØXúä«¡ûßÞd(IK+’P‘õðͽ%ºý;õŽzåO·‘µÇeÝU€s"dÒKPÅð½/àøW®p$ÁÍŠ´&>($þwi7{†üTôg¢ü€ûcüöL £´Ã =ŸÛÏú® „tÓyô-ÑÝ\m£ÑÞéT“¶Khñ}ÖvãÎäý”— ›º)«‹!T?mPwÞêÊ þioôæÁϧz¹yô}^èѪ¿dYðÇk…Ï…h~¥LÒ¯O(åŠvUBŸÎ ä îå‡BÉAŽpœ|;*k&Ž}ô—ÿ”—ò­ÆF^f³/;HF‡Ép6œíÉß’†Ò‘aèÅçšF«_=Êm6ý+°Ü×¿Îæ…Æhiçÿê·ù~”¾ZÅ1|”KÂÒk QˆPAËA;ÔóO¿McTª—Ɉ*YW·ÞÎ'= H(XFB!ª_;ûOPÈ;ŽçTÙ‘ÌQN¬/ûáñS ^â§A¼Ãþƒn™xendstream endobj 86 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1558 >> stream xœU”}leÇïÚ­;tV%VVƒWß4 N ¢ ¾ò_¶(Û2Æ6ƺn¬t]˶Þz}»ûÝõ½×½Õ+tÎÎ*sl8'0š߂ò‡âÛb‰ÆÄ<×=“xÛ¢Ñ\.w—ç.÷ù~~ß;’(Ð$I=¹½¬â¡ÒùÓåp­|ö÷¼»еP\0°\÷ÆRt×ͨèÆßn" Iò†[n¿çþš¶¶ûÞ=æ=-÷Õ™ëšë,ÍuVkÝ[¹­focmÙÚØÜh®i#â†mÛÉúý âÕ·´–ÄJbÑFì$ª‰]D–&ýd€äHžB¯ÂÄirˆ<£yIãÒ.Õ†µÇ Z ¾*ÜP8TxM èómg•ßÎ’Ê+Wµè™_ §ü¤÷ý£ˆCÅg¿HöÆâ9 ¾7u9|]à3y" K©!:ÕOÀuºe¢¬i {ï}ô#ëwâg:slbÍÍÏz\^îênmëq€âD4” ¾J&DñHæÔ}Î1Ý5Ý9 ßÁ¥s“òpd‚TÔ ü!+ãrÒ­NÎëuúyY¿—uñÐ UPÑ¿9Õ+¨€nèâ»”~yÁ[—óËdrö鵊A™1 ã['ñþ3˜:¼[²% "¤R/¼÷á—ߢ+éz¸Û/Vá@°U`B–ã@¿8)G¼B Ûîö0&kàŽr0¢>Ž´“h&‹n¢‚1*ÄK?ÏÛ:è•X‡ßÁÜ»®í}ÇØ>t‡:¿w^ ôù†A „}ÔØí®uv\²—=‚mÐT7ÔÇl²/ÌT—mW‹\9§i¨;Çá,|„î–§ßE…3hõkèJFPÅŸäOjQ9 ²ÖŒÅbµZ,k6›Édi½ÀÁ´RŸQe™?Ó¢Qå/Œ¿ú "£a!‚%±À¬(Ýñ8OãŽ"Ø Mµû÷Yê8ïãý~ðBOüyÿ‰©2ȨT ®,‚h:Qw¬ùŸŠ§•í*ù Å®UŒèuÞ‰ª\INdÁØÓãf<"'1&´WcugŽ‘I¸1QL&iT¥nµ¸V䣾“±¸$B(6ñ"^ƒª˜F[ÑÖ’p¤¿7D5BTNÜÅúý C«oGÎqò{ió+Ó0˜Yv€Ó47¦s:ÀnOÁ I?Û‰ŒãhÕ8‰¢ŠÖpæÓ‘ j/“ ¸;·»é=>þ ^VÖå ðàQ£r'r/»‘¦úÒÃÓ˜ ¹C|¨¸ÉXó…>5).Ý [šŸ–r©¶ûAãôÄå¯/£e3}‘ QÕ«È‹œÈ ö8ÖL­ÿq¢üq¿àZ°ëbGž8³Å47Œ_44g3{2äF†d™RÎëF,oZ'¬åMÍmv»*wUí¸p!ã„VyçÕ%Ñm¨è º(Tªûw¯Öá x9¾¯Åk‘zDLhõÖKuøNÀEW\è¶ùùáÛU9i娼èqò‹A ÇÂ\ísû9?=w ÷9Ù€X#¸#ž>¯r ÷–ôzDª]Ç¥¸?⌙ædÄ*‘9û"f;tšæFuíÿL"ÿõµò…ž_ȧղüuÅ€ŸRŒžùoßȃö'Kº{ÔËå z£‘Á¾˜DGÂý’CsK¢‡Â‡~F¢}Jåìc%Ѿù_•`.Öã;Ä.tÂ8ƒô3äL~¥6_~6ö&Xëéàiÿý›Ë7Â6¨z»òíS/M= &ŸÃšÒ¦^¤ 4…æ›ÉáœØ}r÷tõ{ÕŸ«vÉæ“ž¾®`\¼Нƒâë¡x)Aü ÏËX_endstream endobj 87 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2361 >> stream xœ­V{TgŸ’P2jϤvÝõÑjÅÖÚÚ²U¬ï"¢bµ* JåA"ïp“ˆ ¨¼’@ïG R„RŸ»Ê.­ÖÕƒÕ=¶ÖWm…ÞÐsv'XÏöœîŸ;3ÌœóÝûýîïþ~÷åìD‰D"ér¿Þ oÓÆÆ2$à"ç²&ëdèê~ejï4ÊqyÄ*’ÃÂ÷|ýòï…oÌxsÉÛA>ûgÏ¡¨ TµZA­¤VSk)?j=åB¹S2Š¥<('Ê‹šN½@í§x*šDM¦<…})g*‚úEô©Ó§N±Q<æü†ó¿%k%g¥îÒút}y‘IgÌÌ¿&Í”=é¦=ÏÍž§±Ø˜EµÃX?,¶Gâ^Ÿ›5J\‰û\""î„{ò2NB×Ç‘åIÙÁ…@°Iq"¾ ÎC ´Ã@u×ñ=¦è‚O”5!5!á°•ÁÊ à˜mÀ¸ÙûÉ+¾b¶{Ùâ-²Ñ!,ö`àR» 7H“™Iýeav°œ½1Ai`5E7éúõ5pú´Íù']þh¥Wk [ŽïЇé‚T[àWÀà”'‘Cvî#â,gø@hp’’1R躾޺>`.ŸHˆëŠÅËv…;ò4èÀ( ª«]b±ëÄØé\}[[ouµ¥³´GÇXé8mt~DÃý~°{mÒí‡TH=°?'ÛÏÇÓçqF1èá”–6NDä¯Ñ¦Â>Ø¡Sè'"¾]~ÿ#ÂyÎ#S¶lÐî¯(ºFoÕÕ@Ø´ÕOËR²ŽB)˜ëÏ_új–g‘æh*dCF†Z‘ÏDÑõºSz³ÀB{~½vby ¨ô‰uJ5f¥ÍîeÆÝ6YÓ0– y°jû´Ï¹54Î*‘Xé™…½r¶×þäW‚¿(ÊúPN¢è˜–š@`Èä—æްg£TΪ/@w“¥A“3 ¥AZMJôö eÁžš„¶¸Î¼ÓÐ ­úsuÝ&k[ã4ƒMm *I-¨44Œ6¡¯Y&è(c0ÞâÁÚÑ ¸C8禥 ˜ŸŠÉô09ÉØÇaƒÔlÓ£À‚¸˜Wgw9;Bž™‹4ºu£¸²8SŸ“¡ÍÎÔò3½álƒ]õ‰­ÑŸÂ ´[呪pã™›UU²Úþ¤«è{µ¹?øŒû³ãq)÷:üPu\×Pj‘©ªíæ6ÌJTäGªãå™é‰±»„â™0BU¹±=¶3¯˜»CC_·¦¶ÆWÉ[šZ *„΀!_“›£t&åhzYqeaUyzCXRpöG¡|hc¨A Ìü•+ÿl·ì“ïW«öBÃŽQu4ܚ䟻˜å6£N~Òw­9­ok-¿¥6ÖC<„@–.òà>+ŒÏ$CÜŸWö}v¢­µË ?+½…ΰ(ð½msänXï© ]GeWGW z°wq…}=G^tôóâál¡ŸægviÐ è«…®4k›žêjMnA»œ}|ÐÞÆ5Ä›b£”Š8…9ÎZk15ð™ÇD6ŠŸbl-÷Œ—?ËÙ¨ûLo ôj[cA·±+°”f: a¸ãñ`{Ñ pÄô,¶Y×§?5Ðÿ ÏSû¾O?ùòÔ…¿•näIÚÿeíŸùõ n¢áX£ZÒÊ÷`1û§„§Ý^V¾°#$ÖaoŒÐd†£L¶w¢P·±Š7MØÝ'Œ"»¤ClŸ‡)u«£1Ò䤥Ǡ2) ’ÓxÒHé´dHJª„cr¾¤il4Bå1^P¥Ò<æiµc‘0ECð2×s®G\Ùyÿ­²Pð߸æG®Ìñ·aéAïÎw?Yr9©à+S×½†¡‚kðO†ì!—¹0Ø`QÝלƒïà,\€Á¢Jœrõ°aPU9»x¼ ïÃRX¥Y§~ectcºæ ýhµvE¨¸"Æž±ç¸jÐ'ò~ë^ƒH†ˆQHÕ_ÃŒ—Ò{òÒ½ùÈ(i³á6t÷mhÎs°I{ç•´Ê©¾Æ‘‘ÇVÙÉ þö©Ù¯¹ÑŸpòçà/”z_'nD²ìÕ…›N‚¡¼ùHgª&"S ùy|ÕÅÖ3À|ûÉ’·ÞÞöÎf?9ÙLöj4ÂHðbGì´´}%ñÒœè¬àê¬Ì5 œÀ¯¬µ¿T5üm‡Ef»ƒaß­½ãÁŽ£'Þàªi<„ÓZúªmÙ›yõ.ŠªV›Ëê·Ÿ þôMò™.̰89û 1"óÞ]ßû^ˆcÞ'bž_»·&mÎ r•{¢Ïe—ªzà:T0×~¸Svü¬|ÅnØ ÂvØ–²'ÚgN¢€G0Çè “]m”Ý]Uï``†síö’FEE\œBµ—oß®Së2€W1 tåL;YÀÕ%TÇÄ$$ÄÄT'ÔÕUW×M¨¢ÿ~Ë…ÂN&vaMWâIÇÁ·Ø¾“ÛYŸÛåÌù‹¶//_ø`ùưíþ¼YÍ]jíí‡Aæ»…§ÌZ²l¾JdÛÁ—¤·Æ[Rö§€˜E›f??ãÇÕ#(¹7üs‹¦;ÜÆ'›R‹×u0³B9œêS›Ü ë½–-ýà­EËÿ:|¦áÂ7=†ÅØQÑ­Q1n¶»ý+¹æü{üXOM¸Ô)p‘lö`ÿïhönò¸˜ƒXðY·,+Shw“U[Pré:2uÚ+*E\\¹¢¥@:_¨+Ñ:oo5Ýè!ƒF1cèyòB… ™‘þSE…Dp(zuàüÑ©±yâ±åx+}fÎñûÒ_ÍX*·ß#[¸_m«–/U?³©cKwƒºeÃx˃ýÆþúØ .µT’¾#81¾´8…W”© S„ÿ•dåÖMejO][OW•E} œ?žZ‘UmPiî;%@õ$Ó/›Œ¢GgÄx“dq`}J9qGY$ÎômC_œŠîGLJ)Ì5dð^EØ üVâ”NÄÂLò)!®ŸÉ92õÖÚb`4Êÿ›S…Ü64ppMƒ®›QâS]<Lvnnvh+Uò‡³O“×€„yw7yL#²ýélgÌ=T|çÈžåûÐéŠá&ãÆOv^lt™.“Áe ¸È(ê?!i6îendstream endobj 88 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 554 >> stream xœŽ_HSqÅ·»]¯óºÚ↽lP=øçÁ2Å2˜ôHYb…EÙ”66+·»²`ãÄ"ÿmÄ]S¦Ø “E“%þÉ„Rİ ‚¬d£ß½Ü‚îÎy9ðá|¿‡!†-„aã‘cÇ÷çC <ê]µÊ…`ˆ* ëkËìÖô6’—±¼¢²ÎOˆ…XÉvb#áô61Yfê‰y¡ÍʘgL51©,gYÅG×Eü ¬8—Ï~©yÐ ÍŠ3û|]—B{Ñ‚£áÝ™ƒÓ‡ßõÌ!ƒÈÌæäz8‹^sk+âe8¢ž\`ß1‹5¼XˆýþÐ?ŠGX»&—6ãÑ„ é„g—Ãç¯ÿFRy˜|&3TúÈÒUÕ"&BwºmíçO¹ÊÀ; ˜ÇËÿ·¿àbP*³u8¹TxiÝŸ‘ ΥɎ‚²àà¤=êý•û™dærÔýƒ¥é91yšŒ¿Z\ZÀWžíy¯Y4¡¶¼òôÔ­áØDäÉl+$ÛøÛÕÑçà¿ej«Kê5“Vl׬Ú)€®ìTìÜ8m4vrAo_«Ôs»¯×Ákά®ÒâiZ3Í,©-¬ÚE7ĈŒxÜ…^û¿B®×·[FÄ®kbdD'Þ<±p½^ŒèD߬¬m2Yšc•j•ØÞÖ‰Üðô»†º‡®Þs㼞“MrOI*=Ä»1âOøïߌc rl~‰7ÛL†jY(„`‚PÁJÈM«ÿœendstream endobj 89 0 obj << /Filter /FlateDecode /Length 170 >> stream xœ]=Â0 …÷œÂ7Èb¨²”¥H§ÊÐ$JÓÛÓ$!†gÉö{ÖgÚçÁ» ô–‚~`ë¼I¸„5i„'ç `œÎŸ®V=«HhQñùŠ›më¯jFzçìTG¼…t0¸D¥1)?!铵’ 7+Ñ£ýq Á…$ÝecêXã»±\*L;è5%ô¹‚W°Âã<~‹!–l"o¤V¾endstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 179 >> stream xœcd`ab`dddsö Ž´±$º»NþéÅÚÍÃÜÍÃ2廽ÐyÁSüÇ@rÜ9‰%%™É©%ù L v ËÛ˜Y4tðý<÷½|'㓟ÒÌ?ý¿—‹Î^ؽhQiwµüŸ‹lÕ¥Ý%% »gËu/øÉ¾“ñ‡ÔNæ?eD¿ïdƒ«üËÍVQ9GþûŽ?_ÙªºK-ê^8[ޝ›‡«›‡»›GˆÒ„E]endstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 476 >> stream xœU‘OhAÆgÌÆYëk!´…aV„¢—‚­'oBíŪà!EÑ›¦ÚØ,›ÝhÕƒ5ÝÌ[4ÖƒŠÐ†ZЛþ;-V(êÉ»A¼ =½¥ƒÅ­µ·÷¾÷ñ½|”h;¥” >3phk%¾áqí=~ƒC{.uáà^<°÷u’8¥ûÎØã“SNÎr­üä%çïš-^-عËSÛ•m×úm°ìbÖp²¹’•Ÿ!„ÄoT®Ïž%tžz´F%²3‚#&yG6éXè%ÂQ@G—h),Ä‹ߓM¨ÏŠSþÁ/ 2ìç^ýÜÝ‘Ò6+ ¹ª¡{~ôøËf ®40……­„‚:šTkÊ}Óz¤eŽ0ªÅšüqû[IêʼnVönõ><½éû­ÿ#ÚËà—û”{NyŠ‹ ³}Ù\ôý…ºø‚Ý(>cúžþæ?ü?Ïq-Ù’¾sMʹª8¢º•8¦Òóú-˜+GÈÆ:ºoÑC.\û5ð¸P´°?\ÁþXTT$&¦zó¯?š«ìÓ³WØ#®J)†½OÇFÌÍUv|ú‚ê©Ðm¹¶®p•i_XBth3Ec`죋_ƒåÂendstream endobj 92 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1825 >> stream xœ•UkP×]Ú»8ÔÖ2ÄNvƒë’:m¦LêÄ™$c;6ö´Ž!‡§'@móÐ Œ„Ä[Ú+ô! a Æ€ c˜È¤Œƒ¤!iiiÜÇL‹;mÔΔé³î¸WˆÚÓN&3ÙÝ»3çÞï|gÏ=Ÿ€ˆ#Aä±C©I /&$?¶B>måîÊkB£":ž ê£ÿ±é“ Ó‰àµA*“+JJËròNå‰%ñ:‘B%ŽoiD:±ŸH$?%Gˆ$"™Øˆ+€h„ la‘aWÂEᶈg#œÂ-Bùy ìÿ~ ÈÝL¬–¼0¹5Ê@‚+QŸ\D’Åzìr`¿¨ð<p5½ÉòAn1—ÅÐ¥…€›3 —Iºô¦NH{½J .1^bѰà¿uçš3ëu†¯ùr”)'Cø›!üÆyËTnaQ€^n¨Ê£˜Èpœ€ÉpoaÙîNìi3¢¢ÖxÊ%ø3zw)©"hâ^„üvŠßŠ6îFQ(ò6ŠA¢¸e>–á¿Ç›E°•³B+|ÏÚßësø õÕÄ ß}CŸ|ê$+—äUåÁWáÑ÷´ŸëÛ¡CßN…zçSqóèˆ+°Í‘ûv í vß<ºŸ±÷¥ OÆghîÆê^ìÞï-ÒÓk@{.œº©œ‚£ï áh3 ‘¼(5­<7—ÈË7ˆš^ÊxúûÊ:àŸdÑ.íœ:¨™…‰îNòà•FØÀ52ë:ÿõèw„ýâ' 1´oÛ­;ñè_È1ßF!"IZþ¦3àZ¨á4*’™±Ä¯€ÏFïþ‰©©i¨†Õ”¬çlOïù®ÞñœîÓ©)éZ†öqËYMÂõݵ®@|oôðûHëÏÆÐýÛhP:ª‡ÔçwPÛç²ÇÓ:vò›à"5ûÇ;sW%‰-LAÛî0Ùl }ÏÂY,[oƒÖÆ–ÚÊÚ¨eô¤Ê¬n«4©Œªæ*H%îPƱõÀx¦GáRþ6=ãµÇS“”Çö¥¿?_ÍèÚ £T\M-Ëo°‰k„T±ÆfµÚ,fÆb±´X,æ–ǃÅýåEIåÑH°(ö 'Ý1ôèGû¢Äþ±xFèå%ÞF¢æ¢s²‹¹W«®@êÝK³#bÕ5TSoi_MI«ž½Ê n´ÓËïDI 䈚ÀúK¼5: ‹«gÁz¡Go–5ka ÔR|€ƒÔ)weXí‡WàxÇÀp+æj²^ŠEÏ´ ½@*3M°ô$âÿ¬VH/ÚÁ[œå÷‚—ßÞó|þ›ÖéFFß ñMaØX3¿K6ŽòúÐ\Ñ¿GÒÅ_zbèj´5ð¤È.+6ö'“™{ØRÀoäóøM»ïÉ?š¹Ñ;ÓÇȜႱéw.ýœ¹.ÎŧÅEM¾ v´ÐNÝÝñî®´øª—Ër÷àùî¾.M—ÂÌ ÓüE;=}0=íÐÉž©&Æ  m}0ã“"X܆5G—+öD/ÅÐóðÀvQy¶ –S²®ŠAW{÷¯žoO61’ßÏoá7,Ç#úÓù‘yÛÜb±ÂVÊZoª«0*+5Œâ­“²LHíÈüòKûn "Q®Q½ÊÅ„ŠÕxQn?zÁ%@ëP¥Í’K‹ýªjöŒ=3’u/å#yâ9þ žü ‰vüúÖÔB7k0ŒÐHµÖ·ÔUèŠ4µŒ"'«8¦ÃLW±_yY7 '(C¿¨íZÛëç¬æóð#8‘ÖvÀ šf õ?qˆZ‚X@rìÿå•}¢ÂN0؇óð>`½¡ÖQ9b.i ¿&¾9Wñ¡`TÍ­â+€Ljf‘@çQ»J§ÒÙ0*R8ô÷X¬ÊÓ›BÌ"…•wcr‘8¼“¡t¼Øð6Ë÷®¥ƒðbB÷HZ<³š¼j U4±pÈ–"µHÒTY ”ü‚lp¨§€¡½ýe®"†Óé8Ý6¬DBw¨^œuába¸ØäÐ7ÊP«N^7 ¿Â¯Á¶&qÞKб KvØÍmÖ»ÓÑao;Û®²«Üyד¡”R«Î2¡•…·ñÊ+«+A2TzOΞòçøó§ÏYN§Ý?:ãÿR^P î"……Àn«Õˆ3%²2V¬(ŠJ¨€ <’jåðšH¾± oðº¹Lö¾þ¿¼óŠôùL ù0Kÿ‰_oàê>œì2žS+ax·ð²ÿß„”Ÿzük‡¤o6ò‚2è…á‡^x ,LýîËkÇ“^õÐ «ø”AÑÆ¿5þ,HƒCµÀAΫr—Ld8ƒCuŸ¤$‰âÈÚùÄž˜÷ç—%¯ÍXf]¸moT$ŒZ£ƒQÑñÇ Ð?endstream endobj 93 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 702 >> stream xœ_HSqÅïÜ7«Ôá"¸“¨è!"( "úƒ”hŠ„šX‘ÿYùgÍ?Ûî67·»»}ïvÝÜÜ¿Ö6§™^PPR„´ÒŠÊ})¢ž %{ˆßæõ¡éy88øp˜(â‚ÒÒ¢‹{I;ÇR·3A"‰(œº™ýñÈü¡ÙÃØž„w›•v+ÆJö‡˜H)f(“´tçl'×3‰¦849™D(cay9d²0ùOÖÏ1Î×€o‰ÿ¬ª®4‘·êu÷ …€óùbÓÈ6ã(w¶ðïÇWøs¿&î&AE† KL&°Út|ÞnDnn´[®CØÁFS6›¬Œ1…`VÙQø ŰêˆC‚Ž<Àzp§‹õKÍ #L£qZ€eX—o õÉsÞ â_3µÕFs³U­è©±éAƒßXnø¹1ó{ÐMy zº×b'Ô…ÕZàm¾Oƒž×°‚ñ¹bÐ_*Æ…piòމKæq(7ö>*@òõ—kB´Éš°º­¥½E!ãÜÐèQÆÿ•±>o‚õº¼¬žã‹UcU'ïóòŠ5ƒ.·×EŒl¾<ê1¨»¬¤Ý¢¨às-`745<¥  Å+g¶ç<îtø5zÕm%t•Ë*טý‰¨;SHS§Mâ6‚z8/@ü·¥-!ú‘:#cX§ú Üå0:x‘Y®uð '~å¡m"}•=ýxþî¢Ü¦ ì¸*jù"ì‹á L¡Ëî+µ¢ƒòtGÑ=4 VèÅ‹ë?lŽ£SýûLv«–"L­×ÒLõ0=¦/ªØ3ðÃú…ÄUO" OÏͼ^€øi¯©ÉB¶B'®¶ãá¹i%w¿¤¼º¶†¨xð¤½AK‰,Ñ¥¨äH²@r$Ùö«ÞS:endstream endobj 94 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 283 >> stream xœïþCMR6‹‹ø®ù-‹ ‹ ›÷’Á¼¸12OÂøˆø÷‹²øŸ²·Ÿ÷¥á÷ûù©‡‹mIK%‹g‹d¥‹Í‹Ç§üj‹~$`dÂًËËً‡½ #²`$‹˜¬ø÷‹å÷ç÷ä²Ó÷÷•ðø®÷Of‰}I|€„…:‹}‹ûO÷ó­¦ä˪©©©´¾‹Ò÷ûÔûû16-X¶…–¤¨¯¡~«_¢¾È±Ð‹ôÃ=:D\BEKûûmŠŠ‹løG 7Ÿ ‹ ‹ ‹ Ë¥s®endstream endobj 95 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 114 >> stream xœcd`ab`dddsö Ž4±Ä»»Þü¾‚µ›‡¹›‡eÊ[¡}‚»ùw0€#/c`bddÑúÑÁ÷+ì{É~Æï‚?c˜nø^":{I÷Ò¥EÝÕò¹Øª‹º —tÏ–çëæáêæáîæb`¨P"²endstream endobj 96 0 obj << /Filter /FlateDecode /Length 5119 >> stream xœå\Ks+ÇuN¶,¯¼J*ZÀ« cÒïÇui¹R.Y–#‹¬¤RRR!90¼ôuÿöœsº{zf0xâU©{«8Àôóœ¯Ï»ñÄ•|Âð_ü»X_±ÉýÕWœ¾Ä?‹õä³›«øškø¦ôÌóÉÍÝUèÂ'Þ—‚ ?1ÎLnÖWß7S'Jï•.¶Ó™Òž‹ím3¯7øÑÀG]4S^2.­/*üÖâ‡âq¾›¯«¦ÂwÌKQìè]Qí›z=oªý¦wÆKWüÞ8G½š‡*Íã‹å¼™çOó]çt®ØÞMg¬dÊ  ¡<·¦¨6yßó}ìîdq;0ƒæÂB–ÕÝü‰Vε)VMÞPÚc¼¸þêú:âºdßN§ÿ~óÛ+.K «žÜüîêæï¾)§3áHÂÐtÛUµ„a4l$·]’+S:fê7K ó¸áak&6îóG–Â0‘Zßï¶O{ ›d92ßÐ\žM !LŒd/Võ÷´on€9«ú?æµ.c{®ˆ®ô¬Å€¯Â+h¬ÃÜðÑÂdBa— ڹȯ4u½Ood±žÿ±^ת–´fï-ÐeßTóvá<ÏÍ3\6VLfDo/.Ý–bø¶¥ÀBGúÐØo½YÖïëåÓ|•¾° “²E3/§3cž€â7´ñ1V ÆJ+xâÎ÷°G^Îyñ«éL[^:xü9¬½·V„1„ì¡KË•Kc|ŠËQ¥…mðÑ9¹+¥N­anli½-Þá£G;߆Ç/ð±N*ì ‡“£Ç0'M)™lwUo«§eµDЭV£+Ó°2“©ñ@ÈZó„l?ìXFq%Ú+`oi­ñº¥ ö<Ѫ¿2_jí¼›ôúlo÷ÕîýT+ÂÒ¼©‘‰Þqa‹ífÀ$Ao"˜ððbÏç>S`Ém„‡€såDã!îö©šŽ1ÎB9QüyzóÝA`/ÆÃ´>‘ä¸=å=3jœ$RsHâ¸ì„ÃÖ˜[…Gaâø¤×A$ Oƒ, ËÄ‹‡EŽÊ–Škqù•µgר;}Ti„­ÄãØX‚PõjT<–Vr£úz ·à7€‰L»ý¸lIÉ=ˆÓǰ ¯¼ç tbÈAÐ5ÐÉX×vì$¸Ò)ãZ©Abqlú0^lƒ´º‹è]MjxŒúĶgÇÁÐ_:>Â7luƒåb. ½Ãiô8´œ_ #Á`µÝ>/„Qj@ËӠΘá?l9žˆÎL‘çFÉQÂÁê 󪿺sMSlE…Cõì§Ïg¹ ²Ò{%Äæn†‰{>£¹Ô ¢ ‡¸A¿è¡äŸn®þ;‚=_±Éo@í2ÀÕDYƒ>Üd Bì+Psé›ÕÕõÑ„õàTÅ„5˜¥‚Í(@¬ }³~»¸È[ºbåâÃS6O*­Y;Á_;l,}{Ú†B»=à'æG·“N×ßÔÏ9‡ïÕܾ߸B rœT( r®/À‘o2»‹œ\Üñ㎠ðœYÂk¢ÀpDL¤ñÀjЬd$¨³]uuwå~å ó1‡--åÿõ§<#0ºYù–3ztd{þOà)ÓŽpsà«8æIH1Í õTxpØ +ƒ§Žnß¾[Ú€ô—E3j`‘=†Yp¤ç|0¥+P ¶é”3rœÂ crü˜ž@9ÎQ|9nÜÅ2ùž§D™årÜl€¥áðWj@öiÉZ™œªcþ’³¯fyå­£±úõÃJ!lðçµ4 žv êeïìw';\rX^˜œ§²…¦~gÁh-£ƒ5tû´yø¸\æz¤cè_„`à‰8&?fLërÕ"Þ€ݰîyfDóàuÌ0Caâ$3þOÕÛ`ºnЬ-ÐŒ.J0NxOŒâ¨óô›Å³/?臼âÚ ãÆ›„¿èQýh^1÷ÆÔüé£ÏàÏBëŸ*ü<à3EŸU©"ùÈ4ö¸~z@kx­x:0Lé¦83<ùèƒ@GÍ>éþ. ->pî«ï½!Z&/'šþiI†å!`˜}=¤ˆ´Þ`F2×ã<ÆÊ”•#„Ö`qœÔÛKX Lü/âãY€Z†ñZS¬#…U*?”•Ò•N³ÁÇ0 ,ÞrBpò¼ñÌ•-•àãùû`‡Ùœ´·~Þ¿J²âº™ïšéßÕã—xH‚6Ûãµ`–¢ýâT¸vü~ PJ@ É®ÚHÐõšÏñŽÁ¾“Ð3Ý„Þ#®ì8Z›pB­k½Yl×U‡]²b·M5åÅ.Sô¡ªï¦éÄ6ùE—ž »«p­§‚':Ê€& NÜlRc9¨«¾]¥9DqªÜëfÒ¯9ôÕÑìÑ\x0Gt ¹—¥2í7¯!ºy aWâ%¢–êR‘|ýçu½D§t-Ï9jI'*Ñ©“õN´!¥¡ˆ@›6;ÞävdI¯d±ÙÆv8ã¾¾ßÔŸ,ÂdTÜA/ µLI똕wpî ô¸NZ³¬V$ëq|VI³ÃÈw³˜QËLŠABÎôfÑ‘·T@'ñ°¯àJƒ%µ¦䈰éÉëÅ;s W‡«eF2Èè&Ðg“v˜“o¶OMFó|ù]W©ƒ€ßÜçÑ´a~Ý¢õõãª^Ô²Mk×}˜:j†Êöô·ïúévOÕ3íÛei z¸Ë'-(¢ýdu¥6Y0BK•¿ydÑ„Æ,Gwµ…¬Ž&Ôu“¯¦=†+Q<×{dƒ÷ñj×"A *ñáŸebw¼vÕz^oêÌ¢<¾ì_ŠGB~ûŒ$øA}¹\6pÍ ]©T¾jq&PV„ ˆ³žXUÐNÿ¢¨ôž,RÀ.“¯ÃkX„…€+ü#¡Lç%¦w:M¿)~rMàq†ñÂD· &ÐÍ@ÿ}xÄ[«b4¶-(}”&'CçË\ËVÔ™; ÚdðÙ(°8•#N/ßè(GÄT8^ã6.–£» þì(Ž;tø‰ãxÁë8Œ©@h–›^Ä]̆ñªÝm±a‹÷åÜùë‰\GžoAnRÅŽ’ ¬1ÇqÖç‡)é\é?†:é7;CJ|ÄC”Kû¹™ðð („*Ù‚lxÓUçä+P =I˜ÑŠ]c@aéN¨i{ª²y ßÀ÷Š~=â‚@N AáèÜŽEÙÀvÑà¶âpŸoÒÔ6­C“¥¶xZ·NÑÓjÞÔ=c­]Íö¾nÒNL¶[Àœ šÛ?­3´¯6º4‰0Ýëœ(Yì]#q–*c©ºÄcܳ¢{Ÿ÷ç±tFÙQ豨>á}§±úw†Éñ@˜uÁþi¨äs\ž¿OŒ¹ˆ~Álœ*W fCæ°Bc¤`–½¢Žräjñé¥âÕbô°FŠg¦‹Æ‹gd*Ǫg_{OæųG7Žþ–=¼¸¼5]ù~s¾\ùæTŸÞêÌ=ÿîï¶Ï%w¾ÓÍ¡p³"¨6å± E\“£tݺë_…üW®óåujéègm~B>Öêùs…AñâL :*3ÃKð`£8 þPÌhÖzñ|¼ Ó¤;î±G¸ã>Ã:ká>ºx«Eû3?O³01þn‰Ïqï dup€4IèAÌÇœNá/ª¥±]Ew÷S„0…0¶ÞRø)¢tã de(0žœ@"Û> stream xœÝZI“#G6×N|ÁAè˜"¬rî‹}òL`‚pØž&|˜@#Õ´ZÚ*ÉÃðëyKfUVIn s€èC×’ùòíï{¯ôÝL6j&ñ/ÿ_íïL“âìíœýþ.%Ý(f>ùÐøÙþÎ)š˃ÝÝ X÷p÷Ý""³üoµŸ=»¿ûäf©I^ûÙý›;>@Ítò×fæ£m‚U³ûýÝKñâ¼<ç œnR‚Ûöq¾0Æ4R¡à…–®'/ôü/÷¼ûÝýÝ׫!¸FÚš×ü™ýIŒ*é½kltÌçWs°zhOÈ2Äö0_H¸òʱ:î[bë“o´ª©&ÕXcf¡‘ÁH ·r(‹²¶1ã+ÙèS`*#Þ…ÌBƒÉ<\›lmÚŠ­íÃÖ4Rê Î?…¿1/ Ž&qGlŒTÉ+ôVzÞ¢p‹“Ò«xƒ££Rš-À$2‚£Ñžç ‚GËH¼-4,”h+Õ$ç¯ûÃòñq{h»†˜®7N„ÒA6>ħ„{êNšÚ{ò“ÿØ{´jT´ì=Ï—»Õe·¶­–FsÁʯAa¸ Ðr®è€èè!à `g]ˆ®8 ×ßÎ#¢ @Ëݺ`  ÚvçæVî[ô’þ3Íï‘ýFÚ²eÏ—ÇÂF§v}YaÖË'†¬+d'²ÏÞz„ yÆo,5¥ûÆJi±\¯·‡‡¢iÀÉ´^¼¹œÎ›/ûb S,pårÖc¯<.?xÊᔃ'å˜Ä*óªqÎÏ,ø¾–]îžmaÁ²(rõé|a-{qÙï—§wÌ6ø{V˜ÙDuíDØ(ѵ»¶W0’M¨-ô!“§$ Àñ4ê¿ Ot¡T´®È6}"KI²«,¼nŒE3£¦MΫ#£ÀµÇü} ‚™TLápcUÀkˆ‘oÈÕ!_٬ò$Ónû&í“hwÛMŽ>¼ÅKOt×™$ß7è¤lÝÑå°Bö“‹À ëÅÇS>‚Áù #fĉÕi{nA€Â§ëËv»ÎÏ žòVð§jk(ÜȰ@¸Û{Ñ.8oð“’5³Œ¸;±ŒÈ±ó$¤ÔDt"dM*òžW|Êሼ X¤c–MM[Æ×«ùÇÃ;@rÒÚ÷"^vçíá¸ß.wå0†?tç’©`Í™¨ˆÍ²crÈáùXx˜ÂÊÒŠ3 z½6ó…wåN|ÞõšA“uóp:^s GÒæzûëöD)6a]îü–îH¾öb_¹K»ë -Ö—¶Ü«¸!Á5’¦,›Œ†ÜEiÌk9'†rOø}Y¥ix`rT<%æ Íà8 µ!눡l';úÐEk,Ø’6.PEƒâ(±²îð_‘Í”¤’ñ–³¬ÚõÔböZ£Š›à;ˆ‚ž:%Æ‚’F…®ðFÎ @K«ãþqy¢£'`YÞw…ÑPN”ávd£I¿–V}¦È·…7( ëyÑÔÛÍvÕK¹)ÉÖ‚µV»ËšMuLtåU*¦ ‰Ë ÙÌ`®¥æpÔ‚|7æñÇçHÅ%ñ‚È(Y_q݆RY=|A«ðFê’xH½§#r~¿]“w9ªƒPéwï†.¢®CÆÔéñbî(´C=¸¬VÇ„ ᪥-0¢Â¨§`ƒÙV‹¡?vF™QOP£·· ªª[é{ ïh€È Ô‚ME„†MOšŠŠí² ðá¢Z›µ…èMöÖñ€(µ»ÂÕùðiy·¶ØÜåå©ÞQÒº®«.2¡ºŠ7ÂýTÇa Sbì8ª4LBetä¸Fgänš`;š«º^Mß«->Ĭ†Hi¨é˜,ù û¶¦A[Äù‰KÚÃr·ý×’k “†ØžöÝü–*4QÐx=åFZÄÞÓ®ÝhêÚËÔw›¥ç ,ÛÁ¡¹çÒ‰JÞÔ{¦N¢5˜ÛêQÓõ3ù=K¦bùG±éF Í]/¿8‚9”!PòcB(„æ½Zh:­ a†›áå1É'¤D¦QêÿŽL4?ÅDaßSÛg‡¸Eøü}UEÞ•ð ŠûWu»"xŒ(ÃÒ@€\–óÊ è}a¬‘–²?!~¼6HCÙž —38^T•–v;*aë¾x-ÏËa/W6ÆOÒ)¿¾ôxe¸˜ø H/víršUˆhdµ1 nÏ·O¶ääP@K´Ûõy ؆f(mÅæ¸]µOUÝi³¥ñ ¡Ê%4Û› álo;|Žøõ§  ²¼ ÑËã©z|8Ñ ÝdbkA'@h—!ówŽªÑ<Žc¯â·d*æ´$hÚãDw>A}xxWxp°t\ˆÈ0¿ ¡t†Áùá: ©0‘„üïœ[ãÅX±ÅKÍj ÔâžØ3­Kè lÐÌ56Þ‘Ÿ$©e<Û î¯lÍ•øy6ž ÐБá)Ø9^ºvï@%ˆ²iXõ\˜ÁeËÇ ±å:}\´Èˆ¶LÑ.oôýëŠB~çRj0¡®ÕW­\á#Ò [ ™D5~äwÔ£a8GzÄUÃ}kzÿ뜯¼4ÛÐrà>k®cGÓ§U×Ë}{®ÚšnØÏíÀÇü”Qàùj zΤ¡÷¬}«8ƒ-3ÐQ±øSq£>*Y1ëízÀÑyöÅàrµ:^x¢–À©òlýû æ´¶‰šwÞà&câ8LN’ äŽy}ûÑŠžRâ¡>="ŠYµçd&EÈ(ðë/‡º–‹›“Aæ«‚¨ Þ›þ“­ìÁ–G:ä·Nyg£íŸð8V âS¼ôpéø²zÊ—Ÿ žæ4eqÌ…œÆ¨ã§™»TícÀ¢ŠoH©U@©Âê0 “¸x+oªÍEúB¯®¸˜ï>ffç¢A€µ€dÒ(&I*ÿàÀH ¡ëÄL/T…ÈÍ:þõäi’*/bŽ^º±¥nÒ”¡ƒ*§ÊåDêû‰’8çI¤n_( x+¾82zRu õÈÀÏåu×~w©ê|Õq–£Üd’À=±ö¢•Yè¬^Êåt´HüD J,Ô[>^×ЃTCÇSƒA} %7ÈJ‡üŽ4}è,‡5ç-iPó8®C³1H)GnÏ›á=ë>ÏܘeÚ^5ù–6y˜y»§Ž:d†|8igÖñMuÚoþè܃fÆ:ê­öG¨/l¤_+p"·\¼:ÖtŠZà–αºÃZ†aÍv»L!™ºF‘ºóæ‰×àSH£Ù'3_—ŽÕI”r'i=µ•ìûüâYÿmr,Ìâ®N*—ʧüàøª°gkUµÿÄd‹€A‘@#ØCãXMqÀÈ«¼°ËOìk FC»þ̲ðbñŒ‡(Xʾèç@8åT&k§-¤ôUQ„E¢üÞNvù2V.Ï2×p®k 4bÇìñì®GTmáÊõŽîÌŒì‹~ëYpy*j£¢2ˆ£qB ×ߺáÝcÿû!Ç7 vÜ·4Âð¤0üDC½~y†5ù¡¬@l–¥ê÷?Ô1ž‚ý˜! Á‰ö°jylA¹þ·ëÉÐr2âÍǃÅO/ŠÅùÝo$µ€²\çwÏÝ ‚Ȳ;C²,ç`­¸¨¶ãï'ž?©IXm=}Y0zHweQ‘™Aݦ]î(UÑi8ϼìª×u &SIÈ…: Á–`¿LƪŠb+Ø[¨%¢ÀFÜ¥r Å[þ²v­™`êQçšžTÞ ícï(tÊ“ðì{µzÓnŠklê©(ðX í#Ú^ O¥p­I×ø _XƒûqxâƒñT•[Ú©Äë%w š[ešjiCûçkÖî·óHÑø£)>Æ),BÊ(;Oí~ ÁPžÄÈÝkºÓªR'Íj0Í_õ\ýÅ€;»›_ÿ¸© b¸µEƒlæ%™”¦¯JU)¡ø¡åósqÃ_gèÓqŸYJ=Kü ìºOç ’¿«TåÄð'½ÃñPP:j¡ý÷"›­oêë¼GPÉš¤YÇ¿Qâ‰9sŽ^k)²©%ÂkS`°7ÕHd~D­å^œð¨âGÇÓ¹äi®àŽ@ßføÑb!sj»Ë.—yþÖ½íð…KåyZàyI øØâ„„¿¯¾VýÔ>ÿ« ’;B¸–Ч^ç|);F ß_øm¶[ÌCß1ÔˆìL%×D7M|VnPÐÙ6”|2ØÙf ¦b3Ž¿l–÷tþ'•<3T¸Ì#w–ÄK¤Îµ¥qþ}³†TÎ?J2Ø9Зÿ¯ïþ ¶hHendstream endobj 98 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6096 >> stream xœ­X TS×Ú½L9W¥ÕSP|÷Zû:تµµ¶ÕZç:!ÎcAT „!$aÎ@æ2œ@pEëT§jÅ©hmÕW[;?Ûg{bë½ÿ¬¯ï½õ­­ŸËZ,Èåžs¾oïýí}C¨ðP*$$¤Ïâ‹â_=ztð—XˆK~Õ<,Ž€‘a02¼rÈ QhãSú0€ ~™"šš>-cú»YâìY’ÙÒ ¹‰ñç%mZ°yË¢äÅ´åCF~õéׯ¼>ö7ß7þÅá± E £æSÏR ¨?S ©ç¨ç©ÅÔj)5œZF½D-§¦RÓ¨÷¨éÔ(ê]êj5“z•šEͦÆPs¨×©xjõ•Fõ§ž¢¢(ŧRêi*šŠ¡Qƒ©XªÕ7¤oH?êur PM!CB®„Æ…~¶.<4¼2üï{y1¼jð4H—iýkŸæ¾Ïõ½Üou¿«‘³#[Ÿ˜ðdÜ“GúËúwÐ øà©„¨„¨_ø/ð÷ ì30v`¥`²`ûÓ’èÐhY̨˜cƒƒ”ƒ¾¼+ÖñøÉÔ“ÿý¾“2qh%X# ii‘©0¡Â°º¬N³³´ÕÕên1;aY9¤‘ŒWM ‹Ê37Æ•Y¥´¨Ä"Hk„¨‘ñ²¡¸D^¦(ÓUi*V á+ÐKËÐðÜÄG‹ëÜ[!”AT#[Œß‰Ço/¤óc4¹šÜÂÂlñM*Yb Ê ptEàëdƒ/§’ b¼Q(ôL\'JèŒæÕ˜&V€Öfýj7„tã:†¬/å2yü®t±¥Eqàrû½ÎØf¬gp1Hé…LnðŽ,^F¦¥Eé¶Ûò›³÷¬([çÁ¹dóiþWƃkN™š•Rô½íàL²(Ä~†>ünêýhþîm' „À ݦ2HokÒ&²ÝHJÑ$ÉMPÁÑÀ—xjžØ_PÌA4ô[qi<[ø[¯9¾<}{°#€û_€4—Lf̉}ß ™¼ïOy뵸™Ïåç›`>;‘'ͳ5°èX8*°¹Üê-¡Ÿ÷!Ü#m\@ówÛs­RÙ`ã˜wæ¿PaR@úÉ„üí6¥ô^©3Ê¢o¡Æ[Ñü½HX"ÀQE㟘¦qÄ]Š¡Èûߣ(†ß…ú½Šh<ˆáïÕiºXÜ— ö~×ÇõˆF7ߟ9ÉÉ”H Jàõø¸M²"‰&N…+Ž+®ܰÜà&ˆ^êGI¹‡#¹£?…î<¤r—Â-wmh[V³Òx ~ ëð4OBï¡XþbÜ¬É -ÐJ—êíªëF™Ž‘>ÿê8§ÃÙ­«/:›wކ엸v~rçä— €7q_7¦Ì M®Òå%6‹ìÀnt* VOPë™^¸à¥á ÷…<èDå·ÃüA´Ô€æ&=i–lÎÔ‰˜ì ļ4±ekBSêŽÉvÃAhÀ?£'P䨸ϒUâ„ÍìY€ª°N ºqØh­á­‡ëÅÛŠK5.XN£ º ôá OÜߊ£§k¡Æ¨ îï zÖ‚þt'0ð~XÛÃÍ_@ÔïÔqô|ÅNûn¸¢ÑÃÑ<Ó›oʃù„’nZ ª¡É8 ?•’¦A!¤Çò²s­œÝd‡66 ÐitA'ÝQakt8ŒÐÆœãu‹ç™Sö&|‹&wCµ±8ض¦Ä õOr¨• ACî¢÷|a­ßù÷]6þ~—+`*È⌖¿€CÒ…êT#!-È“IJšYÔxl…úa™Ô”³h¥Ug‘5—Ê×/(Î1äÀH¿‹ ¼6ÉàHÞ xv,kN´.³­¢}¼t$!ô ÑÙ{)òà|oóþ“êZŽ'‡…F9¤S3¬„îƒÀíZ$øÞb†F cšâ|R³ìŠü:ÝTSíÛ‘äݼ`Ù²¥JÖøKp ãJJé Ì’ydQ­Pn½ø@4ÿ šN¸²I·Q-ÊK “a*$x徃ø%zÞ’ô%“V¹SÈœF'Y¶X§Q³ø5`ÒšõV#]«„•íefÚÄs@–G]¥©6TCú³{î[udv_õ„WhþÞÎWì9p!c¬ÊT\ê²8\V#áóaMï(ÎWf‘ByÅ0ß-·Ûm¹2sN,¿K£5jbÉÎÕg‚x%Š—Eý­3ˇbë£ù×Ðð@·`†?õ#üwp)¦”¤Tм‰ûòö@úÓÊ{§Ùö, L0Ÿ^§œ¸`‘êâ^Õ£a€¿ÃÃPj.¶+  hTK•2•Löžhf<,€2›¼¬Æ\[ iè-¨–”ÐÂüܬ•û„{Yï2Ü~Õw¢ùrÌÖ;ÛÈU<¦j_CûñG=­«ËÏ*Òiå¬hf挴™==UõöÔ£òfžžŸÓÛuöž®Ú¼Mð·®XJZÑÈ,_Të-ˆ–. ˆd¤ù0ΨÉñ7WzP^y£~!‘ã'_ŠàˆÏ1 ÎÝÖégKlV'´Óv­U] J*R3â âµÆ¡0åí º ð÷ÂOjP$ uÑ^;ìP4e‘n…93‰? %tÚð~ÖþŸJ`sækÖ2q`íÛE§‰ ÖpZ¥.™C6¨Ç_Æs/ã8‹Â*©€`%–:kÙe4ÿZx -°W9ª¬Õ¦î«1‰©šÔ¢^jíàÀHÇT£Wæã´î“X8©¬Ì1Gü¶Zo¡ª aèxpÕ`«_·5âMâ‹§î_QtfÑZc¯µÔ8ŽùŽîµ¥€ ùp¤=Ï”ó =&@D8\N_ }…wó)ˆYªÃèvkõ"ø è=?þqÖùhþÝö^wÐÔ [Ãâf°%W3Ÿl5•“L±¹… ô‹LÀïÊÒË$ƒE>q£¿ÁË5eÕ§3ü¯ô£>¶· $…n 9z]<†è‚Óïv‘ÚïÚ/?~¶ºëíVvžo’aYK¢/› úÆùC—~¸8á…JÆ\ Ï nµÔät²( Ø öâEzQ1£!§S&ì\Ý4 Òß›‰ùÏ~<ó{)ëÑÖj<ÚcEÇ ë§Y Ìù°€ž¼bÚ›/¼tc$)Äè¤íÀ¥µ+ Åjgu‰ÚQQÚèv06§ÝeqÑ¿Uãá˲áhýC̈ &DbKû"S1lÊ3ÿòZ 1øM$áÞ Üü rWv|ùíûì5 VÍi†¦à_!ù¿.å¥e˜·²H `»¡UÜ–ÙºÞ™çÀeI s.­õÍ€qp^¢4žæ×ó!ŽQ¥+3ŠÓ Û”Û[Qä&ôDŠÔ—ªƒzÜ| 6’™R%ôƒ½Ð©¬›Q¢¶*¡Š61§ÌѦ¼"™6B™R”¢J&*c(Ó–êÊ0…îÄìRì,Øi´C mö†ý°©×¸<’…pNØŽ`0Ë¡MçÃü~6ôp]Lbxz¦™pý ½Ú¥J£*I(xܽ`ëÓ³HR€_–G`Ázû«IdàïD!.AÛ¾#G }Â?å\é¸Y26[³ÀNŒƒ˜Ôv£Òe¼RXÔþ¥ïFMc €1.}ÌX¸Îj ÎQ ¤[ê|\cN]º…ÕðsÓ…ÃPÄŠÏõó ¾špéµJ–öJÃ…þ2øóÑŒœøâ†©õ9~]m3'©þÖ æâHö]Ÿv9š¿ šÑ¼¡a9S(D>ŽWÔkbS3H¾ü{1°@‹ÉÚóÞË!Ï3¨jf$6?; “çÊI6‡“jèFNÀÿ é ¢<êŠÌâEÑŸqAüa‡rîÇñ)ŠX 6£ ÒMOScvmfFvNêŸ?=ñÍOè‰gÉò¿]׿nI¡ÑrP¯©×øŒ¤Vð\ó¾£›ÍFòA 0Zu-”ÃìÂ\­H%Ô áZ˜Xº¾œX m‰Ö¬5Ñž³¡¥ñU 2«]e¥^«•ilÝ]³'h&ÿbpãp8 ÎÔ½11)¿8WŸG42î`Þiúqg‡yQª/d×HþE„n Œ¸ßÂEÂ9¹¬ ÷¸À…zÄû…˜ð yL.˜¥Áý0õzÆ·7t tÁR£ëÑf 4pûÚV¤i_…}þpœ 'FøxŽ]†Ã»!ÝÀ#½¤žPr.oÙ´ÅS7LxoÔŸ¡Ój$ML ¯ÁTåMtuИаsܵå5å5_£˜G©Ý «H°zÆë‡ÁpMßô¸û`ìE¾Ý’ƒdþ£yè LÍœ>Ž£Àöâßæ~éoï<êÛ•ttÊVîP8‹l4¿ëäö“;n ¾óæG#_?tòѧ¶­ðïZŒË`ØyðèÑ­–«ÅJNÚœ]]Ô!þë*ø.ýæä•oO›øþç †ßå 8Áù®mGÏ}”4©Œ:“êàµëÖ‹ôNKâo¦§Ð¹¼5®Iýáãm£-ÞÀs Q»îÆÝC¿ Ó6Š:&k¾øÝô”äìu0&:²i¿¯¼Ù—W—ž-ÍëY˜tIxM¹ŽÖ ÑèIÚ„gŒ™0g¼ˆá?PeêÓ3cêcVû}x¬ãDcD|Áf ›.|ùuH?[Œb.·Ü<·­pTYª ýÀ…‡-fóÀ” îüÍ¿ˆ¢SÿSÑÛ{ýb¢ã®ð»!ø)ùß_®áé¯ùÁGþõDð‘U‚Bm®L.Çýqÿ•x"Äï@<û^Š^À}­z›–°Îf¶YJ3< 7ûgÔ?½Ñ«kE³Ñ4ÀfsC=¿Ý¦µhÈ>Œ£1öŸkôåž;EÖÑ z‚yy]^©ü< %¸ÒkMÁq8GªÕEJbˆ´V­1ñÊJj=ee( EDað{î|‡ŸGK­h$—Á´ç3G? h¯# ñFõ âhþÍ?Å›ð­Çv\û¿Ä7Àá¾ßxÊý—ËÎòà»M^q‘J‰ûɬÎih.÷Ö\V›œV”—Éèô$vðQX¡°IJÅ6±‰VðFàȵx‹Zw ô*¨€Jš4ùàß¼wáØÍƺb…‘ªóå$¨äºr«5ôc×ד5ƒçØ|Å}tпþña6ÿî0ÿ~ƒßt"on3ËÙœ5ÐKwNk^8oyÎæ•LÁöyU[àë÷Ù žFŽà”Ÿx_ž9ñYK“Bâc²²óD…¶ÂRK0d0©é'™¾a¥“"ûÀȾ0²ŒŒ¢¨ÿè ïMendstream endobj 99 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 526 >> stream xœüýCMR7‹wø¥ù6‹ ‹ ›ø…Ǿ¸1234Q½N§øˆøÍ‹¯ø¤¯·Ÿ÷’Ü÷ãù¦‰ŒoKL0Šb‹g£‹Í‹Â§ü’j‹~'egŒ÷ް‹ª‹÷ˆ¡Š½ #¯e'‹˜¬øÍ‹à÷ìõè¯Êõ÷ƒìø÷JiˆuP~ƒ…>‹}‹ûLôè®§ÇºÕÆÐÉ‹ê÷ !Õûû74/X¶†•£¨œ¯„®WªÒÏ¡º‹ï¿=:4MFkgû…û‚‚‹‰‹oø0øÍw«Ñ÷÷!§÷ò¨àò÷oö÷¥÷âÙÃU ûCfQc3–Æaº–¬‹ «s¢loozb-óN÷ ÷ëèïÙKÙû¢ô±±Ö‹ÈÚ0Æûû6U;i¡x©ªŸ¢§¨w l®·Ð–°‹¸Êu4a}]qljeo‰Yˆr‰‰‹†Š‰ƒ‰€}”‹œøÍ‹¯÷¯øZŸ÷èÙø¥÷8¯ûøR ‹’u‡‹}ûßü`g÷º9i‹:pg½Ë¯‹°‹Ë‰½‰½ #¯p:‹—­Ý=ø&üûœ 7Ÿ ‹ ‹ ‹ íGìÃendstream endobj 100 0 obj << /Filter /FlateDecode /Length 1540 >> stream xœuWÉ’Û6½ë⃎`*’ cìÊaR©T¥|°sàP‘)‰”IÊãùûôpñÈ5‡!¶^^¿^ôy›îå6Å¿ð¿ºlÒíióy#iwþU—í»Ãæí_2‡½KÜž6üDnÛ+©ÜÖX³=\6Es¹ö]¢Š½sy!¾àWšFød—) »R\ºd‡lnÄÑŸñ ‡•oÆ}²Ó:…Fjßû§d+íT–‹®÷|5•RŒµï²ï |nÆWÞXqM$HÖV‹²[ßÏš¶ê.>Þ„óöi!êòzmZ? A{ r8…(‡øJ‰ŠÝ6VÔÝàÛäßï™ísmíöðÛæðãG¾®š\ÐV<‚Vøa [Nßñ :‹^‘'.S¢ŽÛF\'¯HC¯èž2‚½£ý"êjÚï¥r2FQ€ºöüŽR%†æÔ6oª²¥XJàG» 8GH@[Ù7åãÙÏGåà³5]‹ßH0¤ ÑAH>$6À[Qžñz†¯µ ‰úL!öŒ%`žån»›@=á>Ô¾‘4â6°[!v+šT]ßû*IÑ ”ÉKº ‡å¹ºË‘L¦…¨úfôàÖL¡ŸÞÇã|Í’wï G‹ø¸rl~€  R]0™ã´"IªáH#¡rµæo3ÌßÕô²îv„ÇnHÎpñ ‰ri1ÅB“S2ŠaôW\²P…OÀ…A¢[ŠF%æ€Ò‘dRäŸT…¸UåØt“p\ñ+Ëc8éݧ™^¥)/ØÅÜÂC¹$ìùvôGrÄÑFÄ*Ì©Ÿ¥€Õ $òé[F‰,Øì£"€ÂŸ}`B¥1’º;Ÿ;F |nÚDŠStR¥ ‚b"Àé¶<¿Œ iFy{ Ôé%¾P+8þ˜”€F?F#³è…¿ûqŒa@ Ÿ„”?%Ñ"K¤À& È8-ÄÜ ¨pV¼Ä3µ¢>﹉úÀiQ~R¤´ÌÄP8hðù¹¥=Ä¢ŸCj1sèH „A…ûoÎê¬ÀøŒ,ñU¥ÃM€8Áµ -@ ’˜UæB¿²ŸôéU}J¬}Ê¡úŒ 0}£Cí¼ V.'H$6"å(ñ–×êIÆãqðŸo1­Æ´æó9«3tjÂ!ØKªÝzÙGÅzÍ^Ê·Ü⬛,/Bÿ;}FŽÇ©Îgu]mFf³“%m‹±¹,Ð!*TBušQE}n$:nhêÌ+Z÷ê?<ÏuSEãS~s™Z0M ¡‰~a>l¢ ]¶ßà÷3˜¢qnmË¥p€0¹#>øLQýàŒgñÙýÎ5L ;íú™;º6 ´Ör€N9ʼn_¼*bÿ¡%¨¥~Ág60:œ¼ãÉ´êâ·†TÚX™»“Á Â!ð_+gU«jÖÇ{&ô€(A—oõ# V©ø‡ ŸF§"dhV¤‹~j,ëõ€bA‚‰ÅßR sÓàþCû"2e±™¦#<‡*»hwghª 7ŠÕí`‰~dÚ`2ò<¬Z›;›5Ž]¬‚ÆÃyœ-=v÷83½ãWÌ$ž)q&0)¥¶?†®I{èŸrW­1§]€^#|[Q#Ða¾ãc„ùNs¦î™…ÀRGB:ñ$”“¶> stream xœ•ZK“ã¶N帕ƒs¶º™JY W¶ã”8®$;qv\‰3C[Ç$åÙý÷ùºàCâl%µ[5 ‰G£_hèçM–ªMFÿÂßýéU¶yxõó+Åo7áÏþ´ùüîÕïÿ©ÌFå©É ½¹»%CÔ¦,S­t¹)|±¹;½ú>1ÛRY–f*y½Ýá¯É½/l2Ô[z°Î¸\ö›TÁ ( ß¼ºûÝ÷2aÎêrÉg_A–Á Qý@ê€nTÇê¹ð+ï1¬}êa¿œ|ê±>‡¹•]]‘_Ïí í7ðò48wÍÙ²‘C|‘'÷—suò¢ô4.{7nׯÍv56Eä-´ÇjÖVC"G¡&9Í\­ˆ+lΓðvSÙ9î·-€cžtÐ7O–•²=Œbwn»†g±3>4gŠgþ`ª†*޲ɺã@ËáUsîãô¤¯®§4É©é{™Ô+˜'îãÊ't —\ê>t€¿5縢[q U°!#J¬_@ÖË ïç¸vÿ¶þij¯!˜ÍRg¬F"ã¸MÉ92VõÝ#ëÁQ»¯aÎ}Ûuuÿ„H=Juϱ7C¬¾éëŽ÷p)œðÜ>~.’ÇJüÄäPÍ‘¹‚çw%;0»gR“Okç«–Î5 :L£î%‡2fwíI>”Ñ_¨–NÁ‚ä«!Ž_ÄÄ}Û‰µvQ7Khûhɽ⥠ñ@Ξ_!l>`í'(­&/LÇh0—}&÷ƒíÝÖ“§å˜RâŸúø‚RSl¾a4Η!NßÅ…|B~PZ…´]”K‰\Aƒ,‚úLÀFB$³~¦âöøKØkÆëC}=•JíÂËÉ•¯¶kŒb íÃnu³]îlÓ¡ "ꇤGâoÈÏ’¤rö@±Võýå4v2Éyì°:ÕÓúÕÓS×Vì׊qqKÆ*sÍI\ëY^hLçP€ŒŸä5Dªgà0É5íË'¯ÿþúõÛT0r59~MFך5Ú^ÈJȺâœô:€&^†”C ø–eÂð'Î) öö@D‚æ¦ 2ÛtÈ%š"«¿‰OÈb…ø£<‹â þ9;Äaš•ÒÞÇQyH:a˜$­8iÜS0Þò„@ÞŒ³àÎä™$»uŒ­1r3Ž¥—á¾Øû£ǰ¨ÒƒâihÃ0 VÒ©[[É.Wó ¼(¯":¶v7+=©9+'.5›þÊb0f Ä)ræ¤Ïòþ²žóaÿ¸%¦Ë“ä&y>Ë' „&´I !}R‰Ü–å;å÷z•èЪeòºt¦ü/Ϥ²}{ª‰4–£_H#©ÑüÅP1Há^D,&yˆóEi¥Ù$)àÖ°Æé„ÁÔh˨)”GžüûÛã±yʳÐ=]Lvà1äP¹ÓCÌãïb·‚MÇíB%þ•”_”ÆãL5LÝ«ó!<ÀßÖÃÀ*ägüÒˆž¶š^|"ߘ-Äý@÷àYõôtèÚ§_3£9ÍÉVsÑ™šÄ¸•¦a`ç$?§l ®G.3º¢º9|H—|Á<ól:bä¹À©€k|ºñ¥~úV¿Ý×OC˜æÚf]èï½NÁë¦çª›B%Y Ÿ<¶={„‘¬:7±V1/?ŽÉ!È?°a]ö†w1 YñÊ/°÷Ü ÄöœxÊ`{A¶A(8AøpéÅ Í ×¢L¦öìZ¥B¾Ž£ ¤ý¸¿«1ÒÑàš*¹,F4‹‘IæSâ»mÉ®cñÀœÆ‰tÏKÇXvpfY³xo1ýZ#NÏ¡|ÿ†‹.­âì‹úDs¢.D3³-‹d49Õù¥*F{‘/.7È<}˜[úú<ÿp?3¯”ÔD"ÖØ/9Æ3 Mf¼g=‡Óà ¸L(0ƒ`Ø—Îb™'ɾHÂBïbƒ‘úò’œ·\¬P퇶ë£æ&Lx ¹g÷Põ§8ÇŒóuõÏìö]ü¤ã9ÚIJïûÿaàygLBã„qû,(ÓNä¦Û•“.òå…W)˜‚ÜJ]{ìayxÈ…L]·—>ŒÈ×î§ ¡°>žO¨iÃad9]+œ]ÁZ!eKOª˜‰]P³E¿j‡Ç–Í—@ÀŸƒCjáŽ3L<q´{áxÕ1]÷!Ÿš Ä& aÌ÷À|Ù6s| pu˜ôÀà> :0C2¼1SWdñ¥tˆ)2©0}4„6’ܾk†ZÎÖ™¦µùìe2ÍØsl~’spÁG:™ ÆÆ}ÈÔ2Íšÿœà&ôóĺzn¨¶›ÊÌ £ÓTyEÓÃ*s1©J“”»œF'´k§B>xlš!nÄO¤ÌêXÉâ¥õu%+¦Š@?8#IIIŽm9Óà°èEÛ«,6ŒC²\T“Ó±_ò¨eYBF”LzбT½ÝEoq‹#Y¤Åè_)@í2¿æZ”¹ÌŠØ{i†¸ËüV6 B¦ŽBÆ ƒ`µ¶Ý°„–˜{s~ëãNDU$GŒq¡Vâf'O­_Òùêðc(eKÙ¢§Ôµ¦„ܤÎ÷õÄ£¨ŽS®–(ÒÜϵ©srU¢®'Fr"ÔÖˆï>N(utØòväf$×2–.µ™æ:¸Í\ƯHR d÷…ŒÑvã(ÛÉ€0òІFØ, Éhˆ-C½]•³!øæ½E>Ùì\ª3mrÅŠtT° £´™ çÓa6:-J§Œù“°kû!F µD-þ†:[Ò¢^«H•“J{ZàÐö¿ åÒ\)§7‹1”2އGeëA¤#3Q®OÉšyêk?^íg¹ÆeÚú8n¶Žzq¢T³u‹âýššVš³·Òütêð4,½^ê{áµ;Ø*/ƒyb„áÕ˱z_1å0 H¡ðE/„êr‘\˜ptßLÕ¸øJÅûÌ.êabvê>´°Ç†1©Dö<×U„üï5ÂAS5Ö ÿŠ#‡N5Ü÷Ö›–¶ÒГ-ÌÌV¦§²õ” õ8»Ç:},ØÖqoÈÕÐ5oWeõˆ:åg².÷ê'Oµšœc^¼¢Gf4}«§r›ð¾cœ÷æÄ8 ¿©«ÐM8,rºÙ›ß•ŒçEùêcà†¥ªiØQ篩$³zX9ô¡ì…Úaàˆ.äÛb >-oÚ—)„ò…Sj‚bU îÎ&o8á§¥ø‘$"œÄ8O©Ü*þjnÆ5Ͳθro#}ŸûñÆ¥á¤Lÿ²u:¶œ`kŸCg¯éÄÈ^ÈÁLfÈŒz4!x”2ñÿ°Tæ£èEý:æS4îÛpaªžŽ—*¡zº§jYÛ5u?Õ>?ø¶j­ýì ]>ÜKu$ÉÂ-+§ÌN•ÿ:Ï]«ë)M…ËÛw¿MÃmâéü Ùþ-—ètä9ñb¸ÕŸ–§"¹œÃ“Š73þ$+Ñ{ÇÅ+é¼R?Ä;â—o/­­Ùe÷cóÀ÷çñzxV­¬¸¼ççËjÛ0=r ]¢Uc¹…¼®ÎÓt ìø|j»( Pî^b{Ô$Õc˜4U¬øÌ<×Emy&·¤¶–/3ÉMý¬ÞR‰ÚÃÐ3Æ<‚:ú]ƒeH>ë{¾³¡!æ í#ËRñ‰Ñ1!mY_’pämÎÍG{Ñe|É·R>¹`W~ïÁx‚”=pÑè[åøÃŸ&>Â¨Š¾R²+gDÕÇ”ô4ÛŸ2“Bð8¾@óRšaǤ>ÖÌ6†‰e¤+òî›Y”5¦y†àaÄ5Þ„2®LDèÀ©§aÏgÎÂ’‘ÿÌ1MsĤðšu4Weò!µ‹|cxø1(ÑéPÏ«ß6ý0ýpgúF8ˆ êPR™•³êxé‹Ü` +ÍìË÷tgúªoF…ûŒËUòÅcs®ÖZd‰ßÒOu€nœ0åv_žÊxóE¥ýlüeã4WûM(ü„Kí›ÂOãóÕ«ùæ–ÕÓ8€K·ìÄúíÈl¸Â¨’f Œû±„Ë’:Ù?‹XHå-~`þ¹{ßOÉ„œú=‰_Sº<oŸå{y™OfµÞ3ŸzCg†&½ÝÜ«ùUyý +wm³ß ´ýˆËu¸ÁdÚ;ë’i¡‹·…#¾“÷Äñìá>>PÈ/Ž@¶JÞ8B`°OâªOÞ\xPn=c7!1ñä6Ü„rpE¦jÜi¯ßwM<ÛÀîry«G Ímò ¹#ìã¤ü +5Iò!ñšé½x®Ì(·õ SÈÄÕ4eu¾ýÍÙº«Gåêp“·ríTªSË lèòÑq91óz+õîq´[¹µ‘ZüÜ<ŒW£³tqd9¿Ï˜!$û¡â_¾ä7RÑ©?äún|dhrOš#é ©ÂÙÍÎÍR\L,q¾/ï^ýÿþ )´{endstream endobj 102 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2935 >> stream xœVytSU~má¾­)…â{G9è8 ¢,(ʾL¡@GÇBËÚÒRšäeiÖ&i››¥ÙÓ¦ÉK“nPö]Ê”Bz@IÁ²È€:3ˆÊÔáàç1ǹ©€ø—“ääœää—ûý~ßw¿ï—DôK&’’’,½lÙkc'OH|È‚¼4îû ô‡i)0­ŸÄSÚt4xHÏ öÁDâ1tFÉÌY³Åkæ/*X·~CΦ¥Ë–½6nAù9¹_;ñtß»¹k­½dÓ{ov õPo®€”H¥–ʼês¶Ú&GVƒ×`{C 7«×› ŽÜïÆƒÈs\¡‡ÃX…V¶ʼªZ°×á0Û³nƒˆ×ª¼¢ \¡gªëÊúqñ!™Úô×7ÔP%`#Ô³†Òmüà"~p1?Hürf¥Ü(«–S?¢)Â3ˆsœèoŽgx®ÿ/xQt%štú _HAÕñ…B>U>ëeÈ'S*Ò>òòóh¤<¥Õvÿ"‚òú{3ÁãoùL^&„6S ´Q—O_¿F›Á''¾=mùëS#˜æxÿ²þõp(Ñ|Iüx4ýz ÕÆ† Ž^>Po#%åbF •y=µÛqh@¯v£IˆF™ Ñ,~<ïRE…„õjÂÌ7Ô¸¥¨Ÿbÿ"_]Ãà“ÔO„FQ^4ýN »ÄVãóNÞé;¯då‰óTÒZ5>ïDßLãCAÐâ@?Ĥ@;u…lP{$r©¡Ôh6@#½˜÷#eÐ`ÂÄP¥µÚPÀoo¡oÃÅMå.V&×—$H3Ð|Ê‚“ȸcvB^oˆþ–¬ääV9¤ L©eÅŠ ó/*Š¢Â¨™Mï¡a݇1Ú»½}h7ö¡•Ôé û ñ“ƒŠÐpðÿ¢Ž Qõo n*vE–à.Ö>‹ÿ)IÂÖéB2~œEçúæ—“àêNœò„Å–’ú²¦‚º#ð0<ìÝÙBaâìŠú*Õ;Â\¹[ʬD1€8¡ƒjÐz‹é·€B\µUáQ†˜“üZ%&±Z&Þ°V)Ø`Ùæ…í “ºÚRz2–kY¹Gbž”fG Ib)hr1³"î!§”~«T'ÁVÎ1üJ¾WkL6XCõt~q³³}YŽÚ¤†ªÍ* Tp|Þ²wæNË»ÓÓ9¥Ï a4 AË…èˆÔ¹šÎÈέ9Älܹڿ ãyêÕQ|*Ÿq4Jïˆ6ÝɸpPÀzŠ“;eÅP&ÓÐ’Âu˜Ë©pÎÙò«”ùŒë>½ »à¡5ÞÅYkÑ=(¾È·z³£éhn½Í‹¿#œ ô°¢/’”Û ÇÜãÏMsJŒsªÜ­òW3hwŸé„T®mÌ‹èÊAo­¿IbS0üàpòHè -¸ÝT±v_Vˆ«oaô'VÙ×Á…pF‘|v•âçC¼´Í:ÝÙ‰ò:kØôÖN6a,û:‡ ¾×ÜE „&²\n(†"Xâ–Ö–å±[–ÁUO¢1…Ÿ‰²öþ`§$¢øÔæÉôXðW9·‡±“f‡Õaq´È[u;!uíÆÙÞº²F¦Ù½ËnÃæ„Â0à³pÔÞME…:ùVº²º²Òh¢L@eµå5”àžÆ.“Y¥YáÌy†IT ‹œy"JÍG„‚û“Z¬Ã;;ZOÐßcwìp"5…£c³_h誠qù1ô“ÐE?pªýäÁ‚åvZG®ÌÏýË»k÷ÿÍðmm4=˧c?‹m>ýf ÍÍAóù±˜ŒéÄ;{VBŠTØõ¼Ê0Ž#¬ÛÀØ1¨°ÏÃaÇ1%¨è8ô©vó.)xXêÿå±G;CÊZ -¨×ä¶M/Ì QÕáѰÖ\ëàqùkZœwÓAáíÞ>ôáð{/…æg!‰3ÿ-_(D…d3l25j÷+v­‡yT%9mÜÖ¹r™*è't„æ±!6i1öÛH›…süS¤X©c•Îò„^΃çávR‘ØN&¡¯Áv™MFó4–Á-¬GÛÄ 2Ų2¶Œ+kjlàAO„”b)UW™ª³ .îŽ&µŸG{ϧ {…‡7~¤>©»·.÷ÆòÏÍÛÎä†Ôäú ê6ï©óç÷œþøÃuóý´£¤J´RÛ­z$ÃZ»µªDj  v¬ö¯€ÔÔçVòäèK+n±Ì¹ò!TÅé†í‘5®·äSFrÞâ÷þ<óõ¶¯Z5Ò-U¬‚æŸ'En×lm ÚO">½‚/TS e$^ØP¾Á<¢Œê Q«eRw94öY›GÊäà}%c \O„0çs‡qWÕ—Ûx$8«™É¤È£sµ®ÈcáÄM‰à³R%.îg Ëj !k’@þq?ŸŒÒ˹‗àGíͱú–ƒð….¶‘áZWˆŶ*¦=ú “!‹@ŒÍQR‹w‰6¾àË&6ŠÕ¹ùK²a6Ì?£>el€ 0L¡žß­2ú‡“¨OÆü³¤TW^®tªêªtpuÎPƒÒ…sM€&iBãÛ@)–ú¯ÛOü,›”ˆO¤‹Ë„¦Ž&·iUr™ïÉ(êÍ.,e* ö”Ñcâ–Äf;¦8]½d[µ‡š|cñ†|­¦JeÑÕF£[né¸+r€Ý¶þÆõh¢ÈöZM§Å ðH{Ñô•ðPÛ¡Ãð"õí¨£“æóO³/•e‘Æz.L[Éj{¥ÚÝ­íð(üTbÉÁ.Z¾"»j½1×ó!†é7Qgàö'WVOgy+<Û cM…Ãä¤,$t:=Ðcа1¤ŠU¥bž@Y×z81.ÒxaUGvó¯wv¡ ÖoÅñÂPÁwh ú¯-E›q,â„TCÐÖÆ˜êTn¬bIéuf]Ö6¹a3ÇI¹UÔqjýtKd¯{¤®œœÿö„éKßܰÖ×ZÆí:7tB—Ë }TD,+“ÊK^¸Ÿ{%£ä4䇷¾ãSóó5ÒôÓôÀÏ›i`Ú@˜– ÓÒ âžïw endstream endobj 103 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4090 >> stream xœ•Wy”užOÓZ] ^Ä`BÏT8Ž«¬èŒ:êàŠ ˆH#Ws6MwCŸÐgŽîÜ©¤Rõ­¤’ÊÕIºs÷ºî¦»F9q@pUÐQÄÕÙeÞcuÜu¬ðŠ]÷ÀÙãíþ±I^^å½Jý¾Ççûù|¾²Û&É &¯|yÕâ_?ñÜÓùÅ •]ûõ²Ûaj!L½-ú³i/L§ßûé݇ï‘å_ªy;æï|iÁÂæ–ÖWÚÔ¯–ë**«¶W×Ô7Ì–ÉfÊ–Ë”•È~){Hö+ÙJÙ*ÙjÙ#²5²µ²Y²ù²õ²²…²—e¯ÈË^•-“½&»[6 +’]/88É?)W¿mÃíVl*f(z\3¥pJçÏßñýÔú;sçÁ»šï~êî¯ï©ºwå½Ô“ewý8éËe®~«Z4dsk5ÓrÜÉÍ_Ý/ÍEE£tîvNç®j¾hÎ 44Ô:Ô,nÆL eÀEr-Åy¡X~€÷pîâ0Ö=®^ÀåÚÁ=ÎÁ–òQŸƒ·f-˜“ß•b;Ñq^\¾Ù(ŸVC;8Œ6ãò™Ê§¤Yèó´4«isË–åf#Óá NyÞTÆ B~ q6ÁâLÞÊó,_|ÄZ= “ž"WW0ꋸ¨ &|‰ðàaÝ€Û³ q…x©Gºt;Jú±c²:©Î½˜˜–[ò~ùÿ]A×íÝøó-¡§Æ“‚ž(Oú‡bïî<êo×4RMöf²TÚL5k Y¥˜¢}þTŠ'މM]ïŸøÓg òcƒ6_4À‚ºZY[­ÍЂË7íiùpè‹Ãa‚ã]ðà®"Áæ¦ÚézƒmÑ·¬ÛPlpÑÐ {»÷w‡‡BÃa¡Wè…>ü܆UKʪ˶(ø‰d\V|?!îËNË]¾Ôüùýò+¹~ñš"âº"Þz/œ…/àpíÄÚDM¸šÛ¸´3Úí&‹— ‘]X<ö“Lk¢N“tßuŸÒ¸FÇ ÛÚ0“Ý¡'9«õ.^ÅþEøî\ö;\þg¾ÓÕžqné¹WIgVˆ¿Í·™Iêú[ƒÕ°—&Í~BšDHÓ0‹™ &B»¼iò q½;àös•7¡ˆ}¿œ¾Äwóá7.>ŠÉ¯´ïÙöú xfÑ Ï«µ~×Ò}2k"÷·‰±à¬:W(~›[¦”†¤™ MÇçî{ò_‰ &ª‚?ˆ¿q:~¡â~A|"=¤°//“Z%à+ÚŽ"E¾«{ž{:ù0àGã%eP,E¢ò8+Ód¯=–-ù¬ðÚ–ÜuEãÉeýËP•ôÒRÉ'•Køéq®8Sœ,‰Êý$Çsàqwëµ»(°£'1”]­¬“d3”&ÃXŸ©Û9l9ÐãÎ𙤨:!þ\œòñ¾Ì±C¨–²½üNŒžd znó:…ˆ+àˆ#bµ;,D ¬òмÃP¶|G[¾ËWÏÉ84—×ff§][t1QêÚ\…¡Q"¸Epú‰.,•auVÚÂÚIiúõˆ¥Šo}T6ÌŒÓaÁ©¢|'tº “7vu±Ñb±A|^4‹[ÅI¯‹EÒÒà2€¥þ6æÏ­•jò!i¾ù落d-v`:Ðq퀗b6ÎÆz‹3rƒJ_Ý?ø?"0ô²=Ö³M»ÁBÔÆI‰Óy„žê÷f9Í4ùeñ£Üí !Á§¼Éýâ%÷v%ÁÞ9K=ކ IG壽1&vÞýÞýžýün%¸87¸qù¹å¶òËK_ß„™­´Ñî¶ ,هœl{›¥ÉÞFJØõ özge•Cef-¬9hŠ¡m`Ãé"—ÝÃxϱnz¼Ý™éÉwxŸ7~4‹¬@¹)°€ÓNÛZJ𿝫X³õv)à31“•ë$¹YŸ¥+Àù;¿„ Ñ­f hHŽhÍ­+à ›•œ›ãoâE \vh~Q]cKÛ6¶p=†þÁin =UX(7/Q[–{T¡µu  ô~s·÷`}±LÏ‘ùÞFÒŒ•9Êw¨« ãmý›á%è˜m,ciÆ"Úç÷¸ýn"´?òåÀ»M»šV;4äB)ËXV°¨ô–0á².w¯:.¶+£ïüøŒ÷b1ˆÓ]–|$?ÍÝcGÄéG ÿr^‘q¥ºóD a]­¾n盎ýóWïK‹ìg–'KBõ¾Æ0ìÆzspOGµ@hèv#´á&¿!ÖêKŸXÕ[:çÅ¿‘î—œ©˜÷Råòòò蘡»`ñH>õÙYq­¦@\›C¬£µ´n½´Véh±¶B3¾)[þöÇo^:š$\¼;O˜>D—Zg£ž"4å ëJmxƒ3•HIOœ<%²îr…Tg0n°W(è (—•|ó ‡ýÃþA%j¢—ð¸Ùg¨¦ëš(¢AšÊØ8‹T¨šHßð%˜ÁBHJÈOÎM}t÷Y‘Xˆÿ”Exfž;ųâŸb³µÒ-ö–MÒ2¥aµ6nÁLbPy)Ø=N‹Ë;À&Û…Æ:!Ì!ÜÈŸAŒ±x“—z=¬·8àõzæ4A^»âBÜ‹reÊÎÃŽìG7ÔËxP‚>Úc«ªrB)÷£‰áš8„oy'çt]l¤­fòÖ¸waIÄð”–î QA+k6ŠF ΠI÷c'¢'Â'ÂGÑÝ®aÀ»1_b^D>éÄŒ`d,¾]X# د-§åp :ÌnçìÅf‡Õbw;üdK% éÔPZ+Ýv}•R¿\¨™8¢ 3Ó4F^Jùœ^Bþ,F¢8“×+€Pǂ䂀®ó÷¢Z$SL²åÊ Zô‘®"òAW`B,QzÓ¾4ŸÎ7ã¾ú¿âôdanò[ŠPc´ö0|ñï|{¸›8(­Þ…£„Ð82Ñà._–Ü/.Ò¡ÝTELAC£¥µ&VJ­T#]kjUµÕÔÕnœÁÊ-cçúΧOúRÁ4ôà‡¶g+_Úöt©`Œ„œ„À-¸þ¬2<œ>¾UÐkÔ×vÔYȶå;ÁR|ÑøÆ³cRC©<ÖOmû)èÙ'#oæV"MkcÛ4Ð í6Ÿ1¤ñ´ ëfª…jV?_%M~΂—ÇGÎö˜y¾8¤ðÑ–áÒùU³KË€œ8åvãl&ì!BûzÞ@m÷×tl!õÛË`-¾¢¿ä áÇ.{~Ûs>z048Ä'©IáÛX}^cðÃ2MB-.ÊÙnàz‹¨ø@!`}ÙØî¨9ÖX®¯¬]xbÛñKÞùh€¢H¾»þœ{XéÍðû"A7¢<\À‚>„M;o#뙺<ÃÉ=µ5®Úb=&O8윣ØœYE¶ÈìgýÄ.¬7Ë謌±‘Ò¤ë‹õ¯UI“~ ªJ¨ìwŽþ7ðÃï‘þŸRx+Fácˆ~؃˜5¯Ä:Îê í a,3>¹ ™gŒ‰àB¤½)oêÑ¢tx0·IO§%ÔÑHµµQÄ"©×iaL«Jƒ¶2ÀËM£»O¦NÇ‘¡]‘,âÚ‘¶Ñ• jß 'X'âYbÚ—€žOtޤŽà‘lD v,;ÉÖ¥ àU|ÁþÍg†ú"Éžÿ„â=ùÕß—l¨Ÿ)=ʾ|+Œ<ø–$r3óFMÉWG´ÖŽHX;¿å—ìu°Ë C¢–0"okT·4­úƯ|vô› ù—Üœ¼¡ŸŠ/bÃFRn0hz 5³Ê¡¼egËË%[fÃãøâ½Ï}>¶7ÍgŤ‚1Ò&§±Fš¡Ô—¬YPèÉ[ oí "X“‘“±Óã‘H2œÜ…3éÕP‹\%ò–ÿ¹‡OŠêÜ…;îyb§DFÉÝt{ȉ٫ž±Ûlídí,–LÎvCÓ}Xw?h5–F»š|àúk•¥ÒZ¥biinïð§{<ÄQqGì»—?Õ°¿zÇ •Ï©_&) ¥E;$]ÄWôÔŒ#tü1|÷ùnkƒSú™}Ñn teƒ}Á^22 =¾üêõAùÐÒÕe;+kòóóĆ[Ôh7ŒíÔúW­µsõ¥7õGVÐ×ÍõD-öD–,"˜;š,-¶f²}cûFÝFS¦jðªÔÖ#„€½ïø<òç¹±ú­ef(Š!Lëv¾€Pb´¢™ÊŠì>Ô5Ñu(4ÛsƒÆVÅ…ƩՂ×… ÝÉt2IÈÏuëÃ:d”†eŠïúQöoƒ(Þks5WŽŠ#×–(fY;X ZU·–<ë΂VkiF“ñŒôGËVs¹e« Y XðͩͧPŒû½‰‰Ð7¡äCÞ(‘¯Ío® €$öuBG%»Æº&£¤xgNëò¸|àU—á)µ¼pÖ¬Ÿ,îúwÄ5H³ƒâ÷ ;¹¶ýâòí[¶7wîyÐþ µú†«¥qZ½} W~J÷ªµm5êú")sËÕvtZÃ¥yo—7}LlQvx*?)Ãþš†­Æ­– r£´ÂiuZò8d o‹u]çO_¾È©¼Ø ¿ªIš4íoËáã·öÕÃYxë+ß»ù ‘q×2yÝ0lm~m#àÌär„Pö|Ľq!–¹0ú5ü=~~óî%K·­Ýy Iõ77 qDüÝ·ŠFgc3ìÀ[»µ©þÁžBžHéb­„üãdÅwS ƒs§N†©S`ê0ušLöÛÄ¡endstream endobj 104 0 obj << /Filter /FlateDecode /Length 1359 >> stream xœµXËnÛFÝó Ýp9*ÀÉÜyOwI4-Š I´KºPdÚV¡G"Ë ò÷=wHÊÈvä>à…Èy\žsîcîøc­$ÕŠÿúßå¦22ÅúS¥êŸ+J6JŸjr:HëêÍqÄ[c¥õºzƒ•WÕÇŠ²™ºÿYnêgóêÉkê$“×¾ž_b!Õ G+/cŒµ^’²õ|S½o‹ýaÖ ðÚ~˜5ÆN2‚0¡•’ŠŠ EFèû&ÌÔ›² ÌP¬ôÅûž?¯í©1×OœlñS;ø+aöÇü×êù¼zUi²$µ+TFJ© †rÖÂf”A›NÁßg: ˆ¸m÷ DH«ír·i3š'¯5Ƹ ÕAª`”«ç0Á `Wš“'#Î& ƒ>h©S÷hýðh|ìçOJeb ĈQÓ£h(I¥Cè`L2¹nWW×3h¨”3âðJÚû#%l1…‰ÏÈ—L¬›Ñ–ofNˆM¸»{Œì`<Ö½5N9 Î ²yÒǵˆ¾¼–¿Û79Ö{29oøKâùÅírqXí¶³ùŸ€æKh6À³^ÃÙÓ·L#(½™àœ #j‚À„Ny¬ÎBY­§|_º™ ê¿t³VF:çz?§ŽþÓ«v‚¸F1J¨1%qŸ’7qÂ0Á®Žv’xṩXŸÂ©ÿ5s¤…Ø3)3±øðaµmon¦o5Ñ™Ž÷R9ì¯ð8È“Œ*u¥ š"o8AÍhŠ0¹Œ,[‡Š7™ÂòcE4Ár¢ŽD|+~Z}×îÛí²í ²âr7ÔàXdÂ/†>E'E)‘ä÷G1ˆNŸN«æ?ÁdÏ:›¯Û«ŒÕI=äÎiäÓåi‚%/½;¥sò~s \¼hëÃõDX£Š¤ñyiH©ôˆ°¾·6GuZOœÊËý‰ %÷|” Š£|ùçG¹ÑP/úñQþô—áz¸Ë&‘“qèg4¿{Š÷h€¼|ç_~×N˜’´=k‹ÎM&dbf­Hâ@2Ò“Eͤ‰IÛˆ¦NK¤ÇTÝŒö˜€q“!îñî’Ôœà0>…FãÇ샋J ]€vN:“7=Ëzß„ú9kÇGÇýÇÞÏĤòûQ5vÀ¬qnÞòû”p¨j‰R†íUrèaÃa‰A[ø¬[Δ‘}Ä–÷>Ží›±ý.­³2wÇpìGÎ Çò›wágù8sX8¥> stream xœ]O1ƒ0 ÜóŠü ª*!º0Um?eÀ‰Búû’:œ¥óÝÉgÑõ·ž\ââ=¼0qëÈD\üùˆ“#¦*n¤ƒ• ³LtwÞŸ€|3 Ýù gO%ë²R{¼Á%hÀ¨iBÖHÙ6Ö¶ ÉüIG`´‡S]Û‚ª¾Èâ?•Í%ΛÖ‘RiZšäŽð÷Lð!§øö/aS5endstream endobj 106 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 267 >> stream xœcd`ab`ddd/O,®441%»gÿ¨ú±–µ›‡¹›‡eú÷^¡S‚Çù€Õ¥¥æ&æ¤2000J20¶3012²lýÑÁ÷c£÷æï›¾ÚÌxhËwýÍ@Äü#èû5ÑîØŠ¸¬¬ì츊Øî˜îøyY«³ÖTîèÞÙ½kîö5@°}î. gG%P8k^|w Çï;ßuD““KBºƒºƒ…lN^Ÿ¾«loÇo‰ßâì MM Sš¦Éÿ-ÆVdM›2eºÜw±ïbì@Ö´iMSä‹}—`Û3aׂõë7o^t¨ûH÷‘’CÉ›“¶„.ÙRš”ÄÁ×ÍÃÙÍÃÕÍÃÝÍ#ÄÀÎqáendstream endobj 107 0 obj << /Filter /FlateDecode /Length 2693 >> stream xœ½YK“ÛÆ¾ódœªT|à-ƒ”aÞ3¹éeËŽ­È»LT)+˜Ä.añ%”,ÿút÷Ìà¡åje9Ié ¼¦§_÷÷ ÷õ¼Èù¼ÀñÿÕn&sïæogÅüëWNçšÏ:wv¾›)#U®ûÛÙ%|x={=ãdeÿ[íæ—³ûÊÎ}î0óåÕ,ìÀç\ƒ áæÆ¹6n¾ÜÍ~dß²…pyQXÃÖÕ6[xa-»ìʦË\Y ^ÁmuÌR‚‹^2/DQä½(¸dâ¶òÜ 4¥²/¿=YÎ~b6ðNòQÌñÆüiñjëEˆ÷y&ƒàöUƒnpò øÎïYU_o2a!jÉYGîÝ¿|l^˜\?·yae¡çË5˜…˜Š\xçmX1qHºÜzÅç‹É’?@â½5à@¼t˜ŸÉS´µàFçÂÈù‚óÜk¸ Õgã¨÷è†÷†kËV‡]u—ÿJˆÞÉ•Êå‡#7!~ím÷¢P¹s:zÆhÉãSSvõa!Rv¸Ja8Ö 1+deµ)„‹+ÚÑ›M}¼³@Nž ðcBåÂ.-™¹Y¦tac€à`ý§ª©ö«*EŠpïàúcªs—óp!îˆCÛÜ>‰|_þ ®;•s9ñœ=¸®ðÝý 36"`Nyðªþü7„n1Ò ¡0¹°âFƒÜ¸(2où™h)? îóB¸!ÝWC¾ENOò]­O«¸ßÐÐÿ3Ù“Þ›©V6·B»IªmQ8#ϸ­f•ü¿xîÉó§åñXï«¶=ï¹Ü¤ç`ôpþ;\¿¨®ûŒÿ7Zî÷d±*·ÝæL ºÒrþq}æU^xk?0ȃßÖҨܺƒÓƒOæ`-T®´üà›G 3œó8F¥Õ>À{;½Ï ìgZç¨$¸O eî& Eno ïõHD¥ †kx’ûÂói42ˆÌ• Uˆf™9¤-¥YùÓ–æŒSç˜ük¶P }¤zZM‘è8r û©\¡Ö(¸àìÕÛŒt˜;Í:~Ã9{“AØÐE×i¤@ÎÚj[­â¦,¶Õ:}!ÙðÊ‚˜!ƒÚ°Mœ’Eá±y 2ª5ÑUâ±rÖDàå®|• ä>ЊU|ì 4\ Ŷ¨&1 {¿Âç8!¢.Y¬£íq”tuÚ‘ÚòƱÓfâʇzVq9D…V J2¶^·é±a¤!â=(övSíÓžõϱÌ(F ÖÔûëÁbt"ÈÓmõ†Ê€¸Ú¶CdT+ ÍNW4U{Œº™S–±Ìʲ6U¡¼sÊe®•¥ýÝlù—A_ïQµuÆ-|ÈÏLy¶0‡.‰¼â'oCÒCF|(æ—]¼ö’òOŸŠ»Òo×u—)¶ Eƒ‹GzÁI¥lOk’_H›BÑ·Ûáfuèa<‚kJ À¶«ZŠ/}¹ Òs²+»¦þL)MR®LŽ`ª ±…Rl_•Mü@p²lPòžö« ÀävÒ·pZâJ§qú· “ 9MüzÚåhTõüu6ÔxfA`Ž4Œ,V¯B9ŒÂc¹ %k«®wœŽäk„ æ!š„!››¾ÝßCþ=,=Àš¶nS¬.æCSýwA – &U,yaرlÊ]ÕUM{/ž$$É€å/¹§qQx¬£„*º¹‰QtFœ¤þÐìð…%vêqZ£P‘4nªÕ‰€RÅE.6ž£­CßÁ.(Ý(hÜQ”[ôÆ`²àUhò¦Zº wÀùrÓo`YÕv5 bLxì#n%½Ÿ =wÃ`ñ¡÷ÃôaÆ•mÏÌ/¶p8¸‚¸ãF7p¨<0‘HÈ"êå`¸pçp¨så|aÒ× h)…CüØžªäT‚×: 4zaX[ïpМ¶]¹¯§>²8›º¥ƒTø¼ç Ë1)±o÷á ŒB¦}¨ô)¡œ}¨Á›4KsØ%s‚}6 æÙ!=fí*Ìn'ÛQ‡¶Ÿg m<¯KŸJGVþqL3ã/É…]½^cÈIþÁ-ÆÄµà°…Ô~R葉¨í ðfL8ª5 wH‰áš÷DÉP¨D2hÑŒ6õõ=AE±-Í ‹™Ž¬ eÅ!† q´P – 駗и˜¸k7€èÑÔuS†±d ›0ernwhªäÔ³©^÷ø:!™cÝHZ…€!‡æºlwŽâÔ är¤¬ ò8yQo«w18x9¶p ¤¢4Ž·gÕÛô«È¹¶ïqÚ¿²0œAS6¯ö¯ça#*~ø4ç¡Ù'Îå½D¼†=lªî×tZì«{ CìE°¯Id] ôOd˱çi­…rX(j¡?»¬w=¥ŒÕ Lìoú¶Øytü++@õ×Õ¾jÊ´;è¶çY:¢aŒ§Áó0’ÅßOAP~›~R µ1w±ÜëàœvÖq¤Å.¢ µ °"õơЧptC;-=àäAjÊÊñ'&7R2~¢‹¨¸Þƒb®Œ”É·—LÒÜMùfþB6#l‘+o#´þ®€¥ÆQ³­HÒ©³üç½x£ÿYÕu4OŠpJy/S?z*³Äj€GBåyÏ™ýß.Ȥã‰~‹¶Œéj]¯èxE[8vYmÇXŒ®/ª8g‘¸MN7†Fô߉š“;¢‘ñ×ÎWïn€£ï¦f–ÎÛQV^–»c?WÝðW HÑ£ þNZ ­0ˆâépqSúyõäÍa{Ч’Þ>ŽºQìéiWî#ÄÀ‡Õ¦|Sšós G]šS·c¬péy;ÆÄä” ÝÊÕ0ÞÌFl:€šfþAç–2lÑ.ýF÷Ãì?í(´> stream xœ=]HSq†ÿ›¶s¦‡™;MÅņ‚fwZ}IX^” YXCrÎéĩՆ˜6ÏlûMÏ6çœ[›mâ¦3Z_b„M¤ºvÑ……P’uQÔrˈ޻÷âåyx(]ˆøôñ#ue¥ûË·J0©ñâm@¥•~+•’.fÏg=ÝŽ¶’Vº·¡l´åüÝ"y'…òMAÏ;$Ù܇˜èe¸cÆqîÅÙ¹tû7Šd*VmjÔUT_ãIØ åv>s¹2®Z6,‰[‚ø.À4ƒ+øÊ˜’~8h4ät’emyɯ]2›†À Hp néæê„!Ô;Ö5£fœ±·ÙuÐFÖ|¦™Ïâ…¼û‰%ŒâŸÐýÔûé\‹±á<žÀŹô'\šJÊBÞ ‘öcÕíUŒR/ºÜe5(-ÄÀõ‘?DrFD¯¾Ltó;kÌ{J.]tyuJ†3¹i'¢Îñ)˜"ãÍÁ¦F]kC–ª×?bü6«pù8?øáíù…Ê{ÝN£ÓhqŽr#N’N¾ÎÍ¿ÉLj—N–à m¡&Ü>=œŒF:­ŽÿÒøkd‹Ã[W>Ç9‡æpÎÏ¥¿`ɺlzbb:ÒjÔê;.þ8±–\KÌ)CÑÑÇð;U±†©ZïY éÏõPÏ4éI\Høú}VŸ¼-ZÑg¯]nçxHauõs,˜ÁÄš­ªžzÓ9Ð@“CëisçÑßX–cåVQX,¶>’Eô:L·üÃcžQE80;ƒÜíów†šû«@šê«-WZ5=Z¨ƒÚq}œ”(2Ò<‡)1P@e%Eè7R endstream endobj 109 0 obj << /Filter /FlateDecode /Length 1734 >> stream xœWÉrÛF½órÉ· REdö%7ÇVœ¸\./trˆs@HH‚‹$d´­¿O÷,X$P%»|9˜éîyÝýúͧŒ,£ø/þÝV¢p6û²¢ÙóFŽeÚ)SPžVÒHQŒ ûÕ;Øxµú´bÞJÿlÙo›Õ/o™‚•ÂQ°±¹\,c`Ck›i« Êl¶9¬þ!åVv’²­ËÿöU¾fÂZE.º¾>”=þ¦NΑ'9ïTI²û˜¯iA¥vÎS×W»üßÍ tl¦Ž¹c„B³Í<ÝàF¹“:nžE© iÕi÷:xp\(ò9W€R¤ÜŸ*ïêb³z3âd™)”œà§ïÄÈð‚0zs ç0êU›¯…`%õqÛ"fµ$0Ï×R øG¨–‰B©lórµùù!c×U}u;+$éÁ*ç\ UvÎ*à“ì>;µe_7Ç`ÂÖæÿ÷¤­öþcwí4¤†tXj|ÐnÉ<Ú|r…w<$lûµX ´H†¨ÃþgõU[·:öß!©v§mŒÏ ¥Ð–C0i‚I*ècL%Ðb >@©ÀwÇ$ó—Þ¢›_†\ îZ1YH-m¶êPpïõç¾6¤j»º÷‰bÊ’Û”#M>”—“âcdTWM{û!‡ßNúžyõ$_+)ý.÷ât¬›6Þ ¬n›ý¾òXCÊ-Ü‚-f¾¿Äq({k5 ÕÃÉ¡Þíöá¸Ä‚aòÜñ—¿£Ó–|ÉÑŒãÑ Fb&–˜ñI—jš!h—ÁÔëø¡½E¾Zã^ggÙ4vØûª‰eÉé¶Þ±o×°Œœ%Fš=¼eœ¬YaùÌR¼Àz–9…y#T徿Î7ï¤ÕÚֱ݂/gøjS8üŒBçPYõ¥®°dȯûòL~_5}jCE®Ð1Æ õ4†Ǥ…ñ kÐBq=ú}dçbfp/”ž`Z žGgÀ³Þ-¼/8iਡӣ`ù>C]|ÝVPǵ '‡0d¦€}¨Ûî¤ b|¨¿Zèù¡.ÊÎOKá³!g.˜¾{ŒÁENçÔöçq_w‰#È»æäÏAûtà¦ç8—ù§ DP@ƒ6Eµ»äpAܳ0ø5‚ä0ó tz_ q ÕPZøv5ä\Áw—TQC›Ür@]‚ójQø’Dþ ™âÖϳ×Xe[ªÞ¿Eb%xIÙÅ%è¯Q0Õ`¯¿®â Ý®ìQÐT»qïöt†×)öU¤:U­!ûæªî“OM‰'»jŸ8ò¥ö%­Pv]jwÈï¶.“ž½£°Ê${•5–= {u£› _ úÕºÇߨvñj·Ke>•s©(å×õbŽFCö¢á>èo$Õ¥0€%%å"ì&kÈR_`ã‡ÚbUÆ™*öJÛy÷ÃÊwHm. 2ãß4Qj?m7e[¥Þ£šì«ÏáÝ¡ðg—>Ø @…;¯A=À{$éLpÀ‡gÌ.Q“à  i:‘wÝ8¼˜öoŸXg»ç³.`“ßðÚ¡ùM¯” +3ÍA\ùþ0’‚÷9XRÂ8€AhNð:Ê´—³~Äp©yWøEŽÂV£ŽšFq Ñ9·Ôhgåq0«‚oæ==GШdí d• í³oïyIR£ ¶,†“ÉÉ•ÖÑï(am[†Ï•©ž1ÿc•9êýÉýn©3Q@й3±$w†s‘]&w{¤XwF¨àÐÊ%‡³¢Å7BÁø¤hÓÊ÷O%ïQ²å±\ægŽÂ±d…¯£ H*üý<„l*˜‘ ²TÐ%“ŠLõ –©¤ {ʹ«îà™6ÏRÞŽü‚¸2`›j{ŠÊ^!ŒÄÑßÀxFÆKÁ6I/^Žkã»z!ÉQÄP§É˜:¹˜hóøáb¦ÀGóœçÎM•G76có~éºi»«aüãäïËcÕœºÐ Û‘øGø 9> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 111 /ID [<163332bd1c87eac2fe59eab7e0107843>] >> stream xœcb&F~0ù‰ $À8J1ò?ÿûí@6ë#P ȃHŽD)xDrý³¿‚H…³ ’©Dò|‘lGA$;X„s2ˆdn‘ŒàôÀÈVo 6³,+/“§A¤ˆØ^3)¡VŸ6ÙH2 ®Ûu ¬&,>¬÷ ˜L‘ÜçÁ&ß»D€mq endstream endobj startxref 81490 %%EOF multcomp/inst/doc/chfls1.R0000644000176200001440000002512515075167041015152 0ustar liggesusers### R code from vignette source 'chfls1.Rnw' ################################################### ### 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("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.Rnw0000644000176200001440000006772514444336767015547 0ustar liggesusers \documentclass[11pt]{article} %%\VignetteIndexEntry{Supplementary Material for "A re-evaluation of the model selection procedure in Pollet \& Nettle (2009)"} %%\VignetteDepends{xtable,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("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 by Pollet and Nettle.} \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") @ \begin{sidewaystable} \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} \caption{Summary of variable selection following the strategy of \citet{Pollet2009} using the correctly calculated AIC and BIC.\newline \vspace{0.7cm}\label{Pollet_korr}} \end{sidewaystable} \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.Rnw0000644000176200001440000014735214442074521017166 0ustar liggesusers%%\VignetteIndexEntry{Simultaneous Inference in General Parametric Models} %%VignetteDepends{multcomp,TH.data,survival,robustbase,lme4,coin} \documentclass[12pt,a4paper]{article} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{Sweave} \usepackage{a4wide} %%\usepackage[lists,heads]{endfloat} \input{header} \hypersetup{ pdftitle = {Simultaneous Inference in General Parametric Models}, pdfsubject = {Manuscript}, pdfauthor = {Torsten Hothorn and Frank Bretz and Peter Westfall}, colorlinks = {true}, linkcolor = {blue}, citecolor = {blue}, urlcolor = {red}, hyperindex = {true}, linktocpage = {true}, } \SweaveOpts{engine=R, eps=FALSE, keep.source = TRUE} \begin{document} \title{Simultaneous Inference \\ in General Parametric Models \footnote{This is a preprint of an article published in Biometrical Journal, Volume 50, Number 3, 346--363. Copyright \copyright{} 2008 WILEY-VCH Verlag GmbH \& Co. KGaA, Weinheim; available online \url{http://www.biometrical-journal.com}.}} \author{\textbf{Torsten Hothorn} \\ %EndAName Institut f{\"u}r Statistik \\ Ludwig-Maximilians-Universit{\"a}t M{\"u}nchen \\ Ludwigstra{\ss }e 33, D--80539 M{\"u}nchen, Germany\\ \and \textbf{Frank Bretz} \\ %EndAName Statistical Methodology, Clinical Information Sciences\\ Novartis Pharma AG \\ CH-4002 Basel, Switzerland \\ \and \textbf{Peter Westfall} \\ %EndAName Texas Tech University \\ Lubbock, TX 79409, U.S.A} \maketitle \begin{abstract} Simultaneous inference is a common problem in many areas of application. If multiple null hypotheses are tested simultaneously, the probability of rejecting erroneously at least one of them increases beyond the pre-specified significance level. Simultaneous inference procedures have to be used which adjust for multiplicity and thus control the overall type I error rate. In this paper we describe simultaneous inference procedures in general parametric models, where the experimental questions are specified through a linear combination of elemental model parameters. The framework described here is quite general and extends the canonical theory of multiple comparison procedures in ANOVA models to linear regression problems, generalized linear models, linear mixed effects models, the Cox model, robust linear models, etc. Several examples using a variety of different statistical models illustrate the breadth of the results. For the analyses we use the \RR{} add-on package \Rpackage{multcomp}, which provides a convenient interface to the general approach adopted here. \end{abstract} \thispagestyle{empty} \setcounter{page}{0} \textbf{Key words}: multiple tests, multiple comparisons, simultaneous confidence intervals, \newline adjusted $p$-values, multivariate normal distribution, robust statistics. <>= set.seed(290875) options(prompt = "R> ") options(SweaveHooks = list(mai2 = function() par(mai = par("mai") * c(1, 2, 1, 1)), mai3 = function() par(mai = par("mai") * c(1, 3, 1, 1)), mai4 = function() par(mai = par("mai") * c(1, 2.1, 1, 0.5)), cex = function() par(cex.lab = 1.3, cex.axis = 1.3))) library("multcomp") library("survival") library("sandwich") library("robustbase") library("TH.data") data("alpha", package = "coin") data("bodyfat", package = "TH.data") data("alzheimer", package = "coin") load(file.path(path.package(package = "TH.data"), "rda", "AML_Bullinger.rda")) @ <>= risk <- rep(0, nrow(clinical)) rlev <- levels(clinical[, "Cytogenetic.group"]) risk[clinical[, "Cytogenetic.group"] %in% rlev[c(7,8,4)]] <- "low" risk[clinical[, "Cytogenetic.group"] %in% rlev[c(5, 9)]] <- "intermediate" risk[clinical[, "Cytogenetic.group"] %in% rlev[-c(4,5, 7,8,9)]] <- "high" risk <- as.factor(risk) names(clinical)[6] <- "FLT3" library("lme4") data("trees513", package = "multcomp") @ \section{Introduction} Multiplicity is an intrinsic problem of any simultaneous inference. If each of $k$, say, null hypotheses is tested at nominal level $\alpha$, the overall type I error rate can be substantially larger than $\alpha$. That is, the probability of at least one erroneous rejection is larger than $% \alpha$ for $k \geq 2$. Common multiple comparison procedures adjust for multiplicity and thus ensure that the overall type I error remains below the pre-specified significance level $\alpha$. Examples of such multiple comparison procedures include Dunnett's many-to-one comparisons, Tukey's all-pairwise comparisons, sequential pairwise contrasts, comparisons with the average, changepoint analyses, dose-response contrasts, etc. These procedures are all well established for classical regression and ANOVA models allowing for covariates and/or factorial treatment structures with i.i.d.~normal errors and constant variance, see \cite{Bretzetal2008} and the references therein. For a general reading on multiple comparison procedures we refer to \cite{HochbergTamhane1987} and \cite{Hsu1996}. In this paper we aim at a unified description of simultaneous inference procedures in parametric models with generally correlated parameter estimates. Each individual null hypothesis is specified through a linear combination of elemental model parameters and we allow for $k$ of such null hypotheses to be tested simultaneously, regardless of the number of elemental model parameters $p$. The general framework described here extends the current canonical theory with respect to the following aspects: (i) model assumptions such as normality and homoscedasticity are relaxed, thus allowing for simultaneous inference in generalized linear models, mixed effects models, survival models, etc.; (ii) arbitrary linear functions of the elemental parameters are allowed, not just contrasts of means in AN(C)OVA models; (iii) computing the reference distribution is feasible for arbitrary designs, especially for unbalanced designs; and (iv) a unified implementation is provided which allows for a fast transition of the theoretical results to the desks of data analysts interested in simultaneous inferences for multiple hypotheses. Accordingly, the paper is organized as follows. Section~\ref{model} defines the general model and obtains the asymptotic or exact distribution of linear functions of elemental model parameters under rather weak conditions. In Section~\ref% {siminf} we describe the framework for simultaneous inference procedures in general parametric models. An overview about important applications of the methodology is given in Section~\ref{applications} followed by a short discussion of the software implementation in Section~\ref{implementation}. Most interesting from a practical point of view is Section~\ref% {illustrations} where we analyze four rather challenging problems with the tools developed in this paper. \section{Model and Parameters} \label{model} In this section we introduce the underlying model assumptions and derive some asymptotic results necessary in the subsequent sections. The results from this section form the basis for the simultaneous inference procedures described in Section~\ref{siminf}. Let $\M((\Z_1, \dots, \Z_n), \theta, \eta)$ denote a semi-parametric statistical model. The set of $n$ observations is described by $(\Z_1, \dots, \Z_n)$. The model contains fixed but unknown elemental parameters $\theta \in \R^p$ and other (random or nuisance) parameters $\eta$. We are primarily interested in the linear functions $\vartheta := \K \theta$ of the parameter vector $\theta$ as specified through the constant matrix $\K \in \R^{k, p}$. %%Assume that we are given an estimate $\hat{\theta}_n \in \R^p$ of the %%vector of elemental parameters $\theta$. In what follows we describe the underlying model assumptions, the limiting distribution of estimates of our parameters of interest $\vartheta$, as well as the corresponding test statistics for hypotheses about $\vartheta$ and their limiting joint distribution. Suppose $\hat{\theta}_n \in \R^p$ is an estimate of $\theta$ and $\Sraw \in \R^{p,p}$ is an estimate of $\cov(\hat{\theta}_n)$ with \begin{eqnarray} \label{cov} a_n \Sraw \cP \Sigmaraw \in \R^{p,p} \end{eqnarray} for some positive, nondecreasing sequence $a_n$. Furthermore, we assume that a multivariate central limit theorem holds, i.e., \begin{eqnarray} \label{clt} a_n^{1/2} (\hat{\theta}_n - \theta) \cL \N_p(0, \Sigmaraw). \end{eqnarray} If both (\ref{cov}) and (\ref{clt}) are fulfilled we write $\hat{\theta}_n \an \N_p(\theta, \Sraw)$. Then, by Theorem 3.3.A in \cite{Serfling1980}, the linear function $\hat{\vartheta}_n = \K \hat{\theta}_n$, i.e., an estimate of our parameters of interest, also follows an approximate multivariate normal distribution \begin{eqnarray*} \hat{\vartheta}_n = \K \hat{\theta}_n \an \N_k(\vartheta, \SK) \end{eqnarray*} with covariance matrix $\SK := \K \Sraw \K^\top$ for any fixed matrix $\K \in \R^{k,p}$. Thus we need not to distinguish between elemental parameters $\theta$ or derived parameters $\vartheta = \K \theta$ that are of interest to the researcher. %%for example the parameters $\K \theta$ representing %%all pairwise comparisons of elemental parameters. Instead we simply assume for the moment that we have (in analogy to (\ref{cov}) and (\ref{clt})) \begin{eqnarray} \label{assume} \hat{\vartheta}_n \an \N_k(\vartheta, \SK) \text{ with } a_n \SK \cP \SigmaK := \K \Sigma \K^\top \in \R^{k,k} \end{eqnarray} and that the $k$ parameters in $\vartheta$ are themselves the parameters of interest to the researcher. It is assumed that the diagonal elements of the covariance matrix are positive, i.e., $\SigmaK_{jj} > 0$ for $j = 1, \dots, k$. Then, the standardized estimator $\hat{\vartheta}_n$ is again asymptotically normally distributed \begin{eqnarray} \label{test} \T_n := %% \frac{\hat{\vartheta}_n - \vartheta}{\sqrt{\diag(\SK)}} = \D_n^{-1/2} (\hat{\vartheta}_n - \vartheta) \an \N_k(0, \Cor_n) \end{eqnarray} where $\D_n = \diag(\SK)$ is the diagonal matrix given by the diagonal elements of $\SK$ and \begin{eqnarray*} \Cor_n = \D_n^{-1/2} \SK \D_n^{-1/2} \in \R^{k,k} \end{eqnarray*} is the correlation matrix of the $k$-dimensional statistic $\T_n$. To demonstrate (\ref{test}), note that with (\ref{assume}) we have $a_n \SK \cP \SigmaK$ and $a_n \D_n \cP \diag(\SigmaK)$. Define the sequence $\tilde{a}_n$ needed to establish $\tilde{a}$-convergence in (\ref{test}) by $\tilde{a}_n \equiv 1$. Then we have \begin{eqnarray*} \tilde{a}_n \Cor_n & = & \D_n^{-1/2} \SK \D_n^{-1/2} \\ & = & (a_n \D_n)^{-1/2} (a_n \SK) (a_n \D_n)^{-1/2} \\ & \cP & \diag(\SigmaK)^{-1/2} \, \SigmaK \, \diag(\SigmaK)^{-1/2} =: \Cor \in \R^{k,k} \end{eqnarray*} where the convergence in probability to a constant follows from Slutzky's Theorem \citep[Theorem 1.5.4,][]{Serfling1980} and therefore (\ref{test}) holds. To finish note that \begin{eqnarray*} \T_n = \D_n^{-1/2} (\hat{\vartheta}_n - \vartheta) = (a_n \D_n)^{-1/2} a_n^{1/2} (\hat{\vartheta}_n - \vartheta) \cL \N_k(0, \Cor). \end{eqnarray*} For the purposes of multiple comparisons, we need convergence of multivariate probabilities calculated for the vector $\T_n$ when $\T_n$ is assumed normally distributed with $\Cor_n$ treated as if it were the true correlation matrix. However, such probabilities $\Prob(\max(|\T_n| \le t)$ are continuous functions of $\Cor_n$ (and a critical value $t$) which converge by $\Cor_n \cP \Cor$ as a consequence of Theorem 1.7 in \cite{Serfling1980}. In cases where $\T_n$ is assumed multivariate $t$ distributed with $\Cor_n$ treated as the estimated correlation matrix, we have similar convergence as the degrees of freedom approach infinity. Since we only assume that the parameter estimates are asymptotically normally distributed with a consistent estimate of the associated covariance matrix being available, our framework covers a large class of statistical models, including linear regression and ANOVA models, generalized linear models, linear mixed effects models, the Cox model, robust linear models, etc. Standard software packages can be used to fit such models and obtain the estimates $\hat{\theta}_n$ and $\Sraw$ which are essentially the only two quantities that are needed for what follows in Section~\ref{siminf}. It should be noted that the elemental parameters $\theta$ are not necessarily means or differences of means in AN(C)OVA models. Also, we do not restrict our attention to contrasts of such means, but allow for any set of constants leading to the linear functions $\vartheta = \K\theta $ of interest. Specific examples for $\K$ and $\theta $ will be given later in Sections~% \ref{applications} and \ref{illustrations}. \section{Global and Simultaneous Inference} \label{siminf} Based on the results from Section~\ref{model}, we now focus on the derivation of suitable inference procedures. We start considering the general linear hypothesis \citep{Searle1971} formulated in terms of our parameters of interest $\vartheta$ \begin{eqnarray*} H_0: \vartheta := \K \theta = \m. \end{eqnarray*} Under the conditions of $H_0$ it follows from Section~\ref{model} that \begin{eqnarray*} \T_n = \D_n^{-1/2} (\hat{\vartheta}_n - \m) \an \N_k(0, \Cor_n). \end{eqnarray*} This approximating distribution will now be used as the reference distribution when constructing the inference procedures. The global hypothesis $H_0$ can be tested using standard global tests, such as the $F$- or the $\chi^2$-test. An alternative approach is to use maximum tests, as explained in Subsection~% \ref{global}. Note that a small global $p$-value (obtained from one of these procedures) leading to a rejection of $H_0$ does not give further indication about the nature of the significant result. Therefore, one is often interested in the individual null hypotheses \begin{eqnarray*} H_0^j: \vartheta_j = \m_j. \end{eqnarray*} %%(Note that $H_0 = \bigcap_{j = 1}^k H_0^j$.) Testing the hypotheses set $% \{H_0^1, \ldots, H_0^k\}$ simultaneously thus requires the individual assessments while maintaining the familywise error rate, as discussed in Subsection~\ref{simtest} At this point it is worth considering two special cases. A stronger assumption than asymptotic normality of $\hat{\theta}_n$ in (\ref{clt}) is exact normality, i.e., $\hat{\theta}_n \sim \N_p(\theta, \Sigmaraw)$. If the covariance matrix $\Sigmaraw$ is known, it follows by standard arguments that $\T_n \sim \N_k(0, \Cor)$, when $\T_n$ is normalized using fixed, known variances. Otherwise, in the typical situation of linear models with normal i.i.d. errors, $\Sigmaraw = \sigma^2 \A$, where $\sigma^2$ is unknown but $\A$ is fixed and known, the exact distribution of $\T_n$ is a $k$% -dimensional multivariate $t_k(\nu, \Cor)$ distribution with $\nu$ degrees of freedom ($\nu = n - p - 1$ for linear models), see \cite{Tong1990}. \subsection{Global Inference} \label{global} %\paragraph{Global tests.} The $F$- and the $\chi^2$-test are classical approaches to assess the global null hypothesis $H_0$. Standard results \citep[such as Theorem 3.5,][]{Serfling1980} ensure that \begin{eqnarray*} X^2 & = & \T_n^\top \Cor_n^+ \T_n \cL \chi^2(\Rg(\Cor)) \quad \text{when } \hat{\theta}_n \an \N_p(\theta, \Sraw) \\ F & = & \frac{\T_n^\top \Cor^+ \T_n}{\Rg(\Cor)} \sim \F(\Rg(\Cor), \nu) \quad \text{% when } \hat{\theta}_n \sim \N_p(\theta, \sigma^2 \A), \end{eqnarray*} where $\Rg(\Cor)$ and $\nu$ are the corresponding degrees of freedom of the $\chi^2$ and $\F$ distribution, respectively. Furthermore, $\Rg(\Cor_n)^+$ denotes the Moore-Penrose inverse of the correlation matrix $\Rg(\Cor)$. Another suitable scalar test statistic for testing the global hypothesis $H_0 $ is to consider the maximum of the individual test statistics $T_{1,n}, \dots, T_{k,n}$ of the multivariate statistic $\T_n = (T_{1,n}, \dots, T_{k,n})$, leading to a max-$t$ type test statistic $\max(|\T_n|)$. The distribution of this statistic under the conditions of $H_0$ can be handled through the $k$-dimensional distribution \begin{eqnarray} \label{maxt} \Prob(\max(|\T_n|) \le t) \cong \int\limits_{-t}^t \cdots \int\limits_{-t}^t \varphi_k(x_1, \dots, x_k; \Cor, \nu) \, dx_1 \cdots dx_k =: g_\nu(\Cor, t) \end{eqnarray} for some $t \in \R$, where $\varphi_k$ is the density function of either the limiting $k$-dimensional multivariate normal (with $\nu = \infty$ and the `$% \approx$' operator) or the exact multivariate $t_k(\nu, \Cor)$-distribution (with $\nu < \infty$ and the `$=$' operator). Since $\Cor$ is usually unknown, we plug-in the consistent estimate $\Cor_n$ as discussed in Section~\ref{model}. The resulting global $p$-value (exact or approximate, depending on context) for $H_0$ is $1 - g_\nu(\Cor_n, \max|\tt|)$ when $\T = \tt$ has been observed. Efficient methods for approximating the above multivariate normal and $t$ integrals are described in \cite{Genz1992,GenzBretz1999,BretzGenzHothorn2001} and \cite% {GenzBretz2002}. %The procedures %are applicable to small and moderate problems with up to $k < 100$ hypotheses. In contrast to the global $F$- or $\chi^2$-test, the max-$t$ test based on the test statistic $\max(|\T_n|)$ also provides information, which of the $k$ individual null hypotheses $% H_0^j, j = 1, \dots, k$ is significant, as well as simultaneous confidence intervals, as shown in the next subsection. \subsection{Simultaneous Inference} \label{simtest} %\paragraph{Simultaneous tests.} We now consider testing the $k$ null hypotheses $H_0^1, \ldots, H_0^k$ individually and require that the familywise error rate, i.e., the probability of falsely rejecting at least one true null hypothesis, is bounded by the nominal significance level $\alpha \in (0, 1)$. In what follows we use adjusted $p$-values to describe the decision rules. Adjusted $% p$-values are defined as the smallest significance level for which one still rejects an individual hypothesis $H_0^j$, given a particular multiple test procedure. In the present context of single-step tests, the (at least asymptotic) adjusted $p$-value for the $j$th individual two-sided hypothesis $H_0^j: \vartheta_j = \m_j, j = 1, \dots, k, $ is given by \begin{eqnarray*} p_j = 1 - g_\nu(\Cor_n, |t_j|), \end{eqnarray*} where $t_1, \dots, t_k$ denote the observed test statistics. By construction, we can reject an individual null hypothesis $H_0^j$, $j= 1, \ldots, k$, whenever the associated adjusted $p$-value is less than or equal to the pre-specified significance level $\alpha$, i.e., $p_j \leq \alpha$. The adjusted $p$-values are calculated from expression~(\ref{maxt}). Similar results also hold for one-sided testing problems. The adjusted $p$-values for one-sided cases are defined analogously, using one-sided multidimensional integrals instead of the two-sided integrals (\ref{maxt}). Again, we refer to \cite{Genz1992,GenzBretz1999,BretzGenzHothorn2001} and \cite{GenzBretz2002} for the numerical details. %\paragraph{Simultaneous confidence intervals.} In addition to a simultaneous test procedure, a (at least approximate) simultaneous $(1 - 2\alpha) \times 100\%$ confidence interval for $\vartheta$ is given by \begin{eqnarray*} \hat{\vartheta}_n \pm q_\alpha \D_n^{1/2} \end{eqnarray*} where $q_\alpha$ is the $1 - \alpha$ quantile of the distribution (asymptotic, if necessary) of $\T_n$. This quantile can be calculated or approximated via (\ref{maxt}), i.e., $q_\alpha$ is chosen such that $g_\nu(\Cor_n, q_\alpha) = 1 - \alpha$. The corresponding one-sided versions are defined analogously. It should be noted that the simultaneous inference procedures described so far belong to the class of single-step procedures, since a common critical value $q_\alpha$ is used for the individual tests. Single-step procedures have the advantage that corresponding simultaneous confidence intervals are easily available, as previously noted. However, single-step procedures can always be improved by stepwise extensions based on the closed test procedure. That is, for a given family of null hypotheses $H_0^1, \dots, H_0^k$, an individual hypothesis $H_0^j$ is rejected only if all intersection hypotheses $H_J = \bigcap_{i \in J} H_0^i$ with $j \in J \subseteq \{1, \dots, k\}$ are rejected \citep{Marcusetal1976}. Such stepwise extensions can thus be applied to any of the methods discussed in this paper, see for example \cite{Westfall1997} and \cite{WestfallTobias2007}. %%In fact, the \Rpackage{multcomp} package %%introduced in Section~\ref{implementation} uses max-$t$ %%type statistics for each intersection hypothesis based on the %%methods from this paper, thus accounting for stochastic %%dependencies. Furthermore, the implementation of \Rpackage{multcomp} %%exploits logical constraints, leading to computationally %%efficient, yet powerful truncated closed test procedures, see %%\cite{Westfall1997} and \cite{WestfallTobias2007}. \section{Applications} \label{applications} The methodological framework described in Sections~\ref{model} and \ref% {siminf} is very general and thus applicable to a wide range of statistical models. Many estimation techniques, such as (restricted) maximum likelihood and M-estimation, provide at least asymptotically normal estimates of the elemental parameters together with consistent estimates of their covariance matrix. In this section we illustrate the generality of the methodology by reviewing some potential applications. Detailed numerical examples are discussed in Section~\ref{illustrations}. In what follows, we assume $\m = 0$ only for the sake of simplicity. The next paragraphs highlight a subjective selection of some special cases of practical importance. \paragraph{Multiple Linear Regression.} In standard regression models the observations $\Z_i$ of subject $i=1, \ldots, n$ consist of a response variable $Y_i$ and a vector of covariates $% \X_i = (X_{i1}, \dots, X_{iq})$, such that $\Z_i = (Y_i, \X_i)$ and $p = q + 1$. The response is modelled by a linear combination of the covariates with normal error $\varepsilon_i$ and constant variance $\sigma^2$, \begin{eqnarray*} Y_i = \beta_0 + \sum_{j = 1}^q \beta_j X_{ij} + \sigma \varepsilon_i, \end{eqnarray*} where $\varepsilon = (\varepsilon_1, \dots, \varepsilon_n)^\top \sim \N_n(0, \mathbf{I}_n).$ The elemental parameter vector is $\theta = (\beta_0, \beta_1, \dots, \beta_q)$, which is usually estimated by \begin{eqnarray*} \hat{\theta}_n = \left(\X^\top\X\right)^{-1} \X^\top \Y \sim \N% _{q+1}\left(\theta, \sigma^2 \left(\X^\top\X\right)^{-1}\right), \end{eqnarray*} where $\Y = (Y_1, \dots, Y_n)$ denotes the response vector and $\X = (1, (X_{ij}))_{ij}$ denotes the design matrix, $i = 1, \dots, n, j = 1, \dots, q$. Thus, for every matrix $\K \in \R^{k,q+1}$ of constants determining the experimental questions of interest we have \begin{eqnarray*} \hat{\vartheta}_n = \K \hat{\theta}_n \sim \N_k(\K \theta, \sigma^2 \K \left(\X^\top\X% \right)^{-1} \K^\top). \end{eqnarray*} Under the null hypothesis $\vartheta = 0$ the standardized test statistic follows a multivariate $t$ distribution \begin{eqnarray*} \T_n = \D_n^{-1/2} \hat{\vartheta}_n \sim t_{q+1}(n - q, \Cor), \end{eqnarray*} where $\D_n = \hat{\sigma}^2 \diag(\K \left(\X^\top\X \right)^{-1} \K^\top)$ is the diagonal matrix of the estimated variances of $\K \hat{\theta}$ and $\Cor$ is the correlation matrix as given in Section~\ref{siminf}. The body fat prediction example presented in Subsection \ref{bodyfat} illustrates the application of simultaneous inference procedures in the context of variable selection in linear regression models. \paragraph{One-way ANOVA.} Consider a one-way ANOVA model for a factor measured at $q$ levels with a continuous response \begin{eqnarray} \label{one-way} Y_{ij} = \mu + \gamma_{j} + \varepsilon_{ij} \end{eqnarray} and independent normal errors $\varepsilon_{ij} \sim \N_1(0, \sigma^2), j = 1, \dots, q, i = 1, \dots, n_j$. Note that the model description in (\ref% {one-way}) is overparameterized. A standard approach is to consider a suitable re-parametrization. The so-called "treatment contrast" vector $% \theta = (\mu, \gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \dots, \gamma_q - \gamma_1)$ is, for example, the default re-parametrization used as elemental parameters in the \RR-system for statistical computing \citep{rcore2007}. Many classical multiple comparison procedures can be embedded into this framework, including Dunnett's many-to-one comparisons and Tukey's all-pairwise comparisons. For Dunnett's procedure, the differences $% \gamma_j - \gamma_1$ are tested for all $j=2, \ldots, q$, where $\gamma_1$ denotes the mean treatment effect of a control group. In the notation from Section~\ref{model} we thus have \begin{eqnarray*} \K_\text{Dunnett} = (0, \diag(q)) \end{eqnarray*} resulting in the parameters of interest \begin{eqnarray*} \vartheta_\text{Dunnett} = \K_\text{Dunnett} \theta = (\gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \dots, \gamma_q - \gamma_1) \end{eqnarray*} of interest. For Tukey's procedure, the interest is in all-pairwise comparisons of the parameters $\gamma_1, \dots, \gamma_q$. For $q = 3$, for example, we have \begin{eqnarray*} \K_\text{Tukey} = \left( \begin{array}{rrr} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & -1% \end{array} \right) \end{eqnarray*} with parameters of interest \begin{eqnarray*} \vartheta_\text{Tukey} = \K_\text{Tukey} \theta = (\gamma_2 - \gamma_1, \gamma_3 - \gamma_1, \gamma_2 - \gamma_3). \end{eqnarray*} Many further multiple comparison procedures have been investigated in the past, which all fit into this framework. We refer to \cite{BretzGenzHothorn2001} for a related comprehensive list. Note that under the standard ANOVA assumptions of i.i.d.~normal errors with constant variance the vector of test statistics $\T_n$ follows a multivariate $t$ distribution. Thus, related simultaneous tests and confidence intervals do not rely on asymptotics and can be computed analytically instead, as shown in Section~\ref{siminf}. To illustrate simultaneous inference procedures in one-way ANOVA models, we consider all pairwise comparisons of expression levels for various genetic conditions of alcoholism in Subsection~\ref{alpha}. \paragraph{Further parametric models.} In \emph{generalized linear models}, the exact distribution of the parameter estimates is usually unknown and thus the asymptotic normal distribution is the basis for all inference procedures. When we are interested in inference about model parameters corresponding to levels of a certain factor, the same multiple comparison procedures as sketched above are available. \emph{Linear and non-linear} mixed effects models fitted by restricted maximum-likelihood provide the data analyst with asymptotically normal estimates and a consistent covariance matrix as well so that all assumptions of our framework are met and one can set up simultaneous inference procedures for these models as well. The same is true for the \emph{Cox model} or other parametric survival models such as the \emph{Weibull model}. We use logistic regression models to estimated the probability of suffering from Alzheimer's disease in Subsection~\ref{alzheimer}, compare several risk factors for survival of leukemia patients by means of a Weibull model in Subsection~\ref{AML} and obtain probability estimates of deer browsing for various tree species from mixed models in Subsection~\ref{forest}. \paragraph{Robust simultaneous inference.} Yet another application is to use robust variants of the previously discussed statistical models. One possibility is to consider the use of sandwich estimators $\Sraw$ for the covariance matrix $\cov(\hat{\theta}_n)$ when, for example, the variance homogeneity assumption is violated. An alternative is to apply robust estimation techniques in linear models, for example S-, M- or MM-estimation \citep[see][for example]{RousseeuwLeroy2003, mfluc:Stefanski+Boos:2002, Yohai1987}, which again provide us with asymptotically normal estimates. The reader is referred to Subsection~\ref{bodyfat} for some numerical examples illustrating these ideas. \section{Implementation} \label{implementation} The \Rpackage{multcomp} package \citep{pkg:multcomp} in \RR{} \citep{rcore2007} provides a general implementation of the framework for simultaneous inference in semi-parametric models described in Sections~\ref{model} and~\ref{siminf}. The numerical examples in Section~\ref{illustrations} will all be analyzed using the \Rpackage{multcomp} package. In this section we briefly introduce the user-interface and refer the reader to the online documentation of the package for the technical details. Estimated model coefficients $\hat{\theta}_n$ and their estimated covariance matrix $% \Sraw$ are accessible in \RR{} via \Rcmd{coef()} and \Rcmd{vcov()} methods available for most statistical models in \RR, such as objects of class \Rclass{lm}, \Rclass{glm}, \Rclass{coxph}, \Rclass{nlme}, \Rclass{mer} or % \Rclass{survreg}. Having this information at hand, the \Rcmd{glht()} function sets up the \underline{g}eneral \underline{l}inear \underline{h}ypo\underline{t}% hesis for a model `\Robject{model}' and a representation of the matrix $\K$ (via its \Robject{linfct} argument): \begin{Sinput} glht(model, linfct, alternative = c("two.sided", "less", "greater"), rhs = 0, ...) \end{Sinput} The two remaining arguments \Rarg{alternative} and \Rarg{rhs} define the direction of the alternative (see Section~\ref{siminf}) and $\m$, respectively. The matrix $\K$ can be described in three different ways: \begin{itemize} \item by a matrix with \Rcmd{length(coef(model))} columns, or \item by an expression or character vector giving a symbolic description of the linear functions of interest, or \item by an object of class \Rclass{mcp} (for \underline{m}ultiple \underline{c}omparison \underline{p}rocedure). \end{itemize} The last alternative is convenient when contrasts of factor levels are to be compared and the model contrasts used to define the design matrix of the model have to be taken into account. The \Rcmd{mcp()} function takes the name of the factor to be tested as an argument as well as a character defining the type of comparisons as its value. For example, \Rcmd{mcp(treat = "Tukey")} sets up a matrix $\K$ for Tukey's all-pairwise comparisons among the levels of the factor \Robject{treat}, which has to appear on right hand side of the model formula of \Robject{model}. In this particular case, we need to assume that \Rcmd{model.frame()} and \Rcmd{model.matrix()} methods for \Robject{model} are available as well. The \Rcmd{mcp()} function must be used with care when defining parameters of interest in two-way ANOVA or ANCOVA models. Here, the definition of treatment differences (such as Tukey's all-pair comparisons or Dunnett's comparison with a control) might be problem-specific. For example, in an ANCOVA model (here without intercept term) \begin{eqnarray*} Y_{ij} = \gamma_j + \beta_j X_i + \varepsilon_{ij}; \quad j = 1, \dots, q, i = 1, \dots, n_j \end{eqnarray*} the parameters of interest might be $\gamma_j - \gamma_1 + \beta_j x - \beta_1 x$ for some value $x$ of the continuous covariate $X$ rather than the comparisons with a control $\gamma_j - \gamma_1$ that would be computed by \Rcmd{mcp()} with \Rcmd{"Dunnett"} option. The same problem occurs when interaction terms are present in a two-way ANOVA model, where the hypotheses might depend on the sample sizes. Because it is impossible to determine the parameters of interest automatically in this case, \Rcmd{mcp()} in \Rpackage{multcomp} will by default generate comparisons for the main effects $\gamma_j$ only, ignoring covariates and interactions. Since version 1.1-2, one can specify to average over interaction terms and covariates using arguments \verb|interaction_average = TRUE| and \verb|covariate_average = TRUE| respectively, whereas versions older than 1.0-0 automatically averaged over interaction terms. We suggest to the users, however, that they write out, manually, the set of contrasts they want. One should do this whenever there is doubt about what the default contrasts measure, which typically happens in models with higher order interaction terms. We refer to \cite{Hsu1996}, Chapter~7, and \cite{Searle1971}, Chapter~7.3, for further discussions and examples on this issue. Objects of class \Rclass{glht} returned by \Rcmd{glht()} include % \Rcmd{coef()} and \Rcmd{vcov()} methods to compute $\hat{\vartheta}_n$ and $% \SK$. Furthermore, a \Rcmd{summary()} method is available to perform different tests (max $t$, $\chi^2$ and $F$-tests) and $p$-value adjustments, including those taking logical constraints into account \citep{Shaffer1986, Westfall1997}. In addition, the \Rcmd{confint()} method applied to objects of class \Rclass{glht} returns simultaneous confidence intervals and allows for a graphical representation of the results. The numerical accuracy of adjusted $p$-values and simultaneous confidence intervals implemented in % \Rpackage{multcomp} is continuously checked against results reported by \cite% {Westfall1999}. \section{Illustrations} \label{illustrations} \subsection{Genetic Components of Alcoholism} \label{alpha} Various studies have linked alcohol dependence phenotypes to chromosome 4. One candidate gene is \textit{NACP} (non-amyloid component of plaques), coding for alpha synuclein. \cite{Boenscheta2005} found longer alleles of \textit{NACP}-REP1 in alcohol-dependent patients compared with healthy controls and report that the allele lengths show some association with levels of expressed alpha synuclein mRNA in alcohol-dependent subjects (see Figure~\ref{alpha-box}). Allele length is measured as a sum score built from additive dinucleotide repeat length and categorized into three groups: short ($0-4$, $n = 24$), intermediate ($5-9$, $n = 58$), and long ($10-12$, $n = 15$). The data are available from package \Rpackage{coin}. Here, we are interested in comparing the distribution of the expression level of alpha synuclein mRNA in three groups of subjects defined by the allele length. \setkeys{Gin}{width=0.6\textwidth} \begin{figure}[t] \begin{center} <>= n <- table(alpha$alength) boxplot(elevel ~ alength, data = alpha, ylab = "Expression Level", xlab = "NACP-REP1 Allele Length", varwidth = TRUE) axis(3, at = 1:3, labels = paste("n = ", n)) rankif <- function(data) trafo(data, numeric_trafo = rank) @ \caption{\Robject{alpha} data: Distribution of levels of expressed alpha synuclein mRNA in three groups defined by the \textit{NACP}-REP1 allele lengths. \label{alpha-box}} \end{center} \end{figure} Thus, we fit a simple one-way ANOVA model to the data and define $\K$ such that $\K \theta$ contains all three group differences (Tukey's all-pairwise comparisons): <>= data("alpha", package = "coin") amod <- aov(elevel ~ alength, data = alpha) amod_glht <- glht(amod, linfct = mcp(alength = "Tukey")) amod_glht$linfct @ The \Robject{amod\_glht} object now contains information about the estimated linear function $\hat{\vartheta}_n$ and their covariance matrix $\SK$ which can be inspected via the \Rcmd{coef()} and \Rcmd{vcov()} methods: <>= coef(amod_glht) vcov(amod_glht) @ The \Rcmd{summary()} and \Rcmd{confint()} methods can be used to compute a summary statistic including adjusted $p$-values and simultaneous confidence intervals, respectively: <>= confint(amod_glht) summary(amod_glht) @ Because of the variance heterogeneity that can be observed in Figure~\ref{alpha-box}, one might be concerned with the validity of the above results stating that there is no difference between any combination of the three allele lengths. A sandwich estimator $\Sraw$ might be more appropriate in this situation, and the \Rarg{vcov} argument can be used to specify a function to compute some alternative covariance estimator $\Sraw$ as follows: <>= amod_glht_sw <- glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich) summary(amod_glht_sw) @ We used the \Rcmd{sandwich()} function from package \Rpackage{sandwich} \citep{Zeileis2004, Zeileis2006} which provides us with a heteroscedasticity-consistent estimator of the covariance matrix. This result is more in line with previously published findings for this study obtained from non-parametric test procedures such as the Kruskal-Wallis test. A comparison of the simultaneous confidence intervals calculated based on the ordinary and sandwich estimator is given in Figure~\ref{alpha-ci}. \setkeys{Gin}{width=0.95\textwidth} \begin{figure}[h] \begin{center} <>= layout(matrix(1:2, ncol = 2)) ci1 <- confint(glht(amod, linfct = mcp(alength = "Tukey"))) ci2 <- confint(glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich)) plot(ci1, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (ordinary ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) plot(ci2, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (sandwich ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) @ \caption{\Robject{alpha} data: Simultaneous confidence intervals based on the ordinary covariance matrix (left) and a sandwich estimator (right). \label{alpha-ci}} \end{center} \end{figure} %%<>= %%dev.off() %%@ \subsection{Prediction of Total Body Fat} \label{bodyfat} \citet{garcia2005} report on the development of predictive regression equations for body fat content by means of $p = 9$ common anthropometric measurements which were obtained for $n = 71$ healthy German women. In addition, the women's body composition was measured by Dual Energy X-Ray Absorptiometry (DXA). This reference method is very accurate in measuring body fat but finds little applicability in practical environments, mainly because of high costs and the methodological efforts needed. Therefore, a simple regression equation for predicting DXA measurements of body fat is of special interest for the practitioner. Backward-elimination was applied to select important variables from the available anthropometrical measurements and \citet{garcia2005} report a final linear model utilizing hip circumference, knee breadth and a compound covariate which is defined as the sum of log chin skinfold, log triceps skinfold and log subscapular skinfold. Here, we fit the saturated model to the data and use the max-$t$ test over all $t$-statistics to select important variables based on adjusted $p$-values. The linear model including all covariates and the classical unadjusted $p$-values are given by <>= data("bodyfat", package = "TH.data") summary(lmod <- lm(DEXfat ~ ., data = bodyfat)) @ The marix of linear functions $\K$ is basically the identity matrix, except for the intercept which is omitted. Once the matrix $\K$ has been defined, it can be used to set up the general linear hypotheses: <>= K <- cbind(0, diag(length(coef(lmod)) - 1)) rownames(K) <- names(coef(lmod))[-1] lmod_glht <- glht(lmod, linfct = K) @ Classically, one would perform an $F$-test to check if any of the regression coefficients is non-zero: <>= summary(lmod_glht, test = Ftest()) @ but the source of the deviation from the global null hypothesis can only be inspected by the corresponding max-$t$ test, i.e., via <>= summary(lmod_glht) @ Only two covariates, waist and hip circumference, seem to be important and caused the rejection of $H_0$. Alternatively, an MM-estimator \citep{Yohai1987} as implemented by \Rcmd{lmrob()} from package \Rpackage{lmrob} \citep{pkg:robustbase} can be used to fit a robust version of the above linear model, the results coincide rather nicely (note that the control arguments to \Rcmd{lmrob()} were changed in \Rpackage{multcomp} version 1.2-6 and thus the results have slightly changed): <>= summary(glht(lmrob(DEXfat ~ ., data = bodyfat, control = lmrob.control(setting = "KS2011")), linfct = K)) @ and the result reported above holds under very mild model assumptions. \subsection{Smoking and Alzheimer's Disease} \label{alzheimer} <>= total <- nrow(alzheimer) stopifnot(total == 538) male <- sum(alzheimer$gender == "Male") stopifnot(male == 200) female <- sum(alzheimer$gender == "Female") stopifnot(female == 338) disease <- table(alzheimer$disease) smoked <- sum(alzheimer$smoking != "None") atab <- xtabs(~ smoking + + disease + gender, data = alzheimer) ### there is a discrepancy between Table 1 (32% smokers of 117 women ### suffering from other diagnoses) and Table 4 (63% non-smokers). ### We used the data as given in Table 4. @ \cite{SalibHillier1997} report results of a case-control study on Alzheimer's disease and smoking behavior of $\Sexpr{disease["Alzheimer"]}$ female and male Alzheimer patients and $\Sexpr{disease[names(disease) != "Alzheimer"]}$ controls. The \Robject{alzheimer} data %% shown in Table~\ref{alzheimertab} have been re-constructed from Table~4 in \cite{SalibHillier1997}. %% and are depicted in Figure~\ref{alz-plot}. The authors conclude that `cigarette smoking is less frequent in men with Alzheimer's disease.' Originally, one was interested to assess whether there is any association between smoking and Alzheimer's (or other dementia) diseases. Here, we focus on how a potential association can be described \citep[see][for a non-parametric approach]{Hothorn:2006:AmStat}. First, we fit a logistic regression model including both main effects and an interaction effect of smoking and gender. The response is a binary variable giving the diagnosis of the patient (either suffering from Alzheimer's disease or other dementias): <>= data("alzheimer", package = "coin") y <- factor(alzheimer$disease == "Alzheimer", labels = c("other", "Alzheimer")) gmod <- glm(y ~ smoking * gender, data = alzheimer, family = binomial()) summary(gmod) @ The negative regression coefficient for heavy smoking males indicates that Alzheimer's disease might be less frequent in this group, but the model is still difficult to interpret based on the coefficients and corresponding $p$-values only. Therefore, confidence intervals on the probability scale for the different `risk groups' are interesting and can be computed as follows. For each combination of gender and smoking behavior, the probability of suffering from Alzheimer's disease can be estimated by computing the logit function of the linear predictor from model \Robject{gmod}. Using the \Rcmd{predict()} method for generalized linear models is a convenient way to compute these probability estimates. Alternatively, we can set up $\K$ such that $\left(1 + \exp(- \hat{\vartheta}_n)\right)^{-1}$ is the vector of estimated probabilities with simultaneous confidence intervals \begin{eqnarray*} \left(\left(1 + \exp\left(- \left(\hat{\vartheta}_n - q_\alpha \D_n^{1/2}\right)\right)\right)^{-1}, \left(1 + \exp\left(- \left(\hat{\vartheta}_n + q_\alpha \D_n^{1/2}\right)\right)\right)^{-1}\right). \end{eqnarray*} <>= a <- cbind(levels(alzheimer$smoking), "Female") b <- cbind(levels(alzheimer$smoking), "Male") d <- rbind(a, b) smk <- factor(d[,1], levels = levels(alzheimer$smoking)) gen <- factor(d[,2], levels = levels(alzheimer$gender)) d <- data.frame(smk, gen) ### colnames(d) <- c("smoking", "gender") colnames(d) <- c("s", "g") rownames(d) <- paste(d[,1], d[,2], sep = ":") K <- model.matrix(~ s * g, data = d) colnames(K)[1] <- "(Icpt)" attr(K, "assign") <- NULL attr(K, "contrasts") <- NULL @ For our model, $\K$ is given by the following matrix (essentially the design matrix of \Robject{gmod} for eight persons with different smoking behavior from both genders) \small <>= K @ \normalsize and can easily be used to compute the confidence intervals described above <>= gmod_ci <- confint(glht(gmod, linfct = K)) gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) plot(gmod_ci, xlab = "Probability of Developing Alzheimer", xlim = c(0, 1)) @ The simultaneous confidence intervals are depicted in Figure~\ref{alzheimer-plot}. Using this representation of the results, it is obvious that Alzheimer's disease is less frequent in heavy smoking men compared to all other configurations of the two covariates. \setkeys{Gin}{width=0.8\textwidth} \begin{figure}[h] \begin{center} <>= par(mai = par("mai") * c(1, 1.5, 1, 1)) gmod_ci <- confint(glht(gmod, linfct = K)) gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) plot(gmod_ci, xlab = "Probability of Developing Alzheimer", xlim = c(0, 1), main = "", ylim = c(0.5, 8.5)) @ \caption{\Robject{alzheimer} data: Simultaneous confidence intervals for the probability to suffer from Alzheimer's disease. \label{alzheimer-plot}} \end{center} \end{figure} \subsection{Acute Myeloid Leukemia Survival} \label{AML} The treatment of patients suffering from acute myeloid leukemia (AML) is determined by a tumor classification scheme taking the status of various cytogenetic aberrations into account. \cite{Bullingeretal2004} investigate an extended tumor classification scheme incorporating molecular subgroups of the disease obtained by gene expression profiling. The analyses reported here are based on clinical data only (thus omitting available gene expression data) published online at \url{http://www.ncbi.nlm.nih.gov/geo}, accession number GSE425. The overall survival time and censoring indicator as well as the clinical variables age, sex, lactic dehydrogenase level (LDH), white blood cell count (WBC), and treatment group are taken from Supplementary Table 1 in \cite{Bullingeretal2004}. In addition, this table provides two molecular markers, the fms-like tyrosine kinase 3 (FLT3) and the mixed-lineage leukemia (MLL) gene, as well as cytogenetic information helpful to define a risk score (`low': karyotype t(8;21), t(15;17) and inv(16); `intermediate': normal karyotype and t(9;11); and `high': all other forms). One interesting question might be the usefulness of this risk score. Here, we fit a Weibull survival model to the data including all above mentioned covariates. %% The published paper has: %% as well %% as their interactions with the patient's gender. %% but this is not what the code does (probably a copy and paste error) %% spotted by David Winsemius Tukey's all-pairwise comparisons highlight that there seems to be a difference between `high' scores and both `low' and `intermediate' ones but the latter two aren't distinguishable: <>= smod <- survreg(Surv(time, event) ~ Sex + Age + WBC + LDH + FLT3 + risk, data = clinical) summary(glht(smod, linfct = mcp(risk = "Tukey"))) @ Again, a sandwich estimator of the covariance matrix $\Sraw$ can be plugged-in but the results stay very much the same in this case. %%<>= %%dev.off() %%@ \subsection{Forest Regeneration} \label{forest} In most parts of Germany, the natural or artificial regeneration of forests is difficult due to a high browsing intensity. Young trees suffer from browsing damage, mostly by roe and red deer. In order to estimate the browsing intensity for several tree species, the Bavarian State Ministry of Agriculture and Forestry conducts a survey every three years. Based on the estimated percentage of damaged trees, suggestions for the implementation or modification of deer management plans are made. The survey takes place in all $756$ game management districts (`Hegegemeinschaften') in Bavaria. Here, we focus on the 2006 data of the game management district number 513 `Unterer Aischgrund' (located in Frankonia between Erlangen and H\"ochstadt). The data of \Sexpr{nrow(trees513)} trees include the species and a binary variable indicating whether or not the tree suffers from damage caused by deer browsing. We fit a mixed logistic regression model \citep[using package \Rpackage{lme4},][]{Rnews:Bates:2005,pkg:lme4} without intercept and with random effects accounting for the spatial variation of the trees. For each plot nested within a set of five plots orientated on a 100m transect (the location of the transect is determined by a pre-defined equally spaced lattice of the area under test), a random intercept is included in the model. We are interested in probability estimates and confidence intervals for each tree species. Each of the six fixed parameters of the model corresponds to one species, therefore, $\K = \text{diag}(6)$ is the linear function we are interested in: <>= trees513 <- subset(trees513, !species %in% c("fir", "softwood (other)")) trees513$species <- trees513$species[,drop = TRUE] @ <>= mmod <- glmer(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/generalsiminf.R0000644000176200001440000002120115075167045016610 0ustar liggesusers### R code from vignette source 'generalsiminf.Rnw' ################################################### ### code chunk number 1: setup ################################################### set.seed(290875) options(prompt = "R> ") options(SweaveHooks = list(mai2 = function() par(mai = par("mai") * c(1, 2, 1, 1)), mai3 = function() par(mai = par("mai") * c(1, 3, 1, 1)), mai4 = function() par(mai = par("mai") * c(1, 2.1, 1, 0.5)), cex = function() par(cex.lab = 1.3, cex.axis = 1.3))) library("multcomp") library("survival") library("sandwich") library("robustbase") library("TH.data") data("alpha", package = "coin") data("bodyfat", package = "TH.data") data("alzheimer", package = "coin") load(file.path(path.package(package = "TH.data"), "rda", "AML_Bullinger.rda")) ################################################### ### code chunk number 2: setup-2 ################################################### risk <- rep(0, nrow(clinical)) rlev <- levels(clinical[, "Cytogenetic.group"]) risk[clinical[, "Cytogenetic.group"] %in% rlev[c(7,8,4)]] <- "low" risk[clinical[, "Cytogenetic.group"] %in% rlev[c(5, 9)]] <- "intermediate" risk[clinical[, "Cytogenetic.group"] %in% rlev[-c(4,5, 7,8,9)]] <- "high" risk <- as.factor(risk) names(clinical)[6] <- "FLT3" library("lme4") data("trees513", package = "multcomp") ################################################### ### code chunk number 3: alpha-data-figure ################################################### getOption("SweaveHooks")[["cex"]]() n <- table(alpha$alength) boxplot(elevel ~ alength, data = alpha, ylab = "Expression Level", xlab = "NACP-REP1 Allele Length", varwidth = TRUE) axis(3, at = 1:3, labels = paste("n = ", n)) rankif <- function(data) trafo(data, numeric_trafo = rank) ################################################### ### code chunk number 4: alpha-aov-tukey ################################################### data("alpha", package = "coin") amod <- aov(elevel ~ alength, data = alpha) amod_glht <- glht(amod, linfct = mcp(alength = "Tukey")) amod_glht$linfct ################################################### ### code chunk number 5: alpha-aov-coefvcov ################################################### coef(amod_glht) vcov(amod_glht) ################################################### ### code chunk number 6: alpha-aov-results ################################################### confint(amod_glht) summary(amod_glht) ################################################### ### code chunk number 7: alpha-aov-tukey-sandwich ################################################### amod_glht_sw <- glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich) summary(amod_glht_sw) ################################################### ### code chunk number 8: alpha-confint-plot ################################################### getOption("SweaveHooks")[["mai4"]]() layout(matrix(1:2, ncol = 2)) ci1 <- confint(glht(amod, linfct = mcp(alength = "Tukey"))) ci2 <- confint(glht(amod, linfct = mcp(alength = "Tukey"), vcov = sandwich)) plot(ci1, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (ordinary ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) plot(ci2, xlim = c(-0.6, 2.6), main = expression(paste("Tukey (sandwich ", bold(S)[n], ")")), xlab = "Difference", ylim = c(0.5, 3.5)) ################################################### ### code chunk number 9: bodyfat-lm-fit ################################################### data("bodyfat", package = "TH.data") summary(lmod <- lm(DEXfat ~ ., data = bodyfat)) ################################################### ### code chunk number 10: bodyfat-lm-maxtest ################################################### K <- cbind(0, diag(length(coef(lmod)) - 1)) rownames(K) <- names(coef(lmod))[-1] lmod_glht <- glht(lmod, linfct = K) ################################################### ### code chunk number 11: bodyfat-lm-Ftest ################################################### summary(lmod_glht, test = Ftest()) ################################################### ### code chunk number 12: bodyfat-lm-maxtest ################################################### summary(lmod_glht) ################################################### ### code chunk number 13: bodyfat-robust ################################################### summary(glht(lmrob(DEXfat ~ ., data = bodyfat, control = lmrob.control(setting = "KS2011")), linfct = K)) ################################################### ### code chunk number 14: alzheimer-demographics ################################################### total <- nrow(alzheimer) stopifnot(total == 538) male <- sum(alzheimer$gender == "Male") stopifnot(male == 200) female <- sum(alzheimer$gender == "Female") stopifnot(female == 338) disease <- table(alzheimer$disease) smoked <- sum(alzheimer$smoking != "None") atab <- xtabs(~ smoking + + disease + gender, data = alzheimer) ### there is a discrepancy between Table 1 (32% smokers of 117 women ### suffering from other diagnoses) and Table 4 (63% non-smokers). ### We used the data as given in Table 4. ################################################### ### code chunk number 15: alzheimer-glm ################################################### data("alzheimer", package = "coin") y <- factor(alzheimer$disease == "Alzheimer", labels = c("other", "Alzheimer")) gmod <- glm(y ~ smoking * gender, data = alzheimer, family = binomial()) summary(gmod) ################################################### ### code chunk number 16: alzheimer-K ################################################### a <- cbind(levels(alzheimer$smoking), "Female") b <- cbind(levels(alzheimer$smoking), "Male") d <- rbind(a, b) smk <- factor(d[,1], levels = levels(alzheimer$smoking)) gen <- factor(d[,2], levels = levels(alzheimer$gender)) d <- data.frame(smk, gen) ### colnames(d) <- c("smoking", "gender") colnames(d) <- c("s", "g") rownames(d) <- paste(d[,1], d[,2], sep = ":") K <- model.matrix(~ s * g, data = d) colnames(K)[1] <- "(Icpt)" attr(K, "assign") <- NULL attr(K, "contrasts") <- NULL ################################################### ### code chunk number 17: alzheimer-K ################################################### K ################################################### ### code chunk number 18: alzheimer-probci (eval = FALSE) ################################################### ## gmod_ci <- confint(glht(gmod, linfct = K)) ## gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) ## plot(gmod_ci, xlab = "Probability of Developing Alzheimer", ## xlim = c(0, 1)) ################################################### ### code chunk number 19: alzheimer-plot ################################################### par(mai = par("mai") * c(1, 1.5, 1, 1)) gmod_ci <- confint(glht(gmod, linfct = K)) gmod_ci$confint <- apply(gmod_ci$confint, 2, binomial()$linkinv) plot(gmod_ci, xlab = "Probability of Developing Alzheimer", xlim = c(0, 1), main = "", ylim = c(0.5, 8.5)) ################################################### ### code chunk number 20: bullinger-survreg ################################################### smod <- survreg(Surv(time, event) ~ Sex + Age + WBC + LDH + FLT3 + risk, data = clinical) summary(glht(smod, linfct = mcp(risk = "Tukey"))) ################################################### ### code chunk number 21: trees-setup ################################################### trees513 <- subset(trees513, !species %in% c("fir", "softwood (other)")) trees513$species <- trees513$species[,drop = TRUE] ################################################### ### code chunk number 22: trees-lmer ################################################### mmod <- glmer(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/NEWS0000644000176200001440000003246615075164776013623 0ustar liggesusers Changes in 1.4-29 (2025-10-19) o Partial argument matches Changes in 1.4-28 (2025-01-09) o Update Suggests Changes in 1.4-27 (2024-11-05) o Update demos Changes in 1.4-26 (2024-07-18) o Rd link problem Changes in 1.4-25 (2023-06-20) o pdfTeX 3.141592653-2.6-1.40.25 (TeX Live 2023) installed as described on https://www.tug.org/texlive/quickinstall.html on fedora still had problems, removing \usepackage{caption} solved the problem. Changes in 1.4-24 (2023-06-13) o texlive on fedora has problems with citet inside captions. Changes in 1.4-23 (2023-03-09) o S3 methods registration Changes in 1.4-22 (2023-02-09) o Suggests: glmmTMB o various cld() fixes Changes in 1.4-20 (2022-08-05) o add nlme::gls support (feature request by Adrian Olszewski) o (re)add gamlss support Changes in 1.4-19 (2022-04-25) o proper use of inherits in user-contributed code Changes in 1.4-18 (2022-01-04) o add support for fixest objects (donated by Grant McDermott) Changes in 1.4-17 (2021-04-29) o add library("sandwich") to ?mmm o fix typo in print.summary.glht (both issues spotted by Sebastian Meyer) Changes in 1.4-16 (2021-02-08) o Fix LaTeX problem o add support for glmmTMB objects Changes in 1.4-15 (2020-11-15) o allow char expressions involving "(Intercept)" in linfct Changes in 1.4-14 (2020-09-23) o update demos Changes in 1.4-13 (2020-04-08) o call glmer directly in vignette Changes in 1.4-12 (2020-01-07) o update reference output Changes in 1.4-11 (2019-12-09) o update reference output Changes in 1.4-10 (2019-03-04) o new example using tram::Colr() Changes in 1.4-9 (2018-08-24) o use levels as names for "GrandMean" contrasts Changes in 1.4-8 (2017-11-08) o use vcov(x, complete = FALSE) to make R-devel happy again. Changes in 1.4-7 (2017-09-05) o Don't add attributes to symbols when parsing character representations of contrasts. Many thanks to Tomas Kalibera for the patch. Changes in 1.4-6 (2016-07-14) o allow for strata and cluster in coxph and survreg models. o use \code{model.matrix} and \code{model.frame} from survival for \code{coxph}, \code{survreg} and also \code{coxme} objects now these come with contrasts. o fix another problem with interaction terms (signed interactions -x2:x3) Changes in 1.4-5 (2016-05-04) o fix bug in linfct specified as a character (aka expression). Coefficients of main effects may have been incorrect in the presence of interaction terms as reported by Melissa Chester Key Changes in 1.4-4 (2016-01-17) o make cftest() a little more flexible with parm and test arguments Changes in 1.4-3 (2016-01-02) o update Rout.save to mvtnorm 1.0-5 Changes in 1.4-2 (2016-01-19) o update Rout.save to mvtnorm 1.0-4 Changes in 1.4-1 (2015-07-21) o new qmv{t,norm} algorithm in mvtnorm 1.0-3 leads to slightly different quantiles and thus results for confidence intervals; update output Changes in 1.4-0 (2015-03-05) o much more complex functions of parameters can be specified now thanks to Susan Scheibe now listed as a contributor. Changes in 1.3-9 (2015-02-18) o allow longer names of contrasts (patch by Susan Scheibe ) Changes in 1.3-8 (2014-12-01) o report pmv{t,norm}() warnings (spotted by Christian Ritz) Changes in 1.3-7 (2014-10-01) o bodyfat is in TH.data and not mboost anymore Changes in 1.3-6 (2014-08-18) o make sure to use fixef from lme4 Changes in 1.3-5 (2014-07-23) o allow coefficients and covariance matrices to be fed into modelparm via coef. and vcov. directly Changes in 1.3-4 (2014-07-09) o suggest ISwR (for demo()) o NEWS in correct NEWs format Changes in 1.3-3 (2014-04-22) o do not link to non-suggested packages Changes in 1.3-2 (2014-02-12) o import TH.data, update Rout.save Changes in 1.3-1 (2013-11-01) o remove multmod Changes in 1.3-0 (2013-07-13) o new glht method for multiple marginal models and corresponding linear functions implements Pipper, Ritz, Bisgaard (2012), see ?mmm Changes in 1.2-21 (2013-09-20) o fix broken vignette PDF files o remove all Rout.save files; these can be downloaded from R-forge.R-project.org now Changes in 1.2-20 (2013-09-02) o make sure to use par(no.readonly = TRUE) TH.data Changes in 1.2-19 (2013-08-06) o fix broken vignette PDFs Changes in 1.2-18 (2013-05-17) o improve plotting one-sided confidence intervals Changes in 1.2-17 (2013-05-15) o fix typo in DESCRIPTION file o allow for levels with "-" and other special symbols for cld() o fix cld(..., decreasing = TRUE) problem (thanks to Luciano Selzer) Changes in 1.2-15 (2013-01-12) o fix DESCRIPTION file entries Changes in 1.2-14 (2012-10-11) o catch download errors in vignette Changes in 1.2-13 (2012-09-10) o interaction terms can now be part of linear function Changes in 1.2-12 (2012-05-09) o model.matrix.polr returns intercept which needs to be removed o handle merMod objects (package lme4 aka lme4Eigen) Changes in 1.2-10 (2012-02-17) o handle polr objects in package, not only in vignette o move vignettes Changes in 1.2-9 (2012-01-11) o new coxme methods Changes in 1.2-8 (2011-10-26) o new argument `decreasing' for cld(), code donated by Luciano Selzer Changes in 1.2-7 (2011-07-23) o new examples on 2-way ANOVA models, potentially with interactions, in vignette `multcomp-examples' Changes in 1.2-6 (2011-05-02) o `manual' na.omit before stepAIC is called in chfls1.Rnw vignette o use lmrob.control(setting = "KS2011") in generalsiminf.Rnw Changes in 1.2-5 (2011-01-10) o missing comment in multcomp_VA.R Changes in 1.2-4 (2010-11-03) o fix problem with plot.glht (lwd = 0 does not make sense) Changes in 1.2-3 (2010-09-24) o new example on frailty models, see ?cml Changes in 1.2-2 (2010-09-15) o fix dependencies, really o add book to DESCRIPTION file Changes in 1.2-1 (2010-09-13) o fix dependencies Changes in 1.2-0 (2010-08-11) o demos for "Multiple Comparisons Using R" by Bretz, Hothorn & Westfall (2010) o example on simultaneous tests against one- and two-sided alternatives in ?glht. Changes in 1.1-7 (2010-05-18) o mix of alternatives is currently not supported and also mcp() gives and error now. Changes in 1.1-6 (2010-02-25) o quantiles for confidence intervals used `tail = upper.tail' for `alternative = less' and `tail = lower.tail' for `alternative = greater'. This has been changed. o prepare for multcomp book: - SAS code in inst/MCMT - new demos o source code for simulations with unbalanced heteroscedstic designs added Changes in 1.1-5 (2010-02-11) o fix small problems in `cld' spotted by Peter B. Mandeville Changes in 1.1-4 (2010-01-21) o more example data sets Changes in 1.1-3 (2009-12-21) o bugfix for models without intercept and more than one factor o print calls when available only o support for coxme objects o allow xlab and ylab arguments for plot.cld o systolic blood pressure data set added Changes in 1.1-2 (2009-09-10) o mcp may average over interactions and covariates (Experimental!) o ylim argument to plot o update to survival 2.35-7 Changes in 1.1-1 (2009-07-18) o better handling of model.frames in `cld' Changes in 1.1-0 (2009-06-08) o new compact letter displays o force binary mode when downloading SPSS data files Changes in 1.0-8 (2009-05-26)) o new vignette containing supplementary material for a letter on Pollet \& Nettle (2009, Evolution and Human Behavior) o references updated Changes in 1.0-7 (2009-02-11) o new default for missing linfct: inference over all parameters as given by coef(model) o new function cftest, similar to lmtest:::coeftest Changes in 1.0-6 (2009-01-21) o better names for p-values (feature request by Achim Zeileis) Changes in 1.0-5 (2009-01-13) o update vignette Changes in 1.0-4 (2009-01-07) o fix Rd problems Changes in 1.0-3 (2008-10-15) o use isSymmetric(vcov, tol = sqrt(.Machine$double.eps) to check for symmetry of covariance matrices in `parm' (suggested by Fritz) o better error messages suggested by Rich Changes in 1.0-2 (2008-07-05) o use new model.matrix / model.frame methods for class mer in lme4 (>= 0.999375-16) o make sure more than 2 groups are present in contrMat() o check if `model' is an S4 object before trying to extract its `call' slot o better warning when df.residual fails Changes in 1.0-0 (2008-04-01) o unify both vignettes o mcp() doesn't try to take care of interaction terms anymore o new `parm' function for specifying model parameters estimated elsewhere o improve print method for confidence intervals o new adjustment method `free' (for free combinations) Changes in 0.993-2 (2008-03-05)) o make sure names are printed correctly when nrow(K) = 1 o interaction terms are now correctly handled when a symbolic descripton of the hypotheses is supplied, thanks to Antonio Fabio Di Narzo for spotting. Changes in 0.993-1 (2008-03-05) o new vignette `Simultaneous Inference in General Parametric Models' o warn if ... arguments are ignored o levels in trees513 data slightly changed. o remove deprecated functions simint and simtest (the files are still available from multcomp/inst/deprecated) o better error message when factors specified in mcp() aren't found in model Changes in 0.992-8 (2007-12-20) o add model.frame and model.matrix methods for class `lme' (feature request by Antonio Rausell ) o new data set `trees513' o new contrasts `UmbrellaWilliams' and `GrandMean' (thanks to Daniel Gerhard ) Changes in 0.992-6 (2007-10-18)) o add support for lme4::(g)lmer2 objects (thanks to Manuel Eugster) o coef. and vcov. didn't always pass through, spotted by John Deke Changes in 0.992-5 (2007-10-08) o remove non_function entries in Rd files Changes in 0.992-4 (2007-07-23) o update to mvtnorm 0.8-0 o better support for `mer', `lmer' and `glmer' objects (package `lme4') Changes in 0.992-2 (2007-07-07) o add support for `lme' objects (feature request by John Wilkinson and Dieter Menne ) Changes in 0.992-1 (2007-06-21) o fix LaTeX problem in vignette (spotted by Brian D. Ripley) Changes in 0.991-9 (2007-03-23) o fix some minor problems spotted for plotting or printing of confidence intervals (thanks for Rich Heiberger and Ludwig Hothorn) Changes in 0.991-8 (2007-01-22) o make sure `type' is available o catch errors with `aovlist' objects o print for confint method indicates if confidence intervals are adjusted or univariate Changes in 0.991-7 (2006-12-19) o try to deal with non-estimable coefficients in `model': if the correspondings columns of `linfct' are zero anyway, we silently proceed. If not, we stop and ask for a correctly specified model. o try to detect interactions with numeric covariates. We need to choose a specific value here but it seems hard to add something appropriate to the user interface (I don't want to touch `mcp'). For the time being, we fire a warning and the user can modify `linfct' manually. o add mcp( = "Means"), contribution by Richard M. Heiberger o add Rich to DESCRIPTION file Changes in 0.991-5 (2006-12-10) o plot.confint allows for specification of xlim, xlab and main (patch by Rich Heiberger) Changes in 0.991-4 (2006-12-07) o Depends: stats o confint(..., calpha = x) can be used to specify critical values directly (with x being either a function or a scalar) Changes in 0.991-3 (2006-11-30) Implement feature requests by Rich Heiberger : o glht.mcp adds a `focus' element to the returned object containing the names of the factors under test o plot.glht calls plot.confint.glht o documentation updates o fixed three minor bugs Changes in 0.991-2 (2006-10-27) o mcp(fact = K) with K = contrMat(...) didn't work spotted by Yves Brostaux multcomp/inst/multcomp_coxme.R0000644000176200001440000004034214172227611016253 0ustar liggesuserslibrary("coxme") library("multcomp") ####################################################### ### Source code for simulations presented in ### Dunnett-type inference in the frailty Cox model ### with covariates ### by E. Herberich and T. Hothorn ### Statistics in Medicine 2010 ####################################################### ############################################### # Simulation setup for balanced design ############################################### ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- rep(gl(3, n/(3*ncenter)), ncenter) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- gl(ncenter, n/ncenter) } ##################################################################################### ### Data generating process in the frailty Cox model with Weibull distributed ### survival and normally distributed random effect ### n: total number of observations ### beta: vector of effects of treatments and other covariates ### lambda, nu: scale and shape parameter of the Weibull distribution ### mu: parameter of the exponential distrubution of the cencoring times ### sigma: variance of random effects ### ncenter: number of centers ##################################################################################### dgp_cox_weibull <- function(n, beta, lambda, nu, mu, sigma, ncenter){ X <- data.frame(dgpX(n, ncenter)) Xm <- model.matrix(~ -1 + X1 + X2 + X3 + X4, data=X) stopifnot(ncol(Xm) == length(beta)) fixed <- beta %*% t(Xm) b <- rnorm(ncenter,0,sigma) Z <- dgpZ(n, ncenter) Zm <- model.matrix(~ -1 + Z) random <- b %*% t(Zm) scale <- lambda * exp(fixed + random) T <- (-log(runif(n, min=0, max=1))/scale)^(1/nu) # Weibull distributed survival C <- rexp(n, mu) # exponentially distributed cencoring times Y <- pmin(T,C) # observed time status <- (T<=C) # TRUE for events X$Y <- as.vector(Y) X$status <- as.vector(status) X$center <- Z return(X) } ##################################################################################### ### Fit of a frailty Cox model ##################################################################################### fit_coxme <- function(data) coxme(Surv(Y, status) ~ X1 + X2 + X3 + X4 + (1|center), data=data) ################################################################################# ### Simulations in a frailty Cox model ### Estimation of the coverage probability of simultaneous confidence intervals ### for many-to-one differences of treatment effects ### nsim: number of simulated data sets ### dgp: data generating proccess ### fit: model fit of simulated data ### other parameters: see above ################################################################################# sim <- function(nsim, dgp, fit, beta, n, lambda, nu, mu, sigma, ncenter){ coverage <- rep(NA, nsim) contrast1 <- beta[2] - beta[1] contrast2 <- beta[3] - beta[1] for (i in 1:nsim){ #print(i) x <- dgp(n, beta, lambda, nu, mu, sigma, ncenter) mod <- 0 try(mod <- fit(x), silent = TRUE) sci <- NA sci <- try(confint(glht(mod, linfct = mcp(X1 = "Dunnett"), alternative = "less")), silent = TRUE) try(if(contrast1 < sci$confint[1,3] & contrast2 < sci$confint[2,3]){coverage[i] <- 1} else{coverage[i] <- 0}, silent = TRUE) } coverage_probability <- mean(coverage, na.rm = TRUE) return(coverage_probability) } b2 <- seq(-2,0,0.05) b3 <- seq(-2,0,0.05) design <- expand.grid(b2, b3) names(design) <- c("b2", "b3") nsim <- 10000 lambda <- 0.5 nu <- 2 mu <- 0.1 sigma <- 1 ncenter <- 5 ##################################################################################### ### Balanced design with 105 observations ##################################################################################### n <- 105 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme_105.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") save(results, file = "coxme_105.Rda") ##################################################################################### ### Balanced design with 300 observations ##################################################################################### n <- 300 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme_300.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") save(results, file = "coxme_300.Rda") ######################################################################################## # Simulation setup for an unbalanced design with less observations in the control group ######################################################################################## ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(1:3, n/3)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- factor(rep(1:ncenter, rep(c(3,6,9,12,15)*rep(n/135,ncenter)*3))) } ##################################################################################### ### Unbalanced design with 135 observations ##################################################################################### n <- 135 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme1_135.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") save(results, file = "coxme1_135.Rda") ##################################################################################### ### Unbalanced design with 405 observations ##################################################################################### n <- 405 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter, nther) save(results, file = "coxme1_405.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") save(results, file = "coxme1_405.Rda") ######################################################################################## # Simulation setup for an unbalanced design with more observations in the control group ######################################################################################## ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(c(rep(1,5),rep(2,10),rep(3,10)), ncenter)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- gl(ncenter, n/ncenter) } ##################################################################################### ### Unbalanced design with 125 observations ##################################################################################### n <- 125 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme2_125.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme2_125.Rda") ##################################################################################### ### Unbalanced design with 375 observations ##################################################################################### n <- 375 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme2_375.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme2_375.Rda") ######################################################################################## # Simulation setup for an unbalanced design with number of observations differing # between centers ######################################################################################## ##################################################################################### ### Unbalanced design with 100 observations ##################################################################################### ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(c(rep(1,10),rep(2,5),rep(3,5)), ncenter)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- gl(ncenter, n/ncenter) } n <- 100 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme3_100.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme3_100.Rda") ##################################################################################### ### Unbalanced design with 300 observations ##################################################################################### ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(c(rep(1,30),rep(2,15),rep(3,15)), ncenter)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(n, ncenter){ centr <- gl(ncenter, n/ncenter) } n <- 300 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme3_300.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme3_300.Rda") ######################################################################################## # Simulation setup for an unbalanced design with many centers and two observations # in each centers ######################################################################################## ##################################################################################### ### Data generating process of the covariates X and cluster centr ### n: total number of observations ### ncenter: number of centers ##################################################################################### dgpX <- function(n, ncenter){ x1 <- factor(rep(1:3, n/3)) x2 <- sample(gl(2, n / 2), replace=FALSE) x3 <- runif(n, 18, 65) x4 <- sample(gl(3, n / 3), replace=FALSE) X <- data.frame(X1 = x1, X2 = x2, X3 = x3, X4 = x4) return(X) } dgpZ <- function(ncenter){ centr <- sample(factor(rep(1:ncenter, 2))) } ##################################################################################### ### Data generating process in the frailty Cox model with Weibull distributed ### survival and normally distributed random effect ### n: total number of observations ### beta: vector of effects of treatments and other covariates ### lambda, nu: scale and shape parameter of the Weibull distribution ### mu: parameter of the exponential distrubution of the cencoring times ### sigma: variance of random effects ### ncenter: number of centers ##################################################################################### dgp_cox_weibull <- function(n, beta, lambda, nu, mu, sigma, ncenter){ X <- data.frame(dgpX(n, ncenter)) Xm <- model.matrix(~ -1 + X1 + X2 + X3 + X4, data=X) stopifnot(ncol(Xm) == length(beta)) fixed <- beta %*% t(Xm) b <- rnorm(ncenter,0,sigma) Z <- dgpZ(ncenter) Zm <- model.matrix(~ -1 + Z) random <- b %*% t(Zm) scale <- lambda * exp(fixed + random) T <- (-log(runif(n, min=0, max=1))/scale)^(1/nu) C <- sample(c(rep(0, 0.2*n), rep(10000,0.8*n))) # 20% Censoring Y <- pmin(T,C) status <- (T<=C) X$Y <- as.vector(Y) X$status <- as.vector(status) X$center <- Z return(X) } ##################################################################################### ### Unbalanced design with 60 centers ##################################################################################### ncenter <- 60 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme4_120.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme4_120.Rda") ##################################################################################### ### Unbalanced design with 150 centers ##################################################################################### ncenter <- 150 results <- matrix(0, nrow=nrow(design), ncol=4, byrow=T) results[,1] <- rep(n, nrow(design)) set.seed(1803) for (j in 1:nrow(design)) { print(j) beta <- c(0,as.numeric(design[j,]),0.2,0.05,-0.3,-0.1) results[j,2:3] <- as.numeric(design[j,]) results[j,4] <- sim(nsim, dgp_cox_weibull, fit_coxme, beta, n, lambda, nu, mu, sigma, ncenter) save(results, file = "coxme4_300.Rda") } colnames(results)= c("n", "b2", "b3", "cov_prob") results save(results, file = "coxme4_300.Rda") multcomp/build/0000755000176200001440000000000015075167045013223 5ustar liggesusersmultcomp/build/vignette.rds0000644000176200001440000000055115075167045015563 0ustar liggesusers‹uQMO1, BbÔð^8=¸A=y$!¨1ârðà¥î¾…&ÝvÓí Üüå`»´ˆ¶íL;ïͼ}ïBê¤ÔH½aŽžYZæ;ßñ¤cön¼Hyq¾‰¥c.æ(PQ^°Œ‰´º8”,¢2Ï9f(4Uk˜PŠQ©TЂÂü¢¼¤šI2½@Èd‚ äWt®dŒI©˜€©ä5|\Â+jͮë¾ëw±¬äš ”eÏ"E…"®”;«0¥Šf¨‹ab;ÿ¤Ì“ôï”öâPrâãðÙÑX Õ«žïd{ÖZiúÉÑ¡ædE¾  Ë,w¸mæ…l.<œ=… ÕÔÕ#GõÉïÞ´\ÍÉa‚û¸-ßvÌö‚Ó{Ð˜ŽÆîXóÁÚ#ÌQ$…·ù‚ë¥T6ê(¹ }³SëìÛ,Ûívsì(æ´ðŽ<ÙµÑÂÔþ%ƒ6?œ‘U›multcomp/man/0000755000176200001440000000000015075167030012671 5ustar liggesusersmultcomp/man/adevent.Rd0000644000176200001440000000525514172227611014614 0ustar liggesusers\name{adevent} \alias{adevent} \docType{data} \title{ Adverse Events Data } \description{ Indicators of 28 adverse events in a two-arm clinical trial. } \usage{data(adevent)} \format{ A data frame with 160 observations on the following 29 variables. \describe{ \item{\code{E1}}{a factor with levels \code{no event} \code{event}} \item{\code{E2}}{a factor with levels \code{no event} \code{event}} \item{\code{E3}}{a factor with levels \code{no event} \code{event}} \item{\code{E4}}{a factor with levels \code{no event} \code{event}} \item{\code{E5}}{a factor with levels \code{no event} \code{event}} \item{\code{E6}}{a factor with levels \code{no event} \code{event}} \item{\code{E7}}{a factor with levels \code{no event} \code{event}} \item{\code{E8}}{a factor with levels \code{no event} \code{event}} \item{\code{E9}}{a factor with levels \code{no event} \code{event}} \item{\code{E10}}{a factor with levels \code{no event} \code{event}} \item{\code{E11}}{a factor with levels \code{no event} \code{event}} \item{\code{E12}}{a factor with levels \code{no event} \code{event}} \item{\code{E13}}{a factor with levels \code{no event} \code{event}} \item{\code{E14}}{a factor with levels \code{no event} \code{event}} \item{\code{E15}}{a factor with levels \code{no event} \code{event}} \item{\code{E16}}{a factor with levels \code{no event} \code{event}} \item{\code{E17}}{a factor with levels \code{no event} \code{event}} \item{\code{E18}}{a factor with levels \code{no event} \code{event}} \item{\code{E19}}{a factor with levels \code{no event} \code{event}} \item{\code{E20}}{a factor with levels \code{no event} \code{event}} \item{\code{E21}}{a factor with levels \code{no event} \code{event}} \item{\code{E22}}{a factor with levels \code{no event} \code{event}} \item{\code{E23}}{a factor with levels \code{no event} \code{event}} \item{\code{E24}}{a factor with levels \code{no event} \code{event}} \item{\code{E25}}{a factor with levels \code{no event} \code{event}} \item{\code{E26}}{a factor with levels \code{no event} \code{event}} \item{\code{E27}}{a factor with levels \code{no event} \code{event}} \item{\code{E28}}{a factor with levels \code{no event} \code{event}} \item{\code{group}}{group indicator.} } } \details{ The data is provided by Westfall et al. (1999, p. 242) and contains binary indicators of 28 adverse events (\code{E1},..., \code{E28}) for two arms (\code{group}). } \source{ P. H. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger, Y. Hochberg (1999). \emph{Multiple Comparisons and Multiple Tests Using the SAS System}. Cary, NC: SAS Institute Inc. } \keyword{datasets} multcomp/man/modelparm.Rd0000644000176200001440000000404214172227611015137 0ustar liggesusers\name{modelparm} \alias{modelparm} \title{ Generic Accessor Function for Model Parameters } \description{ Extract model parameters and their covariance matrix as well as degrees of freedom (if available) from a fitted model. } \usage{ modelparm(model, coef., vcov., df, ...) } \arguments{ \item{model}{a fitted model, for example an object returned by \code{\link{lm}}, \code{\link{glm}}, \code{\link{aov}}, \code{\link[survival]{survreg}}, \code{\link[fixest]{fixest}}, or \code{\link[lme4]{lmer}} etc. } \item{coef.}{ an accessor function for the model parameters. Alternatively, the vector of coefficients.} \item{vcov.}{ an accessor function for the covariance matrix of the model parameters. Alternatively, the covariance matrix directly.} \item{df}{ an optional specification of the degrees of freedom to be used in subsequent computations. } \item{\dots}{ additional arguments, currently ignored. } } \details{ One can't expect \code{\link{coef}} and \code{\link{vcov}} methods for arbitrary models to return a vector of \eqn{p} fixed effects model parameters (\code{coef}) and corresponding \eqn{p \times p} covariance matrix (\code{vcov}). The \code{coef.} and \code{vcov.} arguments can be used to define modified \code{coef} or \code{vcov} methods for a specific model. Methods for \code{\link[lme4]{lmer}}, \code{\link[fixest]{fixest}}, and \code{\link[survival]{survreg}} objects are available (internally). For objects inheriting from class \code{\link{lm}} the degrees of freedom are determined from \code{model} and the corresponding multivariate t distribution is used by all methods to \code{\link{glht}} objects. By default, the asymptotic multivariate normal distribution is used in all other cases unless \code{df} is specified by the user. } \value{ An object of class \code{modelparm} with elements \item{coef}{model parameters} \item{vcov}{covariance matrix of model parameters} \item{df}{degrees of freedom} } \keyword{misc} multcomp/man/cld.Rd0000644000176200001440000000740514172227611013727 0ustar liggesusers\name{cld} \alias{cld} \alias{cld.glht} \alias{cld.summary.glht} \alias{cld.confint.glht} \title{Set up a compact letter display of all pair-wise comparisons} \description{ Extract information from \code{glht}, \code{summary.glht} or \code{confint.glht} objects which is required to create and plot compact letter displays of all pair-wise comparisons. } \usage{ \method{cld}{summary.glht}(object, level = 0.05, decreasing = FALSE, ...) \method{cld}{glht}(object, level = 0.05, decreasing = FALSE, ...) \method{cld}{confint.glht}(object, decreasing = FALSE, ...) } \arguments{ \item{object}{ An object of class \code{glht}, \code{summary.glht} or \code{confint.glht}. } \item{level}{ Significance-level to be used to term a specific pair-wise comparison significant. } \item{decreasing}{ logical. Should the order of the letters be increasing or decreasing? } \item{...}{additional arguments.} } \details{ This function extracts all the information from \code{glht}, \code{summary.glht} or \code{confint.glht} objects that is required to create a compact letter display of all pair-wise comparisons. In case the contrast matrix is not of type \code{"Tukey"}, an error is issued. In case of \code{confint.glht} objects, a pair-wise comparison is termed significant whenever a particular confidence interval contains 0. Otherwise, p-values are compared to the value of \code{"level"}. Once, this information is extracted, plotting of all pair-wise comparisons can be carried out. } \value{ An object of class \code{cld}, a list with items: \item{y}{ Values of the response variable of the original model. } \item{yname}{ Name of the response variable. } \item{x}{ Values of the variable used to compute Tukey contrasts. } \item{weights}{ Weights used in the fitting process. } \item{lp}{ Predictions from the fitted model. } \item{covar}{ A logical indicating whether the fitted model contained covariates. } \item{signif}{ Vector of logicals indicating significant differences with hyphenated names that identify pair-wise comparisons. } } \references{ Hans-Peter Piepho (2004), An Algorithm for a Letter-Based Representation of All-Pairwise Comparisons, \emph{Journal of Computational and Graphical Statistics}, \bold{13}(2), 456--466. } \seealso{ \code{\link{glht}} \code{\link{plot.cld}} } \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) } multcomp/man/fattyacid.Rd0000644000176200001440000000303215075165505015133 0ustar liggesusers\name{fattyacid} \alias{fattyacid} \docType{data} \title{Fatty Acid Content of Bacillus simplex.} \description{ Fatty acid content of different putative ecotypes of Bacillus simplex. } \usage{data("fattyacid")} \format{ A data frame with 93 observations on the following 2 variables. \describe{ \item{\code{PE}}{a factor with levels \code{PE3}, \code{PE4}, \code{PE5}, \code{PE6}, \code{PE7}, \code{PE9} indicating the putative ecotype (PE).} \item{\code{FA}}{a numeric vector indicating the content of fatty acid (FA).} } } \details{ The data give the fatty acid content for different putative ecotypes of Bacillus simplex. Variances of the values of fatty acid are heterogeneous among the putative ecotypes.} \source{ J. Sikorski, E. Brambilla, R. M. Kroppenstedt, B. J. Tindal (2008), The temperature adaptive fatty acid content in Bacillus simplex strains from ''Evolution Canyon``, Israel. \emph{Microbiology} \bold{154}, 2416-2426. } \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) } } \keyword{datasets} multcomp/man/recovery.Rd0000644000176200001440000000304214172227611015014 0ustar liggesusers\name{recovery} \alias{recovery} \docType{data} \title{ Recovery Time Data Set } \usage{data("recovery")} \description{ Recovery time after surgery. } \format{ This data frame contains the following variables \describe{ \item{blanket}{blanket type, a factor at four levels: \code{b0}, \code{b1}, \code{b2}, and \code{b3}.} \item{minutes}{response variable: recovery time after a surgical procedure.} } } \details{ A company developed specialized heating blankets designed to help the body heat following a surgical procedure. Four types of blankets were tried on surgical patients with the aim of comparing the recovery time of patients. One of the blanket was a standard blanket that had been in use already in various hospitals. } \source{ P. H. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger, Y. Hochberg (1999). \emph{Multiple Comparisons and Multiple Tests Using the SAS System}. Cary, NC: SAS Institute Inc., page 66. } \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) ### the same rht <- glht(amod, linfct = mcp(blanket = c("b1 - b0 >= 0", "b2 - b0 >= 0", "b3 - b0 >= 0"))) confint(rht, level = 0.9) } \keyword{datasets} multcomp/man/cholesterol.Rd0000644000176200001440000000413014172227611015500 0ustar liggesusers\name{cholesterol} \alias{cholesterol} \docType{data} \title{ Cholesterol Reduction Data Set } \usage{data("cholesterol")} \description{ Cholesterol reduction for five treatments. } \format{ This data frame contains the following variables \describe{ \item{trt}{treatment groups, a factor at levels \code{1time}, \code{2times}, \code{4times}, \code{drugD} and \code{drugE}.} \item{response}{cholesterol reduction.} } } \details{ A clinical study was conducted to assess the effect of three formulations of the same drug on reducing cholesterol. The formulations were 20mg at once (\code{1time}), 10mg twice a day (\code{2times}), and 5mg four times a day (\code{4times}). In addition, two competing drugs were used as control group (\code{drugD} and \code{drugE}). The purpose of the study was to find which of the formulations, if any, is efficacious and how these formulations compare with the existing drugs. } \source{ P. H. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger, Y. Hochberg (1999). \emph{Multiple Comparisons and Multiple Tests Using the SAS System}. Cary, NC: SAS Institute Inc., page 153. } \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()) summary(cht, test = adjusted("Shaffer")) summary(cht, test = adjusted("Westfall")) ### 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")) } \keyword{datasets} multcomp/man/sbp.Rd0000644000176200001440000000117214172227611013744 0ustar liggesusers\name{sbp} \alias{sbp} \docType{data} \title{ Systolic Blood Pressure Data } \description{ Systolic blood pressure, age and gender of 69 people. } \usage{data("sbp")} \format{ A data frame with 69 observations on the following 3 variables. \describe{ \item{\code{gender}}{a factor with levels \code{male} \code{female}} \item{\code{sbp}}{systolic blood pressure in mmHg} \item{\code{age}}{age in years} } } \source{ D. G. Kleinbaum, L. L. Kupper, K. E. Muller, A. Nizam, A. (1998), \emph{Applied Regression Analysis and Other Multivariable Methods}, Duxbury Press, North Scituate, MA. } \keyword{datasets} multcomp/man/plot.cld.Rd0000644000176200001440000001240414646200506014677 0ustar liggesusers\name{plot.cld} \alias{plot.cld} \title{Plot a cld object} \description{ Plot information of \code{glht}, \code{summary.glht} or \code{confint.glht} objects stored as \code{cld} objects together with a compact letter display of all pair-wise comparisons. } \usage{ \method{plot}{cld}(x, type = c("response", "lp"), ...) } \arguments{ \item{x}{ An object of class \code{cld}. } \item{type}{ Should the response or the linear predictor (lp) be plotted. If there are any covariates, the lp is automatically used. To use the response variable, set \code{type="response"} and \code{covar=FALSE} of the \code{cld} object. } \item{...}{ Other optional print parameters which are passed to the plotting functions. } } \details{ This function plots the information stored in \code{glht}, \code{summary.glht} or \code{confint.glht} objects. Prior to plotting, these objects have to be converted to \code{cld} objects (see \code{\link{cld}} for details). All types of plots include a compact letter display (cld) of all pair-wise comparisons. Equal letters indicate no significant differences. Two levels are significantly different, in case they do not have any letters in common. If the fitted model contains any covariates, a boxplot of the linear predictor is generated with the cld within the upper margin. Otherwise, three different types of plots are used depending on the class of variable \code{y} of the \code{cld} object. In case of \code{class(y) == "numeric"}, a boxplot is generated using the response variable, classified according to the levels of the variable used for the Tukey contrast matrix. Is \code{class(y) == "factor"}, a mosaic plot is generated, and the cld is printed above. In case of \code{class(y) == "Surv"}, a plot of fitted survival functions is generated where the cld is plotted within the legend. The compact letter display is computed using the algorithm of Piepho (2004). Note: The user has to provide a sufficiently large upper margin which can be used to depict the compact letter display (see examples). } \references{ Hans-Peter Piepho (2004), An Algorithm for a Letter-Based Representation of All-Pairwise Comparisons, \emph{Journal of Computational and Graphical Statistics}, \bold{13}(2), 456--466. } \seealso{ \code{\link{glht}} \code{\link{cld}} \code{\link{cld.summary.glht}} \code{\link{cld.confint.glht}} \code{\link{cld.glht}} \code{\link{boxplot}} \code{\link{mosaicplot}} \code{\link[survival]{plot.survfit}} } \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) } } \keyword{hplot} multcomp/man/cml.Rd0000644000176200001440000000363014172227611013734 0ustar liggesusers\name{cml} \alias{cml} \docType{data} \title{Chronic Myelogenous Leukemia survival data.} \description{ Survival in a randomised trial comparing three treatments for Chronic Myelogeneous Leukemia (simulated data). } \usage{data("cml")} \format{ A data frame with 507 observations on the following 7 variables. \describe{ \item{\code{center}}{a factor with 54 levels indicating the study center.} \item{\code{treatment}}{a factor with levels \code{trt1}, \code{trt2}, \code{trt3} indicating the treatment group.} \item{\code{sex}}{sex (0 = female, 1 = male)} \item{\code{age}}{age in years} \item{\code{riskgroup}}{risk group (0 = low, 1 = medium, 2 = high)} \item{\code{status}}{censoring status (FALSE = censored, TRUE = dead)} \item{\code{time}}{survival or censoring time in days.} } } \details{ The data are simulated according to structure of the data by the German CML Study Group used in Hehlmann (1994).} \source{ R. Hehlmann, H. Heimpel, J. Hasford, H.J. Kolb, H. Pralle, D.K. Hossfeld, W. Queisser, H. Loeffler, A. Hochhaus, B. Heinze (1994), Randomized comparison of interferon-alpha with busulfan and hydroxyurea in chronic myelogenous leukemia. The German CML study group. \emph{Blood} \bold{84}(12):4064-4077. } \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,] } } \keyword{datasets} multcomp/man/mmm.Rd0000644000176200001440000002052315075165521013753 0ustar liggesusers\name{mmm} \alias{mmm} \alias{mlf} \title{Simultaneous Inference for Multiple Marginal Models} \description{Calculation of correlation between test statistics from multiple marginal models using the score decomposition} \usage{ mmm(...) mlf(...) } \arguments{ \item{\dots}{A names argument list containing fitted models (\code{mmm}) or definitions of linear functions (\code{mlf}). If only one linear function is defined for \code{mlf}, it will be applied to all models in \code{mmm} by \code{\link{glht.mlf}}.} } \details{ Estimated correlations of the estimated parameters of interest from the multiple marginal models are obtained using a stacked version of the i.i.d. decomposition of parameter estimates by means of score components (first derivatives of the log likelihood). The method is less conservative than the Bonferroni correction. The details are provided by Pipper, Ritz and Bisgaard (2012). The implementation assumes that the model were fitted to the same data, i.e., the rows of the matrices returned by \code{estfun} belong to the same observations for each model. The reference distribution is always multivariate normal, if you want to use the multivariate t, please specify the corresponding degrees of freedom as an additional \code{df} argument to \code{\link{glht}}. Observations with missing values contribute zero to the score function. Models have to be fitted using \code{\link{na.exclude}} as \code{na.action} argument. } \value{ An object of class \code{mmm} or \code{mlf}, basically a named list of the arguments with a special method for \code{\link{glht}} being available for the latter. \code{vcov}, \code{\link[sandwich]{estfun}}, and \code{\link[sandwich]{bread}} methods are available for objects of class \code{mmm}. } \references{ Christian Bressen Pipper, Christian Ritz and Hans Bisgaard (2011), A Versatile Method for Confirmatory Evaluation of the Effects of a Covariate in Multiple Models, \emph{Journal of the Royal Statistical Society, Series C (Applied Statistics)}, \bold{61}, 315--326. } \author{ Code for the computation of the joint covariance and sandwich matrices was contributed by Christian Ritz and Christian B. Pipper. } \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 library("sandwich") ### 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 \dontrun{ library("SimComp") SimCiDiff(data = coagulation, grp = "Group", resp = c("Thromb.count","ADP","TRAP"), type = "Dunnett", alternative = "greater", covar.equal = TRUE) } ### use sandwich variance matrix g <- glht(mmm(Thromb = m1, ADP = m2, TRAP = m3), mlf(mcp(Group = "Dunnett")), alternative = "greater", vcov. = sandwich) summary(g) confint(g) } ### 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)))) ### group differences summary(glht(mmm(mn6.9.y1, mn6.9.y2, mn6.9.y3, mn6.9.y4), mlf("group2 = 0"))) ### 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())) (mala_logreg <- glm(MALAISE ~ group, data = influenza, family = binomial())) (pyre_logreg <- glm(PYREXIA ~ group, data = influenza, family = binomial())) (arth_logreg <- glm(ARTHRALGIA ~ group, data = influenza, family = binomial())) ### 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) confint(xy.sim) ### 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 inference for different parameters in the 2 model fits summary(glht(mmm(m1 = m1, m2 = m2), mlf(m1 = "x12 = 0", m2 = "x13 = 0"))) ### 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"))) ### Examples for binomial data ### Two independent outcomes y1.1 <- rbinom(100, 1, 0.45) y1.2 <- rbinom(100, 1, 0.55) 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"))) ### Two perfectly correlated outcomes y2.1 <- rbinom(100, 1, 0.45) 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"))) ### use sandwich covariance matrix summary(glht(mmm(m1 = m1, m2 = m2), mlf("groupB = 0"), vcov. = sandwich)) } \keyword{models} multcomp/man/waste.Rd0000644000176200001440000000341714172227611014307 0ustar liggesusers\name{waste} \alias{waste} \docType{data} \title{ Industrial Waste Data Set } \usage{data("waste")} \description{ Industrial waste output in a manufactoring plant. } \format{ This data frame contains the following variables \describe{ \item{temp}{temperature, a factor at three levels: \code{low}, \code{medium}, \code{high}.} \item{envir}{environment, a factor at five levels: \code{env1} \dots \code{env5}.} \item{waste}{response variable: waste output in a manufacturing plant.} } } \details{ The data are from an experiment designed to study the effect of temperature (\code{temp}) and environment (\code{envir}) on waste output in a manufactoring plant. Two replicate measurements were taken at each temperature / environment combination. } \source{ P. H. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger, Y. Hochberg (1999). \emph{Multiple Comparisons and Multiple Tests Using the SAS System}. Cary, NC: SAS Institute Inc., page 177. } \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 K glht(amod, K) ### 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 confint(glht(amod, K)) ### same as TukeyHSD TukeyHSD(amod, "temp") ### set up linear hypotheses for all-pairs of both factors wht <- glht(amod, linfct = mcp(temp = "Tukey", envir = "Tukey")) ### cf. Westfall et al. (1999, page 181) summary(wht, test = adjusted("Shaffer")) } \keyword{datasets} multcomp/man/cftest.Rd0000644000176200001440000000152714172227611014454 0ustar liggesusers\name{cftest} \alias{cftest} \title{ Testing Estimated Coefficients } \description{ A convenience function for univariate testing via z- and t-tests of estimated model coefficients } \usage{ cftest(model, parm, test = univariate(), ...) } \arguments{ \item{model}{a fitted model.} \item{parm}{a vector of parameters to be tested, either a character vector of names or an integer.} \item{test}{ a function for computing p values, see \code{\link{summary.glht}}.} \item{\dots}{additional arguments passed to \code{\link{summary.glht}}.} } \details{ The usual z- or t-tests are tested without adjusting for multiplicity. } \value{ An object of class \code{summary.glht}. } \seealso{ \code{\link[lmtest]{coeftest}} } \examples{ lmod <- lm(dist ~ speed, data = cars) summary(lmod) cftest(lmod) } \keyword{htest} multcomp/man/litter.Rd0000644000176200001440000000360314172227611014464 0ustar liggesusers\name{litter} \alias{litter} \docType{data} \title{ Litter Weights Data Set } \usage{data("litter")} \description{ Dose response of litter weights in rats. } \format{ This data frame contains the following variables \describe{ \item{dose}{dosages at four levels: \code{0}, \code{5}, \code{50}, \code{500}.} \item{gesttime}{gestation time as covariate.} \item{number}{number of animals in litter as covariate.} \item{weight}{response variable: average post-birth weights in the entire litter.} } } \details{ Pregnant mice were divided into four groups and the compound in four different doses was administered during pregnancy. Their litters were evaluated for birth weights. } \source{ P. H. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger, Y. Hochberg (1999). \emph{Multiple Comparisons and Multiple Tests Using the SAS System}. Cary, NC: SAS Institute Inc., page 109. P. H. Westfall (1997). Multiple Testing of General Contrasts Using Logical Constraints and Correlations. \emph{Journal of the American Statistical Association}, \bold{92}(437), 299--306. } \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()) summary(Kht, test = adjusted("bonferroni")) summary(Kht, test = adjusted("Shaffer")) summary(Kht, test = adjusted("Westfall")) summary(Kht, test = adjusted("single-step")) } \keyword{datasets} multcomp/man/trees513.Rd0000644000176200001440000000456114172227611014540 0ustar liggesusers\name{trees513} \alias{trees513} \docType{data} \title{ Frankonian Tree Damage Data } \description{ Damages on young trees caused by deer browsing. } \usage{data("trees513")} \format{ A data frame with 2700 observations on the following 4 variables. \describe{ \item{\code{damage}}{a factor with levels \code{yes} and \code{no} indicating whether or not the trees has been damaged by game animals, mostly roe deer.} \item{\code{species}}{a factor with levels \code{spruce}, \code{fir}, \code{pine}, \code{softwood (other)}, \code{beech}, \code{oak}, \code{ash/maple/elm/lime}, and \code{hardwood (other)}.} \item{\code{lattice}}{a factor with levels \code{1}, ..., \code{53}, essentially a number indicating the position of the sampled area.} \item{\code{plot}}{a factor with levels \code{x_1}, ..., \code{x_5} where \code{x} is the lattice. \code{plot} is nested within \code{lattice} and is a replication for each lattice point.} } } \details{ 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 Foresty 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. The data given here are from the game management district number 513 `Unterer Aischgrund' (located in Frankonia between Erlangen and H\"ochstadt) in 2006. The data of 2700 trees include the species and a binary variable indicating whether or not the tree suffers from damage caused by deer browsing. } \source{ Bayerisches Staatsministerium fuer Landwirtschaft und Forsten (2006), Forstliche Gutachten zur Situation der Waldverjuengung 2006. \url{https://www.stmelf.bayern.de/wald/} Torsten Hothorn, Frank Bretz and Peter Westfall (2008), Simultaneous Inference in General Parametric Models. \emph{Biometrical Journal}, \bold{50}(3), 346--363; See \code{vignette("generalsiminf", package = "multcomp")}. } \examples{ summary(trees513) } \keyword{datasets} multcomp/man/detergent.Rd0000644000176200001440000000316214172227611015142 0ustar liggesusers\name{detergent} \alias{detergent} \docType{data} \title{ Detergent Durability Data Set } \usage{data("detergent")} \description{ Detergent durability in an incomplete two-way design. } \format{ This data frame contains the following variables \describe{ \item{detergent}{detergent, a factor at levels \code{A}, \code{B}, \code{C}, \code{D}, and \code{E}.} \item{block}{block, a factor at levels \code{B_1}, ..., \code{B_10}.} \item{plates}{response variable: number of plates washed before the foam disappears.} } } \details{ Plates were washed with five detergent varieties, in ten blocks. A complete design would have 50 combinations, here only three detergent varieties in each block were applied in a balanced incomplete block design. Note that there are six observations taken at each detergent level. } \source{ H. Scheffe (1959). \emph{The Analysis of Variance}. New York: John Wiley & Sons, page 189. P. H. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger, Y. Hochberg (1999). \emph{Multiple Comparisons and Multiple Tests Using the SAS System}. Cary, NC: SAS Institute Inc., page 189. } \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) ### see Westfall et al. (1999, p. 192) summary(dht, test = univariate()) \dontrun{ summary(dht, test = adjusted("Shaffer")) summary(dht, test = adjusted("Westfall")) } } \keyword{datasets} multcomp/man/mtept.Rd0000644000176200001440000000153514172227611014314 0ustar liggesusers\name{mtept} \alias{mtept} \docType{data} \title{ Multiple Endpoints Data } \description{ Measurements on four endpoints in a two-arm clinical trial. } \usage{data(mtept)} \format{ A data frame with 111 observations on the following 5 variables. \describe{ \item{\code{treatment}}{a factor with levels \code{Drug} \code{Placebo}} \item{\code{E1}}{endpoint 1} \item{\code{E2}}{endpoint 2} \item{\code{E3}}{endpoint 3} \item{\code{E4}}{endpoint 4} } } \details{ The data (from Westfall et al., 1999) contain measurements of patients in treatment (\code{Drug}) and control (\code{Placebo}) groups, with four outcome variables. } \source{ P. H. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger, Y. Hochberg (1999). \emph{Multiple Comparisons and Multiple Tests Using the SAS System}. Cary, NC: SAS Institute Inc. } \keyword{datasets} multcomp/man/contrMat.Rd0000644000176200001440000000337514172227611014756 0ustar liggesusers\name{contrMat} \alias{contrMat} \title{ Contrast Matrices } \description{ Computes contrast matrices for several multiple comparison procedures. } \usage{ contrMat(n, type = c("Dunnett", "Tukey", "Sequen", "AVE", "Changepoint", "Williams", "Marcus", "McDermott", "UmbrellaWilliams", "GrandMean"), base = 1) } \arguments{ \item{n}{ a (possibly named) vector of sample sizes for each group.} \item{type}{ type of contrast. } \item{base}{ an integer specifying which group is considered the baseline group for Dunnett contrasts.} } \details{ Computes the requested matrix of contrasts for comparisons of mean levels. } \value{ The matrix of contrasts with appropriate row names is returned. } \references{ Frank Bretz, Torsten Hothorn and Peter Westfall (2010), \emph{Multiple Comparisons Using R}, CRC Press, Boca Raton. Frank Bretz, Alan Genz and Ludwig A. Hothorn (2001), On the numerical availability of multiple comparison procedures. \emph{Biometrical Journal}, \bold{43}(5), 645--656. } \examples{ n <- c(10,20,30,40) names(n) <- paste("group", 1:4, sep="") contrMat(n) # Dunnett is default contrMat(n, base = 2) # use second level as baseline contrMat(n, type = "Tukey") contrMat(n, type = "Sequen") contrMat(n, type = "AVE") contrMat(n, type = "Changepoint") contrMat(n, type = "Williams") contrMat(n, type = "Marcus") contrMat(n, type = "McDermott") ### Umbrella-protected Williams contrasts, i.e. a sequence of ### Williams-type contrasts with groups of higher order ### stepwise omitted contrMat(n, type = "UmbrellaWilliams") ### comparison of each group with grand mean of all groups contrMat(n, type = "GrandMean") } \keyword{misc} \keyword{Dunnett} \keyword{Tukey} multcomp/man/parm.Rd0000644000176200001440000000311314172227611014114 0ustar liggesusers\name{parm} \alias{parm} \title{ Model Parameters } \description{ Directly specify estimated model parameters and their covariance matrix. } \usage{ parm(coef, vcov, df = 0) } \arguments{ \item{coef}{ estimated coefficients.} \item{vcov}{ estimated covariance matrix of the coefficients.} \item{df}{ an optional specification of the degrees of freedom to be used in subsequent computations. } } \details{ When only estimated model parameters and the corresponding covariance matrix is available for simultaneous inference using \code{\link{glht}} (for example, when only the results but not the original data are available or, even worse, when the model has been fitted outside R), function \code{parm} sets up an object \code{\link{glht}} is able to compute on (mainly by offering \code{coef} and \code{vcov} methods). Note that the linear function in \code{\link{glht}} can't be specified via \code{\link{mcp}} since the model terms are missing. } \value{ An object of class \code{parm} with elements \item{coef}{model parameters} \item{vcov}{covariance matrix of model parameters} \item{df}{degrees of freedom} } \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) } \keyword{misc} multcomp/man/methods.Rd0000644000176200001440000001670715075165762014650 0ustar liggesusers\name{glht-methods} \alias{summary.glht} \alias{confint.glht} \alias{coef.glht} \alias{vcov.glht} \alias{plot.glht} \alias{plot.confint.glht} \alias{univariate} \alias{adjusted} \alias{Ftest} \alias{Chisqtest} \alias{adjusted_calpha} \alias{univariate_calpha} \title{ Methods for General Linear Hypotheses } \description{ Simultaneous tests and confidence intervals for general linear hypotheses. } \usage{ \method{summary}{glht}(object, test = adjusted(), ...) \method{confint}{glht}(object, parm, level = 0.95, calpha = adjusted_calpha(), ...) \method{coef}{glht}(object, rhs = FALSE, ...) \method{vcov}{glht}(object, ...) \method{plot}{confint.glht}(x, xlim, xlab, ylim, ...) \method{plot}{glht}(x, ...) univariate() adjusted(type = c("single-step", "Shaffer", "Westfall", "free", p.adjust.methods), ...) Ftest() Chisqtest() adjusted_calpha(...) univariate_calpha(...) } \arguments{ \item{object}{ an object of class \code{\link{glht}}.} \item{test}{ a function for computing p values.} \item{parm}{ additional parameters, currently ignored.} \item{level}{ the confidence level required.} \item{calpha}{ either a function computing the critical value or the critical value itself.} \item{rhs}{logical, indicating whether the linear function \eqn{K \hat{\theta}} or the right hand side \eqn{m} (\code{rhs = TRUE}) of the linear hypothesis should be returned.} \item{type}{ the multiplicity adjustment (\code{adjusted}) to be applied. See below and \code{\link{p.adjust}}.} \item{x}{an object of class \code{\link{glht}} or \code{confint.glht}.} \item{xlim}{the \code{x} limits \code{(x1, x2)} of the plot.} \item{ylim}{the y limits of the plot.} \item{xlab}{a label for the \code{x} axis.} \item{...}{ additional arguments, such as \code{maxpts}, \code{abseps} or \code{releps} to \code{\link[mvtnorm]{pmvnorm}} in \code{adjusted} or \code{\link[mvtnorm]{qmvnorm}} in \code{confint}. Note that additional arguments specified to \code{summary}, \code{confint}, \code{coef} and \code{vcov} methods are currently ignored.} } \details{ The methods for general linear hypotheses as described by objects returned by \code{\link{glht}} can be used to actually test the global null hypothesis, each of the partial hypotheses and for simultaneous confidence intervals for the linear function \eqn{K \theta}. The \code{\link{coef}} and \code{\link{vcov}} methods compute the linear function \eqn{K \hat{\theta}} and its covariance, respectively. The \code{test} argument to \code{summary} takes a function specifying the type of test to be applied. Classical Chisq (Wald test) or F statistics for testing the global hypothesis \eqn{H_0} are implemented in functions \code{Chisqtest} and \code{Ftest}. Several approaches to multiplicity adjusted p values for each of the linear hypotheses are implemented in function \code{adjusted}. The \code{type} argument to \code{adjusted} specifies the method to be applied: \code{"single-step"} implements adjusted p values based on the joint normal or t distribution of the linear function, and \code{"Shaffer"} and \code{"Westfall"} implement logically constraint multiplicity adjustments (Shaffer, 1986; Westfall, 1997). \code{"free"} implements multiple testing procedures under free combinations (Westfall et al, 1999). In addition, all adjustment methods implemented in \code{\link{p.adjust}} are available as well. Simultaneous confidence intervals for linear functions can be computed using method \code{\link{confint}}. Univariate confidence intervals can be computed by specifying \code{calpha = univariate_calpha()} to \code{confint}. The critical value can directly be specified as a scalar to \code{calpha} as well. Note that \code{plot(a)} for some object \code{a} of class \code{glht} is equivalent to \code{plot(confint(a))}. All simultaneous inference procedures implemented here control the family-wise error rate (FWER). Multivariate normal and t distributions, the latter one only for models of class \code{\link{lm}}, are evaluated using the procedures implemented in package \code{mvtnorm}. Note that the default procedure is stochastic. Reproducible p-values and confidence intervals require appropriate settings of seeds. A more detailed description of the underlying methodology is available from Hothorn et al. (2008) and Bretz et al. (2010). } \value{ \code{summary} computes (adjusted) p values for general linear hypotheses, \code{\link{confint}} computes (adjusted) confidence intervals. \code{\link{coef}} returns estimates of the linear function \eqn{K \theta} and \code{\link{vcov}} its covariance. } \references{ Frank Bretz, Torsten Hothorn and Peter Westfall (2010), \emph{Multiple Comparisons Using R}, CRC Press, Boca Raton. Juliet P. Shaffer (1986), Modified sequentially rejective multiple test procedures. \emph{Journal of the American Statistical Association}, \bold{81}, 826--831. Peter H. Westfall (1997), Multiple testing of general contrasts using logical constraints and correlations. \emph{Journal of the American Statistical Association}, \bold{92}, 299--306. P. H. Westfall, R. D. Tobias, D. Rom, R. D. Wolfinger, Y. Hochberg (1999). \emph{Multiple Comparisons and Multiple Tests Using the SAS System}. Cary, NC: SAS Institute Inc. Torsten Hothorn, Frank Bretz and Peter Westfall (2008), Simultaneous Inference in General Parametric Models. \emph{Biometrical Journal}, \bold{50}(3), 346--363; See \code{vignette("generalsiminf", package = "multcomp")}. } \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))) ### the same (for balanced designs only) TukeyHSD(amod, "tension") ### corresponding adjusted p values summary(wht) ### 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)) ### 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.out = 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)) } } \keyword{htest} multcomp/man/glht.Rd0000644000176200001440000002571314442105624014124 0ustar liggesusers\name{glht} \alias{glht} \alias{glht.matrix} \alias{glht.character} \alias{glht.expression} \alias{glht.mcp} \alias{glht.mlf} \alias{mcp} \title{ General Linear Hypotheses } \description{ General linear hypotheses and multiple comparisons for parametric models, including generalized linear models, linear mixed effects models, and survival models. } \usage{ \method{glht}{matrix}(model, linfct, alternative = c("two.sided", "less", "greater"), rhs = 0, ...) \method{glht}{character}(model, linfct, ...) \method{glht}{expression}(model, linfct, ...) \method{glht}{mcp}(model, linfct, ...) \method{glht}{mlf}(model, linfct, ...) mcp(..., interaction_average = FALSE, covariate_average = FALSE) } \arguments{ \item{model}{ a fitted model, for example an object returned by \code{\link{lm}}, \code{\link{glm}}, or \code{\link{aov}} etc. It is assumed that \code{\link{coef}} and \code{\link{vcov}} methods are available for \code{model}. For multiple comparisons of means, methods \code{\link{model.matrix}}, \code{\link{model.frame}} and \code{\link{terms}} are expected to be available for \code{model} as well.} \item{linfct}{ a specification of the linear hypotheses to be tested. Linear functions can be specified by either the matrix of coefficients or by symbolic descriptions of one or more linear hypotheses. Multiple comparisons in AN(C)OVA models are specified by objects returned from function \code{mcp}.}. \item{alternative}{ a character string specifying the alternative hypothesis, must be one of '"two.sided"' (default), '"greater"' or '"less"'. You can specify just the initial letter.} \item{rhs}{ an optional numeric vector specifying the right hand side of the hypothesis.} \item{interaction_average}{logical indicating if comparisons are averaging over interaction terms. Experimental!} \item{covariate_average}{logical indicating if comparisons are averaging over additional covariates. Experimental!} \item{\dots}{ additional arguments to function \code{\link{modelparm}} in all \code{glht} methods. For function \code{mcp}, multiple comparisons are defined by matrices or symbolic descriptions specifying contrasts of factor levels where the arguments correspond to factor names.} } \details{ A general linear hypothesis refers to null hypotheses of the form \eqn{H_0: K \theta = m} for some parametric model \code{model} with parameter estimates \code{coef(model)}. The null hypothesis is specified by a linear function \eqn{K \theta}, the direction of the alternative and the right hand side \eqn{m}. Here, \code{alternative} equal to \code{"two.sided"} refers to a null hypothesis \eqn{H_0: K \theta = m}, whereas \code{"less"} corresponds to \eqn{H_0: K \theta \ge m} and \code{"greater"} refers to \eqn{H_0: K \theta \le m}. The right hand side vector \eqn{m} can be defined via the \code{rhs} argument. The generic method \code{glht} dispatches on its second argument (\code{linfct}). There are three ways, and thus methods, to specify linear functions to be tested: 1) The \code{matrix} of coefficients \eqn{K} can be specified directly via the \code{linfct} argument. In this case, the number of columns of this matrix needs to correspond to the number of parameters estimated by \code{model}. It is assumed that appropriate \code{coef} and \code{vcov} methods are available for \code{model} (\code{\link{modelparm}} deals with some exceptions). 2) A symbolic description, either a \code{character} or \code{expression} vector passed to \code{glht} via its \code{linfct} argument, can be used to define the null hypothesis. A symbolic description must be interpretable as a valid R expression consisting of both the left and right hand side of a linear hypothesis. Only the names of \code{coef(model)} must be used as variable names. The alternative is given by the direction under the null hypothesis (\code{=} or \code{==} refer to \code{"two.sided"}, \code{<=} means \code{"greater"} and \code{>=} indicates \code{"less"}). Numeric vectors of length one are valid values for the right hand side. 3) Multiple comparisons of means are defined by objects of class \code{mcp} as returned by the \code{mcp} function. For each factor, which is included in \code{model} as independent variable, a contrast matrix or a symbolic description of the contrasts can be specified as arguments to \code{mcp}. A symbolic description may be a \code{character} or \code{expression} where the factor levels are only used as variables names. In addition, the \code{type} argument to the contrast generating function \code{\link{contrMat}} may serve as a symbolic description of contrasts as well. 4) The \code{lsm} function in package \code{lsmeans} offers a symbolic interface for the definition of least-squares means for factor combinations which is very helpful when more complex contrasts are of special interest. The \code{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. Because it is impossible to determine the parameters of interest automatically in this case, \code{mcp} in multcomp version 1.0-0 and higher generates comparisons for the main effects only, ignoring covariates and interactions (older versions automatically averaged over interaction terms). A warning is given. We refer to Hsu (1996), Chapter 7, and Searle (1971), Chapter 7.3, for further discussions and examples on this issue. \code{glht} extracts the number of degrees of freedom for models of class \code{lm} (via \code{\link{modelparm}}) and the exact multivariate t distribution is evaluated. For all other models, results rely on the normal approximation. Alternatively, the degrees of freedom to be used for the evaluation of multivariate t distributions can be given by the additional \code{df} argument to \code{\link{modelparm}} specified via \code{\dots}. \code{glht} methods return a specification of the null hypothesis \eqn{H_0: K \theta = m}. The value of the linear function \eqn{K \theta} can be extracted using the \code{\link{coef}} method and the corresponding covariance matrix is available from the \code{\link{vcov}} method. Various simultaneous and univariate tests and confidence intervals are available from \code{\link{summary.glht}} and \code{\link{confint.glht}} methods, respectively. A more detailed description of the underlying methodology is available from Hothorn et al. (2008) and Bretz et al. (2010). } \value{ An object of class \code{glht}, more specifically a list with elements \item{model}{a fitted model, used in the call to \code{glht}} \item{linfct}{ the matrix of linear functions} \item{rhs}{ the vector of right hand side values \eqn{m}} \item{coef}{ the values of the linear functions} \item{vcov}{ the covariance matrix of the values of the linear functions} \item{df}{ optionally, the degrees of freedom when the exact t distribution is used for inference} \item{alternative}{ a character string specifying the alternative hypothesis} \item{type}{ optionally, a character string giving the name of the specific procedure} with \code{print}, \code{\link{summary}}, \code{\link{confint}}, \code{\link{coef}} and \code{\link{vcov}} methods being available. When called with \code{linfct} being an \code{mcp} object, an additional element \code{focus} is available storing the names of the factors under test. } \references{ Frank Bretz, Torsten Hothorn and Peter Westfall (2010), \emph{Multiple Comparisons Using R}, CRC Press, Boca Raton. Shayle R. Searle (1971), \emph{Linear Models}. John Wiley & Sons, New York. Jason C. Hsu (1996), \emph{Multiple Comparisons}. Chapman & Hall, London. Torsten Hothorn, Frank Bretz and Peter Westfall (2008), Simultaneous Inference in General Parametric Models. \emph{Biometrical Journal}, \bold{50}(3), 346--363; See \code{vignette("generalsiminf", package = "multcomp")}. } \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 ### set up general linear hypothesis glht(lmod, linfct = K) ### alternatively, use a symbolic description ### instead of a matrix glht(lmod, linfct = c("Agriculture = 0", "Examination = 0", "Education = 0", "Catholic = 0", "Infant.Mortality = 0")) ### 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")) ### alternatively, describe differences symbolically glht(amod, linfct = mcp(tension = c("M - L = 0", "H - L = 0", "H - M = 0"))) ### 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)) ### 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))) ### 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)) ### use smallest of the two one-sided ### p-value as two-sided p-value -> 0.0232 summary(warpbreaks.mc) ### more complex models: Continuous outcome logistic ### regression; parameters are log-odds ratios if (require("tram", quietly = TRUE, warn.conflicts = FALSE)) { confint(glht(Colr(breaks ~ wool + tension, data = warpbreaks), linfct = mcp("tension" = "Tukey"))) } } \keyword{htest} multcomp/DESCRIPTION0000644000176200001440000000346415075342105013631 0ustar liggesusersPackage: multcomp Title: Simultaneous Inference in General Parametric Models Version: 1.4-29 Date: 2025-10-19 Authors@R: c(person("Torsten", "Hothorn", role = c("aut", "cre"), email = "Torsten.Hothorn@R-project.org", comment = c(ORCID = "0000-0001-8301-0471")), person("Frank", "Bretz", role = "aut"), person("Peter", "Westfall", role = "aut"), person("Richard M.", "Heiberger", role = "ctb"), person("Andre", "Schuetzenmeister", role = "ctb"), person("Susan", "Scheibe", role = "ctb")) Description: Simultaneous tests and confidence intervals for general linear hypotheses in parametric models, including linear, generalized linear, linear mixed effects, and survival models. The package includes demos reproducing analyzes presented in the book "Multiple Comparisons Using R" (Bretz, Hothorn, Westfall, 2010, CRC Press). Depends: stats, graphics, mvtnorm (>= 1.0-10), survival (>= 2.39-4), TH.data (>= 1.0-2) Imports: sandwich (>= 2.3-0), codetools Suggests: lme4 (>= 0.999375-16), nlme, robustbase, coin, MASS, foreign, xtable, lmtest, coxme (>= 2.2-1), SimComp, ISwR, tram (>= 0.2-5), fixest (>= 0.10), glmmTMB, DoseFinding, HH, asd, gsDesign, lattice URL: http://multcomp.R-forge.R-project.org, https://www.routledge.com/Multiple-Comparisons-Using-R/Bretz-Hothorn-Westfall/p/book/9781584885740 LazyData: yes License: GPL-2 NeedsCompilation: no Packaged: 2025-10-19 13:56:54 UTC; hothorn Author: Torsten Hothorn [aut, cre] (ORCID: ), Frank Bretz [aut], Peter Westfall [aut], Richard M. Heiberger [ctb], Andre Schuetzenmeister [ctb], Susan Scheibe [ctb] Maintainer: Torsten Hothorn Repository: CRAN Date/Publication: 2025-10-20 05:10:29 UTC