vegan/0000755000176200001440000000000013232100754011347 5ustar liggesusersvegan/inst/0000755000176200001440000000000013232070306012323 5ustar liggesusersvegan/inst/NEWS.Rd0000644000176200001440000025001013232070213013361 0ustar liggesusers\name{NEWS} \title{vegan News} \encoding{UTF-8} \section{Changes in version 2.4-6}{ \subsection{INSTALLATION AND BUILDING}{ \itemize{ \item CRAN packages are no longer allowed to use FORTRAN input, but \code{read.cep} function used FORTRAN format to read legacy CEP and Canoco files. To avoid NOTEs and WARNINGs, the function was re-written in \R. The new \code{read.cep} is less powerful and more fragile, and can only read data in \dQuote{condensed} format, and it can fail in several cases that were successful with the old code. The old FORTRAN-based function is still available in github package \href{https://github.com/vegandevs/cepreader/}{cepreader}. See github issue \href{https://github.com/vegandevs/vegan/issues/263}{#263}. } %itemize } % general \subsection{BUG FIXES}{ \itemize{ \item Some functions for rarefaction (\code{rrarefy}), species abundance distribution (\code{preston}) and species pool (\code{estimateR}) need exact integer data, but the test allowed small fuzz. The functions worked correctly with original data, but if data were transformed and then back-transformed, they would pass the integer test with fuzz and give wrong results. For instance, \code{sqrt(3)^2} would pass the test as 3, but was interpreted strictly as integer 2. See github issue \href{https://github.com/vegandevs/vegan/issues/259}{#259}. } % itemize } % bugs \subsection{NEW FEATURES}{ \itemize{ \item \code{ordiresids} uses now weighted residuals for \code{cca} results. } %itemize } % features } % 2.4-6 \section{Changes in version 2.4-5}{ \subsection{BUG FIXES}{ \itemize{ \item Several \dQuote{Swap & Shuffle} null models generated wrong number of initial matrices. Usually they generated too many, which was not dangerous, but it was slow. However, random sequences will change with this fix. \item Lattice graphics for ordination (\code{ordixyplot} and friends) colour the arrows by \code{groups} instead of randomly mixed colours. \item Information on constant or mirrored permutations was omitted when reporting permutation tests (e.g., in \code{anova} for constrained ordination). } % itemize } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{ordistep} has improved interpretation of \code{scope}: if the lower scope is missing, the formula of the starting solution is taken as the lower scope instead of using an empty model. See Stackoverflow question \href{https://stackoverflow.com/questions/46985029/}{46985029}. \item \code{fitspecaccum} gained new support functions \code{nobs} and \code{logLik} which allow better co-operation with other packages and functions. See GitHub issue \href{https://github.com/vegandevs/vegan/issues/250}{#250}. \item The \dQuote{backtracking} null model for community simulation is faster. However, \dQuote{backtracking} is a biased legacy model that should not be used except in comparative studies. } %itemize } % new features } % 2.4-5 \section{Changes in version 2.4-4}{ \subsection{INSTALLATION AND BUILDING}{ \itemize{ \item \code{orditkplot} should no longer give warnings in CRAN tests. } %itemize } % installatin and building \subsection{BUG FIXES}{ \itemize{ \item \code{anova(..., by = "axis")} for constrained ordination (\code{cca}, \code{rda}, \code{dbrda}) ignored partial terms in \code{Condition()}. \item \code{inertcomp} and \code{summary.cca} failed if the constrained component was defined, but explained nothing and had zero rank. See StackOverflow: \href{https://stackoverflow.com/questions/43683699/}{R - Error message in doing RDA analysis - vegan package}. \item Labels are no longer cropped in the \code{meandist} plots. } % itemize } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item The significance tests for the axes of constrained ordination use now forward testing strategy. More extensive analysis indicated that the previous marginal tests were biased. This is in conflict with Legendre, Oksanen & ter Braak, \emph{Methods Ecol Evol} \strong{2,} 269--277 (2011) who regarded marginal tests as unbiased. \item Canberra distance in \code{vegdist} can now handle negative input entries similarly as latest versions of \R. } %itemize } % new features } % v2.4-4 \section{Changes in version 2.4-3}{ \subsection{INSTALLATION AND BUILDING}{ \itemize{ \item \pkg{vegan} registers native \bold{C} and \bold{Fortran} routines. This avoids warnings in model checking, and may also give a small gain in speed. \item Future versions of \pkg{vegan} will deprecate and remove elements \code{pCCA$Fit}, \code{CCA$Xbar}, and \code{CA$Xbar} from \code{cca} result objects. This release provides a new function \code{ordiYbar} which is able to construct these elements both from the current and future releases. Scripts and functions directly accessing these elements should switch to \code{ordiYbar} for smooth transition. } % itemize } % installation \subsection{BUG FIXES}{ \itemize{ \item \code{as.mlm} methods for constrained ordination include zero intercept to give the correct residual degrees of freedom for derived statistics. \item \code{biplot} method for \code{rda} passes \code{correlation} argument to the scaling algorithm. \item Biplot scores were wrongly centred in \code{cca} which caused a small error in their values. \item Weighting and centring were corrected in \code{intersetcor} and \code{spenvcor}. The fix can make a small difference when analysing \code{cca} results. Partial models were not correctly handled in \code{intersetcor}. \item \code{envfit} and \code{ordisurf} functions failed when applied to species scores. \item Non-standard variable names can be used within \code{Condition()} in partial ordination. Partial models are used internally within several functions, and a problem was reported by Albin Meyer (Univ Lorraine, Metz, France) in \code{ordiR2step} when using a variable name that contained a hyphen (which was wrongly interpreted as a minus sign in partial ordination). \item \code{ordispider} did not pass graphical arguments when used to show the difference of LC and WA scores in constrained ordination. \item \code{ordiR2step} uses only \code{forward} selection to avoid several problems in model evaluation. \item \code{tolerance} function could return \code{NaN} in some cases when it should have returned \eqn{0}. Partial models were not correctly analysed. Misleading (non-zero) tolerances were sometimes given for species that occurred only once or sampling units that had only one species. } %itemize } % bug fixes } % 2.4-3 \section{Changes in version 2.4-2}{ \subsection{BUG FIXES}{ \itemize{ \item Permutation tests (\code{permutests}, \code{anova}) for the first axis failed in constrained distance-based ordination (\code{dbrda}, \code{capscale}). Now \code{capscale} will also throw away negative eigenvalues when first eigenvalues are tested. All permutation tests for the first axis are now faster. The problem was reported by Cleo Tebby and the fixes are discussed in GitHub issue \href{https://github.com/vegandevs/vegan/issues/198}{#198} and pull request \href{https://github.com/vegandevs/vegan/pull/199}{#199}. \item Some support functions for \code{dbrda} or \code{capscale} gave results or some of their components in wrong scale. Fixes in \code{stressplot}, \code{simulate}, \code{predict} and \code{fitted} functions. \item \code{intersetcor} did not use correct weighting for \code{cca} and the results were slightly off. \item \code{anova} and \code{permutest} failed when \code{betadisper} was fitted with argument \code{bias.adjust = TRUE}. Fixes Github issue \href{https://github.com/vegandevs/vegan/issues/219}{#219} reported by Ross Cunning, O'ahu, Hawaii. \item \code{ordicluster} should return invisibly only the coordinates of internal points (where clusters or points are joined), but last rows contained coordinates of external points (ordination scores of points). \item The \code{cca} method of \code{tolerance} was returning incorrect values for all but the second axis for sample heterogeneities and species tolerances. See issue \href{https://github.com/vegandevs/vegan/issues/216}{#216} for details. } %itemize } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item Biplot scores are scaled similarly as site scores in constrained ordination methods \code{cca}, \code{rda}, \code{capscale} and \code{dbrda}. Earlier they were unscaled (or more technically, had equal scaling on all axes). \item \code{tabasco} adds argument to \code{scale} the colours by rows or columns in addition to the old equal scale over the whole plot. New arguments \code{labRow} and \code{labCex} can be used to change the column or row labels. Function also takes care that only above-zero observations are coloured: earlier tiny observed values were merged to zeros and were not distinct in the plots. \item Sequential null models are somewhat faster (up to 10\%). Non-sequential null models may be marginally faster. These null models are generated by function \code{nullmodel} and also used in \code{oecosimu}. \item \code{vegdist} is much faster. It used to be clearly slower than \code{stats::dist}, but now it is nearly equally fast for the same dissimilarity measure. \item Handling of \code{data=} in formula interface is more robust, and messages on user errors are improved. This fixes points raised in Github issue \href{https://github.com/vegandevs/vegan/issues/200}{#200}. \item The families and orders in \code{dune.taxon} were updated to APG IV (\emph{Bot J Linnean Soc} \strong{181,} 1--20; 2016) and a corresponding classification for higher levels (Chase & Reveal, \emph{Bot J Linnean Soc} \strong{161,} 122-127; 2009). } %itemize } % features } % 2.4-2 \section{Changes in version 2.4-1}{ \subsection{INSTALLATION}{ \itemize{ \item Fortran code was modernized to avoid warnings in latest \R. The modernization should have no visible effect in functions. Please report all suspect cases as \href{https://github.com/vegandevs/vegan/issues/}{vegan issues}. } %itemize } % installation \subsection{BUG FIXES}{ \itemize{ \item Several support functions for ordination methods failed if the solution had only one ordination axis, for instance, if there was only one constraining variable in CCA, RDA and friends. This concerned \code{goodness} for constrained ordination, \code{inertcomp}, \code{fitted} for \code{capscale}, \code{stressplot} for RDA, CCA (GitHub issue \href{https://github.com/vegandevs/vegan/issues/189}{#189}). \item \code{goodness} for CCA & friends ignored \code{choices} argument (GitHub issue \href{https://github.com/vegandevs/vegan/issues/190}{#190}). \item \code{goodness} function did not consider negative eigenvalues of db-RDA (function \code{dbrda}). \item Function \code{meandist} failed in some cases when one of the groups had only one observation. \item \code{linestack} could not handle expressions in \code{labels}. This regression is discussed in GitHub issue \href{https://github.com/vegandevs/vegan/issues/195}{#195}. \item Nestedness measures \code{nestedbetajac} and \code{nestedbetasor} expecting binary data did not cope with quantitative input in evaluating Baselga's matrix-wide Jaccard or Sørensen dissimilarity indices. \item Function \code{as.mcmc} to cast \code{oecosimu} result to an MCMC object (\pkg{coda} package) failed if there was only one chain. } % itemize } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{diversity} function returns now \code{NA} if the observation had \code{NA} values instead of returning \code{0}. The function also checks the input and refuses to handle data with negative values. GitHub issue \href{https://github.com/vegandevs/vegan/issues/187}{#187}. \item \code{rarefy} function will work more robustly in marginal case when the user asks for only one individual which can only be one species with zero variance. \item Several functions are more robust if their factor arguments contain missing values (\code{NA}): \code{betadisper}, \code{adipart}, \code{multipart}, \code{hiersimu}, \code{envfit} and constrained ordination methods \code{cca}, \code{rda}, \code{capscale} and \code{dbrda}. GitHub issues \href{https://github.com/vegandevs/vegan/issues/192}{#192} and \href{https://github.com/vegandevs/vegan/issues/193}{#193}. } % itemize } % new features } % 2.4-1 \section{Changes in version 2.4-0}{ \subsection{DISTANCE-BASED ANALYSIS}{ \itemize{ \item Distance-based methods were redesigned and made consistent for ordination (\code{capscale}, new \code{dbrda}), permutational ANOVA (\code{adonis}, new \code{adonis2}), multivariate dispersion (\code{betadisper}) and variation partitioning (\code{varpart}). These methods can produce negative eigenvalues with several popular semimetric dissimilarity indices, and they were not handled similarly by all functions. Now all functions are designed after McArdle & Anderson (\emph{Ecology} 82, 290--297; 2001). \item \code{dbrda} is a new function for distance-based Redundancy Analysis following McArdle & Anderson (\emph{Ecology} 82, 290--297; 2001). With metric dissimilarities, the function is equivalent to old \code{capscale}, but negative eigenvalues of semimetric indices are handled differently. In \code{dbrda} the dissimilarities are decomposed directly into conditions, constraints and residuals with their negative eigenvalues, and any of the components can have imaginary dimensions. Function is mostly compatible with \code{capscale} and other constrained ordination methods, but full compatibility cannot be achieved (see issue \href{https://github.com/vegandevs/vegan/issues/140}{#140} in Github). The function is based on the code by Pierre Legendre. \item The old \code{capscale} function for constrained ordination is still based only on real components, but the total inertia of the components is assessed similarly as in \code{dbrda}. The significance tests will differ from the previous version, but function \code{oldCapscale} will cast the \code{capscale} result to a similar form as previously. \item \code{adonis2} is a new function for permutational ANOVA of dissimilarities. It is based on the same algorithm as the \code{dbrda}. The function can perform overall tests of all independent variables as well as sequential and marginal tests of each term. The old \code{adonis} is still available, but it can only perform sequential tests. With same settings, \code{adonis} and \code{adonis2} give identical results (but see Github issue \href{https://github.com/vegandevs/vegan/issues/156}{#156} for differences). \item Function \code{varpart} can partition dissimilarities using the same algorithm as \code{dbrda}. \item Argument \code{sqrt.dist} takes square roots of dissimilarities and these can change many popular semimetric indices to metric distances in \code{capscale}, \code{dbrda}, \code{wcmdscale}, \code{adonis2}, \code{varpart} and \code{betadisper} (issue \href{https://github.com/vegandevs/vegan/issues/179}{#179} in Github). \item Lingoes and Cailliez adjustments change any dissimilarity into metric distance in \code{capscale}, \code{dbrda}, \code{adonis2}, \code{varpart}, \code{betadisper} and \code{wcmdscale}. Earlier we had only Cailliez adjustment in \code{capscale} (issue \href{https://github.com/vegandevs/vegan/issues/179}{#179} in Github). \item \code{RsquareAdj} works with \code{capscale} and \code{dbrda} and this allows using \code{ordiR2step} in model building. } % itemize } % distance-based \subsection{BUG FIXES}{ \itemize{ \item \code{specaccum}: \code{plot} failed if line type (\code{lty}) was given. Reported by Lila Nath Sharma (Univ Bergen, Norway) } %itemize } %bug fixes \subsection{NEW FUNCTIONS}{ \itemize{ \item \code{ordibar} is a new function to draw crosses of standard deviations or standard errors in ordination diagrams instead of corresponding ellipses. \item Several \code{permustats} results can be combined with a new \code{c()} function. \item New function \code{smbind} binds together null models by row, column or replication. If sequential models are bound together, they can be treated as parallel chains in subsequent analysis (e.g., after \code{as.mcmc}). See issue \href{https://github.com/vegandevs/vegan/issues/164}{#164} in Github. } %itemize } % new functions \subsection{NEW FEATURES}{ \itemize{ \item Null model analysis was upgraded: New \code{"curveball"} algorithm provides a fast null model with fixed row and column sums for binary matrices after Strona et al. (\emph{Nature Commun.} 5: 4114; 2014). The \code{"quasiswap"} algorithm gained argument \code{thin} which can reduce the bias of null models. \code{"backtracking"} is now much faster, but it is still very slow, and provided mainly to allow comparison against better and faster methods. Compiled code can now be interrupted in null model simulations. \item \code{designdist} can now use beta diversity notation (\code{gamma}, \code{alpha}) for easier definition of beta diversity indices. \item \code{metaMDS} has new iteration strategy: Argument \code{try} gives the minimum number of random starts, and \code{trymax} the maximum number. Earlier we only hand \code{try} which gave the maximum number, but now we run at least \code{try} times. This reduces the risk of being trapped in a local optimum (issue \href{https://github.com/vegandevs/vegan/issues/154}{#154} in Github). If there were no convergent solutions, \code{metaMDS} will now tabulate stopping criteria (if \code{trace = TRUE}). This can help in deciding if any of the criteria should be made more stringent or the number of iterations increased. The documentation for \code{monoMDS} and \code{metaMDS} give more detailed information on convergence criteria. \item The \code{summary} of \code{permustats} prints now \emph{P}-values, and the test direction (\code{alternative}) can be changed. The \code{qqmath} function of \code{permustats} can now plot standardized statistics. This is a partial solution to issue \href{https://github.com/vegandevs/vegan/issues/172}{#172} in Github. \item \code{MDSrotate} can rotate ordination to show maximum separation of factor levels (classes) using linear discriminant analysis (\code{lda} in \pkg{MASS} package). \item \code{adipart}, \code{hiersimu} and \code{multipart} expose argument \code{method} to specify the null model. \item \code{RsquareAdj} works with \code{cca} and this allows using \code{ordiR2step} in model building. The code was developed by Dan McGlinn (issue \href{https://github.com/vegandevs/vegan/issues/161}{#161} in Github). However, \code{cca} still cannot be used in \code{varpart}. \item \code{ordiellipse} and \code{ordihull} allow setting colours, line types and other graphical parameters. The alpha channel can now be given also as a real number in 0 \dots 1 in addition to integer 0 \dots 255. \item \code{ordiellipse} can now draw ellipsoid hulls that enclose points in a group. \item \code{ordicluster}, \code{ordisegments}, \code{ordispider} and \code{lines} and \code{plot} functions for \code{isomap} and \code{spantree} can use a mixture of colours of connected points. Their behaviour is similar as in analogous functions in the the \pkg{vegan3d} package. \item \code{plot} of \code{betadisper} is more configurable. See issues \href{https://github.com/vegandevs/vegan/issues/128}{#128} and \href{https://github.com/vegandevs/vegan/issues/166}{#166} in Github for details. \item \code{text} and \code{points} methods for \code{orditkplot} respect stored graphical parameters. \item Environmental data for the Barro Colorado Island forest plots gained new variables from Harms et al. (\emph{J. Ecol.} 89, 947--959; 2001). Issue \href{https://github.com/vegandevs/vegan/issues/178}{#178} in Github. } %itemize } % features \subsection{DEPRECATED AND DEFUNCT}{ \itemize{ \item Function \code{metaMDSrotate} was removed and replaced with \code{MDSrotate}. \item \code{density} and \code{densityplot} methods for various \pkg{vegan} objects were deprecated and replaced with \code{density} and \code{densityplot} for \code{permustats}. Function \code{permustats} can extract the permutation and simulation results of \pkg{vegan} result objects. } %itemize } % deprecated & defunct } % v2.4-0 \section{Changes in version 2.3-5}{ \subsection{BUG FIXES}{ \itemize{ \item \code{eigenvals} fails with \code{prcomp} results in \R-devel. The next version of \code{prcomp} will have an argument to limit the number of eigenvalues shown (\code{rank.}), and this breaks \code{eigenvals} in \pkg{vegan}. \item \code{calibrate} failed for \code{cca} and friends if \code{rank} was given. } % itemise } % bug fixes } % v2.3-5 \section{Changes in version 2.3-4}{ \subsection{BUG FIXES}{ \itemize{ \item \code{betadiver} index \code{19} had wrong sign in one of its terms. \item \code{linestack} failed when the \code{labels} were given, but the input scores had no names. Reported by Jeff Wood (ANU, Canberra, ACT). } %itemize } % bug fixes \subsection{DEPRECATED}{ \itemize{ \item \code{vegandocs} is deprecated. Current \R{} provides better tools for seeing extra documentation (\code{news()} and \code{browseVignettes()}). } %itemize } %deprecated \subsection{VIGNETTES}{ \itemize{ \item All vignettes are built with standard \R{} tools and can be browsed with \code{browseVignettes}. \code{FAQ-vegan} and \code{partitioning} were only accessible with \code{vegandocs} function. } %itemize } %vignettes \subsection{BUILDING}{ \itemize{ \item Dependence on external software \code{texi2dvi} was removed. Version 6.1 of \code{texi2dvi} was incompatible with \R{} and prevented building \pkg{vegan}. The \code{FAQ-vegan} that was earlier built with \code{texi2dvi} uses now \pkg{knitr}. Because of this, \pkg{vegan} is now dependent on \R-3.0.0. Fixes issue \href{https://github.com/vegandevs/vegan/issues/158}{#158} in Github. } %itemize } % building } % v2.3-4 \section{Changes in version 2.3-3}{ \subsection{BUG FIXES}{ \itemize{ \item \code{metaMDS} and \code{monoMDS} could fail if input dissimilarities were huge: in the reported case they were of magnitude 1E85. Fixes issue \href{https://github.com/vegandevs/vegan/issues/152}{#152} in Github. \item Permutations failed if they were defined as \pkg{permute} control structures in \code{estaccum}, \code{ordiareatest}, \code{renyiaccum} and \code{tsallisaccum}. Reported by Dan Gafta (Cluj-Napoca) for \code{renyiaccum}. \item \code{rarefy} gave false warnings if input was a vector or a single sampling unit. \item Some extrapolated richness indices in \code{specpool} needed the number of doubletons (= number of species occurring in two sampling units), and these failed when only one sampling unit was supplied. The extrapolated richness cannot be estimated from a single sampling unit, but now such cases are handled smoothly instead of failing: observed non-extrapolated richness with zero standard error will be reported. The issue was reported in \href{http://stackoverflow.com/questions/34027496/error-message-when-using-specpool-in-vegan-package}{StackOverflow}. } %itemize } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{treedist} and \code{treedive} refuse to handle trees with reversals, i.e, higher levels are more homogeneous than lower levels. Function \code{treeheight} will estimate their total height with absolute values of branch lengths. Function \code{treedive} refuses to handle trees with negative branch heights indicating negative dissimilarities. Function \code{treedive} is faster. \item \code{gdispweight} works when input data are in a matrix instead of a data frame. \item Input dissimilarities supplied in symmetric matrices or data frames are more robustly recognized by \code{anosim}, \code{bioenv} and \code{mrpp}. } %itemize } %new features } %v2.3-3 \section{Changes in version 2.3-2}{ \subsection{BUG FIXES}{ \itemize{ \item Printing details of a gridded permutation design would fail when the grid was at the within-plot level. \item \code{ordicluster} joined the branches at wrong coordinates in some cases. \item \code{ordiellipse} ignored weights when calculating standard errors (\code{kind = "se"}). This influenced plots of \code{cca}, and also influenced \code{ordiareatest}. } % itemize } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{adonis} and \code{capscale} functions recognize symmetric square matrices as dissimilarities. Formerly dissimilarities had to be given as \code{"dist"} objects such as produced by \code{dist} or \code{vegdist} functions, and data frames and matrices were regarded as observations x variables data which could confuse users (e.g., issue \href{https://github.com/vegandevs/vegan/issues/147}{#147}). \item \code{mso} accepts \code{"dist"} objects for the distances among locations as an alternative to coordinates of locations. \item \code{text}, \code{points} and \code{lines} functions for \code{procrustes} analysis gained new argument \code{truemean} which allows adding \code{procrustes} items to the plots of original analysis. \item \code{rrarefy} returns observed non-rarefied communities (with a warning) when users request subsamples that are larger than the observed community instead of failing. Function \code{drarefy} has been similar and returned sampling probabilities of 1, but now it also issues a warning. Fixes issue \href{https://github.com/vegandevs/vegan/issues/144}{#144} in Github. } % itemize } % new features } %v2.3-2 \section{Changes in version 2.3-1}{ \subsection{BUG FIXES}{ \itemize{ \item Permutation tests did not always correctly recognize ties with the observed statistic and this could result in too low \eqn{P}-values. This would happen in particular when all predictor variables were factors (classes). The changes concern functions \code{adonis}, \code{anosim}, \code{anova} and \code{permutest} functions for \code{cca}, \code{rda} and \code{capscale}, \code{permutest} for \code{betadisper}, \code{envfit}, \code{mantel} and \code{mantel.partial}, \code{mrpp}, \code{mso}, \code{oecosimu}, \code{ordiareatest}, \code{protest} and \code{simper}. This also fixes issues \href{https://github.com/vegandevs/vegan/issues/120}{#120} and \href{https://github.com/vegandevs/vegan/issues/132}{#132} in GitHub. \item Automated model building in constrained ordination (\code{cca}, \code{rda}, \code{capscale}) with \code{step}, \code{ordistep} and \code{ordiR2step} could fail if there were aliased candidate variables, or constraints that were completely explained by other variables already in the model. This was a regression introduced in \pkg{vegan} 2.2-0. \item Constrained ordination methods \code{cca}, \code{rda} and \code{capscale} treat character variables as factors in analysis, but did not return their centroids for plotting. \item Recovery of original data in \code{metaMDS} when computing WA scores for species would fail if the expression supplied to argument \code{comm} was long & got deparsed to multiple strings. \code{metaMDSdist} now returns the (possibly modified) data frame of community data \code{comm} as attribute \code{"comm"} of the returned \code{dist} object. \code{metaMDS} now uses this to compute the WA species scores for the NMDS. In addition, the deparsed expression for \code{comm} is now robust to long expressions. Reported by Richard Telford. \item \code{metaMDS} and \code{monoMDS} rejected dissimilarities with missing values. \item Function \code{rarecurve} did not check its input and this could cause confusing error messages. Now function checks that input data are integers that can be interpreted as counts on individuals and all sampling units have some species. Unchecked bad inputs were the reason for problems reported in \href{http://stackoverflow.com/questions/30856909/error-while-using-rarecurve-in-r}{Stackoverflow}. } } % bug fixes \subsection{NEW FEATURES AND FUNCTIONS}{ \itemize{ \item Scaling of ordination axes in \code{cca}, \code{rda} and \code{capscale} can now be expressed with descriptive strings \code{"none"}, \code{"sites"}, \code{"species"} or \code{"symmetric"} to tell which kind of scores should be scaled by eigenvalues. These can be further modified with arguments \code{hill} in \code{cca} and \code{correlation} in \code{rda}. The old numeric scaling can still be used. \item The permutation data can be extracted from \code{anova} results of constrained ordination (\code{cca}, \code{rda}, \code{capscale}) and further analysed with \code{permustats} function. \item New data set \code{BCI.env} of site information for the Barro Colorado Island tree community data. Most useful variables are the UTM coordinates of sample plots. Other variables are constant or nearly constant and of little use in normal analysis. } } % new features and functions } \section{Changes in version 2.3-0}{ \subsection{BUG FIXES}{ \itemize{ \item Constrained ordination functions \code{cca}, \code{rda} and \code{capscale} are now more robust. Scoping of data set names and variable names is much improved. This should fix numerous long-standing problems, for instance those reported by Benedicte Bachelot (in email) and Richard Telford (in Twitter), as well as issues \href{https://github.com/vegandevs/vegan/issues/16}{#16} and \href{https://github.com/vegandevs/vegan/issues/100}{#100} in GitHub. \item Ordination functions \code{cca} and \code{rda} silently accepted dissimilarities as input although their analysis makes no sense with these methods. Dissimilarities should be analysed with distance-based redundancy analysis (\code{capscale}). \item The variance of the conditional component was over-estimated in \code{goodness} of \code{rda} results, and results were wrong for partial RDA. The problems were reported in an \href{https://stat.ethz.ch/pipermail/r-sig-ecology/2015-March/004936.html}{R-sig-ecology} message by Christoph von Redwitz. } } % bug fixes \subsection{WINDOWS}{ \itemize{ \item \code{orditkplot} did not add file type identifier to saved graphics in Windows although that is required. The problem only concerned Windows OS. } } % windows \subsection{NEW FEATURES AND FUNCTIONS}{ \itemize{ \item \code{goodness} function for constrained ordination (\code{cca}, \code{rda}, \code{capscale}) was redesigned. Function gained argument \code{addprevious} to add the variation explained by previous ordination components to axes when \code{statistic = "explained"}. With this option, \code{model = "CCA"} will include the variation explained by partialled-out conditions, and \code{model = "CA"} will include the accumulated variation explained by conditions and constraints. The former behaviour was \code{addprevious = TRUE} for \code{model = "CCA"}, and \code{addprevious = FALSE} for \code{model = "CA"}. The argument will have no effect when \code{statistic = "distance"}, but this will always show the residual distance after all previous components. Formerly it displayed the residual distance only for the currently analysed model. \item Functions \code{ordiArrowMul} and \code{ordiArrowTextXY} are exported and can be used in normal interactive sessions. These functions are used to scale a bunch arrows to fit ordination graphics, and formerly they were internal functions used within other \pkg{vegan} functions. \item \code{orditkplot} can export graphics in SVG format. SVG is a vector graphics format which can be edited with several external programs, such as Illustrator and Inkscape. \item Rarefaction curve (\code{rarecurve}) and species accumulation models (\code{specaccum}, \code{fitspecaccum}) gained new functions to estimate the slope of curve at given location. Originally this was based on a response to an \href{https://stat.ethz.ch/pipermail/r-sig-ecology/2015-May/005038.html}{R-SIG-ecology} query. For rarefaction curves, the function is \code{rareslope}, and for species accumulation models it is \code{specslope}. The functions are based on analytic equations, and can also be evaluated at interpolated non-integer values. In \code{specaccum} models the functions can be only evaluated for analytic models \code{"exact"}, \code{"rarefaction"} and \code{"coleman"}. With \code{"random"} and \code{"collector"} methods you can only use finite differences (\code{diff(fitted())}). Analytic functions for slope are used for all non-linear regression models known to \code{fitspecaccum}. \item Species accumulation models (\code{specaccum}) and non-liner regression models for species accumulation (\code{fitspecaccum}) work more consistently with weights. In all cases, the models are defined using the number of sites as independent variable, which with weights means that observations can be non-integer numbers of virtual sites. The \code{predict} models also use the number of sites with \code{newdata}, and for analytic models they can estimate the expected values for non-integer number of sites, and for non-analytic randomized or collector models they can interpolate on non-integer values. \item \code{fitspecaccum} gained support functions \code{AIC} and \code{deviance}. \item The \code{varpart} plots of four-component models were redesigned following Legendre, Borcard & Roberts \emph{Ecology} 93, 1234--1240 (2012), and they use now four ellipses instead of three circles and two rectangles. The components are now labelled in plots, and the circles and ellipses can be easily filled with transparent background colour. } } % new features } % v2.2-2 \section{Changes in version 2.2-1}{ \subsection{GENERAL}{ \itemize{ \item This is a maintenance release to avoid warning messages caused by changes in CRAN repository. The namespace usage is also more stringent to avoid warnings and notes in development versions of \R. } }% end general \subsection{INSTALLATION}{ \itemize{ \item \pkg{vegan} can be installed and loaded without \pkg{tcltk} package. The \pkg{tcltk} package is needed in \code{orditkplot} function for interactive editing of ordination graphics. } } % installation \subsection{BUG FIXES}{ \itemize{ \item \code{ordisurf} failed if \pkg{gam} package was loaded due to namespace issues: some support functions of \pkg{gam} were used instead of \pkg{mgcv} functions. \item \code{tolerance} function failed for unconstrained correspondence analysis. } } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{estimateR} uses a more exact variance formula for bias-corrected Chao estimate of extrapolated number of species. The new formula may be unpublished, but it was derived following the guidelines of Chiu, Wang, Walther & Chao, \emph{Biometrics} 70, 671--682 (2014), \href{http://onlinelibrary.wiley.com/doi/10.1111/biom.12200/suppinfo}{online supplementary material}. \item Diversity accumulation functions \code{specaccum}, \code{renyiaccum}, \code{tsallisaccum}, \code{poolaccum} and \code{estaccumR} use now \pkg{permute} package for permutations of the order of sampling sites. Normally these functions only need simple random permutation of sites, but restricted permutation of the \pkg{permute} package and user-supplied permutation matrices can be used. \item \code{estaccumR} function can use parallel processing. \item \code{linestack} accepts now expressions as labels. This allows using mathematical symbols and formula given as mathematical expressions. } } % new features } % v2.2-1 \section{Changes in version 2.2-0}{ \subsection{GENERAL}{ \itemize{ \item Several \pkg{vegan} functions can now use parallel processing for slow and repeating calculations. All these functions have argument \code{parallel}. The argument can be an integer giving the number of parallel processes. In unix-alikes (Mac OS, Linux) this will launch \code{"multicore"} processing and in Windows it will set up \code{"snow"} clusters as desribed in the documentation of the \pkg{parallel} package. If \code{option} \code{"mc.cores"} is set to an integer > 1, this will be used to automatically start parallel processing. Finally, the argument can also be a previously set up \code{"snow"} cluster which will be used both in Windows and in unix-alikes. \pkg{Vegan} vignette on Design decision explains the implementation (use \code{vegandocs("decission")}, and \pkg{parallel} package has more extensive documentation on parallel processing in \R. The following function use parallel processing in analysing permutation statistics: \code{adonis}, \code{anosim}, \code{anova.cca} (and \code{permutest.cca}), \code{mantel} (and \code{mantel.partial}), \code{mrpp}, \code{ordiareatest}, \code{permutest.betadisper} and \code{simper}. In addition, \code{bioenv} can compare several candidate sets of models in paralle, \code{metaMDS} can launch several random starts in parallel, and \code{oecosimu} can evaluate test statistics for several null models in parallel. \item All permutation tests are based on the \pkg{permute} package which offers strong tools for restricted permutation. All these functions have argument \code{permutations}. The default usage of simple non-restricted permutations is achieved by giving a single integer number. Restricted permutations can be defined using the \code{how} function of the \pkg{permute} package. Finally, the argument can be a permutation matrix where rows define permutations. It is possible to use external or user constructed permutations. See \code{help(permutations)} for a brief introduction on permutations in \pkg{vegan}, and \pkg{permute} package for the full documention. The vignette of the \pkg{permute} package can be read from \pkg{vegan} with command \code{vegandocs("permutations")}. The following functions use the \pkg{permute} package: \code{CCorA}, \code{adonis}, \code{anosim}, \code{anova.cca} (plus associated \code{permutest.cca}, \code{add1.cca}, \code{drop1.cca}, \code{ordistep}, \code{ordiR2step}), \code{envfit} (plus associated \code{factorfit} and \code{vectorfit}), \code{mantel} (and \code{mantel.partial}), \code{mrpp}, \code{mso}, \code{ordiareatest}, \code{permutest.betadisper}, \code{protest} and \code{simper}. \item Community null model generation has been completely redesigned and rewritten. The communities are constructed with new \code{nullmodel} function and defined in a low level \code{commsim} function. The actual null models are generated with a \code{simulate} function that builds an array of null models. The new null models include a wide array of quantitative models in addition to the old binary models, and users can plug in their own generating functions. The basic tool invoking and analysing null models is \code{oecosimu}. The null models are often used only for the analysis of nestedness, but the implementation in \code{oecosimu} allows analysing any statistic, and null models are better seen as an alternative to permutation tests. } %end itemize } % end general \subsection{INSTALLATION}{ \itemize{ \item \pkg{vegan} package dependencies and namespace imports were adapted to changes in \R, and no more trigger warnings and notes in package tests. \item Three-dimensional ordination graphics using \pkg{scatterplot3d} for static plots and \pkg{rgl} for dynamic plots were removed from \pkg{vegan} and moved to a companion package \pkg{vegan3d}. The package is available in CRAN. } %end itemize } % end installation \subsection{NEW FUNCTIONS}{ \itemize{ \item Function \code{dispweight} implements dispersion weighting of Clarke et al. (\emph{Marine Ecology Progress Series}, 320, 11--27). In addition, we implemented a new method for generalized dispersion weighting \code{gdispweight}. Both methods downweight species that are significantly over-dispersed. \item New \code{hclust} support functions \code{reorder}, \code{rev} and \code{scores}. Functions \code{reorder} and \code{rev} are similar as these functions for \code{dendrogram} objects in base \R. However, \code{reorder} can use (and defaults to) weighted mean. In weighted mean the node average is always the mean of member leaves, whereas the \code{dendrogram} uses always unweighted means of joined branches. \item Function \code{ordiareatest} supplements \code{ordihull} and \code{ordiellipse} and provides a randomization test for the one-sided alternative hypothesis that convex hulls or ellipses in two-dimensional ordination space have smaller areas than with randomized groups. \item Function \code{permustats} extracts and inspects permutation results with support functions \code{summary}, \code{density}, \code{densityplot}, \code{qqnorm} and \code{qqmath}. The \code{density} and \code{qqnorm} are standard \R{} tools that only work with one statistic, and \code{densityplot} and \code{qqmath} are \pkg{lattice} graphics that work with univariate and multivariate statistics. The results of following functions can be extracted: \code{anosim}, \code{adonis}, \code{mantel} (and \code{mantel.partial}), \code{mrpp}, \code{oecosimu}, \code{permustest.cca} (but not the corresponding \code{anova} methods), \code{permutest.betadisper}, and \code{protest}. \item \code{stressplot} functions display the ordination distances at given number of dimensions against original distances. The method functins are similar to \code{stressplot} for \code{metaMDS}, and always use the inherent distances of each ordination method. The functions are available for the results \code{capscale}, \code{cca}, \code{princomp}, \code{prcomp}, \code{rda}, and \code{wcmdscale}. } % end itemize } % end new functions \subsection{BUG FIXES}{ \itemize{ \item \code{cascadeKM} of only one group will be \code{NA} instead of a random value. \item \code{ordiellipse} can handle points exactly on a line, including only two points (with a warning). \item plotting \code{radfit} results for several species failed if any of the communities had no species or had only one species. \item \code{RsquareAdj} for \code{capscale} with negative eigenvalues will now report \code{NA} instead of using biased method of \code{rda} results. \item \code{simper} failed when a group had only a single member. }% end itemize } % end bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{anova.cca} functions were re-written to use the \pkg{permute} package. Old results may not be exactly reproduced, and models with missing data may fail in several cases. There is a new option of analysing a sequence of models against each other. \item \code{simulate} functions for \code{cca} and \code{rda} can return several simulations in a \code{nullmodel} compatible object. The functions can produce simulations with correlated errors (also for \code{capscale}) in parametric simulation with Gaussian error. \item \code{bioenv} can use Manhattan, Gower and Mahalanobis distances in addition to the default Euclidean. New helper function \code{bioenvdist} can extract the dissimilarities applied in best model or any other model. \item \code{metaMDS(..., trace = 2)} will show convergence information with the default \code{monoMDS} engine. \item Function \code{MDSrotate} can rotate a \eqn{k}-dimensional ordination to \eqn{k-1} variables. When these variables are correlated (like usually is the case), the vectors can also be correlated to previously rotated dimensions, but will be uncorrelated to all later ones. \item \pkg{vegan} 2.0-10 changed the weighted \code{nestednodf} so that weighted analysis of binary data was equivalent to binary analysis. However, this broke the equivalence to the original method. Now the function has an argument \code{wbinary} to select the method of analysis. The problem was reported and a fix submitted by Vanderlei Debastiani (Universidade Federal do Rio Grande do Sul, Brasil). \item \code{ordiellipse}, \code{ordihull} and \code{ordiellipse} can handle missing values in \code{groups}. \item \code{ordispider} can now use spatial medians instead of means. \item \code{rankindex} can use Manhattan, Gower and Mahalanobis distance in addition to the default Euclidean. \item User can set colours and line types in function \code{rarecurve} for plotting rarefaction curves. \item \code{spantree} gained a support function \code{as.hclust} to change the minimum spanning tree into an \code{hclust} tree. \item \code{fitspecaccum} can do weighted analysis. Gained \code{lines} method. \item Functions for extrapolated number of species or for the size of species pool using Chao method were modified following Chiu et al., \emph{Biometrics} 70, 671--682 (2014). Incidence based \code{specpool} can now use (and defaults to) small sample correction with number of sites as the sample size. Function uses basic Chao extrapolation based on the ratio of singletons and doubletons, but switches now to bias corrected Chao extrapolation if there are no doubletons (species found twice). The variance formula for bias corrected Chao was derived following the supporting \href{http://onlinelibrary.wiley.com/doi/10.1111/biom.12200/suppinfo}{online material} and differs slightly from Chiu et al. (2014). The \code{poolaccum} function was changed similarly, but the small sample correction is used always. The abundance based \code{estimateR} uses bias corrected Chao extrapolation, but earlier it estimated its variance with classic Chao model. Now we use the widespread \href{http://viceroy.eeb.uconn.edu/EstimateS/EstimateSPages/EstSUsersGuide/EstimateSUsersGuide.htm#AppendixB}{approximate equation} for variance. With these changes these functions are more similar to \href{http://viceroy.eeb.uconn.edu/EstimateS/EstimateSPages/EstSUsersGuide/EstimateSUsersGuide.htm#AppendixB}{EstimateS}. \item \code{tabasco} uses now \code{reorder.hclust} for \code{hclust} object for better ordering than previously when it cast trees to \code{dendrogram} objects. \item \code{treedive} and \code{treedist} default now to \code{match.force = TRUE} and can be silenced with \code{verbose = FALSE}. \item \code{vegdist} gained Mahalanobis distance. \item Nomenclature updated in plant community data with the help of \pkg{Taxonstand} and \pkg{taxize} packages. The taxonomy of the \code{dune} data was adapted to the same sources and APG III. \code{varespec} and \code{dune} use 8-character names (4 from genus + 4 from species epithet). New data set on phylogenetic distances for \code{dune} was extracted from Zanne et al. (\emph{Nature} 506, 89--92; 2014). \item User configurable plots for \code{rarecurve}. } %end itemize } % end new featuresq \subsection{DEPRECATED AND DEFUNCT}{ \itemize{ \item \code{strata} are deprecated in permutations. It is still accepted but will be phased out in next releases. Use \code{how} of \pkg{permute} package. \item \code{cca}, \code{rda} and \code{capscale} do not return scores scaled by eigenvalues: use \code{scores} function to extract scaled results. \item \code{commsimulator} is deprecated. Replace \code{commsimulator(x, method)} with \code{simulate(nullmodel(x, method))}. \item \code{density} and \code{densityplot} for permutation results are deprecated: use \code{permustats} with its \code{density} and \code{densityplot} method. } %end itemize } % end deprecated } % end version 2.2-0 \section{Changes in version 2.0-10}{ \subsection{GENERAL}{ \itemize{ \item This version is adapted to the changes in \pkg{permute} package version 0.8-0 and no more triggers NOTEs in package checks. This release may be the last of the 2.0 series, and the next \pkg{vegan} release is scheduled to be a major release with newly designed \code{oecosimu} and community pattern simulation, support for parallel processing, and full support of the \pkg{permute} package. If you are interested in these developments, you may try the development versions of \pkg{vegan} in \href{http://r-forge.r-project.org/projects/vegan/}{R-Forge} or \href{https://github.com/jarioksa/vegan}{GitHub} and report the problems and user experience to us. } } % end general \subsection{BUG FIXES}{ \itemize{ \item \code{envfit} function assumed that all external variables were either numeric or factors, and failed if they were, say, character strings. Now only numeric variables are taken as continuous vectors, and all other variables (character strings, logical) are coerced to factors if possible. The function also should work with degenerate data, like only one level of a factor or a constant value of a continuous environmental variable. The ties were wrongly in assessing permutation \eqn{P}-values in \code{vectorfit}. \item \code{nestednodf} with quantitative data was not consistent with binary models, and the fill was wrongly calculated with quantitative data. \item \code{oecosimu} now correctly adapts displayed quantiles of simulated values to the \code{alternative} test direction. \item \code{renyiaccum} plotting failed if only one level of diversity \code{scale} was used. } } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item The Kempton and Taylor algorithm was found unreliable in \code{fisherfit} and \code{fisher.alpha}, and now the estimation of Fisher \eqn{\alpha}{alpha} is only based on the number of species and the number of individuals. The estimation of standard errors and profile confidence intervals also had to be scrapped. \item \code{renyiaccum}, \code{specaccum} and \code{tsallisaccum} functions gained \code{subset} argument. \item \code{renyiaccum} can now add a \code{collector} curve to to the analysis. The collector curve is the diversity accumulation in the order of the sampling units. With an interesting ordering or sampling units this allows comparing actual species accumulations with the expected randomized accumulation. \item \code{specaccum} can now perform weighted accumulation using the sampling effort as weights. } } % new features } % end 2.0-10 \section{Changes in version 2.0-9}{ \itemize{ \item This version is released due to changes in programming interface and testing procedures in \R{} 3.0.2. If you are using an older version of \R, there is no need to upgrade \pkg{vegan}. There are no new features nor bug fixes. The only user-visible changes are in documentation and in output messages and formatting. Because of \R{} changes, this version is dependent on \R{} version 2.14.0 or newer and on \pkg{lattice} package. } } \section{Changes in version 2.0-8}{ \subsection{GENERAL}{ \itemize{ \item This is a maintenance release that fixes some issues raised by changed in \R{} toolset for processing vignettes. In the same we also fix some typographic issues in the vignettes. } } % general \subsection{NEW FEATURES}{ \itemize{ \item \code{ordisurf} gained new arguments for more flexible definition of fitted models to better utilize the \pkg{mgcv}\code{::gam} function. The linewidth of contours can now be set with the argument \code{lwd}. \item Labels to arrows are positioned in a better way in \code{plot} functions for the results of \code{envfit}, \code{cca}, \code{rda} and \code{capscale}. The labels should no longer overlap the arrow tips. \item The setting test direction is clearer in \code{oecosimu}. \item \code{ordipointlabel} gained a \code{plot} method that can be used to replot the saved result. } } % new features } \section{Changes in version 2.0-7}{ \subsection{NEW FUNCTIONS}{ \itemize{ \item \code{tabasco()} is a new function for graphical display of community data matrix. Technically it is an interface to \R \code{heatmap}, but its use is closer to \pkg{vegan} function \code{vegemite}. The function can reorder the community data matrix similarly as \code{vegemite}, for instance, by ordination results. Unlike \code{heatmap}, it only displays dendrograms if supplied by the user, and it defaults to re-order the dendrograms by correspondence analysis. Species are ordered to match site ordering or like determined by the user. } } % new functions \subsection{BUG FIXES}{ \itemize{ \item Function \code{fitspecaccum(..., model = "asymp")} fitted logistic model instead of asymptotic model (or the same as \code{model = "logis"}). \item \code{nestedtemp()} failed with very sparse data (fill \eqn{< 0.38}\%). } } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item The \code{plot} function for constrained ordination results (\code{cca}, \code{rda}, \code{capscale}) gained argument \code{axis.bp} (defaults \code{TRUE}) which can be used to suppress axis scale for biplot arrays. \item Number of iterations in nonmetric multidimensional scaling (NMDS) can be set with keyword \code{maxit} (defaults \code{200}) in \code{metaMDS}. } } % new features \subsection{DEPRECATED}{ \itemize{ \item The result objects of \code{cca}, \code{rda} and \code{capscale} will no longer have scores \code{u.eig}, \code{v.eig} and \code{wa.eig} in the future versions of \pkg{vegan}. This change does not influence normal usage, because \pkg{vegan} functions do not need these items. However, external scripts and packages may need changes in the future versions of \pkg{vegan}. } } % deprecated } % vegan 2.0-7 \section{Changes in version 2.0-6}{ \subsection{BUG FIXES}{ \itemize{ \item The species scores were scaled wrongly in \code{capscale()}. They were scaled correctly only when Euclidean distances were used, but usually \code{capscale()} is used with non-Euclidean distances. Most graphics will change and should be redone. The change of scaling mainly influences the spread of species scores with respect to the site scores. \item Function \code{clamtest()} failed to set the minimum abundance threshold in some cases. In addition, the output was wrong when some of the possible species groups were missing. Both problems were reported by Richard Telford (Bergen, Norway). \item Plotting an object fitted by \code{envfit()} would fail if \code{p.max} was used and there were unused levels for one or more factors. The unused levels could result from deletion of observations with missing values or simply as the result of supplying a subset of a larger data set to \code{envfit()}. \item \code{multipart()} printed wrong information about the analysis type (but did the analysis correctly). Reported by Valerie Coudrain. \item \code{oecosimu()} failed if its \code{nestedfun} returned a data frame. A more fundamental fix will be in \pkg{vegan} 2.2-0, where the structure of the \code{oecosimu()} result will change. \item The plot of two-dimensional \code{procrustes()} solutions often draw original axes in a wrong angle. The problem was reported by Elizabeth Ottesen (MIT). \item Function \code{treedive()} for functional or phylogenetic diversity did not correctly match the species names between the community data and species tree when the tree contained species that did not occur in the data. Related function \code{treedist()} for phylogenetic distances did not try to match the names at all. } } % bug fixes \subsection{NEW FEATURES}{ \itemize{ \item The output of \code{capscale()} displays the value of the additive constant when argument \code{add = TRUE} was used. \item \code{fitted()} functions for \code{cca()}, \code{rda()} and \code{capscale()} can now return conditioned (partial) component of the response: Argument \code{model} gained a new alternative \code{model = "pCCA"}. \item \code{dispindmorisita()} output gained a new column for Chi-squared based probabilities that the null hypothesis (random distribution) is true. \item \code{metaMDS()} and \code{monoMDS()} have new default convergence criteria. Most importantly, scale factor of the gradient (\code{sfgrmin}) is stricter. The former limit was too slack with large data sets and iterations stopped early without getting close to the solution. In addition, \code{scores()} ignore now requests to dimensions beyond those calculated instead of failing, and \code{scores()} for \code{metaMDS()} results do not drop dimensions. \item \code{msoplot()} gained \code{legend} argument for positioning the legend. \item Nestedness function \code{nestednodf()} gained a \code{plot} method. \item \code{ordiR2step()} gained new argument \code{R2scope} (defaults \code{TRUE}) which can be used to turn off the criterion of stopping when the adjusted \eqn{R^2}{R-squared} of the current model exceeds that of the scope. This option allows model building when the \code{scope} would be overdetermined (number of predictors higher than number of observations). \code{ordiR2step()} now handles partial redundancy analysis (pRDA). \item \code{orditorp()} gained argument \code{select} to select the rows or columns of the results to display. \item \code{protest()} prints the standardized residual statistic \eqn{m_{12}^2}{squared m12} in addition to the squared Procrustes correlation \eqn{R^2}{R-squared}. Both were calculated, but only the latter was displayed. Permutation tests are much faster in \code{protest()}. Instead of calling repeatedly \code{procrustes()}, the goodness of fit statistic is evaluated within the function. \item \code{wcmdscale()} gained methods for \code{print}, \code{plot} etc. of the results. These methods are only used if the full \code{wcmdscale} result is returned with, e.g., argument \code{eig = TRUE}. The default is still to return only a matrix of scores similarly as the standard \R function \code{cmdscale()}, and in that case the new methods are not used. } } % new features } % end 2.0-6 \section{Changes in version 2.0-5}{ \subsection{BUG FIXES}{ \itemize{ \item \code{anova(, ...)} failed with \code{by = "axis"} and \code{by = "term"}. The bug was reported by Dr Sven Neulinger (Christian Albrecht University, Kiel, Germany). \item \code{radlattice} did not honour argument \code{BIC = TRUE}, but always displayed AIC. } } % bug fixes \subsection{NEW FUNCTIONS}{ \itemize{ \item Most \pkg{vegan} functions with permutation tests have now a \code{density} method that can be used to find empirical probability distributions of permutations. There is a new \code{plot} method for these functions that displays both the density and the observed statistic. The \code{density} function is available for \code{adonis}, \code{anosim}, \code{mantel}, \code{mantel.partial}, \code{mrpp}, \code{permutest.cca} and \code{procrustes}. Function \code{adonis} can return several statistics, and it has now a \code{densityplot} method (based on \pkg{lattice}). Function \code{oecosimu} already had \code{density} and \code{densityplot}, but they are now similar to other \pkg{vegan} methods, and also work with \code{adipart}, \code{hiersimu} and \code{multipart}. \item \code{radfit} functions got a \code{predict} method that also accepts arguments \code{newdata} and \code{total} for new ranks and site totals for prediction. The functions can also interpolate to non-integer \dQuote{ranks}, and in some models also extrapolate. } } % new functions \subsection{NEW FEATURES}{ \itemize{ \item Labels can now be set in the \code{plot} of \code{envfit} results. The labels must be given in the same order that the function uses internally, and new support function \code{labels} can be used to display the default labels in their correct order. \item Mantel tests (functions \code{mantel} and \code{mantel.partial}) gained argument \code{na.rm} which can be used to remove missing values. This options should be used with care: Permutation tests can be biased if the missing values were originally in matching or fixed positions. \item \code{radfit} results can be consistently accessed with the same methods whether they were a single model for a single site, all models for a single site or all models for all sites in the data. All functions now have methods \code{AIC}, \code{coef}, \code{deviance}, \code{logLik}, \code{fitted}, \code{predict} and \code{residuals}. } } % new features \subsection{INSTALLATION AND BUILDING}{ \itemize{ \item Building of \pkg{vegan} vignettes failed with the latest version of LaTeX (TeXLive 2012). \item \R{} versions later than 2.15-1 (including development version) report warnings and errors when installing and checking \pkg{vegan}, and you must upgrade \pkg{vegan} to this version. The warnings concern functions \code{cIndexKM} and \code{betadisper}, and the error occurs in \code{betadisper}. These errors and warnings were triggered by internal changes in \R. } } % installation and building } % version 2.0-5 \section{Changes in version 2.0-4}{ \subsection{BUG FIXES}{ \itemize{ \item \code{adipart} assumed constant gamma diversity in simulations when assessing the \eqn{P}-value. This could give biased results if the null model produces variable gamma diversities and option \code{weights = "prop"} is used. The default null model (\code{"r2dtable"}) and the default option (\code{weights = "unif"}) were analysed correctly. \item \code{anova(, by = "axis")} and other \code{by} cases failed due to \file{NAMESPACE} issues. \item \code{clamtest} wrongly used frequencies instead of the counts when calculating sample coverage. No detectable differences were produced when rerunning examples from Chazdon et al. 2011 and \pkg{vegan} help page. \item \code{envfit} failed with unused factor levels. \item \code{predict} for \code{cca} results with \code{type = "response"} or \code{type = "working"} failed with \code{newdata} if the number of rows did not match with the original data. Now the \code{newdata} is ignored if it has a wrong number of rows. The number of rows must match because the results in \code{cca} must be weighted by original row totals. The problem did not concern \code{rda} or \code{capscale} results which do not need row weights. Reported by Glenn De'ath. } }% end bug fixes \subsection{NEW FEATURES}{ \itemize{ \item Functions for diversity partitioning (\code{adipart}, \code{hiersimu} and \code{multipart}) have now \code{formula} and \code{default} methods. The \code{formula} method is identical to the previous functions, but the \code{default} method can take two matrices as input. Functions \code{adipart} and \code{multipart} can be used for fast and easy overall partitioning to alpha, beta and gamma diversities by omitting the argument describing the hierarchy. \item The method in \code{betadisper} is biased with small sample sizes. The effects of the bias are strongest with unequal sample sizes. A bias adjusted version was developed by Adrian Stier and Ben Bolker, and can be invoked with argument \code{bias.adjust} (defaults to \code{FALSE}). \item \code{bioenv} accepts dissimilarities (or square matrices that can be interpreted as dissimilarities) as an alternative to community data. This allows using other dissimilarities than those available in \code{vegdist}. \item \code{plot} function for \code{envfit} results gained new argument \code{bg} that can be used to set background colour for plotted labels. \item \code{msoplot} is more configurable, and allows, for instance, setting y-axis limits. \item Hulls and ellipses are now filled using semitransparent colours in \code{ordihull} and \code{ordiellipse}, and the user can set the degree of transparency with a new argument \code{alpha}. The filled shapes are used when these functions are called with argument \code{draw = "polygon"}. Function \code{ordihull} puts labels (with argument \code{label = TRUE}) now in the real polygon centre. \item \code{ordiplot3d} returns function \code{envfit.convert} and the projected location of the \code{origin}. Together these can be used to add \code{envfit} results to existing \code{ordiplot3d} plots. Equal aspect ratio cannot be set exactly in \code{ordiplot3d} because underlying core routines do not allow this. Now \code{ordiplot3d} sets equal axis ranges, and the documents urge users to verify that the aspect ratio is reasonably equal and the graph looks like a cube. If the problems cannot be solved in the future, \code{ordiplot3d} may be removed from next releases of \pkg{vegan}. \item Function \code{ordipointlabel} gained argument to \code{select} only some of the items for plotting. The argument can be used only with one set of points. } } % end new features }%end version 2.0-4 \section{Changes in version 2.0-3}{ \subsection{NEW FUNCTIONS}{ \itemize{ \item Added new nestedness functions \code{nestedbetasor} and \code{nestedbetajac} that implement multiple-site dissimilarity indices and their decomposition into turnover and nestedness components following Baselga (\emph{Global Ecology and Biogeography} 19, 134--143; 2010). \item Added function \code{rarecurve} to draw rarefaction curves for each row (sampling unit) of the input data, optionally with lines showing rarefied species richness with given sample size for each curve. \item Added function \code{simper} that implements \dQuote{similarity percentages} of Clarke (\emph{Australian Journal of Ecology} 18, 117--143; 1993). The method compares two or more groups and decomposes the average between-group Bray-Curtis dissimilarity index to contributions by individual species. The code was developed in \href{https://github.com/jarioksa/vegan}{GitHub} by Eduard Szöcs (Uni Landau, Germany). } } % end new functions \subsection{BUG FIXES}{ \itemize{ \item \code{betadisper()} failed when the \code{groups} was a factor with empty levels. \item Some constrained ordination methods and their support functions are more robust in border cases (completely aliased effects, saturated models, user requests for non-existng scores etc). Concerns \code{capscale}, \code{ordistep}, \code{varpart}, \code{plot} function for constrained ordination, and \code{anova(, by = "margin")}. \item The \code{scores} function for \code{monoMDS} did not honour \code{choices} argument and hence dimensions could not be chosen in \code{plot}. \item The default \code{scores} method failed if the number of requested axes was higher than the ordination object had. This was reported as an error in \code{ordiplot} in \href{https://stat.ethz.ch/pipermail/r-sig-ecology/2012-February/002768.html}{R-sig-ecology} mailing list. } } % end bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{metaMDS} argument \code{noshare = 0} is now regarded as a numeric threshold that always triggers extended dissimilarities (\code{stepacross}), instead of being treated as synonymous with \code{noshare = FALSE} which always suppresses extended dissimilarities. \item Nestedness discrepancy index \code{nesteddisc} gained a new argument that allows user to set the number of iterations in optimizing the index. \item \code{oecosimu} displays the mean of simulations and describes alternative hypothesis more clearly in the printed output. \item Implemented adjusted \eqn{R^2}{R-squared} for partial RDA. For partial model \code{rda(Y ~ X1 + Condition(X2))} this is the same as the component \code{[a] = X1|X2} in variance partition in \code{varpart} and describes the marginal (unique) effect of constraining term to adjusted \eqn{R^2}{R-squared}. \item Added Cao dissimilarity (CYd) as a new dissimilarity method in \code{vegdist} following Cao et al., \emph{Water Envir Res} 69, 95--106 (1997). The index should be good for data with high beta diversity and variable sampling intensity. Thanks to consultation to Yong Cao (Univ Illinois, USA). } } % end new features } % end version 2.0-3 \section{Changes in version 2.0-2}{ \subsection{BUG FIXES}{ \itemize{ \item Function \code{capscale} failed if constrained component had zero rank. This happened most likely in partial models when the conditions aliased constraints. The problem was observed in \code{anova(..., by ="margin")} which uses partial models to analyses the marginal effects, and was reported in an email message to \href{https://stat.ethz.ch/pipermail/r-help/2011-October/293077.html}{R-News mailing list}. \item \code{stressplot} and \code{goodness} sometimes failed when \code{metaMDS} was based on \code{isoMDS} (\pkg{MASS} package) because \code{metaMDSdist} did not use the same defaults for step-across (extended) dissimilarities as \code{metaMDS(..., engine = "isoMDS")}. The change of defaults can also influence triggering of step-across in \code{capscale(..., metaMDSdist = TRUE)}. \item \code{adonis} contained a minor bug resulting from incomplete implementation of a speed-up that did not affect the results. In fixing this bug, a further bug was identified in transposing the hat matrices. This second bug was only active following fixing of the first bug. In fixing both bugs, a speed-up in the internal f.test() function is fully realised. Reported by Nicholas Lewin-Koh. } } % end bug fixes \subsection{NEW FEATURES}{ \itemize{ \item \code{ordiarrows} and \code{ordisegments} gained argument \code{order.by} that gives a variable to sort points within \code{groups}. Earlier the points were assumed to be in order. \item Function \code{ordispider} invisibly returns the coordinates to which the points were connected. Typically these are class centroids of each point, but for constrained ordination with no \code{groups} they are the LC scores. } } %end new features } %end version 2.0-2 \section{Changes in version 2.0-1}{ \subsection{NEW FUNCTIONS}{ \itemize{ \item \code{clamtest}: new function to classify species as generalists and specialists in two distinct habitats (CLAM test of Chazdon et al., \emph{Ecology} 92, 1332--1343; 2011). The test is based on multinomial distribution of individuals in two habitat types or sampling units, and it is applicable only to count data with no over-dispersion. \item \code{as.preston} gained \code{plot} and \code{lines} methods, and \code{as.fisher} gained \code{plot} method (which also can add items to existing plots). These are similar as \code{plot} and \code{lines} for \code{prestonfit} and \code{fisherfit}, but display only data without the fitted lines. \item \code{raupcrick}: new function to implement Raup-Crick dissimilarity as a probability of number of co-occurring species with occurrence probabilities proportional to species frequencies. \pkg{Vegan} has Raup-Crick index as a choice in \code{vegdist}, but that uses equal sampling probabilities for species and analytic equations. The new \code{raupcrick} function uses simulation with \code{oecosimu}. The function follows Chase et al. (2011) \emph{Ecosphere} 2:art24 [\href{http://www.esajournals.org/doi/abs/10.1890/ES10-00117.1}{doi:10.1890/ES10-00117.1}], and was developed with the consultation of Brian Inouye. } } % end NEW FUNCTIONS \subsection{BUG FIXES}{ \itemize{ \item Function \code{meandist} could scramble items and give wrong results, especially when the \code{grouping} was numerical. The problem was reported by Dr Miguel Alvarez (Univ. Bonn). \item \code{metaMDS} did not reset \code{tries} when a new model was started with a \code{previous.best} solution from a different model. \item Function \code{permatswap} for community null models using quantitative swap never swapped items in a \eqn{2 \times 2}{2 by 2} submatrix if all cells were filled. \item The result from \code{permutest.cca} could not be \code{update}d because of a \file{NAMESPACE} issue. \item \R 2.14.0 changed so that it does not accept using \code{sd()} function for matrices (which was the behaviour at least since \R 1.0-0), and several \pkg{vegan} functions were changed to adapt to this change (\code{rda}, \code{capscale}, \code{simulate} methods for \code{rda}, \code{cca} and \code{capscale}). The change in \R 2.14.0 does not influence the results but you probably wish to upgrade \pkg{vegan} to avoid annoying warnings. } } % end BUG FIXES \subsection{ANALYSES}{ \itemize{ \item \code{nesteddisc} is slacker and hence faster when trying to optimize the statistic for tied column frequencies. Tracing showed that in most cases an improved ordering was found rather early in tries, and the results are equally good in most cases. } } % end ANALYSES } % end version 2.0-1 \section{Changes in version 2.0-0}{ \subsection{GENERAL}{ \itemize{ \item Peter Minchin joins the \pkg{vegan} team. \item \pkg{vegan} implements standard \R \file{NAMESPACE}. In general, \code{S3} methods are not exported which means that you cannot directly use or see contents of functions like \code{cca.default}, \code{plot.cca} or \code{anova.ccabyterm}. To use these functions you should rely on \R delegation and simply use \code{cca} and for its result objects use \code{plot} and \code{anova} without suffix \code{.cca}. To see the contents of the function you can use \code{:::}, such as \code{vegan:::cca.default}. This change may break packages, documents or scripts that rely on non-exported names. \item \pkg{vegan} depends on the \pkg{permute} package. This package provides powerful tools for restricted permutation schemes. All \pkg{vegan} permutation will gradually move to use \pkg{permute}, but currently only \code{betadisper} uses the new feature. } } % end GENERAL \subsection{NEW FUNCTIONS}{ \itemize{ \item \code{monoMDS}: a new function for non-metric multidimensional scaling (NMDS). This function replaces \code{MASS::isoMDS} as the default method in \code{metaMDS}. Major advantages of \code{monoMDS} are that it has \sQuote{weak} (\sQuote{primary}) tie treatment which means that it can split tied observed dissimilarities. \sQuote{Weak} tie treatment improves ordination of heterogeneous data sets, because maximum dissimilarities of \eqn{1} can be split. In addition to global NMDS, \code{monoMDS} can perform local and hybrid NMDS and metric MDS. It can also handle missing and zero dissimilarities. Moreover, \code{monoMDS} is faster than previous alternatives. The function uses \code{Fortran} code written by Peter Minchin. \item \code{MDSrotate} a new function to replace \code{metaMDSrotate}. This function can rotate both \code{metaMDS} and \code{monoMDS} results so that the first axis is parallel to an environmental vector. \item \code{eventstar} finds the minimum of the evenness profile on the Tsallis entropy, and uses this to find the corresponding values of diversity, evenness and numbers equivalent following Mendes et al. (\emph{Ecography} 31, 450-456; 2008). The code was contributed by Eduardo Ribeira Cunha and Heloisa Beatriz Antoniazi Evangelista and adapted to \pkg{vegan} by Peter Solymos. \item \code{fitspecaccum} fits non-linear regression models to the species accumulation results from \code{specaccum}. The function can use new self-starting species accumulation models in \pkg{vegan} or other self-starting non-linear regression models in \R. The function can fit Arrhenius, Gleason, Gitay, Lomolino (in \pkg{vegan}), asymptotic, Gompertz, Michaelis-Menten, logistic and Weibull (in base \R) models. The function has \code{plot} and \code{predict} methods. \item Self-starting non-linear species accumulation models \code{SSarrhenius}, \code{SSgleason}, \code{SSgitay} and \code{SSlomolino}. These can be used with \code{fitspecaccum} or directly in non-linear regression with \code{nls}. These functions were implemented because they were found good for species-area models by Dengler (\emph{J. Biogeogr.} 36, 728-744; 2009). } } % end NEW FUNCTIONS \subsection{NEW FEATURES}{ \itemize{ \item \code{adonis}, \code{anosim}, \code{meandist} and \code{mrpp} warn on negative dissimilarities, and \code{betadisper} refuses to analyse them. All these functions expect dissimilarities, and giving something else (like correlations) probably is a user error. \item \code{betadisper} uses restricted permutation of the \pkg{permute} package. \item \code{metaMDS} uses \code{monoMDS} as its default ordination engine. Function gains new argument \code{engine} that can be used to alternatively select \code{MASS::isoMDS}. The default is not to use \code{stepacross} with \code{monoMDS} because its \sQuote{weak} tie treatment can cope with tied maximum dissimilarities of one. However, \code{stepacross} is the default with \code{isoMDS} because it cannot handle adequately these tied maximum dissimilarities. \item \code{specaccum} gained \code{predict} method which uses either linear or spline interpolation for data between observed points. Extrapolation is possible with spline interpolation, but may make little sense. \item \code{specpool} can handle missing values or empty factor levels in the grouping factor \code{pool}. Now also checks that the length of the \code{pool} matches the number of observations. } } % end NEW FEATURES \subsection{DEPRECATED AND DEFUNCT}{ \itemize{ \item \code{metaMDSrotate} was replaced with \code{MDSrotate} that can also handle the results of \code{monoMDS}. \item \code{permuted.index2} and other \dQuote{new} permutation code was removed in favour of the \pkg{permute} package. This code was not intended for normal use, but packages depending on that code in \pkg{vegan} should instead depend on \pkg{permute}. } } % end DEPRECATED \subsection{ANALYSES}{ \itemize{ \item \code{treeheight} uses much snappier code. The results should be unchanged. } } % end ANALYSES }% end VERSION 2.0 vegan/inst/OldChangeLog0000644000176200001440000074447613207524311014564 0ustar liggesusersVEGAN DEVEL VERSIONS at https://github.com/vegandevs/vegan ChangeLog provided a detailed development history of vegan, but it is not updated after September 11, 2014. Vegan moved to git source code management and linear ChangeLog is poorly suited for branching git development. Use git log to track the history in your current branch. The main upstream repository of vegan is currently https://github.com/vegandevs/vegan. ChangeLog gave technical details and was mainly provided for vegan developers. Most important user-visible changes are listed in the NEWS of the current release and its patched version. Version 2.1-43 (opened September 11, 2014) * cca, rda, capscale: remove u.eig, v.eig and wa.eig items or scores scaled by eigenvectors. We have had a warning of their eventual removal since vegan 1.6-8, and now we finally did so. Scaling of scores happens when scores() function access normalized score items of the results. * commsimulator: commented out deprecation warning at the moment, because this triggered warnings in CRAN packages bipartite and metacom. Contacted the maintainers of these packages, and will put back the warning in 2.2-1. * getPermuteMatrix: works also when 'strata' are missing. Triggered an error in CRAN package mpmcorrelogram. * permustats: new function to extract permutation results from vegan objects, with support functions summary, density, densityplot, qqnorm and qqmath. Deprecated previous density and densityplot methods directly accessing the same results. * ordirgl, ordiplot3d: 3D functions using rgl or scatterplot3d packages were removed from vegan and moved to a new CRAN package vegan3d (released Oct 7, 2014). * scores.hclust: combined documentation with other hclust methods. * scoverage: removed from vegan. * dispweight: veganified so that uses nullmodels. Added gdispweight(): a new generalized method taking any glm() formula instead of one grouping. * betadisper Permutation tests via the `permutest()` method are now parallelised. The number of cores to parallelise over is specified by argument `parallel` in common with the implementation for `cca()`. Fix a couple of bugs in the examples; number of permutations was specified using `control` which is not an argument to the `permutest()` method for `betadisper()`. * text.cca: was incorrectly testing if factor constraints were in the biplot scores when user-suppiled lables for factors were given. * ccanova: removed from vegan. These were backup functions of old anova.cca, and were completely rewritten for new vegan. * metaMDSrotate: made defunct (replaced with MDSrotate). Version 2.1-42 (closed September 11, 2014) * Opened a new version to prepare release 2.2-0. * Moved main development from R-Forge to GitHub.com. * NAMESPACE, DESCRIPTION: adapted to current R CMD check that has more stringent tests on attaching and importing external packages and using their functions. * getPermuteMatrix: routines have a common API based on the new function. Version 2.1-41 (closed September 4, 2014) * ordiellipse, ordihull, ordispider: can now handle (omit) NA cases in 'groups'. They were able to omit to NA cases in scores, but having NA in 'groups' triggered really cryptic error messages. * adipart, multipart, hiersimu: it is now an error to provide non-nested sampling hierarchy (used to be a warning). * new version opened with the CRAN release of vegan_2.0-10 on December 12, 2013. * anosim, mantel, mantel.partial: R CMD check told that "... may be used in an incorrect context". The dots were added in r2765, and now removed. * ordistep: add1.cca reported P=0 for redundant terms with 0 Df, and this caused an error in ordistep. * as.hclust.spantree: a new function to cast a "spantree" result object to an "hclust" tree. * hclust: add reorder() and rev() methods for standard "hclust" trees of R. I have no clue why base R does not have these methods, but I provide them now in vegan. An additional reason for providing these methods is that reorder(, wts, agglo.FUN = mean) will use unweighted mean of merged groups even when these are of very unequal sizes. The reorder method provided here will use group sizes as weights and the value of the group will be the mean of its leaves (terminal nodes). Add scores() method to extract coordinates of internal nodes or leaves from a plotted hclust() tree. The function is whimsical and may be removed before release (it is documented separately to make this easier). * biplot.rda: failed in axis scaling with negative 'scaling' values when some species had zero variance (and hence species scores was 0/0 = NaN). * cascadeKM: Calinski index for one group will now be NA instead of randomly chosen Inf, -Inf or NaN which can cause confusion (see http://stackoverflow.com/questions/21022848/r-produces-different-result-after-io-on-file * ordiellipse: failed if all points were on a line. Now handles these cases by drawing a line trhough the points, and issuing a warning from chol(): "the matrix is either rank-deficient or indefinite". Earlier we required at least three points for an ellipse, but these could still be on a line and fail. Now we accept two points, and draw the line with a warning. The problem with three points was reported by Paul Bacquet (Louvain, Belgium). * radfit: plotting of radfit frames of several communuties failed if there were one-species or no-species (empty) rows. Part of this was fitted.radfit that now returns sensible and consistent output for these cases as well, and radfit.data.frame() completely removes empty rows from the data (with a warning). * RsquareAdj: return list(NA, NA) for capscale objects with imaginary component, and use rda method if there is no imaginary component. * tabasco: "hclust" objects (use, sp.ind) are reordered using weighted means. This is a better method than the unweighted means used for reordering of dendrograms. Earlier "hclust" objects were changed to dendrograms, but now we provide reorder.hclust() and rev.hclust() in vegan, and can use improved method of ordering the table. Dendrogram and hclust labels must match the community data names, and now the community matrix is internally reordered to match the dendrograms. This requires that the clusterings do have labels attributes. * treedive, treedist: default is now match.force = TRUE, and treedive() gained new argument 'verbose' to turn of most messages -- which is practical in oecosimu(). * BCI: names checked after http://www.theplantlist.org, but kept the old (alphabetic) order of species. The changes are: Abarema macradenium -> A. macradenia, Apeiba aspera -> A. glabra, Aspidosperma cruenta -> A. desmanthum, Cassipourea ellipitica -> C. guianensis, Chlorophora tinctoria -> Maclura t., Coccoloba manzanillensis -> C. manzinellensis, Cupania sylvatica -> C. seemannii, Dipteryx panamensis -> D. oleifera, Eugenia coloradensis -> E. florida, Eugenia oerstedeana -> E. oerstediana, Inga marginata -> I. semialata, Lonchocarpus latifolius -> L. heptaphyllus (this is ambiguous, since Hebestichma cubense is another alternative), Maquira costaricana -> Maquira guianensis var. costaricana, Phoebe cinnamomifolia -> Cinnamomum triplinerve, Swartzia simplex var. ochnaceae -> var. continentalis, Tabebuia guayacan -> Handroanthus g. Guarea is ambiguous: data have three taxa (fuzzy, grandifolia and guidonia), but theplantlist.org says grandifolia is an ill. synonym of guidonia. This change allows matching 206 of 225 BCI species with http://datadryad.org/resource/doi:10.5061/dryad.63q27. In addition, there are two vars of Swartzia simplex in BCI which could be matched at species level. * dune data sets: use 4+4 letter CEP names for species instead of old 3+3 names. Botanical nomenclature was updated: Leontodon autumnalis -> Scorzoneroides (Leoaut -> Scorautu), Potentilla palustris -> Comarum (Potpal -> Comapalu). Rows are now arranged numerically, and species names alphabetically, vascular plants first, and then the two bryophytes. Added data 'dune.phylodis' which are ages of dune species extracted from http://datadryad.org/resource/doi:10.5061/dryad.63q27 (Zanne AE et al. 2014, Nature doi:10.1038/nature12872, published online Dec 22, 2013). dune.taxon was updated to APG III. * varespec: use 4+4 letter CEP names instead of 3+dot+3. Nomenclature was cautiously fixed. Most important changes: Ledum palustre -> Rhododendron tomentosum (Led.pal -> Rhodtome), Cetraria nivalis -> Flavocetraria nivalis (Cet.niv -> Flavniva). In addition, Dip.mon was corrected to Diphcomp (Diphasiastrum complanatum, should perhaps be Lycopodium c.), and Barbilophozia lycopodioides to B. hatcheri. * plot.envfit: when `envfit()` is called as `envfit(ord, foo[, "bar"])`, there are no useful rownames on the objects returned. Hence the logic in `plot.envfit()` when called with argument `labels` was failing. * rarecurve: line colour and type for each sample can now be specified through formal arguments `col` and `lty`. Incidental wish of http://stackoverflow.com/q/22714775/429846. * simper: now doesn't fail with obscure error when groups have a single member. Version 2.1-40 (closed December 12, 2013) * anova.cca: Function is now based on the new code, but the old is avaialable in a function called ccanova. The API changes: arguments 'step' and 'perm.max' are gone and replaced with 'permutations' that accepts a how() object defining permutations, or a single number like previously or a permutation matrix. The new anova.cca adds an option of analysing a sequence of ordination models. This also means that '...' is now the second argument and the names of all arguments must be written in full. This change can be expected to cause trouble outside vegan. Currently the tests in examples are passed, but tests fail (looks like being caused by the change in API). * add1.cca, drop1.cca, ordistep, ordiR2step: functions were adapted to new anova.cca and this brought along similar changes in API. * envfit: function assumed that environmental variables are either factors or numeric, and choked if they were neither but, say, character strings. Now the function tries to coerce all non-numeric variables into factors, including character strings and logical. This is one possible reason for problems reported in https://stat.ethz.ch/pipermail/r-sig-ecology/2013-December/004217.html, although the reported case is irreproducible and we cannot be sure. Also fixed handling of tied values in assessing the P-values in vectorfit. * nestednodf: vegan 2.1-36 (release 2.0-10) changed the function so that weighted analysis of binary data was equal to unweighted binary analysis, but this broke consinstency with the original software and publication by Almeida-Neto & Ulrich. The fix was now made optional, and the default is to follow published method by adding argument 'wbinary' (defaults FALSE). Based on the suggestion by Matt Barbour in GitHub. * ordispider: can now use spatial medians as centres instead of the default centroids. The kind of centre is defined by new argument 'spiders'. * tests for cca/rda/capscale: commented out test that failed with the anova.cca. Known issue was that 'by = "term"' and 'by = "axis"' stop with error with missing data. This was designed and and can be re-designed to handle missing data by listwise deletion so that models will have the same number of observation for every variable. An unknown issue was that 'by = "margin"' failed in capscale(). This may be a scoping issue an needs inspection. We keep the old vegan-tests.Rout.save file so that we are reminded of the problems at every check. Version 2.1-39 (closed December 3, 2013) * anova.cca: started to rewrite the anova.cca family of functions for permute package. At the first stage, a temporary development function anovacca was created. The user interface was changed, and the function no more adapts the number of iterations for the P-value, and arguments 'step' and 'perm.max' were removed. Instead, permute package is used to create a permutation matrix used in all cases with fixed number of permutations. In addition to the overall test, the function allows now testing a sequence of models (anova.ccalist). Specific tests provided are by = "term" (anovacca.byterm) which is fitted as a sequence of models in anova.ccalist. Case by = "margin" directly calls permutest.cca and gets the significances from differences of residual variation similarly as anova.ccalist. Case by = "axis" is is implemented as a marginal model. Simple permutations give identical results for "term" and "axis" cases, but by = "margin" is different. Marginal models were implemented as partial models with other parameters partialled out in vegan 2.0 and earlier, but the current implementation is an anova.ccalist model where the parameter in question was removed and model compared against the complete model. * commsim: documentation (commsim.Rd) was restructured so that nullmodels were collected under separate sections with a brief introductory text and shorter specific text of the algorithm. Hopefully this makes easier for an outsider to grasp the width of the choices. * oecosimu: change printed quantiles to match the direction of the test as changed in r2495. * permutest.betadisper: updated to the new permute API and operates similarly to permutest.cca in respect of how the permutation test can be defined. It currently doesn't support the parallel processing of the cca method, however. * tests: vegan examples and vegan-tests have been out of sync for a long time. These have not been updated because most of the changes seem to be triggered by switching to R 3.0-x, and we have not had time to analyse the reasons. The differences also seem to be platform specific, and Linux and MacOS give slightly different results. In particular, there seem to be differences in permutations, constrained ordination, in particular in capscale() and rounding of output. We have also introduced some changes in output that were not yet synced. * janitorial: vegan has been dependent on R >= 2.14.0 since version 2.1-34 (r2597 Wed 28-Aug-2013). Now superfluous references and tests for the older R version were removed in R code and documentation. FIXME: cca() returns residuals.zombie item that was supposed to be needed in R < 2.13.0. This was not yet removed: we must first check that this can be safely done. vegan also now depends on permute version 0.7-8 or later. Version 2.1-38 (closed November 10, 2013) * DESCRIPTION: depends on permute >= 0.7-5, where the permute::how() result object can be updated. * bioenv: returns now the number of the best model ('whichbest'), the standardized environmental data ('x') and the distance function used for the environmental data ('distfun'). New function bioenvdist() uses these to re-calculate the environmental distances for the best model, or any other model selected by its number. * permutest.cca: permutation test uses 'permute' package. The old interface was retained, and 'permutations' can be a single number or a permutation matrix (as previously), but now it can also be a how() object of the 'permute' package. The argument 'strata' was also retained, but it is planned to be deprecated in the future, and it is recommended that users switch to defining 'blocks' in how(). * renyiaccum: plot() works also when only one index ('scales') was used. The function gained new argument 'collector = FALSE' to accumulate sites in the order they are in the data set in addition to the summary statistics of permutations. This can be used to analyse the randomness of the particular order of sites (looks like my student would need this). Version 2.1-37 (closed November 5, 2013) * anova.cca: added new function anova.ccalist() to compare a sequence of models. The function is still experimental ("proof of the concept") and unexported. If this stays in vegan, it should eventually be called from anova.cca(). This would bring along a change of API to anova.cca(object, ..., alpha=...): the dots must follow the first argument which turns of positional and partial matching of arguments so that the function can collect the "cca" models. We must decide whether the new function is worth such a change that can make life harder for ordinary users. One potential advantage is that the code in anova.ccaby* functions could be simplifed to a anova.ccabylist() calls. The function is based on calling permutest.cca for each model with identical permutations. We can then compare the change in model for each permutation and collect the test statistics for differences. This requires that the models really are nested so that residual deviance certainly decreases in bigger model (testing theory requires nesting, but this is commonly violated by users: here nesting is necessary). * parellel: default cluster defined by setDefaultCluster() is no longer used in functions with parallel processing. Using default cluster would need querying an unexported environment parellel:::.reg, and this gives a NOTE in R CMD check. * specaccum, renyiaccum, tsallisaccum: gained argument to select a 'subset' of sites (looks like my student would need them). Version 2.1-36 (closed October 14, 2013) * opened with the release of vegan 2.0-9. * decostand(..., "normalize") uses now .Machine$double.eps to replace zero sum of squares instead of matrix minimum. * envfit: if a variable is constant, no fitted vector can be calculated and results will be given as NA (with warnings). Plotting of all vectors will fail in such cases because no finite scale was found for arrows. Fixed on ordiArrowMul. * envfit: try to produce something sensible if fitted variable has constant values (invariable vector, one-level factor). Report arrow heads as all zero, and R2=0 for vectors, and the centroid to the data centroid and R2=0 for factors. Tied values are now treated differently in factorfit: now they support null hypothesis, previously they decreased the P-values. * fisherfit: completely rewritten and estimates of standard error removed: I could not find no justification for these. Actually, it seems that the value of Fisher alpha as estimated in the function was independent of the abundance distribution of species, but will be defined by the number of species (S) and number of individuals (N). Now the Fisher alpha is estimated from the relationship S = alpha*(1 + log(N/alpha)) using function uniroot(). Because of this, standard errors cannot be estimated and they were removed. In addition, functions confint.fisherfit, profile.fisherfit and plot.profile.fisherfit were removed. The estimation of standard errors was also removed in function fisher.alpha (that only calls fisherfit). * nestednodf: matrix fill was wrongly calculated in weighted analysis. The nominator was length of 'comm', and if input was a data frame that was the number of columns instead of the number of cells. The fill was correct in non-weighted analysis because there data were transformed to a matrix, and the length of a matrix is the number of cells (unlike in data frames). * nestednodf: weighted analysis gave all statistics as zero if binary data were supplied. Some ">" comparisons were changed to ">=" and now weighted analysis of binary data gives same results as non-weighted analysis. However, this can change results of weighted analysis of quantitative data. The change needs endorsement by the function author Gustavo Carvalho. * oecosimu: warns user if the specified nullmodel 'method' changes quantitative input data to binary data under cover. Some people have not noticed this. Version 2.1-35 (closed September 25, 2013) * ordilabel: colour arguments ('col', 'fill', 'borderä) can now be vectors and will be recycled if needed. May need care if used with 'select', but should work with 'priority'. This was needed for a function under development and testing: when labelling over lines, it may be nice if the border has the same colour as the line covered. * MDSrotate: can now rotate a solution to more than one vector, provided that the number of dimensions is higher than the number of vectors. Because fitted vectors usually are correlated, only the first vector is aligned to dimension 1, but second vector and further are oblique to the corresponding axis. In any case they will have zero correlation to all subsequent dimensions. * simulate.rda, simulate.cca: gained argument 'correlated' for using covariances of species in generating correlated multivariate normal residuals in parametric simulations. The covariances are estimated from the residual ordination of species. The argument defaults FALSE which implements the old parametric simulation where each species is simulated independently. The argument has no effect in capscale() which stores no information on species. Version 2.1-34 (closed September 5, 2013) * DESCRIPTION: dependent on R >= 2.14.0. * DESCRIPTION, vignettes: R 3.0.2-to-be checks with --as-cran requires (with a NOTE) the vignettes source files (Rnw) to be in vignettes/ directory. Because Makefile is not executed in inst/doc if vignettes/ directory is present, all other sources had to be moved to vignettes/ as well with vignettes/.install_extras to move those to inst/doc after building. This also made /.Rinstignore unnecessary. The vignettes directory was introduced and made recommended in R 2.14.0 so that the this version of vegan depends on R >= 2.14.0. * tweaks for R < 2.12.1 removed: code to fix buggy naming of columns in qr.X before 2.12.1 (as.mlm.cca/rda, intersetcor), and change in the cmdscale() output (eigenvals.default). * tweak for R < 2.13.0 removed: change in cmdscale() output (capscale). * vegandocs: does not use unexported tools:::httpdPort. Now only remaining ':::' case is querying default cluster in the environment parallel:::.reg. Version 2.1-33 (closed August 28, 2013) * DESCRIPTION: new dependence on lattice. Passes new strict R checks with NOTE on ':::' calls to tools:::httpdPort (to launch reading vegan NEWS.html in existing browser window) and parallel:::.reg to acces the defaultCluster in an unexported environment within 'parallel' Namespace. Version 2.1-32 (closed August 19, 2013) * opened a new version with the CRAN release of vegan 2.0-8. * merged Eduard Szöcs's code on dispersion weighting of overdispersed species following Clarke, K. R., M. G. Chapman, P. J. Somerfield, and H. R. Needham. 2006. Dispersion-based Weighting of Species Counts in Assemblage Analyses. _Marine Ecology Progress Series_, 320, 11–27. The basic development was made in github.com and merged to R-Forge. * nullmodel: replaced internal indshuffle() function in make.commsim() with much faster stats::rmultinom(). The rmultinom() function takes argument 'n' for the number of random vectors, and using this could be still faster, but we only generate one vector in time. Using 'n' would require better analysis of individual nullmodels. The commit changes random sequences, but passes tests. * oecosimu: Gained argument 'batchsize' to set the maximum size of simulated nullmodels (in Mb). If a larger object would be produced, the analysis is broken into several batches to avoid exceeding the maximum size. This avoids exhausting memory which can make whole R unresponsive and analysis very, very slow. In general, the argument is needed with large data sets and/or large number of simulations. * orditkplot: bmp has been available in unix-alike OSes since 2008, or a moth after writing orditkplot. Thanks to Brian Ripley for informing us. * vignettes: vignettes use now standard article style instead of hacked jss style. Decision and diversity vignettes are in two columns, but intro in one (R output did not fit in one column). The common packages, macros and definitions were moved to new vegan.sty which is written so that it should work both with amsart and article, and with one and two columns. Figures are now in standard figure environment, but intro redefines this to use sidecaption figures. Version 2.1-31 (closed July 10, 2013) * Dependencies: Vegan now depends on a version equal to 0.7-4 or later. * betadisper, permutest.betadisper: Modified to use the new permute package API (from version 0.7-3 onwards). The `permutest` method gains a new argument `permutations`, which takes a matrix of permutations to be used. * protest: modified to use the new permute API. Gains argument `control` which describes the design. As a result, `strata` argument has been removed and `permutations` argument can only be used to supply your own matrix of permutations. The number of permutations and other features of the design are set via `control` and function `how()` from permute. * ordipointlabel: now uses `ordiArgAbsorber()` to stop the warnings about non-graphical paramters being passed to plotting functions. * ordisurf: can now pass in a line width for the contours via argument `lwd.cl`. * ordiArrowTextXY: New (internal) support function that finds coordinates of text box at the point of the arrow so that the arrow point just touches the text. This should improve positioning of the arrow labels and avoid writing labels over the arrows. * plot.envfit, plot.cca, text.cca: use ordiArrowTextXY() for arrow labels instead of expanding arrow heads by 10%. * plot.envfit: plot(..., add = FALSE) estimated string (text) dimensions after plot.new() but before plot.window(). Since plot.new() sets xlim, ylim to c(0,1) and then plot.window resets the limits to the data values, string dimensions in user units were poorly estimated. This became evident with new positioning of arrow text based on string dimensions. * plot.ordipointlabel: gains a plot method that is very similar to `plot.orditkplot()` but which does not mess with graphical parameters. This allows it to fit more naturally into a standard R workflow (it plays nicely with `layout()` for example. * stressplot: metaMDS and monoMDS stressplot() use now expression(R^2) instead of ascii R2. The stressplot.monoMDS() function returns the plotting structures in the original input order. * vignettes: Brian Ripley urged as to remove \usepackage{inconsolota} as this package is on the way to be removed from CTAN. Version 2.1-30 (closed June 12, 2013) * bioenv: can now use Mahalanobis, Manhattan and Gower distances for environmental variables. The Mahalanobis distances are based on orthogonalized data, Manhattan distances give the direct sum of differences of environmental variables, and Gower distances can also handle factor variables. This involves adding internal function veganMahatrans() for Mahalanobis transformation. The change was triggered by a recent email by Lydia Beaudrot (UC Davis) to implement Mahalanobis distances, and in the same I also implemented Robby Marotte's suggestion of using Gower distances (vegan Forum item in R-Forge in July 2012). The output is changed to show the 'metric' and the name of the 'method' is fully expanded. No more fails if 'upto' is too large. Passes "..." to cor() like documented, but never done. * rankindex: can now use Mahalanobis or Manhattan distances. Scales automatically gradient variables to unit variance (Euclidean) or range (Manhattan), and the scaling is already inbuilt in Mahalanobis and Gower. * vegdist: added Mahalanobis distance. Version 2.1-29 (closed April 19, 2013) * ordisurf: significant changes were made to this function: - The default for `method` and `select` were changed to `"REML"` and `TRUE` respectivelt. - Argument `thinplate` is deprecated in favour of `isotropic`. A warning is now issued if `thinplate` is used. - The spline basis for the smoother can now be specified from a subset of those implemented in the mgcv package. This is achieved via the `bs` argument, which defaults to `"tp"` for thin plate regression splines. - Argument `knots` and `bs` can now be a vector of length two, one per ordination dimension considered. This is only of use with anisotropic surfaces with `isotropic = FALSE`. - New argument `fx`; indicates whether the smoothers are fixed degrees of freedom regression splines (`fx = FALSE`) or a penalised regression spline (`fx = TRUE`). Can be a vector of length 2 for anisotropic surfaces (`isotropic = FALSE`). - The number of locations in each ordination dimension at which the fitted surface is evaluated can now be specified via new argument `npoints`. - The formula passed to `gam` is now built in greater detail. When the model is printed the user can see exactly how the smoother was constructed. * oecosimu: the interpretation argument "alternative" was really twisted. We now changed the test direction and have a much clearer explanatory text in printed output. The issue was raised by Juan Manual Barreneche (jumanbar) in GitHub (issue #14). NB. The direction of the test changed from previous versions. * raupcrick: adapted to the change in oecosimu() to define the direction of the test. Version 2.1-28 (closed April 19, 2013) * betadisper: failed with type = "centroid" when there was only one group (i.e., in estimating the overall beta diversity in the data). Reported by Pierre Legendre. Now correctly reports distance to "medoid" in the print method when type = "median". Reported by Pierre Legendre. The print method also now shows only the first 8 eigenvalues. * eigenvals: new method for class "betadisper". * rda: eigenvalues are now regarded as zero if they are very small compared to the first eigenvalue. Earlier we used fixed limit of 1e-4, but now the limit is first eigenvalues * 1e-5. Similar change was not made in cca, since there the theoretical maximum of the eigenvalue is 1, and comparison to an absolute minimum threshold of 1e-4 makes sense. Version 2.1-27 (closed March 17, 2013) * cca/rda/capscale: removed references to 'u.eig' and 'v.eig' items in support functions. These now use 'u' and 'v' items and scale these with 'eig' (or diag(sqrt(eig))) when needed. This prepares for removing items 'u.eig', 'v.eig' and 'wa.eig' in vegan 2.3 and 2.4. Concerns fitted.capscale, goodness.cca and goodness.rda. The documentation has warned about removing these *.eig items for years, and most vegan functions already avoided using them. We have no idea if any external packages depend on these and therefore we delay the removal till vegan 2.3 and 2.4 release. However, we warn about this in NEWS for 2.0-7 and also say this clearly in cca.object documentation. * nestedtemp: function failed if the matrix fill was < 0.38%, because the fill line parameter was outside the original estimation bracket. Now bracket is moved up if the estimation fails. The problem was reported by Carsten Dormann (Univ Freiburg) and Benjamin A. Sikes (Lincoln University, NZ). * specaccum: gained argument 'w' for weights to give the sampling effort. This resurrects a feature that was introduced in r1505 (22 Feb 2011) and 1507, and removed in r1606 (26 May 2011). It seems that BiodiversityR::balanced.specaccum() provides the same feature but we still try it here. The feature was resurrected after a user query by Bastien Mérigot (Univ Montpellier II). The working of the new argument is still untested with specaccum() support functions. * fitspecaccum: model = "asymp" was actually fitting logistic regression (the same as model = "logis"). * text.cca, points.cca: gained argument 'axis.bp' (defaults TRUE) to suppress drawing axes for scaled biplot arrows. Only effective if 'bp' scores were requested. * wcmdscale: setting only weights 'w' does not force full "wcmdscale" output but returns only the matrix of coordinates of real axes. Similarly, setting 'add = TRUE' would not force "wcmdscale", but 'add' is not implemented. Version 2.1-26 (opened February 11, 2013) * New version opened with the release of vegan_2.0-6 on February 11, 2013. * metaMDS: exposed argument 'maxit' in metaMDSiter() so that users can set the number of iterations in monoMDS() or isoMDS(). metaMDS(..., trace = 2) show the stopping criterion used in with engine = "monoMDS". After wishes by Jon Bakker, Univ Washington (U.S.A.). * tabasco: a sister function of vegemite() to display a compact community table using heatmap(). Both vegemite() and tabasco() can handle cluster::agnes() trees. * wcmdscale: return a full "wcmdscale" object if any argument is set to non-default value. This also implies that if weights 'w' are set, the result will be full "wcmdscale" object with a "weights" item, instead of a simple matrix with no information about weights used. Version 2.1-25 (closed February 11, 2013) * FAQ: new entry on impossibility of using random effects in cca, rda, capscale & adonis, and telling how to do this approximately. Please comment and correct. * oecosimu: changed the structure of the oecosimu() result object. It now returns a list of two items: "statistic" is the observed statistic, and "oecosimu" which contains the simulation records. In previous version the function returned the statistic and added item "oecosimu" there. Previously, the result object was of type c("oecosimu", class(statistic)) as the original "statistic" object was returned amended with an "oecosimu" item, but now it is only of type "oecosimu" with the original "statistic" as a separate item. So "statistic" is now one level deeper instead of being the main object. * predict.cca, predict.rda: In rev2412, 2413 we studied including partial (pCCA) component in predict(..., type="response") and predict(..., type="working") models, but then adopted a policy of never having partial component, but always returning only the component requested for. Therefore warning messages of ignoring pCCA component were removed. This log entry was made to emphasize that there is a policy decision, and an alternative policy can be tracked in the repository. * fitted.[cca,rda,capscale]: can now return partial component with argument 'model = "pCCA"'. * simulate: the simulate functions for "rda" and "cca" return objects with original row and column names. Function capscale() already did so, and simulate.nullmodel() was changed so in vegan 2.1-24 (r2396). Version 2.1-24 (closed February 2, 2013) * simulate.nullmodel: output array inherits dimnames after the input data matrix, this is often required by oecosimu. Dimension names are now only stored once for all nsim simulations, so it is an improvement over the implementation in commsimulator. * oecosimu: the 'oecosimu' list cannot be added to the result if the nestfun() returns a data frame. In that case, the 'oecosimu' list is treated like a variable, and this gives either an error of wrong length or if the length matches, a mess. Now data frame is silently turned into a list which also means that it will not be printed with the output. The name of the 'statistic' is not used for unnamed vector output where it would only name the first item (like would be the case if the 'statistic' was extracted from a data frame). It is now checked that only one 'statistic' is given and a comprehensible error message is issued instead of the current confusing one. The changes were trickered when testing picante::pd(). * protest: huge speed-up. Instead of calling procrustes() in every permutation step, we only calculate the goodness of fit statistic in svd(). This avoids a huge overhead of procrustes(). In a test with a 160 x 12 matrix (RDA scores from Bryce Canyon data 'bryceveg') with 9999 permutations, the time went down from 12 sec to 0.8 sec in my desktop. The analysis prints now also the 'ss' term (residual sum of squares) which for symmetric analysis is equal to squared m12. * procrustes: marginally faster way of getting sum of squares of a matrix. This should not influence the results, but one metaMDS() trace result has a small difference in nearly-zero rmse (was 1.094382e-06, is 1.09439e-06) in my desktop. * treedive, treedist: treedive() did not correctly match data and tree when the tree contained species that did not occur in the data. Function treedist() tries to match tree and data when their sizes differ, and argument 'match.force' was added to force matching even when sizes do not differ. Version 2.1-23 (closed January 25, 2013) * clamtest: Richard Telford reported an extreme case {rbind(a=c(1,0,5,10,4),b=c(0,10,5,2,1))} where clamtest failed due to inadequately setting up minimum abundance thresholds for rare species. The issue is solved by hard coding the minimum values to be 1 when no suitable solution is found. Also, clamtest failed when the community matrix had no column names, this is now fixed. * capscale: It was wrongly assumed that eigenvalues could be used in normalization of species scores, but this worked only with Euclidean distances. Now normalization is done explicitly with decostand() function. This change means that scaling of species scores will change, and graphs can look different than previously. All analyses should be redone. Function now displays the value of the additive constant with 'add = TRUE'. * stressplot: added stressplot() methods for wcmdscale(), capscale(), cca(), rda(), prcomp() and princomp() results. These also work with constrained ordination. These methods display the ordination distances in given number of dimensions (defaults 'k = 2') against original observed distances. These original distances are found from the full space solution, and in capscale() and wcmdscale() they are correct for the imaginary axes. The weights are used in wcmdscale() and cca() so that their distances differ from plotted ordinations, but agree with eigenvalues. Partial models (p-dbRDA, pRDA, pCCA) add the partial component both to the original dissimilarities and the fit. The row scores (u) alone will not correctly estimate original dissimilarities in constrained (or partial) ordination. In unconstrained ordination we can get the distances as dist(u %*% diag(sqrt(eig))), but in constrained ordination this will not give the observed dissimilarities with all axes. Currently we get the ordination distances from a (low-rank) approximation of the data as dist(u %*% diag(sqrt(eig)) %*% t(v)). However, it is not sure that this the right thing to do, but perhaps we should acknowledge the fact row ordination with constraints does not approximate distances. So this may change. * wcmdscale: added method functions print(), plot() and scores(). Now class "wcmdscale" results also retun the function call and dimensions have names. * ordilabel: was missing ordiArgAbsorber() on the plotting calls to text() and polygon(). Thus lots of warnings were raised in use. * orditorp: added argument select, to choose which of the rows of scores are plotted, so matches with ordilabel() and ordipointlabel(). Version 2.1-22 (closed January 8, 2013) * multipart: argument global was printed as TRUE regardless of the actual argument value. This did not affect calculations. Reported by Valerie Coudrain. * monoMDS, metaMDS: Default convergence criteria were changed in monoMDS. Most importantly, now scale factor of the gradient is sfgrmin = 1e-7. The former limit 1e-5 was much too slack with large data sets and iterations stopped too early without getting close to the solution. In addition, scores() ignore now requests to scores beyond those calculated instead of failing, and scores.metaMDS() does not drop dimensions. * metaMDS: Iteration sometimes finds a false convergence, or an identical solution to the previous best although a better solution can exist. These are undetected except sometimes in parallel processing. Therefore we first label convergence false when we find a new best solution, and then study if it really converged. This is a rare effect, and can only be seen with parallel processing. An example is set.seed(7) metaMDS(BCI, k=4, parallel=2) which will converge in run 7 with the old code although run 8 would be better, but converges in run 18 with the new code. * nestednodf: added plot() method modelled after plot.nestedtemp(). * ordiR2step: gained argument 'R2scope' (default TRUE) which can be used to turn off the criterion of stopping when the adj-R2 of the current model exceeds that of scope. This option allows model building when the 'scope' would be overdetermined (number of predictors higher than number of observations). Pierre Legendre needed this option for some checks with huge AEM/PCNM scopes. * envfit, plot.envfit: Plotting an object fitted by envfit() would fail if p.max was used and there were un-used levels for one or more factor constraints. The un-used levels could result from deletion of observations with missing values or simply the result of supplying a subset of a larger data set to envfit(). Both cases are now handled through the use of droplevels(). Version 2.1-21 (closed November 19, 2012) * New version opened with the CRAN release of vegan 2.0-5 on Oct 8, 2012. * dispindmorisita: output gained a new column for Chi-squared based probabilities that the null hypothesis (random distribution) is true. * clamtest: output was wrong when some of the possible species groups were missing (bug report submitted by R Telford). * procrustes: plot() of two-dimensional solutions often draw original axes in a wrong angle. The problem was reported by Elizabeth Ottesen (MIT). * msoplot: gained legend argument for positioning the legend according to user needs. Version 2.1-20 (closed October 8, 2012) * anova.cca: Dr Sven Neulinger (Christian Albrecht University, Kiel, Germany) reported several problems with anova.cca cases. All these were problems in scoping. Two problems solved with this commit were: (1) anova.cca(..., by = "axis") always failed in partial analysis (with conditions), (2) anova.cca(..., by = "term") failed in partial models when there was no 'data=' argument, but the variables were in the global workspace. The first fix also seems to allow anova(, by = "axis") that used to fail. In addition, there is one unsolved problem with search order: stats function C() is found instead of variable 'C' and this gives an error message "object is not a matrix". * radfit: The methods are now more consistent over different levels of radfit models (radline, radfit, radfit.frame). The common methods to all include now AIC(), coef, deviance(), logLik(), predict() and fitted(). The radfit() objects gained points() and lines() methods. The data frame method also works with matrices. The predict() method gained new argument to change the expected 'total' size of communities. The fitted() returns now named vectors or matrices. It seems that radlattice() never displayed BIC contrary to documentation and labelling in graph. This has been wrong since the introduction of radlattice in r551 (2008-11-09). Now radlattice also check that it gets the "radfit" object it can handle. * Rd: documentation files upgraded to the third English edition (2012) of Legendre & Legendre. Version 2.1-19 (closed September 16, 2012) * adonis: Small changes in calculations. Simplified calculations of matrix G as centred distance matrix, and does not keep n x n matrices that are not needed (A) or used only once (identity matrix I). These can make calculations marginally faster and reduce the memory usage, but probably there are no observable effects in most data sets. The new centring is probably more accurate than older, and therefore the last significant digits can slightly change (magnitude 1e-12 in tests). * betadisper: An effective R stats .C function was used for double centring, but it was removed from the API in r60360 | ripley | 2012-08-22 07:59:00 UTC (Wed, 22 Aug 2012). This removal stopped betadisper() with error. Now we have a less efficient R code for the same purpose. However, the effects in timing should be negligible. * density methods: all vegan functions that return simulated or permuted statistics have now density() methods that directly access the returned statistic. The functions return an object of class "vegandensity" that inherits from class "density". The object is identical to class "density", but it is amended with item "observed" that contains the observed statistic. The observed statistic is also put among permuted values when estimating the density. This can cause a pimple in density lines when the observed statistic is very different from simulated values, but it is consistent with the permutation tests. The function has a plot.vegandensity() function that is similar to plot.density(), but it also draws a vertical line for the observed statistic. The density methods were made available for adonis, anosim, mantel & partial.mantel, mrpp, permutest.cca and procrustes. The anova.cca function does not return permutated statistics. All density methods handle only one statistic. Function adonis() can return a matrix of permuted F-values for each term, and it gained a densityplot method (lattice package) that can handle all these simultaneously. Functions adipart, hiersimu and multipart were made oecosimu-compliant earlier and simultaneously they also gained the density and densityplot methods. * mantel, mantel.partial: Gained argument na.rm (defaults FALSE) to remove missing values from dissimilarities. To implement this, there were some internal changes in functions (that should not influence the results): The functions mixed cor.test() and cor(), but now only use cor(). Function cor.test() was only used to get the textual presentation of the correlation 'method', but this is now found internally. * protest: do not return the observed statistic as one of the permuted values but separately. * radfit: gained a predict method which works for single models ('radline'), radfit, and radfit.frame. All predict functions accept 'newdata' which need not be integer, but extrapolation may fail for some models. Needs still documentation. The function was provided due to a user request. Version 2.1-18 (closed August 20, 2012) * cIndexKM: internal function count() triggered a warning in R CMD check with R-devel because the funtion used .C() call to an unloaded packages "cclust". count() was never called in the current cIndexKM() and was removed together with the following currently unused functions: withinss(), varwithinss(), maxmindist(), vargss(). These deletions should have absolutely no visible effects. * envfit: the plot() method gained argument 'labels' to change the default labels. The default labels are displayed with the new labels() function. * vignettes: building vignettes failed in CRAN and R-Forge. These sites use TeXLive 2012 distribution which was not yet used by any vegan developer when vegan 2.0-4 was released. Ubuntu Linux still stocks TeXLive 2009, and new version is promised first for the 12.10 release, and many other Linuxes are just as old. TeXLive 2012 for MacOS was released in July 2012 and with that we could pin down the problem. There is hardly any user visible changes except that building vegan succeeds with vignettes. Version 2.1-17 (closed July 30, 2012) * New version opened with the CRAN release of vegan 2.0-4 on June 18, 2012. * biplot.rda: bug in specification of `type` argument if not supplied by the user; should have been a vector of length == 2. * adipart, hiersimu, multipart: default and formula methods of these functions were identical (also for the calculations) except in interpreting the input. Now the formula method only interprets the formula and calls the default method for the actual calculations without replicating its code. The "call" attribute of these functions now returns the generic function name without ".default", ".formula" suffix. Functions use now print.oecosimu() for displaying results and their specific print.*() functions were deleted. This involved changes in attributes: the printed attributes are now in object$oecosimu$simulated instead of object. * oecosimu: returns "call" attribute similarly as adipart(), hiersimu() and multipart(). The print.oecosimu() output changed, and shows the call. print.oecosimu() is able to display adipart(), hiersimu() and multipart() results, but does not show all informations that those dedicated functions showed about options. * Formula methods for adipart/multipart/hiersimu functions use a new internal (hierParseFormula) to interpret the formula. Version 2.1-16 (closed June 18, 2012) * envfit: plot() gained new argument 'bg' that triggers labelling with ordilabel() using the colour given in 'bg' as the background. * simper: added parallel processing for permutation tests in accordance with other vegan functions and with similar user interface. The code was developed by Eduard Szöcs in http://github.com. * predict.cca: number of rows must match in the original data and 'newdata' of cca() result, because original row weights are used in scaling the results. Now the match is checked, and non-matching 'newdata' is ignored with warning. Earlier this gave an error. Reported by Glenn De'ath. * betadisper: the method is biased with small, unequal group sizes. Bias corrected version can now be used with new argument 'bias.adjust' (defaults 'FALSE'). The problem was analysed and bias correction developed by Adrian Stier and Ben Bolker. * .checkSelect: standardise those plotting functions that have a 'select' argument that controls which rows of the scores are plotted. All these functions now use .checkSelect() to check and apply 'select' as appropriate. * ordipointlabel: gains argument 'select' which allows some rows of the plotted scores to be skipped in the same manner as for text.cca(). This only applies when a single set of scores is plotted. Otherwise it is ignored and a warning issued. * ordihull, ordiellipse: defaults to use semitransparent fill colour with 'draw = "polygon"', and gain argument 'alpha' to set the transparency. * ordihull: gained explicit 'col' argument and adds labels after drawing convex hulls so that filled hulls (with 'draw = "polygon") do not cover labels. With these changes, the behaviour of ordihull() is similar to ordiellipse(). The labels are centred more correctly. * metaMDS: A warning is issued on too good stress (zero or nearly zero). This is often a symptom of insufficient data. In general, you need n > 2*k + 1 points for k dimensions, and Kruskal's advice is to have n > 4*k + 1. With low number of points there can be several complete (zero stress) but different results, and no two convergent solution can be found. The warning is issued also when convergence was obtained, and information on dimensions is printed. FAQ gained an entry on the issue. * bioenv: accepts now dissimilarities or a square matrix that can interpred as dissimilarities instead of a community data frame. This allows using other dissimilarities than those in vegdist(). * update.nullmodel: explicit assignment is required to update the input object (nm <- update(nm, ...)). * ordiplot3d: the returned envfit.convert() function did not recognize 'choices'. Version 2.1-15 (closed May 11, 2012) * rrarefy, drarefy: check the data are integers -- the functions do not give sensible results with real values. * monoMDS: checks now that there is a sufficient number of non-NA dissimilarities for the analysis. People really try to use NMDS with too small data sets. The change was triggered by a user who had tried to find a six-dimensional solution for seven points (21 dissimilarities, 42 scores) using 100,000 random starts in metaMDS. With over-defined models there is an infinite number of different solutions with nearly zero stress, and no convergence is found. * ordiplot3d: function returns the projected coordinates of the origin, and function envfit.convert() that can project a three-dimensional envfit() result to the current plot. Unlike originally assumed, the function will not set equal aspect ratio for all axes. We try to compensate this by setting equal scaling to all axes. Version 2.1-14 (opened March 9, 2012) * Opened a new version with the CRAN release of vegan 2.0-3 on March 3, 2012. * Warton, Wright & Wang (Methods Ecol Evol 3, 89-101; 2012) had a paper where the analysed the confusion of location (differences between groups) and dispersion (variability within groups) in dissimilarity-based analyses. We have warned on this for long in vegan, but now we can get support from this paper. Explicit arnings added to anosim, mrpp, simper (where this is worst) and adonis (where this was already analysed by Marti Anderson when introducing the method). * adipart, multipart, hiersimu: permutation tests assumed constant full gamma diversity in all simulations even when the null model could produce variable gamma diversities. The default method ("r2dtable") had constant gamma diversity. * adipart, multipart, hiersimu: these are now generic functions with default and formula methods. The formula method is identical to the previous function, the default method can take two matrices as input, but the second argument describing the hierarchy can be missing. In this case a trivial two-level hierarchy will be assumed (each row is a seperate group, all rows are in same group). * anova of prc() objects by "axis", "terms" or "margin" failed due to NAMESPACE issues. Reported as issue #7 by Eduard Szöcs in github.com. * clamtest: wrongly used frequencies instead of the counts when calculating sample coverage to test x < coverage.limit. No detectable differences were produced when rerunning examples from Chazdon et al. 2011 (Ecology, 92, 1332--1343) and vegan help page. * envfit: failed if some of the environmental variables were factors with unused factor levels. Fixed in centroids.cca. Reported as issue #8 in github.com by Eduard Szöcs. * msoplot: expose 'ylim' as an argument. Previously, 'ylim' was set internally and user could not change it setting, although y-axis maximum was sometimes so low that standard errors were outside the plot, and legend covered lines. The default setting of 'ylim' was improved, and the function follows R idiom more closely. Reported in a private email to J.O. by Ricardo Pita. * scoverage: new function for sample coverage based correction for calculation of relative frequencies in count community matrices (Good 1953, Biometrika 40, 237--264). Version 2.1-13 (closed March 9, 2012) * cca/rda/capscale: names of levels could be dropped if a two-class factor was used as the only constraint. Noticed in an email of Sascha Kirchner (Univ Helsinki, Finland). * scores: expand description of the default method to avoid confusion with specific vegan methods. * scores.monoMDS: did not know 'choices' and hence plot() was also unable to choose dimensions. * vegdist: Added Cao dissimilarity (CYd). Thanks to Yong Cao for consultation. Version 2.1-12 (closed February 23, 2012) * scores.default: failed if users asked scores of non-existing axes. This was reported as an error in ordiplot() when the user tried to plot 2-dim graph of 1-dim solution in https://stat.ethz.ch/pipermail/r-sig-ecology/2012-February/002764.html * simper: new function to implement "similarity percentages" of Clarke (Austral. J. Ecol. 18, 117-143; 1993) contributed by Eduard Szöcs (Uni Landau, Germany). Version 2.1-11 (closed February 9, 2012) * indpower: now can handle input objects without dimnames. This caused problems with oecosimu, because nullmodel objects have no dimnames to save memory. Extended example on indpower help page shows the p-value and heterogeneity calculations suggested in Halme et al. 2009. * adonis, anosim, mantel, mantel.partial, mrpp, permutest.cca: do not need clusterEvalQ(parallel, library(vegan)) for socket clusters. * adonis: added missing 'mc.cores=' for multicore parallel processing. * bioenv: implemented parallel processing. * metaMDS: implemented parallel processing which runs iterations (tries) in batches of 'parallel' iterations. However, it seems that this does not work completely with monoMDS: basic results are OK, but 'diss' and 'dist' vectors are scrambled (tested in Linux & R 2.15.0) which is evident if you try to run stressplot() on the result. The problematic behaviour can also be generated directly with monoMDS(): mods <- mclapply(1:8, function(i) monoMDS(d), mc.cores=2) stressplot(mods[[1]]) The 'diss' and 'dist' seem to contain random rubbish as soon as mc.cores > 1. On the other hand, there are no similar problems with isoMDS() -- but it does not directly return 'diss' and 'dist'. If this cannot be solved, the parallel processing (r2069) will be reverted. * nesteddisc: new argument 'niter' to give the number of iterations to reorder tied columns. * renyi.Rd: fixed a broken link reported by Arne Erpenbach (Uni Frankfurt, Germany). Version 2.1-10 (closed February 5, 2012) * adonis: print info that terms are added sequentially -- this seems to confuse users. Make this change in adonis() instead of print.adonis to be prepared to add other policies. * adonis, anosim, mantel, mantel.partial, mrpp: implemented parallel processing. * RsquareAdj: implemented adjusted R2 for partial RDA results. The adjusted R2 of model rda(Y ~ X1 + Condition(X2)) is defined so that it is the same as component '[a] = X1|X2' in varpart(). Removed some dead code from RsquareAdj.cca(). * varpart: do not scale constraints to unit sd -- this makes constant columns (like all zero) into NaN and causes an error in simpleRDA2. Not scaling may help in problems like that reported in "[vegan-help][5477] Nested factors in function "varpart"?" by Katie Shelef on 26 Jan 2012. * use inconsolata fonts in vignettes. * added .Rinstignore file to list inst/doc files that should not be installed (Makefile, tex, bib, sty). Background: R 2.13.0 mandated to put vignettes to their specific vignettes/ directory, but this is incompatible with R 2.12.* where vegan also should work. The inst/doc directory can still be used (it isnow 'deprecated'), but system files (such as Makefile) and intermediate files (such as tex) are silently copied to the installation. R 2.15.0 (under development) added R CMD check test for these extra files. File .Rinstignore allows maintaining R 2.12.* compatibility and silences R 2.15.0 tests. Version 2.1-9 (closed January 22, 2012) * public launch of parallel processing in vegan. First step was to explain the implementation in decision-vegan.Rnw. * DESCRIPTION: vegan suggests 'parallel'. The 'parallel' package was released with R 2.14.0. If you need to check or use vegan with older R, you should set environmental variable _R_CHECK_FORCE_SUGGESTS_=FALSE (see, e.g., discussion https://stat.ethz.ch/pipermail/r-devel/2011-December/062827.html). * oecosimu, permutest.cca: new parallel block which honours setDefaultCluster() in R-devel (becoming R 2.15.0) and automatically uses parallel processing with socket clusters if setDefaultCluster was defined. Tested in R (unstable) (2012-01-16 r58122) with full features, in R 2.14.1 without setDefaultCluster, and in R 2.13.1 (2011-07-08) without parallel processing * anova.ccabymargin failed if none of the terms was analysed (all were aliased) and no permutations were performed. This would happen with, e.g., A <- dune.env$Management anova(rda(dune ~ Management + A, dune.env), by = "margin") or in general if all marginal effects were aliased. * capscale: plotting failed for mod <- capscale(dune ~ Condition(Management) + A1, dune.env). The centroids for Management were completely removed leaving a zero-row matrix of centroids, and this caused an error in plot() and would probably fail elsewhere. The same problem can appear with completely aliased classes, or when class centroids are nearly zero. * ordistep: handle cases where the marginal effects for adding/dropping are completely aliased. This should avoid problems like that reported in https://stat.ethz.ch/pipermail/r-help/2012-January/300167.html Version 2.1-8 (closed January 8, 2012) * betadisper: failed with an error in internal function betadisper() if there were empty levels. This could happen when 'groups' was a factor with empty levels, and was reported in https://stat.ethz.ch/pipermail/r-sig-ecology/2011-November/002525.html The behaviour is now corrected in ordimedian() which will return NA for empty factor levels. * nestedbetasor, nestedbetajac: New functions that implement decomposition of Sorensen and Jaccard beta diversities into components of turnover and nestedness following Baselga (Global Ecology and Biogeography 19, 134-143; 2010). These are documented with nestedness indices and are ready to be used with oecosimu(). * oecosimu: more informative text on 'alternative' hypotheses in the printed output. Return also the mean of simulations and show that in the printed output. * plot.cca: works with degenerate solutions where constraints are aliased and 'biplot' scores have zero rows. Stops with a comprehensible error message if a user requests non-existing scores (such as "bp" scores for unconstrained ordination). * rarecurve: new function to draw rarefaction curves for each plot, optionally with sample size vertical and corresponding horizontal richness lines. Soil microbiologists with sequencing data seem to want these, and I have seen them used elsewhere as well. Version 2.1-7 (closed November 19, 2011) * adonis: speed up implemented in r1636 was not passing the transposed matrices to internal f.test function. Reported by Nicholas Lewin-Koh. * metaMDS: arguments 'noshare = 0' and 'noshare = FALSE' are now different: zero is taken as the numeric threshold and always triggers stepacross(), whereas FALSE is logical and never triggers stepacross. * vegan 2.0-2 was released on November 15, based on this version. Version 2.1-6 (closed November 12, 2011) * FAQ: correct mark-up of hyper links (@uref{} instead of @url{}), add new entries on RDA scaling, scaling of NMDS stress and scaling of environmental arrows in cca/rda/capscale/envfit, plus some minor updates of old entries. * ordiarrows, ordisegments: gained argument 'order.by' that can be used to order the points within groups before drawing the arrows or segments. This message in R-sig-ecology seems to need this: https://stat.ethz.ch/pipermail/r-sig-ecology/2011-November/002464.html * ordispider: returns invisibly the coordinates to which each point is connected. Triggered by an email query of this functionality. * ordiplot3d: expanded example to show how to use xyz.convert() to add points as per https://stat.ethz.ch/pipermail/r-help/2011-October/293955.html * oecosimu: new proposition for implementing parallel processing following suggestions of Peter Solymos. The only relevant argument is now 'parallel' which can be either the number of parallel processes (defaults getOption("mc.cores", 1)) or a pre-defined socket cluster or NULL in which case it is taken as the default cluster defined by setDefaultCluster (this last option only works in R-to-be-2.15.0 unstable, and using NULL is a user error in R 2.14.0 and hence undocumented). The 'parallel' defaults to 1 (no parallel processing), but if the user sets the "mc.cores" option, all parallel processing functions will automatically use that number of parallel processes. (The "mc.cores" argument is used by the 'parallel' package, but it is normally unset.) If 'parallel' is a socket cluster or there is a default cluster ('parallel = NULL'), this will be used without setting up and closing the cluster. This (1) saves time, (2) allows using of other packages than 'vegan' if user has given command 'clusterEvalQ(library(foo))', and (3) makes unix-like OS (incl. MacOS X and Linux) to use the socket processing instead of forking. * permutest.cca: parallel processing modelled after oecosimu(). Version 2.1-5 (closed October 30, 2011) * opened a new version with the release of vegan 2.0-1 on Oct 20, 2011. * metaMDSdist: the default value of "noshare" was inconsistent with metaMDS(), and therefore stressplot() could fail for engine="isoMDS". Usually metaMDS() sets the 'noshare' depending on the engine, but metaMDSdist() is called directly from capscale(..., metaMDSdist = TRUE) and metaMDSredist (for stressplot), and now these default to extended dissimilarities. The problem was reported by Falk Hildebrand * capscale: could fail if constrained component had zero rank, typically in partial models where constrained component was completely aliased. This was observed when checking an R-News query of October 19, 2011 (https://stat.ethz.ch/pipermail/r-help/2011-October/293077.html) Version 2.1-4 (opened October 20, 2011) * adonis, anosim, CCorA, envfit (factorfit, vectorfit), mantel, mantel.partial, mrpp, protest: user interface changed and 'permutations' can now be a matrix where each row gives permuted indices. Internally first find a permutation matrix or use the given permutation matrix, and then find the statistics with single {ls}apply. Functions adonis and mrpp already worked like this, but they gained the option of matrix input. This makes the functions ready both for the 'permute' package and for parallelization (replace {ls}apply with mclapply, par{SL}apply). Function envfit() was much simplified by generating a common permutation matrix in envfit.default() and using that as the input to vectorfit() and factorfit(). The anova.cca* cases should also be made to use a single generated permutation matrix, as permutest.cca() allows this. Version 2.1-3 (closed October 16, 2011) * added plot.preston, lines.preston and plot.fisher (that also can add points and lines). These are similar as plot.prestonfit and plot.fisherfit, but without the fitted model. Among other things, they can be used to add alternative models to fisherfit and prestonfit models. * sd() function for matrix or data.frame columns was deprecated in R r57185 (R-to-be-2.15.0). The reason seems to be that users were confused when median() did not work on data.frames, and as a solution the R developers decided to take care that mean() or sd() will not work either (it would be nice to understand how these people think). Fixed in rda.default, capscale and simulate.rda/cca/capscale. It seems that this was also implemented in soon released R 2.14.0 as r57209 | maechler | 2011-10-10 19:28:33 +0300 (Mon, 10 Oct 2011), but as message() instead of a warning(). * nesteddisc: use only max 200 tries to reorder columns: tracing showed that in most cases an improved ordering is found rather quickly, and trying up to 1000 times takes awfully long. Now faster, and usually as good as earlier, but slacker. * simulate.rda/cca: implemented 'nsim' or an option to generate an array of simulated matrices inheriting from "simmat" object and using print.simmat() for a compact display. If 'nsim = 1', similar 2-dim matrix is returned as before so that cca(simulate(mod)) still works. For 'nsim > 1', the 'indx' argument should have 'nsim' rows, but if 'nsim' is missing, number of rows in 'indx' will give the number of simulations, and 'indx' can be made with permute::shuffleSet(). Implemented for rda() and cca() results, but not for capscale() where simulate returns a "dist" object which is nasty to pack into an array. * oecosimu: An attempt to set 'parallel' processing in evaluating the statistic, and only evaluating the statistic -- the simulation of null models is not influenced. Both "multicore" (fork) and "snow" (socket) style parallelization are implemented. * permutest.cca: implemented 'parallel' processing in permutest.cca. The parallelization only works in R 2.14.0 (alpha) and later with the 'parallel' package. Function permutest.cca gets a new arguments 'parallel' (defaults 1) that gives the number of parallel process, and 'kind' that selects the parallelization style which is either "snow" (large overhead, but works in al OS's) and "multicore" (faster, but only works in unix-like systems like Linux and MacOS X). The arguments are silently ignored if the system is not capable of parallel processing. The functionality cannot be included cleanly: it depends on the package 'parallel', but suggesting 'parallel' fails R CMD check in the current R release (2.13.2) which does not yet have 'parallel'. So we get warnings: 'library' or 'require' "call not declared from: parallel", and "permutest.cca: no visible global function definition for ‘mclapply". However, with these warnings, the function passes tests in R 2.13.2. * permutest.cca: the user interface changed so that argument 'permutations' can be either the number permutations (like previosly), or a matrix of permutations like produced by permute::shuffleSet(). This was done to move RNG outside parallelized code. This will also allow much simpler and anova.cca* code. Currently, the 'strata' argument will not work, but this will be fixed "real soon now". Version 2.1-2 (opened October 4, 2011) * permutest.cca could not be update()d, because "permutest.cca" was not exported from NAMESPACE -- only "permutest" was exported. Another buglet (and this calls for checking other 'call' items that return non-exported calls). * metaMDS did not reset 'tries' when the analysis was started from 'previous.best' of a different model (except when no. of dims 'k' changed). I think this was a bug(let). Fixed in metaMDSiter.R. * commsimulator is going to be deprecated: it is no longer used in oecosimu() ore elsewhere in other functions. Currently, functions make.commsim(), nullmodel() and simulate.nullmodel() do the same, and more. As the first step, its documentation in oecosimu.Rd is moved to vegan-deprecated.Rd. * examples: cut donw some excessively time consuming examples. Profiling of all vegan examples showed that 25% of total time was spent in anova.cca, and 12.6% in ordistep, but they probably are sufficiently documented more quickly. Version 2.1-1 (opened September 20, 2011) * oecosimu: the 'comm' argument can be either 1) community data, 2) a nullmodel object or 3) a simmat object. If 'comm' is a nullmodel, simulation method is found from the nullmodel object, and if 'comm' is a simmat object, its matrices are analysed without simulations within oecosimu(), and different statistics can be swept out based on the same set of simulated matrices. * permatfull/swap is using the new simulate.nullmodel(...) infrastructure. permatfull1 and permatswap1 removed from vegan devel. * Value of 'mode' is set to "double" for the following null model algorithms in make.commsim: abuswap_r, abuswap_c, r00_samp, r0_samp, c0_samp. These can take any nonnegative real valued matrix as input. nullmodel function now handles storage mode reliably. * meandist bug fix: tapply() function used to find mean group x group dissimilarities could reorder the class levels and return a confused matrix. This could happen in particular when the 'grouping' was a vector of integers which then were ordered alphabetically so that "1" < "10" < "2". Now uses internally more stable way of applying tapply() which should have the danger of reordering the levels. Incidentally, this also seems to be faster. The problem was found by Dr Miguel Alvarez (Univ Bonn). * nestedness.c: changed interface in "swapcount" and "rswapcount" which now require integer data matrix. The first argument in .C call should now be defined as as.integer() instead of old as.double(). * str.nullmodel: new function to display the *str*ucture of the "nullmodel". The "nullmodel" is an environment and therefore does not show in usual str() although its items can be accessed with $-notation. No documentation, but alias in nullmodel.Rd. * New functions: commsim is used to define Null Model Algorithms via a function that returns n x m x nsim array of simulated matrices based on structural constraints. make.commsim contains Null Model Algorithms already defined in vegan from commsimulator and permat* functions (and some more). The nullmodel function creates an environment, where statistics of the input matrix are stored. The environment also stores updated status of sequential algorithms and current number of iterations. The update and simulate methods are used to update the nullmodel (for sequential algorithms) or simulate random matrices, respectively. The simulate method returns the n x m x nsim array (simmat class). Efficiency gains are sometimes high (because marginal statistics are calculate only once by nullmodel), but not significant in most cases. Most advantageously, this implementation can unite the commsimulator and permat* branches and can serve as basis for further extensions. Current intent is to investigate how this low level infrastructure can be used within oecosimu and permat* functions without breaking current vegan functionality. Version 2.1-0 (closed September 20, 2011) * New major version opened with the release of vegan_2.0-0 on September 8, 2011. * nestedness.c: isDiag* uses now switch(sX) where sX is the number of non-empty cells. The "swapcount" method uses new isDiagFill which finds the largest swappable element that does not change the fill, and "rswapcount" uses isDiag which finds both the largest swappable element the change in fill. The swap and trialswap also find first the fill of the 2x2 submatrix, and continue only if fill == 2. The measurable effects are small again (perhaps 1%). * tests: added tests for commsimulator, permatswap1 and permatfull1 before starting the adventures with nestedness.c. * commsimulator: a bit less overhead -- all attributes set simultaneously instead of setting separately dim, rownames and colnames. The results should be identical(), running should be marginally faster or neutral. * permatswap: there was a bug in internal C routine, and therefore not all permissible swaps were performed. Based on limited analysis, the effects of this bug seem to be negligible. It is, however, recommended to re-run all analyses. The C code was made faster by getting quickly out from isDiag* if there are only 0 or 1 filled items, because there is nothing to swap. Tests show that the C code indeed is ca 10% faster in permatswap(BCI, method="swa", thin=1000, times=999), but only a 20-25% of time was spent in C, and the new permatswap/permatswap1 spends 2.2x longer in other parts. With faster C code the net slowdown is 1.7x. * various attemps of speed-up (often in vain): The speed-up started with permatfull/permatswap which appeared to be by far the slowest functions in R CMD check --timings. Later this proved to be a feature of checking these functions in MacBook Air/MacOS X: the functions were not slow in Linux, nor in MacBook when the very same tests were run outside R CMD check. However, several changes were made: - permatfull/permatswap avoid data.frame/matrix casting, and save results in matrices. This was based on misleading test statistics in MacOS, and it is not sure what are the real effects. - commsimulator: smaller overhead. - sample.int was used in place of sample in commsimulator, nesteddisc, permuted.index and poolaccum (the effects may be measurable for permuted.index, but not large). - centroids.cca: much faster. This was perhaps real -- profiling (not timing) showed that cca.formula/rda.formula have a large overhead over cca.default/rda.default, and centroids.cca was responsible for a lot of that -- most is due to ordiParseFormula. - permutest.cca uses La.svd, but the effects are non-measurable and only concern case first = TRUE. - MDSrotate example: envfit does not do permutations. * New functions: permatfull1 and permatswap1. Both functions return a single permuted matrix. These functions are now called repeatedly by the corresponding permatfull and permatswap functions. * New function: clamtest (with summary and plot methods). The method uses a multinomial model based on estimated species relative abundance in two habitats, it minimizes bias due to differences in sampling intensities between two habitat types as well as bias due to insufficient sampling within each habitat. The method permits a robust statistical classification of habitat specialists and generalists, without excluding rare species a priori. Based on Chazdon et al. 2011 (Ecology, 92, 1332--1343). * raupcrick: new function to implement Raup-Crick (dissimilarity/ probability) index with unequal sampling probabilities of species. Brian Inouye informed about their paper (Chase et al., Exosphere 2:art24 [doi:10.1890/ES10-00117.1]; 2011) where they showed that Raup & Crick said that we should use sampling probabilities proportional to species frequencies in assessing their index, but vegdist(x, "raup") uses equal probabilities. Unequal sampling probabilities cannot be directly implemented in vegan, but the Chase et al. method can be implemented as oecosimu(x, function(x) designdist(x, "J"), method="r1"). Basically, the current function uses this, but with boosted code that is much faster than designdist(). Version 2.0-0 (released September 8, 2011) * opened the release candidate of vegan_2.0-0 on September 3, 2011. * some old functions used attributes(x)$which instead of more correct attr(x, "which"), and in addition postMDS() used attributes(x)$names instead of names(). Concerns anosim(), initMDS(), postMDS(), mantel(), mantel.partial() and mso(). initMDS() was one of the two functions that was unchanged since the first vegan release on 6/9/01, and it was changed day before it turned ten-years-old. After this, wisconsin() is the only unchanged function from the first release. * vegan-defunct: put definitions of removed "new" permutation functions to vegan-defunct and have a vegan-defunct.Rd for them. Version 1.92-2 (closed September 3, 2011) * monoMDS: saves and displays info on the dissimilarities used, and displays the number of points. Checks that input is dissimilarities, and warns on negative ones. * MDSrotate: metaMDSrotate() was renamed to MDSrotate(), and metaMDSrotate() was .Deprecated. * meandist: warns if some dissimilarities are negative (small negative values are tolerated). * vegandocs: copied branches/1.17/inst/NEWS as ONEWS (old news), and adapted vegandocs. Expanded documentation of vegandocs(). Version 1.92-1 (closed August 28, 2011) * adonis, betadisper, mrpp: check that dissimilarities are non-negative (small negative values are tolerated). The test was not added to meandist: there may be legitimate usages for correlation-like objects although summary.meandist() is invalid. The addition was triggered by a user who tried to analyse Chase et al. Raup-Crick values in the range -1 .. +1 in betadisper(). * anosim: warn if some dissimilarities are negative. Function can handle negative dissimilarities because it is based on ranks, but probably this is a user error (but can be intentional and correct). * metaMDSrotate: can rotate monoMDS() results. * monoMDS: gained argument 'pc' (defaults TRUE) to rotate the final scores to principal components. * specaccum, fitspecaccum: gained predict() methods. With specaccum() predict(..., newdata) can estimate values for 'newdata' with linear or spline interpolation if necessary. Without 'newdata' the function returns the the fitted expected richness. With fitspecaccum(), the predict.nls() is performed to each fitted model. Function fitspecaccum() is written so that default fitted(), residuals() and coef() work. * specpool: failed if 'pool' had NA values or empty factor levels. Checks that 'pool' length matches nrow of data. * NAMESPACE: imports nobs from permute_0.5-3 in R 2.12.2 and older which do not yet have nobs() generic. Do not export orderingKM & ordimedian. Remove aliases to non-exported and non-documented print and print.summary methods in Rd files (but leave documented ones). * vegandocs: shows the permutation vignette of the 'permute' package. Version 1.92-0 (closed August 23, 2011) * open new version with the release of vegan_1.17-12 on August 17, 2011. * fitspecaccum: a typo and a condition was never true. * monoMDS & metaMDS: always print types of stress and ties. * NAMESPACE: export pasteCall for analogue. * NEWS: added file NEWS.Rd for vegan release 2.0 news in Rd format. Keeping neat formatting of this file may be challenging to many text editors, but it is worth trying. This file should list the important items for regular vegan users, whereas this ChangeLog should explain the changes to other vegan developers. If getOption("help_type") == "html", should start a browser to show the NEWS, and use text console otherwise ("html" tested on MacOS R.App GUI, text mode in Linux and MacOS bash shells, no testing on Windows yet). Although the browser knows how to display NEWS.Rd, it does not format the page properly (\code{foo} shows as ordinary text etc). As a kluge we now make a NEWS.html file in the inst/doc directory. NEWS.html cannot be made in the inst/ directory since browser only agrees to show NEWS (plain) in the main directory or files in doc directory. Version 1.91-0 (closed August 18, 2011) * NAMESPACE: added namespace to vegan. Currently hides all that can be hidden, and exports only main functions: Some method functions will be probably exported later. Superfluous aliases were removed with the registration of S3 methods, and scoping was changed a bit in anova.ccabyterm, model.matrix.cca and model.frame.cca. as.mcmc is not yet registred: it need changes in Imports field of DESCRIPTION (same with vif.cca: vif is defined in car, but we could have our private vif generic here?). * Vignettes: use now jss.cls shipped with R instead of amsart.cls for better consistency with R and permute style. * plot.envfit: When `add == FALSE`, make sure we leave enough room around the plotting locations to contain the arrow and centroid labels. * plot.isomap: will always plot points or text above net so that they are visible. Gained argument 'type'. * ordiplot: expose arg 'cex' so that user can change its value. Age shows in this function, and it is badly in need of complete re-writing to improve its flexibility. Version 1.90-2 (closed August 6, 2011) * ordilabel: gained argument 'select'. * orditorp: works with NA scores. * make.cepnames: ignores duplicated and trailing dots. It is assumed that the names to be changed came via R make.names() mechanism which changes all blanks and non-accepted characters to dots, and this may give extra dots in names. Gained argument to take the second item of the name instead of the last which may help in names like "Vaccinium vitis-idaea" (which becomes "Vaccinium.vitis.idaea" -> "Vaccidae") or names which have authors or other rubbish at the end. Version 1.90-1 (closed July 23, 2011) * cca/rda/capscale support functions: cca/rda/capscale were changed to return zero components instead of NULL for completely aliased constraints (CCA) or saturated models (CA), but several support functions still checked for is.null() only, although they also should check if rank == 0. Some functions failed, and these are fixed here: anova.cca, bstick.cca, goodness.cca/rda, predict.cca/rda, screeplot.cca. The following functions did not fail, but were fixed: anova.ccanull, calibrate.cca, ordirgl, ordiresids, ordiplot3d, deviance.cca/rda (simplified), ordixyplot. * swan: gained argument 'maxit' that can be used to restrict the number of beals() passes on zeros. The default is 'maxit = Inf' which is the old behaviour: beals() passes on zero entries continue until there are no zeros or the number of zeros does not change. Probably only 'maxit = 1' makes any sense (in addition to the default 'maxit = Inf'), but all values are allowed. * metaMDSrotate: results could be a bit off with NA in environmental vector and >2D solution. The starting scores must be orthogonal, but the initial orthogonalizing PCA was run without removing NA cases. * ordiellipse, ordihull, ordispider: will remove NA scores that can appear with na.action in cca/rda/capscale (and perhaps in other cases). * betadiver: argument 'index' was renamed to 'method' for compatibility with dist() objects. Argument 'index' is still recognized with a warning. * metaMDS: Documentation and interface adapted to monoMDS(). Argument 'noshare' defaults to FALSE with monoMDS(), since tie breaking seem to handle tied maximum dissimilarities even better than stepacross(). For 'engine = "monoMDS"' 'noshare' defaults to TRUE. The 'noshare' argument now accepts logical arguments in addition to old numeric (FALSE worked previously because it was interpreted as numeric 0, but TRUE has now meaningful interpretation). Remove argument 'old.wa' introduced in rev280 on 24/3/08 for backward compatibility when calculating WA scores started to use the same transformed data as analysed. * ordiplot: Now handles non-par arguments to plot.default without warnings. Things like `axes = FALSE` in the call now just work! Version 1.90-0 (closed July 3, 2011) * vegan now depends on the permute package for new permutation designs. This initially version strips out all the old "new" permutation code from the R and Rd files, and patches up permutest.betadisper to use shuffle() to generate permutations. The 1.90-0 devel series will lead the way to vegan 2.0-0. There may well be build problems as we iron out permute / vegan meshing. * capscale: could not be embedded in another function after fixing the update() in 1.18-31 -- problems were anticipated in ChangeLog, and they were realized. * monoMDS: text for a proper help (Rd file). Other help files updated for monoMDS. Stress type 2 is printed both in monoMDS and metaMDS. stressplot() prints now R2 for monoMDS() results, and docs tell that "linear fit" of stressplot() is related to "stress 2". Version 1.18-33 (closed June 21, 2011) * adonis: made faster (much faster in tests) by polishing the f.test() in the innermost loop. Version 1.18-32 (closed June 14, 2011) * closed with the release of vegan_1.17-11. * anova.prc: new function that casts prc() result to a corresponding rda() and submits this to anova.cca(). With this is it is possible to analyse anova(..., by = "axis"). Other cases are possible as well, but not very useful as "margin" and "term" only analyse all constraints as a single matrix. Now some functions that were made refuse prc() results in 1.18-30 work again, and anova.ccabyaxis() even makes sense. This fixes a problem Jae Pasari raised in his email. * vegdist docs: Brian Inouye informed us that we are not calculating the Raup-Crick index like originally suggested: we use equal probabilities for all species, but the species probabilities should vary with their frequencies. Doing this would break vegdist.c design, and require Fisher's non-central hypergeometric distribution, and that is not available in base R. However, it seems that a simulation version could be implemented in oecosimu(). Now we document the problems in vegdist.Rd, but do not correct the behaviour. The key paper is available over http://www.esajournals.org/doi/full/10.1890/ES10-00117.1 * rda & capscale: similar changes as in cca in r1517 (version 1.18-24). CA component is always returned, even with zero rank, and CCA and pCCA components are NULL only if they were not specified originally, and if they become zero rank because of aliasing etc, they are returned as zero components (instead of NULL). * print of cca/rda/capscale: do not "Proportion" column in unconstrained ordination which only has one component. However, this will be printed also with zero pCCA or CCA (but not with NULL). Version 1.18-31 (closed May 30, 2011) * ordiR2step: more informative about rejecting 'scope': partial models are not (currently) accepted due to the design of RsquareAdj.rda(). * specnumber: gained argument 'groups' to find total richness within each group. An example shows how to use this to find one index that Whittaker suggested to estimate beta diversity. * capscale: species scores will be NA if input data were dissimilarities and no 'comm' was given. update(capscale_result) failed because LHS data were evaluated in the environment(formula). Now removed the explicit environment: I ran some tests and found no problems, but let's see what the real life brings along. The changed point is commented so that this change can be reconsidered if necessary. * oecosimu: reverted r1557 of version 1.18-26, or splitting tied values. This was introduced because Chase et al. (Ecosphere 2011, http://www.esajournals.org/doi/pdf/10.1890/ES10-00117.1) used this in their Raup-Crick index. This is against established practice in order statistics and therefore we cancelled this. * specaccum: reverted r1505 & 1507, or introduction of weighted species accumulation model in version 1.18-23. The method was introduced because of user request, but these persons lost their interest and therefore there is no reason to see the trouble that finalizing these functions would require (see comments on version 1.18-23 about some of the work needed, and there is more). Version 1.18-30 (closed May 26, 2011) * opened with the release of vegan 1.17-10 on April 27, 2011. * nobs: documented nobs() methods for vegan. These seem to be needed in R 2.13.0 and should be released soon (there is no need to add R >= 2.13.0 dependence as long as we do not use these functions ourselves within released vegan code). * treeheight: dramatic simplification and speed-up of the code. * scores.cca/rda: failed if user requested only non-existing scores. Now return an empty list of scores instead (with possible attributes). * prc: several support methods did not work with 'prc' results, and these now stop with an informative error instead of an uniformative error. Concerns anova.ccabymargin, anova.ccabyaxis, drop1.cca, add1.cca, model.frame.cca, model.matrix.cca. This was found out after a private user query about having signficance test for the sencond PRC axis. Version 1.18-29 (closed April 27, 2011) * capscale: could fail with add = TRUE in R 2.13.0. A kluge was necessary in cmdscale() pre 2.13.0, but the feature was fixed in R 2.13.0 and unnecessary fix failed. Now the kluge is used only in older versions of R and capscale should be working both in 2.13.0 and older R. * adipart.Rd, multipart.Rd: cancelled some excessive speed-ups in example code made in r1204. Some of these speed-ups never made to the release version, but were only made in the devel branch. The sped-up examples were also merged to the release (adipart.Rd, kendall.global.Rd, multipart.Rd, mantel.correlog.Rd, pertmatfull.Rd, radfit.Rd). Also reverted r1224 so that Guillaume's original r1206 (49 permutations instead of 99) is used again. Probably we should speed up some other examples. The five worst cases (timing in MacBook Air) are: ordistep (19.0 sec), add1.cca (7.2 sec), tsallis (7.0 sec), prc (5.6 sec), vegan-package (5.2 sec). * vegan-package.Rd, ordistep.Rd: speed up examples. Version 1.18-28 (closed April 11, 2011) * Peter Minchin joined the vegan team. * monoMDS: a new function with Peter Minchin's Fortran90 code for NMDS. The full Fortran90 code has global, local, linear and hybrid MDS, configurable and valid tie treatment, handles missing values, and allows adding new points to existing ordinations. The Fortran code is highly tuned, and much faster than other alternatives in R. The R interfaces allows access to most features of the Fortan90 code, except adding new points to the ordination (which will need a separate function). The missing values in dissimilarities are also handled in the R interface. The function will eventually replace isoMDS() of the MASS package as the main NMDS engine in metaMDS(). * metaMDS: uses monoMDS() as its default engine (and gained argument 'engine' to select either monoMDS() or isoMDS()). * stressplot: is generic with a specific method for "monoMDS" objects, and the old function as the default method. * goodness: got a new method for "monoMDS" objects. The function handles all monoMDS() models, but does not take into account possible missing values in input dissimilarities. * metaMDSrotate: gained argument 'na.rm' (defaults FALSE) to remove missing data from the continuous vector. Version 1.18-27 (closed April 1, 2011) * orderingKM: Kurt Hornik found a problem when inspecting the Fortran subroutines with gcc 4.6 tools when checking vegan release 1.17-9. Version 1.18-26 (closed March 31, 2011) * version closed with the release of vegan 1.17-9. * oecosimu: added argument 'tiesplit' (defaults FALSE). If TRUE, simulated values tied with the observed statistic are split so that half of them are regarded as satisfying the condition, and removed from those cases which are greater or less (as given by 'alternative'). This is usually *not* done, but implementing Raup-Crick dissimilarity in oecosimu() following http://www.esajournals.org/doi/pdf/10.1890/ES10-00117.1 (Chase et al., Ecosphere 2011) uses this option. However, cross-checking the "r0" null model against the vegdist(..., "raup") indicates that the options should be set FALSE (and this would mean that the change is reverted). * anova.ccabyaxis: I (JO) noticed in an ORDNEWS message that anova(..., by = "axis") ignores the original Conditions in partial models and so gives wrong results in partial models. The fix finds the conditioning matrix as qr.X(object$pCCA$QR), and uses this as a Condition in updated models. Added a regression test that checks that statistics and residual df match. * tolerance: new function to compute species tolerances and sample heterogeneities as Canoco does. Includes a method for objects of class "cca". * plot.contribdiv: plot now draws axes and box *after* doing the drawing - stops polygons overplotting the axis and box. Version 1.18-25 (closed March 23, 2011) * ordilabel: gained argument 'xpd' to draw labels outside the plot region. * ordisurf: got a formula interface as an alternative to define the model. Also now accepts `gam()` argument `select` to add an extra penalty to smooths so they can be penalized to zero (i.e. removed from the model). This is a form of model selection. Estimation of smoothing parameters can now be determined via argument `method`. Both `select` and `method` have been set to defaults that were implied in previous versions of the function. If smooth is penalized to (effectively) 0, countour plotting is suppressed. New argument `gamma` can be used to increase the cost of each degree of freedom used by a model in the GCV or UBRE/AIC scores used in smoothness selection. New argument `plot` can be used to stop ordisurf producing any graphical output. A plot method is now provided that can draw contour or perspective plots of ordisurf results, or plot the fitted GAM surface. * metaMDSrotate: can now rotate > 2-dim solutions so that the first axis is parallel to a given vector and all others are orthogonal to the vector (and rotated to PC if they were originally). Earlier had argument 'choices' which was supposed to select only two axes to be rotated (but failed before rev 1533), but now lost 'choices' and always uses all dimensions, and orthogonalies dim 2 and beyond against the given vector. There was a query in R-sig-ecology on having two vectors in 3-dim ordination which triggered the current changes, but this does not still answer to the question of https://stat.ethz.ch/pipermail/r-sig-ecology/2011-March/001947.html. It would be possible to have this with recursive metaMDSrotate for 1..N for first 'vec', then 2..N for the second 'vec', but the later 'vec's could be correlated with previous axes. * metaMDS: 'previous.best' can now be a user-supplied configuration, or a result of isoMDS(). If 'previous.best' is an isoMDS() or a metaMDS() result, it can have different number of dimensions than the current 'k': extra dimensions are dropped off, or noisy extra dimensions are added as needed. This may help in running metaMDS() with a range of 'k'. Not yet documented. Version 1.18-24 (closed March 10, 2011) * cca: will return NULL item for CCA only if constraints were not given. If the CCA component has zero rank (= constraints were aliased or were orthogonal to the data), will still return a CCA item with zero eigenvalue, rank, scores etc plus info on "alias". The residual component will never be NULL, but similar zero-containing component is returned even when there is no residual variation. Usually these changes only manifest in arbitrary data sets, but we have had email queries in R-sig-eco on completely aliased constrainsts when users assumed that model cca(y ~ A + Condition(A)) would be similar to a random effects model and A could be analysed both as a Condition and as a Constraint instead of being aliased. Naturally, overfitted models with empty residual components do appear often. Currently the printed output includes these zero items with Inertia and Rank 0, whereas NULL components are not displayed. The changes so far only concern cca(); rda() and capscale() are only changed after (and if) this change appears sensible and correct in cca(). * drarefy: a new function to return the probabilities that a species occurs in a rarefied sample (= sampled without replacement) of a given size, (or given sizes specified separately for each row if 'sample' is a vector).. * diversity, rarefy, rrarefy, specnumber: accept vector input. All functions documented in ?diversity now accept vector input. Function fisher.alpha and drararefy already accepted vectors. Version 1.18-23 (closed February 28, 2011) * opened with the release of 1.17-7 based on version 1.18-22 on February 16, 2011. * does not use unnecessary return() plus other stylistic twitches. This touches 24 functions, but users should see no difference. * procrustes: checks and reports different number of rows instead of failing in crossprod() with incompatible arguments. * prestonfit, as.preston: default now 'tiesplit = TRUE'. * as.preston (prestonfit, prestondistr): uppermost octave could be NA with 'tiesplit = TRUE' (a bug). * decorana: Cajo ter Braak notified about false expansion of computed zero eigenvalues in rescaling which then are used in estimating eigenvalues. They are now zeroed. Cajo's example was a 6x5 petrie matrix: petrie <- matrix(0, 6, 5) diag(petrie) <- 1 petrie[row(petrie) - 1 == col(petrie)] <- 1 decorana(petrie) Gavin Simpson had another failing case: dummy <- matrix(c(1,3,1,0,0,0,0,0,0, 0,0,0,1,3,1,0,0,0, 0,0,0,0,0,0,1,3,1), nrow = 3, byrow = TRUE) which also failed in orthogonal CA ('ira = 1'). Now the zeroing is done after estimating each axis, and the results are similar as in Canoco. However, the results of orthogonal CA with 'dummy' are wrong in both: there should be two eigenvalues of 1, but only one is reported. This is a fundamental problem in the orthogonalization algorithm in the Fortran code presumably shared between vegan:decorana and Canoco. * specaccum: first step in implementing weights on method="random". Not yet documented nor supported. Issues that must be solved are plotting (all lines? summaries?), summarizing (use approx to get average predictions?) and the very natural link to fitspecaccum models. * nobs: R 2.13.0 will introduce new generic nobs() that will return the number of observations. This is at least needed in functions to evaluate BIC and in step() and functions it calls. Implemented nobs() for several vegan classes -- some of these may be unnecessary. Not yet documented but aliases in vegan-internal.Rd. * FAQ updates: using 'select' in ordination text() and points(), using 'xlim' to flip axes or zoom into ordination plot(), the non-effects of 'strata' in adonis(). All these indeed are frequently asked. * scores.default: clarified documentation (PR#1300). * vegdist: rephrased Chao index following PL. Version 1.18-22 (closed February 16, 2011) * nestednodf: did not go to 'weighted = FALSE' with quantitative data if 'order = FALSE'. Reported by Daniel Spitale. * eigenvals: learnt to know 'dudi' objects of the ade4 package, and 'pco' an 'pca' obejct of the labdsv package. * betadisper: streamlined code somewhat. * prestonfit: implemented splitting "tied" counts (1, 2, 4, 8 etc) between octaves following Williamson & Gaston (J Anim Ecol 43, 381-399; 2005) with argument 'tiesplit = TRUE' * specaccum: fixed typo -- 'individuals' instead of 'invidividuals'. plot() gained argument to use "individuals" as x-axis instead of "sites" with method = "rarefaction". Version 1.18-21 (closed January 19, 2011) * Fixes bug report #945 at R-Forge: anova.cca should now work with subset, missing data, functions of constraints (like log(x)), constraints or subset variables in data=, attached data frames or in working environments. * capscale: return additive constant ('ac') when 'add = TRUE'. * fitted.capscale, predict.rda: additive constant ('ac') subtracted from the estimated distances when 'add = TRUE' was used in capscale(). * predict.rda: type = "working" for capscale returns now scaled scores that produce the dissimilarities as Euclidean distances -- like was claimed in the help page. * simulate.capscale: implemented simulate() for capscale. This uses internal metric scaling mapping to simulate data and add error, but returns Euclidean distances adjusted to the original scale of input dissimilarities. The function uses only the real axes, and imaginary dimensions are ignored. * anova.cca: by = "term" and by = "axis" work now both with the data= statement and with variables in the GlobalEnv and subset= both in cca/rda. It seems that 'subset' is not implemented for capscale(), but otherwise models work. * cca/rda: added item 'subset' that is the subset argument evaluated to a logical vector. * capscale: implemented 'subset' (and this also works with anova.cca). It looks like all anova.cca tests pass also with capscale (but more thorough test will be run before closeing the anova.cca bug in vegan-forge). It seems that subset and na.action also work. * anova.cca: most cases work now when terms are given in attach()ed data frame after changes to anova.ccabyterm() and ordiParseFormula(). * anova.cca: works (mostly) when there are missing values. The exception found was 'by = "term"' when the data frame is not given as a 'data=' argument, but as an attached data.frame. In this case 'by = "term"' detects a change in the number of rows and stops with a message. Version 1.18-20 (closed January 9, 2011) * base of vegan release 1.17-6 (released on Jan 10, 2011). * capscale: the total inertia was defined as the sum of absolute values of inertia so that negative eigenvalues of imaginary dimensions increase inertia (changes in 1.18-17 and release 1.17-5). Torsten Hauffe reported this as a bug in vegan open-discussion forum in R-Forge on Dec 22, 2010. I (JO) answered on Jan 1, 2011 and justified the change, and said this is a design decision, and not a bug. Now I have reconsidered this design decision, and it really seems to me that it was wrong. Now the negative eigenvalues again reduce the total inertia, and are similar as in vegan 1.17-4 and earlier. The capscale() output got a new item of "Real Total" that gives the sum of eigenvalues without the imaginary component, and the proportions are given only within this real component (if there are negative eigenvalues). The eigenvalues of negative eigenvalues are not added to the result, because they are not strictly for the unconstrained component only like previously indicated. However, summary.eigenvals() estimates the proportions explained using absolute values of eigenvalues since this seems to make sense there (the proportion explained is now based on absolute eigenvalues to give more sensible output). Version 1.18-19 (closed January 3, 2011) * new version opened with the release of vegan 1.17-5 (submitted Dec 17, 2010, released at CRAN on on Dec 18, 2010). * CCorA: Pierre Legendre's minor fixes, including scaling of scores Cy an Cx, and removing requirement of MASS. * wascores: checks input -- weights (species abundances) must be non-negative and not all zero. * metaMDS: function was written for community data with all entries non-negative, but it is used increasingly often with other data types with a risk of failure (especially in wascores()). Now data are checked for negative entries, and arguments wascores, autotransform and noshare are set to FALSE with negative data entries. Triggered by email queries and problem reports. Version 1.18-18 (closed December 17, 2010) * mantel.correlog: proper treatment of ties in permutation statistics. Function uses mantel() to evaluate p-values, and this uses one-sided test. If the statistic is negative, the test direction is reversed, but then p-value cannot be directly complemented if there are ties: the observed statistic must be switchec to another side of the tied block. Therefore mantel.correlog() now evaluates the p-value directly in reversed test. * nestedtemp: updated the literature reference to Almeida-Neto & Ulrich (2011). * vegdist.Rd: fixed legends to Gower indices and checked binary formualations (ok). * vegan-package.Rd: added a package intro file (to be merged to the release version 1.17-5). * sipoo.rda: got island names, and decision-vegan.Rnw vignette was changed accordingly. * ordistep: Pierre Legendre's edits of the help page. * prc: got back the formula interface and with that the na.action lost in r1356 (9 Nov, 2010). * plot.procrustes: user can select the direction of the arrow with argument 'to.target', and the 'type' of the plot. With 'type = "text"', ordilabel() is used to mark the tails of the arrows. * plot.betadisper: would fail when plotting anything other than axes 1 and 2. Now fixed and an example included in the Rd file to make sure this doesn't happen again. Reported by Sarah Goslee. Version 1.18-17 (closed December 1, 2010) * predict.procrustes: gained 'truemean' so that new points can be added to the plot.procrustes() graph. * alpha release version: preparing release (1.17-5) of vegan. Mainly clean up and checking of functions intended for the release. * mantel.correlog: vegan mantel() was used standard order statistics or (hits+1)/(nperm+1) since May 2009, but mantel.correlog() did not notice the change and still tried to correct the mantel() result. * as.mlm.cca/rda and intersector: should get the pivoting of names in qr.X() correct both in the current buggy R and hopefully fixed next version 2.12.1. * vif.cca: aliased terms must be removed when calculating VIFs. Test case vif.cca(cca(dune ~ Manure + Management, dune.env)) should give decent values all below <100 (used to give magnitude 10^31). VIF of aliased terms is NA. Pierre Legendre noticed this. * print.eigenvals uses zapsmall. Version 1.18-16 (closed November 17, 2010) * procrustes: fixed centring of fitted(). Added predict() method that can be used to add new rotated coordinates to the target. The function cannot be used for symmetric analysis with 'newdata'. * vignette on design decision: updated to changes in 'const' in scores.rda() in 1.18-15 and to Canoco 4. Explains now 'const' more thoroughly. * pcnm: gained argument 'dist.ret' to return the distance matrix on which PCNMs were based. * cca/rda/capscale: JO yielded to the pressure, and added proportions of inertia components in the printed output. * capscale: failed with na.action -- fix in ordiParseFormula(). na.action was introduced in rev1002 (Sept 11, 2009), and then ruined with a change in ordiParseFormula() in rev1007 (Sept 15, 2009) so it lived four days and was broken when released. The problem was reported by Nevil Amos. * SSgleason: a new SS-species-area-model. * SSlomolino: improved starting values for 'xmid' (and 'Asym'). Now fitspecaccum(..., "lomolino") works in several cases, including BCI and bryceveg (but fails in <1% of cases). Now 'Asym' and 'xmid' are estimated from Arrhenius at log-log scale: 'Asym' is the predicted value at max(x), and 'xmid' is the value of x giving 'Asym/2'. * capscale: defines total inertia as the sum of absolute values of eigenvalues to be consistent with cmdscale(), wcmdscale(), eigenvals(), Gower and Mardia, Kent & Bibby. * eigenvals: added a method for "pcnm" and docs discuss handling negative eigenvalues in summary.eigenvals(). Function is ready for the new version of cmdscale() in R 2.12.1. * prc: Cajo ter Braak wrote new code for more direct implementation of PRC. This drops formula interface and directly finds model matrices avoiding aliased terms. Version 1.18-15 (closed November 9, 2010) * procrustes: 'translation' needs to take into account 'scale', although Mardia et al. omit it. Reported, analysed and fix suggested by Christian Dudel (Bochum). * fitspecaccum: uses now new SS-models for species-area relationship and several of standard SS-models for nls(). Placeholders for documentation added. Has a plot() function. * Self-starting nls() models for species-area relationship: added Gitay and Lomolino models from Dengler 2009 (J Biogeog 36, 728-744). Some more should be added, but these were among the best in Dengler's simulation. The starting values of the Lomolino model (SSlomolino) need work, as do several other candidate models. The purpose is to use these also in fitspecaccum(). * rda: the scaling 'const' can now be a vector of two items: the first is used for species and the second for sites. This allows compatibility with Canoco 3.x (but Canoco 4 changed scaling): if 'mod' is an rda() result, and 'nr' is the number of rows in data, then "scaling = -2, const = c(sqrt(nr-1), sqrt(nr))" in scores(), summary() or plot() will use default scaling of Canoco 3.x. Help page now points to decision vignette explaining scaling and 'const' (and the vignette needs updating). * prc: coefficients folded in a wrong way. Diagnosed, reported and fixed by Cajo ter Braak. CtB also fixed the scaling of species scores and coefficients to be more consistent with Canoco and common standards. The function now ignores user settings of contrasts and will always use treatment contrasts. Cajo ter Braak is now recognized as a co-author of the function. * nestednodf: breaks ties in column and row totals by row sums and column sums in quantitative data ('weighted = TRUE'). Version submitted by Gustavo Carvalho in a follow-up to Feature Request #1097. Version 1.18-14 (closed November 1, 2010) * treedist: works now with zero-height trees (for instance, only one item in a tree). Function gained a new argument 'relative' (defaults TRUE): if FALSE, finds raw dissimilarities of tree heights. Help page now tells that relative tree distances are in range 0..2 instead of 0..1, since combining two trees may add a new common root. * isomap: returns only axes associated with positive eigenvalues. * wcmdscale: give two goodness of fit statistics for 'k' axes: one is for the real part and based on the sum of positive eigenvalues, and second is for all axes and based for the sum of absolute values of all eigenvalues. * summary.eigenvals: handle now possible negative eigenvalues from capscale() or wcmdscale(): cumulative sum and proportions are now based on the sum of absolute values of eigenvalues, and all real eigenvalues explain less than 100% if there are negative eigenvalues. Version 1.18-13 (closed October 15, 2010) * anova.cca(..., by = "axis"): now really uses marginal tests for every axis. Significance of axis k with LC scores lc is from model update(object, . ~ lc[,k] + Condition(lc[,-k])). That is, axis k is used as constraint and all other axes as conditions, when axis k is analysed. This also solves the failure of anova(..., by = "ax") of rda(dune ~ poly(pH, 2) + Baresoil, varechem) of PR#945, but no other problems of the same report. * treedive: handles trivial cases of zero (diversity NA) or one species (diversity 0). * oecosimu: handles NA values as na.rm = TRUE in simulations for cases where these are produced by the function to evaluate statistics. * oecosimu: takes care that the statistic is evaluated with binary data when null models are binary. This was a one-year old bug introduced in rev 967 on Aug 31, 2009. Previous time this bug was corrected in rev 438 on June 28, 2008. * nestednodf: Gustavo Carvalho sent a new upgraded version which also implements a new quantitative method of Almeida-Neto & Ulrich (Env Mod Software, in press; 2010). Based on feature request #1097 in R-Forge. * ordistep: name clash if the fitted model contained item or term called 'mod'. Reported by Richard Telford (Bergen, Norway). * fitspecaccum: Stephen Sefick suggested adding Michaelis-Menten fit to random species accumulation and sent his model function. These ideas were used to add a new more general function. In addition, there is an option of fitting Arrhenius model S = c*A^z with a new self starting function SSarrhenius() for nls(). No documentation yet: needs work. * decorana: gives a warning if residual is bigger than tolerance. Version 1.18-12 (closed September 26, 2010) * swan: no eternal loop with disconnected data where zeros will remain in the matrix. * ordilabel: gained argument 'col' to set the text colour of the labels separately from 'border' (default action is to use 'border' colour). * ordiellipse: gained argument 'col'. For draw = "lines" this works similarly as previously when 'col' was passed on. For draw = "polygon" 'col' sets only the polygon fill, and the text of the labels will use the colour of the border or of the foreground. * ordiR2step: gained argument 'direction = c("both", "response")', and with "both" gives also adjusted R2 when dropping terms. I have not yet seen a case where a term is dropped. Abandoned dangerous practice of getting the R2.all directly from a fitted model of the 'scope' since this may have different lhs. * anova.ccalist: removed. Revisions were 1273, 1274, 1276. Could not make this work consistently with other anova models, except with 'model = "direct"'. The function would also change the API so that "..." come as the second argument breaking partial matching of other arguments. Version 1.18-11 (closed September 17, 2010) * diversity: example says that rarefy(x, 2) - 1 is the same as unbiased Simpson of a true random sample of Hurlbert (1971, eq. 5). Added after several wishes to have this function. * metaMDS: more verbose about connectivity. Use na.rm = TRUE in metaMDSdist(). * FAQ: entry on ade4:cca name clash triggered by an invalid bug report #1066 and queries in r-sig-ecology. Version 1.18-10 (closed August 31, 2010) * New version opened with the release of vegan_1.17-4 on August 20, 2010. * rankindex: can take a list of dissimilarity functions as an argument. * deviance.cca/rda: return 0 (instead of NULL) if there is no residual variation. * vegdist: help page gives equations for binary variants of the indices. * biplot.CCorA: resets par that it sets. * ordiR2step: can go to the end and include all variables of the scope (and checks there is a scope). Additional stopping criterion of exceeding P-value. Looks like being up to specs and left for approval. * permutest.cca: defaults to 99 permutations instead of 100 (to be consistent). Item 'call' now stores the call to permutest() instead of the call of the ordination which is now saved in 'testcall'. This means that update() works now. * anova.cca: use correct degrees of freedom when there is no constrained or no residual component. * anova.ccalist: Started to work on the concept of permutation test comparison of several cca/ rda/ capscale models. The basic function was added to the R-Forge (undocumented!). First idea is to run permutest.cca with the same RNG seed and collect the permutations from the differences of these models. This won't be consistent with other anova.cca* because permuted residuals differ from the corresponding partial model (except with model = "direct"). Another option that I have on my mind is that I use model.matrix.cca to reconstruct a matrix of RHS of each model, and then run a series of partial model ANOVAs. Here the problem is that the statistics will be sequential, i.e., the residual of each model is from the next model and not from the final model, and the models must be in increasing order or ordered programmatically; the current test will study differences of any sequence. Naturally, we have to figure out how the permutation should be done. Probably a note to R-Devel to open up discussion on the issue. NOTE: there is no automatic delegation to this function. If you try this, you must explicitly write "anova.ccalist(model1, model2, model3). NOTE2: There are no tests of the sanity of the input: be careful. NOTE3: Does not work with saturated model with null residual variance. Version 1.18-9 (closed August 20, 2010) * mrpp & meandist: John Van Sickle notified us that his Classification Strength (CS) uses 'weight.type = 1' (or n) insteaad of 'weight.type = 3' (or n(n-1)/2). Calculation of CS was dropped from mrpp(), because with this weighting it no longer has an exact relation to the corresponding MRPP statistic and the function mrpp() cannot provide a significance test for both statistics together. CS is kept in meandist(), where its calculation is corrected for the correct weight type. * vegdist: Anderson et al. (Ecol Lett 9, 683-693; 2006) defined their "alternative Gower" without range standardization of columns. Reported as bug #1002 in http://r-forge.r-project.org/ by Sergio Garcia. Also some small edits of vegdist man page. * msoplot: legend mixed symbols and labels. * Rd (help) files: removed some superfluous \-characters that were visible in rendering text (accented letters, Latex notation in wrong places). * predict.rda/cca: document 'newdata' with 'type = "response"' or 'type = "working"'. The feature was added in vegan 1.18-4 (rev1180, April 15, 2010). Version 1.18-8 (closed August 12, 2010) * DESCRIPTION: does not suggest package 'ellipse'. * FAQ: new entry on negative or non-numeric data, and updates of variance explained by ordination. * intro: ordispider uses label. * adonis: uses print.anova for cleaner output. * plot.MOStest: uses veganCovEllipse instead of ellipse:::ellipse.glm. * ordiellipse: failed to plot labels with filled polygons, since the same colour was used for polygon filling and labels. Now uses ordilabel() with draw == "polygon" (but still text() with draw == "lines"). * decorana: change order of data checks so that non-numeric data is detected (by rowSums()) before checking negative data entries. * ordigrid: arguments lty, col and lwd to use different lines for levels and replicate of the grid. Version 1.18-7 (closed July 19, 2010) * new version opened with the release of vegan_1.17-3. * veganCovEllipse: new internal function for drawing covariance ellipses (to be used both with ordiellipse() and plot.MOStest()). * ordiellipse: uses veganCovEllipse. Version 1.18-6 (closed June 16, 2010) * Version 1.18-6 closed simultaneously with the release of vegan_1.17-3 on June 16, 2010). * mantel, mantel.partial: considerable speed up by cleaning innermost loop and replacing as.dist() with direct extraction of lower diagonal. * treedist: documenting tree dissimilarity function that has been in vegan devel since Aug 17, 2009 (rev928). * betadisper: 'type = "median"', the default, was not computing the spatial median on the real and imaginary axes separately. Reported by Marek Omelka. * permutations: First attempt to document within Vegan the general workings of permutation tests. See ?permutations for details. Version 1.18-5 (closed May 31, 2010) * cca, rda: plot() failed if Condition() had factors, but constraints had no factors. An example of failure: m <- cca(dune ~ A1 + Condition(Management), dune.env) plot(m) ## failed * ordiarrows: gained 'label' argument which uses ordilabel() on arrow starts. * ordisegments: gained 'label' argument which uses ordilabel() on both ends of the segment. * ordispider: gained 'label' argument (uses ordilabel()). Can now handle ordihull() result objects: connects points in the line to the hull centroid. Extended examples. * ordiR2step: new function to perform forward model selection following Blanchet, Legendre & Borcard (Ecology 89, 2623-2632; 2008) or by adjusted R2 until the adjusted R2 of the full model (scope) is exceeded or adjusted R2 starts to decrease. * RsquareAdj.default: handles vector arguments. * ordiellipse: works only with 2D data, and now uses only first two dimensions of input if more given. For instance, the following works now, but gave very cryptic error message previously: m <- decorana(dune) plot(m) with(dune.env, ordiellipse(m, Management)) * ordiresids: removes now the row weights from Residuals and Fitted in CA. Now shows the same values that are shuffled or resampled in simulate.cca() where they are again weighted after being added to the new fitted value. * mantel.correlog: changes the Sturges rule to conform with the standard R nclass.Sturges ('ceiling' instead of 'round'). Extends and corrects documentation and messages. Version 1.18-4 (closed May 21, 2010) * envfit: defaults now to 999 permutations. Used to be 0 or no permutations. * metaMDS: can handle NA values in dissimilarities (but I do not know if isoMDS can handle them correctly). * mantel.correlog: accepts now user supplied breakpoints or number of classes like intended. * RsquareAdj.rda: uses now correct model df in rank deficit RDA models. * adonis: implemented tie handling in permutations. * predict.cca/rda: implemented 'newdata' for type = "response". For CCA, 'newdata' must be constraints (environmental data), and for CA they must be community data. Test version, not yet documented (except here). Version 1.18-3 (closed April 15, 2010) * new version opened with the release of vegan 1.17-2 (March 8, 2010). * DESCRIPTION: Corrected the name of Bob O'Hara (also in release 1.17-2). * scores.cca/scores.rda: scores will always have names even if the input data have no names. This fixes some display issues that Pierre Legendre had with biplot.rda(), and makes redundant the name checking code in summary.cca (the redundant code was not yet removed, but I see that this fix here was sound). * permutest.cca: re-weighting of permuted CCA data matrix is now done with compiled code using existing C function 'wcentre' (in goffactor.c). This may give huge speed-up (>50% time save in first tests) both in CCA and pCCA. The print function of permutest puts now the observed statistic among permutations (the P-value is only evaluated at printing so that this does not influence any anova.cca function using permutest.cca). Version 1.18-2 (closed March 8, 2010) * ordistep: documented the 'anova' component added to the result object. * densityplot.oecosimu: gives no warning if there is only one statistic and hence only one panel. * nesteddisc: failed if highest species frequencies were tied. The error message was "Error: dims [prodcut 15] do not match the length of object [0]". Found by Eric Fuchs in the help forum of vegan.r-forge.r-project.org. The function does not try as hard to optimize the index, and hence it is much faster (but slacker). * screeplot: New argument 'legend' for all methods (except 'decorana') to draw a legend if the observed and broken stick distribution are both plotted. Now also respects 'pch' for the broken stick line. * permutest.betadisper: print method got ordering of permutation p-values wrong in displaying the matrix of pairwise tests. The computed values were correct. The formatting for printing contained the bug. Reported by Dan O'Shea. Version 1.18-1 (closed February 18, 2010) * closed with the release of vegan 1.17-1. The release contains bug fixes and multipart of 1.18-1, but excludes MOStest and 1.18-1 upgrades to ordistep. * ordistep: saves model changes in the 'anova' item similarly as standard step(). Experimental feature: not yet documented. * envfit: did not pass weights to factorfit or to vectorfit when the environmental variable was a single vector. Reported for vectors by Richard Telford. Broken in rev1004 (Sep 12, 2009). * CCorA: Fixed bug in presentation of variables in plots. Adds new biplot types. General improvement in checking exceptional cases improve stability. * predict.cca, predict.rda: match 'newdata' by row names or column names in type = "wa" and type = "sp". This is similar as predict.prcomp/princomp. Gained choice type = "working" for working residuals (as fitted.cca/rda). * simulate.rda, simulate.cca: gained argument rank passed to predict.rda() or predict.rda(). This also allows simulation under null model by setting rank = 0. * permatfull.Rd: fixed braces in the help file + mark-up. Version 1.18-0 (closed January 11, 2010 with release 1.17-0) * Documented na.action in cca.object. * Opened concurrently with copying 1.16-34 (at rev 1087) to branches/1.17 for a new release. * betadisper: 'type = "median"' is now the default type of analysis. * fieller.MOStest: removed erroneous multiplication of variances by overdispersion, because this was already done in cov.scaled, and therefore was doubled and gave much too wide (up to Infinite) limits. * MOStest uses now ANODEV of free model and model where the hump/pit is forced to a given location instead of the test based on the Wald statistic (coefficient/sd) of the coefficient of the linear term. The ANODEV and Wald statistic are equivalent in Gaussian models, but in with other error families the ANODEV is more correct. This fix removes the conflict between the basic MOStest() and its profile() and confint() methods in non-Gaussian families. Version 1.16-34 (closed January 2, 2009) -- (codename: Lucia) * twostagechao: deleted, because question regarding the notation in the original article remained unanswered. * permat* cleanup: permat.control deleted, not needed any longer due to changes in oecosimu, documentation for plot.permat merged with permat* help page. * goodness.cca: was not using correct weights. Broken in r992 (Sep 6, 2009). * vegdist: added UI for the alternative Gower index ("altGower") that skips double zeros. The C code has been in vegan since Oct 24 (r1051), but no R interface. Together with decostand(..., "log") of r1052 this closes Feature Request #473 submitted by Etienne Laliberte in R-Forge. * anova.cca: tied values could be randomly broken due to numerical precision, and this gave false P-values, for instance in anova(cca(dune ~ Management, dune.env), strata=dune.env$Management). Now rounds statistics to 12 decimal places in permutest.cca and in anova.ccabyterm. * permutest.cca: uses pasteCall() in print. * betadisper: added spatial median code written by Jari to betadisper. All associated methods work OK, and this should be the default method but needs a little checking first. This requires the new function 'ordimedian', which is currently undocumented in ?betadisper. Version 1.16-33 (closed December 13, 2009) * DESCRIPTION: Guillaume Blanchet added to the Authors. * spandepth: New function to find the depths of nodes in a spanning tree from spantree() function. Per request of W. E. Sharp. * bstick: refuses to analyse capscale() models with imaginary components because I have no idea how to do it. Reported by Richard Telford, Bergen (who probably wanted another solution...). * predict.rda: works now with rank = 0 -- returns matrix of column means. (Not yet done for predict.cca.) * simulate.rda: can now add permuted residuals to the fitted values. Experimental, low level interface that requires giving the index of right length. The permutation index can contain duplicates such as from sample(nrow(data), replace = TRUE) so that bootstrapping is possible unlike in anova.cca/permutest.cca. Works now with partial model: adds partial fit to the constrained fit. * simulate.cca: implemented by cloning simulate.rda. Function works with internal Chi-square standardized form and back-transforms the result by marginal totals and matrix grand total at the end. The marginal totals may still be negative. Not explicitly documented, and needs a connoisseur user. Version 1.16-32 (closed November 13, 2009) * alias.cca: gained argument 'names.only' (defaults FALSE) to only return the names of the aliased variables insted of their defining equations. * rarefy: failed with one site and many sample sizes like rarefy(rpois(10, 2), sample=2:3). * msoplot: uses standard legend() to display info instead of hand crafted positioning of the legend information. * ordisurf: plotting main title was broken with NA handling in 1.16-31 (r1049). Also increased grid density and adjusted pushing out limits of convex hull. * pcnm: new function for PCNM (Principal Coordinates of Neighbourhood Matrix) with option for row weighs allowing PCNM for cca. Based on Stéphane Dray's PCNM function in his (unreleased) SpacemakeR package. Imported with history from sedarVegan in http://sedar.r-forge.r-project.org/. Has scores.pcnm to select all (default) or some vectors of 'choice'. * decostand: implemented Marti Anderson's log scaling of type log(x, base = logbase) + 1 as a part of Feature Request #473. The coding follows closely Etienne Laliberte's suggestion, and also handles non-negative non-integer data. * vegdist: C code for an alternative version of Gower Index that skips double zeros. No R level interface yet. If this function is to be used from vegdist.R, it should be added as item 14 in 'method' list, and the R level preprocessing should be done similarly as for "gower" (method choice 6). This was implemented for inspecting the implementation of second part of Feature Request #473, but may be removed if that part of the request is not implemented. Version 1.16-31 (closed October 24, 2009) * ordisurf: removes observation with NA in scores (as result of na.action) or in predicted variable. * specaccum: "accumulations" in one-site collections are handled with a message() instead of stop()ping with error. Per request of Roeland Kindt. * constrained ordination (cca, rda, capscale) could not handle all anova(.., by= "something") cases when the data were not defined by data=, but were in the working environment or given using with(). The attach'ed data frames that were later detach'ed won't work. This means some potentially unstabilizing changes in scope: please report all problems. * envfit: could drop data frame to a vector with na.action (broken in 1.16-28). * model.frame.cca, model.matrix.cca: new support functions to reconstitute the model frame and model matrix (or a list of condition and constrain model matrices) from a cca/rda/capscale result object. Documented separately. * constrained ordination (cca, rda, capscale) did not analyse constrained component in model like cca(varespec ~ Al:P + Condition(Al + P)) or in constrained interaction terms if the corresponding main effects were partialled out. * constrained ordination (cca, rda, capscale) failed if they only had partial term Condition() without constraints. * ordistep: new function for automatic model choice in the cca family of methods. This is similar to step(), but uses permutation P-values instead of AIC (that does not exist for these methods, and sometimes fails). This is similar to forward.sel() in Stephane Dray's 'packfor' package at R-Forge. Better things here are that the function has both drop and add instead of only forward selection, handles correctly factors, and works with cca(), rda() and capscale(). On the other hand, it is much slower than forward.sel(). The function has similar user interface as step(): it knows 'scope' and 'direction'. * ordisurf: pushes out limits of convex hull so that contours better cover corners and margins of points. * plot.decorana & plot.cca: use linestack() if only one dimension was chosen. * scores.lda: new function to extract row scores and predictor coefficients from "lda" objects (MASS package). Magically, ordiplot() started to work with "lda" results. Not yet documented, but alias in scores.default.Rd. * ordiplot: uses linestack() to plot 1-col results, and now really is able to identify if there were no species scores (tried earlier, but failed because species had different names than sites). * scores.default: returns vector scores as 1-col matrix. * linestack: passes "..." to plot(), handles missing names. Version 1.16-30 (closed October 3, 2009) * manual pages (Rd files) were run through aspell. With this, an error in an argument choice was corrected also in plot.nestedtemp function. * meandist: plot method has a new alternative of drawing histograms (van Sickle 1997) as an alternative to dendrograms. A histogram connects groups at theri within-cluster dissimilarity level to the average between-cluster dissimilarity. * oecosimu: gained new keyword 'alternative' for "two.sided", "less" and "greater" one-sided tests. * oecosimu: tied values in simulations and observed statistics treated more correctly. * oecosimu: if all simulations were constant, their sd became zero, and z became NaN. Now z = 0 for these cases. A response to the query of Martin Kopecky at the vegan-help forum in R-Forge. * densitplot.oecosimu: panels keep the order of statistics. The panels were ordered alphabetically, but the vertical line for the observed statistic was in the original order (and thus often in the wrong panel). * calibrate: is now a a generic function and has a new method for the 'ordisurf' object in addition to the old 'cca' method. * FIXED BUG in cca, rda & capscale interpretation of formulae. This was introduced in rev 972 (Sep 1, 2009), and fixed in rev 1011 (Sep 18, 2009). Basically, all evaluation of 'subset' and 'na.action' is done after extracting the model frames with proven methods so that the first half of 'ordiParseFormula' is more similar to pre-972 versions. Function 'ordiParseFormula' could be re-written more elegantly, but deliberately breaking it twice instead of breaking it once is just too much. * cca/rda/capscale: cca(dune ~ poly(A1, 2), dune.env) failed. Internal changes in 'ordiTerminfo' which now always looks at the model frame returned by 'ordiParseFormula' instead of looking at the 'data' (and the 'data' arg is now unused in 'ordiTerminfo'). * FIXED (minor): cca(dune ~ Management, dune.env, subset = Management == "SF") failed in 'contrasts()' called from 'model.matrix()' because there is only one level in Management. Now 'ordiParseFormula' adds a level with an unlikely name of .ThisVarHasOnly1Level, so that model.matrix works, but predict.cca(..., newdata=, type = "lc") rejects unknown factor levels. Version 1.16-29 (closed September 18, 2009) * meandist: plot got an 'ylim' argument. This is practical when users want to display several plots side by side, and requested by Heli Suurkuukka. * WARNING OF A BUG in cca, rda & capscale: all versions have failed since rev 972 (Sep 1, 2009) if an argument in a model was a matrix. Now these things work so that tests pass, but results are wrong , because get_all_vars() does not get names right for matrix columns in the model frame. This is manifest in the example of varpart() that uses matrix items (such as mite.pcnm). It can be also seen with this: p <- poly(dune.env$A1, 3) cca(dune ~ p + Management, dune.env) The following seems to work: cca(dune ~ poly(A1, 3) + Management, dune.env) * cca, rda etc. drop unused levels of factors. This became actual with 'subset' and 'na.action'. * cca & rda (but not (yet?) capscale) gained argument 'subset' to select rows for analysis. A 'subset' can be a logical vector (TRUE for kept rows), or a logical expression which can contain variables in 'data' or species (variable) names of the dependent data. Some valid examples are: cca(dune ~ A1 + Moisture, dune.env, subset = Management %in% c("HF","BF")) cca(dune ~ Moisture, dune.env, subset = Lolper > 0 & Management != "SF") S <- specnumber(dune) cca(dune ~ 1, subset = S > 9) Version 1.16-28 (closed September 15, 2009) * drop1.cca: 'scope' given as a formula was not recognized and permutation tests were not run. Only character vectors of names worked. * envfit: handles missing values in ordination scores or in environmental variables using na.rm argument. This also changes the user interface so that 'vectorfit' and 'factorfit' clearly become low level functions which only accept scores (no ordination objects), and all processing is done in envfit.default. * wcmdscale: scores (points) with zero weights (w = 0) and other non-finite entries will be NA. * capscale: implemented na.action. The WA scores are always NA for missing observations in capscale. Version 1.16-27 (closed September 10, 2009) * cca & print.cca: no warning on removed species in cca.default, but print information on their number. * predict.rda: failed when rda was based on correlations (scale = TRUE), and there were missing data (0/0 division in scaling). * cca & rda: New way of handling na.action. Function ordiNAexclude adds items CCA$wa.excluded or CA$u.excluded for NA rows into ordination result, and function ordiNApredict called in scores.cca and scores.rda pads the results with these excluded data. In this way the internal structure of the cca object remains unchanged, but functions accessing the result with scores will get the NA data. * anova.cca(..., by = "term") and step() did not work correctly with na.exclude or na.omit. These fitted sequential models, and due to missing value removal the data set could change in the sequence. The problem case was step() which relies on standard stats functions add1.default and drop1.default. They detect the change in data by length(object$residuals). Therefore ordiNAexclude adds item 'residuals.zombie' to the ordination result so that step() works. The same mechanism is also used in anova.ccabyterm (not all NA deletions change the numbers of observations). * weights.cca and weights.rda know na.action. * Fixing cca/rda functions for changes in weights(). The rule is that you can mix scores() and weights(), but if you have internal cca object stuctures (like x$CCA$u), you should have internal weights x$rowsum. Concerns as.mlm.cca, goodness.cca, permutest.cca, spenvcor, inertcomp and intersetcor. (The inertcomp solution is a kluge.) * plot.cca: works when there are NA values in scores. * anova.cca(.., by = "axis") works when there are omitted or excluded observations due to missing values. Version 1.16-26 (closed September 1, 2009) * cca and rda: can now handle missing values in constraints or conditions. With 'na.action = na.omit', the rows with missing values are removed, and with 'na.action = na.exclude' all rows are retained but results that cannot be computed are NA. The LC scores cannot be computed with missing values, but WA scores (usually) can be computed. The results with 'na.exclude' probably fail with most support functions because these do not expect missing values in the results. These functions are fixed with time. capscale does not (yet) handle missing data. * oecosimu: does not depend on permatfull/permatswap, but method can be a function. The r2dtable method implemented also to be used with adipart and related functions. * bioenv: uses standard R function combn() and removes ripley.subs() and ripley.subsets() from vegan. The result should be unchanged. * ordiNAexclude: internal infrastructure to implement na.action = na.exclude for cca and rda (and capscale?). The option returns scores where the excluded sites get NA results and are not omitted. In constrained ordination, LC scores will be NA, but WA scores are found from the community data, and the current function uses predict.cca/predict.rda with 'newdata' of removed observations to estimate WA scores of excluded observation. * ordiParseFormula: handles missing values with na.action. Version 1.16-25 (closed August 31, 2009) * mantel.correlog: updated to the version 1.4 of Pierre Legendre's package. * RsquareAdj: documented. * ordiellipse & ordihull: argument 'draw' got a new alternative "none". With this, nothing is drawn but the invisible plotting structure is returned. This was added so that it is easier to develop permutation tests for hulls and ellipses. Version 1.16-24 (opened August 17, 2009) * ordiellipse & ordihull: gained new argument 'label' to put the name of the group in the centre of the ellipse or the hull. The functions now return invisibly data on their plots for each plotted item: ordiellipse() the covariance matrix (cov.wt() result), and ordihull() the coordinates of the hull vertices. These inivisible results have a summary() method that displays the centres of the hulls or ellipses and their surface areas. * ordiellipse: does not depend on the 'ellipse' package, but finds the coordinates of ellipse using the equation taken from the 'car' package. However, this devel version of 'vegan' still must SUGGEST 'ellipse', because 'plot.MOStest' requires 'ellipse'. The current release version does not include 'plot.MOStest' and could be liberated from the 'ellipse' dependence. * spantree: first argument 'd' like in hclust()instead of 'dis'. Got a 'call' item so that update() works. * treedive & treeheight: accept 'spantree' objects. EXPERIMENTAL CHANGE THAT MAY BE CANCELLED. * treedist: average distance of species trees for two sites. Generalization of treedive(): builds a species tree of two sites and sees how much of the tree is shared between two sites, and how much is unique to the combination. The measure is similar to Jaccard index: the proportion of unique (unshared) tree of the combined tree. In principle, this is similar to UniFrac metric (C. Lozupone & R. Knight, Appl. Environ. Microbiol. 71:8225-8235; 2005), but numerically and computationally different (and the current implementation may specify a new unpublished method). AN EXPERIMENTAL CHANGE THAT MAY BE CANCELLED. Version 1.16-23 (closed August 17, 2009) * poolaccum: new function to find the extrapolated richness values (or specpool() estimates) for random accumulation of sites (with summary and plot methods). * specaccum, specpool, specpool2vect and friends: index names are now all lower-case. * estaccumR: new function similar to 'poolaccum', but uses 'estimateR' for individual (count) based estimates of extrapolated richness. Inherits from 'poolaccum' and shares its print, summary and plot methods. Version 1.16-22 (closed August 11, 2009) * metaMDS: accepts now user supplied dissimilarities either as a "dist" structure or as symmetric square matrix (Susan Letcher's wish). As a side effect, dissimilarity matrices are now correctly detected and will not be wrongly treated as raw data. * summary.cca: fix in 1.16-20 failed if all variables were continuous and there were no centroids of factor levels. * indpower: new function to calculate indicator power for a species (Halme et al. 2009, Cons. Biol. 23: 1008-1016) * mantel.correlog, print.mantel.correlog & plot.mantel.correlog: new functions to construct multivariate mantel correlograms --- use in ecology: to describe the spatial structure of species assemblages. See Legendre and Legendre, Numerical ecology; 1998, section 13.1.5. Written by Pierre Legendre. Version 1.16-21 (opened July 4, 2009) * capscale: has now 'fitted' method (and hence, 'residuals'), and 'predict' works with 'type = "response"'. These give dissimilarities that produce same ordination as original data, or their low-rank approximations. Function 'fitted' has 'model = "Imaginary"' that returns correction distances of complex eigenvectors with negative eigenvalues. The dissimilarities are not additive, and the "Imaginary" component is not used in estimating the unconstrained component. * capscale: really works now either with argument 'dfun' or 'metaMDSdist' (but not with both!). * wcmdscale: returns negative eigevalues scaled by sqrt(abs(eigenvalues)) if 'k' is not given or 'k' would include any negative eigenvalue. Version 1.16-20 (closed July 4, 2009) * new version opened concurrently with the release of vegan 1.15-3 on June 17, 2009. * orditorp: works now when axes are reversed like xlim = c(1,-1). * rrarefy: a new function to generate randomly rarefied communities. * betadisper: fix bug in removal of (effectively) zero Eigenvalues. * summary.cca: takes care that all scores have rownames -- head/tail fail without names. No ugly printing for constrained eigenvalues when these do not exist in unconstrained models. * biplot.rda: honour args to scores ('scaling', 'const'). * points/text for cca: accept 'const' argument for rda scores. * ordilabel: no superfluous warnigns when args ('scaling', 'const') are given to scores. * ordiplot3d: honour args to scores ('scaling', 'const') and without warnings. * ordixyplot: honour ags to scores ('scaling', 'const'). * spantree: plot honours args to scores ('scaling', 'const'). Version 1.16-19 (closed June 17, 2009) * capscale: handles now negative eigenvalues with semimetric indices. These cause no more warnings. The MDS engine is now 'wcmdscale' instead of 'cmdscale' unless 'add = TRUE' was specified (and then negative eigenvalues are not produced). The negative eigenvalues are listed after positive unconstrained eigenvalues, but no scores are given for them. The total inertia is now the sum of all eigenvalues, including the negative ones, and inertia components adds item 'Imaginary' for negative eigenvalues after 'Uncostrained'. New argument 'sqrt.dist' makes square root transformation of dissimilarities, producing metric indices in many cases (e.g., Bray-Curtis, Jaccard). Help page and examples now show all these, and therefore the entry on negative eigenvalues was dropped from FAQ-vegan.texi. The closed (max 1) indices are now correctly adjusted for 'rda' and hence the eigenvalues and inertia components are now sqrt(n-1) smaller and similar as in 'cmdscale' and 'wcmdscale'. * wcmdscale: remove zero eigenvalues, keep negative, and do not assume that the last eigenvalue is zero. * RsquareAdj: 'cca' returns R2, but no adjusted R2 (which is NA). The adjusted R2 is always NA for partial models. * kendall.global: fixed a bug that caused incorrect counts of ties in large data sets. * tsallis: division by zero occurred with hill=TRUE, scale=1, this bug has been fixes to give exp(x) as scales goes to 1. * multipart: a sequel to adipart, but implements multiplicative diversity partitioning based on Hill numbers (Jost 2007, Ecology, 88, 2427-2439.) * eigenvals: new function to extract eigenvalues of cca, rda, capscale (constrained & unconstrained), wcmdscale, prcomp, princomp, eigen and svd. For svd returns squares of singular values, and for prcomp and princomp squares of 'sdev'. The 'summary' of eigenvals() retrurn eigenvalues with the proportion explained and cumulatitive proportion explained. * summary.cca: uses summary.eigenvals to display eigenvalues. * protest: observed value of test statistic is now considered as one of the permutations. Default N.perm decreased to 999 to account for this. * envfit (vectorfit, factorfit): observed value of test statistic is now considered as one of the permutations. * mantel, mantel.partial: observed value of test statistic is now considered as one of the permutations. * anosim: observed value of test statistic is now considered as one of the permutatons. * mrpp: argument defaults and printing adated for having test statistic among permutations (like the function always had). Version 1.16-18 (closed May 14, 2009) * tsallis: got new argument 'hill' similar to that of renyi. * twostagechao: function that calculates multiple-community similarity based on Chao et al. 2008 (Biometrics 64, 1178-86). Some debugging is needed since it cannot reproduce the numbers in Table 3 exactly (lower estimates and SEs). The Rd file also needs more details. * anova.cca: there was a name clash and failure in anova.ccabymargin, anova.ccabyaxis and anova.ccabyterm if data were indexed with 'i' in the fitted model. Now the internal indexing uses less likely name (.ITRM) to avoid name clashes. * orditkplot: copes with missing or NaN scores (omits them). * ordixyplot: failed in constrained ordination (cca, rda, capscale). Was broken in rev108 on Nov 7, 2007(!). The biplot was rotated 90 degrees: it seems that lattice calls x y and y x. * ordixyplot & ordisplom: Gained a new type = "arrows" that is a Lattice version of ordiarrows. * RsquareAdj: defined as generic function. The old RsquareAdj is now the "default" method, and there are specific methods for "rda", "cca" (= NA), "lm" and "glm" objects. Not yet documented, but functions are listed as aliases in varpart.Rd. On Pierre Legendre's request. Version 1.16-17 (closed April 15, 2009) * closed concurrently with the release of vegan 1.15-2. * spantree.Rd: example plots use type = "t" to demonstrate the use of ordilabel(). * nestedtemp: docs tell that Carsten Dormann's bipartite package has a direct port of BINMATNEST programme of Rodriquez-Girones & Santamaria. * anosim: uses much less memory allowing analysis of larger problems (number of rows, number of iterations). The change concerns only internal data structures, and the permutation results should be identical with old and new code when the same random number seed is used. The Rd file got an example of using 'strata' in permutations. * meandist: a new sister function for mrpp. Function meandist calculates a matrix of mean within and between group dissimilarities. Its summary function returns the overall averages of those distances, and all three variants of MRPP A statistic, and classification strength. The plot method draws a dendrogram based on the mean dissimilarity matrix, with leaves hanging to within-group dissimilarity. * betadisper: Fix bug corrects the way distance to centroid is computed when only one group is present in the data. betadisper can now also detect if 'd' is Euclidean, zapping zero Eigenvalues. Bug report and suggested improvements provided by Etienne Laliberté. betadisper now also handles missing observations in either the dissimilarity matrix or the grouping variable. * decostand: added dots to the argument list to pass (ignored) arguments to decostand(). This was done to to fix stressplot(metaMDS(x, dist="gower", trymax=40)), which failed because metaMDSdist/vegdist were passing 'trymax' to decostand() while evaluating "gower" dissimilarity. * ordisurf: will fit a linear trend surface if knots = 0 or knots = 1, and a quadratic trend surface if knots = 2. All these are below the lowest permissible values of 'gam' smoothers and free for creative reuse. Version 1.16-16 (closed April 2, 2009) * metaMDS: scales ordination scores to the same range as input dissimilarities if halfchange = FALSE. Better heuristics to decide whether to use halfchange scaling: the old heuristics failed if Euclidean or other open-ended dissimilarities were small (max < 1), like after wisconsin() in metaMDSdist. The heuristics are now in postMDS instead of metaMDS wrapper, and this changed the default of internal argument 'halfchage' in postMDS, and now the user can set the 'halfchange' argument in metaMDS. The undocumented internal 'maxdis' argument is changed to logical in metaMDSdist (TRUE if maximum dissimilarity = 1 for a pair of sites with nothin shared). * mrpp: reports now "classification strength" when weight.type = 3 or weights n*(n-1) are used. Returns mean dissimilarities and counts for classes. Expected delta is now the mean of original dissimilarities instead of mean of permutation deltas. Version 1.16-15 (closed Mar 25, 2009) * envfit help page: explains the automatic scaling and 'arrow.mul' argument. * add1/drop1 help: better example after a query of usage in R mailing list. * oecosimu & permatswap: much faster 'burnin' implemented through 'thin', and hence using a single C loop instead of multiple calls and assignments to an R object. * as.mcmc.permat: provides same functionality for permat objects as as.mcmc.oecosimu for oecosimu objects. * permatswap: same default values of 'burnin' and 'thin' (0 and 1, respectively) are set for permatswap and oecosimu functions. Previous defaults for permatswap were in conflict with oecosimu when called by permat.control. * hiersimu: new function to evaluate a statistic value at different levels of a nested hierarchical sampling design. Based on oecosimu and null model testing, but with evaluation process similar to adipart. * metaMDS: automatic stepacross works with Euclidean, Manhattan and other distances with no fixed upper limit. However, this may be meaningless, and a warning is issued. Fixed after a query to R-sig-ecology by Manuel Spinola. Version 1.16-14 (closed Mar 10, 2009) * as.mcmc.oecosimu: a new function to translate sequential null models to "mcmc" object of the coda package. The coda package provides a wealthy source of the analysis of things like stationarity, adequate sample size, autocorrelation, length of needed burnin-in etc. * density and densityplot: new methods for "oecosimu" objects. * as.ts.oecosimu: new function for applying time series methods for sequential null models ("swap", "tswap", "abuswap"). * metaMDSrotate: a new function to rotate metaMDS configuration so that the first axis is parallel with a continuous site variable. * as.ts.permat: extracts summary statistics from 'permat' objects as time series, to use for time series diagnostics. * permatswap: two new methods (under "abuswap") added based on the paper of Hardy 2008 (J Ecol 96, 914-926). These preserve row *and* colunm occurrences, and row *or* column sums at the same time. Thus these complement the methods available in vegan. Uses C code (not thoroughly tested yet). Needs some more work, and documentation (examples and reference in Rd file). Version 1.16-13 (closed Feb 24, 2009) * anova.cca: documented the 'cutoff' argument for by = "axis". * text.procrustes: added text() function for procrustes() result plots. * rad.null: failed with family = gaussian and Gamma. * simulate.rda: new method to simulate responses with random error for an rda() result object. The function uses Normal error, and estimates the sd separately for each species from their rda residuals. Normal error is justified by least squares fitting in rda. This could be made to use permutations of residuals. Not yet implemented for cca or capscale results. For cca we -- at least -- need to handle weights, and the capscale result would be rda result, since the method cannot be directly implemented for dissimilarities. The function was triggered by Ben Bolker's email to R-devel mainling list https://stat.ethz.ch/pipermail/r-devel/2009-February/052116.html Version 1.16-12 (closed Feb 15, 2009) * anova.ccabyaxis: gained keyword 'cutoff' (defaults 1) to break from permutation tests after exceeding the P-value given in the argument. The keyword was introduced because rda and cca are occasionally used with a huge number of constraints (like PCNM vectors) where tests take a very long time, although only a couple of first axes are significant. The keyword is still undocumented, and will remain so because this change is still experimental. * contribdiv: new functions for contribution diversity as an alternative to simple additive diversity following Lu, Wagner & Chen, Basic and Applied Ecology 8, 1-12 (2007). Version 1.16-11 (closed Feb 9, 2009) * anova.cca: used different random number sequence for the second term with by = "margin". * ordirgl & orgltext: removed work arounds for very old versions (pre-0.65) of the rgl package. Version 1.16-10 (closed Jan 28, 2009) * commsimulator: failed if input data (x) were a data.frame. * metaMDS: really do not evaluate no.shared() if set noshare=0. Triggered by a problem report with missing data. * vegdist doc: Morisita and Horn-Morisita were given as similarities in the help. * ordirgl: fixed wrong warnings in ordirgl(..., type="t"). * kendall.post, kendall.global: knows now all P value adjustment methods of 'p.adjust()' plus "sidak". Version 1.16-9 (closed Jan 20, 2009) * kendall.post: added one line that was accidentally lost in editing. * Checked with R version 2.9.0 Under development (unstable) (2009-01-13 r47593) having experimental strict Rd parser, and corrected the reported problems in Rd files so that vegan is R 2.9.0-ready. * adonis: uses now canonical (hits+1)/(tries+1) for P-values instead of hits/tries. Default number of permutations increased from 5 to 999. Added terms component so that things like update() and drop.scope() magically started to work. Renamed design.matrix into model.matrix (and documented the item). * permatswap: new algorithm "swsh" is added to keep row/column incidences (but not sums) constant. The name refers to the two steps: (1) binary *sw*aps are made then (2) individuals in non-zero cells are *sh*uffled. * permat methods: calculations of the Chi-squared statistic is added to summary, and the type argument can be used in the plot "bray" or "chisq" values. * nestednodf: gained argument 'order = TRUE' allowing tests for other orderings than using marginal frequencies (default) following suggestion by Almeida-Neto et al. (2008). * summary.cca: cumulative "accounted for" statistics failed in unconstrained models. Version 1.16-8 (closed Jan 7, 2009) * Fixed unescaped $-signs in documentation files after Ripley told to do so ("[Rd] Misuse of $$ in Rd files", https://stat.ethz.ch/pipermail/r-devel/2008-December/051634.html) * kendall.global & kendall.post: new functions to analyse the Kendall's coefficient of concordance --- use in ecology: to identify significant species associations. See P. Legendre, J. Agric. Biol. Envir. Statistics 10, 226-245; 2005. Written by Guillaume Blanchet and Pierre Legendre. * nestedness: added nestedness index based on overlap and decreasing fill (Almeida-Neto et al., Oikos 117, 1227-1239; 2008). Not yet all properties of the Oikos paper are implemented, and the UI needs work (print, plot methods). Coding by Gustavo Carvalho as a part of R-Forge Feature Request #265. Documented with nestedtemp. Version 1.16-7 (closed Dec 17, 2008) * permat*: functions were rationalised, strata argument is used instead of reg and hab, and returned object got several new arguments. The tide of changes affected methods as well, and some other function (adipart, oecosimu). Stratification was tested and corrected. Version 1.16-6 (closed Dec 7, 2008) * adipart: got a formula interface, and aggregate() was replaced by matrix multiplication. Now it is 10 times faster. The formula interface has some consequences on the specification of the sampling design. * permatfull: Jari Oksanen made the C port for the quantitative quasiswap algorithm. So the permat* null model family now can be used for a wide array of null model analyses and is quick enough to make reliable testing. The permatswap function and help page were modified accordingly. * plot.rad: gained argument log = "y", allowing log = "xy" so that Zipf model is a straight line, or log = "" with arithmetic scales. Not (yet) implemented for Lattice alternatives. Version 1.16-5 (closeed Dec 4, 2008) * adipart: new implementation of adipart is now ready to be released (needs some testing). Summary and plot methods have been removed. The new implementation is based on oecosimu and quantitative null model settings via permat.control. It contains only traditional diversity indices. More features will be added later, gradually. * plot.nestedtemp: label argument accepts a vector of length 2 with elements for row and column labels, respectively. * mite.rda: Oribatid mites got species names (from Pierre Legendre's web pages). * text.decorana: failed (bug introduced in rev344, on May 9, 2008). * commsimulator: simulated null models have same column and row names as the original input (as.)matrix. There was a problem report by a user who tried to use column names during evaluation of the statistic. Done by setting attributes (and it would be possible to replace dim() setting by attributes() setting in the code). * ordisurf: gains argument 'bubble' to use bubble plots for points, and 'cex' to set the symbol size (or the maximum size with 'bubble = TRUE'). Version 1.16-4 (closed November 25, 2008) * oecosimu: got a new control argument for quantitative null model analyses; this is available if method = "permat". The print method and help file modified accordingly. * vignettes: Figures with narrower margins. Vignette "diversity-vegan" adds functional diversity ('treedive'), 'beals' and 'radfit' graphics updated to current vegan. Still missing pieces: nestedness & null models, quantitative null models, additive diversity partioninng, Tsallis entropy. * radlattice: a new function to display each radfit model in a separate panel together with their AIC or BIC values. * plot.cca: takes care that plotted items have non-NULL names that plot neatly. This was already take care of with formula interface, but now it should work also in other cases in plots. Reported by Daniel Borcard. * permatwsap: quasiswap method is implemented for count data based on the idea of Carsten Dormann in the bipartite::swap.web function. This takes a random matrix first with same row and column sums as the original (via r2dtable), and then restores the original matrix fill through steps of swapping 2x2 submatrices. The current R code is slow. * permatfull: when both cells and individuals are shuffled, the matrix fill remains constant. * nesteddisc: replaced with a new function that orders tied columns to minimize the discrepancy statistic. If there are <=7 tied columns, all upto 5040 permutations are inspected, and if there are >7 tied columns, 5000 random permutations are inspected. The ties are inspected only if they could change order of columns within range of row sums (species richness). A warning with results is only printed if there were >7 tied columns that could influence the statistic, because in other cases the search for solution was exhaustive. The new function may be slow, and a more clever solution should be found (or nesteddisc dropped from vegan). With this code, the discrepancy statistic of the 'sipoo' data is 50 (cf. notes on 1.16-3) instead of the original 55. * betadisper: now works for cases where there is only a single group. 'scores', 'plot' and 'boxplot' methods updated to work in such cases. 'anova' and 'permutest' methods stop with an error if used for such cases as they implement tests that do not make sense for a single group. Version 1.16-3 (closed November 1, 2008) * spantree: saves labels of points, and 'cophenetic' and 'plot' use these labels. Function 'plot' uses 'ordilabel' for text labels. * orditkplot: added option to copy the current graph to a TIFF file. The capabilities("tiff") check was added in R-2.8.0, but the test works in R < 2.8.0 as well. * nesteddisc: Carsten Dormann (UFZ, Leipzig, Germany) turned my attention to the sensitivity of discrepancy to ties in column frequencies. These are not handled by any way (yet), but the users are warned now about ties. For instance, the example matrix 'A' on page 259 of Brualdi & Sanderson (Oecologia 119, 256-264; 1999) can be ordered to give discrepancy value = 2 instead of value = 3 reported in the paper with a different ordering of columns. Different random reorderings of species in the 'sipoo' data in vegan can give discrepancy values 51 to 58 (and the original arbitrary ordering gives 55). This means that discrepancy values are not very reliable, but ties should be handled better or the function withdrawn from vegan. * ordisurf: returns x, y and z used by contour() following a query "[R-sig-eco] output from ordisurf" on Oct 23, 2008. Version 1.16-2 (closed October 27, 2008) --- for Annukka * beals: replaced old beals.R with the new code by Miquel de Caceres with new methods described in De Caceres & Legendre (Oecologia 156, 657-669; 2008). This also implements the cross-validatory Beals of Munzbergova & Herben (Oikos 104, 408-414; 2004) plus many new options of unbiasing estimates. * permatfull: bug of row/col margins is fixed, shuffle argument is added to enable individual and sample based randomisation of count data (or both) when not all the margins are fixed. * anosim: API and documentation made similar to mrpp to combine their documentation. Now anosim can take data frame input and find the dissimilarities internally. Version 1.16-1 (closed October 10, 2008) * dispindmorisita: function to calculate Morisita's index of dispersion, and its standardized version. Uses the correct way of standardizing, see Note section in help. * radfit: Should work with empty sites (no species) or when the number of species is less or equal the number of parameters estimated (like may happen in sweeping analysis of data frames or simulations). Takes care that input data frames have row names which are necessary for displaying results. * head.summary.cca & tail.summary.cca: shortcuts to print(summary(x, ...), head, tail) for nicer Sweave tutorials. Version 1.16-0 (closed on September 30, 2008) * New devel version after branching the release version 1.15-0. Identical to the release version, but includes MOStest and adipart functions that were removed from 1.15-0. Version 1.14-12 (closed September 26, 2008) * add1.cca, drop1.cca: new functions that also implement permutation tests with argument test = "permutation", but only use default methods with test = "none". Function drop1.cca uses anova.cca(..., by = "margin"), and add1.cca implements a new type of analysis for single term additions. The immediate reason for implementing these tests was that I found out that step(..., test = "Chisq") worked(!) producing parametric likelihood ratio tests, and this hole had to be closed before users notice this. * anova.cca: improved treatment of models where constrained or unconstrained models are NULL so that permutation tests are impossible. These used to stop with error, but now they return a zeroed result so that things like anova(..., by = "term") and drop1() work. Added function anova.ccanull to handle these cases. * anova.cca(..., by = "margin") was handling wrongly 'x' in ~ Condition(x) + x + z, or model formulae where same variables were used both as Conditions and (aliased) constraints. * anova.cca(..., by = "margin") or function anova.ccabymargin gained a 'scope' argument which is used in drop.scope(). * orditkplot & ordipointlabel: improved interface allows passing font type from ordipointlabel to orditkplot. * copied to version 1.15-0 at rev506. Version 1.14-11 (closed September 10, 2008) * anova.cca/permutest.cca: default permutation model changed from "direct" to "reduced" after Pierre Legendre's simulation test demonstrated slightly better Type I error for "reduced" models in by = "axis" and other partial models. This is also consistent with CANOCO (but permutation of CCA residuals differs from CANOCO). For compatibility with old versions of vegan, you must set model = "direct" explicitly. * ordiplot: did not use partial match for "sites" and "species". Version 1.14-10 (closed September 5, 2008) * treedive: tries to match 'comm' and 'tree' names if forced (by an arg), or when sizes do not match. Output vector has names. Docs discuss estimating signifcance using oecosimu(). * oecosimu: accepts now a vector of statistics and plain statistics instead of the list item statistics, and the user can define the name of the statistic in the function call. This means that things like functional diversity (treedive) for sites can be analysed with approprite simulation model. * nestedtemp & oecosimu documentations split. * ordiParseFormula: formula of the partial terms has the same environment as the general formula. Cures some tricky issues when the partial term of cca/rda/capscale model is updated within a function. (The environment() drives me crazy, says J.O.) * ordiParseFormula gains new argument 'envdepth' to define the depth where the community data (dependent data) is evaluated. Most functions evaluate community data in the parent environment of the calling function, but capscale() creates new dependent data and needs evaluate the community within calling function. (The environment() drives me absolutely crazy, says J.O.) * specaccum: empty (all zeros) species removed from input data. These confused method = "exact" which gave sd = NA. * permutest.cca: tells whether the test was for all eigenvalues or for the first (this is implicit in anova.cca). * vegan-internal.Rd: brief documentation of internal functions for developers with some guidelines of good practices. Version 1.14-9 (closed August 20, 2008) * closed concurrently with the release of vegan 1.13-2: changes up to this version may have been there. * adipart: new function to perform additive diversity partitioning with corresponding S3 methods. * tsallis: new function to calculate Tsallis-entropy, a scalable diversity index family * treedive: new functions for estimating functional diversity defined as the height of a dendrogram of species properties for a site (Petchey & Gaston). Still very preliminary. * plot.procrustes: could fail if two solutions were *exactly* *exactly* identical (noticed by Peter Solymos with wcmdscale example). Version 1.14-8 (closed August 10, 2008) * wcmdscale: new function to perform metric scaling (a.k.a. principal coordinates analysis) with weights for points. * ordiArgAbsorber: now knows about 'choices' and 'display' args of scores(). Reported by Michael Denslow. * orditkplot: plotting text labels was broken in the default case. Zooming works again. Plotting character (pch) is now better centred on the canvas, and the code was simplified. Version 1.14-7 (closed July 30, 2008) * orditkplot: imitates now plotting character (argument pch). Zooming maintains graphical parameters (such as mar). Label selection shown by a rectangle, since label may already be red. Label family, size and font can be vectors. * permat.R, swapcount.R: summary method was modified according to standard R ways, ylab argument was deleted from plot method. The R version of swapcount was deleted and replaced by the C version. Help file was modified accordingly. * ordilabel: new function for cluttered ordination plots -- text is written on a non-transparent label. Similar to s.label() function in ade4. * ordipointlabel: new function for cluttered ordination plots -- points are in fixed positions, but their text label is located to avoid overlap. The optimization is based on optim(..., method = "SANN"). Similar to pointLabel function in maptools. Returns an "orditkplot" object, but orditkplot cannot yet completely handle this (and this feature is undocumented). * permutations: permuted.index2 and associated functions now allow for restricted permutations of strata (i.e. restricted shuffling of the blocks). This changes the acceptable 'type' options and adds a new argument 'permute.strata' to permControl(), to control how and what is permuted. Version 1.14-6 (closed July 5, 2008) * permatswap (nestedness.c): translated Peter Solymos's swapcount.R to C. This is still experimental code, and the user interface is undocumented, except here: use method = "Cswap" in permatswap. * permatswap: was not updating swap matrix but using the same starting matrix after burnin for every swap. * swapcount.R: was advancing 'thin' counter even when a swap was rejected so that fewer than requesed 'thins' were done. * permat.R, swapcount.R: genereal cleanup, most importantly replacing vector operators & and | with logical operators && and ||. * commsimulator: "quasiswap" written in C and *much* faster now. Times are for MacBook Intel 1.86 GHz and 100 matrices: "sipoo" from 7 min to 4 sec, "BCI" from 2+ hrs to 45 sec. Actually, quasiswap is now much faster than ordinary swap which also should be written in C. "Backtracking" is so much more complicated code that it could probably never reach "quasiswap" even if written in C, and it may be dropped in the future. * commsimulator: "swap" and "tswap" written in C, and clearly faster now. In MacBook, 100 swaps with "sipoo" went from 8 sec to 0.5 sec, and thinning hardly influenced timing (it used to thin-fold times). * oecosimu: takes care that original statistic is found from binary data. Version 1.14-5 (closed June 19, 2008) * scores.rda: scaling = 0 returns now unmodified scores from the object (like documented) without multiplying by the scaling constant. Gains argument 'const' for user-settable general scaling constant of the scores. The default 'const' is found internally to giv a biplot scaling so that species and site scores together approximate the original data. The value of 'const' is returned as an attribute of 'scores'. * summary.cca: prints the value of general scaling constant used in 'rda' or 'capscale'. * summary.cca: prints 'capscale' like 'rda' (used to have some 'cca' style output, like calling site scores "weighted averages" instead of "weigthed sums"). * permutest.cca: estimates now residual df as number-of-rows - rank-of-constraints-and-conditions - 1 so that df and pseudo-F are equal to those reported by lm() for single response variables in rda. anova(..., by = "ax") needs rethinking though: it only had one df. Because the test was based on permutation and order statistics the change of df does not change the significances: the observed pseudo-F and permuted pseudo-F's are influenced similarly by the change of df, and order statistic does not change. * varpart: long formulae were cut off in printoutwith a cryptic warning. Version 1.14-4 (closed June 12, 2008) * permatfull, permatswap and swapcount: functions to generate unrestricted and restricted null model community data matrices under diferent constraints (preserving row/columnsums, or incidence pattern), with print, plot and summary methods. (submitted by PS) * adonis: speed-up and doc updates. Version 1.14-3 (closed June 9, 2008) * rda.default, cca.default: vegan naively used only the rank of the ordination, but indeed, there are three cases of ranks: rank of the ordination or number of axes (returned as rank like before), rank of the constraints after conditions (now returned as qrank), rank of conditions + constraints (returned in QR$rank). When only 'rank' was used, vegan for instance aliased terms beyond rank of ordination axes, extractAIC did not get df right when going beyond rank of ordination, anova(..., by="t") gave zero df for constraints beyond rank of ordination, and calibrate.cca ignored those extra variables (now stops). In addition predict.cca and predict.rda(..., type="lc", newdata=somedata) gave wrong results in partial model. The following changes were made if necessary to cca/rda support functions: * alias.cca: QR$rank * anova.ccabyaxis: OK * bstick.cca: OK * calibrate.cca: stop with error if qrank > rank * extractAIC: qrank * mso: OK (HW confirms) * msoplot: OK (HW cofirms) * permutest.cca: qrank, also fixes anova.ccabyterm * predict.cca/rda: QR$rank with type = "lc" & newdata * summary.cca/rda: OK * scores.cca/rda: OK Version 1.14-2 (closed June 5, 2008) * Helene Wagner joined the vegan team. * mso: automatically collapses distance classes larger than half the maximum distance into a single distance class. * mso: plot.mso renamed to msoplot so that plot.cca also works, and the example uses now Oribatid mite data set. * mso: gained a print method that also shows the variogram (Helene, please check this!), and mso knows about its own call. * lines.spantree: did not pass graphical arguments to lines (broken in 1.12-15). * ade2vegancca: a new function which tries to change an ade4:::cca object to vegan:::cca object (and manages partially). This is used internally in print.cca, scores.cca and summary.cca so that vegan can display some information from ade4:::cca (with a warning). Since scores.cca works for ade4, so do plot, orditkplot etc which rely on scores. Version 1.14-1 (closed May 29, 2008) * plot.mso: passes extra arguments (...) to graphical functions. * mite.xy: new data set with spatial coordinates for the Oribatid mite data. From Pierre Legendre's web page. * weights failed in several ordination utilities, because weights.default in R 2.7.0 (stats) could not cope with objects that do not have weights. R 2.6.2 still returned NULL for those objects, but now weights.default gives an error. As a workaround several vegan functions define internally weights.default <- function(object, ...) NULL to get back the old behaviour. Concerns orglspider, ordicluster, ordispider, ordiellipse, ordisurf, factorfit, vectorfit. * inertcomp and intersetcor only work with objects inheriting from "cca", but they did not check that the object was of the correct type and so could end up with calling weights.default or give obscure error messages. * permutest.betadisper: Could give the wrong pair-wise permutation p-values. Reported by Daniel O'Shea. Version 1.14-0 (closed May 21, 2008) * The base of the release version 1.13-0. Version 1.12-15 (closed May 14, 2008) * closed the revision and made it as the base of release branch 1.13-0 at rev353. * capscale: prints info on possible metaMDS transformations, and uses metaMDSdist transformed data for getting species scores (similarly as metaMDS recently does). * ordiTerminfo: does not give superfluous warnings if constrained ordination called without constraints and without data=, like capscale(x ~ 1). * graphical functions: Graphical functions that also pass '...' to non-graphical functions (such as scores) now accept non-graphical arguments without issuing an warning. These warnings were harmless but it is neater to stop them happening in the first place. This is facilitated by the new internal function ordiArgAbsorber(). * MOStest: added fieller.MOStest for approximate confidence intervals of the location of the hump or pit. The method is based on Fieller's theorem following ter Braak & Looman (Vegatatio 65, 3-11; 1986) and profile based condifence limits following Oksanen et al. (Ecology 82, 1191-1197; 2001). Both are based on the code from the ESA Ecological Archives accompanying Oksanen et al. (Ecology 82, 1191-1197; 2001) and published in package optgrad (http://www.esapubs.org/archive/ecol/E082/015/default.htm), but profile methods heavily borrow from the MASS package. Version 1.12-14 (closed May 9, 2008) * mso: added Helene Wagner's mso function for direct multi-scale ordination or spatial partioning of 'cca' and 'rda' results (Ecology 85, 342-351; 2004). Thanks to Helene Wagner for allowing the inclusion of the code. * MOStest: new function to implement Mitchell-Olds & Shaw test for the location of quadratic extreme in a defined interval. * capscale: accepts now other dissimilarity function than vegdist, and optionally uses metaMDSdist to manipulate dissimilarities similarly as metaMDS. This provides now a one-shot unconstrained principal coordinates analysis ("metaPCoA"), optionally with extended (flexible shortest path) dissimilarities. Incidentally this also implements a "new" possibly unpublished ordination method: extended distance based redundancy analysis. * metaMDSdist: argument 'add' gained new alternative "ignore" to do nothing with zero distances. This can only and should be used with metric scaling (cmdscale(), capscale()). * ordispantree: removed after being deprecated and defunct for a long time. Use lines.spantree instead. Version 1.12-13 (closed May 7, 2008) * orditkplot: labels can be edited with double clicking, and shift-mouse allows zooming into smaller are in the plot. Version 1.12-12 (closed May 1, 2008) * adonis: added calculation of coefficients both for the species (when data matrix was given) and for sites (both with the data matrices and dissimilarities). * betadisper: was not calculating distance to centroid correctly for observations where the imaginary distance to centroid was greater than the real distance (resulting in negative distance) which resulted in NaN when we took the square root. betadisper() now takes the absolute value of the combined distance before taking the square root. This is in-line with Marti Anderson's PERMDISP2. Version 1.12-11 (closed April 23, 2008) * adonis: permutation tests fixed. The permutation statistics were wrongly calculated. The results will now be different than in older version, including the example(adonis). Basically, the reported statitistic used SS improvement compared to the residual of the complete model, but permutations used SS accumulation compared to the residual after the current model. * specaccum: returns item "individuals" or the average number of accumulated individuals with method = "rarefaction". A user request. * rarefy: accepts now a vector of sample sizes, and then returns a matrix with a column for each sample size. If also 'se = TRUE', returns two rows for each case, one for rarefied richness, and after than one for its standard error. This was a recurrent user request. * zzz: vegan got package startup message. Version 1.12-10 (closed April 19, 2008) * adonis: the fix for the unused factor levels (r312) revealed that adonis did not handle properly aliased variables and pivoting. Results need checking. * designdist: gained argument 'abcd = FALSE' to use the 2x2 contingency table notation instead of the more tangible default notation. Version 1.12-9 (closed April 13, 2008) * ordiArrowMul: added function 'ordiArrowMul' to improve automatic scaling of biplot arrows (in plot.cca, text.cca, points.cca) and fitted vectors (in plot.envfit). Reversed axes 'xlim=c(1,-1)' work now, and shifted origin 'at = c(1,1)' taken into account in plot.envfit. * plot.cca: scaling used for biplot arrows is returned as an attribute to the 'biplot' item in the 'ordiplot' object (but this attribute is not used for anything useful yet). * summary.cca: contributions of eigenvalues accumulated for constrained and unconstrained axes, and separately (new) for constrained axes. * allPerms: Now accepts a vector from which number of observations can be deduced. This was the intended behaviour but allPerms failed in such cases. * adonis: Was not dropping empty levels of factors, which was leading to incorrect results (d.f. was inflated). Reported by Tyler Smith. Version 1.12-8 (closed April 6, 2008) * permute: New high-level untility function for facilitating the production of permutation tests using the new permutation designs allowed by permuted.index2(). An example of the new API is shown in ?permute. * permutest.betadisper: Pairwise t test function made more computationally stable. Version 1.12-7 (closed Mar 30, 2008) * permuplot: New function, produces a graphical representation of a permutation design given a number of observations and a object returned by permControl(). The function handles all the permutation designs currently handled by permuted.index2(). * permuted.index2: was not returning correct sample indices for grid designs within strata. Also, was not consitently mirroring series and grid designs when 'constant = TRUE' (i.e. mirroring was not applied the same way within each level of strata). * permCheck: Now includes several sanity checks for balance in permutation designs ('grid' & 'strata') and when using same permutation in each level of 'strata' (constant = TRUE). Also works if object is a (numeric or integer) vector of length 1, by expanding it to seq(from = 1, to = object). This is now in-line with the way numPerms works. New argument 'make.all' in permCheck() allows greater control over the checking process. Allows user to check a permutation design without generating the matrix of all possible permutations. Used in allPerms() to allow that function to check permutation designs without getting stuck in infinite recursion, as permCheck() calls allPerms() if complete = TRUE. This change allows allPerms() to be called by a user without having to make sure the supplied design makes sense - the design is checked using 'make.all = FALSE'. * screeplot: functions return now invisibly the xy.coords of bars or points for eigenvalues. They used to return invisibly the input data ('x'). Concerns screeplot methods for 'decorana', 'cca', 'princomp' and 'prcomp' objects in vegan. * varpart4: result could be wrong if 'varpart' was bypassed and 'varpart4' was called directly, because 'Y' was not centred before calculating sum of squares in 'varpart4' ('varpart2' and 'varpart3' were OK). Reported by Guillaume Blanchet, Uni Alberta. * permutest: Now a generic function. permutest.cca is now the 'cca' method. * permDisper: This function has been renamed to permutest.betadisper and documentation updated. * TukeyHSD.betadisper: Function is now documented with betadisper. Version 1.12-6 (closed Mar 25, 2008) * metaMDS: WA scores for species are now based on the same transformations and standardization (like wisconsin(sqrt())) as the dissimilarities. They used to be based on the original data even when the data were transformed for the ordination. The change is minimal: data are evaluated similarly as in metaMDSdist if wascores are requested. An alternative would have been to split data manipulation function into an independent function from metaMDSdist, but I try this first. For compatibility reasons, the previous behaviour can be re-established using argument old.wa = TRUE. * allPerms: Now allows unbalanced designs for "series" or "free" permutations within levels of strata only (i.e. allows different number of observations per level of strata). Unbalanced "grid" designs are not supported (and are unlikely to be so in the near future). permuted.index2 has allowed these cases from the beginning. * allPerms, numPerms: Corrected for situations where type = "series", mirror = TRUE with only 2 observations. In this case, mirroring does not double the number of permutations. Version 1.12-5 (closed Mar 24, 2008) * plot.procrustes: could fail if compared configurations were numerically identical. * allPerms: New function to enumerate all possible permutations for a given permutation scheme and number of samples. Has 'print' and 'summary' methods. * numPerms: Now accepts a numeric or integer vector of length 1 as the first argument 'object'. If supplied it is expanded to seq(from = 1, to = object). This change allows you to state the number of observations rather than pass an object from which the number of observations is deduced. Updated and clarified documentation in this regard. Version 1.12-4 (closed Mar 20, 2008) * permDisper: Added pairwise comparisons of group dispersions via a classical t test and via permutation test, accessed via new argument 'pairwise = TRUE'. 'permDisper' is now documented seperately from 'betadisper'. * TukeyHSD.betadisper: A method for 'TukeyHSD' to calculate Tukey's Honest Significant Differences for the grouping factor in 'betadisper'. * numPerms: Was incorrectly calculating the number of permutations when permuting levels of strata was performed. numPerms was also incorrectly reporting too many permutations in the particular case of type="grid" and mirror=TRUE with ncol=2. * permuted.index2: When permuting levels of 'strata' (type = "strata"), permuted.index2 was shuffling both the levels of strata *and* shuffling the samples within levels. The latter was incorrect and is now fixed. Version 1.12-3 (closed Mar 9, 2008) * betadiver: a new function that implements all indices of beta diversity reviewed by Koleff et al. (J. Anim. Ecol., 72, 367-382; 2003), with a plot function to produce triangular plots. * isomap: added dynamic, spinnable 3D graphics using rgl (rgl.isomap). Version 1.12-2 (closed Mar 7, 2008) * nestedtemp: Rodriguez-Girones & Santamaria (J. Biogeogr. 33, 924-935; 2006) have had a look inside the original temperature calculator code and give a more explicit description of the method. Following their paper, I implemented an iterative procedure to alternately pack columns and rows for ones and zeros. The fill line is still a parabola, but this seems to be very similar to the R-G & S fill line with fills 0.2...0.8 and I don't hurry with this. There still are differences in many aspects of implementation. The iterative procedure gives slightly different results between runs, but here tests: Rocky mountain mammals 3.87 (A&P 3.81, was 3.59 in 1.12-1), Baja birds (Bajabs.txt) 10.17 (A&P 7.25, was 7.75), Queen Charlotte birds 14.78 (A&P 15.87, was 14.51). Some results are indeed more different than they used to be... * nestedtemp (2): After previous entry implemented the fill line of Rodriguez-Girones & Santamaria. This means almost complete rewrite of the function from 1.12-1. New test results: mammals 4.48, Baja birds 10.16, Queen Charlotte birds 15.85. Baja is the most different. Atmar & Patterson have five Baja bird data sets with these test results: Bajaball 6.33, Bajabl 14.43, Bajabn 5.98, Bajabo 11.18, Bajabs 10.13. Smaller change is that packing is based on indices s and t directly instead of their ranks. * vignettes: added discussion on nestedtemp and backtracking in "Design decisions and implementation". Version 1.12-1 (closed Mar 2, 2008) * biplot.rda: gained argument col to select colours for sites and species. * bstick.princomp: used a wrong number of sticks (PCs). Reported by Guy Yollin. * nestedtemp: Returns row and column coordinates, optionally labels plot. * merged last doc fixes from branches/1.11-0/ after release. Version 1.12-0 (Feb 15, 2008) * Made a release branch (1.11-0) based on the the rev. 204, and relabelled this devel branch to 1.12-0. Version 1.10-13 (closed Feb 15, 2008) * preparing for a release and trying to close open threads. * nestedtemp: implemented smooth fill line. The kind of the fill line was not specified in the original paper, but I used parabola which is "as smooth as possible" in the sense that its second derivative is constant. Needs checking, though. Version 1.10-12 (closed Feb 12, 2008) * nestedtemp: new try with smooth fill line. * anova.cca: by = "margin" stops with informative error message if some terms are completely aliased (used to stop with an uninformative error message). Type III effects really do not make sense with aliased variables. * calibrate.cca: does correct pivoting of aliased models. * orditkplot: Set up all basic features, and added points, text, and scores methods. Features that should be added include zooming to a rectangle drawn with a mouse, and adding env variables. The latter would be trivial in a simple way, but the user should be able to move the bunch of arrows to another place, and scale the length of arrows with a mouse. Version 1.10-11 (closed Feb 3, 2008) * bgdispersal: New, more powerful test statistic (in terms of Type 1 error rate) for the McNemar test (Pierre Legendre). * CCorA: internal functions embedded in CCorA(). * orditkplot: More resilient against user errors. New output file types (bmp, xfig), jpeg uses 100% quality. more aware of operating system and capabilities. Accepts graphical par in the function call. Gains arguments xlim, ylim. Arguments col, bg, cex renamed to pcol, pb, pcex so that the do not shadow par(). * permuted.index2: fixed a bug in permutations with strata. * summary.prc: honours now argument 'axis'. Reported by Francois Gillet, Lausanne. * Documentation: added documentation for permuted.index2, permControl, permCheck and helper functions. FAQ and intro know now about orditkplot, anova.cca(..., by="margin") and permuted.index2. FAQ gained new sections on using different plotting symbols and handling congested plots in ordination graphics. Version 1.10-10 (closed Jan 27, 2008) * DESCRIPTION: suggests tcltk. * orditkplot: new function for ordination plots based on Tcl/Tk: you can edit graph by moving labels using a mouse and save the edited graph as an eps file, or export via R plot function to eps, pdf, png or jpeg, or to dump to R session for further processing. * CCorA: removed partial analysis (which needs more work and may reappear later). Version 1.10-9 (closed Jan 16, 2008) * anova.cca: new option by = "margin" to perform separate tests for each marginal effect in a model with all other terms. This is similar to Type III tests, but will only work with marginal terms, and will exclude main effects when corresponding interactions are in the model. P-value is now assessed in the true blue way as (hits+1)/(permutations+1) in all anova.cca methods. Permutations should be able to handle now rank deficit cases with pivoting in the QR decomposition (permutest.cca). * permuted.index2: New version of permuted.index() that now allows restricted permutations. Can produce permutations for time-series or line transects and for spatial grids. These can also be nested within 'strata'. permuted.series() and permuted.grid() are the relevant workhorse functions. Permutation options are set by new function permControl(). Plan to migrate vegan functions to permuted.index2() in the devel version, and will eventually replace the current permuted.index(). * permCheck: New function for checking permutation schemes under permuted.index2. Uses new function numPerms() to generate the number of possible permutations. permCheck() has print, summary and print.summary methods. Version 1.10-8 (closed Dec 14 2007, at Rev. 133) * metaMDS: gains argument wascores (defaults TRUE) to suppress calculation of species scores. * wascores: return now NA for missing (all zero) species instead of failing. * ordiplot: ignore missing scores in plotting and printing. * betadisper: new functions for Marti Anderson's analysis of homogeneity of multivariate dispersions. * nestedtemp: handles now tied frequencies using ties.method = "average" in rank(). Function is still preliminary, and may be dropped from the release. * taxa2dist: issues now a warning if called with 'check = FALSE' and there are zero distances, typically meaning that basal taxa (species) were not coded. Also explained in the help. * varpart: failed if there were unused levels in factors (reported by Clément Tisseuil, Toulouse). * adonis: loses argument 'distfun'. Instead accepts now any 'dist' object as input instead of a data frame or a matrix. Version 1.10-7 (closed Nov 18, 2007 at Rev. 119) * adonis: gains argument 'distfun' (default 'vegdist') so that other standard conforming dissimilarity functions than vegdist can be used (a user request). * decorana: does not crash R when called with NULL row data such as decorana(dune[FALSE,]) (reported by Richard Tellford, Bergen, Norway), and predict(..., type="sites") works correctly with downweighted analysis (reported by Colin Beale, Aberdeen, Scotland). * isomap: checks now that input data are dissimilarities or can be changed into dissimilarities without warnings. * ordixyplot: can now display biplot arrows and factor centroids in constrained ordination or from envfit (ordisplom and ordicloud cannot display these). * ordixyplot, ordicloud and ordisplom: no longer have explicit scaling argument, but can now pass arguments to scores() as well as to the plotting functions. * oecosimu: evaluates now two-sided P-value of the statistic from simulations. Doc updates. * vignettes: use all similar style (amsart, a4paper, sidecap, date style). * FAQ: tell about docs added to R-Forge versions of vegan. Tell about predict() for having "passive" points. Version 1.10-6 (closed Oct 31, 2007 at Rev. 100) * Gavin Simpson joined the vegan team. * oecosimu: new functions for indices of nestedness of patches or islands, and simulation of null communities. * scores: cca method does now accept display = c("species", "sites"). Previous fix (1.10-5) was for rda method only. Documentation updated to reflect changes. * biplot.rda: now allows a different type to be specified for each of the species and site scores. Function now documented more completely. * ordixyplot, ordicloud and ordisplom: now have argument 'scaling'. * orditorp: now handles additional arguments passed as '...' more cleanly. Arguments can be passed to scores() or points/text. This should avoid the warning messages of previous versions. * sipoo: a new data set on the bird communities in the Sipoo (Sibbo) archipelago to demonstrate the oecosimu functions. Version 1.10-5 (closed Oct 18, 2007 at Rev. 86) * biplot.rda: new biplot function for PCA in rda() (Gavin Simpson). * scores: cca method accepts now display = c("species", "sites"), when it only used to accept c("sp","wa"). More consistent arguments in the default method. * CCorA: Pierre Legendre submitted code for permutation test of Pillai's trace. * capscale: negative scaling works now in plot() and scores(): estimates species sd() from the 'comm' if 'comm' is known. Version 1.10-4 (closed Oct 6, 2007 at Rev. 75) * anova.cca: failed in anova(object, by = "axis") when the fitted model had terms like poly(x, 2) or log(x). * ordiresids: new function for plot.lm like diagnostic plots for constrained ordination: Residuals ~ Fitted, sqrt(abs(Residuals)) ~ Fitted, and qqmath(~ Residuals) using Lattice graphics. * fitted.cca, fitted.rda: gained agument type = "working" to get the fitted values and residuals used internally in calculation (to be used in plot.lm diagnostic plots residuals ~ fitted). Version 1.10-3 (closed Oct 2, 2007 at Rev. 62) * doc: added vignettes intro-vegan on ordination methods and diversity-vegan. * Trellis graphics for ordination objects with functions ordixyplot, ordicloud and ordisplom. These functions are still unsatisfactory. In particular, I haven't found a clean way of having biplot arrows in the graphs (how do you know the coordinates and the axes used?). Contributions are welcome. * ordispantree made dysfunctional (deprecated in 1.8-1). Version 1.10-2 (closed Sep 14, 2007 at Rev. 36) * vegandocs: added FAQ-vegan, and renamed the old vegan-FAQ to decision-vegan. Only primary sources (texi, Rnw) in the source repository: derived files (.tex, .pdf) should be made when package is built. * CCorA: Pierre Legendre's functions for Canonical Correlation Analysis. These provide a more robust alternative to the standard cancor() in base R. (under work) * scores.default: handles numeric data frames. Version 1.10-1 (closed Sep 7, 2007 at Rev. 21) * taxondive: Fixed dimension checking, matching names and non-unique taxon names. Version 1.10-0 (Sep 6, 2007) * Moved vegan_1.8-7 (CRAN release) into R-Forge.R-Project.org and Subversion SCM. This ChangeLog will only contain most important news (and should be renamed to NEWS), and the real ChangeLogs are created by the SCM. The revisions will be numbered as 1.10-1 to 1.10-x, and the next release will be 1.11-0. VEGAN RELEASE VERSIONS at http://cran.r-project.org/ Version 1.8-8 (Oct 2, 2007) * Minor bugfix release for upcoming R-2.6.0. Based on the http://r-forge.r-project.org/projects/vegan/ revision 17 (= 1.8-7) with ported bug fix revisions from 1.10-3 (see below for revision numbers). * anova.cca: by = "term" failed in partial model. This was broken in 1.8-6 by introducing a test against deficit rank models (r47). * cascadeKM: Calinski index works now when the input data is a data.frame (r57, 58). * flush.console: metaMDSiter and bioenv use now flush.console() so that Windows people also see the trace (r56). * ordispantree: made defunct, was deprecated in 1.8-1 (r38). * scores: handles now numeric data frames (r25). * summary.cca: failed if only one type of scores was requested (r50, 52). * taxondive: Fixed dim checking and matching species names in community data and taxonomic distance data (r21). * tweaks to pass --pedantic R CMD check, mainly in formatting source files, unused variables in source files and superfluous braces in help files (r39, r46, r62). * Updated FAQ-vegan.pdf to the current version at R-Forge. Version 1.8-7 (August 24, 2007) * Based on devel version 1.9-34. * DESCRIPTION: M. Henry H. Stevens (Miami University, Oxford, Ohio) joined the vegan team. * adonis: new function for nonparametric MANOVA that is appropriate for even extremely wide matrices sometimes associated with gene data and with diverse ecological communities. Author Hank Stevens. * taxondive: a new function for indices of taxonomic diversity and distinctness after Clarke & Warwick (Mar Ecol Prog Ser 216, 265--278, 2001 and other papers). With a helper function 'taxa2dist' to turn taxonomies into distances with an option for variable step length (Clarke & Warwick, Mar Ecol Prog Ser 184, 21--29, 1999), and a toy data set on the taxonomy of dune meadow species ('dune.taxon'). With a help, testing and pressure from Mike Cappo, James Cook Uni, Qld. * bgdispersal: previous version was partly garbled (by me), and P. Legendre provided a corrected one. * designdist: keeps 'dist' attributes even when the 'method' function drops them. Swapped the order to (terms, methods) in the default name. * metaMDS: issues a warning if data are disconnected. Passes extra arguments to other 'distfun' than 'vegdist' so that you can set 'terms' in 'designdist' etc (metaMDSdist). Can now do trymax=0 or skip random starts and give you enhanced 'isoMDS' result (metaMDSiter). * ordiplot: failed if number of species was equal to number of sites (and so did plot.metaMDS and plot.isomap using this). * plot.profile.fisherfit: corrected a harmless error detected by checkUsagePackage(). * predict.rda: removed some dead (but heavy) code from type = "response". Version 1.8-6 (May 9, 2007) * Based on devel version 1.9-23. * as.mlm.cca, as.mlm.rda: new functions to refit constrained ordination result (cca, rda, capscale) as a multiple response linear model. You can find influence statistics (Cook's distance, hat values) from the refitted model. You also can find t-values etc., but these have the same bias as in other software and should not be used. * bgdispersal: a new function for dispersal direction in biogeography (Legendre & Legendre 1998, section 13.3.4). Author Pierre Legendre. * designdist: a new function for defining your own dissimilarity index or for estimating beta diversity (Koleff et al., J. Ecol. 72, 367-382; 2003). * isomap: a new function for isometric feature mapping of Tenenbaum et al. (Science 290, 2319-2323; 2000). * screeplot, bstick: new functions to draw screeplots of vegan ordination results with brokenstick lines, and alternative screeplot functions for prcomp and princomp with brokenstick. Author Gavin L. Simpson. * swan: a new function for the degree of absence (Swan 1970, Ecology 51, 89-102). * anova.cca: now refuses to do 'by = "terms"' if the rank of constraints is higher than the rank of the community matrix. * bioenv: gains argument 'partial' to perform partial bioenv. * cca, rda, capscale: can now handle longer expression within 'Condition()' (ordiParseFormula). Used to drop observations with missing values in unused variables (ordiGetData). * goodness.cca, goodness.rda. 'statistic = "distance"' was wrongly implemented. Now refuses to find "distance" in constrained analysis: distances of constrained and unconstrained components do not add up to to distances in unconstrained ordination. * metaMDS (metaMDSdist): gains argument 'distfun' to use other dissimilarity functions than vegdist. * renyiaccum: used a variable that was not defined as an argument. Added support functions persp.renyiaccum and rgl.renyiaccum (Roeland Kindt). * stressplot: R2's renamed to 'non-metric fit' and 'linear fit'. * Doc: Corrected reference to Hurlbert in diversity (thanks to Ralph Grundel). Updated references (varpart, renyiaccum). Removed discussion on t-values in cca from vignettes, because as.mlm.cca now implements those. General cleanup and better utf-8 encoding. Version 1.8-5 (January 11, 2007) * Based on devel version 1.9-12. * no.shared (manifest in metaMDS): prints thousands of lines of debugging info that I forgot to deactive in release. Not fatal, but extremely annoying. * capscale: inertia name as "unknown" if the dissimilarity object does not have a "method" name. Suggested by Roeland Kindt. * DESCRIPTION: license is now explicitly GPL v2 (but not later). Version 1.8-4 (January 8, 2007) * Based on devel version 1.9-10. * cascadeKM: a new function to wrap kmeans and optimality criteria for classification (Sebastien Durand, Pierre Legendre & Marie Helene Ouellette). * renyiaccum: a new function for Renyi (and Hill) accumulation curves (Roeland Kindt). * bioenv: bioenv.formula uses now "na.action = NULL" in 'model.frame', and bioenv.default passes arguments to 'cor' which means that you can set NA treatment in 'cor' using argument "use". * cca, rda: added "..." to formula versions to satisfy tests in R-DEVEL. * cca, rda, capscale: used to fail if called within other functions. Now data always evaluated in the environment of formula using new internal function ordiGetData. * anova.cca: checks that the model has both residual and constrained components or stops with understandable error message (used to stop with incomprehensible error message). * print.summary.cca, print.summary.decorana: have now arguments 'head' and 'tail' to print only a part of species and site scores. Suggested by Gavin Simpson. * metaMDS: checks now that the input data ('comm') is not a 'dist' object (like many users have had). * ordisurf: Does not depend on package 'akima' any longer, but directly finds fitted values in a regular grid using 'predict.gam'. Added pnpoly.c to find which of these values are within the convex hull defined by data. Results also look neater with sparse data now. Added argument 'labcex' passed to 'contour' for changing size of contour labels. Setting 'labcex = 0' will suppress drawing labels (by setting drawlabels = FALSE in 'contour()'). * orditorp: handles now vector arguments of 'col', 'pcol', 'cex', and 'pch'. * rad.zipfbrot: less likely to overflow to NA coefficients during iteration. * renyi: added a plot function, and documented together with renyiaccum() instead of diversity(). * scores.default: Knows now about ade4 objects. Primarily looks for scores scaled by eigenvalues both for sites and species. * specaccum: Added new conditioned method of Colwell et al. with estimated sd based on extrapolated richness (Roeland Kindt). * vegdist.c: More informative warnings with 'method' name (useful with rankindex). * DESCRIPTION: listed 'require()d' packages in the "Suggests:" field to satisfy more anal tests in R-DEVEL. Mention diversity analysis in the "Description:". Version 1.8-3 (Sept 29, 2006) * Based on devel version 1.9-2. * varespec.rda, varechem.rda: saved in binary form, because old ascii form gave warning in R-2.4.0-rc. * vegdist: added Chao index (of Jaccard type) that should take into account missing pairs of species. Checks that Binomial index is non-negative. Identical sites could have dissimilarity of magnitude 1e-17 after some standardizations, but now values <1e-15 are zapped to zero. * estimateR: uses now standard unbiased formulation of Chao. * renyi: should work now (really!). * metaMDS: with zero = "add", zeros now replaced with min(dis[dis>0])/2 (used to be 1E-4) (metaMDSdist). Sets number of tries also when this was not set previously (metaMDSiter) Version 1.8-2 (June 13, 2006) * version 1.8-1 failed test in Windows because of a wrong encoding name. Explicit \enc added for non-ascii words. Kurt Hornik and Uwe Ligges diagnosed this and led me to see the light. * similar to devel version 1.7-97. Version 1.8-1 (June 12, 2006) * Based on devel version 1.7-96. * Pierre Legendre joined the vegan team. * beals: a new function for Beals smoothing. * bioenv: added 'trace' argument. * cca/rda/capscale: accept several 'Condition' elements in the formula. * capscale: capscale(y ~ ., data=...) or expansion of "." on the rhs works now. Documentation recognizes now db-RDA as the real mother method. * scores.cca, summary.cca etc: rewrite so that is cleaner and easier to maintain. User visible changes are scaling by species standard deviation (negative scaling) for 'rda', scaling=0 (no scaling) for all methods and slightly changed output and improved user control in summary. These scalings actually were documented in 1.6-10, although I dropped them just before the release. predict.cca, predict.rda: work now with 'newdata' even when not called with formula. * anova.cca: new argument 'by' for tests of single terms or axes: with by = "terms" performs individual test for constraints, and with by = "axis" a separate sequential test for each axis. New argument 'first' to analyse only the first axis instead of all constrained variation. * intersetcor: new function for the interset correlation or the (weighted) correlation between individual constraints (contrasts) and invidual axes in cca/rda/capscale. (Not recommended.) * decostand: does not automatically convert matrix to a data.frame. NA handling more consistent now (thanks to Tyler Smith for diagnosis). Adds attribute 'decostand' giving the "method". * linestack: now really uses median as the midpoint with the odd number of cases, and does not give superfluous warnings with three or less items. New argument 'labels' to replace the default text in plot. The old argument 'label' renamed to 'side'. However, the function still works with the old syntax, but gives a warning if the old argument 'label' is used for 'side'. Returns invisibly the shifted positions of labels. * metaMDS: 'postMDS' sets now attributes similarly when called independently or within 'metaMDS'. 'metaMDS' forwards arguments to 'postMDS' except 'halfchange'. Change of phrasing in 'print'. Added handling of zero dissimilarities into 'metaMDSdist': either "fail" or "add" 1E-4 into zeros. * mrpp: new function for the multiresponse permutation procedure (MRPP). Code by Henry Stevens (Miami Univ, Oxford, Ohio). * ordiarrows: draws arrowhead only in the last segment. New argument 'startmark' for marking the starting point of the arrow. * ordisurf: new arguments 'main' for the title and 'nlevels' and 'levels' for the number of contour or their values. * orditorp: arguments for text colour and text character expansion changed to standard 'col' and 'cex' from previous 'tcol' and 'tcex'. * procrustes: 'summary' prints now rotation matrix, translation and scale, and honours 'digits'. * prc: new functions for Principal Response Curves (PRC) of van den Brink and ter Braak (Envir. Toxicol. Chem, 18, 138-148; 1999). This is a special rda() model with dedicated summary and plot functions. New data set 'pyrifos' to demonstrate 'prc'. * radfit: added brokenstick as a null model (rad.null), removed rad.veil (as it was a bad idea originally), corrected minor bugs in rad.preempt (which did not fail gracefully). Line colours start from the point colour in plot.radfit.frame. 'print' uses "g" format for coefficients and adds 'digits' argument. Added 'summary.radfit.frame' that simply prints each model. * rankindex: uses now cluster:::daisy when 'grad' includes factors. * spantree: now a method function with 'plot', 'lines' and 'cophenetic' methods. 'lines' replaces 'ordispantree'. The plot has a weird, new way of finding configuration for a spanning tree from cophenetic distances (unpublished). Documented separately. * specaccum: 'plot' honours now 'ylim'. * specpool: Chao richness was wrongly defined, but now uses the biased formula (error introduced in 1.6-5, correct earlier). Failed with zero species or if there were no species that occurred exactly one in the 'pool' (thanks to Emmanuel Castella, Geneve CH, for the bug report). * varpart: new functions for unbiased partitioning of variation by two to four explanatory tables in RDA or linear regression. The author of these functions is Pierre Legendre & co (Univ Montreal). New data sets 'mite', 'mite.env' and 'mite.pcnm' to demonstrate the functions. * vegandocs: new function to display *all* pdf documentation and ChangeLog. This really should be in base R -- this is a kluge to fill the hole. * vegemite: added argument to 'select' a subset of sites. Drops missing species from the table. Prints number of species and number of sites and the used cover scale at the end of the table. Passes arguments (i.e., 'maxabund') to coverscale(). * coverscale: added argument 'maxabund' to 'scale = "log"'. Returns the name of the cover scale as an attribute for vegemite() to print. * vegdist: now first checks input and then transforms (if needed). Thanks to Tyler Smith, * Internal changes: permuted.index acceptes NULL strata as an alternative to missing strata. ordispantreee deprecated. spider.cca removed. * Documentation: general cleanup in help files. New chapter on t-values in cca/rda/capscale in vegan-FAQ. New pdf document on partioning with varpart by Pierre Legendre & co. Non-latin characters now use UTF-8 in documentation. R manual says that you should not use non-latin characters in help files, but that was written by Englishmen. However, this seems to cause distress to some users of a US West Coast OS (Windows), but OK with mainstream OS's (Linux, MacOS). . Version 1.6-10 (September 26, 2005) * Based on devel version 1.7-77. Checked with R 2.1.1 (stable) and R 2.2.0 (alpha). * rda: negative scalings explicitly ignored and treated as corresponding positive values. Function summary.rda used to fail with NA centroids. * permutest.cca & anova.cca: permutation of 'cca' result now re-weights environmental data properly with permuted community weights (this breaks compliance with popular proprietary software). New default method 'direct' that always permutes the data instead of residuals. Now clearly faster basic routines, but re-weighting in 'cca' is costly, and permutations may even be slower than earlier in small data sets. The permutest.cca returns more data: constrained and residual total inertia, degrees of freedom in the input model, and .Random.seed used in iterations. Thanks to Pierre Legendre for pushing me to make this faster. * ordination plot functions: obey now xlim and ylim. * ordination text and points functions: a new argument 'select' that can be used to select a subset of items, and a new argument 'labels' for text used instead of the default row names. * points.cca, text.cca: biplot arrows will be scaled automatically to fit the current graph if 'arrow.mul' is not given. The new behaviour is similar to the default in plot.cca and in plot.envfit. * orditorp: a new "ordination text or points" function to add text or points to an existing plot: adds text if this can be done without overwriting other text labels, and points otherwise. * linestack: a new function to draw labelled one-dimensional diagrams without overwriting the labels (a primitive one, and could easily be improved: submissions are welcome). * ordirgl, orgltext: adapted to changes in rgl package version 0.65. Workaround for older rgl packages, too. * decostand: Added Hellinger transformation. Empty columns and rows become now 0 instead of NaN in most methods, except when the input data contains negative values. Warns on input with negative entries or on output containing NaN. Has now argument 'range.global' for method 'range' based on the code supplied by Tyler Smith. * plot.radfit: puts now legend "topright" in R >= 2.1.0 (which has this keyword). * read.cep: issues a warning if vegan was compiled with gfortran, which has a bug that may corrupt the result. The bug concerns multiline input with T format modifier, and it was corrected in http://gcc.gnu.org/ml/gcc-patches/2005-09/msg00126.html, but still bugs most released versions of gcc. * vegdist: new indices 'raup' and 'binomial'. Method 'raup' implements probabilistic Raup-Crick index and is based on the code submitted by Michael Bedward. Method 'binomial' implements Millar's index, officially published as "Binomial deviance as a dissimilarity measure" (the C code has been in vegan for about two years, but now I tell about it and add the public interface). Method 'mountford' will give NA for any comparison involving an empty site. Warns about empty sites or negative entries with all methods except 'euclidean' and 'manhattan'. * Documentation: added documentation of the cca/rda/capscale result object. Dontruns used more neatly. Version 1.6-9 (April 22, 2005) * Maintenance release: 1.6-8 failed in R 2.1.0 patched and R 2.2.0 devel (works in R 2.1.0 release) due to problems in as.preston. Based on devel version 1.7-62. * as.fisher, as.preston: used table() in a way that failed in R 2.1.0 patched * calibrate.cca: new function to predict or calibrate or bioindicate the values of environmental constraints from community composition (ordination). * decostand: new argument na.rm (defaults FALSE) for ignoring missing values in row, column or matrix standardizations. * vegdist: new argument na.rm (defaults FALSE) for pairwise deletion of missing vaues in dissimilarity calculation. Version 1.6-8 (April 18, 2005) * Based on devel version 1.7-59. Adapted to R 2.1.0 beta. * DESCRIPTION: gives due credit to Roeland Kindt and Bob O'Hara as co-authors. * documentation: updates in capscale, vegdist. vegan-FAQ adapted to changes in Sweave in R 2.1.0. * several methods assumed that input is count data, but silently accepted floating point numbers and gave wrong results. Now they stop with error with non-integer input: fisherfit, prestonfit, prestondistr, rarefy, fisher.alpha, estimateR. * bioenv: uses now 'cor' instead of 'cor.test', and does not give so many superfluous warnings and is marginally faster. Changed printed output, so that gives 'call' instead of names of community and environmental data, since bioenv.formula could not handle these cleanly. * capscale: has now argument 'add' to use an additive constant to all dissimilarities so that all computed eigenvalues are non-negative. This is an argument of underlying 'cmdscale' function, which implements the "Correction method 2" of Legendre & Legendre (1998), p. 434. * decorana: checks now that there are no negative data entries. * dune: cleaner site names. * envfit: 'plot' now automatically scales arrows similarly as 'plot.cca' if 'arrow.mul' is not specified and arrows are added to an old plot. Has now a 'scores' function. * goodness.cca, predict.cca: documented separately. * goodness.metaMDS: new function to assess pointwise goodness of fit in metaMDS or isoMDS. * humpfit: user can now give starting values of parameters. 'summary.humpfit' returns 'cov.unscaled' so that users can apply 'ellipse' function of 'ellipse' package to display approximate confidence ellipses for pairs of parameters (with Normal assumptions). * make.cepnames: No longer duplicates one component names, but 'abbreviate's them to eight characters. * metaMDS: Split to independent metaunits 'metaMDSdist' and 'metaMDSiter'. New function 'metaMDSredist' tries to reconstruct dissimilarity matrices and transformations. 'postMDS' skips halfchange scaling with too few points (with a warning) instead of stopping with an error. Prints now info about 'postMDS' operations. New 'scores' function. Improved 'plot' function with 'display' argument and labelling of axes. Argument 'shrink' to undo expansion of species scores in plot or scores functions. Workaround for a future bug in 'isoMDS' which drops names of points in R 2.1.0. Updates number of 'tries' with 'previous.best'. * ordiplot: has now 'display' argument, so that only species or sites can be plotted. * ordiplot3d: a new function for 3D static ordination diagrams. * ordirgl: new function for dynamic 3D graphics of ordination results. With support functions orglpoints, orgltext, orglsegments and orglspider to add graphical items to dynamic plots. Needs 'rgl' package. * predict.cca, predict.rda: type = "wa" with 'newdata' works now even when some species were removed from the original fit because they were all-zero (missing). Default now to 'model = "CA"' in unconstrained analysis without "CCA" component. * predict.decorana: a new function for 'decorana' results. Similar to 'predict.cca' (but refuses to give impossible results). * procrustes: obeys now 'choices' even when input is a matrix. Plots now projections of rotated axes. New argument 'scores' so that can handle other than "site" scores. * protest: passes now arguments to 'scores' so that now can handle other than "site" scores on more than two dimensions. * rda: handles now species with constant values (typically missing or all zeros). * spenvcor: new function to find the "species -- environment correlation" in contrained ordination (cca, rda, capscale). * stressplot: a new function to plot Shepard diagram for 'metaMDS' or 'isoMDS'. * summary.cca/summary.rda: print now call. * vegemite: can now 'use' 'dendrogram' objects. Version 1.6-7 (Jan 24, 2005) * Based on devel version 1.7-42. * plot.envfit did not plot vectors. Thanks to Roeland Kindt and Ron E. VanNimwegen for bug reports and fixes. * ordisurf obeys now keyword 'display', and '...' will transfer arguments to 'scores'. * ordisegments: obeys now keyword 'display'. * ordigrid: works now. * ordihull, ordiarrows, ordisegments, ordispider, ordiellipse: have a new keyword 'show.groups' to show only specified groups. With the help of this argument it is possible to use different colours and linetypes for each group. Further, it makes possible to plot results of logical comparisons (such as A1 > 4) by setting show.groups = T. Two user requests. * new diagnostic and helper functions for 'cca', 'rda' and 'capscale': 'goodness' to estimate the proportion of inertia accounted for or residuals for sites or species; 'inertcomp' to decompose species and site inertia for conditioned, contrained and residual componets; 'vif.cca' to estimate the variance inflation factors for constraints and conditions; 'fitted' and 'residuals' to approximate data by ordination scores; 'predict' to approximate data or find site or species scores, possibly with 'newdata'; 'coef' to find the regression coefficients. 'alias.cca' is now similar to 'alias.lm' (simplified version of the latter). Version 1.6-6 (Jan 7, 2005) * Based on version 1.7-34, but without still experimental functions predict, fitted, vif & goodness for cca and rda objects. * mantel: implemented partial mantel test (function 'mantel.partial'). Both 'mantel' and 'mantel.partial' should be marginally faster and not give so many superfluous warnings. * plot.envfit: should be more reliable now. A new keyword 'at' to position the bunch of arrows in other places than the origin. Thanks to Roeland Kindt for fixes. * rankindex: Default correlation now "spearman" since the older default ("kendall") was far too slow in large data sets. Should not give so many superfluous warnings. * summary.rda: Site scores were wrong with 'scaling = 3'. Influences 'plot' and 'scores' commands for 'rda' and 'capscale' results with 'scaling = 3'. * vegdist: Issues a warning if 'method = "morisita"' is used with non-integer data. Version 1.6-5 (Oct 12, 2004) * Based on version 1.7-27. Checked with R-1.9.1 (Linux, MacOS X) and R-2.0.0 (Linux, patched version in Windows XP). Passed other tests, but some examples in 'humpfit' failed in Windows XP, and are not run on that platfrom. General cleanup in documentation. Does not 'require(mva)' any longer. * anosim: corrected the equation in docs (function was correct). Thanks to Yong Cao for notifying this. * bioenv.formula: finds now variables from attach'ed data.frames and 'data' need not be specified. * capscale & deviance.rda: capscale was modified so that its result could be handled with step (added a terms component). Function deviance.capscale was deleted so that deviance.rda will be used. A literature reference to AIC in CCA/RDA was added to the documentation. * cca/rda/capscale: Small eigenvalues are made to zero and rank reduced accordingly. Most often influences 'capscale'. * cca/rda/capscale: Now alias constraints that are collinear with other constraints or conditions in partial analysis. New function 'alias.cca' to print aliased contrasts. NB this does not influence the proper ordination results, but only to the selection of biplot scores and centroids displayed. 'summary' no longer gives a redundant warning. * decorana: removes empty species with a warning instead of stopping with error. Still error with empty sites. The behaviour is similar to 'cca'. * envfit (vectorfit, factorfit): Has now a formula interface. Bottlenecks in permutation changed now into C functions. Much faster, in particular 'factorfit' which was 25 times faster in my tests. plot.envfit could drop names (dimensions). Now honours 'scaling' argument in cca/rda/capscale (used to 'scaling = 2' always). * envfit, ordisurf: have now weights parameter 'w'. Weights are used for the results of 'cca' and 'decorana' as default, or they can be supplied by the user. In this way, envfit gives equal results to biplot scores and centroids in 'cca', and ordisurf is consistent with envfit. Both can now access 'lc' scores of 'cca' etc. * estimateR: Abundance-based estimators of extrapolated richness, written by Bob O'Hara . * humpfit: Asesses now the dispersion parameter in non-Poisson models (summary.humpfit). Added a profile method that inherits from profile.glm, so that you can use plot.profile.glm, pairs.profile.glm and confint.profile.glm of MASS for displaying profile and finding the confidence intervals from the profile likelihood. * fisherfit: prints now standard error of the estimate. Added 'profile' and 'confint' methods. * metaMDS: A new function to collect all Peter Minchin's recommendations to run nonmetric multidimensional scaling: (1) adequate data transformation with Wisconsin double and sqrt if needed, (2) use of adequate dissimilarity measure, (3) possible stepacross if needed (this Minchin didn't have), (4) run NMDS with several random starts and stop after finding two similar solutions, (5) scale results with postMDS, and (6) add species scores with wascores. Function has print and plot methods. Function scores.default changed to understand metaMDS. * specpool: Chao is now based on unbiased equation. Standard errors now estimated for Chao, 1st-order jackknife and bootstrap richness, but SE of 2nd-order jackknife still missing. * vegdist: an option for binary indices, since some users believed these are not in vegan, although you can get them with 'decostand'. Version 1.6-4 (June 10, 2004) * Based on 1.7-12. * anova.cca: Changed defaults to beta=0.01 and perm.max=10000. * bioenv: A new function implementing the BIO-ENV procedure of Clarke & Ainsworth (Mar. Ecol. Prog. Ser. 92, 205-219; 1993). The function finds the subset of scaled environmental variables with maximum (rank) correlation with community data. * cca: added ter Braak scaling, a.k.a. Hill scaling, with negative values of `scaling'. This scaling should approximate Hill's non-linear rescaling of `decorana', but it the scaling is linear and does not rescale. The scaling is very simple: the results from corresponding positive scaling are multipiled with sqrt(1/(1-lambda)). * plot.cca: Better heuristics used for the length of biplot arrows, and they are now longer in general. Axes are drawn for biplot arrows also with `text.cca' and `points.cca' functions. * deviance.cca and extractAIC.cca: auxilliary functions which allow automatic model building with `step' or `stepAIC' (MASS) functions in cca and rda. Unfortunately, cca and rda do not have deviance or AIC, and these functions are certainly wrong and dangerous. However, with continuous candidate variables they select the variables in the same order as Canoco. * humpfit: A new family of functions to fit the no-interaction model (Oksanen, J., J. Ecol. 84, 293-295; 1996) to species richness -- biomass data. * vegdist: corrected a bug in Gower index -- range standardization was made to sites, but it should be done to species. Thanks to Brett Melbourne for the bug report. Version 1.6-3 (Mar 22, 2004) * Still based on 1.7-3, but ported some changes from version 1.7-7 (envfit, procrustes). This version was produced to prepare for incompatible changes in coming R-1.9.0. * vegan-FAQ: Does not show the vegan and R versions the documentations were built, because of stupid incompatible change in R-1.9.0 of the future. package.description() function was unnecessarily replaced with packageDescription, and to accomodate recent, present and future versions of R seemed to be too much hassle. * plot.envfit: Added option 'p.max' to display only environmental variables assessed to have P values less or equal to the given limit. * plot.procrustes: added option kind = 0 to draw only axes and functions points.procrustes and lines.procrustes to add points and line segments or arrows to the plot. Version 1.6-2: Based on devel version 1.7-3. * renyi: should work now (again?). * prestondistr: The truncation level was badly chosen. Now default level is set to -1, or log2(-1) = 0.5 which might be the left limit of the first octave. This is now a parameter, leaving the choice as the responsibility of the user. * cca.default: Removes missing species and issues a warning instead of stopping with error. Version 1.6-1: Based on devel version 1.7-1. * Minor maintanenance release to satisfy tests in R-devel. There was a buglet in ordisegments that caused a warning. I had introduced a trick to handle printCoefmat before it was invented to replace print.coefmat, but this failed in R-devel. * Vignettes included in this release. These were only in devel versions of my web pages previously. Version 1.6-0 (Fisher) * Based on devel version 1.5-58. Passes checks with R-1.8.0 and R-1.7.0 and compiles into a Windows binary. Many functions were contributed by Roeland Kindt (Nairobi, Kenya). * BCI: A new data set on tree counts on 1-ha plots in the Barro Colorado Island. Thanks to Roeland Kindt and Richard S. Condit. * capscale: A new function for [partial] constrained analysis of principal coordinates (CAP). * cca, rda: Can now handle cases where the number of constraints is higher than the number of species. * cca, decorana: Find now if data have empty rows or columns. * decostand: Added Chi-square transformation. * distconnected: A new function to find if vegetation data are disconnected below given threshold dissimilarity level. Utility function no.shared gives a logical dissimilarity matrix with values TRUE for cases with no shared species. * fisher.alpha: Should work with large sample sizes now (bug report thanks to Ariel Bergamini). * fisherfit, prestonfit, prestondistr: New functions to fit Fisher's logarithmic series and Preston's log-normal model. * make.cepnames: New utility function to change Latin names into 4+4 character CEP names. * ordicluster, ordispantree: New functions in the ordihull family to overlay a cluster dendrogram or a spanning tree onto an ordination. Weights are now really used with cca and decorana plots. * radfit: New function to fit Ranked Abundance Dominance or Dominance/ Diversity models with maximum likelihood: Pre-emption, log-normal, veiled log-normal, Zipf and Zipf--Mandelbrot models. * rankindex: Can now use stepacross and new dissimilarity indices of vegdist. * rarefy: Can now optionally find SE of rarefied richness. * renyi: A new function to find Rényi diversities or Hill numbers with any scale (thanks to Roeland Kindt). * scores.ordiplot: should be more robust now. * spantree: A new function to find a minimum spanning tree using only dissimilarities below a threshold or disregarding NA dissimilarities. * specaccum: A new function for species accumulation curves. Thanks to Roeland Kindt. * specnumber: A very simple utility function to find species richness. * specpool: New function for extrapolated species richness in a species pool, or for estimating the number of unseen species. * stepacross: New function for estimation of dissimilarities between sites that have no shared species. Implements both flexible shortest paths and their approximation known as extended dissimilarities. * vegdist: New dissimilarity indices Jaccard (finally), Morisita, Horn--Morisita and Mountford. Version 1.4-4 * Based on devel version 1.5-35. * decorana: Finds now eigenvalues from the final solution as ratio of biased weighted variances of site and species scores. The values returned by the legacy Fortran function are called ``decorana values''. * downweight: passes the downweighting fraction as an attribute, and decorana catches and prints the fraction. * wascores: Uses now biased variances for expading WAs and returns the shrinkage factors as an attribute "shrinkage". Shrinkage factors are equal to eigenvalues in CCA when only this one variable is used as constraint. Function `eigengrad' returns only these eigenvalues. * rda summary/plot bugfix: Failed with non-default scaling (1 or 3) when there were no factor constraints. Corrected a statement giving a harmless warning in plot.cca. * ordiplot knows now option type = "text". New simpleminded functions points.ordiplot and text.ordiplot for adding items in an ordiplot graph. * ordiarrows, ordisegments could drop dimensions (when will I learn!) and fail if only one arrow or one segment should be drawn. One argument was missing in a `gl' command in `ordigrid'. Version 1.4-3 (Luova) * Based on devel version 1.5-30 * `cca' and `rda' use canonical expansion of the formula and return the `terms' component. Functions like `terms', `formula' and `update' magically started to work with cca and rda (and eight lines of code would allow `step' and `stepAIC' to work magically in model building... but it's so much magic that I don't trust it). Some of the allowed things are now `mod <- cca(dune ~ . - Use, dune.env)' (all variables but `Use' in dune.env), and `update(mod, . ~ . - Manure)' (remove `Manure' from the previous). * `cca' and `rda' find centroids of factor levels with factor constraints (only with formula interface). These can be accessed with `display="cn"' in `scores', `summary' and `plot'. If `display="cn"' is requested in `plot', biplot arrows are still drawn unless there is a class centroid with the same name: continuous variables are still shown as arrows and ordered factors both as arrows as centroids. * Enhanced user control of many ordination plots. Some accept more graphical parameters (`ordiplot', `plot.procrustes'). New functions `points.cca' and `text.cca' to add these items into CCA/RDA plots (documented separately). * `identify.ordiplot' knows more alternatives, among them `plot.procrustes'. This was helped with new, very generic `scores.ordiplot'. * New functions to add graphical items in ordination diagrams: `ordihull' draws convex hulls for groups, `ordiarrows' draws arrows, `ordisegments' segments, `ordigrid' combines points in to a grid, `ordispider' combines points to their (weighted) centroids or WA scores to the corresponding LC score in cca/rda, `ordiellipse' draws dispersion or confidence ellipses for points. All these take a groups argument for selecting subsets of points. `ordispider' obsoletes `spider.cca' (introduced in the previous release). * Implemented simple ``deshrinking'' of weighted averages in `wascores'. * A new diversity function `fisher.alpha' that estimates the diversity as the alpha parameter of Fisher's log-series. Thanks to Bob O'Hara for the main code. * `summary.decorana' now in canonical form so that printing is done by `print.summary.decorana' and user can intercept and catch the result. Several users had been surprised of the earlier non-canonical behaviour. `summary' knows again the prior weights used in downweighting of rare species (these evaporated in 1.4-0). * rda summary/scores/plot bugfix: Scaling of site scores was wrong with scaling alternatives 1 and 3. * envfit (vectorfit, factorfit) bug fixes: Can now handle single vectors (labelling, permutation). Recognize now `choices' so that the user can select ordination axes. * Checked with released R-1.7.0. Version 1.4-2 Based on devel version 1.5-18 * New functions and data sets: * dune: A new data set -- the classic Dune Meadow data with the environmental data. * ordiplot, identify.ordiplot: New functions to plot "any" ordination result and identify plotted points. Intended to provide similar functionality as `plot', `plotid' and `specid' functions in `labdsv' without name clashes. Functions `plot.cca' and `plot.decorana' return (invisibly) `ordiplot' objects as well, and these can be used by `identify' to label species and sites. * rda: Redundancy Analysis, or optionally, yet another PCA. This is a spin-off from cca(), and it is documented together with cca. The only new functions are rda, rda.default, rda.formula and summary.rda. Otherwise rda uses cca methods which were changed to be aware of rda. * read.cep: A function to read Cornell Ecology Package or CEP formatted files into R. This has been in devel versions since 1.1-1, but it never made to the releases, since this worked only in Linux, but crashed R in Windows. It seemed to work in R-1.6.1 with gcc 3.2 (MinGW) in Windows, so it is included. Treat with caution. * spider.cca: A tiny function that joins each WA score to the corresponding LC score in cca/rda plots. Minor changes: * Checked with R-1.7.0 (unstable devel version, snapshot 2003-02-05) and corrected as needed. * Added symmetric scaling (=3) to alternitves in cca and rda. * Minor improvements and bug fixes in vegemite. Version 1.4-1 (Logan) Based on devel version 1.5-10. New features: * Permutation tests added to envfit (vectorfit, factorfit) and procrustes (called protest). * All permutation tests take now argument strata: If given, permutations made only within strats. Concerns anosim, anova.cca (permutest.cca), mantel, envfit (factorfit, envfit) and protest (in procrustes). * fitted.procrustes(): A new function. * rarefy(): A new function for rarefaction species richness. Other changes: * cca.default(): Handles now NULL matrices X and Z: skips them. * cca.formula(): Knows now cca(X ~ 1) and permforms unconstrained CA, and cca(X ~ ., data) and perfors CCA using all variables in `data' as constraints. Has now na.action=na.fail so that cca crashes more informatively (used to crash mysteriously). A more graceful na.action may come. Assignment "=" corrected to the true blue "<-" (used to crash in old R). * envfit (factorfit, vectorfit): Use `scores' now. Various bugfixes and should work now with single factors or vectors. * plot.envfit(): Options `choices' works now like documented. * ordisurf(): A new name to surf() to avoid name clash with labdsv. * procrustes(): added option `symmetric' for symmetric rotation and goodness of fit statistic. * plot.procrustes(): Keyword `axes' changed to `choices' to be consistent with other functions. * vegemite(): A new name to vegetab. The name was chosen because the output is so compact (and to avoid confusion with function vegtab in labdsv). Function checks now that the cover codes fit in one column and splits the output if it does not fit into used page width. Version 1.4-0 Based on devel version 1.3-19. New functions: * `anosim': Analysis of Similarities. * `cca': [Partial] [Constrained] Correspondence Analysis. This is an alternative to Dray's `CAIV' (package `CoCoAn'). Differences include formula interface, WA scores in addition to LC scores, partial CCA, residual CA after constraints, algorithm based on svd (and much faster), more standard support functions (`plot', `summary', `print'). * `anova.cca' and `permutest.cca': Permutation tests for `cca'. * `envfit': A new wrapper function which calls either `vectorfit' or new `factorfit' function, and `plot.envfit' for easier display of results in graphs. * `mantel': Mantel test for two dissimilarity matrices. * `scores': A generic function to extract scores from `cca', `decorana' or even from some common ordination methods in R. * `surf': Surface fitting for ordination, intended as an alternative to `vectorfit'. * `vegetab': Prints a compact, ordered vegetation table, together with `coverscale' to transform data into compact format. Other changes: * `downweight': directly callable instead of being embedded in `decorana'. Now it can be used with other downweighting thresholds or with other CA's than `decorana', e.g., `cca', `ca', `CAIV'. * `plot.decorana': new keyword `type', removed keyword `tol'. * `vectorfit': centres now ordination before fitting, so it will work with other ordinations than MDS. * Mainly user invisible changes in `plot.decorana', `plot.procrustes', `postMDS', `print.summary.procrustes', `vectorfit', `procrustes'. One of the main changes was that `eqscplot' of `MASS' library was replaced with `plot(..., asp=1)' of standard R (but this is not S-plus compliant). * Edited help files. More examples run from help files. * Tried to improve LabDSV compliance, see http://labdsv.nr.usu.edu/. * Checked with R-1.5.0. However, `log' in diversity not changed into `logb' (yet), although base is specified, because `logb' won't work in R pre-1.5.0. Version 1.2-1 * Checked with R-1.4-0 (frozen snapshot) tools: Documentation and method consistency corrected (summary.decorana.R, decorana.Rd), and file permissions changed. * decorana.Rd: removed dependence on package `multiv' in the example, since it is not a `recommended package' -- replaced with `decorana(..., ira=1)'. Version 1.2-0 Based on experimental version 1.1-6. Doesn't include read.cep() of the experimental version, because the function is certainly unportable to all platforms (works on Red Hat Linux 7.1, but perhaps nowhere else). Major new feature: * decorana(): R port of Mark Hill's DECORANA for Detrended correspondence analysis, with methods print(), summary() and plot(). Minor changes: * postMDS(): finds isoMDS scores and doesn't destroy list structure. * vectorfit: finds isoMDS scores and decorana row scores (which are uncentred, though). * Proof reading in documentation. Version 1.0-3 *`plot.procrustes': selection of axes plotted, improved scaling in graphics, control of axis labels. * `postMDS': added plot to demonstrate half-change scaling. * `procrustes': target can now have lower dimensionality than rotated matrix. Version 1.0-2 * Fixed bugs in documentation. * `plot.procrustes': Fixed passing `...' to graphics functions. Version 1.0-1 * The first public version. vegan/inst/doc/0000755000176200001440000000000013232070306013070 5ustar liggesusersvegan/inst/doc/partitioning.Rnw0000644000176200001440000000520313156750403016277 0ustar liggesusers%\VignetteIndexEntry{Partition of Variation} %% This file rewrites Pierre Legendre's introduction and takes pages %% of Pierre Legendre's pdf documents and puts them together. \documentclass[10pt]{article} \usepackage{vegan} %% vegan setup \usepackage{pdfpages} \setkeys{Gin}{width=0.6\linewidth} \title{Diagrams and Procedures for Partition of Variation} \author{Pierre Legendre} \date{\footnotesize{ processed with vegan \Sexpr{packageDescription("vegan", field="Version")} in \Sexpr{R.version.string} on \today}} \begin{document} %% Sweave document \SweaveOpts{strip.white=true} <>= par(mfrow=c(1,1)) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) library(vegan) labs <- paste("Table", 1:4) cls <- c("hotpink", "skyblue", "orange", "limegreen") @ \maketitle \noindent Diagrams describing the partitions of variation of a response data table by two (Fig.~\ref{fig:part2}), three (Fig.~\ref{fig:part3}) and four tables (Fig.~\ref{fig:part4}) of explanatory variables. The fraction names [a] to [p] in the output of \code{varpart} function follow the notation in these Venn diagrams, and the diagrams were produced using the \code{showvarparts} function. %%%%%%%%%%%%%%% \begin{figure}[!ht] <>= showvarparts(2, bg = cls, Xnames=labs) @ \caption{3 regression/ canonical analyses and 3 subtraction equations are needed to estimate the $4\;(=2^2)$ fractions. [a] and [c] can be tested for significance (3 canonical analyses per permutation). Fraction [b] cannot be tested singly.} \label{fig:part2} \end{figure} %%%%%%%%%%% \begin{figure}[!ht] <>= showvarparts(3, bg = cls, Xnames=labs) @ \caption{7 regression/ canonical analyses and 10 subtraction equations are needed to estimate the $8\;(=2^3)$ fractions. [a] to [c] and subsets containing [a] to [c] can be tested for significance (4 canonical analyses per permutation to test [a] to [c]). Fractions [d] to [g] cannot be tested singly.} \label{fig:part3} \end{figure} %%%%%%%%%%% \begin{figure}[!ht] <>= showvarparts(4, bg = cls, Xnames=labs) @ \caption{15 regression/ canonical analyses and 27 subtraction equations are needed to estimate the $16\;(=2^4)$ fractions. [a] to [d] and subsets containing [a] to [d] can be tested for significance (5 canonical analyses per permutation to test [a] to [d]). Fractions [e] to [o] cannot be tested singly.} \label{fig:part4} \end{figure} \clearpage \setkeys{Gin}{width=\paperwidth} %% Add partitioning models 2-3 and 4. \includepdf[fitpaper=true,pages=-]{varpart23.pdf} \includepdf[fitpaper=true, pages=-]{varpart4.pdf} \end{document} vegan/inst/doc/diversity-vegan.Rnw0000644000176200001440000007732713231354436016730 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Diversity analysis in vegan} \documentclass[a4paper,10pt,twocolumn]{article} \usepackage{vegan} %% vegan setup %% TODO: SSarrhenius, adipart, beals update, betadisper %% expansion (+ permutest), contribdiv, eventstar, multipart, refer to %% FD, check Kindt reference to specaccum, check estimateR ref \title{Vegan: ecological diversity} \author{Jari Oksanen} \date{\footnotesize{ processed with vegan \Sexpr{packageDescription("vegan", field="Version")} in \Sexpr{R.version.string} on \today}} %% need no \usepackage{Sweave} \begin{document} \bibliographystyle{jss} \SweaveOpts{strip.white=true} <>= par(mfrow=c(1,1)) options(width=55) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "> ", "continue" = " ") @ \maketitle \begin{abstract} This document explains diversity related methods in \pkg{vegan}. The methods are briefly described, and the equations used them are given often in more detail than in their help pages. The methods discussed include common diversity indices and rarefaction, families of diversity indices, species abundance models, species accumulation models and beta diversity, extrapolated richness and probability of being a member of the species pool. The document is still incomplete and does not cover all diversity methods in \pkg{vegan}. \end{abstract} \tableofcontents \noindent The \pkg{vegan} package has two major components: multivariate analysis (mainly ordination), and methods for diversity analysis of ecological communities. This document gives an introduction to the latter. Ordination methods are covered in other documents. Many of the diversity functions were written by Roeland Kindt, Bob O'Hara and P{\'e}ter S{\'o}lymos. Most diversity methods assume that data are counts of individuals. The methods are used with other data types, and some people argue that biomass or cover are more adequate than counts of individuals of variable sizes. However, this document mainly uses a data set with counts: stem counts of trees on $1$\,ha plots in the Barro Colorado Island. The following steps make these data available for the document: <<>>= library(vegan) data(BCI) @ \section{Diversity indices} Function \code{diversity} finds the most commonly used diversity indices \citep{Hill73number}: \begin{align} H &= - \sum_{i=1}^S p_i \log_b p_i & \text{Shannon--Weaver}\\ D_1 &= 1 - \sum_{i=1}^S p_i^2 &\text{Simpson}\\ D_2 &= \frac{1}{\sum_{i=1}^S p_i^2} &\text{inverse Simpson}\,, \end{align} where $p_i$ is the proportion of species $i$, and $S$ is the number of species so that $\sum_{i=1}^S p_i = 1$, and $b$ is the base of the logarithm. It is most common to use natural logarithms (and then we mark index as $H'$), but $b=2$ has theoretical justification. The default is to use natural logarithms. Shannon index is calculated with: <<>>= H <- diversity(BCI) @ which finds diversity indices for all sites. \pkg{Vegan} does not have indices for evenness (equitability), but the most common of these, Pielou's evenness $J = H'/\log(S)$ is easily found as: <<>>= J <- H/log(specnumber(BCI)) @ where \code{specnumber} is a simple \pkg{vegan} function to find the numbers of species. \pkg{vegan} also can estimate series of R\'{e}nyi and Tsallis diversities. R{\'e}nyi diversity of order $a$ is \citep{Hill73number}: \begin{equation} H_a = \frac{1}{1-a} \log \sum_{i=1}^S p_i^a \,, \end{equation} and the corresponding Hill number is $N_a = \exp(H_a)$. Many common diversity indices are special cases of Hill numbers: $N_0 = S$, $N_1 = \exp(H')$, $N_2 = D_2$, and $N_\infty = 1/(\max p_i)$. The corresponding R\'{e}nyi diversities are $H_0 = \log(S)$, $H_1 = H'$, $H_2 = - \log(\sum p_i^2)$, and $H_\infty = - \log(\max p_i)$. Tsallis diversity of order $q$ is \citep{Tothmeresz95}: \begin{equation} H_q = \frac{1}{q-1} \left(1 - \sum_{i=1}^S p^q \right) \, . \end{equation} These correspond to common diversity indices: $H_0 = S-1$, $H_1 = H'$, and $H_2 = D_1$, and can be converted to Hill numbers: \begin{equation} N_q = (1 - (q-1) H_q )^\frac{1}{1-q} \, . \end{equation} We select a random subset of five sites for R\'{e}nyi diversities: <<>>= k <- sample(nrow(BCI), 6) R <- renyi(BCI[k,]) @ We can really regard a site more diverse if all of its R\'{e}nyi diversities are higher than in another site. We can inspect this graphically using the standard \code{plot} function for the \code{renyi} result (Fig.~\ref{fig:renyi}). \begin{figure} <>= print(plot(R)) @ \caption{R\'{e}nyi diversities in six randomly selected plots. The plot uses Trellis graphics with a separate panel for each site. The dots show the values for sites, and the lines the extremes and median in the data set.} \label{fig:renyi} \end{figure} Finally, the $\alpha$ parameter of Fisher's log-series can be used as a diversity index \citep{FisherEtal43}: <<>>= alpha <- fisher.alpha(BCI) @ \section{Rarefaction} Species richness increases with sample size, and differences in richness actually may be caused by differences in sample size. To solve this problem, we may try to rarefy species richness to the same number of individuals. Expected number of species in a community rarefied from $N$ to $n$ individuals is \citep{Hurlbert71}: \begin{equation} \label{eq:rare} \hat S_n = \sum_{i=1}^S (1 - q_i)\,, \quad\text{where } q_i = \frac{{N-x_i \choose n}}{{N \choose n}} \,. \end{equation} Here $x_i$ is the count of species $i$, and ${N \choose n}$ is the binomial coefficient, or the number of ways we can choose $n$ from $N$, and $q_i$ give the probabilities that species $i$ does \emph{not} occur in a sample of size $n$. This is positive only when $N-x_i \ge n$, but for other cases $q_i = 0$ or the species is sure to occur in the sample. The variance of rarefied richness is \citep{HeckEtal75}: \begin{multline} \label{eq:rarevar} s^2 = q_i (1-q_i) \\ + 2 \sum_{i=1}^S \sum_{j>i} \left[ \frac{{N- x_i - x_j \choose n}}{ {N \choose n}} - q_i q_j\right] \,. \end{multline} Equation~\ref{eq:rarevar} actually is of the same form as the variance of sum of correlated variables: \begin{equation} \VAR \left(\sum x_i \right) = \sum \VAR (x_i) + 2 \sum_{i=1}^S \sum_{j>i} \COV (x_i, x_j) \,. \end{equation} The number of stems per hectare varies in our data set: <<>>= quantile(rowSums(BCI)) @ To express richness for the same number of individuals, we can use: <<>>= Srar <- rarefy(BCI, min(rowSums(BCI))) @ Rarefaction curves often are seen as an objective solution for comparing species richness with different sample sizes. However, rank orders typically differ among different rarefaction sample sizes, rarefaction curves can cross. As an extreme case we may rarefy sample size to two individuals: <<>>= S2 <- rarefy(BCI, 2) @ This will not give equal rank order with the previous rarefaction richness: <<>>= all(rank(Srar) == rank(S2)) @ Moreover, the rarefied richness for two individuals is a finite sample variant of Simpson's diversity index \citep{Hurlbert71}\,--\,or more precisely of $D_1 + 1$, and these two are almost identical in BCI: <<>>= range(diversity(BCI, "simp") - (S2 -1)) @ Rarefaction is sometimes presented as an ecologically meaningful alternative to dubious diversity indices \citep{Hurlbert71}, but the differences really seem to be small. \section{Taxonomic and functional diversity} Simple diversity indices only consider species identity: all different species are equally different. In contrast, taxonomic and functional diversity indices judge the differences of species. Taxonomic and functional diversities are used in different fields of science, but they really have very similar reasoning, and either could be used either with taxonomic or functional traits of species. \subsection{Taxonomic diversity: average distance of traits} The two basic indices are called taxonomic diversity $\Delta$ and taxonomic distinctness $\Delta^*$ \citep{ClarkeWarwick98}: \begin{align} \Delta &= \frac{\sum \sum_{i>= data(dune) data(dune.taxon) taxdis <- taxa2dist(dune.taxon, varstep=TRUE) mod <- taxondive(dune, taxdis) @ \begin{figure} <>= plot(mod) @ \caption{Taxonomic diversity $\Delta^+$ for the dune meadow data. The points are diversity values of single sites, and the funnel is their approximate confidence intervals ($2 \times$ standard error).} \label{fig:taxondive} \end{figure} \subsection{Functional diversity: the height of trait tree} In taxonomic diversity the primary data were taxonomic trees which were transformed to pairwise distances among species. In functional diversity the primary data are species traits which are translated to pairwise distances among species and then to clustering trees of species traits. The argument for using trees is that in this way a single deviant species will have a small influence, since its difference is evaluated only once instead of evaluating its distance to all other species \citep{PetcheyGaston06}. Function \code{treedive} implements functional diversity defined as the total branch length in a trait dendrogram connecting all species, but excluding the unnecessary root segments of the tree \citep{PetcheyGaston02, PetcheyGaston06}. The example uses the taxonomic distances of the previous chapter. These are first converted to a hierarchic clustering (which actually were their original form before \code{taxa2dist} converted them into distances) <<>>= tr <- hclust(taxdis, "aver") mod <- treedive(dune, tr) @ \section{Species abundance models} Diversity indices may be regarded as variance measures of species abundance distribution. We may wish to inspect abundance distributions more directly. \pkg{Vegan} has functions for Fisher's log-series and Preston's log-normal models, and in addition several models for species abundance distribution. \subsection{Fisher and Preston} In Fisher's log-series, the expected number of species $\hat f$ with $n$ individuals is \citep{FisherEtal43}: \begin{equation} \hat f_n = \frac{\alpha x^n}{n} \,, \end{equation} where $\alpha$ is the diversity parameter, and $x$ is a nuisance parameter defined by $\alpha$ and total number of individuals $N$ in the site, $x = N/(N-\alpha)$. Fisher's log-series for a randomly selected plot is (Fig.~\ref{fig:fisher}): <<>>= k <- sample(nrow(BCI), 1) fish <- fisherfit(BCI[k,]) fish @ \begin{figure} <>= plot(fish) @ \caption{Fisher's log-series fitted to one randomly selected site (\Sexpr{k}).} \label{fig:fisher} \end{figure} We already saw $\alpha$ as a diversity index. Preston's log-normal model is the main challenger to Fisher's log-series \citep{Preston48}. Instead of plotting species by frequencies, it bins species into frequency classes of increasing sizes. As a result, upper bins with high range of frequencies become more common, and sometimes the result looks similar to Gaussian distribution truncated at the left. There are two alternative functions for the log-normal model: \code{prestonfit} and \code{prestondistr}. Function \code{prestonfit} uses traditionally binning approach, and is burdened with arbitrary choices of binning limits and treatment of ties. It seems that Preston split ties between adjacent octaves: only half of the species observed once were in the first octave, and half were transferred to the next octave, and the same for all species at the octave limits occurring 2, 4, 8, 16\ldots times \citep{WilliamsonGaston05}. Function \code{prestonfit} can either split the ties or keep all limit cases in the lower octave. Function \code{prestondistr} directly maximizes truncated log-normal likelihood without binning data, and it is the recommended alternative. Log-normal models usually fit poorly to the BCI data, but here our random plot (number \Sexpr{k}): <<>>= prestondistr(BCI[k,]) @ \subsection{Ranked abundance distribution} An alternative approach to species abundance distribution is to plot logarithmic abundances in decreasing order, or against ranks of species \citep{Whittaker65}. These are known as ranked abundance distribution curves, species abundance curves, dominance--diversity curves or Whittaker plots. Function \code{radfit} fits some of the most popular models \citep{Bastow91} using maximum likelihood estimation: \begin{align} \hat a_r &= \frac{N}{S} \sum_{k=r}^S \frac{1}{k} &\text{brokenstick}\\ \hat a_r &= N \alpha (1-\alpha)^{r-1} & \text{preemption} \\ \hat a_r &= \exp \left[\log (\mu) + \log (\sigma) \Phi \right] &\text{log-normal}\\ \hat a_r &= N \hat p_1 r^\gamma &\text{Zipf}\\ \hat a_r &= N c (r + \beta)^\gamma &\text{Zipf--Mandelbrot} \end{align} In all these, $\hat a_r$ is the expected abundance of species at rank $r$, $S$ is the number of species, $N$ is the number of individuals, $\Phi$ is a standard normal function, $\hat p_1$ is the estimated proportion of the most abundant species, and $\alpha$, $\mu$, $\sigma$, $\gamma$, $\beta$ and $c$ are the estimated parameters in each model. It is customary to define the models for proportions $p_r$ instead of abundances $a_r$, but there is no reason for this, and \code{radfit} is able to work with the original abundance data. We have count data, and the default Poisson error looks appropriate, and our example data set gives (Fig.~\ref{fig:rad}): <<>>= rad <- radfit(BCI[k,]) rad @ \begin{figure} <>= print(radlattice(rad)) @ \caption{Ranked abundance distribution models for a random plot (no. \Sexpr{k}). The best model has the lowest \textsc{aic}.} \label{fig:rad} \end{figure} Function \code{radfit} compares the models using alternatively Akaike's or Schwartz's Bayesian information criteria. These are based on log-likelihood, but penalized by the number of estimated parameters. The penalty per parameter is $2$ in \textsc{aic}, and $\log S$ in \textsc{bic}. Brokenstick is regarded as a null model and has no estimated parameters in \pkg{vegan}. Preemption model has one estimated parameter ($\alpha$), log-normal and Zipf models two ($\mu, \sigma$, or $\hat p_1, \gamma$, resp.), and Zipf--Mandelbrot model has three ($c, \beta, \gamma$). Function \code{radfit} also works with data frames, and fits models for each site. It is curious that log-normal model rarely is the choice, although it generally is regarded as the canonical model, in particular in data sets like Barro Colorado tropical forests. \section{Species accumulation and beta diversity} Species accumulation models and species pool models study collections of sites, and their species richness, or try to estimate the number of unseen species. \subsection{Species accumulation models} Species accumulation models are similar to rarefaction: they study the accumulation of species when the number of sites increases. There are several alternative methods, including accumulating sites in the order they happen to be, and repeated accumulation in random order. In addition, there are three analytic models. Rarefaction pools individuals together, and applies rarefaction equation (\ref{eq:rare}) to these individuals. Kindt's exact accumulator resembles rarefaction \citep{UglandEtal03}: \begin{multline} \label{eq:kindt} \hat S_n = \sum_{i=1}^S (1 - p_i), \,\quad \text{where } p_i = \frac{{N- f_i \choose n}}{{N \choose n}} \,, \end{multline} and $f_i$ is the frequency of species $i$. Approximate variance estimator is: \begin{multline} \label{eq:kindtvar} s^2 = p_i (1 - p_i) \\ + 2 \sum_{i=1}^S \sum_{j>i} \left( r_{ij} \sqrt{p_i(1-p_i)} \sqrt{p_j (1-p_j)}\right) \,, \end{multline} where $r_{ij}$ is the correlation coefficient between species $i$ and $j$. Both of these are unpublished: eq.~\ref{eq:kindt} was developed by Roeland Kindt, and eq.~\ref{eq:kindtvar} by Jari Oksanen. The third analytic method was suggested by \citet{Coleman82}: \begin{equation} \label{eq:cole} S_n = \sum_{i=1}^S (1 - p_i), \quad \text{where } p_i = \left(1 - \frac{1}{n}\right)^{f_i} \,, \end{equation} and the suggested variance is $s^2 = p_i (1-p_i)$ which ignores the covariance component. In addition, eq.~\ref{eq:cole} does not properly handle sampling without replacement and underestimates the species accumulation curve. The recommended is Kindt's exact method (Fig.~\ref{fig:sac}): <>= sac <- specaccum(BCI) plot(sac, ci.type="polygon", ci.col="yellow") @ \begin{figure} <>= <> @ \caption{Species accumulation curve for the BCI data; exact method.} \label{fig:sac} \end{figure} \subsection{Beta diversity} \citet{Whittaker60} divided diversity into various components. The best known are diversity in one spot that he called alpha diversity, and the diversity along gradients that he called beta diversity. The basic diversity indices are indices of alpha diversity. Beta diversity should be studied with respect to gradients \citep{Whittaker60}, but almost everybody understand that as a measure of general heterogeneity \citep{Tuomisto10a, Tuomisto10b}: how many more species do you have in a collection of sites compared to an average site. The best known index of beta diversity is based on the ratio of total number of species in a collection of sites $S$ and the average richness per one site $\bar \alpha$ \citep{Tuomisto10a}: \begin{equation} \label{eq:beta} \beta = S/\bar \alpha - 1 \,. \end{equation} Subtraction of one means that $\beta = 0$ when there are no excess species or no heterogeneity between sites. For this index, no specific functions are needed, but this index can be easily found with the help of \pkg{vegan} function \code{specnumber}: <<>>= ncol(BCI)/mean(specnumber(BCI)) - 1 @ The index of eq.~\ref{eq:beta} is problematic because $S$ increases with the number of sites even when sites are all subsets of the same community. \citet{Whittaker60} noticed this, and suggested the index to be found from pairwise comparison of sites. If the number of shared species in two sites is $a$, and the numbers of species unique to each site are $b$ and $c$, then $\bar \alpha = (2a + b + c)/2$ and $S = a+b+c$, and index~\ref{eq:beta} can be expressed as: \begin{equation} \label{eq:betabray} \beta = \frac{a+b+c}{(2a+b+c)/2} - 1 = \frac{b+c}{2a+b+c} \,. \end{equation} This is the S{\o}rensen index of dissimilarity, and it can be found for all sites using \pkg{vegan} function \code{vegdist} with binary data: <<>>= beta <- vegdist(BCI, binary=TRUE) mean(beta) @ There are many other definitions of beta diversity in addition to eq.~\ref{eq:beta}. All commonly used indices can be found using \code{betadiver} \citep{KoleffEtal03}. The indices in \code{betadiver} can be referred to by subscript name, or index number: <<>>= betadiver(help=TRUE) @ Some of these indices are duplicates, and many of them are well known dissimilarity indices. One of the more interesting indices is based on the Arrhenius species--area model \begin{equation} \label{eq:arrhenius} \hat S = c X^z\,, \end{equation} where $X$ is the area (size) of the patch or site, and $c$ and $z$ are parameters. Parameter $c$ is uninteresting, but $z$ gives the steepness of the species area curve and is a measure of beta diversity. In islands typically $z \approx 0.3$. This kind of islands can be regarded as subsets of the same community, indicating that we really should talk about gradient differences if $z \gtrapprox 0.3$. We can find the value of $z$ for a pair of plots using function \code{betadiver}: <<>>= z <- betadiver(BCI, "z") quantile(z) @ The size $X$ and parameter $c$ cancel out, and the index gives the estimate $z$ for any pair of sites. Function \code{betadisper} can be used to analyse beta diversities with respect to classes or factors \citep{Anderson06, AndersonEtal06}. There is no such classification available for the Barro Colorado Island data, and the example studies beta diversities in the management classes of the dune meadows (Fig.~\ref{fig:betadisper}): <<>>= data(dune) data(dune.env) z <- betadiver(dune, "z") mod <- with(dune.env, betadisper(z, Management)) mod @ \begin{figure} <>= boxplot(mod) @ \caption{Box plots of beta diversity measured as the average steepness ($z$) of the species area curve in the Arrhenius model $S = cX^z$ in Management classes of dune meadows.} \label{fig:betadisper} \end{figure} \section{Species pool} \subsection{Number of unseen species} Species accumulation models indicate that not all species were seen in any site. These unseen species also belong to the species pool. Functions \code{specpool} and \code{estimateR} implement some methods of estimating the number of unseen species. Function \code{specpool} studies a collection of sites, and \code{estimateR} works with counts of individuals, and can be used with a single site. Both functions assume that the number of unseen species is related to the number of rare species, or species seen only once or twice. The incidence-based functions group species by their number of occurrences $f_i = f_0, f_1, \ldots, f_N$, where $f$ is the number of species occuring in exactly $i$ sites in the data: $f_N$ is the number of species occurring on every $N$ site, $f_1$ the number of species occurring once, and $f_0$ the number of species in the species pool but not found in the sample. The total number of species in the pool $S_p$ is \begin{equation} S_p = \sum_{i=0}^N f_i = f_0+ S_o \,, \end{equation} where $S_o = \sum_{i>0} f_i$ is the observed number of species. The sampling proportion $i/N$ is an estimate for the commonness of the species in the community. When species is present in the community but not in the sample, $i=0$ is an obvious under-estimate, and consequently, for values $i>0$ the species commonness is over-estimated \citep{Good53}. The models for the pool size estimate the number of species missing in the sample $f_0$. Function \code{specpool} implements the following models to estimate the number of missing species $f_0$. Chao estimator is \citep{Chao87, ChiuEtal14}: \begin{equation} \label{eq:chao} \hat f_0 = \begin{cases} \frac{f_1^2}{2 f_2} \frac{N-1}{N} &\text{if } f_2 > 0 \\ \frac{f_1 (f_1 -1)}{2} \frac{N-1}{N} & \text{if } f_2 = 0 \,. \end{cases} \end{equation} The latter case for $f_2=0$ is known as the bias-corrected form. \citet{ChiuEtal14} introduced the small-sample correction term $\frac{N}{N-1}$, but it was not originally used \citep{Chao87}. The first and second order jackknife estimators are \citep{SmithVanBelle84}: \begin{align} \hat f_0 &= f_1 \frac{N-1}{N} \\ \hat f_0 & = f_1 \frac{2N-3}{N} + f_2 \frac{(N-2)^2}{N(N-1)} \,. \end{align} The boostrap estimator is \citep{SmithVanBelle84}: \begin{equation} \hat f_0 = \sum_{i=1}^{S_o} (1-p_i)^N \,. \end{equation} The idea in jackknife seems to be that we missed about as many species as we saw only once, and the idea in bootstrap that if we repeat sampling (with replacement) from the same data, we miss as many species as we missed originally. The variance estimaters only concern the estimated number of missing species $\hat f_0$, although they are often expressed as they would apply to the pool size $S_p$; this is only true if we assume that $\VAR(S_o) = 0$. The variance of the Chao estimate is \citep{ChiuEtal14}: \begin{multline} \label{eq:var-chao-basic} \VAR(\hat f_0) = f_1 \left(A^2 \frac{G^3}{4} + A^2 G^2 + A \frac{G}{2} \right),\\ \text{where } A = \frac{N-1}{N}\;\text{and } G = \frac{f_1}{f_2} \,. \end{multline} %% The variance of bias-corrected Chao estimate can be approximated by %% replacing the terms of eq.~\ref{eq:var-chao-basic} with the %% corresponding terms of the bias-correcter form of in eq.~\ref{eq:chao}: %% \begin{multline} %% \label{eq:var-chao-bc} %% s^2 = A \frac{f_1(f_1-1)}{2} + A^2 \frac{f_1(2 f_1+1)^2}{(f_2+1)^2}\\ %% + A^2 \frac{f_1^2 f_2 (f_1 -1)^2}{4 (f_2 + 1)^4} %% \end{multline} For the bias-corrected form of eq.~\ref{eq:chao} (case $f_2 = 0$), the variance is \citep[who omit small-sample correction in some terms]{ChiuEtal14}: \begin{multline} \label{eq:var-chao-bc0} \VAR(\hat f_0) = \tfrac{1}{4} A^2 f_1 (2f_1 -1)^2 + \tfrac{1}{2} A f_1 (f_1-1) \\- \tfrac{1}{4}A^2 \frac{f_1^4}{S_p} \,. \end{multline} The variance of the first-order jackknife is based on the number of ``singletons'' $r$ (species occurring only once in the data) in sample plots \citep{SmithVanBelle84}: \begin{equation} \VAR(\hat f_0) = \left(\sum_{i=1}^N r_i^2 - \frac{f_1}{N}\right) \frac{N-1}{N} \,. \end{equation} Variance of the second-order jackknife is not evaluated in \code{specpool} (but contributions are welcome). The variance of bootstrap estimator is\citep{SmithVanBelle84}: \begin{multline} \VAR(\hat f_0) = \sum_{i=1}^{S_o} q_i (1-q_i) \\ +2 \sum_{i \neq j}^{S_o} \left[(Z_{ij}/N)^N - q_i q_j \right] \\ \text{where } q_i = (1-p_i)^N \, , \end{multline} and $Z_{ij}$ is the number of sites where both species are absent. The extrapolated richness values for the whole BCI data are: <<>>= specpool(BCI) @ If the estimation of pool size really works, we should get the same values of estimated richness if we take a random subset of a half of the plots (but this is rarely true): <<>>= s <- sample(nrow(BCI), 25) specpool(BCI[s,]) @ \subsection{Pool size from a single site} The \code{specpool} function needs a collection of sites, but there are some methods that estimate the number of unseen species for each single site. These functions need counts of individuals, and species seen only once or twice, or other rare species, take the place of species with low frequencies. Function \code{estimateR} implements two of these methods: <<>>= estimateR(BCI[k,]) @ In abundance based models $a_i$ denotes the number of species with $i$ individuals, and takes the place of $f_i$ of previous models. Chao's method is similar as the bias-corrected model eq.~\ref{eq:chao} \citep{Chao87, ChiuEtal14}: \begin{equation} \label{eq:chao-bc} S_p = S_o + \frac{a_1 (a_1 - 1)}{2 (a_2 + 1)}\,. \end{equation} When $f_2=0$, eq.~\ref{eq:chao-bc} reduces to the bias-corrected form of eq.~\ref{eq:chao}, but quantitative estimators are based on abundances and do not use small-sample correction. This is not usually needed because sample sizes are total numbers of individuals, and these are usually high, unlike in frequency based models, where the sample size is the number of sites \citep{ChiuEtal14}. A commonly used approximate variance estimator of eq.~\ref{eq:chao-bc} is: \begin{multline} \label{eq:var-chao-bc} s^2 = \frac{a_1(a_1-1)}{2} + \frac{a_1(2 a_1+1)^2}{(a_2+1)^2}\\ + \frac{a_1^2 a_2 (a_1 -1)^2}{4 (a_2 + 1)^4} \,. \end{multline} However, \pkg{vegan} does not use this, but instead the following more exact form which was directly derived from eq.~\ref{eq:chao-bc} following \citet[web appendix]{ChiuEtal14}: \begin{multline} s^2 = \frac{1}{4} \frac{1}{(a_2+1)^4 S_p} [a_1 (S_p a_1^3 a_2 + 4 S_p a_1^2 a_2^2 \\+ 2 S_p a_1 a_2^3 + 6 S_p a_1^2 a_2 + 2 S_p a_1 a_2^2 -2 S_p a_2^3 \\+ 4 S_p a_1^2 + S_p a_1 a_2 -5 S_p a_2^2 - a_1^3 - 2 a_1^2 a_2\\ - a_1 a_2^2 - 2 S_p a_1 - 4 S_p a_2 - S_p ) ]\,. \end{multline} The variance estimators only concern the number of unseen species like previously. The \textsc{ace} is estimator is defined as \citep{OHara05}: \begin{equation} \begin{split} S_p &= S_\mathrm{abund} + \frac{S_\mathrm{rare}}{C_\mathrm{ACE}} + \frac{a_1}{C_\mathrm{ACE}} \gamma^2\, , \quad \text{where}\\ C_\mathrm{ACE} &= 1 - \frac{a_1}{N_\mathrm{rare}}\\ \gamma^2 &= \frac{S_\mathrm{rare}}{C_\mathrm{ACE}} \sum_{i=1}^{10} i (i-1) a_1 \frac{N_\mathrm{rare} - 1}{N_\mathrm{rare}}\,. \end{split} \end{equation} Now $a_1$ takes the place of $f_1$ above, and means the number of species with only one individual. Here $S_\mathrm{abund}$ and $S_\mathrm{rare}$ are the numbers of species of abundant and rare species, with an arbitrary upper limit of 10 individuals for a rare species, and $N_\mathrm{rare}$ is the total number of individuals in rare species. The variance estimator uses iterative solution, and it is best interpreted from the source code or following \citet{OHara05}. The pool size is estimated separately for each site, but if input is a data frame, each site will be analysed. If log-normal abundance model is appropriate, it can be used to estimate the pool size. Log-normal model has a finite number of species which can be found integrating the log-normal: \begin{equation} S_p = S_\mu \sigma \sqrt{2 \pi} \,, \end{equation} where $S_\mu$ is the modal height or the expected number of species at maximum (at $\mu$), and $\sigma$ is the width. Function \code{veiledspec} estimates this integral from a model fitted either with \code{prestondistr} or \code{prestonfit}, and fits the latter if raw site data are given. Log-normal model may fit poorly, but we can try: <<>>= veiledspec(prestondistr(BCI[k,])) veiledspec(BCI[k,]) @ \subsection{Probability of pool membership} Beals smoothing was originally suggested as a tool of regularizing data for ordination. It regularizes data too strongly, but it has been suggested as a method of estimating which of the missing species could occur in a site, or which sites are suitable for a species. The probability for each species at each site is assessed from other species occurring on the site. Function \code{beals} implement Beals smoothing \citep{McCune87, DeCaceresLegendre08}: <<>>= smo <- beals(BCI) @ We may see how the estimated probability of occurrence and observed numbers of stems relate in one of the more familiar species. We study only one species, and to avoid circular reasoning we do not include the target species in the smoothing (Fig.~\ref{fig:beals}): <>= j <- which(colnames(BCI) == "Ceiba.pentandra") plot(beals(BCI, species=j, include=FALSE), BCI[,j], ylab="Occurrence", main="Ceiba pentandra", xlab="Probability of occurrence") @ \begin{figure} <>= <> @ \caption{Beals smoothing for \emph{Ceiba pentandra}.} \label{fig:beals} \end{figure} \bibliography{vegan} \end{document} vegan/inst/doc/FAQ-vegan.Rmd0000644000176200001440000010040313231354436015247 0ustar liggesusers **vegan** FAQ ============= This document contains answers to some of the most frequently asked questions about R package **vegan**. > This work is licensed under the Creative Commons Attribution 3.0 > License. To view a copy of this license, visit > or send a letter to > Creative Commons, 543 Howard Street, 5th Floor, San Francisco, > California, 94105, USA. > > Copyright © 2008-2016 vegan development team ------------------------------------------------------------------------ Introduction ------------ ------------------------------------------------------------------------ ### What is **vegan**? **Vegan** is an R package for community ecologists. It contains the most popular methods of multivariate analysis needed in analysing ecological communities, and tools for diversity analysis, and other potentially useful functions. **Vegan** is not self-contained but it must be run under R statistical environment, and it also depends on many other R packages. **Vegan** is [free software](http://www.gnu.org/philosophy/free-sw.html) and distributed under [GPL2 license](http://www.gnu.org/licenses/gpl.html). ------------------------------------------------------------------------ ### What is R? R is a system for statistical computation and graphics. It consists of a language plus a run-time environment with graphics, a debugger, access to certain system functions, and the ability to run programs stored in script files. R has a home page at . It is [free software](http://www.gnu.org/philosophy/free-sw.html) distributed under a GNU-style [copyleft](http://www.gnu.org/copyleft/copyleft.html), and an official part of the [GNU](http://www.gnu.org/) project (“GNU S”). ------------------------------------------------------------------------ ### How to obtain **vegan** and R? Both R and latest release version of **vegan** can be obtained through [CRAN](https://cran.r-project.org). Unstable development version of **vegan** can be obtained through [GitHub](https://github.com/vegandevs/vegan). Formerly **vegan** was developed in [R-Forge](http://r-forge.r-project.org/projects/vegan/), but after moving to [GitHub](https://github.com/vegandevs/vegan) the R-Forge repository may be out of date. ------------------------------------------------------------------------ ### What R packages **vegan** depends on? **Vegan** depends on the **permute** package which will provide advanced and flexible permutation routines for **vegan**. The **permute** package is developed together with **vegan** in [GitHub](https://github.com/gavinsimpson/permute). Some individual **vegan** functions depend on packages **MASS**, **mgcv**, **parallel**, **cluster**, **lattice** and **tcltk**. These all are base or recommended R packages that should be available in every R installation. **Vegan** declares these as suggested or imported packages, and you can install **vegan** and use most of its functions without these packages. **Vegan** is accompanied with a supporting package **vegan3d** for three-dimensional and dynamic plotting. The **vegan3d** package needs non-standard packages **rgl** and **scatterplot3d**. ------------------------------------------------------------------------ ### What other packages are available for ecologists? CRAN [Task Views](https://cran.r-project.org/web/views/) include entries like `Environmetrics`, `Multivariate` and `Spatial` that describe several useful packages and functions. If you install R package **ctv**, you can inspect Task Views from your R session, and automatically install sets of most important packages. ------------------------------------------------------------------------ ### What other documentation is available for **vegan**? **Vegan** is a fully documented R package with standard help pages. These are the most authoritative sources of documentation (and as a last resource you can use the force and the read the source, as **vegan** is open source). **Vegan** package ships with other documents which can be read with `browseVignettes("vegan")` command. The documents included in the **vegan** package are - **Vegan** `NEWS` - This document (`FAQ-vegan`). - Short introduction to basic ordination methods in **vegan** (`intro-vegan`). - Introduction to diversity methods in **vegan** (`diversity-vegan`). - Discussion on design decisions in **vegan** (`decision-vegan`). - Description of variance partition procedures in function `varpart` (`partitioning`). Web documents outside the package include: - : **vegan** homepage. - : **vegan** tutorial. ------------------------------------------------------------------------ ### Is there a Graphical User Interface (GUI) for **vegan**? Roeland Kindt has made package **BiodiversityR** which provides a GUI for **vegan**. The package is available at [CRAN](https://cran.r-project.org/package=BiodiversityR). It is not a mere GUI for **vegan**, but adds some new functions and complements **vegan** functions in order to provide a workbench for biodiversity analysis. You can install **BiodiversityR** using `install.packages("BiodiversityR")` or graphical package management menu in R. The GUI works on Windows, MacOS X and Linux. ------------------------------------------------------------------------ ### How to cite **vegan**? Use command `citation("vegan")` in R to see the recommended citation to be used in publications. ------------------------------------------------------------------------ ### How to build **vegan** from sources? In general, you do not need to build **vegan** from sources, but binary builds of release versions are available through [CRAN](https://cran.r-project.org/) for Windows and MacOS X. If you use some other operating systems, you may have to use source packages. **Vegan** is a standard R package, and can be built like instructed in R documentation. **Vegan** contains source files in C and FORTRAN, and you need appropriate compilers (which may need more work in Windows and MacOS X). ------------------------------------------------------------------------ ### Are there binaries for devel versions? [R-Forge](http://r-forge.r-project.org/projects/vegan/) runs daily tests on the devel package, and if passed, it builds source package together with Windows binaries. However, the R-Forge may be out of date, because **vegan** is mainly developed in [GitHub](https://github.com/vegandevs/vegan). You can install R-Forge packages within R with command `install.packages("vegan", repos="http://r-forge.r-project.org/")`. If you use GUI menu entry, you must select or define the R-Forge repository. ------------------------------------------------------------------------ ### How to report a bug in **vegan**? If you think you have found a bug in **vegan**, you should report it to **vegan** maintainers or developers. The preferred forum to report bugs is [GitHub](https://github.com/vegandevs/vegan/issues). The bug report should be so detailed that the bug can be replicated and corrected. Preferably, you should send an example that causes a bug. If it needs a data set that is not available in R, you should send a minimal data set as well. You also should paste the output or error message in your message. You also should specify which version of **vegan** you used. Bug reports are welcome: they are the only way to make **vegan** non-buggy. Please note that you shall not send bug reports to R mailing lists, since **vegan** is not a standard R package. ------------------------------------------------------------------------ ### Is it a bug or a feature? It is not necessarily a bug if some function gives different results than you expect: That may be a deliberate design decision. It may be useful to check the documentation of the function to see what was the intended behaviour. It may also happen that function has an argument to switch the behaviour to match your expectation. For instance, function `vegdist` always calculates quantitative indices (when this is possible). If you expect it to calculate a binary index, you should use argument `binary = TRUE`. ------------------------------------------------------------------------ ### Can I contribute to **vegan**? **Vegan** is dependent on user contribution. All feedback is welcome. If you have problems with **vegan**, it may be as simple as incomplete documentation, and we shall do our best to improve the documents. Feature requests also are welcome, but they are not necessarily fulfilled. A new feature will be added if it is easy to do and it looks useful, or if you submit code. If you can write code yourself, the best forum to contribute to vegan is [GitHub](https://github.com/vegandevs/vegan). ------------------------------------------------------------------------ Ordination ---------- ------------------------------------------------------------------------ ### I have only numeric and positive data but **vegan** still complains You are wrong! Computers are painfully pedantic, and if they find non-numeric or negative data entries, you really have them. Check your data. Most common reasons for non-numeric data are that row names were read as a non-numeric variable instead of being used as row names (check argument `row.names` in reading the data), or that the column names were interpreted as data (check argument `header = TRUE` in reading the data). Another common reason is that you had empty cells in your input data, and these were interpreted as missing values. ------------------------------------------------------------------------ ### Can I analyse binary or cover class data? Yes. Most **vegan** methods can handle binary data or cover abundance data. Most statistical tests are based on permutation, and do not make distributional assumptions. There are some methods (mainly in diversity analysis) that need count data. These methods check that input data are integers, but they may be fooled by cover class data. ------------------------------------------------------------------------ ### Why dissimilarities in **vegan** differ from other sources? Most commonly the reason is that other software use presence–absence data whereas **vegan** used quantitative data. Usually **vegan** indices are quantitative, but you can use argument `binary = TRUE` to make them presence–absence. However, the index name is the same in both cases, although different names usually occur in literature. For instance, Jaccard index actually refers to the binary index, but **vegan** uses name `"jaccard"` for the quantitative index, too. Another reason may be that indices indeed are defined differently, because people use same names for different indices. ------------------------------------------------------------------------ ### Why NMDS stress is sometimes 0.1 and sometimes 10? Stress is a proportional measure of badness of fit. The proportions can be expressed either as parts of one or as percents. Function `isoMDS` (**MASS** package) uses percents, and function `monoMDS` (**vegan** package) uses proportions, and therefore the same stress is 100 times higher in `isoMDS`. The results of `goodness` function also depend on the definition of stress, and the same `goodness` is 100 times higher in `isoMDS` than in `monoMDS`. Both of these conventions are equally correct. ------------------------------------------------------------------------ ### I get zero stress but no convergent solutions in `metaMDS` Most common reason is that you have too few observations for your NMDS. For `n` observations (points) and `k` dimensions you need to estimate `n*k` parameters (ordination scores) using `n*(n-1)/2` dissimilarities. For `k` dimensions you must have `n > 2*k + 1`, or for two dimensions at least six points. In some degenerate situations you may need even a larger number of points. If you have a lower number of points, you can find an undefined number of perfect (stress is zero) but different solutions. Conventional wisdom due to Kruskal is that you should have `n > 4*k + 1` points for `k` dimensions. A typical symptom of insufficient data is that you have (nearly) zero stress but no two convergent solutions. In those cases you should reduce the number of dimensions (`k`) and with very small data sets you should not use `NMDS`, but rely on metric methods. It seems that local and hybrid scaling with `monoMDS` have similar lower limits in practice (although theoretically they could differ). However, higher number of dimensions can be used in metric scaling, both with `monoMDS` and in principal coordinates analysis (`cmdscale` in **stats**, `wcmdscale` in **vegan**). ------------------------------------------------------------------------ ### Zero dissimilarities in isoMDS Function `metaMDS` uses function `monoMDS` as its default method for NMDS, and this function can handle zero dissimilarities. Alternative function `isoMDS` cannot handle zero dissimilarities. If you want to use `isoMDS`, you can use argument `zerodist = "add"` in `metaMDS` to handle zero dissimilarities. With this argument, zero dissimilarities are replaced with a small positive value, and they can be handled in `isoMDS`. This is a kluge, and some people do not like this. A more principal solution is to remove duplicate sites using R command `unique`. However, after some standardizations or with some dissimilarity indices, originally non-unique sites can have zero dissimilarity, and you have to resort to the kluge (or work harder with your data). Usually it is better to use `monoMDS`. ------------------------------------------------------------------------ ### I have heard that you cannot fit environmental vectors or surfaces to NMDS results which only have rank-order scores Claims like this have indeed been at large in the Internet, but they are based on grave misunderstanding and are plainly wrong. NMDS ordination results are strictly metric, and in **vegan** `metaMDS` and `monoMDS` they are even strictly Euclidean. The method is called “non-metric” because the Euclidean distances in ordination space have a non-metric rank-order relationship to community dissimilarities. You can inspect this non-linear step curve using function `stressplot` in **vegan**. Because the ordination scores are strictly Euclidean, it is correct to use **vegan** functions `envfit` and `ordisurf` with NMDS results. ------------------------------------------------------------------------ ### Where can I find numerical scores of ordination axes? Normally you can use function `scores` to extract ordination scores for any ordination method. The `scores` function can also find ordination scores for many non-**vegan** functions such as for `prcomp` and `princomp` and for some **ade4** functions. In some cases the ordination result object stores raw scores, and the axes are also scaled appropriate when you access them with `scores`. For instance, in `cca` and `rda` the ordination object has only so-called normalized scores, and they are scaled for ordination plots or for other use when they are accessed with `scores`. ------------------------------------------------------------------------ ### How the RDA results are scaled? The scaling or RDA results indeed differ from most other software packages. The scaling of RDA is such a complicated issue that it cannot be explained in this FAQ, but it is explained in a separate pdf document on “Design decision and implementation details in vegan” that you can read with command `browseVignettes("vegan")`. ------------------------------------------------------------------------ ### cca fails with “data.frame expected” or “"site.env" missing” This is not a **vegan** error message, but it comes from an old version of the **ade4** package (prior to **ade4** 1.7-8, released Aug 9, 2017). Upgrade your **ade4**. ------------------------------------------------------------------------ ### Ordination fails with “Error in La.svd” Constrained ordination (`cca`, `rda`, `capscale`) will sometimes fail with error message `Error in La.svd(x, nu, nv): error code 1 from Lapack routine 'dgesdd'.` It seems that the basic problem is in the `svd` function of `LAPACK` that is used for numerical analysis in R. `LAPACK` is an external library that is beyond the control of package developers and R core team so that these problems may be unsolvable. It seems that the problems with the `LAPACK` code are so common that even the help page of `svd` warns about them Reducing the range of constraints (environmental variables) helps sometimes. For instance, multiplying constraints by a constant \< 1. This rescaling does not influence the numerical results of constrained ordination, but it can complicate further analyses when values of constraints are needed, because the same scaling must be applied there. We can only hope that this problem is fixed in the future versions of R and `LAPACK`. ------------------------------------------------------------------------ ### Variance explained by ordination axes. In general, **vegan** does not directly give any statistics on the “variance explained” by ordination axes or by the constrained axes. This is a design decision: I think this information is normally useless and often misleading. In community ordination, the goal typically is not to explain the variance, but to find the “gradients” or main trends in the data. The “total variation” often is meaningless, and all proportions of meaningless values also are meaningless. Often a better solution explains a smaller part of “total variation”. For instance, in unstandardized principal components analysis most of the variance is generated by a small number of most abundant species, and they are easy to “explain” because data really are not very multivariate. If you standardize your data, all species are equally important. The first axes explains much less of the “total variation”, but now they explain all species equally, and results typically are much more useful for the whole community. Correspondence analysis uses another measure of variation (which is not variance), and again it typically explains a “smaller proportion” than principal components but with a better result. Detrended correspondence analysis and nonmetric multidimensional scaling even do not try to “explain” the variation, but use other criteria. All methods are incommensurable, and it is impossible to compare methods using “explanation of variation”. If you still want to get “explanation of variation” (or a deranged editor requests that from you), it is possible to get this information for some methods: - Eigenvector methods: Functions `rda`, `cca` and `capscale` give the variation of conditional (partialled), constrained (canonical) and residual components, but you must calculate the proportions by hand. Function `eigenvals` extracts the eigenvalues, and `summary(eigenvals(ord))` reports the proportions explained in the result object `ord`. Function `RsquareAdj` gives the R-squared and adjusted R-squared (if available) for constrained components. Function `goodness` gives the same statistics for individual species or sites (species are unavailable with `capscale`). In addition, there is a special function `varpart` for unbiased partitioning of variance between up to four separate components in redundancy analysis. - Detrended correspondence analysis (function `decorana`). The total amount of variation is undefined in detrended correspondence analysis, and therefore proportions from total are unknown and undefined. DCA is not a method for decomposition of variation, and therefore these proportions would not make sense either. - Nonmetric multidimensional scaling. NMDS is a method for nonlinear mapping, and the concept of of variation explained does not make sense. However, 1 - stress\^2 transforms nonlinear stress into quantity analogous to squared correlation coefficient. Function `stressplot` displays the nonlinear fit and gives this statistic. ------------------------------------------------------------------------ ### Can I have random effects in constrained ordination or in `adonis`? No. Strictly speaking, this is impossible. However, you can define models that respond to similar goals as random effects models, although they strictly speaking use only fixed effects. Constrained ordination functions `cca`, `rda` and `capscale` can have `Condition()` terms in their formula. The `Condition()` define partial terms that are fitted before other constraints and can be used to remove the effects of background variables, and their contribution to decomposing inertia (variance) is reported separately. These partial terms are often regarded as similar to random effects, but they are still fitted in the same way as other terms and strictly speaking they are fixed terms. Function `adonis` evaluates terms sequentially. In a model with right-hand-side `~ A + B` the effects of `A` are evaluated first, and the effects of `B` after removing the effects of `A`. Sequential tests are also available in `anova` function for constrained ordination results by setting argument `by = "term"`. In this way, the first terms can serve in a similar role as random effects, although they are fitted in the same way as all other terms, and strictly speaking they are fixed terms. All permutation tests in **vegan** are based on the **permute** package that allows constructing various restricted permutation schemes. For instance, you can set levels of `plots` or `blocks` for a factor regarded as a random term. A major reason why real random effects models are impossible in most **vegan** functions is that their tests are based on the permutation of the data. The data are given, that is fixed, and therefore permutation tests are basically tests of fixed terms on fixed data. Random effect terms would require permutations of data with a random component instead of the given, fixed data, and such tests are not available in **vegan**. ------------------------------------------------------------------------ ### Is it possible to have passive points in ordination? **Vegan** does not have a concept of passive points, or a point that should only little influence the ordination results. However, you can add points to eigenvector methods using `predict` functions with `newdata`. You can first perform an ordination without some species or sites, and then you can find scores for all points using your complete data as `newdata`. The `predict` functions are available for basic eigenvector methods in **vegan** (`cca`, `rda`, `decorana`, for an up-to-date list, use command `methods("predict")`). You also can simulate the passive points in R by using low weights to row and columns (this is the method used in software with passive points). For instance, the following command makes row 3 “passive”: `dune[3,] <- 0.001*dune[3,]`. ------------------------------------------------------------------------ ### Class variables and dummies You should define a class variable as an R `factor`, and **vegan** will automatically handle them with formula interface. You also can define constrained ordination without formula interface, but then you must code your class variables by hand. R (and **vegan**) knows both unordered and ordered factors. Unordered factors are internally coded as dummy variables, but one redundant level is removed or aliased. With default contrasts, the removed level is the first one. Ordered factors are expressed as polynomial contrasts. Both of these contrasts explained in standard R documentation. ------------------------------------------------------------------------ ### How are environmental arrows scaled? The printed output of `envfit` gives the direction cosines which are the coordinates of unit length arrows. For plotting, these are scaled by their correlation (square roots of column `r2`). You can see the scaled lengths of `envfit` arrows using command `scores`. The scaled environmental vectors from `envfit` and the arrows for continuous environmental variables in constrained ordination (`cca`, `rda`, `capscale`) are adjusted to fill the current graph. The lengths of arrows do not have fixed meaning with respect to the points (species, sites), but they can only compared against each other, and therefore only their relative lengths are important. If you want change the scaling of the arrows, you can use `text` (plotting arrows and text) or `points` (plotting only arrows) functions for constrained ordination. These functions have argument `arrow.mul` which sets the multiplier. The `plot` function for `envfit` also has the `arrow.mul` argument to set the arrow multiplier. If you save the invisible result of the constrained ordination `plot` command, you can see the value of the currently used `arrow.mul` which is saved as an attribute of `biplot` scores. Function `ordiArrowMul` is used to find the scaling for the current plot. You can use this function to see how arrows would be scaled: ```{r eval=FALSE} sol <- cca(varespec) ef <- envfit(sol ~ ., varechem) plot(sol) ordiArrowMul(scores(ef, display="vectors")) ``` ------------------------------------------------------------------------ ### I want to use Helmert or sum contrasts `vegan` uses standard R utilities for defining contrasts. The default in standard installations is to use treatment contrasts, but you can change the behaviour globally setting `options` or locally by using keyword `contrasts`. Please check the R help pages and user manuals for details. ------------------------------------------------------------------------ ### What are aliased variables and how to see them? Aliased variable has no information because it can be expressed with the help of other variables. Such variables are automatically removed in constrained ordination in **vegan**. The aliased variables can be redundant levels of factors or whole variables. **Vegan** function `alias` gives the defining equations for aliased variables. If you only want to see the names of aliased variables or levels in solution `sol`, use `alias(sol, names.only=TRUE)`. ------------------------------------------------------------------------ ### Plotting aliased variables You can fit vectors or class centroids for aliased variables using `envfit` function. The `envfit` function uses weighted fitting, and the fitted vectors are identical to the vectors in correspondence analysis. ------------------------------------------------------------------------ ### Restricted permutations in **vegan** **Vegan** uses **permute** package in all its permutation tests. The **permute** package will allow restricted permutation designs for time series, line transects, spatial grids and blocking factors. The construction of restricted permutation schemes is explained in the manual page `permutations` in **vegan** and in the documentation of the **permute** package. ------------------------------------------------------------------------ ### How to use different plotting symbols in ordination graphics? The default ordination `plot` function is intended for fast plotting and it is not very configurable. To use different plotting symbols, you should first create and empty ordination plot with `plot(..., type="n")`, and then add `points` or `text` to the created empty frame (here `...` means other arguments you want to give to your `plot` command). The `points` and `text` commands are fully configurable, and allow different plotting symbols and characters. ------------------------------------------------------------------------ ### How to avoid cluttered ordination graphs? If there is a really high number of species or sites, the graphs often are congested and many labels are overwritten. It may be impossible to have complete readable graphics with some data sets. Below we give a brief overview of tricks you can use. Gavin Simpson’s blog [From the bottom of the heap](http://www.fromthebottomoftheheap.net) has a series of articles on “decluttering ordination plots” with more detailed discussion and examples. - Use only points, possibly with different types if you do not need to see the labels. You may need to first create an empty plot using `plot(..., type="n")`, if you are not satisfied with the default graph. (Here and below `...` means other arguments you want to give to your `plot` command.) - Use points and add labels to desired points using interactive `identify` command if you do not need to see all labels. - Add labels using function `ordilabel` which uses non-transparent background to the text. The labels still shadow each other, but the uppermost labels are readable. Argument `priority` will help in displaying the most interesting labels (see [Decluttering blog, part 1](http://www.fromthebottomoftheheap.net/2013/01/12/decluttering-ordination-plots-in-vegan-part-1-ordilabel/)). - Use `orditorp` function that uses labels only if these can be added to a graph without overwriting other labels, and points otherwise, if you do not need to see all labels. You must first create an empty plot using `plot(..., type="n")`, and then add labels or points with `orditorp` (see [Decluttering blog](http://www.fromthebottomoftheheap.net/2013/01/13/decluttering-ordination-plots-in-vegan-part-2-orditorp/)). - Use `ordipointlabel` which uses points and text labels to the points, and tries to optimize the location of the text to minimize the overlap (see [Decluttering blog](http://www.fromthebottomoftheheap.net/2013/06/27/decluttering-ordination-plots-in-vegan-part-3-ordipointlabel/)). - Ordination `text` and `points` functions have argument `select` that can be used for full control of selecting items plotted as text or points. - Use interactive `orditkplot` function that lets you drag labels of points to better positions if you need to see all labels. Only one set of points can be used (see [Decluttering blog](http://www.fromthebottomoftheheap.net/2013/12/31/decluttering-ordination-in-vegan-part-4-orditkplot/)). - Most `plot` functions allow you to zoom to a part of the graph using `xlim` and `ylim` arguments to reduce clutter in congested areas. ------------------------------------------------------------------------ ### Can I flip an axis in ordination diagram? Use `xlim` or `ylim` with flipped limits. If you have model `mod <- cca(dune)` you can flip the first axis with `plot(mod, xlim = c(3, -2))`. ------------------------------------------------------------------------ ### Can I zoom into an ordination plot? You can use `xlim` and `ylim` arguments in `plot` or `ordiplot` to zoom into ordination diagrams. Normally you must set both `xlim` and `ylim` because ordination plots will keep the equal aspect ratio of axes, and they will fill the graph so that the longer axis will fit. Dynamic zooming can be done with function `orditkplot`. You can directly save the edited `orditkplot` graph in various graphic formats, or you can export the graph object back to R and use `plot` to display the results. ------------------------------------------------------------------------ Other analysis methods ---------------------- ------------------------------------------------------------------------ ### Is there TWINSPAN? No. It may be possible to port TWINSPAN to **vegan**, but it is not among the **vegan** top priorities. If anybody wants to try porting, I will be happy to help. TWINSPAN has a very permissive license, and it would be completely legal to port the function into R. ------------------------------------------------------------------------ ### Why restricted permutation does not influence adonis results? The permutation scheme influences the permutation distribution of the statistics and probably the significance levels, but does not influence the calculation of the statistics. ------------------------------------------------------------------------ ### How is deviance calculated? Some **vegan** functions, such as `radfit` use base R facility of `family` in maximum likelihood estimation. This allows use of several alternative error distributions, among them `"poisson"` and `"gaussian"`. The R `family` also defines the deviance. You can see the equations for deviance with commands like `poisson()$dev` or `gaussian()$dev`. In general, deviance is 2 times log.likelihood shifted so that models with exact fit have zero deviance. ------------------------------------------------------------------------ vegan/inst/doc/diversity-vegan.pdf0000644000176200001440000131053013232070276016714 0ustar liggesusers%PDF-1.5 % 82 0 obj << /Length 3498 /Filter /FlateDecode >> stream x]o~J$7E .)^F[ ZI#J%e_}ܝ_97Se3]<0͵f׫e5so_p4lz |a"[ǹ.fn s~JRypNѮmf ]UP|x~ 'R.feB!R&/<"Jpo9[6]Twqn;Ҍ-<,&+3aoVȆU>¸E=2 Rt0pH)֖ƣ@~%F%N66v No:,ESAuZD10r% Dݶ;>޾c *#,hZ@`OV(v-4Q*cRB_] 6~Z$/nu sޒPD~/$({XkPQL䄦>m|BlȖ\ F[3-Ӈ% P z!^P7V-IBd"- 1?E2H |ur1'_Lk0s.`v{#Ly0KHQk+pB<(fŷ&Ȱ籝lXȿ%{Di).8g0VB㊉ɟ QDL ^!PYHiB9`^(!t vi흸f<ŸȟÚV$ ]2\5*q93VGCuI a5Xh87}Yߦ E4q|o1q5\:cyS⢞w_m e"ԛZTur)E~]uInc$61u^*6Yd#Ǯ* ?Yץ v feJ IZOKe2r#:YsO3ϵ$:YOe?q ZAuR.D'\BVۛd%f|.@x+Z?]n7l\'yT)bJÈR) &-)aɵy5 qU03}J.̈́AӾӘ}zzORau '%PQmn É-QeLHiQ sBu8uC*b  6?(̶}KhzX&%jQ }f- 5śkHW'އ=. גU/C,AAVn$ dp'JCZ3Dm~;J^yq q?ǓϫaxN y,br3ߥ}+(GZT"PZ:e_ XL.}Wbъkb75/fI ՇL1U ,n*{+5&f+sJ6S#d/ވ5oI;ps[j.t^Q@3GJe ;Z>`*& PSWwJ7YGtp]–3 !(vF+oXӝO:兎qt=k~7Tkx?oJ⽴J(ѣxqOׂ}CԹi(Otd}nRSPFljh|b0ex'J)䏑a%m$3sGauP: MTbl>#1rt!8 c)"'{E^kܰsӠUѷ G@ni+^m&C4~IrG8cI[U;ſo:*bLIMpnD,::{.GAWKIOuUT՚lvIݟվP_HwxϝbHs7&#ylʫ>g/}[oGHWy_Abæ7 VgAo$]}R)m':\)6Z/h, (R̯t-R1IN}zx~ w16`]@mEۥ>飼Te_C5C'[D:jF\,PɖEi;J y=Q*jo 7<6(rbAME@d ٘[0XZ}ܹbC V!naEHt^p5J(#M9(}0X;:l3^( ؀Y[Gs\_LYkvEuiG]5(+\T-5J }s>DEsB\DYEбƕysP'i\eWVF)eK f ps$_*-*Q%R W.*r *:O$1SG4 +S y?@A353RR3]܁y,/`YnB5{ =̮^K)SDQl͔o[("t~.hf]33 3wr 9zg6d(WQU/UBO2 Beyб0fL,|_NQ?ArZF0xQJp?lxi씼ᾦHtg[;GW[Wq/f ]eT':w}ᖇI~yr [ %*Ux{L3b,e1Zoޜc^`; XSonx <$9\}s`Z9xgFWpZHQJ! c#cP6< n+u? ?r1ȃTn8Rz>,Φ2Wds ^ bc 4 X 4'5%)llgS\XH> ei1*~GcMg9WIl/GV endstream endobj 123 0 obj << /Length 4287 /Filter /FlateDecode >> stream x[[o#DZ~_<_$sIhIkSU}R6A"9]]]u};,Xi '[&dX-]݈_Js _U-_6^>^9Ï*Nq|Xv4X~ݬoð^¿O7~,K(ZD>wo읳 ǂ3{3H|? Zůi?߹%/joXTryZ4F:(ąs}W~-k?ϟ5h;pxȣ9NcY⍨o :7&[SyaEPNrHN׸߸x Q6Acp0͙v>3&MEg6xF}Q>X(fEwXUb"/x|Y OCeN/ydΙ) mnl;g8m@ hfMcP:Ci0`O4$el*yRE@=36LUfE{Q>J̋V`R;tX$$0\P$ *gIvx.@ϵBBJ%7y- vZvbEӷ g1``_ ԋ43&QI36J'B( L(I P *.Y0.B3!cG8׬ 6qw@-U@k^j OLn7SapQ6aޱej4.99{Eθ-oW]8|E]f٢ۑ?i@ƌH%GTc$pYn0$ysX#jS:{Q_%9 6)4[NPkА!v } ?Jbk尹=B 4^N ʌ+( \׽ty_q<0z&9]xyJϪ\%crZ[-/bCsLvsF`[F7[#{P+8 (9]m<*ZZ?`Siƿd02ܤbmMy};>x!\.ǮSS➮g tiPٌ?疫ܯD`)LAk+2 +©aÊ,qe7 ՋҨp 59VJ oS܌]l>dWa/xF[*00&/*r} ;71''Vla1% NУWsY{HN|T 1,Y wpdwCa:PfxFT_V~.]O{[<窚tR@/ ;oZxIp(]Xc;\:jw0M_I~>kFTq|) :فRs:jT)VFe)4)\dⲒ eKd1quL>&jׇm4q؊]&K<2!+M8A3<1^(-J/\C^zcs5-qUǟN}qJy`=~+ӎf鵃GNHu&LN7V1-?0˯D}RsW=_IA-KoGcK]5f]UZz?4Ԩ)CI x_cs/w N+ݡƝ&P7ٯKYFE)vo3$;YHvQ>;?o# `1=t|,,^i+Dny=*pDtb M;6Y2o%qd>Mx/+9~|H?rbC%d|wW;fǤЍR(0\Mҹ98$lGϱ{Ȝ̋Vsmxfq1(mbpKRi&⛤bs< DCM=j״s.I ¸i4K ncAT/jhǹ4~>?zX3/۬kLRRe ̫qX5Ń6P85ٚif^l0tW0DߙV(fnhՔ[ƽAH'ʋ&k)|#c܄++ˤ,اiM 8ňM3d=*,Vѽm4a/إDj LX LeGũLЖğӡZS7b7{p#vkcs Nt}[3JWNLkfU"ICmD8:]7m+  ^_`.:(C Vw/>Gξ- `Sf6LQ/ E)}i~oKx !F%-D(scyc1s^\]LT5U|HܓMf]r> /ExtGState << >>/ColorSpace << /sRGB 137 0 R >>>> /Length 2643 /Filter /FlateDecode >> stream xśMܸ+t\%I 9,b S%Kgz[9|)_M~0}8}~;fܴoDɓC%IX7?7_>}_}LJ֦Lϑ&N'?)O~1}|`=o~qr'?'Z9)ĹD;zټGwI;v9<z9_b?_T_L\H7rLgD {ٕ57-z1kth9$nm,ˍ0<L6vOdЙvM΢w˘,~]$4mBP͆>beG,̴vooQՃɚݶC>S˒܉dM,G/$<Ǹ%yJyNAI)TSC͇qfw"BQ<-yaͶ;9^ӑU,4:=$9,Sx=?}o?_h-6'j:#v՜(ka%g,bĵ,-Ð D~HJDZ#ecIR1N$a1q"q1Ɖ$,HZxI _ΉANSGEg"Ѱ"QHrhIR@v" 'h䲰4ZnqܢŦp)0^#h h h 2B M'h 7ƍhhFͰ!{X~yPw hD(OqYV٧1vD+eiS\uuztI'P #iʍK@'ɌV<+}o^>䥦3CzχrRx $ԅiloAҲVAd H&dPg;py7F,) Ad=Z ArŏE%6,DƵm|m|3n삍s+` 77 9 UFB FgF3qLʂh f#M`4 ,a4 .a4Kt&F7Ma4 hS6hS6hS60 Pn l =hS0$46 h6 hp(FkYtː0n߻YBt5F_ӶnV4ރ.)~d<= uקђdF*˷L1j"-u_CzʾxD[h4hOR_RK#Q(^̰IM;ܜ{%vϳOjnKYv;ܜ%vx>twߡR%f;r,7ȂȔuRn;mG uَ$K4; n<{1HT2nj rou fa4|4&>B:|hG>B:|[t>6|p~?>B:|#tP|4SIodgL%1SMuEWSIߡn"Dj܎W[i}+`XWr/VXZK#|cкgd+ endstream endobj 139 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 158 0 obj << /Length 4633 /Filter /FlateDecode >> stream x[[7v~ׯJS;7ଶv$TU(4$e6KhgFZ%y h9߹Ow^LBr뗓^Mz:z9iL~:?;+JuR/LwZ= G3|.~B4W5&Zm6l[)IV)I&@cXcv킏\cc0FA/)ŗVp1aRҞ+]OjfƐSO t^}'2uss&ﱗ.zppNޑ,%{`a(IY.:j& =vg6Qj2uq)+ޢ XO~ 9^wɉXl,'dwu31zbr7y?|UQ6 1ҸO]9 'xo  8Z`N@}=3~'c5HxvB6nC\[PLi;:*;d3b~d'YU26l"Ap")N>()-'Q+qT5m4Ud3Jt>/8ffL-H4ڲ} Q%3tnWE 9!=9Ç(u/[)=w}R*C>,PLa: % d!mG|?6WlvCUY/ m7jSnc_$LR^MH,ÏіKhv?Y&6/+p _Al A8rN9{kax:/Vf561TDPc>'{rw3 !ETm™Ge4]q =K}Xå#_Mڈ &Z$p `_VŰT_3]w&>4b]KYfZh81[u9~d|wFSd3'kﲷz(Lq]d}+*SQٞ?3s@q0XU˧2]ӦH}Ѯ3GNH}\>zu^=xN M*}_ ޭ7U&bm/|]~чIn\YyT!/$u+lQm԰Y ƚ0ڮ!U+ƷF`0ZvwHKKJu nk*L8Av_@-waJ+TABC"14xF -R8Mh`́6x#@weLJcN v.[2 }Vt`OI*՟n9W@e=|p*)CggהM-EErʆ(T6? 5Lb%?^)YosD y <8tblmD%?c6|s"m_z@(b+ks9 /"03uzs7T+E)7NqSNq@U'7k0^UAj` 7u1ȩfN+(tJJi0+Vh,Jia>H*"L(psa.WCNj$i G, [d"+=m[6\tՅPf0c; *q碓K"4‹̿Li`ȊhR@c; r;pxj);&"?j*JIA`wu=N$^0~LO=~]ן]? u?uwĢ!mRtwWXtSp`MWc5<-;<-U+XHHU.^LؓNUvym,J6e-qj,w En;=P EA MeuIeg5P|_: :BpcNV_Դ1JA"mE3iL+Ȩ*EY` <xK8 * .|d7xE~nS*%.V0lT=bH> !j]1;pϿأ8ikVʔerf onhdAƲuOc86#ɞ:6"m= 尪YO{w֗hLKun椄z ͊=`*9'Q(*J`c8Sw|${F (h0>*,g%bR Qe%yLT{B*07 x9(P@c:V]~`A7뻾1!q퐼M9]Ѱǚ-q3}q$Lӻ҂22/|AwBZ/ ke<%OxBwZowX`rx/mܘ՚7MCXkT֘\s  ߖK邟b":KBZ]q7 endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 797 /Length 2581 /Filter /FlateDecode >> stream xZ[oܶ~_nmJ.9iFn֎0LJ"goȕL0˴`Y" IIͤB?'LFd`8$SAΔb=;ΌLf!V{f lPH椟ŜXc.BDd{<NG_ɢ3,KV@,恆M{Lh伣1-ahJ[P3hDYSLyPFC-,SV^0hWXf":A_F@! "A9T`"# x4:@бP2&Lv# Z!PЦBVZkeIudrx Xɣq"'W!&-e83)j&8i,hPi4i$E7W)y")ꥑ1>3*<ƕFWYʶ# aJ2$" #6^^f'T,;d/Tte]qa95mj^}yo57<^Vm/uU/˂՜5_j;Dgk)+_;b9jE«˫"uM^vDu][}NEZ|iYl/S3CNn[[JAIMyo(eۀ,udWSSt`WsykЩ9u]/VgP2WmJkG;zO>`֖%vK^],.0-M} ZnA2F "`YvTv$Yvub8,;.U]β{i^o/DPP66x r^o>44pc13geofa4{N8%; W\%eD ۾Y*Pl5ۿB @ 'RĐ8*6Z^톢Ez:?CpPEP݀᪔b@`5jXn o\,vG8L5c8N[Ubqz_38#he+K6L4%6b9x=|X[Bڛm ?̔%ȂꊎH:rz`QLU?Uݱj$H aq%ΨJD}-uzO^Tΐ ˎӗvns+JN|Q$:6K9j*TکtS2Le4i.6X#Fz~C*#ɯ/ˢeu߽6 gW/o*Oq >e w`t`ܶ7 T.pßW? +ur0q0"3y{oCvRkp,`gw4Ɓé,6))Rژ"XJQvX3HXh,JVTqn+ۻ!opMyoȵT,[)c\Y%0\"r_'%]uGP!=|4f*'i&i&i&i&:]LUXN$N$]fG~#A; (ҩűq_ ų00! pyb0Vh6xy >!u1Jlsțk,b'1ZzLHpO?@L|D׈"nn9٠@b;w;EW`t5MOv+Prޣ8ηmzs~;?Te endstream endobj 188 0 obj << /Length 3874 /Filter /FlateDecode >> stream xڥZY~ׯ YˉX xsoWi -^߿rV*~CNUU6_~0=^NXfeQEhh{ZF_9漰#zY|Ͽ+f W"&3 NF#J4F~L:m|ixe4S(`TY[y>qVU[iqqS-\>OPΛE=RTIx=83wAeD`5w N7G\oϕ;^:3z~;:17xֻq&rU#q8d<[i|'^9H+Iy:(ָ]`9%ҡ P &9=. hͅ \vTjOD w:?,gBF,mS,iGFaU%wGs#Xu@gvA@so_xGil(=ʝ7ٜeq>0oN1o $3,ϱ˪Nں 2O2aC 9fh[[q3$hI8y-(ej-K0gFCV*^PɾDf ~WD'y$b a& qhh#L`1RgfMUU',Hgthxc99y@Ɩ@(&G9}h@qx*%3#GmXi=IR kR#Ў%J U6;rJ[{9uEz2C?Z:߆9գ+"cU?q`'98܈y%j_A" Jd|*ҌRK+f7bh0^ k ZK']5RnRX#vp(auǹź3(fcecPS,vXG,(|F+hHƋ oλ 3ް~WpEa{DpUۈ`g5+'Fz:qٲ/}1bq%|焒Z䀺2}.p}obx}PG^DZ=rOb +Nv؃oNbo,*<"[6odLwY&|.ClX l=9\}[4 q'B_L9MOXŎ0x_2φ^oz"` j>4:ς%m ў2[rhUh[Ӳ~ʬAѸMlڄ3ϳ2J|=L豋L25t;4Xq߷dAXisusw/qշI@AJe2YPd+g0+K|J(g?BO534tJؙ:?+Y4{}EB0:g7?a}tnN#W? 2$|L!*2:;1&-,e]>=~'C{Aqj ׊j2C Ѳ|K'QK˯)DnuyN5xl5 {hHFb9TzމÏqC0'C{:2$_46L΄Njl@,ʸb* :.\?Wgvj6xKa(х#=f].a NULש^Ę 5n2NVAݤTf' `)EXI1tIͼl0~P .λHp #$_1,#)-ɟuheKܝe!:'Dxv* LUGp_>.O83^!;7rtXY!.f[w=/<)!vm$`(^%tN+NND?Eyps Jb ]$7F(IPÕZ^S &IJ8u!瓼^!WRs'/?DIIں(/A}MOeobS ݉+8a<S{wݦ=6LN2L񩤪xu!7mPʑt8wn9r[1чf`n%*$4nߙYm~IV唬aWV ^BPB0I<@HA.{; gߍvVykxo^r'7!NC##\Gƌy$U\afIj|ua?ot(/} hwzJn(x ,?>t؄8ilQDF}HY_LQ<ĸA\PC;coh5ȇ;tYD`gO5t ȞoDSS ot|m"!&o] uӿ&X4`3mn˘LE>`(Őp(D&셃UcL4ZeDv|9AS֛ƌr>ՆO@ygoDO;WZ nR>*.hd`)ÆvZS Ĺ✐B!>LE+vg &w( wau/ %547!qdDIB툞akin%$?уG"ȾPσgWeBNA endstream endobj 177 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./diversity-vegan-014.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 194 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 195 0 R/F2 196 0 R/F6 197 0 R>> /ExtGState << >>/ColorSpace << /sRGB 198 0 R >>>> /Length 738 /Filter /FlateDecode >> stream xVKo@WB*Q ąJT DqKZ8汃BUwulmꕭ]+}8}|w^g[{Yiu@u! pNQ[ޤVy0AE`ΫFXT[1.d}cuv +#D(j0c!&ݙ,|t O'EE8|[#`1eaxD~:[`۟u.<sZav^ I۾z[ cFbGUߍK*Qǔod!⡽APRY G;Y:N78ڙ";6hOew]IrNU^j(s+kC4Wv d)碞OfT2AKnJ6\dF ]`cV=½^Ğ >YģG wJڃ>&u([G<}%"tH^^ lPؒB6_V[F-~vvO-QTcl՛GE FϕġWg]&w)W=Ə2E{]j`q(0qF烥NL:O3p##z$vj"v.U-f`1'*ʴ"a8ʦ)`dqȣz"CԃF9($c> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 217 0 obj << /Length 3800 /Filter /FlateDecode >> stream x[BCN MH$ ͫ6 $ݝzw~$|RZٗ8- .gggٵUO͂ƕ2OOJW5>PcrKMJ>>ٟۚ'ÿ4rޗ/|5e㵟)^,g/X~WsLa>[c۰;mර ;M?V=TŒ?ǎo8~ū̕*'H\-Re/#9 5\\KBhflBP @ۨ"#<\̝q`T DzDh,Hs3nm;Am _)T%<7 άQ2d]QZ&0.jK" |;R^PaJJ**Q45eu2_/tͪ FUjtտCQ,=~\pp-LnA`^Lf [$rˊv@nIXsfk"70]i[悍'Dc4NQu7.> %{1,g~r`\kW%>OŰ'N=t啦Wq>f0qښ?u݂5XȼھOଵU[GO>?G V , m瀯l:y G"y`x'wʣgDBP|pM-At/ΫۮjlE%-TX"6pb`kB1U/xK6_++Ƚ"W~yˆaz%vc M:"W<ojU7HgtDI1 ]͐#0MeaHK^/4T:.IF2b& $AOs~+'s괨&\ pq*+11!)R FnXYx00JG.ڭ< ̇Nn'4'K|fHJ xijZ[@"]1Dߒ5."֢Rm]p8YM }yG;s_Bb,XT/)z#I+gJݨĉϨ.x5~{~8!a;A 6cUgh5B[ƁW>Ƚ+NBݫdVfULWZPLNq&}Ue֕J=5BMr 8Qp}JgWĬB*o3p[F4xaYj"#4@eeeS Un5W~Z#kt ;~MPV"+A ww݅+ 7Xz lߢx/L:B}R Jb8_d|<9fHF_ z&!p=`wNauZ3. Д}Z #2JJ C盢2v/W 7DX9(3E,sz7/Q}`sUJY/v+exG8(G[Œ,9]mv IV#\b칠h:b ̌3h:[!).~_ׁC8!!oiz~=2|QͿXя`X5|Od,@t]ϩufNOmK .(pz y:*Q ȸ3`n*dmz~z#BvܨFC,<ǒ4D b~,s *KD3)> @7 Wfnii+= k=XJdB CN| & e/ic ;3lA|U͖[P-Pl3{{ީgL(+PHmĕ)0 ,Քnl7]6#C $Z`s ;1-me?5h;W d-20y4&KT x? ijp1ί/F#Ci̠gh(?++FTn!Cp{ۖ!(H3ض8kf\(G`Tj{㊅' zC]䄐sAH| ԃ9|rӚ P1֦6'r\_f^Ō 07猴\WkNL pcaWZr8A}r@wR刅h7n_=J2xN%x7ӹ)%.Ѯ~Jsጊil~`<(m4s}2ˬ"jVq $߄Gs!;x].`=U19*ԛ䃞-^Pfsiqæ/x-dz14<ĉ'r!vg_nV}z>ltq#]`GHeCX`t8}~rngk]s !B_ACP$r݁o5Sŗu4h!E.&[رf|=O|8\֔6šQD+gy6Z+9F Ǖgf:nh;~6 ):Jh7Ň rZh9hp:r Gq n]*STkP66^9 &<֏O<=>Ir`JGx5uW8dC y<{Kn ;Mck)Z?2XҌ[Pļdzƾ3°iO> /ExtGState << >>/ColorSpace << /sRGB 227 0 R >>>> /Length 1303 /Filter /FlateDecode >> stream xWjd7߯2YDTC&0@bC!+ǁɌ !SMwC3 wTǩLc>/?/?܄K)0޾ ]~=B#~ǥjJ) G+n߈WD )Ěv9$E w9s\ْN|קS1G[}v~ٺ 8f票u!0 w\Rgga| >>@:M'afid+moڼ˳P!,˼iMtF_&A4t h|%LS)'%}\[lGtı41;ViȽi@0 dXMB%Ǩb4svikl,HZz 7 RyzOwx=ƞsp3n!4  cq]Qja摠47`jmxt=\Etֺ f  nыA?6? Ж*p0;{1@qC_ˠр}ܘ3Fuf A+%XF8nfp 8T̪#@P_Ba@9YD:̖"ҵvjp\U#T BtZDզAcZ V*i,nH}ըA CȒEfGP61.̖m@{R: LmŋX n)[Gd0f#P,"W yb &wб,<B3 D._m17PHF/>T ZD2ki!4n2X="!ŋ*~3E_fnh_2l>PrC# [eP& !n?eWwC^H7X_]`Dm%/ 9BC↶?m endstream endobj 229 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 245 0 obj << /Length 4035 /Filter /FlateDecode >> stream xZs M˽q4fI&:4Ng`SRv(iG&p}oE6:YH8}IGRiJj]|<%,G_Ek8J#bt3UlosҚP'gK\7g:v k\ָmZKsî. ^h_KDt О-6E?hkh\7WzsN"M$`+ m % |Q<L5j?C*qiUJ5<iV"Y~R$ r_s[N+s ̰)Pw6&'P 5ܭ_> t-sS-NwAfEb ˘#lҖp;v/g6ì]pr#QyZvr+w=bw aK*tMo],E|$ސI\QC$N,Lr {0| >~OXN094} riHnߞlJ]#7,-v X̣RC:<Ӏ0=ɢ r8,`.I3m1S _hi cS|Jvg^I2&A챮mRƭ*񹏮rչ1{n>tsVJJۓ`ʠWЭHnڬe\fvE4g; $[8K0`f–rf()rZ6(SkRUﯫR~bR3KAp8y6GZ2"fճ@XͶF,rdi)$걶PJ}(.B>$YؒMMi>59;Ɨ6qBEQh}P>86j!- BQ%$D LOQ6B)vopm4ildAgbR{k+4m  āǪf  $,t )PHP@Ss %4582)&(ӆc~?Ǵ1hm.TK#sgeԫeX;֮K!'k)dn6Ăa WR4f4YLW{{l5YTBq5C[ {jܼLhV3G:שaZ3` /8W(qx9ve8y^RM6R?5YЖk+Hfr"Yi}zyWhp:) IK.@L'&"W&_Pˆgi8yP*ܰ}`15] gG5n1 ?@<"#^!IyU<x=YЙ2JoJv/լR#NH,i8vEDy*$H G%W V3=D\ E.(jwܸ͗v["qh6OʻlP\ʕ|@etabSr9kc1"{ee9lǖ46͘q/Xo_u}YZ?'b3mU]dY *)~nL͎e3|]JfUdcҦrBR`* &2Mo)Fu/%4]2r:m3l)f1B{尐f7 "RC3IQZƍ:K?Q}DiB傁Eq *3r$"+QqbD:aGt]aT9g>Lܾ|<[qy<Q_^ )rZ3pK0!fdJ`2(flZwgDX>X%EQ)b#F%SXz<ãƅb|sq̰E=`,va$3]]=XC'8#Y 0,[|!3*fyκAP"q SPRw9̛6KXG i6| Ԑ*eNfue!#prtri$ J#|Krs/SfŒOF*^ W`2΂ocv.p&c&jSOfNW! JOt̵Ap̨{suz|=e0a4C5,J,v Q5AQVX=jom#~R|Y鐽+vJBx (Yǀ}~n N$aT{Mi˩(票1_s`CBv?̈́SSRªwS 8%nHތq%5wi:!y,w޹I{`r.njfwcRppq 7m~F%0ol~%~$Տ'] xWW M>ԉv $@{I] K~UhύTB܎%᭹7m/NT\rmJ4n=7@2 nKZ׹H+6!5Uq 6iB\ut6 ϑ/}r1*dH IJ$~N w,}z8oW?Z;~HB=08M2[ഃ"[8F /O8npTkrhswJ)ؕ @B;y%NN&{ !   ͸_QqQ#}? aF PCXc/ס`i2C2K endstream endobj 234 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./diversity-vegan-020.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 252 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 253 0 R/F2 254 0 R>> /ExtGState << >>/ColorSpace << /sRGB 255 0 R >>>> /Length 6460 /Filter /FlateDecode >> stream x]_q|}{|?KHXDpY+$6U{)W@QٺM.=|?rOu۶/).)_k /^]>헯ˋoţw8/wK튙s_|l7|_o>g.\k]K]Rk״]׷~&~o_Gl3Sb~u[2u˫KWyyyZ޷{}0{pE^^WDp5Q_<]K"nz/m{^_yVC}3{Pӵ{Q|~4ܯyYkۧ;~-_[tz=u@GeZ.K0 G"K n=g0_7r&|_V[W߁x=ihrym<\uTC< E):~vlqݪl)Z6NQut.۠lg^M@WnFJvo#0χߛI@"2VMG0.6&L؂eYG`{XZG0tMGPt'mÔkãѶ:Ѷ:l:Vmu:9ж:$M#WFet5) cMɷN+̭l 8nkD:uCNݬs3tȌL8T/LllfodftxH tx_:2ܖynʼn 8nʼnq{墟7uxկ:|NrqՖ}}n*ܖ}\u\X*WH7[.Nl-/I ϐ}Ou켹.LCt^^= ]C^>L_^ͅb2cgN+Vx J)pXþ/~"dŁ|d(NK!lŅwm^ W VafYb=Z8S ʒV+Kw '?;hpi,Sb mO8TdX+ptt n+.'DPk'ivhnaI.b[ ZѼƁllblEd^?܏Hا:>B`pZ_fg9_g<@$8-#X@{ĕx{XkY+m /[P16g3po QNqE{ᄙ=ޢ݇MĄrF^d&ZE'[${}&=rcd[k,)`=O/{ܸgMNj}ེ_[YMdN }}7C.4[ىF7}O4@8_;'ko/\a뀭+|sWD~iZ<*n`Ώp[t}m˩Bt ·s1Cܩ3|@e1.SiV9dƄ*ɝ;LhDui{EK!0N2u9M:<4Jw'б|7 e;a"댵yn'ڸ"# /exBrn \(:|4$ "<ٷ{6uDƉ2;2|:ؼMZU8)u:uvRng^y>\<44w!|2l~f}ϙY22B;c/d`t gb/N$h.l| 8R{!d` 84^ቑZ2<8{c )Dr+2|~;^8('n\HL*>^͖}N'r2<ƓLضwj !K*=̯C<(P A^lvht@; L^kL&RG= f,853%E0!!g-lzgپIΨAL`Ib ApSD$:۷2~cpۂ3U]I*w^r z(O 4\6<ڋ9`73M@ hFfҶf3[`#*˝2(Bgscr5Έ,'ZHԃ Puz}60m,/uR6CB^ ><g^f,/3^!<3Kמ}r0 ڝDžE/^5m mF4Eabvyt؝D+r#aFy\:q0o>ogbbIlOhxNS_=) \@r=$t 3c9`C`AL FyOe(Ŵ D@W"}2'*<u筙:l=863k6@mW/~8 rۯT32pN 9O'^*dxc ƒ2|2Kûv51CgFc^|#!ӭp/?o}2B3{M#Hq'nmdx?^q$ ۙ 8cNτWet $b6Q= (#)Ě dx;UF?^Qxg4p"w >@84NdFEANWլ6vC::EЉl'n6ϊAD-2n8/8Xӽ\Dj8$07'A-/4m4& p'6s;͉y!pBuayYg%yJFӷnUᷚ̃v^oC`ڜ陑Ӊx 69|wg*dh ڡ<wh6 H;>ӂL`#AD(U1m&ƃʃD#"D:*0>`xm M:xF@ HH^nD[R5G.V=0/gx1FzFI\_[g a`uU``nhfpD?X"xo?J"3 lpgw"m}LՉpe$` ix{` &kU '&t ģp}J9y @&mbF)@tsy[FusDٱ?D7FdǍ_Ǘ_>z7ݟcߋ|4x띑^l涏:z^ 9[(걺5գx\n^vAwMq$srєrTrW...).&)..)..)]]F $.)N+lhJh*h hmLlTml)K#ԆlGFgK#.:K< %Ad;BlǔcζKݡKC0.َ<HWgYuqv+Vj6lYV$V0;A(]VC;x =yރ~{8@C@~_q دc+A{T~=,4k@:[lʧ=NfN|m= ;Ы |Ы|Ы|Ы$|Ы,|ЫDzpЫTzpƾvpppЫt|Ы||Ы|ЫxpWTWPTTW9PTTWBÓ****:*:*:*"c"*5e4%e4e4e4e4O|"{22*ڥe4e43d4ue4ee4Ue4Ee<2"?2z2r2j2b2Z2R*ڕe4%xet>22ā'"BBa^F!//hhq""$e:222 Qy/Hʃvw'eJË.)O>}.)z%]RIy.q]9%ûĺK{/okh2D?N=Y!'&\rrגSJ~P08[BnCFe閘)Pɩk# !>;,Ǐs3+o#;l`M;~D{H1007x|ux[-|l|Fj[V|ۧK\)a #P'tݻ|x]%޺9H$x>7H|tiܘ-/דyhwDo>܉_o^!}|_ endstream endobj 257 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 280 0 obj << /Length 3682 /Filter /FlateDecode >> stream x]sݿRug6qZ<$ ATIʲ}pH9M2m'#CLzVYպv/_ETkLiJ8t_|  .^ofmzg״]m˶ugz ;Yz SÄ7lqY-t^Dڴrxx3_m*lmg *.*N\4.bf%0?(`3MT~&ФYr=-vTM3URz#g NO_59rʵDk߈h+viVm=BP5PC479ūm (R]Vb655G]i[3>=1-[SV͐ @2|7^T{d6nE_&=. ;_"Xt1E6;6ڌ4=j*k*39\%`' +dbpx ~4p`;.9Rx=+ÃOhk8Pl?NfA 3"~?v:;lr"j&X46!{aȧwRףVJ3dI@$he.sW3>#Ҵ4C [M^:4 ә-6bwZt8A*C0; h?B4V+s޲юD'Z q O<;%CL\tndۜap_xPKz0r/v~9fEq#]Y7Lt"<&at[A>q pPn;8A g6 a!Yv:Yo596LZqe T\".ȒKIXp> iC+̔2Gup֛e#. R@_3B >@>Wމ@T=z^W)IRN A yI#bd"HL'yi*->zf[iqZkV~GZ8R!]6%5ZDz! =%[!6oҀm!@:JBMY@;LLޓF׼l(u@n](7ģD EUYmg٭XYr:Q+rvf'T^X)#%Ӡ8 0wwzZt6Ĝgb bIVO <?hYgDm9$JKU4FnC'ݑCŤcTH)nx%NJlut m2SJQ/CLj Izq>@g?=uj? W9(]K[ !"Mj) ZbGKfbV7s ʆl C*VTOuZW`E\&`O5Tլ0p"quqSq L V&21қ갌 C@tf#_j!=q3Q&=.E 6]?)A,VtQq,/ihUemDFϟhm3WLjٰ ilKض*>S#u=-p;g$kZSτG2@? z2_LjI $}M9%Lx"S.Sג^"0p](gu361×aLx0z~M &38( #W4 *5|FҎ H 0sô{0W{ =i5،iw`t.~ 16%=!LuW!\!ewBB'YV!p̫4EƱ7C+zt]ƧƏ9de +r\rȿ-9ar:ELuR1&>R%XRʛ/pD .۲:.mF*?VHnb%-lI؃{Bb/cŠ̘Z;Zzguwht۷y`9c~Q \e!Vǎ̱9%Iՙ9/F@ pԛ /Qͮ`HifH˙kq~O1 O6KS'"/>lMI$' M]qJYpkE>HX6{"tFǏَBN.L_Nㇴ!ЧkvNOǚ,3F/l@5m;e񓤲7gz۵-coCYCQ+5`A(qҳ 7g$4_\DQLN?Cd-&CR.+x3\OJӔrHn5il]c1ެ]ucgT<*Rx#-GOnkIT+ ֧=ׇjj|BxؿuM޸'I-b$jHx ΪsН^(WOjLks[/RVZj%fls`Z&%VQ'D_= V3̫ [3my\7ܥ;m/"Yu܂\)ׯfķ_yƜFt|"u;4'%?^nu1D:Nt̆F~!ET82q"mDڟ$d(./̆.L74W} tu/A9ÇwQ4&"PCE +!> OP3s<.Qs lBQFTFɈ'־"h y6pyDOE_HMeO5,ޞ &/@^Uo$wr,]+FS(z!J˩ܮs,ZZr'ҿ(`F!FO]#ᗋUE{j{ēL[ ;vI HML endstream endobj 261 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./diversity-vegan-022.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 286 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 287 0 R>> /ExtGState << >>/ColorSpace << /sRGB 288 0 R >>>> /Length 1324 /Filter /FlateDecode >> stream xVˎ\E W2YPMH@E 1Dϱ]uiI3ݧ}]e.q~yxqsI1^_WC ^rxKwVcPgL% %Q}2/0kfSyN)28i_3Xa+3vG7J2e"5\gQOq$tkN]Nk.%R9 v=qt%npE3w~Pr-7S>雹گ)!۾sEbUt^Jn1-ߨ}8glۇG$"}0jO͇K9>.D[ ?g"Y׉|wC,yw"#ijѱ"+}T=l<{LU0J NU"3 {Kv>J; ͗?6OaCJ\hS8,mZv`F;o+{z&0h#&a FX}X}h,] {R<P,Yp4gSc=_(kdˆ}jx\$a% d mRIS!6uV. #6z%(HGz^~ƻ2c ~h6/\m>9K\['y yD[lּl k~{;NN/:[[Oz6m6GVWM9 zњ;h?5p+e'[Onct1s4fl$ݓ&朳ݾU5 ىUJ!MKC唉ko3x <]wCuBު;}:cCMORgr}{O>Cm,ȫŷx]gGmh:Z{es:^xn~o l5 *nNc̑=ha:_ޘIRvC?tDϽ2.!Nq{ChF9F_{ea5m^硫=?F endstream endobj 290 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 174 0 obj << /Type /ObjStm /N 100 /First 884 /Length 2669 /Filter /FlateDecode >> stream xZnH}WU}_$I#L;bFfS%S,+cbSŦ@( WD*?+ςrYh%}g?T"({g7&QȄnKBD;%wґ݈#'#҅_̊ɠE2@*b+)kd'F15K$ͳc&{RZ*}F\e2xNI#Fct+r&V ;Blah6x*`CЏA!Ke'Q 9bwG^Ƣ|2G e )eCOR'h!TƬ|ک`QfOXpyVa%*x0%B8C0f,Fee  l:9<@7bҳ#3 * B$6IFAޠ҈S ց! 43JdM'Ye"U7zdi #V(k))1R[HZV)  cNPAiLBY ǣXzUBIt1ɧmaM" `U#ҳ7NTrh߯'o፶NV?t 2EmŎyfڪǏU ,-=U`PeYɫ"u%hA^Ea7336@V/P _ޠVB`V7U X1լZuWTܪ|~TEyQ#̽s%Gj,fjٰѿ||V'6\3&G: e'iO:-hw׸rNbk׾ߴo=YUu3=.Jp6`?3jѣͅuomw+iTw(=-UrůzzqZo胇}&Wm=.GOqs:)ؿ0͗f"OGG Amף鼾z}\WQⲞ.EV\q@y]\߫/ڪ׳|R}.zrVxLY:hRPz^hhYu^0v1N&-.'-fZ},ƥ7Tk{~lY5/^/#@Uck +6J!O= UVcΏd7Q+ @DZz1 f Ћi1Z8 s?rf;] 㼾XaS8]g8KHMoΫF_~>|y .<@C w 4x˚tW}%_r@ @J}0I3v86 3 am:& 1 Kˀ=3" 3uμõ rL{)™K78`g{=? Z+DDc > R惎0VmN6nc5 D#(]*KЀ%IKB~F,Iht@(*"l(i?Xb!ۨG+N6SO+xge g],=;=u{FxHmm8 5cCHa_16gh8Ehy홛뙛)mlχmlo ;'C@/ ju^X0+v É5#h]W1GO[QT--YC:!:Sr0ӎ3IOCfK< X?8b@uXXQ+qϺ[L C+(PBa%⻯€T48 ^b?Esqa=qL7ra5ʢiʒ2vVPW[!#c:ٲH|v#mpak@LֵoD >; "ӷ)N:r} +)mVVVVV/)k"}/}Vp?bF;uRh)o#U𽽓قDր N&:Ć#f[1b?%pQ~;| ; N!FT[KJ{; YNҭ ԝr89p0gM 3r6'I]5ַ沞 _ldɳh3ئ}(4rp"^|osz@K ]hY46qk4xohKI̯pUO@0VGpCFxj%֧I$GM&g endstream endobj 304 0 obj << /Length 3567 /Filter /FlateDecode >> stream xڥk;bden8ҁL$ 'RHVɟOzg8B^/={QUUFFU/Gѿ^L)Ǐg 5~5??)}S>]мz4t`Sd>Mz'4H ƳR5´ ̛HM[1QeqCc%&;Y/7osO;9R^}T#eB=UaDXF|Z qlP´/Q&w #92N<,CeisTl{3Gl!6Drr{&*!O{=XDzڣ/\%GTz O/s(mv <=ZU!%%l.t5 )U3u-!kA3^ cG?oxdT zVuЁBR*:,R\B n@#,ҖNQ01;.+D'm7B,wk'9(!]LY_fwë[Z\#غ,|v(l-85©D18w0>$Kʑh-1J^%0MUOɩLQ.bwҶ}K]X:*JyV:?")P"}|*d춂F:ljFrt3ݜmr(RK9]UԻL*`f'w\kyxt 'µB@ۚf[qA<.GmH H8-^o[~sڣt}swx8Ö-@k1}B"Ȏg#)Z '6HYL^ռi=?^qZ.E3 }VcUkߠ ҂[wBd;.^}ޤ 4 rX3f%6@@73'&̠EZ)]TU]z|_[_V] r5;$|2ԺpajL2E QVYwvF7r81sхu[F7d9euJ$M2ۣ ytp;aܰnҚߐBlMϥ2PL%\%CKߚ?eKeհ*0( -VelIY5FOƐGάeβ}Ʌ J_ az1,w)]QuY_ ]Q7΢= (zƸ.L4oFKtx3YhHI `/LWe0/BD?&SFͯ&}/%fK`|'A MVGp|g'imCׅ׶XrXEc**7yNBcY`WJ,j1]+ ]U+5s6!*Tq2w5~|דkt$lFVѳ =N(*ׅwMkVD il΢3(۰6\WnE!5,!6J&lbJ%] ꐗL 􅇠wWh`+,蹮f+8C;k/ܟ$dE*ylPsolvu8-ƒyD^s"`ObmbRϑ_apBnQK"d-[r0Wa  ,sn^ŀ(P(mՊgݻUd#dqmPJ4XQ`6Z\80s:i%P1iNY$l`5n[k.&\xpgbzF0DUBTd` 0Gk˱ D1t!ZJ !FHk 72*Yxfyi*hy99s媫ʈ&Bo CQr!A)N<\,I(u.z9\)仑XE)CTG2kω}a/?C߂"!&J\x:Ats㝆XG\͂78kJ|"Ӱl K:g#&:>XV@J@ wK"; ;z7ĺ7r(v+pmےe8,Yh< f$S *vqCpWwG:! MlDH WӂfCvbgCxvp㷰፴߿}~~e9R#SBjdkH֏~y5)JQҤO^GqjaN/3q-bJpŗؾGZK _yZOWsu,'ڎgM?% +[X]z4'}IRǧ sv-2-ګЅWxVbPN?\lUz))=8fn4;ҖKv!ȡog`1=wL2a85m_N 荮2 P5\U?Z,zrk)@Xe}ϟ*~`Q_F&?^BX$'yI endstream endobj 301 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./diversity-vegan-028.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 309 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 310 0 R>> /ExtGState << >>/ColorSpace << /sRGB 311 0 R >>>> /Length 750 /Filter /FlateDecode >> stream xVoS1 $M$h iӺi$}{-/vjN?/I!uxWA|tOʀ1Fr}F_+Ul# &HNb|[uQ Yh5Biތ7q4pV|Z4 , nt"L(!VH,$m8؋}Ջ%*DpI'֪aS+lS0 $u #wC֊aEeab+rM!F(J*=Ƈ R>I` 7޸ t)d.:fqH)"1w*֊sUEwLnSo 6:(9_qb ia\[oUG#;b hh, .;MQ%vV;a(vþ,9fO~Ug^˟N ::[3`0k^ީs-.:O|yzg -{1vZfv^uc$4Ym(̞#2 Nֽ~ pc Nr}R?̬fURySe6vwǻԺhwI>{m2/Q$9CYjyn7/?V7Qn^o[3\+o#(K ?\' ` endstream endobj 313 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 341 0 obj << /Length 5310 /Filter /FlateDecode >> stream x\oO'Hq퇠m 8K'[N褸_ߙ!Krw'KI|3Ù :PDZճ (_s[֮%0#g_\5ЀL@=h^w%6]#Ƒg–3i%U.G1Zf!tPjQUt ?6O Aa'I-Tjr*u0ȭY17eO<(&{aVh:c(kTn`_KIN u䯫.Vgf( :MUr|㲒=~pH\Han?i`(Bo Zt/H{@jOo0˾ %ut8]ut+*~vyM#o~>n'!XC@* BMn.n>f NٙGp:9 Oh:;*Ȍ "u 7EZ̡ ˌm4, x@̞EAwIbXyVQm cjEj.AmE rP ^0Y;Q1tszjsΠ.F)0,`HD<%0hZNC=e bGUN~.B'YEu}sui)pA]_8{wf=)2rv@Ҿ;K>Kg4DDcɉ}I~@)(@mS@Gj`܀Η ]gT]:d<6&uh6o B/\=0Ht"h*2;$'pX? 5&>s\å%! R#GS\֪}4ԃd] -\*'%̂\@jE锶T0Zt Gc!y#?iHfx|XE?kĠTh )b9}~v"v2#Xf6omєES MXvchLV50dZ̝mBJ>*R rSE7E1E(m zߙaw0(X)FMA$hU=% ^cfk?: #R&$mE7}<bjȆA{w߇9\8140u~R/yS &<&=|]Hkr)VKxwPf 3e 1ڞYSOftݱ:1U y=. 3 7c[vZ4l&M 6 8gӻm~;950UՙRzG<7ggwHUչ`*3,,hOPpY8,TLTf~:q]ItkyX}p/NٓOV*9,,Z[{#"O))L>>?yBWc!HUi)xFAo酑Fǰq ϱvBMjgڔ EL0RpasBXi,8o! X PHl f\;$Pc㹫XFe4x-#h^\ܖ˻Nz\mNxpSmju H[ˌՌ{,K[u0JٵTW ZzcpڵZB=S 1<O[ $X rS"`HSZz+Y[%{ 1M1R sRv84P+56 Imtz LoL_i㇇8Z6dwXZTY_o A1E"5̒],X * s`Dl:ɟ8x %>S|3U8razf,^bXeFI?lݏJ [Uߘ#w+r;eJS60  @Xn] MmV#+LJTxto&^QBG0;܌Cv0`u<߻\uow<.bw=QT=>NW'ܺTSwd[Y”Ana⪓>&~? 6)9;Œ9;yR=}:Rf1 Ax?!+Go~ʆk_|0H"|؈7B)et"bÙNe,Yq~Di uyQvBWTEU~pzeFPᄀXȔM&?Df :>.+2i vo/O'62X2RA"KHQH!W,OjM8 #!b^0%}] ?93eĤRIm˔#g)8TI{Ё`F8,A_ 4;^G`u\EQnfA/l{<3{#\Zo)DKwMGəu.rGr Sc.A=C{Aѫ;( FޤQOZFڿz}[~/Cl1~{+&aܤcQ3J%5J,;}ǟ4t.^Wr%tzp]ױXy5ث^nL…/b>!KB endstream endobj 377 0 obj << /Length 4912 /Filter /FlateDecode >> stream x!_P!Z;`XH FS HY*# *UknR*3 db7=Nܿ`7H["Xznb(YݽG YɁhdVWS. CecnZ> *S$;ʊctxw &rv)|jX~Z<Ua8̽f;$dfGv=lTP~W,mb}p8bE }O8A#4@(%=ef2y%q,vy?ZŦ޳ZTxTrřogh AB+sW|6}Rl=6؎:~¬`@:5=\-Î@~vb]$D+Xy 4Dkhm~t hFOCHp- ?'#?0yOGFsf|_]u[9/2j>jDH +* ** շ&m> 'GCq5-yPF-ЋQ? EdkG5|X3{0G9@ԜUEŴdumೀ?, ʨPEJOzQ*d S],CW<&FSW`K:$TCB @JCy(*_JX;do4*)C^) z4*+k=qQ4:]SIeXk-ǂ7%@^r3Qcoc%SR[Jb&|D&%R q@DO|سRbbż\淠 &˹{l7.nL(htnp`R/3,?wqh)wi(/ے[,R"]cU܌KsZRˆ]g s0qyЗJY†f:o:.:9ZL*Eʾbd˛>N_ii[JPB/*A!/Z>_ɮuϦRCGПɗNw£nY`ƚzf:iλؖv@U1f a LZyQ9lW*#Tƚ'-Wa/g!c4N6lis{y+p rnwvJ`;]iNWrrQ7_.E.= ZTsP@ʔ&Àm<3pIB\j0ENEqfJ`|$AJ Qzvab̄*Dg=kmRfAXy %D.iecPAD$b8 6Cnf یy+KcWYVסc;mCP)]ãj7qZV0 w=_NL-pE=9rH oMܠ5˼VH 9-1 |w5ʯ2~A4 |NڲqG)frPdm.1W+Պ^^1e\PK=_yk}S];q[.%{.b0$ڷMm8$7,#r-&bnQˣz~?lb;cG픜wR 鸼KOpSms3>KB*[rν~me=q4vA'%>x2Ó}k:hy%Y%b5:G ӝ2 xDTcRxUhD2m endstream endobj 395 0 obj << /Length 3605 /Filter /FlateDecode >> stream xڽZ[6~ϯ0dcUHJnI&ͦ-hfؖkٙL﹑lyG<߹RjŸz`J*Vxشt95FEjR2D*~/g?4|WϾI\ ")`܌,lzF-Cy+I {J[(?Fc'8R3}Hm +!+>~q%`lhݗqC _/pΚS\QP*_KJL3  3)j:2F q;FcCxSJF> fXsCj;DTQSjp9f2a8!Xbַx? La:Y,jh'EdKGG # &HOp @fK5JFVlߟK]8gXNw yZ|2|O}O]S:q<$"̆KnvNJtcQ~ĤU%1 [0&C*Vᐈ|OtuҔW &lx(􋓇9=cIphNbQqfuG8rý zw[kelS.ۖdnҮ^!Ťp=̔N沬E֧^Op(96Q=[B\k br8i< I*("tj5OzBcuۀl_+`;"+D+cUuyڣx"f;KިMeډ@9VH2ch+F#tI3bioct2s"HRE7^xoBHu6)@`FZbbalӴ sX|K;"׿fx|?2~FN*A3? ( hwܣ)VzJ}Z+q X3-UD 5d?ԯe F񤯤ZʎqgDIǂ᳕?z]fID~(j8plq&96)g hpEBtB9GLʲlND/8-}ů2WEko<W}n;򚺖Y3Eemw{&`C(+r~o^à Y7*Fut ޾QH )WW2߉OaE>"HL@Lvi59040IfIIHI$UgUb<K:Qߊ}?*Tf^NIUc< ^;b)jRL몵s9JBL h:Rl~Y`G ./eĔ;XWy e'nױ[Fz١lRGB4:8!D%&Y>j/ bٜܚӼ =ZR k#SE;vvZҹëW%HrwK Rvp1: ihC p#1%4$RIXS"Xqƙ*ue(@I|1pN)+('' {9V&lOvwx@rEJ .SOvAa*Gc5,Hgo/}a9}az#rCC#9=d6Ⱥ{G ccnĖ{=:9ڙ%A0"Եkuız&ORs>2 /9#/tr+ha{vuےqh-\]J9xɏXA=U@덝mاh9X6S|AJaM괔85Uv*P.'tǩĶ5IZ' ᇤAI~&Cik\M a FN=V _cL(\=B{Mgu[GVlc~z}oTcYj1/R%M>toN(̈́'nʳi֭bwʠ짚=yvِbUs{k711lẌ́F""^8FI3QͼS$J_BI\@ O$sP]Z-JrĬ+TAxEXExkǂ]3r4h;w|J<̣pNn} B M-(,'0 tA!!Mu% t!wKnHZzkQMFLUbB܀ *ʯg!$}NF1ė}v:\8K;Fd=ui7uJQ8G3OwN&y<ڈb#ńdJC8r[OCecrOM\Y"qFz@ybAG,1Ovx>moHM'p zu:v5Ns5e=#N {3ڵ>{o.QOPM/*9O5Q )9HOT_JYAL]RyW}A:o.N(#cl5<KHWmEG@Yn#]PF_74o??csq`I\Xms|7xސc /1O](7>?tE;[}Gq3ؙuU>5 `o4Mү׻ۅ= NY^QR'[Z ؀gQE{g/->t/ endstream endobj 392 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./diversity-vegan-035.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 401 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 402 0 R/F2 403 0 R/F3 404 0 R>> /ExtGState << >>/ColorSpace << /sRGB 405 0 R >>>> /Length 798 /Filter /FlateDecode >> stream xWKO@W=tT*!ACCAPU{8)xY;5Lus|}cv.Ԧ9zX Zk5N>WoߕVWQgw~@}lѩ!wklUI0!2w:6c3#$C6HFNFvK9s<`:7.b>u ; ;O܋מ2\܁r"xskɒ=+ne[Rr,2VUWЃB,{vF8hH:-9B')&)5 &-oARWv5trr$檉fQ\%62+_g mNn.j\mJ d.Yl/7뛧Z/?f%lu[Λ?M endstream endobj 407 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 294 0 obj << /Type /ObjStm /N 100 /First 900 /Length 2739 /Filter /FlateDecode >> stream x[[o~ׯ򐇗"X 7ɢ&Hv?LF,8H 0s? E+ ۄkTdU4WR{坊)OիG1lr)k&++D5n,n&& p o<>N X6 `ć=5:8pr_?1H,O 8 ku{Řف>sO^ZNu:":R lX,OXqc*C$,sQ TVJ*@aIA&ag0΃N`X$Oy|-[2m+ *@- F,B$#4FP",_1tuбD%D P*{'"2*s=J(LCsbyTIfRC0de aJf8d;atw#5v%G$,l0>ۈ6 9n[k*c1ru[k[uNX˞{Ԩx<7{tL^T?Wg*sѫ^7zWEf{?VU=\|^lmX&:Gg ZlM zP6%$"o{d2ŞȁI{$ɨi^;΀auÈ^ᜫw8z;NŮqF-XTfP&at?3\|60IYs x޲Y~ hQJ\jr/^olw bqPuQUEkpt@zuLUosu/ꫦWa]x>S hlY6G4atYz $Vgb, 0&My~8+BۆG@2|v8k|Z0b`oixGe?իzՋy5UzOu8G9K^ۨja^򵤡ғ1&c-rfi  )HbE\dYh3[dLZJ I2ECj1mtnKgAr<`$ݚ\hkkHcidnK:Q ce{LǤL2qKZpkV[//yEs~qL6^X\K#S\\]rr-УB =WIuzsw ]Wr]ڌْZ2J%59O&>`-J6FGdX`I~Rªu@>ԓ莑{o8mcqIg+ ECd`ģhI qX(vC vbbQtX0 |0EeQ#g(5"S^[B>G%Ѩ¢# xs=g=~ڌFM:R6Y;  HH:CDXR}m㬴 0Wz1l. gV`Rt,0HС'S9}Hp2#(L,22na}"8  q1`(B<, 52yd'd)žJԣ̓ILZl+@!Q+evCsJ cl4 [!*""[b}uҼ*PҲuvsU#s`Bk jntd%m0tAd;NckS6Z0{ m`,(ɎfA6@̹i}oc&/3٘88 RB\잗FHY+KP(4PB Xǎ~ h3i,% tE6/1T2$HB؇a ޷) G` pLl#oN|ǃ79びn %gmsZAkXXnK<ɥBek=%vWrz! ZZ˙6%/}\8rQ\7Jm%}5Ēq̘ptz{$,zm2(A-=Uf:޺)RWrZ&%99?,j{_C H$t2lv/`T2_hOn- gvſz/89 endstream endobj 412 0 obj << /Length 2615 /Filter /FlateDecode >> stream xڽZIsFWJDzo`n#qI&Vx I,T\yK76@}o^ŷINī.*\/&J,2yL)ş xPPL3ilAj=b?*K*|g_Â-|Xײt.<ÐC?M}֯'3)Z^8VncGZf+.7XQ GZ<.%N'%ZG%MsOOx5Zl6S+SUjt;]p/[-l ,bGQfQ@1M:pZJRȀ0~c9~:3N%%rو =7\prیgAp#\`!*t0@1PIaݛ`TWE;D2R nݣ'cx[w hӹ "dY"e^Ll/ AiGS+D ɖ[NgVghV@{IUB`/HGQ0ُJ:{7$PzvQPv'7',8>8mu : w~OX-!8;3X+| 4G;N$HQXd}-N q8]/0)7]+?j$!ku!A9 [|jFku!\s !3}H#O!w߇\ վޮZ%ACg0m=Ch>`3X]A,t myX2 '{0:'ht{FguPuT s&]~˳dˁ v g =2/t5b>I~8X=&~cN!Ӓ:8iɢb6/MP@["~C@.E?\pu*ՂHW:c(=(7;ǚ ?shn&З(|,U7 5 zN/RmqlCD僱ԎI!V?JZ|0!I <'˲C& @& tL%#fOW| :sB%g8Rqw]x!,Q >B {@9Es@Q&%|($H&\8f[( Y39GeLܡ8װu>Oe OJ[A`FjݢJJ2&Z@)m v挈;me9"udЮ4_?u~LsJSgd%Q=? Jk8('xlW⡋bUŜ .gɞiOgswkґU@dՖ%]=s \4t}$m<דyR( o;kDĻDhX|GorwR:m: ?uxejS_`[|x %B$^p2Ho)|6dQS\n= 94芛Gi\ ,v !e'x} Kj{0A l'HeºW/o endstream endobj 438 0 obj << /Length1 1911 /Length2 14150 /Length3 0 /Length 15337 /Filter /FlateDecode >> stream xڍP\ ].0wwn'Cp-}jz^$* MA@q3 #3/@DNX OAjlBd Ch.5r~'ʁ.66 '/ /33?D#/@ )D@@mB`hibd3rھhbdPX=5=/#\flP:]?RNjaBdf l,MvN&.v@G)Y=/_z08dkodaig0eݝFvl@FF6F?C7Vgw~N&NN62ٙlmvN'j4yߗkmr235# S{&5;Kߜw?2s3tM,8@{ޞ {{@oK3+< ` 4h~GKw{MLAv6b&iuy-QaSRXd0r0XX8\/G8e+eg{=@חrYT _+ 1:)gYlgn2Z:[M-M,jj Pdj003tXS|=Rdǔ߰%#'8b7 Ǎ9?7+I`RTA&".?ݧ?d_GL,&{ L{HfC2tj )& {=]f/Ϳ{Qbǖ=Q=?ǽG{+{$N8]*;}c^>NL=Zg7п v|Nwwt4s-w{t/̓Lj?1N|Ha\rpyDI p<ҋ#F}#LyRښl<8qps!О׋.i\nd|{~ ]*Nh(]yYs8 (?ongs&߈Oي<7Yc澬U:uj~A>H^,i!+Xz}s]GpVx2V?H-N`ôu"PИRz46&jئ3 5̮γ6\'}u$\&kc`u"cis=eҗ`8Y7aS Ext~W>iFyR?jXYi:iXmxW-W| l셒C z`vu*#q& 2!WfF1/]|5 2L܏Ө:H˳ ORFhwl8ő5~=@6C7ďՌkmV$-V=fGoX;]ӹ^d* Jiif_Ք称fa$j@N̘QgYl+4$nmdmv?Ƚ"ߦUOea<5 %0+~x)޳ ֻ][wWg# WYŘ ِqCz>ܠ>N#`Ы(Bf֖TAIUbWkX{iklb~qI̴\REΉC&A6%pB4Y(%[]{C%tT2締 U. (:~8L# 1iUΆ}8s5>GZ?_`0L(Q|1I]Qӆx6=wr9CпO8M$S*1SSFQrգ8koh=e{^XߍeV{ *&{uԱqK 隄a}zS֗&HmHD&6瓍D_TD$L?FpBf9tBMiۘ0aE3tMu*%fKHߺ8S#12_QA'Cd?>RI,Rm-{ۛ_-_A/>6ݮWāLղ^cr6PPpy$;uМo+"Q#J`^ʯt֎g%!n7 T5tqي m@nc˷=-A&GeLEaK_SE'+as-k@iߡ6Q3!!!i \y!/iE6aըwo֩ XS#[^ qVA1 aQUl7<bmo#>G_~u?}l)fSJbJ1qZCv# `X } Fw8owwKGVT4FPYc ;w k*߹BU-To0@#wA15LԤ?=ΦyB}7*SF.Cib7Fݐ!h$hгέ~~~ӧ{/}[][j]O$}~S-ӚHrQ1i4C祈>X".~5ҟ,5ˢW춟(nݮpM$`XwefU[dVvRU#l?ӒWہܷd7W::=Q/ifj|쯑ѵٸJV-W AumU$ B5C=@ጸyxxIby|3z$JCC;sZYhYD1nOpMP ByEÃHxʼnEmpȧ!!5 Lx|(ђ ߓP^8 %)QG[}RCEQ϶`a;=i pu4vxT`ՏgKcU3*\:5ק-/rlFDZY'xI{zm]Gh}teU"ڒ'JW!b1S<"Efs(JtvFGxVDqJG 0zSN95 V;JE~Vi|ILmg.z}E gkB4B7i?" ?~1u%ꙏM RV=_5B@d}ځ-EB{AfK^`:w>=dpa;L5L6N.w2T=IP1R$.U;'!G!a>z}Bc++`f4.Mݱ"މ,C }1o텴rq#1ؽf I?]b-3HɋˏVsw~$@ D-u !1_l|!\G>V >pєqYFWlSK \zLFBդB9I}حV`g('T*ʘQT*;uw{"ҏצ!,C1IFؽFMEn$; >'֝ϠZP e^dȽD5*#ghen~6x~.}(gN:C}ii^.*E/2-;61IƾB j-Oiiƒ"4R[ ob_45I8DcEm ox-H *w.d-4aJBы/{I7Kߢ7+{=_tnn4]֬dp. />q=};-׹jc;+⻙պ 6uRH&dF.u UG stw^ 8!‰cDY#GvXFRH,R3JaM~]z|JAYߖ_E"mMۉ RVʹOѹl=P_Wf4T'=b:<]E|a'qȎ$zwUÊx+.oGdu3 г0I u#CԾu~Ik|j>Ty+XqhE:*Qz,$q6q/K|9on/*j!aӼp@GUEIs&1ߚ 2C&2V,,qaI{5gJ:/Y8R [bX 'hTkjAH"boWJMyGT۠F'NzU+zW*'V?ҔwZ`{3azV=we zA*Hd29(: 8{&P3L[Q!j7?/Qp yx('Mj~yͶ=\bs_!trJ0[#R)xe6T>Dd,͌Cs$\ޥm_ kY¼"<}6IUR/Dt3^GYHt 7T-\ lz=4K\Rp>>)"(g?<)XV= .Uɷ7,~ N2 "-s@֯1Xy}=q;Yۄ%'УydUHJTꔜYJ]L^ Gd>ӡQ&~QO$&*,42Ug:\BXd۳Ib ?`ykSW`0 kXvmavK/[%p:H^:e.",_*>dPZK:Sqv^BnmU}¶i̍&@8Iy&x<τ1YӬȷԈ"‡'*Z¼S8WhbCu.XR$uK52Q1Ek `qy3Dݜꚼ5vTʙQtO 7}CR y5Ӌ)YLZOj)$tc.cI]hTg^3}>5̱u2OF>8";z/WJYgI`EJv vĥ_^FX=阠Fa k%oyvUH-Í0Kdevm(#6ϵ6㲭f65tP&ω\0ٸpi,S9UJtIR [@ fDF[P\ 8<c"6O}! ݁q@Su@v>V$a֧蟉;jdDEn?WyFa6EҚ"o|u\:$Ѻfs6L *%qǏl(MZBcL8 lC>a(/5W,`j SX^}6rqZ}è37n粦3\D_^0hANZNxiG=Pѵ>]Zp>g{"d sEd/g#6/FSU޽]SCB\pԞ&SMe6|(=KDzg#&6ֽn-Ii8&BgOy/b#ٕI ^ =6<~ƃc.;l4W{$'*?}-xd IYtmI2X7ߞ(á`$([o:/jszHo; b<@PwH]$pWS^*P!r LlUG:É^YlB@H,ӳfceaJ@)Ocd*䟚="L=)ҥ Kl$*Y<y<=]]jKK:7Ȣe"(MamƇS'm#u#k fRkLLna_a۝"o~)%K3h[QTC*Ƌ:BW̵Ox%oXV̫6s >qxX5f1%L WɃK:.j%͍O7%/6rήV-Y,PCuf?ϯ يqzġX$r8\ n͉?[,m)3̬5 ՗8Vx^e'|nd/"ZJrխM[,qN<|OfC\i87p=ZgICO6\K?ޘ6A +7HU:.濆`tݑv Id)x7/A12SVOHٿT%o2lRkC{ߩPN/.l#D>FXQͧCmx#9OV$azw[x1VF2i1g;sElwKRY6LZf{ iF,< _ d^A@[>u`a#D, K ī4 >Gv2 Kz@c>:9PIDɺڂAјtk[}l¨H'QYc+]Ց'8ň`Z*c,+G$ n_AپQIh}; zIԗ$Uim/*y܅{&ɂ^ 'Oku÷len7Mr(<`V\EWxHf,a mgKjACEXؼR"kE~v%&+U+PAӔZ<.O/7Mұ'bTI!41lABSޔj_zZ2k; :q!&7؇%-@DOmQamM~pdZ\C@aY札*2ec4:&k8liY.峫 ?x'TcR[KF{h'۩QY[А4O&6Ds!=%\[ Bɍ,nb1# Oaf84Ÿ9Tmv֭տ0}!'`a$~m v`bFQ &)d( e /n'{k%؎%fd/}aްEP&\$O +-)X^&֯^tɍ$p( ΅yC5ZTCW0 }ii_T}4](뾝w0NYqDŽ)!*d1Lo9H^Q{#ȇ_x؝ T*FEEiV1#H{ŪU}PT۸bWwd)f0k$Z[F10鼷V 3f51_UXy'5J箆qW:&c ,po@<\xM\u&:au<"lĖ;KHLx}/=ssWQ'ƘY q j!.Π4\'!PkI3N t>䙨!FN8k͒c%_4HnHownK6W?aqXI;5+H,L/# pvBTd孜1Vg\ &wZܸ>̪!nށCGT}kdx Vk1!a:˝`Р!>]KaC hk5g j+̂:,-h^ lDl&ա oEr~_0ޠ~y=/B.Hum}%6Sۼ㞆Jkw6M4"nG2D2͌44;A>طT]IM [s7T*$O$PIDQ? /L;IZ~GFV@ ] eEv}3}:CHh}b#5CG9(֥IVf !wvHj?o OPV )'{He`$7Ôw;1D-CECu| n^G@=/ܣW,Wcs2\,<;*pv>gҫl [z3=4O P8NBذE=Q $(qŽ;l~:Mڑ׺6Bj.!>Ƣ 0=w1p#Auo;Qʵ]LOX]*Dk=FLE]NM'-W^_ ^Bbyp#b#O K ^wӾ40h/kػAxdG>m*8VTAabg洐>"2yc}ȠY=thc^C[>l{"_{~3 wT0YBTQ \_xNs3i]_Xv%Tnfuucm҇U$e嗲|iЂ>^qJ/Acc8""> a֬6KhX^5jBЅ[UCqRV(RE'ce@#=y! ;VMCua2TCZ|"?Hva`)w,wd$M$uiFo)I"^ypĤPJ FR5#z֏ӟ$M >ۉN[;C} 5? tWb07:7[ 4)bc'PMb0þEAy-3]֬!9)IL!R6H^\2:KU>'ĝhy<͙L ~wq{K\}ErG>MXHnVD'im[CyHPmL!T6ys u@%ApZ&omFњ1ҹI"n״%y).8m6{$}]mGq_6q?W3a0ݫg$hUagS<|[&s5~e@pmAC/ CB5J$kP؝EFɬx fxc._g(=s.H}g[7A&4m],ٱ*\0\/W>VUQ!lY7yAƦysKПlIi&x LEJJQ7֢MY_#ZrjQqy /iqw<_.G_О("W(9B ,!2l4B( G[iJ҈` ڋ xo,-M9Ʊ@hٴjԏrHZ?18[؅S{=B?R q!*ʳjcSrkB<.鳻Ya'T^?v_i:L~[4%P7Lķ,Èir6YrJkĉqkҌ>iY4M~ҩeRMb4&ݏ9bWڐ\w4}%=۵8_u=z #t`eup? н{~ ώō4n6z$pXx. zH&TUٕEK'4`1X--ahTJ`i% i|&UC2~P>\d]iزMl_˦W_9ٱ,~Neyd`]uj"(7|`vu(# lFj-+*؜gt&—t\+%l?{g 2<bUcSm 'leB01/LiQ/`aEa5:kxB ,:2D֟ubg_F&,{dNFP5M^G !Hf5=VoP7+?XQzb3kyx%,چ\^V"NF ,$BRS(YpbMb_$)&sSD<@Ur",̹ŖR<53Cj[a)K7Ad LG=j]#wjHYgN榟}#A{;2фh+( gPXZ.yL!.F1g FʏR!Z9P=ha6Od=U_<5/:WF<{Hmmrw=ݺ*mDmt[tk^?d^܇~`:Km~`N%gmFnad+jVW'bwi椎X%3kuByh%"DR5"p#lN0, O IQE--UaK6:]kO 5MybIy".x!Hқ8D2]=OH\c7? [B˼V wʸvs꺻] Fc,G ڐ-ـє{j@oӢX9 {l7tȹRVsp8 b]!cv7jۗ:ט\ endstream endobj 440 0 obj << /Length1 1974 /Length2 12975 /Length3 0 /Length 14188 /Filter /FlateDecode >> stream xڍt ';{:m'FĚĶ&۶13}k굺{׮뜪&%W41X;21pe t L掖aIU6\x m"26I'K#3G{.1@ ic t%u775s|_?_FFNNvV@{s#k}E#K9RP9:rӻX9؛Q\@3WY+࿥!lL] 쁀w=hx_$! Z, 017ݿ%2;`bn ȉI9: r4ty7p6040|w[@LP`^9ٛ::9[U#_i޷YX h>s{{6.A&&adKbmnf t200qv_ (&2akc 0y/en|p0p흀^`FC5f?]Z `o:flcm#WPRVBB6ZVf-+#<`+ambG>G=@P7{]sW26`]Հ$ gAh f 47w42]5h@y-#ާpxɿ)F6M+ ὕXYh tt6!&6(+^/? @/#;^7zd89߈ @1~#z{N߈@o_Xo,@0.7mdG]}-,ҭ~Cw~ m Y}ߟlc>46T.~N:$ Ļ:G?ks2=]zVyo@+vqƈ;KM`} 4Z2%Ǣ}#"Tee``ʶ(ōҧ:x'gXV؅ cڟ0x{/v~`͠vN.⮵?KGv*٤Kh#U"fHs 3f iP]fnnQ>IRzD2xhn0E=̺)39ta`kbݠLy$Jb{FK5#رTv.oc "mOG)l Z*eu`dײM0:(t`ϤY83$89Hg[=E^#dapk|\:SZYOyo`ь0R4Sm͂$rԗuNwķFK<{6wKQ_$ˆr2D) a,60O %i 1., wh\)d9)Q:+賮W@b3ƌjy]t#Wtl3<2'D|Xe虉[i|_or멓U^]*.aHbv~Llio PNie41D俴Cv. o+r3Qr+ޜ48C 6V~k J~Rɬ$jj@dl1[~&\ DW m 2sپ]P6GMb9c%Ph-J-ϤւNS?oa(㚯D4B(aP{V{kNSAOL÷4´ ж  Nv{ ͠b" f0' :zVޅ H1D/ۤ:ᙾH-)@$4`QB8e 5wq35p劳6BˮyUC} RJZ`)D#Y*I[]2$h[_ +![|N= %?`"pe' o pOa~pf'z1]3\9EZ)$Y\Fs)_^dvGX+vj7;F7^Qea7BQ M8*Kn QvY9܁T%N!->b|>We͛3Q<M/z|&2-*|a,ľ:'_#kQ[V1V@l-8 yD)be(8q1YxrYJ!ZYQ Յ D $ow4"k/a$U=/ZR5͌ri&4IQo}@KWӒ5hŒfqiE3i .%IsIjm+رOxOlXC=بQsV~D}ns ZW*q~^8WlͰ7/}fe I ^tF DǐQ*ūnN)Q c7@3&yMZMuWC[p**ciR\ Ri3k-i.& =nm!:"?ɫ"fiMyRbJ/H1!Vmm(dgTb*io>YNߛ"-,1Z7j>NïqN~||rrF3a?lr/1vǸW(syڋW AjA0?%mre"6C_2ylD`0{aKQ_3 l"}=K1cq",Hڼ piL: ';fqeP}ԥh.]SsٴiMk+b.2r1" -uP0O~kLرSQOH>BKf$x4W|Y{!8W6RIKD3+gMߙƄUF%)Z&/ˍ%Vc6,f@ ~*en4XQ&Cm%oBCB[tȞK];lCHa')Ԁ'`&pcօ(Y<CK|N5|m։sv-k8 ~4FjWFH~}%c.IbH ҽgwU;-끤QhsG$D@ ^Y |8 5般a :xy\z΢q%ܗⷯD_!Z^dqD+N2fOLAUCcLJ>3tm'^v^~&@}zLt* 7m_]!|.7ܞ%叡/ĹIARA>:^df-jVpan~d4+:.KHM >h2GV~:H3kQr3?lpٟr#~1N}3|L0 |֡:[ڽ4`jD]YϚ˄˱,{`q!2fz--g`DGW-nګc Hq/%OM '34$7?5uLh^TkuB|nrzm,I(\[ Ն٪: S4D!R6b Ɔ18-'o#Yk&,#eq?FV`S_th 8 F~Y#fw(c>a}zi}J54n#ͤubϦYkd2^ Y"fYN|w͂zBam&S,ndf?Y>:ϣR2&,"=LzA?ߪhsQ9QÇK eZ7|ͻEn}(.NR euڬX= r[ ̾]i's ?,a4*׀ҟ:Oן̳@AY4UAftvCTAb|+n(MA_a/Ii?HekT)`A3c?e?ƒq?je|&E mzٺwZ8,7 {pi|@8+Ҥɱw.[mCJ0֗ɘ"9)g26"E̗%+ry~c('1T:/Vr#G$:?q~y+S6ҤQ+MkO94aG HM[}b fd_fH&a?X5?TX_xKFX]\:Vhm k 4&oIc6v?~b/dVKP$Tu Y3F#cݢsZXv6O=n1yZX#V@z5m r9Nf6-fAcqcFmZw >]`.=5ͤ]OhTGM|eX(yXWL=MTHuiPP U Rܦ8/N6y&YuuKcMRe k5 GhyW/)"OQ³ 6{v)Dµ˽۪ 7XmujG[Ӹm!q)tYh\[3݌r3D3zJ0ߐz{OzdYKQk"́dU'MdiBA3h*I]/V6AxN&-~Xfa>g^ʙ Rt|2hVǓmX[w݁'Nzȶ5ZȰmynj|_mRt6:%^V|;Ɉ8̷at9x#@]&9EB9iΨg|;B%P1LZDWX_ *kƁ, H6y(ҺДpr$$,oI<ڻ(_&-+`) ᘤ7|vN\V.-Ppaeeb]{G-H:+[c)_bJo`PE.N ž[|eOEKĀ!Kh0i\㰈\mwH{}{`UoI|e+qh>@[@}v}km3o=0!% nYSDggOIrʙ 3 XD&fC1R9![6÷LBSk*_b@Y﵌-"{F23|I4#T ;-򯃹c*)+U-Y ],'S -,NcuUP}P BEWTjSI#O;aDc-)0ݟ bq-A(EfCPPyt,e6.֤{bKnaUeeR0q[36Ed/Pq;Wz[J _9ڷ9^6Cݸ$'x"@+}ۤm #"c23_~8ϫ0Fd{:RVXf*z mmHʹWP7]zs068v5B$uukNPe< n(Ul(lE׼A-)^nŔ4$(g)U}'k9ުpjTA`Azu#/8h[@'n`T&I(x*ǥ0 {{aF[̨W\_.o(@hÆdH8ւS-qsSSv&lJ ղ=\i+۷t;Bt(o1t{Y385yFs Rѥv EK| S]NTn@ff );; #ccuJ·˙j|R􂥮l"BcdDVr[ #Ŭp(ǤsρYoWLBAI/SEWT@ El+,5DIpILF-|;4ZcsK3Y, ȴ2,B>mꠁNs͠ SJ@+ًONmyN' Gh*ůxk5IT l0n,V,4`z80ÿvs09oA72"JP{b"_-> ndU6Ǔ+Mڴ_`iABbZ2-a3keۢ)iK6.A2M#vV)cڠ-M9LbWHN?p7XcBcw X1o舭_eQ o֒1aj*K"rVs]*yEl1!qZx{u&LgS.LbkyPܡ& NY|`XÑYb ͢.R^:e06<_L> GՆvN,wQ嘎UyR3YdUO`!aqf?.ڄGd+r )xá4G.Ȫi/Df-}J$:/AH5Ch'!Wd-aLM iI $9>Na4ʇM~Cġ0gä=؜WM1@kNZx`)V [{1A`/ p~n/6G#/;VSFI.Ь@|a r@Y^Іw?jn'iJVQIˇj5t+vɔB+`Rb(*(+Xt/:4}pS{ήsl:)TSK] 3Vƨ2S=P n^%li&`uDT-MʻD,', NY-a2x~Eoydf#C̼\!ٗ!)D}gdF$nb"_vZa]ԃ&S =rj^mnr22xd,:Tcn9 PW9n2՗mS"Umv=0M.vJDbzt8'2[#hk4U*'vܪ Hu{ +2tm_Ug&okycT&1JAҜ|w6H oDC I/RROc$պ+cK {ү|CL\uU;Kmϼn1J4:'zH GGvb}uϩTc@+Wn9Wv l G9ÂTzjuYB)y6KBdrhPdy XS"N-|^R;;| %VUaha89*15YB8%w_SHyLkhێcN͛n`x察E#9IRBp1u rUE3*@6&8 n`֕E ;t -j2M'*?2qR*TŖ $ f$n{펍jD1^h _)U]]{G-o4$6P蛹-Aj#J }斫ٸ LH{4A5t#s8;0]Ƃٸ(KTyhu{h>:y0}؁>%:W<-/Rs$8?5LHj:q_yHjz X2S(wYP'u:La^Vޑׇ JDa..v҅eU TQO}gL:WSiL;$Gǽ ${W"*9o"M8 @*4Wxʕ 51PjlbGh vfe&,*{\<:C WAqBTh?4.!m%4bvEĖON=IϪ,fwyZ{$P9&uN&@b<=7u,#J>?s؆2& m8ZBV00LێUa kK;`V. CU|+z#__d2Jk jmN+8|TNv'6n4[Rf[+ 01%W}=0˶-FXqavZ X`/0:7 5RUgP]ɍ K,hrFRA4)H(a駚΅}sQj:W}E1x((ҙMkoIWAMuwsbx%1u4)ޤK*W=#jz)V֚R.ģrDͿdVgT Ef% /ċx _j4nૺ稢Y-"P\tDp>q6ºYؓfMZzl$KI .ݱ9{ t%dp2-rl1ֶ4` a(zd]'SA4=;z--+8ͺh- BZKDd o֯6~cjΩErvbQ-BTWoL #K`8bL˦r,;R~3ip%g|O9=pf.M?Ez+Ns#3>Qmz߂w8Jnc1mَK.KF†NjW,.Yt<' E6ݏ](g7QˏȚq ]mN,/&&u!\3 Ք_:]fgC9LڿtJ4S,Y͚#Qm`)bD_ù:'j=$LϩƀU$^YaG)R_Uyf endstream endobj 442 0 obj << /Length1 1453 /Length2 6793 /Length3 0 /Length 7768 /Filter /FlateDecode >> stream xڍtTm>4JH-Htw#4KHtI(ݥtKt(HS|s~{5sO\s2=㑇 *8(PRS@A^ PUtm `5p(@AHN D#p_/"/*@ x8ԕUE/`sE.00!m  "=]tsww9"\ld80-@ uAA!_EAпj%`\! (ppWuk;A5ppz vG'X*H$7\h sYsTu t v9!]y]age8D#] ~sэkp;oX*g9AՕUlH0PLT(:`[_W{:AUz;!B0k(.nP_4["@``$ jZ!) >IA<2cj۪x x~(@}w' ؟y:WF3O$F Cv30)_QwwJ*n"'M_7$z腀7kA!07#A蕐8K  yCmz_C \a?_6ψ+@C/ީ # O@Xrqy'D@o)>^8vX#\~MY\CY#KhRAC~J7%~P(`#,lWrV%Oγ>"zf,3R ٣ ^IyC̼x ++9\n' ST< "(v:!x`71%YOM%Uv$ -ĨdcOW>dԡ.S"CɰfQ6+ϭ>?x&6q&5dBNvBS{I䳬"?b8@\az23d`}zƢ|?Ы`FLt/ #9@,]fFSt@XB_1F,vwR`a ߴOSHkd= 8) ڤYp ܸ pt8 u(YDџ^| gEt ҋG ?i9{:։ڜo|D *M$bxbWc?ZsoV|<8&6}S7T".V#o. Vz\+> .К< JÚxm+ƀӮ[˧1&%_+Y֐_$~<'Kg;]G ^ SUPJtM7.f>A,(~x>IJ"2$#vxtlYg2q/@ba{S6ZWg-[ ݏ]A[8G]Eu%iN0[FN s'-v yguKvŠ9EPsۣ&;6QL9^\=/yUnY@#~տGFH kd.=fDei[`[CN?'h7uFlf\ xeݱ`Ni gճQ{TCFݸBG?BPJk?.SAζÁzGM`B|IcaU/ރӱޣYpd.Km n RwDhR֜IqrS6HASwn /wej_.\|;"gbޢ-p qw>luæЍ %<$:vS).Gq}_ç3:<:D=gA0uenDzrqi=: !VK"Cl7ct ] lK -wR׿emI^9Fr YX_ԢX'dԬ(vV§kX O} GP2O[I`1}6O،1ccp_IJqfBD3p}h"ɑE]-QnقApIUuir L^@SE"=4gzJ]Q'XU+/Ѽ? e2< 繎[.X~<"(Plcd>^|uX*uCkZ6%xnQ%*#WgUlɓic.y:ID:ty=ϭogc*)u-E[]>\Z{@x,oD&k4Sn @tTS(ǬnVڐA':ՐkU\!5",ڠr*ڟRwmJqV/Oz`\ZՅ|,{^h0c<M 7ޚLJw=vvm[{vfOjkiykϸԪmF}{/{5IZMU962JDs_LQ}k ?H+E;FuFd+<#d \9잜+tgm̾3,\ϸ-j"ڄz^`3/">ۈK ;,N=?V98(R(HJ k`}>a<@o 0r2'Πޕ9jÄ  GPu/2tk0*ysIV7FDC~Bsl$멬s5:66%z)xqY"fCA{H! C1Z*Y\kĒvtp;u ]Ʈ\YP+ϞƥyRhȶb>Hr97ɕl,~rWsp0W:lpc}b 'q9l\{TDO]̴7p ۜ. 4,1dM"q`}\@}/y%G߉S`˨=xKE~D+Tԫe]VL/)>ɅVzBE\H&+/AV%RxkF ۂjHa*lެ+jvJWk{ nrn8MgۆELDeQZ!/OVJ)E;-W~sjJq9@Z)8, 0q(ը-T`5Of%X6{0ܴn %nyO1Xbz>' d DT)%&Mo67/J,.8e)Vzw7G"@qx_viتLG.~݊,MR+2enbtFQGWd? Xs/D_o<޾Q|j1-1q9MxayɌ99[Sp;Ol&ekŘ>0V>n\1q8ϟzWgcH6u@},YP*ujSl:F@9~E~=q"X^ڢzP&0_i9W9sQRǍƚ[X!Tw HI`eJYX\guNj T_ 2+4Q׆6Qü|ĉjցțǫ9ǛQ{_&^a d; H.Y92ulVN}&xxA@|AU y*{)*Ʀu<L7y~+b )ԵWAxG#}̏ >L姼PBU`4tw='C/HgC'd~z =mh$q<7z7;_a{vT cNFƳ{SF}RզܼL18Rb$,t4WO jk&(+;M6YBs"SxK䖓/qrʓr{_s&/Ea |`t6eC&x7{qjzh][It{{o/%qdo4?afF쉦g36W=Aep84 w35~g|K]OՍ#T鎳õ9oѬ yJu}fV* o] 4h=o%ƂEP`:K?_QXjY4^%>?S]yI߾Fak38B}xE]Q`V=,pR७h֐.4>> stream xڍT[Ii$ΡS`!f`CnD%AA.PB~oZF*뫬%LN5SYkw Mϴ/<hƞ&\+SCEũ'wg1c0Vwn%OڛUqG9̂K'!81و~}/d7bgR׭ 95)ѧ&_٭dSeŋt .JRgzG,fRM\-)WG=YO '摒XpW݇r6TLfz x-qCL{_d2kˮc= x\vF=FRWFw4aC)q ~SME7^\Lw;Jv*Cz} l/BFsx6t22mB.aFjrFa)' £ro<M c#GJ,GE^CӚ؃QϐqkMy2R {s}S+P_2<OFT&u]P&uLjq MHd`"gUzUK֪y:Ԁc91Uhzpd+Aĩ [b,ΖצZXJEA%О`/茼du7S7y2sQz#8:n.Z/AaLӹPI"#Y_= Y ٨Us]jV欼$Ϩ[Ev%'hD߼i)Rx[+7MH|}g}CAgPñvX >} KzՇRrtbv'p@D/iC6"Yig3GOhD2IsuZbXSkP<\rF֣QB׿|-穾5Ќ:^5!ݯrP͌l&2+\% zN+jew@Ƕ8RO/oDŽ4X{8E *,owlL=Y͛ǁMV^)C/Bݸ&VX6iVS]Rq?ښ~|xv.5rdyL̩.'xIbcB(rO'h9^aof| ,P +NeU)W]GN dX%-]ǽ!ߞhG&YUWkaq!WlV\4ٕk(TWL ՈƑ]z.i3E>Qّ5ipnuڼEWDaח8l7וEA;Qjc?S)|'2P(E7]MnsN Y'ir=rֲU3z+ʙ Þ+E~4|" CP#z6 2)l][uqvk Q{᝚;Dm*;CXJ⺷N-{gmڭ%R;1:n c{GqNe'Ldo`ƦTxr:KMIݖ F|9]tWvώ,Ɖ]ƗFP0udE'Cc~m[!cz2lyh1[ȩ!_%oT܇GHb+, c߫Z}oHa{V@ΏIf$GFWYھ;>%YIOq$L F?dǴ=F*L"h|D##_{~Y9͔)Iev0ϗTB?>P(P}4]+XvͰ!OI71/jn {eIY4qU9=e^\C@!|"0obEp + k磸 ), a'kDyݸYP8Zg+ Qe`< إƯ}2d5c ZR .tˈ0Lo6moksB_PC) Jm3#\JFڞc: 31^ zG^5Bry!o'X+y"D&Hkyh9 Sj 燝Zprlu() 詛?PKq0̈́Qt|e+.7X,mL|`o"td.~׽0ۆ㩛l-݁tdi*vf;,dZ ۤN|r K1эCSc i*G$_ ēBT@Z RB!5~W;iC<[d?Hț 5~Ɇ7FܧP( {`cAY2yP qʋKN/ճmn CXl{3#5*TQ$[M`8QDZGǟ-[]{_:ʫaps>"zu85TnY/fᏥ}<.>&Ryxm]2紐E2\Qxm%`gj _Rz52+Eh}'C  B8킯S[xP4O_xYdklM.Tn~QͦEwG$>4 ]VұKS_ɞbY;fXXY$ t[y'4[nVкJDnhr} cLJ\QOi`gOTu[ؓD8 7ٰG~f2Pଝ_kKt>d5̺c̻-Yk-6tY~1Z>xw;$i6q6tI\{޹Z d#@OA]pcbUX|'F֛ݙe\ïFJ-6QMڎI+xYđ!)?}/$2"ssZ~iR(~3.RXGLZ)'@+O~ɹ<, \fU:}9E55>XAB_bXuVd))]dm5sH^\t U,ኚU+_m` :㬗yTZuUG7*Yh1C;"odVt"i3 >7J?e䀟^M:M I] ie7P 9LnS0JcS,IqCvO*S[qa؍Ƴ]ws3sj) +0pݓ-T֊^>ZgmWd-V[e+yauI94o }1^,>6]?=1)jU1- ]"r~ԏ zbʥd|L WoEophЂ`-IӁFX}U9DЗzeX2.kݍMDadaNZZ.+D& m Z֔` `T9'#=~;%g&针S``640mSY%:YF_N[9cu9C.7^Ҳ3a994qeuz>O}@CWm9I?p3qbhꅥ cl jv3NnC7(zSg\2ȉTs;ڼ÷! 6=5I_Ǝff!{2v^H!{(ms,ay!C.n! 5ޞO^wW[|&tԒ' jKS |Ru-jy5BfZ 8|Z 9KIe}Jt7aFH^cg9f&8J޻X !ίvVN.56<}UK,W/h*nbnz?u"_hJ;ÊY6E*W֭k}~0W9{ћ7e⠴s. UΌYu|tŽ4 !iXb9r~"fjr_T#Bk@s&՘2#m~Y<&̙nAG"#[ =K#T%E<.}#t%zu|5w^pq{PԻFk'#S IRp3^kow+oe!yceޕhhx89~ = $ԚR3b {g/ <{P:кnMdkWw3(:~z-N,kp. H-yti) ݤ,HYm츍KW7\>O/Io\[H[% ҔY_0ZTl?7@+m Dr'K2_\,չD',Jx IH̚q"4x蛄zSd}HL34~IxMcrZ0 ' Fк>~;xR,CXؒ eqv<[JyX⚳` seڥ0-[]gl%V -֦iѐKeݤ* '<Zp wM\:OUUiƂWo\8 *GGB)v<"V:3l7Hk q{.O0Iuܯw-Vnʗ򠭒tmU;?( KOMgcy՗ JM硷}?AxL}^ސ@]}>{o|k< K+_m6~l4];-A,m{z Pϧer3*[F Ź4.)$GrJՓ5/+ ]H'W%bR LsYz+{Rgෘ o۲28Q)DJaña>hQ̶:g=TU҉L!No bu3k!}}9(m6=?hn2E1aKԐX;${.UMИ`{fv/( yVhLC^,Xcl6ՆSSi5%;Er@ؾ HeWqiltɒ-2ط5}&qM&Y]yyꕻQ]v|.:-eV/~K }|6kDK/B7f(uj!!*?S' g>~( B0|"G=>:@\<ƺ5X-sTE KgY`VZֵ\ +<mCW:цe(2Z(c["&kCX c+ zB4&q>ᗴd)Il<=txheDlXeV}()sCtv_TBi&N֋D KZb)Ǣ& Րv}I ynMr[!>=+I랯TD`uu 7r-vd<5f;O G)b#,[ &yq  h]J!0mEOLXm7')S:#RH%c""XT LV o4-׏qg-p|{KSr=?S{~n|ã Tܻ \(z BIQfX>&)ErUHv- QE,f5' J5DE}a9?!zrcV ͩNul|\n;SO^cO"v%ʒʘs3tD*D$A5'b Z_v @}DI"%BBO%Z@2;#u|0:eĬ' ֌E/|a/g_#5w>f9f슧lPKXSʳN{Lϐ%|IJA~d੥Q s';=,|mSYڤu0ݜ`77)UhXJ, endstream endobj 446 0 obj << /Length1 1920 /Length2 12981 /Length3 0 /Length 14186 /Filter /FlateDecode >> stream xڍP-wm4\wN{pwKf9U[]{k79 PDD bb02322ÑZÑ,le!4D Aorvigk C;Gn @ mg t#ww03#Ҙ A;@halh 3m2ZT- Aks3089S\-@eh2@WkpUs ?*v WCG M`ma uzsq5:޲Td @?e45=gCcc;{C[w [35 .Kr mM~Z;ٽZXQ!@\H `_9;Z؃,;ۘlMDll 'Z8ZڹzZؚnٞA(%͛`c`d@7cs T(~z0y: Gg& ob-ڌoc00;[k8b9qEOj4RX I cfc01r8;_uW;z]"_B`vo(a#3p(WoE)4 m,x3m ޖM5R ÷u5{4+=#r 'q 7O)Wp@E;'W̛#޶qz*Cq1m1[c;0tt4t{;7dz[S0ځ\o={L~4;AO`qDFL3A `8Y *7߈o> H|ѿU`K`0FoWǿ2y23Fd/`|+o_g7dyKhg4wo֟ۦؙ-._m߷ڜ,H 5ķ ˌhF?.| h 8oghY~W-J; uzL7ߌWX)_c׳vZqSGTzKG$~`Fd;z > dF0!wc?"Ar7Y 9ޅW bqv YL|.-ePѐ. -H/$2pUC+(}"]w/ȂA(b{<C|{@*bOwC/Ҿ^(J1>+4ηPyvbrlY8N%("{ӡ-SFGW 8lڸiɎ=Eh/*8a1ýC$'z5zǸW_yxABtӘ޳axuhII!*01܄5RbF ̸~$&Ofň]LF-ҥ^QEFjkS0Z&^jqߙ4R@}F>2>Yz^*_otG!<4,蛸F҅UםX&bbrh"\x CoA<?0L-̀#h42e>fAv{&UfEy(܇~g%y՚sCs%޾&;=SX׊I#q/ knj"7 :L <{*TV|u~~C#](qd ܯ8#ӖF K2f5r2]4m],+Cّϸ+L~h9asYKF[9apÚ\ÅЖvUsΔ]lrÅ[`Zac?6#z愀4sZI8|@ݨ{STTg4ܱPy3-7Zɻb2[6HjM6oX[ɦ; oWKbʓX] RQ. dZ*̬klayzwN0\eGMRfKfA+W8/܅͛:ݰu;[&L_s-(C{H㕕p|kVT;74oq:tt#tb+Q%e#O e~s_<-k 4}zʫutRiM-,e>ψ_5@{1A^0.!6e\S}}8v#Xij{Me{iSIb{_qQV Ul?O7-Эj*5:aet%l:R} ~P~qO >9 [ b!%TyWR$&J̩1 63pA NIM{$v-0@@Z0ews!uud&X6JJzҪqsl%\LPR<jq X"{*rssQ&~"^P$=< "n_ o~=\M g,-Eؚܫ5Dip+OZ;t6n K!ov\B %#=/4ۿnM- 2j!Kq Cۨ3H NM0TMU ytU}ĥK'Nl w7(Mhkm멃9D́`>"0vkJy(c(ߞX`Uk"9ކc]w6%$9`Iqtn6t rBNNFޱYϽN͂ N )Y]H b=e)gk:Fෆ_(׮XЪ<߾"){uhi%2"D0ӴF_ݩ;#\Q+`U_kX|Db^`e3 NJXyzd\>JKA >) G o~<$w=`Cf{F\ʘ$D# ;CɃU;lj>3ܸzUyu}K&T1{EJ8$̢[Rq# q|9xMNa'q,`wZ X8,X NcAEuzBhsUYbYaE҃5c!`٦̋IaZE%q |`J l7p;2wYz͞ z*kZEAQepz.$:3:j̫ܱ.'ab㴟 ("*Ӹz' Fzl;+hӊt5&^P%KFR47mⴋ(/Hn~sYRE|ڡ ʷ(/dRr`_81YH q @9 -ry2[ᶳCiy>XكCў",Θ6LCajohO2:p-1ƨj0 $9UØ251sԩ@H0,MVȆs-h퇊XPLR5,=U~]M?[T[LWvKmN ]Q(8|wŮ6F^T(RH^Ntҙ$,CB{[3 Av 1)\x74wJ7L.N -uVsl)&Nɒ5&VӼn|7t.$&нZC((x4G#kûa)FT98}>ĒNo tY'pa4w4K?6~ϥz5ڥEO'03Z7W׏9񪷺2M'JDM#pBWܻ\wÎ-``ΤYs0E/@QgzU%0|"^x{{Pmt5HUC ^-m2N'|ČSF]oƣP#btĂ{Z]L]{Ӽ;'Nsvǥ+ n 8Yi~ dX,s:g*ܜ_0?;,\QXڙU6"z\lM=g7C WV26@2eVL !c^.딀oH - Q!y.8r%t3[yy=7%ż_T%)JJO&a'˭WمIP)}5ێ>6]Z|d`B2)o;;FՖsovn$:~Hq7 8 r~G(,$e=}1,\2ޢeUQ sK-H[2 ^yq?90D[NgJZMX^%BCD*x%\"W FEzBc$iWлO[SA[N1OI4ŧ{rޑi!nxYKޱ(rzP3O_Wf_Tёxqư}]D%WUN<𮧐y, a\ovcX=z"O:rЉ4D+7(.ߗb)^͓܅?=v>SX(8>W*S󃴏g t=~oX㕷x9K|\Cp &tSd_ pb3ȵC<0t$ Nˌ(0㬱r(0bCCtn :J&Lw%3уSu5ξC\ɘٴM;'7p*I>8fmU}#}ܿ')Zr+!$7ڍtH:;Br;GYT\P;燑RH-֢!Lvr=T¾왋;rYԭOr9[_p98ʧdh&RX\7.,alb'=$xFv"MnGk-'`*CM騢WjUm"{Iܻ+s?Ϸ _kh`_…7O-:|_r-\˴y5\HJp6o,˞/ܶ9|j|&4@Ot@%&iG &*BOwE1"Q?]t!ѻg?pHO+=_e&'P7u#`p+߹~cy$(+JϾb`M#Fğ5+ݻ/sh鶚Nş}?eեH Ey`8=͑5ǡ7tLbz;e!UE^V@4rvHǘJ%8o:a k'sCft_) ~w bA}7TX#ƒ3hwG)g5>?Ɠy6fJxhACH:2)q L^;ঠy{D_b}K8'M"#2'R L `T5p)8 @)}yR%݇mYb E0NU#&@Ƈ S!\̽*蝹,&KTJ=!rwt\Z~aO9-"=Dw5;zRZAn">7] 20"ϓLDĄ,1/ɂO1>Gļ5P驚3H5Ξx5Jǁ1+`|cIeu:!w#/YiW_?%Q'%NaD@LI:!;}EӇfwS}ژ^;ò"Sp4$%t`HKPI5 I=r?riR0n1cS˲(79\E]rmQG)YvʕŴբ6{}*ITO{X١w4,_>Xn>_InY^6Vv.1ރ}h%PWB6s13ɊWr&M .`dTa]{c<9Se3~ XNg6@z Uk&_7ps ,Ea:m[FL~LPIb;,FV~Gddžk}]euz(Q6[*0c>n4[u_^[1Y96Wi^aR|1¥1)2s/{9fUA,]}t |\7S_D;" *$hޑS2Q90]it>PUFq+ۊtpx|nFl:$ıQ_:~`bҋ8q:36e*T[erOe,:a(3= ~%G_aASήp-91~iu|}'E\cˋ*(0Nf01zś"ViŽ| 8ʛIWEvWHuv5 ;ؔW jX[͒#&yqEϋu3g:>Jǜf(25; mIC;j'MBcq"ZWv]$MޏZBF!Y|$T]|9=: UR:kԻݹnDEDN菨2(z>ճdHel9ǝeډ{͋4q}_9 @'3Gu %}ũ#5}4jDDi 77i'Ż!.;Eӳ5dEIC稩$GE2 05Am`Ԅ'I+ҝvR`f5mX 4'՗8EH@JoE\*nD,\i%2_JoJêAqp=v?L~I+E+?[^#鱑]84WsUa߆U~>8ٜ/%x9XR¼W5ӝ Cb]ڱP)v)+V|i d$zO&4jE,ccney֭ٞVlhF>_1,@F8 M/lc >S<>Y*ܶz 8y8)#6_fZ9{@"(+KOki(I8;>smqBFP w6_P:N}6'#RL^oQE;Mr`^S@L$V@Xa\aX]4R H\1>zɍ'][~>jَODgQ\ 4/UG&/ C]~{ )yѾh<&[jd ǝ-6}Zzݷ[>IYS VsGa%uhMij\+bU2 μ]GŃI/C\)3qG((OǂCh>_Ωksgjm'1EqLNo؁3iNѲ^u]d֎%CHny.xH2#T'*W7*6k jgfB6Jq)+;iFс"y4u<N]Hs&`$]0#Ipۃ]5YC>hJ+d\ve WZݻϺ8>^-=(qH}$Uf KS ,;v;fJnlP|D 0?-*:vaOV%J! WQk&y#;يx@!֧A r2T!bF3 ک]53So1w?/A;EX5*_ݏ<0n6&KC]&E*U 𪴂;hٰn#N3ԞI֎~$_rKb+_J;zI3?yߝSďK,?ҡ"I)wлM HFSNCuU2/ Xj:חI(Gm/z Xd4vaA\I ;0KxҬ8|3$jcٙS9Ec+gHOjdw{ _a80!#mڔ6^[ grDm)ecgbF %z}Nr6']԰Zo'gP/3Sp)!p{Ղ35*^G6v#rԏ[l ZVNE}?6W+`W K ͋~=4xE6F9lc`!Zh8Cۇ,)zJ[@)ؖCl/2 N'>¨irIhʄ`k| $Z[ےU'.RhQ e]) XI?lQFJ>3υ&M-QM0 1v3E.DFvlu8^-FeANL6_G|v9АMBT2&^:ݞkm X$Nr2u5aغߜI*BbQ(Ns˥&HV1#+kGL_NVn?z4Bӧ-'zA=yQǟB \CQ NЬ-9L5=~ 2E* * n(DwȜtotu-Q.P6u8Y"y(/׭-mםHϤ7$Um]?K~ BNQY%k' QNrO?锰KTswe~ WLE5Yb%er2vFc["|*_fʍ3gQ%ҋ=uiÛQ&)H"("T뇭'jzcGA\.'W\=nmTJ:bݚ?Ň_ fb \l0MrƷcTbJN}k'>TZ",|lZ~ /č^KCY1Eat*^}ՆT[/7STxbDL8qӑ{IT)Ea,E<0U`qVݙZ񶌩jG(B3:86w,ih㜙U47vbVS˚CGpY pmԻEr+EcNx~*|yv/uMz8ZzE[vͯhZkп|]VR!86 ?''c"٥h,NSm)x *כP&|h % j6_gk^qW!ĆTϼZ}L0>}/G/ B4c iNڈQp5)hlQw`ܩ#bolNX@`4 ƪLky; (H0#69|[0YuPf> *_빹,FWnq&3u74J$hU.F5?gc{-D+ZZ$ÿ:>f!eFQ$munZ:v o%mjEkV:rL=< (=㋯$ȨiO9֋0idk\MY7d*"mzh[B_T6p{z>TJuϓ z1 I8Y#q*OT+W"S8 AN!1r`j^.W&>v+]HǗ|RMO)c60'wdPy,C9-ox;8p!O}a^oQ^=CۯQ8:>Ĝ`!{] jkI)nTCBZR0x&pm#A-I%%\ilQhZO66> stream xڍtT>R 0t 20C tw %4Jw( "(q{}k{?{y@!m+pnN@V]]r<8 z#AE >9SA*n^@:'@0œ]!vp6ZY‚N`W5 PNA]5 G f1{8Yӓ s`axBl90@='@ۯ {\b !2ܡ6`Wbs@ V `97'Y 99h*q½'C<@Gs@AZB g<7kW3܍ sDe,99p7A\ֈc}Ϡ0O93>VApف~ v~v rt#&u9lC!` }3O `v(noq/)=n+sl`PGK]GSD~ |AU@?]NU"_{!qYL`-7̀@kćL_)?Rpwtf 'pa@j-Zu 鿣pBP;98|7F M~Rs@Z07ϷW /g !Bl_#>0\]A8GX_n@m^ bf-5s\?o_.._?vwuEt;ez `/5 Z4ġ6ZғccL (҈c +?t-I7Ղn 2.9˳|{s(lX%ܟ#O%^yFP7# 4"^(+5\-mD(9ֹ)b$u$>"B3e$D9saIuVD9W֜9I|7\+8&^bB|7EXPl]!qƠ1zn+ {X0܊ƹH*d׽WRJ8s16y|ҏUuSj|88zX>/]/+n%zcLYHh1gPJUh!:~&M/fU5ט`fZЊQ>V&ֺK '`_-r۹hQ~-3ղKqhr6JR$wj~;> Y~0`{GcX\dq' $}F{[i]vW Q2Z&t͍\oդQ#9ka}a ktk9ӳOdIx:8)nشbe;((vZӯDZU.v-B*#}Y"Ac8i\mA8Avp܅S%ٮt 6y!Tv RD~W< *mU# !Da8WTL$6|gH_y} Žl[s]#(8Ѓ9T }N̹n9/4FszJw{Hg} &ǻ%'MខybNoY1dtR2\D*_jV|MdXd d|&?CUP2P-ϰH܉3Aq+Oc a§ao /6@= ژA+<ietaS)8hsP]NI[^7 v>A)_|hxC{>azFWKdeY[ֺ%.+zz5gdF?asA07-^X mJpیp_kk~&ӪWUF׺7jg8$2}@6+;Kf/,vI^䪜HEڏ-RҤ)伤-?eڐ5P~7=LԒ43ol?~ ^{[E%0a!w9[^3' 믜i$חV|,5RO#$˶ֈqYֆ\ --ɞl9=O R7L,?Ah}L嚫j몕C/ɂ"3&rǸ]Wu*'} i%w TCAfWX 51S *Zj$ۺ%#** ͷGԒVEVr=Ax3UVLmJUM1I+W묋Fwj_@+ y{o5WndٛRc@1VjsԶzJ6xF.]XIӬ)xYeEGSΔ-EYzE֗{ךM!~|ƆygVDC6$^Sl|E =.VcWaƮ-mָH;.9Sݪzpvq;?洕UsH)HOxͤs:-NgDN~`QyKƻ7U}p7|!=/#yhHu`T+@~9G,6(*$hXq̪9/_DE=qCt:}K]e27fvfa=jq4/|hٲRɺ09*ݫ(E Q T{Wb YѶ_'Ar / qte]FpL.gXݶC';M8Ӈ G9f Zb_ϑx&L>Pkn f3&:I7{w%>]+o{3Ğ^Yo*yӲ糪XnTz 21 _.OC~|~ ^>je>0eTih?CdM9ބyȣH/<ۆED٦pPDhj^I l4;ozKCΖx<}c?qyhٗl"NG]! |ҿW->MeqcՀOh.Ł޻,I.MwQE :#pu?xH5쫜Q-۹f) M; ufHn*,X7>d -#LYCeTUY7\$fyiՋUeVC+V犻ޜs$A.UQ_:wN|Ŋ`kHDgu7SNYZxzI<>;5JB0s?(qijj?Tq0Q ޠkI($y\E16;l4s.]Ǧ]i[f{VΧ./{h]麪2CO*\+󷊔#|9g]"j_%,~l|8@NègTް9߮}KC0~ybA[^t2֠_øZC}#}lieQq0S6gG=;oIBCH%]!_ϕۦJ={R}G~ Tx0 lx5<~XǺl#m@0B&_ʼn|=7hjiw拜PmZe%.4QW;c{}zcn0ˆb+&Ek". ;UJ?N֞(EaRՑ7L<ٖan"+pV./sSTS;9Λg\<_Pm|&j@{c k}UeF$H[&Q(c=Hz&Oir[#5o&Xh[9`E/’FKا=sGqe*+x g,ލ7ws4)us D[Ӯ_>%X(#cB6`2 1NkcsH?r w.5 ̶۵٧LuUU+#'$ۗa[<'r7>MF ѹ\!d;0fw2eCD.st`K \iTVJty3o[>4mUՋŬ1AB ]~Kiÿ.bIJp\>JE5}-_yD^ݰ sbYwZY\gTVjybջ\,x=Wuiғ{guB1Na>b\ j_չy5$]W5-y%w1eS4W.EUPXp^`4[jEITgeZ&ܒ S|G6v]eh8y_o$$0), N};x7kN]|%;ƣST{1S㣤Fү,egHy.;E. X JJ0K~5vf^QYR-8vp̎MIn ,VO 6("cGW?<8 t HW94DWi>s>}cc8l˗aOPr4ΕI3VH}&UW `z|Tbż-(eDBy;6qx;Zuڽ#qzV3- K,irei[ CI&,y{f )Ovl/bLx$.yWJ 眳*h]7MwaYL fFҿIQ$`4Z/ ʦۙfY4z>*-ہsB1,oYTB1{[we~=tc6,#y { 6qz;{N#T)߀m7 2F/3ibP>]+Lm#8j7 ue$-&E~,m'!nV+ db'-+Ol՗Q.&K^w'@UӏŢa'lЍ+kx7rР;"W~  m5 Շg&zBW08XlQtG_DN_g &oUk3E02YӺSthK)fh9܏i'V5{]P8Q`c(R3qiйOnm*jrܟUу$}Z,&67JԜ!,fe}1pW"+/~c(3t kk&$;!L^+Xo f~^*f׮YT;/aSS)8Sݑ%_9ϐǙ7IHb#O:B!Q˖`X7~hh *ZIV"QX % \W Ĥat-QX7#P =7dBenu ɮL |-i"Ns FGE3=sRV ~#<BƥWFXxV>j25@-T[45ÔG jkrG.M҆2Q$ɾb;Z{b endstream endobj 450 0 obj << /Length1 1661 /Length2 9790 /Length3 0 /Length 10873 /Filter /FlateDecode >> stream xڍP.C0h  ]!ݽwwWWS5s QP458²FFfzFF&D /1"lkU&bʓH9[ @lHڀ)mfN299i0ZƆ6YC'sƆVe[c0_.x̝\]] mi`'s2N gh 33zD 9O*l_-mL@ʒ2y;͟d? j/ߎ6Zڸm`+@^L͉`hchhhjob24z%!@LP`_9;VSdʢ6&¶ 'G@Ưewg66S$LTm I("Ŀef '+#;3d3vnC -~`l zAt4tAޞT!dAd'~m :{@Oebkc72h+ iuBBnO: {Q0ߦ6 Ѿ?5T-5l_{uY_ϣ߄ H5luh^@u lsieA&`gJ:.0YYn #\Ym@ o˫#^p|?UGc:;Qc[{0tp0tG|m+bx_dml^M9{Lm [`0(q FL" #ojhfhm7Uou|F? >˿0~?W_`|eh`G\L_m=k3XF@n cĕE[c@ZAWiس[ &B=!9xUrAEmҥ^q;573bŗkBŷyBJ "71Rx~`9T]*S4SSdGɩhTe CΎu̧HtRi;xךw[#hD}R.Nhܣ",5j9%.FBs C0!5Q~叙_e(Nh_"~Dž댩f>~RSjCȫ|oJDMR4^?F4Ytƶ~FyAb]1`v(Y IP|YB8(6NN,b$ ӂ:+7OUCO8>_?[`VšSY9 |BHՔhVyT8\Zٰq3!P/i)C>} ֛y_BqA u+.nBA}<5Swٌo} J\ b`l&]nW dȍxJ>@Դ( hFVKGazlBJ&:i6=EZ=(oəv* (D8~6R u|ԺeQo§z>q!}dO`| d^+;Fa ޖ#d iϋ56zW9O.W5,G 3ByL_ ߛfǿ G^ EY.!9qW!7I^7$!U!]Y 'hT 6.by{. ,?eH%Dǂ L~x:tL:&c$i+7_-k̚gSau0 <1Keql-EjޜbQcټkSz -,~YLM^>Z\KS]Xe43[]4(i,.@A#p-r⺹=S{*ZQsj }76H?_8{Rt*s/Lq;ji:_#~nS e&}f/j %lL` -sO*zi%_=Xd?wSlCe@n= 9yԉ [_;4Oډ)֘ CSԔq3{_!B ccc}1XUktӧ[LZ-z|n6` h]1TI;p&Zc" Xhr;7W49k4n6 [=~D TM<kmYhмW0:u~dJ@Щ%4+b&P>TҹKJ ]*)qAہ<$e9,oMO4}t )jYseyM`lʜ2qE,[D]ϸk6(uUi6d;!jȣbkPMVFҡRG5i1b-qg8X){6Bz|KǶ[P+B^hK*|z.QwXP:hqRIRmH~MKv @er%hof R+h}f9&.(WyGK1+'g 1be W7aEu 宊')Oe&Db"5%-GҨx;( rDk[@ E ϶)>m7Px< ZV*- *U/ѼC_}^F8m+(@:y+ ow k@(tUU讑 Bp5Av HVA@ MXD7#¹Ji ڲNAkb*xVuXy\@8E_]lNy_ Z-?)Bc}C#(xG'22>|/'5wFa t]~&e-R̓{g$L/6ZLV,=҇)ɶ(U.@'䚥ܬaKxWUךt8kOAdTK(K%\ ,x[Ѭg L2&%曭?<)^p!洃2;6yT8+ krK} #N:"̘-˥Ý3@)nVwQ$2bD67 ï5N;j_o Y~4|{bk>_LN} WES՛C-z/f;C^A4y;LT6bE1Nێ]~ MVcZ2L,` qɫtaG,ơ!񭒚c%yI2De7ӧ3芷QY#zw=&l nA^DYL \#jn\ma(-?0v6 ǜպhZrR/3_7`V2-kp88"k\M3j]4] \/hI#Uڢ0ShaL\>%NkiU⣔!~NP8af1±&z%= j4ōE_|!IM{yYj5'@!z+阜('v2ݽrt7$A5 &4yir!\Ŷ}}jXwL.rVbZܽE! 1V 4ls uQ’(:=DP C Tl%jAxַɏD϶}N,M2H\7: ǀܶ^T48 IuH:93[(ył)ƽ&]qwÅ*WG 19EV(hN]Zg'@2~5Y٥@:E{Ao> gyB95!6wrij[<ڡ;ւQ)0ԩK=yu0{S rs/SC_]?YWeyGwL1.49iF*Ueu>mܷ޵5q')Q]#2§LLӾ3p0&Z0q\} t,9yW!-sD:YCE{. `k(ʊ"VI+da%tS-JpwBACόѮF  Q#g6l?|rړ| C4 @B6|62LɋofFf$6az=T;y Qa}GLF< B Qi-oG(d"6[pctmE@hKOxKRYY"s DzDۥ"WX6&7-"i!xG7P*wtVŵKEwC:^D6+M1 kgc$h7+5V^FuV2}I ;`PxgƼ׬i}AL.c"Y"XwB$|g9m.>m4$  (\/_YhM[bky|QA!n94[ P3|FjF%mF &ƧHZY@KQ:okzdL]Gk8CD衯UiڛΤwl{alCE|WJh%U~6b{"8AX@PU$43Q16xP_Ν0a$}7" I ! /\MA|Kz_ЛtHE9j:6\1R5ѡƞP=FܮʈN"A?Dc3&G@9-YOe +b:/au5ӊ Q+ PS~qNLHR35ilq775FsB _ ǣd6:ڎ01XaMFS&MϮT]X w(6(N2 Ac&ӛ򝬴Qke[[dtO9tn9}b#3+tSl\ ȍ'KE/!*r1:8(&C`Ն8qRe߭Xz5;~:x^(1#CH5ڗ.M 9*|NIuw 8U4uLB̤b4a?Ѻ<{b.{wkOA{rxxCѩI^حVݑ/G0UOWu9 B`/|+bU1 :x$+#k} U=1q{1D8Djf&,3et&!7&Y|xN!?Y. ^sU6x*ǎMS9 j6R@;"&НKP r,SMJluOIΏ`>bc63xH=>{.ѥ}J:Pf'P&+ɀ>ak2߻7vׅ/`= Ү@ kԘ ~+TPRQ\Ljyɾ"zƷG0a(z\4- a?y.2g>SƲɀz9Y]& kP4c3NC m wo2?bP<83jU1<Η̗4:Q<4@*НZgegf+8# fGRCiSTtΩ} 1BRpF+#yjU&=bȓھf|t_K'cN&T)?&D!&\,Psu1?pByNͻo׊;'zB2?FrB7W3/wJr&%ziqe!+_R-(UZ㍈-rF }'2Jj7qs%d J7 D5*F{f'C҃!]{,5)lϜMw#^q糦҅n삩÷5B*CК@mNA'"t9"B^T  +̂b_sz5bD)If#AL,i~Sa b .U711t O796tf%Fɑd ɾb޴zy=אs 櫤Fo›L]'s_EY =L/k^D4CRK 㻺\4 8z #c#А$ :3ĬUEُhbAUWl/yU>v&-Q54.7ϷgF߻G-ҕ4"^D5w*h68޵b)&hlq3Z[RښjlP2*2o=x(h>ov3hq o~X+:ځπ&~%={%0xM+G@Tm:qѳ8:[]q|}: ݈Hպbt tZ,s9PUuC~A!1 JXWI.?S:[ĵ!|"s|)+*I"УPR@^̊Ӏ yG!ˡ!~kD [ꒇ,yL-6xM E]Tw۳|L8;([#V91ӄEb`AT;_Ă2Zl9J&iЪDBF1*iy|5$aWƒmP[vaܑʼnx-y!͑q-͹`wpwሽ١fK źCܓO:t15Y5|5Sr*($fNsmjz`piɢ%׉L E*PʆS(,m=}]) A10J -IQ-mQCie_,J\Cd_HX6 ": 9"ǕV i3]<:pJ +t*vLj,7$3@$N?7 OӴ逖|-C=| *T_ ď}ҥmRi;m;,$\"g ʎS WX1ߑY|U9ۮT]o}Zw)Fu]Dǝ@ Ó 5 1zO2yq Ci0„aR83:Zcm*sZ-";5-41}y;sj XFS^A (=*e5]/2RAY_C0xpҒ`v#9&mp9U)"kw#/dT c)ӟ~3~P%p:Abb3<#~?*|cZ_^!8$w۠k8zçebwa'|N(Pƫ Ugs9(hLA ˄gv+Ec) Rd= arRhM%7ov*'ez#! 㣼M7<=/yE sA7]czi216rDw68}`3 @//>=()<->@0|2;Ml<4kU4 .e/< JJo 42An@/dӭa6)u=2%*e,P9NG#̑M ö*EZq$ s &t3atGL*%4|LS 3Luev& +-xZB{SzVlYkr%ߙS|vz,"uSDGл=5z,RbRvN E[VQq{W¬ǽU7nL趇 VPk?Goaط;2E> R8Wb΀rј3Uq`%H'ym-T>)xC1UM"]מM$fLC5}|hzM=0,-mp h%sE̩P5CwՁu1q%6VdN^> stream xڍt4\Q=Q0zѢF'za`F[5B DDAD5?)~Z߷f3g9l:|rv(2 %MMU1  쯛掆 b>E(D!5 `0  rp;@PC!ahb6;=_-;smH@q`O"}-G N)G UB@ˋG;G@{_ZP؟G8_e! jڮ0/n?f*GNڢ\\H8#`? @vP͇zB s(, @mwŠpį~޲NCbĿSl#gHaGU w*`]90X쮐s`޶~! \Q=v?#CC=a!nl`p$c0?6vpo=^v($?3c(oOP ž rU(.ղ_pUbZ(,maXnboNQW!ewwC],k=0Xh:@7G0;GU1PX6Ap2f:/!H qf Ac'EcՆ_6 E(uwcWD?Vv0( 6أ܉}_"8or`[[07̖xv e+T|R-Gŷ^ 7D}%!Kij9rNSIj:#;wl.L$3L7Ng(ua%o#sg#{Qn&ًf]fl jq/+zF^5CZOqZ,R-ďȗz{):cL^ e=T)ES2EO}`W昒,+ҊI 1AM;hR9vn~6+w>Q aKJ 'wX}|5͸#A%ßnD8㛈41P[]s$&?#@kKDFģSI-zm^x ž`~aڇRV&JxVLL]_L(0gՓrK,mr/^F^5`'?ZU+5/&ӡ b<قyXms%v&ABz<W|XT{VZw䲶`O_/wvaG0nG >:fɺ;qNěGk8 \NcOJxei5G3] [e 54|Uh\e?P)2~ؗ\U/o+"qͿMn Zhx(l=g~I3 8%SB FWYxPT _NԼiE+ruNC6ܹ[eM"V ] ? Y|=pU "* "m{[z47L@rR!wR:KMgk'N Foq[<9'9&dQ7{$+ [l¬4 x-5OM:sf;ygީJ0ᆃFh݌`kK=i_ɨQhz.t,:ߺ[ȧjGVu]|RM|%\V[A I4K)~!'#؞-_[{s6Ͼ< 붡fwB*;Os;]jyshdڊ\W;R1 Hd0?K$Ҽ;uuZ(if**S%!Wr[}Y {-q@yr?L]7ʜuyΧ- YnDO盅$-UH;]116U. `Z36N4>cC^|,-ȼuA>[̛7竘]dNL0C" 'Q='nAT%>|Q~Dw 3,Cyi.)): CI a3w[bN9g:TLF9Ŵ jm Wk?-;5jqh}Rt<3) $6~v,^j v8ӛ{9L?Vl,E\?>Iœݮ7VO\{% /l+3-%< e_Jq}rmSŁPȮ# A*.~tN0[wEgT PM+}9Ҹ(=ss0CCCG}~|A4X6Թ*.\;ߤtv)Gd+hj2E]}2lJ3tWBviub,OM8/rk]_ JW!%i?kX"".d&҉dvĂSnyc<sc kYI[zwlZG<96;w{S&\n(J)[0S~xI`n|]הj#vk=ǁwmԖʫm1%"kg[_vH9˖UͭT _*D`c|y4z&l)co5HMhU ج=扽wS,훫h%]bR0<+8UrfOа^Z! BB/cSZ#.mRZ6t3P"5  YtI>=,R&qOtyyI3-m=!TUꀜ4X g RfMQ.]b1CR(OLߒGEH>BQC 4=wK]Y\ } 89,Yew&@1CuOduWBNj>9nWrԗ˫}]#P-RjƲ8l] 98A7*zb^}vBEb:h+1b2z;jô?82l{ OudQۀSqUDfٱ+)( SX03]1V>b.9˜:qoemq^Z2 j# 5O NL4)S-g}maO)kFÕRo2^_ٻC5!FCʨj- es> F$!Ns D35J;T6>MRdʃ]Ls 'qq:D)|RFC > g|znl%B$6-T}Ƞ4('+ܝ)s;ia}P'5U&ۉd"K z>%vp5׷;L3_qQx*az8{m0"ޜ 7G0":_v ލ>UMWyX)ٛ4xufkm9~$o'k`y.$E䲗6ޭ#j:dTy0mL`_wvzwlm\HSvbdO,F[iFjnZE&cX eI&tBBp_aS7Ts/9 ^ R5-kr~x0jz MGZ :g9qR"QxEyR7w7jޮ>'`2p#E7Hd`KNum΍:0"<훍 1KdfOFxPHkNjEZxUlikX"j}Y%e:ᬩt&>-bi)~اԹ%bʻ1],/ ?'IFuׯqfi2V.Qm^yϝ7%PH0BFϊڍKq3jr@z"[jx[bXXr=aʏq_ImYbB,@lۮg ΍Wܴi{ 2QB/dumyvpv.ϊgVxbǹ] Rrq3T[kmAZ6 endstream endobj 454 0 obj << /Length1 2783 /Length2 23962 /Length3 0 /Length 25521 /Filter /FlateDecode >> stream xڌT "un<4N iCZBK;x7{1̕s=>HI(j` r22XY,,L,,l֮v̈Z@gk@WMȹX\||,,6:8$LܭL9R4fV^^n@gk3@ hhfbPw0z#3 - t:( ae]̀ p 7*`+]W d \=]& ߁&v.|wk;Sp_MRblbm{De[;A.IX;kbdmA 5n̚ k'7?!` daae@O3+59Y8:8,C-_>.&@O"++` !Tc;[{XcX^ ;ΗY^WQYN9x|9Xl,"oh+ p1vG4\Zk)9U м\ gOΎrMmbomOXn  *ͭW|DAvEhbjfZkev g>_-3[_. $c8;x!8>hKf&+8`D8̢M#. 0 Ŀ v&/n^俈,/ ,̲/,_¿`boj€LW* 0; +&d^ xA`/LVi 0/ G 41fk\MMl. ;߿pA,9=w X@0`)2Ә L ^qr2u[@p7&@NoKqntX_q #l? xL? l59xB60{3? ~_ 'n6p;?{C/o{J~^.G;7?-N/rwsrsp;Nj]y8(V_r\( .bkFS=1Z92xe$kKwyOp\^ 9p%o߭ě9O/a O* h87`j5JqkXprK;gιͫO+W;Q7$i.EI}k^kJPm}0SjF1/QCdW+M2ɍnio=% [ە\H%1A9SdpDt'(WY#$rq~1>ln4\(tq/Ǩ|vpf|z6 d!3$/22UZE껪羳nfRL.4r&Sƪl6pf~[j갰I& DֱlqZxt_?](#LhJ'iF [:ծ Dewk&|*vϺ¢9Hxę{D$ڌAsҳi[Iqz8MNdXjUɐrl&b/u^|Y鮭H`/[\#r揜QCA}b!aݼWWbXnO="?ip*-Up1Յ`J~!Nj_!x1^P"+AI?#KD~^U@74Q>Po/@k>k|!^ 9AcW_N"|"Hdٰ!Z3OX6r7#FSh@WLOYqMlrrvJ@ڪ4~\+7](,dxЉ:L{ 8>&bҙD^ 4o"ûؔY&+dU((ݕ50&Onzg(-M+] 29+uz/ŧfLWӉ\:6\"ܝ+mFszM2˵JxH=Ncߣ5a"\I_!-ox^jzD$_͓dljT|baU9OLP%C'v7mcmykPa(,km7GH  l9|qup2H (Wĩ~AU̸?QU)}SĻ+GI3"`tW3x n6ek][NGxg-R=^WnhJ2KwgyUwNJeW]+$[(@ 'Fxhuv$ٷ )x2(PYxn M#(Sѧy_E$#dm'¸VdMgjkLxe S:v/b 3EřQ%=h&h8tRN9 ̬XߎGEk@F"8\2+*&cxCXFUYC?tKYJ6{c+c{M}JUٱwgsZ"& W(3)gZ3NtYf IKhާ} `GcgYё1o:^Dڰ[24SքCjPʻP8w1=b! ;UyN4B7g/%!Jߣy)dDg- @v\^bkU?',}کٚО j$xl`=7`)-*?tٸ*V^QtI#W}# Zwǵ"CJJYOቇ.h)Y1Neؘ$]{v+X]="ӹݹ Cw%CsJ'tKK0t6n >.Svm,̀79(<.jY=AG\۵\bVd|dnd] lyd$ZSY!d|9 ]KO=%.ұaZXwSb& K;vP|l%cgoV=Ѝq}ImQN|<}˧2qٛXO"g:ݐH{)ibMR؏e^-2,!.:)t%chjD}ORt%ا1J+s\E㐼puJoJMܱjzi}:=:N@YQ׳:T. 5%?ELȇODSUF[u|NJo+m5 x]KzrNsJ*3 ZN! &INψJD>R+ 'i˝=Cc\<tcŦ/ )G.0;tWR\.O0ME|⼦II|ptYp@Ha.*)cWÓiT m0 (v}jxv-{CH֌yW `vl;oy$o*1i+D-)/uӰ,[;_e $I,RV%WL"-nT<9e²|^i?/HOc`]pΝ?l߬Mݰ& q*8 q5=׺0CEY\{b2qҫXJvi#Q5¤ŋtey]Э&fH&fb׶({F'+ba%q+(E6ya=s9~ƉGTڄ}%Ӫo)dV wP]e[tOEfAXIFŠNxJ ȠdaXelCKZL1UEbOu$q Bvmq_&h2nkϘc_Q6lt,"I"=?܄7V$?Shv-NA5m7s?)ni2bEsІQ9s/$_0,AU7Qe?Vn<\Nt$~L9v45D W6Ψ?Jp{]H|t ̩˟q`*&C9wlmk>a 4F@_DRZߟFᰅvW"NC2dt)c5g!G7 qWxQ*i7Ա V_nǔf`&ޘYd1h۠ƴvNkτN=)<8g@˝_unFinjX Q\'VcOW9W"%-J,y(z Dog 9K«7Y +֭!_lbò?N9Do37$ F&SDݬ׊"[bCsGN }c.NH^O:kY]F kz1by.#L{c>HHT&sLBqlvEs#zQŏ6lEj|8N#d4>4*B@B;YmYq4:Cϔߓ 9 _)e\+ft"gNV7( O pV6IktĔ4e͎|0 fWJ͋bꜼ7! cJ2ɺӿYjjY44-[JG+٥ŊN3T"u.qN5'0fCd@ry;C|L gěYWR-^6:>(y6;*݁SI|U]R1ns, tS6Jumh+5_U>cDw{$ C> ~\*FAk5-Jjzy\%L?EHwfwE +pv*)]Úa;0rmeM'XIo$?(%K`_l;ZHzA˰ַ7XaS!#dAXg>=ո'`"X#X/1:JkN%J 9rrT;58v21D!bӐhl£F']n-ǎfl CbN&>H$:e\w/ NlEI`SmL撘K~!/ȟ4F2jRg0Lغ 5!z=B Q?yq]_*pP-HUÕ{rӾ)+5{͒);z~<lgјRxU_Kyj 6 s+V3ִTԆ6/nϕ{_;^+k2끭ѭ;TӋZ`+OmX.D6laTu.txֳ Jty^U*& ̺657naEyf@6#d+bŮC{>H,e@ftj:9 xX7(/*v/H] }#^5dCEtuDu̲6̟mδ~;IJ" B$Gj u[m]"ĺeUʮ.%R:hdp#h_I!؝_XWL%1 !(!R +{K,z=-M[oS yKhMF[eLwΤIq xyn/ݽ&r9F;C:];v>u5K=?}O-EJхT3ӱ9c]Ak*U[E|:$E&oHPbB|~[cH@tƗD*h|"7tѢ'u}ikѩW߂O6`Y2P݈no`LLS.|#>R"eKݕ%3 W".O@c}bO~|i#8iwQ ,6U'lO'}'BaU}1v-6U5MY`k$ _a;$ *T?Cۑh_P!WF>i>%*}3*bF% Pŏ#?=AM3kLZdH_Je0󩠖:3nx)y7aѡiYHԹmJGsC~bӾ͵ׂp!:M>F:ΧɃ' xkZSS'BB`Y&u[3B3aGS31[F-mX* 1)x#m/Zy r {3WǏ0Urߤ2TV Uq ~k@>2'ɞ)\tMN D۬#1[ڳ_\$T{$.C Xm}GWjb4TyW<\m;d~}1v/ƿ#9(eՋ;'JgEҮl"x,Y\Ǜ$f8O{h+45ekxsTݍ.k+2Es)+'ܝ4=Q7h1D{!ҿW<qz/:-dIlh6J葏G2;N|$P0cKn;XqU#y"?XqqG,/)^F"vWzBXLUdnmb5yĢeK:iYgqiz4;eKY)V@}l/Ĕfc7N ʣA PVͧ6ID[{ustòq2hA^nȗ21T|w}t|JDXYj^6lz8Fuz{H "U*Zkv?)c#Z={hW]wt ۹T)U!nDjMm)ѓo?J$l>!)Q'%G~>8ùyVj=# GFW'7<ʘ9&&)䀧\{&3w|n]g$afC^ P7fpK4Sks'vymx[ b.[7#0oMPCz(InP4=u~Aԧ@2/'lf<,s.{oTb.a* .DoAtr$ 1hwMekliY aM6asIVfRf&ȾN O~ Tm8IQQuv)x]^X!biW_n=` WŲHY+qZgֶL" h'KۿONo֐RgՋIf'obg:Wu] U3 Y }A||]lR!Eʷak䰺 IINmu9  &2ʫHlhꊊ2*MdX2+%eF+{O|gCts;wMM6;e|0,~7CF7Z )vﻵв|CrW$?Qҳg`,"5|uU-ַ٨DHb Kj%a^Az_WnwxTCrjCAa\0tZEϒ@ɐےa]eƏ ;Bq&Uf .T8,DVhPNUk:bxy @)l#zD "sR4~Fy}H5v'\=XMH{tp_R9;*/S57xPqSf`cZ ~EAQ1+f|m .sG)jDp  a/;5[zm(4گiFe7~C\h]O˳LQFd ©k;BJ3o0ee:=tN񅕘u̠8BհFZ)^JW :*T̪Pu )`s/ʚ+7ṋˣmЄ۫lNXzU+lE}}FGhc,jrWb'x{CkYD< tƆہIse]kP#W֓T˘C:3nnV~a;q`9>ΐÐ8.<~bQl9j!W*G\ą$N/#ajqdI/uq4<->n;{6aqƂ[WO2*Ky|(T8춖Ah~cBSM%dtM7sMQgOC?'XGL~5'v(QOӭ3Mc$n߻}xuc\cׁH>aí~$0myFK`ny{ev^d/J&2F,| seȮZn BhB CfS'9ZUq-bNEI&d Z_!''$8- D`1|Ƃe5ʛjg3C3l! Y t|햝P3IySzSpy2ӴcHVÍqAA<$R>b׍nM? 䓕 i)~j%!zr#V EL0< $H{]w 51RFֲRC+JsW!H\GnY b|{4H禀nÈ9W;RdRoo,!=wgHm)<4¾kI'\:yf(//4*o *kn4.rppAkNQ9jn : ꮧ!64DHTu,_a>csWS ,1yx/EMvdzc!l1u15 ^6)짍A,,Lt1cY{ү7F򩺳u-E4{~O6ޠbfIzwmEɸ(oY?ٞwޟ$7Pi1I<- 4l\9! EJzAPg`zp"qg]l{ž<ֈc?]1*cy Osk"o'I5eb& rk&"x{4I:"Z≁.$v S<\4X!#|YjԦ`bwjV!ୈݫ☵\=BASzVm3\9+< m \Vy `wm- G\>#4gA-n%)p+úAv8zǽƉi%+sMH#dG {n79%mɩP➠Jv̮嗪?+hKK ȼ@?!>Rh(2'OGR l&AybpؑxZz_K ?%6 @|azTM]+M)mVL7 7T b6$Hi@[,JY !{Bo0 7J6z]Rϰ0ERGdLqb uf|ANFy4tCi}hے(+_ӝ&|DDq>˓#F#N"&UL_y uc+MWfմ`5ٖi6SJs5?Y}"\Ǡruݣ=gs;.Ht32SХqEB,lߦa|0: ٺqA*D@t\3$QFaBVI;~ăE\9PZ.:Q3Wtd?R'h%~нRFuR)?f%㓇Z5|5 O2騡73GڅA]nb,lڗ<VoCwpsVMt2yrҼ <}G<Apt+y+Koɩ^tջ&y_Ҍeu/QHG*|ڶfX%RE߾z_'Oآ :PXG{DkgJ̽P&&ZjOwa['U8<X^șLkDu8$r/yWr%4ܲ^=X09F'/vvᦾ t霙Vvyzۯe\dqi0 чPGp<|LbNqw!xY֢-w՗֐76Oo-s^k$/qm`BUlt/OKsHz"vܪ<@n7,H<%DQ=4]C~bԵ3)YYy2x7qd\R9w?+L W{T\C?qMKK-e _T-5a@IB!l]:{J(?}Yl$; 2Jkiq&hCWɂ^:zo%NfQ )CatZ%c/a'Ȃ|4ۄzJ]_i,̭&D% M}|˝lz3XQ6׷w;C-?F+ntU&)>YM3m'*-{RNx O-ҷ8|*6 Mk̬Nd4xr%5*r;cӪy^~Z!wkukwįt 6{S DuIʝBnT.`:Ft~.2]1kSZ&bGSLR*oZFti І\?ēq_<9h7B6=[*uˤ{'"FTur%в HlT\r[9޷|i"<^ Q#E=6$ l "eF2vn.pYݝ+j(ȫ0{(Ů{WryҪUO+ms*E D"š;Moe˷?C; @r6Wo]g"sPƞT܃~%\( {Fdg&AIm=F0 # LMfeH*L<!tqкl<\9k#X ;p#޸Y-^MZATcuXOH 8\"['I#I,bQYOqe29QRMkm~ִsReyroL4y0N3.s#<*~)ZʣJ^ӑ0ξTv+R+px' S)VEmW\=c͎֨r_4ig  $i|M/:(d%/.IP:a>!$,Nw m܄C@[V<tPK2/\dec=$>("~A (<|2q?dɅ"̈́AZ*ys'cl{uA G`hWpZSADm!_8! ~K @VܶD [}wNlCc~zZ  =|Cn}ބMN䓷ɰo7M},a'c>Y?]!9H~t1u]#gvg˼Q]Tҩ=q>>U3j,qv҆=^7 C0%)rBچ]CN y2{eKse&[oév@Z)@`lT1.C_ A EEM];j?'хt=x/l@ZKL`"jI-f=blBN}Ŋ@i&˼>{5WM**(,iR:,Ҡˎ'Y̡V.;zWidYl|Iʪ>Gȡ!G / |_XS[X> ؊)G Uec'w$̲Da=֚B:y9ȇi&æ2?L5=qü|"cPuPf2 s'(C7C9yQӬR1YZ!d{+s1* ԾrxH3ٟYL6~޸ hH\'rѐ?NB}F/#tO9Vx_ 6߳Fճ|Ah 2$ziԃm"),rěo6%LM+P_(6yx ZPU6|dkCk__b8Z3 \kfCE[+h}oh/g&K. VX+zU5' J d5a!Ƒ #O`0}V2_Ȕz+GzM)sʓ}e%h3-獲Gv #!zE ٥ƇjwC{g̃l`ފ2~ \EE̤=51Q0NGIj/tAvvxG: wŰ}*ڝ9Zdy!g2W!Vc> IAS(ڮ p2TXX}Ue&Eɚ7"s$HwTHVb V@IvQVIKYORT;j)!_H Wluz[ggIN+/G *5k)W4u3b.i/֫QbLt7}lRjIX5ɉDiud k#8K57c^GRmt .tMd/O'*׳:҉2{$8 3G CHv6D ]yt(onLm86D'fEw݃81WA.7􆞬j;If*cͭ)WGbPZ>f/A)a~C j0v4Ig=qj߽Cἇi]:qh˸%*hX{ҥ>eF^Ҋ[:Ջ,uMJlR'!7ޯ̋ssN p\FcPcrhvz\^?ӆ4yа>5X`ǵ@5{Lލ+d`RQW&q9}K׬/kCfsTBq|(nTn;,ryv ъy͢$ܤ|'SUƕf@-@:-(ZP&L^"YwLJJk~q(؏o?#wBlI6g$l SvaHZCK\v]-pȄD54DEҬyrA/ ښę: < =m?7z߱3ˤYFUaɞk'UÅ+^Bk>zWpA:m}fW С7Yy] Nb|^M%Ә{CY1T|Rۉ|ɕѠTZ>F:gj]XE<?WPxPZM{4e8 {$C"5tMgK/gbrN#[c2PmfSsN!˿GQgͩ 5uk۷:;}R%ɟ@(m|+Aa,g>l1XRH}QkcZ߱K .)a7r9O/BU$D6U/fL;Iyun@e)ۅ,+9CJX$q6ܺCx[NE 'yDYjt/^(HĊ=Md)LVna Q]?;6$y B͔ 嚲fm̐U"U+N?8f[o Gjn$j쐡H( sl%}Iiy}Лdp}{߲yyR s~vY>b)} ܬ^J~@)MlN"ঌ<,8\z$܍yMώݘD;~ȴ 9 O%1>)_Ӟk쌃ƣ_ B~6"ӳiu9f.YO)f2Fiil `/VF,_⎚$)iߏg@A sy<@jz%.O4wi15=4Z4IK+ j" /Gjxu$^-yy&RCs@ixVQv44<=C:9H)e s"EMB g:nQ+C8yt魭ߕRɠߢ>ETq!. <7NLeJŨW=8@>DPs-Sޞ^S0=.ՙ\.^iџ994&r0#1Ϋ> ={%k~?9TOq~̉ekff+.R0pH#ecHc,eJ;epwЕj=J>8Um ^Ӽyv!ٯ.mC;\[Ӽ,DXsD$cAs1aJyRoN6O _v+LEl$^Y1}p.(3S- 7!2HA&k> k~lR{=ؒNV*wqC>uS; ݷ6!y2, f?[dZYڄ&-TCKɾ$7z;dh," ʚdɘ.i +zf ݼN uS[̟QbSr%O}w=;& UY=${ĩYwN2Շ.^YIޣhʲ:9؁%al O4|hȬ©VR\)}#`jp"XP{m`~Ƌϝa+eŇG#Z d$4:Q~ΏiRǎUht٪w|XLwrΔac` ֘U]?e=?W2(nyΩpx$ )G^ 6iD/PFQ|5H9{VkwƱ?Tɖu$7bg:4 w0{0S)R"t!ToSy w,% _DgBnN]-YհPr*Bg5"zx¹!Gds<$4^;J-hNȪ]dɹ:P;*,+i 1d z033) 8M*Xjz=66sعEh|ޑ yT b |[e}RJ^nKz;9Px 5#vq!7b],Fce^2,nF G~bmo{0ԝ\+ 9/˿2vO5h.ycDWT;&gƳj 2Qh G^n+3 1&K=^~3\&ș(s7w]3w-m99q7 t}9e \t#|'26Y`UW7za;i|=>{n!E%LQ X6n,ġ҄Ju+-FOHd<ٯ"Кr^sOK;l:\ nnqGf4$fbNh@XfΒS kOj]]w؎IEoI%Ô4C+h4`G>$5*a#%uQR.z\QmnTF6XV&+w!贛)4 !?taMB4k3**l1LNvBFu{q~)ԟr#Zkek#4avLCttNFd&Վ@)|o\wDLuӥ],Q7kyeQYF̯pR9+Chx#)WZLAJRl6=ڀ%[Mkv_=u"ףY*ġZrnEd;40[)Vr3SD43ƿFtNi%b+`1#^-+0PPzGӟЯQ p6)W!.!3l4'/ŧFV^ '/w~N> WrIM"3o{QIOEعvUgpdTԔwz3F/d8# C5/fg0#xMKsFwi}ig;W[F:*Y$ 2Y1h ӏ )P^2GJ2~Ⱦp?k&qx//(U{*LB=|s5XLDM7ۑwg=GA7f,RFfθdbs uӲ~;=\ˡeY,YzOJ!f4sXv,_$v3 ɽ2{\'NdW#pG ~'wī, PN"9+n}63nQr[HDզVf,U%J^[Cl!Ýko9/x^ޞzĎ(I(! ʹq޺#;~urb+MU*HZIJK*b#vIixupnu;$#f>˵#ǞbL5?ppcefjѦq [r 7C,fMx3>86 ^)^ۻt=$ `5U̎0L`1s $0ڣi.W.49}V!-; vZ .;0̴.ViJP7duV b-3t_o4_ ʸB u4~g,rJ*V7D>v䞖uCOkHw\ıf*n1޴h2uhź | 3ڽoZ08"T!Rh)ɶn"%'w*6RЗ۠<ת\pS:Fod1g9=S} )` H5'QQHnˠW:5LJ]=SHϻ+ҩqĔ)k6B5}-ruo)J t3{y'No:аW2?NOOp?oSAzj\?ϼj꩒\8fmWP4BFz5'-e74m`4/{!on {I `#=VΧ >B_6ؔ VEԽQOgL5`.:@$\w(+x뒫9Uqw{FJ#SH5$2z`^6 ~{KGbBGwKJ b6Qe0@/] 2T6z ;Y>Aj} {`#n 4+O#^zZ-;Wi naԕkvy_\WNj h|ORU/ T8T?:.CAmS>'w{)ͥx!Hyerz_cSH̘/j>4EPF1ۏoH*7r25OɁ^3VFN@7jĉvH~ 5iG._JSහ{ofVz 7n wi Dq\0Pk}ҶoBTKĠmȬۢ!6X5,DyVch8'hJ>xyiB;te3mc-V=%L$bkߦ~^e_@%\?S-{4HٴcJ,:ve_yza,K4i3(8C\S!j-_I ,}A cGM6zl*RFn|3GOGZ|ˍƱBS ܠ=mmj593K0b| @Ǥ[mDmC" S֊rKx RPhBojǜ2ׇSmF_\ٗ_eXB[?s ŏ=WKP#|6ip@RBO,Lo۶=Fb"MWbO#zݍ7 #4u/p<]'D;2e쓽UCQ.| 5wĦ}ָBo`9h^kPi4S~AYXa;4H~l^mg _ØD"'c>`=H?AGNhʻeN_K$z<6-G=;=URne8-@N IQˣHwpG@^:@B}qCBZS_y A 'cr)NS|/ʢR)ŴK[=-tYG&ŇH/Ǒie(k+ZB̌mX˼؈QF5њĄD5 L z}R|piITNVUu~WN``-ԣEFc犥0ͥLNJkrhc/?R|8C-Mb㟾z\J)T ZVCf0"4E ih̬Lm>ĩLcV5$M\|+(e#vNpg5!N|[M9/2V'ԩ0ICX.;&?c^-L9b \lWhP Z)GC%X52B&pO$0pPkrye/tn7hcԱ9Eǝ1d0-Dr?TE>ȇ:RQYCuKvraJgX>ŘNÂ4(=9ѾU;5ZW3}]zR"U3yHT}THaۘj|4 9D endstream endobj 456 0 obj << /Length1 1480 /Length2 7459 /Length3 0 /Length 8457 /Filter /FlateDecode >> stream xڍTk6L#!!݃tϐ t 0304Htҝ"] " y9k}ߚfkk6f}>yDCM=  ('_a|6# IQ1E0ꖧ ݜ !HT$&@H "jaW|68 G.G5$.. AB0&eq]Ї[C!(j)eB!$<<<ήp /A\!Hw `G?>'Eym j Vl H}5 6CCu6?vUj.[[Ý`f:A(O/ E;o`{`.|+/yH( u%QWSV(!0+)Bcs0/` a0A] jQnC (@\Ok{_ IЯ?Bn}\ w>ZV;( a|{H' { '[{aN^߯<>{||" 1 耡OSφοf ߽෦8Ph}v?nHww;C"z uMj 3fP99}PWe'Fc?q_CAt_odY;޾9\o;^R f 5a"0 IPDEoapm Vub_?H 7F[ @E[?oA ֺ% vUxB֒!!oΪ<6?HOms!.pSV)C$J'rLW>[q[t.}>MlßH?|]=ܖQ#f z:["3^Ϻ҅Mݭ*G?Kb 'rpIwRթf|JViS# NM-3;ۨ' &VDbD+jb-Vډm':=ͮ:\NZp={:&XH8zn;QDewK DJ -kvٵKCjNߏ[#64)l A;խ)i{H?IpcXWv efmZGD5F%TY&otw2weu)1zM{'Ү_F:rΪlr(fcg2k<Y2J>~Wv Ѯո/vb'D2SV۳Ppkqt]' oRsp,-ʙogұJWv!)1|T_L:\Ÿᴕg2FH_a{PP 7h>$ci-!HYJFޓ{uyюIZ5@LRᧀ/Nb4ȴwC zŒ/=Fd[0YY9fx}.Yn}_3\ }竗|'{# _XT 8M&gb?[id8s鍎/@3֙{߀)c{\C2&f`{Ĉֿx0-NA-n Ux``Uqֱ2\M+ܼ&((d5 )mU)bIMizm"o+&p7 (fx}GC0ʣLH"`-}O+7X}~8a:VEV?ӄE5}0d%}p"dp-yoE0pĭSt-]a9mcZq\4Aqǃ=IBA`\DD&Őpsl}:>QCÃeSժx v@J5d#eIKw_*srhա8U[5'ɱ{ʻ-1?P8S|գt&";I]$<jRq|(hm@YE,ߓ.N/BnaBlA%zhz돥 22-t[aDa %ն.|s)W.p\tiEAVHB5w0N!u´OM_sȇd<vaX)KXzZzY({뗬x){{,՘0cj~p25}9*Tz$/<}M-z(glkƿ 5Aoc*npfb>Zl'=8ܭ ,ӶUȬ{#cQ|O=w"ދCѬ:1e܄iiQϳxicĬddټ{fQn19HQ$Ez9 *FvqɎH[sO@^Gjgޤw?,qpK8XFk^XD^&VY"؇& %i;V"6dcJx"wk /h;rO "2?3 s6kM׹4z7Vl[fT>),DZR$""K~UBƮ]H ̪8?cxq~Oʹs{@%~9 W9f>x(rͽ .ԥts#Ӛa%W;Yb <.8/pdT!ۅYIZE5P2,t2?L k}~&&6&G),{H}vz_ +;DO1UW/n|,i<.ǢQ砙AE}0 UGHTC>0vK TB/;z !B%?w]hMx]`SYYUm=jo^7"I!*Z&ZTaCWs+It> 2lb Δv%%@Fkj3rB 1Z>ˁ9V M==JߺPv&̽v,0'I!04$G/pAuR<]រjOXm LI {z>%A}=1Z]zǯNg37d }x9\ˆ52p!D/fR0|j@o%>bVԒ*-Ne'"sd3f?cu<VZ⻐Ȏ"x!e~} sJdzP)WH!0%ps3Zv[~614Z%ӛDz2nfEr NWp[(2m6J{rvewz~S$f NcMrb"#}f-"ňWt<54D"um~xNO$)(@[ RLSfSwA}v`2|X/mgNaQB̋iđ!icx$nkEXi묱J 3~j|PBLzf#5H{p]&ַN?EWQv:7[/g?HNK.=3y۪ލ`idv}g؈p7} ,q|6%qݞ聸_&pP-uQR_Ϭ1Q '+M/gn,F+jTv;I@M[ZKe!`}UOep@Ii,IC"4lQC_Cz\xd|%,~[r8Ӫw ,2Z3*P viaiăInE޾YFjU+!ەRiz"#|ܛijqG Wpٍ y49^aB}6TY 8Co:vf/}\K-Jlʹ }dDw5GVv'a>Of"{*oRDq̹'5U%ל}Wq0թK135d4Ƹr[۝>svu/Qxn,$]q\ip?fqHT T&ؘQV'VyFnKϼ^vs(BgacK]wմxGmM*1T}Fƥ&L#?3̯ ~ȯ ׹^nؑ[Tծ*w"^R)qt:kFa wfawt}>C(j+R<9%={v^|#*[箳ERs}S֜-NײNdFw-tnj_\ѦG%\,f3/yXO3^?vڷ7W0 n ~wPIly#ldϴp{jɛ#¹ip>G2v\i<]ӆq^W:\G_ 'HWC3y> |э%cA#a.y`Ka_HtB={GzM|t_Kni^=; Vfg2Ў6IGRSstO@?fĉ:7~F]3|spњjTFgc7#eC|=h.< LqqO5ބB fxv4'˟gx َY2K;4zcҶ\gvKIVul֋,cy'{ݧ6g ԙj*kk115L, ^ h|掦,td8ÄV"z6=5Et/ӽeDƟp>Z n+XΉpۓLoO,FD&'$0>3Dٰ:(V|d?=L·>xsZmac O,s ej0jnm7n3"G4O먜.rnՂC/GI >Oeg RɱG%wX3h-!(=߀qo`mJ1A], :L> MMk'Q+H3}c 3 n)HQBFgQ76/['^ &wbrg\2y=}րU&k!;v#!³7j~Al!< {|4d3T󢇭]FW)o(*Za32c!eTppo6Rm[rby{G)!"hVVZq,KF}f+2/pS *OװL~(0c䒁%Jy_[- *FW)^\s{4p.2^Kġ`zq^|=YP34Z4YV^'JYFNxwIHRIi9% 26ЩbYM|Lq2=紜rP5:>S^v)"]f~V'ztQV[b!ksw\v薴4<J,(*ծ4lF폝8jԈ0d2O2Kxt!:OFMS{vSګI 5't Z:N:t!aȿyHKWZSL1s ֿi,DTw<)>>koxdjݡQC9祇ݽpaOy?B!,L4#up|zm0ܘԠE%v7P=zld?R LY>,5P`ĸ^}r%$#ۼK2G礌{}h~"%h,[EՌy\'i&2thnco# "CTqꅪ^>4[nBߝwդñ1\ $T~Dr@=bWt 9T)nfqiod}qofK&u4r\ 1Yo{M.h l+jt STn矇#ʤ@:?f:QlwjVXnk NM!޹0ϧaWi;Q` &X>x.^(,a$&]Rp[hޣC2.iA, rl7N!} #t/G}Q6v y6K?<~?{M5ܼo27,}3FbXL!|NDU^> @73;qr"> p@Iy6OXǑS2N|&ߘ~w)< vxY**qٓ-+@9X*ՀerMDV˧ :7UzWcjXF~ZϜMQ0e/A ˰l*|[ze Ru|38}ַdȸ$,pwo8oyĬC&:~,p/bEg+Xj4&R 2%r^?ff2FIZ5%_aFdTP[(p4 endstream endobj 458 0 obj << /Length1 1588 /Length2 8628 /Length3 0 /Length 9670 /Filter /FlateDecode >> stream xڍP\- %xpi, ` 4H7,['\;Hpwy${ϽWW]{)c͹֘6=9,:r $9x\lg[ftzmG#d9?)[;;_0GbPb(`'tzI#i,v`G P9[V44`fQ0Y9; nnnl ;'6# lP;] Av:cChZAk,@`b:=e@o*`_o `76 23ك%b ȼasvwfAN|+b 2} S9 #=5w{Nf{g'6'ivYj. C'q=m𯓵ܠ^ w.@-(,/wȓ ?6K3vͬ5=OxOM} ?t/'+:b 0[Ba2-OqeoO2Am=|ʒzuo`asx>͢ ]R0_>ҿ v Fs)ÞD 0G #{ j6A ?47{B0ۧBe]/r< ?OrOTNO=8>1r>Qyqf.OWi?{ v[*X7G7uRY\nP?g8^'}Yܐf8[mE k~r}g>قmopWUSl[; ]>K5ʭGֽp׊wﴢ LfiY)Pܱ/r}q}_匹\*t #'@8x%3YhΫcN#gB^7jMn/QNȗжKd#OVZԨ-=YNf;5rXW\6g8W3. ES_"c^83hgk|+rd/W':%$]5 RFVI1Ik ;A,@YM1JrhMx˶%GSkVꮥ\X8g='?{_\_$wЙ9yn5ٺVG!l|0A([oHKkzħ{yJ;RVLw=NΗc͚*~TeAM d7 7pbBw,/ks,A 4dȧjI˻P{?KC( ؤ-N&k3#T,>f,KkĦ%uYƉY4)Cae>X29apFt>UZZ,)T^œƢ}N"=K *flO 0?vgW% 'pPtx(V=hRyy:'rg\0,*2߉8kFjg(I qÎ-NKoSg7@sOcyob[~wB):e C+zɮ_ND:Q%0+ NԻ&hQ 51X! r)/H']qH*T3 f!Xv|tQs&02\4kLJ: * I i>:^BKT]FH૓Z,!b++]{kIE.D13uN}ɮty7$yۦ,t!t Ԏ4]ZIAvNj;Top|_q9дEahvX[04!AQCI6NyOY%'o\\E$C@Bmk*  v_?iw"-!_{6Wqw{4k-FS\!G ]nJ}d`/&^2;iy\D麲m1#wlcm|L2xP M ޾u{ ;;J5imU.#4 V(B ͗>arWF ?4]d4 NMP>i_ϐ~0x֛g߿ޖ'Afl~rNlt}a[,dө(xUB/8y.,XĨ2RضiVc ߭5S/0VMgڃȀrdA59~pkV_MkΜ[#Q=3QG,e/s )4҈ D#"tX7!{u׺m@6MlGF074"%Ky@@=DCabյh=ڴY}e$7fǐ8 7!8ҽCϋ|N,&FW%x}C`WrjNnm󅞇hj;W֍d( )ژlddH u#:#1ԩM~CO],;nOua"c&Oz>%Ǻ ␭yq96P"x,(1Bfn##K&YB ?Q֣T Z1*~=74sgA񵎀,R}>BD1dxv&"Q!(qYǃ)ءE[&<_G2Kke)Nn19z`%S޿-{O> MW~ IȄ;o컔W XBtfU% ]W m=%cllSE>'yN/?_Bћ= |7bU=ia%+7DUb#9WE_I^i'BR&jnm2KiމB>6;f/b}t8Ŷ e[8f< yc3JOk_CO [(g=2&V&KFn713WP/PD:oHt?&0$rH\ES*/VS0Md1Ummq2^֣;/j{q`ߐa(^Zz1159MwK$8a'筚N|q]-t9-`oe:ph|çu,qJZߍ3smW\}}3fe~&\zyД}R"Z[%ފaSoCu(:N{@`u٣a[̟Fr-~0PœaS`A2فZš_jK1ƹ’Kd []:%!;9+p&ʧCsUsK{ȅ4ozBP>r\]mTF"F_$ 8c둂wRRT D)Z0g2(*(oyXY¯Uk< 0lI\3?z#FVF6 i4.oG;b/Oq'J?KPٿGPw >KԩLJ ^gX_ ih8:a!3>I*nXdA-'0>"sN.y.f^P)>&awBx'v> T!Ã{L(F]g8rLF$4 2cEvܖSY.rGF[$jI2:[dG P4$#El4K^BoR2 裏+*~ asdG2wExjcz v֯>0fm]y^Q,>p@k<X6Rq C6,|umCfKe!\j|^>1~XR6NT -M(GX1:t* T(c鉧ʷޒSٳjp"¾>;NJE*&˳5]$/3[+|$#*'/5kWD9Y"U3S{gf뙒 gb" {'S,0>CSz]R]ᯎcŊ+ex<'c6(j3kn>PsoW1% Qt+;xãߍ];ү .,:IIar1kktAgK,o|7)r󱆖ה{72X9oWuX'=)(m"۪ ).؏Q߆ʶ󗉔k7,rNZ5?/ad5AD($̷Yigu;4'8s"|T*G9ai/ eFə])23_+fq9N :| ⱾQ7e!i 0^nʾ榶b ]֋<-E%f\3 ?AMr*Q(UB qpe/"pZolXƈLR:eT;Y&/վ3ԏ k@Ο)b̿'Ócu{a;*nRB mҬKNc|~~H:#t;뗳dqB} =@h leJ3P,rnZFL9V_]?|ւ2Nl7LhEm>/(7ժctA7K7'? ( uTRּZ|[~܍a$I k`] S^[]Inrq"G->kVE(qi~Rk4 [PT+ Lʟ|dދzy9Y>X8¿mT}_3t 4-+qש]ϟI Z.C\dq6FFqc+Heh5 ϲ5<'A2>rȃƣ#BK{r\=|Lbthrk`| )Ocqʧ{Y\_|l9QOl؛qG}W0_ *TO%xܧwP}~ w.4)響Mc>&fB\E xOk*ňwڨq Mky AlQ/5x_e -wI-L3fWi1r(x!o.)}2Qdc6_)˟fla[ddVH]t 3`$dY[* XNzz&TkjD]A̝bD-ni{D [[|rJ6VZ8ScjtG8yONV}f1~̭$Fa^ T~qYbP U \LGL\ͧ۔] |Ct7*XgLC)P1yXOq%FhJ0`]A}p4[a凇E?l͹3]Z%\]M;l,I%_y/Lю?Ӿc 9Ar.y*=ܽ<гYQkx|C^0#2#lqUCbpƮ[HW@o|UeCҁ\`d $9 R/G)uLY"Ϋªx$1+ҹjkߔl͗6ޑ8L:+dhyP~nWņ}7/[˫:S^Sm> Twc/RTE#>`YM endstream endobj 460 0 obj << /Length1 1373 /Length2 6101 /Length3 0 /Length 7047 /Filter /FlateDecode >> stream xڍvT.!RCҍtH# 3 tH4ҍt !%J+]sֽܻk֚ywyװ3)!l*8O( x/@!BvvC(솄" BuJ Mh;b@ @#M8IuUupr%$x``7- `-`QH% A\$<==A0$?A EA`$l=. 3?!;E6@أ2MPWUsm_ _멬XtU4[DU ;7NwQbE |)Z+/{0 ן@Oܽ0yݣ4FBA伛8磣QCQ%0u_ "zY<lu&gG:pk5Q?:FQQanTxu+Jb⤑DIFtewhay- kHRCN9?x;9ڏ(g ~%~ׂ+H{.evb?( :zyLWl]@:csUY ?]r o/pp 4O6Ȳ/V|g97"{mF^}}9!D S:X76ODI3FSY)g)UIL<ߙ$ZWSw8˼oTУ?=~7dp|zv6U_o\Kg쮭9"/!xxZ2%:R 4VME=Smi-Kdc`0C̑R5|JONdr}s/)߀4cFqLMB `roҡ[ T k5!wFNxVfy8ZUIpN5b[%|W54 C:λ O\%Fમ0b}'޹]c;+[?=)yjio[/n!]7n=b;I ,wiYޘvzDajrW19Òi=v>P>D{y;z;SY 9.X=zܢ2 _h) ˸H=a$>N3+a e#QX1w_4XZƹFjD?{tyRvnk#Am#+bcu'^gM(iTUHipT* 7^E@]rSrݵ7CYe*0nK;%d?]yS2G彚'4Y>ء2!QGbɼ .HDi쯡>e8K=)sXW2\-70bԾuWMҲY 1OEȊ̘P b i7,[in2Il3(=vaP@`Rܕ4VUz{Ma_V<[IBx]e#h:@f̞y6VI%ݡپ5\:qB>^ބSh<:Me*/hH&75uGd#v|T(lŋIQbiLQrLڟ<՗Գ:{Qx9yn }_=A'i~sHX=#yUľ / Ԧ7ꫝ~E%9,ܻA Ӊ޿`X#I/e#qF\_:y]X)Q$9I|jX/J}0+?3(9k0 "~'+e2-O~cSS4)ג,Md'V ?,*F->W٢~Qt;*0te W.p֟.\V *h<XDEF\PʏrsTZkq#n)޲fI ǻzм3 4e5߁i mm| .UAzƖ{2r>)D{S5Z8&h"G̉էBd3|lIϞO-Ѽ['R ?5AX&4MZ<5tpʺlD4ʂލoq2V?̐.joXZ5mدN(8eu~)C/p BtvsPpEKbf>fb0DU7g ?e1BDywa˟l_ kĦUM+Ip_D!%\PqVOqT{to]S{sQ^,0x=Vezsw= E CMr :a5d8Ě;luΜpRoN]qKjrגt|R%Cul8cڹ~m8i"dQݧRG2xM٤nfx~_ltw{G}t=9\S8m.V597n?59w rvfN̠,w+]][̫*(G cwiM =2۾L\ʢk]:ɋ  InZx~iG rʔd˵?edPjPNWyL1C65q?RY噵"K!"jLd ,6TیPȲ4:Vd?50>dN CXzZD!{횣a䷧|jپf]q1]јE!ZKxLef(Dc's X-|#e f%-4273fka>i|Κ{¼%k(J8Z[#$:g} AK}UKNSKS^UTUc'q.fH~Řcؚ-rS ^RmI5ޭ 0F)~mLW!=8Uom>r+ZI2'i<̅ܙf&iVZHd^.l┼~6Vk})s.$pz/%y[#KIQ6JTo bb| endstream endobj 462 0 obj << /Length1 1373 /Length2 6096 /Length3 0 /Length 7038 /Filter /FlateDecode >> stream xڍwTl7ҍ #FnPBc6F74 !tJJ7H! !Ny~;;gw3 #E@5}I$&f0/- !ˮQ:qG:n1,d@>0G@z~H S_G "##%'E `8@rc*BnSE# !+,+vB y0 E@ݡ"\`^MN(_0 (`(  w"Sm=_Ww'!;`nP Ꮏn^L< s;`4h y`n'd  GyOB0[sp/<௳ {Goas8FE3@R2'Nnc8aF/BzCA08cPd#ah5<'[ p7\f:VIU @ sg#0.@Ն;!25ҿy&/ B< H|O ݿ?hz6V;o;( ]0ojD& u4 .A/oP#ˆahxaŐ%5ovJHH$؏sI #a!8 ` 8!$S\ y~+Ș:(_ H$f_NCh(dn|TvVrWpmDafW0`0:'|S%=W y֫ǭo^%%-VK|GLy=3"C-MnTHsQ ]]0=f^-KzY6!`oV X;NKG}ts:oU'$h'A8jU4|LԫɊ. 8WFLPi"n+64M,lgA-tejq uY<J |~ΌXz^Pij<@E{H6̒z*֪r6YwW͔%IOǘ=OC SAQ|`jo0(97!7q3TX ~(r'QDREE9/$6Z#Q QiqJ :uܮq=.gmnXN|\2~eZ/ SߴJ*K[ "`AOt>>{{\S*gȷ ^5Z踓݋|lQ_tzO`Qcvԥ{c5.qv]_$[7(4$ZyP,l#l}"kU[/-uinDdH>pG+fܚz`{AEWrkl>^yӏ&IqTt>V48˳mXmǿ`Uޒ|9]\Ti=&Fu^V—LkvCÍD9)'jgVߦYwqHARK=O՜4r$.4me] 91 ts]4)Vyv!9_"~ d|* GM5jH3l=xZʼnĨ; i8=GH=y[B~u:od-t$х>gv-VsOzmvJ/11r QqΎ!enIdRPY)/;<Ig^\]RKlu#5dFTڭ`B"#ֳ{ 9T#t,E/yi-i;Ǘ dZiiɒiRה"& NJA3(oSK˞01/|bCFCE@7{3ZlR}Qj5ʊA,Qx[4GG\8Yg3X^b%MƵ^8ٱڰ,X斞Ѽh,[gp0ߺj)yq_DnPOgYҷXaBs+n;'h=uo ﱵUtxZɷ,#&I0SZR=. Ӌ)Qw([r}FsVoȴ}0jg-@B!˓Tn]/Շ5)ۜZ,$Ģ'V6֪vt}v pgJztCXL Aw'*dw~in0>jBL[=lz+A`FR~>,%fC3f&n)K"ֺEyFM *VQg)&X*pǀ #Ȩa8@Gg_(*1lF V_Г 1ՎdT[E+bE蒋:y`=.Tfvt{ }LTzJg2U2f> <}՗'CoB19BųWFsXKUw'w)v zkjsȃZQBM;,/o#v6>,l "" XV?Ɉϑ7AEY ?0Lj3U5{ȜGͧW #M0z^#{1zD(źMU>)PY [5οДEG>>PۏOj:-%OԾ\И~\8 sXƭrH/} L^e}NO.( į{? qp3;|+q,Y|(G^Cq/&?gIU~Hgn›k-W 2K%#[j^%M#҅HDrin󓙿\K5r} я;9Y4TjP1c2>ܒ_hL[_^:cKMWf}pjgݚ7sD0T=[X鷴9I UK[yV$MyS8gIYܸ=̈́6*w) ]I t)Rut6Wp8W' /FUT\p+s?zm'JUDǮ9WvMhNw/zY -dp ќ{ONU)vf63V{dHDBt~A0u1WcΉ~f,Dǜ4/kn_vM (mF簪ŔK> 7k^?~\& !i"뭆l*Dە@NȚYRGEѮBȻ .Ⲩ+CTZm0W(dI?r>aV1|R43or/}Be$yى9ْ?N >#~H1*3j07}iON!zN$WX?;Av5njsϿS2PpMJ'OS_>k:qt3 NOߏo8|\n%T64*xƓ䫂g@S[28$7]oN1X.6=ߛ/$9 ţjcb!+Gfd$7t/y5:)vTp<^!cq! \8AM4 Xy'Fgؾpkט(=9O\rB['B3N#y &u{YfrHT'By^$."ו3O.`l8aIE@\z1~W<<iq9<ɧ>}X{ǹg'cԀL|}3usnB\"އ_ QI0,p@v珆ϵHkgiάphVoӉYJ9abV:Brc٪=]Ivo-b D'񎰇l,bɧ"صa{^6W*8{m;J&i>e -`G ? {+y^PZpvy*s%gSE| 3IG$^"汞JQ~e!72}{D5>Ju.Cϐ+%Ҭ<MHE_dq uh;߀TF J4U*7-"yXz(!B>u|.;֧H4]!:H;AJOqNJwOWXyRjYiiκriJ#nPQiYA5Vb w7cfwSY~8UQS!6s8:&*,p>G5K:"{ '2x+Ԏ1%_VthE1myZYDbAogogܾ3,楶`U._C@襼֣x VQrw7?φҤTo HW"I]:Xh@wɌ#83E*4<;;A x3Q=a×@ ~Q8 54~lFk+m{lv(V?mxnnNl:"Vtٽ /TnkΖM峣q)mF[6Ē)CFw?YIXȪl](72)-ORT,^| [nZ5Dlqq|M> stream xڍTl7NI.i)=F9`m0F4(HIHJ#"HH# ! H>}gl~}g/ `A)8PPPX@PPav8L^(._zE/(Sxߘi#@ ;, IťB1DxI >0GP&@.n XRR;PsoMF;z+}oo+@ e0o: ԁx@7&P'o_xpԍkuP_Z XO;CHw:ܡ@]-o?o> BC| 0w!@y} 䦿C9x(W_an.Y½Q_)7=V78 wtՂ# 2O;↱P [ :|iݿ_k~?Zo _7FlMM6_7f\" :\_sz׃ fn 7KpB H@:B~3#o\7^_AI@IRGAH@?үA% 8$Od ANM?M|E ^'X'_ʺlh懫;)p)Әܔxfa&D4DݠdžĄ=MT#h]~n>+ȫ#pvY+3sW:?O]㜱d!Z Ϥ/\D&-t 0^i5^a~ǖ:? G!5-,=BO6h>Ԫ.&6&V?gU. U%;)XӦd5] )u9ou.;쮞k*< iNg^qx4> imFuNݼakrS3Gr ?,IT?[Jf5ÐC9J^r[1hZ`Qm̼0#Arg?j/"^VAbe$ZP߮OOx&6s#;}K,tZ;݅w]=Mm0>uIIk^61|l,8Ř!ɰeiHy K^z/=i.)vJ`=UxXxZ;FEyW|{1# Er&F2 L;:.W%bk_ֶosrk2Z211;~:"tn\To܅O*ח1כX3C޻ 2+mF Rf@:SZ剷{aNg&_R*\M Gl4 agԀc F{݌yo{j/Z&Ͱ攷[R{K;w,ТS\~Z5LB2pVܜ@3T1[9m5d%[;rIMJ%a;IolOg%/[bUU :Ue!N?؎xA!-g8s<1+]SaCk7$=+)Rf(𱍮,w?MKm^S oC^:տ8 `>T^~74PgzLDc밠Ljo5eklQj 8\K9h%*%if<t2^tf2ٷh*K^m OL+b?g͍߮ue[ʜLJ}Qf=T~Wor<2B±j#GѶh.WmM!2l߃ۗdDy#, H7O=}p2Tm TEMmȂLe&'t1ʠvpo ֘˕6o5}4%CFx-bTfy!SٽNV@_HOO a$HL,H`܎+lZɹFp6gPPlrmG{-6C<ţLuf-dv?|d >|ACt_o1.F{RPu?Ka J~Dt{m0>P/'h0 LLVP ,~[+0#J%TƲ+w qoO>Cv+#҂*l{P.&5]pPW%xr/1OY1B fX2$Z xW?G6n)trZm|B\[OpBYl3[};$ޖE'~@AO,-L $G:(?Ύ-dOmҝf|_Oep>ȲycZ\-E{AOjPvhMQn{)Y O:2S+ҫ֘\[ʭUJvqo +&7QQ1 - 0$KdÏhKWТKx< sZMFCs؄yrY cƤnw?z%;-qH(`m*^zq2vSCbN, gD@7#l -s}&ۋe'N.~fǦ'bpIB6Tnl~ìˉv )covmf|,y먲O$Hk^Z!>b"VmN <qpke6;@w(]z6:{IgS_ W+L]i=\nBjKdI=G)2aČ*?94?^4#%Z0Ev`'+<2xDUa[Yfk38;}7.ow/ۘj{ˋwnE[ʊ5Ԇ7ֶ|g$dV-fZI@:iHNd7aoITUᜫ*:B q7U\7?wPAE(̗>Jaf}}.RT~ q-o 2D?܏t/(`_OMgv R:!Qpb:/8zgr-wc dxe4VW%k%g%PjWz NiY=

DzN2$~2~ZgdO6T 7IC569DϏOLS ֻV8jv3[33tv]$.Ls4`-H0gǕ>zM'R hmg=0p}#\3gQI+2Ү?L {F>mky?L~ڡNֶ-I"H^.f92GdTCq]{cő.B0>.|!bʴ2]o~ mnzPOjĜ1aed[1qf7uxFC1{*>3:M(2ObbNf[wxQPEnJv# Mwywj-ty=M/)oe؎$|'W.:rs]wc}Q$RjH:RG [J|FHEǷQ5^o׊y9sV@T:`3ceB)ВÖtn2K rڎ ;\ۨx%RBic:=q><=Jb/uSk}Cc S"}\Y.6EfxX].Gl@N弖GEn p0JDX(&^>ˣ t0pfJX^sγm;}MWV'{siN.G% "#f$cZOwؼk-?Fɇvx c.X7lB Z9 oR#8PlӠ*0>uk5+Z(P;;CX}~ G}aM2t~)fУH6L6}U{2[<]:Ɂ-Nʡ1rN:K$LveU^+k3(fQCnc2[,k*l$kI/xG4KjB^5z`HFr_ |<$,M^9)Kv0aE4g\ Ǜ!uCL+d}BDjMʑ__ʂ̹E>Ų uBNh;POv.WϞP<Ԙ-> 2"-/Rvx%Vcjuo2p t?.xy9M0s*SHh~I:d>:="ȱlUkN~ælT'sk6i=]ZM+<>vsZKTjה!Vld[E S#2x66J9޽U}͑i) C'q,hP0e>ͮzH*8<(yD*PdsdmahI/ְN_;6*N3)r!-nl'w"o=Ϟ q+pEpT5SPծ``c`ǩtNTo='4Խbɷ Z4fĺN\D!CkQ 1PuͿ5bj]haG(@zre>? JJ[<,hDF1W> )- بP-wF \v>6=1KYjH+ʌŠJA6\LJd=??*h}Dpׇn eXYET>DSP}"{?쇺DtE.R1 ү#8p'?bWs:.La%AIn~wzw3&R>qH><-j{I Rwj8ISεUP`|9'{pR;nj *B@PFOצ[;9ߣoT MRzb|fFjΐ[b8̖<x9pfehIJ{=KOg$9h0WJ"}N.,rOh"v ڟx+/fF[& V=eoqe74Ι)CvjU76f<@Q l?Xr?T(#!#**yٵ$RM'*jT+lhң>j&wgc!ve1S+#kHgGj tqO4yD}K{ ' ^uC)y8yU>-#Ns!l]]q΃ endstream endobj 466 0 obj << /Length1 2050 /Length2 13751 /Length3 0 /Length 15006 /Filter /FlateDecode >> stream xڍP۶ #]ӸCp @Np:E!z(q`~4iml;.%/5.$txF8"8hU WK&Cz8Л%W ^Tmr'~BRoFR]c#k}L[&XpWK'S)X2>m[}vUbRz&90r/M`ߒ퓄i`XQ.2VtsS-Z޿CJj[8+ C@@Ci#o /Om -|TW˰RZ= ƛH*CvCV$%[%ۮ|,=d1yBG6&o;ҴH(EV64 ᫴n o%^r*W?ҏ+8JW,LBZtn3oXKurs.TpLcy%G(PKѾ=_Bf *qJdt{g[i;#va!6>DJ%C)R4f2J)dj0K>4Mpuƒ4rt[f0z-R:Xe"~m4,f$FV;/: Go.M&L0 ( j]SVBlu'?Q<5mcN)/Hf$4an$!ť}m+QP^Z<4e֘9ruwJzvfvo^`4dQG\֌23ҺsQW:y% fA0a=yۼWzfP,¦e4*UњRٔ,O5q?s5Z.`si V*=`4sӂgf> 薋R4CG`% +chvz>DX:6OEq1*B9Cq\/lY4(h!|VgS֞<ƅ{ʈeHv5SȩEɮo8{k z9'OZ/wO:.79q>Ngz5H͐y` AbA&m + ʂa!!QGzq6wŧ1n^G8`B7؈hW]̤Uv_u|1EFʠ{omJ\CMM-Bd*i J`ϔ&]դ^',ȚHscGA]{kgGU| 6ƭz[1 EWGxsIof4Cm9s?×=v`zhGBˆ{`ewhS h"&<φ9pO+58$ɻ0-Y-zzt!fx-/}Ro+uއgK!Ur^vVb{輦[]=pǘ_%(DdSnVw c #&_#J#m5H"9ɣPaE/o _5;K%}HMGW#=5cKvVNI{&{ːk!q1;u&q؃fnV#,{AmMU|?!5 |F-%y .[EVU[H@ݤ^kWS:]׸Xܜ}Jm\NAs{Gy`w71@Ub.8V\f=7'2G* sLMbU+5GضN&VԆvvN_K?,reV+,}2o= Lقk[G%ip ^afٙT5ȂЌPUN ~X)Lq&W,aIQ#ڕ!TڨhPe𥊉w$;-J*HM֖/׹o}p+(yR4̀-ihg*1j!ҥNȧ0QMvlSkID=\vW%JQ ٗ}Q\OQ w %U2Vb;V+%zWvM^"jA^0qmTXi_U^Jɉ<& }z+ZP  X~Lޣ\6􉞣LF)@Jufw AQ2,N BSR/nW}`nb =bk懺X7q{DRS#)"BCkJw=nrzkᕭu_RMf'@8T{3nAѡn$m*NnΤ+ETxCw`>{"Q7v44+YPδ.dg#[#]i/vjy%L9D4x37?\}o {#:;0ٍ= MBYHTUz?RU)?X8nޗpLћǕFB{ctQ^1(|P1=2,{ekU]!5;k̪bG訑G0a湘SHNpcg";RH}fD!VV5~r< 4Om+A(4eEtf~FmQD^^bݨp+9jOW1W,C33ְ'ݽ3/wDԹ*\?{$dFM8Yf!$QfS)=/4Cݠfb M"&nط2T@jv:Btw <F>CLUFoz:]㕟,n S/W֥W@zaWcysH!/JLTCFD8GH X'-ιBkZ=:^٣ꭇ5oI %,Rq`c ~OV&wVXܶk?AbYBUgڱHv}6fH51u_O݈T /Ԉ&2;DiuT 5 Hʀ:ֱ ogAZ9/Z3S=pj<3L;93mzkxzie؁,)OR R[L5? +%nlkic#+?.ޢ,-h^,nPƘ V8ȶT8uGA-O nӝ] $#3[d$^W1[/MρA!ET@e=HF"3bH3h2h>GjsP'N B#փhv"- l@1x3.@=%5:\ $fwt$QXaB\BEdZSFjo݃% ?{+T-$T̳R\v1F %^{T:cfTy>wQ9-)% xF}$%YaejVO M@s<2N3}gOm& D͹KHB&~$>8Jj 0o.*hpj";gQz-a: 팔Z:s2E, d(]4xk&O5n?Nd7@߫pښ΢ dF6 i١ف \Իbʦ4zѣ_9vB~]h}I+$hZ 8m_F9 ('?b8:Jb+qČtVk_ Fs1xz $(YN `!7mEVؘωx^ȯFky*|֓C+>ϭl$)5֣+똬$0CH|#)V W3+`p bKty}\ek4'͌3sV 3aBViY؄y~ sLW iC:8ݣT?;o3_VxƨΐD,}&8]6rZ_r8N1tI~vTݵ^}xU, 5̗VĘ\Y[0pYF`0Ic?e[~Nrp)< '>$[Pkw.``Z.q](6`Q~%<9eit%JF*AGvmyہpAu hA+oIur7 ZC.kFCUfYd&-tDr nO`dQIW*Qt0%m[O =v{Y2U~15U(]~w{0wN*WT<n Ho(}Eey=*$ܽ-X{A4VA:Kg8h4PAH+N73[(# <|kol\G%RVBl#t_gYS ueQiXAMn$!|E?xjVH3EG'2i_ lG}Ppg)}+iLx_hVnbG2Zt%̦{1NO;j?}>gR ݲϊO5Lu!3eoBk)ٽZTugtVnDX}燰v-jnc𬛰9޸cu |ٯU76]t%+i~a=}L >_3-{xغ)tK1#ܞz)ts50X!+OLRIm>f*<,Rcq -ub2-Օx,"+C⹘ =J*1kyjDŽY OVXl2u?Q%sb'od.n yқl.bAu%vZˠ~pjXy\ug8ڎKzv*_Ua~:'qiq`8lG;_BNؽ͸ ̥~'ͥTr/zra$\Գ: /ZDQ[͎[/u?aOˊ+fWp2PrԲlTμތmhHU(TȤJ ;WVnTYw,J(E 4܊ٷ%̘>ڰB쉻%Fh;!saK^e〝e4|A.e; i S.)΀GC06TUL2<3p5A U7SruY({V⻁Kj2t| \R*gdқṣdNeP|&mq4JͦRJӜK s5T ԫޛ\"Mewq>< dRSoj\!V]yWBN,)x2MK;DKj-ڴԀ=43K M-d3I{܏M1z` D7 &gCUD8EZΣj^<$5Mo (oV-S6Ar޿C.݅'x@O8#ZaBd5ٿ.N!k<n"m}|3 ճjB &spTG&g5TPB9[AcWّAXxfzVkA꜉;\+8{U޹mFFV׭iP=k*`v)#5*X~(c<2zT4yUۘF=MO y,lRᝒ%Ƴbx㌿m{|Ri೴ ;qz(IΧ7xD"d49Skժ2+0V`HG/= kMvn ΅SFaV jN;kO]~H)v$mg:%y80h ^@ޥƝZwfnU#+vF/{zAggiUʘ_6MygKVCO8%B7HM ,yf_gEIύ+&(֐v?z1+in EZۺu1&Њٜ4!vÜEICC1@JZW\H7Jlb9S:26İ(?JMuӷfzC'7JZtM DG:cHEYz:=&qݺsr}{ F&8d]r˔5De!k#_6w/I_PuY4?53$tuǽAsv1RHԇC=t{)>y8,W, lg,zJn #ӧz|v$tNZ Bvɤg1oR`HdJV|Gَ/F(6?N}X[@O5^?l0 taLv[[?Ӎ p"S}Dz8diS*aJ%ͼO&a#,-DE,m;x,;6:WpRiyE">nHKBp=>(A*ݐ8i<ϦojI v)c%u7gk4_R">lga:u@4\Zn٠"D/Ew̏`'N02ժbٮAVnkL_kO]=\srGsY0 B_o FD?<E^"k&I6^.™߂m_(ﱨ=xʟՎ92,#ec˒pg#$>~%h ILD X!5I׻LwcgSppOƠ˰ffkg. mNRYWmx*Y2.ܼhϐ{J^EfﰷC<-/{Zqh$vgCpR shWa; )d'-]n(K paX@<bMF9Z|&ZpR3CiQP~J_NL\{k\BjfOkk4=5O:%;ICrRt.±F/u%(r򰟜˕F>{6FnJ8@E^x CV/{A֭NՂYZ%Ľ*΅\1 %m|a^bxF)p=L6f>c' ;ZƔ%njwhZje= ؼ0z%D].3,g{|)F+kB&&wVYk]T~YG'2DV[}/*@UHи4U3KOm>kXu' JQNkb2udj?DTםjQ Ci vPօ$]t C?~鄦}1ϞŨR؂Jy~R<8W/_Xsźֳ%YZuc5~ *9 o>EikԄ[UF464P\v$`9_fSu_<_+hAN%DxhH=h༼p0,ő9l {ohfq9xN۳UG= ){navIRUC:4Gs0"|:İkU*'/8HIFv]ߝPUùe`q/0;>Sv߹f6BJ!۪#S{}ޔ _R2Bl dz?.U=2<ڲmfӂ{vlG0 W3NQ"푍[tgj瞤_ssҰwLo'*ȩn yrupC5sD̤W))N=4(;Y*'35q4Ӎ>s_T3u2 ipP[[Ѫ'iV1H3"/7P|niTH% Vɬ2,+PpDA1nZ= >\>=T!tRi& eQ _dMtId q*x^܌m-[IF01N7_GÏn"c'~Cl7[xØliL!B4qM+iq鯧L8ק(e,q&!+(>NΎj`"`Q،G |54Sa16g/dΡκ7{ 4k5If'F橛t)i+'M)Y@POT1,4 xFV|*OJ.Cw;'|Dz~L2c(梦z΃rV~ kGh-RxzgɾugroNa ОE*4 g1?NF4o v?A?2\˛h{ VL^'f Q+}cBP8E>.jS\hJoGErPmGe 1OJ5$ +p(KNapyR^gŽ~5CtGEWB,JJ5Ҵb#ȷ\t`x =ykSo^ʨ߾4L\,T"^IrII5XR/ϰ`34dogRg#lC#9Z8F5Do{e2#K9--֟! GrZc1 {y*C)Yh!iAǬQj4]kϞ"Nlt+mg[$Gqk8UXpb(%/pԹ<( "5~Yy*LU5p<7YpP[rUq5\)oһP? . < yʊ@&A.6 ى?Q%SƯIIyFv0H{_DfG@a K}fo ?w$D,akuRF*P\t\H^1V>Ӌ e`B}3?B:*o[qoN7~2 [t@U#|S%A=6d*.p4f( $;8KBrQԝci0VRj~-E/n(:{@X6*bJyC=6!p7Cp)UҲr_拭(~I8 lm-9վpg/oj466k>CrԘX!8GpѹOm r=w~Oq+/7tz# O8bA4>ڕw;gDNf_ȧdJn;,@FHy W8ࠚtE.G~4#XՍ‚+[]@8?`9՛0Ճѡ_GqΉL{!~K^TXYl sP!QD o>,9,=-!z3UWrjR y#GlF6H6}QM0 !6i׆"w*؅usaf6Kg,r 4yQ{f.J_DvJ>U1!-J>mE$avpXcx[+GV^P0i`[+TX2z'~kJ7Js'n8`˖8^< a۟k0ߺT]%4Z>@ :܄NbQNo+<*N0ы* uޅ=`(.13`n Ois0HӌKI3; e `V8|3-]fi۬N`w#ZO &l]HY;&-KaF+/?v<ԙGWQ6Q-ٗ!;P+lDVxeUa_pr֙0gEo(ntӟM:i`Gt˿-5pP'FwN_Gu 7,c)<$w{'ՒY:< nĤ:Q%ʣL&guf#d=ݰ5s^kv5~(qxexIҩwَpjι ”Y:A ӵJ ӧ EWRG7sH;GO+ endstream endobj 468 0 obj << /Length1 2295 /Length2 14420 /Length3 0 /Length 15770 /Filter /FlateDecode >> stream xڍweTض&N] w5{  XNpwwtf~b-orOAE$jdrrtgbcf++hhXY9YY4l4TZ@W7'GوMA2 Sw#@`gge+?@ sr!P;9XY"G9/whn tE47;}w,,^^^̦nNVBt/wk .d8f**u'Kw/SW $1:<-P|@q}_ΦNΦ>6VK{ @YJ۝`h oijcoj2+yS*T*t3wqvwcv]%c@twrp:!Oh?Wl[8ZX.ÙE(++ bee],6fDTG3T 0f zo1wl- xYA$d!gN>h)Uq)U)G-& cbg0spx|܀>H?U wFOΞ!g)9 +97r)|9IyeA?&l@ph(6)VZx8o)h,D@fc[l&e Pq7&5#P0/h@ οT@(wTIGs'3 0uu5A` N _|0;:\ N "[7A<?"aQbA?""(A(?AEP@ P?T?Al jjn=? P NPXss dioPU@.P\KO ՟@VAxkgkc n_ AP$ 7A-pA _@KO2 [c/5?j35rsG߭M3ho8j;_fI-6P/TR6?A@p7u(,@S/5_=AP@*fU/j_ v1h@s9's0ۆ/u^L;?95o^ooE^y1TY>Pff[6$2Qkbfu\2is3Br]"=%14{W%w Ɂ<81oK%N;nd g2l-JeN}syʏeh0L0؁S'@2R|^;f@&\>iG;ȸ ^y: PV RYwDTğa6kt_~c+PRJC [-Y~)OCުqI6rɦ$!h{3$rtd(h6Q͛}lG'gH2z`o?h}@ W!0>LAY,PcXD鄦g!,_dE\rY;bI:Y/<+ǩCFifƃݝD9'6HDD_BLCߴƇ֋2@05¼'B5מIr7V& ZX8ڕ-hX `098ڽ<uP#kx$fޣyb8=3ČOl1c6@ݝʼnzCFR9JuSku܊Y Y3е/Nz L$|M3@*ƣ";JLvz lg Q86Q:EfF5]ij5;ô%;lϭ/}bne!Z[FI+o GA}!6ԽIn_f$qx] @qcseVmAQɧ&}>F!W)~LZ R)XwXTl`Gf2Lۓ+/D-\pQn,]??M[r|FyؤHNJ(b|$XFcyttv9y ^JbnC 7=-DlLz!II# zsվ,j~񂊨j!heAf` ŽO\ٚ,`$jo ԥG>si6kr2|[6CTa4X mj> 2olJEN:Iݻ#f_QzY,=uT04ǙI<5{v*eU /hTH_>oXIq74iA ޠ(M2IԼ rǧ(Vb!nf}lWJ!KiY](R, ˙pR!4.F-lTf/ci"7Y>Cƥ4#dN&Ͱj>U2;^k,`_,4c-C"I|+s eEd&;?7pKw~y UxGK9)>7/SKIZ굀RWzH&˘q8~3Ā?({ cj͞6g"W9 65X#AB.Rm?XneP8 ׋~BJV%hi``߲Y}/ϊ'b&{l4:K>=tH*fĶ]R5~eNeh<`}LDa6mz>g6~Њ0`(Fsʨ}ı4Zg*:qW4/jȵXмƚhێ"f=%".|&׽{eșJ }z苝 !} 09QLCXXMgF)j?YGf0Bk [;t<{ ܰ=τ{)o׌, 8l M/G*tZV,eo'{hAg,y5:[Ѓ(WVx\ZҶ;E|x'!O9+5\-bqZ Ȁ*m찙=?4Gq* `vFH^E!=MNf=.J}Ra{fl5)?\ٯj(gtqǁL97B;Qe9* G%Mq>[ИUMkxB=<Ι.+MZ]iV~"pSۖIP3g{WP85c莘)dE͑j3Wv|m1-(i\)q'w̕P,uJqb<@Q_3ת4iH7&D7KZWt%"c9{ AW(Cj`W2wDPpUD edm>`w̲蠸J#&?fj@s}޼y %oX#373Qx H\^0#3(Y)CrD+u1Ls ڲ/i'9sW*uFx2@p =0pC+w.@8Q˔_`F߳mrzʤt#$nm _{^(XBn?UC}s$VBJPD4H\c'G#\@zR Չ{Qk\]|kJ)0GX!aqҶ\HzI͎Z8=w|`aTr]4Uc/z"E(햣CZ]>q]w˄eޮ"0g90mM_tmNvb&$ZRs5i,hcG7o{"9ă9| Z kYDw^`\%_Q:u{,׶bp|Z몜=mIAwET&[뗌as~0wk|]dnq1Y敱Nlj㑴􌯯fƒ={հߑt a[Ɠ}-0͔Ϭ}dT#05*A sjk>LO}Vng QGDp6crQMQ{U<htqzgK_kka@6v'_W_ ܜpi׾B/S"E3׹sTa:pEl=3PF?GnXpԫ""2hkw}kl,tUL4VrN>^_3p9*ΤW˻r@x )w |%jY\IRB 6ttI$!9*jbrhWhڴLM PQ'|m LD6rcZ7= }j: d!ɆjPu Tqvʝ #s706ЬVVSp|`_g3WYAmxDxoa*@Ou, ˘in\ɤ?[mHM$(A9sfc#ipM˶8 Dubf<:Q~b{Ҥ퓣TR* F!S[vcZ8pJOYT\R!K:+[_06{$Pmwn=AW_!Tg& C_Tݚ='"2MΗWތio rNo9v LJ8yL]?EekG eΩ/=eJEXvTgYasM1^ZPx= ib.ZKr# tU-zٲV̢l?ϭ~s+~sxdij9Qj/'k8JY;$p:ܙ>h:"J$\.%-ʘv]*NmP8 #rIq 7n<8*!課,F\'rkZFcƜxH3ș$Sldo *~?Y w(}Q \jrRaIbTsNjHiЁ13衶/9|>.;LPzE*vhy͆#YM4G=շ mYWs j_NPcT3Ƈ ͵Mo=_W0ˋ7)!ms# KљI+6ueQ[r&aoCygG%#w4N4jZW+hgcd~ꨃU˔]b[Mw3c/YxN%!+V(ȥo72WԼزu2wx.^>/$Tmp$e-@C( _8,xnjCE/WGC/s]q71a ` i6hR6&3tC~eKyW#`N3 ~ݖ-K .MCOޝ=-;uN,#x?Ch"] (^hql@n_6'o[ %X10!KctB13깳m$ Vecϵ%*)EGwJ/!wUoR7⊕/؜GAA錄5ɕƚ| 0UWTJ_u+}NI-a58냹vo}ΝڇƪJ~3_:jc6G$8;fxr FuyM5-z/s"@Vac'@}Nm^#/AOr GQ !U'by%;\0?,rtS=dzJEEE_xxw/%`Þ^`5z[2K_ k?zKʞayr]fsrz^3 *=G(3S='Ym8b(L o-zE#?ȗ7xu0L8]dw\d'ڣB\UrT v"L 9;7rSdSP >m1smn~ˊ"d?-u.d!2]|ᐁ ?x8TrW!3*+5 {cDY]F< Mz6AxWH7 $h9ᙸ&sB%Da*XRu[8rD癴wA$R*5Aԝ0#sOr,ٌQȋ;Yr=z֦኿YgPlU&y/vzy=[։^;^œ6#ؙWo ӡ~R"RMfw.c鵨Ck-[ƴZaou4;vӞӲ]Wu h!.8Y5jNާwnr器Tys=_Zbz,|Mj\ 0]#EAAJTȳN)_|8uӀ/{e0;2&Y^Qaj_ 󛸐o3x )5᳿IR`m Kwvؑݱj1~wV6=ȧs %稚_!=Ҋ 5#8~qZC='ڲĊ@!ϕamX!z=$ SDgcAb s{JǻYbB˰\:k\C>zcZR /l;-o_C`KxE{LYGK]d`+tL!5^dO!D8AE-kg&{ZVsV*uŭV댴m~t0̠dgm8Mz:{$(}{uEv,fOQD!?0$dJf1#}a8 9 :)`f=* 6g:#HoGR| HvLJR֖{OԴՆ'2A #_YWܻxn%ځY`t?ي:El)`HL۽rfZ%[CW5&ƐLiCLHo&.s^ok>Q}B~xSOG(WEϢ>0V:29b I:w 8ݯ#0kRm"OYŧzpkJqMjnoʅ-LGelŇ[2iVފ*~p"F˱t͏؜r2VhqE%uYu yWO.5˙/g)1mpwɚ/BiR[ZM|uGl7UfY,gKݙ':Ώ: .Ֆɍc=(69z1e'9K\NQitW)ty,qgFGC{K^^=`3媪T/jpV@_ngyGtHOBխ;uA+UMgs7^,-A-eGOYu!8(Rij+jC,CT=·} j)gfpsZ/ u>=O_Y:fd {0\vDxe"F#/IL;gW D0E qJ8=\Ys9>:eIa/9piwAϊl^t iwj+`O6qY0)^W1Z{2įCMI4"ڤ@# O&ӡ`)Ȥ.kUQl1-55W6E:*^x ;zzP<I)<%R.=6r?xmL> bs3_Q8tDwby K?j<AG~97Dxil~16/ 7#L3a2^Aq'B4 2klRkB?br=EZr4&;ab4$LHJG^۾H5!Y]Y$iɴ!NQBz\/940A/ bÖD1Lܢc0qwL;e%Jx 3Ch . r8(oP1PfGUBѾ]=8Fi;6B[爹v_Z~<}W)-qNZxW,UsMZV]g ;0P?,cd[Irqx__ Ľٴ>G+nič 6=9FkjAC2{%0? N# !?B=;[gӝ'g7G PZH>'[trpa4j!wdB8j "ɜ ^'&G7ۅsǟ<+vCظCE)vc{~&5KdG\1‚$HPZIT9c%ٴ'g\/vGx!pUX-.d2xOPˆ:JB$5fb0f)ȮUT ?3iܺ=K ^I;MnwAݎ*qƑ8w^cldve+ڏ) ޸eڨD4ĩ:h惩c2џ9 +{P'o>ec,'^Aj'M6Sc7v9,$`th o ;r;u8e*Q{zh,yQO ~X6wJ,~ ]zdۖԡWmK 0Z;[#Ü3w;a (-m7hm.<-h/qCݕ핾jdl`;2Nmo nEpcrJ)z40Sv6K1w$fNuw :KJXKG5c\2Mn" ЯIп@ϨɌazAC˺x_Mىf)Go67/x1g8)Qv:A/kcc!hZ%/n2nLS[P7SV9AtbiL jf2si"9zCiVGZ: dKgHdԘ gR@^燃QwU?_Q8;ɎNG5..\3T^Fdc2\oܔJ:]E&˜P-{ C7ol&x%B1V\;AVucᘄSK_`uy3,*cr]pCB,v,xI1nHW&%?ͬgv.|[zWF=V@[P+P*Za%_aE V">MDm+;#BUgBPa4 `Y;䋲4q"d8T%yB/Umr-lkŲюՑ̓L\܏HR^[`N-nݹ$!zo5o{"cz^nU6UP+[^8ӫ_o8%(zf^0VC4#Է]tٲ-#ER87`pQ6b."oL1ąPnӧރbۋAG(eDKl0i>)U%mbN'ف粩iϨSE v^U0#љ뜡N/M@ؿJ#0c/Е2d\gW6q^r)j&[2WHB7[YVN|{ɼźYJ" :dVzR~G::hq!؞uRc>"+WA2=ɯEM$4@SQذ =]a;@>cmAP:=+%^m?~B6Z찤ZPWr™SHk7CdolzeU5(3Uܘ*./lvhYpٗaDk2*x>.-RHdq7Z0A3Ʃmt=vȤ,ʃB}GE[E]I# 4(@ F#ҮGZ9dJ|ԃNt6c+/2 9mD+Gȁl!n<EoS'W٤vW+gN4D[,ޱdՆ 8\CΧ+@iLZ)q Е0RX 2ı@%@pQ˸N+AzXJ`QR#\?="5,ځ{[d.dkXM,+f6v&RW6EԎK wƍbQCӧmH+,aF>ʌats4Et-c$J&Gߪ.}w)'*yF֫ Я0V?:93rWlH"{ajP+zkzm>WxRFfg cqzלkXi.*Du4CNn &ލ 2UkCHex?7E'A]t*HMp붍TcA~hp>puVwXh#l=7 WUc4{Buqhz#X023Z&c&F2qcӭLg+5*a'BP+AO0FኂhuLoDR>y˖SYDOk}7 +_{҇t8?>u0sNп4F&gD|T8q V>띝 [t,_Nȶs~{za]x;a|~_g:{M*zOGN3W faU ny 2QF{zgWv`JFww_74n9ε<#fN@d۸; Y\z㉡_X/DmZ%ʒJqsWE!S Cw)K!^-M6Rmp̤0@~?erᄒel\[zcİg0EA:nOp(Y /[Ȟo/>XnMSvB~|$ڪ'a'鿐̈dVA|+f1ThCS*Eȃ u&nn_4XXk{69^\`]](O6T&.-C3F퇯avR-yK`T~;33l ?ꉺ밧YdH?ͺF48.W*9|Nz'(0xĻs;;qX{šf0?ґ:HSp5>86hIܵf=(ݹM+ץx8o gdT<ta. ܐcA",wwzI1H*JK}mO+B5v͌{=`tCdYk|' 35T%ط}q2bdȨ)*z1ȉWekѡCzS7("/ֺ]RvΙ>>RM)VL|jM^SIA\.)]˪U!/90. }kUndt;}BjQ͝V*M^0,X~k^7m1嘻*|@!=P+Du =3$_[TVNp__jN)`v9m3c̕[/{z)qCމ띴!=Б.]Ls, juCD׹s*a0!FG ٿ0w󔌓OxˆM ɒQTߑQObr?G[N+qʊe 4C̉Ĺ\u;&u[KT@d\zJHبES}2ǣRUM:G6ko'XP8Vs{n`wT2QM;H ua k~28&CZ2ovTڊ밤-Os<_x hId6~ɗ&0:Ë`s{??UU8&p~gnK&/ >7BSd$*{l#΂Xy%*v!^a#f^)?IֻnwH_]:=A;$`ިv|gJ2#[xȱ_tqx=HSyQ'K5@ZR[$󐭊?]fh'ʗyaO8NURLM=Y±RBlybKA2y2'Y9 _&> _wVךjAGC&Q $lSԃdn v9E- cBDqtPt=RC ad(LË&ا&R©.;*Yd HdT:]-XrQ?Q +*su&KY@:}K.bcBDqxpouHM NfVc:*r}Y0u}yC;x@NsDyf7T)^T v&OjTaI۝JL=g2Ӫ^%> stream xڍwTk6" t$e` @ !>Hvg5"Q0\?H(}SZ8b  ID %%'p( U惄98pb<yW(-0z" 0(_%8h7I~~///>+t`hG@"=vϑm+h|# ;`G{P@ᨫ \i:nPoogs>Y @n` \&v?`* mZ*zj? HŇgmV)"\]p4 gJ0$r>ev?ǰp{@Ք`\h@;8\ +(}5C ^P`O(Fz@3o _@AЀ-j۾:$0]O|b(pxE@ &".HU#^m_{}p". G_)?;Rpq `Wq=W"B\IPcojA`UC wp{#a(7N8oJs @@]Wz/ ~LPD#`|ED?+=A#W)x=LEE~ߖ%&qŪ-qA_K7ey_/zC!TSMXi<{G=Q"hOy~72 +UPNE rmz[tdϦ1{vyt8@4Ro$٘c'_u }\)ފj&Č)x XSF;S y1ca ' -q|}6'Uh@J"W1j,ȱbYhF^;͛z]z٩ףx1NaT͠K#.P$u4cN6%Ԥgo5(,%=V1|Jŵ,TIHqN7CЧ|8?0K'DVn+. ba{,a!Go퍿jJQUe^л"o`wz#DjܼCtgM|{,[b4H9}o$@,7F&*LA`7Eu]ӻ֋w|)fC&-gAl<7lʹW0e-A='gLmk5 [x3?^䴰J'h>c EVqn^J|\rXϏn.p=Cx[+ ;!$kFFܶ9YmBLpl'nh2Ihnb͇ZӖBnto:L\ys2pZՋq*i&vj;l^+A6M)7ie+涮l/|c~o"Z:S_ւ$]+UqM,NAM6ȧ!=baR:d񍱟/{sv|E#LT& B:$I"Mɰgw.FG؟&]onx{aFYà!(έ&M(I: QF >G:3MN)Ivŏ%V{zʥ /Kd//aq>|YoBI<Ā| ųZdL>FgΒxEg6Ц-bONrV`41&\؟Q9;%SɹRyIi?D*qeGRBVG/ӑ" kO,Qx)wfh`f@  >ڴz8v Ypa/՝3>|/ 4g^";oe?,0^3q. ݋Xg?~,K jTqЈ>Pt\޼92}! F?[+{HV֥s XFoNm6Nᷠ._ ګv,7Bܠ0*pb&)U!;cyXq\{SMAV3|ID' ŽSï> zj҂/Nf$M1ĭD9HGb+x\jr#.uRokTΤ26팤']wB#9qb9/A=4)[t$Nkd0@OFyxV't6Y} tmroϯY_)g5>L٭#k,=5 'bo62\]9W߼awR~fO^lQ%)@hhIaGbW褍GF98uJ[#1?1dvBS`Yϧwri׀VVMWsIE bmR衯wQϐgKx>~_|OØnw_ qsx$7= MҐGUgI:0y$Ҭ a'Z+"G6UX:4bz35S,WOR*6֨_hķ.cLݬa}> I2M򤋑:n[[H5aձ,qm494 g~ 0OD)iZ3&] -u~27\sarlDb+]*GHл"T$?x}S ?c#x9];^!{=vw CBGswqstz"~h7}tzHm' Tt{rg[|FҌ ^?_'WAJX&J X׌λn>Ms"t S&;<ғZU݊l!EfȇfaD~rbęgL/n,k~.플lIRlO֜Єվ=*͖)sc|,s%K>&} jSً6͡:gwaK#E#,`VUaOu!!df.~T{|せr wLe,6$2Cg5jSHHo-DpSo2jǻm*i.%Fdlj(uo'e_>,ozd9z}GGui:L/SuKHpDҞSM MH)rN ,9ҿ MI|!M14eU{0yRZcc%s'Y J%+MS戌dכ1Ҡ>Zalc&~SfN[̇siYαfٍ,l5'q* \F RNfscˊKjdZ)uq@{sNSluV[{X_]ʕ1*y^xzҋœm<˿בH,̊IOGx[77Qf Xv}ʒ!K竂gaΰ7g08rp s2+<:EN ı^x DF|S3$җz[( Sihج"榢禚Å)#?Wy>͗J:+C@HNoy" Գ#Cκu>I .g!-Rв):i+:Jt+ses>A0=&*gTRz2q}ު"Խ#3NCZ.֚Oz e*5S+a$`% 7:s)1 EhڬLubVx8Χ&Od+$Z!qgCJ=)Am_nSeT7f$z{ l7ئOhq>G|G!oQɡmS& nVEXv#W#uyt\Kҷ;!UD$ua1JWnc>i:lo( T R_ɼ"m /-iH|VWrEǸ=j`AcSK2ͮe)$e8시akeaIԳr?/je&^B4U&r&MRZG gR4i>T5nP&}*`f]1`E!~'YzROӂ[;78ϕEu6sWFa[f%M:xvLn.ԕ+f"*c IF x3is캉5=UZ='_$|Z/߻N[dUg\ǘY?zS=Ab/ai/ڿãN؎g?xY6#ǪYA 3x_>읡KwcF0uH/kn\\aSeD/bSE5z^ua~\Vz N["r>_"8i/BYq9D|tC #T+]Q ff/Qy41Z6l)!d/ _?:=WbNA!4:Y,]%=65ň&^s~nayCJ{Gw zfsQJrpBt!o //Sx\S:;A[XbjT~n%(zzLm[ΖD"^7fP 7i]_ |w8M]^r$0%"̙qeˑp@G=Bǽ v,0r[߲p.%˻f{*y{$yh8xװAKrwO7b=1?<++.*۴G6|'bcޝ(be2}C(bըſUbxJWh5}b'J;,rZ57O5KzFk5qdj@eFk<Ԉ{0H"'/Zn_V|eۦ#{#,G%H&aYƕwZ73Q)%Z9dyl?˰w5k⌆$yq_z2eZwk[N-" endstream endobj 472 0 obj << /Length1 1469 /Length2 6715 /Length3 0 /Length 7717 /Filter /FlateDecode >> stream xڍx4־]6DC{Dc01FNK% G !hIoZ߷fyg5, Iu-B!!!!avv( '`7x"0=! SD]E@1)@XHHo"S :tZ8I:s|O(P.w` `C!(qA<}||@H7rAOo#W=;&.P1  h/#`u(W;`;0@_MG y0;u@MBWW}H'@Baj}̪pGe;BO O>WNPӯ2<MЇ^M8hߘ3 _ L< at A H @!$(? \G(p8C!N{B}BhB^zA+ł&//, @1( q @п_M ']9_k@@+ oT+*H mC w(/Z^("гo9B^mDӠwF+x_@TB (M  _7 KHl!o$ZM s_U8k؄E OO( JGo11$XaQ  yn]iPL4CA=h Doq {@|!`YX:eDE"(jWle(cY^C%{L@zË1=y( u#¡'=&Gxf:ٗdCF{klkTH^[W]m+=;%D1k% *jiuch¹RGl*&nC4RCs<ޣpۭ '9@atYJb0&'2 :v M,=U{|ߞC,S;-o;{lSI9{ov_i'3QCk! ڻԥ$'XDH MLt1n[JE*LSV0P-lXlDУʼn[*w {&9x jtYؗqj'A.w,Bg M(=(pz3iӗ ņ+XlZTwV Y':9ӷ}5~aQ8 K FE۔?PƚZt:N[={95~'ZKi s>RRdF7C20,X9h)Lx.L@Ug%ᇺYGzAA9VIOoObomҫX_);j!+LyWdazs%n'z@;E؎ 8ahv\zݚ8y#m= ƬvC X I-kixo4HPZ˅4u;`n:3ycXkll*ݣ6HC"+X4Ŀ~sٵj\:׬A/{(wewLfT+awHbWOR4{k֤X>-O\) 7C4d.z61Kˎ,E Uu=`ޜC=itm>_gB@K<`Ǘ?H5GFN ya`YِCQ9> 7ounU*lc`x7"tG~UKr!Kя+5A2`epbq~'S켣G*c{`{IҍЏ,I#CNehnJ{̛:2௮,XòS1*d`mUM{{;%}̈́o1_痨 G"k.K>]x9iG](yߦtzҜϝ a>"/ +{~5,p}g'TwhLj# tGLݯOkFYQ"0573GILoT _.` ֜1R#.5 9Q ʍYłK mIx6ZfĩWô/{Tg ଼?e (KB/м?gri>?U!8:+-'1 oWi[7Z{:Q1Bk P_ncA,O3"ԩ C4 Ӆ[<dKuhcU<u-l͇;z}O3 K$ـ88䔙\/ CyTEe:F-F$d(Wʱ]cwfyhØq{ϯ3`dq,دcGЖ8L`6.X^=Yӷ7Dwa1"Iv/ _A6<^'0 !S0E,F_pb(2)<(=sjUUs\UOT0U34yb^ЛbS3S}QSU~9\~l I2~B[׶`G>P4/cePm)}u<ڽf͜ V'?p߆i1H#NZ[!rVZ~e]z$y"i\{E"&Mv_N s$1%ml0:{(V )~!LQ۔9@,YP~uD(e)!t&6y٘u8>ԊF4*կe*NR~Vb2;}v$ZF*KFP4֎DTDyS읍}*·/ǏFHW^/Oo‹c.N80pyoָ@tgquoOM?PvG yziKm4; \W&KSB}gRWpMD"pKB{fr,o!_`T7Sf;O%޻Q$]yvK;J`K_)jDsS^7mXf,žf'p&0&s^0Hh.9^ ʬgw1Mԑ.T򦁉kBe q#eM?Jzuav|Ye'K|M#9DBN_~A DV"VICjK.9 ]Cn~" %@Iz/QZMqa'}ᒾ> dlf.t376776{G` #'?Eez0 kneb;S zj:y`KmRzF,Ga];!_Zf;7x*nq/WN!&(xcA| awZqڃյ {\*IX: 8+NJU3|FM~pfxbKٻtwDܤ6"tĻ3 3W^hֱB6x$S!;. ?(4}Y€]{,*cʲ "N!/Tŕ~uivvÓ!Oٿv(m?C8!٪0i]c0'|r2Z c3:yc<ֻjaJѸg g. [5vcBLnoߖH e Zfdt$ C5=a7" KK\i0nniy@\ cRwɼ"Ip,֤q"SnǖYP$ jJBRclOs":.3D%'[ųꠌȖOY_l/M<|`A's/ C"uOU- g{aiRY$7RH\GrQ$?/?ԚXgqmA0X3M\TF}g 4qdM|ݣe3)s.fR[EI')YƩ,{z7^b >:d[)̋4lWu?I{I|3(9O$u\_Ur[4fzxRUp~&Eoag =0X^x]J#E I}P,:ÿ[Z-ӶCKӣ:cyk ϛt9dqۗTx|3)2Y]j]P-٧b):!`TVnCgW&lӪ,9.W)we,i.)‡5W/eـz3(+HuQ! $~1-jϡB]ʘ4BqBO1jtT/r:b^al[!BkY&(!M]L=,MIgGP:>:B`9wvdv~e?󴰴/nE4T5b< w_9m׳}OglZfZӈ|j4b%2glb"X̗ OԽdgcM]hNKSA{M(v ̤f쳺d EpZ> stream xڍvTݶ-HoҤɇޥ*E BIo"MwW)"E*JGs㽑1Z{V]^y(!L@ %E-S 88 hg_r#AL @D%$`@  p(#0w"E nl-7 !!ȻPp[Ђ`.m!΀C*qqCq/8ЇP0(k`@3`w ^ p[၀Pfs@Mq!5@߳]oBpd-#;3 QC{AE8#1OC9P nοFUs"@O b݇:!^ ;8jk+ЀXBTTX0o[_ }\a`~HW3,n|C_Z*fwLx%aaq@LBg]o!쐀ğf1=?_opĈpG`-M[SoUnHwwC\> z1Bb\o1g`PG- pw7 G:Q/90];ףW c/['#!=Wa(A >D`ED?0BH4&!QD PT@0-̶Zv3 %FJ;ֆV3zn __ZiN2As9h?UwSV|ش?#ϗoŴ9h,5}oϾunA bk_mqO_Fu mUne& ixk+AS ( C?NZ|2zӅ4zD+QSf{OOSAX$56}#Eŋ~!z{mbW x7K?ǖD" C<䝜a\bքߓܔ(8EsQ  Q0*reRӔ q|ey7$5=9si0pTCuҁ^qJi+pATy:I7nϤӧ֛-f':"S2 j}LC$fz5lڥC`Ǩ˩O CcZ2ȣuY qxk~6>` lWjo\w$N ߤ?諑lJZD4՚깯-6ua0cVWkc@fl\7Wᜤ!F=y2;fyS_99DLifLPb$ک@!rא!Tr.A%f%g#W"POU/u1V@aǬ@ZwwC7{< o_HG|ZD,OuH钃dfcMQ/ex=wnEmh{r϶i}v}LfJ__8?V]l4#/D;ٴL'kyӵT&N#7-0836 Ookǒ`T3yr3vcѺϯڙĵli+ll r@ev!",ҪښɅ QֽRl%,C&註!`ulUӔϓkNa`vۡ8*&ڦ>)TUVPs*kiYU4(_f, ~kY"D[NDn$ryDo6/l`g2n#7Q#+e>;u+~-[ wXy(6Fv>mdq5۩^BCddоfޠ}v_5QaOJ6[zc/Ԛ4ԦQH!(-YlW]hA\t3ۯ2{zdG"f?H>g 0V<~rVc,T}^Y?Q/"~-lǻSCh[`Z~Lܮ1_,8*կJ"k&@4‘2ycW۹cM]3WB@&*nرΨ-)(8z|}~(%k)F/1z9C-VޱTnVڏY/]7G,qr6$*7ʛ~B~_itmPsrNcʲ _@b^%csAќ)4h8rD\Y.V{{E?DM|diWn9t$kZ\#0(Ц"JbIdqs.S积J9C;"պ:g&>h0 6%>Q$≔hMJlɄ$Ј ku7WOu k kt;C!uXwǠvTyJ<]z>^c?i(X}ؔ4vW~ rRᐕjZ1 i:֓%yNrr2As=MM0>ݧ/\m.aOmYmhWD粴6`{ Cy~:k޺2,~Cs1p #Ne=b/ΥNdA`=1 ?x( b[5N3FO U{T.2"*D-7<- .zŸ*bڀIrn~!fv5֬fcm ('=nr^3}A CBd%素Y6J8 ;~rSJ`U$uOxǯBo=2QD;ٻ g~{F>pZb 1R6j e j fQEp{ O !;3oTLͺܝ,вS $U Q'(w1x"A#ɧcrgqtYL9Mֳ@O;tXqHe{sEqm)S}M޹<M9,t9 YXo#B9?kP^{f>O4ȭܧϗ# b&br%>B$ 5]P4g샔vf;H:ZwML{3#龪I}lFC8W7xP0F `=}峒ELXG!LNS䢭)# /UwEggHzƆHfHm=11̄17V^2lo@c36 k)E([ Ĵj'o|!1V,+EgBG$Zx8j;%dOHnHM'yxlޥbó{@<,[+whsKO@ܥ2ḵŔSV*O!6:Qۡw%8-7e(Kmز8=VYOvoʥ֭4w3v8h"lI깱'u ֽG 5B.)Biۭ)B1Eog±*^=Hn9NKJ46efN M48–M~#(Gp2i!!Qj_cOqCk|1&aS]VihYp Qd#^3ޑ]Q*կ뗚V(cH ]C+Dt]-;z'[/n_h_Elb,x$J4hp RkC{飽-?ȿ83lX<\ǢSbKIxTqA% bFO戍BU`߸N%Am0ivٔ𽃽MLT3"Ltn 6XrO7:d7O0hFkCL7yߋF.t{q& Y(C ;"~e7k8-p2gEj]せ\/C9ts33>sVm;E}+%Nb\ ۑ Pg'אֹ5 vG.*w]uJ/7&UW&SZ3jwݷ ͏| O+LŽנYGW*ERdw Zg^OyA椻\*GoBAyѵ\q6ucS9rgab!nۀ˷c<>.40wUU3ԯg–Hf? 0?3|;E XTϑ-@ n u\ e~)"F.7ߴg5 K$goꈍթzh%P:xn<֭K9Y%F񡽄MP`V*k(L|5m3gE+'QG+9g |fUa8-/|.ì @ad;i,bU* 3,=.ɢ?9&kn-h1;,!uvbY;O5'z1ߺI׫rL!5]*/UcX$嵖Oc;,EޟE ﹷ|dG(!E5 ZX<|Tgsߋ̅`}E3 ;L ] Ѿ~|mjI-=CtG)8+MO^"=o>{x(31XvBhv)Jzusހf+{c27|Z]?T13^{# 7*P ^_kK S,%c뮃LPC8Ku")CXeQc>OeÐJ$7ADfM}WB tQPZr؜4Qۏβi̙ )]C?JبD+XJXjWZVeKkoB. M"6+)vvl^k_1fēa,^P40o('T 8i;`N|E2 /3T2v([]i'|M\x]+= ]'@$FvwR\6O4bzPN7_0WKun4IN۝/~3* euǔqޏ2PBjYrvbE2T[,won+Rظ%Yi[{:?MFusxK{0FHgu|XAsIt|Na6!Eg߲ O ':t.o(|ݨTU r"g7z 0czꝅCP+kl~62-9p칱=zr+Ԋ;]>.otd8Yyf*Pݤ ~+9S8IUCRy!3Pg3P~[3?ݩJxS4Uサ -,[/Sz{l$uYux,WAۇ`kr'kWܧn16sůͦ5{ ,*cJqkp+' $ko9NZ}b^Us &@jpJfń=M]9_j#-(5 SaiCwѷuky>)p?anoj'*pu}VY;IlbiVJug[ g?zd%unklILMn<޸/1K}fEHY~o5Ŵq{QUdRxy%h<dIt}j9%wۚgsqUY?^ʨX0ejԼERd S㠸 7E^V Bq)_{By&;,{@ -.nG^e h:JK M>t<`U, 춵(lo"B3"Xini-SQ.^rB߽_uFeuܧTCgCs endstream endobj 476 0 obj << /Length1 1460 /Length2 6493 /Length3 0 /Length 7497 /Filter /FlateDecode >> stream xڍtTTm6(1( ! ]݈0 0 Cw#%!! -Ht "(<>}uι}훍EGG n QÐ<|yM}cQ / &`3 \p8# $ S!Q~p@/GH@nP+&/@ Ý<P[$j`NYG  -#Ї?RpH"N@;/х|p"mz bEraK0Hw@P0悊pYA}U YC_gW%~` /Yr9Q 7dr]9$ E:!]x](A"J!]~էE@c= ka YY"a|:BTrAAl H0 xmx:A~(Np'5j A}]@n O?W+( @aΎ!֨#S>|=C sUMt440MN P/Q1?耠XU5 Z1]_k88̥GYC APϿPuE@>ZM񿭪Hjda6(1 .JP #?_At._w *lۣ. 羊00ל @ȓ%'aa7?j  HT` Gj rAqأ`0@Q0WB bntqG脀jt+ { fG!v!-߫ey ,3FϼPp{nUA34l|ڇǬ\$b1O^׏6&+8ͨhuңx]ƻML$>*!UYpe"p}#aIGaD"HbiOF1r-Ѵ릱}Y=ݩ;D*i)Xrzi)]儿ɗ&ݣ-t c_tg``s3 B#wF[Ƈ$Y~zybӂ0HaD֓_gF@Ƭّ4KFQ*w"W>95KAG1V +k,B >~4}IFF#hs&Cdo =pZ@˰4骦ŕi`H)7|r)gIJAq?h Q32(ZZouTFH^:Bw@βU/{˛EZB}.zqj,E` SqI ;9@tv^WƙR$6 SyVy[RyIFH5pD*!*"YG9]ŨN~x`54Vc/ߓ<]%i?4ۥ{1/ gG93\-g2ֲNoXx~S3(>M >sl\;,b/I;px!~t1D's+ZeǕFnRCH40^cI*N}kۇ飞=lw-__6~"Ol8;זPYL7̝ rnD{!)S156[0O>Kry]/ci?W2>%ȫ,uJdzc xM:}\y᫵Pӛ77v32; =qyrc]~9}(D*x'L(c| R$c!Wqݵfo"pT愶1ӳNP @/cYw =BupQqG.qΓqM9<"=.UX[˰xeaKblX9VfjN[xX[AH \F#kQ܊r(0"ސVl61{wWb]x9FKcIϰ%7YP?&7`i g/rma#/o7{t L(>aJpcߨ͠Y Vٜ9YR:*(mm26`%K̐hD%eId#8bfY*COrC_HyЊ>,#wL˝wVt1|LMC9[]VGhF#o-_@WǮϖT@BB2":)ۤDW笘3ʕXF/D:+RO.,=]a^yVqP43Peq@z_V ] 3!y| Y5< l>M_b~ZE(oF{z20ED.h%IRFYUKs#㇊be 8rq Z4[QfhbI~Z6ZdEVC6IfS$1,KBhc}?w*%4YZ,wj*^&CRK#eo{8\1LuFؕRfgH㈹Fu\$.v?4ym2z^ՓiR[lju ϼŵ Z4c3"xc8 ۲ܓL@nvyYSp]iM9xb !|ӌα;'$\DB †CkV /Lg{&S)7=\/Zv|+WR(~兟1eS9&ރ{NR1M^,&Љ; f:C /؝;yqW(Q7\Vp^g>%M3U*ՠOQDKY\IXz/0굄E'-[1N* {#C.Ue]TnOST$d!N8Ϥq%LtݛVx:b." > CIQEN"8q|"S-C!Ѷ Êְ殙@]K6- do̺Oޣ,m/fz$aͬ"ibJ~62b߮]m?{Mů2-nB?ڽd3m%j3v{iTw ?.?-ܶI0}V|yNvzyilIaRFS@+#kZBmB

p+N4X!W"L91ֆEvqD$ӳӶdHӳ}DLۍ Db"Z0YMNTҽbgSM-ٳ6C0~]6dx f u-v?p( Wn.Fˮ+9ـWUc LK.$B ч~:E šikQf\Fy=QMqiF]ɋ\E8\͸HN3@ cQ#\ՋR&U5-Y{<$D+u?vyț^c9jj OUz+BT/wc8~TP-0|g4 s]gB? Hąfٿ ;+P沟'jp1Ї͙Ov,/o#M/A(_?dZ\=h qle5`2~¨(WH!sƓoBmڌfI&eJpحJr P~{O+"6HȷWX %y7!@VPNZ{K>LbMC$g&6D &6%WC18wwUXNOh%^6oMvJYLXap!3}4;,67.LБKgo)ժ'#Ԅ(~Vy9'.H )ưWU%nL,ZOuv{p={"j cT |eDўbm#޵8<(Z, 3'5 T2k05 ^EەϢP!hKe\Ga8Xr?ۢΕcz %γUI>KD} nM?dkfRa89(*iQ4́c+C@0q8nΝNΩPLi>L: SnΘj=_bit!?Y'jep'J9#TperY`5xJ" F!i%G1[cIɏ^+j"([up~WayBpvJ֠QsqVN!)(CrίZxV=-q"]ST&DxK0oQ`l[!0La8m[6ÐlTAYͺ-RA~ ZJ #.mQ@5- lC7!io&!S3~kεpoN+sѦdk endstream endobj 375 0 obj << /Length1 2065 /Length2 13802 /Length3 0 /Length 15060 /Filter /FlateDecode >> stream xڍp$Z GLlMĶ'';mNl۶mM̛s^y&!S7X[90sL0$$aHvV9|Ȅ> &+''==?v!='SC4-@ hC"hmjgjl?6@;S=+ #@?!ȹMl8蜝i,iy(Φ&y= he%߭MLP6rpֳ>@+G+C#;@A\ kԿ W S -m\MF@5@/C= {='=S =K}t LmiM-0c2Z9Uct>\s+kg+ #S+C0tS2u CGf tӳ31 _ ]m+ncm0hijqsT/a`8ƦV0FogРi}0GL(!ï*Fv0h,LlVVF3w2p؏)`3AX2\3vV$ha_?z=KS [|c?6@CSGw~+c^h(g``77%Vk,Lr,zX. Z2FV+ YX ht:Z+kGw#k; @'_@'qXtRЇ'}3A:? @1pb)q|>A X>t/&MgQ#O![21(n&}njcŇFhX^~\t~<(PfGkq[YH-:Wq6KhQ|!@%RTm' 4Ao}xщkY;ǃƥQxP5o ɲudGA}pu/5}Ud&R)Bӷp$[< gJKĹۻYwX*H|wMƨy2EF.lblu,<[iRwE3)hA6 9;ֻZ$L4Ğ!Qdze- HVs>|eX7*r :.|p߭Sl՘[!IĜ`=$0[015nüxP | ҬHq;]X&6F!2$/#ו"=)ŵZ1 r~M]enK5p{㗵z%v/ UFW isqy>zvntN.NDfԯYGj? 8GJ7RX6cU$ uyd:0񘜢}(XL^%UY _to̹|vQ.ge>e)FDK#(CUYV!+j-&Bl4H:˳&!m߬_MVxѱ-eWx[Vv8{{$3X<)Z{ԌmS3#?Vr#yMnRšӷ(}` uÈrpiHD~YWQJ'FByHsI=YYyS4䝛u'al!S`N*ҁLن|QZ9ifHpi\ჟdͭіA3uO-Fv:s%cW63]AVfS'_f/=i#F͔߾.~jd-C%,!"߬:! c"_|3ŵú]j8vW OI:mMd܋kFKidBW8۵]">Eֳ-gI'd1A"ɡz[i*C\,kyrsCTYʋ#nk#qiXLڊ0rN0_vbJ!+Y^9mQ RpS aō)f%c@ P/: E(&Jsj]V|*ֽA#O,%Lyƒ$Cܞ'DNޔ>tS`eGc䥹P$ux-Akk^ 'OylYBfPf;UrWMxFߙp; n;wDq&\ \oSŖPt ۹5^0*lGwDNQ1ZJ,hې>wuߛvs +· @ QмW9]VDw*ID=KVt\#Ei[eE?d/:k%,&pۂLT͖-@6ꐽ ZF^O8~`tXMќ!8-e_đN h= y5$) w/S;xdQOl$t"확BNLiP՗%~Be,ߎHԲOMz`a r @TGoK@v d R;R%MX/'|(wC'x.ף7k|z@{81}~hS:5]_(v]ǐ(+:<ȟ} ?݀`RNa-r~ 8LDւ}GњP4wL337LK ӽ}QK1DgcYrÃ]ƣ}B7nej]T|=^ *:H嚲b$FsmjqfPFLy'y G@y*yr0Hq3hhM-|c^i KqQ@v:8&TJRx`^ X7I+^?Njm5bX5NMT"=<}px{9MpC)pMd_E>CP_xCr֣9og$#AP>y%Rn^V[C֬3K>U }rR8ECݛP%WjWiu] ݯ_%0xQxQ Ǿw#^t44NfյWrE^$ŲUJN~Uػ:1 сb{]E8n 3W]s7Nx_8G$cHJ{ԑhfNsцps1r7n#xBaؘ^zXSYCD>\N׀/ }vuOCΎl9aS| ,u>_)]֡H/p2${wm4})sJuiAF3%pIK*F:6W Nj Ҿ_PZnNV膥Ϡ gO#laZEzufTd0场s,:f#h<-b (nNfuǀ)1)a 6C[ kr N{L('|J"i1Hdףm3qO,&k4aRsԕƲVd/C%_ȸ0;A#dؿEewlD>3|?$8Lϛ2rM}.E$"dG҉ћІ!Ё6L(U$r7eqS4A_1]Kkv#ﵱ9wR60jP~!rcPr*{y1'!!qrcw$C+{Y2Yp5lޤ.TWd x|Qژ ;J*Yj[Y}BFTLKƲ㽥MYZ.:J(W頻n|,|ū+;j@,8@yL ]("`<_λ; @}> )#%C@@V{b(f+%OdNgν]P9$0d3R/ o=\/VeŖQ~-NRX3$89\G5.Fsnw/¥bNwf;LZ"uw֬*f$$u*!epo.gTl*AcG/] oGk uRcQힾZJ#Hm9lM'@xb4^F6 O8]Ðtm*@ۭWHGH< f"9t  26^\ _3GC7'b!i|ӰE? =sf&X7-5;%\dŒ# w4B}NdYޫ~.LyAr\^ = qHU02MðC{Ol_$T7M#QlYb=N⸏ذ=}3SKɲ&̎ "CkYx0}h ^0 MNǷ%XgǺ3z D &"q4TM@WBGrߤpkzrSJl M3@Z;I]Z2M|jZ) y){>#VqTiZ|AYꗖ邢PxΆzΩYnE[K^e 3t 0SLQxlEV^ פ\n%}0⢘H~Ԗ^oQ~OpjH "iMT(4X˥T+5$/9hR֡' gbZ.@©Uf0bVmyk G*)Xje͗dvTilR*cw)k|}ǎ6цtB^)a0G8p+o;X%Õ֓@t15pkwK!CObִS[93{9ѦqاvWTԪfAҚv!,;3J$yI|rYƅ9 9^Q[^:)T !v,' TĸBI StyO /szT#p{TuE4趡c5EMhnh.}MëB@ X$lB3? gSn<s]ju%4UCLX⾹Iw.QOu]cR5p?Ͼω?Gs%u4l;*v1RaiN. K):LA䬔3V뮵$p 5iC%Ls ))ҘP7- ;~k]S% G98H9" )ns>z]{np>Flt:__6ȃ?`S - imPE$\vs@CwH|}"Ӟ9X:ӕ@uW/;_:u]4pd)@+:|<<}[! r $KVo$6@B{cQxrk|ֹ;0åyܸWA͡s1nI]9Y(6e 72<$aV7&a OX @ s.eV`&"c8ʹ#G-񂛺ow V֪NpE QXuHM$^ f},[=mM?:]_4Cozf)n*n8A*;)w3@Aۆ崴:~^S%nS39[U׳D8_P(Dꉃb1{tĺT{Ӿ8MKT7D΁C)o0189R.4Д uboŸkbU:6g>`ږ[pjڹ[FmM~ 6MwaF D?si+!b ֫^ЌrI]{J)-2 I 1|BzOiiE8J[\Aw̨(юdpL'UeMI*$e8cu9;{;>{a^ 4CUk;Mh+saƛ0r(טZ+p@«04TQVr;كtEr<_E/Y9uR2 &Ƣ* Z菭eq]*Ǯ4vBUΕu^R-R~#ʂ2N5-%QE;yS jIH\<0} >/h#gM &EIdgI; R ŒwoE^2b_pᮬά8JlvL}22"q.$_ߧre~xÉ`hmdpg1X0tNrJ8撦̼ 1$/3mEq2-D!sF.-);jk"nv{9Zi3ԆڍcJ%sm*$L,|ԄP iUad1U+@>X"@ɝ- aF>]sxu 'WCC=HlK9VVoV/#?oh% cvwYxCh)Rd9PH{ ɭlfA=Z0FVcn'qH8I~Q㾼+y+]RȖBGReZ @(5I;;ιacv+ʇ[]׸w(_\:o ?{_;H +4[B62,ZӜ9Ș)xE2GH~rwU(|j1ۙb;mQ|)TMnׄAtsXǘnBQh"cuŃv]=ڜӣvrGE=tjڇN$hGj<"@+yu mdb5$Al?:ˆVX.b?nNmrd3.jicܑ,dl:302 +ZvU]r̺n$MN9:魥:< "W>LAH*w`1ۀ?;8K8,P2HhjT2,VrP~5 $}$Ư]B+1i[|@΂tvjYoc8zh 30#oI;|F0vtI%5r(nCP FyF FG] =ULHr b5L-z# ʜlg~UBuV mދ讦{ S|Ksd9ەբ֟b{Zy `^!Ttdf`$5]m9U{mC,ּցԃT-g;vidqpM>|{e_Z7Q8cq:4ߥY[ p鑍%_C o*Q<\\ӵ_m>,>w0Ϣa?0dNƢpݹ g#njٙNQ1Z_v希rB=,^C!>`I[#D#.)b*8(sۮD>3`{;1ی|`*_<Պ o ]H+Y7pru5F(΄u5g{6%z4x|pے#*tڋR]ߟN^fwI '>2cۨDEE=svn;"N'k>x(z~(z}/AC?*HOJ9<s~/HBɻf_O!L8WQ6Bl^tL/|)sQ}I9R IZ  Dâ$q~TQر0ôWC_1o}frAZj2O'gEBd{m+:{Ԣ2{unSR1|ó+[}⬪XS$kәZ0mf Lנ k#1?! %GrU~L '~-6;"tsb:̌vHEp}[W}>Sn ]~3-&5Y*G\M[wjVMЙD8Q8_Zq۴ڿxD?^Q0 2 BFW CZݒ:Kw9u$?01E/z₧ h+3ZX/(HHu"q68 0^K6 Ǟgw~P+w;"̮d]N'bܛ!dͅ YI^L?2U֜U(/W/y ;yf3O*jo/ el*u_|[hzcr]I^݌X9Ksƙ(q]bYE{+-"I'}6oZ{9Τ_a* ]~P -LN_v.! F}sjQaV̫_߆POʂ('}yqІm;5^=hp4zQ hЗ૬Z0Fcƿ#nOo-NEMʻ^fy&y(䞑2X́.HRfQO£[r$ I_~u7t|B#eŲBS$r1h*)jj8>mIU3>cs5g2f%X Tlџ&xk)$!ܮ>/D]WP9{ݱ8+ &#VRhuJ&&_gkYbW_>_!˚V^ÅSaP+$]NQK|гvՖ`ݠO5 O0jδ`K1pIթٳ.o*c  1i.͈5T;&psF2#{+1)ﱠn434Xh]ktɧW6Q0]*ܟd=t't&YBЍ`8XmJ^SE?[p2 Ĵ}m]jkfh@aim-@8؈YpGa'ÉҞlD]lEXp/Tj4D~Ʉї)=ADkvTpaGy:wLf9죈Ig~r6]ӋDx#J_`a`յUWZ(*g&}q RGOlVM '679Ŏ]p 1&:MGzA6h<}gchXҐS\V j^u‹W0ülg2`3Oe \cH>%uCu`PJnJ)SJQ6cŔ/6iVv؃yw\^8E 3l݄t?À"٘$ҩcirHϯ3s]=~?%pM:lȽ{ [@i1ZtJ1>)@QpcG05)ڊ?eˑa<=v:'S@6A[~DE_>|HV "ې@7D$E.kD5<.1 ݫ1%%9X ΆY]{۷K͙fap+"(Kn{Q46d,\ﶽ8G`.d@I;9@c1 J싋%0cNB İc51Jm%gcJ2{#Zқ|,"aOp@hڄ9Ow+T$m3-|XqγOo Fgv=`(|(|Ejt[^m iP{ԏn2> LFFvd/'@,ebB/Y>uNVvN;܎9!\۟ƫ|`KF$- ypQb ػx)(cs:pO7 ?o-^gp [2TjNA08#WڿaNs+SbT2U2Iouċ> stream xڍT6RttCw"%5C0t  ( R)%twH;s{o]<i>㖵C0$7W #efց"!qu!g(&<Fd `$Nx=Ͽm|:JZZwNNpB SoOU w(S?g4KY Z~/[_j5jje]WzOVb uq_*:Y4BKM([׉CaM3כuWvw 0 ./j^ !ZB`G\|Vp D#aP7Eo{/5#>P7B=PK<E >!tرX[!r*PmXEPn?_?RR.3_~\PŁoTmVP?bR]8Ll~%QQm.GՏ5GPc bP `ΎDńtFpD}i`56?dG=C.4(`*/qAA3SD  '? s? ?G2>Tx߽\=!cׁ[ P zQqX~[V6(v^>;H麡 /qqŸ>-:~HWx[gOkg.F |{XrYͅoIK?Қv۩;9DmYkwyEcS lMo W!;6IXfh/Vi"3rb;Хm|'Ro6ۅƘW)bN̝4^paU-?i"a}SF^6.NylSOjWM༰LkeȧQ]Kr`sMA,>Nȯ|i-.uJ.S.P;w+WB?,NŹť-*Dž1LqFS # _FTkZܽ0(C uI)q4]o{{%HX W +urg}byԃ Ðrז裮t_`ć2]ӑ--uUͰbH 0\,DIO+%UΘ|}>0Yb~K#t#ݪ=W\=֟<{Yz+2R0Yhj@pyV ++~=땎}jni;su]=det4wz=t) j_t2F :˸vҧz/4}H8V2-Tt6r:SJt*Ǩ`V ;ч5ygg nQ!SMqEgTP%;Zc'2x;\z% lM ? y8B,h#RܶYRҷ%94Mw72 x9@)x$qOVド-5hp&"ݻ6xXٯK`oEWYvqZ"KL-巕q6CH ՟~cuQO2{cx|\ՎTлs"?WXC<]0k|6Cͫ2Lt1؇9 n}6DDH1(D'_uf1ӗ'sl9/Ru  _پ΃H.k<8R+?<ipUY]E,e;L[$5.˚RBO 1Szgr̎#ӧ=u]]*SYo몽@wZ`7yZ1 IOοXUh-,E ]u!Lb> ~7gk[f" \!iX'HOk0KjxrC*"B=Iģz I:wv5}.x1}yL-j|-%䳅Rg5;__ k\T*3:ifb=y)m)?Bv0=S=wWi㵳jvBb tǀG Řd]y<848k 6P%.1a F 6>NzdDl0ŧeF?;tbz,#D+Ѿ<ޜt6wgMO!`kj@3F6Qkt#>OdmFwOF+48o?Dﻮ |@ACo S~94+ū]tdWg.ؤi $u6M.BTOC`Jg`ƚ+eT E˛+,|KPJVk,Y Z2"%܁suC^Y)W}$]{25tT^Dh_9DbCGfkOXmncN+^GhtTOw.m_ _#ve6u Rxvb^nj)fP$kVبro2B3v[[vJ[Vע]C;D[@]!4n6";}Y!tWMw隆a~OMZ|츜cX!׊'+C ):ip/RʊqXtdW47]TPLBK;p$!2a;t<ef'CJ\OutlM*7Zdk ҅)8950|w=OTXȣnjo-ܜABsK=UAIPkKC,L^,/QHZx9A SaGȸc|O.飃Pj$_P~>l7At`5:W؟ eqVaӢrbг\qY̗%j"}kIxa>߇wb9_t1%H}q~c", 6KywSkr(XEvl4[ܱ8X8fJxIK`vFlr NOI4$HuՆCֈqsMH ],5/rX8r N_mP,jgŌ/mD%'|ॏ74*c)gKgع;w:m?K ^eǍh1Mq4ZWB .x*Fq?5\k1Ȫ*^j>!I9v7F{v\T9M\Dx ) 2 7W["TG5{s._t{DX BOXs,2MʝYm}1?*֗>^Do:5A:U,z~Q~ck"ӞO~'eIFNET=#]u.u̥/~E f' 2| TZ䴈y~aHW6$hc |q'9GѮO^k†+k!~Z ?K`|7jQ%e5,OA׶ , 3&DNXgaNqiO$bʉO㣏E?j܈"7k`xHׇOCUxH5*OU~Ժd6_QF|a9%Pqh_i Kt̀IF/ɖ4z|E1w_j+q-ch8V)$cr-#*F5F"vBt yFd Ln-D_"(%snKNn_D:/($kvP0j~t>l QkȬ=%`W6eXo{MJCluXdG6`3jcܕJf"`JI zN\ҵGGPڌ{9ۣ<20G3{{0`҂aXET%! pr5)` :kyL0E Xk*-&'=?aΔLZ@((i0HAW$@I;yK't?ږ8eվ߷Wzp^~Slk q<[o} zߥ)L А%\w6O$+6vy/EE.TXS\\Pc ^C1M>ugqAh'yљ]Mp\O/ox۠mlo+K4 ׫z7t^~|zgL2JM3DUHnޏ:Y؋FQ.؀۟ɌlJ̘0ѿXL hs0n~QBWF%P~%J@ J|zIs81w3P'q/In4vMI攁hZY@O$ھMސ⼰ynBpVv _nKQze? E |<꾈Ek@,R 54C2lPe]br0LBDGt4l˹/qw>jIG G, Lm89DZf7^uFrI$*ffiwy^# yn:~o]u,oGZ`f{3 .YO5V=~fchR3sK6q^>e͕`j)dGo&~#̎{1L`|̗iR7V7o5 Kv^|)NM%{NZu`ApONj{?wNMՎв[jL5!,"-xhV8^<}H"Y{__\3.{ozoODӬyvۄpk7/>U,W>j: ZOA6 ~Tsb3i&3eu7ڧ9?#e֥乃GtUnRN}|" 7;F۔ּdqȽlG$ë'Ι"sA1=8{F_P <>Z]L(:4!s}j~exgq[;Dr%glW|$$: 7iÏ6/${ M|ՙGtK$a&yi|;|{`VWշ\Fp@N(cW@/dbf, Wf- ־kNK%=/z4U/Gte( xC=i,g#?smypRj`87ޙ;'P#);K׽n%27^;dO5ܲ f],9$vVkԙվPNVdؽP f+5lipZ|h,2N4vpB>lTHw)B 0djڶ(噻MA.zQ=J!1 x/49g@iކ`j_zLqI6lc9|(j2iPr,_ |8J2Ymno%_pjVBŞXjۓx 'Y[KOHYYKOb')[DywjVSDR$W|V<H:!PH(D ð⢭Q<MNt_ҌAludMLؚޞOm5V&$@P89}GTVE0uYN jj=c'\s]Q֓6w<#[_9އŗZ## ֍*Qo1d 〷 Hea> _٧:o\EG @VhJwc軽d#ca_.g2GN)(R;E.͆pdzܯze`K9`˝[Z ^kɜ=It&<%'Q"DJ,'_ x}vJh*M0!Yn!Kt %IU7/S :b0 o3AzĤSr=?MD- ? a[M0}XAKT?W3ȁb%G7uN9c":Q͞f^=RN/O]Q2k%OQlBqE˜Q;@@'lXE%%C=v}ZGW2Z %`=c\ncv5{)lIPӧCkwELln鵓xuF/ZS;A^S5Ō#D{F1Gve$pjٸ3PhkIn/-a҉ot}K& z}i}Mk tr[SJH{fķun-}evp+AOdPpmޛ{U"d!K|UiKO`ifϪ ~bR5EȌnq&le+F(R-'b́@,W= 33G%r ڢqr~k?u+ȰqG02>*6L5g5iğGK25e©Viq;LdDo%A_kA{nP~v4)Ƚ$~dvjOq􌱡"<^JZw8r#7q}=n6G_NXQ yJFp7Saã50STڥѦ; ,~A#%'-e.Q`ʴӂUNݛ` |Y]?]L;T1LP~{@+DX wD7nr[nV"Ӊ .tjяJt?2Vƙ<ބtYөoƆ֟v`<_?eI:HH" _BM{&C WSF9[?'8Lo\Fw6u[EX$ ̺l2JԺ+xy*xnhn,jJn0;dX.9% lPC\ܙ}=|hYgNTq_Д4.Md+ "]> stream xmrg4ju :ѣ D%.E13 3ѣN"D'щ5DF^7]Zz>쳟˥A!0HDT`n `P<V2`pb 2^ `@D!c ȹ*➋`+\7"=`tBTʹ @F`N6NH@ CqA- p'0h8oM8?Ю,Z-A t4x5â>_//u'!p$ A!dM m<?wt-w p f?wrCQ t1p 0YP_z9 $N醀#VB- ]O?ڏcN;z?<50 ⯽bP? \""X7Oa#i|žc4׻9$ #d |r o Y {igKX /(lok} (V{"B-XOΞuZjuӘ'OM{$ަ,}'OίmE3;1|KyzI!TB3`eda0$3;6/3?=KqrytnEGu2rHtn%MbԈpsڧ BJ ;`e`FX(8WD"Q/]*\ұaRƨoV@~CM…bԙe3'3'>]}TJT!{QyŦr؞{ } 2%.Evpz#J, Jc9u}-*;\pf4ѫ&wϯ,3o;!@ LGl** 7$WWpYQ5Ϛ5# o9-ͰEq?sHf =R=]q'b."_{88  8ixxs=e26R>-MԜy$l$Hr*ReK\w:(_``M:ǦBԲmhR@NP >ѝU%' 13atLjgt4O ")<u@VoYA38IG 4_?)o~[u.ᅬpLw$,ttQ[ \6Qb})Ŏ72K@w>T8~5,N乁c-Tlv#$I2<-fJLZ摳lru^Pd<=.m1MMf+km(=[3/71,(m}!\.·ڔe=D{ωM^ E2 !w/3+H6= M4A'Z,Dƞi*s\F. ONޜՍ 6 ۹,W!#%Xfo߷90 )!Us*@>i}ޟ|Gv-z C-d9Du1N,tA po%ǞMݩvIeʾ&Ĵ6flVk;;v^-YlM.#&l^D3 KYOhlu9ZM:IQtf\jwwŶLaG|-;+qm@٧ N4 8$ZTcg3-KVn*?CmY;S^cyס8'"R\R.E(/^,j&Ny[뙧}x0Q;>vdJKo7f>!ʏs5hr\TesnX͈S)lY,W%!%?b:I9;D>b60*/꘤p&8y\/+5D 8ǒܚsϩRXKIHdݢxN m& V}ih6{͎Q z|yń'<3reh;Xy3E ="A`.jbZ_+2f%vI^ف7Ҥz3q|Po_-g畈 eWGߚ&PJ/$/32pDqDwu&:`O#4) =lp7X\~\m+r-]hQ"eG>xTh "#Ud5i\*!' xAE@}oU4gnş5Y,tl:/IZo8io'"v){gdXߟ;ٺE+u7{</&Uiѝ*v|0l (kN1S#k>w?{Y9Ay|'?8*Yf dW(jP ]~:e!=0iټ౱]PEf-|ѝ6%~R)'ryhz`v,z5bphѵ1[$1ʪ{Jb~Կ s;_<9|9t*ʝX|Jy~>M۩^L(ݡ ֣KHڪzԴDjt³ޘy&m=t9+r[lS3΄QDgy+3f^x_hiޠdd357hm Oڻ;=F!}7;\+9n"jqK5T灁?"(l ,A]Dn,,fhaP)Feɻ3o52i@{;H8dg%lo VUÜ{#gZ#K 2f}{UZIݴzEW1M;7I^_w󱛍^1cŐ=!m endstream endobj 286 0 obj << /Type /ObjStm /N 100 /First 922 /Length 5347 /Filter /FlateDecode >> stream x\Yo~ɋ;꬞IYn;ȒGKNr~ؒm#9w"WQAe)B/[ߡw,ea /<)跏Ι=BVxYH#u\!@ K\IЬth.U!!Җ{$,RұJS 㨣p82SP4輚OD[HM>S0M4`44,= F) &9%-U]IKzZҨӖ:0*`Dއx!Bhv֖aO+UѮ"g4`LB-8#Ek4"!Ԋf5Y1$>k ] )%53#IJOR-)#3BG+ф R ^aD$c @HjR . 4xF=VR"pN!m rܤF%fPP?ӞVih,p T3I]$)IqfB(u#5DL%2"I` )EOCQ?XR?C=GgVRi2c %Z`p{'_U8{t?1(%ߟU)ģjOFg{x09/ز޿Q<ǒG2\izn87 jZլX+.ŬN̫Qu>d>fV?X+1NQṀJ\XN+%ِP̆3Ogչn1ΆQ5y1Ob.&qE ovT@5(ܟVp2>ϫ◃!7BFIڬ{hr9w<$:_^x_-4r:9[ )fu5 ~]Bj0s9 GGrLӲφ/DdzVM?I<G'^WyQj۳= 7aTR+W{!xRbZܯᖧnv d/" dVxp^Lqwwm=i؋G'=@k:t$KHzHH4=)u&%iH'?w z~b4G Ja(-Ui e"ҵ뀨Àŋ)DS`WINSJDWTp'/NGKʾ\KʮZxypH6/Z&QksS d1SHɷO,eI)X4e\ޜl$p8@d8!u~@?eA}=x)"WR*$ܺHƸ.%\JGuŹn?S!{Yo[eaUP=d䔶RT|;`i9nl"V(O X%7*nLޭVn{儛sQ-GʞD^tRFSgH K闣JqoRadN˭A<0T!Rt'XXZC B2;~=Jb=(7L/nF/袚jCq#$ 5P   gu Zm̌U;QE[MmZIjٮںq7gKcJܰ٦YqU,H_0)H#mA~,ی;JV>rΤ$gU!aHAV@#20"xVш BzKKC #dm؇`[P@lл8$lj3V-k,-ò%fmn)T*~WK~Wܰ,vGYRk:Ǿ[]$'KB6$T*j zliEHD2 h´i%MC0i T4ggb+3;8ECGL^q)ٕIZPxRShL rf]5WYB$ a6&CF0l\@s(Ytp%h6ep@A5GjY [6h\(\?u.p:3m'okF D߀W\5g=4^Ӂ?qdw %log!K1$Hnc !YR9Wr҈q%ֿz,_QřT2+ 類}f\84 uAD-e~ryt`YT"CfYgZ´7i%6P(7) *R=<\[q/$RH,cQTj@֥d)p58It?jΈ} m2 vMt¸^Nf4'u0to0M|\Xo}AQH'b!rגPtP`2|D7S^>-HM#:ܠ%]xvm8a=2\.;8 u?8KwSz$!2t n=+e6Ux(mdSs-4ؕn5dQ\A')ܲlīvU|,|1mzi"!1Pv sH\aYW|n?gKmM ?JmI{r rIvJTE[R5x\# S; crXp|s3z*޸`oHZ`+5{&O0F`\1M~ ӳD[\WW xmx4]{U?lYWx%]_6{_h˗˞|<-oҊTV4㪌K "|O <р1u?39_rȗv|Hٔ~S ae042x8D|O‚Sc֐ze栚 ëdf|_GOdIŬ0 >vuox3|Ap 3jcOUË3=4Mb?/FUAۿWoN؞8Q̣=>x8KZ8}q*LTsqN_+q>YLŅ,>\P|#q)b<Wb"&^j: ?Y̆\?OJ3 UG|58CSƴ|]hvNN v⩟w2v/šx,26þfwa؇/=a~Zw/:TD:ow"wDI-(Ӥe&ș(jwɳDσN7@O?uPkLSfRreAw4 BVpv5_̫oMq>zEVK7)ox OQF2Ok3&4;y}8f؍A$wD~,;'e^={u7 S.cxIӕj}k99<~zݥ\jjSZs Pyȯ>c >8=,b`2<ޖ] ETCЏa6?;r>7tSoʘjk-fuo󞝎|#Xzi0DMYo54`'{6)!܍N-xBs$"8jfwroxs&xN+x&vfuNXt:m IE_D<ԓ/H᠖6 YzV 6 iҲ=9~u KZdwAw;'Kk=z× C2Rfy'n$Wue؝\GϞev\'ei< `#ojM~oaow&װ#9I >{ |گ|?M`7^R~<8?%Di8ͧnbmwԩ^uF}ÔvJwx_o_Az  _Hcu]uWiztAf"oM,w@X*/q-~?зѻ6zc;ѷ*6sҭKy ~SY/oA}^ C2-oݜ_S=խz[m4O +sѷn诩k_f[W-g[7mΛ5v} k]_S;qaW{~F~Mʐ[y}M吢qw c-™.3urt < endstream endobj 400 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.16)/Keywords() /CreationDate (D:20180124134039+02'00') /ModDate (D:20180124134039+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) kpathsea version 6.2.1) >> endobj 381 0 obj << /Type /ObjStm /N 45 /First 373 /Length 1490 /Filter /FlateDecode >> stream xڝXn8}Wݢ( $Nb74> u-wɃ!i83ᐔl5KO B1PqXΜa*ьk430XqÊqfOba@q-JpL:DPi5g]s!Hc2 LhīAgMxE?nRcZG9F\VbrbN 1 5$ ahv mo8!`Sf'cIEyPwd$ o,hrxc Wb0n|0Nn> 'KdnFD`]xCxnx />k[9$]|.~09:x< ?|zr8Fh齮U;j_MnMo/>Wπ?>tG%ǟ>|q6}5=$o{ǡ@8._b.y G-2t><۰?J.Y^+.DŽ''}BP吪'UN2 >d$XKI>:CͲ̋Et9*:rMj(TDVJL :iIDH[Zc uT|*e^C'jGCXaEבeHH 2YbFTFUH&LҩSuP['<<)hm}D#({jU> orP͓X#sۈլ 7冊zF:gm|'};ыHKfŇU\]@k)EvOnΆ z8ZE~Eb}^t]倠@XW"$*AAvi5S~鿈v t`h#a*<(eZ8 :9\OH%CmK?zSXEBieqZӥEEk<m#LeKo$_'>?-D{uem"_-ߡ-0S+|],LD=2Qeߘ$DyηGQEskڌHo!_'B.nABlx`ee`eD`mP!ƫ},IedTnvl Hb! zqaM([]fIK13uc TmguCxĎJEX k~VvKVr5GEmQ ΄N*_b鏤򪫫ޢW0P5:TܻvE':|"]h U/~*5/lˆ7;C<3G?l-ZO endstream endobj 401 0 obj << /Type /XRef /Index [0 402] /Size 402 /W [1 3 1] /Root 399 0 R /Info 400 0 R /ID [<6A82A4E183A06289E8F2B358CF8B1EA6> <6A82A4E183A06289E8F2B358CF8B1EA6>] /Length 965 /Filter /FlateDecode >> stream x%oMQ:\U/zT߭Zmֳ0A`dˆaBDBĚ23Ĩ#HHD<ɗY};¿((XH;r9-'NjkHV`VF A7UE`1VJZ8R($e`y^FK^C`d:3Y 5VdI5R.ƍTZ P*:TP @=@#h-`#6-B(R?Y0 TZCI.@3G eHjTIB5 ] F,4#(8&bGAXύ8&$b.5a 3Qg,8 qYGBgukNW7\i.YjaYP%8F-KNqWgV^J|B.?5ʫ-|-`sgGjXXXXX|p텆ZL+vnTͯ t w~g_5ryΈY][xM ۇ!mn:@/QQQ-g/*Y\5wJ-9t[wZ҄ſ)MZ)ň#ҵ^XJkSѣ(G)=JQd`Ƨ?> endstream endobj startxref 338862 %%EOF vegan/inst/doc/FAQ-vegan.html0000644000176200001440000013563213232070306015475 0ustar liggesusers <strong>vegan</strong> FAQ

vegan FAQ

This document contains answers to some of the most frequently asked questions about R package vegan.

This work is licensed under the Creative Commons Attribution 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Copyright © 2008-2016 vegan development team


Introduction


What is vegan?

Vegan is an R package for community ecologists. It contains the most popular methods of multivariate analysis needed in analysing ecological communities, and tools for diversity analysis, and other potentially useful functions. Vegan is not self-contained but it must be run under R statistical environment, and it also depends on many other R packages. Vegan is free software and distributed under GPL2 license.


What is R?

R is a system for statistical computation and graphics. It consists of a language plus a run-time environment with graphics, a debugger, access to certain system functions, and the ability to run programs stored in script files.

R has a home page at https://www.R-project.org/. It is free software distributed under a GNU-style copyleft, and an official part of the GNU project (“GNU S”).


How to obtain vegan and R?

Both R and latest release version of vegan can be obtained through CRAN. Unstable development version of vegan can be obtained through GitHub. Formerly vegan was developed in R-Forge, but after moving to GitHub the R-Forge repository may be out of date.


What R packages vegan depends on?

Vegan depends on the permute package which will provide advanced and flexible permutation routines for vegan. The permute package is developed together with vegan in GitHub.

Some individual vegan functions depend on packages MASS, mgcv, parallel, cluster, lattice and tcltk. These all are base or recommended R packages that should be available in every R installation. Vegan declares these as suggested or imported packages, and you can install vegan and use most of its functions without these packages.

Vegan is accompanied with a supporting package vegan3d for three-dimensional and dynamic plotting. The vegan3d package needs non-standard packages rgl and scatterplot3d.


What other packages are available for ecologists?

CRAN Task Views include entries like Environmetrics, Multivariate and Spatial that describe several useful packages and functions. If you install R package ctv, you can inspect Task Views from your R session, and automatically install sets of most important packages.


What other documentation is available for vegan?

Vegan is a fully documented R package with standard help pages. These are the most authoritative sources of documentation (and as a last resource you can use the force and the read the source, as vegan is open source). Vegan package ships with other documents which can be read with browseVignettes("vegan") command. The documents included in the vegan package are

  • Vegan NEWS
  • This document (FAQ-vegan).
  • Short introduction to basic ordination methods in vegan (intro-vegan).
  • Introduction to diversity methods in vegan (diversity-vegan).
  • Discussion on design decisions in vegan (decision-vegan).
  • Description of variance partition procedures in function varpart (partitioning).

Web documents outside the package include:


Is there a Graphical User Interface (GUI) for vegan?

Roeland Kindt has made package BiodiversityR which provides a GUI for vegan. The package is available at CRAN. It is not a mere GUI for vegan, but adds some new functions and complements vegan functions in order to provide a workbench for biodiversity analysis. You can install BiodiversityR using install.packages("BiodiversityR") or graphical package management menu in R. The GUI works on Windows, MacOS X and Linux.


How to cite vegan?

Use command citation("vegan") in R to see the recommended citation to be used in publications.


How to build vegan from sources?

In general, you do not need to build vegan from sources, but binary builds of release versions are available through CRAN for Windows and MacOS X. If you use some other operating systems, you may have to use source packages. Vegan is a standard R package, and can be built like instructed in R documentation. Vegan contains source files in C and FORTRAN, and you need appropriate compilers (which may need more work in Windows and MacOS X).


Are there binaries for devel versions?

R-Forge runs daily tests on the devel package, and if passed, it builds source package together with Windows binaries. However, the R-Forge may be out of date, because vegan is mainly developed in GitHub. You can install R-Forge packages within R with command install.packages("vegan", repos="http://r-forge.r-project.org/"). If you use GUI menu entry, you must select or define the R-Forge repository.


How to report a bug in vegan?

If you think you have found a bug in vegan, you should report it to vegan maintainers or developers. The preferred forum to report bugs is GitHub. The bug report should be so detailed that the bug can be replicated and corrected. Preferably, you should send an example that causes a bug. If it needs a data set that is not available in R, you should send a minimal data set as well. You also should paste the output or error message in your message. You also should specify which version of vegan you used.

Bug reports are welcome: they are the only way to make vegan non-buggy.

Please note that you shall not send bug reports to R mailing lists, since vegan is not a standard R package.


Is it a bug or a feature?

It is not necessarily a bug if some function gives different results than you expect: That may be a deliberate design decision. It may be useful to check the documentation of the function to see what was the intended behaviour. It may also happen that function has an argument to switch the behaviour to match your expectation. For instance, function vegdist always calculates quantitative indices (when this is possible). If you expect it to calculate a binary index, you should use argument binary = TRUE.


Can I contribute to vegan?

Vegan is dependent on user contribution. All feedback is welcome. If you have problems with vegan, it may be as simple as incomplete documentation, and we shall do our best to improve the documents.

Feature requests also are welcome, but they are not necessarily fulfilled. A new feature will be added if it is easy to do and it looks useful, or if you submit code.

If you can write code yourself, the best forum to contribute to vegan is GitHub.


Ordination


I have only numeric and positive data but vegan still complains

You are wrong! Computers are painfully pedantic, and if they find non-numeric or negative data entries, you really have them. Check your data. Most common reasons for non-numeric data are that row names were read as a non-numeric variable instead of being used as row names (check argument row.names in reading the data), or that the column names were interpreted as data (check argument header = TRUE in reading the data). Another common reason is that you had empty cells in your input data, and these were interpreted as missing values.


Can I analyse binary or cover class data?

Yes. Most vegan methods can handle binary data or cover abundance data. Most statistical tests are based on permutation, and do not make distributional assumptions. There are some methods (mainly in diversity analysis) that need count data. These methods check that input data are integers, but they may be fooled by cover class data.


Why dissimilarities in vegan differ from other sources?

Most commonly the reason is that other software use presence–absence data whereas vegan used quantitative data. Usually vegan indices are quantitative, but you can use argument binary = TRUE to make them presence–absence. However, the index name is the same in both cases, although different names usually occur in literature. For instance, Jaccard index actually refers to the binary index, but vegan uses name "jaccard" for the quantitative index, too.

Another reason may be that indices indeed are defined differently, because people use same names for different indices.


Why NMDS stress is sometimes 0.1 and sometimes 10?

Stress is a proportional measure of badness of fit. The proportions can be expressed either as parts of one or as percents. Function isoMDS (MASS package) uses percents, and function monoMDS (vegan package) uses proportions, and therefore the same stress is 100 times higher in isoMDS. The results of goodness function also depend on the definition of stress, and the same goodness is 100 times higher in isoMDS than in monoMDS. Both of these conventions are equally correct.


I get zero stress but no convergent solutions in metaMDS

Most common reason is that you have too few observations for your NMDS. For n observations (points) and k dimensions you need to estimate n*k parameters (ordination scores) using n*(n-1)/2 dissimilarities. For k dimensions you must have n > 2*k + 1, or for two dimensions at least six points. In some degenerate situations you may need even a larger number of points. If you have a lower number of points, you can find an undefined number of perfect (stress is zero) but different solutions. Conventional wisdom due to Kruskal is that you should have n > 4*k + 1 points for k dimensions. A typical symptom of insufficient data is that you have (nearly) zero stress but no two convergent solutions. In those cases you should reduce the number of dimensions (k) and with very small data sets you should not use NMDS, but rely on metric methods.

It seems that local and hybrid scaling with monoMDS have similar lower limits in practice (although theoretically they could differ). However, higher number of dimensions can be used in metric scaling, both with monoMDS and in principal coordinates analysis (cmdscale in stats, wcmdscale in vegan).


Zero dissimilarities in isoMDS

Function metaMDS uses function monoMDS as its default method for NMDS, and this function can handle zero dissimilarities. Alternative function isoMDS cannot handle zero dissimilarities. If you want to use isoMDS, you can use argument zerodist = "add" in metaMDS to handle zero dissimilarities. With this argument, zero dissimilarities are replaced with a small positive value, and they can be handled in isoMDS. This is a kluge, and some people do not like this. A more principal solution is to remove duplicate sites using R command unique. However, after some standardizations or with some dissimilarity indices, originally non-unique sites can have zero dissimilarity, and you have to resort to the kluge (or work harder with your data). Usually it is better to use monoMDS.


I have heard that you cannot fit environmental vectors or surfaces to NMDS results which only have rank-order scores

Claims like this have indeed been at large in the Internet, but they are based on grave misunderstanding and are plainly wrong. NMDS ordination results are strictly metric, and in vegan metaMDS and monoMDS they are even strictly Euclidean. The method is called “non-metric” because the Euclidean distances in ordination space have a non-metric rank-order relationship to community dissimilarities. You can inspect this non-linear step curve using function stressplot in vegan. Because the ordination scores are strictly Euclidean, it is correct to use vegan functions envfit and ordisurf with NMDS results.


Where can I find numerical scores of ordination axes?

Normally you can use function scores to extract ordination scores for any ordination method. The scores function can also find ordination scores for many non-vegan functions such as for prcomp and princomp and for some ade4 functions.

In some cases the ordination result object stores raw scores, and the axes are also scaled appropriate when you access them with scores. For instance, in cca and rda the ordination object has only so-called normalized scores, and they are scaled for ordination plots or for other use when they are accessed with scores.


How the RDA results are scaled?

The scaling or RDA results indeed differ from most other software packages. The scaling of RDA is such a complicated issue that it cannot be explained in this FAQ, but it is explained in a separate pdf document on “Design decision and implementation details in vegan” that you can read with command browseVignettes("vegan").


cca fails with “data.frame expected” or “"site.env" missing”

This is not a vegan error message, but it comes from an old version of the ade4 package (prior to ade4 1.7-8, released Aug 9, 2017). Upgrade your ade4.


Ordination fails with “Error in La.svd”

Constrained ordination (cca, rda, capscale) will sometimes fail with error message Error in La.svd(x, nu, nv): error code 1 from Lapack routine 'dgesdd'.

It seems that the basic problem is in the svd function of LAPACK that is used for numerical analysis in R. LAPACK is an external library that is beyond the control of package developers and R core team so that these problems may be unsolvable. It seems that the problems with the LAPACK code are so common that even the help page of svd warns about them

Reducing the range of constraints (environmental variables) helps sometimes. For instance, multiplying constraints by a constant < 1. This rescaling does not influence the numerical results of constrained ordination, but it can complicate further analyses when values of constraints are needed, because the same scaling must be applied there. We can only hope that this problem is fixed in the future versions of R and LAPACK.


Variance explained by ordination axes.

In general, vegan does not directly give any statistics on the “variance explained” by ordination axes or by the constrained axes. This is a design decision: I think this information is normally useless and often misleading. In community ordination, the goal typically is not to explain the variance, but to find the “gradients” or main trends in the data. The “total variation” often is meaningless, and all proportions of meaningless values also are meaningless. Often a better solution explains a smaller part of “total variation”. For instance, in unstandardized principal components analysis most of the variance is generated by a small number of most abundant species, and they are easy to “explain” because data really are not very multivariate. If you standardize your data, all species are equally important. The first axes explains much less of the “total variation”, but now they explain all species equally, and results typically are much more useful for the whole community. Correspondence analysis uses another measure of variation (which is not variance), and again it typically explains a “smaller proportion” than principal components but with a better result. Detrended correspondence analysis and nonmetric multidimensional scaling even do not try to “explain” the variation, but use other criteria. All methods are incommensurable, and it is impossible to compare methods using “explanation of variation”.

If you still want to get “explanation of variation” (or a deranged editor requests that from you), it is possible to get this information for some methods:

  • Eigenvector methods: Functions rda, cca and capscale give the variation of conditional (partialled), constrained (canonical) and residual components, but you must calculate the proportions by hand. Function eigenvals extracts the eigenvalues, and summary(eigenvals(ord)) reports the proportions explained in the result object ord. Function RsquareAdj gives the R-squared and adjusted R-squared (if available) for constrained components. Function goodness gives the same statistics for individual species or sites (species are unavailable with capscale). In addition, there is a special function varpart for unbiased partitioning of variance between up to four separate components in redundancy analysis.
  • Detrended correspondence analysis (function decorana). The total amount of variation is undefined in detrended correspondence analysis, and therefore proportions from total are unknown and undefined. DCA is not a method for decomposition of variation, and therefore these proportions would not make sense either.
  • Nonmetric multidimensional scaling. NMDS is a method for nonlinear mapping, and the concept of of variation explained does not make sense. However, 1 - stress^2 transforms nonlinear stress into quantity analogous to squared correlation coefficient. Function stressplot displays the nonlinear fit and gives this statistic.

Can I have random effects in constrained ordination or in adonis?

No. Strictly speaking, this is impossible. However, you can define models that respond to similar goals as random effects models, although they strictly speaking use only fixed effects.

Constrained ordination functions cca, rda and capscale can have Condition() terms in their formula. The Condition() define partial terms that are fitted before other constraints and can be used to remove the effects of background variables, and their contribution to decomposing inertia (variance) is reported separately. These partial terms are often regarded as similar to random effects, but they are still fitted in the same way as other terms and strictly speaking they are fixed terms.

Function adonis evaluates terms sequentially. In a model with right-hand-side ~ A + B the effects of A are evaluated first, and the effects of B after removing the effects of A. Sequential tests are also available in anova function for constrained ordination results by setting argument by = "term". In this way, the first terms can serve in a similar role as random effects, although they are fitted in the same way as all other terms, and strictly speaking they are fixed terms.

All permutation tests in vegan are based on the permute package that allows constructing various restricted permutation schemes. For instance, you can set levels of plots or blocks for a factor regarded as a random term.

A major reason why real random effects models are impossible in most vegan functions is that their tests are based on the permutation of the data. The data are given, that is fixed, and therefore permutation tests are basically tests of fixed terms on fixed data. Random effect terms would require permutations of data with a random component instead of the given, fixed data, and such tests are not available in vegan.


Is it possible to have passive points in ordination?

Vegan does not have a concept of passive points, or a point that should only little influence the ordination results. However, you can add points to eigenvector methods using predict functions with newdata. You can first perform an ordination without some species or sites, and then you can find scores for all points using your complete data as newdata. The predict functions are available for basic eigenvector methods in vegan (cca, rda, decorana, for an up-to-date list, use command methods("predict")). You also can simulate the passive points in R by using low weights to row and columns (this is the method used in software with passive points). For instance, the following command makes row 3 “passive”: dune[3,] <- 0.001*dune[3,].


Class variables and dummies

You should define a class variable as an R factor, and vegan will automatically handle them with formula interface. You also can define constrained ordination without formula interface, but then you must code your class variables by hand.

R (and vegan) knows both unordered and ordered factors. Unordered factors are internally coded as dummy variables, but one redundant level is removed or aliased. With default contrasts, the removed level is the first one. Ordered factors are expressed as polynomial contrasts. Both of these contrasts explained in standard R documentation.


How are environmental arrows scaled?

The printed output of envfit gives the direction cosines which are the coordinates of unit length arrows. For plotting, these are scaled by their correlation (square roots of column r2). You can see the scaled lengths of envfit arrows using command scores.

The scaled environmental vectors from envfit and the arrows for continuous environmental variables in constrained ordination (cca, rda, capscale) are adjusted to fill the current graph. The lengths of arrows do not have fixed meaning with respect to the points (species, sites), but they can only compared against each other, and therefore only their relative lengths are important.

If you want change the scaling of the arrows, you can use text (plotting arrows and text) or points (plotting only arrows) functions for constrained ordination. These functions have argument arrow.mul which sets the multiplier. The plot function for envfit also has the arrow.mul argument to set the arrow multiplier. If you save the invisible result of the constrained ordination plot command, you can see the value of the currently used arrow.mul which is saved as an attribute of biplot scores.

Function ordiArrowMul is used to find the scaling for the current plot. You can use this function to see how arrows would be scaled:

sol <- cca(varespec)
ef <- envfit(sol ~ ., varechem)
plot(sol)
ordiArrowMul(scores(ef, display="vectors"))

I want to use Helmert or sum contrasts

vegan uses standard R utilities for defining contrasts. The default in standard installations is to use treatment contrasts, but you can change the behaviour globally setting options or locally by using keyword contrasts. Please check the R help pages and user manuals for details.


What are aliased variables and how to see them?

Aliased variable has no information because it can be expressed with the help of other variables. Such variables are automatically removed in constrained ordination in vegan. The aliased variables can be redundant levels of factors or whole variables.

Vegan function alias gives the defining equations for aliased variables. If you only want to see the names of aliased variables or levels in solution sol, use alias(sol, names.only=TRUE).


Plotting aliased variables

You can fit vectors or class centroids for aliased variables using envfit function. The envfit function uses weighted fitting, and the fitted vectors are identical to the vectors in correspondence analysis.


Restricted permutations in vegan

Vegan uses permute package in all its permutation tests. The permute package will allow restricted permutation designs for time series, line transects, spatial grids and blocking factors. The construction of restricted permutation schemes is explained in the manual page permutations in vegan and in the documentation of the permute package.


How to use different plotting symbols in ordination graphics?

The default ordination plot function is intended for fast plotting and it is not very configurable. To use different plotting symbols, you should first create and empty ordination plot with plot(..., type="n"), and then add points or text to the created empty frame (here ... means other arguments you want to give to your plot command). The points and text commands are fully configurable, and allow different plotting symbols and characters.


How to avoid cluttered ordination graphs?

If there is a really high number of species or sites, the graphs often are congested and many labels are overwritten. It may be impossible to have complete readable graphics with some data sets. Below we give a brief overview of tricks you can use. Gavin Simpson’s blog From the bottom of the heap has a series of articles on “decluttering ordination plots” with more detailed discussion and examples.

  • Use only points, possibly with different types if you do not need to see the labels. You may need to first create an empty plot using plot(..., type="n"), if you are not satisfied with the default graph. (Here and below ... means other arguments you want to give to your plot command.)
  • Use points and add labels to desired points using interactive identify command if you do not need to see all labels.
  • Add labels using function ordilabel which uses non-transparent background to the text. The labels still shadow each other, but the uppermost labels are readable. Argument priority will help in displaying the most interesting labels (see Decluttering blog, part 1).
  • Use orditorp function that uses labels only if these can be added to a graph without overwriting other labels, and points otherwise, if you do not need to see all labels. You must first create an empty plot using plot(..., type="n"), and then add labels or points with orditorp (see Decluttering blog).
  • Use ordipointlabel which uses points and text labels to the points, and tries to optimize the location of the text to minimize the overlap (see Decluttering blog).
  • Ordination text and points functions have argument select that can be used for full control of selecting items plotted as text or points.
  • Use interactive orditkplot function that lets you drag labels of points to better positions if you need to see all labels. Only one set of points can be used (see Decluttering blog).
  • Most plot functions allow you to zoom to a part of the graph using xlim and ylim arguments to reduce clutter in congested areas.

Can I flip an axis in ordination diagram?

Use xlim or ylim with flipped limits. If you have model mod <- cca(dune) you can flip the first axis with plot(mod, xlim = c(3, -2)).


Can I zoom into an ordination plot?

You can use xlim and ylim arguments in plot or ordiplot to zoom into ordination diagrams. Normally you must set both xlim and ylim because ordination plots will keep the equal aspect ratio of axes, and they will fill the graph so that the longer axis will fit.

Dynamic zooming can be done with function orditkplot. You can directly save the edited orditkplot graph in various graphic formats, or you can export the graph object back to R and use plot to display the results.


Other analysis methods


Is there TWINSPAN?

No. It may be possible to port TWINSPAN to vegan, but it is not among the vegan top priorities. If anybody wants to try porting, I will be happy to help. TWINSPAN has a very permissive license, and it would be completely legal to port the function into R.


Why restricted permutation does not influence adonis results?

The permutation scheme influences the permutation distribution of the statistics and probably the significance levels, but does not influence the calculation of the statistics.


How is deviance calculated?

Some vegan functions, such as radfit use base R facility of family in maximum likelihood estimation. This allows use of several alternative error distributions, among them "poisson" and "gaussian". The R family also defines the deviance. You can see the equations for deviance with commands like poisson()$dev or gaussian()$dev.

In general, deviance is 2 times log.likelihood shifted so that models with exact fit have zero deviance.


vegan/inst/doc/diversity-vegan.R0000644000176200001440000001657313232070276016355 0ustar liggesusers### R code from vignette source 'diversity-vegan.Rnw' ################################################### ### code chunk number 1: diversity-vegan.Rnw:21-26 ################################################### par(mfrow=c(1,1)) options(width=55) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "> ", "continue" = " ") ################################################### ### code chunk number 2: diversity-vegan.Rnw:58-60 ################################################### library(vegan) data(BCI) ################################################### ### code chunk number 3: diversity-vegan.Rnw:78-79 ################################################### H <- diversity(BCI) ################################################### ### code chunk number 4: diversity-vegan.Rnw:86-87 ################################################### J <- H/log(specnumber(BCI)) ################################################### ### code chunk number 5: diversity-vegan.Rnw:113-115 ################################################### k <- sample(nrow(BCI), 6) R <- renyi(BCI[k,]) ################################################### ### code chunk number 6: diversity-vegan.Rnw:122-123 ################################################### getOption("SweaveHooks")[["fig"]]() print(plot(R)) ################################################### ### code chunk number 7: diversity-vegan.Rnw:134-135 ################################################### alpha <- fisher.alpha(BCI) ################################################### ### code chunk number 8: diversity-vegan.Rnw:171-172 ################################################### quantile(rowSums(BCI)) ################################################### ### code chunk number 9: diversity-vegan.Rnw:175-176 ################################################### Srar <- rarefy(BCI, min(rowSums(BCI))) ################################################### ### code chunk number 10: diversity-vegan.Rnw:184-185 ################################################### S2 <- rarefy(BCI, 2) ################################################### ### code chunk number 11: diversity-vegan.Rnw:189-190 ################################################### all(rank(Srar) == rank(S2)) ################################################### ### code chunk number 12: diversity-vegan.Rnw:196-197 ################################################### range(diversity(BCI, "simp") - (S2 -1)) ################################################### ### code chunk number 13: diversity-vegan.Rnw:260-264 ################################################### data(dune) data(dune.taxon) taxdis <- taxa2dist(dune.taxon, varstep=TRUE) mod <- taxondive(dune, taxdis) ################################################### ### code chunk number 14: diversity-vegan.Rnw:267-268 ################################################### getOption("SweaveHooks")[["fig"]]() plot(mod) ################################################### ### code chunk number 15: diversity-vegan.Rnw:294-296 ################################################### tr <- hclust(taxdis, "aver") mod <- treedive(dune, tr) ################################################### ### code chunk number 16: diversity-vegan.Rnw:318-321 ################################################### k <- sample(nrow(BCI), 1) fish <- fisherfit(BCI[k,]) fish ################################################### ### code chunk number 17: diversity-vegan.Rnw:324-325 ################################################### getOption("SweaveHooks")[["fig"]]() plot(fish) ################################################### ### code chunk number 18: diversity-vegan.Rnw:353-354 ################################################### prestondistr(BCI[k,]) ################################################### ### code chunk number 19: diversity-vegan.Rnw:385-387 ################################################### rad <- radfit(BCI[k,]) rad ################################################### ### code chunk number 20: diversity-vegan.Rnw:390-391 ################################################### getOption("SweaveHooks")[["fig"]]() print(radlattice(rad)) ################################################### ### code chunk number 21: a ################################################### sac <- specaccum(BCI) plot(sac, ci.type="polygon", ci.col="yellow") ################################################### ### code chunk number 22: diversity-vegan.Rnw:461-462 ################################################### getOption("SweaveHooks")[["fig"]]() sac <- specaccum(BCI) plot(sac, ci.type="polygon", ci.col="yellow") ################################################### ### code chunk number 23: diversity-vegan.Rnw:490-491 ################################################### ncol(BCI)/mean(specnumber(BCI)) - 1 ################################################### ### code chunk number 24: diversity-vegan.Rnw:508-510 ################################################### beta <- vegdist(BCI, binary=TRUE) mean(beta) ################################################### ### code chunk number 25: diversity-vegan.Rnw:517-518 ################################################### betadiver(help=TRUE) ################################################### ### code chunk number 26: diversity-vegan.Rnw:536-538 ################################################### z <- betadiver(BCI, "z") quantile(z) ################################################### ### code chunk number 27: diversity-vegan.Rnw:548-553 ################################################### data(dune) data(dune.env) z <- betadiver(dune, "z") mod <- with(dune.env, betadisper(z, Management)) mod ################################################### ### code chunk number 28: diversity-vegan.Rnw:556-557 ################################################### getOption("SweaveHooks")[["fig"]]() boxplot(mod) ################################################### ### code chunk number 29: diversity-vegan.Rnw:668-669 ################################################### specpool(BCI) ################################################### ### code chunk number 30: diversity-vegan.Rnw:674-676 ################################################### s <- sample(nrow(BCI), 25) specpool(BCI[s,]) ################################################### ### code chunk number 31: diversity-vegan.Rnw:687-688 ################################################### estimateR(BCI[k,]) ################################################### ### code chunk number 32: diversity-vegan.Rnw:757-759 ################################################### veiledspec(prestondistr(BCI[k,])) veiledspec(BCI[k,]) ################################################### ### code chunk number 33: diversity-vegan.Rnw:773-774 ################################################### smo <- beals(BCI) ################################################### ### code chunk number 34: a ################################################### j <- which(colnames(BCI) == "Ceiba.pentandra") plot(beals(BCI, species=j, include=FALSE), BCI[,j], ylab="Occurrence", main="Ceiba pentandra", xlab="Probability of occurrence") ################################################### ### code chunk number 35: diversity-vegan.Rnw:787-788 ################################################### getOption("SweaveHooks")[["fig"]]() j <- which(colnames(BCI) == "Ceiba.pentandra") plot(beals(BCI, species=j, include=FALSE), BCI[,j], ylab="Occurrence", main="Ceiba pentandra", xlab="Probability of occurrence") vegan/inst/doc/decision-vegan.Rnw0000644000176200001440000010106213231354436016463 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Design decisions and implementation} \documentclass[a4paper,10pt,twocolumn]{article} \usepackage{vegan} % package options and redefinitions \author{Jari Oksanen} \title{Design decisions and implementation details in vegan} \date{\footnotesize{ processed with vegan \Sexpr{packageDescription("vegan", field="Version")} in \Sexpr{R.version.string} on \today}} %% need no \usepackage{Sweave} \begin{document} \bibliographystyle{jss} \SweaveOpts{strip.white=true} <>= figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "> ", "continue" = " ") options(width = 55) require(vegan) @ \maketitle \begin{abstract} This document describes design decisions, and discusses implementation and algorithmic details in some vegan functions. The proper FAQ is another document. \end{abstract} \tableofcontents \section{Parallel processing} Several \pkg{vegan} functions can perform parallel processing using the standard \R{} package \pkg{parallel}. The \pkg{parallel} package in \R{} implements the functionality of earlier contributed packages \pkg{multicore} and \pkg{snow}. The \pkg{multicore} functionality forks the analysis to multiple cores, and \pkg{snow} functionality sets up a socket cluster of workers. The \pkg{multicore} functionality only works in unix-like systems (such as MacOS and Linux), but \pkg{snow} functionality works in all operating systems. \pkg{Vegan} can use either method, but defaults to \pkg{multicore} functionality when this is available, because its forked clusters are usually faster. This chapter describes both the user interface and internal implementation for the developers. \subsection{User interface} \label{sec:parallel:ui} The functions that are capable of parallel processing have argument \code{parallel}. The normal default is \code{parallel = 1} which means that no parallel processing is performed. It is possible to set parallel processing as the default in \pkg{vegan} (see \S\,\ref{sec:parallel:default}). For parallel processing, the \code{parallel} argument can be either \begin{enumerate} \item An integer in which case the given number of parallel processes will be launched (value $1$ launches non-parallel processing). In unix-like systems (\emph{e.g.}, MacOS, Linux) these will be forked \code{multicore} processes. In Windows socket clusters will be set up, initialized and closed. \item A previously created socket cluster. This saves time as the cluster is not set up and closed in the function. If the argument is a socket cluster, it will also be used in unix-like systems. Setting up a socket cluster is discussed in \S\,\ref{sec:parallel:socket}. \end{enumerate} \subsubsection{Using parallel processing as default} \label{sec:parallel:default} If the user sets option \code{mc.cores}, its value will be used as the default value of the \code{parallel} argument in \pkg{vegan} functions. The following command will set up parallel processing to all subsequent \pkg{vegan} commands: <>= options(mc.cores = 2) @ The \code{mc.cores} option is defined in the \pkg{parallel} package, but it is usually unset in which case \pkg{vegan} will default to non-parallel computation. The \code{mc.cores} option can be set by the environmental variable \code{MC_CORES} when the \pkg{parallel} package is loaded. \R{} allows setting up a default socket cluster (\code{setDefaultCluster}), but this will not be used in \pkg{vegan}. \subsubsection{Setting up socket clusters} \label{sec:parallel:socket} If socket clusters are used (and they are the only alternative in Windows), it is often wise to set up a cluster before calling parallelized code and give the pre-defined cluster as the value of the \code{parallel} argument in \pkg{vegan}. If you want to use socket clusters in unix-like systems (MacOS, Linux), this can be only done with pre-defined clusters. If socket cluster is not set up in Windows, \pkg{vegan} will create and close the cluster within the function body. This involves following commands: \begin{Schunk} \begin{Soutput} clus <- makeCluster(4) ## perform parallel processing stopCluster(clus) \end{Soutput} \end{Schunk} The first command sets up the cluster, in this case with four cores, and the second command stops the cluster. Most parallelized \pkg{vegan} functions work similarly in socket and fork clusters, but in \code{oecosimu} the parallel processing is used to evaluate user-defined functions, and their arguments and data must be made known to the socket cluster. For example, if you want to run in parallel the \code{meandist} function of the \code{oecosimu} example with a pre-defined socket cluster, you must use: <>= ## start up and define meandist() library(vegan) data(sipoo) meandist <- function(x) mean(vegdist(x, "bray")) library(parallel) clus <- makeCluster(4) clusterEvalQ(clus, library(vegan)) mbc1 <- oecosimu(dune, meandist, "r2dtable", parallel = clus) stopCluster(clus) @ Socket clusters are used for parallel processing in Windows, but you do not need to pre-define the socket cluster in \code{oecosimu} if you only need \pkg{vegan} commands. However, if you need some other contributed packages, you must pre-define the socket cluster also in Windows with appropriate \code{clusterEvalQ} calls. If you pre-set the cluster, you can also use \pkg{snow} style socket clusters in unix-like systems. \subsubsection{Random number generation} \pkg{Vegan} does not use parallel processing in random number generation, and you can set the seed for the standard random number generator. Setting the seed for the parallelized generator (L'Ecuyer) has no effect in \pkg{vegan}. \subsubsection{Does it pay off?} Parallelized processing has a considerable overhead, and the analysis is faster only if the non-parallel code is really slow (takes several seconds in wall clock time). The overhead is particularly large in socket clusters (in Windows). Creating a socket cluster and evaluating \code{library(vegan)} with \code{clusterEvalQ} can take two seconds or longer, and only pays off if the non-parallel analysis takes ten seconds or longer. Using pre-defined clusters will reduce the overhead. Fork clusters (in unix-likes operating systems) have a smaller overhead and can be faster, but they also have an overhead. Each parallel process needs memory, and for a large number of processes you need much memory. If the memory is exhausted, the parallel processes can stall and take much longer than non-parallel processes (minutes instead of seconds). If the analysis is fast, and function runs in, say, less than five seconds, parallel processing is rarely useful. Parallel processing is useful only in slow analyses: large number of replications or simulations, slow evaluation of each simulation. The danger of memory exhaustion must always be remembered. The benefits and potential problems of parallel processing depend on your particular system: it is best to rely on your own experience. \subsection{Internals for developers} The implementation of the parallel processing should accord with the description of the user interface above (\S\,\ref{sec:parallel:ui}). Function \code{oecosimu} can be used as a reference implementation, and similar interpretation and order of interpretation of arguments should be followed. All future implementations should be consistent and all must be changed if the call heuristic changes. The value of the \code{parallel} argument can be \code{NULL}, a positive integer or a socket cluster. Integer $1$ means that no parallel processing is performed. The ``normal'' default is \code{NULL} which in the ``normal'' case is interpreted as $1$. Here ``normal'' means that \R{} is run with default settings without setting \code{mc.cores} or environmental variable \code{MC_CORES}. Function \code{oecosimu} interprets the \code{parallel} arguments in the following way: \begin{enumerate} \item \code{NULL}: The function is called with argument \code{parallel = getOption("mc.cores")}. The option \code{mc.cores} is normally unset and then the default is \code{parallel = NULL}. \item Integer: An integer value is taken as the number of created parallel processes. In unix-like systems this is the number of forked multicore processes, and in Windows this is the number of workers in socket clusters. In Windows, the socket cluster is created, and if needed \code{library(vegan)} is evaluated in the cluster (this is not necessary if the function only uses internal functions), and the cluster is stopped after parallel processing. \item Socket cluster: If a socket cluster is given, it will be used in all operating systems, and the cluster is not stopped within the function. \end{enumerate} This gives the following precedence order for parallel processing (highest to lowest): \begin{enumerate} \item Explicitly given argument value of \code{parallel} will always be used. \item If \code{mc.cores} is set, it will be used. In Windows this means creating and stopping socket clusters. Please note that the \code{mc.cores} is only set from the environmental variable \code{MC_CORES} when you load the \pkg{parallel} package, and it is always unset before first \code{require(parallel)}. \item The fall back behaviour is no parallel processing. \end{enumerate} \section{Nestedness and Null models} Some published indices of nestedness and null models of communities are only described in general terms, and they could be implemented in various ways. Here I discuss the implementation in \pkg{vegan}. \subsection{Matrix temperature} The matrix temperature is intuitively simple (Fig. \ref{fig:nestedtemp}), but the the exact calculations were not explained in the original publication \cite{AtmarPat93}. \begin{figure} <>= data(sipoo) mod <- nestedtemp(sipoo) plot(mod, "i") x <- mod$c["Falcsubb"] y <- 1 - mod$r["Svartholm"] points(x,y, pch=16, cex=1.5) abline(x+y, -1, lty=2) f <- function(x, p) (1-(1-x)^p)^(1/p) cross <- function(x, a, p) f(x,p) - a + x r <- uniroot(cross, c(0,1), a = x+y, p = mod$p)$root arrows(x,y, r, f(r, mod$p), lwd=4) @ \caption{Matrix temperature for \emph{Falco subbuteo} on Sibbo Svartholmen (dot). The curve is the fill line, and in a cold matrix, all presences (red squares) should be in the upper left corner behind the fill line. Dashed diagonal line of length $D$ goes through the point, and an arrow of length $d$ connects the point to the fill line. The ``surprise'' for this point is $u = (d/D)^2$ and the matrix temperature is based on the sum of surprises: presences outside the fill line or absences within the fill line.} \label{fig:nestedtemp} \end{figure} The function can be implemented in many ways following the general principles. \citet{RodGir06} have seen the original code and reveal more details of calculations, and their explanation is the basis of the implementation in \pkg{vegan}. However, there are still some open issues, and probably \pkg{vegan} function \code{nestedtemp} will never exactly reproduce results from other programs, although it is based on the same general principles.\footnote{function \code{nestedness} in the \pkg{bipartite} package is a direct port of the original \proglang{BINMATNEST} program of \citet{RodGir06}.} I try to give main computation details in this document --- all details can be seen in the source code of \code{nestedtemp}. \begin{itemize} \item Species and sites are put into unit square \citep{RodGir06}. The row and column coordinates will be $(k-0.5)/n$ for $k=1 \ldots n$, so that there are no points in the corners or the margins of the unit square, and a diagonal line can be drawn through any point. I do not know how the rows and columns are converted to the unit square in other software, and this may be a considerable source of differences among implementations. \item Species and sites are ordered alternately using indices \citep{RodGir06}: \begin{equation} \begin{split} s_j &= \sum_{i|x_{ij} = 1} i^2 \\ t_j &= \sum_{i|x_{ij} = 0} (n-i+1)^2 \end{split} \end{equation} Here $x$ is the data matrix, where $1$ is presence, and $0$ is absence, $i$ and $j$ are row and column indices, and $n$ is the number of rows. The equations give the indices for columns, but the indices can be reversed for corresponding row indexing. Ordering by $s$ packs presences to the top left corner, and ordering by $t$ pack zeros away from the top left corner. The final sorting should be ``a compromise'' \citep{RodGir06} between these scores, and \pkg{vegan} uses $s+t$. The result should be cool, but the packing does not try to minimize the temperature \citep{RodGir06}. I do not know how the ``compromise'' is defined, and this can cause some differences to other implementations. \item The following function is used to define the fill line: \begin{equation} y = (1-(1-x)^p)^{1/p} \end{equation} This is similar to the equation suggested by \citet[eq. 4]{RodGir06}, but omits all terms dependent on the numbers of species or sites, because I could not understand why they were needed. The differences are visible only in small data sets. The $y$ and $x$ are the coordinates in the unit square, and the parameter $p$ is selected so that the curve covers the same area as is the proportion of presences (Fig. \ref{fig:nestedtemp}). The parameter $p$ is found numerically using \proglang{R} functions \code{integrate} and \code{uniroot}. The fill line used in the original matrix temperature software \citep{AtmarPat93} is supposed to be similar \citep{RodGir06}. Small details in the fill line combined with differences in scores used in the unit square (especially in the corners) can cause large differences in the results. \item A line with slope\,$= -1$ is drawn through the point and the $x$ coordinate of the intersection of this line and the fill line is found using function \code{uniroot}. The difference of this intersection and the row coordinate gives the argument $d$ of matrix temperature (Fig. \ref{fig:nestedtemp}). \item In other software, ``duplicated'' species occurring on every site are removed, as well as empty sites and species after reordering \cite{RodGir06}. This is not done in \pkg{vegan}. \end{itemize} \subsection{Backtracking} Gotelli's and Entsminger's seminal paper \cite{GotelliEnt01} on filling algorithms is somewhat confusing: it explicitly deals with ``knight's tour'' which is quite a different problem than the one we face with null models. The chess piece ``knight''\footnote{``Knight'' is ``Springer'' in German which is very appropriate as Springer was the publisher of the paper on ``knight's tour''} has a history: a piece in a certain position could only have entered from some candidate squares. The filling of incidence matrix has no history: if we know that the item last added was in certain row and column, we have no information to guess which of the filled items was entered previously. A consequence of dealing with a different problem is that \citet{GotelliEnt01} do not give many hints on implementing a fill algorithm as a community null model. The backtracking is implemented in two stages in \pkg{vegan}: filling and backtracking. \begin{enumerate} \item The matrix is filled in the order given by the marginal probabilities. In this way the matrix will look similar to the final matrix at all stages of filling. Equal filling probabilities are not used since that is ineffective and produces strange fill patterns: the rows and columns with one or a couple of presences are filled first, and the process is cornered to columns and rows with many presences. As a consequence, the the process tries harder to fill that corner, and the result is a more tightly packed quadratic fill pattern than with other methods. \item The filling stage stops when no new points can be added without exceeding row or column totals. ``Backtracking'' means removing random points and seeing if this allows adding new points to the plot. No record of history is kept (and there is no reason to keep a record of history), but random points are removed and filled again. The number of removed points increases from one to four points. New configuration is kept if it is at least as good as the previous one, and the number of removed points is reduced back to one if the new configuration is better than the old one. Because there is no record of history, this does not sound like a backtracking, but it still fits the general definition of backtracking: ``try something, and if it fails, try something else'' \citep{Sedgewick90}. \end{enumerate} \section{Scaling in redundancy analysis} This chapter discusses the scaling of scores (results) in redundancy analysis and principal component analysis performed by function \code{rda} in the \pkg{vegan} library. Principal component analysis decomposes a centred data matrix $\mathbf{X} = \{x_{ij}\}$ into $K$ orthogonal components so that $x_{ij} = \sqrt{n-1} \sum_{k=1}^K u_{ik} \sqrt{\lambda_k} v_{jk}$, where $u_{ik}$ and $v_{jk}$ are orthonormal coefficient matrices and $\lambda_k$ are eigenvalues. In \pkg{vegan} the eigenvalues sum up to variance of the data, and therefore we need to multiply with the square root of degrees of freedom $n-1$. Orthonormality means that sums of squared columns is one and their cross-product is zero, or $\sum_i u_{ik}^2 = \sum_j v_{jk}^2 = 1$, and $\sum_i u_{ik} u_{il} = \sum_j v_{jk} v_{jl} = 0$ for $k \neq l$. This is a decomposition, and the original matrix is found exactly from the singular vectors and corresponding singular values, and first two singular components give the rank $=2$ least squares estimate of the original matrix. The coefficients $u_{ik}$ and $v_{jk}$ are scaled to unit length for all axes $k$. Eigenvalues $\lambda_k$ give the information of the importance of axes, or the `axis lengths.' Instead of the orthonormal coefficients, or equal length axes, it is customary to scale species (column) or site (row) scores or both by eigenvalues to display the importance of axes and to describe the true configuration of points. Table \ref{tab:scales} shows some alternative scalings. These alternatives apply to principal components analysis in all cases, and in redundancy analysis, they apply to species scores and constraints or linear combination scores; weighted averaging scores have somewhat wider dispersion. \begin{table*}[t] \centering \caption{\label{tab:scales} Alternative scalings for \textsc{rda} used in the functions \code{prcomp} and \code{princomp}, and the one used in the \pkg{vegan} function \code{rda} and the proprietary software \proglang{Canoco} scores in terms of orthonormal species ($v_{ik}$) and site scores ($u_{jk}$), eigenvalues ($\lambda_k$), number of sites ($n$) and species standard deviations ($s_j$). In \code{rda}, $\mathrm{const} = \sqrt[4]{(n-1) \sum \lambda_k}$. Corresponding negative scaling in \pkg{vegan} % and corresponding positive scaling in \texttt{Canoco 3} is derived dividing each species by its standard deviation $s_j$ (possibly with some additional constant multiplier). } \begin{tabular}{lcc} \\ \toprule & \textbf{Site scores} $u_{ik}^*$ & \textbf{Species scores} $v_{jk}^*$ \\ \midrule \code{prcomp, princomp} & $u_{ik} \sqrt{n-1} \sqrt{\lambda_k}$ & $v_{jk}$ \\ \code{stats::biplot} & $u_{ik}$ & $v_{jk} \sqrt{n} \sqrt{\lambda_k}$ \\ \code{stats::biplot, pc.biplot=TRUE} & $u_{ik} \sqrt{n-1}$ & $v_{jk} \sqrt{\lambda_k}$\\ \code{rda, scaling="sites"} & $u_{ik} \sqrt{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ & $v_{jk} \times \mathrm{const}$ \\ \code{rda, scaling="species"} & $u_{ik} \times \mathrm{const}$ & $v_{jk} \sqrt{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ \\ \code{rda, scaling="symmetric"} & $u_{ik} \sqrt[4]{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ & $v_{jk} \sqrt[4]{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ \\ \code{rda, correlation=TRUE} & $u_{ik}^*$ & $\sqrt{\sum \lambda_k /(n-1)} s_j^{-1} v_{jk}^*$ \\ % \code{Canoco 3, scaling=-1} & % $u_{ik} \sqrt{n-1} \sqrt{\lambda_k / \sum \lambda_k}$ & % $v_{jk} \sqrt{n}$ \\ % \code{Canoco 3, scaling=-2} & % $u_{ik} \sqrt{n-1}$ & % $v_{jk} \sqrt{n} \sqrt{\lambda_k / \sum \lambda_k}$ % \\ % \code{Canoco 3, scaling=-3} & % $u_{ik} \sqrt{n-1} \sqrt[4]{\lambda_k / \sum \lambda_k}$ & % $v_{jk} \sqrt{n} \sqrt[4]{\lambda_k / \sum \lambda_k}$ \bottomrule \end{tabular} \end{table*} In community ecology, it is common to plot both species and sites in the same graph. If this graph is a graphical display of \textsc{pca}, or a graphical, low-dimensional approximation of the data, the graph is called a biplot. The graph is a biplot if the transformed scores satisfy $x_{ij} = c \sum_k u_{ij}^* v_{jk}^*$ where $c$ is a scaling constant. In functions \code{princomp}, \code{prcomp} and \code{rda} with \code{scaling = "sites"}, the plotted scores define a biplot so that the eigenvalues are expressed for sites, and species are left unscaled. % For \texttt{Canoco 3} $c = n^{-1} \sqrt{n-1} % \sqrt{\sum \lambda_k}$ with negative \proglang{Canoco} scaling % values. All these $c$ are constants for a matrix, so these are all % biplots with different internal scaling of species and site scores % with respect to each other. For \proglang{Canoco} with positive scaling % values and \pkg{vegan} with negative scaling values, no constant % $c$ can be found, but the correction is dependent on species standard % deviations $s_j$, and these scores do not define a biplot. There is no natural way of scaling species and site scores to each other. The eigenvalues in redundancy and principal components analysis are scale-dependent and change when the data are multiplied by a constant. If we have percent cover data, the eigenvalues are typically very high, and the scores scaled by eigenvalues will have much wider dispersion than the orthonormal set. If we express the percentages as proportions, and divide the matrix by $100$, the eigenvalues will be reduced by factor $100^2$, and the scores scaled by eigenvalues will have a narrower dispersion. For graphical biplots we should be able to fix the relations of row and column scores to be invariant against scaling of data. The solution in \proglang{R} standard function \code{biplot} is to scale site and species scores independently, and typically very differently (Table~\ref{tab:scales}), but plot each independently to fill the graph area. The solution in \proglang{Canoco} and \code{rda} is to use proportional eigenvalues $\lambda_k / \sum \lambda_k$ instead of original eigenvalues. These proportions are invariant with scale changes, and typically they have a nice range for plotting two data sets in the same graph. The \textbf{vegan} package uses a scaling constant $c = \sqrt[4]{(n-1) \sum \lambda_k}$ in order to be able to use scaling by proportional eigenvalues (like in \proglang{Canoco}) and still be able to have a biplot scaling. Because of this, the scaling of \code{rda} scores is non-standard. However, the \code{scores} function lets you to set the scaling constant to any desired values. It is also possible to have two separate scaling constants: the first for the species, and the second for sites and friends, and this allows getting scores of other software or \proglang{R} functions (Table \ref{tab:rdaconst}). \begin{table*}[t] \centering \caption{\label{tab:rdaconst} Values of the \code{const} argument in \textbf{vegan} to get the scores that are equal to those from other functions and software. Number of sites (rows) is $n$, the number of species (columns) is $m$, and the sum of all eigenvalues is $\sum_k \lambda_k$ (this is saved as the item \code{tot.chi} in the \code{rda} result)}. \begin{tabular}{lccc} \\ \toprule & \textbf{Scaling} &\textbf{Species constant} & \textbf{Site constant} \\ \midrule \pkg{vegan} & any & $\sqrt[4]{(n-1) \sum \lambda_k}$ & $\sqrt[4]{(n-1) \sum \lambda_k}$\\ \code{prcomp}, \code{princomp} & \code{1} & $1$ & $\sqrt{(n-1) \sum_k \lambda_k}$\\ \proglang{Canoco\,v3} & \code{-1, -2, -3} & $\sqrt{n-1}$ & $\sqrt{n}$\\ \proglang{Canoco\,v4} & \code{-1, -2, -3} & $\sqrt{m}$ & $\sqrt{n}$\\ \bottomrule \end{tabular} \end{table*} The scaling is controlled by three arguments in the \code{scores} function in \pkg{vegan}: \begin{enumerate} \item \code{scaling} with options \code{"sites"}, \code{"species"} and \code{"symmetric"} defines the set of scores which is scaled by eigenvalues (Table~\ref{tab:scales}). \item \code{const} can be used to set the numeric scaling constant to non-default values (Table~\ref{tab:rdaconst}). \item \code{correlation} can be used to modify species scores so that they show the relative change of species abundance, or their correlation with the ordination (Table~\ref{tab:scales}). This is no longer a biplot scaling. \end{enumerate} \section{Weighted average and linear combination scores} Constrained ordination methods such as Constrained Correspondence Analysis (CCA) and Redundancy Analysis (RDA) produce two kind of site scores \cite{Braak86, Palmer93}: \begin{itemize} \item LC or Linear Combination Scores which are linear combinations of constraining variables. \item WA or Weighted Averages Scores which are such weighted averages of species scores that are as similar to LC scores as possible. \end{itemize} Many computer programs for constrained ordinations give only or primarily LC scores following recommendation of \citet{Palmer93}. However, functions \code{cca} and \code{rda} in the \pkg{vegan} package use primarily WA scores. This chapter explains the reasons for this choice. Briefly, the main reasons are that \begin{itemize} \item LC scores \emph{are} linear combinations, so they give us only the (scaled) environmental variables. This means that they are independent of vegetation and cannot be found from the species composition. Moreover, identical combinations of environmental variables give identical LC scores irrespective of vegetation. \item \citet{McCune97} has demonstrated that noisy environmental variables result in deteriorated LC scores whereas WA scores tolerate some errors in environmental variables. All environmental measurements contain some errors, and therefore it is safer to use WA scores. \end{itemize} This article studies mainly the first point. The users of \pkg{vegan} have a choice of either LC or WA (default) scores, but after reading this article, I believe that most of them do not want to use LC scores, because they are not what they were looking for in ordination. \subsection{LC Scores are Linear Combinations} Let us perform a simple CCA analysis using only two environmental variables so that we can see the constrained solution completely in two dimensions: <<>>= library(vegan) data(varespec) data(varechem) orig <- cca(varespec ~ Al + K, varechem) @ Function \code{cca} in \pkg{vegan} uses WA scores as default. So we must specifically ask for LC scores (Fig. \ref{fig:ccalc}). <>= plot(orig, dis=c("lc","bp")) @ \begin{figure} <>= <> @ \caption{LC scores in CCA of the original data.} \label{fig:ccalc} \end{figure} What would happen to linear combinations of LC scores if we shuffle the ordering of sites in species data? Function \code{sample()} below shuffles the indices. <<>>= i <- sample(nrow(varespec)) shuff <- cca(varespec[i,] ~ Al + K, varechem) @ \begin{figure} <>= plot(shuff, dis=c("lc","bp")) @ \caption{LC scores of shuffled species data.} \label{fig:ccashuff} \end{figure} It seems that site scores are fairly similar, but oriented differently (Fig. \ref{fig:ccashuff}). We can use Procrustes rotation to see how similar the site scores indeed are (Fig. \ref{fig:ccaproc}). <>= plot(procrustes(scores(orig, dis="lc"), scores(shuff, dis="lc"))) @ \begin{figure} <>= <> @ \caption{Procrustes rotation of LC scores from CCA of original and shuffled data.} \label{fig:ccaproc} \end{figure} There is a small difference, but this will disappear if we use Redundancy Analysis (RDA) instead of CCA (Fig. \ref{fig:rdaproc}). Here we use a new shuffling as well. <<>>= tmp1 <- rda(varespec ~ Al + K, varechem) i <- sample(nrow(varespec)) # Different shuffling tmp2 <- rda(varespec[i,] ~ Al + K, varechem) @ \begin{figure} <>= plot(procrustes(scores(tmp1, dis="lc"), scores(tmp2, dis="lc"))) @ \caption{Procrustes rotation of LC scores in RDA of the original and shuffled data.} \label{fig:rdaproc} \end{figure} LC scores indeed are linear combinations of constraints (environmental variables) and \emph{independent of species data}: You can shuffle your species data, or change the data completely, but the LC scores will be unchanged in RDA. In CCA the LC scores are \emph{weighted} linear combinations with site totals of species data as weights. Shuffling species data in CCA changes the weights, and this can cause changes in LC scores. The magnitude of changes depends on the variability of site totals. The original data and shuffled data differ in their goodness of fit: <<>>= orig shuff @ Similarly their WA scores will be (probably) very different (Fig. \ref{fig:ccawa}). \begin{figure} <>= plot(procrustes(orig, shuff)) @ \caption{Procrustes rotation of WA scores of CCA with the original and shuffled data.} \label{fig:ccawa} \end{figure} The example used only two environmental variables so that we can easily plot all constrained axes. With a larger number of environmental variables the full configuration remains similarly unchanged, but its orientation may change, so that two-dimensional projections look different. In the full space, the differences should remain within numerical accuracy: <<>>= tmp1 <- rda(varespec ~ ., varechem) tmp2 <- rda(varespec[i,] ~ ., varechem) proc <- procrustes(scores(tmp1, dis="lc", choi=1:14), scores(tmp2, dis="lc", choi=1:14)) max(residuals(proc)) @ In \code{cca} the difference would be somewhat larger than now observed \Sexpr{format.pval(max(residuals(proc)))} because site weights used for environmental variables are shuffled with the species data. \subsection{Factor constraints} It seems that users often get confused when they perform constrained analysis using only one factor (class variable) as constraint. The following example uses the classical dune meadow data \cite{Jongman87}: <<>>= data(dune) data(dune.env) orig <- cca(dune ~ Moisture, dune.env) @ When the results are plotted using LC scores, sample plots fall only in four alternative positions (Fig. \ref{fig:factorlc}). \begin{figure} <>= plot(orig, dis="lc") @ \caption{LC scores of the dune meadow data using only one factor as a constraint.} \label{fig:factorlc} \end{figure} In the previous chapter we saw that this happens because LC scores \emph{are} the environmental variables, and they can be distinct only if the environmental variables are distinct. However, normally the user would like to see how well the environmental variables separate the vegetation, or inversely, how we could use the vegetation to discriminate the environmental conditions. For this purpose we should plot WA scores, or LC scores and WA scores together: The LC scores show where the site \emph{should} be, the WA scores shows where the site \emph{is}. Function \code{ordispider} adds line segments to connect each WA score with the corresponding LC (Fig. \ref{fig:walcspider}). <>= plot(orig, display="wa", type="points") ordispider(orig, col="red") text(orig, dis="cn", col="blue") @ \begin{figure} <>= <> @ \caption{A ``spider plot'' connecting WA scores to corresponding LC scores. The shorter the web segments, the better the ordination.} \label{fig:walcspider} \end{figure} This is the standard way of displaying results of discriminant analysis, too. Moisture classes \code{1} and \code{2} seem to be overlapping, and cannot be completely separated by their vegetation. Other classes are more distinct, but there seems to be a clear arc effect or a ``horseshoe'' despite using CCA. \subsection{Conclusion} LC scores are only the (weighted and scaled) constraints and independent of vegetation. If you plot them, you plot only your environmental variables. WA scores are based on vegetation data but are constrained to be as similar to the LC scores as only possible. Therefore \pkg{vegan} calls LC scores as \code{constraints} and WA scores as \code{site scores}, and uses primarily WA scores in plotting. However, the user makes the ultimate choice, since both scores are available. \bibliography{vegan} \end{document} vegan/inst/ONEWS0000644000176200001440000027106112626316320013155 0ustar liggesusers-*-Text-*- VEGAN RELEASE VERSIONS ====================== CHANGES IN VEGAN 1.17-12 - This is a maintenance release which improves robustness of several functions. A major release is expected soon. - tolerance.cca: a new function to find the species response widths (a.k.a. tolerances) and sample heteregeneities from a cca() result. - adonis: much faster. - betadiver: argument 'index' was renamed to 'method' so that the function can be used similarly as dist(), vegdist() and other distance functions. This allows using betadiver() as a distance function in metaMDS(). - cca/rda/capscale: handling of aliased and other zero-rank components changed in vegan 1.17-11, but not all support functions were adapted to these changes in that release. Now the following functions cope with the changes and are more robust: capscale, anova.cca, bstick.cca, goodness.cca, predict.cca, screeplot.cca, calibrate.cca, deviance.cca/rda, ordiplot3d, ordiresids, ordirgl, ordixytplot. - isomap: text or points are plotted more cleanly, and text uses ordilabel(). - make.cepnames: a bit more flexible and robust, with a new argument that allows selecting first and second name component instead of first and last. - metaMDSrotate: rotation could be slightly off with more than two dimensions when there are NA scores. - ordiellipse, ordihull, ordispider, orditorp: accept NA scores. - ordilabel: gained argument 'select'. - ordiplot: better handling of graphical arguments, arg 'cex' can be set by the user. - swan: gained new argument 'maxit' that allows setting maximum number of iterations. Defaults 'maxit = Inf' or the current behaviour of continuing as long as there are zeros that can be filled. CHANGES IN VEGAN 1.17-11 - This is a maintenance release which improves the robustness of several functions but introduces no new important features. - cca/rda/capscale: handling of aliased and other zero-rank components changed. They are no longer made NULL and left undisplayed, but now they are shown as zero rank. The general output also changed so that proportions of inertia are only shown if there are conditions or constraints, but not for unconstrained analysis. The capscale() function no longer shows species scores if these are unavailable. Several support functions more robust. - nobs: R 2.13.0 introduced generic function nobs() to find the number of observations, and this release provides nobs() for several vegan results. (This does not make vegan dependent on R 2.13.0, but vegan works with older R as well.) - prc: allows anova(..., by = "axis") and other 'by' cases for prc() results. Some rda() support functions still fail, but now they stop informatively. - specaccum: gained argument 'groups' which can be used to find the number of species in subsets of the data. CHANGES IN VEGAN 1.17-10 - This is minor revision that mainly fixes vegan with respect to changes in the currently released R 2.13.0. Most importantly, cmdscale() output changed in R 2.13.0 and because of this capscale() could fail in some rare situations with argument 'add = TRUE'. This vegan bug made BiodiversityR package fail its tests in R 2.13.0. - metaMDSrotate: gained argument na.rm = TRUE. CHANGES IN VEGAN 1.17-9 - anova of cca/rda/capscale results gave wrong results in partial models. The bug was introduced in vegan 1.17-7. - diversity and related functions rarefy, rrarefy and specnumber now accept vector input. Earlier a single site had to be analysed either as a single-row matrix or using the non-default setting MARGIN = 2. - drarefy: new function that returns a matrix of probabilities that a species occurs in a rarefied sample of a given size. - metaMDS: it is possible to supply a starting configuration with argument 'previous.best'. A previous metaMDS or isoMDS result can also be given as a starting configuration. If the starting configuration has a higher number of dimensions than requested, the extra ones are dropped, and if the starting configuration has fewer dimensions, random scores for extra dimensions will be added. This may help in running metaMDS over a range of dimensionalities. - metaMDSrotate: can now rotate metaMDS solutions with any number of dimensions so that the first axis is parallel to a fitted environmental vector. Previously, only two dimensional solutions worked. - ordilabel: gained argument 'xpd' that allows labels outside the plot area. This allows labels above axes, for instance. - ordisurf: gained several new arguments to control the mgcv::gam fitting. Also gained an argument to suppress plotting, and a new plot method. The fitted model can be specified with a formula. - prestonfit and friends: default is now 'tiesplit = TRUE' (which was a new feature introduced in vegan 1.17-8). CHANGES IN VEGAN 1.17-8 - prestonfit: fixed a bug in as.preston(): the largest octave could be missing with 'tiesplit = TRUE'. - decorana: spurious axes scores and eigenvalues could be reported when the eigenvalues actually were zero. This was rarely a problem with real data, but occurred only in arbitrary examples. - procrustes: checks input. CHANGES IN VEGAN 1.17-7 - anova.cca: more robust when models were fitted without 'data' argument, or when 'na.action' or 'subset' was used. - capscale: implemented 'subset' in model definition. Additive constant with 'add = TRUE' is taken into account in predict() and fitted(). Implemented simulate() which returns a dissimilarity matrix with random error about predicted values. - eigenvals: can now extract eigenvalues of some ade4 and labdsv result objects. - nestednodf: did not use binary data when weighted = FALSE was used together with order = FALSE. Reported by Daniel Spitale. - prestonfit: gained option to split tied frequencies (1, 2, 4, 8, etc.) between adjacent octaves. - specaccum: implemented choice of using either "individuals" or "sites" as x-axis in plot(). Corrected a typo in the result object: now returns indeed "individuals". CHANGES IN VEGAN 1.17-6 - capscale: vegan 1.17-5 defined total inertia as the sum of absolute values of eigenvalues which changed the total inertia from previous versions. This is changed so that the total inertia is the sum of all eigenvalues, i.e., negative eigenvalues are subtracted from the total which was the definition in 1.17-4 and earlier. The proportions of inertia components are now expressed for non-negative eigenvalues only, and a new item "Real Total" (sum of positive eigenvalues) is added to the output if there are negative eigenvalues ("Imaginary" component). The function no longer returns the negative eigenvalues. - CCorA: scaling of object scores changed: they are no longer divided with sqrt(n-1). Minor fixes for improved robustness. - metaMDS: automatically changes some arguments to non-default values if input data contains negative entries. Help page gives advice to do so for non-community data. - wascores: checks that input weights are non-negative. NEW FEATURES AND BUG FIXES IN VEGAN 1.17-5 - anova.cca: Empty models with no constrained component have correct degrees of freedom. Tests 'by = "axis"' are really marginal for all axes (first axis used to be non-marginal to latter axes). - as.mlm.cca/rda, intersetcor, vif.cca: avoid bug in qr.X in R 2.12.0 which use wrong variable names in aliased models (fixed also in R 2.12.1). - betadisper: plot did not allow selecting axes. Reported by Sarah Goslee. - capscale: failed with NA action (reported by Nevil Amos). Total inertia is defined as the sum of absolute values of all eigenvalues consistently with cmdscale (from R 2.12.1) and other vegan functions. - cca/rda/capscale: print proportions of inertia components. - decorana: Fortran code prints warnings of failed convergence. Default plot() uses points if items have no name labels to be plotted. - deviance.cca/rda: return 0 (instead of NA) for over-paremetrized models with no unconstrained component. - eigenvals: uses sum of absolute values of eigenvalues in models that may have negative eigenvalues (cmdscale, wcmdscale, capscale). Can extract eigenvalues of pcnm() and cmdscale() of R 2.12.1. Uses zapsmall() to print near-zero eigenvalues. - mantel.correlog: P-values could slightly off. The function uses internally mantel() to evaluate the statistic and its significance. The mantel() function adds one both to the denominator and numerator, but mantel.correlog() did not notice this and made the addition for the second time. When the mantel.correlog() reported a positive value of the statistic, it reversed the direction of the one-sided test of mantel(), but did not handle tied values correctly in this reversal. - nestednodf: Gustavo Carvalho's new version that also implements a new quantitative method of Almeida-Neto & Ulrich (Env Mod Software, 26, 173-178; 2011). - oecosimu: takes care that the statistic is evaluated with binary data when null models are binary (regression introduced in vegan 1.17-0). Can handle NA values in permutations (as na.rm = TRUE). - ordilabel: gained new argument 'col' to set the text colour of the labels separately from 'border'. Function ordiellipse() uses this in filled polygons to set the colour of labels to that of borders or foreground instead of the colour of the fill. - ordiR2step: new function to model selection in rda() and capscale() based on adjusted R2 following the recommendations of Blanchet, Legendre & Borcard (Ecology 89, 2623-2632; 2008). - ordistep: correct a name clash when the fitted model had term or item called 'mod'. Reported by Richard Telford (Bergen, Norway). - pcnm: returns the truncated distanced matrix with argument 'dist.ret'. - prc: rewritten by Cajo ter Braak with a fix to scaling of coefficients for full compatibility with Canoco. - procrustes: Fixed translation following the report and fix by Christian Dudel (Bochum, Germany). New predict() method to rotate 'newdata' points to the target. Graphics with plot() select the direction of arrows with new argument 'to.target', and use ordilabel() to display the labels with 'type = "t"'. - rankindex: can take a list of dissimilarity functions as the argument to allow the use of other dissimilarity functions than vegdist() of vegan. - rda/capscale: the scores() can take two scaling constants ('const'). One is used for species, second for WA and LC scores of sites. This allows using scalings of prcomp(), princomp() or Canoco (like documented in the design decisions vignette). - swan: disconnected data caused infinite loop. Now zeros are left to the result with disconnected data. - treedist: can handle empty or one-node trees. Gained new argument 'relative' (defaults TRUE): if FALSE, finds raw dissimilarities of tree heights. Help page tells that relative tree distances are in range 0..2 instead of 0..1, since combining two trees may add a new common root. - treedive: handles trivial cases of zero (diversity NA) or one species (diversity 0). - vegdist: help page gives now binary variants of the indices using designdist() notation. - vif.cca: can handle models with aliased terms. - wcmdscale: returns goodness of fit statistic (item GOF) and handles negative eigenvalues consistently with cmdscale() and capscale(). NEW FEATURES AND BUG FIXES IN VEGAN 1.17-4 - MOStest: a new set of functions to implement generalized Mitchell-Olds & Shaw test for the location of the quadratic extreme in a given interval. The test can also be used for the location of the optimum of the Gaussian response model. In addition to the basic test, there are Fieller and deviance profile methods for the confidence interval of the location of the quadratic extreme or Gaussian optimum. - mrpp & meandist: mrpp() does not evaluate the Classification Strength (CS) of Van Sickle & Hughes (J. N. Am. Benthol. Soc., 19: 370-384; 2000) any longer. The old version misinterpreted the weighting scheme of CS, and with correct scheme there is no exact relationship between CS and the corresponding MRPP statistic and therefore permutation tests are not available. CS is still evaluated in meandist(), but with corrected weighting scheme, and no tests are performed. Reported by Dr John Van Sickle (Corvallis OR). - msoplot: legend text was in a wrong order. Reported by Daniel Borcard. - vegdist: Marti Anderson variant of the Gower distance (method = "altGower") should be without range standardization. Reported by Sergio Garcia. - ordiellipse: labels disappeared in their background with 'draw = "polygon"'. - predict.cca and predict.rda: gained argument 'newdata' for 'type = "response"' and 'type = "working"'. These return estimates of the response data, or dissimilarities in capscale(). NEW FEATURES AND BUG FIXES IN VEGAN 1.17-3 - adonis: handles ties correctly. - anova.cca and permutest.cca: permutations of cca result is faster and now nearly equally fast (or slow) in rda and cca. - betadisper: 'type = "median"' (the default) was not computing the spatial median on the real and imaginary axes separately. Reported by Marek Omelka. - cca, rda and capscale failed when Condition() was a factor, but the constraints had only continuous variables. - envfit: defaults to use 999 permutations instead of skipping permutations. - mantel and mantel.partial: faster permutation. - mantel.correlog: upgraded and faster. - ordiarrows, ordisegments and ordispider gained argument 'label' to label the groups corresponding to drawn arrows or lines. - ordiresids: de-weights residuals and fitted values in CCA so that these are identical to the values shuffled in simulate.cca. - permutest.cca: adds observed statistic among permutations when printing the result (does not influence anova.cca or calculations). - RsquareAdj: The 'rda' method used wrong number of degrees of freedom in rank deficit models (number of dependent variables was lower than the rank of constraints and conditions). Default method handles vector input. - scores: default method works with one row of scores. The scores of "cca" and "rda" methods always have names, even if there are no names in the input data. - Permutation tests: The available permutation tests are described in a new help files accessed via ?permutations. NEW FEATURES IN VEGAN 1.17-2 - permutest.betadisper: printed P-values in a wrong order in displaying the the matrix of pairwise tests (the values were correct, but formatting failed). Reported by Dan O'Shea. - nesteddisc: failed if the most species rich sites were tied. The function is now much faster (though still slow), but the price is that it does not try as hard to find the optimal ordering. - screeplot.cca & friends: new argument 'legend' for all methods (except 'decorana') to draw a legend if the observed and broken stick distribution are both plotted. - ordistep: adds an 'anova' item to the final model similarly as the standard step(). You can suppress the tracing ('trace = FALSE'), and find the model build history save in 'anova' in a compact form. - densityplot.oecosimu: gave warnings when there was only one statistic and hence one lattice panel. - predict functions for cca and rda objects match 'newdata' by dimension names instead of index. - simulate.rda and simulate.cca have new argument 'rank' which allows using lower rank presentation of fitted values (including rank = 0). - treedist: new function to find dissimilarities of species property trees of communities. The property trees can be, e.g., functional diversity trees, taxonomies or phylogenies. Similar in spirit to UniFrac distance (C. Lozupone & R. Knight, Appl Environ Microbiol 71:8225-8235; 2005), but completely different in design and works only with binary data. NEW FEATURES AND FIXES IN VEGAN 1.17-1 - multipart: new functions for multiplicative partionining of gamma diversity into alpha and beta diversity components. - CCorA: Fixed choice of scores in biplots -- Used PC scores instead of observed scores in the right-hand-side biplot panel. The biplot function has several new and enhanched alternatives of plots. - envfit: ignored weights in cca() results for factors or a single continuous variable. The bug was introduced with NA handling upgrade in vegan 1.17-0. The problem with fitted vectors was reported by Richard Telford (Bergen, Norway). CHANGES AND NEW FEATURES IN VEGAN 1.17-0 - Guillaume Blanchet joined the vegan team. - New function to partition data-set diversity (gamma) into within-plot (alpha) and between-plot (beta) diversity components. Function adipart performs additive partitioning (gamma = alpha + beta). Function hiersimu performs hierarchical null model testing similar to adipart but by using custom function to calculate statistics for levels of a hierarchy. - Subsets and missing value handling added to constrained ordination methods cca(), rda() and capscale(). The missing values (NA) can be handled with setting na.action (defaults na.fail). With na.action = na.omit, observations with missing values are removed, and with na.action = na.exclude they are kept, but scores may be NA. However, the WA scores for sites are available in non-partial models with na.action = na.exclude. The 'subset' can be defined using any variable in the constraining data set or species in the dependent data. - Functions for fitting environmental variables onto ordination (envfit, ordisurf) are aware of missing values in constraints or NA values in scores. The ordination plot functions also can handle NA scores. - New and upgraded quantitative null models. In particular, quantitative swap models (function abuswap) allows generetating null matrices where marginal totals and fill are fixed, or row and column fills are fixed, or row and column fills and either row or column totals are fixed. - oecosimu: rewritten to handle quantitative null models. Gained keyword 'alternative' for "two-sided", or "less" and "greater" one-sided tests. More robust with degenerate solutions. The 'method' can now be a user-supplied function. New support functions as.ts() and as.mcmc which transform sequential models into form that can be analysed using tools for time-series (as.ts()) or MCMC sequences of the 'coda' package (as.mcmc). - calibrate: calibrate is now a generic function with a new method calibrate.ordisurf() in addition to the old calibrate.cca. These find the estimates of environmental variables from ordination. - ordistep: stepwise selection of terms in constrained ordination (cca, rda and capscale) using permutation tests instead of pseudo-AIC that is used by the standard step() function. - pcnm: new function to find weighted principal coordinates of neighbour matrix (PCNM) from distances between points. These are typically used for spatial filtering in constrained ordination. The function uses weighted analysis and can therefore produce PCNM for correspondence analysis in addition to PCA and RDA. - betadisper: can use spatial medians which are now the default method. Preliminary tests indicate that spatial medians correct the anti-conservative Type I errors reported by Stewart Schultz. - decostand & vegdist: new transformation 'log' which implements Marti Anderson's scaling log(x) + 1 for x>0 (which is not at all the same as log(x+1)), and vegdist has alternative Gower function that skips double zeros. Together these implement the "modified Gower" distance of Anderson et al. (Ecology Letters 9, 683-693; 2006). Feature request #473 by Etienne Laliberte in vegan.r-forge.r-project.org. - model.matrix.cca & model.frame.cca: new functions to reconstruct the model frame and model matrix (model matrices in partial models) of constraints used in ordination methods cca(), rda() and capscale(). - simulate.cca & simulate.cca: simulate the community (response) data from the result of cca() or rda() under alternative hypothesis. Error is added to the fitted values from ordination. The function uses either Gaussian error or permutes residuals and adds these to fitted values. - spandepth: a new function to find the depth of each node in the minimum spanning tree produced by spantree(). Feature request by W. E. Sharp. - alias.cca: gained argument names.only. - metaMDSrotate: a new function to rotate metaMDS so that first axis is parallel to an environmental variable. - msoplot: uses standard legend. - nesteddisc: new method that tries to find the smallest possible value of the statistic in tied data. Slow, but fixes the problems of the published method. The problem with tied values in nesteddisc was found with Carsten Dormann. - contribdiv: gained a plot method. - rarefy: failed with one site and many sample sizes like rarefy(rpois(10, 2), sample=2:3). - meandist: plot can draw histograms as an alternative to dendrograms. - plot functions for 'decorana' and 'cca' and friends and 'ordiplot' use 'linestack' if only one axis was requested. CHANGES IN VEGAN 1.15-4 - Changed package dependence: vegan does not depend on 'ellipse'. - anosim: user interface identical to 'mrpp'. Accepts now data matrix and finds dissimilarities internally. - betadisper: fix removal of zero eigenvalues with non-Euclidean distances. This may change the results slightly, but in most cases the effects are minor or none. - capscale: has now 'fitted' and 'residual' methods, and 'predict' works with 'type = "response"'. These return dissimilarities that produce the same ordination as the original data. - indpower: new function to find the indicator power of species to predict presence of other species (Halme et al., Conservation Biology 23, 1008-1016; 2009). Closely related to the the power to predict probabilities in beals(). - mantel.correlog: new functions to produce multivariate Mantel correlograms (Legendre & Legendre, Numerical Ecology, section 13.1.5; 1998). - metaMDS: accepts user-supplied dissimilarities. Species scores, data transformation, step-across and half-change scaling are unavailable with user-supplied dissimilarities, but random starts, PC rotation and scaling to original range of input dissimilarities work. - nestedtemp: row and column labels can be turned on/off independently in plots. - ordihull & ordiellipse: new argument 'label' to plot group names for hulls or ellipses. Return (invisibly) the data for plotted convex hulls or ellipses. In 'ordihull' this is a list of hull vertices, and in 'ordiellipse' a list of (scaled) covariance and centre data for ellipses. New 'summary' methods find the centres and areas of plotted hulls or ellipses. Argument 'draw' has new option "none" that suppresses all drawing so that only the data for summary can be extracted without plotting. - orditorp: works with reversed axes, like with 'xlim = c(3, -3)'. - ordixyplot: has a panel function for arrows: a lattice variant of ordiarrows. - poolaccum, estaccumR: new functions to find the specpool() or estimateR() estimates of extrapolated species richness in random accumulations of sites. These have 'plot' and 'summary' methods. - scores: functions biplot, points, text, ordilabel, ordiplot3d, ordixyplot and spantreee did not pass all arguments to scores() function. In particular, this concerned rda where 'scaling' and 'const' arguments could not be used within these functions. - radfit: new function 'radlattice' for a lattice plots of fitted models for a single site. - rrarefy: a new function to generate random rarefied communities. - RsquareAdj: now a generic function to find adjusted R squared with special cases to 'rda', 'cca', 'lm' and 'glm'. - summary.cca: cleaner output. - wcmdscale: returns scaled scores for axes with negative eigenvalues. CHANGES IN VEGAN 1.15-3 - anosim, mantel, mrpp, protest, envfit: did not include the observed statistic among permutations. Functions adonis and permutest.cca did this correctly, but did not print results neatly. - anova.cca: name clash if data were indexed with 'i'. - capscale: fixed handling of negative eigenvalues with non-Euclidean distances. The total inertia is the sum of all eigenvalues so that negative eigenvalues are subtracted from the total. The total inertia of negative components and their rank (number) is given as 'Imaginary' component, and the negative eigenvalues are listed after unconstrained positive eigenvalues. The procedure is based on Gower, Linear Algebra and its Applications 67, 81-97 (1985). New argument 'sqrt.dist' takes square root of the internally calculated dissimilarities and avoids negative eigenvalues with some indices, such as vegan Jaccard and Bray-Curtis. The adjustment is corrected for indices with upper limit of one, and the reported eigenvalues and inertia components are reduced by a factor of sqrt(n-1) and are similar to those reported by 'cmdscale' or 'wcmdscale'. - eigenvals: a new function to extract eigenvalues from rda, cca, capscale, wcmdscale, prcomp, princomp, svd or eigen. If the result object contains squareroots of eigenvalues, they are squared. The summary method also finds proportions and cumulative proportions explained. Function summary.cca now uses this to display eigenvalues. - kendall.global: could get wrong counts of ties in large data sets. - meandist: new sister function to 'mrpp' that finds mean within-group and between-group dissimilarities. The summary function finds overall averages of these, and returns all three MRPP variants plus classification strength. The plot method draws a dendrogram based on the mean dissimilarity matrix, with leaves hanging to within-groups dissimilarity. The functions follow Sickle, J. Agric. Biol. Envir. Stat. 2, 370-388 (1997). - ordisurf: fits now linear or quadratic trend surfaces if 'knots' argument is set to 0, 1, or 2. - orditkplot: copes with NA and NaN scores. - ordixyplot: mixed x and y axes for biplot arrows and class centroids. Function failed in constrained ordination. - tsallis: gained argument 'hill' to find results analogous to Hill numbers in renyi(), or the species number equivalents of indices. - wcmdscale: removes now zero eigenvalues instead of the last eigenvalue. The bug was copied from cmdscale(), which still has the bug in R 2.9.0 (plus another that was not copied to wcmdscale). CHANGES IN VEGAN 1.15-2 - adonis: adds one to numerator and denominator of permutation tests, the default number of iterations was raised from 5 to 999, and the result object got a 'terms' component. Uses much less memory allowing analysis of larger problems. - anova.cca: anova(..., by = "axis") gained new keyword 'cutoff' to stop permutation tests after exceeding the given cut off level of significance. The second term of anova(..., by = "margin") used different random numbers than other terms. - beals: Completely rewritten by Miquel de Caceres. Knows now also the cross validated version of Beals smoothing and other choices described by De Caceres & Legendre, Oecologia 156, 657-669; 2008. - betadisper: handles missing values both in dissimilarities and grouping. - cca/rda: cleaner output of summary() in unconstrained models. - commsimulator: simulated result retains original row and column names. - contribdiv: new function for contribution diversity (Lu et al., Basic and Applied Ecology 8, 1-12; 2007). - decostand: gained dots in argument list, so that stressplot(metaMDS(x, dist = "gower", trymax = 40)) works. - dispindmorisita: new function for the Morisita index of dispersion. See Krebs, Ecological Methodology; 1999. - kendall.global and kendall.post: new functions for Kendall's coefficient of concordance. In ecology these can be used to identify significant species associations (Legendre, J Agric Biol Environm Stat 10, 226-245; 2005). - metaMDS: more robust with distances like Euclidean and Manhattan which have no upper limit. The stepacross works correctly for these, but gives a warning that its use may not be sensible. There is a better heuristics to avoid half-change scaling with these indices. The 'halfchange' argument is now honoured when given in metaMDS() call. - mrpp: returns within-class dissimilarities. Evaluates classification strength (Van Sickle, Biological and Environmental Statistics, 2, 370-388; 1997) if weight.type = 3 was used. - nestednodf: new nestedness function of overlap and decreasing fill (Almeida-Neto et al., Oikos 117, 1227-1239; 2008). Coding by Gustava Carvalho. - ordirgl: no more superfluous warnings with type = "t". - ordisurf: gained an argument 'bubble' to draw bubble plots, or vary point sizes according the value of the observed variable. The (invisible) return object now has an item 'grid' for the fitted value and grid values. - orditkplot: can produce TIFF graphics, if installed R has this capability. - procrustes: new text() function. - radfit: broken-stick model (function rad.null) failed with Gaussian and Gamma error families. The plot.radfit command gains argument log = "y", which allows using arithmetic scales or log-log scales where Zipf model is a straight line. - spantree: retains names and uses labels in plot. - datasets: Oribatid mites (data 'mite') got taxon names. - help files updated, and do not raise errors or warnings with the Rd parser version 2 in R 2.9.0. CHANGES IN VEGAN 1.15-1 - betadisper and related functions now work when the 'group' argument represents a single group/level. - decorana: 'text' function failed. - cca/rda/capscale: cleaner handling of results with missing (NULL) row or column names, also in plots. - cca/rda/capscale: new functions 'head' and 'tail' for 'summary' of cca results to show only some rows of the scores. - nestedness: method nesteddisc was found to be strongly dependent on the ordering of tied column (species) frequencies. A warning is now issued, and development version of vegan in http://vegan.r-forge.r-project.org/ has an experimental function that tries to find the optimal ordering. - permatfull: 'row'/'column' arguments were mixed. - radfit: all methods work consistently for communities of 0, 1 or 2 species. - wcmdscale: typo in the result object items corrected. CHANGES IN VEGAN 1.15-0 GENERAL - Peter Solymos joined the vegan development team. NEW FUNCTIONS - add1.cca and drop1.cca: functions to implement permutation tests with argument test = "permutation". Function drop1.cca uses anova.cca(..., by = "margin") and add1.cca implements a new type of analysis for single term additions. - ordilabel: new alternative for cluttered ordination plots. Text is written on opaque labels. The texts still cover each other, but at least the uppermost are readable, and the ordering can be controlled by 'priority' argument. Similar to 's.label' in ade4 package. - ordipointlabel: new alternative for cluttered ordination plots. Points are in fixed positions, but their text labels are located to avoid overplotting. The optimization uses simulated annealing of 'optim' function. Returns an "orditkplot" object so that the results can be edited with 'orditkplot'. Similar to 'pointLabel' function in maptools package. - permatfull, permatswap: functions to permute quantitative count data. - treedive: estimation of functional diversity defined as the height of the dendrogram of species properties (Petchey & Gaston, Ecology Letters 9, 741-758; 2006). With a helper function 'treeheight' to find the height of a 'hclust' dendrogram. - tsallis: Tsallis entropy family as an alternative to 'renyi'. - wcmdscale: weighted metric scaling a.k.a. weighted principal coordinates analysis; only uses row weights. NEW FEATURES AND FIXES - anova.cca: default permutation model changed from "direct" to "reduced" after Pierre Legendre demonstrated that model "reduced" was superior in term of Type I error. - anova.cca: handles smoothly models where constrained or unconstrained models are NULL and the tests are impossible (used to stop with error). - anova.cca(..., by = "margin") was handling wrongly 'x' in '~Condition(x) + x + z', or model formulae where same variables where used both as conditions and (aliased) constraints. - cca/rda/capscale: improved robustness in the formula interface. Partial handling of "cca" objects produced by ade4:::cca. - commsimulator: swap, trial swap and quasiswap written in C and *much* faster (100x in some tests). - oecosimu: accepts now a vector of statistics, and the user can give the name of the statistic in the function call. - ordiplot: did not use partial matching for "sites" and "species". - orditkplot: Improved user interface. Improved zooming into graphs. Imitates R plotting characters ('pch'). Label font family, size and font type can be vectors. - permuted.index2 and associated functions allow for restricted permutations of strata (i.e., restricted shuffling of blocks). - specaccum: removes missing (all zero) species which gave sd = NA with method = "exact". CHANGES IN VEGAN 1.13-2 - anova.cca (and permutest.cca) now calculate the residual df as (number of rows) - (rank of constraints and conditions) - 1 instead of using the rank of the residual ordination. With single response variable in 'rda' the degrees of freedom and F-values are now identical to those in 'lm' (linear model). However, the change does not influence significances (P-values), because these have been always found by permutation, and this change does not influence the order statistic used in permutations. - oecosimu: always estimates the original statistic with binary data even when the user supplies quantitative data. - orditkplot: no superfluous pointer lines when moving labels. - procrustes plot failed if two configurations were exactly identical. - rda (and capscale) use internal scaling constant so that the returned site and species scores with scalings 1, 2 or 3 together provide a biplot approximation of the original data. This scaling constant is calculated internally, but now its numerical value is returned as an attribute of 'scores.rda', and 'summary' displays its value. Vignette on "Design decisions and implementation" in vegan explains the calculation of the internal scaling constant. - summary of capscale identical to the summary of rda. - scores of rda and capscale with scaling = 0 really return the unmodified scores without the scaling constant. CHANGES IN VEGAN 1.13-1 GENERAL - Helene Wagner joined the vegan team. FIXES FOR HANDLING RANKS IN CONSTRAINED ORDINATION - cca, rda and capscale had only known one kind of rank: the rank of the ordination result (= number of axes). In fact there are two other types of ranks: the rank of constraints after removing conditions, and the rank of constraints + conditions, where conditions refer to terms "partialled out". This hit those that tried to use rda with single response variable instead of community matrix, and also some partial models were handled wrongly. The changes mainly concern cases where the rank of constraints is higher than the rank of the ordination (more constraints than ordination axes). The changes have visible effects in following support functions: - alias: no superfluous aliasing of terms, partial models aliased correctly. - anova: always uses rank of the constraints which also fixes anova(..., by = "terms") when single response variable was used. - calibrate.cca: identifies cases when the rank of constraints is higher than the rank of ordination and refuses to analyse these. - extractAIC: uses rank of constraints for degrees of freedom. - predict: predict(..., type = "lc", newdata = somedata) works in partial analysis. OTHER FIXES - adonis: faster and improved documentation. - intersetcor and inertcomp now check that input really is from constrained ordination instead of giving obscure error messages. - lines.spantree knows again graphical arguments such as 'col', 'lty'. - mite.xy: new data set on the spatial coordinates of sample sites of Oribatid mites. - mso: plot.mso replaced with msoplot, and plot function now displays the ordination scatter plot. Function msoplot collapses distances larger than half of the maximum distance into a single distance class. Printed result shows the variogram data. - ordicluster, ordiellipse, ordispider, orglspider, ordisurf, factorfit and vectorfit could fail with non-vegan ordination objects in R 2.7.0 whose weights.default function gave error if object had no weights (these worked in R 2.6.2 and earlier). - taxa2dist: has a "method" name for distances. CHANGES IN VEGAN 1.13-0 GENERAL - Based on development version 1.12-15 (revision 354 at http://vegan.r-forge.r-project.org) NEW FUNCTIONS - betadiver: beta diversity functions as reviewed by Patricia Koleff et al. (J. Anim. Ecol., 72, 367-382; 2003), with a plot function to produce triangular plots. - mso: Helene Wagner's multiscale ordination or spatial partitioning of cca and rda. This is taken from the Ecological Archives with minimal edition with the permission of Helene Wagner. - nestedtemp: matrix temperature method for oecosimu following Rodriguez-Girones & Santamaria (J. Biogeogr. 33, 924-935; 2006), but still without iterative optimization of row and column ordering. - TukeyHSD.betadisper: pairwise comparisons for betadisper. NEW FEATURES AND FIXES - adonis: returns both species and site scores. - betadisper: was not calculating distance to centroid correctly for observations where the imaginary distance to centroid was greater than the real distance. Now takes the absolute value of the combined distance before taking the square root. This is in-line with Marti Anderson's PERMDISP2. - BCI: example has spatial coordinates of plots. - biplot.rda: argument for arrow col. - capscale: accepts other distance functions than vegdist, and can use metaMDSdist for extended dissimilarites & "metaPCoA". - designdist: knows 2x2 contingency table notation with a, b, c, and d. - metaMDS: transforms data like with distances for species WA. - orditkplot: allows editing labels and zooming into plot. - permDisper: renamed to permutest.betadisper. - permutest: now a generic function, currently with methods 'cca' and 'permDisper'. - rarefy: accepts vectors of sample sizes. - rgl.isomap: dynamic rgl plots for isomap. - screeplot.cca etc: return invisibly xycoords. - specaccum: returns numbers of individuals with method = "rarefaction". - summary.cca: returns more statistics on "variance explained by axes". - zzz: vegan got startup message. CHANGES IN VEGAN VERSION 1.11-4 - A critical bug fix in adonis: there was a critical bug in adonis code, and inconsistent statistics were used in permutations so that P-values were grossly wrong in multi-variables models (single variable models were OK). In addition, df were wrong in deficit rank models, and unused factor levels were not dropped. All adonis users should upgrade and rerun their analyses. CHANGES IN VEGAN VERSION 1.11-3 GENERAL - Bug fixes from Rev. 305 on http://r-forge.r-project.org/. FIXES - anova.cca: number of permutations could exceed perm.max. - permuted.index2: updated to the version in devel branch. This means bugfixes in permCheck, numPerms and permuted.index2. It also adds allPerms to get all possible permutations when complete enumeration is feasible. In addition, there is now a function permuplot to graphically show the current permutation scheme. - plot.cca, plot.envfit and associates: automatic scaling of biplot arrows and fitted vectors was wrong when axes were reversed (like 'xlim = c(1,-1)') or the origin was shifted in plot.envfit (like 'at = c(1,1)'). Added internal function 'ordiArrowMul'. - plot.procrustes: failed if two configurations were identical. - varpart4: sum of squares was wrong if called directly instead of being called via varpart(). Reported by Guillaume Blanchet. CHANGES IN VEGAN VERSION 1.11-2 GENERAL - minor bug fixes and documentation updates from the devel trunk. - version 1.11-1 was made but never released to CRAN, and this is the first minor release of the 1.11 series. FIXES AND UPDATES - bstick.princomp: works now. - numPerms: was returning incorrect number of permutations when type = "strata" selected. - permuted.index2: was permuting samples within levels of strata as well as permuting the levels themselves if type = "strata" selected. - Documentation: diversity-vegan gains discussion on taxonomic diversity and using designdist for analysing beta diversity. Proof-reading and updates in diversity-vegan and FAQ-vegan. CHANGES IN VEGAN VERSION 1.11-0 GENERAL - Based on devel version 1.10-13 (rev. 205 at R-Forge). - Gavin Simpson joined the vegan team. - Suggests now 'tcltk' (for orditkplot). NEW FUNCTIONS - anova.cca gained a new support function to analyse marginal effects of individual terms (which are similar to Type III effects). Defined with argument 'by = "margin"'. - betadisper: new functions for Marti Anderson's analysis of homogeneity of multivariate dispersions. - biplot.rda: biplot function for PCA run with rda. Arrows are used instead of points. - CCorA: Canonical correlation analysis with a robust algorithm, with permutation test and plot function. - oecosimu: functions to analyse nestedness of communities (such as on islands or patches). Function oecosimu is a general wrapper, and commsimulator generates null-communities of various types (r00, r0, r1, r2, c0, swap, trial swap, backtracking, quasiswap). The nestedness can be analysed with functions like nestedchecker (number of checkerboard units), nestedn0 (measure N0), nesteddisc (discrepancy), but users can supply their own functions or even use some standard R functions such as chisq.test. - ordiresids: similar diagnostic plots as in plot.lm for constrained ordination: Residuals ~ Fitted, sqrt(abs(Residuals)) ~ Fitted, and qqmath(~ Residuals) using Lattice graphics. - orditkplot: interactive and editable plotting function. Function displays one set of points (species, sites) using both points and labels (text). The points are fixed, but labels can be dragged to better positions with mouse. The edited plots can be saved as EPS, exported to various graphical formats (EPS, PDF, PNG, JPEG, BMP, XFIG depending on the system) or dumped back to the R session for plotting and further processing. - ordixyplot: a set of functions for Lattice graphics of ordination results. Includes ordixyplot for 2D graphics, ordisplom for pairs plots, and ordicloud for 3D graphics. All can be subsetted and formatted in the usual Lattice way. - permuted.index2: New version of permuted.index() that now allows restricted permutations. Can produce permutations for time-series or line transects and for spatial grids. These can also be nested within 'strata'. permuted.series() and permuted.grid() are the relevant workhorse functions. Permutation options are set by new function permControl(). Currently used only in betadisper, but we plan to migrate vegan functions to permuted.index2() in the devel version, and will eventually replace the current permuted.index(). With support function permCheck for checking permutation schemes. NEW DATA SETS - sipoo: birds in the Sipoo archipelago (Finland, too close to Helsinki). NEW FEATURES AND FIXES - adonis: accepts any 'dist' object as input. - as.mlm.cca, as.mlm.rda use now correct names for variables in aliased models. The data were pivoted correctly in R, but the labels were not. - anova.cca assesses now P value as (hits+1)/(tries+1). - anova.cca: anova(..., by = "axis") failed when fitted model had terms like poly(x,2) or log(x). - bgdispersal uses now a more powerful statistic for the McNemar test (in terms of Type 1 error rate). - calibrate.cca does correct pivoting in aliased models. - capscale: negative scaling in plot works similarly as in rda. - decorana does not crash R when called with NULL row data, such as decorana(dune[FALSE,]). Method predict(..., type="sites") works correctly with downweighted analysis. - fitted.cca, fitted.rda gained argument type = "working" to get the fitted values and residuals used internally in calculation (in cca() these are weigthed and Chi-square standardized values). - isomap checks that input data are dissimilarities or can be changed into dissimilarities without warnings. - metaMDS gains argument wascores (defaults TRUE) to suppress calculation of species scores. - orditorp now handles "..." more cleanly. - scores.cca, scores.rda accept display = c("species", "sites"). - summary.prc honours argument 'axis'. - taxa2dist issues now a warning if called with 'check = FALSE' and some distances == 0, typically meaning that basal taxa (species) were not coded. - varpart failed if there were unused levels in factors. - wascores returns now NA for missing (all zero) species instead of failing. DOCUMENTS - new documents: FAQ, a simple introduction to ordination in vegan, a detailed explanation of diversity methods. New formatting. - Added these NEWS. OLDER VEGAN VERSIONS Version 1.8-8 (Oct 2, 2007) * Minor bugfix release for upcoming R-2.6.0. Based on the http://r-forge.r-project.org/projects/vegan/ revision 17 (= 1.8-7) with ported bug fix revisions (see below for revision numbers). * anova.cca: by = "term" failed in partial model. This was broken in 1.8-6 by introducing a test against deficit rank models (r47). * cascadeKM: Calinski index works now when the input data is a data.frame (r57:58). * flush.console: metaMDSiter and bioenv use now flush.console() so that Windows people also see the trace (r56). * ordispantree: made defunct, was deprecated in 1.8-1 (r38). * scores: handles now numeric data frames (r25). * summary.cca: failed if only one type of scores was requested (r50, 52). * taxondive: Fixed dim checking and matching species names in community data and taxonomic distance data (r21). * tweaks to pass --pedantic R CMD check, mainly in formatting source files, unused variables in source files and superfluous braces in help files (r39, r46, r62). * Updated FAQ-vegan.pdf to the current version at R-Forge. Version 1.8-7 (August 24, 2007) * Based on devel version 1.9-34. * DESCRIPTION: M. Henry H. Stevens (Miami University, Oxford, Ohio) joined the vegan team. * adonis: new function for nonparametric MANOVA that is appropriate for even extremely wide matrices sometimes associated with gene data and with diverse ecological communities. Author Hank Stevens. * taxondive: a new function for indices of taxonomic diversity and distinctness after Clarke & Warwick (Mar Ecol Prog Ser 216, 265--278, 2001 and other papers). With a helper function 'taxa2dist' to turn taxonomies into distances with an option for variable step length (Clarke & Warwick, Mar Ecol Prog Ser 184, 21--29, 1999), and a toy data set on the taxonomy of dune meadow species ('dune.taxon'). With a help, testing and pressure from Mike Cappo, James Cook Uni, Qld. * bgdispersal: previous version was partly garbled (by me), and P. Legendre provided a corrected one. * designdist: keeps 'dist' attributes even when the 'method' function drops them. Swapped the order to (terms, methods) in the default name. * metaMDS: issues a warning if data are disconnected. Passes extra arguments to other 'distfun' than 'vegdist' so that you can set 'terms' in 'designdist' etc (metaMDSdist). Can now do trymax=0 or skip random starts and give you enhanced 'isoMDS' result (metaMDSiter). * ordiplot: failed if number of species was equal to number of sites (and so did plot.metaMDS and plot.isomap using this). * plot.profile.fisherfit: corrected a harmless error detected by checkUsagePackage(). * predict.rda: removed some dead (but heavy) code from type = "response". Version 1.8-6 (May 9, 2007) * Based on devel version 1.9-23. * as.mlm.cca, as.mlm.rda: new functions to refit constrained ordination result (cca, rda, capscale) as a multiple response linear model. You can find influence statistics (Cook's distance, hat values) from the refitted model. You also can find t-values etc., but these have the same bias as in other software and should not be used. * bgdispersal: a new function for dispersal direction in biogeography (Legendre & Legendre 1998, section 13.3.4). Author Pierre Legendre. * designdist: a new function for defining your own dissimilarity index or for estimating beta diversity (Koleff et al., J. Ecol. 72, 367-382; 2003). * isomap: a new function for isometric feature mapping of Tenenbaum et al. (Science 290, 2319-2323; 2000). * screeplot, bstick: new functions to draw screeplots of vegan ordination results with brokenstick lines, and alternative screeplot functions for prcomp and princomp with brokenstick. Author Gavin L. Simpson. * swan: a new function for the degree of absence (Swan 1970, Ecology 51, 89-102). * anova.cca: now refuses to do 'by = "terms"' if the rank of constraints is higher than the rank of the community matrix. * bioenv: gains argument 'partial' to perform partial bioenv. * cca, rda, capscale: can now handle longer expression within 'Condition()' (ordiParseFormula). Used to drop observations with missing values in unused variables (ordiGetData). * goodness.cca, goodness.rda. 'statistic = "distance"' was wrongly implemented. Now refuses to find "distance" in constrained analysis: distances of constrained and unconstrained components do not add up to to distances in unconstrained ordination. * metaMDS (metaMDSdist): gains argument 'distfun' to use other dissimilarity functions than vegdist. * renyiaccum: used a variable that was not defined as an argument. Added support functions persp.renyiaccum and rgl.renyiaccum (Roeland Kindt). * stressplot: R2's renamed to 'non-metric fit' and 'linear fit'. * Doc: Corrected reference to Hurlbert in diversity (thanks to Ralph Grundel). Updated references (varpart, renyiaccum). Removed discussion on t-values in cca from vignettes, because as.mlm.cca now implements those. General cleanup and better utf-8 encoding. Version 1.8-5 (January 11, 2007) * Based on devel version 1.9-12. * no.shared (manifest in metaMDS): prints thousands of lines of debugging info that I forgot to deactive in release. Not fatal, but extremely annoying. * capscale: inertia name as "unknown" if the dissimilarity object does not have a "method" name. Suggested by Roeland Kindt. * DESCRIPTION: license is now explicitly GPL v2 (but not later). Version 1.8-4 (January 8, 2007) * Based on devel version 1.9-10. * cascadeKM: a new function to wrap kmeans and optimality criteria for classification (Sebastien Durand, Pierre Legendre & Marie Helene Ouellette). * renyiaccum: a new function for Renyi (and Hill) accumulation curves (Roeland Kindt). * bioenv: bioenv.formula uses now "na.action = NULL" in 'model.frame', and bioenv.default passes arguments to 'cor' which means that you can set NA treatment in 'cor' using argument "use". * cca, rda: added "..." to formula versions to satisfy tests in R-DEVEL. * cca, rda, capscale: used to fail if called within other functions. Now data always evaluated in the environment of formula using new internal function ordiGetData. * anova.cca: checks that the model has both residual and constrained components or stops with understandable error message (used to stop with incomprehensible error message). * print.summary.cca, print.summary.decorana: have now arguments 'head' and 'tail' to print only a part of species and site scores. Suggested by Gavin Simpson. * metaMDS: checks now that the input data ('comm') is not a 'dist' object (like many users have had). * ordisurf: Does not depend on package 'akima' any longer, but directly finds fitted values in a regular grid using 'predict.gam'. Added pnpoly.c to find which of these values are within the convex hull defined by data. Results also look neater with sparse data now. Added argument 'labcex' passed to 'contour' for changing size of contour labels. Setting 'labcex = 0' will suppress drawing labels (by setting drawlabels = FALSE in 'contour()'). * orditorp: handles now vector arguments of 'col', 'pcol', 'cex', and 'pch'. * rad.zipfbrot: less likely to overflow to NA coefficients during iteration. * renyi: added a plot function, and documented together with renyiaccum() instead of diversity(). * scores.default: Knows now about ade4 objects. Primarily looks for scores scaled by eigenvalues both for sites and species. * specaccum: Added new conditioned method of Colwell et al. with estimated sd based on extrapolated richness (Roeland Kindt). * vegdist.c: More informative warnings with 'method' name (useful with rankindex). * DESCRIPTION: listed 'require()d' packages in the "Suggests:" field to satisfy more anal tests in R-DEVEL. Mention diversity analysis in the "Description:". Version 1.8-3 (Sept 29, 2006) * Based on devel version 1.9-2. * varespec.rda, varechem.rda: saved in binary form, because old ascii form gave warning in R-2.4.0-rc. * vegdist: added Chao index (of Jaccard type) that should take into account missing pairs of species. Checks that Binomial index is non-negative. Identical sites could have dissimilarity of magnitude 1e-17 after some standardizations, but now values <1e-15 are zapped to zero. * estimateR: uses now standard unbiased formulation of Chao. * renyi: should work now (really!). * metaMDS: with zero = "add", zeros now replaced with min(dis[dis>0])/2 (used to be 1E-4) (metaMDSdist). Sets number of tries also when this was not set previously (metaMDSiter) Version 1.8-2 (June 13, 2006) * version 1.8-1 failed test in Windows because of a wrong encoding name. Explicit \enc added for non-ascii words. Kurt Hornik and Uwe Ligges diagnosed this and led me to see the light. * similar to devel version 1.7-97. Version 1.8-1 (June 12, 2006) * Based on devel version 1.7-96. * Pierre Legendre joined the vegan team. * beals: a new function for Beals smoothing. * bioenv: added 'trace' argument. * cca/rda/capscale: accept several 'Condition' elements in the formula. * capscale: capscale(y ~ ., data=...) or expansion of "." on the rhs works now. Documentation recognizes now db-RDA as the real mother method. * scores.cca, summary.cca etc: rewrite so that is cleaner and easier to maintain. User visible changes are scaling by species standard deviation (negative scaling) for 'rda', scaling=0 (no scaling) for all methods and slightly changed output and improved user control in summary. These scalings actually were documented in 1.6-10, although I dropped them just before the release. predict.cca, predict.rda: work now with 'newdata' even when not called with formula. * anova.cca: new argument 'by' for tests of single terms or axes: with by = "terms" performs individual test for constraints, and with by = "axis" a separate sequential test for each axis. New argument 'first' to analyse only the first axis instead of all constrained variation. * intersetcor: new function for the interset correlation or the (weighted) correlation between individual constraints (contrasts) and invidual axes in cca/rda/capscale. (Not recommended.) * decostand: does not automatically convert matrix to a data.frame. NA handling more consistent now (thanks to Tyler Smith for diagnosis). Adds attribute 'decostand' giving the "method". * linestack: now really uses median as the midpoint with the odd number of cases, and does not give superfluous warnings with three or less items. New argument 'labels' to replace the default text in plot. The old argument 'label' renamed to 'side'. However, the function still works with the old syntax, but gives a warning if the old argument 'label' is used for 'side'. Returns invisibly the shifted positions of labels. * metaMDS: 'postMDS' sets now attributes similarly when called independently or within 'metaMDS'. 'metaMDS' forwards arguments to 'postMDS' except 'halfchange'. Change of phrasing in 'print'. Added handling of zero dissimilarities into 'metaMDSdist': either "fail" or "add" 1E-4 into zeros. * mrpp: new function for the multiresponse permutation procedure (MRPP). Code by Henry Stevens (Miami Univ, Oxford, Ohio). * ordiarrows: draws arrowhead only in the last segment. New argument 'startmark' for marking the starting point of the arrow. * ordisurf: new arguments 'main' for the title and 'nlevels' and 'levels' for the number of contour or their values. * orditorp: arguments for text colour and text character expansion changed to standard 'col' and 'cex' from previous 'tcol' and 'tcex'. * procrustes: 'summary' prints now rotation matrix, translation and scale, and honours 'digits'. * prc: new functions for Principal Response Curves (PRC) of van den Brink and ter Braak (Envir. Toxicol. Chem, 18, 138-148; 1999). This is a special rda() model with dedicated summary and plot functions. New data set 'pyrifos' to demonstrate 'prc'. * radfit: added brokenstick as a null model (rad.null), removed rad.veil (as it was a bad idea originally), corrected minor bugs in rad.preempt (which did not fail gracefully). Line colours start from the point colour in plot.radfit.frame. 'print' uses "g" format for coefficients and adds 'digits' argument. Added 'summary.radfit.frame' that simply prints each model. * rankindex: uses now cluster:::daisy when 'grad' includes factors. * spantree: now a method function with 'plot', 'lines' and 'cophenetic' methods. 'lines' replaces 'ordispantree'. The plot has a weird, new way of finding configuration for a spanning tree from cophenetic distances (unpublished). Documented separately. * specaccum: 'plot' honours now 'ylim'. * specpool: Chao richness was wrongly defined, but now uses the biased formula (error introduced in 1.6-5, correct earlier). Failed with zero species or if there were no species that occurred exactly one in the 'pool' (thanks to Emmanuel Castella, Geneve CH, for the bug report). * varpart: new functions for unbiased partitioning of variation by two to four explanatory tables in RDA or linear regression. The author of these functions is Pierre Legendre & co (Univ Montreal). New data sets 'mite', 'mite.env' and 'mite.pcnm' to demonstrate the functions. * vegandocs: new function to display *all* pdf documentation and ChangeLog. This really should be in base R -- this is a kluge to fill the hole. * vegemite: added argument to 'select' a subset of sites. Drops missing species from the table. Prints number of species and number of sites and the used cover scale at the end of the table. Passes arguments (i.e., 'maxabund') to coverscale(). * coverscale: added argument 'maxabund' to 'scale = "log"'. Returns the name of the cover scale as an attribute for vegemite() to print. * vegdist: now first checks input and then transforms (if needed). Thanks to Tyler Smith, * Internal changes: permuted.index acceptes NULL strata as an alternative to missing strata. ordispantreee deprecated. spider.cca removed. * Documentation: general cleanup in help files. New chapter on t-values in cca/rda/capscale in vegan-FAQ. New pdf document on partioning with varpart by Pierre Legendre & co. Non-latin characters now use UTF-8 in documentation. R manual says that you should not use non-latin characters in help files, but that was written by Englishmen. However, this seems to cause distress to some users of a US West Coast OS (Windows), but OK with mainstream OS's (Linux, MacOS). . Version 1.6-10 (September 26, 2005) * Based on devel version 1.7-77. Checked with R 2.1.1 (stable) and R 2.2.0 (alpha). * rda: negative scalings explicitly ignored and treated as corresponding positive values. Function summary.rda used to fail with NA centroids. * permutest.cca & anova.cca: permutation of 'cca' result now re-weights environmental data properly with permuted community weights (this breaks compliance with popular proprietary software). New default method 'direct' that always permutes the data instead of residuals. Now clearly faster basic routines, but re-weighting in 'cca' is costly, and permutations may even be slower than earlier in small data sets. The permutest.cca returns more data: constrained and residual total inertia, degrees of freedom in the input model, and .Random.seed used in iterations. Thanks to Pierre Legendre for pushing me to make this faster. * ordination plot functions: obey now xlim and ylim. * ordination text and points functions: a new argument 'select' that can be used to select a subset of items, and a new argument 'labels' for text used instead of the default row names. * points.cca, text.cca: biplot arrows will be scaled automatically to fit the current graph if 'arrow.mul' is not given. The new behaviour is similar to the default in plot.cca and in plot.envfit. * orditorp: a new "ordination text or points" function to add text or points to an existing plot: adds text if this can be done without overwriting other text labels, and points otherwise. * linestack: a new function to draw labelled one-dimensional diagrams without overwriting the labels (a primitive one, and could easily be improved: submissions are welcome). * ordirgl, orgltext: adapted to changes in rgl package version 0.65. Workaround for older rgl packages, too. * decostand: Added Hellinger transformation. Empty columns and rows become now 0 instead of NaN in most methods, except when the input data contains negative values. Warns on input with negative entries or on output containing NaN. Has now argument 'range.global' for method 'range' based on the code supplied by Tyler Smith. * plot.radfit: puts now legend "topright" in R >= 2.1.0 (which has this keyword). * read.cep: issues a warning if vegan was compiled with gfortran, which has a bug that may corrupt the result. The bug concerns multiline input with T format modifier, and it was corrected in http://gcc.gnu.org/ml/gcc-patches/2005-09/msg00126.html, but still bugs most released versions of gcc. * vegdist: new indices 'raup' and 'binomial'. Method 'raup' implements probabilistic Raup-Crick index and is based on the code submitted by Michael Bedward. Method 'binomial' implements Millar's index, officially published as "Binomial deviance as a dissimilarity measure" (the C code has been in vegan for about two years, but now I tell about it and add the public interface). Method 'mountford' will give NA for any comparison involving an empty site. Warns about empty sites or negative entries with all methods except 'euclidean' and 'manhattan'. * Documentation: added documentation of the cca/rda/capscale result object. Dontruns used more neatly. Version 1.6-9 (April 22, 2005) * Maintenance release: 1.6-8 failed in R 2.1.0 patched and R 2.2.0 devel (works in R 2.1.0 release) due to problems in as.preston. Based on devel version 1.7-62. * as.fisher, as.preston: used table() in a way that failed in R 2.1.0 patched * calibrate.cca: new function to predict or calibrate or bioindicate the values of environmental constraints from community composition (ordination). * decostand: new argument na.rm (defaults FALSE) for ignoring missing values in row, column or matrix standardizations. * vegdist: new argument na.rm (defaults FALSE) for pairwise deletion of missing vaues in dissimilarity calculation. Version 1.6-8 (April 18, 2005) * Based on devel version 1.7-59. Adapted to R 2.1.0 beta. * DESCRIPTION: gives due credit to Roeland Kindt and Bob O'Hara as co-authors. * documentation: updates in capscale, vegdist. vegan-FAQ adapted to changes in Sweave in R 2.1.0. * several methods assumed that input is count data, but silently accepted floating point numbers and gave wrong results. Now they stop with error with non-integer input: fisherfit, prestonfit, prestondistr, rarefy, fisher.alpha, estimateR. * bioenv: uses now 'cor' instead of 'cor.test', and does not give so many superfluous warnings and is marginally faster. Changed printed output, so that gives 'call' instead of names of community and environmental data, since bioenv.formula could not handle these cleanly. * capscale: has now argument 'add' to use an additive constant to all dissimilarities so that all computed eigenvalues are non-negative. This is an argument of underlying 'cmdscale' function, which implements the "Correction method 2" of Legendre & Legendre (1998), p. 434. * decorana: checks now that there are no negative data entries. * dune: cleaner site names. * envfit: 'plot' now automatically scales arrows similarly as 'plot.cca' if 'arrow.mul' is not specified and arrows are added to an old plot. Has now a 'scores' function. * goodness.cca, predict.cca: documented separately. * goodness.metaMDS: new function to assess pointwise goodness of fit in metaMDS or isoMDS. * humpfit: user can now give starting values of parameters. 'summary.humpfit' returns 'cov.unscaled' so that users can apply 'ellipse' function of 'ellipse' package to display approximate confidence ellipses for pairs of parameters (with Normal assumptions). * make.cepnames: No longer duplicates one component names, but 'abbreviate's them to eight characters. * metaMDS: Split to independent metaunits 'metaMDSdist' and 'metaMDSiter'. New function 'metaMDSredist' tries to reconstruct dissimilarity matrices and transformations. 'postMDS' skips halfchange scaling with too few points (with a warning) instead of stopping with an error. Prints now info about 'postMDS' operations. New 'scores' function. Improved 'plot' function with 'display' argument and labelling of axes. Argument 'shrink' to undo expansion of species scores in plot or scores functions. Workaround for a future bug in 'isoMDS' which drops names of points in R 2.1.0. Updates number of 'tries' with 'previous.best'. * ordiplot: has now 'display' argument, so that only species or sites can be plotted. * ordiplot3d: a new function for 3D static ordination diagrams. * ordirgl: new function for dynamic 3D graphics of ordination results. With support functions orglpoints, orgltext, orglsegments and orglspider to add graphical items to dynamic plots. Needs 'rgl' package. * predict.cca, predict.rda: type = "wa" with 'newdata' works now even when some species were removed from the original fit because they were all-zero (missing). Default now to 'model = "CA"' in unconstrained analysis without "CCA" component. * predict.decorana: a new function for 'decorana' results. Similar to 'predict.cca' (but refuses to give impossible results). * procrustes: obeys now 'choices' even when input is a matrix. Plots now projections of rotated axes. New argument 'scores' so that can handle other than "site" scores. * protest: passes now arguments to 'scores' so that now can handle other than "site" scores on more than two dimensions. * rda: handles now species with constant values (typically missing or all zeros). * spenvcor: new function to find the "species -- environment correlation" in contrained ordination (cca, rda, capscale). * stressplot: a new function to plot Shepard diagram for 'metaMDS' or 'isoMDS'. * summary.cca/summary.rda: print now call. * vegemite: can now 'use' 'dendrogram' objects. Version 1.6-7 (Jan 24, 2005) * Based on devel version 1.7-42. * plot.envfit did not plot vectors. Thanks to Roeland Kindt and Ron E. VanNimwegen for bug reports and fixes. * ordisurf obeys now keyword 'display', and '...' will transfer arguments to 'scores'. * ordisegments: obeys now keyword 'display'. * ordigrid: works now. * ordihull, ordiarrows, ordisegments, ordispider, ordiellipse: have a new keyword 'show.groups' to show only specified groups. With the help of this argument it is possible to use different colours and linetypes for each group. Further, it makes possible to plot results of logical comparisons (such as A1 > 4) by setting show.groups = T. Two user requests. * new diagnostic and helper functions for 'cca', 'rda' and 'capscale': 'goodness' to estimate the proportion of inertia accounted for or residuals for sites or species; 'inertcomp' to decompose species and site inertia for conditioned, contrained and residual componets; 'vif.cca' to estimate the variance inflation factors for constraints and conditions; 'fitted' and 'residuals' to approximate data by ordination scores; 'predict' to approximate data or find site or species scores, possibly with 'newdata'; 'coef' to find the regression coefficients. 'alias.cca' is now similar to 'alias.lm' (simplified version of the latter). Version 1.6-6 (Jan 7, 2005) * Based on version 1.7-34, but without still experimental functions predict, fitted, vif & goodness for cca and rda objects. * mantel: implemented partial mantel test (function 'mantel.partial'). Both 'mantel' and 'mantel.partial' should be marginally faster and not give so many superfluous warnings. * plot.envfit: should be more reliable now. A new keyword 'at' to position the bunch of arrows in other places than the origin. Thanks to Roeland Kindt for fixes. * rankindex: Default correlation now "spearman" since the older default ("kendall") was far too slow in large data sets. Should not give so many superfluous warnings. * summary.rda: Site scores were wrong with 'scaling = 3'. Influences 'plot' and 'scores' commands for 'rda' and 'capscale' results with 'scaling = 3'. * vegdist: Issues a warning if 'method = "morisita"' is used with non-integer data. Version 1.6-5 (Oct 12, 2004) * Based on version 1.7-27. Checked with R-1.9.1 (Linux, MacOS X) and R-2.0.0 (Linux, patched version in Windows XP). Passed other tests, but some examples in 'humpfit' failed in Windows XP, and are not run on that platfrom. General cleanup in documentation. Does not 'require(mva)' any longer. * anosim: corrected the equation in docs (function was correct). Thanks to Yong Cao for notifying this. * bioenv.formula: finds now variables from attach'ed data.frames and 'data' need not be specified. * capscale & deviance.rda: capscale was modified so that its result could be handled with step (added a terms component). Function deviance.capscale was deleted so that deviance.rda will be used. A literature reference to AIC in CCA/RDA was added to the documentation. * cca/rda/capscale: Small eigenvalues are made to zero and rank reduced accordingly. Most often influences 'capscale'. * cca/rda/capscale: Now alias constraints that are collinear with other constraints or conditions in partial analysis. New function 'alias.cca' to print aliased contrasts. NB this does not influence the proper ordination results, but only to the selection of biplot scores and centroids displayed. 'summary' no longer gives a redundant warning. * decorana: removes empty species with a warning instead of stopping with error. Still error with empty sites. The behaviour is similar to 'cca'. * envfit (vectorfit, factorfit): Has now a formula interface. Bottlenecks in permutation changed now into C functions. Much faster, in particular 'factorfit' which was 25 times faster in my tests. plot.envfit could drop names (dimensions). Now honours 'scaling' argument in cca/rda/capscale (used to 'scaling = 2' always). * envfit, ordisurf: have now weights parameter 'w'. Weights are used for the results of 'cca' and 'decorana' as default, or they can be supplied by the user. In this way, envfit gives equal results to biplot scores and centroids in 'cca', and ordisurf is consistent with envfit. Both can now access 'lc' scores of 'cca' etc. * estimateR: Abundance-based estimators of extrapolated richness, written by Bob O'Hara . * humpfit: Asesses now the dispersion parameter in non-Poisson models (summary.humpfit). Added a profile method that inherits from profile.glm, so that you can use plot.profile.glm, pairs.profile.glm and confint.profile.glm of MASS for displaying profile and finding the confidence intervals from the profile likelihood. * fisherfit: prints now standard error of the estimate. Added 'profile' and 'confint' methods. * metaMDS: A new function to collect all Peter Minchin's recommendations to run nonmetric multidimensional scaling: (1) adequate data transformation with Wisconsin double and sqrt if needed, (2) use of adequate dissimilarity measure, (3) possible stepacross if needed (this Minchin didn't have), (4) run NMDS with several random starts and stop after finding two similar solutions, (5) scale results with postMDS, and (6) add species scores with wascores. Function has print and plot methods. Function scores.default changed to understand metaMDS. * specpool: Chao is now based on unbiased equation. Standard errors now estimated for Chao, 1st-order jackknife and bootstrap richness, but SE of 2nd-order jackknife still missing. * vegdist: an option for binary indices, since some users believed these are not in vegan, although you can get them with 'decostand'. Version 1.6-4 (June 10, 2004) * Based on 1.7-12. * anova.cca: Changed defaults to beta=0.01 and perm.max=10000. * bioenv: A new function implementing the BIO-ENV procedure of Clarke & Ainsworth (Mar. Ecol. Prog. Ser. 92, 205-219; 1993). The function finds the subset of scaled environmental variables with maximum (rank) correlation with community data. * cca: added ter Braak scaling, a.k.a. Hill scaling, with negative values of `scaling'. This scaling should approximate Hill's non-linear rescaling of `decorana', but it the scaling is linear and does not rescale. The scaling is very simple: the results from corresponding positive scaling are multipiled with sqrt(1/(1-lambda)). * plot.cca: Better heuristics used for the length of biplot arrows, and they are now longer in general. Axes are drawn for biplot arrows also with `text.cca' and `points.cca' functions. * deviance.cca and extractAIC.cca: auxilliary functions which allow automatic model building with `step' or `stepAIC' (MASS) functions in cca and rda. Unfortunately, cca and rda do not have deviance or AIC, and these functions are certainly wrong and dangerous. However, with continuous candidate variables they select the variables in the same order as Canoco. * humpfit: A new family of functions to fit the no-interaction model (Oksanen, J., J. Ecol. 84, 293-295; 1996) to species richness -- biomass data. * vegdist: corrected a bug in Gower index -- range standardization was made to sites, but it should be done to species. Thanks to Brett Melbourne for the bug report. Version 1.6-3 (Mar 22, 2004) * Still based on 1.7-3, but ported some changes from version 1.7-7 (envfit, procrustes). This version was produced to prepare for incompatible changes in coming R-1.9.0. * vegan-FAQ: Does not show the vegan and R versions the documentations were built, because of stupid incompatible change in R-1.9.0 of the future. package.description() function was unnecessarily replaced with packageDescription, and to accomodate recent, present and future versions of R seemed to be too much hassle. * plot.envfit: Added option 'p.max' to display only environmental variables assessed to have P values less or equal to the given limit. * plot.procrustes: added option kind = 0 to draw only axes and functions points.procrustes and lines.procrustes to add points and line segments or arrows to the plot. Version 1.6-2: Based on devel version 1.7-3. * renyi: should work now (again?). * prestondistr: The truncation level was badly chosen. Now default level is set to -1, or log2(-1) = 0.5 which might be the left limit of the first octave. This is now a parameter, leaving the choice as the responsibility of the user. * cca.default: Removes missing species and issues a warning instead of stopping with error. Version 1.6-1: Based on devel version 1.7-1. * Minor maintanenance release to satisfy tests in R-devel. There was a buglet in ordisegments that caused a warning. I had introduced a trick to handle printCoefmat before it was invented to replace print.coefmat, but this failed in R-devel. * Vignettes included in this release. These were only in devel versions of my web pages previously. Version 1.6-0 (Fisher) * Based on devel version 1.5-58. Passes checks with R-1.8.0 and R-1.7.0 and compiles into a Windows binary. Many functions were contributed by Roeland Kindt (Nairobi, Kenya). * BCI: A new data set on tree counts on 1-ha plots in the Barro Colorado Island. Thanks to Roeland Kindt and Richard S. Condit. * capscale: A new function for [partial] constrained analysis of principal coordinates (CAP). * cca, rda: Can now handle cases where the number of constraints is higher than the number of species. * cca, decorana: Find now if data have empty rows or columns. * decostand: Added Chi-square transformation. * distconnected: A new function to find if vegetation data are disconnected below given threshold dissimilarity level. Utility function no.shared gives a logical dissimilarity matrix with values TRUE for cases with no shared species. * fisher.alpha: Should work with large sample sizes now (bug report thanks to Ariel Bergamini). * fisherfit, prestonfit, prestondistr: New functions to fit Fisher's logarithmic series and Preston's log-normal model. * make.cepnames: New utility function to change Latin names into 4+4 character CEP names. * ordicluster, ordispantree: New functions in the ordihull family to overlay a cluster dendrogram or a spanning tree onto an ordination. Weights are now really used with cca and decorana plots. * radfit: New function to fit Ranked Abundance Dominance or Dominance/ Diversity models with maximum likelihood: Pre-emption, log-normal, veiled log-normal, Zipf and Zipf--Mandelbrot models. * rankindex: Can now use stepacross and new dissimilarity indices of vegdist. * rarefy: Can now optionally find SE of rarefied richness. * renyi: A new function to find Rnyi diversities or Hill numbers with any scale (thanks to Roeland Kindt). * scores.ordiplot: should be more robust now. * spantree: A new function to find a minimum spanning tree using only dissimilarities below a threshold or disregarding NA dissimilarities. * specaccum: A new function for species accumulation curves. Thanks to Roeland Kindt. * specnumber: A very simple utility function to find species richness. * specpool: New function for extrapolated species richness in a species pool, or for estimating the number of unseen species. * stepacross: New function for estimation of dissimilarities between sites that have no shared species. Implements both flexible shortest paths and their approximation known as extended dissimilarities. * vegdist: New dissimilarity indices Jaccard (finally), Morisita, Horn--Morisita and Mountford. Version 1.4-4 * Based on devel version 1.5-35. * decorana: Finds now eigenvalues from the final solution as ratio of biased weighted variances of site and species scores. The values returned by the legacy Fortran function are called ``decorana values''. * downweight: passes the downweighting fraction as an attribute, and decorana catches and prints the fraction. * wascores: Uses now biased variances for expading WAs and returns the shrinkage factors as an attribute "shrinkage". Shrinkage factors are equal to eigenvalues in CCA when only this one variable is used as constraint. Function `eigengrad' returns only these eigenvalues. * rda summary/plot bugfix: Failed with non-default scaling (1 or 3) when there were no factor constraints. Corrected a statement giving a harmless warning in plot.cca. * ordiplot knows now option type = "text". New simpleminded functions points.ordiplot and text.ordiplot for adding items in an ordiplot graph. * ordiarrows, ordisegments could drop dimensions (when will I learn!) and fail if only one arrow or one segment should be drawn. One argument was missing in a `gl' command in `ordigrid'. Version 1.4-3 (Luova) * Based on devel version 1.5-30 * `cca' and `rda' use canonical expansion of the formula and return the `terms' component. Functions like `terms', `formula' and `update' magically started to work with cca and rda (and eight lines of code would allow `step' and `stepAIC' to work magically in model building... but it's so much magic that I don't trust it). Some of the allowed things are now `mod <- cca(dune ~ . - Use, dune.env)' (all variables but `Use' in dune.env), and `update(mod, . ~ . - Manure)' (remove `Manure' from the previous). * `cca' and `rda' find centroids of factor levels with factor constraints (only with formula interface). These can be accessed with `display="cn"' in `scores', `summary' and `plot'. If `display="cn"' is requested in `plot', biplot arrows are still drawn unless there is a class centroid with the same name: continuous variables are still shown as arrows and ordered factors both as arrows as centroids. * Enhanced user control of many ordination plots. Some accept more graphical parameters (`ordiplot', `plot.procrustes'). New functions `points.cca' and `text.cca' to add these items into CCA/RDA plots (documented separately). * `identify.ordiplot' knows more alternatives, among them `plot.procrustes'. This was helped with new, very generic `scores.ordiplot'. * New functions to add graphical items in ordination diagrams: `ordihull' draws convex hulls for groups, `ordiarrows' draws arrows, `ordisegments' segments, `ordigrid' combines points in to a grid, `ordispider' combines points to their (weighted) centroids or WA scores to the corresponding LC score in cca/rda, `ordiellipse' draws dispersion or confidence ellipses for points. All these take a groups argument for selecting subsets of points. `ordispider' obsoletes `spider.cca' (introduced in the previous release). * Implemented simple ``deshrinking'' of weighted averages in `wascores'. * A new diversity function `fisher.alpha' that estimates the diversity as the alpha parameter of Fisher's log-series. Thanks to Bob O'Hara for the main code. * `summary.decorana' now in canonical form so that printing is done by `print.summary.decorana' and user can intercept and catch the result. Several users had been surprised of the earlier non-canonical behaviour. `summary' knows again the prior weights used in downweighting of rare species (these evaporated in 1.4-0). * rda summary/scores/plot bugfix: Scaling of site scores was wrong with scaling alternatives 1 and 3. * envfit (vectorfit, factorfit) bug fixes: Can now handle single vectors (labelling, permutation). Recognize now `choices' so that the user can select ordination axes. * Checked with released R-1.7.0. Version 1.4-2 Based on devel version 1.5-18 * New functions and data sets: * dune: A new data set -- the classic Dune Meadow data with the environmental data. * ordiplot, identify.ordiplot: New functions to plot "any" ordination result and identify plotted points. Intended to provide similar functionality as `plot', `plotid' and `specid' functions in `labdsv' without name clashes. Functions `plot.cca' and `plot.decorana' return (invisibly) `ordiplot' objects as well, and these can be used by `identify' to label species and sites. * rda: Redundancy Analysis, or optionally, yet another PCA. This is a spin-off from cca(), and it is documented together with cca. The only new functions are rda, rda.default, rda.formula and summary.rda. Otherwise rda uses cca methods which were changed to be aware of rda. * read.cep: A function to read Cornell Ecology Package or CEP formatted files into R. This has been in devel versions since 1.1-1, but it never made to the releases, since this worked only in Linux, but crashed R in Windows. It seemed to work in R-1.6.1 with gcc 3.2 (MinGW) in Windows, so it is included. Treat with caution. * spider.cca: A tiny function that joins each WA score to the corresponding LC score in cca/rda plots. Minor changes: * Checked with R-1.7.0 (unstable devel version, snapshot 2003-02-05) and corrected as needed. * Added symmetric scaling (=3) to alternitves in cca and rda. * Minor improvements and bug fixes in vegemite. Version 1.4-1 (Logan) Based on devel version 1.5-10. New features: * Permutation tests added to envfit (vectorfit, factorfit) and procrustes (called protest). * All permutation tests take now argument strata: If given, permutations made only within strats. Concerns anosim, anova.cca (permutest.cca), mantel, envfit (factorfit, envfit) and protest (in procrustes). * fitted.procrustes(): A new function. * rarefy(): A new function for rarefaction species richness. Other changes: * cca.default(): Handles now NULL matrices X and Z: skips them. * cca.formula(): Knows now cca(X ~ 1) and permforms unconstrained CA, and cca(X ~ ., data) and perfors CCA using all variables in `data' as constraints. Has now na.action=na.fail so that cca crashes more informatively (used to crash mysteriously). A more graceful na.action may come. Assignment "=" corrected to the true blue "<-" (used to crash in old R). * envfit (factorfit, vectorfit): Use `scores' now. Various bugfixes and should work now with single factors or vectors. * plot.envfit(): Options `choices' works now like documented. * ordisurf(): A new name to surf() to avoid name clash with labdsv. * procrustes(): added option `symmetric' for symmetric rotation and goodness of fit statistic. * plot.procrustes(): Keyword `axes' changed to `choices' to be consistent with other functions. * vegemite(): A new name to vegetab. The name was chosen because the output is so compact (and to avoid confusion with function vegtab in labdsv). Function checks now that the cover codes fit in one column and splits the output if it does not fit into used page width. Version 1.4-0 Based on devel version 1.3-19. New functions: * `anosim': Analysis of Similarities. * `cca': [Partial] [Constrained] Correspondence Analysis. This is an alternative to Dray's `CAIV' (package `CoCoAn'). Differences include formula interface, WA scores in addition to LC scores, partial CCA, residual CA after constraints, algorithm based on svd (and much faster), more standard support functions (`plot', `summary', `print'). * `anova.cca' and `permutest.cca': Permutation tests for `cca'. * `envfit': A new wrapper function which calls either `vectorfit' or new `factorfit' function, and `plot.envfit' for easier display of results in graphs. * `mantel': Mantel test for two dissimilarity matrices. * `scores': A generic function to extract scores from `cca', `decorana' or even from some common ordination methods in R. * `surf': Surface fitting for ordination, intended as an alternative to `vectorfit'. * `vegetab': Prints a compact, ordered vegetation table, together with `coverscale' to transform data into compact format. Other changes: * `downweight': directly callable instead of being embedded in `decorana'. Now it can be used with other downweighting thresholds or with other CA's than `decorana', e.g., `cca', `ca', `CAIV'. * `plot.decorana': new keyword `type', removed keyword `tol'. * `vectorfit': centres now ordination before fitting, so it will work with other ordinations than MDS. * Mainly user invisible changes in `plot.decorana', `plot.procrustes', `postMDS', `print.summary.procrustes', `vectorfit', `procrustes'. One of the main changes was that `eqscplot' of `MASS' library was replaced with `plot(..., asp=1)' of standard R (but this is not S-plus compliant). * Edited help files. More examples run from help files. * Tried to improve LabDSV compliance, see http://labdsv.nr.usu.edu/. * Checked with R-1.5.0. However, `log' in diversity not changed into `logb' (yet), although base is specified, because `logb' won't work in R pre-1.5.0. Version 1.2-1 * Checked with R-1.4-0 (frozen snapshot) tools: Documentation and method consistency corrected (summary.decorana.R, decorana.Rd), and file permissions changed. * decorana.Rd: removed dependence on package `multiv' in the example, since it is not a `recommended package' -- replaced with `decorana(..., ira=1)'. Version 1.2-0 Based on experimental version 1.1-6. Doesn't include read.cep() of the experimental version, because the function is certainly unportable to all platforms (works on Red Hat Linux 7.1, but perhaps nowhere else). Major new feature: * decorana(): R port of Mark Hill's DECORANA for Detrended correspondence analysis, with methods print(), summary() and plot(). Minor changes: * postMDS(): finds isoMDS scores and doesn't destroy list structure. * vectorfit: finds isoMDS scores and decorana row scores (which are uncentred, though). * Proof reading in documentation. Version 1.0-3 *`plot.procrustes': selection of axes plotted, improved scaling in graphics, control of axis labels. * `postMDS': added plot to demonstrate half-change scaling. * `procrustes': target can now have lower dimensionality than rotated matrix. Version 1.0-2 * Fixed bugs in documentation. * `plot.procrustes': Fixed passing `...' to graphics functions. Version 1.0-1 * The first public version. vegan/src/0000755000176200001440000000000013232070306012135 5ustar liggesusersvegan/src/nestedness.c0000644000176200001440000003055213232070307014462 0ustar liggesusers#include #include #include /* check user interrupts */ /* Utility functions */ /* Random integer 0..imax */ #define IRAND(imax) (int) (((double) (imax + 1)) * unif_rand()) /* 2 different random integers */ void i2rand(int *vec, int imax) { vec[0] = IRAND(imax); do { vec[1] = IRAND(imax); } while (vec[1] == vec[0]); } /* * Quasiswap or sum-of-squares reducing swap of Miklos & Podani. A quasiswap * step takes a random 2x2 submatrix and adds (-1,+1,+1,-1). If the submatrix * was (1,0,0,1) it is swapped to (0,1,1,0), but if it was, say, (2,0,0,1) it * is swapped to (1,1,1,0) which reduces sums-of-squares. We start with a * random matrix with given marginal totals (from R r2dtable) but possibly * some values >1. Then we perform quasiswaps on random 2x2 submatrices so * long that only 1 and 0 are left. The function only does the quasiswaps, * and it assumes that input matrix 'm' (dimensions 'nr', 'nc') was produced * by r2dtable or some other function with given marginal totals, but some * values possibly > 1. */ /* row & col indices to a vector index */ #define INDX(i, j, nr) (i) + (nr)*(j) void quasiswap(int *m, int *nr, int *nc, int *thin) { int i, intcheck, n, mtot, ss, row[2], col[2], nr1, nc1, a, b, c, d; nr1 = (*nr) - 1; nc1 = (*nc) - 1; /* Get matrix total 'mtot' and sum-of-squares 'ss' */ n = (*nr) * (*nc); for (i = 0, mtot = 0, ss = 0; i < n; i++) { mtot += m[i]; ss += m[i] * m[i]; } /* Get R RNG */ GetRNGstate(); /* Quasiswap while there are entries > 1 */ intcheck = 0; /* check interrupts */ while (ss > mtot) { for (i = 0; i < *thin; i++) { i2rand(row, nr1); i2rand(col, nc1); /* a,b,c,d notation for a 2x2 table */ a = INDX(row[0], col[0], *nr); b = INDX(row[0], col[1], *nr); c = INDX(row[1], col[0], *nr); d = INDX(row[1], col[1], *nr); if (m[a] > 0 && m[d] > 0 && m[a] + m[d] - m[b] - m[c] >= 2) { ss -= 2 * (m[a] + m[d] - m[b] - m[c] - 2); m[a]--; m[d]--; m[b]++; m[c]++; } else if (m[b] > 0 && m[c] > 0 && m[b] + m[c] - m[a] - m[d] >= 2) { ss -= 2 * (m[b] + m[c] - m[a] - m[d] - 2); m[a]++; m[d]++; m[b]--; m[c]--; } } /* interrupt? */ if (intcheck % 1000 == 999) R_CheckUserInterrupt(); intcheck++; } /* Set R RNG */ PutRNGstate(); } /* Trial swap: try 'thin' times and swap when you can. This gives zero * to many swaps for one call. */ void trialswap(int *m, int *nr, int *nc, int *thin) { int i, a, b, c, d, row[2], col[2], sX; GetRNGstate(); for (i=0; i < *thin; i++) { i2rand(row, (*nr) - 1); i2rand(col, (*nc) - 1); a = INDX(row[0], col[0], *nr); b = INDX(row[0], col[1], *nr); c = INDX(row[1], col[0], *nr); d = INDX(row[1], col[1], *nr); /* only two filled items can be swapped */ sX = m[a] + m[b] + m[c] + m[d]; if (sX != 2) continue; if (m[a] == 1 && m[d] == 1) { m[a] = 0; m[d] = 0; m[b] = 1; m[c] = 1; } else if (m[c] == 1 && m[b] == 1) { m[a] = 1; m[d] = 1; m[b] = 0; m[c] = 0; } } PutRNGstate(); } /* Ordinary swap: swap if you can, stop after you swapped, or repeat * thin times. The data matrix 'm' must be binary: this is not * checked. */ void swap(int *m, int *nr, int *nc, int *thin) { int i, intcheck, a, b, c, d, row[2], col[2], sX; GetRNGstate(); for (i=0, intcheck=0; i < *thin; i++) { for(;;) { if (intcheck % 1000 == 999) R_CheckUserInterrupt(); intcheck++; i2rand(row, (*nr) - 1); i2rand(col, (*nc) - 1); a = INDX(row[0], col[0], *nr); b = INDX(row[0], col[1], *nr); c = INDX(row[1], col[0], *nr); d = INDX(row[1], col[1], *nr); sX = m[a] + m[b] + m[c] + m[d]; if (sX != 2) continue; if (m[a] == 1 && m[d] == 1) { m[a] = 0; m[d] = 0; m[b] = 1; m[c] = 1; break; } if (m[c] == 1 && m[b] == 1) { m[a] = 1; m[d] = 1; m[b] = 0; m[c] = 0; break; } } } PutRNGstate(); } /* Strona et al. 2014 (NATURE COMMUNICATIONS | 5:4114 | * DOI:10.1038/ncomms5114 | www.nature.com/naturecommunications) * suggested a boosted sequential binary swap method. Instead of * looking for random 2x2 submatrices, they look for 2 rows and * collect a list of unique species that occur only in one row, and * allocate these randomly to rows preserving counts. */ /* uniq is a work vector to hold indices of unique species (occurring * only in one of two random rows). uniq must be allocated in the * calling function, with safe size 2 * (max. number of species) or * with belt and suspenders 2 * (*nc). */ void curveball(int *m, int *nr, int *nc, int *thin, int *uniq) { int row[2], i, j, jind, ind, nsp1, nsp2, itmp, tmp; /* Set RNG */ GetRNGstate(); for (i = 0; i < *thin; i++) { /* Random sites */ i2rand(row, (*nr)-1); /* uniq is a vector of unique species for a random pair of rows, It need not be zeroed between thin loops because ind keeps track of used elements. */ for (j = 0, ind = -1, nsp1 = 0, nsp2 = 0; j < (*nc); j++) { jind = j * (*nr); if (m[row[0] + jind] > 0 && m[row[1] + jind] == 0) { uniq[++ind] = j; nsp1++; } if (m[row[1] + jind] > 0 && m[row[0] + jind] == 0) { uniq[++ind] = j; nsp2++; } } /* uniq contains indices of unique species: shuffle these and * allocate nsp1 first to row[0] and the rest to row[1] */ if (nsp1 > 0 && nsp2 > 0) { /* something to swap? */ for (j = ind; j >= nsp1; j--) { tmp = uniq[j]; itmp = IRAND(j); uniq[j] = uniq[itmp]; uniq[itmp] = tmp; } for (j = 0; j < nsp1; j++) { m[INDX(row[0], uniq[j], *nr)] = 1; m[INDX(row[1], uniq[j], *nr)] = 0; } for (j = nsp1; j <= ind; j++) { m[INDX(row[0], uniq[j], *nr)] = 0; m[INDX(row[1], uniq[j], *nr)] = 1; } } } PutRNGstate(); } /* 'swapcount' is a C translation of Peter Solymos's R code. It is * similar to 'swap', but can swap > 1 values and so works for * quantitative (count) data. */ /* 'isDiag' is a utility function for 'swapcount' to find the largest * value that can be swapped and whether in diagonal or antidiagonal * way. The input is a 2x2 submatrix 'sm'. */ int isDiag(int *sm, int *change) { int i, sX; int retval; /* sX: number of non-zero cells */ for (i = 0, sX = 0; i < 4; i++) if (sm[i] > 0) sX++; /* default values */ retval = 0; *change = 0; switch (sX) { case 0: case 1: /* nothing to swap*/ break; case 2: /* diagonal and antidiagonal swappable */ if (sm[1] > 0 && sm[2] > 0) { retval = (sm[1] < sm[2]) ? sm[1] : sm[2]; if (sm[1] != sm[2]) *change = 1; } else if (sm[0] > 0 && sm[3] > 0) { retval = (sm[0] < sm[3]) ? -sm[0] : -sm[3]; if (sm[0] != sm[3]) *change = 1; } break; case 3: /* always swappable: case depends on the empty corner */ if (sm[0] == 0 || sm[3] == 0) { retval = (sm[1] < sm[2]) ? sm[1] : sm[2]; if (sm[1] == sm[2]) *change = -1; } else { retval = (sm[0] < sm[3]) ? -sm[0] : -sm[3]; if (sm[0] == sm[3]) *change = -1; } break; case 4: /* always swappable: return diagonal case */ retval = (sm[1] < sm[2]) ? sm[1] : sm[2]; if (sm[1] == sm[2]) *change = -2; else *change = -1; break; } return retval; } /* isDiagFill: Largest swappable element and swap policies for * fill-neutral swapping */ int isDiagFill(int *sm) { int i, sX; int retval; /* sX: number of non-zero cells */ for (i = 0, sX = 0; i < 4; i++) if (sm[i] > 0) sX++; retval = 0; switch (sX) { case 0: case 1: /* nothing to swap*/ break; case 2: /* equal diagonal and antidiagonal fill-neutrally * swappable */ if ((sm[0] == sm[3]) && (sm[1] == sm[2])) { if (sm[1] > 0) retval = (sm[1] < sm[2]) ? sm[1] : sm[2]; else retval = (sm[0] < sm[3]) ? -sm[0] : -sm[3]; } break; case 3: /* fill-neutrally swappable if diagonal & antidiagonal * unequal */ if ((sm[0] != sm[3]) && (sm[1] != sm[2])) { if (sm[0] == 0 || sm[3] == 0) { retval = (sm[1] < sm[2]) ? sm[1] : sm[2]; } else { retval = (sm[0] < sm[3]) ? -sm[0] : -sm[3]; } } break; case 4: /* never swappable (minelement-1 always swappable) */ break; } return retval; } void swapcount(int *m, int *nr, int *nc, int *thin) { int row[2], col[2], k, ij[4], changed, intcheck, pm[4] = {1, -1, -1, 1} ; int sm[4], ev; GetRNGstate(); changed = 0; intcheck = 0; while (changed < *thin) { /* Select a random 2x2 matrix*/ i2rand(row, *nr - 1); i2rand(col, *nc - 1); ij[0] = INDX(row[0], col[0], *nr); ij[1] = INDX(row[1], col[0], *nr); ij[2] = INDX(row[0], col[1], *nr); ij[3] = INDX(row[1], col[1], *nr); for (k = 0; k < 4; k ++) sm[k] = m[ij[k]]; /* The largest value that can be swapped */ ev = isDiagFill(sm); if (ev != 0) { for (k = 0; k < 4; k++) m[ij[k]] += pm[k]*ev; changed++; } if (intcheck % 1000 == 999) R_CheckUserInterrupt(); intcheck++; } PutRNGstate(); } /* rswapcount for "reducing swap of count data" is a minor variant of * swapcount, but it tries to change the fill: you first make a matrix * with correct marginal totals, but possibly wrong fill and then you * run this to change the fill while maintaining the totals. The idea * is similar as quasiswap for presence/absence data. */ void rswapcount(int *m, int *nr, int *nc, int *mfill) { int row[2], col[2], i, intcheck, k, ij[4], n, change, cfill, pm[4] = {1, -1, -1, 1} ; int sm[4], ev; /* Get the current fill 'cfill' */ n = (*nr) * (*nc); for (i = 0, cfill=0; i < n; i++) { if (m[i] > 0) cfill++; } GetRNGstate(); /* Loop while fills differ */ intcheck = 0; while (cfill != *mfill) { /* Select a random 2x2 matrix*/ i2rand(row, *nr - 1); i2rand(col, *nc - 1); ij[0] = INDX(row[0], col[0], *nr); ij[1] = INDX(row[1], col[0], *nr); ij[2] = INDX(row[0], col[1], *nr); ij[3] = INDX(row[1], col[1], *nr); for (k = 0; k < 4; k ++) sm[k] = m[ij[k]]; /* The largest value that can be swapped */ ev = isDiag(sm, &change); if (ev != 0) { /* Fill does not change, but swap to bail out from * non-swappable configurations */ if (change == 0) { for (k = 0; k < 4; k++) m[ij[k]] += pm[k]*ev; } else if ((change < 0 && *mfill < cfill) || (change > 0 && *mfill > cfill)) { for (k = 0; k < 4; k++) m[ij[k]] += pm[k]*ev; cfill += change; } } if (intcheck % 1000 == 999) R_CheckUserInterrupt(); intcheck++; } PutRNGstate(); } /* 'isDiagSimple' needed for 'abuswap' */ int isDiagSimple(double *sm) { int i, sX; int retval = 0; /* sX: number of non-zero cells */ for (i = 0, sX = 0; i < 4; i++) if (sm[i] > 0) sX++; switch(sX) { case 0: case 1: /* never swappable */ retval = 0; break; case 2: /* diagonal and antidiagonal swappable */ if ((sm[1] > 0 && sm[2] > 0) || (sm[0] > 0 && sm[3] > 0)) retval = 1; else retval = 0; break; case 3: /* never swappable */ retval = 0; break; case 4: /* always swappable */ retval = 1; break; } return retval; } /* 'abuswap' to do Hardy 2008 J Ecol 96: 914-926 */ void abuswap(double *m, int *nr, int *nc, int *thin, int *direct) { int row[2], col[2], k, ij[4], intcheck, changed, ev; double sm[4]; GetRNGstate(); changed = 0; intcheck = 0; while (changed < *thin) { /* Select a random 2x2 matrix*/ i2rand(row, *nr - 1); i2rand(col, *nc - 1); ij[0] = INDX(row[0], col[0], *nr); ij[1] = INDX(row[1], col[0], *nr); ij[2] = INDX(row[0], col[1], *nr); ij[3] = INDX(row[1], col[1], *nr); for (k = 0; k < 4; k++) sm[k] = m[ij[k]]; ev = isDiagSimple(sm); /* Swap */ if (ev == 1) { /* fixed column sums */ if (*direct == 0) { m[ij[0]] = sm[1]; m[ij[1]] = sm[0]; m[ij[2]] = sm[3]; m[ij[3]] = sm[2]; } /* fixed row sums */ else { m[ij[0]] = sm[2]; m[ij[1]] = sm[3]; m[ij[2]] = sm[0]; m[ij[3]] = sm[1]; } changed++; } if (intcheck % 1000 == 999) R_CheckUserInterrupt(); intcheck++; } PutRNGstate(); } #undef IRAND #undef INDX vegan/src/pnpoly.c0000644000176200001440000000534013232070307013625 0ustar liggesusers/**********************************************************' * pnpoly.c: Find Points in a Polygon * ********************************************************/ /* Function pnpoly is lightly edited from the function of Wm. Randolph * Franklin by Jari Oksanen to work in R and for a vector of points. * The source of this code was at * http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html, * and the original copyright notice is below. This version is Friday, * October 13, 2006. */ /* Motivation for yet another point in polygon function: There was * none in base R, and I wanted to liberate ordisurf from dependence * on non-standard R packages. I think there should be such a function * connected with chull (in.chull) to make this unnecessary in * vegan. */ /* License to Use */ /* Copyright (c) 1970-2003, Wm. Randolph Franklin */ /* Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: */ /* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimers. */ /* Redistributions in binary form must reproduce the above copyright notice in the documentation and/or other materials provided with the distribution. */ /* The name of W. Randolph Franklin may not be used to endorse or promote products derived from this Software without specific prior written permission. */ /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ void pnpoly(int *npol, double *xp, double *yp, int *np, double *x, double *y, int *c) { int i, j, k; for (k = 0; k < *np; k++) c[k] = 0; for (k = 0; k < *np; k++) { for (i = 0, j = *npol-1; i < *npol; j = i++) { if ((((yp[i] <= y[k]) && (y[k] < yp[j])) || ((yp[j] <= y[k]) && (y[k] < yp[i]))) && (x[k] < (xp[j] - xp[i]) * (y[k] - yp[i]) / (yp[j] - yp[i]) + xp[i])) c[k] = !c[k]; } } } vegan/src/stepacross.c0000644000176200001440000001576613232070307014507 0ustar liggesusers/* stepacross: Extended dissimilarities according to * * G. De'ath, Plant Ecology 144, 191-199; 1999 * * 1. Find all dissimilarities above a threshold and make them NA. * 2. See if you can find a stepacross point k so that d[ij] = d[ki] + * d[kj] is not NA. Take the shortest of these dissimilarities as new d[ij]. * 3. Repeat step 2 with updated dissimilarity matrix until no NA are * left, or you cannot find any new non-NA steps. The latter case is * an error: Disconnected data set. * * The function inspects only dissimilarities originally marked as * NA. It does not update paths involving sites i and j once d[ij] was * changed. Neither does it try to find shortest path for * dissimilarities below the threshold, although such could be found * in semi-metrics such as Bray-Curtis index. * * (C) 2003 Jari Oksanen. You are allowed to use this software under GPL2. */ #include #define EPS (1e-6) #define IND(N,a,b) (N)*(a) - (a)*((a)+1)/2 + (b) - (a) - (1) void stepacross(double *dist, int *n, double *toolong, int *trace) { int i, j, k, nacount, oldcount, ind, ki, kj, inew, *newind, ndist; double stepdis, steptry, *newdist, limit; limit = *toolong - EPS; ndist = (*n) * ((*n) - 1) / 2; if (*toolong > 0) for (i = 0; i < ndist; i++) if (dist[i] >= limit) dist[i] = NA_REAL; for (i = 0, nacount = 0; i < ndist; i++) if (ISNA(dist[i])) nacount++; if (*trace) Rprintf("Too long or NA distances: %d out of %d (%.1f%%)\n", nacount, ndist, 100.0*nacount/ndist); newdist = (double *) R_alloc(nacount, sizeof(double)); newind = (int *) R_alloc(nacount, sizeof(int)); while (nacount > 0) { if (*trace) Rprintf("Stepping across %d dissimilarities...\n", nacount); oldcount = nacount; inew = 0; for (i = 0, ind = 0; i < *n; i++) { for (j = i + 1; j < *n; j++) { if (ISNA(dist[ind])) { stepdis = DOUBLE_XMAX; for (k = 0; k < *n; k++) { if (k == i || k == j) continue; ki = (k > i) ? IND(*n, i, k) : IND(*n, k, i); if (ISNA(dist[ki])) continue; kj = (k > j) ? IND(*n, j, k) : IND(*n, k, j); if (ISNA(dist[kj])) continue; steptry = dist[ki] + dist[kj]; if (steptry < stepdis) stepdis = steptry; } if (stepdis < DOUBLE_XMAX) { newdist[inew] = stepdis; newind[inew] = ind; nacount--; inew++; } } ind++; } } if (oldcount == nacount) { warning("Disconnected data: Result will contain NAs"); break; } for (k = 0; k < inew; k++) dist[newind[k]] = newdist[k]; } } /* stepabyss and visitabyss implement depth-first search for * connectivity of dissimilarity matrix with threshold * limit-EPS. Algorithm is directly taken from Sedgewick (1990), * "Algorithms in C," pages 423-427. Macro IND and constant EPS were * defined above. */ void visitabyss(int k, int id, int *val, int n, double *dist) { int t, ki; val[k] = id; for (t = 0; t < n; t++) { if (k == t) continue; ki = (t > k) ? IND(n, k, t) : IND(n, t, k); if (!ISNA(dist[ki])) if (val[t] == 0) visitabyss(t, id, val, n, dist); } } void stepabyss(double *dist, int *n, double *toolong, int *val) { int k, id, ndist; double limit; limit = *toolong - EPS; ndist = (*n) * ((*n) - 1)/2; if (*toolong > 0) for (k = 0; k < ndist; k++) if (dist[k] >= limit) dist[k] = NA_REAL; for (k = 0; k < *n; k++) val[k] = 0; for (k = 0, id = 0; k < *n; k++) if (val[k] == 0) visitabyss(k, ++id, val, *n, dist); } /* Function dykstrapath impelements Dijkstra's shortest path algorithm * for graph traversal. Return matrix outval contains shortest path * distances. Function matrixpfs() in Sedgewick, 1990, page 466 * (priority first search for dense graphs). */ #define UNSEEN 1e8 void dykstrapath(double *dist, int *n, double *toolong, int *trace, double *outval) { int i, k, t, min = 0, ki, ndist, nacount = 0; double priority, *val, limit; /* val[*n] is a sentinel: length needs be n+1 */ val = (double *) R_alloc((*n) + 1, sizeof(double)); limit = *toolong - EPS; ndist = (*n) * ((*n) - 1)/2; if (*toolong > 0) for(i = 0; i < ndist; i++) if (dist[i] >= limit) dist[i] = NA_REAL; if (*trace) { for (i = 0, nacount = 0; i < ndist; i++) if (ISNA(dist[i])) nacount++; Rprintf("Too long or NA distances: %d out of %d (%.1f%%)\n", nacount, ndist, 100.0 * nacount/ndist); Rprintf("Stepping across %d dissimilarities...\n", ndist); } for (i = 0; i < *n; i++) { for (k = 0; k <= *n; k++) val[k] = -UNSEEN; val[*n] = -(UNSEEN + 1); for (k = i; k != *n; k = min, min = *n) { val[k] = -val[k]; if (val[k] == UNSEEN) val[k] = 0; for (t = 0; t < *n; t++) if (val[t] < 0) { ki = (t > k) ? IND(*n, k, t) : IND(*n, t, k); priority = val[k] + dist[ki]; if (!ISNA(priority) && (val[t] < -priority)) { val[t] = -priority; } if (val[t] > val[min]) min = t; } } ki = IND(*n, i, i+1); for (t = i + 1; t < *n; t++) outval[ki + t - i - 1] = val[t]; } for (i = 0, nacount = 0; i < ndist; i++) if (ISNA(dist[i]) && outval[i] == 0) { outval[i] = NA_REAL; nacount++; } if (nacount) warning("Disconnected data: Result will contain NAs"); } /* Function primtree finds *a* minimum spanning tree for dist. Vector * dad returns the vertex joined to point i (the first item is 0: it * is the link from 0 to 0) and val the length of corresponding * edge. If the distance matrix is disconnected at level toolong, * returns a minimum spanning forest where the missing links are * marked as NA. Uses Prim's method (priority-first search for a * dense graph) of Sedgewick, 1990, page 466, function * matrixpfs(). --- I didn't intend to have minimum spanning tree, * because I think it is pretty useless, but this just appeared when I * tried to implement Dijkstra's shortest path algorithm above. */ void primtree(double *dist, double *toolong, int *n, double *val, int *dad) { int k, t, min = 0, ki, ndist; double priority; ndist = (*n) * ((*n) - 1)/2; if (*toolong > 0) for (k = 0; k < ndist; k++) if (dist[k] >= *toolong - EPS) dist[k] = NA_REAL; for (k = 0; k <= *n; k++) { dad[k] = NA_INTEGER; val[k] = -UNSEEN; } val[*n] = -(UNSEEN + 1); for (k = 0; k != *n; k = min, min = *n) { val[k] = -val[k]; if (val[k] == UNSEEN) val[k] = 0; for (t = 0; t < *n; t++) if (val[t] < 0) { if (t == k) continue; ki = (t > k) ? IND(*n, k, t) : IND(*n, t, k); priority = dist[ki]; if (!ISNA(priority) && (val[t] < -priority)) { val[t] = -priority; dad[t] = k; } if (val[t] > val[min]) min = t; } } } #undef UNSEEN vegan/src/ordering.f0000644000176200001440000001136613232070307014125 0ustar liggesusers Subroutine Orderdata(mat, n, k, rowscore) C23456789012345678901234567890123456789012345678901234567890123456789012 C d = a distance matrix C n = number of objects (rows of the data files) C C Based on Pierre Legendre Fortran code and Table 9.5 and 9.10 C We compute the principal coordinate of the first axis only. C Set the precision level for eigenvalue estimation Integer mat(n,k) double precision sumrow(n), sumtot double precision rowscore(n),colscore(n),toler,epsilon epsilon=0.000001 toler= 0.000001 if(n.gt.1000) then epsilon=0.00001 toler= 0.00001 endif if(n.gt.10000) then epsilon=0.0001 toler= 0.0001 endif C Centre the distance matrix (Gower's method) call Centre(mat, n, k, sumrow, sumtot) call TWWS(mat,n,k,sumrow,sumtot,rowscore,colscore,toler,epsilon) end Subroutine Centre(mat, n, k, sumrow, sumtot) Integer mat(n,k) double precision d double precision sumrow(n),sumtot do i=1,n sumrow(i)=0.0 enddo do i=1,(n-1) do j=(i+1),n call SM(mat, n, k, i, j, d) d = -0.5*d**2 sumrow(i)=sumrow(i) + d sumrow(j)=sumrow(j) + d enddo enddo C fln=1.0/float(n) sumtot=0. do i=1,n sumtot=sumtot+sumrow(i) sumrow(i)=sumrow(i)*fln enddo sumtot=sumtot/float(n**2) C do 16 i=1,n C do 16 j=1,n C 16 d(i,j)=d(i,j)-sumrow(i)-sumrow(j)+sumtot end Subroutine SM(mat, n, k, i, j, d) C Compute a simple matching coefficient from a table of K-means results (integers). C The 'n' rows are the objects; the 'k' columns are the partitions. Integer mat(n,k) double precision d C a = 0.0 do kk=1,k if(mat(i,kk).eq.mat(j,kk)) a=a+1 enddo d = 1.0 - (a/float(k)) end Subroutine TWWS(mat,n,k,sumrow,sumtot,rowscore,colscore, + toler,epsilon) Integer n, niter Integer mat(n,k) double precision sumrow(n),sumtot,d double precision rowscore(n),colscore(n),epsilon,oldS,newS,toler, + oldrowsc(n) niter=1000 C Step 2: Take the column order as arbitrary initial site scores do i=1,n rowscore(i)=dble(i) end do oldS=0. C Iterations starting: this is a LONG loop do 20 it=1,niter C Step 3: Calculate new variable scores (equation 5.8, p. 119) do i=1,n colscore(i)=rowscore(i) end do C Step 4: Calculate new site scores (equation 5.9, p. 122) do i=1,n rowscore(i)=0. do j=1,n call SM(mat, n, k, i, j, d) d = -0.5*d**2 d = d-sumrow(i)-sumrow(j)+sumtot rowscore(i)=rowscore(i)+d*colscore(j) end do end do C Step 6: Normalize the site scores call NormTWWS(rowscore,n,newS) if(newS.lt.epsilon) then C write(*,103) 0 goto 52 endif C When convergence has been attained, check sign of eigenvalue. C If ALL rowscores have changed sign during the last iteration, C this is a negative eigenvalue. C write(*,*) 'oldS-newS', oldS-newS if(dabs(oldS-newS).le.toler) then C write(*,105) toler, it goto 22 endif do i=1,n oldrowsc(i)=rowscore(i) end do oldS=newS 20 continue C End of iterations for estimating eigenvalues and eigenvectors C write(*,101) k 22 continue C Save Eigenvalues, % variance, cumulative % variance C write(*,*) 'Eigenvalue =', newS C End of main loop on axes 52 continue C C Normalize the principal coordinates to variance = eigenvalue do i=1,n rowscore(i)=rowscore(i)*dsqrt(newS) end do C write(*,*) rowscore C 101 format(' Convergence not reached for axis:',i3/ C + ' Increase NITER or lower TOLER') C 102 format(' N. iterations to reach convergence for axis',i3,' =',i4) C 103 format(' There are',i4,' eigenvalues different from 0') C 104 format(' Eigenvector',i3,' is complex [multiply values*Sqrt(-1)]') C 105 format(" Tolerance is: ", F12.8, " NIter is: ", i4) C 150 format(1x,1hR,2i3,6f10.5) C 151 format(1x,1hC,2i3,10x,6f10.5) end Subroutine NormTWWS(rowscore,n,newS) Integer n double precision rowscore(n),s2,newS C Normalization for two-way weighted summation algorithm for PCA C (ter Braak 1987: 123) C On output, vector 'rowscore' has length = 1. C S = eigenvalue*(p-1) = contraction of vector rowscore in final C iteration C s2=0.0 do i=1,n s2=s2+rowscore(i)**2 end do newS=dsqrt(s2) do i=1,n rowscore(i)=rowscore(i)/newS end do return end vegan/src/monoMDS.f0000644000176200001440000010533213232070307013625 0ustar liggesusers SUBROUTINE monoMDS (NOBJ, NFIX, NDIM, NDIS, NGRP, . DISS, IIDX, JIDX, XINIT, ISTART, . ISFORM, ITIES, IREGN, ISCAL, MAXITS, SRATMX, . STRMIN, SFGRMN, . DIST, DHAT, X, STRESS, STRS, ITERS, ICAUSE) C C Subroutine for multidimensional scaling. C C 1.00 March 28, 2011 C 1.01 April 6, 2011 - added argument STRS(NGRP) to return the stress C for each of the NGRP groups of dissimilarities C i.e., from each separate regression. C 1.02 January 7, 2016 - fixed bug in MONREG so that huge C dissimilarities are correctly handled in C creating the initial partition for monotone C regression with primary tie treatment. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C C Starting from a supplied initial configuarion, uses steepest descent C to minimize Kruskal's stress, a measure of badness-of-fit of one C or more regressions of distances onto the supplied dissimilarities. C C This routine is very flexible in the form of the dissimilarity C matrices it can handle because dissimilarities are input as a C vector (DISS) with the associated i- and j-indices in parallel C vectors (IIDX, JIDX). There is no need for missing values, as C these index vectors specify which pair of points each dissimilarity C belongs to and missing dissimilarities are simply omitted. Another C element of flexibility is that there can be more than one group of C dissimilarities and a separate regression of distance on C dissimilarity is done for each group. Local or "row conditional" C scaling can be performed by inputting each row of the dissimilarity C matrix (minus the diagonals) as a separate group. Hybrid scaling C of Faith et. al (1987) can be done by inputting the complete C dissimilarity matrix as group 1 and only those dissimilarities C below a specified threshold as group 2 (and also setting input C parameter IREGN to 3). New points can be inserted into an C existing ordination by inputting dissimilarities from the C rectangular matrix in which the existing points are rows and the C new points are columns. The parameter NFIX is then set to the C number of existing points (rows) and these will be the first C NFIX points in XINIT, which supplies their coordinates. Normally, C when NFIX>0, the scaling parameter, ISCAL, should be 0, so that C the coordinates of the fixed points remain unchanged in the C output ordination scores, X. C C========INPUT ARGUMENTS: C C NOBJ = number of objects being ordinated C C NFIX = number of fixed objects (< NOBJ - if NFIX>0 the input C dissim matrix is assumed to be rectangular, with the C first NFIX objects, rows, remaining fixed and the rest C able to move) C C NDIM = number of dimensions for the MDS ordination C C NDIS = total number of dissimilarities among objects C C NGRP = number of groups of dissimilarities (a separate regression C of distances on dissimilarities is performed for each C group) C C DISS(NDIS) = vector of dissimilarities among objects C C IIDX(NDIS) = i-indices of objects in the dissimilarity vector C C JIDX(NDIS) = j-indices of objects in the dissimilarity vector C C XINIT(NOBJ,NDIM) = initial coordinates for NOBJ objects on NDIM C dimensions C C ISTART(NGRP) = index of starting position of each group of C dissimilarities within vectors DISS, IIDX and JIDX C C ISFORM = Kruskal stress formula to be used: 1 or 2 C C ITIES = Kruskal tie treatment: 1 = weak/primary, 2 = strong/secondary C C IREGN = Regression type: 1 = Kruskal monotone, 2 = linear, 3 = hybrid C (Kruskal monotone for the first NGRP/2 groups, linear for C the remainder of the groups - when this is selected it is C assumed that NGRP>1 and NGRP is even) C C ISCAL = scaling of final ordination: 0 = preserved (output raw scores C with no standardization), 1 = normalize (center and adjust C RMS distance of points to centroid to 1.0) C C MAXITS = maximum number of iterations - at least 200 recommended C C SRATMX = maximum average stress ratio (iterations stop when average C stress ratio exceeds this value but is still < 1) - a value C of 0.9999 or higher is recommended C C STRMIN = minimum stress to stop (iterations stop if stress falls C below this value) - a value of 0.001 or lower is C recommended C C SFGRMN = minimum scale factor of the gradient (iterations stop if C the scale factor of the gradient drops below this) C C========OUTPUT ARGUMENTS: C C DIST(NDIS) = distances among objects in the final ordination C C DHAT(NDIS) = fitted distances in final regression(s) of distance C on dissimilarity C C X(NOBJ,NDIM) = final ordination coordinates of NOBJ objects in NDIM C dimensions C C STRESS = final value of stress C C STRS(NGRP) = vector of stress values from each separate regression C C ITERS = number of iterations performed C C ICAUSE = reason for termination of iterations: 1 = max iterations C used, 2 = stress fell below STRMIN, 3 = stress ratio C exceeded SRATMX, 4 = scale factor of gradient fell below C SFGRMN C C---INPUT ARGUMENTS INTEGER, INTENT(IN) :: NOBJ, NFIX, NDIM, NDIS, NGRP, . ISFORM, ITIES, IREGN, ISCAL, MAXITS INTEGER, INTENT(IN) :: IIDX(NDIS), JIDX(NDIS), ISTART(NGRP) DOUBLE PRECISION, INTENT(IN) :: XINIT(NOBJ,NDIM), DISS(NDIS), . SRATMX, STRMIN, SFGRMN C---OUTPUT ARGUMENTS INTEGER, INTENT(OUT) :: ITERS, ICAUSE DOUBLE PRECISION, INTENT(OUT) :: X(NOBJ,NDIM), DIST(NDIS), . DHAT(NDIS), STRESS, STRS(NGRP) C---ALLOCATABLE TEMPORARY ARRAYS INTEGER, ALLOCATABLE :: IWORK(:) DOUBLE PRECISION, ALLOCATABLE :: GRAD(:,:), GRLAST(:,:) C DOUBLE PRECISION :: STRLST, SQRTN, SRATF1, SRATF2, FNGRP, . STRINC, COSAV, ACOSAV, SRATAV, STEP, FNDIM, SFGR, SRATIO, . SFACT, TFACT, DMEAN, CAGRGL, SFGLST, STPNEW, SSFACB, SSFACT, . PARAM(2) C C ALLOCATE THE TEMPORARY ARRAYS NEEDED C ALLOCATE (IWORK(NDIS), GRAD(NOBJ,NDIM), GRLAST(NOBJ,NDIM)) C C INITIALIZE SOME PARAMETERS C SQRTN=SQRT(REAL(NDIS)) SRATF1=0.5*(1.0+SRATMX) SRATF2=1.0-SRATF1 FNGRP=REAL(NGRP) STRINC=1.1 STRESS=1.0D0 COSAV=0.0 ACOSAV=0.0 SRATAV=0.8 STEP=0.0 FNDIM=REAL(NDIM) SFGR=SQRTN C C PREPARE DISSIMILARITIES FOR USE IN REGRESSION(S) C DO IGRP=1,NGRP I1=ISTART(IGRP) IF (IGRP.LT.NGRP) THEN N=ISTART(IGRP+1)-I1 ELSE N=NDIS+1-I1 ENDIF IF (N.GT.0) THEN C C PRE-SORT IF NECESSARY. NOT REQUIRED FOR LINEAR REGRESSION (IREGN=2) C NOR FOR DISSIM GROUPS > NGRP/2 IN HYBRID REGRESSION (IREGN=3) C IF (IREGN.EQ.1.OR.(IREGN.EQ.3.AND.IGRP.LE.NGRP/2)) THEN CALL ASORT4 (DISS(I1),N,IIDX(I1),JIDX(I1)) ENDIF ENDIF ENDDO C C COPY INITIAL CONFIGURATION TO CURRENT CONFIGURATION C CALL MACOPY (XINIT,NOBJ,NOBJ,NDIM,X,NOBJ) C C INITALIZE GRADIENT (WILL BE USED AS THE FIRST "LAST GRADIENT") C CALL MAINIT (GRAD,NOBJ,NDIM,NOBJ,SQRT(1.0/FNDIM)) C======================================================================= C C START OF ITERATION LOOP C DO IT=0,MAXITS C---Reset backup counter NBACK=0 C C SAVE LAST STRESS VALUE AND SET STRESS BACK TO ZERO C C---Jump back to here when a backup if required 10 STRLST=STRESS STRESS=0.0D0 C C Normalize the current configuration (unless ISCAL=0) C IF (ISCAL.GT.0) THEN CALL NRMCON (X,NOBJ,NDIM,NOBJ,SSFACT) ELSE SSFACT=1.0D0 ENDIF C C MOVE CURRENT GRADIENT TO LAST GRADIENT (WITH APPROPRIATE SCALING) C AND SAVE LAST GRADIENT SCALING FACTOR C CALL MACOPY (GRAD,NOBJ,NOBJ,NDIM,GRLAST,NOBJ) CALL MAMAS (GRLAST,NOBJ,NOBJ,NDIM,SSFACT) SFGLST=SFGR*SSFACT C C CLEAR CURRENT GRADIENT C CALL MAINIT (GRAD,NOBJ,NDIM,NOBJ,0.0D0) C C COMPUTE DISTANCES C CALL CLCDIS (X,NOBJ,NDIM,DIST,IIDX,JIDX,NDIS) C----------------------------------------------------------------------- C C LOOP OVER THE NGRP GROUPS OF DISSIMILARITIES C DO IGRP=1,NGRP I1=ISTART(IGRP) IF (IGRP.LT.NGRP) THEN N=ISTART(IGRP+1)-I1 ELSE N=NDIS+1-I1 ENDIF IF (N.GT.0) THEN C C PERFORM REGRESSION OF DISTANCES ON DISSIMILARITIES C IF (IREGN.EQ.1.OR.(IREGN.EQ.3.AND.IGRP.LE.NGRP/2)) THEN CALL MONREG (DISS(I1),DIST(I1),DHAT(I1),IIDX(I1), . JIDX(I1),IWORK(I1),N,ITIES) ELSEIF (IREGN.EQ.2.OR.(IREGN.EQ.3.AND.IGRP.GT.NGRP/2)) THEN CALL LINREG (DISS(I1),DIST(I1),DHAT(I1),N,PARAM) ENDIF C C COMPUTE AND ACCUMULATE STRESS C CALL CLCSTR (DIST(I1),DHAT(I1),N,SFACT,TFACT,STRS(IGRP), . ISFORM,DMEAN) STRESS=STRESS+SFACT/TFACT C C ACCUMULATE THE NEGATIVE GRADIENT C CALL CLCGRD (X,GRAD,NOBJ,NDIM,DIST(I1),DHAT(I1), . IIDX(I1),JIDX(I1),N,STRS(IGRP),SFACT,TFACT,ISFORM,DMEAN) ENDIF ENDDO C C END OF DISSIMILARITY GROUP LOOP C C----------------------------------------------------------------------- C C COMPUTE OVERALL STRESS AND ITS REDUCTION RATIO C STRESS=SQRT(STRESS/FNGRP) IF (IT.EQ.0) THEN SRATIO=0.8D0 ELSE SRATIO=STRESS/STRLST ENDIF C C TO PREVENT FIXED POINTS BEING MOVED, ZERO THEIR GRADIENT ELEMENTS C IF (NFIX.GT.0) THEN DO I=1,NFIX DO IDIM=1,NDIM GRAD(I,IDIM)=0.0D0 ENDDO ENDDO ENDIF C C CALCULATE SCALE FACTOR OF NEW GRADIENT AND ITS DIRECTION COSINE C WITH THE LAST GRADIENT C CALL CLCSFA (GRAD,GRLAST,NOBJ,NDIM,NOBJ,SFGR,CAGRGL, . SFGLST) C C IF STRESS HAS INCREASED APPRECIABLY, OR THE ANGLE BETWEEN THE NEW C GRADIENT AND THE LAST GRADIENT IS APPROACHING 180 DEGREES, REDUCE C THE STEP SIZE AND BACK UP ALONG THE LAST GRADIENT C (BACKUP PROCEDURE IS PERFORMED A MAXIMUM OF 3 TIMES PER ITERATION) C IF ((SRATIO.GT.STRINC.OR.CAGRGL.LT.(-0.95)).AND.NBACK.LT.3) . THEN STPNEW=STEP*0.1D0 CALL BACKUP (X,GRAD,GRLAST,NOBJ,NDIM,NOBJ,NBACK,SSFACT, . SSFACB,STRESS,STRLST,SFGR,SFGLST,STEP,STPNEW) GO TO 10 ENDIF C C UPDATE AVERAGES OF STRESS RATIO AND PREVIOUS DIRECTION COSINES C SRATAV=SRATIO**0.33334D0 * SRATAV**0.66666D0 COSAV=CAGRGL*0.66666D0 + COSAV*0.33334D0 ACOSAV=ABS(CAGRGL)*0.66666D0 + ACOSAV*0.33334D0 C C COMPUTE NEW STEP SIZE C CALL CLCSTP (STEP,IT,SFGR,STRESS,COSAV,ACOSAV,SRATIO, . SRATAV) C C CHECK WHETHER OR NOT TO KEEP ITERATING C C IF STRESS IN SMALL ENOUGH, TERMINATE C ITERS=IT IF (STRESS.LT.STRMIN) THEN ICAUSE=2 EXIT C C IF STRESS IS DECREASING SLOWLY, TERMINATE. C ELSEIF (ABS(SRATAV-SRATF1).LE.SRATF2.AND. . ABS(SRATIO-SRATF1).LE.SRATF2) THEN ICAUSE=3 EXIT C C IF SCALE FACTOR OF GRADIENT IS SMALL ENOUGH, TERMINATE C ELSEIF (SFGR.LE.SFGRMN) THEN ICAUSE=4 EXIT C C IF THIS IS THE FINAL ITERATION, TERMINATE C ELSEIF (IT.EQ.MAXITS) THEN ICAUSE=1 EXIT ENDIF C C COMPUTE NEW CONFIGURATION C CALL NEWCON (X,GRAD,NOBJ,NDIM,NOBJ,STEP,SFGR) ENDDO C C END OF ITERATION LOOP C C======================================================================= C C DEALLOCATE THE TEMPORARY ARRAYS AND RETURN C DEALLOCATE (IWORK, GRAD, GRLAST) RETURN END SUBROUTINE monoMDS SUBROUTINE ASORT4 (X,N,I1,I2) C C SORTS THE REAL*8 VECTOR X ASCENDING, SIMULTANEOUSLY PERMUTING THE C INTEGER VECTORS I1 AND I2 IN PARALLEL. C C ADAPTED FROM SUPERCHARGED SHELL SORT ALGORITHM PUBLISHED ON PAGE 488 C OF THE MAY 1983 EDITION OF BYTE MAGAZINE. C C Adapted by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C INTEGER I1(N), I2(N), I1TEMP, I2TEMP DOUBLE PRECISION X(N), XTEMP C IF (N.LT.2) RETURN FN=REAL(N) NLOOPS=MAX(NINT(LOG(FN)/LOG(2.)),1) M=2**(NLOOPS-1) DO II=1,NLOOPS FM=M DO I=1,MAX(1,N-M) IF (X(I).GT.X(I+M)) THEN XTEMP=X(I+M) I1TEMP=I1(I+M) I2TEMP=I2(I+M) X(I+M)=X(I) I1(I+M)=I1(I) I2(I+M)=I2(I) IF (I.LE.M) THEN X(I)=XTEMP I1(I)=I1TEMP I2(I)=I2TEMP ELSE DO J=I-M,1,-M IF (XTEMP.GE.X(J)) EXIT X(J+M)=X(J) I1(J+M)=I1(J) I2(J+M)=I2(J) ENDDO X(J+M)=XTEMP I1(J+M)=I1TEMP I2(J+M)=I2TEMP ENDIF ENDIF ENDDO M=INT(FM/2.) ENDDO RETURN END SUBROUTINE ASORT4 SUBROUTINE BACKUP (X,GRAD,GRLAST,NOBJ,NDIM,MAXOBJ,NBACK,SSFACT, . SSFACB,STRESS,STRLST,SFGR,SFGLST,STEP,STPNEW) C C BACKS THE CONFIGURATION UP ALONG THE LAST GRADIENT C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION X(MAXOBJ,NDIM), GRAD(MAXOBJ,NDIM), . GRLAST(MAXOBJ,NDIM), SSFACT, SSFACB, STRESS, STRLST, SFGR, . SFGLST,STEP,STPNEW,FACTOR C NBACK=NBACK+1 IF (NBACK.EQ.1) THEN SSFACB=1.0D0 ELSE SSFACB=SSFACB*SSFACT ENDIF FACTOR=SSFACB*(STEP-STPNEW)/SFGLST DO IDIM=1,NDIM DO IOBJ=1,NOBJ X(IOBJ,IDIM)=X(IOBJ,IDIM)-FACTOR*GRLAST(IOBJ,IDIM) GRAD(IOBJ,IDIM)=GRLAST(IOBJ,IDIM) ENDDO ENDDO STEP=STPNEW SFGR=SFGLST STRESS=STRLST RETURN END SUBROUTINE BACKUP SUBROUTINE CLCDIS (X,MAXOBJ,NDIM,DIST,IIDX,JIDX,NDIS) C C COMPUTES EUCLIDEAN DISTANCES BETWEEN EACH PAIR OF THE NOBJ POINTS C WHOSE CO-ORDINATES IN NDIM DIMENSIONS ARE IN X(NOBJ,NDIM). C C THE DISTANCES ARE STORED IN THE VECTOR DIST AND THE INDEX VECTORS C IIDX AND JIDX HOLD THE I,J INDICES OF THE POINTS IN THE ORDER IN C WHICH THE COMPARISONS ARE TO BE MADE. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C INTEGER IIDX(NDIS), JIDX(NDIS) DOUBLE PRECISION X(MAXOBJ,NDIM), DIST(NDIS) C C INITIALIZE DISTANCES C DO I=1,NDIS DIST(I)=0.0 ENDDO C C ACCUMULATE SUMS OF SQUARED DIFFERENCES ON EACH DIMENSION C DO IDIM=1,NDIM DO K=1,NDIS DIST(K)=DIST(K)+(X(IIDX(K),IDIM)-X(JIDX(K),IDIM))**2 ENDDO ENDDO C C TAKE SQUARE ROOTS OF TOTALS C DO I=1,NDIS DIST(I)=SQRT(DIST(I)) ENDDO RETURN END SUBROUTINE CLCDIS SUBROUTINE CLCGRD (X,GRAD,MAXOBJ,NDIM,DIST,DHAT,IIDX,JIDX, . NDIS,STRESS,SFACT,TFACT,ISFORM,DMEAN) C C ACCUMULATES THE NEGATIVE GRADIENT IN GRAD(NOBJ,NDIM). C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C INTEGER IIDX(NDIS), JIDX(NDIS) DOUBLE PRECISION X(MAXOBJ,NDIM), GRAD(MAXOBJ,NDIM), DIST(NDIS), . DHAT(NDIS), STRESS, SFACT, TFACT, DMEAN, SOTSQ, RECIPT, . DELTA C IF (STRESS.LE.0.0D0) RETURN SOTSQ=SFACT/(TFACT**2) RECIPT=1.0/TFACT DO IDIM=1,NDIM IF (ISFORM.LE.1) THEN C---Kruskal's stress formula 1 DO K=1,NDIS IF (DIST(K).GT.0.0) THEN DELTA=(SOTSQ-RECIPT*(DIST(K)-DHAT(K))/DIST(K))* . (X(IIDX(K),IDIM)-X(JIDX(K),IDIM)) GRAD(IIDX(K),IDIM)=GRAD(IIDX(K),IDIM)+DELTA GRAD(JIDX(K),IDIM)=GRAD(JIDX(K),IDIM)-DELTA ENDIF ENDDO ELSE C---Kruskal's stress formula 2 DO K=1,NDIS IF (DIST(K).GT.0.0) THEN DELTA=(SOTSQ*(DIST(K)-DMEAN)/DIST(K)- . RECIPT*(DIST(K)-DHAT(K))/DIST(K))* . (X(IIDX(K),IDIM)-X(JIDX(K),IDIM)) GRAD(IIDX(K),IDIM)=GRAD(IIDX(K),IDIM)+DELTA GRAD(JIDX(K),IDIM)=GRAD(JIDX(K),IDIM)-DELTA ENDIF ENDDO ENDIF ENDDO RETURN END SUBROUTINE CLCGRD SUBROUTINE CLCSFA (GRAD,GRLAST,NOBJ,NDIM,MAXOBJ,SFGR,CAGRGL, . SFGLST) C C COMPUTES SCALE FACTOR OF THE NEGATIVE GRADIENT IN GRAD(NOBJ,NDIM) C AND ALSO FINDS ITS DIRECTION COSINE WITH THE PREVIOUS GRADIENT, C STORED IN GRLAST(NOBJ,NDIM). C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION GRAD(MAXOBJ,NDIM), GRLAST(MAXOBJ,NDIM), . SFGR, CAGRGL, SFGLST, FN, FACTOR C FN=DBLE(NOBJ) SFGR=0.0D0 CAGRGL=0.0D0 DO IDIM=1,NDIM DO IOBJ=1,NOBJ SFGR=SFGR+GRAD(IOBJ,IDIM)**2 CAGRGL=CAGRGL+GRAD(IOBJ,IDIM)*GRLAST(IOBJ,IDIM) ENDDO ENDDO SFGR=SQRT(SFGR/FN) FACTOR=SFGR*SFGLST*FN IF (FACTOR.NE.0.0) CAGRGL=CAGRGL/FACTOR RETURN END SUBROUTINE CLCSFA SUBROUTINE CLCSTP (STEP,IT,SFGR,STRESS,COSAV,ACOSAV,SRATIO, . SRATAV) C C COMPUTES NEW STEP SIZE. BASED ON J.B. KRUSKAL'S STEP SIZE ALGORITHM C IN THE BELL LABORATORIES PROGRAM "KYST". C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION STEP, SFGR, STRESS, COSAV, ACOSAV, SRATIO, . SRATAV, FACTR1, FACTR2, FACTR3 C C MAKE A WILD GUESS FOR INITIAL STEP SIZE (IT=0). C IF (IT.EQ.0) THEN STEP=25.0*STRESS*SFGR C C OTHERWISE, UPDATE STEP SIZE. C ELSE FACTR1=4.0**COSAV FACTR2=1.6/( (1.0+(MIN(1D0,SRATAV))**5) * . (1.0+ACOSAV-ABS(COSAV)) ) FACTR3=SQRT(MIN(1D0,SRATIO)) STEP=STEP*FACTR1*FACTR2*FACTR3 ENDIF RETURN END SUBROUTINE CLCSTP SUBROUTINE CLCSTR (DIST,DHAT,N,SNUMER,SDENOM,STRESS,ISFORM,DMEAN) C C COMPUTES KRUSKAL'S STRESS (FORMULA 1 or 2) C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION DIST(N), DHAT(N), SNUMER, SDENOM, STRESS, . DMEAN C SNUMER=0.0D0 SDENOM=0.0D0 DMEAN=0.0D0 IF (ISFORM.GE.2) THEN DO I=1,N DMEAN=DMEAN+DIST(I) ENDDO DMEAN=DMEAN/DBLE(N) DO I=1,N SNUMER=SNUMER+(DIST(I)-DHAT(I))**2 SDENOM=SDENOM+(DIST(I)-DMEAN)**2 ENDDO ELSE DO I=1,N SNUMER=SNUMER+(DIST(I)-DHAT(I))**2 SDENOM=SDENOM+DIST(I)**2 ENDDO ENDIF STRESS=SQRT(SNUMER/SDENOM) RETURN END SUBROUTINE CLCSTR SUBROUTINE LINREG (DISS,DIST,DHAT,N,C) C C PERFORMS LINEAR REGRESSION OF DIST ON DISS, PLACING THE FITTED VALUES C IN DHAT. THE REGRESSION COEFFICIENTS ARE RETURNED IN C: C C(1) = INTERCEPT, C(2) = SLOPE. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION DISS(N), DIST(N), DHAT(N), . AVDISS, SSDISS, AVDIST, SPROD, C(2), FN C C COMPUTE MEANS, SUMS OF SQUARES AND SUM OF PRODUCTS C FN=DBLE(N) AVDIST=0.0D0 AVDISS=0.0D0 DO K=1,N AVDIST=AVDIST+DIST(K) AVDISS=AVDISS+DISS(K) ENDDO AVDIST=AVDIST/FN AVDISS=AVDISS/FN SSDISS=0.0D0 SPROD=0.0D0 DO K=1,N SSDISS=SSDISS+(DISS(K)-AVDISS)**2 SPROD=SPROD+(DIST(K)-AVDIST)*(DISS(K)-AVDISS) ENDDO C C COMPUTE SLOPE AND INTERCEPT C C(2)=SPROD/SSDISS C(1)=AVDIST-C(2)*AVDISS C C CALCULATE FITTED VALUES C DO K=1,N DHAT(K)=C(1)+C(2)*DISS(K) ENDDO RETURN END SUBROUTINE LINREG SUBROUTINE MACOPY (A,MAXN1,N,M,B,MAXN2) C C COPY MATRIX A(N,M) TO B(N,M). C C CAN BE USED TO PACK AN ARRAY BY PASSING THE SAME ARRAY AS A AND B, C WITH MAXN2 SET TO N. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXN1,M), B(MAXN2,M) C DO J=1,M DO I=1,N B(I,J)=A(I,J) ENDDO ENDDO RETURN END SUBROUTINE MACOPY SUBROUTINE MAINIT (X,M,N,MAXM,CONST) C C INITIALIZES MATRIX X(M,N) WITH THE VALUE CONST. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION X(MAXM,N), CONST C DO J=1,N DO I=1,M X(I,J)=CONST ENDDO ENDDO RETURN END SUBROUTINE MAINIT SUBROUTINE MAMAB (A,B,L,M,N,MAXL1,MAXM,C,MAXL2) C C MATRIX MULTIPLICATION C=A.B C C MATRIX A(L,M) is multiplied by B(M,N) to give C(L,N) C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXL1,M), B(MAXM,N), C(MAXL2,N) C DO I=1,L DO J=1,N C(I,J)=0.0 DO K=1,M C(I,J)=C(I,J)+A(I,K)*B(K,J) ENDDO ENDDO ENDDO RETURN END SUBROUTINE MAMAB SUBROUTINE MAMAS (A,MAXL,L,M,S) C C MULTIPLY MATRIX A(L,M) BY THE SCALAR S C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXL,M), S C DO I=1,L DO J=1,M A(I,J)=A(I,J)*S ENDDO ENDDO RETURN END SUBROUTINE MAMAS SUBROUTINE MAMATA (A,L,M,MAXL,B,MAXM) C C MATRIX MULTIPLICATION B=A'.A C C The transpose of matrix A(L,M) is multiplied A(L,M) to give B(M,M) C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXL,M), B(MAXM,M) C C COMPUTE B C DO I=1,M DO J=1,I B(I,J)=0.0 DO K=1,L B(I,J)=B(I,J)+A(K,I)*A(K,J) ENDDO B(J,I)=B(I,J) ENDDO ENDDO RETURN END SUBROUTINE MAMATA SUBROUTINE MANORM (A,MAXL,L,M,IOP) C C NORMALIZE THE ROWS (IOP=1) OR COLUMNS (IOP=2) OF THE MATRIX A(L,M) C (I.E. ADJUST THE SUMS OF SQUARED ELEMENTS TO 1.0). C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION A(MAXL,M), SUMSQ, FACTOR, SMALL C SMALL=SQRT(EPSILON(SUMSQ)) C C NORMALIZE ROWS C IF (IOP.EQ.1) THEN DO I=1,L SUMSQ=0.0D0 DO J=1,M SUMSQ=SUMSQ+A(I,J)*A(I,J) ENDDO IF (SUMSQ.GT.SMALL) THEN FACTOR=1.0/SQRT(SUMSQ) DO J=1,M A(I,J)=A(I,J)*FACTOR ENDDO ENDIF ENDDO C C NORMALIZE COLUMNS C ELSE DO J=1,M SUMSQ=0.0D0 DO I=1,L SUMSQ=SUMSQ+A(I,J)*A(I,J) ENDDO IF (SUMSQ.GT.SMALL) THEN FACTOR=1.0/SQRT(SUMSQ) DO I=1,L A(I,J)=A(I,J)*FACTOR ENDDO ENDIF ENDDO ENDIF RETURN END SUBROUTINE MANORM SUBROUTINE MONREG (DISS,DIST,DHAT,IIDX,JIDX,IWORK,N,ITIES) C C PERFORMS KRUSKAL'S MONOTONE REGRESSION OF DIST ON DISS, PLACING THE C FITTED VALUES IN DHAT. C C ASSUMES THAT DISS HAS BEEN SORTED ASCENDING. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C INTEGER IIDX(N), JIDX(N) INTEGER IWORK(N) DOUBLE PRECISION DISS(N), DIST(N), DHAT(N), DNEXT, TOLER, SUM, . DHATAV C---Tolerance used to test if dissimilarities are equal TOLER=SQRT(EPSILON(SUM)) C*********************************************************************** C C CREATE INITIAL PARTITION: C C PRE-PROCESS BLOCKS OF TIED DISS VALUES DEPENDING ON THE SELECTED C TIE TREATMENT (ITIES) C----------------------------------------------------------------------- J=0 DO I=1,N IF (I.LT.N) THEN DNEXT=DISS(I+1) ELSE C---Bug fix January 7, 2016: correctly handles huge dissimilarities C DNEXT=DISS(I)+1.0 DNEXT=DISS(I)*2.0 END IF IF (ABS(DNEXT-DISS(I)).GT.TOLER) THEN C---NTIE is the number of DISS values in the current group of tied values NTIE=I-J IF (NTIE.GT.1) THEN IF (ITIES.LE.1) THEN C---Primary tie treatment: sort DIST values within this tied group into C ascending order, permuting the index vectors accordingly. C Initialize fitted values, DHAT, to be equal to DIST and make each C value an intial block of size 1. CALL ASORT4 (DIST(J+1),NTIE,IIDX(J+1),JIDX(J+1)) DO K=J+1,I DHAT(K)=DIST(K) IWORK(K)=1 ENDDO ELSE C---Secondary tie treatment: set fitted value for all members of this C tied group to the average of the DIST values for the group. Make C the group of tied values an initial block equal in size to the C number of tied values. IF (NTIE.EQ.2) THEN SUM=DIST(J+1)+DIST(I) ELSE SUM=0.0 DO K=J+1,I SUM=SUM+DIST(K) ENDDO ENDIF DHAT(J+1)=SUM DHAT(I)=SUM IWORK(J+1)=NTIE IWORK(I)=NTIE ENDIF ELSE C---Initially, make each unique (not tied) value is DISS a block of C size 1. IWORK(I)=1 DHAT(I)=DIST(I) ENDIF J=I ENDIF ENDDO C*********************************************************************** C C NOW START THE MONOTONE REGRESSION PROCEDURE C C ICURR is the block we are currently examining. C C WE START BY LOOKING AT THE FIRST BLOCK. C----------------------------------------------------------------------- ICURR=1 C----------------------------------------------------------------------- C START OF PROCEDURE FOR THE CURRENT BLOCK. IT IS INITIALLY UP-ACTIVE, C AND NEITHER UP- NOR DOWN-SATISIFIED. C C UP-ACTIVE (IACTIV=1) means we are comparing DHAT for the current C block with DHAT for blocks to its right. C C DOWN-ACTIVE (IACTIV=0) means we are comparing DHAT for the current C block with DHAT for blocks to its left. C C UP-SATISFIED means that DHAT for the current block is less than DHAT C for the block to its right. C C DOWN-SATISFIED means that DHAT for the current block is greater than C DHAT for the block to its left. C C NSATIS will be 2 once a block is both UP- and DOWN-SATISFIED. C C----------------------------------------------------------------------- 25 IACTIV=1 NSATIS=0 C---Compute DHAT for the current block DHATAV=DHAT(ICURR)/IWORK(ICURR) C----------------------------------------------------------------------- C ACCORDING TO CURRENT ACTIVITY, CHECK WHETHER CURRENT BLOCK IS C UP-SATISFIED (IACTIV=1) OR DOWN-SATISIFED (IACTIV=0) C----------------------------------------------------------------------- 30 IF (IACTIV.EQ.0) THEN C----------------------------------------------------------------------- C CHECK WHETHER THIS BLOCK IS DOWN-SATISIFIED. IF NOT, MERGE. C----------------------------------------------------------------------- IF (ICURR.EQ.1) THEN C---If it's the first block, it is by definition down-satisfied NSATIS=NSATIS+1 ELSEIF (DHATAV.GT.DHAT(ICURR-1)/IWORK(ICURR-1)) THEN C---Current block is down-satisfied NSATIS=NSATIS+1 ELSE C---Current block is not down-satisfied, so merge it with the block to C its left and make the new merged block the current block ICNEW=ICURR-IWORK(ICURR-1) JCNEW=ICURR+IWORK(ICURR)-1 IWORK(ICNEW)=JCNEW-ICNEW+1 IWORK(JCNEW)=IWORK(ICNEW) DHAT(ICNEW)=DHAT(ICURR-1)+DHAT(ICURR) DHAT(JCNEW)=DHAT(ICNEW) ICURR=ICNEW DHATAV=DHAT(ICURR)/IWORK(ICURR) NSATIS=0 ENDIF ELSE C----------------------------------------------------------------------- C CHECK WHETHER THIS BLOCK IS UP-SATISIFIED. IF NOT, MERGE. C----------------------------------------------------------------------- C---Index of first member of the block to the right INEXT=ICURR+IWORK(ICURR) IF (INEXT.GT.N) THEN C---If current block is last block, it is, by definition up-satisified NSATIS=NSATIS+1 ELSEIF (DHATAV.LT.DHAT(INEXT)/IWORK(INEXT)) THEN C---Current block is up-satisfied NSATIS=NSATIS+1 ELSE C---Current block is not up-satisfied, so merge it with the block to C its right and make the new merged block the current block IWORK(ICURR)=IWORK(ICURR)+IWORK(INEXT) JCURR=ICURR+IWORK(ICURR)-1 IWORK(JCURR)=IWORK(ICURR) DHAT(ICURR)=DHAT(ICURR)+DHAT(INEXT) DHAT(JCURR)=DHAT(ICURR) DHATAV=DHAT(ICURR)/IWORK(ICURR) NSATIS=0 ENDIF ENDIF C----------------------------------------------------------------------- C TOGGLE ACTIVITY FOR THE CURRENT BLOCK. CHECK IF IT IS BOTH UP- AND C DOWN-SATISFIED. IF NOT, GO BACK AND KEEP TRYING. C----------------------------------------------------------------------- IACTIV=1-IACTIV IF (NSATIS.LT.2) GO TO 30 C----------------------------------------------------------------------- C ADVANCE TO THE NEXT BLOCK, CHECK IF FINISHED C----------------------------------------------------------------------- ICURR=ICURR+IWORK(ICURR) IF (ICURR.LE.N) GO TO 25 C*********************************************************************** C CHECKING AND MERGING OF BLOCKS IS COMPLETED. NOW PUT APPROPRIATE C AVERAGE VALUES IN ALL ELEMENTS OF DHAT C----------------------------------------------------------------------- ICURR=1 40 IF (IWORK(ICURR).GT.2) THEN DHATAV=DHAT(ICURR)/IWORK(ICURR) DO J=ICURR,ICURR+IWORK(ICURR)-1 DHAT(J)=DHATAV ENDDO ELSEIF (IWORK(ICURR).EQ.2) THEN DHAT(ICURR)=0.5*DHAT(ICURR) DHAT(ICURR+1)=DHAT(ICURR) ENDIF ICURR=ICURR+IWORK(ICURR) IF (ICURR.LT.N) GO TO 40 RETURN END SUBROUTINE MONREG SUBROUTINE NEWCON (X,GRAD,NOBJ,NDIM,MAXOBJ,STEP,SFGR) C C COMPUTES NEW CONFIGURATION, CHANGING EACH CO-ORDINATE ACCORDING TO C THE NEGATIVE GRADIENT. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION X(MAXOBJ,NDIM), GRAD(MAXOBJ,NDIM), STEP, SFGR, . FACTOR C FACTOR=STEP/SFGR DO IDIM=1,NDIM DO IOBJ=1,NOBJ X(IOBJ,IDIM)=X(IOBJ,IDIM)+FACTOR*GRAD(IOBJ,IDIM) ENDDO ENDDO RETURN END SUBROUTINE NEWCON SUBROUTINE NRMCON (X,NOBJ,NDIM,MAXOBJ,SSFACT) C C NORMALIZES THE CURRENT CONFIGURATION IN X(NOBJ,NDIM). THE CENTROID C IS MOVED TO THE ZERO ORIGIN AND THE SUM OF SQUARES ADJUSTED SUCH C THAT THE RMS DISTANCE BETWEEN POINTS AND THE ORIGIN IS 1.0. C C ON RETURN, SSFACT CONTAINS THE SCALING FACTOR WHICH WAS USED. C C Written by Dr. Peter R. Minchin C Department of Biological Sciences C Southern Illinois University Edwardsville C PO Box 1651 C Edwardsville, IL 62026-1651, U.S.A. C Phone: +1-618-650-2975 FAX: +1-618-650-3174 C Email: pminchi@siue.edu C DOUBLE PRECISION X(MAXOBJ,NDIM), SSFACT, FN, FMEAN C C CENTER THE CONFIGURATION AND COMPUTE SCALING FACTOR C FN=DBLE(NOBJ) SSFACT=0.0D0 DO IDIM=1,NDIM FMEAN=0.0D0 DO IOBJ=1,NOBJ FMEAN=FMEAN+X(IOBJ,IDIM) ENDDO FMEAN=FMEAN/FN DO IOBJ=1,NOBJ X(IOBJ,IDIM)=X(IOBJ,IDIM)-FMEAN SSFACT=SSFACT+X(IOBJ,IDIM)**2 ENDDO ENDDO SSFACT=SQRT(FN/SSFACT) C C SCALE THE CONFIGURATION C CALL MAMAS (X,MAXOBJ,NOBJ,NDIM,SSFACT) RETURN END SUBROUTINE NRMCON vegan/src/vegdist.c0000644000176200001440000004001013232070307013742 0ustar liggesusers/* * Distance measures for community ecologists. The measures here were * recommended by Peter Minchin, since they have a good rank-order * relation with gradient distance. The standard distances are found * in standard R library mva in function dist (distance.c). * * The calling program defines the index by a number (internally and * factually). Extra care is needed to get the numbers right there * above when calling the code. * * Number "99" is an extra case: It is not for vegdist.R, but for * something simpler. * * (C) 2001-2005, Jari Oksanen. You are free to use this code if you * accept GPL2. * * Oct 2003: Added Morisita, Horn-Morisita, "Jaccard", and Mountford. * May 2005: Added Raup-Crick. */ /* Standard R headers */ #include #include #include #include /* Indices */ #define MANHATTAN 1 #define EUCLIDEAN 2 #define CANBERRA 3 #define BRAY 4 #define KULCZYNSKI 5 #define GOWER 6 #define MORISITA 7 #define HORN 8 #define MOUNTFORD 9 #define JACCARD 10 #define RAUP 11 #define MILLAR 12 #define CHAO 13 #define GOWERDZ 14 #define CAO 15 #define MAHALANOBIS 16 #define MATCHING 50 #define NOSHARED 99 /* Distance functions */ /* Manhattan distance: duplicates base R */ double veg_manhattan(double *x, int nr, int nc, int i1, int i2) { double dist; int count, j; dist = 0.0; count = 0; for (j=0; j 0 || x[i2] > 0) { dist += fabs( x[i1] - x[i2] ); count++; } } i1 += nr; i2 += nr; } if (count == 0) dist = NA_REAL; dist /= (double) count; return dist; } /* Euclidean distance: duplicates base R. If Mahalanobis * transformation was performred in the calling routine, this will * give Mahalanobis distances. */ double veg_euclidean(double *x, int nr, int nc, int i1, int i2) { double dist, dev; int count, j; count = 0; dist = 0.0; for (j=0; j 0.0) { numer = fabs(x[i1] - x[i2]); dist += numer/denom; } else { dist += R_PosInf; } } } i1 += nr; i2 += nr; } if (count == 0) return NA_REAL; dist /= (double)count; return dist; } /* Bray-Curtis and Jaccard indices: * * Jaccard = (2 * Bray)/(1 + Bray). If Jaccard is requested, Bray is * calculated in this function and it is left as the task of the * caller to translate this into Jaccard. Actually, Jaccard is * redundant, but since people ask for Jaccard, they get it. */ double veg_bray(double *x, int nr, int nc, int i1, int i2) { double dist, total; int count, j; total = 0.0; count = 0; dist = 0; for (j=0; j 0.0 && x[i2] > 0.0) sim++; if (x[i1] > 0) t1++; if (x[i2] > 0) t2++; count++; } i1 += nr; i2 += nr; } if (count == 0) return NA_REAL; if (t1 == 0 || t2 == 0) dist = NA_REAL; else if (sim == 0) dist = 0; else if (sim == t1 || sim == t2) dist = M_LN2; else { J = (double)(sim); A = (double)(t1); B = (double)(t2); dist = 2*J/(2*A*B - (A+B)*J); for (j = 0; j < MAXIT; j++) { oldist = dist; dist -= mount_fun(dist, J, A, B)/mount_der(dist, J, A, B); if(fabs(oldist - dist)/oldist < TOL || fabs(oldist - dist) < EPS) break; } } return 1 - dist/M_LN2; } #undef MAXIT #undef EPS #undef TOL /* Raup-Crick dissimilarity: R code supplied by * Michael.Bedward@environment.nsw.gov.au. * * Here his original comments: * * "Attached is a little function to calculate the probabilistic * Raup-Crick dissimilarity metric for presence-absence data. Rather * than the permutation procedure used in the original reference (Raup * & Crick 1979 Paleontology, as related by Legendre and Legendre in * Numerical Ecology), this function uses phyper() for a faster and * more precise calculcation. I subsequently found that the same * (obvious) idea is in the literature under a variety of other names * (or sometimes no name). * * Compared to other metrics for p/a data, Raup-Crick seems to be very * robust for small samples." * * This is a direct port from Bedward's R to C (Jari Oksanen, May 2005). */ double veg_raup(double *x, int nr, int nc, int i1, int i2) { double dist, J, A, B; int sim, t1, t2, j, count; sim = 0; t1 = 0; t2 = 0; count = 0; for (j = 0; j < nc; j++) { if (!ISNAN(x[i1]) && !ISNAN(x[i2])) { if (x[i1] > 0.0 && x[i2] > 0.0) sim++; if (x[i1] > 0) t1++; if (x[i2] > 0) t2++; count++; } i1 += nr; i2 += nr; } if (count == 0) return NA_REAL; J = (double) (sim - 1); A = (t1 < t2) ? (double) t1 : (double) t2; B = (t1 < t2) ? (double) t2 : (double) t1; dist = 1 - phyper(J, A, (double) count - A, B, 1, 0); return dist; } /* "Millar dissimilarity" is unpublished. I found this in the lecture * notes of Marti Anderson over the internet, and she attributes this * idea to her colleague Russell Millar. The index is basically * binomial deviance under H0 that species are equally common in the * two compared communities. This could be easily generalized over * to, say, Poisson case. */ double veg_millar(double *x, int nr, int nc, int i1, int i2) { double dist, t1, t2, nk, lognk; int count, j; count = 0; dist = 0; for (j=0; j 0) ? x[i1] * (log(x[i1]) - lognk) : 0; t2 = (x[i2] > 0) ? x[i2] * (log(x[i2]) - lognk) : 0; dist += (t1 + t2 + nk * M_LN2)/nk; count++; } } if (count==0) return NA_REAL; if (dist < 0) dist = 0; return dist; } /* Chao's index (Ecol. Lett. 8, 148-159; 2005) tries to take into * account the number of unseen shared species using Chao's method for * estimating the number of unseen species. June 2006. */ double veg_chao(double *x, int nr, int nc, int i1, int i2) { double ionce, itwice, jonce, jtwice, itot, jtot, ishare, jshare, ishar1, jshar1; double dist, U, V; int count, j; itot = 0; jtot = 0; ionce = 0; jonce = 0; itwice = 0; jtwice = 0; ishare = 0; jshare = 0; ishar1 = 0; jshar1 = 0; count = 0; for (j=0; j 0 && x[i2] > 0) { ishare += x[i1]; jshare += x[i2]; if (fabs(x[i2] - 1) < 0.01) { ishar1 += x[i1]; jonce += 1; } else if (fabs(x[i2] - 2) < 0.01) { jtwice += 1; } if (fabs(x[i1] - 1) < 0.01) { jshar1 += x[i2]; ionce += 1; } else if (fabs(x[i1] - 2) < 0.01) { itwice += 1; } } } i1 += nr; i2 += nr; } if (count==0) return NA_REAL; U = ishare/itot; if (ishar1 > 0) { if (jonce < 1) jonce = 1; /* Never true if got here? */ if (jtwice < 1) jtwice = 1; U += (jtot - 1)/jtot * jonce/jtwice/2.0 * ishar1/itot; } if (U > 1) U = 1; V = jshare/jtot; if (jshar1 > 0) { if (ionce < 1) ionce = 1; /* This never true? */ if (itwice < 1) itwice = 1; V += (itot - 1)/itot * ionce/itwice/2.0 * jshar1/jtot; } if (V > 1) V = 1; if (U <= 0 || V <= 0) dist = 1; else dist = 1 - U*V/(U + V - U*V); if (dist < 0) dist = 0; return dist; } /* veg_cao implements Cao index (CYd) of Cao Y, Williams WP, Bark AW: * Water Envir Res 69, 95-106; 1997. Anderson MJ & Thompson AA: Ecol * Appl 14, 1921-1935; 2004 use different but equal formulation. */ double veg_cao(double *x, int nr, int nc, int i1, int i2) { double dist, x1, x2, t1, t2; int count, j; count = 0; dist = 0; for (j=0; j 0 && x[i2] > 0) { dist = 0; break; } } i1 += nr; i2 += nr; } if (count == 0) return NA_REAL; return(dist); } /* Simple matching coefficient. This is not to be called from * vegdist, but must be called separately. */ double veg_matching(double *x, int nr, int nc, int i1, int i2) { double dist; int j, count, matches; matches = 0; count = 0; for (j = 0; j>Nֲ R*cXYg0f'[9ά7leD#T**n bL&wP,"мCx]m7c܄Sg>M{C$?۸tܕcr 6"Ջ8G=SO}ާ~!k=oac^u6|KmiBB X11[O`[PK&ޒcaL|v3.u IX}?N ٢ڹ4u*y$O^ڙ+F5lau`zԂO-:*CH9zQ 8l<챽9 DR~z:2vn t6US(x2O޽UfV);OeX~`^yaP!X5?be<qMxоMiS Ndw'_gˤ2{(G)F +t:Y8zX!@q#'qdp801& EZ,4~;c߬D$^]Dw4ddQ~~Q;VSPC6F{#ӛ7jg!o%g+rjqk 1#+\n\L%v NflTh*Q4D.ѣ lɕaOVSs "vd hKXVK.%P/3sP^zU$ C?Ք<_QW}1/n,fURWzm ~ dtd2:#zD)ab/2^dRʍx#Hv*gfeXw}&h=[9 #)%zID!Q, L3-voF`[]0voA`bOznm8.0%MM~kG=RI붥?z]XZ4&30s(egPNJ0: 6M NyR/zX i&p`ûl>yWO{`qhȂ&<0\{ё3N(H}e}}[S":)􍈛f9Ş1 ~ƞ3~x|1). %1QDC!a}-/s?&>e?ϝ_. <)awpH(! $ŗYC<3$K;WZ4v-QNdϪ`^k&7 %>uq׳:ɷ_o~6ue6TZG֮kmʾ|rZsύ?8±Oh$?c|lϰ`421!{Dq"4әb6e@ ,Rq.?W1{= <`v=}Gܸ9~p: $B˜yу|}{ aJwr#慮:syǼqH8infMd ;qF6:SN0Lsf-5UZh6TjPM# Ǐ`>`\R5ad2U~<O{Zaå=6I"h]W{/Lj#:EaRwPzG)4?D4Cz?4\0X4}7͗7<)a9<9ܒ`F~ͮ 4:;TsӋA,,|>}VM=c2vA#Ќчp裍vE '.C)nL7{iT bT+???#<#nO2s%Kg&2y 6Yo 6c2gTH /qyc?H'Δ+`1|h]Qa$j. hDyb-"]*Z͛`\Tng>>8ebemrG;R[OuhJ w,15!1hdژ̉3?y7Noo$N', DobR>S-.)M(M,N*M+=,qXUުiiĪ)&fȮ<=gnwVYI kSjk;,eכ_2Farys.F_}մ^lf*N0d5˲E&yNHo>4Jl6Ǝae?O]Zި:ot9N>\\ѓdSw÷Lk~&0ْ_1C[*fݔ('`aV9vu{26/ 븺]ǙnWx_q֪=3 ċܮtCmtV[CJV@}fanW$$*G}g`^߃#l>v9#Sn}p# `Vc4~ڪE\y4og og6 @b@Z$;SVq eUyF~)Bd̤&s(zD2X~7R6·aAY<į o5ɡ ]\VJn(MuPAefL8=TAָ\1çaSeIú޽98tz҆NtFf1?~fOP{6` _hR  haq {P<#(I`1 9y6b"p dXdOd, b!YCLCVLkdNW&9aӥ쮬j!/^}a.\|^z/x^Mշoms3jXˎ(oΝ~.L?Y+M+$M4\@ Q;xz:'~PFȉelb)M&%9 8CpQ.$Lk^nz\Zeu3F^ާ>w }[ eg%صU{CG %ea#aˮgw3;=f#gHXM7Z%^GvE/,R<2czzM)#m(2 W m'zVB \F VN c@В9I0 Nrn͇HB57.gyƯ>J]fm{!rJrQbEG_d" !5/%q 锯\CQlD|(]'4Y E2!`/`tQRg Əxnfl|e9I/$ehud6[ AF%Yd3d4b ʞ3&i˓F<؈5vmTPR ȋNR2+=t0j+!~ΩK۬z{vr(ɒ! 1JӖoB"f;i=҇?^VNc؊g7j^kܘCO*4vs=ѻwƸ s}5/%E( qB0ћώ'y'ɍIqN)еX__>_U3 :D]PlӬ| /(hɏ*;&;i̢Hd-0Ȩ}z{}Xpq PN#_M2I<8H@q-O 0`ӓ&=/.ݺpqCxcvWy~zcex `mǍQb q&R*5e0hRFV\՞=`rDV;Q2]*^~1qi>"u)F$aD6 ǞceNX=AbJ dQpأ [%*m 4}VO{y&wj퀡0{ovCH/EtR/|$|+2(2I\,.@ps \SR`aBRex(pñ,(B=!?&҄C ?Ƴ\v;{maE-p UVΰXmsBDwVH(F+q5) &s[n=:<ڕ{{V{x;.L+Wʔ)q].wFJI0<0J"XIF X1CL <ς$ !e}XIiI a@.=WDb;6wWp:tA hA_IuE>R'߫{4r1=qRo$>1~F=]Ʈew9{|Ip3f/!K''5d $yxx+f9L83x q PsȟޡMd7B *.R, !XYA(r-tKȂ'$m)xZKUכ}U49]hx AfL B[d@Dϣfv RZW_/oIm_( ʽ'+`w{ސX}`DwxaLlɮXs+ 6.;G65jy5Vlykx̻߶YtmC:4NOa-ySQ4 H͕AK~(V?-g}^v QȭJm7 +N3XQdv&rݵ# ^\4x_n?ZGzqm{Ȃb1^K\w~DXOƛ ڬ.#.]3ϛИGEzQMrC䐀-֕=9oq)'{˹hb-G1sKJL$4mlďW}3dss.<,3^ce?fW57/jv2]h2p~~kڡ?b|v }}| |֡CFn#]E'og<:nG<ރP N v._3< *r.XYWk @0A+.E1)2&KZ&B7 \1k6 pr#m(5kB7BȨ.-~hP%4V0wo}xD rMOo<Ʀ揄D\wբ@5 o7؉v(L''=ӽӃ sŹr[_&,kZZyC|fo<=׃i^&&XP>!&&:ڦ5჊oŊڄ5F׍}%?+xf4}IT 80:V _5`~h\([%:B;T!*|uqKٶˋثmx{;smh[ &=ᡛȍJ6֓rW h>v{`qLҝRo7NHD8=bYs,I-AZXm,gc-圕*G;-7^1lŕOO}#S͏VFn ϲϊtI|dOrS)))))dIIg+nZM|/h ! K=5p}NN GG(iҤ37wS;YX"(.ip٣PR D&_V?aOohhjkƶ6u_w}G u {N [Yq ~!|!aDe6D)Xx@z~'˙-݊2[a/S)0NxmfX u oVo4(&a5)%΋:$Y=E"^&ٽz\B/"1d_+ =bzaIȻP_j^nRb&IL o;>pѮ#WQ~إ'?˻/]Ji闿|~=)N3=9wk{haA||fFQy̧R%i/8rZVVpϢˈsqIc?D oTt GS53軥o[1RA_'%P7ڣ;kF6ޑ*#ڕ"/-ӈ'u fjV[>}LC>^j3syV}Z=-|a#>kzVo'>ߤkNѧ2#}%bto۾._Tpҥyk|-K}-w_A ,wja;7)k]VK]=HMhxëJԾVhY<\b3\I.pUN9' }5R("^xާs,K Yk ba7`%o-ȷ j3^%}?W4N*fmṊz@䬀$lխsD)Řl7' d~aMC-Ǜ w̗K7o̿q~5lj&\JJOu"ɬ@xAo0o3+ӥbE bk_o6_L0%zb~kPYjiݙ=3]w-FzcsvLI CL6t*W?|lEhsї6s[BY7FN*)1KST1_D&39vMvs// MpVpU ryd2{,vrDm]"[[[|xB׾u!yiٲ۱ guuҏP~3?{I?>&~5Cw+DYz>cXFO:ful7 /3{ٗ&0{;Şγ9RS@Xj[YgF3%<.qcܓy 26`c6Z#t˓sɠSOwïR⮤K\GQ=}Y5וflfJoS}svWic/ Ibf>o1t] K!m|okúëg,k.7;;r_w)k}"RÞQϷmR;j?}3h-K3  '|r@û ې"ii?)r}oG~i>p?<Ő"}l8?- wuِRL|H "ϣFFmC4TBz2(H 3W 3`f`.:6Q!A&iΤ뫛:`d|ڔkhz|HGɏ[2,oXXvE͈o`?yŮOoy=ڻ/GUGqگ~Lrn]HAŨ2T`]0Ah0 AC07FQ`Ơ{нh2^fN\5<ܓkӻ_Up>|49ڱE5@ p\2$ c$Vbgݢg>'>dۇݾ 5F-;N^F&>³#"hHc }p/jjL\ ݻA!l@c|4Ooi8'*GNapjczǡ8 DXd!E_w{` h}8Xk v=mCx-{!m 6aȞ 6n%`6}e2_`WzM8їn@3E  h=|]KZ󀰦RX3HXk 5š,aM&UX+DVQ0`u("+7ھR44YzdL7LxL_B ^c?uՎE"k%wcڭV(0}h<$|?jh5kh͚5WLÆCG533-ŌP]xgIaF:lǻJaJmh3cfpxmC3hVP.ޭnx_I>OkTxxgn3$ڤkm:/AC6C:/ц5Nk BA >Z >u[mmL1=mMS{Eߖ TAlX9axEH?a U5, V7L\;iu`>dب}땪ƞJϒ3|dzx`@ɿS=VggMϚLdh*:zys|gS endstream endobj 13 0 obj 13955 endobj 14 0 obj << /Type /FontDescriptor /Ascent 1000 /CapHeight 769 /Descent -250 /Flags 33 /FontBBox [ -144 -422 748 1223 ] /FontName /FFYBXK+Monaco /ItalicAngle 0 /StemV 0 /Leading 83 /MaxWidth 600 /XHeight 553 /FontFile2 12 0 R >> endobj 15 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] endobj 6 0 obj << /Type /Font /Subtype /TrueType /BaseFont /FFYBXK+Monaco /FontDescriptor 14 0 R /Widths 15 0 R /FirstChar 32 /LastChar 124 /Encoding /MacRomanEncoding >> endobj 16 0 obj << /Length 17 0 R /Length1 4236 /Filter /FlateDecode >> stream xڅV T,8?X@M8 ш@+D]%ILb5nZsR/i3,.jc$4ǞxjzcYv޾w{0AWC PJ?POihkUk~y'4ki5tⳛ7?g ,E$C0EF2k%(VS8FJ5`H7hp*z`z)Uxs8~q ^<؄0B'6n#nYpk<sH{a#<r ;d >!%@>y0a 4 *v ƣF!$f WQŸ8eCB0y-rڨ1ZMF8jl>3 Go.Z }bXm8F`PUpR a=vda*t }p\8Ep2Y❖W-]"0ޢB5BUl?ށcyG`'/f8Z).;0@!B8D>},.>eȧ,jQN~ WȗJ&q!,6itC:>}+&?*(C}K̊>8G) NrV'P,;mdSYG|XŸ!QvIp c)6W#_=*>gd.2ZZj 9cVh+|ꂯѓ437/cj!hOnwFgYFQN\eut>w ůyĻJcZS*/e>C PJk>i)cYKS:{r"tToHv7jMsA<% }imW>5:y5\~M3:ݫўku9s76iHIC7c!@gx\15 EKJc>VHX&19 ŋ+m8bp0M/Ùӝjնd0UНfNhu% -, Zߣ/5&oIr`dbYn0~ N͵.mԊf?ŗ/|fߞ#o]̳pb 1mr:tMLK|)ٕeZ$ EAc|HKZ%ȩj3.0>J CI Vk2FLg Iiݒ3g!"lۑ6E tLOz"t&N܊z"]BgVI̬c0N{/H3?o;F(*#g Q"tƈG#'^K#G cx' mh ەTaF70;y;0=rwuk} Lc Mȯ\jޫbjk~IA%/qUY]gBSyBN7^lfORAwyT[kW3ESNEt*'JV!W&y6JHi-̗> endobj 19 0 obj [ 600 600 ] endobj 20 0 obj << /Length 21 0 R /Filter /FlateDecode >> stream x]PAj0{LA(9AI6dimJ$)0ٙYF%߂F,[Fqj긳IyS[SKa9og`4ܕIxRI ]5!=&6ǔs|A^o38{1(5U%U2$O[vQ+;N%k̛ B*WRZ>y9|N<sU endstream endobj 21 0 obj 229 endobj 7 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ZBLSFD+Monaco /FontDescriptor 18 0 R /Widths 19 0 R /FirstChar 33 /LastChar 34 /ToUnicode 20 0 R >> endobj 22 0 obj << /Author (legendre) /Creator (BBEdit Lite) /CreationDate (D:20051128165431-05'00') /ModDate (D:20051128165431-05'00') /Producer (Mac OS X 10.4.3 Quartz PDFContext) /Title (Varpart2-3 procedures \(65%\).txt) >> endobj xref 0 23 0000000000 00000 n 0000007342 00000 n 0000000022 00000 n 0000007446 00000 n 0000007322 00000 n 0000008384 00000 n 0000023247 00000 n 0000027050 00000 n 0000008419 00000 n 0000007556 00000 n 0000008364 00000 n 0000008502 00000 n 0000008552 00000 n 0000022598 00000 n 0000022620 00000 n 0000022855 00000 n 0000023418 00000 n 0000026442 00000 n 0000026463 00000 n 0000026697 00000 n 0000026725 00000 n 0000027030 00000 n 0000027210 00000 n trailer << /Size 23 /Root 11 0 R /Info 22 0 R /ID [ ] >> startxref 27438 %%EOF vegan/vignettes/diversity-vegan.Rnw0000644000176200001440000007732713231354436017216 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Diversity analysis in vegan} \documentclass[a4paper,10pt,twocolumn]{article} \usepackage{vegan} %% vegan setup %% TODO: SSarrhenius, adipart, beals update, betadisper %% expansion (+ permutest), contribdiv, eventstar, multipart, refer to %% FD, check Kindt reference to specaccum, check estimateR ref \title{Vegan: ecological diversity} \author{Jari Oksanen} \date{\footnotesize{ processed with vegan \Sexpr{packageDescription("vegan", field="Version")} in \Sexpr{R.version.string} on \today}} %% need no \usepackage{Sweave} \begin{document} \bibliographystyle{jss} \SweaveOpts{strip.white=true} <>= par(mfrow=c(1,1)) options(width=55) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "> ", "continue" = " ") @ \maketitle \begin{abstract} This document explains diversity related methods in \pkg{vegan}. The methods are briefly described, and the equations used them are given often in more detail than in their help pages. The methods discussed include common diversity indices and rarefaction, families of diversity indices, species abundance models, species accumulation models and beta diversity, extrapolated richness and probability of being a member of the species pool. The document is still incomplete and does not cover all diversity methods in \pkg{vegan}. \end{abstract} \tableofcontents \noindent The \pkg{vegan} package has two major components: multivariate analysis (mainly ordination), and methods for diversity analysis of ecological communities. This document gives an introduction to the latter. Ordination methods are covered in other documents. Many of the diversity functions were written by Roeland Kindt, Bob O'Hara and P{\'e}ter S{\'o}lymos. Most diversity methods assume that data are counts of individuals. The methods are used with other data types, and some people argue that biomass or cover are more adequate than counts of individuals of variable sizes. However, this document mainly uses a data set with counts: stem counts of trees on $1$\,ha plots in the Barro Colorado Island. The following steps make these data available for the document: <<>>= library(vegan) data(BCI) @ \section{Diversity indices} Function \code{diversity} finds the most commonly used diversity indices \citep{Hill73number}: \begin{align} H &= - \sum_{i=1}^S p_i \log_b p_i & \text{Shannon--Weaver}\\ D_1 &= 1 - \sum_{i=1}^S p_i^2 &\text{Simpson}\\ D_2 &= \frac{1}{\sum_{i=1}^S p_i^2} &\text{inverse Simpson}\,, \end{align} where $p_i$ is the proportion of species $i$, and $S$ is the number of species so that $\sum_{i=1}^S p_i = 1$, and $b$ is the base of the logarithm. It is most common to use natural logarithms (and then we mark index as $H'$), but $b=2$ has theoretical justification. The default is to use natural logarithms. Shannon index is calculated with: <<>>= H <- diversity(BCI) @ which finds diversity indices for all sites. \pkg{Vegan} does not have indices for evenness (equitability), but the most common of these, Pielou's evenness $J = H'/\log(S)$ is easily found as: <<>>= J <- H/log(specnumber(BCI)) @ where \code{specnumber} is a simple \pkg{vegan} function to find the numbers of species. \pkg{vegan} also can estimate series of R\'{e}nyi and Tsallis diversities. R{\'e}nyi diversity of order $a$ is \citep{Hill73number}: \begin{equation} H_a = \frac{1}{1-a} \log \sum_{i=1}^S p_i^a \,, \end{equation} and the corresponding Hill number is $N_a = \exp(H_a)$. Many common diversity indices are special cases of Hill numbers: $N_0 = S$, $N_1 = \exp(H')$, $N_2 = D_2$, and $N_\infty = 1/(\max p_i)$. The corresponding R\'{e}nyi diversities are $H_0 = \log(S)$, $H_1 = H'$, $H_2 = - \log(\sum p_i^2)$, and $H_\infty = - \log(\max p_i)$. Tsallis diversity of order $q$ is \citep{Tothmeresz95}: \begin{equation} H_q = \frac{1}{q-1} \left(1 - \sum_{i=1}^S p^q \right) \, . \end{equation} These correspond to common diversity indices: $H_0 = S-1$, $H_1 = H'$, and $H_2 = D_1$, and can be converted to Hill numbers: \begin{equation} N_q = (1 - (q-1) H_q )^\frac{1}{1-q} \, . \end{equation} We select a random subset of five sites for R\'{e}nyi diversities: <<>>= k <- sample(nrow(BCI), 6) R <- renyi(BCI[k,]) @ We can really regard a site more diverse if all of its R\'{e}nyi diversities are higher than in another site. We can inspect this graphically using the standard \code{plot} function for the \code{renyi} result (Fig.~\ref{fig:renyi}). \begin{figure} <>= print(plot(R)) @ \caption{R\'{e}nyi diversities in six randomly selected plots. The plot uses Trellis graphics with a separate panel for each site. The dots show the values for sites, and the lines the extremes and median in the data set.} \label{fig:renyi} \end{figure} Finally, the $\alpha$ parameter of Fisher's log-series can be used as a diversity index \citep{FisherEtal43}: <<>>= alpha <- fisher.alpha(BCI) @ \section{Rarefaction} Species richness increases with sample size, and differences in richness actually may be caused by differences in sample size. To solve this problem, we may try to rarefy species richness to the same number of individuals. Expected number of species in a community rarefied from $N$ to $n$ individuals is \citep{Hurlbert71}: \begin{equation} \label{eq:rare} \hat S_n = \sum_{i=1}^S (1 - q_i)\,, \quad\text{where } q_i = \frac{{N-x_i \choose n}}{{N \choose n}} \,. \end{equation} Here $x_i$ is the count of species $i$, and ${N \choose n}$ is the binomial coefficient, or the number of ways we can choose $n$ from $N$, and $q_i$ give the probabilities that species $i$ does \emph{not} occur in a sample of size $n$. This is positive only when $N-x_i \ge n$, but for other cases $q_i = 0$ or the species is sure to occur in the sample. The variance of rarefied richness is \citep{HeckEtal75}: \begin{multline} \label{eq:rarevar} s^2 = q_i (1-q_i) \\ + 2 \sum_{i=1}^S \sum_{j>i} \left[ \frac{{N- x_i - x_j \choose n}}{ {N \choose n}} - q_i q_j\right] \,. \end{multline} Equation~\ref{eq:rarevar} actually is of the same form as the variance of sum of correlated variables: \begin{equation} \VAR \left(\sum x_i \right) = \sum \VAR (x_i) + 2 \sum_{i=1}^S \sum_{j>i} \COV (x_i, x_j) \,. \end{equation} The number of stems per hectare varies in our data set: <<>>= quantile(rowSums(BCI)) @ To express richness for the same number of individuals, we can use: <<>>= Srar <- rarefy(BCI, min(rowSums(BCI))) @ Rarefaction curves often are seen as an objective solution for comparing species richness with different sample sizes. However, rank orders typically differ among different rarefaction sample sizes, rarefaction curves can cross. As an extreme case we may rarefy sample size to two individuals: <<>>= S2 <- rarefy(BCI, 2) @ This will not give equal rank order with the previous rarefaction richness: <<>>= all(rank(Srar) == rank(S2)) @ Moreover, the rarefied richness for two individuals is a finite sample variant of Simpson's diversity index \citep{Hurlbert71}\,--\,or more precisely of $D_1 + 1$, and these two are almost identical in BCI: <<>>= range(diversity(BCI, "simp") - (S2 -1)) @ Rarefaction is sometimes presented as an ecologically meaningful alternative to dubious diversity indices \citep{Hurlbert71}, but the differences really seem to be small. \section{Taxonomic and functional diversity} Simple diversity indices only consider species identity: all different species are equally different. In contrast, taxonomic and functional diversity indices judge the differences of species. Taxonomic and functional diversities are used in different fields of science, but they really have very similar reasoning, and either could be used either with taxonomic or functional traits of species. \subsection{Taxonomic diversity: average distance of traits} The two basic indices are called taxonomic diversity $\Delta$ and taxonomic distinctness $\Delta^*$ \citep{ClarkeWarwick98}: \begin{align} \Delta &= \frac{\sum \sum_{i>= data(dune) data(dune.taxon) taxdis <- taxa2dist(dune.taxon, varstep=TRUE) mod <- taxondive(dune, taxdis) @ \begin{figure} <>= plot(mod) @ \caption{Taxonomic diversity $\Delta^+$ for the dune meadow data. The points are diversity values of single sites, and the funnel is their approximate confidence intervals ($2 \times$ standard error).} \label{fig:taxondive} \end{figure} \subsection{Functional diversity: the height of trait tree} In taxonomic diversity the primary data were taxonomic trees which were transformed to pairwise distances among species. In functional diversity the primary data are species traits which are translated to pairwise distances among species and then to clustering trees of species traits. The argument for using trees is that in this way a single deviant species will have a small influence, since its difference is evaluated only once instead of evaluating its distance to all other species \citep{PetcheyGaston06}. Function \code{treedive} implements functional diversity defined as the total branch length in a trait dendrogram connecting all species, but excluding the unnecessary root segments of the tree \citep{PetcheyGaston02, PetcheyGaston06}. The example uses the taxonomic distances of the previous chapter. These are first converted to a hierarchic clustering (which actually were their original form before \code{taxa2dist} converted them into distances) <<>>= tr <- hclust(taxdis, "aver") mod <- treedive(dune, tr) @ \section{Species abundance models} Diversity indices may be regarded as variance measures of species abundance distribution. We may wish to inspect abundance distributions more directly. \pkg{Vegan} has functions for Fisher's log-series and Preston's log-normal models, and in addition several models for species abundance distribution. \subsection{Fisher and Preston} In Fisher's log-series, the expected number of species $\hat f$ with $n$ individuals is \citep{FisherEtal43}: \begin{equation} \hat f_n = \frac{\alpha x^n}{n} \,, \end{equation} where $\alpha$ is the diversity parameter, and $x$ is a nuisance parameter defined by $\alpha$ and total number of individuals $N$ in the site, $x = N/(N-\alpha)$. Fisher's log-series for a randomly selected plot is (Fig.~\ref{fig:fisher}): <<>>= k <- sample(nrow(BCI), 1) fish <- fisherfit(BCI[k,]) fish @ \begin{figure} <>= plot(fish) @ \caption{Fisher's log-series fitted to one randomly selected site (\Sexpr{k}).} \label{fig:fisher} \end{figure} We already saw $\alpha$ as a diversity index. Preston's log-normal model is the main challenger to Fisher's log-series \citep{Preston48}. Instead of plotting species by frequencies, it bins species into frequency classes of increasing sizes. As a result, upper bins with high range of frequencies become more common, and sometimes the result looks similar to Gaussian distribution truncated at the left. There are two alternative functions for the log-normal model: \code{prestonfit} and \code{prestondistr}. Function \code{prestonfit} uses traditionally binning approach, and is burdened with arbitrary choices of binning limits and treatment of ties. It seems that Preston split ties between adjacent octaves: only half of the species observed once were in the first octave, and half were transferred to the next octave, and the same for all species at the octave limits occurring 2, 4, 8, 16\ldots times \citep{WilliamsonGaston05}. Function \code{prestonfit} can either split the ties or keep all limit cases in the lower octave. Function \code{prestondistr} directly maximizes truncated log-normal likelihood without binning data, and it is the recommended alternative. Log-normal models usually fit poorly to the BCI data, but here our random plot (number \Sexpr{k}): <<>>= prestondistr(BCI[k,]) @ \subsection{Ranked abundance distribution} An alternative approach to species abundance distribution is to plot logarithmic abundances in decreasing order, or against ranks of species \citep{Whittaker65}. These are known as ranked abundance distribution curves, species abundance curves, dominance--diversity curves or Whittaker plots. Function \code{radfit} fits some of the most popular models \citep{Bastow91} using maximum likelihood estimation: \begin{align} \hat a_r &= \frac{N}{S} \sum_{k=r}^S \frac{1}{k} &\text{brokenstick}\\ \hat a_r &= N \alpha (1-\alpha)^{r-1} & \text{preemption} \\ \hat a_r &= \exp \left[\log (\mu) + \log (\sigma) \Phi \right] &\text{log-normal}\\ \hat a_r &= N \hat p_1 r^\gamma &\text{Zipf}\\ \hat a_r &= N c (r + \beta)^\gamma &\text{Zipf--Mandelbrot} \end{align} In all these, $\hat a_r$ is the expected abundance of species at rank $r$, $S$ is the number of species, $N$ is the number of individuals, $\Phi$ is a standard normal function, $\hat p_1$ is the estimated proportion of the most abundant species, and $\alpha$, $\mu$, $\sigma$, $\gamma$, $\beta$ and $c$ are the estimated parameters in each model. It is customary to define the models for proportions $p_r$ instead of abundances $a_r$, but there is no reason for this, and \code{radfit} is able to work with the original abundance data. We have count data, and the default Poisson error looks appropriate, and our example data set gives (Fig.~\ref{fig:rad}): <<>>= rad <- radfit(BCI[k,]) rad @ \begin{figure} <>= print(radlattice(rad)) @ \caption{Ranked abundance distribution models for a random plot (no. \Sexpr{k}). The best model has the lowest \textsc{aic}.} \label{fig:rad} \end{figure} Function \code{radfit} compares the models using alternatively Akaike's or Schwartz's Bayesian information criteria. These are based on log-likelihood, but penalized by the number of estimated parameters. The penalty per parameter is $2$ in \textsc{aic}, and $\log S$ in \textsc{bic}. Brokenstick is regarded as a null model and has no estimated parameters in \pkg{vegan}. Preemption model has one estimated parameter ($\alpha$), log-normal and Zipf models two ($\mu, \sigma$, or $\hat p_1, \gamma$, resp.), and Zipf--Mandelbrot model has three ($c, \beta, \gamma$). Function \code{radfit} also works with data frames, and fits models for each site. It is curious that log-normal model rarely is the choice, although it generally is regarded as the canonical model, in particular in data sets like Barro Colorado tropical forests. \section{Species accumulation and beta diversity} Species accumulation models and species pool models study collections of sites, and their species richness, or try to estimate the number of unseen species. \subsection{Species accumulation models} Species accumulation models are similar to rarefaction: they study the accumulation of species when the number of sites increases. There are several alternative methods, including accumulating sites in the order they happen to be, and repeated accumulation in random order. In addition, there are three analytic models. Rarefaction pools individuals together, and applies rarefaction equation (\ref{eq:rare}) to these individuals. Kindt's exact accumulator resembles rarefaction \citep{UglandEtal03}: \begin{multline} \label{eq:kindt} \hat S_n = \sum_{i=1}^S (1 - p_i), \,\quad \text{where } p_i = \frac{{N- f_i \choose n}}{{N \choose n}} \,, \end{multline} and $f_i$ is the frequency of species $i$. Approximate variance estimator is: \begin{multline} \label{eq:kindtvar} s^2 = p_i (1 - p_i) \\ + 2 \sum_{i=1}^S \sum_{j>i} \left( r_{ij} \sqrt{p_i(1-p_i)} \sqrt{p_j (1-p_j)}\right) \,, \end{multline} where $r_{ij}$ is the correlation coefficient between species $i$ and $j$. Both of these are unpublished: eq.~\ref{eq:kindt} was developed by Roeland Kindt, and eq.~\ref{eq:kindtvar} by Jari Oksanen. The third analytic method was suggested by \citet{Coleman82}: \begin{equation} \label{eq:cole} S_n = \sum_{i=1}^S (1 - p_i), \quad \text{where } p_i = \left(1 - \frac{1}{n}\right)^{f_i} \,, \end{equation} and the suggested variance is $s^2 = p_i (1-p_i)$ which ignores the covariance component. In addition, eq.~\ref{eq:cole} does not properly handle sampling without replacement and underestimates the species accumulation curve. The recommended is Kindt's exact method (Fig.~\ref{fig:sac}): <>= sac <- specaccum(BCI) plot(sac, ci.type="polygon", ci.col="yellow") @ \begin{figure} <>= <> @ \caption{Species accumulation curve for the BCI data; exact method.} \label{fig:sac} \end{figure} \subsection{Beta diversity} \citet{Whittaker60} divided diversity into various components. The best known are diversity in one spot that he called alpha diversity, and the diversity along gradients that he called beta diversity. The basic diversity indices are indices of alpha diversity. Beta diversity should be studied with respect to gradients \citep{Whittaker60}, but almost everybody understand that as a measure of general heterogeneity \citep{Tuomisto10a, Tuomisto10b}: how many more species do you have in a collection of sites compared to an average site. The best known index of beta diversity is based on the ratio of total number of species in a collection of sites $S$ and the average richness per one site $\bar \alpha$ \citep{Tuomisto10a}: \begin{equation} \label{eq:beta} \beta = S/\bar \alpha - 1 \,. \end{equation} Subtraction of one means that $\beta = 0$ when there are no excess species or no heterogeneity between sites. For this index, no specific functions are needed, but this index can be easily found with the help of \pkg{vegan} function \code{specnumber}: <<>>= ncol(BCI)/mean(specnumber(BCI)) - 1 @ The index of eq.~\ref{eq:beta} is problematic because $S$ increases with the number of sites even when sites are all subsets of the same community. \citet{Whittaker60} noticed this, and suggested the index to be found from pairwise comparison of sites. If the number of shared species in two sites is $a$, and the numbers of species unique to each site are $b$ and $c$, then $\bar \alpha = (2a + b + c)/2$ and $S = a+b+c$, and index~\ref{eq:beta} can be expressed as: \begin{equation} \label{eq:betabray} \beta = \frac{a+b+c}{(2a+b+c)/2} - 1 = \frac{b+c}{2a+b+c} \,. \end{equation} This is the S{\o}rensen index of dissimilarity, and it can be found for all sites using \pkg{vegan} function \code{vegdist} with binary data: <<>>= beta <- vegdist(BCI, binary=TRUE) mean(beta) @ There are many other definitions of beta diversity in addition to eq.~\ref{eq:beta}. All commonly used indices can be found using \code{betadiver} \citep{KoleffEtal03}. The indices in \code{betadiver} can be referred to by subscript name, or index number: <<>>= betadiver(help=TRUE) @ Some of these indices are duplicates, and many of them are well known dissimilarity indices. One of the more interesting indices is based on the Arrhenius species--area model \begin{equation} \label{eq:arrhenius} \hat S = c X^z\,, \end{equation} where $X$ is the area (size) of the patch or site, and $c$ and $z$ are parameters. Parameter $c$ is uninteresting, but $z$ gives the steepness of the species area curve and is a measure of beta diversity. In islands typically $z \approx 0.3$. This kind of islands can be regarded as subsets of the same community, indicating that we really should talk about gradient differences if $z \gtrapprox 0.3$. We can find the value of $z$ for a pair of plots using function \code{betadiver}: <<>>= z <- betadiver(BCI, "z") quantile(z) @ The size $X$ and parameter $c$ cancel out, and the index gives the estimate $z$ for any pair of sites. Function \code{betadisper} can be used to analyse beta diversities with respect to classes or factors \citep{Anderson06, AndersonEtal06}. There is no such classification available for the Barro Colorado Island data, and the example studies beta diversities in the management classes of the dune meadows (Fig.~\ref{fig:betadisper}): <<>>= data(dune) data(dune.env) z <- betadiver(dune, "z") mod <- with(dune.env, betadisper(z, Management)) mod @ \begin{figure} <>= boxplot(mod) @ \caption{Box plots of beta diversity measured as the average steepness ($z$) of the species area curve in the Arrhenius model $S = cX^z$ in Management classes of dune meadows.} \label{fig:betadisper} \end{figure} \section{Species pool} \subsection{Number of unseen species} Species accumulation models indicate that not all species were seen in any site. These unseen species also belong to the species pool. Functions \code{specpool} and \code{estimateR} implement some methods of estimating the number of unseen species. Function \code{specpool} studies a collection of sites, and \code{estimateR} works with counts of individuals, and can be used with a single site. Both functions assume that the number of unseen species is related to the number of rare species, or species seen only once or twice. The incidence-based functions group species by their number of occurrences $f_i = f_0, f_1, \ldots, f_N$, where $f$ is the number of species occuring in exactly $i$ sites in the data: $f_N$ is the number of species occurring on every $N$ site, $f_1$ the number of species occurring once, and $f_0$ the number of species in the species pool but not found in the sample. The total number of species in the pool $S_p$ is \begin{equation} S_p = \sum_{i=0}^N f_i = f_0+ S_o \,, \end{equation} where $S_o = \sum_{i>0} f_i$ is the observed number of species. The sampling proportion $i/N$ is an estimate for the commonness of the species in the community. When species is present in the community but not in the sample, $i=0$ is an obvious under-estimate, and consequently, for values $i>0$ the species commonness is over-estimated \citep{Good53}. The models for the pool size estimate the number of species missing in the sample $f_0$. Function \code{specpool} implements the following models to estimate the number of missing species $f_0$. Chao estimator is \citep{Chao87, ChiuEtal14}: \begin{equation} \label{eq:chao} \hat f_0 = \begin{cases} \frac{f_1^2}{2 f_2} \frac{N-1}{N} &\text{if } f_2 > 0 \\ \frac{f_1 (f_1 -1)}{2} \frac{N-1}{N} & \text{if } f_2 = 0 \,. \end{cases} \end{equation} The latter case for $f_2=0$ is known as the bias-corrected form. \citet{ChiuEtal14} introduced the small-sample correction term $\frac{N}{N-1}$, but it was not originally used \citep{Chao87}. The first and second order jackknife estimators are \citep{SmithVanBelle84}: \begin{align} \hat f_0 &= f_1 \frac{N-1}{N} \\ \hat f_0 & = f_1 \frac{2N-3}{N} + f_2 \frac{(N-2)^2}{N(N-1)} \,. \end{align} The boostrap estimator is \citep{SmithVanBelle84}: \begin{equation} \hat f_0 = \sum_{i=1}^{S_o} (1-p_i)^N \,. \end{equation} The idea in jackknife seems to be that we missed about as many species as we saw only once, and the idea in bootstrap that if we repeat sampling (with replacement) from the same data, we miss as many species as we missed originally. The variance estimaters only concern the estimated number of missing species $\hat f_0$, although they are often expressed as they would apply to the pool size $S_p$; this is only true if we assume that $\VAR(S_o) = 0$. The variance of the Chao estimate is \citep{ChiuEtal14}: \begin{multline} \label{eq:var-chao-basic} \VAR(\hat f_0) = f_1 \left(A^2 \frac{G^3}{4} + A^2 G^2 + A \frac{G}{2} \right),\\ \text{where } A = \frac{N-1}{N}\;\text{and } G = \frac{f_1}{f_2} \,. \end{multline} %% The variance of bias-corrected Chao estimate can be approximated by %% replacing the terms of eq.~\ref{eq:var-chao-basic} with the %% corresponding terms of the bias-correcter form of in eq.~\ref{eq:chao}: %% \begin{multline} %% \label{eq:var-chao-bc} %% s^2 = A \frac{f_1(f_1-1)}{2} + A^2 \frac{f_1(2 f_1+1)^2}{(f_2+1)^2}\\ %% + A^2 \frac{f_1^2 f_2 (f_1 -1)^2}{4 (f_2 + 1)^4} %% \end{multline} For the bias-corrected form of eq.~\ref{eq:chao} (case $f_2 = 0$), the variance is \citep[who omit small-sample correction in some terms]{ChiuEtal14}: \begin{multline} \label{eq:var-chao-bc0} \VAR(\hat f_0) = \tfrac{1}{4} A^2 f_1 (2f_1 -1)^2 + \tfrac{1}{2} A f_1 (f_1-1) \\- \tfrac{1}{4}A^2 \frac{f_1^4}{S_p} \,. \end{multline} The variance of the first-order jackknife is based on the number of ``singletons'' $r$ (species occurring only once in the data) in sample plots \citep{SmithVanBelle84}: \begin{equation} \VAR(\hat f_0) = \left(\sum_{i=1}^N r_i^2 - \frac{f_1}{N}\right) \frac{N-1}{N} \,. \end{equation} Variance of the second-order jackknife is not evaluated in \code{specpool} (but contributions are welcome). The variance of bootstrap estimator is\citep{SmithVanBelle84}: \begin{multline} \VAR(\hat f_0) = \sum_{i=1}^{S_o} q_i (1-q_i) \\ +2 \sum_{i \neq j}^{S_o} \left[(Z_{ij}/N)^N - q_i q_j \right] \\ \text{where } q_i = (1-p_i)^N \, , \end{multline} and $Z_{ij}$ is the number of sites where both species are absent. The extrapolated richness values for the whole BCI data are: <<>>= specpool(BCI) @ If the estimation of pool size really works, we should get the same values of estimated richness if we take a random subset of a half of the plots (but this is rarely true): <<>>= s <- sample(nrow(BCI), 25) specpool(BCI[s,]) @ \subsection{Pool size from a single site} The \code{specpool} function needs a collection of sites, but there are some methods that estimate the number of unseen species for each single site. These functions need counts of individuals, and species seen only once or twice, or other rare species, take the place of species with low frequencies. Function \code{estimateR} implements two of these methods: <<>>= estimateR(BCI[k,]) @ In abundance based models $a_i$ denotes the number of species with $i$ individuals, and takes the place of $f_i$ of previous models. Chao's method is similar as the bias-corrected model eq.~\ref{eq:chao} \citep{Chao87, ChiuEtal14}: \begin{equation} \label{eq:chao-bc} S_p = S_o + \frac{a_1 (a_1 - 1)}{2 (a_2 + 1)}\,. \end{equation} When $f_2=0$, eq.~\ref{eq:chao-bc} reduces to the bias-corrected form of eq.~\ref{eq:chao}, but quantitative estimators are based on abundances and do not use small-sample correction. This is not usually needed because sample sizes are total numbers of individuals, and these are usually high, unlike in frequency based models, where the sample size is the number of sites \citep{ChiuEtal14}. A commonly used approximate variance estimator of eq.~\ref{eq:chao-bc} is: \begin{multline} \label{eq:var-chao-bc} s^2 = \frac{a_1(a_1-1)}{2} + \frac{a_1(2 a_1+1)^2}{(a_2+1)^2}\\ + \frac{a_1^2 a_2 (a_1 -1)^2}{4 (a_2 + 1)^4} \,. \end{multline} However, \pkg{vegan} does not use this, but instead the following more exact form which was directly derived from eq.~\ref{eq:chao-bc} following \citet[web appendix]{ChiuEtal14}: \begin{multline} s^2 = \frac{1}{4} \frac{1}{(a_2+1)^4 S_p} [a_1 (S_p a_1^3 a_2 + 4 S_p a_1^2 a_2^2 \\+ 2 S_p a_1 a_2^3 + 6 S_p a_1^2 a_2 + 2 S_p a_1 a_2^2 -2 S_p a_2^3 \\+ 4 S_p a_1^2 + S_p a_1 a_2 -5 S_p a_2^2 - a_1^3 - 2 a_1^2 a_2\\ - a_1 a_2^2 - 2 S_p a_1 - 4 S_p a_2 - S_p ) ]\,. \end{multline} The variance estimators only concern the number of unseen species like previously. The \textsc{ace} is estimator is defined as \citep{OHara05}: \begin{equation} \begin{split} S_p &= S_\mathrm{abund} + \frac{S_\mathrm{rare}}{C_\mathrm{ACE}} + \frac{a_1}{C_\mathrm{ACE}} \gamma^2\, , \quad \text{where}\\ C_\mathrm{ACE} &= 1 - \frac{a_1}{N_\mathrm{rare}}\\ \gamma^2 &= \frac{S_\mathrm{rare}}{C_\mathrm{ACE}} \sum_{i=1}^{10} i (i-1) a_1 \frac{N_\mathrm{rare} - 1}{N_\mathrm{rare}}\,. \end{split} \end{equation} Now $a_1$ takes the place of $f_1$ above, and means the number of species with only one individual. Here $S_\mathrm{abund}$ and $S_\mathrm{rare}$ are the numbers of species of abundant and rare species, with an arbitrary upper limit of 10 individuals for a rare species, and $N_\mathrm{rare}$ is the total number of individuals in rare species. The variance estimator uses iterative solution, and it is best interpreted from the source code or following \citet{OHara05}. The pool size is estimated separately for each site, but if input is a data frame, each site will be analysed. If log-normal abundance model is appropriate, it can be used to estimate the pool size. Log-normal model has a finite number of species which can be found integrating the log-normal: \begin{equation} S_p = S_\mu \sigma \sqrt{2 \pi} \,, \end{equation} where $S_\mu$ is the modal height or the expected number of species at maximum (at $\mu$), and $\sigma$ is the width. Function \code{veiledspec} estimates this integral from a model fitted either with \code{prestondistr} or \code{prestonfit}, and fits the latter if raw site data are given. Log-normal model may fit poorly, but we can try: <<>>= veiledspec(prestondistr(BCI[k,])) veiledspec(BCI[k,]) @ \subsection{Probability of pool membership} Beals smoothing was originally suggested as a tool of regularizing data for ordination. It regularizes data too strongly, but it has been suggested as a method of estimating which of the missing species could occur in a site, or which sites are suitable for a species. The probability for each species at each site is assessed from other species occurring on the site. Function \code{beals} implement Beals smoothing \citep{McCune87, DeCaceresLegendre08}: <<>>= smo <- beals(BCI) @ We may see how the estimated probability of occurrence and observed numbers of stems relate in one of the more familiar species. We study only one species, and to avoid circular reasoning we do not include the target species in the smoothing (Fig.~\ref{fig:beals}): <>= j <- which(colnames(BCI) == "Ceiba.pentandra") plot(beals(BCI, species=j, include=FALSE), BCI[,j], ylab="Occurrence", main="Ceiba pentandra", xlab="Probability of occurrence") @ \begin{figure} <>= <> @ \caption{Beals smoothing for \emph{Ceiba pentandra}.} \label{fig:beals} \end{figure} \bibliography{vegan} \end{document} vegan/vignettes/vegan.bib0000644000176200001440000002427412727676571015175 0ustar liggesusers @Article{OHara05, author = {R. B. O'Hara}, title = {Species richness estimators: how many species can dance on the head of a pin}, journal = {Journal of Animal Ecology}, year = 2005, volume = 74, pages = {375--386}} @Article{Good53, author = {I. J. Good}, title = {The population frequencies of species and the estimation of population parameters}, journal = {Biometrika}, year = 1953, volume = 40, pages = {237--264}} @Article{ChiuEtal14, author = {C. H. Chiu and Y. T. Wang and B. A. Walther and A. Chao}, title = {An improved nonparametric lower bound of species richness via a modified {G}ood-{T}uring frequency formula}, journal = {Biometrics}, year = 2014, volume = 70, pages = {671--682}} @Article{DeCaceresLegendre08, author = {M. {D}e~{C}{\'a}ceres and P. Legendre}, title = {Beals smoothing revisited}, journal = {Oecologia}, year = 2008, volume = 156, pages = {657--669} } @Article{McCune87, author = {B. Mc{C}une}, title = {Improving community ordination with the {B}eals smoothing function}, journal = {Ecoscience}, year = 1987, volume = 1, pages = {82--86} } @Article{Chao87, author = {A. Chao}, title = {Estimating the population size for capture-recapture data with unequal catchability}, journal = {Biometrics}, year = 1987, volume = 43, pages = {783--791} } @Article{SmithVanBelle84, author = {E. P. Smith and G. {van Belle}}, title = {Nonparametric estimation of species richness}, journal = {Biometrics}, year = 1984, volume = 40, pages = {119--129} } @Article{AndersonEtal06, author = {M. J. Anderson and K. E. Ellingsen and B. H. Mc{A}rdle}, title = {Multivariate dispersion as a measure of beta diversity}, journal = {Ecology Letters}, year = 2006, volume = 9, pages = {683--693} } @Article{Anderson06, author = {M. J. Anderson}, title = {Distance-based tests for homogeneity of multivariate dispersions}, journal = {Biometrics}, year = 2006, volume = 62, pages = {245--253} } @Article{KoleffEtal03, author = {P. Koleff and K. J. Gaston and J. J. Lennon}, title = {Measuring beta diversity for presence-absence data}, journal = {Journal of Animal Ecology}, year = 2003, volume = 72, pages = {367--382} } @Article{Tuomisto10b, author = {H. Tuomisto}, title = {A diversity of beta diversities: straightening up a concept gone awry. 2. Quantifying beta diversity and related phenomena}, journal = {Ecography}, year = 2010, volume = 33, pages = {23--45} } @Article{Tuomisto10a, author = {H. Tuomisto}, title = {A diversity of beta diversities: straightening up a concept gone awry. 1. Defining beta diversity as a function of alpha and gamma diversity}, journal = {Ecography}, year = 2010, volume = 33, pages = {2--22} } @Article{Whittaker60, author = {R. H. Whittaker}, title = {Vegetation of {S}iskiyou mountains, {O}regon and {C}alifornia}, journal = {Ecological Monographs}, year = 1960, volume = 30, pages = {279--338} } @Article{Coleman82, author = {B. D. Coleman and M. A. Mares and M. R. Willis and Y. Hsieh}, title = {Randomness, area and species richness}, journal = {Ecology}, year = 1982, volume = 63, pages = {1121--1133}} @Article{UglandEtal03, author = {K. I. Ugland and J. S. Gray and K. E. Ellingsen}, title = {The species-accumulation curve and estimation of species richness}, journal = {Journal of Animal Ecology}, year = 2003, volume = 72, pages = {888--897} } @Article{Bastow91, author = {J. Bastow Wilson}, title = {Methods of fitting dominance/diversity curves}, journal = {Journal of Vegetation Science}, year = 1991, volume = 2, pages = {35--46} } @Article{Whittaker65, author = {R. H. Whittaker}, title = {Dominance and diversity in plant communities}, journal = {Science}, year = 1965, volume = 147, pages = {250--260}} @Article{WilliamsonGaston05, author = {M. Williamson and K. J. Gaston}, title = {The lognormal distribution is not an appropriate null hypothesis for the species-abundance distribution}, journal = {Journal of Animal Ecology}, year = 2005, volume = 74, pages = {409--422} } @Article{Preston48, author = {F. W. Preston}, title = {The commonness and rarity of species}, journal = {Ecology}, year = 1948, volume = 29, pages = {254--283} } @Article{PetcheyGaston06, author = {O. L. Petchey and K. J. Gaston}, title = {Functional diversity: back to basics and looking forward}, journal = {Ecology Letters}, year = 2006, volume = 9, pages = {741--758} } @Article{PetcheyGaston02, author = {O. L. Petchey and K. J. Gaston}, title = {Functional diversity ({FD}), species richness and community composition}, journal = {Ecology Letters}, year = 2002, volume = 5, pages = {402--411} } @Article{ClarkeWarwick99, author = {K. R. Clarke and R. M Warwick}, title = {The taxonomic distinctness measure of biodiversity: weighting of step lengths between hierarchical levels}, journal = {Marine Ecology Progress Series}, year = 1999, volume = 184, pages = {21--29} } @Article{ClarkeWarwick01, author = {K. R. Clarke and R. M Warwick}, title = {A further biodiversity index applicable to species lists: variation in taxonomic distinctness}, journal = {Marine Ecology Progress Series}, year = 2001, volume = 216, pages = {265--278} } @Article{ClarkeWarwick98, author = {K. R. Clarke and R. M Warwick}, title = {A taxonomic distinctness index and its statistical properties}, journal = {Journal of Applied Ecology}, year = 1998, volume = 35, pages = {523--531} } @Article{HeckEtal75, author = {K. L. Heck and G. {van~Belle} and D. Simberloff}, title = {Explicit calculation of the rarefaction diversity measurement and the determination of sufficient sample size}, journal = {Ecology}, year = 1975, volume = 56, pages = {1459--1461} } @Article{Hurlbert71, author = {S. H. Hurlbert}, title = {The nonconcept of species diversity: a critique and alternative parameters}, journal = {Ecology}, year = 1971, volume = 52, pages = {577--586} } @Article{FisherEtal43, author = {R. A. Fisher and A. S. Corbet and C. B. Williams}, title = {The relation between the number of species and the number of individuals in a random sample of animal population}, journal = {Journal of Animal Ecology}, year = 1943, volume = 12, pages = {42--58} } @Article{Tothmeresz95, author = {B. T{\'o}thm{\'e}r{\'e}sz}, title = {Comparison of different methods for diversity ordering}, journal = {Journal of Vegetation Science}, year = 1995, volume = 6, pages = {283--290}} @Article{Hill73number, author = {M. O. Hill}, title = {Diversity and evenness: a unifying notation and its consequences}, journal = {Ecology}, year = 1973, volume = 54, pages = {427--473} } @Book{Sedgewick90, author = {R. Sedgewick}, title = {Algorithms in {C}}, publisher = {Addison Wesley}, year = 1990} @Article{MiklosPod04, author = {I. Mikl{\'o}s and J. Podani}, title = {Randomization of presence--absence matrices: comments and new algorithms}, journal = {Ecology}, year = 2004, volume = 85, pages = {86-92}} @Article{GotelliEnt01, author = {N. J. Gotelli and G. L. Entsminger}, title = {Swap and fill algorithms in null model analysis: rethinking the knight's tour}, journal = {Oecologia}, year = 2001, volume = 129, pages = {281-291}} @Article{AtmarPat93, author = {W. Atmar and B. D. Patterson}, title = {The measure of order and disorder in the distribution of species in fragmented habitat}, journal = {Oecologia}, year = 1993, volume = 96, pages = {373-382} } @Article{RodGir06, author = {M. A. Rodr{\'i}guez-Giron{\'e}s and L. Santamaria}, title = {A new algorithm to calculate the nestedness temperature of presence--absence matrices}, journal = {Journal of Biogeography}, year = 2006, volume = 33, pages = {921-935}} @article{Palmer93, author = {M. W. Palmer}, title = {Putting things in even better order: The advantages of canonical correspondence analysis}, journal = {Ecology}, volume = {74}, pages = {2215-2230}, year = {1993} } @article{McCune97, author = {B. McCune}, title = {Influence of noisy environmental data on canonical correspondence analysis}, journal = {Ecology}, volume = {78}, pages = {2617-2623}, year = {1997} } @article{Braak86, author = {C. J. F. ter Braak}, title = {Canonical correspondence analysis: a new eigenvector technique for multivariate direct gradient analysis}, journal = {Ecology}, volume = {67}, pages = {1167-1179}, year = {1986} } @Book{Legendre-Legendre98, author = {P. Legendre and L. Legendre}, title = {Numerical ecology}, publisher = {Elsevier}, year = 1998, number = 20, series = {Developments in Environmental Modelling}, address = {Amsterdam}, edition = {2nd} } @book{Jongman87, author = {R. H. Jongman and C. J. F. ter Braak and O. F. R. van Tongeren}, title = {Data analysis in community and landscape ecology}, pages = {299}, publisher = {Pudoc}, address = {Wageningen}, year = {1987} } @Manual{CANOCO4, title = {CANOCO reference manual and user's guide to Canoco for Windows: Software for canonical community ordination (version 4)}, author = {C. J. F ter Braak and P. {\v S}milauer}, organization = {Microcomputer Power}, address = {Ithaca, NY}, year = 1998 } vegan/vignettes/FAQ-vegan.Rmd0000644000176200001440000010040313231354436015535 0ustar liggesusers **vegan** FAQ ============= This document contains answers to some of the most frequently asked questions about R package **vegan**. > This work is licensed under the Creative Commons Attribution 3.0 > License. To view a copy of this license, visit > or send a letter to > Creative Commons, 543 Howard Street, 5th Floor, San Francisco, > California, 94105, USA. > > Copyright © 2008-2016 vegan development team ------------------------------------------------------------------------ Introduction ------------ ------------------------------------------------------------------------ ### What is **vegan**? **Vegan** is an R package for community ecologists. It contains the most popular methods of multivariate analysis needed in analysing ecological communities, and tools for diversity analysis, and other potentially useful functions. **Vegan** is not self-contained but it must be run under R statistical environment, and it also depends on many other R packages. **Vegan** is [free software](http://www.gnu.org/philosophy/free-sw.html) and distributed under [GPL2 license](http://www.gnu.org/licenses/gpl.html). ------------------------------------------------------------------------ ### What is R? R is a system for statistical computation and graphics. It consists of a language plus a run-time environment with graphics, a debugger, access to certain system functions, and the ability to run programs stored in script files. R has a home page at . It is [free software](http://www.gnu.org/philosophy/free-sw.html) distributed under a GNU-style [copyleft](http://www.gnu.org/copyleft/copyleft.html), and an official part of the [GNU](http://www.gnu.org/) project (“GNU S”). ------------------------------------------------------------------------ ### How to obtain **vegan** and R? Both R and latest release version of **vegan** can be obtained through [CRAN](https://cran.r-project.org). Unstable development version of **vegan** can be obtained through [GitHub](https://github.com/vegandevs/vegan). Formerly **vegan** was developed in [R-Forge](http://r-forge.r-project.org/projects/vegan/), but after moving to [GitHub](https://github.com/vegandevs/vegan) the R-Forge repository may be out of date. ------------------------------------------------------------------------ ### What R packages **vegan** depends on? **Vegan** depends on the **permute** package which will provide advanced and flexible permutation routines for **vegan**. The **permute** package is developed together with **vegan** in [GitHub](https://github.com/gavinsimpson/permute). Some individual **vegan** functions depend on packages **MASS**, **mgcv**, **parallel**, **cluster**, **lattice** and **tcltk**. These all are base or recommended R packages that should be available in every R installation. **Vegan** declares these as suggested or imported packages, and you can install **vegan** and use most of its functions without these packages. **Vegan** is accompanied with a supporting package **vegan3d** for three-dimensional and dynamic plotting. The **vegan3d** package needs non-standard packages **rgl** and **scatterplot3d**. ------------------------------------------------------------------------ ### What other packages are available for ecologists? CRAN [Task Views](https://cran.r-project.org/web/views/) include entries like `Environmetrics`, `Multivariate` and `Spatial` that describe several useful packages and functions. If you install R package **ctv**, you can inspect Task Views from your R session, and automatically install sets of most important packages. ------------------------------------------------------------------------ ### What other documentation is available for **vegan**? **Vegan** is a fully documented R package with standard help pages. These are the most authoritative sources of documentation (and as a last resource you can use the force and the read the source, as **vegan** is open source). **Vegan** package ships with other documents which can be read with `browseVignettes("vegan")` command. The documents included in the **vegan** package are - **Vegan** `NEWS` - This document (`FAQ-vegan`). - Short introduction to basic ordination methods in **vegan** (`intro-vegan`). - Introduction to diversity methods in **vegan** (`diversity-vegan`). - Discussion on design decisions in **vegan** (`decision-vegan`). - Description of variance partition procedures in function `varpart` (`partitioning`). Web documents outside the package include: - : **vegan** homepage. - : **vegan** tutorial. ------------------------------------------------------------------------ ### Is there a Graphical User Interface (GUI) for **vegan**? Roeland Kindt has made package **BiodiversityR** which provides a GUI for **vegan**. The package is available at [CRAN](https://cran.r-project.org/package=BiodiversityR). It is not a mere GUI for **vegan**, but adds some new functions and complements **vegan** functions in order to provide a workbench for biodiversity analysis. You can install **BiodiversityR** using `install.packages("BiodiversityR")` or graphical package management menu in R. The GUI works on Windows, MacOS X and Linux. ------------------------------------------------------------------------ ### How to cite **vegan**? Use command `citation("vegan")` in R to see the recommended citation to be used in publications. ------------------------------------------------------------------------ ### How to build **vegan** from sources? In general, you do not need to build **vegan** from sources, but binary builds of release versions are available through [CRAN](https://cran.r-project.org/) for Windows and MacOS X. If you use some other operating systems, you may have to use source packages. **Vegan** is a standard R package, and can be built like instructed in R documentation. **Vegan** contains source files in C and FORTRAN, and you need appropriate compilers (which may need more work in Windows and MacOS X). ------------------------------------------------------------------------ ### Are there binaries for devel versions? [R-Forge](http://r-forge.r-project.org/projects/vegan/) runs daily tests on the devel package, and if passed, it builds source package together with Windows binaries. However, the R-Forge may be out of date, because **vegan** is mainly developed in [GitHub](https://github.com/vegandevs/vegan). You can install R-Forge packages within R with command `install.packages("vegan", repos="http://r-forge.r-project.org/")`. If you use GUI menu entry, you must select or define the R-Forge repository. ------------------------------------------------------------------------ ### How to report a bug in **vegan**? If you think you have found a bug in **vegan**, you should report it to **vegan** maintainers or developers. The preferred forum to report bugs is [GitHub](https://github.com/vegandevs/vegan/issues). The bug report should be so detailed that the bug can be replicated and corrected. Preferably, you should send an example that causes a bug. If it needs a data set that is not available in R, you should send a minimal data set as well. You also should paste the output or error message in your message. You also should specify which version of **vegan** you used. Bug reports are welcome: they are the only way to make **vegan** non-buggy. Please note that you shall not send bug reports to R mailing lists, since **vegan** is not a standard R package. ------------------------------------------------------------------------ ### Is it a bug or a feature? It is not necessarily a bug if some function gives different results than you expect: That may be a deliberate design decision. It may be useful to check the documentation of the function to see what was the intended behaviour. It may also happen that function has an argument to switch the behaviour to match your expectation. For instance, function `vegdist` always calculates quantitative indices (when this is possible). If you expect it to calculate a binary index, you should use argument `binary = TRUE`. ------------------------------------------------------------------------ ### Can I contribute to **vegan**? **Vegan** is dependent on user contribution. All feedback is welcome. If you have problems with **vegan**, it may be as simple as incomplete documentation, and we shall do our best to improve the documents. Feature requests also are welcome, but they are not necessarily fulfilled. A new feature will be added if it is easy to do and it looks useful, or if you submit code. If you can write code yourself, the best forum to contribute to vegan is [GitHub](https://github.com/vegandevs/vegan). ------------------------------------------------------------------------ Ordination ---------- ------------------------------------------------------------------------ ### I have only numeric and positive data but **vegan** still complains You are wrong! Computers are painfully pedantic, and if they find non-numeric or negative data entries, you really have them. Check your data. Most common reasons for non-numeric data are that row names were read as a non-numeric variable instead of being used as row names (check argument `row.names` in reading the data), or that the column names were interpreted as data (check argument `header = TRUE` in reading the data). Another common reason is that you had empty cells in your input data, and these were interpreted as missing values. ------------------------------------------------------------------------ ### Can I analyse binary or cover class data? Yes. Most **vegan** methods can handle binary data or cover abundance data. Most statistical tests are based on permutation, and do not make distributional assumptions. There are some methods (mainly in diversity analysis) that need count data. These methods check that input data are integers, but they may be fooled by cover class data. ------------------------------------------------------------------------ ### Why dissimilarities in **vegan** differ from other sources? Most commonly the reason is that other software use presence–absence data whereas **vegan** used quantitative data. Usually **vegan** indices are quantitative, but you can use argument `binary = TRUE` to make them presence–absence. However, the index name is the same in both cases, although different names usually occur in literature. For instance, Jaccard index actually refers to the binary index, but **vegan** uses name `"jaccard"` for the quantitative index, too. Another reason may be that indices indeed are defined differently, because people use same names for different indices. ------------------------------------------------------------------------ ### Why NMDS stress is sometimes 0.1 and sometimes 10? Stress is a proportional measure of badness of fit. The proportions can be expressed either as parts of one or as percents. Function `isoMDS` (**MASS** package) uses percents, and function `monoMDS` (**vegan** package) uses proportions, and therefore the same stress is 100 times higher in `isoMDS`. The results of `goodness` function also depend on the definition of stress, and the same `goodness` is 100 times higher in `isoMDS` than in `monoMDS`. Both of these conventions are equally correct. ------------------------------------------------------------------------ ### I get zero stress but no convergent solutions in `metaMDS` Most common reason is that you have too few observations for your NMDS. For `n` observations (points) and `k` dimensions you need to estimate `n*k` parameters (ordination scores) using `n*(n-1)/2` dissimilarities. For `k` dimensions you must have `n > 2*k + 1`, or for two dimensions at least six points. In some degenerate situations you may need even a larger number of points. If you have a lower number of points, you can find an undefined number of perfect (stress is zero) but different solutions. Conventional wisdom due to Kruskal is that you should have `n > 4*k + 1` points for `k` dimensions. A typical symptom of insufficient data is that you have (nearly) zero stress but no two convergent solutions. In those cases you should reduce the number of dimensions (`k`) and with very small data sets you should not use `NMDS`, but rely on metric methods. It seems that local and hybrid scaling with `monoMDS` have similar lower limits in practice (although theoretically they could differ). However, higher number of dimensions can be used in metric scaling, both with `monoMDS` and in principal coordinates analysis (`cmdscale` in **stats**, `wcmdscale` in **vegan**). ------------------------------------------------------------------------ ### Zero dissimilarities in isoMDS Function `metaMDS` uses function `monoMDS` as its default method for NMDS, and this function can handle zero dissimilarities. Alternative function `isoMDS` cannot handle zero dissimilarities. If you want to use `isoMDS`, you can use argument `zerodist = "add"` in `metaMDS` to handle zero dissimilarities. With this argument, zero dissimilarities are replaced with a small positive value, and they can be handled in `isoMDS`. This is a kluge, and some people do not like this. A more principal solution is to remove duplicate sites using R command `unique`. However, after some standardizations or with some dissimilarity indices, originally non-unique sites can have zero dissimilarity, and you have to resort to the kluge (or work harder with your data). Usually it is better to use `monoMDS`. ------------------------------------------------------------------------ ### I have heard that you cannot fit environmental vectors or surfaces to NMDS results which only have rank-order scores Claims like this have indeed been at large in the Internet, but they are based on grave misunderstanding and are plainly wrong. NMDS ordination results are strictly metric, and in **vegan** `metaMDS` and `monoMDS` they are even strictly Euclidean. The method is called “non-metric” because the Euclidean distances in ordination space have a non-metric rank-order relationship to community dissimilarities. You can inspect this non-linear step curve using function `stressplot` in **vegan**. Because the ordination scores are strictly Euclidean, it is correct to use **vegan** functions `envfit` and `ordisurf` with NMDS results. ------------------------------------------------------------------------ ### Where can I find numerical scores of ordination axes? Normally you can use function `scores` to extract ordination scores for any ordination method. The `scores` function can also find ordination scores for many non-**vegan** functions such as for `prcomp` and `princomp` and for some **ade4** functions. In some cases the ordination result object stores raw scores, and the axes are also scaled appropriate when you access them with `scores`. For instance, in `cca` and `rda` the ordination object has only so-called normalized scores, and they are scaled for ordination plots or for other use when they are accessed with `scores`. ------------------------------------------------------------------------ ### How the RDA results are scaled? The scaling or RDA results indeed differ from most other software packages. The scaling of RDA is such a complicated issue that it cannot be explained in this FAQ, but it is explained in a separate pdf document on “Design decision and implementation details in vegan” that you can read with command `browseVignettes("vegan")`. ------------------------------------------------------------------------ ### cca fails with “data.frame expected” or “"site.env" missing” This is not a **vegan** error message, but it comes from an old version of the **ade4** package (prior to **ade4** 1.7-8, released Aug 9, 2017). Upgrade your **ade4**. ------------------------------------------------------------------------ ### Ordination fails with “Error in La.svd” Constrained ordination (`cca`, `rda`, `capscale`) will sometimes fail with error message `Error in La.svd(x, nu, nv): error code 1 from Lapack routine 'dgesdd'.` It seems that the basic problem is in the `svd` function of `LAPACK` that is used for numerical analysis in R. `LAPACK` is an external library that is beyond the control of package developers and R core team so that these problems may be unsolvable. It seems that the problems with the `LAPACK` code are so common that even the help page of `svd` warns about them Reducing the range of constraints (environmental variables) helps sometimes. For instance, multiplying constraints by a constant \< 1. This rescaling does not influence the numerical results of constrained ordination, but it can complicate further analyses when values of constraints are needed, because the same scaling must be applied there. We can only hope that this problem is fixed in the future versions of R and `LAPACK`. ------------------------------------------------------------------------ ### Variance explained by ordination axes. In general, **vegan** does not directly give any statistics on the “variance explained” by ordination axes or by the constrained axes. This is a design decision: I think this information is normally useless and often misleading. In community ordination, the goal typically is not to explain the variance, but to find the “gradients” or main trends in the data. The “total variation” often is meaningless, and all proportions of meaningless values also are meaningless. Often a better solution explains a smaller part of “total variation”. For instance, in unstandardized principal components analysis most of the variance is generated by a small number of most abundant species, and they are easy to “explain” because data really are not very multivariate. If you standardize your data, all species are equally important. The first axes explains much less of the “total variation”, but now they explain all species equally, and results typically are much more useful for the whole community. Correspondence analysis uses another measure of variation (which is not variance), and again it typically explains a “smaller proportion” than principal components but with a better result. Detrended correspondence analysis and nonmetric multidimensional scaling even do not try to “explain” the variation, but use other criteria. All methods are incommensurable, and it is impossible to compare methods using “explanation of variation”. If you still want to get “explanation of variation” (or a deranged editor requests that from you), it is possible to get this information for some methods: - Eigenvector methods: Functions `rda`, `cca` and `capscale` give the variation of conditional (partialled), constrained (canonical) and residual components, but you must calculate the proportions by hand. Function `eigenvals` extracts the eigenvalues, and `summary(eigenvals(ord))` reports the proportions explained in the result object `ord`. Function `RsquareAdj` gives the R-squared and adjusted R-squared (if available) for constrained components. Function `goodness` gives the same statistics for individual species or sites (species are unavailable with `capscale`). In addition, there is a special function `varpart` for unbiased partitioning of variance between up to four separate components in redundancy analysis. - Detrended correspondence analysis (function `decorana`). The total amount of variation is undefined in detrended correspondence analysis, and therefore proportions from total are unknown and undefined. DCA is not a method for decomposition of variation, and therefore these proportions would not make sense either. - Nonmetric multidimensional scaling. NMDS is a method for nonlinear mapping, and the concept of of variation explained does not make sense. However, 1 - stress\^2 transforms nonlinear stress into quantity analogous to squared correlation coefficient. Function `stressplot` displays the nonlinear fit and gives this statistic. ------------------------------------------------------------------------ ### Can I have random effects in constrained ordination or in `adonis`? No. Strictly speaking, this is impossible. However, you can define models that respond to similar goals as random effects models, although they strictly speaking use only fixed effects. Constrained ordination functions `cca`, `rda` and `capscale` can have `Condition()` terms in their formula. The `Condition()` define partial terms that are fitted before other constraints and can be used to remove the effects of background variables, and their contribution to decomposing inertia (variance) is reported separately. These partial terms are often regarded as similar to random effects, but they are still fitted in the same way as other terms and strictly speaking they are fixed terms. Function `adonis` evaluates terms sequentially. In a model with right-hand-side `~ A + B` the effects of `A` are evaluated first, and the effects of `B` after removing the effects of `A`. Sequential tests are also available in `anova` function for constrained ordination results by setting argument `by = "term"`. In this way, the first terms can serve in a similar role as random effects, although they are fitted in the same way as all other terms, and strictly speaking they are fixed terms. All permutation tests in **vegan** are based on the **permute** package that allows constructing various restricted permutation schemes. For instance, you can set levels of `plots` or `blocks` for a factor regarded as a random term. A major reason why real random effects models are impossible in most **vegan** functions is that their tests are based on the permutation of the data. The data are given, that is fixed, and therefore permutation tests are basically tests of fixed terms on fixed data. Random effect terms would require permutations of data with a random component instead of the given, fixed data, and such tests are not available in **vegan**. ------------------------------------------------------------------------ ### Is it possible to have passive points in ordination? **Vegan** does not have a concept of passive points, or a point that should only little influence the ordination results. However, you can add points to eigenvector methods using `predict` functions with `newdata`. You can first perform an ordination without some species or sites, and then you can find scores for all points using your complete data as `newdata`. The `predict` functions are available for basic eigenvector methods in **vegan** (`cca`, `rda`, `decorana`, for an up-to-date list, use command `methods("predict")`). You also can simulate the passive points in R by using low weights to row and columns (this is the method used in software with passive points). For instance, the following command makes row 3 “passive”: `dune[3,] <- 0.001*dune[3,]`. ------------------------------------------------------------------------ ### Class variables and dummies You should define a class variable as an R `factor`, and **vegan** will automatically handle them with formula interface. You also can define constrained ordination without formula interface, but then you must code your class variables by hand. R (and **vegan**) knows both unordered and ordered factors. Unordered factors are internally coded as dummy variables, but one redundant level is removed or aliased. With default contrasts, the removed level is the first one. Ordered factors are expressed as polynomial contrasts. Both of these contrasts explained in standard R documentation. ------------------------------------------------------------------------ ### How are environmental arrows scaled? The printed output of `envfit` gives the direction cosines which are the coordinates of unit length arrows. For plotting, these are scaled by their correlation (square roots of column `r2`). You can see the scaled lengths of `envfit` arrows using command `scores`. The scaled environmental vectors from `envfit` and the arrows for continuous environmental variables in constrained ordination (`cca`, `rda`, `capscale`) are adjusted to fill the current graph. The lengths of arrows do not have fixed meaning with respect to the points (species, sites), but they can only compared against each other, and therefore only their relative lengths are important. If you want change the scaling of the arrows, you can use `text` (plotting arrows and text) or `points` (plotting only arrows) functions for constrained ordination. These functions have argument `arrow.mul` which sets the multiplier. The `plot` function for `envfit` also has the `arrow.mul` argument to set the arrow multiplier. If you save the invisible result of the constrained ordination `plot` command, you can see the value of the currently used `arrow.mul` which is saved as an attribute of `biplot` scores. Function `ordiArrowMul` is used to find the scaling for the current plot. You can use this function to see how arrows would be scaled: ```{r eval=FALSE} sol <- cca(varespec) ef <- envfit(sol ~ ., varechem) plot(sol) ordiArrowMul(scores(ef, display="vectors")) ``` ------------------------------------------------------------------------ ### I want to use Helmert or sum contrasts `vegan` uses standard R utilities for defining contrasts. The default in standard installations is to use treatment contrasts, but you can change the behaviour globally setting `options` or locally by using keyword `contrasts`. Please check the R help pages and user manuals for details. ------------------------------------------------------------------------ ### What are aliased variables and how to see them? Aliased variable has no information because it can be expressed with the help of other variables. Such variables are automatically removed in constrained ordination in **vegan**. The aliased variables can be redundant levels of factors or whole variables. **Vegan** function `alias` gives the defining equations for aliased variables. If you only want to see the names of aliased variables or levels in solution `sol`, use `alias(sol, names.only=TRUE)`. ------------------------------------------------------------------------ ### Plotting aliased variables You can fit vectors or class centroids for aliased variables using `envfit` function. The `envfit` function uses weighted fitting, and the fitted vectors are identical to the vectors in correspondence analysis. ------------------------------------------------------------------------ ### Restricted permutations in **vegan** **Vegan** uses **permute** package in all its permutation tests. The **permute** package will allow restricted permutation designs for time series, line transects, spatial grids and blocking factors. The construction of restricted permutation schemes is explained in the manual page `permutations` in **vegan** and in the documentation of the **permute** package. ------------------------------------------------------------------------ ### How to use different plotting symbols in ordination graphics? The default ordination `plot` function is intended for fast plotting and it is not very configurable. To use different plotting symbols, you should first create and empty ordination plot with `plot(..., type="n")`, and then add `points` or `text` to the created empty frame (here `...` means other arguments you want to give to your `plot` command). The `points` and `text` commands are fully configurable, and allow different plotting symbols and characters. ------------------------------------------------------------------------ ### How to avoid cluttered ordination graphs? If there is a really high number of species or sites, the graphs often are congested and many labels are overwritten. It may be impossible to have complete readable graphics with some data sets. Below we give a brief overview of tricks you can use. Gavin Simpson’s blog [From the bottom of the heap](http://www.fromthebottomoftheheap.net) has a series of articles on “decluttering ordination plots” with more detailed discussion and examples. - Use only points, possibly with different types if you do not need to see the labels. You may need to first create an empty plot using `plot(..., type="n")`, if you are not satisfied with the default graph. (Here and below `...` means other arguments you want to give to your `plot` command.) - Use points and add labels to desired points using interactive `identify` command if you do not need to see all labels. - Add labels using function `ordilabel` which uses non-transparent background to the text. The labels still shadow each other, but the uppermost labels are readable. Argument `priority` will help in displaying the most interesting labels (see [Decluttering blog, part 1](http://www.fromthebottomoftheheap.net/2013/01/12/decluttering-ordination-plots-in-vegan-part-1-ordilabel/)). - Use `orditorp` function that uses labels only if these can be added to a graph without overwriting other labels, and points otherwise, if you do not need to see all labels. You must first create an empty plot using `plot(..., type="n")`, and then add labels or points with `orditorp` (see [Decluttering blog](http://www.fromthebottomoftheheap.net/2013/01/13/decluttering-ordination-plots-in-vegan-part-2-orditorp/)). - Use `ordipointlabel` which uses points and text labels to the points, and tries to optimize the location of the text to minimize the overlap (see [Decluttering blog](http://www.fromthebottomoftheheap.net/2013/06/27/decluttering-ordination-plots-in-vegan-part-3-ordipointlabel/)). - Ordination `text` and `points` functions have argument `select` that can be used for full control of selecting items plotted as text or points. - Use interactive `orditkplot` function that lets you drag labels of points to better positions if you need to see all labels. Only one set of points can be used (see [Decluttering blog](http://www.fromthebottomoftheheap.net/2013/12/31/decluttering-ordination-in-vegan-part-4-orditkplot/)). - Most `plot` functions allow you to zoom to a part of the graph using `xlim` and `ylim` arguments to reduce clutter in congested areas. ------------------------------------------------------------------------ ### Can I flip an axis in ordination diagram? Use `xlim` or `ylim` with flipped limits. If you have model `mod <- cca(dune)` you can flip the first axis with `plot(mod, xlim = c(3, -2))`. ------------------------------------------------------------------------ ### Can I zoom into an ordination plot? You can use `xlim` and `ylim` arguments in `plot` or `ordiplot` to zoom into ordination diagrams. Normally you must set both `xlim` and `ylim` because ordination plots will keep the equal aspect ratio of axes, and they will fill the graph so that the longer axis will fit. Dynamic zooming can be done with function `orditkplot`. You can directly save the edited `orditkplot` graph in various graphic formats, or you can export the graph object back to R and use `plot` to display the results. ------------------------------------------------------------------------ Other analysis methods ---------------------- ------------------------------------------------------------------------ ### Is there TWINSPAN? No. It may be possible to port TWINSPAN to **vegan**, but it is not among the **vegan** top priorities. If anybody wants to try porting, I will be happy to help. TWINSPAN has a very permissive license, and it would be completely legal to port the function into R. ------------------------------------------------------------------------ ### Why restricted permutation does not influence adonis results? The permutation scheme influences the permutation distribution of the statistics and probably the significance levels, but does not influence the calculation of the statistics. ------------------------------------------------------------------------ ### How is deviance calculated? Some **vegan** functions, such as `radfit` use base R facility of `family` in maximum likelihood estimation. This allows use of several alternative error distributions, among them `"poisson"` and `"gaussian"`. The R `family` also defines the deviance. You can see the equations for deviance with commands like `poisson()$dev` or `gaussian()$dev`. In general, deviance is 2 times log.likelihood shifted so that models with exact fit have zero deviance. ------------------------------------------------------------------------ vegan/vignettes/vegan.sty0000644000176200001440000000330113207524470015224 0ustar liggesusers%% typeset vegan vignettes. Should work with article style in one and %% two columns, and with amsart style with one column (two columns are %% too narrow in amsart, but basically works). In one column, sets %% sidecaption figures, and in two columns normal column-wide figures %% and smaller example font. R output width (options(width=)) probably %% needs correct setting in the Rnw file, and some formatting may need %% adjustment. \usepackage{amsmath} \usepackage{amssymb} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{sidecap} \@ifclassloaded{amsart}% {\setlength{\captionindent}{0pt}} % sidecap needs this with amsart {} \usepackage[english]{babel} % kluge to avoid visible ~ in Figure~1. \renewcommand{\floatpagefraction}{0.8} \usepackage{booktabs} \usepackage{Sweave} \usepackage{hyperref} \usepackage[round]{natbib} \renewcommand{\cite}{\citep} %% layout depends on the number of columns \if@twocolumn \renewenvironment{Schunk}{\par\footnotesize}{} % smaller examples \setkeys{Gin}{width=\linewidth} % column wide figs \else \renewenvironment{Schunk}{\par\small}{} % small examples \setkeys{Gin}{width=0.55\linewidth} % narrow figs for sidecaps \renewenvironment{figure}[1][tp]{\begin{SCfigure}[][#1]}{\end{SCfigure}} %sidecaps \fi %% macros %% \code should handle _ , ~ and $ \makeatletter \newcommand\code{\bgroup\@makeother\_\@makeother\~\@makeother\$\@codex} \def\@codex#1{{\normalfont\ttfamily\hyphenchar\font=-1 #1}\egroup} \makeatother %% simple macros \newcommand{\pkg}[1]{\textbf{#1}} \newcommand{\proglang}[1]{\textsf{#1}} \newcommand{\R}{\proglang{R}} \newcommand{\E}{\mathsf{E}} \newcommand{\VAR}{\mathsf{VAR}} \newcommand{\COV}{\mathsf{COV}} \newcommand{\Prob}{\mathsf{P}} vegan/vignettes/intro-vegan.Rnw0000644000176200001440000003357713231354436016326 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Introduction to ordination in vegan} \documentclass[a4paper,10pt]{article} \usepackage{vegan} % vegan settings \title{Vegan: an introduction to ordination} \author{Jari Oksanen} \date{\footnotesize{ processed with vegan \Sexpr{packageDescription("vegan", field="Version")} in \Sexpr{R.version.string} on \today}} %% need no \usepackage{Sweave} \begin{document} \SweaveOpts{strip.white=true} <>= par(mfrow=c(1,1)) options(width=72) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "> ", "continue" = " ") @ \maketitle \begin{abstract} The document describes typical, simple work pathways of vegetation ordination. Unconstrained ordination uses as examples detrended correspondence analysis and non-metric multidimensional scaling, and shows how to interpret their results by fitting environmental vectors and factors or smooth environmental surfaces to the graph. The basic plotting command, and more advanced plotting commands for congested plots are also discussed, as well as adding items such as ellipses, convex hulls, and other items for classes. The constrained ordination uses constrained (canonical) correspondence analysis as an example. It is first shown how a model is defined, then the document discusses model building and signficance tests of the whole analysis, single constraints and axes. \end{abstract} \tableofcontents \vspace{3ex} \noindent \pkg{Vegan} is a package for community ecologists. This documents explains how the commonly used ordination methods can be performed in \pkg{vegan}. The document only is a very basic introduction. Another document (\emph{vegan tutorial}) (\url{http://cc.oulu.fi/~jarioksa/opetus/method/vegantutor.pdf}) gives a longer and more detailed introduction to ordination. The current document only describes a small part of all \pkg{vegan} functions. For most functions, the canonical references are the \pkg{vegan} help pages, and some of the most important additional functions are listed at this document. \section{Ordination} The \pkg{vegan} package contains all common ordination methods: Principal component analysis (function \code{rda}, or \code{prcomp} in the base \proglang{R}), correspondence analysis (\code{cca}), detrended correspondence analysis (\code{decorana}) and a wrapper for non-metric multidimensional scaling (\code{metaMDS}). Functions \code{rda} and \code{cca} mainly are designed for constrained ordination, and will be discussed later. In this chapter I describe functions \code{decorana} and \code{metaMDS}. \subsection{Detrended correspondence analysis} Detrended correspondence analysis (\textsc{dca}) is done like this: <<>>= library(vegan) data(dune) ord <- decorana(dune) @ This saves ordination results in \code{ord}: <<>>= ord @ The display of results is very brief: only eigenvalues and used options are listed. Actual ordination results are not shown, but you can see them with command \code{summary(ord)}, or extract the scores with command \code{scores}. The \code{plot} function also automatically knows how to access the scores. \subsection{Non-metric multidimensional scaling} Function \code{metaMDS} is a bit special case. The actual ordination is performed by function \pkg{vegan} function \code{monoMDS} (or alternatively using \code{isoMDS} of the \pkg{MASS} package). Function \code{metaMDS} is a wrapper to perform non-metric multidimensional scaling (\textsc{nmds}) like recommended in community ordination: it uses adequate dissimilarity measures (function \code{vegdist}), then it runs \textsc{nmds} several times with random starting configurations, compares results (function \code{procrustes}), and stops after finding twice a similar minimum stress solution. Finally it scales and rotates the solution, and adds species scores to the configuration as weighted averages (function \code{wascores}): <<>>= ord <- metaMDS(dune) ord @ \section{Ordination graphics} Ordination is nothing but a way of drawing graphs, and it is best to inspect ordinations only graphically (which also implies that they should not be taken too seriously). All ordination results of \pkg{vegan} can be displayed with a \code{plot} command (Fig. \ref{fig:plot}): <>= plot(ord) @ \begin{figure} <>= <> @ \caption{Default ordination plot.} \label{fig:plot} \end{figure} Default \code{plot} command uses either black circles for sites and red pluses for species, or black and red text for sites and species, resp. The choices depend on the number of items in the plot and ordination method. You can override the default choice by setting \code{type = "p"} for points, or \code{type = "t"} for text. For a better control of ordination graphics you can first draw an empty plot (\code{type = "n"}) and then add species and sites separately using \code{points} or \code{text} functions. In this way you can combine points and text, and you can select colours and character sizes freely (Fig. \ref{fig:plot.args}): <>= plot(ord, type = "n") points(ord, display = "sites", cex = 0.8, pch=21, col="red", bg="yellow") text(ord, display = "spec", cex=0.7, col="blue") @ \begin{figure} <>= <> @ \caption{A more colourful ordination plot where sites are points, and species are text.} \label{fig:plot.args} \end{figure} All \pkg{vegan} ordination methods have a specific \code{plot} function. In addition, \pkg{vegan} has an alternative plotting function \code{ordiplot} that also knows many non-\pkg{vegan} ordination methods, such as \code{prcomp}, \code{cmdscale} and \code{isoMDS}. All \pkg{vegan} plot functions return invisibly an \code{ordiplot} object, so that you can use \code{ordiplot} support functions with the results (\code{points}, \code{text}, \code{identify}). Function \code{ordirgl} (requires \pkg{rgl} package) provides dynamic three-dimensional graphics that can be spun around or zoomed into with your mouse. Function \pkg{ordiplot3d} (requires package \code{scatterplot3d}) displays simple three-dimensional scatterplots. \subsection{Cluttered plots} Ordination plots are often congested: there is a large number of sites and species, and it may be impossible to display all clearly. In particular, two or more species may have identical scores and are plotted over each other. \pkg{Vegan} does not have (yet?) automatic tools for clean plotting in these cases, but here some methods you can try: \begin{itemize} \item Zoom into graph setting axis limits \code{xlim} and \code{ylim}. You must typically set both, because \pkg{vegan} will maintain equal aspect ratio of axes. \item Use points and add labell only some points with \code{identify} command. \item Use \code{select} argument in ordination \code{text} and \code{points} functions to only show the specified items. \item Use \code{ordilabel} function that uses opaque background to the text: some text labels will be covered, but the uppermost are readable. \item Use automatic \code{orditorp} function that uses text only if this can be done without overwriting previous labels, but points in other cases. \item Use automatic \code{ordipointlabel} function that uses both points and text labels, and tries to optimize the location of the text to avoid overwriting. \item Use interactive \code{orditkplot} function that draws both points and labels for ordination scores, and allows you to drag labels to better positions. You can export the results of the edited graph to encapsulated \proglang{postscript}, \proglang{pdf}, \proglang{png} or \proglang{jpeg} files, or copy directly to encapsulated \proglang{postscript}, or return the edited positions to \proglang{R} for further processing. \end{itemize} \subsection{Adding items to ordination plots} \pkg{Vegan} has a group of functions for adding information about classification or grouping of points onto ordination diagrams. Function \code{ordihull} adds convex hulls, \code{ordiellipse} adds ellipses enclosing all points in the group (ellipsoid hulls) or ellipses of standard deviation, standard error or confidence areas, and \code{ordispider} combines items to their centroid (Fig. \ref{fig:ordihull}): <<>>= data(dune.env) attach(dune.env) @ <>= plot(ord, disp="sites", type="n") ordihull(ord, Management, col=1:4, lwd=3) ordiellipse(ord, Management, col=1:4, kind = "ehull", lwd=3) ordiellipse(ord, Management, col=1:4, draw="polygon") ordispider(ord, Management, col=1:4, label = TRUE) points(ord, disp="sites", pch=21, col="red", bg="yellow", cex=1.3) @ \begin{figure} <>= <> @ \caption{Convex hull, ellipsoid hull, standard error ellipse and a spider web diagram for Management levels in ordination.} \label{fig:ordihull} \end{figure} In addition, you can overlay a cluster dendrogram from \code{hclust} using \code{ordicluster} or a minimum spanning tree from \code{spantree} with its \code{lines} function. Segmented arrows can be added with \code{ordiarrows}, lines with \code{ordisegments} and regular grids with \code{ordigrid}. \section{Fitting environmental variables} \pkg{Vegan} provides two functions for fitting environmental variables onto ordination: \begin{itemize} \item \code{envfit} fits vectors of continuous variables and centroids of levels of class variables (defined as \code{factor} in \proglang{R}). The arrow shows the direction of the (increasing) gradient, and the length of the arrow is proportional to the correlation between the variable and the ordination. \item \code{ordisurf} (which requires package \pkg{mgcv}) fits smooth surfaces for continuous variables onto ordination using thinplate splines with cross-validatory selection of smoothness. \end{itemize} Function \code{envfit} can be called with a \code{formula} interface, and it optionally can assess the ``significance'' of the variables using permutation tests: <<>>= ord.fit <- envfit(ord ~ A1 + Management, data=dune.env, perm=999) ord.fit @ The result can be drawn directly or added to an ordination diagram (Fig. \ref{fig:envfit}): <>= plot(ord, dis="site") plot(ord.fit) @ Function \code{ordisurf} directly adds a fitted surface onto ordination, but it returns the result of the fitted thinplate spline \code{gam} (Fig. \ref{fig:envfit}): <>= ordisurf(ord, A1, add=TRUE) @ \begin{figure} <>= <> <> @ \caption{Fitted vector and smooth surface for the thickness of A1 horizon (\code{A1}, in cm), and centroids of Management levels.} \label{fig:envfit} \end{figure} \section{Constrained ordination} \pkg{Vegan} has three methods of constrained ordination: constrained or ``canonical'' correspondence analysis (function \code{cca}), redundancy analysis (function \code{rda}) and distance-based redundancy analysis (function \code{capscale}). All these functions can have a conditioning term that is ``partialled out''. I only demonstrate \code{cca}, but all functions accept similar commands and can be used in the same way. The preferred way is to use \code{formula} interface, where the left hand side gives the community data frame and the right hand side lists the constraining variables: <<>>= ord <- cca(dune ~ A1 + Management, data=dune.env) ord @ The results can be plotted with (Fig. \ref{fig:cca}): <>= plot(ord) @ \begin{figure} <>= <> @ \caption{Default plot from constrained correspondence analysis.} \label{fig:cca} \end{figure} There are three groups of items: sites, species and centroids (and biplot arrows) of environmental variables. All these can be added individually to an empty plot, and all previously explained tricks of controlling graphics still apply. It is not recommended to perform constrained ordination with all environmental variables you happen to have: adding the number of constraints means slacker constraint, and you finally end up with solution similar to unconstrained ordination. In that case it is better to use unconstrained ordination with environmental fitting. However, if you really want to do so, it is possible with the following shortcut in \code{formula}: <<>>= cca(dune ~ ., data=dune.env) @ \subsection{Significance tests} \pkg{vegan} provides permutation tests for the significance of constraints. The test mimics standard analysis of variance function (\code{anova}), and the default test analyses all constraints simultaneously: <<>>= anova(ord) @ The function actually used was \code{anova.cca}, but you do not need to give its name in full, because \proglang{R} automatically chooses the correct \code{anova} variant for the result of constrained ordination. It is also possible to analyse terms separately: <<>>= anova(ord, by="term", permutations=199) @ This test is sequential: the terms are analysed in the order they happen to be in the model. You can also analyse significances of marginal effects (``Type III effects''): <<>>= anova(ord, by="mar", permutations=199) @ Moreover, it is possible to analyse significance of each axis: <>= anova(ord, by="axis", permutations=499) @ \subsection{Conditioned or partial ordination} All constrained ordination methods can have terms that are partialled out from the analysis before constraints: <<>>= ord <- cca(dune ~ A1 + Management + Condition(Moisture), data=dune.env) ord @ This partials out the effect of \code{Moisture} before analysing the effects of \code{A1} and \code{Management}. This also influences the significances of the terms: <<>>= anova(ord, by="term", permutations=499) @ If we had a designed experiment, we may wish to restrict the permutations so that the observations only are permuted within levels of \code{Moisture}. Restricted permutation is based on the powerful \pkg{permute} package. Function \code{how()} can be used to define permutation schemes. In the following, we set the levels with \code{plots} argument: <<>>= how <- how(nperm=499, plots = Plots(strata=dune.env$Moisture)) anova(ord, by="term", permutations = how) @ %%%%%%%%%%%%%%%%%%% <>= detach(dune.env) @ \end{document} vegan/vignettes/varpart4.pdf0000644000176200001440000006743213156750403015640 0ustar liggesusers%PDF-1.3 % 2 0 obj << /Length 4 0 R /Filter /FlateDecode >> stream xڽ]Ms#7WNʡ tD_^66<OH:P"%QGŶ~"EVHP-( gꟕ+j&kF+kM%kպoz|Jz¨rԴb՗I-Qr[[iCZAW~ۊ֒UV_V_~Suy^}W}yKcpdp4lVӁ iZӉn¦7OMbf|"m7MMSk=W*zatl~njx=ڸ>XOn[l֋;I5&ń[#40lf|6u+95cЬz?mySLhOq>;2ڔ j6ݕ~]X昴t"АOvڵsq۟ϑUW]w٧؄9?cpZm=[ ҉Ԅ*Ih3yr:єk z|%Y'VZe0\:UT $]\rXyʵw? vP[vh\_Ca;0ҒqdJs4zm`n-uDwH.HUhOm-u)򭋢9cF޽dzl-JdJ$6Gc ONTM󷎊rSp[nnřK8\W>oG #qn&W4[G ",o04=JJܭ ~ӟOz{kǻ;S:*ܔ^dׁ qc7okG"KoO1K? 71"++鎂x̋#!ID9@bLI/$]vz LjzĸMLoqP6O4f !G/Y>E+֘!c ͨy.YbmW~f09/h& ~ru?oZEb=[mVڎ$RA[l;5Mc1fBd2)] Xv5zsupx=~^\^c^Co]ѻzǔL#컦Ґ(I?<(!j qyeWeri_zͩIeBذː]&.CKr']2 2˳eB:{aT*eH|Q6t I*8}td-q.\f\ϫH!#Lywŏ.CrLe]7gLk\&*eȈ(Bts.CLӻCIŒ Lr;k\2wdžݼzYmeB̻+( qư9QFPLGi6.cS(c('fe`Zdl 㰙r]=5,jtC+ e)sxP_ڀCை hJ"xR][șL>?>JNJyh2MJm6" 4 #ɀ@^. ,+5L6gOb(t @wdQka28!@ A`vأ[%+db]dR42hP˒AhJcAǙ G (ML۷ D=-y XwW8\pHȠA-Ka+Eg*D@24d BSye`{=\ B+[ B=CF jY2 [Y,28S!2ϰP@( B},N[ r"=XwW.! S46hP 7ѠвO0c`Dj| 9Q/Ju^ wBF Y Jq%F&//:TRZ&kNׯ^xϛL==Eu|>b\ a]nC@cGpXFYnPffAмeXUnX mG|n\7%A p47hB*  Ź>7@ + 7z47p7~U:I7Ђ7찟yqg`=dt1"Ӗ0Aoyml(JFw)L]n԰G {)now ;B@`VEx~nK_1߳S)rV797iתkɯǴMgW A%퓯[ )yG#.H6i%xyQRAiUDɀfB`m6swCc7*h%,ܧ9Rp>P<6#DW3UD/׿Wl(&4%bb z2AԄ V _=Q I@c7!F]l"i(Œ,ZPLq:A1a7>CgrRr HY,E_C1-R*4b ULތbԲDS1! n%s#UqJ Y*Fn{-R1)*FѦ*mbpL4saF`Bi FW1gXQtcoVP1ƂRi!R1×TLb̘F8*ءY 1**&QQUC@P1W1%H*0[WPTY(e-T̥bwFil|V1CW1P*_O L#—U dĹ2*@DW1POAR1Y^ ~jUHڨ1}Ib (r4Fp  $$X%4]pD//Ug䒣_$\"3`r0r'∌ ԥ>@A"\& (:Ej#R.K9Eυ 0."!(!*q> &m]awy}x\/Q6˺I(EGnXEE8.J.J;AB.J.J.!1E%gGB*]w[ \B(]U AEqyEE.ᨍ*u\z)~os55 GX)Řr1s_`L#(c*Ks!Jb.ƌ5HhHCfqD^i= 'j'FY'QBYd+9t悾Ҧژ(E׵obLEW@)Oy>c>fhE6 I}2m0'ޘ=>TSuF^ڗ xY_38i}>9%i:t-kqlMLJhzi|1su6]7gwoѣ+nx]9]9+]A x+x[9+ﭜX筝x+}8k[%4 J1ja9L Z`yiPĀ3|-$,#uqU $毗_C <-iLtѣR-8Ǐ!Vtժ|tj(FZ޺@V{Vp2 t_{V aay5՚[֔Vk [S[VUԹDV@}evmW@@VmmBGV 8s [C筯XʟB\R x+ao}EVV@Sݶx+}:<;,op .֏9zuw {`b(~u GI22gp},o\Z~.г2b[mVLJA'[ChJX?q,tAJX [* `t.@eJN12jlNxHg?6o5de;C9/JqRxk'ZB׸,6}>p C/%2972q5z }]#ȶkM1{Gȍ1HFA^Y=M/znM :6i=OAHqlC#&6dzM1lfжc!y@cKmB <]msl5 >@4F !l-6C}8xm@`mma m(!xaP[mBaj˳͠m6Bl3Ccj˳ ؆lF?f{EpqجO{O) l{[y@?0w6y;vZl 49vgć (\2"Y3? s&cm}ZH"m:UNA!OՄF h~Z~%w8]7"ȤXa=P_<̣l,J(4f"|?=ilJи M'm}B(ЫdUBZOX*Yyz,@W =ѫd54an:% sTMװV@P yDa*|"IDhBAbHQ{5( ʮ3Dg_:*-4rހJ@5v@ 45#! }!Imt!QhW!ʎ3 Q /Md+5DYpWBـ 'KZ QhqiQ4h$EGQ^|'Q 0;;dQ@φ(LPo3b]C@ 8DODрD@# #E_z"u|@-a EtEV' V*jVP7ul+KN $dJ+뀂]%Ү,`g쎆xRE #/=F Pvxx > endobj 3 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /Font << /F1.0 6 0 R /F1.1 7 0 R >> >> endobj 9 0 obj << /Length 10 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream x}OHQǿ%Be&RNW`oʶkξn%B.A1XI:b]"(73ڃ73{@](mzy(;>7PA+Xf$vlqd}䜛] UƬxiO:bM1Wg>q[ 2M'"()Y'ld4䗉2'&Sg^}8&w֚, \V:kݤ;iR;;\u?V\\C9u(JI]BSs_ QP5Fz׋G%t{3qWD0vz \}\$um+٬C;X9:Y^gB,\ACioci]g(L;z9AnI ꭰ4Iݠx#{zwAj}΅Q=8m (o{1cd5Ugҷtlaȱi"\.5汔^8tph0k!~D Thd6챖:>f&mxA4L&%kiĔ?Cqոm&/By#Ց%i'W:XlErr'=_ܗ)i7Ҭ,F|Nٮͯ6rm^ UHW5;?Ͱh endstream endobj 10 0 obj 706 endobj 5 0 obj [ /ICCBased 9 0 R ] endobj 12 0 obj << /Length 14 0 R /Filter /FlateDecode >> stream xڽ[Ms8Wವvir^&9mf*ݩ@Q"Df(z3PIMI.1^7^'; :F<ұ1 %"mp߽?P0܏O1vB7CiXk!`$vt(w`s){\|L6O_uXV@;iE$tz 6,hm&ee>}١:tSa\!X8kz b@kBq|ަIfgcN(evꃡxݞs)jE{eMŗo"_L Y080#!F~ݞ>޾X.j^lOg,wg1<0祝Cw*wM^kR.gP+FWM%*AWyQ9\dݡ\͠rum;shSMw徥\Ϡri@+g6}U. ,5fk/+,Snnj5*1q JZu\k bungI;Z Փ;7t oUx<vwX9S&^x4L<-F \cx6 /P<<= tOFC ugQHAAyv&W~ W܁Q /? \AxYcݡJڦQy3̠| 8Sˡ**[hCgpl)s~\h%"ZBԊCKdAaK_ALP_!}#@w.k:#&M,P; P~:h,&5MoQ'7f h)ߊ .ęänhb70,0]s sAܜ 0E4Ȟ݀70=7`;"+( З0ibFwd ѕ}WI}JΘH8Ы% `!\gϮo*buZ|>#q~Qwdʒ|Wp2∁p y.)[X^>Wg-u5']E_EbsymGJJeh)sy!6gb/Ru"+]4B(C XV6JK,9',9%Aє٦E{G ڻ?O`? endstream endobj 14 0 obj 2200 endobj 11 0 obj << /Type /Page /Parent 8 0 R /Resources 13 0 R /Contents 12 0 R /MediaBox [0 0 792 612] >> endobj 13 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /Font << /F1.0 6 0 R /F1.1 7 0 R >> >> endobj 8 0 obj << /Type /Pages /MediaBox [0 0 792 612] /Count 2 /Kids [ 1 0 R 11 0 R ] >> endobj 15 0 obj << /Type /Catalog /Pages 8 0 R >> endobj 16 0 obj << /Length 17 0 R /Length1 17680 /Filter /FlateDecode >> stream xڝ{ |EU=g}%L2!  II ȭp;(\ <8RC8 eWPU("$ITWuwM{}U# h b2||s}yI!!)Y)n2sمTPSOj,: ^e*0%hOZ>m5_fΚ8~uD(o/.@X}a?pskdﯘ5w7~gT1-C@S8rģ75!P"j HD!=6"2#Yِ9NtBnzn9C1(8J-u< Qn$F{QꀒQ JEQJG(eN(uF9TV+ꆺ'E(J:[F|Ckup7|9B*)(oUURۋ#D^hTڊ}gПc;Ñ R Ũ{V74[gCl?ܱ3U[nnb}#9ёf椺_=zWŭ_/0Oift@ ?z SbaiSMDL-Sp&5D</u~Ɵ| $.r\bDf&3YbN23 IHfN]U/0j)-Ck:Na. `37P;nx$r /O~!qbKxiY*%E˪@V+GvKUT\ ?%2a,THNJ>KAZ4lAUKk}1 bQ{=Js݋{ApzuϠ{qOe)!@zm`bMY7T=t OV=dD9`0CM>QhyvmjjmJ SEou}1EG_ AD>0{R}wSۊsHd%O]454yFwKSLkw!w~n>lWp驋cY a89E0!Q`VN ơXh%'AZ,I qؤMf =uLMq8% R\;'C]\%s A0/p'n}m۞Ρ6naVZ%u۟r=y}vr+?[T3|f<[8sW?Z_"M|"p܊_%a^±ҽ;o!&Hv=2 `au ͂%zC.ǐ1YlR([U\hXUEG ߄ݻÕKp"9(a.6SQ]v{9'*5_@qخl=&N b&$^bVH0X$w ĉx<.'N3Lusal`7ktL{c|,}bIerLZۥq"nbb:lk>{j+ V>F ۇ7j{a7`%M%jk 1=21bKGp)2cMFVbXo)r^`N.x%*_RpI$m)8jL&c ;Ջ5J"_–S+ |S+GԾ H87n,fVW~ud^>ld #zXaa1>4)Fr r#6rx,qbF`uƾzAW FZc]p3(*ëFAQ]AK-&,tm :9M^lG԰7k{Wj!bУ:ܕ,%p3a.̇Xde3=vzt|~~a**vaBz1/ IJgFcR F0o%?,^w,E6^nlr$TZg5Rv@ ]5'H#M8'/lėS8l}Mwfγ+ob;醚f_^WOLoaަ gFgd'tm#؈dʀ5@>6g٧`4N2 WB5""f%h33l8iqn+WtϠL89]$ bl4g6``r97l\9ҜA ё <hjsw}OG`Nttt#jsy˼y@8nfCd C{ fmt\F#a~a7&`T65Uт0\M4ƃ 'P:<̔@Z;)3\1;U[z&BMb{=Gn :Í;JqOW_ϸq'Ix>עx3S}{̓ϑsD3 xlM)Y$9ʜ 錶ؗd! d MB!HIBb M - ~nN6F cמhR~DH@|<@Pwr9cMLФ'dɂS/#qƧ\?jͣC>U_x^>k9`|n_4=č*"Ӎ(M*Jgggq,V_$qVl!` V8`9I:! z cAe1xaady˾s!BօNWSfP3 R}4u )q>3L{I_/s͛[/eӹDͳ;WhшnB @8)kx*!zߢ.m{|xnW _3+ xeS+Oɪ^|dswT}ՙnW+3cu_T5=VWO) @bQ> h!ހ6!~ tn$ظxl5D}ٗ㟬=.#տ>07Im6Ɓ<c/ @]V^"6ol9* =Zz:%$7  7LS {ɠvo8A 8*eqN0cwXFuE5m6tbǫj+`1=~g4'<Pah6,U0㎦!ר=1`(Id)kO`찟]θ9[ߪ#zd"J1r[j._6iW-GؼGWMBpr.^^1\&Z$2c3lfٵf+` ۱VF"Cz\$HԎ%"$̘&#c(JIeK;61cG JK+X95 !K6ve'!\khh8>+v>SeVVNN׏GQh_׹+_]eJ2SFSΣG/M__?tZuSP2ڲٶvw_~E-}0DӔ /3Dgd" !5; -q/]-vDlԔb8.,'f=偳adJE6nHK!tHv`/< ?uTurgfli>6h|e9I/$ehd6'X AF%Yd3d4bʑ=vF<Ԉ^'}&֨x(rxB.T:huE p.]b.YR`8wF2\[E08q'=y/Բ7$Țr^kPZRɚ g.UT붜M@{8j.DnzpDPϤ#| FfK{yuElΕF4r %kUtĥzLIK6 ^& vg GHuvsXLdAlÜ!D'찹i[MG#²dߕ#>޷a^nNtמfWf~tn -J^#;递H %~p#xo LHb&p,1DD'~‡0TK8$(/,+ lgv6"z>M" j)i*I>U6nrnDV,:"Mc'Ǣ)T6̏GS|g$^c6ޢ ztPSWOsmܻs%ua]"( M rwUrMyVJz$0:^@(ي]B,(N@NY/^8k!)Ӓhٮi6e ( $Bqu3?R'?TrjIi>NfDb[gYmw)#YvʞgEAØ93,aW67AKbÄO`XǀAE"F "} @`D#<^Aѽ a52uQfEgBN] "AfXLF=mkt?WDC3sR޲/wnɭ߰Ȏrq7~(a?xDt>IZV !g.t:f`[mӜ~<Šx_ZyOp[f5/׶ G}P~nݍؚ=q^O,h8e!KA1\\ .wJ4 .] _XL8G180PK==Ys]AvatrŒNzDr!f'k̐R8G쾰hoY{i{pʫ^mG-㭗ػȂbǸݮO]&7:1T/QYs6z0YAݚ~/g_0'.}͘ P^J)X; G pI)'b-F6/Py|R8 Ӝ1~#^'`hĔeHŰ1`413ʜ L+Rqn{ަ#aj+F,u?=gYlI{b`bFQüK/{ikF^(O,Sb%z ]"y_<&J &;S8BSB0ұmvb!n Oz2l5%Mu=xvm?dŘGCj!SVˏ쳶Ms?.U ~ģt֡Q6>ƾ!չޗ>OY1Gud E[}u%01 !Ą;ͅaH:DŽmٛ)Lm-4F vOH׽(o`|;%V  ËT69 :Sݖ$%c cRP!jˡ)KIZ:&c1FB8={QE慛+]T_l頞?C9b}FFƛ귋rWsoq׸J1$"tad .ZX_'z8qy϶EZ >I/E=[VziS29sV9g1r8YVW C)t2tY,5 Cg~Wքo[|K_sCj)}V̏`M1hXȆhex H'^0_='#DtrK;*e F@M3Փrid8iȤHHMs^ w)?/~yj:O{$=8t&{{.8(Qu< n GzcmE?xTYq(fo-k6D,`Ȥ%mtf`߭0j<ț[+F$%E-~5so14_ GY]8: tH(K~4_1˹u:ee,wƋgEW;BZ5K%ރ4YD^'gaoq|[YY"M+0cJA?JʤEsU\ zGTY*9ԍ)̡ZF{[N5ϵI|XDG- @ D0v!h 1#{>i&?uZGD\m>H{N PJt]AkBlI$qy<;7#4#a0Og'Wy|Ue2qyFX#1 [ݡoNyJM61؃w0 :116W -+Vxz|.,=n/1Xbp =џ$‰)cPanՒٳss+[*eUFѼN#In8Pmԡ6Z^p`ɤ'o6$8:ߟ+{~[Ҋ6W=4?wChGn[|}Zru+[Hi6_gaAwtF_WH%"y]u梾Nd1c6IKz9lrbd.M|wű%>5moF^PF=Ccѱqr=ΝN't'''L'&ܤM6f¿5 қ*x= 3)GMCK&!Σy:r<*ň\<Ҡ2rQR)fG\RƁK?kkk>S[ FڊuꞚ;'N`nbcʝXp-Kݻ)|!=DPsf5Z,< glD bofPJ :SԌ)~5k@gBgt;tV6oO,?9:7nɢ0N;9Y\%(#Foԉ<1AK S?Mka&#5adf93k,L\*ަ.@c0겲]_-oli_ӝdp"'zSaPl<)DH)Ue#GۍM&LSu&q6-&qIB&B3î|Db.܇(o6imUy I9$Y: :.;]Xǫbc*K?PRݗ.~+|g@ϻ  o:sW^nBBFz~q'Eo)ioUCkqKNc=_'KaStGG7) zˬxcka`Y; PtG!Pd.TutVM[[#j^{Ŭ#"<tbK )|n#~kvQE ~ߢ.ѯ2%FJԹQmn=?fL4 SNwja;5 ))fKnlR]=m5RѲJ6hYͼ\d3\?2LSu审$rO,o]t@Vzyϱ,!7fy+b\Y9R4%R+U!Au%ͫy76G?6wec[$|գ}ְl`n,65NLT|<<`9ZϘ1_.ߚ5j/Ds)b>՝џ5EYaf2N%VӽFl 7V~"m~C]rIeSIsKK$fddpk֕L0!&)$0'2=Wk_47%-7m6dRt =:YH f ;ˮ';n'Sgw_zoᦐ#d;C.?o.?]59DdtmՁg䟠H§~VwĮ>oQ[74难['гh':ðhC*11zYǯv2ٝ\=s=ȝ`OpsC CV`5E ,r)dX`ՙBE>sCq, vB Z@AM&L"+E"k117n3P1<ܕtii>kC~=6ƿ?3oqFڻ?ʯgνc[{~l H}qymcE"=k̥rǞBkXAB=CMF(`;> u0rL;ʓP2}'CeyG}+DAY=^FfX0 u5^wmkn)( ץGEw {ءtB ؎[.Sl+V`lUb@+.J#?Ktn&uK Sƫ -ri9kgkmm}oΰKv==^OAyġ]*2ꄐ=rWFNjGF 3vPY8+9|ZGk/3ze{z]ui]o+*?Tc0n??>XρׅBz]np_ {>ᄎt货.v_RۨiFX)uiiz&DO0Zǡ/C=Y_oB|}+o/MЪ#z զP=LMп"\/gb+B}C"N$OljuDZ)z|?%Vե!jEX'Vg S)8.ZEAԉȋH׷~jiųtjm7i:(t{n]2ߝoͳt/*Mitz.8 B@O άάgV q>3ѵ;cv1k7gAo+,8_՘-x{0zR0l;tCiݞG~ i7i_~˦((AQng`߯q)hg+G}Ҵ>aZahd׺BХGHO%Oka>I>G>OSgoE3wKCePJkWVNu.왱(rtĩ_V(TVP;#Tk^KO Ak ޳V)+* /7}){ J/6+}BO{MBk*vWyΣܹ J endstream endobj 17 0 obj 12896 endobj 18 0 obj << /Type /FontDescriptor /Ascent 1000 /CapHeight 769 /Descent -250 /Flags 33 /FontBBox [ -144 -422 748 1223 ] /FontName /ZFNYZM+Monaco /ItalicAngle 0 /StemV 0 /Leading 83 /MaxWidth 600 /XHeight 553 /FontFile2 16 0 R >> endobj 19 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] endobj 6 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ZFNYZM+Monaco /FontDescriptor 18 0 R /Widths 19 0 R /FirstChar 32 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 20 0 obj << /Length 21 0 R /Length1 4236 /Filter /FlateDecode >> stream xڅV t$ l2$Yn !ФG K"MbB!J(4 "*TSS }I}vqrzjc{GS4@)02bſiUi߾ g9@E$76@}ox>l)D|lw_< NlWZַC|9-[ݻ5b!xxDV'FZ ;@0S?i8e DX5>=pZ<@\G0e34fnfL p<t3qC̆xn(pT#iM(t& +1oCx7Ȏӗ#YwL|XH+Be4D%$_MQl6#Y,z+2lQ m;F/7p>8wׂ_+Zi4rbp+~wNi ߢ٘h6-J!$ X Z'#Ffɋ egJ2Zu؋/Y,Bv3f~`IraPdzeC2=)2%C LlPD~~'4*XKѷ6~7qޥv ާ?)o(2FWD݆;0m<i<"C k6KS. W)-jYzy' [`+</P-8PF>(vbވBwb!kfavuE ;E>e TJWBQ+ĭbWYڤ)o pAt| /i4+ķ=8+Y@ֱT܁ob5:}L A;,÷,K}M!Vᡫ5=F~.*<3 y9oЦ9Tej{IIlǏ%EBGzW |$}OUU^U SEߐ(5DZ%<գ1Kh[Wsx9Lf<1P=fW͝t3\W֡·N#OIS<~`/X|.-= G؎n,j(egƠc~觳pVv \ت?Nr f݉>ܶy焒T8Szct4JJBT1 ג3}DEߗE]Y^ha 9ʼ8 Is#t*h"W>S4tqXDWrR[FA\ kE34SzkIR~`)-D|ͣlisuQLc,_WiUJI2_3˜RnLN\q4BqPO7 {=&xJ%R%ˤ )X(s`*%ɉMɱ,[eQftL[+o$-cj\2}(IM>ƶG'Ts{ qQCqUp~I9+) %Z4ASY)]/3H_?Lng=A|Aa/>ra/02< = "m5q[|Ӗe[ԭmZ8mmEX endstream endobj 21 0 obj 2935 endobj 22 0 obj << /Type /FontDescriptor /Ascent 1000 /CapHeight 769 /Descent -250 /Flags 5 /FontBBox [ -144 -422 748 1223 ] /FontName /RHUJEE+Monaco /ItalicAngle 0 /StemV 0 /Leading 83 /MaxWidth 600 /XHeight 553 /FontFile2 20 0 R >> endobj 23 0 obj [ 600 600 ] endobj 24 0 obj << /Length 25 0 R /Filter /FlateDecode >> stream x]PAj0{LA(9AI6dimJ$)0ٙYF%߂F,[Fqj긳IyS[SKa9og`4ܕIxRI ]5!=&6ǔs|A^o38{1(5U%U2$O[vQ+;N%k̛ B*WRZ>y9|N<sU endstream endobj 25 0 obj 229 endobj 7 0 obj << /Type /Font /Subtype /TrueType /BaseFont /RHUJEE+Monaco /FontDescriptor 22 0 R /Widths 23 0 R /FirstChar 33 /LastChar 34 /ToUnicode 24 0 R >> endobj 26 0 obj << /Author (legendre) /Creator (BBEdit Lite) /CreationDate (D:20051128165803-05'00') /ModDate (D:20051128165803-05'00') /Producer (Mac OS X 10.4.3 Quartz PDFContext) /Title (Varpart4 procedure \(65%\) .txt) >> endobj xref 0 27 0000000000 00000 n 0000006197 00000 n 0000000022 00000 n 0000006301 00000 n 0000006177 00000 n 0000007239 00000 n 0000023553 00000 n 0000027357 00000 n 0000009789 00000 n 0000006411 00000 n 0000007219 00000 n 0000009571 00000 n 0000007274 00000 n 0000009678 00000 n 0000009550 00000 n 0000009879 00000 n 0000009929 00000 n 0000022916 00000 n 0000022938 00000 n 0000023173 00000 n 0000023724 00000 n 0000026749 00000 n 0000026770 00000 n 0000027004 00000 n 0000027032 00000 n 0000027337 00000 n 0000027517 00000 n trailer << /Size 27 /Root 15 0 R /Info 26 0 R /ID [ <86c453135aec465dcea0f56896b0a1d5> <86c453135aec465dcea0f56896b0a1d5> ] >> startxref 27743 %%EOF vegan/vignettes/decision-vegan.Rnw0000644000176200001440000010106213231354436016751 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Design decisions and implementation} \documentclass[a4paper,10pt,twocolumn]{article} \usepackage{vegan} % package options and redefinitions \author{Jari Oksanen} \title{Design decisions and implementation details in vegan} \date{\footnotesize{ processed with vegan \Sexpr{packageDescription("vegan", field="Version")} in \Sexpr{R.version.string} on \today}} %% need no \usepackage{Sweave} \begin{document} \bibliographystyle{jss} \SweaveOpts{strip.white=true} <>= figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "> ", "continue" = " ") options(width = 55) require(vegan) @ \maketitle \begin{abstract} This document describes design decisions, and discusses implementation and algorithmic details in some vegan functions. The proper FAQ is another document. \end{abstract} \tableofcontents \section{Parallel processing} Several \pkg{vegan} functions can perform parallel processing using the standard \R{} package \pkg{parallel}. The \pkg{parallel} package in \R{} implements the functionality of earlier contributed packages \pkg{multicore} and \pkg{snow}. The \pkg{multicore} functionality forks the analysis to multiple cores, and \pkg{snow} functionality sets up a socket cluster of workers. The \pkg{multicore} functionality only works in unix-like systems (such as MacOS and Linux), but \pkg{snow} functionality works in all operating systems. \pkg{Vegan} can use either method, but defaults to \pkg{multicore} functionality when this is available, because its forked clusters are usually faster. This chapter describes both the user interface and internal implementation for the developers. \subsection{User interface} \label{sec:parallel:ui} The functions that are capable of parallel processing have argument \code{parallel}. The normal default is \code{parallel = 1} which means that no parallel processing is performed. It is possible to set parallel processing as the default in \pkg{vegan} (see \S\,\ref{sec:parallel:default}). For parallel processing, the \code{parallel} argument can be either \begin{enumerate} \item An integer in which case the given number of parallel processes will be launched (value $1$ launches non-parallel processing). In unix-like systems (\emph{e.g.}, MacOS, Linux) these will be forked \code{multicore} processes. In Windows socket clusters will be set up, initialized and closed. \item A previously created socket cluster. This saves time as the cluster is not set up and closed in the function. If the argument is a socket cluster, it will also be used in unix-like systems. Setting up a socket cluster is discussed in \S\,\ref{sec:parallel:socket}. \end{enumerate} \subsubsection{Using parallel processing as default} \label{sec:parallel:default} If the user sets option \code{mc.cores}, its value will be used as the default value of the \code{parallel} argument in \pkg{vegan} functions. The following command will set up parallel processing to all subsequent \pkg{vegan} commands: <>= options(mc.cores = 2) @ The \code{mc.cores} option is defined in the \pkg{parallel} package, but it is usually unset in which case \pkg{vegan} will default to non-parallel computation. The \code{mc.cores} option can be set by the environmental variable \code{MC_CORES} when the \pkg{parallel} package is loaded. \R{} allows setting up a default socket cluster (\code{setDefaultCluster}), but this will not be used in \pkg{vegan}. \subsubsection{Setting up socket clusters} \label{sec:parallel:socket} If socket clusters are used (and they are the only alternative in Windows), it is often wise to set up a cluster before calling parallelized code and give the pre-defined cluster as the value of the \code{parallel} argument in \pkg{vegan}. If you want to use socket clusters in unix-like systems (MacOS, Linux), this can be only done with pre-defined clusters. If socket cluster is not set up in Windows, \pkg{vegan} will create and close the cluster within the function body. This involves following commands: \begin{Schunk} \begin{Soutput} clus <- makeCluster(4) ## perform parallel processing stopCluster(clus) \end{Soutput} \end{Schunk} The first command sets up the cluster, in this case with four cores, and the second command stops the cluster. Most parallelized \pkg{vegan} functions work similarly in socket and fork clusters, but in \code{oecosimu} the parallel processing is used to evaluate user-defined functions, and their arguments and data must be made known to the socket cluster. For example, if you want to run in parallel the \code{meandist} function of the \code{oecosimu} example with a pre-defined socket cluster, you must use: <>= ## start up and define meandist() library(vegan) data(sipoo) meandist <- function(x) mean(vegdist(x, "bray")) library(parallel) clus <- makeCluster(4) clusterEvalQ(clus, library(vegan)) mbc1 <- oecosimu(dune, meandist, "r2dtable", parallel = clus) stopCluster(clus) @ Socket clusters are used for parallel processing in Windows, but you do not need to pre-define the socket cluster in \code{oecosimu} if you only need \pkg{vegan} commands. However, if you need some other contributed packages, you must pre-define the socket cluster also in Windows with appropriate \code{clusterEvalQ} calls. If you pre-set the cluster, you can also use \pkg{snow} style socket clusters in unix-like systems. \subsubsection{Random number generation} \pkg{Vegan} does not use parallel processing in random number generation, and you can set the seed for the standard random number generator. Setting the seed for the parallelized generator (L'Ecuyer) has no effect in \pkg{vegan}. \subsubsection{Does it pay off?} Parallelized processing has a considerable overhead, and the analysis is faster only if the non-parallel code is really slow (takes several seconds in wall clock time). The overhead is particularly large in socket clusters (in Windows). Creating a socket cluster and evaluating \code{library(vegan)} with \code{clusterEvalQ} can take two seconds or longer, and only pays off if the non-parallel analysis takes ten seconds or longer. Using pre-defined clusters will reduce the overhead. Fork clusters (in unix-likes operating systems) have a smaller overhead and can be faster, but they also have an overhead. Each parallel process needs memory, and for a large number of processes you need much memory. If the memory is exhausted, the parallel processes can stall and take much longer than non-parallel processes (minutes instead of seconds). If the analysis is fast, and function runs in, say, less than five seconds, parallel processing is rarely useful. Parallel processing is useful only in slow analyses: large number of replications or simulations, slow evaluation of each simulation. The danger of memory exhaustion must always be remembered. The benefits and potential problems of parallel processing depend on your particular system: it is best to rely on your own experience. \subsection{Internals for developers} The implementation of the parallel processing should accord with the description of the user interface above (\S\,\ref{sec:parallel:ui}). Function \code{oecosimu} can be used as a reference implementation, and similar interpretation and order of interpretation of arguments should be followed. All future implementations should be consistent and all must be changed if the call heuristic changes. The value of the \code{parallel} argument can be \code{NULL}, a positive integer or a socket cluster. Integer $1$ means that no parallel processing is performed. The ``normal'' default is \code{NULL} which in the ``normal'' case is interpreted as $1$. Here ``normal'' means that \R{} is run with default settings without setting \code{mc.cores} or environmental variable \code{MC_CORES}. Function \code{oecosimu} interprets the \code{parallel} arguments in the following way: \begin{enumerate} \item \code{NULL}: The function is called with argument \code{parallel = getOption("mc.cores")}. The option \code{mc.cores} is normally unset and then the default is \code{parallel = NULL}. \item Integer: An integer value is taken as the number of created parallel processes. In unix-like systems this is the number of forked multicore processes, and in Windows this is the number of workers in socket clusters. In Windows, the socket cluster is created, and if needed \code{library(vegan)} is evaluated in the cluster (this is not necessary if the function only uses internal functions), and the cluster is stopped after parallel processing. \item Socket cluster: If a socket cluster is given, it will be used in all operating systems, and the cluster is not stopped within the function. \end{enumerate} This gives the following precedence order for parallel processing (highest to lowest): \begin{enumerate} \item Explicitly given argument value of \code{parallel} will always be used. \item If \code{mc.cores} is set, it will be used. In Windows this means creating and stopping socket clusters. Please note that the \code{mc.cores} is only set from the environmental variable \code{MC_CORES} when you load the \pkg{parallel} package, and it is always unset before first \code{require(parallel)}. \item The fall back behaviour is no parallel processing. \end{enumerate} \section{Nestedness and Null models} Some published indices of nestedness and null models of communities are only described in general terms, and they could be implemented in various ways. Here I discuss the implementation in \pkg{vegan}. \subsection{Matrix temperature} The matrix temperature is intuitively simple (Fig. \ref{fig:nestedtemp}), but the the exact calculations were not explained in the original publication \cite{AtmarPat93}. \begin{figure} <>= data(sipoo) mod <- nestedtemp(sipoo) plot(mod, "i") x <- mod$c["Falcsubb"] y <- 1 - mod$r["Svartholm"] points(x,y, pch=16, cex=1.5) abline(x+y, -1, lty=2) f <- function(x, p) (1-(1-x)^p)^(1/p) cross <- function(x, a, p) f(x,p) - a + x r <- uniroot(cross, c(0,1), a = x+y, p = mod$p)$root arrows(x,y, r, f(r, mod$p), lwd=4) @ \caption{Matrix temperature for \emph{Falco subbuteo} on Sibbo Svartholmen (dot). The curve is the fill line, and in a cold matrix, all presences (red squares) should be in the upper left corner behind the fill line. Dashed diagonal line of length $D$ goes through the point, and an arrow of length $d$ connects the point to the fill line. The ``surprise'' for this point is $u = (d/D)^2$ and the matrix temperature is based on the sum of surprises: presences outside the fill line or absences within the fill line.} \label{fig:nestedtemp} \end{figure} The function can be implemented in many ways following the general principles. \citet{RodGir06} have seen the original code and reveal more details of calculations, and their explanation is the basis of the implementation in \pkg{vegan}. However, there are still some open issues, and probably \pkg{vegan} function \code{nestedtemp} will never exactly reproduce results from other programs, although it is based on the same general principles.\footnote{function \code{nestedness} in the \pkg{bipartite} package is a direct port of the original \proglang{BINMATNEST} program of \citet{RodGir06}.} I try to give main computation details in this document --- all details can be seen in the source code of \code{nestedtemp}. \begin{itemize} \item Species and sites are put into unit square \citep{RodGir06}. The row and column coordinates will be $(k-0.5)/n$ for $k=1 \ldots n$, so that there are no points in the corners or the margins of the unit square, and a diagonal line can be drawn through any point. I do not know how the rows and columns are converted to the unit square in other software, and this may be a considerable source of differences among implementations. \item Species and sites are ordered alternately using indices \citep{RodGir06}: \begin{equation} \begin{split} s_j &= \sum_{i|x_{ij} = 1} i^2 \\ t_j &= \sum_{i|x_{ij} = 0} (n-i+1)^2 \end{split} \end{equation} Here $x$ is the data matrix, where $1$ is presence, and $0$ is absence, $i$ and $j$ are row and column indices, and $n$ is the number of rows. The equations give the indices for columns, but the indices can be reversed for corresponding row indexing. Ordering by $s$ packs presences to the top left corner, and ordering by $t$ pack zeros away from the top left corner. The final sorting should be ``a compromise'' \citep{RodGir06} between these scores, and \pkg{vegan} uses $s+t$. The result should be cool, but the packing does not try to minimize the temperature \citep{RodGir06}. I do not know how the ``compromise'' is defined, and this can cause some differences to other implementations. \item The following function is used to define the fill line: \begin{equation} y = (1-(1-x)^p)^{1/p} \end{equation} This is similar to the equation suggested by \citet[eq. 4]{RodGir06}, but omits all terms dependent on the numbers of species or sites, because I could not understand why they were needed. The differences are visible only in small data sets. The $y$ and $x$ are the coordinates in the unit square, and the parameter $p$ is selected so that the curve covers the same area as is the proportion of presences (Fig. \ref{fig:nestedtemp}). The parameter $p$ is found numerically using \proglang{R} functions \code{integrate} and \code{uniroot}. The fill line used in the original matrix temperature software \citep{AtmarPat93} is supposed to be similar \citep{RodGir06}. Small details in the fill line combined with differences in scores used in the unit square (especially in the corners) can cause large differences in the results. \item A line with slope\,$= -1$ is drawn through the point and the $x$ coordinate of the intersection of this line and the fill line is found using function \code{uniroot}. The difference of this intersection and the row coordinate gives the argument $d$ of matrix temperature (Fig. \ref{fig:nestedtemp}). \item In other software, ``duplicated'' species occurring on every site are removed, as well as empty sites and species after reordering \cite{RodGir06}. This is not done in \pkg{vegan}. \end{itemize} \subsection{Backtracking} Gotelli's and Entsminger's seminal paper \cite{GotelliEnt01} on filling algorithms is somewhat confusing: it explicitly deals with ``knight's tour'' which is quite a different problem than the one we face with null models. The chess piece ``knight''\footnote{``Knight'' is ``Springer'' in German which is very appropriate as Springer was the publisher of the paper on ``knight's tour''} has a history: a piece in a certain position could only have entered from some candidate squares. The filling of incidence matrix has no history: if we know that the item last added was in certain row and column, we have no information to guess which of the filled items was entered previously. A consequence of dealing with a different problem is that \citet{GotelliEnt01} do not give many hints on implementing a fill algorithm as a community null model. The backtracking is implemented in two stages in \pkg{vegan}: filling and backtracking. \begin{enumerate} \item The matrix is filled in the order given by the marginal probabilities. In this way the matrix will look similar to the final matrix at all stages of filling. Equal filling probabilities are not used since that is ineffective and produces strange fill patterns: the rows and columns with one or a couple of presences are filled first, and the process is cornered to columns and rows with many presences. As a consequence, the the process tries harder to fill that corner, and the result is a more tightly packed quadratic fill pattern than with other methods. \item The filling stage stops when no new points can be added without exceeding row or column totals. ``Backtracking'' means removing random points and seeing if this allows adding new points to the plot. No record of history is kept (and there is no reason to keep a record of history), but random points are removed and filled again. The number of removed points increases from one to four points. New configuration is kept if it is at least as good as the previous one, and the number of removed points is reduced back to one if the new configuration is better than the old one. Because there is no record of history, this does not sound like a backtracking, but it still fits the general definition of backtracking: ``try something, and if it fails, try something else'' \citep{Sedgewick90}. \end{enumerate} \section{Scaling in redundancy analysis} This chapter discusses the scaling of scores (results) in redundancy analysis and principal component analysis performed by function \code{rda} in the \pkg{vegan} library. Principal component analysis decomposes a centred data matrix $\mathbf{X} = \{x_{ij}\}$ into $K$ orthogonal components so that $x_{ij} = \sqrt{n-1} \sum_{k=1}^K u_{ik} \sqrt{\lambda_k} v_{jk}$, where $u_{ik}$ and $v_{jk}$ are orthonormal coefficient matrices and $\lambda_k$ are eigenvalues. In \pkg{vegan} the eigenvalues sum up to variance of the data, and therefore we need to multiply with the square root of degrees of freedom $n-1$. Orthonormality means that sums of squared columns is one and their cross-product is zero, or $\sum_i u_{ik}^2 = \sum_j v_{jk}^2 = 1$, and $\sum_i u_{ik} u_{il} = \sum_j v_{jk} v_{jl} = 0$ for $k \neq l$. This is a decomposition, and the original matrix is found exactly from the singular vectors and corresponding singular values, and first two singular components give the rank $=2$ least squares estimate of the original matrix. The coefficients $u_{ik}$ and $v_{jk}$ are scaled to unit length for all axes $k$. Eigenvalues $\lambda_k$ give the information of the importance of axes, or the `axis lengths.' Instead of the orthonormal coefficients, or equal length axes, it is customary to scale species (column) or site (row) scores or both by eigenvalues to display the importance of axes and to describe the true configuration of points. Table \ref{tab:scales} shows some alternative scalings. These alternatives apply to principal components analysis in all cases, and in redundancy analysis, they apply to species scores and constraints or linear combination scores; weighted averaging scores have somewhat wider dispersion. \begin{table*}[t] \centering \caption{\label{tab:scales} Alternative scalings for \textsc{rda} used in the functions \code{prcomp} and \code{princomp}, and the one used in the \pkg{vegan} function \code{rda} and the proprietary software \proglang{Canoco} scores in terms of orthonormal species ($v_{ik}$) and site scores ($u_{jk}$), eigenvalues ($\lambda_k$), number of sites ($n$) and species standard deviations ($s_j$). In \code{rda}, $\mathrm{const} = \sqrt[4]{(n-1) \sum \lambda_k}$. Corresponding negative scaling in \pkg{vegan} % and corresponding positive scaling in \texttt{Canoco 3} is derived dividing each species by its standard deviation $s_j$ (possibly with some additional constant multiplier). } \begin{tabular}{lcc} \\ \toprule & \textbf{Site scores} $u_{ik}^*$ & \textbf{Species scores} $v_{jk}^*$ \\ \midrule \code{prcomp, princomp} & $u_{ik} \sqrt{n-1} \sqrt{\lambda_k}$ & $v_{jk}$ \\ \code{stats::biplot} & $u_{ik}$ & $v_{jk} \sqrt{n} \sqrt{\lambda_k}$ \\ \code{stats::biplot, pc.biplot=TRUE} & $u_{ik} \sqrt{n-1}$ & $v_{jk} \sqrt{\lambda_k}$\\ \code{rda, scaling="sites"} & $u_{ik} \sqrt{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ & $v_{jk} \times \mathrm{const}$ \\ \code{rda, scaling="species"} & $u_{ik} \times \mathrm{const}$ & $v_{jk} \sqrt{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ \\ \code{rda, scaling="symmetric"} & $u_{ik} \sqrt[4]{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ & $v_{jk} \sqrt[4]{\lambda_k/ \sum \lambda_k} \times \mathrm{const}$ \\ \code{rda, correlation=TRUE} & $u_{ik}^*$ & $\sqrt{\sum \lambda_k /(n-1)} s_j^{-1} v_{jk}^*$ \\ % \code{Canoco 3, scaling=-1} & % $u_{ik} \sqrt{n-1} \sqrt{\lambda_k / \sum \lambda_k}$ & % $v_{jk} \sqrt{n}$ \\ % \code{Canoco 3, scaling=-2} & % $u_{ik} \sqrt{n-1}$ & % $v_{jk} \sqrt{n} \sqrt{\lambda_k / \sum \lambda_k}$ % \\ % \code{Canoco 3, scaling=-3} & % $u_{ik} \sqrt{n-1} \sqrt[4]{\lambda_k / \sum \lambda_k}$ & % $v_{jk} \sqrt{n} \sqrt[4]{\lambda_k / \sum \lambda_k}$ \bottomrule \end{tabular} \end{table*} In community ecology, it is common to plot both species and sites in the same graph. If this graph is a graphical display of \textsc{pca}, or a graphical, low-dimensional approximation of the data, the graph is called a biplot. The graph is a biplot if the transformed scores satisfy $x_{ij} = c \sum_k u_{ij}^* v_{jk}^*$ where $c$ is a scaling constant. In functions \code{princomp}, \code{prcomp} and \code{rda} with \code{scaling = "sites"}, the plotted scores define a biplot so that the eigenvalues are expressed for sites, and species are left unscaled. % For \texttt{Canoco 3} $c = n^{-1} \sqrt{n-1} % \sqrt{\sum \lambda_k}$ with negative \proglang{Canoco} scaling % values. All these $c$ are constants for a matrix, so these are all % biplots with different internal scaling of species and site scores % with respect to each other. For \proglang{Canoco} with positive scaling % values and \pkg{vegan} with negative scaling values, no constant % $c$ can be found, but the correction is dependent on species standard % deviations $s_j$, and these scores do not define a biplot. There is no natural way of scaling species and site scores to each other. The eigenvalues in redundancy and principal components analysis are scale-dependent and change when the data are multiplied by a constant. If we have percent cover data, the eigenvalues are typically very high, and the scores scaled by eigenvalues will have much wider dispersion than the orthonormal set. If we express the percentages as proportions, and divide the matrix by $100$, the eigenvalues will be reduced by factor $100^2$, and the scores scaled by eigenvalues will have a narrower dispersion. For graphical biplots we should be able to fix the relations of row and column scores to be invariant against scaling of data. The solution in \proglang{R} standard function \code{biplot} is to scale site and species scores independently, and typically very differently (Table~\ref{tab:scales}), but plot each independently to fill the graph area. The solution in \proglang{Canoco} and \code{rda} is to use proportional eigenvalues $\lambda_k / \sum \lambda_k$ instead of original eigenvalues. These proportions are invariant with scale changes, and typically they have a nice range for plotting two data sets in the same graph. The \textbf{vegan} package uses a scaling constant $c = \sqrt[4]{(n-1) \sum \lambda_k}$ in order to be able to use scaling by proportional eigenvalues (like in \proglang{Canoco}) and still be able to have a biplot scaling. Because of this, the scaling of \code{rda} scores is non-standard. However, the \code{scores} function lets you to set the scaling constant to any desired values. It is also possible to have two separate scaling constants: the first for the species, and the second for sites and friends, and this allows getting scores of other software or \proglang{R} functions (Table \ref{tab:rdaconst}). \begin{table*}[t] \centering \caption{\label{tab:rdaconst} Values of the \code{const} argument in \textbf{vegan} to get the scores that are equal to those from other functions and software. Number of sites (rows) is $n$, the number of species (columns) is $m$, and the sum of all eigenvalues is $\sum_k \lambda_k$ (this is saved as the item \code{tot.chi} in the \code{rda} result)}. \begin{tabular}{lccc} \\ \toprule & \textbf{Scaling} &\textbf{Species constant} & \textbf{Site constant} \\ \midrule \pkg{vegan} & any & $\sqrt[4]{(n-1) \sum \lambda_k}$ & $\sqrt[4]{(n-1) \sum \lambda_k}$\\ \code{prcomp}, \code{princomp} & \code{1} & $1$ & $\sqrt{(n-1) \sum_k \lambda_k}$\\ \proglang{Canoco\,v3} & \code{-1, -2, -3} & $\sqrt{n-1}$ & $\sqrt{n}$\\ \proglang{Canoco\,v4} & \code{-1, -2, -3} & $\sqrt{m}$ & $\sqrt{n}$\\ \bottomrule \end{tabular} \end{table*} The scaling is controlled by three arguments in the \code{scores} function in \pkg{vegan}: \begin{enumerate} \item \code{scaling} with options \code{"sites"}, \code{"species"} and \code{"symmetric"} defines the set of scores which is scaled by eigenvalues (Table~\ref{tab:scales}). \item \code{const} can be used to set the numeric scaling constant to non-default values (Table~\ref{tab:rdaconst}). \item \code{correlation} can be used to modify species scores so that they show the relative change of species abundance, or their correlation with the ordination (Table~\ref{tab:scales}). This is no longer a biplot scaling. \end{enumerate} \section{Weighted average and linear combination scores} Constrained ordination methods such as Constrained Correspondence Analysis (CCA) and Redundancy Analysis (RDA) produce two kind of site scores \cite{Braak86, Palmer93}: \begin{itemize} \item LC or Linear Combination Scores which are linear combinations of constraining variables. \item WA or Weighted Averages Scores which are such weighted averages of species scores that are as similar to LC scores as possible. \end{itemize} Many computer programs for constrained ordinations give only or primarily LC scores following recommendation of \citet{Palmer93}. However, functions \code{cca} and \code{rda} in the \pkg{vegan} package use primarily WA scores. This chapter explains the reasons for this choice. Briefly, the main reasons are that \begin{itemize} \item LC scores \emph{are} linear combinations, so they give us only the (scaled) environmental variables. This means that they are independent of vegetation and cannot be found from the species composition. Moreover, identical combinations of environmental variables give identical LC scores irrespective of vegetation. \item \citet{McCune97} has demonstrated that noisy environmental variables result in deteriorated LC scores whereas WA scores tolerate some errors in environmental variables. All environmental measurements contain some errors, and therefore it is safer to use WA scores. \end{itemize} This article studies mainly the first point. The users of \pkg{vegan} have a choice of either LC or WA (default) scores, but after reading this article, I believe that most of them do not want to use LC scores, because they are not what they were looking for in ordination. \subsection{LC Scores are Linear Combinations} Let us perform a simple CCA analysis using only two environmental variables so that we can see the constrained solution completely in two dimensions: <<>>= library(vegan) data(varespec) data(varechem) orig <- cca(varespec ~ Al + K, varechem) @ Function \code{cca} in \pkg{vegan} uses WA scores as default. So we must specifically ask for LC scores (Fig. \ref{fig:ccalc}). <>= plot(orig, dis=c("lc","bp")) @ \begin{figure} <>= <> @ \caption{LC scores in CCA of the original data.} \label{fig:ccalc} \end{figure} What would happen to linear combinations of LC scores if we shuffle the ordering of sites in species data? Function \code{sample()} below shuffles the indices. <<>>= i <- sample(nrow(varespec)) shuff <- cca(varespec[i,] ~ Al + K, varechem) @ \begin{figure} <>= plot(shuff, dis=c("lc","bp")) @ \caption{LC scores of shuffled species data.} \label{fig:ccashuff} \end{figure} It seems that site scores are fairly similar, but oriented differently (Fig. \ref{fig:ccashuff}). We can use Procrustes rotation to see how similar the site scores indeed are (Fig. \ref{fig:ccaproc}). <>= plot(procrustes(scores(orig, dis="lc"), scores(shuff, dis="lc"))) @ \begin{figure} <>= <> @ \caption{Procrustes rotation of LC scores from CCA of original and shuffled data.} \label{fig:ccaproc} \end{figure} There is a small difference, but this will disappear if we use Redundancy Analysis (RDA) instead of CCA (Fig. \ref{fig:rdaproc}). Here we use a new shuffling as well. <<>>= tmp1 <- rda(varespec ~ Al + K, varechem) i <- sample(nrow(varespec)) # Different shuffling tmp2 <- rda(varespec[i,] ~ Al + K, varechem) @ \begin{figure} <>= plot(procrustes(scores(tmp1, dis="lc"), scores(tmp2, dis="lc"))) @ \caption{Procrustes rotation of LC scores in RDA of the original and shuffled data.} \label{fig:rdaproc} \end{figure} LC scores indeed are linear combinations of constraints (environmental variables) and \emph{independent of species data}: You can shuffle your species data, or change the data completely, but the LC scores will be unchanged in RDA. In CCA the LC scores are \emph{weighted} linear combinations with site totals of species data as weights. Shuffling species data in CCA changes the weights, and this can cause changes in LC scores. The magnitude of changes depends on the variability of site totals. The original data and shuffled data differ in their goodness of fit: <<>>= orig shuff @ Similarly their WA scores will be (probably) very different (Fig. \ref{fig:ccawa}). \begin{figure} <>= plot(procrustes(orig, shuff)) @ \caption{Procrustes rotation of WA scores of CCA with the original and shuffled data.} \label{fig:ccawa} \end{figure} The example used only two environmental variables so that we can easily plot all constrained axes. With a larger number of environmental variables the full configuration remains similarly unchanged, but its orientation may change, so that two-dimensional projections look different. In the full space, the differences should remain within numerical accuracy: <<>>= tmp1 <- rda(varespec ~ ., varechem) tmp2 <- rda(varespec[i,] ~ ., varechem) proc <- procrustes(scores(tmp1, dis="lc", choi=1:14), scores(tmp2, dis="lc", choi=1:14)) max(residuals(proc)) @ In \code{cca} the difference would be somewhat larger than now observed \Sexpr{format.pval(max(residuals(proc)))} because site weights used for environmental variables are shuffled with the species data. \subsection{Factor constraints} It seems that users often get confused when they perform constrained analysis using only one factor (class variable) as constraint. The following example uses the classical dune meadow data \cite{Jongman87}: <<>>= data(dune) data(dune.env) orig <- cca(dune ~ Moisture, dune.env) @ When the results are plotted using LC scores, sample plots fall only in four alternative positions (Fig. \ref{fig:factorlc}). \begin{figure} <>= plot(orig, dis="lc") @ \caption{LC scores of the dune meadow data using only one factor as a constraint.} \label{fig:factorlc} \end{figure} In the previous chapter we saw that this happens because LC scores \emph{are} the environmental variables, and they can be distinct only if the environmental variables are distinct. However, normally the user would like to see how well the environmental variables separate the vegetation, or inversely, how we could use the vegetation to discriminate the environmental conditions. For this purpose we should plot WA scores, or LC scores and WA scores together: The LC scores show where the site \emph{should} be, the WA scores shows where the site \emph{is}. Function \code{ordispider} adds line segments to connect each WA score with the corresponding LC (Fig. \ref{fig:walcspider}). <>= plot(orig, display="wa", type="points") ordispider(orig, col="red") text(orig, dis="cn", col="blue") @ \begin{figure} <>= <> @ \caption{A ``spider plot'' connecting WA scores to corresponding LC scores. The shorter the web segments, the better the ordination.} \label{fig:walcspider} \end{figure} This is the standard way of displaying results of discriminant analysis, too. Moisture classes \code{1} and \code{2} seem to be overlapping, and cannot be completely separated by their vegetation. Other classes are more distinct, but there seems to be a clear arc effect or a ``horseshoe'' despite using CCA. \subsection{Conclusion} LC scores are only the (weighted and scaled) constraints and independent of vegetation. If you plot them, you plot only your environmental variables. WA scores are based on vegetation data but are constrained to be as similar to the LC scores as only possible. Therefore \pkg{vegan} calls LC scores as \code{constraints} and WA scores as \code{site scores}, and uses primarily WA scores in plotting. However, the user makes the ultimate choice, since both scores are available. \bibliography{vegan} \end{document} vegan/MD50000644000176200001440000007541713232100754011675 0ustar liggesusers4c52247ff04401f4d4e511d14e7a85d6 *DESCRIPTION 381b932b32a6f7509be4dba13a10c622 *NAMESPACE 4b8531b446af54510e5fb31f841aed2f *R/AIC.radfit.R e9814d051bdf49db5606399ac3a4704e *R/CCorA.R da0ea7ae9e283690809aba8077a84671 *R/GowerDblcen.R 1f6d929d13d2150d2dc023f997a1c9cc *R/MDSrotate.R 1a95c5873b1546683487e17aae4fe511 *R/MOStest.R e3142dcdfd4d5e7d2b2c653ea8e8ff06 *R/RsquareAdj.R 4ff8f584b8619b4262b0453c178b4e4c *R/SSarrhenius.R b16c440e6425bb8275af82740c88b06c *R/SSgitay.R 5c50828bd1466847e54ffd44ddf62df0 *R/SSgleason.R e4754677764163b028ce3237d9b4a11b *R/SSlomolino.R d80688d78aba3cd9367ffaaaec6ec252 *R/TukeyHSD.betadisper.R 7119c3a30046011fc164ebde2dd624bc *R/add1.cca.R 0f953ea124a0d579b79d32974961ec87 *R/ade2vegancca.R 3fea698281bc0b4c3a5ad26f4d44d0e2 *R/adipart.R 6d8b8084eb99357cf7a6e95894514520 *R/adipart.default.R 6e0cc43b676b69a43ca460c886da2f28 *R/adipart.formula.R 23af28a7ddb2957549409a1e80481b82 *R/adonis.R 950d2493f08fc212fac4ebb263350ca3 *R/adonis2.R 7331b1428563ed9add00b088b50617fd *R/alias.cca.R 4bdae1555a954b5266ac30300783ffd8 *R/anosim.R a4f23289c4a5eab2a3587292b306d497 *R/anova.betadisper.R 74c2e9a04d759679b59363f641c91ba7 *R/anova.cca.R 275fc75ab96b0569cb6e0f75caeabc63 *R/anova.ccabyterm.R cd89ea579a34db076f699d05645a7b8e *R/anova.ccalist.R 4f82772f1ce6f20d1b2485138aaa7609 *R/anova.ccanull.R 7fab08bcc596df60a22c4b04c8507121 *R/anova.prc.R eded8dec556ee875d56887859b0abee8 *R/as.fisher.R 66c29064fff4854203ab2cd50e661558 *R/as.hclust.spantree.R 96dbacc8c238120ee7853fc399a956c9 *R/as.mcmc.oecosimu.R cfaa7dc7d3f45c29e59e83326f1371d4 *R/as.mcmc.permat.R 71fe13d6613d600ccb8b5894a55b87a3 *R/as.mlm.R 04e68f763a80458233c23ebf7ca399f1 *R/as.mlm.cca.R f811921a26c73d7a5adcbafd35d5280a *R/as.mlm.rda.R 9aa1bcc7ee7a06041f2ed81a7885141c *R/as.preston.R 50aa2e700cc26301885d9ef7ca7f12c4 *R/as.rad.R a9297920fdeeb053cfe57930118ca20c *R/as.ts.oecosimu.R 704239604b0ed8420cb22a31b28a01d3 *R/as.ts.permat.R fbec6d133dea10372ce082c7035a8ab2 *R/beals.R 9067ff32c0361faea6601e7df46c07fa *R/betadisper.R 2943ef31dcda3c6189e1ffda42641aba *R/betadiver.R 46ae3f75a0b483fecab589637d72a307 *R/bgdispersal.R 4603ea944d470a9e284cb6cab6d75529 *R/bioenv.R 68f7dc3b2c6c698c3288605c90f5cd80 *R/bioenv.default.R c41d73027fbc46fc9c71c627d1994a66 *R/bioenv.formula.R 4dbe9f135fadbba3f6939d64a5bb0e29 *R/biplot.CCorA.R 683881621ee922e1fd30c77f31ee8909 *R/biplot.rda.R 0999bb90f22b72fade2ca6adbd01758f *R/boxplot.betadisper.R dd03c1ef27bc56d056dc761fd7ecd153 *R/boxplot.specaccum.R cbf54233db3c2839101f98e02eb538dd *R/bstick.R 79775431ff9ad60359d3d4b99e85b44b *R/bstick.cca.R 229bb1ed02b171c8ce0a2bdfb3b37ef6 *R/bstick.decorana.R b5a4874f7763f1793b3068eec4e859d5 *R/bstick.default.R 4bf61eddbdd1cec0bd03150cd478f3d9 *R/bstick.prcomp.R 2ad6f2071ad822c631e04705df2b245c *R/bstick.princomp.R b98443c6f47168edc9fd96e8a30c82e1 *R/cIndexKM.R a6df607186ceb18d204494b6a33816d4 *R/calibrate.R b77b0d9c9f95e4366d2db893a07aaed2 *R/calibrate.cca.R f56b52d53b17c7dc8d8c9accd5a3401a *R/calibrate.ordisurf.R 176ac0fc7d603de0ef7f490217de7009 *R/capscale.R 52b06d758d53934d0b67b4e7653dc3dd *R/cascadeKM.R 2e09a82ec52e211afc2ac6e8d4b40898 *R/cca.R 08ee285d0453ec46ba8c79366ed84c23 *R/cca.default.R ef3f23773999c3466c303c79b98375f0 *R/cca.formula.R efd5146e35f97186b97ca1bb6e618c79 *R/centroids.cca.R c66d8fbe69ccca94f2ee8f777ff16ae2 *R/checkSelect.R 6faf5d12f3e1abb40c0f8d2cfeabc4b4 *R/clamtest.R 6ee5070eb4ec1a82e1dd59db5328fa41 *R/coef.cca.R 8ed92f141523fe0cc4c3bb51807b8b07 *R/coef.radfit.R 6b212de1ac255f3d8157fd8f8801aeca *R/coef.rda.R 855938510011daed294a819e40c7dfb8 *R/commsim.R 397c7044d52639a5a0ce2557638de486 *R/confint.MOStest.R 191ebc7278f8bdc69ae353d1c02a1d60 *R/contribdiv.R e0449c3666763adaef0b70a5fffc864c *R/cophenetic.spantree.R edee3aaced61290b219985d0ce69155c *R/coverscale.R 208905c12826c443641353b369fa6273 *R/dbrda.R 0732c6a49ad12d5cc56aeced9bd47714 *R/decorana.R c22bdcfe87e2bf710db3b301d880a54a *R/decostand.R e450e8f1e80659cedc734f0931ba5059 *R/designdist.R 8fb0105cb21a5e425f72e0085fa669a2 *R/deviance.cca.R c8b0d7a7a0ab293b4b215d9e1967351e *R/deviance.rda.R 1898b0d7b1ee3f860ab52aeb525839b8 *R/dispindmorisita.R 50948e10cb607ffc89adc46d9335d640 *R/dispweight.R cafeabc2133997b3381c9edf6a971abf *R/distconnected.R 9341b1179d0b6f452e12e491cb7b6823 *R/diversity.R 00136d6f9d6dd5ca16db7633eceb4e92 *R/downweight.R 54fbab991f938a0c3e9353121cc34fec *R/drop1.cca.R 79c66a10794aacaf08f1d28192228bea *R/eigengrad.R 3481fc55ba439f64100b3954f2e775a3 *R/eigenvals.R 17a62527ee103c09bfba0c851ab12560 *R/envfit.R f95e374ad94346f78ec0b4b929f39b28 *R/envfit.default.R 3daf51b37b06f56aaa7bcdf740c46eb4 *R/envfit.formula.R 0b5f742d4f302ab12c17fe3fc3e3deee *R/estaccumR.R 81098475867f802dea0565fe426c9fc5 *R/estimateR.R cf0a0bf7116ef7a21e090d0c1a76f8d0 *R/estimateR.data.frame.R b0c120006191ab71abb8221637f927ae *R/estimateR.default.R 1df3194c88598964282c114cb8db5513 *R/estimateR.matrix.R c50bc8ea278de3acaf5a4f097a6db58e *R/eventstar.R a184abc0cc159b4c71f7e62cf6c7034c *R/extractAIC.cca.R 4fc4a8c1e770cfe313e47aec4cc34986 *R/factorfit.R 7e304b1c384c4d8588e5dbedd9459c73 *R/fieller.MOStest.R ee8330855e6a7bc2350047d76b2209a4 *R/fisher.alpha.R 2776f68ef40e177303c3b73163036969 *R/fisherfit.R 15075c7f443896f54b5e0befd21c17bf *R/fitspecaccum.R 3f7d0c9c7f0509455863056a98358d36 *R/fitted.capscale.R ee2e3daa463fb46ffce01206f8b44fa5 *R/fitted.cca.R 000a71e4b3ec565a541325caac6efb11 *R/fitted.dbrda.R 0080b65cfd48bac5e53961b8e12682e5 *R/fitted.procrustes.R 892cc9bf94b232f6a5c2936ea4f63592 *R/fitted.radfit.R 4fa5eb43fa72a6e09773888ba01d4668 *R/fitted.rda.R 9af5bead3fcebce9c225681044652ac1 *R/gdispweight.R 687cac5f8c1d327e234a1dee6a42fe61 *R/getPermuteMatrix.R 57c9a7ccff6a9c066b2aba3475f2330b *R/goodness.R aa6cac97fcd00c1a6d8a39cc6fdd3d1d *R/goodness.cca.R 5364f16346047d3b8719ddef653a70bb *R/goodness.metaMDS.R 8a767726c40223a58d4055759bf41efe *R/head.summary.cca.R 25d2377be819fa41f9856329f2e9d693 *R/hierParseFormula.R 3d19236ee5dd2f1c678061773895e86f *R/hiersimu.R 786179cf06d7a24c21fca7cb3a907ae4 *R/hiersimu.default.R 848772d209bbabe3515a9b4c7fcd15be *R/hiersimu.formula.R d339f34f4391000db4826e1bc1e35d57 *R/howHead.R d02fc9c672a9b2c4a31065702a3381be *R/humpfit.R 3c369a5830a3f0b638b3f5ffa6b60f81 *R/identify.ordiplot.R 9e731fa2cfb821bbe7ed62336d5fa3b3 *R/indpower.R 7e4d848df4b8e266b7441f0f9be13e10 *R/inertcomp.R bf423cb7cf07abc3a4c64229bcc8fc14 *R/initMDS.R 2282a508f8d362c7184ba1b42df6cd2d *R/intersetcor.R c63972a171f76f92652feeb2daf30e82 *R/isomap.R 1e167e69edcee4aa651d97bef81b31e9 *R/isomapdist.R 5abdcd58cf3811e482543d5207114331 *R/kendall.global.R 814a92ded8985a249d4f5973f2c1fd6c *R/kendall.post.R 14f4282484b5ff091f36b30e190693f8 *R/labels.envfit.R 131b9e9e84f94acdf044430143e19ac8 *R/lines.humpfit.R f1d30acca998f0fe17e8363203f1b920 *R/lines.permat.R eb4e11e71eeefa6ec64e4a2580b8af75 *R/lines.prestonfit.R 27a5c4e66e0c7d54f458904b596cc7e1 *R/lines.procrustes.R 39604c069428cda7c9d2ed199ac4e28a *R/lines.radline.R 66d749d120812f26c7bb7a50e014e0b6 *R/lines.spantree.R 4163375ba5178f6e98a0b50f63b91ead *R/linestack.R d4016f57508e6e679bd71775b4115cbb *R/make.cepnames.R bc8000fb2b1122f58121aa06ac54946c *R/make.commsim.R f25f916c75667aa6eb64136817e79256 *R/mantel.R fdb2f4786b31866197c80d827584edaf *R/mantel.correlog.R 3e005ec1cc5a4231ee7c470cb30df01b *R/mantel.partial.R 8f1b55478a7416a431dca4e73b09f334 *R/meandist.R f7df1eb786cb44781111ce82fb67308b *R/metaMDS.R 77c522a4c1174e0045c6b0e7a4dfb1d1 *R/metaMDSdist.R 22829153822a85b138e67e6657122d48 *R/metaMDSiter.R f63315501ad2f3a96dee9ee27a867131 *R/metaMDSredist.R 928df675822d321e4533ba2b7cf0c79f *R/model.frame.cca.R 9406148bd2cfa3e74b83adfe24858c46 *R/model.matrix.cca.R f8393616833643a1e45ef000b6ab878d *R/monoMDS.R 6d34db023ade607438d62d041a14fb12 *R/mrpp.R 16130eb8f8dd845b2e3cd4c5609a53fa *R/mso.R 8cc1f15bd9fd206ec8ca49fb08dc4214 *R/msoplot.R 7c219818ce5841e957db47f16986080b *R/multipart.R 64baece57d0980cba59423bc27a2584f *R/multipart.default.R 29b7db2c1d5a97651bacf96ee4f8baaf *R/multipart.formula.R d735d387f687378b275a7017ed592fd3 *R/nestedbetasor.R 6100179a10b511a93105c40ac194b088 *R/nestedchecker.R 8710b8b289de29493cf03f917015713a *R/nesteddisc.R 20cd3b812b25a8012ea80be97b12520a *R/nestedn0.R 36f7ec0897cd6517784bc7dcb12ce827 *R/nestednodf.R e7ddbbc85fd1a656e4343f5469621124 *R/nestedtemp.R 74b2723851155de631716fa479f8ea38 *R/no.shared.R e32f7eed2a94f7b20ed48598b79b3003 *R/nobs.R 9c89764ae10460148c1dcf9d25e05649 *R/nullmodel.R 80ff8785e21cd7a4a1362c46d3536f3e *R/oecosimu.R ed3928f1675b3211ddd239f6144b1f9e *R/oldCapscale.R 9aa3918a3d420de18a7be3c674e31274 *R/orderingKM.R fe4f72fa1928f93c92840af2ae08b52e *R/ordiArgAbsorber.R ffd002ae0ed83062dabb963f02f3c854 *R/ordiArrowMul.R 1f50c54490f6cbfa7300255219939ccb *R/ordiArrowTextXY.R 99c1ec285e2afe4fb8beccbd507a123e *R/ordiNAexclude.R 524552fe7ed8073bd7c5f22aa4fd2c05 *R/ordiParseFormula.R 40ef1c428a346a726bcfba6a42ce68b5 *R/ordiR2step.R 097816aa72677bacfa2e0044c1c554cf *R/ordiTerminfo.R 0479dddb459689b902afc44295bd5f7a *R/ordiYbar.R a1a229f63a785534a5135815564d4581 *R/ordiareatest.R a7f82442062699d56ea176a7d87e9ac4 *R/ordiarrows.R 2b2c4ee6b157be9425eff260647b5c39 *R/ordibar.R 85f3047b80ab9a2ea57dd7935d07b583 *R/ordicloud.R 2e13df86ab2e32188a3b034ae928b31b *R/ordicluster.R 04da9ccfd4ac2a36a08bb7911b01cf0c *R/ordiellipse.R c253906529c77aead16b293275f1afc3 *R/ordigrid.R e28c083009568ab3cc82d5fab2ba109b *R/ordihull.R 208b0fe7875e5c79cd400970406a44ce *R/ordilabel.R 20a6f500c31e6640de535f0730b69a55 *R/ordilattice.getEnvfit.R c805e6801ef30758b9f7718269cabdfc *R/ordimedian.R 55d2f18681d065ea6dd29e0f1e64772e *R/ordiplot.R 4f4fd722823b3825edd1b5c1fdb6888c *R/ordipointlabel.R bdf088c7c0e8b020ca7ebbc6f83c3712 *R/ordiresids.R 247ea2a9441bf23573e6ee169bad16b3 *R/ordisegments.R a4872e171e115d248db3863f1c989a61 *R/ordispider.R 96516a08af37e2e3066799d466826889 *R/ordisplom.R d8b2f0396483d568ffe6a01a01bafbe0 *R/ordistep.R 3b80a8393c6d205a6dcd80baeed0fa38 *R/ordisurf.R b20a02ac38859dd3f8723876b8a1a9c3 *R/orditkplot.R be924e727bbf81408b9bb303fe9b64ac *R/orditorp.R 5a99010a09cd4a018b02d397be8cc4ec *R/ordixyplot.R 657de1a3fe33c8e36a1b5728a39aab46 *R/panel.ordi.R 94ff61e031b751b9594400a51decc13b *R/panel.ordi3d.R 3bab50920d7e58e2bf0b96a6b874cd9d *R/pasteCall.R dda3814acdd10fc04554cb0a17c6b1ca *R/pcnm.R b5b164724f3872370bff36ef767f8efb *R/permatfull.R eeeaf4245033bd2a4ce822c919e42c6e *R/permatswap.R 2b1a9af8b638ed1e2138267237d6a497 *R/permustats.R 3d6a5ecd5feab93db30c063fd144d422 *R/permuted.index.R d2b4ce957bcc6376391f045b7046c697 *R/permutest.betadisper.R c0c65873159cda3b68e3c0cca5be237a *R/permutest.cca.R b4e77b98f86c4b567d687b64e3aa8812 *R/persp.renyiaccum.R b499c6eea710aa0c65a580dba30f2914 *R/persp.tsallisaccum.R f7c8d52c791489d956a7fd833913f242 *R/plot.MOStest.R 5334397cbe3c0188928c4bd3146e118d *R/plot.anosim.R d22b613aa14eb3dedb83eaa752435b21 *R/plot.betadisper.R de416206dba5566d70080bc14e86382e *R/plot.betadiver.R 9023fd332556779fe9405e0714ec5dae *R/plot.cascadeKM.R 4981e07d470a1fc9843357dc8f453e19 *R/plot.cca.R 61df47a15577f5ad882d2694bdd73d38 *R/plot.clamtest.R dc793c47c821ba2961bf284132997ba3 *R/plot.contribdiv.R 0ab3b62ac155ede193867f43640dbd34 *R/plot.decorana.R 6295a9cb63408e65a01a0faf2635e90a *R/plot.envfit.R 10bf121300b684a8173f680de54f452a *R/plot.fisherfit.R 9a4f1746e6e5b80b48994f404e72eb74 *R/plot.humpfit.R 23154f6b1812303cbfbfde78711d465a *R/plot.isomap.R 55a0851dbcb231f65f8da29e2b904780 *R/plot.mantel.correlog.R 63ef57200878655ad91116be40dca55f *R/plot.meandist.R aeddafb96f777e9905a1c4660ed3cadc *R/plot.metaMDS.R 2574a84757435e0594f89434a9f4ec82 *R/plot.nestedtemp.R df06e0f9bd4bc8a546adf466c6daeca6 *R/plot.ordipointlabel.R 8552a3f2a039f2e18167b8cd301a3b79 *R/plot.ordisurf.R da30b6ae5fd0e30543f18064cf19b54a *R/plot.orditkplot.R 7e136913597f9f78ac069be6a5a3f465 *R/plot.permat.R 38e6ae320c35fe9d9fbc32c5bf4d5880 *R/plot.poolaccum.R 1b2e85f077d763fdd9c25b3deffde543 *R/plot.prc.R 6cd9c1a91d03a8afb8f9148f0d369cad *R/plot.preston.R 31b95161a7558e111e3c01778b9d17db *R/plot.prestonfit.R 5159170150e3c6d1ed92b5c3ec984b75 *R/plot.procrustes.R 02ff38f3fb337a63534356255b8641a9 *R/plot.rad.R fc2dc1b63ae6f50067a7a376c736394b *R/plot.radfit.R 65a62a587ed99980ae047cd60a65b618 *R/plot.radfit.frame.R 360dec911e8d4e772f888d89b8e0f6f7 *R/plot.radline.R 08f6b41506125e27b37a08b3bb730ffb *R/plot.renyi.R 20893b15e8b9db8b2282fef8c63299fa *R/plot.renyiaccum.R 2c7dbfef95af275ebe0d3ba551dc3fb5 *R/plot.spantree.R 210d611cdfc9b637dceea1d79078cd51 *R/plot.specaccum.R abc96c8853871035d494dfa9086d4d6e *R/plot.taxondive.R 6104fadf391072e78a8f2825ac41ceb2 *R/plot.varpart.R 00d109fe7fc29440698b9f1a4bbc876f *R/plot.varpart234.R 54a640830bf34d4e5e5d232510f70300 *R/points.cca.R 3fbe4782d2c376d98f23db8890c42b3b *R/points.decorana.R b5661457c540b56e77eba97b8b290a91 *R/points.humpfit.R a0e1e2d579fa8c1992a26a2e8d435750 *R/points.metaMDS.R a54bcddf1b7a44ee1f86ae4eaccb7179 *R/points.ordiplot.R e0ff3ea4aa76f85a87c3d8f559df18f0 *R/points.orditkplot.R d30277aec2fdeea8473e00ebe318be0a *R/points.procrustes.R 80d9cee7ff1fa7ee8cb18850711a14b2 *R/points.radline.R 06defcf59464ba92af271dca87943029 *R/poolaccum.R ad8536ec52efcda9e9824ad442fab2bd *R/postMDS.R f9dcd972e5c81ce936c9ec5b296d484c *R/prc.R ca38da30d3e3d1e91d5534ec6b885834 *R/predict.cca.R 049f41cca1b39bf0a221723855cffcff *R/predict.decorana.R 2608088bb32354077191c640e0c2c843 *R/predict.fitspecaccum.R 06cca728e43d29da2528b01dccb26962 *R/predict.humpfit.R 3eaaaf25580077e7dff217c3f237e37a *R/predict.radline.R 0922f1fa3fbf81c25694fe15e24754d3 *R/predict.rda.R 6b10b84b569e5eed32629912b19e9c8b *R/predict.specaccum.R 4f56d16f5bf8f9af3477c23137a70fb5 *R/pregraphKM.R 81bb150e264f7da07989c909f4531a45 *R/prepanel.ordi3d.R 0bb3fa9e3847051a28ceb186023bb952 *R/prestondistr.R 7db2fd99abc08bf5e1341e5b74fb4617 *R/prestonfit.R 9eaa1459bcd91341d4ab3200858563b0 *R/print.CCorA.R 3a1584c7d991683a61271fb2fc002b73 *R/print.MOStest.R 1e07dd6a9eefb1d0af31a4db98c94305 *R/print.adonis.R dbce7c674b2e53109295fc280e96356c *R/print.anosim.R a530724906dc69888c27a538fc388cbf *R/print.betadisper.R 2f1f189154aec84360211e3ae195693d *R/print.bioenv.R a80794e01fc52d56c1eec6ca5273ee2e *R/print.cca.R a88f54aacef2ff5cdfa99215de346349 *R/print.commsim.R 6d0cd7929afcbe0d192c980dc5196555 *R/print.decorana.R 65e888e34fa8a8e1d5b577fbadb3161a *R/print.envfit.R ddf461832db2bd6f6f01348faf334c6d *R/print.factorfit.R b5358d1ce788e2c98813f59ef70f75c2 *R/print.fisherfit.R 6da316510cb840a6a9dd8d31d0e205af *R/print.humpfit.R b31dbaa6493fdda1f865f95b3e889aab *R/print.isomap.R d143e7c29760fed50528e5d791d36c8c *R/print.mantel.R 242e2fa83b09f32abaa044dad385e45b *R/print.mantel.correlog.R 9d6b6102e251f155c0b9af98d37a5f49 *R/print.metaMDS.R f221ea2ab4e8903ca1ae735038bfba04 *R/print.monoMDS.R 9e3feb49d153002226a102c025f6a72c *R/print.mrpp.R ae04b552a7569e705dc7e8e07490f310 *R/print.mso.R 7c074bf7870cb4c306c6181769b28a19 *R/print.nestedchecker.R eed481e994c01ec4d7b443fb8cafad46 *R/print.nesteddisc.R 91c6a9b43c8b045d11a4b8834d1c9d47 *R/print.nestedn0.R 0f8e3935f95b67b96e066435743bbee0 *R/print.nestednodf.R 2f1732fffc2fb487420a910a1d3f5971 *R/print.nestedtemp.R 6126af3f4fb029f14fc7b503ee2f0627 *R/print.nullmodel.R 6bc910829bc129ceb8c357e143af4835 *R/print.oecosimu.R 39c3d65d6a6b2a68f974e936cc6232ae *R/print.permat.R fd6136405300e42e73d4850a338505e3 *R/print.permutest.betadisper.R 472da38cd012a272d6feecbecd5cd648 *R/print.permutest.cca.R a01e4eeb80a020c9e516f47f559baa98 *R/print.poolaccum.R c0f0559d9f53c8635bba01f1f90b7cc3 *R/print.prestonfit.R 4abe25d64d3e55ef83ece3691f77f900 *R/print.procrustes.R e6b0897025e574a25a533aaabe8f6e5f *R/print.protest.R 480adb7c75b99e469b5600c62aa8d12d *R/print.radfit.R 8b1a0e667c16cbd376a88962cb3baf19 *R/print.radfit.frame.R a589e795a078e79a758c1c848b728be3 *R/print.radline.R f6d57fffc3ac828f47cf1f4006141602 *R/print.simmat.R 738123a37474bd6cc4b5a142f46527c2 *R/print.specaccum.R aacebed613c7a8b259424efc39b4e061 *R/print.summary.bioenv.R e5b625997dd416b43f2635501e486712 *R/print.summary.cca.R 9d57753b97cf0f2e3ea8fb96d99c1fb4 *R/print.summary.clamtest.R aea75769140cba757b5363d87a1ad2ab *R/print.summary.decorana.R 7ce80bbbf0f63ed74b3d9cf7d84944f3 *R/print.summary.humpfit.R 59e34aed90403b18e80cc89f75edd9d5 *R/print.summary.isomap.R 8b2f5e8d922b8372e2515bdf0d083ab2 *R/print.summary.meandist.R db1dc929d679ce1641c6a7d319091e2c *R/print.summary.permat.R 55399e1d3a3bc601466c9706b9caf1dc *R/print.summary.prc.R 0e4bd2b0b5395b17365888876460fe85 *R/print.summary.procrustes.R 148aa3651ac7d6a0fcc2b5f3dfb98d9f *R/print.summary.taxondive.R 0511b5e09f1af985431cac7c1b74a8cf *R/print.taxondive.R 37d66480c803e43434e7242f20d4166a *R/print.varpart.R 8c2e8161fd7de24c4b5dc04daec52d0f *R/print.varpart234.R 0001f633e4db1a1498820b0b0b45deac *R/print.vectorfit.R 4ea92396a5e70ac3f152ba0353c574ee *R/print.wcmdscale.R 083d526f54611d40ce749ffe95f169ae *R/procrustes.R 819af0297e5d0a907f7fa91319c67e96 *R/profile.MOStest.R 2f6b69115ea549102dad9b1b22c88034 *R/profile.humpfit.R 384ed8e04e1da5b92108d859f4feb315 *R/protest.R 9169bd797963b5b121684de528651170 *R/rad.lognormal.R b129148e6efbbe1c45482c93d66f959b *R/rad.null.R 949aca6b5bb7954a91819b17e515e396 *R/rad.preempt.R 5a7e143e1292681c3d9b1e7b1b792aa6 *R/rad.zipf.R 6780818aadc7b8c92c8f9a26a84b7dc0 *R/rad.zipfbrot.R 23fd677c0c8d6f4a8e6c6444d2cc8601 *R/radfit.R 86012c39c6dcae195cd987d13e1f8a2a *R/radfit.data.frame.R 2f6d8082f39540bbe7cf0e0cf3c666c9 *R/radfit.default.R 36cfb246e391a7434c714fbb2269cdb6 *R/radlattice.R 7608e7f23ebe04e3a7ea6e5fe384c431 *R/rankindex.R f62b0ebf24922d65ae1ce7bbcab2473f *R/rarecurve.R 810d1027b712acb471e90e7cdb334e7b *R/rarefy.R 9c65025c61d4c25ce25234533e7b14c6 *R/rareslope.R d9a219ae6f3e6155ae76bc59d3e14d30 *R/raupcrick.R 8116cefb40383fb571abb9fb82091087 *R/rda.R 22c320cd450c1088dfb0a05e577b9a73 *R/rda.default.R 850c1cd2a9a50688a689ab060611061d *R/rda.formula.R 0060414d089cda64950eef39c75c6b04 *R/read.cep.R c8b0d740574bc39b929d3216d19d3026 *R/renyi.R 3af80e7b694a975fcaf69f53bba241eb *R/renyiaccum.R 90a897e14094cc1eba66c5f59a5bb79c *R/residuals.cca.R 82580fa33dacf17413d0eafdb531ba15 *R/residuals.procrustes.R faab0147fd30bda95b352f3cca90d5b7 *R/rrarefy.R c94cf53d2345f590de45c0f9db6fe272 *R/scalingUtils.R ed66f1e11f53f7fbdbd8663de2b7f5dd *R/scores.R afdabd5d19efde6d0c383fc7562077ac *R/scores.betadisper.R 341ee43f8524dccb5e369513a16923b1 *R/scores.betadiver.R 4bc568476b3dd4db5cb044d326b1699b *R/scores.cca.R 1fc60e144a10b6d16bf48f6fe95ede32 *R/scores.decorana.R c419c3f43d9d1f1447433cb8e994832a *R/scores.default.R 6415eb8600a7e516ae6c053832c45357 *R/scores.envfit.R 1124e9978354cabe44bd1a7e258a4392 *R/scores.lda.R f60983f80088428cc3ce955a975fa6b3 *R/scores.metaMDS.R e4b321e08dfaaf89bd548af364902738 *R/scores.ordihull.R f146575a3f60358567dfed56e8cbb2cd *R/scores.ordiplot.R 512cedf50891372019cae370b240a742 *R/scores.orditkplot.R 4755a38c8b83b76f123b8e84cf47b700 *R/scores.pcnm.R 38a01517e16c12e4a3e87a3fa29289ae *R/scores.rda.R 42e3e9222d18a33abb561bac1db5bc6f *R/screeplot.cca.R 71a7f620655b068c3a53561fc16bfd39 *R/screeplot.decorana.R 689944cdddaea9a4affb451a5038d19d *R/screeplot.prcomp.R 93ad2850b1dce5fbf6d1a1fd84ce6216 *R/screeplot.princomp.R 96e51f8fd78641579487ed079ee51170 *R/showvarparts.R 9cb0fc3a15596992bff286c98c8f9650 *R/simper.R 82fb9f429cda2543095b52ccdc4bc3a1 *R/simpleRDA2.R f2d46ee718949e4a5bfb90d1c90142d4 *R/simulate.nullmodel.R 1f74bf934a566f50e7598f9af75c0111 *R/simulate.rda.R f6a71e261975457650d1094d08329f4c *R/smbind.R 9f235c650efc4217a3cc88996b627e1d *R/spandepth.R f4554cf72cc501fad09662c612b1c34c *R/spantree.R 03330c53fd06adc913961918f0f55c32 *R/specaccum.R 3c94a17c2602903234a65cb244053130 *R/specnumber.R 4899dc4b2bcaf5c269cbd0f69cb3fc12 *R/specpool.R 77cc19684e9ceb27500ca7f802923328 *R/specpool2vect.R d24743b3fb58c8a195608e814eeed02c *R/specslope.R adb0168be76e2e4659d14fb0a6db5204 *R/spenvcor.R 33d884aae53dcc5fa80d9e9ffae4515e *R/stepacross.R bd2d1d998f18e7a9c65d5072932cbef2 *R/str.nullmodel.R 301ba29a09201611845f7adb2b2d7d81 *R/stressplot.R eb7fedcd67e50aa63a1557aa3c608ddf *R/stressplot.wcmdscale.R 55b28298153f00b4c1f8574b0784eb0c *R/summary.anosim.R 19ce7c501fff2cacc8ad322fd0500a48 *R/summary.bioenv.R 4f6e6b0c5749c3c197e1dc7e00afa0b1 *R/summary.cca.R c1f7a5045e57ac95c9ae7f13f2a11743 *R/summary.clamtest.R bf8be2e9b02c1a3cd5f3ad0005e8354c *R/summary.decorana.R 088b8c747d67fa5ad158304a21f32628 *R/summary.dispweight.R 4c9fc84fd70c4555d5b5bfc1768dc5a8 *R/summary.humpfit.R 51d3b042e199d201235f10f3d4a57f70 *R/summary.isomap.R 76171bbaa9984ffbb31cbdd9e1771f4c *R/summary.meandist.R ac4d6166f7fc1c177503c364345e1278 *R/summary.ordiellipse.R 1d7c7e8f3309004cf3e5cf782facd2f6 *R/summary.ordihull.R 11578277712acd07ebb5f7c66c0a47b8 *R/summary.permat.R 3ef798c28399894f4bf0ba649360e69e *R/summary.poolaccum.R 4db5bd385c6c52e7c370647f0fc0abc8 *R/summary.prc.R a8c1bf3d3f371f3ee5a3de3c39a4113a *R/summary.procrustes.R 1a7820db6bf56e31bcc85d3a91f1a831 *R/summary.radfit.frame.R 25e8a947666bed660358e359730160d9 *R/summary.specaccum.R 8f34602692f6a5476bb4a6d7b2a269fe *R/summary.taxondive.R 7c55757d8187363116d3561d53cbc5ba *R/swan.R 6af0f799845d8f2e3f64b9bf204e0cb1 *R/tabasco.R 62bc8a0693a71adb1457b0a102d8951a *R/taxa2dist.R 90ec6192eb43f8fd29bc93485f4ef293 *R/taxondive.R c103958b08a39e45f44ed5b55c380d25 *R/text.cca.R 1f4d9ba97695c0fa99456f427114b049 *R/text.decorana.R 6a6e426f6e464bb7bdaa75d92674562c *R/text.metaMDS.R 974bdc93cd9b352d30debf3e93111136 *R/text.ordiplot.R dbc282f5aef3c9729d098b4fb80004b7 *R/text.orditkplot.R 0fc7a75cf414d76cc751cc33ed5d6384 *R/tolerance.R c7b19a898be981bde00d64727f604377 *R/tolerance.cca.R 48c49511d26ea0e18e752198ecde97ba *R/treedist.R 54b0bf2548f7912cf4c10d4552d58efc *R/treedive.R b7181b8d28c9da1019a0b2fe5f117e05 *R/treeheight.R 26fffea5380da4106dfe1f97681524cd *R/tsallis.R 45f807b2d58c564c147978ac72de8546 *R/tsallisaccum.R b0941cf2b3322fcf2dd4d51578ee4e3c *R/update.nullmodel.R 42056aae91bf89cc3d06cfb0627bec15 *R/varpart.R 1d1539d371aecc720193877e1bc7b9ce *R/varpart2.R 191e39bf769a4fcb31b26c7aef01670d *R/varpart3.R 9094db1c78d5b86f45c9e8b63a1c71dd *R/varpart4.R 1486696c7f5277981e34aa33c50945c9 *R/vectorfit.R bf26b2480075f8f1357d5324391b527e *R/vegan-defunct.R 1df623721f7674c43c13a696b3082249 *R/vegan-deprecated.R 129a1cf5e913a365ffd679b63378811b *R/veganCovEllipse.R 106ff78fb7ba42a6f6599beee8c34c4e *R/veganMahatrans.R d52de59290b2eced0f79926ea655652c *R/vegandocs.R f5edfb9845dd38cc45377d463a22347d *R/vegdist.R b1855fd70cd8c70e9b480605297bcc63 *R/vegemite.R 5d6047d7f63f04ae9ff40179c534aa0b *R/veiledspec.R 4d0f113e697fb166ba912ac34b40b3dc *R/vif.cca.R a5fd2c591f54d57e52f9738d6239fe65 *R/wascores.R 29f00372b408558f301bdb7847e6e386 *R/wcmdscale.R ecfd48e2f4df6bcd683a87203dd80e12 *R/weights.cca.R 76c939e9fe7776e51eeabc1d44be83cb *R/weights.decorana.R 9ed0ac2ab6e01950db0cc181a42e523f *R/weights.rda.R dc56df9d2ab542868ad77d50999151cc *R/wisconsin.R 678368022e0d66a4fd7722ab6bcc8beb *R/zzz.R 8aa6caa782f33344e19ab3c09c74b379 *build/partial.rdb 1a5797fbf7801114b4cd01e83635c93e *build/vignette.rds 72cc26156e4b9ce7e2655c228ab87107 *data/BCI.env.rda 0a5c36b1ebd892c80a84d0d6417e1d6f *data/BCI.rda 412ea5cf443401fe54f0b14c14c45806 *data/dune.env.rda b0a8834b45c79fc017717838d700f0f6 *data/dune.phylodis.rda 339a47050fe72465c659e82378562781 *data/dune.rda 43251e030cebf2a2c4a66aca60c462ff *data/dune.taxon.rda 442171925629c4ef13f9d70601ca9cb3 *data/mite.env.rda c51905bd025ccea2737527b6fca4a081 *data/mite.pcnm.rda 272a07c3f4162668600425cb1a043e10 *data/mite.rda 91993cf999f1d254da6b660fdc667af8 *data/mite.xy.rda 89b86c533283705a67a0d1f65c69a485 *data/pyrifos.rda ee3c343418d7cf2e435028adf93205f1 *data/sipoo.rda f87df84297865b5faf31e232e97a0f94 *data/varechem.rda 7136b8666250a538d60c88869390a085 *data/varespec.rda 2e8365331e33da07211c01f846fb60af *inst/NEWS.Rd 9abfab8b05c34dd283379a7d87500ffb *inst/ONEWS 1fb35aec7042529e18e4673818fecf7f *inst/OldChangeLog b21accfb0a73075d80634960e461ac7e *inst/doc/FAQ-vegan.R 51f733a8d0032c2da08312ff79ade908 *inst/doc/FAQ-vegan.Rmd 187608e12facb478f503a701b5c87525 *inst/doc/FAQ-vegan.html 92fd39278aa2666ce4fec88c032b33ed *inst/doc/decision-vegan.R c910da720c0da49de1808c688a450206 *inst/doc/decision-vegan.Rnw 2eec1a38041b97d4eaaf520461bb39b3 *inst/doc/decision-vegan.pdf 41fae44349a8a602825bddba8750102d *inst/doc/diversity-vegan.R 06cfa11a83ca0330979d500549f2415a *inst/doc/diversity-vegan.Rnw 9efef95d3bb2851f354f711ea6bcdc49 *inst/doc/diversity-vegan.pdf eff5665df3e4437135528b753d664a7f *inst/doc/intro-vegan.R 6b35943a07c04a6afc77222b0e17b7f8 *inst/doc/intro-vegan.Rnw 62da88544eca7c26278c8f35f8a09210 *inst/doc/intro-vegan.pdf d56c6fb7eaff59b945aad2459b96bce7 *inst/doc/partitioning.R 5b17ce6c86e3334b796a658328d426f9 *inst/doc/partitioning.Rnw 7781b81c1eb7a17078b38f7d04a3db86 *inst/doc/partitioning.pdf 1f5ef97a44dee865f33b8eadb2e206c1 *man/BCI.Rd d4d97e3b71561f61bd9f1f0686a57434 *man/CCorA.Rd 2b36702bf2b1931f955fb7dd9d044c99 *man/MDSrotate.Rd fdaddfe3df6da06b251f0b1a6fdf5671 *man/MOStest.Rd 603087a66c6c10720229d00bc499545d *man/RsquareAdj.Rd 73f141f28a1aca961cd4e992d8610934 *man/SSarrhenius.Rd 32f805196e58b526c3a2bab5c87116b3 *man/add1.cca.Rd 13da867f859157284eee4217561d4c3c *man/adipart.Rd 84fa6a1565509707d87ee887c746cc19 *man/adonis.Rd 2112d561bd8a2e8856f653b36e8640c7 *man/anosim.Rd 7ce9770199d7889d0d0d7a2f8ce674af *man/anova.cca.Rd c57af27fa11dadcd48981fcf42b2d221 *man/as.mlm.Rd 8e3718248ff8d48e724654ab17caa2e2 *man/beals.Rd 32cc1d68836f6540ef1db0e27fa8f595 *man/betadisper.Rd 5595a8438f6d5bdb95a5ce2327d87f3d *man/betadiver.Rd b04c2fae35dba2d97cb248814d5e2fe9 *man/bgdispersal.Rd 860b9c7f2325f500c27f3c903831efae *man/bioenv.Rd 783cc695729b9ce5ce9331944337541f *man/biplot.rda.Rd 3692d544d02a8ce24fab53142a4eb9b1 *man/capscale.Rd 644e253ebcab91a5ddce85294dda278d *man/cascadeKM.Rd 607ceb62c897138072bba4660620e0e0 *man/cca.Rd 049dc7953e5708a931d12484f081726c *man/cca.object.Rd b97d41cd8bf114b7ca7560b4dd9e58e6 *man/clamtest.Rd 15ffd9b28bf53976177020d25e9ae870 *man/commsim.Rd 335d0f7691ad9d0c48fffce9f9db6201 *man/contribdiv.Rd 2fc9628fa53c9680142b00fda94473c8 *man/decorana.Rd e485bac4360ba510f8db3c9d361701f8 *man/decostand.Rd 01929731260bf30f55a0e9e374580eaa *man/designdist.Rd c01e0664652fbc8ef4963059bee4e422 *man/deviance.cca.Rd f58b474141a1b0fdf438bfe6dd8da0c9 *man/dispindmorisita.Rd 70c0ef1ef267a37e2677476a43b72265 *man/dispweight.Rd f3f742efa7511a4c33108a00b512ebd9 *man/distconnected.Rd 0a67f0ca537d4b8ed97297fa9eb9fefa *man/diversity.Rd 08b96c1a45c11ffcb7f0da33a888421a *man/dune.Rd 4548669f5df26e953e52fbd6daa3a532 *man/dune.taxon.Rd 5f5f8c7df063606ccde6124c5dbe8add *man/eigenvals.Rd 2885454cc0909652fac934ced38d910e *man/envfit.Rd d2cf422a3d7702ac6293fcd3ff046afc *man/eventstar.Rd 5857c2307b1dfd69953a88bd3c384180 *man/fisherfit.Rd 4135cbc750171f53a71e727291162bf8 *man/goodness.cca.Rd afc00cd6ac8f9b56bffbbb77e369057d *man/goodness.metaMDS.Rd 81f6bbc59aedfa21953278c285c250bf *man/humpfit.Rd c8fea575af3da292987d4f8c4aa831b0 *man/indpower.Rd f7b596bf1541f22609fabbdd9be82791 *man/isomap.Rd 1455f24df0b577f7f65a28c5826081d2 *man/kendall.global.Rd 00742b239a570c4c2d7cf0c82fbf159c *man/linestack.Rd 59ce2773a5d92535708137747a52f358 *man/make.cepnames.Rd f8d6f3bd27a07dc00c6779405652ec07 *man/mantel.Rd 85d798177d90587416f9ca88e2f445c9 *man/mantel.correlog.Rd f053b9a61134bcda5daaffa21509c530 *man/metaMDS.Rd 4cfb02239809fa03b28e10ec8e8c9c6b *man/mite.Rd c50bd45c9e8c6e892d2dd8f7fe5f0bd9 *man/model.matrix.cca.Rd 9ce82e46d744c868c00924d8866dc228 *man/monoMDS.Rd 735dd0c405cedd8f6eeedddae86d86b4 *man/mrpp.Rd c52ffac414ef6e1e71eae55f025289bc *man/mso.Rd 7ed0b0f6beff14cc292c361550f562e8 *man/multipart.Rd 53bf1a9a10f3b6febebffaaedf13f79d *man/nestedtemp.Rd c7f768b6f36aec4bc9d5b4c8f72c1141 *man/nobs.adonis.Rd e9de6d6e919df1849ccfa508904adf9b *man/nullmodel.Rd 8bb0e002f5aed88241c0196e78d55716 *man/oecosimu.Rd 990fc366c31c3695bd6ed0b1d82bb7fb *man/ordiArrowTextXY.Rd 294b58bdae6b5439f25bf08c5eb7c483 *man/ordiarrows.Rd ec0d55e2591a4f69a8ede0a14246fc7c *man/ordihull.Rd 8f8a34c5fcfcc1fe9f88ca16e84a1da6 *man/ordilabel.Rd 994cfc973f88c682b741e48377e1b9b4 *man/ordiplot.Rd b23bb4e1b39d8d0e0309bd909a247786 *man/ordipointlabel.Rd d4d27a34b2e7d9d1b732a0d06cb9d9f4 *man/ordiresids.Rd 0f53224bedc1b6d2da2d344946e2edcc *man/ordistep.Rd 0cc8b4a8345c09a2b31ea8f82b0546cd *man/ordisurf.Rd 5a6e631b51c50758c290c5c1db29f217 *man/orditkplot.Rd 8785cc44c56d1b24fbcbde8de9e325d5 *man/orditorp.Rd 45ac08204e0f9a3fa674b437b72a3d4e *man/ordixyplot.Rd e8a307f119251e6651dacf18c182f73f *man/pcnm.Rd d3fd306546c43339ad7d8fd985a28801 *man/permatfull.Rd 6812983f8e154a66bd4ec3c736d1b36a *man/permustats.Rd 4a2ed8481b1f6805d343e83fda91e0ed *man/permutations.Rd 7533f16237c68f522d66d70b05a99c76 *man/permutest.betadisper.Rd e4d397eb7ca88b56ac92e452598c2d23 *man/plot.cca.Rd d45a85e1ccef663ad3bc6d87286f5904 *man/prc.Rd 0f7fb32afada9a6d1c274875465abad7 *man/predict.cca.Rd e29ed0c997c75aa9e229ae847e3d1cf6 *man/procrustes.Rd 01a6ca946df5ad493adfb54003ad8e00 *man/pyrifos.Rd f61f64cc1be643149fd02f08a0cd7f9f *man/radfit.Rd 8b12fb04530537414e03e1a6fbccda7c *man/rankindex.Rd d7dd9dd01dc553fb0ae4c19ee4713544 *man/rarefy.Rd 915c6ea3098d6ac9c3de6249606b2fe9 *man/raupcrick.Rd 194d83086f46f7ba48de1e4311086006 *man/read.cep.Rd 87cf4ea35d498647e8848f487041add7 *man/renyi.Rd eec06fd5cfdddadb56bca849f88b38f0 *man/reorder.hclust.Rd 5c25a88ca55fabce5783509c706faad5 *man/scores.Rd 8104fd642b527f76e159580e3d317fcf *man/screeplot.cca.Rd 91bdb07ef795744a77763a026e1cd141 *man/simper.Rd 621f8a2810727ab3523fc0bd69a56dca *man/simulate.rda.Rd 2a9336794ae5a322bf2ce6b71edb3f0c *man/sipoo.Rd fa1142a6350045acf397a99bbed4ef04 *man/spantree.Rd d116ee54d127cda8f81757c9dec103a5 *man/specaccum.Rd bcaaf29b0752fa00080c6540a822c238 *man/specpool.Rd 5b9e51c85395f80f8504954e4175f877 *man/stepacross.Rd 9a022e15270dc4d340207f34beb038a1 *man/stressplot.wcmdscale.Rd 0aac5f5c8f58fc8fe1cb6c0ba819b196 *man/taxondive.Rd a060076b9ee8a4e694bc1c4a02324800 *man/tolerance.Rd a4b37297402220dee75997c4f49a729c *man/treedive.Rd 14cc64af5f8a8c5965563a2b03c408f2 *man/tsallis.Rd 033dd7d7917185cea81e4d7afcd59df9 *man/varechem.Rd a6280a68ce4a9298bc68d7ca5f768a2f *man/varpart.Rd 3c0ab1f2a60eff99bbc3f7a33c3f6eee *man/vegan-defunct.Rd 00b4cef1efbd187368d0905e3b298cfd *man/vegan-deprecated.Rd 0db28cb76288e9906cf95c4858dc0705 *man/vegan-internal.Rd cef033ea30c92a1508f82924ce9f2402 *man/vegan-package.Rd 5280fd8e6478cff76373f5e85422ae5b *man/vegandocs.Rd b860be7be28c20670c11ae7adb686dea *man/vegdist.Rd f5910df140a9fc0a290d0a9813b00825 *man/vegemite.Rd c3209a8eff0fe638d3a43b25ea5bec16 *man/wascores.Rd e8085b39e46823189e312a5776835adc *man/wcmdscale.Rd dd22a1632081402e62320a4c0d6b2aa9 *src/data2hill.c 6f93283e7eba742ef97d0eb323db28eb *src/decorana.f 87b05dd087e591f1f8e92ecbf1983207 *src/goffactor.c b1a7dfae5fc80846cafbb03a7db2f029 *src/init.c 6edc5b9813b7a8545ff411295b2020d2 *src/monoMDS.f 8e52305b02e176e1e2979235d311efb7 *src/nestedness.c 77acc57d3a8492c99c324a4c4e585378 *src/ordering.f 31bdbe9b08340e1662a62cf6e61ade6a *src/pnpoly.c b9b647fcf8a3e59e10b9351fae60ec06 *src/stepacross.c be1ad1622ebd39dfd68e2aab1f0eedad *src/vegdist.c 51f733a8d0032c2da08312ff79ade908 *vignettes/FAQ-vegan.Rmd c910da720c0da49de1808c688a450206 *vignettes/decision-vegan.Rnw 06cfa11a83ca0330979d500549f2415a *vignettes/diversity-vegan.Rnw 6b35943a07c04a6afc77222b0e17b7f8 *vignettes/intro-vegan.Rnw 5b17ce6c86e3334b796a658328d426f9 *vignettes/partitioning.Rnw c4b0ae26e992a5bd0d91745aea647c5f *vignettes/varpart23.pdf 0732ef41487d0bfca3cd1a972fb14c27 *vignettes/varpart4.pdf 2004d867a35c1fb405934004d121fa9a *vignettes/vegan.bib b1d127b69040cc4ac388b3945cafbfd6 *vignettes/vegan.sty vegan/build/0000755000176200001440000000000013232070306012445 5ustar liggesusersvegan/build/vignette.rds0000644000176200001440000000053413232070306015006 0ustar liggesusersS]K0nɴ:ŗ?e l"kXzMK75_ܓ{N3BȘxG)ׄ$ h(VLFrg3 [4 uҨb%S v9TRCS&9D.aU9K#lASUzFMA AE˕sK>1mRtKJ԰&iXwM^LY|00θFwX=iZKa'cYd69L8#8rbQ ɵߋ{B*vWwɘv8̰(QoSjevegan/build/partial.rdb0000644000176200001440000007056213232070257014611 0ustar liggesusersݽ |Yz ^ ^h!$HgfIJlԲ fڵ_+ɶ|iC|ȇ,;Nb[>"ˉǗb'(؎rb粕Wwu wtl淽D}ve2LLO/37m!=  73=A`R_<‹o^C%{OBAf7p@˿ed/͈~++mە[t*d~98er5T~0 X{[W(Y_~OP?Z9Q*Vnr9kV`OYIJ[*ڞ?QX ח_])V^}8Y>X [Lx_LM<[9 {rjZ*ܘXWD9rwgJ=2$#*%_ik +~+h~BϯXb@^o򺪛:̶] \bc1GFMDsoClc'p/*j[V6>oR?C|$ +M[;c z2uǝv{cMv^a1A>BlGc|8!1P GJ2}h>Pj ILZձMJZŖѥ-!>ry޳(YҗB]]+Sh\i`މ# A nLSF#>3K~/h6d mBs}y0nJqdB팕B>,rR a^Yͷ,pٲb{[•*}ȟjvmW5^ d$QKNeڝ!J#-EG Ѷ`6|Z9 <AhNxXvc,x\k8j^gk5U=h/;ԝ 6t`D䷴؁1i[ "47{ںo+k5G߮䮳q޲UyFfX8#ɸ۔-Ll #t*˞^Ʊ嶌hvkҔ!/-6Oj7YJܦB#s*|g)6$"x 8 yV%R ]ZBSt<[ 䇬*K/k=E/xN:sB_ԅPotH143{ln1G^6ǖm??q9&Mޅ5`--֥eL[_$n] ճe>ix RCg;E;&(F 糣r,8 dرXvj4e`9!]:d{bf0&(Zhiɰ;%Rܲڗ?m2q [̯ZU9FQWdI@Ќ# 3R' CSǡ;gi0^:j8ю= IJݐw+^"bhfa\}ҝg ᴺ$e,oVHo $lѸw .j8 N{$KQ 3ZŌG[)ZƁZ8[TfU%iKE,qk#pJV9[16O:Nϝn;k[/tjYLY{bo%wpkchŶ>[yhm0+2F=,ڛ-J{ r=p\w{9kQ ;[dR̲=ߜ#1GnŦ~z֊D)fctr{1Yж RnMFh7cFcҒŌؼ*ݩZ ^ ao"bpJ6 18< Yd)pN.'#GiAYgݢDC>Tр4D{bحi 0l QC3ԇ*Uñ_'mؾ\|ΐkS=HldyF@>FGg!+yX9FI,:%F{b-ϖC52=a&un>?!>44W,:|_[?h-hfubɡO[FwC?. rJdF ZK'M%)Mq6ڎ[%0pN0擺}#ϗc/]+<ڠ(M'!Ok}E[m9ve^`]VAeLj.etY 0=E]Pe Kk!eKnU3\^ԏԽmѼHm/ֲ"BԼHA`z^{ֲ́o hŭd{.+إ?&ʈpl*Յ]C|RwepeLڕLjete 0=WF32,)3͈p|*56|Y<7#cO Hm/$gg tڙ,p{$HLZ$H[?PDoK- *R1Qj2tx4s8ZA/Py-N</CVZH9H}.>ṟ #vnؾ씒HDix0SAICgaHw738yȘ>)32(^|5 :Z_!>{9v}^`e7u_Di"uY`7? L}~y5ebkV&^ej<#ʈQ,T*prV$I⓺+-α ;z'#F<BVr8(9I[?pf0hK~P1G!w~K s%Lc%Vk?Gў|bRC|Ҧ1Lm\b;O6ܚJ쑧[|#J0Y;7ųz6?V)FR) ْ̃=[?w7Kŗ-٢<'F&QC%|+=,Eͅ=E+Œ ofLz'LdU!RPeaRay,7|ELF3{kàluN~Z Td˞[VUb 6Ӱajǟ p/REjW`UXO;*E|% 4`0&qFI730#dYM#TnEt6'QRC3ϟgH'\+Y%9ӧnG={bt1'mC Dn-XnMsjIψp' Pѭ6q*z_@Eh0>j~^81cY,1O\O3g 1GsZ8 KDlS;ek;A0Y1֨tQ6Ok>,IH8yXTSg$p TYRw 8 yZkK-cd-(]>Xx5 'qz=w[ژa@ 3gL1d(9c"u㐕TLaX2dX!/c<"s+܌gyRhQ;dOS>lt}F'#N44$OklN,#09ԝCG@\Ú;:{4$pv:Yu]9,YSY5NB jw,*C3QggK!d-;7-شIO+Ptdo-Ʒd%!}A=ڎ<9Ɔu wvߢ_m+W@y}sVVf!<u|TZo#[CN1##֛-6P/g`R ݀orrDv\ NCeHH]5i !CƊt@V{J,2ƛnj؆>Me4Q>|Y dc\Z}x[6e[H4d, X(ނ|+~6{f#U^teP Aa$-G"7<сe'!-4@OOC>qwA 2S֭d41>lhP!C !_.t~QkPhvZ2X|Ur A6(%zRx|IQ!+G|U]49 \-$2d<@td}VD& Y?™[eyw*j͊O{A(RpC_-Kag!jb;BI C}':!ɓ>!93gߞX]Z8JNԆvkU5kr8Y)e t~r|RNL5-V_$T-hYEl? {Rzj>W㐕[ۿ#:;;q:'I `r^Rڬu++g8 y6)IsϭJ/1'mau ݄={m&$`^`wxSQ̤eEECm3vtU(>q}Uu- ?.[JX.]ߪF]»N&x΋%q}|du>_됯bGdz C|Ҧ#C7a7R 6-=`976߈Q&V_?Yג-L zGs1ⶎsjNxlFڊ@a'Q8ؑ,? Lo#m@'(n좫Mwt+VX^_^dsֶj#zr&V IP@vsP?teP'ܠcnH Djxr 7H]8YF@G +rx9w6Bue;5q>|HXFa++ `mzE71et*%~81٠e HM&0.v=~9 gW2OWTh 6*0%?Ocs:iNDw~44;pr 77HI774HDNBy켲S{iDoJ^heAgmACNzm++Zg/yla}"xkg;1鏞xV0?{OKAͣ;yxS_ߒ(-,*MHw1J!0#dY*q)h=L;!>i5MM؅9vrQOI+= f. 7 m@9ZD bzx}ߜ8(6:>1ܬWN~@͢p VܚG+-in7J6?)̋LK1-;X<:HDxbR+,!_殒8B;vusNkjs{tId&."m}ajY?m}b!5MOC ”IYŢC҄i7!t4 t6ʳy)+ /he-5Ob j1klSաӐ l-A"ux"-A2(LmI`,y vNslNI ~K Ptg0t3]X MCҜ#iCTvAg:8y@M&G= 75oxaԐnD_ %z+ ~g1F85o{!/X,DBq̓dW*[Ktx.*? Sьɥн*5]A^skudΠ;)"09i.{ZMGkf]Uº'v2gzY7a&)L'uYLrSәr~ ̔-D{'>\Ic ݡosZ%=q|Y|Cn d+┸(ccL=7ʦuft65EqqE-p o.qKj+^C-aJEw?'JaVp]⊦q*y6% d~>kr%&hgkxb?g?XZEк{ B 7=~[kJ"!x"?M.n%~'<]'Aݬi3-~ ϣ? I:B УQV7>[?gfOYX>qޭ(cȞFLG0$#c g!ϪnvQ4kf $tňZ[^.m5X 0*!mW1'40qVOc_n/+m4-O8I~=CϘXjt1Jv% Dz nl Bzwl'q.vkn{7Va1s"fIHpakVfEDN/Bhܡ*:~Ww!+Hs).^] @6I!9JֈeO hAӁx.C3ș p_>ٔ_֜Y3GqgVE|ɷl[NҌ)إO$Lh]ˡFM$)'w@CZ%\ !OA3s 813&tRw36K$ w!ƟEDWdĺU]+5aNY&ܣ:Βpj;wjfHCFdl. b!uY1C ?<\&a!?gޚ'fx&ۛ),Yj+n^һVüO7?+vG&*A绰KT@VJ+ߑ%*buxҫr?s#AVZsP(p0*M1'tZ' OC6Xt:v+O v.90Ҳ iȧ;0H] .D4 p$"1H[?,њ =|Y- sN]a\lU*T +-jNhFWȅB~^R`7 < Y8?1reY*N5[r8lEAV1ͻ $u}skl#Ov*VW^=\/\F |@X}ɯ!ln%#lX+g!>Q= <Kh̒LN0Q&&n7de/x C?H? ܈h>ȳ*;,lϧ#Š3>yU.,B6Ouc9XE ֖#XE*?`7@o-#?EE˳KbN'cEyiOo3crH%'J6:W rt~#Z̓ζ_?3ꬬ2\HPȳyJ5T@$LP,-'4wf>-])FrV-;'s$>2<@$mP BΚT@m|dsđ?RA*]{-y %THXO yׇߝ/G;%@'pb5- n^N."$ۿ GzOUD`q+~׀ +m&tR7<LƀgӟIco*I_{0MBgZ:BCL/@/hhwJG  _*"4:K {!*O&ы$$ہtb' /_I.0d+II)ȧ?iye!V-0qFnMt@~hGi\%*۔Pt G!+6Ў?^^܎4QCΛiv 8yBی5Hρ$1d!@)+?ƃE\^S0F!EgBs6::Nt&jW: ߂<嚽}^{}Ͷ>(ٟ~Qt?}ÐW;b M.C&HRtŸ5):?ufU^?& ke2cqDg:tH8 +w0Gxzg˩(<8B|Bߺ8OP~nEYD+' +Ef蜉!>"6 #"ORW90~(@x߆ydi?Ȋ/A36n!iȧ _ƶ?x]+]@MPQ p~oT?b _Qإ4RH7ӫ(!OXtm~bU\;=xH֦ d8^Ŧ~ vKFl*r xb_Bl.K dBcq6QS8ư̑8 qǣn[:׮[9OW / 2Ge%=k[^qܻywI,~&/eMK㟀?AlSm4އ|_Ǥ~>M㟢#43M8Ϡr$ tR \Ʃ, =K'fcu>!uYqgpv|i6͡ty8 yVegϚp4 BKJ vf-AV '7Q'u󐕒+9&R7l=Q].@֏$&U^sܚ V`ߠRQlYl_dLF4Gэ81ڲe/f/GW 3GSкYWR(ta_ -j*/dDL 7JcQcUZe?M[N1 Sm(@9T.3b-p snEv{20B33Zlnї>o@p Vܤ_WBŤA^t(K.B%uW!_nCQˌ՟{("t [-LJc1Ş_v^۞رOd^fH\S!#,SX~H^A }LoC>Br;~4ϡgx|Yߞ`7i'S]bJB)0 2&r/;&cp6NT= 8v$?uǴɴ(:ݲ-pqWPS pP_5FxSMZ@: *yΛNCnldvVD4@ yvYt9V , f)gHo:-[ Ehnh'`ȵ)®OI5o'4[_uKQwT"DS~J!̌ml&cO;4;#|LX95'b6|6^&m1/P&)Z C2,m\A c\!bs.{!dh9:mLY̛272RHa=cqmGIr;&sqJ 'ac)`rQ mS^~$p Rت+0oJ!9*[-P bUX-$y`jQI,mqNۢehaDr2i.OS;ŵmɭD4 ̋IK4FSK$_ X11!hn1~Φ-,kE[^4;yIح8g2S:-d36>k pFj{h-Sz8#f3Rvs8#' g?¥O~k>U7i@x[;Z+-iqM)h%d´26~kB< |عqaoc#Fsr :,pXʤkFΎNtggwLP3m':yn(YiMp![]33څEG+~[v i;dzRȊJn">i@6j.Z81QKZ%6Lq"9jcza?S>j~ێZ͍ZF-s*;p bQH"V=b ̀y&hG6p. \񁋖[mEn\$0ZȿB\8| 5[,-ަQ | ( Z@,i7Ml`IZ]-LWF R Lg`9ZF v-h3 |严 AB&i`1T-RCrTC#t a1Vɩ 5* :Vۥ 8 8[z4UUjQFqf]8Ix^jɍ8KH4F}nhFAKJ%+vЃ=lq6_$xjs!,vj8ꇰ=כq-dsr#wB{r* OȚޚxJ12a1<"dŻ!MK&9 8h$&9 <'d hBVʿ0'd׿[T*rx]Ȅi48 5E5q8+dB1:W} ݻks$׍.6lIN hn`<F#l8҄ =a_{Z*ٲ} (mg R7 'dBQd&\0+7XJ䗬K~;Vx|J*kPpAr<, ԳqVb*9$|O4rvk8&4?t9Yrx[)g&wlrbb x8/d.QlgI{ J!OZd sVvh8bԗW^728SB6h07?򈴛I\UDp.cqƻuM(TSƧDE8# ?g){<{ǘo&'?5~$EF:VThK&,+5( he!+&t(BXX8'd>IC# $G o,џ SYLhngeFKY+!2{'lAY(}.u;P-L&% a 6"ۑPkoL#, uCP?<.do&"mBVuPq> |S΃]Cu/V`ưq2sV "$zE^1fyI9'Z,ah)dzC6qPc`T~$˃aF2R HdJ 9%. <"dgK2xLs%9 <.dŔFdyD\r 2 cj _.:i(VviS=l`Sz0!}Ҧ16vmL.i16`c94vӈ0ܘ6;2] "qm 5]EYPT >]X!?n`I5k#u Fj{vuGDlxTj+rc YmLHq !̜*H[?pXv¹d31=-81bX3'Eٷzai#CggFnmdKw5buxMȄj 04ӈ ༐ 5rr4x}YJA T qFJG; Lvq ] h`ׂ;A؅;`. +?Loӕ7]ӈ}Iଐ \3f,i}E`;>D\ӹhnb#iަ{']0 4HXO4f?A؅;5L1!uY`7 ^C1= ) ~DXt?"0ԝ~Jrh.l議(DBad37?>i`:8jEn.nZ/ RtBs >i@ M]Hm/`Jo``. <6?Lo=AO?#dDima,˜k^mcQFBVKL7Fi I~]Ԟa5R ҘF)I]>?LoOnwʈIŝ7͍i3=Y A8B̤b:+d:C k`I[h`FA؅;f4`#9cF4vшIň6܈f`>ʡ4a6ahr7GAyպ#)cw3&1 = LUg[E|Vh{02؇!R Ym+LΎvq45K?B !C$hVi;BVˆ+&7L&9Lg>3??meDoBN#D8rW)"{2)^^EGƮ,]Y9ڕmorVQi9!LgzǤsL Q!wEsFhhإu*%Y}P>GC溧la(Fҡ4Q:2a2f;dٖJk9^rlKB6d3Ѹ {` R<;y[avÞ\fa[e~9_oQ^| љ7N8U˳ AH\w>p2(Nʈ '>j=T'Sf2V)ˊT|,0\U.uƪ}*Ӷ\ٞz,o،fKŌ3§e:*o3VX%rnRD~c On"sxIi'ul&}?TV})q2_' C`|(kr/m0krJ8,acacJzsJ-ǟ-־E\]MP{PHJ}4i`ljVMߜ5%A N4tW#1b=U86Cy]=1}2X]Jx]†CcB64#? <.d4WsڕkWIwD'cBF&ɊюǖWȱw {aA4U&ndW)0?j0ڵ0W$( e0)z#-k'pp)Ұ,-^٪Dt^tmcDK!4 a34ߪD)DŮ^y_yBg{Z 0FW;M>YKa;߄]B6u=nM]5}]cB6'Kh!w8؛nJ?/l.>9t,-;_O}3/3(Čv!·S] K~G]^*Y+|RUBLf.D'*dNLRwxMȊOS9ve+]\vqBT\]SG<{C}~Cf#_i_\?pՖd2m׍pfXgھhW Z{G D{BwݢU gmgM[kѣ |kat:n-qո̓<~ŠK/r燢9Fѕh9GN  IFMy-n^HOz4`&z;ZUh2ػV`/;vcϳubkYh./;a EPB' c4',>_+V`m2 HlY{9p)p$(p % DT^5 [jE>V Oqa'' Wa!]l1>B1P o\21%vpm΋%e!Q;)W l09;t``m 3ޤQ.nTSX(Ytu/~6&eOT{PiߣSiLf0h7-a]t[(ҾPg߇M%"V-Xu!߯XZ0Ư1bZ:-}f}Bּe항`V*);<'d_JNeAy!݁ILl`F>&kXnU]r^:V1cy Fpʖ`DaPZ%$958iI-l)~0FBVЭ̻ s)$ExXȄ6nR8(dGYף-C5Oqѽp^m{%{.1ٲUZ-m02*Y"Gl=atau6M-80>uOxuFY^NUk":ܩjrhØehd4 8,dђ F6ՎeY!<ԝ!dgI<5:&D>5+8K=kC, Vked-]1ք!޶JAEB+(6Dm5g^Nbʈ#pY-'Ξe4&'wQF ԘzZW9Vɱ|>?Y9oA ``Գ%أ!Gz{d˱h)bH~lLoo)}yS"?(=;áۻ/09u"cBsPMwz#g{wbQ# :9g㷂omxEoi.ݞDZ=DA!)4ʄ9PG$2i+L4oG“x ;wmѰym?`E8zR!՞4]QտqM |s~ׁ.4珂ǏmasFXx*J'+tn*'醋XEaP?6q5JoݥFCnw$7HI&c yW'y| wLCyZ)[(*D4oBsNw-xOI}+V ak}M^o^'6ƿ^uo74"= ңR"VKwsA*n(wZL4 f40UFHhnd8I7b`3Z0݊0P"eطVfmBn} ?,2Ng!HȱX#w㋹J7 '4wk10Rh[LysD$J@x%PZm*p:RtkK%[eAOQM{10Uqfs ҬXN6}"(GR)} v%Sꏁ+1W<ը[45cS966vɫ啰3NWO?e +8=/YD-N6Q])OO0%VzWժXGCݻS#ska`8W v*ڪ.گm? jLw'jo)p,ϡ.In?[/u+&h4k`18YFՊ]m?v!Z+yvڴ"l6-`!sD l[͌:˕#/ 55Qͳӂ,eˍY\|Em~^?[Βgy ^8څKY~93[ jyij℘PN~?)ϔKloswjkaC*6^x ;lmM:W>A gUϥSh<}zݳS_ǡЮ b+CVAxJ|T?2W>fJu %!<۰RQ/ V'HH gw2-g ',z&jhV?bh3t(a ~|ٓw_oR0lVe[eZbGʭ;*;(C17s<)ʒLc 4f/8lV69o(R>M#Ь\g`m“tCZFX{Zri؍PϞv.s|Y?hV%M=$Deȩt٣'o>SHXY|*>Xl٣z|ʹvZJ]x̞;#9w#% ?.EV/dhӥy&t9V 6DJ ig&P`= ձC8yP[B%mN ?jziF D7$ DEfH?=t\Zl6gN6jKgjpq伴;44a̶j{w!M{1'uێ8mq,pd5FZފS᳛pS99>nEٷf8ovޮ oA]1'u݈]xG[o=-n>- Z̧ɾENJlKm>X(tƖchq>xXsLIƒu8.Ȼ+S~`UWd繞/kDo/%BFL/ԍ8ܷF-em\׍2J}(Y/W^͛hg t޼O g!Ϧoޤ~.nʝ3]'Ve!4f^>_eV]-soDx89Iw׼av˼O¤OvԼ)PBV:)moݾŗ71[ڠt{<7Yo(Wk%.{1T^GIfng +nnFgc& n6y ViLB7#mDuQB[!>;Өy9hKJ]6x}8ZKv{gijGɭySYQҋkͺ:$$>pJեۿ|ؠڄ!+mX6ʳy– %p 򔱑zg% "F_Ɏ&kR7 ?^17*U[Ocm>wɟDSКW])Ř_+O1VRiCv?#]JirZx6Oc顴R*+NAVrrC)NCo&ugW _J9@R3;7*0{ ϤcoA~+xSmM~N`j.wıs͔dA%& lr76I]d}^796oEN5Hv6n`vq2S?m z 2'L{ 4M#Ĥq F^}Y)=e"oCoJIwtlUҭ!j*شY|/2{ ]OYW-MxЪWX0M#ӧW=z*hYh[8ZeI~0ࡻȜ^|ԝ^h=kׇd-Xg h{#e;ph =b3wy9QYeKpE8 G4C nQIb@Q1?9vK\ pA?pAVZ7s0d*9e`rؠۇW)]4.]͘Ls7zjނ|KbU]w("r/,;6O IQz]>TG)Nln[9Lq˘|ZOK<ˈE'BNR֠qd0 z-@jHd./Cy#u \Ja8 y.D^:f+#G o2ٍ'J5pht׮afRЏmwsCT/̆rݴ~],1dXk4*Uk }:Lc `Sahl?~* mkx v= }P 8dٰ u{QsvİMn_.@s Tk߫QN4q_1MHSȹ yU^ATG!0=#ucguk.J"є8NWe퉘>?bqt$`Hfv"< Yi(gV0Afڍ4B#hぷPNeVD;i:#PЦQ¬@ֈp;'A͈A`yH< b#pJ  C5%by 8 yVt1TamXCw:®ĻmC]t2CwͅX t1 x(DmDkxҮ tgN@!Ԥa ѤqѢ9tOyMX>+ j{0D($d39K!u {cD4p,j0!2kS8B.Cn`Py ;?a?L4-=6"ˤvÇ +6"?VK*+'_>G!+J"T/j_,ځeC<m/t5U t{Pܳt>GC|4kcs+y|ۻ~}^$$R{F{vp5 OS&2Y`N9e_C>lnj.{콇*-sxtZfx9*H>'=!2ׁw +VoI }EDA?rq+[QMwKkȒ=5"⑏!>6"R7 ֡?=&:ߒH֤vMR^&zL\&B ט$h/Ddp7d%W9{!uہ{ +=x v;"2ǀ +ɷ!LIHvOpM0D:0M ;r*KS.>\փaۢwOkJH$/ 3˛.Odng tޠHUlIHwҲE$怏 ~YבaYOZrjK}TG,9L(4w [_ZgxڂΖʚÓ(Лނ|`#%\g&u!N6@ֿ (&odIt4/IX=ݞ4,0ťqR ȘZ ݇_+tBVibJ_oB6ze"js0+cr-Xl=ʖEc 5޶.BF,Dfc֬ oyGyv=wFW]^αj)8YFBsۆ3~J-WHatl[~)s N8yF+seR/_[^gь$ X ;ܒ4lEjx9׷h js[Bά$c&v]<ds7gw.V%>zqM G^36uڭקLѸCޯͪW*՟ ɱy<"VJ!] /9+Mˠ8֤]">D82U xE7}ie"<YiĤ&2灗!̨Ii`~F iMc1=:dGe6)stO]qc|S&br K/h:An87Ϳ%FC^9n1c(f_~q&B ".9nY$(0-SYAizJP[s6}-) lFN,g'a ȑ_.{ -+]:v[n~रx}Ow3{jrʵ+S=CV&ԃZ|nz_B]kžTsJ?\߾}YE9;52ԕS_vkaPWW KNL(b=NB9OA^oT!{ChҶ U :rR/,oz8"?̈I iQxWE-U5wy ǠQ3V{'w~gqʯk7얊a>QX ח_])V^}8Y>X [Lx_LMiӨ"[]ɞ7-a]d҄!+%HZz !2~(Mc5.#n;hV.ڶ?dL*p]9{c<΍m8#i,^4Q:P^S絲 0&_iȧYzN,8@Ľ<_b &Zr9ثw"x͓<0cƳb7KmilD G'slJwa4?:~Nrznnd 9MTaW&U'=ch.گ8vn2=SCH:k$Y +HO_WLм x!>i@]2ե[| wNFj$~;8+Ɩ״?k;yc~D%pm[6?XerMYvѳS_ݙie*vegan/DESCRIPTION0000644000176200001440000000156013232100754013057 0ustar liggesusersPackage: vegan Title: Community Ecology Package Version: 2.4-6 Date: 2018-01-24 Author: Jari Oksanen, F. Guillaume Blanchet, Michael Friendly, Roeland Kindt, Pierre Legendre, Dan McGlinn, Peter R. Minchin, R. B. O'Hara, Gavin L. Simpson, Peter Solymos, M. Henry H. Stevens, Eduard Szoecs, Helene Wagner Maintainer: Jari Oksanen Depends: permute (>= 0.9-0), lattice, R (>= 3.0.0) Suggests: parallel, tcltk, knitr Imports: MASS, cluster, mgcv VignetteBuilder: utils, knitr Description: Ordination methods, diversity analysis and other functions for community and vegetation ecologists. License: GPL-2 BugReports: https://github.com/vegandevs/vegan/issues URL: https://cran.r-project.org, https://github.com/vegandevs/vegan NeedsCompilation: yes Packaged: 2018-01-24 11:40:55 UTC; jarioksa Repository: CRAN Date/Publication: 2018-01-24 12:54:04 UTC vegan/man/0000755000176200001440000000000013231354436012131 5ustar liggesusersvegan/man/vegan-defunct.Rd0000644000176200001440000000252113231354436015146 0ustar liggesusers\name{vegan-defunct} \alias{density.adonis} \alias{density.anosim} \alias{density.mantel} \alias{density.mrpp} \alias{density.permutest.cca} \alias{density.protest} \alias{plot.vegandensity} \alias{densityplot.adonis} \alias{density.oecosimu} \alias{densityplot.oecosimu} \alias{vegan-defunct} %------ NOTE: ../R/vegan-defunct.R must be synchronized with this! \title{Defunct Functions in Package \pkg{vegan}} %------ PLEASE: one \alias{.} for EACH ! (+ one \usage{} & \arguments{} for all) \description{ The functions or variables listed here are no longer part of \pkg{vegan} as they are no longer needed. } \usage{ \method{density}{adonis}(x, ...) \method{plot}{vegandensity}(x, main = NULL, xlab = NULL, ylab = "Density", type = "l", zero.line = TRUE, obs.line = TRUE, ...) \method{densityplot}{adonis}(x, data, xlab = "Null", ...) } \details{ The deprecated \code{density} and \code{densityplot} methods are replaced with similar methods for \code{\link{permustats}}. The \code{\link{permustats}} offers more powerful analysis tools for permutations, including \code{\link{summary.permustats}} giving \eqn{z} values (a.k.a. standardized effect sizes, SES), and Q-Q plots (\code{\link{qqnorm.permustats}}, \code{\link{qqmath.permustats}}. } \seealso{ \code{\link{Defunct}}, \code{\link{vegan-deprecated}} } \keyword{internal} vegan/man/nobs.adonis.Rd0000644000176200001440000000216712626316320014640 0ustar liggesusers\name{nobs.adonis} \alias{nobs.adonis} \alias{nobs.betadisper} \alias{nobs.cca} \alias{nobs.CCorA} \alias{nobs.decorana} \alias{nobs.isomap} \alias{nobs.metaMDS} \alias{nobs.pcnm} \alias{nobs.procrustes} \alias{nobs.rad} \alias{nobs.varpart} \alias{nobs.wcmdscale} \title{ Extract the Number of Observations from a vegan Fit. } \description{ Extract the number of \sQuote{observations} from a \pkg{vegan} model fit. } \usage{ \method{nobs}{adonis}(object, ...) } \arguments{ \item{object}{ A fitted model object. } \item{\dots}{ Further arguments to be passed to methods. } } \details{ Function \code{nobs} is generic in \R, and \pkg{vegan} provides methods for objects from \code{\link{adonis}}, \code{\link{betadisper}}, \code{\link{cca}} and other related methods, \code{\link{CCorA}}, \code{\link{decorana}}, \code{\link{isomap}}, \code{\link{metaMDS}}, \code{\link{pcnm}}, \code{\link{procrustes}}, \code{\link{radfit}}, \code{\link{varpart}} and \code{\link{wcmdscale}}. } \value{ A single number, normally an integer, giving the number of observations. } \author{ Jari Oksanen } \keyword{models} vegan/man/as.mlm.Rd0000644000176200001440000000603013231354436013606 0ustar liggesusers\name{as.mlm.cca} \alias{as.mlm} \alias{as.mlm.cca} \alias{as.mlm.rda} \title{Refit Constrained Ordination as a Multiple Response Linear Model } \description{ Functions refit results of constrained ordination (\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}) as a multiple response linear model (\code{\link{lm}}). This allows finding influence statistics (\code{\link{influence.measures}}). This also allows deriving several other statistics, but most of these are biased and misleading, since refitting ignores a major component of variation in constrained ordination. } \usage{ as.mlm(x) } \arguments{ \item{x}{Constrained ordination result. } } \details{ Popular algorithm for constrained ordination is based on iteration with regression where weighted averages of sites are used as dependent variables and constraints as independent variables. Statistics of linear regression are a natural by-product in this algorithm. Constrained ordination in \pkg{vegan} uses different algorithm, but to obtain linear regression statistics you can refit an ordination result as a multiple response linear model (\code{\link{lm}}). This regression ignores residual unconstrained variation in the data, and therefore estimates of standard error are strongly biased and much too low. You can get statistics like \eqn{t}-values of coefficients, but you should not use these because of this bias. Some useful information you can get with refitted models are statistics for detecting influential observations (\code{\link{influence.measures}} including \code{\link{cooks.distance}}, \code{\link{hatvalues}}). } \value{ Function returns an object of multiple response linear model of class \code{"mlm"} documented with \code{\link{lm}}. } \author{ Jari Oksanen } \note{ You can use these functions to find \eqn{t}-values of coefficients using \code{summary.mlm}, but you should not do this because the method ignores unconstrained residual variation. You also can find several other statistics for (multiple response) linear models with similar bias. This bias is not a unique feature in \pkg{vegan} implementation, but also applies to implementations in other software. Some statistics of linear models can be found without using these functions: \code{\link{coef.cca}} gives the regression coefficients, \code{\link{spenvcor}} the species-environment correlation, \code{\link{intersetcor}} the interset correlation, \code{\link{vif.cca}} the variance inflation factors. } \seealso{\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}, \code{\link{cca.object}}, \code{\link{lm}}, \code{\link{summary.mlm}}, \code{\link{influence.measures}}. } \examples{ data(varespec) data(varechem) mod <- cca(varespec ~ Al + P + K, data=varechem) lmod <- as.mlm(mod) ## Coefficients lmod coef(mod) ## Influential observations influence.measures(lmod) plot(mod, type = "n") points(mod, cex = 10*hatvalues(lmod), pch=16, xpd = TRUE) text(mod, display = "bp", col = "blue") } \keyword{ models } \keyword{ multivariate } vegan/man/specpool.Rd0000644000176200001440000002410113214710724014237 0ustar liggesusers\name{specpool} \alias{specpool} \alias{specpool2vect} \alias{poolaccum} \alias{summary.poolaccum} \alias{plot.poolaccum} \alias{estimateR} \alias{estimateR.default} \alias{estimateR.matrix} \alias{estimateR.data.frame} \alias{estaccumR} \title{ Extrapolated Species Richness in a Species Pool} \description{ The functions estimate the extrapolated species richness in a species pool, or the number of unobserved species. Function \code{specpool} is based on incidences in sample sites, and gives a single estimate for a collection of sample sites (matrix). Function \code{estimateR} is based on abundances (counts) on single sample site. } \usage{ specpool(x, pool, smallsample = TRUE) estimateR(x, ...) specpool2vect(X, index = c("jack1","jack2", "chao", "boot","Species")) poolaccum(x, permutations = 100, minsize = 3) estaccumR(x, permutations = 100, parallel = getOption("mc.cores")) \method{summary}{poolaccum}(object, display, alpha = 0.05, ...) \method{plot}{poolaccum}(x, alpha = 0.05, type = c("l","g"), ...) } \arguments{ \item{x}{Data frame or matrix with species data or the analysis result for \code{plot} function.} \item{pool}{A vector giving a classification for pooling the sites in the species data. If missing, all sites are pooled together.} \item{smallsample}{Use small sample correction \eqn{(N-1)/N}, where \eqn{N} is the number of sites within the \code{pool}.} \item{X, object}{A \code{specpool} result object.} \item{index}{The selected index of extrapolated richness.} \item{permutations}{Usually an integer giving the number permutations, but can also be a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or a permutation matrix where each row gives the permuted indices.} \item{minsize}{Smallest number of sampling units reported.} \item{parallel}{Number of parallel processes or a predefined socket cluster. With \code{parallel = 1} uses ordinary, non-parallel processing. The parallel processing is done with \pkg{parallel} package.} \item{display}{Indices to be displayed.} \item{alpha}{Level of quantiles shown. This proportion will be left outside symmetric limits.} \item{type}{Type of graph produced in \code{\link[lattice]{xyplot}}.} \item{...}{Other parameters (not used).} } \details{ Many species will always remain unseen or undetected in a collection of sample plots. The function uses some popular ways of estimating the number of these unseen species and adding them to the observed species richness (Palmer 1990, Colwell & Coddington 1994). The incidence-based estimates in \code{specpool} use the frequencies of species in a collection of sites. In the following, \eqn{S_P} is the extrapolated richness in a pool, \eqn{S_0} is the observed number of species in the collection, \eqn{a_1}{a1} and \eqn{a_2}{a2} are the number of species occurring only in one or only in two sites in the collection, \eqn{p_i} is the frequency of species \eqn{i}, and \eqn{N} is the number of sites in the collection. The variants of extrapolated richness in \code{specpool} are: \tabular{ll}{ Chao \tab \eqn{S_P = S_0 + \frac{a_1^2}{2 a_2}\frac{N-1}{N}}{S_P = S_0 + a1^2/(2*a2) * (N-1)/N} \cr Chao bias-corrected \tab \eqn{S_P = S_0 + \frac{a_1(a_1-1)}{2(a_2+1)} \frac{N-1}{N}}{S_P = S_0 + a1*(a1-1)/(2*(a2+1)) * (N-1)/N} \cr First order jackknife \tab \eqn{S_P = S_0 + a_1 \frac{N-1}{N}}{S_P = S_0 + a1*(N-1)/N} \cr Second order jackknife \tab \eqn{S_P = S_0 + a_1 \frac{2N - 3}{N} - a_2 \frac{(N-2)^2}{N (N-1)}}{S_P = S_0 + a1*(2*N-3)/N - a2*(N-2)^2/N/(N-1)} \cr Bootstrap \tab \eqn{S_P = S_0 + \sum_{i=1}^{S_0} (1 - p_i)^N}{S_P = S_0 + Sum (1-p_i)^N} } \code{specpool} normally uses basic Chao equation, but when there are no doubletons (\eqn{a2=0}) it switches to bias-corrected version. In that case the Chao equation simplifies to \eqn{S_0 + \frac{1}{2} a_1 (a_1-1) \frac{N-1}{N}}{S_0 + (N-1)/N * a1*(a1-1)/2}. The abundance-based estimates in \code{estimateR} use counts (numbers of individuals) of species in a single site. If called for a matrix or data frame, the function will give separate estimates for each site. The two variants of extrapolated richness in \code{estimateR} are bias-corrected Chao and ACE (O'Hara 2005, Chiu et al. 2014). The Chao estimate is similar as the bias corrected one above, but \eqn{a_i} refers to the number of species with abundance \eqn{i} instead of number of sites, and the small-sample correction is not used. The ACE estimate is defined as: \tabular{ll}{ ACE \tab \eqn{S_P = S_{abund} + \frac{S_{rare}}{C_{ace}}+ \frac{a_1}{C_{ace}} \gamma^2_{ace}}{S_P = S_abund + S_rare/C_ace + a1/C_ace * gamma^2} \cr where \tab \eqn{C_{ace} = 1 - \frac{a_1}{N_{rare}}}{C_{ace} = 1- a1/N_{rare}} \cr \tab \eqn{\gamma^2_{ace} = \max \left[ \frac{S_{rare} \sum_{i=1}^{10} i(i-1)a_i}{C_{ace} N_{rare} (N_{rare} - 1)}-1, 0 \right]}{gamma^2 = max(S_rare/C_ace (sum[i=1..10] i*(i-1)*a_i) / N_rare/(N_rare-1) -1 , 0)} } Here \eqn{a_i} refers to number of species with abundance \eqn{i} and \eqn{S_{rare}}{S_rare} is the number of rare species, \eqn{S_{abund}}{S_abund} is the number of abundant species, with an arbitrary threshold of abundance 10 for rare species, and \eqn{N_{rare}}{N_rare} is the number of individuals in rare species. Functions estimate the standard errors of the estimates. These only concern the number of added species, and assume that there is no variance in the observed richness. The equations of standard errors are too complicated to be reproduced in this help page, but they can be studied in the \R source code of the function and are discussed in the \code{\link{vignette}} that can be read with the \code{browseVignettes("vegan")}. The standard error are based on the following sources: Chiu et al. (2014) for the Chao estimates and Smith and van Belle (1984) for the first-order Jackknife and the bootstrap (second-order jackknife is still missing). For the variance estimator of \eqn{S_{ace}}{S_ace} see O'Hara (2005). Functions \code{poolaccum} and \code{estaccumR} are similar to \code{\link{specaccum}}, but estimate extrapolated richness indices of \code{specpool} or \code{estimateR} in addition to number of species for random ordering of sampling units. Function \code{specpool} uses presence data and \code{estaccumR} count data. The functions share \code{summary} and \code{plot} methods. The \code{summary} returns quantile envelopes of permutations corresponding the given level of \code{alpha} and standard deviation of permutations for each sample size. NB., these are not based on standard deviations estimated within \code{specpool} or \code{estimateR}, but they are based on permutations. The \code{plot} function shows the mean and envelope of permutations with given \code{alpha} for models. The selection of models can be restricted and order changes using the \code{display} argument in \code{summary} or \code{plot}. For configuration of \code{plot} command, see \code{\link[lattice]{xyplot}}. } \value{ Function \code{specpool} returns a data frame with entries for observed richness and each of the indices for each class in \code{pool} vector. The utility function \code{specpool2vect} maps the pooled values into a vector giving the value of selected \code{index} for each original site. Function \code{estimateR} returns the estimates and their standard errors for each site. Functions \code{poolaccum} and \code{estimateR} return matrices of permutation results for each richness estimator, the vector of sample sizes and a table of \code{means} of permutations for each estimator. } \references{ Chao, A. (1987). Estimating the population size for capture-recapture data with unequal catchability. \emph{Biometrics} 43, 783--791. Chiu, C.H., Wang, Y.T., Walther, B.A. & Chao, A. (2014). Improved nonparametric lower bound of species richness via a modified Good-Turing frequency formula. \emph{Biometrics} 70, 671--682. Colwell, R.K. & Coddington, J.A. (1994). Estimating terrestrial biodiversity through extrapolation. \emph{Phil. Trans. Roy. Soc. London} B 345, 101--118. O'Hara, R.B. (2005). Species richness estimators: how many species can dance on the head of a pin? \emph{J. Anim. Ecol.} 74, 375--386. Palmer, M.W. (1990). The estimation of species richness by extrapolation. \emph{Ecology} 71, 1195--1198. Smith, E.P & van Belle, G. (1984). Nonparametric estimation of species richness. \emph{Biometrics} 40, 119--129. } \author{Bob O'Hara (\code{estimateR}) and Jari Oksanen.} \note{ The functions are based on assumption that there is a species pool: The community is closed so that there is a fixed pool size \eqn{S_P}. In general, the functions give only the lower limit of species richness: the real richness is \eqn{S >= S_P}, and there is a consistent bias in the estimates. Even the bias-correction in Chao only reduces the bias, but does not remove it completely (Chiu et al. 2014). Optional small sample correction was added to \code{specpool} in \pkg{vegan} 2.2-0. It was not used in the older literature (Chao 1987), but it is recommended recently (Chiu et al. 2014). See \url{http://viceroy.eeb.uconn.edu/EstimateS} for a more complete (and positive) discussion and alternative software for some platforms. } \seealso{\code{\link{veiledspec}}, \code{\link{diversity}}, \code{\link{beals}}, \code{\link{specaccum}}. } \examples{ data(dune) data(dune.env) pool <- with(dune.env, specpool(dune, Management)) pool op <- par(mfrow=c(1,2)) boxplot(specnumber(dune) ~ Management, data = dune.env, col = "hotpink", border = "cyan3") boxplot(specnumber(dune)/specpool2vect(pool) ~ Management, data = dune.env, col = "hotpink", border = "cyan3") par(op) data(BCI) ## Accumulation model pool <- poolaccum(BCI) summary(pool, display = "chao") plot(pool) ## Quantitative model estimateR(BCI[1:5,]) } \keyword{ univar } vegan/man/distconnected.Rd0000644000176200001440000000725312164553376015265 0ustar liggesusers\name{distconnected} \alias{distconnected} \alias{no.shared} \title{Connectedness of Dissimilarities} \description{ Function \code{distconnected} finds groups that are connected disregarding dissimilarities that are at or above a threshold or \code{NA}. The function can be used to find groups that can be ordinated together or transformed by \code{\link{stepacross}}. Function \code{no.shared} returns a logical dissimilarity object, where \code{TRUE} means that sites have no species in common. This is a minimal structure for \code{distconnected} or can be used to set missing values to dissimilarities. } \usage{ distconnected(dis, toolong = 1, trace = TRUE) no.shared(x) } \arguments{ \item{dis}{Dissimilarity data inheriting from class \code{dist} or a an object, such as a matrix, that can be converted to a dissimilarity matrix. Functions \code{\link{vegdist}} and \code{\link{dist}} are some functions producing suitable dissimilarity data.} \item{toolong}{ Shortest dissimilarity regarded as \code{NA}. The function uses a fuzz factor, so that dissimilarities close to the limit will be made \code{NA}, too. If \code{toolong = 0} (or negative), no dissimilarity is regarded as too long. } \item{trace}{Summarize results of \code{distconnected}} \item{x}{Community data.} } \details{ Data sets are disconnected if they have sample plots or groups of sample plots which share no species with other sites or groups of sites. Such data sets cannot be sensibly ordinated by any unconstrained method because these subsets cannot be related to each other. For instance, correspondence analysis will polarize these subsets with eigenvalue 1. Neither can such dissimilarities be transformed with \code{\link{stepacross}}, because there is no path between all points, and result will contain \code{NA}s. Function \code{distconnected} will find such subsets in dissimilarity matrices. The function will return a grouping vector that can be used for sub-setting the data. If data are connected, the result vector will be all \eqn{1}s. The connectedness between two points can be defined either by a threshold \code{toolong} or using input dissimilarities with \code{NA}s. Function \code{no.shared} returns a \code{dist} structure having value \code{TRUE} when two sites have nothing in common, and value \code{FALSE} when they have at least one shared species. This is a minimal structure that can be analysed with \code{distconnected}. The function can be used to select dissimilarities with no shared species in indices which do not have a fixed upper limit. Function \code{distconnected} uses depth-first search (Sedgewick 1990). } \value{ Function \code{distconnected} returns a vector for observations using integers to identify connected groups. If the data are connected, values will be all \code{1}. Function \code{no.shared} returns an object of class \code{\link{dist}}. } \references{ Sedgewick, R. (1990). \emph{Algorithms in C}. Addison Wesley. } \author{ Jari Oksanen } \seealso{\code{\link{vegdist}} or \code{\link{dist}} for getting dissimilarities, \code{\link{stepacross}} for a case where you may need \code{distconnected}, and for connecting points \code{\link{spantree}}. } \examples{ ## There are no disconnected data in vegan, and the following uses an ## extremely low threshold limit for connectedness. This is for ## illustration only, and not a recommended practice. data(dune) dis <- vegdist(dune) gr <- distconnected(dis, toolong=0.4) # Make sites with no shared species as NA in Manhattan dissimilarities dis <- vegdist(dune, "manhattan") is.na(dis) <- no.shared(dune) } \keyword{ multivariate} vegan/man/cca.Rd0000644000176200001440000003166513156750403013161 0ustar liggesusers\name{cca} \alias{cca} \alias{cca.default} \alias{cca.formula} \alias{rda} \alias{rda.default} \alias{rda.formula} \title{ [Partial] [Constrained] Correspondence Analysis and Redundancy Analysis } \description{ Function \code{cca} performs correspondence analysis, or optionally constrained correspondence analysis (a.k.a. canonical correspondence analysis), or optionally partial constrained correspondence analysis. Function \code{rda} performs redundancy analysis, or optionally principal components analysis. These are all very popular ordination techniques in community ecology. } \usage{ \method{cca}{formula}(formula, data, na.action = na.fail, subset = NULL, ...) \method{cca}{default}(X, Y, Z, ...) \method{rda}{formula}(formula, data, scale=FALSE, na.action = na.fail, subset = NULL, ...) \method{rda}{default}(X, Y, Z, scale=FALSE, ...) } \arguments{ \item{formula}{Model formula, where the left hand side gives the community data matrix, right hand side gives the constraining variables, and conditioning variables can be given within a special function \code{Condition}.} \item{data}{Data frame containing the variables on the right hand side of the model formula.} \item{X}{ Community data matrix. } \item{Y}{ Constraining matrix, typically of environmental variables. Can be missing. It is better to use \code{formula} instead of this argument, and some further analyses only work when \code{formula} was used.} \item{Z}{ Conditioning matrix, the effect of which is removed (`partialled out') before next step. Can be missing.} \item{scale}{Scale species to unit variance (like correlations).} \item{na.action}{Handling of missing values in constraints or conditions. The default (\code{\link{na.fail}}) is to stop with missing value. Choice \code{\link{na.omit}} removes all rows with missing values. Choice \code{\link{na.exclude}} keeps all observations but gives \code{NA} for results that cannot be calculated. The WA scores of rows may be found also for missing values in constraints. Missing values are never allowed in dependent community data. } \item{subset}{Subset of data rows. This can be a logical vector which is \code{TRUE} for kept observations, or a logical expression which can contain variables in the working environment, \code{data} or species names of the community data.} \item{...}{Other arguments for \code{print} or \code{plot} functions (ignored in other functions).} } \details{ Since their introduction (ter Braak 1986), constrained, or canonical, correspondence analysis and its spin-off, redundancy analysis, have been the most popular ordination methods in community ecology. Functions \code{cca} and \code{rda} are similar to popular proprietary software \code{Canoco}, although the implementation is completely different. The functions are based on Legendre & Legendre's (2012) algorithm: in \code{cca} Chi-square transformed data matrix is subjected to weighted linear regression on constraining variables, and the fitted values are submitted to correspondence analysis performed via singular value decomposition (\code{\link{svd}}). Function \code{rda} is similar, but uses ordinary, unweighted linear regression and unweighted SVD. Legendre & Legendre (2012), Table 11.5 (p. 650) give a skeleton of the RDA algorithm of \pkg{vegan}. The algorithm of CCA is similar, but involves standardization by row and column weights. The functions can be called either with matrix-like entries for community data and constraints, or with formula interface. In general, the formula interface is preferred, because it allows a better control of the model and allows factor constraints. Some analyses of ordination results are only possible if model was fitted with formula (e.g., most cases of \code{\link{anova.cca}}, automatic model building). In the following sections, \code{X}, \code{Y} and \code{Z}, although referred to as matrices, are more commonly data frames. In the matrix interface, the community data matrix \code{X} must be given, but the other data matrices may be omitted, and the corresponding stage of analysis is skipped. If matrix \code{Z} is supplied, its effects are removed from the community matrix, and the residual matrix is submitted to the next stage. This is called `partial' correspondence or redundancy analysis. If matrix \code{Y} is supplied, it is used to constrain the ordination, resulting in constrained or canonical correspondence analysis, or redundancy analysis. Finally, the residual is submitted to ordinary correspondence analysis (or principal components analysis). If both matrices \code{Z} and \code{Y} are missing, the data matrix is analysed by ordinary correspondence analysis (or principal components analysis). Instead of separate matrices, the model can be defined using a model \code{\link{formula}}. The left hand side must be the community data matrix (\code{X}). The right hand side defines the constraining model. The constraints can contain ordered or unordered factors, interactions among variables and functions of variables. The defined \code{\link{contrasts}} are honoured in \code{\link{factor}} variables. The constraints can also be matrices (but not data frames). The formula can include a special term \code{Condition} for conditioning variables (``covariables'') ``partialled out'' before analysis. So the following commands are equivalent: \code{cca(X, Y, Z)}, \code{cca(X ~ Y + Condition(Z))}, where \code{Y} and \code{Z} refer to constraints and conditions matrices respectively. Constrained correspondence analysis is indeed a constrained method: CCA does not try to display all variation in the data, but only the part that can be explained by the used constraints. Consequently, the results are strongly dependent on the set of constraints and their transformations or interactions among the constraints. The shotgun method is to use all environmental variables as constraints. However, such exploratory problems are better analysed with unconstrained methods such as correspondence analysis (\code{\link{decorana}}, \code{\link[MASS]{corresp}}) or non-metric multidimensional scaling (\code{\link{metaMDS}}) and environmental interpretation after analysis (\code{\link{envfit}}, \code{\link{ordisurf}}). CCA is a good choice if the user has clear and strong \emph{a priori} hypotheses on constraints and is not interested in the major structure in the data set. CCA is able to correct the curve artefact commonly found in correspondence analysis by forcing the configuration into linear constraints. However, the curve artefact can be avoided only with a low number of constraints that do not have a curvilinear relation with each other. The curve can reappear even with two badly chosen constraints or a single factor. Although the formula interface makes it easy to include polynomial or interaction terms, such terms often produce curved artefacts (that are difficult to interpret), these should probably be avoided. According to folklore, \code{rda} should be used with ``short gradients'' rather than \code{cca}. However, this is not based on research which finds methods based on Euclidean metric as uniformly weaker than those based on Chi-squared metric. However, standardized Euclidean distance may be an appropriate measures (see Hellinger standardization in \code{\link{decostand}} in particular). Partial CCA (pCCA; or alternatively partial RDA) can be used to remove the effect of some conditioning or ``background'' or ``random'' variables or ``covariables'' before CCA proper. In fact, pCCA compares models \code{cca(X ~ Z)} and \code{cca(X ~ Y + Z)} and attributes their difference to the effect of \code{Y} cleansed of the effect of \code{Z}. Some people have used the method for extracting ``components of variance'' in CCA. However, if the effect of variables together is stronger than sum of both separately, this can increase total Chi-square after ``partialling out'' some variation, and give negative ``components of variance''. In general, such components of ``variance'' are not to be trusted due to interactions between two sets of variables. The functions have \code{summary} and \code{plot} methods which are documented separately (see \code{\link{plot.cca}}, \code{\link{summary.cca}}). } \value{ Function \code{cca} returns a huge object of class \code{cca}, which is described separately in \code{\link{cca.object}}. Function \code{rda} returns an object of class \code{rda} which inherits from class \code{cca} and is described in \code{\link{cca.object}}. The scaling used in \code{rda} scores is described in a separate vignette with this package. } \references{ The original method was by ter Braak, but the current implementation follows Legendre and Legendre. Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English ed. Elsevier. McCune, B. (1997) Influence of noisy environmental data on canonical correspondence analysis. \emph{Ecology} \strong{78}, 2617-2623. Palmer, M. W. (1993) Putting things in even better order: The advantages of canonical correspondence analysis. \emph{Ecology} \strong{74},2215-2230. Ter Braak, C. J. F. (1986) Canonical Correspondence Analysis: a new eigenvector technique for multivariate direct gradient analysis. \emph{Ecology} \strong{67}, 1167-1179. } \author{ The responsible author was Jari Oksanen, but the code borrows heavily from Dave Roberts (Montana State University, USA). } \seealso{ This help page describes two constrained ordination functions, \code{cca} and \code{rda}. A related method, distance-based redundancy analysis (dbRDA) is described separately (\code{\link{capscale}}). All these functions return similar objects (described in \code{\link{cca.object}}). There are numerous support functions that can be used to access the result object. In the list below, functions of type \code{cca} will handle all three constrained ordination objects, and functions of \code{rda} only handle \code{rda} and \code{\link{capscale}} results. The main plotting functions are \code{\link{plot.cca}} for all methods, and \code{\link{biplot.rda}} for RDA and dbRDA. However, generic \pkg{vegan} plotting functions can also handle the results. The scores can be accessed and scaled with \code{\link{scores.cca}}, and summarized with \code{\link{summary.cca}}. The eigenvalues can be accessed with \code{\link{eigenvals.cca}} and the regression coefficients for constraints with \code{\link{coef.cca}}. The eigenvalues can be plotted with \code{\link{screeplot.cca}}, and the (adjusted) \eqn{R^2}{R-squared} can be found with \code{\link{RsquareAdj.rda}}. The scores can be also calculated for new data sets with \code{\link{predict.cca}} which allows adding points to ordinations. The values of constraints can be inferred from ordination and community composition with \code{\link{calibrate.cca}}. Diagnostic statistics can be found with \code{\link{goodness.cca}}, \code{\link{inertcomp}}, \code{\link{spenvcor}}, \code{\link{intersetcor}}, \code{\link{tolerance.cca}}, and \code{\link{vif.cca}}. Function \code{\link{as.mlm.cca}} refits the result object as a multiple \code{\link{lm}} object, and this allows finding influence statistics (\code{\link{lm.influence}}, \code{\link{cooks.distance}} etc.). Permutation based significance for the overall model, single constraining variables or axes can be found with \code{\link{anova.cca}}. Automatic model building with \R{} \code{\link{step}} function is possible with \code{\link{deviance.cca}}, \code{\link{add1.cca}} and \code{\link{drop1.cca}}. Functions \code{\link{ordistep}} and \code{\link{ordiR2step}} (for RDA) are special functions for constrained ordination. Randomized data sets can be generated with \code{\link{simulate.cca}}. Separate methods based on constrained ordination model are principal response curves (\code{\link{prc}}) and variance partitioning between several components (\code{\link{varpart}}). Design decisions are explained in \code{\link{vignette}} on \dQuote{Design decisions} which can be accessed with \code{browseVignettes("vegan")}. Package \pkg{ade4} provides alternative constrained ordination function \code{\link[ade4]{pcaiv}}. } \examples{ data(varespec) data(varechem) ## Common but bad way: use all variables you happen to have in your ## environmental data matrix vare.cca <- cca(varespec, varechem) vare.cca plot(vare.cca) ## Formula interface and a better model vare.cca <- cca(varespec ~ Al + P*(K + Baresoil), data=varechem) vare.cca plot(vare.cca) ## `Partialling out' and `negative components of variance' cca(varespec ~ Ca, varechem) cca(varespec ~ Ca + Condition(pH), varechem) ## RDA data(dune) data(dune.env) dune.Manure <- rda(dune ~ Manure, dune.env) plot(dune.Manure) } \keyword{ multivariate } vegan/man/decostand.Rd0000644000176200001440000001201613231354436014364 0ustar liggesusers\encoding{UTF-8} \name{decostand} \alias{decostand} \alias{wisconsin} \title{Standardization Methods for Community Ecology} \description{ The function provides some popular (and effective) standardization methods for community ecologists. } \usage{ decostand(x, method, MARGIN, range.global, logbase = 2, na.rm=FALSE, ...) wisconsin(x) } \arguments{ \item{x}{Community data, a matrix-like object.} \item{method}{Standardization method. See Details for available options.} \item{MARGIN}{Margin, if default is not acceptable. \code{1} = rows, and \code{2} = columns of \code{x}.} \item{range.global}{Matrix from which the range is found in \code{method = "range"}. This allows using same ranges across subsets of data. The dimensions of \code{MARGIN} must match with \code{x}. } \item{logbase}{The logarithm base used in \code{method = "log"}.} \item{na.rm}{Ignore missing values in row or column standardizations.} \item{\dots}{Other arguments to the function (ignored).} } \details{ The function offers following standardization methods for community data: \itemize{ \item \code{total}: divide by margin total (default \code{MARGIN = 1}). \item \code{max}: divide by margin maximum (default \code{MARGIN = 2}). \item \code{freq}: divide by margin maximum and multiply by the number of non-zero items, so that the average of non-zero entries is one (Oksanen 1983; default \code{MARGIN = 2}). \item \code{normalize}: make margin sum of squares equal to one (default \code{MARGIN = 1}). \item \code{range}: standardize values into range 0 \dots 1 (default \code{MARGIN = 2}). If all values are constant, they will be transformed to 0. \item \code{standardize}: scale \code{x} to zero mean and unit variance (default \code{MARGIN = 2}). \item \code{pa}: scale \code{x} to presence/absence scale (0/1). \item \code{chi.square}: divide by row sums and square root of column sums, and adjust for square root of matrix total (Legendre & Gallagher 2001). When used with the Euclidean distance, the distances should be similar to the Chi-square distance used in correspondence analysis. However, the results from \code{\link{cmdscale}} would still differ, since CA is a weighted ordination method (default \code{MARGIN = 1}). \item \code{hellinger}: square root of \code{method = "total"} (Legendre & Gallagher 2001). \item \code{log}: logarithmic transformation as suggested by Anderson et al. (2006): \eqn{\log_b (x) + 1}{log_b (x) + 1} for \eqn{x > 0}, where \eqn{b} is the base of the logarithm; zeros are left as zeros. Higher bases give less weight to quantities and more to presences, and \code{logbase = Inf} gives the presence/absence scaling. Please note this is \emph{not} \eqn{\log(x+1)}{log(x+1)}. Anderson et al. (2006) suggested this for their (strongly) modified Gower distance (implemented as \code{method = "altGower"} in \code{\link{vegdist}}), but the standardization can be used independently of distance indices. } Standardization, as contrasted to transformation, means that the entries are transformed relative to other entries. All methods have a default margin. \code{MARGIN=1} means rows (sites in a normal data set) and \code{MARGIN=2} means columns (species in a normal data set). Command \code{wisconsin} is a shortcut to common Wisconsin double standardization where species (\code{MARGIN=2}) are first standardized by maxima (\code{max}) and then sites (\code{MARGIN=1}) by site totals (\code{tot}). Most standardization methods will give nonsense results with negative data entries that normally should not occur in the community data. If there are empty sites or species (or constant with \code{method = "range"}), many standardization will change these into \code{NaN}. } \value{ Returns the standardized data frame, and adds an attribute \code{"decostand"} giving the name of applied standardization \code{"method"}. } \author{Jari Oksanen, Etienne \enc{Laliberté}{Laliberte} (\code{method = "log"}).} \note{Common transformations can be made with standard \R functions.} \references{ Anderson, M.J., Ellingsen, K.E. & McArdle, B.H. (2006) Multivariate dispersion as a measure of beta diversity. \emph{Ecology Letters} \strong{9}, 683--693. Legendre, P. & Gallagher, E.D. (2001) Ecologically meaningful transformations for ordination of species data. \emph{Oecologia} \strong{129}, 271--280. Oksanen, J. (1983) Ordination of boreal heath-like vegetation with principal component analysis, correspondence analysis and multidimensional scaling. \emph{Vegetatio} \strong{52}, 181--189. } \examples{ data(varespec) sptrans <- decostand(varespec, "max") apply(sptrans, 2, max) sptrans <- wisconsin(varespec) ## Chi-square: PCA similar but not identical to CA. ## Use wcmdscale for weighted analysis and identical results. sptrans <- decostand(varespec, "chi.square") plot(procrustes(rda(sptrans), cca(varespec))) } \keyword{ multivariate} \keyword{ manip } vegan/man/deviance.cca.Rd0000644000176200001440000001027212626316320014722 0ustar liggesusers\encoding{UTF-8} \name{deviance.cca} \alias{deviance.cca} \alias{deviance.rda} \alias{extractAIC.cca} \title{ Statistics Resembling Deviance and AIC for Constrained Ordination} \description{ The functions extract statistics that resemble deviance and AIC from the result of constrained correspondence analysis \code{\link{cca}} or redundancy analysis \code{\link{rda}}. These functions are rarely needed directly, but they are called by \code{\link{step}} in automatic model building. Actually, \code{\link{cca}} and \code{\link{rda}} do not have \code{\link{AIC}} and these functions are certainly wrong. } \usage{ \method{deviance}{cca}(object, ...) \method{extractAIC}{cca}(fit, scale = 0, k = 2, ...) } \arguments{ \item{object}{the result of a constrained ordination (\code{\link{cca}} or \code{\link{rda}}). } \item{fit}{fitted model from constrained ordination.} \item{scale}{optional numeric specifying the scale parameter of the model, see \code{scale} in \code{\link{step}}.} \item{k}{numeric specifying the "weight" of the \emph{equivalent degrees of freedom} (=:\code{edf}) part in the AIC formula.} \item{\dots}{further arguments. } } \details{ The functions find statistics that resemble \code{\link{deviance}} and \code{\link{AIC}} in constrained ordination. Actually, constrained ordination methods do not have a log-Likelihood, which means that they cannot have AIC and deviance. Therefore you should not use these functions, and if you use them, you should not trust them. If you use these functions, it remains as your responsibility to check the adequacy of the result. The deviance of \code{\link{cca}} is equal to the Chi-square of the residual data matrix after fitting the constraints. The deviance of \code{\link{rda}} is defined as the residual sum of squares. The deviance function of \code{rda} is also used for \code{\link{capscale}}. Function \code{extractAIC} mimics \code{extractAIC.lm} in translating deviance to AIC. There is little need to call these functions directly. However, they are called implicitly in \code{\link{step}} function used in automatic selection of constraining variables. You should check the resulting model with some other criteria, because the statistics used here are unfounded. In particular, the penalty \code{k} is not properly defined, and the default \code{k = 2} is not justified theoretically. If you have only continuous covariates, the \code{step} function will base the model building on magnitude of eigenvalues, and the value of \code{k} only influences the stopping point (but the variables with the highest eigenvalues are not necessarily the most significant in permutation tests in \code{\link{anova.cca}}). If you also have multi-class factors, the value of \code{k} will have a capricious effect in model building. The \code{\link{step}} function will pass arguments to \code{\link{add1.cca}} and \code{\link{drop1.cca}}, and setting \code{test = "permutation"} will provide permutation tests of each deletion and addition which can help in judging the validity of the model building. } \value{ The \code{deviance} functions return ``deviance'', and \code{extractAIC} returns effective degrees of freedom and ``AIC''. } \references{ \enc{Godínez-Domínguez}{Godinez-Dominguez}, E. & Freire, J. (2003) Information-theoretic approach for selection of spatial and temporal models of community organization. \emph{Marine Ecology Progress Series} \strong{253}, 17--24. } \author{ Jari Oksanen } \note{ These functions are unfounded and untested and they should not be used directly or implicitly. Moreover, usual caveats in using \code{\link{step}} are very valid. } \seealso{\code{\link{cca}}, \code{\link{rda}}, \code{\link{anova.cca}}, \code{\link{step}}, \code{\link{extractAIC}}, \code{\link{add1.cca}}, \code{\link{drop1.cca}}. } \examples{ # The deviance of correspondence analysis equals Chi-square data(dune) data(dune.env) chisq.test(dune) deviance(cca(dune)) # Stepwise selection (forward from an empty model "dune ~ 1") ord <- cca(dune ~ ., dune.env) step(cca(dune ~ 1, dune.env), scope = formula(ord)) } \keyword{ multivariate } \keyword{ models } vegan/man/ordiresids.Rd0000644000176200001440000000512013231354436014565 0ustar liggesusers\name{ordiresids} \alias{ordiresids} \title{Plots of Residuals and Fitted Values for Constrained Ordination} \description{ The function provides \code{\link{plot.lm}} style diagnostic plots for the results of constrained ordination from \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}}. Normally you do not need these plots, because ordination is descriptive and does not make assumptions on the distribution of the residuals. However, if you permute residuals in significance tests (\code{\link{anova.cca}}), you may be interested in inspecting that the residuals really are exchangeable and independent of fitted values. } \usage{ ordiresids(x, kind = c("residuals", "scale", "qqmath"), residuals = "working", type = c("p", "smooth", "g"), formula, ...) } \arguments{ \item{x}{Ordination result from \code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. } \item{kind}{The type of plot: \code{"residuals"} plot residuals against fitted values, \code{"scale"} the square root of absolute residuals against fitted values, and \code{"qqmath"} the residuals against expected distribution (defaults \code{\link{qnorm}}), unless defined differently in the \code{formula} argument). } \item{residuals}{The kind of residuals and fitted values. The argument is passed on to \code{\link{fitted.cca}} with alternatives \code{"working"} and \code{"response"}.} \item{type}{The type of plot. The argument is passed on to \pkg{lattice} functions. } \item{formula}{Formula to override the default plot. The formula can contain items \code{Fitted}, \code{Residuals}, \code{Species} and \code{Sites} (provided that names of species and sites are available in the ordination result). } \item{\dots}{Other arguments passed to \pkg{lattice} functions. } } \details{ The default plots are similar as in \code{\link{plot.lm}}, but they use \code{\link[lattice]{Lattice}} functions \code{\link[lattice]{xyplot}} and \code{\link[lattice]{qqmath}}. The alternatives have default formulae but these can be replaced by the user. The elements available in formula or in the \code{groups} argument are \code{Fitted}, \code{Residuals}, \code{Species} and \code{Sites}. } \value{ The function return a \code{\link[lattice]{Lattice}} object that can displayed as plot. } \author{Jari Oksanen } \seealso{\code{\link{plot.lm}}, \code{\link[lattice]{Lattice}}, \code{\link[lattice]{xyplot}}, \code{\link[lattice]{qqmath}}. } \examples{ data(varespec) data(varechem) mod <- cca(varespec ~ Al + P + K, varechem) ordiresids(mod) } \keyword{ hplot } vegan/man/sipoo.Rd0000644000176200001440000000170513231354436013554 0ustar liggesusers\name{sipoo} \alias{sipoo} \docType{data} \title{ Birds in the Archipelago of Sipoo (Sibbo)} \description{ Land birds on islands covered by coniferous forest in the Sipoo archipelago, southern Finland (landbridge/ oceanic distinction unclear from source). } \usage{data(sipoo)} \format{ A data frame with 18 sites and 50 species (Simberloff & Martin, 1991, Appendix 3). The species are referred by 4+4 letter abbreviation of their Latin names (but using five letters in two species names to make these unique). The example gives the areas of the studies islands in hectares. } \source{ Simberloff, D. & Martin, J.-L. (1991). Nestedness of insular avifaunas: simple summary statistics masking complex species patterns. \emph{Ornis Fennica} 68:178--192. } \examples{ data(sipoo) ## Areas of the islands in hectares sipoo.area <- c(1.1, 2.1, 2.2, 3.1, 3.5, 5.8, 6, 6.1, 6.5, 11.4, 13, 14.5, 16.1 ,17.5, 28.7, 40.5, 104.5, 233) } \keyword{datasets} vegan/man/betadiver.Rd0000644000176200001440000001444313215427306014372 0ustar liggesusers\encoding{UTF-8} \name{betadiver} \alias{betadiver} \alias{scores.betadiver} \alias{plot.betadiver} \title{ Indices of beta Diversity } \description{ The function estimates any of the 24 indices of beta diversity reviewed by Koleff et al. (2003). Alternatively, it finds the co-occurrence frequencies for triangular plots (Koleff et al. 2003). } \usage{ betadiver(x, method = NA, order = FALSE, help = FALSE, ...) \method{plot}{betadiver}(x, ...) \method{scores}{betadiver}(x, triangular = TRUE, ...) } \arguments{ \item{x}{Community data matrix, or the \code{betadiver} result for \code{plot} and \code{scores} functions. } \item{method}{The index of beta diversity as defined in Koleff et al. (2003), Table 1. You can use either the subscript of \eqn{\beta} or the number of the index. See argument \code{help} below. } \item{order}{Order sites by increasing number of species. This will influence the configuration in the triangular plot and non-symmetric indices. } \item{help}{Show the numbers, subscript names and the defining equations of the indices and exit.} \item{triangular}{Return scores suitable for triangular plotting of proportions. If \code{FALSE}, returns a 3-column matrix of raw counts.} \item{\dots}{ Other arguments to functions. } } \details{ The most commonly used index of beta diversity is \eqn{\beta_w = S/\alpha - 1}, where \eqn{S} is the total number of species, and \eqn{\alpha} is the average number of species per site (Whittaker 1960). A drawback of this model is that \eqn{S} increases with sample size, but the expectation of \eqn{\alpha} remains constant, and so the beta diversity increases with sample size. A solution to this problem is to study the beta diversity of pairs of sites (Marion et al. 2017). If we denote the number of species shared between two sites as \eqn{a} and the numbers of unique species (not shared) as \eqn{b} and \eqn{c}, then \eqn{S = a + b + c} and \eqn{\alpha = (2 a + b + c)/2} so that \eqn{\beta_w = (b+c)/(2 a + b + c)}. This is the \enc{Sørensen}{Sorensen} dissimilarity as defined in \pkg{vegan} function \code{\link{vegdist}} with argument \code{binary = TRUE}. Many other indices are dissimilarity indices as well. Function \code{betadiver} finds all indices reviewed by Koleff et al. (2003). All these indices could be found with function \code{\link{designdist}}, but the current function provides a conventional shortcut. The function only finds the indices. The proper analysis must be done with functions such as \code{\link{betadisper}}, \code{\link{adonis2}} or \code{\link{mantel}}. The indices are directly taken from Table 1 of Koleff et al. (2003), and they can be selected either by the index number or the subscript name used by Koleff et al. The numbers, names and defining equations can be seen using \code{betadiver(help = TRUE)}. In all cases where there are two alternative forms, the one with the term \eqn{-1} is used. There are several duplicate indices, and the number of distinct alternatives is much lower than 24 formally provided. The formulations used in functions differ occasionally from those in Koleff et al. (2003), but they are still mathematically equivalent. With \code{method = NA}, no index is calculated, but instead an object of class \code{betadiver} is returned. This is a list of elements \code{a}, \code{b} and \code{c}. Function \code{plot} can be used to display the proportions of these elements in triangular plot as suggested by Koleff et al. (2003), and \code{scores} extracts the triangular coordinates or the raw scores. Function \code{plot} returns invisibly the triangular coordinates as an \code{"\link{ordiplot}"} object. } \value{ With \code{method = NA}, the function returns an object of class \code{"betadisper"} with elements \code{a}, \code{b}, and \code{c}. If \code{method} is specified, the function returns a \code{"dist"} object which can be used in any function analysing dissimilarities. For beta diversity, particularly useful functions are \code{\link{betadisper}} to study the betadiversity in groups, \code{\link{adonis2}} for any model, and \code{\link{mantel}} to compare beta diversities to other dissimilarities or distances (including geographical distances). Although \code{betadiver} returns a \code{"dist"} object, some indices are similarities and cannot be used as such in place of dissimilarities, but that is a severe user error. Functions 10 (\code{"j"}) and 11 (\code{"sor"}) are two such similarity indices. } \references{ Baselga, A. (2010) Partitioning the turnover and nestedness components of beta diversity. \emph{Global Ecology and Biogeography} 19, 134--143. Koleff, P., Gaston, K.J. and Lennon, J.J. (2003) Measuring beta diversity for presence-absence data. \emph{Journal of Animal Ecology} 72, 367--382. Marion, Z.H., Fordyce, J.A. and Fitzpatrick, B.M. (2017) Pairwise beta diversity resolves an underappreciated source of confusion in calculating species turnover. \emph{Ecology} 98, 933--939. Whittaker, R.H. (1960) Vegetation of Siskiyou mountains, Oregon and California. \emph{Ecological Monographs} 30, 279--338. } \author{Jari Oksanen } \section{Warning }{Some indices return similarities instead of dissimilarities.} \seealso{ \code{\link{designdist}} can be used to implement all these functions, and also allows using notation with \code{alpha} and \code{gamma} diversities. \code{\link{vegdist}} has some canned alternatives. Functions \code{\link{betadisper}}, \code{\link{adonis2}} and \code{\link{mantel}} can be used for analysing beta diversity objects. The returned dissimilarities can be used in any distance-based methods, such as \code{\link{metaMDS}}, \code{\link{capscale}} and \code{\link{dbrda}}. Functions \code{\link{nestedbetasor}} and \code{\link{nestedbetajac}} implement decomposition beta diversity measures (\enc{Sørensen}{Sorensen} and Jaccard) into turnover and nestedness components following Baselga (2010). } \examples{ ## Raw data and plotting data(sipoo) m <- betadiver(sipoo) plot(m) ## The indices betadiver(help=TRUE) ## The basic Whittaker index d <- betadiver(sipoo, "w") ## This should be equal to Sorensen index (binary Bray-Curtis in ## vegan) range(d - vegdist(sipoo, binary=TRUE)) } \keyword{ multivariate } vegan/man/oecosimu.Rd0000644000176200001440000003200313156750403014241 0ustar liggesusers\encoding{UTF-8} \name{oecosimu} \alias{oecosimu} \alias{as.ts.oecosimu} \alias{as.mcmc.oecosimu} \title{Evaluate Statistics with Null Models of Biological Communities } \description{ Function evaluates a statistic or a vector of statistics in community and evaluates its significance in a series of simulated random communities. The approach has been used traditionally for the analysis of nestedness, but the function is more general and can be used with any statistics evaluated with simulated communities. Function \code{oecosimu} collects and evaluates the statistics. The Null model communities are described in \code{\link{make.commsim}} and \code{\link{permatfull}}/ \code{\link{permatswap}}, the definition of Null models in \code{\link{nullmodel}}, and nestedness statistics in \code{\link{nestednodf}} (which describes several alternative statistics, including nestedness temperature, \eqn{N0}, checker board units, nestedness discrepancy and NODF). } \usage{ oecosimu(comm, nestfun, method, nsimul = 99, burnin = 0, thin = 1, statistic = "statistic", alternative = c("two.sided", "less", "greater"), batchsize = NA, parallel = getOption("mc.cores"), ...) \method{as.ts}{oecosimu}(x, ...) \method{as.mcmc}{oecosimu}(x) } \arguments{ \item{comm}{Community data, or a Null model object generated by \code{\link{nullmodel}} or an object of class \code{simmat} (array of permuted matrices from \code{\link{simulate.nullmodel}}). If \code{comm} is a community data, null model simulation \code{method} must be specified. If \code{comm} is a \code{\link{nullmodel}}, the simulation \code{method} is ignored, and if \code{comm} is a \code{simmat} object, all other arguments are ignored except \code{nestfun}, \code{statistic} and \code{alternative}.} \item{nestfun}{Function analysed. Some nestedness functions are provided in \pkg{vegan} (see \code{\link{nestedtemp}}), but any function can be used if it accepts the community as the first argument, and returns either a plain number or a vector or the result in list item with the name defined in argument \code{statistic}. See Examples for defining your own functions.} \item{method}{Null model method: either a name (character string) of a method defined in \code{\link{make.commsim}} or a \code{\link{commsim}} function. This argument is ignored if \code{comm} is a \code{\link{nullmodel}} or a \code{simmat} object. See Details and Examples.} \item{nsimul}{Number of simulated null communities (ignored if \code{comm} is a \code{simmat} object).} \item{burnin}{Number of null communities discarded before proper analysis in sequential methods (such as \code{"tswap"}) (ignored with non-sequential methods or when \code{comm} is a \code{simmat} object).} \item{thin}{Number of discarded null communities between two evaluations of nestedness statistic in sequential methods (ignored with non-sequential methods or when \code{comm} is a \code{simmat} object).} \item{statistic}{The name of the statistic returned by \code{nestfun}.} \item{alternative}{a character string specifying the alternative hypothesis, must be one of \code{"two.sided"} (default), \code{"greater"} or \code{"less"}. Please note that the \eqn{p}-value of two-sided test is approximately two times higher than in the corresponding one-sided test (\code{"greater"} or \code{"less"} depending on the sign of the difference).} \item{batchsize}{Size in Megabytes of largest simulation object. If a larger structure would be produced, the analysis is broken internally into batches. With default \code{NA} the analysis is not broken into batches. See Details.} \item{parallel}{Number of parallel processes or a predefined socket cluster. With \code{parallel = 1} uses ordinary, non-parallel processing. The parallel processing is done with \pkg{parallel} package. If you define a \code{nestfun} in Windows that needs other \R packages than \pkg{vegan} or \pkg{permute}, you must set up a socket cluster before the call. } \item{x}{An \code{oecosimu} result object.} \item{\dots}{Other arguments to functions.} } \details{ Function \code{oecosimu} is a wrapper that evaluates a statistic using function given by \code{nestfun}, and then simulates a series of null models based on \code{nullmodel}, and evaluates the statistic on these null models. The \pkg{vegan} packages contains some nestedness functions that are described separately (\code{\link{nestedchecker}}, \code{\link{nesteddisc}}, \code{\link{nestedn0}}, \code{\link{nestedtemp}}, \code{\link{nestednodf}}), but many other functions can be used as long as they are meaningful with simulated communities. An applicable function must return either the statistic as a plain number or a vector, or as a list element \code{"statistic"} (like \code{\link{chisq.test}}), or in an item whose name is given in the argument \code{statistic}. The statistic can be a single number (like typical for a nestedness index), or it can be a vector. The vector indices can be used to analyse site (row) or species (column) properties, see \code{\link{treedive}} for an example. Raup-Crick index (\code{\link{raupcrick}}) gives an example of using a dissimilarities. The Null model type can be given as a name (quoted character string) that is used to define a Null model in \code{\link{make.commsim}}. These include all binary models described by Wright et al. (1998), Jonsson (2001), Gotelli & Entsminger (2003), \enc{Miklós}{Miklos} & Podani (2004), and some others. There are several quantitative Null models, such those discussed by Hardy (2008), and several that are unpublished (see \code{\link{make.commsim}}, \code{\link{permatfull}}, \code{\link{permatswap}} for discussion). The user can also define her own \code{\link{commsim}} function (see Examples). Function works by first defining a \code{\link{nullmodel}} with given \code{\link{commsim}}, and then generating a series of simulated communities with \code{\link{simulate.nullmodel}}. A shortcut can be used for any of these stages and the input can be \enumerate{ \item Community data (\code{comm}), Null model function (\code{nestfun}) and the number of simulations (\code{nsimul}). \item A \code{\link{nullmodel}} object and the number of simulations, and argument \code{method} is ignored. \item A three-dimensional array of simulated communities generated with \code{\link{simulate.nullmodel}}, and arguments \code{method} and \code{nsimul} are ignored. } The last case allows analysing several statistics with the same simulations. The function first generates simulations with given \code{\link{nullmodel}} and then analyses these using the \code{nestfun}. With large data sets and/or large number of simulations, the generated objects can be very large, and if the memory is exhausted, the analysis can become very slow and the system can become unresponsive. The simulation will be broken into several smaller batches if the simulated \code{\link{nullmodel}} objective will be above the set \code{batchsize} to avoid memory problems (see \code{\link{object.size}} for estimating the size of the current data set). The parallel processing still increases the memory needs. The parallel processing is only used for evaluating \code{nestfun}. The main load may be in simulation of the \code{\link{nullmodel}}, and \code{parallel} argument does not help there. Function \code{as.ts} transforms the simulated results of sequential methods into a time series or a \code{\link{ts}} object. This allows using analytic tools for time series in studying the sequences (see examples). Function \code{as.mcmc} transforms the simulated results of sequential methods into an \code{\link[coda]{mcmc}} object of the \pkg{coda} package. The \pkg{coda} package provides functions for the analysis of stationarity, adequacy of sample size, autocorrelation, need of burn-in and much more for sequential methods, and summary of the results. Please consult the documentation of the \pkg{coda} package. Function \code{\link{permustats}} provides support to the standard \code{\link{density}}, \code{\link[lattice]{densityplot}}, \code{\link{qqnorm}} and \code{\link[lattice]{qqmath}} functions for the simulated values. } \value{ Function \code{oecosimu} returns an object of class \code{"oecosimu"}. The result object has items \code{statistic} and \code{oecosimu}. The \code{statistic} contains the complete object returned by \code{nestfun} for the original data. The \code{oecosimu} component contains the following items: \item{statistic}{Observed values of the statistic.} \item{simulated}{Simulated values of the statistic.} \item{means}{Mean values of the statistic from simulations.} \item{z}{Standardized effect sizes (SES, a.k.a. the \eqn{z}-values) of the observed statistic based on simulations.} \item{pval}{The \eqn{P}-values of the statistic based on simulations.} \item{alternative}{The type of testing as given in argument \code{alternative}.} \item{method}{The \code{method} used in \code{\link{nullmodel}}.} \item{isSeq}{\code{TRUE} if \code{method} was sequential.} } \references{ Hardy, O. J. (2008) Testing the spatial phylogenetic structure of local communities: statistical performances of different null models and test statistics on a locally neutral community. \emph{Journal of Ecology} 96, 914--926. Gotelli, N.J. & Entsminger, N.J. (2003). Swap algorithms in null model analysis. \emph{Ecology} 84, 532--535. Jonsson, B.G. (2001) A null model for randomization tests of nestedness in species assemblages. \emph{Oecologia} 127, 309--313. \enc{Miklós}{Miklos}, I. & Podani, J. (2004). Randomization of presence-absence matrices: comments and new algorithms. \emph{Ecology} 85, 86--92. Wright, D.H., Patterson, B.D., Mikkelson, G.M., Cutler, A. & Atmar, W. (1998). A comparative analysis of nested subset patterns of species composition. \emph{Oecologia} 113, 1--20. } \author{Jari Oksanen and Peter Solymos} \note{ If you wonder about the name of \code{oecosimu}, look at journal names in the References (and more in \code{\link{nestedtemp}}). The internal structure of the function was radically changed in \pkg{vegan 2.2-0} with introduction of \code{\link{commsim}} and \code{\link{nullmodel}} and deprecation of \code{\link{commsimulator}}. However, the results and the basic user interface remain the same (except that \code{method = "r0_old"} must be used to reproduce the old results of \code{"method = r0"}). } \seealso{Function \code{oecosimu} currently defines null models with \code{\link{commsim}} and generates the simulated null model communities with \code{\link{nullmodel}} and \code{\link{simulate.nullmodel}}. For other applications of \code{oecosimu}, see \code{\link{treedive}} and \code{\link{raupcrick}}. Function \code{\link[labdsv]{rndtaxa}} (\pkg{labdsv} package) randomizes a community table. See also \code{\link{nestedtemp}} (that also discusses other nestedness functions) and \code{\link{treedive}} for another application. } \examples{ ## Use the first eigenvalue of correspondence analysis as an index ## of structure: a model for making your own functions. data(sipoo) ## Traditional nestedness statistics (number of checkerboard units) oecosimu(sipoo, nestedchecker, "r0") ## sequential model, one-sided test, a vector statistic out <- oecosimu(sipoo, decorana, "swap", burnin=100, thin=10, statistic="evals", alt = "greater") out ## Inspect the swap sequence as a time series object plot(as.ts(out)) lag.plot(as.ts(out)) acf(as.ts(out)) ## Density plot densityplot(permustats(out), as.table = TRUE, layout = c(1,4)) ## Use quantitative null models to compare ## mean Bray-Curtis dissimilarities data(dune) meandist <- function(x) mean(vegdist(x, "bray")) mbc1 <- oecosimu(dune, meandist, "r2dtable") mbc1 ## Define your own null model as a 'commsim' function: shuffle cells ## in each row foo <- function(x, n, nr, nc, ...) { out <- array(0, c(nr, nc, n)) for (k in seq_len(n)) out[,,k] <- apply(x, 2, function(z) sample(z, length(z))) out } cf <- commsim("myshuffle", foo, isSeq = FALSE, binary = FALSE, mode = "double") oecosimu(dune, meandist, cf) ## Use pre-built null model nm <- simulate(nullmodel(sipoo, "curveball"), 99) oecosimu(nm, nestedchecker) ## Several chains of a sequential model -- this can be generalized ## for parallel processing (see ?smbind) nm <- replicate(5, simulate(nullmodel(sipoo, "swap"), 99, thin=10, burnin=100), simplify = FALSE) ## nm is now a list of nullmodels: use smbind to combine these into one ## nullmodel with several chains nm <- smbind(nm, MARGIN = 3) nm oecosimu(nm, nestedchecker) ## After this you can use as.mcmc() and tools in the coda package to ## analyse the chains (these will show that thin, burnin and nsimul are ## all too low for real analysis). } \keyword{ multivariate } \keyword{ datagen } \keyword{ nonparametric } vegan/man/eigenvals.Rd0000644000176200001440000000641613231354436014404 0ustar liggesusers\name{eigenvals} \Rdversion{1.1} \alias{eigenvals} \alias{eigenvals.default} \alias{eigenvals.prcomp} \alias{eigenvals.princomp} \alias{eigenvals.cca} \alias{eigenvals.wcmdscale} \alias{eigenvals.pcnm} \alias{eigenvals.dudi} \alias{eigenvals.pca} \alias{eigenvals.pco} \alias{summary.eigenvals} \title{ Extract Eigenvalues from an Ordination Object } \description{ Function extracts eigenvalues from an object that has them. Many multivariate methods return such objects. } \usage{ eigenvals(x, ...) \method{eigenvals}{cca}(x, constrained = FALSE, ...) \method{summary}{eigenvals}(object, ...) } \arguments{ \item{x}{ An object from which to extract eigenvalues. } \item{object}{ An \code{eigenvals} result object. } \item{constrained}{ Return only constrained eigenvalues. } \item{\dots}{ Other arguments to the functions (usually ignored) } } \details{ This is a generic function that has methods for \code{\link{cca}}, \code{\link{wcmdscale}}, \code{\link{pcnm}}, \code{\link{prcomp}}, \code{\link{princomp}}, \code{\link[ade4]{dudi}} (of \pkg{ade4}), and \code{\link[labdsv]{pca}} and \code{\link[labdsv]{pco}} (of \pkg{labdsv}) result objects. The default method also extracts eigenvalues if the result looks like being from \code{\link{eigen}} or \code{\link{svd}}. Functions \code{\link{prcomp}} and \code{\link{princomp}} contain square roots of eigenvalues that all called standard deviations, but \code{eigenvals} function returns their squares. Function \code{\link{svd}} contains singular values, but function \code{eigenvals} returns their squares. For constrained ordination methods \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}} the function returns the both constrained and unconstrained eigenvalues concatenated in one vector, but the partial component will be ignored. However, with argument \code{constrained = TRUE} only constrained eigenvalues are returned. The \code{summary} of \code{eigenvals} result returns eigenvalues, proportion explained and cumulative proportion explained. The result object can have some negative eigenvalues (\code{\link{wcmdscale}}, \code{\link{capscale}}, \code{\link{pcnm}}) which correspond to imaginary axes of Euclidean mapping of non-Euclidean distances (Gower 1985). In these cases, the sum of absolute values of eigenvalues is used in calculating the proportions explained, and real axes (corresponding to positive eigenvalues) will only explain a part of total variation (Mardia et al. 1979, Gower 1985). } \value{ An object of class \code{"eigenvals"} which is a vector of eigenvalues. } \author{ Jari Oksanen. } \references{ Gower, J. C. (1985). Properties of Euclidean and non-Euclidean distance matrices. \emph{Linear Algebra and its Applications} 67, 81--97. Mardia, K. V., Kent, J. T. and Bibby, J. M. (1979). Chapter 14 of \emph{Multivariate Analysis}, London: Academic Press. } \seealso{ \code{\link{eigen}}, \code{\link{svd}}, \code{\link{prcomp}}, \code{\link{princomp}}, \code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}, \code{\link{wcmdscale}}, \code{\link{cca.object}}. } \examples{ data(varespec) data(varechem) mod <- cca(varespec ~ Al + P + K, varechem) ev <- eigenvals(mod) ev summary(ev) } \keyword{ multivariate } vegan/man/renyi.Rd0000644000176200001440000001257313231354436013556 0ustar liggesusers\encoding{UTF-8} \name{renyi} \alias{renyi} \alias{plot.renyi} \alias{renyiaccum} \alias{plot.renyiaccum} \alias{persp.renyiaccum} \title{Renyi and Hill Diversities and Corresponding Accumulation Curves } \description{ Function \code{renyi} find \enc{Rényi}{Renyi} diversities with any scale or the corresponding Hill number (Hill 1973). Function \code{renyiaccum} finds these statistics with accumulating sites. } \usage{ renyi(x, scales = c(0, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, Inf), hill = FALSE) \method{plot}{renyi}(x, ...) renyiaccum(x, scales = c(0, 0.5, 1, 2, 4, Inf), permutations = 100, raw = FALSE, collector = FALSE, subset, ...) \method{plot}{renyiaccum}(x, what = c("Collector", "mean", "Qnt 0.025", "Qnt 0.975"), type = "l", ...) \method{persp}{renyiaccum}(x, theta = 220, col = heat.colors(100), zlim, ...) } \arguments{ \item{x}{Community data matrix or plotting object. } \item{scales}{Scales of \enc{Rényi}{Renyi} diversity.} \item{hill}{Calculate Hill numbers.} \item{permutations}{Usually an integer giving the number permutations, but can also be a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or a permutation matrix where each row gives the permuted indices.} \item{raw}{if \code{FALSE} then return summary statistics of permutations, and if \code{TRUE} then returns the individual permutations.} \item{collector}{Accumulate the diversities in the order the sites are in the data set, and the collector curve can be plotted against summary of permutations. The argument is ignored if \code{raw = TRUE}. } \item{subset}{logical expression indicating sites (rows) to keep: missing values are taken as \code{FALSE}.} \item{what}{Items to be plotted.} \item{type}{Type of plot, where \code{type = "l"} means lines.} \item{theta}{Angle defining the viewing direction (azimuthal) in \code{\link{persp}}.} \item{col}{Colours used for surface. Single colour will be passed on, and vector colours will be selected by the midpoint of a rectangle in \code{\link{persp}}. } \item{zlim}{Limits of vertical axis.} \item{\dots}{Other arguments which are passed to \code{renyi} and to graphical functions.} } \details{ Common \code{\link{diversity}} indices are special cases of \enc{Rényi}{Renyi} diversity \deqn{H_a = \frac{1}{1-a} \log \sum p_i^a}{H.a = 1/(1-a) log sum(p^a)} where \eqn{a} is a scale parameter, and Hill (1975) suggested to use so-called ``Hill numbers'' defined as \eqn{N_a = \exp(H_a)}{N.a = exp(H.a)}. Some Hill numbers are the number of species with \eqn{a = 0}, \eqn{\exp(H')}{exp(H')} or the exponent of Shannon diversity with \eqn{a = 1}, inverse Simpson with \eqn{a = 2} and \eqn{1/ \max(p_i)}{1/max(p)} with \eqn{a = \infty}{a = Inf}. According to the theory of diversity ordering, one community can be regarded as more diverse than another only if its \enc{Rényi}{Renyi} diversities are all higher (\enc{Tóthmérész}{Tothmeresz} 1995). The \code{plot} method for \code{renyi} uses \pkg{lattice} graphics, and displays the diversity values against each scale in separate panel for each site together with minimum, maximum and median values in the complete data. Function \code{renyiaccum} is similar to \code{\link{specaccum}} but finds \enc{Rényi}{Renyi} or Hill diversities at given \code{scales} for random permutations of accumulated sites. Its \code{plot} function uses \pkg{lattice} function \code{\link[lattice]{xyplot}} to display the accumulation curves for each value of \code{scales} in a separate panel. In addition, it has a \code{persp} method to plot the diversity surface against scale and number and sites. Similar dynamic graphics can be made with \code{\link[vegan3d]{rgl.renyiaccum}} in \pkg{vegan3d} package. } \value{ Function \code{renyi} returns a data frame of selected indices. Function \code{renyiaccum} with argument \code{raw = FALSE} returns a three-dimensional array, where the first dimension are the accumulated sites, second dimension are the diversity scales, and third dimension are the summary statistics \code{mean}, \code{stdev}, \code{min}, \code{max}, \code{Qnt 0.025} and \code{Qnt 0.975}. With argument \code{raw = TRUE} the statistics on the third dimension are replaced with individual permutation results. } \references{ \url{http://www.worldagroforestry.org/resources/databases/tree-diversity-analysis} Hill, M.O. (1973). Diversity and evenness: a unifying notation and its consequences. \emph{Ecology} 54, 427--473. Kindt R, Van Damme P, Simons AJ. 2006. Tree diversity in western Kenya: using profiles to characterise richness and evenness. \emph{Biodiversity and Conservation} 15: 1253-1270. \enc{Tóthmérész}{Tothmeresz}, B. (1995). Comparison of different methods for diversity ordering. \emph{Journal of Vegetation Science} 6, 283--290. } \author{ Roeland Kindt \email{r.kindt@cgiar.org} and Jari Oksanen } \seealso{\code{\link{diversity}} for diversity indices, and \code{\link{specaccum}} for ordinary species accumulation curves, and \code{\link[lattice]{xyplot}}, \code{\link{persp}} and \code{\link[vegan3d]{rgl.renyiaccum}}. } \examples{ data(BCI) i <- sample(nrow(BCI), 12) mod <- renyi(BCI[i,]) plot(mod) mod <- renyiaccum(BCI[i,]) plot(mod, as.table=TRUE, col = c(1, 2, 2)) persp(mod) } \keyword{univar } vegan/man/humpfit.Rd0000644000176200001440000001615212626316320014076 0ustar liggesusers\name{humpfit} \alias{humpfit} \alias{summary.humpfit} \alias{lines.humpfit} \alias{plot.humpfit} \alias{points.humpfit} \alias{predict.humpfit} \alias{profile.humpfit} \title{No-interaction Model for Hump-backed Species Richness vs. Biomass } \description{ Function \code{humpfit} fits a no-interaction model for species richness vs. biomass data (Oksanen 1996). This is a null model that produces a hump-backed response as an artifact of plant size and density. } \usage{ humpfit(mass, spno, family = poisson, start) \method{summary}{humpfit}(object, ...) \method{predict}{humpfit}(object, newdata = NULL, ...) \method{plot}{humpfit}(x, xlab = "Biomass", ylab = "Species Richness", lwd = 2, l.col = "blue", p.col = 1, type = "b", ...) \method{points}{humpfit}(x, ...) \method{lines}{humpfit}(x, segments=101, ...) \method{profile}{humpfit}(fitted, parm = 1:3, alpha = 0.01, maxsteps = 20, del = zmax/5, ...) } \arguments{ \item{mass}{Biomass. } \item{spno}{Species richness.} \item{start}{Vector of starting values for all three parameters.} \item{family}{Family of error distribution. Any \code{\link{family}} can be used, but the link function is always Fisher's diversity model, and other \code{link} functions are silently ignored. } \item{x, object, fitted}{Result object of \code{humpfit}} \item{newdata}{Values of \code{mass} used in \code{predict}. The original data values are used if missing.} \item{xlab,ylab}{Axis labels in \code{plot}} \item{lwd}{Line width} \item{l.col, p.col}{Line and point colour in \code{plot}} \item{type}{Type of \code{plot}: \code{"p"} for observed points, \code{"l"} for fitted lines, \code{"b"} for both, and \code{"n"} for only setting axes.} \item{segments}{Number of segments used for fitted lines.} \item{parm}{Profiled parameters.} \item{alpha, maxsteps, del}{Parameters for profiling range and density.} \item{...}{Other parameters to functions.} } \details{ The no-interaction model assumes that the humped species richness pattern along biomass gradient is an artifact of plant size and density (Oksanen 1996). For low-biomass sites, it assumes that plants have a fixed size, and biomass increases with increasing number of plants. When the sites becomes crowded, the number of plants and species richness reaches the maximum. Higher biomass is reached by increasing the plant size, and then the number of plants and species richness will decrease. At biomasses below the hump, plant number and biomass are linearly related, and above the hump, plant number is proportional to inverse squared biomass. The number of plants is related to the number of species by the relationship (\code{link} function) from Fisher's log-series (Fisher et al. 1943). The parameters of the model are: \enumerate{ \item \code{hump}: the location of the hump on the biomass gradient. \item \code{scale}: an arbitrary multiplier to translate the biomass into virtual number of plants. \item \code{alpha}: Fisher's \eqn{\alpha}{alpha} to translate the virtual number of plants into number of species. } The parameters \code{scale} and \code{alpha} are intermingled and this function should not be used for estimating Fisher's \eqn{\alpha}{alpha}. Probably the only meaningful and interesting parameter is the location of the \code{hump}. Function may be very difficult to fit and easily gets trapped into local solutions, or fails with non-Poisson families, and function \code{profile} should be used to inspect the fitted models. If you have loaded \code{package} \pkg{MASS}, you can use functions \code{\link[MASS]{plot.profile}}, \code{\link[MASS]{pairs.profile}} for graphical inspection of the profiles, and \code{\link[MASS]{confint.profile.glm}} for the profile based confidence intervals. The original model intended to show that there is no need to speculate about `competition' and `stress' (Al-Mufti et al. 1977), but humped response can be produced as an artifact of using fixed plot size for varying plant sizes and densities. } \value{ The function returns an object of class \code{"humpfit"} inheriting from class \code{"glm"}. The result object has specific \code{summary}, \code{predict}, \code{plot}, \code{points} and \code{lines} methods. In addition, it can be accessed by the following methods for \code{\link{glm}} objects: \code{\link{AIC}}, \code{\link{extractAIC}}, \code{\link{deviance}}, \code{\link{coef}}, \code{\link{residuals.glm}} (except \code{type = "partial"}), \code{\link{fitted}}, and perhaps some others. In addition, function \code{\link[ellipse]{ellipse.glm}} (package \pkg{ellipse}) can be used to draw approximate confidence ellipses for pairs of parameters, if the normal assumptions look appropriate. } \references{ Al-Mufti, M.M., Sykes, C.L, Furness, S.B., Grime, J.P & Band, S.R. (1977) A quantitative analysis of shoot phenology and dominance in herbaceous vegetation. \emph{Journal of Ecology} 65,759--791. Fisher, R.A., Corbet, A.S. & Williams, C.B. (1943) The relation between the number of species and the number of individuals in a random sample of of an animal population. \emph{Journal of Animal Ecology} 12, 42--58. Oksanen, J. (1996) Is the humped relationship between species richness and biomass an artefact due to plot size? \emph{Journal of Ecology} 84, 293--295. } \author{ Jari Oksanen } \note{ The function is a replacement for the original \code{GLIM4} function at the archive of Journal of Ecology. There the function was represented as a mixed \code{\link{glm}} with one non-linear parameter (\code{hump}) and a special one-parameter link function from Fisher's log-series. The current function directly applies non-linear maximum likelihood fitting using function \code{\link{nlm}}. Some expected problems with the current approach are: \itemize{ \item The function is discontinuous at \code{hump} and may be difficult to optimize in some cases (the lines will always join, but the derivative jumps). \item The function does not try very hard to find sensible starting values and can fail. The user may supply starting values in argument \code{start} if fitting fails. \item The estimation is unconstrained, but both \code{scale} and \code{alpha} should always be positive. Perhaps they should be fitted as logarithmic. Fitting \code{\link{Gamma}} \code{\link{family}} models might become easier, too. } } \seealso{\code{\link{fisherfit}}, \code{\link[MASS]{profile.glm}}, \code{\link[MASS]{confint.glm}}. } \examples{ ## ## Data approximated from Al-Mufti et al. (1977) ## \donttest{ mass <- c(140,230,310,310,400,510,610,670,860,900,1050,1160,1900,2480) spno <- c(1, 4, 3, 9, 18, 30, 20, 14, 3, 2, 3, 2, 5, 2) sol <- humpfit(mass, spno) summary(sol) # Almost infinite alpha... plot(sol) # confint is in MASS, and impicitly calls profile.humpfit. # Parameter 3 (alpha) is too extreme for profile and confint, and we # must use only "hump" and "scale". library(MASS) plot(profile(sol, parm=1:2)) confint(sol, parm=c(1,2)) } } \keyword{models } \keyword{regression } \keyword{nonlinear} vegan/man/dispweight.Rd0000644000176200001440000001140012626316320014560 0ustar liggesusers\encoding{UTF-8} \name{dispweight} \alias{dispweight} \alias{gdispweight} \alias{summary.dispweight} \title{Dispersion-based weighting of species counts} \description{Transform abundance data downweighting species that are overdispersed to the Poisson error.} \usage{ dispweight(comm, groups, nsimul = 999, nullmodel = "c0_ind", plimit = 0.05) gdispweight(formula, data, plimit = 0.05) \method{summary}{dispweight}(object, ...) } \arguments{ \item{comm}{Community data matrix.} \item{groups}{Factor describing the group structure. If missing, all sites are regarded as belonging to one group. \code{NA} values are not allowed.} \item{nsimul}{Number of simulations.} \item{nullmodel}{The \code{\link{nullmodel}} used in \code{\link{commsim}} within \code{groups}. The default follows Clarke et al. (2006).} \item{plimit}{Downweight species if their \eqn{p}-value is at or below this limit.} \item{formula, data}{Formula where the left-hand side is the community data frame and right-hand side gives the explanatory variables. The explanatory variables are found in the data frame given in \code{data} or in the parent frame.} \item{object}{Result object from \code{dispweight} or \code{gdispweight}.} \item{\dots}{Other parameters passed to functions.} } \details{ The dispersion index (\eqn{D}) is calculated as ratio between variance and expected value for each species. If the species abundances follow Poisson distribution, expected dispersion is \eqn{E(D) = 1}, and if \eqn{D > 1}, the species is overdispersed. The inverse \eqn{1/D} can be used to downweight species abundances. Species are only downweighted when overdispersion is judged to be statistically significant (Clarke et al. 2006). Function \code{dispweight} implements the original procedure of Clarke et al. (2006). Only one factor can be used to group the sites and to find the species means. The significance of overdispersion is assessed freely distributing individuals of each species within factor levels. This is achieved by using \code{\link{nullmodel}} \code{"c0_ind"} (which accords to Clarke et al. 2006), but other nullmodels can be used, though they may not be meaningful (see \code{\link{commsim}} for alternatives). If a species is absent in some factor level, the whole level is ignored in calculation of overdispersion, and the number of degrees of freedom can vary among species. The reduced number of degrees of freedom is used as a divisor for overdispersion \eqn{D}, and such species have higher dispersion and hence lower weights in transformation. Function \code{gdispweight} is a generalized parametric version of \code{dispweight}. The function is based on \code{\link{glm}} with \code{\link{quasipoisson}} error \code{\link{family}}. Any \code{\link{glm}} model can be used, including several factors or continuous covariates. Function \code{gdispweight} uses the same test statistic as \code{dispweight} (Pearson Chi-square), but it does not ignore factor levels where species is absent, and the number of degrees of freedom is equal for all species. Therefore transformation weights can be higher than in \code{dispweight}. The \code{gdispweight} function evaluates the significance of overdispersion parametrically from Chi-square distribution (\code{\link{pchisq}}). Functions \code{dispweight} and \code{gdispweight} transform data, but they add information on overdispersion and weights as attributes of the result. The \code{summary} can be used to extract and print that information. } \value{ Function returns transformed data with the following new attributes: \item{D}{Dispersion statistic.} \item{df}{Degrees of freedom for each species.} \item{p}{\eqn{p}-value of the Dispersion statistic \eqn{D}.} \item{weights}{weights applied to community data.} \item{nsimul}{Number of simulations used to assess the \eqn{p}-value, or \code{NA} when simulations were not performed.} \item{nullmodel}{The name of \code{\link{commsim}} null model, or \code{NA} when simulations were not performed.} } \references{ Clarke, K. R., M. G. Chapman, P. J. Somerfield, and H. R. Needham. 2006. Dispersion-based weighting of species counts in assemblage analyses. \emph{Marine Ecology Progress Series}, 320, 11–27. } \author{ Eduard Szöcs \email{eduardszoesc@gmail.com} wrote the original \code{dispweight}, Jari Oksanen significantly modified the code, provided support functions and developed \code{gdispweight}. } \examples{ data(mite, mite.env) ## dispweight and its summary mite.dw <- with(mite.env, dispweight(mite, Shrub, nsimul = 99)) summary(mite.dw) ## generalized dispersion weighting mite.dw <- gdispweight(mite ~ Shrub + WatrCont, data = mite.env) rda(mite.dw ~ Shrub + WatrCont, data = mite.env) } \keyword{multivariate} \keyword{manip} vegan/man/nullmodel.Rd0000644000176200001440000002167113156750403014422 0ustar liggesusers\name{nullmodel} \alias{nullmodel} \alias{simmat} \alias{print.nullmodel} \alias{simulate.nullmodel} \alias{update.nullmodel} \alias{str.nullmodel} \alias{print.simmat} \alias{smbind} \title{ Null Model and Simulation } \description{ The \code{nullmodel} function creates an object, which can serve as a basis for Null Model simulation via the \code{\link{simulate}} method. The \code{\link{update}} method updates the nullmodel object without sampling (effective for sequential algorithms). \code{smbind} binds together multiple \code{simmat} objects. } \usage{ nullmodel(x, method) \method{print}{nullmodel}(x, ...) \method{simulate}{nullmodel}(object, nsim = 1, seed = NULL, burnin = 0, thin = 1, ...) \method{update}{nullmodel}(object, nsim = 1, seed = NULL, ...) \method{print}{simmat}(x, ...) smbind(object, ..., MARGIN, strict = TRUE) } \arguments{ \item{x}{ A community matrix. For the \code{print} method, it is an object to be printed. } \item{method}{ Character, specifying one of the null model algorithms listed on the help page of \code{\link{commsim}}. It can be a user supplied object of class \code{commsim}. } \item{object}{ An object of class \code{nullmodel} returned by the function \code{nullmodel}. In case of \code{smbind} it is a \code{simmat} object as returned by the \code{update} or \code{simulate} methods. } \item{nsim}{ Positive integer, the number of simulated matrices to return. For the \code{update} method, it is the number of burnin steps made for sequential algorithms to update the status of the input model \code{object}. } \item{seed}{ An object specifying if and how the random number generator should be initialized ("seeded"). Either \code{NULL} or an integer that will be used in a call to \code{\link{set.seed}} before simulating the matrices. If set, the value is saved as the \code{"seed"} attribute of the returned value. The default, \code{NULL} will not change the random generator state, and return \code{\link{.Random.seed}} as the \code{"seed"} attribute, see Value. } \item{burnin}{ Nonnegative integer, specifying the number of steps discarded before starting simulation. Active only for sequential null model algorithms. Ignored for non-sequential null model algorithms. } \item{thin}{ Positive integer, number of simulation steps made between each returned matrix. Active only for sequential null model algorithms. Ignored for non-sequential null model algorithms. } \item{MARGIN}{ Integer, indicating the dimension over which multiple \code{simmat} objects are to be bound together by \code{smbind}. 1: matrices are stacked (row bound), 2: matrices are column bound, 3: iterations are combined. Needs to be of length 1. The other dimensions are expected to match across the objects. } \item{strict}{ Logical, if consistency of the time series attributes (\code{"start"}, \code{"end"}, \code{"thin"}, and number of simulated matrices) of \code{simmat} objects are strictly enforced when binding multiple objects together using \code{smbind}. Applies only to input objects based on sequential null model algorithms. } \item{\dots}{ Additional arguments supplied to algorithms. In case of \code{smbind} it can contain multiple \code{simmat} objects. } } \details{ The purpose of the \code{nullmodel} function is to create an object, where all necessary statistics of the input matrix are calculated only once. This information is reused, but not recalculated in each step of the simulation process done by the \code{simulate} method. The \code{simulate} method carries out the simulation, the simulated matrices are stored in an array. For sequential algorithms, the method updates the state of the input \code{nullmodel} object. Therefore, it is possible to do diagnostic tests on the returned \code{simmat} object, and make further simulations, or use increased thinning value if desired. The \code{update} method makes burnin steps in case of sequential algorithms to update the status of the input model without any attempt to return matrices. For non-sequential algorithms the method does nothing. \code{update} is the preferred way of making burnin iterations without sampling. Alternatively, burnin can be done via the \code{simulate} method. For convergence diagnostics, it is recommended to use the \code{simulate} method without burnin. The input nullmodel object is updated, so further samples can be simulated if desired without having to start the process all over again. See Examples. The \code{smbind} function can be used to combine multiple \code{simmat} objects. This comes handy when null model simulations are stratified by sites (\code{MARGIN = 1}) or by species (\code{MARGIN = 2}), or in the case when multiple objects are returned by identical/consistent settings e.g. during parallel computations (\code{MARGIN = 3}). Sanity checks are made to ensure that combining multiple objects is sensible, but it is the user's responsibility to check independence of the simulated matrices and the null distribution has converged in case of sequential null model algorithms. The \code{strict = FALSE} setting can relax checks regarding start, end, and thinning values for sequential null models. } \value{ The function \code{nullmodel} returns an object of class \code{nullmodel}. It is a set of objects sharing the same environment: \itemize{ \item{\code{data}: }{original matrix in integer mode.} \item{\code{nrow}: }{number of rows.} \item{\code{ncol}: }{number of columns.} \item{\code{rowSums}: }{row sums.} \item{\code{colSums}: }{column sums.} \item{\code{rowFreq}: }{row frequencies (number of nonzero cells).} \item{\code{colFreq}: }{column frequencies (number of nonzero cells).} \item{\code{totalSum}: }{total sum.} \item{\code{fill}: }{number of nonzero cells in the matrix.} \item{\code{commsim}: }{the \code{commsim} object as a result of the \code{method} argument.} \item{\code{state}: }{current state of the permutations, a matrix similar to the original. It is \code{NULL} for non-sequential algorithms.} \item{\code{iter}: }{current number of iterations for sequential algorithms. It is \code{NULL} for non-sequential algorithms.} } The \code{simulate} method returns an object of class \code{simmat}. It is an array of simulated matrices (third dimension corresponding to \code{nsim} argument). The \code{update} method returns the current state (last updated matrix) invisibly, and update the input object for sequential algorithms. For non sequential algorithms, it returns \code{NULL}. The \code{smbind} function returns an object of class \code{simmat}. } \author{ Jari Oksanen and Peter Solymos } \seealso{ \code{\link{commsim}}, \code{\link{make.commsim}}, \code{\link{permatfull}}, \code{\link{permatswap}} } \note{ Care must be taken when the input matrix only contains a single row or column. Such input is invalid for swapping and hypergeometric distribution (calling \code{\link{r2dtable}}) based algorithms. This also applies to cases when the input is stratified into subsets. } \examples{ data(mite) x <- as.matrix(mite)[1:12, 21:30] ## non-sequential nullmodel (nm <- nullmodel(x, "r00")) (sm <- simulate(nm, nsim=10)) ## sequential nullmodel (nm <- nullmodel(x, "swap")) (sm1 <- simulate(nm, nsim=10, thin=5)) (sm2 <- simulate(nm, nsim=10, thin=5)) ## sequential nullmodel with burnin and extra updating (nm <- nullmodel(x, "swap")) (sm1 <- simulate(nm, burnin=10, nsim=10, thin=5)) (sm2 <- simulate(nm, nsim=10, thin=5)) ## sequential nullmodel with separate initial burnin (nm <- nullmodel(x, "swap")) nm <- update(nm, nsim=10) (sm2 <- simulate(nm, nsim=10, thin=5)) ## combining multiple simmat objects ## stratification nm1 <- nullmodel(x[1:6,], "r00") sm1 <- simulate(nm1, nsim=10) nm2 <- nullmodel(x[7:12,], "r00") sm2 <- simulate(nm2, nsim=10) smbind(sm1, sm2, MARGIN=1) ## binding subsequent samples from sequential algorithms ## start, end, thin retained nm <- nullmodel(x, "swap") nm <- update(nm, nsim=10) sm1 <- simulate(nm, nsim=10, thin=5) sm2 <- simulate(nm, nsim=20, thin=5) sm3 <- simulate(nm, nsim=10, thin=5) smbind(sm3, sm2, sm1, MARGIN=3) ## 'replicate' based usage which is similar to the output ## of 'parLapply' or 'mclapply' in the 'parallel' package ## start, end, thin are set, also noting number of chains smfun <- function(x, burnin, nsim, thin) { nm <- nullmodel(x, "swap") nm <- update(nm, nsim=burnin) simulate(nm, nsim=nsim, thin=thin) } smlist <- replicate(3, smfun(x, burnin=50, nsim=10, thin=5), simplify=FALSE) smbind(smlist, MARGIN=3) # Number of permuted matrices = 30 \dontrun{ ## parallel null model calculations library(parallel) if (.Platform$OS.type == "unix") { ## forking on Unix systems smlist <- mclapply(1:3, function(i) smfun(x, burnin=50, nsim=10, thin=5)) smbind(smlist, MARGIN=3) } ## socket type cluster, works on all platforms cl <- makeCluster(3) clusterEvalQ(cl, library(vegan)) clusterExport(cl, c("smfun", "x")) smlist <- parLapply(cl, 1:3, function(i) smfun(x, burnin=50, nsim=10, thin=5)) stopCluster(cl) smbind(smlist, MARGIN=3) } } \keyword{ multivariate } \keyword{ datagen } vegan/man/RsquareAdj.Rd0000644000176200001440000000617613156750403014473 0ustar liggesusers\name{RsquareAdj} \alias{RsquareAdj} \alias{RsquareAdj.default} \alias{RsquareAdj.rda} \alias{RsquareAdj.cca} \alias{RsquareAdj.lm} \alias{RsquareAdj.glm} \Rdversion{1.1} \title{ Adjusted R-square } \description{ The functions finds the adjusted R-square. } \usage{ \method{RsquareAdj}{default}(x, n, m, ...) \method{RsquareAdj}{rda}(x, ...) \method{RsquareAdj}{cca}(x, permutations = 1000, ...) } \arguments{ \item{x}{ Unadjusted R-squared or an object from which the terms for evaluation or adjusted R-squared can be found.} \item{n, m}{Number of observations and number of degrees of freedom in the fitted model.} \item{permutations}{Number of permutations to use when computing the adjusted R-squared for a cca. The permutations can be calculated in parallel by specifying the number of cores which is passed to \code{\link{permutest}}} \item{\dots}{ Other arguments (ignored) except in the case of cca in which these arguments are passed to \code{\link{permutest}}.} } \details{ The default method finds the adjusted R-squared from the unadjusted R-squared, number of observations, and number of degrees of freedom in the fitted model. The specific methods find this information from the fitted result object. There are specific methods for \code{\link{rda}}, \code{\link{cca}}, \code{\link{lm}} and \code{\link{glm}}. Adjusted, or even unadjusted, R-squared may not be available in some cases, and then the functions will return \code{NA}. There is no adjusted in partial \code{\link{rda}}, and R-squared values are available only for \code{\link{gaussian}} models in \code{\link{glm}}. The adjusted, \eqn{R^2}{R-squared} of \code{cca} is computed using a permutation approach developed by Peres-Neto et al. (2006). By default 1000 permutations are used. The raw \eqn{R^2}{R-squared} of partial \code{rda} gives the proportion explained after removing the variation due to conditioning (partial) terms; Legendre et al. (2011) call this semi-partial \eqn{R^2}{R-squared}. The adjusted \eqn{R^2}{R-squared} is found as the difference of adjusted \eqn{R^2}{R-squared} values of joint effect of partial and constraining terms and partial term alone, and it is the same as the adjusted \eqn{R^2}{R-squared} of component \code{[a] = X1|X2} in two-component variation partition in \code{\link{varpart}}. } \value{ The functions return a list of items \code{r.squared} and \code{adj.r.squared}. } \references{ Legendre, P., Oksanen, J. and ter Braak, C.J.F. (2011). Testing the significance of canonical axes in redundancy analysis. \emph{Methods in Ecology and Evolution} 2, 269--277. Peres-Neto, P., P. Legendre, S. Dray and D. Borcard. 2006. Variation partitioning of species data matrices: estimation and comparison of fractions. \emph{Ecology} 87, 2614--2625. } \seealso{ \code{\link{varpart}} uses \code{RsquareAdj}. } \examples{ data(mite) data(mite.env) ## rda m <- rda(decostand(mite, "hell") ~ ., mite.env) RsquareAdj(m) ## cca m <- cca(decostand(mite, "hell") ~ ., mite.env) RsquareAdj(m) ## default method RsquareAdj(0.8, 20, 5) } \keyword{ univar } \keyword{ multivariate } vegan/man/reorder.hclust.Rd0000644000176200001440000000653413231354436015373 0ustar liggesusers\name{reorder.hclust} \alias{reorder.hclust} \alias{rev.hclust} \alias{scores.hclust} \title{ Reorder a Hierarchical Clustering Tree } \description{ Function takes a hierarchical clustering tree from \code{\link{hclust}} and a vector of values and reorders the clustering tree in the order of the supplied vector, maintaining the constraints on the tree. This is a method of generic function \code{\link{reorder}} and an alternative to reordering a \code{"dendrogram"} object with \code{\link{reorder.dendrogram}} } \usage{ \method{reorder}{hclust}(x, wts, agglo.FUN = c("mean", "min", "max", "sum", "uwmean"), ...) \method{rev}{hclust}(x) \method{scores}{hclust}(x, display = "internal", ...) } \arguments{ \item{x}{ hierarchical clustering from \code{\link{hclust}}. } \item{wts}{ numeric vector for reordering. } \item{agglo.FUN}{ a function for weights agglomeration, see below. } \item{display}{ return \code{"internal"} nodes or \code{"terminal"} nodes (also called \code{"leaves"}). } \item{\dots}{ additional arguments (ignored). } } \details{ Dendrograms can be ordered in many ways. The \code{reorder} function reorders an \code{\link{hclust}} tree and provides an alternative to \code{\link{reorder.dendrogram}} which can reorder a \code{\link{dendrogram}}. The current function will also work differently when the \code{agglo.FUN} is \code{"mean"}: the \code{\link{reorder.dendrogram}} will always take the direct mean of member groups ignoring their sizes, but this function will used \code{\link{weighted.mean}} weighted by group sizes, so that the group mean is always the mean of member leaves (terminal nodes). If you want to ignore group sizes, you can use unweighted mean with \code{"uwmean"}. The function accepts only a limited list of \code{agglo.FUN} functions for assessing the value of \code{wts} for groups. The ordering is always ascending, but the order of leaves can be reversed with \code{rev}. Function \code{scores} finds the coordinates of nodes as a two-column matrix. For terminal nodes (leaves) this the value at which the item is merged to the tree, and the labels can still \code{hang} below this level (see \code{\link{plot.hclust}}). } \value{ Reordered \code{\link{hclust}} result object with added item \code{value} that gives the value of the statistic at each merge level. } \author{ Jari Oksanen } \note{ These functions should really be in base \R. } \seealso{ \code{\link{hclust}} for getting clustering trees, \code{\link{as.hclust.spantree}} to change a \pkg{vegan} minimum spanning tree to an \code{\link{hclust}} object, and \code{\link{dendrogram}} and \code{\link{reorder.dendrogram}} for an alternative implementation. } \examples{ ## reorder by water content of soil data(mite, mite.env) hc <- hclust(vegdist(wisconsin(sqrt(mite)))) ohc <- with(mite.env, reorder(hc, WatrCont)) plot(hc) plot(ohc) ## label leaves by the observed value, and each branching point ## (internal node) by the cluster mean with(mite.env, plot(ohc, labels=round(WatrCont), cex=0.7)) ordilabel(scores(ohc), label=round(ohc$value), cex=0.7) ## Slightly different from reordered 'dendrogram' which ignores group ## sizes in assessing means. den <- as.dendrogram(hc) den <- with(mite.env, reorder(den, WatrCont, agglo.FUN = mean)) plot(den) } \keyword{multivariate} vegan/man/adipart.Rd0000644000176200001440000002044413156750403014050 0ustar liggesusers\encoding{UTF-8} \name{adipart} \alias{adipart} \alias{adipart.default} \alias{adipart.formula} \alias{hiersimu} \alias{hiersimu.default} \alias{hiersimu.formula} \title{Additive Diversity Partitioning and Hierarchical Null Model Testing} \description{ In additive diversity partitioning, mean values of alpha diversity at lower levels of a sampling hierarchy are compared to the total diversity in the entire data set (gamma diversity). In hierarchical null model testing, a statistic returned by a function is evaluated according to a nested hierarchical sampling design (\code{hiersimu}). } \usage{ adipart(...) \method{adipart}{default}(y, x, index=c("richness", "shannon", "simpson"), weights=c("unif", "prop"), relative = FALSE, nsimul=99, method = "r2dtable", ...) \method{adipart}{formula}(formula, data, index=c("richness", "shannon", "simpson"), weights=c("unif", "prop"), relative = FALSE, nsimul=99, method = "r2dtable", ...) hiersimu(...) \method{hiersimu}{default}(y, x, FUN, location = c("mean", "median"), relative = FALSE, drop.highest = FALSE, nsimul=99, method = "r2dtable", ...) \method{hiersimu}{formula}(formula, data, FUN, location = c("mean", "median"), relative = FALSE, drop.highest = FALSE, nsimul=99, method = "r2dtable", ...) } \arguments{ \item{y}{A community matrix.} \item{x}{A matrix with same number of rows as in \code{y}, columns coding the levels of sampling hierarchy. The number of groups within the hierarchy must decrease from left to right. If \code{x} is missing, function performs an overall decomposition into alpha, beta and gamma diversities.} \item{formula}{A two sided model formula in the form \code{y ~ x}, where \code{y} is the community data matrix with samples as rows and species as column. Right hand side (\code{x}) must be grouping variables referring to levels of sampling hierarchy, terms from right to left will be treated as nested (first column is the lowest, last is the highest level, at least two levels specified). Interaction terms are not allowed.} \item{data}{A data frame where to look for variables defined in the right hand side of \code{formula}. If missing, variables are looked in the global environment.} \item{index}{Character, the diversity index to be calculated (see Details).} \item{weights}{Character, \code{"unif"} for uniform weights, \code{"prop"} for weighting proportional to sample abundances to use in weighted averaging of individual alpha values within strata of a given level of the sampling hierarchy.} \item{relative}{Logical, if \code{TRUE} then alpha and beta diversity values are given relative to the value of gamma for function \code{adipart}.} \item{nsimul}{Number of permutations to use. If \code{nsimul = 0}, only the \code{FUN} argument is evaluated. It is thus possible to reuse the statistic values without a null model.} \item{method}{Null model method: either a name (character string) of a method defined in \code{\link{make.commsim}} or a \code{\link{commsim}} function. The default \code{"r2dtable"} keeps row sums and column sums fixed. See \code{\link{oecosimu}} for Details and Examples.} \item{FUN}{A function to be used by \code{hiersimu}. This must be fully specified, because currently other arguments cannot be passed to this function via \code{\dots}.} \item{location}{Character, identifies which function (mean or median) is to be used to calculate location of the samples.} \item{drop.highest}{Logical, to drop the highest level or not. When \code{FUN} evaluates only arrays with at least 2 dimensions, highest level should be dropped, or not selected at all.} \item{\dots}{Other arguments passed to functions, e.g. base of logarithm for Shannon diversity, or \code{method}, \code{thin} or \code{burnin} arguments for \code{\link{oecosimu}}.} } \details{ Additive diversity partitioning means that mean alpha and beta diversities add up to gamma diversity, thus beta diversity is measured in the same dimensions as alpha and gamma (Lande 1996). This additive procedure is then extended across multiple scales in a hierarchical sampling design with \eqn{i = 1, 2, 3, \ldots, m} levels of sampling (Crist et al. 2003). Samples in lower hierarchical levels are nested within higher level units, thus from \eqn{i=1} to \eqn{i=m} grain size is increasing under constant survey extent. At each level \eqn{i}, \eqn{\alpha_i} denotes average diversity found within samples. At the highest sampling level, the diversity components are calculated as \deqn{\beta_m = \gamma - \alpha_m}{beta_m = gamma - alpha_m} For each lower sampling level as \deqn{\beta_i = \alpha_{i+1} - \alpha_i}{beta_i = alpha_(i+1) - alpha_i} Then, the additive partition of diversity is \deqn{\gamma = \alpha_1 + \sum_{i=1}^m \beta_i}{gamma = alpha_1 + sum(beta_i)} Average alpha components can be weighted uniformly (\code{weight="unif"}) to calculate it as simple average, or proportionally to sample abundances (\code{weight="prop"}) to calculate it as weighted average as follows \deqn{\alpha_i = \sum_{j=1}^{n_i} D_{ij} w_{ij}}{alpha_i = sum(D_ij*w_ij)} where \eqn{D_{ij}} is the diversity index and \eqn{w_{ij}} is the weight calculated for the \eqn{j}th sample at the \eqn{i}th sampling level. The implementation of additive diversity partitioning in \code{adipart} follows Crist et al. 2003. It is based on species richness (\eqn{S}, not \eqn{S-1}), Shannon's and Simpson's diversity indices stated as the \code{index} argument. The expected diversity components are calculated \code{nsimul} times by individual based randomisation of the community data matrix. This is done by the \code{"r2dtable"} method in \code{\link{oecosimu}} by default. \code{hiersimu} works almost in the same way as \code{adipart}, but without comparing the actual statistic values returned by \code{FUN} to the highest possible value (cf. gamma diversity). This is so, because in most of the cases, it is difficult to ensure additive properties of the mean statistic values along the hierarchy. } \value{ An object of class \code{"adipart"} or \code{"hiersimu"} with same structure as \code{\link{oecosimu}} objects. } \references{ Crist, T.O., Veech, J.A., Gering, J.C. and Summerville, K.S. (2003). Partitioning species diversity across landscapes and regions: a hierarchical analysis of \eqn{\alpha}, \eqn{\beta}, and \eqn{\gamma}-diversity. \emph{Am. Nat.}, \bold{162}, 734--743. Lande, R. (1996). Statistics and partitioning of species diversity, and similarity among multiple communities. \emph{Oikos}, \bold{76}, 5--13. } \author{ \enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}} \seealso{See \code{\link{oecosimu}} for permutation settings and calculating \eqn{p}-values. \code{\link{multipart}} for multiplicative diversity partitioning.} \examples{ ## NOTE: 'nsimul' argument usually needs to be >= 99 ## here much lower value is used for demonstration data(mite) data(mite.xy) data(mite.env) ## Function to get equal area partitions of the mite data cutter <- function (x, cut = seq(0, 10, by = 2.5)) { out <- rep(1, length(x)) for (i in 2:(length(cut) - 1)) out[which(x > cut[i] & x <= cut[(i + 1)])] <- i return(out)} ## The hierarchy of sample aggregation levsm <- with(mite.xy, data.frame( l1=1:nrow(mite), l2=cutter(y, cut = seq(0, 10, by = 2.5)), l3=cutter(y, cut = seq(0, 10, by = 5)), l4=cutter(y, cut = seq(0, 10, by = 10)))) ## Let's see in a map par(mfrow=c(1,3)) plot(mite.xy, main="l1", col=as.numeric(levsm$l1)+1, asp = 1) plot(mite.xy, main="l2", col=as.numeric(levsm$l2)+1, asp = 1) plot(mite.xy, main="l3", col=as.numeric(levsm$l3)+1, asp = 1) par(mfrow=c(1,1)) ## Additive diversity partitioning adipart(mite, index="richness", nsimul=19) adipart(mite ~ ., levsm, index="richness", nsimul=19) ## Hierarchical null model testing ## diversity analysis (similar to adipart) hiersimu(mite, FUN=diversity, relative=TRUE, nsimul=19) hiersimu(mite ~., levsm, FUN=diversity, relative=TRUE, nsimul=19) ## Hierarchical testing with the Morisita index morfun <- function(x) dispindmorisita(x)$imst hiersimu(mite ~., levsm, morfun, drop.highest=TRUE, nsimul=19) } \keyword{multivariate} vegan/man/raupcrick.Rd0000644000176200001440000001135213231354436014405 0ustar liggesusers\name{raupcrick} \alias{raupcrick} \title{ Raup-Crick Dissimilarity with Unequal Sampling Densities of Species } \description{ Function finds the Raup-Crick dissimilarity which is a probability of number of co-occurring species with species occurrence probabilities proportional to species frequencies. } \usage{ raupcrick(comm, null = "r1", nsimul = 999, chase = FALSE, ...) } \arguments{ \item{comm}{Community data which will be treated as presence/absence data.} \item{null}{Null model used as the \code{method} in \code{\link{oecosimu}}.} \item{nsimul}{Number of null communities for assessing the dissimilarity index.} \item{chase}{Use the Chase et al. (2011) method of tie handling (not recommended except for comparing the results against the Chase script).} \item{\dots}{Other parameters passed to \code{\link{oecosimu}}.} } \details{Raup-Crick index is the probability that compared sampling units have non-identical species composition. This probability can be regarded as a dissimilarity, although it is not metric: identical sampling units can have dissimilarity slightly above \eqn{0}, the dissimilarity can be nearly zero over a range of shared species, and sampling units with no shared species can have dissimilarity slightly below \eqn{1}. Moreover, communities sharing rare species appear as more similar (lower probability of finding rare species together), than communities sharing the same number of common species. The function will always treat the data as binary (presence/ absence). The probability is assessed using simulation with \code{\link{oecosimu}} where the test statistic is the observed number of shared species between sampling units evaluated against a community null model (see Examples). The default null model is \code{"r1"} where the probability of selecting species is proportional to the species frequencies. The \code{\link{vegdist}} function implements a variant of the Raup-Crick index with equal sampling probabilities for species using exact analytic equations without simulation. This corresponds to \code{null} model \code{"r0"} which also can be used with the current function. All other null model methods of \code{\link{oecosimu}} can be used with the current function, but they are new unpublished methods. } \value{The function returns an object inheriting from \code{\link{dist}} which can be interpreted as a dissimilarity matrix.} \references{ Chase, J.M., Kraft, N.J.B., Smith, K.G., Vellend, M. and Inouye, B.D. (2011). Using null models to disentangle variation in community dissimilarity from variation in \eqn{\alpha}{alpha}-diversity. \emph{Ecosphere} 2:art24 [doi:10.1890/ES10-00117.1] } \author{The function was developed after Brian Inouye contacted us and informed us about the method in Chase et al. (2011), and the function takes its idea from the code that was published with their paper. The current function was written by Jari Oksanen. } \note{ The test statistic is the number of shared species, and this is typically tied with a large number of simulation results. The tied values are handled differently in the current function and in the function published with Chase et al. (2011). In \pkg{vegan}, the index is the number of simulated values that are smaller \emph{or equal} than the observed value, but smaller than observed value is used by Chase et al. (2011) with option \code{split = FALSE} in their script; this can be achieved with \code{chase = TRUE} in \pkg{vegan}. Chase et al. (2011) script with \code{split = TRUE} uses half of tied simulation values to calculate a distance measure, and that choice cannot be directly reproduced in vegan (it is the average of \pkg{vegan} \code{raupcrick} results with \code{chase = TRUE} and \code{chase = FALSE}).} \seealso{The function is based on \code{\link{oecosimu}}. Function \code{\link{vegdist}} with {method = "raup"} implements a related index but with equal sampling densities of species, and \code{\link{designdist}} demonstrates its calculation.} \examples{ ## data set with variable species richness data(sipoo) ## default raupcrick dr1 <- raupcrick(sipoo) ## use null model "r0" of oecosimu dr0 <- raupcrick(sipoo, null = "r0") ## vegdist(..., method = "raup") corresponds to 'null = "r0"' d <- vegdist(sipoo, "raup") op <- par(mfrow=c(2,1), mar=c(4,4,1,1)+.1) plot(dr1 ~ d, xlab = "Raup-Crick with Null R1", ylab="vegdist") plot(dr0 ~ d, xlab = "Raup-Crick with Null R0", ylab="vegdist") par(op) ## The calculation is essentially as in the following oecosimu() call, ## except that designdist() is replaced with faster code \dontrun{% oecosimu(sipoo, function(x) designdist(x, "J", "binary"), method = "r1") } } \keyword{ multivariate } vegan/man/decorana.Rd0000644000176200001440000002275412730061270014200 0ustar liggesusers\name{decorana} \alias{decorana} \alias{summary.decorana} \alias{print.summary.decorana} \alias{plot.decorana} \alias{downweight} \alias{scores.decorana} \alias{points.decorana} \alias{text.decorana} \title{Detrended Correspondence Analysis and Basic Reciprocal Averaging } \description{ Performs detrended correspondence analysis and basic reciprocal averaging or orthogonal correspondence analysis. } \usage{ decorana(veg, iweigh=0, iresc=4, ira=0, mk=26, short=0, before=NULL, after=NULL) \method{plot}{decorana}(x, choices=c(1,2), origin=TRUE, display=c("both","sites","species","none"), cex = 0.8, cols = c(1,2), type, xlim, ylim, ...) \method{text}{decorana}(x, display = c("sites", "species"), labels, choices = 1:2, origin = TRUE, select, ...) \method{points}{decorana}(x, display = c("sites", "species"), choices=1:2, origin = TRUE, select, ...) \method{summary}{decorana}(object, digits=3, origin=TRUE, display=c("both", "species","sites","none"), ...) \method{print}{summary.decorana}(x, head = NA, tail = head, ...) downweight(veg, fraction = 5) \method{scores}{decorana}(x, display=c("sites","species"), choices=1:4, origin=TRUE, ...) } \arguments{ \item{veg}{Community data, a matrix-like object. } \item{iweigh}{Downweighting of rare species (0: no). } \item{iresc}{Number of rescaling cycles (0: no rescaling). } \item{ira}{Type of analysis (0: detrended, 1: basic reciprocal averaging). } \item{mk}{Number of segments in rescaling. } \item{short}{Shortest gradient to be rescaled. } \item{before}{Hill's piecewise transformation: values before transformation. } \item{after}{Hill's piecewise transformation: values after transformation -- these must correspond to values in \code{before}.} \item{x, object}{A \code{decorana} result object.} \item{choices}{Axes shown.} \item{origin}{Use true origin even in detrended correspondence analysis.} \item{display}{Display only sites, only species, both or neither.} \item{cex}{Plot character size.} \item{cols}{Colours used for sites and species.} \item{type}{Type of plots, partial match to \code{"text"}, \code{"points"} or \code{"none"}.} \item{labels}{Optional text to be used instead of row names.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items.} \item{xlim, ylim}{the x and y limits (min,max) of the plot.} \item{digits}{Number of digits in summary output.} \item{head, tail}{Number of rows printed from the head and tail of species and site scores. Default \code{NA} prints all.} \item{fraction}{Abundance fraction where downweighting begins.} \item{...}{Other arguments for \code{plot} function.} } \details{ In late 1970s, correspondence analysis became the method of choice for ordination in vegetation science, since it seemed better able to cope with non-linear species responses than principal components analysis. However, even correspondence analysis can produce an arc-shaped configuration of a single gradient. Mark Hill developed detrended correspondence analysis to correct two assumed `faults' in correspondence analysis: curvature of straight gradients and packing of sites at the ends of the gradient. The curvature is removed by replacing the orthogonalization of axes with detrending. In orthogonalization successive axes are made non-correlated, but detrending should remove all systematic dependence between axes. Detrending is performed using a five-segment smoothing window with weights (1,2,3,2,1) on \code{mk} segments --- which indeed is more robust than the suggested alternative of detrending by polynomials. The packing of sites at the ends of the gradient is undone by rescaling the axes after extraction. After rescaling, the axis is supposed to be scaled by `SD' units, so that the average width of Gaussian species responses is supposed to be one over whole axis. Other innovations were the piecewise linear transformation of species abundances and downweighting of rare species which were regarded to have an unduly high influence on ordination axes. It seems that detrending actually works by twisting the ordination space, so that the results look non-curved in two-dimensional projections (`lolly paper effect'). As a result, the points usually have an easily recognized triangular or diamond shaped pattern, obviously an artefact of detrending. Rescaling works differently than commonly presented, too. \code{decorana} does not use, or even evaluate, the widths of species responses. Instead, it tries to equalize the weighted variance of species scores on axis segments (parameter \code{mk} has only a small effect, since \code{decorana} finds the segment number from the current estimate of axis length). This equalizes response widths only for the idealized species packing model, where all species initially have unit width responses and equally spaced modes. The \code{summary} method prints the ordination scores, possible prior weights used in downweighting, and the marginal totals after applying these weights. The \code{plot} method plots species and site scores. Classical \code{decorana} scaled the axes so that smallest site score was 0 (and smallest species score was negative), but \code{summary}, \code{plot} and \code{scores} use the true origin, unless \code{origin = FALSE}. In addition to proper eigenvalues, the function also reports `decorana values' in detrended analysis. These `decorana values' are the values that the legacy code of \code{decorana} returns as `eigenvalues'. They are estimated internally during iteration, and it seems that detrending interferes the estimation so that these values are generally too low and have unclear interpretation. Moreover, `decorana values' are estimated before rescaling which will change the eigenvalues. The proper eigenvalues are estimated after extraction of the axes and they are the ratio of biased weighted variances of site and species scores even in detrended and rescaled solutions. The `decorana values' are provided only for the compatibility with legacy software, and they should not be used. } \value{ \code{decorana} returns an object of class \code{"decorana"}, which has \code{print}, \code{summary} and \code{plot} methods. } \references{ Hill, M.O. and Gauch, H.G. (1980). Detrended correspondence analysis: an improved ordination technique. \emph{Vegetatio} \strong{42}, 47--58. Oksanen, J. and Minchin, P.R. (1997). Instability of ordination results under changes in input data order: explanations and remedies. \emph{Journal of Vegetation Science} \strong{8}, 447--454. } \author{Mark O. Hill wrote the original Fortran code, the \R port was by Jari Oksanen. } \note{ \code{decorana} uses the central numerical engine of the original Fortran code (which is in the public domain), or about 1/3 of the original program. I have tried to implement the original behaviour, although a great part of preparatory steps were written in \R language, and may differ somewhat from the original code. However, well-known bugs are corrected and strict criteria used (Oksanen & Minchin 1997). Please note that there really is no need for piecewise transformation or even downweighting within \code{decorana}, since there are more powerful and extensive alternatives in \R, but these options are included for compliance with the original software. If a different fraction of abundance is needed in downweighting, function \code{downweight} must be applied before \code{decorana}. Function \code{downweight} indeed can be applied prior to correspondence analysis, and so it can be used together with \code{\link{cca}}, too. The function finds only four axes: this is not easily changed. } \seealso{ For unconstrained ordination, non-metric multidimensional scaling in \code{\link{monoMDS}} may be more robust (see also \code{\link{metaMDS}}). Constrained (or \sQuote{canonical}) correspondence analysis can be made with \code{\link{cca}}. Orthogonal correspondence analysis can be made with \code{\link[MASS]{corresp}}, or with \code{decorana} or \code{\link{cca}}, but the scaling of results vary (and the one in \code{decorana} corresponds to \code{scaling = "sites"} and \code{hill = TRUE} in \code{\link{cca}}.). See \code{\link{predict.decorana}} for adding new points to an ordination. } \examples{ data(varespec) vare.dca <- decorana(varespec) vare.dca summary(vare.dca) plot(vare.dca) ### the detrending rationale: gaussresp <- function(x,u) exp(-(x-u)^2/2) x <- seq(0,6,length=15) ## The gradient u <- seq(-2,8,len=23) ## The optima pack <- outer(x,u,gaussresp) matplot(x, pack, type="l", main="Species packing") opar <- par(mfrow=c(2,2)) plot(scores(prcomp(pack)), asp=1, type="b", main="PCA") plot(scores(decorana(pack, ira=1)), asp=1, type="b", main="CA") plot(scores(decorana(pack)), asp=1, type="b", main="DCA") plot(scores(cca(pack ~ x), dis="sites"), asp=1, type="b", main="CCA") ### Let's add some noise: noisy <- (0.5 + runif(length(pack)))*pack par(mfrow=c(2,1)) matplot(x, pack, type="l", main="Ideal model") matplot(x, noisy, type="l", main="Noisy model") par(mfrow=c(2,2)) plot(scores(prcomp(noisy)), type="b", main="PCA", asp=1) plot(scores(decorana(noisy, ira=1)), type="b", main="CA", asp=1) plot(scores(decorana(noisy)), type="b", main="DCA", asp=1) plot(scores(cca(noisy ~ x), dis="sites"), asp=1, type="b", main="CCA") par(opar) } \keyword{ multivariate } vegan/man/scores.Rd0000644000176200001440000000650212626316320013716 0ustar liggesusers\name{scores} \alias{scores} \alias{scores.default} \alias{scores.lda} \title{ Get Species or Site Scores from an Ordination } \description{ Function to access either species or site scores for specified axes in some ordination methods. The \code{scores} function is generic in \pkg{vegan}, and \pkg{vegan} ordination functions have their own \code{scores} functions that are documented separately with the method (see e.g. \code{\link{scores.cca}}, \code{\link{scores.metaMDS}}, \code{\link{scores.decorana}}). This help file documents the default \code{scores} method that is only used for non-\pkg{vegan} ordination objects. } \usage{ \method{scores}{default}(x, choices, display=c("sites", "species"), ...) } \arguments{ \item{x}{ An ordination result. } \item{choices}{ Ordination axes. If missing, default method returns all axes.} \item{display}{ Partial match to access scores for \code{sites} or \code{species}.} \item{...}{ Other parameters (unused). } } \details{ Function \code{scores} is a generic method in \pkg{vegan}. Several \pkg{vegan} functions have their own \code{scores} methods with their own defaults and with some new arguments. This help page describes only the default method. For other methods, see, e.g., \code{\link{scores.cca}}, \code{\link{scores.rda}}, \code{\link{scores.decorana}}. All \pkg{vegan} ordination functions should have a \code{scores} method which should be used to extract the scores instead of directly accessing them. Scaling and transformation of scores should also happen in the \code{scores} function. If the \code{scores} function is available, the results can be plotted using \code{\link{ordiplot}}, \code{\link{ordixyplot}} etc., and the ordination results can be compared in \code{\link{procrustes}} analysis. The \code{scores.default} function is used to extract scores from non-\pkg{vegan} ordination results. Many standard ordination methods of libraries do not have a specific \code{class}, and no specific method can be written for them. However, \code{scores.default} guesses where some commonly used functions keep their site scores and possible species scores. If \code{x} is a matrix, \code{scores.default} returns the chosen columns of that matrix, ignoring whether species or sites were requested (do not regard this as a bug but as a feature, please). Currently the function seems to work at least for \code{\link[MASS]{isoMDS}}, \code{\link{prcomp}}, \code{\link{princomp}} and some \pkg{ade4} objects. It may work in other cases or fail mysteriously. } \value{ The function returns a matrix of scores. } \author{Jari Oksanen } \seealso{ Specific \code{scores} functions include (but are not limited to) \code{\link{scores.cca}}, \code{\link{scores.rda}}, \code{\link{scores.decorana}}, \code{\link{scores.envfit}}, \code{\link{scores.metaMDS}}, \code{\link{scores.monoMDS}} and \code{\link{scores.pcnm}}. These have somewhat different interface -- \code{\link{scores.cca}} in particular -- but all work with keywords \code{display="sites"} and return a matrix. However, they may also return a list of matrices, and some other \code{scores} methods will have quite different arguments. } \examples{ data(varespec) vare.pca <- prcomp(varespec) scores(vare.pca, choices=c(1,2)) } \keyword{ multivariate } vegan/man/bioenv.Rd0000644000176200001440000001507512626316320013707 0ustar liggesusers\name{bioenv} \alias{bioenv} \alias{bioenv.default} \alias{bioenv.formula} \alias{summary.bioenv} \alias{bioenvdist} \title{Best Subset of Environmental Variables with Maximum (Rank) Correlation with Community Dissimilarities } \description{ Function finds the best subset of environmental variables, so that the Euclidean distances of scaled environmental variables have the maximum (rank) correlation with community dissimilarities. } \usage{ \method{bioenv}{default}(comm, env, method = "spearman", index = "bray", upto = ncol(env), trace = FALSE, partial = NULL, metric = c("euclidean", "mahalanobis", "manhattan", "gower"), parallel = getOption("mc.cores"), ...) \method{bioenv}{formula}(formula, data, ...) bioenvdist(x, which = "best") } \arguments{ \item{comm}{Community data frame or a dissimilarity object or a square matrix that can be interpreted as dissimilarities. } \item{env}{Data frame of continuous environmental variables. } \item{method}{The correlation method used in \code{\link{cor}}.} \item{index}{The dissimilarity index used for community data (\code{comm}) in \code{\link{vegdist}}. This is ignored if \code{comm} are dissimilarities.} \item{upto}{Maximum number of parameters in studied subsets.} \item{formula, data}{Model \code{\link{formula}} and data.} \item{trace}{Trace the calculations } \item{partial}{Dissimilarities partialled out when inspecting variables in \code{env}.} \item{metric}{Metric used for distances of environmental distances. See Details.} \item{parallel}{Number of parallel processes or a predefined socket cluster. With \code{parallel = 1} uses ordinary, non-parallel processing. The parallel processing is done with \pkg{parallel} package.} \item{x}{\code{bioenv} result object.} \item{which}{The number of the model for which the environmental distances are evaluated, or the \code{"best"} model.} \item{...}{Other arguments passed to \code{\link{cor}}.} } \details{ The function calculates a community dissimilarity matrix using \code{\link{vegdist}}. Then it selects all possible subsets of environmental variables, \code{\link{scale}}s the variables, and calculates Euclidean distances for this subset using \code{\link{dist}}. The function finds the correlation between community dissimilarities and environmental distances, and for each size of subsets, saves the best result. There are \eqn{2^p-1} subsets of \eqn{p} variables, and an exhaustive search may take a very, very, very long time (parameter \code{upto} offers a partial relief). The argument \code{metric} defines distances in the given set of environmental variables. With \code{metric = "euclidean"}, the variables are scaled to unit variance and Euclidean distances are calculated. With \code{metric = "mahalanobis"}, the Mahalanobis distances are calculated: in addition to scaling to unit variance, the matrix of the current set of environmental variables is also made orthogonal (uncorrelated). With \code{metric = "manhanttan"}, the variables are scaled to unit range and Manhattan distances are calculated, so that the distances are sums of differences of environmental variables. With \code{metric = "gower"}, the Gower distances are calculated using function \code{\link[cluster]{daisy}}. This allows also using factor variables, but with continuous variables the results are equal to \code{metric = "manhattan"}. The function can be called with a model \code{\link{formula}} where the LHS is the data matrix and RHS lists the environmental variables. The formula interface is practical in selecting or transforming environmental variables. With argument \code{partial} you can perform \dQuote{partial} analysis. The partializing item must be a dissimilarity object of class \code{\link{dist}}. The \code{partial} item can be used with any correlation \code{method}, but it is strictly correct only for Pearson. Function \code{bioenvdist} recalculates the environmental distances used within the function. The default is to calculate distances for the best model, but the number of any model can be given. Clarke & Ainsworth (1993) suggested this method to be used for selecting the best subset of environmental variables in interpreting results of nonmetric multidimensional scaling (NMDS). They recommended a parallel display of NMDS of community dissimilarities and NMDS of Euclidean distances from the best subset of scaled environmental variables. They warned against the use of Procrustes analysis, but to me this looks like a good way of comparing these two ordinations. Clarke & Ainsworth wrote a computer program BIO-ENV giving the name to the current function. Presumably BIO-ENV was later incorporated in Clarke's PRIMER software (available for Windows). In addition, Clarke & Ainsworth suggested a novel method of rank correlation which is not available in the current function. } \value{ The function returns an object of class \code{bioenv} with a \code{summary} method. } \references{ Clarke, K. R & Ainsworth, M. 1993. A method of linking multivariate community structure to environmental variables. \emph{Marine Ecology Progress Series}, 92, 205--219. } \author{ Jari Oksanen } \note{ If you want to study the \sQuote{significance} of \code{bioenv} results, you can use function \code{\link{mantel}} or \code{\link{mantel.partial}} which use the same definition of correlation. However, \code{bioenv} standardizes environmental variables depending on the used metric, and you must do the same in \code{\link{mantel}} for comparable results (the standardized data are returned as item \code{x} in the result object). It is safest to use \code{bioenvdist} to extract the environmental distances that really were used within \code{bioenv}. NB., \code{bioenv} selects variables to maximize the Mantel correlation, and significance tests based on \emph{a priori} selection of variables are biased. } \seealso{\code{\link{vegdist}}, \code{\link{dist}}, \code{\link{cor}} for underlying routines, \code{\link{monoMDS}} and \code{\link{metaMDS}} for ordination, \code{\link{procrustes}} for Procrustes analysis, \code{\link{protest}} for an alternative, and \code{\link{rankindex}} for studying alternatives to the default Bray-Curtis index.} \examples{ # The method is very slow for large number of possible subsets. # Therefore only 6 variables in this example. data(varespec) data(varechem) sol <- bioenv(wisconsin(varespec) ~ log(N) + P + K + Ca + pH + Al, varechem) sol summary(sol) } \keyword{ multivariate } vegan/man/envfit.Rd0000644000176200001440000002733513214710724013722 0ustar liggesusers\name{envfit} \alias{envfit} \alias{envfit.default} \alias{envfit.formula} \alias{vectorfit} \alias{factorfit} \alias{plot.envfit} \alias{scores.envfit} \alias{labels.envfit} \title{Fits an Environmental Vector or Factor onto an Ordination } \description{ The function fits environmental vectors or factors onto an ordination. The projections of points onto vectors have maximum correlation with corresponding environmental variables, and the factors show the averages of factor levels. } \usage{ \method{envfit}{default}(ord, env, permutations = 999, strata = NULL, choices=c(1,2), display = "sites", w = weights(ord, display), na.rm = FALSE, ...) \method{envfit}{formula}(formula, data, ...) \method{plot}{envfit}(x, choices = c(1,2), labels, arrow.mul, at = c(0,0), axis = FALSE, p.max = NULL, col = "blue", bg, add = TRUE, ...) \method{scores}{envfit}(x, display, choices, ...) vectorfit(X, P, permutations = 0, strata = NULL, w, ...) factorfit(X, P, permutations = 0, strata = NULL, w, ...) } \arguments{ \item{ord}{An ordination object or other structure from which the ordination \code{\link{scores}} can be extracted (including a data frame or matrix of scores).} \item{env}{Data frame, matrix or vector of environmental variables. The variables can be of mixed type (factors, continuous variables) in data frames.} \item{X}{Matrix or data frame of ordination scores.} \item{P}{Data frame, matrix or vector of environmental variable(s). These must be continuous for \code{vectorfit} and factors or characters for \code{factorfit}. } \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices. Set \code{permutations = 0} to skip permutations.} \item{formula, data}{Model \code{\link{formula}} and data. } \item{na.rm}{Remove points with missing values in ordination scores or environmental variables. The operation is casewise: the whole row of data is removed if there is a missing value and \code{na.rm = TRUE}.} \item{x}{A result object from \code{envfit}. For \code{ordiArrowMul} and \code{ordiArrowTextXY} this must be a two-column matrix (or matrix-like object) containing the coordinates of arrow heads on the two plot axes, and other methods extract such a structure from the \code{envfit} results.} \item{choices}{Axes to plotted.} \item{labels}{Change plotting labels. The argument should be a list with elements \code{vectors} and \code{factors} which give the new plotting labels. If either of these elements is omitted, the default labels will be used. If there is only one type of elements (only \code{vectors} or only \code{factors}), the labels can be given as vector. The default labels can be displayed with \code{labels} command.} \item{arrow.mul}{Multiplier for vector lengths. The arrows are automatically scaled similarly as in \code{\link{plot.cca}} if this is not given and \code{add = TRUE}.} \item{at}{The origin of fitted arrows in the plot. If you plot arrows in other places then origin, you probably have to specify \code{arrrow.mul}.} \item{axis}{Plot axis showing the scaling of fitted arrows.} \item{p.max}{Maximum estimated \eqn{P} value for displayed variables. You must calculate \eqn{P} values with setting \code{permutations} to use this option. } \item{col}{Colour in plotting.} \item{bg}{Background colour for labels. If \code{bg} is set, the labels are displayed with \code{\link{ordilabel}} instead of \code{text}. See Examples for using semitransparent background.} \item{add}{Results added to an existing ordination plot.} \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} \item{display}{In fitting functions these are ordinary site scores or linear combination scores (\code{"lc"}) in constrained ordination (\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}). In \code{scores} function they are either \code{"vectors"} or \code{"factors"} (with synonyms \code{"bp"} or \code{"cn"}, resp.).} \item{w}{Weights used in fitting (concerns mainly \code{\link{cca}} and \code{\link{decorana}} results which have nonconstant weights).} \item{...}{Parameters passed to \code{\link{scores}}.} } \details{ Function \code{envfit} finds vectors or factor averages of environmental variables. Function \code{plot.envfit} adds these in an ordination diagram. If \code{X} is a \code{\link{data.frame}}, \code{envfit} uses \code{factorfit} for \code{\link{factor}} variables and \code{vectorfit} for other variables. If \code{X} is a matrix or a vector, \code{envfit} uses only \code{vectorfit}. Alternatively, the model can be defined a simplified model \code{\link{formula}}, where the left hand side must be an ordination result object or a matrix of ordination scores, and right hand side lists the environmental variables. The formula interface can be used for easier selection and/or transformation of environmental variables. Only the main effects will be analysed even if interaction terms were defined in the formula. The ordination results are extracted with \code{\link{scores}} and all extra arguments are passed to the \code{scores}. The fitted models only apply to the results defined when extracting the scores when using \code{envfit}. For instance, \code{scaling} in constrained ordination (see \code{\link{scores.rda}}, \code{\link{scores.cca}}) must be set in the same way in \code{envfit} and in the \code{plot} or the ordination results (see Examples). The printed output of continuous variables (vectors) gives the direction cosines which are the coordinates of the heads of unit length vectors. In \code{plot} these are scaled by their correlation (square root of the column \code{r2}) so that \dQuote{weak} predictors have shorter arrows than \dQuote{strong} predictors. You can see the scaled relative lengths using command \code{scores}. The \code{plot}ted (and scaled) arrows are further adjusted to the current graph using a constant multiplier: this will keep the relative \code{r2}-scaled lengths of the arrows but tries to fill the current plot. You can see the multiplier using \code{ordiArrowMul(result_of_envfit)}, and set it with the argument \code{arrow.mul}. Functions \code{vectorfit} and \code{factorfit} can be called directly. Function \code{vectorfit} finds directions in the ordination space towards which the environmental vectors change most rapidly and to which they have maximal correlations with the ordination configuration. Function \code{factorfit} finds averages of ordination scores for factor levels. Function \code{factorfit} treats ordered and unordered factors similarly. If \code{permutations} \eqn{> 0}, the `significance' of fitted vectors or factors is assessed using permutation of environmental variables. The goodness of fit statistic is squared correlation coefficient (\eqn{r^2}). For factors this is defined as \eqn{r^2 = 1 - ss_w/ss_t}, where \eqn{ss_w} and \eqn{ss_t} are within-group and total sums of squares. See \code{\link{permutations}} for additional details on permutation tests in Vegan. User can supply a vector of prior weights \code{w}. If the ordination object has weights, these will be used. In practise this means that the row totals are used as weights with \code{\link{cca}} or \code{\link{decorana}} results. If you do not like this, but want to give equal weights to all sites, you should set \code{w = NULL}. The fitted vectors are similar to biplot arrows in constrained ordination only when fitted to LC scores (\code{display = "lc"}) and you set \code{scaling = "species"} (see \code{\link{scores.cca}}). The weighted fitting gives similar results to biplot arrows and class centroids in \code{\link{cca}}. The lengths of arrows for fitted vectors are automatically adjusted for the physical size of the plot, and the arrow lengths cannot be compared across plots. For similar scaling of arrows, you must explicitly set the \code{arrow.mul} argument in the \code{plot} command; see \code{\link{ordiArrowMul}} and \code{\link{ordiArrowTextXY}}. The results can be accessed with \code{scores.envfit} function which returns either the fitted vectors scaled by correlation coefficient or the centroids of the fitted environmental variables. } \value{ Functions \code{vectorfit} and \code{factorfit} return lists of classes \code{vectorfit} and \code{factorfit} which have a \code{print} method. The result object have the following items: \item{arrows}{Arrow endpoints from \code{vectorfit}. The arrows are scaled to unit length.} \item{centroids}{Class centroids from \code{factorfit}.} \item{r}{Goodness of fit statistic: Squared correlation coefficient} \item{permutations}{Number of permutations.} \item{control}{A list of control values for the permutations as returned by the function \code{\link[permute]{how}}.} \item{pvals}{Empirical P-values for each variable.} Function \code{envfit} returns a list of class \code{envfit} with results of \code{vectorfit} and \code{envfit} as items. Function \code{plot.envfit} scales the vectors by correlation. } \author{Jari Oksanen. The permutation test derives from the code suggested by Michael Scroggie. } \note{ Fitted vectors have become the method of choice in displaying environmental variables in ordination. Indeed, they are the optimal way of presenting environmental variables in Constrained Correspondence Analysis \code{\link{cca}}, since there they are the linear constraints. In unconstrained ordination the relation between external variables and ordination configuration may be less linear, and therefore other methods than arrows may be more useful. The simplest is to adjust the plotting symbol sizes (\code{cex}, \code{\link{symbols}}) by environmental variables. Fancier methods involve smoothing and regression methods that abound in \R, and \code{\link{ordisurf}} provides a wrapper for some. } \seealso{ A better alternative to vectors may be \code{\link{ordisurf}}. } \examples{ data(varespec, varechem) library(MASS) ord <- metaMDS(varespec) (fit <- envfit(ord, varechem, perm = 999)) scores(fit, "vectors") plot(ord) plot(fit) plot(fit, p.max = 0.05, col = "red") ## Adding fitted arrows to CCA. We use "lc" scores, and hope ## that arrows are scaled similarly in cca and envfit plots ord <- cca(varespec ~ Al + P + K, varechem) plot(ord, type="p") fit <- envfit(ord, varechem, perm = 999, display = "lc") plot(fit, p.max = 0.05, col = "red") ## 'scaling' must be set similarly in envfit and in ordination plot plot(ord, type = "p", scaling = "sites") fit <- envfit(ord, varechem, perm = 0, display = "lc", scaling = "sites") plot(fit, col = "red") ## Class variables, formula interface, and displaying the ## inter-class variability with `ordispider', and semitransparent ## white background for labels (semitransparent colours are not ## supported by all graphics devices) data(dune) data(dune.env) ord <- cca(dune) fit <- envfit(ord ~ Moisture + A1, dune.env, perm = 0) plot(ord, type = "n") with(dune.env, ordispider(ord, Moisture, col="skyblue")) with(dune.env, points(ord, display = "sites", col = as.numeric(Moisture), pch=16)) plot(fit, cex=1.2, axis=TRUE, bg = rgb(1, 1, 1, 0.5)) ## Use shorter labels for factor centroids labels(fit) plot(ord) plot(fit, labels=list(factors = paste("M", c(1,2,4,5), sep = "")), bg = rgb(1,1,0,0.5)) } \keyword{multivariate } \keyword{aplot} \keyword{htest} vegan/man/diversity.Rd0000644000176200001440000001040413156750403014441 0ustar liggesusers\encoding{UTF-8} \name{diversity} \alias{diversity} \alias{fisher.alpha} \alias{specnumber} \title{Ecological Diversity Indices} \description{ Shannon, Simpson, and Fisher diversity indices and species richness. } \usage{ diversity(x, index = "shannon", MARGIN = 1, base = exp(1)) fisher.alpha(x, MARGIN = 1, ...) specnumber(x, groups, MARGIN = 1) } \arguments{ \item{x}{Community data, a matrix-like object or a vector.} \item{index}{Diversity index, one of \code{"shannon"}, \code{"simpson"} or \code{"invsimpson"}.} \item{MARGIN}{Margin for which the index is computed. } \item{base}{ The logarithm \code{base} used in \code{shannon}.} \item{groups}{A grouping factor: if given, finds the total number of species in each group.} \item{...}{Parameters passed to the function.} } \details{ Shannon or Shannon--Weaver (or Shannon--Wiener) index is defined as \eqn{H' = -\sum_i p_i \log_{b} p_i}{H = -sum p_i log(b) p_i}, where \eqn{p_i} is the proportional abundance of species \eqn{i} and \eqn{b} is the base of the logarithm. It is most popular to use natural logarithms, but some argue for base \eqn{b = 2} (which makes sense, but no real difference). Both variants of Simpson's index are based on \eqn{D = \sum p_i^2}{D = sum p_i^2}. Choice \code{simpson} returns \eqn{1-D} and \code{invsimpson} returns \eqn{1/D}. \code{fisher.alpha} estimates the \eqn{\alpha} parameter of Fisher's logarithmic series (see \code{\link{fisherfit}}). The estimation is possible only for genuine counts of individuals. Function \code{specnumber} finds the number of species. With \code{MARGIN = 2}, it finds frequencies of species. If \code{groups} is given, finds the total number of species in each group (see example on finding one kind of beta diversity with this option). Better stories can be told about Simpson's index than about Shannon's index, and still grander narratives about rarefaction (Hurlbert 1971). However, these indices are all very closely related (Hill 1973), and there is no reason to despise one more than others (but if you are a graduate student, don't drag me in, but obey your Professor's orders). In particular, the exponent of the Shannon index is linearly related to inverse Simpson (Hill 1973) although the former may be more sensitive to rare species. Moreover, inverse Simpson is asymptotically equal to rarefied species richness in sample of two individuals, and Fisher's \eqn{\alpha} is very similar to inverse Simpson. } \value{ A vector of diversity indices or numbers of species. } \references{ Fisher, R.A., Corbet, A.S. & Williams, C.B. (1943). The relation between the number of species and the number of individuals in a random sample of animal population. \emph{Journal of Animal Ecology} \strong{12}, 42--58. Hurlbert, S.H. (1971). The nonconcept of species diversity: a critique and alternative parameters. \emph{Ecology} \strong{52}, 577--586. } \seealso{These functions calculate only some basic indices, but many others can be derived with them (see Examples). Facilities related to diversity are discussed in a \pkg{vegan} vignette that can be read with \code{browseVignettes("vegan")}. Functions \code{\link{renyi}} and \code{\link{tsallis}} estimate a series of generalized diversity indices. Function \code{\link{rarefy}} finds estimated number of species for given sample size. Beta diversity can be estimated with \code{\link{betadiver}}. Diversities can be partitioned with \code{\link{adipart}} and \code{\link{multipart}}. } \author{ Jari Oksanen and Bob O'Hara (\code{fisher.alpha}).} \examples{ data(BCI) H <- diversity(BCI) simp <- diversity(BCI, "simpson") invsimp <- diversity(BCI, "inv") ## Unbiased Simpson (Hurlbert 1971, eq. 5) with rarefy: unbias.simp <- rarefy(BCI, 2) - 1 ## Fisher alpha alpha <- fisher.alpha(BCI) ## Plot all pairs(cbind(H, simp, invsimp, unbias.simp, alpha), pch="+", col="blue") ## Species richness (S) and Pielou's evenness (J): S <- specnumber(BCI) ## rowSums(BCI > 0) does the same... J <- H/log(S) ## beta diversity defined as gamma/alpha - 1: data(dune) data(dune.env) alpha <- with(dune.env, tapply(specnumber(dune), Management, mean)) gamma <- with(dune.env, specnumber(dune, Management)) gamma/alpha - 1 } \keyword{ univar } vegan/man/wascores.Rd0000644000176200001440000000454413231354436014255 0ustar liggesusers\name{wascores} \alias{wascores} \alias{eigengrad} \title{ Weighted Averages Scores for Species } \description{ Computes Weighted Averages scores of species for ordination configuration or for environmental variables. } \usage{ wascores(x, w, expand=FALSE) eigengrad(x, w) } \arguments{ \item{x}{Environmental variables or ordination scores.} \item{w}{Weights: species abundances.} \item{expand}{Expand weighted averages so that they have the same weighted variance as the corresponding environmental variables. } } \details{ Function \code{wascores} computes weighted averages. Weighted averages `shrink': they cannot be more extreme than values used for calculating the averages. With \code{expand = TRUE}, the function `dehsrinks' the weighted averages by making their biased weighted variance equal to the biased weighted variance of the corresponding environmental variable. Function \code{eigengrad} returns the inverses of squared expansion factors or the attribute \code{shrinkage} of the \code{wascores} result for each environmental gradient. This is equal to the constrained eigenvalue of \code{\link{cca}} when only this one gradient was used as a constraint, and describes the strength of the gradient. } \value{ Function \code{wascores} returns a matrix where species define rows and ordination axes or environmental variables define columns. If \code{expand = TRUE}, attribute \code{shrinkage} has the inverses of squared expansion factors or \code{\link{cca}} eigenvalues for the variable. Function \code{eigengrad} returns only the \code{shrinkage} attribute. } \author{ Jari Oksanen } \seealso{ \code{\link{monoMDS}}, \code{\link{cca}}. } \examples{ data(varespec) data(varechem) vare.dist <- vegdist(wisconsin(varespec)) vare.mds <- monoMDS(vare.dist) vare.points <- postMDS(vare.mds$points, vare.dist) vare.wa <- wascores(vare.points, varespec) plot(scores(vare.points), pch="+", asp=1) text(vare.wa, rownames(vare.wa), cex=0.8, col="blue") ## Omit rare species (frequency <= 4) freq <- apply(varespec>0, 2, sum) plot(scores(vare.points), pch="+", asp=1) text(vare.wa[freq > 4,], rownames(vare.wa)[freq > 4],cex=0.8,col="blue") ## Works for environmental variables, too. wascores(varechem, varespec) ## And the strengths of these variables are: eigengrad(varechem, varespec) } \keyword{ multivariate } \keyword{ univar } vegan/man/ordilabel.Rd0000644000176200001440000000510312626316320014351 0ustar liggesusers\name{ordilabel} \alias{ordilabel} \title{Add Text on Non-transparent Label to an Ordination Plot. } \description{ Function \code{ordilabel} is similar to \code{\link{text}}, but the text is on an opaque label. This can help in crowded ordination plots: you still cannot see all text labels, but at least the uppermost are readable. Argument \code{priority} helps to make the most important labels visible. } \usage{ ordilabel(x, display, labels, choices = c(1, 2), priority, select, cex = 0.8, fill = "white", border = NULL, col = NULL, xpd = TRUE, ...) } \arguments{ \item{x}{An ordination object an any object known to \code{\link{scores}}. } \item{display}{Kind of scores displayed (passed to \code{\link{scores}}). } \item{labels}{Optional text used in plots. If this is not given, the text is found from the ordination object.} \item{choices}{Axes shown (passed to \code{\link{scores}}). } \item{priority}{Vector of the same length as the number of labels. The items with high priority will be plotted uppermost.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items.} \item{cex}{ Character expansion for the text (passed to \code{\link{text}}). } \item{fill}{ Background colour of the labels (the \code{col} argument of \code{\link{polygon}}).} \item{border}{The colour and visibility of the border of the label as defined in \code{\link{polygon}}).} \item{col}{Text colour. Default \code{NULL} will give the value of \code{border} or \code{par("fg")} if \code{border} is \code{NULL}.} \item{xpd}{Draw labels also outside the plot region (see \code{\link{par}}).} \item{\dots}{Other arguments (passed to \code{\link{text}}). } } \details{ The function may be useful with crowded ordination plots, in particular together with argument \code{priority}. You will not see all text labels, but at least some are readable. Other alternatives to crowded plots are \code{\link{identify.ordiplot}}, \code{\link{orditorp}} and \code{\link{orditkplot}}. } \author{ Jari Oksanen } \seealso{ \code{\link{scores}}, \code{\link{polygon}}, \code{\link{text}}. The function is modelled after \code{\link[ade4]{s.label}} in \pkg{ade4} package.} \examples{ data(dune) ord <- cca(dune) plot(ord, type = "n") ordilabel(ord, dis="sites", cex=1.2, font=3, fill="hotpink", col="blue") ## You may prefer separate plots, but here species as well ordilabel(ord, dis="sp", font=2, priority=colSums(dune)) } \keyword{ aplot } vegan/man/ordixyplot.Rd0000644000176200001440000001411013231354436014632 0ustar liggesusers\name{ordixyplot} \alias{ordixyplot} \alias{ordisplom} \alias{ordicloud} \alias{panel.ordi} \alias{panel.ordiarrows} \alias{panel.ordi3d} \alias{prepanel.ordi3d} \alias{ordilattice.getEnvfit} \title{ Trellis (Lattice) Plots for Ordination } \description{ Functions \code{ordicloud}, \code{ordisplom} and \code{ordixyplot} provide an interface to plot ordination results using Trellis functions \code{\link[lattice]{cloud}}, \code{\link[lattice]{splom}} and \code{\link[lattice]{xyplot}} in package \pkg{lattice}. } \usage{ ordixyplot(x, data = NULL, formula, display = "sites", choices = 1:3, panel = "panel.ordi", aspect = "iso", envfit, type = c("p", "biplot"), ...) ordisplom(x, data=NULL, formula = NULL, display = "sites", choices = 1:3, panel = "panel.ordi", type = "p", ...) ordicloud(x, data = NULL, formula, display = "sites", choices = 1:3, panel = "panel.ordi3d", prepanel = "prepanel.ordi3d", ...) } \arguments{ \item{x}{ An ordination result that \code{\link{scores}} knows: any ordination result in \pkg{vegan} and many others. } \item{data}{ Optional data to amend ordination results. The ordination results are found from \code{x}, but you may give here data for other variables needed in plots. Typically these are environmental data.} \item{formula}{ Formula to define the plots. A default formula will be used if this is omitted. The ordination axes must be called by the same names as in the ordination results (and these names vary among methods). In \code{ordisplom}, special character \code{.} refers to the ordination result. } \item{display}{ The kind of scores: an argument passed to \code{\link{scores}}. } \item{choices}{ The axes selected: an argument passed to \code{\link{scores}}. } \item{panel, prepanel}{ The names of the panel and prepanel functions. } \item{aspect}{The aspect of the plot (passed to the \pkg{lattice} function).} \item{envfit}{Result of \code{\link{envfit}} function displayed in \code{ordixyplot}. Please note that this needs same \code{choices} as \code{ordixyplot}.} \item{type}{The type of plot. This knows the same alternatives as \code{\link[lattice]{panel.xyplot}}. In addition \code{ordixyplot} has alternatives \code{"biplot"} and \code{"arrows"}. The first displays fitted vectors and factor centroids of \code{envfit}, or in constrained ordination, the biplot arrows and factor centroids if \code{envfit} is not given. The second (\code{type = "arrows"}) is a trellis variant of \code{\link{ordiarrows}} and draws arrows by \code{groups}. The line parameters are controlled by \code{\link[lattice]{trellis.par.set}} for \code{superpose.line}, and the user can set \code{length}, \code{angle} and \code{ends} parameters of \code{\link[lattice]{panel.arrows}}.} \item{\dots}{ Arguments passed to \code{\link{scores}} methods or \pkg{lattice} functions.} } \details{ The functions provide an interface to the corresponding \pkg{lattice} functions. All graphical parameters are passed to the \pkg{lattice} function so that these graphs are extremely configurable. See \code{\link[lattice]{Lattice}} and \code{\link[lattice]{xyplot}}, \code{\link[lattice]{splom}} and \code{\link[lattice]{cloud}} for details, usage and possibilities. The argument \code{x} must always be an ordination result. The scores are extracted with \pkg{vegan} function \code{\link{scores}} so that these functions work with all \pkg{vegan} ordinations and many others. The \code{formula} is used to define the models. All functions have simple default formulae which are used if \code{formula} is missing. If formula is omitted in \code{ordisplom} it produces a pairs plot of ordination axes and variables in \code{data}. If \code{formula} is given, ordination results must be referred to as \code{.} and other variables by their names. In other functions, the formula must use the names of ordination scores and names of \code{data}. The ordination scores are found from \code{x}, and \code{data} is optional. The \code{data} should contain other variables than ordination scores to be used in plots. Typically, they are environmental variables (typically factors) to define panels or plot symbols. The proper work is done by the panel function. The layout can be changed by defining own panel functions. See \code{\link[lattice]{panel.xyplot}}, \code{\link[lattice]{panel.splom}} and \code{\link[lattice]{panel.cloud}} for details and survey of possibilities. Ordination graphics should always be isometric: same scale should be used in all axes. This is controlled (and can be changed) with argument \code{aspect} in \code{ordixyplot}. In \code{ordicloud} the isometric scaling is defined in \code{panel} and \code{prepanel} functions. You must replace these functions if you want to have non-isometric scaling of graphs. You cannot select isometric scaling in \code{ordisplom}. } \value{ The function return \code{\link[lattice]{Lattice}} objects of class \code{"trellis"}. } \author{Jari Oksanen } \seealso{ \code{\link[lattice]{Lattice}}, \code{\link[lattice]{xyplot}}, \code{\link[lattice]{splom}}, \code{\link[lattice]{cloud}}, \code{\link[lattice]{panel.splom}}, \code{\link[lattice]{panel.cloud}} } \examples{ data(dune) data(dune.env) ord <- cca(dune) ## Pairs plots ordisplom(ord) ordisplom(ord, data=dune.env, choices=1:2) ordisplom(ord, data=dune.env, form = ~ . | Management, groups=Manure) ## Scatter plot ordixyplot(ord, data=dune.env, form = CA1 ~ CA2 | Management, groups=Manure) ## Choose a different scaling ordixyplot(ord, scaling = "symmetric") ## ... Slices of third axis ordixyplot(ord, form = CA1 ~ CA2 | equal.count(CA3, 4), type = c("g","p")) ## Display environemntal variables ordixyplot(ord, envfit = envfit(ord ~ Management + A1, dune.env, choices=1:3)) ## 3D Scatter plots ordicloud(ord, form = CA2 ~ CA3*CA1, groups = Manure, data = dune.env) ordicloud(ord, form = CA2 ~ CA3*CA1 | Management, groups = Manure, data = dune.env, auto.key = TRUE, type = c("p","h")) } \keyword{ hplot } vegan/man/biplot.rda.Rd0000644000176200001440000000765213231354436014470 0ustar liggesusers\name{biplot.rda} \alias{biplot.rda} \title{PCA biplot} \description{ Draws a PCA biplot with species scores indicated by biplot arrows } \usage{ \method{biplot}{rda}(x, choices = c(1, 2), scaling = "species", display = c("sites", "species"), type, xlim, ylim, col = c(1,2), const, correlation = FALSE, ...) } \arguments{ \item{x}{A \code{\link{rda}} result object.} \item{choices}{Axes to show.} \item{scaling}{Scaling for species and site scores. Either species (\code{2}) or site (\code{1}) scores are scaled by eigenvalues, and the other set of scores is left unscaled, or with \code{3} both are scaled symmetrically by square root of eigenvalues. With negative scaling values in \code{rda}, species scores are divided by standard deviation of each species and multiplied with an equalizing constant. Unscaled raw scores stored in the result can be accessed with \code{scaling = 0}. The type of scores can also be specified as one of \code{"none"}, \code{"sites"}, \code{"species"}, or \code{"symmetric"}, which correspond to the values \code{0}, \code{1}, \code{2}, and \code{3} respectively. Argument \code{correlation} can be used in combination with these character descriptions to get the corresponding negative value. } \item{correlation}{logical; if \code{scaling} is a character description of the scaling type, \code{correlation} can be used to select correlation-like scores for PCA. See argument \code{scaling} for details.} \item{display}{Scores shown. These must some of the alternatives \code{"species"} for species scores, and/or \code{"sites"} for site scores.} \item{type}{Type of plot: partial match to \code{text} for text labels, \code{points} for points, and \code{none} for setting frames only. If omitted, \code{text} is selected for smaller data sets, and \code{points} for larger. Can be of length 2 (e.g. \code{type = c("text", "points")}), in which case the first element describes how species scores are handled, and the second how site scores are drawn.} \item{xlim, ylim}{the x and y limits (min, max) of the plot.} \item{col}{Colours used for sites and species (in this order). If only one colour is given, it is used for both.} \item{const}{General scaling constant for \code{\link{scores.rda}}.} \item{\dots}{Other parameters for plotting functions.} } \details{ Produces a plot or biplot of the results of a call to \code{\link{rda}}. It is common for the "species" scores in a PCA to be drawn as biplot arrows that point in the direction of increasing values for that variable. The \code{biplot.rda} function provides a wrapper to \code{plot.cca} to allow the easy production of such a plot. \code{\link{biplot.rda}} is only suitable for unconstrained models. If used on an ordination object with constraints, an error is issued. If species scores are drawn using \code{"text"}, the arrows are drawn from the origin to 0.85 * species score, whilst the labels are drawn at the species score. If the type used is \code{"points"}, then no labels are drawn and therefore the arrows are drawn from the origin to the actual species score. } \value{ The \code{plot} function returns invisibly a plotting structure which can be used by \code{\link{identify.ordiplot}} to identify the points or other functions in the \code{\link{ordiplot}} family. } \author{Gavin Simpson, based on \code{\link{plot.cca}} by Jari Oksanen.} \seealso{\code{\link{plot.cca}}, \code{\link{rda}} for something to plot, \code{\link{ordiplot}} for an alternative plotting routine and more support functions, and \code{\link{text}}, \code{\link{points}} and \code{\link{arrows}} for the basic routines.} \examples{ data(dune) mod <- rda(dune, scale = TRUE) biplot(mod, scaling = "symmetric") ## different type for species and site scores biplot(mod, scaling = "symmetric", type = c("text", "points")) } \keyword{hplot} vegan/man/simulate.rda.Rd0000644000176200001440000001113512626316320015006 0ustar liggesusers\name{simulate.rda} \alias{simulate.rda} \alias{simulate.cca} \alias{simulate.capscale} \title{ Simulate Responses with Gaussian Error or Permuted Residuals for Constrained Ordination } \description{ Function simulates a response data frame so that it adds Gaussian error to the fitted responses of Redundancy Analysis (\code{\link{rda}}), Constrained Correspondence Analysis (\code{\link{cca}}) or distance-based RDA (\code{\link{capscale}}). The function is a special case of generic \code{\link{simulate}}, and works similarly as \code{simulate.lm}. } \usage{ \method{simulate}{rda}(object, nsim = 1, seed = NULL, indx = NULL, rank = "full", correlated = FALSE, ...) } \arguments{ \item{object}{an object representing a fitted \code{\link{rda}}, \code{\link{cca}} or \code{\link{capscale}} model.} \item{nsim}{number of response matrices to be simulated. Only one dissimilarity matrix is returned for \code{\link{capscale}}, and larger \code{nsim} is an error.} \item{seed}{an object specifying if and how the random number generator should be initialized (\sQuote{seeded}). See \code{\link{simulate}} for details. } \item{indx}{Index of residuals added to the fitted values, such as produced by \code{\link[permute]{shuffleSet}} or \code{\link{sample}}. The index can have duplicate entries so that bootstrapping is allowed. If \code{nsim} \eqn{>1}, the output should be compliant with \code{\link[permute]{shuffleSet}} with one line for each simulation. If \code{nsim} is missing, the number of rows of \code{indx} is used to define the number of simulations, but if \code{nsim} is given, it should match number of rows in \code{indx}. If null, parametric simulation is used and Gaussian error is added to the fitted values.} \item{rank}{The rank of the constrained component: passed to \code{\link{predict.rda}} or \code{\link{predict.cca}}. } \item{correlated}{Are species regarded as correlated in parametric simulation or when \code{indx} is not given? If \code{correlated = TRUE}, multivariate Gaussian random error is generated, and if \code{FALSE}, Gaussian random error is generated separately for each species. The argument has no effect in \code{\link{capscale}} which has no information on species.} \item{\dots}{additional optional arguments (ignored). } } \details{ The implementation follows \code{"lm"} method of \code{\link{simulate}}, and adds Gaussian (Normal) error to the fitted values (\code{\link{fitted.rda}}) using function \code{\link{rnorm}} if \code{correlated = FALSE} or \code{\link[MASS]{mvrnorm}} if \code{correlated = TRUE}. The standard deviations (\code{\link{rnorm}}) or covariance matrices for species (\code{\link[MASS]{mvrnorm}}) are estimated from the residuals after fitting the constraints. Alternatively, the function can take a permutation index that is used to add permuted residuals (unconstrained component) to the fitted values. Raw data are used in \code{\link{rda}}. Internal Chi-square transformed data are used in \code{\link{cca}} within the function, but the returned matrix is similar to the original input data. The simulation is performed on internal metric scaling data in \code{\link{capscale}}, but the function returns the Euclidean distances calculated from the simulated data. The simulation uses only the real components, and the imaginary dimensions are ignored. } \value{ If \code{nsim = 1}, returns a matrix or dissimilarities (in \code{\link{capscale}}) with similar additional arguments on random number seed as \code{\link{simulate}}. If \code{nsim > 1}, returns a similar array as returned by \code{\link{simulate.nullmodel}} with similar attributes. } \author{Jari Oksanen} \seealso{ \code{\link{simulate}} for the generic case and for \code{\link{lm}} objects, and \code{\link{simulate.nullmodel}} for community null model simulation. Functions \code{\link{fitted.rda}} and \code{\link{fitted.cca}} return fitted values without the error component. See \code{\link{rnorm}} and \code{\link[MASS]{mvrnorm}} (\pkg{MASS} package) for simulating Gaussian random error. } \examples{ data(dune) data(dune.env) mod <- rda(dune ~ Moisture + Management, dune.env) ## One simulation update(mod, simulate(mod) ~ .) ## An impression of confidence regions of site scores plot(mod, display="sites") for (i in 1:5) lines(procrustes(mod, update(mod, simulate(mod) ~ .)), col="blue") ## Simulate a set of null communities with permutation of residuals simulate(mod, indx = shuffleSet(nrow(dune), 99)) } \keyword{ models } \keyword{ datagen } \keyword{ multivariate } vegan/man/add1.cca.Rd0000644000176200001440000000765212626316320013765 0ustar liggesusers\name{add1.cca} \alias{add1.cca} \alias{drop1.cca} \title{Add or Drop Single Terms to a Constrained Ordination Model } \description{ Compute all single terms that can be added to or dropped from a constrained ordination model. } \usage{ \method{add1}{cca}(object, scope, test = c("none", "permutation"), permutations = how(nperm=199), ...) \method{drop1}{cca}(object, scope, test = c("none", "permutation"), permutations = how(nperm=199), ...) } \arguments{ \item{object}{ A constrained ordination object from \code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. } \item{scope}{ A formula giving the terms to be considered for adding or dropping; see \code{\link{add1}} for details.} \item{test}{ Should a permutation test be added using \code{\link{anova.cca}}. } \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{\dots}{Other arguments passed to \code{\link{add1.default}}, \code{\link{drop1.default}}, and \code{\link{anova.cca}}.} } \details{ With argument \code{test = "none"} the functions will only call \code{\link{add1.default}} or \code{\link{drop1.default}}. With argument \code{test = "permutation"} the functions will add test results from \code{\link{anova.cca}}. Function \code{drop1.cca} will call \code{\link{anova.cca}} with argument \code{by = "margin"}. Function \code{add1.cca} will implement a test for single term additions that is not directly available in \code{\link{anova.cca}}. Functions are used implicitly in \code{\link{step}}, \code{\link{ordiR2step}} and \code{\link{ordistep}}. The \code{\link{deviance.cca}} and \code{\link{deviance.rda}} used in \code{\link{step}} have no firm basis, and setting argument \code{test = "permutation"} may help in getting useful insight into validity of model building. Function \code{\link{ordistep}} calls alternately \code{drop1.cca} and \code{add1.cca} with argument \code{test = "permutation"} and selects variables by their permutation \eqn{P}-values. Meticulous use of \code{add1.cca} and \code{drop1.cca} will allow more judicious model building. The default \code{perm.max} is set to a low value, because permutation tests can take a long time. It should be sufficient to give a impression on the significances of the terms, but higher values of \code{perm.max} should be used if \eqn{P} values really are important. } \value{ Returns a similar object as \code{\link{add1}} and \code{\link{drop1}}. } \author{Jari Oksanen} \seealso{ \code{\link{add1}}, \code{\link{drop1}} and \code{\link{anova.cca}} for basic methods. You probably need these functions with \code{\link{step}} and \code{\link{ordistep}}. Functions \code{\link{deviance.cca}} and \code{\link{extractAIC.cca}} are used to produce the other arguments than test results in the output. Functions \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}} produce result objects for these functions.} \examples{ data(dune) data(dune.env) ## Automatic model building based on AIC but with permutation tests step(cca(dune ~ 1, dune.env), reformulate(names(dune.env)), test="perm") ## see ?ordistep to do the same, but based on permutation P-values \dontrun{ ordistep(cca(dune ~ 1, dune.env), reformulate(names(dune.env)), perm.max=200) } ## Manual model building ## -- define the maximal model for scope mbig <- rda(dune ~ ., dune.env) ## -- define an empty model to start with m0 <- rda(dune ~ 1, dune.env) ## -- manual selection and updating add1(m0, scope=formula(mbig), test="perm") m0 <- update(m0, . ~ . + Management) add1(m0, scope=formula(mbig), test="perm") m0 <- update(m0, . ~ . + Moisture) ## -- included variables still significant? drop1(m0, test="perm") add1(m0, scope=formula(mbig), test="perm") } \keyword{multivariate } \keyword{ models} vegan/man/ordihull.Rd0000644000176200001440000002651213231354436014250 0ustar liggesusers\name{ordihull} \alias{ordihull} \alias{ordispider} \alias{ordiellipse} \alias{ordibar} \alias{ordicluster} \alias{weights.cca} \alias{weights.rda} \alias{weights.decorana} \alias{summary.ordihull} \alias{scores.ordihull} \alias{summary.ordiellipse} \alias{ordiareatest} \title{Display Groups or Factor Levels in Ordination Diagrams} \description{ Functions to add convex hulls, `spider' graphs, ellipses or cluster dendrogram to ordination diagrams. The ordination diagrams can be produced by \code{vegan} \code{\link{plot.cca}}, \code{\link{plot.decorana}} or \code{\link{ordiplot}}. } \usage{ ordihull(ord, groups, display = "sites", draw = c("lines","polygon", "none"), col = NULL, alpha = 127, show.groups, label = FALSE, border = NULL, lty = NULL, lwd = NULL, ...) ordiellipse(ord, groups, display="sites", kind = c("sd","se", "ehull"), conf, draw = c("lines","polygon", "none"), w = weights(ord, display), col = NULL, alpha = 127, show.groups, label = FALSE, border = NULL, lty = NULL, lwd=NULL, ...) ordibar(ord, groups, display = "sites", kind = c("sd", "se"), conf, w = weights(ord, display), col = 1, show.groups, label = FALSE, lwd = NULL, length = 0, ...) ordispider(ord, groups, display="sites", w = weights(ord, display), spiders = c("centroid", "median"), show.groups, label = FALSE, col = NULL, lty = NULL, lwd = NULL, ...) ordicluster(ord, cluster, prune = 0, display = "sites", w = weights(ord, display), col = 1, ...) \method{summary}{ordihull}(object, ...) \method{summary}{ordiellipse}(object, ...) ordiareatest(ord, groups, area = c("hull", "ellipse"), kind = "sd", permutations = 999, parallel = getOption("mc.cores"), ...) } \arguments{ \item{ord}{An ordination object or an \code{\link{ordiplot}} object. } \item{groups}{Factor giving the groups for which the graphical item is drawn. } \item{display}{Item to displayed. } \item{draw}{Use either \code{\link{lines}} or \code{\link{polygon}} to draw the lines. Graphical parameters are passed to both. The main difference is that \code{polygon}s may be filled and non-transparent. With \code{none} nothing is drawn, but the function returns the \code{\link{invisible}} plotting data.} \item{col}{Colour of hull or ellipse lines (if \code{draw = "lines"}) or their fills (if \code{draw = "polygon"}) in \code{ordihull} and \code{ordiellipse}. When \code{draw = "polygon"}, the colour of bordering lines can be set with argument \code{border} of the \code{\link{polygon}} function. For other functions the effect depends on the underlining functions this argument is passed to. When multiple values of \code{col} are specified these are used for each element of \code{names(table(groups))} (in that order), shorter vectors are recycled. Function \code{ordicluster} has no \code{groups}, and there the argument will be recycled for points, and the colour of connecting lines is a mixture of point s in the cluster.} \item{alpha}{Transparency of the fill \code{col}our with \code{draw = "polygon"} in \code{ordihull} and \code{ordiellipse}. The argument takes precedence over possible transparency definitions of the colour. The value must be in range \eqn{0...255}, and low values are more transparent. Transparency is not available in all graphics devices or file formats.} \item{show.groups}{Show only given groups. This can be a vector, or \code{TRUE} if you want to show items for which condition is \code{TRUE}. This argument makes it possible to use different colours and line types for groups. The default is to show all groups. } \item{label}{Label the \code{groups} by their names in the centroid of the object. \code{ordiellipse} and \code{ordihull} use standard \code{\link{text}}, and others use \code{\link{ordilabel}}.} \item{w}{Weights used to find the average within group. Weights are used automatically for \code{\link{cca}} and \code{\link{decorana}} results, unless undone by the user. \code{w=NULL} sets equal weights to all points. } \item{kind}{Draw standard deviations of points (\code{sd}), standard errors (\code{se}) or ellipsoid hulls that enclose all points in the group (\code{ehull}).} \item{conf}{Confidence limit for ellipses, e.g. 0.95. If given, the corresponding \code{sd} or \code{se} is multiplied with the corresponding value found from the Chi-squared distribution with 2df. } \item{spiders}{Are centres or spider bodies calculated either as centroids (averages) or spatial medians.} \item{cluster}{Result of hierarchic cluster analysis, such as \code{\link{hclust}} or \code{\link[cluster]{agnes}}.} \item{prune}{Number of upper level hierarchies removed from the dendrogram. If \code{prune} \eqn{>0}, dendrogram will be disconnected.} \item{object}{A result object from \code{ordihull} or \code{ordiellipse}. The result is \code{\link{invisible}}, but it can be saved, and used for summaries (areas etc. of hulls and ellipses). } \item{area}{Evaluate the area of convex hulls of \code{ordihull}, or of ellipses of \code{ordiellipse}.} \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{parallel}{Number of parallel processes or a predefined socket cluster. With \code{parallel = 1} uses ordinary, non-parallel processing. The parallel processing is done with \pkg{parallel} package.} \item{lty, lwd, border}{Vectors of these parameters can be supplied and will be applied (if appropriate) for each element of \code{names(table(groups))} (in that order). Shorter vectors will be recycled.} \item{length}{Width (in inches) of the small (\dQuote{caps}) at the ends of the bar segment (passed to \code{\link{arrows}}).} \item{\dots}{Parameters passed to graphical functions or to \code{\link{scores}} to select axes and scaling etc. } } \details{ Function \code{ordihull} draws \code{\link{lines}} or \code{\link{polygon}}s for the convex hulls found by function \code{\link{chull}} encircling the items in the groups. Function \code{ordiellipse} draws \code{\link{lines}} or \code{\link{polygon}}s for ellipses by \code{groups}. The function can either draw standard deviation of point scores (\code{kind="sd"}) or standard error of the (weighted) average of scores (\code{kind="sd"}), and the (weighted) correlation defines the direction of the principal axis of the ellipse. With \code{kind="ehull"} the function draws an ellipse that encloses all points of a group using \code{\link[cluster]{ellipsoidhull}} (\pkg{cluster} package). Function \code{ordibar} draws crossed \dQuote{error bars} using either either standard deviation of point scores or standard error of the (weighted) average of scores. These are the principal axes of the correspoding \code{ordiellipse}, and are found by principal component analysis of the (weighted) covariance matrix. Functions \code{ordihull} and \code{ordiellipse} return invisibly an object that has a \code{summary} method that returns the coordinates of centroids and areas of the hulls or ellipses. Function \code{ordiareatest} studies the one-sided hypothesis that these areas are smaller than with randomized \code{groups}. Argument \code{kind} can be used to select the kind of ellipse, and has no effect with convex hulls. Function \code{ordispider} draws a \sQuote{spider} diagram where each point is connected to the group centroid with \code{\link{segments}}. Weighted centroids are used in the correspondence analysis methods \code{\link{cca}} and \code{\link{decorana}} or if the user gives the weights in the call. If \code{ordispider} is called with \code{\link{cca}} or \code{\link{rda}} result without \code{groups} argument, the function connects each \sQuote{WA} scores to the corresponding \sQuote{LC} score. If the argument is a (\code{invisible}) \code{ordihull} object, the function will connect the points of the hull to their centroid. Function \code{ordicluster} overlays a cluster dendrogram onto ordination. It needs the result from a hierarchic clustering such as \code{\link{hclust}} or \code{\link[cluster]{agnes}}, or other with a similar structure. Function \code{ordicluster} connects cluster centroids to each other with line \code{\link{segments}}. Function uses centroids of all points in the clusters, and is therefore similar to average linkage methods. } \note{These functions add graphical items to ordination graph: You must draw a graph first. To draw line segments, grids or arrows, see \code{\link{ordisegments}}, \code{\link{ordigrid}} and\code{\link{ordiarrows}}. } \value{ Functions \code{ordihull}, \code{ordiellipse} and \code{ordispider} return the \code{\link{invisible}} plotting structure. Function \code{ordispider} return the coordinates to which each point is connected (centroids or \sQuote{LC} scores). Function \code{ordihull} and \code{ordiellipse} return invisibly an object that has a \code{summary} method that returns the coordinates of centroids and areas of the hulls or ellipses. Function \code{ordiareatest} studies the one-sided hypothesis that these areas are smaller than with randomized \code{groups}. } \author{ Jari Oksanen } \seealso{The functions pass parameters to basic graphical functions, and you may wish to change the default values in \code{\link{lines}}, \code{\link{segments}} and \code{\link{polygon}}. You can pass parameters to \code{\link{scores}} as well. Underlying functions for \code{ordihull} is \code{\link{chull}}. The underlying function for ellipsoid hulls in \code{ordiellipse} is \code{\link[cluster]{ellipsoidhull}}. } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ Management, dune.env) plot(mod, type="n", scaling = "symmetric") ## Catch the invisible result of ordihull... pl <- with(dune.env, ordihull(mod, Management, scaling = "symmetric", label = TRUE)) ## ... and find centres and areas of the hulls summary(pl) ## use more colours and add ellipsoid hulls plot(mod, type = "n") pl <- with(dune.env, ordihull(mod, Management, scaling = "symmetric", col = 1:4, draw="polygon", label =TRUE)) with(dune.env, ordiellipse(mod, Management, scaling = "symmetric", kind = "ehull", col = 1:4, lwd=3)) ## ordispider to connect WA and LC scores plot(mod, dis=c("wa","lc"), type="p") ordispider(mod) ## Other types of plots plot(mod, type = "p", display="sites") cl <- hclust(vegdist(dune)) ordicluster(mod, cl, prune=3, col = cutree(cl, 4)) ## confidence ellipse: location of the class centroids plot(mod, type="n", display = "sites") with(dune.env, text(mod, display="sites", labels = as.character(Management), col=as.numeric(Management))) pl <- with(dune.env, ordiellipse(mod, Management, kind="se", conf=0.95, lwd=2, draw = "polygon", col=1:4, border=1:4, alpha=63)) summary(pl) ## add confidence bars with(dune.env, ordibar(mod, Management, kind="se", conf=0.95, lwd=2, col=1:4, label=TRUE)) } \keyword{aplot } vegan/man/isomap.Rd0000644000176200001440000001346412730061270013712 0ustar liggesusers\name{isomap} \alias{isomap} \alias{isomapdist} \alias{plot.isomap} \alias{summary.isomap} \title{ Isometric Feature Mapping Ordination } \description{ The function performs isometric feature mapping which consists of three simple steps: (1) retain only some of the shortest dissimilarities among objects, (2) estimate all dissimilarities as shortest path distances, and (3) perform metric scaling (Tenenbaum et al. 2000). } \usage{ isomap(dist, ndim=10, ...) isomapdist(dist, epsilon, k, path = "shortest", fragmentedOK =FALSE, ...) \method{summary}{isomap}(object, axes = 4, ...) \method{plot}{isomap}(x, net = TRUE, n.col = "gray", type = "points", ...) } \arguments{ \item{dist}{Dissimilarities. } \item{ndim}{Number of axes in metric scaling (argument \code{k} in \code{\link{cmdscale}}).} \item{epsilon}{Shortest dissimilarity retained. } \item{k}{Number of shortest dissimilarities retained for a point. If both \code{epsilon} and \code{k} are given, \code{epsilon} will be used. } \item{path}{Method used in \code{\link{stepacross}} to estimate the shortest path, with alternatives \code{"shortest"} and \code{"extended"}. } \item{fragmentedOK}{What to do if dissimilarity matrix is fragmented. If \code{TRUE}, analyse the largest connected group, otherwise stop with error. } \item{x, object}{An \code{isomap} result object.} \item{axes}{Number of axes displayed.} \item{net}{Draw the net of retained dissimilarities.} \item{n.col}{Colour of drawn net segments. This can also be a vector that is recycled for points, and the colour of the net segment is a mixture of joined points.} \item{type}{Plot observations either as \code{"points"}, \code{"text"} or use \code{"none"} to plot no observations. The \code{"text"} will use \code{\link{ordilabel}} if \code{net = TRUE} and \code{\link{ordiplot}} if \code{net = FALSE}, and pass extra arguments to these functions.} \item{\dots}{Other parameters passed to functions. } } \details{ The function \code{isomap} first calls function \code{isomapdist} for dissimilarity transformation, and then performs metric scaling for the result. All arguments to \code{isomap} are passed to \code{isomapdist}. The functions are separate so that the \code{isompadist} transformation could be easily used with other functions than simple linear mapping of \code{\link{cmdscale}}. Function \code{isomapdist} retains either dissimilarities equal or shorter to \code{epsilon}, or if \code{epsilon} is not given, at least \code{k} shortest dissimilarities for a point. Then a complete dissimilarity matrix is reconstructed using \code{\link{stepacross}} using either flexible shortest paths or extended dissimilarities (for details, see \code{\link{stepacross}}). De'ath (1999) actually published essentially the same method before Tenenbaum et al. (2000), and De'ath's function is available in function \code{xdiss} in non-CRAN package \pkg{mvpart}. The differences are that \code{isomap} introduced the \code{k} criterion, whereas De'ath only used \code{epsilon} criterion. In practice, De'ath also retains higher proportion of dissimilarities than typical \code{isomap}. The \code{plot} function uses internally \code{\link{ordiplot}}, except that it adds text over net using \code{\link{ordilabel}}. The \code{plot} function passes extra arguments to these functions. In addition, \pkg{vegan3d} package has function \code{\link[vegan3d]{rgl.isomap}} to make dynamic 3D plots that can be rotated on the screen. } \value{ Function \code{isomapdist} returns a dissimilarity object similar to \code{dist}. Function \code{isomap} returns an object of class \code{isomap} with \code{plot} and \code{summary} methods. The \code{plot} function returns invisibly an object of class \code{\link{ordiplot}}. Function \code{\link{scores}} can extract the ordination scores. } \references{ De'ath, G. (1999) Extended dissimilarity: a method of robust estimation of ecological distances from high beta diversity data. \emph{Plant Ecology} 144, 191--199 Tenenbaum, J.B., de Silva, V. & Langford, J.C. (2000) A global network framework for nonlinear dimensionality reduction. \emph{Science} 290, 2319--2323. } \author{ Jari Oksanen } \note{ Tenenbaum et al. (2000) justify \code{isomap} as a tool of unfolding a manifold (e.g. a 'Swiss Roll'). Even with a manifold structure, the sampling must be even and dense so that dissimilarities along a manifold are shorter than across the folds. If data do not have such a manifold structure, the results are very sensitive to parameter values. } \seealso{The underlying functions that do the proper work are \code{\link{stepacross}}, \code{\link{distconnected}} and \code{\link{cmdscale}}. Function \code{\link{metaMDS}} may trigger \code{\link{stepacross}} transformation, but usually only for longest dissimilarities. The \code{plot} method of \pkg{vegan} minimum spanning tree function (\code{\link{spantree}}) has even more extreme way of isomapping things. } \examples{ ## The following examples also overlay minimum spanning tree to ## the graphics in red. op <- par(mar=c(4,4,1,1)+0.2, mfrow=c(2,2)) data(BCI) dis <- vegdist(BCI) tr <- spantree(dis) pl <- ordiplot(cmdscale(dis), main="cmdscale") lines(tr, pl, col="red") ord <- isomap(dis, k=3) ord pl <- plot(ord, main="isomap k=3") lines(tr, pl, col="red") pl <- plot(isomap(dis, k=5), main="isomap k=5") lines(tr, pl, col="red") pl <- plot(isomap(dis, epsilon=0.45), main="isomap epsilon=0.45") lines(tr, pl, col="red") par(op) ## colour points and web by the dominant species dom <- apply(BCI, 1, which.max) ## need nine colours, but default palette has only eight op <- palette(c(palette("default"), "sienna")) plot(ord, pch = 16, col = dom, n.col = dom) palette(op) } \keyword{ multivariate} vegan/man/contribdiv.Rd0000644000176200001440000001034313231354436014564 0ustar liggesusers\encoding{UTF-8} \name{contribdiv} \alias{contribdiv} \alias{plot.contribdiv} \title{Contribution Diversity Approach} \description{ The contribution diversity approach is based in the differentiation of within-unit and among-unit diversity by using additive diversity partitioning and unit distinctiveness. } \usage{ contribdiv(comm, index = c("richness", "simpson"), relative = FALSE, scaled = TRUE, drop.zero = FALSE) \method{plot}{contribdiv}(x, sub, xlab, ylab, ylim, col, ...) } \arguments{ \item{comm}{The community data matrix with samples as rows and species as column.} \item{index}{Character, the diversity index to be calculated.} \item{relative}{Logical, if \code{TRUE} then contribution diversity values are expressed as their signed deviation from their mean. See details.} \item{scaled}{Logical, if \code{TRUE} then relative contribution diversity values are scaled by the sum of gamma values (if \code{index = "richness"}) or by sum of gamma values times the number of rows in \code{comm} (if \code{index = "simpson"}). See details.} \item{drop.zero}{Logical, should empty rows dropped from the result? If empty rows are not dropped, their corresponding results will be \code{NA}s.} \item{x}{An object of class \code{"contribdiv"}.} \item{sub, xlab, ylab, ylim, col}{Graphical arguments passed to plot.} \item{\dots}{Other arguments passed to plot.} } \details{ This approach was proposed by Lu et al. (2007). Additive diversity partitioning (see \code{\link{adipart}} for more references) deals with the relation of mean alpha and the total (gamma) diversity. Although alpha diversity values often vary considerably. Thus, contributions of the sites to the total diversity are uneven. This site specific contribution is measured by contribution diversity components. A unit that has e.g. many unique species will contribute more to the higher level (gamma) diversity than another unit with the same number of species, but all of which common. Distinctiveness of species \eqn{j} can be defined as the number of sites where it occurs (\eqn{n_j}), or the sum of its relative frequencies (\eqn{p_j}). Relative frequencies are computed sitewise and \eqn{sum_j{p_ij}}s at site \eqn{i} sum up to \eqn{1}. The contribution of site \eqn{i} to the total diversity is given by \eqn{alpha_i = sum_j(1 / n_ij)} when dealing with richness and \eqn{alpha_i = sum(p_{ij} * (1 - p_{ij}))} for the Simpson index. The unit distinctiveness of site \eqn{i} is the average of the species distinctiveness, averaging only those species which occur at site \eqn{i}. For species richness: \eqn{alpha_i = mean(n_i)} (in the paper, the second equation contains a typo, \eqn{n} is without index). For the Simpson index: \eqn{alpha_i = mean(n_i)}. The Lu et al. (2007) gives an in-depth description of the different indices. } \value{ An object of class \code{"contribdiv"} in heriting from data frame. Returned values are alpha, beta and gamma components for each sites (rows) of the community matrix. The \code{"diff.coef"} attribute gives the differentiation coefficient (see Examples). } \references{ Lu, H. P., Wagner, H. H. and Chen, X. Y. 2007. A contribution diversity approach to evaluate species diversity. \emph{Basic and Applied Ecology}, 8, 1--12. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}} \seealso{\code{\link{adipart}}, \code{\link{diversity}}} \examples{ ## Artificial example given in ## Table 2 in Lu et al. 2007 x <- matrix(c( 1/3,1/3,1/3,0,0,0, 0,0,1/3,1/3,1/3,0, 0,0,0,1/3,1/3,1/3), 3, 6, byrow = TRUE, dimnames = list(LETTERS[1:3],letters[1:6])) x ## Compare results with Table 2 contribdiv(x, "richness") contribdiv(x, "simpson") ## Relative contribution (C values), compare with Table 2 (cd1 <- contribdiv(x, "richness", relative = TRUE, scaled = FALSE)) (cd2 <- contribdiv(x, "simpson", relative = TRUE, scaled = FALSE)) ## Differentiation coefficients attr(cd1, "diff.coef") # D_ST attr(cd2, "diff.coef") # D_DT ## BCI data set data(BCI) opar <- par(mfrow=c(2,2)) plot(contribdiv(BCI, "richness"), main = "Absolute") plot(contribdiv(BCI, "richness", relative = TRUE), main = "Relative") plot(contribdiv(BCI, "simpson")) plot(contribdiv(BCI, "simpson", relative = TRUE)) par(opar) } \keyword{multivariate} vegan/man/nestedtemp.Rd0000644000176200001440000002301013231354436014564 0ustar liggesusers\encoding{UTF-8} \name{nestedtemp} \alias{nestedtemp} \alias{nestedchecker} \alias{nestedn0} \alias{nesteddisc} \alias{nestednodf} \alias{nestedbetasor} \alias{nestedbetajac} \alias{plot.nestedtemp} \alias{plot.nestednodf} \title{ Nestedness Indices for Communities of Islands or Patches } \description{ Patches or local communities are regarded as nested if they all could be subsets of the same community. In general, species poor communities should be subsets of species rich communities, and rare species should only occur in species rich communities. } \usage{ nestedchecker(comm) nestedn0(comm) nesteddisc(comm, niter = 200) nestedtemp(comm, ...) nestednodf(comm, order = TRUE, weighted = FALSE, wbinary = FALSE) nestedbetasor(comm) nestedbetajac(comm) \method{plot}{nestedtemp}(x, kind = c("temperature", "incidence"), col=rev(heat.colors(100)), names = FALSE, ...) \method{plot}{nestednodf}(x, col = "red", names = FALSE, ...) } \arguments{ \item{comm}{Community data.} \item{niter}{Number of iterations to reorder tied columns.} \item{x}{Result object for a \code{plot}.} \item{col}{Colour scheme for matrix temperatures.} \item{kind}{The kind of plot produced.} \item{names}{Label columns and rows in the plot using names in \code{comm}. If it is a logical vector of length 2, row and column labels are returned accordingly.} \item{order}{Order rows and columns by frequencies.} \item{weighted}{Use species abundances as weights of interactions.} \item{wbinary}{Modify original method so that binary data give the same result in weighted and and unweighted analysis. } \item{\dots}{Other arguments to functions.} } \details{ The nestedness functions evaluate alternative indices of nestedness. The functions are intended to be used together with Null model communities and used as an argument in \code{\link{oecosimu}} to analyse the non-randomness of results. Function \code{nestedchecker} gives the number of checkerboard units, or 2x2 submatrices where both species occur once but on different sites (Stone & Roberts 1990). Function \code{nestedn0} implements nestedness measure N0 which is the number of absences from the sites which are richer than the most pauperate site species occurs (Patterson & Atmar 1986). Function \code{nesteddisc} implements discrepancy index which is the number of ones that should be shifted to fill a row with ones in a table arranged by species frequencies (Brualdi & Sanderson 1999). The original definition arranges species (columns) by their frequencies, but did not have any method of handling tied frequencies. The \code{nesteddisc} function tries to order tied columns to minimize the discrepancy statistic but this is rather slow, and with a large number of tied columns there is no guarantee that the best ordering was found (argument \code{niter} gives the maximum number of tried orders). In that case a warning of tied columns will be issued. Function \code{nestedtemp} finds the matrix temperature which is defined as the sum of \dQuote{surprises} in arranged matrix. In arranged unsurprising matrix all species within proportion given by matrix fill are in the upper left corner of the matrix, and the surprise of the absence or presences is the diagonal distance from the fill line (Atmar & Patterson 1993). Function tries to pack species and sites to a low temperature (\enc{Rodríguez-Gironés}{Rodriguez-Girones} & Santamaria 2006), but this is an iterative procedure, and the temperatures usually vary among runs. Function \code{nestedtemp} also has a \code{plot} method which can display either incidences or temperatures of the surprises. Matrix temperature was rather vaguely described (Atmar & Patterson 1993), but \enc{Rodríguez-Gironés}{Rodriguez-Girones} & Santamaria (2006) are more explicit and their description is used here. However, the results probably differ from other implementations, and users should be cautious in interpreting the results. The details of calculations are explained in the \code{\link{vignette}} \emph{Design decisions and implementation} that you can read using functions \code{\link{browseVignettes}}. Function \code{\link[bipartite]{nestedness}} in the \pkg{bipartite} package is a direct port of the BINMATNEST programme of \enc{Rodríguez-Gironés}{Rodriguez-Girones} & Santamaria (2006). Function \code{nestednodf} implements a nestedness metric based on overlap and decreasing fill (Almeida-Neto et al., 2008). Two basic properties are required for a matrix to have the maximum degree of nestedness according to this metric: (1) complete overlap of 1's from right to left columns and from down to up rows, and (2) decreasing marginal totals between all pairs of columns and all pairs of rows. The nestedness statistic is evaluated separately for columns (\code{N columns}) for rows (\code{N rows}) and combined for the whole matrix (\code{NODF}). If you set \code{order = FALSE}, the statistic is evaluated with the current matrix ordering allowing tests of other meaningful hypothesis of matrix structure than default ordering by row and column totals (breaking ties by total abundances when \code{weighted = TRUE}) (see Almeida-Neto et al. 2008). With \code{weighted = TRUE}, the function finds the weighted version of the index (Almeida-Neto & Ulrich, 2011). However, this requires quantitative null models for adequate testing. Almeida-Neto & Ulrich (2011) say that you have positive nestedness if values in the first row/column are higher than in the second. With this condition, weighted analysis of binary data will always give zero nestedness. With argument \code{wbinary = TRUE}, equality of rows/colums also indicates nestedness, and binary data will give identical results in weighted and unweighted analysis. However, this can also influence the results of weighted analysis so that the results may differ from Almeida-Neto & Ulrich (2011). Functions \code{nestedbetasor} and \code{nestedbetajac} find multiple-site dissimilarities and decompose these into components of turnover and nestedness following Baselga (2012); the pairwise dissimilarities can be found with \code{\link{designdist}}. This can be seen as a decomposition of beta diversity (see \code{\link{betadiver}}). Function \code{nestedbetasor} uses \enc{Sørensen}{Sorensen} dissimilarity and the turnover component is Simpson dissimilarity (Baselga 2012), and \code{nestedbetajac} uses analogous methods with the Jaccard index. The functions return a vector of three items: turnover, nestedness and their sum which is the multiple \enc{Sørensen}{Sorensen} or Jaccard dissimilarity. The last one is the total beta diversity (Baselga 2012). The functions will treat data as presence/absence (binary) and they can be used with binary \code{\link{nullmodel}}). The overall dissimilarity is constant in all \code{\link{nullmodel}}s that fix species (column) frequencies (\code{"c0"}), and all components are constant if row columns are also fixed (e.g., model \code{"quasiswap"}), and the functions are not meaningful with these null models. } \value{ The result returned by a nestedness function contains an item called \code{statistic}, but the other components differ among functions. The functions are constructed so that they can be handled by \code{\link{oecosimu}}. } \references{ Almeida-Neto, M., \enc{Gumarães}{Gumaraes}, P., \enc{Gumarães}{Gumaraes}, P.R., Loyola, R.D. & Ulrich, W. (2008). A consistent metric for nestedness analysis in ecological systems: reconciling concept and measurement. \emph{Oikos} 117, 1227--1239. Almeida-Neto, M. & Ulrich, W. (2011). A straightforward computational approach for measuring nestedness using quantitative matrices. \emph{Env. Mod. Software} 26, 173--178. Atmar, W. & Patterson, B.D. (1993). The measurement of order and disorder in the distribution of species in fragmented habitat. \emph{Oecologia} 96, 373--382. Baselga, A. (2012). The relationship between species replacement, dissimilarity derived from nestedness, and nestedness. \emph{Global Ecol. Biogeog.} 21, 1223--1232. Brualdi, R.A. & Sanderson, J.G. (1999). Nested species subsets, gaps, and discrepancy. \emph{Oecologia} 119, 256--264. Patterson, B.D. & Atmar, W. (1986). Nested subsets and the structure of insular mammalian faunas and archipelagos. \emph{Biol. J. Linnean Soc.} 28, 65--82. \enc{Rodríguez-Gironés}{Rodriguez-Girones}, M.A. & Santamaria, L. (2006). A new algorithm to calculate the nestedness temperature of presence-absence matrices. \emph{J. Biogeogr.} 33, 924--935. Stone, L. & Roberts, A. (1990). The checkerboard score and species distributions. \emph{Oecologia} 85, 74--79. Wright, D.H., Patterson, B.D., Mikkelson, G.M., Cutler, A. & Atmar, W. (1998). A comparative analysis of nested subset patterns of species composition. \emph{Oecologia} 113, 1--20. } \author{ Jari Oksanen and Gustavo Carvalho (\code{nestednodf}). } \seealso{ In general, the functions should be used with \code{\link{oecosimu}} which generates Null model communities to assess the non-randomness of nestedness patterns. } \examples{ data(sipoo) ## Matrix temperature out <- nestedtemp(sipoo) out plot(out) plot(out, kind="incid") ## Use oecosimu to assess the non-randomness of checker board units nestedchecker(sipoo) oecosimu(sipoo, nestedchecker, "quasiswap") ## Another Null model and standardized checkerboard score oecosimu(sipoo, nestedchecker, "r00", statistic = "C.score") } \keyword{ univar } vegan/man/tolerance.Rd0000644000176200001440000000342013156750403014373 0ustar liggesusers\name{tolerance} \alias{tolerance} \alias{tolerance.cca} \title{Species tolerances and sample heterogeneities} \usage{ tolerance(x, \dots) \method{tolerance}{cca}(x, choices = 1:2, which = c("species","sites"), scaling = "species", useN2 = TRUE, hill = FALSE, \dots) } \description{ Species tolerances and sample heterogeneities. } \details{ Function to compute species tolerances and site heterogeneity measures from unimodal ordinations (CCA & CA). Implements Eq 6.47 and 6.48 from the Canoco 4.5 Reference Manual (pages 178--179). } \value{ Matrix of tolerances/heterogeneities with some additional attributes: \code{which}, \code{scaling}, and \code{N2}, the latter of which will be \code{NA} if \code{useN2 = FALSE}. } \author{Gavin L. Simpson} \arguments{ \item{x}{object of class \code{"cca"}.} \item{choices}{numeric; which ordination axes to compute tolerances and heterogeneities for. Defaults to axes 1 and 2.} \item{which}{character; one of \code{"species"} or \code{"sites"}, indicating whether species tolerances or sample heterogeneities respectively are computed.} \item{scaling}{character or numeric; the ordination scaling to use. See \code{\link{scores.cca}} for details.} \item{hill}{logical; if \code{scaling} is a character, these control whether Hill's scaling is used for (C)CA respectively. See \code{\link{scores.cca}} for details.} \item{useN2}{logical; should the bias in the tolerances / heterogeneities be reduced via scaling by Hill's N2?} \item{\dots}{arguments passed to other methods.} } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ ., data = dune.env) ## defaults to species tolerances tolerance(mod) ## sample heterogeneities for CCA axes 1:6 tolerance(mod, which = "sites", choices = 1:6) } vegan/man/MOStest.Rd0000644000176200001440000001755113156750403013767 0ustar liggesusers\encoding{UTF-8} \name{MOStest} \alias{MOStest} \alias{plot.MOStest} \alias{fieller.MOStest} \alias{profile.MOStest} \alias{confint.MOStest} \title{ Mitchell-Olds \& Shaw Test for the Location of Quadratic Extreme } \description{ Mitchell-Olds & Shaw test concerns the location of the highest (hump) or lowest (pit) value of a quadratic curve at given points. Typically, it is used to study whether the quadratic hump or pit is located within a studied interval. The current test is generalized so that it applies generalized linear models (\code{\link{glm}}) with link function instead of simple quadratic curve. The test was popularized in ecology for the analysis of humped species richness patterns (Mittelbach et al. 2001), but it is more general. With logarithmic link function, the quadratic response defines the Gaussian response model of ecological gradients (ter Braak & Looman 1986), and the test can be used for inspecting the location of Gaussian optimum within a given range of the gradient. It can also be used to replace Tokeshi's test of \dQuote{bimodal} species frequency distribution. } \usage{ MOStest(x, y, interval, ...) \method{plot}{MOStest}(x, which = c(1,2,3,6), ...) fieller.MOStest(object, level = 0.95) \method{profile}{MOStest}(fitted, alpha = 0.01, maxsteps = 10, del = zmax/5, ...) \method{confint}{MOStest}(object, parm = 1, level = 0.95, ...) } \arguments{ \item{x}{The independent variable or plotting object in \code{plot}. } \item{y}{The dependent variable. } \item{interval}{The two points at which the test statistic is evaluated. If missing, the extremes of \code{x} are used. } \item{which}{Subset of plots produced. Values \code{which=1} and \code{2} define plots specific to \code{MOStest} (see Details), and larger values select graphs of \code{\link{plot.lm}} (minus 2). } \item{object, fitted}{A result object from \code{MOStest}.} \item{level}{The confidence level required.} \item{alpha}{Maximum significance level allowed.} \item{maxsteps}{Maximum number of steps in the profile.} \item{del}{A step length parameter for the profile (see code).} \item{parm}{Ignored.} \item{\dots}{ Other variables passed to functions. Function \code{MOStest} passes these to \code{\link{glm}} so that these can include \code{\link{family}}. The other functions pass these to underlying graphical functions. } } \details{ The function fits a quadratic curve \eqn{\mu = b_0 + b_1 x + b_2 x^2} with given \code{\link{family}} and link function. If \eqn{b_2 < 0}, this defines a unimodal curve with highest point at \eqn{u = -b_1/(2 b_2)} (ter Braak & Looman 1986). If \eqn{b_2 > 0}, the parabola has a minimum at \eqn{u} and the response is sometimes called \dQuote{bimodal}. The null hypothesis is that the extreme point \eqn{u} is located within the interval given by points \eqn{p_1} and \eqn{p_2}. If the extreme point \eqn{u} is exactly at \eqn{p_1}, then \eqn{b_1 = 0} on shifted axis \eqn{x - p_1}. In the test, origin of \code{x} is shifted to the values \eqn{p_1} and \eqn{p_2}, and the test statistic is based on the differences of deviances between the original model and model where the origin is forced to the given location using the standard \code{\link{anova.glm}} function (Oksanen et al. 2001). Mitchell-Olds & Shaw (1987) used the first degree coefficient with its significance as estimated by the \code{\link{summary.glm}} function. This give identical results with Normal error, but for other error distributions it is preferable to use the test based on differences in deviances in fitted models. The test is often presented as a general test for the location of the hump, but it really is dependent on the quadratic fitted curve. If the hump is of different form than quadratic, the test may be insignificant. Because of strong assumptions in the test, you should use the support functions to inspect the fit. Function \code{plot(..., which=1)} displays the data points, fitted quadratic model, and its approximate 95\% confidence intervals (2 times SE). Function \code{plot} with \code{which = 2} displays the approximate confidence interval of the polynomial coefficients, together with two lines indicating the combinations of the coefficients that produce the evaluated points of \code{x}. Moreover, the cross-hair shows the approximate confidence intervals for the polynomial coefficients ignoring their correlations. Higher values of \code{which} produce corresponding graphs from \code{\link{plot.lm}}. That is, you must add 2 to the value of \code{which} in \code{\link{plot.lm}}. Function \code{fieller.MOStest} approximates the confidence limits of the location of the extreme point (hump or pit) using Fieller's theorem following ter Braak & Looman (1986). The test is based on quasideviance except if the \code{\link{family}} is \code{poisson} or \code{binomial}. Function \code{profile} evaluates the profile deviance of the fitted model, and \code{confint} finds the profile based confidence limits following Oksanen et al. (2001). The test is typically used in assessing the significance of diversity hump against productivity gradient (Mittelbach et al. 2001). It also can be used for the location of the pit (deepest points) instead of the Tokeshi test. Further, it can be used to test the location of the the Gaussian optimum in ecological gradient analysis (ter Braak & Looman 1986, Oksanen et al. 2001). } \value{ The function is based on \code{\link{glm}}, and it returns the result of object of \code{glm} amended with the result of the test. The new items in the \code{MOStest} are: \item{isHump }{\code{TRUE} if the response is a hump.} \item{isBracketed}{\code{TRUE} if the hump or the pit is bracketed by the evaluated points.} \item{hump}{Sorted vector of location of the hump or the pit and the points where the test was evaluated.} \item{coefficients}{Table of test statistics and their significances.} } \references{ Mitchell-Olds, T. & Shaw, R.G. 1987. Regression analysis of natural selection: statistical inference and biological interpretation. \emph{Evolution} 41, 1149--1161. Mittelbach, G.C. Steiner, C.F., Scheiner, S.M., Gross, K.L., Reynolds, H.L., Waide, R.B., Willig, R.M., Dodson, S.I. & Gough, L. 2001. What is the observed relationship between species richness and productivity? \emph{Ecology} 82, 2381--2396. Oksanen, J., Läärä, E., Tolonen, K. & Warner, B.G. 2001. Confidence intervals for the optimum in the Gaussian response function. \emph{Ecology} 82, 1191--1197. ter Braak, C.J.F & Looman, C.W.N 1986. Weighted averaging, logistic regression and the Gaussian response model. \emph{Vegetatio} 65, 3--11. } \author{Jari Oksanen } \note{ Function \code{fieller.MOStest} is based on package \pkg{optgrad} in the Ecological Archives (\url{https://figshare.com/articles/Full_Archive/3521975}) accompanying Oksanen et al. (2001). The Ecological Archive package \pkg{optgrad} also contains profile deviance method for the location of the hump or pit, but the current implementation of \code{profile} and \code{confint} rather follow the example of \code{\link[MASS]{profile.glm}} and \code{\link[MASS]{confint.glm}} in the \pkg{MASS} package. } \seealso{The no-interaction model can be fitted with \code{\link{humpfit}}. } \examples{ ## The Al-Mufti data analysed in humpfit(): mass <- c(140,230,310,310,400,510,610,670,860,900,1050,1160,1900,2480) spno <- c(1, 4, 3, 9, 18, 30, 20, 14, 3, 2, 3, 2, 5, 2) mod <- MOStest(mass, spno) ## Insignificant mod ## ... but inadequate shape of the curve op <- par(mfrow=c(2,2), mar=c(4,4,1,1)+.1) plot(mod) ## Looks rather like log-link with Poisson error and logarithmic biomass mod <- MOStest(log(mass), spno, family=quasipoisson) mod plot(mod) par(op) ## Confidence Limits fieller.MOStest(mod) confint(mod) plot(profile(mod)) } \keyword{ models } \keyword{ regression } vegan/man/stepacross.Rd0000644000176200001440000001560612626316320014613 0ustar liggesusers\name{stepacross} \alias{stepacross} \title{Stepacross as Flexible Shortest Paths or Extended Dissimilarities } \description{ Function \code{stepacross} tries to replace dissimilarities with shortest paths stepping across intermediate sites while regarding dissimilarities above a threshold as missing data (\code{NA}). With \code{path = "shortest"} this is the flexible shortest path (Williamson 1978, Bradfield & Kenkel 1987), and with \code{path = "extended"} an approximation known as extended dissimilarities (De'ath 1999). The use of \code{stepacross} should improve the ordination with high beta diversity, when there are many sites with no species in common. } \usage{ stepacross(dis, path = "shortest", toolong = 1, trace = TRUE, ...) } \arguments{ \item{dis}{Dissimilarity data inheriting from class \code{dist} or a an object, such as a matrix, that can be converted to a dissimilarity matrix. Functions \code{\link{vegdist}} and \code{\link{dist}} are some functions producing suitable dissimilarity data. } \item{path}{The method of stepping across (partial match) Alternative \code{"shortest"} finds the shortest paths, and \code{"extended"} their approximation known as extended dissimilarities.} \item{toolong}{Shortest dissimilarity regarded as \code{NA}. The function uses a fuzz factor, so that dissimilarities close to the limit will be made \code{NA}, too. } \item{trace}{ Trace the calculations.} \item{\dots}{Other parameters (ignored).} } \details{ Williamson (1978) suggested using flexible shortest paths to estimate dissimilarities between sites which have nothing in common, or no shared species. With \code{path = "shortest"} function \code{stepacross} replaces dissimilarities that are \code{toolong} or longer with \code{NA}, and tries to find shortest paths between all sites using remaining dissimilarities. Several dissimilarity indices are semi-metric which means that they do not obey the triangle inequality \eqn{d_{ij} \leq d_{ik} + d_{kj}}{d[ij] <= d[ik] + d[kj]}, and shortest path algorithm can replace these dissimilarities as well, even when they are shorter than \code{toolong}. De'ath (1999) suggested a simplified method known as extended dissimilarities, which are calculated with \code{path = "extended"}. In this method, dissimilarities that are \code{toolong} or longer are first made \code{NA}, and then the function tries to replace these \code{NA} dissimilarities with a path through single stepping stone points. If not all \code{NA} could be replaced with one pass, the function will make new passes with updated dissimilarities as long as all \code{NA} are replaced with extended dissimilarities. This mean that in the second and further passes, the remaining \code{NA} dissimilarities are allowed to have more than one stepping stone site, but previously replaced dissimilarities are not updated. Further, the function does not consider dissimilarities shorter than \code{toolong}, although some of these could be replaced with a shorter path in semi-metric indices, and used as a part of other paths. In optimal cases, the extended dissimilarities are equal to shortest paths, but they may be longer. As an alternative to defining too long dissimilarities with parameter \code{toolong}, the input dissimilarities can contain \code{NA}s. If \code{toolong} is zero or negative, the function does not make any dissimilarities into \code{NA}. If there are no \code{NA}s in the input and \code{toolong = 0}, \code{path = "shortest"} will find shorter paths for semi-metric indices, and \code{path = "extended"} will do nothing. Function \code{\link{no.shared}} can be used to set dissimilarities to \code{NA}. If the data are disconnected or there is no path between all points, the result will contain \code{NA}s and a warning is issued. Several methods cannot handle \code{NA} dissimilarities, and this warning should be taken seriously. Function \code{\link{distconnected}} can be used to find connected groups and remove rare outlier observations or groups of observations. Alternative \code{path = "shortest"} uses Dijkstra's method for finding flexible shortest paths, implemented as priority-first search for dense graphs (Sedgewick 1990). Alternative \code{path = "extended"} follows De'ath (1999), but implementation is simpler than in his code. } \value{ Function returns an object of class \code{dist} with extended dissimilarities (see functions \code{\link{vegdist}} and \code{\link{dist}}). The value of \code{path} is appended to the \code{method} attribute. } \references{ Bradfield, G.E. & Kenkel, N.C. (1987). Nonlinear ordination using flexible shortest path adjustment of ecological distances. \emph{Ecology} 68, 750--753. De'ath, G. (1999). Extended dissimilarity: a method of robust estimation of ecological distances from high beta diversity data. \emph{Plant Ecol.} 144, 191--199. Sedgewick, R. (1990). \emph{Algorithms in C}. Addison Wesley. Williamson, M.H. (1978). The ordination of incidence data. \emph{J. Ecol.} 66, 911-920. } \author{ Jari Oksanen} \note{ The function changes the original dissimilarities, and not all like this. It may be best to use the function only when you really \emph{must}: extremely high beta diversity where a large proportion of dissimilarities are at their upper limit (no species in common). Semi-metric indices vary in their degree of violating the triangle inequality. Morisita and Horn--Morisita indices of \code{\link{vegdist}} may be very strongly semi-metric, and shortest paths can change these indices very much. Mountford index violates basic rules of dissimilarities: non-identical sites have zero dissimilarity if species composition of the poorer site is a subset of the richer. With Mountford index, you can find three sites \eqn{i, j, k} so that \eqn{d_{ik} = 0}{d[ik] = 0} and \eqn{d_{jk} = 0}{d[jk] = 0}, but \eqn{d_{ij} > 0}{d[ij] > 0}. The results of \code{stepacross} on Mountford index can be very weird. If \code{stepacross} is needed, it is best to try to use it with more metric indices only. } \seealso{ Function \code{\link{distconnected}} can find connected groups in disconnected data, and function \code{\link{no.shared}} can be used to set dissimilarities as \code{NA}. See \code{\link{swan}} for an alternative approach. Function \code{stepacross} is an essential component in \code{\link{isomap}} and \code{\link{cophenetic.spantree}}. } \examples{ # There are no data sets with high beta diversity in vegan, but this # should give an idea. data(dune) dis <- vegdist(dune) edis <- stepacross(dis) plot(edis, dis, xlab = "Shortest path", ylab = "Original") ## Manhattan distance have no fixed upper limit. dis <- vegdist(dune, "manhattan") is.na(dis) <- no.shared(dune) dis <- stepacross(dis, toolong=0) } \keyword{multivariate } vegan/man/indpower.Rd0000644000176200001440000000506012626316320014245 0ustar liggesusers\encoding{UTF-8} \name{indpower} \alias{indpower} \title{Indicator Power of Species} \description{ Indicator power calculation of Halme et al. (2009) or the congruence between indicator and target species. } \usage{ indpower(x, type = 0) } \arguments{ \item{x}{Community data frame or matrix. } \item{type}{The type of statistic to be returned. See Details for explanation.} } \details{ Halme et al. (2009) described an index of indicator power defined as \eqn{IP_I = \sqrt{a \times b}}{IP_I = sqrt(a*b)}, where \eqn{a = S / O_I} and \eqn{b = 1 - (O_T - S) / (N - O_I)}. \eqn{N} is the number of sites, \eqn{S} is the number of shared occurrences of the indicator (\eqn{I}) and the target (\eqn{T}) species. \eqn{O_I} and \eqn{O_T} are number of occurrences of the indicator and target species. The \code{type} argument in the function call enables to choose which statistic to return. \code{type = 0} returns \eqn{IP_I}, \code{type = 1} returns \eqn{a}, \code{type = 2} returns \eqn{b}. Total indicator power (TIP) of an indicator species is the column mean (without its own value, see examples). Halme et al. (2009) explain how to calculate confidence intervals for these statistics, see Examples. } \value{ A matrix with indicator species as rows and target species as columns (this is indicated by the first letters of the row/column names). } \references{ Halme, P., \enc{Mönkkönen}{Monkkonen}, M., Kotiaho, J. S, \enc{Ylisirniö}{Ylisirnio}, A-L. 2009. Quantifying the indicator power of an indicator species. \emph{Conservation Biology} 23: 1008--1016. } \author{Peter Solymos} \seealso{ \code{\link[labdsv]{indval}} (package \pkg{labdsv}) for the indicator species analysis of \enc{Dufrêne}{Dufrene} & Legendre. Function \code{\link{beals}} estimates individual cell probabilities of species occurrences. } \examples{ data(dune) ## IP values ip <- indpower(dune) ## and TIP values diag(ip) <- NA (TIP <- rowMeans(ip, na.rm=TRUE)) ## p value calculation for a species ## from Halme et al. 2009 ## i is ID for the species i <- 1 fun <- function(x, i) indpower(x)[i,-i] ## 'c0' randomizes species occurrences os <- oecosimu(dune, fun, "c0", i=i, nsimul=99) ## get z values from oecosimu output z <- os$oecosimu$z ## p-value (p <- sum(z) / sqrt(length(z))) ## 'heterogeneity' measure (chi2 <- sum((z - mean(z))^2)) pchisq(chi2, df=length(z)-1) ## Halme et al.'s suggested output out <- c(TIP=TIP[i], significance=p, heterogeneity=chi2, minIP=min(fun(dune, i=i)), varIP=sd(fun(dune, i=i)^2)) out } \keyword{ multivariate } vegan/man/SSarrhenius.Rd0000644000176200001440000001222613231354436014671 0ustar liggesusers\name{SSarrhenius} \alias{SSarrhenius} \alias{SSlomolino} \alias{SSgitay} \alias{SSgleason} \title{ Self-Starting nls Species-Area Models } \description{ These functions provide self-starting species-area models for non-linear regression (\code{\link{nls}}). They can also be used for fitting species accumulation models in \code{\link{fitspecaccum}}. These models (and many more) are reviewed by Dengler (2009). } \usage{ SSarrhenius(area, k, z) SSgleason(area, k, slope) SSgitay(area, k, slope) SSlomolino(area, Asym, xmid, slope) } \arguments{ \item{area}{ Area or size of the sample: the independent variable. } \item{k, z, slope, Asym, xmid}{ Estimated model parameters: see Details. } } \details{ All these functions are assumed to be used for species richness (number of species) as the independent variable, and area or sample size as the independent variable. Basically, these define least squares models of untransformed data, and will differ from models for transformed species richness or models with non-Gaussian error. The Arrhenius model (\code{SSarrhenius}) is the expression \code{k*area^z}. This is the most classical model that can be found in any textbook of ecology (and also in Dengler 2009). Parameter \code{z} is the steepness of the species-area curve, and \code{k} is the expected number of species in a unit area. The Gleason model (\code{SSgleason}) is a linear expression \code{k + slope*log(area)} (Dengler 200). This is a linear model, and starting values give the final estimates; it is provided to ease comparison with other models. The Gitay model (\code{SSgitay}) is a quadratic logarithmic expression \code{(k + slope*log(area))^2} (Gitay et al. 1991, Dengler 2009). Parameter \code{slope} is the steepness of the species-area curve, and \code{k} is the square root of expected richness in a unit area. The Lomolino model (\code{SSlomolino}) is \code{Asym/(1 + slope^log(xmid/area))} (Lomolino 2000, Dengler 2009). Parameter \code{Asym} is the asymptotic maximum number of species, \code{slope} is the maximum slope of increase of richness, and \code{xmid} is the area where half of the maximum richness is achieved. In addition to these models, several other models studied by Dengler (2009) are available in standard \R self-starting models: Michaelis-Menten (\code{\link{SSmicmen}}), Gompertz (\code{\link{SSgompertz}}), logistic (\code{\link{SSlogis}}), Weibull (\code{\link{SSweibull}}), and some others that may be useful. } \value{ Numeric vector of the same length as \code{area}. It is the value of the expression of each model. If all arguments are names of objects the gradient matrix with respect to these names is attached as an attribute named \code{gradient}. } \references{ Dengler, J. (2009) Which function describes the species-area relationship best? A review and empirical evaluation. \emph{Journal of Biogeography} 36, 728--744. Gitay, H., Roxburgh, S.H. & Wilson, J.B. (1991) Species-area relationship in a New Zealand tussock grassland, with implications for nature reserve design and for community structure. \emph{Journal of Vegetation Science} 2, 113--118. Lomolino, M. V. (2000) Ecology's most general, yet protean pattern: the species-area relationship. \emph{Journal of Biogeography} 27, 17--26. } \author{ Jari Oksanen. } \seealso{ \code{\link{nls}}, \code{\link{fitspecaccum}}. } \examples{ ## Get species area data: sipoo.area gives the areas of islands example(sipoo) S <- specnumber(sipoo) plot(S ~ sipoo.area, xlab = "Island Area (ha)", ylab = "Number of Species", ylim = c(1, max(S))) ## The Arrhenius model marr <- nls(S ~ SSarrhenius(sipoo.area, k, z)) marr ## confidence limits from profile likelihood confint(marr) ## draw a line xtmp <- seq(min(sipoo.area), max(sipoo.area), len=51) lines(xtmp, predict(marr, newdata=data.frame(sipoo.area = xtmp)), lwd=2) ## The normal way is to use linear regression on log-log data, ## but this will be different from the previous: mloglog <- lm(log(S) ~ log(sipoo.area)) mloglog lines(xtmp, exp(predict(mloglog, newdata=data.frame(sipoo.area=xtmp))), lty=2) ## Gleason: log-linear mgle <- nls(S ~ SSgleason(sipoo.area, k, slope)) lines(xtmp, predict(mgle, newdata=data.frame(sipoo.area=xtmp)), lwd=2, col=2) ## Gitay: quadratic of log-linear mgit <- nls(S ~ SSgitay(sipoo.area, k, slope)) lines(xtmp, predict(mgit, newdata=data.frame(sipoo.area=xtmp)), lwd=2, col = 3) ## Lomolino: using original names of the parameters (Lomolino 2000): mlom <- nls(S ~ SSlomolino(sipoo.area, Smax, A50, Hill)) mlom lines(xtmp, predict(mlom, newdata=data.frame(sipoo.area=xtmp)), lwd=2, col = 4) ## One canned model of standard R: mmic <- nls(S ~ SSmicmen(sipoo.area, slope, Asym)) lines(xtmp, predict(mmic, newdata = data.frame(sipoo.area=xtmp)), lwd =2, col = 5) legend("bottomright", c("Arrhenius", "log-log linear", "Gleason", "Gitay", "Lomolino", "Michaelis-Menten"), col=c(1,1,2,3,4,5), lwd=c(2,1,2,2,2,2), lty=c(1,2,1,1,1,1)) ## compare models (AIC) allmods <- list(Arrhenius = marr, Gleason = mgle, Gitay = mgit, Lomolino = mlom, MicMen= mmic) sapply(allmods, AIC) } \keyword{ models } vegan/man/ordiarrows.Rd0000644000176200001440000001014112730061270014602 0ustar liggesusers\name{ordiarrows} \alias{ordiarrows} \alias{ordisegments} \alias{ordigrid} \title{Add Arrows and Line Segments to Ordination Diagrams} \description{ Functions to add arrows, line segments, regular grids of points. The ordination diagrams can be produced by \code{vegan} \code{\link{plot.cca}}, \code{\link{plot.decorana}} or \code{\link{ordiplot}}. } \usage{ ordiarrows(ord, groups, levels, replicates, order.by, display = "sites", col = 1, show.groups, startmark, label = FALSE, length = 0.1, ...) ordisegments(ord, groups, levels, replicates, order.by, display = "sites", col = 1, show.groups, label = FALSE, ...) ordigrid(ord, levels, replicates, display = "sites", lty = c(1,1), col = c(1,1), lwd = c(1,1), ...) } \arguments{ \item{ord}{An ordination object or an \code{\link{ordiplot}} object. } \item{groups}{Factor giving the groups for which the graphical item is drawn. } \item{levels, replicates}{Alternatively, regular groups can be defined with arguments \code{levels} and \code{replicates}, where \code{levels} gives the number of groups, and \code{replicates} the number of successive items at the same group.} \item{order.by}{Order points by increasing order of this variable within \code{groups}. Reverse sign of the variable for decreasing ordering.} \item{display}{Item to displayed. } \item{show.groups}{Show only given groups. This can be a vector, or \code{TRUE} if you want to show items for which condition is \code{TRUE}. This argument makes it possible to use different colours and line types for groups. The default is to show all groups. } \item{label}{Label the \code{groups} by their names. In \code{ordiellipse}, \code{ordihull} and \code{ordispider} the the group name is in the centroid of the object, in \code{ordiarrows} in the start of the arrow, and in \code{ordisegments} at both ends. \code{ordiellipse} and \code{ordihull} use standard \code{\link{text}}, and others use \code{\link{ordilabel}}.} \item{startmark}{plotting character used to mark the first item. The default is to use no mark, and for instance, \code{startmark = 1} will draw a circle. For other plotting characters, see \code{pch} in \code{\link{points}}. } \item{col}{Colour of lines, \code{label} borders and \code{startmark} in \code{ordiarrows} and \code{ordisegments}. This can be a vector recycled for \code{groups}. In \code{ordigrid} it can be a vector of length 2 used for \code{levels} and \code{replicates}.} \item{length}{Length of edges of the arrow head (in inches).} \item{lty, lwd}{Line type, line width used for \code{level}s and \code{replicate}s in \code{ordigrid}.} \item{\dots}{Parameters passed to graphical functions such as \code{\link{lines}}, \code{\link{segments}}, \code{\link{arrows}}, or to \code{\link{scores}} to select axes and scaling etc. } } \details{ Function \code{ordiarrows} draws \code{\link{arrows}} and \code{ordisegments} draws line \code{\link{segments}} between successive items in the groups. Function \code{ordigrid} draws line \code{\link{segments}} both within the groups and for the corresponding items among the groups. } \note{These functions add graphical items to ordination graph: You must draw a graph first. } \author{ Jari Oksanen } \seealso{The functions pass parameters to basic graphical functions, and you may wish to change the default values in \code{\link{arrows}}, \code{\link{lines}} and \code{\link{segments}}. You can pass parameters to \code{\link{scores}} as well. } \examples{ example(pyrifos) mod <- rda(pyrifos) plot(mod, type = "n") ## Annual succession by ditches, colour by dose ordiarrows(mod, ditch, label = TRUE, col = as.numeric(dose)) legend("topright", levels(dose), lty=1, col=1:5, title="Dose") ## Show only control and highest Pyrifos treatment plot(mod, type = "n") ordiarrows(mod, ditch, label = TRUE, show.groups = c("2", "3", "5", "11")) ordiarrows(mod, ditch, label = TRUE, show = c("6", "9"), col = 2) legend("topright", c("Control", "Pyrifos 44"), lty = 1, col = c(1,2)) } \keyword{aplot } vegan/man/clamtest.Rd0000644000176200001440000001314412727676571014257 0ustar liggesusers\name{clamtest} \alias{clamtest} \alias{summary.clamtest} \alias{plot.clamtest} \title{ Multinomial Species Classification Method (CLAM) } \description{ The CLAM statistical approach for classifying generalists and specialists in two distinct habitats is described in Chazdon et al. (2011). } \usage{ clamtest(comm, groups, coverage.limit = 10, specialization = 2/3, npoints = 20, alpha = 0.05/20) \method{summary}{clamtest}(object, ...) \method{plot}{clamtest}(x, xlab, ylab, main, pch = 21:24, col.points = 1:4, col.lines = 2:4, lty = 1:3, position = "bottomright", ...) } \arguments{ \item{comm}{ Community matrix, consisting of counts. } \item{groups}{ A vector identifying the two habitats. Must have exactly two unique values or levels. Habitat IDs in the grouping vector must match corresponding rows in the community matrix \code{comm}. } \item{coverage.limit}{ Integer, the sample coverage based correction is applied to rare species with counts below this limit. Sample coverage is calculated separately for the two habitats. Sample relative abundances are used for species with higher than or equal to \code{coverage.limit} total counts per habitat. } \item{specialization}{ Numeric, specialization threshold value between 0 and 1. The value of \eqn{2/3} represents \sQuote{supermajority} rule, while a value of \eqn{1/2} represents a \sQuote{simple majority} rule to assign shared species as habitat specialists. } \item{npoints}{ Integer, number of points used to determine the boundary lines in the plots. } \item{alpha}{ Numeric, nominal significance level for individual tests. The default value reduces the conventional limit of \eqn{0.05} to account for overdispersion and multiple testing for several species simultaneously. However, the is no firm reason for exactly this limit. } \item{x, object}{ Fitted model object of class \code{"clamtest"}. } \item{xlab, ylab}{ Labels for the plot axes. } \item{main}{ Main title of the plot. } \item{pch, col.points}{ Symbols and colors used in plotting species groups. } \item{lty, col.lines}{ Line types and colors for boundary lines in plot to separate species groups. } \item{position}{ Position of figure legend, see \code{\link{legend}} for specification details. Legend not shown if \code{position = NULL}. } \item{\dots}{ Additional arguments passed to methods. } } \details{ The method uses a multinomial model based on estimated species relative abundance in two habitats (A, B). It minimizes bias due to differences in sampling intensities between two habitat types as well as bias due to insufficient sampling within each habitat. The method permits a robust statistical classification of habitat specialists and generalists, without excluding rare species \emph{a priori} (Chazdon et al. 2011). Based on a user-defined \code{specialization} threshold, the model classifies species into one of four groups: (1) generalists; (2) habitat A specialists; (3) habitat B specialists; and (4) too rare to classify with confidence. } \value{ A data frame (with class attribute \code{"clamtest"}), with columns: \itemize{ \item{\code{Species}:}{ species name (column names from \code{comm}),} \item{\code{Total_*A*}:}{ total count in habitat A,} \item{\code{Total_*B*}:}{ total count in habitat B,} \item{\code{Classes}:}{ species classification, a factor with levels \code{Generalist}, \code{Specialist_*A*}, \code{Specialist_*B*}, and \code{Too_rare}.} } \code{*A*} and \code{*B*} are placeholders for habitat names/labels found in the data. The \code{summary} method returns descriptive statistics of the results. The \code{plot} method returns values invisibly and produces a bivariate scatterplot of species total abundances in the two habitats. Symbols and boundary lines are shown for species groups. } \references{ Chazdon, R. L., Chao, A., Colwell, R. K., Lin, S.-Y., Norden, N., Letcher, S. G., Clark, D. B., Finegan, B. and Arroyo J. P.(2011). A novel statistical method for classifying habitat generalists and specialists. \emph{Ecology} \bold{92}, 1332--1343. } \author{ Peter Solymos \email{solymos@ualberta.ca} } \note{ The code was tested against standalone CLAM software provided on the website of Anne Chao (\url{http://chao.stat.nthu.edu.tw/wordpress/}); minor inconsistencies were found, especially for finding the threshold for 'too rare' species. These inconsistencies are probably due to numerical differences between the two implementation. The current \R implementation uses root finding for iso-lines instead of iterative search. The original method (Chazdon et al. 2011) has two major problems: \enumerate{ \item It assumes that the error distribution is multinomial. This is a justified choice if individuals are freely distributed, and there is no over-dispersion or clustering of individuals. In most ecological data, the variance is much higher than multinomial assumption, and therefore test statistic are too optimistic. \item The original authors suggest that multiple testing adjustment for multiple testing should be based on the number of points (\code{npoints}) used to draw the critical lines on the plot, whereas the adjustment should be based on the number of tests (i.e., tested species). The function uses the same numerical values as the original paper, but there is no automatic connection between \code{npoints} and \code{alpha} arguments, but you must work out the adjustment yourself. } } \examples{ data(mite) data(mite.env) sol <- with(mite.env, clamtest(mite, Shrub=="None", alpha=0.005)) summary(sol) head(sol) plot(sol) } \keyword{ htest } vegan/man/permatfull.Rd0000644000176200001440000003174012626316320014575 0ustar liggesusers\encoding{UTF-8} \name{permat} \alias{permatfull} \alias{permatswap} \alias{summary.permat} \alias{print.summary.permat} \alias{print.permat} \alias{plot.permat} \alias{lines.permat} \alias{as.ts.permat} \alias{as.mcmc.permat} \title{Matrix Permutation Algorithms for Presence-Absence and Count Data} \description{ Individual (for count data) or incidence (for presence-absence data) based null models can be generated for community level simulations. Options for preserving characteristics of the original matrix (rows/columns sums, matrix fill) and restricted permutations (based on strata) are discussed in the Details section.} \usage{ permatfull(m, fixedmar = "both", shuffle = "both", strata = NULL, mtype = "count", times = 99, ...) permatswap(m, method = "quasiswap", fixedmar="both", shuffle = "both", strata = NULL, mtype = "count", times = 99, burnin = 0, thin = 1, ...) \method{print}{permat}(x, digits = 3, ...) \method{summary}{permat}(object, ...) \method{print}{summary.permat}(x, digits = 2, ...) \method{plot}{permat}(x, type = "bray", ylab, xlab, col, lty, lowess = TRUE, plot = TRUE, text = TRUE, ...) \method{lines}{permat}(x, type = "bray", ...) \method{as.ts}{permat}(x, type = "bray", ...) \method{as.mcmc}{permat}(x) } \arguments{ \item{m}{A community data matrix with plots (samples) as rows and species (taxa) as columns.} \item{fixedmar}{character, stating which of the row/column sums should be preserved (\code{"none", "rows", "columns", "both"}).} \item{strata}{Numeric vector or factor with length same as \code{nrow(m)} for grouping rows within strata for restricted permutations. Unique values or levels are used.} \item{mtype}{Matrix data type, either \code{"count"} for count data, or \code{"prab"} for presence-absence type incidence data.} \item{times}{Number of permuted matrices.} \item{method}{Character for method used for the swap algorithm (\code{"swap"}, \code{"tswap"}, \code{"quasiswap"}, \code{"backtrack"}) as described for function \code{\link{make.commsim}}. If \code{mtype="count"} the \code{"quasiswap"}, \code{"swap"}, \code{"swsh"} and \code{"abuswap"} methods are available (see details).} \item{shuffle}{Character, indicating whether individuals (\code{"ind"}), samples (\code{"samp"}) or both (\code{"both"}) should be shuffled, see details.} \item{burnin}{Number of null communities discarded before proper analysis in sequential (\code{"swap", "tswap"}) methods.} \item{thin}{Number of discarded permuted matrices between two evaluations in sequential (\code{"swap", "tswap"}) methods.} \item{x, object}{Object of class \code{"permat"}} \item{digits}{Number of digits used for rounding.} \item{ylab, xlab, col, lty}{graphical parameters for the \code{plot} method.} \item{type}{Character, type of plot to be displayed: \code{"bray"} for Bray-Curtis dissimilarities, \code{"chisq"} for Chi-squared values.} \item{lowess, plot, text}{Logical arguments for the \code{plot} method, whether a locally weighted regression curve should be drawn, the plot should be drawn, and statistic values should be printed on the plot.} \item{\dots}{Other arguments passed to \code{\link{simulate.nullmodel}} or methods.} } \details{ The function \code{permatfull} is useful when matrix fill is allowed to vary, and matrix type is \code{count}. The \code{fixedmar} argument is used to set constraints for permutation. If \code{none} of the margins are fixed, cells are randomised within the matrix. If \code{rows} or \code{columns} are fixed, cells within rows or columns are randomised, respectively. If \code{both} margins are fixed, the \code{\link{r2dtable}} function is used that is based on Patefield's (1981) algorithm. For presence absence data, matrix fill should be necessarily fixed, and \code{permatfull} is a wrapper for the function \code{\link{make.commsim}}. The \code{r00, r0, c0, quasiswap} algorithms of \code{\link{make.commsim}} are used for \code{"none", "rows", "columns", "both"} values of the \code{fixedmar} argument, respectively The \code{shuffle} argument only have effect if the \code{mtype = "count"} and \code{permatfull} function is used with \code{"none", "rows", "columns"} values of \code{fixedmar}. All other cases for count data are individual based randomisations. The \code{"samp"} and \code{"both"} options result fixed matrix fill. The \code{"both"} option means that individuals are shuffled among non zero cells ensuring that there are no cell with zeros as a result, then cell (zero and new valued cells) are shuffled. The function \code{permatswap} is useful when with matrix fill (i.e. the proportion of empty cells) and row/columns sums should be kept constant. \code{permatswap} uses different kinds of swap algorithms, and row and columns sums are fixed in all cases. For presence-absence data, the \code{swap} and \code{tswap} methods of \code{\link{make.commsim}} can be used. For count data, a special swap algorithm ('swapcount') is implemented that results in permuted matrices with fixed marginals and matrix fill at the same time. The 'quasiswapcount' algorithm (\code{method="quasiswap"} and \code{mtype="count"}) uses the same trick as Carsten Dormann's \code{\link[bipartite]{swap.web}} function in the package \pkg{bipartite}. First, a random matrix is generated by the \code{\link{r2dtable}} function retaining row and column sums. Then the original matrix fill is reconstructed by sequential steps to increase or decrease matrix fill in the random matrix. These steps are based on swapping 2x2 submatrices (see 'swapcount' algorithm for details) to maintain row and column totals. This algorithm generates independent matrices in each step, so \code{burnin} and \code{thin} arguments are not considered. This is the default method, because this is not sequential (as \code{swapcount} is) so independence of subsequent matrices does not have to be checked. The \code{swapcount} algorithm (\code{method="swap"} and \code{mtype="count"}) tries to find 2x2 submatrices (identified by 2 random row and 2 random column indices), that can be swapped in order to leave column and row totals and fill unchanged. First, the algorithm finds the largest value in the submatrix that can be swapped (\eqn{d}) and whether in diagonal or antidiagonal way. Submatrices that contain values larger than zero in either diagonal or antidiagonal position can be swapped. Swap means that the values in diagonal or antidiagonal positions are decreased by \eqn{d}, while remaining cells are increased by \eqn{d}. A swap is made only if fill doesn't change. This algorithm is sequential, subsequent matrices are not independent, because swaps modify little if the matrix is large. In these cases many burnin steps and thinning is needed to get independent random matrices. Although this algorithm is implemented in C, large burnin and thin values can slow it down considerably. WARNING: according to simulations, this algorithm seems to be biased and non random, thus its use should be avoided! The algorithm \code{"swsh"} in the function \code{permatswap} is a hybrid algorithm. First, it makes binary quasiswaps to keep row and column incidences constant, then non-zero values are modified according to the \code{shuffle} argument (only \code{"samp"} and \code{"both"} are available in this case, because it is applied only on non-zero values). It also recognizes the \code{fixedmar} argument which cannot be \code{"both"} (\pkg{vegan} versions <= 2.0 had this algorithm with \code{fixedmar = "none"}). The algorithm \code{"abuswap"} produces two kinds of null models (based on \code{fixedmar="columns"} or \code{fixedmar="rows"}) as described in Hardy (2008; randomization scheme 2x and 3x, respectively). These preserve column and row occurrences, and column or row sums at the same time. (Note that similar constraints can be achieved by the non sequential \code{"swsh"} algorithm with \code{fixedmar} argument set to \code{"columns"} or \code{"rows"}, respectively.) Constraints on row/column sums, matrix fill, total sum and sums within strata can be checked by the \code{summary} method. \code{plot} method is for visually testing the randomness of the permuted matrices, especially for the sequential swap algorithms. If there are any tendency in the graph, higher \code{burnin} and \code{thin} values can help for sequential methods. New lines can be added to existing plot with the \code{lines} method. Unrestricted and restricted permutations: if \code{strata} is \code{NULL}, functions perform unrestricted permutations. Otherwise, it is used for restricted permutations. Each strata should contain at least 2 rows in order to perform randomization (in case of low row numbers, swap algorithms can be rather slow). If the design is not well balanced (i.e. same number of observations within each stratum), permuted matrices may be biased because same constraints are forced on submatrices of different dimensions. This often means, that the number of potential permutations will decrease with their dimensions. So the more constraints we put, the less randomness can be expected. The \code{plot} method is useful for graphically testing for trend and independence of permuted matrices. This is especially important when using sequential algorithms (\code{"swap", "tswap", "abuswap"}). The \code{as.ts} method can be used to extract Bray-Curtis dissimilarities or Chi-squared values as time series. This can further used in testing independence (see Examples). The method \code{as.mcmc} is useful for accessing diagnostic tools available in the \pkg{coda} package. } \value{Functions \code{permatfull} and \code{permatswap} return an object of class \code{"permat"} containing the the function call (\code{call}), the original data matrix used for permutations (\code{orig}) and a list of permuted matrices with length \code{times} (\code{perm}). The \code{summary} method returns various statistics as a list (including mean Bray-Curtis dissimilarities calculated pairwise among original and permuted matrices, Chi-square statistics, and check results of the constraints; see Examples). Note that when \code{strata} is used in the original call, summary calculation may take longer. The \code{plot} creates a plot as a side effect. The \code{as.ts} method returns an object of class \code{"ts"}. } \references{ Original references for presence-absence algorithms are given on help page of \code{\link{make.commsim}}. Hardy, O. J. (2008) Testing the spatial phylogenetic structure of local communities: statistical performances of different null models and test statistics on a locally neutral community. Journal of Ecology 96, 914--926. Patefield, W. M. (1981) Algorithm AS159. An efficient method of generating r x c tables with given row and column totals. Applied Statistics 30, 91--97. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca} and Jari Oksanen} \seealso{ For other functions to permute matrices: \code{\link{make.commsim}}, \code{\link{r2dtable}}, \code{\link{sample}}, \code{\link[bipartite]{swap.web}}. For the use of these permutation algorithms: \code{\link{oecosimu}}, \code{\link{adipart}}, \code{\link{hiersimu}}. For time-series diagnostics: \code{\link{Box.test}}, \code{\link{lag.plot}}, \code{\link{tsdiag}}, \code{\link{ar}}, \code{\link{arima}} For underlying `low level' implementation: \code{\link{commsim}} and \code{\link{nullmodel}}.} \examples{ ## A simple artificial community data matrix. m <- matrix(c( 1,3,2,0,3,1, 0,2,1,0,2,1, 0,0,1,2,0,3, 0,0,0,1,4,3 ), 4, 6, byrow=TRUE) ## Using the quasiswap algorithm to create a ## list of permuted matrices, where ## row/columns sums and matrix fill are preserved: x1 <- permatswap(m, "quasiswap") summary(x1) ## Unrestricted permutation retaining ## row/columns sums but not matrix fill: x2 <- permatfull(m) summary(x2) ## Unrestricted permutation of presence-absence type ## not retaining row/columns sums: x3 <- permatfull(m, "none", mtype="prab") x3$orig ## note: original matrix is binarized! summary(x3) ## Restricted permutation, ## check sums within strata: x4 <- permatfull(m, strata=c(1,1,2,2)) summary(x4) ## NOTE: 'times' argument usually needs to be >= 99 ## here much lower value is used for demonstration ## Not sequential algorithm data(BCI) a <- permatswap(BCI, "quasiswap", times=19) ## Sequential algorithm b <- permatswap(BCI, "abuswap", fixedmar="col", burnin=0, thin=100, times=19) opar <- par(mfrow=c(2,2)) plot(a, main="Not sequential") plot(b, main="Sequential") plot(a, "chisq") plot(b, "chisq") par(opar) ## Extract Bray-Curtis dissimilarities ## as time series bc <- as.ts(b) ## Lag plot lag.plot(bc) ## First order autoregressive model mar <- arima(bc, c(1,0,0)) mar ## Ljung-Box test of residuals Box.test(residuals(mar)) ## Graphical diagnostics tsdiag(mar) } \keyword{multivariate} \keyword{datagen} vegan/man/ordisurf.Rd0000644000176200001440000003615713231354436014271 0ustar liggesusers\name{ordisurf} \alias{ordisurf} \alias{ordisurf.default} \alias{ordisurf.formula} \alias{calibrate.ordisurf} \alias{plot.ordisurf} \title{ Fit and Plot Smooth Surfaces of Variables on Ordination. } \description{ Function \code{ordisurf} fits a smooth surface for given variable and plots the result on ordination diagram. } \usage{ \method{ordisurf}{default}(x, y, choices = c(1, 2), knots = 10, family = "gaussian", col = "red", isotropic = TRUE, thinplate = TRUE, bs = "tp", fx = FALSE, add = FALSE, display = "sites", w = weights(x, display), main, nlevels = 10, levels, npoints = 31, labcex = 0.6, bubble = FALSE, cex = 1, select = TRUE, method = "REML", gamma = 1, plot = TRUE, lwd.cl = par("lwd"), ...) \method{ordisurf}{formula}(formula, data, ...) \method{calibrate}{ordisurf}(object, newdata, ...) \method{plot}{ordisurf}(x, what = c("contour","persp","gam"), add = FALSE, bubble = FALSE, col = "red", cex = 1, nlevels = 10, levels, labcex = 0.6, lwd.cl = par("lwd"), \dots) } \arguments{ \item{x}{For \code{ordisurf} an ordination configuration, either a matrix or a result known by \code{\link{scores}}. For \code{plot.ordisurf} an object of class \code{"ordisurf"} as returned by \code{ordisurf}.} \item{y}{Variable to be plotted / modelled as a function of the ordination scores.} \item{choices}{Ordination axes. } \item{knots}{Number of initial knots in \code{\link[mgcv]{gam}} (one more than degrees of freedom). If \code{knots = 0} or \code{knots = 1} the function will fit a linear trend surface, and if \code{knots = 2} the function will fit a quadratic trend surface instead of a smooth surface. A vector of length 2 is allowed when \code{isotropic = FALSE}, with the first and second elements of \code{knots} referring to the first and second of ordination dimensions (as indicated by \code{choices}) respectively.} \item{family}{Error distribution in \code{\link[mgcv]{gam}}.} \item{col}{ Colour of contours. } \item{isotropic, thinplate}{Fit an isotropic smooth surface (i.e. same smoothness in both ordination dimensions) via \code{\link[mgcv]{gam}}. Use of \code{thinplate} is deprecated and will be removed in a future version of the package.} \item{bs}{a two letter character string indicating the smoothing basis to use. (eg \code{"tp"} for thin plate regression spline, \code{"cr"} for cubic regression spline). One of \code{c("tp", "ts", "cr", "cs", "ds", "ps", "ad")}. See \code{\link[mgcv]{smooth.terms}} for an over view of what these refer to. The default is to use thin plate splines: \code{bs = "tp"}.} \item{fx}{indicates whether the smoothers are fixed degree of freedom regression splines (\code{fx = FALSE}) or penalised regression splines (\code{fx = TRUE}). Can be a vector of length 2 for anisotropic surfaces (\code{isotropic = FALSE}). It doesn't make sense to use \code{fx = TRUE} \strong{and} \code{select = TRUE} and it is an \strong{error} to do so. A warning is issued if you specify \code{fx = TRUE} and forget to use \code{select = FALSE} though fitting continues using \code{select = FALSE}.} \item{add}{Add contours to an existing diagram or draw a new plot?} \item{display}{Type of scores known by \code{\link{scores}}: typically "sites" for ordinary site scores or "lc" for linear combination scores.} \item{w}{Prior weights on the data. Concerns mainly \code{\link{cca}} and \code{\link{decorana}} results which have nonconstant weights.} \item{main}{The main title for the plot, or as default the name of plotted variable in a new plot.} \item{nlevels, levels}{Either a vector of \code{levels} for which contours are drawn, or suggested number of contours in \code{nlevels} if \code{levels} are not supplied.} \item{npoints}{numeric; the number of locations at which to evaluate the fitted surface. This represents the number of locations in each dimension.} \item{labcex}{Label size in contours. Setting this zero will suppress labels.} \item{bubble}{Use a \dQuote{bubble plot} for points, or vary the point diameter by the value of the plotted variable. If \code{bubble} is numeric, its value is used for the maximum symbol size (as in \code{cex}), or if \code{bubble = TRUE}, the value of \code{cex} gives the maximum. The minimum size will always be \code{cex = 0.4}. The option only has an effect if \code{add = FALSE}.} \item{cex}{Character expansion of plotting symbols.} \item{select}{Logical; specify \code{\link[mgcv]{gam}} argument \code{"select"}. If this is \code{TRUE} then \code{\link[mgcv]{gam}} can add an extra penalty to each term so that it can be penalized to zero. This means that the smoothing parameter estimation that is part of fitting can completely remove terms from the model. If the corresponding smoothing parameter is estimated as zero then the extra penalty has no effect.} \item{method}{character; the smoothing parameter estimation method. Options allowed are: \code{"GCV.Cp"} uses GCV for models with unknown scale parameter and Mallows' Cp/UBRE/AIC for models with known scale; \code{"GACV.Cp"} as for \code{"GCV.Cp"} but uses GACV (Generalised Approximate CV) instead of GCV; \code{"REML"} and \code{"ML"} use restricted maximum likelihood or maximum likelihood estimation for both known and unknown scale; and \code{"P-REML"} and \code{"P-ML"} use REML or ML estimation but use a Pearson estimate of the scale.} \item{gamma}{Multiplier to inflate model degrees of freedom in GCV or UBRE/AIC score by. This effectively places an extra penalty on complex models. An oft-used value is \code{gamma = 1.4}.} \item{plot}{logical; should any plotting be done by \code{ordisurf}? Useful if all you want is the fitted response surface model.} \item{lwd.cl}{numeric; the \code{lwd} (line width) parameter to use when drawing the contour lines.} \item{formula, data}{Alternative definition of the fitted model as \code{x ~ y}, where left-hand side is the ordination \code{x} and right-hand side the single fitted continuous variable \code{y}. The variable \code{y} must be in the working environment or in the data frame or environment given by \code{data}. All other arguments of are passed to the default method.} \item{object}{An \code{ordisurf} result object.} \item{newdata}{Coordinates in two-dimensional ordination for new points.} \item{what}{character; what type of plot to produce. \code{"contour"} produces a contour plot of the response surface, see \code{\link{contour}} for details. \code{"persp"} produces a perspective plot of the same, see \code{\link{persp}} for details. \code{"gam"} plots the fitted GAM model, an object that inherits from class \code{"gam"} returned by \code{ordisurf}, see \code{\link[mgcv]{plot.gam}}.} \item{\dots}{Other parameters passed to \code{\link{scores}}, or to the graphical functions. See Note below for exceptions.} } \details{ Function \code{ordisurf} fits a smooth surface using penalised splines (Wood 2003) in \code{\link[mgcv]{gam}}, and uses \code{\link[mgcv]{predict.gam}} to find fitted values in a regular grid. The smooth surface can be fitted with an extra penalty that allows the entire smoother to be penalized back to 0 degrees of freedom, effectively removing the term from the model (see Marra & Wood, 2011). The addition of this extra penalty is invoked by setting argument \code{select} to \code{TRUE}. An alternative is to use a spline basis that includes shrinkage (\code{bs = "ts"} or \code{bs = "cs"}). \code{ordisurf()} exposes a large number of options from \code{\link[mgcv]{gam}} for specifying the basis functions used for the surface. If you stray from the defaults, do read the \strong{Notes} section below and relevant documentation in \code{\link[mgcv]{s}} and \code{\link[mgcv]{smooth.terms}}. The function plots the fitted contours with convex hull of data points either over an existing ordination diagram or draws a new plot. If \code{select = TRUE} and the smooth is effectively penalised out of the model, no contours will be plotted. \code{\link[mgcv]{gam}} determines the degree of smoothness for the fitted response surface during model fitting, unless \code{fx = TRUE}. Argument \code{method} controls how \code{\link[mgcv]{gam}} performs this smoothness selection. See \code{\link[mgcv]{gam}} for details of the available options. Using \code{"REML"} or \code{"ML"} yields p-values for smooths with the best coverage properties if such things matter to you. The function uses \code{\link{scores}} to extract ordination scores, and \code{x} can be any result object known by that function. The user can supply a vector of prior weights \code{w}. If the ordination object has weights, these will be used. In practise this means that the row totals are used as weights with \code{\link{cca}} or \code{\link{decorana}} results. If you do not like this, but want to give equal weights to all sites, you should set \code{w = NULL}. The behaviour is consistent with \code{\link{envfit}}. For complete accordance with constrained \code{\link{cca}}, you should set \code{display = "lc"}. Function \code{calibrate} returns the fitted values of the response variable. The \code{newdata} must be coordinates of points for which the fitted values are desired. The function is based on \code{\link[mgcv]{predict.gam}} and will pass extra arguments to that function. } \value{ \code{ordisurf} is usually called for its side effect of drawing the contour plot. The function returns a result object of class \code{"ordisurf"} that inherits from \code{\link[mgcv]{gam}} used internally to fit the surface, but adds an item \code{grid} that contains the data for the grid surface. The item \code{grid} has elements \code{x} and \code{y} which are vectors of axis coordinates, and element \code{z} that is a matrix of fitted values for \code{\link{contour}}. The values outside the convex hull of observed points are indicated as \code{NA} in \code{z}. The \code{\link[mgcv]{gam}} component of the result can be used for further analysis like predicting new values (see \code{\link[mgcv]{predict.gam}}). } \author{ Dave Roberts, Jari Oksanen and Gavin L. Simpson } \note{ The default is to use an isotropic smoother via \code{\link[mgcv]{s}} employing thin plate regression splines (\code{bs = "tp"}). These make sense in ordination as they have equal smoothing in all directions and are rotation invariant. However, if different degrees of smoothness along dimensions are required, an anisotropic smooth surface may be more applicable. This can be achieved through the use of \code{isotropic = FALSE}, wherein the surface is fitted via a tensor product smoother via \code{\link[mgcv]{te}} (unless \code{bs = "ad"}, in which case separate splines for each dimension are fitted using \code{\link[mgcv]{s}}). Cubic regression splines and P splines can \strong{only} be used with \code{isotropic = FALSE}. Adaptive smooths (\code{bs = "ad"}), especially in two dimensions, require a large number of observations; without many hundreds of observations, the default complexities for the smoother will exceed the number of observations and fitting will fail. To get the old behaviour of \code{ordisurf} use \code{select = FALSE}, \code{method = "GCV.Cp"}, \code{fx = FALSE}, and \code{bs = "tp"}. The latter two options are the current defaults. Graphical arguments supplied to \code{plot.ordisurf} are passed on to the underlying plotting functions, \code{contour}, \code{persp}, and \code{\link[mgcv]{plot.gam}}. The exception to this is that arguments \code{col} and \code{cex} can not currently be passed to \code{\link[mgcv]{plot.gam}} because of a bug in the way that function evaluates arguments when arranging the plot. A work-around is to call \code{\link[mgcv]{plot.gam}} directly on the result of a call to \code{ordisurf}. See the Examples for an illustration of this. } \section{Warning}{ The fitted GAM is a regression model and has the usual assumptions of such models. Of particular note is the assumption of independence of residuals. If the observations are not independent (e.g. they are repeat measures on a set of objects, or from an experimental design, \emph{inter alia}) do not trust the \emph{p}-values from the GAM output. If you need further control (i.e. to add additional fixed effects to the model, or use more complex smoothers), extract the ordination scores using the \code{scores} function and then generate your own \code{\link[mgcv]{gam}} call. } \references{ Marra, G.P & Wood, S.N. (2011) Practical variable selection for generalized additive models. \emph{Comput. Stat. Data Analysis} 55, 2372--2387. Wood, S.N. (2003) Thin plate regression splines. \emph{J. R. Statist. Soc. B} 65, 95--114. } \seealso{ For basic routines \code{\link[mgcv]{gam}}, and \code{\link{scores}}. Function \code{\link{envfit}} provides a more traditional and compact alternative. } \examples{ data(varespec) data(varechem) vare.dist <- vegdist(varespec) vare.mds <- monoMDS(vare.dist) ordisurf(vare.mds ~ Baresoil, varechem, bubble = 5) ## as above but without the extra penalties on smooth terms, ## and using GCV smoothness selection (old behaviour of `ordisurf()`): ordisurf(vare.mds ~ Baresoil, varechem, col = "blue", add = TRUE, select = FALSE, method = "GCV.Cp") ## Cover of Cladina arbuscula fit <- ordisurf(vare.mds ~ Cladarbu, varespec, family=quasipoisson) ## Get fitted values calibrate(fit) ## Variable selection via additional shrinkage penalties ## This allows non-significant smooths to be selected out ## of the model not just to a linear surface. There are 2 ## options available: ## - option 1: `select = TRUE` --- the *default* ordisurf(vare.mds ~ Baresoil, varechem, method = "REML", select = TRUE) ## - option 2: use a basis with shrinkage ordisurf(vare.mds ~ Baresoil, varechem, method = "REML", bs = "ts") ## or bs = "cs" with `isotropic = FALSE` ## Plot method plot(fit, what = "contour") ## Plotting the "gam" object plot(fit, what = "gam") ## 'col' and 'cex' not passed on ## or via plot.gam directly library(mgcv) plot.gam(fit, cex = 2, pch = 1, col = "blue") ## 'col' effects all objects drawn... ### controlling the basis functions used ## Use Duchon splines ordisurf(vare.mds ~ Baresoil, varechem, bs = "ds") ## A fixed degrees of freedom smooth, must use 'select = FALSE' ordisurf(vare.mds ~ Baresoil, varechem, knots = 4, fx = TRUE, select = FALSE) ## An anisotropic smoother with cubic regression spline bases ordisurf(vare.mds ~ Baresoil, varechem, isotropic = FALSE, bs = "cr", knots = 4) ## An anisotropic smoother with cubic regression spline with ## shrinkage bases & different degrees of freedom in each dimension ordisurf(vare.mds ~ Baresoil, varechem, isotropic = FALSE, bs = "cs", knots = c(3,4), fx = TRUE, select = FALSE) } \keyword{ multivariate } \keyword{ aplot } vegan/man/pyrifos.Rd0000644000176200001440000000372313174616027014123 0ustar liggesusers\name{pyrifos} \alias{pyrifos} \docType{data} \title{Response of Aquatic Invertebrates to Insecticide Treatment} \description{ The data are log transformed abundances of aquatic invertebrate in twelve ditches studied in eleven times before and after an insecticide treatment. } \usage{data(pyrifos)} \format{ A data frame with 132 observations on the log-transformed (\code{log(10*x + 1)}) abundances of 178 species. There are only twelve sites (ditches, mesocosms), but these were studied repeatedly in eleven occasions. The treatment levels, treatment times, or ditch ID's are not in the data frame, but the data are very regular, and the example below shows how to obtain these external variables. } \details{ This data set was obtained from an experiment in outdoor experimental ditches. Twelve mesocosms were allocated at random to treatments; four served as controls, and the remaining eight were treated once with the insecticide chlorpyrifos, with nominal dose levels of 0.1, 0.9, 6, and 44 \eqn{\mu}{mu }g/ L in two mesocosms each. The example data set invertebrates. Sampling was done 11 times, from week -4 pre-treatment through week 24 post-treatment, giving a total of 132 samples (12 mesocosms times 11 sampling dates), see van den Brink & ter Braak (1999) for details. The data set contains only the species data, but the example below shows how to obtain the treatment, time and ditch ID variables. } \source{ CANOCO 4 example data, with the permission of Cajo J. F. ter Braak. } \references{ van den Brink, P.J. & ter Braak, C.J.F. (1999). Principal response curves: Analysis of time-dependent multivariate responses of biological community to stress. Environmental Toxicology and Chemistry, 18, 138--148. } \examples{ data(pyrifos) ditch <- gl(12, 1, length=132) week <- gl(11, 12, labels=c(-4, -1, 0.1, 1, 2, 4, 8, 12, 15, 19, 24)) dose <- factor(rep(c(0.1, 0, 0, 0.9, 0, 44, 6, 0.1, 44, 0.9, 0, 6), 11)) } \keyword{datasets} vegan/man/ordiplot.Rd0000644000176200001440000001131513231354436014255 0ustar liggesusers\name{ordiplot} \alias{ordiplot} \alias{identify.ordiplot} \alias{scores.ordiplot} \alias{points.ordiplot} \alias{text.ordiplot} \title{ Alternative plot and identify Functions for Ordination } \description{ Ordination plot function especially for congested plots. Function \code{ordiplot} always plots only unlabelled points, but \code{identify.ordiplot} can be used to add labels to selected site, species or constraint points. Function \code{identify.ordiplot} can be used to identify points from \code{\link{plot.cca}}, \code{\link{plot.decorana}}, \code{\link{plot.procrustes}} and \code{\link{plot.rad}} as well. } \usage{ ordiplot(ord, choices = c(1, 2), type="points", display, xlim, ylim, cex = 0.7, ...) \method{identify}{ordiplot}(x, what, labels, ...) \method{points}{ordiplot}(x, what, select, ...) \method{text}{ordiplot}(x, what, labels, select, ...) } \arguments{ \item{ord}{A result from an ordination.} \item{choices}{Axes shown. } \item{type}{The type of graph which may be \code{"points"}, \code{"text"} or \code{"none"} for any ordination method.} \item{display}{Display only "sites" or "species". The default for most methods is to display both, but for \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}} it is the same as in \code{\link{plot.cca}}. } \item{xlim, ylim}{the x and y limits (min,max) of the plot.} \item{cex}{Character expansion factor for points and text.} \item{\dots}{Other graphical parameters. } \item{x}{A result object from \code{ordiplot}.} \item{what}{Items identified in the ordination plot. The types depend on the kind of plot used. Most methods know \code{sites} and \code{species}, functions \code{\link{cca}} and \code{\link{rda}} know in addition \code{constraints} (for `LC' scores), \code{centroids} and \code{biplot}, and \code{\link{plot.procrustes}} ordination plot has \code{heads} and \code{points}.} \item{labels}{Optional text used for labels. Row names will be used if this is missing.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items.} } \details{ Function \code{ordiplot} draws an ordination diagram using black circles for sites and red crosses for species. It returns invisibly an object of class \code{ordiplot} which can be used by \code{identify.ordiplot} to label selected sites or species, or constraints in \code{\link{cca}} and \code{\link{rda}}. The function can handle output from several alternative ordination methods. For \code{\link{cca}}, \code{\link{rda}} and \code{\link{decorana}} it uses their \code{plot} method with option \code{type = "points"}. In addition, the \code{plot} functions of these methods return invisibly an \code{ordiplot} object which can be used by \code{identify.ordiplot} to label points. For other ordinations it relies on \code{\link{scores}} to extract the scores. For full user control of plots, it is best to call \code{ordiplot} with \code{type = "none"} and save the result, and then add sites and species using \code{points.ordiplot} or \code{text.ordiplot} which both pass all their arguments to the corresponding default graphical functions. } \value{ Function \code{ordiplot} returns invisibly an object of class \code{ordiplot} with items \code{sites}, \code{species} and \code{constraints} (if these are available in the ordination object). Function \code{identify.ordiplot} uses this object to label the point. } \author{ Jari Oksanen } \note{ The purpose of these functions is to provide similar functionality as the \code{plot}, \code{plotid} and \code{specid} methods in library \code{labdsv}. The functions are somewhat limited in parametrization, but you can call directly the standard \code{\link{identify}} and \code{\link{plot}} functions for a better user control. } \seealso{ \code{\link{identify}} for basic operations, \code{\link{plot.cca}}, \code{\link{plot.decorana}}, \code{\link{plot.procrustes}} which also produce objects for \code{identify.ordiplot} and \code{\link{scores}} for extracting scores from non-\code{vegan} ordinations. } \examples{ # Draw a plot for a non-vegan ordination (cmdscale). data(dune) dune.dis <- vegdist(wisconsin(dune)) dune.mds <- cmdscale(dune.dis, eig = TRUE) dune.mds$species <- wascores(dune.mds$points, dune, expand = TRUE) fig <- ordiplot(dune.mds, type = "none") points(fig, "sites", pch=21, col="red", bg="yellow") text(fig, "species", col="blue", cex=0.9) # Default plot of the previous using identify to label selected points \dontrun{ fig <- ordiplot(dune.mds) identify(fig, "spec")} } \keyword{ hplot } \keyword{ iplot } \keyword{ aplot } vegan/man/vegan-deprecated.Rd0000644000176200001440000001512313231354436015620 0ustar liggesusers\encoding{UTF-8} \name{vegan-deprecated} \alias{commsimulator} \alias{vegan-deprecated} %------ NOTE: ../R/vegan-deprecated.R must be synchronized with this! \title{Deprecated Functions in vegan package} %------ PLEASE: one \alias{.} for EACH ! (+ one \usage{} & \arguments{} for all) \description{ These functions are provided for compatibility with older versions of \pkg{vegan} only, and may be defunct as soon as the next release. } \usage{ commsimulator(x, method, thin=1) } \arguments{ \item{x}{Community data.} \item{method}{Null model method: either a name (character string) of a method defined in \code{\link{make.commsim}} or a \code{\link{commsim}} function.} \item{thin}{Number of discarded null communities between two evaluations of nestedness statistic in sequential methods \code{"swap"} and \code{"tswap"} (ignored with non-sequential methods)} ## density and densityplot \item{\dots}{ Other arguments passed to functions. } } \details{ %-- Either: %There are currently no deprecated functions in this package. %-- Or: %% explain *why* it's deprecated, and \code{\link{..}} to new Function \code{commsimulator} is replaced with \code{\link{make.commsim}} which defines the Null models, and functions \code{\link{nullmodel}} and \code{\link{simulate.nullmodel}} that check the input data and generate the Null model communities. Function \code{commsimulator} was used to generate a single Null model for presence/absence (binary) data. Below is a copy of its original documentation in \code{\link{oecosimu}}, where it is now replaced with \code{\link{make.commsim}}, \code{\link{nullmodel}} and \code{\link{simulate.nullmodel}}. Approximately the same documentation for these models is found in \code{\link{make.commsim}}. (However, the random number sequences for model \code{r0} differ, and you must use \code{method = "r0_old"} in \code{\link{make.commsim}} to reproduce the \code{commsimulator} results.) Function \code{commsimulator} implements binary (presence/absence) null models for community composition. The implemented models are \code{r00} which maintains the number of presences but fills these anywhere so that neither species (column) nor site (row) totals are preserved. Methods \code{r0}, \code{r1} and \code{r2} maintain the site (row) frequencies. Method \code{r0} fills presences anywhere on the row with no respect to species (column) frequencies, \code{r1} uses column marginal frequencies as probabilities, and \code{r2} uses squared column sums. Methods \code{r1} and \code{r2} try to simulate original species frequencies, but they are not strictly constrained. All these methods are reviewed by Wright et al. (1998). Method \code{c0} maintains species frequencies, but does not honour site (row) frequencies (Jonsson 2001). The other methods maintain both row and column frequencies. Methods \code{swap} and \code{tswap} implement sequential methods, where the matrix is changed only little in one step, but the changed matrix is used as an input if the next step. Methods \code{swap} and \code{tswap} inspect random 2x2 submatrices and if they are checkerboard units, the order of columns is swapped. This changes the matrix structure, but does not influence marginal sums (Gotelli & Entsminger 2003). Method \code{swap} inspects submatrices so long that a swap can be done. \enc{Miklós}{Miklos} & Podani (2004) suggest that this may lead into biased sequences, since some columns or rows may be more easily swapped, and they suggest trying a fixed number of times and doing zero to many swaps at one step. This method is implemented by method \code{tswap} or trial swap. Function \code{commsimulator} makes only one trial swap in time (which probably does nothing), but \code{oecosimu} estimates how many submatrices are expected before finding a swappable checkerboard, and uses that ratio to thin the results, so that on average one swap will be found per step of \code{tswap}. However, the checkerboard frequency probably changes during swaps, but this is not taken into account in estimating the \code{thin}. One swap still changes the matrix only little, and it may be useful to thin the results so that the statistic is only evaluated after \code{burnin} steps (and \code{thin}ned). Methods \code{quasiswap} and \code{backtracking} are not sequential, but each call produces a matrix that is independent of previous matrices, and has the same marginal totals as the original data. The recommended method is \code{quasiswap} which is much faster because it is implemented in C. Method \code{backtracking} is provided for comparison, but it is so slow that it may be dropped from future releases of \pkg{vegan} (or also implemented in C). Method \code{quasiswap} (\enc{Miklós}{Miklos} & Podani 2004) implements a method where matrix is first filled honouring row and column totals, but with integers that may be larger than one. Then the method inspects random 2x2 matrices and performs a quasiswap on them. Quasiswap is similar to ordinary swap, but it also can reduce numbers above one to ones maintaining marginal totals. Method \code{backtracking} implements a filling method with constraints both for row and column frequencies (Gotelli & Entsminger 2001). The matrix is first filled randomly using row and column frequencies as probabilities. Typically row and column sums are reached before all incidences are filled in. After that begins \dQuote{backtracking}, where some of the points are removed, and then filling is started again, and this backtracking is done so may times that all incidences will be filled into matrix. The \code{quasiswap} method is not sequential, but it produces a random incidence matrix with given marginal totals. } \references{ Gotelli, N.J. & Entsminger, N.J. (2001). Swap and fill algorithms in null model analysis: rethinking the knight's tour. \emph{Oecologia} 129, 281--291. Gotelli, N.J. & Entsminger, N.J. (2003). Swap algorithms in null model analysis. \emph{Ecology} 84, 532--535. Jonsson, B.G. (2001) A null model for randomization tests of nestedness in species assemblages. \emph{Oecologia} 127, 309--313. \enc{Miklós}{Miklos}, I. & Podani, J. (2004). Randomization of presence-absence matrices: comments and new algorithms. \emph{Ecology} 85, 86--92. Wright, D.H., Patterson, B.D., Mikkelson, G.M., Cutler, A. & Atmar, W. (1998). A comparative analysis of nested subset patterns of species composition. \emph{Oecologia} 113, 1--20. } \seealso{ \code{\link{Deprecated}} } \keyword{misc} vegan/man/dune.Rd0000644000176200001440000000402312626316320013347 0ustar liggesusers\name{dune} \alias{dune} \alias{dune.env} \docType{data} \title{Vegetation and Environment in Dutch Dune Meadows. } \usage{ data(dune) data(dune.env) } \description{ The dune meadow vegetation data, \code{dune}, has cover class values of 30 species on 20 sites. The corresponding environmental data frame \code{dune.env} has following entries: } \format{ \code{dune} is a data frame of observations of 30 species at 20 sites. The species names are abbreviated to 4+4 letters (see \code{\link{make.cepnames}}). The following names are changed from the original source (Jongman et al. 1987): \emph{Leontodon autumnalis} to \emph{Scorzoneroides}, and \emph{Potentilla palustris} to \emph{Comarum}. \code{dune.env} is a data frame of 20 observations on the following 5 variables: \describe{ \item{A1:}{a numeric vector of thickness of soil A1 horizon.} \item{Moisture:}{an ordered factor with levels: \code{1} < \code{2} < \code{4} < \code{5}.} %\item{Moisture}{\code{1} < \code{2} < \code{4} < \code{5}} \item{Management:}{a factor with levels: \code{BF} (Biological farming), \code{HF} (Hobby farming), \code{NM} (Nature Conservation Management), and \code{SF} (Standard Farming).} %\item{Management}{\code{BF}: Biological Farming } %\item{Management}{\code{HF}: Hobby Farming } %\item{Management}{\code{NM}: Nature Conservation Management } %\item{Management}{\code{SF}: Standard Farming } \item{Use:}{an ordered factor of land-use with levels: \code{Hayfield} < \code{Haypastu} < \code{Pasture}.} %\item{Use}{\code{Hayfield} < \code{Haypastu} < \code{Pasture}} \item{Manure:}{an ordered factor with levels: \code{0} < \code{1} < \code{2} < \code{3} < \code{4}.} %\item{Manure}{\code{0} < \code{1} < \code{2} < \code{3} < \code{4}} } } \source{ Jongman, R.H.G, ter Braak, C.J.F & van Tongeren, O.F.R. (1987). \emph{Data Analysis in Community and Landscape Ecology}. Pudoc, Wageningen. } \examples{ data(dune) data(dune.env) } \keyword{datasets} vegan/man/read.cep.Rd0000644000176200001440000000677513231350502014106 0ustar liggesusers\name{read.cep} \alias{read.cep} \title{Reads a CEP (Canoco) data file } \description{ \code{read.cep} reads a file formatted with relaxed strict CEP format used in Canoco software, among others. } \usage{ read.cep(file, positive=TRUE) } \arguments{ \item{file}{File name (character variable). } \item{positive}{Only positive entries, like in community data.} } \details{ Cornell Ecology Programs (CEP) introduced several data formats designed for punched cards. One of these was the \sQuote{condensed strict} format which was adopted by popular software DECORANA and TWINSPAN. A relaxed variant of this format was later adopted in Canoco software (ter Braak 1984). Function \code{read.cep} reads legacy files written in this format. The condensed CEP and CANOCO formats have: \itemize{ \item Two or three title cards, most importantly specifying the format and the number of items per record. \item Data in condensed format: First number on the line is the site identifier (an integer), and it is followed by pairs (\sQuote{couplets}) of numbers identifying the species and its abundance (an integer and a floating point number). \item Species and site names, given in Fortran format \code{(10A8)}: Ten names per line, eight columns for each. } With option \code{positive = TRUE} the function removes all rows and columns with zero or negative marginal sums. In community data with only positive entries, this removes empty sites and species. If data entries can be negative, this ruins data, and such data sets should be read in with option \code{positive = FALSE}. } \value{ Returns a data frame, where columns are species and rows are sites. Column and row names are taken from the CEP file, and changed into unique \R names by \code{\link{make.names}} after stripping the blanks. } \references{ ter Braak, C.J.F. (1984--): CANOCO -- a FORTRAN program for \emph{cano}nical \emph{c}ommunity \emph{o}rdination by [partial] [detrended] [canonical] correspondence analysis, principal components analysis and redundancy analysis. \emph{TNO Inst. of Applied Computer Sci., Stat. Dept. Wageningen, The Netherlands}. } \author{ Jari Oksanen } \note{ Function \code{read.cep} used Fortran to read data in \pkg{vegan} 2.4-5 and earlier, but Fortran I/O is no longer allowed in CRAN packages, and the function was re-written in \R. The original Fortran code was more robust, and there are several legacy data sets that may fail with the current version, but could be read with the previous Fortran version. Github package \pkg{cepreader} \url{https://github.com/vegandevs/cepreader/} makes available the original Fortran-based code. The \pkg{cepreader} package can also read \sQuote{free} and \sQuote{open} Canoco formats that are not handled in this function. The function is based on \code{\link[utils]{read.fortran}}. If the \code{REAL} format defines a decimal part for species abundances (such as \code{F5.1}), \code{\link[utils]{read.fortran}} divides the input with the corresponding power of 10 even when the input data had explicit decimal separator. With \code{F5.1}, 100 would become 10, and 0.1 become 0.01. Function \code{read.cep} tries to undo this division, but you should check the scaling of results after reading the data, and if necessary, multiply results to the original scale. } \examples{ ## Provided that you have the file `dune.spe' \dontrun{ theclassic <- read.cep("dune.spe")} } \keyword{ IO } \keyword{ file } vegan/man/bgdispersal.Rd0000644000176200001440000001025112626316320014713 0ustar liggesusers\encoding{UTF-8} \name{bgdispersal} \alias{bgdispersal} \title{ Coefficients of Biogeographical Dispersal Direction } \description{ This function computes coefficients of dispersal direction between geographically connected areas, as defined by Legendre and Legendre (1984), and also described in Legendre and Legendre (2012, section 13.3.4). } \usage{ bgdispersal(mat, PAonly = FALSE, abc = FALSE) } \arguments{ \item{mat}{ Data frame or matrix containing a community composition data table (species presence-absence or abundance data). } \item{PAonly}{ \code{FALSE} if the four types of coefficients, DD1 to DD4, are requested; \code{TRUE} if \code{DD1} and \code{DD2} only are sought (see Details). } \item{abc}{If \code{TRUE}, return tables \code{a}, \code{b} and \code{c} used in \code{DD1} and \code{DD2}.} } \details{ The signs of the DD coefficients indicate the direction of dispersal, provided that the asymmetry is significant. A positive sign indicates dispersal from the first (row in DD tables) to the second region (column); a negative sign indicates the opposite. A McNemar test of asymmetry is computed from the presence-absence data to test the hypothesis of a significant asymmetry between the two areas under comparison. In the input data table, the rows are sites or areas, the columns are taxa. Most often, the taxa are species, but the coefficients can be computed from genera or families as well. DD1 and DD2 only are computed for presence-absence data. The four types of coefficients are computed for quantitative data, which are converted to presence-absence for the computation of DD1 and DD2. \code{PAonly = FALSE} indicates that the four types of coefficients are requested. \code{PAonly = TRUE} if DD1 and DD2 only are sought. } \value{ Function \code{bgdispersal} returns a list containing the following matrices: \item{ DD1 }{ \eqn{DD1_{j,k} = (a(b - c))/((a + b + c)^2)}{DD1[j,k] = (a * (b - c))/((a + b + c)^2)} } \item{ DD2 }{ \eqn{DD2_{j,k} = (2 a (b - c))/((2a + b + c) (a + b + c))}{DD2[j,k] = (2*a * (b - c))/((2*a + b + c) * (a + b + c))} where \eqn{a}, \eqn{b}, and \eqn{c} have the same meaning as in the computation of binary similarity coefficients. } \item{ DD3 }{ \eqn{DD3_{j,k} = {W(A-B) / (A+B-W)^2} }{DD3[j,k] = W*(A-B) / (A+B-W)^2} } \item{ DD4 }{ \eqn{DD4_{j,k} = 2W(A-B) / ((A+B)(A+B-W))}{DD4[j,k] = 2*W*(A-B) / ((A+B)*(A+B-W))} where \code{W = sum(pmin(vector1, vector2))}, \code{A = sum(vector1)}, \code{B = sum(vector2)} } \item{ McNemar }{ McNemar chi-square statistic of asymmetry (Sokal and Rohlf 1995): \eqn{2(b \log(b) + c \log(c) - (b+c) \log((b+c)/2)) / q}{2*(b*log(b) + c*log(c) - (b+c)*log((b+c)/2)) / q}, where \eqn{q = 1 + 1/(2(b+c))}{q = 1 + 1/(2*(b+c))} (Williams correction for continuity) } \item{ prob.McNemar }{ probabilities associated with McNemar statistics, chi-square test. H0: no asymmetry in \eqn{(b-c)}. } } \references{ Legendre, P. and V. Legendre. 1984. Postglacial dispersal of freshwater fishes in the Québec peninsula. \emph{Can. J. Fish. Aquat. Sci.} \strong{41}: 1781-1802. Legendre, P. and L. Legendre. 2012. \emph{Numerical ecology}, 3rd English edition. Elsevier Science BV, Amsterdam. Sokal, R. R. and F. J. Rohlf. 1995. \emph{Biometry. The principles and practice of statistics in biological research.} 3rd edn. W. H. Freeman, New York. } \author{ Pierre Legendre, Departement de Sciences Biologiques, Universite de Montreal} \note{The function uses a more powerful alternative for the McNemar test than the classical formula. The classical formula was constructed in the spirit of Pearson's Chi-square, but the formula in this function was constructed in the spirit of Wilks Chi-square or the \eqn{G} statistic. Function \code{\link{mcnemar.test}} uses the classical formula. The new formula was introduced in \pkg{vegan} version 1.10-11, and the older implementations of \code{bgdispersal} used the classical formula. } \examples{ mat <- matrix(c(32,15,14,10,70,30,100,4,10,30,25,0,18,0,40, 0,0,20,0,0,0,0,4,0,30,20,0,0,0,0,25,74,42,1,45,89,5,16,16,20), 4, 10, byrow=TRUE) bgdispersal(mat) } \keyword{ multivariate } \keyword{ nonparametric } vegan/man/goodness.metaMDS.Rd0000644000176200001440000000743712626316320015542 0ustar liggesusers\name{goodness.metaMDS} \alias{goodness.metaMDS} \alias{goodness.monoMDS} \alias{stressplot} \alias{stressplot.default} \alias{stressplot.monoMDS} \title{Goodness of Fit and Shepard Plot for Nonmetric Multidimensional Scaling } \description{ Function \code{goodness.metaMDS} find goodness of fit measure for points in nonmetric multidimensional scaling, and function \code{stressplot} makes a \code{\link[MASS]{Shepard}} diagram. } \usage{ \method{goodness}{metaMDS}(object, dis, ...) \method{stressplot}{default}(object, dis, pch, p.col = "blue", l.col = "red", lwd = 2, ...) } \arguments{ \item{object}{A result object from \code{\link{metaMDS}}, \code{\link{monoMDS}} or \code{\link[MASS]{isoMDS}}. } \item{dis}{Dissimilarities. This should not be used with \code{\link{metaMDS}} or \code{\link{monoMDS}}, but must be used with \code{\link[MASS]{isoMDS}}.} \item{pch}{Plotting character for points. Default is dependent on the number of points. } \item{p.col, l.col}{Point and line colours.} \item{lwd}{Line width. For \code{\link{monoMDS}} the default is \code{lwd = 1} if more than two lines are drawn, and \code{lwd = 2} otherwise.} \item{\dots}{Other parameters to functions, e.g. graphical parameters.} } \details{ Function \code{goodness.metaMDS} finds a goodness of fit statistic for observations (points). This is defined so that sum of squared values is equal to squared stress. Large values indicate poor fit. The absolute values of the goodness statistic depend on the definition of the stress: \code{\link[MASS]{isoMDS}} expresses stress in percents, and therefore its goodness values are 100 times higher than those of \code{\link{monoMDS}} which expresses the stress as a proportion. Function \code{stressplot} draws a Shepard diagram which is a plot of ordination distances and monotone or linear fit line against original dissimilarities. In addition, it displays two correlation-like statistics on the goodness of fit in the graph. The nonmetric fit is based on stress \eqn{S} and defined as \eqn{R^2 = 1-S^2}{R2 = 1-S*S}. The \dQuote{linear fit} is the squared correlation between fitted values and ordination distances. For \code{\link{monoMDS}}, the \dQuote{linear fit} and \eqn{R^2}{R2} from \dQuote{stress type 2} are equal. Both functions can be used with \code{\link{metaMDS}}, \code{\link{monoMDS}} and \code{\link[MASS]{isoMDS}}. The original dissimilarities should not be given for \code{\link{monoMDS}} or \code{\link{metaMDS}} results (the latter tries to reconstruct the dissimilarities using \code{\link{metaMDSredist}} if \code{\link[MASS]{isoMDS}} was used as its engine). With \code{\link[MASS]{isoMDS}} the dissimilarities must be given. In either case, the functions inspect that dissimilarities are consistent with current ordination, and refuse to analyse inconsistent dissimilarities. Function \code{goodness.metaMDS} is generic in \pkg{vegan}, but you must spell its name completely with \code{\link[MASS]{isoMDS}} which has no class. } \value{ Function \code{goodness} returns a vector of values. Function \code{stressplot} returns invisibly an object with items for original dissimilarities, ordination distances and fitted values. } \author{Jari Oksanen. } \seealso{\code{\link{metaMDS}}, \code{\link{monoMDS}}, \code{\link[MASS]{isoMDS}}, \code{\link[MASS]{Shepard}}. Similar diagrams for eigenvector ordinations can be drawn with \code{\link{stressplot.wcmdscale}}, \code{\link{stressplot.cca}}, \code{\link{stressplot.rda}} and \code{\link{stressplot.capscale}}. } \examples{ data(varespec) mod <- metaMDS(varespec) stressplot(mod) gof <- goodness(mod) gof plot(mod, display = "sites", type = "n") points(mod, display = "sites", cex = 2*gof/mean(gof)) } \keyword{ multivariate } vegan/man/vegan-package.Rd0000644000176200001440000000700113156750403015107 0ustar liggesusers\name{vegan-package} \alias{vegan-package} \alias{vegan} \docType{package} \title{ Community Ecology Package: Ordination, Diversity and Dissimilarities } \description{ The \pkg{vegan} package provides tools for descriptive community ecology. It has most basic functions of diversity analysis, community ordination and dissimilarity analysis. Most of its multivariate tools can be used for other data types as well. } \details{The functions in the \pkg{vegan} package contain tools for diversity analysis, ordination methods and tools for the analysis of dissimilarities. Together with the \pkg{labdsv} package, the \pkg{vegan} package provides most standard tools of descriptive community analysis. Package \pkg{ade4} provides an alternative comprehensive package, and several other packages complement \pkg{vegan} and provide tools for deeper analysis in specific fields. Package \pkg{BiodiversityR} provides a GUI for a large subset of \pkg{vegan} functionality. The \pkg{vegan} package is developed at GitHub (\url{https://github.com/vegandevs/vegan/}). GitHub provides up-to-date information and forums for bug reports. Most important changes in \pkg{vegan} documents can be read with \code{news(package="vegan")} and vignettes can be browsed with \code{browseVignettes("vegan")}. The vignettes include a \pkg{vegan} FAQ, discussion on design decisions, short introduction to ordination and discussion on diversity methods. A tutorial of the package at \url{http://cc.oulu.fi/~jarioksa/opetus/metodi/vegantutor.pdf} provides a more thorough introduction to the package. To see the preferable citation of the package, type \code{citation("vegan")}. } \author{ The \pkg{vegan} development team is Jari Oksanen, F. Guillaume Blanchet, Roeland Kindt, Pierre Legendre, Peter R. Minchin, R. B. O'Hara, Gavin L. Simpson, Peter Solymos, M. Henry H. Stevens, Helene Wagner. Many other people have contributed to individual functions: see credits in function help pages. } \examples{ ### Example 1: Unconstrained ordination ## NMDS data(varespec) data(varechem) ord <- metaMDS(varespec) plot(ord, type = "t") ## Fit environmental variables ef <- envfit(ord, varechem) ef plot(ef, p.max = 0.05) ### Example 2: Constrained ordination (RDA) ## The example uses formula interface to define the model data(dune) data(dune.env) ## No constraints: PCA mod0 <- rda(dune ~ 1, dune.env) mod0 plot(mod0) ## All environmental variables: Full model mod1 <- rda(dune ~ ., dune.env) mod1 plot(mod1) ## Automatic selection of variables by permutation P-values mod <- ordistep(mod0, scope=formula(mod1)) mod plot(mod) ## Permutation test for all variables anova(mod) ## Permutation test of "type III" effects, or significance when a term ## is added to the model after all other terms anova(mod, by = "margin") ## Plot only sample plots, use different symbols and draw SD ellipses ## for Managemenet classes plot(mod, display = "sites", type = "n") with(dune.env, points(mod, disp = "si", pch = as.numeric(Management))) with(dune.env, legend("topleft", levels(Management), pch = 1:4, title = "Management")) with(dune.env, ordiellipse(mod, Management, label = TRUE)) ## add fitted surface of diversity to the model ordisurf(mod, diversity(dune), add = TRUE) ### Example 3: analysis of dissimilarites a.k.a. non-parametric ### permutational anova adonis(dune ~ ., dune.env) adonis(dune ~ Management + Moisture, dune.env) } \keyword{ package } \keyword{ multivariate } \keyword{ univar } \keyword{ models } \keyword{ spatial } \keyword{ nonparametric } \keyword{ htest } \keyword{ regression } vegan/man/ordipointlabel.Rd0000644000176200001440000001036112730061270015422 0ustar liggesusers\name{ordipointlabel} \alias{ordipointlabel} \alias{plot.ordipointlabel} \title{ Ordination Plots with Points and Optimized Locations for Text } \description{ The function \code{ordipointlabel} produces ordination plots with points and text label to the points. The points are in the exact location given by the ordination, but the function tries to optimize the location of the text labels to minimize overplotting text. The function may be useful with moderately crowded ordination plots. } \usage{ ordipointlabel(x, display = c("sites", "species"), choices = c(1, 2), col = c(1, 2), pch = c("o", "+"), font = c(1, 1), cex = c(0.8, 0.8), add = FALSE, select, ...) \method{plot}{ordipointlabel}(x, ...) } \arguments{ \item{x}{For \code{ordipointlabel()} a result object from an ordination function. For \code{plot.ordipointlabel} an object resulting from a call to \code{ordipointlabel()}.} \item{display}{Scores displayed in the plot. } \item{choices}{Axes shown. } \item{col, pch, font, cex}{Colours, point types, font style and character expansion for each kind of scores displayed in the plot. These should be vectors of the same length as the number of items in \code{display}.} \item{add}{ Add to an existing plot. } \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items. \code{select} is only used if a single set of scores is being plotted (i.e. \code{length(display) == 1}), otherwise it is ignored and a warning issued. If a logical vector is used, it must have the same length as the scores plotted.} \item{\dots}{Other arguments passed to \code{\link{points}} and \code{\link{text}}.} } \details{ The function uses simulated annealing (\code{\link{optim}}, \code{method = "SANN"}) to optimize the location of the text labels to the points. There are eight possible locations: up, down, sides and corners. There is a weak preference to text right above the point, and a weak avoidance of corner positions. The exact locations and the goodness of solution varies between runs, and there is no guarantee of finding the global optimum. The optimization can take a long time in difficult cases with a high number of potential overlaps. Several sets of scores can be displayed in one plot. The function is modelled after \code{\link[maptools]{pointLabel}} in \pkg{maptools} package (which has chained dependencies of \code{S4} packages). } \value{ The function returns invisibly an object of class \code{ordipointlabel} with items \code{xy} for coordinates of points, \code{labels} for coordinates of labels, items \code{pch}, \code{cex} and \code{font} for graphical parameters of each point or label. In addition, it returns the result of \code{\link{optim}} as an attribute \code{"optim"}. The unit of overlap is the area of character \code{"m"}, and with variable \code{cex} it is the smallest alternative. There is a \code{plot} method based on \code{orditkplot} but which does not alter nor reset the graphical parameters via \code{par}. The result object from \code{ordipointlabel} inherits from \code{\link{orditkplot}}, and can also be replotted with its \code{plot} method. It may be possible to further edit the result object with \code{\link{orditkplot}}, but for good results it is necessary that the points span the whole horizontal axis without empty margins. } \references{ See \code{\link[maptools]{pointLabel}} for references. } \author{ Jari Oksanen } \note{ The function is designed for ordination graphics, and the optimization works properly with plots of isometric aspect ratio. } \seealso{ \code{\link[maptools]{pointLabel}} for the model implementation, and \code{\link{optim}} for the optimization. } \examples{ data(dune) ord <- cca(dune) plt <- ordipointlabel(ord) ## set scaling - should be no warnings! ordipointlabel(ord, scaling = "sites") ## plot then add plot(ord, scaling = "symmetric", type = "n") ordipointlabel(ord, display = "species", scaling = "symm", add = TRUE) ordipointlabel(ord, display = "sites", scaling = "symm", add = TRUE) ## redraw plot without rerunning SANN optimisation plot(plt) } \keyword{ hplot } \keyword{ aplot } vegan/man/permutations.Rd0000644000176200001440000002524413231354436015161 0ustar liggesusers\name{permutations} \alias{permutations} \title{Permutation tests in Vegan} \description{ From version 2.2-0, \pkg{vegan} has significantly improved access to restricted permutations which brings it into line with those offered by Canoco. The permutation designs are modelled after the permutation schemes of Canoco 3.1 (ter Braak, 1990). \pkg{vegan} currently provides for the following features within permutation tests: \enumerate{ \item{Free permutation of \emph{DATA}, also known as randomisation,} \item{Free permutation of \emph{DATA} within the levels of a grouping variable,} \item{Restricted permutations for line transects or time series,} \item{Permutation of groups of samples whilst retaining the within-group ordering,} \item{Restricted permutations for spatial grids,} \item{Blocking, samples are never permuted \emph{between} blocks, and} \item{Split-plot designs, with permutation of whole plots, split plots, or both.} } Above, we use \emph{DATA} to mean either the observed data themselves or some function of the data, for example the residuals of an ordination model in the presence of covariables. These capabilities are provided by functions from the \pkg{permute} package. The user can request a particular type of permutation by supplying the \code{permutations} argument of a function with an object returned by \code{\link{how}}, which defines how samples should be permuted. Alternatively, the user can simply specify the required number of permutations and a simple randomisation procedure will be performed. Finally, the user can supply a matrix of permutations (with number of rows equal to the number of permutations and number of columns equal to the number of observations in the data) and \pkg{vegan} will use these permutations instead of generating new permutations. The majority of functions in \pkg{vegan} allow for the full range of possibilities outlined above. Exceptions include \code{\link{kendall.post}} and \code{\link{kendall.global}}. The Null hypothesis for the first two types of permutation test listed above assumes free exchangeability of \emph{DATA} (within the levels of the grouping variable, if specified). Dependence between observations, such as that which arises due to spatial or temporal autocorrelation, or more-complicated experimental designs, such as split-plot designs, violates this fundamental assumption of the test and requires more complex restricted permutation test designs. It is these designs that are available via the \pkg{permute} package and to which \pkg{vegan} provides access from version 2.2-0 onwards. Unless otherwise stated in the help pages for specific functions, permutation tests in \pkg{vegan} all follow the same format/structure: \enumerate{ \item{An appropriate test statistic is chosen. Which statistic is chosen should be described on the help pages for individual functions.} \item{The value of the test statistic is evaluate for the observed data and analysis/model and recorded. Denote this value \eqn{x_0}{x[0]}.} \item{The \emph{DATA} are randomly permuted according to one of the above schemes, and the value of the test statistic for this permutation is evaluated and recorded.} \item{Step 3 is repeated a total of \eqn{n} times, where \eqn{n} is the number of permutations requested. Denote these values as \eqn{x_i}{x[i]}, where \eqn{i = 1, ..., n}{{i = 1, \ldots, n}.}} \item{Count the number of values of the test statistic, \eqn{x_i}{x[i]}, in the Null distribution that are as extreme as test statistic for the observed data \eqn{x_0}{x[0]}. Denote this count as \eqn{N}. We use the phrase \emph{as extreme} to include cases where a two-sided test is performed and large negative values of the test statistic should be considered.} \item{The permutation p-value is computed as \deqn{p = \frac{N + 1}{n + 1}}{(N + 1) / (n + 1)}} } The above description illustrates why the default number of permutations specified in \pkg{vegan} functions takes values of 199 or 999 for example. Pretty \emph{p} values are achieved because the \eqn{+ 1} in the denominator results in division by 200 or 1000, for the 199 or 999 random permutations used in the test. The simple intuition behind the presence of \eqn{+ 1} in the numerator and denominator is that these represent the inclusion of the observed value of the statistic in the Null distribution (e.g. Manly 2006). Phipson & Smyth (2010) present a more compelling explanation for the inclusion of \eqn{+ 1} in the numerator and denominator of the \emph{p} value calculation. Fisher (1935) had in mind that a permutation test would involve enumeration of all possible permutations of the data yielding an exact test. However, doing this complete enumeration may not be feasible in practice owing to the potentially vast number of arrangements of the data, even in modestly-sized data sets with free permutation of samples. As a result we evaluate the \emph{p} value as the tail probability of the Null distribution of the test statistic directly from the random sample of possible permutations. Phipson & Smyth (2010) show that the naive calculation of the permutation \emph{p} value is \deqn{p = \frac{N}{n}}{p = (N / n)} which leads to an invalid test with incorrect type I error rate. They go on to show that by replacing the unknown tail probability (the \emph{p} value) of the Null distribution with the biased estimator \deqn{p = \frac{N + 1}{n + 1}}{p = (N + 1 / n + 1)} that the positive bias induced is of just the right size to account for the uncertainty in the estimation of the tail probability from the set of randomly sampled permutations to yield a test with the correct type I error rate. The estimator described above is correct for the situation where permutations of the data are samples randomly \emph{without} replacement. This is not strictly what happens in \pkg{vegan} because permutations are drawn pseudo-randomly independent of one another. Note that the actual chance of this happening is practice is small but the functions in \pkg{permute} do not guarantee to generate a unique set of permutations unless complete enumeration of permutations is requested. This is not feasible for all but the smallest of data sets or restrictive of permutation designs, but in such cases the chance of drawing a set of permutations with repeats is lessened as the sample size, and thence the size of set of all possible permutations, increases. Under the situation of sampling permutations with replacement then, the tail probability \eqn{p} calculated from the biased estimator described above is somewhat \strong{conservative}, being too large by an amount that depends on the number of possible values that the test statistic can take under permutation of the data (Phipson & Smyth, 2010). This represents a slight loss of statistical power for the conservative \emph{p} value calculation used here. However, unless smaples sizes are small and the the permutation design such that the set of values that the test statistic can take is also small, this loss of power is unlikely to be critical. The minimum achievable p-value is \deqn{p_{\mathrm{min}} = \frac{1}{n + 1}}{p[min] = 1 / (n + 1)} and hence depends on the number of permutations evaluated. However, one cannot simply increase the number of permutations (\eqn{n}) to achieve a potentially lower p-value unless the number of observations available permits such a number of permutations. This is unlikely to be a problem for all but the smallest data sets when free permutation (randomisation) is valid, but in restricted permutation designs with a low number of observations, there may not be as many unique permutations of the data as you might desire to reach the required level of significance. It is currently the responsibility of the user to determine the total number of possible permutations for their \emph{DATA}. The number of possible permutations allowed under the specified design can be calculated using \code{\link[permute]{numPerms}} from the \pkg{permute} package. Heuristics employed within the \code{\link[permute]{shuffleSet}} function used by \pkg{vegan} can be triggered to generate the entire set of permutations instead of a random set. The settings controlling the triggering of the complete enumeration step are contained within a permutation design created using \code{link[permute]{how}} and can be set by the user. See \code{\link[permute]{how}} for details. Limits on the total number of permutations of \emph{DATA} are more severe in temporally or spatially ordered data or experimental designs with low replication. For example, a time series of \eqn{n = 100} observations has just 100 possible permutations \strong{including} the observed ordering. In situations where only a low number of permutations is possible due to the nature of \emph{DATA} or the experimental design, enumeration of all permutations becomes important and achievable computationally. Above, we have provided only a brief overview of the capbilities of \pkg{vegan} and \pkg{permute}. To get the best out of the new functionality and for details on how to set up permutation designs using \code{\link[permute]{how}}, consult the vignette \emph{Restricted permutations; using the permute package} supplied with \pkg{permute} and accessible via \code{vignette("permutations", package = "permute").} } \seealso{ \code{\link{permutest}} for the main interface in \pkg{vegan}. See also \code{\link[permute]{how}} for details on permutation design specification, \code{\link[permute]{shuffleSet}} for the code used to generate a set of permutations, \code{\link[permute]{numPerms}} for a function to return the size of the set of possible permutations under the current design. } \references{ Manly, B. F. J. (2006). \emph{Randomization, Bootstrap and Monte Carlo Methods in Biology}, Third Edition. Chapman and Hall/CRC. Phipson, B., & Smyth, G. K. (2010). Permutation P-values should never be zero: calculating exact P-values when permutations are randomly drawn. \emph{Statistical Applications in Genetics and Molecular Biology}, \strong{9}, Article 39. DOI: 10.2202/1544-6115.1585 ter Braak, C. J. F. (1990). \emph{Update notes: CANOCO version 3.1}. Wageningen: Agricultural Mathematics Group. (UR). See also: Davison, A. C., & Hinkley, D. V. (1997). \emph{Bootstrap Methods and their Application}. Cambridge University Press. } \author{ Gavin L. Simpson } \keyword{multivariate} vegan/man/permutest.betadisper.Rd0000644000176200001440000000744113156750403016577 0ustar liggesusers\name{permutest.betadisper} \alias{permutest.betadisper} \title{Permutation test of multivariate homogeneity of groups dispersions (variances)} \description{ Implements a permutation-based test of multivariate homogeneity of group dispersions (variances) for the results of a call to \code{\link{betadisper}}. } \usage{ \method{permutest}{betadisper}(x, pairwise = FALSE, permutations = 999, parallel = getOption("mc.cores"), \dots) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{an object of class \code{"betadisper"}, the result of a call to \code{betadisper}.} \item{pairwise}{logical; perform pairwise comparisons of group means?} \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{parallel}{Number of parallel processes or a predefined socket cluster. With \code{parallel = 1} uses ordinary, non-parallel processing.} \item{\dots}{Arguments passed to other methods.} } \details{ To test if one or more groups is more variable than the others, ANOVA of the distances to group centroids can be performed and parametric theory used to interpret the significance of F. An alternative is to use a permutation test. \code{permutest.betadisper} permutes model residuals to generate a permutation distribution of F under the Null hypothesis of no difference in dispersion between groups. Pairwise comparisons of group mean dispersions can be performed by setting argument \code{pairwise} to \code{TRUE}. A classical t test is performed on the pairwise group dispersions. This is combined with a permutation test based on the t statistic calculated on pairwise group dispersions. An alternative to the classical comparison of group dispersions, is to calculate Tukey's Honest Significant Differences between groups, via \code{\link{TukeyHSD.betadisper}}. } \value{ \code{permutest.betadisper} returns a list of class \code{"permutest.betadisper"} with the following components: \item{tab}{the ANOVA table which is an object inheriting from class \code{"data.frame"}.} \item{pairwise}{a list with components \code{observed} and \code{permuted} containing the observed and permuted p-values for pairwise comparisons of group mean distances (dispersions or variances).} \item{groups}{character; the levels of the grouping factor.} \item{control}{a list, the result of a call to \code{\link{how}}.} } \references{ Anderson, M.J. (2006) Distance-based tests for homogeneity of multivariate dispersions. \emph{Biometrics} \strong{62(1)}, 245--253. Anderson, M.J., Ellingsen, K.E. & McArdle, B.H. (2006) Multivariate dispersion as a measure of beta diversity. \emph{Ecology Letters} \strong{9(6)}, 683--693. } \author{Gavin L. Simpson} \seealso{For the main fitting function see \code{\link{betadisper}}. For an alternative approach to determining which groups are more variable, see \code{\link{TukeyHSD.betadisper}}.} \examples{ data(varespec) ## Bray-Curtis distances between samples dis <- vegdist(varespec) ## First 16 sites grazed, remaining 8 sites ungrazed groups <- factor(c(rep(1,16), rep(2,8)), labels = c("grazed","ungrazed")) ## Calculate multivariate dispersions mod <- betadisper(dis, groups) mod ## Perform test anova(mod) ## Permutation test for F pmod <- permutest(mod, permutations = 99, pairwise = TRUE) ## Tukey's Honest Significant Differences (mod.HSD <- TukeyHSD(mod)) plot(mod.HSD) ## Has permustats() method pstat <- permustats(pmod) densityplot(pstat, scales = list(x = list(relation = "free"))) qqmath(pstat, scales = list(relation = "free")) } \keyword{methods} \keyword{multivariate} vegan/man/mantel.correlog.Rd0000644000176200001440000001463212626316320015516 0ustar liggesusers\encoding{UTF-8} \name{mantel.correlog} \alias{mantel.correlog} \alias{plot.mantel.correlog} \title{ Mantel Correlogram } \description{ Function \code{mantel.correlog} computes a multivariate Mantel correlogram. Proposed by Sokal (1986) and Oden and Sokal (1986), the method is also described in Legendre and Legendre (2012, pp. 819--821). } \usage{ mantel.correlog(D.eco, D.geo=NULL, XY=NULL, n.class=0, break.pts=NULL, cutoff=TRUE, r.type="pearson", nperm=999, mult="holm", progressive=TRUE) \method{plot}{mantel.correlog}(x, alpha=0.05, ...) } \arguments{ \item{D.eco}{ An ecological distance matrix, with class either \code{dist} or \code{matrix}. } \item{D.geo}{ A geographic distance matrix, with class either \code{dist} or \code{matrix}. Provide either \code{D.geo} or \code{XY}. Default: \code{D.geo=NULL}. } \item{XY}{ A file of Cartesian geographic coordinates of the points. Default: \code{XY=NULL}. } \item{n.class}{ Number of classes. If \code{n.class=0}, the Sturges equation will be used unless break points are provided. } \item{break.pts}{ Vector containing the break points of the distance distribution. Provide (n.class+1) breakpoints, that is, a list with a beginning and an ending point. Default: \code{break.pts=NULL}. } \item{cutoff}{ For the second half of the distance classes, \code{cutoff = TRUE} limits the correlogram to the distance classes that include all points. If \code{cutoff = FALSE}, the correlogram includes all distance classes. } \item{r.type}{ Type of correlation in calculation of the Mantel statistic. Default: \code{r.type="pearson"}. Other choices are \code{r.type="spearman"} and \code{r.type="kendall"}, as in functions \code{\link{cor}} and \code{\link{mantel}}. } \item{nperm}{ Number of permutations for the tests of significance. Default: \code{nperm=999}. For large data files, permutation tests are rather slow. } \item{mult}{ Correct P-values for multiple testing. The correction methods are \code{"holm"} (default), \code{"hochberg"}, \code{"sidak"}, and other methods available in the \code{\link{p.adjust}} function: \code{"bonferroni"} (best known, but not recommended because it is overly conservative), \code{"hommel"}, \code{"BH"}, \code{"BY"}, \code{"fdr"}, and \code{"none"}. } \item{progressive}{ Default: \code{progressive=TRUE} for progressive correction of multiple-testing, as described in Legendre and Legendre (1998, p. 721). Test of the first distance class: no correction; second distance class: correct for 2 simultaneous tests; distance class k: correct for k simultaneous tests. \code{progressive=FALSE}: correct all tests for \code{n.class} simultaneous tests. } \item{x}{ Output of \code{mantel.correlog}. } \item{alpha}{ Significance level for the points drawn with black symbols in the correlogram. Default: \code{alpha=0.05}. } \item{...}{ Other parameters passed from other functions. } } \details{ A correlogram is a graph in which spatial correlation values are plotted, on the ordinate, as a function of the geographic distance classes among the study sites along the abscissa. In a Mantel correlogram, a Mantel correlation (Mantel 1967) is computed between a multivariate (e.g. multi-species) distance matrix of the user's choice and a design matrix representing each of the geographic distance classes in turn. The Mantel statistic is tested through a permutational Mantel test performed by \code{vegan}'s \code{\link{mantel}} function. When a correction for multiple testing is applied, more permutations are necessary than in the no-correction case, to obtain significant p-values in the higher correlogram classes. The \code{print.mantel.correlog} function prints out the correlogram. See examples. } \value{ \item{mantel.res }{A table with the distance classes as rows and the class indices, number of distances per class, Mantel statistics (computed using Pearson's r, Spearman's r, or Kendall's tau), and p-values as columns. A positive Mantel statistic indicates positive spatial correlation. An additional column with p-values corrected for multiple testing is added unless \code{mult="none"}. } \item{n.class }{The n umber of distance classes. } \item{break.pts }{The break points provided by the user or computed by the program. } \item{mult }{The name of the correction for multiple testing. No correction: \code{mult="none"}. } \item{progressive }{A logical (\code{TRUE}, \code{FALSE}) value indicating whether or not a progressive correction for multiple testing was requested. } \item{n.tests }{The number of distance classes for which Mantel tests have been computed and tested for significance. } \item{call }{The function call. } } \author{ Pierre Legendre, Université de Montréal } \references{ Legendre, P. and L. Legendre. 2012. Numerical ecology, 3rd English edition. Elsevier Science BV, Amsterdam. Mantel, N. 1967. The detection of disease clustering and a generalized regression approach. Cancer Res. 27: 209-220. Oden, N. L. and R. R. Sokal. 1986. Directional autocorrelation: an extension of spatial correlograms to two dimensions. Syst. Zool. 35: 608-617. Sokal, R. R. 1986. Spatial data analysis and historical processes. 29-43 in: E. Diday et al. [eds.] Data analysis and informatics, IV. North-Holland, Amsterdam. Sturges, H. A. 1926. The choice of a class interval. Journal of the American Statistical Association 21: 65–66. } \examples{ # Mite data available in "vegan" data(mite) data(mite.xy) mite.hel <- decostand(mite, "hellinger") # Detrend the species data by regression on the site coordinates mite.hel.resid <- resid(lm(as.matrix(mite.hel) ~ ., data=mite.xy)) # Compute the detrended species distance matrix mite.hel.D <- dist(mite.hel.resid) # Compute Mantel correlogram with cutoff, Pearson statistic mite.correlog <- mantel.correlog(mite.hel.D, XY=mite.xy, nperm=49) summary(mite.correlog) mite.correlog # or: print(mite.correlog) # or: print.mantel.correlog(mite.correlog) plot(mite.correlog) # Compute Mantel correlogram without cutoff, Spearman statistic mite.correlog2 <- mantel.correlog(mite.hel.D, XY=mite.xy, cutoff=FALSE, r.type="spearman", nperm=49) summary(mite.correlog2) mite.correlog2 plot(mite.correlog2) # NOTE: 'nperm' argument usually needs to be larger than 49. # It was set to this low value for demonstration purposes. } \keyword{ multivariate } vegan/man/model.matrix.cca.Rd0000644000176200001440000000335213231354436015553 0ustar liggesusers\name{model.matrix.cca} \Rdversion{1.1} \alias{model.matrix.cca} \alias{model.frame.cca} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Reconstruct Model Frame and Model Matrices of Constrained Ordination } \description{ Function \code{model.frame.cca} reconstructs a \code{\link{data.frame}} with the variables used in the constrained ordination method (\code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. Function \code{model.matrix.cca} creates a list of design matrices used in constrained ordination. The items of the list are called \code{Conditions} and \code{Constraints}. If either partial (\code{Conditions}) or constrained component was missing, a single matrix is returned. } \usage{ \method{model.frame}{cca}(formula, ...) \method{model.matrix}{cca}(object, ...) } \arguments{ \item{formula, object}{ A constrained ordination result object from which the needed information is extracted. } \item{\dots}{ Other arguments passed to the default method of the function. } } \details{ The constrained ordination method objects do not save data on model frame or design matrix, and the functions must reconstruct the information in the session. This will fail if the data sets and variables of the original model are unavailable. } \value{ Returns a data frame (\code{model.frame}) or an unnamed matrix or a list of two matrices called \code{Constraints} and \code{Conditions} (\code{model.matrix}). } \author{ Jari Oksanen } \seealso{ \code{\link{model.frame}}, \code{\link{model.matrix}}. } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ poly(A1, 2) + Management + Use, dune.env) model.frame(mod) model.matrix(mod) } \keyword{ models } \keyword{ multivariate } vegan/man/treedive.Rd0000644000176200001440000001341012626316320014223 0ustar liggesusers\name{treedive} \alias{treedive} \alias{treeheight} \alias{treedist} \title{Functional Diversity and Community Distances from Species Trees} \description{ Functional diversity is defined as the total branch length in a trait dendrogram connecting all species, but excluding the unnecessary root segments of the tree (Petchey and Gaston 2006). Tree distance is the increase in total branch length when combining two sites. } \usage{ treedive(comm, tree, match.force = TRUE, verbose = TRUE) treeheight(tree) treedist(x, tree, relative = TRUE, match.force = TRUE, ...) } \arguments{ \item{comm, x}{Community data frame or matrix.} \item{tree}{A dendrogram which for \code{treedive} must be for species (columns).} \item{match.force}{Force matching of column names in data (\code{comm}, \code{x}) and labels in \code{tree}. If \code{FALSE}, matching only happens when dimensions differ (with a warning or message). The order of data must match to the order in \code{tree} if matching by names is not done.} \item{verbose}{Print diagnostic messages and warnings.} \item{relative}{Use distances relative to the height of combined tree.} \item{\dots}{Other arguments passed to functions (ignored).} } \details{ Function \code{treeheight} finds the sum of lengths of connecting segments in a dendrogram produced by \code{\link{hclust}}, or other dendrogram that can be coerced to a correct type using \code{\link{as.hclust}}. When applied to a clustering of species traits, this is a measure of functional diversity (Petchey and Gaston 2002, 2006), and when applied to phylogenetic trees this is phylogenetic diversity. Function \code{treedive} finds the \code{treeheight} for each site (row) of a community matrix. The function uses a subset of dendrogram for those species that occur in each site, and excludes the tree root if that is not needed to connect the species (Petchey and Gaston 2006). The subset of the dendrogram is found by first calculating \code{\link{cophenetic}} distances from the input dendrogram, then reconstructing the dendrogram for the subset of the cophenetic distance matrix for species occurring in each site. Diversity is 0 for one species, and \code{NA} for empty communities. Function \code{treedist} finds the dissimilarities among trees. Pairwise dissimilarity of two trees is found by combining species in a common tree and seeing how much of the tree height is shared and how much is unique. With \code{relative = FALSE} the dissimilarity is defined as \eqn{2 (A \cup B) - A - B}{2AB - A - B}, where \eqn{A} and \eqn{B} are heights of component trees and \eqn{A \cup B}{AB} is the height of the combined tree. With \code{relative = TRUE} the dissimilarity is \eqn{(2(A \cup B)-A-B)/(A \cup B)}{(2AB - A - B)/(AB)}. Although the latter formula is similar to Jaccard dissimilarity (see \code{\link{vegdist}}, \code{\link{designdist}}), it is not in the range \eqn{0 \ldots 1}{0 \dots 1}, since combined tree can add a new root. When two zero-height trees are combined into a tree of above zero height, the relative index attains its maximum value \eqn{2}. The dissimilarity is zero from a combined zero-height tree. The functions need a dendrogram of species traits or phylogenies as an input. If species traits contain \code{\link{factor}} or \code{\link{ordered}} factor variables, it is recommended to use Gower distances for mixed data (function \code{\link[cluster]{daisy}} in package \pkg{cluster}), and usually the recommended clustering method is UPGMA (\code{method = "average"} in function \code{\link{hclust}}) (Podani and Schmera 2006). Phylogenetic trees can be changed into dendrograms using \code{\link[ape]{as.hclust.phylo}} (package \pkg{ape}) It is possible to analyse the non-randomness of tree diversity using \code{\link{oecosimu}}. This needs specifying an adequate Null model, and the results will change with this choice. } \value{ A vector of diversity values or a single tree height, or a dissimilarity structure that inherits from \code{\link{dist}} and can be used similarly. } \references{ Lozupone, C. and Knight, R. 2005. UniFrac: a new phylogenetic method for comparing microbial communities. \emph{Applied and Environmental Microbiology} 71, 8228--8235. Petchey, O.L. and Gaston, K.J. 2002. Functional diversity (FD), species richness and community composition. \emph{Ecology Letters} 5, 402--411. Petchey, O.L. and Gaston, K.J. 2006. Functional diversity: back to basics and looking forward. \emph{Ecology Letters} 9, 741--758. Podani J. and Schmera, D. 2006. On dendrogram-based methods of functional diversity. \emph{Oikos} 115, 179--185. } \author{Jari Oksanen} \seealso{ Function \code{treedive} is similar to the phylogenetic diversity function \code{\link[picante]{pd}} in \pkg{picante}, but excludes tree root if that is not needed to connect species. Function \code{treedist} is similar to the phylogenetic similarity \code{\link[picante]{phylosor}} in \pkg{picante}, but excludes unneeded tree root and returns distances instead of similarities. \code{\link{taxondive}} is something very similar from another world. } \examples{ ## There is no data set on species properties yet, and we demonstrate ## the methods using phylogenetic trees data(dune) data(dune.phylodis) cl <- hclust(dune.phylodis) treedive(dune, cl) ## Significance test using Null model communities. ## The current choice fixes numbers of species and picks species ## proportionally to their overall frequency oecosimu(dune, treedive, "r1", tree = cl, verbose = FALSE) ## Phylogenetically ordered community table dtree <- treedist(dune, cl) tabasco(dune, hclust(dtree), cl) ## Use tree distances in capscale capscale(dtree ~ 1, comm=dune) } \keyword{ univar } vegan/man/ordistep.Rd0000644000176200001440000001702513231354436014256 0ustar liggesusers\name{ordistep} \Rdversion{1.1} \alias{ordistep} \alias{ordiR2step} \title{ Choose a Model by Permutation Tests in Constrained Ordination } \description{ Automatic stepwise model building for constrained ordination methods (\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}). The function \code{ordistep} is modelled after \code{\link{step}} and can do forward, backward and stepwise model selection using permutation tests. Function \code{ordiR2step} performs forward model choice solely on adjusted \eqn{R^2}{R2} and P-value, for ordination objects created by \code{\link{rda}} or \code{\link{capscale}}. } \usage{ ordistep(object, scope, direction = c("both", "backward", "forward"), Pin = 0.05, Pout = 0.1, permutations = how(nperm = 199), steps = 50, trace = TRUE, ...) ordiR2step(object, scope, Pin = 0.05, R2scope = TRUE, permutations = how(nperm = 499), trace = TRUE, R2permutations = 1000, ...) } \arguments{ \item{object}{ In \code{ordistep}, an ordination object inheriting from \code{\link{cca}} or \code{\link{rda}}. In \code{ordiR2step}, the object must inherit from \code{\link{rda}}, that is, it must have been computed using \code{\link{rda}} or \code{\link{capscale}}. } \item{scope}{ Defines the range of models examined in the stepwise search. This can be a list containing components \code{upper} and \code{lower}, both formulae. If it is a single item, it is interpeted the target scope, depending on the \code{direction}. If \code{direction} is \code{"forward"}, a single item is interpeted as the \code{upper} scope and the formula of the input \code{object} as the \code{lower} scope. See \code{\link{step}} for details. In \code{ordiR2step}, this defines the upper scope; it can also be an ordination object from with the model is extracted. } \item{direction}{ The mode of stepwise search, can be one of \code{"both"}, \code{"backward"}, or \code{"forward"}, with a default of \code{"both"}. If the \code{scope} argument is missing, the default for \code{direction} is \code{"backward"} in \code{ordistep} (and \code{ordiR2step} does not have this argument, but only works forward). } \item{Pin, Pout}{ Limits of permutation \eqn{P}-values for adding (\code{Pin}) a term to the model, or dropping (\code{Pout}) from the model. Term is added if \eqn{P \le}{P <=} \code{Pin}, and removed if \eqn{P >} \code{Pout}. } \item{R2scope}{ Use adjusted \eqn{R^2}{R2} as the stopping criterion: only models with lower adjusted \eqn{R^2}{R2} than scope are accepted. } \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices. This is passed to \code{\link{anova.cca}}: see there for details. } \item{steps}{ Maximum number of iteration steps of dropping and adding terms. } \item{trace}{ If positive, information is printed during the model building. Larger values may give more information. } \item{R2permutations}{Number of permutations used in the estimation of adjusted \eqn{R^2}{R2} for \code{\link{cca}} using \code{\link{RsquareAdj}}. } \item{\dots}{ Any additional arguments to \code{\link{add1.cca}} and \code{\link{drop1.cca}}. } } \details{ The basic functions for model choice in constrained ordination are \code{\link{add1.cca}} and \code{\link{drop1.cca}}. With these functions, ordination models can be chosen with standard \R function \code{\link{step}} which bases the term choice on AIC. AIC-like statistics for ordination are provided by functions \code{\link{deviance.cca}} and \code{\link{extractAIC.cca}} (with similar functions for \code{\link{rda}}). Actually, constrained ordination methods do not have AIC, and therefore the \code{\link{step}} may not be trusted. This function provides an alternative using permutation \eqn{P}-values. Function \code{ordistep} defines the model, \code{scope} of models considered, and \code{direction} of the procedure similarly as \code{\link{step}}. The function alternates with \code{drop} and \code{add} steps and stops when the model was not changed during one step. The \code{-} and \code{+} signs in the summary table indicate which stage is performed. It is often sensible to have \code{Pout} \eqn{>} \code{Pin} in stepwise models to avoid cyclic adds and drops of single terms. Function \code{ordiR2step} builds model forward so that it maximizes adjusted \eqn{R^2}{R2} (function \code{\link{RsquareAdj}}) at every step, and stopping when the adjusted \eqn{R^2}{R2} starts to decrease, or the adjusted \eqn{R^2}{R2} of the \code{scope} is exceeded, or the selected permutation \eqn{P}-value is exceeded (Blanchet et al. 2008). The second criterion is ignored with option \code{R2scope = FALSE}, and the third criterion can be ignored setting \code{Pin = 1} (or higher). Adjusted \eqn{R^2}{R2} cannot be calculated if the number of predictors is higher than the number of observations, but such models can be analysed with \code{R2scope = FALSE}. The \eqn{R^2}{R2} of \code{\link{cca}} is based on simulations (see \code{\link{RsquareAdj}}) and different runs of \code{ordiR2step} can give different results. Functions \code{ordistep} (based on \eqn{P} values) and \code{ordiR2step} (based on adjusted \eqn{R^2}{R2} and hence on eigenvalues) can select variables in different order. } \value{ Functions return the selected model with one additional component, \code{anova}, which contains brief information of steps taken. You can suppress voluminous output during model building by setting \code{trace = FALSE}, and find the summary of model history in the \code{anova} item. } \references{ Blanchet, F. G., Legendre, P. & Borcard, D. (2008) Forward selection of explanatory variables. \emph{Ecology} 89, 2623--2632. } \author{ Jari Oksanen } \seealso{ The function handles constrained ordination methods \code{\link{cca}}, \code{\link{rda}}, \code{\link{dbrda}} and \code{\link{capscale}}. The underlying functions are \code{\link{add1.cca}} and \code{\link{drop1.cca}}, and the function is modelled after standard \code{\link{step}} (which also can be used directly but uses AIC for model choice, see \code{\link{extractAIC.cca}}). Function \code{ordiR2step} builds upon \code{\link{RsquareAdj}}. } \examples{ ## See add1.cca for another example ### Dune data data(dune) data(dune.env) mod0 <- rda(dune ~ 1, dune.env) # Model with intercept only mod1 <- rda(dune ~ ., dune.env) # Model with all explanatory variables ## With scope present, the default direction is "both" ordistep(mod0, scope = formula(mod1), perm.max = 200) ## Example without scope. Default direction is "backward" ordistep(mod1, perm.max = 200) ## Example of ordistep, forward \dontrun{ ordistep(mod0, scope = formula(mod1), direction="forward", perm.max = 200) } ### Mite data data(mite) data(mite.env) mite.hel = decostand(mite, "hel") mod0 <- rda(mite.hel ~ 1, mite.env) # Model with intercept only mod1 <- rda(mite.hel ~ ., mite.env) # Model with all explanatory variables ## Example of ordiR2step with default direction = "both" ## (This never goes "backward" but evaluates included terms.) step.res <- ordiR2step(mod0, mod1, perm.max = 200) step.res$anova # Summary table ## Example of ordiR2step with direction = "forward" \dontrun{ step.res <- ordiR2step(mod0, scope = formula(mod1), direction="forward") step.res$anova # Summary table } } \keyword{ multivariate } \keyword{ models } vegan/man/cascadeKM.Rd0000644000176200001440000002146112727676571014257 0ustar liggesusers\name{cascadeKM} \alias{cascadeKM} \alias{cIndexKM} \alias{plot.cascadeKM} \alias{orderingKM} \alias{pregraphKM} \title{K-means partitioning using a range of values of K} \description{ This function is a wrapper for the \code{kmeans} function. It creates several partitions forming a cascade from a small to a large number of groups. } \usage{ cascadeKM(data, inf.gr, sup.gr, iter = 100, criterion = "calinski") cIndexKM(y, x, index = "all") \method{plot}{cascadeKM}(x, min.g, max.g, grpmts.plot = TRUE, sortg = FALSE, gridcol = NA, ...) } \arguments{ \item{ data }{ The data matrix. The objects (samples) are the rows.} \item{ inf.gr }{ The number of groups for the partition with the smallest number of groups of the cascade (min).} \item{ sup.gr }{ The number of groups for the partition with the largest number of groups of the cascade (max).} \item{ iter }{ The number of random starting configurations for each value of \eqn{K}.} \item{ criterion }{ The criterion that will be used to select the best partition. The default value is \code{"calinski"}, which refers to the Calinski-Harabasz (1974) criterion. The simple structure index (\code{"ssi"}) is also available. Other indices are available in function \code{\link[cclust]{clustIndex}} (package \pkg{cclust}). In our experience, the two indices that work best and are most likely to return their maximum value at or near the optimal number of clusters are \code{"calinski"} and \code{"ssi"}. } \item{y}{Object of class \code{"kmeans"} returned by a clustering algorithm such as \code{\link{kmeans}}} \item{x}{Data matrix where columns correspond to variables and rows to observations, or the plotting object in \code{plot}} \item{index}{The available indices are: \code{"calinski"} and \code{"ssi"}. Type \code{"all"} to obtain both indices. Abbreviations of these names are also accepted.} \item{min.g, max.g}{The minimum and maximum numbers of groups to be displayed.} \item{grpmts.plot}{Show the plot (\code{TRUE} or \code{FALSE}).} \item{sortg}{Sort the objects as a function of their group membership to produce a more easily interpretable graph. See Details. The original object names are kept; they are used as labels in the output table \code{x}, although not in the graph. If there were no row names, sequential row numbers are used to keep track of the original order of the objects.} \item{gridcol}{The colour of the grid lines in the plots. \code{NA}, which is the default value, removes the grid lines.} \item{\dots}{Other parameters to the functions (ignored).} } \details{ The function creates several partitions forming a cascade from a small to a large number of groups formed by \code{\link{kmeans}}. Most of the work is performed by function \code{cIndex} which is based on the \code{\link[cclust]{clustIndex}} function (package \pkg{cclust}). Some of the criteria were removed from this version because computation errors were generated when only one object was found in a group. The default value is \code{"calinski"}, which refers to the well-known Calinski-Harabasz (1974) criterion. The other available index is the simple structure index \code{"ssi"} (Dolnicar et al. 1999). In the case of groups of equal sizes, \code{"calinski"} is generally a good criterion to indicate the correct number of groups. Users should not take its indications literally when the groups are not equal in size. Type \code{"all"} to obtain both indices. The indices are defined as: \describe{ \item{calinski:}{ \eqn{(SSB/(K-1))/(SSW/(n-K))}, where \eqn{n} is the number of data points and \eqn{K} is the number of clusters. \eqn{SSW} is the sum of squares within the clusters while \eqn{SSB} is the sum of squares among the clusters. This index is simply an \eqn{F} (ANOVA) statistic.} \item{ssi:}{ the \dQuote{Simple Structure Index} multiplicatively combines several elements which influence the interpretability of a partitioning solution. The best partition is indicated by the highest SSI value.} } In a simulation study, Milligan and Cooper (1985) found that the Calinski-Harabasz criterion recovered the correct number of groups the most often. We recommend this criterion because, if the groups are of equal sizes, the maximum value of \code{"calinski"} usually indicates the correct number of groups. Another available index is the simple structure index \code{"ssi"}. Users should not take the indications of these indices literally when the groups are not equal in size and explore the groups corresponding to other values of \eqn{K}. Function \code{cascadeKM} has a \code{plot} method. Two plots are produced. The graph on the left has the objects in abscissa and the number of groups in ordinate. The groups are represented by colours. The graph on the right shows the values of the criterion (\code{"calinski"} or \code{"ssi"}) for determining the best partition. The highest value of the criterion is marked in red. Points marked in orange, if any, indicate partitions producing an increase in the criterion value as the number of groups increases; they may represent other interesting partitions. If \code{sortg=TRUE}, the objects are reordered by the following procedure: (1) a simple matching distance matrix is computed among the objects, based on the table of K-means assignments to groups, from \eqn{K} = \code{min.g} to \eqn{K} = \code{max.g}. (2) A principal coordinate analysis (PCoA, Gower 1966) is computed on the centred distance matrix. (3) The first principal coordinate is used as the new order of the objects in the graph. A simplified algorithm is used to compute the first principal coordinate only, using the iterative algorithm described in Legendre & Legendre (2012). The full distance matrix among objects is never computed; this avoids the problem of storing it when the number of objects is large. Distance values are computed as they are needed by the algorithm. } \value{ Function \code{cascadeKM} returns an object of class \code{cascadeKM} with items: \item{ partition }{ Table with the partitions found for different numbers of groups \eqn{K}, from \eqn{K} = \code{inf.gr} to \eqn{K} = \code{sup.gr}. } \item{ results }{ Values of the criterion to select the best partition. } \item{ criterion }{ The name of the criterion used. } \item{ size }{ The number of objects found in each group, for all partitions (columns). } Function \code{cIndex} returns a vector with the index values. The maximum value of these indices is supposed to indicate the best partition. These indices work best with groups of equal sizes. When the groups are not of equal sizes, one should not put too much faith in the maximum of these indices, and also explore the groups corresponding to other values of \eqn{K}. } \references{ Calinski, T. and J. Harabasz. 1974. A dendrite method for cluster analysis. \emph{Commun. Stat.} \strong{3}: 1--27. Dolnicar, S., K. Grabler and J. A. Mazanec. 1999. A tale of three cities: perceptual charting for analyzing destination images. Pp. 39-62 in: Woodside, A. et al. [eds.] \emph{Consumer psychology of tourism, hospitality and leisure}. CAB International, New York. Gower, J. C. 1966. Some distance properties of latent root and vector methods used in multivariate analysis. \emph{Biometrika} \strong{53}: 325--338. Legendre, P. & L. Legendre. 2012. \emph{Numerical ecology}, 3rd English edition. Elsevier Science BV, Amsterdam. Milligan, G. W. & M. C. Cooper. 1985. An examination of procedures for determining the number of clusters in a data set. \emph{Psychometrika} \strong{50}: 159--179. Weingessel, A., Dimitriadou, A. and Dolnicar, S. 2002. An examination of indexes for determining the number of clusters in binary data sets. \emph{Psychometrika} \strong{67}: 137--160. } \author{ Marie-Helene Ouellette \email{Marie-Helene.Ouellette@UMontreal.ca}, Sebastien Durand \email{Sebastien.Durand@UMontreal.ca} and Pierre Legendre \email{Pierre.Legendre@UMontreal.ca}. Edited for \pkg{vegan} by Jari Oksanen. } \seealso{\code{\link{kmeans}}, \code{\link[cclust]{clustIndex}}.} \examples{ # Partitioning a (10 x 10) data matrix of random numbers mat <- matrix(runif(100),10,10) res <- cascadeKM(mat, 2, 5, iter = 25, criterion = 'calinski') toto <- plot(res) # Partitioning an autocorrelated time series vec <- sort(matrix(runif(30),30,1)) res <- cascadeKM(vec, 2, 5, iter = 25, criterion = 'calinski') toto <- plot(res) # Partitioning a large autocorrelated time series # Note that we remove the grid lines vec <- sort(matrix(runif(1000),1000,1)) res <- cascadeKM(vec, 2, 7, iter = 10, criterion = 'calinski') toto <- plot(res, gridcol=NA) } \keyword{ cluster } vegan/man/mantel.Rd0000644000176200001440000001076412626316320013705 0ustar liggesusers\name{mantel} \alias{mantel} \alias{mantel.partial} \title{Mantel and Partial Mantel Tests for Dissimilarity Matrices } \description{ Function \code{mantel} finds the Mantel statistic as a matrix correlation between two dissimilarity matrices, and function \code{mantel.partial} finds the partial Mantel statistic as the partial matrix correlation between three dissimilarity matrices. The significance of the statistic is evaluated by permuting rows and columns of the first dissimilarity matrix. } \usage{ mantel(xdis, ydis, method="pearson", permutations=999, strata = NULL, na.rm = FALSE, parallel = getOption("mc.cores")) mantel.partial(xdis, ydis, zdis, method = "pearson", permutations = 999, strata = NULL, na.rm = FALSE, parallel = getOption("mc.cores")) } \arguments{ \item{xdis, ydis, zdis}{ Dissimilarity matrices or a \code{dist} objects. } \item{method}{ Correlation method, as accepted by \code{\link{cor}}: \code{"pearson"}, \code{"spearman"} or \code{"kendall"}. } \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} \item{na.rm}{Remove missing values in calculation of Mantel correlation. Use this option with care: Permutation tests can be biased, in particular if two matrices had missing values in matching positions.} \item{parallel}{Number of parallel processes or a predefined socket cluster. With \code{parallel = 1} uses ordinary, non-parallel processing. The parallel processing is done with \pkg{parallel} package.} } \details{ Mantel statistic is simply a correlation between entries of two dissimilarity matrices (some use cross products, but these are linearly related). However, the significance cannot be directly assessed, because there are \eqn{N(N-1)/2} entries for just \eqn{N} observations. Mantel developed asymptotic test, but here we use permutations of \eqn{N} rows and columns of dissimilarity matrix. See \code{\link{permutations}} for additional details on permutation tests in Vegan. Partial Mantel statistic uses partial correlation conditioned on the third matrix. Only the first matrix is permuted so that the correlation structure between second and first matrices is kept constant. Although \code{mantel.partial} silently accepts other methods than \code{"pearson"}, partial correlations will probably be wrong with other methods. The function uses \code{\link{cor}}, which should accept alternatives \code{pearson} for product moment correlations and \code{spearman} or \code{kendall} for rank correlations. } \value{ The function returns a list of class \code{mantel} with following components: \item{Call }{Function call.} \item{method }{Correlation method used, as returned by \code{\link{cor.test}}.} \item{statistic}{The Mantel statistic.} \item{signif}{Empirical significance level from permutations.} \item{perm}{A vector of permuted values. The distribution of permuted values can be inspected with \code{\link{permustats}} function.} \item{permutations}{Number of permutations.} \item{control}{A list of control values for the permutations as returned by the function \code{\link[permute]{how}}.} } \references{ The test is due to Mantel, of course, but the current implementation is based on Legendre and Legendre. Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English Edition. Elsevier. } \note{ Legendre & Legendre (2012, Box 10.4) warn against using partial Mantel correlations. } \author{Jari Oksanen } \seealso{\code{\link{cor}} for correlation coefficients, \code{\link{protest}} (``Procrustes test'') for an alternative with ordination diagrams, \code{\link{anosim}} and \code{\link{mrpp}} for comparing dissimilarities against classification. For dissimilarity matrices, see \code{\link{vegdist}} or \code{\link{dist}}. See \code{\link{bioenv}} for selecting environmental variables. } \examples{ ## Is vegetation related to environment? data(varespec) data(varechem) veg.dist <- vegdist(varespec) # Bray-Curtis env.dist <- vegdist(scale(varechem), "euclid") mantel(veg.dist, env.dist) mantel(veg.dist, env.dist, method="spear") } \keyword{ multivariate } \keyword{ htest } vegan/man/rarefy.Rd0000644000176200001440000001256713231354436013723 0ustar liggesusers\name{rarefy} \alias{rarefy} \alias{rrarefy} \alias{drarefy} \alias{rarecurve} \alias{rareslope} \title{Rarefaction Species Richness} \description{ Rarefied species richness for community ecologists. } \usage{ rarefy(x, sample, se = FALSE, MARGIN = 1) rrarefy(x, sample) drarefy(x, sample) rarecurve(x, step = 1, sample, xlab = "Sample Size", ylab = "Species", label = TRUE, col, lty, ...) rareslope(x, sample) } \arguments{ \item{x}{Community data, a matrix-like object or a vector.} \item{MARGIN}{Margin for which the index is computed. } \item{sample}{Subsample size for rarefying community, either a single value or a vector.} \item{se}{Estimate standard errors.} \item{step}{Step size for sample sizes in rarefaction curves.} \item{xlab, ylab}{Axis labels in plots of rarefaction curves.} \item{label}{Label rarefaction curves by rownames of \code{x} (logical).} \item{col, lty}{plotting colour and line type, see \code{\link{par}}. Can be a vector of length \code{nrow(x)}, one per sample, and will be extended to such a length internally.} \item{...}{Parameters passed to \code{\link{nlm}}, or to \code{\link{plot}}, \code{\link{lines}} and \code{\link{ordilabel}} in \code{rarecurve}.} } \details{ Function \code{rarefy} gives the expected species richness in random subsamples of size \code{sample} from the community. The size of \code{sample} should be smaller than total community size, but the function will work for larger \code{sample} as well (with a warning) and return non-rarefied species richness (and standard error = 0). If \code{sample} is a vector, rarefaction of all observations is performed for each sample size separately. Rarefaction can be performed only with genuine counts of individuals. The function \code{rarefy} is based on Hurlbert's (1971) formulation, and the standard errors on Heck et al. (1975). Function \code{rrarefy} generates one randomly rarefied community data frame or vector of given \code{sample} size. The \code{sample} can be a vector giving the sample sizes for each row. If the \code{sample} size is equal to or smaller than the observed number of individuals, the non-rarefied community will be returned. The random rarefaction is made without replacement so that the variance of rarefied communities is rather related to rarefaction proportion than to the size of the \code{sample}. Random rarefaction is sometimes used to remove the effects of differenct sample sizes. This is usually a bad idea: random rarefaction discards valid data, introduces random error and reduces the quality of the data (McMurdie & Holmes 2014). It is better to use normalizing transformations (\code{\link{decostand}} in \pkg{vegan}) possible with variance stabilization (\code{\link{decostand}} and \code{\link{dispweight}} in \pkg{vegan}) and methods that are not sensitive to sample sizes. Function \code{drarefy} returns probabilities that species occur in a rarefied community of size \code{sample}. The \code{sample} can be a vector giving the sample sizes for each row. If the \code{sample} is equal to or smaller than the observed number of individuals, all observed species will have sampling probability 1. Function \code{rarecurve} draws a rarefaction curve for each row of the input data. The rarefaction curves are evaluated using the interval of \code{step} sample sizes, always including 1 and total sample size. If \code{sample} is specified, a vertical line is drawn at \code{sample} with horizontal lines for the rarefied species richnesses. Function \code{rareslope} calculates the slope of \code{rarecurve} (derivative of \code{rarefy}) at given \code{sample} size; the \code{sample} need not be an integer. } \value{ A vector of rarefied species richness values. With a single \code{sample} and \code{se = TRUE}, function \code{rarefy} returns a 2-row matrix with rarefied richness (\code{S}) and its standard error (\code{se}). If \code{sample} is a vector in \code{rarefy}, the function returns a matrix with a column for each \code{sample} size, and if \code{se = TRUE}, rarefied richness and its standard error are on consecutive lines. Function \code{rarecurve} returns \code{\link{invisible}} list of \code{rarefy} results corresponding each drawn curve. } \references{ Heck, K.L., van Belle, G. & Simberloff, D. (1975). Explicit calculation of the rarefaction diversity measurement and the determination of sufficient sample size. \emph{Ecology} \strong{56}, 1459--1461. Hurlbert, S.H. (1971). The nonconcept of species diversity: a critique and alternative parameters. \emph{Ecology} \strong{52}, 577--586. McMurdie, P.J. & Holmes, S. (2014). Waste not, want not: Why rarefying microbiome data is inadmissible. \emph{PLoS Comput Biol} \strong{10(4):} e1003531. \doi{10.1371/journal.pcbi.1003531} } \seealso{Use \code{\link{specaccum}} for species accumulation curves where sites are sampled instead of individuals. \code{\link{specpool}} extrapolates richness to an unknown sample size.} \author{Jari Oksanen} \examples{ data(BCI) S <- specnumber(BCI) # observed number of species (raremax <- min(rowSums(BCI))) Srare <- rarefy(BCI, raremax) plot(S, Srare, xlab = "Observed No. of Species", ylab = "Rarefied No. of Species") abline(0, 1) rarecurve(BCI, step = 20, sample = raremax, col = "blue", cex = 0.6) } \keyword{ univar } vegan/man/MDSrotate.Rd0000644000176200001440000000662212730061270014262 0ustar liggesusers\name{MDSrotate} \alias{MDSrotate} \title{ Rotate First MDS Dimension Parallel to an External Variable } \description{ Function rotates a multidimensional scaling result so that its first dimension is parallel to an external (environmental variable). The function can handle the results from \code{\link{metaMDS}} or \code{\link{monoMDS}} functions. } \usage{ MDSrotate(object, vec, na.rm = FALSE, ...) } \arguments{ \item{object}{ A result object from \code{\link{metaMDS}} or \code{\link{monoMDS}}.} \item{vec}{An environmental variable or a matrix of such variables. The number of variables must be lower than the number of dimensions, and the solution is rotated to these variables in the order they appear in the matrix. Alternatively \code{vec} can be a factor, and the solution is rotated to optimal separation of factor levels using \code{\link[MASS]{lda}}.} \item{na.rm}{ Remove missing values from the continuous variable \code{vec}.} \item{\dots}{ Other arguments (ignored). } } \details{ The orientation and rotation are undefined in multidimensional scaling. Functions \code{\link{metaMDS}} and \code{\link{metaMDS}} can rotate their solutions to principal components so that the dispersion of the points is highest on the first dimension. Sometimes a different rotation is more intuitive, and \code{MDSrotate} allows rotation of the result so that the first axis is parallel to a given external variable or two first variables are completely in a two-dimensional plane etc. If several external variables are supplied, they are applied in the order they are in the matrix. First axis is rotated to the first supplied variable, and the second axis to the second variable. Because variables are usually correlated, the second variable is not usually aligned with the second axis, but it is uncorrelated to later dimensions. There must be at least one free dimension: the number of external variables must be lower than the number of dimensions, and all used environmental variables are uncorrelated with that free dimension. Alternatively the method can rotate to discriminate the levels of a factor using linear discriminant analysis (\code{\link[MASS]{lda}}). This is hardly meaningful for two-dimensional solutions, since all rotations in two dimensions have the same separation of cluster levels. However, the function can be useful in finding a two-dimensional projection of clusters from more than two dimensions. The last dimension will always show the residual variation, and for \eqn{k} dimensions, only \eqn{k-1} discrimination vectors are used. } \value{ Function returns the original ordination result, but with rotated scores (both site and species if available), and the \code{pc} attribute of scores set to \code{FALSE}. } \note{Rotation to a factor variable is an experimental feature and may be removed. The discriminant analysis weights dimensions by their discriminating power, but \code{MDSrotate} performs a rigid rotation. Therefore the solution may not be optimal.} \author{ Jari Oksanen } \seealso{ \code{\link{metaMDS}}, \code{\link{monoMDS}}. } \examples{ data(varespec) data(varechem) mod <- monoMDS(vegdist(varespec)) mod <- with(varechem, MDSrotate(mod, pH)) plot(mod) ef <- envfit(mod ~ pH, varechem, permutations = 0) plot(ef) ordisurf(mod ~ pH, varechem, knots = 1, add = TRUE) } \keyword{multivariate} vegan/man/prc.Rd0000644000176200001440000001505713231354436013214 0ustar liggesusers\name{prc} \alias{prc} \alias{summary.prc} \alias{plot.prc} \title{Principal Response Curves for Treatments with Repeated Observations } \description{ Principal Response Curves (PRC) are a special case of Redundancy Analysis (\code{\link{rda}}) for multivariate responses in repeated observation design. They were originally suggested for ecological communities. They should be easier to interpret than traditional constrained ordination. They can also be used to study how the effects of a factor \code{A} depend on the levels of a factor \code{B}, that is \code{A + A:B}, in a multivariate response experiment. } \usage{ prc(response, treatment, time, ...) \method{summary}{prc}(object, axis = 1, scaling = "symmetric", digits = 4, correlation = FALSE, ...) \method{plot}{prc}(x, species = TRUE, select, scaling = "symmetric", axis = 1, correlation = FALSE, type = "l", xlab, ylab, ylim, lty = 1:5, col = 1:6, pch, legpos, cex = 0.8, ...) } \arguments{ \item{response}{Multivariate response data. Typically these are community (species) data. If the data are counts, they probably should be log transformed prior to the analysis. } \item{treatment}{A factor for treatments. } \item{time}{ An unordered factor defining the observations times in the repeated design.} \item{object, x}{An \code{prc} result object.} \item{axis}{Axis shown (only one axis can be selected).} \item{scaling}{Scaling of species scores, identical to the \code{scaling} in \code{\link{scores.rda}}. The type of scores can also be specified as one of \code{"none"}, \code{"sites"}, \code{"species"}, or \code{"symmetric"}, which correspond to the values \code{0}, \code{1}, \code{2}, and \code{3} respectively. Argument \code{correlation} can be used in combination with these character descriptions to get the corresponding negative value. } \item{digits}{Number of significant digits displayed.} \item{correlation}{logical; if \code{scaling} is a character description of the scaling type, \code{correlation} can be used to select correlation-like scores for PCA. See argument \code{scaling} for details.} \item{species}{Display species scores.} \item{select}{Vector to select displayed species. This can be a vector of indices or a logical vector which is \code{TRUE} for the selected species} \item{type}{Type of plot: \code{"l"} for lines, \code{"p"} for points or \code{"b"} for both.} \item{xlab, ylab}{Text to replace default axis labels.} \item{ylim}{Limits for the vertical axis.} \item{lty, col, pch}{Line type, colour and plotting characters (defaults supplied).} \item{legpos}{The position of the \code{\link{legend}}. A guess is made if this is not supplied, and \code{NA} will suppress legend. } \item{cex}{Character expansion for symbols and species labels.} \item{\dots}{ Other parameters passed to functions. } } \details{ PRC is a special case of \code{\link{rda}} with a single factor for \code{treatment} and a single factor for \code{time} points in repeated observations. In \pkg{vegan}, the corresponding \code{\link{rda}} model is defined as \code{rda(response ~ treatment * time + Condition(time))}. Since the \code{time} appears twice in the model formula, its main effects will be aliased, and only the main effect of treatment and interaction terms are available, and will be used in PRC. Instead of usual multivariate ordination diagrams, PRC uses canonical (regression) coefficients and species scores for a single axis. All that the current functions do is to provide a special \code{summary} and \code{plot} methods that display the \code{\link{rda}} results in the PRC fashion. The current version only works with default contrasts (\code{\link{contr.treatment}}) in which the coefficients are contrasts against the first level, and the levels must be arranged so that the first level is the control (or a baseline). If necessary, you must change the baseline level with function \code{\link{relevel}}. Function \code{summary} prints the species scores and the coefficients. Function \code{plot} plots coefficients against \code{time} using \code{\link{matplot}}, and has similar defaults. The graph (and PRC) is meaningful only if the first \code{treatment} level is the control, as the results are contrasts to the first level when unordered factors are used. The plot also displays species scores on the right vertical axis using function \code{\link{linestack}}. Typically the number of species is so high that not all can be displayed with the default settings, but users can reduce character size or padding (\code{air}) in \code{\link{linestack}}, or \code{select} only a subset of the species. A legend will be displayed unless suppressed with \code{legpos = NA}, and the functions tries to guess where to put the legend if \code{legpos} is not supplied. } \value{ The function is a special case of \code{\link{rda}} and returns its result object (see \code{\link{cca.object}}). However, a special \code{summary} and \code{plot} methods display returns differently than in \code{\link{rda}}. } \references{ van den Brink, P.J. & ter Braak, C.J.F. (1999). Principal response curves: Analysis of time-dependent multivariate responses of biological community to stress. Environmental Toxicology and Chemistry, 18, 138--148. } \author{ Jari Oksanen and Cajo ter Braak} \section{Warning }{The first level of \code{treatment} must be the control: use function \code{\link{relevel}} to guarantee the correct reference level. The current version will ignore user setting of \code{\link{contrasts}} and always use treatment contrasts (\code{\link{contr.treatment}}). The \code{time} must be an unordered factor. } \seealso{\code{\link{rda}}, \code{\link{anova.cca}}.} \examples{ ## Chlorpyrifos experiment and experimental design: Pesticide ## treatment in ditches (replicated) and followed over from 4 weeks ## before to 24 weeks after exposure data(pyrifos) week <- gl(11, 12, labels=c(-4, -1, 0.1, 1, 2, 4, 8, 12, 15, 19, 24)) dose <- factor(rep(c(0.1, 0, 0, 0.9, 0, 44, 6, 0.1, 44, 0.9, 0, 6), 11)) ditch <- gl(12, 1, length=132) # PRC mod <- prc(pyrifos, dose, week) mod # RDA summary(mod) # PRC logabu <- colSums(pyrifos) plot(mod, select = logabu > 100) ## Ditches are randomized, we have a time series, and are only ## interested in the first axis ctrl <- how(plots = Plots(strata = ditch,type = "free"), within = Within(type = "series"), nperm = 99) anova(mod, permutations = ctrl, first=TRUE) } \keyword{ multivariate } vegan/man/vegemite.Rd0000644000176200001440000002374713231354436014242 0ustar liggesusers\name{vegemite} \alias{vegemite} \alias{tabasco} \alias{coverscale} \title{Display Compact Ordered Community Tables } \description{ Functions \code{vegemite} and \code{tabasco} display compact community tables. Function \code{vegemite} prints text tables where species are rows, and each site takes only one column without spaces. Function \code{tabasco} provides interface for \code{\link{heatmap}} for a colour \code{\link{image}} of the data. The community table can be ordered by explicit indexing, by environmental variables or results from an ordination or cluster analysis. } \usage{ vegemite(x, use, scale, sp.ind, site.ind, zero=".", select ,...) tabasco(x, use, sp.ind = NULL, site.ind = NULL, select, Rowv = TRUE, Colv = TRUE, labRow = NULL, labCol = NULL, scale = c("none", "column", "row"), col = heat.colors(12), ...) coverscale(x, scale=c("Braun.Blanquet", "Domin", "Hult", "Hill", "fix","log"), maxabund) } \arguments{ \item{x}{Community data. } \item{use}{Either a vector, or an object from \code{cca}, \code{decorana} \emph{etc.} or \code{hclust} or a \code{\link{dendrogram}} for ordering sites and species.} \item{sp.ind, site.ind}{Species and site indices. In \code{tabasco}, these can also be \code{\link{hclust}} tree, \code{\link[cluster]{agnes}} clusterings or \code{\link{dendrogram}}s. } \item{zero}{Character used for zeros. } \item{select}{Select a subset of sites. This can be a logical vector (\code{TRUE} for selected sites), or a vector of indices of selected sites. The order of indices does not influence results, but you must specify \code{use} or \code{site.ind} to reorder sites. } \item{Rowv, Colv}{Re-order dendrograms for the rows (sites) or columns (species) of \code{x}. If the \code{Rowv = TRUE}, row dendrograms are ordered by the first axis of correspondence analysis, and when \code{Colv = TRUE} column dendrograms by the weighted average (\code{\link{wascores}}) of the row order. Alternatively, the arguments can be vectors that are used to reorder the dendrogram. } \item{labRow, labCol}{character vectors with row and column labels used in the \code{\link{heatmap}} instead of the default. NB., the input matrix is transposed so that row labels will be used for data columns.} \item{scale}{In \code{vegemite} and \code{coverscale}: cover scale used (can be abbreviated). In \code{tabasco}: scaling of colours in \code{\link{heatmap}}; if \code{"column"} or \code{"row"}, all columns or rows are scaled to equal maximum colour (NB., these refer to the transposed data of the \code{\link{heatmap}}). } \item{col}{A vector of colours used for above-zero abundance values.} \item{maxabund}{Maximum abundance used with \code{scale = "log"}. Data maximum in the \code{select}ed subset will be used if this is missing.} \item{\dots}{Arguments passed to \code{coverscale} (i.e., \code{maxabund}) in \code{vegemite} and to \code{\link{heatmap}} in \code{tabasco}.} } \details{ The function \code{vegemite} prints a traditional community table. The display is transposed, so that species are in rows and sites in columns. The table is printed in compact form: only one character can be used for abundance, and there are no spaces between columns. Species with no occurrences are dropped from the table. Function \code{tabasco} produces a similar table as \code{vegemite} using \code{\link{heatmap}}, where abundances are coded by colours. The function can also display dendrograms for sites (columns) or species if these are given as an argument (\code{use} for sites, \code{sp.ind} for species). The parameter \code{use} will be used to re-order output. The \code{use} can be a vector or an object from \code{\link{hclust}} or \code{\link[cluster]{agnes}}, a \code{\link{dendrogram}} or any ordination result recognized by \code{\link{scores}} (all ordination methods in \pkg{vegan} and some of those not in \pkg{vegan}). The \code{\link{hclust}}, \code{\link[cluster]{agnes}} and \code{\link{dendrogram}} must be for sites. The dendrogram is displayed above the sites in \code{tabasco}, but is not shown in \code{vegemite}. No dendrogram for species is displayed, except when given in \code{sp.ind}. If \code{use} is a vector, it is used for ordering sites. If \code{use} is an object from ordination, both sites and species are arranged by the first axis (provided that results are available both also for species). When \code{use} is an object from \code{\link{hclust}}, \code{\link[cluster]{agnes}} or a \code{\link{dendrogram}}, the sites are ordered similarly as in the cluster dendrogram. Function \code{tabasco} re-orders the dendrogram if \code{Rowv = TRUE} or \code{Rowv} is a vector. Such re-ordering is not available for \code{vegemite}, but it can be done by hand using \code{\link{reorder.dendrogram}} or \code{\link{reorder.hclust}}. Please note that \code{\link{dendrogram}} and \code{\link{hclust}} reordering can differ: unweighted means of merged branches are used in \code{\link{dendrogram}}, but weighted means (= means of leaves of the cluster) are used in \code{\link{reorder.hclust}}. In all cases where species scores are missing, species are ordered by their weighted averages (\code{\link{wascores}}) on site order. Species and sites can be ordered explicitly giving their indices or names in parameters \code{sp.ind} and \code{site.ind}. If these are given, they take precedence over \code{use}. A subset of sites can be displayed using argument \code{select}, but this cannot be used to order sites, but you still must give \code{use} or \code{site.ind}. However, \code{tabasco} makes two exceptions: \code{site.ind} and \code{select} cannot be used when \code{use} is a dendrogram (clustering result). In addition, the \code{sp.ind} can be an \code{\link{hclust}} tree, \code{\link[cluster]{agnes}} clustering or a \code{\link{dendrogram}}, and in that case the dendrogram is plotted on the left side of the \code{\link{heatmap}}. Phylogenetic trees cannot be directly used, \code{\link[ape]{as.hclust.phylo}} (package \pkg{ape}) can transform these to \code{\link{hclust}} trees. If \code{scale} is given, \code{vegemite} calls \code{coverscale} to transform percent cover scale or some other scales into traditional class scales used in vegetation science (\code{coverscale} can be called directly, too). Braun-Blanquet and Domin scales are actually not strict cover scales, and the limits used for codes \code{r} and \code{+} are arbitrary. Scale \code{Hill} may be inappropriately named, since Mark O. Hill probably never intended this as a cover scale. However, it is used as default 'cut levels' in his \code{TWINSPAN}, and surprisingly many users stick to this default, and this is a \emph{de facto} standard in publications. All traditional scales assume that values are cover percentages with maximum 100. However, non-traditional alternative \code{log} can be used with any scale range. Its class limits are integer powers of 1/2 of the maximum (argument \code{maxabund}), with \code{+} used for non-zero entries less than 1/512 of the maximum (\code{log} stands alternatively for logarithmic or logical). Scale \code{fix} is intended for `fixing' 10-point scales: it truncates scale values to integers, and replaces 10 with \code{X} and positive values below 1 with \code{+}. } \value{ The functions are used mainly to display a table, but they return (invisibly) a list with items: \item{species}{Ordered species indices} \item{sites}{Ordered site indices} These items can be used as arguments \code{sp.ind} and \code{site.ind} to reproduce the table. In addition to the proper table, \code{vegemite} prints the numbers of species and sites and the name of the used cover scale at the end. } \references{ The cover scales are presented in many textbooks of vegetation science; I used: Shimwell, D.W. (1971) \emph{The Description and Classification of Vegetation}. Sidgwick & Jackson. } \author{Jari Oksanen} \seealso{\code{\link{cut}} and \code{\link{approx}} for making your own \sQuote{cover scales} for \code{vegemite}. Function \code{tabasco} is based on \code{\link{heatmap}} which in turn is based on \code{\link{image}}. Both functions order species with weighted averages using \code{\link{wascores}}. } \note{ The name \code{vegemite} was chosen because the output is so compact, and the \code{tabasco} because it is just as compact, but uses heat colours. } \examples{ data(varespec) ## Print only more common species freq <- apply(varespec > 0, 2, sum) vegemite(varespec, scale="Hult", sp.ind = freq > 10) ## Order by correspondence analysis, use Hill scaling and layout: dca <- decorana(varespec) vegemite(varespec, dca, "Hill", zero="-") ## Show one class from cluster analysis, but retain the ordering above clus <- hclust(vegdist(varespec)) cl <- cutree(clus, 3) sel <- vegemite(varespec, use=dca, select = cl == 3, scale="Br") ## Re-create previous vegemite(varespec, sp=sel$sp, site=sel$site, scale="Hult") ## Re-order clusters by ordination clus <- as.dendrogram(clus) clus <- reorder(clus, scores(dca, choices=1, display="sites"), agglo.FUN = mean) vegemite(varespec, clus, scale = "Hult") ## Abundance values have such a wide range that they must be rescaled ## or all abundances will not be shown in tabasco tabasco(decostand(varespec, "log"), dca) ## Classification trees for species data(dune, dune.taxon) taxontree <- hclust(taxa2dist(dune.taxon)) plotree <- hclust(vegdist(dune), "average") ## Automatic reordering of clusters tabasco(dune, plotree, sp.ind = taxontree) ## No reordering of taxonomy tabasco(dune, plotree, sp.ind = taxontree, Colv = FALSE) ## Species cluster: most dissimilarity indices do a bad job when ## comparing rare and common species, but Raup-Crick makes sense sptree <- hclust(vegdist(t(dune), "raup"), "average") tabasco(dune, plotree, sptree) } \keyword{print} \keyword{manip} \keyword{hplot} vegan/man/vegdist.Rd0000644000176200001440000004260213231354436014071 0ustar liggesusers\encoding{UTF-8} \name{vegdist} \alias{vegdist} \title{Dissimilarity Indices for Community Ecologists } \description{ The function computes dissimilarity indices that are useful for or popular with community ecologists. All indices use quantitative data, although they would be named by the corresponding binary index, but you can calculate the binary index using an appropriate argument. If you do not find your favourite index here, you can see if it can be implemented using \code{\link{designdist}}. Gower, Bray--Curtis, Jaccard and Kulczynski indices are good in detecting underlying ecological gradients (Faith et al. 1987). Morisita, Horn--Morisita, Binomial, Cao and Chao indices should be able to handle different sample sizes (Wolda 1981, Krebs 1999, Anderson & Millar 2004), and Mountford (1962) and Raup-Crick indices for presence--absence data should be able to handle unknown (and variable) sample sizes. } \usage{vegdist(x, method="bray", binary=FALSE, diag=FALSE, upper=FALSE, na.rm = FALSE, ...) } \arguments{ \item{x}{Community data matrix.} \item{method}{Dissimilarity index, partial match to \code{"manhattan"}, \code{"euclidean"}, \code{"canberra"}, \code{"bray"}, \code{"kulczynski"}, \code{"jaccard"}, \code{"gower"}, \code{"altGower"}, \code{"morisita"}, \code{"horn"}, \code{"mountford"}, \code{"raup"} , \code{"binomial"}, \code{"chao"}, \code{"cao"} or \code{"mahalanobis"}.} \item{binary}{Perform presence/absence standardization before analysis using \code{\link{decostand}}.} \item{diag}{Compute diagonals. } \item{upper}{Return only the upper diagonal. } \item{na.rm}{Pairwise deletion of missing observations when computing dissimilarities.} \item{\dots}{Other parameters. These are ignored, except in \code{method ="gower"} which accepts \code{range.global} parameter of \code{\link{decostand}}. .} } \details{Jaccard (\code{"jaccard"}), Mountford (\code{"mountford"}), Raup--Crick (\code{"raup"}), Binomial and Chao indices are discussed later in this section. The function also finds indices for presence/ absence data by setting \code{binary = TRUE}. The following overview gives first the quantitative version, where \eqn{x_{ij}}{x[ij]} \eqn{x_{ik}}{x[ik]} refer to the quantity on species (column) \eqn{i} and sites (rows) \eqn{j} and \eqn{k}. In binary versions \eqn{A} and \eqn{B} are the numbers of species on compared sites, and \eqn{J} is the number of species that occur on both compared sites similarly as in \code{\link{designdist}} (many indices produce identical binary versions): \tabular{ll}{ \code{euclidean} \tab \eqn{d_{jk} = \sqrt{\sum_i (x_{ij}-x_{ik})^2}}{d[jk] = sqrt(sum(x[ij]-x[ik])^2)} \cr \tab binary: \eqn{\sqrt{A+B-2J}}{sqrt(A+B-2*J)} \cr \code{manhattan} \tab \eqn{d_{jk}=\sum_i |x_{ij}-x_{ik}|}{d[jk] = sum(abs(x[ij] - x[ik]))} \cr \tab binary: \eqn{A+B-2J}{A+B-2*J} \cr \code{gower} \tab \eqn{d_{jk} = (1/M) \sum_i \frac{|x_{ij}-x_{ik}|}{\max x_i-\min x_i}}{d[jk] = (1/M) sum(abs(x[ij]-x[ik])/(max(x[i])-min(x[i])))} \cr \tab binary: \eqn{(A+B-2J)/M}{(A+B-2*J)/M}, \cr \tab where \eqn{M} is the number of columns (excluding missing values) \cr \code{altGower} \tab \eqn{d_{jk} = (1/NZ) \sum_i |x_{ij} - x_{ik}|}{d[jk] = (1/NZ) sum(abs(x[ij] - x[ik]))} \cr \tab where \eqn{NZ} is the number of non-zero columns excluding double-zeros (Anderson et al. 2006). \cr \tab binary: \eqn{\frac{A+B-2J}{A+B-J}}{(A+B-2*J)/(A+B-J)} \cr \code{canberra} \tab \eqn{d_{jk}=\frac{1}{NZ} \sum_i \frac{|x_{ij}-x_{ik}|}{|x_{ij}|+|x_{ik}|}}{d[jk] = (1/NZ) sum (abs(x[ij]-x[ik])/(abs(x[ij])+abs(x[ik])))} \cr \tab where \eqn{NZ} is the number of non-zero entries. \cr \tab binary: \eqn{\frac{A+B-2J}{A+B-J}}{(A+B-2*J)/(A+B-J)} \cr \code{bray} \tab \eqn{d_{jk} = \frac{\sum_i |x_{ij}-x_{ik}|}{\sum_i (x_{ij}+x_{ik})}}{d[jk] = (sum abs(x[ij]-x[ik]))/(sum (x[ij]+x[ik]))} \cr \tab binary: \eqn{\frac{A+B-2J}{A+B}}{(A+B-2*J)/(A+B)} \cr \code{kulczynski} \tab \eqn{d_{jk} = 1-0.5(\frac{\sum_i \min(x_{ij},x_{ik})}{\sum_i x_{ij}} + \frac{\sum_i \min(x_{ij},x_{ik})}{\sum_i x_{ik}} )}{d[jk] 1 - 0.5*((sum min(x[ij],x[ik])/(sum x[ij]) + (sum min(x[ij],x[ik])/(sum x[ik]))} \cr \tab binary: \eqn{1-(J/A + J/B)/2}{1-(J/A + J/B)/2} \cr \code{morisita} \tab \eqn{d_{jk} = 1 - \frac{2 \sum_i x_{ij} x_{ik}}{(\lambda_j + \lambda_k) \sum_i x_{ij} \sum_i x_{ik}}}{d[jk] = 1 - 2*sum(x[ij]*x[ik])/((lambda[j]+lambda[k]) * sum(x[ij])*sum(x[ik]))}, where \cr \tab \eqn{\lambda_j = \frac{\sum_i x_{ij} (x_{ij} - 1)}{\sum_i x_{ij} \sum_i (x_{ij} - 1)}}{lambda[j] = sum(x[ij]*(x[ij]-1))/sum(x[ij])*sum(x[ij]-1)} \cr \tab binary: cannot be calculated \cr \code{horn} \tab Like \code{morisita}, but \eqn{\lambda_j = \sum_i x_{ij}^2/(\sum_i x_{ij})^2}{lambda[j] = sum(x[ij]^2)/(sum(x[ij])^2)} \cr \tab binary: \eqn{\frac{A+B-2J}{A+B}}{(A+B-2*J)/(A+B)} \cr \code{binomial} \tab \eqn{d_{jk} = \sum_i [x_{ij} \log (\frac{x_{ij}}{n_i}) + x_{ik} \log (\frac{x_{ik}}{n_i}) - n_i \log(\frac{1}{2})]/n_i}{d[jk] = sum(x[ij]*log(x[ij]/n[i]) + x[ik]*log(x[ik]/n[i]) - n[i]*log(1/2))/n[i]}, \cr \tab where \eqn{n_i = x_{ij} + x_{ik}}{n[i] = x[ij] + x[ik]} \cr \tab binary: \eqn{\log(2) \times (A+B-2J)}{log(2)*(A+B-2*J)} \cr \code{cao} \tab \eqn{d_{jk} = \frac{1}{S} \sum_i \log \left(\frac{n_i}{2}\right) - (x_{ij} \log(x_{ik}) + x_{ik} \log(x_{ij}))/n_i}{d[jk] = (1/S) * sum(log(n[i]/2) - (x[ij]*log(x[ik]) + x[ik]*log(x[ij]))/n[i])}, \cr \tab where \eqn{S} is the number of species in compared sites and \eqn{n_i = x_{ij}+x_{ik}}{n[i] = x[ij] + x[ik]} } Jaccard index is computed as \eqn{2B/(1+B)}, where \eqn{B} is Bray--Curtis dissimilarity. Binomial index is derived from Binomial deviance under null hypothesis that the two compared communities are equal. It should be able to handle variable sample sizes. The index does not have a fixed upper limit, but can vary among sites with no shared species. For further discussion, see Anderson & Millar (2004). Cao index or CYd index (Cao et al. 1997) was suggested as a minimally biased index for high beta diversity and variable sampling intensity. Cao index does not have a fixed upper limit, but can vary among sites with no shared species. The index is intended for count (integer) data, and it is undefined for zero abundances; these are replaced with arbitrary value \eqn{0.1} following Cao et al. (1997). Cao et al. (1997) used \eqn{\log_{10}}{log10}, but the current function uses natural logarithms so that the values are approximately \eqn{2.30} times higher than with 10-based logarithms. Anderson & Thompson (2004) give an alternative formulation of Cao index to highlight its relationship with Binomial index (above). Mountford index is defined as \eqn{M = 1/\alpha} where \eqn{\alpha} is the parameter of Fisher's logseries assuming that the compared communities are samples from the same community (cf. \code{\link{fisherfit}}, \code{\link{fisher.alpha}}). The index \eqn{M} is found as the positive root of equation \eqn{\exp(aM) + \exp(bM) = 1 + \exp[(a+b-j)M]}{exp(a*M) + exp(b*M) = 1 + exp((a+b-j)*M)}, where \eqn{j} is the number of species occurring in both communities, and \eqn{a} and \eqn{b} are the number of species in each separate community (so the index uses presence--absence information). Mountford index is usually misrepresented in the literature: indeed Mountford (1962) suggested an approximation to be used as starting value in iterations, but the proper index is defined as the root of the equation above. The function \code{vegdist} solves \eqn{M} with the Newton method. Please note that if either \eqn{a} or \eqn{b} are equal to \eqn{j}, one of the communities could be a subset of other, and the dissimilarity is \eqn{0} meaning that non-identical objects may be regarded as similar and the index is non-metric. The Mountford index is in the range \eqn{0 \dots \log(2)}{0 \dots log(2)}, but the dissimilarities are divided by \eqn{\log(2)}{log(2)} so that the results will be in the conventional range \eqn{0 \dots 1}. Raup--Crick dissimilarity (\code{method = "raup"}) is a probabilistic index based on presence/absence data. It is defined as \eqn{1 - prob(j)}, or based on the probability of observing at least \eqn{j} species in shared in compared communities. The current function uses analytic result from hypergeometric distribution (\code{\link{phyper}}) to find the probabilities. This probability (and the index) is dependent on the number of species missing in both sites, and adding all-zero species to the data or removing missing species from the data will influence the index. The probability (and the index) may be almost zero or almost one for a wide range of parameter values. The index is nonmetric: two communities with no shared species may have a dissimilarity slightly below one, and two identical communities may have dissimilarity slightly above zero. The index uses equal occurrence probabilities for all species, but Raup and Crick originally suggested that sampling probabilities should be proportional to species frequencies (Chase et al. 2011). A simulation approach with unequal species sampling probabilities is implemented in \code{\link{raupcrick}} function following Chase et al. (2011). The index can be also used for transposed data to give a probabilistic dissimilarity index of species co-occurrence (identical to Veech 2013). Chao index tries to take into account the number of unseen species pairs, similarly as in \code{method = "chao"} in \code{\link{specpool}}. Function \code{vegdist} implements a Jaccard type index defined as \eqn{d_{jk} = 1 - U_j U_k/(U_j + U_k - U_j U_k)}{d[jk] = 1 - U[j]*U[k]/(U[j] + U[k] - U[j]*U[k])}, where \eqn{U_j = C_j/N_j + (N_k - 1)/N_k \times a_1/(2 a_2) \times S_j/N_j}{U[j] = C[j]/N[j] + (N[k] -1)/N[k] * a1/(2*a2) * S[j]/N[j]}, and similarly for \eqn{U_k}{U[k]}. Here \eqn{C_j}{C[j]} is the total number of individuals in the species of site \eqn{j} that are shared with site \eqn{k}, \eqn{N_j}{N[j]} is the total number of individuals at site \eqn{j}, \eqn{a_1}{a1} (and \eqn{a_2}{a2}) are the number of species occurring in site \eqn{j} that have only one (or two) individuals in site \eqn{k}, and \eqn{S_j}{S[j]} is the total number of individuals in the species present at site \eqn{j} that occur with only one individual in site \eqn{k} (Chao et al. 2005). Morisita index can be used with genuine count data (integers) only. Its Horn--Morisita variant is able to handle any abundance data. Mahalanobis distances are Euclidean distances of a matrix where columns are centred, have unit variance, and are uncorrelated. The index is not commonly used for community data, but it is sometimes used for environmental variables. The calculation is based on transforming data matrix and then using Euclidean distances following Mardia et al. (1979). The Mahalanobis transformation usually fails when the number of columns is larger than the number of rows (sampling units). When the transformation fails, the distances are nearly constant except for small numeric noise. Users must check that the returned Mahalanobis distances are meaningful. Euclidean and Manhattan dissimilarities are not good in gradient separation without proper standardization but are still included for comparison and special needs. Bray--Curtis and Jaccard indices are rank-order similar, and some other indices become identical or rank-order similar after some standardizations, especially with presence/absence transformation of equalizing site totals with \code{\link{decostand}}. Jaccard index is metric, and probably should be preferred instead of the default Bray-Curtis which is semimetric. The naming conventions vary. The one adopted here is traditional rather than truthful to priority. The function finds either quantitative or binary variants of the indices under the same name, which correctly may refer only to one of these alternatives For instance, the Bray index is known also as Steinhaus, Czekanowski and \enc{Sørensen}{Sorensen} index. The quantitative version of Jaccard should probably called \enc{Ružička}{Ruzicka} index. The abbreviation \code{"horn"} for the Horn--Morisita index is misleading, since there is a separate Horn index. The abbreviation will be changed if that index is implemented in \code{vegan}. } \value{ Should provide a drop-in replacement for \code{\link{dist}} and return a distance object of the same type. } \references{ Anderson, M.J. and Millar, R.B. (2004). Spatial variation and effects of habitat on temperate reef fish assemblages in northeastern New Zealand. \emph{Journal of Experimental Marine Biology and Ecology} 305, 191--221. Anderson, M.J., Ellingsen, K.E. & McArdle, B.H. (2006). Multivariate dispersion as a measure of beta diversity. \emph{Ecology Letters} 9, 683--693. Anderson, M.J & Thompson, A.A. (2004). Multivariate control charts for ecological and environmental monitoring. \emph{Ecological Applications} 14, 1921--1935. Cao, Y., Williams, W.P. & Bark, A.W. (1997). Similarity measure bias in river benthic Auswuchs community analysis. \emph{Water Environment Research} 69, 95--106. Chao, A., Chazdon, R. L., Colwell, R. K. and Shen, T. (2005). A new statistical approach for assessing similarity of species composition with incidence and abundance data. \emph{Ecology Letters} 8, 148--159. Chase, J.M., Kraft, N.J.B., Smith, K.G., Vellend, M. and Inouye, B.D. (2011). Using null models to disentangle variation in community dissimilarity from variation in \eqn{\alpha}{alpha}-diversity. \emph{Ecosphere} 2:art24 [doi:10.1890/ES10-00117.1] Faith, D. P, Minchin, P. R. and Belbin, L. (1987). Compositional dissimilarity as a robust measure of ecological distance. \emph{Vegetatio} 69, 57--68. Gower, J. C. (1971). A general coefficient of similarity and some of its properties. \emph{Biometrics} 27, 623--637. Krebs, C. J. (1999). \emph{Ecological Methodology.} Addison Wesley Longman. Mardia, K.V., Kent, J.T. and Bibby, J.M. (1979). \emph{Multivariate analysis}. Academic Press. Mountford, M. D. (1962). An index of similarity and its application to classification problems. In: P.W.Murphy (ed.), \emph{Progress in Soil Zoology}, 43--50. Butterworths. Veech, J. A. (2013). A probabilistic model for analysing species co-occurrence. \emph{Global Ecology and Biogeography} 22, 252--260. Wolda, H. (1981). Similarity indices, sample size and diversity. \emph{Oecologia} 50, 296--302. } \author{ Jari Oksanen, with contributions from Tyler Smith (Gower index) and Michael Bedward (Raup--Crick index). } \note{The function is an alternative to \code{\link{dist}} adding some ecologically meaningful indices. Both methods should produce similar types of objects which can be interchanged in any method accepting either. Manhattan and Euclidean dissimilarities should be identical in both methods. Canberra index is divided by the number of variables in \code{vegdist}, but not in \code{\link{dist}}. So these differ by a constant multiplier, and the alternative in \code{vegdist} is in range (0,1). Function \code{\link[cluster]{daisy}} (package \pkg{cluster}) provides alternative implementation of Gower index that also can handle mixed data of numeric and class variables. There are two versions of Gower distance (\code{"gower"}, \code{"altGower"}) which differ in scaling: \code{"gower"} divides all distances by the number of observations (rows) and scales each column to unit range, but \code{"altGower"} omits double-zeros and divides by the number of pairs with at least one above-zero value, and does not scale columns (Anderson et al. 2006). You can use \code{\link{decostand}} to add range standardization to \code{"altGower"} (see Examples). Gower (1971) suggested omitting double zeros for presences, but it is often taken as the general feature of the Gower distances. See Examples for implementing the Anderson et al. (2006) variant of the Gower index. Most dissimilarity indices in \code{vegdist} are designed for community data, and they will give misleading values if there are negative data entries. The results may also be misleading or \code{NA} or \code{NaN} if there are empty sites. In principle, you cannot study species composition without species and you should remove empty sites from community data. } \seealso{ Function \code{\link{designdist}} can be used for defining your own dissimilarity index. Alternative dissimilarity functions include \code{\link{dist}} in base \R, \code{\link[cluster]{daisy}} (package \pkg{cluster}), and \code{\link[labdsv]{dsvdis}} (package \pkg{labdsv}). Function \code{\link{betadiver}} provides indices intended for the analysis of beta diversity.} \examples{ data(varespec) vare.dist <- vegdist(varespec) # Orlóci's Chord distance: range 0 .. sqrt(2) vare.dist <- vegdist(decostand(varespec, "norm"), "euclidean") # Anderson et al. (2006) version of Gower vare.dist <- vegdist(decostand(varespec, "log"), "altGower") # Range standardization with "altGower" (that excludes double-zeros) vare.dist <- vegdist(decostand(varespec, "range"), "altGower") } \keyword{ multivariate } vegan/man/taxondive.Rd0000644000176200001440000001430312626316320014417 0ustar liggesusers\name{taxondive} \alias{taxondive} \alias{summary.taxondive} \alias{plot.taxondive} \alias{taxa2dist} \title{ Indices of Taxonomic Diversity and Distinctness } \description{ Function finds indices of taxonomic diversity and distinctness, which are averaged taxonomic distances among species or individuals in the community (Clarke & Warwick 1998, 2001) } \usage{ taxondive(comm, dis, match.force = FALSE) taxa2dist(x, varstep = FALSE, check = TRUE, labels) } \arguments{ \item{comm}{Community data. } \item{dis}{Taxonomic distances among taxa in \code{comm}. This should be a \code{\link{dist}} object or a symmetric square matrix. } \item{match.force}{Force matching of column names in \code{comm} and labels in \code{dis}. If \code{FALSE}, matching only happens when dimensions differ, and in that case the species must be in identical order in both.} \item{x}{Classification table with a row for each species or other basic taxon, and columns for identifiers of its classification at higher levels.} \item{varstep}{Vary step lengths between successive levels relative to proportional loss of the number of distinct classes.} \item{check}{If \code{TRUE}, remove all redundant levels which are different for all rows or constant for all rows and regard each row as a different basal taxon (species). If \code{FALSE} all levels are retained and basal taxa (species) also must be coded as variables (columns). You will get a warning if species are not coded, but you can ignore this if that was your intention.} \item{labels}{The \code{labels} attribute of taxonomic distances. Row names will be used if this is not given. Species will be matched by these labels in \code{comm} and \code{dis} in \code{taxondive} if these have different dimensions.} } \details{ Clarke & Warwick (1998, 2001) suggested several alternative indices of taxonomic diversity or distinctness. Two basic indices are called taxonomic diversity (\eqn{\Delta}) and distinctness (\eqn{\Delta^*}): \tabular{c}{ \eqn{\Delta = (\sum \sum_{i, "pCCA")} which will work both with the current and future releases.} \item{\code{QR}}{The QR decomposition of explanatory variables as produced by \code{\link{qr}}. The constrained ordination algorithm is based on QR decomposition of constraints and conditions (environmental data). The environmental data are first centred in \code{rda} or weighted and centred in \code{cca}. The QR decomposition is used in many functions that access \code{cca} results, and it can be used to find many items that are not directly stored in the object. For examples, see \code{\link{coef.cca}}, \code{\link{coef.rda}}, \code{\link{vif.cca}}, \code{\link{permutest.cca}}, \code{\link{predict.cca}}, \code{\link{predict.rda}}, \code{\link{calibrate.cca}}. For possible uses of this component, see \code{\link{qr}}. In \code{pCCA} and \code{CCA}.} \item{\code{rank}}{The rank of the ordination component.} \item{\code{qrank}}{The rank of the constraints which is the difference of the ranks of QR decompositions in \code{pCCA} and \code{CCA} components. Only in \code{CCA}.} \item{\code{tot.chi}}{Total inertia or the sum of all eigenvalues of the component.} \item{\code{real.tot.chi}}{If there are negative eigenvalues in \code{\link{capscale}}, these will be included in \code{tot.chi}, and the sum of positive eigenvalues will be given in these items.} \item{\code{imaginary.chi}, \code{imaginary.rank}, \code{imaginary.u.eig}}{The sum, rank (number) of negative eigenvalues and scaled site scores for imaginary axes in \code{\link{capscale}}. Only in \code{CA} item and only if negative eigenvalues were found in \code{\link{capscale}}.} \item{\code{u}}{(Weighted) orthonormal site scores. Please note that scaled scores are not stored in the \code{cca} object, but they are made when the object is accessed with functions like \code{\link{scores.cca}}, \code{\link{summary.cca}} or \code{\link{plot.cca}}, or their \code{rda} variants. Only in \code{CCA} and \code{CA}. In the \code{CCA} component these are the so-called linear combination scores. } \item{\code{v}}{(Weighted) orthonormal species scores. If missing species were omitted from the analysis, this will contain attribute \code{\link{na.action}} that lists the omitted species. Only in \code{CCA} and \code{CA}.} \item{\code{wa}}{Site scores found as weighted averages (\code{cca}) or weighted sums (\code{rda}) of \code{v} with weights \code{Xbar}, but the multiplying effect of eigenvalues removed. These often are known as WA scores in \code{cca}. Only in \code{CCA}.} \item{\code{wa.excluded, u.excluded}}{WA scores for rows removed by \code{na.action = na.exclude} in \code{CCA} and \code{CA} components if these could be calculated.} \item{\code{Xbar}}{The standardized data matrix after previous stages of analysis. In \code{CCA} this is after possible \code{pCCA} or after partialling out the effects of conditions, and in \code{CA} after both \code{pCCA} and \code{CCA}. In \code{\link{cca}} the standardization is Chi-square, and in \code{\link{rda}} centring and optional scaling by species standard deviations using function \code{\link{scale}}. This component will be \bold{deprecated} in the future. Instead of directly accessing these components, you should use commands \code{ordiYbar(, "partial")} (for \code{$CCA$Xbar}) or \code{ordiYbar(, "CA")} (for \code{$CA$Xbar}) which will work both in the current and in the future versions of \pkg{vegan}.} } } } \section{NA Action and Subset}{ If the constraints had missing values or subsets, and \code{\link{na.action}} was set to \code{\link{na.exclude}} or \code{\link{na.omit}}, the result will have some extra items: \describe{ \item{\code{subset}}{subset evaluated as a logical vector (\code{TRUE} for included cases).} \item{\code{na.action}}{The object returned by \code{\link{na.action}} which is a named vector of indices of removed items. The class of the vector is either \code{"omit"} or \code{"exclude"} as set by \code{\link{na.action}}. The \code{na.action} is applied after \code{subset} so that the indices refer to the subset data.} \item{\code{residuals.zombie}}{A zombie vector of the length of number of rows in the residual ordination. \R versions before 2.13.0 may use this vector to find the number of valid observations, and it is provided for their use although this is useless in \R 2.13.0 and in \pkg{vegan}. Currently \R uses \code{\link{nobs.cca}} to find the number of observations.} \item{\code{rowsum.excluded}}{Row sums of removed observations. Only in \code{\link{cca}}.} \item{\code{CCA$wa.excluded}}{The WA scores for sites (found from community data) in constrained ordination if \code{\link{na.action}} was \code{\link{na.exclude}} and the scores could be calculated. The scores cannot be found for \code{\link{capscale}} and in partial ordination.} \item{\code{CA$u.excluded}}{Row scores for sites in unconstrained ordination with identical conditions as above.} } } \section{capscale and dbrda}{ \pkg{Vegan} has two functions for distance-based Redundancy analysis: \code{\link{capscale}} and \code{\link{dbrda}}. Function \code{\link{capscale}} uses \code{\link{rda}} and returns its result object, but it may add some items depending on its arguments: \describe{ \item{\code{real.tot.chi}}{Sum of positive eigenvalues if there are negative eigenvalues. The item \code{tot.chi} gives the total inertia with negative eigenvalues. This item is given for the whole model and for each component \code{pCCA}, \code{CCA} and \code{CA} if there are negative eigenvalues.} \item{\code{metaMDSdist}}{The data set name if \code{metaMDSdist = TRUE}.} \item{\code{sqrt.dist}}{Logical value, \code{TRUE} if squareroots of dissimilarities were used.} \item{\code{ac}}{Additive constant used if \code{add = TRUE}.} \item{\code{add}}{The adjustment method to find \code{ac}, either \code{"lingoes"} or \code{"cailliez"} (Legendre & Legendre 2012).} \item{\code{adjust}}{Adjustment of dissimilarities: see \code{\link{capscale}}, section \dQuote{Notes}.} \item{\code{G}}{The working structure of Gower transformed dissimilarities defined as \eqn{-(D^2 - M)/2}, where \eqn{D} are the dissimilarities and \eqn{M} is the centring matrix. This structure is used to asses the total inertia, and it will be used also in permutation tests. This is given for items \code{pCCA} and \code{CCA}, and for \code{CCA} it is the residual \eqn{G} after \code{pCCA}.} } Function \code{\link{dbrda}} does not use \code{\link{rda}} but provides a parallel implementation for dissimilarities. Its result output is very similar to \code{\link{capscale}} described above with the following differences: \describe{ \item{\code{Xbar}, \code{v}}{are \code{NA} because they cannot be calculated from dissimilarities.} \item{\code{Fit}}{ of \code{pCCA} is from Gower double centred dissimilarities \code{G} instead of \code{Xbar} (that does not exist).} \item{\code{G}}{ is returned with \code{pCCA}, \code{CCA} and \code{CA} components. It always gives the transformed dissimilarities as they enter the stage of analysis, i.e., before applying conditions or constraints.} \item{\code{eig}}{lists also negative eigenvalues for \code{CCA} and \code{pCCA}.} \item{\code{u}}{or row scores only give real axes with positive eigenvalues. The imaginary scores (if any) are in \code{imaginary.u}. The number of columns of real scores (positive eigenvalues) is given in item \code{poseig}. There is no \code{imaginary.u.eig}.} } } \note{ In old versions of \pkg{vegan} the object also included scores scaled by eigenvalues (\code{u.eig}, \code{v.eig} and \code{wa.eig}), but these were removed in \pkg{vegan} 2.2-0. The scores are scaled when they are accessed with \code{\link{scores}} function. It is advisable to always use \code{\link{scores}} in accessing the results instead of directly accessing the elements of the the \code{cca} object. } \seealso{The description here provides a hacker's interface. User level functions for further analysis and handling of \code{cca} objects are described in this section in \code{\link{cca}}. Also for a hacker interface, it may be better to use following low level functions to access the results: \code{\link{scores.cca}} (which also scales results), \code{\link{predict.cca}} (which can also use \code{newdata}), \code{\link{fitted.cca}}, \code{\link{residuals.cca}}, \code{\link{alias.cca}}, \code{\link{coef.cca}}, \code{\link{model.frame.cca}}, \code{\link{model.matrix.cca}}, \code{\link{deviance.cca}}, \code{\link{eigenvals.cca}}, \code{\link{RsquareAdj.cca}}, \code{\link{weights.cca}}, \code{\link{nobs.cca}}, or \code{rda} variants of these functions. You can use \code{\link{as.mlm}} to cast a \code{cca.object} into result of multiple response linear model (\code{\link{lm}}) in order to more easily find some statistics (which in principle could be directly found from the \code{cca} object as well). This section in \code{\link{cca}} gives a more complete list of methods to handle the constrained ordination result object. } \references{ Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English ed. Elsevier. } \author{ Jari Oksanen } \examples{ # Some species will be missing in the analysis, because only a subset # of sites is used below. data(dune) data(dune.env) mod <- cca(dune[1:15,] ~ ., dune.env[1:15,]) # Look at the names of missing species attr(mod$CCA$v, "na.action") # Look at the names of the aliased variables: mod$CCA$alias # Access directly constrained weighted orthonormal species and site # scores, constrained eigenvalues and margin sums. spec <- mod$CCA$v sites <- mod$CCA$u eig <- mod$CCA$eig rsum <- mod$rowsum csum <- mod$colsum } \keyword{ models} \keyword{multivariate} vegan/man/permustats.Rd0000644000176200001440000001561413231354436014636 0ustar liggesusers\encoding{UTF-8} \name{permustats} \alias{permustats} \alias{permustats.adonis} \alias{permustats.anosim} \alias{permustats.anova.cca} \alias{permustats.CCorA} \alias{permustats.envfit} \alias{permustats.factorfit} \alias{permustats.mantel} \alias{permustats.mrpp} \alias{permustats.mso} \alias{permustats.oecosimu} \alias{permustats.ordiareatest} \alias{permustats.permutest.betadisper} \alias{permustats.permutest.cca} \alias{permustats.protest} \alias{permustats.vectorfit} \alias{summary.permustats} \alias{c.permustats} \alias{densityplot.permustats} \alias{density.permustats} \alias{qqnorm.permustats} \alias{qqmath.permustats} \title{ Extract, Analyse and Display Permutation Results } \description{ The \code{permustats} function extracts permutation results of \pkg{vegan} functions. Its support functions can find quantiles and standardized effect sizes, plot densities and Q-Q plots. } \usage{ permustats(x, ...) \method{summary}{permustats}(object, interval = 0.95, alternative, ...) \method{densityplot}{permustats}(x, data, xlab = "Permutations", ...) \method{density}{permustats}(x, observed = TRUE, ...) \method{qqnorm}{permustats}(y, observed = TRUE, ...) \method{qqmath}{permustats}(x, data, observed = TRUE, sd.scale = FALSE, ylab = "Permutations", ...) } \arguments{ \item{object, x, y}{The object to be handled.} \item{interval}{numeric; the coverage interval reported.} \item{alternative}{A character string specifying the limits used for the \code{interval} and the direction of the test when evaluating the \eqn{p}-values. Must be one of \code{"two.sided"} (both upper and lower limit), \code{"greater"} (upper limit), \code{"less"} (lower limit). Usually \code{alternative} is given in the result object, but it can be specified with this argument.} \item{xlab, ylab}{Arguments of \code{\link[lattice]{densityplot}} and \code{\link[lattice]{qqmath}} functions.} \item{observed}{Add observed statistic among permutations.} \item{sd.scale}{Scale permutations to unit standard deviation and observed statistic to standardized effect size.} \item{data}{Ignored.} \item{\dots}{ Other arguments passed to the function. In \code{density} these are passed to \code{\link{density.default}}.} } \details{ The \code{permustats} function extracts permutation results and observed statistics from several \pkg{vegan} functions that perform permutations or simulations. The \code{summary} method of \code{permustats} estimates the standardized effect sizes (SES) as the difference of observed statistic and mean of permutations divided by the standard deviation of permutations (also known as \eqn{z}-values). It also prints the the mean, median, and limits which contain \code{interval} percent of permuted values. With the default (\code{interval = 0.95}), for two-sided test these are (2.5\%, 97.5\%) and for one-sided tests either 5\% or 95\% quantile and the \eqn{p}-value depending on the test direction. The mean, quantiles and \eqn{z} values are evaluated from permuted values without observed statistic, but the \eqn{p}-value is evaluated with the observed statistic. The intervals and the \eqn{p}-value are evaluated with the same test direction as in the original test, but this can be changed with argument \code{alternative}. Several \code{permustats} objects can be combined with \code{c} function. The \code{c} function checks that statistics are equal, but performs no other sanity tests. The \code{density} and \code{densityplot} methods display the kernel density estimates of permuted values. When observed value of the statistic is included in the permuted values, the \code{densityplot} method marks the observed statistic as a vertical line. However the \code{density} method uses its standard \code{plot} method and cannot mark the obseved value. The \code{qqnorm} and \code{qqmath} display Q-Q plots of permutations, optionally together with the observed value (default) which is shown as horizontal line in plots. \code{qqnorm} plots permutation values against standard Normal variate. \code{qqmath} defaults to the standard Normal as well, but can accept other alternatives (see standard \code{\link[lattice]{qqmath}}). The \code{qqmath} function can also plot observed statistic as standardized effect size (SES) with standandized permutations (argument \code{sd.scale}). The permutations are standardized without the observed statistic, similarly as in \code{summary}. Functions \code{\link{density}} and \code{\link{qqnorm}} are based on standard \R methods and accept their arguments. They only handle one statistic, and cannot be used when several test statistic were evaluated. The \code{\link[lattice]{densityplot}} and \code{\link[lattice]{qqmath}} are \pkg{lattice} graphics, and can be used either for one or for several statistics. All these functions pass arguments to their underlying functions; see their documentation. Functions \code{\link[lattice]{qqmath}} and \code{\link[lattice]{densityplot}} default to use same axis scaling in all subplots of the lattice. You can use argument \code{scales} to set independent scaling for subplots when this is appropriate (see \code{\link[lattice]{xyplot}} for an exhaustive list of arguments). The \code{permustats} can extract permutation statistics from the results of \code{\link{adonis2}}, \code{\link{adonis}}, \code{\link{anosim}}, \code{\link{anova.cca}}, \code{\link{mantel}}, \code{\link{mantel.partial}}, \code{\link{mrpp}}, \code{\link{oecosimu}}, \code{\link{ordiareatest}}, \code{\link{permutest.cca}}, \code{\link{protest}}, and \code{\link{permutest.betadisper}}. } \value{ The \code{permustats} function returns an object of class \code{"permustats"}. This is a list of items \code{"statistic"} for observed statistics, \code{permutations} which contains permuted values, and \code{alternative} which contains text defining the character of the test (\code{"two.sided"}, \code{"less"} or \code{"greater"}). The \code{\link{qqnorm}} and \code{\link{density}} methods return their standard result objects. } \author{ Jari Oksanen with contributions from Gavin L. Simpson (\code{permustats.permutest.betadisper} method and related modifications to \code{summary.permustats} and the \code{print} method) and Eduard \enc{Szöcs}{Szoecs} (\code{permustats.anova.cca).} } \seealso{ \code{\link{density}}, \code{\link[lattice]{densityplot}}, \code{\link{qqnorm}}, \code{\link[lattice]{qqmath}}. } \examples{ data(dune, dune.env) mod <- adonis2(dune ~ Management + A1, data = dune.env) ## use permustats perm <- permustats(mod) summary(perm) densityplot(perm) qqmath(perm) ## example of multiple types of statistic mod <- with(dune.env, betadisper(vegdist(dune), Management)) pmod <- permutest(mod, nperm = 99, pairwise = TRUE) perm <- permustats(pmod) summary(perm, interval = 0.90) } \keyword{ distribution } \keyword{ smooth } vegan/man/adonis.Rd0000644000176200001440000002301013231354436013671 0ustar liggesusers\encoding{UTF-8} \name{adonis} \alias{adonis} \alias{adonis2} \title{Permutational Multivariate Analysis of Variance Using Distance Matrices} \description{Analysis of variance using distance matrices --- for partitioning distance matrices among sources of variation and fitting linear models (e.g., factors, polynomial regression) to distance matrices; uses a permutation test with pseudo-\eqn{F} ratios.} \usage{ adonis2(formula, data, permutations = 999, method = "bray", sqrt.dist = FALSE, add = FALSE, by = "terms", parallel = getOption("mc.cores"), ...) adonis(formula, data, permutations = 999, method = "bray", strata = NULL, contr.unordered = "contr.sum", contr.ordered = "contr.poly", parallel = getOption("mc.cores"), ...) } \arguments{ \item{formula}{Model formula. The LHS must be either a community data matrix or a dissimilarity matrix, e.g., from \code{\link{vegdist}} or \code{\link{dist}}. If the LHS is a data matrix, function \code{\link{vegdist}} will be used to find the dissimilarities. The RHS defines the independent variables. These can be continuous variables or factors, they can be transformed within the formula, and they can have interactions as in a typical \code{\link{formula}}. If a dissimilarity object is supplied, no species coefficients can be calculated in \code{adonis} (see Value below).} \item{data}{ the data frame for the independent variables.} \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{method}{ the name of any method used in \code{\link{vegdist}} to calculate pairwise distances if the left hand side of the \code{formula} was a data frame or a matrix. } \item{sqrt.dist}{Take square root of dissimilarities. This often euclidifies dissimilarities.} \item{add}{Add a constant to the non-diagonal dissimilarities such that all eigenvalues are non-negative in the underlying Principal Co-ordinates Analysis (see \code{\link{wcmdscale}} for details). Choice \code{"lingoes"} (or \code{TRUE}) use the recommended method of Legendre & Anderson (1999: \dQuote{method 1}) and \code{"cailliez"} uses their \dQuote{method 2}.} \item{by}{\code{by = "terms"} will assess significance for each term (sequentially from first to last), setting \code{by = "margin"} will assess the marginal effects of the terms (each marginal term analysed in a model with all other variables), and \code{by = NULL} will assess the overall significance of all terms together. The arguments is passed on to \code{\link{anova.cca}}.} \item{strata}{ groups (strata) within which to constrain permutations. } \item{contr.unordered, contr.ordered}{contrasts used for the design matrix (default in R is dummy or treatment contrasts for unordered factors). } \item{parallel}{Number of parallel processes or a predefined socket cluster. With \code{parallel = 1} uses ordinary, non-parallel processing. The parallel processing is done with \pkg{parallel} package.} \item{\dots}{Other arguments passed to \code{vegdist}.} } \details{ \code{adonis2} and \code{adonis} are functions for the analysis and partitioning sums of squares using dissimilarities. Function \code{adonis} is directly based on the algorithm of Anderson (2001) and performs a sequential test of terms. Function \code{adonis2} is based on the principles of McArdle & Anderson (2001) and can perform sequential, marginal and overall tests. Function \code{adonis2} also allows using additive constants or squareroot of dissimilarities to avoid negative eigenvalues. but both functions can handle semimetric indices (such as Bray-Curtis) that produce negative eigenvalues. Function \code{adonis2} can be much slower than \code{adonis}, in particular with several terms. With the same random permutation, tests are identical in both functions, and the results are also identical to \code{\link{anova.cca}} of \code{\link{dbrda}} and \code{\link{capscale}}. With Euclidean distances, the tests are also identical to \code{\link{anova.cca}} of \code{\link{rda}}. The functions partition sums of squares of a multivariate data set, and they are directly analogous to MANOVA (multivariate analysis of variance). McArdle and Anderson (2001) and Anderson (2001) refer to the method as \dQuote{permutational manova} (formerly \dQuote{nonparametric manova}). Further, as the inputs are linear predictors, and a response matrix of an arbitrary number of columns, they are a robust alternative to both parametric MANOVA and to ordination methods for describing how variation is attributed to different experimental treatments or uncontrolled covariates. Functions are also analogous to distance-based redundancy analysis in functions \code{\link{dbrda}} and \code{\link{capscale}} (Legendre and Anderson 1999). Functions provide an alternative to AMOVA (nested analysis of molecular variance, Excoffier, Smouse, and Quattro, 1992; \code{\link[ade4]{amova}} in the \pkg{ade4} package) for both crossed and nested factors. } \value{ Function \code{adonis2} returns an \code{\link{anova.cca}} result object. Function \code{adonis} returns an object of class \code{"adonis"} with following components: \item{aov.tab}{Typical AOV table showing sources of variation, degrees of freedom, sequential sums of squares, mean squares, \eqn{F} statistics, partial \eqn{R^2}{R-squared} and \eqn{P} values, based on \eqn{N} permutations. } \item{coefficients}{ matrix of coefficients of the linear model, with rows representing sources of variation and columns representing species; each column represents a fit of a species abundance to the linear model. These are what you get when you fit one species to your predictors. These are NOT available if you supply the distance matrix in the formula, rather than the site x species matrix} \item{coef.sites}{ matrix of coefficients of the linear model, with rows representing sources of variation and columns representing sites; each column represents a fit of a sites distances (from all other sites) to the linear model. These are what you get when you fit distances of one site to your predictors. } \item{f.perms}{ an \eqn{N} by \eqn{m} matrix of the null \eqn{F} statistics for each source of variation based on \eqn{N} permutations of the data. The permutations can be inspected with \code{\link{permustats}} and its support functions.} \item{model.matrix}{The \code{\link{model.matrix}} for the right hand side of the formula.} \item{terms}{The \code{\link{terms}} component of the model.} } \note{Anderson (2001, Fig. 4) warns that the method may confound location and dispersion effects: significant differences may be caused by different within-group variation (dispersion) instead of different mean values of the groups (see Warton et al. 2012 for a general analysis). However, it seems that \code{adonis} is less sensitive to dispersion effects than some of its alternatives (\code{\link{anosim}}, \code{\link{mrpp}}). Function \code{\link{betadisper}} is a sister function to \code{adonis} to study the differences in dispersion within the same geometric framework. } \references{ Anderson, M.J. 2001. A new method for non-parametric multivariate analysis of variance. \emph{Austral Ecology}, \strong{26}: 32--46. Excoffier, L., P.E. Smouse, and J.M. Quattro. 1992. Analysis of molecular variance inferred from metric distances among DNA haplotypes: Application to human mitochondrial DNA restriction data. \emph{Genetics}, \strong{131}:479--491. Legendre, P. and M.J. Anderson. 1999. Distance-based redundancy analysis: Testing multispecies responses in multifactorial ecological experiments. \emph{Ecological Monographs}, \strong{69}:1--24. McArdle, B.H. and M.J. Anderson. 2001. Fitting multivariate models to community data: A comment on distance-based redundancy analysis. \emph{Ecology}, \strong{82}: 290--297. Warton, D.I., Wright, T.W., Wang, Y. 2012. Distance-based multivariate analyses confound location and dispersion effects. \emph{Methods in Ecology and Evolution}, 3, 89--101. } \author{Martin Henry H. Stevens (\code{adonis}) and Jari Oksanen (\code{adonis2}). } \seealso{ \code{\link{mrpp}}, \code{\link{anosim}}, \code{\link{mantel}}, \code{\link{varpart}}. } \examples{ data(dune) data(dune.env) ## default test by terms adonis2(dune ~ Management*A1, data = dune.env) ## overall tests adonis2(dune ~ Management*A1, data = dune.env, by = NULL) ### Example of use with strata, for nested (e.g., block) designs. dat <- expand.grid(rep=gl(2,1), NO3=factor(c(0,10)),field=gl(3,1) ) dat Agropyron <- with(dat, as.numeric(field) + as.numeric(NO3)+2) +rnorm(12)/2 Schizachyrium <- with(dat, as.numeric(field) - as.numeric(NO3)+2) +rnorm(12)/2 total <- Agropyron + Schizachyrium dotplot(total ~ NO3, dat, jitter.x=TRUE, groups=field, type=c('p','a'), xlab="NO3", auto.key=list(columns=3, lines=TRUE) ) Y <- data.frame(Agropyron, Schizachyrium) mod <- metaMDS(Y) plot(mod) ### Ellipsoid hulls show treatment with(dat, ordiellipse(mod, field, kind = "ehull", label = TRUE)) ### Spider shows fields with(dat, ordispider(mod, field, lty=3, col="red")) ### Incorrect (no strata) perm <- how(nperm = 199) adonis2 (Y ~ NO3, data = dat, permutations = perm) ## Correct with strata setBlocks(perm) <- with(dat, field) adonis2(Y ~ NO3, data = dat, permutations = perm) } \keyword{multivariate } \keyword{nonparametric } vegan/man/betadisper.Rd0000644000176200001440000003403313156750403014545 0ustar liggesusers\encoding{UTF-8} \name{betadisper} \alias{betadisper} \alias{scores.betadisper} \alias{anova.betadisper} \alias{plot.betadisper} \alias{boxplot.betadisper} \alias{TukeyHSD.betadisper} \alias{eigenvals.betadisper} \alias{ordimedian} \title{Multivariate homogeneity of groups dispersions (variances)} \description{ Implements Marti Anderson's PERMDISP2 procedure for the analysis of multivariate homogeneity of group dispersions (variances). \code{betadisper} is a multivariate analogue of Levene's test for homogeneity of variances. Non-euclidean distances between objects and group centroids are handled by reducing the original distances to principal coordinates. This procedure has latterly been used as a means of assessing beta diversity. There are \code{anova}, \code{scores}, \code{plot} and \code{boxplot} methods. \code{TukeyHSD.betadisper} creates a set of confidence intervals on the differences between the mean distance-to-centroid of the levels of the grouping factor with the specified family-wise probability of coverage. The intervals are based on the Studentized range statistic, Tukey's 'Honest Significant Difference' method. } \usage{ betadisper(d, group, type = c("median","centroid"), bias.adjust = FALSE, sqrt.dist = FALSE, add = FALSE) \method{anova}{betadisper}(object, \dots) \method{scores}{betadisper}(x, display = c("sites", "centroids"), choices = c(1,2), \dots) \method{eigenvals}{betadisper}(x, \dots) \method{plot}{betadisper}(x, axes = c(1,2), cex = 0.7, pch = seq_len(ng), col = NULL, lty = "solid", lwd = 1, hull = TRUE, ellipse = FALSE, conf, segments = TRUE, seg.col = "grey", seg.lty = lty, seg.lwd = lwd, label = TRUE, label.cex = 1, ylab, xlab, main, sub, \dots) \method{boxplot}{betadisper}(x, ylab = "Distance to centroid", ...) \method{TukeyHSD}{betadisper}(x, which = "group", ordered = FALSE, conf.level = 0.95, \dots) } \arguments{ \item{d}{a distance structure such as that returned by \code{\link[stats]{dist}}, \code{\link{betadiver}} or \code{\link{vegdist}}.} \item{group}{vector describing the group structure, usually a factor or an object that can be coerced to a factor using \code{\link{as.factor}}. Can consist of a factor with a single level (i.e., one group).} \item{type}{the type of analysis to perform. Use the spatial median or the group centroid? The spatial median is now the default.} \item{bias.adjust}{logical: adjust for small sample bias in beta diversity estimates?} \item{sqrt.dist}{Take square root of dissimilarities. This often euclidifies dissimilarities.} \item{add}{Add a constant to the non-diagonal dissimilarities such that all eigenvalues are non-negative in the underlying Principal Co-ordinates Analysis (see \code{\link{wcmdscale}} for details). Choice \code{"lingoes"} (or \code{TRUE}) use the recommended method of Legendre & Anderson (1999: \dQuote{method 1}) and \code{"cailliez"} uses their \dQuote{method 2}.} \item{display}{character; partial match to access scores for \code{"sites"} or \code{"species"}.} \item{object, x}{an object of class \code{"betadisper"}, the result of a call to \code{betadisper}.} \item{choices, axes}{the principal coordinate axes wanted.} \item{hull}{logical; should the convex hull for each group be plotted?} \item{ellipse}{logical; should the standard deviation data ellipse for each group be plotted?} \item{conf}{Expected fractions of data coverage for data ellipses, e.g. 0.95. The default is to draw a 1 standard deviation data ellipse, but if supplied, \code{conf} is multiplied with the corresponding value found from the Chi-squared distribution with 2df to provide the requested coverage (probability contour).} \item{pch}{plot symbols for the groups, a vector of length equal to the number of groups.} \item{col}{colors for the plot symbols for the groups, a vector of length equal to the number of groups.} \item{lty, lwd}{linetype, linewidth for convex hulls and confidence ellipses.} \item{segments}{logical; should segments joining points to their centroid be drawn?} \item{seg.col}{colour to draw segments between points and their centroid. Can be a vector, in which case one colour per group.} \item{seg.lty, seg.lwd}{linetype and line width for segments.} \item{label}{logical; should the centroids by labelled with their respective factor label?} \item{label.cex}{numeric; character expansion for centroid labels.} \item{cex, ylab, xlab, main, sub}{graphical parameters. For details, see \code{\link{plot.default}}.} \item{which}{A character vector listing terms in the fitted model for which the intervals should be calculated. Defaults to the grouping factor.} \item{ordered}{logical; see \code{\link{TukeyHSD}}.} \item{conf.level}{A numeric value between zero and one giving the family-wise confidence level to use.} \item{\dots}{arguments, including graphical parameters (for \code{plot.betadisper} and \code{boxplot.betadisper}), passed to other methods.} } \details{ One measure of multivariate dispersion (variance) for a group of samples is to calculate the average distance of group members to the group centroid or spatial median (both referred to as 'centroid' from now on unless stated otherwise) in multivariate space. To test if the dispersions (variances) of one or more groups are different, the distances of group members to the group centroid are subject to ANOVA. This is a multivariate analogue of Levene's test for homogeneity of variances if the distances between group members and group centroids is the Euclidean distance. However, better measures of distance than the Euclidean distance are available for ecological data. These can be accommodated by reducing the distances produced using any dissimilarity coefficient to principal coordinates, which embeds them within a Euclidean space. The analysis then proceeds by calculating the Euclidean distances between group members and the group centroid on the basis of the principal coordinate axes rather than the original distances. Non-metric dissimilarity coefficients can produce principal coordinate axes that have negative Eigenvalues. These correspond to the imaginary, non-metric part of the distance between objects. If negative Eigenvalues are produced, we must correct for these imaginary distances. The distance to its centroid of a point is \deqn{z_{ij}^c = \sqrt{\Delta^2(u_{ij}^+, c_i^+) - \Delta^2(u_{ij}^-, c_i^-)},}{z[ij]^c = sqrt(Delta^2(u[ij]^+, c[i]^+) - Delta^2(u[ij]^-, c[i]^-)),} where \eqn{\Delta^2}{Delta^2} is the squared Euclidean distance between \eqn{u_{ij}}{u[ij]}, the principal coordinate for the \eqn{j}th point in the \eqn{i}th group, and \eqn{c_i}{c[i]}, the coordinate of the centroid for the \eqn{i}th group. The super-scripted \sQuote{\eqn{+}} and \sQuote{\eqn{-}} indicate the real and imaginary parts respectively. This is equation (3) in Anderson (2006). If the imaginary part is greater in magnitude than the real part, then we would be taking the square root of a negative value, resulting in NaN. Function takes the absolute value of the real distance minus the imaginary distance, before computing the square root. This is in line with the behaviour of Marti Anderson's PERMDISP2 programme. To test if one or more groups is more variable than the others, ANOVA of the distances to group centroids can be performed and parametric theory used to interpret the significance of \eqn{F}. An alternative is to use a permutation test. \code{\link{permutest.betadisper}} permutes model residuals to generate a permutation distribution of \eqn{F} under the Null hypothesis of no difference in dispersion between groups. Pairwise comparisons of group mean dispersions can also be performed using \code{\link{permutest.betadisper}}. An alternative to the classical comparison of group dispersions, is to calculate Tukey's Honest Significant Differences between groups, via \code{TukeyHSD.betadisper}. This is a simple wrapper to \code{\link{TukeyHSD}}. The user is directed to read the help file for \code{\link{TukeyHSD}} before using this function. In particular, note the statement about using the function with unbalanced designs. The results of the analysis can be visualised using the \code{plot} and \code{boxplot} methods. One additional use of these functions is in assessing beta diversity (Anderson \emph{et al} 2006). Function \code{\link{betadiver}} provides some popular dissimilarity measures for this purpose. As noted in passing by Anderson (2006) and in a related context by O'Neill (2000), estimates of dispersion around a central location (median or centroid) that is calculated from the same data will be biased downward. This bias matters most when comparing diversity among treatments with small, unequal numbers of samples. Setting \code{bias.adjust=TRUE} when using \code{betadisper} imposes a \eqn{\sqrt{n/(n-1)}}{sqrt(n/(n-1))} correction (Stier et al. 2013). } \value{ The \code{anova} method returns an object of class \code{"anova"} inheriting from class \code{"data.frame"}. The \code{scores} method returns a list with one or both of the components \code{"sites"} and \code{"centroids"}. The \code{plot} function invisibly returns an object of class \code{"ordiplot"}, a plotting structure which can be used by \code{\link{identify.ordiplot}} (to identify the points) or other functions in the \code{\link{ordiplot}} family. The \code{boxplot} function invisibly returns a list whose components are documented in \code{\link{boxplot}}. \code{eigenvals.betadisper} returns a named vector of eigenvalues. \code{TukeyHSD.betadisper} returns a list. See \code{\link{TukeyHSD}} for further details. \code{betadisper} returns a list of class \code{"betadisper"} with the following components: \item{eig}{numeric; the eigenvalues of the principal coordinates analysis.} \item{vectors}{matrix; the eigenvectors of the principal coordinates analysis.} \item{distances}{numeric; the Euclidean distances in principal coordinate space between the samples and their respective group centroid.} \item{group}{factor; vector describing the group structure} \item{centroids}{matrix; the locations of the group centroids on the principal coordinates.} \item{call}{the matched function call.} } \note{ If \code{group} consists of a single level or group, then the \code{anova} and \code{permutest} methods are not appropriate and if used on such data will stop with an error. Missing values in either \code{d} or \code{group} will be removed prior to performing the analysis. } \section{Warning}{ Stewart Schultz noticed that the permutation test for \code{type="centroid"} had the wrong type I error and was anti-conservative. As such, the default for \code{type} has been changed to \code{"median"}, which uses the spatial median as the group centroid. Tests suggests that the permutation test for this type of analysis gives the correct error rates. } \references{ Anderson, M.J. (2006) Distance-based tests for homogeneity of multivariate dispersions. \emph{Biometrics} \strong{62}, 245--253. Anderson, M.J., Ellingsen, K.E. & McArdle, B.H. (2006) Multivariate dispersion as a measure of beta diversity. \emph{Ecology Letters} \strong{9}, 683--693. O'Neill, M.E. (2000) A Weighted Least Squares Approach to Levene's Test of Homogeneity of Variance. \emph{Australian & New Zealand Journal of Statistics} \strong{42}, 81-–100. Stier, A.C., Geange, S.W., Hanson, K.M., & Bolker, B.M. (2013) Predator density and timing of arrival affect reef fish community assembly. \emph{Ecology} \strong{94}, 1057--1068. } \author{Gavin L. Simpson; bias correction by Adrian Stier and Ben Bolker.} \seealso{\code{\link{permutest.betadisper}}, \code{\link[stats]{anova.lm}}, \code{\link{scores}}, \code{\link{boxplot}}, \code{\link{TukeyHSD}}. Further measure of beta diversity can be found in \code{\link{betadiver}}.} \examples{ data(varespec) ## Bray-Curtis distances between samples dis <- vegdist(varespec) ## First 16 sites grazed, remaining 8 sites ungrazed groups <- factor(c(rep(1,16), rep(2,8)), labels = c("grazed","ungrazed")) ## Calculate multivariate dispersions mod <- betadisper(dis, groups) mod ## Perform test anova(mod) ## Permutation test for F permutest(mod, pairwise = TRUE, permutations = 99) ## Tukey's Honest Significant Differences (mod.HSD <- TukeyHSD(mod)) plot(mod.HSD) ## Plot the groups and distances to centroids on the ## first two PCoA axes plot(mod) ## with data ellipses instead of hulls plot(mod, ellipse = TRUE, hull = FALSE) # 1 sd data ellipse plot(mod, ellipse = TRUE, hull = FALSE, conf = 0.90) # 90% data ellipse ## can also specify which axes to plot, ordering respected plot(mod, axes = c(3,1), seg.col = "forestgreen", seg.lty = "dashed") ## Draw a boxplot of the distances to centroid for each group boxplot(mod) ## `scores` and `eigenvals` also work scrs <- scores(mod) str(scrs) head(scores(mod, 1:4, display = "sites")) # group centroids/medians scores(mod, 1:4, display = "centroids") # eigenvalues from the underlying principal coordinates analysis eigenvals(mod) ## try out bias correction; compare with mod3 (mod3B <- betadisper(dis, groups, type = "median", bias.adjust=TRUE)) anova(mod3B) permutest(mod3B, permutations = 99) ## should always work for a single group group <- factor(rep("grazed", NROW(varespec))) (tmp <- betadisper(dis, group, type = "median")) (tmp <- betadisper(dis, group, type = "centroid")) ## simulate missing values in 'd' and 'group' ## using spatial medians groups[c(2,20)] <- NA dis[c(2, 20)] <- NA mod2 <- betadisper(dis, groups) ## messages mod2 permutest(mod2, permutations = 99) anova(mod2) plot(mod2) boxplot(mod2) plot(TukeyHSD(mod2)) ## Using group centroids mod3 <- betadisper(dis, groups, type = "centroid") mod3 permutest(mod3, permutations = 99) anova(mod3) plot(mod3) boxplot(mod3) plot(TukeyHSD(mod3)) } \keyword{methods} \keyword{multivariate} \keyword{hplot} vegan/man/mite.Rd0000644000176200001440000000354413231354436013364 0ustar liggesusers\name{mite} \alias{mite} \alias{mite.env} \alias{mite.pcnm} \alias{mite.xy} \docType{data} \title{Oribatid Mite Data with Explanatory Variables } \description{ Oribatid mite data. 70 soil cores collected by Daniel Borcard in 1989. See Borcard et al. (1992, 1994) for details. } \usage{ data(mite) data(mite.env) data(mite.pcnm) data(mite.xy) } \format{ There are three linked data sets: \code{mite} that contains the data on 35 species of Oribatid mites, \code{mite.env} that contains environmental data in the same sampling sites, \code{mite.xy} that contains geographic coordinates, and \code{mite.pcnm} that contains 22 PCNM base functions (columns) computed from the geographic coordinates of the 70 sampling sites (Borcard & Legendre 2002). The whole sampling area was 2.5 m x 10 m in size. The fields in the environmental data are: \describe{ \item{SubsDens}{Substrate density (g/L)} \item{WatrCont}{Water content of the substrate (g/L)} \item{Substrate}{Substrate type, factor with levels \code{Sphagn1, Sphagn2 Sphagn3 Sphagn Litter Barepeat Interface} } \item{Shrub}{Shrub density, an ordered factor with levels \code{1} < \code{2} < \code{3}} \item{Topo}{Microtopograhy, a factor with levels \code{Blanket} and \code{Hummock}} } } \source{ Pierre Legendre } \references{ Borcard, D., P. Legendre and P. Drapeau. 1992. Partialling out the spatial component of ecological variation. Ecology 73: 1045-1055. Borcard, D. and P. Legendre. 1994. Environmental control and spatial structure in ecological communities: an example using Oribatid mites (Acari, Oribatei). Environmental and Ecological Statistics 1: 37-61. Borcard, D. and P. Legendre. 2002. All-scale spatial analysis of ecological data by means of principal coordinates of neighbour matrices. Ecological Modelling 153: 51-68. } \examples{ data(mite) } \keyword{datasets} vegan/man/monoMDS.Rd0000644000176200001440000002255613231354436013746 0ustar liggesusers\name{monoMDS} \alias{monoMDS} \alias{scores.monoMDS} \alias{plot.monoMDS} \title{ Global and Local Non-metric Multidimensional Scaling and Linear and Hybrid Scaling } \description{ Function implements Kruskal's (1964a,b) non-metric multidimensional scaling (NMDS) using monotone regression and primary (\dQuote{weak}) treatment of ties. In addition to traditional global NMDS, the function implements local NMDS, linear and hybrid multidimensional scaling. } \usage{ monoMDS(dist, y, k = 2, model = c("global", "local", "linear", "hybrid"), threshold = 0.8, maxit = 200, weakties = TRUE, stress = 1, scaling = TRUE, pc = TRUE, smin = 1e-4, sfgrmin = 1e-7, sratmax=0.99999, ...) \method{scores}{monoMDS}(x, choices = NA, ...) \method{plot}{monoMDS}(x, choices = c(1,2), type = "t", ...) } \arguments{ \item{dist}{Input dissimilarities.} \item{y}{Starting configuration. A random configuration will be generated if this is missing.} \item{k}{Number of dimensions. NB., the number of points \eqn{n} should be \eqn{n > 2k + 1}{n > 2*k + 1}, and preferably higher in non-metric MDS.} \item{model}{MDS model: \code{"global"} is normal non-metric MDS with a monotone regression, \code{"local"} is non-metric MDS with separate regressions for each point, \code{"linear"} uses linear regression, and \code{"hybrid"} uses linear regression for dissimilarities below a threshold in addition to monotone regression. See Details.} \item{threshold}{Dissimilarity below which linear regression is used alternately with monotone regression. } \item{maxit}{Maximum number of iterations.} \item{weakties}{Use primary or weak tie treatment, where equal observed dissimilarities are allowed to have different fitted values. if \code{FALSE}, then secondary (strong) tie treatment is used, and tied values are not broken.} \item{stress}{Use stress type 1 or 2 (see Details).} \item{scaling}{Scale final scores to unit root mean squares.} \item{pc}{Rotate final scores to principal components.} \item{smin, sfgrmin, sratmax}{Convergence criteria: iterations stop when stress drops below \code{smin}, scale factor of the gradient drops below \code{sfgrmin}, or stress ratio between two iterations goes over \code{sratmax} (but is still \eqn{< 1}).} \item{x}{A \code{monoMDS} result.} \item{choices}{Dimensions returned or plotted. The default \code{NA} returns all dimensions. } \item{type}{The type of the plot: \code{"t"} for text, \code{"p"} for points, and \code{"n"} for none.} \item{\dots}{Other parameters to the functions (ignored in \code{monoMDS}, passed to graphical functions in \code{plot}.).} } \details{ There are several versions of non-metric multidimensional scaling in \R, but \code{monoMDS} offers the following unique combination of features: \itemize{ \item \dQuote{Weak} treatment of ties (Kruskal 1964a,b), where tied dissimilarities can be broken in monotone regression. This is especially important for cases where compared sites share no species and dissimilarities are tied to their maximum value of one. Breaking ties allows these points to be at different distances and can help in recovering very long coenoclines (gradients). Function \code{\link[smacof]{smacofSym}} (\pkg{smacof} package) also has adequate tie treatment. \item Handles missing values in a meaningful way. \item Offers \dQuote{local} and \dQuote{hybrid} scaling in addition to usual \dQuote{global} NMDS (see below). \item Uses fast compiled code (\code{\link[MASS]{isoMDS}} of the \pkg{MASS} package also uses compiled code). } Function \code{monoMDS} uses Kruskal's (1964b) original monotone regression to minimize the stress. There are two alternatives of stress: Kruskal's (1964a,b) original or \dQuote{stress 1} and an alternative version or \dQuote{stress 2} (Sibson 1972). Both of these stresses can be expressed with a general formula \deqn{s^2 = \frac{\sum (d - \hat d)^2}{\sum(d - d_0)^2}}{stress^2 = sum (d-dhat)^2/ sum (d-dnull)^2} where \eqn{d} are distances among points in ordination configuration, \eqn{\hat d}{dhat} are the fitted ordination distances, and \eqn{d_0}{dnull} are the ordination distances under null model. For \dQuote{stress 1} \eqn{d_0 = 0}{dnull = 0}, and for \dQuote{stress 2} \eqn{d_0 = \bar{d}}{dnull = dbar} or mean distances. \dQuote{Stress 2} can be expressed as \eqn{s^2 = 1 - R^2}{stress^2 = 1 - R2}, where\eqn{R^2}{R2} is squared correlation between fitted values and ordination distances, and so related to the \dQuote{linear fit} of \code{\link{stressplot}}. Function \code{monoMDS} can fit several alternative NMDS variants that can be selected with argument \code{model}. The default \code{model = "global"} fits global NMDS, or Kruskal's (1964a,b) original NMDS similar to \code{\link[MASS]{isoMDS}} (\pkg{MASS}) or \code{\link[smacof]{smacofSym}} (\pkg{smacof}). Alternative \code{model = "local"} fits local NMDS where independent monotone regression is used for each point (Sibson 1972). Alternative \code{model = "linear"} fits a linear MDS. This fits a linear regression instead of monotone, and is not identical to metric scaling or principal coordinates analysis (\code{\link{cmdscale}}) that performs an eigenvector decomposition of dissimilarities (Gower 1966). Alternative \code{model = "hybrid"} implements hybrid MDS that uses monotone regression for all points and linear regression for dissimilarities below or at a \code{threshold} dissimilarity in alternating steps (Faith et al. 1987). Function \code{\link{stressplot}} can be used to display the kind of regression in each \code{model}. Scaling, orientation and direction of the axes is arbitrary. However, the function always centres the axes, and the default \code{scaling} is to scale the configuration ot unit root mean square and to rotate the axes (argument \code{pc}) to principal components so that the first dimension shows the major variation. It is possible to rotate the solution so that the first axis is parallel to a given environmental variable using function \code{\link{MDSrotate}}. } \section{Convergence Criteria}{ NMDS is iterative, and the function stops when any of its convergence criteria is met. There is actually no criterion of assured convergence, and any solution can be a local optimum. You should compare several random starts (or use \code{monoMDS} via \code{\link{metaMDS}}) to assess if the solutions is likely a global optimum. The stopping criteria are: \describe{ \item{\code{maxit}:}{ Maximum number of iterations. Reaching this criterion means that solutions was almost certainly not found, and \code{maxit} should be increased.} \item{\code{smin}:}{ Minimum stress. If stress is nearly zero, the fit is almost perfect. Usually this means that data set is too small for the requested analysis, and there may be several different solutions that are almost as perfect. You should reduce the number of dimensions (\code{k}), get more data (more observations) or use some other method, such as metric scaling (\code{\link{cmdscale}}, \code{\link{wcmdscale}}).} \item{\code{sratmax}:}{ Change in stress. Values close to one mean almost unchanged stress. This may mean a solution, but it can also signal stranding on suboptimal solution with flat stress surface.} \item{\code{sfgrmin}:}{ Minimum scale factor. Values close to zero mean almost unchanged configuration. This may mean a solution, but will also happen in local optima.} } } \value{ Returns an object of class \code{"monoMDS"}. The final scores are returned in item \code{points} (function \code{scores} extracts these results), and the stress in item \code{stress}. In addition, there is a large number of other items (but these may change without notice in the future releases). } \references{ Faith, D.P., Minchin, P.R and Belbin, L. 1987. Compositional dissimilarity as a robust measure of ecological distance. \emph{Vegetatio} 69, 57--68. Gower, J.C. (1966). Some distance properties of latent root and vector methods used in multivariate analysis. \emph{Biometrika} 53, 325--328. Kruskal, J.B. 1964a. Multidimensional scaling by optimizing goodness-of-fit to a nonmetric hypothesis. \emph{Psychometrika} 29, 1--28. Kruskal, J.B. 1964b. Nonmetric multidimensional scaling: a numerical method. \emph{Psychometrika} 29, 115--129. Minchin, P.R. 1987. An evaluation of relative robustness of techniques for ecological ordinations. \emph{Vegetatio} 69, 89--107. Sibson, R. 1972. Order invariant methods for data analysis. \emph{Journal of the Royal Statistical Society B} 34, 311--349. } \author{ Peter R. Michin (Fortran core) and Jari Oksanen (R interface). } \note{ This is the default NMDS function used in \code{\link{metaMDS}}. Function \code{\link{metaMDS}} adds support functions so that NMDS can be run like recommended by Minchin (1987). } \seealso{ \code{\link{metaMDS}} for the \pkg{vegan} way of running NMDS, and \code{\link[MASS]{isoMDS}} and \code{\link[smacof]{smacofSym}} for some alternative implementations of NMDS. } \examples{ data(dune) dis <- vegdist(dune) m <- monoMDS(dis, model = "loc") m plot(m) } \keyword{ multivariate } vegan/man/dispindmorisita.Rd0000644000176200001440000001071513231354436015626 0ustar liggesusers\encoding{UTF-8} \name{dispindmorisita} \alias{dispindmorisita} \title{Morisita index of intraspecific aggregation} \description{ Calculates the Morisita index of dispersion, standardized index values, and the so called clumpedness and uniform indices. } \usage{ dispindmorisita(x, unique.rm = FALSE, crit = 0.05, na.rm = FALSE) } \arguments{ \item{x}{community data matrix, with sites (samples) as rows and species as columns.} \item{unique.rm}{logical, if \code{TRUE}, unique species (occurring in only one sample) are removed from the result.} \item{crit}{two-sided p-value used to calculate critical Chi-squared values.} \item{na.rm}{logical. Should missing values (including \code{NaN}) be omitted from the calculations?} } \details{ The Morisita index of dispersion is defined as (Morisita 1959, 1962): \code{Imor = n * (sum(xi^2) - sum(xi)) / (sum(xi)^2 - sum(xi))} where \eqn{xi} is the count of individuals in sample \eqn{i}, and \eqn{n} is the number of samples (\eqn{i = 1, 2, \ldots, n}). \eqn{Imor} has values from 0 to \eqn{n}. In uniform (hyperdispersed) patterns its value falls between 0 and 1, in clumped patterns it falls between 1 and \eqn{n}. For increasing sample sizes (i.e. joining neighbouring quadrats), \eqn{Imor} goes to \eqn{n} as the quadrat size approaches clump size. For random patterns, \eqn{Imor = 1} and counts in the samples follow Poisson frequency distribution. The deviation from random expectation (null hypothesis) can be tested using criticalvalues of the Chi-squared distribution with \eqn{n-1} degrees of freedom. Confidence intervals around 1 can be calculated by the clumped \eqn{Mclu} and uniform \eqn{Muni} indices (Hairston et al. 1971, Krebs 1999) (Chi2Lower and Chi2Upper refers to e.g. 0.025 and 0.975 quantile values of the Chi-squared distribution with \eqn{n-1} degrees of freedom, respectively, for \code{crit = 0.05}): \code{Mclu = (Chi2Lower - n + sum(xi)) / (sum(xi) - 1)} \code{Muni = (Chi2Upper - n + sum(xi)) / (sum(xi) - 1)} Smith-Gill (1975) proposed scaling of Morisita index from [0, n] interval into [-1, 1], and setting up -0.5 and 0.5 values as confidence limits around random distribution with rescaled value 0. To rescale the Morisita index, one of the following four equations apply to calculate the standardized index \eqn{Imst}: (a) \code{Imor >= Mclu > 1}: \code{Imst = 0.5 + 0.5 (Imor - Mclu) / (n - Mclu)}, (b) \code{Mclu > Imor >= 1}: \code{Imst = 0.5 (Imor - 1) / (Mclu - 1)}, (c) \code{1 > Imor > Muni}: \code{Imst = -0.5 (Imor - 1) / (Muni - 1)}, (d) \code{1 > Muni > Imor}: \code{Imst = -0.5 + 0.5 (Imor - Muni) / Muni}. } \value{ Returns a data frame with as many rows as the number of columns in the input data, and with four columns. Columns are: \code{imor} the unstandardized Morisita index, \code{mclu} the clumpedness index, \code{muni} the uniform index, \code{imst} the standardized Morisita index, \code{pchisq} the Chi-squared based probability for the null hypothesis of random expectation. } \references{ Morisita, M. 1959. Measuring of the dispersion of individuals and analysis of the distributional patterns. \emph{Mem. Fac. Sci. Kyushu Univ. Ser. E} 2, 215--235. Morisita, M. 1962. Id-index, a measure of dispersion of individuals. \emph{Res. Popul. Ecol.} 4, 1--7. Smith-Gill, S. J. 1975. Cytophysiological basis of disruptive pigmentary patterns in the leopard frog, \emph{Rana pipiens}. II. Wild type and mutant cell specific patterns. \emph{J. Morphol.} 146, 35--54. Hairston, N. G., Hill, R. and Ritte, U. 1971. The interpretation of aggregation patterns. In: Patil, G. P., Pileou, E. C. and Waters, W. E. eds. \emph{Statistical Ecology 1: Spatial Patterns and Statistical Distributions}. Penn. State Univ. Press, University Park. Krebs, C. J. 1999. \emph{Ecological Methodology}. 2nd ed. Benjamin Cummings Publishers. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}} \note{ A common error found in several papers is that when standardizing as in the case (b), the denominator is given as \code{Muni - 1}. This results in a hiatus in the [0, 0.5] interval of the standardized index. The root of this typo is the book of Krebs (1999), see the Errata for the book (Page 217, \url{http://www.zoology.ubc.ca/~krebs/downloads/errors_2nd_printing.pdf}). } \examples{ data(dune) x <- dispindmorisita(dune) x y <- dispindmorisita(dune, unique.rm = TRUE) y dim(x) ## with unique species dim(y) ## unique species removed } \keyword{ multivariate } \keyword{ spatial } vegan/man/linestack.Rd0000644000176200001440000000444413156750403014403 0ustar liggesusers\name{linestack} \alias{linestack} \title{Plots One-dimensional Diagrams without Overwriting Labels } \description{ Function \code{linestack} plots vertical one-dimensional plots for numeric vectors. The plots are always labelled, but the labels are moved vertically to avoid overwriting. } \usage{ linestack(x, labels, cex = 0.8, side = "right", hoff = 2, air = 1.1, at = 0, add = FALSE, axis = FALSE, ...) } \arguments{ \item{x}{Numeric vector to be plotted. } \item{labels}{Labels used instead of default (names of \code{x}). May be expressions to be drawn with \code{\link{plotmath}}.} \item{cex}{Size of the labels. } \item{side}{Put labels to the \code{"right"} or \code{"left"} of the axis.} \item{hoff}{Distance from the vertical axis to the label in units of the width of letter \dQuote{m}. } \item{air}{Multiplier to string height to leave empty space between labels.} \item{at}{Position of plot in horizontal axis. } \item{add}{Add to an existing plot. } \item{axis}{Add axis to the plot. } \item{\dots}{Other graphical parameters to labels.} } \value{ The function returns invisibly the shifted positions of labels in user coordinates. } \author{Jari Oksanen with modifications by Gavin L. Simpson} \note{ The function always draws labelled diagrams. If you want to have unlabelled diagrams, you can use, e.g., \code{\link{plot}}, \code{\link{stripchart}} or \code{\link{rug}}. } \examples{ ## First DCA axis data(dune) ord <- decorana(dune) linestack(scores(ord, choices=1, display="sp")) linestack(scores(ord, choices=1, display="si"), side="left", add=TRUE) title(main="DCA axis 1") ## Expressions as labels N <- 10 # Number of sites df <- data.frame(Ca = rlnorm(N, 2), NO3 = rlnorm(N, 4), SO4 = rlnorm(N, 10), K = rlnorm(N, 3)) ord <- rda(df, scale = TRUE) ### vector of expressions for labels labs <- expression(Ca^{2+phantom()}, NO[3]^{-phantom()}, SO[4]^{2-phantom()}, K^{+phantom()}) scl <- "sites" linestack(scores(ord, choices = 1, display = "species", scaling = scl), labels = labs, air = 2) linestack(scores(ord, choices = 1, display = "site", scaling = scl), side = "left", add = TRUE) title(main = "PCA axis 1") } \keyword{ hplot } \keyword{ aplot } vegan/man/anova.cca.Rd0000644000176200001440000002012313231354436014247 0ustar liggesusers\name{anova.cca} \alias{anova.cca} %\alias{anova.ccanull} %\alias{anova.ccabyaxis} %\alias{anova.ccabyterm} %\alias{anova.ccabymargin} %\alias{anova.prc} \alias{permutest} %\alias{permutest.default} \alias{permutest.cca} \title{Permutation Test for Constrained Correspondence Analysis, Redundancy Analysis and Constrained Analysis of Principal Coordinates } \description{ The function performs an ANOVA like permutation test for Constrained Correspondence Analysis (\code{\link{cca}}), Redundancy Analysis (\code{\link{rda}}) or distance-based Redundancy Analysis (dbRDA, \code{\link{capscale}}) to assess the significance of constraints. } \usage{ \method{anova}{cca}(object, ..., permutations = how(nperm=999), by = NULL, model = c("reduced", "direct", "full"), parallel = getOption("mc.cores"), strata = NULL, cutoff = 1, scope = NULL) \method{permutest}{cca}(x, permutations = how(nperm = 99), model = c("reduced", "direct"), first = FALSE, strata = NULL, parallel = getOption("mc.cores"), ...) } \arguments{ \item{object}{One or several result objects from \code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. If there are several result objects, they are compared against each other in the order they were supplied. For a single object, a test specified in \code{by} or an overall test is given.} \item{x}{A single ordination result object.} \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{by}{Setting \code{by = "axis"} will assess significance for each constrained axis, and setting \code{by = "terms"} will assess significance for each term (sequentially from first to last), and setting \code{by = "margin"} will assess the marginal effects of the terms (each marginal term analysed in a model with all other variables)} \item{model}{Permutation model: \code{model="direct"} permutes community data, and \code{model="reduced"} permutes residuals of the community data after Conditions (partial model).} \item{parallel}{Use parallel processing with the given number of cores.} \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata. It is an error to use this when \code{permutations} is a matrix, or a \code{\link[permute]{how}} defines \code{blocks}. This is a legacy argument that will be deprecated in the future: use \code{permutations = how(\dots, blocks)} instead. } \item{cutoff}{Only effective with \code{by="axis"} where stops permutations after an axis exceeds the \code{cutoff}.} \item{scope}{Only effective with \code{by="margin"} where it can be used to select the marginal terms for testing. The default is to test all marginal terms in \code{\link{drop.scope}}.} \item{first}{Analyse only significance of the first axis.} \item{\dots}{Parameters passed to other functions. \code{anova.cca} passes all arguments to \code{permutest.cca}. In \code{anova} with \code{by = "axis"} you can use argument \code{cutoff} (defaults \code{1}) which stops permutations after exceeding the given level. } } \details{ Functions \code{anova.cca} and \code{permutest.cca} implement ANOVA like permutation tests for the joint effect of constraints in \code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. Functions \code{anova.cca} and \code{permutest.cca} differ in printout style and in interface. Function \code{permutest.cca} is the proper workhorse, but \code{anova.cca} passes all parameters to \code{permutest.cca}. Function \code{anova} can analyse a sequence of constrained ordination models. The analysis is based on the differences in residual deviance in permutations of nested models. The default test is for the sum of all constrained eigenvalues. Setting \code{first = TRUE} will perform a test for the first constrained eigenvalue. Argument \code{first} can be set either in \code{anova.cca} or in \code{permutest.cca}. It is also possible to perform significance tests for each axis or for each term (constraining variable) using argument \code{by} in \code{anova.cca}. Setting \code{by = "axis"} will perform separate significance tests for each constrained axis. All previous constrained axes will be used as conditions (\dQuote{partialled out}) and a test for the first constrained eigenvalues is performed (Legendre et al. 2011). You can stop permutation tests after exceeding a given significance level with argument \code{cutoff} to speed up calculations in large models. Setting \code{by = "terms"} will perform separate significance test for each term (constraining variable). The terms are assessed sequentially from first to last, and the order of the terms will influence their significance. Setting \code{by = "margin"} will perform separate significance test for each marginal term in a model with all other terms. The marginal test also accepts a \code{scope} argument for the \code{\link{drop.scope}} which can be a character vector of term labels that are analysed, or a fitted model of lower scope. The marginal effects are also known as \dQuote{Type III} effects, but the current function only evaluates marginal terms. It will, for instance, ignore main effects that are included in interaction terms. In calculating pseudo-\eqn{F}, all terms are compared to the same residual of the full model. Community data are permuted with choice \code{model="direct"}, and residuals after partial CCA/ RDA/ dbRDA with choice \code{model="reduced"} (default). If there is no partial CCA/ RDA/ dbRDA stage, \code{model="reduced"} simply permutes the data and is equivalent to \code{model="direct"}. The test statistic is \dQuote{pseudo-\eqn{F}}, which is the ratio of constrained and unconstrained total Inertia (Chi-squares, variances or something similar), each divided by their respective ranks. If there are no conditions (\dQuote{partial} terms), the sum of all eigenvalues remains constant, so that pseudo-\eqn{F} and eigenvalues would give equal results. In partial CCA/ RDA/ dbRDA, the effect of conditioning variables (\dQuote{covariables}) is removed before permutation, and these residuals are added to the non-permuted fitted values of partial CCA (fitted values of \code{X ~ Z}). Consequently, the total Chi-square is not fixed, and test based on pseudo-\eqn{F} would differ from the test based on plain eigenvalues. CCA is a weighted method, and environmental data are re-weighted at each permutation step using permuted weights. } \value{ The function \code{anova.cca} calls \code{permutest.cca} and fills an \code{\link{anova}} table. Additional attributes are \code{Random.seed} (the random seeds used), \code{control} (the permutation design, see \link[permute]{how}) and \code{F.perm} (the permuted test statistics). } \note{ Some cases of \code{anova} need access to the original data on constraints (at least \code{by = "term"} and \code{by = "margin"}), and they may fail if data are unavailable. } \references{ Legendre, P. and Legendre, L. (2012). \emph{Numerical Ecology}. 3rd English ed. Elsevier. Legendre, P., Oksanen, J. and ter Braak, C.J.F. (2011). Testing the significance of canonical axes in redundancy analysis. \emph{Methods in Ecology and Evolution} 2, 269--277. } \author{Jari Oksanen} \seealso{\code{\link{anova.cca}}, \code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}} to get something to analyse. Function \code{\link{drop1.cca}} calls \code{anova.cca} with \code{by = "margin"}, and \code{\link{add1.cca}} an analysis for single terms additions, which can be used in automatic or semiautomatic model building (see \code{\link{deviance.cca}}). } \examples{ data(varespec) data(varechem) vare.cca <- cca(varespec ~ Al + P + K, varechem) ## overall test anova(vare.cca) } \keyword{ multivariate } \keyword{ htest } vegan/man/vegandocs.Rd0000644000176200001440000000127513156750403014376 0ustar liggesusers\name{vegandocs} \alias{vegandocs} \title{Display vegan Documentation} \description{Deprecated function to display news and vignettes in \pkg{vegan}. You should use \code{\link[utils]{news}} or \code{\link[utils]{browseVignettes}} instead. } \usage{ vegandocs(doc = c("NEWS", "ONEWS", "FAQ-vegan", "intro-vegan", "diversity-vegan", "decision-vegan", "partitioning", "permutations")) } \arguments{ \item{doc}{The name of the document (partial match, case sensitive). } } \author{Jari Oksanen } \note{The function is deprecated.} \seealso{\code{\link[utils]{browseVignettes}}, \code{\link[utils]{vignette}}, \code{\link[utils]{news}}. } \keyword{ utilities } \keyword{ documentation } vegan/man/CCorA.Rd0000644000176200001440000001602712626316320013352 0ustar liggesusers\name{CCorA} \alias{CCorA} \alias{biplot.CCorA} \concept{ordination} \title{Canonical Correlation Analysis} \description{Canonical correlation analysis, following Brian McArdle's unpublished graduate course notes, plus improvements to allow the calculations in the case of very sparse and collinear matrices, and permutation test of Pillai's trace statistic. } \usage{ CCorA(Y, X, stand.Y=FALSE, stand.X=FALSE, permutations = 0, ...) \method{biplot}{CCorA}(x, plot.type="ov", xlabs, plot.axes = 1:2, int=0.5, col.Y="red", col.X="blue", cex=c(0.7,0.9), ...) } \arguments{ \item{Y}{ Left matrix (object class: \code{matrix} or \code{data.frame}). } \item{X}{ Right matrix (object class: \code{matrix} or \code{data.frame}). } \item{stand.Y}{ Logical; should \code{Y} be standardized? } \item{stand.X}{ Logical; should \code{X} be standardized? } \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{x}{\code{CCoaR} result object.} \item{plot.type}{ A character string indicating which of the following plots should be produced: \code{"objects"}, \code{"variables"}, \code{"ov"} (separate graphs for objects and variables), or \code{"biplots"}. Any unambiguous subset containing the first letters of these names can be used instead of the full names. } \item{xlabs}{ Row labels. The default is to use row names, \code{NULL} uses row numbers instead, and \code{NA} suppresses plotting row names completely.} \item{plot.axes}{ A vector with 2 values containing the order numbers of the canonical axes to be plotted. Default: first two axes. } \item{int}{ Radius of the inner circles plotted as visual references in the plots of the variables. Default: \code{int=0.5}. With \code{int=0}, no inner circle is plotted. } \item{col.Y}{ Color used for objects and variables in the first data table (Y) plots. In biplots, the objects are in black. } \item{col.X}{ Color used for objects and variables in the second data table (X) plots. } \item{cex}{ A vector with 2 values containing the size reduction factors for the object and variable names, respectively, in the plots. Default values: \code{cex=c(0.7,0.9)}. } \item{\dots}{ Other arguments passed to these functions. The function \code{biplot.CCorA} passes graphical arguments to \code{\link{biplot}} and \code{\link{biplot.default}}. \code{CCorA} currently ignores extra arguments. } } \details{ Canonical correlation analysis (Hotelling 1936) seeks linear combinations of the variables of \code{Y} that are maximally correlated to linear combinations of the variables of \code{X}. The analysis estimates the relationships and displays them in graphs. Pillai's trace statistic is computed and tested parametrically (F-test); a permutation test is also available. Algorithmic note -- The blunt approach would be to read the two matrices, compute the covariance matrices, then the matrix \code{S12 \%*\% inv(S22) \%*\% t(S12) \%*\% inv(S11)}. Its trace is Pillai's trace statistic. This approach may fail, however, when there is heavy multicollinearity in very sparse data matrices. The safe approach is to replace all data matrices by their PCA object scores. The function can produce different types of plots depending on the option chosen: \code{"objects"} produces two plots of the objects, one in the space of Y, the second in the space of X; \code{"variables"} produces two plots of the variables, one of the variables of Y in the space of Y, the second of the variables of X in the space of X; \code{"ov"} produces four plots, two of the objects and two of the variables; \code{"biplots"} produces two biplots, one for the first matrix (Y) and one for second matrix (X) solutions. For biplots, the function passes all arguments to \code{\link{biplot.default}}; consult its help page for configuring biplots. } \value{ Function \code{CCorA} returns a list containing the following elements: \item{ Pillai }{ Pillai's trace statistic = sum of the canonical eigenvalues. } \item{ Eigenvalues }{ Canonical eigenvalues. They are the squares of the canonical correlations. } \item{ CanCorr }{ Canonical correlations. } \item{ Mat.ranks }{ Ranks of matrices \code{Y} and \code{X}. } \item{ RDA.Rsquares }{ Bimultivariate redundancy coefficients (R-squares) of RDAs of Y|X and X|Y. } \item{ RDA.adj.Rsq }{ \code{RDA.Rsquares} adjusted for \code{n} and the number of explanatory variables. } \item{ nperm }{ Number of permutations. } \item{ p.Pillai }{ Parametric probability value associated with Pillai's trace. } \item{ p.perm }{ Permutational probability associated with Pillai's trace. } \item{ Cy }{ Object scores in Y biplot. } \item{ Cx }{ Object scores in X biplot. } \item{ corr.Y.Cy }{ Scores of Y variables in Y biplot, computed as cor(Y,Cy). } \item{ corr.X.Cx }{ Scores of X variables in X biplot, computed as cor(X,Cx). } \item{ corr.Y.Cx }{ cor(Y,Cy) available for plotting variables Y in space of X manually. } \item{ corr.X.Cy }{ cor(X,Cx) available for plotting variables X in space of Y manually. } \item{control}{A list of control values for the permutations as returned by the function \code{\link[permute]{how}}.} \item{ call }{ Call to the CCorA function. } } \references{ Hotelling, H. 1936. Relations between two sets of variates. \emph{Biometrika} \strong{28}: 321-377. Legendre, P. 2005. Species associations: the Kendall coefficient of concordance revisited. \emph{Journal of Agricultural, Biological, and Environmental Statistics} \strong{10}: 226-245. } \author{ Pierre Legendre, Departement de Sciences Biologiques, Universite de Montreal. Implemented in \pkg{vegan} with the help of Jari Oksanen. } \examples{ # Example using two mite groups. The mite data are available in vegan data(mite) # Two mite species associations (Legendre 2005, Fig. 4) group.1 <- c(1,2,4:8,10:15,17,19:22,24,26:30) group.2 <- c(3,9,16,18,23,25,31:35) # Separate Hellinger transformations of the two groups of species mite.hel.1 <- decostand(mite[,group.1], "hel") mite.hel.2 <- decostand(mite[,group.2], "hel") rownames(mite.hel.1) = paste("S",1:nrow(mite),sep="") rownames(mite.hel.2) = paste("S",1:nrow(mite),sep="") out <- CCorA(mite.hel.1, mite.hel.2) out biplot(out, "ob") # Two plots of objects biplot(out, "v", cex=c(0.7,0.6)) # Two plots of variables biplot(out, "ov", cex=c(0.7,0.6)) # Four plots (2 for objects, 2 for variables) biplot(out, "b", cex=c(0.7,0.6)) # Two biplots biplot(out, xlabs = NA, plot.axes = c(3,5)) # Plot axes 3, 5. No object names biplot(out, plot.type="biplots", xlabs = NULL) # Replace object names by numbers # Example using random numbers. No significant relationship is expected mat1 <- matrix(rnorm(60),20,3) mat2 <- matrix(rnorm(100),20,5) out2 = CCorA(mat1, mat2, permutations=99) out2 biplot(out2, "b") } \keyword{ multivariate } vegan/man/rankindex.Rd0000644000176200001440000001074012626316320014402 0ustar liggesusers\name{rankindex} \alias{rankindex} \title{Compares Dissimilarity Indices for Gradient Detection } \description{ Rank correlations between dissimilarity indices and gradient separation. } \usage{ rankindex(grad, veg, indices = c("euc", "man", "gow", "bra", "kul"), stepacross = FALSE, method = "spearman", metric = c("euclidean", "mahalanobis", "manhattan", "gower"), ...) } \arguments{ \item{grad}{The gradient variable or matrix. } \item{veg}{The community data matrix. } \item{indices}{Dissimilarity indices compared, partial matches to alternatives in \code{\link{vegdist}}. Alternatively, it can be a (named) list of functions returning objects of class 'dist'.} \item{stepacross}{Use \code{\link{stepacross}} to find a shorter path dissimilarity. The dissimilarities for site pairs with no shared species are set \code{NA} using \code{\link{no.shared}} so that indices with no fixed upper limit can also be analysed.} \item{method}{Correlation method used.} \item{metric}{Metric to evaluate the gradient separation. See Details.} \item{...}{Other parameters to \code{\link{stepacross}}.} } \details{ A good dissimilarity index for multidimensional scaling should have a high rank-order similarity with gradient separation. The function compares most indices in \code{\link{vegdist}} against gradient separation using rank correlation coefficients in \code{\link{cor}}. The gradient separation between each point is assessed using given \code{metric}. The default is to use Euclidean distance of continuous variables scaled to unit variance, or to use Gower metric for mixed data using function \code{\link[cluster]{daisy}} when \code{grad} has factors. The other alternatives are Mahalanabis distances which are based on \code{grad} matrix scaled so that columns are orthogonal (uncorrelated) and have unit variance, or Manhattan distances of \code{grad} variables scaled to unit range. The \code{indices} argument can accept any dissimilarity indices besides the ones calculated by the \code{\link{vegdist}} function. For this, the argument value should be a (possibly named) list of functions. Each function must return a valid 'dist' object with dissimilarities, similarities are not accepted and should be converted into dissimilarities beforehand. } \value{ Returns a named vector of rank correlations. } \references{ Faith, F.P., Minchin, P.R. and Belbin, L. (1987). Compositional dissimilarity as a robust measure of ecological distance. \emph{Vegetatio} 69, 57-68. } \author{Jari Oksanen, with additions from Peter Solymos} \note{ There are several problems in using rank correlation coefficients. Typically there are very many ties when \eqn{n(n-1)/2} gradient separation values are derived from just \eqn{n} observations. Due to floating point arithmetics, many tied values differ by machine epsilon and are arbitrarily ranked differently by \code{\link{rank}} used in \code{\link{cor.test}}. Two indices which are identical with certain transformation or standardization may differ slightly (magnitude \eqn{10^{-15}}) and this may lead into third or fourth decimal instability in rank correlations. Small differences in rank correlations should not be taken too seriously. Probably this method should be replaced with a sounder method, but I do not yet know which\ldots You may experiment with \code{\link{mantel}}, \code{\link{anosim}} or even \code{\link{protest}}. Earlier version of this function used \code{method = "kendall"}, but that is far too slow in large data sets. The functions returning dissimilarity objects should be self contained, because the \code{...} argument passes additional parameters to \code{\link{stepacross}} and not to the functions supplied via the \code{indices} argument. } \seealso{\code{\link{vegdist}}, \code{\link{stepacross}}, \code{\link{no.shared}}, \code{\link{monoMDS}}, \code{\link{cor}}, \code{\link{Machine}}, and for alternatives \code{\link{anosim}}, \code{\link{mantel}} and \code{\link{protest}}. } \examples{ data(varespec) data(varechem) ## The variables are automatically scaled rankindex(varechem, varespec) rankindex(varechem, wisconsin(varespec)) ## Using non vegdist indices as functions funs <- list(Manhattan=function(x) dist(x, "manhattan"), Gower=function(x) cluster:::daisy(x, "gower"), Ochiai=function(x) designdist(x, "1-J/sqrt(A*B)")) rankindex(scale(varechem), varespec, funs) } \keyword{ multivariate } vegan/man/eventstar.Rd0000644000176200001440000001070312626316320014431 0ustar liggesusers\encoding{UTF-8} \name{eventstar} \alias{eventstar} \title{ Scale Parameter at the Minimum of the Tsallis Evenness Profile } \description{ The function \code{eventstar} finds the minimum (\eqn{q^*}{q*}) of the evenness profile based on the Tsallis entropy. This scale factor of the entropy represents a specific weighting of species relative frequencies that leads to minimum evenness of the community (Mendes et al. 2008). } \usage{ eventstar(x, qmax = 5) } \arguments{ \item{x}{ A community matrix or a numeric vector. } \item{qmax}{ Maximum scale parameter of the Tsallis entropy to be used in finding the minimum of Tsallis based evenness in the range \code{c(0, qmax)}. } } \details{ The function \code{eventstar} finds a characteristic value of the scale parameter \eqn{q} of the Tsallis entropy corresponding to minimum of the evenness (equitability) profile based on Tsallis entropy. This value was proposed by Mendes et al. (2008) as \eqn{q^*}{q*}. The \eqn{q^\ast}{q*} index represents the scale parameter of the one parameter Tsallis diversity family that leads to the greatest deviation from the maximum equitability given the relative abundance vector of a community. The value of \eqn{q^\ast}{q*} is found by identifying the minimum of the evenness profile over scaling factor \eqn{q}{q} by one-dimensional minimization. Because evenness profile is known to be a convex function, it is guaranteed that underlying \code{\link{optimize}} function will find a unique solution if it is in the range \code{c(0, qmax)}. The scale parameter value \eqn{q^\ast}{q*} is used to find corresponding values of diversity (\eqn{H_{q^\ast}}{H.q*}), evenness (\eqn{H_{q^\ast}(\max)}{H.q*(max)}), and numbers equivalent (\eqn{D_{q^\ast}}{D.q*}). For calculation details, see \code{\link{tsallis}} and Examples below. Mendes et al. (2008) advocated the use of \eqn{q^\ast}{q*} and corresponding diversity, evenness, and Hill numbers, because it is a unique value representing the diversity profile, and is is positively associated with rare species in the community, thus it is a potentially useful indicator of certain relative abundance distributions of the communities. } \value{ A data frame with columns: \itemize{ \item{\code{qstar}}{ scale parameter value \eqn{q\ast}{q*} corresponding to minimum value of Tsallis based evenness profile.} \item{\code{Estar}}{ Value of evenness based on normalized Tsallis entropy at \eqn{q^\ast}{q*}.} \item{\code{Hstar}}{ Value of Tsallis entropy at \eqn{q^\ast}{q*}.} \item{\code{Dstar}}{ Value of Tsallis entropy at \eqn{q^\ast}{q*} converted to numbers equivalents (also called as Hill numbers, effective number of species, \sQuote{true} diversity; cf. Jost 2007).} } See \code{\link{tsallis}} for calculation details. } \references{ Mendes, R.S., Evangelista, L.R., Thomaz, S.M., Agostinho, A.A. and Gomes, L.C. (2008) A unified index to measure ecological diversity and species rarity. \emph{Ecography} \bold{31}, 450--456. Jost, L. (2007) Partitioning diversity into independent alpha and beta components. \emph{Ecology} \bold{88}, 2427--2439. Tsallis, C. (1988) Possible generalization of Boltzmann-Gibbs statistics. \emph{J. Stat. Phis.} \bold{52}, 479--487. } \note{ Values for \eqn{q^\ast}{q*} found by Mendes et al. (2008) ranged from 0.56 and 1.12 presenting low variability, so an interval between 0 and 5 should safely encompass the possibly expected \eqn{q^\ast}{q*} values in practice, but profiling the evenness and changing the value of the \code{qmax} argument is advised if output values near the range limits are found. } \author{ Eduardo Ribeiro Cunha \email{edurcunha@gmail.com} and Heloisa Beatriz Antoniazi Evangelista \email{helobeatriz@gmail.com}, with technical input of Péter Sólymos. } \seealso{ Tsallis entropy: \code{\link{tsallis}} } \examples{ data(BCI) (x <- eventstar(BCI[1:5,])) ## profiling y <- as.numeric(BCI[10,]) (z <- eventstar(y)) q <- seq(0, 2, 0.05) Eprof <- tsallis(y, scales=q, norm=TRUE) Hprof <- tsallis(y, scales=q) Dprof <- tsallis(y, scales=q, hill=TRUE) opar <- par(mfrow=c(3,1)) plot(q, Eprof, type="l", main="Evenness") abline(v=z$qstar, h=tsallis(y, scales=z$qstar, norm=TRUE), col=2) plot(q, Hprof, type="l", main="Diversity") abline(v=z$qstar, h=tsallis(y, scales=z$qstar), col=2) plot(q, Dprof, type="l", main="Effective number of species") abline(v=z$qstar, h=tsallis(y, scales=z$qstar, hill=TRUE), col=2) par(opar) } \keyword{ optimize } \keyword{ multivariate } \keyword{ utilities } vegan/man/spantree.Rd0000644000176200001440000001525313231354436014247 0ustar liggesusers\name{spantree} \alias{spantree} \alias{cophenetic.spantree} \alias{as.hclust.spantree} \alias{plot.spantree} \alias{lines.spantree} \alias{spandepth} \title{Minimum Spanning Tree} \description{ Function \code{spantree} finds a minimum spanning tree connecting all points, but disregarding dissimilarities that are at or above the threshold or \code{NA}. } \usage{ spantree(d, toolong = 0) \method{as.hclust}{spantree}(x, ...) \method{cophenetic}{spantree}(x) spandepth(x) \method{plot}{spantree}(x, ord, cex = 0.7, type = "p", labels, dlim, FUN = sammon, ...) \method{lines}{spantree}(x, ord, display="sites", col = 1, ...) } \arguments{ \item{d}{Dissimilarity data inheriting from class \code{dist} or a an object, such as a matrix, that can be converted to a dissimilarity matrix. Functions \code{\link{vegdist}} and \code{\link{dist}} are some functions producing suitable dissimilarity data.} \item{toolong}{ Shortest dissimilarity regarded as \code{NA}. The function uses a fuzz factor, so that dissimilarities close to the limit will be made \code{NA}, too. If \code{toolong = 0} (or negative), no dissimilarity is regarded as too long. } \item{x}{A \code{spantree} result object.} \item{ord}{An ordination configuration, or an ordination result known by \code{\link{scores}}.} \item{cex}{Character expansion factor.} \item{type}{Observations are plotted as points with \code{type="p"} or \code{type="b"}, or as text label with \code{type="t"}. The tree (lines) will always be plotted.} \item{labels}{Text used with \code{type="t"} or node names if this is missing.} \item{dlim}{A ceiling value used to highest \code{cophenetic} dissimilarity.} \item{FUN}{Ordination function to find the configuration from cophenetic dissimilarities. If the supplied \code{FUN} does not work, supply ordination result as argument \code{ord}. } \item{display}{Type of \code{\link{scores}} used for \code{ord}.} \item{col}{Colour of line segments. This can be a vector which is recycled for points, and the line colour will be a mixture of two joined points.} \item{\dots}{Other parameters passed to functions.} } \details{ Function \code{spantree} finds a minimum spanning tree for dissimilarities (there may be several minimum spanning trees, but the function finds only one). Dissimilarities at or above the threshold \code{toolong} and \code{NA}s are disregarded, and the spanning tree is found through other dissimilarities. If the data are disconnected, the function will return a disconnected tree (or a forest), and the corresponding link is \code{NA}. Connected subtrees can be identified using \code{\link{distconnected}}. Minimum spanning tree is closesly related to single linkage clustering, a.k.a. nearest neighbour clustering, and in genetics as neighbour joining tree available in \code{\link{hclust}} and \code{\link[cluster]{agnes}} functions. The most important practical difference is that minimum spanning tree has no concept of cluster membership, but always joins individual points to each other. Function \code{as.hclust} can change the \code{spantree} result into a corresponding \code{\link{hclust}} object. Function \code{cophenetic} finds distances between all points along the tree segments. Function \code{spandepth} returns the depth of each node. The nodes of a tree are either leaves (with one link) or internal nodes (more than one link). The leaves are recursively removed from the tree, and the depth is the layer at with the leaf was removed. In disconnected \code{spantree} object (in a forest) each tree is analysed separately and disconnected nodes not in any tree have depth zero. Function \code{plot} displays the tree over a supplied ordination configuration, and \code{lines} adds a spanning tree to an ordination graph. If configuration is not supplied for \code{plot}, the function ordinates the cophenetic dissimilarities of the spanning tree and overlays the tree on this result. The default ordination function is \code{\link[MASS]{sammon}} (package \pkg{MASS}), because Sammon scaling emphasizes structure in the neighbourhood of nodes and may be able to beautifully represent the tree (you may need to set \code{dlim}, and sometimes the results will remain twisted). These ordination methods do not work with disconnected trees, but you must supply the ordination configuration. Function \code{lines} will overlay the tree in an existing plot. Function \code{spantree} uses Prim's method implemented as priority-first search for dense graphs (Sedgewick 1990). Function \code{cophenetic} uses function \code{\link{stepacross}} with option \code{path = "extended"}. The \code{spantree} is very fast, but \code{cophenetic} is slow in very large data sets. } \value{ Function \code{spantree} returns an object of class \code{spantree} which is a list with two vectors, each of length \eqn{n-1}. The number of links in a tree is one less the number of observations, and the first item is omitted. The items are \item{kid }{The child node of the parent, starting from parent number two. If there is no link from the parent, value will be \code{NA} and tree is disconnected at the node.} \item{dist }{Corresponding distance. If \code{kid = NA}, then \code{dist = 0}.} \item{labels }{Names of nodes as found from the input dissimilarities.} \item{call}{The function call.} } \references{ Sedgewick, R. (1990). \emph{Algorithms in C}. Addison Wesley. } \author{ Jari Oksanen } \note{ In principle, minimum spanning tree is equivalent to single linkage clustering that can be performed using \code{\link{hclust}} or \code{\link[cluster]{agnes}}. However, these functions combine clusters to each other and the information of the actually connected points (the ``single link'') cannot be recovered from the result. The graphical output of a single linkage clustering plotted with \code{\link{ordicluster}} will look very different from an equivalent spanning tree plotted with \code{lines.spantree}. } \seealso{\code{\link{vegdist}} or \code{\link{dist}} for getting dissimilarities, and \code{\link{hclust}} or \code{\link[cluster]{agnes}} for single linkage clustering. } \examples{ data(dune) dis <- vegdist(dune) tr <- spantree(dis) ## Add tree to a metric scaling plot(tr, cmdscale(dis), type = "t") ## Find a configuration to display the tree neatly plot(tr, type = "t") ## Depths of nodes depths <- spandepth(tr) plot(tr, type = "t", label = depths) ## Plot as a dendrogram cl <- as.hclust(tr) plot(cl) ## cut hclust tree to classes and show in colours in spantree plot(tr, col = cutree(cl, 5), pch=16) } \keyword{ multivariate} vegan/man/mso.Rd0000644000176200001440000001407513231354436013225 0ustar liggesusers\name{mso} \alias{mso} \alias{msoplot} \title{ Functions for performing and displaying a spatial partitioning of cca or rda results} \description{ The function \code{mso} adds an attribute \code{vario} to an object of class \code{"cca"} that describes the spatial partitioning of the \code{\link{cca}} object and performs an optional permutation test for the spatial independence of residuals. The function \code{plot.mso} creates a diagnostic plot of the spatial partitioning of the \code{"cca"} object. } \usage{ mso(object.cca, object.xy, grain = 1, round.up = FALSE, permutations = 0) msoplot(x, alpha = 0.05, explained = FALSE, ylim = NULL, legend = "topleft", ...) } \arguments{ \item{object.cca}{ An object of class cca, created by the \code{\link{cca}} or \code{\link{rda}} function.} \item{object.xy}{ A vector, matrix or data frame with the spatial coordinates of the data represented by \code{object.cca}. The number of rows must match the number of observations (as given by \code{nobs}) in \code{cca.object}. Alternatively, interpoint distances can be supplied as a \code{\link{dist}} object. } \item{grain}{ Interval size for distance classes.} \item{round.up}{ Determines the choice of breaks. If false, distances are rounded to the nearest multiple of grain. If true, distances are rounded to the upper multiple of grain.} \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{x}{A result object of \code{mso}.} \item{alpha}{ Significance level for the two-sided permutation test of the Mantel statistic for spatial independence of residual inertia and for the point-wise envelope of the variogram of the total variance. A Bonferroni-type correction can be achieved by dividing the overall significance value (e.g. 0.05) by the number of distance classes.} \item{explained}{ If false, suppresses the plotting of the variogram of explained variance.} \item{ylim}{Limits for y-axis.} \item{legend}{The x and y co-ordinates to be used to position the legend. They can be specified by keyword or in any way which is accepted by \code{\link{legend}}.} \item{\dots}{Other arguments passed to functions.} } \details{ The Mantel test is an adaptation of the function \code{\link{mantel}} of the \pkg{vegan} package to the parallel testing of several distance classes. It compares the mean inertia in each distance class to the pooled mean inertia of all other distance classes. If there are explanatory variables (RDA, CCA, pRDA, pCCA) and a significance test for residual autocorrelation was performed when running the function \code{mso}, the function \code{plot.mso} will print an estimate of how much the autocorrelation (based on significant distance classes) causes the global error variance of the regression analysis to be underestimated } \value{ The function \code{mso} returns an amended \code{cca} or \code{rda} object with the additional attributes \code{grain}, \code{H}, \code{H.test} and \code{vario}. \item{grain}{The grain attribute defines the interval size of the distance classes .} \item{H }{ H is an object of class 'dist' and contains the geographic distances between observations.} \item{H.test }{ H.test contains a set of dummy variables that describe which pairs of observations (rows = elements of \code{object$H}) fall in which distance class (columns). } \item{vario }{ The vario attribute is a data frame that contains some or all of the following components for the rda case (cca case in brackets): \describe{ \item{\code{H}}{Distance class as multiples of grain.} \item{\code{Dist}}{ Average distance of pairs of observations in distance class H.} \item{n }{ Number of unique pairs of observations in distance class H.} \item{\code{All}}{ Empirical (chi-square) variogram of total variance (inertia).} \item{\code{Sum}}{ Sum of empirical (chi-square) variograms of explained and residual variance (inertia).} \item{\code{CA}}{ Empirical (chi-square) variogram of residual variance (inertia).} \item{\code{CCA}}{ Empirical (chi-square) variogram of explained variance (inertia).} \item{\code{pCCA}}{ Empirical (chi-square) variogram of conditioned variance (inertia).} \item{\code{se}}{ Standard error of the empirical (chi-square) variogram of total variance (inertia).} \item{\code{CA.signif}}{P-value of permutation test for spatial independence of residual variance (inertia).} } } } \references{ Wagner, H.H. 2004. Direct multi-scale ordination with canonical correspondence analysis. \emph{Ecology} 85: 342--351. } \author{ The responsible author was Helene Wagner.} \note{ The function is based on the code published in the Ecological Archives E085-006 (\url{http://onlinelibrary.wiley.com/doi/10.1890/02-0738/full}). } \seealso{ Function \code{\link{cca}} and \code{\link{rda}}, \code{\link{cca.object}}. } \examples{ ## Reconstruct worked example of Wagner (submitted): X <- matrix(c(1, 2, 3, 2, 1, 0), 3, 2) Y <- c(3, -1, -2) tmat <- c(1:3) ## Canonical correspondence analysis (cca): Example.cca <- cca(X, Y) Example.cca <- mso(Example.cca, tmat) msoplot(Example.cca) Example.cca$vario ## Correspondence analysis (ca): Example.ca <- mso(cca(X), tmat) msoplot(Example.ca) ## Unconstrained ordination with test for autocorrelation ## using oribatid mite data set as in Wagner (2004) data(mite) data(mite.env) data(mite.xy) mite.cca <- cca(log(mite + 1)) mite.cca <- mso(mite.cca, mite.xy, grain = 1, permutations = 99) msoplot(mite.cca) mite.cca ## Constrained ordination with test for residual autocorrelation ## and scale-invariance of species-environment relationships mite.cca <- cca(log(mite + 1) ~ SubsDens + WatrCont + Substrate + Shrub + Topo, mite.env) mite.cca <- mso(mite.cca, mite.xy, permutations = 99) msoplot(mite.cca) mite.cca } \keyword{ spatial } \keyword{ multivariate } vegan/man/goodness.cca.Rd0000644000176200001440000001372513231354436014776 0ustar liggesusers\name{goodness.cca} \alias{goodness} \alias{goodness.cca} \alias{inertcomp} \alias{spenvcor} \alias{intersetcor} \alias{vif.cca} \alias{alias.cca} \title{Diagnostic Tools for [Constrained] Ordination (CCA, RDA, DCA, CA, PCA) } \description{ Functions \code{goodness} and \code{inertcomp} can be used to assess the goodness of fit for individual sites or species. Function \code{vif.cca} and \code{alias.cca} can be used to analyse linear dependencies among constraints and conditions. In addition, there are some other diagnostic tools (see 'Details'). } \usage{ \method{goodness}{cca}(object, display = c("species", "sites"), choices, model = c("CCA", "CA"), statistic = c("explained", "distance"), summarize = FALSE, addprevious = FALSE, ...) inertcomp(object, display = c("species", "sites"), statistic = c("explained", "distance"), proportional = FALSE) spenvcor(object) intersetcor(object) vif.cca(object) \method{alias}{cca}(object, names.only = FALSE, ...) } \arguments{ \item{object}{A result object from \code{\link{cca}}, \code{\link{rda}} or \code{\link{capscale}}. } \item{display}{Display \code{"species"} or \code{"sites"}. Species are not available in \code{\link{capscale}}. } \item{choices}{Axes shown. Default is to show all axes of the \code{"model"}. } \item{model}{Show constrained (\code{"CCA"}) or unconstrained (\code{"CA"}) results. } \item{statistic}{Statistic used: \code{"explained"} gives the cumulative percentage accounted for, \code{"distance"} shows the residual distances. } \item{summarize}{Show only the accumulated total.} \item{addprevious}{Add the variation explained by previous components when \code{statistic="explained"}. For \code{model="CCA"} add conditionened (partialled out) variation, and for \code{model="CA"} add both conditioned and constrained variation. This will give cumulative explanation. The argument has no effect when \code{statistic="distance"}, but this will always show the residual distance after current axis and all previous components. } \item{proportional}{Give the inertia components as proportional for the corresponding total.} \item{names.only}{Return only names of aliased variable(s) instead of defining equations.} \item{\dots}{Other parameters to the functions.} } \details{ Function \code{goodness} gives the diagnostic statistics for species or sites. The alternative statistics are the cumulative proportion of inertia accounted for up to the axes, and the residual distance left unaccounted for. Function \code{inertcomp} decomposes the inertia into partial, constrained and unconstrained components for each site or species. Instead of inertia, the function can give the total dispersion or distances from the centroid for each component. Function \code{spenvcor} finds the so-called \dQuote{species -- environment correlation} or (weighted) correlation of weighted average scores and linear combination scores. This is a bad measure of goodness of ordination, because it is sensitive to extreme scores (like correlations are), and very sensitive to overfitting or using too many constraints. Better models often have poorer correlations. Function \code{\link{ordispider}} can show the same graphically. Function \code{intersetcor} finds the so-called \dQuote{interset correlation} or (weighted) correlation of weighted averages scores and constraints. The defined contrasts are used for factor variables. This is a bad measure since it is a correlation. Further, it focuses on correlations between single contrasts and single axes instead of looking at the multivariate relationship. Fitted vectors (\code{\link{envfit}}) provide a better alternative. Biplot scores (see \code{\link{scores.cca}}) are a multivariate alternative for (weighted) correlation between linear combination scores and constraints. Function \code{vif.cca} gives the variance inflation factors for each constraint or contrast in factor constraints. In partial ordination, conditioning variables are analysed together with constraints. Variance inflation is a diagnostic tool to identify useless constraints. A common rule is that values over 10 indicate redundant constraints. If later constraints are complete linear combinations of conditions or previous constraints, they will be completely removed from the estimation, and no biplot scores or centroids are calculated for these aliased constraints. A note will be printed with default output if there are aliased constraints. Function \code{alias} will give the linear coefficients defining the aliased constraints, or only their names with argument \code{names.only = TRUE}. } \value{ The functions return matrices or vectors as is appropriate. } \references{ Greenacre, M. J. (1984). Theory and applications of correspondence analysis. Academic Press, London. Gross, J. (2003). Variance inflation factors. \emph{R News} 3(1), 13--15. } \author{Jari Oksanen. The \code{vif.cca} relies heavily on the code by W. N. Venables. \code{alias.cca} is a simplified version of \code{\link{alias.lm}}.} \note{ It is a common practise to use \code{goodness} statistics to remove species from ordination plots, but this may not be a good idea, as the total inertia is not a meaningful concept in \code{cca}, in particular for rare species. } \seealso{\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}, \code{\link[car]{vif}}. } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ A1 + Management + Condition(Moisture), data=dune.env) goodness(mod, addprevious = TRUE) goodness(mod, addprevious = TRUE, summ = TRUE) # Inertia components inertcomp(mod, prop = TRUE) inertcomp(mod, stat="d") # vif.cca vif.cca(mod) # Aliased constraints mod <- cca(dune ~ ., dune.env) mod vif.cca(mod) alias(mod) with(dune.env, table(Management, Manure)) # The standard correlations (not recommended) spenvcor(mod) intersetcor(mod) } \keyword{ multivariate } vegan/man/varechem.Rd0000644000176200001440000000201012164553376014213 0ustar liggesusers\encoding{UTF-8} \name{varespec} \alias{varechem} \alias{varespec} \docType{data} \title{Vegetation and environment in lichen pastures} \usage{ data(varechem) data(varespec) } \description{ The \code{varespec} data frame has 24 rows and 44 columns. Columns are estimated cover values of 44 species. The variable names are formed from the scientific names, and are self explanatory for anybody familiar with the vegetation type. The \code{varechem} data frame has 24 rows and 14 columns, giving the soil characteristics of the very same sites as in the \code{varespec} data frame. The chemical measurements have obvious names. \code{Baresoil} gives the estimated cover of bare soil, \code{Humdepth} the thickness of the humus layer. } \references{ \enc{Väre}{Vare}, H., Ohtonen, R. and Oksanen, J. (1995) Effects of reindeer grazing on understorey vegetation in dry Pinus sylvestris forests. \emph{Journal of Vegetation Science} 6, 523--530. } \examples{ data(varespec) data(varechem) } \keyword{datasets} vegan/man/orditorp.Rd0000644000176200001440000000704412626316320014264 0ustar liggesusers\name{orditorp} \alias{orditorp} \title{ Add Text or Points to Ordination Plots } \description{ The function adds \code{\link{text}} or \code{\link{points}} to ordination plots. Text will be used if this can be done without overwriting other text labels, and points will be used otherwise. The function can help in reducing clutter in ordination graphics, but manual editing may still be necessary. } \usage{ orditorp(x, display, labels, choices = c(1, 2), priority, select, cex = 0.7, pcex, col = par("col"), pcol, pch = par("pch"), air = 1, ...) } \arguments{ \item{x}{A result object from ordination or an \code{\link{ordiplot}} result. } \item{display}{Items to be displayed in the plot. Only one alternative is allowed. Typically this is \code{"sites"} or \code{"species"}. } \item{labels}{ Optional text used for labels. Row names will be used if this is missing. } \item{choices}{ Axes shown.} \item{priority}{ Text will be used for items with higher priority if labels overlap. This should be vector of the same length as the number of items plotted.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items. If a logical vector is used, it must have the same length as the scores plotted.} \item{cex, pcex}{Text and point sizes, see \code{\link{plot.default}}..} \item{col, pcol}{Text and point colours, see \code{\link{plot.default}}.} \item{pch}{Plotting character, see \code{\link{points}}.} \item{air}{Amount of empty space between text labels. Values <1 allow overlapping text.} \item{\dots}{ Other arguments to \code{\link{scores}} (and its various methods), \code{\link{text}} and \code{\link{points}}.} } \details{ Function \code{orditorp} will add either text or points to an existing plot. The items with high \code{priority} will be added first and \code{\link{text}} will be used if this can be done without overwriting previous labels,and \code{\link{points}} will be used otherwise. If \code{priority} is missing, labels will be added from the outskirts to the centre. Function \code{orditorp} can be used with most ordination results, or plotting results from \code{\link{ordiplot}} or ordination plot functions (\code{\link{plot.cca}}, \code{\link{plot.decorana}}, \code{\link{plot.metaMDS}}). Arguments can be passed to the relevant \code{\link{scores}} method for the ordination object (\code{x}) being drawn. See the relevant \code{\link{scores}} help page for arguments that can be used. } \value{ The function returns invisibly a logical vector where \code{TRUE} means that item was labelled with text and \code{FALSE} means that it was marked with a point. The returned vector can be used as the \code{select} argument in ordination \code{text} and \code{points} functions. } \author{ Jari Oksanen } \examples{ ## A cluttered ordination plot : data(BCI) mod <- cca(BCI) plot(mod, dis="sp", type="t") # Now with orditorp and abbreviated species names cnam <- make.cepnames(names(BCI)) plot(mod, dis="sp", type="n") stems <- colSums(BCI) orditorp(mod, "sp", label = cnam, priority=stems, pch="+", pcol="grey") ## show select in action set.seed(1) take <- sample(ncol(BCI), 50) plot(mod, dis="sp", type="n") stems <- colSums(BCI) orditorp(mod, "sp", label = cnam, priority=stems, select = take, pch="+", pcol="grey") \dontshow{ ## example(orditorp) should not set random seed in the user session rm(.Random.seed) } } \keyword{ aplot } \keyword{ hplot } vegan/man/predict.cca.Rd0000644000176200001440000002413313231354436014602 0ustar liggesusers\name{predict.cca} \alias{fitted.cca} \alias{fitted.rda} \alias{fitted.capscale} \alias{fitted.dbrda} \alias{residuals.cca} \alias{predict.cca} \alias{predict.rda} \alias{predict.decorana} \alias{coef.cca} \alias{coef.rda} \alias{calibrate.cca} \alias{calibrate} \title{Prediction Tools for [Constrained] Ordination (CCA, RDA, DCA, CA, PCA) } \description{ Function \code{predict} can be used to find site and species scores or estimates of the response data with new data sets, Function \code{calibrate} estimates values of constraints with new data set. Functions \code{fitted} and \code{residuals} return estimates of response data. } \usage{ \method{fitted}{cca}(object, model = c("CCA", "CA", "pCCA"), type = c("response", "working"), ...) \method{fitted}{capscale}(object, model = c("CCA", "CA", "pCCA", "Imaginary"), type = c("response", "working"), ...) \method{residuals}{cca}(object, ...) \method{predict}{cca}(object, newdata, type = c("response", "wa", "sp", "lc", "working"), rank = "full", model = c("CCA", "CA"), scaling = "none", hill = FALSE, ...) \method{predict}{rda}(object, newdata, type = c("response", "wa", "sp", "lc", "working"), rank = "full", model = c("CCA", "CA"), scaling = "none", correlation = FALSE, ...) \method{calibrate}{cca}(object, newdata, rank = "full", ...) \method{coef}{cca}(object, ...) \method{predict}{decorana}(object, newdata, type = c("response", "sites", "species"), rank = 4, ...) } \arguments{ \item{object}{A result object from \code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}} or \code{\link{decorana}}. } \item{model}{Show constrained (\code{"CCA"}), unconstrained (\code{"CA"}) or conditioned \dQuote{partial} (\code{"pCCA"}) results. For \code{fitted} method of \code{\link{capscale}} this can also be \code{"Imaginary"} for imaginary components with negative eigenvalues. } \item{newdata}{New data frame to be used in prediction or in calibration. Usually this a new community data frame, but with \code{type = "lc"} and for constrained component with \code{type = "response"} and \code{type = "working"} it must be a data frame of constraints. The \code{newdata} must have the same number of rows as the original community data for a \code{\link{cca}} result with \code{type = "response"} or \code{type = "working"}. If the original model had row or column names, then new data must contain rows or columns with the same names (row names for species scores, column names for \code{"wa"} scores and constraint names of \code{"lc"} scores). In other cases the rows or columns must match directly. } \item{type}{The type of prediction, fitted values or residuals: \code{"response"} scales results so that the same ordination gives the same results, and \code{"working"} gives the values used internally, that is after Chi-square standardization in \code{\link{cca}} and scaling and centring in \code{\link{rda}}. In \code{\link{capscale}} the \code{"response"} gives the dissimilarities, and \code{"working"} the scaled scores that produce the dissimilarities as Euclidean distances. Alternative \code{"wa"} gives the site scores as weighted averages of the community data, \code{"lc"} the site scores as linear combinations of environmental data, and \code{"sp"} the species scores. In \code{predict.decorana} the alternatives are scores for \code{"sites"} or \code{"species"}.} \item{rank}{The rank or the number of axes used in the approximation. The default is to use all axes (full rank) of the \code{"model"} or all available four axes in \code{predict.decorana}.} \item{scaling}{logical, character, or numeric; Scaling or predicted scores with the same meaning as in \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}}. See \code{scores.cca} for further details on acceptable values.} \item{correlation, hill}{logical; correlation-like scores or Hill's scaling as appropriate for RDA/\code{\link{capscale}} and CCA respectively. See \code{\link{scores.cca}} for additional details.} \item{\dots}{Other parameters to the functions.} } \details{ Function \code{fitted} gives the approximation of the original data matrix or dissimilarities from the ordination result either in the scale of the response or as scaled internally by the function. Function \code{residuals} gives the approximation of the original data from the unconstrained ordination. With argument \code{type = "response"} the \code{fitted.cca} and \code{residuals.cca} function both give the same marginal totals as the original data matrix, and fitted and residuals do not add up to the original data. Functions \code{fitted.capscale} and \code{residuals.capscale} give the dissimilarities with \code{type = "response"}, but these are not additive, but the \code{"working"} scores are additive. All variants of \code{fitted} and \code{residuals} are defined so that for model \code{mod <- cca(y ~ x)}, \code{cca(fitted(mod))} is equal to constrained ordination, and \code{cca(residuals(mod))} is equal to unconstrained part of the ordination. Function \code{predict} can find the estimate of the original data matrix or dissimilarities (\code{type = "response"}) with any rank. With \code{rank = "full"} it is identical to \code{fitted}. In addition, the function can find the species scores or site scores from the community data matrix for \code{\link{cca}} or \code{\link{rda}}. The function can be used with new data, and it can be used to add new species or site scores to existing ordinations. The function returns (weighted) orthonormal scores by default, and you must specify explicit \code{scaling} to add those scores to ordination diagrams. With \code{type = "wa"} the function finds the site scores from species scores. In that case, the new data can contain new sites, but species must match in the original and new data. With \code{type="sp"} the function finds species scores from site constraints (linear combination scores). In that case the new data can contain new species, but sites must match in the original and new data. With \code{type = "lc"} the function finds the linear combination scores for sites from environmental data. In that case the new data frame must contain all constraining and conditioning environmental variables of the model formula. With \code{type = "response"} or \code{type = "working"} the new data must contain environmental variables if constrained component is desired, and community data matrix if residual or unconstrained component is desired. With these types, the function uses \code{newdata} to find new \code{"lc"} (constrained) or \code{"wa"} scores (unconstrained) and then finds the response or working data from these new row scores and species scores. The original site (row) and species (column) weights are used for \code{type = "response"} and \code{type = "working"} in correspondence analysis (\code{\link{cca}}) and therefore the number of rows must match in the original data and \code{newdata}. If a completely new data frame is created, extreme care is needed defining variables similarly as in the original model, in particular with (ordered) factors. If ordination was performed with the formula interface, the \code{newdata} can be a data frame or matrix, but extreme care is needed that the columns match in the original and \code{newdata}. Function \code{calibrate.cca} finds estimates of constraints from community ordination or \code{"wa"} scores from \code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}}. This is often known as calibration, bioindication or environmental reconstruction. Basically, the method is similar to projecting site scores onto biplot arrows, but it uses regression coefficients. The function can be called with \code{newdata} so that cross-validation is possible. The \code{newdata} may contain new sites, but species must match in the original and new data. The function does not work with \sQuote{partial} models with \code{Condition} term, and it cannot be used with \code{newdata} for \code{\link{capscale}} results. The results may only be interpretable for continuous variables. Function \code{coef} will give the regression coefficients from centred environmental variables (constraints and conditions) to linear combination scores. The coefficients are for unstandardized environmental variables. The coefficients will be \code{NA} for aliased effects. Function \code{predict.decorana} is similar to \code{predict.cca}. However, \code{type = "species"} is not available in detrended correspondence analysis (DCA), because detrending destroys the mutual reciprocal averaging (except for the first axis when rescaling is not used). Detrended CA does not attempt to approximate the original data matrix, so \code{type = "response"} has no meaning in detrended analysis (except with \code{rank = 1}). } \value{ The functions return matrices, vectors or dissimilarities as is appropriate. } \references{ Greenacre, M. J. (1984). Theory and applications of correspondence analysis. Academic Press, London. } \author{Jari Oksanen.} \seealso{\code{\link{cca}}, \code{\link{rda}}, \code{\link{capscale}}, \code{\link{decorana}}, \code{\link[car]{vif}}, \code{\link{goodness.cca}}. } \examples{ data(dune) data(dune.env) mod <- cca(dune ~ A1 + Management + Condition(Moisture), data=dune.env) # Definition of the concepts 'fitted' and 'residuals' mod cca(fitted(mod)) cca(residuals(mod)) # Remove rare species (freq==1) from 'cca' and find their scores # 'passively'. freq <- specnumber(dune, MARGIN=2) freq mod <- cca(dune[, freq>1] ~ A1 + Management + Condition(Moisture), dune.env) predict(mod, type="sp", newdata=dune[, freq==1], scaling="species") # New sites predict(mod, type="lc", new=data.frame(A1 = 3, Management="NM", Moisture="2"), scal=2) # Calibration and residual plot mod <- cca(dune ~ A1 + Moisture, dune.env) pred <- calibrate(mod) pred with(dune.env, plot(A1, pred[,"A1"] - A1, ylab="Prediction Error")) abline(h=0) } \keyword{ multivariate } vegan/man/procrustes.Rd0000644000176200001440000002350312727676571014654 0ustar liggesusers\name{procrustes} \alias{procrustes} \alias{summary.procrustes} \alias{plot.procrustes} \alias{points.procrustes} \alias{text.procrustes} \alias{lines.procrustes} \alias{residuals.procrustes} \alias{fitted.procrustes} \alias{predict.procrustes} \alias{protest} \title{Procrustes Rotation of Two Configurations and PROTEST } \description{ Function \code{procrustes} rotates a configuration to maximum similarity with another configuration. Function \code{protest} tests the non-randomness (`significance') between two configurations. } \usage{ procrustes(X, Y, scale = TRUE, symmetric = FALSE, scores = "sites", ...) \method{summary}{procrustes}(object, digits = getOption("digits"), ...) \method{plot}{procrustes}(x, kind=1, choices=c(1,2), to.target = TRUE, type = "p", xlab, ylab, main, ar.col = "blue", len=0.05, cex = 0.7, ...) \method{points}{procrustes}(x, display = c("target", "rotated"), choices = c(1,2), truemean = FALSE, ...) \method{text}{procrustes}(x, display = c("target", "rotated"), choices = c(1,2), labels, truemean = FALSE, ...) \method{lines}{procrustes}(x, type = c("segments", "arrows"), choices = c(1, 2), truemean = FALSE, ...) \method{residuals}{procrustes}(object, ...) \method{fitted}{procrustes}(object, truemean = TRUE, ...) \method{predict}{procrustes}(object, newdata, truemean = TRUE, ...) protest(X, Y, scores = "sites", permutations = how(nperm = 999), ...) } \arguments{ \item{X}{Target matrix} \item{Y}{Matrix to be rotated.} \item{scale}{Allow scaling of axes of \code{Y}.} \item{symmetric}{Use symmetric Procrustes statistic (the rotation will still be non-symmetric).} \item{scores}{Kind of scores used. This is the \code{display} argument used with the corresponding \code{scores} function: see \code{\link{scores}}, \code{\link{scores.cca}} and \code{\link{scores.cca}} for alternatives.} \item{x, object}{An object of class \code{procrustes}.} \item{digits}{Number of digits in the output.} \item{kind}{For \code{plot} function, the kind of plot produced: \code{kind = 1} plots shifts in two configurations, \code{kind = 0} draws a corresponding empty plot, and \code{kind = 2} plots an impulse diagram of residuals.} \item{choices}{Axes (dimensions) plotted.} \item{xlab, ylab}{Axis labels, if defaults unacceptable.} \item{main}{Plot title, if default unacceptable.} \item{display}{Show only the \code{"target"} or \code{"rotated"} matrix as points.} \item{to.target}{Draw arrows to point to target.} \item{type}{The type of plot drawn. In \code{plot}, the \code{type} can be \code{"points"} or \code{"text"} to select the marker for the tail of the arrow, or \code{"none"} for drawing an empty plot. In \code{lines} the \code{type} selects either \code{\link{arrows}} or line \code{\link{segments}} to connect target and rotated configuration.} \item{truemean}{Use the original range of target matrix instead of centring the fitted values. Function \code{plot.procrustes} needs \code{truemean = FALSE}, and adding graphical items to the plots from the original results may need \code{truemean = TRUE}.} \item{newdata}{Matrix of coordinates to be rotated and translated to the target.} \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{ar.col}{Arrow colour.} \item{len}{Width of the arrow head.} \item{labels}{Character vector of text labels. Rownames of the result object are used as default.} \item{cex}{Character expansion for points or text.} \item{...}{Other parameters passed to functions. In \code{procrustes} and \code{protest} parameters are passed to \code{\link{scores}}, in graphical functions to underlying graphical functions.} } \details{ Procrustes rotation rotates a matrix to maximum similarity with a target matrix minimizing sum of squared differences. Procrustes rotation is typically used in comparison of ordination results. It is particularly useful in comparing alternative solutions in multidimensional scaling. If \code{scale=FALSE}, the function only rotates matrix \code{Y}. If \code{scale=TRUE}, it scales linearly configuration \code{Y} for maximum similarity. Since \code{Y} is scaled to fit \code{X}, the scaling is non-symmetric. However, with \code{symmetric=TRUE}, the configurations are scaled to equal dispersions and a symmetric version of the Procrustes statistic is computed. Instead of matrix, \code{X} and \code{Y} can be results from an ordination from which \code{\link{scores}} can extract results. Function \code{procrustes} passes extra arguments to \code{\link{scores}}, \code{\link{scores.cca}} etc. so that you can specify arguments such as \code{scaling}. Function \code{plot} plots a \code{procrustes} object and returns invisibly an \code{ordiplot} object so that function \code{\link{identify.ordiplot}} can be used for identifying points. The items in the \code{ordiplot} object are called \code{heads} and \code{points} with \code{kind=1} (ordination diagram) and \code{sites} with \code{kind=2} (residuals). In ordination diagrams, the arrow heads point to the target configuration if \code{to.target = TRUE}, and to rotated configuration if \code{to.target = FALSE}. Target and original rotated axes are shown as cross hairs in two-dimensional Procrustes analysis, and with a higher number of dimensions, the rotated axes are projected onto plot with their scaled and centred range. Function \code{plot} passes parameters to underlying plotting functions. For full control of plots, you can draw the axes using \code{plot} with \code{kind = 0}, and then add items with \code{points} or \code{lines}. These functions pass all parameters to the underlying functions so that you can select the plotting characters, their size, colours etc., or you can select the width, colour and type of line \code{\link{segments}} or arrows, or you can select the orientation and head width of \code{\link{arrows}}. Function \code{residuals} returns the pointwise residuals, and \code{fitted} the fitted values, either centred to zero mean (if \code{truemean=FALSE}) or with the original scale (these hardly make sense if \code{symmetric = TRUE}). In addition, there are \code{summary} and \code{print} methods. If matrix \code{X} has a lower number of columns than matrix \code{Y}, then matrix \code{X} will be filled with zero columns to match dimensions. This means that the function can be used to rotate an ordination configuration to an environmental variable (most practically extracting the result with the \code{fitted} function). Function \code{predict} can be used to add new rotated coordinates to the target. The \code{predict} function will always translate coordinates to the original non-centred matrix. The function cannot be used with \code{newdata} for \code{symmetric} analysis. Function \code{protest} performs symmetric Procrustes analysis repeatedly to estimate the `significance' of the Procrustes statistic. Function \code{protest} uses a correlation-like statistic derived from the symmetric Procrustes sum of squares \eqn{ss} as \eqn{r =\sqrt{1-ss}}{r = sqrt(1-ss)}, and also prints the sum of squares of the symmetric analysis, sometimes called \eqn{m_{12}^2}{squared m12}. Function \code{protest} has own \code{print} method, but otherwise uses \code{procrustes} methods. Thus \code{plot} with a \code{protest} object yields a ``Procrustean superimposition plot.'' } \value{ Function \code{procrustes} returns an object of class \code{procrustes} with items. Function \code{protest} inherits from \code{procrustes}, but amends that with some new items: \item{Yrot }{Rotated matrix \code{Y}.} \item{X}{Target matrix.} \item{ss }{Sum of squared differences between \code{X} and \code{Yrot}.} \item{rotation}{Orthogonal rotation matrix.} \item{translation}{Translation of the origin.} \item{scale}{Scaling factor.} \item{xmean}{The centroid of the target.} \item{symmetric}{Type of \code{ss} statistic.} \item{call}{Function call.} \item{t0}{This and the following items are only in class \code{protest}: Procrustes correlation from non-permuted solution.} \item{t}{Procrustes correlations from permutations. The distribution of these correlations can be inspected with \code{\link{permustats}} function.} \item{signif}{`Significance' of \code{t}} \item{permutations}{Number of permutations.} \item{control}{A list of control values for the permutations as returned by the function \code{\link[permute]{how}}.} \item{control}{the list passed to argument \code{control} describing the permutation design.} } \references{ Mardia, K.V., Kent, J.T. and Bibby, J.M. (1979). \emph{Multivariate Analysis}. Academic Press. Peres-Neto, P.R. and Jackson, D.A. (2001). How well do multivariate data sets match? The advantages of a Procrustean superimposition approach over the Mantel test. \emph{Oecologia} 129: 169-178. } \author{Jari Oksanen } \note{The function \code{protest} follows Peres-Neto & Jackson (2001), but the implementation is still after Mardia \emph{et al.} (1979).} \seealso{\code{\link{monoMDS}}, for obtaining objects for \code{procrustes}, and \code{\link{mantel}} for an alternative to \code{protest} without need of dimension reduction. See \code{\link[permute]{how}} for details on specifying the type of permutation required.} \examples{ data(varespec) vare.dist <- vegdist(wisconsin(varespec)) mds.null <- monoMDS(vare.dist, y = cmdscale(vare.dist)) mds.alt <- monoMDS(vare.dist) vare.proc <- procrustes(mds.alt, mds.null) vare.proc summary(vare.proc) plot(vare.proc) plot(vare.proc, kind=2) residuals(vare.proc) } \keyword{multivariate } \keyword{htest} vegan/man/capscale.Rd0000644000176200001440000002746113231354436014205 0ustar liggesusers\name{capscale} \alias{capscale} \alias{oldCapscale} \alias{dbrda} \title{[Partial] Distance-based Redundancy Analysis } \description{ Distance-based redundancy analysis (dbRDA) is an ordination method similar to Redundancy Analysis (\code{\link{rda}}), but it allows non-Euclidean dissimilarity indices, such as Manhattan or Bray--Curtis distance. Despite this non-Euclidean feature, the analysis is strictly linear and metric. If called with Euclidean distance, the results are identical to \code{\link{rda}}, but dbRDA will be less efficient. Functions \code{capscale} and \code{dbrda} are constrained versions of metric scaling, a.k.a. principal coordinates analysis, which are based on the Euclidean distance but can be used, and are more useful, with other dissimilarity measures. The functions can also perform unconstrained principal coordinates analysis, optionally using extended dissimilarities. } \usage{ capscale(formula, data, distance = "euclidean", sqrt.dist = FALSE, comm = NULL, add = FALSE, dfun = vegdist, metaMDSdist = FALSE, na.action = na.fail, subset = NULL, ...) dbrda(formula, data, distance = "euclidean", sqrt.dist = FALSE, add = FALSE, dfun = vegdist, metaMDSdist = FALSE, na.action = na.fail, subset = NULL, ...) } \arguments{ \item{formula}{Model formula. The function can be called only with the formula interface. Most usual features of \code{\link{formula}} hold, especially as defined in \code{\link{cca}} and \code{\link{rda}}. The LHS must be either a community data matrix or a dissimilarity matrix, e.g., from \code{\link{vegdist}} or \code{\link{dist}}. If the LHS is a data matrix, function \code{\link{vegdist}} or function given in \code{dfun} will be used to find the dissimilarities. The RHS defines the constraints. The constraints can be continuous variables or factors, they can be transformed within the formula, and they can have interactions as in a typical \code{\link{formula}}. The RHS can have a special term \code{Condition} that defines variables to be ``partialled out'' before constraints, just like in \code{\link{rda}} or \code{\link{cca}}. This allows the use of partial CAP.} \item{data}{ Data frame containing the variables on the right hand side of the model formula. } \item{distance}{The name of the dissimilarity (or distance) index if the LHS of the \code{formula} is a data frame instead of dissimilarity matrix.} \item{sqrt.dist}{Take square roots of dissimilarities. See section \code{Details} below.} \item{comm}{ Community data frame which will be used for finding species scores when the LHS of the \code{formula} was a dissimilarity matrix. This is not used if the LHS is a data frame. If this is not supplied, the ``species scores'' unavailable.} \item{add}{Add a constant to the non-diagonal dissimilarities such that all eigenvalues are non-negative in the underlying Principal Co-ordinates Analysis (see \code{\link{wcmdscale}} for details). Choice \code{"lingoes"} (or \code{TRUE}) use the recommended method of Legendre & Anderson (1999: \dQuote{method 1}) and \code{"cailliez"} uses their \dQuote{method 2}. The latter is the only one in \code{\link{cmdscale}}.} \item{dfun}{Distance or dissimilarity function used. Any function returning standard \code{"dist"} and taking the index name as the first argument can be used. } \item{metaMDSdist}{Use \code{\link{metaMDSdist}} similarly as in \code{\link{metaMDS}}. This means automatic data transformation and using extended flexible shortest path dissimilarities (function \code{\link{stepacross}}) when there are many dissimilarities based on no shared species.} \item{na.action}{Handling of missing values in constraints or conditions. The default (\code{\link{na.fail}}) is to stop with missing values. Choices \code{\link{na.omit}} and \code{\link{na.exclude}} delete rows with missing values, but differ in representation of results. With \code{na.omit} only non-missing site scores are shown, but \code{na.exclude} gives \code{NA} for scores of missing observations. Unlike in \code{\link{rda}}, no WA scores are available for missing constraints or conditions.} \item{subset}{Subset of data rows. This can be a logical vector which is \code{TRUE} for kept observations, or a logical expression which can contain variables in the working environment, \code{data} or species names of the community data (if given in the formula or as \code{comm} argument).} \item{\dots}{Other parameters passed to \code{\link{rda}} or to \code{\link{metaMDSdist}}. } } \details{ Functions \code{capscale} and \code{dbrda} provide two alternative implementations of dbRDA. Function \code{capscale} is based on Legendre & Anderson (1999): the dissimilarity data are first ordinated using metric scaling, and the ordination results are analysed with \code{\link{rda}}. Function \code{dbrda} is based on McArdle & Anderson (2001) and directly decomposes dissimilarities. It does not use \code{\link{rda}} but a parallel implementation adapted for analysing dissimilarities and returns a subset of \code{\link{rda}} items. With Euclidean distances both results are identical to \code{\link{rda}}. Other dissimmilarities may give negative eigenvalues associated with imaginary axes. Negative eigenvalues are handled differently: \code{capscale} ignores imaginary axes and analyses only real axes with positive eigenvalues, and \code{dbrda} directly analyses dissimilarities and can give negative eigenvalues in any component. Both methods define total inertia of conditions, constraints and residuals identically. If the user supplied a community data frame instead of dissimilarities, the functions will find dissimilarities using \code{\link{vegdist}} or distance function given in \code{dfun} with specified \code{distance}. The functions will accept distance objects from \code{\link{vegdist}}, \code{\link{dist}}, or any other method producing similar objects. The constraining variables can be continuous or factors or both, they can have interaction terms, or they can be transformed in the call. Moreover, there can be a special term \code{Condition} just like in \code{\link{rda}} and \code{\link{cca}} so that ``partial'' analysis can be performed. Non-Euclidean dissimilarities can produce negative eigenvalues (Legendre & Anderson 1999, McArdle & Anderson 2001). The total inertia and \code{\link{anova.cca}} tests for constraints will also include the effects of imaginary axes with negative eigenvalues following McArdle & Anderson (2001). If there are negative eigenvalues, the printed output of \code{capscale} will add a column with sums of positive eigenvalues and an item of sum of negative eigenvalues, and \code{dbrda} will add a column giving the number of real dimensions with postive eigenvalues. If negative eigenvalues are disturbing, \code{capscale} lets you to distort the dissimilarities so that only non-negative eigenvalues will be produced using argument \code{add = TRUE} (this argument is passed to \code{\link{cmdscale}}). Alternatively, with \code{sqrt.dist = TRUE}, square roots of dissimilarities will be used which may help in avoiding negative eigenvalues (Legendre & Anderson 1999). The functions can be also used to perform ordinary metric scaling a.k.a. principal coordinates analysis by using a formula with only a constant on the left hand side, or \code{comm ~ 1}. With \code{metaMDSdist = TRUE}, the function can do automatic data standardization and use extended dissimilarities using function \code{\link{stepacross}} similarly as in non-metric multidimensional scaling with \code{\link{metaMDS}}. } \value{ The functions return an object of class \code{capscale} or \code{dbrda} which inherits from \code{\link{rda}}. See \code{\link{cca.object}} for description of the result object. } \references{ Anderson, M.J. & Willis, T.J. (2003). Canonical analysis of principal coordinates: a useful method of constrained ordination for ecology. \emph{Ecology} 84, 511--525. Gower, J.C. (1985). Properties of Euclidean and non-Euclidean distance matrices. \emph{Linear Algebra and its Applications} 67, 81--97. Legendre, P. & Anderson, M. J. (1999). Distance-based redundancy analysis: testing multispecies responses in multifactorial ecological experiments. \emph{Ecological Monographs} 69, 1--24. Legendre, P. & Legendre, L. (2012). \emph{Numerical Ecology}. 3rd English Edition. Elsevier. McArdle, B.H. & Anderson, M.J. (2001). Fitting multivariate models to community data: a comment on distance-based redundancy analysis. \emph{Ecology} 82, 290--297. } \author{ Jari Oksanen } \note{ The function \code{capscale} was originally developed as a variant of constrained analysis of proximities (Anderson & Willis 2003), but these developments made it became identical to dbRDA. In older version of \pkg{vegan} the total inertia and permutation tests were based only on real axes, but in \pkg{vegan} 2.4-0 they also include the imaginary components following McArdle & Anderson (2001). For compatibility with the old versions of \pkg{vegan}, you can use function \code{oldCapscale} to discard the effects of imaginary dimensions (negative eigenvalues). The inertia is named after the dissimilarity index as defined in the dissimilarity data, or as \code{unknown distance} if such an information is missing. Function \code{\link{rda}} usually divides the ordination scores by number of sites minus one. In this way, the inertia is variance instead of sum of squares, and the eigenvalues sum up to variance. Many dissimilarity measures are in the range 0 to 1, so they have already made a similar division. If the largest original dissimilarity is less than or equal to 4 (allowing for \code{\link{stepacross}}), this division is undone in \code{capscale} and original dissimilarities are used. Keyword \code{mean} is added to the inertia in cases where division was made, e.g. in Euclidean and Manhattan distances. Inertia is based on squared index, and keyword \code{squared} is added to the name of distance, unless data were square root transformed (argument \code{sqrt.dist = TRUE}). If an additive constant was used with argument \code{add}, \code{Lingoes adjusted} or \code{Cailliez adjusted} is added to the the name of inertia, and the value of the constant is printed. } \seealso{\code{\link{rda}}, \code{\link{cca}}, \code{\link{plot.cca}}, \code{\link{anova.cca}}, \code{\link{vegdist}}, \code{\link{dist}}, \code{\link{cmdscale}}, \code{\link{wcmdscale}}. The function returns similar result object as \code{\link{rda}} (see \code{\link{cca.object}}). This section for \code{\link{rda}} gives a more complete list of functions that can be used to access and analyse dbRDA results. } \examples{ data(varespec) data(varechem) ## Basic Analysis vare.cap <- capscale(varespec ~ N + P + K + Condition(Al), varechem, dist="bray") vare.cap plot(vare.cap) anova(vare.cap) ## Avoid negative eigenvalues with additive constant capscale(varespec ~ N + P + K + Condition(Al), varechem, dist="bray", add =TRUE) ## Avoid negative eigenvalues by taking square roots of dissimilarities capscale(varespec ~ N + P + K + Condition(Al), varechem, dist = "bray", sqrt.dist= TRUE) ## Principal coordinates analysis with extended dissimilarities capscale(varespec ~ 1, dist="bray", metaMDS = TRUE) ## dbrda dbrda(varespec ~ N + P + K + Condition(Al), varechem, dist="bray") ## avoid negative eigenvalues also with Jaccard distances dbrda(varespec ~ N + P + K + Condition(Al), varechem, dist="jaccard") } \keyword{ multivariate } vegan/man/wcmdscale.Rd0000644000176200001440000001447113231354436014371 0ustar liggesusers% Based on: % File src/library/stats/man/cmdscale.Rd % Part of the R package, http://www.R-project.org % Copyright 1995-2007 R Core Development Team % Distributed under GPL 2 or later \name{wcmdscale} \alias{wcmdscale} \alias{scores.wcmdscale} \alias{plot.wcmdscale} \title{Weighted Classical (Metric) Multidimensional Scaling} \usage{ wcmdscale(d, k, eig = FALSE, add = FALSE, x.ret = FALSE, w) \method{plot}{wcmdscale}(x, choices = c(1, 2), type = "t", ...) \method{scores}{wcmdscale}(x, choices = NA, ...) } \description{ Weighted classical multidimensional scaling, also known as weighted \emph{principal coordinates analysis}. } \arguments{ \item{d}{a distance structure such as that returned by \code{dist} or a full symmetric matrix containing the dissimilarities.} \item{k}{the dimension of the space which the data are to be represented in; must be in \eqn{\{1,2,\ldots,n-1\}}{{1,2,\ldots,n-1}}. If missing, all dimensions with above zero eigenvalue.} \item{eig}{indicates whether eigenvalues should be returned.} \item{add}{an additive constant \eqn{c} is added to the non-diagonal dissimilarities such that all \eqn{n-1} eigenvalues are non-negative. Alternatives are \code{"lingoes"} (default, also used with \code{TRUE}) and \code{"cailliez"} (which is the only alternative in \code{\link{cmdscale}}). See Legendre & Anderson (1999).} \item{x.ret}{indicates whether the doubly centred symmetric distance matrix should be returned.} \item{w}{Weights of points.} \item{x}{The \code{wcmdscale} result object when the function was called with options \code{eig = TRUE} or \code{x.ret = TRUE} (See Details).} \item{choices}{Axes to be returned; \code{NA} returns all real axes.} \item{type}{Type of graph which may be \code{"t"}ext, \code{"p"}oints or \code{"n"}one.} \item{\dots}{Other arguments passed to graphical functions.} } \details{ Function \code{wcmdscale} is based on function \code{\link{cmdscale}} (package \pkg{stats} of base \R), but it uses point weights. Points with high weights will have a stronger influence on the result than those with low weights. Setting equal weights \code{w = 1} will give ordinary multidimensional scaling. With default options, the function returns only a matrix of scores scaled by eigenvalues for all real axes. If the function is called with \code{eig = TRUE} or \code{x.ret = TRUE}, the function returns an object of class \code{"wcmdscale"} with \code{print}, \code{plot}, \code{scores}, \code{\link{eigenvals}} and \code{\link{stressplot}} methods, and described in section Value. The method is Euclidean, and with non-Euclidean dissimilarities some eigenvalues can be negative. If this disturbs you, this can be avoided by adding a constant to non-diagonal dissimilarities making all eigenvalues non-negative. The function implements methods discussed by Legendre & Anderson (1999): The method of Lingoes (\code{add="lingoes"}) adds the constant \eqn{c} to squared dissimilarities \eqn{d} using \eqn{\sqrt{d^2 + 2 c}}{sqrt(d^2 + 2*c)} and the method of Cailliez (\code{add="cailliez"}) to dissimilarities using \eqn{d + c}. Legendre & Anderson (1999) recommend the method of Lingoes, and base \R{} function \code{\link{cmdscale}} implements the method of Cailliez. } \value{ If \code{eig = FALSE} and \code{x.ret = FALSE} (default), a matrix with \code{k} columns whose rows give the coordinates of points corresponding to positive eignenvalues. Otherwise, an object of class \code{wcmdscale} containing the components that are mostly similar as in \code{\link{cmdscale}}: \item{points}{a matrix with \code{k} columns whose rows give the coordinates of the points chosen to represent the dissimilarities.} \item{eig}{the \eqn{n-1} eigenvalues computed during the scaling process if \code{eig} is true.} \item{x}{the doubly centred and weighted distance matrix if \code{x.ret} is true.} \item{ac, add}{additive constant and adjustment method used to avoid negative eigenvalues. These are \code{NA} and \code{FALSE} if no adjustment was done.} \item{GOF}{Goodness of fit statistics for \code{k} axes. The first value is based on the sum of absolute values of all eigenvalues, and the second value is based on the sum of positive eigenvalues} \item{weights}{Weights.} \item{negaxes}{A matrix of scores for axes with negative eigenvalues scaled by the absolute eigenvalues similarly as \code{points}. This is \code{NULL} if there are no negative eigenvalues or \code{k} was specified, and would not include negative eigenvalues.} \item{call}{Function call.} } \references{ Gower, J. C. (1966) Some distance properties of latent root and vector methods used in multivariate analysis. \emph{Biometrika} \bold{53}, 325--328. Legendre, P. & Anderson, M. J. (1999). Distance-based redundancy analysis: testing multispecies responses in multifactorial ecological experiments. \emph{Ecology} \bold{69}, 1--24. Mardia, K. V., Kent, J. T. and Bibby, J. M. (1979). Chapter 14 of \emph{Multivariate Analysis}, London: Academic Press. } \seealso{The function is modelled after \code{\link{cmdscale}}, but adds weights (hence name) and handles negative eigenvalues differently. \code{\link{eigenvals.wcmdscale}} and \code{\link{stressplot.wcmdscale}} are some specific methods. Other multidimensional scaling methods are \code{\link{monoMDS}}, and \code{\link[MASS]{isoMDS}} and \code{\link[MASS]{sammon}} in package \pkg{MASS}. } \examples{ ## Correspondence analysis as a weighted principal coordinates ## analysis of Euclidean distances of Chi-square transformed data data(dune) rs <- rowSums(dune)/sum(dune) d <- dist(decostand(dune, "chi")) ord <- wcmdscale(d, w = rs, eig = TRUE) ## Ordinary CA ca <- cca(dune) ## Eigevalues are numerically similar ca$CA$eig - ord$eig ## Configurations are similar when site scores are scaled by ## eigenvalues in CA procrustes(ord, ca, choices=1:19, scaling = "sites") plot(procrustes(ord, ca, choices=1:2, scaling="sites")) ## Reconstruction of non-Euclidean distances with negative eigenvalues d <- vegdist(dune) ord <- wcmdscale(d, eig = TRUE) ## Only positive eigenvalues: cor(d, dist(ord$points)) ## Correction with negative eigenvalues: cor(d, sqrt(dist(ord$points)^2 - dist(ord$negaxes)^2)) } \keyword{multivariate} vegan/man/beals.Rd0000644000176200001440000001442513231354436013514 0ustar liggesusers\encoding{UTF-8} \name{beals} \alias{beals} \alias{swan} \title{Beals Smoothing and Degree of Absence} \description{ Beals smoothing replaces each entry in the community data with a probability of a target species occurring in that particular site, based on the joint occurrences of the target species with the species that actually occur in the site. Swan's (1970) degree of absence applies Beals smoothing to zero items so long that all zeros are replaced with smoothed values. } \usage{ beals(x, species = NA, reference = x, type = 0, include = TRUE) swan(x, maxit = Inf) } \arguments{ \item{x}{Community data frame or matrix. } \item{species}{ Column index used to compute Beals function for a single species. The default (\code{NA}) indicates that the function will be computed for all species.} \item{reference}{ Community data frame or matrix to be used to compute joint occurrences. By default, \code{x} is used as reference to compute the joint occurrences.} \item{type}{Numeric. Specifies if and how abundance values have to be used in function \code{beals}. See details for more explanation.} \item{include}{This logical flag indicates whether the target species has to be included when computing the mean of the conditioned probabilities. The original Beals (1984) definition is equivalent to \code{include=TRUE}, while the formulation of \enc{Münzbergová}{Munzbergova} and Herben is equal to \code{include=FALSE}.} \item{maxit}{Maximum number of iterations. The default \code{Inf} means that iterations are continued until there are no zeros or the number of zeros does not change. Probably only \code{maxit = 1} makes sense in addition to the default.} } \details{ Beals smoothing is the estimated probability \eqn{p_{ij}}{p[ij]} that species \eqn{j} occurs at site \eqn{i}. It is defined as \eqn{p_{ij} = \frac{1}{S_i} \sum_k \frac{N_{jk} I_{ik}}{N_k}}{p[ij] = 1/S[i] Sum(k) N[jk] I[ik] / N[k]}, where \eqn{S_i}{S[i]} is the number of species at site \eqn{i}, \eqn{N_{jk}}{N[jk]} is the number of joint occurrences of species \eqn{j} and \eqn{k}, \eqn{N_k}{N[k]} is the number of occurrences of species \eqn{k}, and \eqn{I} is the incidence (0 or 1) of species (this last term is usually omitted from the equation, but it is necessary). As \eqn{N_{jk}}{N[jk]} can be interpreted as a mean of conditional probability, the \code{beals} function can be interpreted as a mean of conditioned probabilities (De \enc{Cáceres}{Caceres} & Legendre 2008). The present function is generalized to abundance values (De \enc{Cáceres}{Caceres} & Legendre 2008). The \code{type} argument specifies if and how abundance values have to be used. \code{type = 0} presence/absence mode. \code{type = 1} abundances in \code{reference} (or \code{x}) are used to compute conditioned probabilities. \code{type = 2} abundances in \code{x} are used to compute weighted averages of conditioned probabilities. \code{type = 3} abundances are used to compute both conditioned probabilities and weighted averages. Beals smoothing was originally suggested as a method of data transformation to remove excessive zeros (Beals 1984, McCune 1994). However, it is not a suitable method for this purpose since it does not maintain the information on species presences: a species may have a higher probability of occurrence at a site where it does not occur than at sites where it occurs. Moreover, it regularizes data too strongly. The method may be useful in identifying species that belong to the species pool (Ewald 2002) or to identify suitable unoccupied patches in metapopulation analysis (\enc{Münzbergová}{Munzbergova} & Herben 2004). In this case, the function should be called with \code{include=FALSE} for cross-validation smoothing for species; argument \code{species} can be used if only one species is studied. Swan (1970) suggested replacing zero values with degrees of absence of a species in a community data matrix. Swan expressed the method in terms of a similarity matrix, but it is equivalent to applying Beals smoothing to zero values, at each step shifting the smallest initially non-zero item to value one, and repeating this so many times that there are no zeros left in the data. This is actually very similar to extended dissimilarities (implemented in function \code{\link{stepacross}}), but very rarely used. } \value{ The function returns a transformed data matrix or a vector if Beals smoothing is requested for a single species. } \references{ Beals, E.W. 1984. Bray-Curtis ordination: an effective strategy for analysis of multivariate ecological data. Pp. 1--55 in: MacFadyen, A. & E.D. Ford [eds.] \emph{Advances in Ecological Research, 14}. Academic Press, London. De \enc{Cáceres}{Caceres}, M. & Legendre, P. 2008. Beals smoothing revisited. \emph{Oecologia} 156: 657--669. Ewald, J. 2002. A probabilistic approach to estimating species pools from large compositional matrices. \emph{J. Veg. Sci.} 13: 191--198. McCune, B. 1994. Improving community ordination with the Beals smoothing function. \emph{Ecoscience} 1: 82--86. \enc{Münzbergová}{Munzbergova}, Z. & Herben, T. 2004. Identification of suitable unoccupied habitats in metapopulation studies using co-occurrence of species. \emph{Oikos} 105: 408--414. Swan, J.M.A. 1970. An examination of some ordination problems by use of simulated vegetational data. \emph{Ecology} 51: 89--102. } \author{Miquel De \enc{Cáceres}{Caceres} and Jari Oksanen} \seealso{\code{\link{decostand}} for proper standardization methods, \code{\link{specpool}} for an attempt to assess the size of species pool. Function \code{\link{indpower}} assesses the power of each species to estimate the probabilities predicted by \code{beals}. } \examples{ data(dune) ## Default x <- beals(dune) ## Remove target species x <- beals(dune, include = FALSE) ## Smoothed values against presence or absence of species pa <- decostand(dune, "pa") boxplot(as.vector(x) ~ unlist(pa), xlab="Presence", ylab="Beals") ## Remove the bias of tarbet species: Yields lower values. beals(dune, type =3, include = FALSE) ## Uses abundance information. ## Vector with beals smoothing values corresponding to the first species ## in dune. beals(dune, species=1, include=TRUE) } \keyword{ manip } \keyword{ smooth } vegan/man/vegan-internal.Rd0000644000176200001440000001106513231354436015335 0ustar liggesusers\name{vegan-internal} \alias{ordiParseFormula} \alias{ordiNAexclude} \alias{ordiNApredict} \alias{getPermuteMatrix} \alias{howHead} \alias{centroids.cca} \alias{ordiTerminfo} \alias{pasteCall} \alias{ordiArgAbsorber} \alias{veganCovEllipse} \alias{hierParseFormula} \alias{veganMahatrans} \alias{GowerDblcen} \alias{addLingoes} \alias{addCailliez} \title{Internal vegan functions} \description{ Internal vegan functions that are not intended to be called directly, but only within other functions. } \usage{ ordiParseFormula(formula, data, xlev = NULL, na.action = na.fail, subset = NULL) ordiTerminfo(d, data) ordiNAexclude(x, excluded) ordiNApredict(omit, x) ordiArgAbsorber(..., shrink, origin, scaling, triangular, display, choices, const, truemean, FUN) centroids.cca(x, mf, wt) getPermuteMatrix(perm, N, strata = NULL) howHead(x, ...) pasteCall(call, prefix = "Call:") veganCovEllipse(cov, center = c(0, 0), scale = 1, npoints = 100) veganMahatrans(x, s2, tol = sqrt(.Machine$double.eps)) hierParseFormula(formula, data) GowerDblcen(x, na.rm = TRUE) addLingoes(d) addCailliez(d) } \details{ The description here is only intended for \pkg{vegan} developers: these functions are not intended for users, but they only should be used within functions. In general, these functions are not exported to the namespace, but you must use \code{\link{get}} or \code{\link{:::}} to directly call these functions. \code{ordiParseFormula} returns a list of three matrices (dependent variables, and \code{\link{model.matrix}} of constraints and conditions, possibly \code{NULL}) needed in constrained ordination. Argument \code{xlev} is passed to \code{\link{model.frame}}. \code{ordiTermInfo} finds the term information for constrained ordination as described in \code{\link{cca.object}}. \code{ordiNAexclude} implements \code{na.action = na.exclude} for constrained ordination finding WA scores of CCA components and site scores of unconstrained component from \code{excluded} rows of observations. Function \code{ordiNApredict} pads the result object with these or with WA scores similarly as \code{\link{napredict}}. \code{ordiArgAbsorber} absorbs arguments of \code{\link{scores}} function of \pkg{vegan} so that these do not cause superfluous warnings in graphical function \code{FUN}. If you implement \code{scores} functions with new arguments, you should update \code{ordiArgAbsorber}. \code{centroids.cca} finds the weighted centroids of variables. \code{getPermuteMatrix} interprets user input and returns a permutation matrix where each row gives indices of observations for a permutation. The input \code{perm} can be a single number for the number of simple permutations, a result of \code{\link[permute]{how}} defining a permutation scheme or a permutation matrix. Function \code{permuted.index} was used earlier to generate permutations, but it is now deprecated. \code{howHead} formats the permutation scheme of \code{\link[permute]{how}} for display. The formatting is more compact than the one used in \code{print} in the \pkg{permute} package, and shows only non-default choices. This output is normally used when printing the results of \pkg{vegan} permutations. \code{pasteCall} prints the function call so that it is nicely wrapped in \code{\link[utils]{Sweave}} output. \code{veganCovEllipse} finds the coordinates for drawing a covariance ellipse. \code{veganMahatrans} transforms data matrix so that its Euclidean distances are Mahalanobis distances. The input data \code{x} must be a matrix centred by columns, and \code{s2} its covariance matrix. If \code{s2} is not given, covariance matrix is found from \code{x} within the function. \code{hierParseFormula} returns a list of one matrix (left hand side) and a model frame with factors representing hierarchy levels (right hand side) to be used in \code{\link{adipart}}, \code{\link{multipart}} and \code{\link{hiersimu}}. \code{GowerDblcen} performs the Gower double centring of a matrix of dissimilarities. Similar function was earlier available as a compiled code in \pkg{stats}, but it is not a part of official API, and therefore we have this poorer replacement. \code{addLingoes} and \code{addCailliez} find the constant added to non-diagonal (squared) dissimilarities to make all eigenvalues non-negative in Principal Co-ordinates Analysis (\code{\link{wcmdscale}}, \code{\link{capscale}}). Function \code{\link{cmdscale}} implements the Cailliez method. The argument is a matrix of dissimilarities. } \keyword{internal } vegan/man/tsallis.Rd0000644000176200001440000001150312727676571014113 0ustar liggesusers\encoding{UTF-8} \name{tsallis} \alias{tsallis} \alias{tsallisaccum} \alias{persp.tsallisaccum} \title{Tsallis Diversity and Corresponding Accumulation Curves} \description{ Function \code{tsallis} find Tsallis diversities with any scale or the corresponding evenness measures. Function \code{tsallisaccum} finds these statistics with accumulating sites. } \usage{ tsallis(x, scales = seq(0, 2, 0.2), norm = FALSE, hill = FALSE) tsallisaccum(x, scales = seq(0, 2, 0.2), permutations = 100, raw = FALSE, subset, ...) \method{persp}{tsallisaccum}(x, theta = 220, phi = 15, col = heat.colors(100), zlim, ...) } \arguments{ \item{x}{Community data matrix or plotting object. } \item{scales}{Scales of Tsallis diversity.} \item{norm}{Logical, if \code{TRUE} diversity values are normalized by their maximum (diversity value at equiprobability conditions).} \item{hill}{Calculate Hill numbers.} \item{permutations}{Usually an integer giving the number permutations, but can also be a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or a permutation matrix where each row gives the permuted indices.} \item{raw}{If \code{FALSE} then return summary statistics of permutations, and if TRUE then returns the individual permutations.} \item{subset}{logical expression indicating sites (rows) to keep: missing values are taken as \code{FALSE}.} \item{theta, phi}{angles defining the viewing direction. \code{theta} gives the azimuthal direction and \code{phi} the colatitude.} \item{col}{Colours used for surface.} \item{zlim}{Limits of vertical axis.} \item{\dots}{Other arguments which are passed to \code{tsallis} and to graphical functions.} } \details{ The Tsallis diversity (also equivalent to Patil and Taillie diversity) is a one-parametric generalised entropy function, defined as: \deqn{H_q = \frac{1}{q-1} (1-\sum_{i=1}^S p_i^q)}{H.q = 1/(q-1)(1-sum(p^q))} where \eqn{q} is a scale parameter, \eqn{S} the number of species in the sample (Tsallis 1988, Tothmeresz 1995). This diversity is concave for all \eqn{q>0}, but non-additive (Keylock 2005). For \eqn{q=0} it gives the number of species minus one, as \eqn{q} tends to 1 this gives Shannon diversity, for \eqn{q=2} this gives the Simpson index (see function \code{\link{diversity}}). If \code{norm = TRUE}, \code{tsallis} gives values normalized by the maximum: \deqn{H_q(max) = \frac{S^{1-q}-1}{1-q}}{H.q(max) = (S^(1-q)-1)/(1-q)} where \eqn{S} is the number of species. As \eqn{q} tends to 1, maximum is defined as \eqn{ln(S)}. If \code{hill = TRUE}, \code{tsallis} gives Hill numbers (numbers equivalents, see Jost 2007): \deqn{D_q = (1-(q-1) H)^{1/(1-q)}}{D.q = (1-(q-1)*H)^(1/(1-q))} Details on plotting methods and accumulating values can be found on the help pages of the functions \code{\link{renyi}} and \code{\link{renyiaccum}}. } \value{ Function \code{tsallis} returns a data frame of selected indices. Function \code{tsallisaccum} with argument \code{raw = FALSE} returns a three-dimensional array, where the first dimension are the accumulated sites, second dimension are the diversity scales, and third dimension are the summary statistics \code{mean}, \code{stdev}, \code{min}, \code{max}, \code{Qnt 0.025} and \code{Qnt 0.975}. With argument \code{raw = TRUE} the statistics on the third dimension are replaced with individual permutation results. } \references{ Tsallis, C. (1988) Possible generalization of Boltzmann-Gibbs statistics. \emph{J. Stat. Phis.} 52, 479--487. Tothmeresz, B. (1995) Comparison of different methods for diversity ordering. \emph{Journal of Vegetation Science} \bold{6}, 283--290. Patil, G. P. and Taillie, C. (1982) Diversity as a concept and its measurement. \emph{J. Am. Stat. Ass.} \bold{77}, 548--567. Keylock, C. J. (2005) Simpson diversity and the Shannon-Wiener index as special cases of a generalized entropy. \emph{Oikos} \bold{109}, 203--207. Jost, L (2007) Partitioning diversity into independent alpha and beta components. \emph{Ecology} \bold{88}, 2427--2439. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}, based on the code of Roeland Kindt and Jari Oksanen written for \code{renyi}} \seealso{ Plotting methods and accumulation routines are based on functions \code{\link{renyi}} and \code{\link{renyiaccum}}. An object of class 'tsallisaccum' can be used with function \code{\link[vegan3d]{rgl.renyiaccum}} as well. See also settings for \code{\link{persp}}. } \examples{ data(BCI) i <- sample(nrow(BCI), 12) x1 <- tsallis(BCI[i,]) x1 diversity(BCI[i,],"simpson") == x1[["2"]] plot(x1) x2 <- tsallis(BCI[i,],norm=TRUE) x2 plot(x2) mod1 <- tsallisaccum(BCI[i,]) plot(mod1, as.table=TRUE, col = c(1, 2, 2)) persp(mod1) mod2 <- tsallisaccum(BCI[i,], norm=TRUE) persp(mod2,theta=100,phi=30) } \keyword{multivariate} vegan/man/multipart.Rd0000644000176200001440000001450113156750403014442 0ustar liggesusers\encoding{UTF-8} \name{multipart} \alias{multipart} \alias{multipart.default} \alias{multipart.formula} \title{Multiplicative Diversity Partitioning} \description{ In multiplicative diversity partitioning, mean values of alpha diversity at lower levels of a sampling hierarchy are compared to the total diversity in the entire data set or the pooled samples (gamma diversity). } \usage{ multipart(...) \method{multipart}{default}(y, x, index=c("renyi", "tsallis"), scales = 1, global = FALSE, relative = FALSE, nsimul=99, method = "r2dtable", ...) \method{multipart}{formula}(formula, data, index=c("renyi", "tsallis"), scales = 1, global = FALSE, relative = FALSE, nsimul=99, method = "r2dtable", ...) } \arguments{ \item{y}{A community matrix.} \item{x}{A matrix with same number of rows as in \code{y}, columns coding the levels of sampling hierarchy. The number of groups within the hierarchy must decrease from left to right. If \code{x} is missing, two levels are assumed: each row is a group in the first level, and all rows are in the same group in the second level.} \item{formula}{A two sided model formula in the form \code{y ~ x}, where \code{y} is the community data matrix with samples as rows and species as column. Right hand side (\code{x}) must be grouping variables referring to levels of sampling hierarchy, terms from right to left will be treated as nested (first column is the lowest, last is the highest level, at least two levels specified). Interaction terms are not allowed.} \item{data}{A data frame where to look for variables defined in the right hand side of \code{formula}. If missing, variables are looked in the global environment.} \item{index}{Character, the entropy index to be calculated (see Details).} \item{relative}{Logical, if \code{TRUE} then beta diversity is standardized by its maximum (see Details).} \item{scales}{Numeric, of length 1, the order of the generalized diversity index to be used.} \item{global}{Logical, indicates the calculation of beta diversity values, see Details.} \item{nsimul}{Number of permutations to use. If \code{nsimul = 0}, only the \code{FUN} argument is evaluated. It is thus possible to reuse the statistic values without a null model.} \item{method}{Null model method: either a name (character string) of a method defined in \code{\link{make.commsim}} or a \code{\link{commsim}} function. The default \code{"r2dtable"} keeps row sums and column sums fixed. See \code{\link{oecosimu}} for Details and Examples.} \item{\dots}{Other arguments passed to \code{\link{oecosimu}}, i.e. \code{method}, \code{thin} or \code{burnin}.} } \details{ Multiplicative diversity partitioning is based on Whittaker's (1972) ideas, that has recently been generalised to one parametric diversity families (i.e. \enc{Rényi}{Renyi} and Tsallis) by Jost (2006, 2007). Jost recommends to use the numbers equivalents (Hill numbers), instead of pure diversities, and proofs, that this satisfies the multiplicative partitioning requirements. The current implementation of \code{multipart} calculates Hill numbers based on the functions \code{\link{renyi}} and \code{\link{tsallis}} (provided as \code{index} argument). If values for more than one \code{scales} are desired, it should be done in separate runs, because it adds extra dimensionality to the implementation, which has not been resolved efficiently. Alpha diversities are then the averages of these Hill numbers for each hierarchy levels, the global gamma diversity is the alpha value calculated for the highest hierarchy level. When \code{global = TRUE}, beta is calculated relative to the global gamma value: \deqn{\beta_i = \gamma / \alpha_{i}}{beta_i = gamma / alpha_i} when \code{global = FALSE}, beta is calculated relative to local gamma values (local gamma means the diversity calculated for a particular cluster based on the pooled abundance vector): \deqn{\beta_ij = \alpha_{(i+1)j} / mean(\alpha_{ij})}{beta_ij = alpha_(i+1)j / mean(alpha_i)} where \eqn{j} is a particular cluster at hierarchy level \eqn{i}. Then beta diversity value for level \eqn{i} is the mean of the beta values of the clusters at that level, \eqn{\beta_{i} = mean(\beta_{ij})}. If \code{relative = TRUE}, the respective beta diversity values are standardized by their maximum possible values (\eqn{mean(\beta_{ij}) / \beta_{max,ij}}) given as \eqn{\beta_{max,ij} = n_{j}} (the number of lower level units in a given cluster \eqn{j}). The expected diversity components are calculated \code{nsimul} times by individual based randomization of the community data matrix. This is done by the \code{"r2dtable"} method in \code{\link{oecosimu}} by default. } \value{ An object of class 'multipart' with same structure as 'oecosimu' objects. } \references{ Jost, L. (2006). Entropy and diversity. \emph{Oikos}, \bold{113}, 363--375. Jost, L. (2007). Partitioning diversity into independent alpha and beta components. \emph{Ecology}, \bold{88}, 2427--2439. Whittaker, R. (1972). Evolution and measurement of species diversity. \emph{Taxon}, \bold{21}, 213--251. } \author{\enc{Péter Sólymos}{Peter Solymos}, \email{solymos@ualberta.ca}} \seealso{See \code{\link{adipart}} for additive diversity partitioning, \code{\link{hiersimu}} for hierarchical null model testing and \code{\link{oecosimu}} for permutation settings and calculating \eqn{p}-values.} \examples{ ## NOTE: 'nsimul' argument usually needs to be >= 99 ## here much lower value is used for demonstration data(mite) data(mite.xy) data(mite.env) ## Function to get equal area partitions of the mite data cutter <- function (x, cut = seq(0, 10, by = 2.5)) { out <- rep(1, length(x)) for (i in 2:(length(cut) - 1)) out[which(x > cut[i] & x <= cut[(i + 1)])] <- i return(out)} ## The hierarchy of sample aggregation levsm <- with(mite.xy, data.frame( l1=1:nrow(mite), l2=cutter(y, cut = seq(0, 10, by = 2.5)), l3=cutter(y, cut = seq(0, 10, by = 5)), l4=cutter(y, cut = seq(0, 10, by = 10)))) ## Multiplicative diversity partitioning multipart(mite, levsm, index="renyi", scales=1, nsimul=19) multipart(mite ~ ., levsm, index="renyi", scales=1, nsimul=19) multipart(mite ~ ., levsm, index="renyi", scales=1, nsimul=19, relative=TRUE) multipart(mite ~ ., levsm, index="renyi", scales=1, nsimul=19, global=TRUE) } \keyword{multivariate} vegan/man/anosim.Rd0000644000176200001440000001264513231354436013716 0ustar liggesusers\name{anosim} \alias{anosim} \alias{summary.anosim} \alias{plot.anosim} \title{ Analysis of Similarities } \description{ Analysis of similarities (ANOSIM) provides a way to test statistically whether there is a significant difference between two or more groups of sampling units. } \usage{ anosim(dat, grouping, permutations = 999, distance = "bray", strata = NULL, parallel = getOption("mc.cores")) } \arguments{ \item{dat}{Data matrix or data frame in which rows are samples and columns are response variable(s), or a dissimilarity object or a symmetric square matrix of dissimilarities.} \item{grouping}{Factor for grouping observations.} \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.} \item{distance}{Choice of distance metric that measures the dissimilarity between two observations. See \code{\link{vegdist}} for options. This will be used if \code{dat} was not a dissimilarity structure or a symmetric square matrix.} \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} \item{parallel}{Number of parallel processes or a predefined socket cluster. With \code{parallel = 1} uses ordinary, non-parallel processing. The parallel processing is done with \pkg{parallel} package.} } \details{ Analysis of similarities (ANOSIM) provides a way to test statistically whether there is a significant difference between two or more groups of sampling units. Function \code{anosim} operates directly on a dissimilarity matrix. A suitable dissimilarity matrix is produced by functions \code{\link{dist}} or \code{\link{vegdist}}. The method is philosophically allied with NMDS ordination (\code{\link{monoMDS}}), in that it uses only the rank order of dissimilarity values. If two groups of sampling units are really different in their species composition, then compositional dissimilarities between the groups ought to be greater than those within the groups. The \code{anosim} statistic \eqn{R} is based on the difference of mean ranks between groups (\eqn{r_B}) and within groups (\eqn{r_W}): \deqn{R = (r_B - r_W)/(N (N-1) / 4)} The divisor is chosen so that \eqn{R} will be in the interval \eqn{-1 \dots +1}, value \eqn{0} indicating completely random grouping. The statistical significance of observed \eqn{R} is assessed by permuting the grouping vector to obtain the empirical distribution of \eqn{R} under null-model. See \code{\link{permutations}} for additional details on permutation tests in Vegan. The distribution of simulated values can be inspected with the \code{\link{permustats}} function. The function has \code{summary} and \code{plot} methods. These both show valuable information to assess the validity of the method: The function assumes that all ranked dissimilarities within groups have about equal median and range. The \code{plot} method uses \code{\link{boxplot}} with options \code{notch=TRUE} and \code{varwidth=TRUE}. } \value{ The function returns a list of class \code{"anosim"} with following items: \item{call }{Function call.} \item{statistic}{The value of ANOSIM statistic \eqn{R}} \item{signif}{Significance from permutation.} \item{perm}{Permutation values of \eqn{R}. The distribution of permutation values can be inspected with function \code{\link{permustats}}.} \item{class.vec}{Factor with value \code{Between} for dissimilarities between classes and class name for corresponding dissimilarity within class.} \item{dis.rank}{Rank of dissimilarity entry.} \item{dissimilarity}{The name of the dissimilarity index: the \code{"method"} entry of the \code{dist} object.} \item{control}{A list of control values for the permutations as returned by the function \code{\link[permute]{how}}.} } \references{ Clarke, K. R. (1993). Non-parametric multivariate analysis of changes in community structure. \emph{Australian Journal of Ecology} 18, 117--143. Warton, D.I., Wright, T.W., Wang, Y. 2012. Distance-based multivariate analyses confound location and dispersion effects. \emph{Methods in Ecology and Evolution}, 3, 89--101 } \author{Jari Oksanen, with a help from Peter R. Minchin.} \note{ The \code{anosim} function can confound the differences between groups and dispersion within groups and the results can be difficult to interpret (cf. Warton et al. 2012). The function returns a lot of information to ease studying its performance. Most \code{anosim} models could be analysed with \code{\link{adonis2}} which seems to be a more robust alternative. } \seealso{\code{\link{mrpp}} for a similar function using original dissimilarities instead of their ranks. \code{\link{dist}} and \code{\link{vegdist}} for obtaining dissimilarities, and \code{\link{rank}} for ranking real values. For comparing dissimilarities against continuous variables, see \code{\link{mantel}}. Function \code{\link{adonis2}} is a more robust alternative that should preferred. } \examples{ data(dune) data(dune.env) dune.dist <- vegdist(dune) dune.ano <- with(dune.env, anosim(dune.dist, Management)) summary(dune.ano) plot(dune.ano) } \keyword{multivariate } \keyword{ nonparametric } \keyword{ htest } vegan/man/fisherfit.Rd0000644000176200001440000002051612626316320014404 0ustar liggesusers\name{fisherfit} \alias{fisherfit} \alias{as.fisher} \alias{plot.fisherfit} \alias{prestonfit} \alias{prestondistr} \alias{as.preston} \alias{plot.prestonfit} \alias{lines.prestonfit} \alias{plot.preston} \alias{lines.preston} \alias{plot.fisher} \alias{veiledspec} \title{Fit Fisher's Logseries and Preston's Lognormal Model to Abundance Data} \description{ Function \code{fisherfit} fits Fisher's logseries to abundance data. Function \code{prestonfit} groups species frequencies into doubling octave classes and fits Preston's lognormal model, and function \code{prestondistr} fits the truncated lognormal model without pooling the data into octaves. } \usage{ fisherfit(x, ...) prestonfit(x, tiesplit = TRUE, ...) prestondistr(x, truncate = -1, ...) \method{plot}{prestonfit}(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", line.col = "red", lwd = 2, ...) \method{lines}{prestonfit}(x, line.col = "red", lwd = 2, ...) veiledspec(x, ...) as.fisher(x, ...) \method{plot}{fisher}(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", kind = c("bar", "hiplot", "points", "lines"), add = FALSE, ...) as.preston(x, tiesplit = TRUE, ...) \method{plot}{preston}(x, xlab = "Frequency", ylab = "Species", bar.col = "skyblue", ...) \method{lines}{preston}(x, xadjust = 0.5, ...) } \arguments{ \item{x}{Community data vector for fitting functions or their result object for \code{plot} functions.} \item{tiesplit}{Split frequencies \eqn{1, 2, 4, 8} etc between adjacent octaves.} \item{truncate}{Truncation point for log-Normal model, in log2 units. Default value \eqn{-1} corresponds to the left border of zero Octave. The choice strongly influences the fitting results.} \item{xlab, ylab}{Labels for \code{x} and \code{y} axes.} \item{bar.col}{Colour of data bars.} \item{line.col}{Colour of fitted line.} \item{lwd}{Width of fitted line.} \item{kind}{Kind of plot to drawn: \code{"bar"} is similar bar plot as in \code{plot.fisherfit}, \code{"hiplot"} draws vertical lines as with \command{plot(..., type="h")}, and \code{"points"} and \code{"lines"} are obvious.} \item{add}{Add to an existing plot.} \item{xadjust}{Adjustment of horizontal positions in octaves.} \item{\dots}{Other parameters passed to functions. Ignored in \code{prestonfit} and \code{tiesplit} passed to \code{as.preston} in \code{prestondistr}. } } \details{ In Fisher's logarithmic series the expected number of species \eqn{f} with \eqn{n} observed individuals is \eqn{f_n = \alpha x^n / n} (Fisher et al. 1943). The estimation is possible only for genuine counts of individuals. The parameter \eqn{\alpha} is used as a diversity index, and \eqn{\alpha} and its standard error can be estimated with a separate function \code{\link{fisher.alpha}}. The parameter \eqn{x} is taken as a nuisance parameter which is not estimated separately but taken to be \eqn{n/(n+\alpha)}. Helper function \code{as.fisher} transforms abundance data into Fisher frequency table. Preston (1948) was not satisfied with Fisher's model which seemed to imply infinite species richness, and postulated that rare species is a diminishing class and most species are in the middle of frequency scale. This was achieved by collapsing higher frequency classes into wider and wider ``octaves'' of doubling class limits: 1, 2, 3--4, 5--8, 9--16 etc. occurrences. It seems that Preston regarded frequencies 1, 2, 4, \emph{etc.}. as \dQuote{tied} between octaves (Williamson & Gaston 2005). This means that only half of the species with frequency 1 are shown in the lowest octave, and the rest are transferred to the second octave. Half of the species from the second octave are transferred to the higher one as well, but this is usually not as large a number of species. This practise makes data look more lognormal by reducing the usually high lowest octaves. This can be achieved by setting argument \code{tiesplit = TRUE}. With \code{tiesplit = FALSE} the frequencies are not split, but all ones are in the lowest octave, all twos in the second, etc. Williamson & Gaston (2005) discuss alternative definitions in detail, and they should be consulted for a critical review of log-Normal model. Any logseries data will look like lognormal when plotted in Preston's way. The expected frequency \eqn{f} at abundance octave \eqn{o} is defined by \eqn{f_o = S_0 \exp(-(\log_2(o) - \mu)^2/2/\sigma^2)}{f = S0 exp(-(log2(o)-mu)^2/2/sigma^2)}, where \eqn{\mu} is the location of the mode and \eqn{\sigma} the width, both in \eqn{\log_2}{log2} scale, and \eqn{S_0}{S0} is the expected number of species at mode. The lognormal model is usually truncated on the left so that some rare species are not observed. Function \code{prestonfit} fits the truncated lognormal model as a second degree log-polynomial to the octave pooled data using Poisson (when \code{tiesplit = FALSE}) or quasi-Poisson (when \code{tiesplit = TRUE}) error. Function \code{prestondistr} fits left-truncated Normal distribution to \eqn{\log_2}{log2} transformed non-pooled observations with direct maximization of log-likelihood. Function \code{prestondistr} is modelled after function \code{\link[MASS]{fitdistr}} which can be used for alternative distribution models. The functions have common \code{print}, \code{plot} and \code{lines} methods. The \code{lines} function adds the fitted curve to the octave range with line segments showing the location of the mode and the width (sd) of the response. Function \code{as.preston} transforms abundance data to octaves. Argument \code{tiesplit} will not influence the fit in \code{prestondistr}, but it will influence the barplot of the octaves. The total extrapolated richness from a fitted Preston model can be found with function \code{veiledspec}. The function accepts results both from \code{prestonfit} and from \code{prestondistr}. If \code{veiledspec} is called with a species count vector, it will internally use \code{prestonfit}. Function \code{\link{specpool}} provides alternative ways of estimating the number of unseen species. In fact, Preston's lognormal model seems to be truncated at both ends, and this may be the main reason why its result differ from lognormal models fitted in Rank--Abundance diagrams with functions \code{\link{rad.lognormal}}. } \value{ The function \code{prestonfit} returns an object with fitted \code{coefficients}, and with observed (\code{freq}) and fitted (\code{fitted}) frequencies, and a string describing the fitting \code{method}. Function \code{prestondistr} omits the entry \code{fitted}. The function \code{fisherfit} returns the result of \code{\link{nlm}}, where item \code{estimate} is \eqn{\alpha}. The result object is amended with the \code{nuisance} parameter and item \code{fisher} for the observed data from \code{as.fisher} } \references{ Fisher, R.A., Corbet, A.S. & Williams, C.B. (1943). The relation between the number of species and the number of individuals in a random sample of animal population. \emph{Journal of Animal Ecology} 12: 42--58. Preston, F.W. (1948) The commonness and rarity of species. \emph{Ecology} 29, 254--283. Williamson, M. & Gaston, K.J. (2005). The lognormal distribution is not an appropriate null hypothesis for the species--abundance distribution. \emph{Journal of Animal Ecology} 74, 409--422. } \author{Bob O'Hara and Jari Oksanen. } \seealso{\code{\link{diversity}}, \code{\link{fisher.alpha}}, \code{\link{radfit}}, \code{\link{specpool}}. Function \code{\link[MASS]{fitdistr}} of \pkg{MASS} package was used as the model for \code{prestondistr}. Function \code{\link{density}} can be used for smoothed ``non-parametric'' estimation of responses, and \code{\link{qqplot}} is an alternative, traditional and more effective way of studying concordance of observed abundances to any distribution model. } \examples{ data(BCI) mod <- fisherfit(BCI[5,]) mod # prestonfit seems to need large samples mod.oct <- prestonfit(colSums(BCI)) mod.ll <- prestondistr(colSums(BCI)) mod.oct mod.ll plot(mod.oct) lines(mod.ll, line.col="blue3") # Different ## Smoothed density den <- density(log2(colSums(BCI))) lines(den$x, ncol(BCI)*den$y, lwd=2) # Fairly similar to mod.oct ## Extrapolated richness veiledspec(mod.oct) veiledspec(mod.ll) } \keyword{ univar } \keyword{ distribution } vegan/man/orditkplot.Rd0000644000176200001440000002023713156750403014617 0ustar liggesusers\name{orditkplot} \alias{orditkplot} \alias{plot.orditkplot} \alias{scores.orditkplot} \alias{points.orditkplot} \alias{text.orditkplot} \title{ Ordination Plot with Movable Labels } \description{ Function \code{orditkplot} produces an editable ordination plot with points and labels. The labels can be moved with mouse, and the edited plot can be saved as an encapsulated postscript file or exported via \R \code{plot} function to other graphical formats, or saved in the \R session for further processing. } \usage{ orditkplot(x, display = "species", choices = 1:2, width, xlim, ylim, tcex = 0.8, tcol, pch = 1, pcol, pbg, pcex = 0.7, labels, ...) \method{plot}{orditkplot}(x, ...) \method{points}{orditkplot}(x, pch = x$args$pch, cex = x$args$pcex, col = x$args$pcol, bg = x$args$pbg, ...) \method{text}{orditkplot}(x, cex = x$args$tcex, col = x$args$tcol, font = attr(x$labels, "font"), ...) \method{scores}{orditkplot}(x, display, ...) } \arguments{ \item{x}{An ordination result or any other object that \code{\link{scores}} can handle, or for the \code{plot} function the object dumped from the interactive \code{orditkplot} session.} \item{display}{Type of \code{\link{scores}} displayed. For ordination scores this typically is either \code{"species"} or \code{"sites"}, and for \code{orditkplot} result it is either \code{"points"} or \code{"labels"}.} \item{choices}{Axes displayed.} \item{width}{Width of the plot in inches; defaults to the current width of the graphical device. } \item{xlim, ylim}{x and y limits for plots: points outside these limits will be completely removed.} \item{tcex}{Character expansion for text labels.} \item{tcol}{Colour of text labels.} \item{pch, pcol, pbg}{Point type and outline and fill colours. Defaults \code{pcol="black"} and \code{pbg="transparent"}. Argument \code{pbg} has an effect only in filled plotting characters \code{pch = 21} to \code{25}.} \item{pcex}{Expansion factor for point size.} \item{labels}{Labels used instead of row names.} \item{cex, col, bg, font}{graphical parameters used in the \code{points} and \code{text} methods. See \code{\link{par}}.} \item{\dots}{Other arguments passed to the function. These can be graphical parameters (see \code{\link{par}}) used in the plot, or extra arguments to \code{\link{scores}}. These arguments are ignored in \code{plot}, but honoured in \code{text} and \code{points}. } } \details{ Function \code{orditkplot} uses \pkg{tcltk} package to draw Tcl/Tk based ordination graphics with points and labels. The function opens an editable canvas with fixed points, but the labels can be dragged with mouse to better positions or edited. In addition, it is possible to zoom to a part of the graph. The function knows the following mouse operations: \itemize{ \item \strong{Left mouse button} can be used to move labels to better positions. A line will connect a label to the corresponding point. \item \strong{Double clicking left mouse button} opens a window where the label can be edited. After editing the label, hit the Return key. \item \strong{Right mouse button} (or alternatively, Shift-Mouse button with one-button mouse) can be used for zooming to a part of the graph. Keeping the mouse button down and dragging will draw a box of the zoomed area, and after releasing the button, a new plot window will be created (this is still preliminary: all arguments are not passed to the new plot). } In addition there are buttons for the following tasks: \strong{Copy to EPS} copies the current plot to an encapsulated postscript (eps) file using standard Tcl/Tk utilities. The faithfulness of this copy is system dependent. Button \strong{Export plot} uses \code{plot.orditkplot} function to redraw the plot into graphical file formats. Depending on the system, the following graphical formats may be available: eps, pdf, svg, png, jpeg, tiff, bmp or xfig. Some of the output formats may be edited with external software: svg files with Illustrator or Inkscape, and xfig with the legacy program XFig. Button \strong{Save to R} writes the edited coordinates of labels and points to the \R session for further processing, and the \code{plot.orditkplot} function can be used to display the results. For faithful replication of the plot, the graph must have similar dimensions as the \code{orditkplot} canvas had originally. The \code{plot} function cannot be configured, but it uses the same settings as the original Tcl/Tk plot. However, \code{points} and \code{text} functions are fully configurable, but use the stored defaults for consistency with \code{plot.orditkplot} if none are supplied. Finally, button \strong{Close} closes the window. The produced plot will have equal aspect ratio. The width of the horizontal axis is fixed, but vertical axes will be scaled to needed height, and you can use scrollbar to move vertically if the whole canvas does not fit the window. If you use dumped labels in ordinary \R plots, your plot must have the same dimensions as the \code{orditkplot} canvas to have identical location of the labels. The function only displays one set of scores. However, you can use \code{\link{ordipointlabel}} to produce a result object that has different points and text types for several sets of scores and this can be further edited with \code{orditkplot}. For a good starting solution you need to scale the \code{\link{ordipointlabel}} result so that the points span over the whole horizontal axis. The function cannot show environmental variables or constraints, but it is limited to unconstrained ordination. The plot is a Tcl/Tk canvas, but the function tries to replicate standard graphical device of the platform, and it honours several graphical parameters (see \code{\link{par}}). Many of the graphical parameters can be given on the command line, and they will be passed to the function without influencing other graphical devices in \R. At the moment, the following graphical parameters are honoured: \code{pch} \code{bg}, \code{cex}, \code{cex.axis}, \code{cex.lab}, \code{col} (for labels), \code{col.axis}, \code{col.lab}, \code{family} (for font faces), \code{fg}, \code{font}, \code{font.axis}, \code{font.lab}, \code{lheight}, \code{lwd} (for the box), \code{mar}, \code{mex}, \code{mgp}, \code{ps}, \code{tcl}. These can be set with \code{\link{par}}, and they also will influence other plots similarly. The \code{\link[tcltk]{tkcanvas}} text cannot be rotated, and therefore vertical axis is not labelled, and \code{las} \code{\link{par}}ameter will not be honoured in the Tcl/Tk plot, but it will be honoured in the exported \R plots and in \code{plot.orditkplot}. } \value{ Function returns nothing useful directly, but you can save the edited graph to a file or save the edited positions to an \R session for further processing and plotting. } \author{ Jari Oksanen } \note{ You need \pkg{tcltk} package and \R must have been configured with \code{\link{capabilities}} for \code{tcltk}. Depending on your OS, you may need to start X11 and set the display before loading \pkg{tcltk} and starting the function (for instance, with \code{Sys.setenv("DISPLAY"=":0")}). See \code{\link[tcltk]{tcltk-package}}. } \seealso{ Function \code{\link{ordipointlabel}} is an automatic procedure with similar goals of avoiding overplotting, and its output can be edited with \code{orditkplot}. See \code{\link{ordiplot}}, \code{\link{plot.cca}}, \code{\link[vegan3d]{ordirgl}} and \code{\link{orditorp}} for alternative ordination plots, and \code{\link{scores}} for extracting ordination scores. } \examples{ ## The example needs user interaction and is not executed directly. ## It should work when pasted to the window. \dontrun{ data(varespec) ord <- cca(varespec) ## Do something with the graph and end by clicking "Dismiss" orditkplot(ord, mar = c(4,4,1,1)+.1, font=3) ## Use ordipointlabel to produce a plot that has both species and site ## scores in different colors and plotting symbols pl <- ordipointlabel(ord) orditkplot(pl) } } \keyword{ iplot } \keyword{ dynamic } vegan/man/screeplot.cca.Rd0000644000176200001440000001213312626316320015142 0ustar liggesusers\name{screeplot.cca} \alias{screeplot.cca} \alias{screeplot.princomp} \alias{screeplot.prcomp} \alias{screeplot.decorana} \alias{bstick} \alias{bstick.default} \alias{bstick.cca} \alias{bstick.prcomp} \alias{bstick.princomp} \alias{bstick.decorana} \title{Screeplots for Ordination Results and Broken Stick Distributions} \description{ Screeplot methods for plotting variances of ordination axes/components and overlaying broken stick distributions. Also, provides alternative screeplot methods for \code{\link{princomp}} and \code{\link{prcomp}}. } \usage{ \method{screeplot}{cca}(x, bstick = FALSE, type = c("barplot", "lines"), npcs = min(10, if (is.null(x$CCA) || x$CCA$rank == 0) x$CA$rank else x$CCA$rank), ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), legend = bstick, \dots) \method{screeplot}{decorana}(x, bstick = FALSE, type = c("barplot", "lines"), npcs = 4, ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), \dots) \method{screeplot}{prcomp}(x, bstick = FALSE, type = c("barplot", "lines"), npcs = min(10, length(x$sdev)), ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), legend = bstick, \dots) \method{screeplot}{princomp}(x, bstick = FALSE, type = c("barplot", "lines"), npcs = min(10, length(x$sdev)), ptype = "o", bst.col = "red", bst.lty = "solid", xlab = "Component", ylab = "Inertia", main = deparse(substitute(x)), legend = bstick, \dots) bstick(n, \dots) \method{bstick}{default}(n, tot.var = 1, \dots) \method{bstick}{cca}(n, \dots) \method{bstick}{prcomp}(n, \dots) \method{bstick}{princomp}(n, \dots) \method{bstick}{decorana}(n, \dots) } \arguments{ \item{x}{an object from which the component variances can be determined.} \item{bstick}{logical; should the broken stick distribution be drawn?} \item{npcs}{the number of components to be plotted.} \item{type}{the type of plot.} \item{ptype}{if \code{type == "lines"} or \code{bstick = TRUE}, a character indicating the type of plotting used for the lines; actually any of the \code{type}s as in \code{\link{plot.default}}.} \item{bst.col, bst.lty}{the colour and line type used to draw the broken stick distribution.} \item{xlab, ylab, main}{graphics parameters.} \item{legend}{logical; draw a legend?} \item{n}{an object from which the variances can be extracted or the number of variances (components) in the case of \code{bstick.default}.} \item{tot.var}{the total variance to be split.} \item{\dots}{arguments passed to other methods.} } \details{ The functions provide screeplots for most ordination methods in \pkg{vegan} and enhanced versions with broken stick for \code{\link{prcomp}} and \code{\link{princomp}}. Function \code{bstick} gives the brokenstick values which are ordered random proportions, defined as \eqn{p_i = (tot/n) \sum_{x=i}^n (1/x)}{p[i] = tot/n sum(from x=i to n) 1/x} (Legendre & Legendre 2012), where \eqn{tot} is the total and \eqn{n} is the number of brokenstick components (cf. \code{\link{radfit}}). Broken stick has been recommended as a stopping rule in principal component analysis (Jackson 1993): principal components should be retained as long as observed eigenvalues are higher than corresponding random broken stick components. The \code{bstick} function is generic. The default needs the number of components and the total, and specific methods extract this information from ordination results. There also is a \code{bstick} method for \code{\link{cca}}. However, the broken stick model is not strictly valid for correspondence analysis (CA), because eigenvalues of CA are defined to be \eqn{\leq 1}{<=1}, whereas brokenstick components have no such restrictions. The brokenstick components are not available for \code{\link{decorana}} where the sum of eigenvalues (total inertia) is unknown, and the eigenvalues of single axes are not additive in detrended analysis. } \value{ Function \code{screeplot} draws a plot on the currently active device, and returns invisibly the \code{\link{xy.coords}} of the points or bars for the eigenvalues. Function \code{bstick} returns a numeric vector of broken stick components. } \references{ Jackson, D. A. (1993). Stopping rules in principal components analysis: a comparison of heuristical and statistical approaches. \emph{Ecology} 74, 2204--2214. Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English ed. Elsevier. } \author{Gavin L. Simpson} \seealso{ \code{\link{cca}}, \code{\link{decorana}}, \code{\link{princomp}} and \code{\link{prcomp}} for the ordination functions, and \code{\link{screeplot}} for the stock version. } \examples{ data(varespec) vare.pca <- rda(varespec, scale = TRUE) bstick(vare.pca) screeplot(vare.pca, bstick = TRUE, type = "lines") } \keyword{multivariate} vegan/man/mrpp.Rd0000644000176200001440000002447513156750403013412 0ustar liggesusers\name{mrpp} \alias{mrpp} \alias{meandist} \alias{summary.meandist} \alias{plot.meandist} \title{Multi Response Permutation Procedure and Mean Dissimilarity Matrix} \description{ Multiple Response Permutation Procedure (MRPP) provides a test of whether there is a significant difference between two or more groups of sampling units. Function \code{meandist} finds the mean within and between block dissimilarities.} \usage{ mrpp(dat, grouping, permutations = 999, distance = "euclidean", weight.type = 1, strata = NULL, parallel = getOption("mc.cores")) meandist(dist, grouping, ...) \method{summary}{meandist}(object, ...) \method{plot}{meandist}(x, kind = c("dendrogram", "histogram"), cluster = "average", ylim, axes = TRUE, ...) } \arguments{ \item{dat}{data matrix or data frame in which rows are samples and columns are response variable(s), or a dissimilarity object or a symmetric square matrix of dissimilarities.} \item{grouping}{ Factor or numeric index for grouping observations.} \item{permutations}{a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or the number of permutations required, or a permutation matrix where each row gives the permuted indices. These are used to assess the significance of the MRPP statistic, \eqn{delta}.} \item{distance}{Choice of distance metric that measures the dissimilarity between two observations . See \code{\link{vegdist}} for options. This will be used if \code{dat} was not a dissimilarity structure of a symmetric square matrix.} \item{weight.type}{ choice of group weights. See Details below for options.} \item{strata}{An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.} \item{parallel}{Number of parallel processes or a predefined socket cluster. With \code{parallel = 1} uses ordinary, non-parallel processing. The parallel processing is done with \pkg{parallel} package.} \item{dist}{A \code{\link{dist}} object of dissimilarities, such as produced by functions \code{\link{dist}}, \code{\link{vegdist}} or \code{\link{designdist}}.}. \item{object, x}{A \code{meandist} result object.} \item{kind}{Draw a dendrogram or a histogram; see Details.} \item{cluster}{A clustering method for the \code{\link{hclust}} function for \code{kind = "dendrogram"}. Any \code{hclust} method can be used, but perhaps only \code{"average"} and \code{"single"} make sense.} \item{ylim}{Limits for vertical axes (optional).} \item{axes}{Draw scale for the vertical axis.} \item{\dots}{Further arguments passed to functions.} } \details{ Multiple Response Permutation Procedure (MRPP) provides a test of whether there is a significant difference between two or more groups of sampling units. This difference may be one of location (differences in mean) or one of spread (differences in within-group distance; cf. Warton et al. 2012). Function \code{mrpp} operates on a \code{data.frame} matrix where rows are observations and responses data matrix. The response(s) may be uni- or multivariate. The method is philosophically and mathematically allied with analysis of variance, in that it compares dissimilarities within and among groups. If two groups of sampling units are really different (e.g. in their species composition), then average of the within-group compositional dissimilarities ought to be less than the average of the dissimilarities between two random collection of sampling units drawn from the entire population. The mrpp statistic \eqn{\delta} is the overall weighted mean of within-group means of the pairwise dissimilarities among sampling units. The choice of group weights is currently not clear. The \code{mrpp} function offers three choices: (1) group size (\eqn{n}), (2) a degrees-of-freedom analogue (\eqn{n-1}), and (3) a weight that is the number of unique distances calculated among \eqn{n} sampling units (\eqn{n(n-1)/2}). The \code{mrpp} algorithm first calculates all pairwise distances in the entire dataset, then calculates \eqn{\delta}. It then permutes the sampling units and their associated pairwise distances, and recalculates \eqn{\delta} based on the permuted data. It repeats the permutation step \code{permutations} times. The significance test is the fraction of permuted deltas that are less than the observed delta, with a small sample correction. The function also calculates the change-corrected within-group agreement \eqn{A = 1 -\delta/E(\delta)}, where \eqn{E(\delta)} is the expected \eqn{\delta} assessed as the average of dissimilarities. If the first argument \code{dat} can be interpreted as dissimilarities, they will be used directly. In other cases the function treats \code{dat} as observations, and uses \code{\link{vegdist}} to find the dissimilarities. The default \code{distance} is Euclidean as in the traditional use of the method, but other dissimilarities in \code{\link{vegdist}} also are available. Function \code{meandist} calculates a matrix of mean within-cluster dissimilarities (diagonal) and between-cluster dissimilarities (off-diagonal elements), and an attribute \code{n} of \code{grouping} counts. Function \code{summary} finds the within-class, between-class and overall means of these dissimilarities, and the MRPP statistics with all \code{weight.type} options and the Classification Strength, CS (Van Sickle and Hughes, 2000). CS is defined for dissimilarities as \eqn{\bar{B} - \bar{W}}{Bbar-Wbar}, where \eqn{\bar{B}}{Bbar} is the mean between cluster dissimilarity and \eqn{\bar{W}}{Wbar} is the mean within cluster dissimilarity with \code{weight.type = 1}. The function does not perform significance tests for these statistics, but you must use \code{mrpp} with appropriate \code{weight.type}. There is currently no significance test for CS, but \code{mrpp} with \code{weight.type = 1} gives the correct test for \eqn{\bar{W}}{Wbar} and a good approximation for CS. Function \code{plot} draws a dendrogram or a histogram of the result matrix based on the within-group and between group dissimilarities. The dendrogram is found with the method given in the \code{cluster} argument using function \code{\link{hclust}}. The terminal segments hang to within-cluster dissimilarity. If some of the clusters are more heterogeneous than the combined class, the leaf segment are reversed. The histograms are based on dissimilarities, but ore otherwise similar to those of Van Sickle and Hughes (2000): horizontal line is drawn at the level of mean between-cluster dissimilarity and vertical lines connect within-cluster dissimilarities to this line. } \value{ The function returns a list of class mrpp with following items: \item{call }{ Function call.} \item{delta }{The overall weighted mean of group mean distances.} \item{E.delta}{expected delta, under the null hypothesis of no group structure. This is the mean of original dissimilarities.} \item{CS}{Classification strength (Van Sickle and Hughes, 2000). Currently not implemented and always \code{NA}.} \item{n}{Number of observations in each class.} \item{classdelta}{Mean dissimilarities within classes. The overall \eqn{\delta} is the weighted average of these values with given \code{weight.type}}. \item{Pvalue}{Significance of the test.} \item{A}{A chance-corrected estimate of the proportion of the distances explained by group identity; a value analogous to a coefficient of determination in a linear model.} \item{distance}{Choice of distance metric used; the "method" entry of the dist object.} \item{weight.type}{The choice of group weights used.} \item{boot.deltas}{The vector of "permuted deltas," the deltas calculated from each of the permuted datasets. The distribution of this item can be inspected with \code{\link{permustats}} function.} \item{permutations}{The number of permutations used.} \item{control}{A list of control values for the permutations as returned by the function \code{\link[permute]{how}}.} } \references{ B. McCune and J. B. Grace. 2002. \emph{Analysis of Ecological Communities.} MjM Software Design, Gleneden Beach, Oregon, USA. P. W. Mielke and K. J. Berry. 2001. \emph{Permutation Methods: A Distance Function Approach.} Springer Series in Statistics. Springer. J. Van Sickle and R. M. Hughes 2000. Classification strengths of ecoregions, catchments, and geographic clusters of aquatic vertebrates in Oregon. \emph{J. N. Am. Benthol. Soc.} 19:370--384. Warton, D.I., Wright, T.W., Wang, Y. 2012. Distance-based multivariate analyses confound location and dispersion effects. \emph{Methods in Ecology and Evolution}, 3, 89--101 } \author{ M. Henry H. Stevens \email{HStevens@muohio.edu} and Jari Oksanen. } \note{ This difference may be one of location (differences in mean) or one of spread (differences in within-group distance). That is, it may find a significant difference between two groups simply because one of those groups has a greater dissimilarities among its sampling units. Most \code{mrpp} models can be analysed with \code{\link{adonis2}} which seems not suffer from the same problems as \code{mrpp} and is a more robust alternative. } \seealso{ \code{\link{anosim}} for a similar test based on ranks, and \code{\link{mantel}} for comparing dissimilarities against continuous variables, and \code{\link{vegdist}} for obtaining dissimilarities, \code{\link{adonis2}} is a more robust alternative in most cases. } \examples{ data(dune) data(dune.env) dune.mrpp <- with(dune.env, mrpp(dune, Management)) dune.mrpp # Save and change plotting parameters def.par <- par(no.readonly = TRUE) layout(matrix(1:2,nr=1)) plot(dune.ord <- metaMDS(dune), type="text", display="sites" ) with(dune.env, ordihull(dune.ord, Management)) with(dune.mrpp, { fig.dist <- hist(boot.deltas, xlim=range(c(delta,boot.deltas)), main="Test of Differences Among Groups") abline(v=delta); text(delta, 2*mean(fig.dist$counts), adj = -0.5, expression(bold(delta)), cex=1.5 ) } ) par(def.par) ## meandist dune.md <- with(dune.env, meandist(vegdist(dune), Management)) dune.md summary(dune.md) plot(dune.md) plot(dune.md, kind="histogram") } \keyword{ multivariate } \keyword{ nonparametric } \keyword{htest} vegan/man/varpart.Rd0000644000176200001440000003700713156750403014106 0ustar liggesusers\name{varpart} \alias{varpart} \alias{varpart2} \alias{varpart3} \alias{varpart4} \alias{showvarparts} \alias{plot.varpart} \alias{plot.varpart234} \alias{simpleRDA2} \alias{simpleDBRDA} \title{Partition the Variation of Community Matrix by 2, 3, or 4 Explanatory Matrices } \description{ The function partitions the variation in community data or community dissimilarities with respect to two, three, or four explanatory tables, using adjusted \eqn{R^2}{R-squared} in redundancy analysis ordination (RDA) or distance-based redundancy analysis. If response is a single vector, partitioning is by partial regression. Collinear variables in the explanatory tables do NOT have to be removed prior to partitioning. } \usage{ varpart(Y, X, ..., data, transfo, scale = FALSE, add = FALSE, sqrt.dist = FALSE) showvarparts(parts, labels, bg = NULL, alpha = 63, Xnames, id.size = 1.2, ...) \method{plot}{varpart234}(x, cutoff = 0, digits = 1, ...) } \arguments{ \item{Y}{ Data frame or matrix containing the response data table or dissimilarity structure inheriting from \code{\link{dist}}. In community ecology, that table is often a site-by-species table or a dissimilarity object. } \item{X}{Two to four explanatory models, variables or tables. These can be defined in three alternative ways: (1) one-sided model formulae beginning with \code{~} and then defining the model, (2) name of a single numeric variable, or (3) name of data frame or matrix with numeric variables. The model formulae can have factors, interaction terms and transformations of variables. The names of the variables in the model formula are found in data frame given in \code{data} argument, and if not found there, in the user environment. Single numeric variables, data frames or matrices are found in the user environment. All entries till the next argument (\code{data} or \code{transfo}) are interpreted as explanatory models, and the names of these arguments cannot be abbreviated nor omitted. } \item{data}{The data frame with the variables used in the formulae in \code{X}.} \item{transfo}{ Transformation for \code{Y} (community data) using \code{\link{decostand}}. All alternatives in \code{decostand} can be used, and those preserving Euclidean metric include \code{"hellinger"}, \code{"chi.square"}, \code{"total"}, \code{"norm"}. Ignored if \code{Y} are dissimilarities.} \item{scale}{Should the columns of \code{Y} be standardized to unit variance. Ignored if \code{Y} are dissimilarities.} \item{add}{Add a constant to the non-diagonal values to euclidify dissimilarities (see \code{\link{wcmdscale}} for details). Choice \code{"lingoes"} (or \code{TRUE}) use the recommended method of Legendre & Anderson (1999: \dQuote{method 1}) and \code{"cailliez"} uses their \dQuote{method 2}. The argument has an effect only when \code{Y} are dissimilarities.} \item{sqrt.dist}{Take square root of dissimilarities. This often euclidifies dissimilarities. NB., the argument name cannot be abbreviated. The argument has an effect only when \code{Y} are dissimilarities.} \item{parts}{Number of explanatory tables (circles) displayed.} \item{labels}{Labels used for displayed fractions. Default is to use the same letters as in the printed output.} \item{bg}{Fill colours of circles or ellipses.} \item{alpha}{Transparency of the fill colour. The argument takes precedence over possible transparency definitions of the colour. The value must be in range \eqn{0...255}, and low values are more transparent. Transparency is not available in all graphics devices or file formats.} \item{Xnames}{Names for sources of variation. Default names are \code{X1}, \code{X2}, \code{X3} and \code{X4}. \code{Xnames=NA}, \code{Xnames=NULL} and \code{Xnames=""} produce no names. The names can be changed to other names. Use short names. } \item{id.size}{A numerical value giving the character expansion factor for the names of circles or ellipses. } \item{x}{The \code{varpart} result.} \item{cutoff}{The values below \code{cutoff} will not be displayed.} \item{digits}{The number of significant digits; the number of decimal places is at least one higher.} \item{...}{Other parameters passed to functions. NB, arguments after dots cannot be abbreviated but they must be spelt out completely.} } \details{ The functions partition the variation in \code{Y} into components accounted for by two to four explanatory tables and their combined effects. If \code{Y} is a multicolumn data frame or matrix, the partitioning is based on redundancy analysis (RDA, see \code{\link{rda}}), and if \code{Y} is a single variable, the partitioning is based on linear regression. If \code{Y} are dissimilarities, the decomposition is based on distance-based redundancy analysis (db-RDA, see \code{\link{capscale}}) following McArdle & Anderson (2001). The input dissimilarities must be compatible to the results of \code{\link{dist}}. \pkg{Vegan} functions \code{\link{vegdist}}, \code{\link{designdist}}, \code{\link{raupcrick}} and \code{\link{betadiver}} produce such objects, as do many other dissimilarity functions in \R packages. However, symmetric square matrices are not recognized as dissimilarities but must be transformed with \code{\link{as.dist}}. Partitioning will be made to squared dissimilarities analogously to using variance with rectangular data -- unless \code{sqrt.dist = TRUE} was specified. The function primarily uses adjusted \eqn{R^2}{R-squared} to assess the partitions explained by the explanatory tables and their combinations, because this is the only unbiased method (Peres-Neto et al., 2006). The raw \eqn{R^2}{R-squared} for basic fractions are also displayed, but these are biased estimates of variation explained by the explanatory table. The identifiable fractions are designated by lower case alphabets. The meaning of the symbols can be found in the separate document (use \code{browseVignettes("vegan")}), or can be displayed graphically using function \code{showvarparts}. A fraction is testable if it can be directly expressed as an RDA or db-RDA model. In these cases the printed output also displays the corresponding RDA model using notation where explanatory tables after \code{|} are conditions (partialled out; see \code{\link{rda}} for details). Although single fractions can be testable, this does not mean that all fractions simultaneously can be tested, since the number of testable fractions is higher than the number of estimated models. An abridged explanation of the alphabetic symbols for the individual fractions follows, but computational details should be checked in the vignette (readable with \code{browseVignettes("vegan")}) or in the source code. With two explanatory tables, the fractions explained uniquely by each of the two tables are \code{[a]} and \code{[c]}, and their joint effect is \code{[b]} following Borcard et al. (1992). With three explanatory tables, the fractions explained uniquely by each of the three tables are \code{[a]} to \code{[c]}, joint fractions between two tables are \code{[d]} to \code{[f]}, and the joint fraction between all three tables is \code{[g]}. With four explanatory tables, the fractions explained uniquely by each of the four tables are \code{[a]} to \code{[d]}, joint fractions between two tables are \code{[e]} to \code{[j]}, joint fractions between three variables are \code{[k]} to \code{[n]}, and the joint fraction between all four tables is \code{[o]}. There is a \code{plot} function that displays the Venn diagram and labels each intersection (individual fraction) with the adjusted R squared if this is higher than \code{cutoff}. A helper function \code{showvarpart} displays the fraction labels. The circles and ellipses are labelled by short default names or by names defined by the user in argument \code{Xnames}. Longer explanatory file names can be written on the varpart output plot as follows: use option \code{Xnames=NA}, then add new names using the \code{text} function. A bit of fiddling with coordinates (see \code{\link{locator}}) and character size should allow users to place names of reasonably short lengths on the \code{varpart} plot. } \value{ Function \code{varpart} returns an object of class \code{"varpart"} with items \code{scale} and \code{transfo} (can be missing) which hold information on standardizations, \code{tables} which contains names of explanatory tables, and \code{call} with the function \code{\link{call}}. The function \code{varpart} calls function \code{varpart2}, \code{varpart3} or \code{varpart4} which return an object of class \code{"varpart234"} and saves its result in the item \code{part}. The items in this object are: \item{SS.Y}{Sum of squares of matrix \code{Y}.} \item{n}{Number of observations (rows).} \item{nsets}{Number of explanatory tables} \item{bigwarning}{Warnings on collinearity.} \item{fract}{Basic fractions from all estimated constrained models.} \item{indfract}{Individual fractions or all possible subsections in the Venn diagram (see \code{showvarparts}).} \item{contr1}{Fractions that can be found after conditioning on single explanatory table in models with three or four explanatory tables.} \item{contr2}{Fractions that can be found after conditioning on two explanatory tables in models with four explanatory tables.} } \section{Fraction Data Frames}{ Items \code{fract}, \code{indfract}, \code{contr1} and \code{contr2} are all data frames with items: \itemize{ \item{\code{Df}: }{Degrees of freedom of numerator of the \eqn{F}-statistic for the fraction.} \item{\code{R.square}: }{Raw \eqn{R^2}{R-squared}. This is calculated only for \code{fract} and this is \code{NA} in other items.} \item{\code{Adj.R.square}: }{Adjusted \eqn{R^2}{R-squared}.} \item{\code{Testable}: }{If the fraction can be expressed as a (partial) RDA model, it is directly \code{Testable}, and this field is \code{TRUE}. In that case the fraction label also gives the specification of the testable RDA model.} } } \references{ (a) References on variation partitioning Borcard, D., P. Legendre & P. Drapeau. 1992. Partialling out the spatial component of ecological variation. Ecology 73: 1045--1055. Legendre, P. & L. Legendre. 2012. Numerical ecology, 3rd English edition. Elsevier Science BV, Amsterdam. (b) Reference on transformations for species data Legendre, P. and E. D. Gallagher. 2001. Ecologically meaningful transformations for ordination of species data. Oecologia 129: 271--280. (c) Reference on adjustment of the bimultivariate redundancy statistic Peres-Neto, P., P. Legendre, S. Dray and D. Borcard. 2006. Variation partitioning of species data matrices: estimation and comparison of fractions. Ecology 87: 2614--2625. (d) References on partitioning of dissimilarities Legendre, P. & Anderson, M. J. (1999). Distance-based redundancy analysis: testing multispecies responses in multifactorial ecological experiments. \emph{Ecological Monographs} 69, 1--24. McArdle, B.H. & Anderson, M.J. (2001). Fitting multivariate models to community data: a comment on distance-based redundancy analysis. Ecology 82, 290-297. } \author{ Pierre Legendre, Departement de Sciences Biologiques, Universite de Montreal, Canada. Further developed by Jari Oksanen. } \note{ You can use command \code{browseVignettes("vegan")} to display document which presents Venn diagrams showing the fraction names in partitioning the variation of Y with respect to 2, 3, and 4 tables of explanatory variables, as well as the equations used in variation partitioning. The functions frequently give negative estimates of variation. Adjusted \eqn{R^2}{R-squared} can be negative for any fraction; unadjusted \eqn{R^2}{R-squared} of testable fractions of variances will be non-negative. Non-testable fractions cannot be found directly, but by subtracting different models, and these subtraction results can be negative. The fractions are orthogonal, or linearly independent, but more complicated or nonlinear dependencies can cause negative non-testable fractions. Any fraction can be negative for non-Euclidean dissimilarities because the underlying db-RDA model can yield negative eigenvalues (see \code{\link{capscale}}, \code{\link{dbrda}}). These negative eigenvalues in the underlying analysis can be avoided with arguments \code{sqrt.dist} and \code{add} which have a similar effect as in \code{\link{capscale}}: the square roots of several dissimilarities do not have negative eigenvalues, and no negative eigenvalues are produced after Lingoes or Cailliez adjustment, which in effect add random variation to the dissimilarities. The current function will only use RDA in multivariate partitioning. It is much more complicated to estimate the adjusted R-squares for CCA, and unbiased analysis of CCA is not currently implemented. A simplified, fast version of RDA or dbRDA are used (functions \code{simpleRDA2} and \code{simpleDBRDA}). The actual calculations are done in functions \code{varpart2} to \code{varpart4}, but these are not intended to be called directly by the user. } \seealso{ For analysing testable fractions, see \code{\link{rda}} and \code{\link{anova.cca}}. For data transformation, see \code{\link{decostand}}. Function \code{\link{inertcomp}} gives (unadjusted) components of variation for each species or site separately. Function \code{\link{rda}} displays unadjusted components in its output, but \code{\link{RsquareAdj}} will give adjusted \eqn{R^2}{R-squared} that are similar to the current function also for partial models. } \examples{ data(mite) data(mite.env) data(mite.pcnm) # Two explanatory matrices -- Hellinger-transform Y # Formula shortcut "~ ." means: use all variables in 'data'. mod <- varpart(mite, ~ ., mite.pcnm, data=mite.env, transfo="hel") mod ## Use fill colours showvarparts(2, bg = c("hotpink","skyblue")) plot(mod, bg = c("hotpink","skyblue")) # Alternative way of to conduct this partitioning # Change the data frame with factors into numeric model matrix mm <- model.matrix(~ SubsDens + WatrCont + Substrate + Shrub + Topo, mite.env)[,-1] mod <- varpart(decostand(mite, "hel"), mm, mite.pcnm) # Test fraction [a] using partial RDA: aFrac <- rda(decostand(mite, "hel"), mm, mite.pcnm) anova(aFrac, step=200, perm.max=200) # RsquareAdj gives the same result as component [a] of varpart RsquareAdj(aFrac) # Partition Bray-Curtis dissimilarities varpart(vegdist(mite), ~ ., mite.pcnm, data = mite.env) # Three explanatory matrices mod <- varpart(mite, ~ SubsDens + WatrCont, ~ Substrate + Shrub + Topo, mite.pcnm, data=mite.env, transfo="hel") mod showvarparts(3, bg=2:4) plot(mod, bg=2:4) # An alternative formulation of the previous model using # matrices mm1 amd mm2 and Hellinger transformed species data mm1 <- model.matrix(~ SubsDens + WatrCont, mite.env)[,-1] mm2 <- model.matrix(~ Substrate + Shrub + Topo, mite.env)[, -1] mite.hel <- decostand(mite, "hel") mod <- varpart(mite.hel, mm1, mm2, mite.pcnm) # Use RDA to test fraction [a] # Matrix can be an argument in formula rda.result <- rda(mite.hel ~ mm1 + Condition(mm2) + Condition(as.matrix(mite.pcnm))) anova(rda.result, step=200, perm.max=200) # Four explanatory tables mod <- varpart(mite, ~ SubsDens + WatrCont, ~Substrate + Shrub + Topo, mite.pcnm[,1:11], mite.pcnm[,12:22], data=mite.env, transfo="hel") mod plot(mod, bg=2:5) # Show values for all partitions by putting 'cutoff' low enough: plot(mod, cutoff = -Inf, cex = 0.7, bg=2:5) } \keyword{ multivariate } vegan/man/commsim.Rd0000644000176200001440000004514313231354436014073 0ustar liggesusers\encoding{UTF-8} \name{commsim} \alias{commsim} \alias{make.commsim} \alias{print.commsim} \title{ Create an Object for Null Model Algorithms } \description{ The \code{commsim} function can be used to feed Null Model algorithms into \code{\link{nullmodel}} analysis. The \code{make.commsim} function returns various predefined algorithm types (see Details). These functions represent low level interface for community null model infrastructure in \pkg{vegan} with the intent of extensibility, and less emphasis on direct use by users. } \usage{ commsim(method, fun, binary, isSeq, mode) make.commsim(method) \method{print}{commsim}(x, ...) } \arguments{ \item{method}{ Character, name of the algorithm. } \item{fun}{ A function. For possible formal arguments of this function see Details. } \item{binary}{ Logical, if the algorithm applies to presence-absence or count matrices. } \item{isSeq}{ Logical, if the algorithm is sequential (needs burnin and thinning) or not. } \item{mode}{ Character, storage mode of the community matrix, either \code{"integer"} or \code{"double"}. } \item{x}{ An object of class \code{commsim}. } \item{\dots}{ Additional arguments. } } \details{ The function \code{fun} must return an array of \code{dim(nr, nc, n)}, and must take some of the following arguments: \itemize{ \item{\code{x}: }{input matrix,} \item{\code{n}: }{number of permuted matrices in output,} \item{\code{nr}: }{number of rows,} \item{\code{nc}: }{number of columns,} \item{\code{rs}: }{vector of row sums,} \item{\code{cs}: }{vector of column sums,} \item{\code{rf}: }{vector of row frequencies (non-zero cells),} \item{\code{cf}: }{vector of column frequencies (non-zero cells),} \item{\code{s}: }{total sum of \code{x},} \item{\code{fill}: }{matrix fill (non-zero cells),} \item{\code{thin}: }{thinning value for sequential algorithms,} \item{\code{...}: }{additional arguments.} } You can define your own null model, but several null model algorithm are pre-defined and can be called by their name. The predefined algorithms are described in detail in the following chapters. The binary null models produce matrices of zeros (absences) and ones (presences) also when input matrix is quantitative. There are two types of quantitative data: Counts are integers with a natural unit so that individuals can be shuffled, but abundances can have real (floating point) values and do not have a natural subunit for shuffling. All quantitative models can handle counts, but only some are able to handle real values. Some of the null models are sequential so that the next matrix is derived from the current one. This makes models dependent from previous models, and usually you must thin these matrices and study the sequences for stability: see \code{oecosimu} for details and instructions. See Examples for structural constraints imposed by each algorithm and defining your own null model. } %% commsimulator \section{Binary null models}{ All binary null models preserve fill: number of presences or conversely the number of absences. The classic models may also preserve column (species) frequencies (\code{c0}) or row frequencies or species richness of each site (\code{r0}) and take into account commonness and rarity of species (\code{r1}, \code{r2}). Algorithms \code{swap}, \code{tswap}, \code{curveball}, \code{quasiswap} and \code{backtracking} preserve both row and column frequencies. Three first ones are sequential but the two latter are non-sequential and produce independent matrices. Basic algorithms are reviewed by Wright et al. (1998). \itemize{ \item{\code{"r00"}: }{non-sequential algorithm for binary matrices that only preserves the number of presences (fill).} \item{\code{"r0", "r0_old"}: }{non-sequential algorithm for binary matrices that preserves the site (row) frequencies. Methods \code{"r0"} and \code{"r0_old"} implement the same method, but use different random number sequences; use \code{"r0_old"} if you want to reproduce results in \pkg{vegan 2.0-0} or older using \code{commsimulator} (now deprecated).} \item{\code{"r1"}: }{non-sequential algorithm for binary matrices that preserves the site (row) frequencies, but uses column marginal frequencies as probabilities of selecting species.} \item{\code{"r2"}: }{non-sequential algorithm for binary matrices that preserves the site (row) frequencies, and uses squared column marginal frequencies as as probabilities of selecting species.} \item{\code{"c0"}: }{non-sequential algorithm for binary matrices that preserves species frequencies (Jonsson 2001). } \item{\code{"swap"}: }{sequential algorithm for binary matrices that changes the matrix structure, but does not influence marginal sums (Gotelli & Entsminger 2003). This inspects \eqn{2 \times 2}{2 by 2} submatrices so long that a swap can be done.} \item{\code{"tswap"}: }{sequential algorithm for binary matrices. Same as the \code{"swap"} algorithm, but it tries a fixed number of times and performs zero to many swaps at one step (according to the thin argument in the call). This approach was suggested by \enc{Miklós}{Miklos} & Podani (2004) because they found that ordinary swap may lead to biased sequences, since some columns or rows are more easily swapped.} \item{\code{"curveball"}: }{sequential method for binary matrices that implements the \sQuote{Curveball} algorithm of Strona et al. (2014). The algorithm selects two random rows and finds the set of unique species that occur only in one of these rows. The algorithm distributes the set of unique species to rows preserving the original row frequencies. Zero to several species are swapped in one step, and usually the matrix is perturbed more strongly than in other sequential methods.} \item{\code{"quasiswap"}: }{non-sequential algorithm for binary matrices that implements a method where matrix is first filled honouring row and column totals, but with integers that may be larger than one. Then the method inspects random \eqn{2 \times 2}{2 by 2} matrices and performs a quasiswap on them. In addition to ordinary swaps, quasiswap can reduce numbers above one to ones preserving marginal totals (\enc{Miklós}{Miklos} & Podani 2004). The method is non-sequential, but it accepts \code{thin} argument: the convergence is checked at every \code{thin} steps. This allows performing several ordinary swaps in addition to fill changing swaps which helps in reducing or removing the bias.} \item{\code{"backtracking"}: }{non-sequential algorithm for binary matrices that implements a filling method with constraints both for row and column frequencies (Gotelli & Entsminger 2001). The matrix is first filled randomly using row and column frequencies as probabilities. Typically row and column sums are reached before all incidences are filled in. After that begins "backtracking", where some of the points are removed, and then filling is started again, and this backtracking is done so may times that all incidences will be filled into matrix. The function may be very slow for some matrices. The results may be biased and should be inspected carefully before use.} } } \section{Quantitative Models for Counts with Fixed Marginal Sums}{ These models shuffle individuals of counts and keep marginal sums fixed, but marginal frequencies are not preserved. Algorithm \code{r2dtable} uses standard \R function \code{\link{r2dtable}} also used for simulated \eqn{P}-values in \code{\link{chisq.test}}. Algorithm \code{quasiswap_count} uses the same, but preserves the original fill. Typically this means increasing numbers of zero cells and the result is zero-inflated with respect to \code{r2dtable}. \itemize{ \item{\code{"r2dtable"}: }{non-sequential algorithm for count matrices. This algorithm keeps matrix sum and row/column sums constant. Based on \code{\link{r2dtable}}.} \item{\code{"quasiswap_count"}: }{non-sequential algorithm for count matrices. This algorithm is similar as Carsten Dormann's \code{\link[bipartite]{swap.web}} function in the package \pkg{bipartite}. First, a random matrix is generated by the \code{\link{r2dtable}} function preserving row and column sums. Then the original matrix fill is reconstructed by sequential steps to increase or decrease matrix fill in the random matrix. These steps are based on swapping \eqn{2 \times 2}{2 x 2} submatrices (see \code{"swap_count"} algorithm for details) to maintain row and column totals. } } } \section{Quantitative Swap Models}{ Quantitative swap models are similar to binary \code{swap}, but they swap the largest permissible value. The models in this section all maintain the fill and perform a quantitative swap only if this can be done without changing the fill. Single step of swap often changes the matrix very little. In particular, if cell counts are variable, high values change very slowly. Checking the chain stability and independence is even more crucial than in binary swap, and very strong \code{thin}ning is often needed. These models should never be used without inspecting their properties for the current data. These null models can also be defined using \code{\link{permatswap}} function. \itemize{ \item{\code{"swap_count"}: }{sequential algorithm for count matrices. This algorithm find \eqn{2 \times 2}{2 x 2} submatrices that can be swapped leaving column and row totals and fill unchanged. The algorithm finds the largest value in the submatrix that can be swapped (\eqn{d}). Swap means that the values in diagonal or antidiagonal positions are decreased by \eqn{d}, while remaining cells are increased by \eqn{d}. A swap is made only if fill does not change. } \item{\code{"abuswap_r"}: }{sequential algorithm for count or nonnegative real valued matrices with fixed row frequencies (see also \code{\link{permatswap}}). The algorithm is similar to \code{swap_count}, but uses different swap value for each row of the \eqn{2 \times 2}{2 x 2} submatrix. Each step changes the the corresponding column sums, but honours matrix fill, row sums, and row/column frequencies (Hardy 2008; randomization scheme 2x).} \item{\code{"abuswap_c"}: }{sequential algorithm for count or nonnegative real valued matrices with fixed column frequencies (see also \code{\link{permatswap}}). The algorithm is similar as the previous one, but operates on columns. Each step changes the the corresponding row sums, but honours matrix fill, column sums, and row/column frequencies (Hardy 2008; randomization scheme 3x).} } } \section{Quantitative Swap and Shuffle Models}{ Quantitative Swap and Shuffle methods (\code{swsh} methods) preserve fill and column and row frequencies, and also either row or column sums. The methods first perform a binary \code{quasiswap} and then shuffle original quantitative data to non-zero cells. The \code{samp} methods shuffle original non-zero cell values and can be used also with non-integer data. The \code{both} methods redistribute individuals randomly among non-zero cells and can only be used with integer data. The shuffling is either free over the whole matrix, or within rows (\code{r} methods) or within columns (\code{c} methods). Shuffling within a row preserves row sums, and shuffling within a column preserves column sums. These models can also be defined with \code{\link{permatswap}}. \itemize{ \item{\code{"swsh_samp"}: }{non-sequential algorithm for quantitative data (either integer counts or non-integer values). Original non-zero values values are shuffled.} \item{\code{"swsh_both"}: }{non-sequential algorithm for count data. Individuals are shuffled freely over non-zero cells.} \item{\code{"swsh_samp_r"}: }{non-sequential algorithm for quantitative data. Non-zero values (samples) are shuffled separately for each row.} \item{\code{"swsh_samp_c"}: }{non-sequential algorithm for quantitative data. Non-zero values (samples) are shuffled separately for each column.} \item{\code{"swsh_both_r"}: }{non-sequential algorithm for count matrices. Individuals are shuffled freely for non-zero values within each row.} \item{\code{"swsh_both_c"}: }{non-sequential algorithm for count matrices. Individuals are shuffled freely for non-zero values with each column.} } } \section{Quantitative Shuffle Methods}{ Quantitative shuffle methods are generalizations of binary models \code{r00}, \code{r0} and \code{c0}. The \code{_ind} methods shuffle individuals so that the grand sum, row sum or column sums are preserved. These methods are similar as \code{r2dtable} but with still slacker constraints on marginal sums. The \code{_samp} and \code{_both} methods first apply the correspongind binary model with similar restriction on marginal frequencies and then distribute quantitative values over non-zero cells. The \code{_samp} models shuffle original cell values and can therefore handle also non-count real values. The \code{_both} models shuffle individuals among non-zero values. The shuffling is over the whole matrix in \code{r00_}, and within row in \code{r0_} and within column in \code{c0_} in all cases. \itemize{ \item{\code{"r00_ind"}: }{non-sequential algorithm for count matrices. This algorithm preserves grand sum and individuals are shuffled among cells of the matrix.} \item{\code{"r0_ind"}: }{non-sequential algorithm for count matrices. This algorithm preserves row sums and individuals are shuffled among cells of each row of the matrix.} \item{\code{"c0_ind"}: }{non-sequential algorithm for count matrices. This algorithm preserves column sums and individuals are shuffled among cells of each column of the matrix.} \item{\code{"r00_samp"}: }{non-sequential algorithm for count or nonnegative real valued (\code{mode = "double"}) matrices. This algorithm preserves grand sum and cells of the matrix are shuffled.} \item{\code{"r0_samp"}: }{non-sequential algorithm for count or nonnegative real valued (\code{mode = "double"}) matrices. This algorithm preserves row sums and cells within each row are shuffled.} \item{\code{"c0_samp"}: }{non-sequential algorithm for count or nonnegative real valued (\code{mode = "double"}) matrices. This algorithm preseerves column sums constant and cells within each column are shuffled.} \item{\code{"r00_both"}: }{non-sequential algorithm for count matrices. This algorithm preserves grand sum and cells and individuals among cells of the matrix are shuffled.} \item{\code{"r0_both"}: }{non-sequential algorithm for count matrices. This algorithm preserves grand sum and cells and individuals among cells of each row are shuffled.} \item{\code{"c0_both"}: }{non-sequential algorithm for count matrices. This algorithm preserves grand sum and cells and individuals among cells of each column are shuffled.} } } \value{ An object of class \code{commsim} with elements corresponding to the arguments (\code{method}, \code{binary}, \code{isSeq}, \code{mode}, \code{fun}). If the input of \code{make.comsimm} is a \code{commsim} object, it is returned without further evaluation. If this is not the case, the character \code{method} argument is matched against predefined algorithm names. An error message is issued if none such is found. If the \code{method} argument is missing, the function returns names of all currently available null model algorithms as a character vector. } \references{ Gotelli, N.J. & Entsminger, N.J. (2001). Swap and fill algorithms in null model analysis: rethinking the knight's tour. \emph{Oecologia} 129, 281--291. Gotelli, N.J. & Entsminger, N.J. (2003). Swap algorithms in null model analysis. \emph{Ecology} 84, 532--535. Hardy, O. J. (2008) Testing the spatial phylogenetic structure of local communities: statistical performances of different null models and test statistics on a locally neutral community. \emph{Journal of Ecology} 96, 914--926. Jonsson, B.G. (2001) A null model for randomization tests of nestedness in species assemblages. \emph{Oecologia} 127, 309--313. \enc{Miklós}{Miklos}, I. & Podani, J. (2004). Randomization of presence-absence matrices: comments and new algorithms. \emph{Ecology} 85, 86--92. Patefield, W. M. (1981) Algorithm AS159. An efficient method of generating r x c tables with given row and column totals. \emph{Applied Statistics} 30, 91--97. Strona, G., Nappo, D., Boccacci, F., Fattorini, S. & San-Miguel-Ayanz, J. (2014). A fast and unbiased procedure to randomize ecological binary matrices with fixed row and column totals. \emph{Nature Communications} 5:4114 \doi{10.1038/ncomms5114}. Wright, D.H., Patterson, B.D., Mikkelson, G.M., Cutler, A. & Atmar, W. (1998). A comparative analysis of nested subset patterns of species composition. \emph{Oecologia} 113, 1--20. } \author{ Jari Oksanen and Peter Solymos } \seealso{ See \code{\link{permatfull}}, \code{\link{permatswap}} for alternative specification of quantitative null models. Function \code{\link{oecosimu}} gives a higher-level interface for applying null models in hypothesis testing and analysis of models. Function \code{\link{nullmodel}} and \code{\link{simulate.nullmodel}} are used to generate arrays of simulated null model matrices. } \examples{ ## write the r00 algorithm f <- function(x, n, ...) array(replicate(n, sample(x)), c(dim(x), n)) (cs <- commsim("r00", fun=f, binary=TRUE, isSeq=FALSE, mode="integer")) ## retrieving the sequential swap algorithm (cs <- make.commsim("swap")) ## feeding a commsim object as argument make.commsim(cs) ## structural constraints diagfun <- function(x, y) { c(sum = sum(y) == sum(x), fill = sum(y > 0) == sum(x > 0), rowSums = all(rowSums(y) == rowSums(x)), colSums = all(colSums(y) == colSums(x)), rowFreq = all(rowSums(y > 0) == rowSums(x > 0)), colFreq = all(colSums(y > 0) == colSums(x > 0))) } evalfun <- function(meth, x, n) { m <- nullmodel(x, meth) y <- simulate(m, nsim=n) out <- rowMeans(sapply(1:dim(y)[3], function(i) diagfun(attr(y, "data"), y[,,i]))) z <- as.numeric(c(attr(y, "binary"), attr(y, "isSeq"), attr(y, "mode") == "double")) names(z) <- c("binary", "isSeq", "double") c(z, out) } x <- matrix(rbinom(10*12, 1, 0.5)*rpois(10*12, 3), 12, 10) algos <- make.commsim() a <- t(sapply(algos, evalfun, x=x, n=10)) print(as.table(ifelse(a==1,1,0)), zero.print = ".") } \keyword{ multivariate } \keyword{ datagen } vegan/man/dune.taxon.Rd0000644000176200001440000000443513231354436014511 0ustar liggesusers\encoding{UTF-8} \name{dune.taxon} \alias{dune.taxon} \alias{dune.phylodis} \docType{data} \title{Taxonomic Classification and Phylogeny of Dune Meadow Species} \description{ Classification table of the species in the \code{\link{dune}} data set. } \usage{ data(dune.taxon) data(dune.phylodis) } \format{ \code{dune.taxon} is data frame with 30 species (rows) classified into five taxonomic levels (columns). \code{dune.phylodis} is a \code{\link{dist}} object of estimated coalescence ages extracted from \url{http://datadryad.org/resource/doi:10.5061/dryad.63q27} (Zanne et al. 2014) using tools in packages \pkg{ape} and \pkg{phylobase}. } \details{ The families and orders are based on APG IV (2016) in vascular plants and on Hill et al. (2006) in mosses. The higher levels (superorder and subclass) are based on Chase & Reveal (2009). Chase & Reveal (2009) treat Angiosperms and mosses as subclasses of class Equisetopsida (land plants), but brylogists have traditionally used much more inflated levels which are adjusted here to match Angiosperm classification. } \references{ APG IV [Angiosperm Phylogeny Group] (2016) An update of the Angiosperm Phylogeny Group classification for the orders and families of flowering plants: APG IV. \emph{Bot. J. Linnean Soc.} \strong{181}: 1--20. Chase, M.W. & Reveal, J. L. (2009) A phylogenetic classification of the land plants to accompany APG III. \emph{Bot. J. Linnean Soc.} \strong{161}: 122--127. Hill, M.O et al. (2006) An annotated checklist of the mosses of Europe and Macaronesia. \emph{J. Bryology} \strong{28}: 198--267. Zanne A.E., Tank D.C., Cornwell, W.K., Eastman J.M., Smith, S.A., FitzJohn, R.G., McGlinn, D.J., O’Meara, B.C., Moles, A.T., Reich, P.B., Royer, D.L., Soltis, D.E., Stevens, P.F., Westoby, M., Wright, I.J., Aarssen, L., Bertin, R.I., Calaminus, A., Govaerts, R., Hemmings, F., Leishman, M.R., Oleksyn, J., Soltis, P.S., Swenson, N.G., Warman, L. & Beaulieu, J.M. (2014) Three keys to the radiation of angiosperms into freezing environments. \emph{Nature} \strong{506}: 89--92. } \seealso{Functions \code{\link{taxondive}}, \code{\link{treedive}}, and \code{\link{treedist}} use these data sets. } \examples{ data(dune.taxon) data(dune.phylodis) } \keyword{datasets} vegan/man/stressplot.wcmdscale.Rd0000644000176200001440000000635513156750403016614 0ustar liggesusers\name{stressplot.wcmdscale} \alias{stressplot.wcmdscale} \alias{stressplot.cca} \alias{stressplot.rda} \alias{stressplot.capscale} \alias{stressplot.dbrda} \alias{stressplot.prcomp} \alias{stressplot.princomp} \title{ Display Ordination Distances Against Observed Distances in Eigenvector Ordinations } \description{ Functions plot ordination distances in given number of dimensions against observed distances or distances in full space in eigenvector methods. The display is similar as the Shepard diagram (\code{\link{stressplot}} for non-metric multidimensional scaling with \code{\link{metaMDS}} or \code{\link{monoMDS}}), but shows the linear relationship of the eigenvector ordinations. The \code{stressplot} methods are available for \code{\link{wcmdscale}}, \code{\link{rda}}, \code{\link{cca}}, \code{\link{capscale}}, \code{\link{dbrda}}, \code{\link{prcomp}} and \code{\link{princomp}}. } \usage{ \method{stressplot}{wcmdscale}(object, k = 2, pch, p.col = "blue", l.col = "red", lwd = 2, ...) } \arguments{ \item{object}{ Result object from eigenvector ordination (\code{\link{wcmdscale}}, \code{\link{rda}}, \code{\link{cca}}, \code{\link{capscale}}) } \item{k}{ Number of dimensions for which the ordination distances are displayed. } \item{pch, p.col, l.col, lwd}{ Plotting character, point colour and line colour like in default \code{\link{stressplot}} } \item{\dots}{ Other parameters to functions, e.g. graphical parameters. } } \details{ The functions offer a similar display for eigenvector ordinations as the standard Shepard diagram (\code{\link{stressplot}}) in non-metric multidimensional scaling. The ordination distances in given number of dimensions are plotted against observed distances. With metric distances, the ordination distances in full space (with all ordination axes) are equal to observed distances, and the fit line shows this equality. In general, the fit line does not go through the points, but the points for observed distances approach the fit line from below. However, with non-Euclidean distances (in \code{\link{wcmdscale}} or \code{\link{capscale}}) with negative eigenvalues the ordination distances can exceed the observed distances in real dimensions; the imaginary dimensions with negative eigenvalues will correct these excess distances. If you have used \code{\link{capscale}} or \code{\link{wcmdscale}} with argument \code{add} to avoid negative eigenvalues, the ordination distances will exceed the observed dissimilarities. In partial ordination (\code{\link{cca}}, \code{\link{rda}} and \code{\link{capscale}} with \code{Condition} in the formula), the distances in the partial component are included both in the observed distances and in ordination distances. With \code{k=0}, the ordination distances refer to the partial ordination. } \value{ Functions draw a graph and return invisibly the ordination distances or the ordination distances. } \author{ Jari Oksanen. } \seealso{ \code{\link{stressplot}} and \code{\link{stressplot.monoMDS}} for standard Shepard diagrams. } \examples{ data(dune, dune.env) mod <- rda(dune) stressplot(mod) mod <- rda(dune ~ Management, dune.env) stressplot(mod, k=3) } \keyword{ multivariate } vegan/man/metaMDS.Rd0000644000176200001440000004566213156750403013727 0ustar liggesusers\encoding{UTF-8} \name{metaMDS} \alias{metaMDS} \alias{metaMDSdist} \alias{metaMDSiter} \alias{metaMDSredist} \alias{initMDS} \alias{postMDS} \alias{plot.metaMDS} \alias{points.metaMDS} \alias{text.metaMDS} \alias{scores.metaMDS} \title{Nonmetric Multidimensional Scaling with Stable Solution from Random Starts, Axis Scaling and Species Scores} \description{Function \code{metaMDS} performs Nonmetric Multidimensional Scaling (NMDS), and tries to find a stable solution using several random starts. In addition, it standardizes the scaling in the result, so that the configurations are easier to interpret, and adds species scores to the site ordination. The \code{metaMDS} function does not provide actual NMDS, but it calls another function for the purpose. Currently \code{\link{monoMDS}} is the default choice, and it is also possible to call the \code{\link[MASS]{isoMDS}} (\pkg{MASS} package). } \usage{ metaMDS(comm, distance = "bray", k = 2, try = 20, trymax = 20, engine = c("monoMDS", "isoMDS"), autotransform =TRUE, noshare = (engine == "isoMDS"), wascores = TRUE, expand = TRUE, trace = 1, plot = FALSE, previous.best, ...) \method{plot}{metaMDS}(x, display = c("sites", "species"), choices = c(1, 2), type = "p", shrink = FALSE, ...) \method{points}{metaMDS}(x, display = c("sites", "species"), choices = c(1,2), shrink = FALSE, select, ...) \method{text}{metaMDS}(x, display = c("sites", "species"), labels, choices = c(1,2), shrink = FALSE, select, ...) \method{scores}{metaMDS}(x, display = c("sites", "species"), shrink = FALSE, choices, ...) metaMDSdist(comm, distance = "bray", autotransform = TRUE, noshare = TRUE, trace = 1, commname, zerodist = "ignore", distfun = vegdist, ...) metaMDSiter(dist, k = 2, try = 20, trymax = 20, trace = 1, plot = FALSE, previous.best, engine = "monoMDS", maxit = 200, parallel = getOption("mc.cores"), ...) initMDS(x, k=2) postMDS(X, dist, pc=TRUE, center=TRUE, halfchange, threshold=0.8, nthreshold=10, plot=FALSE, ...) metaMDSredist(object, ...) } \arguments{ \item{comm}{Community data. Alternatively, dissimilarities either as a \code{\link{dist}} structure or as a symmetric square matrix. In the latter case all other stages are skipped except random starts and centring and pc rotation of axes. } \item{distance}{Dissimilarity index used in \code{\link{vegdist}}.} \item{k}{Number of dimensions. NB., the number of points \eqn{n} should be \eqn{n > 2k + 1}{n > 2*k + 1}, and preferably higher in non-metric MDS.} \item{try, trymax}{Minimum and maximum numbers of random starts in search of stable solution. After \code{try} has been reached, the iteration will stop when two convergent solutions were found or \code{trymax} was reached.} \item{engine}{The function used for MDS. The default is to use the \code{\link{monoMDS}} function in \pkg{vegan}, but for backward compatibility it is also possible to use \code{\link{isoMDS}} of \pkg{MASS}.} \item{autotransform}{Use simple heuristics for possible data transformation of typical community data (see below). If you do not have community data, you should probably set \code{autotransform = FALSE}.} \item{noshare}{Triggering of calculation step-across or extended dissimilarities with function \code{\link{stepacross}}. The argument can be logical or a numerical value greater than zero and less than one. If \code{TRUE}, extended dissimilarities are used always when there are no shared species between some sites, if \code{FALSE}, they are never used. If \code{noshare} is a numerical value, \code{\link{stepacross}} is used when the proportion of site pairs with no shared species exceeds \code{noshare}. The number of pairs with no shared species is found with \code{\link{no.shared}} function, and \code{noshare} has no effect if input data were dissimilarities instead of community data.} \item{wascores}{Calculate species scores using function \code{\link{wascores}}.} \item{expand}{Expand weighted averages of species in \code{\link{wascores}}.} \item{trace}{Trace the function; \code{trace = 2} or higher will be more voluminous.} \item{plot}{Graphical tracing: plot interim results. You may want to set \code{par(ask = TRUE)} with this option.} \item{previous.best}{Start searches from a previous solution.} \item{x}{\code{metaMDS} result (or a dissimilarity structure for \code{initMDS}.} \item{choices}{Axes shown.} \item{type}{Plot type: \code{"p"} for points, \code{"t"} for text, and \code{"n"} for axes only.} \item{display}{Display \code{"sites"} or \code{"species"}.} \item{shrink}{Shrink back species scores if they were expanded originally.} \item{labels}{Optional test to be used instead of row names.} \item{select}{Items to be displayed. This can either be a logical vector which is \code{TRUE} for displayed items or a vector of indices of displayed items.} \item{X}{Configuration from multidimensional scaling. } \item{commname}{The name of \code{comm}: should not be given if the function is called directly.} \item{zerodist}{Handling of zero dissimilarities: either \code{"fail"} or \code{"add"} a small positive value, or \code{"ignore"}. \code{\link{monoMDS}} accepts zero dissimilarities and the default is \code{zerodist = "ignore"}, but with \code{\link[MASS]{isoMDS}} you may need to set \code{zerodist = "add"}.} \item{distfun}{Dissimilarity function. Any function returning a \code{dist} object and accepting argument \code{method} can be used (but some extra arguments may cause name conflicts).} \item{maxit}{Maximum number of iterations in the single NMDS run; passed to the \code{engine} function \code{\link{monoMDS}} or \code{\link[MASS]{isoMDS}}.} \item{parallel}{Number of parallel processes or a predefined socket cluster. If you use pre-defined socket clusters (say, \code{clus}), you must issue \code{clusterEvalQ(clus, library(vegan))} to make available internal \pkg{vegan} functions. With \code{parallel = 1} uses ordinary, non-parallel processing. The parallel processing is done with \pkg{parallel} package.} \item{dist}{Dissimilarity matrix used in multidimensional scaling. } \item{pc}{Rotate to principal components. } \item{center}{Centre the configuration. } \item{halfchange}{Scale axes to half-change units. This defaults \code{TRUE} when dissimilarities were evaluated within \code{metaMDS} and the dissimilarity index has an upper limit of \eqn{1}. If \code{FALSE}, the ordination dissimilarities are scaled to the same range as the input dissimilarities.} \item{threshold}{Largest dissimilarity used in half-change scaling. } \item{nthreshold}{ Minimum number of points in half-change scaling. } \item{object}{A result object from \code{metaMDS}.} \item{\dots}{Other parameters passed to functions. Function \code{metaMDS} passes all arguments to its component functions \code{metaMDSdist}, \code{metaMDSiter}, \code{postMDS}, and to \code{distfun} and \code{engine}.} } \details{ Non-metric Multidimensional Scaling (NMDS) is commonly regarded as the most robust unconstrained ordination method in community ecology (Minchin 1987). Function \code{metaMDS} is a wrapper function that calls several other functions to combine Minchin's (1987) recommendations into one command. The complete steps in \code{metaMDS} are: \enumerate{ \item Transformation: If the data values are larger than common abundance class scales, the function performs a Wisconsin double standardization (\code{\link{wisconsin}}). If the values look very large, the function also performs \code{\link{sqrt}} transformation. Both of these standardizations are generally found to improve the results. However, the limits are completely arbitrary (at present, data maximum 50 triggers \code{\link{sqrt}} and \eqn{>9} triggers \code{\link{wisconsin}}). If you want to have a full control of the analysis, you should set \code{autotransform = FALSE} and standardize and transform data independently. The \code{autotransform} is intended for community data, and for other data types, you should set \code{autotransform = FALSE}. This step is perfomed using \code{metaMDSdist}. \item Choice of dissimilarity: For a good result, you should use dissimilarity indices that have a good rank order relation to ordering sites along gradients (Faith et al. 1987). The default is Bray-Curtis dissimilarity, because it often is the test winner. However, any other dissimilarity index in \code{\link{vegdist}} can be used. Function \code{\link{rankindex}} can be used for finding the test winner for you data and gradients. The default choice may be bad if you analyse other than community data, and you should probably select an appropriate index using argument \code{distance}. This step is performed using \code{metaMDSdist}. \item Step-across dissimilarities: Ordination may be very difficult if a large proportion of sites have no shared species. In this case, the results may be improved with \code{\link{stepacross}} dissimilarities, or flexible shortest paths among all sites. The default NMDS \code{engine} is \code{\link{monoMDS}} which is able to break tied values at the maximum dissimilarity, and this often is sufficient to handle cases with no shared species, and therefore the default is not to use \code{\link{stepacross}} with \code{\link{monoMDS}}. Function \code{\link[MASS]{isoMDS}} does not handle tied values adequately, and therefore the default is to use \code{\link{stepacross}} always when there are sites with no shared species with \code{engine = "isoMDS"}. The \code{\link{stepacross}} is triggered by option \code{noshare}. If you do not like manipulation of original distances, you should set \code{noshare = FALSE}. This step is skipped if input data were dissimilarities instead of community data. This step is performed using \code{metaMDSdist}. \item NMDS with random starts: NMDS easily gets trapped into local optima, and you must start NMDS several times from random starts to be confident that you have found the global solution. The strategy in \code{metaMDS} is to first run NMDS starting with the metric scaling (\code{\link{cmdscale}} which usually finds a good solution but often close to a local optimum), or use the \code{previous.best} solution if supplied, and take its solution as the standard (\code{Run 0}). Then \code{metaMDS} starts NMDS from several random starts (minimum number is given by \code{try} and maximum number by \code{trymax}). These random starts are generated by \code{initMDS}. If a solution is better (has a lower stress) than the previous standard, it is taken as the new standard. If the solution is better or close to a standard, \code{metaMDS} compares two solutions using Procrustes analysis (function \code{\link{procrustes}} with option \code{symmetric = TRUE}). If the solutions are very similar in their Procrustes \code{rmse} and the largest residual is very small, the solutions are regarded as convergent and the better one is taken as the new standard. The conditions are stringent, and you may have found good and relatively stable solutions although the function is not yet satisfied. Setting \code{trace = TRUE} will monitor the final stresses, and \code{plot = TRUE} will display Procrustes overlay plots from each comparison. This step is performed using \code{metaMDSiter}. This is the only step performed if input data (\code{comm}) were dissimilarities. \item Scaling of the results: \code{metaMDS} will run \code{postMDS} for the final result. Function \code{postMDS} provides the following ways of \dQuote{fixing} the indeterminacy of scaling and orientation of axes in NMDS: Centring moves the origin to the average of the axes; Principal components rotate the configuration so that the variance of points is maximized on first dimension (with function \code{\link{MDSrotate}} you can alternatively rotate the configuration so that the first axis is parallel to an environmental variable); Half-change scaling scales the configuration so that one unit means halving of community similarity from replicate similarity. Half-change scaling is based on closer dissimilarities where the relation between ordination distance and community dissimilarity is rather linear (the limit is set by argument \code{threshold}). If there are enough points below this threshold (controlled by the parameter \code{nthreshold}), dissimilarities are regressed on distances. The intercept of this regression is taken as the replicate dissimilarity, and half-change is the distance where similarity halves according to linear regression. Obviously the method is applicable only for dissimilarity indices scaled to \eqn{0 \ldots 1}, such as Kulczynski, Bray-Curtis and Canberra indices. If half-change scaling is not used, the ordination is scaled to the same range as the original dissimilarities. \item Species scores: Function adds the species scores to the final solution as weighted averages using function \code{\link{wascores}} with given value of parameter \code{expand}. The expansion of weighted averages can be undone with \code{shrink = TRUE} in \code{plot} or \code{scores} functions, and the calculation of species scores can be suppressed with \code{wascores = FALSE}. } } \section{Convergence Problems}{ The function tries hard to find two convergent solutions, but it may fail. With default \code{engine = "monoMDS"} the function will tabulate the stopping criteria used, so that you can see which criterion should be made more stringent. The criteria can be given as arguments to \code{metaMDS} and their current values are described in \code{\link{monoMDS}}. In particular, if you reach the maximum number of iterations, you should increase the value of \code{maxit}. You may ask for a larger number of random starts without losing the old ones giving the previous solution in argument \code{previous.best}. In addition to too slack convergence criteria and too low number of random starts, wrong number of dimensions (argument \code{k}) is the most common reason for not finding convergent solutions. NMDS is usually run with a low number dimensions (\code{k=2} or \code{k=3}), and for complex data increasing \code{k} by one may help. If you run NMDS with much higher number of dimensions (say, \code{k=10} or more), you should reconsider what you are doing and drastically reduce \code{k}. For very heterogeneous data sets with partial disjunctions, it may help to set \code{stepacross}, but for most data sets the default \code{weakties = TRUE} is sufficient. Please note that you can give all arguments of other \code{metaMDS*} functions and NMDS engine (default \code{\link{monoMDS}}) in your \code{metaMDS} command,and you should check documentation of these functions for details. } \value{ Function \code{metaMDS} returns an object of class \code{metaMDS}. The final site ordination is stored in the item \code{points}, and species ordination in the item \code{species}, and the stress in item \code{stress} (NB, the scaling of the stress depends on the \code{engine}: \code{\link[MASS]{isoMDS}} uses percents, and \code{\link{monoMDS}} proportions in the range \eqn{0 \ldots 1}). The other items store the information on the steps taken and the items returned by the \code{engine} function. The object has \code{print}, \code{plot}, \code{points} and \code{text} methods. Functions \code{metaMDSdist} and \code{metaMDSredist} return \code{\link{vegdist}} objects. Function \code{initMDS} returns a random configuration which is intended to be used within \code{\link[MASS]{isoMDS}} only. Functions \code{metaMDSiter} and \code{postMDS} returns the result of NMDS with updated configuration. } \references{ Faith, D. P, Minchin, P. R. and Belbin, L. (1987). Compositional dissimilarity as a robust measure of ecological distance. \emph{Vegetatio} 69, 57--68. Minchin, P.R. (1987) An evaluation of relative robustness of techniques for ecological ordinations. \emph{Vegetatio} 69, 89--107. } \author{ Jari Oksanen } \note{ Function \code{metaMDS} is a simple wrapper for an NMDS engine (either \code{\link{monoMDS}} or \code{\link[MASS]{isoMDS}}) and some support functions (\code{metaMDSdist}, \code{\link{stepacross}}, \code{metaMDSiter}, \code{initMDS}, \code{postMDS}, \code{\link{wascores}}). You can call these support functions separately for better control of results. Data transformation, dissimilarities and possible \code{\link{stepacross}} are made in function \code{metaMDSdist} which returns a dissimilarity result. Iterative search (with starting values from \code{initMDS} with \code{\link{monoMDS}}) is made in \code{metaMDSiter}. Processing of result configuration is done in \code{postMDS}, and species scores added by \code{\link{wascores}}. If you want to be more certain of reaching a global solution, you can compare results from several independent runs. You can also continue analysis from previous results or from your own configuration. Function may not save the used dissimilarity matrix (\code{\link{monoMDS}} does), but \code{metaMDSredist} tries to reconstruct the used dissimilarities with original data transformation and possible \code{\link{stepacross}}. The \code{metaMDS} function was designed to be used with community data. If you have other type of data, you should probably set some arguments to non-default values: probably at least \code{wascores}, \code{autotransform} and \code{noshare} should be \code{FALSE}. If you have negative data entries, \code{metaMDS} will set the previous to \code{FALSE} with a warning. } \section{Warning}{\code{metaMDS} uses \code{\link{monoMDS}} as its NMDS \code{engine} from \pkg{vegan} version 2.0-0, when it replaced the \code{\link[MASS]{isoMDS}} function. You can set argument \code{engine} to select the old engine.} \seealso{\code{\link{monoMDS}} (and \code{\link[MASS]{isoMDS}}), \code{\link{decostand}}, \code{\link{wisconsin}}, \code{\link{vegdist}}, \code{\link{rankindex}}, \code{\link{stepacross}}, \code{\link{procrustes}}, \code{\link{wascores}}, \code{\link{MDSrotate}}, \code{\link{ordiplot}}. } \examples{ ## The recommended way of running NMDS (Minchin 1987) ## data(dune) # Global NMDS using monoMDS sol <- metaMDS(dune) sol plot(sol, type="t") ## Start from previous best solution sol <- metaMDS(dune, previous.best = sol) ## Local NMDS and stress 2 of monoMDS sol2 <- metaMDS(dune, model = "local", stress=2) sol2 ## Use Arrhenius exponent 'z' as a binary dissimilarity measure sol <- metaMDS(dune, distfun = betadiver, distance = "z") sol } \keyword{ multivariate } vegan/man/radfit.Rd0000644000176200001440000002677113231354436013706 0ustar liggesusers\name{radfit} \alias{radfit} \alias{radfit.default} \alias{radfit.data.frame} \alias{AIC.radfit} \alias{AIC.radfit.frame} \alias{as.rad} \alias{coef.radfit} \alias{coef.radfit.frame} \alias{deviance.radfit} \alias{deviance.radfit.frame} \alias{logLik, radfit} \alias{logLik, radfit.frame} \alias{fitted.radfit} \alias{fitted.radfit.frame} \alias{lines.radline} \alias{lines.radfit} \alias{plot.radfit.frame} \alias{plot.radfit} \alias{plot.radline} \alias{plot.rad} \alias{radlattice} \alias{points.radline} \alias{points.radfit} \alias{summary.radfit.frame} \alias{rad.preempt} \alias{rad.lognormal} \alias{rad.zipf} \alias{rad.zipfbrot} \alias{rad.null} \alias{predict.radline} \alias{predict.radfit} \alias{predict.radfit.frame} \title{ Rank -- Abundance or Dominance / Diversity Models} \description{ Functions construct rank -- abundance or dominance / diversity or Whittaker plots and fit brokenstick, pre-emption, log-Normal, Zipf and Zipf-Mandelbrot models of species abundance. } \usage{ \method{radfit}{default}(x, ...) rad.null(x, family=poisson, ...) rad.preempt(x, family = poisson, ...) rad.lognormal(x, family = poisson, ...) rad.zipf(x, family = poisson, ...) rad.zipfbrot(x, family = poisson, ...) \method{predict}{radline}(object, newdata, total, ...) \method{plot}{radfit}(x, BIC = FALSE, legend = TRUE, ...) \method{plot}{radfit.frame}(x, order.by, BIC = FALSE, model, legend = TRUE, as.table = TRUE, ...) \method{plot}{radline}(x, xlab = "Rank", ylab = "Abundance", type = "b", ...) radlattice(x, BIC = FALSE, ...) \method{lines}{radfit}(x, ...) \method{points}{radfit}(x, ...) as.rad(x) \method{plot}{rad}(x, xlab = "Rank", ylab = "Abundance", log = "y", ...) } \arguments{ \item{x}{Data frame, matrix or a vector giving species abundances, or an object to be plotted.} \item{family}{Error distribution (passed to \code{\link{glm}}). All alternatives accepting \code{link = "log"} in \code{\link{family}} can be used, although not all make sense.} \item{object}{A fitted result object.} \item{newdata}{Ranks used for ordinations. All models can interpolate to non-integer \dQuote{ranks} (although this may be approximate), but extrapolation may fail} \item{total}{The new total used for predicting abundance. Observed total count is used if this is omitted.} \item{order.by}{A vector used for ordering sites in plots.} \item{BIC}{Use Bayesian Information Criterion, BIC, instead of Akaike's AIC. The penalty in BIC is \eqn{k = \log(S)}{k = log(S)} where \eqn{S} is the number of species, whereas AIC uses \eqn{k = 2}.} \item{model}{Show only the specified model. If missing, AIC is used to select the model. The model names (which can be abbreviated) are \code{Null}, \code{Preemption}, \code{Lognormal}, \code{Zipf}, \code{Mandelbrot}. } \item{legend}{Add legend of line colours.} \item{as.table}{Arrange panels starting from upper left corner (passed to \code{\link[lattice]{xyplot}}).} \item{xlab,ylab}{Labels for \code{x} and \code{y} axes.} \item{type}{Type of the plot, \code{"b"} for plotting both observed points and fitted lines, \code{"p"} for only points, \code{"l"} for only fitted lines, and \code{"n"} for only setting the frame. } \item{log}{Use logarithmic scale for given axis. The default \code{log = "y"} gives the traditional plot of community ecology where the pre-emption model is a straight line, and with \code{log = "xy"} Zipf model is a straight line. With \code{log = ""} both axes are in the original arithmetic scale.} \item{\dots}{Other parameters to functions. } } \details{ Rank--Abundance Dominance (RAD) or Dominance/Diversity plots (Whittaker 1965) display logarithmic species abundances against species rank order. These plots are supposed to be effective in analysing types of abundance distributions in communities. These functions fit some of the most popular models mainly following Wilson (1991). Functions \code{rad.null}, \code{rad.preempt}, \code{rad.lognormal}, \code{rad.zipf} and \code{zipfbrot} fit the individual models (described below) for a single vector (row of data frame), and function \code{radfit} fits all models. The argument of the function \code{radfit} can be either a vector for a single community or a data frame where each row represents a distinct community. Function \code{rad.null} fits a brokenstick model where the expected abundance of species at rank \eqn{r} is \eqn{a_r = (J/S) \sum_{x=r}^S (1/x)}{a[r] = J/S sum(from x=r to S) 1/x} (Pielou 1975), where \eqn{J} is the total number of individuals (site total) and \eqn{S} is the total number of species in the community. This gives a Null model where the individuals are randomly distributed among observed species, and there are no fitted parameters. Function \code{rad.preempt} fits the niche preemption model, a.k.a. geometric series or Motomura model, where the expected abundance \eqn{a} of species at rank \eqn{r} is \eqn{a_r = J \alpha (1 - \alpha)^{r-1}}{a[r] = J*alpha*(1-alpha)^(r-1)}. The only estimated parameter is the preemption coefficient \eqn{\alpha} which gives the decay rate of abundance per rank. The niche preemption model is a straight line in a RAD plot. Function \code{rad.lognormal} fits a log-Normal model which assumes that the logarithmic abundances are distributed Normally, or \eqn{a_r = \exp( \log \mu + \log \sigma N)}{a[r] = exp(log(mu) + log(sigma) * N)}, where \eqn{N} is a Normal deviate. Function \code{rad.zipf} fits the Zipf model \eqn{a_r = J p_1 r^\gamma}{a[r] = J*p1*r^gamma} where \eqn{p_1}{p1} is the fitted proportion of the most abundant species, and \eqn{\gamma} is a decay coefficient. The Zipf--Mandelbrot model (\code{rad.zipfbrot}) adds one parameter: \eqn{a_r = J c (r + \beta)^\gamma}{a[r] = J*c*(r+beta)^gamma} after which \eqn{p_1}{p1} of the Zipf model changes into a meaningless scaling constant \eqn{c}. Log-Normal and Zipf models are generalized linear models (\code{\link{glm}}) with logarithmic link function. Zipf--Mandelbrot adds one nonlinear parameter to the Zipf model, and is fitted using \code{\link{nlm}} for the nonlinear parameter and estimating other parameters and log-Likelihood with \code{\link{glm}}. Preemption model is fitted as a purely nonlinear model. There are no estimated parameters in the Null model. The default \code{\link{family}} is \code{poisson} which is appropriate only for genuine counts (integers), but other families that accept \code{link = "log"} can be used. Families \code{\link{Gamma}} or \code{\link{gaussian}} may be appropriate for abundance data, such as cover. The ``best'' model is selected by \code{\link{AIC}}. Therefore ``quasi'' families such as \code{\link{quasipoisson}} cannot be used: they do not have \code{\link{AIC}} nor log-Likelihood needed in non-linear models. All these functions have their own \code{plot} functions. When \code{radfit} was applied for a data frame, \code{plot} uses \code{\link[lattice]{Lattice}} graphics, and other \code{plot} functions use ordinary graphics. The ordinary graphics functions return invisibly an \code{\link{ordiplot}} object for observed points, and function \code{\link{identify.ordiplot}} can be used to label selected species. Alternatively, \code{radlattice} uses \code{\link[lattice]{Lattice}} graphics to display each \code{radfit} model of a single site in a separate panel together with their AIC or BIC values. Function \code{as.rad} is a base function to construct ordered RAD data. Its \code{plot} is used by other RAD \code{plot} functions which pass extra arguments (such as \code{xlab} and \code{log}) to this function. } \value{ Functions \code{rad.null}, \code{rad.preempt}, \code{rad.lognormal}, \code{zipf} and \code{zipfbrot} fit each a single RAD model to a single site. The result object has class \code{"radline"} and inherits from \code{\link{glm}}, and can be handled by some (but not all) \code{\link{glm}} methods. Function \code{radfit} fits all models either to a single site or to all rows of a data frame or a matrix. When fitted to a single site, the function returns an object of class \code{"radfit"} with items \code{y} (observed values), \code{\link{family}}, and \code{models} which is a list of fitted \code{"radline"} models. When applied for a data frame or matrix, \code{radfit} function returns an object of class \code{"radfit.frame"} which is a list of \code{"radfit"} objects, each item names by the corresponding row name. All result objects (\code{"radline"}, \code{"radfit"}, \code{"radfit.frame"}) can be accessed with same method functions. The following methods are available: \code{\link{AIC}}, \code{\link{coef}}, \code{\link{deviance}}, \code{\link{logLik}}. In addition the fit results can be accessed with \code{\link{fitted}}, \code{\link{predict}} and \code{\link{residuals}} (inheriting from \code{\link{residuals.glm}}). The graphical functions were discussed above in Details. } \references{ Pielou, E.C. (1975) \emph{Ecological Diversity}. Wiley & Sons. Preston, F.W. (1948) The commonness and rarity of species. \emph{Ecology} 29, 254--283. Whittaker, R. H. (1965) Dominance and diversity in plant communities. \emph{Science} 147, 250--260. Wilson, J. B. (1991) Methods for fitting dominance/diversity curves. \emph{Journal of Vegetation Science} 2, 35--46. } \author{ Jari Oksanen } \note{ The RAD models are usually fitted for proportions instead of original abundances. However, nothing in these models seems to require division of abundances by site totals, and original observations are used in these functions. If you wish to use proportions, you must standardize your data by site totals, e.g. with \code{\link{decostand}} and use appropriate \code{\link{family}} such as \code{\link{Gamma}}. The lognormal model is fitted in a standard way, but I do think this is not quite correct -- at least it is not equivalent to fitting Normal density to log abundances like originally suggested (Preston 1948). Some models may fail. In particular, estimation of the Zipf-Mandelbrot model is difficult. If the fitting fails, \code{NA} is returned. Wilson (1991) defined preemption model as \eqn{a_r = J p_1 (1 - \alpha)^{r-1}}{a[r] = J*p1*(1 - alpha)^(r-1)}, where \eqn{p_1}{p1} is the fitted proportion of the first species. However, parameter \eqn{p_1}{p1} is completely defined by \eqn{\alpha} since the fitted proportions must add to one, and therefore I handle preemption as a one-parameter model. Veiled log-Normal model was included in earlier releases of this function, but it was removed because it was flawed: an implicit veil line also appears in the ordinary log-Normal. The latest release version with \code{rad.veil} was \code{1.6-10}. } \seealso{\code{\link{fisherfit}} and \code{\link{prestonfit}}. An alternative approach is to use \code{\link{qqnorm}} or \code{\link{qqplot}} with any distribution. For controlling graphics: \code{\link[lattice]{Lattice}}, \code{\link[lattice]{xyplot}}, \code{\link[lattice]{lset}}. } \examples{ data(BCI) mod <- rad.lognormal(BCI[5,]) mod plot(mod) mod <- radfit(BCI[1,]) ## Standard plot overlaid for all models ## Pre-emption model is a line plot(mod) ## log for both axes: Zipf model is a line plot(mod, log = "xy") ## Lattice graphics separately for each model radlattice(mod) # Take a subset of BCI to save time and nerves mod <- radfit(BCI[3:5,]) mod plot(mod, pch=".") } \keyword{ univar } \keyword{ distribution } vegan/man/pcnm.Rd0000644000176200001440000001150713231354436013361 0ustar liggesusers\name{pcnm} \alias{pcnm} \alias{scores.pcnm} \title{ Principal Coordinates of Neighbourhood Matrix } \description{ This function computed classical PCNM by the principal coordinate analysis of a truncated distance matrix. These are commonly used to transform (spatial) distances to rectangular data that suitable for constrained ordination or regression. } \usage{ pcnm(dis, threshold, w, dist.ret = FALSE) } \arguments{ \item{dis}{ A distance matrix. } \item{threshold}{ A threshold value or truncation distance. If missing, minimum distance giving connected network will be used. This is found as the longest distance in the minimum spanning tree of \code{dis}. } \item{w}{Prior weights for rows.} \item{dist.ret}{Return the distances used to calculate the PCNMs.} } \details{ Principal Coordinates of Neighbourhood Matrix (PCNM) map distances between rows onto rectangular matrix on rows using a truncation threshold for long distances (Borcard & Legendre 2002). If original distances were Euclidean distances in two dimensions (like normal spatial distances), they could be mapped onto two dimensions if there is no truncation of distances. Because of truncation, there will be a higher number of principal coordinates. The selection of truncation distance has a huge influence on the PCNM vectors. The default is to use the longest distance to keep data connected. The distances above truncation threshold are given an arbitrary value of 4 times threshold. For regular data, the first PCNM vectors show a wide scale variation and later PCNM vectors show smaller scale variation (Borcard & Legendre 2002), but for irregular data the interpretation is not as clear. The PCNM functions are used to express distances in rectangular form that is similar to normal explanatory variables used in, e.g., constrained ordination (\code{\link{rda}}, \code{\link{cca}} and \code{\link{capscale}}) or univariate regression (\code{\link{lm}}) together with environmental variables (row weights should be supplied with \code{\link{cca}}; see Examples). This is regarded as a more powerful method than forcing rectangular environmental data into distances and using them in partial mantel analysis (\code{\link{mantel.partial}}) together with geographic distances (Legendre et al. 2008, but see Tuomisto & Ruokolainen 2008). The function is based on \code{pcnm} function in Dray's unreleased \pkg{spacemakeR} package. The differences are that the current function uses \code{\link{spantree}} as an internal support function. The current function also can use prior weights for rows by using weighted metric scaling of \code{\link{wcmdscale}}. The use of row weights allows finding orthonormal PCNMs also for correspondence analysis (e.g., \code{\link{cca}}). } \value{ A list of the following elements: \item{values }{Eigenvalues obtained by the principal coordinates analysis.} \item{vectors }{Eigenvectors obtained by the principal coordinates analysis. They are scaled to unit norm. The vectors can be extracted with \code{scores} function. The default is to return all PCNM vectors, but argument \code{choices} selects the given vectors.} \item{threshold}{Truncation distance.} \item{dist}{The distance matrix where values above \code{threshold} are replaced with arbitrary value of four times the threshold. String \code{"pcnm"} is added to the \code{method} attribute, and new attribute \code{threshold} is added to the distances. This is returned only when \code{dist.ret = TRUE}. } } \references{ Borcard D. and Legendre P. (2002) All-scale spatial analysis of ecological data by means of principal coordinates of neighbour matrices. \emph{Ecological Modelling} \bold{153}, 51--68. Legendre, P., Bordard, D and Peres-Neto, P. (2008) Analyzing or explaining beta diversity? Comment. \emph{Ecology} \bold{89}, 3238--3244. Tuomisto, H. & Ruokolainen, K. (2008) Analyzing or explaining beta diversity? A reply. \emph{Ecology} \bold{89}, 3244--3256. } \author{Jari Oksanen, based on the code of Stephane Dray.} \seealso{ \code{\link{spantree}}. } \examples{ ## Example from Borcard & Legendre (2002) data(mite.xy) pcnm1 <- pcnm(dist(mite.xy)) op <- par(mfrow=c(1,3)) ## Map of PCNMs in the sample plot ordisurf(mite.xy, scores(pcnm1, choi=1), bubble = 4, main = "PCNM 1") ordisurf(mite.xy, scores(pcnm1, choi=2), bubble = 4, main = "PCNM 2") ordisurf(mite.xy, scores(pcnm1, choi=3), bubble = 4, main = "PCNM 3") par(op) ## Plot first PCNMs against each other ordisplom(pcnm1, choices=1:4) ## Weighted PCNM for CCA data(mite) rs <- rowSums(mite)/sum(mite) pcnmw <- pcnm(dist(mite.xy), w = rs) ord <- cca(mite ~ scores(pcnmw)) ## Multiscale ordination: residual variance should have no distance ## trend msoplot(mso(ord, mite.xy)) } \keyword{ spatial } \keyword{ multivariate } vegan/man/designdist.Rd0000644000176200001440000001556613231354436014572 0ustar liggesusers\encoding{UTF-8} \name{designdist} \alias{designdist} \title{Design your own Dissimilarities } \description{ You can define your own dissimilarities using terms for shared and total quantities, number of rows and number of columns. The shared and total quantities can be binary, quadratic or minimum terms. In binary terms, the shared component is number of shared species, and totals are numbers of species on sites. The quadratic terms are cross-products and sums of squares, and minimum terms are sums of parallel minima and row totals. } \usage{ designdist(x, method = "(A+B-2*J)/(A+B)", terms = c("binary", "quadratic", "minimum"), abcd = FALSE, alphagamma = FALSE, name) } \arguments{ \item{x}{Input data. } \item{method}{Equation for your dissimilarities. This can use terms \code{J} for shared quantity, \code{A} and \code{B} for totals, \code{N} for the number of rows (sites) and \code{P} for the number of columns (species). The equation can also contain any \R functions that accepts vector arguments and returns vectors of the same length. } \item{terms}{How shared and total components are found. For vectors \code{x} and \code{y} the \code{"quadratic"} terms are \code{J = sum(x*y)}, \code{A = sum(x^2)}, \code{B = sum(y^2)}, and \code{"minimum"} terms are \code{J = sum(pmin(x,y))}, \code{A = sum(x)} and \code{B = sum(y)}, and \code{"binary"} terms are either of these after transforming data into binary form (shared number of species, and number of species for each row). } \item{abcd}{Use 2x2 contingency table notation for binary data: \eqn{a} is the number of shared species, \eqn{b} and \eqn{c} are the numbers of species occurring only one of the sites but not in both, and \eqn{d} is the number of species that occur on neither of the sites.} \item{alphagamma}{Use beta diversity notation with terms \code{alpha} for average alpha diversity for compared sites, \code{gamma} for diversity in pooled sites, and \code{delta} for the absolute value of difference of average \code{alpha} and alpha diversities of compared sites. Terms \code{A} and \code{B} refer to alpha diversities of compared sites.} \item{name}{The name you want to use for your index. The default is to combine the \code{method} equation and \code{terms} argument.} } \details{ Most popular dissimilarity measures in ecology can be expressed with the help of terms \code{J}, \code{A} and \code{B}, and some also involve matrix dimensions \code{N} and \code{P}. Some examples you can define in \code{designdist} are: \tabular{lll}{ \code{A+B-2*J} \tab \code{"quadratic"} \tab squared Euclidean \cr \code{A+B-2*J} \tab \code{"minimum"} \tab Manhattan \cr \code{(A+B-2*J)/(A+B)} \tab \code{"minimum"} \tab Bray-Curtis \cr \code{(A+B-2*J)/(A+B)} \tab \code{"binary"} \tab \enc{Sørensen}{Sorensen} \cr \code{(A+B-2*J)/(A+B-J)} \tab \code{"binary"} \tab Jaccard \cr \code{(A+B-2*J)/(A+B-J)} \tab \code{"minimum"} \tab \enc{Ružička}{Ruzicka} \cr \code{(A+B-2*J)/(A+B-J)} \tab \code{"quadratic"} \tab (dis)similarity ratio \cr \code{1-J/sqrt(A*B)} \tab \code{"binary"} \tab Ochiai \cr \code{1-J/sqrt(A*B)} \tab \code{"quadratic"} \tab cosine complement \cr \code{1-phyper(J-1, A, P-A, B)} \tab \code{"binary"} \tab Raup-Crick (but see \code{\link{raupcrick}}) } The function \code{designdist} can implement most dissimilarity indices in \code{\link{vegdist}} or elsewhere, and it can also be used to implement many other indices, amongst them, most of those described in Legendre & Legendre (2012). It can also be used to implement all indices of beta diversity described in Koleff et al. (2003), but there also is a specific function \code{\link{betadiver}} for the purpose. If you want to implement binary dissimilarities based on the 2x2 contingency table notation, you can set \code{abcd = TRUE}. In this notation \code{a = J}, \code{b = A-J}, \code{c = B-J}, \code{d = P-A-B+J}. This notation is often used instead of the more more tangible default notation for reasons that are opaque to me. With \code{alphagamma = TRUE} it is possible to use beta diversity notation with terms \code{alpha} for average alpha diversity and \code{gamma} for gamma diversity in two compared sites. The terms are calculated as \code{alpha = (A+B)/2}, \code{gamma = A+B-J} and \code{delta = abs(A-B)/2}. Terms \code{A} and \code{B} are also available and give the alpha diversities of the individual compared sites. The beta diversity terms may make sense only for binary terms (so that diversities are expressed in numbers of species), but they are calculated for quadratic and minimum terms as well (with a warning). } \value{ \code{designdist} returns an object of class \code{\link{dist}}. } \references{ Koleff, P., Gaston, K.J. and Lennon, J.J. (2003) Measuring beta diversity for presence--absence data. \emph{J. Animal Ecol.} \strong{72}, 367--382. Legendre, P. and Legendre, L. (2012) \emph{Numerical Ecology}. 3rd English ed. Elsevier } \author{ Jari Oksanen } \note{ \code{designdist} does not use compiled code, but it is based on vectorized \R{} code. The \code{designdist} function can be much faster than \code{\link{vegdist}} with \code{terms = "quadratic"} or \code{terms = "binary"}, and nearly as fast as \code{\link{vegdist}} with \code{terms = "minimum"}, although the latter uses compiled code. However, \code{designdist} cannot handle missing values and uses much more memory during calculations. The use of sum terms can be numerically unstable. In particularly, when these terms are large, the precision may be lost. The risk is large when the number of columns is high, and particularly large with quadratic terms. For precise calculations it is better to use functions like \code{\link{dist}} and \code{\link{vegdist}} which are more robust against numerical problems. } \seealso{ \code{\link{vegdist}}, \code{\link{betadiver}}, \code{\link{dist}}, \code{\link{raupcrick}}.} \examples{ data(BCI) ## Four ways of calculating the same Sørensen dissimilarity d0 <- vegdist(BCI, "bray", binary = TRUE) d1 <- designdist(BCI, "(A+B-2*J)/(A+B)") d2 <- designdist(BCI, "(b+c)/(2*a+b+c)", abcd = TRUE) d3 <- designdist(BCI, "gamma/alpha - 1", alphagamma = TRUE) ## Arrhenius dissimilarity: the value of z in the species-area model ## S = c*A^z when combining two sites of equal areas, where S is the ## number of species, A is the area, and c and z are model parameters. ## The A below is not the area (which cancels out), but number of ## species in one of the sites, as defined in designdist(). dis <- designdist(BCI, "(log(A+B-J)-log(A+B)+log(2))/log(2)") ## This can be used in clustering or ordination... ordiplot(cmdscale(dis)) ## ... or in analysing beta diversity (without gradients) summary(dis) } \keyword{multivariate } vegan/man/specaccum.Rd0000644000176200001440000003373013231354436014371 0ustar liggesusers\name{specaccum} \alias{specaccum} \alias{print.specaccum} \alias{summary.specaccum} \alias{plot.specaccum} \alias{lines.specaccum} \alias{boxplot.specaccum} \alias{fitspecaccum} \alias{plot.fitspecaccum} \alias{lines.fitspecaccum} \alias{predict.specaccum} \alias{predict.fitspecaccum} \alias{AIC.fitspecaccum} \alias{deviance.fitspecaccum} \alias{logLik.fitspecaccum} \alias{nobs.fitspecaccum} \alias{specslope} \title{Species Accumulation Curves} \description{ Function \code{specaccum} finds species accumulation curves or the number of species for a certain number of sampled sites or individuals. } \usage{ specaccum(comm, method = "exact", permutations = 100, conditioned =TRUE, gamma = "jack1", w = NULL, subset, ...) \method{plot}{specaccum}(x, add = FALSE, random = FALSE, ci = 2, ci.type = c("bar", "line", "polygon"), col = par("fg"), lty = 1, ci.col = col, ci.lty = 1, xlab, ylab = x$method, ylim, xvar = c("sites", "individuals", "effort"), ...) \method{boxplot}{specaccum}(x, add = FALSE, ...) fitspecaccum(object, model, method = "random", ...) \method{plot}{fitspecaccum}(x, col = par("fg"), lty = 1, xlab = "Sites", ylab = x$method, ...) \method{predict}{specaccum}(object, newdata, interpolation = c("linear", "spline"), ...) \method{predict}{fitspecaccum}(object, newdata, ...) specslope(object, at) } \arguments{ \item{comm}{Community data set.} \item{method}{Species accumulation method (partial match). Method \code{"collector"} adds sites in the order they happen to be in the data, \code{"random"} adds sites in random order, \code{"exact"} finds the expected (mean) species richness, \code{"coleman"} finds the expected richness following Coleman et al. 1982, and \code{"rarefaction"} finds the mean when accumulating individuals instead of sites. } \item{permutations}{Number of permutations with \code{method = "random"}. Usually an integer giving the number permutations, but can also be a list of control values for the permutations as returned by the function \code{\link[permute]{how}}, or a permutation matrix where each row gives the permuted indices. } \item{conditioned}{ Estimation of standard deviation is conditional on the empirical dataset for the exact SAC} \item{gamma}{Method for estimating the total extrapolated number of species in the survey area by function \code{\link{specpool}}} \item{w}{Weights giving the sampling effort.} \item{subset}{logical expression indicating sites (rows) to keep: missing values are taken as \code{FALSE}.} \item{x}{A \code{specaccum} result object} \item{add}{Add to an existing graph.} \item{random}{Draw each random simulation separately instead of drawing their average and confidence intervals.} \item{ci}{Multiplier used to get confidence intervals from standard deviation (standard error of the estimate). Value \code{ci = 0} suppresses drawing confidence intervals.} \item{ci.type}{Type of confidence intervals in the graph: \code{"bar"} draws vertical bars, \code{"line"} draws lines, and \code{"polygon"} draws a shaded area.} \item{col}{Colour for drawing lines.} \item{lty}{line type (see \code{\link{par}}).} \item{ci.col}{Colour for drawing lines or filling the \code{"polygon"}.} \item{ci.lty}{Line type for confidence intervals or border of the \code{"polygon"}.} \item{xlab,ylab}{Labels for \code{x} (defaults \code{xvar}) and \code{y} axis.} \item{ylim}{the y limits of the plot.} \item{xvar}{Variable used for the horizontal axis: \code{"individuals"} can be used only with \code{method = "rarefaction"}. } \item{object}{Either a community data set or fitted \code{specaccum} model.} \item{model}{Nonlinear regression model (\code{\link{nls}}). See Details.} \item{newdata}{Optional data used in prediction interpreted as number of sampling units (sites). If missing, fitted values are returned. } \item{interpolation}{Interpolation method used with \code{newdata}.} \item{at}{Number of plots where the slope is evaluated. Can be a real number.} \item{...}{Other parameters to functions.} } \details{ Species accumulation curves (SAC) are used to compare diversity properties of community data sets using different accumulator functions. The classic method is \code{"random"} which finds the mean SAC and its standard deviation from random permutations of the data, or subsampling without replacement (Gotelli & Colwell 2001). The \code{"exact"} method finds the expected SAC using sample-based rarefaction method that has been independently developed numerous times (Chiarucci et al. 2008) and it is often known as Mao Tau estimate (Colwell et al. 2012). The unconditional standard deviation for the exact SAC represents a moment-based estimation that is not conditioned on the empirical data set (sd for all samples > 0). The unconditional standard deviation is based on an estimation of the extrapolated number of species in the survey area (a.k.a. gamma diversity), as estimated by function \code{\link{specpool}}. The conditional standard deviation that was developed by Jari Oksanen (not published, sd=0 for all samples). Method \code{"coleman"} finds the expected SAC and its standard deviation following Coleman et al. (1982). All these methods are based on sampling sites without replacement. In contrast, the \code{method = "rarefaction"} finds the expected species richness and its standard deviation by sampling individuals instead of sites. It achieves this by applying function \code{\link{rarefy}} with number of individuals corresponding to average number of individuals per site. Methods \code{"random"} and \code{"collector"} can take weights (\code{w}) that give the sampling effort for each site. The weights \code{w} do not influence the order the sites are accumulated, but only the value of the sampling effort so that not all sites are equal. The summary results are expressed against sites even when the accumulation uses weights (methods \code{"random"}, \code{"collector"}), or is based on individuals (\code{"rarefaction"}). The actual sampling effort is given as item \code{Effort} or \code{Individuals} in the printed result. For weighted \code{"random"} method the effort refers to the average effort per site, or sum of weights per number of sites. With weighted \code{method = "random"}, the averaged species richness is found from linear interpolation of single random permutations. Therefore at least the first value (and often several first) have \code{NA} richness, because these values cannot be interpolated in all cases but should be extrapolated. The \code{plot} function defaults to display the results as scaled to sites, but this can be changed selecting \code{xvar = "effort"} (weighted methods) or \code{xvar = "individuals"} (with \code{method = "rarefaction"}). The \code{summary} and \code{boxplot} methods are available for \code{method = "random"}. Function \code{predict} for \code{specaccum} can return the values corresponding to \code{newdata}. With \code{method} \code{"exact"}, \code{"rarefaction"} and \code{"coleman"} the function uses analytic equations for interpolated non-integer values, and for other methods linear (\code{\link{approx}}) or spline (\code{\link{spline}}) interpolation. If \code{newdata} is not given, the function returns the values corresponding to the data. NB., the fitted values with \code{method="rarefaction"} are based on rounded integer counts, but \code{predict} can use fractional non-integer counts with \code{newdata} and give slightly different results. Function \code{fitspecaccum} fits a nonlinear (\code{\link{nls}}) self-starting species accumulation model. The input \code{object} can be a result of \code{specaccum} or a community in data frame. In the latter case the function first fits a \code{specaccum} model and then proceeds with fitting the nonlinear model. The function can apply a limited set of nonlinear regression models suggested for species-area relationship (Dengler 2009). All these are \code{\link{selfStart}} models. The permissible alternatives are \code{"arrhenius"} (\code{\link{SSarrhenius}}), \code{"gleason"} (\code{\link{SSgleason}}), \code{"gitay"} (\code{\link{SSgitay}}), \code{"lomolino"} (\code{\link{SSlomolino}}) of \pkg{vegan} package. In addition the following standard \R models are available: \code{"asymp"} (\code{\link{SSasymp}}), \code{"gompertz"} (\code{\link{SSgompertz}}), \code{"michaelis-menten"}) (\code{\link{SSmicmen}}), \code{"logis"} (\code{\link{SSlogis}}), \code{"weibull"} (\code{\link{SSweibull}}). See these functions for model specification and details. When weights \code{w} were used the fit is based on accumulated effort and in \code{model = "rarefaction"} on accumulated number of individuals. The \code{plot} is still based on sites, unless other alternative is selected with \code{xvar}. Function \code{predict} for \code{fitspecaccum} uses \code{\link{predict.nls}}, and you can pass all arguments to that function. In addition, \code{fitted}, \code{residuals}, \code{nobs}, \code{coef}, \code{AIC}, \code{logLik} and \code{deviance} work on the result object. Function \code{specslope} evaluates the derivative of the species accumulation curve at given number of sample plots, and gives the rate of increase in the number of species. The function works with \code{specaccum} result object when this is based on analytic models \code{"exact"}, \code{"rarefaction"} or \code{"coleman"}, and with non-linear regression results of \code{fitspecaccum}. Nonlinear regression may fail for any reason, and some of the \code{fitspecaccum} models are fragile and may not succeed. } \value{ Function \code{specaccum} returns an object of class \code{"specaccum"}, and \code{fitspecaccum} a model of class \code{"fitspecaccum"} that adds a few items to the \code{"specaccum"} (see the end of the list below): \item{call }{Function call.} \item{method}{Accumulator method.} \item{sites}{Number of sites. For \code{method = "rarefaction"} this is the number of sites corresponding to a certain number of individuals and generally not an integer, and the average number of individuals is also returned in item \code{individuals}.} \item{effort}{Average sum of weights corresponding to the number of sites when model was fitted with argument \code{w}} \item{richness}{The number of species corresponding to number of sites. With \code{method = "collector"} this is the observed richness, for other methods the average or expected richness.} \item{sd}{The standard deviation of SAC (or its standard error). This is \code{NULL} in \code{method = "collector"}, and it is estimated from permutations in \code{method = "random"}, and from analytic equations in other methods.} \item{perm}{Permutation results with \code{method = "random"} and \code{NULL} in other cases. Each column in \code{perm} holds one permutation.} \item{weights}{Matrix of accumulated weights corresponding to the columns of the \code{perm} matrix when model was fitted with argument \code{w}.} \item{fitted, residuals, coefficients}{Only in \code{fitspecacum}: fitted values, residuals and nonlinear model coefficients. For \code{method = "random"} these are matrices with a column for each random accumulation.} \item{models}{Only in \code{fitspecaccum}: list of fitted \code{\link{nls}} models (see Examples on accessing these models).} } \references{ Chiarucci, A., Bacaro, G., Rocchini, D. & Fattorini, L. (2008). Discovering and rediscovering the sample-based rarefaction formula in the ecological literature. \emph{Commun. Ecol.} 9: 121--123. Coleman, B.D, Mares, M.A., Willis, M.R. & Hsieh, Y. (1982). Randomness, area and species richness. \emph{Ecology} 63: 1121--1133. Colwell, R.K., Chao, A., Gotelli, N.J., Lin, S.Y., Mao, C.X., Chazdon, R.L. & Longino, J.T. (2012). Models and estimators linking individual-based and sample-based rarefaction, extrapolation and comparison of assemblages. \emph{J. Plant Ecol.} 5: 3--21. Dengler, J. (2009). Which function describes the species-area relationship best? A review and empirical evaluation. \emph{Journal of Biogeography} 36, 728--744. Gotelli, N.J. & Colwell, R.K. (2001). Quantifying biodiversity: procedures and pitfalls in measurement and comparison of species richness. \emph{Ecol. Lett.} 4, 379--391. } \author{Roeland Kindt \email{r.kindt@cgiar.org} and Jari Oksanen.} \note{ The SAC with \code{method = "exact"} was developed by Roeland Kindt, and its standard deviation by Jari Oksanen (both are unpublished). The \code{method = "coleman"} underestimates the SAC because it does not handle properly sampling without replacement. Further, its standard deviation does not take into account species correlations, and is generally too low. } \seealso{\code{\link{rarefy}} and \code{\link{rrarefy}} are related individual based models. Other accumulation models are \code{\link{poolaccum}} for extrapolated richness, and \code{\link{renyiaccum}} and \code{\link{tsallisaccum}} for diversity indices. Underlying graphical functions are \code{\link{boxplot}}, \code{\link{matlines}}, \code{\link{segments}} and \code{\link{polygon}}. } \examples{ data(BCI) sp1 <- specaccum(BCI) sp2 <- specaccum(BCI, "random") sp2 summary(sp2) plot(sp1, ci.type="poly", col="blue", lwd=2, ci.lty=0, ci.col="lightblue") boxplot(sp2, col="yellow", add=TRUE, pch="+") ## Fit Lomolino model to the exact accumulation mod1 <- fitspecaccum(sp1, "lomolino") coef(mod1) fitted(mod1) plot(sp1) ## Add Lomolino model using argument 'add' plot(mod1, add = TRUE, col=2, lwd=2) ## Fit Arrhenius models to all random accumulations mods <- fitspecaccum(sp2, "arrh") plot(mods, col="hotpink") boxplot(sp2, col = "yellow", border = "blue", lty=1, cex=0.3, add= TRUE) ## Use nls() methods to the list of models sapply(mods$models, AIC) } \keyword{univar} \keyword{models} vegan/man/BCI.Rd0000644000176200001440000001131413231354436013015 0ustar liggesusers\encoding{UTF-8} \name{BCI} \alias{BCI} \alias{BCI.env} \docType{data} \title{Barro Colorado Island Tree Counts} \description{ Tree counts in 1-hectare plots in the Barro Colorado Island and associated site information. } \usage{ data(BCI) data(BCI.env) } \format{ A data frame with 50 plots (rows) of 1 hectare with counts of trees on each plot with total of 225 species (columns). Full Latin names are used for tree species. The names were updated against \url{http://www.theplantlist.org} and Kress et al. (2009) which allows matching 207 of species against \url{http://datadryad.org/resource/doi:10.5061/dryad.63q27} (Zanne et al., 2014). The original species names are available as attribute \code{original.names} of \code{BCI}. See Examples for changed names. For \code{BCI.env}, a data frame with 50 plots (rows) and nine site variables derived from Pyke et al. (2001) and Harms et al. (2001): \describe{ \item{\code{UTM.EW}: }{UTM coordinates (zone 17N) East-West.} \item{\code{UTM.NS}: }{UTM coordinates (zone 17N) North-South.} \item{\code{Precipitation}: }{Precipitation in mm per year.} \item{\code{Elevation}: }{Elevation in m above sea level.} \item{\code{Age.cat}: }{Forest age category.} \item{\code{Geology}: }{The Underlying geological formation.} \item{\code{Habitat}: }{Dominant habitat type based on the map of habitat types in 25 grid cells in each plot (Harms et al. 2001, excluding streamside habitat). The habitat types are \code{Young} forests (\emph{ca.} 100 years), old forests on > 7 degree slopes (\code{OldSlope}), old forests under 152 m elevation (\code{OldLow}) and at higher elevation (\code{OldHigh}) and \code{Swamp} forests.} \item{\code{River}: }{\code{"Yes"} if there is streamside habitat in the plot.} \item{\code{EnvHet}: }{Environmental Heterogeneity assessed as the Simpson diversity of frequencies of \code{Habitat} types in 25 grid cells in the plot.} } } \details{ Data give the numbers of trees at least 10 cm in diameter at breast height (1.3 m above the ground) in each one hectare square of forest. Within each one hectare square, all individuals of all species were tallied and are recorded in this table. The data frame contains only the Barro Colorado Island subset of the original data. The quadrats are located in a regular grid. See \code{BCI.env} for the coordinates. A full description of the site information in \code{BCI.env} is given in Pyke et al. (2001) and Harms et al. (2001). \emph{N.B.} Pyke et al. (2001) and Harms et al. (2001) give conflicting information about forest age categories and elevation. } \source{ \url{http://www.sciencemag.org/cgi/content/full/295/5555/666/DC1} for community data and References for environmental data. } \seealso{ Extra-CRAN package \pkg{natto} (\url{https://github.com/jarioksa/natto}) has data set \code{BCI.env2} with original grid data of Harms et al. (2001) habitat classification, and data set \code{BCI.taxon} of APG III classification of tree species. } \references{ Condit, R, Pitman, N, Leigh, E.G., Chave, J., Terborgh, J., Foster, R.B., \enc{Nuñez}{Nunez}, P., Aguilar, S., Valencia, R., Villa, G., Muller-Landau, H.C., Losos, E. & Hubbell, S.P. (2002). Beta-diversity in tropical forest trees. \emph{Science} 295, 666--669. Harms K.E., Condit R., Hubbell S.P. & Foster R.B. (2001) Habitat associations of trees and shrubs in a 50-ha neotropical forest plot. \emph{J. Ecol.} 89, 947--959. Kress W.J., Erickson D.L, Jones F.A., Swenson N.G, Perez R., Sanjur O. & Bermingham E. (2009) Plant DNA barcodes and a community phylogeny of a tropical forest dynamics plot in Panama. \emph{PNAS} 106, 18621--18626. Zanne A.E., Tank D.C., Cornwell, W.K., Eastman J.M., Smith, S.A., FitzJohn, R.G., McGlinn, D.J., O’Meara, B.C., Moles, A.T., Reich, P.B., Royer, D.L., Soltis, D.E., Stevens, P.F., Westoby, M., Wright, I.J., Aarssen, L., Bertin, R.I., Calaminus, A., Govaerts, R., Hemmings, F., Leishman, M.R., Oleksyn, J., Soltis, P.S., Swenson, N.G., Warman, L. & Beaulieu, J.M. (2014) Three keys to the radiation of angiosperms into freezing environments. \emph{Nature} 506, 89--92. doi:10.1038/nature12872 (published online Dec 22, 2013). Pyke, C. R., Condit, R., Aguilar, S., & Lao, S. (2001). Floristic composition across a climatic gradient in a neotropical lowland forest. \emph{Journal of Vegetation Science} 12, 553--566. doi:10.2307/3237007 } \examples{ data(BCI, BCI.env) head(BCI.env) ## see changed species names oldnames <- attr(BCI, "original.names") taxa <- cbind("Old Names" = oldnames, "Current Names" = names(BCI)) noquote(taxa[taxa[,1] != taxa[,2], ]) } \keyword{datasets}

u=:ML?/9c%|^Sx.~>9y/wfJvʊOUވriNNQVq}r1ݍ4% hAzRSw?0HVKsχBJ:T=¯>'&h>ZfŌ 3R22|s!3"Cո}{ڝ=rͬ3 ;sWs|d󈂟o7RJ]j y1 .i{q"3Gu?=4HշtJNZ%'[7W6O$nHN>}U`5 2).YpzQ"AfBi̱8d>բU<_ް;!)$'ی?KҘ%|ȏ @KT%0k2o= xk#,Q|A38d^rBDŊ1@-oGUsܛM{k]qZ&K_ v l@`s@jPlgt}CmFh;Dm)aA{ Rӗo|GBHgB|.OF/L"I$<+J-l5qSgъ9ęiN|-hT9RD: 7z?w995Kr[/WHYРaXŵ#aDV ^VD1`>gc,;ɊhO9:Ym sm*6Rmz&gPq~s2kA>U@jIN>Ǵ }VU'-l{/,W:&;. z푾GȸE2)Pm]OdH'y﹦s;_ky>?O1TYΎ鈐+띮5:;m-Klt%m7ɑ\?z7xΉW >H貇Ǵ^U"+?"2,f&Yx} fxC:oד~@;>7Ij sH8t@s%8 yiFL|O@÷;&\* hvFm;:7 xDLrYW\%@EJ(2r]&;d7C-߀uu:v -m!*@,7?=!|Ns1d/A4ƴ}\E:e1: e%l`bAuwޛ.GN/D#tq80r%̀OI)1\.F%}<6) zGvg*A>2HR00B*JP 4-[Ax!x6]+2tgh}_t{2:[y^/j{O+n2()n$G0xǻ{ᵝ 9ׂA& {6#rI~b2BbLztQ_)XMd+ux R [G԰钖3$d5GqILG kAw Hwv)< sDgK^ N!k,D@ Q4h,m͛rKpR׻ZNٮ %7IN剝"o~@Q]wwmԕ),Xg^EOr =`zoV b.i8m퍴SB-/K1g7IN㼺Tl U j4¦nBˮd!U?*'P^:6> %:9Z""QO=ֵ=w *}XĔmZFb;KR\Vȸb>,}+sQss8TmhrF82u:,qkO|-9_zy2Ʉ4ET"gz,k2<5_GeY6fK{3*kV. Jv[sZ68tAbBǤ|bfmݚYH {Ѽufj|We83GD&p3"}bA[ȏh Vo"q)r/ vC O]z_89ɾ? f|ͱ,e 7WSN)jRoFTKbĬ}rDeFGak> k*oZ*uԝW2>W%?&.gQv~Z[*̫51KXo</]:r`yogf̓#DzYov$Џ4JǛꓠa}i qWAjnO˘%[nBg>l>q(ֱyn:5%j3̫l+`:.,z]@2~d!z endstream endobj 478 0 obj << /Length1 1851 /Length2 13440 /Length3 0 /Length 14600 /Filter /FlateDecode >> stream xڍPҀ A] 6ABnA_ޢ ާ^URiHX:eVvA;V GBtq9e!4ʤ ʎ`;7{WO.CGA; xJ9:ym y ``p1p,e3 5=@xOaIÃZ4@w%*f[cEhـ\Rh:ZA<\W=v}uq[] JU' /c # XUY%V'` dofjgfY ukjr0,rtp!(' rZߗkv@`K?ڰtsb݀ ۼPY!vvv~N~a#O%|Vm@V?(>f@ o dA`V<_Ǐ^'lW̦g wUJJ:z|Xx,<NnQ3]ǿ|V}= 0 :@?nno:"Y7{? @^[Nu _wMu2 m[N4 7+;_r,hX55ɵ7{ ybg?%{}E\_GOu7 ey+|8^0XWk~+G?.&/IC|6H&_^W?O`Slkkfƴ/qnlB_ `6b_~=/'W_Zݿ0ke>+ /|ܯ;.Zx_Z/||M'X>8|@OҼPmmHm_QH2ARw\yы];w8/Mvzv?|Ӣ ̷}'qD]8w;; L'3g2+o*lND#s|V)Y#13ۡ@z.>~Lv.ogr)34h3eƁn^EI v Cӳ $BXg;s\DEΣtGf՘+Q9jާZ6A6}K&g2M#P}Wr]@V3O-[#F/!u0Dޏ5A/)/d5V Qe~91̡>u#'?Ģivֹ֖_$]hjU?~ v u^V[]<2nSWb+/EWO H19`I@ Za9Tyopᅱ Uv읪g&A!f7`ߟs'y5P y \l-DRgF70㏨+ߏک|e[,H@eNɦABEB£ePkԸ:% PܚݓŠRiME-rtů Xe0Pٵ^Cvq2T+e5[':mg×5I8tQ}"+]3-[KOO_1qJeNSl\L[”eY_~(6| <@nz2O9JRfzgqIqc~_0zURـGdo*'AUE?J5es&LJSiCL& Qkb"*$Mn9۪ĕlg}!Mʐf b4Y'@ "K죹݋>ymY2iTX_,zc"x:̈u/fAhg48? sP2X>^TlgSl/yPЫ2@!c:@N t:u~wOἿHD]PYʧt. \4diþٶ"Yx@76%#6%{<{qE@>U(L?W[qꌥ${!wuIqn5M+MyK l0'}Ln̹@[d՛5X{Vp$L#aď[UcQRLצjq웷,bNJގҸ/LNF߷JJ.: PnuA.RG T:ft CDb}"oJ_O'& -Gp Eb gh "]SK9*<8$h#4lTGPxVE_ys(h5hlKy)NFdY(\Sf_?T7hp[Rꯌ )G"'YmVB#u3=KW+*\9eJ\ڼm)0Wa96ֶ̯+圗+d)1Ѳ.R:\lt{;1za*Y=:eY 3º0vRQD#}JB(jNoGӈ<rs ?J;0ե%@6ƊnơZ8 2 ]({޿a1!!DZcDT+#NLWp v}c:ÓU4!2rRNߥ'f>gpBi'C[2r/ p~;RcnL_{_l:/Bi jFț[{^ ͏,3A^<$ LX-r*FAa.im/{.O2$нB4-%ѩfdeQP˗w ^FwH[P܏컻P8 q~29$qԖŃ@߸i*QdcIrCUs쵉o?w0n^S(q iCeW$8`jm߫&Ŭv$ GKџ΁3ֻ؊}iRuinu$M!G9l^@,-y5)?~ >;t*vNon bޡu>0H4' 8mqs~j+3Q$]3]012jWyxWhr/l䋴ل+c<[Lf0PO1_D7_9fc̛`Х FdMa;+o,v] N^ MQog:MK%(]=of~#䑇0@wSY]Pm}kܣ]ܶYdeD)Y<ԣGe!OvRO%a8#z`dLآ';-ܜ<@ ?=y [=(6)< xO s-*#f.nnYmqAFDcC&Fr1'1c=?i>9/=%䠃ֺ=ުG̹Σ-k0fzb]wdg @vcu].# LÅǖc5T8qf:qEØ0,zLs3׉i-Y@5Dr㇈otb 'NQ=r1ißPIND1/Mȳ'{P|B:a);^1pEGS$dnDyh)mZbz'?ٷHI  u]Jf'K@Pc6t022GsXuM]L,:5)GVKD4 o`7Z:Q::oRDj {o m<5DAiD+ǽL/f?q+:XiU=g1Ib{k[w6Y|s7_{-f:١XfqP!2盒Yեރ3E$5D +;y9S”k^{L %9 6z)[>XD"GC1tU~MԙoVQDv| 83gGt (=$RRל foE\"*VwQ: ְ۩i.,&uvi(jaFIS[Vd1z;8iֺ&Dr^jU$8>ӊcg, pZ)ʦNr87F$]bѡ^HQErThBȕԤ@-oUV~*Q U&OL`E=3N{XX7C" /~k`o'h[r-:JXHK^;m|ҌpZ2XE9J"& 8@\C2 @jjKJõ));EPwf k]y#IHz8+\'z{T~j}_՟GtZ\g;d[gB':8;~qȪ!jf O0҇-*nH][^Io#$VĩYUktx$8qy7`~~&}#ywoBT).7>}_i9>OX{{%c[7ΑIvlMEV>WZU̬ZJLC,vA+K N[&_3L{ʤ@Pן 9Ե"?nrPmTڼj}2ӟRZQ=+̿zWK FXo݆^ Yn#⥎@a*L+!pol ;GH۶/z~5 U(OT vD[&y7%uvF6R0lܮS,H+ ^PYa?NRf]K92pfЬ maE*q|Z@9{H'vu>Z`wEѷrqK[>BR@{ =6sb8o|\ 01\ ˘D4j/3MEQ(d P. _@y;<&q6+Tu8aŅޑƹh[ w .IY[0LW%4QXsSLr۳}ӀeU2ɱGɉ2 ~fN7"f&lzT`040jTִ^q%1@-,J U*-QiNFz{uDSsʑj\jQKm!up絛"R&&UXf%KXtey(Ar+$tO%[ڣ)EݧD6};xG6@p: B69-ȏ M$nԢQP|qct[ynO/ >5E1gd;,zUNa@NBj#`& p%x mޤ89ef_oelAL:Qk+ R3E3^:?=[z175}y$2:$+w(<=M.7F4p˜7 *hW?^mϸtw4D/e1C0 }L?0e!fMDB%$;s ӊW]bi?!8L7 0Y`+ i~p 4mq˿vT`qWS՞6Y4|;?5,a_a3G6g.'GrG(q;0#n\i47i1TbFw/G2_47礯`(|0׾,k 3tuFk߳Ģ^@ }P],^BLZNiH'dd2 tj$|6MfRH?Q#Yp#}V}?|=D@*/>۪L!o}JBf K%R憌Y~5^%.Fa~MͫSu:됞?$$R]q Ds&&Ekv `Um"SkY_L'& #xU>4M4zB"D]7ܽVE08.k2^JƮHB"ĺ vÂ(ZPGU3OjcBF MW%<+ 2Q UhzQGW%~7S=JQ\CX_譟,|hIQ}(={DS2<ڐ]6ΏH>˰e{B4d&=-'8}]+eGง3<WWr6GʧQ5x '*[H :O @fT :5wQcd;UdOs ˃IjGDF㸹? Qokku}|zlMu4w%{M2R K6hDk/6M2,iZzFLs5JvFD~*9)JY*j V$; zI3[iD ;8d ƳlWEs92VdfuUWoiwT< 8uZoa>–'~艦+7s (혢FϘd /בw(Owf{f=t-#his g%R=-[| M >a=qH*|p|a++JT/MIѨխВ*L=uq)ʨiNۙQWB#2kYy!5梐<zo2*F]_q#8fvMmvNr.վ[FrH)u rQFycۜFv1J iߧ#Ƣrnp[: ]\bP-^:x75YApE GKc}$}%׮*_y3><:rEgtrwعpӍA4S/.lr~=6lRZMKo*enSY6fgܖW2YL&lDYD52)84F>{鉶.ul+"LVwcډ2U1c_t4o*} 5v!_pdYl5+N>߰ޣ0nCLsi >IZ콹r}1>FQaV>Ey&97 CDuO`{ M.0sB<5QTi"0.6w4OՂcFdj7uN9ã {&#f ^ {gu ˃O}6#ۙ98FƄvu^L 0r5lQBS",~N3#vNt#%}+|qVq ˇ$qCZDx>otqjdZbELX$yEvєN#'CwTʏtKaMP$}ڻ"yF<:odYgk t#b3j. - >*:tBTS8DivL>@W&?S gg7Q I` Xԅ,`ڻe|1 jɎkQ\FHG˛^)&2opߛ eJr'sf0'QߒDZp+hKxkOm5t3CvWA^Enn?H<$ze9n?Kʋ#V*\:'"tC#!/4ÎwЊC%pL}QY FI[31ST:FL g;+mEoj.1!W9> xy\ͣ\ˀTb#59+& ~U+MvkN?cH;s?H3\;Ϣ\p2 eɳMI>4vqYRGC^/Ӳ}4R0%@N5|Zx}1liP/-."#imvLjUgKZun pL%kf&+lZڌOP7 'V.r0 : [EP_0+7x]Fs=mSw D FkW1!H86J,3A(]7W!>YKjM $_KٛVD{ a9c>nRp Y35I8! dIuY_5}O%$'=ˍ >BY\R}AܤAe):Ҿ^oxj&>coݎi>@Z{$zÅ?1^-rR@Ӆ`6Py7 iU19*!0%3W$="P Y#MpP3?K~d̾]+DQݚfbEWPF'0N= Nb$қ ֜qk3{  j+\vr!;FPl;5 K=thkR3v=&Ϋ4c I$[uW{ ::=G5KL*œp+@{jqX]#8M*ٟLy/$g.FRq,Ihōئe3tœ;T4A`$ڛ:@=a=9JIVۛ)XÕ} ?ԱȔu?0fB^19[Y* 9]l*aw6^Xk΋\xǢÄx*NPz9m)Z+u}wG j6 o?ddZm 3 #Sܣy| %[^ޗ:Kod7`akGF10NGN` Do¢E"!^8CbUY,Il`@J}T^}/EixD'xߚeC1yQtq,+m[S3PDal蝅*/I/VPYdw.3S/D5u6e “e'g@XatXgwӈ0x 7ʜk_쉻0f1gu\&zoKn_+_~& 3/nVA3zh ol;׺[EuF cz.u25nb`xItxa$O;iacv4#1QjrzD6.+LOcGМУlzûxA @HOۣ˟~0Ʉ>X= (s^ETbBmN"l\"7d֎]ab@)w3K6,Bfo|bk9Kc$&<^h. CvHJ!ͤA;KV_<Ȗּo)78?q,ƔiYt_=@nVJ5@~@:s111]{^v[SޱN/<Ǫn]%> T26mڏeߧ{f4SfBN.oW(dFs75ܪqՊ!0x/uFhԁpRO, O#i=R=<2io?*~¾vzjtKɺ*uq90<(xLq?q!Ұ ԔA v5޾{|%#ݟH~4_ΕO|C'=˖KG_]Sc/vӽ YBunKYc뾉Ys^÷ꠃϞu~f#wKh8<4er}~$gݹi+]%TKr-DN Xb lt?yΟO!/_P3e~LQseApUO9hOLx8[NjN˅RQ/':(b$2|X@d)oYd@ފQ6YZ/Behݺ҃2aekCPNm m7qaH[66줻L}^0^Km ?T(qi2T 1.ϒ4˹mwVo?GB.6u8}bHIJMDKQuʴ&t3S O%_ q_K4 @ R~Nj(eneiTj7d&vʉoF8fW rx_Ἂ);0Kۯ(8)ޕ#ZO;_܊轾E hY4$.OK(ҹ$_ aY4f{f. my;txaSeؤ8{CW!XRi5"jBCZZU[9$%<pͬ[Wp/Pa>}ڝAK o|OmV()!"}Dø×.E- s= u?bTBОNТ4aYpwgy`y`w`ttS$F 1,xNY2΂ ):c;"i`=A"ݒ\n70޶BNy1W5>B nۏ--n(8s:bx fjlF;#BnmVui/ O՜M9paEb+]+<^&n+ Łj1z{&" njz %kZ7,ʬXv w(vo'X-{~J>e!/MAd)?ᾁE*m@`~%1eGAyǒ:mjCv!h5,oIN3WM[Chf#7Τw($a ׆@}GB(}d9Q>j6ߪH5ÓҘw8HOa"m-6)SԄKٖl#>A5mJGеzfy3.2c!j`JJ ^Cd63hܿq&0]C&Y:əim{BpwHFHCvVe|mE =%"wMZjġ|?U< Uð4xS!PmWS0SNAYEr},%B򴕿6Bg~JTvY w,ar81e endstream endobj 480 0 obj << /Length1 1681 /Length2 10803 /Length3 0 /Length 11879 /Filter /FlateDecode >> stream xڍPZ-<4XCpwwww4  8 \'[px;3^{m}(TE-f@)= `aagbaaCAl#SjA`{?N@SȋMBT\lV.>Vn> ￈`'>+)N +kKИXyy @ES5-@lB<+5djve 53h=2@hLȔ ku% x1؂́/!.@'Ku@h7Yo2;?ѿ 6579{ [ @YJ a[&:_M]MAf/Z7HL_&g>gs'ęd{Fi^YBlg8#O49w.=_doa{ fM{ PV΋ ?6+ :̿ hx8r6vXY_~M] O#dVV0Z ܿ"?VϿ(lo_W̬'Nv^F6vv';7 YTLAtG%w/]Q?A \J4 ' ,WoGR.i&v [/u"e {q BL_vA r-T@s뿴Yق*`g?2z8H/ew9qrLL=Y^ b}F _"03ك!/!|`'W`Vm rMxfAf߽2[Y?KZ? ; `__ HR|)0;_ 9̐×#eez?K[l/t?Ks'G鯕y^@ h0 6 vS-JƸ5*8EJrD[K4iҦ$͕"ASbXsj˽qV 8nXhm/1ȶV{&v9\Gt77n=?CgTQJ'c4 >OSe#@_acL_{&G9a/[cp;\A@AO {5Oo&%XctDoQk{}JJfLsPr ygAlY1[rû&WءÔzk_ :2bAR7_)⮾0@m1B2 Xxq7#FTa8V$i@jcwSɐS0;P*杈JCŰNҼ{ wV5w BpzYa~ )DJWؑ2̋z5}ya и#CT1(]3׿Т"$c[;lWүȤ{<RK/5PR lxX^(xU?Lԝ`X7uXoSocн*&m* = *~r^[ ӫY&ј!e>S Stv3ۺ)BKhLN[oc,X$:Dvr ڬƙn>­ TOe2Z^NjZEҐh'v8.pq&m=VJW7[W[tI^Y=rl =(TK6OMM6MΕKO[~Ċ~+ZϋT>r;pCˤMpv'goe}ӇO &/~Ll4\[ G+4dD&=+P9qWrmp[Frz"s`yF&7?z¯6ܝ ܍7CPo5ƥ\6&B$'E&X ?H '3f%ew9#eGбZ]uq04mTs{0ܟ`%ڣh`ZK;tԥn/ 2ichA5ލucEye7ˑ5 ˌh0r6di?*akꐲ!^tFLBCUqfݭI}[A#|64AQ66ڱCr-U/6S i;zcԙrWrL[5!mp3ϹYb':O57<)>4 ߄H9Gmuf~yᵚZFx8Q#Kѣuzb;KiEk>hSo3A=J0:k&0gP-$p9kY]+19œ02!IFK#FƐߘB̔\SQbSTgfSC2Yf<1Չ{'h Ks~ohZZ6T0٤r#] Ocl9I37o=Pf|ڎd~<݂8h.5k#.T e2@۟_1[G?\w`- H5 .&q_E+emU>Q^||LiBuHL/$~owe|!0nI1w!22ņ-'ِٲ#C/&rB.O:^9<I/0mV{̰0L#_d6v P=2q_&K&05~ȇ7y&VgEvEhyQX2-}Ty !obPW(ܗ= 9De'Ͼݟ$hy>fBLSF *+ ^ pzU)8`v_kRZ}?|.xj{vjq{,͙\w]Z380o$Tδ%+9crs6|`rI3t )/_kvϻ$>b)ݧi_ rktE,noTOeN)^+{B,^xZB-IUrA}^ƌƠzZ]E+@$@+w'z=yl4.ݮ~'o $A? vgEiY½Y|ڗ&w0BYt/> ՄIYiSI{#⯼~I 3uج2H%SgԠ; ˌЅ2VExUu4LE]e%Q490:I3UZ[b6(.83akZaf1זAYO!z`uX=[YW)(p|VYm@\;m_u-< ]pqdP1ͦ SB{Z{ܨw#-*xXgMjOIIͲ Y 6rFx~He,7ˠ"#V"`粒 c6%oƅ#^lN To{GB|ִ)w6w!{\<] bÊz@u}&N?:ve>|\l2|ƪn KqbB[Uq5у?{ܞire8.%[4,[& rIY&S8L ec{_ў;âQS!*"$86HRw0乥hl +8{ Zv|-H]QEcݕA,q3ġ<Ϳj٢-ʈ#7 ͜=LEJӄ8a8]VH4*dqyupߌy=|a vs*I["UʲMc^FpN#hyäwXrg7sSuY%9o = ߫ Gf}S4I);UAVJ1PHX|Ȝ+Up@%YAM:#e~!s TkD7ԥqT+km&\jX MJ#aQT/[Q3IdrUD7Q kZ~q:"G 1 NN` kXQ#BRc$z2 r/WWб;9AVi-yJG}SlVتe}teo{ڦESOTIUރ5 bL!*}ixhP-n*ó$8<=)%}A[\H4UB2 r10#BpkVҙZʼn] ߜ 鑰To0T<;Љ!~JO/YQc)]U%q筝ꎖ>R۴M@uy::m)ำT8E/>y9ec08V9E-O:ED<6ZYt⛓MܸbO:ա9- :[#folJaZ]{?u 2]ֺX^n#Q")lq)=KEp>UC5OSFK x8יִw7S օ-%_عW2+iZ*w=#i5;D lanU̦xL z7o T[,` y$5 W I@2v)lB_9< B$Yk-)Kq^Hf0Uns36eg3vLe^~5զɳg*ec`u` ,"wo/}آ TEiCu>]հa429̼I|; D}Br*L+s31#>kk+&i9㱊fHzV4/5__HN^G!l` = "íq wEoVa(%vh Y=ID 0ʣ~_kG"Co[nrb\GNºWtdP-9 &=3zܭ#ERkyjK]>dqt8mEVupoܩצzd8>]6 iQW␠vѭ"}σnȐLb$wJ'tU܆Dן6 c,bTH\QĔezI=b x%{L&6XՇկt-b8KR>cj.if* ;V9=eD9AxG]B# 9sS7HiM͙71 Wb6q@3- !0lzB:qm\k72|RzkRc"g,VFbyl *wvv';fE)^f` m `p#ی9{|LwZ#0i] 6,XvVˠ!hVê?*FxU&S"gAU1b8%"$k4r y0lTIzi;..Z;/}r35C[=A h0My}7 šmsNR|U5M){Q%R|=x,AWr?ZQa^0)~/;šȯ|] 9~h3S@~Ų3}>i>PL@ zqws2Le,2 ~}yY k`*xl!P;kvrZ& l6JX|6@_Frz?KGَf-/I׌>p;3e+?z7Fuzpɉt˱WiM¢'Vm=4'B鋨5] 2If]rKvqotǔ\+U= RшVD+i>%5Saj2(&8x١GtDo‡ 96=8g~=p9E*?,q4~Wn0壔GlE;)2/I8E6qʯucXV]7b|&sL=@cq] WR9i~S.9gU4A4\S{9*̻E[ 's7XQ3y>D-՞\JO +=fwTIoג-j-9!*fJdѰ3}Oas+h|x6zhhF[d}'Biq_^+CΆӞ`uA  GAWo}#"cE$ɾ$dow6y<oi3Mp2eb^ LYZ6b0MjBY-ܿIg~W_vgpDјk%L"V9[OiUgC?I#ڴ6l4]']N,"Q߶S 3Zd<[uw\jslU:ޞsNc}EQ֖ W߱moB&;Eiљb4KٜN@JoiVp5Z~4E97v DM8h' sŬ12? E\Z&\fՖUDG>9w)A1]Y{-C_׈x:[)_:Sdiо\q>I3ߎIݵy%C`M|nyq#[yョI8EFXBקig&*}ۈ bqek,b55ap kJ+Dj7_pBQM\nĦS( #ˍ\#s}xexo5F;{=4df:ʄ-Ѫ:E*C[o{^lGs.6y ]7V*-RO{F|lOcka`+w_|C%/.Zr2;, *\9`6+S)QȯlrA{WcJi՘^EP:|I+m.P?JT0u)飣OO}&x_€.R'b'7d i_xsF//cK?|ET) H*d!kaSxA<ϧ2۵[ ?Gz %I4|V 7)edF7l&ΞJTcث9%0CKweئ ёlkΧxߢ+tLND {m|mED_ytS\307/W93}^BkwQ+qϖ*y6:OׇߖDRxԾ{~X7 .gFuPg1G'<&Sy;G^ \{G,`%?B@Έ!.E8ޢ\a/H٪qOiJGϻ/̵ Z7OT<bIa81yc(a*@9h{(NGyhN|67*lAi&K>H2VȼT@d: TGp>ɭ'cwyZEVnx7~CV#FF%DClu*%VَP }#V %â]^]3/ȼ>BMB{3Z`8 xT/.G(? 5 euDQڒ5u@!TJL@:DuM)Vp6&t19zD^T_<\2At^_۹!AT@hY/vxkT #-Ǝ=X1 vTPXt/!r7jݡ0;P7.M򾦆ph!7}1-gf=~0ĹWEeHfx) ԕќ=}km'ʪ(VلEw*쫼Ra z X;}h-3(*pa6?~Su ېA!G`E6~] 1%pjqs\N{{\6jtX6_2H#[;A A f 'c |2E&' M>𓕁>LdT cCT%gǎ[N뙟]fHyyW D {*W"4}Ve,,c,y QvKCvc5ё.,"BH8T}#:)\9puVIg]#/6CP;Y -AհeJpqSn W|L?8;r6u[`0ѵ-b'\E,eOF-rTn5 lGI<'O8V; T'ѮĖzd[O>pkX^BT.!O撰~S!7rR̖ݸRmޮ6\h[+ L,UĐ"S] mZ_.?m24Jډ%['Ih'=p.tnHF ↉ͬV-Ttګ34}sw$4 3%ʹ xÏRJhNT8 R+asaCR%6-'/w:+IQ;S|^mZ1^oe@ч{w ,S*B8־5)%^Q]DC$s$&,> z_^S\K%0#H}䪲s̖A F4sөa JK!c8 Q/Wx۸bK}\H˺uǽC٤ŕr$8^0'xYDUnAxOzHfzk4>u!{x-KxtTAF341&L5NeO e4R‹&@suSwhP?cY_oIE ;ުY=}t 4h9`ܑaLDj+<\6w5D \}uz;ˈ+2څԒJ]!A&Rk\I7C[(S$9mHzp^eM*K KqZ]~>81Ӗ"j;FpayOΩ,8fEW1\ztG_ǣE)+SX< Z/ |wUYcB_my[9@K(2klRe#54.pj{'ӡ-Qz? bF-K!T kK|Hn}T; [GG 4![@)ws~SW$UfAc_1 V]\,YHvh,h*rA4}MY*fx/9T &O.kE^0gJE89xB;*h㯀/xDcKҵ=* t@yO&p4]=K iRw@6+YqL^UgCD0k(Pu=$9~+ ˫mWxT= I݃ͭ8}JiV#~/vЫR[e5Z8s)KQֶp8 vfcb ҊRKr1 8x ־*(DUڡۼ[|ɽO^ NbVnڭN)uѺ]̦v|%L8SC~3eM}ʃn$ tbk+iZ9UоaNrWs:9Ļ®npʶH ܮ ^ Z9OBF5z4._+g1)7j3,ڠ!봇4(\'1G,`)Wj?i.9{lRI]p+Nb+޿chfOj^m3wb/vi1~dt* endstream endobj 482 0 obj << /Length1 2448 /Length2 10620 /Length3 0 /Length 12026 /Filter /FlateDecode >> stream xڍT .LHt3t7tw# 0)- "twJwtq}6kݻXk mvI G3 ;7@ZUGGŃv#FgA`G? ! L&t٩::\ܼnnA..:BD2@7@3H;:yBV.0d d íU5hv4\5_NYY%ݗWNJ`%IS w&On`K ss>/[_j5lle]]`;mdUA`WUt@6r`[ G(3t2=7}K#:;Z/~zsֈ ;D _ ppt`,!*- 8 S 8e0lE\NGTxDNG`T,#EP "h<"XG`E0`j!x~a+>Ò3{D0ۂ`o KG9_?6c?f{8-GXDwvУ GXn`?8~]!8LS5 ee`-yl:77Gf~s|L5G5 Vstw6XN _2`qs&q~udaG05쑁7Q~97(,7j,DaOTNk菱jwqw#y{a@X1y ck_ 3_@ 9씣hMEpe$;VI),ۦf/ɶȫ%]Z[".W>"DUMHfl>#xϯw*<ʭ/My,O%ƙٜ'?nˋ1֕\[ѢH=ڏ۾J_+d/`9)~O S63uȒܼg 'h,Rό^"#4Ga}5;CT `c?U GNUȏ+DX0'3IDENUQ]~C0*8EM4. 8c~=K^MG8-75fR`7ƈ4uFLM\u-"}!#Ϊ2 CZ5mpIYA=L|99 ]  i{P틄)ݱϰ`5&a-6K$ Oj\G Ytb!AjVPQF}EPD\g]5ַ@ @HWr}D]C@N,=v, !5k4NR5m{$i%-[814ˑ,$e P2ˇ_x?,Y~UH'Ϻqld4B(\BZ.WSxMU7>uڋ~ %XAJc$_[l,wOu=К1ش}z& D=sHÚ[du'&pb|P^;FBp[^gܿ >_OEf+^0Ǜ;W BVP7m+LDk`.:jsZ4S@j+y^<Ckx1N͌w5, 9vqWa84lߑ{*|y7$/co B6zk{5eڀ@80<ʗDtE?M["FMRR+.+"8 tO3Zꦟq_o;'*5Wۉbh{㤗 -9Cv4-aoU2%KHE-J,ި5khbBp]Y^E:Oq mfd6<HBP[wM0sIG$h/3kŶëU5sk_;5;B"twr vge4{EC3E?k&MȨϡ@wڗde 4h6ҼKRj}4ܑgV16 SͧքI8ͨA Fhjnq‡5&=\(][X8Qgb:&ܥ:_gHDUN)X90'ٿ X/PM<E@xxiϥVrƑ,Yz=l=^]'G[L̆a$:Ngxlo.2 r:Zqս$%#Ro[z>)pجEHZLjU EVh1IXr_joϱ5:9^.$COL/+vC+RjgXVx+0rmܸ Q&dƽg+WŔ`Ս^ӓ ,T[aɦ3y y ]w^)܃ }fPV2eiw"J_P&DC Cc aM-8_r)\ ̳a6m8vf2QU}R.Dl iHZ ^uZG |^D}ab-}{03lNU%=QJ\$0X~_ݶX5ٽ[yM@Fh D =$a$yg~Ыtœ1aIP&u }^:"ҋh;,𴲑9&#h]2?żɦczJlc%2WOHܼB"}TГO7a7)zQqޡG>* K5fLdgF!XʅwrUح&M52:a6y48rѺtO^wpM{XV^J(L݅|bhkم*ф:u ڌo*T,rD"Q{3%D2` EHt7!lM{ oq[C3-r=컣*FݒI[N4Vu؃l-DʿIcZ}Bk=D{`>8YQ8|iF~ݸ/yw;W&_7=N}Iʥa͌%X%+zߵu]%.Tδj"eرGՎ=!/FT`zMGxw#O5N1OU!5Ey]?<ԇh8("U'@:{n3iB?cy=[F[H'UY*Cȉ=IElVeJGr+:rW> }֔* 6CFa] wb'Ak,=KF<ls,yz&RO XiQu%wCd$^ _5eYokfQ!N`divK$'t<7:_ٰ4_rXH~QR)YPOAJ7x>F71™aPtaA^i9< []%(_lO#*< *cd+rb;u\/OMi,5#(5:.߯,,^M-v}5'%:vvXC1}=iw@9}vdy:Q#9cm:v)(膥[䛦\Sg:ǣ|&Ir!фe|1JpKqX-8(:!SĴC'h[IN09ή)C$Dߝ|OD1MKo$8"HVg]YO2]:7;N& %bVŴJ49@A;P$CaF+t n$X z@ 4#f:IW]j@F@R gV(t_&:8˺ |/UokI >VQ c;o d[ ?lF.kB=7Cꆄ8Ji$."^$&>"]p\Ӥ 691e3xm"{  of3+,##l/-C&ߦB^ mu|:w].t4)`J.V5eqGf_2n])Yg8Pc ol$lOT6P$?B}g("gg^ҥO(Xy~8onԜrsZJ[8٣Vs>ç[yL&x&$ؑ:4#ۀUH6D[283+ی'gRw*0}3הR+D]EɮxFl`[zPVelɂ,0`tbvR5pK2c/ ~rWT7/O{m $VF4.ܯsO `Sl:OMThS L+qAý+^c h+վ^ 7p㘚wZ2+9H:|G4*.sE<&+n"nS>Vu̾R|*\@?~]&'I~B 6+;='~ WVI};ot КDKDhYuġ'CeMjnw&6⭇AAim#v|!Jw\2V7{oZ->aOU*!ӺD d18,>J3U<L]DY+P(J]+z4[ eWK(. 'm]_~1$3S=ϧ!e =|6.(\9:O03Z2s%S`~3(b߷$Wȴ#NohϢp4k2թKeEdh\K($C?iK}M _> )U ?GeĂ4u@>0 K(L@?SI90<3Sa]"J|l3fA҂/e𯗌I_\T"]/Mޛ] msw#i/(anӰ k'+{$7犯Ѕc.e˄!pQMpy<^OG G[aT3oUC;4)XA_3h^[&SR=QHZ5ƴ9z"c$"̦h +`Zb[Y͟g&;,?:𡰛,֋ 0:"hTM5М:}'}+o6nvj_9פ|\"\ih!.k~dG T,nawp)`qʷ @":>3c?1F3OM {>?A^%Ӈ]:axFAxwcs;M$TVJ'c㜮wv bmSFF!DEuGaQ?PWK,@;MFS;E+w/ZAwDom5ng@Ңx9,kFL?\2gݟ6ԂINӚvdH#ieeg%d_weD\ssDJD M.jW#FOL V0,aTK(:ӻ+4!#; _ث[8yT{J\ ϕOHrwτ&?=1\ >:olUF!U?*N_M?+kE nlL]e|kNiڴnQ54E*S hwGǘ/͢\Cx!,bʜs&@e'"Nq85z2q5^BFu)!~4ͽЍ(fƂK՜r:1vTWze7xM%w?^*msdxN*-J*:88с᷋'jgH_od}?ֿm(JR4+5`U7];A$pRJ)!s1FryHG-m8 Z9w\OC& nD?} G2do;v;gH0s1p$O;:,2c4[3j \c*%Iڹq'n1/ k3RW2-Oe,*'VHœZKnMPwߢUrMePZ  =^\>q~ǙelMX9+IQ%$/J\6GDstQBLp56>{u L< R$«T \V"^Lj2^,VKG]$=:"vӞti5a"7B쯮gDdžu>?чŘ"Wr&l2G6D' y[3lK 62fwQ+A Q򞼒F6i2ԒlǴOQץFxx~F%)@vݘO gm= Y Ӊ A0I'?5+y+Z4Qwخ,v؉~TF8IaI`@0zI7~Bl,7.: - 4U!X 9v59WJW z(QmGw^ooP|P/GKgV55q[ZrT B * :8+jwS͋Rҕk8iG#/zX·[ eZ0}`y/=) 1C5H!C2i~tRd2JXǗi뚞 .0k5kjqPK#4Xލ6s5oSU_L l0pY*NEL۵UaYC1Yge/>TWιi':$e&RXI7Oqay:.ށ~G>O 9ny(Vu(gXo,z:#qv$D}E~xڇ$zȭ3u3Ԃ ӍQi1Q+s$u2\zʃi3\m[*9;\1:8- ^p' "Хƿ{!_ռb WrQݨDӔ"릃r#f 38^֣3n[ۀ, "5Z#qZGnʶQ7dtAaE~د3aW(o{=fXY7ހx~`M[]뵣D PIV} H<;"blmG?fA |ݗB]ϾCew咚\31m?h{*E7]?iC\{7o#'F9GNZ(]ψz>%Rhp^iVTI/._ glG$EԙF}\= їqY]xf7߰NWuŹBr=%NE={ڠs3bGUM7%LdEG6(FB XPܑxe؜ڄiTfߦ zrиw(ZG i߄*AEOg5^w|/Zpn1""vg%p(.Tu_uܯ@`OWU̯0ZX"*톥t?ccR@̀%a]LYԼTnlȖ2R;7V3f"E1g<,}E Ha;V'=[Y4>٧{A6!;q%z!Gֻ5es﹘1ZRf>W| _#:u=x1Ŭ^<O%3I %J8qܬ {ŷֆ mY4~zg$ V6_r[Imu3P ASN+kE;UJH*M ԥ\2a܌>{|?yi:"זau GMg'~!dwęa'iK{e΅ &l<3?\ ;^gAя;u-S@jDdPcIaҾ+%m)|BA5-%bZy JeaNbe\cu6 YA S"u!!vЀ7#]=k0g1]讆JWN%/՜+DE&"R&rp4m91~%{a<Pl<ݙ̋y4Ryۢ~*Ug khF1B:{@H48=P olܵwB~JkMkqO/#ۜLdTֺ Du{X`9˧Ņ[F>H k已(F%TejuvsiE(R!P<.#'W~SA c`V]Eܑ`c&Tȇ endstream endobj 484 0 obj << /Length1 1322 /Length2 6533 /Length3 0 /Length 7441 /Filter /FlateDecode >> stream xڍtTm.! %5HСtH33034(1ttw%HK !9kz}nR lj8ZHT()@0(Fe C;Ce'zE`!P0ƦF"-wg8@TJNTZ"r h!P12 w@ J ]H-.77ڂ - Gh0%@ 2}'什p$'H|+bnFNFsS n_-9^(v҅@BGTh_Y:N l2y:6\krٝwIm5CH"S^5a/Ԟo y֑@VވJMMy++z|Y,f]^' 93RJ3w"\6_RE'hP& HRũk6Ud­ YM?nB hL]`1̲7~ Y rKx AQ?|r`sG1!z҆C{"8WpZt+Q6}k/~D,&#)\ѕJy)M%Ar`,:SLѢ(;EpP$t>N Gc+ŒEƈBWفjַ!l;+(rz7I+ z,|W֏͜*+t 1SM~8a0o]^U{q )ތY5TWzb\pQd2e A~ 륹g,dOc:iU(8hKC* xEf\i6j%{Y,5{LK2?VE O9J#uƚ6ŷ);D O:,_JQ4>Yh9޾ }T; Xmd`}})9$ [ Qh/fGb1 ״ք>Q^cڔ;'f ZvAi9Xt-od,/(O),M 2`|}!-X ε0᠗u0VLu0)R-lUj,D3O dz5W!R9zVt XӁL${qX-]ۣ D_*Ue-=6jT ymK0mP|9q-8V+.(νtmV 8wq˛ZߌF° ̽'$::W\t09-.7me>I&`#wu>hn fxƫl:7C%Z(!m% h^ϑUܒl|^+a[峏tGn=xpiEbJ<آ(>)e]\/>ddy2ω\oTa<|{^A$-ի~Ȕ N'>zI}Fa;:[L^A]]HO|@Y΁ v@:3iJ>Jpklc UWNQ.ޥGTMx:"wǰ-Pl89HI)Vqt/:8sM@^۵<:_$ȤaT{[s)vD?m s8L}f 5Ev&lv+| ϥک_; )Lax'Q撍thDA"+E\flyim)M)Q㲵'V=wH_>EQ}1ꌦz\ Ŋf0'졤:5Mj&_''7Ub ޑ< \., Qd]2w(|Kټ^*ڬ}XTbߞϪpr/DļڿrvLźm[OrҰZ>Gm>~mQa[Deg+.𽞽g/x}2f7'P)Kr e..dH;X÷n:+Vd.yTh]v4t)X l WtMj'igJT",t6򉦓nX HAi]|Q!s&"u4?"W-Q4Ԓ;L4V' KŜ8pN9߾^snxΧL6cp9hA!~A˰1W$2UpB\:t+?_DrZjyhթ;?r/44EF!s,IUf/G2ZKSAEYN鎸Djc<-zZY #[ ԯ_a?c6*,p{𘇿4XMջH@p) 6B+ofl&FuJȧɩiɵH*1XN;~i4C㘹4M*cQE["IREdF(Sg;n,ŮChb(_f{k8} ʦiH{Pj1RT"rL F|iX}v%>辔{0[23VV}- tѯ/7~(16ՑmfGe߲@qnϒ+犋)Mj+:5ȓ ]/98Q{<:/ }w>]^C9ܦ[o AGL߼pC #O#؅͹˲HP6^!LP8|FN{t1s`ï.5!3sγJZgn!)g۴dDT,etY8\ʭI>0fhj2# r&vy3Ù8V{6Ui[zτ>[,MӉtEMD芋6 PU٘f荒12wɑhˢ"b2_zaЗduJ:nV+:>^+Y^xc| VJ1,ýh(wbһ|%b:%=❰41n`Ro 9^Y-%qeb,_g!%Xii&1=B^jJTuC_rE4oYXK_qli]o{pTEF3~.͙7L"tٕr~Chn;`<+rJyYԋceb5`a ĸG(wa:1~Y=bJ͟68sQ"rC/N>vt nK8N~5xA j8e}nzt:(c߀SM{Yv2?]19SϐFݐiZ_m ZeƬR(u2$_Z\~2ȑ1< xjhZ&q0yYu"1蝂̐ǹ~S֥Xjܮ:l͓gW?S=ZpNubB(j?LWw"h,B}CC ;zo4/= Kԭ>7 k+3!c>>7#fR#tkƗQoޣ$Hx$S.c, ϴN!9\Lb}v rIY=م]Y f[s'Nbݖݝv2AdMXv9&^a49i3 aIE0-4֪\pR'7[Y[4Nlwŕ/w8l[]-Ixr}g{zz@_=\l<}mG͋pkq{ P VM (eGI2NLl5" "b$M{Di={zFO+0*i.LWJaɨ@\-%r|1λ W8}L=skLvjwmIE 1AxP3_L{X{ nr@ !ѦYɓOxm_X&%[J7|uh1ݮ[`sL_(Zk8FYϿOv?]Twyژ~H-C"_Ox;auԜTSF_᝼fJm'O(s3V.7o:Nӎa\#~D]D;6Y}jz,wJn1FK7o((r{N4.)m~I'nؗgŅ3V6bm1D"a+zD;evrkmŏK_%d֪SV! =ei5 8LM-4TrZwb?,)R `)c{DBS.Vw;w;VE ,p[-$KpFj@0^ϖp4mz/Lqc_ᔝjsG7"Kf*)DF?!Xw=`]: ĥZzm suj #1 %vɹ5ᚬNiY]8/,^sRxy|.>&x=~=@9!'o9[v!ǽHٖBubFb7BIh3\58~|CХmpݻ|*ȮDf1 9;6Dg|%Zt{nO*f4'yi"ZF:˷^.029J; endstream endobj 409 0 obj << /Type /ObjStm /N 100 /First 916 /Length 5252 /Filter /FlateDecode >> stream x\[SI~WnlX]KF`|nb~5#{/$U $2PʪgV t tԞ>ctQgWyWGM >Z**z}J +ul#+ .) JA 4N†4Æӡ2`,`wtD)hHC{yª"=4#@оH"pҺPEh)ԃHxG {1伨>h7~e>~Tp4ݨn?Oyg0}~1_4㏂ W~_oMzQ6꣗=!myy/U}TկFǣުq>6a?{~~ 1Ҏn~>DD*-G!O3$Glϛq3i.ŸNEg槢秢3g-8:%|٨=՗$U}ê>pVz{ }x{u N*Ճ&#a=;^ yBW'zXSRU.nE`b l! ,bj7{1i"0EKrXIz vL% +Kz]-pھy6)e~  '8s~֗TO{ԧa7הQ1;Ώ2ɪ>ڮ۴ԶeQo1tBRv|L8b1V[ n H|ȪcBQ![HV e ǫRl+\ V_ ݳKq[eW5T|5azɕ`5z"{"?"{) AɥFi2WRG4V݊Bʻ-Gi7XIpJ*kiԒr8:63*C1̓a.#!KC2V+)EBCѿG9sTR  Gq:.pjQG^.CeN_&>F-=Y-ۿE -qܒ =ZWM`Q"MlNkKRVe[Ox R Z 6)[1o`^E=ɾ]   ;$HnV%WJ҈]Oiv1Vb).U)=H+BV8Z±g(6 7*TFpg@(5덤Y#c 5*-s_VJVôl+3X$nXYfkbCj eC?7$9naՖ,BiX0L~8;q[<16Z",ӳ@ z ) z 7P""'My捣!O0JibYg/KSb+٢ My:F"q!cæ,%ԽOs&V56)<>'m&Zml_)a&-Wp me <#ʭۊdm mϸ{,r*ӳ*%ǙΌC2/BFv0hB{>=nN#-]*uhK $!H?K)5q.xYH{cnQ,tΓSx yQ%p~eL[eN[F~}a tF8.y?ؐ"JA';.%s7k`Ix 6?QӈHʶ9$pz*rb\[e8IL\h~ũcGME' %[x7(v&5Nx~`N]Sߒ.ViYm]} Htb^<^Po+(mqȴ8u$jh`[qh"<(h\9ĔA  ,>#:j% ǫYZ5W;gD9t0|_e,ѡMJ}nquẸ|gE;jHJ%=QĎɠ6 (KJܲlL(PVQ~1u|39wi:+| 2{. HCq.r6B+|OL1mhCդɚ&o3%DǼ*eɰĜQk)󓭓=e(^ZX^dDI(T.$\5_/{3`8rp/խy>5C~*?.qbp޿²?Ub`|%g֑$7]j&>/MڌɌ#C_7 ?1_҂UxɄZ;;{ŌM6m-NQG٫L_,W` ; !|L&Y$evYv-|tćS/SYAYzaMS6-~J9,:E抌%EWgo_z_)`|r~ON8nj8U-%YS37gPEB0Ϩ~˙u|L[(/|\NH?MW 5{H)Y/ҶrWJC&pvt9+KGMbO+SWޒ߇G<''LXC:YA4׹2a0KDIr2t B8I]w~z H{fZ> endobj 486 0 obj << /Type /ObjStm /N 57 /First 481 /Length 2070 /Filter /FlateDecode >> stream xڝY]s۶}ׯcs;1+Q;v"q|'ؚRJQ]ARk?$$=g.@PP¸0WL9Ft8M40*QR'18q0S4x)Ԡ;pc%܂UH oJ%U4n9ƹDJ0ORK̓@`2 B#\``FT <'9.N@tG2Dt M$ΣU?Z06RÍ#ڂ esC9, |믣_?J2>YxZG4bS|}#3#?̫ŏz]4G/M=y(* >~)o@8Atp"pEx>+l >=~{;EZ%4 %^ 3/?09pKF3GG _\̐,o*:*{>tz蟳I+޳ѧg'=ތ6|7:V2–Ǿ=~/dEO:N]-g}<Ŏ7M:Nѝ+oon=|f[ϗ{A]n޽lvxM>9Сg*Qܗx,͋*>݆;lK*a3tJ%<4*4\M- YE * ηrB?/ xZ֭^}2A|mD^frf=}NRU=95_ 6|^|I/ҷMiNzNT$Wl v$Ȼ:~+[YOOgj:Qݓ`ܭh!Nȏ}uUqEX"]AX>wⱄ駣Y]T+?Mj]HVVǂuꮬ6կ+3r\0Qx?_@2em @b"88eQ}/?՟w3asؽoxx,xS:;*'żiy_%Iiy<&+Е1(A\i9qrij`xl[-\,IrY{>w ŷoc1wq9Dd i_sVAaqaဴ؟4g- <\岴/MzQ9_ė3Z2<;4T}zXu4E72aS}PØ'E{C#lǶ[P[Ȍ{ Wz>IN(H qW,1;4Y0v=̢Oj;FiIqP[mvyP\'R;9MXQR;.4w 7; l nvi\yRt(5o7+GХ~:ߵ•5W\Es9jf9f5PP!$ݡj>TsVN5j֔z_(Ʀ G]K~p^ߏ¯|O?Eݾ˳]9ڔO?(Wݧz endstream endobj 514 0 obj << /Type /XRef /Index [0 515] /Size 515 /W [1 3 1] /Root 512 0 R /Info 513 0 R /ID [<70344E417D76F7D08F1A6D6CD5F06387> <70344E417D76F7D08F1A6D6CD5F06387>] /Length 1239 /Filter /FlateDecode >> stream x%KlUU:^-mB@y?Z /~hygDb`ĉ&ۑ!0Z%!a#:08$:0DH|YksgZYY0,umy Qk$*&JPEZ=i5Am^ҝ`)j{Hk@fR# Tzj>jԴ6{KZez@=Dg Z@+hapc88NS48΂n ZzqYv k΃ *dH7 R z\*.9!p  (`Lez,T)0 fUnd`w ,2`B:vdLq5p&nc 79-tLkw?vlzp@~y_ Ȭ5n}:vt|cB 9e7ceuޢ\EhsoV9gϴ(:tqN@w81wL]_9r4~£rmS-9s\#9sX7& Bsk*Xʱc)[{9d /z1c$עɥ>nr&4^/9ќ%4g9飜>飜>r4Gr4(Gr4(DŽ(GJ+} S endstream endobj startxref 363393 %%EOF vegan/inst/doc/partitioning.R0000644000176200001440000000210613232070305015720 0ustar liggesusers### R code from vignette source 'partitioning.Rnw' ################################################### ### code chunk number 1: partitioning.Rnw:20-26 ################################################### par(mfrow=c(1,1)) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) library(vegan) labs <- paste("Table", 1:4) cls <- c("hotpink", "skyblue", "orange", "limegreen") ################################################### ### code chunk number 2: partitioning.Rnw:39-40 ################################################### getOption("SweaveHooks")[["fig"]]() showvarparts(2, bg = cls, Xnames=labs) ################################################### ### code chunk number 3: partitioning.Rnw:51-52 ################################################### getOption("SweaveHooks")[["fig"]]() showvarparts(3, bg = cls, Xnames=labs) ################################################### ### code chunk number 4: partitioning.Rnw:64-65 ################################################### getOption("SweaveHooks")[["fig"]]() showvarparts(4, bg = cls, Xnames=labs) vegan/inst/doc/decision-vegan.R0000644000176200001440000001253313232070270016112 0ustar liggesusers### R code from vignette source 'decision-vegan.Rnw' ################################################### ### code chunk number 1: decision-vegan.Rnw:21-26 ################################################### figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "> ", "continue" = " ") options(width = 55) require(vegan) ################################################### ### code chunk number 2: decision-vegan.Rnw:84-85 (eval = FALSE) ################################################### ## options(mc.cores = 2) ################################################### ### code chunk number 3: decision-vegan.Rnw:125-136 (eval = FALSE) ################################################### ## ## start up and define meandist() ## library(vegan) ## data(sipoo) ## meandist <- ## function(x) mean(vegdist(x, "bray")) ## library(parallel) ## clus <- makeCluster(4) ## clusterEvalQ(clus, library(vegan)) ## mbc1 <- oecosimu(dune, meandist, "r2dtable", ## parallel = clus) ## stopCluster(clus) ################################################### ### code chunk number 4: decision-vegan.Rnw:240-251 ################################################### getOption("SweaveHooks")[["fig"]]() data(sipoo) mod <- nestedtemp(sipoo) plot(mod, "i") x <- mod$c["Falcsubb"] y <- 1 - mod$r["Svartholm"] points(x,y, pch=16, cex=1.5) abline(x+y, -1, lty=2) f <- function(x, p) (1-(1-x)^p)^(1/p) cross <- function(x, a, p) f(x,p) - a + x r <- uniroot(cross, c(0,1), a = x+y, p = mod$p)$root arrows(x,y, r, f(r, mod$p), lwd=4) ################################################### ### code chunk number 5: decision-vegan.Rnw:592-596 ################################################### library(vegan) data(varespec) data(varechem) orig <- cca(varespec ~ Al + K, varechem) ################################################### ### code chunk number 6: a ################################################### plot(orig, dis=c("lc","bp")) ################################################### ### code chunk number 7: decision-vegan.Rnw:605-606 ################################################### getOption("SweaveHooks")[["fig"]]() plot(orig, dis=c("lc","bp")) ################################################### ### code chunk number 8: decision-vegan.Rnw:615-617 ################################################### i <- sample(nrow(varespec)) shuff <- cca(varespec[i,] ~ Al + K, varechem) ################################################### ### code chunk number 9: decision-vegan.Rnw:620-621 ################################################### getOption("SweaveHooks")[["fig"]]() plot(shuff, dis=c("lc","bp")) ################################################### ### code chunk number 10: a ################################################### plot(procrustes(scores(orig, dis="lc"), scores(shuff, dis="lc"))) ################################################### ### code chunk number 11: decision-vegan.Rnw:634-635 ################################################### getOption("SweaveHooks")[["fig"]]() plot(procrustes(scores(orig, dis="lc"), scores(shuff, dis="lc"))) ################################################### ### code chunk number 12: decision-vegan.Rnw:643-646 ################################################### tmp1 <- rda(varespec ~ Al + K, varechem) i <- sample(nrow(varespec)) # Different shuffling tmp2 <- rda(varespec[i,] ~ Al + K, varechem) ################################################### ### code chunk number 13: decision-vegan.Rnw:649-651 ################################################### getOption("SweaveHooks")[["fig"]]() plot(procrustes(scores(tmp1, dis="lc"), scores(tmp2, dis="lc"))) ################################################### ### code chunk number 14: decision-vegan.Rnw:668-670 ################################################### orig shuff ################################################### ### code chunk number 15: decision-vegan.Rnw:675-676 ################################################### getOption("SweaveHooks")[["fig"]]() plot(procrustes(orig, shuff)) ################################################### ### code chunk number 16: decision-vegan.Rnw:689-694 ################################################### tmp1 <- rda(varespec ~ ., varechem) tmp2 <- rda(varespec[i,] ~ ., varechem) proc <- procrustes(scores(tmp1, dis="lc", choi=1:14), scores(tmp2, dis="lc", choi=1:14)) max(residuals(proc)) ################################################### ### code chunk number 17: decision-vegan.Rnw:706-709 ################################################### data(dune) data(dune.env) orig <- cca(dune ~ Moisture, dune.env) ################################################### ### code chunk number 18: decision-vegan.Rnw:714-715 ################################################### getOption("SweaveHooks")[["fig"]]() plot(orig, dis="lc") ################################################### ### code chunk number 19: a ################################################### plot(orig, display="wa", type="points") ordispider(orig, col="red") text(orig, dis="cn", col="blue") ################################################### ### code chunk number 20: decision-vegan.Rnw:739-740 ################################################### getOption("SweaveHooks")[["fig"]]() plot(orig, display="wa", type="points") ordispider(orig, col="red") text(orig, dis="cn", col="blue") vegan/inst/doc/intro-vegan.pdf0000644000176200001440000072017113232070303016021 0ustar liggesusers%PDF-1.5 % 56 0 obj << /Length 2361 /Filter /FlateDecode >> stream xYK۸WHUEAroWŇ*A#QƢ8Er%=A4$<@Sw(VL)2N-W޻V~u_3ǺfmiqYpwgYRdЯ7C>;kx$84 U+n'l?}4ʘ. yZejc-s 9Z_>r>6[i]f7m*X]3x=lYK?regIsKÈMt6{-_caXBǥ9~Ί 63%nc ~ I}BрtkvO/ݪJkxCzR"W@VÖM"*G.[9zc]쐷N|MNk7~B InU/ lb 7 WSYt-==- h3~3` 7 p{[u]hj$R8u?W(ӑ@WY=Ĕ> {R-'zee@䉪 eqar]KMkөxgڪS dʥ#MK6PC3  Lb2#S>0sfP[)vGb}yipTǂGHɸ%ewsKc0kՋ¾/Hͺ><Kģ]v {H PمEGiQn;j%7,Nc[Xǻe@t+oK묄(ֹ֦In^"G^ג0`UK_eby* XzdiB,ay^iIryKEXڡ&O i{("1xk[zKKwJOު959;M*}u m M%~MyeICpzNC`]V';8gP@ϓ@A4#f*E$E}GF yLRhyCv&4 ͏xi%"^Z`nuc?RCl{}X#aQk%02* J_%叩Uo%&ɢAkQ;Lkb@۾plF?rʠ$ji 7T`̛* LW47 Ő".1: d2ey]@Zxlx@nۻRy{(6@d-dѡ56+E,mUKc[}y/ܙc<*m#<@N'8QO߰8nqqGg㶔ÁOhN3ߵ wiQZ}4SͭUm$+-%WA4KM],)'X, .F pMxa\!gR!AD^籑Z 챏MA*JTY>~Ynª@ f6>؄'Yw^BU[:BJsRH+0Bi̺~g$]N{ϥvx]AX$cnyk ?0gAQ6~a?sÔ&NC ipve\XL kSi0ImtI~j?+.q0:ǂV٢l9ի'ނ"B"9Yhi;h\: iFQXxħCCu/s!YXvQ$6lVU%JV̕ sވ%x \ sȨuQ OK̪K-a?kx,Sx# endstream endobj 74 0 obj << /Length 2631 /Filter /FlateDecode >> stream xڥYIW(QM-\FH2Ɂ-en۪XHwsDǿݽC-L\VLym.nҬ&>rok9gW?~ [ X[di gJߊ83g ǀl^(3,a;uJ޾`^QWUB̉jGudimuAmD=vs!gXh2 ևD,T|K˛BB•t>%+kd)QSjxxs4){ (;sH5?nJ<$)Wq /{zM+4]GSLcMAˁa6/䌆& G5*trovѼfhյ/X;*~ԍ !<ePEuέ[8xIn(ǓX.82xW#[Y I(m 3?z? /wk%%&ek"FbyѹS%$%ٴO8puY9+Ja-R]y)UR 8gIT'+tVʹj3W{n.BhJM-GX1G{Nb3RrLGL)CnUE' jFnkC6Qgj SGޏ.+cBOd)n8 "t C G 1'PA8ߒNQs4"b莱OԇYK-Jij#r~ dzuo+mǿ(L(L.C4j/ ,!vbߑ2ޙh2m( %# 4dd]&3!FZ"ENqI`s rI0t M8M50zeED+aǤ^+U(Vh,x,-Ur36lfMS.b1n\$Bs+HE~ -)#`jb)SlRLWE*pI~8SH'h`Xw2GN@I4e>YhWSH0{>MKT2>w"ٚQƊZ\7%m endstream endobj 82 0 obj << /Length 833 /Filter /FlateDecode >> stream xYKo@W"}TPphT4 ʣz8q Da$y9:L$:5RI."OL0I|9:S+V!c/c{gbedge=bvZcEXV[|LX,5ؔzπZz 5̿^>Vn#a3VkKĵ_jP`Rf%g- >bO\' ȸWn͓&3Nadd4`0&79a*uSHMyo+H3A SZ.N/fHynNSIfNHtrXGN}JP8Ԕq\8N,Ezz#K_^#p- w|oZjɔC ax"H=T=BΚÆ ^rnt++L"}oFV{!l#ODV9K@DV!P<&W Z>Ȁe!!e,i*g6j7kH/yϤ~T"N8}#*H+}A&ߑ>0Uii.BP3B'ViLI+R2QVwsd> endstream endobj 90 0 obj << /Length 2351 /Filter /FlateDecode >> stream xڭYmo_!K) pII@ Y-$Qs_y[r)R>P}}晙g8Uf\Vuh% >_A"ݻŬT7~442gTVj\'<]D;_ܗ_3|mOEYfIC+Ǯh_ -VeyNlpw4YRޡR *MaV+edX5\-zYpoyg§v:oT@u rK~;lgQ?7Fw?U$Z88-? <gligR-enrxWnow} A7Z|29tz/@^:Ot&$1=(+0Ytϫ zHM6%Rx{k[n pwOkV_5&-4-C G~bHZaÌӢGBj]@ҹﶴ Xy NWh4ILe:isk#ˀrς;FN%7!y*,S 2(ʰP8&k࿶Ӫ/Qh Lp&Y>s6PxQ8-+<5C:|ުN*B46gvTW G-b:(#l+mL5ħW6qd>D) .-MsZݦFK7|ưu|3ims6YW*jB hY<%HMB\7݂ +5W%D3p⑸ Shn/;Alà>rd]"CaGЈv{W0Uɿpv4n"QU@qbU*[98 Zs#6s4UзiszCrJShaRN_8`,fSNx!WmC07ҼjY_RdMKm8C:ppr"{xQH@ $>|)N'+Paou4 zIpXC.V ) m&8N‡IP˥.p(b/_E`5$*!|?1˲3AbmKD z{;FV6_s3Hp\ B]ݡ8>꿺,޶ݒLumR5ś*0:U︆gGDd-q.p&斴|m$u۬ǎXho-(RTh)UxbJx1C9(^8v%`G)ðWrᆞ3X|C0i,>)!;YwW[EVWeioE7U.\9êω LVSD*n.Z T n0(^ilqhË2uNC|5#mqp3 cB\?s] OѪw`M+vuN7x`\! +(YMb u5|u LS!Y2nyi'CW.b$kYq4f*+V6+~T ĹdN KٮztJ:>X|EN1fJ.*[w fJ/ˮR3P?\˂7@q> /ExtGState << >>/ColorSpace << /sRGB 96 0 R >>>> /Length 911 /Filter /FlateDecode >> stream xWɎF +0]$kz `n '> 2sQLB(l,.wM{ϋO .Cc_^}5? 15pxvCx?L)-hg}ozڤeW"zBqӗL7,zF)o߻y_^|"8/ "yXhVL_\E /ϙz3?FT⺇GxWj{c\r^U"1ЮkSڞU#eO){S9I%S.zw֨nYbU?^9),~~]<”*z٨%ugV5uo!\R棪:k,TQYK ecE/͏Ȫ?L:%v?ѿSnklK=|0 .d;5BݚgP^Z,,䇷NŞz8ϔ=ix s0dv).9f$c69gLDXWTUX|VB'Kcg(OfjVRjl ~Ý.hN0]JZY5:3 #%ׅTpW v$qBoxSʸE u/1ֱ 2LFd j( ڍe׬ rXy# yK!aPܻEM/x[IjӕQݭxC5us԰Xǻ`ɱ=f~ol G/ X=:ϪulT[ÿv endstream endobj 98 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 103 0 obj << /Length 2244 /Filter /FlateDecode >> stream xڭYKsWHU8@^RTm.T%;{)VV4ק_Hw)  =j?R:OL.,w.MhBlрUNOJ+~24ɬSvci=<^ݮ7ƘDXk,ce4>zˁiEm?εQ*}0PqhS&'s'AѦJFۑgC+lǵ.=Y[N-H6Fdlv_e%~T+FntY7&a8]ao'k]$kh(ydSԔ]ڰj3Am*!p|E=y?m<nY= :(tOe-(Xۖ]<;5hDm؈X#p/i?X-~TMM 9ueʏx㭇mذ?z&prBRF6UZsf32)3zsBHk56* ykFVo a3 yA_,z<\ p'?ƾV|-!|@t#>@JQwlOF4* HUvk4jyK1D泚*OqDIįJ4pgַ5p>j%D^c$R(Ds~$$y2iuu?Ne2lnӬT~qC I ɄrmSqCZ#*z}%\ZiQsh]e%O; }H kY^L 9D~`ϑbu|TF2.M8"<kaQGkyaPM]BLMH6G\F`OqqTL/UyƼ6#EMdRM6IDW$6"5 &f)1/vbredrz[?x}IBp]pf2Υ65dA}uU+%l klMS#?Z6׃R{(GY9L&Q,teaNɈ_uDPK6.`k/4`<_5lL=R אDֿp "sH8֨ n`4,KBv͢,]` `?+u?m\$㤇jf [\5W cf)oF9-Vm`ߘkRQxgAAv<-]6+fn_xybP( @{G AVs-b% <]a$na(:J Θ@aı:?q. =d@1(#԰Xc]m!f'Ah\xսWvr~R9/?}}$;\շVfZLUVYLpZFeM P9 tƖ[fN\W6Â> /ExtGState << >>/ColorSpace << /sRGB 109 0 R >>>> /Length 1229 /Filter /FlateDecode >> stream xXKs6W(`vvgB/ޒ=_+*XoȎ/R5d[6Mp7s~NFq"N6;Vd 3gTMwٔs/'[pFғVP^HwҜJEJK!;2R=Jw𭥦oȞ7d-!hnfA$P=0%5* qy˨0cE5*Υ ƪjT\0M+qqeoU G%KT%k@$q$8HeyY+,C{mE ΄oJ첬HI驺t}P5 +Z!h99wrZQQQ3 vSd{XF׮]vskbiLZޔy5EN2hCz `dXcEš( -"=LMGl:~%vx- x|[USdr^~.=mcA}^)45\8.npu'w(';`6w>u~(]ej;l9cq`s8:+IMУ" )EE2*ڬ!.Ms ﯸz!> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 115 0 obj << /Length 2105 /Filter /FlateDecode >> stream xYIϯ$m8\rHI$ʢ4Mc!PdoU_m=zßiT7]1[~~PΖMh@*}=P(f ɯTjU=,M3_i5BϷ/'mvn?.t\]7ظ`2>%&>#]-70Z7iNݼo|t]92 4YLeɪ%magndB>5{zdff##; qزڐߞ{44ܱ'=As8Yk+ݔ88=cS)-D{A1 3Pam U 0KzCE4@UM,ݴ& \w#]V,߂^t4GhÑS@`g)Ucx.^Ϲve0O%j`2k4􂀭i { HXv{Ts86`,=#-_&&#:p9)8x~ O#|VC&32Ӆmɼ~ɰi7-ıGۯ,|DyqمxHmFڳ6,4Epߓ4ñ#1-cP-㵋q){3~/2b,61-`KH-dN96KTO Rv")_xǰ|H the~'$bIOYeB~t镃~2So1 54EuPEMYp4rX4͈M> K"vs&'/C.vać3#ށRB/xv?-*wLOaFihĊl Ťv#yn]͔YA4'>̈́MVfGuT >¸?ER#] g`-|Yphk *GPiyvKVg;y v(领 -䊥~w endstream endobj 112 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./intro-vegan-011.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 118 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 119 0 R/F2 120 0 R>> /ExtGState << /GS1 121 0 R /GS257 122 0 R /GS258 123 0 R >>/ColorSpace << /sRGB 124 0 R >>>> /Length 5971 /Filter /FlateDecode >> stream x\IonqW|dO=[96Y4i:TnQHkG5x_LJp!'k{>"n!|V=-yɧ닌){oE^sYo{d߷~A){پ_opx?<J:kxz{ /ytka1{7y{Odzr;y\^˾.r_ctǑ~wDJy=+7K=ټxq~(2E'n~FWqOگv?~ۿK(]J@XҽMci!"J=ӫNd ClM|5k<jl c0>urb ?=z/=T=q{톖^^;W)0L'?_n}i7j*q=Rm%ٶKr6iC0G7oi#h1_z$~FgIACJssR@W(%[6 6EzD}jdʖt7FʼWS_D^b4Av&Fyi4|JrT4[vGhϷk2yؒ)2vOF)Bئic[c. 'P6m#6A`e'1 ǼlSpИ"ޜ%d~ouot 8EHsm/zgctnᐯ~[5e]i5k(~`?<-/>ӾL_`!&.}悍o5zط eP|0APn0ApK!n1{'l>P6B#gGf+W+C~Q(H6c|@nO2`^FFv@#zC%mqPPjVp24ƫsX񍽸%(|3_FW=s&Ǜ߆pM`A:#/ @y2ITc/T.YG@8쌚aƒsu86͹q; ecI$nUE7CZz굫k(=:Qm7Y%ū /P9(`nQe0(3BES*8bǡJajU1aVUܪ $#k\Ձ*m BuSHenSm7e ?M=% \JPe8!CML괰*Ct@(t@ V/q-i ږp@.|A[uwZt?_+Y 1e!Pk4S’rfii*թ$btUd&(cydZWW In)jf4:S% \N  j+nIvYVhp^r S=2hdEq4:<JPR*AzƘUSK`/j*T*){]h7іUjd1֏qA9N4Qh _^HJ2hdIc Dn5>p%ñ3GG+f BQ (7s83^M{E4P:9I*؟ѩG9C[G>I 7p716OT-DߵXE]OK?ЏKs_u_E_r?l{'' }!(e֭}fκl7۾Q)7|0>\U<|}ڲ>!~DžoPp_xǢ25 ,Wo|ʭ.NjK_6ׁmNM}wBLj ?!IbWB#٘]4qSe qKIE!dlF -B"RfF]Q&1E#Gehp0pzbzA1e!lE㖨,|aAFvFP( , jh!0ǟh%YDWa(2FA V}L;M[VQCA]hgC "m ,֠<b8v]l3yVvX` Q*EHyʲX/jdG4H jHz\tHX|r?M  ~M  !B p!|iY,e:j ,D H^Gt7PT*q[;GCN:hQuK>hxc򣇈[h(ֶ*C*.?Pcr?4sI_xY<#*˕1싃i{"'mʶ_ m^@Qsi?'F _j ǧ _HLoy"Wj6o:~^p:d G[yt7ƿh'/Ku+ZרG@{N:U` cqA5jM70I6Ƞ9VZ+CQt({<4Ъc!AZz=8!ƙYeٶMpz?c7ry;<\8ztLo{)ǁ4u&j#C@WaQ5c#"z uOه\~[V|c_g/<~*{y$U[^?r<_W5p~,'>i|y_unW OwFX/<;XHwZ;^~tѸDfϷW"Яxw^}zk/?z㠯r)WRqBny F9/zWp=!k18/~Iז>]Կ5Mco[/WzQe5d-{`dJoXqV_V9/â.:6/-?f;M_gw lU.9^aѿ1f-#ɽA79~u Soў/*[ G_~Jc,=5G;1>:2)O<)ΖR)]'sruO_8|b󚅌$?xe ꒆg7*Cc6u7:>>!wTYaX=`FǧOJP*W V0 endstream endobj 126 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 132 0 obj << /Length 1492 /Filter /FlateDecode >> stream xXKoFWJ#f_$E V"IXͥ)PZdRk_;;3\G[Â8ųNMF%Rwj#JaeVOT.KRhN':qI쬍O([V}ov`0_(n▧ LuvDO9%&% boazP ;v|׷^x+=DIC -Fq~ϻ,5x#μ~x%wr۝ Kd(Z"VW+x,6lHM ~\}aT<^w !ȸPpՈF;ae"o=گŠZlS1p)S.wpLc\V oȻ%0P0,c<|6˨22̘&Zkj]VɢZ˙G"O֠xaͳznizCBU R]5Vl;TWhN V~Z^뻺^ ;Vhx6Î\*MZl<5n!^Szm vx|x͸>D)gLK0Yga jXhcXu1W.C%nK}go`"eS7[)B=T!ȟGiBW[Z%r(c/MJd>LW0΋ 2a/J!Oi戯 YjE4W]$œ'CΙ>:|6vt>Jw2V- N/ٶØmM?7܌Ovㅻ~ųa'l5س. 7=AۿdB_O8.(W=t-]nлP`^<tuoSo[ O"kõgo%UDr6bk0tm21-hE)2:>BWq\f>jH+ZV,U3Uf-]'h*Wq !b@#,Q&6YEuۀ]] ?DM-d<[]Xk}64O" *F88 F[٧ endstream endobj 140 0 obj << /Length 1881 /Filter /FlateDecode >> stream xڽَ6}蓌Vx 4@>5}Xcٛl흋-ɛ( Cə! ,)m<ֳDgQl٢xYЏJ^vSs+(t;ޖ?߼xϊHu:_ !Y-rGv-<yh yRotZs#/PH޼g,h}3J cPz!LMOȤs2'tt+d jf]][o\v{xN(TNкTn0yIPo1WmxRVC42VRhә|a^ Eq o~qz'{y;jy%|KA;8!ӓ>2W fh }]؝8tVfD?Gg _'sW>z%!*L~.reAp{u_0nCI3E61|$X3kC )񼌹t -AJ@z Q?y( ƪSz*``wsM33Jea&ф>g,blD@ٴ-4]22>/_4ψ\u%n;~ǪkfbN%(/{6! 3a{*6 s`qtEy'>۩@툻d07t֚ ْ2#]v˱r kй4κZ|.VǷ9V\:UGߥ߉jzPg恲YJ|a;ѧ3,& R6|jjEL@W hpT`Ltψ2teFx^>ZtKIӸ2r+RbxM\f9jnɩ󚐗|{θ.a7TȥA > /ExtGState << >>/ColorSpace << /sRGB 145 0 R >>>> /Length 2197 /Filter /FlateDecode >> stream xKoW2^hUe Hs ddaJA)@~Ωn4A^/H~U}}jdaˏvz {a[_{na"x~a{w=-=~v]??MkR-0ux8_8ן?_^ጻm궨6oxv; GE]+F`+ֶe̵D.~U݋?w|Xx~Vnǂetˑ,'BTDnld!Rݪ?}˧xRpbU)z8w'+ \~(vpFC)7 (џ`{D/Gy HD3$@iS%LH/O&TL:>0QU8 0{$ TX5.(P$ֆ41SU(vxwA?{s wCi!E~ d.ēB|/ yyĉJwÍF27jDf(`r@eݜOWa^pt3Rp>m'K3pDC"nsLg!Ў/$ň wmioMQ`*DU kڅUjh'f#Ho>  х"ըp3Kx{;:raPGV2E˼ (׺Mkj.^݇iBA[Y9ط͘-;p:&-&0)E2Fm:1=T/DYJ4R1P`1BN\Y:]}04ڍ2D1)aOʢWiN JM^޻MB}) W<9eي<ϳɭH.SL]SW= >V'Ln'uf&VlNNN٦#{N$t>U4Sn/sNNNܺ#dBYyrzeF|uj,K 2EmVl"jMKݡY3GCJjWaמ7`_+F) {0 Jqa>jk`>jKLT0d 5.^a2 me1D0`<࿳VM O݃A' O}|rGL&{2mex2ƈ `(ԢχA/B,Ww&ls#-Ji u- U{`Fх2f82feRe85<2Zn}fM K;2Q'U ԛ22v'U &UkeRpuȃ !*CL="Tړ*޼hAIAIc%TĂ4QU| r<*;+|i>"PFĨD:aKP0F~( jXbUOsL^37 h@%1bUjjݮL#f-/1ʾ?թ7^3r| endstream endobj 147 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 801 /Length 2170 /Filter /FlateDecode >> stream xZKSHWԱ9lDаtD;3! ZFs߾_J6ml *R/K(&cF2ϬaȔdJY S61T`*2mL;Қ?0x ҊaaFL`NWdS zd52xoe8ĒOzB!ZcB=AŜJAWNAdFN34gZzHLc‚$ A[W1z; x/~Fv(@I@`T#ttPvF(.a(G xYܥQ"<$K\zxGAՈ @2s/H|sZ0Kv]X0} J#]3*b?qsu@[c2F gTyIu! CN= nъ 8.?H?WV]{q|NYGIUsGlBqk@vĶha"} 5A)dSa-$U<ޣ";C[ q{F:!$Zcx#{F[l7AR8~\y O@!ح1WCc$`#H iS}F @i\ ' 9]FJp\9lLmA~>tnNo8:<%^8|nB9IǯJ?p_fE z,njnt|ulD?yR$SBKG{pVdrs E yrߥ9nRr>j>Gb@*xc(|1h9QBY2ڮk%u3p7w5w0> stream xڭَ6}B2Z)"E] ́@<}PdyZo\( I$pf8c$S&.dϫؤENnD%T! tW?ς"1X~w}]Tq<)!Aftep ~ mT|w4 (K .Uu7L{|'*lp|6_EJU~(ktYMwPV ulX5D5~G6}L"$q)RR$-IC(OlMd@GPd!nk܎1aSb =?.ySX}G6J/jnD휞D/{9d&zĩ3:ksq)?1B3łPz+毬S0İԦw-[\ad=SR,xp2 ߷żY.k>ٚmp+.E#IB_+kʚYYVbedVINu%ZٝG#ZĂR3 H EriL{ɊsP1(dISiQ d*, 4Z05YDFDQe\TH$df6f|6 "ZSW 9sLĉqaosam\R-N6*&EK lnKB~ܣ{4o zaZywB6y>loU}\u 忭ӱ:u~ӵeQ VKrU 8ô\ucJoSwn{G_kjrnw؅Al뱥UxqubmNZ< f>--+AHY[T&˘o#h7vȶ=edMVY\dncЧ$1҅,Ź4SZibm蹱䦘a^D*?hws[Yg%Ǝ̶ۧ{6q:ˬłq_Mk^p5$~nR_j]w>{SJpx{'/g\PWqi#W endstream endobj 137 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./intro-vegan-018.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 154 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 155 0 R>> /ExtGState << >>/ColorSpace << /sRGB 156 0 R >>>> /Length 1439 /Filter /FlateDecode >> stream xXKs8 W|ddt#[^N$+Z٥vg @`w w~ ]B3oL;>ϜF3lôDb@nV}\.;SDwK7ˎ:z/=ioqV#y^mgJ !Ik ɖ62 q }f,Fa<UsozBsg{݅@j.LtԐ=,{tk'zZRI.UGo=z'zZB-_ A=o_dTC -%z.e根~YYx3 mq]6Uyl7/"TE)dH)7ůB +h>%msa:8`B1Z/A5)KK.[[<prSVծܗB nK@(,]ѮO嶨’  ax?hW %@]oz5ޤ֛bWT.$z`(r}v`y$Y'J0Äԏ-)am߯]^p:5nޮ4~?LYĺP`AW_O+1Z {]'5ܺ2!Ǫ*[Tץ$(3t&\)p @܁ $Qb:>TffxQn"?7e*0&ElcktwQBeRuaRxȇ1LuA$ib(;?=VOŪ9 USrj_֫uU,e[¾bhnj:|Xx.ySܨSlΟYGYRc^vf5kk)( C* 2%lVlaWhsj,tWG)}:KJ5GEk Cxy\;4k&ȏ'2X#o~@!c+غfʎ(zjA\RCvD1uБ5;z+4}X)4gc fyvՐTb1+ܓ]P+ Q~kkFnV`aOJ$Ƀ1Yf@Fl'N7s17rwkLxeSk]v4$?,ݐXӲG?iCot~);#k?V,TVv}-M=ܼ'lj[A 伛 .nr>"Ն9NO endstream endobj 158 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 161 0 obj << /Length 1410 /Filter /FlateDecode >> stream xYo6_aZ"%@ +@d(Z ˀ* RewG.a[p!ŏ$~f8d"Ox2H F\ NɯT h z9i%t @g[ 5(h15 'Nͷ0"SPs{zl5uC*,?Mb%T'3\6=tW@;̷`HQpB0;Љ/m6&3<3SʔsLh:a!{}u޲-L^~#JvEDL(F5Fx`hd U|D}7t6N\EoϯYpx ^dJ=4^HE*%yacSll?ftegbnzGf]ǩʂeTiT{錃o8؂o<DYdTi:Rfg7@T]BEkւR^*)e IBZ4B\Ĵ~nkZ`Y/-]cT*U3Z$FfeKeK%fk3 |,rq o܁*2vn: #*jS^2Lki}C/vr#HQP۱%E^$l7@2y<?"rnim:_갧5EmChǹdYchma;L6Y^9 ).إ`/f1>K>^ ] b 5c.9GCH7wZu^bhG @/-R$ǀ䘸 ib<&Q{z<ƻFմG!걧ZZcZdAW|'JEkz7`&mU,-*<֢#&s;Z*LBdX=#8Tg{ >7 wS6GBf/,B4(:źeq ̷xҜ]PZ  ?؆-aW`gK}[(OAӝ\?(MP5!_NmdN=]{)kP/B}")]P{ 0xHy9_USUkK_:_<#qYWxo|t yQV4Q|\(Kkddx>eŘLԵXotXoW 'X,"X £GfGp endstream endobj 165 0 obj << /Length 1758 /Filter /FlateDecode >> stream xXKoG WTNsw&@ ,-$rHc za!3 AUj J)r Y Ƴ 8)2h İV@3'##gإX\aiҒO|YezԐԐJA-7"j8qDu@*H.i͖d ވl}@ɴdGE`66veVG$<{_#3^C[rGS\>^Ӱ1$Slp.ueDKßmEB΍tvEVdg μf~387_o_68r0 ZP\KAw,Z*>!*ӵs֭v& E8ގnc*\ζvs31:D>WBKDQmޅ[ev>4W&}P>yH2+*Y/ҾjuoZ}~2+ei'TL{YJgZ$7NSsZpzM37m'~e[2&Tjh @,;&Qy7$Lme} Ny@VpNA5tPOqb犥bRGcd2*^ւ}ZN"},_gQyŎnMa'"hm0)m! cG̃= }Z+9ASlה5`߁xL[>17zG ت. lG#V/I&X'6ޘh{O6߰Io[SIޖY7J ŠVӈ F#U;$r|zMTF̒t-takr}|>oxeoѺXuϟw4ib@7'ǗIYl)сt9UThf.Ri*}&(I&dq#UDdzjaĺZ>R?RpNĦj$@({^l쌾'V>`7>?0 3~Q> stream xڭVmo0_!$xMl *44~$Ҧ*f-_ϗIS!>\w=b'oGY=!˸R0!so\z ? d`)Kx _n8)6:+[noY3xzD(]JI2!=ޒxC&ع\X+;ξq 8(b(4.S,TA@A쳐9셑X^(NL!(wmepZЕPkJ'.EZ`X~hb=h[+xTT'>'f 56`UOTH\ہ4nNt*!2(t; pk3c$820K6 ](GS\|}ӰӖ]CAHNrbs3\>6񋦸 XFS/ Wtv7kZv0CNZ B k+m"ȧgݼ[;'-Ѯy7gz)4'&G;C m6\㫾6M-.7n5mq{EU5Tq֥tl rC?cM[B4q-7tsz@TS\mװ"XuZյt,)~D6ۅwbikp@M},Xnm^wQSqdr #"i?6 -rgSQĩ9q$1}"Gжm,LJ[S $uED)"8%䛣J'QCsy/\}@?]jVJ@ y\Pt=aCKA7 Oi hVk0fsoW$ RJL&CHyn|(V endstream endobj 187 0 obj << /Length1 1840 /Length2 13285 /Length3 0 /Length 14440 /Filter /FlateDecode >> stream xڍP\ -;$; %kA~r{k֬i}EEYQ(ig Sde3!PQ#P@vb9eFD;[5`ca#/@d P`=Aq 1~9@21(9[m#YTL@@gqAoldddh.Hp9[N@GW)F6KcBZRؙ99k xP|E9V&G ?LLll=@35IRݙ`dkdmdN3u#¿s2q;;197m5:;!8hw? dkjG.j ߜw?2s3tM,aS/{;{{@pvtx[` 2qAxr谼+'G̬*"-FwUڹ9l,VV.l;ؚ>{3@ח4 . 'io:7#Ik?4F6 k v`VWdwAm9I܁A&_r?d lj0vX_N3 <R-c{?a#GG#C~G/u49f&[;w{q>3;G?N,/ `/f0Ku OE<fY㻝?lzb_G̦f!'_fB,<-/2п{.w_[lw/{v+SNT+3wcBﱝ-j{rnv2x˿{iG;}~?/h h8ogdYq_+BƸ3!0KF6&˚HH/͍oFжD'gxv)ɢ#bx"FU]o+V.Y<nR K!;J5\r3jQ%?a0QbN#G^gy\TesƧ#OUZ&+;g<Ǡ2FL.L\7LGkuIE8`R)jRl" J&)S.:X<^ [l_ i)yd3Uߊpf~H(8E7y 31ZBZz;#~x2ܸxv+bD;p ͠c֔3+{b3E (IE6ϰlƔң1KvIВ)1 P9R:Qo6)`PV6ioKxM>Q:MƳ<%:*[;Ew۴*ƉiCvֽB0'&突}HWnDoEOq^{u$LV(I!mDxLTC%}Rh1ܑۣlrw; Ȋ5>#2t ˮ]WgV82+-낚bP&F,^ЍX\2_iN8m f(!Ҳx=uG~Xߍ>(w ӽ6ȸեW8d.a~ٝ#b׎,E2T0ob]6x6L"&b Y']2|]Eߣk+{ʖll??2=a%@W !9[r#±(xlz2li>*c} ^mO}=;^r SKk^G"H:;$W!Pr-&`CK,}f7C|fa[jdKޒ1;4 #zWG Y\~N'Zths95#J"*(%-aWJb1vRCq# `[[ #} p>^gN _h-EQب *vlArG ۲RSAW6RMZ; F0uR8{MGSΈ7*WFGm0A[S"EcгQGH?;9woظ*.tGk^DsyZ5j7FUa,lbc"iʐ|WX2{f2r}1fm?Q}^mաtM"B kg k-0 ktD%C;W~ڨeuc6;(kIm7h7Wꔝ::=Q/ifj|9J0W A 0kvdTjX_ڗi~fn[6t06ӿә K0pfkFj"U&Yͤ-ʔu`EꙝNK: 5H+:q)< jRV ఘtá??=5-Ldi[WHI&F6Y!oXv/x9Dm HPb3ƲamIC{!dQqTZ.~)$KPa"5EuEJ IoF<<C|qƍ^.Ӑ:O~.Lw?M JNDF&(X澢@$ʚ"ewo. `i2/ {R95 z~4YF-!N-e`i2/p]e'[j܊rKIT٪^w_7LZyd&Zm䙋EU+:lQ8FD6Ei_/;f ֳB<"O\"Uۨh&P-DwV/%1_bl!\WF J`dJ"V̷B}?'ȠD,TK$Շۆe@ vF=RY΂zNURüSw[SD4S(HIP4u~ڙ|>Tgm6Hc^~Y AUKY˫܂0FUz5gdv:퀃ZYjsJG N 1'6&n\Թ!Iڼ0UGeV ^\lRMw -8/_8^Ggh-?6!yDUP\K *w,J\zMduQ(zCҷ WlY~eb-ד\hٺÖ*#9o~oO|;c80/ZIRgZq&`;k8ob5[[Ǒ(HP = ]h6ֽ(7p[*k{GahyfS{wMEΛe 8d}o'^꜓'1;/c'>hEf  .}L1FLDmXUu&YBNtU%In<ڛ!mN!1r]=|Z1sfˁMW&o=5mGqy;m?B"",w) VyFO: >xvTN$#BT8=a ꋵ>be?Hew헙Q3 .̟]2/5j`W q%MmH=ۜ'ֵ+Z.f)?c |eF#bGBVoBcW>c8GhcFwexKnC̆Yؤ_ #CmR4~m\m ~o[\B5`QȪReG,N7`W.1\v_%j 6ʑk^L}@WIs&1ޚ 2•䊤|cW@^Z_9acȱ=yЙ3'b9GTikPYkݎ O뱜 <9aW!5@u'R=xAZ|֪y DzefdmQH&E3czBS8yhcU0X)MSVi{dQxΟt8 PQӇFk|3#/ؽ0v:#ԘSKP{A@)%8QjTs޳a^;. QOB*~ia)+<~NI-ΕVqA/ͳE*%L!!#>uUԍWB zm0H)mYT%"$[SUԥ,˖[;bPWҡFCğ_ %: unJT׉f*}Ah^)XݛLDaaN&Aw;ϟv-m=;/^xW򶠩C+Ɖ~QDY6>7F9phB5oB9Urh2bKGgBK@NccHh7:Q z .Cq!GY*NCDEO}i~d4 ߆3,q{\_Kgsېu2H^<[^Q ({rdPVO6ݩ4 %tIp$Ȏjtin9@Fe_OyAw`H줾_AaW@pwgƜ,ķwԌ*Ƈ'.^²[4W#:s>CUXR$ОUk-"2ɓ2I퐆 2)yk `QY DÜꊢ5nTiQlo+}S7rY-Ӌ)6ELZO)dtc.#i4g^3=>5Ur|B6?_4<-RR\r[8p--IY闾6b4t(!x3p͑Vd },RYa yϵ6I/{kS?@DKl[ra,S5UFrAVo習HFasͷt#$%Xcf$Ǭ*Ǜ?l;O: ?]EKƊƷ?jd8| `67Y[?Ux߄EDGS+[DCir%K6==%CSM>j: }SQYneno D)G/Q\߷O[Ϙ19%}~.o9u/N8`cŶ6;zaVA5P .zt}|!K t#J)u:bb4U|._؁5AP_TCQڥjD7Q~1۪0sT߂/c< )^Z{Vҵ񪫙ɗ'/aڄT밊TJ=Ϋ(Izfbk̽4IJqchJƮH8x<@lO10iA ;`VE%r&[N$-G9@bp5_غ0beq|QqU quZY5 *nTq 'K)>Z2ՄpLB:.Sj&NlvkB0BtZZCp?=oyhMF57d˶$,QEj~o'u%ȃG^'`Py,wV Ů׹KQt˅:֌=rm&L86@N6Ǒ{[>Sɳ:1s$s 1ޖt!|k R3,aa!&ݚ!Q|a8tr8u Cztl5yzAk ܄o;Q"!.XIlP2` *3Ţ0.* H'X8~{{SѢ`b?=F>鴒'm Ű(#Qm_ݾ1Aá] l 봄|z7j(3DфJ/< "\u PLx'xt-So\5 tl+{@Яa9κbwVnsKSκL'd0 Z't3T(1'n<%  v^26TrbxLl"g4֑!#K-o ulXۢ7Vh|7o pp9jR.k~C"pvvy7tX 0ܐ9ޏ]bI\(goy8!t&Ix x>%lh!/M-ԓ9C}/O~LG'V_:_~J}\0J۹9?=)أۆ (q ?97! DXNNQ1RHt|\sȚ~v6DK!6ܣPa^ K\kU޼q$8OCb2`p*]J\և`Oc oH}1L<6{Qg ёa\IXLY>&y{ t^4(ɺ ңJ(sRj-`%\R%g 7y Ρ\7,;JU,A7 %CΕL,(|.'Q8,V=x^nLS,%J@r%"vjG`b$K@r1h\Hֈ$h 7'v441AFPa!M XV<v JӞW2<VSn :k՛"B9glnXC%5w4&3yͼMuL:(71E&=p.Gc߳T?\L%Y"p!=ha}amɨS%K`aE Po²ɔv]ؽ/NMG]D\3d>@ˇʕbxlnÑaYڝ+D݄f-u).M6K%xj`NңXe۰t|3a,jr,޿ ~Fab THH4X`` FNӵ,x9̖|~>^. PJ7)߬R+]J3,F9ƾ1s( K&7Q_R93ԟxi5ǡk0XʏV[| bOٰ`(] 4 mԌӝ(}!  Yr) NNHH~7Iry= /I) !տbI}n!6` `@B1Λ|C!4Qv^/ʸkpKM6B[1Mخ72 L<>.,-o/סq1Ngkx ]pW-JBx`Ta4r;-Ԏ"pNIbׅ,g/Ttw_uxnNu1x7x6K)nօJ M}&mثn˔Q=?Pw1*~( PǏ^ G|0V[Y)LzR@=AkAPLtR.ЕJ) M;QTM̊C ݺh)LRQ鞂4#ꇙ{<Z%jW7̛ɼ؊Tƃd㛱4awk}xN&zc~iFwٻF'ꃇD~X~%Bu2A*p\);V/]}`rmЛ?]'xɨY]Q[wUQeV=+ۚuvjÓIut-2dmi) WbbObf yԙ}0ըt->xOcKӵ쐭tE>bԶB"Ggs }N—N+&0?uj& y'HE]0l9jee^o{BOcosc\s?1+/3Lpݖ) JN4m˽iZ@;(9\+q4r?~ß2 ]Ac20gT,8I_Rmi5/pǻi'N3 ۚrfIrq\Wb|&~w(]`1(ٱ` \xHQzVGsG1Ff Ϧ3@m|5,(7k;ز x;7]ܪ y{=7q-~;X eE8- mX֣̒1pM#4"傽)עY=ـNk%b!FFd@ (X8PGv@nQ1J2\KJ;)zpQ~Gl",m@|3AewQSL 6%t7W66աԐՖnE9-IMPZ\eϼHm3c..p'^ڤ(NYzB6%!LrHK IJېS{Wrm"6 *ݳ3,H8p=;K#MtL cOM_h`_Z:;kǨ fc"?L+{{:^[웍tFO0 6:S1kk>s8!bMFp{`豕J"e5_P IC+UCbь!}L'"go{0^LDKz5ȏA7! 6O]%.]x05'Eg_'QŚ.W`xPGCrzk1 ݻ#< V+!) L:OG B DAvoTb |:nqsxZsaTo(]0nDF}OMwfX}{ΗPbmTf_1AMf!arQ6pmc!uƜqr^9qbq#8=DЎݚGЕ%^s!wHÁv:#ZɵW"* N. >i4~𬭦f\2{־D`ϹUE~26ۺ >PH d:HOzeDӏ5Ycيȟؼ:Yxc|`~^S׼VF`}?#p`.q#ɇtFF^M?ƫNca-wą=t,>t#;mTI5G{y v2ʹ5YyRqXpv5@ؑ^a荲:3*zmMH;T 7%+CzĖGxa>|$t  %Ĉ:Zƅj>5'Xz$XYsG7Kut>]B vUC}E pD tL/AAcJFm,P4rˌ8 \y\н,7[pMG0lá|`b0FH) Se"gJm}o7<`3}N {hL鰏,eW%J%І KH83N<>cWX'UN.'[EB7=t 4,Mdx̾J DA{lulyp*d.#-rGᅖ.8D3 +cݹx"?;H- jyW:&oD#-focrJ <78kcDͦ7č‡١bA;t֪lc.>q\kCz4Ɍ'1w=V.ڙ1pn\g =mWa=jb:y1Yv/Q*Bv1FJpLT`~-qhpJ[?ER)Wǫ~us LHDEU,8x(yJ+ꀙj 2މZlymѠ3ݾvѡQԀjV6nPM'wj1TlU:z߹PaԊ.FV)߼ u|C6PM JrE9-I]VgI,ѠOؕ% v7x$dI/@p#ʚz(r&x͡]P(-U7G,o[(Yǚdb'5H[VeWS} ׆WnsDc endstream endobj 189 0 obj << /Length1 1855 /Length2 11446 /Length3 0 /Length 12605 /Filter /FlateDecode >> stream xڍP- Nw @4ָ!{p $8!Xp[pGf̽_^uU^ηRdp0:@lB)eI=N.7*jNv! Bm@3QPppr8888\!:8 n` 2@rArpt[YChg# ar!e d\ht0Q ubgwwwgڻ98[1Pk5*@Ct v`s9bro.@ su%,'>cȂ=@j`rӮ{ `v>_.Ϛz^.)1we\|3YJ\ouyb;x`%~Dv]o`=TAvտ7]o$z3=Ǚ~n/ `!o/sYAߐyNkOGƳ /ܚݿso@d>_r?w=k_q>9{q|3s13r`;+]gq='x]?YY u~\8SHu;7MT&VyϮHILՙA+ΗIC=؋2([[|M4&7P& %꾐jyp kTqrTývRc$lfS}Ol5V;0x.,;5"/o8O ̨܅\q7߽*\i.pF&%wgK)EY4}:Ru΋ JamL3W_ڵ ɩ/z4GuQ~ tﷅq`G I#"7PuY.Ԡqw|\\  +5U0G*'[1X6#+ ^O*̓En^Xut (3Mƥ)tCh4j >ɒ4P r_]$G14[_ ONEZTKZ/8 }cUU>>*Md8T`#&I"V:n q&b$P L!֤o}i7^tz_OwbpMWMQgXek,sO3KLi S;lR028OKMϒN՗qj5*3LJ֥q߃s[զ})QyiA]wН0kS]!6J̙QenD)e$A8""Q|s鼊?`1{ݿ"1Jho<@4_^{fSKFC`~9CHxm|P} L$!e1!z3 |R{jߓa\Fe,0lW-n`{Bsݔ`ԁ௷X%!cy}Sp&b4F^P"$($ V6Vyh?HV'wWM.(&;6T57i^QݯO $fo#.Nu~Abme.ӑ%4]3L< `Ѯ [LljT[lF;m!46ǟIySi:\L(g]jeǨyά)Jj$.^/lAeV*nRc*&2Ob;62! Kbt17~U僰b~/q YLBǧS[7cY0εI_ˏFFawiAj%| nDeL=TSI -xgDxxqBד@P+h66#jMʸ{<=B*Uq2Y~`N〔_݀EENEg{-ool./$Ano@Gz̾\UC:? 0 XO'浭)$}D-+v jL<53̪z&P?o; }Zeϔ'w&j?wto $/.{RR\d<PAQvϰ%OU@i|O)EtwV"m1^JZ;SzԒKo4a7-ƀZr`{OiCo~Ƕr<+67 O٘w7};^τMSИҒVLw"@跠}LYJB3yww#U4+z3͋„J[93H! jT\8"Pu*b*Q xae뇙O]>2*)Zra-UUYAOcN]5[(U"ƺ+3aB 4g}ےd0 ^8Sz.Q Aظ"jAx`֘R"+qseыWrZ ]4b/M0f4,,^w+jWK(v{#~Zh:!NRqY; ^9AK6˲v&Nr氫@&ks+\5&]=ϠPxF>1yZiΩ&vf> k3$Kg]Vye5TUl?`BW-|w̟]):A I&Sl${ ق}Ӑ֚Ag̣OE/4|nIrtNɦk$}.^NB[S꾐Qq]0&&gxId0|`E>2޷Վ`=Nj(w[r4eːw1hU8Aj2 *m! "y%O6zmz.p$s{2Yߕw^Y1gPjKD&}"΍ӵ|GC:ؠĽ{@Jr-$6kfO\[Q2,545[N{,4*^Dr%'+?_Ŗ[A$ٸ!H+RPnГ{*ޯpJMM;asV/18J) kt{=mtߞyHz3|Mu/ty͈1xUhZ >!='\/.-)(˶s#"-GqGF¬gr@5F[Wc @ٽԐez. >_WRb&C<)8BIf29:F!S:nXd9,$O#˖k~"!gBK<'#Ώ-tV؅مyʾs?JmMc ]-VN-&G&i*הӼ[YL\I?9໙~%G ;B@0> +đB_~Nӱ'V"#%Ql*; 2vgߙJ|^h mQ԰V+/FweLlXX(~F̴fd7ջv&+c ) -=iv6Pp@dm+kc<=2A5G{g 8 9fm&WmEJ}hae5Xٽ-եN|-v!^m8RU=dO_X;4t*c6f`I<3am=7:t<97b];x6gڌ !JrW!Ɣ5-SҒ'Ǿ`(&&$o8!*1 .u?Q##t0}&S `}*DXqC\r|s@Ox֠rmC^oli%+{yUyqB}n>ϩe5=eF"c)nV!G^ _YZ'Z%$)K;JԨ@ x~6ìۥm`O&-YF}` Uiz @ V^:g#:%+P1}M Gi5l&ү*m Uj;_zE)s& C=8`^n<]{{/S 04w,06vusNa/󢿪d]&@G`vbەka]v9~xp^W[9h*m&pwC# c{tX,` i*dZ]txJ.o#ixЮ6MBl 2 o&R/ a9g,01ed0y;D *|ZӶlٹm#*DF$p.}߮'Uuuzϕ_fn 2;91%$“9b#^9&d5P}<}nRG,nv.ƋELzE*6.SEa<寋gIqvteM=L4!_D\4m_|'sgyN:ɇڟOUFV{ b }ݔLDpK=,dZ(/Od+CFN(Jz e#`U s5A5o'>Dd7ҝM[!Üh[FϩvlݮNq/]bzU*9ScM4جL/I$Q%(-.Zd|aj3CC@8m&;vvꥸ|`"u$ipK*tcDKѽ21By]ғt2ɒ&y$l Ֆ`[B#nf7:?C[T|B 7. śelFFy"TL#^ K7eva?{c~a }(nKfٱ 7._-t>yr"! (~;LC HV8!ELZf}'vx!HhB8} >G>kg?ij;'O;Z/fc+_:5WnϝȬJ΅Vr6{δaw邑͛ Ťdfll`0>1ϗ}!Ґ;dd/FM7Vc &]ձQu +J qcpO[>'Ů}Nx!H*S^tO:/ r)ir蒕- ӉWӈ%sl $'1m8kehp[1$h1&kG8>6݋^`~}uSJ5"?dZk%? צ_! \.$*YԁR҂ms{#z9qV'd܃4X{ kk mc2#;Et%Yy Y%%%2;>ŏhIMPEI[!> ̽a|/Epe tIa =Հ5ZFhG~d|77ti,ʜ [Q %y~ye<x={v;HJa_ oB%T k +`X`4ZpkU~gշ^o%{+fcZ];,N,zy!avZg(PZ<<+zX i hfKOHovV\isZRځ'q554&hW@uw;ף $δ2`)`\,*wuU҃3l79 /{b}r }'f2G|,kY+hjh2DCfW:Es+ͼ31e#ٓQXћ2c9VҟFo"oU %.e|uoM*ƆvˇmVT>ttȠ""с޺BomShOIu3h?IA+ѷI_0+ln4}g" m:65Ww7RӜʚ0lC?@e  )GΕ)jȟH=*V|6L2AN~TcGYa'<@)VFÉ(CۈTZIo~5`KsZoSIIbJ?` A=1ӪJD]l[+4YN0) QUKݺ&la6O>NV?A=)Vݴe@xEaC 7={If36<ժ[ElCݟG97G X#dnY58P%BLk y YoD)@'za(`iK;0/ Xᱦ# `P9|(3MGu0( 2>ݚuY= H!+^Rܠfn#cx?~ *kvޫ:oKU^ ~Mߕ-[='őtL;QiWSnӫrPHDb4 JBw %R@qnLu)ذc=-BB_CV,kb4I}4mΘ5ü{z|-G3ZWE!¿`Y|l= -߈I˼)V`TsPee=+Go Qĭh)ܰVg3dM폖PHMn33suF;E2"!qbjԁj}S-v#;fط&|CSw6k|!g>%V=p@rVJ$; -y#NQt0 ۘ>;n6{oO> ]v: I{$n$r{#tOSGr Nr~}5`u^9K]zJȐIi.P5 K/%\1pgĻNѸhB/ciƑ?"1r /VKj}5Lfɶ6x+vuO/?dq6b>ڮDO_ IDY ) 3%[4XsxcEͫ;%QDd^Й෠T -woJLPQʊROba3lĒcВdy^`{cr̘r]S~}^+B.=iǝ,QO)s.9;R)@KGi# z^I ZWjE'oBځ*Q<\>B4!t kJ4N׊o- }ݛ67R\Oof3?t5& $h:T2{J*Nn|RzpbJRU.ǝV87h}Iy!O(xŚsJ'O{ckZ#ҍIgQvWLMs#i$.@ ՙ?)2«H՜#(*u*c7L4 ]YT XÂδړکAp_ T@SȺ\dب w{MBBeENѬ6X͔ުv$C@;PU5J+*?nf C &u< ɹLV{/mj̨ظg?<~wRSS O!);#3܎#0[0oyrHԧBt׌ѳ{XDP@^GTP7D`MBeR!Yp*@K37 <qBTQw>52},qf`luRW桎KjpJf꺡Q$&Yş& G%2)*)]Y%QL]{hJN]2*M!/nF(3V42?ƴK޲.Z:|qۈ>uG 설BvkM׶7_HD`F#qNsTYɊ*8E43zNà}b>g/$.}Ý-]^ Ռz6.C 'n{`qjzOǡ5~ ̕ GĀVc%w`D#c *%aDQAnNԊ}h \~pTh8$mC&"0%hKrr> K0W0OEyh=>5JGfm%C ظ*cv|cbN6޺ &s,'ڋjXaņ):HCbeQvMn1FTnE |\"Xtã&PMqo9+r AҴvz(9ZH0np׽rr?S麮 S~m՝Zmh|g;&LCbc7mX@eٸ۫לH?ZD[(/]^kkͱ_@0`\ pVG?mVJhCgi勳/ݎvR'`o.(>FKl'Ԉ/OOO// 38,ڗOiއ2tx/NȔTv 2K+'Am&x8)0*ݗH[تZ4}$?#pJ~g~OvOE1oUwj3MH,k2uIX3s^/7.ew,pȖ%S\k9KTO_%–׬p+b^uFMX_+"5mzSʄ$Ft$ZjDyU6o(3Nm.Z{ýC ںԑ\?QA*z|1%.8̋kP֡>Z"pA0=J#8`Q,!{&;a6zY %xSTnf|g~ǫ/ 2p]4w#?FW\Dζ(:>=?)cHyڢIY\ |\?hM@fTH,0Eyc^{:1je_< Dpv->amS%DO7TT)H|%w'Ю<R,忭+ wTIY <=+;~U@3nv9N=STx-CY؎\dYy <"n$Oaèwn==o_%67\{!kqC)r:j6B)rb*zgWC{E;\4SMPU-+dq#6Q`4.Ϟ& D'BOR`51@dM$p2)1O}eguț%.ƾ&{,BLV1lvb]]{e+|&_g~b\D㪷%j؀@EW{t274SvnlHM6ګ%zr8ՠ/Q{+m*S50|*% SkE07NL&naheB7?Y)ptUAvuۈLgxy8fbɌ.K2B-3!jR"ö\ q`^{ϑDkS^qxۋ) vd_nf?c(h('ݞTsEBذvt{"YD:N'w endstream endobj 191 0 obj << /Length1 1448 /Length2 6897 /Length3 0 /Length 7874 /Filter /FlateDecode >> stream xڍw4]6тDFeFE] 3 w;E'z zD I>}^ksvgƬ#AZAW>^8@ASH  @ll0W8/1(D vEh;M$ DA ?$/C$JvA5$BtBl\k pv9BQ0k0 v:wzHk!8$\]ā@^ /e+ t.P;U0@ S/@Gq"\n@oS|` Bs{e{m|J54To<#$ Ą"?haWaݦe8N?ci!Ѭ8&Hd?Sῢo$jG v2@=H ghpT]1CD2 цZPm ץK,k&o=7R a0~!a{>|I@=SE ].tq~$y rDV#1߈ODDq( Bo6K}7@PkDgrt<_F&پr̡.^rVe<[BȽ|Mq,vs^xKN_Z fǨ?l1nt}Ռ١Ɩ&JG~ѫYW:?6EgJXt' ,x-*s>+dS'dn^p ,??^,we5a:&gFѧ(N-,ȆbQ,X1'Y{oOJuV}eӐԊO{OӾ;xOH"PռƁD{V L_nM, Z0U}>Gډ*J{WEP"rt8Ho5:!ֹ{DC%ڗ3Fzu9$3 goM:iEMΚvkM8@uРV45rS@k|U/S*:;# zr=/Ea,a&QP[ Q-z{'?_짷OvRe20){`ȶVRqU,G&?|ׅ2;΅(UG$'Ho ۷4Iy_SJi}WRE"}&:g{ѠQ(m߁Ҿl-~ҙ [#CqEǹ5,ɉ&簃#qA"iۤP5H"Ԓq*H{ lJ|,@H;QrѨ:pe=` ʐO鑔Ҹr[]`#F-vR-uNj%cOlZFYIore utl7aE݅܊4(rT'*OyF\MǍh{bUt*'SP$Ҫ âF sC-KEDQld>ߚq Ȕd=QӥoqQL^ E8uEpoઽYZD [F5:%3N LwB>lN/^5Y@>?(-+u ˜!ieaQ>(nadb&n~X\!Y66O,%Wχ^drz <_86X?ר뙨aB"?]-;}LD;Z41s93EZ2&(|M=MwkpBBum .ّc)F=U|!xsy2;oBr/Ec2R(]x0 ET#h"J, Fլ=wM`\'DsAƮ8 ^:r!J,<`b_ta Ӧ!S'Bn% ^3Z: 1kyrvIOVKtᶘC'ƷbӨ)5moalW'͎g[%I^ߍ"XYS];*lӁlMc{ yZte>>KRzJ%6Ke!1׋5C@noG%d cM)ڪzOxGmG^KS9E׸ne1#(>)M1aFclkqtGj>S?ۜc9}dJw8Čթslc8m2G,=ih<,k‰PMB5QFC=y qn=X lM&=am;pbō'Rzǥc8`p+e"a/SV}7Y'AlOgQf3}WN,gӥډOwlݡ{^w΄3w 5,#ɡ|docjT@ jwֶٌ_-{ЈQ {E͇@/,?^lUme7-ݳ.i<.R_R)*y3sK#&<4Cԩh=(ҌQ~w|n)6+ZeqgGvKN֫oK_}V=US;3ͯO9V x.Q< L\?!BuwJu9x"/8ڷҥG6 awpاzuq75x#>ty܍Է鬀1ZT.s{ƏuDd"9>8$NŨb4.f[c$f^|>ը>om햴C #.FJLod)p53áB xM9EqD'WO+*HɅ&U5aoW7UvX}I@YߊOVdG=U͵T1џ>58'՗mA_1j'+*%HTnGWcQitdx3g<|[za4Ve. &-ci%z[K0dqu7P(?_QQىq;-c!6ƥk%vt|PK-3~*oLHYvȏ.:e _^{NM' tDj|X.o庥p>6TMJ>=`h3]Bd 3l. _32<8,Nܽ"w1O%?],Ȼ%w8oIXaBzI$pdjMwOɛJ %}{Yz4(M0(&=Ϫ>:GXu'dzYeD]I~5qxFP,LS;k)<,E M4~QbC5YHHM+4Ť@{ޗy(E͍> ǯ SviQneU!EzCBS7. 8q$.H'l#[UV.(;tDpn,U*휟GI$JZ#>0kSCD9-{FG-g3o&z:GG dֺP?91p!eK|73x8TwٻSghtmF ri uVK'psw`p475U^/KuG1{D*cw-Bɤȳ_J#e}ɽ+9v6b3' &'OHEשUS=Qm~0 .qܺlk7"Q +$<0{22CM|fzԪ,KdT.BZa61ŶkŋȻvϘԩ*B*}sFWlJbZ01)'stil bxLQe 2⬰8LTEZ4If]Lx= '^1D,/>q*׈=ۇ> L1((|^<8uyZŴp+~Żi|':t"sl\>ZCX994 K9#H{q|[L9(*qgR8ÃNB<c=7]*Cv2+j2c=qs,uGv7ojpY8My/TXŀcq̈́OLGZyyl [Lr9 dJ{8%df4mqB>fUAbX]:_+OS6\8|o"+I]z57n-ca^[fcG(-pJ醥WGWECrҥ \ eGrHrp.^.4I 75/`9]0) .D,kU~9Ei19 nz}:/#~6nLnu`szMT~N(|ǮԘlOai_CYZApMƑ84@4D&z|,x40X3"ɾШ~^Py3] PhBuz}3!ٮ (}DBOG%5t-,^ Pft,C!11]+'2Wl4y!yƓl4p~-e){F+}=ۼՂo/:=:x1=5cV^s(T\Q3GKԳD;_(vH&s(QӓUQē(N>MS e08+g~Yb1.wDZa/PIFԁٶx)dM/o䲕P␁ ;;N:JP?c@3J$ eM5U/ʤI[% kL0ev8fƏ='ER2-j~V &qa.E`J+ɉmgisd\eA!o8Z,|f4rIgMEMx;l3 8QpMNNC* ۉ/\ HZ2ʜY!fM?4hK`ZqG]ʻ#K^F=['L#] W+7(}1s9E͓Wdw@.ysazNԤ:wI57\]vS19` Cr6K\~;O\Q!*|᷼U=;W3@Vm<`ȅL0$@a@V^t4u*/b<}y PĨy$=)wkz;cU""IX\3Zizi.~xNY6-,avFnGMdIqShÂ:٨Ht`خ?K{8fOc@@v&"Ɠ]tDӔR Rm\!_MOӍf쥍v^yF?,duФ+xnO56>(0=#k҅cb=J*[8% endstream endobj 193 0 obj << /Length1 1469 /Length2 7186 /Length3 0 /Length 8171 /Filter /FlateDecode >> stream xڍt46],!ѭ{Y.VU G(Ѣ ^% ^nos9557 >,aUB\@1u3݅3`n|((Oǿ//F08?f-W' V /Zd[FGAVN㯞!<>.>A (, F;g A~U/zPՌS. ɴhB(F?xϒS,$%wG?s; Bj c5{U`Jm%M vh}s:7دO /zɬП70p}0S.AnZ>>A!Ey4D oix$:n`p%uˢ/Hc7U? DP@kwWWte/SzB f!!gdi=ֆ$RL!;@_3ԋf;x7kɹe.LV1T{ p1(m2XMPIX-QS˻t F;zȏV=kGg-;0HJcRtNQA󅴃5*P $Uy [a%UVj;J\fYI e-\wH*;.UߎqcySܶҭKX`gI&S߷a$`c+8k4 !R!DM-f"GU;{; ^#s_떸 Ns e;m [x!Õp˟ ~9RWH^Z%*  Eq2%X)6H]7 =~+)rړ<'NA(lj"(ډ,0ԛMnZ0M4+ -Swձb=J&x: s͂[,ijZي2qnyeA;][L: s$sV+gyQ G5?Zm[K+ ?TRI<"`W-ȉ9 % QATvE_*o׳Tezr;呻d0XSU{+kL{]%_Hj9_k YAkh_XS&cm| oV:$Ԋo,R074> 2ckUɇYK^[1J6D= Ooh+!#KQ_ {0T[8#M@k )͛ynY捻U+4(M>},hd#B Ƿ-.V^n&)t0y,?lџR0~ A e=ꀞ3+Ҽ+af:EՃɁdE?WL> SNq `dXHJJĿ0uJC,ASNw`[$qm6h;&MxȨN׆A$fzM{A+@KEpdC,Q+@Su|l_|(e"kt he>nu0ϲ~C_:@:vLӗM9wbN jO7+EُGmD y1G3YBMkYi8CɂSܐ R[:眫 79^\\4Qa.CeyDE봪iK @b_M4Nj5\󖿍z 7l?ve:[MA4r7 Uw:?j\fMfP۞4QYWeyt\W={dİZV{=RvxjIjL `&.sc<7zBp9E`W6g5r9 JCevRz%;u,fX&ZQrG;l8 ,wTF.,6:=l;:yf'pLv+[GsC` .t;Fޗ +6瞇k4/=[Oc}|U,ρIZ'ףXeBtQuZFhăǘ#=5Ǒb(vNϖxq{yz{Y͝Ǧ ƣ'B:bl!%^O&*k8ϿDd)}GK{ r_ih7{!S|uo.F_J[2`]%FR&yc[ܑ`=IcdWjCC{_̨?evoeH8E7lx5)F 4KR;tIA/ O@s0{˷@1ncg}=b"{b]v1H% 2HrxrBnڦ.QvaHqu|~Ib#LV@s3(<=W.+(.wr;yR~W 9^>ymM-%[s36I@2TV!~=VxS µ¥v8u6xFYPHg|ns$|.N9[l'D)$xD-G`ŧo e M tYNCa%]Vb5bmk۪ȢU>[JƋ.eWK5ZOx߼h'M x19<>݉Upq~<{paI2D #lݙw|enp]AaE)fЭj>he(-?o$:> $B_N,TJMx`#sağ@:!t; $$RPfNPq7hb7 d׺!P_IN@7ӥޝpDKaAnDE7>Pjvq uƠJ;5P&:~emgԈ *Enz}&-% H3Q=֪J]v,Q^g㭂=dVz}LT3Sq"Cc⹿YߢJuNroԒs.o\RWh$gH50i6 h%) ĬlTؒA?t2:\9 k ?U)#8B+[2.LkJZ_&SwmqV/Oûx`d\yvVW|~^`8c2n$5\LhJ&}pvn]T *ܯr>U=Vyo?4}!tdzibmlJm3bЬcj|CSyyRu&O w",öyuuYla2n;;ƧG5Y>ϼ}nQ/益zkvGʠ2Hl=^p696'QJ#КXࠈCw5+NѲE(Δ6X괫|BH0aJ>ZӡL֛%a'|XX5z [FL,.QԴk[ؔk_O7jW]T)b0_H$ akދ0^BXΎB%N5Yk UXBr3q߶dZcmNaKEAZbjL9סe}{$,/l9c_Vzn%n롘-61oOЏufӔAi"ᔒkh_#7%hݶ.*;u\^I.#h6Rbi礏*8p1ُ<:6JRX%a+RQlDb>Jg |A*Vy=/FUʶqƶ=:y*Ten\orfp2n;Hy\ `RhkI ;ƶ=7&\G7m@z ,uQO>Ig+U)c~m%ǴLQ9LF[aKDw=iWB.KӒuz}?6{epR ,l._Iay&f$1۟1|3 \2J{q[伋NqMytd#Rέ!G~Ƴ;C:'l/[yUoʦL8l;ُ O1}ox>,ZN E]NzZ^2a`ͧ>R%%9Udt ! ܠT+:P!dLgc0 ~ǀݓL3mO9{(/US#1y{A3GT͂^bo7SS"o1|=L^#bo1L[-eaʷ{qr~b 1y'N)hծ5tǗ zARN/ Ksd_=2{Re-y]j5G;N3~^:ވ_b-[{)4(8z,F@gP it!x(> Rj_(\Rڜ3=6ŻFPS1?1dE9pLR+FH֯Y9r?xO7 Z_O8k:,fR_3TSpF3*66"-nKІl8&? }xTv`h+z0(v]`iءqxh#U\E]\J?,8ԄI't}VY-zusF4jiW*8 w!HgZ#9f}:[*,$ ,iY݂w>OM\m< x;0[m)=#J.Ul:P p;sЮ޺=72e'bxQhsg%n{ 1ٶ3pAnօ8߅{zes1u#A.:!J>Ǯ}nk&ˀ=VvNL6xZnBtЮTM'5ӌmq叅S,bi$XgW/2KÇyث)o@&ZVaot6fG&U <7TzO>nZygr)Iu~@0% azze1 i7o=TZibf}]9E.Q"\*7Hk̂vpbN>}]V"[~0a]#v '>E(ޙ65Rv%{qI;0˅'<_^㬒oc*P;-ehb7G w^hHXG~@vW6HS^0᫵U6]V雈BuG?S/OZ_4=Aɡ  vθ]85G&mV}=Q6lm* 5kem695f|_7V ݵפ UM-Yd3;}xX,J"xBPA_Z3Cc,u2w˶dE|\6ξmЏa ގ5U@@$D~ZOivr V5oK FRe7@ cP68l xqF dWBbV5 \C.Q/TCdm6ԱIX&z:˞WQ]œ F_QvA;RY] | \SO8(TN0ԫ-/a<D4H8P哙]M'o<+-j tΙ”|*)k]#QN=>R숚k3>qFueae튭(TKEbDl5RɴJv!ì)ؼsu}qjJ 7|, RԊj`9lr^vfåw/R?0Hp0-^ݳ4%Cqޘ=q&jWް<c/*g?nW=yA# TڻcZ~thYt))Յ#~Q3>U oyӎnY#`څ?󌞀pd` endstream endobj 195 0 obj << /Length1 2366 /Length2 20129 /Length3 0 /Length 21505 /Filter /FlateDecode >> stream xڌPY.q.ww[ w[pNpw8df/VS]>KtĊ*tB@q[=#7@DNB ONjd G Otpq@h&5rzL,&vn&nFF3##:pD\,Mri[\yPP8hr,M@9#' ۉ&F[KQPZ89q308:S\-,@G ;a Ul͜\7  2:H쀠e6S=Md n 2YZ NnN#oC#kG7##Kk#7"7 )'=GK;'GzGK)2yTrr w0NَA di MGft122rpozUw;_J =lfoI-̀o?F.@3ߊFLLSK'1M 45 6{Lߟ<齍-_eR;脅mt:f6F!x{oE#woe]\oS Pr]F6F/Qo߆$lm/Gmdci:;-凌Z:o"̭SFKGqK7\Y[[kmL>]o# 9}1ߚLoh tk [7[z3[eg08 "'A? 1$ "A\ 7N?SzTX [jg3~kHXYKll  5 R2+-.~ :;_-^?ѿś_-`Z}|+[l[%0_\ml_dC kٟ2#uEmvsKegp#g_kn3:M?>Mz3Oο_e{3w|8cppkbvr[Z/VEϛc~w|Oޘ<_7[߮@7 ¬ OUMP7! ;̄WnԻ̬j_3HZ~M]u+Ct!-wC[]E}L,t—JF!:5R.||2 8~egd?a:?XAvE | d5|vc"fB&9g5RX?Xp^I/ZN$6>@V*%ѳ3W9nuϕG^˖D}A7_?(ucySV&q`~V&<C/Q!EB(vg1鱪 Mc *hg+m(9e\oׂ޼hA7?A׍~5 wT`Ww I ڇ_pTTrI=zFLnyZW6x"S (R/"_›V\fkG#IaY?IK(We h>&dZmzd>4U:֬~ .'[S7%kM"G 4PmYE>I<7 / UzUKMik `MLҹ2"Xqw5*%˄4J=BoS)E't,{5 L%^)6uCgAk~߾  \r$b"dC|tSeeIp4~' Þ t&eY'TQ39}M8cBHfҲ˪Bfp+Ւ $qBN^.K|$œ} ;qVe?J‚w :%C,kKbX(LD[X"} 9\2YqZ=]Jࡼ.k]p8:q7 #32GLnh\z+=Bl#W܋:1c!R_7R+5꫇cb.[{?ފCz=kJg)(96'XLȰI%q lYʅ+E L b_|T#mROu hL.&?m0, ;)I~ 6j ίY6&g\ 07'a-'ú\Q9P]ZEXa T$S(o6ÚG'i˼&H:6+XmR2g}<Ƕpœ/[}A襐\1H"bCJ cd$,,m\s\GQ\[HGGDf+̬h%d35+G \Ưy;$ Yã=V K#†ut,]T<חܘ懨ʷpT(8= j]k۪ "nBr._"Ϧe;HFRk+ H-;m&wSsRtlʮ-&\1}%Ewz=q1v6탱g,,Q' ,v).#a.Q)ݤML,whM(^>iuCI 4fc.D5áY!W.3m.ۮB{49q~'-b.qi gAT[ '%e37' =)IgcxxY ^ EminCRdL)i,؄MԎCUޑ$ Cى_rs4A±ɟHKE؃{%e=NЁUFql>CZ9 6wk'KNaУ[+P|rW OE)4Kg4ɠ%׊PF+|/h ΃0\a:d@IPK}21cx M{+ŅNSw4d\0DP"7_so;6PQbgcI"d *eY{LX{<Sf/m7>n~_`;bƒID?OLJ8)=d繝A%˽~`0fYKJ;Q8E"QZGi&8 3CtSؤ[73Gn5:@,q ;4MdpZ3v)䒃\㯷L OSD)b!ϖLz[׹`Bv\Qy݇!_k[ :9h"%ù Ւ!5 Aa uz5NSbgb.XS1;}}yCO'i[vwdI+_ͼM{hغ}W~fX*__xgbyc`ՠL["56K_Fѱuٓ)=+M o^Y4cY%SGs.R&e5_Վ/}o '8/S$A-B$!ʼ Nr}W;~4J'!7_ǟi 5Ŏ !(ܹEXujD@1 /HSm:I>gݥFWU 3vl+Xɞ@8mϽ8,-#FK>CS}]ϻp>{mr 'AD[ ZjZ־ܼ 5\[\ЫpX]TWrK&dC V>3׼DEop6iұ8Fd=[H\HN_Q$IW牯J,?ړEQZa-nXטog5kmYUW# z?"i7aL_U"h!D)C=gnXڦt李_^6 c} ܺ!2"(5B$Qf߳K!-?q-n9|V&&7:(y3 LWywgBp`o‧id/"[X.Q5OovK>EcL6%U;ye[g Rz \A⽹}!}J=eFrV]&.$&!1IaRiFx"{1RwSmWۦw}",Jmd L $,0,KAZgRVʰ ªY(t}H2|Iܳ#7(Ӌ=Ix[VMtJ \"BhGవ)5F޾ʑmC3z!A!bpشC{9I~ڧALJ%75GX7FZ_@C6i=K蘓Ɩf,mPٲj}般@bٷww6fgta=մH&ίk5V}ѷf$ɟ(\=OL* ^h{%eEc7w A] D6gJO8V 5\ЛPm i 4(D qԟzfWMh V.H"$BbA;z?0XUQ42RD8Z޲iP%&Zg~" ¦8K SaV~wU<112OoKDČ[xh9 @_&bɝf-^|[GQsĮ>\;7PC6/f {"W;g7Dsh%vyJz]sb>w`^Ia{7qAqEryn Qtw=$5"m`-eFKCz?frQrSݒ[Abdat˫O{#w*D! uڋH٪?3 JޏJ}PJiZ8TiW1ڏR08tX#c("5s4=" 9Ǘ z&-FGYjؖ72`. )Die!Fm}p$h /92:Ի9Zj޴R, cC壴1}8,6%''[!/4X¨.µ.`X]1>X@l(Xn4r.>NQŮJȑyv+lD`˞$Lx}6{O/X7ηs=<oa Wz2L;2 C\ƎvYM}q,ǁ w4e\wMԲ8Fw*A[ʌ-_\EUΡj7< VQ 2&ofֻ²J!^άXE=OzBzvHw Mn_qՔl⸈ _ƄH{B 4=Ffs*"ս/+X9@DR }m| ={I] ]r`M&-aW,?&XIm-;vb1Dd'&IF⒬iwpA?>EɗgnSJ{d^<;JtJw  qWXVc fҨ2סߖwK!7Qo+EW#Bw" IKo`cu<@I`m0Wn)y9`1W.ʃ^W/IQV6bimFBSWXu&& dRmc> \ n'M&Bv6L÷^0$BRŕX*T<ߊG*m)8V'B1.~|a䶳o%dJRKֻsu8># \d}w4㜔zL'}<—Wܖ`i+w~M:oWXP3L\֦֏Bg[ sL+DBaK ..U1Hz4ǜ{LOHΉ꛺L ypn~O̞y,j0qngM4.dۑ7;ZkE2#l9`3b+f16we&IHzrwP 2q,݀pDn6Z_V$%Ag> }p|i=+Y/Ae ;Uǎp}MȉձP]#-}C*7tBtG/jW[HΨj%AzZR`$=^lQfʳs4Q,?}c>x#$3AE ٮEx_59:c[9 Lm\-J'״H㋷!yT:znpbvBoFBL PMkԜ2ई? e1Bd*ߎ=ST;7Άi ޤ!r*Ь(8R`w]V lq 1jTZ^CJMaL8H3:LIF7 %amyIee{gg0g^;KvzLg,PԸxs.R"vCr{weIz,Z6R Dtx~¬tjRv o{}KqD[V&tBI;]6U$Ɖ#$>c߂ziF!Qyg^%g7霋) r3 8AJ"~۠AUU7>8JdN],h^,"vSї͎iR-W5M{s &L+e胀ӈX([6$J0|ZW"i=5b sBz#1˟ZG4g'>C)TMɩMdᩎշ0 (U(֭G:Z;K#H4@`5*SNbX pX]gK|o8[4oGecDKZԕS? 'wK7]C최D+t@\}mJ2ݭb59c*X M<2j|w?(()-eD6=ijOoI$f(@lRy-x _WFrjwX=H䌮Y7IU :*kEN`?8ĮnʍNt?OEمG$fT>~^soK EW|w: rs/Us a5- ʉ}1k!vfNO^=œfT0N'AXe?PK ɝS@wn!7М1}OjԨzuA ެ_Ɗw!.PHf-5眨GfW"sL&0?Ũ=ԳСD5{X< urc+ 20y=hDXdXwwjW~jA)#JF]&F\rGB6Y_x l48vIIF,7scȆ](6`WyK{"{lL0G7Yʵ^od=4j'bp_yG@ws莹Ui=I@A}Ldb )o&8;U*:hdxC$dB0Sl(y\OB٭ a0YeD~>8D%*ހ5UiR=JZMX2#V}KG:5Z:X];$k`HOFtsm,fq6&{v e/p]2 ` u6ĒLӻLhE NrnfYmMmJc|$X.jU-=֪)ȗШɝO7ڵ:=;  \dϷb..AaK#Du=rW{v4Qd D,R;YQ+5a B ]V K0)-/6&L)_>%_b x׻Z2^>HG5p ـHHIM;R&IcUպLz.9kG7]a~( هȜ }6fN$ (* *|ԗ 4g)¥q"֖W_( ,f8CtQP xA.{ L{{H\8xFtߺ(ͯjS'K",-}BH PRmTQu]b#Έ,=Љ|嫼.G=n&I">CY!:,Oo5g <`+va#CSy7)$QzM5KĤڊj韢xȅzg)>y\Mk/R86$!۞=\"B 2jnk& .biоd [{r4U'k+TBMQۿOm26ryI\ghjҷ@!~Cn@ݞYʚ f?a >+=lY(Kh*-wylUmT΢<$XD<շ`ipHY0e_J_U`iު{UeU@kZstIR؉$jZ2~#!*ŝQJR[-7*6 y7py;Z"+w}=Sz~^+}Ka]IO`T.mB1`MZ)n}*bQل4C،ä> dB#̀v1i\c2u:ado9v#KL!]c!h&{x־r` (?H|__8`5svm>yZYj.\'8`4f;mḽp,mJJDvK!lg\»:+V7F0k)G04w?}l%4;=Q8ddh7t8T;l ?[^ò^ml D>س8ɐ'?Ui|)B|9A"p{ 7,T8M ٨CJ:.Bs)R#?]!=Uhx 3Vzo1XOC:*T$A b#*X K wH4BBl HAXYpkj5Rz)ʎE&T\Qo[%|/p%$rfJxGRa5o0q9ٟj7{>a9KuZDDŰ\C&Bumy3\30:#.<hrJZ0rqud^_2LمEue $ T` Dq#otWNe]p#_>/l]PWv(=gl^UFHHl)S#*̟7JVu$~I.f)y$zcαU5K ]pr,M)bӪI G᫩FMRғk9YSdOMSh&> nuS§nW-cqT'DK_Fߜ^,ek\lZ!}WDK""_^PD|[l{ͨ%H@26mfAK-<ݼMY ,{pO713x?}*@mo[xqyZQG;;N*6po%}ș3TG - Z\~'$p@YOR96˛ pJtH>˚1&P~m/`7W;zU% ߛ+P&8-$ P]B4F1g0BYIΪ?4@fvvKT^ ]O?GTvD9]㜁bg=vu 8,ywG]i>Ma a;kݚ83\o u,2>yۑ7կCS 7ث:CV;]{{ain;T#NlH2}vhbR|~-"£l|=`Q{ n}nLаjΚ…Ius 5+sJf#0F8Oy{Ƙ* PGU8}H<&YPz5ߋ! O+k"NᓮǶ,'k!si7{@ylXu}ի˚Bzρ lARnྯkR(xf =状{XZyZ>vG)Gzx:5!kFͩEXL竻l"VmN v91gW ^Pʞh W3&:WJst3/b/c{$YX4M8?m887`hbh }m!!-00CduF]_oI`¦5:cϑIK\8FTp=”qeS00CB uX%ZDW/G2S\\Gx5US e5C,}N(Pah# wPbpVbV#TbbBz-jʶ2C7x;`wujX|B@Il?]ǤO<ghAz)SJgL!S$uhEy=#*`X9Ŗ_#VٔMW+XD;V ' >u ]yYX ⨟-Q{~H=t#"!ًOa$b($1s؂erڀ;1f^@W+X o#}ij`QܖdXSnc;fZ"Ujh l|V(zI)kM"qHj=TkHhf:\K'aЋH;NN@T O齫'k.-Y:~co˽ڂ!XQܧk*[,}w%ݕ'+1cױ* DWabZ 'c~Cu q|C ѰAی7yLC1їS}# {liݘѧHee›lr*ŮQށZ+0Im[:=EŠюsKV1(shma F!lIO<-,k4xRR7lzx~5 lf7Y3 FE~R;, *?Nb9m9c~#6>w ׻ؖQ4xeЋNBkU< n7^б:bQxHJ '\XZqjM?Ȥ\-^EhTؾҹ;ث;9/ JQ@,ͳ`h ,A."+ɮ˔ MyLÃdŕD,Zmg?ʝ &&󼰫௃i$4}ZOmt8q\_\x,Updn / HRA'p* "?UG3Q8̸0=7툭7RQexGӘB:@uw]\E5SbnRn(J gE 5Oۭ!nz̿yuw''}qsu~)O W9 큾[$Do);s&Ga.8/+/+ ҌS!Kb3S]πrT&]ALP5obym-/+c˕[}7(SrsRߞkNRhg!ZTǙt2V c~üT€B5t.X&E)K?k5jrk&JlѬ`$)OSDž&CgYri5hؠ_3]DgH,\a ɦ\eZ&}kH \Ι{x M|*:D<,a4D/oO/D]紎 xM"XI?xFkN]TIhڠ#))o.k? ]/P`\$0x"S$/܌BZ0 `}fU{ dCD(`W/35F L6|h=+yFQLg=<0G9D7Aȡ64{lagGmQ|Xr`MN1c̕@'ݜ3r$ל}dY3Pd/<B3@3IY"qju [ScKʬ!|+&lLPduK[~3[QHR$7ᮗ+,4VXI()7~b-+.=BV+5E1y>%픔N`mͶkF6B12|.Ҵc*MBy<jxGxGLV.(8OOq55s7Ks8T"@ubV/y2mju Z#|'rphYnsz i^[Q"m:T 2Jnrs#{ a^غW tɿ@ -˃B)(佢v}m6yq@̩y01ㄧ)J#2qGi].GCEBpVavF9{G*208?e6ͷ+kYt(9UbY> 2׈$sک= ?-\~ʇwo<#kUTib/IwHjPL{Ɉu8KuY+6ߑa@h?ӃLcTf2Z'reO6Kt``#}1*DwG endstream endobj 197 0 obj << /Length1 1480 /Length2 7459 /Length3 0 /Length 8457 /Filter /FlateDecode >> stream xڍTk6L#!!݃tϐ t 0304Htҝ"] " y9k}ߚfkk6f}>yDCM=  ('_a|6# IQ1E0ꖧ ݜ !HT$&@H "jaW|68 G.G5$.. AB0&eq]Ї[C!(j)eB!$<<<ήp /A\!Hw `G?>'Eym j Vl H}5 6CCu6?vUj.[[Ý`f:A(O/ E;o`{`.|+/yH( u%QWSV(!0+)Bcs0/` a0A] jQnC (@\Ok{_ IЯ?Bn}\ w>ZV;( a|{H' { '[{aN^߯<>{||" 1 耡OSφοf ߽෦8Ph}v?nHww;C"z uMj 3fP99}PWe'Fc?q_CAt_odY;޾9\o;^R f 5a"0 IPDEoapm Vub_?H 7F[ @E[?oA ֺ% vUxB֒!!oΪ<6?HOms!.pSV)C$J'rLW>[q[t.}>MlßH?|]=ܖQ#f z:["3^Ϻ҅Mݭ*G?Kb 'rpIwRթf|JViS# NM-3;ۨ' &VDbD+jb-Vډm':=ͮ:\NZp={:&XH8zn;QDewK DJ -kvٵKCjNߏ[#64)l A;խ)i{H?IpcXWv efmZGD5F%TY&otw2weu)1zM{'Ү_F:rΪlr(fcg2k<Y2J>~Wv Ѯո/vb'D2SV۳Ppkqt]' oRsp,-ʙogұJWv!)1|T_L:\Ÿᴕg2FH_a{PP 7h>$ci-!HYJFޓ{uyюIZ5@LRᧀ/Nb4ȴwC zŒ/=Fd[0YY9fx}.Yn}_3\ }竗|'{# _XT 8M&gb?[id8s鍎/@3֙{߀)c{\C2&f`{Ĉֿx0-NA-n Ux``Uqֱ2\M+ܼ&((d5 )mU)bIMizm"o+&p7 (fx}GC0ʣLH"`-}O+7X}~8a:VEV?ӄE5}0d%}p"dp-yoE0pĭSt-]a9mcZq\4Aqǃ=IBA`\DD&Őpsl}:>QCÃeSժx v@J5d#eIKw_*srhա8U[5'ɱ{ʻ-1?P8S|գt&";I]$<jRq|(hm@YE,ߓ.N/BnaBlA%zhz돥 22-t[aDa %ն.|s)W.p\tiEAVHB5w0N!u´OM_sȇd<vaX)KXzZzY({뗬x){{,՘0cj~p25}9*Tz$/<}M-z(glkƿ 5Aoc*npfb>Zl'=8ܭ ,ӶUȬ{#cQ|O=w"ދCѬ:1e܄iiQϳxicĬddټ{fQn19HQ$Ez9 *FvqɎH[sO@^Gjgޤw?,qpK8XFk^XD^&VY"؇& %i;V"6dcJx"wk /h;rO "2?3 s6kM׹4z7Vl[fT>),DZR$""K~UBƮ]H ̪8?cxq~Oʹs{@%~9 W9f>x(rͽ .ԥts#Ӛa%W;Yb <.8/pdT!ۅYIZE5P2,t2?L k}~&&6&G),{H}vz_ +;DO1UW/n|,i<.ǢQ砙AE}0 UGHTC>0vK TB/;z !B%?w]hMx]`SYYUm=jo^7"I!*Z&ZTaCWs+It> 2lb Δv%%@Fkj3rB 1Z>ˁ9V M==JߺPv&̽v,0'I!04$G/pAuR<]រjOXm LI {z>%A}=1Z]zǯNg37d }x9\ˆ52p!D/fR0|j@o%>bVԒ*-Ne'"sd3f?cu<VZ⻐Ȏ"x!e~} sJdzP)WH!0%ps3Zv[~614Z%ӛDz2nfEr NWp[(2m6J{rvewz~S$f NcMrb"#}f-"ňWt<54D"um~xNO$)(@[ RLSfSwA}v`2|X/mgNaQB̋iđ!icx$nkEXi묱J 3~j|PBLzf#5H{p]&ַN?EWQv:7[/g?HNK.=3y۪ލ`idv}g؈p7} ,q|6%qݞ聸_&pP-uQR_Ϭ1Q '+M/gn,F+jTv;I@M[ZKe!`}UOep@Ii,IC"4lQC_Cz\xd|%,~[r8Ӫw ,2Z3*P viaiăInE޾YFjU+!ەRiz"#|ܛijqG Wpٍ y49^aB}6TY 8Co:vf/}\K-Jlʹ }dDw5GVv'a>Of"{*oRDq̹'5U%ל}Wq0թK135d4Ƹr[۝>svu/Qxn,$]q\ip?fqHT T&ؘQV'VyFnKϼ^vs(BgacK]wմxGmM*1T}Fƥ&L#?3̯ ~ȯ ׹^nؑ[Tծ*w"^R)qt:kFa wfawt}>C(j+R<9%={v^|#*[箳ERs}S֜-NײNdFw-tnj_\ѦG%\,f3/yXO3^?vڷ7W0 n ~wPIly#ldϴp{jɛ#¹ip>G2v\i<]ӆq^W:\G_ 'HWC3y> |э%cA#a.y`Ka_HtB={GzM|t_Kni^=; Vfg2Ў6IGRSstO@?fĉ:7~F]3|spњjTFgc7#eC|=h.< LqqO5ބB fxv4'˟gx َY2K;4zcҶ\gvKIVul֋,cy'{ݧ6g ԙj*kk115L, ^ h|掦,td8ÄV"z6=5Et/ӽeDƟp>Z n+XΉpۓLoO,FD&'$0>3Dٰ:(V|d?=L·>xsZmac O,s ej0jnm7n3"G4O먜.rnՂC/GI >Oeg RɱG%wX3h-!(=߀qo`mJ1A], :L> MMk'Q+H3}c 3 n)HQBFgQ76/['^ &wbrg\2y=}րU&k!;v#!³7j~Al!< {|4d3T󢇭]FW)o(*Za32c!eTppo6Rm[rby{G)!"hVVZq,KF}f+2/pS *OװL~(0c䒁%Jy_[- *FW)^\s{4p.2^Kġ`zq^|=YP34Z4YV^'JYFNxwIHRIi9% 26ЩbYM|Lq2=紜rP5:>S^v)"]f~V'ztQV[b!ksw\v薴4<J,(*ծ4lF폝8jԈ0d2O2Kxt!:OFMS{vSګI 5't Z:N:t!aȿyHKWZSL1s ֿi,DTw<)>>koxdjݡQC9祇ݽpaOy?B!,L4#up|zm0ܘԠE%v7P=zld?R LY>,5P`ĸ^}r%$#ۼK2G礌{}h~"%h,[EՌy\'i&2thnco# "CTqꅪ^>4[nBߝwդñ1\ $T~Dr@=bWt 9T)nfqiod}qofK&u4r\ 1Yo{M.h l+jt STn矇#ʤ@:?f:QlwjVXnk NM!޹0ϧaWi;Q` &X>x.^(,a$&]Rp[hޣC2.iA, rl7N!} #t/G}Q6v y6K?<~?{M5ܼo27,}3FbXL!|NDU^> @73;qr"> p@Iy6OXǑS2N|&ߘ~w)< vxY**qٓ-+@9X*ՀerMDV˧ :7UzWcjXF~ZϜMQ0e/A ˰l*|[ze Ru|38}ַdȸ$,pwo8oyĬC&:~,p/bEg+Xj4&R 2%r^?ff2FIZ5%_aFdTP[(p4 endstream endobj 199 0 obj << /Length1 1543 /Length2 8003 /Length3 0 /Length 9023 /Filter /FlateDecode >> stream xڍP\. A[p=ww 00AKw9sWWjVwRMUjB\X98n6.ZZ- V Ba 4syI<)C!W0FW/C@ d Pf(@!@gZI},,@'lb> ЄZ.AAݝޙ d-p4@'7%w3{_l@5V.fN@ B=\!@'My%_,{dwA8YX@ 5 Te\<\Xf߆f`g賿lfl's3:sp989KdKI=;?)ݬX Vtu`׆]R`rpXѶ5+T<x_WͅζS|Hn: }l}uiKy0W3;F 4 b h)oݏ|,V{I3?i ۚlqCUzkmȟ-Cpp].q+rz/n[wvuk&-ud)CB9R|s:2'+BF2,Mm1g,Z5ȦklCZV$o,H5aĄK ~vh$2Z-iS% d3No`u z|e><=TsҒw!|Oc/fUeE+ ZCb9F#[5A/E7=VC:xt_yg#rYE>ǏI Q7CQ?1YEpp-ҍF ߵ |lt:O.^tnv%miuL=+5i^ /y۞"=^CM{6@ʫ+/yC Vb6hRtȴW_|==N9,Gį<4E*M7檢wSѪ(bk9)TC NÕLqq%W }9иǛ/ՌvDd[ @J0h8'@.vea$ic+G ׿5h0ޔ 든ڃTw晘\(鄋]XN[ecdqi ' ̒*V1I9N1UT -z)ᥥ:~9\-YYc ̄݋t](}flX&1lljorOQ:^_,_1 EĘg~|c¥,K@O31OD&:ʐnŪpvG?-k ɶkƊX`q.0(vJ|+WK枂0+}3-Ϻ 攭UB=,"?Ho!JfWo8]KpvT/d$Oq;$ 1rfW]+fHߏJjjJHsY0KÆfĦR:?(v0 c9b@ O[ yO6n7JW:NrQx|Ey=%xHl*ƫ ָ0If厪=% rxxBIJگm-[j,Hwߪm:JRSTxSo^pYkTTS(zbNBDggg6_xC6ɷ~! |]{:_N`"ir6cЧ9\a3mK`#M` eۧ5cz_;RyXD[<#2| =zC'<쓁AEa=&s`W5P{xΟ[)qynIҪpM֛?0b~\MrmU;nTI,ݫD-J/:4#8.U'%En2HEY )'l~iAr2-.z *:Z:DWkdK*+\̡̫6LN0_v|Lt1`9/#ZV a%c6r0B72 Z*LGG< lpպ9T8-RX{w1ۣm:Y,:hrgC-N e3]r˪^u;P4~orĆܮXR5S4&_izиJǖDobeanSlbu* gJpZE䶷1:́U bĺ57=ɓ ߾N!ռ(/;tRdgdp@Ҧ*GϐM/mKlvHhT]⑉4QӖ!uمֈjj$+SmQF~qzzT ۀ]qe!:\b)zLE^ܗG8 7xϒh.h6MEDSƋnj`|ObFD~b`ny%.llU_hBCIzIWr3iF#=AKVE"g<̼"x77,'Mȵ g ֝S_Uq[.xJƉفS!Eo}#.C˄S0w >k?m,/Jo A3ZtR? Ą${oG j|K 0⡊~tv[܍c ]9ka)7񧷒)D޽8s̜iW`E4tőRՉ#_ZsªKTYwɴxT :svlOS s aզϵ t=ÛVY 7Z sNFˑDfn1~3Z+ESA YU|!S4tt2av+Z;Ш9ysǔ^BIm,l)?˂>d6Ճ/?;!QNSב>Y2-Kzr!Ax 2|XnQ}-K(O]}p̪Qp<ev4b!LHèȊRNYa}T纝 _Iy?g\'^Q(B9 ;K,E k*'^*,OO >d R2K(cO^*~¤%ʖyk(1m& }HAOM;v}3Eo]a&¿z*̜:ibļydžM|U΅%e,(1'C baF1nBx⺬ci5Ϲ],&ܦo<w` Gzc"Z$J)@vĒ7"2v4ͩA]Hax9o:T4YGî3z8L$ory8%~S 5T*fg.|)P5޹?Iʶ(?k%P)AdKE>{hf+i;ws $8x0g봕^u#DI%}y~gPS#KaxExl"er16賂gBթ{ ׌b"I|k>^lAI}q:<&t=!2`42;N0’)MۊMH, _JGvlM}-t"B`WAL9 {997C3ŹI?rz:n0sѪH!oMI\DQAt*W/ƒzB?@Tˍ8. C){npx[`aP2;잠SQ? ܃_Р6䴿:Vnr[U.aDG~N;;dZ+J EТ{@7+h>t0jNVo`_gߖa n)W0/]Rpw[{nDf~Gb\e5>£7O2e~bP9pYmw:elP)#GAJn\]lY Kb{M)am-#eܞGZNS9AO-4.N .1yA_8`-q⥵Rw0AP8Giy_z2%2:L.0чD3RiqM;bb) 6&Go Ufg"ϙˆu6~MBdbY6C067nØ?].QU::0vzͫ }+NMak`yk_,HYEcS&Aq,fͻKfOrw౉ErW\A~tд|kcQPʖ%eܳO"An XRб$?bSϒWttF)d> T_رXeՑ+rtV\i0dk 6pׅaG/R۲zt+H(6VR!/wH{D8sub- f0qbȰCLN.p9݀ lmO)A wQ:yȋԌD ZO7SYk9}妖 1wYQ!ܛ ZRurC[2ǃzأ'Z_?*(F?!Gs`^~n> iD[Y}a;@X2~ND O_6"Rk{PmܒC ~G H Ev$$Iʪ~VrJD+1awRˁS%' l̵Ο8u)Q~jB*=@h))M̖ˍ$߿`PQc`^!*318&lof/[QARZ݉ѯ+-ķ١"|ı3xr|OeC,Sq9aIjn#Kb60}%p.U(֑z;vHR9ۢ_l}BP_ ΰM`-L.P/nkDh˭]ڜ7-*1 XgH2`,c ^Fxsy{Iɳ/Dcylp)Hޠ ikT]n,GK *% =ԧMW3'~IjOw jG![s =*qߖz(cb̰xcӠV'3TL,9tiG $De؎E\dڎ=X]< &hdI>:1 P^"ʧ,tfZ+OFlىp'I{R0EZ4m0ŴFzORńUF3r#m~giŝ1Tm#RZ.yHKg}`$sX?]~;aJ}s߼ endstream endobj 201 0 obj << /Length1 1859 /Length2 11271 /Length3 0 /Length 12449 /Filter /FlateDecode >> stream xڍPZ.wܥ;-ݡ;(NŊKss;IYkgBO.edsrtgrp U\\<\\h:`wo) (/+*1w:9< / psq 0@lP(99襝}\6,s0Y2BBl@`KsG-v}+0'83 n \=AV@ƁFб-vv2wupڊ*ug*i O;lnilvX! ;귡9 oi[@ "nC:7KWBaMuvrp9'vYB׵;:y9};ZY.ÙSR*B# mi;3/_b(?g'g5PAs3]=@~V7BV`Kw':T Co 01t!>\N}-ٗʬ˗N?v~;7%;9\|Bv{sL,3c9A'`3F\|\/7ݿ_@2V`?zzCg_ uUY=VR64&Yi-m庿 vi8?(v AhA/4Rvq]]}РW E|? t @M0vrE}Nߢ 7S?HHi 8-x~v͞_BqݺH<\|m (}/545:B@8u^h1uW@(RsSow>t8@c95J_pz B|\_d u^nd8d)nu Ež3!6C*oѵ 9>/tJ*}㋕LKT~?ڛ:R5;Lw:ѾMM!4HJή#b۫D_!Qw5 4X<9[ϯP=A7(b"ɝ{jpJ)-(`j[ 1%4 %wecsi@>֍ 0 1'Y%x"YgB`P&F/s::A[]x zC?0&OH`{e3i}IgscfUXHbO\!&j^-SD| E /Sz_g L]miE*ͭu`m3L"@\ϳ-Bi n@k#x%Iz-Z8y3J9/@1 bKBFs}_V39g,NIzV(cn D Fu2EG~EsXGHx'2L]n46Оߣtm` P(ٷjmƶ.'r~8cfTq_]R~ n#W.Oce׍vh> gD9%)mzbUk,HѹG\a9Rյg+.A j܁ 6l JbCBKRoz|D0&#FݢvG2?m>:{kB"|edښ;`U m.n7ݗfve#tmHZU`=ݎs/ EZ8Lg-G'9 żܱٓV/hK8| I9P&GQLˆ6CD+c`w2kt?|^jq {0sO );a!V6v vWI7p ,smeO3>:w} mob~>s3.%jiV=@;^[k2ڐ:wvKK{g= .wzu2<=#RC=ςxM#pM)H #*<\+߻y]wyП6awn$GJGZwgѳ/,6iwmjM`K^~mvm~ 8-Nb» NHG\b/SX\qDL5 KL }POT}TMU5c8tzzi_hcJr2,3 P"aɊ>Bd,nYϠ8w"󏢇:޲@8x BWrziWҲJwhvr$G禢[>S-d}@aYʲ#n$dW=#v`Ї&T\A8eF;b^mPkHk$AHːfC>WSO;j \aOQWz?{KUؔ>lЭ#䮼_a%tWwHpvk{MžxX^ir^ 3:-yr9ӔH.~@໬S_@pU޼ ,s ΆgaԺ+ q5 Qc'>! ^|#,k AagBZQ yx56)#y16j> la,"LUT/7JIo@X.8zT&l"+W|GV((N~HZP T8R1aE m'&;W+ cf;kGQgې;"FI+W‡l~эbJزa܆d:dV:) vi@LiGKDIt OjⳎFyY Ug^O1]XĘZ՗>4|e|+VyIG'`51u ʹvh[3t-*a:L`~3L0^CRjNhAŚ^hsMoFwХ)Պ_Q.oo,yۀu4ܺ+2j]>hoSQF'v 4acƆ/-9: FΛ7U|-٦$8RjDy%.|A[ţy̴M'T]3z: t5b{_ Mp14-rחNDXꉾ]a/.rZ^7gH^%,8&T6jqiyqe.PP'Uo>?D}̋&`dic'pPIER-sVcY=y5}Du #Bo#UkJyEsr$)Ԑ<:i{x(Nm&^TN[jQ_ɈatX܄H 1o1ZAd1ıKo 0;gg-_Q]iW"T&xb"&IyE*xHU,䛾OFWX(X*Njd f/j ]JG/3~5DOOf[ ?;b\tP\>gRc*t_mvÄY.C\:6"=n]7? 52Kϵ{"JjsTENs p(Uj;,#@;ьr.[+=lm05R58~ѩ:qoH++L- DS6PYRXj5)O?W ;d qDO4r?SX}BzY^Ũ\{Y_ _o>ESWI-(*1&KAlE~:jQQYYqzVQK[T]`M{_blaDS6tLĭt\$P#`(&g;yK,Itj F(hZ -a^r/;?t᧥|1/@ Yl_aHl U}=O`d;b2}Ӫ]Ua/d»?Ijdvbx9~Q y)CYyé4(( U3와DR3`VQ}oj=ΞKJ|8yz*cފ~HIE wW쭔EOp w ˨aG_U2&p%F1T8jJk͗t0ƈyMb|F_Gþ,y&Y)GvM9VYC%zɪ%H-[(u7+ oQA Jsm7SvUCÛ \]v CzCC\ _+eօ h_2P ^0sT gM#l_޾먍p<& x)!2~BCEtf!D' ;r)2>aQBO4Vfy{^O2&MG.Avch. ;3JC[ƕ+T4. NC؁sqZ-7}Hb-V76 (*s%*|5 0=c} Oosb';n%|!DeckGeձu*bALHOzNZ|>ٞEmO'}>Y|ے_ OP\:u|Ѹ7PI$ǛE⋞n'O.~V)-$}tlղ5e+|Ќn?~8ٓ!^i;xź"# R7&ͮ"-; mwX9z$P>؛j<'Ⱦ0O#ƃ9̻lژO~,!zGRJbb\ '~զէQYӅdNjVȋ YѰ ^yE9!e#&Tt%wH<\7luEݾS 0ψ|;Z:h!_S)^:nǮ09ND9.MvY)˨YGQos v2^6 ׍<]o~-_]&TY O{;)p Rc^sj|EA/fcEFX2?ɦ4ţɤ93]Up4wNa)A}l0$#V캱d>&' JO{yQC;h;`kwWnPgq˕J|ױټG_q]Kd=6yXZҰc0u# 'h8caXf(a@y` qq@+ہS]g]Z*Vfv(qE9)"͵M-1a4{:o_45B@Mxn;s|^G=)iI0T醔뻗bqjg|'# QBfNO%h?'um0C=@$N5PmݘT/7'>aun)D>=1AmYj0fBlq2Z؈mUWTKJ?5gΐŪ^5P\v :_+ªDC0+'D_8R+`J 0n*T#qZ5|FhQA.mES[tP{|1@ތޮ㢝X0x8QFDQaY4+ARVR&Ssw\I~ư/jFŌU, 7}Q&5xqɨ) 8AV:;4[+Tm%:OtÖ`' fU?u㲓>MH KW_Z}am`$@?~J+mՄ|Xb~GSOVރԲ- B84o1W~9_p.=4`bJ.K;m[.F3SGT] J{j\z$Bi?51ycO4^qUS+DZm @mRݛJӛ΃8).쉭w=5޳'c r \rn )0 QMWXgWD$%<V5\g$&ӧɄN"[?!j =G±PEfII5Tl( #}1yXo7l+4NG+\(_bٷuKLpjl0:M)MuI/g=UARJ:*Kj\a< hf~GR} ۬ 6kLDwC$'~HۑQ= G;Vv}%K9w5 >y^L-0Yr>4{nɷ Nm{ uhT΁EtbLFȬN4*~9ueO=*j/RcVTDm+#qyzm<$WA=عw{1V1 3>]#6ph5A@ JieLlS97[8~2@n]BΡ*[ ^rt[՛'TQo۵4f9>zm\:C~M6o6K>Ekd>2 W8yy+qW^LPJ[K%/g$wi3/9ae;Y'uw&uBԻQI|sϝ3j/,6:cuN>v4$XU˴@RlE{9[(e|[ wT#ҹ+Lo*r~ŪRh)vԘR48\6AT!523FbȦ !ZnT2'fd/|(:"1lYuNKラG5)P5(_CHʢ3@Jg!M_6UNwDjE,ܾћ tZ,CFZ  MHp#1 /R^HfdW9X}Y\Ѣ>^VˤCۃՇ(tSgj;! qq" ,"{Քh w0"c(2Qz(|1rP? x+.2BmNB񾹤2 NYMH2!2'eY Τx;cl+R!7EgBH״NbA*vdx԰[89;M%&yOH~B|{r};Nn3oa]Xyǜb'aCSj0=}9eZ0u;>2brT6ى1r8b!L?5>񨴳l?~-2SX G4:5CH?6b-ԃmG.p3t,]>E|,42 龊ridB:-XWMRINq^e'NL@5ۚwN PWQ*uU.J_~ Oz,E6sQahlDO#ǒ>S *Wr,xc){w ,,ݖd2a0i $e0:%fND3T1O :ئa ͂KCbL {.]0j)ޞ6`<W`hrFW(e9Y\Q1QV2>6UJ7U3^l3HZV&)v(؝ѐr盝-'[!;`֐7"a>i/;gД(v맛z{Gg,tg}^l/KȉL,OL*J[ЛKo]L!ӯXDfh>Gݹ0G(?Z`4w>*S_*d`ÓUJtU# /ImmT[j>TG dOPU|Sdsұ}pvĽ+Wk c[ `-"6qAS.[*q-89]lje e5M7th$^4ݸ6"ZnL:Ֆ hzQ,M*p]7 &r"l1(shgviDY%J/&wQ};n=9H#]}ha&I<uqksJ/f3QMqPw|dv(_ݛ̼~>!,zcZ}98|;n?ݵNvU7KCb|ɳ,~7|JšdP2s endstream endobj 203 0 obj << /Length1 1841 /Length2 12756 /Length3 0 /Length 13904 /Filter /FlateDecode >> stream xڍTX-k . (=C  VUuϽܢ URe67J9302DUxl̬Hj g_V$ do(hf3v~ ȸX,,\VffڃybƮ 3<#@D!jYX:%ڔEg:@䍝-o;TMA@g*Aghlh-*@' h]-(j ̪n` `29%ؙrE_ru4FW@v&:y,  @QBݙ`lgG[1-O ae[ rpvbt!eYLh?1hvL^_ks-80ہ]bx3!m:8xX@GԒj?,x9;Źo?H^NƮ@3O#$`!] 4 <e~ Vo2;eUTQDD^ l<Vf 3'mUAbw=/oo®}  k)ؿ)[z̦o_,23OTHۂl<ӫ&C5< b^ig!$@@3%_RˮǀـJN? 3ަpz.vfL+' 6@z7byC3 01;ۃO.6?7;Io`R0L&#[;ΘYL@V?[u˿zh`>fgq76om,oDQmNߨ9[ig4w/_v[+7Noomֆ??'?~Sֿ44EZ^7dUv_#Lư7?Kk>:#`|'4܃#N}+Buڒd2׊4a`DAMh[S"хE)ޭOҽlu,daOySl!Z=JϿx"$s Ιun#{D&4KküzSG<\"[iJ/dEµ%fB)k h Hoc,9I *݄oX`2EVHLZ6k az۝FU L+`4}Vo;gq_e?Xm=i>ʒ.O]Ne %W8Od2q! .E QX;Lv U+4]~U,K& .ICȆǗUyJ0+/Yח+DƩpNeڶ2z%tE q^͠Ud"KBM+~@L£y]{lں"UJơG5u w((]AAXAeK"҄B=;$> [_y~彇 )-ƴ2;~kqz>&Yoy’ү53%\|#dir/5J{N:69}$1; ZTPf#F1(( cS\wp%i:;Ѯ/.d(踲b1Jhm|j6тx[멋ߚ7v^,gYjmy~=Pcjg(;1K kyO/G f؝e30 s$q0k;5:Һ|IFM{}1mIw!'N'QR\_woW>4׎c+4 fʩ8(][WX};1R5U!>B"Љ?/|\sQM[]Ww XEwmܖm;GEMqRr7'97,Znwc|+>723z% dfyls #MtyيmU!J/Zď'&LgBT0^%˛_fI~!> l dtR/ARG 2$jl5 ?\WQ؂4@)|lO$q"SPzq.I)ۼ)Ku=S rph摅*e`E3Y4pmodLTdž aCܚxf1( ;>{6SFGf9Y ڇ2Cϴ|{UnfX+IwQ |M6WLʔ !D⼖aXs '_;NDD>:$c7|IDF/8>3ǯ0  (GdD-&/ۢk6*&'nk5o!˹=~hKѨJnnWyt3 G'>WK bΡ6LJ]0(e'G@><9*ckCƒ|qE6*fѵtӫFsl:v.]H -K4Iv:9e @0a^hr6F9n~:(z}C`o`ڀUfF-.RUlX%?4> |Hc4dvkA#ʀ-/[!^[7c2;-[@>kT[:/HcէgNAЈ熒 ?9,fgar>j\ 8>aV1|[wϠ",3S̘g9c]nݭ.i"  #աu[;@ARX򔱨$8-I#qmX2vƻ#)J #Ʌ /?_ ShBNLpDG ?ERRmit%yjλMMa|*;*T e|PTLLi/jI؋ecpaƫMlٿy /:AGcuRaO+9uF^Qw,y`bu_Yb+1ަ 9~Uo~'4ZO"nlQ?z髼IaCݣ[&vk]2 FaZY2Y-,_|nvߛ "&!Lv|mV8Q:kybh {1rH; ͨxpq%}tl tqZb3x%.~4Ke_*Yʻ$|E# H{twofebֿ9K& Z0O Ty&ӨɿÞW\Cp`[ӓgC&ߪ^<_2M" @N`t؍$=JU|W@G} Ԩid,FeI2 \ͽG Rw2qmEr&m(q°}Q!I&%R2Fmgw}/bvFPGAMێkT}3&B=|y=oMuҶ#de05X@p~{v ju3i9tmѢ1~?mS;?1WBʥ!TJBirQԥgRTw݌uʝ"=r!b/O18&>ZN~Z ^JڿR`H-1$儂DBpOd:U0LFMܓySBlCmSc.a|v 2s# '(|#%Kbs7wi{{^E%?q58߫ ao"TGQP}MWHj5dyTުp~'BoJWNf>lFmObEuǚܴYvPl]Xōx%l86 K찋-)gp[6!ַZxe[z#[RޗWa4f;+ Bh_ >j A$?\h) ±ߋŒ&:. 4Ƨ9jڛ.8raj)11zIm8'│PMzQj~9JH;k6R9;.fu" ` 4#sBln$psnFkBLJ+I2RPd@CKцo.^gD/J,>AjﭻH/umc#vƶ~(K6iͤ?.^10Z}Rjģ?ȉUKN)psЈҧ7Τq{:d %dh풫E I1q>(kg\FE=aFQG )4 ҉"ar)1_}cݘ"M#,0 Hg[E*wgTFQS01]wJ@2½ :kcٳyNU2|&{PzYuqStUGp7L}ȟ橐qa.Dg̛ZO dWMDm4%S(tX6=g7m]kE~( 潬&Bߛ;UF߅;l$Eg+7eLݪ2 tomhev}Q>l9o1Ӑk !Rn_EtVBvhƘO>8* ̏'lt"슿7 Sr"ؗj #$$<围i&1g4YMwƣ.Ř06ah"6EY(:A[9 K%dZdp"oJauq#_no+o՗8.*G<ҕ/ +vD?-o !?k h言G)y\Fþ'n.[bOht^`j;,e /tVm:t`. B4-I< 񞡽O#I R< ȏFnJ.rlڒs11SO-L8ڲ+tOH??E{Ar c\)!z3[0zeJLU[H'zԹ 2 VU~FƻI,ËM F*0VƷ[ #g00GnO:ލ_1w#pz<54}5CbT7nJ}5 ,:{ĥЄ5 .vYf]x^wo?ؐTq92NWݼE2eBr82@ rDvLz(nN|pWor{]><XqQ%}uϬݕl-٤JA X)3ջ 0)}c%?Qk3. ǻgC1֎_?51'߻B.hFh>ӛ+Bgt?uSN|\] Mݖ_t\<@d?)zLoe9|W_Ds~"9GQ$4 Zbjޗ&U2>a$ًK^]Z+h7u_iR^AxV#&|_ix/xD4+O1H!  r-a d7Mixq~5HLQ,a7I=B]s"D`~JkXU(k']4KN;JsuӘ Cs{QE 8>lw @*Y7C׼b.NγQ@BQHN;E}z)Yt}M6A=,~HCAz(5n+xB,DH{ mkTu +B. ;vLֲHYwʖk]*7mYMeNV)'>#Ђ kz-ubEf&Jf(Ñ96!e>34ХGsyr\9`nvdO[ >xòS vP&HO0X *ҁ:#a@+g-(v^X[Wl{* Lmǡ`EEX"u(F}"$x3b/; Y8W疗Mxkp%ۀeY*]9hc@9wP!_u+~,))TJ\$#Ŧ3@LLu3ï@H K=+9{`TN᯾FgԬ=%#n]r)r[|nbd6IIL΋Ͼ#~.n"wAIs4'fP}fh 3:>6>^d:]8tOb QU8Y^,%Z@ hT:f+S?z4g/Sw=%O?f${$vIBryڳdlS 6ή|g n{Mr'=9rZhElQX&=YC \O{n(k$@MÙNdU)`T''\qұOKاGќ'`(A@.o`;hDkxBOzϩ]kc_w[d'n}\=inn>@˒ҿ בh>լEAOΕqrZx1ɅX}J٭TH,گKyJP{kȖS[C [nʓ3gؤvZS+rl/S@phsZVleJЖ?Q EO ~$>5)2aVQ@ DJc̍p*cN8r{C{i"~I_e$s?1R,\%I}'y?Y5n(7QL6Ӊ>mDzzUozJ>1at7zjOA䎎ݠGPTʦ9?ٿʖT*Qqi4y:j uWOz׳$ ݩ@Z {̇]S]2mpCpZM,klmIgmnl=db &1`1Eߴ5;Ÿ9{8}7Bq7U {6}8Wy/*UDs Igp2"%9M ܭ~A%=ӌuژ#="v%cwZ$t+(<fs6v~m\q^ ]M>=gyO_eƜ^L5]!I#0SIcPdtSaESw\>8ZQ}z(2:{2Qi}&= =o2K#W}tmT/$kynB`+$swoU1X3!|cɚ\e/dFAߧz-/]) | OdTf돠c3O|=iwDy[64kZݷfiB0(< C/|HdAޒy^Ƌ&Zqmp02 oρ+,>٘c8I$ br ~`!f̌`>vxJ'aFLXp-~3" {q6)u1z!z$l%c0B+޳)1k+* fYj-mEXz[em gew%;8C=/yby3 8;ۘVp[kD?1ECQu KޅKؤ7B71Dخv$,o Nqk5]eyN$V tW1#fpe↯YG۽-LBn  [|U'%N?yͩ Q2!71'fkTW%-]`pm+^ ү;m'n`32rZ_2ّbYĝJsnz3NeH&ݶKҧtX+%B62zHe谩$ 9{d,CHcDi]i<^KkK"<0dipc])g'od =0,3Y_lKt_k'ُlazoOMү;Yv? .vϘ^׫>q;VIGӡclWalCW5zI,?(SOx^^$+:b$+ąF"13Hō~-iHrpRɌnfPqTl>F3؄ c{x9LDE'lȈ'5)^l=_ϓkQϑ XaFeVr_)1g%̩4Ү><i7pfCD <=aD Gu5i(0|n#rT8Iz?s,u^&v>s̗h6'Bۉa\'m&ۀ0&^$ ?@~]w2{M8rI^jcUY8Nޅ੪_bA\8Rޝ}u~Гʒ[& R65ei|x`qN͐zV*SM]4T }' GFPӫY_Jز C . .*a.FPb<| XPIg3E)꧰Vdeb?ӓb <"kY`oU42 B?)Dד!^Ũ!t-lPùW=5T( j$AM 5mƂ- bzB=0*Y;$#)^eY'Rҵzj8_'YiCou.;jxRzG>/YZ9`hҍX̔p{ ?'oˬn'-rѯ3zހ]{^:NW C&جd-Fgٸ'5aœ/(>@tD/W99[ԏUM+R;Utz)=mZ)G&ie)"'}})ȅg|l_?W@Ji̯oK}5%h9UKjYVYd +Gz~ťsbu!v r6 alsTxqȏ~{Ai4+T{2, Ϙs[ݲN P-AN8jp,3}_ Tɬ!ʅrTpW˞" jz/;\ɅEbZHj)/#lgVM㚶n`MɌuŊ5 ` -d0tƅkr}:=b[wQD;"Q`c~+}UWg=GC?[ehZل{l ?E|!谍z+e3S?sѫvpsjc2 *` ,C鋊`3.ɥC^QS['UWK&2 ouROB*6zr,*IuKkradk(9njWE%2?@WkUh5詈"àR76J[(Ec?R|TN##en)hIo# Br.ǻb;vKiߐHH8+)2,A(61 GvQq\xO~] CY%[>r/= ?It'0=~lN t"7p6=r`.gDI+J_?'km@dyp)>siO?P 6^ .|m:=`Au$|$W hhiqQgڱ?< mPBf)dT}쵘;=9?{Uo<}£kx ːڨ1XlI$h6H݃=Js?C AH"p@ "6K} ~QTĞ#U f`r,p_|P&G| endstream endobj 205 0 obj << /Length1 2249 /Length2 13981 /Length3 0 /Length 15330 /Filter /FlateDecode >> stream xڍuXkJH04 14 14( Jww)!%%!% uƽo9k{BUYl;AX % EMM6 `hh4m!?4m-؉_6 3T&i*67??`kvHyZX`'ߟ: z_1G@ brf0sh-lA A'h8zzz9]: nl94*  l-@NnP'w'K+!Pq9m?X ߁lr6;:9y:Yl@iE `d 70u03U@ZL `?Y:CXl~w; h)'K # >I[Wyo [:YZnݙU$'+p@^\ / I4A)~}:VV@V qu[ `ikmDAVcz !de3KUCV\FIQ@3; @f)_rNV`Bo =c) wC 5쿣[_t5Y9:x::(KMu@oj fеs63 'b[7i[/-1[{l@`7W ?:YC7tAWJ9Y-;7 *v../t9-A^3 h *[7JAV?*Z*xV?q@jAZ >hL;7YBqVeAqAu`(pr8:+.eV 4%_l? }P[?.ОF``'To T?Cv9*e/mOE.~O=*?zWMuڂ543'Ct3Xw)pBqvpS- w0di/٠1 o7alLB!V+_G - A(P<5PoAhx?A]}@pwRv_L d8i#dֺ~v'DufQ&/#̻MɒT6W '`Ay'I| ̏n KCs /{JQqG#,1{V  YEAyz>_A?Tdު#uJ4O7߼1n6L RӜDs /N.\ EEķTB|W؜}+%i+yv`ߢoHgw^wXÄcBT;2  *6jD,1}|_g3/Xx#z5َNN1y.nGFHDcٻF\}c`kHlyk:>%)[a_f,zP&,IMWlb!DDޛ~Pӏ0#t9¯qsHx/s 4ÍR\^'ڈtw< i׺"\^Ҍ?_0Hc@K$e*]!X(ˢKhfvPrm@:'&锇b>8gw;i;5'@V"kouŻݴj_x.BV)Ԍ$1s}2ӊT>f8ŗ}Do#&Wb4nP3ycUscz?,q+f Vm쎚̈IK< H xOq%ȖZFvxԿ& I[+ >6ކ}e6?I[鞼"Cy-#JwDL4 t&ؾ/A !.ARѵZ5l11% پ:q6nC'cz;Qj/Y)+.[ʱco*],CXê j V'dLZDK[(ew3¹~2&"%q~ 5աK,]ZW"t/Lj%Nz)#19\)O#v #w+(A]ph̋L$S%(=Dp>x_Q{goձռ%*ew=S)Y 5 ,`ڱ,4-br|X*D;MJ!MĜu2n[O/+8YNJ~|(QOJXDT n)hiǴ|=l 2fgJ$|Y=)C-Lv_3MՂ&qbr[_~EP2/g}$灧SQSuh,mx&E"c=?vH)eĴ^d4;챤u1pv"y3{ל Z2ȃy{։CFRi~ɇ~>i3dL`K;՚N=S6xx=qaE5jq{pw ;rd.67Z:`(t6Z1[P_QR17t|ʼniQ I|Ҙfh9KNĻ7`PDN6smZ^ѝe,lJ".$s;;&cL6 $#^Rf6&._R?I'_ Mpc#PXr-۩P0/Sg 8ʪnbD$^̋[5f c%PuzXkzAMB /`MÑ/9~q{i9#$eR!<3 Jgx4[U]H ך yP7:d'kjlecyWWB]O"ްZ =_@^B6 UXc/Ǘ><^!M U46@ݴ^6Ml JzvFjl\ !u`@05C?XHl% O:"Mf ( `uDUpΣs X5[cسl9h`D@yf+ڑ  K嵏[0d^2*qƊ}M:OO4A3۳~͕Vy'3_>?#OӓK1a q9g2qnhV kIKCb#ycltå}l[\@|٤/McmHo  ') fv J4>h[? ~ya ߎ~1X5wuyDߠymV̆@ВT Q|kڮVX fCٞQ$wBķ@!J=TճJGsQLOV#ige?Tb5߹Zm>_3E N3{DгK8-(jJ/XWFbYdcN7O,;WzӼ8"Ems=[h)Hx|n4zGwޏfD)b_GYE"醍Aj/;jZ] e!Vg='{R0S3|E焋-;/u8#ɠ\㧈/(0=5r f%ʾKv:TU#''."S :N:DK/%ܯ`(ɗ6ʥJ0 ج7vߪǥ~R;>;|sh_w%\ySfk;אA"\+!ط׆ cx5 FyGڬ∌$\f> (D<0D yV.s*8xR*nþ.?g]%fa33M9E"bD0{:s@dl3ZL^vwxڨ"zj\l#P" o__ϯEyv"xb|)Oaz(iةvj-,AXԤDYseMP#@##O:4-⹎d}B䞓R!`Cew @= %d2WdH%fx)j ̋ FN,h'N!wMU>*`tw)~C$2 UshhD9$OfWl:. aZ{TdNȀƍ&Y9"_j9hHPxξt}fKLK# WzE0xnVjx r˞lΦ9Qy'*߁ ~$!m^Ըc7Fz+?\ֈKf蚥(~V͆T79P-Oʉ:N'Kt[w> ]8ϑxBb,"nfkxmO$ ^D]Ȕp>_^\__Wޯ`qEzn)hfC.+ƄH=W3yE 1izK昊3LIkJO 1&%R kdi[P5%qtpծ;iE#wUlFG_9Ҝۣi,IqkI?/VI1ՠwL+IfI%oJXKJ5p|WiŎsRܟw 踚#tSt}l`<)sR\ԧ5AܢᦥSh{.z8͎V?≨*v) g >Ϟވ$$ŐBq)]p>zH+1[]3eηK";bj&^ g4ٍ`XL<>$m=bƷsc>y(ގذFHYicE#в,)V4[mo Q FP9c&Xy#J!.*ڀPQK;hp jcDup+4Ϙ'ibܗIT.O+-Ki H*/U?8:rW'uj#r=cFg&GZ;`b@izpz"FK_+u foIY@ 뻍-T!O ,H{k:D|#{Lue@a`h'w)u QXWWwq;+dyG~?1 2/`VY;`0G~|g؄ 3/tZܔ!dcjT~a9A.Xy^`<76\sۿɊ(`#ޝ>z`wPS Pc+1oKX@2ݩbalky= ]ڤ~x31]$olvWkbuJ)ɼZIrs]FU$e}-A}IW5\*Un54?d1ʸ1XPt)ҳ>JJH)+ޔSTE[s\d'ҫ,ؾ&0]7((Ji*eˋF }tӵ֤03VŽcCgkܤ4Lwߘ5_OBdɀ =K<$3>jE[ׅWp=vႁe|5LJ{B[lF.xibbMs iOuVq"Ue8섿a83k$Ӆz SQ\̌W[YqR!5Axv幂N*1Th+RˆvỔ"yQmStq 0bS{!mYDz3B՚VhI`Ƥ6Vߴ̺mZ؆+G_ߏX7;\f$Ssr7w`dr^~n0"AAϐS wt1iV|V7mkrBE3Qi!#JÕM)_e,jJ LoRܕalM97rTؠn%0mg|&K]oTF%Lx.4!Se]fmV l=kPd>"YzMfIiRCݺBD<!<|B8?|ӗms(A/tx/ֽ/tEٮ-QdO8^`, _c`-Oݴ1|v+uS( !K-jB E_ aݰMoGZ88&X6ך @TxNt3tDg*磭7Go88K\d€$Y<}0ms]*gC.ƞQvՇ cX.&8Iv~vr.A2Ǩl|sbgZx]ZÖ-XR(A=>Njو1bkj\YK[$K0 ϫ]ZŅ=$񷨕k Sݡ8֚~SjDⰶ_ ј[pVF0!T Ĭ"g~Ġ"GH5ȏs1s9$ +AMD/ ˗R"=* ߴY7Kp gDޙ6 n8m,~&M+y( EXo> Mx2 jZRێ=V^M&i N_Iqݞ$¹H6\.45cJ_HTUzV8wˤ4ASyy0B:,iԅ 5%ZT5?-:|4BKF7IbQ}قC;Ɖtu,ٶsLXT,h}WdWXm$NmNL!(s<صD|+.~nEF6l-BmgG?!Lj/7*AO Rd_F֥-xjVk-' q_,^+m5#~ <@VpY+WAn> Yk ,,G9.Z}UZ.TC͒pC%M֔~_ilurIdev՜8e J`oMO$-M x?#Bxj3*")6{ÜE&Y3e"|K4b}Kxnӯg9а. ~W#JMPz F'}%U>ضœ`Gn<@%,,=iAaںNT5r%M]8CYxVtfLsͯC=Wĕ,Mk|i>gpܼlu#yQz\u8X1Ps7<wtDs-Q͘w8(xiG;TKBrie.F9h0Diہ d/I@Z&:?#|9*2c{sS')J zIo`U[ :rVdicU@M*qzH\ FK{8 3uQkm\GmIy0xlM59 tW˨%bGW A0 zJʺY=ߋs6E#ޘϴ.ct36Ku:v)/8acrE/g_#|&yB1.'k4 NSp=]BI7{.eHg>u$JqF=zVY-VVA]iK75{7"EqGG%y3v|6tfn N,gkZ29ѳc#aѥatO]'V8a ȴ*0z( SWa$]|o$`] j!My--εuQҎe#zh,>o8,{ V89iz=ĒlV#N]_݋}e+J@jsyQM/(^ͤMU)C yՕȢwt[V,z>GZl]~e1÷P!ÆW7͘XX3SSvƠگV93k'/-oc zP~k;߷)NV@؛YQH{Z;{^Zb^3y2KU 9A1Ǹv&PnsxScYڽS`j6*WCiapgܣ)ЎMu8$WU媍Q>gnYNdD-j3pI)u4< CM5y\oLR#GUݮ+C^~|qyZ`*58vyӖ9DΦ$SAEPcšKP4RmybP} [xQ<%N=]͙wRNc;-K%QS[ԼnhȆ|%)?~tr#UU~0*!ޕ. uqiũN(‹8 fBvY[7GTr_!C[9v' FZr,ōϙzeB/FZ[Oe|XߏG^%Cm9"/>Oͼ?<}믨1ʜ8[k>>'~ݗKQѷ&TG]t|T;à Cl UMX3>dӠm67V\8-TDx=R3r40G2"+2.rOc b$:) O)uݍC?*y ZY MөIud-?l_o-zySpmT6Yxz(Xm2҆)v{rMv Y"C"+ ^[䋱/iѤa4,xwk>ف&Ce36= }y8X'+oI$h#aΓs~jJ]/A8ېof?-TAfrL9Gu7i5- %BJӏi'O?&/1/ȧJ$ј+r<5qQ: MbhڻP5_K۟*am7zMzڄA}F*ThS)TԤ+^ Cfƒ@+2\pgoBj ;"zڴ :RWxIq1}㩱h Gn x})àCϋVuJ{Ll+]񗋣o?T endstream endobj 207 0 obj << /Length1 1564 /Length2 7650 /Length3 0 /Length 8671 /Filter /FlateDecode >> stream xڍ4k6,z'5!z `FoѻF%j :!'9ok}ߚfkk{\^k4da`E ȩjk@ ?7ȇĤA8c3]T+ɃDU > P"U rXT0($sr!jqB@P*av? ІYA`C xx<< j vܟVR;U"p? 99^-+p#<ǃAG=w &t\!87G_iǬ998!`{r0?Ն3.Vso@ ?{Z:@|߃3`sbOǿ6//bXm!Pf7m 0ˏϓ¬aPGb=UM#ue[SV p aAQ߿h G1S`{?Υ._V_j'_Y:ߊY" 'ߌ{!@v \U5J2@m3H\ ր _v_5`pȯ ~(#V0_k'(Z5pߞ띊x~~{qX Cm? + gv x\̈_rsu~~jߗ žYW\VPyp}A_\n7D0Oة`?u.'Hј* b߿4x,г*{ȕua Q D> 7t~˄܅AfoBa{m60) 80UO"Pe,' تx xS/ <5.l0 RW}L&xMd$St,@!ⳃ,F۴`U%xFhYHKOҪ'ORlCIMNЀ̜#Z*KA-=ml[ULfb_Yu/R)F+DW2nF6BNZl+=;^E9$1Ypy= 07wl>6[ͩ.ScZ[RMT>٫Of[bđ;A^%}քbL*ǕAMGP)_y]Cw/Q\+3n5z5GWn-HuH"앋k7ޱvpf`_cQANbQUdқ3O#>kt̝2!ȒPuCS4e gPH˿`~ ?uJOK]*PW97)|8`aV,Y4FƼG(uBGU3jP/4?GH82t2#p[cW$_xj2!-uYzڋG'PkB;|C] ȅg-Zw i3K gm$'(W4'6;UT;vg\6n9U_7oS?!#$mS5>#8 3P4oR.*# 7#A[8[YfsqƩ]T~'wfD1\!mds!.e0Ϲk1:4h/`moS}2Du+^WMbR ]̖mwOΏCJG^k?Z{M:4DF&ɼ$%靃-VہV*l pShǞCˤKuewL;<pG [m EF3B)IK[4Z ﬚5ӫ/'d~+: UtuJ&q ;.k߃?aPdِeC+H`teLC8[Njt;09hm΋8G v3B&ZU4%w' 9P&wȔF#Blݏ%ʹg6nn8`ooCSyU~> 7 !ƀn? *#8Y/(' Wg"Tzڃ/ND|r `]\S2{ µ5);k/m-Zd.?1Ͼc6`\O0D# >7A>V5"39҇~d _RHDWJ׎DQʓ/yk>|7WrY'}XG9XݕnikE^|݇pXD4bcۋpoD+0Ab/P3=*٫I&chR CG(WoLIPb56>g |X!/zT3UրŝmXSSc6ydE3J=1 s2OiɴXJg]#-NޥeP61z胺 &քIy8hO'ce}<=)w˱Gfsh.·5$4j>ƢVꀙ&)~JRLEljhd#|=eZhVԧ̯$VIF& d)I|6IQwPBxsS!D@ 4 h %t{a~dKcn ݐCQWF>nTQ1StR rϓeMZN\ȁ59F~$fxv{<L$bXeyn|imM6D*b R eԐ"Ò1%Wge;07J酛a pyB;m+Գ#:k@BvglC{^aY cNJoDC" "^Q&q_+W !1Z/C%{3t+[W7-WT0?]vÏ#JS.- <@78 Hrɦ 븇~*9(Y=cIGN=1 ]9C721-›0ؒ5q߼YLiŅ ha ̸_}vͥbIHЩD8 0HjMm4YBxO35G~%uȽ,gܦ9D]Jnߋ/OZutژ^O9WCrq+HʏJf-֤-;PIF:ISK5oH' U։=2$M KT4ś{Y]F|~ 1%v8 O4x/Fs] T,>KK.p?pH/:ӺN%jIݑ 3(8yF|g=ϙ8Pݔ po+Ho+~5||9k9,R6Sub^ $Viq|M;ĹjrR] ǡI֥ pz5ޮaʱñc2{@h,IQ֊3ܻI L40DٺysFO/YT;SZpX&u"j15(ɀ־:& ǀ1U罳(Vj䔔j3U h;:9dN6urΏTW\/ z23snʽDwý ڞ)ה6Z%fa33͡d |B$RZ#׾%(+˛![\q3ÃPOfquyJ͒D^MeN[=ͩ5IW rN^[Wq?){"v}}Ƭ<إg'#qK*5!Wv i }QDϨ5 V<';d`Zʸ̪L$5fr,'X\l7KS%MRż DN 'HA1#=\_ɀm4;5oҌ?cQQmHΗI?)pd=&;ow]e9 ׳Uy}C.# f,'7jyHf#{h<ļ,a6LEktUd1`V/S[& 2=h{璠Τ7v-1%g -r{COZY*8 EFsFsB[=#Ih?ُd:OUR#őMû3_&v dj`>´0x~7Ap{P8aTiXYwEڊ>Y5DLAV4xcL/+$qxhQ{SW,7Ne9'ᧃlCE]~Z3t.@Z(*]uАv]WW1|WC,ͺn/z>%Ș֩iM+>eTwXSUq[2y~-gKd#%B?fb,vjymcѳŰD_(Dhif;mnD8m%S=mLYWp9Y7BA_/h$xGVT~0>]vMՆSJǗn)]F |0KB֌? Z%shÎn/̊H^`&V2ժǐzW!P5i (mIE 2!3?5*$9%`XS+tet'q?E Nt2I\]ʦs^| 3 i15t[\^gڑ:wpɼ 3Gc 28?Xt*빧/$`{4'</s}HL2J;s{]|}X9XvcxYδRQـ3Yao['Qˌ 4vBC n"HrvHW%aX.ɶiɀt19f-Q Gdi,6q"AZakmk>J^xt*/!a꾏 !@#݉g*gNuہ1, >51ϻnSU7 ~rրI,v9 wn]0 ~b6o4liأ{rc.<;9;&TZk#bg+wp_u#sL{KᚸŤfKn+YКq9jqwghkO^u.Yo)s|Z(ZHL?N˖atif[Q S[|Ԡ]k=6:㉡TS/-ND6kN9j 6n̸s2[uU1Ux=N·X@Jni3w<(!%V6RTfEJ I9toi:—sZJJ@g2FQejN~MI~UP5Y96XY)~H( hC]!G0sy($:L(.*Gjzoc§;i^"ݡh_%Zph4jm|5 m]/WcθR ȀNׂjYלHV՗%GoVVNnsuiuG~_i(2p4}u׵[_"\}zfKDp¹*nA1'.8Qf'80ҼzFN8!!{xW ꭺ<ԁP&!W~@~IN~Mq9'qx 5OCPEO}ekS1;_ZJl.a2Il(eSj= k,$z@EQrG)`o.]$lV |+\jSWy9d>ezGRt) njie=tr2 KH&Ja&=ً܄Ȅ$΂3uCsvs.dd5ulb7-kT3@8nCj]%>9qȍ}%KVͪ6a4*Nо 6"H 7My[6h0n@SJҤFb 碶ty̚x8*k-07=@΂!4ޖ1BԗBV6pfK.>\ kTn)5Pd$:<]KHX>ጎiMRZ(-bNt endstream endobj 209 0 obj << /Length1 1526 /Length2 8615 /Length3 0 /Length 9628 /Filter /FlateDecode >> stream xڍtT64 2%50 1) R" HJJt#HJw7}~Z߷fߜgg9>Lt:Ϥ`y8 [ ab҅"0]P8L 0yo!jp@y.B-/"E rZԸp$wtBlk `b r@@0i v Ё[AHH*jD: \ G" p"m` l 2@5.&-CntqY]tTN`_dտ  ;:`P`u4UHNfr@An t@^J V.P'$ u#wcY0$w}P{\{/dYn :dܛpmnnnA^A@ |߃ `sjF+D8<<k` @a8~ox}/?Lf 9x犁 ZJZNii7~y4AпGsWnkag.ur ݄[-?!7W$3늼5,jktPW*!A +?7_v(Bք"lR_v5>|Cfe Wf=l ']#7TZ=!}6p+6A\&B򮪴[!괿Ks:HPe+9lRͅ6I!(ȇ$T"].56ެĈ8I߸HXQȉ ]LyI8uSzs*aJW~ 4CÕh%mHbzg2l,Kf"-_"tsX ۊHq;G+>ě"Rr9>hy rrJ7,kGc}w0 B4(2D\=bϡy>ۯ $K6Pw)ۭ/3 %طe*G Oj W^eӫf?!q0RJ1Qdo^ʘaG'PzHHJLm81aFnĸ`Pruh_v yax)v.$}J ︢Y| gBsɧ+%c_B2)sf9( @Hmqyxm]Ɔ0B˃J4*Ǽ&=-p8N 3SP#SV9Y&}vc,^y MQ !k_P83a}9fJH'/Ŵ%>#fvhVd9xwI*i>6dD*xyuvAY#4A&/ FA}|G̉7 )e5dѻ/Kl2` Ed"0TePBƿhkeYZ˹yPPjNzT 1A|;/>t>n9._4-)6gϋgk! yyD/&D_ϐ*~]ؘJi @ɑ#%~ <͠L>s BD1G;͝nC*淦:ꋙ ,FfC=nZV8Eys`l~7; l+^^Ҏ1r#!=vY!j5jK2e+/(,D d)%O1UǯrsnМSbՖҍ~!F紛 mhrpVdɉ@<ۂUCJc!!PÐpeÓVZx6ʗ+YhE&`?YwI6mjp0٥+sHՕDPmP 4K֗z !QSLuM[! (֩G,0Y l&e]=B.ViUjWaf#Z®*ܛ9`2~n-H8Jzep2g &n*Pc?rVƸ6Ob^xq+b#^aT9xG}@#3iشz- 2c:}vz&ChVvNj@1m>Kkq:-0I@ T6[Y4 J Yj4<[@;u'9eDz ̿8lE u!y[S57V^B{fUc"ř;Ϧ^|&4%>DDqx",)؋s멀ŨTgc@d>ټDZ0ѕ\@ߏdOYIYI0/nc^;p- (Կ [P4ZFagEpo5!c_AZ绺97]&W"*O\Ui3LnvJˆt$L ;ܶl)[B]%[jak1fRC7+E;SuG@c@="+6(-,)Pwf^\JYQXatC\qdC'̋HSf=7`x˧v<7 E暼}@۹=~a}O[kKbbȢRr>DžE  7:¶q ~(ػx(|wS3MhYH oE(dg3XlPiS'TGKPc|x>F=JS"G^ 0le=n56bmQjo5mtt|A""`¯0q`뤪5\b3vDPE~njX8*b?)aLrI1Ur! .xR(Ŧ]¹ҽ!=U%x yv`-Sm׻NJxrP3j*C \ me2IPV\GȚ;m3O!*H=t|ٞ9¼Od|we~ Dv) Ee>EI7z(O3j&ym&q2 W,5!'KvSFOwsҰ}\ݨ⮓wHٮ3v dz nI 7 xs gj|ÓrLN̘o@[ӷG9YFEnd?_)EIzRopߤs ՓCg&xprQ!p- #,Nk k7fW !Ri@4dze":ls|on%,.wNN1ŌepJq/½=+[Vq,oЦx }>J̫{rh1aHg(rXqZ,Ȃ23^t`DǤV_Ab/QːƎ532Dl-sY-kț0g]*y]5QI&{MAʢzqϯtQxTՋk-*-&iǧ{"O픫?hE]350)Ozh^2VGr2+L 5aDO%恵9yo\>΢~ZA/-jhmrr-wvվEOj#JyjrM}`>Mx91EI7BrãļuVec4_TN?:E\K.Tw7O̢H^[:$YeZ64P۰^9gz't0{c&Xb t^h梘-\b6^T_lL7JfP2Ms '۷6QVD_% )c][ѥJ ުŸɃuJ}uV( ;{ӘCY賶ҵDvbЮؐpŐ_XY*ve)v Y=m_v]XplmQ|ۇ~EӽuGb6MQQ|0Pj\N-*ts6I= l 4Gbݻ4K_<ܛ)tqzQO>@ wzN#R12\`Š"Yk)/B;I*s׿/7t!9 ;4Q41QTԋcg{:q{UPJ7HI)s<'c9L!E|9ׄĜ;-æw+ j9VDv_␵l,CKT뙴xf6>Y& _E#QdNI J' > 4XIiY^SUa/(^ڃTO[,Vxt+a'`ԩ[^"}n[.qK95R*pmXwi+i lE};㠅(uJ? ͱ=86N{ Pe);37T9#[9K%AZg T%<<,{^٘¡+ Og`C޵[(x\~cMdT\)-@٥qoNȸ7OEVVɔ_&SUs,Eii}B;T9 >P+;M-"vP2tqN>ϚLa^ʒsL>QbDsi+, H+ Q;s6xS h|pTD1 F%=T]]et=U:I)=ŷ[{Ԝ䝉 CbBO L!:Qt*馎[ӎT;vjs (X{ge q~4}Z*I(=CϮk<^ݓ I,nQ%q=3-W3$BW&!MuBNa a]hSW 8}u|6yJyZ,Ti#Ow{ UnjU urTvL;u#F;m{*7<]#%3/E۵(Ϭt}nS}yPJ]c;?S20a*~=)ܓqTLm(zp?z`\ֻG9+ t"q|űMfd2?'Ѡ$0RcbA牉*jO:ʝ)8g.g4PҐ-%&ˁiwnm ݟXX]SG)O^x(;Dx_|neFD;yTMfwbaDsetgڪMq%~|+oDŽۢZ׆ sF:pd4ޞAtgȌ,y;4Obp\6l9OHlDJP斻!h,Dz8E^삵/ #QfA;-e{ Mhz(ߖpt &B=̐Ei<߄BFx/Ѫ0xQlyذ&ֺʮb +3}gyO} 4q rPcʵ#/ ^"=yղu~wE p^BH|W[\Q=Ӝa]?&M%s|7{N[!QJ&02;Q'SD{N![ R$Zg?nX==ڔlUObmy !ÛǗ`r'Zi [7IPQ/Ճ_^ۙҝ|:_ ?,Z8dOo13ӮuY>Цso}|5Ə܉Xs%Q3,q],C0<rאwAn&JXWFm웡p-u$:(3mjD|]\erRBw2EȎЗ#v2މ j}3ʜ_O;D׉̅xnިVS# BSt0.˕_~Wo;PLqc+zjH8LDQxx wzĚ7x]&a+CdV1Ob?m͟_L=iӳА[vfTA"~LZ´Qpgǭ:AK 1Tyɍ* [ݷVS{Z$ E)'_g]]J#ț*vrm7~vn=*_tdi09mGI,vw?1]ڮ&|O|= b͉C4Nu{E8ByG_Cq cPG'M2i?hS3Kiׇ@Ou^ JK&)4G:l4tZBx\ 7)nShtѣӞ%:%8Y;E ]8 0W.e26[oV؋U N͹>l[; h&Ǥ٭;1IdE3 w`V&x$P_l7+ iyX(j@L~Bl+wo̢1Vr.rY॰oj5*S kjʜ"M1=X} Wg f[Q߹' B6US:.?bm]i3N sU7zkJn @ksXΒ4カ{>MwE~u]Znh;sJ8@=Y ~8;J"Võي8Fұΰ#,ݾw{.DEm4s΅fBVߪP0}{L=xCW `F}YA i.!wck 쬨+yS# W5|I/,=ǨM,Vhms+5Gn^ ice`[Ã=dv!}+Xa:vaZwXȏҨ+5)46RkF̐sոӵ:o 88~UA~xrFܺ/ o v҄v\T>wɚZl$r:~_8R,3Vk۩p0ںժt[ȮX^[2](\72XyyP6V!*%vU?]Mr/?LWU}7C5xTW+q7ecRfSsHEom}. lcV̰ Vm6Ve~#eEUX 4Ot_6ED;FVd28S8ʛh[4;2* Y^LŒA Qud`Alol'mlF]NT-gm3bÏs1{ k__Go_b9}V<ش-߮ !$XSv VoLD93n}e{tÙұ_zqA*|<>G˻#f79Wu%o.n6/XCw +>|>u ,>D?ehmj^4Gv1-~HeIygZ]:{C.RgoPȉ6T;ʭ>XrQa#%s 6@?P`{;O0*i2“ovb t@{I`o*q/Ċf ^R#1kwj]Kf 6Xz?o2`I> stream xڍP-Kp  H`!CpOp}+YmW{>* l"rLFFzFFf822U5?v82uΖGM-P b `b0s3qp32h 5rv@'82;{G9 40qqq:LlrF@M*v& pvf`pss7qs4秢-@'+e ojpdU _;3g7#G ` 2:ؚoTd @ۿe ==?d#;{#[9 d (;;lM4v{7r5Yٺ@\H `o~N& {g'z'(6f1[S;&os`rll@f0ugP9Dy3k3:9Y@ĂT=:0q񲷳̀o༜\gGFpLLS3hh~G;@M~L?0S;[kbQm5q5)sxѱYXl,v.vWQ4oRfv}v[k۽W溌l&oLb3OT;wOWod;M.o; g kq倦 J9킐?9܁ g?Y=@,:&F-&?]lMLX2f6v㛒^Loh tSz[;;#W`088 r N7|F &f7dzcbm 7ꭞ `b{Y Z 7 `0 uhd0Xߘ~o[Xߚmo[o`d}}{sui-ѵ9ke׾c~kmK +;go 2Yo\a0dpp[om7n'[9?Iɛq݁&pKv&<߂U ͐jSy-9< PUen8 uQ^ .={7$)>z?$(O-NbO ө y?;xXA6wH9p")~p+^W2:W.T6Me,8gڙ=5څ; Z+t I K&sWUfNRmlk)r/Ti OT`}D#Oudа$FI}Zk4{`wU #-`ӘK|Vh* w1sZ:9>69c (&.]hUJZc9qb?_.vS0l(.lW1nβ iv:̣~uD1Z#I©6WH$2;AJV1.GSTso|ǑP9aF~Mi葒lZ ;  1ƊtFbYno@"c[[5Tda ? 0Wΐ)ՋUQ l|EZw]3ߓWM>=ӥ1>X-f @\T'a,~e 5Dާ=agzޒy<&oyD~v/F-nhFqݦisO2 }dqx{3/FNov#v I/BPC267XQk^/m{q r:2Xe|0C81U9V"yb%i@5x|%}B߳Ҽ[p)'^6j/,x+?RTah.1;zs֓i7prAt]UFdq ?ia$)@1!$+;80ﲔ*[m꼿8 h}ʬiZ&_:LRb2 EO 1qT5?4eS ,LkYO7^.FrٺPjxΏ:oHVGR1Cm@/C,=H-(O-w"$Ȯ)@w1Crp'I`V /uQY|ÊL9nF; N'UvBqk8|绵&BDSvnZCw#IJF4|FmK{ۓgv3(!@*bj޻)SZpN̐+[^4&],an\RSdf/է/l#k7ξ-Xyy[^`\j!گgM !aN}{RѶZڑ;w#pLg|eN(SϽp'v G|pP~fO/|\fp͕|Z+Ȋ﨟~M^. 6GF_/0)}mcVO ' %y/#JHz24fHRkG,e,ʍrnkǂ𪒵_GU"u`5|jW$bߨ8Xե%V;?+Qʵ̿ih>X{依mEUSePLXM1$ÎHXJ 콹-w9w lbt1Q/ Rܳi1@wrLZҺ竺(5s!)QcOꨊeZ7}Č "5,=ꯨ6Tٌ t"IL<(pc,;1>齺"1i}\Eζ ڄ9|ʝHs=&js. 3 a&YmypJP338ްJ{=A{y{zR/h r3_3t\A#wGD:9FÉ[n6G}Ȥrb {W,Đz{]$YG 2ޤTE'$p]ѓideW~_=iL*C뛯׿:K&cf{4f~y d[n1G̚㣁G;yRt rNiՕeb=ClI|H ,jĴm09TC'iŧd^_kS8gWt ]^u0\6t=pt9KDMx vˎ6ʍ=: ܤSܜzZU]z꯮M2K-ˑ,κNghSiY&Lru*u!៷74N:ֵU[Ɯ%iUL^ I:m>^b1nR_s35Cj2+x_a ́5Ag8h6J!15y0y[SC|l\_4cbh޷?l1xoGjc0jPSr ma` Cށ0XvX:4gWmm kr/m&8LpEp%PHݘۂ»'2)U+2a:p#Fj\:웉j 'U8db]tZFyF6}Ѥ,^8BOpFTQO ONXd0rЄ ۖ\Rb,֐t"btV+Rpb = UT~ !x afQ2X|'7WL%VKvHd塸.|W_;AyM>ȉbo4GdkFc]JEb6puTWX< :u?7"hÜ!ý5Z~FY৹R@9:=N}_8m̭P(VC|70q0y\!;4{ًdͺ{d#y]~4 Is8ei]UlG-l@^Q3eF>EīSf'K줍M XEQ^wJRwuMX#zAݗ~2}ox;ے*H{³,TQҡk|0UUs' 0fs[g_.4 h򙩄摼6JwLK<FJTwMO?XC}gf)2d8Su1 wI!+u[`胃eepq7O BhS[K%'Emyp8~C%qOSw\Bַ]Z_f{}kSA+Dt$)]0m9s9QsA>S66jЛ7K=qz8 7z yo%C2s!gЅTdPg&{σ-)z/9.!+:YcT>\e O8^JBTnG0 he4,coBDCNc! "YYG Cn6pKNh)pk ڔQ9Cla*wR3_9d?r Zѯ"@]N`Ϲ41j|)N bk<W3(;O}F5ÜK1!anpTꐰjcܬO%A}>r5w NlnGA)6r?/tgX20 ,5Mo(W2r DÄoQ|8M옉5"R=138M6y]Us.Y )̔$MED$GeؕsVHc6(q{ An5Gv%u%W]gtAQ My<}LS׏r^,דզ Q01ɂ50QGul@熌tRɲ|F*v,#'k?"BF jmHOG*njsFqX--л*5l)t>g1躲D*㼘C"7jT8*$PJǵMGc!B öa*,M|%q!kܸkVs=>9\$LehTw @^ RN:r)4̌8%HZށ'w jJ._ڵCj4zF2sϔIWjա& WN\WiV+ RG,=` (YQYY$ZƀЅ_ c _(bYpXr7Uז6Ye):Y{xug?ʡ"pm3ZszĒѧ!F9քwy5Hk5V`Y}Q|&䅞?#%_LgUu/#.v(Di|*}_.NX|Q;gnEΟ~Ef^Bo-jUU:"ejcf=u˗oEl"Mʣ^eEYh,^J1۔?tk pA*Gw*L$ڗ I]hߏm=l=ll3e*e>oV !.:9 yI,d9뽧rnP{?O![9yΐBWϿ$8z[=A[j0&CCzH~c+|4K(x6#EK a$NaYHVX 7h)8wYKz  eAq3| [e%Hp=Q̂n~:hMWES}O`.W$g~bimSʗ÷-M2GYQ'϶Eq,FĤ9ҦaX)w痥n:iF&_4a\3sbhnزzmƅE8!ȳU뒫h>& 2)</UiZ(W5Ah Bޣ *]{?H&,[?ُJqY)o`=z 4KAOg5T>~a@NW?ӲoP4׸f * bm1|=b=ZNۀkI^{v;7yW7R1_ p : ?e2>4GhLI@ @QylL֢FծgO%k|$F_R&׵(O禵WМk%) !wzaw",c"&]rl޳+hLDx"!"m^N@+Ow_2?xX4.5D$o--t3FTe+6CpL+(ܽh'f vL\8zY9?"%i9 9Q] aϤfjus̠cG6L{<uqAZI+Kj?8>_]64@A742HaēKyf\`F?v>scbϖ1p(m3(ɣ+bџxH^PbJ[L}B ,.©gAD*wDBLP/miyZX1!ve/IY>~yh`"|!_HDLH gȌ!EgWH`+zˆ-TFWl$ߖEH4c=oj,Nо=\txUz{m0ő4"zUM`ƫv0|PaJ/nGf9чIpev @Ɲ}d { lwq LJW?K$MeQ ml%XlC,'V/xP_nEC%.Tb&Sm!TY^ck5ZۓAbY,WY"O`L6Ep@fZCVjGva-^lwxZd%q7!NzLx̴Uyu܎I"ǣx!=F#W=IЈj /0k@Vk*EcԔ}mKĺy{=dˋ%AB>"UArYJ ଚ~7n\iې2C34gg%X:{&I=f/ĭENrg-*dRt!{G 2Rb/iLq,{YR7!2.ldx5O\Sڈd T[@nB 1 RfZQo=yl'X'?sV)5T=Bk#k[ƜF1#C뻩3TPZ(w FJ-|6z ےxD3ZZ<SܪoZq`O lȭU HX㦟m1"Xж+C8&QyBTП{)DB (6*e7(7w(:EW4+F{Ik>S"|mA3]8>w:El,}UZQ4Xb.ó/Hg_ծbrX/e=WN6cG.ky jY~y}H)`W7sYu};;+^Uz SmEmc9s4-j.?w=Ma$"Ȝt`(!ܧGьI7^xaH*"l!h}yq/dxm<_j~k[eD>UC H];E%K' 4n$8v#~yOr &KSυ.Y+yE|/pÉ"Z@ [vC*)2gYF~F>wBCIu+lV_^IS_1")N Mojz$ DLwWؘ?3Cc.t3ϛ`a^ % }O'ێi[M~hy,jށ²u6:}ޡ5X°`2XȔvP1=RBзV`1q\wNp'Q ^Z eL;0x?m=:C YfN)N]tw}čINdmSm\uK.hrtM#%䫾+Ʒb:[iPʦb)qE>*=,$Uwi ES)6>iU!{(rP~\ 9%##BO>+zb*IHԔQIZ9ՆI<>ByX6 K$ VkLrG B8(t'Y>"z"] no\<+ɨU' D6 caf; w(~a>\S3Q o̝fI4t lmȼ%[TzeA._ޯmr>[G><Fr3:G^jR}:x)ELǢ[Of? RJ̔o Md;1 f Մ4^GpI}|Ƃ5WN&)(-FT输u.|~V*k8!ˆS=Qex{cgSܔg (m@5!F\JaA(vc|AQ(tWgu^dR5˥9Қ3@Ӷ4㨒7ꩈi.I}jKt-퉲孕e$xiZ0 wQT](sxo,:s]17A,^:"A[CayBy7CB0956-prUqassJ3:i좴ҫ5 Rn-=r?]Z# c2/h2 <c_Sά17J^( !Nw#(*I#`q gKq⿌mY3n08٥,ER~h^FY[Gu` ͤ!i`Җʕ.~Q T>G[j5HsZ-uZ!4)|&[h^A̎-hW\M]1DE'Fòco"Ql㘛קR*)zƐDK#U,=F!$|5b+9D{ nX TN@]Ⱦd4Y>yN~.XNyz\.A! eFb[틏)Gi ?{x u4Mcf c9m6a9@@_Pnz~#kؿ_f?IzH1JNQ{(H #M2FgѼ |=\2fePV߄`T\1'T,R$|b=_jW M$i?ke>B;GdGB9Ȧ}h2PPcv|QMXFW1l.gɲFi>\d-gHCe ?0RN=ɇ)T|iD;̕kz\t weVT6Bʼn 뿞bb92=" H (v2 " Q;ca7wҷvnfgT9jӪ,[M-,!Ч~qnEUD3}KP#/EKi2Tqia:ўdLwHt%WJh+vysY aqѾr>Ő|- _UF>Ni rM5r|(UO 1RYPxOGEI eK} pY`!^,%QPjxRڧW׾pQ,_FHB_q1Rq2;wm P2I8# &ڔpCIՁuz/mgǁE0n$O`gyRS,av1Fe 7T{Bj@ EȏmsTl˭i{DxhC{E 0cltXXXjO}]6iLhl&Nt*F~=Vxˮֱ8 M߻۵u7bOBļf{*Fz`S6\)b 2[I̬RޤAPr].nIc3gX 1fpeG΂~?+Pj-VS ήn#"`& qHߤE!&'yh(۰ol>y>Orti}fG}z&G2},Tm (*.SW F;e;%(*AZ# M9a£k7WT^B|Vmջ&9d}(y2 լU[:=ĺu/G[D磓gD=g|3iJsP}װ8?MAeOsPa6h⦩QB$[2n Tb,/N||FфZ`%I9YhBq4t+zd[jD:ԣ~+JbglxՀ )>5=a㵞 `Ƙ:) D<fa,;,hw"mu|dX.P>n5sT`FQpR-\Rr/ P"S-T;eS aYoUa4j` ^rdsbl<;pf^R}jy A ,{w/NTK>^3Fч4dvs˫$u\+GBU ZHr; UtUpa].]UaK cgZ tlr 'rGX;] H|p.-WQ|߂/#NG>[Py7F25 vgM endstream endobj 213 0 obj << /Length1 2443 /Length2 15619 /Length3 0 /Length 17050 /Filter /FlateDecode >> stream xڌP\ -3h {pݝ% k $$ys䞜szޫ.TY-̀2`VvAN-Fe 4CdR` +'dgCGA; xtEttrYY!i'! ;@27u(vuGs ` +Ffl P]܁?(a rKh 0u ;9`t@N@2` p{𧳩 ` eX`fvSwSM2SHjrh0,$`W?!{5Y[G%&,ܜ4@n@9M "2+ :lrS ` iBP|\M݁ߊ" 0ZP~Ga]@}vq^v^/*_pX8<ܜ^~.#@Z!$O`7#dg+nnQo+ qS6ymYY70d!GM"fr`S;XC#U Pͭ\Ě ``g_:]B}S3J;;Zq_<SS/vq|8 hsl` ҝ叁xlM7IF6;M78lM7S #H>OɧA2F 7M7tAk MA92; ?r@ĐvjAJ5@tvAf䂤p3uU@F3?n) Kbvtw1M [B5__ª 7;rCt5bjH0'ȋh'n.Bd a_!SPZHor -oRHw:?_@]!lAl`kF /ni B@7;Wo_D2ws y\zQVͅBlC:>zNj3t=b 0fm|Oؗf[|ֈޞl6{؁2Cyx92ؑV-lt;|g7~ B CaKGs,1e tf9D`r8W wqQK`B;*c{JӵXgbG$Oyi̶r.;#+ԊC_ᕄw*NLץfP| zP0wt<-W\JO3p*u_5u+|?cRnSɱr8 Zo{ I0=7o1wAy6f]R*~:h< 0\=(D5&y+\1=&}In\B!7#m! fcygcط( wcUEJh L: *OGSqKk P&iG8ޥ/0NDUB]lk=F 6;oF>k5t6|^K|AK&}onի' ǑzUqk a:=_e*&c]hMdzr]^tn>$ J,$6LG~H'X{:8KSmT g0u3fFBHQ]ݳ^{#px#˿X\ 'UW1eHNIy) us܆;Д{~xa&x8!h^LQΰ&zTRv tJx]_ȳzDz~g1I.ӿ[#F!I +me 3>thu+^$E>zß%_bci qg v*`ڷ[sX/,8H'֤?r&6_'ue@1Q觧J𻚪iWNqi(^?$Gpȡ7˾ϛ a*dнXVeOz#d!Ÿontɵt08+ yDly!B.Hp _ٷǍhoV $|VM}Żwh/notKFɝOo6wp)GN(VJM_ݡk/@A ) ~ZA*YD #~IF^?&X.=\N3:?NƲ^ǁ9"}|; ]% 2jCr!CC>\eI&U-E 9^p*d탙c"~c2;-yҿR\ss|yW.)\5_'Y7r4}so5 B-Hv}S@|? ub ֹ0 g6dO \my儿KO$AD>df;3(d~H=SOe_^Gp,Ҭڏo~1`e9W}_Pc1ǧuM݁S}4>zP8'{Z,,QÞ2()d`/AŸ'_Sվ*,#sren~2*QxDUdX[VX@E$ub VO6M6fP$ocj#1mJzbEkv]uD±oPqL'b: Fj5c}[ 8d}#Y N/hطգ S nhؖؒͨȧ$}A>/>0ܺ@M"CmK:WVPq( '$\h\jRdNO0!i"NDW']"Qp\6ROGRo68P>1}@Pu*& 'AջĉRXlf;.=XkN ڿpp"49`P5?b+k3o9+٩X>,ځuwτ-Ѱ z%eJ^ybqQȉz|΀ -x;R+&-CT Nyۀ3 U>rPK)n*\QN"-4t&'H Ikyͺu ͪ-nM}#n.ymЖY>'$,JШ.)gZ,€hoWOzmi*ZJ@7/p AAx2 "*VSTN,z(1eSֺs;j JZ䫯V*Ɓ 4|}7{SgTLļQ B8&tWJ6߶ՂcNgcޝIɹȜcw "P4RK IJsPVrUIng5;|NpQ)# EђC!Ec0?ŎggٽU_ N~O('ߚ7؏sh2Y![PJᰬԃ#oyD,\jOQG-zii IsR?}?nj51 l# nKvG0Pk iӼ8CIf~X;@YZ涣ő3Hw~ek uCVt1 MY7DEr~4^P+ 4&L_1#S 9)=|8vCNOROYP6p~PkcC'T]&ofnW? /E>= rz` ~ťRe;$o@鮲pRӹ~D'.(h´)WnMŤ/J*#oIl'PYUt?S( wtIe1Vt::4pHx0(]tH#͛=B~\mJ(ζŕJøQ(bd/VGVϫ0%5KG5JkK$ `!+SjAC};Vأ 9V;K&Z_Be@ Vt~flaݾ~mۈP2V)#ڳ\ v_ɣf}XdRg YSjrTw[ k)E3F {1b U*6Y R5CÇwxrVho4fHZyK*Oo?n?}6pD]6..fCⰽtM(7DKmD?2Tk!-ܞ;[X 8oj+%7}j=Ԓkf{64g֟|n7pooOčf`a` <-,]=Xo5 D<}367qGU"JGfKrP&'&1M)6]S 1ԒIIu<TpN)/.5M֡Ҷu^5]v?䃟/) 9@vO=Q`[zrd--SIԤi_|>}40Ͽ3Px"uè^J N A4X?}ȿ_KcH%cc:zb zCYE!Y ӋU%[$R.'YF1 0&Q&(C:֭/io\zJ;G+thxwQӒʛZ[x#jEv 5+.(]y=X[혀J^J˻"ٍ-k]mѺDH/XYMuoӻU26 o*PGo5S 喩sk9-Hg\"FtlVD#D* {EZ~>U< 0. |mڇCAڶ3G³~0ߕCQYdQΉ?z,`rԾfTNmrYk}S~f`'xsL6w#ls4}HsV!ʰ &tB˾T Oa':phpyx!qv䐤眭`j=V6`!y+*E.ҲVʛ&u% mIh5o'jZ2: H$Rhˋ?PM04fVn9RMO,ƹY~ͪ4S`޹ȉ][oBCLu3*Q/faEj$5߇5>?',ť UwAI| uUwZ$E&E":ˋKORa~.?0T"!P \vnvIj2R_UXI7JV)/?n-ɯ @UOT4k5.:jv7'x~wpc4>Vgse_;g,ҟ2;pn?1-ONuro %9d5U ult!Q#H_İN3e5EaUANF{Gs#AE{졈3/O9_t5.(h#kafH³j{|r)wta*Qد* Rd[J7R6L(ޚVlj`eHHsA`w!KCEHqVn&E -ڗcYfFb\9]HȘ/֠fZBi1ҿ#ls1_N#;HZS- r3IULU,b0yϛ,w_٤ts6:N%;ǪZ@E*M9G%pV%E 4ӥn A%|&Q;o9PЛWONsŏD(~/i:xafꟕڲdy7(;@yQJe);;Q.P foi{fطU z!XԲ"CrRr߃Wsɗ9%R\@&ʙjN׋^ ^L;L,#OrYth,- Mըn,ge<ѣ.U4mQA~}FoY_<^maz6`\nN>?=1Y iV{&u['nOy)7 ' zU|z9K/HO~2TRE &+>:nf ^0%_69?M^bj+pg]9Z zdc|4g8רme6GS~#71k^q%]I琐8j%./ٴH8R"԰ z^Ias˙^|Jx嬱hj)D_yu `_ޢ~zugM ~&3xA55A8MA9iUE$9Cšu[銘/U"op7Hv G<;?{.ίе g׼PFi%ʋU|Jj)JVަBmϟY% #z3ۏtql7oy]݉+o5/q:6qbĈ$'8LBW;P8ɛyejӍc7j%s[~Ȳ 'i|:yЬr'U3bGĄC)߁ F/|i!䒨ڥe|׌5 Ϥɴσ.+ ~;_~b~)Ɗ"PDhY<)/7$5W؜5\H.#T"^zz5EC[&^ȝ:)2&2t7^"0ǽݤ3!6kEZSʓ}$ׇK3QLϠ #TST*B̉6$lϟ4D%nQɨShu9;EOԣ\=\Mӟ_Y>-͌ҩd9,-O{K|LWd1Q`f4e Lӱ/͝ ֋pXE!v;G-kٮc[fOv8tS[rCx\r@sV8e i6aצnڧE"W磼~ϼ&}A_?nҿ41Lλ%Kbr_yL0yfFj,gn×w 8cUs M* 18& 07G:Yf({<U*Qnq"kY УcMz$&q֞`\OP?i AH#TX1nm^e踣W)/h&T-CEY׽w&GdGH$u}Ph@_CS,pPSad&ޘ_a%!n:By6ӗGםSρ\"bH$xsъOd:X'U E. ':D&pF3;䬌sIۯ3)m1K͒R(afi3񍁗餬Ac3`#D qIGf4[-%r{g.Lc}ǠLV B"zk6[K(rZB˔vLnX3 H༈6e}%Vdq~bIhuM)OThrÈv _]¸cHVs]gBK#~'`~VR6-&r`TD?]s2j*0Rtq*O\Bߺ2|R"qjPiv |m6aH)xUr^` .6!{#b ӼiyP'm(I\CeN&H~56* FJqbL-\[JS%(twʻrh-=ٟ.L ٺ -X0ްڬXs`yxp)\$S͟]uGdkq[9 + 17 |VR$2]UStA^lbKǂ}l =6b߽"Tۨj~mq?"ŧ Z1W r5ObY4-b*iYH]67&M{]輂b BERiӥM 抪dHQH ϥ62ЇR9ƖxcE+W훼o3>!>$Ͼgl/Vi;"sf嚩^,pt)/y,2b~<ׅhTZм RAU)㶄|#UrjE@bēyHz'D'VlbASmP,0Yk9)؊aQ.c޷6O A_'H(dSO9ņHl8HrZb z`Ö 7]+D%lH1Βl>)3%~tO`pR_J lŶh఩ߕh*+GL;A"$InƧ}tڍlB5rB#'no篽ߥM}}'Xu$@W ;Tjʠe|GU &)f\)\6Ca"OK{> uB2&xÇoqjS(@ids?o0\Td +{sֹ ӄYRcVݰtԶ?֌Os tfL ̆(@gz6{X~~GCG?Z>_ucQT6:cEjPvh^ai~H Eu@gYNc9ӵr0e|DL|aw ko&]% ~te>i7]+ioaϻHoA*Q Et܈WW,٢[d@No[7N\w Wz-3iWdhl$\VI Iwψ'Z,*r"PZXJ ;@ҬbW Mu^tVNQ 춐HI1zK [[l p&~#bIl !i.Y8jOY]ڧ~YɃcK4%iQz:nd LNq:yXLfZx ޲.kQRbouB7-MƢzrnk1/g-a8iq}ht %z,ӿss<\Pe CMSaq Sm8z@Jܝuuny "G,roH֋=DIl@v 9x&zX}Ӿō<ɍ/9Skdt6d.$GmWXqs3ֺA/HtODb;T`턥B۳BWor5NTri7@V(12Sj➒4kj4q!TwGG>b%@GZf񜩺-ہң%cI 6/mY_X}N =2tD򢮙˞Ԭ@=^ҡ!-[#m`(*ـs ˝ğ࿀. {$ v7|%t`T>HDW׼uf95۪ Ω>:(Wk]'MӶ8ˠXsNF>-ȼ;.IbS# nⰩM}g){| 7ey $HGJ6ǫ,XqR4['y˫i7וgoF~iu|΍Hq=|ʟN xmJZib Ĩ7zZ0JƷz>Zg/Jx{bbIAԖ 27NB8gpheL iϒCN 7*R|E>ʴ[0ի̟u!7v&YzISac3|˦Ye3<_GH&4N洘 ^:L(z+sN %-2%K˕>t J9v-PQ\JSxcDFf܂dC0pm'^4Pt|Np# vu\Yh3(/i.R X8y\mјj ~[]] B0RS3BB+?"mY/8 s"קe%](; %u#R~oʷ: ;@;T[(ۆEx? m:&ĖM\W 1" ]~%?iW8MIjS Ty>R&M~{"L̩GW[ 5^GtV.#d?٫%Mp .]BrLM`iY)5qi ʪ1l?Q*H#*= # jVk=41\RJK)֕7o 'd kFҰ-mZ(x|VM<5H3#9X͠GƬ ?.2%)8I7]"lJLv9Չt ^QE^eM13\m97ƕ\LOps=I,%C V')0UVM\"یn`+аo E ,5ߨ&*om ɹ>ת}7(굽/Jx0m՟Ram{_ @p'r,9Ne\b~>&('{LU7dmT}ړd]02yDi&@PjНx[m"]+NKm~~'1öp*}CvLk-b^lu<&*ʃbb~%>JSbDm-LLfrjޕ"7炳v7h =ڜ.UߨʓHV-h!&I{>5f>aH:Bat14 ChH/"f[$|<܈P5 Z-INI]vOZEwVY"ÐaJ~t~[Wq+|"h /H1,? ӯU{DJYm5OW}@ v2jEYCA{*jJ&}FjΜۣ[ +Ҿ$|f;6:-D lIF&ȊyBhfpq=((J IPT8l68# {]RTsZ>sZޱXl(wVҧ&YwET@{yה~DCd_*;sMnX╓TDf*dAS , &)O cwm"w-n$: :"DNM~sXrg|Cz:*7Q"MȁhE-_~A@R/Ru UɞJblyñ qqd[ #.#S!ųM?IvVī1MOn*1u%]v#/oKW j+B" ޻D?1hAdJlS C߽ͼ&6MJ4?*vvWI4cOe l0G/PeQS<~Vzkƒdɤs\$/"1>1 •VU+dBez{Tk1rǢOHg"M#8yj`pڲ6.a`l( 28YUy/YG%*ٗ!Vދ#c COye݊(|44?M~H0)9ğƴ/ }'n7 t_H%^0*I"(<|m ۠7ȏ^^S!A<0 ,@bvLL3X⎍O dA;C99ɐv"4Yy$xXP˨RYq@R+*ȡǦS endstream endobj 215 0 obj << /Length1 721 /Length2 4672 /Length3 0 /Length 5264 /Filter /FlateDecode >> stream xmrg4ju :ѣ D%.E13 3ѣN"D'щ5DF^7]Zz>쳟˥A!0HDT`n `P<V2`pb 2^ `@D!c ȹ*➋`+\7"=`tBTʹ @F`N6NH@ CqA- p'0h8oM8?Ю,Z-A t4x5â>_//u'!p$ A!dM m<?wt-w p f?wrCQ t1p 0YP_z9 $N醀#VB- ]O?ڏcN;z?<50 ⯽bP? \""X7Oa#i|žc4׻9$ #d |r o Y {igKX /(lok} (V{"B-XOΞuZjuӘ'OM{$ަ,}'OίmE3;1|KyzI!TB3`eda0$3;6/3?=KqrytnEGu2rHtn%MbԈpsڧ BJ ;`e`FX(8WD"Q/]*\ұaRƨoV@~CM…bԙe3'3'>]}TJT!{QyŦr؞{ } 2%.Evpz#J, Jc9u}-*;\pf4ѫ&wϯ,3o;!@ LGl** 7$WWpYQ5Ϛ5# o9-ͰEq?sHf =R=]q'b."_{88  8ixxs=e26R>-MԜy$l$Hr*ReK\w:(_``M:ǦBԲmhR@NP >ѝU%' 13atLjgt4O ")<u@VoYA38IG 4_?)o~[u.ᅬpLw$,ttQ[ \6Qb})Ŏ72K@w>T8~5,N乁c-Tlv#$I2<-fJLZ摳lru^Pd<=.m1MMf+km(=[3/71,(m}!\.·ڔe=D{ωM^ E2 !w/3+H6= M4A'Z,Dƞi*s\F. ONޜՍ 6 ۹,W!#%Xfo߷90 )!Us*@>i}ޟ|Gv-z C-d9Du1N,tA po%ǞMݩvIeʾ&Ĵ6flVk;;v^-YlM.#&l^D3 KYOhlu9ZM:IQtf\jwwŶLaG|-;+qm@٧ N4 8$ZTcg3-KVn*?CmY;S^cyס8'"R\R.E(/^,j&Ny[뙧}x0Q;>vdJKo7f>!ʏs5hr\TesnX͈S)lY,W%!%?b:I9;D>b60*/꘤p&8y\/+5D 8ǒܚsϩRXKIHdݢxN m& V}ih6{͎Q z|yń'<3reh;Xy3E ="A`.jbZ_+2f%vI^ف7Ҥz3q|Po_-g畈 eWGߚ&PJ/$/32pDqDwu&:`O#4) =lp7X\~\m+r-]hQ"eG>xTh "#Ud5i\*!' xAE@}oU4gnş5Y,tl:/IZo8io'"v){gdXߟ;ٺE+u7{</&Uiѝ*v|0l (kN1S#k>w?{Y9Ay|'?8*Yf dW(jP ]~:e!=0iټ౱]PEf-|ѝ6%~R)'ryhz`v,z5bphѵ1[$1ʪ{Jb~Կ s;_<9|9t*ʝX|Jy~>M۩^L(ݡ ֣KHڪzԴDjt³ޘy&m=t9+r[lS3΄QDgy+3f^x_hiޠdd357hm Oڻ;=F!}7;\+9n"jqK5T灁?"(l ,A]Dn,,fhaP)Feɻ3o52i@{;H8dg%lo VUÜ{#gZ#K 2f}{UZIݴzEW1M;7I^_w󱛍^1cŐ=!m endstream endobj 227 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.16)/Keywords() /CreationDate (D:20180124134050+02'00') /ModDate (D:20180124134050+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) kpathsea version 6.2.1) >> endobj 153 0 obj << /Type /ObjStm /N 87 /First 781 /Length 4265 /Filter /FlateDecode >> stream x[Ks8WV lMmcljg8wȴYIow@Jt,'{ F(\Yq2 ֙M&9^LJ.e&ԙQx3eM9i܈Kkyt tÝ$G#,H3nsC niL*9+ Ʉq̈́5t@Knك :.Ϥ!Pǎ@pЧAʴ܁iqlv <\./2 2k$MfŽ˜b rD9AGe>f@ eނ]`@s/8B=-Հ\:7 >X A`  6 O.E)3T8D,e$\) &RR]Xt TR0X`"ALňwy\?8KI]~Q #EJ)h`Ws6L%n6'EC^Nf\,lz5QŨ<>q'{#&A[-^l{C jf,d>t-f/=M:cCZ\Lp bꈡ>e?^LyیAN?).vxusȬBL! w#+Z{5=rf9ԝ\mumHPۇ IY+V=&QJݖRa4=Q?n!a!e<;tzlchT*3'IB0 )Qii! J5r/LCb'=:BH8C)!˜snN@ +JZG8X1 Y]ɜ*(6/'*Xkq6%߇ H m$: x%P9x!G RGrԬz) MjƒmZXG"HUٮ @,&k Z[ap 0"Nb$'hn.(_8ako'Vn/Eo${DmTdDW6wUd4%]pkޟ0# 5LI@q9wHs\<&@>X.8u 7R_"߬ṘߵJ($4djzZ@+̯)^;ڛhf8EەVY@ KJJR-ѽS%V!T4zrY^5G;W\U‘Hhzw>m,j$xlpv0Fl1(fZhsO:Hwu tvC0FAA@5xP&2PsW81y83@r.hj\ $`wFC_CDpF\}& 8x#Vg&^Pn P*uM״7naG 'm.s[6P' ܴo?BtN((1c ,yxd.c:Z<' loAE)3Ktaq }Q7c؀0 }j4h(nuxH17|BH>ƃT=w(T~"ߪ|s M-2Kʬ!NJzI^ǞVbuߪpob嬧y~;.{{FkGϷm9jՋΤwTCoSi67/~ nzoKzVv/d.`|CyK%ݟJZP#XA5/pC"^p]uK}zw#Jzm~Wj7mM]n}n_u{үW^޹ݬa[؋D^{~}-n=M[[;Ѯ]KM了NAW޾*W[d^-Nj$eΉ|Q|Ros[9vՋ-Ⱥ]mv}.`I@+Xv |{~/ ] /Length 581 /Filter /FlateDecode >> stream x%;pQF>I"q"AADDNT*2Pe )t4hDJ^aN!K9w{of/%s[7R2b 6zgH(N*0Hi5X+JZ0B$i(Nփ20E8TPrrRn)(7JlU`+@ MnV4p>9FAp:aRhv+Y-,`Yn=*){ܪ>dĐ -ܚk8 C0WHv[d6_n;*ρ@geTCcnwWf&U & */1ƽn`=7p\3Ė@X‹Y=QB@@(r{E %noTn`bPYCV}V1t t t t t t t t t t t t t t:3:=>!U3fROZ=(yʯiEӛJ*uyK۳J=.)YRKb1~ endstream endobj startxref 236852 %%EOF vegan/inst/doc/partitioning.pdf0000644000176200001440000041236213232070305016301 0ustar liggesusers%PDF-1.5 % 11 0 obj << /Length 1130 /Filter /FlateDecode >> stream xڅVK6WH/Qd^t=l #d3lّyHRpf8u?&M'.F׮ 퍬Au-m4tQ|K-6- v7UJ<eej1_LIsεx*?n`21պowwZyf TyI32y-kJvؒ%vA 1hS= hDؤ[dIW.~̞Qq@xێǸy3 T\z[ uXa'_U9c,<kq/ V_]O6~w od- 햮;l< Yj%p^P7] X`ɌsǤ풶%Nn=u@+O ê)<6HMaB;$2R$k%܇L35M8A< ]4!M`MP䛚}sFĺ3 7U;%#T'XEr}Bf\ݞCy28w{Ay0ȒSpbY/0}(*`,NN_(y endstream endobj 7 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./partitioning-002.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 22 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 23 0 R>> /ExtGState << /GS1 24 0 R /GS257 25 0 R /GS258 26 0 R >>/ColorSpace << /sRGB 27 0 R >>>> /Length 436 /Filter /FlateDecode >> stream xRj1+Ѿ(Zzqh/`|pnqV#{cJhz3; ne] w7 \L z",:(|ơOQXC9R|UiO<At"QRURk XH6$D$Xkv(D}*f:ښ&x֨P%CաX1Knr-"KDj1ўcߚ6ylVvjfD)N:LZx3 Fg'=q*wKFt.ӝ.b-v/>o~e+q9?)tOXϺ9 f9y܃tK/Ц}g 1Ǝ/:\f9ÿٚ233؎O-ga\nsF8 ֻӭ)v endstream endobj 29 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 34 0 obj << /Length 731 /Filter /FlateDecode >> stream xVn0 +tVDɒ [6 6qm&a?3gq֢Ea"GE+~W-@*R&*]FQ?,Fl #>vo't>bQEoX 봊 2&F\˫ ikZie1!X'z@'.l9f]FƥduuԠ$ }oW ml)GܒSvV9LJi6n0fre Gmd;g`K,[(v} -*[RLP`US6L[U0|⃐zswVUq6␒O.kU 5OH>>ݲU=Mc0u9OOcghMo煔q"ZÃx ?( 6ϳ"PE2FCAl Mxl%th}‡,B8Mk|d&KԆj 3tڑ h<( Q& b%! nt_Ma*3F##KU+ru6aN|-k+f endstream endobj 8 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./partitioning-003.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 36 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 37 0 R>> /ExtGState << /GS1 38 0 R /GS257 39 0 R /GS258 40 0 R >>/ColorSpace << /sRGB 41 0 R >>>> /Length 567 /Filter /FlateDecode >> stream xTMo1ﯘcL<6R+%@EP]UcXP ޼g`;=s;> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 9 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./partitioning-004.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 44 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 45 0 R>> /ExtGState << /GS1 46 0 R /GS257 47 0 R /GS258 48 0 R >>/ColorSpace << /sRGB 49 0 R >>>> /Length 2640 /Filter /FlateDecode >> stream xYˮWpim,>" `YZHXrA~?+XF QM7bթSJ/_oߗO}U-9toߤ~Qzn/?:rKyi棛h/b˯ؙtqPOMܾU#d~t#-xH߹2A9YR21l8X4e&g{'tPN/Ҫǘb1V*9=1d8yBX]xB2)J9*~Jkϙ9a/v?ٿіtԖr3` 9S{gjeeF;Ny^Ol؉( !Ikr`bszր-P_jb2dfF5- ^u6sMi\k;*DO(N;X`Y}VgE ˗d, NKa%]k4t6-N`jn6S0Q\g`:9VVL5+y .inVBdv1(XW.FCϻX ŢLxm]l+)-0`[Ȅm J.JFȊPm2cddHh~,tv#ȔV&[y!1nȜ/d6&K%kx4+@9ϹGUFVXB/>A(hAۙ@]~!"ȉ+< rU)'М"E.d@Eh4Mۃ̏t= QSڃ_)+1q;A"ֲqAv v tD`x NkS ӽRй w+!Xڒ.ySE CK">`X1L}U x޳W$U0BYU,NFh~q$4Oד3o*e{|'j~ r U:. ~ 0~_E}'3(fxnO;?NjxlGOx-Q_ԓ7hz5D=  o;|da|C~|G8dԶf0/o.Mn]&W֯u_c+_(q]NOlko}Ng?Ưo9k0~xG7+~wGP|;HZ_ci펦;Z߻cډ3:H~bu'}Bqļ[ԓD'vW?{=;z;?;8;_8;8;D0>z?>riI/Vtn-.іBj0B^ uQ\CSE[4 RX[(܊CBpҖxjPT*]$$h[b mgd1j^rgp *v-qJZAiVPʌXRCHtl"FEUDD3#rGH5$RE2 ZW "qv%P$zD T*S˚[becp H&ѲR..S3KuꄱM"-!}U >UU _U U ?T_"h|۪w2h~۪wBj$J:)*۪sZ߭z)*#T5PݬB 3T=PC!TEP_B4 )TMP=B5 1TU]_]uu]o|]vwwLm:#? H?"̇=?jsmMP1# }݋ğx^ h,>v|nrnj Rt=37w~}ɌE9ɯS\n0߾y>g  wp@X:;ϜFi32=Σ=ϱK;Vrz?ݵevO" 9tSS, t $?]O^g8/'=Mȣ ?SCzϘR endstream endobj 51 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 58 0 obj << /Length 68 /Filter /FlateDecode >> stream x3T0BC]=#c0e`Ued8`Hl$I#$I#$IP}\s|@04PH  endstream endobj 55 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./varpart23.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 60 0 R /BBox [0 0 612 792] /Resources << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 61 0 R >>/Font << /F1.0 62 0 R/F1.1 63 0 R>> >> /Length 7226 /Filter /FlateDecode >> stream xڽ]s9r~_1$ړI `UTe/~JnR(j$1I/Ez}-4w7d~x|UUVu]bZɺmwή~|%/~?fen~췬>oOrYUe }^|Z5k]e%[]gU^ggW'>3LJc}>M fue15ߪ5X,'{KjZ`̓[졵|g9OsRU 8'jm>wB*~c :/?*Q7VDH<3v2twNm ﭲYhcf2.7h&PȪιyt2Yfrnucp. Y+җYG %c2JG{lx믺mR(T-bϣhy6oҪgº ~nUT*wk_./#Xf2KU3CgFm̓:بߖgz̫} vH<"NiH:K4X#jm=|+2xkH5b"P0sLj BJ z5c `#>s]E¤0(~L$~6º/K&̇B"`x7>bB,ʣqnI1vU_^D#VߦkAUo,]As4b{tm}E8SIAհh0Ķy6//6䠳\+]l~[|mB#]2UU~BP.={zaA c4E 7{w=m(n5]s?mٶh'.Uy,Fȱ"X(v\N',BԢUfKlߺ$@(F&uz@ˇjBkƜ:=9u(|^ 1q|0b^ +M t2TmfR[~yHESBfg7SLb릹?xq.zǽ4FF3Ƚ.8d>UsWڼ,Ο{Qsrl*TpWo-d4J},fve\QRk4"6k&($])PΈfE2iSZ$]ʧb(atƒ5kA<&Kq3 X^\yng#Ъ Y#\fU+#-.5;k:󤙟k24oŴAZxnl.DZ`hE& >4!zŕxiPqiH, LÇ"ϐZw`$m,xLRiمCZɃjZyJŽHDd*\7+^U2H3¢asĪ3[ȉQee5Bq^JYG7BYlf]5E׿#!Y#{AԖ~2X뻕xiBiB@#F[ QMbBQ<Zc7;RNg>6-y+Te-W6vs߬7z)Rw($ xSpAr֧h#QZSK|:Wb$n~0a|_`Jə_><4ۦGr^-oM!W]$3w_"Wyʏ%K /h͟}XYa)-]~<=?PG0fvSޤW#um.iU%5QWOE'fmW8r9% J%|u9V]XB,KĽb+@zGҤǜL7?umSDg}L5/jȢ= }jg?\ w4@1SO~:ݣG_?a Ӑ53eW6kr5۷hX83Df3Ȇȋ826kh1;ĵW+';Gƴ ֖B"2ˉ> W0Z-$4seTK(₊RNE |7ySݕjB Gb>@u]d"AzQm IN;aKC `{:%,l0#̜XWЬ?"ಷ2g>a,"@_tޯd>X8;wz،u ;f=B44ˆ^, afm Q"W=;kY+E"g uݴulZMҍpĿ|1毻02,=1毫u'9r#_KO.֕RT>=rwX\ gl :T)GR?d.ZC쇏 ||MDd-6X86&4 Wf?ؑjI/9k`E5>|l bh}b>c{üicd0#v CqdS$E:)f?ޑL2D1d9kzdH1dHK ˙C~ ݏ!R̷O lۓL2]2cYX,ɇ3CO>QN4g_u`W<Dž]Iٕ pS;; b_pMxCh+^ T充=X ~o=qޑ黀~_:G㖪O?PmAvƹTL,ڇsnprֽgULM=o,8{ht0A.!V@AV—g_oTLwYU٫R3TL˱ 4,Z*ȋ!ˋ & #x1xލ܋^*ŀ/.W܋A5S^LB TFJ‰´LЎ!{ !>Ť,ϋe{w-^USrϕ|&y){yp;+MkIyI,0Am]A8L]@=͇ۤ7~%qlz ̇GVvZG| J=VO˛"ijMe ,}Mp͓bڶMG/,oێn(xnehC@F]Gjnx&Xތ}ՐxB7;7C=!7a&I9F't`ySt-l(@`^+T6 PtrrVoئbl.A't]['>6] פl,F>Ħ+1MWW t]Û6]yZ %ltVo4<7YJ }t{aWCe$y,\8F-xHͻһVғN?޼kǦՉ#˦>}%z^%P׽eS KwICǦZj-MFvۅxwC?%G@c.VxALM~ږ!6ԇl*)Dν[Mwڋ5@g]-kVڇb*L@G*V;皲HZH0Ud؎#CVf8ܳjH2("gڟm]`ѡXko ,ho]o>S2fy=ΓV:N͆Β0Y3{OpF$#W&Gk5yUd%QXz|qQ^GQ4(B;"zTWݬz%N(ӓ0sy6@Z:)]UhS<uvPUTƐBUN&yU@+\^͋-y-WPsS)(Ć5R9&^Y QS8x?MdzS`^Izb^x'P(A,.5`lҋodkл"vXs9lmoؾ+6/MVG]{H ,n,ʩCQFus/[1e_nn/,ծ]6 ˗lmz݈.)_iMnfެDn`W_LW2v endstream endobj 64 0 obj << /Length 70 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream x}OHQǿ%Be&RNW`oʶkξn%B.A1XI:b]"(73ڃ73{@](mzy(;>7PA+Xf$vlqd}䜛] UƬxiO:bM1Wg>q[ 2M'"()Y'ld4䗉2'&Sg^}8&w֚, \V:kݤ;iR;;\u?V\\C9u(JI]BSs_ QP5Fz׋G%t{3qWD0vz \}\$um+٬C;X9:Y^gB,\ACioci]g(L;z9AnI ꭰ4Iݠx#{zwAj}΅Q=8m (o{1cd5Ugҷtlaȱi"\.5汔^8tph0k!~D Thd6챖:>f&mxA4L&%kiĔ?Cqոm&/By#Ց%i'W:XlErr'=_ܗ)i7Ҭ,F|Nٮͯ6rm^ UHW5;?Ͱh endstream endobj 69 0 obj << /Length 73 0 R /Filter /FlateDecode >> stream x]PAj0{LA(9AI6dimJ$)0ٙYF%߂F,[Fqj긳IyS[SKa9og`4ܕIxRI ]5!=&6ǔs|A^o38{1(5U%U2$O[vQ+;N%k̛ B*WRZ>y9|N<sU endstream endobj 71 0 obj << /Length 74 0 R /Length1 19156 /Filter /FlateDecode >> stream xڝ| `EwU=gLN23!I@HAA#w$ +ʩQ9A 0PUvW3p</j>#>ҋ `R9L}}i35l*4F= m#B_6OqN$#I&1Q0f83]%4)ZVL 0R+ rSO},&@|t|Ϡ@o@ S'yx nG,_k?D2#23*fsטĎɩ??f-6Ueh- 3֌A'YK0`3a .E[<O0Z0F|3ላUdy#_Ø"R6E0'2Ξrea5it GmqF,Hmf=I 8.<'@Gy2"iFM 6",oz&yuzN[V1O>=YRSq/6&q{j&ADX`ԩ$XZoHl`}80 ~TzggKZNJT_7)GAyuqpU+lvb@𗸦ptb,ԥwB@=h 2ڢ,.ip:&dĆw*);5>Pw9-rsЧ]RJNoխj4qj`ƍ58 ΅-NMxQ R&:4% LJU^oSU=u hȂ@ǣ)  4yGBuCw+~5JEpyK;tӁ0QA7z&tf:;, u `?2.rOAHClܐ֐ 3TC+.w / w ĭlRx8iXr6"%3mt5o؇Ӛ%5WA&h0 &vedJTWiX |5D>\ C6 D 1 HC[lƝ0FU9Tl K%s!U^p#:gb%U z5{,<ęܢ39Fd7Ȭn`lvzE/yhlu1Dzfǚ"y0n#`k 5Gl zQv8:>M6كQ0/{ՕR]ZW \r7|F‡\F"Ċ ͰŚO>Y[ /`ahʱ=m4u e'W{z.|]Tuus_7 f+j*o O'mgB@=NuoS !8cE0"'Q@v,NŢ($A)"YbI,F,αɱ85(-텥wr8x{#sD&NOS;w>uwy݃o&PO|%t׽g|Q ꛧ?~3i>\Ȥ4>q-ѻJD b\\ 33*qS) fuM`pbtoot"Lk5)#m Ӊ'VȦaw뒔!YXΘ؅͍Er"0)eHbI%%˄LIDToqx)|L8''dBT'Ρ%[BMbP!YXz[ wJ]F<,ѥ?zjQwU x:Wk{?Ȕ~<T4T:BrTvf_We*]ܫ􊩺s>Nֲ R*cXYg0f'[9ά7leD#T**n bL&wP,"мCx]m7c܄Sg>M{C$?۸tܕcr 6"Ջ8G=SO}ާ~!k=oac^u6|KmiBB X11[O`[PK&ޒcaL|v3.u IX}?N ٢ڹ4u*y$O^ڙ+F5lau`zԂO-:*CH9zQ 8l<챽9 DR~z:2vn t6US(x2O޽UfV);OeX~`^yaP!X5?be<qMxоMiS Ndw'_gˤ2{(G)F +t:Y8zX!@q#'qdp801& EZ,4~;c߬D$^]Dw4ddQ~~Q;VSPC6F{#ӛ7jg!o%g+rjqk 1#+\n\L%v NflTh*Q4D.ѣ lɕaOVSs "vd hKXVK.%P/3sP^zU$ C?Ք<_QW}1/n,fURWzm ~ dtd2:#zD)ab/2^dRʍx#Hv*gfeXw}&h=[9 #)%zID!Q, L3-voF`[]0voA`bOznm8.0%MM~kG=RI붥?z]XZ4&30s(egPNJ0: 6M NyR/zX i&p`ûl>yWO{`qhȂ&<0\{ё3N(H}e}}[S":)􍈛f9Ş1 ~ƞ3~x|1). %1QDC!a}-/s?&>e?ϝ_. <)awpH(! $ŗYC<3$K;WZ4v-QNdϪ`^k&7 %>uq׳:ɷ_o~6ue6TZG֮kmʾ|rZsύ?8±Oh$?c|lϰ`421!{Dq"4әb6e@ ,Rq.?W1{= <`v=}Gܸ9~p: $B˜yу|}{ aJwr#慮:syǼqH8infMd ;qF6:SN0Lsf-5UZh6TjPM# Ǐ`>`\R5ad2U~<O{Zaå=6I"h]W{/Lj#:EaRwPzG)4?D4Cz?4\0X4}7͗7<)a9<9ܒ`F~ͮ 4:;TsӋA,,|>}VM=c2vA#Ќчp裍vE '.C)nL7{iT bT+???#<#nO2s%Kg&2y 6Yo 6c2gTH /qyc?H'Δ+`1|h]Qa$j. hDyb-"]*Z͛`\Tng>>8ebemrG;R[OuhJ w,15!1hdژ̉3?y7Noo$N', DobR>S-.)M(M,N*M+=,qXUުiiĪ)&fȮ<=gnwVYI kSjk;,eכ_2Farys.F_}մ^lf*N0d5˲E&yNHo>4Jl6Ǝae?O]Zި:ot9N>\\ѓdSw÷Lk~&0ْ_1C[*fݔ('`aV9vu{26/ 븺]ǙnWx_q֪=3 ċܮtCmtV[CJV@}fanW$$*G}g`^߃#l>v9#Sn}p# `Vc4~ڪE\y4og og6 @b@Z$;SVq eUyF~)Bd̤&s(zD2X~7R6·aAY<į o5ɡ ]\VJn(MuPAefL8=TAָ\1çaSeIú޽98tz҆NtFf1?~fOP{6` _hR  haq {P<#(I`1 9y6b"p dXdOd, b!YCLCVLkdNW&9aӥ쮬j!/^}a.\|^z/x^Mշoms3jXˎ(oΝ~.L?Y+M+$M4\@ Q;xz:'~PFȉelb)M&%9 8CpQ.$Lk^nz\Zeu3F^ާ>w }[ eg%صU{CG %ea#aˮgw3;=f#gHXM7Z%^GvE/,R<2czzM)#m(2 W m'zVB \F VN c@В9I0 Nrn͇HB57.gyƯ>J]fm{!rJrQbEG_d" !5/%q 锯\CQlD|(]'4Y E2!`/`tQRg Əxnfl|e9I/$ehud6[ AF%Yd3d4b ʞ3&i˓F<؈5vmTPR ȋNR2+=t0j+!~ΩK۬z{vr(ɒ! 1JӖoB"f;i=҇?^VNc؊g7j^kܘCO*4vs=ѻwƸ s}5/%E( qB0ћώ'y'ɍIqN)еX__>_U3 :D]PlӬ| /(hɏ*;&;i̢Hd-0Ȩ}z{}Xpq PN#_M2I<8H@q-O 0`ӓ&=/.ݺpqCxcvWy~zcex `mǍQb q&R*5e0hRFV\՞=`rDV;Q2]*^~1qi>"u)F$aD6 ǞceNX=AbJ dQpأ [%*m 4}VO{y&wj퀡0{ovCH/EtR/|$|+2(2I\,.@ps \SR`aBRex(pñ,(B=!?&҄C ?Ƴ\v;{maE-p UVΰXmsBDwVH(F+q5) &s[n=:<ڕ{{V{x;.L+Wʔ)q].wFJI0<0J"XIF X1CL <ς$ !e}XIiI a@.=WDb;6wWp:tA hA_IuE>R'߫{4r1=qRo$>1~F=]Ʈew9{|Ip3f/!K''5d $yxx+f9L83x q PsȟޡMd7B *.R, !XYA(r-tKȂ'$m)xZKUכ}U49]hx AfL B[d@Dϣfv RZW_/oIm_( ʽ'+`w{ސX}`DwxaLlɮXs+ 6.;G65jy5Vlykx̻߶YtmC:4NOa-ySQ4 H͕AK~(V?-g}^v QȭJm7 +N3XQdv&rݵ# ^\4x_n?ZGzqm{Ȃb1^K\w~DXOƛ ڬ.#.]3ϛИGEzQMrC䐀-֕=9oq)'{˹hb-G1sKJL$4mlďW}3dss.<,3^ce?fW57/jv2]h2p~~kڡ?b|v }}| |֡CFn#]E'og<:nG<ރP N v._3< *r.XYWk @0A+.E1)2&KZ&B7 \1k6 pr#m(5kB7BȨ.-~hP%4V0wo}xD rMOo<Ʀ揄D\wբ@5 o7؉v(L''=ӽӃ sŹr[_&,kZZyC|fo<=׃i^&&XP>!&&:ڦ5჊oŊڄ5F׍}%?+xf4}IT 80:V _5`~h\([%:B;T!*|uqKٶˋثmx{;smh[ &=ᡛȍJ6֓rW h>v{`qLҝRo7NHD8=bYs,I-AZXm,gc-圕*G;-7^1lŕOO}#S͏VFn ϲϊtI|dOrS)))))dIIg+nZM|/h ! K=5p}NN GG(iҤ37wS;YX"(.ip٣PR D&_V?aOohhjkƶ6u_w}G u {N [Yq ~!|!aDe6D)Xx@z~'˙-݊2[a/S)0NxmfX u oVo4(&a5)%΋:$Y=E"^&ٽz\B/"1d_+ =bzaIȻP_j^nRb&IL o;>pѮ#WQ~إ'?˻/]Ji闿|~=)N3=9wk{haA||fFQy̧R%i/8rZVVpϢˈsqIc?D oTt GS53軥o[1RA_'%P7ڣ;kF6ޑ*#ڕ"/-ӈ'u fjV[>}LC>^j3syV}Z=-|a#>kzVo'>ߤkNѧ2#}%bto۾._Tpҥyk|-K}-w_A ,wja;7)k]VK]=HMhxëJԾVhY<\b3\I.pUN9' }5R("^xާs,K Yk ba7`%o-ȷ j3^%}?W4N*fmṊz@䬀$lխsD)Řl7' d~aMC-Ǜ w̗K7o̿q~5lj&\JJOu"ɬ@xAo0o3+ӥbE bk_o6_L0%zb~kPYjiݙ=3]w-FzcsvLI CL6t*W?|lEhsї6s[BY7FN*)1KST1_D&39vMvs// MpVpU ryd2{,vrDm]"[[[|xB׾u!yiٲ۱ guuҏP~3?{I?>&~5Cw+DYz>cXFO:ful7 /3{ٗ&0{;Şγ9RS@Xj[YgF3%<.qcܓy 26`c6Z#t˓sɠSOwïR⮤K\GQ=}Y5וflfJoS}svWic/ Ibf>o1t] K!m|okúëg,k.7;;r_w)k}"RÞQϷmR;j?}3h-K3  '|r@û ې"ii?)r}oG~i>p?<Ő"}l8?- wuِRL|H "ϣFFmC4TBz2(H 3W 3`f`.:6Q!A&iΤ뫛:`d|ڔkhz|HGɏ[2,oXXvE͈o`?yŮOoy=ڻ/GUGqگ~Lrn]HAŨ2T`]0Ah0 AC07FQ`Ơ{нh2^fN\5<ܓkӻ_Up>|49ڱE5@ p\2$ c$Vbgݢg>'>dۇݾ 5F-;N^F&>³#"hHc }p/jjL\ ݻA!l@c|4Ooi8'*GNapjczǡ8 DXd!E_w{` h}8Xk v=mCx-{!m 6aȞ 6n%`6}e2_`WzM8їn@3E  h=|]KZ󀰦RX3HXk 5š,aM&UX+DVQ0`u("+7ھR44YzdL7LxL_B ^c?uՎE"k%wcڭV(0}h<$|?jh5kh͚5WLÆCG533-ŌP]xgIaF:lǻJaJmh3cfpxmC3hVP.ޭnx_I>OkTxxgn3$ڤkm:/AC6C:/ц5Nk BA >Z >u[mmL1=mMS{Eߖ TAlX9axEH?a U5, V7L\;iu`>dب}땪ƞJϒ3|dzx`@ɿS=VggMϚLdh*:zys|gS endstream endobj 72 0 obj << /Length 75 0 R /Length1 4236 /Filter /FlateDecode >> stream xڅV T,8?X@M8 ш@+D]%ILb5nZsR/i3,.jc$4ǞxjzcYv޾w{0AWC PJ?POihkUk~y'4ki5tⳛ7?g ,E$C0EF2k%(VS8FJ5`H7hp*z`z)Uxs8~q ^<؄0B'6n#nYpk<sH{a#<r ;d >!%@>y0a 4 *v ƣF!$f WQŸ8eCB0y-rڨ1ZMF8jl>3 Go.Z }bXm8F`PUpR a=vda*t }p\8Ep2Y❖W-]"0ޢB5BUl?ށcyG`'/f8Z).;0@!B8D>},.>eȧ,jQN~ WȗJ&q!,6itC:>}+&?*(C}K̊>8G) NrV'P,;mdSYG|XŸ!QvIp c)6W#_=*>gd.2ZZj 9cVh+|ꂯѓ437/cj!hOnwFgYFQN\eut>w ůyĻJcZS*/e>C PJk>i)cYKS:{r"tToHv7jMsA<% }imW>5:y5\~M3:ݫўku9s76iHIC7c!@gx\15 EKJc>VHX&19 ŋ+m8bp0M/Ùӝjնd0UНfNhu% -, Zߣ/5&oIr`dbYn0~ N͵.mԊf?ŗ/|fߞ#o]̳pb 1mr:tMLK|)ٕeZ$ EAc|HKZ%ȩj3.0>J CI Vk2FLg Iiݒ3g!"lۑ6E tLOz"t&N܊z"]BgVI̬c0N{/H3?o;F(*#g Q"tƈG#'^K#G cx' mh ەTaF70;y;0=rwuk} Lc Mȯ\jޫbjk~IA%/qUY]gBSyBN7^lfORAwyT[kW3ESNEt*'JV!W&y6JHi-̗> stream x3T0BC]= 39K,KC!!PӠ .\`hwIa  endstream endobj 79 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./varpart4.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 85 0 R /BBox [0 0 792 612] /Resources << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 86 0 R >>/Font << /F1.0 87 0 R/F1.1 88 0 R>> >> /Length 6081 /Filter /FlateDecode >> stream xڽ]Ms#7WNʡ tD_^66<OH:P"%QGŶ~"EVHP-( gꟕ+j&kF+kM%kպoz|Jz¨rԴb՗I-Qr[[iCZAW~ۊ֒UV_V_~Suy^}W}yKcpdp4lVӁ iZӉn¦7OMbf|"m7MMSk=W*zatl~njx=ڸ>XOn[l֋;I5&ń[#40lf|6u+95cЬz?mySLhOq>;2ڔ j6ݕ~]X昴t"АOvڵsq۟ϑUW]w٧؄9?cpZm=[ ҉Ԅ*Ih3yr:єk z|%Y'VZe0\:UT $]\rXyʵw? vP[vh\_Ca;0ҒqdJs4zm`n-uDwH.HUhOm-u)򭋢9cF޽dzl-JdJ$6Gc ONTM󷎊rSp[nnřK8\W>oG #qn&W4[G ",o04=JJܭ ~ӟOz{kǻ;S:*ܔ^dׁ qc7okG"KoO1K? 71"++鎂x̋#!ID9@bLI/$]vz LjzĸMLoqP6O4f !G/Y>E+֘!c ͨy.YbmW~f09/h& ~ru?oZEb=[mVڎ$RA[l;5Mc1fBd2)] Xv5zsupx=~^\^c^Co]ѻzǔL#컦Ґ(I?<(!j qyeWeri_zͩIeBذː]&.CKr']2 2˳eB:{aT*eH|Q6t I*8}td-q.\f\ϫH!#Lywŏ.CrLe]7gLk\&*eȈ(Bts.CLӻCIŒ Lr;k\2wdžݼzYmeB̻+( qư9QFPLGi6.cS(c('fe`Zdl 㰙r]=5,jtC+ e)sxP_ڀCை hJ"xR][șL>?>JNJyh2MJm6" 4 #ɀ@^. ,+5L6gOb(t @wdQka28!@ A`vأ[%+db]dR42hP˒AhJcAǙ G (ML۷ D=-y XwW8\pHȠA-Ka+Eg*D@24d BSye`{=\ B+[ B=CF jY2 [Y,28S!2ϰP@( B},N[ r"=XwW.! S46hP 7ѠвO0c`Dj| 9Q/Ju^ wBF Y Jq%F&//:TRZ&kNׯ^xϛL==Eu|>b\ a]nC@cGpXFYnPffAмeXUnX mG|n\7%A p47hB*  Ź>7@ + 7z47p7~U:I7Ђ7찟yqg`=dt1"Ӗ0Aoyml(JFw)L]n԰G {)now ;B@`VEx~nK_1߳S)rV797iתkɯǴMgW A%퓯[ )yG#.H6i%xyQRAiUDɀfB`m6swCc7*h%,ܧ9Rp>P<6#DW3UD/׿Wl(&4%bb z2AԄ V _=Q I@c7!F]l"i(Œ,ZPLq:A1a7>CgrRr HY,E_C1-R*4b ULތbԲDS1! n%s#UqJ Y*Fn{-R1)*FѦ*mbpL4saF`Bi FW1gXQtcoVP1ƂRi!R1×TLb̘F8*ءY 1**&QQUC@P1W1%H*0[WPTY(e-T̥bwFil|V1CW1P*_O L#—U dĹ2*@DW1POAR1Y^ ~jUHڨ1}Ib (r4Fp  $$X%4]pD//Ug䒣_$\"3`r0r'∌ ԥ>@A"\& (:Ej#R.K9Eυ 0."!(!*q> &m]awy}x\/Q6˺I(EGnXEE8.J.J;AB.J.J.!1E%gGB*]w[ \B(]U AEqyEE.ᨍ*u\z)~os55 GX)Řr1s_`L#(c*Ks!Jb.ƌ5HhHCfqD^i= 'j'FY'QBYd+9t悾Ҧژ(E׵obLEW@)Oy>c>fhE6 I}2m0'ޘ=>TSuF^ڗ xY_38i}>9%i:t-kqlMLJhzi|1su6]7gwoѣ+nx]9]9+]A x+x[9+ﭜX筝x+}8k[%4 J1ja9L Z`yiPĀ3|-$,#uqU $毗_C <-iLtѣR-8Ǐ!Vtժ|tj(FZ޺@V{Vp2 t_{V aay5՚[֔Vk [S[VUԹDV@}evmW@@VmmBGV 8s [C筯XʟB\R x+ao}EVV@Sݶx+}:<;,op .֏9zuw {`b(~u GI22gp},o\Z~.г2b[mVLJA'[ChJX?q,tAJX [* `t.@eJN12jlNxHg?6o5de;C9/JqRxk'ZB׸,6}>p C/%2972q5z }]#ȶkM1{Gȍ1HFA^Y=M/znM :6i=OAHqlC#&6dzM1lfжc!y@cKmB <]msl5 >@4F !l-6C}8xm@`mma m(!xaP[mBaj˳͠m6Bl3Ccj˳ ؆lF?f{EpqجO{O) l{[y@?0w6y;vZl 49vgć (\2"Y3? s&cm}ZH"m:UNA!OՄF h~Z~%w8]7"ȤXa=P_<̣l,J(4f"|?=ilJи M'm}B(ЫdUBZOX*Yyz,@W =ѫd54an:% sTMװV@P yDa*|"IDhBAbHQ{5( ʮ3Dg_:*-4rހJ@5v@ 45#! }!Imt!QhW!ʎ3 Q /Md+5DYpWBـ 'KZ QhqiQ4h$EGQ^|'Q 0;;dQ@φ(LPo3b]C@ 8DODрD@# #E_z"u|@-a EtEV' V*jVP7ul+KN $dJ+뀂]%Ү,`g쎆xRE #/=F Pvxx > stream x}OHQǿ%Be&RNW`oʶkξn%B.A1XI:b]"(73ڃ73{@](mzy(;>7PA+Xf$vlqd}䜛] UƬxiO:bM1Wg>q[ 2M'"()Y'ld4䗉2'&Sg^}8&w֚, \V:kݤ;iR;;\u?V\\C9u(JI]BSs_ QP5Fz׋G%t{3qWD0vz \}\$um+٬C;X9:Y^gB,\ACioci]g(L;z9AnI ꭰ4Iݠx#{zwAj}΅Q=8m (o{1cd5Ugҷtlaȱi"\.5汔^8tph0k!~D Thd6챖:>f&mxA4L&%kiĔ?Cqոm&/By#Ց%i'W:XlErr'=_ܗ)i7Ҭ,F|Nٮͯ6rm^ UHW5;?Ͱh endstream endobj 94 0 obj << /Length 98 0 R /Filter /FlateDecode >> stream x]PAj0{LA(9AI6dimJ$)0ٙYF%߂F,[Fqj긳IyS[SKa9og`4ܕIxRI ]5!=&6ǔs|A^o38{1(5U%U2$O[vQ+;N%k̛ B*WRZ>y9|N<sU endstream endobj 96 0 obj << /Length 99 0 R /Length1 17680 /Filter /FlateDecode >> stream xڝ{ |EU=g}%L2!  II ȭp;(\ <8RC8 eWPU("$ITWuwM{}U# h b2||s}yI!!)Y)n2sمTPSOj,: ^e*0%hOZ>m5_fΚ8~uD(o/.@X}a?pskdﯘ5w7~gT1-C@S8rģ75!P"j HD!=6"2#Yِ9NtBnzn9C1(8J-u< Qn$F{QꀒQ JEQJG(eN(uF9TV+ꆺ'E(J:[F|Ckup7|9B*)(oUURۋ#D^hTڊ}gПc;Ñ R Ũ{V74[gCl?ܱ3U[nnb}#9ёf椺_=zWŭ_/0Oift@ ?z SbaiSMDL-Sp&5D</u~Ɵ| $.r\bDf&3YbN23 IHfN]U/0j)-Ck:Na. `37P;nx$r /O~!qbKxiY*%E˪@V+GvKUT\ ?%2a,THNJ>KAZ4lAUKk}1 bQ{=Js݋{ApzuϠ{qOe)!@zm`bMY7T=t OV=dD9`0CM>QhyvmjjmJ SEou}1EG_ AD>0{R}wSۊsHd%O]454yFwKSLkw!w~n>lWp驋cY a89E0!Q`VN ơXh%'AZ,I qؤMf =uLMq8% R\;'C]\%s A0/p'n}m۞Ρ6naVZ%u۟r=y}vr+?[T3|f<[8sW?Z_"M|"p܊_%a^±ҽ;o!&Hv=2 `au ͂%zC.ǐ1YlR([U\hXUEG ߄ݻÕKp"9(a.6SQ]v{9'*5_@qخl=&N b&$^bVH0X$w ĉx<.'N3Lusal`7ktL{c|,}bIerLZۥq"nbb:lk>{j+ V>F ۇ7j{a7`%M%jk 1=21bKGp)2cMFVbXo)r^`N.x%*_RpI$m)8jL&c ;Ջ5J"_–S+ |S+GԾ H87n,fVW~ud^>ld #zXaa1>4)Fr r#6rx,qbF`uƾzAW FZc]p3(*ëFAQ]AK-&,tm :9M^lG԰7k{Wj!bУ:ܕ,%p3a.̇Xde3=vzt|~~a**vaBz1/ IJgFcR F0o%?,^w,E6^nlr$TZg5Rv@ ]5'H#M8'/lėS8l}Mwfγ+ob;醚f_^WOLoaަ gFgd'tm#؈dʀ5@>6g٧`4N2 WB5""f%h33l8iqn+WtϠL89]$ bl4g6``r97l\9ҜA ё <hjsw}OG`Nttt#jsy˼y@8nfCd C{ fmt\F#a~a7&`T65Uт0\M4ƃ 'P:<̔@Z;)3\1;U[z&BMb{=Gn :Í;JqOW_ϸq'Ix>עx3S}{̓ϑsD3 xlM)Y$9ʜ 錶ؗd! d MB!HIBb M - ~nN6F cמhR~DH@|<@Pwr9cMLФ'dɂS/#qƧ\?jͣC>U_x^>k9`|n_4=č*"Ӎ(M*Jgggq,V_$qVl!` V8`9I:! z cAe1xaady˾s!BօNWSfP3 R}4u )q>3L{I_/s͛[/eӹDͳ;WhшnB @8)kx*!zߢ.m{|xnW _3+ xeS+Oɪ^|dswT}ՙnW+3cu_T5=VWO) @bQ> h!ހ6!~ tn$ظxl5D}ٗ㟬=.#տ>07Im6Ɓ<c/ @]V^"6ol9* =Zz:%$7  7LS {ɠvo8A 8*eqN0cwXFuE5m6tbǫj+`1=~g4'<Pah6,U0㎦!ר=1`(Id)kO`찟]θ9[ߪ#zd"J1r[j._6iW-GؼGWMBpr.^^1\&Z$2c3lfٵf+` ۱VF"Cz\$HԎ%"$̘&#c(JIeK;61cG JK+X95 !K6ve'!\khh8>+v>SeVVNN׏GQh_׹+_]eJ2SFSΣG/M__?tZuSP2ڲٶvw_~E-}0DӔ /3Dgd" !5; -q/]-vDlԔb8.,'f=偳adJE6nHK!tHv`/< ?uTurgfli>6h|e9I/$ehd6'X AF%Yd3d4bʑ=vF<Ԉ^'}&֨x(rxB.T:huE p.]b.YR`8wF2\[E08q'=y/Բ7$Țr^kPZRɚ g.UT붜M@{8j.DnzpDPϤ#| FfK{yuElΕF4r %kUtĥzLIK6 ^& vg GHuvsXLdAlÜ!D'찹i[MG#²dߕ#>޷a^nNtמfWf~tn -J^#;递H %~p#xo LHb&p,1DD'~‡0TK8$(/,+ lgv6"z>M" j)i*I>U6nrnDV,:"Mc'Ǣ)T6̏GS|g$^c6ޢ ztPSWOsmܻs%ua]"( M rwUrMyVJz$0:^@(ي]B,(N@NY/^8k!)Ӓhٮi6e ( $Bqu3?R'?TrjIi>NfDb[gYmw)#YvʞgEAØ93,aW67AKbÄO`XǀAE"F "} @`D#<^Aѽ a52uQfEgBN] "AfXLF=mkt?WDC3sR޲/wnɭ߰Ȏrq7~(a?xDt>IZV !g.t:f`[mӜ~<Šx_ZyOp[f5/׶ G}P~nݍؚ=q^O,h8e!KA1\\ .wJ4 .] _XL8G180PK==Ys]AvatrŒNzDr!f'k̐R8G쾰hoY{i{pʫ^mG-㭗ػȂbǸݮO]&7:1T/QYs6z0YAݚ~/g_0'.}͘ P^J)X; G pI)'b-F6/Py|R8 Ӝ1~#^'`hĔeHŰ1`413ʜ L+Rqn{ަ#aj+F,u?=gYlI{b`bFQüK/{ikF^(O,Sb%z ]"y_<&J &;S8BSB0ұmvb!n Oz2l5%Mu=xvm?dŘGCj!SVˏ쳶Ms?.U ~ģt֡Q6>ƾ!չޗ>OY1Gud E[}u%01 !Ą;ͅaH:DŽmٛ)Lm-4F vOH׽(o`|;%V  ËT69 :Sݖ$%c cRP!jˡ)KIZ:&c1FB8={QE慛+]T_l頞?C9b}FFƛ귋rWsoq׸J1$"tad .ZX_'z8qy϶EZ >I/E=[VziS29sV9g1r8YVW C)t2tY,5 Cg~Wքo[|K_sCj)}V̏`M1hXȆhex H'^0_='#DtrK;*e F@M3Փrid8iȤHHMs^ w)?/~yj:O{$=8t&{{.8(Qu< n GzcmE?xTYq(fo-k6D,`Ȥ%mtf`߭0j<ț[+F$%E-~5so14_ GY]8: tH(K~4_1˹u:ee,wƋgEW;BZ5K%ރ4YD^'gaoq|[YY"M+0cJA?JʤEsU\ zGTY*9ԍ)̡ZF{[N5ϵI|XDG- @ D0v!h 1#{>i&?uZGD\m>H{N PJt]AkBlI$qy<;7#4#a0Og'Wy|Ue2qyFX#1 [ݡoNyJM61؃w0 :116W -+Vxz|.,=n/1Xbp =џ$‰)cPanՒٳss+[*eUFѼN#In8Pmԡ6Z^p`ɤ'o6$8:ߟ+{~[Ҋ6W=4?wChGn[|}Zru+[Hi6_gaAwtF_WH%"y]u梾Nd1c6IKz9lrbd.M|wű%>5moF^PF=Ccѱqr=ΝN't'''L'&ܤM6f¿5 қ*x= 3)GMCK&!Σy:r<*ň\<Ҡ2rQR)fG\RƁK?kkk>S[ FڊuꞚ;'N`nbcʝXp-Kݻ)|!=DPsf5Z,< glD bofPJ :SԌ)~5k@gBgt;tV6oO,?9:7nɢ0N;9Y\%(#Foԉ<1AK S?Mka&#5adf93k,L\*ަ.@c0겲]_-oli_ӝdp"'zSaPl<)DH)Ue#GۍM&LSu&q6-&qIB&B3î|Db.܇(o6imUy I9$Y: :.;]Xǫbc*K?PRݗ.~+|g@ϻ  o:sW^nBBFz~q'Eo)ioUCkqKNc=_'KaStGG7) zˬxcka`Y; PtG!Pd.TutVM[[#j^{Ŭ#"<tbK )|n#~kvQE ~ߢ.ѯ2%FJԹQmn=?fL4 SNwja;5 ))fKnlR]=m5RѲJ6hYͼ\d3\?2LSu审$rO,o]t@Vzyϱ,!7fy+b\Y9R4%R+U!Au%ͫy76G?6wec[$|գ}ְl`n,65NLT|<<`9ZϘ1_.ߚ5j/Ds)b>՝џ5EYaf2N%VӽFl 7V~"m~C]rIeSIsKK$fddpk֕L0!&)$0'2=Wk_47%-7m6dRt =:YH f ;ˮ';n'Sgw_zoᦐ#d;C.?o.?]59DdtmՁg䟠H§~VwĮ>oQ[74难['гh':ðhC*11zYǯv2ٝ\=s=ȝ`OpsC CV`5E ,r)dX`ՙBE>sCq, vB Z@AM&L"+E"k117n3P1<ܕtii>kC~=6ƿ?3oqFڻ?ʯgνc[{~l H}qymcE"=k̥rǞBkXAB=CMF(`;> u0rL;ʓP2}'CeyG}+DAY=^FfX0 u5^wmkn)( ץGEw {ءtB ؎[.Sl+V`lUb@+.J#?Ktn&uK Sƫ -ri9kgkmm}oΰKv==^OAyġ]*2ꄐ=rWFNjGF 3vPY8+9|ZGk/3ze{z]ui]o+*?Tc0n??>XρׅBz]np_ {>ᄎt货.v_RۨiFX)uiiz&DO0Zǡ/C=Y_oB|}+o/MЪ#z զP=LMп"\/gb+B}C"N$OljuDZ)z|?%Vե!jEX'Vg S)8.ZEAԉȋH׷~jiųtjm7i:(t{n]2ߝoͳt/*Mitz.8 B@O άάgV q>3ѵ;cv1k7gAo+,8_՘-x{0zR0l;tCiݞG~ i7i_~˦((AQng`߯q)hg+G}Ҵ>aZahd׺BХGHO%Oka>I>G>OSgoE3wKCePJkWVNu.왱(rtĩ_V(TVP;#Tk^KO Ak ޳V)+* /7}){ J/6+}BO{MBk*vWyΣܹ J endstream endobj 97 0 obj << /Length 100 0 R /Length1 4236 /Filter /FlateDecode >> stream xڅV t$ l2$Yn !ФG K"MbB!J(4 "*TSS }I}vqrzjc{GS4@)02bſiUi߾ g9@E$76@}ox>l)D|lw_< NlWZַC|9-[ݻ5b!xxDV'FZ ;@0S?i8e DX5>=pZ<@\G0e34fnfL p<t3qC̆xn(pT#iM(t& +1oCx7Ȏӗ#YwL|XH+Be4D%$_MQl6#Y,z+2lQ m;F/7p>8wׂ_+Zi4rbp+~wNi ߢ٘h6-J!$ X Z'#Ffɋ egJ2Zu؋/Y,Bv3f~`IraPdzeC2=)2%C LlPD~~'4*XKѷ6~7qޥv ާ?)o(2FWD݆;0m<i<"C k6KS. W)-jYzy' [`+</P-8PF>(vbވBwb!kfavuE ;E>e TJWBQ+ĭbWYڤ)o pAt| /i4+ķ=8+Y@ֱT܁ob5:}L A;,÷,K}M!Vᡫ5=F~.*<3 y9oЦ9Tej{IIlǏ%EBGzW |$}OUU^U SEߐ(5DZ%<գ1Kh[Wsx9Lf<1P=fW͝t3\W֡·N#OIS<~`/X|.-= G؎n,j(egƠc~觳pVv \ت?Nr f݉>ܶy焒T8Szct4JJBT1 ג3}DEߗE]Y^ha 9ʼ8 Is#t*h"W>S4tqXDWrR[FA\ kE34SzkIR~`)-D|ͣlisuQLc,_WiUJI2_3˜RnLN\q4BqPO7 {=&xJ%R%ˤ )X(s`*%ɉMɱ,[eQftL[+o$-cj\2}(IM>ƶG'Ts{ qQCqUp~I9+) %Z4ASY)]/3H_?Lng=A|Aa/>ra/02< = "m5q[|Ӗe[ԭmZ8mmEX endstream endobj 103 0 obj << /Length 74 /Filter /FlateDecode >> stream x3T0BC]= 39K,KC!!PӠF .\`hwIaK endstream endobj 80 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./varpart4.pdf) /PTEX.PageNumber 2 /PTEX.InfoDict 85 0 R /BBox [0 0 792 612] /Resources << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 86 0 R >>/Font << /F1.0 87 0 R /F1.1 88 0 R >> >> /Length 2200 /Filter /FlateDecode >> stream xڽ[Ms8Wವvir^&9mf*ݩ@Q"Df(z3PIMI.1^7^'; :F<ұ1 %"mp߽?P0܏O1vB7CiXk!`$vt(w`s){\|L6O_uXV@;iE$tz 6,hm&ee>}١:tSa\!X8kz b@kBq|ަIfgcN(evꃡxݞs)jE{eMŗo"_L Y080#!F~ݞ>޾X.j^lOg,wg1<0祝Cw*wM^kR.gP+FWM%*AWyQ9\dݡ\͠rum;shSMw徥\Ϡri@+g6}U. ,5fk/+,Snnj5*1q JZu\k bungI;Z Փ;7t oUx<vwX9S&^x4L<-F \cx6 /P<<= tOFC ugQHAAyv&W~ W܁Q /? \AxYcݡJڦQy3̠| 8Sˡ**[hCgpl)s~\h%"ZBԊCKdAaK_ALP_!}#@w.k:#&M,P; P~:h,&5MoQ'7f h)ߊ .ęänhb70,0]s sAܜ 0E4Ȟ݀70=7`;"+( З0ibFwd ѕ}WI}JΘH8Ы% `!\gϮo*buZ|>#q~Qwdʒ|Wp2∁p y.)[X^>Wg-u5']E_EbsymGJJeh)sy!6gb/Ru"+]4B(C XV6JK,9',9%Aє٦E{G ڻ?O`? endstream endobj 111 0 obj << /Length1 2119 /Length2 16113 /Length3 0 /Length 17400 /Filter /FlateDecode >> stream xڌP 5xp -8ᒽ9;{kfާYݽ QR63J:330D?23XX((T-(ԁNv<:ebFvvk3+ C;G)@ cg tp4p~??j377'_a-@h~5@?|齷ǿ/:W'"bgcг37(YҶfv}/"vr)ؽw-@o231n\uo&IX[K6i]@} lZ_ ۚ[N@S%Kgo)*9Y^+?2:[/}rHq[;#0rt4{wb~ES_M `ds~w0s}\Fߢ'Q⿈ /0qsE,"whd Q͜WwWW `4/b'3~$ll%66T#2 8~\_ٿ77tw?{F<-X,i{ l`=:[k^+94F?{j$ӿ$n{{8Y9YA~!oFg G~w?{\p*߽F tF:-9MLxZOSj${-:<"ALXw6؅-N}#DuT ln VxpM/!,О'&П2.\HJn=5%#_v*9dK"uPgB9|@;wGF#J sZॽ0ZԁKC~62I%r(=UTҷW@HBpVi1¶udy' }'T ݹLdV*`{ 0eqT:8G%~ahG` q e4$Q 4 ݒ7gH`> G<|&&m.nSlhsyk74@7I_s;rbyu3%X brq[ lҒݻVy j-y$;u"=ܷ["vn"ћA9a:S$# gaNTE\Ilb5TG; J( {eB q a4T)S FS- 6_૨yntOn On{Y~giG[$KZ秎 5 o\Ss]"J@A2aK h13<3c+t0nKu;@C~N=s|˚rQ/O ݱK$cLE.!4 19@曥I*CDSJ:!$\S-*3"\B QG>=q4;'5X<$1oF*vJ]o7??i/&卯欶a!}m|-;hǏ4A\C+#,xlHoW\J|l̳WR KȈ)M>.̇Oj XRՓ>8DsM(tt\It sT>cD1^J ?:F"y~턁.#ՋF=/q/- tUk&|^0ߴ P䓅=RWr6eK_w;_K84Hّ/ xLe\r5*b`voZufv)/@gaSY`1vK58*p,FW{ISH>r滹imI鯲Wcd4%JmQ #X7O2p0\Оn/>^ zNRٵTg0%; i0K$_mFչ{-Nfy~InzىAkBow9mh(cs]'Ӽyf%" Ay76 L_˺N@Q?|EB/w(櫓A7 V?̵hT(SjٚD %/m#demS>֎r2.'BcU,6z=nɭ4_3';:}껺^_|7tsna,cDT8 AWh ~>I)ٔ~Rrl&R'Z#5:wZGzZ~O"@Mjϊ/,30P`ZoC5AHpgmCpI`9w%`_g?Xۉ'f0=4K$ ?+Igczx]$@B'ef_z޻ߔ%.ՁgNK91aW.`iysb? 7.vTCrЩtm!HέǁAhQAcY:xhuQ!QD𣈑#y jv{g-uEOV9$>k Gb~%;sʚMPRG[a}f.l1KQ mW` m#! ְ 1>gbF8) Y;wW~mH8l ^i4MǗK(^h\*g*+_5LCc͘` T3Qx3bmv\D5{xIp_{ w"&?{{0$ÉZߎ<̀JhMgRW6=,H@1ȮQ-FtYh|Vq|0b+iINqCDAObk`E ŭORݧl Evt p_IcXTdKXIƷKc6#f -m""Ew tBϐ V*a2*&h湘4!s?L 0 d4a]OL;.&,ND-ߧ2w!P{ykhꩋ҇'j?Pz&6x=%蚃TBG]L%j!ϞBr2B('6ը֏#E$ˡhf5~d8Jyqa@UkYx&Eк)9ӯta7L[d.|Bvf݈:` b. 5x𱇢3+1 '|,:0\Пje/w?jؑvt8.b5XBt)Zl<;BrD9$剉Z2%X vFE8/àj6*l֙-ڣ*[lIf>_!Mj.DäۂxW[VmK6~x~o::kE`~?˽7D11JAmj)c䓡yZbNX8Txf^^'>B奜Q6ЏA]^_w3zH]d&H^HւŞW߆"N&)d E]?J][u>aν(m).eڑF-~Wm2e>jR+=׍XR6lMPE+H*u47m2UsAhWvr .nS/*E66\KG>FBOҚqfy[o/O苅Q~mtLt~YVDX"!8A- KZFS!6t_0 dWT]Rnv L5Cءb"A3HYu $`Eçaa#*6;yq.&3ܬ3]1|Ou@x ,9/.Aɇ2tUvljvݣ>˝L<8!8BwFezGPiI !͡pH < < rf%Z9cU[tّH7YQZ/ BxV+Ht87Gt0"+h\ v/HouCo&-V+yh_z:y֪ڴ~f=;Wg:Scڰ,RETNper 5n<ٗ&Y1Y;"E'K {Ycyg_Jl$^aSiQ|CP8z+(%Kx,އQYzU] IG욉3 )%NJAjA4qz"a[Yh z,|M{[-7G-{ڻMX>Z"vUPѻW2>S*+(|~hQ`ڷY'D?t W/ _"K22Bۨщӈ@SB({Jc uG ^y.)\p~YVKp}> D~9!Lyr1ß])Iq{Bt(Y!LB{cgxO"Mܙ$]R΋I~/jV!(yH kMz̄]H`qRɁlshF(ݏJ[I?Pn_"|AO%ԙF^ʑɍ:೴~Zom[%|ݺF@+.)R}?zTrPD:/&7؛ȕ(w-&cפ,J= 3se*n0ֈoT %0-ʏ[ׄj6OjD,1ԧb*lHjJ9N2k#T ,}꬛²7JM+WXuӟe32!wrLF2bk/ok J2t%CdY .e$z[ wcp6/xq4cnwhMMh]☠P&=QfzTj}?}/[ԯ̦n Y,v qcmkз:ۃ`ꔟz:,X ̶| & T5! MY2OͱyO?D@!?."t-X-vAQ5^f}0Ep1<О/Mt¤HZ꽋gȱ)4 wP ?Osy笚_c"8^6)TuF.E RlT+vIx-rkW<` Y_̧9O8j^ɇw{WCjz_ߚeh-pKĵ.} F:q?Pe^h|TJǜ9neY4QRgDQ1L۵8Ja6V \ycn!Ʃ1YT4\c+8}ض(^Ha=71 ]8+Q<ӄP5h]8:V+۵1 }X&as,W!y&hP`ݢ%hPLRL,ODuHҒ{T/4% u~& Ӵ[z-e2`UWy[7b?H++1'%i6|4d_c+}bЪ+N-]!~Ld %*?R$\ e;5?P!`&m1}oݜhN#q]ʇP DʪDs-=@ڶp!\&ƿH~  D`jx Tt6.#!R.SOG^Xi[4N*ui@ Ȋl.}Hf ;/N,EO!ʜ k %; Y4]\S*}>5\q1(d_楼Z SΊbe>c.|2 !navLWkS"*1}_7.P!LT4yD!ja_5^Ŏwp?6%-,)$ 'p89Ū ,F`3߆&Z7<$4{e{f-dGO 7Xmaz lr{jaoB$Yڕ;ٳMH}q;K}j[| @SxyI0F)lP)3#Y?_im2u)܄3M[OHLt=7$RH׀3U[}jYG ɜNxDqaP"6r\G;6vl-{Ї񆳹:7*"z)L<JŪo*Gq.`Fmw -WK19#?)="Y4t.ac)R|e!BSl/XK@LH#G3x{-[Yf'DvJЙ: KA,^𞪎0 (vRd.էrGw?MN"8JTs xfh}9XǁRmĨMśnuwbQrg! ڪ7j1`52`tV ㈎@Hէ4ԏ*C0?>kŚAUƬu&@t뙩8{(Q&&[gᰤd4q(+蠌iʒ7$X!F#6,Β&F;eW'-+HNC%]ZV,#FW?fe&ŷ_k/qp6&_lS'&zөx\#N^d}k'5oX5(*Z/Ŭ7HI(:bq3MÐ8źca#1wQotYVCq&56~ $۵#cRqN8gm|+BXV=޳6?ᠧxxc v0;@5cey>s41KnO=fTT_vM7x"4 Dtt,u}ܞm,ӽ~q(9_% />(4/sUw3.%Ħ jm# ءJM5'VV+cGtGϽD.Q({"uS tE w܀M.~v'$ju+t3S׊8.}A 0/!]б|i]dMЙ6@7"d0S ]FdPAԸ灻CRIsA/IJ?YގJ-!`Ո?S8HLe[ԆDiR8 Ou3oDUR$Jf1I]vXLa^Є#7BeNgc$X0"75OMIm EV20[R]`x8^M88\+DQ믈6~;S&rZo%g"+K7( K'd߈%2\q0H8r>S$d? [8Z5z:!Nts.SYGP*w}eν >Vg/lћ0)NjidQ޽jZ% T)6_1ś#lAFt %>U~$k/(KØ59/22yHI;0B4z)ָJ'ϹA tZ”xJ cpS:+O T(8h1c!;FnQZl*ijyꂸF[OP=d</vQLH}~>?J ÿmjŎ'mv{I߶i%ڿ<-b>eȁq."5Ih*S2Ƙ5/sԃQߖev{=B*$6ҟ!) ɬ{Jm8ƺAjM,Bp39g%׼)&r\Ͻ=#&FD0iNo1^G9X> 33o#{w|M,^Ӆ;$.[&+DMEbnv kY@ɧMDˠkP 489_Sm}5bJ(TIS"@ڀ9yœ{<'̢zza/@g]pG?{\4R _S-X^p~m8HVsc!w3;|]jGo{f~q2ܷ5Sy3Kt;zeΥ%Ϻ}Iצ4(_r*kW?U~qd(*M4؀D}oeG[I3mZφp8~8;=:|{F&>Btt/  9/@ 2\Cy!;:4v&˨&* 6۟)&V$7S4y9 jWCOuC*(!+d箈tO5uZ{\,+^D#16:aƙXV={% f%fL QbS:2PrdV e ^sB6#a$``ɋseSystL=EI7hKy5OfF!M0ڀųUN4n^cZ )Pԙ#6WsVٞ@G{q2 &L;)Bzr׶ Ւbۭj4=8 }UcKMF÷,Ҩ_*̲r.hWWƾmaYSEiC$r}K;%e[\Q~=(z3p ,]rTgF"j<-x*kR%=LɛPE^"7Up&DїfK:{ +LڔoΘdoc2Fu6Wb!3I=<>q2ܩo~g*ǂ8Q6/=9o6$kY;J?۝~j;rѳ B8\^zvo)%IMC9Bd˗sှQK|RfpdOo!y {'niQC7y|dRxI ra[΄;h##e!mW)$!ix.A7aj|!Њ|fj)!BmDtӉӈ?G_VC[#b{]d*Fh=aVR.9?9I;Vvɩm/~ s#c]}f5f&{$wb "^]@1 NعXJ -7h0u <݊4&)HN|)>*g /͡ {n,}[Xb:)'Q}OKRMΣ*#6 ~|!B;.c@3Gh*ՑF G?{m1X$ցU'~N.sQ7ܕprjCShEΧAR|"VB+%2 YHCo]5/no4)S)< NaJOr 4L]T5R 1* ؊g>rD[)1B\c1 5WcnuMUVJ(Rsas" ;;nNDԤ;Qj ] [B-mxhaqD!:x9ޛ9>32VҮV2qVM?=y n itGbȾVbJM`xXBvyh&$u!% R:lŇJHӉy-`C*TpG8.;'N\rN6h5Rfߪ*X؇o>!e0L.Rf$Bl`qTȯXw`^7]Jj%+Zv ŋZS]0|ydz䟛:vrñ߸Wekh?VaBfFhVy1n${/ZӴ\g^8X,ٶf[ՆTk%d*U+?h?>X~`D+Ư }4/i9 Ey$I=OBuןyTc3=\V,A'=p0;$7FE1 mҞ?+NwTAv$%vNB'd8{ c+3H?ۿ85B@0M8v4ԢXNwaEj6%GB?NJIʏJ1뛔ݭJG5R)-J=| .s[2Clu4avJ>8Fop] >SwXZԕZLķԇ0Zo1k9Ue ?mA{ZcDͰ#ym/wwU_FV R)^rLʰ0r$s?tdG,H v yu7bKgetpf0p8%E+| aC=wd kIk=)\޽pU3U{6vI3x *P' J .$gLf;#rq^l$wt['&(jHxҦE!'[]q UjskHձQ5rm79\@=^;iVQfZ>`Ƴ9:v1~ ~KX7dc emsv)sW1Un6'sZuz|!c6 eXځMEb2m^#c`hUyiTΎ ڐ%ӐYzdPW#œk"41r/XwG7={޺glPq|vgqyPEPʕf %蒺ɾ v{K 5DXFD0j,=uW@5kHa C)'мaX|Ɔ$h§q8ז.,ֱ}iwA"[OJb;!}B]`ɰ$ bҟ Xsjߗ0 _kIG^*û㤉kqDϟߵ$6Yk?Ulm'1f)9!;u> ˖"[-RyL\#t唃}p0J5Ц+y~*5{0A83؛ >w¨;I_G4 $ CHccL#{Wv%.:_`Gi:Ĝ- Ύy88xE/ M?՟W2ёa*^RロB פlKAjh6Y(Rck?.H~q2@|T=dbP1M XÚ}m]{ [ pp`X/5g+{knLQN ?O]$ QuX ˎޫn`Nd=k}:)SI|ahcA?/F>- ]C'\&Aŵs[(0-!Otv/3ї^ NY{4 _DJې.yi]>|7%P~V,:T"c!yM hp:ZO|ۅqĹ_OQ-=By`)E׌*/ l+ 2y̰sVNcې~Ep.ɪAfOCkfs7u˩e{ů0}yK4OU/}\L P8q&M,:R$ #yXЬ+RY+YiB2R^2뵨6oh(WHq/* X'\8i1 +̐TiCf Nr`mvEtLl[z endstream endobj 113 0 obj << /Length1 1466 /Length2 7196 /Length3 0 /Length 8188 /Filter /FlateDecode >> stream xڍTk6LHHw8t]t #0 )%tt4g iK=}9}Yk}ac3S@\(>A~PY@P @BllF0/3 APF@[ uv5ݜ@A1)Aq)(I肐a6?PE)z!`e  JJ*:C0[0 F9@oW; ]laP׿Rp8PR`g$ ^C9 H( jv?nb#[ GF!PvqP '_``[[gW0 @]5-~'C~NHx;% TSo=-B#aNZvUegg($U v/?O _M@\nP (&mPPKρPO[_鍼\̷n젷/$ D!ܠ~>t !0[j > jOV^+XMDώSRr D@qQYsJY.`Ο;˭h@ο5$ V?qaN^n5놺տj sfz5P9P;waH5'C:)?ƿ  an ?ɲu9οTۺ@~M@@Bގ"[@~ 6x۞ADŀZL(_? P(  @7Wnmoo (jK0;b+.Foۆi*,1^WufT1i=š*[K^Xk~O˧cm3G )13)l^=5 tnd}&AOqѫYW6߬{DxY6m$x-&\]n}Oɓ f<NpP' #!d+9- 9zGi+Yfڧh ND1Zi{C}h6*IG+M*jas1sH撧ơx W7v$^/j@(#{ Ό;* c̩g'/ذdvqxYZ#`>#p{шyhsPc@{<}{ۉr6åss qLbkl ݪiMQ!axE]v*€C͒"ܨG8Բn!WFV[yx52\LBx1MXa+#nWT>h\sV?ywgY/7T"!qzMa7#`%Cy-UAPȍOOp.,lJw.v,g ou}f=ۻ/#atDCt^Cz';kXr73 _ `H\>z}eq? ysRAb )J)4iSRlD7 " 7T_E8e1GkZ0WP1n~:sfÒ3uYp{YXAԚMD_C]؞)ZRۼ4?B"tEhrt%< qq)A&2u,~uL!DDՐHsLC&q+ kc𧚇T j tG2qS~MϮ+Fɭ źjTp7;vOlt*W~4W +"lMʓc)G2ݷ ֎FDo9J-{HD f,9U+w5R8Pn h"AUdXsDz~ 9ra- U-TPG|IWb#\S]yO9";b? K ffҘ=dNwk'}hKWA6 Uu>hUSd!"Jr6Z >~VoDqF^N&1]ۗ.م|`ESy`@ZHklGCwX+jг ƇmW$X4E;ٳM@KR*ImD!cܺqj~-:wJ1<¼C*gc"As6kji*A5oxel)w[P%!ZXc;!\P30\^5&f,?IW?2{82%geX?9Hռ;xEIAU;ņu9p7 0 %kex['ލ\k.Rd~Ǫ>&|\&GuȲ\!ڳp3sj̢fb~*l |.!D k <3o;"I[Nd>wA;Uy?m3jW-R)%g\l:9hfrQ)1>$'$n\tl!X(? 1$!%31(9p.,L0O^])x=,6 wwEAu:t\#Ep6D PUU])3wI> z^ >\5J:`WU kKJKVx-naqVǕSD=za_T%=l Z}Jxq+S ̍BXSb%#6xT@|) %Y>@M%<>S2b銬$쮩3f.[~MJO'xJ#Fe8uBjDgyz90v3NK?̷j}]FB07`j>v [8mT>& SUOo/7 L񊗨g j5i].>-n9 "R1l4^Hwyluf]5wF~ ?)1A9LSx}ğ$+o_ZXAnbK Q"o}f%5\x{;mϜB#Ӆs$ !aۤnuwJ..u_͗4CB"/[`:_]E?ge-1ti3PO9nX@;^a;i˩S \x*00xuBIp[Z.>S|ҷh?ŏ [Ȇ2 $}SK? ;zᘔP|UI]wdx>(~vPxG%kC'o!YRw(!6x=НdI@>V"Hێg&᧚0~btCJ-hǷcu]ap@Ii i1F` a O1kbLv6,"wET"0o'ԙV7W,eۧN<%LM>ʹc7ݰfVmǽT" mjJ&%@tĝϣ{Cd&6(Y0$ ,L~=?HSe.]7&7Xx0, "/1s^H㛊cRo'2b(׈P;%3D6zu2<;##3ܓ(b'=2InCEdVJR^Eߡ9/PV=]Ye䶵?Qyh^,8<@zBY08$&T.6)H_^е^5D eKWyςMyÌn:JI8v0chLL˨&fmG~s]y?IP:r65 'bK r@WBCM\@.g6;kN'w;?]+r ɋ4Z@'d'/. oĤc*V(ԫ/6hH,buQ-kNv튎xyrCS9/W~oŸ6խR)a0P5'u(Nh4T)Ξ5-V@XTkHwEcՆ6=,o5K?`(ȹՄȢ`v ч{7A'q#{= ӗӬ>L|QoKƂ"9Qr ֺhkT+'zZYW khⳎbX&*ۗc01Э̢ӥ}w2О>Id#{*' 2WoDbV'lo# >_̛yJ(n ɓPzNfN{lHRvO/Qvȷw liE&.΀H]\4 uuS&bx q=r9dadZ]c\C$Fu#C8W(nRAؒP[\K oZVy/V)Me#K3@~LG! v`-:1Y;dsga6Jz" fd|T1 ~%YTRxb>m>YYG>2zߚ+`?<{!.${C X딟ukgCi={q ;bxFfݘLvKV<|\FhpL `@t\Av'c]Y6Ky:\g=A vN UhW-eA>قu-Uti#6xge&&}5ZEUR9ٳ"Me*sw*Yy2J)q:ۧJNE1Or.Z黖-i0)k=!a jpdn ,/Pm,G kH/`\ 8(n,tL6e‘x΁0n_d$%nl"}C5&;.chY}RtS[8њ K%`HR@W~H8Rʡ?$`'=c0fF,*T&1_s. 9~@}4VJOoTgee-(_F"TV]\O ^3B<HPsaՇl1?sx~>N67pHk=Om*=+*,si 1TlcN Uwh} kbwgFW5|6[iv0+?/^Ԧ7@ן_xzAu=u l V xOHZVIֲߤl`X SS^+FihQLg~9b(`ҠYqAPppX"| Nas ~a;>nV8n:rd|A}r%,~W2bDZmZ_ sXk[+̋ ZV )Lİ}%<Îh]+].,zrsaZkٽSet?9~7;ɒCiU{&`PygIB懫n[haX-f?ヤt3[,z[*?iav;%$؁y~31u,g';%Ff W,Wy@W^nS)wژlx$Oݴ,+3}&%qGŅBqа"ۿ;*m ˒"P65Y|u4OEW1Y̬g9A2.`z"F5{/G)ȡhla1a%ؘ,y#$iجfnFa"!$nGDTuL5W ,W1F) l q믛9Kj{}}!6{waJp|]XHi8qsf*ғ:Y"x^yX$D8?Vз*3a5Oh/ ؙi&ۧ0 蒚)CG\G\\|t^1ŭ"Q'>c̼5ҧL@A*o,^iAw7G:q_m<,M2[ Q,[HGXHCG8_x̥|pv獾Dd ~?~6\jN)ڀ#a"*0K$N5ZEf"Cg":"=Ot wwLFܵ@דw!TU"6?+ endstream endobj 115 0 obj << /Length1 1598 /Length2 8798 /Length3 0 /Length 9842 /Filter /FlateDecode >> stream xڍP. š8%XHqww HS(-Ŋww(] hq\ڽ9w2|ϒ[kz'Ԫb034 H(s@.6 ^bیN vrp\l 8% jp@ aNIA0O'k`0gpIك (@ b z93]iѓ,`P;9_vmY 5=:O\fr<^n~ WOا)`ϟ`72I`4n?}q?+O4Iq3 {Ouuyҿi kgWʹ@ je1B!` U_bˮ{ P*Vr{,sۧI\WJAa75D> `?Aa.O)|0''.A$o `~Wn`r-V<v? 3 `w|r|j?Fht|X`}af&Ħ:R̝ugTh~G'{ =cEFКӥ8[R T?jQ›ߩ3IPiA'!VGFΪ)G; C+j.{GM_pڷ w%Z19f34.Lx'SxcT \q73^+Ν$t$x/>y}id̽4:Df0 UB<\zkvz%*QM'TOƣK^eDa!,sؾ)A@[?/|~WUT_S_{܏8HK+]ߒMMPžT5]P$lv{nS_-4ZRw#֑?S0»];Z:L=C- K&M5: 9Y|'z\D{ni_&(B`+ZFJ=,wk_ucOY4kf̾ jZ"e%Sd,{` !ԈywP˜m]T?y'xb/O>QMZm"Q!0d:9Y{>ު5hCJ#>57ꭨe2t+}Ģם o5UN.eKXt_(!b#2~w Q2WQ7Bn _1 6Dɓŵ qbD`ۥ%k`$y5&Eeh]RŪ?jCBCLZELQU$b,M#,센- u4W\LZ00LcZ{|7/N;$[aQ oXNth\lWQS{LWN.3 q}W}d3ayLi?-d@'<ܢՑu:th3KzлИ"Jni7ϯ)xfeK }oPiz0d$4S?c,Ȍ-k'o^#L|zDxSLgBКczn~tV/^u5*N@kݲ߱`~ѡt~%y&i䐩okRþ=҉rF4& 6qvW׺W~:U`+kIڮp"WB+]9dH:lVw;0g>NY+e[oCBR%L yVBvL+pg7_[3 t=t8N/tE?SE_m0? ɷD3o*Kq8ñ)%7R!4:Ty'6g$yA]6v6lGFp]-N┕vi@=;Dc~RՍ9h#ƬY}ecgQ_#T!Q8= N^FB9w\Zm~j֞ҏWILU쌏0h/VH[{W͠Kq_VXJC ̶KhbRYNҘ6t6piEf(Q\J5 :&x5XM!0lu?s)8?4 Kx~l4 DiF*okN%! t>sX[FJ2ԫ`.|h'j$6fvRuq&-+䨰rnjRXsv:[ Zf&5z23=1hMLBEb?dk I^ ``BTFEƢƂ$3צ@j}ro3N%}erewׅ/ $dPbw:} )ΧO;7wR*͑_6刿c[|?ӝ,gw䯷]>1XW1}l :zA]MuDzõF!uKF 2mGq:~HJf!bGW|l+1/9EhӉŅ7dI?KpFʍ5ӧX]8R6%T^NEdeNRy"m'eA*&b̯g6P +e✖Lt0}0w}\b4Uu9:Y?# ΞuZ}s;fmq.ZruД}1X &?$GwVX+Nͷ#{')[EӜ^N;Myf6 H[nSǁbOڍj\%Dx/K&L`s b16v}Jke>l^C+#HF\D}dtXdMWc[ l#bH  SǮ~}V^ʘ6h<۵/JO4b{4P/VTF+Ɇ񔅮ol)| ,jS/J'f m)f""IꤡSBd ƒ0ݶkpi#1*=VH:ד8eKGtD=fcw-c\-s:ysw}~>;83($/-(1v44.pfFm{G%2cF}V_%^`?v~ aFʓH-8pl)jƸy(#ۮe+ʚ||Bc,yƯ:xq1:SU,bH<3eft,-ciPi'Ѽ6 0Î1.+>I]ξQfbvKw>GQ6luddY dvZig%bZ]6{pFNgohj"av<()JNs`،<鐕"u;W'Ur~IOŶӶA#Y6Mj0NryZpZ}NĢZǓ%Xaqsسf1[ &B*sJwNk0 \vJ-`\uHPN^=hEp+7vCw_ybɋ}6If~#Qi*5nK/H\2 wn'^ˏ5ii4E;iQNW8ĨB_$+ xA~q)Hcz'(r"TɡbYZeBv@ؽ@]Ru$;i'BufWc {OZExsX 7 @?5>%Qpϋ0jZ +>ǝ~މb#U+\RD ƍ0u٥ 5;ftIṆU;UZ>Gx:Ll ;^z6ْgoi:w}SISz|}R= 6َg4: 9ܓ};l0#+<ڹR* 7'#R)L1dԟWZdG ZӔԇM5H\"B2ީ'{.B5Jg}I~ ̖6Lyka6RV`264c6P-0)!ziē ^AL/M=X"j3]%n)~kOз&tx1~D(ǟqSԩDǜ MNaTavP;%U[47ψgvcǼòМ8b.ͶZSX>Y^5!GGgiHi)j?:ֽB[ 3s3^?܂b&+9H7)ZB\ o7n1SHBU,LnKo#+i?iW]}4iٽՍR2Q+Z]lG)sg1|o'tZŮI( Oû Ho[X=pT TdI*ȩ@ŇHp:)>w1OK[hÞD mҎkŔxpJkc0Mk0Ǵ#C麭Qa0; p=H)1qJY$QnM٠JuD \žk|u8]] uan੗&oJvB99mS+܋>I~$[WxN7nvZ5RTCoFh)׏ToB'S!Zm-پaZptRe.0|;|tR>tۻХn04s2Fql-[NxZ Q_|zW O.7`C Ѫ1jcB}e7[>Vv) (D0b@ClL`Q3vV̿tuHRޥ#'YHģ%@uPGSlj:J8׎^=bK Qj3}l.!v8'44)ki o?1mi!~w:E,t )HPμiǼ z.aRҩH8GuT~̆2iUft/:;>_Tw:b˻Ք~}fX1袟U-b-"8ԛ[k;}c[wY1Z0NB7;ڍėX 5:|1R|.nhZӜk>ڵX0HЎ-`2:@|{tui q֭-hBrqQy^+@ 9=q֪xT;I1w̘ / XFXL߉Abo;WHQϙKb[9sjR]8mC\^UTtl"_I֒[ROvA(qFv4Չ`KФ|K1^ZX& fV%RW%i_GG:eu%J^ZQi(=]b[O =δmbvZ_p66M{w{aa:ZY՜]P^Pe6fEUWP=O&DMPb/wɹk,2ֶ# ]*OcS Pg[Q :C86j+g%eFKW\BVC9=V+dX`}<Z Ƨ/9> stream xڍVTS۶(%t$ JWi!BH*H ]:4)R*E* w}8c=Wk5nh"vQX(Xg, E`1/)xo%*8TXBā)Y, eU'(P{xUО+ʿ@~"##-;c0( ź‘aP c+) Bޢh0uý_W@}(1Q/6A;c8x `p7>gMtpg?;_ѿ!P0 E P.@gh+ (_Po4> Ex@ ՕP|u <ޢ_~_IDQXoT8 cuGP?kgW N> 3@I0,-½p+WrOo#?:[# x0@ @' t Pa=~?O<-'4#o)kZ n&ee?'"& !114~,P_UB92ҿ k C\hX6j(闺$P  x:3E `35OI1  @g|0~s_ؿeaI4={DVxW,2DpӘcj4Nڏj3gWM)F'Aƣ+̀on(p*y7iyܤ6,`8)}5bBJHYMX8o f. ?}v x3Ag h"3S1vkf}w7pLpEs6>ű l5B&ȥo oT#sa%S9tLn')x?.6nGWbCrbrpj챤W^QqQS q! #p]GutB%){ OɝR*j#X. ۆטX qw-#r3[oID~C8e^!ѻ5AЄEL@NJ}Nv!bո4]Dz*tAZ ϩ+=. ַՎp*#& #߆C )ͷWJN%{"ܓv&v?;gvU ɶZR);mo07"i*~BGՉ1jJA2szNBqx|E4i1Fy^౻)Ge!Wxx.jq׈ѧ Qwl*νfזr y4#4S5?D; 84ڜqovpS/ _(zX  q_?i+: XbZT+ JE>mڕZY|}~w Bza.T"%;Q,oېs/K Twєo*?ިHa8B2qf/WGz'ݓ vR2m ̄I׋VB`YmhpL \^X} {] '**O,B?S;q + x"֤pNw6wK2嬷.)]xl@M!Ѯæ=+v?)IrNǃs(<1gS.4=[cZ^ud:$Ѱ^<>*Xh*2V<,'uF2wir?lk|p>+ عî ˶MrN,x}O'[>IuIa6 S9m(< W`f3]_g1sǮLe!̸rlm6'O<p3Y0·Ep`D[0KN'3f">WxҢx=dQ`h3ú.-&zlڔq9U8AbpYj1H} &U~F?Fqm9q[ꢍAK pNjѾ v+9ڰk-:+]S|mD[k\[67w$}BWr iU qFXnD[g"Y2&AùY!rnM<ÑA'DyG`V3'鵺,}w-svD-/߶c&B _1;ԶL^8 ܏[0 {`8:AyOԳꍧ%K=l<[ʗyىcPEN^,(-8kޅv«6{Ǻ4y9qjl,ONWN,FPRoͣI\`݀4ۑbY?5CO2'AAZNֲU'smʠZ)f^=ɥ`\!~H{)CTҞR)=_=ྤrmpXAꥒ^Ul\9sVHGNyUҹB*+ңRuzV˃)"yw«#*>mFp*ɵ+)l2t ԝU 3Ln!,ID| 紟3\CB6n:YEYȢݐ(y!l;(X4Qsu@u:hZf]甂T !nG ڭ iyH>ƨʚ`hAЉKKҍフsϑdλdf4!gy?ݡ;╙i{ZEEtЕ}x'u?qO-i9 d%YrUs;.r`Q ō'c؏>ΠBE*"҂{12'5?W@P7sN٭ďD]B(O=>}{krOQTĭ/ҍWUO*p؟mGewlº+O8S4$ 0fFfxweZp2>l}%--z_qDjdUaAȎ[Ys/Z Wpz31޿J\;h,B>#Axj$|WQݞlB+ͮ&J5bs$d 4\^s4_ }%9g{s( b*+Ϧo/UlPC@Ж[ףS`5.( @et8v>Z|2dܧ9N03DfOBZ}ML]MP^{Ȋ/([EA\\]I';Y2wB6WDDGuU6R/%&1 p ?- .E\\ z4[麌ezYjT,Kh=5TX`= Z Ɲt(!4 Ki_HtHT#yS<=4`R5zO(6>znL.@q>qo?5Cł]vӌihޠ$`e>~GdoR1YﬕCUaT}B/3,Q޳>?LS}c#S⋾ᒁo;Mn6{=zdH.ɐM8ZHecQ7x{* sޣ k)QS<m9G\[ 3L0ğ}gZ/TL#WE,q.z:&DG{:E9b #UsoH8r&͵uOglmu,Oߊo1p=@m 2k,f~ ,Rq<7׀|ÄaFzBgO/nwF1P}pR afqǶ]@nMiOk 2Xahl$taij7e5QAUw̦Y) %P`NzZgC^e:T%`O dZ]K/((:^!I-_;>! ιd3ZYM;~_+ܨ)$~y-2H'YZ˅QQFyLt;FUvR^bǹ~2> RHIZߎkz~Y JA$fDެ&1o8q?#Gkhrᙝ?,Y*e:Hw>F%j1@>/\'vm$7u#/$.KL 7Gwx=HѦ i\~Sr&L{3(ktZ ܸ&[lܒ#UZ~$;512}wፏH;C%n gˎ*#e~pw#fBU=gJY~;$ў`ʿf\ րME2wwM`_$'˷ tN_ܥXwUfU)sɿrbWV,mTw/K%2xV5o4HL, !Ċ2K޸eTtO?kj ZX$(SGeˌpQr5b1sq]NV5'57/9|is= v{ ]yq1?* b @&fѦjT^=H*VuǝzF MKZ/n68RVL-)?ĤY6k$lFzjG[EA )?v^41mR6iqIyFW`YD%e@oA>+-TȀ]w#nˎ—;#q{yj1y .N\=̥0K+tSޘ& Ix.3~Z&{D ԹWڒpCJ͊w9G/uFgB_#Cd#==qRťD<*v#l('{^8%j r INaq^2O;^rp(em''%y?rlw@ya"ǒ -=)i8](6 X 9jan~1JQ޸m2"9TxupX͘S@(;ߐYDHT,HƯ5_n>8?zEƒ8<+#GmKJiY9M"(dc94$F`} ajg̻>X`& 핝q}a>C~I~>][Y\VY<ᤚ* 3АGpM~d(_h d> stream xڍPZ.wܥ;-ݡ;(NŊKss;IYkgBO.edsrtgrp U\\<\\h:`wo) (/+*1w:9< / psq 0@lP(99襝}\6,s0Y2BBl@`KsG-v}+0'83 n \=AV@ƁFб-vv2wupڊ*ug*i O;lnilvX! ;귡9 oi[@ "nC:7KWBaMuvrp9'vYB׵;:y9};ZY.ÙSR*B# mi;3/_b(?g'g5PAs3]=@~V7BV`Kw':T Co 01t!>\N}-ٗʬ˗N?v~;7%;9\|Bv{sL,3c9A'`3F\|\/7ݿ_@2V`?zzCg_ uUY=VR64&Yi-m庿 vi8?(v AhA/4Rvq]]}РW E|? t @M0vrE}Nߢ 7S?HHi 8-x~v͞_BqݺH<\|m (}/545:B@8u^h1uW@(RsSow>t8@c95J_pz B|\_d u^nd8d)nu Ež3!6C*oѵ 9>/tJ*}㋕LKT~?ڛ:R5;Lw:ѾMM!4HJή#b۫D_!Qw5 4X<9[ϯP=A7(b"ɝ{jpJ)-(`j[ 1%4 %wecsi@>֍ 0 1'Y%x"YgB`P&F/s::A[]x zC?0&OH`{e3i}IgscfUXHbO\!&j^-SD| E /Sz_g L]miE*ͭu`m3L"@\ϳ-Bi n@k#x%Iz-Z8y3J9/@1 bKBFs}_V39g,NIzV(cn D Fu2EG~EsXGHx'2L]n46Оߣtm` P(ٷjmƶ.'r~8cfTq_]R~ n#W.Oce׍vh> gD9%)mzbUk,HѹG\a9Rյg+.A j܁ 6l JbCBKRoz|D0&#FݢvG2?m>:{kB"|edښ;`U m.n7ݗfve#tmHZU`=ݎs/ EZ8Lg-G'9 żܱٓV/hK8| I9P&GQLˆ6CD+c`w2kt?|^jq {0sO );a!V6v vWI7p ,smeO3>:w} mob~>s3.%jiV=@;^[k2ڐ:wvKK{g= .wzu2<=#RC=ςxM#pM)H #*<\+߻y]wyП6awn$GJGZwgѳ/,6iwmjM`K^~mvm~ 8-Nb» NHG\b/SX\qDL5 KL }POT}TMU5c8tzzi_hcJr2,3 P"aɊ>Bd,nYϠ8w"󏢇:޲@8x BWrziWҲJwhvr$G禢[>S-d}@aYʲ#n$dW=#v`Ї&T\A8eF;b^mPkHk$AHːfC>WSO;j \aOQWz?{KUؔ>lЭ#䮼_a%tWwHpvk{MžxX^ir^ 3:-yr9ӔH.~@໬S_@pU޼ ,s ΆgaԺ+ q5 Qc'>! ^|#,k AagBZQ yx56)#y16j> la,"LUT/7JIo@X.8zT&l"+W|GV((N~HZP T8R1aE m'&;W+ cf;kGQgې;"FI+W‡l~эbJزa܆d:dV:) vi@LiGKDIt OjⳎFyY Ug^O1]XĘZ՗>4|e|+VyIG'`51u ʹvh[3t-*a:L`~3L0^CRjNhAŚ^hsMoFwХ)Պ_Q.oo,yۀu4ܺ+2j]>hoSQF'v 4acƆ/-9: FΛ7U|-٦$8RjDy%.|A[ţy̴M'T]3z: t5b{_ Mp14-rחNDXꉾ]a/.rZ^7gH^%,8&T6jqiyqe.PP'Uo>?D}̋&`dic'pPIER-sVcY=y5}Du #Bo#UkJyEsr$)Ԑ<:i{x(Nm&^TN[jQ_ɈatX܄H 1o1ZAd1ıKo 0;gg-_Q]iW"T&xb"&IyE*xHU,䛾OFWX(X*Njd f/j ]JG/3~5DOOf[ ?;b\tP\>gRc*t_mvÄY.C\:6"=n]7? 52Kϵ{"JjsTENs p(Uj;,#@;ьr.[+=lm05R58~ѩ:qoH++L- DS6PYRXj5)O?W ;d qDO4r?SX}BzY^Ũ\{Y_ _o>ESWI-(*1&KAlE~:jQQYYqzVQK[T]`M{_blaDS6tLĭt\$P#`(&g;yK,Itj F(hZ -a^r/;?t᧥|1/@ Yl_aHl U}=O`d;b2}Ӫ]Ua/d»?Ijdvbx9~Q y)CYyé4(( U3와DR3`VQ}oj=ΞKJ|8yz*cފ~HIE wW쭔EOp w ˨aG_U2&p%F1T8jJk͗t0ƈyMb|F_Gþ,y&Y)GvM9VYC%zɪ%H-[(u7+ oQA Jsm7SvUCÛ \]v CzCC\ _+eօ h_2P ^0sT gM#l_޾먍p<& x)!2~BCEtf!D' ;r)2>aQBO4Vfy{^O2&MG.Avch. ;3JC[ƕ+T4. NC؁sqZ-7}Hb-V76 (*s%*|5 0=c} Oosb';n%|!DeckGeձu*bALHOzNZ|>ٞEmO'}>Y|ے_ OP\:u|Ѹ7PI$ǛE⋞n'O.~V)-$}tlղ5e+|Ќn?~8ٓ!^i;xź"# R7&ͮ"-; mwX9z$P>؛j<'Ⱦ0O#ƃ9̻lژO~,!zGRJbb\ '~զէQYӅdNjVȋ YѰ ^yE9!e#&Tt%wH<\7luEݾS 0ψ|;Z:h!_S)^:nǮ09ND9.MvY)˨YGQos v2^6 ׍<]o~-_]&TY O{;)p Rc^sj|EA/fcEFX2?ɦ4ţɤ93]Up4wNa)A}l0$#V캱d>&' JO{yQC;h;`kwWnPgq˕J|ױټG_q]Kd=6yXZҰc0u# 'h8caXf(a@y` qq@+ہS]g]Z*Vfv(qE9)"͵M-1a4{:o_45B@Mxn;s|^G=)iI0T醔뻗bqjg|'# QBfNO%h?'um0C=@$N5PmݘT/7'>aun)D>=1AmYj0fBlq2Z؈mUWTKJ?5gΐŪ^5P\v :_+ªDC0+'D_8R+`J 0n*T#qZ5|FhQA.mES[tP{|1@ތޮ㢝X0x8QFDQaY4+ARVR&Ssw\I~ư/jFŌU, 7}Q&5xqɨ) 8AV:;4[+Tm%:OtÖ`' fU?u㲓>MH KW_Z}am`$@?~J+mՄ|Xb~GSOVރԲ- B84o1W~9_p.=4`bJ.K;m[.F3SGT] J{j\z$Bi?51ycO4^qUS+DZm @mRݛJӛ΃8).쉭w=5޳'c r \rn )0 QMWXgWD$%<V5\g$&ӧɄN"[?!j =G±PEfII5Tl( #}1yXo7l+4NG+\(_bٷuKLpjl0:M)MuI/g=UARJ:*Kj\a< hf~GR} ۬ 6kLDwC$'~HۑQ= G;Vv}%K9w5 >y^L-0Yr>4{nɷ Nm{ uhT΁EtbLFȬN4*~9ueO=*j/RcVTDm+#qyzm<$WA=عw{1V1 3>]#6ph5A@ JieLlS97[8~2@n]BΡ*[ ^rt[՛'TQo۵4f9>zm\:C~M6o6K>Ekd>2 W8yy+qW^LPJ[K%/g$wi3/9ae;Y'uw&uBԻQI|sϝ3j/,6:cuN>v4$XU˴@RlE{9[(e|[ wT#ҹ+Lo*r~ŪRh)vԘR48\6AT!523FbȦ !ZnT2'fd/|(:"1lYuNKラG5)P5(_CHʢ3@Jg!M_6UNwDjE,ܾћ tZ,CFZ  MHp#1 /R^HfdW9X}Y\Ѣ>^VˤCۃՇ(tSgj;! qq" ,"{Քh w0"c(2Qz(|1rP? x+.2BmNB񾹤2 NYMH2!2'eY Τx;cl+R!7EgBH״NbA*vdx԰[89;M%&yOH~B|{r};Nn3oa]Xyǜb'aCSj0=}9eZ0u;>2brT6ى1r8b!L?5>񨴳l?~-2SX G4:5CH?6b-ԃmG.p3t,]>E|,42 龊ridB:-XWMRINq^e'NL@5ۚwN PWQ*uU.J_~ Oz,E6sQahlDO#ǒ>S *Wr,xc){w ,,ݖd2a0i $e0:%fND3T1O :ئa ͂KCbL {.]0j)ޞ6`<W`hrFW(e9Y\Q1QV2>6UJ7U3^l3HZV&)v(؝ѐr盝-'[!;`֐7"a>i/;gД(v맛z{Gg,tg}^l/KȉL,OL*J[ЛKo]L!ӯXDfh>Gݹ0G(?Z`4w>*S_*d`ÓUJtU# /ImmT[j>TG dOPU|Sdsұ}pvĽ+Wk c[ `-"6qAS.[*q-89]lje e5M7th$^4ݸ6"ZnL:Ֆ hzQ,M*p]7 &r"l1(shgviDY%J/&wQ};n=9H#]}ha&I<uqksJ/f3QMqPw|dv(_ݛ̼~>!,zcZ}98|;n?ݵNvU7KCb|ɳ,~7|JšdP2s endstream endobj 121 0 obj << /Length1 1488 /Length2 8492 /Length3 0 /Length 9488 /Filter /FlateDecode >> stream xڍP\.&w% 2;%,Kp NMx${Ͻ_^WZ_ڗꚬP3,!Rpppqppj]@ꀜP?RN ˳MLTBvNn''C_D@3* leο> NAA~? {]A+Ps0R0X8٠NV,w5@ rrY~ Pڃn e vˡ tq:;9 9Wh*(@Xo  47;!`l*xD39͞ Jd%ݟřlGiYb!A\Q' v?'߇k C, mX:kC 9&ج@.^n.0f菓_o /Bv.N _:rr,.3f_Cgq8~?2zVb#fQQSVe;%%oV+77',@U#Rb U.`x0;*Y dYB4;U[?_h[WP>OWdv_ y$ VvH,dv1ڿ Co+'p~yv{E9qNN@OTg%q9Gv69ܝ/Hߦ?nTv?  `w c< ~Y  sgݝx=Kũ9:+pDp õ2O7m>&ӻmKS(Z{>?}tl[`;i]0?ݺy.٫SB{,a֎zP2Go=OLJ k,nb<3I4w&WݼG-..b kܱi:oɃEE⨍׋9l0cT>/ *+q9}mgEG4u`s8\$ftw\g7rl齷ZZ[ݤ׈6 6j0G_|$=.B2Z^Y= ﮘȅXxikxޢT f4&Y^as<- M@ݝ.iX <G8D…rZW+Um'*a7&8_7G dRu#T#yٗwD   a dƋ G'zxo~`D}EJ"vl W5̢%|HW*7z?'9uyoW f 'N0_P_bUAM3M8f-.J~W#[pgӯw-ZAwa%NRsV~&,M{49|<ϙ ~{oJFn6gCᑔ储,1f_L_(hQ-L#h!!c|Oʎ,* ]n,R{J^L 71X)pov:|Tf1T{uJ&3Ef2pi8"Nނ:Yc 싞bG`d㬗QpLV7\]otY.U$`\SՕķ-fAcA#:]=0_r$N cZ``Il}:l L/e8Ʀ0 ɕHhJXJ۳8Y2,B*r\|os7X Wd zor/c_TKL++3Tk+Z͘NE05S)o8,<ޖhtPXEcimԃPNxEMo)ڏ4kRJ L-{?*iwN,e?QGB5;!f Vb:+ ~gsۖy0 ߍrSbmKo6jȒ" Xs п 1蓻@Dvtl]PIz8`cC~{מځ5 wmD^ W9aH9 rV١04`^d,0<,sv=.IĽA }}4@~:CTJ&UڑE]>4 VDV{Uk @Q@"Ŕ9uz(EU%K_~@q}m8dF6rk_Ly[kEU Qb7\>rD:q_8 ,zX@HM#wVoʹ?q=g1CNɋ)@À&%B͘"87:x[#A'ZG)/hPwQLyœ\Ֆk<)ıc=p!vJfO G.s6!IK93G6w]ᇐt(K QR7 +GXC d3Ę*C@9):^~=>1?\CiVŚJ/]\Ig,MYi'SaFiFOWu6&T$磹/r/½ & Mq`#eL,n_z iY+{Cb+;/т?eŨq zЖG&&JC';C("uhh„̆vd-2$'(5` Y̊ԇ1WiVۈ ^īx-jK(j1M/>c4R.e>>s1kF1vI eЏėDg.M*"z^4|4M"6m~4< ؚz~.Dhs_FR͑quF4ȠW# HmFDÍ-[Y2~INN =. M欯nGG l!soT{PM q$iI&tyEٻI(F2}l 2ÄF6SOmXC^]{ƉD=LVp霺10NpcIb[LDq^`pjiZ ^|1e,쩼#^B ޙcvk4%Peqice#hA{"-j .J˲q¸S6):h|֪E@v gsd8T eק4~_ ;HL{ R^2Jyލ-4G\s丰;Ff^CB@]tQbfԟpż).+ `J!xSޏXo_4|'Cj 8 ,j<:(*vu0M+ M[;F/HW+rh(UDƐ(<mU" F[ϯaMLi6GRm ~*zID*3J/L+5GOr 4퓗~G?a5#B,a& qZ^t KdロW -$m0F#2AHeТ՘9騭~}gXnaŞі_:m`VKJ; W Jw,7icT`]-8cp  ZLo9)i$wT9RHR>kHkX^N"p>,&΋Ytv'Uf-5_វ+V(~eMGgTV+eTj&Ԇ5^]u"wݎR4t `c^בݥnJ/50 "@߻;_rײNC@ZF%MVLYdY:+6avIbX(=1Zɋ(Rgz3ZkDoh) f8 νդcȤӾ5<ߛzW˫ (ڶņmQGb3fs>KNSL9}n+㣓J\wBwý PtIdJθ]! Q~h"ms e?erƆ/NKWA>c6Vȇ]ǭlGH" u4- UP"!D0l"Ԑ4%8bt6C}P1 L#%CyI\~$Mq$>mVa'Xy0A{FˠL%ou|h$=8JwWξ\Q$o$I\6cܮQpZf>DI$|CrIرL&:K)[a `iXTL=}厊FV/S2^ HA)' ]P59 D)>_@eN0D- % wM(/1;6EZܢ=8EK)9M|T3,5?vtИOffGS 9pt8kG}3ݑ^ut rkZ:8*3IkСzP0m öTٕ*c)9sBSjuόÜKbN^uV_I a8,^e* ~KWyU 췊d&\ZI* UwM7So t73R5A𿒗X¿#&#:x<Β1mvNFI >-wnT?}/wEa`7*ހ1:]c6}Q#{}}SEMJ9C<ldL}*7O3:UHRfPL=ȴv0}ފ;{>'^ÑB 笂 kV~ye5mhahrbJ^U+^UK%YF- 5b:yo+XA(<cZo~S;18=-6s;@F(zK3z@Sc EVKЇbπ4'wMOV?#Vo+ ۔sZr&4 qKI aQK &y߫E|A竼q.#.Y1df`bvTJ"lc L 10{q󔡩51'u,@O#i4S :'#➅9тk?*BɄ&]& #cCy`,QkBW+Үfp-D /s_X3b9ZB%"6 #XR+z 퀸ʗpkB§a8+2~=@g%1G`3I~NG'HxOlurn.GlPښJ԰%dGS _iZ_j=ڢ8"wᦱ1ko3WfK-/&{GAUcLXx)⚗rsA1*6Ȣ'7:؏`“ N F Y&:^p ~3(Մn,E!F,;\'$ZӏMOѮN9]'c:b$}Z{EW,cAZ]d-R4ꔰiۄ~tuc^lP:/گRK*G=7xt,qָ0?WDFia 5ی:xt'޿zTjP{oK7͢=BdDC STvQg Ş4@d"՛m1uFb94*StLOELpCBU6MQ#OXW1nD鰖(ur_jR5&So!Vo~BڠQRTS iCNq{7̬0WtxAij XzNH+֙|D A86O+!6mkPD1:H æ#b VQYp(.',^Bg7iMjTNa #2R_Ċ3f`LNڀon&$Ia[T3|1>}ꙍ 柺mAxfիG^ݢ; ɓ)2Jx}]X.l>|vٱ{͚=TaQ]Ԏ:GXa hH#H#]O6evE1K= }!&*oS U9~=c{B6[-^5;m6sUAR.EE)@[zz )6&?uRD\paN4 ̦GAE81]1ZO&2lpgяl67gYmGX&;qP,u֍C$; |"oUȬ[|]lPn*uf$د?(0?c ",q(ݤʳ4>Uȥ/"}"+,$r rU`ҸQe=}5Ft̹%Ϯ8jN̥>W3i沺E' )K)pŭiM![(Ӓo B^m _ɫ {؅dś }EGڹ4>PLH7ߎ 3kX|`Lҗi$qKK?af~Zv.qT FLs\Ovm$;Y%W79%<gLI)Á91Y)e.v #)[X!CVU /@gI:LFHq* Jc |)7 (ʹvƘхƶJ:vXQ(K~XG5J-:tC9员ْWZg=PQayI#PCS<}Y +;<Kj=ezTNMAȶ7nkI5ctn~y2d(qng\G-gWT(y*Y|vgo endstream endobj 128 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.16)/Keywords() /CreationDate (D:20180124134053+02'00') /ModDate (D:20180124134053+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) kpathsea version 6.2.1) >> endobj 2 0 obj << /Type /ObjStm /N 92 /First 743 /Length 2978 /Filter /FlateDecode >> stream xZSbiZ[{%)hBtk,WSڿ$cRR;v՞X$XSIɄQL/LYɤafƌtLJ´L3듁a2o- ! _0)U x ށ%*aZ7PgZxD90q BL[H :L{ z)DCZLBpi] ;(.b7\ T㙓ކ /Rhpq@` ,"Q(Q %^1ɼ^0FP ?\ {r:I ` !$ +FbI6|㧌U ?a|?.ٗ__T=׏j!#VyTjDtB覚Q5ETf  уDҌUZ({d""V0 O3qw!X/6{eS~D;|BF-¨?0 mO *O(_n)S7L,JݪT^<H/o#E$"l#E8]W 8&2k(a^-;d2h%6cYȮQIx){7%#vկ Ul~SbS,u/QE||.ډϏI:,jfaO$f>U73z\ y9vnp%U8t=)n"5ntwl+["jɦ Y$,WKU<"eFYL1!dMŜȚnJ8vDc;#D`xJzRT5)]q>ܚ\xZeohp wAW<ǘ~>l_eO\yx+t9pHByc#^b-J{TU8] o 귆Dk C?5$Xk֠/C?1ѺN#A9:nT6u1jbcn|,B;A-Aߞh Sw}w>?oxe:1$~\>b\LpMg< OqYC:X֚𲫖zZov=j5j:Fj2kԢRWCT rWA:w5OQtx]tM"?>B/{V'{;_Vʮ? gjjV?);:><އ֖UOQ_w0mYOv8)Ӌj HЯ\SV".OozM{xC_kQRsCs={`>w %w[ӹZt%w?{@Ӈs#[oyxӓ3gTJyױobFs0C:iޮ6͑Hs8=NJpJjR]D3603Dal Sm^XcA5A_c.FG~=΂vm#1D Z i| wRzP;eb }Pn xT2,;W|B ] /Length 341 /Filter /FlateDecode >> stream x%ҷNQL49m O@ @GG$DIaW@RQPd?ljE7x\H ) i*1Qɿrl$KE,Cl*lA&l6x?$AJҧ\ UP *ckT@   P%"B1@)AJǙ/臥J֞Wj'BCnкТr0aV.׬lvpۢ\q{oo"UY9= }Я`U>1zrF`&a\ں000L[P]8zmiIRTҲ؁]؃}8Pu^J6 endstream endobj startxref 135837 %%EOF vegan/inst/doc/FAQ-vegan.R0000644000176200001440000000030413232070305014714 0ustar liggesusers## ----eval=FALSE---------------------------------------------------------- # sol <- cca(varespec) # ef <- envfit(sol ~ ., varechem) # plot(sol) # ordiArrowMul(scores(ef, display="vectors")) vegan/inst/doc/intro-vegan.Rnw0000644000176200001440000003357713231354436016040 0ustar liggesusers% -*- mode: noweb; noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Introduction to ordination in vegan} \documentclass[a4paper,10pt]{article} \usepackage{vegan} % vegan settings \title{Vegan: an introduction to ordination} \author{Jari Oksanen} \date{\footnotesize{ processed with vegan \Sexpr{packageDescription("vegan", field="Version")} in \Sexpr{R.version.string} on \today}} %% need no \usepackage{Sweave} \begin{document} \SweaveOpts{strip.white=true} <>= par(mfrow=c(1,1)) options(width=72) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "> ", "continue" = " ") @ \maketitle \begin{abstract} The document describes typical, simple work pathways of vegetation ordination. Unconstrained ordination uses as examples detrended correspondence analysis and non-metric multidimensional scaling, and shows how to interpret their results by fitting environmental vectors and factors or smooth environmental surfaces to the graph. The basic plotting command, and more advanced plotting commands for congested plots are also discussed, as well as adding items such as ellipses, convex hulls, and other items for classes. The constrained ordination uses constrained (canonical) correspondence analysis as an example. It is first shown how a model is defined, then the document discusses model building and signficance tests of the whole analysis, single constraints and axes. \end{abstract} \tableofcontents \vspace{3ex} \noindent \pkg{Vegan} is a package for community ecologists. This documents explains how the commonly used ordination methods can be performed in \pkg{vegan}. The document only is a very basic introduction. Another document (\emph{vegan tutorial}) (\url{http://cc.oulu.fi/~jarioksa/opetus/method/vegantutor.pdf}) gives a longer and more detailed introduction to ordination. The current document only describes a small part of all \pkg{vegan} functions. For most functions, the canonical references are the \pkg{vegan} help pages, and some of the most important additional functions are listed at this document. \section{Ordination} The \pkg{vegan} package contains all common ordination methods: Principal component analysis (function \code{rda}, or \code{prcomp} in the base \proglang{R}), correspondence analysis (\code{cca}), detrended correspondence analysis (\code{decorana}) and a wrapper for non-metric multidimensional scaling (\code{metaMDS}). Functions \code{rda} and \code{cca} mainly are designed for constrained ordination, and will be discussed later. In this chapter I describe functions \code{decorana} and \code{metaMDS}. \subsection{Detrended correspondence analysis} Detrended correspondence analysis (\textsc{dca}) is done like this: <<>>= library(vegan) data(dune) ord <- decorana(dune) @ This saves ordination results in \code{ord}: <<>>= ord @ The display of results is very brief: only eigenvalues and used options are listed. Actual ordination results are not shown, but you can see them with command \code{summary(ord)}, or extract the scores with command \code{scores}. The \code{plot} function also automatically knows how to access the scores. \subsection{Non-metric multidimensional scaling} Function \code{metaMDS} is a bit special case. The actual ordination is performed by function \pkg{vegan} function \code{monoMDS} (or alternatively using \code{isoMDS} of the \pkg{MASS} package). Function \code{metaMDS} is a wrapper to perform non-metric multidimensional scaling (\textsc{nmds}) like recommended in community ordination: it uses adequate dissimilarity measures (function \code{vegdist}), then it runs \textsc{nmds} several times with random starting configurations, compares results (function \code{procrustes}), and stops after finding twice a similar minimum stress solution. Finally it scales and rotates the solution, and adds species scores to the configuration as weighted averages (function \code{wascores}): <<>>= ord <- metaMDS(dune) ord @ \section{Ordination graphics} Ordination is nothing but a way of drawing graphs, and it is best to inspect ordinations only graphically (which also implies that they should not be taken too seriously). All ordination results of \pkg{vegan} can be displayed with a \code{plot} command (Fig. \ref{fig:plot}): <>= plot(ord) @ \begin{figure} <>= <> @ \caption{Default ordination plot.} \label{fig:plot} \end{figure} Default \code{plot} command uses either black circles for sites and red pluses for species, or black and red text for sites and species, resp. The choices depend on the number of items in the plot and ordination method. You can override the default choice by setting \code{type = "p"} for points, or \code{type = "t"} for text. For a better control of ordination graphics you can first draw an empty plot (\code{type = "n"}) and then add species and sites separately using \code{points} or \code{text} functions. In this way you can combine points and text, and you can select colours and character sizes freely (Fig. \ref{fig:plot.args}): <>= plot(ord, type = "n") points(ord, display = "sites", cex = 0.8, pch=21, col="red", bg="yellow") text(ord, display = "spec", cex=0.7, col="blue") @ \begin{figure} <>= <> @ \caption{A more colourful ordination plot where sites are points, and species are text.} \label{fig:plot.args} \end{figure} All \pkg{vegan} ordination methods have a specific \code{plot} function. In addition, \pkg{vegan} has an alternative plotting function \code{ordiplot} that also knows many non-\pkg{vegan} ordination methods, such as \code{prcomp}, \code{cmdscale} and \code{isoMDS}. All \pkg{vegan} plot functions return invisibly an \code{ordiplot} object, so that you can use \code{ordiplot} support functions with the results (\code{points}, \code{text}, \code{identify}). Function \code{ordirgl} (requires \pkg{rgl} package) provides dynamic three-dimensional graphics that can be spun around or zoomed into with your mouse. Function \pkg{ordiplot3d} (requires package \code{scatterplot3d}) displays simple three-dimensional scatterplots. \subsection{Cluttered plots} Ordination plots are often congested: there is a large number of sites and species, and it may be impossible to display all clearly. In particular, two or more species may have identical scores and are plotted over each other. \pkg{Vegan} does not have (yet?) automatic tools for clean plotting in these cases, but here some methods you can try: \begin{itemize} \item Zoom into graph setting axis limits \code{xlim} and \code{ylim}. You must typically set both, because \pkg{vegan} will maintain equal aspect ratio of axes. \item Use points and add labell only some points with \code{identify} command. \item Use \code{select} argument in ordination \code{text} and \code{points} functions to only show the specified items. \item Use \code{ordilabel} function that uses opaque background to the text: some text labels will be covered, but the uppermost are readable. \item Use automatic \code{orditorp} function that uses text only if this can be done without overwriting previous labels, but points in other cases. \item Use automatic \code{ordipointlabel} function that uses both points and text labels, and tries to optimize the location of the text to avoid overwriting. \item Use interactive \code{orditkplot} function that draws both points and labels for ordination scores, and allows you to drag labels to better positions. You can export the results of the edited graph to encapsulated \proglang{postscript}, \proglang{pdf}, \proglang{png} or \proglang{jpeg} files, or copy directly to encapsulated \proglang{postscript}, or return the edited positions to \proglang{R} for further processing. \end{itemize} \subsection{Adding items to ordination plots} \pkg{Vegan} has a group of functions for adding information about classification or grouping of points onto ordination diagrams. Function \code{ordihull} adds convex hulls, \code{ordiellipse} adds ellipses enclosing all points in the group (ellipsoid hulls) or ellipses of standard deviation, standard error or confidence areas, and \code{ordispider} combines items to their centroid (Fig. \ref{fig:ordihull}): <<>>= data(dune.env) attach(dune.env) @ <>= plot(ord, disp="sites", type="n") ordihull(ord, Management, col=1:4, lwd=3) ordiellipse(ord, Management, col=1:4, kind = "ehull", lwd=3) ordiellipse(ord, Management, col=1:4, draw="polygon") ordispider(ord, Management, col=1:4, label = TRUE) points(ord, disp="sites", pch=21, col="red", bg="yellow", cex=1.3) @ \begin{figure} <>= <> @ \caption{Convex hull, ellipsoid hull, standard error ellipse and a spider web diagram for Management levels in ordination.} \label{fig:ordihull} \end{figure} In addition, you can overlay a cluster dendrogram from \code{hclust} using \code{ordicluster} or a minimum spanning tree from \code{spantree} with its \code{lines} function. Segmented arrows can be added with \code{ordiarrows}, lines with \code{ordisegments} and regular grids with \code{ordigrid}. \section{Fitting environmental variables} \pkg{Vegan} provides two functions for fitting environmental variables onto ordination: \begin{itemize} \item \code{envfit} fits vectors of continuous variables and centroids of levels of class variables (defined as \code{factor} in \proglang{R}). The arrow shows the direction of the (increasing) gradient, and the length of the arrow is proportional to the correlation between the variable and the ordination. \item \code{ordisurf} (which requires package \pkg{mgcv}) fits smooth surfaces for continuous variables onto ordination using thinplate splines with cross-validatory selection of smoothness. \end{itemize} Function \code{envfit} can be called with a \code{formula} interface, and it optionally can assess the ``significance'' of the variables using permutation tests: <<>>= ord.fit <- envfit(ord ~ A1 + Management, data=dune.env, perm=999) ord.fit @ The result can be drawn directly or added to an ordination diagram (Fig. \ref{fig:envfit}): <>= plot(ord, dis="site") plot(ord.fit) @ Function \code{ordisurf} directly adds a fitted surface onto ordination, but it returns the result of the fitted thinplate spline \code{gam} (Fig. \ref{fig:envfit}): <>= ordisurf(ord, A1, add=TRUE) @ \begin{figure} <>= <> <> @ \caption{Fitted vector and smooth surface for the thickness of A1 horizon (\code{A1}, in cm), and centroids of Management levels.} \label{fig:envfit} \end{figure} \section{Constrained ordination} \pkg{Vegan} has three methods of constrained ordination: constrained or ``canonical'' correspondence analysis (function \code{cca}), redundancy analysis (function \code{rda}) and distance-based redundancy analysis (function \code{capscale}). All these functions can have a conditioning term that is ``partialled out''. I only demonstrate \code{cca}, but all functions accept similar commands and can be used in the same way. The preferred way is to use \code{formula} interface, where the left hand side gives the community data frame and the right hand side lists the constraining variables: <<>>= ord <- cca(dune ~ A1 + Management, data=dune.env) ord @ The results can be plotted with (Fig. \ref{fig:cca}): <>= plot(ord) @ \begin{figure} <>= <> @ \caption{Default plot from constrained correspondence analysis.} \label{fig:cca} \end{figure} There are three groups of items: sites, species and centroids (and biplot arrows) of environmental variables. All these can be added individually to an empty plot, and all previously explained tricks of controlling graphics still apply. It is not recommended to perform constrained ordination with all environmental variables you happen to have: adding the number of constraints means slacker constraint, and you finally end up with solution similar to unconstrained ordination. In that case it is better to use unconstrained ordination with environmental fitting. However, if you really want to do so, it is possible with the following shortcut in \code{formula}: <<>>= cca(dune ~ ., data=dune.env) @ \subsection{Significance tests} \pkg{vegan} provides permutation tests for the significance of constraints. The test mimics standard analysis of variance function (\code{anova}), and the default test analyses all constraints simultaneously: <<>>= anova(ord) @ The function actually used was \code{anova.cca}, but you do not need to give its name in full, because \proglang{R} automatically chooses the correct \code{anova} variant for the result of constrained ordination. It is also possible to analyse terms separately: <<>>= anova(ord, by="term", permutations=199) @ This test is sequential: the terms are analysed in the order they happen to be in the model. You can also analyse significances of marginal effects (``Type III effects''): <<>>= anova(ord, by="mar", permutations=199) @ Moreover, it is possible to analyse significance of each axis: <>= anova(ord, by="axis", permutations=499) @ \subsection{Conditioned or partial ordination} All constrained ordination methods can have terms that are partialled out from the analysis before constraints: <<>>= ord <- cca(dune ~ A1 + Management + Condition(Moisture), data=dune.env) ord @ This partials out the effect of \code{Moisture} before analysing the effects of \code{A1} and \code{Management}. This also influences the significances of the terms: <<>>= anova(ord, by="term", permutations=499) @ If we had a designed experiment, we may wish to restrict the permutations so that the observations only are permuted within levels of \code{Moisture}. Restricted permutation is based on the powerful \pkg{permute} package. Function \code{how()} can be used to define permutation schemes. In the following, we set the levels with \code{plots} argument: <<>>= how <- how(nperm=499, plots = Plots(strata=dune.env$Moisture)) anova(ord, by="term", permutations = how) @ %%%%%%%%%%%%%%%%%%% <>= detach(dune.env) @ \end{document} vegan/inst/doc/intro-vegan.R0000644000176200001440000001400613232070303015442 0ustar liggesusers### R code from vignette source 'intro-vegan.Rnw' ################################################### ### code chunk number 1: intro-vegan.Rnw:18-23 ################################################### par(mfrow=c(1,1)) options(width=72) figset <- function() par(mar=c(4,4,1,1)+.1) options(SweaveHooks = list(fig = figset)) options("prompt" = "> ", "continue" = " ") ################################################### ### code chunk number 2: intro-vegan.Rnw:71-74 ################################################### library(vegan) data(dune) ord <- decorana(dune) ################################################### ### code chunk number 3: intro-vegan.Rnw:77-78 ################################################### ord ################################################### ### code chunk number 4: intro-vegan.Rnw:101-103 ################################################### ord <- metaMDS(dune) ord ################################################### ### code chunk number 5: a ################################################### plot(ord) ################################################### ### code chunk number 6: intro-vegan.Rnw:118-119 ################################################### getOption("SweaveHooks")[["fig"]]() plot(ord) ################################################### ### code chunk number 7: a ################################################### plot(ord, type = "n") points(ord, display = "sites", cex = 0.8, pch=21, col="red", bg="yellow") text(ord, display = "spec", cex=0.7, col="blue") ################################################### ### code chunk number 8: intro-vegan.Rnw:140-141 ################################################### getOption("SweaveHooks")[["fig"]]() plot(ord, type = "n") points(ord, display = "sites", cex = 0.8, pch=21, col="red", bg="yellow") text(ord, display = "spec", cex=0.7, col="blue") ################################################### ### code chunk number 9: intro-vegan.Rnw:206-208 ################################################### data(dune.env) attach(dune.env) ################################################### ### code chunk number 10: a ################################################### plot(ord, disp="sites", type="n") ordihull(ord, Management, col=1:4, lwd=3) ordiellipse(ord, Management, col=1:4, kind = "ehull", lwd=3) ordiellipse(ord, Management, col=1:4, draw="polygon") ordispider(ord, Management, col=1:4, label = TRUE) points(ord, disp="sites", pch=21, col="red", bg="yellow", cex=1.3) ################################################### ### code chunk number 11: intro-vegan.Rnw:219-220 ################################################### getOption("SweaveHooks")[["fig"]]() plot(ord, disp="sites", type="n") ordihull(ord, Management, col=1:4, lwd=3) ordiellipse(ord, Management, col=1:4, kind = "ehull", lwd=3) ordiellipse(ord, Management, col=1:4, draw="polygon") ordispider(ord, Management, col=1:4, label = TRUE) points(ord, disp="sites", pch=21, col="red", bg="yellow", cex=1.3) ################################################### ### code chunk number 12: intro-vegan.Rnw:250-252 ################################################### ord.fit <- envfit(ord ~ A1 + Management, data=dune.env, perm=999) ord.fit ################################################### ### code chunk number 13: a ################################################### plot(ord, dis="site") plot(ord.fit) ################################################### ### code chunk number 14: b ################################################### ordisurf(ord, A1, add=TRUE) ################################################### ### code chunk number 15: intro-vegan.Rnw:268-270 ################################################### getOption("SweaveHooks")[["fig"]]() plot(ord, dis="site") plot(ord.fit) ordisurf(ord, A1, add=TRUE) ################################################### ### code chunk number 16: intro-vegan.Rnw:290-292 ################################################### ord <- cca(dune ~ A1 + Management, data=dune.env) ord ################################################### ### code chunk number 17: a ################################################### plot(ord) ################################################### ### code chunk number 18: intro-vegan.Rnw:299-300 ################################################### getOption("SweaveHooks")[["fig"]]() plot(ord) ################################################### ### code chunk number 19: intro-vegan.Rnw:317-318 ################################################### cca(dune ~ ., data=dune.env) ################################################### ### code chunk number 20: intro-vegan.Rnw:327-328 ################################################### anova(ord) ################################################### ### code chunk number 21: intro-vegan.Rnw:336-337 ################################################### anova(ord, by="term", permutations=199) ################################################### ### code chunk number 22: intro-vegan.Rnw:342-343 ################################################### anova(ord, by="mar", permutations=199) ################################################### ### code chunk number 23: a ################################################### anova(ord, by="axis", permutations=499) ################################################### ### code chunk number 24: intro-vegan.Rnw:355-357 ################################################### ord <- cca(dune ~ A1 + Management + Condition(Moisture), data=dune.env) ord ################################################### ### code chunk number 25: intro-vegan.Rnw:362-363 ################################################### anova(ord, by="term", permutations=499) ################################################### ### code chunk number 26: intro-vegan.Rnw:371-373 ################################################### how <- how(nperm=499, plots = Plots(strata=dune.env$Moisture)) anova(ord, by="term", permutations = how) ################################################### ### code chunk number 27: intro-vegan.Rnw:377-378 ################################################### detach(dune.env) vegan/inst/doc/decision-vegan.pdf0000644000176200001440000123016313232070270016464 0ustar liggesusers%PDF-1.5 % 82 0 obj << /Length 3356 /Filter /FlateDecode >> stream xڭZKsWHU8R޸[Ėl,"HʯOf0AIV|̳_W?Be4%3]YNY|B\Fko hּR [ώnR ]1åq)JK%V 7ֵ~?MƨYL&#qU똜7 $#2MP;ZưGN:UBY 6%g0'[LHc1j$16\hUrvd٘e ĉ1 FX[L6jf7" HVQD0p.sNVeݮ' B,w*?AӪSVvJZZK:)%@+6^3҇^Hw? juϖdG`Jf-S@;?Ft3A,IDV7hGaq'>tbtqw'p[w/` qQ?FgpHI[eJkӼf$?=\}KRń-JR?, ~9pqKYC`kÏ4ʅbFPv R@fgAW3MR ]#:im'EkGA'O)0<<#,1ЉM'~ 0"5H$FcNe/ +-HU ĒȝTyAUu,Qq#93SZ)"&^ ,6K Sy.~E+2Ne!ީN_ ># +?RVڼ2H׳MpJkr:0lIjBIϡĉ`Sfl"o1vg ЙO\m,:BJTBn%6\>hD޼@/>lM.d-8P)4,"z'L [ `#y~4bTNzc7DD( <it9xs&o%W%@ L-^|sq/(^:-u2PS9hlu0Msc7O/’EQ A>\*ݚ Re銃]*3e.2N~iAxw+P$ȧ}cn &6:ŔO0h0p;ȁI!ݫ)B=O\-` ^=]&qbK~LoHm6\1aQ=F] AVՊl=͗;HN?]TK/lb!-nRCAY R1А$8pnDxeԵҀ· 3U(s_ѵ4}4؞誄.W^= <5V{Wɮ澂3K&PY>;Թ_Cgg0fQ͍jU(EˍY: yEOĢPoy ѱ5#@``S~)ZśjyB9{!@/(bei9Ydpؽm(Ƣ.?EbUzе*tի' endstream endobj 105 0 obj << /Length 4167 /Filter /FlateDecode >> stream xڥ[Y~xl"%0Fpbo84ݚǸս_:IJMzzDRu}Ug_|\Y[Umʌm^k8^/ gG~>BUw6_ ^p0<2'( 8o(x:H4ɜW9Siqx=K4&k1o;lRFVWuֹ9U<륳P+ŕ 5Efr5BxsEw׿^y9LEiEIjq%$uш7R ˊf,KwR՚,o6{zQMJšH.KSaG,S YO"]FkXIƦW#T! lr7xmdU)!=m 3u^^αdffC\gt5?@o_y ~?'w"7^VHЀD>-*%_y>TJٲ ifUU wkVu3ff5gv5A$VD|d#mH$(}4YE,6)Pэc(#Q* |!\ ۸s [6Q^vu:KM*]ͬ eF, 2 6.dR⌿ ۃ\%-h1:+KM49٣M97pKwy8o+B~Ϩz 不_toH:1:~K` Uua&*$cyMgd.A> n;IjQO,v)'! ˮ`ʛ5X{Ѹ4Ysu;jw~z TDOY2S&XMeAkcbKTD94?X7x^SNGuPTM: 5'PTwsX$OXl3z!ScZ+ڶ(&jd`!A[F_v rboengA&Ĵ=]E%+ 3!_Twk1R߷4na!l*nNf7ѝRc]ʪ^$g{T+q f~HxIeGa:V,;OFʅhցUӝ`/`lsgZ):$eR|+[*1TVb`뚹~B4zCzfD{+^Ϲy0k|~ CKQ0Gy}6m&2a01o2V!&Ź=Z[%D!g82uf J: 0C[xfTa :$,K| "lSA>Ԙ}%oKh̍*&6'i AּR^eUDrcG% jO~ؔ;/+Sc:&*Qj T(WIS[4vMDvR#FЪ.?A߶[PP+l͌6&/2 k1l&JՋÀAO LEmzOm ;{Wr 6p-xS[ɴr1JźQ~ߩ'DB $I̙ D_bge,oU2kB0ch0ǣc=f[[=k_2 1mle%Zw *ZM,6:JŨY`x`?&c4T 2[]u V*l<쟥W>j]fD" !6ɏ&af߳-I>)!^T4k.ϱi5JE鷁 72tuaWɺ^~~ȧ\6{H@sЁRE&WQ`xFl,ytxFGisL2/Er˚\L^$&&c(F+؄~RAbl3DֵG꽛a!À}(CׯQ4~L=q6 &5>}y0OUў~'BJLL$ $M}JJɜgwv`:$j"%C$;mV wyaP 2Z1/Hp-vRŬPk Mm3āʖ :(c@Rg.@&Y}WzOOC6&Z;ɴ@@s ʽY`l1Zx\Rt[VN҄;Q?:ǖ>oJc;nۥ 2}Uabᡝ5X@gO8q#ɢ g 6O$$ҵx=ηS)J')"``-@!Nwgw)x_\°ʢXdEY3L={"@SP1䟪(mmfeE{O@>92;ᴾsk \lسf&V$<vF!4jbLa!ݲHz#N7nHe;lʔ5<4c̙! H-b\sa'-Qёަ]B MqΝZpJ*!^z*xql kËWK"ǦR5| {3C”N$>fO|E||~ΩdC}e::vP`Tf}fQ1if R1a0kOVq4x Y@z\qhS$]>N*xdfa+eCу3Ɗʑ9}d e/h?8},m|[rذF`F􉇕yRh:AA{uQA:e<%q.@VMĭL^>_BC : eT\Luu%[T@@:A-q@_l-Bɇ!PSx3};3+j 1|E |F9mPIpbHm`G4}nH`gcC,0pboKּbi@ƙh)Ű /$lM }%3D[;=כ&V\?2'x.Jx#HoԩnedvT MJ>hf rC=!'ŏQ9iOk8gpf/y|aI} *8BuV? D]DŖ^q endstream endobj 120 0 obj << /Length 3889 /Filter /FlateDecode >> stream xڥZ[~_aI֊H ImH4;EۚX^{$%˳-C\so^|t cҦ(aQEngb&Ire͓א9.I -˕ӛ٤c: WIҖ8_X:{frU*ASthr[%gHGn?Lط=HŞJkNrf@pI$hO/in%%;RyN-L> O.g\Ww 3Ey :ˤǭ{?*!AO'<1tjr^%:@ECȂB渎3H!U݆٥O"rt9 &RX6Q7e׈fT22k:BLxҫUr!}BxHYĶH!'aVb2K';,C 7оTE1&J7띃T0˺2̎Oa0q֋&"Y"ƒaR_.w&-fb@P7>a+ [Vrl gd"c<-r϶?B?~{3C"o*1i:*F]Y"~MhL䟋\p7 51ϵ$HY*mLq`):8 Z7.`Z,W6sy\< 6T52S_)M0ܐ~;sTf:x?.3xF klz ?D;|D Wf{Ɋ< (n8;i2ZJ@ )S[Mi/ņEX&SiaQ1ZLUfF=i`K`r~d T 3-!$ʖW AY5Ŀ Xsi>pT8C2}(d\QH+$/>c#i qXZsÈ`CJCА& G]KNDbhCPU;DUw`"Zl&jWGU-GrY2g1(& Fazeu5^#b2Z"fHͺњ?Υ)oRn@n<7Q;-Aܖۅ'~S!IsR(Gd :Pbw%`x=pL`LrQdWۣ" 肢5Mhc{==@7N6Yybpx$Z,(?ٕS VeU9gFZцrxPe) !|dzV.Y3 gr2\Zm}n.vzGDF\$irPS3(#uC ](( 6׻+h[frub+&{╵E&vy-y 7u%MY tySq/"kʊZDI~RY|׿;iJ\E~ob]L1uz h:1 1(aw^A! AN*(@7Y{jYKds7^_>odD2xP'7 3'7("yA UuHbXmF,cBLdah`X5UywgQ?G'? Ti%zՉzu%(@U`,TThAW5fpgG1`9Z 9YZTP=;wɛē5EGd荪mDo*Im0vA崥[m(^ダX3Sضlxptd.G 0dol7+q @a^Q3+Ңo殿r$? ]띆\bfY1j:`:k †J^-ʀq"D ncɜA~B׍0wMZ!_Œ^!OWجNLZ(Ӧr5r_z>.JFqF8٩v$Y 5J2bvŪ@|+C8d6?+O:pr;Mc28&9xA#աՌ9ޤ)<įc(80=c_N@E䵄ox6DÉS=/-eM  -?͑'A޲%uOu s1$ţ Q'3{U!Z+(qc#A5Q2i+Ppd!pBIަA}&#=+ < j}l$X8u@E`mwp H  lw⥤loIP/:/Cgjqw A-캾}ooWT) 5*;Џ((gڨ>BSO.. S6u9Sl[^vCs CSRѳS*ݣٗW&\)GL@v-ZѫJlSBÿXٽuFlz _ZWڑG5=c @Ų'{QWb٭om!P~89\LUQwILӸeT="k2&|3Gų5;UCKsW ,|&ԝ#DQUn6||Ec|{"E> /ExtGState << >>/ColorSpace << /sRGB 134 0 R >>>> /Length 3779 /Filter /FlateDecode >> stream xA+\d$H@ANN|0f >GR gGeOl՛Y?>k\i/Tꗿ<4s͟|GY}}j,!M mofB+M˪DoSt1Yͧ۴ Y٦MM|V5!;hUmLMZ܋^iWr_&:jBSU}u*M`t|D=E=2 dh$ r)ޣ=)ޣ=)c=)c{?ϯ%?{T=t|~G͒{lS')Spx(`NMGmT!lF!l`qY`qģD =4!ijq< G(&I&):):u) mA%*oІTdA%KFV,IR?K&GIRR?DxaNQ`{E`Q1GЊ%#+~Y2gQ"Oqdϒ?KO)#=)#e.SۇjG쇨0Oudy5#sIZnq{ĵ=ʨYSfhk>CN:v3[mfR79v]L:md奪y&;Ι f "SO@T+dpRTq eܯ5Cl!3HkF)zY3*/vuz#OKQ@ohz]x9x{6xf5Y#{g4*q\ dRT ;kVkO!ky)' Nr IZW$g!ඥ(U4*e.XEëUazz% {uU`XBB&BvւvւvւՂՂfԂӂӂ򂕴|4M#1 ܂=tKT]"޿dk*8CUpT g P 8SU^0U\ PS\106 1 Nq3^V8“äb ƽ 0E)1.Nla8p: XX|Uy!`U0a%0UB,jB~4q8l6NCæ5Кih4fMw C\!^f LCk`ʹL.3( U3Tg Kp:gԌ5CoY3V5 T 8S*pSt8$N"q|Q; Ɖ  &(^H%2EF!az0'd2| <yO/}AG\arǾ #(04L inIQvK8P:5#a^$ N[zaWpdt*n=ZvO}( Q@(UQbJUZ 0BU`*HU#Ց@(\RQ#^3jQ( c1L&a 0I̋a0bn1̱&VĊab0bX+FĊQb0bM1LP S()ɻy: 8LM % aZ$O,DdItUADDWDdI*!"Kb%q׌ Y#!"#;^3Wp! BT*KU.U\ Tp R+Qb% u/kfkYCog_GS( Q.U\Tp*R*KU.1f.kpG%@ YTa0a0Lu: STa8!0ABV$V$V$V$V$V$V$V$V$V$V$V$ĥ^?oT˥[ɨ@k%KYl(xD!*R* JU@(TQTD(UHuh%KCY# :[ڪ(DQ TD R* UA(UQTѨJI*JUD*fQ0`|0L>& a0`[0L('d(hdddhhhhhhhhhd .NBWZ;;>=D)CuC{RuC{zQDf$kFz}fd'gYRT]%p*BU UwPp*BU!׌OîUjQB)PpL(8& DŽcB1PpL(8&YԁB Dv@ "#;"#;"#;"#;"#; U!쀮A`( rRT9]9]9]9]9*]i1iQ1D D Q PD*BU](TQ PD*.UB(1FAD$pJ8% I$c1I$pL8& I$cf_H8`MtS:1pL8tc:1pL8c_@9_h-[ n/_p-[ m mBvmbg+WyS( QA(UQTD*R* JU@(TQTDA5CQߩw;v;ǎc߱w;v;޾AoDQߩw;v;ǎc߱w;v{]|.c_@}mmmnnnnnnnnnnnnm: [) B JU@(UQPD R* JU@(UQT ʚ*u+u+u+v+v+v+v+v+v+v+v+v+v+v+v+ ]BRRRbbbbbbbbbbbbbgbg^AD[7C/}|_->ף<=Q/x~%G-0z/dؿ_QlW;?ymX,p;89iT1x'wuz;Pm縔eZ5n׸1%>85kfgL~:TzMΎI/=lSyVot*KorJks|k?"vYOj߮ϩI(oׇ z]?'~ɯDk<91^ئzoc}Ÿx!9ޯ^b|L\9sfWex?wڇbg ~ŏ?|F}y,e/4'c(8N󻇟r 7ǽAoן|Qvk+{ֵ;V endstream endobj 135 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 163 0 obj << /Length 5148 /Filter /FlateDecode >> stream xڽ[IHvW0tVr2'B9H-.K2Y< L-?fjgfuu[5ޯf4FupM=p.G(oo,pV2B_qCn>;EF\a7٢i*o-/p74Sҽ?዇=tr'W,*q#W !Oxlo\Na4l4Ɇ)fiu7{?uuvSM]WjFusZZV7 k'XCU1}cNLڴ;nD\r',/kVXxDzVHqmwAu h/} ,H+3 {w{nJp\O$S.L9Qu|*ẗ́ƅ+(]r*Pe*[7ӽ3w* 6hC7|ͨf6߂>q 5r&TZTy(Ȣ@ bxd v胄vgꎱa!PU RD>. IIO)"֛}iYdМSfŪ[hyEl&pK,/D\duRg^ jLzW8913>vR|5y\+9(e۱~lƆr E HWꩬ`Q6-6S!idnT5YHݝpn޲0&mE7 ]Rp[Q7s%;чE\oe随WDBnt7ͨ |k~iɨY\w r26Ƭb HRO1r p>dj Qq.O͵jy#8 |@9(lWօ5f/oF@w-D7؎~uAUU\N^n,Fj'SPH;wa:j@pMg7>˯qTۨS? aqhW`zia{fY7EeTdH2Zì NOS MASܜw|' ~;?w~H7uN`Aw&$pUM:$8KVm FK՚ɠԼI`pbC$|<F03~b$A *'!:ζlrΎ:6I o;z +I i `D/^ gH4AQd< Ac@u4w/pq)\bW\8G8&ۜqT5 Gk|4lg$3Ĭo6p|K^Tʜ3toϮ])‚GI;򎇀XJU7Um&%"TZNaO-N4XIqqT{ d]8׼Y\6vSN<+gh=WIl9*/o Of(FND"PMm0!Gc0[C8k5쇯 K4A`$<"%j ⡉; sg}`_ZدM@.z, ^ bCMWAUFST S+TpAK8#Uɏf)#V;{gG\g[-xfފUw6}puv$2pJk|ťmfA]1CS02uM0!hT&;IzˠU4gbM$dAf0Ni,!\B %!gAKڤʂJ3%f7Ɯ -dqխxT ICA#TF!ci SMRȎ=7@8sn*HƷSr8|>Xw?dޱ" { L*N_vl a%Ѵ_{SF1qia11I"';('(ZtqdWt<#~|W Yƀŷܽ? *+'굛9n;{^!;c1+Tn.TAŃ;mb|eh2!j6r'=qX\{v19*M#i( =G)M!k|I!Mo?Ҏ$i(Z)fd LITw1nU *߿q~ۏvc;2OvdW(5,h4IJ4e8,I21lšdҀd_0 Bn5/PGSt`}}Qr06J Cc4 McJ~y"[|/ei16h; -4UK%\'Cz׾ OE'Fc )0.@"gʞߔuePMC:V_ r;49$G!  1OS|ْǹ0(8LsZf S2N^6 &sߊ!a#;֜_(kQ[.8R;k)Gܧ$p(IZ{!k?J&KQ@oU ;W<b|ۣnc@6?3As(#x].P2,H_?zN{sWĪH|1 &$Z/L!Elo.l&Qmx|9kH񯒓ǁ#蜺q|-B,vFJۂYINGqt,h7 I&ȕ=E:@N1Vs@3B\q2ANϭ<1 =]\s~H,.0żpcg. XReQPvB>5,&b_^Ǘ `%%.Zuࠩ2%΄sM ,W+9M<-Z%9%cYƙ,[W[.NF2S(Hz"H( ~Ѝ/HLF>WɄaӀ!K.OX }pD)a[lʙҋ4;noçHAuC"*˲h(칧VVRP8s̔Lor:TuQ)O-6#Wq p ;E`,(^SI۴$#5-qqX:YdS-Bx&:GHO+?k9t=83)8:|Y=4Lm$-Jq+V՘!F˶l@'jZIoTeE~_2A$'H**U/14W"N(cR*}0[t SA8;qUc"}T2Q;ʘc搧k< k G[,l-E7cWA f~d$/IC KrDNh}?XV'I+CR@eMD1Bq)ɡbawTNe֚NRS0_3Y4EV,[kƠe~8 ʴ]fIDժ Ntӗ&X%*hYrfc~*@]Â{͖]!@S-6 Fg+@uKg<"q1} @F7 .~n(w Qח3{tLCM?ɱ(#P ?柾hD $>wBQ+GC4~>ٺKmg?/vBjv{fOk:NZ )H6>op#%NrV5~X.tm~zȖ Xuᳲ^0?E(M؏!~}'܈^ Hb툲tYA_;2}†ð%zwׂ)>P>O&\F9S4jE)=SooLĪ9+򞰵́ (Ӂ GS&m/ endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 791 /Length 2289 /Filter /FlateDecode >> stream xZ[o~GxiwWߏA"X]%%Ğd}pRQ0u`),C`D@YČXLl![-b ;E qV'N1R0]WȀ!f}Mވmʚ2'#@B[ZnP 1ZN2aa02vrO;"P20uA @kF~"7le]G{y26B3B6F>`QDLd9 h#0/~)6$1;Vb/YXepizQ$ّу@( tBN!&b&f`t>13U1=Y֓n,yJ?4zjMLrz-fn/Iy͝ebz_4/ռۇN뮓ūZ6uGj X}؁I6״X]_@zQ ,zI};Xп..SϛҲM  hެsn|yƼ¯U>PW_߈ޱZ(tR6tVG{d,*] )^R0&lۭN{rښ~}bMQj5b6p v+9j➛\ 1N _κs!~l4~[?cmWc'k!OejqzK7Y@gZaϓ3*`XXȟ/ I!C BCQaAŁY.O8080K{pa񋦝m/9<~=>:\1,%0d32E2Ȟ1 (WaWUrRth]p*Q PN*!8E@T0]In+M|j""K1s TdPBWA4N@!.ly_g  A =.2(OD D!rt(8+)-O>BUAJ樜<‘9R?@ܳ8ZJY3*kX+>BD=oMRk{ph62Rs^("PDMW9X kp`4xF%mkRZIwj7l?)4aőE=dݭ n(URɥ\h@+m Z~ZãM8r!C*-:?6zH-|ʻ]Tۛ *4#HFVi{ ~|9$ۋa /ѵFz)w^8&SeΚR(sMe]h72z)r~^/5r\gmi B'uݗ-K2]!b6 #85~@t`;]&` L>W(6 zetw[ӣ 'am6(->fwn_NU[=,Uw&u+>yBESyiF7յًjYVU\WUgGG":?D{eh*x aey@f9>jk~ԠgԈ\ήVm} 0uz]W۪p`n5:C(y8,س/X2:Ѓt6Csk '4y;fjp@AB&o"2:iP:N:PUMgYy΢jcN:q6kw,tRr$Tr[1.-o)<[}[aZ\]_R~}-ߤy_%҇ĝX+ ݕDJ؝+3幌w粯+/ߗ}}7˾Oe/tȻqT*@eJ/ňYRZ˦A3$h$N3WW.W-$}^PJ>0a3?ɇrT ;KX#/GsVa\-Q>p("Gw6?@)H='Mn*EܮȨ ~-샲Ǵ?,ؖ endstream endobj 191 0 obj << /Length 5480 /Filter /FlateDecode >> stream xڥ~O+֋..7.w7fyYٮYq{Qk< 7Y0HO |lYm[x뗨~=8N7r2誊x^ˇg\8Y|בQW#B*d} ~y2ȫ0sKL(`IV%u1I4UBsT/ G?m:qTJ.VpD%KlUمبox`zaLQc32u,:+S-hjO ,ܚ2>T1r- Xm4rsxzQ`QAYi{8)?gm9>̚*N,Ud6y _Y ׺?xd5Yc g ˨\xlщ頻Fb$/2H?p6"f"G{&AiXXXO؎ܛ,Yo NJgǕ#|SVZhY>s$Ru憛ºD`SG:~DF;??qC/=h/blR %Nڙ2pz%{3t +~y&(+hpX1-,0xh=͂gf}%])rTVx$GЈ 5 ؏8bQ+ ZюGd DǺBUV]$xLR=ziڇ]JC/bɋՉ}l5\zqdF0׶[44W,5o(ʉ^pkp4M5YqݦiMci:cqRyߨꊔ;4b%X 6L@$zW lCU'"+B0-%UVYa D !;sLScċϭ37QvSVG;1MOE`x Vd/}6,Scz nw~A48LF\xt ^!=r8= 4Qt8*jn&j-,T_? :_h)JQG0Vj³La/k^rhS|䔼؋d}aK ӑ_ElJ;X[Ԧ"x*\X+V'ܕQu%U]$ I6Ft+!E_6@~t` ~]1eT2eױ/#iJ{0MBk|/c 4qқ†k]DI ouewDMQU3Fa4ny-G$$QlHJQ$#î NRpu5tl+QžC%B[@3/|{0>pt$/*,”"@Uԝ~~LCfeaLR-Cfi j2+}д 070Tu}ڪhK+ɢ->oFE% !Tދ1K'I^̫o!)'6z7$N!xچ@1iԳws5hpQ|B\{J@Ǭ$j*&Kg0-~;i%%jat;o(5Z"ߞ楔|Mӆm(vI(4׎!md_- 6BAV{8ڨ%AMͅw>lfB*w0Wkmj̀]Ev%;6 Ix]xL|4t!n!g`j9 -Z<X g}&kʻ6PcZ YfˌϚH5)JH”1 rf\w}9w9i3PjRr\~ %ATB~5jj|$t2)g[Ty#%Rd\CI}N25XX06PjgTcrҤVWar9`s\_8ٳNJBD7G\R K!G J>I@MI_\'⍺ZhQ{w rҔ4Jp@ LNF@u"յ5UieHf((9ZhV"ZGbi.hw] Uk 88Lt%h][mK/7{otY@CPWӀce, K%71WWYӈ-V5nrNDG%DlQ"29C2rl]#phxj# o|)ibFs4_?ԫ-sg*.,IAO-\Yf-%1/O ,* ŮC&tb:TT"9&!2H⯪lUy=f^V^ MdP#&h;-Fh]cR$sKO>\I9*O*k|ޔ6jA%뻧YSqT}ߞTRmRMy.F=^Y +-^k]snEх\UjIiU2€FIh{iٙ#_Gzk˸q7gҝߥDBdi*][FWh /5u0j,彄H`QmU?{C#]Zx2(~@G]۲BxxZ#کj,aG"o/oC۩JZ1‡ӣԚun*@^/@2^0VV6s/W:qu 0[MQK"+47[T'H,-SY)6DT7|*N듺Vvhkm޾咠鲐ymSʞs}.y8j'Kϋߢ1iD5g\W.1UZiۨ`P[{&ygc| ٿ6L oU0#ѭ\0.|tblgfVQŪsf!Q[%)jޕlfǐ\k.L9Iʖ@g eZz-of͌yVL(*_U(ړDXfL:#Gw|S{Nkem&R Md/B$UnD Tghe śRjTEzU#dЫduw9e2*KS1AݭW> X۵y S DBU[c|xr젏RWfvUl"z7u\C2Aފhƴv&sl^ uRyEo.S$Nv. JKfw/zasqBVGٵº) ςO¦G/! - 3[6\K/r>_83ՋD⤕*K0^ 0wpN& V &MD3Dw1.])^ vkؒ{c88՗t;Y[.n!ܵGNijetB_4LYr0{ʞJi禿/L讔\˱Ѫt :H 20v&z?ihǢ/K w%: pHM0:̄ VUPma ^vf ײPMsϑ)Ug_ܔJ>YD endstream endobj 210 0 obj << /Length 4878 /Filter /FlateDecode >> stream xTqHɽƢHBl8IۤT$ mm%7PbĔZRg~}&2<>uŧ`Xݓ<:EЧѦ2gK*\_p> S. 2$c׆^:Z{]{Uc9XvV'u\\fFL #uH XQ\#ZjH`BX78[J{,H ~S8R:֨M* oD\vG%T/̢GFwA*Ccfłe'ndUJڬ"swL:Š:lا*1n],,D)l]5c_hk/(:Le"IL08՚M2'*@ XI޴Rp2BëHkWqκC #5+)սdC"dh< xwK<Kl<4(nj}}ׅuuSV$}Rl&¨MlUA%S {%nSjy|S?P FS,I:jpzz#F56P>)CRW8Fx"Hp%ބ-BSmsle*PYTg6,tkI=C3E7!]KHcm0 ~djaEqu7;d 牌p$p̛P7?RiR=$b!s] La Xk  2:d,NF=!6+O{Y!/NuH;_'jL5(zsfKd$ShdSDZoc琱>؋S8 w~?MЧ7'L=3EܢX2X_T2S^#!3}qL@8}~(|@ TJB/abFM_N[X"}/S*%^ZB8 J$o4zx_=xb+4AspG>SϰPT:g".64EDvnEEP8B_r!)I;%3cLmP#:@='/n.G ☼E/|>a[W>G˪G\ LEp`:.-tV0Iq!"DtDGGn9{@:d&6dטLwJ۲?!u?8C3}CiMgQdNZ%(L }FG ֱ3s~6gw($VRWBȠf0bQ;,H /W7 !C1FIhNtcf-=ՖR7’+Oz&at'+'c: >'Dh $gr*hחMx' L!n>}u|KŞc҅SS(xe!74#O}j.򿟲Þ b0}fR!ƾYUdKD)BQƥC{lfr>am7qmu;ދc:Eǝz}Jqv<$.0F8Gf$S<ڦ҆L7|I,jF):O> ΀ZX#אWh7`Kx1`06Qf|$j_{*I!aQejtqIxCN>}u+`3#1|& waЋGgM3HJ?\%J, `x$rY;L(k"E삞2#ucz:TS,}HD:$d1 dgISM-\Ql fRxjJbmm%|i}R~'W gJا q\?4gDy,idtXs/de tKznc ZtZ@:6;bi$Mc^h5 endstream endobj 231 0 obj << /Length 3476 /Filter /FlateDecode >> stream xn#7_!d_$lG&$clGm!:5_۷.Iuv x&ź؟]]|4ESrru=̤lh?ZN^j;mtrj>͛ZOMp\nWWZD+а$;LSބ n[$h735 mTۗEi|~ftun&k ]E4B~O#UV]ozHB_ENUa'Փ1NZq#2rȐN$=XO0їcX3˱cWM}aT%ƻyB}@G{?>%B6O?_>4/C3%[蒽>ew6u )QSǔb ңp K08[h[Z^P))b5`Gx6]&`D)V8wilM :RzgE~#7#@\<+|[  \OP (R&>8Q4a=%셒ڝ<8 Զ׀)Q2zJ%^cy p3 }r`-@,](/_2D_!g.Sk*7]Cs%y@#op qiN[Q!\!}DʳRFgTm ES&@ZۤZ;!x~}u`(%;xs:Ԥi*n$VzXzĸ˽Bi"|R=ɘGkwVz6zID&8R'ęذZ _pTW)k Dqj7Ak&i(u< FM 1ŗ b*ҁRUK"s'1Ă Q\zM&FIk(]"\)*-(N2`%QGB7C!W;vynB^[4Z4Rvl#_6d.z&f&rjFU _;672tW/,;|-LY,9<Z.mLSE yFڲ *'ktͻIɦL E=/zK4\24}\E+di_|<'Hץʃ&4]s}LusgU,aHi5n'%o ASMs/| xMTqMd枉ޮPμ$z%j!cw%w s@CrY[lc(%D4bUc-t[)PVEhx[WS! eD%pńp-|ͰEXhׯn'.rQinJ5ܖS;gkZ*< zO~m<{=RzsQ`ǎ $GgY> /ExtGState << >>/ColorSpace << /sRGB 237 0 R >>>> /Length 862 /Filter /FlateDecode >> stream xV;oAWl E}HA X@Tȉ)̾6Y>gyZWyJn' Zk>ɿު?oJkOS@Aڨ!`v)ZtMĘ4MYr{}obݬW6{޼#B(_E (f@R^v_}!Pq0Xtg.vv !Zu>'>0/".zrn*.zķ⢯5}g_{EBx"ݧ'}M ? fq4'Fk@]Aؚ8?<Iɉ8ws<ѵTzGGiNJSoUנuž=[pL6nEx4?i rx.ke 8\P$jdIL9c7f dXFR[{~/hE3;tb21mfyu.مՉ)-qI2ihhUۯN7)$]=SKwHV̵y[!ʤC},kZFXV/ُgՁ*Xzڞ4y9ˉB`堳ʼnrwbY0ʉn9 endstream endobj 239 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 246 0 obj << /Length 1396 /Filter /FlateDecode >> stream xڝWMoFWHGpHCZl鈒_;ofW^At %̛7J SI[)drPFR/3 E~^\~_' ɺL.sMb $UW>So{척1&5o&m.HFtX?k2]Gz\ճ>Mdj$y◫wS 꼨; H%0*i )|^6~2Ђ+ y\B,hp>>S*okS0'!MӶ+y sAV߆:WJlF]|"cIH_S2c5p؄!9Hn#8U!1 03dw+/LpƶtRJ[FQ -?2PPiNMu2I^}xn*N("e/L}0nX~z>1cU#-MtRrfne6'!sp{8)ǂ;[I !¢7?rH]M.ϳV@1>38i 18h/3PnaF[@>W%c2BkKOp( E%tI9Cz~.\AKkowJΨGzSݿފ1䶴HvMPuhgf90X9T!8ñ `p!&%\:*x~DdpIhm b{r5;KN}<|m=ɦTTE) v :xRU)$.hR&❀m3Juv]+%r d/-qn|l <Ys1|2WJi2۸aI{|,`Lɕs)?tyck76Nh`My5b`Aǂ .ʓPIIgT6̤ [ endstream endobj 223 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./decision-vegan-009.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 248 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 249 0 R>> /ExtGState << >>/ColorSpace << /sRGB 250 0 R >>>> /Length 832 /Filter /FlateDecode >> stream xVKo1u=3^?MHE D88Tm%聿>:#<> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 226 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./decision-vegan-011.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 253 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 254 0 R/F2 255 0 R/F3 256 0 R>> /ExtGState << >>/ColorSpace << /sRGB 257 0 R >>>> /Length 1536 /Filter /FlateDecode >> stream xWnGWQ>]_,qD'GlX2"& #$Uћƛ/^ys;93o~Ӓ̿Ӈƙ?&o)`~j>Ԭބl΃jn؃v#= _L.zz O;'W? 2uxufB^ܼe/$6H)-WW7bt{M dt9_0m/9ؐ OJ\Hm S=l̉訃Fyt;T6L4|Ł-nP J<=l>B+ x͜)duЕt!FUKq YXJ#i4ZR%%?8ܔc.s.ZGhI,AO m$'-m6m֐216y9X#^םF83{Lte27N*tMH&{ i>7{s ͡k_{>$@kbɗ8;`~YJ:d/L6FFB+ҚsCJ>[%t&-R8&!uLbNLlz]> |() ij$ jS!VJ( =9Cgn_:C<'(Idt_I(t:tx\9<ĚB6הB 隷><.uܡu+>PO>GaVeǣaFĎn󬿞in_p^[͞%Ͽp/PZ c7-Ws%l=].o'>Zsampܓۡ[ z^νtw/e'usT-Ln8p\@3Z:6>n&O endstream endobj 259 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 228 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./decision-vegan-013.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 260 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 261 0 R/F2 262 0 R/F3 263 0 R>> /ExtGState << >>/ColorSpace << /sRGB 264 0 R >>>> /Length 1105 /Filter /FlateDecode >> stream xWKo7>k`ES !uJ-͐%{݃ifHԍ">hco?_SPM(H0+_u*mzR.GuB\䜶v"ϤY r댦a{*y0==iY{v,E:vP) kv/Ȼ ?q endstream endobj 266 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 275 0 obj << /Length 2464 /Filter /FlateDecode >> stream xڵYK0rV$%Qdt:;&@avjYV֖܏ԋe˝I-,Ū8j?zI+(wW\IWZRL|q.^ [ypw݇ly݆&dq^|>,UPr wU0uhq.(tL{h{in7TJ7}`li 2fG2l<2*R5!"8$ m+C:#l(X CEq7-[HWf7oj-bd5x~P0ksb 9`+ j{<U2Ӵ"aX0bQz'y}Kg ?Hs!mO`}X_ȜT*H}q?l%I8<-u \yRC]1)zD2F cL IpPL»&Tw8|g3ֻ'r񓘔mv<տ-[szJI]OrT$,F edUtR\r= qR0 I 8DX%T!3dv(ܑ- Y2zÈ䐓q9(g/Nsj15ʔ>B ]AhhdL#5(|Cy*a#ךaIlHe nA@++=L c`l.A59%O(΂k"8SuL坑<: !R D)iFLrӡ,EY]0]o ;zI-VOI[b晉߉(2>d! GwWW!S2=XZ/Sh)F2 Q{y/_ Fr&wCV {ٳ|6~ Kboy|= uOw#-\ȫźŐ}nzx=۹0c6cQI 얒m{W΃0bo"h[`{W dJg-ТO'dN<=e."{Rޅ {N@}3L@! 8d 9N2\K8l;Us'!$|VpP3b $S> w906Б2h BRڒϙi{zE'Ţë\bb5O"VJTwճUr[/& UOkr04.Yᠽ@ Ѧݺ΢I(Yrg7$I2*g Nb6;7>A Sc8X)+\'AIYq c=g80)5gV^G8S)^q:6J& Nr2֔ /^vUYP?M)2XvUKT\sx^$ypxv%jUtnIpt7"H^Ca9ǵ-3VAt M\W~:T3iuqNC8'\Oq1&mu{ds;X{oEN|'󹳝E-^oC("st"))泈繫ʦ]yPЮeq)2m<.UZ;Vop~ot. 83M#Kgo/%Z,5ZelH5p=M)9hRgïN7ÆF4ކ]˹q8m%/8KrR` 7wO Onb:v; c/S%Wۢ2 endstream endobj 268 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./decision-vegan-015.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 280 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 281 0 R/F2 282 0 R/F3 283 0 R>> /ExtGState << >>/ColorSpace << /sRGB 284 0 R >>>> /Length 1567 /Filter /FlateDecode >> stream xXnG WQ>\$kY h !Ɉ&A~?Ꞟ< Ͱ4GJ;r_9[z >ֿ%\pND*~r9|IK^xwzڹ$S[3y\Ǵgr 7/ O'Ho7?12y:D<;ܻL?e]⨙_) [𹮕ʜuk_^i%^! kB:)9TP[Up+~'> 2N '$5.Aݡo*׫Lw}Y)_T-ǧ*>&s=8r7noY@9,99HM~ா<{n'䮎>gN]B_K2-϶,E>:G{xunǞ1OC\oGopV?*5 20Tr{jҡ+s/m;BK8Nq!,W+PՔخ B7d`̴tڅYێcV9n-]_X/%~S ^[hWA'0m*QwPCI<mk)t`6@/JIғJ *Rd},VF#GLdͅ4zDy.atI X%B>2Q j&NXQMI*vb_qj#Z嗕~&e1öUhO#`BmV\bbLOaX-S@σ^T'l 6Vs Uҥ"X(A#+JiŽ Je$%|d>.h %@cx<|w 5b}3۲љhk}gl͢5'--[?!#RF9[$mǹijSs*H.,6@*ĮH:ْ`z!R u1dsѻi留lM[ 4B: ;j  w留h[sKNx̦XK:KGFt8o5FTW\8xl0 ~dRF#Q8T/b3at#M{[q,L4=k5JKf3$,$Y My.i :\N0W<=iYӍ 8zI\$l6'cyo`a)˶ĎjMhgL YDm>}-E sGs ѿآ 6pU;=><.tecpSru` Rt'+]`;1)v{ u".`oY{/6TmIx{Vd7~Ѿzκ^.AҬYπoot*R 9dC{Ե_&.8 :6 Ǣ{A`mrFҞahJ3q+$zV?7E9 endstream endobj 183 0 obj << /Type /ObjStm /N 100 /First 898 /Length 2542 /Filter /FlateDecode >> stream xZn}W!=]U} li}m 50&GZq>Û,QPITw:UMJl! I6DpJ&J&hbQd2\)rmrd(%{Q  ]^fP*A0xCE;.L0N{`6dg} Gёb jGECOWFwF `N ^@&У'I$cbx Ճbdmph`>wACA;|أE$ \ j,4(/HR=0T 1! C.$]0 c\=(D*P"O<ɣx( Df4F L\ RXI([R1:$TLuL L&%|7)cAIj05 H1)3EA>Ae_+Xj]xa_9c^trXSbTD#*5dQ#vJP4%$4%`R03GFFf95I 1X:2#D bm kߠ=jc˰%V€j{WǧTɼW]|?頙wMϫW7dyz}qV&b# ĞOMT/'&:5ƾ ^.>1ÿ#_$g]c38Y'.bID ;&Da/ùZm,0G]mFU#=>a;WB،DŽ3[)} pl#byؿ# Z\ /'|zJ<w`3T+"\,LLVc} b`$2?&.bB %"l$A@B0&s}: *ZYV-J5{\5mAy L/Xr2oF;udI{'HKxp2(w:΂EIflVs!E$$7yu11]cyȩrMtߘꗿČmrj.^YȞ'pKو Y~a|/iѼp0% |3U Cnr  \İtm亚/o@Qi`w+ښfo^ O\YAƧv7HV#Br]ֳ; ItLuvTsskgeӫNf<ߨ&iI}f0O>bCH(+I<Bsťxk3LUECwuC%`M@ qLY== t~AG| -WD5˲'z .; U)+4NǣJFc*4**f4?'G+rݑc /;t-׽.pEvᎣymJaW*&wU_>U%rV.KZ\^rwk讱>е(`@Zlu6uR6`c5ЇmR F^R$ {@@055LVlS\BTFZ %hx|r;2> Õj=)M\͢_I8b/dD`+1 rϧu12Dk$2::W]5Ö:C(Qk1h)J{n&Ȼ\9V8W_TsWߑCi :_V9LvH[ +Jdt2w2-N'@oJvr9NACHD_czزwl;vkdd|ZAS#$p M{7y9?6ϋILX$O&ɮ>^S};5T|د{d0_g z}r `4[/jT/r2n>VZǛ}́ 48--&nf?O㦤IzZ< k,yҠ9XO~Hz6dZ,WC!#zku N? @ ]53( Xj&߇"\r{GHOCn; R -U$=AˣH{ۢntFíKwN.7F_~W]#E DA/_"\"\o)#mS|z>;-mǐrx> nwm۳e 8mݶ%S(ȶ:]`iSd=%_XMO{ endstream endobj 287 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 272 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./decision-vegan-018.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 288 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 289 0 R>> /ExtGState << >>/ColorSpace << /sRGB 290 0 R >>>> /Length 639 /Filter /FlateDecode >> stream xVM0W;> JUǎ VpʡI//73%x#@!u{|8Px> F6 gƢd`Eh#JfFg g2h܌gfD% d ͂fᐒ|i$2ܿc K5 % k8lՂ.6еB5]l9E+r8+p8MK#PWXkgϩJxx2 w#[hOdVsA3͂KL3̂p2^EW]FE!VMvV$uP^7+η:x1|^mujϬy4:1]vM,nU=e3NY f~x?n̄2Je{Cb_/I|| NK=fN_3.x[tUJZV5mOLN&zOŁcOI&jU@nc7_0Pcc/U-SKeBq0tj Ui7][N> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 298 0 obj << /Length 3219 /Filter /FlateDecode >> stream xڵko{~/}u@ $N\sCDKB$'I]s)_"rwggg=C ^:Ok.H.JZ^iݮx7Ks@7~Eօ-.oҥu_\//03`sTeY$fsWqC%J0%] z݊:3"<˒{:=?7&s! 7a_큩3 1g6GMEnu`8f}-י-fXC(_s.!JctѲr9ei] ls#);{%d?l[2wN^q .n }Tf @M"iٲh Ң5Aӱ`P"6cDm FċKxìr҂)]g \w{ܿ BTF4]Lj@ާz p$~A\ /Us|$T1`*YD N"E$`=e^HD ESfB XNX h/(BP4m| c<a%Zm{VkkO1- ׀VqrNF^hCW#'%cxУ]Q1n]CfɡO<2O H^Ҧ63cc]DLЛ4ۋjdIg})ͬ`b !g GSQΆIH⹗ö܉TNNhz/7S_6,diѤ ~DQO[_>O֍}47%zBȇW=7%Qy-?exzM^8 &y ءlqp!ȗL^e":=;4'9 8Lt}ySJB݌E")4P0;,Xe݁L}[PGB#S{Zat)liAr$+Bq.;*eDCv.#},H$pދr䄜WO>95M &0&`_V9!BOfuDŔ)nڝnYlr9DsXL~ʌ.-+(h*UTQ?d"{*h)wO!+ `R z\3]f@znet45U@ _N/W\EJfONT{r*Uf==">:>fiUs͸2Ft# gI`RU4? &j-EW|( C˓x:Wov[ ,5X<5^_LÃ{6;e6ȫ<2q u"l%`(5ePuɞ)mEvedɥ>OɊ8*$:y9CV_fq1Y!2Ю8?1^gS fK1?,4SKsTh*EN 8{B^E^XH6?%'ɫ1 :\lTeWXB8 MhPC-uR; ^QF<ڊ~~loeu32(iHSL!Y|E\8*{e ?%șv^{sz=D]۠Zg$΍M]$3P>T+LN jɡI`ُ"bsǁn@yލB<5 Q R3ǀz=} N-~:MT>S  P)weteS 0j: uzxBVߊ!XR6SE3*hhjr^Tg#ߡ'e8_] iN7♊]nheM?G!b'4 q eN6Y95*3ZuVKWٍklU-* {>SުsAtӼWa5>{ eD?>n23Rz{r6rUp,| DȢ2CbM~G6.Y]h^&N{1RgJuTYD[ qó =C6_>Q#ߐcEj#Z?lCz8g'߇~ f-KA|u"I|aS,W|5dܸ>۲Ćȍ᭱7P~<#(Nx,Շm ujZd^ ~нaJ'TiQ7FSSM&XNJrx?@§̺0ی&y/1a[3$֢$̓_>>P!g96nr 9u![q& .-Bq!lb.猻T{~8M6.Cɍ;>RWTʇ0]н@& 4[N!'-|&zBзj0(7ښ墿uڎ=/ڥ[Yhw=9,K @94lDd9D#ߦrΫ'CԉP fY92I({2A!AH OyMG$!,"?6үDKe5\RƂC -٨!["k ?—+ByA쟤lfdp 6tuH!Ysu9iig@QYa,v cјAcn*|4.x{ߤ] endstream endobj 295 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./decision-vegan-020.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 302 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 303 0 R/F2 304 0 R>> /ExtGState << >>/ColorSpace << /sRGB 305 0 R >>>> /Length 1163 /Filter /FlateDecode >> stream xXKo7 ϯ1>DI=0!)Mv-Qo?7׷9o8@w0bC0X̓.Z{sbwln\4Gr3n2Gr`NN|f#9̝=8_6'F$bщm"#byWp7xG%R^p%Džۡ )/tw+lp {6BWFݖ-M.Ҵb5jOVg䂟89ŋܑ~E4.ɦhPZ%VT*j?+³Z} k'oc<]gE-tU[q!|<8Fݏ;&G:>_=$FX^_S,q]p;a 4ƒѺ1/X$ (} E\ǜDI۶ DgBjKtA D5z'nD̾m`%}?@2,qX448cU sҩWTGPHC|]Tqm3W&zrؼUDif 1t8ޔK<• [DhSx!ʶ(*>lw8k#j WbW3 >?>~ _Cv<@΢jQ{OY!a +zVaB vBuL["˕@'#t8>sc,bĪxa3 Dѿ);Zr>Ou|Yg_K+k${N4@Ih|vt?P endstream endobj 307 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 333 0 obj << /Length1 2035 /Length2 16098 /Length3 0 /Length 17339 /Filter /FlateDecode >> stream xڌpk ǶN2m۶'vұ35&&ضmg'{~_uNuUs-_^&'QR6ul&`Bbf01201YؚGGatr(C&fa(`q09x9y,LL1tČݬL {3g8rQGOG<Lܜt̀V&ycK3&ƶU+3 Ag`l[XT̜̀nf(Mfi/1 !21wpq75>Tf20307ܿ de (!B07ߥ$ hleGƿ|YTĬf&}d;{[ٛEՑQLZ6"?2 3;' `abW5OG?8z;:8?hZ}|y;\fT/cfZ>YX!638@cL1a>bFy %)iSRDMgag03s8?|7տ_~?%{ Ԁ1f?dyv7E[zl=m1.[ T_+`ku. loa6Z9KXy*YXk\%Wkl͔ZLLG]&6ׇL2XM)no`ז|1h qfO1A`D?ƜQ/߈)q1  `TQ0jA?tЇ `4/7F:? GVn𗵃+&lFB?5nQ??\?NdpvGp,? q9=g>81?EVO?vh~rqw1~rY>y gM\k+c1303[Yt0 nw?#?L^v>!A'SdnGzQĩnV_4@~Un{y1LP9h[*)\?@K@&tK<ɕ I)_ң~|mF=ZKE O:kW]taƹCETF9>? b͌Jw9cn 4%'倌\nkK}N*5C!d/f݄ɏ:JRW @L{q ^esN0r230s p.on+fz0rWN|‹!xІbܒdmEBn6#.? |*t2ys#(3r=^̠I rv. Vdc۲wKH h?1 4COGshŷ~m^#X:FP׽ owBȨw[f-Dq*%c/j"ۅQ(! R,^̑N`9ωU P2^䰭QH7Yǀ;|g堓O{Wh? 0H&7U(=Z7_閨́PYbnk*HoKJqVAkvxJyq;NRܖ\IAYj_gTsak;NO"=Ox_#D)Q!N1=xRSL's_CEvCR%dm1 %P$٤8 =.|דwnxW6 nBލGA '䌄6~8V=<U>8B12"2]5EgBHÞ,_򃝴>l6z2Y,6Mܚ6)lk 緑lR{K2-W]Uߝ SqX:uסCG fexm~Mi QЭh|21?qV}4'V>ºXE{^x߭Uv{ Gm-š3t-^/&mDs|&eSMD^RͦbJ9 S]rm-G;l!+\[ۜRrی@c)QpM$Gku2ER ţDvXA.~|C슣'T<~}u"k$Sje@z\beu@$(k:׏{b;ٕP\U#Z`Q&eٚ=8s}A3f.J"hb‘5'< Wq!ݎU Ϣ˳5p =aKiMՐ(Y\P`4P] xn%l`^mlKv_\Ԅb٧[Vr.'ԩ,n7 YRZ^ qּ>B2iz>J]Gvۊ "E+ w?ct}+aU:MA9u^-VFϩr^O7َ ]ܻ裫]t zpy6ŲғdFcLu3LArX-Ɔϑ/TOs(>s 2z*HlT([ q{?Il"6\pW—S[ƾ́-}%o~ZǷ>\-3Ze Uh%hVpiQC2\ ޥ h>^S9l:nRjvV"+pfl|ZKl]M:9y;ucvO;kO=ѯ!i꼸loQ1u9P-׉O Pma[$xEemT㖥o]߃K; 8ቓz.c|!-1*Uv202cÚ=s3IE {+"WzB_NdNN+I7\l3]3bߚ_9 tO{WdU4WmWh.ۜ@3qr VZ#\ DA-fx??ɵ;%  T4e80בLբk&,Ac s"t.})($7q> U7~EzἶԲl8< 1՟閨6b ,:<$pȯ1>5rL l6"!xE9YW4ij=.1V(oWe0Ѩ՚4veR&Q;"kT:zEac+uhGjDے'iK ׸0R=.h,'П+P/|eNд4. u*$g\\4^*Lxn"g0JOUŎ؝4sN#`f\Orp" _hbkİWA(e9ǒrȞj.wߺ"4DqLɟދyл⚛?2b x^O*F$ه݊aIGrN1ZY΄|]Z5aѩ92 %CHI`;/$M^ڥbO"ڂ2DY3'd.reO>+bUQs7J Pɬ4L_N_}eN-Hg??q2촨ufm䤓#369E{ζLZҌ)Met (81oP49A8DmMXj 7F4p|1ȭFJ9 s-L_{T!g+x; uz[-.I6qKڋIcm*n9` $OTo &`''}7 `D 5EB- 8ݞ]cΦrR~;2NFl3J xBCaS=hь!_Q)Fֹ +?2ksJu3Ð}L<-u҂*>R&w L6FBD}PMm*E\tj@7 N0W̧O3 yovN,zҡ۩ѭ ]gBƬp 2;̜e ^48[8FD#*X؞=Z+ec]etzˋ|zgk ZUS};o/vW_ ᄋ)ؒPͭd\<ϋ-Ӈ+]SSENUhOrw񂅟㑀`$1fgg A Ai' ֜ŧdPsIK#C"TVغ%|B?2k9kO,@P?!JD¤,~2y G|I ʱha'wP$^c0OAUפ{<}OˤYɠ=L7JVyt 2ǛΘ\iϞ4I>+ ]$WM7"X*-A20i(uԅR]ZU6(*@걣qٰ>Ejڮ~yjܥ٦XRx ;gݓpoS3]U L2.R%B..o^LbAZ.!OOe՟ISZ^o9v'+K7V$1UήQӉQ+@Z׶Ak236?~<<( "=^H#R%kĤj?q|bskoD .} #h J7X  g Icgay`'m6 ѮgLa*[:3/@D W*o_ T&{#ViPqT.Q)%Oꐗ~lZ í-Ƶ﷋TZ(*}옶1k}pABΥR|Qz2h_&оkjAv$^5@ ]PR#oK\IL!)`h]Fb}5Ye>=$TPə|+Bk:?ZE}D/:뫂dЛFw6΃A Y O)v:2z-yэkΚ%1G!`BUa6rI'/3`W/z͝dBjw@&Y&jw۵JKJWO_dvBƦȄ{wd(Q' ~'W.$ED)'[σ,㾮{FqMNXP RUX B91 V~vӿ9U]1J5<z[ 7?;N3KTo){NvVXao&Oԋ#sz䫚U:NOy:<TݵJAw\NkNjƝn~vs]hKrShzD v>OQ-qf`h-APd?vD!J'7҂P* .}l9>1.gp %g~Cx 'pPhee £I62󵿸u-8$,B'p6݁X>ܮp9:$G%;OK 1J@H;mf-qѹٶ;퇟\+P 6w#ϸ"zE& @c; s'y.טh,cӷwxڑ9b?&Z>15D^ DZ}E#}W%s A ree[Dsq-,y 7#O;UU2-B'HIB,/ke{R!80 mYNҺoDcq7;4¹ *ҿApW5!ga~?q *ubFT3I @O' qV (mI*e} v9aor7NzK@$QGt?|0/ 9*on[Fݾv>E̍0}|Tsg2OY بGU$x|l̺f7[v"ی.; =B f3J{Ů&ўaSWoh>;e)6 'bu;WuHr gjEJA$x5ݵ:z?YǣR_Bκ Lt=n>Sfyűs#OP5ՈC1:.ޟ0?x9s(/MFmn|m0ɸ컛;~jldUCݒ6tr%ߍ({LOsrEӥi #+O$ў-76 <OEvtAaLѬg)5]2vffbkm̅fYTǷ?SG^Hbeeq`*9{8z7ӚD#.^腚],;xH.֏=5\ܿFh L2xyW }Dhh%^U#ٻ?U= fl22h`Q!.:q`MŠ<fRÔIyFbdٔ-,{ T46}BAA l5_X lM[<*$G@eJdY"qvfQ'Y™Zx\ic8x:|EYRObAT =sx6Z֙oQhJzXڙ଺rrUBT WҨRt$ EMwyխVk kXb NBPD8)7 ]#mjp]#D_F υY6}Er4uX `vzwd\:ޕźiӚP3l0{I$'9=\3ߡVRy퀊NP#W !UFN!сbi:uB厑VtѶw ~+R"W43Gz& 稆 2MDh ɀձu"h_\j!v54SWކLdxt["5# KqOGMr6дɾl7tm4covD숛&=41JTlg)<Z_*&u­ 3J\p_bҠg:ǐ :Uܵ7;$=f)]'J TT; twr2 U*O/08RP_- i4n%fan+& 9n*qĶϟHҡc~~C/Anl>9ZawC'zu(76hqZF> 6PPm;5*բɏZr27ܤ Z2(',dT. 5c<+>e@Ļ7׷m 3eS^zT74l\[.;: (n|ArTb`VOÑ hբ(.h_VO޽'-x%%aD氿@eh Գ aEAaf,ά"jWaP ehN7;}~|HȠ)~8?,V1\řͶ:gXy oӜ&V"Ф;=2} r2=zI4S2ŧ]dTVOUgC1"5yٍ8BILQ~)ygkBCUd볬M5' ՟֛r&CzGFpw;Fm oABuDRcʹ,(‚fJJqiB;cg`zu??o/e*nwc!j"FGQvlבq%RᰮKH0FAU MQoLy>ѐ/Kt\ߓE1|]d$G(*4>}Qr$@|3$xm Б)~@"pwEyYuTTteZMgHv4=C\isHhsD &G.aE޻vN'D=>4cS ѡۄCe-n?9kHC>a]ַ'4 TP i*t4wWig!CA)9xGsGt~ĢS)2K5N+J8OF`b5Qb:)z .rW+3H I>- @bMݭU1z u\v~y , ή?psO탃jHbzfK#ԭjUR{ y.GjCEsڧvۧS{lJI%1MfYJ}~ixA"KQ _ZZ^\(ETR3# ;;#]l9}-}P2Quߧ,Jgy , eQ* bRLO\|2FkpU,|VRXzD[YWtv}`*'kyѡnv/M- j]ϭ0ex^qPF mbɄ+9\ (!E7tbGރ$,T lxnY&œ#$b!g]OW Kd%=20H?hdYH, 7k)G$Ȟy~@wiBO7վ]؊A!9ح1e;ϝ).|PB)uZFUkZĢ;,׷ybU\˹Z.QEL_"uS:umG\jҒϒ!me\M'Y!dߔbWU ASzTo4_$DfAa^P,{VD}'o؆b;!*d]/w6 (Tce2`|T n%g67qqJ7:b> 뾖+D``j7ݤ=IFw:ǣTS?[Fm9zVEEwQ>Qt¤ #Q,"K3ik%5ȋ]2Q d7|ڮN}bc"E7}!=o9(yt׊dLbIol]pqmmKgvbT2PY@ F|I* eᩍ9RMcz߄}GEW;zo6msHM4.:CV-yzaKj!YFc# Q8lL wrmEL-V$uPbn_rbN7.^$H2ҜrdF\V4OPze,ߣh⫲rBnZ v%?@0G4nz\ȏMmEx:k '0<=Άeq7PAJ%K|^P* ?\[ Ox0м(rpG<T W V+`SNznE4| xmx?87-S O\wNJ,S-j]%@oT.d q3ݠ=1xN`W1rĭgOٽ,hs_%t#|OX>>ii9usaB$A6'Wґ6h761q[#]a ~f *guP\XheS[LL # 7hmYlaS[kZ+ *VXH.'t8AxDV-{tP5,VJPV-3hH( Ȫ]I$k%&̕ \:؟1C`lL#~S>~wv< O<ue`&>G+9Qϰ4g5x[ä"(t7G4d]e3c{dC+c.C/bd4 V.U.ߐ(7J_~l/&`ә9MjS(^yǪ N IZv_hً)5g}\`mO|\H))g >7.LS  BTF#> stream xڍPҀ 2n3[!Xp ];!e#ޢj^CC"nlf)deH*K9윬H44Z#Ѽ:; Bdi&2u3Tvv(x8 WCg@ PpvtCtvZ۸W9;@dknP6ut|hnt6tB6.ll^^^n kf @iie[cEhغKle  l-\<,,AMy%ӿe _lv657wvt1uuX:XTeXݽݙN:9z:])@F\`s3ٺ:#_aގYB lAo˵wrrl,jÅMR^6o"?2kKw7;;;/?`mnW-˿o=]]VomXZYCzZA*@; O7տA7 pvrcI+0*%$`nN 7rxGuwrܷsOɞ/c8M%Ϡs}?.(+pp[O/Ͽ-&m vXku%,Nmĝ{n2ޖj6ɵZ4['K5g7ۿ ޶p{ɿUo)̝-2n)d6J0m-,b 93%$Pxl2&Лޢ!z*Co1uKod2!~3el\6"[6>.6oo7?P[R z{'؜${}%X?py[' |Jsyi- Ocsr[/^< Ǜ?-?j=?(oii\0̮.8 ͮN x P)dt#:ԇ-M-L >nmlKVo{2IԘmGZ1X;)" ؞߳߻`{Vn4;~Y+{56]6ڻCXp[(7ϲPuQ|,jr=G KtR29KZtQKUɭxTtEEߔ|p9c(e K*)S`NNraO4e+B,P/F0=aJ4Plf}F mꄝo[:*E OUH:Z81`gE/L0z˔#Ԛoˑ}4}J760Ǿ uq5U4Ϡ$aS?2=(5֫6k\OB3R:8BYp-W껫.57N69ƚ2kVWI^ND%/óŭ2U9)ۙҫLX2/ē@-7 ;ښaV_?9,6!x(D1B"")3h&ݐJ %8s$>Z2~ny<8ת6\'=T*c2tA!ziX8vLtwv2$%%}@W¿jӱe8;xaD"8F. b꥔wR,5iՙ:ˊi.5( ZL{ ǰp{vlɹOj \_T]tMi5l$׼2:ıSl̺9mB ЋަjQ{By`~J8{^3 X\Hx?{] Bha1M|!* EpՇdM/߷>`2F~n4=W4:PXuE0jCDʾ2mߤvW'6VgW9pͺXaPR6  dSY2D^TY ׭C}bPy%gŮd߷;?|T/~yX"HH8RS q 3;̜uYi?ݾHohF'i6WpJ ~2Tn[TYP}#4nنЖw3FHm_DWWy۲~;T>|w3;Xm~c~ّu\4*)wY&C\XO[fy€M͘C)#e-L~YqV'у "!d6X*4/ω> ݺ1a<0itC?瀔Խ|jJp!IdQ[K[쿸R:ș+e?ha.Bd\ֶUؤw4.TJl9ԕ̤jT))SVu/R H4ް 'v<EXȳIIu>m4$/ 4NM:s2T p12}pf.];Oʖm ƒs%GC˿=1\BBsg5r܍~7T}` aҊtA#꫖.,+Qy$^l06L )r h݋#:[* U$),}䶽xD[K.OEDyr׫ n) 16ձpM69w*=Jй$[yɘ97 ۊfqlt-z*hn^D!y-"fi'fst>7[ *n1mC+ૢӇs@i#d2iɀIE}hq5v؏!p jx"[ߊ<{_)Ba:#umUCLU0h>a=ါ֞A\=_z0($ 1n!n;:1);I[ɣ8"jȒhT5eݩ(b("sO zcRKݥf3+ئ1htꠀa ݾ!_UA096fbL[!w}:^H, ` VUSuJ)H:yvq,,<)povgk}08÷5r0&}Ć1Sk ԀEيc<߈ țafyo[}(MˆX&6h[<.O::؇q}- +I4zhpz~L*遣BevNEùtcc(it.ɻ(3d7&y 4'SiiU.b!JX ^Ŷ {6&h/h3QTADnb93ͧ"~$l:fPcB}WW p$cfF!\&<3(ߵLIbކ!à:cUr;<m"+!CeQ%o*\ÔS׮'d!5/a.E0"ǫ,Ϫ3>,A p ~s9"q^ɏL&{]T;ݍb,P(ك=aW|vd|%>Mש|m"F$֥IXTڿ|ؘ5^&KD9yتMWs6I ޚ:8olZ8{az!yDim_Q*Rnrvbwo^ R}=F!KQ`6]-m9zId@ ׆a/@a5s%x`=w6\isI{Te7󇌓ŞV">>9il4 ^]<XHC ,:vGkSdIx-< ezdf}<®^Dgj5X8f5Mxe,BzH #۔3oɡYB[MwUKZ)J*L㝦l  HH3 r=ҭBid-Ssus|I{4␾hm^ec̗5hF/?Fhy}e-ZHJx(h\6\zȔt܆-tdy|f8\EuTy9X@x\Ni KXp丂 GVC' ̼/;B)tSKotOp$=8cΘyn'nm>h Pj)y aA/a22 vnrG_n~L n;T1y̙JϤJʁ\zppm톚˝Πdll4t ߟmoE~aR">I}/;q]SV#AӦT~oFJyϕ 'ESAG syr$]"enm9G#3g~hЂ{~S%8aU*%Ӿ )܄cWwPFE!Ժy4iʱVlYIU$Vmx61az'>S|61(.(8Oea:ηjo{4gJ4‚BD%9Ld%Ӛ}(mxKy7((rߧ5%JU}mi=|{k8' t#}TR=6.˗@e؈ 0G\Ql~Hnlj9VnY?^{l ZтeKvc=_ Y)U{ Tz-+(4֒^t"شj]y"m@jg|-Y](ޫ@>NkcW:,QAK{-k/\X»"nH-M _npjyb2D0nc)nh՞ y:INǯ$a,؀QʔR.Rh;FТ /Ã:eTu2V7~al:[?W0%CɖV/;vz}I`1:߅@NME/R\虑\EҔ3\Hn/>2TRkW_j'wB^:I$ nf9=a)3EA_J=~D*ꃌI[Y.v,ԧƟM6#{אh b0k"omj=W1!. ꊃnxKmqNV_4dV,Ttp&B 6cEKs.YGɪ %wq!|"*yJF>u wg{ |"F3Vo³0!a4A Ke2@I|;B\CbhAxRB=zQ 1Rܟu4Z %J?YV.EGؙm_?~ZX=@m .0X >LM8@O~:|ʇ𕴢>q ;X<+Z$>ņ]4ľ "Kmd?8E%I=j&ٯqPlZnfRp!͈xc W͗~LAB&CZwF&@iKe|*Cl- 2i׽Ϯm:L(.ZAلӲ=pEN *(q}UgJȗܦ Q։ꉦڈ"m.\ܽ 2s}엾󗵓Ur iyirf_=h0TwAb?p>f}_ͨ52pԾqo}WT6E/䅀K}3sc ZeFWN$ӆ%HrU@}@ c0#0EĆBp͠ˇ=Ӻ:Y!j% (3|Vt o~lIn>BE[],BelTb}IpgcUX]4*JϛF2Nm(5r9XhX-_# SDn>Lp}л|psp}b8(RUc[nh[(8SG ؞<}\yNcCSx$/c]̸:%׎RxWol,m6NMdFđR&QYk]80S7Uճ)?1qxtT1rk~8<=:a<+4ԭ,z҃{zT=3%I b2k՚d%NҳkwZ֬ %8G/mcth:qOo[gvkf SGlOiNrj9+O=BOOzC}2Ԗ[NàI]Pe\OgRy}44HmV4( A!G\a|I)'dbI,u63m^)GXT51_ vCzq_GIQ[ri8Q9ubC$30vFب+~ ":zn)7\+iTh7iS_#$CD5}``q5q"WҊBiJA@J˧a_59[-PL/"!pT$";[Ψ_ѲtYlz.31NT^W#h$vm vu Mi$ ܛL&G I%'"5fj)cAa"aIP'6DihTF:9z^!|UN+zށ, ߕ6z J/֥[I[rB0sbpr8EdU7K6ճ,d+&7Qzý cqb+BdUDm ?Vgr 8!Kqp RnUN0d3Ip~tQkx@EC]ݺ 5uTW!L(wLwaY*~P8F9P#C e 0t4Z% M[(a>lPᯥ_';Ї?[PeT^nwZw$5܈ǟ#JoaX$*|^ڒȇx"By/Z|FX5`<2`UesRvGYoPM̚aT{,:®1az4;t脉)dVT]f͍QH}Dr yn  cI]Bv߯K,ԷU0O^S{rj /M-a?8~>4&{vQ%܈??:iWۗXGtCcB| kb*r!iwI ||53Fvsmr6X45g3p݀Ky{$31~adw&.e_znE3CGtnIO'>{RowW/}:;"}jt"]˔xJIJ;ܗ$*L%ekeІB71r\60I`Y}⠰yW Ya ߶e}\ 69q78%Ͷ$Ωv-f8#:$A[vqx$1AujX b;BY3b;M>;bTx}tNb"v|[ulFˮd#+ v9`ܤ@Z&:!|;3ˈ `9GhG)?4S㇘%)GvKqъݳ\-j,1zI @w,a V*6 vcd@| vm1uOuA\CPbY)/}:gaV1x8,GŮ,B5m =ѽ.e 5rl 2ŵXQݵ-X$1k12 b rDZ0b¸O ]S`ƻ`CPo^zA f <=~1 J-ޫ-ޞK=Cx~uB+A~!%Fުux |+dmlҨYL8jjj6eODhiw ƠY3@P{pME;VI rlZX UӏrW8̠be3%7=^m&8T|$qbθb]vQ@wZo(.$r^ fg?09n':yD!39`ȓi^ʌ&{|R8?S$2 @+qD3kP̍P#HQoδ$rba]Ŀ hzGY-Ơm|<5Ju*1]xik.~T𨵐$ 3gW"2ث՛ CBJH51$OJ~Cbtb}+p#g)/N鄻nِ)'DZa\~/BRaq0:i WtrGs 2=+(e ri?sjԣAY eR`4@,8#0UcU&a-տw@1@ @[}˯kh૰?z2|y ӠJ KN}b0DiqF[;Zct'^C唟'nP ~9ցId4XttyTJ:tm4wq?SuwzooU VLKe7?^,?|$z흃,8[e]gb B|w꧗b=noY ӟ-UPSݞºlȪ\K=>R]T E|c=;6>yjxچWU6% "bnw:>O%F>\)^0 ^Y[ {x^{Ǒr/[Y[;LTacJ>-ytدWmբgH\Pz%`p03};:^ur @ Y+"13(\\cBGb6S='~%]Eɗ!yKVE=(=_GZaJ$L[#vRף7^dLe=ϗ9:֪Ԭ${qlg?rgDAV_BRH"<)-(.㢶V!ڝ,o<z;BWIQq)o> stream xڍwT]6 H(]C7 %-%ݝ330  t7HH) R"%4Yk>{saᖁ 8(P @ff]EAEB[uSCn@> c> |  @52u0"0[;2zYDE~eH5TN+Z:klv(c^^+i+PW( jv Ե lP`$xkpYC᮷np ] pU  F89^0-j('!0k j ~kyM@~}dv+/7k)s߾'O@nAQ 7 / }gM02@*m@?nӿ*vKl ;)Hd}eD)9:v?n/­hPS  >%v dඎD фh]׌9PM+ץw;X s%ȯHo Їv!Pms~@sȷnRث/#OdR>#\Xg;yS֒z{i= %ߑ֕{N2s}ͼ=uC7T ^sEM2Z"gDq`s$<> SNǞMy/vR0QӠ7dTeĽsJ͟ ݿm[cvO͋r>;1.y0Ho!Oj9uhɨZiS]*2iuWg0TEtk`6|MyGFv`|As;TRA4n}RӺx&I&\Ң>SkV9e|廵GWɜ:*1ϋ+_@vM'G'P)д* z4Onղgo9rf/kXfv/D'iSJN.,UOA!xBc{CњQd tui"ȟ~VR<«[*ĸkjנi5w*!b]vp+(%i4`IBݽWu WEO5Ha0^ɽp͏yb!AybI)XB5Fvv?_o[ÚxgK:97բPBL =fӂՑ2$ꍬQ-J HG0V0PY<ԖզS/26̨* 3wvC=l2^ @A!0=&~81[BCh.Rf {*PznC?-sL~2u>Tե6\ '.'lov$w]ݲ\ #P aE8Ƥ0_W?EI9|B]-T[kmg7T3ҴA3)T DA1r/ҁT v/,q{{د ҟ }tCsW#T$;Q=߷9e&Nyet:96 q1K$wN\?lLB0ߞ<pB*z,b%{HjMmxڽϹ:ӼH!7_5^C 0 llI FD {'ăFi2) |O.ϒ2crsxsɴcg{f l4=*6w9&2ǛD_dmL1>Dnd*mAz(^=$Kt]%;Z>NNS Fq([KZ莽xAbTH 5D*}jtkHg;5EetR6܏\M=ںtOu(!kIKZ_ykryMpSg| e Cޛh~3$Yвµ9Yyw]3;1V]}_>X} /ҮZ쉟و= l̾~?zәp2-7c^=L:7kG7fb Y8y6D}ܷIU6ZҌǮXh=)B˄`^%q-݆h)MGȅ Lm&YrL~'cK(懜Yg+ؙQ݋\}ow_F>Z_(sz|?#j"^e {a[zϘ߮EmY,x+*ҰF}_ӳ$V-be/jȯTD/w&*L!xeboa\ʪ41+Oփ-ژTOFzp)~2uxgZTOL@X R5F)F{/{_I}_WV}w?M_U{~RQC>1h#7dʶGF\P1+p&3$PP'A)%*Eo7Rmܺ5m$:Rgt!SoHj2e0Esi LiƧaiu~"ߊx'Nw#駿Pq댧9XDvS7F}7d\hE9_85/6'Lqi.J0?T6;#ԍ,w+Ю(yC%.Z -/U:xwq2U?QO +7T`SDXk1qŅZ5\E7(g`~ V3_RMZho-yVSdM4W^}ʕXr% >ausÒwvBKKNX@u[/ahyDkc7(p`wE}Υpsw\fz 踡 u-ष= ]-uÉV.O+Sfc:>4J`}oFXMJJ!oߋojDƏ 3K ?x#X]pz{p~v\޽&>9tH2Dkrc.lr[yVzN3qw %G&$7{*DĆYa2p ,aRPlamʆ-YV,#5CIԶE^{%_v*OkkL0s4s'[*KNZY{QHD/QZ6:}l+Y50~ryũ{,f= jU3 ass%]ke"7&[:X:2~Le= Wp|1fV(ci=Vj˗}vMh7˂DOD~׈@SWK2u#@zPy"=E@vWO⸆lIJk6Z/4# q٘<@ko{.tsLK4/WFj|ćEG5f)믻[]=Fw=8%?o- {j6&Ў5ˢK9bhIGa6zilHRVY\ jШY"xBoFO.M%;]-(hb&[.\67 %D`8Fjxz{[߱c[jji|Co4cVm;Bb c%?nP`6Uaa{c ^ TGUQE',&_C2#~^j*|'De:]^ɉۥNƜJc:ؗX68aQ#-A̤^зB_OذO%qekHeFJr.;@I~u6!\` zJ@ms\O> 3JW%7NZ_Nfk*\ahZJ)cNysR }ƕT7 TeNzeVA'2樖疋7WTbb}hz^L\bU6AFt1?i.ӎ( iI*Yywg~{'iwixQh&$Fog|d_*R:-/y ?>&MbГzxCJa32`02q" 3oU5v \N2-(> ¢$.lˇq12z70;7"*§io& @?bFSS2.5-Z5nHxpHX\];jܿ-"ܐSInk=В]€E֫MlbLY%C$zi[k7h*qr$ ϙIrmBsY o觬`w&*2_G!2ZGƾ\m(DBa5bPѲ7uŝZM˦+N$U^f](9/\걉ߤnnwF=&](/v ;jDߔV;<},q<_T8~i>1^oZX^rIFc(w~UnDGyīDso##+ە@Ⱦ8BE @tɎ=v{iI}j@w@v.T]Z3x[gC4~dKz~ȆZ]qVzg7fD =3X\3EװvKBu WaR .qg,5{ζcEǘN u앒6;*9yv&&_Rg@J=G{5F3Ɛ=Ќ6twib!W,&7%i_ ˀُ.=T/ܨ I:󖠞=l-nq*M3sw8;`Җ25fi\%_ɭ0NUmtnbc&UwJP=%{9>qxI]夡*kg'H8&q YMdGZ\'iHՈٮtWq'yVp/ڥspUz/J=3(T-GQJIAtakIn}P0qVj6h &՘h7@Ozn,M6(Z~sDwg0,,׊$p-:K"Ftjb6 blt_%]| '*01N Sʲ;˟,]Gӣٝ7$B3a"ß&m$>>ˈ*k>XˑmSaa5ʲdUJ*kvѾ7ܰqo-xQgRtoMu|&, ԒkmBB͍|6 #)vosᐋ5ɮrJͮj}±Vt=Y+æcg](ç$eV {dx  endstream endobj 339 0 obj << /Length1 1454 /Length2 6845 /Length3 0 /Length 7823 /Filter /FlateDecode >> stream xڍT]6LwCw#))  !twI(JwH( >k}ߚ9{kss}ؘu x[ (i)(  H1KD BwH-D%$n O(@!lJW7#n;Nt j@HGݎv a }UCt@.|7YNЇC;dgpq}p=h!< #A ( d{PQZAw;7+ҝ $WsV..8ҝP7_g8 i5p< ݹs "b3k CW/]~W]#=  < ~E C[Nwnܠ ; YY݉ |}@sSU={' xEbbE肠Tu=/w7gϿdאp]Lq^?b᷻?KwU)x`!? NȻQB &?X zoT  쟳@!`](O75o0(pzb2;gN@w}lL25|"ȇ,;!M)[ KܵGe 1%c]~bdvGm~ oTS}Xy4Q湩 DS82L5I,50nruA~6*>r2^3 W:,9e4b%f"|+lZW)15:dP,Uŀ˶$U׉ J s4/a*jcJ;*#@@^Z!]}^%y:PRFIFOMekĦ<;ice0,i?CÅ8s^TsYl~FuUy(F՜t{Lp,0?y(nKgT)X!3ӑ\:ƅ"8ʗ ;8;.s, Vט.2b;ѤS @?D` Kgy,<)LzJr yH҄ΛG?}c!;|0Gjdi^QޮXSM*cBh׃knf8kQˮ>Zy'uad fC/on9: Tr|[&덦X2EFU N9*P,,iA4FU86GMXiGm ,P .B; w}LYXUd[4-6Ѯ룤ficgFU='!)\RTlOD6Z"M{??IN.r/b2>^uHmbڪߺWڑ%O`~1]vvJh4Gyˆ̸F)܂6z`X(C"U.Dq&N| wzED_Cʓ¤TL; }i+Yg_FQmh ; Ү/\Ƈ}t. KT54,ՐAyf٦4n v]dJ'3be+IW$_d -$ǨZ[Ž:dL$v nnMKW#op2JޘҞ۸ 5DDC.fIw>) g3/g%)B! yGϳ(I+]"˹D=?.{bM= T_E&"~P]mS+q=tDAH mpǮC;E=qɫGf&g<6ź*ꜰе(nj(}g҉J f/^a1"[/=j nrieFFpS2c_+y-JΊYYu C^{N)T`!=z裢_W'mscY7"x1悆X_c_Ã%b8K!Q@h@<+++)^&Tղ+ͨ7KiCxa6+"cۍ|׸SB*5MwgXi$}r^kh:*Kh.Qkkq4fMhf߻|=CZHrѷ'cDT,3[7z(~22O%L*d VdDDHU!سVUٵ+V*wb.x{_5V!$H3AhӖb-'l  ޛčb %ϣ eCLaO^Dox)wKg٩ 5hK:m6Q'fQ@PIVnWeiY4aCxTL^GjG՝xYL 6 8d) +*gy#{/ȣ=R-戀g*1IM5 WF{0F٢U[UyG->`yz-偷"e@9Tþ̳#d+KxeQsD:OP؂^ E#{fNhà}hql P#9DuW>.MxCCa+S]%Z'W{L&^􄅁ڪ}v-rбuQi ne-w#ys߼م~RL19ȊrE(ӥU> %3fΥLź*jewDJj!E,5xSy pL sx?Oj0ћTPSS7B>ڐG c8N>%#ӑrs[wRN_LLJ2͋ 关'v CM;Y>yEtA=vzg$;:B5)%HZ;`zN#! COD3KUEAiGF$h86Hjc($R*y1c! rd;Y*gGp]cDY)R.|_*ͷc9NsC5Y4+ur/oT:'~y1(Jb~bN]hY1GՄWzd9fLQԼ:^!u~o*n8]U.csH ~i l g!~Ѡᨕ_8oʗF|(5&ao&5nu:* x ".nh>24 6,KblQF5eǷ\!(-օδ\6M[E޸νptZGO+Ҙu0ɐ.!+B=̤Q<ϖs5J|(%eUf, o ɤh:M*2; z4O=QOr/ԫS6?B-Pd٤jޛ鸞e;Lg7mr,^̲*HuUaegvоGv?$R/ݤ隣" ꮃG䫔x.LeqzF|," $dx>v!G 2Jf? jq9q[r vgf^[c0%LZ&6LJ9sLq˫\i#+٥n|L}›]o$Ϫ f2UPJMZi]ay5R[Z쪱- In_Ղ\yY*&⩺i1l]T2S֑®BP%=ʒU ou/L!;߈*D3+ls6U 7@’yMqƝ{ Jh(Pw'3",O/g=61&hoo?${تP=4i]2D>28ٺ8,P %;]n wbʒ)XI+=" K;= T_juT_c8fYYj7EN$4ĸEnugf?<*,uA$CMo*:Ll\ U ,a^ 7 .CdJU_?3(4{8 7y>?v^~'w˭zdlpi֏PI2RVBoTNf?.z} ͠D ~j(q *gD mFt0UMFύ8s3۞Te.Du7Ō:oqC/ ӓv|%嶩QDJ)(6SS6Hkhov7|xNLoq6xlU9ڢfhxsם5du#&}[ 2)(޴O?)nX)+E/1Pٸ\zWjկw_>$a"4}-A UNK2a[b8~W%7.f ] 0[,*^/Z&&Rl#h$W~tSjk9b>s"$3m0RE2׻);FUQ6!iIZ6mp!bV[UV|xbMQv%Υ1%%DWPLtuZwW+}gk&CKM03fVN;P΀D;i9+qL';'K6Z@UHNoY2pJ<&M_~7VTF+<eRĽR/d]8`q5Բ@CR] ?z̹Cd@V\k$FkvLqH*C~O:AQh,cv91`> o]uZ(-]a4>eχ ŏj" ~ 9--鮦=-55A܍)1G!t%2%̅]ns:?2}gG@ endstream endobj 341 0 obj << /Length1 1437 /Length2 6223 /Length3 0 /Length 7202 /Filter /FlateDecode >> stream xڍtT]6]ҍ ]3tww70 0 C "t+% HKJ()( H}Z߷>>{sb`̯p!(~P j@a Prm'b7"a0P0ƦFup;$ Iĥ@(7}a]&bWFx a.}pA IIqE(` fG`qA<7rAH_#W=OiD_1 FB7w q;Bƚ:}O(/_>@+  <<stP(>vF}0w w`!|S!H'[F_anڬ wTFxx@(o_PMGr~)h y@5UpnLD9CQQC\m` ~ojF{"<N7e@aNЛ >`\@Gp:D~c:9$` Fa{鿏XPKGDYO4_HR Ņ dI?5N_4}τpKq#](J!7/Y]2Ug`{ƍt}P7cSͮ͡.ߨ& |3pg5:P׬P7 oz3?RA84!Q1JL#ppS^0 $u @ v|/]B sy{ DAQA"ovn{6BiD:ʵ!Nƨ G9dORL܈eb k\ ̗&ضAv7ډfhޗ(637Q 2 wnb/ 5(:So.fzpVLEiMx${C=+lekfD¥h*!n{ Vǔ9J_fKO'YRзkJJ`;3to~;wubpX|H<:TECy#K' Jq*jA)n^%I/fŭ-a`cR _'}$Ies1ӉUԼ*报+˓L{SyOmy %+)E5+a{!N?Dv$fоjGŧ^T}M{[ip2ԼsշAev 'zj_DD?`=lt_ϵUf/bURb3 #_̪ClHsNM񽌟]/}4R(f;#vYl:5Bq/vmf|?Pݍthl4Mwu( A[)m<:[-uo6 T/ ;ű#h4jsUQF ohX3F{Mw]G$s?E$7? SvMu?:8a! Lؒݑub}~HMsFryoA g+6NX.׺а.fSi$ŎBφC?}GsܯT亿kM |cTnjpp\yZ;r niS5֙%ݙ0dDyS[>uyխhWڋΟa>_fBFdRV=cU5.MYQf7f~i[ZsNs3K2+t5PDž/;zH1ƷɅn%vh 躟YVc Ь 7ItN&]C #@r%zIF'IVͺ9@Avx*Σ4Yr7u_vyEҔ`" /lTbGch,_:;<9ωN06{RėZ2'O) QCe>/֊1O1-R6jgnGD2&}+<ڟF[qƅ^*E)go& ?}#EIWK{IfHHЮd#T7WJkbKdِ0X*}6*J$M:&k!iS?z1#+&|Un23E.o꓉Wz*-(t{vI"(BPx!I}_ Ԭc,k)،n_F[I"Fd5bt:4 {[m2yNGӁ "ecؗGAgwz)pa@b́ GwJSjcOU WVl#K^Žͅ{ EqIobPIٚL/d VQupUQf|b ة'>q*w}Κtc}@z Ѡcd:×2-.sM}A&BJu %&SRqbE~&mH㾪blI԰$x`3EFOk}dUBPI{G\dP={yjDڗbQ#s<Ӵ:o(v?EB@Im5!1h,OXa#RPJNm [VB^ױOT+yBvI+vsNHH{wNFi~6%wIn1l=Bvp/5^W6] hf/Ú~ h|H7GpI,ӄbIY`{ S \6fC?>O\'y2Ca8O_ÇTFl%Zq> 2թ-׎.ھ7baģͭ0A}-Q&C4?^ֳ@[u#fjj}upLn=c첡XKcZm50|  f؄Q@5"eꖙ㴝QG넫ÅwTc&%Ӧh k)L|Ŭ c%NF yC fI4&6Ҧv=:١\msΌ}H<%A]O3å `\N+T.V*Ymֽvby| ˝b#37[ dO1M9\ɩ.aֱ>7jmxhaCr㫘3!0?iOwAl盇#)e_lg}|סFmүb+vqu`aE-Rד*6EU׆VEWoqkNE0u,;g3{^PnW?MFF^X >D!+N1Wu%?o4^M]IpXRj!(\]qOi l~<Q > #rC?|ИOߢl"4$zq3*A͇5+gvJmgV;6]XJ4LѢ.yȖ2էQ4*^'`_x񏅈Yli[% 0mFrߍd,e,:`,Ļֲ\Rf ڴrOMqc$#m׮Ĺf'YBDDM\j#?DIƤ 2  woK1H:%!Ote .~ר* Ko5*k&k=vȗٴ%Dw:m69>j~?@qktz9j4_;n|*rEȞ$YxWGd5osmDb_rau5hU|ҮgEF<'2}ƚKQw\죕1fuIo<޴AIrQ&G޸N>å}!ENLꇺcFB}r5B8/#GM2q{;Z1$bxdx7YSv l \R*ATzn"-tS? &RnY]oT\R߶ėPsy:I!m%)$w* "gIi۽vѯ]'osZK4VOׯ&MS2*B^ J!8eiv$9+c*놜C:' } !ʚʎxmk?[N:UZ4&R8t w^FA֯pm+gqj{:7{-b H>ZKM%?Hyur? >HN2,0Mz5l_EE.cyfz4HI<7ȺXS^mIwOV#K(DH/Y~AH&$oC\X~F1C-q>'E'w~ )<^"{%[e3-`6Os;\:e-@sG. w$^d$lf:Vq_mc}pIFP /v-ũNCQ!lŒ(wSl>&U++.C0*fe,D,P@Uku2Y8q-LӰ(H춼̹=Uؚ(:sKEA֝͹MB@TgBH?qZj edJQ{[;YC5H?-JX)h%n-܅%h= giZ1O >{HfR>TUSM m>H!֌rtKx9r,Yd.T%aqXw~sNv>䅔۽^TM-X d'W԰Q%-f?Rn–@y#SW"'v#EmQ9\ :fWtExb2\ xRqlSbAJ}_FIj #Tž=˳uٱ~3ycÃX*͌:5mOf [˨eoK2K©$١%q+ݯ+ 9pf0 r f^Uf4 G'hc. H]e}$怮mx3yת le<2)u%=P9L^Ad1Vfv]x:𡼶,i$[_ǞÏB) fAlc9K]bE_D .:Sٜ*ԤD.|~(od >ܲlw6G/_e,ʒ8ln{OtdY*T&cВJb'dXRZVe3W"C y݇#pd)0|*h"lA.!gK"ߌdk'62#,OFڅ:)Yz6|$@յ7x"7?vD.Sl07;C ~8+d/5;n//;Di1n4ẇSUy(i:@ULVG¢.Q\"U!Q.$֚Em S@]ݝ4W RkC [u][C*WɦA0AZ{RALJmϿUε**;0#B4^9cS*wMUV|01 HHjUz ĹPu|gri?Fp;iz̤Pg*\,ʒ^>"_**@a/6HLLk&Ɗ f(ś4p},]}T yk;ͣMx&b%Rj*QU*[>+0uc].V=N[2E"']}6Kd7/%ts endstream endobj 343 0 obj << /Length1 1687 /Length2 9832 /Length3 0 /Length 10923 /Filter /FlateDecode >> stream xڍT6Lw䈀ݍ 54HwI7H+!tw (ݍo_֬5\}g^kJX@P8+ @JEEΉEG ہcѽ; PYH9AG4hu(pp8x9B @ uð褠+kc >?`g9[3ZPs_!pGA Օ dc:[2\!pk&vv[~ Pكj m ЂZ]A`bv=u;j`?4`u86;g9qXB5Ye6rmAA. AY ÿ;C06waYB jovð~' q?;:@]5E6TtCvv/gGQLߊdgCx[@Mu  p:H8X=RO9& q[CO8ա0+ыt[fnx {\9Ku8C-~o'/ rz#xr<vlP go%y@ߢ?AZ >By@A>_1?,@xLfHFÿ 'yH)x,}eX _!]9ӻ >s᛿uv~[8 6ǚ T\UJn \qceM23>uq۴J:]e-ϜznP׺s_RnYQN?\ N{^RL7"|M,rFP ֢zU9JOR,˧ԢQYLJ!z&ɬO{٫1둆aɪi4JmXq}]_"]7h2B}s~eyZt0&]UXo`H6M$t\$LqnB+ {ݙ \V1$H}~sl[d@8ҍ=:(`WI2̤;ޖ=v A)-ڢ;z\\.r<`^ OӶ6Iy(H՚E7oURk^nkFʽ2{H :N{x`30sRX b՜3?ҡh K_ͮ.R@˱VHs,Ǣjw\ML$}m̹DkA#* jެ Ѹ$}q1-gMU8-"~lfqYfQP?=@MIR_@?ѥQut }# S{OwhylB^\c!}~"^~m͛b)#[NQ#&#q ʒ4nlD S{.NO/XbF84zˈPaܣoI>,AnJC. ($;3"@[3 TBBusZ͡tǪv0,%Wүr۔$Uk 1:<kzXc@8hRKFp;Z߰9/cT"S|dE.k; (hMڌq.GY- )(Iz^#xn3Ê;KJkg"^)b>c%mܔՓd[vvY>bI|$_Տ7D,`LIi䲨(G0l4x;~{ (mB4>WZ.4>+WͮZ(tH\Nn"})c%7=?^gS=٦̷g۵ )^+~j5 h)8m7gyb~K_S61=!uTRm;#w^_<+CأBHIa0 Q4R̽iwkie>G#0<]B-hnBhl_I l4fm<&s+HqmEzl8镛` gjio"l*eI[FqYhAd 70˄ڼYC{_s[hw!?VP|섘FH;v*L8.V 5u[kvx(72Y^a9%5t.c-ZnpD5ÜB|LXc)*QwbcHZ1GHE0PSTš{ۈA9I-'AҘ/p}8}8PfTXI徯[ڝ@21oqyC,_<'gݔr\ZRDwm:S>kgRkw{Y!aѠ_>^'% +g@BC.޼ R:;34g*a1ǚ㗉4;k/ĵrn QHY]tĤ}?ŕ~_ޖ%АMrO Tlh-bKփKDC BH/bcdn؉̃L|#&Wg8\`jMڈ5 S<z$ []GM'wq^57l3 P_r#$ޕM橓g#c+ iIVEU2F-\V(Uݣ0ͮ 1%\(a](g`nP:q_iJqpDzY _Kx;ŋ\%V0ç)\,oLM@ddJxH#6_ ϻؗ)=v_SWw6Z+6~ɡez0d"Gdzu5V_7"r'\~f}pZܹPsMWXRcQL .(r{?X;-Hج^ݰ<^ U3 ?fSsusIx})jqX%{\y4k^ gˊ%mr؍T_(UΡ/ǴN6Y5sD o0Nj8yB[x~1Pϻg4=[ ;YbqQr?J4GTlHSVw~jj=zDZr~ߢ4R.2{fdG=m/twWcod(4^*h vO 9GOr4xxmne̎~al`Wmڗ}/"I@UziLo(Z1Lr15s;b0QPf̄ϣk5gElO1[R˟$}'83y֥$]:oqw"^rȎgHPI1%B:嫓Ͷ06D\ -݁Od(o9]_ HOw';zu˜BkVh~@y!Tr{0ryэ&2O_i*Yf&Ɵ8(ྻ(O+dS]?,92mtSR. #UGF\]2>X'K.JmGj[{GW$ 7؝!k*2Ċ6~#u}O^l12KK$~X: ;n͵ӻ? rѐDd\ lM$5g>]⯲u)WpJ}n_`f󜴛_ɰXtkH0x)ö8n|vE:sB /瓓5RFI0ݳj6QRI·O7;_Fs_2I鰠`V4v輨H lwm~{O02iuqЙ`':ƍ{p$iUGM9uj7-yImkԣ۵) VPS&ld}(]i2Lu"qܵoF]U&R2s|&jT?tQաE"y(ygg/swQ c3FL DF@ٌY 7pEjg&$4X+UDs{-gҋ0W$^ 7pMRo#Ȇ6I]ԏfyTƇ\ -nS4ډp3wx{OS fH; Zqۧ.p>{N)mUB%޿i-R3)X:`!Z_ D$r\#ks .;R߱͢ʚgL{,ao\9Ie ͪKnYJ~j5(WjluTMm)yU(߇& Ċ.j~&; +X4W-N cwRO WrޣxCR/5P/&2>t]Ն<M5`VL_ h^Y^pQbdMԱ%p)-Шe&?WG5\k)'ߟF: a,tp/ N"`B9Rp^oyU$3eY8OGў\E^Gmpi~_yW=05EgEdjoqN Q*ZR\=ՌF[HJ4@{K>*\]sCP.Г/;K 37S}W|f 6Yv^SGEa"Rgb Ju(A^4wX!OȾ$HGdc 0} F4]C;/oސ=k IuWYX:-~a?0O}ꩡ=6-26Iw)wӗHƾJd9uCaE-F)OKEѻ,EY>6e-p:]$PϓϹgJ;8&^40XͿjBrbpïJLUf:zݙсÙ@ 42wAƮХ#H܋"w2E]]ᤅ kuWpsVgj1eVh&:ACc~s)O"|8cgTW?|%sZsT+gw3Ҙ |iRgq=E/Qŋ㋦##)[nezϷ%C²`̟?QW(;3,~N,<ԨD@d 959avVT@ T\#|e<x#q+axHujw5MV.;.#k56f-:,AŔgIHNe4VG^qeXf [ &S8Z_kd̺WU}[C0#[)'J0G@E~Oiݻ9ݚA}L78dk5B5SGhFbjM¸;"gTjũNX|IxL(j 1S٭Щqw,DBh]#mdK9iGj M1;H QbH7h>=?y`;ovYBPF$.N@~fbwt3IvfXL /]z܈ R eiEGbjΥy |Q5=>2C佣&Q;gABjnR 鎊ơI-]Tdd1'Oۅmd3;̝L1xLTˤ+uv2᪻i l@QI<'l<Ǥʏ M8Aή\s祷>oC,/Mٔ"@[W~%p<[}MV.},St%R^KW+ =>%Hs24_N H^N_;vUdZ!q@[>pQoyUWbŎb=:|SD~ϥz~tMH|.O#o$rʃ ]*$%4gvv!֓O~YTTI[>YwlO鴂DbXue~:FqbS bq%wcJD6ۛfS;'ƤzZ2fdmUrtoqzΫ0 4Foy1Tf-L^S}W*H-t@Je:- S)@ IƖ\$ĭmU]2aeia=MGY>]wVc[,X}=s-LaYMO ] zIDϥ}eFUTgvCĭVI]C/[?økLSfĸ"4iC/4B'=)5g[F-r%u)hT^I)H:g]{Pd6he9? S~un*^Q= #ZLS`W=C_ƼZ1ތyoϘ+DK))YC0;T++50ko3̹n>o퓴2J W LpyʆG)0.`ߗ8vs5nUy|BY:Gc~tS@̗HV>-YA;r; aA.z0LÊ\N6,S1Xh.|Q7I^Z9-0sLPuD~Ada/ܴ gKQ6d?nE;vR'ܺaӎ׋m{Dzy T!Yu\i"ZyTp'iHծ\lk M't<D@ڊiL`{dѮ΂ I8Ima\+aC7/S>9>4BCS0I3$ 5B,5GT\_bg4J#${Dz9 lήQ-U endstream endobj 345 0 obj << /Length1 1400 /Length2 6370 /Length3 0 /Length 7325 /Filter /FlateDecode >> stream xڍtTT6)]JI@SI`A!AiiTI鐔P?ƽ߷Y{?{{y# 9yxĀ*?6#>f4A`Px >yӀAUwGxxD   `7l0goW=q̿^kVWTTw: vXnvBh r`0%X$pg1nnOOO.N]l9LƅC`pO+@8!`"jvz*ꀖ3f*NY[ÜAPo8-Eu.Am~An0D>qY!;:1ܬ]!p7.7Aܲ1 aO F\7>< [6P;XE/ yDEx U^;ˍ "Cl?l_7}w6//`V`;?n|W`ʃ/7sl`PG[W^]D_~aOAWQ@* .x<E\ӿ:K`YL`-`xyoN1W!EwGa# r8z HG@F?@ܝ;! CWGhC(oKj(XmAdW /gB 7#>0_@ ol ˋ 7n.( H30W_k!|M!c]]}fٿ{g`!5!UO8 ,0 cOW^S{8ūhQS"{qZ-m'UD9A#RQXk76u4',in=F?ΙdO&ⷊª>U}NJ%jMdէ.9S|jYdf&ćK$Jy.AGD }Ty79}t.]hدӱte7wa+%=̍OJh6U]$( D'@yu,f]}=t@Ȑ -[xo *OEG71]J'V$W%@LgwbS {.DvvMud,|}7lf$Ok;0YQ0ltT 7_?&r:m,NT5 -gStTX'\L8U=nN?< A*?"KiPQ)Z>Fbo+;ֺ)uc%}J|IvfDr0ij+pIRqUaɼ2ŗ;_|/4|)~k[Q:@)Zd|wUȈ&4~z6~LU.+.f@ ¾#te_m6"K oB)^71Ut4Us?(e ~TOL~kF"W R`U9tXasFZXa.PcCk]物F{/`W-r˹`}&,E+d#Z#|IOB~rQXodgq>7Ƒ7!SLnx }P.R@Ӧ~Lʢ` [v 'zJ72֑TxXOD:5՝ ؏Y<K~i\b{k ] gejQve`d*x:F7Ah88ěR>*LxCckʥl3S螲{U!)m5s<vk^Rp5LI*\Z_\p0d}{ը/`0`ltJHnCh"([ _յͮk`[S`u5>Z f ;8cm},|U-7nf6;7Pu=HԴOan88ktFtXW fkگE;6 u3Fkȯ27f%F :[5% kx%N Ҵ _uhMO=H7VG-<GPO|J%eAMFT=n襅DBV78(9Kb[oReB`-|m+dn}0( ݄+}+?= {3y݃01QB 8|D<5#tw6̧#fD/7h@߼>zV LrUj$'h>lS7f=0jQo0ߌ]b oxCS~ Cx}b^FܬoiV4Sa>5&N"lwN+G6]e4! )b*6FSb#E!H$}<-Phoڛ @W+pՆhtXiZ9(L1kڣ֧,*Ta `Ӳ'_Ln.oc&/;k^*Or^X$HThLna{ N\4#&Oq|zD=kٚW3M2یfH{,nc󪬘 >dUYKW+>\`ļF'I4xڒO\5_YbťɅ~=le{u)B Q+mf{S]@z$:ˈJB.m'0ޏ>yZ};g6};Ndb:+22/98nfyLbqdϙag9{/y5ew8%WAH4MSȁyR lXQ+Q <<=N;V?Ҽ5 O*v[?=.# zw߂4wX?z;BTZ'd=w >HQ) lt92~P˶h+kH0JűBwhrqg֋P:VNen4!W[#{ٙ=슻#}N0K&}+b4<_\GJ9*8W@۫!`CKoZ]AYMœy6i7zSg4Ïۯq|Ceⰵ9O2DcͭVg ֙ ]J? V<᪦T7)>vJemOu*z[ ޣG#+r#qzDJf|v)O=۶YYK&*ZvsɳC3âA̫EXS +^N{֟r7p8; 'ե1 W2Y)?@]#aʉ')UI19f7|bxG>h=4 ҫZר@Y[]l+V€# I4U mXӑ}g0&֥LB.it=:T_c= 3m>"WQELd'^,_S<h! DWۦ_>!\+ c Bar1N+;3H?gGfrdwd56۴Y58<6{"'$ٗ`Y<%rρo F  & Bcj_|p‚+u-i31"BJ:E,d"Oj3AGa),7 NV|Vqgkb5mnsqɃ籤q8._D5\ՓyD^=rzp6ik~IEEHfNs4GUI4Պ8 lVTgXۜWJ*..kY1H7|h`,;mL IXh-Bئٶx%vjd%C"WeOwzX6"P/X_ߝy~yk=)&0,8@9M E+»/)w,ea: n{&'.V-(6#*OU?5G lX35f&r~\ǀi׌p$*t@:_dzy ,dm;>^JSdl<#;£W49[~+oЌTs=aROQDY kI+R^!|bNbeeՅrA:űx{χ֘iS}d;˧ [1>q].mBm'㜺cǘ]1}PdүȞd+?P[/fͩXTm OuXdŲQaEDby{v1x;:< C>ˊSM֭4},P~HQ>Kdٜͮtʣo7[" X$>i b#glJWq+|o,Eq3lޥn,q{\/ ʮkcUq/罙OcK}Wb9ƅO;~t, +DM=|r,1n9d:zTayC(U߃ #?d6dJdÖ^jFm _?܋K9Yss+x Q >qEe:ZƶgoΪ-7 d!ǟ(fQ(wBx/kϵ`X/ct"YW.ٚjz{&G,&Fn aVESjx}H |{)r՗`@ y`-Yg_*irnr͉5:I(oxvjOJ~@NdX_p':.}G)Cf BJ-p#VkR[=[L9ٯqBX}┴1oO(.]61$9\Րpґ?ǗdFy]A%a~ bL@oBxGM?eHWRf OJLݳ.\vo1T4J <CՊ:ʫ'#1kRИ۶K bePоAw%4jf6 endstream endobj 347 0 obj << /Length1 1492 /Length2 7651 /Length3 0 /Length 8660 /Filter /FlateDecode >> stream xڍtT6) ( C7 -13%-]twIHI |9y}kzf_w7=&%,A@!?0 p{_fLz ig&cSA7'\@aB37%@]0ak6Z, AA~I3 P1ۀv0h, `?J0Bf.0gk1f6;n_f?80Z6?vM x0C,P W%9@SA ' @+W!w Z ` 9e `hf{7s3؛? '0{ = g#܅b"2, 98p_@f0w_ EՑS qr+`f x\aa#z X0]+?D b!P̿?V;C<_e {~9Օe^Jaos ?g53_]NUZ n_%bՂL xRS*!9W{nm+AP=CuVl quoa$bfpy!.rnaG2ڿF\ ޖ, |ea~xv̶[,ɕJ><,S[kOϨɐUqK<;(.+hoPj^AABgsT^\s՘[|G zԖ {Vj. R_iY7EJ}* eWQo+xdC)(Leb(vRVdj*{'QeΛH?6&LM_K#:wK޻Lϗ ֯HUg|MS` k1` )GcZT}h ZDמCCH dZ/YueP_[JM@SZOdhJ zO.zꀷ5@ǀd!6*hZ"5H*Z]VoYQfܸ-@|jCժC5{;SAAmfs]/Ճ ?њ2 mOQ\p$q!y_Sp/4Gs0&p EN |ʸˠl\-9eX4f˖[SB>I:mJ4'CXkc8,)sAmE5jO `~mDw^VmSյץ'"Ϝ7?\|/ 3:O5{XKkŁ7(ڪg4nqu 9O0W/ )Y>&4 'ST TGثЏV|3v-(xdkct@gKh [H| 7i?ڎɎyTc<_(pzHɭ"E78Þ=+/ 6ɂ$ $H)jK%9<K$”xA"VSlisRAjEGy$ /ӵ g./[!/20vj0!h0G}$ٜZ-T&EhMY4n"BF\B?czwEP& B#&÷5A=͢}T hB-"BQxBD#Y7F|wyџL?7رk %o~'/|wg,O@i`x {DjԶ_$%QqV!>BpTx+d\WۀL /11QBk7;!2ކ)sid QABgK^|Q]_}l9Eɝ<:|LV9t<{^a2sT^ }"H abĆ1<}iMDKyw,ExRyE><;+Z'!TS1t he/n%Oog_v",bcpQ}eeWâ{$(JςNCyz]5OXѬQFFjY"}quN%hO a/T|&gD6AYUN9#$:ZV%z^=Q'đ@i _Q'%NȬ/̈́@UypSk!\vOC& |ԧ#rl4qFh.y=7[-EMr)9X8]fȭ(L}~ƕmwF$vS:Je NoCd]9Xa'xk {N̈́=iF2a=9#I&VtER4Zd<[\>7X}cdts+1im?l_dS;Lۛ%*]i [I *3ZpS$nqPc`Y_I$TvE7#ħ3G)*r\|[[u"Md-x\Dܝ٨`6+W$겚"!QmEݹQR>8og$GPLQuڰYMKЗctWvX䈩u=*]~W Z uż8GdlǕ]9-b i"N04-2Ξ< rNiU0}8GgV;GgYt\'kaؼ_E<վ@>$Xk8lAacv5`ոG뉪xowv@,H)oB,~iH0E1fp;rA!03nU+ 2kڷ\ČP_N|R߉5XO+UYg5L(,f4&pܡgYE*kT2,ulwU&j^v[k(NUuN8uJq1HAp~Z2dI5[xzdMւqD8:Nlk薉EFL.7UrT->òo o(k`oL{]0p"φdp: >U |~齡w]۾ !ɶJ $8[g= Mz)yҿ>y|ti]JFRԡDvNY~y6k%DܸuC@`}%mi s*Y'ۆoS4ɕR6oknuˣ =mwO SJZk&owuǘЪĆsjRt<@:8z܆uI}#x֍}ͱ?;wi<܍TruL(lI 4oE͎%,? RfƨEhM[Tt/.(ceMҠiEr[=w>pa^.UMKĭB :+WCM OYcœa4 +G\=sw/ &F?1ĞFp[% |[ؑSuC9D_ߚeVAJBh7Lg{!z?7rg70zd_]T|( #Ӳq,+Qz8uED{Fh8i.lNK] `-&}ZW(eŒebg`!L1I{aæR1c6;Nhȋ%+޼*t`-1qjwzux f™P/HzQ ,P=>3IcǤ{k9'_JB[Nck?dD'fuj!\[K%gt#}ɛ% W2QK4͛"H"Bu1[3 O)/6N{R#!0uo'6q8$UPϟ] %I1n^S0SK  R1yDЪC'01 PE֭% T- 3O ўT;v4gO2y}H (☍6y/fֲ(-;NUP/3>C(H&1%.qw4ٓE[I>wej! ?Anr籎Ixb()ƎuંG;RS l<,,j\eUZbgt)zI2]8R-v.mv5+n8f[zԺL2+LBc"!-6~2 TMWfo%>rPԩG4Yw~69fws\.cD'!ԭv61ow )&$53uHd=!,OCFZ&y0:[̾XvO8ѡ=kkybƟ~@Ku!`p@! rp0sx-Iʷ×rQ^)hba/#knt}觱KV4MS2&ل=m^> ITm^{=Ś}6S}&±܏uk3` #8X\/C͞ZhYҖ4\ i}{PCXI=8]ݕ=dj,+t⠧O1PEAP|hycyT¡lPӋ Ыފ8~N]~JP@땙ְJK#w].M+ tkSTň#Y 1r8#f2iGӱ^(N\/k_tM z2e?n&֕^9[-%v׸)#ffݣ?*Mq6aG7;Yಛ9N[xfNS=B]k[8~NV GNnGhX8ꮹ5XN.19[*C( }<_J/yhSKjB~{Åۥ|F頫RSlr{Кi/rn]qylArN+ަ#`fhpRgJ8ԷMPNS endstream endobj 349 0 obj << /Length1 2677 /Length2 23126 /Length3 0 /Length 24629 /Filter /FlateDecode >> stream xڌP\ -C {4Bp$w&xp̝dUUkzNCA bh ttpc`ad)0Y)(ԭ)4.֎M@2q7@`eef23 /@utS9:yX[Zh#ڌE;@bmfP0qڃLjf@7rssebd4wettxZYT@9WE{ߕ1Sԭ]9Zy `tj2%' px d𗳉%Pgtr824suxXۙ  )0Oyf.NnvJde s1G{{+ĭ]f{3=Y[GOů"ݝ4݁2De@7333 zY1 KK `*omu5\܁*YXfnS 1o @{,_?~2oˤ-,NwDE Vf˯%}oeWw6O,?Ao,EGԿ\ yr_QoKtKM6nPp6} @skwq3ݿmv+[Y-5~]PcҁNp_* rK)`hX98&..&!t@rX8('Io `Lb7I70IL I7b0IFl&߈$#obW@J"nobW@쪿]7FNhF\4#P.Z]_ҙX@:3փ27@zHghHI &#Uj ߔM`{O5`ڛZ!uP8qvРZ ? /G"޿9~Aߙ6e;-; Hgc@eRAñTPG:n=9;G * uZ ;?R{F8ٹ$q=_ףmc%ttc5Z5֡rN~ }'SE3 f]Q,'6[ AzǭfM L+`Q(y}dt."~yt_Lh@ғVJ/fm70m[ (B mr!򽘙Y|#Mbꢝ'Ak(闌b\+6 = T*|sL[5X9.KevkGbCmxO5k49THvc&ECynVUb:j>xFVݥ%% Qz=ƔD]ԃľ9YK]q{ٓRFdYa@?o`Ic0VMsN{jPQ|[$3iּxWS/$[&&/coqeA%Q,nyiiX!=7<%dcz, (!_B񺐒k'G8EU x~8PƏ7S{Ϝiy3^R*CUcpw(RsIY?G. !3;@柧~&Q@ ueJIzW0YJ0>_.DOdS}SG )WLH jQ~u*_f L40Weڟ54?,}:۬9 kl1[hX+ h<Z/KeJm^l3EΝ齆{iӳ8D /fDgAmm{J$zFw2m1b7 .dt<|97qR.y#Ip Ssgtp~cKDJvzR#QE*1jfr(=>V0`ou'Fbp)Y),SM|"dqYq|6ܓ#8i߷Ӗ""VM|Z)_$eF36yM2ϭRbdgg^yXKvۅI-V/ngym|ǣMaQO׏'$=:>'SwCA5_G0=m|c5pCv?(?mdA[J7 ^J";p]zRV0~˕/#0LC=CJawG )a6o mXM9Lpþ_Yk>~͔y9lAf M_]'k/<%)zXH]_X75Yے6$L2)\,X&Xc2jO:69Kl AR'+gPU';\b8a%0 &6o"m3d)ݟzկm>q0o*H{ekPK Z4PkjëָgeghX-X%C9PA^P8Fz_5PUՕ_oy BLIaexW eȒ%7;NoH7 Jrov'މzDnR7.6P-Z .dbg~c<4W {GDd> ޛR/߫{Me['IF="%VST:3[E"NJ@|:i QN~.w)xuډL48eN=9IYK.<-:b5b,ndw`Ssrg̥K>R ,)^Ŕm}+1}:OAyޤ,-H@Ct.oJ@0<,TI*Y}542tNgX7ޕ'xeEW1xuf(X"CBpJVvO ;=9V3ϞJ+Gq`V"QrL- <.cr mCBSa Psy6((HUO@@ULcaņ s%oNSHD m,Dvt ZKc\Z+ͨ]L#_yHc1#m<,T-c&&M ݑ| pFΑ !T6peR#Bݱ{1KkFRub:Ÿm3=hthT"fBuvX[KmcsNc!B"tY+;bX_/˶x }6X#'_D^ SI~2B8'{ ,@C;G-2U)_Uc6?;Z6*[Hv nf{G}S a$2:"/Y)B4fo;?v^#wL_Js7s n0}A_Og+}ߥ޿J]kT >$zqv?gv-Oq F8m5&MMVhKC6a-z{QZx-1b2m*QO!{F4 ^e;gb·:7 b5MuRFRٰ,OnLqs/[أ?8D= ;YTZX>)</δJqT{Cȸ8YlZW]vNϠ鸠&į@RDP1T&c|o3,i>ɣ7W #گ.WaMi9Ҥ+y(J:CR۬ϊ6![g})oo3qD(f yL 6k!]&-/RnUl(Z`> 4p䙜 8tˈkPXs4m2Oo劦t]ao4tL_Y0y ?߇RY=H1ly.jЛ^.~0{aϔLC~D\-q\2IT)RQ*"!̲ȁ[/ph+h7uPVqj3^ٿ eMR=JbkJ/cbVKo2T87A܂[ W?<UW e;PXײ2Q|],y :hkF.sT>@ YC:!w;K5I=IQ\ $!$_֛nqDi9WST9*læ|^d-ٮy+mLQOV)Zd`G ^O?hnz|l~hd؅_0%ɇBHYNn]IQGRznz[HDxI {_VMg5MՖLp'ExU*R:4QOz(] )1;xUh`O9[nj>|Ӓˋ7llPH\X*ơ0)adN}⬰[gM'RZfF}R%L367ʛ4Q!%=ij-c0xmJZ0`J>t:"2 'AJq%lLEBU>t/}\CcJx,*;zEXp͛Re?c\b=? uٰLf컼`vO׾zlLHL֠ѣK*dFwK͉bO}hO=x|e.iBzÎC 8Uϴ8O̘pC E>Jl >s1|c`x8%Ϙrxr Z%jʱ"RTXkS3gKS\=uD':;Z# %G$ F#G3`Wiiehpc`ʐyt!bG8 _1N5+eFu@J^Y̝cO-%JFo5x$"xrkb|nk L{jt-Z=z-ģ_ELg$U gA)fHv`v_;?X /y5K8|߅ڡGD|4fr qFi;&bs4PM|D)wc8S:'PJVDld>}J.^zc]bɚyCu≯3[K%#q.X–;KsۺNԮ7S-/)P@OhPM~ǼӫyI."BYtY"f{d>J{u9Mt!o!2 'Ew8ٽ #zHUR5i2fT{M[]7׻[: gU? RNfhu=b׽vwV$k֔r˫߿[oٱs}[¯d1D9Ɋ \dwλfez3YMƏTaXˈ!07tak}6MnAWWA5iM~}/_C^1 F/ 74{/]q}MWI)4&5<J5"ZgcƗ1c>lΔ>!hMZyYuzM*T!+͟':~JgiD;K)vn]13~P1^$_S4ynfBFi437(x I^>fụR gm|[Lj  !`?z-PNo!Oji(˪i+3@vx(l2,??Ra@98)鷙(LL+"1~s2W0Q|! .dˆh}φEeK_yP,w,QwtOPײ>Riab&='6¶Pxs&V]^JN2Df*ꄻ>ؙSl!ʽ NW63s|(zaDjj#U0dq1J9Z|C > 5ԙ>791 Y-xEm6Xzީ:y,X`pp,MA{DxRuX`MmI(uS*_7J#:L JP\,M@T6{K`(B Y^G2iJ.ŭQix]=3hsXV8{;=ՃFRI EBO!m,.1\{oqDZ:.E=^%&ʶPp) YBV#`"./zsv,Ď(IZHEOW6F-SyQ2r\ s*!? ؓ@,&Ze݁BQadAmJdEb9[΂Lsb=гk7 6Xϵ;] biC1ҋ#\瑠\+wR8/u~Ѷ(SMR׳x2jbP7"[*!hEsjQ=\Oԍ:BW Ӛ9>vj#(Æ tay5ui$Y ~0Ty8bKMF>@Rᕾ[oo!Kx B /;Lw&J"Ne}q] ILpݢ+QEPqç`aFPѼՒI;hӠ(bA3D^HW֦oeyxϕ FA1 q-DBcK`rzl.q5x!W'+IϬc?;Se( ;ht%sFu$#vd,,9ErνeR;r;R5x> *Wͪ,=%&#I>׸ܙQ)u]wXy8lbd+V2= Y| Z`5s0/Pe~uAm^" _5Q6qd(*:ATЗO2W>?8g"I`BU]d.sd}u\&&jW"쫂Ӕ!7\ h9wZY*}3B¡嶟@Q .jfi5KhԤt3cGZ>OnI'~ýo|8M`r6yV}>wR#o3IȒ{9g N &O!M)JzcM)*Ii]wQzWM f=j^Q1'nnoD,056BS*'K/CmQ&7ZP ׂQ-m°e1!73kEw4BuӢ2kYE88Q2p{13 >$'*atF"JeQoyNEʧ#:8OX"y/C3`Zhψgk&cc.76Dx̮7lʋW\@*Ac4C#`{OQFEgx? 0Y(UTݦҩ~MNևSـ~xcD;[jfqɷDa1rܮRJܹ]TtB0a7>]sǔBOOE!n8'tT,4`H XuE<-5e>Wf ղRѣ|lRj>7AR<:pid2>$s-P\c\5pyA<,l.h!q{J!6{)>KZqED{yT:6S%M/n I&1 ljZΘ?+[}k5:\(i6-*"RgL}Y2wbXU `(l ߔ_pf Q䤻&c0s@.f Ѹc[$AaZ1 Xg[R߷aW/ N,4Q36ażWFc@WK|̮.I\ٷRp;^AL!x wC-=+\zczpr$Ŷf?;EȊLoS_5gm`O_HvDPQ}so΅^T'yPeyewC'Mi7FKiI gf J!WvۡK2XJs0k1T||P4%C! deO~H%2iЌrrĖH G;EmؤYY\~Ԋw9\_P= pBr1V>t%ejQ$y!;wQ\!C&L&#fxLK~/&HnIZzgv Kו?d6q6A#OİHյQiND# {EFd( t;:4e{@cq**ްSVi09li[BV7[8cas2^(zHoYh*tnSq# (&{0>N|,nN`. UL[t% ӕ?0B|M;j,gFhU׭$ zm^ٺZ[COVy,PClVհ_^MAO8b?R:xU.oޞ &c& ffU) 1~ ^ISk0?k) _CE~5+- &) ~,yĴ PeI VꅠZ N>JO+Gn-%rdH_ Ak-̓1i6bWHھTL([2DTǶ0)OEtW&K?56^~&kprv}CQ#,ct+&*v+d }0T ;yW;ϰEd29~L;:KWţ%Fnqve{?*qDY.( DAV lIUKZ\Aje"b1t nf&4FCm [y*Cvz8oWըXBB5DKbīEu@8h o!Ôvu Z5zVE6w00K!E]gsVmx9LrM܇dghxjkxyi88{lkPB , տG>yX)3ڴ5 w4?DƧLIrs~Y J! h]B_tm%ZafsC'ҹ$;X #l̮^ZG$0pL%wX(Xk>Ir)lER5zIzkPB9E ^%!#5=ȩI-xF"$qU='k~ܻGj* '5M;?;JCSQa*U@oŅdeuu?Ѷ-w\V=r}|=Fz9GoWKdS:,D .afShn'jUA)ESJ~qAK.wU򱊢o){ety|KJ\gM 29= d5 qs[D[ʴNq9uNV)Mث6q7+ yL8 q)q8?^zPoaM$P"#rмP,FSݍtf)zIڿ1%]^P`DޝKQ?㛿s$cnsx]8m2 4VYGDӖa`#bbB|JM54TSxggش;9uo+ gcUd<\8NEMgI B]]D1]CC7nV*0`Mb'bZ4aZFRsu#4 ["c}ۆ<1[G%I=;.K Ǐ!ZΓl>Mz|WRZ)H4)1jv)x+ָ5`Z,Z]ԗ`ޅL=蔅x|UXX:!}qX'jrp!!>+/#tz.71VF`mPqkٞz,/m&[\hLqi]F[Y ՚:ҎjrIOM2b+2Iaxl)xKDd~UEO:ѯ=zD#n*#y-QީLxiap7 iYX\}x{s{f~Ð-7 g-C%Ȩ{Iuqb3ęV  QeQr`1^&uқE~<̐wz"IaT'Ӧ(D=ۓ.iĭԆ > 'a%']J"/@b3$zXZƎ|pTg_f$ z^0&k8Q7 ۏÕ&<;/Q,]Г&)y>02%̐<UX*Su|NPW=xENx'DoTѥs ?b1D1!): -CTU-1KfQ@Z,yX3#;)aW@:nJĿQDOHDUlexzNkF2j**sG&SMǶM JEc·&W)& 0-^j5gGHq[ܹh*ħxM2a/ޡ:Ioᐬ?G|.9l/T[lu⁍u^%?QAmKF{fŝg1ΟzWɇyz^ID`T}FMey)DjJv9s0׽+##md1~SAi6M/ۂOuEGޫmZ;݌lO>݁waǢZv`NSc#I {Dgj^Om+b"aw &wA(ʟ]Z)}DX)bTqhIBN1{ϔ\κihvIy(&\lk4q^'-.ҟ+`6%M)6IsMvk7$CRv`OrwB^mkvӁye 6[L#PYgԦ~bȖɑ<|8~$Y d4fk6Y! ̃ArrCNW\*$ UYyAG 9.]N"Ov{x? X b HJ*uS+(e{K^4ʚv,~L%-ksм.=h{O|w G"% q}?@QJN9˶/9rXI=38]du+Jwf?}CYB˲hlma)~Nk؇0EВ 'a3*gw%ȢssF#Q59nqLvSƈ *`a+Lq6`ұSF"o~G֮(}q֔+U*."05u4!|HJcX2B C! In+D6t/10hdjBpSRϚí׋Q{9!z'''a).Tҵ$VK>c,{G28K %O$%K`gHĚ JiU^@Ue)ht9k$̔~pC+ i31gs+JQdHfr0Z1N)ׂlJklJlBփ^wAla>&w5|^vF!5lOy0}5I @䍊٠n'pVw; uXl1~=A/¾u\Y$9+`O7dg\!:51PiyEѼ869JXfU}Q4IjOZ Y)9jrUmF>ą[>Ǚ>f文qÙhdǛ4nG:Mav-V[ϼ=۾}g?-ݕϝ;:6;yb;O셋^$c:!3`|,6_L24/ѝ@A^9,9DЂ}E~RRP4ƽ^4GN8fCRhN# (3eGNa2 CSMRnu!)%d(}r ͦŠ}ǩO4) |8 W  /vKd7H*l)"]K v؇goE gc5|8Ubl9~+Som業~a`83$ǻ2ʴfWQ~ N(uP7Wj2_-:y+o4e?6j bFZ0˔،ch"s5׍T#g<|pU-<\cQWLGtndg*Af ]3 eM(ټ+c\T*'O#vwFMomr|m.0\UZ.al@= SnLgLI}(ʀ&[SbM. AGpO!c2R% K?S pJ`Xc=E r9.G3&(]_$} g1oWZ/gM?)y&WyPZ# LPN8.QD nmB'oAs %b#=Ԟ-G̞Ie|-|Og9䩑j>>$rޛ)6H14K}((HGG,uf:HbAWnېvZ4k v9UL ΕN.e#zRZ'8õ[0zx_ƷO1L%DxL|>QҷSz_}*9H X)1jU9k( vGg|t$wh ^zx{L(jMАCH}N7?qoB!o~ب_+ }XQOf>k|c ]zmH9fRt7$絣*eA:eeXC^ dXt5U\B34?iJcS3@u OkaHxu94Yozx+qlzHԓ+LP1`Ȃv>@h◾};8e~(y, $2MguTx_0*b0Ѹz(F7U&Uw\؊ur,^ hit.mKR p/п~ZW-LfZr} :i:IWjLE }5f?ܳo[-a@ZVDNG^ Ϥv4f C,D ǐr:H#E+&I j׼ F"zYn#\hk?l#6o;碙p_6Sz uϦ&r}'^; ^Ʈד 8SDU+_F} c}uu@Sf66"MI펚g R3I"^k,4,ʘ.V/sh%:ri[y3 43s U5h+R؞D|N#WW#Q Ją1- 37ڡk fLR""Y:75&ծAp Vk8 $ !R3?+y0LThKp%6P4nΘqvaȃ}Anv)8bϯI-FyGP%^hхp-ۻN7i~zjDY}L& \%cˑ1mqcf>%Q񢚵<tS7^= =2>OJ˿ TkP>L$>t$x-YBܛYOK8Ի' LGuvy +sO@\ Ex/<½2h33a̯C`WvlV: {=xr@Zp5Z1S^h/+21{ RX+@Dz6NyNƠ~WǛ^ CN8JgA>ůH^L"/bdtLt3;$ǻ74in["0s|쉦RʾE!Z%uK% U *7 x'-*˨?q)8+^ņ @cB, L(曩{Ol|!ܪ6ާ~ƒN (T*i>E!/O8!v i(ut/Bm5P>cNAG<-EL>-7 ̬mg1OMrysP;?|a^zcnKM:p8 =!-IÂ"QzŎRzjVXPީQZ"Zt68 >q֊YeR\I*<Dn>l*Ev"g3#ǵ57wz8]xk3eI?X=3X63(Ʉ>>8h's(HOHXD \rB@^v+- +9 `UP#'񦛬Y! 㷈xNKp4}^L7Mԥ LͿr׵heނ^U":\xCOtha$αGq\Ia"T p<M}bj Ʈ.eXZ<;xY+pnĒ d*1kuO>>2F|☎\@yEoQK4TTI| h3m-ue vwxX3F:L蝎%<q߿>!Te4 (evRoe?0ZHXr 7X% YLTۈ}Z=r}lh5JJ9vOeUxy1QkK$d^)qhpgau 鈒;.΅YǒҪeEdq֖M0t9H_}Vtg~Շ\$%[>,a5C\nԧ'*eefJĞ yl<֕;}++V1;0e -IԸ[51b7޼a}KmNKX .qNn32Xe >KY;Nj~phAKnF4.1HUoNۥs#mgDa?-l"9~ RyX,kP|(̵:ʹ=e}1i[HY̎7@]M|\9G !Y(1b2.UN_ 5%MLiBnIun˲ŋu]H'y[N!LxҲ yR~bq ۳r{9%`OL yS3%t"ϊUHϔUUiUݠ} 5.WsO5Ci{cX)<-3~Dpy,E?p22 [`?hFe:J~Kl1b _ S^j8ᯩ%$Ӣ q@洓&ce(̾UԟAT.BR2ʜ k/ݽϰn78 ^AX ,]j=`&MUȆ12@{l_+. +$ ϸD5=]nmD<*}@K_d2J [^+$T&-<y UO+Eb=@}/_q_JЬmp#OF4F4ȸJQIH p=yR݄e1|{n] 9&9K"t·fP08zH-YK9p#%N,t{eRm2qPѬR4O%ܳ9y[zpr%G 7]`=Tl5wzޓ\͞r W[ҥ[p;XS'qIYj#Qͱ*sZ)c4ȁ8pH6QUSK 8Uhef%6õv0qBtu5Gp5} *e;xXCD˛ͽjdw!)n #@vs_IbX^'5 fKe=٘+,}5l]4&WNOC9DϑQ%:#,C6-y=pٔtCE g 0cTr?WT6|mנF}},sh^ȍؕ$5O{UC9` cydi\ *+R-0LVwcF/=Wz処6JIvͪ6?{7*).:=}> AXג.%͚G&-2>p'b>0•[DH^¸U#'R/eյ#]{Yqk8XlDy=[#E-UzRI0lQw$(N.mW[o XR&;N(k:~ന@lCNAETe#yxڳ@>p,Rx Wfj )fC݊)mt0 ΔH8y`1'xi<7>yW$$G0YwdpMrvn CX%%5=lnbBά+|tC/ð:"P6?[Fn7e72@ae-e (H ѥ*sTe4gŗSY8߭+vcWmR=ez8RiS##0\uDt/e"ς/NF=<&B)B.-zb |b,Fb պS|=> stream xڍTk6L#!!݃tϐ t 0304Htҝ"] " y9k}ߚfkk6f}>yDCM=  ('_a|6# IQ1E0ꖧ ݜ !HT$&@H "jaW|68 G.G5$.. AB0&eq]Ї[C!(j)eB!$<<<ήp /A\!Hw `G?>'Eym j Vl H}5 6CCu6?vUj.[[Ý`f:A(O/ E;o`{`.|+/yH( u%QWSV(!0+)Bcs0/` a0A] jQnC (@\Ok{_ IЯ?Bn}\ w>ZV;( a|{H' { '[{aN^߯<>{||" 1 耡OSφοf ߽෦8Ph}v?nHww;C"z uMj 3fP99}PWe'Fc?q_CAt_odY;޾9\o;^R f 5a"0 IPDEoapm Vub_?H 7F[ @E[?oA ֺ% vUxB֒!!oΪ<6?HOms!.pSV)C$J'rLW>[q[t.}>MlßH?|]=ܖQ#f z:["3^Ϻ҅Mݭ*G?Kb 'rpIwRթf|JViS# NM-3;ۨ' &VDbD+jb-Vډm':=ͮ:\NZp={:&XH8zn;QDewK DJ -kvٵKCjNߏ[#64)l A;խ)i{H?IpcXWv efmZGD5F%TY&otw2weu)1zM{'Ү_F:rΪlr(fcg2k<Y2J>~Wv Ѯո/vb'D2SV۳Ppkqt]' oRsp,-ʙogұJWv!)1|T_L:\Ÿᴕg2FH_a{PP 7h>$ci-!HYJFޓ{uyюIZ5@LRᧀ/Nb4ȴwC zŒ/=Fd[0YY9fx}.Yn}_3\ }竗|'{# _XT 8M&gb?[id8s鍎/@3֙{߀)c{\C2&f`{Ĉֿx0-NA-n Ux``Uqֱ2\M+ܼ&((d5 )mU)bIMizm"o+&p7 (fx}GC0ʣLH"`-}O+7X}~8a:VEV?ӄE5}0d%}p"dp-yoE0pĭSt-]a9mcZq\4Aqǃ=IBA`\DD&Őpsl}:>QCÃeSժx v@J5d#eIKw_*srhա8U[5'ɱ{ʻ-1?P8S|գt&";I]$<jRq|(hm@YE,ߓ.N/BnaBlA%zhz돥 22-t[aDa %ն.|s)W.p\tiEAVHB5w0N!u´OM_sȇd<vaX)KXzZzY({뗬x){{,՘0cj~p25}9*Tz$/<}M-z(glkƿ 5Aoc*npfb>Zl'=8ܭ ,ӶUȬ{#cQ|O=w"ދCѬ:1e܄iiQϳxicĬddټ{fQn19HQ$Ez9 *FvqɎH[sO@^Gjgޤw?,qpK8XFk^XD^&VY"؇& %i;V"6dcJx"wk /h;rO "2?3 s6kM׹4z7Vl[fT>),DZR$""K~UBƮ]H ̪8?cxq~Oʹs{@%~9 W9f>x(rͽ .ԥts#Ӛa%W;Yb <.8/pdT!ۅYIZE5P2,t2?L k}~&&6&G),{H}vz_ +;DO1UW/n|,i<.ǢQ砙AE}0 UGHTC>0vK TB/;z !B%?w]hMx]`SYYUm=jo^7"I!*Z&ZTaCWs+It> 2lb Δv%%@Fkj3rB 1Z>ˁ9V M==JߺPv&̽v,0'I!04$G/pAuR<]រjOXm LI {z>%A}=1Z]zǯNg37d }x9\ˆ52p!D/fR0|j@o%>bVԒ*-Ne'"sd3f?cu<VZ⻐Ȏ"x!e~} sJdzP)WH!0%ps3Zv[~614Z%ӛDz2nfEr NWp[(2m6J{rvewz~S$f NcMrb"#}f-"ňWt<54D"um~xNO$)(@[ RLSfSwA}v`2|X/mgNaQB̋iđ!icx$nkEXi묱J 3~j|PBLzf#5H{p]&ַN?EWQv:7[/g?HNK.=3y۪ލ`idv}g؈p7} ,q|6%qݞ聸_&pP-uQR_Ϭ1Q '+M/gn,F+jTv;I@M[ZKe!`}UOep@Ii,IC"4lQC_Cz\xd|%,~[r8Ӫw ,2Z3*P viaiăInE޾YFjU+!ەRiz"#|ܛijqG Wpٍ y49^aB}6TY 8Co:vf/}\K-Jlʹ }dDw5GVv'a>Of"{*oRDq̹'5U%ל}Wq0թK135d4Ƹr[۝>svu/Qxn,$]q\ip?fqHT T&ؘQV'VyFnKϼ^vs(BgacK]wմxGmM*1T}Fƥ&L#?3̯ ~ȯ ׹^nؑ[Tծ*w"^R)qt:kFa wfawt}>C(j+R<9%={v^|#*[箳ERs}S֜-NײNdFw-tnj_\ѦG%\,f3/yXO3^?vڷ7W0 n ~wPIly#ldϴp{jɛ#¹ip>G2v\i<]ӆq^W:\G_ 'HWC3y> |э%cA#a.y`Ka_HtB={GzM|t_Kni^=; Vfg2Ў6IGRSstO@?fĉ:7~F]3|spњjTFgc7#eC|=h.< LqqO5ބB fxv4'˟gx َY2K;4zcҶ\gvKIVul֋,cy'{ݧ6g ԙj*kk115L, ^ h|掦,td8ÄV"z6=5Et/ӽeDƟp>Z n+XΉpۓLoO,FD&'$0>3Dٰ:(V|d?=L·>xsZmac O,s ej0jnm7n3"G4O먜.rnՂC/GI >Oeg RɱG%wX3h-!(=߀qo`mJ1A], :L> MMk'Q+H3}c 3 n)HQBFgQ76/['^ &wbrg\2y=}րU&k!;v#!³7j~Al!< {|4d3T󢇭]FW)o(*Za32c!eTppo6Rm[rby{G)!"hVVZq,KF}f+2/pS *OװL~(0c䒁%Jy_[- *FW)^\s{4p.2^Kġ`zq^|=YP34Z4YV^'JYFNxwIHRIi9% 26ЩbYM|Lq2=紜rP5:>S^v)"]f~V'ztQV[b!ksw\v薴4<J,(*ծ4lF폝8jԈ0d2O2Kxt!:OFMS{vSګI 5't Z:N:t!aȿyHKWZSL1s ֿi,DTw<)>>koxdjݡQC9祇ݽpaOy?B!,L4#up|zm0ܘԠE%v7P=zld?R LY>,5P`ĸ^}r%$#ۼK2G礌{}h~"%h,[EՌy\'i&2thnco# "CTqꅪ^>4[nBߝwդñ1\ $T~Dr@=bWt 9T)nfqiod}qofK&u4r\ 1Yo{M.h l+jt STn矇#ʤ@:?f:QlwjVXnk NM!޹0ϧaWi;Q` &X>x.^(,a$&]Rp[hޣC2.iA, rl7N!} #t/G}Q6v y6K?<~?{M5ܼo27,}3FbXL!|NDU^> @73;qr"> p@Iy6OXǑS2N|&ߘ~w)< vxY**qٓ-+@9X*ՀerMDV˧ :7UzWcjXF~ZϜMQ0e/A ˰l*|[ze Ru|38}ַdȸ$,pwo8oyĬC&:~,p/bEg+Xj4&R 2%r^?ff2FIZ5%_aFdTP[(p4 endstream endobj 353 0 obj << /Length1 1570 /Length2 8490 /Length3 0 /Length 9518 /Filter /FlateDecode >> stream xڍP\[.Cp 4$4\B@p'%Kɽ3sg[֮H!i 0WnN0@ZE[rUPº+xkT4ǘg5OFAJob0gF1 5{-yrmnrr2*s±i&/I}?7s+fEa.)2N(]lE3yB;F?]a|Kc| ӗmuР'}$#\t^ͻ+N@-qƀ-qOS1_dyj-t~Ηrl'=TO[G]UO["fc񣽍K\`*H{^rIﱴz)~vNBYG8$ >\>WbWazvu\z̴oE4P)xsIɖ\{t5]|j=RX~y0Ԫ]nblsD  K]/Pnطl9+'toE9fPn=+5D@'𬒅RqZ?1%uMU{Ɋ֛n|x UnƎ2@ ~o&:ݤgAaǯf8W8g#&dLЏhQc y FX&D _D_㉺/s}"&#hF+>$}‡}mZpL8JsKPİ~j?7i:]Yi\ 1]I8K(x-أHW_wc0d7ĕ܄0:+Y=M1ņ-lDZ[dJRFz :8&.$δ.&)TܓnakGN$s+;xn^CoG٩bNzAv//5V˿Q/YCt3J2ieXu+rS?״CNS8>Fՠf!R3-m%+Y pITex&#M:A׎fyŲLFZ| 1uOjgꃧ1\z#O:4C܈=x.uG^ZCL.md?{ 4/ pwRJ*t*'^}lyt}0˿`tl9V9QQSI6 Ay"?Y57@||E4sPJ}'G989^`ƲR]ܜ'S rp]-E/fJ+ZhI(MZlQf`1:h4/Gú`h>]5h! LLl5a fmn(5T2-1-:zjFh(lP;[TbULUr֢7! 9gVy#f D\bލm?+G1@_nw{;9Wfx Y$t+ 1e)eeQOY6,g]ZGy=ўHh;zad @o3;++umlZ3gHG@gfՒ(AlG܁!\*)̀42c.( .M7۟E$%yQaõU7Ug>ރtzNI.]XIz2:6܈o?TAs ntZjNM妔M$F{vk=_9%[wmE Qp|\qTFzor(-Ί/oN*bRr8H9)&#[gj! #=}R=7'Ň- ;P$#[hf'E5~yUF-ڹ:^#MŹ߃?gU3-"LemHB# ዺb$``y[1SW3kIMOqRŘ'+t(z{ Fcd9a:r9Xߣ'K@kCũL q/ǽm"֬r$4'!ObZ"R*t% hPIYardAW]%tM8! \V bZ[+]bFx.G2x΍~AU y8zt"J}.[b9߳:41〇8Z%IEI`ʊF3d zLͧ!Bo¥TkZ? ~AEU'N!y&gkY^g)QrH}Tƻ#ޘ2'rc]V:PY_cY+Myi6|fzp˚Cӓ԰)JZGS^ q(F.! DTu|Ĥ*BdC<6EWQl6tN~ɠٿF53"nkAA|0^02#zd rϞ-?HVgy%y6&o୬2ZkGmDxV_MTr9 5oA(-=jX5e2́`kDT3ѤZTeb,A""* _}۱F,t-EAEǫG8͜I#sUrҹ$I-@WwQԤ̋ 7.'\;!?P-eZFkH:! 8CfwWt (OӟG+knq}(M\o8 Yrx㹹Yox)}ߦ/TolpEV&`o, T}R4raG d\N腢9;Nnt޳%N˛kpc Eui46U~Zkω]*B ut^~RMyk/ ӑMf?O'P7;͓ ߽zGH;uy1ķt@o=MVt5X]w k3[ = Fe5 x rM}UXC= eV5:f }ׁ CoR%}ZMκ 6R+ ]jm7 Nò؃3h,/g vFbcZX?>|=t >_I@K:V@x}fbXhEnً9if7io ef=i{~DEHEEeȬ_N Fر[y Q6.M꾙Uh(%LF>V4lD#o'[e% /{M^|.K/_x/*:%`^$[΀3t[Ui?D=e4<uJWK_KF|D7 ÜQWmg?FvozvSRM/q9LL{~դw37cm ],P,ɀPV0'X7s5Bx'oWd#).q&tX硡bu]q\@HEa,YFn7SN~0(}r˜l>^5Qw Q!T0>ڬ_J5f;/^y;&D%}\7iAm゙"K7D.zd-g$ތ@n\~/;5lwo%ನȗ-5&}/| n/DYly q"m98Xl_-[0@EǟG?#azLMzuZ*L9ȓȆ]*AprJzXEcT&Z3h2g ᓇoO(7d(;YBlב|75NRײg잋pR'( HS^\Ԇ9`Ǹ eC-JmÓ7b=Nif-ElmrkVWI  )vsU Jϵ`\d?<^`MZ9037)6%r1!Yw~[>5sPRuk)M*Hۦ沌WEm0  ^1yyn!}m7W]z߷%4ZIPG(h@8u{P1 :z­Gj9ApDO\SXhHc NxK*Bnܭ_5K]P9 q KbUIg7Tb0Pm_đk\? b^ 4b*ktR[a'|KRtg$,x^ҋUЏ'Q@ ?+x%y]2κ\D e.Ƣzi:])6u.]bъN"EcN\8GzbS>ẍ́X7CƳ#R%R"<} h#Pk=%e6bNkZ!-%"ALȒ4Dnc|eɛ5wD! e5 q :z!9MNxZ$r*# l!WeF= AFVZogm%տ3[πa>o L_jp&jrvlԿ9rxu`ēhbp@~oA3qwH=wz0:PRݒۂVYK["m_>2e)5QLNUJ ʊ]W5+2{X5(n儮{a8#kt8;f].*SZJyALs{=٫,G%F-uE(>_qZD!4u෦E)Yk!8 Etl^H?~|IyUǞ*[>7$U ޘ>vNu`j p5_)&@ }oy31Y+<*z$2w iLd:R 02-Jikoׅ qk4W[к"m;rHz(P]}FNND1 xؐv6MZxW/c!w-]-C҂SI꺎yp+ZE!xA ;>1:N5Jw>)(h nH%N/vW˻< T`]eܓ!FG/rjż´'"|تi#\ȟ.t8'A=qgDN_i&|yA!ćrz.b T1 }%rC"YePy JP̏֞bfPbqLMxf* |lu:AKH1[勞U{f6E8QBAݗFuXPWڲ7n+f2ķ&r10gň^Fs8ywYOPi8zBZwÆ3OR"LێJ4vyFT;J|d3$DkSHzjY\L*EsK%;*ɩiO) 7@,HWrA<1`XBMת轌n_CbOcuDZ>h'kx̒f :&#-h̻F#o6]-  U~g +:^\E*\*lV7YB3m@pc&qh)wogLOZD|.Y'dR`X5LGTs@%\mcv_˻IIz$&X/"7ybIlXԖUeho{%U;D vFDlk8%JL)To M5='B$2xlw җ셁y&élcU8_Dc,[V/8ciw4O=ěJ-  &L6w*FAൽrJԈ@'$#v^aٟMi;NXah j endstream endobj 355 0 obj << /Length1 1358 /Length2 5966 /Length3 0 /Length 6905 /Filter /FlateDecode >> stream xڍVT]&K`h%C:``I)A:DDRNA:DiKw޵]Z󞳟yװ1l0(W( x'@A\66NJfC`P?H"tӂA.!$%( v->: =z@Spr$$x~][B8]'ڂ\0[Ҏ$?7px z`8 l.11>\6#ǬGx<b ‘P;y6@_Mqj|NWD`- @0@[YvA.p2l u du!|p˯A^ Eqէ"oݗX0o=jg;O7~C(҄@1qqu eFs#[B? <<W@`El(ّf=rI<[v0˯DGw`>^ WP*P \3Wcՠ0ğb>_3c`7m?o+AG7 ('}-Rt5Ԁ<ߗ+C|v:  ց!>(䀀!Ueh| JP[/u @ _\䈑;Rv` Aad^ k"~{/+?2zzx u{c-b0l;? w oĶi?yEUq&:My*x+9Y:Uf Gʾ]^zr_nBћP;= u.{T|zG"f6uVj,35)b{m3M͌~@Çh;FDn8"U~NVSjzSґ v4uYҢ9&"Wm4#)ӺyWҒqʘF<#MY@CQ!¬t%R92OwgIֵ. 2ouiN$ +=X(&qqR)_Nb4O) &r\&- ix^E$ ̡u0h"WFqBrxް`4֢Nvs̉ҷ6j'yq^g/s7P#wtV>-2F <^UY5Z241*AxGJŴuȨ#O}FuIF&%)r"WUX1„&b4GOW9ЇT_Ɨwvrnv}n)(;(=ê9@ o]#^_ƆgbڶI2),WzTh) 2?󘖟W34:PڤQ7 SԥMhE"9y^$aVCYM{fv+|#elp:ɤ+-ɨO+}65#ڮ8]W%\6:jD^>E%>;ؔ^9h3SkOyymn@I#ӀU0[B;Pj}uKV[yݑcAJy Yc4w E1(._٭ogt~H^6_NߥCajvNBm6U-ÆR热! /.}\=js8ga<7Rs2)2wRQV =\%U.RPAU9r5P7V~ʛTI[ʶE'򐤾  V\$x\Ԯ3d"(ꞝR˄4z9zP%K Y8r4aܭ裴wP&7XթH7dкI*weS( /DbK̘J<LuQ 3b9:]c6f>y‘Rq>JJ$q6~Ϻfkm1nTbY}jHӤ &ј Gft"+]}O] wܧV'l$CI5tk_~KQ*鵛?!7ث+#>u09MQAhmj^zhu [sH$#N_[fZKs Lo+"^zC(ſh{`ܼpg_/CwoT;o8A6WJ'}eᛆ*\ȟ=/ W :9> XgS";1yڰYĔW/]Y(qTiput-J`Kx.1Mʚ2Jbz}pltd͇YIUq ˋ1:Y20`[vJ0ωWq@hp^>M໇o$Uw8~YIrz]^:H)WSФGw,$5o|#>TluFq/=؊bg&aB5kK9UxHoب2C7ہVR^Ήan-xsN骗i\fHoK.^cFOLf #S\ԺFbXs]"I#r֥ero䩘g,FNcՆRъ> ȏp]H$^ޕm[[֢驦bij*Դ)5c;OhZ9;򏘸md}: $Go I]UU他%K^rZ,ܡZ4jrbeع$Y<-0`((\2.M>#!=eXb{zEꌛmZaHn@~Y|z!HŤr"Du* uˊ5]Cq<kEG qm{ul_-brg}hjmK[{)IC9fJ=$ |gKز( wt`z*eictF)& ߀ fA ʬ 3%6|s7ӂ%Q πuB͛7_n~hC^'YkTE`=bOoϟ'6;&8qck ֯|0hp\HOq =xDxO5lO~oڞL%! 'tzvNtaF1asRlQݚU4E"b464yS,O[1y׈cz)ȈljQz)\QLOd}ƭn5'<*DcUY!,;KEB1+,.|r.BbIN `eXOw&hظH|N9jӋď\g! : e>,Q3U8cyŘEJw}O(/eۡ4(<^kDEZ!& EMb-uw*6Q:L:] b`^jnU1ssd.0Y 9 y7eh5鏎m`W5]Ə/l>cKlRrqes >mZ>>6:$5|$+'ԲV)]1}=޻;w-!AL^$f|gByacey WPPc_JWo~T%gYi>)g>$qQ='h)l+jj1Cqux}.vîNUpbZsn.) ٺ#TcC'j2jLXbdCSע~w|0S*b kVf#'#{>:xB?`U~|JVx/ubp+)뷆l+d+]ζ9:nGMLIiM9myu-qhC@%GO)(#M,{x}Z.-5?PX_A\lTKY ,8pTroSEZ叔-<زMD!rV8/3Y>zQ>Ehak[IgMfJn~7'nÛl2+"Y'Q|p~8'Wߕ JzI F-+ˎ#Po\' @ፓt^L HQ׸h0ϊ`X[,Qq{ٲNpk.x[]t,a-UM2Y_mL1BwjIRvk3ڗ:n>aV'] mw\xdT1g$&g &+]JlSyd6dfF^&>E{!6ꎧ'fb~vZc<k2`)RI\vfƣ@7V.#\LKJ!鍝_u?8FaZc}BFK͋~1oc6jUHy$`.ՙbRd椆_ӾAsNzgD5}>JZ,>)Y2ykA˽.ϩsu}]*1I돞J+ +#%S&/dhd%+)WΣM:1I._8b˰ikԦM }V62Tb:KO }?I$EȱPú%f jw>-aBH;H,;LYܽ|4#|Ԗvs/r'3D|DF$p~L,O9@^m30!+1VqS-7HW29prKX/܀殿ԥYw,z В]+a#͗VRLnѪ@(,eQz|"͆;ZM)ӂNE8eDPG+`7>2&],ơ~}jK3Y2Ϧ_Mߴ?55Hn'=t=gwA+#v(SvaxFy% !/1^Kbt_kr endstream endobj 357 0 obj << /Length1 1373 /Length2 6096 /Length3 0 /Length 7038 /Filter /FlateDecode >> stream xڍwTl7ҍ #FnPBc6F74 !tJJ7H! !Ny~;;gw3 #E@5}I$&f0/- !ˮQ:qG:n1,d@>0G@z~H S_G "##%'E `8@rc*BnSE# !+,+vB y0 E@ݡ"\`^MN(_0 (`(  w"Sm=_Ww'!;`nP Ꮏn^L< s;`4h y`n'd  GyOB0[sp/<௳ {Goas8FE3@R2'Nnc8aF/BzCA08cPd#ah5<'[ p7\f:VIU @ sg#0.@Ն;!25ҿy&/ B< H|O ݿ?hz6V;o;( ]0ojD& u4 .A/oP#ˆahxaŐ%5ovJHH$؏sI #a!8 ` 8!$S\ y~+Ș:(_ H$f_NCh(dn|TvVrWpmDafW0`0:'|S%=W y֫ǭo^%%-VK|GLy=3"C-MnTHsQ ]]0=f^-KzY6!`oV X;NKG}ts:oU'$h'A8jU4|LԫɊ. 8WFLPi"n+64M,lgA-tejq uY<J |~ΌXz^Pij<@E{H6̒z*֪r6YwW͔%IOǘ=OC SAQ|`jo0(97!7q3TX ~(r'QDREE9/$6Z#Q QiqJ :uܮq=.gmnXN|\2~eZ/ SߴJ*K[ "`AOt>>{{\S*gȷ ^5Z踓݋|lQ_tzO`Qcvԥ{c5.qv]_$[7(4$ZyP,l#l}"kU[/-uinDdH>pG+fܚz`{AEWrkl>^yӏ&IqTt>V48˳mXmǿ`Uޒ|9]\Ti=&Fu^V—LkvCÍD9)'jgVߦYwqHARK=O՜4r$.4me] 91 ts]4)Vyv!9_"~ d|* GM5jH3l=xZʼnĨ; i8=GH=y[B~u:od-t$х>gv-VsOzmvJ/11r QqΎ!enIdRPY)/;<Ig^\]RKlu#5dFTڭ`B"#ֳ{ 9T#t,E/yi-i;Ǘ dZiiɒiRה"& NJA3(oSK˞01/|bCFCE@7{3ZlR}Qj5ʊA,Qx[4GG\8Yg3X^b%MƵ^8ٱڰ,X斞Ѽh,[gp0ߺj)yq_DnPOgYҷXaBs+n;'h=uo ﱵUtxZɷ,#&I0SZR=. Ӌ)Qw([r}FsVoȴ}0jg-@B!˓Tn]/Շ5)ۜZ,$Ģ'V6֪vt}v pgJztCXL Aw'*dw~in0>jBL[=lz+A`FR~>,%fC3f&n)K"ֺEyFM *VQg)&X*pǀ #Ȩa8@Gg_(*1lF V_Г 1ՎdT[E+bE蒋:y`=.Tfvt{ }LTzJg2U2f> <}՗'CoB19BųWFsXKUw'w)v zkjsȃZQBM;,/o#v6>,l "" XV?Ɉϑ7AEY ?0Lj3U5{ȜGͧW #M0z^#{1zD(źMU>)PY [5οДEG>>PۏOj:-%OԾ\И~\8 sXƭrH/} L^e}NO.( į{? qp3;|+q,Y|(G^Cq/&?gIU~Hgn›k-W 2K%#[j^%M#҅HDrin󓙿\K5r} я;9Y4TjP1c2>ܒ_hL[_^:cKMWf}pjgݚ7sD0T=[X鷴9I UK[yV$MyS8gIYܸ=̈́6*w) ]I t)Rut6Wp8W' /FUT\p+s?zm'JUDǮ9WvMhNw/zY -dp ќ{ONU)vf63V{dHDBt~A0u1WcΉ~f,Dǜ4/kn_vM (mF簪ŔK> 7k^?~\& !i"뭆l*Dە@NȚYRGEѮBȻ .Ⲩ+CTZm0W(dI?r>aV1|R43or/}Be$yى9ْ?N >#~H1*3j07}iON!zN$WX?;Av5njsϿS2PpMJ'OS_>k:qt3 NOߏo8|\n%T64*xƓ䫂g@S[28$7]oN1X.6=ߛ/$9 ţjcb!+Gfd$7t/y5:)vTp<^!cq! \8AM4 Xy'Fgؾpkט(=9O\rB['B3N#y &u{YfrHT'By^$."ו3O.`l8aIE@\z1~W<<iq9<ɧ>}X{ǹg'cԀL|}3usnB\"އ_ QI0,p@v珆ϵHkgiάphVoӉYJ9abV:Brc٪=]Ivo-b D'񎰇l,bɧ"صa{^6W*8{m;J&i>e -`G ? {+y^PZpvy*s%gSE| 3IG$^"汞JQ~e!72}{D5>Ju.Cϐ+%Ҭ<MHE_dq uh;߀TF J4U*7-"yXz(!B>u|.;֧H4]!:H;AJOqNJwOWXyRjYiiκriJ#nPQiYA5Vb w7cfwSY~8UQS!6s8:&*,p>G5K:"{ '2x+Ԏ1%_VthE1myZYDbAogogܾ3,楶`U._C@襼֣x VQrw7?φҤTo HW"I]:Xh@wɌ#83E*4<;;A x3Q=a×@ ~Q8 54~lFk+m{lv(V?mxnnNl:"Vtٽ /TnkΖM峣q)mF[6Ē)CFw?YIXȪl](72)-ORT,^| [nZ5Dlqq|M> stream xڍvTZ-RB/JHQz{B$B TAAH"]:H"ET~Z9{̙]34QrB;(D, T3`uA|p7_ 1U(oF}܁q DJ"- `1@U/ ' F>gş%&H v*y1Hԃb]aPw c ) B=Egya4{1p'rPD|@SA1p pG(o h =&а[]_{T'2(7ʷb& 4P& *%~ZV?P:mԿ!jH2j< :O4YiL_}7|C]Tq5+Qm/Ԇy G~U]3+Ft(J?ě+u|6M ;8NoƋξ0neef :S^Of+.)J`2D.};xRڪ>Ftts᲻垄kg잻۸ R-gϥU<$sUN]̃i_.i.}k *.#*uj7!]'`.5dI[6@'TA+)IXۮ:Xxw6.A|Z(ͥdo&!uU{Ч?{aI(q$\ Dn)[/ktSQ($W܅~~bnNN<g}_ڱ y}\aD< !x[0=Ԑ|{dB'-ug|CkFuZlk.>ALk]ai$IC=ڗT>NSYM>Y #ǷfA&>,Z.%K3je󱝭LޘY1}z!PrWokᱡO}к uצ۱Lym)НKr.J$-< h ߆9F0k&wR{n8wr 5A 7T:~ت4`iNV-7N(VJ$gW3ockf}CWg-D ezvb`fZS]}ХF ug ԙ(,=$R7TVU˾eYDMsҞqyiҖ ';rG$Q3NvL>'{;ژO2YLUxZjKi{_NV%SL毶 =5!OPv<-jL=9!s[KRDU䈅Aq'rjgӮctB5(6OʛHbR[7J )?U{ogNv>yQ!NrNǝk0Qj7i4hrW>wv6+G6Q0IsHaH?*vY0Tq}2AX8|NNۡqF!$WJsqןi$'Saib;=2kE}Ӝ-i.r:{۬x2.4>z1j?X(uRuS9|$K:F&H*iܯ9SGfL96# H],â V$q y[)x6lU@OXt?2YT ?&<'L⪨I~LDY/7T7ӝ&~%av/,ŇNEkDtc=5ʟDJ{%^Խ_jnvI(|^@(2*r 7>D27E'=%XW 2zǴD-36j,U:y[حYry1'>Uak[)2єm]h>{񈮓5IesP{honjȽ+C5vGԙ;5_%S$Vh|yQ9[W.KGr{A t.Zq7(y/7+NzFRJ=݁ʡ 6*ėmgjNn˓x_['[kܘږ[67w$}BWr iV֧ ݈N`IU* me{Uw2hX/xz<s749I|lfcn,Zmz93^Po1]4h ѳ׮vox"_DK3Ԛ]mO6Ț1{/~EYEkaCo+\^LLﱷ\ZnX4}%F͑ kZQ@#8nD&Q>ϕFzcMy9p2qwn9~կQ>nD\3Y<%-'`20F{Sʷʜ7t !hӵkQcI}/?ȈFu@H]I Ru~8 1(iծtSbYH^\⦹~uiSwĞ,5ʦg`ok|RkN̝ЦejEz]k{_h%0 . Σ f# ypZd[ezyj T,%1ZϡNkc XXׂVq;?JRy!R+R6k'ތ~^h0t{J5CTRPz8S.OPmN45'%Z3 Xa(>yx XZyr0#خdO \n\J,]Q7oB(/t %;ӗG[SZQ,zф3??Py:N\ ᢏń!׵wT|Ty*̓IA}ڧ,1g Zخ"ǺA'゙uX H=*\\ɭKKI;Em(VYp\}=y0jP-#t]H}(Χ4_,/S&؍hNǍ2&>dU?`3RbnsjL}q!$U˨!Tہ|/3,Y7DS}cFKVL^ w^}nZxfcgs_wrL9 ؍ GkLu^2ÜHZR䢿$''c tV+װKT #49^3k HU qŒ C8vEHp,voS1W\K:ITf)oQܭp\&s ؏)bڷ9Pߢ*G{Nzˌ^&.HoVQҐRV_1^/$:/JRjԦYضmzfH۩^֐\ d挗 CK`3ES_M-8EN$W)yӛ}k>f0,clOYқ]\8eR6:Ɔ~ہy.4B(YBhv' CpX}/T:*c{j648ʒ/ +En@2<^AgtmXjn2ynuIZm׃ePSQKlBq.̀%ַ#^+_0?.@ '%Xm-5K$*f4~[Ḷd;BCa(P1.q{28Hٵp*-=K=و+y楾ΒGOtÌ&s]\].ՑWc 헩 d%Rmf/'X7uxqgCJEJV >dEīa@ud6Do<_$A /30t#$G gb "Rf=΄_iD4֩r*i] =3R>:`/ַĢڵIϠ3AɌibH.RLR,;1("Jar%`aDNhqP̥b#LLKhoJ5J's^N^C\ cCH<2Tm/5cܵkFs&=Vp;J=>B*B["U|\#(dHc_[`++KZTK#NKCʣٶģm-H+|C0e{~"Ypppg.~XZd4HHęt12.\8Pϯ$ 6+6+FWt9TTzU-.>Ybp/S`;nOH9~ѐZ&zOm ;L'Uy><{R)zY%kȊ_vb|^S OvWܚ-6yqxҮPW])26X^Wla ݙ+K/`#lD;'@S!lg2N'th8<؛MD O :ݶ/'Y9 ,ezCxqHaK58kFYvҾd/y nwQӔ$m+\SvW ͳT y)s2 YĎt}-ܟD\ w)Ѕux(F@ $tƒXC}_R'WRyڽ2-Joi>)">5n, #hl1޴|CջQ퇨G`QAϷ/c "keHӇ/s<LhgT jDOV9xr:"KVC][4w<rzQnԝ.Ǝsr;C{lCfggL~)~n&V. bϨ2ڭKr>VO#KMiv:;uzAD6.]ަai$iXVX!bU-L\&TAׇ?J!KgMͿ' z6K5,8C.>*N¾x@ Ԣi/H#.-u1>=n?2Iw endstream endobj 361 0 obj << /Length1 2103 /Length2 13687 /Length3 0 /Length 14961 /Filter /FlateDecode >> stream xڍP.k]wwAww\<{.w>;{kfާmӫߡ&W`3w4I;:1YJ6666v$jjMk7;пH WkG%\@&n`L nr@~66;:$M<J,yG+yЙ||p4gwG7(|{@pE\/Gɸݟp]f5y:\d@p=izx`> v+ n8|my̐lĈ<ƅfg]rpDO pKXݑ]&{=nmlKQl>iqo`XYStO;k՚]TzHoFh||?ofum٧|]/?POcƑ&l_F Ǚ{*%wjʤlbSfwe9Õ[`?G5#(7[W#S| G.Dp!%ғi@e3Y&\m;YDQ:$UVա7L˟cqrDߋ3T@;)~R#6VvsUN{`^*t&T;:4.WzFٍ;= "es:("G Қ^-#au4D`}BU:њtZҷ*MoOV˱Jq]N-|޹Џ4]`<}G}-h e6 1ٝ *d_#LZ.@B!hB ]4i"P 9I#z^uGWlG\j{0KJYh-Adё6bUvo}jc#v7`F'' 4q~ګZqͶѓ|WV-:dZƍnKߌf^/rBІhm.%沖Wѭ҉$:]r% h}E\6qZ^¬.=e/1xRFp@Yܺ]1D(-O,;eStl?\"ÍF&}lI 9ihU->WިԹIF?rDv@AUޣ" o{|`S- ) oy#W8/xҾWԇIm{H6>r3+ԎgTx.-)$G&1ؓCGdrRNsq6mCq@E/嬃|L̦|ysVh>s[ŭ>Tjyh:=v-<}0zNc,e=Z nV%@9jK`)vBɕZn>dUt/q2?9%S? k~`DJE .EV%N=9Н̨>KrP.DNl`DE'j慕 1jPn#?[#%\mHNþC QC¼^> 1esT4T3D;SKQO w"Rl=>Djhjj*$$PL iǟyrTDEL1X;喅ٳP *+Gi}J8έvLꭄ|#}i=Pt!dGП$}w{Q?3 DM6~BiWݍcM1cYl5uj?^6 bBi>ۼ$?no qciNG!A){x[k8<XrQwF<߫2U:EV9Ʊ\NZC7m94rl.}-)y3sB:KaUPFqLv_=ŇS=amL:"g E"CfY}綜ĭ9ܵS> P|%gF=ī=DykK|GdD>xجk/OMv׻^I<ݵB@ nasG%HjFNfD*Q7";A @dGZ 3|M,J];6>BLʒW=$823;x,ϥ>w%N<)E5_p!O#t.Njh? R:.{PhǓWْXq$\VǤYR`͎0m\0ĥH;O2 1 d1'XWE^jX(bg:#B4w#B'y]֟8鶢ϗiRC6M#d,f0 Q!mI"<GvZ uSۥX۽$DłܙD9dW#VQ(-sM?XEAKtv<^ XT$ `):jz {zBV j'[YN056]JvWckŏzsxp'FnU?3 SmŽ)+*'&ǦÊԽ̬Лdujq 6 #NV{n5GLQB/RHJ~'%Zϻ{^Om2o`e'p\_9B4e7dÍ!nѣ;Hi[Pc &ax?Ct#^LY"jͰ^hOthaReW 3|ed~BES7J8–721$/ޢ/Q.^8.o$H ~FønĽ'vy zi"#JBzk}Yȉ+e[1DZZ Y)}vX6M@z#;z Ayv"- BP9dvzs}dGQ}y[;N[碬_4T*'t ( || DqM9{ аQ gK~0tEC4P6F2՘,5Ϧeiy(h!sh.|eJD:0{+Cch<"޵wih H):DM)шCbLkd݀Gn/"&>e4dYw!t@8 ay-S}4>ˢÄ^9m.,d*ߐMD1u{r2xy$/gM&l5Syvظ e 5/v`kE 7ojFֵMw~\ n?eNo&W0u*PŽ10'7i<%z52:=1V8Ab4c~"ơeLw/g6v8MBCFyK m!A &S!}k.Uni_7:Jخ%jP. ׊Kw$.Kq۟_rM țݵ^#UGEȩ bO/ڂllx~c·!O;䬪 v\81 & >$K)_[A ]:1VLI avCQ}aT足C=ʅ79QPq %k0k xq;oiʒu7)C UO53:+|AJ^ԯ\iO?!(34\Ň3N_TRw n?-8HCE#؃=l vCkKΣ;G"0VK+o{[ ·m㠁N:*9."0!vDUAhf &X; =_7d %Z=L_F1 ~uJ-yU]1-7bzL_a;QUlGwt+u9 }8 j˥4hڅ$@7tLV?ɸ@ۦ}dZZHB݈-p{0 ttaRtsm,))PuQ4o͕Cey nJj܍s^ҕ^4A-jpô5rVvTKsٜi؄#*GE71s`ѧvTxNY6"E{:\,zh;vb A$tzE p2 H]1䩳F߳[o:? R1L {R%krm*x -тθ 1diL_2zMUɓz!f5~hЌp.)sƫw]?vtØpj; !OO4>?ġlbF#|e&2x%,:_YnV2]7elOGd罹 n;GtgD{͜^d#/B !n. mٲ(Z?D|w8Hھѐ^s+Ym-.dAZ6H8MqfY=.ՍQ`FrH_j[%1" &ouoC'G{ӐSRn}а.I;?a͋AQli6QJ)mf4iGU]Jv(xDG-V#KzpK >#W.t[<:DrL?=܉Yȏ)Z͛ ak 54eK_`,3J22t VMv|K(ۦݳފtL~dk#Ԝ̳U;( G%L*`K°dE\Xk-R]٫X4\Ξ8)'; w;Q+fMb]tERY2g3HhgygQlm-ɰҮU kW0|'>Lߒdct}zPҚ5컄$Gk?7g̈S+2x}& Cǯ,0 t Nma}c&ZGLVC85 8$!L5J㊾n.?wGtޔT 5 Uv H(IPް65_c wbXug7ɵ2i|6ty!)wvDC#,d^>ߐR.W+7ðu eI"唲S1sq%YO{ob5iGdP$!S0 .,K:+ Nk.#) rɑ!/daEJ$;[!Q'W1RKEz?Ew~3 j&'O;uh4ޞ;|5ce zZ'æ5x Tx,&!G%JUs BS`,:ᡗ:^]ِ~Tמ@6'Iv*iOG1nDP!i!x-2b5oԿ%yQUґ <iESO:Z0s gje[.z;EǸ#va|q XZ'Z*'F ^bkWkBj+VUs=EdJĭGީsdF  ?nQ0e{Jhrx Lt E-}auы:,x6iVYCwgɼ6ũu,a~i雏/N6vly|\^ ~LA;(U*IagB|lL)+"S9†̉0}[t֜$4Ҿ753P#p%;/mL՜ 'YR6˞O0H4a(:t#M!6myU-}lLKC>5VXf~0|׊œ>[tscGE|ӓ)A*,H>I iG?B?voL-9^ƻҶ oL݂ZG %P}̋|T8$ꍍQ nO+”p?ZtEImaqjgKF矱֬mimk,{hp 'l}HSqn9x;yY [4*AfP9GQ%6zNJSނ &sYifS>$8Sm#&mzx?- XZ/Q]qb sPdR\%b{Q9}hO65a^̸9CMWJ4$܅\ t'$7f-KgX#5O x|v# X u';i;;Bl.TQ+{>.J+Z56ŞmSHtl4+-lzOJePPI6&*T}u0ݷ-oFrMY dJWoB*T-N( Ǝ}p:iiIE NlB$XYVz^λ3{sRg[򇛦+F!naal6;u78AI=`Z`8z`vEy9e{%Aц#ng9XحلQ3 8 Cf'Ei+d,}jMn>/ԃts3WxЉ;Roj~!þuqI'D\y,t+28T=f<Ę6ydcDns^.EдעPx=zP߭a\Tܝ+3M/ۏno{Cџ<#EkkfAˍKd,Y*W}Vd NG:<0uW!M #q[j6ꪧ~xo/Hxy]o1E Le|KGր])z>fg0#ֲ'nЊq[vĿc+/vxV*Ët#t'nKSZ/Y!gJI0#{(ҞkI+ H՘pC3)A1e0iK\˝:'vxdw!>t?R~)K;/Wr* 'ct?nn`:~~fg#(2@xJPX[Ӗ])Pݢ&eaX(vT`!PO[G_HQ38fjja2ܾba^WK=c3( 6XfUL鲹GХ7kL9xD/_R<^>ВYm_qVD'4=0JuݧSk' #*, iGHmM4 SbdUzHջPIl6.?z]i𑞤F7>-Ib ^[Zw[М`|]ٯQX[3L /+z @{Y},WA,驾WZ5|)y6) T`bbjW|wD~9{yNqf+mΙțlʒpw<5e')N&? 8 .8(Hg:E /8+տxɤzAHm)1ZePG U-& 2\I!`xoW[k^xtU:b(xp :S!ZX:ˢd`*HD»bmaa,Zʉt})Pj[ig>M /F-0r?V,\AD뻠YT)GSz.?ut]{Ƕp$6tW+~J*֗ ZCE7JۘNń-thzlԼ4+*?,wa1ߦ@oTzI"1>7qo)^*=NbȜZ>iLZ{ [/D(Djn3QWFqZ>\3&QExˌG{]WFm ]ocb3\jr.ch ӼԔz}ol&@Nz32T#^·w[l 5ihoI$cm& Oty=O*ST$cǿOi3.1FQsw5ZV0pI7%V*g*ΩEd 4*3',mR>9W:ĄoeUQX^yVcZ=q)3Z"XK/ohz9jYD_NY-nļr7g;v ꙉ}6i @mƛOp)i,2kWL= Ďq.Bg\vBŊFLe_mZ HJdJf7=kT1'OKIE02]%LQ<`kֳ>kge:  ٬/k@.E? bLh5J`(X?:>iDj94b`,@ww9G3u ^XuGiNԨB㩕y0f"*DX>w0ܨ %nR!=Ij9NTX P#'1@⏏Nz+f[*ۜ_æDDŽ!/Hl@}R?4(O 9B7̄ MysPGz,W/ A6$eeӒz .FR{vI!:]q5aԁSj?G]0*JRB' DV !73R# endstream endobj 363 0 obj << /Length1 2172 /Length2 12913 /Length3 0 /Length 14227 /Filter /FlateDecode >> stream xڍeT\‚Cp'k¡p ;] W龷{5FUk9* & #։ *" `ffcdffETp R-@u:ebN`S9-@`eef23 3t01d@@GDJQ8i,<<\mƆ9C's 85@dltr̝x\]] mAf4W 's24n oh9FDJ*X[mNζ&@8?@EZ`Xoz`ad'dcghnak0$dܜ& A`CC kC#_$ӡ#.~ZDdcurD]Mt9WK:=mȾ-?hp~R?^ N5_6E)HjO=Uј D~l.JO^E@b΋\gD /~O'36y3S=.læuD,UkZy#]:Hҹ"2)Ew;`cv}@'In4ax>o4qЈ";$[Oݮu m='ze-ј4A3_kޙ[2Dy|*l= o}M₽gtE̞GyroOP]zCKwlH- !u3{isPX<Z3b#N{̐LPFG:V=PCoK0&ncI_מʨ43Y t7(Kۥ)Fʬ|GMt$9as+:,ALom>L/(i9!%eC ƚrq!jB%3 ]뗦~0A8hC$,]MgI"5i9`X$o՚9QcX`JlDp,cyxЉ9 &0*] o 2a6bpT PѾ_#ȚMV i FI+SrgZKñy; 0-{F:J!"Pir/zq]!P4^Y m@a}3oT?"rkrڹn7B9}fՁJGݐE~"`s} 4 !7%#qzid 6/tz-Aղڑ!Wh5 j9 >nc'g:??~AQNKOtwW hN!HœmCF}q.;~з7IUk Wvp_{mlcq/NCPaHX]Oj;Mf\/(7Dxuy /ݟ:/e45a3=s.-KO[SI %ITZF<}  դt$7题uP}T}!RÎqzV0, AH$#V3eη<qĂ|E"S( n V6Q?~Ѿ6dyoRsU +ۀ#H V oqWA-wKX\liksaZ ;qll@B 8us1lVΕկPZJtYM6.f6 ]ict_3jtZb37p,sCҟf5}fSD LP}~7[g2.Z/L w)9Jw/PGM*kj-9? s ;"YZD@^"^dc|-A x5伾$٬t|qas*r:noǷh[ٞF^ [;ŕWG:S)u@ 3ya6 2HGk!ƥX쐯_4VHf[ZQOQ#Y 90ic 䤽ةqW•x 1~8D"SCqۉd#G$)Q1ezD3*ZB 7kKGw*0< pe؍xgEc&οAv%l]UrB >j0]X9 Lq_)X4Fv,[σ,Oj=2~,\s1A!nIL =2}Wfyn>IS"Pe'E[]W٘>>ĽX<7CnUa`">i.,_9''uN `}!C2#UU/(Ƅ 81+㹡 *1'#V#(gQKD^%u(i>+Q 3j_cWwlO '920 M%GkUS;w5GbMˎqRZ3_6_lP@l9AO$8W|d}xJhR˾,{ ɜ&3l=+>B"7B Ӈa`I,EHo9JFu<"]yn_,UI'Y6w?4=u\JSz=v&$A~h'WwCߪY&Fppjv=V3YCe_z`tI 4oAR'~Ic~q%  h0L'zWʁM}ۧo@fP/Z4MG7Nɯ;4aw<Ǔ["o9zşPKߦh&4@iw?\ wa7MW7crNw&8ĂdDdտԷ H%I*ɉ :Mw#$KI~.gQ#yEBhQ-қbU}=nY,kDjF+ qCGcPrR&jncHd?ýJNi_ =qCjco.D2ze zŃUǘVIyaPJw}~c:ڜK5y80НOsRn0:srTrz=L #C$YB.wm>&k,5 +}FV 3/Ljܯ $te͗S(G{ˈϊb,ut F]J Pd}剫?"D gJ򬲇kD׿b+%}F|si 8 1߅V`nJe;.ꌎV)} ̨*Te^ѱAXlrZ.2Rœݡ g״13ʶ#K6|Q>ΐmyɚ"e!6I&5jc_&5,^ J{8{HL0M+[A0$O0:i u/39e7 5-pkDҡB30CWOCVsb(I7P5F8T;MH[ۣqMoF7Ӣ.vWzhiqOEhij,ՂLʞ4s| qh֧<gG\a0J>GYcS3c|Ŷx^R{}mx^eiV|5`Jv!(sƫx m⧯g{)ǎMF÷Rҍ'̴̄ ]ʷJ,t +Ԭ.8ӯ 6Ͻjj$81+F_II)&g_k_kM {~͞dc7h*wѕ Iݷ$iag)ý-P&bG/ƯOkI4mI G7;^Xȶjbsiij,75BR9|5/`sȏ#b_\a:̶lĄY5!j\8fS&J߉)l,ݗGeJƙ2C\.|.^9 u.5:bݽ--;YWD7rd֗M+##sS^Qj7H-NG7)н+()>F # d2:wT_ċfsg=ex?oV$dĽxZR|Tn ɶ9#m"ЛpSnۛg@z0I|Z+;!/N,Tr,DXs+|1lqmLX&̡c^@8R$z5D55YTb\ sl 52R?`m'F_Q2Lrߧ1l/sK%|yt@}yt/'yI[M"[nxIDEĿ@5c 1u@CNLOlzp/Ȩf1w. j8=TB՛7=R~ȑNL/F\ +i;Tjʧ1N .M>@?3?n:9]˞T'yUl~ˡ"bqRދ=t=TiEywn{r`tzFʞhst_; Ok0>ag m~Xru=mz=0 ! ZNMٔ1f;#sqj>9C(uwx=y"OLtW r71T)f%g5qIJRJZ "U❆3H;PTv7#q_ Ie =8GbR)ШQƱ]^C1WlEd>R|jd50GR#8_Ve^R/ Q]>kIAnr1L>3%&~eKJYT[GTÂB2 VE"QlÄ j"OvI>؜/1aX3Z^Mcj~T=>NeB9͝Iؚ"Ec*w7 cu?qzr%~snұ-a~&gudkY"P6F{ Beou[Cd]ÑVY538 ̠brrS ០٩pΈꇤjȣU60ؔnbHxğ&-]EN#fsYkHrǝcTMq(EyLԷ0Ak˿NO<6`d) w>jA\1#yp"e|N,e@NIەQ9 {T=mٷ\]t,.C2r2~9@Gsލ=ܞ }Nx !FC2q|.D-jȡ(b;Fކ|ҖbI?pBHמj>TĊ { )bq@oa j3H=8C\)q3qa,NAAGg |dƕȝGtN)?id iީ|:fT1^.7zp~o^9)]#JF&3n{%GG 1jF# nuj%=(suX 'eJ` ۀɌoBmJ#IPEIG6r҈h֋ʗ62d ڸM&6_HW]쉗ݰ s^[y]C `=9bVPη4IBRVRg+3i\O7_ܪ@B^@@U~x9b &!WN_}WҪ|)+{byd3O[.ʹ=>ڳķ.Q7b)%" ףmD)!{2jt՝jb=}{Ža6Yֱ9Q@5pwIRCb NUBzoW}yk+K)YjBREg~ %?&v+\xbw>F 2ԼME ' jg d"x3v @Kǻʓ?ntE@v)qќ~(/L'DhhhslP/\+PF'#D'AknNq4ď4?k©,+b`]l/w7,}ur1C%rWFRFb Œh79,qڧ 4g M,HS9o9%Ļ%Y·1B&aWd g\: o5ZcGoGZ̺4'$J L(N WC-MK{ *%]bVH1͜΢tp4beH?mU']S׫xbezk{i1#(nY8䏂yo="l,sD2SHѫ+ȓtU}회[hu(YdUXĐ[}sΐšM=7KvКnQ -B \-kί,+c R޹}aR5S$syHI{J:|r[[qI>Ύu']e&B%00~ǽ}.&%_*m^KIF4n6P9R;f<(^@ ӹ;e?Z:1"{*=X茮s=Qhn ud_Fm7F:ćQ$e ֳ;5BܞLٰhC1%=-fjEWݱ=EzS2qwt@!?l&P-8*lO( t}G@H||ܣi$Ԡ$2[0'TInueo2~zOWA늄ߐ uS*ĩ>e Tziv-' _X4^,q wdeBq2r ~./o&I_Vg$iϠM;g U-P^bܐ;?֮^P?.폽YAT}dEY*jLL+a:yrmiUoG7xW^ 5A I }vN*~G6F_5>hDw%*E4g,5Zu[p+&5MYEguks$%$\~1أ=F?UL){Z-Ou cxȺLA7 &Q|j ARxiTۋ]=r4[v̽BH|(ZpLPK|~ olO:u^0vWpWM3&䀐O mسxB"3c ;Jݻ!o|2l$`)XyOVjvB+A&OfmEDY/bT^ 1>x޷6S*|9%Ri**;HQ}a~dIcKN{&cD$1;ag'w-ۦ ^$Bv8ķqn_'Ao~)Cu%޺w{lz{̡;St`&?٧1r N F"]eאCNǤe%2e,FF-Hi,'C3-pWdz E)@0yJ6QFsnJ2[ҕv|'x$K#iJwυ\F]^ܵ̊q,l >K;?c}O'+iB\P.gd(L^V(RWy1tcQHlm. ?ϏqRLb@,J>)i*&l#29:>[ӟ>h!<⟆I x9%fL"l'.(¥QD>"wtk[Pt QX-fgfc}kBCV"~ZRjS&VCr#:d*9sۅsZ<=\s%Y]Mc%X*z!64_$b%ܞyΑBdͫh\,tP@|-沷?H¶X{e+ O_pnHqzV xP*5.X0o(H% 9YIc>4*ﻸr9W]A+IYm1*c}d*(pKӞG]ru^,6#f9 V#5q0J ;R?b .9YWG)>׹w-WsóBBN@}Q^j{,iSH^+Țހ%-|ǮE *|;&|*1Q`-|~@91sl*bofFU,Z_1g3JʘeԻBno?#3ƴx+ΤU!mbwd{f VOavHS\q??{-Cbvu/\ɔC 5>)\*hTt_'#p^vjw< ѹuZ*[Cj &<.!KXêyRXF_gBd^ 7j8M7)K]kDRV g$kxz[`h_U!Dڽeo # ~0aPa+M( l8 yB'o)I[WCV DF /V"%-MNp5;GN{SnJ,1L'kP1 1AEBZ~!nHV4~f%ݔȗlqL<[П7Xͬt|!2ZzDinBfxGe V Op5gTo򚴫KZj)F?56Jm?z-y~Vt*i%"r(pU[8aTe6s~Ԑ MoZ Dq\#,1ePi;%.N#/~|7{:S4E9LG w 2qE>Q"'?5r~'sRe?.FdS? endstream endobj 365 0 obj << /Length1 1492 /Length2 6776 /Length3 0 /Length 7769 /Filter /FlateDecode >> stream xڍw4]6hAD;5{c1 c !zhBtB :Q%|k}ߺך{_{}sְ2j"mHW$ (h H$`eՇ X (78!)@ $PuwQI1I$"Q"n hHԍU⍂ p@8 1逜3mu^v8h$?'ٍpp= uV@G@i "ܮSPp:h@n 'w?#~'!  G;RVC{y0䆼{N`kf'?7 vs;6+!lPڍWpr#˲#l~Ѱuw7@]ݡ*b]`P4 ABzA-ti@v QP "l4`TvC@@,fD8y} R;(/|yE^A !!H.  쐀^o_{)?w-Mp?:7 ?gNWUݑ8'v;y;z4ףoՀݝ;_Fݔ^P[m8b^4'8t[^bq?ܮE;/ m(Fk- h -cD_;$י \-qA_oK:ǒ!["H;;oa @mߢfBQ$D*uhI'gH4X͌CֶTeუ~\'^YA3)rJ=0(-E,5jN{EXJr&S (>"eLE4m`Ř0̣?ƓU Ċ7Rz/ŧ;3Us*ъ;>9O?RMR}&/rP$3܎ whF@';Fԍ 7h6 듷шK"9=]ZK&ǿN'%>NޤWXjC;|%8lU@^I Za$8'Kأt8?7C+p{s<\-,š!IV4V%>*E(k ":nrX}MX,|lw^QxhgD(6o{I *ontx??9I:{8V0Ƌg4|XL>hsQr)n <>3cnn\+~z4E7Ïb\x<F`DU6Bwz~ԛ0A..@P|֫UBfx8e[.՚;*%Ibvi.CdZGB}K{.ĊmrOݥ3WP5q&*;5;%8rWk_ҸO] ǹvjZ?)B6M(7-"x?*Ӕ2ۚᴉ8C:Iac:-pM2tɚ!"#g*v$J^kG=)uZI9c;TO*2?{XDG4Ͼ7Qhy#,ϨI v6yfʷiɶV4VE(^ ',m]\֕oέ?qJPQht֚t])Z tdKll~2Z4?o}jyCu(>-})6IK5kSǽvaՕ{H#n>g^00ؿUr,„gfbx[tD%s|svHK, JΕSsOJ;m_Tv|M G[_ zn."E8ެY[x$I[M T6=dS5iE/S-2aTi9UC/k{U3x~1c !O/pM0%{ˣdAoajQT))"փq6/0bI̠bvoLZ^kN;G;) ZTv㕎6\ |I;fJ$Gz1pT9w0iB3E3)-~&FMnz7N ?(q<'1`.O"tP3Na U2 ]andEVjmMO?3D"܄W`o?q{x|*9ib]TOgh5JPP񾸯ؽ7 7y-OW1sݞ[ I5\j5YLp5U4yq\Z/KO1ZfވOx_r&Yi~bwPJh#ZM/6/WY=\ҮߚX2am;}HUeR[csΈiDS(~վ,iM041$,g|RI+4#ua^V>BaEcwE:+UKXWuʋ!gHi_*Bqxqnu$ѽ!MS sT@0ye]=ـγ*Yڹ5>Uc-TX=y| =bbΕN]wKB@7 4٫O[n]6ϺO_(g&ug*5A|^dcr™N3$GZ-43F59"*XJ\^&y!Z1;D_Yܖص$[^8rLBX^سŒ+1 K}1ܚ̤}Z ]g;bϩ/$nT8)s譲x=ݚ[4}%60UaP/en=2uo3s7K0`PbKY4ȾPM]6e{#l({#fu]存% Olk;,&7j{RzuNTq c ,+8ģ' 9֖LwLEق/Y;OE՘eamڅtyy`]rVO,RĄWl!}Qf|2?REX&L]@F5yĦҕSx.xw'T KMvp'54[A4A~Zssf6#K~2-;ql7~Y*߄3WWH %V)[3&] }on[4_sa?ρTpJx(T$)M-3ۂ穒l(hY,.3@DTY$xF~\a}G xPz)b`jPe' TtrgS|B܀^?_'ڕNHX&_%Pλa >Ms"v SӞwl#Of+M/):D_fNR$d I|eYI3Ϙ__/C2b1I%Z}<0\VS{X2-Y*oI0#q R}PcV$f,6E |vWR3 &qfVgcuNVTF{!|>"LMzdG,d{6$2ga5Vdwn;sSm0Ĩ9ni/u.~$gojWmGI)1'&UOD~>ŇtNU'k$I+`5 Ҝ>JO|]#1)P2#3$ݚMlņ4ŸĖEdq?&'rz sy"jSřMK$93GcXF}z_G!jӣT{͜Lj9ˏs),X ϳX7\AcK)Sّ%^G*x)u@KcŃ6lUw&[&{ ?8+aqU*8hߗm<˿|ؚH{$̊EOE/{[50]"6Ƕ(1iLƣQ17crFsf38&4f "5.c2i NA$0w,B!i')bIaj嗮Dy =TG3;26KɨɆ0 o~2Ig~#ehPϓG(B`쳎Zc9fY!ׇ]_mhh4\{Kt(qes:rD0=%,gTT&0PN]=οX^?egYZwZ.wz#E*5S;!$襛`E Z?R@=#ƓrQW5*b0yu8GΧfS(JɜU#41@c9;yW(A5zG+#7GJPdf37n8d~&"vBW*Ç]+,nU8;4->8S|;[@.'*#x`ㄤμ+n)m8Z`6cF 7%W BnT}$JXǙOn~Q#U/snȳpL{@ מt΋*:xʱamvtOqb}ö5V;w_=_,~GbቚAJ JFBoJAu*DfL*owM[k>״(v+8=)dB XsxX.p֐@^DV@ߑj6DJǔI!Z:@uW.kDͫmxJfn}[Jxf!$8’ަcz^LLziBb܁VARwRO0| `5f+>Q6wk  Ι'I_ij|f k:Zxuxjx!ަU'|S͍'m|zv٬{L2: [ Т|>$?q ĨJ amŴs pC-'|tx|.btdItq tasLVħ qe)kft3z >g`R1X-gޝ69q UD=Winc"-G!o`\=ܸ&& f-/hlu zJ4u~M4|eCLt<^W88v ZneجSK[w X{En8e!=C|ѓjGظӣj6Zjl}H1]e,[Mȩr=AG_T#o?+J@A8rXl}rl*n<>U0FܒS?˲Q Ŝ *4sLqE|(SVkZ_)>4TwDe[\I>gQ-ÂBс~D'q։jY']gI;I}rrښ(G]4(3ʩU~.'ϐe%ymFMXtÄ'-:@J-ae Ӣ04~. 1] m2J>ʻ_>7> stream xڍwPT[-Y9 9 93 00̐$A䌀HF$$A2HE{UթsV{Uj`,ACՐ kl, qp0p_f"3( C"dAcl*`O<ူ( ,!#,)#$ ID*`/(C99c'KKKݠ(1Ppb|[qnhA$Ia#(B_ z`78gs"W\-kP?‚+W"w0FN# t1>~"hU< +jC;` "W]VE@nnPM> p?'@z#0WOw) Tre"BBBRB88~7uv6_utW/"4 `P@7" 0 `u!~e:WVBW~=ݿC} 3s ?SRB  ,$!HJNcU?G$ ګmO^ KyZ(ȭą~;_Y_" R]S:(8e I?ZlDfggŕl>}!%U uO#<;&gMc)}ĉde_ ZZS2ԿZDYȷԚ t+$.7ۏB (+[ܼƝI*,8]O4qAnUv|zn UˢsN۟^0@UoYm܌.jSjj<e#]oDN\|],aNӘlx:z1ϯ6`Y }-H(gm*ap9T-3#zH^%BJ  Q t}KJ&5lRg{hGMy =2CGI,h0V&P}?ezRE V)7Yd~CYrb"HQFE)ɽ;΅GFԯmΟY0Y$ERVOd:ܚ%L/sxAvQskSa􏌁>7-w6ن*3qcԆFu·iV/8wRyoҚ6kl ^LNaLYJl1lƯ6pKUnjYM3ۃbX0Q$aE>Ney߿jsdߵUI;'E+I?i@L޿>  󑐧>qQuSŻ{t&}KvxW-`6p2M w}-%;q 'kT'0gTdmR:OM$7"'{ZW T6xeGT~VrʩE2S ᡼mHdv.ߒkd}&k3*ZE 2!9Y]Gv`ٞ͌`WXA y"W_YĹٟ82|uξHCzX HMDe`eMTT6.')4l9bke Yhbf"j7>YkL2n:l;POPqK [1f}I9Y؈:ϓ㙪`RV_äf8l7b)367um)^r%]@]MZׂܽ,]$l!'=?6k` |DQc`_1# g|gCO-Y6DFg4هK~_ĠvYd,OܫfCd% i<͙"!Lͪ;KԖ^@"?;3jۛ&--):ƚqMGW79@]<{_9 Fz'#ZW5>+}.Ln8{]Yr55͒8Mgkld!=xІbգ\';U,kŸ]bG5}3P4Yb3$ 7.6zOӍZCdƬg%!P/Y$V^p 5`@yT.lT''q.i:›J2?es&ڙaZJ6l.x(ƌl,9qG2wq>U#]^Y`"oq]},iٛnDEOT˄tYi80ۥ.=+ENug4dx6.ׇ;[Fi6'pMVW=Rja+Qba,ݍ "C6ESkE qVn ~Ƚ "+}J^t.#wEyYcH]'nM(pr<4Q2ֶ#FPW\nP'Eݴ7/(<7'ϫ67Yt3a~mePԻV 5MIOp ѼY;"ae2Vp͙~o 'zqIj^Z1 ;FX"%R/LY\\kv.bd[1'&w[y7#y>ۻْ2ɶ{]A7lnĔQr5cL͛[>=ןzƋyN=Skϳa@V,Y{:Nvdi"_1I:+cXL6w(+ֈ{4x{V>`r՛z7%리W9JRΆl{M9:gs0DTo=b`ɕgMj  Gy.]n^ӥ&~߯WBPlvH6P?OֳCċTbƍѡ#7j' ط5N9ݎwɍGq!ʪ|3Q9q,ylIEZKoxd3~2>A5;.fM-w6{s-=& R%{yM.|=[sinϥpdhl}3B>\K/nXWHG%X9l󲉽s')a }P'%W<$i*q=Qr|[:,N[SaeH|Y̺.Kpf4V rEx(0I MEmPit&遀ƔԴ%гG0CXl- ; 藎(W8l9MƝ%'&JMN7c,åɾʲ-saD:yW\z?%>. +#n W0s}*D+4.h^UmD0,*JRˎb5{Tr]:xTsz{pڋO5Gl+4C,@~m wC,.&r̍GNoLxƝVצǑ ?邊5]V>SY[&_НABu'qӫ70Ǟ8Y2fϡ4L+Dr rҊ W'1d,77O1LTܡ; (oX)I. 121>븥H n٤%wGSisjxN2_|G|ꎜ7~kF-]~ 8PKa |ᣘ>'˖<C ,c)^1Zd{|>zKIcոT5g)Q~f׷A0H!y^?!{/_b-c "تȯI3Aw_@uO9Č%몃Oz#]\eHՐAXT 6}/n+UŬOpPgM4u\ ;>Um 뿑fЄ_ UA4E Hs\dKakWCpk{ 'pJ)=KK*˵2᤟+؋n?IV=fdGb2"8 XeUzkсUrōpqx`XTp6۰ qA@u(y\m-vc!^X7|Ohvr,sӼ./^|uzW;;R}7ged=S R}L ac7ʾf=Ni" Z"S/ڤ ,8R[*Yc/+k 3QO:ц.562zpwJY:߫/IE vB}$oS5ʂZ{)EG]wkX0ʴ=#iBjD#-я^|P瘛Srsj{IE+ȼt{@!q->z#R^tn8DypD7-Rŗ@=q!>6@lH=-EM endstream endobj 369 0 obj << /Length1 1514 /Length2 6892 /Length3 0 /Length 7918 /Filter /FlateDecode >> stream xڍxT6Ҥ7ҥwDJHB$t^&ҋH.( MTϽ_VJ3g<v=C~DBR%mCs@HHD@HHCƉMn(! %7(Ah Qyg#I~B]#xTJdwL3ތsnx7\PI +E[i-AZm'MnO-ΤXm6(wUTPqΆIVirHG(|$7 r;lO).\N{ZjpU%~x|,h+[YΆ+rv3^&wfz*ZW«ͷːꩾD^tԃۜmt~H SLY*)G{S'?8RV3wUihQ`8_2WFI-EB=즑!vcwrw<_ *X;jNƱh܊y5Ɲo?Sҙ3yޕPM2~훾?Hd]q,[ɀ_8NR7U(Zc7YI2DbKђ$]rW:%Vf,_hjIEc֊Y' nz(+;ёN[琵;Q742=粨!>N\3 уACzuve#(0#m{]c?fuw2C“),q=|11#qD[nGn9مg&T܃mz@Y|NՁHjz]K8[8"Y;RH|$;iaqE c-߈q+ eO' |33WSg/墄8Wj^N3K$"]9CЌ+s{g1 oAt'<8,xgGg7#[>Y?>ƯF5sv &XqgH+΍-Ko^[aF)e)P|,@|4Z%ʌkc 8+ϛJ}ʘ#qU ?O}-') w`G}/:`5X) ^[4_eYlMc٢b׺%x[$ V8z{,.g] gnbgm]Eu6;jJr~Ѕ"Oڴ"M/sǩܛ,pVw277dGu2~M<V蒾@Tb\,xa I=]^Eqc.w7|\ީ}#Ey7\ Q]1pՎ K r f4T\!!agN: oTgl*ץm9}_2㚟e'VumŊ%ۂ9 ݧ_o ~F?qrIBasoJ89$UL;0KuhVR V51]y | obRx6j֚MJ+v >ny{2?X}9i:ֆ~ky|>?e!=hGM uofRQ| , /ԨvS^Os(,خi>:[4;޳&43DIIs!Y$ v6ʊ i0qLZ^i.8qMK IFJ'-}7KL<{1ncO{T^-|x#缶W=pe}G8"AgzIQ;q%<(.P4&O<(GE^:$kT.GǞe<kc{~A{#E#U#>MO}XiLtZb-''o/ϝIQKv]b2ak.oN☇QIآf!8#/0aByN* B>^2-uz*3b UY!}AZ[Խ>{L!T'TT~]wӝ" )&q$CxvͤuleI,j1aH&qy|iZ"{j4y4?4r=:~4Mz:vnڨ-'3Ý-+eXEOM,ԋ~Xi𾋚MGo]N\da~tm$K֓yx]jd+E)ųM'U72l 20 6  r[X=tzϡk3.G_F kjW҂&DJVi:MNH&8=Tl>YmM&*rV~3͵] vWcdw,Nof(L |gw=a1ߌa_jMn% ]6j> :Scc-o.uOc#)ڬ`;U]v,on/2hᒟ{CnjpN]x!k9z8$? %5f4QR<&t9:$>}lN}Qo$\yemsFÂ/isX8㓳ټAF 읐|dq4 ]GZD,kwn֭:Oiߔu> iLRe3>?*D:4U1!tZ B>\PRLwAin zg8@deue՛K&:cTp˙~d|%K57c^rwl1~5 ORf%rӷI=֗oKBV$cýlQ>}wwtg#Ib^UXt@|BB?>Ggc?L@sBh$yUkt2!1}G1#n~){=53O;yBuɒҫL\UygQLr娊5>Y1Yhߜ׸iE+xݲduC7.WhUV&“2ڷTA& &'d&u꛶<ѽ6xGGRaqivv*~w[fG2Nfۃm>QĐƒjt`eKJ^gQK`B2zQNƈy3s#ȂwˁOyY6uuiш!#r ֜"X񒱑#m3'W6א6)p*g?3. )o=4~^iqҢhr m>*_Õ6NVƕRd ȴ l{-pq TzNL;3p'/({~Rͤ7p䙪I)]ڽu×g5Nz@7J\5qvk)+'ȦLKY̶wέ+SmXܭ .DQXQ+d-3&Nb(=3_m]݀Qժu4$4Ɂg }\ABU3- IQ Sq@hD\(Jd7mdP&w6^De'lyN f::-> stream xڍtTS-Aޑ.BPP4TAJH^c}oF89{^k97!PeWA!1@ X mh&`!2nn#&6("(P Sb= h b1wP/"͇zBP,wP>x04.p5"W)+#mQ..p$ƝWJ4=vПuB~vݯ!l=\A7_ "fDbb" s*o \v!;8 ` "` $Ou, ^> c+/[? Q43c (o" JB!C\B2zP6UGڡӿ:+޿ Z8?"a[So U%nHwwC]> Xz`Famo icX##bBD"p nH~՜Hۂ+ pw?UFP|&$*P20VNB?֐pJ( 61`BVaꎝ_8,@ G 04kJop$ v7ܱ:{<puh~%&ɬ+Z陟S17Lz_FN}|2QZV8>;abOYOgЂcɟ .Z%.oTiܖm83NEL%U" "H^"T)g"1v7+]fGXy$-3g@J3}rF;7ŗI7 ]"y]' ll\`@1<"7{]citPW3nkMhT](WQ )OnYk9Q]9 5ʉ59`mƯ3s;P{>3ɵQ1kQQij }Yx|Gk̏hho:}zz2 ~B̶mEXqGybQ\M(zCvf5wܦNukPJp3xJK+ЗTXY^he@đwXadvlZ V_+Vu J2ςFJܪYg|n,vmu[àNZX7:UxIk1C> XZ0j6d v2J+b|5g .ם/g(C ݉D Mˬƅ'jASY3~"TE9DL&u{m^_,uOA|"ICXzzSf1gß#>YZ$m|pg<"s'͋l`BAdC7[RD)9QAu\"jMz$c ^ xϜy,i"#kv5(@^~y/Y |){%;@KUO`b*0B&%kVUݧPj.btfWd/y2@v gb3jM1sEi@nGTO# ׆HB[O߅Sh)P{y&D*@Dk.cZ4jY^9Ho8./|I8?FMTsZdCW99 g?\Ԁ\VTy+›Gٳy aRGk$nW wrytRbҠvgRՌ5J-.Ɇ<Q>/ 2X]n—gʢZ KOmƞY/#F7pCWϛ>P*`,7tNR?C$+w^gaؠbzS;qjȍ!W!t82cLU-13&8g },~A9ݘDį5'h\( zVٗ_<ןݼo넘S֫W3$;bʷ79R]Hx5Z D8kwvޱ.  DD7li K_n>kY_4>_+]b)f<82=oJCUTGiB9cYozfr/˝g^z0E$UE8qT" eo+>YA~=DSASrANdcQMwA6w>hI =yQhrF5}(?;+O\۬xݘ–5^rlYhxb,m{ʍ-1(SWe*#>7ܭ?$H)a2ZoC"[џ=yk"Fgi3)L;~h+~c:̼F5'.:>9z0G>y?\³4Aq!4ڲUF4lq1Ie;hFVM Ƚ} X7eCe>6PNĹ{nPe#[o0C6/GHE{)`̵!\S0m_q4 y^dvrf75WVuR>ciYYx zaYۦ+]ڔ@,d'm%`)w<ɴQnj|C b֎^"kQ4jd. UUB\cm;+>IM)[N((F]k9GjMp9rk:&Zeu޼}L&M"#QP=XMju}6&).a; օtrv'U-WB+#w߶vS- Tm"o8^2hR2 mp]˵ e?BpjN Ƌq߲\k GgEC&7X4ґr$D}xk ︈|_ĝ|ߘ(dL+BblWNM+J7>x*ÀVaڷ>ObS \GmYgY_=Pg0] )]G1O˚`>&ߌVGo)Jlgz., mj-0<8Jj^QYvZ򁻆MD ̿$&Bܝq բ)ɮ8ݵyGoJ:u(s.Rv8M(fri\UmSlhٳ- ^hoY 40.s Ht-;]Vkġ{-.0yHs#XDJ5ķsc"K kQDoǹ%,c)bD]9aTf&itKI 7RL߼>A[[LXRC57C44N mQ'iw'(D/ou`kо_Rkt*!GL/y#险UhuBѶHmϒ%?ls zKMP'¬Bl3{ˏԽ6}ɭAI ~aOx g$YDyZZգ ƾ Zf)6wH\>0} Zg;co:͚[}w%%'rGefg r@ȡ1t1vR}={NfU#8ڳ \h{opu2Ȱ?SXݫh9$xuDFk&? eٗQ5)Hd<HO-U!?7otgNnNOw= X,6r1%A<ܜEt9*[Ž-H`0VW?u؊M҄adLmR6+AYձ)mW:8%%Ww ?Q>TCh,MA0v3onHQ[hVkPeMJ fm/K[2ܹo+(vj pFZFJG{h +Mh)xz:+{ْ>)ZԈ-Y+oW;umKسtG&5˴)T/w7V/0dnG!&rz4aM"o HB 8&|q"j&x/a@zEH1\;_#!9DUl:p-vB}M@^3}ʛ#Hzˉ$ @ЕML;"HGd?;40hU~N9Qyq2{z>3!m؏S:tHɏ/I5T+NA^yO+/o0B^=,M驓v{ڈ׾̂qO.۵%lxd B CìpjBl*}G3;ƺjRqVR;z%En)Lߠ=mWx5IU)\0ݏ.'T);*[_sB̟k}-yoX/۵2;W{}ʴN`hxjjkpiϵ!Ov#)sL{p[J<E1£ QY f/<, -[Hȉ&ܹGu)rnBL:˷g/o蛼rʁFAue'S4kc.- 핿 62\_./h&ێApQoOҦxP,\MҲc1oɥE#7@k*c?:1FM7>Ѹfc*ce2q>bܲBfJcYd*][jC/ H򗉣N좫4f?19dt~f9z}ŹBfB-z劕lL)xw`w3~+p(AFx.&7L;J9|iгQFKҀWTIzj'e~V6`/Jg Dyξj} a؋SzyPƺ+Yg-B6=Uչc'{Wwg|;)k dv4jfn^3%dcey͝@9i9-##"Sc\;4; =۟] L?w8q(u#Ǣ39f#O @&^\ZȾ`5*{%wZu7`1|b ?&M#?Fv{ӏx1V ):I7yɲJ s{y Xd4p]4+AV'-M59jXlg 0ū`գ$a=.1 4#ܖ {EUB' 1oo9cSЎwڙ:/Y/Uf]:]~9 endstream endobj 373 0 obj << /Length1 1809 /Length2 12614 /Length3 0 /Length 13754 /Filter /FlateDecode >> stream xڍPn w[Hpw n  w ݃^߫ot9G*ȔTDL@v`&6fV^ +DEfǎDrtCd~߈ vYgk;/++#/@ 9!Qٻ;Z@kL`g8@halh P0l*ZT-@`IAo󲰸2819 1\-dcdGCߣ1#Q-rڙ] A71-xP(ڃl"E`}86f;Dں[ؚL-AEIyf`hk-gIeۄdhavbvcF?Ҽ G swgrl\m=L-lMLٞE$#7̈́ pr ؜j?lf0At2t o;!L,#-? ӿ;Z>ɏ tfbgk+fQSPg{:EEL& '+ y -_2v};h^:h\rb,?C,BI:[[7v\g(ؽjZ]ʀ ߶AMLl̬-$-@&J`cT]})9Y¼Eے["Nozۡ+aklgDz9How8lo[irSf[;[mFo# `>XAE+E`1xrrޘEɿ / XZ0/xMf|_Z+mYZڿ_/V_-/vDoocgGǷGυ}/02FZ3 l!ver^]!hnK)_gϋtL߯c ^뭴XּyjZ`MƱ䝁r mMNT]wfRnKOiꎙQF# Q[ERZD+Ed(.GǾA^]7yCؓ:p\{: T)k) stqd(X5*gufwæaczƌ_K=C:}NׄdU۫])㪯,)ϫ!e MXP:XGB\s9@ xcU9dW@l/Nn骤Q(7e6º/"mFz?RTx%s\4k!(`(󱚾mL9c7=4_!'Zу-"zoNGJ0/ eZ/|D=&9<}={6-mC7/-{ycMoP1(ݡ\t(ll틙b)]\h^Fzj,^prhr~UQɤ‚S#uyztH"I3kmƇXejcca`y1fM**YK  9_ uX'lugݪy( S--{(ӷQoL 56t p275#V6gCH )NNWԒ (Qȑt',zr>gA8#7RHÑX 3Rw[Ϡ ^IPշ_/(h>ã8;`rX?=wx|[/ wvd{Et1zzf5xhspH',)Gc-Nޙ8ncvhgztǍ鑓> /=8C98sˑM?9fk&yu+- мH/7A?'i%?hnf M#|FKhGZQ s(bP>7p BAhz_<n˽M^haQX5 `mz 95 ])ƣW_?v YL4DQ>`zT7HDZF9nU/}c61,:թ7GO׎sj%otT8vC֚y%Q r#gI\)]՜ktC̏zJbg{,UʏzITzS_|PuKrmbqiAU&V3jpv~ u`Dw  ӞDo vL؄A.xd~| A"AAd@ǹ4O$S4Z^,!9Y0$$F: W?*V_@DL{i4Y!D n4EcƤz aEto ^:@D>U:ۜŨ [ѵI|qSnU މ[1kS꫙9?\{L?Ud+^ 3|(Ÿ2rXO?焈n֮Ppƻ3[u/YT ϴjBф#8l05uA_WK_n)" LWb$|A?e%p$͐89EGՠ]Ki;vSfN/;zpZcy,Y s[0ߝX.DČF)f)[GL TGܰC{[͎B4w5$G |b_LD"f⌷%m*s)'3A>1}OdLk'u h@YhX t Z$Q_:z{%lg q`-9bghy Y#ia%nPKR#*TrD}[-FjYbaJοyaȑzat7a^˩c,y4/loT9A&KZJQr ЯǥGoۡ]/9.{7.mAVb}m-Cټx^+ǹ>!CVUJ7vyG{$;ɹ.?/#0.֖F9?7O"; n< >7MG`C<{IC϶of,t܄׸[ {p:bUM.^AWaʩ\9ɂv'NjQ^K'1ʗve^Q׼fKau}x"׮ pޒ&Z|уa'}TM ]G,Y'$FF}p:b*Gb2!GǑGc qCF(ѣΊ3*M ; xn}$a?0|m3{xFVeVGc%P K4`䧀xNbHo+b#ρ˨$w{\8m9>=U` "֣6^UXGX3fՏ3kwdk^1sH[O籴툟ú| 0#\[&Z+!lT ͢_|UxQ+4E픑RprdZU+ƻW_lͶ|p̐pI)+ћϜTD|{gyH }^]1}^tZLwA#nnCtLA~!ĸh +'kձlH(.V}*ϳɂjAjjxܔ 4V uSl~qkTz/7ݺFxM}QK 6ɇS?SLjLq ylK!ï߶^A[_5مjܕ%HFa|/ӄ'E-Sxc[ck{iJntu,)0ި3 'Q4<rzTzeA{,^bZ!M2Wcb5~a V+%nSFAүÀ5K^\ڻ酁ߕQ9;%VB{(!A^#fpfy2 RaSbtE#aMkVΐ642VG9=/P 6 /!sG63o6'2ceJN$g,98gTcX(_7 g93HObպwj"?U`Mݡ^LB  W9zڡfm"qؿv'm׻<gҺ=;9>Z6lDѬyϠk͵$' In RVpt|! _Em:~:8n0%%QbweM?1qb>IXӹxVu*G0Fm, N䗃L6-qdKvo"Mk.<-c>`UNi .%J{O{L^aj1v. K&OvpR]c?$V?z$ jQ .;c݉~P8\N~;CJ(zDuoZɦ fR-o' ,ވS> oǟrZ@$Hhg+m< CpvUp&`sbG4wiX r3S!niq<}QŮVPČJ1ꛓ*?`[N};RehMږ5Xp3EВ~J1YJlcw[}@)?ۨp[*p k/qn3Mt1 1e>+k6z3K&Җ&YEjuD$TUדsL|$ǗX _8(Cv^Hvه0"rtړ_Nk᷏!=ğ3#J~Ykh+LeX9n >̣ՋDWS:OZ5S\Ȟߛ/0i_B'BՇ}OV)p/;G7o| 2l>xلLP5e#B:)w29"J\4A2LΒ^-ɣI9FKh܉A2_bt_20;51#FOK#'P%Wv(_$drx9Rո(> ^aN>Q9I 1.0-^]5M{(ߥ.F^­c[YO *hvEvS\H;' \CUt&$tnkA|o!زrrKU}H3]tXB% w hHA;'n~b:`ow ٳ1h4U8 '[Aou3㋌ "$ ,Ⱦ=ܴx&wC0_`_TX]7Nure!̍w߇J&=t}T8JIxW9)f}s FD{e Q#O S%bMfhGql~Ϗ2bgIÈվW9Tghr{z5OvĻ>h>-7ODXYґ檄nXtMl*:ZZ׸QX9A m9v$i&2]ŵbv~w c}„ڨ_BB"+3w+A?4\lbjPsHrQy]IQ^kLM6aWNt+Տ`$ZϽlwj=Y4:^( ?5E\(ć-`$@N8 Q~-v1S5^t*ѺSVt@>q|MBa}ۈRr.\ 0`dz m^;')칪UT ˙%NS?}wgˣI^`9'+=m_D=C DNT;GSR!4RY70ux,R],~.bxj #3<. L S΋K|)LcՂL}*񳄤Irc*XW$O~g|&'ɂ>(Y mŲmmFXv#u>b^nȜ_#dWejՀK-x]ŖQc G5|sˤ􀤼p:65Ov8M6qᄑ@JJh7] Ih =w;^S8H(f#j1gyB;iI ,bYKͽ&5|Cޜ'%zQӗK h)Bjb 'ZTMDu4l^n}z ?4v=Z/3 -93mL5{A/ $DSjG䍵$j7WevFy^ym<gTfX`O4 ֏,Cn͵WBE?L.0t~P5ߛZ}0 kƎFb tQ {H$M "__!M+ S:ʽ  o3ƿ O{qR NSK(M#N: 8`|"&遒Sğj.eJ 7nX;gLy+M)n[3?O1v0Y٭qKIez2Zܯo!XۉHܡNɿ%K"5DGzE8\~q4GV?{hZ~ܿst8A$ T yd,yI`uz  K7N$ H"+lpKY9H+vgf@ZJChwJ~鍝&M d,6"=`$R.Kͦ7'KƮ0hyy?h96 )f|>%.7TF}WDO%{w4gܶH&'t0k;-=7n5kˆ*'ȒGRiPw9 +}O"@Y7ޣ 46_sBΥ8qG/]IݏT wrMAu 3EGu^jI1Lgt hof;*!TT,+I[vC1Jv > T_yXO~%Qk# Jc01# }4R,Zp, -& m64^ -^[UuמSW!CIC f>""vI-zY'7p*>niq"ӻuWRon./ȽW>9sm`9yDʖm(Wx~ش0fYtxtv>dHqF_gn>.~wbIE kw#6|BtΙ~bsR \ЌhF Cyc%b&U|# nȎQ%4̈́%R <:yl8`FbTޯv؏>KR0 f2G$1>)@ ?1N i¬{cΓ lEdx#TwZoy0~nĒCp]=EB \{U wIfTcciYo&D+w>(r qqa>i:T _ץ1*N'ǻ+*cP ~@ߝHMc<5J;I|'cJDoUr+[LՁ$چ'|У@AaA`±3{L-#tq4a,6pbFjnnz0~ RՔʨa3h2K_tCjڕ$g_rn U0>>-{Ű+:˦0i~g"Mъ414w+yFF9=4Ԅ5Q̴q+fV8oݟF*RE.JHꄜYE~m+[Xk^p_ rVSM 7V~j-9 tH7dp!UĽ.3Y3[$mR]ML+$Jx6