mvtnorm/0000755000175100001440000000000012654153074012001 5ustar hornikusersmvtnorm/inst/0000755000175100001440000000000012654131244012751 5ustar hornikusersmvtnorm/inst/CITATION0000644000175100001440000000344012444255462014115 0ustar hornikuserscitHeader("To cite package mvtnorm in publications use") ## R >= 2.8.0 passes package metadata to citation(). if(!exists("meta") || is.null(meta)) meta <- packageDescription("mvtnorm") year <- sub("-.*", "", meta$Date) note <- sprintf("R package version %s", meta$Version) citEntry(entry = "Manual", title = "{mvtnorm}: Multivariate Normal and t Distributions", author = personList(as.person("Alan Genz"), as.person("Frank Bretz"), as.person("Tetsuhisa Miwa"), as.person("Xuefei Mi"), as.person("Friedrich Leisch"), as.person("Fabian Scheipl"), as.person("Torsten Hothorn")), year = year, note = note, url = "http://CRAN.R-project.org/package=mvtnorm", textVersion = paste("Alan Genz, Frank Bretz, Tetsuhisa Miwa, Xuefei Mi, Friedrich Leisch, Fabian Scheipl, Torsten Hothorn", sprintf("(%s).", year), "mvtnorm: Multivariate Normal and t Distributions.", paste(note, ".", sep = ""), "URL http://CRAN.R-project.org/package=mvtnorm") ) citEntry(entry="Book", title = "Computation of Multivariate Normal and t Probabilities", author = personList(as.person("Alan Genz"), as.person("Frank Bretz")), series = "Lecture Notes in Statistics", year = "2009", publisher = "Springer-Verlag", address = "Heidelberg", ISBN = "978-3-642-01688-2", textVersion = "Alan Genz, Frank Bretz (2009), Computation of Multivariate Normal and t Probabilities. Lecture Notes in Statistics, Vol. 195., Springer-Verlag, Heidelberg. ISBN 978-3-642-01688-2" ) mvtnorm/inst/NEWS0000644000175100001440000002676012654131207013462 0ustar hornikusers Changes in version 1.0-5 (2016-02-02) o improvements in quantile estimation Changes in version 1.0-4 (2016-01-19) o a new algorithm for quantile estimation, again. Quantiles are now computed by a stochastic root finding algorithm. Note that f.quantile in the output of qmv{t,norm} is now (again) the squared difference between the cdf evaluated at the quantile and the level. The \code{interval} argument to the quantile functions is used as a starting value for the root finder when available. o clean-ups in C and R code and documentation Changes in version 1.0-3 (2015-07-21) o new algorithm for quantile estimation. Quantiles are now computed by minimising the squared distance between the distribution function and the probability whereas previous versions used uniroot(). The procedure is now performed multiple times with difference random seeds in order to stabilise the results. The \code{interval} argument to the quantile functions is IGNORED now. Changes in version 1.0-2 (2014-12-16) o start providing C interfaces to the underlying algorithms. mvtnorm_C_mvtdst() directly calls Alan's FORTRAN code and can be used in other packages via LinkingTo. See mvtnorm/inst/C_API_Example for an example very much inspired by the example provided in package xts. o provide .C interfaces to the FORTRAN routines and allow switching on/off of R' RNG. Changes in version 1.0-1 (2014-11-11) o replace internal MVCHNV FORTRAN FUNCTION with R's sqrt(qchisq(p, n, FALSE, FALSE). This fixes a problem where NaN was returned as reported by David Charles Airey Changes in version 1.0-0 (2014-07-08) o After 14 years, we now feel safe enough to publish mvtnorm 1.0-0. Many packages depend, import, or suggest mvtnorm, so this version change also indicates that the package is now stable and, to a very large extent, the API is frozen. We will of course continue to fix bugs or other problems but new features are unlikely to go into this package. o use Authors@R in DESCRIPTION o switch to standard NEWS format Changes in version 0.9-99992 (2014-05-03) o cleanups by MM Changes in version 0.9-99991 (2014-04-25) o version 0.9-9999 introduced new bug in dmvnorm Changes in version 0.9-9999 (2014-04-17) o dmvnorm (again) returns NaN in case sigma is not decomposable Changes in version 0.9-9998 (2014-03-21) o faster code for dmvnorm by Matteo Fasiolo Changes in version 0.9-9997 (2014-01-17) o T. Miwa fixed a runtime error in miwa.c reported by UB sanitizer Changes in version 0.9-9996 (2013-09-16) o documentation updates/corrections/examples by Marius Hofert o df = Inf o rmvt(): argument 'mean' not allowed anymore (prone to misuse) o pmvnorm(lower=c(-Inf, 0, 0), upper=c(0, Inf, Inf), mean=c(0, 0, 0), sigma=S, algorithm = Miwa()) returned NaN, fixed by Xuefei Mi Changes in version 0.9-9995 (2013-05-29) o update to version 2013-06-29 of mvtdst.f from Alan's website (fixed a bug for 2-dim pmvt) Changes in version 0.9-9994 (2012-12-06) o set.seed(29) rmvnorm(10, ...) produces the same first ten rows as set.seed(29) rmvnorm(100, ...) o as suggested by Paul Johnson . There is a new argument pre0.9_9993 for changing back to the `old' output. This _DOES NOT_ apply to rmvt. Changes in version 0.9-9993 (2012-10-22) o sigma is called `scale' matrix of {dpq}mvt, thanks to Richard Boys for the hint Changes in version 0.9-9992 (2012-01-19) o qmvt(..., df = 0, ...) gave NaN o R CMD check works on x64 with GCC 4.6.2 (Debian 4.6.2-11) Changes in version 0.9-9991 (2011-06-10) o tvpack wasn't working on 64bit machines. The reason was that the wrapper SUBROUTINEs around the original FUNCTIONs didn't return the appropriate double precision for unknown reasons. Redefining TVTL and BVTL as FUNCTIONs fixed the problem. Changes in version 0.9-999 (2011-04-26) o still problems in fix approx_interval (when !is.null(sigma)); disable for the time being Changes in version 0.9-99 (2011-04-21) o fix bug in approx_interval spotted by Ravi Varadhan Changes in version 0.9-98 (2011-04-19) o allow ... to pass arguments to rmvnorm in rmvt Changes in version 0.9-97 (2011-01-31) o use check.attributes = FALSE in isSymmetric calls (requested by Nick Sabbe ) Changes in version 0.9-96 (2011-01-28) o use fixed interval when sigma is specified in qmvt Changes in version 0.9-95 (2010-11-18) o q{mvt,mvnorm} shall always return a list, not a vector checks for correlation matrices are less picky now Changes in version 0.9-94 (2010-11-16) o allow for two different noncentral t distributions (via type argument) o add support for one-dimensional quantiles (requested by Jerry Lewis ) o documentation fixes for problems spotted by Jerry Lewis o interface to Alan's TVPACK algorithms for 2- and 3-d probabilities by Bjoern Bornkamp added. Changes in version 0.9-92 (2010-07-06) o update to new mvtdstpack.f (7/10) by Alan. Fixes potential bias problem in higher dimension. Changes in version 0.9-91 (2010-04-13) o better search interval for uniroot in qmv{t,norm} speeds up quantile estimation; suggestion by Björn Bornkamp Changes in version 0.9-9 (2010-01-27) o document ... in pmvt.Rd Changes in version 0.9-8 (2009-10-27) o add citation entry Changes in version 0.9-7 (2009-05-22) o make sure `error' is not NA Changes in version 0.9-6 (2009-03-25) o update Alan's FORTRAN code Changes in version 0.9-5 (2009-03-17) o fix FORTRAN bug spotted by Alex Lenkoski Changes in version 0.9-3 (2008-12-22) o update meta data Changes in version 0.9-2 (2008-07-08) o be a little more liberal (tol = sqrt(.Machine$double.eps)) when testing for symmetry of covariance matrices (and make R CMD CHECK monomvn happy again) Changes in version 0.9-1 (2008-07-02) o better check for covariance matrices, suggested by James Rogers Changes in version 0.9-0 (2008-04-01) o add support for the multivariate normal distributions in small dimensions by Miwa's method thanks to Tetsuhisa Miwa and Xuefei Mi; both have been added as `authors'. o new argument `algorithm' defaulting to `GenzBretz()' with `Miwa()' being the alternative. Those two functions are now used to specify hyper parameters such as `abseps'. o internal function `mvt' is no longer exported. Changes in version 0.8-3 (2008-02-19) o make sure rmvnorm(1, sigma = matrix(0.5, 1, 1)) works (reported by Kurt Hornik) Changes in version 0.8-2 (2008-02-10) o rmvnorm() now issues a warning for non-symmetric sigma and uses the eigenvalue decomposition as default. o make gfortran 4.3 happy Changes in version 0.8-1 (2007-07-24) o Orion Poplawski spotted a meaningless check in the regression tests Changes in version 0.8-0 (2007-07-23) o upgrade to 7/7 version of MVTDST (includes better support for dimensions > 100). Thanks to Karen Conneely for motivating the update and for checking the new version. o rmvnorm() now can also use a Cholesky decomposition to compute the root of sigma (thanks to Fabian Scheipl) Changes in version 0.7-5 (2006-09-15) o fix problem reported by valgrind Changes in version 0.7-4 (2006-09-08) o add long requested `dmvt' o call RNG functions only one time o make sure unifrnd is double precision Changes in version 0.7-3 (2006-08-23) o make sure pmvnorm(lo=c(-Inf,-Inf), up=c(Inf,Inf), mean=c(0,0) == 0 Changes in version 0.7-2 (2005-08-29) o make gfortran happy (a warning about unused variable NF remains) Changes in version 0.7-1 (2004-11-18) o use #!/bin/sh Changes in version 0.7-0 (2004-10-14) o a coding session with Frank produced `qmv{t,norm}'. try to check if the support specified by `lower' and `upper' is empty (problem spotted by Peter Thomson ) Alan's fix prevents negative values to be returned. o some cosmetics Changes in version 0.6-8 (2004-06-03) o EXIT statements are not supported by `f2c', Alan added GOTO statements to `MVCHNC' Changes in version 0.6-7 (2004-05-27) o Alan's fix to MVCHNC solves problems with large degree of freedom Changes in version 0.6-6 (2004-01-22) o `La.eigen' is deprecated and `eigen' replaces it in R-1.9.0 Changes in version 0.6-5 (2003-11-14) o check if covariance matrix is pd in rmvnorm (by Fritz Leisch) Changes in version 0.6-4 (2003-10-06) o use new base function `cov2cor' Changes in version 0.6-3 (2003-07-21) o Alans changes were restricted to N <= 100, now N <= 1000 are possible again Changes in version 0.6-2 (2003-06-25) o Alan's recent changes to `mvt.f' make `g77 -pedantic -Wall' happy Changes in version 0.6-1 (2003-06-18) o pmvt(..., df = 0, ...) will return normal probabilities for both the univariate and multvariate problem Changes in version 0.6-0 (2003-06-17) o Fortran code in `mvt.f' updated to recent version by Alan and Frank. This fixes problems with `pmvt' and large degrees of freedom. Changes in version 0.5-15 (2003-06-16) o a note on one-sided probabilities in `pmvt' correlation matrices in cats example a little bit nicer Changes in version 0.5-14 (2003-05-06) o the package owns a vignette based on the paper in RNews 1(2) Changes in version 0.5-12 (2003-05-08) o allow df=0 for pmvt Changes in version 0.5-11 (2003-04-29) o package npmc trys to use 'mvt' which is internal: export it anyway Changes in version 0.5-10 (2003-04-23) o mvtnorm is now in a NAMESPACE Changes in version 0.5-9 (2003-02-13) o log argument added to dmvnorm, thanks to Jerome Asselin Changes in version 0.5-8 (2003-01-21) o fixed bugreport PR#2478: sigma for univariate probabilities Changes in version 0.5-7 (2002-11-27) o use R's random number generator in the FORTRAN code: set.seed has now has the desired impact. Changes in version 0.5-6 (2002-10-07) o rmvt added Changes in version 0.5-5 (2002-07-03) o use .Fortran(..., PACKAGE="mvtnorm") Changes in version 0.5-4 (2002-04-09) o correlation matrices for sigma with unequal variances incorrectly computed, added `sig2corr' for that propose, tol argument removed, fix by Alan to mvt.f Changes in version 0.5-2 (2002-03-22) o Frank added `tol' argument to MVTDST, now in mvtnorm Changes in version 0.5-1 (2002-01-24) o pmvt(0,1) works now Changes in version 0.5-0 (2001-12-10) o release for R-1.4.0 Changes in version 0.4-4 (2001-12-06) o bugfix Changes in version 0.4-3 (2001-12-05) o the length of lower, upper and mean (delta) is now recycled to the length of the largest, i.e. it is possible to say pmvnorm(lower=-Inf, upper=1, mean=rep(1,10), corr=diag(10)) Changes in version 0.4-2 (2001-12-04) o several typos, man-pages improved Changes in version 0.4-1 (2001-12-04) o interface changed: sigma (covariance matrix) can be specified as well o {rd}mvnorm added from package e1071 (thanks to Fritz!) mvtnorm/inst/C_API_Example/0000755000175100001440000000000012444022544015276 5ustar hornikusersmvtnorm/inst/C_API_Example/tests/0000755000175100001440000000000012654131244016441 5ustar hornikusersmvtnorm/inst/C_API_Example/tests/test.R0000644000175100001440000000060512444051457017550 0ustar hornikusers library("mvtnormAPI") set.seed(29) (v1 <- unlist(testAPI(list(maxpts = 2000, abseps = 1/1000, releps = 1/1000), 2L, 0L, 1:1, c(-1,-1), 0:0, .2, .2, 0))) library("mvtnorm") set.seed(29) (v2 <- unlist(mvtnorm:::probval.GenzBretz(list(maxpts = 2000, abseps = 1/1000, releps = 1/1000), 2L, 0L, 1:1, c(-1,-1), 0:0, .2, .2, 0) )) v2 <- v2[names(v1)] stopifnot(all.equal(v1, v2)) mvtnorm/inst/C_API_Example/src/0000755000175100001440000000000012654131244016066 5ustar hornikusersmvtnorm/inst/C_API_Example/src/test.c0000644000175100001440000000112412444051476017214 0ustar hornikusers #include #include #include #include /* required by R */ #include void C_test(int *n, int *nu, double *lower, double *upper, int *infin, double *corr, double *delta, int *maxpts, double *abseps, double *releps, double *error, double *value, int *inform) { int rnd = 1; /* mvtnorm_C_mvtdst is defined in mvtnorm/inst/include/mvtnormAPI.h */ mvtnorm_C_mvtdst(n, nu, lower, upper, infin, corr, delta, maxpts, abseps, releps, error, value, inform, &rnd); } mvtnorm/inst/C_API_Example/NAMESPACE0000644000175100001440000000005212444021273016510 0ustar hornikusers useDynLib(mvtnormAPI) export("testAPI") mvtnorm/inst/C_API_Example/R/0000755000175100001440000000000012654131244015500 5ustar hornikusersmvtnorm/inst/C_API_Example/R/test.R0000644000175100001440000000155612444022757016616 0ustar hornikusers testAPI <- function(x, n, df, lower, upper, infin, corr, corrF, delta) { error <- 0; value <- 0; inform <- 0 ret <- .C("C_test", N = as.integer(n), NU = as.integer(df), LOWER = as.double(lower), UPPER = as.double(upper), INFIN = as.integer(infin), CORREL = as.double(corrF), DELTA = as.double(delta), MAXPTS = as.integer(x$maxpts), ABSEPS = as.double(x$abseps), RELEPS = as.double(x$releps), error = as.double(error), value = as.double(value), inform = as.integer(inform), PACKAGE="mvtnormAPI") ret } mvtnorm/inst/C_API_Example/DESCRIPTION0000644000175100001440000000046212444021253017002 0ustar hornikusersPackage: mvtnormAPI Title: Test package for mvtnorm C API Version: 1.0-0 Date: 2014-12-16 Authors@R: person("Torsten", "Hothorn", role = c("aut", "cre"), email = "Torsten.Hothorn@R-project.org") Description: Tests the C API of mvtnorm Depends: mvtnorm LinkingTo: mvtnorm License: GPL-2 mvtnorm/inst/doc/0000755000175100001440000000000012654131244013516 5ustar hornikusersmvtnorm/inst/doc/MVT_Rnews.R0000644000175100001440000000204212654131244015463 0ustar hornikusers### R code from vignette source 'MVT_Rnews.Rnw' ################################################### ### code chunk number 1: prelim ################################################### set.seed(290875) ### options(width=60, prompt="R> ") ################################################### ### code chunk number 2: smallex ################################################### library(mvtnorm) m <- 3 sigma <- diag(3) sigma[2,1] <- 3/5 sigma[3,1] <- 1/3 sigma[3,2] <- 11/15 pmvnorm(mean=rep(0, m), sigma, lower=rep(-Inf, m), upper=c(1,4,2)) ################################################### ### code chunk number 3: cats ################################################### n <- c(26, 24, 20, 33, 32) V <- diag(1/n) df <- 130 C <- c(1,1,1,0,0,-1,0,0,1,0,0,-1,0,0,1,0,0,0,-1,-1,0,0,-1,0,0) C <- matrix(C, ncol=5) ### covariance matrix cv <- C %*% V %*% t(C) ### correlation matrix dv <- t(1/sqrt(diag(cv))) cr <- cv * (t(dv) %*% dv) delta <- rep(0,5) qmvt(0.95, df = df, delta = delta, corr = cr, abseps = 0.0001, maxpts = 100000, tail = "both") mvtnorm/inst/doc/MVT_Rnews.pdf0000644000175100001440000023565112654131304016046 0ustar hornikusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4120 /Filter /FlateDecode /N 76 /First 628 >> stream x[ms6~ڛN M3{VirMۼʒ*Q_ςD؞E g`LL1YH 3LI,Sb KRRʲ8b,Nd`BHLhb2LͤLoLі S i(m1fbd Ɍ| qf1aPXXfwCJP`dl &K"AI(&5Kcw4.Z|0H1G 3WDdS H14DZF4*HcnDآ1 X!Ej,PH H(Z,,TkJ`rDzQeGX9,Hbi1:PH5 "$Rdeef$+FףbuF(t2w?޲_~qUv٨ȧQ%DpPJICE*7K~N~bI@ʃzy-;.<,)P}^ί\m&^h d9E݌zWMlR,-[MG0M(Yn-Zff 4L\S|>: {HP_~i h(eV^VW-2!{%Prr5'rX|QލDBT2V};J?_^S:GPv1.hcK3IL#O &8\$ M^zKפhrC2qkV@c re,Ac{|-?.C~? >AFƣ[bh*;5v)+H̃|A@Gkj^CW&?<0V@QdH:99;C'}X6,݄8нM'%֭WإZl";\"XӴ/BaGan[Hˑ'YSaW̡FR,WW n4.+~X^Mkł%,,k>/r Y~BHp|mܶ`CôZkj/"hB~i7+ѫl#0kl6$v $U zPV=Yçi!R* 5꠪8 ݓD]e"rA(&Bc'7 9N$3NVt hOhWg7ES?5p?|ɿ?= C0 lI^LH}6=z?~+/>8B_绞6F1D`Ūb + i&Q%BZWTDvB"v @!9'6GEThGAN ]2"Z5ѐ -z5tNZ7:hrfM03ԊJFγy#n/A69/(w_gw{1|m묹d?ͳl/+ͧ‚=bgf#;4?{jv-[e 3aaNY}%F٧g0:}D)$k4O\@wxOw"U%*mg# !m1dB˦Zߌήzјؖ_3pko7ly4(:cn`rATT0:cI+Y.X wh{xRuٻc;xڱ^19WͦGXxoO~ϛymx /ʒ60 NWq<]UDj㛎ǣn6q7pvXȰux5~kmR:;6~\]V+b$V2Z"]!{o;ΉJWdIe#G:=!86MA.T}eKq]N:ڦýi kBV8]Fh]PIh@>Lc:JdJޡ3jkY*§kjYf,^MNd8\.*W_ȅ{V_'!,zPʴnu)*P.|4Z<^44U5eS֥j4oe~K6=]&4F[PNPna-X`~}:Eu2aٰ6}ў6md皞=)m٧A M{Păӝ]. ҮchR/W$'L="Q>l7l9\G3Za,XibYxN't]q] * w\a?6^ӥUƾFO8[AkBcjy/ LkTlۯ ?K=w6yOnI^|QQWY1Ƚ'˅ eTaS]vuF^JLf\RuiтM(.UΛc<RA  /7Y}x=BG~`%/~G!M?dsRV2/7y{}$y$"*M8J:|DWɣ WVu*@mtT5;Vin׫,UJs%Pɬzt|nɝ7%[MmQQ[X%lZج~(ɉ}*x%t7:N )x-R[ڏ*sӨ)6J^WՖ]DuF_CB^GYo4 xBNBL51ko E}:N88vW'-Gm,IiH$9;wЃ&v<ڪ l:mP|\QƱ j=SW#r,!>B^qBui;ܽ8qv'kgGTNM7DEXU>G˚(9Ȯvȝ@Txjj]\6 U.Pu괠;j nXLWCx7x{DNilgmt-I2PB1ҏu{Y$ڵu?&ZִI~ =⣼p4TL,~9߿MgC=r"`eW֖0UDejw_;!Ew3dHjW0?E~Q9O%]';2'TByp%[1ʸDOټYC>4'_y`'-y'-;Gv^%>벤:u(Koug-Z]IQZ @qbRH/};1Ո)?1ub+_`J4<>;;qPKz9R=*ku`Ez ّޣ_n͏.89$%)sQLWw >0„zyS4ڒҧ͖ [d$uK^Q#UOȸΠ ᅺذF"fBX3PyQ̋b~|-E3 yNż'؊*|OR&,_5Ĕ>1^ CYS GB+( P}:mD߀A/ /M0'Wbulhf9}^~I,m(;(gY㋏ep W,endstream endobj 78 0 obj << /Subtype /XML /Type /Metadata /Length 1338 >> stream 2016-02-02T14:44:35+01:00 2016-02-02T14:44:35+01:00 David M. Jones CMBX10 endstream endobj 79 0 obj << /Filter /FlateDecode /Length 3918 >> stream x[[F~a77t*8`HzmxwۯԣMA!Zi/_w3ןݓ{r͉wWw@jwgOE]a&ήN>6PXK4|?5c6&}+ gVܭÇ5:mo] =5 h]vz'jc-- ϯjR5& mA5&"Owjgk!XRexx p7הތ%NIv_k׬ MLڬ.Rb],kldGc\n6k@G#ͧZ7?lve)i)cN]KUvF/yc !&1LkĦ`]M6 s$(t;;`70l "0|,,J@/.x.ӱ%Tv+iD7Խw+gqMG"COޗm9E,\VRzw|( (:kċ޴'ZVGnu& r"j,[jXgu ʆ~9iE.egl)>Z[H }xb*[0̈rwA,@狶/c%7#+5^k {vU%lD[EሜwS[& VPEFIdp EHZ=1*ϴjͣ޻\T@@:'[hTbH$PbF 1RS%~KϢwY8>_ܨvᝫk& BQ6{2輚}!@,@On4:zŞO'01F?J~-zq~ն̀hm ok9Il~+5ybD86Fu)c-dn&ZGʻ*mI۶1Q&#'ˤ_.u) PMb~Yԕ_y8]޴9)CT>(hZJ2^ȹ^Z`ƛ% , #9Ąe].U[7-%ݾ 9栯偌;ncgJN\H%t3bYeA,* ?Nza*,Şc! |4rA.9U+?Q}Zt2VXD>^z$f.sZB{" hiI(i 0g>h hk,FA_EZjURbC# BY UH]Wv~]h• iɿ =(nKzBxQdF%.EY8JBfJEW'*z.l](5ڍP+v)ry\NjjE5a h/g10rUj&'ʜ+Zr)Kyr])ǔ&U/ (&1"hk:.$ÑܖșarMԲTݠIuPU}kG@HmהRtrfkʘHW<)XzC:3{ ٍytH/].70w.kzы=Ivĥ<LhoΙ}d)v}j`s/1PjmL4ԫrO 3.CA6$Oci('ts=k!*LD& W f059AK[Bhy##R=R.w_^se{>cJAõy6"5%դe|$OkY{ cCI`lñMg3˨Hs6sn X3n@٧=K=YR7'4Ad>:@uJzhSGUnT{Œ4S.>h[ԙ$]nU|,z-u% WJW]<l0)O{Ji{o*^)TP :eZ+-c $e#v^si$8$'NiHx&?p2)RR׶ oVNi;Ys 'f)(JĊn=Qs^MJ>"j]Ha":[m`i]@+8SYI* C)JsMHOgXJ _fY*~igļXҷheԹ9>iiK_,{Ϥtntu7$ _W[Xbxlmm[Cf"\8k̤&O3Ʈ:ϞLKu\:A_&?Q R63VWa!fr#]EB׺],90ޠkM|ᡫ$,y*J]E^[7-i-BX1]հIcЭbWN_s S]q431A:sۧK֝'<1kZ /E5SWr+VG3/loz[ \<~N}QS o)>( mhO#^cgvyٴ#f)=C4H˜=֮{SB- Ϸk-`KI}X"V *^Ln>"r!HePŠLɦ~U7UuDRG l[T%{%Iu$^YgZ܇GE]X7#\ffo('hOc7Zv7/H&pv_],yE҅4eMIng'>;1'f ]F.c~v.֣nX9{P Qhb6~3㰜RpXt+ #HMO7hPZEFQzp1淗KԲaكIF ތ$bCQi{{*bDn.``-tܩwNw,|ྐྵׇÙgoyjD)yX6oۙj@/$U[eA!e󬎎LKoۆJ)7n^U굗mZwnk6$ j% < /&vW&́D}TΓS :7|) ;ސX) Ԏs 㙲)iZ11O.1Nb.1}?.>RϵpI(o:F˷H+36;R+B¼K-gP^v3endstream endobj 80 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2508 >> stream xViPTW~M=;J dѸ%Fhu}'DOP/0qAʘQ'2IIM,c<\$3u~SΕ1vL&BV57`짻"\k]98ؿ:%ۧcs3Qd%&KHjZ~Fⶄ,Wv}h$g$FhWGg%'Gg?;Rc^%de-͝9'5c"o_mnbVv}|f|FN|vYjJvMtrv9 Ը ے%$2 #, ^|Et^̪k֮[a7Yaܘ;x1>L0 a9?e^a /|Y ƞ)dPVenS~~}U1bK8k>?5InQiEg=,Rc@*JӌBa19:.x.qL3Bb TCK+Sp@xGJIKAX#Zt/=TvIS܏+ͯE, _A@@p. Rۖ鐱GIq,.>!S5A@Vi|mE wyR+(@FE*9=*6:vR[F|P a[EmTFуC{ު[sv+pvh7 mxXбD:bydž%%Q>؀,AG>2Xx*mړՑU>qՋZ1N&OAA'UBWpz-{i#n\1 Jgyp* %.+04 HH[@O8#<UetKEP_l2+_ i L'%NqFUxV J&~-"c3Kgu\_}8C>RPڛ,wѯױ'-*G|Cg[SMp}.x'Wn7oBYmiŚD R#-&/iWժ[ 8Wfx+ggRҹ>emҰB=5ml. RjM%`*/79IM72%ADVlOaYEgA6gSᢩ< Xj4PvE\8 pttp> 5gY,*+v7ڍd5~sblM|` ɭ';wwj$hE-Xjth͞\ApgG k\.}\'Wxj,y"C7aJ>|6nZ2$M`Y6Y}jOfՋ]G~9^|*`N0ok6_ Sۦ^qbI®%d}m@QhYSKNP|ߴp\ε]Q(zQ)˧#{N;>nHƙT7dʣٚc%(UߡՖ="e36P |&fiJ.+*jg\ q*hT~pvGI|_:;hu4! GE8 OǞD9|D~M'ÙjanR>) ?OAҜ[ŸeTrTFd$ĄNR UOWD ?—#(՞SʊrkTi9ܔl\`WlԐH[8I2wǺM|HO#OeuUNpGCpE&ʬ\BMuM5CMyŢIk#Ul.,S^'/TAs~ث.lR(K> stream xWytSי1v=J,9%a: I !b0%[2%˲eyӾ~wyexbc8`$dr&9)4LMBsmyNJ[S&AM饼}AGDXV2Z-.NoҀJȘWWP3̬=V~]PNA!;`;XPQzGڠ.g n6>+]o B76h ֖ɧց谹* oD˔c4=џsEFR B+P=V ;m jmAObm|Zxs8FQhC?G'dvU)Ձxf[f eȑ箧R&~VWc\Fpt6 _ڠ2VcXlԠ-fePīp30RP7 1bo3yq5ߡ_< {M>f35 6hxG~jXOѳn诉1lur|"OZU>MfOҪ覧O47G a8qj}?A[Q%n9O7wxC{0?/0+謽@yɓn-gr*< 0ɞXx~Z.C3oo"K0{`!En Y=}c71ShE\(ny}E?E=*3YtCT@->-LX̤wo> =**ġ_5Vח(J*ZzdW;1A@acDQ(*=Zzr-=z( v<):p4ɖ '."`(ZKiH̹sg2)Lp?#%4/]owk;GW y d ZgQ%`OtoˁWd%#6$; WIK,ZPY=a6qңOx;BpI3hI|qJ?NPm kfl :XJ|kah614LͼVkGak3hCf1:D(zGY)݄?dMqv**L+>At8@8[ (-#xZ'm4x!ᵗ$JJ%D;2i`WC#--_ru&mAҍ #C@t\&jR}x?>M4 SPR"A8~-fzJ)em#6XV VS7qg^˃Na"ل~G8ُg~κy> stream xW XS׶>1sz*'yQ@mC⌂L aN&A0@DġV^kVںNv%}Z%aa$׊՞_\ŗ%+C?Hi6`+ۡm8^I<#H"b^QѻcBBU @wOϙS=<<#b"+TA*Rڭp{#T~}䄄IqbCOP$BbwmW,T)VD),MyEEDǫb+F2 6?rAT.[Z3!`ٶWyYI 3f\U;lf,02k7f-άc3Ƌȼ,d&3f163YʼLgV0+Ge9f3g)pP&G,) IrC%=Tomf>p)e*tSsڡV]O4A y;a4@sJ'$ȁ4C P6qd&ZxL)CaQ=Ksݢ{ UpJu3qϠ9]T&EIQNCU( 36I?}j8&3SP݈&t1lV=GP)e?cdW_޿DZ"'ȧfmAC+x#M8vܒ0Q.O=qtU'nh}I `TҝHwY㑖pW7@;Q[$G&L8(hJlrxz kor܌o|{g~~ al`*nІqߒak7o ;7 W3Bg6IDoT5YOJpڭ-zdtQ{}X>c0q{ 'ѧFѣV֏R|(WBaJR6--3KY9X!,.^ަ<џ֟ZM,J7 n+$t)6JBn~qi^^׶c#e}= u!bY2b >2K+*Jo Mcq]yy5 &-S0/ܴ]Wp&,28$- +8=wY0K5jXa:P`rؑ IVa'S=aQ/Y4 ȫrBф%?^×x]ÛX\fbof :ulZv2$d /` ;LfV])h\NB 9QTC]VWK(ůHy pr ? _5@W2ŋH ^Dv ;G//-dL\3G*1{R, CzB^rK %cZMv6dqCzQݫ(9-P=GťF).@9+; Aeg}ӹ=tWtttUt\/ ߣ_+zUbdq~l+aMî  Ym1Z_cendstream endobj 83 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5283 >> stream xXiXS1VzljЪU8!3ue a$!JaF SPD=uhժZmm=mzM%A8ַ޵+"gJ$>||&x!M$CxQ x͏{\z6G(HMF~|RRҸq1Ұx&E=WƇJCCXj#5Gm||j5ZH-^SjJPAG PS%T.JQe')E7z$vsfGyyy]{Pou[}"\+{eK *s<xxДAكN5*wcGcv: V*7$|sjm~*Fqsdil$SۯദJ{eY/3 Ч؂LЀ#$L 샃pX{@c$Yٍ,rXM#7t!"BL#(Fk Sd`F0)X[Fk}$RrCz$ZZ8G?2%YmaF^ $A:z鄵2eܺJ ͨ*B? J#UG{o-YGx[ϔG Hͽ>~؈=·$Q4?ߕ޸h=>:qޜ3hy>hp786>r2px7$XP.N>ʺ+FL'?>fx\'/(y Mz3ᔦYs)s i4fm xE[v` ?~桗HrK?< y W/|zf桕`Hټ&o`ݺRHqޱ=-"4 γz>>J{Ii)?ݍmE$ނQHA;ؽc-mIiAqfg`Gp͇wZ LE˅X%%ڧj̿F#LJC.{e{UY}#4qM/q{xZkdmݑ){a9Sdʵ9ybyVIS,ͭT6f^m>6ങvHpeoq[ A;tЦvf H,rY$c%5ӁE5C AUBQRMHTyнez-Z{{Ye2dffWbA^C,la7&5PЪ>mf"c ĨәwJ Jv_n<t}i)Ă"~)\BqCA eeX]*(AVdgބ)u|yb(I*ƼY $Vf&L0 VȈ0,/8jAm#<3tr`+PKsB|d;>eػ.FLH )6ٚGj( ga?yv{,̼@1 p QTJ @G1 m鷦 鮲70RZb ZKb0;yЫ7aT7M'F < 7%  WgnAQgH$ɶtj.IF^+ēd jC>U$8 M2A.y؎ۖ3rX ԑD5DO ,չ*9~ N4܂D-1-9e( OMpǦ,հRƬoҙ kLN ҫ[45[h+m+J*GLjН%R:~SqxR+\ʠ\PRbug~) ʌr<+[l:s-R+%蓜Tbf)rg u2(|(q<]rt!HWcH!e,f]=&W8HUEfkGY72LDF\D;hw!8ÞEkZGo3H|z)7 _f~C;>,n0ѫ ܧ /G*~$`mrRZJ;֩^B3_KX0a?)btrX %Paj2G;.Ҥܶ>8),CZg|G"Nh{؛47YSEd:)9px_XBDƎvu`RXbzF7 3򊡓W< )_w^)Kyy3NdJ~FsJpcqWzKN.mK {2PCn2N]t%E.x?R5 ۪;{鉇[ vcӡz䔀G (((bapD%tі~4>g۬&Qy$zeȟ8g"<@8}rrAC $Q?<ּHd9zPpcz 7WcA0%HK0N>Fa]r.\;nӀYN& ͼPl?eI{Z^84DNõ5a;lԇ y Qm㴵 /XH8۪(nZiBk D5~DHuO۲+̵l H|4ڑ#H}x)9n,|9!:GwBo!rN䜐pG3.1J9#-'Α,D>H_Ө4(=v_=:pc0ϑGD>!u5AZ}L֏xݐW뵂gӞom*Kf&zCQ'6}{4e(C?_v|) J2˒!#9^Kl]WCX N ێ9(Bku ı4,䐒aZ\/ܺ _BXW J: 5LIIP7!>b vmB+."! %$'K)0ѝp݁M1e'3a<4m&_ )z(C+BfM!vexm;-L{JP5*څ%(B'OC-|ohrui1ۼ:b펽lU9Sh.4`'@ 0=_ϭr0痢yB; 9A1T cX+ElpD}Z*# .wd!5]AεmWBZ*}9`Wo{`1(ܬ~1*K͉d suSdvC.tUS>SĘffK[0 nln#EZjFCiȊp)[^ӗK:N*i[+XXLfّAK{O.ղ=9JucPGe[Z623ZHFuBU6&a* 6Cd!7wQx}T|_FZƷ,Tu`K7W6 >>yN ZX?G[g$cKNnDWVޅ}6mփlۚ j?0]blʔUhɛEMU iQ9!O{;ډ#ؾؒ| < [pZoԱ\2@لv2ࢮcڣ Msuj2mmF-_|ؐG|OL-\|(B=ɄiLB|\9bJP492Ғli4KP'^Sf?mJB)0jr<;4v,PKo@O% Om5d]ъ3z[Π{C''O(_]TW$qK0 HRj4>}%}znrm1tVRnendstream endobj 84 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7270 >> stream xyXT*㹂3Xk%T"HGz03f00,X5D1nbF{f$n?9g]](.@ [f8o.BMޞd =jն>rMY AIiCöF8 0~ڴ&7aNWv n^n`^gFDL;622r[`0Fv++ln^ݍ1" sX-0ЍEs  la%;FEG{\wv'n7~ILd]fcDZcRm(j0H VQCԇ#ʉFSzj$EmRyfj>5B-R q"jJZG) 0:KV[,#rVfKPZEhxiC%6Bf5wѮBﰷ'3 p2 uE=~6p-9vB#p@Zj/uRWk&`lڽ'_ a~'я,@SxM}$ɅwdSngSw&w`p* ؆dz~Jm!sm!DY}ڝXl9Q@H`;:R22NMiACrBg_ ܕ/v&)oq U.4:)4@FgR)v&)j!dkoqpT"~XZ#:ct(hS6γ}y@vͥg\䌴j2<` h Bu#[`+,N ^77VR6՟xƈU?9m ziotj`~'9DepșfwS`-t^)UoUKs7->plbbya,ݷ^tƨZhVVZ:TRE?e$IIq!&K}R' xjٴ ZQ˘eJ1D;mK-=Yto1K㩁V [񑈢M 4'#^`q3asl41',r y{OȮCZU]t r\2-}/%''VoUgQUCN25#BOUU5Ag1}}NTFvR ҵ A*ӳPTEGDJ]}T%*R4LfÓx7wEA,zXyO箐BZYS+լ>c1{s7APܝ %C,MF̯xM6]5s+"y6I cߛyH -QM#?d$dZ6;={ک;:+v+R—~+;{) PD3v0}f:GFC6'Ϥp 9|M$Ó WeM "$%gtHW3$nao;>.Ѱ5#/3A۪֙1xfpd"8PǠr+F(e1[\L< _q&͙C=ǡ.y1dьZI ?F'I*uY賀ZQTE ZQLGٟdHUgv9jU0U&0WY~Yk!kpt̢- ,Gsd`Jf&`3ш{<%8iDz-XLQءp!B²dMjR| 4d>c%6费&Idu!cCER%E'@QY][l_`Ag74_G"#m{yӔHtE3E{| ~'EJXTazD'FX^֜W¶-:{t?2feE ί $'F{"1,CEno~E0O/_V!iݘQJTZ,-ULLAbqnYVEIbgݍswJpgz/IB\2v  1b-A~iߺ[_Vz R;@d2_f?Zz𞦃Z &irvabބ˷cŠܦ=B'=GmF[2"~Pzˢ|* _ԂG* 0|:.y>yn2?a=<_ W͕ f"؇{| R|07KdB^ RT|0 ɭOnE_\]|k{KO~%L^̑BN}\SIQC'LK2J?{غiHh>Xc(#MjlWc{*z5cq_"p7ѧzK&<<*1]XXS'ܛ!+1iuʮ\RM qd=₪Q isE"/ܙ#&>܌Ǔ7K/me 9&@$M^\Qh]pptd膓1VAAAAᵵd4&O+GsecڧHKEhZ*@ vyk_a57sƒ Mݑp4=  dl(YB'v>>忄pƠf'I"ըД+W\ R:hJIQ3[5&H`xK(S "S lcGcYvbYA$߮Pep4{NA9aI:0Z8ߖrM`|Udg |R2zKes`,'_$[7zM\SA(d<o/[ nŲdґGU1E$T< ^eSzީ>} tgQr姏5G!3Tա-adU2U)*Ɉ;d,(4-. r6 _ICQ{]P븧K<~#KÝ7[FAAMc'zn wK0~ >36Ia:vg:# R]͡.r=w-F4~ʢ^bj˶X_mu:Ҭz]y\HQ)A*L<`ksyVIfvBr!0KL򊛎m`ؚ]M7R=CU9h4Cee/7e#D+b^w#yz<,}O܁wl%MHfv=.q]9{ϸ~ (T" 3)wrxOXȉ;- ꎯ!(nqfGŇa+ľlM1>[I5sxCp!¿esLg: NaP1a"?N8|A~VM( 0zd3@7r0Zi8=}W5 |db]ei0du!cx460sqK\@OGzL5ahmKfpF +NY\q?cca+n`*S-MG4Q%?}9le>>r"goQ[Ba7}GXz? NCk h駰}N3B&#ۙ"6-Z2 ڶE͚?w=~کȪZvI.zMmo՘VuH,7)7W1l4}zX0ow_^`)'|SwmRtB5x`i4 ?,-&+߇lX>f@xIO(," #^Zt]gks ^{8%VKS [ǀAsQ/ԧ-WqqD,$]xfy[/&3]ޣQ,yv3ҲpSzE֎;,<~ Ox7{cۄDRq<=-3WH׊#!c޽X6@F'GEww ϶6)VEJܮƝ:])XƯ*xk7bE6Mו@mmR빪 =|CBCKB3s9ZV/ ^,ɮҘ[Mp9R!Ei\&@ziB> e4)m֌E0^L%''~B~)QCF)f5ħܩ975 79Iy鹹Z"*k?-oV V+ҿʍ(!P0 -sC B~]m$`D?o9%VzrAMN!LIbb:|mM?|HM94ruXu@ 4)LGNF_(؜ [Jɉk<⢹7&`>] ?2 >K#x` ՜2)"A[Ha|rwT]=.zޅendstream endobj 85 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4069 >> stream xWTT>bɉ%y{jT0jKE#bPaC^CCQkQ&j1Q晻wPzY֜=]25D"d,kD;"û&'pf`.sӆw-{ L[FPbHT&b5vtֶVvrON+'S~V;=UVT:C4SZ6uLZK}BQzʅ@mR͔=zZA}L9#DͧP%%ޢXmj$5M15L-̩bj5!@IRTZdIxX.tiٻfftd&34iP _Q -C [1ppM#^Z̵8cX˥a*aEgH.%;9{:R ~:(提.Ρ렡Q ;.G^k=yX#$=v{v3کg-7VwX#ܝ:Y=/cbbJLgN&Dp:_В#d.ktO+g:-:CN/v al)Ó$$qɐѺVn1đBFAl S) vc=7SyuA1L3h*>rn,c;Ν>Ӗ;._$w#MzkE~ާn~޼Q}j}Хo֓f*oDxr;꜅L'L'R2hrhK'[%j%jZit+ujkkx^?؁wGJװ?wCZ`*KVf.~Icb7GL7w"] OXL 5Ok-0F)}'1Uef*>.L]S偙\zDFDcz۠䨄T]aBlq?>h6zݻ}/ʓ AH(?U ʆ"tV fvwy3Oj|xQkȘlE~mP^B .z]vPw9hd>i!\0T-B 5(*]Z Żm?UPc.}MVKjOO]a`Aaa 1D@:!v^Ejue$,^׉j bH@\'"nEdPJ 4Jȃ"J }85hGNTj\7h4 ':pnݕb.c7x;}S_mFgwM,ڪj+ qZ^STYzN@uB0eEaby򑅲 W`f,[2o{OI/%Tld\| Ȋ1vn12s_]߷ؼr:!>C S[V QUrJ4Ӎf0}IR:D=Ilq89\׎*l}[tcZգC_)Y$Z }'nu[g/ŗB>Msd@u }s!D>Mg7@*A^[&F|WM iy;BGOj.^*|[O- !ebFטKKRMU EpBQVUi٥s;{o p=@oQDذAsM(Qzc@3tDo (a4:9,eaX~WePB085="6!;x}7cృ?&IJ@z|G.ޯ(FzQA̛u"s,# 1ԳyNF KS-2.r8'\zi D&;0saHȹз[%$q6ņFQ'Ti=̽Z`-WbV?Stu׋>'&AW ާ7u"L8/}qA02x2Mu(鳸\3ܾ:gu.k1ftpn t ƻlڳ%sk"!?]SUitVX56^6N'jY@0LJuNV3_s;J?9rݚw..<gg@%SVT}g?ZqpGpy[CC(aP*ŭEC*2> fi@G Eޗ) HJW +sIOw\zL'6F2pO̠3&O*RE$B qietuǭ+:8/ Kchщ 1ThĎ&@L(i.++粱g<##BN, 7%{H x3ThС5Ÿ>|;i?~g?n~HenϻI 8M 'uIȪO`Z{;viqhΝkV81 o1Tt'C?(6w^fFG3CP eFҷ{dlE`Nof<ֱ{ȈEAxfeg@S^ /&(AUX?'\f@ݣSpAblWiU|OfafB$eEBƈCwrtV[];\/ƫKڃQ&ƫ Sx!2WvcR5Z[{ս' ]ڗCN ~_%ٳCvq.~K.b!KE,qt4d 82V#<ʚDZdf5!XF,4 'y5`s&v'%~TH\n~74\a>Hgn7JQ endstream endobj 86 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3054 >> stream xVyTTgm˽7(^"AAwE%jT4&. Ѐ-i}UF1H\(1FMrQ!q<%&u;_h3s?9}UUկ>3xP(,[1 AJ L؁8bp\9Q*  TQ#ծ=]}fΜ:{Ĩ\mPGnP?1+Uթ#Y'&''Ou*q\O/(uI\Ԯol w6c*6~:cH-haz01YPȷqlg]x{ mQ8_p [ٷp9_sKc)Ng@\X%(Kwweɬz"yZp^g Ҫ`,dp5RN`JN?jÀ zɐiU^('l>}4/cQp!2u8M7vTmBI403]fl1ۘDOh-)֘iZ,i6tϊOnΩ]۸v K)Y?Tb&wX#֙Y_x!5q=hZ.\nfkѼå'O0]:k5M۴E3v҂diS;?dˡ,ML{vEIu@iN~5i3DAa:''M]2?a`@:#|X|u%qm/X`Lz%1 Ihv4pcA9dOz^F9A~i~)ZL.R˅fBM26;k֞ Kڔ-d ot#[`5h zH( 8yH-P\%'av=$P[!%%HV?r5llO|(`0LG*!>d&0Nq!" T_ 0 N4:y4xx&x㉒,YC{>~yU*WwI ~@!@?&1یxGLk=x?] 珧gQ%꩟4w@VDv@fY!@ۓWx.u(ͅ[>ke&Vo9ΩZPo!y^.h݈ FmsnkFA-V6Emb9c[+)'N61GuC  _ G S %e,S;ȍI!#RNkq9/gլTJUp&U7G2ihMj>nRGW-~!^|gcVw~ \[Kf jር5f٧V0L8j,|9ǡcoGb?{˫[*Yst~d&'MV,M۴Yk4)`El?qQ~Рߡ =M_\ltܪھet|KnH=]@/su[~;ZL5M[ʷģno¸ i;),=iEWre_h`¤t>-S$׬ ΜΨZ32½& V;R2{ڇQ[jRlF}]BÙGgƗ%rvJ ֬][S=鐑*.4Ƽ|t.Jٻ976A~*4%vcL /{|cMUK{\Yr0[ȡOp$C֬.0.?<ܠ8Qw]pS\ס 펂 >v{]USɡC!y8RN:ϔ;!~(qC\V-@*BtO"B/A9!825v3vjJ.oT L׵Z:EnBsgEoKN8PS^j4I TVdC grc8dt 7*1Bendstream endobj 87 0 obj << /Filter /FlateDecode /Length 230 >> stream x]1n0 EwB7e \%Cd 4DgKI3)|wDZvm6ݖ{C3]r1n105T>C=V@ip^.n5 P.d}PF'XyUH@ISz@auhuAa%QuFVϙ~ULN(< ?ӝy}yTl5*}IMЫT9e|endstream endobj 88 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1366 >> stream xUoLg~_Zۓ!2-uqD&8."0$B8D@p"#BXSb2h4Nm&[1d^lW` >y{_r#X흌 a/e6B^",8DH\#zQ6Ζ_Assȁ P%6ԇ%t}~EOP1eJq8=-+[g.V$&^ʭLHH6Zy[)f&AYع4G*xk|^f_/YʹmB6Úo n#O7Zq)\g`m3Lݺ_6$6 Nos)86 c VtHO''dě,LeM -˖'XbwM5kVlH\`L~܅ b?Í 7ńP-3n\X1JQT73՛`h\gIciJBȏ]4nsZ$3ݢ5zH% %k]اZ'IENV_X60S,EN:+.@̈́F2~(9i2Z \Y(HbsE_;VL)ρͣt=.JZ;Ҟ,w/<]>YK`=H9eۿ+JvRf)`KyPR0RsI뫑D0%GHy iHа49TOW5Hap<4)\>x~W' yuA\E )"Paġ 8 `ʏ6Z:Əн4 ȨZ-g9vT;%h=M0%( JjCp'򾝧@> stream xcd`ab`ddds T~H3a!Sk7s7넾G ~"ȘW_PYQ`hii`d``ZXX('gT*hdX뗗%i(gd(((%*&s JKR|SRYt^}י1y#no~\~r]O9V=׋翛}}5۟'Wgq>7<_s.wt3\Xpso/)nxendstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 329 >> stream xcd`ab`dddsuT~H3a!cOnnM }=D19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU;ML:)槤1000201012{Ϗ=3~o'iy-MrvA Qw;<ϴQv{K^=U=~lc'-b>syx{xslendstream endobj 91 0 obj << /Filter /FlateDecode /Length 2743 >> stream xZKoY\ ԓxzd;d$ H,V#"GH*p(DžBbsytq1;>]|}H@-Bҋ×y^h{8<=xrtԽpRU+&`n$?ҰR:Zz1xW`-Wƙ>fh4!B/oRq>]LVnLUDiz9weg {Zi^Ix¿m=Tu otrAHgDQb&jOI`,=8n}*'t1{BۡR|bО&d4Ktt:޽Ηӎl%H$Y /|cTyH0Q{ԦKGRXԲu4L31:hQ<6<ϕ\o=oopJh =淓$}b%˕dI?HcUڭlEl\ F_Vl l$Efc ؎70O2FhM26by>FFu^TPؽ*擙:DziNh[Gɺ Gb8M![Awh2cr7}mJ#;IB#]+A㮶'sz Qz _g܋*3ztu^8RsZ+5I ;|)Cs U>~,MB}f {H%'!lM7Y_tGbLQr`1Ze0RiҊ@exP/GKp&bm#:>&FGsC ]PB] =2 t BB&Ni!m!鐤-E!O Ifґu*leS u7ul]7 m\^\NBB!R;P2e!aܛ]dmsoMxVmӟŲ)ϏmP|XdR@ke}2źÛ&}h2q M!_^# $=p&"SEq!i]F+-VU7]BOU|F憛;ʒqUTW: ]cqRiz#|c ;GnaDRku$?\M<u}=mendstream endobj 92 0 obj << /Filter /FlateDecode /Length 182 >> stream x]A EPFaS7.4FaQ .@1.gat.SvKA?0SI5i#N8?zVٝw}ͤ%*I IuV$6h:+$鹐 (eTJ %}LS^SBY-vM<~/!V-7]endstream endobj 93 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 598 >> stream x=]HQuu\ihҜPnԖQK=:;ݖUXQo.nD`MlT՛>ygnШ9?@ \Kk給Q <㈍0OvȼT@SƯtdZ h#dbE FCJJrkz7j![ V {eƇ:nEQTqҋqD]]$ZT֠芬ɡr:0j2ڶW[T0jU{P'k|JW (8ꓰŒ.p xXZJ0 jviD?RN#ΙIdP}-=gdHLLO=1<EC {>!'F-L޼K{rj*soY.[O.,zxBVX/輳Ŷhʯ%~.ة#IyZD]I|\z*WU󙆆TOu9ڠ߾-ed,ԡqX2'չ{~ W? $5S8V(ԋu^+ endstream endobj 94 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1058 >> stream xL[U+Bm&H?L$04[Xlbj Am!ki{'-76h&3-Yꌓ ;J|@mnN9|Ϲ $uʊ5w'BW곶V]w4= k2!}}ɟY%f$%y|!$J&L#(˔ ,N4I)Ml,bF#0{&`A,(DL'3BQLڱ}.=Rfcjv!#0)giKف|hfupgY̛:b q\4ӆ8oh(ʛb;vEa)ӛg;,DAoO%'endstream endobj 95 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4480 >> stream xX TS׺>1xPTO%=uXE`6LĽ^秢te~>ΡC|An ,w <^Rzqb$6:FFĨI3gN0yęo$ +å1Qp)^%MxcvT8k„=ŒQcRc1DIR"EQ(1Y% X)$19A 1IG4%5D_b6GDb N1b$-]k/1b-A!ٗ4>%> {>ܾ5~;|IFxkX0A2_.}3K|}Ӹ~\5p.7dVKp+ Ǒ:1 Hr?a:/«-ټ3E )f>72܂:4:8R_{1%t:5}QUVl ` }/CXD}0ArJt]Ʒ>?aIn# W}J &`l9Ԍ\S+24}aƣahڌĦ,j{2 Hl"ɈԴ-7caɁVO(-r2D$q 4'jIS9@àϼ+ׅ&%uɚ'+Sd@OGJEyV蓶38y"&MzŻc7sC;ЃB6͘T1r{8 _Sml lr{Pv-ZHNhvb;>s*Sel5BPi=lXIi HcKon<FPJ B&c šg`B| 8]|.FGUoY8s̼LFi[((tk%qhm" \&m|1PQyEEA*D9%֋ظjqekɺi8,=SFM`):PXW(̪ Tg<]tVŃp[9) aWƉYLD/H@.u^|K_tAhټl@mEPP>;I\h97YS5V=riNP`l\ᓻ#pC|SP 쀺dB= AD&@_V4[Q5z!Y~T /7/x6xl:ɳvQL%*PMsc>gw E}IY'#G:?T+@l+2P ~|=@8ZuzaXVPumv`2fYHP T[M6`Ly:5Yf#>9 O1fP di: (4Z~z-CLEӀMHdv7:6?3:5){Wn 6G k}\1|g'd'y([ 74U[-HyRG'/IyV|_wkl4 <ႂ$ZƝuڀ9&?S#Sg9I)tKipUbw&|=hq3[5\Z`P77B h|N'yvU'Jٮ:h%MY(>|\siG[VIFdQa;5k[{g982 uzP 氽`Z&;Kp6: ŴfVn\ x(|9cVVJ]HmUkw ~ƕ%)Thɞ碨ۀYcN#-2[uJ]>npdh镲˖+#)|P(R ؜D>٭<׀ )V.^b5 !Fo G=A64opo0˭S' P~_xX/*m)*ZdIB^ҥhRe8[*2LQX-^-]|/IC߂{s/c&>TeT;jj>u<> d2PY::ΓLtD%^֓k< bY!:1=;H 1a̿[sjYydq/6n3nc2l2cEEUj9Sr>.Sgb ~=|8t6:ORJjKvoߺo!Wu5gr]D޸G|bPҘUhNܯū2j]RT m;’㢝)M/`Mxl{WH_H3P&P_!d5*UMs82oX >y+E47=㱴>W>ŭo4T\绩sOQ-(sKvzte| &Pwendstream endobj 96 0 obj << /Filter /FlateDecode /Length 5529 >> stream x\KGr^`O pa khek}hrPEdVVdVUIـ!ӬGdD_Df5郢G/~xxJ\}{Ch`!N9*}xtcà[!(eS>~uu_-pM3$nStSڤh8'VB H*c5n w_Jna&87}|5hKUM  W%J)}~V]c&MֶOVZBcϗ~(NƜlVW%2~_Ip. )z4eYq';(NNY+Sh&,j7'i4q~YEnyI[,)g䜰g>&K?߬&^áxhbUe29&Pڐh\=TN)֭~B~&w/ v{[`PYvKiEǗd_*y; .-2 {Zb9e;7s̭l/ɍ gZB?{]vW$& 7sYX<]ZJaoعmJG iFm9hqǷ/ Ag Yk;?{Pi7pyr{bԪgv'+)#=:näO{0.6&->l;E.9WGva)RǺ.׼suiUNß5ӵ $qۇdYwmᓃa>dcTS7!&uX72\/EJ(,{&&փ .=x^xO\<=8gWe2Ë+ОB}A@f:_E>POt w!b-E0XR!hŠyQF]C 7/,s_C5 mKSUb-2=Y*'εftܐ3O> %%5|z8 Dĝ~)te5<{ BLJ P 0z|4zY)*KLUF3sWc>; ﰹ=/j轤ϫB(E/A ,Nڅ mQO]ae9FL7'n!k={8uC;\B̈́*>A[;=%=LDvfJV7zbr 6l!n!P g 4{TBT\)U2i?53aVcnE^aaG˃x X`zރnõJ{$ISh:un V= 5SLV􊫒ɧ_2Qmh hgs(,[G.t}~̨,`ɷ]Ϣ9T#j&%N mݺ@CϜ@+\I/p:$Z*!&sg⠱ Ud6F)%WP/P :1[ +utYbI1s7xcKbw]B~]Z{hY&Dws=C~g&'s< 8RZBJW)5`O~Xt3]t;#teЮ Ab4qX, v}c>/y ςeƈ4;Dgk>#ץeHL4iY^,Zj7V˖:im!-(%GUQKֻIԵU@S`}m=PLHpr…HOЮqI-IzAr\  {͵dv)+qO沋]{'P%d?y.Bm@'v{AAe7YDhYGԓʨWd ksW79c#jzz؊ڵGS#oi'6NthN;19Lu77 W)沷#*'ﶬ 2\i PLˆK{qNDЍ]DZaQqfݭ <jzSgAbiXjH.t)4\Tt>cDB~g0)j.+(Eyҽ>p]/TJs@+4*TǠc?#ONйDgaޛyWV菒@i-tZ^*g(Eiȼ:<"Ɯϯ׳oMIbikQ /i! >1_H4Fb8brsav\_ {DB7exOc|h%܇}K m0@欚+WIy_!r z'Q} ̔Ne  v { ʅN? zHXvn[x5ԁ(1hԂnKi1W{\V/FKɛ/]c9+yEcI;BxcƌĝSUm5@%h[n O^}k9<6w|A{B /(x7ҹ^ }cEz>>Jhe:0k}PR_DЍN5B:宨1~*@rh 02(T׶ՊD]Cnf/=乧yf&6IIB^A8~sArp\ؿ$BϢ1UDKax%utM1 &Ƴa"ՀՐ젡f)"ȫW!Bq )Ɨ)@iڹH!2[GeeQ͡{l,0_obBŖl`"t`sKR/ݡ@CKMV+?[O)C}AxFo\%4oV|v멥 Lɥ7٪ R+K{U/Ժ~Nv]&mar(JkǙ\iLyI6=\c8Ƈ.<ӁiRgm6/un< O|̃SHxriIYc*>#veIϽ6UH,#hs+ 8;}1Y]'ev婢*b]=ɛ'gpJ ' -trU2Iq_ʂlܽ]DIJu<]}8jUWCQyA*_|J*eshݬHp<l(۽h~[o@>>:]$ WU1jyͼbHSi _!k#MP1MY˲rG?<6uTI/AܻqTuטҏE<:^d~~V"h}@SjeXkPFpW+-p(-Y6  ٴxj=^RSehOS0^ L9x6y͙~%P 3]ۻj_GaBbk(uۂi xe+x1нHS 貂 oy]˄ )[[T/ v?|άr/>50RnNݺSS)Q^XC!Sy:ҳ{,fWopO2 'A" 7pۥ#lءd>bNU :q6I,\* b Ҏd[dE7/C=Dٴ"鼎Nlk KUz˖.?x3@uaZkSr(!3?ŕJB_-twYM/[~+Yz2\!ky2--ch鼮FS JܧsDOa=\,vuM> So/5R,3@%M gtbwb.ҽe04[i M[T,HC|fٹ^*]$L܀a݁DOL ipx;LsGUendstream endobj 97 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1437 >> stream xe{lSUom` %031([ۻ_ve6co|EcĨ;&?Ɯ>~ $Iv~AuW J"Y,EȂ)d,^l‡&$M&FUY+VЏ_v%5Mj%Ph[T+ޫP)&zU,{jU u*-SqJQV{uJAyުհtB୺3kպzV#JFU)4A VqXU |b(J~$I% $Of^Td^2>kR;7wK>Hk%ى$:@K|1'6Fe=o9 ]EتW4:E8aksr&x-,dtM*)9yC*,ۺ4''?tOwǩ֫|NAx{P Z,q}#X["~<0@bݟ;&fcqA[^txПũS.'6[8fj.ZdB<|C2u7=RiF\q,筭Дgpڜ 'K>!jW yK/߅K_v^ްR_Ov)L~<dhH&Jʎ]TJ߳@$^K]Ly[S3 IEerYK+:aaV7n8|ƣTx(<14Un{_dيW^xD!Ͷ za/ΰKkm5[m˓wpL?a#X'aJԩkd09Hʿ KvL>3 A;o6htLE1sF-o-^ݽ_7$GMO1WAn=;kӦ-Xxm6d`*t`m):SQP {4D7:.wηӗJMhtB?@YkУ='oWٺu  $oO,(#_A(4ww Y U4TuѬ `oro7GGr9H6qVɯOBK ڝ>[s+$ˊqa-bضt#H\ڦ?2T\q@臘 [xM*t'9,CU˷\T\6+~?}z_0z$Zf؝NRzI 6k'NF o > stream xOuh{f霆8w=l &:ɶtvscbZۣGK[Jp+ d%K#lDcG{=v_w^gw8mp'SGtr@ҶNz 赫?=1-Bn/utm_>|~˰nGmڸf(}#HjZ鈛sLaÌ~6/C?rk{]~o`cXw07a6yaXv/`AaO(ym٪pt.꾣Q}O0DƧcK'3׿V_zB8tFaKzYjB =zn.gXds|iri6QBO(HbqDנEe3 yVf!jz#4 emY''C9va(ry!r2r#nHCTlX~ da Lv iB8RU,WcReƆp}k +}ߔqn8o=t4QT|DyUTMS>GMpټs*r4Igg ?A. R!O*%_^^ti;7f<!?Cidơ_hEl. q"//BP"pE$(BiG +0,Qqqf(P_}V2#yPNgWɩ)uǨڣ~Wc?Hendstream endobj 99 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 443 >> stream xcd`ab`dddu 21T~H3a!cO]nn?G ~(Ș[_PYQ`hii`d``ZXX('gT*hdX뗗%i(gd(((%*\"s JKR|SR Ab?M?o>҇]ޝ+ڝ͑¾lzٳTR> 7Qޔ=c<ȨߟgxwS?0X_4ѳժ?wk=9jʕ[u_.oߢfZ-Y1wºrxa[+'Woߍss$-<{ ~'Ncu[|>I<<20Fhendstream endobj 100 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 394 >> stream xcd`ab`dddsuT~H3a!nnM }=D19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU;ML:)槤1000V00D2012S{p|.]|%vuw7uvgQg:KXluQݕP%ٿv-[ŷ[*mUOv^6;wV,Xsَ= ƕv揀iN;n2~|r\,y8NηSendstream endobj 101 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 269 >> stream xcd`ab`ddds 4T~H3a!<<, w }=D19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU;ML:)槤10002&FF|¾g.3%t/]Z]-pIly?헰Vξk?<<@S%\%endstream endobj 102 0 obj << /Filter /FlateDecode /Length 4118 >> stream x[]~XXWPETMRjX@*f #w>>nB"^_{<3yb#_1/{t~WvuzuVxq9:_9-q"_qaFc8?:VjQpab\ lJrWkl:uf{h caL:?|H-Gw^Dz4N0z{1j7"a. v3o?qv9dG!F"K> kz^ç8KnM#F6 愯?@܀G|ЮL?;8|(iNY=l}1 x93 L9A4L/\PChZP j;8c |=NHm`H\(COְqab_^,ly֊aYv0\! 1hmS3\X0hWq$p3: ?Nz>CҊ+Oځ{ggQTn̰ ZrqR~-wuXicS"2,\0v9Zr Z k'k:ku1a@#5KH$@z,N Wd~5%]&Z*, eˀ^ޏm EXG88f(&1KTm l`.;|hBhDo}G`x זyW@yLǭ8']dTѧ"ȹud5DhBay[(-4~˜Ѻ]Ƥ9%GO> ]Þ/:X#u 73ƭFD1TqRDxjls#Gak/iнHi .xp\o^s8/"ԛBjyAEX&[Q%=!} ǝ8)H5ېa!d^}× 3=n6*IrcW&LɖZl~L $SbXROC/a|8J>*\g)ޜ835 dLD0{lCb [^p `@I\a;-()DILS9޴JJZ܄F`$MlVBT#W 2OC`3XVox_wh_>A& 3,rΑݸT y2uY.g8FGK`#ZXF3 %ݷZGY $} cKg LjbE!!XSe@*+ېS!/SuIF)\a+^}nr w?]wnGcMܐ*Q锝dJl!iLP`,sgSꠄWIp^,ݩOHX oh|`Hx!ae&t"`qNV5מϖ MflU4R )GY;bjrCUEz&-o6a="^$\]~FSyĨ#]9X$p\+NW Ա5Eq˦oDe='.+hia %]yRWr.F\raK䔾)FFD Bā;*LUo($E:t!^afb/v&8spl}T~ -954tSMvI)7!#˭K~xl\eKc(}+hb|-Akw,-}@ ϿǥZX=k¡,*hN\3I^ws%yk5 Wj*ΉrbBeY(k{$ȶTnd, ƒvN,_nnp4.JMEe1 {Ӥ R b:'qqE},ųb'ҡ6 ^U'y=":m o皫 (2IH`Pn{K['Cȝr?Vn0u )jl:rb6,5 Tgp e$0wKqRU$iO&,nl,fP4z% jx4Mpտy`gf TDJ.旎A92ZZUbCML-^n XYYb݆ DZ0>ńp_1o9 +@t!SeNKY=?`O` }+ AI{:>jz^|IԸmzJJ3_-xI2Bjl!Ȃ!հ#& ۰[Sm6#ͼW2\Bo 9sԚAq3cy/"YHa~ǵ2@ⳋH?:_?]!F98'd <+f^njIw7`L̦xeQB hc5eҡ"5 hw-2-σVN~*$&AN䯱po!<dz=ƲbeZyyCBw&a[ aVT9,!qnǜwں"F }}$J9{STcRͱPR?OI^ߢ1*H 5fY7s8|NLѼ/ C&f,iۋ͜!11NJFE:){fo%ʁ{kL^8 =Xq\XEka*Ґ>+GQYQ Fj?KTKE.tzξs*^UÊj.({u=g[!ϞǑV/lP|d'ck:C[  )J|Lfݾ 6|&vo92AJ8|?+V)+'_?gtu$$~0)~CdEhJP'QÀi Sdr_ Z|75:qT~P> 6  8q@},ޱqU]!G&³2$T/ ;6N%wR鍝 ע{j&>jX2~^16 JƔ g0tF\hS`?ܔޣ^q(MS7};>.Js[}s1,wkd YGk*Sm^7=|sb:v^I, K n4%~ͺ=6H!{u'/f6dw^eiO|rd@'elKIi>.#W_ubKc {e|AoU-͓> stream x-OMhQ|q[*5yh-$HIA+RJ=tI&7M6b66$&ɡ"<(zSo Ou{ffYLaz/s7yvюcfHkGZ3gYP~:NoCfӼMH@nxz)ۃυ)EGBGvm<"CI3AB.W<w1(x5!&HS#E^ G' a8!HP@7Ȃ9eldC6a;u^E4v'sbu:/#k X{ձy'MܴMAoXaFK룯}gP/(a55Km P)JUtO7Oj'-@}1]L0 i$*XC0m~-(<:T+CRHw c 1 @ OvQjrɱ,+r.I2sP-YѮݧVc,emko$D) 7endstream endobj 104 0 obj << /Filter /FlateDecode /Length 3628 >> stream xZ[\~J7lQrxuPI1 b@x&;;6`|s:C Z׭yvF}H=;X`qsTu 83!(eS:Ճ |&~Ji1z f& ps9hH*6'g \ rF0Ft Ǡr@U)IU<0k2R:;wV _Ԥj0L+R !fZ勺gpD4sZ"IN~wgF!'7WEn6Ye2Z{ ʛ㵱cʰZRa8eXUk]u?C:]Wu>jEh|VOpSNX:8F{<:qt]Noi׆ԡf[&ixNPvË:ϻ=Vk/~V7Inp\o-C<[쏤F:#b ":h|=V+N{HäM,Om>  тMC]fjm3%:iK߹> ,kzkwѽF_ޫqJd~L@AOKˮ5/&|mzn PDiL掾߬`ԝuuh Z^{tC$ߪh.Ĺ8{o~nvw C" }DH |]JQ_ dNlCBs*pO"a l"Ǖޠ6QhC?hH2KXuFSrkvjDg7yV*4w!a|9]@P&\T t17]<+!+&+$E:y@=Vnͦ颵uz\rŗB=Z.'{ zK|U4VD֐zBs t8CVFG!gXO$z,?]L')i F粙RrsՍzkPGfoä 9u:o6D9rAr> f\Q"\vw=͵%L[OJIjZ;@Wfs/nA+mE+z! Y-+8Ӗ K`55%[CgR/H:j 7y8.W={q%χ﷉P3Z9\#vQ>YāQ5Ul0.LwΆ\熩W0 ,BqaVVaNDErqnᰶT\DQc*ܦD)0$S@DyLDs ! #7 g'= =8[lU6X-F&cTJeu *h9!Q\^~^VcƄ,Id2dF˭K$f47y1u>mQym:l=f m1@C7D'A6ם0F"є|gU f=)ᒚ6A֚9gptC?-Px8i5` nlf@3?w*P CΊ{ſe0!HS" 방AG-૙BZm$H e1@CF? ZLD8r {zYNv6jC΀|Iu}ơpϤ9g3JvhԀ"1{C$l)v *T@HZ@+f/@k-y*H*UXyŒ*HS#U)|ZY[¡oY#/Pzy:-ⳟ+xUxQu5"̢0mPn.P(ZeYz:ojT<(9ks]mTdim!@ PZ/;])En5tƦt*w#hOqb4o99oXP0]4%Kj>rD7>_c".+zڗ<Su1VdrGkvrn_ w|!X,5%c`FvD+7qK>%r9IlZ!SiY>/c+rbiz؍y4P`4mǼgWQeBUHvzi}sSJpDd 3 @yNEӵendstream endobj 105 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3424 >> stream xWyTSwھ1Ki M5s/UֵZjK(bvȒB !{$d!  A"("biE3Ojik3[mԞ73ߜ<"O#X,֌M1 [W]`[ĤnRC`L|PafŪMaS8rڵkD>bȍY"~FZAdLZQNV~ZS**eNQb/r"_:%*ʌ|UPP#-?+reS/,Qd 3KT@DƂWEJ32ew&/%D,#N""vgWįīD4Bl%bJ8 =V4 MtjcRIARlnW~.GD87y_9áy[E]`Xs#ck22{<$/|Z1s  fwnlTC35.'6aҗQw|0P.#eߊ|ܯ.ba|fbnGce}nC쮳tc@wĥ/̍ $24R ,ӟ#\c դ`W5 ^ۘz)Pt&)f*Q(ЁSh*P=z/sh^:FO|U yfU&ttX_M1}hx?h݄["}-8 rKus%qO([XoR#xLdcHPc,7>:*;5>Dk^E* ֲ6PgKejb?'-(km19NvB]k!Hdsj3eN7܆f2Ђ^)(~V/f&Tfd7֊=b+#LyJy C隃l'd5;Pt wχ65ażFnB-NK :N/XxeHQM(y.d5~_lbZ)xIG2eeUTIu =dC,#w8Z9;\h3T։UJ= 3)}UO"(O2đ#NfK-4R0Q)j)1 N]APIn.䪱ݝTîu#Bâ,`(VS@B{R=Ş|߰m6 uYIc )A:SXzO ZC?O 9^e`T}no]f\G_x\D ν%G&sU| ʍ`,f h=p0yٸxen̋ ۧ/l{t`PŬݘ>hif2S3֝/2ZMރ UFl\zCkuP܃ N [l!n'NiK{o8wYu~g(JPR>-rhpl۶StG1ۃttBdM -SNa0(eAn OS&BTi}DqS_gmZ ٱ.hC!ut^}p.!M) O5^낋`#>Yټ9.9Vw!)f-Cy&x/anw11ߙ.{=f[1Yܠ86HoI_,b竨fZ`c0w9ܝYHWlP,ԶB)uHE"qN@I~'y^ę c>@h97q#(8 f8M *ǃLյ4ǩO8G g9IX 0S1L=Pћ‰ߢ/F%k*%>/c_ jz]XX'-4RV]z*Z*2aGj3D1O>wȋlSX`T'|=1;5kt~\N 3Qw?5 UkN3U]ׅuLkt%''?ꛪ0عo}<7܏nS |G)3{ ea|F[YKbSsI$t *'bEgnAOWSkE\.+&emSGaf蹢ޘ@)Oz~ec_xaD1!myuaټ3v]}S,lr_|z`C\*Wh5]}RR)d/,(bϱ>AV6zr1fj`OI*ЃBHb4p4 ߬Ԭk̙Croendstream endobj 106 0 obj << /Filter /FlateDecode /Length 2974 >> stream xZɒj}ɢEdYG+|hr6ff8)~.dT&m] &+Hd+3ڕ?WG&#?\^\Uk6vu|v$ڕuiL٭Rceu|u֛l3c]LC_kefMl1X1ْSt2Ɨ:|\\],Θz \oc)MZs }ï 2{5֔yBCB%j-I3E|k`پYTosK)8\pc5OZV_KZZⰽ^o։5:p78\s7;i>ЫnR|L-qօl`dlR(R")tswsE֮ւxu-^5Ӱ)ƣn}%V-U|uvTbdS1" m81R,Fɴd&Q_^\K̾RAyϹ4]_!Džò~rp3Ӟ;uhcP*ꊆTW^.>/.zqnRqp.[<%zx8A iY>jrOUڥx?-RE(I^jFU\ŵPri'|6Q?DnT*8@eBZ|}ӖqccA)ue-"\$X"ʷpE2zǀo1$1bC aIWrGi~Wc!YXQz0~l}[)ڔt^!8+ a0K㗴7q+j u3Aŝ h^BMߝoHk@*%޵ Pv-wBPTvRskf*")9QĔ) 1?beu)IFƹp] ́@; yC3 8k)veO 8O8תϑ P=pd2Vm;e/Nm *rLZk#%i*nY yr#lѺG *X ǒn:lw%`W']H{pN8MwⰙyݱ2EnLZO"GEYq(([O0;qM ʁ虊 {X s=-*ASMMumSY;ިp@;*NrLWALkP@fcAM%7.BJ: BkxPSX^(WnBx"ir ,(D3LfײAQ r׉TLs<HIOOpN'xMb2^m۰ӕ{c rVN7 }j~:i6 e u!AQJNE&vob7`% E#Ӑy}К QxDsVe) I:=M @[Je{tRy]T7Roysmv|+iWV. "y4aڅT>nhzA`{$@ Zcv#~1x ZzĶ/Xpv>lIYƠb=c"BDr(`#=^ ߰%QpRP_fY*39 g8u]'V9}TqhQ :$Zd;E,(IjqNS7Dq \|DSR/iR^~b 5UC'5 ~i`ӏwVmLqY j0dčs {m) MHo=ك\},'`Zu)S3A F"R(Krp jBOf?bL7>6SyZ[m><>_] +_4pۇ/r1g..:;h%A4 o88qSxR;ӨM@dVEGZ%ʯDi+wC !up\J.eRFkeYi}i4Xyn4&zVO5ΐIF@<54-jQk4ne:c̶%*J.)-ɧDGrlSJ'j3,ULaHoJzߨ H6{} 3D czR5)(. C2^ ;ia=(4nl0&J߯ gq!?c`ZC$^-񁌣r[PQOf^u+VfHKؗ_wKr6Q&0 Q4d6*],셔qʥK懀>=ؗZRrH/pm{t! qp#{9-lfnby'}Ou-/ok] \*Iy׆!OȳUCr: ΂qteF 5.n 7]J3lVN> stream xkLSgO)tGdut&yt3 *ހV(^h)--)S Z urN#&>>l9|Al˖,ه}9yO>?/ KLh4#' 7{a{[[CM$HCJbj $[PFrU qY)_Y_nvvf{[fs>eEJNW Rꥂ/,*IҪ홙r<+dť;7lˤ|1'9{R!y-3G(Ĝ%H }.4 xUW!3&v5Q>r7X&rge<Ir[cJP\NJ9s=1-+%;H(5$H9-WsW-nlUx[z~+u|XNb, xPVB.:AAM$_'MSGoCl(܀`۰4 j1G;@+;7/P}(3-Yz#XZzPEIYMF4WgեZ+84 :)_ Dʢß kTT7!lo˗xѽ-d.x?ً?j0yuNb^}.S#xvFX7ж_|a?-jޜ8$XipG::ϼy V*NhP7~olk/S[:}o \B=5:> stream xU{PSW"mmUEVUA+" $$" <R/_hv[SJ;uǹ;K3w3}~DxĦMA3_Q6o<x[?y2Lډ0ZWdtlt~PТ9AtyJF$Jyz"+lҤjd*9#e 麹䥳H *V)(3Iҕ5+].:utgJ#4IL5aS՚LZeHܑ$W$+UCbX$}m¢YX °p,[Va5ػX`iB-01bf£(Rxs]"DI$l2˫חŇpaz+h[|nA/#vj@jJf. vGT@[0˭U(R%;-cnBNi x ٗwjizH5q">NUTv=hyV Hn ĜU2'l{-dZ^f1{5TJL@V]uv ?NkU3O2T'tm/UK&pqqZ{Pph=4(KKZ:ܣD h(NO*@uZr}L郎Du !#xV`˧&PF!ν>[:IHs#tJqT4ٹԧ -ݥZ [ihz~ϸ}졖N`z=_ s׊DXHd1*FĽ91VM3= E0iuPq?m ۜDģ&-ϊ+@2(27+e-1'jj6 zpDn44mWR_REҼsBp4|BUSԝ;H?-9㭇OJkA ^LYϠ%h60\68c*;hH2FS8̈́PY2CrGQ;v?;}KFAg7KnAtk \Cd 1$4qp6ĺ:kNb@y%B?*Q_>|콴9vCw[">n-4$(37h⏄/*\#4l/EՒTk6YXv-'c pk6U9cxPv z]T!FAe*A%8*5Z ZwmFRQ}pJZk5ZhjUJ@-TT ͚ū&r?"8:B iwv^ܙ˔ bيuv|y}c ݿ@h _llFòMk54h(ͺmx &$p' >'EcpەЯ\= v8iH;rwXb{Eؑq@1{!=8 OoS vǁ-;OI)Tg5@ S\ppAvR?A(.A\IzB_OWsxa/~ hD*dڅH ݺS' Ј7D4D+:>xJKK:؝dtlr oJo~sg{B7xY7.RQ!ۣw LJo/@ӠbP?/ ypNa"wSiM mZUFGaH9Kq8qۋvxOBkendstream endobj 109 0 obj << /Type /XRef /Length 141 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 110 /ID [<84680956b06aa6ea0cecf68275ec47e5><7fdfa1233414906cabaac93ed303f2c4>] >> stream xcb&F~0 $8Ja?@V A$ R/9< QDmHE ,D2,5 R{,KL>J ```{_f# endstream endobj startxref 80394 %%EOF mvtnorm/inst/doc/MVT_Rnews.Rnw0000644000175100001440000002267112654131244016042 0ustar hornikusers\documentclass[11pt]{amsart} \usepackage[round]{natbib} \usepackage{bibentry} \renewcommand{\baselinestretch}{1.5} %%\VignetteIndexEntry{Using mvtnorm} \newcommand{\ba}{{\bf a}} \newcommand{\bb}{{\bf b}} \newcommand{\ta}{{\tilde a}} \newcommand{\tb}{{\tilde b}} \newcommand{\bab}{\bar{{\bf a}}} \newcommand{\bbb}{\bar{{\bf b}}} \newcommand{\byb}{\bar{{\bf y}}} \newcommand{\be}{{\bf e}} \newcommand{\bu}{{\bf u}} \newcommand{\bk}{{\bf k}} \newcommand{\bp}{{\bf p}} \newcommand{\bq}{{\bf q}} \newcommand{\bt}{{\bf t}} \newcommand{\bx}{{\bf x}} \newcommand{\by}{{\bf y}} \newcommand{\bz}{{\bf z}} \newcommand{\bv}{{\bf v}} \newcommand{\bw}{{\bf w}} \newcommand{\bg}{{\bg b}} \newcommand{\bs}{{\bf s}} \newcommand{\bI}{{\bf I}} \newcommand{\bR}{{\bf R}} \newcommand{\bT}{{\bf T}} \newcommand{\binf}{\mbox{\boldmath $\infty$}} \newcommand{\thh}{\mbox{\boldmath $\theta$}} \newcommand{\la}{\mbox{\boldmath $\lambda$}} \newcommand{\bbt}{\mbox{\boldmath $\beta$}} \newcommand{\muu}{\mbox{\boldmath $\mu$}} \newcommand{\brho}{\mbox{\boldmath $\rho$}} \newcommand{\bdel}{\mbox{\boldmath $\delta$}} \newcommand{\Sig}{\mbox{\boldmath $\Sigma$}} \newcommand{\Ph}{\mbox{\boldmath $\Phi$}} \newcommand{\beps}{\mbox{\boldmath $\epsilon$}} \newcommand{\bbet}{\mbox{\boldmath $\beta$}} \newcommand{\C}{\mbox{\boldmath $C$}} \newcommand{\V}{\mbox{\boldmath $V$}} \begin{document} \title{On Multivariate $t$ and Gau{\ss} Probabilities in R} \author{Torsten Hothorn} \thanks{This document is an updated version of the paper published in \textsf{R} News $\mathbf{1}(2)$.} \address{Friedrich-Alexander-Universit\"at Erlangen-N\"urnberg \\ Institut f\"ur Medizininformatik, Biometrie und Epidemiologie \\ Waldstra{\ss}e 6, D-91054 Erlangen} \email{Torsten.Hothorn@rzmail.uni-erlangen.de} \author{Frank Bretz} \address{Universit\"at Hannover \\ LG Bioinformatik, FB Gartenbau \\ Herrenh\"auser Str. 2 \\ D-30419 Hannover} \email{bretz@ifgb.uni-hannover.de} \author{Alan Genz} \address{Department of Mathematics \\ Washington State University \\ Pullman, WA 99164-3113 USA} \email{alangenz@wsu.edu} \maketitle <>= set.seed(290875) ### options(width=60, prompt="R> ") @ \section*{Introduction} The numerical computation of a multivariate normal or $t$ probability is often a difficult problem. Recent developments resulted in algorithms for the fast computation of those probabilities for arbitrary correlation structures. We refer to the work described in \cite{numerical-:1992}, \cite{comparison:1993} and \cite{numerical-:1999}. The procedures proposed in those papers are implemented in package {\ttfamily mvtnorm}, available at CRAN. Basically, the package implements two functions: {\ttfamily pmvnorm} for the computation of multivariate normal probabilities and {\ttfamily pmvt} for the computation of multivariate $t$ probabilities, both for arbitrary means (resp. noncentrality parameters), correlation matrices and hyperrectangular integration regions. We first illustrate the use of the package using a simple example of the multivariate normal distribution in Section \ref{simple}. A little more details are given in Section \ref{details}. The application of {\ttfamily pmvt} in a multiple testing problem is discussed in Section \ref{appl}. \section{A Simple Example \label{simple}} Assume that $ X = (X_1, X_2, X_3) $ is multivariate normal with correlation matrix \begin{eqnarray*} \Sig = \left( \begin{array}{ccc} 1 & \frac{3}{5} & \frac{1}{3} \\ \frac{3}{5} & 1 & \frac{11}{15} \\ \frac{1}{3} & \frac{11}{15} & 1 \end{array} \right) \end{eqnarray*} and expectation $ \mu = (0,0,0)^{\top} $. We are interested in the probability \begin{eqnarray*} P(-\infty < X_1 \le 1, -\infty < X_2 \le 4, -\infty < X_3 \le 2). \end{eqnarray*} This is computed as follows: <>= library(mvtnorm) m <- 3 sigma <- diag(3) sigma[2,1] <- 3/5 sigma[3,1] <- 1/3 sigma[3,2] <- 11/15 pmvnorm(mean=rep(0, m), sigma, lower=rep(-Inf, m), upper=c(1,4,2)) @ First, the lower triangular of the correlation matrix {\ttfamily sigma} is needed. The mean vector is passed to {\ttfamily pmvnorm} by the argument {\ttfamily mean}. The region of integration is given by the vectors {\ttfamily lower} and {\ttfamily upper}, both can have elements {\ttfamily -Inf} or {\ttfamily +Inf}. The value of {\ttfamily pmvnorm} is the estimated integral value with two attributes \begin{itemize} \item {\ttfamily error}: the estimated absolute error and \item {\ttfamily msg}: a status message, indicating wheater or not the algorithm terminated correctly. \end{itemize} From the results above it follows that \begin{eqnarray*} P(-\infty < X_1 \le 1, -\infty < X_2 \le 4, -\infty < X_3 \le 2) \approx 0.82798 \end{eqnarray*} with an absolute error estimate of $2.0e-06$. \section{Details \label{details}} This section outlines the basic ideas of the algorithms used. The multivariate $t$ distribution (MVT) is given by $$ \bT(\ba, \bb, \Sig, \nu) = \frac{2^{1-\frac{\nu}{2}}}{\Gamma(\frac{\nu}{2})} \int\limits_0^{\infty}s^{\nu-1}e^{-\frac{s^2}{2}} \Ph(\frac{s\ba}{\sqrt{\nu}},\frac{s\bb}{\sqrt{\nu}},\Sig) ds, $$ where the multivariate normal distribution function (MVN) $$ \Ph(\ba,\bb, \Sig) = \frac{1}{\sqrt{|\Sig| (2\pi)^m}} \int\limits_{a_1}^{b_1} \int\limits_{a_2}^{b_2} ... \int\limits_{a_m}^{b_m} e^{- \frac{1}{2} \bx^t \Sig^{-1} \bx} d\bx, $$ $\bx = (x_1, x_2, ..., x_m)^t$, $-\infty \leq a_i < b_i \leq \infty$ for all $i$, and $\Sig$ is a positive semi-definite symmetric $m \times m$ matrix. The original integral over an arbitrary $m$-dimensional, possibly unbounded hyper-rectangle is transformed to an integral over the unit hypercube. These transformations are described in \cite{numerical-:1992} for the MVN case and in \cite{numerical-:1999} for the MVT case. Several suitable standard integration routines can be applied to this transformed integral. For the present implementation randomized lattice rules were used. Such lattice rules seek to fill the integration region evenly in a deterministic process. In principle, they construct regular patterns, such that the projections of the integration points onto each axis produce an equidistant subdivision of the axis. Robust integration error bounds are obtained by introducing additional shifts of the entire set of integration nodes in random directions. Since this additional randomization step is only performed to introduce a robust Monte Carlo error bound, 10 simulation runs are usually sufficient. For a more detailed description \cite{numerical-:1999} might be referred to. \section{Applications \label{appl}} The multivariate $t$ distribution is applicable in a wide field of multiple testing problems. We will illustrate this using a example studied earlier by \cite{the-effici:1987}. For short, the effects of $5$ different perfusates in capillary permeability in cats was investigated by \cite{blood-and-:1987}. The data met the assumptions of a standard one-factor ANOVA. For experimental reasons, the investigators were interested in a simultaneous confidence intervals for the following pairwise comparisons: $ \beta_1 - \beta_2, \beta_1 - \beta_3, \beta_1 - \beta_5, \beta_4 - \beta_2 $ and $ \beta_4 - \beta_3 $. Therefore, the matrix of contrast is given by \begin{eqnarray*} \C = \left( \begin{array}{rrrrr} 1 & -1 & 0 & 0 & 0 \\ 1 & 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 & -1 \\ 0 & 1 & 0 & -1 & 0 \\ 0 & 0 & 1 & -1 & 0 \end{array} \right) . \end{eqnarray*} \cite{the-effici:1987} assumed that $ \beta = (\beta_1, \dots, \beta_5) $ is multivariate normal with mean $ \beta $ and covariance matrix $ \sigma^2 \V $, where $ \V $ is known. Under the null hypothesis $ \beta = 0 $, we need knowledge about the distribution of the statistic \begin{eqnarray*} W = \max_{1 \le j \le 5} \left\{ \frac{| c_j(\hat{\beta} - \beta) |}{\hat{\sigma}\sqrt{c_j \V c_j^{\top}}} \right\} \end{eqnarray*} where $ c_j $ is the $j$th row of $ \C $. By assumption, $\hat{\sigma}$ is $ \chi_\nu $ distributed, so under hypothesis $ W $ the argument to $ \max $ follows a multivariate $ t $ distribution. Confidence intervals can be obtained by $ c_j \hat{\beta} \pm w_\alpha \hat{\sigma} \sqrt{c_j \V c_i^\top} $, where $ w_\alpha $ is the $ 1 - \alpha $ quantile of the null distribution of $ W $. Using {\ttfamily pmvt}, one can easily compute the quantile for the example cited above. <>= n <- c(26, 24, 20, 33, 32) V <- diag(1/n) df <- 130 C <- c(1,1,1,0,0,-1,0,0,1,0,0,-1,0,0,1,0,0,0,-1,-1,0,0,-1,0,0) C <- matrix(C, ncol=5) ### covariance matrix cv <- C %*% V %*% t(C) ### correlation matrix dv <- t(1/sqrt(diag(cv))) cr <- cv * (t(dv) %*% dv) delta <- rep(0,5) qmvt(0.95, df = df, delta = delta, corr = cr, abseps = 0.0001, maxpts = 100000, tail = "both") @ {\ttfamily n} is the sample size vector of each level of the factor, {\ttfamily V} is the covariance matrix of $ \beta $. With the contrasts $ \C $ we can compute the correlation matrix {\ttfamily cr} of $ \C\beta $. Finally, we are interested in the $ 95\%$ quantile of $ W $. The {\ttfamily alpha} quantile can now be computed easily using {\ttfamily pmvt}. The $95\%$ quantile of $ W $ in this example is $ 2.56 $ , \cite{the-effici:1987} obtained the same result using $ 80.000 $ simulation runs. The computation needs $ 8.06 $ seconds total time on a Pentium III $450$ MHz with $256$ MB memory. Using package {\ttfamily mvtnorm}, the efficient computation of multivariate normal or $ t $ probabilities is now available in {\ttfamily R}. We hope that this is helpful to users / programmers who deal with multiple testing problems. \bibliographystyle{plainnat} \bibliography{litdb} \end{document} mvtnorm/inst/include/0000755000175100001440000000000012444024027014371 5ustar hornikusersmvtnorm/inst/include/mvtnormAPI.h0000644000175100001440000000204412444042420016573 0ustar hornikusers #include #include // external API void mvtnorm_C_mvtdst(int *n, int *nu, double *lower, double *upper, int *infin, double *corr, double *delta, int *maxpts, double *abseps, double *releps, double *error, double *value, int *inform, int *rnd) { static void(*fun)(int*, int*, double*, double*, int*, double*, double*, int*, double*, double*, double*, double*, int*, int*) = NULL; if (fun == NULL) fun = (void(*)(int*, int*, double*, double*, int*, double*, double*, int*, double*, double*, double*, double*, int*, int*)) R_GetCCallable("mvtnorm", "C_mvtdst"); fun(n, nu, lower, upper, infin, corr, delta, maxpts, abseps, releps, error, value, inform, rnd); } mvtnorm/inst/include/mvtnorm.h0000644000175100001440000000172612635723615016265 0ustar hornikusers #include #include #include void F77_NAME(mvtdst)(int *n, int *nu, double *lower, double *upper, int *infin, double *corr, double *delta, int *maxpts, double *abseps, double *releps, double *error, double *value, int *inform); void F77_NAME(tvtlrcall)(int *NU, double *H, double *R, double *EPSI, double *TVTL); void C_tvtlr (int *NU, double *H, double *R, double *EPSI, double *TVTL); void F77_NAME(bvtlrcall)(int *NU, double *DH, double *DK, double *R, double *BVTL); void C_bvtlr (int *NU, double *DH, double *DK, double *R, double *BVTL); void C_mvtdst(int *n, int *nu, double *lower, double *upper, int *infin, double *corr, double *delta, int *maxpts, double *abseps, double *releps, double *error, double *value, int *inform, int *rnd); SEXP C_miwa(SEXP steps, SEXP corr, SEXP upper, SEXP lower, SEXP infin); mvtnorm/tests/0000755000175100001440000000000012654131234013135 5ustar hornikusersmvtnorm/tests/test-getInt.R0000644000175100001440000000401212651430706015467 0ustar hornikuserslibrary("mvtnorm") p <- 0.8 mean <- c(6.75044368, 0.04996326) sigmas <- rbind( c(0.10260550, 0.02096418), c(0.02096418, 0.16049956) ) ## qmvnorm qmvnorm(p = p, tail = "lower.tail", mean = mean, sigma = sigmas, interval=c(5,8))$quantile qmvnorm(p = p, tail = "upper.tail", mean = mean, sigma = sigmas, interval=c(-0.5,0))$quantile qmvnorm(p = p, tail = "both.tails", mean = mean, sigma = sigmas, interval=c(5,8))$quantile mvtnorm:::getInt(p,delta=mean, sigma=sigmas,tail="lower.tail",df=Inf) mvtnorm:::getInt(p,delta=mean, sigma=sigmas,tail="upper.tail",df=Inf) mvtnorm:::getInt(p,delta=mean, sigma=sigmas,tail="both.tails",df=Inf) ## qmvt, shifted qmvt(p = p, tail = "lower.tail", delta = mean, sigma = sigmas, interval=c(5,8), df=1, type="shifted")$quantile qmvt(p = p, tail = "upper.tail", delta = mean, sigma = sigmas, interval=c(-0.5,0), df=1, type="shifted")$quantile qmvt(p = p, tail = "both.tails", delta = mean, sigma = sigmas, interval=c(5,8), df=1, type="shifted")$quantile mvtnorm:::getInt(p,delta=mean, sigma=sigmas,tail="lower.tail", type="shifted",df=1) mvtnorm:::getInt(p,delta=mean, sigma=sigmas,tail="upper.tail", type="shifted",df=1) mvtnorm:::getInt(p,delta=mean, sigma=sigmas,tail="both.tails", type="shifted",df=1) ## qmvt, Kshirsagar sigmas <- cov2cor(sigmas) ## use unit variances qmvt(p = p, tail = "lower.tail", delta = mean, sigma = sigmas, interval=c(5,8), df=1, type="Kshirsagar")$quantile qmvt(p = p, tail = "upper.tail", delta = mean, sigma = sigmas, interval=c(-4,0), df=1, type="Kshirsagar")$quantile qmvt(p = p, tail = "both.tails", delta = mean, sigma = sigmas, interval=c(5,8), df=1, type="Kshirsagar")$quantile mvtnorm:::getInt(p,delta=mean, sigma=sigmas,tail="lower.tail", type="Kshirsagar",df=1) ##mvtnorm:::getInt(p,delta=mean, sigma=sigmas,tail="upper.tail", ## type="Kshirsagar",df=1) # will produce warnings mvtnorm:::getInt(p,delta=mean, sigma=sigmas,tail="both.tails", type="Kshirsagar",df=1) mvtnorm/tests/test-noisy-root.Rout.save0000644000175100001440000000511412654130110020035 0ustar hornikusers R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > library("mvtnorm") > > set.seed(1) > dim <- 10 > df <- 5 > > D <- diag(dim)+crossprod(matrix(runif(25,-1,1),dim,dim)) > corr <- cov2cor(D) > > ## one-sided, lower tail > qu <- qmvt(0.95, df=df, corr=corr)$quantile > pmvt(lower=rep(-Inf, dim), upper=rep(qu,dim), corr=corr, df=df) [1] 0.9499886 attr(,"error") [1] 8.394993e-05 attr(,"msg") [1] "Normal Completion" > > qu <- qmvnorm(0.95, corr=corr)$quantile > pmvnorm(lower=rep(-Inf, dim), upper=rep(qu,dim), corr=corr) [1] 0.9499785 attr(,"error") [1] 6.265055e-05 attr(,"msg") [1] "Normal Completion" > > ## two-sided > qu <- qmvt(0.95, df=df, corr=corr, tail="both.tails")$quantile > pmvt(lower=rep(-qu, dim), upper=rep(qu,dim), corr=corr, df=df) [1] 0.949925 attr(,"error") [1] 9.635837e-05 attr(,"msg") [1] "Normal Completion" > > qu <- qmvnorm(0.95, corr=corr, tail="both.tails")$quantile > pmvnorm(lower=rep(-qu, dim), upper=rep(qu,dim), corr=corr) [1] 0.949927 attr(,"error") [1] 0.0001545113 attr(,"msg") [1] "Normal Completion" > > ## one-sided, upper tail > qu <- qmvt(0.95, df=df, corr=corr, tail="upper.tail")$quantile > pmvt(lower=rep(qu, dim), upper=rep(Inf,dim), corr=corr, df=df) [1] 0.9499528 attr(,"error") [1] 9.714629e-05 attr(,"msg") [1] "Normal Completion" > > qu <- qmvnorm(0.95, corr=corr, tail="upper.tail")$quantile > pmvnorm(lower=rep(qu, dim), upper=rep(Inf,dim), corr=corr) [1] 0.9500897 attr(,"error") [1] 7.617415e-05 attr(,"msg") [1] "Normal Completion" > > ## cross-check interval works > ## one-sided, lower tail > qu <- qmvt(0.95, df=df , corr=corr, interval=c(0,10))$quantile > pmvt(lower=rep(-Inf, dim), upper=rep(qu,dim), corr=corr, df=df) [1] 0.9500624 attr(,"error") [1] 0.0001741215 attr(,"msg") [1] "Normal Completion" > > qu <- qmvnorm(0.95, corr=corr, interval=c(0,10))$quantile > pmvnorm(lower=rep(-Inf, dim), upper=rep(qu,dim), corr=corr) [1] 0.9500022 attr(,"error") [1] 9.231686e-05 attr(,"msg") [1] "Normal Completion" > > proc.time() user system elapsed 8.040 0.012 8.039 mvtnorm/tests/Examples/0000755000175100001440000000000012430427076014717 5ustar hornikusersmvtnorm/tests/Examples/mvtnorma-Ex.Rout.save0000644000175100001440000002656412647374756021001 0ustar hornikusers R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > pkgname <- "mvtnorm" > source(file.path(R.home("share"), "R", "examples-header.R")) > options(warn = 1) > base::assign(".ExTimings", "mvtnorm-Ex.timings", pos = 'CheckExEnv') > base::cat("name\tuser\tsystem\telapsed\n", file=base::get(".ExTimings", pos = 'CheckExEnv')) > base::assign(".format_ptime", + function(x) { + if(!is.na(x[4L])) x[1L] <- x[1L] + x[4L] + if(!is.na(x[5L])) x[2L] <- x[2L] + x[5L] + options(OutDec = '.') + format(x[1L:3L], digits = 7L) + }, + pos = 'CheckExEnv') > > ### * > library('mvtnorm') > > base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') > cleanEx() > nameEx("Mvnorm") > ### * Mvnorm > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### Name: Mvnorm > ### Title: Multivariate Normal Density and Random Deviates > ### Aliases: dmvnorm rmvnorm > ### Keywords: distribution multivariate > > ### ** Examples > > dmvnorm(x=c(0,0)) [1] 0.1591549 > dmvnorm(x=c(0,0), mean=c(1,1)) [1] 0.05854983 > > sigma <- matrix(c(4,2,2,3), ncol=2) > x <- rmvnorm(n=500, mean=c(1,2), sigma=sigma) > colMeans(x) [1] 0.9492868 1.9916602 > var(x) [,1] [,2] [1,] 4.276371 2.105874 [2,] 2.105874 3.186058 > > x <- rmvnorm(n=500, mean=c(1,2), sigma=sigma, method="chol") > colMeans(x) [1] 0.8724731 1.9804160 > var(x) [,1] [,2] [1,] 4.804847 2.430442 [2,] 2.430442 3.148344 > > plot(x) > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("Mvnorm", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("Mvt") > ### * Mvt > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### Name: Mvt > ### Title: The Multivariate t Distribution > ### Aliases: dmvt rmvt > ### Keywords: distribution multivariate > > ### ** Examples > > ## basic evaluation > dmvt(x = c(0,0), sigma = diag(2)) [1] -1.837877 > > ## check behavior for df=0 and df=Inf > x <- c(1.23, 4.56) > mu <- 1:2 > Sigma <- diag(2) > x0 <- dmvt(x, delta = mu, sigma = Sigma, df = 0) # default log = TRUE! > x8 <- dmvt(x, delta = mu, sigma = Sigma, df = Inf) # default log = TRUE! > xn <- dmvnorm(x, mean = mu, sigma = Sigma, log = TRUE) > stopifnot(identical(x0, x8), identical(x0, xn)) > > ## X ~ t_3(0, diag(2)) > x <- rmvt(100, sigma = diag(2), df = 3) # t_3(0, diag(2)) sample > plot(x) > > ## X ~ t_3(mu, Sigma) > n <- 1000 > mu <- 1:2 > Sigma <- matrix(c(4, 2, 2, 3), ncol=2) > set.seed(271) > x <- rep(mu, each=n) + rmvt(n, sigma=Sigma, df=3) > plot(x) > > ## Note that the call rmvt(n, mean=mu, sigma=Sigma, df=3) does *not* > ## give a valid sample from t_3(mu, Sigma)! [and thus throws an error] > try(rmvt(n, mean=mu, sigma=Sigma, df=3)) Error in rmvt(n, mean = mu, sigma = Sigma, df = 3) : Providing 'mean' does *not* sample from a multivariate t distribution! > > ## df=Inf correctly samples from a multivariate normal distribution > set.seed(271) > x <- rep(mu, each=n) + rmvt(n, sigma=Sigma, df=Inf) > set.seed(271) > x. <- rmvnorm(n, mean=mu, sigma=Sigma) > stopifnot(identical(x, x.)) > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("Mvt", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("pmvnorm") > ### * pmvnorm > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### Name: pmvnorm > ### Title: Multivariate Normal Distribution > ### Aliases: pmvnorm > ### Keywords: distribution > > ### ** Examples > > > n <- 5 > mean <- rep(0, 5) > lower <- rep(-1, 5) > upper <- rep(3, 5) > corr <- diag(5) > corr[lower.tri(corr)] <- 0.5 > corr[upper.tri(corr)] <- 0.5 > prob <- pmvnorm(lower, upper, mean, corr) > print(prob) [1] 0.5800051 attr(,"error") [1] 0.0002696831 attr(,"msg") [1] "Normal Completion" > > stopifnot(pmvnorm(lower=-Inf, upper=3, mean=0, sigma=1) == pnorm(3)) > > a <- pmvnorm(lower=-Inf,upper=c(.3,.5),mean=c(2,4),diag(2)) > > stopifnot(round(a,16) == round(prod(pnorm(c(.3,.5),c(2,4))),16)) > > a <- pmvnorm(lower=-Inf,upper=c(.3,.5,1),mean=c(2,4,1),diag(3)) > > stopifnot(round(a,16) == round(prod(pnorm(c(.3,.5,1),c(2,4,1))),16)) > > # Example from R News paper (original by Genz, 1992): > > m <- 3 > sigma <- diag(3) > sigma[2,1] <- 3/5 > sigma[3,1] <- 1/3 > sigma[3,2] <- 11/15 > pmvnorm(lower=rep(-Inf, m), upper=c(1,4,2), mean=rep(0, m), corr=sigma) [1] 0.8279847 attr(,"error") [1] 2.658133e-07 attr(,"msg") [1] "Normal Completion" > > # Correlation and Covariance > > a <- pmvnorm(lower=-Inf, upper=c(2,2), sigma = diag(2)*2) > b <- pmvnorm(lower=-Inf, upper=c(2,2)/sqrt(2), corr=diag(2)) > stopifnot(all.equal(round(a,5) , round(b, 5))) > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("pmvnorm", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("pmvt") > ### * pmvt > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### Name: pmvt > ### Title: Multivariate t Distribution > ### Aliases: pmvt > ### Keywords: distribution > > ### ** Examples > > > n <- 5 > lower <- -1 > upper <- 3 > df <- 4 > corr <- diag(5) > corr[lower.tri(corr)] <- 0.5 > delta <- rep(0, 5) > prob <- pmvt(lower=lower, upper=upper, delta=delta, df=df, corr=corr) > print(prob) [1] 0.5063832 attr(,"error") [1] 0.0002426557 attr(,"msg") [1] "Normal Completion" > > pmvt(lower=-Inf, upper=3, df = 3, sigma = 1) == pt(3, 3) upper TRUE > > # Example from R News paper (original by Edwards and Berry, 1987) > > n <- c(26, 24, 20, 33, 32) > V <- diag(1/n) > df <- 130 > C <- c(1,1,1,0,0,-1,0,0,1,0,0,-1,0,0,1,0,0,0,-1,-1,0,0,-1,0,0) > C <- matrix(C, ncol=5) > ### scale matrix > cv <- C %*% V %*% t(C) > ### correlation matrix > dv <- t(1/sqrt(diag(cv))) > cr <- cv * (t(dv) %*% dv) > delta <- rep(0,5) > > myfct <- function(q, alpha) { + lower <- rep(-q, ncol(cv)) + upper <- rep(q, ncol(cv)) + pmvt(lower=lower, upper=upper, delta=delta, df=df, + corr=cr, abseps=0.0001) - alpha + } > > ### uniroot for this simple problem > round(uniroot(myfct, lower=1, upper=5, alpha=0.95)$root, 3) [1] 2.561 > > # compare pmvt and pmvnorm for large df: > > a <- pmvnorm(lower=-Inf, upper=1, mean=rep(0, 5), corr=diag(5)) > b <- pmvt(lower=-Inf, upper=1, delta=rep(0, 5), df=rep(300,5), + corr=diag(5)) Warning in if (df < 0) stop("cannot compute multivariate t distribution with ", : the condition has length > 1 and only the first element will be used Warning in if (isInf(df)) df <- 0 : the condition has length > 1 and only the first element will be used > a [1] 0.4215702 attr(,"error") [1] 0 attr(,"msg") [1] "Normal Completion" > b [1] 0.4211423 attr(,"error") [1] 2.31377e-06 attr(,"msg") [1] "Normal Completion" > > stopifnot(round(a, 2) == round(b, 2)) > > # correlation and scale matrix > > a <- pmvt(lower=-Inf, upper=2, delta=rep(0,5), df=3, + sigma = diag(5)*2) > b <- pmvt(lower=-Inf, upper=2/sqrt(2), delta=rep(0,5), + df=3, corr=diag(5)) > attributes(a) <- NULL > attributes(b) <- NULL > a [1] 0.5653944 > b [1] 0.5654 > stopifnot(all.equal(round(a,3) , round(b, 3))) > > a <- pmvt(0, 1,df=10) > attributes(a) <- NULL > b <- pt(1, df=10) - pt(0, df=10) > stopifnot(all.equal(round(a,10) , round(b, 10))) > > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("pmvt", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("qmvnorm") > ### * qmvnorm > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### Name: qmvnorm > ### Title: Quantiles of the Multivariate Normal Distribution > ### Aliases: qmvnorm > ### Keywords: distribution > > ### ** Examples > > qmvnorm(0.95, sigma = diag(2), tail = "both") $quantile [1] 2.236358 $f.quantile [1] -1.681424e-06 attr(,"message") [1] "Normal Completion" > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("qmvnorm", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > cleanEx() > nameEx("qmvt") > ### * qmvt > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### Name: qmvt > ### Title: Quantiles of the Multivariate t Distribution > ### Aliases: qmvt > ### Keywords: distribution > > ### ** Examples > > ## basic evaluation > qmvt(0.95, df = 16, tail = "both") $quantile [1] 2.119905 $f.quantile [1] 0.975 > > ## check behavior for df=0 and df=Inf > Sigma <- diag(2) > set.seed(29) > q0 <- qmvt(0.95, sigma = Sigma, df = 0, tail = "both")$quantile > set.seed(29) > q8 <- qmvt(0.95, sigma = Sigma, df = Inf, tail = "both")$quantile > set.seed(29) > qn <- qmvnorm(0.95, sigma = Sigma, tail = "both")$quantile > stopifnot(identical(q0, q8), + isTRUE(all.equal(q0, qn, tol = (.Machine$double.eps)^(1/3)))) > > ## if neither sigma nor corr are provided, corr = 1 is used internally > df <- 0 > set.seed(29) > qt95 <- qmvt(0.95, df = df, tail = "both")$quantile > set.seed(29) > qt95.c <- qmvt(0.95, df = df, corr = 1, tail = "both")$quantile > set.seed(29) > qt95.s <- qmvt(0.95, df = df, sigma = 1, tail = "both")$quantile > stopifnot(identical(qt95, qt95.c), + identical(qt95, qt95.s)) > > df <- 4 > set.seed(29) > qt95 <- qmvt(0.95, df = df, tail = "both")$quantile > set.seed(29) > qt95.c <- qmvt(0.95, df = df, corr = 1, tail = "both")$quantile > set.seed(29) > qt95.s <- qmvt(0.95, df = df, sigma = 1, tail = "both")$quantile > stopifnot(identical(qt95, qt95.c), + identical(qt95, qt95.s)) > > > > base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") > base::cat("qmvt", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") > ### *