survey/0000755000176200001440000000000013123040336011602 5ustar liggesuserssurvey/TODO0000644000176200001440000000407013010204516012270 0ustar liggesusersPossible additional developments in no particular order: --------------------------------------------------------- [done?] options to handle quantiles in rounded continuous data like SUDAAN does (if I can work out what it does). - Score-based confidence intervals for glms [mostly done] Rao-Scott-type tests for glms. [done] AIC/BIC - better choice of denominator df for tests [done] More general HT estimator for sampling without replacement - using joint inclusion probabilities - using population first-order inclusion probabilities and Hartley-Rao approximation - using Overton's approximation and sample inclusion probabilities - using Berger's approximation and sample inclusion probabilities. - GEE (you can do the independence working model just as another level of clustering). - an interface to the Auckland semiparametric approach to two-phase designs. - Parametric survival models (you can do these with svymle) - linear mixed models? - simpler case: multilevel model following sampling design - nested model exactly matching design - design is simpler than model - interesting case: separate model and sampling designs. - cluster sampling, so that higher-order sampling probabilities are available - more general sampling. [done] standard errors for survival curves, particularly in two-phase studies - an interface to twophase and calibrate for IPTW estimation. - Replicate weights for two-phase designs [done] and for multistage designs with large sampling fraction (Fukuoka's BBE?) [experimental] parallel processing for replicate weights, svyby(), svyrecvar()? - Gini index and other summaries of concentration and inequality. - Krista Giles' respondent-driven sampling estimators? [done] database-backed designs for replicate weights. - Multivariate statistics [done] principal components [experimental] factor analysis [done in lavaan.survey package] SEMs? ########## things to fix ################ Use naresid() to get better missing-value handling in svyglm, panel.svysmooth, etc survey/inst/0000755000176200001440000000000013122573253012567 5ustar liggesuserssurvey/inst/COPYING0000644000176200001440000000031212363344504013617 0ustar liggesusersExcept as otherwise stated, the code is copyright 2002-2014 Thomas Lumley svyolr() and many of its methods are closely based on polr() from the MASS package, copyright Brian Ripley and Bill Venables. survey/inst/BUGS0000644000176200001440000000056712242746122013261 0ustar liggesusersKnown bug: 1. calibrate and postStratify do not recompute the finite population correction. This matters only when the sampling fraction is very close to one 2. svydesign should check that `weights` is the right length 3. options(survey.lonely.psu="adjust") does not do what it says in the case of svytotal(). Not yet clear whether it does the right thing, though. survey/inst/CITATION0000644000176200001440000000123513115662425013727 0ustar liggesuserscitHeader("To cite the survey package in publications use:") citEntry(entry="misc", author="Thomas Lumley", year=2016, title="survey: analysis of complex survey samples", note="R package version 3.32", textVersion="T. Lumley (2017) \"survey: analysis of complex survey samples\". R package version 3.32." ) citEntry(entry="article", year=2004, author="Thomas Lumley", title = "Analysis of Complex Survey Samples", journal="Journal of Statistical Software", volume="9",number=1,pages="1-19", note="R package verson 2.2", textVersion="T. Lumley (2004) Analysis of complex survey samples. Journal of Statistical Software 9(1): 1-19" ) survey/inst/porting.to.S0000755000176200001440000000032012242746122015013 0ustar liggesusersVersion 3.6-12 is available for S-PLUS 8.0, ported by Patrick Aboyoun, who was then at what was then Insightful. Comparing this to the R version 3.6-12 should help if you want to port more recent versions. survey/inst/NEWS0000755000176200001440000012331613122573066013301 0ustar liggesusers3.32-1 pseudo-rsquared paper is out: update reference Add cal.sinh for the hyperbolic sine distance function (used in CALMAR2) with code from Maciej Beręsewicz Coerce tbl_dfs to data frames in svydesign, svrepdesign, twophase, because they aren't actually a drop-in replacement. 3.32 Add diffs for calibration from Daniel Oehm at ABS - Sparse matrix support - Heteroscedasticity parameters - more flexible boundary constraints Update references to AIC/BIC paper, Statistical Science review paper More information on accuracy of pchisqsum methods svyglm() didn't work with missing values in database-backed designs (Anthony Damico) 3.31-8 Add svysurvreg() (for Pam Shaw and Eric Oh) Remove the tests that don't produce character-identical output on all platforms (for CRAN) 3.31-7 Add deff="replace" as an option for svyratio (for Chris Webb) Add psrsq() for pseudo-R^2 statistics (for Ward Kinkade) 3.31-6 Make database-backed svydesign work with *no* design variables (for Anthony Damico and Guilherme Jacob) 3.31-5 predict.svyglm() uses object$xlevels and object$contrasts and so should be able to guess the right factor levels when they aren't supplied in newdata= (for @thosjleeper) fix return() without parentheses in svykm.R 3.31-4 svyciprop(,method="like") and confint.svyglm(method="like") work even when the design effect is large. 3.31-3 svyciprop has method="xlogit" that reproduces what SUDAAN and SPSS give. (for Rex Dwyer) Added reference for svylogrank Added example from YRBS for software comparison Copied some names from NEWS into THANKS 3.31-2 explicitly dropping dimensions on a 1x1 matrix 3.31-1 Allow for incompatible change in output of CompQuadForm::farebrother() 3.31 update isIdValid() to dbIsValid() for DBI changes. explicitly :: or import ALL THE THINGS. mse option for svrepdesign.character and svyrepdesign.imputationList was ignored (Antony Damico) confint works on output of svycontrast (for Michael Laviolette) denominator df fixed in confint.svyglm (Joey Morris) svyboxplot rule for which lower-tail points are outliers was wrong (David Collins) calibrate() with variable-specific epsilons and zero sample totals didn't work (Alex Kowarik) document that regTermTest(method="LRT") can't handle models with a start= argument and document how to use anova.svyglm instead. (Brad Biggerstaff) update tests output for new formatting in current R. 3.30-4 svypredmeans() does the same things (together with svycontrast()) as as PREDMARG in SUDAAN (for Thomas Yokota and Anthony Damico) 3.30-4 confint.svystat was handling denominator degrees of freedom wrongly for the Wald method (Jared Smith) 3.30-3 vcov.svrepstat does more sensible things when covariances aren't estimated (eg for quantiles). This fixes issues with svyby dropped support for old version of hexbin 3.30-1 Fix example(svyplot) now that "hexbin" package no longer loads grid package 3.30 svyranktest() now allows k-sample tests (eg Kruskal-Wallis) svylogrank() does the generalised G-rho-gamma logrank tests [methods from Rader and Lipsitz (and probably al)] various CRAN fixes 3.29-9 AIC.svyglm, based on Rao-Scott approximation BIC.svyglm, based on multivariate Gaussian likelihood for coefficients svyglm.svyrep.design checks values are finite before replicating calibrate() using a list of margins now allows named vectors for 1-d margins 3.29-8 svyhist(freq=TRUE) works with replicate-weight designs (for Ward Kinkade) 3.29-7 svyranktest() works with replicate-weight designs (for Matthew Soldner) reference to the lavaan.survey package in ?svyfactanal 3.29-6 svyby() now always includes within-domain covariances 3.29-5 Change from multicore to parallel. Parallel processing is now only available with R >=2.14 ddf argument really works now in confint.svyglm (Anthony Damico) colour specification in plot.svykmlist now works (Mark Rosenstein) svyplot() documentation explains how to annotate a hexbin plot 3.29-4 add symmetric=TRUE to eigenvalue calculation in anova.svyloglin, to improve numerical stability subset.svyimputationList now allows the subsets to end up with different observations in them (for Anthony Damico) subset.svyDBimputationList now gives an error if the subsets have different observations, not just a warning that people ignored. svydesign gives an error if there is only one PSU, to catch omission of tilde in svydesign(id=~1,...) (Milan Bouchet-Valat) 3.29-2 confint.svyglm(method="Wald") wasn't using its ddf= argument, because confint.default() doesn't (Anthony Damico) 3.29 svystandardize() for direct standardization over domains withReplicates() has a method for svrepstat objects added predict.svrepglm(), which can return replicates saddlepoint approximation to sum of chisquares works further out into the tails fixed bug in rescaling in calibrate() when initial weights are very wrong (Takahiro Tsuchiya) documented df= argument in svyciprop(method="mean") (Anthony Damico) added df= argument to other svyciprop methods for Stata compatibility (Anthony Damico) 3.28-3 svykappa didn't work for larger than 2x2 tables. (Jeffery Hughes) svyby didn't allow deff="replace" (Francisco Fabuel) svrepdesign(,type="other") now warns if scale, rscales arguments are not given svystat, svrepstat objects now have a plot method (barplot, currently.) svyplot(,type="bubble") now uses the basecol= argument for colors. postStratify() now works when some input weights are zero 3.28-2 calibrate() prints out sample and population totals when the lengths disagree calibrate() is more stable when the initial weights are wrong by orders of magnitude (for Kirill Mueller) calibrate() can now take a list of margins as input, similar to rake() (for various people including Kirill Mueller) 3.28-1 SE now works with output of predict.svyglm (Kieran Healy) make.panel.svysmooth() sometimes had invalid bandwidth choices. as.svrepdesign() now allows for fpc information not present in the design object (Alistair Gray) regTermTest(,method="LRT") works for svyolr(), and method="Wald" now doesn't need user-specified df (for Zachary Grinspan) svrepdesign() checks the length of the rscales= argument (Ward Kinkade). Document the problem with in-line data-dependent variable construction in svyby() (Anthony Damico) Check for completely-missing groups in svyby 3.28 svyvar() for replicate-weight designs now returns whole matrix withReplicates() has method for svyvar() output, to simplify multivariate analyses. design effect estimate for svytotal with replicate weights was wrong (Daniel Fernandes) transform() is now a synonym for update(). lots of partial argument matching removed to keep CRAN happy. 3.27 added anova.svyglm() for Wald tests and Rao-Scott LRT. anova(model1, model2) works for nested models even if not symbolically nested. formula component of svyglm$call is now always named, so update() will work. svyboxplot(,all.outliers=TRUE) didn't work for single boxes (Takahiro Tsuchiya) 3.26-1 Better missing-value handling with replicated weights in svyquantile svyboxplot() has all.outliers= argument to plot all outliers 3.26 Added Preston's multistage rescaled bootstrap (for Alois Haslinger) The multistage bootstrap can use the multicore package if available. calibrate() can take a vector of tolerances (for Alois Haslinger) [this actually used to work by accident, but now it's documented] Clearer error messages when post-strata contain NAs. 3.25-1 The ... argument to svytable() is now passed to xtabs() Clearer documentation about graphing discrete variables. 3.25 svyhist() didn't work for two-phase designs. added svylogrank() for logrank test for survival data. added svyranktest() for two-sample rank tests. svrepdesign() and as.svrepdesign() now have mse= argument to request replicate-weight variances centered around the point estimate rather than the mean of the replicates. The default is controlled by options(survey.replicates.mse), which defaults to FALSE, consistent with previous versions. (For Anthony Damico, among others) 3.24-1 CHANGE: svychisq() statistic="lincom" and "saddlepoint" now use the linear combination of F statistics from pFsum(). 3.24 Rao-Scott test based on linear combinations of Fs is now also available in regTermTest Algorithms from CompQuadForm (AS155 and AS204) now used for method="integration" in pFsum and pchisqsum. These are more accurate and faster than the previous implementations. If you use CRAN binary packages you will need at least R 2.12. pFsum() saddlepoint and Satterthwaite methods are also much faster. The saddlepoint approximation now works for the whole range, not just the right tail. 3.23-3 Some vignettes didn't load the package (Brian Ripley) Added pFsum() for linear combination of F distributions with same denominator. better example (quantile regression) in withReplicates(). 3.23-2 svyhist() didn't handle include.lowest= correctly. (Chris Wild) svyby(, return.replicates=TRUE) now returns the replicates in the same order as the printed output, and labelled. (for Bob Fay) 3.23-1 svycdf() wasn't handling replicate weights correctly. Change in svyquantile() for replicate weights when using type="quantile". Point estimate used to be mean of replicates, now is ordinary weighted quantile. (for Bob Fay) Small changes in handling of zero weights in svyquantile(). 3.23 two-sample svyttest() didn't work with replicate weights. (Richard Valliant) 3.22-4 postStratify now allows 1-d matrix as well as vector in data frame of population counts. (for Jean Opsomer) print.summary.pps wasn't being exported (Gonzalo Perez) svyhist() ignored right= argument predict.svycoxph() was slightly overestimating standard errors for survival curves. [.pps and [.twophase2 crashed when no observations were removed (Gonzalo Perez) 3.22-3 bug in trimWeights (Richard Valliant), also add warning for attempts to trim past the mean weight. 3.22-2 bug in the na.rm.by= argument to svyby() (Trevor Thompson) regTermTest() now does F tests by default (for Chris Wild) 3.22-1 added df= argument to confint() methods for svystat, svyrepstat, svyby, svyratio (for Richard Valliant) added na.rm.by= argument to svyby(), to drop groups defined by missing values of by= variables. confint.svyby() uses SE(), not vcov(), so undefined values in replicates are handled on a per-group basis. svysmooth(,method="locpoly") now has automatic bandwidth choice, and make.panel.svysmooth() will use this choice by default. 3.22 added stratsample() to take stratified samples. fixed bug in design effects for subsets of calibrated or database-based surveys changed scaling in biplot.svyprcomp so area is proportional to weight, rather than height proportional to weight. 3.21-3 svyratio() can now estimate design effects (for Scott Kostyshak) 3.21-2 Rao & Wu bootstrap wasn't sampling n-1 PSUs (Richard Valliant) 3.21-1 bug in printing variances for three or more variables (Corey Sparks) svyquantile() reliably returns NA for NAs in data when na.rm=FALSE. svymle() was not using analytical gradients with nlm() (Christian Raschke) 3.21 added trimWeights() to trim weights, and trim= option to calibrate (for Richard Valliant) clearer documentation that svyquantile() needs ci=TRUE or keep.var=FALSE to work with svyby() added a simple random sample to data(api) as promised in book (Djalma Pessoa) 3.20 in svycoxph() modify the rescaling of weights to avoid very small weights because of convergence problem in coxph() with counting-process data (for Tapan Mehta) added some multivariate statistics: svyprcomp(): principal components, svyfactanal(): factor analysis. added heuristic check that combined.weights= has been specified correctly. confint.default wouldn't give CIs for multiple parameters with replicate weights, because the vcov matrix didn't have variable names. (Art Burke) More of the svyciprop() methods now work for replicate-weight designs. The book of the package is now available! (see http://faculty.washington.edu/tlumley/svybook) 3.19 svrepdesign() can specify replicate-weight columns with a regular expression svrepdesign() can produce database-backed designs svyquantile() has a df argument to use a t distribution in Woodruff's method (for Wade Davis) calibrate() doesn't require an intercept in the calibration model (for Richard Valliant) regTermTest() and model.frame() work with svyolr() (for Michael Donohue) better printing of svyvar() output (for Brad Fulton) twophase() documents more clearly that method="simple" is preferred for standard epi designs where it works. better error messages when a database-backed design has a closed connection 3.18-1 documented the need to use quasibinomial/quasipoisson in svyglm improved the description of confidence intervals and standard errors for svyquantile. 3.18 Changed the default to combined.weights=TRUE in svrepdesign() Fixed bug in multiple imputation analysis with multicore package. The check for PSUs properly nested in strata had some false negatives. 3.17 Under Linux, Mac OS, and most Unix systems, multiple processors can be used for the subgroups in svyby(), the imputed data sets in with.svyimputationList and with.DBsvyimputationList, and the replicate weights in svyglm.svyrep.design and svyolr.svyrep.design. This requires the 'multicore' package and the argument multicore=TRUE to the functions (in the absence of the multicore package, the multicore=TRUE option is just ignored). svyvar.svyrep.design handled NA values incorrectly (Arthur Burke) print.summary.twophase2 wasn't exported, so summary(twophase.object) gave Too Much Information (Norman Breslow) svytotal.svyrep.design labelled the statistic it computed as 'mean', although it really was the correct total. (Arthur Burke) detection of PSUs not nested in strata was incorrect in some cases. added xbins= option to svyplot for hexbin styles (for Bryan Shepherd) print() method now has strata in a more predictable order (for Norman Breslow) regTermTest(,method="LRT") now does Rao-Scott-type tests based on the estimated loglikelihood ratio, for generalized linear models and the Cox model. Similarly, confint.svyglm(,method="likelihood") does confidence intervals based on the Rao-Scott-type likelihood ratio test. Updated marginpred() to work with survival 2.35-7 Documentation fixes revealed by the new R pre-2.10 help parser Added unwtd.count() to count the raw number of non-missing observations. The new PPS designs now work with subset(). 3.16 PPS designs without replacement, based on the weighted covariance of sample indicators: Horvitz-Thompson and Yates-Grundy estimators, Overton's approximation, Hartley-Rao approximation, a modified Hartley-Rao approximation that depends only on sample data. 3.15-1 The new two-phase designs added in 3.15 are now exported properly. 3.15 Full multistage sampling now possible at both phases of a two-phase design, and the standard errors now exactly match Sarndal et al. The underlying algorithms use sparse matrices to store the weighted covariance of sampling indicators, and so require the Matrix package. Use method="approx" in twophase() to get the old methods, which use less memory. added marginpred() for predictive margins, ie, predictions after calibration/direct standardization on confounder distribution. standard errors for predict.svyglm(,type="response") were printing incorrectly. as.data.frame.svrepstat now works when the result has return.replicates=TRUE The separate package odfWeave.survey provides methods for odfWeave::odfTable for some survey objects. formula() now works correctly on svykmlist objects with standard errors. 3.14 predict.svycoxph() now does fitted survival curves with standard errors for the Cox model. (for Norman Breslow) standard errors for svykm use a bit less memory. quantile.svykm can do confidence intervals added some references on svykm standard errors. tidied up some help pages. 3.13 Add standard errors to svykm() (for Norman Breslow) fix typo in svyquantile(interval.type="betaWald") and add 'degrees of freedom' correction to the effective sample size. add 'degrees of freedom' correction to effective sample size in svyciprop, type="beta". SE, coef for svyratio objects now optionally convert to a vector and confint() now works on ratios. 3.12 Add svyttest() for t-tests, as a wrapper for svyglm Add svyciprop() for confidence intervals for proportions, especially near 0 or 1 confint() works with svycontrast(), svyquantile(), svyciprop() output. bug fix for updates to ODBCsvydesign objects. Add example of PPS sampling to example(svydesign), and link to help for variance estimation. Add Berger(2004) reference. svyby() now has vartype="ci" to report confidence intervals (for Ron Burns) update survival examples to work with new version of survival package. 3.11-2 Document that calibrate() to PSU totals requires at least as many observations as calibration variables pchisqsum(,type="saddlepoint") now works down to mean x 1.05 rather than mean x 1.2 The breaks= argument to svyhist() now works (Stas Kolenikov) svyhist() works on database-backed designs. 3.11-1 svyglm() [and svyratio()] gave an error for post-stratified designs with missing data (Shelby Chartkoff) svycoxph() gives a clearer error message for negative weights. svyquantile() now has a 'betaWald' option, as proposed by Korn & Graubard (1998), and has an option for handling ties that appears similar to (some versions of) SUDAAN (for Melanie Edwards) plot.svycdf() has an xlab argument to override the default labels 3.11 as.svrepdesign now has type="subbootweights" for Rao and Wu n-1 bootstrap An approximation for PPS without replacement due to Brewer is available in svydesign() svydesign() no longer warns if some fpc are exactly zero, but still warns if they are suspiciously large or small 3.10-1 svycoplot can now pass ... arguments to xyplot(), not just to panel. svycontrast() has a 'default' method that assumes only a coef() and vcov() method are available. Fixed example code for anova.svyloglin. Added predict(,type="terms"), termplot(), residuals(,type="partial") for svyglm. As a result, the default for se= in predict.svyglm has changed. make.panel.svysmooth() makes a weighted smoother as a slot-in replacement for panel.smooth(), eg in termplot(). print.summary.svyloglin was broken (Norm Breslow). confint() method for svyglm has both Wald-type and likelihood-type confidence intervals (based on Rao-Scott test) documented that svykappa() requires factor variables. svysmooth() doesn't fail when data are missing. documented that update.svyloglin is faster than fitting a new model. dotchart() methods for svyby, svystat, svrepstat svyloglin() handles missing data better. svymle() didn't work if constant parameters were in any position other than last. svyby() now has a return.replicates argument (for Phil Smith). logit and raking calibration could run into NaN problems with impossible bounds. Step-halving seems to fix the problem. 3.10 update() methods for database-backed designs. improvements in graphics for subsets of database-backed designs. barplot methods for svystat, svrepstat, svyby objects. svytable() for database-backed designs quantiles work with svyby(covmat=TRUE) for replicate-weight designs. fix printing of p-value in svychisq, type="lincom" better error messages for misspecified fpc in svydesign() database-backed analysis of multiple imputations. formatting changes to coef.svyquantile, SE.svyquantile, svyby svrepdesign works with multiple imputations (though not with databases) fix for missing factor levels in subsets of database-backed designs allow svychisq(statistic='lincom') with replicate weights. quantile regression smoothers in svysmooth() add svychisq.twophase() (for Norm Breslow) changed defaults in predict.svyglm so that plot.lm works (for Patricia Berglund) svyloglin() for loglinear models, with Wald and Rao-Scott tests. pchisqsum() (and svychisq, anova.svylogin) have a saddlepoint approximation. 3.9-1 improvments in svyby, degf, svyglm for subsets of calibrated designs or database-backed designs. svyboxplot() and svycdf() now work with database-backed designs. ODBC support for database-backed designs. modified the degrees of freedom calculation in svyglm. 3.9 Added database-backed design objects. The data= argument to svydesign can be the name of a database table in a relational database with a DBI-compatible interface. Only the meta-data is kept in R, other variables are loaded as necessary. 3.8-2 Added svycoplot() 3.8-1 Added subset.svyimputationList coef.svyolr returns intercepts as well (by default). svyolr() has a method for replicate-weight designs print methods for svykm, svykmlist weren't exported. 3.8 svyolr() for proportional odds and related models. license is now GPL 2|3 to accomodate code ripped from MASS package svykm() for survival curves (no standard errors yet) 3.7 Added style="transparent" to svyplot(). svyby() and svytable() work on twophase objects. svychisq() has statistic="lincom" for linear combination of chisquare, the exact asymptotic distribution. Added interface to mitools package for analyzing multiple imputations svykappa() for Cohen's kappa (for Tobias Verbeke) 3.6-13 Change in tolerances so that calibrate() works better with collinear calibration variables (Richard Valliant) calibrate() can be forced to return an answer even when the specified accuracy was not achieved. 3.6-12 svyhist() handles missing data better. Added svycdf() for cumulative distribution function estimate. 3.6-11 postStratify() for repweights was standardizing the replicates to slightly wrong population totals. (Alistair Gray) vcov() for two-phase designs gives the contributions from each phase for a wider range of statistics. (Norman Breslow) fixes for codetools warnings. 3.6-10 Added error message for missing sampling indicator in two-phase design (Lucia Hindorff) Added tests/kalton.R with reweighting examples. make.calfun() for creating user-specified calibration distances. NOTE: Calling grake() directly now requires a calfun object rather than a string: see help(make.calfun). 3.6-9 Bootstrap weights used last stratum size rather than harmonic mean for n/(n-1) factor (Djalma Pessoa) method= argument to svycoxph() didn't work (Lisa McShane) svyquantile did not treat missing values as a domain (Nicole Glazer) fix for change in pmax/pmin (Brian Ripley) Add pchisqsum for distribution of quadratic forms. 3.6-8 A fix in 3.6-6 had broken svycoxph when only a single predictor variable was used (Lisa McShane) 3.6-7 svycoxph() is much faster for replicate weights degf.svyrep.design uses a cached value rather than recomputing. 3.6-6 svyquantile was not passing method= argument to approxfun() (Jacques Ferrez) Documented that svyquantile(interval.type="score") may not be any more accurate Broken link due to typo in svyratio.Rd (Giuseppe Antonaci) postStratify could overestimate standard errors for post-strata cutting across existing sampling strata. (Ben French) svycoxph() would not run for subsets of calibrated designs. (Norman Breslow) 3.6-5 Add return.replicates option to svyratio() (for ine.pt) Add amount= option to svyplot Design effects for totals were wrong for PPS sampling. (Takahiro Tsuchiya) 3.6-4 rownames fix for svyratio with a single statistic. 3.6-3 raking by rake() now has slightly more accurate (smaller) standard errors. As a result, it can't be used on pre-2.9 svydesign objects. calibrate() does not warn about name mismatches when population argument has no names. svyCprod, svyrecvar, grake now exported. 3.6-2 covmat=TRUE option for svyratio. svycontrast() fix for svyby() with empty groups (ine.pt) 3.6-1 Allow averaged bootstrap weights (as StatCanada sometimes produces) in svrepdesign() Fix derivative to get faster convergence in logit calibration (Diego Zardetto) svycontrast() can take named vectors of just the non-zero coefficients. Nonlinear combinations of statistics with svycontrast() 3.6 Allow empty factor levels in calibration (for Diego Zardetto). Work around for strange S4 class/NAMESPACE issue with hexbin plots; actual fix requires more understanding. regTermTest handles MIresult objects. Add dimnames, colnames, rownames methods (for ine.pt) svysmooth for scatterplot smoothers and density estimation (needs KernSmooth) Give a warning when fpc varies within strata. svycontrast() for linear combinations of survey statistics covmat=TRUE option to svyby() for replicate-weight designs, so the output can be used in svycontrast(). 3.5 Add estWeights for Robins et al way of using auxiliary information (ie AIPW). Remove JSS article and survey-vanderbilt.pdf from inst/ since they are now seriously out of date. paley() now gives matrices of order 2^k(p+1), which are usually of minimal or near-minimal size. Drop 72x72 and 256x256 Hadamard matrices, which are easy to recreate, from precomputed set and replace 36x36 with the one from Plackett & Burman, which has full orthogonal balance Note that changes to svyby now require R 2.2.0 or later. predict.svyglm has option to return just variances (rather than entire variance-covariance matrix) drop.empty.groups now works when the grouping variables are not factors. Add a namespace Move precomputed Hadamard matrices from inst/hadamard.rda to R/sysdata.rda 3.4-5 Add svyboxplot (for Luke Peterson) Add drop.empty.groups option to svyby 3.4-4 Paley construction of Hadamard matrices now knows primes up to 7919, works for larger sizes if the user supplies a suitable prime. calibrate() now reorders elements of 'population' to match column names of model matrix if necessary. predict() method for svyglm (for Phil Smith, Andrew Robinson) svyratio() for two-phase designs. Added vignette on domain estimation. svyby() can report multiple vartypes. 3.4-3 make svyratio work with svyby (for Phil Smith) increase default number of iterations in calibrate() 3.4-2 Options for residual df for summary.svyglm, default based on degf Default denominator df for svyglm, svycoxph in regTermTest. survey.lonely.psu now applies to as.svrepdesign. keep up with changes in all.equal() for R 2.3.0 3.4-1 Speed optimizations for JKn weights with self-representing strata - jackknife replicates are not created for these strata - svytotal does not use these strata in variance calculation. - svytotal, svymean, svyratio,svyquantile,svyglm recognize designs (eg subsets) where all strata are self-representing. [.repweights_compressed does less copying and is a lot faster for large designs Added verbose= option to svyby() to monitor slow computations. Added vartype="cv","cvpct" options for svyby(). Two-phase designs gave incorrect variances in some cases [they were correct if the first stage was infinite superpopulation sampling or if all phase 1 ultimate sampling units were represented in phase 2]. These are fixed but twophase() now limits the first phase to single-stage cluster or element sampling. [detailed bug report from Takahiro Tsuchiya] added vignette describing estimator of phase-one variance in two-phase designs minor speedup in svyrecvar() for self-representing strata added make.formula() for convenience with many variables. 3.4 twophase() for specifying two-phase designs. two vignettes: a simple example and a description of two-phase epi designs svyratio handles missing data. cv() gives NaN rather than an error when the statistic is zero (for ana.pmartins@ine.pt) oldsvydesign() is officially deprecated Jackknife variances for strata with a single population PSU were wrong (non-zero) (ana.pmartins@ine.pt) svyglm refused to work on subsets of calibrated designs 3.3-2 Add cv, SE, coef, and deff methods for svyby (for Ana Quiterio) as.data.frame methods for svystat, svrepstat regTermTest can do F-tests now (Daryl Morris). fix documentation of value for as.svrepdesign (Alan Zaslavsky) 3.3-1 Make nest=TRUE in multistage designs work when only some initial sampling stages are stratified Multistage recursive variances were only going to two stages. Add "(with replacement)" to output of print.survey.design2 when no fpc is specified. 3.3 Added more generalized raking estimators: raking ratio, bounded raking ratio, logit, (for Ana Quiterio) svytable() could sometimes leave the class attribute off the result. summary() now gives tests of association for svytable(). svychisq() works for replicate designs degf() gives approximate degrees of freedom for replicate designs. Clearer error messages when design information is missing. 3.2-1 Fix ordering bug in ftable.svyby (Stefano Calza) The "probability" option added to svyquantile for replicate designs in 3.1 computed standard errors for the wrong tail. (Gillian Raab). 3.2 Add option to calibrate() to make weights constant within clusters. Add bounded regression calibration to calibrate() 3.1-1 Rescale svyvar output by n/(n-1) to match Kish, which makes a small difference to design effect computations. (for Takahiro Tsuchiya) Test for presence of intercept in calibrate() was too fussy. 3.1 Quantiles for replicate-weight designs now by default compute confidence intervals on the probability scale and transform, so they are valid for jackknife designs. (as Gillian Raab suggested long ago) Analyses on replicate weights should use eg svymean, which has methods for replicate weight designs; the old (eg svrepmean) variants are now deprecated. calibrate() can now use regression models with variance proportional to linear combination of predictors (and so can duplicate ratio estimators of means and totals) Prettier labelling of objects created by postStratify(), calibrate(), update(), subset() svytotal on replicate weight designs was computing means, not totals (probably since 3.0). 3.0-1 Allow some strata to have an infinite population (zero sampling fraction) (this doesn't happen in reality but is the recommended analysis for handling certainty PSUs in some large NCHS studies). Let svyby() handle vectors that are not in the design object (even though they are discouraged) calibrate() was working only under stratified/simple random sampling. Allow user-supplied Hadamard matrix for brrweights. as.svrepdesign gave a spurious warning when converting post-2.9-1 objects without finite population corrections to BRR. Allow multicolumn response variable in svymle() (for survival data) Add nlm() as the default optimization method for svymle(). 3.0 Added simple GREG (G-calibration) estimators with calibrate() Added deff="replace" option to compute design effects comparing to simple random sampling with replacement, eg for designs where the weights do not sum to the population size. (for Gillian Raab) Added more references for median estimation. Added separate ratio estimator of totals for stratified samples. (for Renzo Vettori) cv.svyratio was inverted. rake() on survey design objects was accumulating cruft in the postStrata component on each iteration. Subsetting of raked designs without replicate weights was broken (Steve Roberts) Standard errors were wrong for some domain estimates in post-stratified models without replicate weights. More extensive tests comparing domain estimates to equivalent ratio and regression formulations. Changed default in svyby to keep.var=TRUE Prettier stratum labels. New homepage at http://faculty.washington.edu/tlumley/survey/ svyplot(type="hex") works with both pre1.0 and post1.0 versions of the hexbin package. Fixed svychisq denominator degrees of freedom for stratified designs for bug introduced by multistage revision. (Takahiro Tsuchiya) 2.9-1 Fixed typo in description of fpc in svydesign.Rd Added inst/twostage.pdf with examples of two-stage analyses. Handling of fpc specified as proportion in the absence of weights was wrong. 2.9 Added full multistage sampling, involving a redesign of the survey.design object. The old objects are deprecated; they may be converted with as.svydesign2. Use options(survey.ultimate.cluster=TRUE) to get the same one-stage standard errors as earlier versions and options(survey.want.obsolete=TRUE) to turn off the annoying warnings about old-style survey objects. If you must create old-style survey objects use oldsvydesign(). As a consequence of the redesign, most of the svyxxx functions are now generic, with methods for both svydesign and svrepdesign objects. Use svymean instead of svrepmean, for example. Added more Hadamard matrices, including the Paley construction. brrweights() now finds designs of nearly optimal size for most surveys. Faster svymean, svytotal for replicates, with less memory use. Added "bootstrap" option for as.svrepdesign svyby and ftable.svyby now handle Deff (expanded from a suggestion by Tobias Verbeke) svyhist() for probability-weighted histograms added svycoxph() for replicate weight designs The "lonely.psu" corrections will be applied to strata with a single PSU in a subset (domain) if options("survey.adjust.domain.lonely") is TRUE. The default is FALSE. subset.survey.design was not working for post-stratified designs. Added a PDF file with examples from UCLA ATS web site, including comparisons with WesVar and SUDAAN. (inst/ucla-examples.pdf) Added slides from a talk at Vanderbilt University. (inst/survey-vanderbilt.pdf) Fixed Deff to use simple random sampling without replacement. Much faster confidence intervals for quantiles based on inverting a Wald test are now default. These are less accurate in small samples; the old method is still available. (based on suggestion from Gillian Raab) 2.8-4 Added a whole lot more references to the documentation. data(hospital) now has two sets of weights, one matching the UCLA ATS site and one matching the original reference. (from Tobias Verbeke) summary.svyrep.design was reporting 1 replicates for compressed weights (but still computing correctly) 2.8-3 postStratify for svydesign objects was giving too large standard errors Add deff() to extract design effects. 2.8-2 rewrite cv() to use coef() and SE() 2.8-1 Make Deff estimates work with ftable. (for Gillian Raab) ftable.svyby didn't work with a single by() variable (for Gillian Raab) Missing values now allowed in svychisq(). (for Lee Sieswerda) 2.8 fix printing of svyby broken in 2.7 add ftable.svyby postStratify for svydesign surveys. 2.7-1 as.svrepdesign was giving the wrong weights for type="Fay" in 2.7 2.7 Option compress=TRUE in as.svrepdesign to reduce size of replicate weight matrix (and in rake(), postStratify()). Also function compressWeights() to do this to arbitrary replicate designs. terms() reorders variables in interactions, which confused regTermTest (Daniel Almirall) Added extractor function SE() for standard errors (Andrew Robinson) hadamard() now finds smaller Hadamard matrices. svyCprod warns if a subset has only one PSU in some stratum (Gillian Raab) Added tests/lonely.psu.R Added another option "average" for lonely.psu (Gillian Raab) svydesign can now detect from sampling weights or fpc when a stratum with a single PSU is self-representing, and in these cases options("survey.lonely.psu") is not used. ftable.svystat and ftable.svrepstat to produce better tables of percentages and totals. Experimental set of functions to help in computing non-response weights (see ?nonresponse for details) 2.6-2 Better handling of NAs in svyby Subsetting didn't work right for single-observation subsets. svyglm and svycoxph had scoping problems when run inside a function (Daniel Almirall) svyglm and svycoxph now accept weights (to be multiplied by the sampling weights) With R 2.0.0 less copying will occur, especially when variables= is not specified in a design 2.6-1 Totals for factors give cell totals. 2.6 Design effects were broken for multiple means computed at once. Add coefficient of variation for mean, total, ratio,... variables= argument of svydesign works with missing data (Tobias Verbeke) Fix reference to Binder (1991) (Tobias Verbeke) Means for factors now give cell means. coef and vcov methods for svystat and svrepstat. Another tiny example dataset from the VPLX manual svrepvar was incorrect for multiple variables simultaneously Better error messages for missing data in svrVar. 2.5 Wald tests for association in contingency tables. svyplot() for weighted graphics (some of these require "hexbin") Examples for rake(), postStratify() svyby() works for svrepdesign analyses as well added subset.svyrep.design() svrepvar() added Design effects for means and totals. (Gillian Raab) 2.4 Make regTermTest work with svycoxph() Clearer output for print.svycoxph() (Daniella Gollinelli) Rao-Scott adjusted tests for contingency tables. svyby() for tables of means, medians, etc 2.3-2 Fix for svyquantile confidence intervals. 2.3-1 clearer warnings in svrVar when some replicates give NA . (for Gillian Raab) 2.3 svyquantile has confidence intervals, added svrepquantile. 2.2-1 as.svrepdesign didn't pass options to brrweights (for Fred Rohde) 2.2 published in Journal of Statistical Software - If population size is specified, but not weights or probabilities, work out the probabilities from the population size - Clearer error message when some design information is NA (for Tobias Verbeke) - better update() methods 2.0 Just a numbering change. 1.9-3 Fix svytotal variance estimate as.svrepdesign wasn't handling unstratified cluster samples right. Check for fpc in multistage samples, which we don't handle. add print method for basic survey statistics add rake() California API data. 1.9-2 Added post-stratification of replicate-weights 1.9-1 Bugfix: jknweights was requiring finite population correction. 1.9 - "certainty" option for single-PSU strata - Replication weight analyses (alpha version) 1.4 - I think all the possible permutations of arguments in svydesign now work. - The examples in svyglm incorrectly had a data= argument. 1.3 svydesign wasn't allowing weights to be a vector. 1.2 - svydesign(nest=TRUE) now uses less memory - added regTermTest for testing regression terms. 1.1 Added subset, update methods. Variance estimation is now correct for subpopulations produced with select or subscripting. 1.0 No changes 0.9-5 - finite population correction should be done with PSUs not individuals - added Cox models 0.9-4 - svyCprod was computing n/(n-1) using number of observations, not number of PSUs, and was averaging observations rather than PSU means to compute stratum means. - Bug in handling multiple levels of cluster id in svydesign 0.9-3: Finite population correction. Adjustments for stratum with single PSU (Fred Rohde) Fixed svydesign(nest=TRUE) to work with strata 0.9-1: First release. survey/inst/disclaimer0000644000176200001440000000076012363344504014632 0ustar liggesusersThis software comes with NO WARRANTY WHATSOEVER. This product has not been evaluated by the Food and Drug Administration and is not intended to diagnose, treat, cure, or prevent any disease. If it breaks you get to keep both pieces. Not tested on animals. Your mileage may vary. Keep out of reach of babies and small children. For external use only. Contents may have settled during shipping. Times are approximate. Batteries not included. Product of more than one country. May contain nuts. survey/inst/ucla-examples.pdf0000644000176200001440000027472012242746122016035 0ustar liggesusers%PDF-1.4 3 0 obj << /Length 1749 /Filter /FlateDecode >> stream xڵXIoFWT5 fA[E`+-Z!J_!hg{oqb&#](r].FTZlgt>6ET4I,U\gO]wx%O|.<{.GZ2#BSte~|#crby+t=䐪ȈÛؙ@1*cnȓnT2OQı։r.\Ϋpy<66]spj=Ȳ5цHZĻS^AW  G5)FKA+o&"w #+̨*Em79)eOReem|GsY.Tl3Pf#7[ةw"h[2 C'l8'Nn`-IPY'&$:Cg &.xy͏oOKvMjh{+ۣ/(dFOJD`K\3HmڡԤJ@Q<7L %#W-&5‡ o!$a XN}M4콏Y̝nh}-b{XRC.#t 67/O qxMj86y6Qrohw!bȧdS 0,fh+і@17L!8?eI)'hk4jqޫ>p$0sĿbU%猊񍪔Y(8yE` %% 66GVcT@+xrܳKNH߸HҲw! Xl˲83\JpBSѯ݇&Ȥ#ֻ1Zi 5K4dq^bVE=s:shO[CZq#IEª퉉-H wYk " rbܷiڿlBt;+%qWtXkGʟ57]6K(Nd~:K^amTp#PEԨp.6h/JPPd$%r*u@aTw-}_]`sCgݖ)|%v_0:Mu ֪ ||=.Pʝ*~SQ 5 @]N 7Us#mB{MiB׹O覫9]uI(C)Jf^~^&38nK6lMV*c> endobj 1 0 obj << /Font << /F34 6 0 R /F19 9 0 R /F8 12 0 R /F43 15 0 R /F45 18 0 R /F47 21 0 R /F48 24 0 R >> /ProcSet [ /PDF /Text ] >> endobj 28 0 obj << /Length 957 /Filter /FlateDecode >> stream xWo0~_QR8 !{4u6^ΥM"b';;{%NJv,g":h-3-#-hg8iݵکja0KM^,yDtIuY n*V"RAm*"iВh= 6U񹕂$ N5])SҭJ 1tn5T^EJ/gU,LxߦdGkxȭ6*jCJXe5LmyAV{ Syꚾyؒ qƝ#,Q bqV s l'lAXȝ7n;߶g9xۏKtƮ;,C{0x _!D_W\E`y.:~6JBR7 KJ/컅f !qSS>_+Mw\ݴk6UVsV*^,/R]ޞ~Y޿R+?R+2䟨}pKPVzOTڄc~bGU# 6tشYf4Q$ѹywfrp8NEGHjmM_eof`б$*Yb&Ux"Y}Qgcs=Bjހ<'fnod'nZ{/>,3ƇN5$YG[HP)zZc$CqWv6eKЌ AS˨⊜z.eS pK!Պ +|&Rm@W>tيd\eֽCMHMY%"7W=BW;Y+8Ht;VTz*HRYJa.vɊQ' endstream endobj 27 0 obj << /Type /Page /Contents 28 0 R /Resources 26 0 R /MediaBox [0 0 612 792] /Parent 25 0 R >> endobj 26 0 obj << /Font << /F43 15 0 R /F47 21 0 R /F8 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 31 0 obj << /Length 1200 /Filter /FlateDecode >> stream xWK60r(d4VŇ()h hA֋[z-Ïn{opf(A{H)9gWQVFf:Y52yJfߓr<ɥJIAS]i)0՞BLf&"K/*''@}"SOUz ccN3Xy :0vƞHtB#Lwj60>4d +L < ! ޳|,]{de 2zÑ_^0a< eI6ex<&$ LD@+bHrIA-A+4Ynπ$~9Y*/&L ͣcI[|P#gDݰJְ^ʪH[3铟74HB4ȮȫMZ:CcERe(q-;[c|b aPjP`R 疒i%e.BH\[Év(d%! &kXEPk2|a8 IRJi+hvMFfE/Xxzv`qyMRoR;< R(f[XY5p̈́fG (4h0טβHwkhn'kt*P Nn_N0s[=}=VN2}*vƋ[YY*($͞K m="/ۭEF'an iN$6@PhJ?VlgL{v܁ jmjHpvfn&-+ne9 u|h ϡ)CFܧCuLf-ӹ/_ oOZtnyBA;[9\0wuŭYۙo{ع}ZD|sq5۸cn""*XiXHpYTv:B1j{snR6Ƥ@#‡2jo&l]M!gX1b!Z[㟅A #qA;m!ОSH$5e/s}nl 78Ƭ!v- zSFH*/Soc#%xٕr_Ug OJJJ.2ubvg/endstream endobj 30 0 obj << /Type /Page /Contents 31 0 R /Resources 29 0 R /MediaBox [0 0 612 792] /Parent 25 0 R >> endobj 29 0 obj << /Font << /F47 21 0 R /F43 15 0 R /F48 24 0 R /F8 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 34 0 obj << /Length 1230 /Filter /FlateDecode >> stream xWKF 0$#yJ`SȡHE҃V 츛C~{9CKRZ`Q$ѼH~$Cq~]<)Ũk-F#*GZ9j4[cm~~<_6y >2 @TqZi]6KR,_Vb2(ZX"[7fQp#Awg3|â1-Yn9;rvo7 ,SgsUhkO#5ZC0pOs2.˲*hL :A-bIbD; f-q #NOvW$͘Tv>RM$"%DPܙUG. ;ĸ,+$с09ikPE12LeZD0-i\* &v tLќe]ʛG bM{<*j"jfjHʲKMp 5uM<ܵ$j44_;㚥w0kEGD%!Fnp<+Ѣ)#[9G n&PYŅ+ۄ9j@ָaNo{@\2}O:} RJ`lmuYX!Y2{n\؋4w7mZRg'we!7Wom~: >6m* j3hصbYņqIObʝN!&sadEPٳ f~ z/e zDe8 {tI/^u zendstream endobj 33 0 obj << /Type /Page /Contents 34 0 R /Resources 32 0 R /MediaBox [0 0 612 792] /Parent 25 0 R >> endobj 32 0 obj << /Font << /F43 15 0 R /F8 12 0 R /F47 21 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj << /Length 1805 /Filter /FlateDecode >> stream xk5{Ewm/J Q(T{]D.f^nT]Z?yyރ ;Del"ָ)P,Ngb*=5%+Z 3} -C%s~9O-kTe+fuVs Pxrx͈}s#}$̤UI b:SFV{TdutU݇">CduX~svFwn(az2W,CIl* X7Hz[\"۩䇎vxKvuC?G?=?' 䧖 B=eN2BR&S,B°N!y=f~kfm"9ri[fs lie@Ɗs}N,ݡQ\NVUּWlIK 2u:Dlz,%{yz*ymk `CPcƿnalr+˪\ ͙`u6\+S-y1́ )xKy*}0F=h5}W\',o;ﯺnTt-IQ.R(ӿ ]65^w]WVwTE+o* Pì*}y=/#3,~{?| ~ʵuPTL*ͨcqɥ/H-M޿|) wߚ 廖wh\6׼[i|Z|6u8xLZ%BҴ׶Oh9^|| /v1H-3b=u~)pXHY*(wjTq)bn+Ǥ*{܀BpXЎ1 wMOE7!M.3U o=>bendstream endobj 36 0 obj << /Type /Page /Contents 37 0 R /Resources 35 0 R /MediaBox [0 0 612 792] /Parent 25 0 R >> endobj 35 0 obj << /Font << /F47 21 0 R /F43 15 0 R /F48 24 0 R /F8 12 0 R /F11 40 0 R /F7 43 0 R /F10 46 0 R /F1 49 0 R /F14 52 0 R >> /ProcSet [ /PDF /Text ] >> endobj 55 0 obj << /Length 1017 /Filter /FlateDecode >> stream xWo0_Q)I@x0B:im[e;sji|/_WfϞZY p%)D&ӗPe8No{ %R8#dJL&^wMxn+|FN%¸'9|^hg0NYI4 ʏJy#"X<[n D󜾐fUk32j-WtCw.qƨY"b`C A4fqi9jp Y sۨA&u|~{Fc'~\Md wwG #S̵7^qt'wޕ0/Ud]',M? TOL6HӴBXQ(3α_ΏʁPa[>ecYfԛOQm[Ϸ/m0 S aGͦylʂ>徇5D۟{xvMm;Qq 2ѝeJY560 NbѮ:C*Qr.84iLk,:ݒ7@%NXF iv[iJQu\Q#endstream endobj 54 0 obj << /Type /Page /Contents 55 0 R /Resources 53 0 R /MediaBox [0 0 612 792] /Parent 25 0 R >> endobj 53 0 obj << /Font << /F47 21 0 R /F43 15 0 R /F8 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 58 0 obj << /Length 876 /Filter /FlateDecode >> stream xVKo@Wxo Q*7qMRu3;v: IEad{vxvv?4hfdF\JR!u$oD Iʘ+[999! &@'@ExLD= )AFi42HVe}5ehfUN-uH9}%-i;2M8~@t5Og8p]SwcpR/6o ØU2:N1weu-cV4qqClƽMP\x)fRwN01D"*A/k5Jw*ַ 50*>]$l]ڴ0Y-I )(gheeꬓ~ Ixј Ś Y]9?F hgT0՚Gm:󽺱X6fGԒZ7f~߄F4lPOj)0Z ,y)x^ R] Z C,6Je˼"}Dž"_b);I2k&qտIb;ͬdp|u""%g6$?))O*zT;ǎyn/ٵC(Gy6:}{>|RGl)?-I:`v.<3߸pѴ ѝW 3p,J'6դ- 'qRcQ8Cؼfqg>hO$yJ O_P3pARP͑W .l ywr9n<"wCGK:BO>wwk[XI 5fr䁁q]AQ--tGF ݑ_endstream endobj 57 0 obj << /Type /Page /Contents 58 0 R /Resources 56 0 R /MediaBox [0 0 612 792] /Parent 59 0 R >> endobj 56 0 obj << /Font << /F47 21 0 R /F43 15 0 R /F48 24 0 R /F8 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 62 0 obj << /Length 1257 /Filter /FlateDecode >> stream xnFr(Zs\E[ EC͡) VlP_ٙ%e 1|HjypF?O..Q.rGHj-Rl tgV9G >nn,<q EcF5(VT b#M?x|M4 W~;'z|׋K;ȲQj;)oX\kXúu,;J2c )] 3H)򄌳aRgW2;>klEZ3;~&| v>/F;TF2Sk#~T{Fkg|8Q8.2U"eL 6[IT~Bmk6mIcK|ћuW_߲ܐitg 2D(h['F՟_\lY4xN/"Yl( ihDnLO M(gu!'a[Ӱ(.V0^֙vV$ytED+w\vDuJ"6R+*\1 v'32 Q)ZvR!=6|Z=>I ׮TP2Yr@Em uX0AZW,Ǫr(֏}u- .a,&B""8:j5zF%-M jťW*3zPxY̖LTB :$ّW&ٷwXnd܏fXqG fn2Ș jk~;;ϫ" ~&S_S7vjɾD-bБ vGC&nT!sK[{(>=[ CGBJt_b z$jZ*5d1(2d*po3!X#|S@v[*}Aہ˭ C3 B@ByIeR%gn K¢b>Fd$ܑVm!K-Gz' s᤮Yǃ~~xs> endobj 60 0 obj << /Font << /F8 12 0 R /F43 15 0 R /F47 21 0 R >> /ProcSet [ /PDF /Text ] >> endobj 65 0 obj << /Length 1221 /Filter /FlateDecode >> stream xXKo7W9|,@ mCQEyeCdwș%G$Hp>΃3O_3rFΖB;?L6D꿤PrKu?(+(O]򎆛4uF]DopͶ[?#%s(7i?4.Huk#By QM r2LNRMU-$ϋ)?]%.[:݆dXvS 80k*Q[ԍLRqkڵb.B M4U e{F2c&ֵ{N%4-igQP&a2)s0-KP ou:qWʖ">%b'+D]gH8WzEjptxߚPw?.ǏOν'E"绶NtWv CsaJo$ :1f{{naYQ=ްC pρ9bX}/e2tnZ`bJt}, .?kvjN^yE}grc8`|K @a!s4dt]1lxEL7̭sh}Ck}*o9î1›]7 U`N'-o8mmSPtH(d_N:\@g26N'1$ʮhXu*%;ҮmgZJ \:J^ꡬ tTHs EERfrL:9BT殮.%8'b}S53ΆRx8N򜰟`fAӔ^l GK#z2y |qhIEFfo%mHC_%jbl7;ϒ!M=usE3_2ys 8My eKk2okr,Ϻ"ݪ42NXD^‘"a-e)=U7T|x}ri'Խcκ'HWL*/hFM|<~锹:p;QYjyW8W_!_XO"^`ǏPMq[D 0UWPiIjIC}YSPY`t H],-t&d+‡UŏDoM(W ,}*4xbv?~яendstream endobj 64 0 obj << /Type /Page /Contents 65 0 R /Resources 63 0 R /MediaBox [0 0 612 792] /Parent 59 0 R >> endobj 63 0 obj << /Font << /F47 21 0 R /F43 15 0 R /F8 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 68 0 obj << /Length 1391 /Filter /FlateDecode >> stream xXKoFW9hIs)1( GiMJVkY i[qגKr". 5˙ٙoQ,)&* $La,C7/t+Z S  `]/ߧ?2,MF@ 2 [۪ZA*oXG.D5»Mm@gަ3(Ax <| WUkgj{iyG$@}͚Ɖ4IbGr6pTjOt'1d8b((")O |y'X@aY$ {j-}M=^kByZx(]{&.vy%hoS}jdk}\j#_J+.zΏTcb;kmr* xSw>dv);{ gL~/< X $#58^rݴ?H`QDGF06W=ɸV:,Hn?Kϛ+r\:Q?WC'j:D=kr>6˛vlh;ZVN%'}P|DF;8HӍV.*5Mͣ 0)${g]R@GxP9&*̳p;PG>\Cz=Z<]/·Ut\?9+we g3/ ytёeaCX Z{N^NO>$?7endstream endobj 67 0 obj << /Type /Page /Contents 68 0 R /Resources 66 0 R /MediaBox [0 0 612 792] /Parent 59 0 R >> endobj 66 0 obj << /Font << /F48 24 0 R /F8 12 0 R /F43 15 0 R /F47 21 0 R >> /ProcSet [ /PDF /Text ] >> endobj 71 0 obj << /Length 289 /Filter /FlateDecode >> stream xڵS=O0+<&1WR[P)T(پB"ڊɎݻ:7ƋVNzڊ0WUmQ 70#+†𠬢0'35ϲRrdݞs .ܒs\A_SeOچ_m\RPfr#b'c%cݑdre7\XT:<[28!}CY'#$()(eg#f3#$k57l1T e[LB.endstream endobj 70 0 obj << /Type /Page /Contents 71 0 R /Resources 69 0 R /MediaBox [0 0 612 792] /Parent 59 0 R >> endobj 69 0 obj << /Font << /F47 21 0 R /F43 15 0 R /F8 12 0 R >> /ProcSet [ /PDF /Text ] >> endobj 72 0 obj << /Type /Encoding /Differences [ 0 /minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/arrowright/arrowup/arrowdown/arrowboth/arrownortheast/arrowsoutheast/similarequal/arrowdblleft/arrowdblright/arrowdblup/arrowdbldown/arrowdblboth/arrownorthwest/arrowsouthwest/proportional/prime/infinity/element/owner/triangle/triangleinv/negationslash/mapsto/universal/existential/logicalnot/emptyset/Rfractur/Ifractur/latticetop/perpendicular/aleph/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/union/intersection/unionmulti/logicaland/logicalor/turnstileleft/turnstileright/floorleft/floorright/ceilingleft/ceilingright/braceleft/braceright/angbracketleft/angbracketright/bar/bardbl/arrowbothv/arrowdblbothv/backslash/wreathproduct/radical/coproduct/nabla/integral/unionsq/intersectionsq/subsetsqequal/supersetsqequal/section/dagger/daggerdbl/paragraph/club/diamond/heart/spade/arrowleft 129/.notdef 161/minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus 171/.notdef 173/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/spade 197/.notdef] >> endobj 51 0 obj << /Length1 770 /Length2 579 /Length3 532 /Length 1130 /Filter /FlateDecode >> stream xSU uLOJu+53Rp 44P03RUu.JM,sI,IR04Tp,MW04U002225RUp/,L(Qp)2WpM-LNSM,HZRQZZTeh\ǥrg^Z9D8&UZT tБ @'T*qJB7ܭ4'/1d<80s3s**s JKR|SRЕB盚Y.Y옗khg`l ,vˬHM ,IPHK)N楠;|`yxGEhC,WRY`P "P*ʬP6300*B+2׼̼t#S3ĢJ.` L 2RR+R+./jQMBZ~(Z s3JA\prʯ5Tе4khh`nnZ04/4EҢԼp Ԋd[ok[Y*V}Ο'־~ bG̔`y%K^-|xE dE[${z,^k nW6wMpa،9=թsr y)/~V$-%)+2W}~Yӎmߝ ^֥~1͎;K'\ie/j>s}\'.\GqS_1-dmϟpT]ʘUMߗUg)D f+]|unOߊe*z1gn}WQi-;ýF2":e{s?$&̤?vj_aǖ+l k$u}/["}~մEL{ͼv7Nh Uz]NμϜBƫsIvjw?PF $&&esxendstream endobj 52 0 obj << /Type /Font /Subtype /Type1 /Encoding 72 0 R /FirstChar 0 /LastChar 0 /Widths 73 0 R /BaseFont /RHKYFX+CMSY10 /FontDescriptor 50 0 R >> endobj 50 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 /FontName /RHKYFX+CMSY10 /ItalicAngle -14 /StemV 85 /XHeight 431 /FontBBox [-29 -960 1116 775] /Flags 4 /CharSet (/minus) /FontFile 51 0 R >> endobj 73 0 obj [778 ] endobj 48 0 obj << /Length1 776 /Length2 1067 /Length3 532 /Length 1640 /Filter /FlateDecode >> stream xR[TW* cU\@hDB @hLh2 PyXEjTъ`*TDQJ*. Bت*~_]s8 \r%% qC|A`8'ÐS C)$P j/@ LR2 0獐[p1Jpa ZCA)1* r9rB "15J$n .J,' K읯ŷ&v5%n*sW,H${}}.:s0[dsRnEڐ1jdU'Be2V {!!̾?icfj}Hj̰>Z.W)gSR^ӭ]-z?ag,zC6M5('}4uqYgݎi+!ni3+JA"l [+ ˝"%Ze֜'&@ǚ޻bm<_]iܗb}_cuoMs,5_jl_\z}ڿFTG1ʚkҪᮑ*i k>؋f_reCjި,qjMJf6+et";9'պEҨXLKn(?W޾x÷ #zȪR;QTӉ@_1m%S,K'?X]=сf#>)3ˮGkᔋ,8=PĒyvqcng'~){k?INX_vxx=۳U?|b9(RVC> endobj 47 0 obj << /Ascent 40 /CapHeight 0 /Descent -600 /FontName /KIWEQZ+CMEX10 /ItalicAngle 0 /StemV 47 /XHeight 431 /FontBBox [-24 -2960 1454 772] /Flags 4 /CharSet (/summationtext) /FontFile 48 0 R >> endobj 75 0 obj [1056 ] endobj 74 0 obj << /Type /Encoding /Differences [ 0 /.notdef 80/summationtext 81/.notdef] >> endobj 76 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/alpha/beta/gamma/delta/epsilon1/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/pi/rho/sigma/tau/upsilon/phi/chi/psi/omega/epsilon/theta1/pi1/rho1/sigma1/phi1/arrowlefttophalf/arrowleftbothalf/arrowrighttophalf/arrowrightbothalf/arrowhookleft/arrowhookright/triangleright/triangleleft/zerooldstyle/oneoldstyle/twooldstyle/threeoldstyle/fouroldstyle/fiveoldstyle/sixoldstyle/sevenoldstyle/eightoldstyle/nineoldstyle/period/comma/less/slash/greater/star/partialdiff/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/flat/natural/sharp/slurbelow/slurabove/lscript/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/dotlessi/dotlessj/weierstrass/vector/tie/psi 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/alpha/beta/gamma/delta/epsilon1/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/pi/rho/sigma/tau/upsilon/phi/chi/psi/tie 197/.notdef] >> endobj 45 0 obj << /Length1 766 /Length2 1109 /Length3 532 /Length 1678 /Filter /FlateDecode >> stream xRkTSWbC (R-!s\ x \cw bS:*$ Aq@o P^fy+j=*4"N8@*C0 F4qPe֐!JPӀ@+@(LD"H 2 #yL[a8༄ZV"$̦e&MqLrKͻAkJe0OmD*pZrH`/ժfwEDB ;I3_hZT!Fbe!&ߌ _px; APLWC@KwOYa"0Z(,:AeZfyUǢ@!AgT~Xzr.5p'|hC}'x=#j<䱬;K)<$_s(y(djl9@eyo dpY2úFhꖭWCh<0p^..[gپ-vEFՍD`wVbZ5Tk0iF8:R|Tinj՜v4*~|9] JϪgZƼ5huQ'l(t6~Dga}}凎Nϳo,:]䮙:ZXFژ%ϲ>ZV%L}GV>h$,R xQSف,ɟcQAʤ~\IEs.&һW>zH]X2Ru5?I: ֆc kBjނm/nœ/J)d>JSzLUo.^(MWQ0xznT ORSnW uC{VX}ss5O2Ɩ;ǩY?\^FܺCp/ )p^Jljsnoߎhkw0?";sE3~gs:L7WƜڰ{Cjr=b<]xCՕ;a/E~l\Ne}C8eҴ3bDljQ7O.4;P|vdf^`|퉀Melydۼ*qmIQ$塻cH9.wiY~ɇm?m&[pb:f?S/S_ڻ\K/mDf?h_qr4:JӼ!<;z^vwcwZ@kKe.[ܰ4\jDwQuب&ʼnjmA.BCt> endobj 44 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /LYBNTV+CMMI7 /ItalicAngle -14 /StemV 81 /XHeight 431 /FontBBox [0 -250 1171 750] /Flags 4 /CharSet (/i) /FontFile 45 0 R >> endobj 77 0 obj [404 ] endobj 78 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 42 0 obj << /Length1 802 /Length2 1339 /Length3 532 /Length 1924 /Filter /FlateDecode >> stream xR{<KH-03.3 +b̼c^;̸A[r-5.*-BnPCj-9c<~~{|ھ&$low.66xċ8oekncKcg8Z"`lB"$ȁ6EA ՠR@L@D` L 'bxQ ?d6k0 r)5ii0)h c @ɟajVьХ >̊! i YiKF(LJbG2AA\7|!&\A6m 4U f!.W@l$PojOfÁ)GQl*Lu(EAZY xb@>QflAh$I`Vi̢)Jk -3l8x;90!D<@&eC1n2ߐ9k8W+|DĔ+ۖ-!a5\<}sV|8%3r Ԓbbۯ'D?w msdze|z[ti派lf0:}̞)(zJ|+3\GDrqbOgܴxoTN^u> LdZbƖ]GJ:,λj"hjq7׳nNw2l iB/|I&h˱/{+#_w'3vI>LB)}7Xng2=`[ P.yՏLsh*e.Ͳ ϬH -H#V<5{}ݡlԦ0E b3oK[8V=OygIϪa6>P?G"צB݆^@XVxlR AKc +fB [lPך9x[^?|=ŅӋٴMv@f|ld XbhWHHSBhtC mPs,J~pCG 7ŭͽcݍ%$?79XWsᨑ*۫Q*+̃ɏ k$?H9\ܒ +gΌLy]=VR>KN7dɦ~r_*<> Q7N&=gHxފǞ-UߖSS =:LZ\NJx^3Dc U*GWc&J> endobj 41 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /YXJNDV+CMR7 /ItalicAngle 0 /StemV 79 /XHeight 431 /FontBBox [-27 -250 1122 750] /Flags 4 /CharSet (/parenleft/parenright/two) /FontFile 42 0 R >> endobj 79 0 obj [446 446 0 0 0 0 0 0 0 0 569 ] endobj 39 0 obj << /Length1 774 /Length2 1067 /Length3 532 /Length 1634 /Filter /FlateDecode >> stream xRmTWFVöJVjHI& $B,DPPd'AE-US?t- %hXXOO=>b;0$hO rLf ,'(2  $HDA,$uf Ȥo$wZHJr΄ZFCjT6T ' !e% W,'"As3^3M.`Lb$1 X$sd/lM6h4+QDRZ\cAjuR@Nb"&S ]jp@/XCWA03q M!]dI0!~K\M7@2 BE@Q'^ыZ3BhJ: Xz|kuvTU{+W?Ǻ?tQknwȌT׉Gy%Jt}\e(y]W*^~޹״{ݱs|3xڵ.{AP%{`Ku9o>Näz"Zg~:}f+VqA|5kOI{%حgOxB2mNդr+pk591V~ZeJbV̮ ]=֟]۬ #;W?C]. Xk($?+`7?PZ|; nmCخW>ݡ1nK k/f5=d^|0.d}/y--KFۮ(8ʇ9\[>:r]wNc-U^_J SzG9XS֋y9Z# _M/ِ7akl9*Ig; WJBqb'.(v St Qvb4a煁}"@?[(N2l}~uܹ]-pQY2/mۑ}Yjm;wډ,,p{i^)nKKS&WZ6uV^l^&,=RK`;~.I9kuo(o0^_48k}* J{K5o$V z^ߢk2<@jg]+;{y 89\]~K!<;yo*or=t~dk?+3t <5Lq}oӚX _(5hRRj kendstream endobj 40 0 obj << /Type /Font /Subtype /Type1 /Encoding 76 0 R /FirstChar 18 /LastChar 18 /Widths 80 0 R /BaseFont /SIVSNH+CMMI10 /FontDescriptor 38 0 R >> endobj 38 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /SIVSNH+CMMI10 /ItalicAngle -14 /StemV 72 /XHeight 431 /FontBBox [-32 -250 1048 750] /Flags 4 /CharSet (/theta) /FontFile 39 0 R >> endobj 80 0 obj [469 ] endobj 23 0 obj << /Length1 1171 /Length2 5113 /Length3 532 /Length 5863 /Filter /FlateDecode >> stream xe\AS@rc!D:AafaIIiinP@:SB9z~yΫ9}Yk=F"*0=\ĈDA5}U $*N˫C0(:@/G8"ΎN$   (3' PA &nxLp7&J `P $H+ r75ǚ`-PHw 3@akNoOqM/Kw `p4?S2BW  UA:"=5}0#g AxHZ&B3߇Fg$掟?3cvXl9# ! @h)v3$ x8#ap_XL`-yp@IkKW7JIĜܝ?!9 ba +& ' @LV0dF{aC}! ce`!%/:X]P nUFXe_}yP vIQ@Wձ!s,t&QFCpyY&/>?X<[G4='~0So͝4t÷mi\/S, rJe]ו,c0{4Nx)C.4%QhE{^@>lݩnŊy)mMmIW~e\{l50&ߑ0&}CnwCRZQe( 9pj[ N؇ Xt^G>n2N 2mQVg \ݖ Ӹ `L\w,t2\ Yz=jh)Sa]}; hRdjs[d:@!8\'NGʰcG]EJO̖<:ȡoZ*9yĭ])}ar~^zq'ցb,k: ufiB<+y05y8O {}y& x?j6kcm+u0[G!ePN4lQKǖ̞KiK_,"rw3i/2eo?YƁ/Zf&Е]"^<q*,O4h2XlqCb~;/~/VPmBZ(d9<nj>1P%H!S5Y-V-UoK_mG{o-^̩i*ao&BQ߼#ZȋegxGmKz$G2E1I|yc8̒V#Li%\ "o·Ö(Z L.߼΢~W? f/G먷=q>]LT!Hz)I~_JmM[jC*eJUw?/K NNN7Gszǚu48 \lvX+m9fM:=#- L)dSrq~ EQ'kRv{kxhbbsW2U@Fn/d_JÝpti'pF|NKIRti:!~jձMK`QNRux?0#d`Ȟe.{i#<~R\ lvΨWxNWcZnWx*;piXFaғ\PQd+ +;88D3J sUfŬڟv+_A9YSC٪Ev\HK* W):ٛD>牺܏Zu>UԬ ҷRL!]Wd . W@Hy C1w{M/h%JX-݋ULqIƯ;;~O૳85gG4'I/~&^Zin٤VdR!VdP豒u0%z:jOUO jXxWާ;D@d~{u-ic|pÏUNރ'97M2_Wb B$cdI[wzUSD%c"Gx6Me*霾t ޺$"ҵ>G?-I2ĽDzA8T)L O$2CgZl×IqLKZs"Y[Qo \}`ݧ׹ʌmprQ'S]<VKyn"MS?TͅQP,]w|e1$IPI๮^CȐKa+z/ȴ\`hjNČ4=>/yu7z@잇}͉{Ԣ%/NfΩ# 0۵pW65q_{/רY2G[ :͔IuD#L  ZV' ZSDXfƖ*cZe[lSe >iCwiV5?K TGZ뱚 tߣ~8G$J OxA ]Z) ;/ȑE%z.$06_0|jFT"C"kVyy6}e_ .dǖ769wQ="΃j+ejj5Aѽap mz[ 0&~~|Rk YTH7w?:Rg ۛUfw6$νL34lYwJ=dB9f, dJ-?HKPjO􎈂J}H, I99"5ng8'tXQp6qc })rMrH,\V)%`F(SDc8ջPk%$X(yH^ru$#čo$)n0%ȇ*, OlEL"Z |r؎MX̖vIoY:nj9W/~'*_=)J3IǏ̈ Ruく^& w\ 0k)?fdV'U_P|b*Kǽ2 ̂mu[-uEsd0Ҹ_om _UU9yi{ؗkHŽEAgMDIA_؜qLN肹ŷ[|2-4o(Nۥބ.ia=#0<)0Aj*d+12`D¾T)3Zb:d͡0-ا_y{3u>YH\>d>)_YG?c~ѹF4qݼ%Bf8\ x^r1%(y5XƝn }? "(y`dO?ά H; 6M'K>mp$xJծd~ӁhJkaX`~[@#@n1BcI7A+ᔾb- !oۺHmAL㪺48]r<H2;M}\9*$mt7(v1.uBEqDx*ʄnh5BD[P=@R^]ӆ*yPwfPDJ;1[UL۔NKm2m]{[!ґq\`C>8\P/:4ӠVHF Sy<#$ؠ q![դz2?5krTidS+4רm48!z%!ul}o!G/19y$m^r=.&>9ģidV }E,-l7[kA2buLG#Lܯ'Sv[S_uyRK!ND i5LJI_d-Jq ~0\N5̕K8:.p8)ǦfB]"{!LSHMģog^fgϠrp7vߌ15[̝a栦{8B5io|U[nIzEQaS?>5.)ڂɾ10MvtWiUլFyˋq?/1(7ڕcendstream endobj 24 0 obj << /Type /Font /Subtype /Type1 /Encoding 78 0 R /FirstChar 12 /LastChar 121 /Widths 81 0 R /BaseFont /VMROYW+CMBX12 /FontDescriptor 22 0 R >> endobj 22 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /VMROYW+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 /FontBBox [-53 -251 1139 750] /Flags 4 /CharSet (/fi/hyphen/one/two/three/four/five/C/O/P/S/U/a/c/d/e/g/i/l/m/n/o/p/r/s/t/u/y) /FontFile 23 0 R >> endobj 81 0 obj [625 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 375 0 0 0 563 563 563 563 563 0 0 0 0 0 0 0 0 0 0 0 0 0 813 0 0 0 0 0 0 0 0 0 0 0 845 769 0 0 625 0 865 0 0 0 0 0 0 0 0 0 0 0 547 0 500 625 513 0 563 0 313 0 0 313 938 625 563 625 0 459 444 438 625 0 0 0 594 ] endobj 82 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/dieresis/visiblespace 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/dieresis 197/.notdef] >> endobj 20 0 obj << /Length1 1691 /Length2 9462 /Length3 532 /Length 10454 /Filter /FlateDecode >> stream xUX˶h@ q%xpw N{![pww`>+9H!40.(2^p+~Q;~n0CL=i=MYmN8 Ɏ.3":f6_XvΏum+rO рlRwEl/2*>ėPQWK_ 鿟YL@؛ܐx]R؁tv̪[ndfwwPc~ɓ!eyi!4k󲉆71~dghYz3~G׷ԗە+IA1 |݃]_-fdtM9jgA6f-Z KeIa/L%k>%޽iFN[aQXB}Ogǽ~=qC%!GukX^gQمJ L.z!Q" ^7qutLCɭTBI>K]Z2iYZuz۲aVҿ"L$=Z|=_%鼜=]\K9^YG:үxAqѶ-(+w@)c65WխJ{'(zjk"<8o0xj|&ޏ[7sSd[ pCݪ+ß5}zgg$_Ԗ%Vm'Ϫl!I2ÄDŽSd\- >] Q81R]~"!`msAfCfWxG6x缶.suB]|D32*h::y51-u ۴XTSW852\#{Vc.(CRNǔ/U0jYbYL8.yuզ]'B"c1_R⓿#' M9\jr/- ʵ5K SK9 > c1b(-Ef . 4bGE9='P{YodlDQ]) a 'S~aj_O`x.9R% Ƭ u(*u<=/*`(͑ uSqF>jT FlOa\uw) T+D0|+xZlt)ƀOLV<vݘfv۷FP |i8f"}ɯx)&]*Vp_U1_b5}O$XK•#)EBXo [iG '#]&TLRܧ[4ik0Kts.L=QVvblkHO yr#8 UxKom`fB 溜Y˒cHbnI`+a#-;.:Vji}Apg*n-YKF^/WZH];xn.0!/.{бؔN :vE\ d|㶾*h?V=0:~:TC ^ F36ΉL5yA]N ț7/z $mh?`;@kؕ/$-׎Іw ! K݈R, n%/ub9)#>8e[i:&sZiP'3+BZ<+|s~-'ЗU5[ʙ }%w^WaK3Ԟ]}d/ *xIы`7h I+,: =[5Qׁq :6"ңwĝ *; o/k9kjcy~čȎmfo*s&2Yvg m/CվLKGVKLw6ЕdHڹKd;]/yڏj.^r"FԱ Rֹ\,'Yә>Rg {_cv&u*7f?AS"E T[J"}%K./[G&n݉hO$+L9~ESnjLy{Ws1'gw>C?bb8-"%̎3u4tfSi*L(rb3˞W"CQdmc8ӿix-Envk,;Z`]h_虧L3Dr~LґK% x)<3AYMb~2AxT0j?S|ύF Wy2Sh{V[`ôcy UF J :,@gyrXYzF+-Ҿ;~̭^sy(0< F|z<x1Cm|zȞkי5B`hXXWFn1yrtwʉOGEeU/Lzʪ ڈh1~e ܍P ȅgATpE% WLK:-њ$0"]he@ُM͢һ@ɱ@\gʐ ELbAGtFv}l휌)fvê7KD$Fͱ~D~19hg1Q})%-+k@ EYlDǴtHNzk[ߟ٩'60^ ´ed>AĻJu&(ֹel[2y,;ӑ*a]qǥO!)nfDj4DUYzŠ"QX]1s,OX,qI䞷/xvdm{9uQ,0^SAW肟"Bf2y%gd6 _%$~97b$'/oWDי$$0TWFpMTtvV {.}+{aAl|0wvY#p@_)Z{qIíaP_>I=U3ٿk\1f6lPЄr7ZUfMØhlP!V}m>+K>?7j,,N{=; ȓuew` yJͻIM6*R כ:nԩ)]!KC+2) yGP~ћ &CIQ?6>rv/{[ǽ*D:,gGg:$VZfQ,/Om:S3klumR`XTOIJFj9*0䅯Xr`gq̙Dqetq>*$^ 8AibHtE PgB> <ׄ|[r`jrS0M'hd1J]2O0hgm~&f*J/弮2GUHG+'wPܡfZjJ2IqV2b3PB f~'%0P| uwڜ=_ڰ[^[V BU~yHYgf1t B՟!"[V' B`N(R__dc7^w '+\DadƯJ2-NYӡsf zqEZWoȠLˢjfDzS*VETY8qlp5cBJ(Xнr1@nXش<%Iŀ$FJ7ܭM_? .5[KrLuLpSqN1F|'4I#hN_-24:1`;V磓@Ȃs"eRڟJ4]nG"շsdyB& :BEjY8[YTvs9#0SGhF1G J=щcb2S>6]ODtr2Yax!su]j)ppaHW( =GOF]B\ mrTՄN0Ջ~J5Φ_`BPv:#_T.,J/t7X ۜhCO]uTכF_}Ȩ.6`OqjNE@~?1䦫Cw?g6G(;v`J[J*W<*n$xc3P=Csۀ0͆*ҳĦ4TxpJ۬X($Uba~lP黺Uq\0pe\|3mfY# w_!u:I?|݌OY`z"388c$Ԅ`OlPR&1af"F1нJrQ;SFFLT?#;Hv|Xt7C˅EBKЌx1|T@Z=CLgR&kgq-ߌ͋'ȝe˩pDyo6. JYw&S7ڟF4&GVeSGS*㳖>1rI)xmmrjxؾ՝mMnmp̭>XHxnUHb x6g<x c{^;fd>z U7"ují{9! zVCysIxv]}p m+p~mYE2i/c '&꘹r},~%xG@i3~|m*zl/O꽦 Ԡt ?PXH,:9IkDvZcU%JopGn{?SK-o\UG5–'dZy$ZD U;,OH IFJ;\gP3X.PǂS̛J>295B٘*ڧE콼R\)ǂ)b& ׻RcK Q~I`5M9յ-LF]IdZpInmB6W^M|(#Fe֠<:| f?*e;7XֲC+q+~㭋-kTDZH|pS ӧ'KZ N56wc%.cvY3r v[u'4шԮᾠR:/o?Y=C^JgY]h+ v{i7g#&uCt* 2-sZ,K&ќږ;M/,b7FDC&B ,zSߌ)/׮d|} 驫Qn:j0߁O ɭRBa򿅔+>y Qr[a)q[٠>'~ijx";N( ūUR[++:#ɐ->6_Umu@]-ԺŘy=n5=H;ٜfp,"2H}@fk o4j'*XkM#f{=ql;x7sn  S='UK2&Ӡv=<&ƚ>4gm%ዓ 44}zb҉;^%mz:QMg2nbQx_E8LL)e=Kp*uRkhU32ѬÊ8C|0*T,/-H;&'74(r9V>|Qͨ!qDz%:c\-A 51֌5EC<ݰ_mE&8C5ko(RܖnHS=1(._L~eeVdu' `L jҸbL75µN:#3rԒJ蓮K7)y= `Ԅ6Z}yy^VsD$DkvEmЮͳ0UĒ6H\˼1[c=ns|6Ld `wg]4HT@N*4vKl7MbqɆ[eCof)~R1 Ct XR&'Q\ $!ë) }S5S\^WA6Bg[;T/|\Beߊߕ'=,+k6◣pd3drߧxՃ&VNi99,Ev5םܶy[ywt;v3u*eeC8(3k+*BP5-4Ҡ 7*QɩC5f:'f-QYa**"=zZ8Kpc|[Z- V:.jgPh@[&|I43h)a}ݔ1Itӷ)uxXۃ2g¬V}2 ' ˱N󎔩cqۆ`[ ,,Nx~&:@[˖tc).27! 3Y]m1Ei^ئP6yiޑ#0s$#pPc>Hv&Bx$}<`z%ݱQ/.@_nOBGZT5 |8QߌyAsL*Vdd8gGg2$rLL( yZx\]W2!L$3#| wm9LpfSO}3dv?_F {G+{ u[endstream endobj 21 0 obj << /Type /Font /Subtype /Type1 /Encoding 82 0 R /FirstChar 34 /LastChar 126 /Widths 83 0 R /BaseFont /YSMBNP+CMSLTT10 /FontDescriptor 19 0 R >> endobj 19 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /YSMBNP+CMSLTT10 /ItalicAngle -9 /StemV 69 /XHeight 431 /FontBBox [-20 -233 617 696] /Flags 4 /CharSet (/quotedbl/parenleft/parenright/plus/comma/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/less/equal/greater/A/C/E/F/G/L/R/S/T/U/V/Y/underscore/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/asciitilde) /FontFile 20 0 R >> endobj 83 0 obj [525 0 0 0 0 0 525 525 0 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 0 0 525 525 525 0 0 525 0 525 0 525 525 525 0 0 0 0 525 0 0 0 0 0 525 525 525 525 525 0 0 525 0 0 0 0 0 525 0 525 525 525 525 525 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 525 ] endobj 84 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 17 0 obj << /Length1 1139 /Length2 6413 /Length3 532 /Length 7150 /Filter /FlateDecode >> stream xu\Tmv(@Zr.[z须AB@JJBR閐n$Cs{s:cZ¨-inos@DZ0KXXQ3NByrGD@P"`J;xV@vi*Ü=0=pJ5Z@8!Ps4GfK'E; {п.rEM7inog4GX@*j{/7lgs9_l6Uao@(,E˜2bYEg .igirCy#s53 hqBGؙ!,#-_[wR sp@T͐~H(;|?e}oF!&k7GYy0 ?D$vw 1~ ~2>@ {}$  s&(R v`07A @y ?Yޑ]?^?׵u{!x/ A6\A{]?^ogFJ݋"B(,(Wj!]2@0 P;l?;~_W6g3mJA`sHu(wQIT݈85Q2uw&(qGv&!|7C,úCْk3V6D#~槙'~C˳x?FJ؁=yټ^J3YqLe_+CH5ì^]y&#OZ7ǎGt_c 0 Jd-iUN?c洼x< 1jN=@5f('t4Ѯ⽞t~;= .1`lIH|'Y )%NVAyergP;u(1P`v5Jٲ Eh/Ɣ{[~d!AOU:Үs;o<[_L2}E|sgZLǜCW,n,]OKAܯ-arM]N?}S#h]5NT\*cJ:.:}$hӣFJ%jԈ.[渏Ek òe(?5;:WDO['W :Iv =`ǫFN7\({9fjژVKy(P[` 4|Ԟ#WZktp-̇i<:Ƶ|773 &ݾ>\R()N {_6ko?J v$]~gKTt8<$&?&͙:Ih:Nwmw~^MQkcC|a ?TZّ>O&=Y.kdž*7'kз.HIsYqDwB qpHE+h~Ϟ(ru)G~E IJJZ \ՏUmFNv]R)-C6E!V3~BdHle4E.?M=|0LN"\4N.?z -97Kd\D1f'R*E0"✼gxS r.Zf^8̛l,ZKePRM"/0V4[ܹhg'=ѐ6I$|#ؚ;G4¬=}M4HK=gHM/TXDo@[y֟\mw8d`zU$^mVD 7 ȸ%lc^L,dQ* ms4jt9y`}`[Dm:1*l'}ɅpO|a~i%Q Zq!ǮfӀd6cmLm1ҕQ$X+ءiC. -I?LRi.4f{1N1".>~TAp/9VB2ma)ƦR<4iJ۹ L:{Y=S7A_u[mnjI.: M({~KPaCq[oo]3tXaL#Ҟ蜻$qu(/kq"4ijC%$ %8gխy:o)<|6,yLshST(*dZoal!DLۂ67~ >qT5* cs5H*DZ 3΍m,6cFn%B2uX|Ֆ见:9W+suNRԋt|~Q"/lДViEvm,W#O* *[?g S)JZ<7m{óF?iq&|Pʋj|/eٓ_Z ,ȂL [1:uY4e0/} Nm.36$}f8ëލVb||ERcoRST{"۴+4¼ H~+Îz , "tQ1AI iig5B'ߦŗ%T3z|lDOaqS;$WuWw{hL(F} /c C %GLW<0_beR,R/SS4ZT_\J֚)]˾ڻ _ЌG#'[0Ao9 g?#`. Z<Ǖf&1RRӋM/5jJZ!3$ҔnS:ښMBqR#1֐>PK~CR""Plf2qм/Z[9W'Vb\va"77`+6,*%Q8 S햤(w9~^ l߮u2hQ3?&`o#:rZD}4; _Ҫ7*fC˗ QvY>fp=L)3F:b3VI7.E/6' }sH=r愾3wψs[/ֱ6O&limz UNǬk%uҕu(BbV%8j'L4`AV"׌ho:]sg_f,n3Tб\1uZK.(n"{'x`]iΑo.JUe;4lZ\6foؑ IPd&eqt/> ͪLy~w*&Nח^EP~^̎L|ZF(\Iw=ClT*E4muIuH˨V=@8s\߫GДAݢZrwQ&.@ʎxɾEo .]IT{kow^ iIyv$VႱ0\TD%S ZehPג)|k&W׳QV!w$ofQ,-А h4zY٢^a"$_ bdEP.^lP(_-v Ds8_1&qQ/6zUZ5#{ NIޅ:xTJ&} .PN1V"̊jnǡg|p0BZeelr [{6rTđ],`emW+rW*EM]؎&>O@|%Y:Cn(F(,c-eĞ`%@ 637 Z>(f;hX:O.F(K^˰ٷ9ߔwF{YhIҾzhn=w ՜$CQ:_r9)O U}5ZZnd1=:h݄R+N3Qs3IPˀBAyZEtzTLcTS0=Y.c)0_uuxZik.MkLV`͘lO1vܭRZπh/Ln}B6?Cq^ 6QȌjdb׶47 8A/ji(,Sox*$OO]+[wb6C% Qd g;Z tzk j~䰃w{@sAQQPmo.|ق7hnNϘȾfo3:su1&UΎ|d1eJ(nn=_T98}ZZܷtM&IP,}h&ifX"Ooe-"0])) ? JBE5dy5b0ƅ% pMiD#SO&օR͍6yqG \DnSoI!m2[8. *Hf Zհ&fR1W)wz|3P_7զ.ngJdEL'95#v?uoQӞ迪fԤ.@1-ψVI OD,%`o3͆yOy_JYH.&m-ƾ咏b.ONӁW.z/%}h1h!wQ?G=I[d|paJZ:T/9škGR[!a VOНH&I_7n; =g߹㔋eE9.pZ(wmWAGY&5w&IJ?t톟'V (?.`?zr)@ )@t=5sAݷP|~4,KiwasՉLt{rFx3=}!t^&2Vk:~z6eLLU'}s J`P'AF :-;*sSfRkՙo~xO.0qal!Y}dagH9ז>r޹??vzJD0ɗW{\4&?sd7!xS:sݜ(L9kRj;N!1aڳ{S-G \`?5g%&?&؈щuX>y(eBocҟô%ՉyZr.0UЁyaOݮ4߳v'K Ѫ2U3g N -o5(]'h6t* r~?Jey9xV'a'|KX..cOzn1Wj!Ĉѥֹ!K)_7ߝ^J'N^p͟n+28} &Eݙ0^!Z4E? $;jJ٣Iu Y;^- ^s4`U||ԕL[ N*qeذ!4^N>O iӎe6,+Uc<ҬǸylXITʭ/Z h=?63*njw/cwsJe6 fVt'֣&i `W Z 6/'a ,n\w|u Xm~5'FeRw*H*U^'kzoLzg!O»>0-,+el&M~8Vbi{˗Efy?)vN:b?6XJvBd ~2NRKc\DHCwgBźea_󗡊J+àGI S b6-`Ό#mY3C$q̶궄vO<=77P`T+󮯩|g>[" _tEA7mY餵?lLv~u1%no VdU~V)}2ފ? 6/>endstream endobj 18 0 obj << /Type /Font /Subtype /Type1 /Encoding 84 0 R /FirstChar 65 /LastChar 121 /Widths 85 0 R /BaseFont /RDMDCB+CMTI10 /FontDescriptor 16 0 R >> endobj 16 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /RDMDCB+CMTI10 /ItalicAngle -14 /StemV 68 /XHeight 431 /FontBBox [-163 -250 1146 969] /Flags 4 /CharSet (/A/C/D/M/P/S/a/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/x/y) /FontFile 17 0 R >> endobj 85 0 obj [743 0 716 755 0 0 0 0 0 0 0 0 897 0 0 678 0 0 562 0 0 0 0 0 0 0 0 0 0 0 0 0 511 0 460 511 460 307 460 511 307 0 0 256 818 562 511 511 0 422 409 332 537 460 0 464 486 ] endobj 14 0 obj << /Length1 1534 /Length2 8331 /Length3 532 /Length 9255 /Filter /FlateDecode >> stream xU\[kqݽhq N`܋KqiZXbš@q)nťۗ\IrwgΙ0Ҿᔱ[PN^.^1W<^.Y FF9 ;[@b^QQ> '}0r`o `c+H ,P;,#@lB2vn@К ` , g <);ۀ]gqm3i vvXm05j@3_Zp9zw @eNh rwUe#JrSy_Vv( tOP^UMWK 3?Yy3=_^X ?Ll X@ #A//l `P'0㯉 ], @gG k~n+oE)$ vsp}oA vÂ0P낰P;> [ ?"``=a :V`^v=0Π?uߛ`VS3i&+Hba[wE0Aܬ߮`7l@X@+:Fvau B¦apa<@+s\ynV h.XV)Dxx=LTc~U+w=!m@ ˜[ڧ/ P(/GfmLШ2X<ʶ\[ gy-Oqk»m f u-}Se)'}y/Y_2 Wpԍe{Z)䉗4`ľx ns'-@M~4By'38f/I&d,o{kB+f̬z_3nt?y=dsT B7w"W*9兼ȭWw҄_}%H()2QESqqV=LGCd~Prg^Meaв JeZHokSGw?=Ct£Y-ʵֹVL ˻$A eP/3!=c;1FT;҇TBl ڇkD'9<. =#pe u=q~%r|W(n B Fxga:GRe,YYID믷|uY޳ Z@d{K;w!}x'1<ЄW+)skܙ[Tq}YaQ8R}ι~i=Rޚ2*]}쒌yz,!%Ӊ5XR%qks ;QPk<`W|~rܓJ̧;=2Sy3:uIYWBq7tA"腄[ Jov 9=ETFkS&[tH?gUّ0+*W#, ֭LW>}KePwPLҩwzy=rN^TٗwMI^\'hkr,hWpwL %~y6{{ylv&:Lcrt9Kmȩ.bBQ׶4skw]Y x:GJa?()$cj톬^!YzeƑ?&>ۉ4l rp/.zsq'f9V9"T] j;؅YϻT-CQG1׏UIRMp\>GoxLQ<1òbRΉ2x[i ~_ܧܜ t=*hEHUЇ$&rxmZ&d51ra5J^daH *SrѮ&Dbͱ< +SJ4<+K_e'iG34lf˜{\!dzntTBYNCasDʀ]{$)C{bW1Qv7H;XG~3DF>]f&볊 Vbb%x gH,U CYz@0ݡ)κiryx%t}ɇҠO`*)ؠD '!qlH^=ډb.FvzoD(=~AB#tǧ&F~/jUvG_ݞc,Zc9 P1`5.N{40WGIuA<3OhqyEI׷iu׆!BTϟ2ҡ*pDO aO$z<~/q./T $J]i#h m HL Ztđe] SCԟ H$(?."<#Q9OcX㸪(yqbuX "! d@&QnN.uK ~w2AXެlDH!}Giz\SnCK1 Xp'm$ﶟ݇"p-`7&;Ƣ/|ڒnBt= /Lb0}؆JxA Rl;,Z}oSŚLS_@jxנ4/  qOLf sDKPkCs}D_wi+h֔~<$ׂZ_eJJ*It&eFT]DPgF2U1ƥbo Gj/~YTLؖB=?Z M|,ɝ p$Ŗvk襩tgr20veKHDh)v9Ūg֗F5AGЩZIt<폚 ŌUҋJOFVdMmW'ێ8+{rEjio./+F/~&ywmcaTm `4Klľc1â,C2_SeU5| TVxS1D.yk DF\-ͤ250jfpMG1Ub~>ΛɋH.J̓]czqtnt e'18x}Lu!YBvS9LWnC'kAvWa|/2ɤ*=;;דI2EH6 Z7QT4Eb%B!2 xUmKֺ[? IW"͔`:Injg&vtZ> -j\5&OYf3&MHŞ󁕪L}-ޅinP,{MIfЕw. ]C1̃4S voVzm <=މ4+'^"FeEp ?58)]J޾tYK 'ɒoߘ }KZ!0!:^MoH(JOQoWdhuD&ڭ 2LJWN+b1oLJ2y9Z?KY W}k'\!^nӲe)~A |[X #VT/5 Ly%.j4z`E~TSГhlDla43"uF1}CCz |QH-\i)@<b!# #~%0$}Zrs9k sn)aWȐGL碵7TQLw K2֌f3$_H,6+sN1X%< J񕍑e"E+/$[!EDt*ӱ/y6J:  _z]B112LcQu :شv 4}c3"-,>JvibMPS 0H8Jqz9ya]} T߭#kֹcg\$5T]tnMtK/Q][.G Q>IG;'bk-veI Ktސcm<[-8YL:oNG#e)QPfPޓ-='g"gUy/s={"@ơN%)Hvim]}y{ Q3kȺPy$!\KPAt8"U 6yf&4)U>L%j_(P{b䑴ÞågMܢPw?xlb(1xs;n~8j,?9<L#gRO3e71YR[ILMa]1݉ƒN^W7OsI Mu=:ǧ eE2t ]%e ˈ:_o'g>MٗAX"Md71!"2a.μ rҔkr^6.[ fBv1]֝Iv JQT+"ΦWm["(ڿ䌫d71C_PÅK!K$*xD7dNe;;# @do88h<|il#ȔTq;aR*H;r_{HVbR_+2ohyAYl}C(s\~8֭Aj`>gXj;."EպPn%S% _ak'a1 $M=?*ե!,7Ұ;e1^op$@1O4 %JIpR;uj6s;%3ƳnJ䭂zy #w`'~1 FZ x-izN4mJzqF仲-Ę5?BYuٴ973o9Ŝ }F&on4&_G>!,Y}5!Y{>8 jnZƦ3bW.{QR~~j: FrH"K6ޗ].N_FO?~@rF7leLe18)ıZhdJWDK&䰋J6n=h:CJɪ-9 wҁ8Ey O.OQa!-{(H.byki hH5ɬ"zI>ll{bBzڼ@FZJsXnu%k=}:(F-ZNzߦ%>x.)z@ b$eqSm:f]^gcS+.UU>ҦS :rEq q|gŠ;y[=F#&f:a`)C>N8  0ʕK򞓘 , sYb»!vôIic@'m*m%ADb~"!m>\йu"4TwO{rDTn9CN_z_ChX2Or]ӕc&vyėv*Osm,v]tʿ5nHTȂ%&XS[|3'mKYҕFf.5a`4xIΉęeann^j5g-ifv; )NْI!㫹!kk8#e ڛ9DoTTͥ֋Zd$gϼfN'ajϩz4ZtWK' {#]vX!foFI1&x{2ZaEO!57P%LQu%7 iJQ*yͨ1~0\݆ï=ӯJzS-*E8ו6\zwSZ 33Դ" n৘i2r SBo =@Xow" v5r"z;oL؊ԭj19f4 2b&1J`WE/hio~`Anj~QC-F&Y4BI^81 /D?76ZIKOn8Ѻq Ӑyc,& #XUGLq@XvNЎٷCH6;Z '_6 [&͸Bwg9W}Pcw-zL\I|$m Rãsz0*GcY"C#^$|T2 (,&~ Uڝi˟ֶ2Q0u(=~L)L\F1Q1`*^rr?P_#Y29%x(I &[paQ(#Y987ԭoؤ9ud'eH]eXB`c&|ceKzt!okW7!!,Z=St (̙1)(k >^[ۄf#u?p31sEAfUI]\<=G&;MF\?Cӡq-'BsCtOǍ'JMDS|88-*žb} _: mZs}p@"~cV =Z2XͿbZog$>Yc~g3mŊw^hfX3i2p4\)Q+&7Rĝt"ŇDvlѭCC[/&T{3gŦXTYb S2/jx=*5> 3짼pHugjiOؑϻ9(ک#6[S嵱}AI)? En/j0H-u 't5VT DV}7 vÎ$@_+ԒsuzA>Ϸ'Gd?LwBR}=`ы$d.D t$OYǽ (o?3$;$ϙ?|aO$rZ@`' u\endstream endobj 15 0 obj << /Type /Font /Subtype /Type1 /Encoding 82 0 R /FirstChar 40 /LastChar 126 /Widths 86 0 R /BaseFont /ZDKLUN+CMTT10 /FontDescriptor 13 0 R >> endobj 13 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /ZDKLUN+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-4 -235 731 800] /Flags 4 /CharSet (/parenleft/parenright/comma/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/equal/E/R/S/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/l/m/n/o/p/q/r/s/t/u/v/w/x/y/asciitilde) /FontFile 14 0 R >> endobj 86 0 obj [525 525 0 0 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 525 0 0 0 0 0 0 0 525 0 0 0 0 0 0 0 0 0 0 0 0 525 525 0 0 0 0 0 0 0 525 0 525 0 525 0 525 525 525 525 525 525 525 525 525 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 525 ] endobj 11 0 obj << /Length1 1815 /Length2 12967 /Length3 532 /Length 14003 /Filter /FlateDecode >> stream xeT\֨Ӹwwwqw'xp5@C ߽{qiYs|֬4:Pѝ `cfeCw89Jl) 藏 jce' t17u([@sԝm>Q{{?WԀn@WO3`qD`GI ﰅ+lD? G-IGs' G+;7{@c8Z@o0 ;'K'W,Ah9aSsW'`q>XL@Q7SPode큖r9w;aPes'?.5OmNնqHO$ tu89\ /w?\ #wkW_tO6yu$:,@6s_ M%@!нIx@7"@2d,@2 4ͩ@N *TA*!PC44U/6?=:Xl^)ٲ G AV!_0mB_ AVtYB_r AV.!/go +d8Z'Rw|^S nj%4Rdl!{6.;4`0.[-eJ)vy}[)D|鏚^e@MnK73ˆrI @,!m(P`sl+Fl:8,rDA~P ו$AzO,n@Oe!N ]e^Q¿ c |[DKzhQÏia\…H~.kaQ$Qpa<=kϦ+W>9oa[ixGyc ֲW(<Bʝ/3]h.G(>:IO(RE!;,7PnMnyV Vk5 ꎾ{kW_3(` ^\6U:~^L~ML%EkqRnDjca!< E5%K"vb_;2}\];@jQ7#ج:ڝӸ9u谶ĈP*Kmz w&!P n‡,$lԗ(޻ȴ6adY]^TwKJ*_-HYKvu%6 խCi Sxp[PTnc a0aW_ZǴjjXقn#_ɔUG*Ot|"!&љAoP%ťA:|xbn+)΂>*D(+ɲ\ܦcqCyT)i`7  w^ID%⬃y+Z⥵l`YSpա{&ǨTgm )4/P!bB1rP#eϮ|^)yp:l$Z ~47&S<z= >3SYSA,4[OD*1icD5~Ht \Xzl9-ug$DAe,URj/f= 1g {Rڦ n|ҏ*6@/1Gj5}Wk9;So4xoP/d(i;ڡsOD4DB69"ii5}Hpϣs;s^se*ĕGx![Ю?O8EQBa([;ivxX Ta#ac]=lR Ǔ0Tf<^~z(y#q5J9ܡn|E. 173?"}_$ƗceiED}ZfFx[+?=)^Vyi<zO*Gy\ CVZ/Vҕ#&SsNKueC6Ax L5);v}ޅvUcfq;]5h%/9rb)xhByRceji}w= WIHB=" SgFQ:Io{좹q2UrM5ރ\M֬'GYhuejf^҈8FmH:C)V^rl#gJ|\@vYmKe0S!R`ِUwGgC.02$+ƥA?Y%$ 3X>b<->"7f2Q[氧+:!{a6p`^:MONLOsZDn+&j`y~hCzjnrƅ]V9{d, ye K֪X}x5X夣7V KnUVJwcf01w|]3˷C颺<%!5~ZUO]WYc˖HC]}kr=#xY11B1ڎ ՋC#~ܷcή~ ReJ'ݴ"4c-7wBhdL)- w \h)mVF(YVjp٩Ӧ⤜,?*ʹW|lV(ˍţov^h@eG΢݊$G6r8Uc&CEʝW`>vݞ~}1 )'Bc%q/^&ސ7#`3 f"8GnG0Ϧ^ /h~0F)N$M (nϤ]IKI7ٴ%4SnqE6gJNfS[gf %Jue9BwyT"pEy(O kʲCI'N2›4qI:U{0nMG6` Tdxt2 }Lw_3Z!euIX3/~w3gKލZBѦ r¥f=CøKTqLr%bQԛOOj "eDDekWY2mӥ_rcy; Fpȑ`Tt侈Xy6ҷXҢR[{]m(PgA[=[Uv7UV`rGي~>ZzsuIyRs׶h7;W[AϽ3;aRF ]EdS.kNk1VeVVL +. rV p96 ]+5k3Y϶RL5[[Ի w/* K׮|9i ;K\쏟96Z0^!~Z $-8G]T{ްO^Wԣd_q3$Ȟog~Ѹ5ȏBF'J{/`ӝthlkv n-^ඨHB_:GV֨>jjU@(`w5>8~g !b0}yikxT Iq M'`lr.+:rbw+&kPi(Z!QJeaHx-9DN { z7b(<, #ꁐe*Hcj}PٴKW(EdV9JZUױ7/A0w}Q_0lI2Ieu|ܢ;ƨoߋ !-N0p~}}&I_XTvԢaT {2+/YN{ $rD8ҝ$ڍ@.ȿJg~ZoL%U6bg}JJ0|fM2&RK0yp9N涆k%:fhW:Ȏ'~uL\%s TMХ]*a bvRkMlb;L*g1QlSF3ӼWExrO5d(=rlm~c3GPMHo'm$$ ߉qQz2vڴTxo$F;xONK1Unw%ˆ$e`&P7' 8T' sԄCJ'h`e}gB<;'1v`f? ." 0򺩎JW7c }kb6.N*u,k.U=Y zl@,n/TIhL |n6y9A~Џ`AY&tCG|WҌ8B~5M_¨(W2?t+!j 849WCύ)@hUp +f).khx0Zpw>gױoAd\/^U z1:ܡ/[_I,h=?qtnCF}D˟+L.2XڛȈ ^l>#y[5m~{ aft"+/Bw@4իڿq\s}6Wfǵ ̡9ڇOxq2mbSd.M^ۦcT$j&$Gg *ܓ6W {NM dw0gWp W,K>9ui 4%1r2XmŎ@n1*LTkb jrXB@s"=$}5u$7|~BԐ/YpXTL|oԮl87 {6{L2IhRҬ0*捖&@!jd h f[Qlw& ";5;R$IdP[q:&\:lyBPH$o2I fc^nCˌ}7vx*_'DӸ;zN? }X/pd=_ *֍> 'U #W [Bu6 UZ9R9^fKđt8$*6$G($0GCrch̛tLq*L7ya;npD-TL|4/x+3#%3ÍaܜW{ͣҰ{U9DXU|tOvD R~!Fm&4{^9}sϧ{g Z1хuIFRߴCv&Gx?*F b?d Q" z%؊pBi ^;r!_S+ɶ/{UBC\jkPZ.Ghrl2 \'+Ru\81ZܵyGDa'wYPiJ(3\M#`+H=Zw&D &AiQEl$dD龔 ~%w~8P%~k܉P淃3 BGR3BγkSoHe B(>@'ѽ;/ٿ/LyL` U;sʹ̛cI/,AWp>Ӥfe+e)k o ~{iơmX%}QĽS2\!<@ i\PKKAlc.zNtlK187b=Y4__);-_:i2h<Ќs]*o .4$۝QEyI.vރu\>f?*eή¥4W2\G@y3NEgC@pl4 \|9rxcpXQ"xq q%ԖeZx/6@@M!JGbTp`O +tVpMi g+5\gx-qVb_ O- y?@? HF ?I>bb\sX;tu(6-n;AklWN.mUd"GQO I 1Ր ژ} *Zǿ '9x 4SYU(G)0!qlh`6 ~2/m/?lg[Iڏu}zaUҳ<+JPwEi\YP]k)w.{IU՘B (pOOTx,Mk(1ZAr 1H6sF|X& bNه5b:|ef6q}V(GbuS3(-^ȯ_XzCvj*ڝQ~ aB龈qSS+6~ CxO>+B7chqJSPWfS^rh2N6Nuq)q%֊1醢;1_qk&|˔9[igf_E=B$.6&9&+QlK lY>pH} ڔa4i)GVaȨ_LVIc$}Ȥ:հ/^ZIJ\}LZܮHU|Y^a#4uC< *H߬55nWKm`CǬΩrqR}fsdUh VPnGdc>9aiXae[}L )Ys4:SŠޓBpeƏ^2-ʺm>] [wδD&"CMIԌ#`"!/Eq=~;$ )ߜQ q Ot4y%vIs!Jԍڬ=ok܍@-y5hNۼXAUwO DfZZ o6.0#Rq;UϲsmIBğ\PJ2JX"?3Ze3aRZQqWgEM ""<}"1Le ]Zbى9l<-F$*k>ɠcY0n$,i ۫v#Aw]>^4RhFϋBRS2AX&eƬfmz "bñ1vG:ת}kz冠W _g 8~ݨiae" S #-Z G(_f;8;=ƩWf^do톺Cd~?>h|<}e{ȳnޏV,sغˉKuR]׻MSCB184ѹ\JlĒV[H 5*+b]p`Ė3@n!?H sr2ѹUY;p %4,Ydž HR!v.5C"m;Qk ۈ\)*qC0tXLEϯwܾ8N҃+50qӘګY6+Z@XJh\qux+O?׹YR7:g܁-ZaAuI)Bj _6IxҒtK3ۜܡz]ֈx.jIBi ?x?c}9L(~ti6>sC:_5ӿv>-3yUh}]KFf|_ƭw"GukT nq) | =m&nY= 7Ey$kZ'$QC*:MM(ŀN1\#q}fAjt[304v2M٨6HTy Ru1B,dK o>!J %ټaPD؇`sYIO)\E6qVKR haT36J l.w7CIKuWU5#GEr|ױ fcǐ{eg.l"L6&&(ܓaUbx`Wlr[k&~b,{Mِf̦s8f9N6Nq.R^+noSߎY5}6|5gP5T:2qnvcDlvC܂B'0js#I -FLT _dY9 t1oLu+nTAwEjΪQJ \,a051hPZ4C_Mw qu'gJZLm-3w{" ڽkL{~(ͣ^Sִ+Դw~;pM}/btcƎxGE9dZV=Wf^$hChxċVq3oCKG#1^]1Ef&4hT¸peY#J7*pųbvcjOk- ؄ct(%fA ':5)I9R-~h~U_ŠF/'+*#wdp&U붺n %Et,tVY_6q)m[&i*;oj5=\{WDa'OYǡS,QsʃMhG%&pc~bdnޥ&CP].LrhbVzx={*dDENF6a>X/BV٫WHGveY {OذT RAX $0dTZv)"..BRy;eIw`rMxлxTFF ` Y*8.]F\C׼a+O;*tzA^@5*Vt3^Ê(d| 0 m2:&^MB,=š6bvDAմ4Dw@`Jur-uM\ ?-oq9 z ]"7WA<_> endobj 10 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /XKYZQN+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-251 -250 1009 969] /Flags 4 /CharSet (/ff/fi/ffi/macron/percent/ampersand/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/semicolon/A/C/D/F/H/I/L/M/N/O/P/R/S/T/U/V/W/circumflex/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) /FontFile 11 0 R >> endobj 87 0 obj [583 556 0 833 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 778 0 389 389 0 0 278 333 278 500 500 500 500 500 500 500 500 500 500 500 0 278 0 0 0 0 0 750 0 722 764 0 653 0 750 361 0 0 625 917 750 778 681 0 736 556 722 750 750 1028 0 0 0 0 0 0 500 0 0 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 ] endobj 8 0 obj << /Length1 1016 /Length2 3740 /Length3 532 /Length 4431 /Filter /FlateDecode >> stream xy_ &fr/%'[x3CftX VPK"xBH"N :APGc(B  dz @e@dyE?YH HmPQ d?X c0 0zߤ @LooNNn J?gz`?PFB =HW7*s~"ATRN*@gbRP+|D 볡/ȿK_' APV^/,/ˀ3ZുxoL|d췋Ҏp$E[ĥ0H_O3 ߼USٳ`5VtSbˈؾGj* &2LJI,(ŧr?()yZHj5Bl֌Nty:{<1rʢ1ٷg ڝJRq){HUj7Ca#=mټ~s k _W/=e(TxIڪȂĆ9^\9 <4bt 1Aa4uS4{G',wݗ߲LT:߭8T`t'OTi-xro,Pe - ]vKES`85 Itf{[j4׵%[{lresEP\7< X*ݤҚ:\Shɗ>5$gh"{Rq"c'|SXLdle%k ɍUiv;#*>y7@ޖ.mi{t>|8u.XgyJonMakL TXNqrRlLRB+jJ)j`YEhBjI n3;|Y(h(8)*2,yo6|G;:n&K֮Nqq׎Xp%+d>XmwveX&kPN ) -B  oX&}N]Frq`|:@\ݳݬ.Pd9),֥_4G7CO_ǹ,g,tWNyzY5ĩi!?'%JXd11ҠxBd3h˄J5 1_{}%" +G/¬bn>:zRW}B=)-%9:y} dx' 2b iKTcu8w1/n?z{ӯ*!B xGGU.[YY!BY:)> y%UMzFB0-r>n NV1,K64Qu⾐^;_R3Rzڒ D}Y%BM$e0uT Ϲ+YXFʴZٵ6n;miL7qS]; 6˴$K1NmRAM!AC]E^5<_[y\^ٗߧlp?y"<ʚ6dTȄWt@oqai;.;OBμ2dЋm=#m7Cr&ܱJs8mz W2My2[g蚝[; ?kuξThc:lmSTQai~P>7픁 yaTV]GdM{/'?1W,hV~=^Q+ZNԈRdUD>_*ֽKM-[{0rd>ZdxFuDg3v^]Qq|YO6(T>'Tk:ee=,+a)JHfrnqQA.q"O_4< pv˟ "[#zOѴ'{2[ ᾷ?-r.acjpf{&Io=zu*35xǣu˔d6k9Fۮh He:T}mF b+DV'zpnn[ܮܦTrT.풱7I.=n09O@l wz0{\ ᜠy(BkGWE_x w35'}9vTPxgWY $$ |VY6vFk 1?ޠ*C.ZZE|7a7zϧӾuH;rEYx)Vܽ'Bt C.re Q.ªkԷa"4\o)C smCJ\ʓ#^zu:)];w֭^¢kbg+#֝[A,ڂhjl'zSl8Ajm)A,shkӟ[@|8stnB'.QPyhu+aTP@X~fh:~a^ڿ E  AM廛V$yUȢYIxE?@AYLv7P!zf''_pe󄃦v!r< D&.ڌ$uY!j츇& ᧺3MxQ2D^S8b13ĦŇ%Tlo($m1 d<`uN;̲׽5ޒ5)6hGwxh^Y`wX`enIU7ȹE1!a/gTϾb^[^h? k|O9ylc{oKp51E@(  ¶l3Irkb-p˦v\Smakζ[{7Ib~f.RO'vھsp ezQzʾxb8yW&R3EUBjoo uwGuQgsymzh;uC>|$~Jv݃8|/n_l9^5cwa1y:m'q|%֟M5蜴Lmw|}LKԄp\.ܾ};hlpI1|E!ʹtfk¯eԍuTVlWw+1ˬ2Kԙshӎ>]\.4~FrW;~I#2WF]zn\riEfu3r;xh45#>˜Ϥ˴ԡlAV:(cA,tc@HƎb=|h6bt-RMf_Y9ˤF(K'*D. _Ņ{=O 5u5Zt?;l6Gut㫃e҂#Ϥ>zjoZHO~KuȅQ)*mwnD73PmƽԹ1$U!HfBWVփy܀F/gu{5k~O$FKGls $@,fZ{vm)yH^[/Q3> endobj 7 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /VNXKJM+CMR12 /ItalicAngle 0 /StemV 65 /XHeight 431 /FontBBox [-34 -251 988 750] /Flags 4 /CharSet (/comma/zero/two/five/F/L/T/a/b/e/h/l/m/o/r/s/u/y) /FontFile 8 0 R >> endobj 88 0 obj [272 0 0 0 490 0 490 0 0 490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 639 0 0 0 0 0 612 0 0 0 0 0 0 0 707 0 0 0 0 0 0 0 0 0 0 0 0 490 544 0 0 435 0 0 544 0 0 0 272 816 0 490 0 0 381 386 0 544 0 0 0 517 ] endobj 5 0 obj << /Length1 1021 /Length2 4023 /Length3 532 /Length 4705 /Filter /FlateDecode >> stream xy<}dz}KR?d_fcN/eɘ cRȾJ${"dׄKSs_Wu<=>|9_>n#S15$$%  ( !iQpՄP HB Y)9Iisţ (£p,`'8\9p `CQ_q@ L~LP( )hp@9 OAXGӌt "D$(G#BogrmO wg wEc|+I@36O.A#԰NӄFFhpcʇ(,WbOGs2XO`* "9)l7I`/" $P;r`׿`oHEC ߐ(7$ :玘 &)e|3Ǣ=Q "Y_J#wэg?luκ ̇O:]54[>b%,J;cq_ۄ!ս(R:bڛ!1|cXK+-\'Q>ㄓ[vsAdYO8%+I)|OK|Lǒ1 ikvA$tT'6>޽\vWpC z6wBMN6,HS=W\_I,?xC)o 8o { 7_P`$q4[c? m? 3EWFF\g X{2{AU%2BDgK+p{Adlb 9 7-IZ{74|/sLyn~v=ŝˆ_|TܱE^ j]:̆樤lmYGu{3I mӚar$]~%n'k(YrOx{)D~,܈K(lz. ~r(./KGgcrD?32řmoFkԽΠfɨz'82p1r9 {9ήW0buL?+۫`{:W}$eEY\"1rF\l=\ M5暫8}LaJ*i]7&jZ BՏmT&}{~?.Gsѡ`x;Nbl^7OKU=]㤅v6ї;ΒfU~U-a15䛏 $Ra}|{ZCK?&um** E;_hTxO8,qS< *<)<:.c;569LY]yJiܾЍ>[q6ؔu leA[ϭ%e`}J:vڧw;s=8R)pU33"޳IxG65} h]HVͤqt~xr3B|n_< SS!LHHE:߾tg ޚzF:ڇ5Bt=,ӤJ+)F*MI&d"Bm-WQ#{5A]U;v)R6_.@SQ_{]]zG˨rkB9nVihϯl=D&6|=w;wnYA>JhS"rqU}vūʻbkj$O3v_bJg?*{%5$OЇF5~+쑌udiE~5.Wӓ5PrP49iXjFUk Bhf*9%+>-[$wr25!%g ̄Lt_ܐ^ w~vD5TQ;63g1] У܍P[4|J+/=Eu.xLPk AneOuNJ_pRX|N4,Q5V|Y1G\ZYQ [ɯ|~5C0ffw>bVom^T{(*Qy}a{%Mo2?%K*01ELW0%mw])Ǖhb|5gC]=΀L}h+L/i茨#d͌y5ktZX>4Ea*Zi|:ĭo[I{yQJLn2m  7enu|=gÁc)a5쉾T?5ԉ)r~/Ynmy,},Emq}M:>2$ԛN^9R{JPᢿȮ#:4Dcı CtU >~ܰmM0‡q v.-~|$$RvD/{.rt85pvڅ16+<_7,.9@~9ћ9nxlYLCRIk;NvRt uKb%x(wv쑼z+K,*X<]~>m?(,ԺvɺD__Д+h zydg|8*҆X6,;ߡٟG1Wʋ݅пJWFdtd֣gaPMzxR;2mJ5HLkx8|(Nc7y?(G|2x o{gqsHK gtٴLZJۙE໌eZ[4u*[^BWY #^X6%r*dd29TqJ|i2UNcѸ&K:DSV6*C2-{,ޛv(Q\ͨ.(M:tV8Z)`lIn !Nw"6:A`n5gCE b/ [˂NY{J)bvL#z" q)~12vc)K54qdKfM]e0 >cEL{c^I/+k˶T5~p6Piַe9T40wwg> endobj 4 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 /FontName /EYDYSW+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 431 /FontBBox [-33 -250 945 749] /Flags 4 /CharSet (/A/C/L/S/T/U/a/e/f/l/m/o/p/r/s/u/v/x/y) /FontFile 5 0 R >> endobj 89 0 obj [693 0 668 0 0 0 0 0 0 0 0 576 0 0 0 0 0 0 511 668 693 0 0 0 0 0 0 0 0 0 0 0 459 0 0 0 406 276 0 0 0 0 0 250 772 0 459 511 0 354 359 0 511 485 0 485 485 ] endobj 25 0 obj << /Type /Pages /Count 6 /Parent 90 0 R /Kids [2 0 R 27 0 R 30 0 R 33 0 R 36 0 R 54 0 R] >> endobj 59 0 obj << /Type /Pages /Count 5 /Parent 90 0 R /Kids [57 0 R 61 0 R 64 0 R 67 0 R 70 0 R] >> endobj 90 0 obj << /Type /Pages /Count 11 /Kids [25 0 R 59 0 R] >> endobj 91 0 obj << /Type /Catalog /Pages 90 0 R /PTEX.Fullbanner (This is pdfTeX, Version 3.14159-1.10b) >> endobj 92 0 obj << /Producer (pdfTeX-1.10b) /Creator (TeX) /CreationDate (D:20050222113300) >> endobj xref 0 93 0000000000 65535 f 0000001941 00000 n 0000001836 00000 n 0000000009 00000 n 0000093900 00000 n 0000088921 00000 n 0000093745 00000 n 0000088472 00000 n 0000083767 00000 n 0000088317 00000 n 0000082956 00000 n 0000068675 00000 n 0000082799 00000 n 0000067995 00000 n 0000058462 00000 n 0000067837 00000 n 0000058028 00000 n 0000050600 00000 n 0000057870 00000 n 0000048918 00000 n 0000038184 00000 n 0000048758 00000 n 0000036601 00000 n 0000030460 00000 n 0000036443 00000 n 0000094299 00000 n 0000003223 00000 n 0000003115 00000 n 0000002079 00000 n 0000004703 00000 n 0000004595 00000 n 0000003316 00000 n 0000006225 00000 n 0000006117 00000 n 0000004808 00000 n 0000008310 00000 n 0000008202 00000 n 0000006318 00000 n 0000030235 00000 n 0000028325 00000 n 0000030078 00000 n 0000028061 00000 n 0000025863 00000 n 0000027906 00000 n 0000024700 00000 n 0000022745 00000 n 0000024542 00000 n 0000021428 00000 n 0000019512 00000 n 0000021271 00000 n 0000019287 00000 n 0000017884 00000 n 0000019132 00000 n 0000009677 00000 n 0000009569 00000 n 0000008473 00000 n 0000010833 00000 n 0000010725 00000 n 0000009770 00000 n 0000094407 00000 n 0000012382 00000 n 0000012274 00000 n 0000010938 00000 n 0000013883 00000 n 0000013775 00000 n 0000012475 00000 n 0000015554 00000 n 0000015446 00000 n 0000013976 00000 n 0000016135 00000 n 0000016027 00000 n 0000015659 00000 n 0000016228 00000 n 0000019489 00000 n 0000021658 00000 n 0000021634 00000 n 0000021751 00000 n 0000024895 00000 n 0000024918 00000 n 0000028278 00000 n 0000030437 00000 n 0000036872 00000 n 0000037167 00000 n 0000049332 00000 n 0000049653 00000 n 0000058277 00000 n 0000068388 00000 n 0000083389 00000 n 0000088710 00000 n 0000094128 00000 n 0000094509 00000 n 0000094576 00000 n 0000094684 00000 n trailer << /Size 93 /Root 91 0 R /Info 92 0 R >> startxref 94779 %%EOF survey/inst/doc/0000755000176200001440000000000013122573417013336 5ustar liggesuserssurvey/inst/doc/pps.R0000644000176200001440000000357213122573415014270 0ustar liggesusers### R code from vignette source 'pps.Rnw' ################################################### ### code chunk number 1: pps.Rnw:57-61 ################################################### library(survey) data(election) summary(election$p) summary(election_pps$p) ################################################### ### code chunk number 2: pps.Rnw:65-77 ################################################### ## Hajek type dpps_br<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") ## Horvitz-Thompson type dpps_ov<- svydesign(id=~1, fpc=~p, data=election_pps, pps="overton") dpps_hr<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40)) dpps_hr1<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR()) dpps_ht<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob)) ## Yates-Grundy type dpps_yg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob),variance="YG") dpps_hryg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40),variance="YG") ## The with-replacement approximation dppswr <-svydesign(id=~1, probs=~p, data=election_pps) ################################################### ### code chunk number 3: pps.Rnw:81-82 ################################################### show(image(dpps_ht)) ################################################### ### code chunk number 4: pps.Rnw:84-85 ################################################### show(image(dpps_ov)) ################################################### ### code chunk number 5: pps.Rnw:91-99 ################################################### svytotal(~Bush+Kerry+Nader, dpps_ht) svytotal(~Bush+Kerry+Nader, dpps_yg) svytotal(~Bush+Kerry+Nader, dpps_hr) svytotal(~Bush+Kerry+Nader, dpps_hryg) svytotal(~Bush+Kerry+Nader, dpps_hr1) svytotal(~Bush+Kerry+Nader, dpps_br) svytotal(~Bush+Kerry+Nader, dpps_ov) svytotal(~Bush+Kerry+Nader, dppswr) survey/inst/doc/survey.pdf0000644000176200001440000024601013122573417015371 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2020 /Filter /FlateDecode >> stream xXKoFW>Q@.A[M[E EZR!JvC{I.)iozDͳ?Evb3lOn&&ɢIjnrSM>YڠaҠ } ? 7}FS\tˋl1IԸ0 1s ˇ,a <P7IM(Kܹ]ns!\6ceIaԥ:k$̢䩯6sY0'Ep'*;֒Й+~-Jg=s{ٷ@ M'b[P |?6et B^1c@R6=u< ȼ ?%\];$튏}767+d vޝx>Q+B.٢^EVƅbխE)I Ti$\}&I@՝5od/Қ9*laíA&pV@tX풘 D~!-*vI$.V 1'0,00Y| mTk9p~ġ YdlLUB\>n{.~!p6,L =|d3RV =bJ1lQSAطqN5\!w&s r%\J?]>d*UM\hk$0U]D? ޽z}*P>TLmMƇݭ$#@! E5?wAQkkQdhn*Z)[h^:y}/Yz]s"3Iu#Dajlb^|?cVĒ&6/bu`NvAicVhĉN]2v&LluЖjypOeþ>ס[Y:*T~ dX[NRB "(R,n†B[E[yTWǐG&̭/_mgs06t(zm1+Rmx7bc Kccj1w(þ$\D\ёnROhn*ȸ)KYfŁNhsi#aIq K%\ !s¦0O <'V+$v[6/sm۰$T֖4+K ayGN tgTK`ۜ4p<(wW4A 0Y5Cg>ZPY-rT']HXUz00VPr_!k*=y^ON4֋cBRkfړ/Rtv= %Ho~sbq!Y!g}-%L]PGr|<p/kg+KIR}k[j GjHh,D#NKOV{v8Jf 0m,CJr',C>+TvoelOTxNU(8޿ 9.k/7׼j ^ĞoE@-Z(^6p,WDjHmURK_yT_$A[]_گ^ +bobPmgġ(+9'HZ!{$VgZR>{Ę?~*[1Ko/o'A>z/~mT\B!$P2%Me} ? ={>?+]A1kŸ鄂+A%2ctm)V#@NR=!wOy_ h@$T(5{"PQ@_H!oBQEӕkAzl;AO#F-%Yj:kNF곷Vv'^?zymxl[ܽ@$2oEPB>,+OEsOej:PiG#?Rmi΃ߕ-뽺k>By!Mg<]td(AX/xo"d|Ym[Z.'q#+GZ(Mm#*{ͳ." endstream endobj 13 0 obj << /Length 1420 /Filter /FlateDecode >> stream xڵXK6WЃQ(@ IEiZ[ެm9DL !盧8yrfѩ-fRLH|X>Dƥxg˨ f"moUk?<nӹh+jYwHU3yZڶW7vůT(eRE㸁]-L抾cVے8{Q ]5-K^:3 ]pB^$#3pD; :n}"4Q.VbX$&BQ6h k訨C-5Y϶ rLhC|w  mZzt&);!,2W5 =*rߓ7TՀnvCjgJk$ *>xڡ3!Ցˡp!u&X"`KQb cʑ9ddLҔn}j[vˣۋ!|jE!S{<̔Pg*0 %5]-m_UզaMdtum 35^TsFpK .ABg܍I0ZWv" o {,Al V@ R.BlǖҖպuN Q\ʤR^j#2 h#ʲ$|_/k endstream endobj 16 0 obj << /Length 1410 /Filter /FlateDecode >> stream xڽXˎ6+l bEJAEE]$΢Hmy<_̦^>+r 4|sRe_K1L+&T=Qbjy,v3>}2ٌfvE%f6VNv]i/ժze&2Ԏ'LrfBM[֜Oi&iJqѻUxۼ^ 2`7#PZtX3߭im:WFRc-+55_!c7y!.3vGsV *m.NE0`+svf4gNzʡ]Z=~9JʊҤ}ΟN]k[w"J9>TWSpyu\j{Rٯ:_p;Pq!+}U|y[s:ˆ\Ӭ%WELwxF'OfdvBSS^I=h3qZ^ 檋/Li &-صۛHF67O+.kݧ۾]Y1U82 |G *fzk/g6{DcJEi7.xyBP ūCO |v*͵, =ynj6G#V/3Oe{m/KdfFzڹy\@11|_+U.U 'P <\S4yj$i@=cJYԾTk ]bt'c%b8U< q&iI S V(p> stream xXێ6}Wyۈ{H )M ȶ|Akw"H$f7Eg }{vbP2Sl:I!rY t(~Vw0Tfbk1"RGf%ՊUK30TYPdmoXXOh{1rI I "RȾn#K8h )@ 4ֈ#%*}rQ$tJ)*W%v綯 e8\ dX뭵Xz'dqr%(vs0ߕك -3jq+7 "4 H5O̺Qv Xk'f%*֝yLUʃϭ][M"ךw[Eδԣ1!ݦpXus0VΛZ!,e_y(ΦY9;LNcN[v^̹ X}z{~ϡ}z1Vb~#F6\ OI_r2,k]fI]j}Qxvmr:.H亵Ĉ\d, Pa@-'hMƬԥ}.-w拚DZ&O;aSwb;2%bTyY Y)(vR/~jRبqypy⸇'u* y7DY$,cp[P#Q>RٗTdt91>_z{0D5)_nD*ȸuc},Z7iچK g➁);fqo>kꎚ, 2q7Wr?mv3KTH\RʊM/:YEŒ5HqK[*UJ_q*[x*j;,[Cw.K+rQd%͆].k3-%P mQ oV85*)k ,F endstream endobj 22 0 obj << /Length 1227 /Filter /FlateDecode >> stream xXYoD~ϯ$<^iH $$ASN#L:}|ݮF T ~|\( IyV븟*.r45ǝ92KSWHY;/6Ϙi_v]x}oskS=\dʕ0ui?oܠ, eҕ>  zB@54&6n}3| 0̰ 62Sp}P%NA Du }GMbHH'Kb\oxWAHO3㙥,p/#TUG`L h-߃>82Vm\8>m edUJhy%kW:`I+hlym +%L+D+e+JaUX*pA$F ,]E9.ig7NJE&1ၔG #Dõ1ӧ/H"=iPJ S&ԲA9sHGv=ٯGkDZMn f @KΕ8 13/`7S@9CרiOov0 HUZ}TN[e3 endstream endobj 25 0 obj << /Length 268 /Filter /FlateDecode >> stream xڕOK@{LlOv+xڃGݛz[EV&;H)Go޼ bt"G*?))* v>Vuc ^iQm$ہp^,RZAY=߭弗gܙ`8H(۞$Gq$*t[>_)Zku 'Sz.1ٹ0vN~Fg tC7XNR#Ϡ!J^_0at#V\) endstream endobj 31 0 obj << /Length1 2211 /Length2 18172 /Length3 0 /Length 19480 /Filter /FlateDecode >> stream xڌPk.k Kwwwwo!8w -kpn5kd;Ꜣ"SQg5w0I9ػ22XY,,L,,lHTT`W[пHTZ g=?ĝA@7MN f `errXXxG tr $*qG/g뛛К}r3K jr@W+ݛG3-@ r/V|L@;&gK @ rvJ@ 7] lf {7 7{s39@]V[Xok`ebkel/e# lo ۂR L _@[7};l 4}W@*s1s;0mJ/3oU7wٻ dVv/;kcao`7+ s7GfM{HV"o$?4K+r<ͬ2/[~>$@~` ?$;'++l 0YX#,ow{Yf ˬ$,%Jw቉9x|9Xl,ֿͨ޿}+Dr|-%h  'Koش@;׿ކmj^ZE9se]o joi2] s7]-ۃT\[kmlNHzۜv)io`׊qr@/&!N.<5f&{7[z~ g: `70Af n6` A<,f?MOzS8[,[,AoM88l]?Օ |  99;9CMͿ՟hrrz;$hYej?[vۢ3eavM-v?7]Ƿoo pCe7-HǷuuGߞ>f?]x3 27/mߜ&iorӀ7m~ ۉavrcoyz8Cnov| gloߒS7K ]ך9_mY-7|.J_7J+oxpo|"Ms j혉ߏpGm {JK7"l]kgperB -Xm1"}_`V ygkEgj88m-RХm*YLm 0Sw0u"q~Vh^#_?Z%<4&\| lBoCp Rb,bN t63կWJBW3QH?`Z:Xʎsſ:1Q̤fh)' > 4!x3}Lk Z2^%k<(K1|r~n9i6]lNdأzu!W)d{Ơ:#G~- vWhR楔UP'.XnryA!J)] #(Lj %|\J_wfqB{ir7+K<;^vC4&G)aDblZueu(z(:ϑfHop-)8UYI֬"s;xxcnI#rJV$`c4%KnВm:e5Yqcr?^$?g=T;ER =Ȓ>?*9q:{|[B"7K)rtB"KY+frDmߨ+^!Zj.Bq[1i>%2w?lm-go/ݏ'hOt0C0K]: IǢKj~hVM*tPiݚBHY|V'^ o8$v ʱ=Rb@bEL#bPj6[o=Y63ce^]ro9c=tRLJ?V#F %&uJѕ5p.7&aT?c 3u0Ot@~ D ntU~#KAjJ~=z|>#9^3MM{ WNܽOVYuif=4:gӘ퓠phEjsG&ӑ*ꔈ}֗ύl2L׺㜘(T", 4 |"0ܷWr$fMl'zꒄuiM"Xr;r}e*5@&.NkQdy1E%՜qj|6ZA-;&Zzzob`M1lpPZ@x 쐒,=wuE /Bs*mIX"ޭ?H#,T<9dBs}k?/Kcb\zڻ۔1 )ӇcMO;1T-ubk{sa>]≭ʀ*_3 GFkȅE`U\>th}]Ы&fD&8aS7S f}t,3}GfЍ<25# jmҝyU&J8u.D˜ьۯv#+?m*2*'G.[bgG|<) _;wV5" %v:ƅ}83>뾮9^Q5ߎ+\/,ϲ,˪NP1%64Mh_v]mYtzc)HNq?{ w&Y;UX{I@CPlcerɊK!I3u$͠!]f;G%NynHgP5`Lrņ^L[_G_~b8,MHn/{YHYY|yBɪc AQYCu8[L3꨾jU.n+]27O MdS2 *>EKt'0$!cm;s%i[hir*o&rɶ:B`)%) ۲f"20 w{, "mR+`(W6 =VY9lrMf ?䌣o%4.S:ښ~O7u uF?dϢe^bHk/?m5P Q.—_LQ{&n9u!P, `Jhvh YH{ PDls^zلʝҤF6F5nSJOW8ɪ3qGrՑ IViƶû 7Jի$7$ ?3z./Uù»cTM v{`>veJcr!V$PF/4_EwpvhUB' ʤƈXUVc= ^цp\ {-1xʗ@gF5gw;& 1nE['R<tTWIqKg-~{|ye#ztiS5k}񣄐#E%%Cqșɂt ?g\Q ̎әh1hк.:ح<{umxCX/6zɜ^z  ևf`iPl+>|<~z| Prr(^9X 3i 8 F6STӬ׊2[b SsGn4}s~DA_&keEP'۝/L1)JAmz)sԣ < J~x$tdv~A1]Rg=}H1?rׯ3zX]pT{:T*[a﫨a(}RGF)G3y!Im1UIՎ!Rf~#OtϪÛJ˭k!ыESW,ǀ;1_jrz0uVK'Z-o^9u pˤ}yn5rL<w[?-t*MK6Tsq(7D3b{o6:-K2^'1H% 2$![VF\%B :=^F!^={G_Ԃ!xK^NbR!ct_8b<> vKscSm z$!%"oA9 "BLv[#^~zmhI47*w<@{J͏OT㇍$im@}0'x5M&&FOC0 BqzU{LRe4h!e"U+6E?YjtgS~=$vZ 4*a,06ӡM?oRA\iP%{)3;{SXDdA w_^]kZCՆ<\`EDU2 FS$~ zJؓ␿nu`Auݳ7H '//&R]КپQ4:u!"5Ѹd HBWnɲ,`#k.y_ HeZ@.^>I0C%f,߆5EaS vraf cH<<4w6yd8^.@74/WaV3/tή[,v\W?n^yB“\ K%p#֬S/ؕS/r 򤾐IZk_d">e꯬ hv-- PmT#(sw.&ayqغcdZ݇L[CG W~w;svsEw@a5s 8 sD5`sd<X<#UB]JRi^ޕӣgl 2*]U$';C5RCq? >mPb@^Q 6mA[ml?@4cc*E0c=ǥnx%b}NЪZ_yPUd޿YA B3@Ԉw_rEuet>vOQ E3rf\Ft_Y?d0 F)eZݽUĂx .h(>85 b}_8 tX")M [DoH>xV4 ѬYàUb T&;j?tf[xr''-Jp.4r/(o#gه)e{Um`Xpq3M~)gWI~> /-7X>yUtY<VV1+Yl'hh{ٳY? 0s{,"ڇ`jY34%`n#ө7}>ѝUA1Z*y5]1׭[/y1$՛~69QcQaφ3P5i1T[5~"ME(Im(lX1$0Ί .P1 MT3RgRCG葷3>g ;$kbM6yG9F\Am 1R}hV`L(֏Ui1&]#Q1*$ tG.Eӹ}UNN3iLVڴg~ҋB| Get23θLZ5=|JKs+'H!s"wS5:*_NgG }ֆ: ӜG,^J|Mr\%jc('ފ[f& 4AvC|o˕M姑|hK/  )uF~zV@FڨYBFGfNt"R+5L,# g]GIZܹ*Fm!#kċ|BŕD]hUgBw/s ՐQe+]ޓ)@(Ä- ٬^ltw"rhzqj7rѠֳXܬ>܄|p| ]I$MXq ilogVUF!2@3qavZ$jbpYd^ؕ8oP=m/r?k[n ٸ&'x}jԾ诵pxR 77"'spR]Q0UG4DDFjI~N\-'D8Э#8Pl4Xwa` ÕSON7NJ2B7qkR,F"6Yqnz@ āN~*+HQ'n9RT Mڑs৸w#_Y#s)k I^GݧPq!Iŝ$,—#楥'50^U~Ԑ+ f x)jzwIP$S.*l:}f  C I*uR׼)~~ņ bbk aj3T]g"Hō%D6ɴ""!oi-&uW3-5kChhh IW79L}7"5"D qU]Gw ?.+ϡ)h`\ԇQŨIO<*P4'B,F[[g"pI޸hZSY4ϭ'RO {f 'Szbֈh~di9*-coP&cH-{=Sr+a~M& %XXDT^ Ӓ;џp;R xgOqޥŇP|jJ>+2+@i8՚q~i$ō l0 \8Qp-1iX l`U qV}eR4}/9u#6\+>[Im. gyksGH%4_h;+E |4ΠpHU9! i?9:b@jwREҞwT / ^6>-Vtc:[-2)}1zufeҷqpvPsz300h`oSsUK7U#2sK^Āq\Vzy^\\}B>LQYFlJAc'(0|I7m$r嶾`5 EJk.eԬ3{h?TjHw([k7[k!JÎ |(ëY=gX=DG]`P:x#.Hl ]b?oY#sќee){!WM;+ [#ͫO<c#ϫb+#"=^e6f^nT}?^r^hݣ|C3ʌk[#fKs#IW:nA2!W œX+Tk`6ѣog?`f1F ؃-DzBEut6Q)EWEհ+TgᨴܽcY筪):MN%5禯YXmVlAŋ|Z ˢۋ6;vuuVKnr)nJҺb(_lh%532.Aqg[SXhfi0i5,Gj ?1OZ5 3qe'YV"~j- ikrQr9FwÜ͋0 ړE֛G#q7+w'ߏ~R[tro!#A+Gs|IRVz&|tL 䘘xq*')Dط: jQ<K`.6.γ.Kÿpl@liv<#8gX8AT3!Z̩T_7s1\8^Goª:ŊJB,ب%Y,O~HS .QHFITvugω[z:_z5/6HCD8aEgyZyw9t+лK[kB\_w|RJ*+pUNQZa=OD^{"E?Zu#4Z-_߸J됵hYW8=GPW9\+W߃;iuAΆ%ɥJOe߉ލmJQu)XDݼ:\F*SҏF=Y'j6\vbO(֩fXVK|+ZA\9~ѣF)vx Kwb $~7l-q VrAp/O(?\;CӣQz$h7>imM#R+$TZ(.nm! 45 Lk oaV}j"1EfǘBIO%R^ Vnj@Ĉ 7 1/Cva`)+A>n].Cu!܌nDt\I`[dҍ\_Ht0m :39G/2)]ךϡA;6$? Ѐ躧ܞ9ËĦ=ZW! P| VJfS >,'1ҽONjx8!~/=\%ue@3ƠȾJQb2~5mU5Rw-ob m}ž2[2Zx:!m+gso9x|(5 -fe*D}87viեd-KG@p.2Qwhȓ%aVӞ k}T316fa@ʥ4h}lY6f*y2Fփw2A.t ِJIwaOKG̬^-'C|+J!N d/xg\¯}jI/avc{;U86oQw|!: ~ $T6H>[,Ml:Op6 l[4R(H IVRhgz5%S>GgK}qJGpLt@ZWC~*cwMs͉WRBX7.uh弩b$=nR~Hgiȁy94ֈ5a%cjA.{J-dIx'9JIJlq*FICU/')O;ˈ4Խ?Y- 2h`ޑ< jukTÀa~1^=~S9A\{-?:R޺T=7MNiUg~[#B5ݼehb1RD/PLr[nlJ)h:B`l9xqpޞqlZM>/޺˒aZ3%>t ⧚bΪkKRHedbA!)*2c%x,#j, _N?B5Y&9!˪4aY"w w;EORH=d݆Is= Wc"T}# ٴ6,"Bsa܏GG$̏.ZvULZ4?i[XtM:پH d>aAh |-;z3 Ez+/~h4p ?8j1GB8ӞC{ 4U!G)|$Gu7Ă/>mt6 IWC|r#ZR s)G9'm_:FH5ADW6.v`Q,ugNc!Nxh\3/h =/-) eia>ۏco66|O vL%[gC]$ƪ-TB(̜o#Ѐwtua3-ܮ\_%3hֲ8W@ {#:aSzIaɩ5Ed/*F Xn#ZUzPp6YFO1tֵt\KdFPf Otɿ -G~ثƗM:-&by 0gD;g`5d5nH/8l9 pKѶj8) 32l|i C9)O bQNDבh8E:ߜ˵=K^ZQuPf'|g:yDh7(QPcǯNgWHqFTv#=VNVUCN;|ݕ"Q.c/wP0eoOJbKÇjЖBYΙ&J?mPT1&O(`#юpNWtc, ^o_zN&(Y4Ubxu$7nALKVČt>ANb<#i1R9knMqD)rQ<˺FĮ8%> @3gLhq6vV)眉"(\5A`(oɢ'<{§^1ckt{Le&7Dt+n}S.ZY:Rb |DM e0& %4>f3 {}neqʧJC_쬴8׼HKQ:Ajk>ݜ4z? i k}JB+ڂQUw&qmw[YXW-񩵗3ٗH< F,F(u:҃xf\ni!dC>ocjgvE7VӢ>>VD_XHcO|oU H(H@)ڭb` xu>QvcNaH~ nɠI\->jI!Gâ:dH,X9(u,ReixТc/2$}AU G 24 HMY &7OZ$lmM37<3^ rIjEs&;~+BҦ/΄Ai8LgG%|ۜZ0F1 3S2N>k0ds> mT}m}"P)sm6%c w$RKFu@0/V Ci%`B,߯ƔdNJAHߣAB?~ftંR+MVE6WR2R߭gt"Fnq]~z') mwT7]Sw$" 0b=bKCfeV9/ޞvO>7 Hdh/n&RL@>Ҹĭ%wGwA?L@oI?{^!!u!fASH1cϏyBZjЌrvyxhu W.XfO0\\/|:B-b%{)8^;IHj'-ax0:Bx+u'Ai-* oSA.Me²9a qʑe2iwrAAz'(adXB$B}hhD#54m,y6 ) 7ebk8|53~\k/mߞt&2}a "0lPQX@6oQ[棶;ڋRO^"BW $db j%šԇRp"p![dڻ9mUFs;5I:GTi/V"hG MЄ0y-Ha0J ?M%% z=XڅQe.FB9gNQQs,\1ܝ&Xu b! uNWI?rϲ )HKf66}㶿D8%kc a%$=ngk t)]._e:*ciϔ$Ri7 }Jc.|{SIxD)l!~m1MYH; ߗZf@=OEHt@)II0 P| / xw8hӡ&d nK4m!6ZyTK54)ᔩ#;9@̸ HI!ѰRCWiP,aȱ|z@*~NBQ>ҏV#7Ol]XJhcZ&UE`GHGa'vU63{]c]ډ{eMH`W'ɡ-3JZ>T9 L9Kfenlǜ4>CaJ\7Go}J8*ʧc"VZ`(-+Bت=YҢMN w`qQn2v6NXvYV4nElX?,{9jcvۋkF8#OjQ0kLδi~boߊF +UOmW? J XvN-LT".u[E ZN3_ס',cCdsWzn=#y@VC6B5B\N1_Ӂ(f]9KrY> stream xڍT.SBqw)N B`E@K)wRHw;G9sZIoff3kqڹـ 0.^n@^Cs|LL` /3&! v Ym ְG > P?D7@lA@LnP#ڲxEE9Ⱥ`[k@r}<f |+# .muba]' ni 3nL&#O= <\ c<SUh $p tENlmkn C`@KIq!v.n`kG[du֏ ՞-nw)+B\]A'P}yYg/`n˝*Ey4acs@ PXTඎA^@X,࿪ wYS_n;ۣhA4(}V!-H7Q^Gk=nF?wVdr_*qd!.0[?! m7OW ql_GE=.ua|Bk(($>AA?*ځh q= ػA1ߨGO$Q/p x\@_1?g=r<C 'qX<0<{LO@?5\[/(yC- [̹i7[pjY*L[Foظ^7lUY+ O2tԣGY&ma~#VUdPAOnB\"U&LQpjTtм (]'4G+Qp"?^B^Y+;jO%h|dp" EέG;T"#VŸg het;{PtP֌QD*P3CgX/rбw?(Hm`87&䥃ȡiaTʡ/FN'$q^u! Lz:bz!›rj]ŭ[i|L7y˝*E㌎-bAb)/ ` ^U--ϥwmJ^=6N 0[\W268F3#^4>z1F6MSciÌq2x1-;3x{‹u0f N߿㠌ve!ZUF+bQB{Jg ,<jθ>jd.F<#ݟPlx(vb -\4C{۩ .^=4 u}QmbpCG_j f[ Hc-Pd PTj>P@~d&LqTMmF]E1wD/;:+yRN0=ն.<}.̠;"dR X@ (iYE3 ګRZĩՄ.IJZD6JRPG|n1p^ɴx޼ofQf15 A4(WBz%tNek!S0R͔ (ޕ7)Gߛ;%pv+8;Ym.ȻȽ*J9CCQg PIzn"`"N Œwh%$0|f4ìSڷaVSyJrY>(^ ,6l*CiE5kUYؾX t>3ɯh]6|%h9| hUL BSEٷ?W!2t݊H Ry Fb}fGk,R)gJn_klR^;hѝvgʸ̉9lcRG_9eoP8y*d~9ore j GO{iȀ$#b/ +<.L=V-t ƪ(Σ! 5PDȯ\esfBHFUvmvң%)kvkF xۈ;$!q^WYϦ= }2if1YQ)7Dw[~!p-U#JU wu/={cbW :0@F#R|6C vsnntŖ/_nH,b EPt!F5U,0;*N_c86wE}lZ=צ32M .ؠBе,$Q>] 6 $<֒"Ք&)J (y`dfE>(VwD5sϦU_'*(I$DZF ~jبD1iNQoU,ߚ~=-F/وߐjmw'-foʬ`oHv4aFU\qKIHh6>R %46v|s04JמNG(yS~E?;GbRp944&(&:j:`P=w*P!:1A&7K Im)b!T9it2 yM;_%\vKxD! MA÷dE)60x{5$"pN*[x Qקiқjr/(GBo0 8bḌr{ю)5?ek~&]6~>FzVvEMաdT_=KfV;## O Lf\ Mޒgv'zx}"q3]6y:̾pu.Y' w7I \vo*kL Q/}NfM׼Qz4>0ȉ-WwٴDuKSNe(Ш$Xhavy;q(}9& 5zlڳP7;25<敏LT(y]Qd ˗ɵ/3u_\>W`xk)Wmli3ڛ3%hBZ6]e s_56DY6n<~85"f)aCe:\;}ˑO8ȷ |A.Њ\~ܖc78d,5=l躡rK q?|d3ik!"}S¹iC>h|\WI<=e8'KOlߊskF/g ibKB墩Nyo 0<6ޠ/}ߣDie\s0{eKZA\h[&/I Ԭխ}m2ā"޾OJSst8Gpl| qqA2V g+43s]0+BS+Nd~B~)iN_P;Z8wf;|j#Y| B\ wμμ{܍띺-Vʞuy~[뭺t=ԄCLxP33Q1eRujNLڕRx F.!cHo#7_,%}`q:G`E`ď d}T2vz󆈵}ĩ~/Qcs9lS57ļM>hUϽTǬ׎ "z&rŢuya"Ah~5ȑҾZz VwVOg!d3,jv)t$ خdRX6rvUEx=S[XjI55(Ჺ#M~tGbliTTîwGߕWlMHn"$g5P!&676*cLWJ >g  lKFgmn(2rd&dˢ+uOcv԰b`,he1/j=ǣJwDUDSg )7"+_@LniYʓTnI Sc]~|qYfXVTЦV:ع{# 3h''FbńI@b'v{()kD.i&6d+ٜ>L)\W/>~ ): /@ʞAQ$M!s*%>6A8ETwq>g>5!_smY ɔ{Vt* %kŶQr: ?гoVd$SaCI|s'89g)z>D p$ I q[Ҭzhʋ_Ojhg+bGve}N* ߘ j oWx=(o}S6:),rm08uF_P8/ =;SjPG]lP<^ݢV'3W_Zn *\4Ppˌ%npj湾}ɯ5o߁V"}җ<{H^}jZGo6XTSЖbXV`]2L^wDDAU+hNCy&aċ4BmrN4jebd H,/ rZYDsHsc~&~!SPJwDsWE!S@'%vh6ԚOm4s0 gZZT1Y &qzrzs,si\0L/wO?y98Q< u_QDj5m8zՉ1pcQĕ628h-S)2xΝ'ƤT;T:[ ʴC f(/-Ғ4@l!5mı%\AķI 9pjO]\_*j4/ԉMX`R;s$U1Q5&58ȕoS QkzRMĮ$yv@P|Iӻ/6dje}ϴ:=tUjE)MCK;SuO#gw}:FV™#“A,EKRgƨc4tw;oe@ "iO'vx (n_OcPrčM$P:J[`.iM ^LԨhZչ-هS?: DYq$' ]9 9OX|9,E H_|p=L*r~Xҫ2Le;7}2>jtFH{sӃ(Mw7* (TjQ Yn&j{qUzt#> IܱU G41gkeRna/ɼ&.S5G2 je/X%O2LC4(jHZ91@?8w#zjh-;F~r:P%' /hD˟W8i6J?y)s Qx.pIq;143z=y5PS[oPJiO6_zoaU0e9!.+Pq.z퇇Nm֯w+f7G5 +[LHS2~'^xh| ,)Cؾhz7Y^*"~lv%BusD8s)IG71d:m=Tm>'Yc?]mBބaK&G1;l0;if薘ة%t!z FEPdڬ~뾂.Vad*n|]u]YDfV9.L{h:SıA卟^iڍ7l }q~^,dHr %i$MMM&fݧԨyohzhR(y^'_x `>\B1^JV 3}+EHv[856\*yςoڳB@~ʥzO4ƛ21Sf=$v.%q[RNnpZĿm4gIjvs?$iN[/wk{ۀkF |dB%4Ryi?ğ}|BVeժ58rB95yBW:Cҟ:kdrJ,5Z{74ۊ p_N2V u4[0r ¾??!%s{sїyV͓ ގj̄@iBYgpĊfZ9!EJK i䢄{ y9ec|l4M;-9 _cC\n̠:z%4q"4¡ }%vTphu﷪cXނ2A7 vj3dG1vB {\g1t^Rw7shD} jqGU.UG2pvq%Num9m7^TKG^(Ʌy֭@ǝC,|$s^*iQ)pr$;sE>_ݪ%V*}Zv^y*D1 ;;-[ endstream endobj 35 0 obj << /Length1 1556 /Length2 8687 /Length3 0 /Length 9712 /Filter /FlateDecode >> stream xڍP-Cp,Cpww ܃ww; Hι{zսwwջfZ76.vN!?^mF]n6 g*Prx\89ܜ"B]2 k*;@ KC]@vn'ъ %(' tYY@nv@,m_)Eܜ88<==-]١.bLO@ tZ~7 Pp;=@]ji< + 9b t<VT;!U" laeutx PSawrcX@-x  r &sr9[yʲki#> yݬ ؀ 6vwЅ݁2SMh||3ee;_' ?j}oY, ?6wy9/gyYC!`/_'%ظ8|~^AgѰ]B!6P_>O_{}sAE 0G98p?+Ogi s?n Go³fݞ }R*^E7=؂=F hrK,u/j@]A_'7p}VyqHYqXXxq> @?pCn!6P7! 8,|@A ' pp>gv|. @^Ez5+wt/Vhk+P+0ưzI2OEL&65;,4!.Wiq6>2^JS=~hFLwo5Ѕaptd*9gg?`>%gw,"ayS+^)W-ƽ._/]&Arc@a;^Z˟}RJbA?)5~sYOBGbDL75WkѪoEY,N;$wуRQ4%jFӃ!_d^AH(>r( D;5ɡq٭pnݏ˳ AAS[1o^d1 U%{i(=-vh25:XO_/*Aߋ39C< gw ^0cM܊ޯY U]yo#T8jz݌k[g\<#L¤KIߨ[/y^1{-toFP(z;aN$}H~~یm4Qje> =ciZC1bбA"{uh}G%#!Tr_Fޯr̒ok1uB"r(HۄMZ3h& ?U' x.k{sKDaxGۆ'^ YEt6jX9{eĀV`nӁ:=wEp7mPhƶ4\'E(MIXc{)H7v юke2mDM,if'A'Grl Dy, h~B/.|= &>IX{O/_'cX?{1Bv w>vՓz6UOYPubC ?ȮMy:z>!ZjI]WNss'T XYDlZۅ+aA?[c\o#bX,#ipC&?ыBYئj=$X{yB=!SGe2m<9g~n ሤ sn&yy6N uy[e:aM_u=<bBmԬ4c_l ";$($]2J[kF嗼_v1$;z*yNg*-Z|F|wwW0~ׁL#g&h<ϮM[.+|O I;0z0Z}{< .#kF<)6FlmwOv1S, t 7yK_;wYu+Xqa0#=_2/GNvԜÇՒ-" k4^)& b5O1,LULkŶfM1Ʉ`M%o  +G>LEhf@VۅG" e sĵzI`\# bQPYՌv@)F AjjրCǫI:;]$@MXef!<hjYՓp>Ĺ$ Jno٩55k^QM3oBHUүͰte0d1fq饡͟* ƽwv_S*xU)NRkc3kh9zQ @_^jC2ao&la7C$Z;[gEn87s v_w4{ˇ=yu vuw'P;_ncgIf2V'zH75Vu"V&z wBdocGi%s"JKtHqʸC{#6 #&[fJ[i~׶oKjRμZpP[1č{mR>D`Āg>gr-!t!:cN²njYXmF' !h[)CAh0%5grB6/n}%͜P?(gͅS [r{0$K'Jbx!Dp8K6zˤH;\h!EkINQxNht4oG8)+RBr5v# QW;kU$lM ldmzjyciia *7#ͅR<ֈ-~l)HA.)Ţkck{Q [fyBm_!HQLZf `*1~LU@U:&RJD1iru!&Us-"iK1h_qdo^hBAeӊ6u @}2]N02NzZ(3, u$ KݾI(\0JUG~o H &۹<;gV# gUDL{6fۊy$i`FYk9Qդݯ~:61VʟFcʏ?ajN,]mK S5;XzhD8-w'ԛ{*S֫2<^tQB[xoTa02`r3$iZP+ž^,ǨhpG'o[AwI֎wĞ?2uǮ:,lbtWeivTDmC5w>'WQtKD!2DiiF -q'E}J[LGm$qHTilӱ~ctmz'PJʊ:qY_yL $qIX6O>Ң9nP^n%!Zg9hgQyM2pi-1J|xUP*| "cxl0uIZّ;<+fX[c.t??%Yؽo _ѐ&T-yJ &H83 q~~8g 󺮻uPnSnbeCiUD<(L`*In%~K̋ ;uY?EAd̛5=m*{>V2*K0 HQRߟ1<s@<ϱ!Bsoy'pf2k nIF4r a/yb9Vo5Y_HlU] ^_Buq_FdT E %}o+ٍ9#Ȅ&Ec |N?XGɠS0B): W*y%ۡ؆d|98 ΙZ7g~3KMúqkB{=bjQ2&Z&Knr!D@6>"]{q Jw?;9iHu>'L~ej8^VI(30YY'W<|cΘv/Q7ؤ+uw\pUJE}&ⰳu9lB)g*}@an&}*3OT̷}4$P"FMZb mgqW,C''l,H׎ƫhQ "Z&6 ǮJ}W}TS oe/)?RxDq<\E86XLPrN8lۻBe `<%4jzB@c4Y/rvү5 /d>Ġ亂7Q'!<19mOJRe#Wɮc0gtr aa߃pZp{WΔ;]\o7c?_+W-hcFm5mv #\OSuy=Be#tı!ӄf~7eJrU5 uD?uF}劑,Wb0T>fLΖߡ-YĤSun IUbR>T6КUk$ުŰaȝ+,OUjʔ~*H2 KTFP̵5r{%̉ kAܹ11,1jR[dt7'D 9>r; ;׺u5,۩g|G}:E%!]e ߄ֲ9M[^PQv`ehNR*䏕^!ʿj sJvĈu} c_,+|<ΙJS:Q46{jhw'dbItwq5z7B^3\wa<}YESm8xC@N^SkkzyC*U Ӛyt.x{ v~)*EjH㵱t|#t0{vC{w2"=-?%jOԚu'$Y ]4n2V_ܤ<,32缹EJUeW(, 1}*իgQW"oy3CBr,Ca,4U?Ŀ~=[2S=lAD,NX0ñZXgQ0wApyGb}Kn*wġ7He#{D0@"g؆]6'>K:L̊fb.`Ҥh<"_D-e>Oˊ7$7S~|Kn~>$.+fT{Q3@Jk9Zגn$\nzPJ ۡz[PsC:C]CfHe_΅ >>d豅o `,U;De lQ]3ٹcb |9MGAh|lx~-DsU~y`Ũ:jQ[=[*|Jתݴw/XQjqqpA#qCbl/(8YmqƲ5c.?+p Q/[ǂ~K}D@m<ԜZX9,J"2a\K8b9YLz_N՝:VҎ%9xiHC75BYWۈs_[Ks[>-a3tu@IF7!~pF9VGhMgly5 EmYحKˀTT<'zG lrb&bdǥw.sGR1Yc ,tyJIBr`0.KC{N4B(buzRFnʵrԊID6[۵|}7nܧ"e} ˄!7e5dƳOPٯY8uˍ/x̨y#;oߞPZMgG5U ժl. o)Ny)c?UZꥃHr? j0Jm=22$ݼ)2EZ="t>20cJڝdDSfp\-d[ 0..gAWٿxf}&Gr4sH?I(p *o#^}@L(HEYF-蠋=jnW:^/I>:/֩!dJ*P]uo4%]πgM⥙q8P;%z/?; u%'׈3F:}X֣R\i/# XzV.I#r]i6 $p O|#؎( Q9ZT&zɳ)_s`pE ӣ)RIn=9[ &w\tq޷ ׈/&kYp!lh-unWC"dwZC_S?'544ez%_NR@Uօ|\^!m6R#wTt09j1ĕmN۰MWL)hP㎖aaQ1+\8B4`uUOi׊LW)^õW} sG1g0IяuÎ3jBGLeΠ!-%`. S%qSCV5iu_Ct!j) {|'cQu> stream xڍeT\;wi$ݥ !H@p'=@9ޓs~MϪYjڻ_Sf i+ + @BQ]ACΉ /3b4uP97;WO._"Y in ( `G/gkK+WI 7gp19[:M]@M`skc(jj va`xXZ@. gwm=XQ^4]v-\=LA rs eGd ̀ODNdW9`am(K+z2Lv.`HWi1U)tblbmKi rJA.(듴vC&:=|` kVnlNn Y &?6K+r '܊!^͐>| H+ ?k ; hm 0YZ;1,8[{!"!Dg@_&#-*ONv '+ D*)_`Bߚ# s)!݀[wz5IŠ/0"a7W:(!KڠXv^YWSZ9XB"ETv5K&5HbQ``g?>ȮB'.uAVOr0'/ "*Nd9 Ͽ `cuBB`gW+`m qBqdA `xl$?Hf@skHv@? gSs[Qmoi$3Af_ 7o /9O9D-Oo7_埌HYVL /f/ ?%B:-?~X@OnH.t S$?nH ܐd7{?e`s=Ĺ!qsW+? 2'7+h[X5@xd@y ,ȃktWdJn Bf/qCy92"׿/ yQB!6 !wub$,;\/n(1v[0_mIoS%UFDjaa?ēHy w"bbD6QD;G`%N&L=9}-"1@v奈@B^YX? |,c*}S&8, U=8&s}<?Cqm87#-| \Gw\&c jiUaQa%{fLM IO|&3G7p59ZM= g {vk>4N(Nq0%xO} w2 &zB#)f89GbFTEg޴٫qtrmFگUBlޫN< It~DGk>k@ \y8yo2>CR>uvJKp],] {?_J;uKYWi= c1eRL !Aɾ1H4/.εʈtW2i Ϛ֮l~⌸@0H$}@s$u }!X8Ӽ[p +kBuVw;Ln 3>J,;ޖ8n\<5ǏPlᆬi<J(rb d)sΏpAo@m#&gPd0iT5Yi뻒O<^1}qҾ-#7䄂&4t`k{72`=tL6a{2H6'r~"&gi` 9c-c^B3$|:Qu3:5C=lIi˕RGk;ihtga|hQ( gW8W 4cBOB)HTL a\^0#X$ݪ\NBX/l7Ԉsz839Ot"?)JfĪzrݏЃ5^PSm5D8ȨH)]3Ք{R/C5QA)-+QLh9}j7"絻O_2J=2hX Ftz1?̻ݫ`kiNkwUĬ˪\ƨXR.>mXIs7|҂sC;JSVo'onNF"oF%R6 oy=NjVgwAzkIHߓ鍕.`v砚%Q(ޗAgESS=(E -_Ec<>tRH)fE\t6/n˚3 7Fs=tlQ|V9e]aHP*7h7=SUCeĈs1cxw@5^Yф3a? ]=z-3.<&fzG7)4 ^S=0XpI.W})탋p}¡W:Xe#I+0Y9ڼfbO@Cc1 թ+0&DX>\"l:{ze6,لY\d&xɦ=qVdw M#ݶj"KR%箝5߿>'ژQ)4^r f'Z6Twev/oIt^Zޒ9 +Rl@L 2 ~i=y Ka _fQij|OWFZBԎu ~ڇ'[f+E l!%>}!S1Xe@Lϫ+&Xpqhs%[ ]Fg+3Ĺ#gyؠItR'wCL}bgEݙ^M5؟lz]XJrv878ᆴACfdh} MCW+IlުD12dmZ+0ClL.ϕt&+2M"\EjLjdn2]g8{7 Sz L\V]f@K yXqnsPڲ7i;c>{U]`;:W#2Y+d?4nFdYTO']ѷ$ѩˤu{a߿.@6:)>Rt=+Md:Yj{$IGf .T5bEc̽%Qqdd(zgEY+@s*?)iL$I<|=ZFP^|M*Qح$D mӟІ]\3z<;dwPKP {dmn-oˮaZ2?G9ȆO|v剉HxrDgpKql$} >G?4"< }'xl*1LRim:*,V8:>ver!Vn'ߎꆉz5X9{wA:GɟOquN̊@4ߜTU{بm): ķ`BDUbK /۸8$;oo%H}f&.EErIؓ%ޅvVrAuSeuRQ+0p$\mLtmNv &yZnAs5l \A\ߺ (dfB~^X#q[j.LmݹY/N6q}\먜= "@^Hn_<ɻҲ<0wk~z]b ܸ,H_gFApKX|Hfs.aO-W&cvnyP6Sh%qM)U8<Gs'bN>=F9'q}nvN{ A[Xx>kjQMA{hD  2 kBVk)!ԖЭ'`WK01s.`ĵ.ؠeZ$P[y>:NWa*L<~d{׾0Qh3DHxL%iDp>946[8*aI{*t&/ 8Ot`ѫwǸHb"Qqs˨XK$oqvWT<l mN@cdU-CḬ 4ۡ^1m}e$$>Er~jmFݨp&58\ 6P1M[W.g\'SlYp*=B!*.<9d毣C5ևF,X6z͕׬l0 jY/Q0߅uQ ,##TexH5/e—8~ohJ:xb"baȎ㟮xC3U$k:# YG>+JObr4JJרO{jˎ??!V4+Q lJHgˌy~E2$Tisn5P_&Rg&$XAd9k"jl?}v+Ӫ\s8l9T0v1c%&+\;R (sZ_EB}F)XTljNe@{V7s?,]Es@v|]UOGY R2Y(;jTPK&sMk'|9yʖCbs;h#iZdEKjK"2RiǥL(c+_:#JK=ƍۄP /n*5J̪-[('*lZ"yh910?h. E:T8-1On"' By Ov-WTTH^j 3!,TKʌ>w` q#ƉDVTA݈Wv)2 ;u=ޫs8R#Ra{ (LLtn]c\2'1Aw*`7, }pl'W.lՠҸoۧ>jk#,8[ykWU[JgS=hCuUc` Rm(B7.7?q t`y~ߖV^q Em*8i@~]VW&8W\a!@t5kgx=#ⓋRWQyୋ1v_/jmN!J[ݽ UUGw>Y"K ) P1xE}iH[`*b*&-TK1}EF- Mx:U@O*RlTzuWr V;VޜcthGݬZ3ً9IkMhi+^׾ _^8=9j/tG|EQNEBz`slFMGJ{wuRIUW#],YrXaZHVgr2g}* J!A;H~/M9fb{1i߂:օ^2:@%0ކؠ]G4z",SQx}`=W^A  CQSe-8)uCp" e@{ 6 bWj"YL\K2گrUJK?Ikyk?i>F ԶG>J^wn~Vl?*S{kMӭkȤgs Zo7/e{ɧ1fLm67ׂ6=iRj[?  //oz/[lT"2)*6ue0?gO!/,kώ½B/}cޖԨ=٨iNUeyƋ@-Cqbcm6F0T3cJ]w״ 9 VcHszMRmkd|{v6<*R+/TԗsHp1ϕ%IC+@N61bDpT~ @2_Rszp$}w;E5o Rg?E"Pe(qfym_,/:4yۣ)v2HzEU]-ƫmQfkyث>[oD>?3~cVȢ؜Ѱs~)YT jNV±)KJ+deb\vn1 E.+}AB{nԸ{lu˖;;pgA+1X/w`~}g m[e5u~4(en:n>?F"}݅&1rM ӌp6IVSu\1WX4|ܣ>7h"@p5wb E $Q>l2yܳp$B6oGa-@:w-u`@2PZZ;x!v4t|O* &9F@. ILΡr1R̲qr)]MGthTqD}wo"=L<5dtֺ.ׁT։ ̼RB>S{:k#1IH[nF#Q5,Z O;fa3/Nȧ"(z+}Gc yVvx~Zq)sMjot (W084XcɆ5o I4dmY˜^![Y >0KW90.{]yJR/ ;'i-%l ;팛YCf/5cjOic/u.GEg-Vuqq%~FI8>B'1@8r2gA_¥=HK?V`p: ոP*jUm Jo/?8NZr!DhNV|q!IF/wrhu &b$ly[0cr'Q9Эz DsY{{ryJ,'?ө$wE]"[ʬ -ЍyH sZo\Q־^_[rLmOt:6`P9&?}#-5B8y4}÷ç_.jN?tt=6r>.kfJgNTmn Iw(߇0S?Gr58u̕#~\Fik)a.1{ڨ@+'.~ʇAUVۯtDԣ 4gN3p I?x̜5U[wöfLg̀x6oP `Tʢnc&|,cf0SIp )6ӏO)U܉UQPtD.A qa2[ᏵѢ,iN 1c8'_Z n2Ӡzy=$^i3%V>O5+?U?1|i1z-˲N_sJ)sJ<<&8gP6my0`Cc57p6(/ 4RÙ7g+q)l$CĔ¬anʒSR嚙z?u k| c#gZP+v k9i!@oj>) 0yiahj9~XV_~Ge-;قЅҊ1:#@586)(_a0!oWlGy bN3?k'`9 bxwX[}V$MEV@Z~R8>p~L[|]^ǓP5@=*@Z+_gfKԬq] ^*Se?ex=%tP Τ{NnfEw)>'"@ؑC|C#/P3`rWEY5Ii.G\ɴ:c 9^ԤP. Tvt t[bˆ}fy|uJl\e 3.ۤDP7%_pzuo?ӘNW,Uoݻ#hNR*H|_hD@Z*}qKzT6i/U@o:Wb3S hqF>4]CjХZk{4a:){؃2yܕ 9 ]Km3sHX d:uC^̃0'5e!)>&LvN6V6q 9fcYݶ.Vwh7Cjc0گؾM9޶%c%:դZpKzz/g˙|eldҏ^`M}$dn9}Η)a'zkD.~88#67sW_';g.O[HoaS(n|x|O._`{wO~( |@˞&z*EUQvIw\k:m@KnRo#ȗKcE5Y 76<^ Ü @S4A/AWvK鵗8ʤDћ)6_Co m; ȺM͹MyKFJ6vN4r8a(#@ʩjUulϚ]wf *<ɪkG24Kěԥ΍=ډוTC_:34D Zw8gG<iI0l kY?cdz"F9h<`2}~S EG`K"-Ne d ^EF 46ՍmzD? *Cg ͷ/q_k֪(^i |{\<<ϴ$X+g\kkNwͯl]_·Qw4@Ha]N&Z->Z"vdH|w6-`>oZYB4ڞs_e4b\ز:J5zØm?پQ[6悂yC1>MEQPnǟfx$I&4/0NOsBlX햻riOݭBz6QI Ig%)8؆s:}ȳyU~,c}tsޡwZ2-5e?^-bϊvn)R%N*mgGoWֳ̬U8 :\xЎ],REL1Rd>V>q=[@u/~ў 0'tVErXLOfp/tNe'1. 3끀{ۚMT?A+|t27u3*P3cHV9B"թ |H"e\?D gUB:mDïұpb$HWQ6觶eE.dns|)J*ԫ+4c= *EZSDSw?ñ 0hrD@$mɼq^N]ujt?__3O%N[a bڿ߅8?3yoZH0T;T{֕Zm#I>ys0A^e*0g[ff1S/0A-<."M8r^t}gxʓlܲ~bՇVr[:R^f}-kpo JG"y"C{&Q\{FdӤ$:Xa[˯ga_+V)I-̯gP(7ք5~!1GO ͛gB- ;"g~"\=ף,8L`R?6wp ۙ+i<<h!gہǣULd8ؓe?j} -hwR.Wf:!vd;+U %Dm`Si0ELڛGG?UDa!enL7 M045]d> "&'S5Wa nYW!7OyP7gq-m@| f}Hg6!}G3. ߻LiLz.x)lP~ #? _#G רޒ1?:B8zΚ.1㑣?(G<hƬ72_h.mqS7x@T"[? w5ςVb^jFoIQЙ6}Ua_$p9"Ft^Q~+ ç{{wxjT)Ov Tv78aK JK.~s>Q2V/`E%wX3h_=GˣH 9iLSl+!$<Pk^=1 C^AAfd`c^u/قаs.@mTތkl@/V="#-l@ujf eA+PO;ppSr]}j 0u,o1,Y;lja5 :B$'Evگ32hvB&r{ Jüq6N$UJ邲Xu]J[|?.[`es8 w\1CF_9ug:7 ȶT<90JIU&L>Zr F,ܠ;7IN)12<)X]8}v|}݂'|Kk{foHМ3i]|K`-ng)/;|.Ncz'mX ZpIX47O ɍczu6WB 4׾kCZxЧׯ8=#ҝoyZۋſ,┑&%f`,UUGkIşE *$"1]Ҡj`q6 ?6[E⫆36~E<5 Sz+qV*IVx+"l,I ^lKϊc Z[]$8e+}+cƭ0op!(Hxwdgq{z Ha7AP"8ƪeg :SY }M!Y;lrИ_ϴXXN.JK?S=oCpuZ@i1b :3± ʼn2+e"=c%y6'zFf8tٖ|Hߎ\i"*.#A|Sl& UW<@2~?sP7Ņ ԯPa8?/RJu;av͜ u?{Cns=h ,/*1|ۚ)H'M"i%^s]P:3c?ᯘBYD=®nJ"o~*-1{H7Hkɀ G˪KA5Jp^gFJZjWQ(o_ɟ(Cɩ[%4JgHJE0hK^76apjc'~eI:(`n@{)H1 5yOJ|~^JHP(EOBɔȕ[O_㛈:('As3]Zk+kĤʒ~lqN_Ìmɋu(n 7k'rHy5 (A#kK|Ͷuo,%ZN_)1LL=om8]9Wk&uN\5hnG^qv\F!Ԫә c62g9gz~j=[ϓOkeTı2J{rowF,gzOQ?GxZN9T}Ok͎۽thOq&!jXھ3s.^llbdgY2eCeB߬qM؃vbGr' ,}НF7I5 ixZ"@`C<<\kvmVR[PPѧȏ0Y̜/%'4?غ#rfse=V#z2aH"Ŀ!=5] Zxb(G7"<'i/b~-_<-'w%qD~,#Zqg\9#o> I 9qd*DdN*6F `d7K K-e*Q yzQ_VW?)aFwB.z`smLҟ}bC %߿9 endstream endobj 39 0 obj << /Length1 2596 /Length2 18096 /Length3 0 /Length 19611 /Filter /FlateDecode >> stream xڌP w(ł݋ww+(^\}̽$gkTEQ(`W`e3!RRj\m#Rj]@|X;M\2 W=@`cca a2(2.^ K+Wp~ИXyyvAf&EW+8-@ t4V|L&v.LΖB @ tv P2C arB lAf@{9PU(;c?2v613ss4[,@@+/C[ lw&)QU ?\̜A.L. ۿ82fI{sq;; _If{1s6>E {sh92kڃ܀؀Ee@W' ;zY1@/1#L?}\L܁Wg7ϟEs+h G,Z c+׿ f`o#fաJ11O# o?U)koO.`&o,%4\ yv7E[zM@^XM,"f&] )'\jflGמق*.n#+ с|{Go;Q%c8;x!' FsC `fwpΈ)'Y/7Y7o `q~#6o` 8oΠ/TX̪8oΠ9hF ڿj/8o4-M'[@f g37ߖl\(\A9Gb;&ο`&f6@_V  ._ g` KbgU1Q 3|/W&i`kGwb18Nn5no0- svp3wDG*O0#oh,mY".dj^?`G `Ggn#x|~ n.K~Nn@s?܍8B#7)!.|3Z98G0OW?1~(8߿,\l$fz1ࠞ@pV? ޿kG:"ܜv)?QzC?v׋x0N Rj2,9wBO^wM-Is#Lsіd6ێ8;8U|,0@@Ȩ!d -GƃRu/0Pc<|aWuKcf~Pei[28WF7ths7yS$r ~'%>lqޫl.=oo0g|RƬ ~eeX &=Scu^ko`z߇nH[z )B/{wᕼ|6`ntoO?OyYl! n᬴J(.H%(ʏEq0wƢ%RI&WidN꫰Z|ExY/=hKo* ug{uF=b>G| ҦK=Ȣlm'%lS{JX1Yf2z_!iZߋ5<822KiewO6 {\dy:‡EǗKj?0wjLMfm^~.pJ{%/zuȇN*ƴnx)yYn\ nGe(&QzPO~stH~w"(jw/&QY}vT`1ɘ8w;AKas62\Ә-lu4{n"|8/,86Ws`qCDS=yײ|lΉz3k^ck0->L3ĴS;͕iOwɮSZV EPf X>K 2\~-u 7&}cg)`.-R_hC FUPgupgYuV<܂A+r{iADvTח|q;( +GIG'ݎ ebjP=^ԁY<c3[ lS={~wR5bm X0!igypHK)5ᨐ>3RL69WUD󵾏z%fD5f7@ESqGzW_{T`pU)^"cXK~-zI/<$vL2D{$Fz:El@9q\ (uvi65T. ayCԁ?np`t.mM*=Ɨj5'ʌkj2y?aY~3 JCp Q#m<§Dj,hO2~=(jaeYClNs!FDe]_1vPzUu9c:* LkmՇ|r_T'>4oO@ݞ2X[OsFđڞ2s̷l9MLWRenI<JJwҗNn-C{-̙N;S17ۺF؎cMg!NhRvQ&2` 6b^fcB`~[.y\fvS|(jOsb)x4HSp"^ +.^ޖ{h,%LS=X0W$DS$jL6pt%0x%Ƅv|_)U)K$1 tY`ۧ:P%!MAhʮz쾱,W/<)N q>+Ɵ= |H˽z3dPwR~XXT,-ވ8>YF{ݧNq N sft=$$CáIޏCEyާWSW2oaNv-wYhߩk9xs+zo/jLnbҦOLa =x%b 66M>o,- m}:EU6+@N,t­ybv0 _AaE m:c5&sT{m|Uk"] u#Kf:Jyמ(-TFɾf/b{!"-$]"&E@]S}!Ixg x5J-maby50 "-Î:NZ,O$_kBN'yu) 7J{#毽UJ9>9b1tqQEbjR%mܞY)?K.pM4g^E m`M=̷;e-X!m]PXWML$$Of )OAh亾~Sy:Iv),lH>l]zN6u;ocӦY37A,ݗNxl֐h|Ve(!.?a?(> LmzRDм>H[\gF tcZrzWּ4ħEt $ r'%4Lt1[31أ  8>n::DEEpKi֥y=Q@ً6W+ uҎ7Iį[sw'#S#N:eͫ$>k5ƨ@l:PglO̓34\YSKNr.%=@e;',~ +4 &JJ8i4o|Ѱ M`U^NP Qɤ!ym1YKnax JuK zYM6KK3lՠ*lrGD?YxyH;j*$*6 ;m ݤxcHIDL>t,HĔb˻JȟaY_O_7~BY^{H6Q2 t4/`U֛^ljuԖ 闰Po1TATxC97mg_N [ƷF=kp7|wQc~}O Z>gm]e:*C92%z: 2'?\ ȼ)( 9˼Fɬl >?B'T{ЩUW5#ٷU:[he=Q f4Pe-{Q] 4zuV!,LauE-hqgQ̡i­ .*dq;gX>nϘW|r/k4U҆_7AˉH㼊W-~ X=u&pڢdrj%4HJxzI>ĨQP/?+6LJ=qt>Mc/ 3u9 1ӵ%+b)d9X8Q{hykzY[G %gf]^l..ϯ>N&; *+=a8v/ű[*?={Ҁ%?7 L)\oYFf{f|vOV{/\GBH.Zw[{Dmڜ1Nu8]Pu0N}uۜP6 t.MJXb6`VrzP 1KaGɅ6]O)w~ .1f}:.;а_﬜@#}:&6 vB^6)ijgbj(( R!'M-ܳZekCg;-Nq*Tz<4Rbx=.AK? dRZ1h,ؗuR^z2#vh៱0+M;|s铓:S-azNMLMJnG=:D[`y*a").LV8zMXwc.+@@pSs!>~0åm/0MѧW2i{jgfUlU`YA{W=)%qÏR=633N,>5_MR-IZʤ?J!)t%$=ޛUca> IRRP @&8C,Al"h %s\ hXQe?rc`k4kg*̡x4"߬t̑X;{M^5:n"WIٞ,N(vtiQʿרW Bhd;p۝h&#Dg/Ek[ܯ}#gG(+퍝 }CK:?*'ZL]+D7FaR:}\t.Y~AȀ9;8h^lz."ҭŕ=x(SC-ˊD ^Z-| i!Cţe޻BT+aLAeEa{,0iOaܷF}t-eI䮕w?q6ۚNlKx'~^씝‘I]7]ZªxA;onB~Hkظ~kR.w[PVFȣj\ׂnyʫs):¦azC U .(E^E}֖D'V.ߵQyIF tCIDE%Tjb܍v5D6i S&aY .7͇c fjþRgP1R;9_w՚uWN/ݻXDpl Oݾ bsX/,rZw39X5x"aG) EBLe՟*ˡQ~rpۼ_{}6zᡒ6p4!{ԫN̄H@U <6FqY眭&L8_'Tbc\}W^W43my[4Yt˅q}CQچS>R})i _5cj}Z9)=|'wx$jq ֋w.Kq6(Ew3%~ fGe#e]+zp 1n mC4Z9xȫx~g5dfo bςf'7p/uw,`i"*:<:M>B8F䓛uTZ/`uʇ]Q2rޢQt l(ӎsh ȔX D\hL P32;ȽExFJ\boٰ` 1dS̲I fWUjIQ0<&rD }'_9mo4/S/ Lui0u.,|w-z*DgCc:i튾M,m%r{x gTh(ƚ”K, yq\ 1G43m !٘B:y?j^M Iwn|EaV&kBo7?0԰$q+tvc=̔6G&c_M@Jh˸E7MZv~-%:e3X#Q?  sK'#<̢W:k|oޫ_CmF!nnزJPLa÷z?wʇ=C}ׄ 5 a/yҷk!u A"~2|-4B4x]\6Qu=7JB~{KI. cP »㌛+^Ņ;<$t̎ |absӞ TduxiNKRBAZvMy豽FKjxT-n Fﲖyg$fH_Ԑ17(Bc)tN-sLJCoUV%a)/waEӴ?# $磭嫸5xXNj^@0=(q8"vM|ykxA7vwɒ_HA58d$oMvjQvg]ze\0'2E<&bW }֋9M))X\^(0\CW2Lm>g$}_՛Ȑ vddx* Rn3 >eƢQ}JICZrxR.x6W _7dԕm~"Rxr1z%f (x~Z JkL1I+ШNixt`vL}̠zQBU^\CFU*%Y~sۆ<~q8g~mF_x=]k nzΗ7|ZwvIu1Ke*GҐ#a_2:r)⤑ͅThi)Ǡxm]Ħ¡;Cݘ[Y޽̅2a3_it(In33-UPͽjN]@iMZ?$^م;:mzdPR&p(W$KE&OgW#rrrpx'f{,xfXpetrpN^38}d2^-J`tpm6G|k)0 ;UқgE4[9d SraՂ*[(Eq` Ю8j<>*QEC6sL%}cс;wxSyMcS#r?+LfLy$G*Ṟ9OfQhFt(?wJѫ5?̱\/v5IR&s "ʿN<^R/c|4.VCm|veN7X`zS_&V@AuO=XR.7h-?C!|kG  ߟ%ׄ9=HwkLlEE*O"|4ˏz{i8%\FF7 .zoUebr娩p_hUMG| 7LaeްKTގ"^SLLup&xe}0xU#Dinqkו1%ʭ2)A?Ӊ}Q1`'Ř PGJ;ļV8/ܗ&cj 閧rn#GZ&=W{641zrszݼ!̸ BiWtm(w {-)n .ykE9گ 5ѣ\[5WD ߳\dZFL 8Z1Ai 1Ly;tz"{0Ò%l𞆓]1"sB;N9ɟi^_'y..6q55e}<ᦺ)CM m!w"&vlX$PBNTnM0FC_ D;7It (.bpA0j;7!e\Ԡ>I< i_/FռaZ\PWBrkG'g`O# |G4fg* ,8wIyh+LRjb}W2\b8E8~5+I1$LZ&)S$ݿ}. ܱ;PfP8ĄHT=aq U]MW ^P0]% _t(<+BGR6r {߮ Y"Y: {` oH9w('ٽcVq/:h ɍZJ F9-CqHϹ65kft[@9l@\tb斨h;i=Z3 %8`jӖuӺ9hh#־_3lVTP`)z-LE Gqܖ(a،ٿ%i)d1NKCD%WƙvcE[L`7k͡jVu@r?RqљIBkq]8-j3 %16 §&i 1eQ fX2}ڜO84Y?wTwe"^D6.{-B``}z16 \.+49J.s]NcHd'Xv05kqq+ w;’D9qkrTJDS qN X\DΪ؍݌Tqm$5>bk_e|YNn" ,/" tFL~'~@tU]X xs\uFr4(To2#TYwK7m>%\L+g/K9YGXj_e1BcȻz=庝GJ+d|,-S!j<|'A\؅+o | !±O%<7u~bsZ{[1S3>}%n+`x#=x VzbOt˅f$}\ͽ#CPOHu\Pntbemk$Vۋr Jn6G AރB/2Lw2!_.D=(]I5 h'{na9”jš `WL h!tzRyGu,f!A"3rّS(6ȾQNmcA`l Cԉ+X|,W%sGe il7fLƑDAgY.Sh. T;[vƎ6LὯ Zݐekى ͅI˚wuRxP" bbio. T,;%^Z#؞zc%ZY" ~R˲rѪ^~Rsge9e m~GZ Z'c` M8dřjVաn >eKFQloD tJ9R% { yDX>FӮ?ydq[myR2aߥ8׏*[9|v|y&n#ZivJQ%@EL5L}{4{}TqpHRx :ⴔF3LBaޖ<TF59*KX ;~S9;<\6Rߚ'k oJP/>\?c;>"*Q}߸ٌM-Cs.>22U/z~8)q@%sVfvR"CHEyAT)UG+}Yj͵hѰ1k {VkB3Bg of:kIj|rg ,Bnfu -SN%E-RNh,ɥߖdÓc߄Fp7h,c*, i60lBy*Il w=QMYYe'KLv>{'t(|;Ur񔀎?181~B#2H0ޤk?AڤYwlJrPH6T"6E Sx<_*K9-phLP>,u&LB8N.ox .tJ"sR)&-<%;w.`WȆ%d:ٔOv?٘\yC]*gkwx}G7ܢ仳ٽt1ⲧoR7䒴;?IYGeogBlVUYHz:v]79V+m(ECRjAON^N\c ̯J(9zU=>=#ϛC(wz1AJq@mɗ)ojVP B/)Zirgq|D-[0^4[vh(ivuOhkŔEWR7ۭc}f,A|n`Ԟ=g{˃Pg!)RSցf)r<߫I(֦",j=)#]xOM?llBZ@frNʂdЧ'U ݃ Q876r9`ϫ6ȁ䗄f蒑 ?.Q'M8F޿MlqU'$^/ЫRQeo9Rf[ m R8K-w\KZuhLN.m>l523P+ Ogd6>=Ê|7odk&.wHRoF7EUMw۽~.CFdr|>-uGc,Śm`әho- |-tM v*:Oh³t_ĥ/v?&$R?3NMEi;tէB@ $:R}QZ_rzё"U3(o}q]lamЎ5hQiIE_˒ޮ)j);Fv:R峎Gہ{kwh**ԋtpq4ǵ%1jLNiǛXLC4gY@c#ʷ6&Pm`G9NlV_7'̀ڎGӘH8e~4N̘0&/E|VKume( ; {1" |>+/>,|askynj8MO-M#)wzz0dlVbz\@?jx{ssnY9l8&1=!p]7Tiw@mmy"KWU@'+݃"l%&CR@"rcyVD7Qa=SBOf@/1xUѢ 9* h߫ٛ= .vU"+ϨnjЙn\RbΏn{[i&rS2q dib{b*T9{ZmpX E1EtS(O{Sة+$[P)> oگwpi3Ot[/˭ bzh`ZqTU:$ΫL[(O8nsR\uSJ6EO(Pw}>z0k@tik;2q95l0EZ,йp ; Eb MЛ5#o,JsmPNc>^c1mw9x5kTj.5Rrj% }s8RKIo9s-x䇨7j+]_KwKSe_: 8yD4ࣔķu768k㚬X +25cs6 qld 7|I΁WfZ)d4ϘslUV>Lo[:O؆fHOkOŠZ"'"uTIWht?1%(K 1&͕mح2YAi}ƛnAUw^CB5q]"E\;pK&^O X)CSFQ;1z`S/7 e{gZC2;TP̭?n$M{ !A3"g&=P/;u;J[=/7ii[ԞjrNX+.:mن)PxE4$%0ɏ'JpM@4M("#8BL[wMaojm yqz(i`Vt8=mƘpWxϣK(9 Jv:jC4PɗOfUaA F鴪"y?_N9+FzCd;40[)B]$/cYiDCI)7vdgrreG<8wwS|ë,XgAwD鈿Vc&ko/<A6b(τRMjs MB ld+?^bRRh] f7~h4U {CyA' DIeDb9b1(JySAOҵdy,ħb#p7kFHMFbIxC p d endstream endobj 42 0 obj << /Producer (pdfTeX-1.40.15) /Creator (TeX) /CreationDate (D:20170622004535+02'00') /ModDate (D:20170622004535+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) kpathsea version 6.2.1dev) >> endobj 9 0 obj << /Type /ObjStm /N 29 /First 210 /Length 1564 /Filter /FlateDecode >> stream xXYoF~ׯ5ܛ |D[;Ml5qj6YTH*;K[ԕڱQ@s9{ͷZSqq΄MLjQL)L-3 `7܋%Q8:vS vd˦>a7 /4i`gr5 ͟-uQQVҵ'؁=x pGN' .a:!xr^ F0r>aSen?Q*3L}CfE퇗ׄ^KozTzf W瘷^h%oG/ddN!Ao$7L~S1tbgLtL*p{gvpSX=\6dqܼ; Bg7Tcj tL $ {Rr=b}zju>z,2|uFo\LZ5?Ͳqy^>Êi#WU$gU6c}CzfTH'QSpy5'1M84|oY#{̮Lf\G4+7zYbRWU^QA3]jl2e5(J3حH]f/.l򲪉/FQv޻|X*hKKղo|t/6˾co<>]v/9tx˵\%+v|͑C_*5Ê}D+~^IR\uש endstream endobj 43 0 obj << /Type /XRef /Index [0 44] /Size 44 /W [1 3 1] /Root 41 0 R /Info 42 0 R /ID [<7AEB9CDC8B97E848A720EE2F71E288E1> <7AEB9CDC8B97E848A720EE2F71E288E1>] /Length 134 /Filter /FlateDecode >> stream xɻxz-kaE PH=$R̹7WTAkaffJSHo|nj"4 1Xl1Sk:b3}30.#qG[5gԬt8D endstream endobj startxref 84616 %%EOF survey/inst/doc/nwts.rda0000644000176200001440000000050312242746122015014 0ustar liggesusersK0ъAē^n <ŮjaDMyT@DyKINB"rqi y>(A9W݅` D 7|UuyMG`i)Ǝ>]` M >xS3=p͚C0ǭ7KKT17FQJU( YUچ^&d tLb8JjJjo)⟊Ye2b9a9e9cq⁵Zb-667X|Kihot A_lh~]m=]JwMnsurvey/inst/doc/epi.R0000644000176200001440000001157313122573410014236 0ustar liggesusers### R code from vignette source 'epi.Rnw' ################################################### ### code chunk number 1: epi.Rnw:45-61 ################################################### library(survey) load(system.file("doc","nwts.rda",package="survey")) nwtsnb<-nwts nwtsnb$case<-nwts$case-nwtsb$case nwtsnb$control<-nwts$control-nwtsb$control a<-rbind(nwtsb,nwtsnb) a$in.ccs<-rep(c(TRUE,FALSE),each=16) b<-rbind(a,a) b$rel<-rep(c(1,0),each=32) b$n<-ifelse(b$rel,b$case,b$control) index<-rep(1:64,b$n) nwt.exp<-b[index,c(1:3,6,7)] nwt.exp$id<-1:4088 ################################################### ### code chunk number 2: epi.Rnw:65-66 ################################################### glm(rel~factor(stage)*factor(histol), family=binomial, data=nwt.exp) ################################################### ### code chunk number 3: epi.Rnw:75-79 ################################################### dccs2<-twophase(id=list(~id,~id),subset=~in.ccs, strata=list(NULL,~interaction(instit,rel)),data=nwt.exp) summary(svyglm(rel~factor(stage)*factor(histol),family=binomial,design=dccs2)) ################################################### ### code chunk number 4: epi.Rnw:88-94 ################################################### dccs8<-twophase(id=list(~id,~id),subset=~in.ccs, strata=list(NULL,~interaction(instit,stage,rel)),data=nwt.exp) gccs8<-calibrate(dccs2,phase=2,formula=~interaction(instit,stage,rel)) summary(svyglm(rel~factor(stage)*factor(histol),family=binomial,design=dccs8)) summary(svyglm(rel~factor(stage)*factor(histol),family=binomial,design=gccs8)) ################################################### ### code chunk number 5: epi.Rnw:122-126 ################################################### library(survey) library(survival) data(nwtco) ntwco<-subset(nwtco, !is.na(edrel)) ################################################### ### code chunk number 6: epi.Rnw:130-131 ################################################### coxph(Surv(edrel, rel)~factor(stage)+factor(histol)+I(age/12),data=nwtco) ################################################### ### code chunk number 7: epi.Rnw:143-155 ################################################### (dcch<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco)) svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcch) subcoh <- nwtco$in.subcohort selccoh <- with(nwtco, rel==1|subcoh==1) ccoh.data <- nwtco[selccoh,] ccoh.data$subcohort <- subcoh[selccoh] cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), data =ccoh.data, subcoh = ~subcohort, id=~seqno, cohort.size=4028, method="LinYing") ################################################### ### code chunk number 8: epi.Rnw:165-176 ################################################### nwtco$eventrec<-rep(0,nrow(nwtco)) nwtco.extra<-subset(nwtco, rel==1) nwtco.extra$eventrec<-1 nwtco.expd<-rbind(subset(nwtco,in.subcohort==1),nwtco.extra) nwtco.expd$stop<-with(nwtco.expd, ifelse(rel & !eventrec, edrel-0.001,edrel)) nwtco.expd$start<-with(nwtco.expd, ifelse(rel & eventrec, edrel-0.001, 0)) nwtco.expd$event<-with(nwtco.expd, ifelse(rel & eventrec, 1, 0)) nwtco.expd$pwts<-ifelse(nwtco.expd$event, 1, 1/with(nwtco,mean(in.subcohort | rel))) ################################################### ### code chunk number 9: epi.Rnw:185-189 ################################################### (dBarlow<-svydesign(id=~seqno+eventrec, strata=~in.subcohort+rel, data=nwtco.expd, weight=~pwts)) svycoxph(Surv(start,stop,event)~factor(stage)+factor(histol)+I(age/12), design=dBarlow) ################################################### ### code chunk number 10: epi.Rnw:194-197 ################################################### (dWacholder <- as.svrepdesign(dBarlow,type="bootstrap",replicates=500)) svycoxph(Surv(start,stop,event)~factor(stage)+factor(histol)+I(age/12), design=dWacholder) ################################################### ### code chunk number 11: epi.Rnw:209-217 ################################################### load(system.file("doc","nwtco-subcohort.rda",package="survey")) nwtco$subcohort<-subcohort d_BorganII <- twophase(id=list(~seqno,~seqno), strata=list(NULL,~interaction(instit,rel)), data=nwtco, subset=~I(rel |subcohort)) (b2<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganII)) ################################################### ### code chunk number 12: epi.Rnw:222-225 ################################################### d_BorganIIps <- calibrate(d_BorganII, phase=2, formula=~age+interaction(instit,rel,stage)) svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganIIps) survey/inst/doc/pps.pdf0000644000176200001440000051164013122573415014640 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2364 /Filter /FlateDecode >> stream xڵY~?R@ᾗ FA5HOeR|gfg)R iɝozy}ȤJZ]fp89+.Uv=~:yY ~m೘LuQ_9r-N|qӷ?2R*zNUq;X>2Q6ǁ_p<" ,B{tk\rCM>GYBV)L%mȦډ '97_|Wωy`$ y>L+zd$n;Lafpkma(6FU+{|7qG ݚ-.-GP4Gt{bpTQp9E+=,YԄ$5857ķP(QvXĥ[OLQYi$o;I $ӖWcE '>fjϣ(%ެqw/ɇGh G1[2F+{K,I|d2=|$ˆ`]d'Xp-##p YZ9z'פٽ%T~M0T\ @Yj>Ojo;kܡd q\ Fk7q %,Z@>ė&s~3 ?fd<G#z۰!mPVsZQVi <)W8yۊwb~6_JⴑqgW  i$,NE)YGR-᫝|ZǙW=zv}8 1LPm#JAu16[%ޖnBД#G\R|Ϝ⸀ps,ˤ#۳Z? Wo ' }=gk 磡"m'ٜ@8.ԅƺI*un9L"M:{W05brLJu1Iy<~Am)&ZFR vӞV(:pOWWp:JH1Fm3e6eb Z8;߭[j8`7]}[H&D52mW겪85XQfck4xL (tλ(xp̻u?]Ӊq>U @5xa$jDPlłw?2 :&ShGY!_ l/+SH: b] 5]UXMDlcQ#Yi<Me 4峙;?oi1}*h5ݾ|oAs g^y]ASbCSRb7i9L}):N  #fPU:>F*Q0RDy6/"ȅHD!2p/G>+ b)}'-{GgMP$+ύF44 CAJ(T$~? #cޏVx ޫt7F-Go:  .W.*y|pmQ8[kR a[t]}:nAVlu?ǣ6XjLiwSkmAVh4f| endstream endobj 19 0 obj << /Length 3458 /Filter /FlateDecode >> stream xZo#B( TFc}IRq9$(dke)gI8;/rerE?]Β3oO/>l56vTNYFѷ/Vwfk[οǟi;Q5D]偔?0YVz,qm; YZK q7s[ߞh-UYWSn0 ɇcҏ25/'H9γ_]K 70߁wԵb~/`tUƨ6ȠQۜ_8g/I; H&`2+ijUεQ*S4KQN[^r׍eD/PU8s`MoeZLgB|4XЪ0TLnőoQlAA',(R6vFG`2;-Ӽ*f4,3ΈdztQ xïٛ^y”*뫑UmT)Sal 0$w^_q3,=)Qܸh 8lftOK06t />EL Zy(;dsbBbx3ZW+gD/\hw?^:7x|BpAd+Wwq~Xav&Ԏ.4a޼w ֈv{p;ދ`굌JdōmԷ@eHXuoQzh@{;YfΕo"8":΋ޜt_UzoN{\|w? w}{ayGOA@2t[Bk=5Qh_7pp֪*Xi'x( `lD\L^%}ű Ǔ2x2PLwIr{JFkJԧ~qM qՍ=J%5_Ol\W[\92Xye$WRNX efZ B躸*⫶\yV17Du;e|xP@1xfbC Fc6ı؄#%&HIM9TIux\;b|\nnL7sNɩ؇&rUGV ҥ ȳEl%$Y<)Gj6k JRjZٍߟۊ<5GY7$q aDE}-Yo5_cpЦe&դ2G$'ߧ0] rv]\0xLଵm$E͉вROhcnb66jk*1Q\i̠q>p>F 4iûWG`ftHR܄@rô%9 _2 ,yL ͦ,+l0[_"x̺\lQ<:ԏAUМUcЕS1x<c -᧴W1u(9GUӬ^XNXSt@q}Im^9 !] ϓ@6lƿ%\>8n,ÃGkE7,kT͸gaQ`]ϟ/.}H.[%77"B &CpiktRmtD%Js.cbo Gaha(BphaEw-A݂c/yJ0E3j{ M'ÙaiB^єT)Ӵ"LV0*'hU\1Σ漧b˝x)\*(\],e+pB17 <sJw1(4C_D~J:q;rw"YkK=DG,z |۔jS *#[4ʃ?qVfx5udY ٶ"1MlwWZRe]p2u )MԔ쥏f|Ap)ׅy #  n֞[_tĺN41\}1HtEʛ,},|`iƘӽz͏F c 3?Cd Ҋ;ֽmo֝w629 ND`|r-TĚ=.֐Z&V&HkfRBn:*-tQߩ>qu:N~j$02'\Ļztɾq`\#n!!V!(YU\c>ԂL'5AO=0+!(#GÙ:y?>i3ڌKS]ɺw7[I6)w})iOFf>sҏ8FFfW>~/{wdST|l`PQ0c_ c 0+aC]g4AGåW&r _a4׽nC2yY " K6-\MQ$EM2'Elr}8[J ljA֨5+K2#Wk'\flg -$:/3 endstream endobj 26 0 obj << /Length 1036 /Filter /FlateDecode >> stream xXݏ6 _a&Βm;lڷy)ƾ\8IC(}aw(I?Ҳy4@)-sS&R'Y0Pm(Iч6 .`[9.DsT-jPv*ifmRWkV7XxnWa~ մ}ߧ/~XJep氾L'1,zl.%SHJ|d4q'2hbФdkY'8Ax`[OaDVl ʚ-940VH3 ECxF*Ns-<~oegliqzrIy༺;^A>ZJL1,z^X>丸\R֞Kdn1V߫{q1&C߰?`hG0Rt3qaG-zfnY'꘾bKv{*n?  ;oSwS᪘7 'qo)3W=8ۭw:ڝz|G**FWX_;Dn_[[I++.n%4혤nó4&iFiVv*EM،]A\xO:9}v]8&KP8n!Ճ ;fLcr]U VDR*h6)"%b%-/SizvVZ*@aTp f8.hj+C݊bKTqM?j;_DRB-o1ߌ2@hc .tR 4˗84hm镹+.Ϋ0>՜ W @s۬Q,yiS :Z^#M(ԭ`z3x~qiKOX!1cC$xoWqM\w=8M~N0;q2)Xv(eQ7%[Ƅ ~&ϱ"Vy:^.lq zۃ+@l'-Z qt= endstream endobj 22 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./pps-003.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 27 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 28 0 R/F3 29 0 R>> /ExtGState << >>/ColorSpace << /sRGB 30 0 R >>>> /Length 6070 /Filter /FlateDecode >> stream xM㆕F} .Eh,ۓ0q0 +'b4?$*kE!^%QR< _ 頋}כ/>|7wp{şy$Ԣ.OLtO?O?p< .>x'7x=mXq7O?ϻx?5x~\/k,8_/k.Lezqp\å/n7R}ŗ>;_8{K[}ͮxծ/'.gltշy_=<o/x^{Y|qŇ^{Խŗԝ/~hy8fW=4Ӷ <4yó}g]5ϺAidtyn|ݠ0h{| rظ؞0]G>*kNl4OxuӎC2^u֗nt'ݠՆE7h}9ڞp;n]*ǻ/Nˍ&F2MY3F2X#X 1E`u`3X 1UQ"f,b"f,bc"f* X V1E`3X V1E`3X#X V V V j XDvގNˍ&F2MY`3X 11E`3X VEc"f,bc"f,b(`3X#X 1E`3X#X 1E`u`3X3X2X2Xy\"*M)agM=iʚ1"f,b"f* X#X 1E`3X#X 1E`u`3X VE"f,b"f,bc7,bh44e`3X#X 1E`U:F,b"f:F,b"f11E`3X 11E`3X V1U1U-UMgs VEE`pHI4(`U* X{4VEUQ"f* X1UQ(`(`3XVEE`U* X,bGko2Xx ,b"fJSЌLS֬G"X 1E`U:F,b"f:F,b"f11E`3X 11E`3X V1U1U-U-5?uͺ׈V׬VVW*vDez&55E55555 vٰY{u͎u͐QE{u͘u͚u͜u͞kkk&k6^#j]j1FئC lTk*Q6j^i: c&&1#Q[ U` lT*uͰQ6FغfبU`jQ6FبU`a lT*uͰQ[EvS[U*U5تlU 6jɄ{5cUa lU [UFتlU U`jU5U5ب[UV`jQ[UFتl{5hQ`/bQ65FبU`a%1Id„1غfبU`f~A H`׌ U U A 5#H U ]3TA*R3 ŮfEs9m{I0f &U Tk*`R崕4ȚeG &U T9ʑ`׌ U TAkF*R U TA*RA Hr$5 R[E_P lT*uͰQ6Fغfب[=y*~7> بU` l]3lT?FغfبU`65Fب[&A*uͰQ6Fغfب[U3dNmO4بU`a lT*uͰQ6FتikW#,1 بU`a lT*uͰQ6V` l]3lT*Q65FبU`a lU[E [UFتlU U`jU5تl{UبLW3[U*U5تlU 6V`jUajQ[UV` lU [U*U5j`ۣv>o{Fب[ U` lTk*Q6V`a%U KG{=f6Fب[ U` lU 65FبU` l]3lT*Q6VU`(U. U` l]3lT*Q6Fw[D̼֚1f UNE]|7W3A H`׌ U U A 5#H U ]3TA*R_nkϼVf̪fEy`RL5I0&U T9ʑ`UCkF*RARVIDdeF TAkF*R U TA*RA Hr$5 R[Ev;<|HU*uͰQ6FغfبU` lU 6FبUN[a䙙LnjFغfبU`jQ6FبU`a lT*uͰQ[En~nWFتlU U`jU5تl{Uب[UV`jQ(U L&ث*U5تl{UتlTV`jU5ب[UV` lU l{4aq?{uͰuͰuͰkkkk*kkkkk^#l]3l]^d2{[ [ U`a[ [ [ [ ۽Fغfغfغf55FͰ3lDmZK}SFغfبU` l]3lT*Q[ U` lT*uͰQ6jHnjFتlTk*Q6FغfبU` l]3lTVQ`(x7 lTk*Q65FبU`juͰQ6Fب[ U` l ۽a-Ʉ {lU 65FبU` l]3lT*Q6VU`(U4nIU5ب[UV`jQ[UFتl{5hQ`[.` lTk*Q65FبU`juͰQ6Fب[ U` lTk*T%,Ռ&1#uͰQ6Fب[ U` lTk*U* li` lTk*Q65FبU`juͰQ6Fب[ U` lTk*Qc&&L*Q6FغfبU` l]3lTVQ`(LU` l]3lT*Q6Fب[Uk*Q6FغfبU` l]3lT*UKNr{&&1#Q6FغfبU` l]3lTVQ`(,U` l]3lT*Q6Fب[Uk*Q6FغfبU` l]3lT*U5بrzK1 بU`a lT*uͰQ[EvQتlU 6V`jU5ب[UV`۫FتlU [U*U5تlU 6V`jUajQ%U K'dŒ1تlTV`jQ^ =l{.M%*Q6Fب[ U` lT5FبU` l]3lT*Q6FتlTk*T%,|Ud„=f6Fب[ U`*U* l 6FغfبU` l]3lT*Q[ U` lT*uͰQ6FغfبU`jQ6FKNrɄ {=a lT*uͰQ[Evo` lTk*Q65FبU`juͰQ6Fب[ U` lTk*QU`a lT*T%}H|: HnjFب[ U`*U*fؖzg'vͰuͰkkkk^#l]3l]3l]3lT^#l]3l]3l]3l]3laaaa[ [ U`a[ [ [ [ ۽ahg2aɰuͰkka#f؈ۺɼ] U`jU5تlTV`jUa lU [UFتlU U`jU5U5ب[UV`jQ#l]^dŒ1ب[Um = l֯FغfبU` l]3lT*Q[ U` lT*uͰQ6FغfبU`jQ6FبU`afغ*a=fsu#{=a lU[Em^}FغfبU` l]3lT|83`׌ U {59~`RLI0f0&Uj`R̮LI0&U T9m30 ̊_DW*`v`RLI0f0&Ur$X TA*GT9a lT*uͰQ6V` l]3lT*Q65FبUN[acz&&ՌVQ`hƓ)A5تlTV`jQ[UW*U5تlU U`jU5تlTV`۫V` lU [UFتlU 5Rt\30So1(ߔ lTk*Q65FبU`juͰQ6Fب[ U` lTk*QU`a lT*Q6Fب[ UN/*aIɄz5"Gߔ lTk*Q65FبU`juͰQ6Fب[ U` lTk*QU`a lT*Q6Fب[ U`*^d6k~3|W?ޖovͧoߟ뇧i[a߻V'lzor;}uضW5]yɷ^/DOW3x>ƙժ]&3<>q貭>Y>ͷ 4tnt|3m7qh}q営8z8T4t4|o~wlǡ) ]uz8tw8oP9CLC~-x}CSve8q[ G9 3y|<<ÓOòMx<>|\qt \~Xc^iyYˏk/uae}\\~\|~eho ~ܾu',4_8wg|xf|`|~ _?O?z|9?3~}yގ{|gw endstream endobj 32 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 35 0 obj << /Length 696 /Filter /FlateDecode >> stream xVMo@Whzھphȍ"d["vpBK/vffg5 VYk7f$<* Q22VE_ŷ,TeI$StjXǻRFL'byYF&ʌyIWM!Tk]ks`Qw[xo`6z d&ET)Q4a#Fq7Q.5v=NЃ׭='6sa+AtTRg.%ҙK*p;UnvHtAY;L}z(fϣ=4M /9nbҠ%d1i BʹLHXe8qT| Տx-A*7i*u\y hƁ=x&3ء0udV7 58DG~/ݟ-hy륥IIkyべ~-s 0ι%v o(Wőap-C41ҖB}bcS  q8Ԩp菅m2O"U2+b v#`> /ExtGState << >>/ColorSpace << /sRGB 39 0 R >>>> /Length 6824 /Filter /FlateDecode >> stream xOE)E,ۓ0q70 +'bmd<}/;eGȒ{Rÿ^yŇ݇p<Ϸ?8 >x.ûӇӇ8o>?~ /8a|Om<}?o-=;|Ǽw8?~\[ooo//|{822q: p?}1ۗ8GG܏}##~o|w4o}wHiy_9w_x9 ƹo1m-49:0ˡ8nKxåSϏq^çdQVv]/iz>ƚs9s/8zL4^Ks,k9]Ox{=Op??<. n4Lnvhίݡ};tݡvN׵5{u;4ݡy 8#a:Kmܑ0W }~Uܡ9ۡ:m8q;trtvf5a;4wl;e>&8ap.ϋRJӱoj"I]X eauauaua5ԅԅԅUVCYX@]X@]X@]X@]X eauauaua5ԅԅUPVCYX@]X@]X@]X@]X eauauaua5ԅUPV1]Xta]˨i hq]fPK5դ۬#>,1]c e.]ЕԕWT"?S[ѥ]@] vwtuu6󺌁 22{NLE)n.n.uww+Z[њh(5 Z{RL+V޹4NN4@-Uc73>mL+ewhhh4 DC$ -MH4jy&H "Z@-]J݅D4DhZ4hh: PEJiȃH""R#iK )讚='E0X" N?XDR"HPK`$R"HH"%"ZJDJ DDK RjHkUm #R`@&##hZJ )IT-bZJ)p&ZFj5պi̢det&qKg\j@#l/Iә0ъi8f錶LS3i4㏦@4HD!iH3ELh4"iM@%I\BFmt2Oj45h5q@861qp.\S3g5(jQ)oj|zzznjxrrrrmkt0jjjl*.A pWFs2WwPSwE]uuW4غS7]wϘ+fsrg9L4'd2\Fsrg9+⢮"".ꊸh4'WshN)ќLUyhN&ɝId2NE :@9L4'WƉcN+N'H'dNj@NF'PND ,dN='3v&z҆F 4Ggq1q@8jq@88*-h$2FHd"qt&#Ԉi"28*cQЈ`$eyO8q@#q1h\HLr%3F2P#dD!chgVYPes$,d"Cƨ3z@zF=MȝI"w&Te:54Eh iL$"c45M5M4E&Te M4'kMAuRS}&5g2P#LS)Z'M.2ɯ@:oeNc@5h;}}jџ5hNj/isBS]Ps}jJ?O__ M\\h+ [&)b2ZDQSMсZ\98.bht@3sLt@Ɯ@ٴWꬂL4퓉}2fڇFݙd'cjji2퓉}2Ѵ_'h4wF+Md8ѴO&;LdzF=P37M$C&+cSШ`4_ foj$SLPN'P=Cʹu(Rw}_L*Mqj/j~ꧩʡʋ*/rʡf*/jʛ-jr+עf*ʡj,j&VnfҾ^4ɘk&m2&6h&cjjjh6iw&YW'Mdl媉LhB&;dLiCMiCMi7Mo2M&+jߝ2F7h4$7# Hi2!4B*߷y34z*j5iL2F=Pno'xh2 Rd"t&  褩>sh8E@#EtF+)Q4RHIA(j5h(LE4()> U,@ j@ FP#zjhࡦo j.BͅSYvzV~;cy8r 5 5T33,uE 5K4MuB Ԕ+,@MSD555T/@MQSwM4K4s4}ɘkjjji2f_2f.I]Ds2hN&c*MĝqȸsSPSMuCMC92ќ]hN&cd93ɜLjd52hd92F8 Fs]c\M3TV8uFL8uYi2z*2z*S4Sd1iʸc'$hrLtL&5cU4#*U4We2yU'N^E*k8ykeߑF^Myu&-#4Wgjym4WgyuF˫4ז ՙD^I-L hy5nG32:ȫ3y5Me&ꌖWD^IeyuF˫WS-L"/2Z^@-/`$q~E즑hym48L$/2F^P#D"c5*ɫ3D"ɋ4Wgy1jy5ujL)2D4TgMA#M4ՙDSdFSPDTAq M!5MPF2.lD=d"1&MiR=Mdj4M~H3N:L:c$Ւ٨Ӊq8 ԉűQVDS#AS]T9T94-<]PS?F$+p?P|QWPSE]M[g̹EӨ+|e\5Es$ds 2ѹsnd@&Ae̹~QW,}uB&:A,3GQ'Y,3Yu&q1gM#!U&:㨌 GHHNHP#$RS-$Ԝq@zJ4Ւijt5:) 3933}ʂojjj򦺴zVeL=3TOPSPSP3CTOP3C5TVcS35uW]A]w+6)6)ؠؠؠؚbbbb+ꊭ.6)6)6)6)ؠؠؠؚbb冢Tqsbbbbbk j j j.6) b+hmn_ʄF2ɘkjjji@&ZB cjhЙd L@&ZB c*-!t&YB cjji@&I&ZB[B*W 1K;{]$cj-,:,,1q@8&dł4)-\K;@L 5i%5Fdz&!QԨh$!L2F=H=ICƨj5i9_N'hE3nEZ)L2F'H'd"t& hLNMƨi2z*cSШ`bN=EzF=Ez T/@rԉJrNS59Pu_,49PWE]iu 9PWE]=sQT/@m媅"2rwߑn9jsʡf*jY)nVhsnץ\AMAM5555T[QWlMuAMAMAMAM5555T[QWlPSlMuA3V})طkq=2ؚbbbbk j) b_4Z&hgt B_!cji@&ZX cjjjhЙdaL@&ZX c-,t&YX cjji@&Z&iW-BtF+-71 PA&ZnL@jt5:i,!*cSШ`X j&mj@ͤ 5:4Փ6LPQDQ7i7Փ6LP3iCMCͤTOPSPSPSM 56LE]BͤT(LPSP,(̖1ո^w55TOP3i5uW]A]wdٿ4;nk뮩sg3jF $sg3r& zn빩sg3L|dz2&sg &:L[)BLqMF3LMFK%Lfq^߰jIj$SIh!qFL8uYi2z*2z*S4SH=q)Sԩ2Z=MdV'E3 ~G3Z2MNf:L2bLg~HU&ُ8@#T&̚qY #Ɍ3Z@2F=MLr%3\j4HHdFHE3!u&HHd"!1BFBL"$2FHP#$RDHds!2ѹPe:υѹ#/h$/2:ȋWS)62'lD^d"yUȫWH^M#y1jϛ j5BjL$$2FHP#FHiIL$2F2H2I$CHj$5i*%Ԝ@#qTƉ3ZHd88DL"2FP\uXE )2F" F8ϸ0,A j@ FP#RMu755_|S]P]Mu75 եQYMMCMCM7E 5E 5 ME]BunT+,AMBu6ՅQYMM BM BrNSWwZ;nL4uW\>=0 f_2 hᆌƢɜL&ɸ-jtMg2LM&ɸz.ԝIfj2ʋ*/,ܐnDwe Fwg"F7'M&;dz:u&6PTo i}_YiL [FHSdFSMM4Eh j4U4TgM4E&)h$"c45M5M4E&HSqF4)h)2:hh j44hA2NSlI>QH$|4H^d9VS)YR!A&B" h&$B" L$$2FHHHID j5Bjf I2N2H2ђF!c$$C&Lgɐ1@d&!I2fӉ4PENv_˷ڧ]7?y98ryYf֟ٵo22t[^{MX]~nCueyI,>C|'y8_.>9T<{:=Mp[-;vZ9T}B:i: }[_*Pz}oXoi{2wnCs͖P?"$/y v4śo&iz/p>族?upng=Ϗܗ|}Dzi??z]~FuǧF{Zn_i~?ԓzSV~Zg?[oJ+>8.@yr^_]{N9_g| ) endstream endobj 41 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 44 0 obj << /Length 404 /Filter /FlateDecode >> stream xV;O0+<l/  Ux K|N]A#5'}wOvfzE}/zTڀ8M:UaMx#x!<$H3;qy$wƚb}?фZpY>:0bVUP.O4ʚ&("7]Lu׎cMɴ[&~s)|Ky&dO4^ &u%#2nϕ#~E~)7Nٮ;AY[ `Us[^,Ɍ0Xb].ˊk@n"> stream xڍT6 ҍt 1tt0 00 8t7()HJ4HwJw 9soZ3zgZ\2NVE'+/7@N]ֈÇ̬uAcf6 \Np1M@TwT`^~G?D'@sTlf9'g/^QQa?2 AvLJ` B\+ rtvBJs , @^ `;z^ΐ?38;9lƀAm ?>. w6// vXAlp?!6G@=&<AaNp??;ee<>\.>A^//(@Xy@п'Vn݇sOiaw. BlݔG,?BT;Uۑ Or¼b<(a ԝvTCȟ+_+adධXkA]vOEA-'?;<<.yX.;Y2>A!yaD{ᨼ!?ו鏥y?^A2 m$C1*9żav^q.4Evlg#)QEF38Y؇]Z,.g/} PU_k_zt+yV/nhoVOrmT0͜c9CEȓ`|(kN%o 7R=>J&Jc Z3 d9*mhgZ @/*ۿHQ+&Xk1fQeW LZahmݒyGMg B{\"R?'ImGl' SO$6Ro-t޺2f/ GRȧnOp:rShpE!!92!BVlfh Y  K 򇼙%y'*dBsӴ)z{ R 6R>ɸk!Rv)w?ױoj_3]5g34=ܤnj6-#} t,Rת(i*\mx䳥sLZ' 7,]QLd藜Nh?:i\OGn? {43L?:vTLN񮘊--HX"Jh>MPuq:yRk2{GEib\8L(GX`&mv#1] 6C8LQ4lO}{McJyk@EMj \XُI/ @FGed]ؤ ziSw O黥,Ae3%( m%E2ٞv|DH?@t"ZZ )l|WgƱ 00IĢBwj{uG/o 䍹*;S Tk+prr.f5wyIK鯂hA,B^Xll*6P$oq۳@G5n1㾂6j5:Ŏr LRFơ`T[_|-j'by߫?_+kv&S*ILo#j!SᇩL m~38.cS VHCb1%sr~d} D+쨢JY\$c.[ӠWHʤ)㒃鱘5-cd8tFGDZ+&W%:,z5.S0D ȭg%rWњcp?)2` ɕrwa-$O|]d٨r)Hԅ_}Yg|`iZS=4cP @`Ӛ2y$T@TLX.AmMm6ţ2~f˨UŲ ֭\|4=\o}?75d6mS8([×E4>q|-ٟtqˇ|LReJ$JmpT%O.|Δ'o6sߥW8 (ۋa7Uy+|HML&TTP0"q;I؋v-2452u*_",y ^kwI8@Cyn̓RmU/#Ha-RNTt/ITP.3{XsFg4v7jtZFC_?f'/ٙUm4˃־4k*j n:%^`dRMߪOᮈNsejVA>.PHvn"V>JuZ0R2Zi' 4ၚ͉4@'ih>{ oMv;ش<t0!aw{L0l)}N#"cvPcܡ5Ĺ9fn#B_+:@0ʅB݃=&}\t䗯LŚ `7z;=˚͕ހx桮W!2MTs⃁+Uo܀2\d̯c6fِNjL4s'RYT'N?T-0<&4T6OyV/aYZ5ؼV|商+}6 K@~ _¹@2!'-od:gM{!]v$:fq}rYR ڵS]ܟŪwlafS1)>"7_x^.m+mWL;\7@p&^:{hYŅ ]]iʣ]Lom!";L qIZڟ6+69ɱpʉkp<jE Ƙ4C$ro _15ܪ#w*j2gnPp#DƏ >'XN)H~?|Og i-<*Uz\´ju}!>"Hu!#D,OE;[hBn]GZ/ b0'^g|kY[2!I29|5%MEs &]gyu[^i ]@"/b6A|M'|²7֕fc>́^6E)5MD483:%CWezŽXuspc=H'x IcbӕrY1)/4MdwD7bkIV [fuGWV! NG:ΗqOjdkTLϐ=vfb[3Mf/O$3MĐ`:"hZbcg(fhH SHO_-AsÂ>f ? )1U~JBFv0NO6@6s܈ 2B_X~nk>fzߛmbIHxM G}ya'|(+0C-*>\jp?K:aēJƴ wMSKƇ7Ȯ9^Ǜg?Y}N9\ws~W+(:(V裖ռJ#/̻T%6 K_C!Bu:'}#Nz h ֩ _У> Y?N%![ pIåc9xaR{vq?STˀ#gMqTV%Tqɠ0+vxWR1D/]6 C' [3c7OWC)pEX댱j:G,@̶xqV۪%уʀqkLflށfOx]pmfie?"_KtpZ"2,u`&Q hWry)_(s"*2gZf*&:'n/Y=&G杵ǿ)(/ 00(CfoJ t)9DxXI &X)ou(sglbrJvi_|ɒ,D.'>v __eƦϩE5Mԃa-&lg)K aq,5A1ߡ9W?CbOEVXqvy{V AF^zM?$f/#,oaҦè]Ơ,J~k'piWES䟂S>Q ^L҈U|2AitOob7J(n^m۴(_e2R =9Zr{ej{E9mlғ~kZF#?ʌM!Qv ]D,tu* JPN1F[^`&[F7X΢PZ,A@glaeo~vBzj3{XRǕPh~^뒼pc\QZ̍jviF+A_Gj> ncο4h5»@/8 yq[М̹m=az.&ebzcJKIiƄpߦYI6.a42k"CVf_Jg*C&95l@TujzclʶNx'?rEhdZvd iyjd!3Gß[JCžHt~=^c8FMd)V-h$h ofnGG5oҮ['qT%roll):?8(9Y=&FPZ'& ͦ)L.* LTC~ {GcE@RSZ _s*P|WVӔ\"'s"5%(+9҇坏cQjXkg03qL7\֨|dɀ#_ѲQ2'sǰf5, Wz4~jV] 4O|r֥^P?"$ ;̶=۴Xsݷ^7кHQͅW#-2Aױ ;Gw Vq_-H &uq)Wumlr=K' *UףF>ˠS%t?DҒsnM%E>oDkȊ]c૽}sA*lLw f'q7``vHo"s."A Y|um9derP{ew=a,t\q> [@t>벼_ LƍE&6(Q}[R]wԌAem_uK!ʮ,/ŋ g[vMt%C9KPن`1aQ\Й=3g5fLϠ4SO4eS6׍ѴI0bsz6H#႕O ؞G\MrA җ6Pf]6A9,'r,[l g.Ex/˻*GBy*> Z*Y87/,tٷ '"cWV@tqn$DŽ!#WrQ)w~ *y$RUR̓*;-n)AI5rMD֯}9PPNZJ~(Pg5T8/U^ bRq6Grcg맂hl5I_xٜ4rE)|ݧ^Lޕ_-|-,VU' 7J|{y夦%ZG.$5KGs/KiT ǏM@^ H_}*'h6 PK}g[UH`i%~(K_:zø8Y6#X s4Ei%Fy',$'F *ݭT 4Zۂy_nAOqV]n)Qč_X-"+3d)Oކ,+X +,mT*h[QY;gLg'DLT<yަfƼc'q@0"IbowщX鏅&XS lԘrUfbsէ}{2թr[vҫs3{"Ov%xw6(8W=fZ)\@1'X^ gy"fb1@~fgبg{c`8O~{ISy5wjœ߹'Γg$AU<ǚmKPO$<8 #;a￝X~[sR/'{&?*a|`^fĩwk I êSл[3J0ҧ3c&ʄRcw )w*}=2ij/p/X%/*Îx~PY_Pb {V 0.T Q#5a )i]P9^\uV~*5eۻN08 LG`,H KWj'4:"ډ8բynTF Kg#/g[x$]0~ң\X4va'Ǭr,\H*hkY!7:$NMjRkUZSiWv~|Dx1:wR{%~x;aO>֪"g)>wߙ߮}59#@ܬP׿H \rFEy +l(&A鷺W'z ;%ݦs&X{n~L%=D /$(2%QZ/㟜i9Pl ?wM/i1iFXovZugHWC["["Ft9#nȯ %:cn]G'""DPO}qP[W _XgL4c 6K#昩a2L!"T ޛ*mHz*\ĎZ)EÐ_Tb^37`[=t,]{zZ!C,=F٭#ք&k~sjƧ ۥZ=D%T$¿_`F GZh5j$]'ݪ_,CBgʶc_f 9>&Wh(nz|윔10Hnl W/'~MRId Spv6_7,-+29"B I尻Es^Ef!n6'&XA{?&WvYG~=)xD¹olZJkq7\srJ?bǷuSVkde͟Ncp%RMy`]3șy2O#UBX%gjX.J9-9P(N凲XKUWdjR6L8ߴ^gh"Ħ2Rm;K&Azc+u_a\}_BZk%w՟)zE8Mr=D[ךlAi$QOޞw|Ckqn~tm"Y Ģ%B`yeWp\]/M\j"!U}Xgs,R tILAF*W71&K F~—_3O)TZKOWkr#YKT]]6Dq1É7E[_ 6aZ}BW?f=@M{F1Oح.sw Kyǐ́)fꛂ|A7sߴe =ϊv"n0=wy^DED f4;41_ss8^f㲷ه III̢`]! 㽝L-UDy zr&K. Khn]QObzJ;u/1ml(]s+<2B_\,p#c%7*vdD#Ec$3F1T6s:*{qb"ʇʅAr.S;Ŕ_R7No%GD&k0/xAMݻd(O8Y_|]Yjdi>Yxݲ_ټ 3sOhbZPuVFtWKwRМKsJh2?z?tq|WZ |5Ai͸Lx=beEUU._!.6^[&x=B endstream endobj 60 0 obj << /Length1 1413 /Length2 6118 /Length3 0 /Length 7081 /Filter /FlateDecode >> stream xڍtT]6 RH!Jw0 0 C CH#%"t)J"- H*)!J>>>}kֺ>>{s]7' !B"5] @DDLHDD'4 |p0&Bu0=_P JɊDEDd&u +A|8^(y߯0/(##%; A@ @txy`(G yW$KVX_#G( HW8~ yB&D 0qÝ p!0_`"E9Pr~'`\P@_SG`N M>9~h@7z!}|fU5`NjpOO C?u(9wuaWP1|MaPo_M1 !"#*%) x `W_ A h/f H0rGAH/$?WD@ F!.Pѿ߄!o Xכœ0Կ鿯XXB@UU8@PTFRHIY$kÜ9{#?FϿn#"!yz*#M_8_yB=P7E@~cS!yWoT _ ф@ H_+nkPuED 1 s#?R;2$@PD7|7t2@XGޤn 8DTZ ~1EDBE n[#7z$&"j#[NUW>sg gdiU#g4x^7c>1l>l4L45LxSIDy5;, g4A!ՉV@]ϫ'V W$_L4M {1Y3Nώd& 5vx25D[b%hѤrQ; V؇GЪk&ѥ%sEclI^ZJG&aHwln Z}ǠPմ-UH G38\XMr5]L\6&hrR< Z!$b=%QϤzrhe| lU A(P~ŒM/nū=I`S> _?gݤ /O\&M/v+UJzX r8m9 IyZi WBGnJOR5u OBOf )̯[X a{SmBw$ znb}9cɎg{Wf?|QRb3@$WZE'4#۩g픅a5=sE*i#.-NCX# z^JQ7/m3`fcgTLnc4wk̢tSKCBV+xN֠%ق-a ZżNpvFVYTl4&FF(%g p"?x{̱H~E &&E|:yLJ:L*1&Wrm*x؎l=˾~]Q$Ŷ#OG}·V4'ʥJϨ6(6Nj%dW[݋b5aΝ&d-.:E*m([Q~zدǡSɍi#3+ʠ+ܷЊ-e=\@U *-_g~#<-+汛Iѵ5m}i\jݶ88Ο!FMV[S)-)g:u^;U츘L9ԧ.6/'"o?껷6xtnK+۷Y>-;ڳF'\})PX2'RC?KΪ$Yf4(9~ړ%> /4]Ǭ,]%c]hO{6uo%y|65DYm*ԿWBkdՋa[&V2Tr G<""J՘*gf;CxI !!{GIsYsXT_l26 5v/ZggJz5p.KT9͹eM . #z.h۪Oe.|xhH]+/LWOC]s 1a~韕a39X-+? oTWF=lu+"+| H^;r ~G͞?Ͷ겔AN/6Do0 WݗpTR$'СQ9ߦ&ҫ:ȭ*joԭ4eCצ2}.tqp|T:l (SwC2Ŭ~S㮬.܈Tkm#JPob]؄w1'-/l˒٠}EmUd5VOH3c*əoB} ;AKӊ#߶yMBڿ=c^*N $MH.3r'pHPƄjL u#%9dc2+=RSyf[p~~_<yGCKfHv@W ;ofz鹣,'h)>ePR&*ڶ%6"ʁ5m\`csrÒh4.@Qy+CxұO=ƅw՜FA6$|z{!dehQ.\g<2+#(I_Y8v1kқİږ" rs&ѽF/mb2jgpx@wPuO \# YqP LPW'j<<˺Hg>^!}0IbS[l݂ KRơ;4Pou0ȦiQ[.\FUmna ^n$`/4Op& Ҥ>]_姃cB2݆bA2Jc}熙< -D"m ۦ:BWIf^O7<..$2.iԏ%T$,%P ֘ {8Q:1HK3%(јșwdl§\ x;FN[AyP T;V${NaMoEطWI|r|)uuQ ҿxF`yиn/p4Eh9yJMVuiƀʮ)&w S~P oRL@L=/ JREժAc[T|}+Mzm^o~sZB?9 eX2G·~ *8#~UT׸5ufwl-(&W6sÙϑWG. N2,a jmLIX qbeopnAIFn'QQ6Ǚ(?Yf mYoIuz44jL֖i?\O7-Ux{jiӎJR%hŠQIdG]4'PP]g_ڀf}?37)BS&gSdERptR{P52V&+ڴ0l[@Si99nmwn$fGDD<҃Zg5B=c2ZRjGe*BƱG:E³SzVBTcp8evVꥈK:$n1Y.w 1#וpN&FG r TևƯCWOr"S;XE,h9m_̙7"ux5laq-hIj|Wϛa2=a<"){w,=}{_b, jPT~5s[di܆Luc8 tx8th9nY.v+VD*༉bh6Sޜф!'ϧ԰v(Yh gkD71\6kwaIS[ToM8rrs&—[eB?p_;`BEi7͊<} BBsMzmtRa{>&ꝛ]5ѷ*_S2MJ}"M,PNZ|E"8Y؞4KpaX=^Ƥl_3tIrJ4`G-Pj)\28YC󀆪xEV!H.۲ɇr8${t+L#TtW/]ڎNadlˆ ӄXwy{\_:u7^Ml-UӋਔm7BOSh/F=IdV42`nKSASYEyeefF~qXˀ8|U.fމػnq9FϚRԗqEi^{|6_hB3s1]wsP!-;/*>uMz%5^c}~.Sj/TWԈ j>Ny-rh㈐v^*Yr"Qh:T=nihONCCiCkY;{91ͨ~dM8-H$U _k]{-=z'B(m+nKL6ĭ];c"w涄a4.}JCxCy$d6N}~ \I4>>/ : ư_ (u) $J;^bpsZ05c$dlCQZ ~&qo[=Ȩy伏1-ɢ9G+ZIOXEZc[ttw3||aZ [ryLo$ ƲOE"t䌻wlNHb =kD5diŇŧJwE 1F_*_-jRy+* PkϥUM/R "XRL~2sdHϵK8>yq0i}ҌWp5);ݱ'~)Kjv b_I- |c$vjv1EjH]*:n [*%6cġe.Tw$ggKn\ZSH[7 ,ZWkwfx@8XO W*u 9KagP5> w7Ƙi7Fo,sYȱ~A n>#=1.]ydMI)u7XF=ԬU]1Q[\Se`HdhLcO/J5,5j4R CRU;=v5-Js@WQG|6=U7oI{E@w{"e!vh/+Kc\bav=xWob~`t{  Al199) Ebg5}uI\.be$c;&1{YdO&=-Jڣ 5/ZP6zLQΜkS8{bn} )mE328QY}b,"ΠЁTn <^1j8wڴrTeV> stream xڍT64"͠ "9  5ݩ "!))!(t|{{oZ;}ʬk-g (\Q|<@q P3_zVc Bu Q Pww Dā@?(/GBx0WUF@P}9|bb"\r. rhP`3BP]zzz\<04rC2@+`CyZ C\wW[` ЁC\rˁ x߉A`0r& v9#ax A;)PƇ#p uw1+*\\ ($}޼7/jk;QS"GgA"Bv7[ vhEy@(;? -l`bu%';Z KF@3+eKNmy#zoSn&-{&ę;)ggHZ0^3"0tbHel XI|Nd,SQo)դ3j4:~\%!t-<*C;dAg5Y/CwLG jㅗĿ J=v}mT(dwm,si:Z0v8X\0(3EѶLX)gH,ʯ Ns=+52عn*YyE`=I'[WzB˱o9o=|ڄL4ӡPՂXX[S2"hf1o㷁%>7/::ܪc\c}V_\~hg*xU{ZhJ+}]̒L;aq8uKOv #ĔuS-C'H]E8r/4I9%U:j8}c\+u]Gb=(Ro0t;9!]n帵 cn2`<otGRLfVL60?鍋/C6/4{C-㳪P2bN>\ ?R@nO1GS s{Ll8KjƊYxhUh*"[]ω㗞fiʑ0_F '$8rY$gn ZP/\]<#CgX?*^徉U4c0T:v}rEN$]t]y ;.Se6>[mbn |YdXBEHk҃X#saFOc}=An6|qjcl2Βص6Ip?|jubA%Z 9Hpi81ҵ0*S򜯍ốv;܈ +}4'wٞwu =[zry߸,-L1`Xy=*Nɘi= =ďjb簾BVڜ{2HС*lҿ|s"&B@ir\dcejh)k׽_8Šrp|7_*Ah軖~Bm{v@P[ F<=}]|_qJ  aRŜ-/Nz6(m<'umS)\[G9kH׵u쯾I 1)mFe%{0 lf1/_$^C`Dlo: K6igsxě\V-trdE˚^ >78RI+M;1?Lh:1dQsЊt4TtBa/F,Yt>Uli*d#xx0%&+2̫@3{]&"{zȈkaLwa: 8/-J`}|57St㫷U.1KVr7gMuqC]Ͱ*?~D>]Hur-۶C[zV5DrY|4~ +5~¤]rg⼄0'b3|$2$9r A?-A_O73*2ms I`s`1@quv ]U!cg=o&_j.P/(} g-7pORP)Ide8 K8e h3 ˉZ!K8RI#٥9~XLitJ?_sKm(*lv> ċ\Vډ9Rr;a~JV?xg>>+}#y a.7>]UkIa>nmL )Љ\K9K͒,tr9 9agTHl M2W1d֛J⼠5Ư%TI$/־mT4 nJW@hd 0˟m_-{"M#H쬛>3 O`kV#`D?ơ(7a~Ou o,MzFqb(fՎ&ZIsvXKKp.h/~%S^`WʾpSW}φ &8Y;`rW:NcUwj\qdxٴ|%`2m0 6 X\o _UC)HN?uvdX҆ildJ'|g? -2)Y2Ii,(]lj?9*B㳘z:0vp iĴ.D+SD`p= "SgRYW'G#IQTa_nil06 }Fv56? $9?A&'L)R;َ*U!)Rv"VϜC#6EU/ALpc@w+zɽq7lAoņe Iۂz4/OQ":_1U5\;W:Ao) ڂM2J~N=YuzXp,kPxNq{jMKϕ:a$(4~`Qs]Grץmd)8ن,[jZ1٢TZ ~5͝ iq0qPDcNCЗ[6iw ?a"V %1@"XNGe_eƀO@hwylS1J3Rt1o|jCcr ?]Hʫ'f+>'Փ:br#/ W-IbMZ~!(?&*.mCmFYbλ.&%Ān<9ԬWH*{ G=P`PNm[wS!]0-aɓ*Nqs=cj>NPkyOBO񵡶N&p 7oIU/Bc\ؿT)kL[}YP̟.3k&1wncR$l|ʆJ?^,ҳix*\{/y_2)HIx)+xs5dEka<+qG5Õ7JnL?&)vq!6YO f-%mtIʓg]ѝ;R-xl#"oD#eNw:eTAUw!KvǸ[ N*)?T,x2Htn>iEJybT M`dJP =.뙯 ,"U Lb _Z|#lX6g`p#D b]LU*iSBꚗ&kP&:?ytX?BSX1l/Big2 12 5irQk[9-Ұ!D1s&nb۞X]ܨi+q7HJ"ۯd8֧mX'`A[Dk:oz >^s*cаR/P!lYIa8Χj9' Y{7pKp]O =wh:hSr-: Y7д`uZeiRXr59 ̨VJOͧx2+ FP?mEqkw]r3M7&4χMvW/7s]vD݌y|On-_(,')fy4Ǭ(^CʁyDr=8J3R-9x Bċ}MNX+Iσ!Đ<ԋp7i|O},+ ឃJغQ!NG,]$k>b;bp D1Z!͗ՅGPG#6:ZxT3P7NyMM$"O'{9 Y,MWk ~9l[)2QWg8Fxtc.\ W5;6yU(Ҷ!&jE*h:{[mzWh|t>ez^-}͔d>A̲Q{w/QfeS>ٙO򼗥3 v?^=,eUFajNRP Vzo>{K)uo#78BK*ЭN]fd~bVqcL#GmxY S lH%(]~.6.$NdolWfw 7j~UK|yk_ i(~"1P۩eg,KXT^HK#>a{","mGכKsG^]~nab.ddsga5<}F.2&s6>`0eVa8J %}E.2ni(^怚&*yڮ=[bWvg初u*NgTy=6-\^[|k%kBV6mg-CLN[Zj֣`n'Ҳsc16rD4^?O/.~sB qQmEv]&ָ;4PdtS\[9{fg[u^bl`_esY *J1\GkL؉-aQƬmzsP5r`/g" ڭsvͩƄ%_$Ž8'm=޻6qd+98$ endstream endobj 64 0 obj << /Length1 1394 /Length2 6000 /Length3 0 /Length 6951 /Filter /FlateDecode >> stream xڍuT6 RJ4RFH %c 6 ]"  )A nDBx~9{v l65-EEH`hG~G$ /}$T@h,P?<$t m qv0 W n9(,#$.rB "<w 0 H7-j$\#( ;`CC(l+` 5oo? +#ApO`stմh~nrD! 7dPSFœ(AB?`Yn{Q$?S!!`{ ܧp;o1 PHCqa)IQ) C~60t ;z;#v5 0;rHW"00`IuC~G<X??y2w늅tM5T2-  "I`'Wnf{Pw1?Lc|*ODjܿGsR6+CM :wT A nPLPXRy@l`h07m~ !PlŰ*?žFPXnPXɡ]OտP?'".! Oc-q7+S[/v46`@hq3짏_uH$/B`m8L!+|7("Bw?g1Y6fЦ=kn{7V5{VcWp?{0$)!p#)ډl }VwNĻߡ)V|Ҭ^YuIւhYnSL d4vMS8 wo#.q)Ue{T+]dmQyۨS߿mf@G{?/a₃!#OIGޒZE'wI%gfm+7f07L{2y}oF`w%H`3Au;*^wu`GVWAJk1lx2^NƵ%斚] ЎgKӞd{eE2M(„څ!:(qV !}I74Me/K&KÃvKnT{ vGo~Oj2:V X n*>֌4&JՈq>j:|GR34b8)Ƕk&ʨاҕj74^a)w;z6{QVڈ/SYtKNy`eg~H[3I֢'ƛD~Qx-[MU/4TɲFsIr>UOݓתa<%g ~tRéLZԼ>LwĊ0A;qS/a`c\~R>le0أt'08&< JYPFU.@B7R$tT;>@\%a3hgiBt J2VhU.NL[ڞ cbPsaԷT|5^O}L3h#)!>Z] cG)E6U+y"Gi{_;`;ֻA܊N)E#bCk\^h|{:]9{LiS!`lIepU{ )Tz(b8);Lm :&ꠤR5ȎPJKJ B#Wqkwun'td:9d\ЄNNƤj}_&&t 'vW_2LXƼNP7u@,-Cb#zD'zhQi˥)`?VyGЮJ5kFTqJE#wiKϢ '<7&(2AC;7GiĽtWb~I-'}aE#MJƕc/=52{媻PyUmMlOy^ O:NDؐ I[-EXFav? R[kÿ%{jiXB@<{s8% \,F/ kA7"^]^$b4٩&^c0*P)3%W4xjsP^{Ba<[KSDTI|%5G7ܩ~asƩIXH\~xWP[k՘u23sqݼv9r%(J^WSgCL\Pӷi8!x٣8oJi"s`hÙ,PàᣦpCs6h Mh47B>@{:_S~ݻWmsnZZ#U $܂Q M(|{Y8^}(›핍~_jD-u-0{pRvK,SC*gUOk;!< dsc)[/-ɻoѳ}c1cAYLWhw7<7` Iw}NYݠvx!Z2qק[fS8k^Ѭ2wg1'哥Ό>dߣ9(wRكU+xI3_sJʁr1b`=ED5oB㤖'U፲Tk2q%Ώqȵݳ))%3[=Cl틨ɕ"ţ ,)C,5=ۺ x x3W4n`ښq}N176(@@bU9CnGH*NMS;S2½bkHm%KkVK^WRGM<`Q 7|7(#i6{sҠY}u KQr{$5tp\q^ʼnNm>Ԛ&ׇ1nN VXAɑ.#{{}Hwg`Ш`)$S_Bk#GBƗWoO&N>.ͨx NPȻ"gs'V{:ˀR3EXHuN1=N幆BmEC^8 %CDhphqS^VdX].զr1cPR׬`Lܲ4gp0}Mc_wJ^ %;a+ĝo<@\z{UfYR+'qހ~Z|/%fܣ..%z-RqC 6񑀳 | 6 n孪J Hi}Yꥨ9{CBԟ~TrG(L NGU8"!Y:n[& -DKOĖԆZ& ffKaz157n݂z]?x]OF7Gry6grļ7fK:e|DF} պt.ArO2[2X=_3A@]rJ`FJ)aE(2{ uKzVUAS|ws쾊rt0?oD{lyfs[#-;+&mmӼ+,>g &/QNV^)-oaE㒬VYTW&[kJױ <258\*[{ |& wJ2;SUQ|AorE/WA?c0XiW'cEV>KlI{|,s1; 1yJaY@"yžнVx C~@ETdd[aTzRMGkw4 "0 N׸hV)=U.}\g~S|.rm^oV1vO+C\N, /_!1$|: "V-D.sOr-r /FzW9#Q*d^ ӫ윭86=y=: cLqJHQ<;-U;{E{p!g{<^~,?4Iv3~q*\TzϛB-'O>yX#3BnDE[Kþ9zoi8OTkC^RRO[ԁut5/6=3;ze*lLAѩ]~Ķ|ytcsM.9R2%A7F2)Zjq1O?>ٳx3w:\<^dcş1V@B-m"6u>w~((m;#+}^n){PAi^Yӵu)/.f "W!o D>g=Q ;8گI#cr4쮬 F̵d{>K٥`GKرpP͈GpTDˮO{qfcTtƆIi4+*0sau#ͪfף`9b$", NsW!ڵU0BMs-VYzcL`A6v }tVb롔~3LT ÈuI{fJW^0=u# endstream endobj 66 0 obj << /Length1 1518 /Length2 8355 /Length3 0 /Length 9375 /Filter /FlateDecode >> stream xڍT[6L "!%Cww7=  1")%҈4ćzsZ߷fgu׾{PiHX8e0VvA<F eF;@ m@cjp r 8,A,ʬ(Fbe {?K=! ; avP2f h: `J [`ll@{Vg+Qf;f _*@{fh4-k% < 01jv?PKn?%b*;;,) U&mHC< x+q?C W| գY8Yٹ!.#?v_f\ ޖ,v=pyq`?ӿ,~'/ D{GxP oeX#g3گk~۫_?&lZ ߈=>-<6A^A>?Qxl_@Ώk @BA65AmWU$,GWz,y&~ix̌%>YNI/g[u,_.g/I)簚>&K,tS#|Tª_5]MB;-n,BpJGWUQ>|Hk眐.{>6p3(7 ()v6Q[s]/J[3!8KuItc:-@$i"0A*}Jp*ħ:|26;5(*8N [~1la/py|[\p)}0iI=7W ;2ҜuZXgʇ,m{ѷ3>P#jQdpyjQ_=!X8IsedS'pDdTn#hXgŬmNhhk0OTxX?>Eщځ)6͑rS.Q8څPcmuRߝW0gY]߅)ZLV[:nԚz5z堓N2 i \#1GYͮJBt˜z"s`!Rl4D)<'|TG/#pLxCi'z6bU ?Z Uc`,Y{RhxYm. H%wD/Wϼ%aȉJ 9 Ms9- D/;s*9y)\^1m6";3IcA|&^;&n igHbXl1M0bz=r< :Ŋ]TIVb~[1`8!bHO9'ؖ}R@gDbk-Kh/_aLc#P3˜7g&ATPZNRԌ|wWč:yM>ʷdTmBHOjj$^7]s&LOmEQ UUVpI evEyusF9Y.ӅȂѰܛ”hl*-a̩Bǒj"#f%ؿ`si ^lADEj>WsSg!pP>`_-ѳ5seGd'6b`0)ks|e (~0<hKpU ̓}OiR1o:V3j8rWUF@(rgOY"ؤ,;#%p?bN9Ov^XOfkb&"M9_I[ms^F߭s7jD&RNcxQ{tVq%0QI,`kfA*\<ܢ޿]֭%WΧNf@"ۗx#x:wQKl15[lD'2?Xɩ4؃ t.7O %k>簌Ua-~R  Eo@[ Ti7DV\A6/UR^ w %ke.m%f|+RDw-=1$abQ{FށҲ K˼Snog\C  "b5c}6fܓI&âhL] /e-'i:j#JvEZ(GnU>;; 8-c;IFU4^o^W[.m:\&biݾ59?C:x 1%qb)Vt&nU]MQB7$TM%dӒMG,̵XR.+`$]+aެ:~̴Tl["&Fomx 츟ax k4-K Z- AӾnvTt'"k"1V;$s a\`}%ѱ06O"KcoWN&f75=p;oj3}θNgw8JyhH_V`*#UN?bQ?VS5cJ/V-Ol2oC1@YE?֫)qn/%Mi.j["fzy?҇RJRҷ!j+R=[c'7awYFjZF>t-<ߞ2cG+x]Ȥ.9y_NP(p=>l'?/7݈ϺhR] 8yJ z7qNrǗG^Z;zfOїCvxA5l)7a] Ժkպ$4%[aj;DkK~Zr{T`+@;uQ[ù7|;g̻(Cgvyf[=$Hv ٺُiMs} j+(գh?;1ś5JLm! GB \cTRi,͘f0[^f{+K3h0_mѰW`k}5QW^Erz2̠tĨ1S͎F(Qo甼PIБVKTbk-MbH5o*5bsMN״zgD.g䖬Z_Y ZFxMײ4F/|hާԃD.#}iGaᘏ-+>iSCy[CCOЛgdR=iw*T2[ ~B  /u^ϙv a2f@~?6b@U\'aPMh h(6~)Yӭ➆D1E[`'׷厘[ }6OUz]Ӛ~dWP(( 'ڬ!p3-ULZ'X,B}S3a>;'5k7[ԞdKL N?>o'Q>g)'Ͻuo]q&c@"%Üwr0Lld:asfܮ3k-’@k:hRE.h=.V ٩eC 3O9OY8R@~m 򈤶4xwdn :_(nv명_bnUitRmTi[;mhv&׭ [BTEc8)E*3W˅6}ldx0dI %mұ_Ku(.P3rܵ,`sO]e$Jyſ8blћzGϢ4,+7xD}Ief㨏"=E^Hel`Yݰ9iϹ:x87liMO'墟Ab%SNe?Y ȐG3j0Rπn1{CY>Q"(糓=vXMSѮ͖+gc0AjZ#-m=aJ.zX؃MNb^5b )E~y}=?;Aԕf|*ߎR݁,{.\Sl;w1gꂹYd_7JPGa?_wksCiWPϏy)^(xMu\Mg\ è,MI!`^U9-SѨ+;no+c/<%$<x0{bõAʕ9Bs*|D9Xl\AeడXetEORH -^<}T>=H!7SKבmv5SbK ͇ yBQuʉمpJs^z Z:1 # O)n.3odѨNE0U({{S3R5[d#Ю]姌c׼[$Ḽ_Em,5 kuW=/\¬ÙFu$G().M h;b`%zkPpA>vi IApcN J!>([dNAbFrJ5% s@^}|xT/ RرܜE.4t? 옙*UZg*݊^W}{MFPqae/0PFlhһ{̏BBx8 KԂXmv.9g/bH@eU$}dlpE^ٓ]I:qOf 8*F65}Χ%iC~V ZWW/9`xbnwQi/i{x4RgV%j͐9Z)MXTeSBO&’>)15T=(wÝG9Jw?8nw{\.mLF }"v&O;EJii34HJ+3E,ͱpf[ೳ Ov~IíNM'|h [tL8Qa4YǤ%Fo跞~z;觃0q`>]qh,3YLiNyn~5l$R2hA`XF'5?i?mL,ڧE c_NRe|AOSi5]T5t!j5w)2o_ʞ"EQ\MlJ}ZSU=hH}nL*v04>>},|x[Ɏ=u}1cfZࡲ& 6m)ζ_a:oUe`\u;}+ذ3×Uj;L"[ui(ֈ9?rS#}&&|ȞV͍\ъrB͑;Q@ԣqtΩΙoKnN3Ht])ùUN d2{l/F[=fߦA%tm&"2E$zԔ=)y3K 0fZ_;wkjꀊ"f Bw}"7w/nh;`Y&8MBki3(T=m4Xc'l J(ػf~q鎖sS5 &*}%Z,ښ-d '@2T"b<·'`!=)h|dpK4#T7[u73F$2}] h\BP%˳ٷܙ$ʔ9(2T Zc^,0C!D"A\]΄DskHWI-ہNFs. eqG?h+#+]Sɤ -Pcމ>RT2_Šs- u VᦋGF jkC0~TPg%It]_<bZAL>35me g#auOhS*m;"{~Ԋ 6aǁK4 YIWa++djhT}L+Bͳ. Tawת?"U >hRGo!o{$6شf0~; 7MԌ5 GlWq?b# *; lA&5Z7q#=Њ@ bgkA;ߗ~ ŇqifZHܟOV1[Tӿmѹ[ wfn/ж_p&_2tp|Kłը3y 3w08;lrξxhA]8OHY[K "kZh14vUqE{[@fҍ'G|3 )t8H4Sd g.i]qDsd)T.Q4Rv*XQ ÌհB1 0LH`l-ME5 =fcF@@/d B_^{NS1]͋~tj5fH”XWt_$ۆۄMzh" )&Flu \s.ZsVl u6jEQxPs$sd@Q ̊nQ&~]bBEb-V]B+MqʮC>mM!h̦Z鍻G{b:T,zDujHfRWiى.|.DqYb=,P0 H1Mx\BY5q'٤j [Xk:1I*n y|,2]jbhw\FîZxw<ѕk7OW? ,*b2m`-qQq5Ex:gԒ-pm|p5R'~ypmpҢT]M=":#9A/N*#ywDe^\ѧR !ᇤeŊ}ofSrqvސƷN0UK>u*xWI^]8c^?^wZ6\+~P ~#qB\.#J 0BM" H2c RﲁGBqωi/XeHǟxKY(SfhY1pSV#skF Q!- endstream endobj 68 0 obj << /Length1 1401 /Length2 6312 /Length3 0 /Length 7276 /Filter /FlateDecode >> stream xڍt4D$6^g0z{6 c3z% HIDA['{׺wZ|{gww?ʤ+k)^0H * @ "VV8&b5(ȻàO4QH" @.Pz|5&bG1c Dx~d]`p[( 8\'B}-G IG UˋC;HqG s~ ЂLG 0pQ/; u 0$ၴU5ڮ0|;jkrq"}H=h+ia1<(@PO(~w(ub|h8׈`oYi'rq!1h_)akYg$ װ# aoyTB.`$*"(*`޶~ \Q{0= G䇆zw"vp[ G: cc<a~f ~Lu L+ `0 rU(]=eϿ N?i8rsd};F_U_,<a# u#|`Pcj.U@JE:`  Jpoc3#a:(4W +0[g%U0ه"eKxaC]=ւXSχDa){;ѯ5A?) wm[wwlف_o`0[ DƓjYZ/ޕO'& -ob:Ggͨ)M,N'kk}xmN\]K;c }g* ^ށCCB(mСJǩ$/;J"jZM-եYČ~,at@s\Cƚ?N`Vl:%J"[%oo V Ya+Jt)T߾)AgL)O_3I[>?6)cwjߊQAiPѴ1Hh?;9%w#T □,#NJҽ>YJ[3^>\e^;-28M;p/)\p,@\X#mǚF<)/*gNkG~<"OXc ݯe '҈)NOrDΔUiE't#8|pG}J͒ W Ӡ~;l!If # /rcÔ;/X,5|1:}+ Dt3n#yio_ɓ?90B0ͬ?=:/҂˨7f녉*8}??uJڦI;pNDG+%8IYtN#ϊxRjTe߆] Venj=lRkg_~=P)|ޓXl Q'g Lߢ+҄4=9gz :kR `ߓ@L]o|k锞u>{CnȊ;s4"c5(M3Ll z;Qnՠ} 1lQImhQݺ6I:s>HN0ꥦɕN[Nͭ7v7zc|9MfuQ8N2조̒IÛ൷nOJwԃ5sqs woWpsAs"p5۾7i_IQUYxufuN׬jGUx^ vɏVJ&.i*-t|.[}ⳟw:Ͼ, 뾡fgMJ9g ܙl>j9"U+jV~1={jgxClg 7|g9V+[:-۬BB蹫ĥTu ]-(~0xYٚ[/kh $8F+=TS7曑e2 }rEFDvurLB`atpX1oA=y<=hʟ<աokT87GC'67h};5=Ct8:ʋ&S=˯js[[>@PWR 3cT5@i#ӷن͟UtҐGeJӖR{CeխI1r:SGI9ɴ %eyY~3Jm~INUrH`#XіB=W2|r9׋bCCz ´K;~҆X&iu. ϧfdJ[rh''ZdQ9yȇv'8tDWhm.غСgSGOL}dOܓM8J[h0eIļd[qFvL2,>ΧuMWc*#"V1ߧ噅<dK)tbblFuV#6Q8qܺIs4=zw9֩pUV1Q^Xo W3 #YܰIN I6rq 6!3wBK2d6m㙴Ri .x`K%FksD sb#Bkʞ)"n~g||]]:~wsfm?,?j5zQ X8g5S~Q&9xy wu~_ G &nS&ޅBT۬~T Sw0\Od7ل\~vz CAt~ sؿ`]3uypF~RWbѶ43\ ׿lXW0vd<]wv!Sq>f"o"hgW S8VJj%:u#I#gt%syX^rY*.'zL{ByKwʍO5L8EyvԭtɂmOlEBw&xwIp/\@dM@+o,f^ R)k̿r1Kڱ#ۖJkZמ `"]rdkR7TX1ApU?N!c8hQ`U=Ot)w2_#lꆜ`e䤞Vah"ASwvcU'ߓԳ#ݝ].9Jb y}/v* I^̬\F CbWR`/>ZULr~Ơ~>7دtm9e`(Q=f}V$@KHO gEJƙ.VZQݻs<Ѱ? $jWH0eAk[V:5f_3ţw@&]~Q|'~ge,l_{'Nmj5)^HưGLFn߆.0?Dm\/0,,SZ Fn+ōS: VQ`S5sDՀ |vX fhp#o2hJ{bKv?u'g`+<?^I8(5!Lvؠ73*VF{swMĆlmb~ jŗWm#2ŬhUskkYxST~X >Q4~}g9H䯡h'X⎹{G,mz`'8P< $ī5Jh;8C1qH^Г2΅5tTJ/W"!_eKO]_ld=*OeGh {Gd])=Ī .R~9.!}w'ϒ˩;Ka4NV[c_P&C `GЩx6z*~lLyr}$~t?k,j3OIm4QOf bBmKh&,@NGF0\Q5aqL*|o$z`hO쐜"ޏt|Fߗ-(daN}G5BŭD- lrG%^%hw 5% mȡ"$ OX)ׄZyZ٥,w- |q~yGH| KwVޞ PH4BPR2M.V#uI[tUej!і{]#P1M1j2*qX;沝qPw< "gGh೷k߮V 9!Wt1.:טM72GYrǦFGHUZ A76طNL,0,2 ;}!M,,}H[G(? xs$֧T^ڗ! 5q&S}XҌ(D&ōpwt~<)ހ@D+Er-YpE2[Li;v—vi3S? 3{\CUlYBw8d?Wu٨fFiy\$G)?Ed_F*L}t䓜08kXs .d5`2 㻡vZ_?rĖ t*zf-- }oqjU")tR2QHfh"M2e?,p%Or^ VC14İGtfZy(j2>CjR!CeVcbS8=|߶tkY˭K=i*>@kxq[*l&WNy_ՇuH%}Wmuc~&LwRS}r +R|nNNE!W~bE?GAgä&%> ?ʬ.] m&,RLW=&i̓d%~}ϙMљ +"U{=EXϼ_;dϔ&V"ε[Z-+FGZ!H߼*`n*w9:Jl?|_QW7)g[s0홂zlCYHqZ;|,g]Y}jAi}I`$N;>-@pg)[O(1NlpLfpǗ uɁζ>KY0g1C•pw[nkۖr y݄ĉA ?u>fKy|2u"$o.L RŸmp2䪛:\nc5p<gm-ҙK_R8-zq n"՝ F/Aە/ɪ#1DkQ IWRc=.Eg _S!<2|G&sQu@B4 ;k&r: ;^,Ufh[zSIa ;eo/gA ?Roq@![KKfhhHjT^b22>s7*ńʜcʏjj]Xe x-if?̪".$RT3`.DiZ%Iȫ+[{wHq%a_J=cʑ>3?{6cTƾaje{)ڼna.n٨[PPރ nq]ɠ c? FkCSO {6"Ŗ>[Fb!ϵbW"Vo}x{%LFҦ__&L-d0[j)ϞIKdJlK}^vkMO uA XxBMeULk~c9-:t৭BDh9&$-V ș<.tr UQSo6|0yd#Iԅוj_0No 5ވ8wԿlgMڎpt}7#(>izɝ&nz$F7W\|F'92" xΤ@ܸ)ix¥wRwT>YXrk?%N!Ycn6/_q};8l+Ћo٫IS<>|~BӰ̓YSӔ]ZG=ԴEqk,k$^Cf " endstream endobj 70 0 obj << /Length1 2398 /Length2 19956 /Length3 0 /Length 21364 /Filter /FlateDecode >> stream xڌpj.b۶1V6ڠmNۍ4Y{9d]7 %:)Pޕ `aagbaaC԰vG@tvv@h IrnVv++7  &E&=R>hh Df&EW+(-@_4V|L&v.LΖB kW+4U0@OeL +k&@H`kmwyٛuY#c  _xEdm%PR`rte؛ehb7q751 @JT`*?幘9[;0XU"_4.Kڛ;]]Ohj?`a`amonWn̚Nn@YDe@W' 7/;zY1E[T#Tb:|T7B`e[LAb?4|gkO hX,^^/{Z*TNL`dddܠ~Mbb4𕵷p-M?A o.%4\ yvXoKr[M6hi\A:m hnv[+j:Q{Kh"e 4Wv5g[kue@뿞#h4K:-f' 4dn\A.Py~ g& `K0Ff+Yhj$2;Y7*F<f߈/a0F Nĩq5~#P(o/V 4zPvHo/begf տzPffnvFDb`!_Рi3A+ZдM\~/ '7Ѝvu7CN ܜXAslh$# 6@P?Am3yPs~CУj:?~'rv/5j#h[?ҿbP֎88@pus$q;9bbkԞ jPΠבǀ@Uz8P? ()?#zAL@B c j7: 4CX^p0q_'J?)8GF L[|+<ҋ+Is#Bsіl6ߎ4=8Ut"uQCW+d+79<'7d{~iϯ \1Aq`\/=QonsHNc؋}o}~^ҍG}|G(EgѧxmpɳU$!u-Z-ʾ}|u//JM0X_ތiLUnZHte!qcaJ; 0ku>2:xv?<]*< LhJ'iʗI ]:ѭ DeXqOy6  )ϺS|3gKyE[t.7oExVY4=7bUC*/$ʽHv8~QsJ/֌D{<2kUkqF1N5 ޚVVbpz(6y[;4SZ`nrhD>xS3 1wRXm ݉g Y JeK}xu"؟nپt*ӀB]Lu In9Ҭ_@]㾀{ oqvbtlfǶZiOEq)Hjٲ!ڰBX9?<#dg<Sgm(c-$xg<Ķָؔy ?}̕;)j?TIg]KC8Sk84"L'- lW;5ؔj*|hh[Ӣr(L_&\+|aȃO/|'Hb.EZ L·-AU`p2qؿI .MECRƈF^f@ƺL یwln[2׵J|T'{ăc݈4mK:R0 dpQ`i`<>jK h=84{FڗF shH^{Go\yw&9$p"ʬ'`R?IؽwP޿AUyOEKV ]RͫEPyq{@2$88X%>$a 6-XplxiN`N`d%AU2u YVe>_8^̤eS@rf+/%B&(/uoߥֲٖ'{t:f{1UVq@%VqKx1 YL{d8"Bo `::G-F3V-4[5)oysvP5"N%w&$]z`ݨͥC&O"8Iv {-S0K4s L*oP-(|[3xFS-&CHy׌Fbv8Y7)$^dkL wϽ/+n3,"AlGU"+ظ7Ʒ %~Suǯ,o~h,bUǣ~gz÷ %Wo#rY5DEz kU sP T8'= W[qD~~*Sblq^Դ7:}7a k?1pBmR.Eqe44ٖ\#qpDuQS\K۷a)Ru-F@a߯2LM Xn1<,ܼ~\.+^1/yDB&u+s-ဩWhez6Cj͊m??UJ-JF0bfO;ӸyY`W LD]*E # nƃ-LU_>pmR-Jձs3nj:%tJu6fJX.ty Z! 1d޼S1SOJ/z=r'bӽYZ=`ѰVڍH:q ŕ9zu+f|aS=kG' !?G K^+ Dzp %Vi[~J"v=Yg 2v M]4kΙYt]gD7|1+İjŐDQWw'q ;m&E#mV;Sznopꇸ xh&:{#M!z;QNC!^P4)o6 f~V;Sq1/U&/X]5, E }NI>5d p3x<\棗 #ENFvKz@>R0 A;y*D9nM߷pbO\k+:*y=JđQaj BX`PFkRpmĥB}}P]‹vEjGFh|r&|̵8t> GiGa7a682ū Þi'×4ͳkww BE2q9meբd?|$\_~=>}`QX56D\#yZ:tM=GF'΍ܽK\ Gx}aDD5,z$v8t} ./hWqkR8&K3oOp̵]_ [ʝFnPWyJcgd). h[)v|z[,yniI}MmkA)w>B}H+LHR㇎$됿#kF{?3O$‡DO=VH#ɸsLQg{|&a&Q竰1E;[lqeW~;"r4kݹi4~tB;̟GeP*ư.ԯWR푽5M-w&$usӳR/PEna*%lʴUPz8{Iiq_w1jFKY}%׳WmNX)LϞH(jơPiT.YD}õ[g-'%t,~sd>KXp+ރ?G, ǗnT6Fi%>?kg=z\ZbDa9mې֮a}uB,pq@blI@%U8xv +WޠYhQݮW"vR_/~AyR\Wlj+l_1.֙LCHWq9^y_pd,L >BUa3[ʭz351uN19d} Y_-4~tk|D{TbEF'b*:Wz S8ˊ3 C`sy^DfsM3-kDMԈVHSc=|`[Q%>a"5.h1,i''j6Ӻ!!GP"0Gc8^ M{1?.ukA3OU Gb%5;eme &j|#QCCyĚ5f~J׵vfu$|ɻ2bs,$+ӡRg:;?X H,y7˰#1#[aS!7 Y^4rJWқF @3BΛ5Y%AP$"5b+vkh/ّE%&+Mk_Yqʦ5:=eDݶMhw܏NXDK?@:BL>BE#joZ ʦi {@]ń!4v';?4_^t"1AHl[]B~) Qj'NE3ZSos,_FsX6oVſK8Mc.&;ˎ8$1C^%(}SlQ%u+P"FSHfb&\R X*?T'ؙEjY"䳃 mwɶX<ԫ.e2A*ͶDS1]9^̱}Xd F҄ 7!&C* wkv+ҪM4Abn >jVr$z~q_7sgWӣ`V0TNN2 'p{IL@S=M[P̓Em-eBNy-s艜R7 Az#/ٹv_s`+ PJMM@G+恱)3}ˢs0Z&FdFnT!oe̩0ʋ<kG1kȱ \25# k0^!T;"ڇ&펯SymN#a 2Dhi`vSHe%B%r"9NǤO҂<2ŭYJ=g2d_1}?zUKQiO)1}r~C$XwL[-IP*>/~R#GWYCM]y:Xbzh%ϓGsǥ +AcE|K]P% UK=vNo-q>P呢h{CYʆ1`_Qnd9NOuծa|`Ύ5rwO\Y}D dz< "s:-K _O[9i-%}"W/aք~}#βd4/r^l$b˩x:f%Ү6:^!>Os[h= ]Qi`*T7(سn3 £md4w*($.׾Aְy Cx3;)!Ogtc.e M$ |bH.+-Py??Ndp;# Q~\y;UU˵,H>:N.MSca9Q#ElRdzC!#]Y_@YF"C»gL-aw#s%(^ 'Σ}teӯ4SϓGԄ^O=G|p[#3o]+4/D\$ +(<I;0) 0p3.%<p>m*h)Jc_ROsEE`N̉iy O 3BW#\>[;=~f'0!KSFKDuk¨ |ZX/= u攈j5k'zB9%a+*CGBC@{ Lm7t'U4'EnIXwJΌ07/ Q ]6$'b_a6H(Lh 9}QYJr߯MC=JY ' ʂ/G^=[:Ag1B5K| )8PVs#^d?Zo>DZXg&hlu0̒{94Hd`e-Mj,={ͷ g wד< a*6/pwqE 8,@H,//=Yaog|P@Aϻ-?jۄ:KGwTLH?RD%NqГ$cLSЕ g39l,ɘ&y%fGo]J:l=SUZo7CGCRZȏ1}$wЪc.餿.en@{Gǐ;hQk{v{@Ơn) aZyd)؊.v'˜B>3^-[q5p{u c-_ MR37.:B,:{f "tvw[ HHl.)$aR,kXr~UGHypNq\)] K5Y,nJ%um;?,;TjLU#ǦV _ɇYHB:2ƄWN #^}UC~a$ap3Fn7X]+웽R$EE68YߢetF}=B73isvBѸwwog8e]/E+Č8^E&ilj?R/-28ۮv"j N/Im"Ip8{N4xBw~0u`U2!n9xfc3-_X3nڹ;rf2{~T4s~&xlu,G+Ē\n4ʘE@ P" s(CzsNc3* XGRsR>9%YOf\탌ԋ<~<*#g2'(L@wu7Խ).&ϨjK#d?c݆! jCR(i3[~:Hn4TӃɚLgoƲ GS xf~f)TI5n/6#}Q6{ 'sCQlHsaSWu61BG~)vHm}Ϙf- cI,)^1qqh:Yɡ0Rg8B<;E:<7FLbB-17=PW#/?:`_X2#ieF yB։l6N&?8/ɽb4":MDn]Q2mn C uɵRIb$Iv5>=ƁhjMubTRM-|PJW#N)*XD(&'.T5o5\p7/18?%:~{aA U |6sodjxgFNl'SE0 H ;?j=p)z=!g]G5E^Y}+|cI˕&-Wʫ'\$Ytz(HeF1Vr˻iXX?\)y@djc6^},ȷؘ؟J\HD"\TM x)?B}J>0&j[k6++4M1 ?ꭡ݈qg7K?߷ +赎0܉VL 3 rEYb[$M < 2̹.ԐW40+0p6;yXKqL.3ka W-PqF|R.FTZo[bLAzx!Zo-"r̯7wǨ)((76&lG?/Uw ͥ|wKwNuOUma F|qƓ>Jm/j[~f7Z.ڝ =RLJ@iaih)<94X]tB54!x%5+eJOPErqob"VTJ \n@rc]VYEv<&Y=d"+!%6z<y )xoO1rԘIwj닓;<댷=yXH-"t)ڂ}aDD1!Xͣ\6!qm3e}|>޼¤W?ؐŅln'|FYx7F{60&&֦(U. uci r'V 6Y%݀+nu-Xd91'6jJ6ABӺKl<O |M5ʔWLLȨ:ii^"pTSs;4OYqH1U(J{g?j+o]?2 >uՙ8ZU3v\_?Rަ.v|,k#?MZmS=~|HD۴ Hidk[۱t m+ѧ<{64[Xƒq< oyϢ26qQzqhwBD_) '>֗r΀sښzpq?li$UGR]CV `C*Cjj.[ᆓi6us#ގI* GZsE?2xH-ԏ$6F =w6#j!$prz+gZPou4Zw ,3Ak^ٟ}O\%am3~z@Wn=7B[-vh5 "2%/>5 yF4wS1g|bJ5U6'F§}?tf:P i#/{#dDp b=eiUtG3|%kxNѷ/e/%54=x_ 4nP 9UrJ0 ?85uz~&oeLYQ\u{ʝ&C8GHWj,ϰT*HA Wie`v9(2!\cT?0̏fc1}CV8"OR/]5f@B2pucf/4lK0HÔ%!3ɢu83!ZI-x wAڒ@.nf2\|hZ%;R1|3 <}T+6Jc"P ޸$5>CRZ#Ze囇H)C+!23K^Q ] @)Vmj6pR[ޘȴɂ[a0%Z&2NbT7 U\X^$_'j<?=m])y"fH70!ԤRY7jMw]eT?%sDЛ$+ojdEE+C1z,Nd G)(SL{ciP}] tz/[.(d}~o1IhlԠD9!(,CX f sIlCB~3C+N,5̓.`u\@Y*etr);d cG1t> ǝڑ WYyNiG'%cJa=h/md[Un/N?%DfK/T_fhmyAYi8Jo;ͫfH<'$0=+iCaG$XGRIem1Uf:̛ }V$归`! 4 W`2_g ~_7;Y56Ng/W"(DYmaU=uSJC%`acqm+)QhCj#z*^= ,ҏ%|rIW/:@)a qµ<($=R]8^a:Wl& %Zۚ(d@ۛFX .6&i) 8J?5jE "mDfv#r$#3$IqF0zçlRvY,s1g:8W~g&lV3$czl3x]tТG_;T쩮l((?ρ=J吡 ufu, _1(pyVQiELǝiˡ$+gSwiYM,c! G| @tOG# ;x*a3/2Y_G83t-t۽42[!qL8n;c#-J pQOW9ʃC {)iz~j.QSS]xBpV 4 ]UA `a3R(B lQQJQIV  *'/CF=럧=ɞ`͹)e䃲:9*>!1^ojoߥqtD mpEGBzP.S!}i_9WJJq^ {:zZH$0>uA)8Mp`&$~({[teNkm6wey>X=' - N;'[_ 1B0v (:ſS%M%*9^k' \Sb9r>O/IԲQs~RE1uJC  U3"ؽ'X%Dog;UBlxŒ3#iM{|!Q>0{x׵Fa]jh?8Y<%?f} ~ =M Tt~;q1Ռ) |jsʪ,HEܗMTOrfE$m&Zer-ftB Sȓc.{bxSaS*j>DB{#zݴJ6Fmgy) 7:ouaG& "O.4!%T:VYg ZE*h BBm3g|5T+Ms2>)K0xͼwwg-:Ow2@^/dl2Z~ܑ EKu&_?np&>BDGݰ7`0a`0eE_ 5EĎk$=a ɮ?=~lpP[~|=0!k]~kzRf$} 0B}A&!=]_hgiE QkdžvW`X~ _<ߧ^~?s^5/EO%(7adbQXA\Ҳ͜%:V[̛%]sN^|}F˛E#>?$80YC_2j %Lg$J3UyAp(ӳ2.\W=hZql=1}&\Afc+#'cE'WPr;܇ hZC`#=]8?U62:iޫ2q'GM򨦘+Ѷ|ugE!닻,_+ <~;6[a.+ a[ R1ա1Zs 6?]Ha8e0 g(O//G"G'k)aX |:֮<ׇ(W?X:A7H! NJ !(ͥ;|d'Ncn6`tMcD$fS N<ö:ڽ DʄG'%dĶpNpG}*^&#0qY:ZmX~>W8?C)BlA_\ȣ&ZȟnUvR,UR~YE |OKy OWKMڮYLݺ@6RުbSK?2E=./"T°Ӥr=xb% ߻jmK7p"tD~z0+Ly)ѱ+'KTp >,s@Ώх r>O߮,w4l#*ed h&i3VtEP/͉C;b0Ӄu)c{ Iqcy"eG=i[[$5Q$`Ib#FO6TM!?ig I!ѐY U\\Oߴxѳ U&Lp$/+N #+kZ#nLq7|O:I%p͛H+Wi =rlpcm߯@ ?j!P?%d Hoa))bƠl7R~(uiͧm V7Z6i $1Wɿ9NdC慈 $X(iMBN7t;>Gn.Zݹ-S9W MׄJ5g&ip_H:ľq s,'lբoo -C} -t,#9n ӴfS1.y4o"H7c4w׃wu__;I:{Փ.e+ۘ_?NPj %F^$ධ3I. Z:Ċ@vt?F;a*Cs߮: X5ղ?6IaIPЌOP6j/`!0_5(6f<}.[`dwe/^BsFK:74dUrwkiLXGJ 38c5]WJE$Yao dw`DTޥЫ'&MUy"EDVU4`e r'tb } e}ON> T ‡϶()FJ""cIayϮ'ΆTxQ#om,}%~፝X)pF3' ;A;D]$>'LJ$Y ԧ.R7fGsGz?{ca\̊Yf 66 jNl:M9O@k%>ZKM)Y94oVgIN*Z4~\vsۄ5tcIVP\n~~ r2HeAr˦>/Y25E07uN'h׌ P_PiF̂G@ߌvmTlWJ\% -7K/o !)3kj8yQHeI-F9*삇+O$n f%r҂ ئ׽h>WiK,(qw /_4b諀Dlxa{?!+ 嫿'|C?ߕd|:A&.@@#^ s8 :(pkSZ?i姍`b|oj&3hCcI/e]-o:loE@ Y@#%i;FUbU7O,o\|3:ɋa"3 !(^r䡇۔@үr([iL0xoL{}WU3-׍e : /M_SP~M[:]S[MKD*~HX[",TL]Ž"73ފvJad0 .#HVg?(*+Va& ibB$̈F>k>m<ˀ'( '!)cYr;ʒ:dŇ$5'30OJF8)7ߩ*N+pW"K2Lm~b qwSh) ~wpSk״=hIK,wx8eT\o4hyFٚ, ӏ۩}w_/6uɉI+O>^1oIsڤvG0D ?vq$ra9i[KÏČbx3.C >lb#mAntobqpykdu鳯gf R(}}Jgmy(sugo̶c=aİV(<48!;;1 @ǜ8ə/9o+6rDfN># endstream endobj 72 0 obj << /Length1 1624 /Length2 8788 /Length3 0 /Length 9850 /Filter /FlateDecode >> stream xڍT.SBqw)N B`E@K)wRHw;G9sZIoff3kqڹـ 0.^n@^Cs|LL` /3&! v Ym ְG > P?D7@lA@LnP#ڲxEE9Ⱥ`[k@r}<f |+# .muba]' ni 3nL&#O= <\ c<SUh $p tENlmkn C`@KIq!v.n`kG[du֏ ՞-nw)+B\]A'P}yYg/`n˝*Ey4acs@ PXTඎA^@X,࿪ wYS_n;ۣhA4(}V!-H7Q^Gk=nF?wVdr_*qd!.0[?! m7OW ql_GE=.ua|Bk(($>AA?*ځh q= ػA1ߨGO$Q/p x\@_1?g=r<C 'qX<0<{LO@?5\[/(yC- [̹i7[pjY*L[Foظ^7lUY+ O2tԣGY&ma~#VUdPAOnB\"U&LQpjTtм (]'4G+Qp"?^B^Y+;jO%h|dp" EέG;T"#VŸg het;{PtP֌QD*P3CgX/rбw?(Hm`87&䥃ȡiaTʡ/FN'$q^u! Lz:bz!›rj]ŭ[i|L7y˝*E㌎-bAb)/ ` ^U--ϥwmJ^=6N 0[\W268F3#^4>z1F6MSciÌq2x1-;3x{‹u0f N߿㠌ve!ZUF+bQB{Jg ,<jθ>jd.F<#ݟPlx(vb -\4C{۩ .^=4 u}QmbpCG_j f[ Hc-Pd PTj>P@~d&LqTMmF]E1wD/;:+yRN0=ն.<}.̠;"dR X@ (iYE3 ګRZĩՄ.IJZD6JRPG|n1p^ɴx޼ofQf15 A4(WBz%tNek!S0R͔ (ޕ7)Gߛ;%pv+8;Ym.ȻȽ*J9CCQg PIzn"`"N Œwh%$0|f4ìSڷaVSyJrY>(^ ,6l*CiE5kUYؾX t>3ɯh]6|%h9| hUL BSEٷ?W!2t݊H Ry Fb}fGk,R)gJn_klR^;hѝvgʸ̉9lcRG_9eoP8y*d~9ore j GO{iȀ$#b/ +<.L=V-t ƪ(Σ! 5PDȯ\esfBHFUvmvң%)kvkF xۈ;$!q^WYϦ= }2if1YQ)7Dw[~!p-U#JU wu/={cbW :0@F#R|6C vsnntŖ/_nH,b EPt!F5U,0;*N_c86wE}lZ=צ32M .ؠBе,$Q>] 6 $<֒"Ք&)J (y`dfE>(VwD5sϦU_'*(I$DZF ~jبD1iNQoU,ߚ~=-F/وߐjmw'-foʬ`oHv4aFU\qKIHh6>R %46v|s04JמNG(yS~E?;GbRp944&(&:j:`P=w*P!:1A&7K Im)b!T9it2 yM;_%\vKxD! MA÷dE)60x{5$"pN*[x Qקiқjr/(GBo0 8bḌr{ю)5?ek~&]6~>FzVvEMաdT_=KfV;## O Lf\ Mޒgv'zx}"q3]6y:̾pu.Y' w7I \vo*kL Q/}NfM׼Qz4>0ȉ-WwٴDuKSNe(Ш$Xhavy;q(}9& 5zlڳP7;25<敏LT(y]Qd ˗ɵ/3u_\>W`xk)Wmli3ڛ3%hBZ6]e s_56DY6n<~85"f)aCe:\;}ˑO8ȷ |A.Њ\~ܖc78d,5=l躡rK q?|d3ik!"}S¹iC>h|\WI<=e8'KOlߊskF/g ibKB墩Nyo 0<6ޠ/}ߣDie\s0{eKZA\h[&/I Ԭխ}m2ā"޾OJSst8Gpl| qqA2V g+43s]0+BS+Nd~B~)iN_P;Z8wf;|j#Y| B\ wμμ{܍띺-Vʞuy~[뭺t=ԄCLxP33Q1eRujNLڕRx F.!cHo#7_,%}`q:G`E`ď d}T2vz󆈵}ĩ~/Qcs9lS57ļM>hUϽTǬ׎ "z&rŢuya"Ah~5ȑҾZz VwVOg!d3,jv)t$ خdRX6rvUEx=S[XjI55(Ჺ#M~tGbliTTîwGߕWlMHn"$g5P!&676*cLWJ >g  lKFgmn(2rd&dˢ+uOcv԰b`,he1/j=ǣJwDUDSg )7"+_@LniYʓTnI Sc]~|qYfXVTЦV:ع{# 3h''FbńI@b'v{()kD.i&6d+ٜ>L)\W/>~ ): /@ʞAQ$M!s*%>6A8ETwq>g>5!_smY ɔ{Vt* %kŶQr: ?гoVd$SaCI|s'89g)z>D p$ I q[Ҭzhʋ_Ojhg+bGve}N* ߘ j oWx=(o}S6:),rm08uF_P8/ =;SjPG]lP<^ݢV'3W_Zn *\4Ppˌ%npj湾}ɯ5o߁V"}җ<{H^}jZGo6XTSЖbXV`]2L^wDDAU+hNCy&aċ4BmrN4jebd H,/ rZYDsHsc~&~!SPJwDsWE!S@'%vh6ԚOm4s0 gZZT1Y &qzrzs,si\0L/wO?y98Q< u_QDj5m8zՉ1pcQĕ628h-S)2xΝ'ƤT;T:[ ʴC f(/-Ғ4@l!5mı%\AķI 9pjO]\_*j4/ԉMX`R;s$U1Q5&58ȕoS QkzRMĮ$yv@P|Iӻ/6dje}ϴ:=tUjE)MCK;SuO#gw}:FV™#“A,EKRgƨc4tw;oe@ "iO'vx (n_OcPrčM$P:J[`.iM ^LԨhZչ-هS?: DYq$' ]9 9OX|9,E H_|p=L*r~Xҫ2Le;7}2>jtFH{sӃ(Mw7* (TjQ Yn&j{qUzt#> IܱU G41gkeRna/ɼ&.S5G2 je/X%O2LC4(jHZ91@?8w#zjh-;F~r:P%' /hD˟W8i6J?y)s Qx.pIq;143z=y5PS[oPJiO6_zoaU0e9!.+Pq.z퇇Nm֯w+f7G5 +[LHS2~'^xh| ,)Cؾhz7Y^*"~lv%BusD8s)IG71d:m=Tm>'Yc?]mBބaK&G1;l0;if薘ة%t!z FEPdڬ~뾂.Vad*n|]u]YDfV9.L{h:SıA卟^iڍ7l }q~^,dHr %i$MMM&fݧԨyohzhR(y^'_x `>\B1^JV 3}+EHv[856\*yςoڳB@~ʥzO4ƛ21Sf=$v.%q[RNnpZĿm4gIjvs?$iN[/wk{ۀkF |dB%4Ryi?ğ}|BVeժ58rB95yBW:Cҟ:kdrJ,5Z{74ۊ p_N2V u4[0r ¾??!%s{sїyV͓ ގj̄@iBYgpĊfZ9!EJK i䢄{ y9ec|l4M;-9 _cC\n̠:z%4q"4¡ }%vTphu﷪cXނ2A7 vj3dG1vB {\g1t^Rw7shD} jqGU.UG2pvq%Num9m7^TKG^(Ʌy֭@ǝC,|$s^*iQ)pr$;sE>_ݪ%V*}Zv^y*D1 ;;-[ endstream endobj 74 0 obj << /Length1 1567 /Length2 8414 /Length3 0 /Length 9441 /Filter /FlateDecode >> stream xڍTm6tԈ  03tw ")JtwwHK|}}?}kֺ:v{{]Oյ$Yܕ$R@\ '6#6QEe p}I[>ة E7WOp@cpH[C*E(prغ>?&03C@;@q- W[D@ B\+ nsaG8ۈ2<M b]0@2vlF-/x8@˃ x8 Ps2Vˀwo @Pg 0s{A6k& [6ppA<[[@,, dnX<wy.`g wa,B` C۽ݬ=XCVֿrsNnMDl '8 `[^?J |" ~Pk;6 vXBlp?!wz@~f@/+? WRU~WIJ"<>l\\6N@-(пFJKl0;*⁴?7gq#(7d?j oκ>_0mkfU VP7*Z<́?mB=!VPW_dK{p:{8@{,py`apH8a{8yx^ؠ"q|8F ;x(`p}oA? x u9@ȿC Ax >"@_A^ݜ?4xBsP]eheְ^ 3Ϝs5>;W%.n0~ƈhxx{k9Ո=;J=+QEEͦ-W7ˣNn$rU] [>*L2XfLQУ`yLOg)ƿۋcj{TӥҐxp칏v"Oz; (YŧL[>vJm{=!.1e1cy44}D`dB󯾗SncidP@APWIu 3yj淵tE9wHﬨO&D[POk!XJo,jcyHI' VYP"lsfP93vZ򅟍@<1YOP'R2\3l4w9x wD G#^p4.{Zا;Z۰[RNlG-NO^KlOV):Le~mkt*k"&kjM$qaۼ_ԭZo/_fX kп>f0POU<)m7@ ,1f;>]fS}V\7_T)_X s"ʃLۆ*zu>Is.|mV{p:.2+CYr87ƹ6'Z?@}MO_#Lj2ddbUs7vY <^Y'j[řaDLt EƔ2& ; 5]9|U\ l'drEuK43t$QXE@"]$Sך(uAju|fxW4PbjͰ\ G>#fJfs\hyBM6L:#Es_T ^,y{>Řm_ h{cNMCQHV+|ړqQWR6L>k.GcL:{` 6aخ<8(Ή qP|4 L[LD>A|އwz!O}'m{_b z?٦S-ٱyNDԝ-hEϷ(uhh{q鵣?y!^`DN{ x{jO/"ªɉm2t|+'4`m +mXlB9vY{! Mymc7+- pPсEMKtIZQ~ըYK2WIYW)|{&?%ncՐHV\DIhR:>m\B'dqU|WG:z9d*ehkm\֒YLx-߯MY3TFqtׯSh1W}*4hڐPhQ@u9زQ e`vX?o`p%V *tズLyxErto7A6re#RLA&nrW)1(  -g&=՞7utouHyaSCtMeaQ"ytAחi7[@K"c\%ʁ-L{KF0)w3[;(y,HH_׹n _pC$ WPzom9&PmBj-,j].7)1IY_y_3ݾh"N& 0/g|ҽz(]k7y%:kt }3>?1ș,WBUd#Q?d>!%HDY=y(FġeZk ǣAYޤ HWF7xc܌S_Omx?fF/;~jf\4GDD{kD%Jab ٝ`#ug{5W4@f-{z} VѢ,tCŃ`,)? _fg٠98b\B?gB(!43UW!N4^ !9V- nQWѷ 1Qǀyh2oeap VH/O,R4gn~)kE)ę;&j>fG ܢ!_."~Z^q--풐}5~ZV_,z]x^`h}A'B]8x<V2ݼ'(AskYz> Gl)4W,]jA?!oT34WKv0 2V ZToI)6M?+@>Qa%U9g I 11h N _.9i?MJG(4JbN^/#Hj>:Zt ulؚk9xK)KGo@>{0"|je]<1oUFY!2`0(1yeRnx"|b] ;^(H)cKĶv1oض:rY8?GzdTvz^hPjBCvCP92uHhCQ}Na]j14!agƺ:ǚIxڹ]1zIⓄ28JķVXӝ{d[mB/gmâЩ*Ke fR,LH/$_!2 ܞMܺ*uDMfgDI&,}ǘa?Dq qbAD"SY-) DhT2ܐ4^RZ* gBII{DŽȩpY5UYISoAJk{Us/9mJ4+y*4uMML! ha ~YE<ǚM uL, Ȋ5o]Φ#1rf䧎oꩨdYᾖLJ ׯMi8t;2|}OZ 6Gs~&UG}b9&N->| qSS~vu%r:g zCT#ֱ?N8?jW+ TLV,b@'mZxScRb5_VUqdhbjdU׶|p- ]A {x䤲;4:Tt#nhɉfjRI].᮷h( YHd-&x. `p!_ &#e2~Jנb*<:a}v: XmϾTsz=ؑseݳD+A0l_{BWOJ!FS::BgX_)ݿq'bе8һ)1am} gi$ 9RYITCZ'!ic LI{hfy^k=}[(hj]oD{Ǜ]O= :\i%3kO~I]%rYs#oZ%-[ (yn.T^wi[+tpL<)VBiȖdߏy㿃 [ŒD+T"Fr)9X,Y:EI_s&w3hrji][1MZ0oɁ&<1w2s[Ϯmnu&TԯmHmQO斌[2>Ϛw%x?SLJNꍭn?qv>'XSƃًnQ"x/3r>{ ]$`pDñmv{z3ɗK2a2'CtF"Nw)$}הw(/NJQ)< $ZQ,[18jć|mkh=R 'Ȥ1qm\VNYpNC{ӂG_Qs@3ɞd)' *w(Z$NǰDfyJcgmuVEZNb.(;>lz/_fhL"oÅ5M ʋ(|d= ֊rn{ltCƍL3 ٝ{|ۯj8ܫE3]d4ɳҲ̎+ NAysha@Q >Oa7nG#]z^?R*䬅J swIĴBks,kbU+{f.:k=Jl˳ұiX*X)'Z! `3Qe#EmE:#QB N5_([WUUn9wKgk=5߭.4#\Y;;3MӃzy~3l]0)19[c1фmiS34j泼I ̈Nx]*Lp9B[EiT(Z1h,|ȽuE'M6b컢i}@nj\Y;{egb_8!yyec 7mu((DVW8>ϳ=B"ᰗu˩WpKM*slļش ^`Ҿ{,1EpJ/ l!r1k!EI-~ݿH Q&Q%})?,-K]ZQj|JsFZ H}-9{ə<ʞIG!Vympٻ*,@ yg5%D9'vVW/:N6RKI>n/g_#IRAȎm=y;INK cjܻIPIq(_vޢ %8]:I䎃9,&o)7xfao _m|a_`ɕ _7UT:[8O+_J=a(12=Sٵ=U^d`!y1?2'O(-~=;T (:On8IeQ|}+$aщNZ 8e˞ΩpEX0\H>!-}$[=h1(齨 :> $18XX*CV>7}ũ(0:[6F/wGV]P:UJoNt/Ǭexvzm*պȆƩ6)34xUe{p=KYgQڼ|IЫOoaY4SؚsJpX7| mgT?u+]xU7fˇX\][p.;N kFCA/zxL9ĹY0g9hHf1I*ܻ#&S#}ʺ1̀+菚+ >9]j?' e(;UP.f!%RͰ' D(LL UŔ?>![3W7PMӜ#xJUOGzF}]tcuv^A^HmȔ%~x "6}?XᩭLuG/j̗Lw檺x%fxk.㳁N+gy|F^ Y\QTC~r՝Da]kRÀ/q|yeFR*Mv 4t}lUz,(Åڷ$iّͭ1"^T,Q3}6"c]qb[@~0Bv[(Uv[i ZMg8Q]Z%r`m|u_AKVCOұYmv2p_tZb)CBףK+3XT.qm#@'c78H:0ca+#͆35T~'YoEEk]_IЍp@H;/,kBec.i3!ɽhόEH4gx m[oDo}IsRU}\TX endstream endobj 76 0 obj << /Length1 1391 /Length2 6186 /Length3 0 /Length 7136 /Filter /FlateDecode >> stream xڍvTl7%1:I(;0`$$$QH(!!-"HN~sq~יeS q57+\ŠC$@ #s9 ,%K-X-@GQˮC&Kp3B>@"S`E&44Qp7 ! rbÁjH8FP'I-0B=X_E(((H@c<ŀA'݀C߃I?j ;6  ' 6Bh Gq6 k5@tEJ@`h/@y>p6+~9B}фxh u%8n V3B 5? K#|~Md-_i"0pa!Bp|AV(_\O/ ʀ`909FrAFjۤ%2` ") # ?z(w4PO-n_/bM@,(2` !7t*XHO_v^ @ ]n[PP>/ᯍ"0?PE0 nGzP0lV ?Mpi]R Cb,@C+&H2@@C7xoA(4$tGcS['k CL * ` B_hص[^o>U _T\MbZ(2Fa2:>-i N_kJ3k>;qN5 f}3x]C-nvfMM_/@δ ['_9.v|l婬IVIQeȱ<"L;{#LCR%8yñЙjKIv{v=w2>KfGJ>9D/R]A?S%s%_3xTf/ x/&n9_c9..&D_TRڻλ3ȫ<ū#r,׌VE%R#wQё0aVP;U rv*q~^/Y1BeojXڊJwg}K|i(14ἴ̱;휃ˤ Pg/ Oh4Xb'(9-Ciʃ;K^?OLp}X,]ΐcy,u>r0quzpEE=szuFLiCkރt ףӹsO<զjߑ+2]fYVSĝxpZڅ=SPȝHi uFU\c۠fD-5C>\Ob(zSy HҺMBs;&& Lɒ`vل fɆrGӆL <+9u8V? ش}Fҷk"1EјrFgeۺ{ۗ GLtL x/-&^ zRdYd|tN2Xks ().kJBMvݨ('j,qtZWTGO .N][  I)iLyլH=3 jR9#xm?EA,B%djQŇrGpioNH%WG e;ɯ[;Z YOD^pewzW .l'zǢ%yPUS ) 5(@NpF6}un']J!QwiR_ΨX Uvo8(<-8.8{bvS1:;潇g,39wRKeۊsnc f(畾BW8=5u~VŌV nwr/V8 .QL{lԉ*>:ef+!DmY,0MuӜldyk2!RQ/*M4Nd *!3}t<{y'U煸Riɚd/Mr?#s=2$*ie)^vY:M.7XH<.Gk?~Cb<i,="BĜG ltPIږ?EQ|{9 Co+qegP笧/-;*74TIdna1fklS'8FuZK:Cwq#l+e\QGܮ&Y7 3n>yM1fK2ޜ}^#w_!GWz[&FOq4ZU ,J_z$r>RV ACHtU>A˶k2[7yEu4"<3f p\FrdaU-6ӢJ̺6RÎI ||%Vnr [9zoXmgHb[jm nj5((~>U2<&x7 wﶎѼYĨRi=vo|i8af戼Ҿ,) dlIs<IlsS#vFF 4Hm%P?Yux0KHZ8BorP9Ki}{|vhV GY քm߹˖D-򵜳5'$h ~1:pں_ Yv3Zfv'$P ~1I\|ygOe+{vM2Gk /qz-$B.F?GkوUTjW?T*~gX ph8'D eY^C& k?#e':i8Xff?C2f7Qb],9FbIp@d_s2l^nܭdZK~/ÄyPV惌yhr櫘:ocх)Wa{/yf>qAX+t?JKMvsp9tyN@*auɽZbo=>-$_~7ݎ:62}+Ph9DuONeun6Icޝ@;ĎDU +(@ J^i]bi 9I'mq;Հ`9Z2&yVoUOhl^̛HRf:G{}'R}gXS;ZD&{%=宜,;\b͞Ljuʒݳ1&c*>|~B5xJ;NW(5'կ/*UyA@GЖ˛Fӄ\|P1//PxQ~Aet9r?bf21PМ+Hskd#gxN,T[wMɶJb!w]ef[..4dR5/Z-_9Wi Ė3kG~g.\p/^X^Ā$LJs_ Osr YKۧ+mtJ 밈K.OF.zh$rzw;_@U3(RPpiسLg0s6xg\ׄM-ciŊ }){|mV[fdA d9z\Yawsg_KNwRV<3Y [ iSK7 6ʫDҫ_xTptn+]n ȥuVloMZf119NxH[C..)+opy:~I֗q#PA;L hcS}i9WD~xq-k: v ):{iY&QܢӻԂ6?LM}@6c(:3Of)MY| ɫ QƬdn&&]3^i+s|E V۸!T=ǁ`?*;2Qj,u+=0_ja՞Ovlw,*8Q"RV"W;%S:jP(=K@]WAg]M];J@t"*~ڨ,Ps2=*n#uPѠڗNw/gć@ڇkggܯ K̶uh'MfmiuK$]enpG=XGͮz{,dV/hҢ]qDWD@w<fXؐW=(Q5PӑUWiNYMpʢTk!-زIЭ]=)8LwK6]B1q?sh+h prIxr@fv90ӿ`Uò$v2Rbt`+\]XVSDBEkEZiz *j;mBdK"G W /@M]4)..L}.\}O7F]З*WDHalP%*ea4Qc\vrRN-r2='9z4: ҖNKYۊUz%[~V^] sZzVBPVhZN3F)~=^| KBDqٮC5{z̐^K L{QwWK36?[)vxp|u@\-u^q1)TyM`p)<5`޸٪ge9Z-yzmW+h#Β6^nF&]m- N9!"$qBZ"l׽5vrFnj\=1gg z4;@ Ik(9Fè*&Hg߳rku`~nӮñܺwe@EӌmPs6>\\*ZZDy(SL^rsoOn<v&nb5"XI%a]* U=T*?w"P$n.Q0繑Hk 4"=9^Jd0{ԩ&붠:@[Æкӷ6REɌW1 |K([um fPܫ۹B6sLI6&wU)RڷGr) 7h1jxn|zv?nbLʐSުGd.fxv2"{πkY oӆL(;6;Ќ}b8 ywCFq] ަD4UⓃ$Sy%&Q#t+D}-s}ϑR}vOE43d"fvM7umԙ6'#p)* {co/~q$>kP}t c×4=휦FVJ4uNH(gzYɒ~߂S-;+&nKk 2Y(eA'\+O|gS:\}"9:n0I.%W@wnv+ gu endstream endobj 78 0 obj << /Length1 2231 /Length2 13673 /Length3 0 /Length 15025 /Filter /FlateDecode >> stream xڍweT۲-N[pww4Np w  -kpydswx1gլZ_CC"f 6IXY % EMMv d9hh4mA

X3eaMo'_N:}NR@V?Hf ;ߎFHK[ 79d7~[/u?|2z3K_MRYR\V韢q,@ ''o!U3$P9G+0|_?9{g' R0@g @_SWkI/P/8#JץpT[uw^97׵s~m~V.ͶҶ^ KU[7 oﵳu]m_5v ^wu:@ߧJ9Z-7 :T_y56VGkB6xl2M)A|6+SiA6?/zeZZغX;cgzlzz'?Uloo/ky~#giCx- `#F͟4_hdzal_|mIDڕuJ`sI7_Nl?9J~U5hrce '{? r4W_kB^;joj/kln_# ʫ_9W ˿zmǿkٞWQ_['W%ׂZu{@HK` wv :~։{shݾs!CnB}Q&x[AUp×+:b#Z 2=T[~NVx,0,((7(>X_e(nh%ư4?UɪjUB~ ~څD#w7O#7atbrΆ 5U tus=Coxl^$w? cbǐr)C74t|K\ ü\t^?fK<Y"] }V0WJ 7}GQWeyg( c EHOhhT&<p#<8H#:ӕމ"*$AKXg{r 31H[#8*-]+9h匎B=Z7lF3C4]]Y\h3^ țp klwNJk."'$$b ۆpe[N!dR4Ԍ$8}rK`Tsxl W F{*FDƠĊfQ]xn#֝QگYe;\>1qײ涱;bb [:nqP*O_-#uLJU,t.Qܲ2.Jӣ0$arbҮ-(*d3@޿Y,mٯ{MX b^ +!.r:Qm+6 9S#lJ$G42֕*EЪa&`lru}4&0?3i9YPr!+.3arڻ˩[R"pKH7Mu\pOwJXomH=m2rqzН~Z StEީ$2[9{Z@ofj$󈅝49#HJ&Aaq{zv,ҧ1ɴ# JQ5,!ە a9 T` ^S[Zv3u R2Q"*$>(kU^TCI{[WL'+yVz51iY͏b^jщRCXxZ:lfxސmL8i 3¥usZ\C| { Q=d^+QWv7F}񽟘7d,HTY"~ơx~KV=2x!-z@ܶI]פD 3^PJ)7*Wq=9.1ZN=soHS<ꘝϿUl8lAUo$rT<ꗑ%ئ:b1Ϙ9yb7Q(D[g^Xjd&Q?: X7֕%L.+)_yQ*bG N˜ ca4Lp)-U>jHjCN;rU;g81d” a/Km k.t*?;H'r~nt~$΀f *R3bCa saѬ~ouB-vwU棋֐MAjS)plzfpN$7AHg}sFێUKdz& 9G=2Mė: )pb*^|5LV; u\TV=:>vmr!FHk; PIN܉/G8c<FLR b6zŖRPbGjzHa C< &x!_/o`Ey&W5QϤR쑧^Tg=_B.٣YvY_Tp iwnP^tٵ(}‰`!%`ngx[T 7%v^a98\|k)Ub wޟ\\]] (kl(銶Am /gzgOޏf$NN lg8YUɆA.bjZʸ},u!Vg{r(#s3/|Uþī_y[ 8or^3,I:&AE)|a T 47%*$z]*S\v"}j.D 6Jr+uZT=aI7VQ6S0UwyW0>}z7t O1v!U*a΢C 3΍ ;;L5m߸5q&>II߆||VYi1KQOZY,h_}iaYe /H iLBJ!K&+K_0 ݼ߱`[L߸ä IP,u悲JyZr&bƑVX˷2fH{0ɷ4#V^r.X*}`)T=1g'mPW""F:3g3zjCph)M /XSTeZ1B^Ct H! ίp-}q|b|V 3HZy~DX75}.;AX$pњ⚄P+ky7nm@:,)꥞x}BB:CuVH @[gJ\G_ŊZBHDy10 $ Jd&;q ["QүŠOGŵ /wvjWGMtaZ{VeNȀ傥Ǎ'X懴е5S%(k|yiQiPd5}0 .f妺OnS|`ӭtW0wb%$LƐGb? Uk =[ $a`{,"el?|Nk75KQܖ e볩^rou"c`LO$(;1&E>orqBuV+>O[,xVT,—FXO P5zEb/"v;gO<>(('"+ʒ`İl9CuȠ\2ųn UQ<$DL/!^jws&Bb 2V~Fr`F}S`6)2SG΅ʊ':m@  KY.;' $1ƽ,_(29`9v9ЊJ[&J:\m,wͰ2k$^䌓!;Q =a٥WKG`Fg.9ON%XE lֆ]CO%ŧw-J)MڦٚKbGth3X22T4-j%|EzV{g>KqUIy'7Vrm υ iVґc%sS тHT+zpVam..! C{)+KJpgx>InMChߌ)xϔШ;yDw"Ci~Khɻ|^l wn\7{Kw>}5Cc݊%V#-%eToZGzZiE洭mb PS9ſ6޷.'ZD~ tɳ R}BPaj7Kje/[pþDu0wׂ<_{t2¶ ,7Ѧ&Giiiw4s׷za)Ҽ/EB;ISQ:jixCB/*E(t XS$VCԡ^2zt,4kIRHc$יr \xۊL*z|S F>Lcn86t τT8Yz#7Sа-,_*8~) 禝r{S!x{nC'haq|Gx' .z 5-&u3#hr,PÖ,>BBxlf9Ql~ɑK!X}х3_JaYr6wPPf+f 6(#k>Lc#Ǡ*,/󁹮eD *-r ̞~z(4h)Ut o ICb" ;meVǎOBw{Sn D7 4"/Ⱦ0TkRUrM>yj$&9ӟ++ Gر+.)h3Jm<Ӊ:۵Q.Լ)d O7b'NN/]JeYo_#L{4ZPuQ)?!.0ŲrYʽN^Pr%֋ ZvMa8'w >ԎnO-O?vng%[uR0EW n-;mX¼ ]Gsv ˁS6ܷp_!Ł-6עTY=,FI7G% ș~`#!|a[c!R UWP2E?C^ьW#zg4 )ØGD$$~]Koa*X~VLhX5A?sQ}pKio ktȊ"~ :jD%^* cȨS#S:P7fȖ ]a.2 $m[.+/4^&P'j9C ?0VKYE adKS~$Y;mLҌǟyuaG}lW8\H*f,5?鯞n]8)Z /8Do'O,BWV3ԏCLMZvU Vdzg,ә\=B_)>;Yjwu5gT cn.!Oh[,r'Ö{#^趏-J_ ȹa9O3y0U&Rr&.] ԣ$$S`<_|Q{{|'wٶZb~Tuq͵t9X-AM΄;FWaTD*"v4Lo;N%˰T7A2n"=GJxUwdwa2ӝֻ~%Rq^Z?(_%sgMe3٦RhBy{c6uj߬vlN;Uкr ~?HŠ+̐AhR?͝hnN 51>8T fƗD!{>D%6Kp Jruj!d.7VzjH1zqhy(/1܈5Jϭ㨍@w:FC=aêA"> U+M<\zd}|7Ûes8̍D[O1ZEw(t|cbQbRؑ_]? ҷz앙0˜6G+6)[Fs$USE.{ZܘRe0a}$m^qV{r&思ybTB (*3mjށg4J:ہRoTR ]ٜ xrq"`Oи9uϛvl{X"$gVc:1D;|uBAG0 m!B@H4>Q-آVN-7TpƦi 7KMzJ}ru*InVyVƪfNoiLvwZebה [U2jRUhbvq:}@\D DgpG< ^$Qʛ{C>dRNa?$B/{LuTh {DC* V/zRcpF\#TKޏڦZ)rMriywyw -@H)%zxR8H?,{GUC"y k^ȡY.ބ  /!oKMr'ܬ~ *cWrX8Q,</@ɏ$kkGz9؞`a/~z$#Pzh- F5wDK|j)j-MzA+ 8E4J"}bH7,b- JIM?!cd/zh!鮦[SB3r~Qc/{52 ێJ\jų8-c3 s|O9[}ՂX-qKQ*pׅ&w_ jT+H-$zPW4 _m >6.-4)' T= 8Goԗ fb6g;sRʆ1ndo&T d& M;5a~Y=pfmpXv~<]b}Z{kD8&CSRȰD(afg?8=Jkw]z<<"qǶhG{Q=Iurm7AVA@w,t]z)O 2pIPhM~_-aR|Mr"MLPH%E2,S@^ea_#7=ˣ>T2JC2_TfU:_7xwD 3򴑰)m uu"B6q#XI_YRED([Ni8h*Aݚ+~!xIyNKQ/ËAWQ2L辕۠Fu7&;21\vF7o+qtOH曉"B;yʢѝJ U#ȡEٌ:AmwL>xynDm.` @ -+~xV.xl>9fT{}0Qގ*$R;\hQXRt<Sq"mH.߃[єkwMй?ܝ\/b8ByHc>Ѡ#nM9N[]0x`گ{b>rCc*EJgv~#<7. ,)Ԭ S:=Jyk<$n)cO;$0M^tRY_6s%/%\ű6+x/5IqՠzG߇9|+bq` AKu*gՙKV8ܹ+[w32 /y;C!Nv\7 mű@D 3[UzE 4S3*A~w:bKyfp!N_;kݍ懱jor1*s])_r15K{3b &!#6.a#Y/QXWj9S~Ol㗲 zwIc_ 2wk`.܀ 7I }ʅpp7`,ޮdpI1B}I.9SìܝfEIE!@< uW YpXr+=zKA/jcvc&:݂rD1d4~нhmPI^`D46%1| /ފ8$}Vo)lY_s7~Ex}s9`S#/qBNmGw^\ta"&FgSG` {c,9e嘩lSĴx[leˡ};)La/Ăا|VJ_" N n-aNˉHUTA%8M{BYaF0 `ef Ԟi3Emj'zt H^m}˯rVt.vm5'{3G,]W:))1_?Fo;:q/]sE޼{ ^Bs^&ggi ^@ +Pa!wTZH8혝ͣl (cL-ŘUQ΃AON~ F*W;ꌚ_zEipeQay[w8"֢xg Or~ 0q< tLWDw!ϛ2`k'^44ܬ݇ G 溷K5Ne.'P10ގZo`# Sbvw$h@cnbqHR?p:],TñN0wK&]!J~^?2kjkSFQhk;OL9=?5T񺷋HpkxʖXߓ;q_О~u Ds{s?t7wxb)ˆ!oV&Bpy3EG;^g,bKFޛsw+TlGRe'u4Q>WYauȍ{@ëZ&87Y\"(yLU8ѸTjԕG9nXQ,2_1C6U9MR1tvbE": 8-rn^d`ͪ#TE[̩w3㳫|JzdvS>Qy0|{gb$XM"z2ɅBD%&]N!O/RA)ZTZAПqnzh ~ݹugMSYE+w= "K6*d<TaQ@zRBvتyq OfzpOݜԞHr/Ǡ|?R4tԽO庴ScړZ#[ bB2&W ʜa~y c|s$LX8P#c@rca(p`kiTis4!ze '^sWIa̵MMBfݦ5 ~2Jeע_[|} Htsl twȂɀiI* aꅰpbrYqBm mwLXm|O]L4yAƙfEmA+H/)\~yGǦ ȇG4讀k '_-G&BeSiEj͖Ȃ)p ss%N-k(4ٗ>nGkEwo]_1ɹ!H8v Pb2ٕB0b;֣p88; 6b[xnh~_N-ayubvRsԷ"gq=\XzB*-TmS,B>>AA0w (Jl.Q ;boeerͼS"N;u|oĭT7Sh!)X8C!K;&9=t9zC4}B5}s# Xhy 2Q/kV||lhTdt#'&~2kA(urŲ[ e@Ca'}M}ʸ/c|GP-M"p_,@ﷸmDnVNO=Fdԟ%]bniADb-jVaH5ҥT*p? }xr3S!TIuybQfs.Dv顼M&q eVq3&õ[\TtGr+kgK6Rc*uocCX`_|> $e G҃|6c`A%BR( QEȸd>9w28{X<(xpѨ J, a\)mB $> stream xڍxTT6"̀t "90 % H()] JZ߷f=繮=6;1#Re]cK! M(o;> EGm*(4PhyB"!1)!q)  J DxHT콠]F+#}=N(to\ n8p tQ`7tE= `A(qFܥݐ'9n>7 0#^`Gzn? Lȿ @`PDxtu@ gsBBJ'W"(w=psBN|P|{/= @{Cahj{C<( 54mV;*#pW*P0ツ@᎐_c8z ¡<*0hmN`@()&&*?}@΂ ;3#@(G{(Op:8BA( wv k> ;k4p῏XPLr*)!|’~I1 @HHH .. g{>#VA$jO\ g.=`׿( /BgWݑ' ۻAahz*Eo9/nD٣ՠwB3__v(R v4@//p AGC ~ 5Ϻp؄EFDBhU:}~ (G!nP'Ahߚ} 9H:exe"71յ$hQ3glGJv54#O *"y/} Y(@ao(};}frD9M? =J6d$¶L5z @r(='aɠG+wa>da[C [>$I 44|MPꈣa5܁"'Eڽb5~Z,#)ɹZ-H %s$VH,;3EEyT++Ŧb4t-ԝA_X`.5>1_Iӱhb鱸yZe ?n}1u`;dIMn=Gjƣ*מGtr''cR~ 0ɚh&B\hB:owR*B1xR3Vt`[*$w {ݶIr8Ƴ.zlWǩmKV9[)PadK^a${׭ ņ 磌2_Ovroh4]c; K Eە? PƘZ tyBϾY]H qn;r^HI@F̹!)Q!MmBU~)Tx. i߄k/QY=i%mRw?>e@^ 5* Ue [_EDw-kG*m8іWN#[I,gG, Tun7lִU 4}i)v9;ðһN%|qQ)=5 ,Kf+?ۇ) OS{ҘreGlUu=d֜M=etpH9};PhF/j$ӕ*RԼ4l^&/us]|Ob 765lkW!",k; $NX}_`ja/TL%Y1Lz><7lZ+ְ'3.E4O-l P'NU(K9I1 iFs7Vg>OE W'(J1{N~z 񏚴!Uq~&Y䟕>;xz`1) T>]Y|1B$ZFv}W}YU s0'+ԟ]1e=²Zbٿj_؞yxj3ĚTقl#nÝb/؞spqa*ӘP:q;8_Q$KLIt eWX?1uQAn-3=50P0!Jtd?Zh8_IWq̎Vsh_+ Tm9>m_m}-?Gyp*f:%ԏ-1mL2`_yD!vFAv+/iUF4 Յ@(wR(ܺC<+{hC7v}ƘXH66︇:T-l8rV~ok&x+!H`Mm$5]_xib:6GG]|̯yAcJ rn+4pn9r''+PCĎ-(ɹ,".\̛,_-l+6d6,p-N/1o_ač3o+~j /#HM\b&;}T\ԗJxr+Ew`o^朑juΎ\4Pn;bU $('<-ȷn*TNzUǵf6e5V& 7[(=Yy$BPMӛ^yD'yoZAx@[-րͱtZOעޮ.*nD5n 0LB|E1m5GeNôɧG ۳oI~$Zy%H=?3vd܀ĬBK9Ka>K^_z5s`*:GDB. ሳNNIU0%Q\xH轧Q_ ʕrl?9LFCmG z.=s/*^1c=w)j#b0_*aQRP񜯳)GMOHvFE(ܵXLVo03m7A3望ɡVQ~=#tHٺ!NccIբv$Y'<۵Ģ"%jN3 󔲶7s˫:8!f^}2u 7)8iPݝS9 <ˬ?HT=;Bg}x@`aѴr]jcYiPY7[<#8[8}1F\ OA znO?<`y20"2:m}'Εz6e'}nIyg@&J/&UQ:Z8ٸOˌEx]h<NV,G9M`25Hx暣e(@fuEAJ4QMpLc_N}LN;mfaMRƣۙrDc]"rZ~*z:,X%xt \"c/1Oc46zU. :(P>Y]"`4[rCY߫>AZ jI^)cg(~; 3}j9+aRV3G]jSض?fIS{pi'sIvㄸlXAG'r䡺ydlr ~s=ēv]ڨc_')c0dr W} [JUճOTWPSKN ٮ^R} ϕuTqXTe2bj0eK+;>_˼=I['DrSFJG @29/֕fscpȵe&-⮟j)iێNhvByFd2} /^ME铧j_M/ X_iGFVuL[vU\xPGzlFi'W\7d\Iq0_f)>+NiH5xf ڴJcп;lr*Z 3:y\ߩm+jB{p յ 5ZbkF+PLClݑHew*4q.q(R`u=aWH)SK\$/dkm,H{?WwfED~>1B94sRImuJ)wb, 4 XLw[TX֛/Rd,bܽIm|󕭍qPzlC؉W/q6__zxvP0ĠVh!Bc{Ik;_:gnfizo9r|Uq|V+5V1S:{mÙp -LՔ^ABzmeZL@`H(qHEo5iIKukFSdh߭O}&qʢN8}$lQO8cP\KXXi˅U 2Qrc=no9jNLF$đ΋%f$efo;NKjA9żO6,^*th3Ҿp9)x[CJͲFzv }a!V35],|ˋIpý[V9~)l`eYѧFv\ I}序7宒k|>l3]JWCzq, ^cIl?P(߱{ss!Fg̠ NJexގ6/hg[箄I{}n1Gy+9M&w߼a8Igj>Tfd7ݣUEGHz&w8e|񹏝1{[hreu%+p'~*8EoYk-h×tgu0s@--Jcvrmz[T|`3iRY]j97hc4TܐPTVnCga7_}oҪ,9W/,L'Yd5_=SkŦ _fZ#x^7$~5˚0M}dv[0U;zQyAշ̧Cc[޳?|-ӎwg\(\#mbf+i'0C/t7G1mvRa4ud'y3"\V{\,Tnƾ CFo}f0¸"k d#*j{oVUK5M,KR|3);"мYO0> stream xڍpz il6Ic۶mkǶmNm;Mm7y7s,? )2P֙ ,```c``%%UpGKtt#C&ba(kg r02ٸٹL 1sZdRv@'XRa;{G 3s< 00rr:Zd ́6 v@g AclEOFghDghGIpp6(@_r6S%[8Klgf|-N..&@GGv @h/c#@;zXؚL-y1:gwg_NvֆFnT~07?'cG {g':' 8͢&v66@[g'ؿp݃ߏkekfdjakb {zU[ ȿm>Ddf@g+3@//{;{ ) pvtxS`ba 0Y! ;@c }KcLl=2_;@ `efq|7ſ_~t?{(%g1@ş1a`e0yv7E[z m,=m1.; k TŕX_.ښYNb@ gcg_bտ`de220r[}\[؝(jklgג1  =`>&&@@Ogk`0sIB8Ez? @/ v/}DQ ^E#4/&M _zQ"M-\/?>L?~&\z?>h~ ?|86?`h1 㿥ݟ1qpsb?3~sS_ sc#џG~Tf.~4n Ӈ?1}H.q}l@w1겝1we}pcg7ڃitJZU.'D-{~=Q;5WF$Ŏgﳘ3g C0x*ޯjVm=R. hn C?&Ck٤^*icTuJI ri?QrGZ_@͛y'J9aꥵ{sJɩG urK8U kū$zw%dkr{K[FqS|ħ>@c&@ qMLPdPp4 !ܑD5ZpgNN~Fs\tvcEhC5] ׻2׀̹rp ",tqJ2Zqf3;X74Z#>J151tWo,ZϞnnxM3%F- ZU`4Iyc߸H0; ;zӯ(x6AbF]trw fڒ)w)IǣU?\|\\6Yt4Y~$\?=B>T*iKvu6)uX?RtynT臖Cw+.E#?$;Kv "/]1, ƠK,\4R3sr:gS׊o3"[wިVHaMDBC")c˽U~EbADi*v~D^4I/f\|iGzf!𞆹6B:>B2>+v!1Yt&pePag^LO?6'%线3Z/9ሩ$?GrW# eD vƯ(Q@MъSp1c?^[nݮ%ecx7Fcfz}Өӫ2Ssg+By r D7Ce`9Cj2 4=K<(wPDPy9Ý,рn֍bQ|qύ,cL0lf=D<WX2ܺӪ% z_n/vGHG(OJ)i@ބ+qh'U BS05-!hrˎȐ+E\:V5 ~4RT/Cd9:аmrUF~Ԡv7SԾ>ټnd`|2HH/Qp[Gqq9t4AT?JdDzk*:a u~y/ ~e@^F`H Qvx_3WUF.Kj@vL-=E'|n1%Y.1D+J~9Hs[jkJn4a@*qOO;ځ}vp"h, }g|hBFmwK5ؕލ4DheC9H%;$o@mAFFA-ӛ_+x^cq͓x.hOqd{:LYpnAv:U*\sb +-O[9\02P$JGQ$l@6mwz?ͯڐfH.Y!a-<ҿ-Qƈ*0h6;Ҡ?s6w/VG6o9RDd:c/ ѓFMܒ?{#K{ҷdKwkGd|.)ގB -þU+c2FIsl5|bW"lע8Zէ)Z(^¹Ʒm`=EX{辛mIR߫qE2*n*n$BaG UHJ w%YgylDQCE/|'~SЕ -`arHӌљG%Õoejr.PԜkH,(QHso[[e՞㻈vUZoxBŇA-Zݿ 1R@Ǡ5{C~^f/cE 5ZCpJjíAOG˟M, UYJ,8 oKz"⮹{*P'H ƅe4i(g)4M,DʦMBuB3 b@.JWb\RA˰i )^41?!M,Q{Pt NI4t ߜl^4>5!3r,Pg  Fs:.;+I77 h]c\u@EخkIqbOy|b.6q3*͸$w.jXUh[qJ$8M2(VNRP ͍:;PL[PD\;(mȘ_1IR̂#{ڞy)9eړ9<%Sȧs`6;Ox ! F dGxPq8qkm|(OM oA4I.C (W #1/{RPtPug$kTeYJ$|YG= FZlSqˇWŧwN楗8e똵fWvW0Y,.:Hu M"n'k\EB{ "MTlT% *iܑY*;58e_4C5r$:1Tlc}+au"P~N(imEzF)}GDm- y]pd}_޶( 4j~դqM(jmγz(<+Y9OD}b%'tGGNŨI e7E9R'3 q>fqlDDrPX>6ou-20ca&EQ 8X\NXЮTIJØQ[W{X:, o zXaeFQP'7w1m&|PGSZZ;P8Mƒ`O%IBh+ uЃx3piDLɸ{/*)Q||z~H4{7_6$A:v$- 6HK>reEo;mfb *Q*X;UH\-Z]+s:-]_-n~cQ]o0R]{ч`e6Dߑŗ}=D̠4U̐!֠`OU΀bd-t,(ѧvNf,`\F*{gRPY@8Qt`BExd-w=r,̭Ea ~/8mn!$Da.eU%xYB=uns cnG9l0粍#c=oRk)ǷfMJ3qZw(=Em'$dt~v-D}#l]j7o#Xw2x vgz'sXN9g C})7Xc->tHQ9 yan\foOM{uxR;'٥F=(WCyJna[m#լEĹK5l1``:&ҿo|q)pN5c1,]PTX |ϞyN{q}B2ph,ʳ=#p,^u54&b\qEK܉ӤOxdcS'CnޤfHqwZѭÃ`6-J+O1hTw^ډ,LF71J#lS!vo؈x1p60\T$ᕝPƄ$UZ]QWM0JV$ `A$2\=~WX F&Fj䵆0v0aF @;|do #j3?;eM+ {?k/>/і0Ա$oʢHa.%K^0|F$ː 03dlL!J]V.nk*3aXyd̯o&kŪe7hW4o u!Ϸl*&9*}jLL<=ﻁa=T) xٓ 7p#ޒBz+ XpT$<}yAّP6y <هGYF=%8i^FvYsvݖbQ~U?#*?-I. BеXV1j? ū)zKf--#pC 'r'o]YdX= k`mzsg9Ӷ 8@Ya4pv7v%^s-yMoUOyR\Ɩ%LrM\<~ =a أ^OOd>2.9%~_Y~iOnS8W35-,ϽzWd?naNz.߆&+}3#r2"6~C/é}+O/MkS4i}lcnChϙgMYD~C_99w _o#unxg 4{*@' +E j>; 2k3G KCu?WgE$5+f]pT4X1{M/a2"`VI ^R,:%i4IC- k 3=b N=ĝ O:~FV Iպ㑃b2|zt_J4`^Y*TqZ|3$ͤN_{"U#==ůjLt9L˸wPkc}rי)!HҶR%3 ~0vF DD$0{|/qNS&n?S_1ԡuYhԗ d'iΪY~dvS/]\Xfi!RRr[>:P>kmw*mr^~-qګSY]$=#t5PmEyzO`| K7foD{U4\fHcٳ K`FѬP].tXUƙUvyW'C2fBm8T|ueKun0xȎe⤄wbyi+KM񛉒C- ju5e).P j칗'Ǖ Nu`"]`O:]ې\h|Gcg 8Nb-ubVg/y Xfâl>kNv3W#r-B^Џv.#خik51TA^v4V}|{ar^@-l\_GB?R\#QwBE HȖJ„rFbsB3bzh?әX^Eܤ)Sg*~yJ*ΫMp6kgv I$\  wm_4#r߿Ctd]=ӿR(Í163e͍Fd) u8|cV2H̖ qEt{ a!J#se5Z/%ʉv$.f WUZP'/7qwSjt?0,6u*NJ恜Dr&/kEfC0eE9m3:vЎ 00pUvę@?ѳ&w_\l)FY A 12TvM?e. S*g=+ ܻCRœ 60bfvvIKDʷ8M #cCv^I%̢kbL 2;ߎvv9FNWLPs]wӚ$dR>xӨj] SbsۖZJ{W6k@>V1(rU1<礈=zM˺Td SQf @fj.:EIqSƧJ渦qa3:i3;O"BǪWJnxX,::c /4t&8 rkT(} sEQ~,Cw%VsP3q|r@g_Avʈ7o+6M+sBb=L:b s%Q)ъkza.j籼k0t V5L,(ŲRP*ID:d.w+Ch-/D`h\!ci u:*N v{vzA7`TߣW,|bI J_X~׳Lzî'1|B;8S/m|TYty\LjΏ7X!MGIkZj9 3At$Ԯ'Y'rKwx$ M]lhY?[-Hx~l'w+ݦ2ۙ Iv>ClxZ"^i07E;,n)o,UrI|r+`~Yk] A=:Aĵi ˞0ZM}Ϛ{ڗ-FLiI~Z(H};",Х0ŧqJ+7$'lhH(E 0(rbcX\E[$0IwЎ+p.g·$@&y<|ns72aXti%ޒGR3a[ԏ'$bs$%-Y=GҪ(YTŻ(''ZXt~nȻ0B5.rSc{ǁ@܌h 2_/tOs#'?)ǀ}qڄʦL 6|1I7 QtജNVjYnNT6x~C4si :͢Q܏&=ɐ;}#غ}HbV#AS+אwa\u_׌۔ &EauRǐ `'--mzu65{mLvvCb@sl y$qqF`|9p3yCrN5kENF}&D'Gv.CIU6 8VtI>S^s 毛`Gr 㵺'[7|[7If-[˭ tdy ~hnvͲORsgaD簚LQkDzX0"\ٮ 3e-A8ȶ?\CƯ:-._Eq,}kN#0'7^,K;&1Ⓚ]6%mܳDm@`g>.>nA'U5UҮ}O8qQMzNxՓI.̹ԶD4}_b<'L/¶)uٱlw}O _W%pzdg=[x|c d[Um' t|Gh AeVG: rP, [_4 %٥|}[țnm8X4`]l|vnW;$ F]7 3򧾰ݼc4r*)ғfZ^#8Ē(6k*8z'ޛeWN){`k'|*؃1av:VS*@JbAY϶ ^sYpAB=zPr$MAhd UK z'@R.L-P+jΥ/ OpGþ\²IjmX+ 6_G?wyeӨOJ _)0wn_5G?};w4 b?$_&2Zw$G3?d{~%va?k:s?lo&>2e ͜iQhdĄL@ݥ<-lw5arue+[ UBi]0\3n6X폕z:Q6Ɂ* NK9a;P Qˬ$u=6 rwčY/ rA_p-Ϝ[BpjnÑ 7=wFـ-4{[]OPYL,+T+ x%v4 µ 95v_Z.}3_@φ JMDtGsh? Q2f84:Ap#z6:bJIOŎc1XJ? kEҎʁ#:} 4*jEnF7DFI"6ARéx[89 hkdA#&h_\mFkx67d%4 t@%uF 7P_,"7! fY, }5&PbPj.cKJJApB\υNX,w\W̌r_`9(B0U 8b;6M Dǖ{7f^G*m8"eYp)I`BYE3Y܉>e!Us.]98\P#A)zUn8vp`_*-:ƴ n2I+]x΀DI]Z00z~u,7 1Qji-,aIҁĤizZl2r */Bz%!lj^OnR{?–o#{AMnYQuYeh`_z+:NaO~w[Nhs| MDg4-QKFpqֱ-N)y.2=Ji_d$\t@Pz ٹYH/ȺG Lxڒy5oa̷ĚbʴUQ1PtϹNiQ=-"QPM9L>C67 tXbyF-spǵw)Jsϯ*ve[ 9 ~.O\”Te)AxPzxq)5PSԱ>hoIWwrPhKc8Z7#%.8'Ow| Aµl S) Y}HkֵF#>uy: \g}^gwA%-5EWz1Ӌ-MB+@>[A|G:ҽ2IVg깒nIlPHo} 1)55;QfL-B*g|Y%Nx܁1'vxgj%tC_?O)?#eWQ>+Ǣ>=`-V>==l'-?'ХuH1ݐT{-=5F!ODKacJfdb1!d"jF4-u@4f?klaR)w|/Fi+m*Q#$MFO72 M^PmԛLba͈(4>-rS;_``盒n;Wٟ>Ɵ[êߘ>b=@R Xsl,RauI< ~*͢V.ǁ,ˈQ=E}JyG?SAijL̅#FDn4Ђۚ=DAz"IQ6˟I7!Z8Bxե"Q.5J3eL ʡt.=Cn²`Ep~ Yq*݁`m6gF& H1bas_qowMNo0d30 1m4#59IfYc-L$SܡdY̆ #^ӌoR~;DmI^IcP.ksƸξWۺq0 ;F~=uV+cmʂA=v/2uaZ7kOLFFDQ5>vYvJ&;B}aCF]wuv)ֹ%2TQs_cot xX" z4"2$(!E#Q~Fw< $VߧB .bl7ئPS9A8VL;Rk_ݴ`wtn|&a/XnlCi,^֖U(^[(с⫂~W*V"yX2 Nդrtz' NՖܹr>{M=8qD:˵Ct06ŕ8li4y6 2 #eK]qϼ )_GX 9t$wL3`Aî?^]yr.|<%5j^t/}"LQ[ܳ5HW{k;^sǕ 󝅊7{kZԲ DC#EPo; !BssLw~% do;c?FJۃu F ,X?SHUŽYɂ1XLXWhE%Hcui^lًؖXo̯&Msn2z \9}51ށy,VmecWK<՟\ɭʢ ~Xb.S/+ZNSWg|Hܤ7=&$kc\(͏K3?DbRQaq6n8}Z7"vTBN]*USS=^2f tW}@\?܌ꙀD9qPvJ^b0(L_g!\Xx]IdW-Kuf)4ٶM$* ssrnU]ؓk$8v=buBu~^H jyjFl)C"!о֑+m* C(f2jXo.T/rk/O/ʆj~gWg|NUCp!M7!ˈӦ=vQ ݺt #57xA%^S"uk8$Tso}B7V^ub_YSk@.sW)o2LӉRѴɓ'ռ!,ɑQdZ/ ` 51sU{Fwv^$e!R|;[ =!+ Uj?wVt7Ow/]x.b6tJ%Ӡn &8$FDŽeg\1Ʋ;յ;:˒m!2&$ULElӱXBI ֥Oۊ05(''e|Uo*q*V':n)uN8;_wР/^V (obmϓm\hk^'~OFB?w"n[hQK<*ӊpJ&sqWy8~HkjiD6ZP 'n\7`Ac$w|ٔ'jeQ"*)Eb<X_@=f|Gi> endobj 15 0 obj << /Type /ObjStm /N 61 /First 474 /Length 3079 /Filter /FlateDecode >> stream xZ[sG~ׯP[-*Uc 8x=,9҈@~~{$FA6ڇT٭߹|=bIQe3mc*0JYUX`pYO/{dT2Y u^0,FS$GՠBya(Ţ?h0}yc|i#zP%74U’kpoJwS=U:E"jQ'*Ub%d:.k(?+?b—qVPdH !>`U`eQWAQ쇃+!pJ! m2wV#ثy}3$DR|PӃuhd=XGj=>{ŬL^ѧE?&j|It MF[žG4ctr,s9Ədzj}P]\=3_W $OrT^ī|8Qg_NO%/j:__ϼFÒ_d?NKb0sY5| |e||YLףb^d\ɛ2a퀦 >r']cSQomwo-wo#'ۊo#ooj}ۘn|u}}-NJ`aXjR_+&} U^zk P>UG`;u'EJIw(RBn6Esq8gB" ԡ|RэaΛ>]xB_zr$a4qs "ڥHRa=N]XĚ,D̉[v$I`S+r%.uGz`!c5m%zKT t Ʋ1ڒR)\ՔϻU  2$:hb`2pMn7>.O"4ɘ mɯ6BE7[I^M.l+ȁMI&J'gL<m)LX$#G~%|/H/-% $%}Z %Enj*%},) ~x֗Kz&)zE@cCJ AR$]%ʎr"ֻܝW Q4KTSͥ ~jӶF5)())6u?F*sKԾu4ìFlT2Gp1E(K]sf=DZMl6"f|r =s׉|bܥfUkj*J+mr[P.D5eXPdpH-W '9*ʥ r[H~ 7m6jұDvk-$a7ZROJF >:БAjm")s Ħ/EDQſ]>MSQ/yÛG\t&Fi]4S%{1 yyf#;5K4 6 zmDb US1m 4#YDTHA6srNdC4R}՗멤҆tņ(& 3iJt~vSh-4zHgIs4;eL[o:ڰI%n-Y9-=SU4-3і·TyYpPꦞL1*KQq{hftK\D.Nlq.\{(.FrT2--.LBAU1[1?'5 >%W|'x~oi5)Ƀ Zl]_s)n GG!'ц/Zqv-gjXnFŗUC[z|/OhH\cy 4 ^m.\yS٨]k.O^{zt1nc-+٭o50f0{O=O`XP$}u]Sgg> _o|ɛ _J%R|x [(_`N%>`V(߇Q]$+p)X ~,h`2!()9ň_O%̧\&2FzI^ڔL|sq ~e?&|??_w/%mc wvsF{]2w SZP~]l߉#Ϗ_HЊ9Ron \4!I!8L}`}} Nys¸ fQ8oOƜ2H8p nt`^8;zL!‡~Z\EKXJao D-A,i[U9$w8_"NFbJ| LY9$(3c9UD$D#ÏL"XQ73!f0_㒝g䚟:&¨.met+ ѹskWnm3>J^ Myht%Ϛ䲗ŵ~J_.: endstream endobj 86 0 obj << /Type /XRef /Index [0 87] /Size 87 /W [1 3 1] /Root 84 0 R /Info 85 0 R /ID [<81ABFAD6DB02C5891116FC3D4E724D4B> <81ABFAD6DB02C5891116FC3D4E724D4B>] /Length 247 /Filter /FlateDecode >> stream x%K.PsR*Z-zTի(Z$e:0`  t ;SsL~ͽ~jW숲Xb[Ė Шy/*D3DH_{="*zE(?tDGĠq1L4!FWI1&R"-ń1%ŌYWrͧkhG\{ʵ@|?DǕ'K%~*M2*_U CµP&y0 ,#1 endstream endobj startxref 168366 %%EOF survey/inst/doc/nwtco-subcohort.rda0000644000176200001440000000166512242746122017173 0ustar liggesusersY9A,]x Xkx/@ƠVUfFDF{22./߿rbwϻo?>}~o~5z\պި}ݵe +sZ}=}#|vd߳+nh{WשЕv*v+}j|OٸE! (B95_U:=ۅgC}|b y@5ĭw+6\⻋w}PQ9(~?,q+]xY;876u翳[ydtuXXP}qv®OU{Yzy]GVݕ(^4*}uY/;djvzY@=q;ہ+@ VՏo(\ƫ:_fկ,XЅ6ounj]sdt|A(;Ϲ+*M>Q7n~Y}WB7<AUi]|UV?.}>xf>5W>ۥOq]__ˢ:tٞl/;Z]S͗,ނ͋ѝfDmw^Qq#]Γh9<>Ghu>fCclTMvXۮsUt+?<EW#(Gr*OPq?vՇj|/\ջү\Vxut}@wi֎<^]o+ޣkE|bWW\gQ·]y7x(\xS5łVÍGsW,Ab?H~survey/inst/doc/phase1.Rnw0000644000176200001440000001221312372242764015212 0ustar liggesusers\documentclass{article} \usepackage{url} \addtolength{\topmargin}{-0.5in} \addtolength{\textheight}{0.75in} \addtolength{\oddsidemargin}{-0.5in} \addtolength{\textwidth}{1in} %\VignetteIndexEntry{Obsolete formulas for two-phase variances} \usepackage{Sweave} \author{Thomas Lumley} \title{Obsolete formulas for two-phase variances} \begin{document} \maketitle This document explains the computation of variances for totals in two-phase designs before version 3.15, or using \texttt{method=''approx''}. Since version 3.15 the variances are computed directly using a sparse-matrix representation of the covariance of sampling indicators, and agree exactly with the formulas in Section 9.3 of S\"arndal, Swensson, and Wretman. Variances for other statistics are computed by the delta-method from the variance of the total of the estimating functions. The variance formulas come from conditioning on the sample selected in the first phase $$\textrm{var}[\hat T]=E\left[\textrm{var}\left[\hat T|\textrm{phase 1}\right]\right]+\textrm{var}\left[E\left[\hat T|\textrm{phase 1}\right]\right]$$ The first term is estimated by the variance of $\hat T$ considering the phase one sample as the fixed population, and so uses the same computations as any single-phase design. The second term is the variance of $\hat T$ if complete data were available for the phase-one sample. This takes a little more work. The variance computations for a stratified, clustered, multistage design involve recursively computing a within-stratum variance for the total over sampling units at the next stage. That is, we want to compute $$s^2=\frac{1}{n-1}\sum_{i=1}^n (X_i-\bar X)$$ where $X_i$ are $\pi$-expanded observations, perhaps summed over sampling units. A natural estimator of $s^2$ when only some observations are present in the phase-two sample is $$\hat s^2=\frac{1}{n-1}\sum_{i=1}^n \frac{R_i}{\pi_i} (X_i-\hat{\bar X})$$ where $\pi_i$ is the probability that $X_i$ is available and $R_i$ is the indicator that $X_i$ is available. We also need an estimator for $\bar X$, and a natural one is $$\hat{\bar X}=\frac{1}{n}\sum_{i=1}^n \frac{R_i}{\pi_i}X_i$$ This is not an unbiased estimator of $s^2$ unless $\hat{\bar X}=\bar X$, but the bias is of order $O(n_2^{-1})$ where $n_2=\sum_i R_i$ is the number of phase-two observations. If the phase-one design involves only a single stage of sampling then $X_i$ is $Y_i/p_i$, where $Y_i$ is the observed value and $p_i$ is the phase-one sampling probability. For multistage phase-one designs (not yet implemented) $X_i$ will be more complicated, but still feasible to automate. This example shows the unbiased phase-one estimate (from Takahiro Tsuchiya) and the estimate I use, in a situation where the phase two sample is quite small. First we read the data \begin{verbatim} rei<-read.table(textConnection( " id N n.a h n.ah n.h sub y 1 1 300 20 1 12 5 TRUE 1 2 2 300 20 1 12 5 TRUE 2 3 3 300 20 1 12 5 TRUE 3 4 4 300 20 1 12 5 TRUE 4 5 5 300 20 1 12 5 TRUE 5 6 6 300 20 1 12 5 FALSE NA 7 7 300 20 1 12 5 FALSE NA 8 8 300 20 1 12 5 FALSE NA 9 9 300 20 1 12 5 FALSE NA 10 10 300 20 1 12 5 FALSE NA 11 11 300 20 1 12 5 FALSE NA 12 12 300 20 1 12 5 FALSE NA 13 13 300 20 2 8 3 TRUE 6 14 14 300 20 2 8 3 TRUE 7 15 15 300 20 2 8 3 TRUE 8 16 16 300 20 2 8 3 FALSE NA 17 17 300 20 2 8 3 FALSE NA 18 18 300 20 2 8 3 FALSE NA 19 19 300 20 2 8 3 FALSE NA 20 20 300 20 2 8 3 FALSE NA "), header=TRUE) \end{verbatim} <>= rei<-read.table(textConnection( " id N n.a h n.ah n.h sub y 1 1 300 20 1 12 5 TRUE 1 2 2 300 20 1 12 5 TRUE 2 3 3 300 20 1 12 5 TRUE 3 4 4 300 20 1 12 5 TRUE 4 5 5 300 20 1 12 5 TRUE 5 6 6 300 20 1 12 5 FALSE NA 7 7 300 20 1 12 5 FALSE NA 8 8 300 20 1 12 5 FALSE NA 9 9 300 20 1 12 5 FALSE NA 10 10 300 20 1 12 5 FALSE NA 11 11 300 20 1 12 5 FALSE NA 12 12 300 20 1 12 5 FALSE NA 13 13 300 20 2 8 3 TRUE 6 14 14 300 20 2 8 3 TRUE 7 15 15 300 20 2 8 3 TRUE 8 16 16 300 20 2 8 3 FALSE NA 17 17 300 20 2 8 3 FALSE NA 18 18 300 20 2 8 3 FALSE NA 19 19 300 20 2 8 3 FALSE NA 20 20 300 20 2 8 3 FALSE NA "), header=TRUE) @ Now, construct a two-phase design object and compute the total of \verb=y= <<>>= library(survey) des.rei <- twophase(id=list(~id,~id), strata=list(NULL,~h), fpc=list(~N,NULL), subset=~sub, data=rei) tot<- svytotal(~y, des.rei) @ The unbiased estimator is given by equation 9.4.14 of S\"arndal, Swensson, \& Wretman. <<>>= rei$w.ah <- rei$n.ah / rei$n.a a.rei <- aggregate(rei, by=list(rei$h), mean, na.rm=TRUE) a.rei$S.ysh <- tapply(rei$y, rei$h, var, na.rm=TRUE) a.rei$y.u <- sum(a.rei$w.ah * a.rei$y) a.rei$f<-with(a.rei, n.a/N) a.rei$delta.h<-with(a.rei, (1/n.h)*(n.a-n.ah)/(n.a-1)) Vphase1<-with(a.rei, sum(N*N*((1-f)/n.a)*( w.ah*(1-delta.h)*S.ysh+ ((n.a)/(n.a-1))*w.ah*(y-y.u)^2))) @ The phase-two contributions (not shown) are identical. The phase-one contributions are quite close <<>>= Vphase1 attr(vcov(tot),"phases")$phase1 @ \end{document} survey/inst/doc/survey.Rnw0000644000176200001440000000670612372242764015400 0ustar liggesusers\documentclass{article} \usepackage{url} %\VignetteIndexEntry{A survey analysis example} \usepackage{Sweave} \author{Thomas Lumley} \title{A survey analysis example} \begin{document} \maketitle This document provides a simple example analysis of a survey data set, a subsample from the California Academic Performance Index, an annual set of tests used to evaluate California schools. The API website, including the original data files are at \url{http://api.cde.ca.gov}. The subsample was generated as a teaching example by Academic Technology Services at UCLA and was obtained from \url{http://www.ats.ucla.edu/stat/stata/Library/svy_survey.htm}. We have a cluster sample in which 15 school districts were sampled and then all schools in each district. This is in the data frame \texttt{apiclus1}, loaded with \texttt{data(api)}. The two-stage sample is defined by the sampling unit (\texttt{dnum}) and the population size(\texttt{fpc}). Sampling weights are computed from the population sizes, but could be provided separately. <<>>= library(survey) data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) @ The \texttt{svydesign} function returns an object containing the survey data and metadata. <<>>= summary(dclus1) @ We can compute summary statistics to estimate the mean, median, and quartiles of the Academic Performance Index in the year 2000, the number of elementary, middle, and high schools in the state, the total number of students, and the proportion who took the test. Each function takes a formula object describing the variables and a survey design object containing the data. <<>>= svymean(~api00, dclus1) svyquantile(~api00, dclus1, quantile=c(0.25,0.5,0.75), ci=TRUE) svytotal(~stype, dclus1) svytotal(~enroll, dclus1) svyratio(~api.stu,~enroll, dclus1) @ The ordinary R subsetting functions \verb'[' and \texttt{subset} work correctly on these survey objects, carrying along the metadata needed for valid standard errors. Here we compute the proportion of high school students who took the test <<>>= svyratio(~api.stu, ~enroll, design=subset(dclus1, stype=="H")) @ The warnings referred to in the output occured because several school districts have only one high school sampled, making the second stage standard error estimation unreliable. Specifying a large number of variables is made easier by the \texttt{make.formula} function <<>>= vars<-names(apiclus1)[c(12:13,16:23,27:37)] svymean(make.formula(vars),dclus1,na.rm=TRUE) @ Summary statistics for subsets can also be computed with \texttt{svyby}. Here we compute the average proportion of ``English language learners'' and of students eligible for subsidized school meals for elementary, middle, and high schools <<>>= svyby(~ell+meals, ~stype, design=dclus1, svymean) @ Regression models show that these socieconomic variables predict API score and whether the school achieved its API target <<>>= regmodel <- svyglm(api00~ell+meals,design=dclus1) logitmodel <- svyglm(I(sch.wide=="Yes")~ell+meals, design=dclus1, family=quasibinomial()) summary(regmodel) summary(logitmodel) @ We can calibrate the sampling using the statewide total for the previous year's API <<>>= gclus1 <- calibrate(dclus1, formula=~api99, population=c(6194, 3914069)) @ which improves estimation of some quantities <<>>= svymean(~api00, gclus1) svyquantile(~api00, gclus1, quantile=c(0.25,0.5,0.75), ci=TRUE) svytotal(~stype, gclus1) svytotal(~enroll, gclus1) svyratio(~api.stu,~enroll, gclus1) @ \end{document} survey/inst/doc/pps.Rnw0000644000176200001440000001455112372242764014642 0ustar liggesusers\documentclass{article} \usepackage{url} \addtolength{\topmargin}{-0.5in} \addtolength{\textheight}{0.75in} \addtolength{\oddsidemargin}{-0.5in} \addtolength{\textwidth}{1in} %\VignetteIndexEntry{Analysing PPS designs} \usepackage{Sweave} \author{Thomas Lumley} \title{Describing PPS designs to R} \begin{document} \maketitle The survey package has always supported PPS (ie, arbitrary unequal probability) sampling with replacement, or using the with-replacement single-stage approximation to a multistage design. No special notation is required: just specify the correct sampling weights. Version 3.11 added an another approximation for PPS sampling without replacement, and version 3.16 added more support. There are two broad classes of estimators for PPS sampling without replacement: approximations to the Horvitz--Thompson and Yates--Grundy estimators based on approximating the pairwise sampling probabilities, and estimators of H\'ajek type that attempt to recover the extra precision of a without-replacement design by conditioning on the estimated population size. \subsection*{Direct approximations} Using the standard recursive algorithm for stratified multistage sampling when one or more stages are actually PPS gives an approximation due to Brewer. This is simple to compute, always non-negative, and appears to be fairly efficient. \subsection*{Approximating $\pi_{ij}$} Given the pairwise sampling probabilities $\pi_{ij}$ we can define the weighted covariance of sampling indicators $$\check{\Delta}_{ij} = 1-\frac{\pi_i\pi_j}{\pi_{ij}}$$ and the weighted observations $$\check{x}_i=\frac{1}{\pi_i}x_i.$$ Two unbiased estimators of the variance of the total of $x$ are the Horvitz--Thompson estimator $$\hat V_{HT}= \sum_{i,j=1}^n \check{\Delta}\check{x}_i\check{x}_j$$ and the Yates--Grundy(--Sen) estimator $$\hat V_{YG}= \frac{1}{2}\sum_{i,j=1}^n \check{\Delta}(\check{x}_i-\check{x}_j)^2$$ The Yates--Grundy estimator appears to be preferred in most comparisons. It is always non-negative (up to rounding error, at least). In principle, $\pi_{ij}$ might not be available and various approximations have been proposed. The (truncated) Hartley--Rao approximation is $$\check{\Delta}_{ij}=1-\frac{n-\pi_i-\pi_j+\sum_{k=1}^N\pi^2_k/n}{n-1}$$ which requires knowing $\pi_i$ for all units in the population. The population sum can be estimated from the sample, giving a further approximation $$\check{\Delta}_{ij}=1-\frac{n-\pi_i-\pi_j+\sum_{k=1}^n\pi_k/n}{n-1}.$$ that requires only the sample $\pi_i$. Overton's approximation is $$\check{\Delta}_{ij}=1-\frac{n-(\pi_i+\pi_j)/2}{n-1}$$ which also requires only the sample $\pi_i$. In practice, given modern computing power, $\pi_{ij}$ should be available either explicitly or by simulation, so the Hartley--Rao and Overton approximations are not particularly useful. \subsection{Using the PPS estimators} At the moment, only Brewer's approximation can be used as a component of multistage sampling, though for any sampling design it is possible to work out the joint sampling probabilities and use the other approaches. The other approaches can be used for cluster sampling or for sampling of individual units. This is likely to change in the future. To specify a PPS design, the sampling probabilities must be given in the \texttt{prob} argument of \texttt{svydesign}, or in the \texttt{fpc} argument, with \texttt{prob} and \texttt{weight} unspecified. In addition, it is necessary to specify which PPS computation should be used, with the \texttt{pps} argument. The optional \texttt{variance} argument specifies the Horvitz--Thompson (\texttt{variance="HT"}) or Yates--Grundy (\texttt{variance="YG"}) estimator, with the default being \texttt{"HT"}. Some estimators require information in addition to the sampling probabilities for units in the sample. This information is supplied to the \texttt{pps=} argument of \texttt{svydesign} using wrapper functions that create objects with appropriate classes. To specify the population sum $\sum pi_i^2/n$ needed for the Hartley--Rao approximation, use \texttt{HR()}, and to specify a matrix of pairwise sampling probabilities use \texttt{ppsmat()}. The function \texttt{HR()} without an argument will use the Hartley--Rao approximation and estimate the population sum from the sample. The data set \texttt{election} contains county-level voting data from the 2004 US presidential elections, with a PPS sample of size 40 taken using Till\'e's splitting method, from the \texttt{sampling} package. The sampling probabilities vary widely, with Los Angeles County having a probability of 0.9 and many small counties having probabilities less than 0.0005. <<>>= library(survey) data(election) summary(election$p) summary(election_pps$p) @ Some possible survey design specifications for these data are: <<>>= ## Hajek type dpps_br<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") ## Horvitz-Thompson type dpps_ov<- svydesign(id=~1, fpc=~p, data=election_pps, pps="overton") dpps_hr<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40)) dpps_hr1<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR()) dpps_ht<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob)) ## Yates-Grundy type dpps_yg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob),variance="YG") dpps_hryg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40),variance="YG") ## The with-replacement approximation dppswr <-svydesign(id=~1, probs=~p, data=election_pps) @ All the without-replacement design objects except for Brewer's method include a matrix $\check{\Delta}$. These can be visualized with the \texttt{image()} method. These plots use the \texttt{lattice} package and so need \texttt{show()} to display them inside a program: <>= show(image(dpps_ht)) @ <>= show(image(dpps_ov)) @ In this example there are more negative entries in $\check{\Delta}$ with the approximate methods than when the full pairwise sampling matrix is supplied. The estimated totals are the same with all the methods, but the standard errors are not. <<>>= svytotal(~Bush+Kerry+Nader, dpps_ht) svytotal(~Bush+Kerry+Nader, dpps_yg) svytotal(~Bush+Kerry+Nader, dpps_hr) svytotal(~Bush+Kerry+Nader, dpps_hryg) svytotal(~Bush+Kerry+Nader, dpps_hr1) svytotal(~Bush+Kerry+Nader, dpps_br) svytotal(~Bush+Kerry+Nader, dpps_ov) svytotal(~Bush+Kerry+Nader, dppswr) @ \end{document} survey/inst/doc/epi.pdf0000644000176200001440000040557113122573410014613 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2472 /Filter /FlateDecode >> stream xɮF`BO H a(Ob"HE0>ٹ́bWoq4{|YgQ8K7y8{\~<<[x~,oC7BM0\znon9{՛ q&lf~B완 c陸L$A7K|$&y' BKxf'a,88-LYS+)qaDQq1!< m;-3DW4Ŏ*^-Y-?h֊|F-uu_H #+;8J{T;uD~E&U(h 50sB yxɫĩ?1PNd= 0O{CZp )n!U Ke`fK&h+4b_JDRS"r@/ySh6ʷ/v/VETkƲB#;i5h/x-Tw9.cr9?Z[w$-a(lk;ayD:jD1+DUCYw@5B@Ai0X'k(^u8֥X0,V"@:$ g3r$eƑrep,JuuUU#A8vMfH^0ABF5DV*DA+ӁmT 5CJ.4#凡=Lxt,8" qhv'3#e/{ub/oZDŽ #^WNqrJ0Fյio?8׀hB`vP):HKGQCphӔ!R  hǵf9!VA 5 ώ%ᛱvwB$4%ز̴1Pbi!s҆?{"o(S.W ч[ ȳ&FֶaĿRw~HScOOG1+.,x2ץ3h467hnzp(܄e ޠ%*ds :Aśf2H~+Yjm#C˥ ,huI'4sk- GoL7I4* ݯG$e"{oWXZ LTق )~ #ʚF N4[pܴdXB(n5Ll-aSkjTlP}" #L3OckL(H& ^Jf-%YinB$սO]T m Q 8*}eVT|D/aj1QB6 ׼>UrlƆk ^vc.3FyBj5Z2S fvm$7eXqFpVMUn'vԩI`MK IS#XO.:c, )nd1O],SJp %4QRx9pgu#^sl|۫w %&;{M#ok@:w2h}'j҃wcW rdBPCTXR/)"g`? M`nzJ&k.W KnDе8FFn1^\<%5Hk@:τ7N㞆iS7.E輵n_8"N|WXF!N+.(^? Bx'|yAcǵ>NRTܗmI>segy;|<-CC-AHiƁhq͇t;2H^F GT4|ăs*Zq_V*|VCj>sUTHl%*>fD=>DN{X탶Ic?$.{7!0xz, '{st+Tll Wlg֕; hP: wUSHk4`sԅ?Bq[D|XčMc ({hu/iq"QHN5uց)hF(zRRH|!7ILM2Y򟛐 endstream endobj 14 0 obj << /Length 1788 /Filter /FlateDecode >> stream xYYoF~ϯK)#MI (VڦhIZ$9[rX[v33~ʼn".RF"4聾PѤG݀K=.1^"Ȭ?ǹ+=6I9aVvusl3cGӆdz?Džsk,L67gXY( ~$sދ ,'ڵ@1CX{ ".Xm^8ǘ9`3"fy ~ /LטwR'ۍyIUDa1jY8D+)B͞.[KiŒLVC*Df)2,"UA`5i\_x[U~  *0Z< Biʆۏ7=#X{IO! M1.IbBKG"aEjW_; $ngr.0Q{Jdpn;x:XaL%IZ0{`(όz7e0ut>v]mf6Ђe,Bd:A[ׂ@؄Pߣ^i6i. ]`&|TGMIŽsiH8L_cDxM“]wD߶ }*O/}(wfRש v/ܕ`U[xk }4NZ;w;7Jnum8C#/S')N:T!dgW5a X 4H%=t|4OYY䍪ӑBE{U0S\/#0:Bi^HTh6A-!7ЩXSYJݼ"]tZ% uJkQed%l@ 2*![0`[yej EXFz -E|+"mn%$k#T2(%ɚe$vj#Ρ:lF=e 4#Pb8hW`kCzXQpPa/pF!ugܼ#LR(p)W8PJi8BE] 6.xs| }C |ѧt"kvNŜ3JooU̻AiU5EI H@Uw;]jHQnΓ:;t1f0!>PV.GEd4jh endstream endobj 17 0 obj << /Length 1646 /Filter /FlateDecode >> stream xZmo6_vgd)X lm t0P  vf(>x4mvC>Вog{zu٩ҪEta;E%R.y^hz4D_c9ʋƽLFU^2niA@}Li38ׯ#%Rto@*zD3n Tkk4n-~]'a2TOV9'J`~=2T.XhL$FZ͗Ļ=d>siH=pfݐD.&P{cW@?sV/%f:%tQp[Q!P%d(-bC#bjI_4Bʴ h_ϝ :C;kc!h MGSm}D'&(j#uFdllpK4rcKMsf a5[_o#pnwP@gұEKv_ix%{^G8X\(17w]; lڐx)QmvXq96 v^m7hW;2:qᾲ٥/[sjِ5{,-1ax]u_w$oB9j(zَ>w 5Y&7*z"h]R*2Sn"G1+1Ԇ bHQpaX"s;%}F1$qc@`h5#99ZLJUʴˉo=`VL"0Fzc0+Hq16+loIdDkZIl}r[]=O]I2>;!eYۮ6TsV&v=5w-[_yRb…J 4 YH4HCoeEWG#!YO3̈́ `"r+JYYvԾ Uuy9GDng)t<^,4^ ,"¿`t gf "J`tP&iQG1k0cLcƈ ErVF+:6HSɄUY2X&7 53>v3)% E7* oI2^_.|NG& !H,ϢYDߧ$OEo|Dn|ݡ]E !}+>(by=Kg^.L,]&K?2KW|,YbYyV~4Kg;K$U.%I0Y"$ZJ/O! endstream endobj 20 0 obj << /Length 2722 /Filter /FlateDecode >> stream xڽko C 9|iCg4h%N Q>)kwmyrū̞I]buVIYTgEٿgs3kYsϏiO/rOS~,< kx6 No5ynloO)|n:<Ir{=Z[˜;ҳ1I,SɂĢ+a O5}n2 fb]MO*dfPy!lF8p> !)31F@"d i)I,)yns"TՙI1S}W4' ?a?GgĤ 1cڅS1YU?4SlMɓ0o=c~yLxjP+<{jNvg&qgs_U8u=c~ߝ2[Oh/;n(tpS>׼=q[0!'p#"Q$rKG^_)APo$Lٽ@Fq ސ%Lu$@9ꔐc{4=~Xet^eA`!#>[R(k+f!Һފ!, RAʂi ;X8<16ę^P@漘#ܒo?6 K1O9fO"ְTr^î\f(-E(,ya$Ņzn.}8Z5&,:b۞ fkp`🦀e`ߟ+7{y*DrlIS0,s  v/'FiYV>s *2snK=ig?lǐϤD$,pa!Jù(& K# I_p(gb6T3L=]\"Dw7,daY;m!FbB 7QPL^1 ,@ :NJNPJ!e}ʵL T|:' |UN76awndw.Aueb&E\hPK*|5{u0Y!paͅ ޵4f|.dX/ /|^L]J&R0lEEKQ( #  +3)OFeSXF/duv?g _Gwy$:v/BPuiʫvIK8:\9&$%Oߗ " ʧ-||}-ε;Fq,i檕RׅB!=IZOcF/6nGo>czrPO_J6޳O"氪o\r@*B740ZV!*NYtyh=`lݝ!b7ph\S%YjYj/j.i ۨ& sݨ}znt\P vXAa߇xֽߪ%_J;Vp|xwG3I\يu]=RWW ?U 1زe‘م#Q:&83.O* iM%iE>e[OQc oǎ!7qmY=檗GS9S77^>^ߌuLX/_=p'_x' r@FOT2~hA u3ׇs"j=cKU1{6[9CP>~@[z3El\sPETBRuW;e3\HK;[G !WPVkv 2+&q2Wmp+C3ftʩ2ܓr^g%sy 숩/hFd|jR--> ;Q=TN`FNu]KQ1qQJ!$Uk^ "1vc,=Myx*} GܹHZTl|v`+}665Y5Yv!8a!ߨ4w s& ۅfIN tK-W=@jAl踮;ij~KB8V=P%)Xg=*hU(31=q06ĕ>67emZH.w:7~=l endstream endobj 25 0 obj << /Length 1778 /Filter /FlateDecode >> stream xYmo6_a &7*z-]a@3 E[`l˳#u([AL{$'IiM\\ēWl̻^ɿz3o7^<ٕyH0ߋ s.ixULɋm jt>#DύX_)E>LyU0_+El8 N)v[ڼYƫe;}$yL!>iQփ_*ʤ^o`Hkyơ\O *U37 q.cC1 J7͠2Ԯ3کR L91JF(v }2c. {,֐5A ٯP)b|$ tit^+U-EUz&WLYEi|2s9QtK+y/P Xm6-S}S)=3wXFlү~@Έk}{-ˊE?6*HU~aY?EF^^&F e%`S2g-j?k14&X$Iwuv3L(c7L2VWw$0>%XJ^o7cƘ(zK58F+/qF @`wj^;62ǂXH»lr[[8:U~(?u)\DAle ,.#&bxRn, X.Ot fkHD_w%.!m{ 9—JbhC԰q;[ቧ!vѽtu#;=|#v*V\%ْܚOB6T] :vS|L2`i}%}FkyGC8ݵ=tsdzK}Fy\DH/Bϰ{l =zھ"C [; 5Mq*ps*%6՘1- @^t|$`WMvQekCW:2jQVƗQE2SZgr~9kޤ]ޣ?x"\@>_{~v C endstream endobj 29 0 obj << /Length 2055 /Filter /FlateDecode >> stream xn6}DZG.vSJbԶ\ɉ7Eo/98$Q$r8 ?y9'Wa:9~EE6I dr6< RjתUS7΂9Uשyl0qҰP/W$T۪V֨R20G8U`jj{BnFh@C4W->ژ`CBP-"0jf]N@K Ygs4$ ua"GteLS \D5Ն.Q3iPPzgk{ =ee袰S?`Os7JmyRW`e]nxV M\t{29ݑfƻHV=6ۘCDആP̰"^^=EX ZB"{9Fj,6 fE?±osg2 ֦P2U3:y;(6BO;%Pۊ#U_u@|!|5/|`|1q!/c¿L\T] gxu'BI *QwwzȬAhwHtŇqah%VٕX_h ZBb;_#Zokr:8D >CGNpzBp4.0t;yh9uRc qtUK.cQ\O4]7d{wO9zx7 cgμpQ7CyI/Vdo2|/Ʊh~8_4kLSyIs sWQR#t"nRjxqcd$.;﹂LGB/}˿+'Ti ? WFNj2+{> stream xXKoFWAb"REMQ- IU(ۻ; XvÚ{vw{uM6ɽ7S~r/,W_J@z٧Nfe?hzo 79Q^ k%ψ`<W4,*͓()%Wqm]ӹrF7iL׬ywtgMP@a=nAKgx%DcK]Sb(kL&BR/Jp7d5WƻOeRƺk =V6(E2/W̩b拤Ss5kneF VdڵO֫Z63~Xb@tZX] Ρ00럦{߀8[I?͔sʨRRy nUG^3o>=ԸRhI_]NL ] {KW] c!wkу-hVyKT#,3GL(EJYQϛ+:%&TQ,j.r̋|/S2@5,f{h45eVu1$`*k1W*¤uK@Y vױ~ t#-c%Tme^'(]w԰,ml$O=Q> stream xڭXYo8~DHUlhz PtjˎXN}DI`hS<3郇/ܨLJt6RJ'#[ft:+z?vyT,ˢXEU/Wv^ᄎ.Ʊ._\Xagmv+Lq^6 w5j%\v_ r.K.z>=~"ׁYjF)IA;>yB-ʀB41& hql43#h A cjR:deJa,DJ\Mgv"c -]dM\Z= ք@2V*)& +a&z?y'rd עm~o2ےkQ ϼ^3BS>ܧq\:7>8YO{h{? K8F >siOѸZT] _&*0*$u5V1:@WX\Jm UeRE^buuʺqҼpYB+X!}\ @˩ߧd\ #upLMɃI}s- 9JgRyTR2drTpVFV1{2 *|r!B{BuK"| x/TD&oret A4{@NyImÏ9%ЊˀVe< ,VtƥA<]S*en!!6k '40QH[e4n/2op@ۛOHI[-Y gRQN)\ *Hf7$Qama$8G.EB{~N.^U(SP+7I6;*4`<ߴ#|e.2PfVIɄQyH~T-Ko] s:S[=ǿ/p菱vQ;oHV) :M\`&З|#[Tax}Jُ-V[v{ue,_ X1>y*.'cm:, v}qy By):=?L̳/vjYJ0J)W;p;5stcgX bH 4'* yHmM/9^ 8R8*.Yv4і~[2:U`)GŅh:ݚsM\($ܡ]䦈KX ښd.N7T֤h<st`YFOƾ112yoH(xoΤ]z0w̓%K~"4|7g}-[jc<~hA`xg]~N"WR&zY-D]0O"')Wk8-?;']n/V|Bj֐mGTs]ݔw%]/mӱ.gjfmf;ae^rM3%]]&&p㮊XL-XeMr܃@ endstream endobj 47 0 obj << /Length1 1704 /Length2 9720 /Length3 0 /Length 10806 /Filter /FlateDecode >> stream xڍT6 HIK7C7Cwww0 0Cw "%ݥt49soZ<{?V[S iy1ΐ1 !p+L_ 98hy>5\aU/gGPGH-+\ 40jX??,`V  OcE0 B<+(rrKr|]  r5#@C P0z*-7O_;_ѿAa`W7 A!-Eu.O_Ofrp}y G2:C<=<οgNx 0[9WwP8x~.  l~a4Aݽ *qM!nnn!A;sm~!( `8$jyyCp/HP0xxP'ba ?? 0~_ u9C㊁rƊSV)AGbU`v?}<XZVt}T.͹xGg ;Rrv'@b<*q 4\wT#ȟ+l>O.>F"b ;)? hz@?-Nn=nx.wI @p8QJub x.` }Bm #a^Po$΁< a Q>F  <"?7Ƿƣ?籽7/X__1ǿ /x*^㱐n ?UA0B 0+X,ұ. 4Q:+g"'Z*k5LM %W:wV) 2}TO)9w Ü"v2{ h\|R+2=S#yW>ř`B4>Cgvor(?@9HqC>|g4_$HQ08RQ8BjR|F 뼻Wmd21QTlHy}#R-cey"B^Kb+0'j_.@@te,^Z2|a8-:nљefBԄSmP2Er/n.*m3x GEa?1:ptOD ]: sJՍMBb4H~;?TRCdPPx_9Ko#LXͱk[= %2;ʭwז!x`|U o4-rKt@5}L!? ꓛ.fi{X)Jeër)sGK讙{Vs :WAN/2O}8V$Z %!jlFH 5V?cP&9Ĥ%'}<,_uLxRݪU y3p>}[Mރ*vn1FCJv+H: q%LU `-?ky  XF+ZCb N6*즰o3>![ջFs -э(p*@`י܏M'2d(jF$Ygp7աTuϼ&4襮1&a2|tg^.\EJ\G >GIauBhy;i'GW[+~Z\okV\є|y;j dߞft8B2ӦV<>f˓}}UA)t\V=%1O\ᙞ‰NBl6\\@ &~sћ,dhXmKȒ!֚QAn|!T ef%h7EG-uQb!HVݕd嶘JJkTI wCVKQ6^)1O]=2/iTm|h4$p6@:!9/Nt+Z^;9K1S>Z |z}UN`{߸_VyE|j&R=F~B(V:^ & HNqX"Y0ol 4J!iqnIRZ/S~H=ւ̟@nb-X0DOAmRQۛJ9sХD+yv-v)Mٵ>[:(QAn=J:<; FU cb]b79y1d׼ CPO\uKMS jܸT "J;эZ\CH)Ó5WEn[dywU;~%ˑJ,GE13ZpBTlSaRD9w#Wc!q?=ՑdyAkL26*3k-|)ˑwpN0ρ{JPXua*ZMf.4fi`?fYy3Sdb? u~WQd}a݈ ;̾a0Q0_shKK'gc?ܶeF_4&YŷZ@B A™3Sò%J~TCqܰ~oDymn9 4ѓ4+ae;6p!eIUXhE=W+)#'A{}c y88> 9ǕбF>>So"#뎿\Yؒ/smB}O7ڋ?|.|\wRW`w##v}`2xa^G[>g2vkah4%3G:ΑQ 0v2sq^/hסj?GtlV#`,ws)xQM=U?JGw^~IՈOI:?ҖhJ2p]:k|x#d6E:h"6O3D h5q3yhP L%^*7setɶ$zh'U |.oC&NN$>NEr"<ۼ̸0 OxJIu(DykDD`n'MEŒ `ah V\IH!+=eB=$ V:B>Tf(+³aUSJcv{\{F3gs7tRPY.7 B b\h u492W<Mſ ,fYܣPAtvHC2]5q,)\#ASouf[Fwέ)arPAs(bvL(5ym,3p:dՇ}H4pxCp5o_}ьGJ$Bb̏Lfax&Q_$=?iEd䒂٭vһt镶d ?yZɯbw5>` ZCnE><=AdN3}N$=:1sݳ_gxk-HqjPܩ{?N+E[.{KrYA]T[F‹Vc ڷQQ;#vo9:ePȰ|3wO~lh2ZD bRz!$ݣI)[Z۬Xfٙ);/G} 2[PK#LK8NƘu &,|k%W 4k7EcP'*dlgo,خ*Szt ӠZ(\At hayDecG/(L]޵Ӎ&cQ'cLUыO_#Sh+K:Ay, O"-;T)FL`a /?&0!̪8CU/X^ _v h>++8L4IJؚS.6,5>L*ٶ^S1R}M܄Sɳz ) VT):dT)PSiĸf]M' |l|:#h"?]R? uSQyLL(Gm1{n)x0~𮯋A/D嫺~K1IO^pNtz6puڍ6d=.x|9,ZT/"3Y,oc=ґqYm25,͜ZBG_F}mw!Ӡ| |1&AqV`nI=4q)f>iЌ ;nJ6qhᢞt_pP4HJ)*ClO4)ovunwnl2n>8VWXnB̒1ߕDEX,={E^ΡFdF{9t(^*7RMXkstvM8a g']jHeEB-ܖ0G7Xeyb5ӥZX/6S@KU{azF-f9]mcq*QZoӢ)mV##]ܱnװ̫JlL+n]~Tx>geY >X]y6Ҹ*z ;U#p!t"51eS]~#Y|==iuy ^ڐVZqv_'w=˾GOoFt8Uny)X]yۑ/jK|i}_Rg9i ?jxfnMdzpZ_{}R?(ݟϩ܍[if^&v`#>_O9״˙30=!+ΨN}1'pfºB c<`:}ܘn[. 1čM!ZpolL2׌3DN{iݕRrժĠ@ˋ6y[yXBDΦPU1B TEZ&75I4DH+VU߼5G-àՇQ33W,JuWw>Q.rfvܞkToe)YL ]Laۢ&u%9ex,Es7Bfcp[H7p%alΜHn)tqSS3p®[W^gswaPί6. t2IdU?CsP{:f",_!6 /}~(Ќ["0PHIԽL$'&#RPcx"ѷ'ʩ;eZGQs~5Xg&VYHf0l>3/J5=TBxj,~$ӶE=0=bsuӳ{? Bs] Ox k#߹%F䦺k3>$M0; :^-#v>smD K)yDyr}*ƦlzH3"aܫo:l -ҀVrZG-7O@Ie2m24a~40rP#yY6i\8J6q򁟴>(w]#$>u}(EØX蚤nơxBd@b-R:])k4F )bّ rߙgE`^ηp(%qX&TAW@vdFx3ap~I2 (ڵI鼾{SY-$1FGZIqmAp7,23<^ugq w'@@JN 'MZ}XFiJm⧼K\{_ÙTZm먛A..vV 򵡊4x l!5KRSC>E>]è(_J|'?qlaՋK1{$Ά%lClwxWޘZm0(F 9#zv^rvO]KOV>sw"MHG[v h]BW^sؿ_]{SNOmEЬe.KtjPW̴C"Z sӥ(:WLt|ˊxqc$* [3ȩp?ۉ6㖔B+UjǏIs jSimCk*%21AEKF7Sfr>/"q] ѽ[k\vr"jkU!Yrۇp auE`s7 pB["08Gb.,cٗ'cMQUc7̣ 1@l?_WU{$s5LQz0teg,;&UOۘA)._B=KYӛ|=ԠrJb^q]F$.`],OTt)r1fYiC%bD+BhvvmGo:5ܗ1l̃~Heo~G;e\}QU4c"hF9c`1G>fdEd ŭ3Sj80t?>^:P,V6s<݀,X) ghܺP׋Tdݺ}0:aAQln[qV& UڄYg4,w +d Vs]%zI_G})2,j}7 P ~̺I ]ņ/~6vnN֛y:K^{l.vmHa`7KF68>)GjIv9EĝR/T`ԗK{v`ynϙ d\6˸j fO]wq~q9)~&(5;nsy$"'-~qJ4RQ"]WB7'I@)E? 'qtf^۰EC'Td +D##?hWkUfxH6z%#L]`2"'̷1\e]5D:V3j/ ǞnB8?TvY(+ iqݞ̧mK{-HR+;!GFA":O}R@alj#tgV8qS޸#}36q)|37|8bK@7iN=Hk 1Č萻tRt%Ta; S=0,T9WJR=@:—E#Q/wJ endstream endobj 49 0 obj << /Length1 1411 /Length2 6115 /Length3 0 /Length 7078 /Filter /FlateDecode >> stream xڍwT6ҋHD'{GEJBIB ޤ"RD Eҋ˹k}ZɞgfhGxL-xe?G@/Ir׋8p;i4j 9[!sWQͽ RML/-1."5?nyKu,4)p)b8LFxev?6C3qES z,K~fé%K, * +zUr\~??;W\}@{"i1iSv:d}\'CQl4'qNFu`o%En95~s?zeiE)"Rv;y$!m3= *]/Hq/UQܑCwsVJN6-+ͬ6|D~5̚X&`φwɢ7X_22x}iZ][~K"ppM>[.Ihb .3_,z7rpęA^mҥ>ݾn݄'f鵇+SSMAwv/̬&Lp.'&1g\]gi ׯNeNxgVl J i]zYhOA}̛ӿ.XSu: MuIqٹkWQɋ M yL',.K@Z|Lrz "\ߟVS'WT7u=3=o[\mtf$vXȔsx$gYhp! #6t{B3]CĦ*&z;(gS9\]m\-ɍ ݼ-ыC#ѭ̛326Ҵ8z |`dp3vߠ;*ҶdL p&H{& h"@|)B)ޔdߢ+O7;f _?ou3=sSc8K0JUk/0pIzKUZg$fE5p|=Tٜ7 1K5= [I7ӌ%)vV 36Xlx'b{QpBC̮[Td }'ج}=1/\D nr흷}Zofcͽ7iVf,1ZeY1&'F=५K)#y~)[cRn̗~uaUDAT,|.X etG\S!i-SA6Bʃ|^=FWQm-s(WP>I*3sj䍏0AI~Yqx2zT!*|rυ0dtPgJo= 5\uP;:7oX˭}b|8/,]LQ_(}w*Cc(^DiNphPsP([fM]Q| 1M2R|骹L&\Pmy-,qKl NguEzJUeo&x *[WKTiO^B7HiW6f G&ej> f)IoYic'N`Zm1@ȮP*$W],8=а^9Kgp,Zոg5Nzvz|A:76Ѳ.&T`{QXoGOzgXrFZ4%2s.g5Eͱdh]+K$5hPm}H=E3 fYJ8v39`UlⶤGOv/0l[r* N6X%wp4k={*O%42Nb:Q< >ș"xp:脦:B8n'TnpqRX%+^P6yk+ܯ&M-7_=XYvxu#I62X-Q6f"L_꙯(Tcr;Cj&DESFAWEn=T3LI'Vipj9]Z;г6/)5:k$7M+>"N%ZE`9f^n0fK^#l5ߕcH5}V(GӎSXe^Nck`r!3vÒU~)Li>5xI{QmH*L\e=T+9tu)*"FdcyIQokBٟol~17 Ly96/&97ƠfGKS#uU=`^; I ^dbcB3NIU5AvM/KH2:y7^޻#oY"$ ݾ)u^Q (j<[ureA0U UEu4+n?Jr{>?IѤOr_! 1@ʸ,opڎUqyߒ*?.ljyLגeʹw% cm麝/g+OOtbnBORsۮ3FQfj>z#I-aFqsFV\!m*͈FJA{wȞIq!9VJ{3iλvZ=Kf_$U_G3CfO2?f@j-\eok*9/ؗ̈?^|"n@<"iMy^"ejtE$h 2ϓFvA1/sMQD׽_|a8 $&NCcǘ)(RG$w43=0m!Wf]މŜiׅػX$ܽeؗ(s<" h.sr /"OnVڊc+Q9`U7X_{ȓ2.VnV︢{*)dГ8~2%:EG/U9dEjlYbыc!f+̀;5lg FKaoSӥ& o4%0HCsɢ{.1YR{8_9n1kK{$TdK]$97shu>k)}YZw ]cƲ؍'h@-;1x'|ՙBv{fNh BK5WP=J>@_V|HMH8/neV*^;4LZBBa[kD 8>|?TP9(Aop3h Sjmd.=@lKcʔS{ieS8zfkW7[^toGf"`űI^>6*_$RL݃&ҒO8n.),NCf-+dIϞ{ 5Yc2.h?Ԡh]Jf8x ;@vBnr]4./=%/<(,Ա%$𥭑aT0FF͛B1Cl]oK"nl{V\=҅0CM|&e L^ Bo= ޝ\WaTes7 ]oB*Ζ;b>p^\ʑtw@@cި)Z;H#6O0RVS^MY5a j:̤m>K"~.W+y3wN;S9jHYk0:YK%@4[IKXr|9K9/yO> stream xڌT7]\ug۶m.iٶZXVmc}9s:+ e53{  #3/@LÅ@AnbW@ tr@ h66 '/ /33 xnVfFBԦ4."@'+Sc;%fojt/ j~K^&&wwwFc[gF{' Az%@ tr*hl 2F ?r5{swc' $29<\̀NPp<@h?{`adݿYlljjo`lieg0$]<\vf8ۃ݌lM@gn Q ,z+˼.cZ@LT%dghP~KG|"ff]ngy>?6fm?s*t^\YIeQgJt}_R63]lTb3y'lq,\HW EyZ?2iVj|(T!9b;h  5;غ5:|tT C5 Y)]J$ n{ބT]ԍĶ9Xgɳ;}8UB!aOXڕPWc)! ۇ5/_E ȼ6zmLm{TamqDC|$ȸ^|5lYpiXz_9\?%mgc?Qea%Xoye ?ǵT9׭a'_8{L!b7PAcUM1C2? Sv]OCmgz?K9Xr&O[F:)"zNLvL֥Ǜ &,PsgxvNz :lErT#)R-ܧ-^|<qȯ?.yCBڐZ^za\ccMM5W16h^kne~vYk{iw|-Nr,lOb`V .uSӾDs~D߾+e|+9~3g^'R}Pa:͹4pu eLV#Ǹ"{4DE#5,m!+*ӎ@DL)Gê sөZh?#{(qT +3eI^'5yoSP}YՃk"Zݦ[V )%w_&jEmp >wVνvQY\P(#JA\F2Qd`Ά<\>NR_~XyH)VDw-,M~|8n0egs+ j+I~@tl.8'^G֪ key6{{)Lk^|n4oA]gK `Cjl  }JkTa5M3 ++" P<A4 Axksֹʷ4r '[3d+;uHewο.31M?{!‘Gy1j61!n8Z8+3LVdR;t@@il>xdMi3,u &4 ari8n5ޣ n\H7[dkHwϵ+ #24"^tk"t=Kx)=O +wїFg&ȳ& 2,zA-D)羖@^bUrU4VxnCݷZQ򽪢6y:ټu _Ζ1#a1bWk$/}b. [']3J:;z0X3J#eݨLQe,K; TÛn8J." v)QBІk ~9q|1FD5rkަ-I6*+ i:Úb` Z@Z azTKP3K ZVq-HNzʗH`b#/ƒ OEp<8Ph'jҋEL}2KpBu B6Eai8$نrpHeAC \Cӳf)R:]׻sS "II>9{ -œ80-n9!z]@r f2&oYðiPP֑*#⁊yl G ;*T# au}> bvOp󐸴ux3VJ c\uuԪ%^>ʔj2+`<ԎWQ@P)4e t[#0[2fm9[ߵqg64f)ItJɄܧM&s_㑒mR}*s)bm-Āy QJopCcĆMQ|uWd[Q?!/–[ HQ}!~:Ru)X a!3]42^ A* ٲ a7*Z݆_'I0i J!2*]=WȝRV]}M{8|"c*q7[Ft1n6ĸ\H:+l \9 2aYJ޹0E nČn] le0|u3/$'|, |``UJ};ԎH)Hк׀՝:Nnyb̈`U!W".hH 4[ߌˋYnM|q}SK AU+3&qJlR ۂ"p.􄒡NykFR.icIIK| Cc;N ]W]މ,FE`'0b~%N3ϩ'#|AHHT?F%r OCp}k #w}=k5Aæڅ;Ǧ1ѢxTy]G%G s;0OQ>A J)R V;˅|7D52YhbJc-$Ǟ>f|ԵőŘNlkdT:jKIG6A7v!mcW]@4k?℄I.tio"\aL./ }7λ%Oydo ˲ &^0K%N2mtN.qt.Uý?>^F&(r DW} ]Wb.9['e*7/gB`T'w=8fRstX_^6 Zzn-}}x%"^"vD=PXײ4Qh|/znj~wꋘS N9 DZaB/t$t4gfɻG};DHB|HDtN#U~o JdU ۠ YK,15(o 2EgX&|,B'͵n<50m4[]l 9OJ+RRaXE*t\IόLw /H+!ªiw2n5n*)l̸PAc=@jB"5)~S} lꞹ`kдra#g E8"%NcSQ8=dVwH bHpV{Q{ McɫruG2rt(z0D|gGw , 3kKX6g{dV9H)mJp]OhoalFd1oymۗn 5D^szf ϲY+DﯰMOpfwzĪꜪzu릗#jH\BH{T i[Y},dJwKQ }ET'><\RmAZlm- x8OY=Z8%ixyr}P6>ԨhSQwP)VTyd_YhֿY/L?z b_/X"G2: zOE Y#|q\ZdOQ/h0J1dV͎e'X4.h(%2|S_.U5YC _3_+ fLm-Q$"6`+t k-ؒDPKM+,8Zb=Ei]7*ҨEYPE|wFmZ̦WGR.g.zÚTȍll:{ '! %KI@Tmg!p"zf2KBiFFGX $L|ޙuLb>N;־$& ۤň; o[gոDhIR GV9ˈA5𾱻#-`'1vYӌ,>0kQ? *O=)C)MVsAɱH]\0&."Sx d~ `r%egUUC>cG>]#n5vf-چ ebQr2VW0=m!'utKM4y D8*e6(֏'lZl7 S >CjC4R=3L/w7\9]dk9V?%뎹\6;ӗh__̓ī~Ÿj8w d/(utpzd?΄U-e@EUCRAH&E<3XmDB#^ya{IPN(FoHnI̅zեpugPƏʬk!D2::fn{A]Gm@| XH F:E>._&e ڏh,ĔO{1Ҕk7"JwᘪʢnI 0Q)|UZQK?IoBFHd8%~Е;peŀ/d:Fcl !K&LiU~>vVl:@ĸSEe WWle!Hf2g|,Lq2Rz3%-0> 2 +0MEك6y/@80}3]IŶ %vM.K#벨ЪNjb^ḥ+)CX. ;ؙ~VbҰăY~!_*,:yvy6Z_ƒVhS'oOb{FiHv~MSTsV> Yo LctE tn0<`%tpI`*qN=WnB5xChmcۙ,L$B0EDpW*|%Gu p7%1:H]q,*N[w}t\T*H8oFuyyQ4Zc#9%(`]ξѳĿny X̯8|5"dI+ȴC=5Qٸe R;ҼʴdU/c,mF0m)rBRjO~qo*]IMD~m$^`eNK[n\;i4㲄93,n{[*bx^]T{un; e9|MF1yOz7S+[3/IÞqp 6)xG~9L)e'[2Wǩjm[tq<|Չ>"n D;b aH.ɈYluJpT3Dl}S%,<i+p [|J#0,RO8Å״<0Z"b3,d+-3Oz {_8Uӷpugp{[zk E 6-vi3؄%r#CorM5huZZ3OrYTT\?d){-rq~5I*ĕEaC$^$_cz\N|oHiX=FeFD &?KTCϙWbGaWq $M0D7J8֑ѕAVt;:a^vdZ&q0U)Rl[}d*lLj>zcwjh GzR_8@|`e._-"rQPRt8\vwی%$rZ%qqE-X]6V |HUIJ3ǝ W'EbP$''t>H$ ,+[Y;!h[ӹxJ_2OFpYgu*>o閠ąMҪ d[Jډb$jŢv5tO F\?d3y(A|~@)szQYM$2^I[C3f`"Cԑ;wN_%aS-(ԲAuLI psŴls S6Ȃr m{'EEsL1D0ʹIהڐcz}H++FE}YiXp̂?`>o&-(C}<Ӯ7hg$ E⭚h$MjD8wل:r'̂|icS2J;!mد{ =;4`o>Ir38B_3--'Z6>*۔kSp`IM][P|{bhv$^g9cB }]T3l8|˷S߽nMFuWotԞpa>{ y"6)q'm٘)\xV`[vDP,WJ1OڢH!ya}GFxĄO~݌{ћfDx'a}WRH';8J֡~8|9m kq]j}f-r]V]dtHb;jZ#%yAG7̳0*@dlSʗ@n̉/Uq gv Byv G"Iq*Eõ3S*=8H5~BbzegW36s) &wfji@.!*k_] +!!>vjsf< tCQ}ZC8ORiR$F :KzM_okd3L:s4v"aS*?dźo:Vn5B ч 21=B]Ãss8'N t]=VR,b sG&?6UБ4=oDO'? #P*YOg6Odm5/nG mti8Rـh-3ж,\L-&E nz;#nĹ EF|?v7Gp 5޺n4pxߟq̢ZZ!ӈY[2w׾NC-tsz#-ficf@1,? ]rz+ir] ",zc8=$B+֓azi<Lbfp3ZL> !Ej;L:!0ccX;"[ǟaE767W4Y4W,M0k¶!A7g*d{zpFFutsrf4̚T4AmG=jTЦښYo-v1JEg>H%$d ~ΐPF %:D崦-.Na$_KD$ie #b+5ĿnY&(ekhoI5n 3_@ *u,L]̺nj0ݎPS36ʤtaҖX/~j:P;6^CNҎoOfѕ+I lVv"oTBB9A^ 5zLO]2S找2USl-zz`p^?*oe,l$ցP>sHY׵9?.iRM?Y>C}aӧUWʺ<'T.JPAzM6u `K6WXT[н E/G = &5TH2iUcFjk'6( p[#ijD;-#KbP|$c_B3B[' T7=Ujq: R^EävwK'f^vH"ŀ! 4 3ǵ<ŒW3> StQNbq6$e{$lU7: & (w)N3^ ST>dO`ZH麟s}|hMءA9DnՑ) Ѻ_a^ >)*TzIӄxd͉AH9S G=o,; 8ZDzEڋKOr|C%lOXS!K܅ޕ)(STB< !9ɇBb[s%9>zN$V]8K Bڗ"d끉6:%^ /] Y}=A5ȔRP˅Q#Sp^` DA@;Q} Sbtң[⥎%w(Wx%O[%J3(71ÇV?aI5gXpOai/Ȉ}@Np@i(I i;'m} iCCU SJF-$.C)șj Ŏ؈G8dn?4V5pڬۿ/{]<Bbi}R!I|ԑ-@42ϻdz&ambOaăT2a39>ɣj ѓz#vr]-'%"3/лu^0gj#7,VCO̒gxW^HL19MApZt/ۏ+B~"g?< juliQ`X:гbHN-J\PՊ&LchJ-B5L3b^¾o_zd(4O_&4Ky6hC3T3>ԞOa2jcN(eKi·s00EghȓޥvixMB+9rKiQ2Hï_JH)16E ǙRpr,1-!7D4`-N; ނl&D$qDzo5sB)㳏غgڏϘ/?>9-~ XQALc4KLLoTr4w8">`ڠ,ν^ǢAkw#'gIٯd(C\koEUc 8!Ӛ8 dtU] Ӡ ,F5_u"e' odWY I_<3P;3*EQfEʩ^1ӦY3C\=)0FWXJԠCa5K)KЋJ6|J){ JJ]ܕ'P;E#h)) %mFsǕ%]}r2d4֙VXLwDo ;JOJ 9v)ӎƫ_Ӂ/!멜Y\g@BE::ڲ^/t|zV8?p7`EKf\PVsjI= =[è~ݹ7Bc߭ʵ*1y 42 1iLW̿@A&sj5>7d/Gӊf+SI *ݠ~T6{idyF׽ 綨ӭvl?( 1]ȁC>U㔙, 5 !L98gT{tdhkF:]24 P{{SW(d0dmvsOޫ W~S`T_ z؞,!` "U|f)Z7>W89* UPB=1 ib۰J܁7 m]٦Zzn;6cnJiœպݞG~mYevYgRi'e t2=#wφ(p-)b?a^Ot K:мfKўWɣ ^A R]R ";D ׺"n"8@/x'ȏ]zqk5a.-_QV 93],CU<$eh-aZ.܍W ZGD q)Ё 0JvPuW-!c>X͝}J+郺E&z^sҐ4gu<΃,?Р+'Z@otJjfP/۾F@smg&|Zn)HGz0d>6ٽIjO 2eسpNz!Q B[ױܵ3@*=C뮟}EmhI _xWT?7+>iNY|fj(@ (ޞ>L?)*)8`<7mdxf2pG(o.Ze9P5z8Jws/S *B:_S:#B4po'ϴV/ }1k ϝ|U=QmX=Ѣ i=iSGleOp-fQ*ٚ:- \iu*1Q! XAhڟ˼5#o(Rӓf##dRb)zUJ+O;7cdO7Q6d=2~L#1_C T -\e=,m/<.?O[ѳI0Ɣ9b6F,qeI Uk`P\:CxWu1k(>ْ65@#5.5U BwFl_,0c1~)D#~#44,*d . R͝v{[Cȍm*\gyqZ6=u%0,,Q_-2QT;yJU3Pv(v*]3?H d|.Fݡه?NE}#YwY{?!:D{y>.^8#){1%]<=#`YR-HiJ52^w9[;# ~ V axLtN{п0(LJ)H频g`/O^[(uz*މ> ÎaEh/: ?έlzZEfC*r^Tj.huŬ0KttAx%i[;R(2Ҭ$5f] 9 hەV~܄Eߙ\!.(6!@EQ ֳ^0nV@KDqޯ:HO;#NvsQP}[ًr%n|!^W)x<7xͼ3+ wU@ f 5tr(J뻐XUSӯ^{*YXJCTGJP0;P=M b'҈Ω[ ,eMiv'{k DKx4>!`Yͮ&O3cz3Є Ojuy֢F¼csLO1 zh9GLT(7y-4d񽵛mȡ=d>B^*\`ӼI-pJ ͖P ,Ka.~7ѥPQ1D;'FuQr:F`VxNjabǠ-e ]VG6̝eOht_K nʝr3W'Y28xQLKUw^;Ћxab;@JO5c-Qw)rz2M-kܶz/s _%ab9_ jp#),_ gEJO\α;~sm yHM1,Y|g$gK3[ һd^'ra' ׹:ڎ)9 *e$5`(;&GzC/8i,ƈFϋ(b ;.{ILvۚ?,)ZKX7w%u CMs.~:Z)?:sG䤸v{Z6r( RoϡI Zu`l S@(6~#,;4Iv&fɼ$YZhcs!x؟D~1x$60e0TCAJ|ŧ9chT@8a!atSɴCk {"kIaU ZFȼ~pY(SC^@(.>6˼5i' +,WfP}^Q omh>sMAox;SmZhJi$E/i!!8ܼ#F-& a]kQFe.m^uKxK/ b@IU|3~7CBYe}7Enrýjj?%H-f-#Q|;0UY^I~&F{v Gf?N(9i"1C:cΜ>lD8\~$VLϸI[#~9NPT g-;&WA @0i' nXYmNdؘtAPCjC1{aV^kԨvGi(+xA1>RW0@w)5M7#q?Wt%p%*G~TbU'veE~0e.ÔBJr ʲ<#Hz u-Eڹ#jM}"΋|rD6qu#f#jdQ0l ;ŲǿwwFAiwb)i3 G1H'k!Ou^!nk%n}/7 ʶ3qM V>|Ah!F[Q>ȓL,EHB:oBo"[ мn8/^21ozYt`|s"KjOsupjh޽f@:*ᘴW *Lf<1:;e!%J C/*d.Pij4ˋIž R+OM)*.NH ʐ[jV"M;?9(nw8~&y5bu ؉.cwVjܠΡ؊^Z cG1$LN!Z 71;Fd2 j2Xmo'mHa ؄P^KiRQg6/KĚnr:^e:5x;4W5/?k#:Pⱹ HarC0 1 ՛(2Immo-Q"-ɚܵ/b{)%wc08ؔtcq]|]T^sPy},q8s M)+2K F*EZE_d|ORqz = 5|Bţ1+i8yQׁxNК*ژ.Ӣ9իH?#{pmQ ic%Ѣ A.N-.;ϟ@M9-oV_[V˘[#E$`G*t Ky`nr,6肋RZ zmպ +vkYHJ2j:t{ (3e9LO2@>G';Rs~SL9BVdD!%5Ѳa/@w1,w2GiYIT\] 2a?y#6 ttuvO'R9#G!T{)`9'nqd0kѪc!eeQuO*镭v-jljdiC'è4\0~S"LwCA-T]z&PǣjإNe k7f#>j`t$|- qcw,')/eKo!oD;`3oPqB&Y@8c?ԧkq:́r!r;b>+YI;+{lD#?yx4;Ұ7o "g;n3BG8G7Z~Y? )f2HtdH+6 "X ^UPoowؔI#Ta26H Hw]:/]3V0[Mםo&ps3d83W>1+zԞ6%Z&})ad|IvS񹣷KnzKˎkWr޼ǐE 52e0|@ 0[y,_J:B$MFӰ]3Uq+K]l!HTڧ톀9 hZKs {s%>֭4ƎǼҍ;pij׿?a}5)@sI ZA+^Okzνi"&u/l d Df,o^gpQ\opA*3)8oEPQ38  i> }䳮CZX.ByJ" ^ե?[iQgl (lN endstream endobj 53 0 obj << /Length1 1624 /Length2 8788 /Length3 0 /Length 9850 /Filter /FlateDecode >> stream xڍT.SBqw)N B`E@K)wRHw;G9sZIoff3kqڹـ 0.^n@^Cs|LL` /3&! v Ym ְG > P?D7@lA@LnP#ڲxEE9Ⱥ`[k@r}<f |+# .muba]' ni 3nL&#O= <\ c<SUh $p tENlmkn C`@KIq!v.n`kG[du֏ ՞-nw)+B\]A'P}yYg/`n˝*Ey4acs@ PXTඎA^@X,࿪ wYS_n;ۣhA4(}V!-H7Q^Gk=nF?wVdr_*qd!.0[?! m7OW ql_GE=.ua|Bk(($>AA?*ځh q= ػA1ߨGO$Q/p x\@_1?g=r<C 'qX<0<{LO@?5\[/(yC- [̹i7[pjY*L[Foظ^7lUY+ O2tԣGY&ma~#VUdPAOnB\"U&LQpjTtм (]'4G+Qp"?^B^Y+;jO%h|dp" EέG;T"#VŸg het;{PtP֌QD*P3CgX/rбw?(Hm`87&䥃ȡiaTʡ/FN'$q^u! Lz:bz!›rj]ŭ[i|L7y˝*E㌎-bAb)/ ` ^U--ϥwmJ^=6N 0[\W268F3#^4>z1F6MSciÌq2x1-;3x{‹u0f N߿㠌ve!ZUF+bQB{Jg ,<jθ>jd.F<#ݟPlx(vb -\4C{۩ .^=4 u}QmbpCG_j f[ Hc-Pd PTj>P@~d&LqTMmF]E1wD/;:+yRN0=ն.<}.̠;"dR X@ (iYE3 ګRZĩՄ.IJZD6JRPG|n1p^ɴx޼ofQf15 A4(WBz%tNek!S0R͔ (ޕ7)Gߛ;%pv+8;Ym.ȻȽ*J9CCQg PIzn"`"N Œwh%$0|f4ìSڷaVSyJrY>(^ ,6l*CiE5kUYؾX t>3ɯh]6|%h9| hUL BSEٷ?W!2t݊H Ry Fb}fGk,R)gJn_klR^;hѝvgʸ̉9lcRG_9eoP8y*d~9ore j GO{iȀ$#b/ +<.L=V-t ƪ(Σ! 5PDȯ\esfBHFUvmvң%)kvkF xۈ;$!q^WYϦ= }2if1YQ)7Dw[~!p-U#JU wu/={cbW :0@F#R|6C vsnntŖ/_nH,b EPt!F5U,0;*N_c86wE}lZ=צ32M .ؠBе,$Q>] 6 $<֒"Ք&)J (y`dfE>(VwD5sϦU_'*(I$DZF ~jبD1iNQoU,ߚ~=-F/وߐjmw'-foʬ`oHv4aFU\qKIHh6>R %46v|s04JמNG(yS~E?;GbRp944&(&:j:`P=w*P!:1A&7K Im)b!T9it2 yM;_%\vKxD! MA÷dE)60x{5$"pN*[x Qקiқjr/(GBo0 8bḌr{ю)5?ek~&]6~>FzVvEMաdT_=KfV;## O Lf\ Mޒgv'zx}"q3]6y:̾pu.Y' w7I \vo*kL Q/}NfM׼Qz4>0ȉ-WwٴDuKSNe(Ш$Xhavy;q(}9& 5zlڳP7;25<敏LT(y]Qd ˗ɵ/3u_\>W`xk)Wmli3ڛ3%hBZ6]e s_56DY6n<~85"f)aCe:\;}ˑO8ȷ |A.Њ\~ܖc78d,5=l躡rK q?|d3ik!"}S¹iC>h|\WI<=e8'KOlߊskF/g ibKB墩Nyo 0<6ޠ/}ߣDie\s0{eKZA\h[&/I Ԭխ}m2ā"޾OJSst8Gpl| qqA2V g+43s]0+BS+Nd~B~)iN_P;Z8wf;|j#Y| B\ wμμ{܍띺-Vʞuy~[뭺t=ԄCLxP33Q1eRujNLڕRx F.!cHo#7_,%}`q:G`E`ď d}T2vz󆈵}ĩ~/Qcs9lS57ļM>hUϽTǬ׎ "z&rŢuya"Ah~5ȑҾZz VwVOg!d3,jv)t$ خdRX6rvUEx=S[XjI55(Ჺ#M~tGbliTTîwGߕWlMHn"$g5P!&676*cLWJ >g  lKFgmn(2rd&dˢ+uOcv԰b`,he1/j=ǣJwDUDSg )7"+_@LniYʓTnI Sc]~|qYfXVTЦV:ع{# 3h''FbńI@b'v{()kD.i&6d+ٜ>L)\W/>~ ): /@ʞAQ$M!s*%>6A8ETwq>g>5!_smY ɔ{Vt* %kŶQr: ?гoVd$SaCI|s'89g)z>D p$ I q[Ҭzhʋ_Ojhg+bGve}N* ߘ j oWx=(o}S6:),rm08uF_P8/ =;SjPG]lP<^ݢV'3W_Zn *\4Ppˌ%npj湾}ɯ5o߁V"}җ<{H^}jZGo6XTSЖbXV`]2L^wDDAU+hNCy&aċ4BmrN4jebd H,/ rZYDsHsc~&~!SPJwDsWE!S@'%vh6ԚOm4s0 gZZT1Y &qzrzs,si\0L/wO?y98Q< u_QDj5m8zՉ1pcQĕ628h-S)2xΝ'ƤT;T:[ ʴC f(/-Ғ4@l!5mı%\AķI 9pjO]\_*j4/ԉMX`R;s$U1Q5&58ȕoS QkzRMĮ$yv@P|Iӻ/6dje}ϴ:=tUjE)MCK;SuO#gw}:FV™#“A,EKRgƨc4tw;oe@ "iO'vx (n_OcPrčM$P:J[`.iM ^LԨhZչ-هS?: DYq$' ]9 9OX|9,E H_|p=L*r~Xҫ2Le;7}2>jtFH{sӃ(Mw7* (TjQ Yn&j{qUzt#> IܱU G41gkeRna/ɼ&.S5G2 je/X%O2LC4(jHZ91@?8w#zjh-;F~r:P%' /hD˟W8i6J?y)s Qx.pIq;143z=y5PS[oPJiO6_zoaU0e9!.+Pq.z퇇Nm֯w+f7G5 +[LHS2~'^xh| ,)Cؾhz7Y^*"~lv%BusD8s)IG71d:m=Tm>'Yc?]mBބaK&G1;l0;if薘ة%t!z FEPdڬ~뾂.Vad*n|]u]YDfV9.L{h:SıA卟^iڍ7l }q~^,dHr %i$MMM&fݧԨyohzhR(y^'_x `>\B1^JV 3}+EHv[856\*yςoڳB@~ʥzO4ƛ21Sf=$v.%q[RNnpZĿm4gIjvs?$iN[/wk{ۀkF |dB%4Ryi?ğ}|BVeժ58rB95yBW:Cҟ:kdrJ,5Z{74ۊ p_N2V u4[0r ¾??!%s{sїyV͓ ގj̄@iBYgpĊfZ9!EJK i䢄{ y9ec|l4M;-9 _cC\n̠:z%4q"4¡ }%vTphu﷪cXނ2A7 vj3dG1vB {\g1t^Rw7shD} jqGU.UG2pvq%Num9m7^TKG^(Ʌy֭@ǝC,|$s^*iQ)pr$;sE>_ݪ%V*}Zv^y*D1 ;;-[ endstream endobj 55 0 obj << /Length1 1590 /Length2 8959 /Length3 0 /Length 10002 /Filter /FlateDecode >> stream xڍP\.Lp`A ,wdw -8;D h`{ޫ]5{m]CO&f3Kà.l :/b85!.voNTN`S'˓ wpp8^ p @N_0'A0O'1038yYNsS(@lt@fxW..@;3;JqNn` ʦ*cGhZCk,]M' u~pZO4*`_Ɗ ljnw0zBVK" 0Z64s=BL͞ dn S>wyNgvg)*˳Uu07r|;),@qZ%ԥ%3=L {"-x@O?LGQo߄]?jS{Ouuyi k kfWʹ>́m8KC<s\A`U3Vq@{,sۧ?*RPs y0ur2D=4`?١0'SyK5 ~^w>@@Z>E7|"iwI@@42@? ') 瓯_3wurzZ? /m>^WpgNab^rjsTt)8ԍ#x!Lu}TA8N}j}q@MSϽϛ[g9|تy25}+{j_*_)`ܕNӊ6(5˜#Ava@e?ϞxcA룷&9rMNNR:R= ѩߒ pG83 D/S3xی+tH܌|mrz%*QE;DWƣK^0nws=z(?UF17EL(F/4֗Cc*O/©N\O{CuF$Qf9/iE5g-KI1Yk );AlҚJ۷o>+o.Lyɴ%FSkVl%_Z:g"y_ _&uўۿvm=ݺVG!5:KoD 7Orw!wɵpφJ=wA5sTf&Ú/^cE.'t.5S#Õ-K͇'2LogjpʻP<* RV?ΦkG:Dl?Z҈IM8ͣlR.boXu38aUpF]tr۾Ճ9Zy_Rx sj 8*1@XgЏqCwp ?!h#J9nᘡ<Z!4nEw,VE'rW酔qXTd3I:*QZ3aŽ=9{ MLo>dF/s-Eol])f*W5qTԸ;D, 34 |u8Aŧ-a&ˢ$TLr  ͕0O k#J.|7mIQ|odSrc*%.1TS|I w¶yj| ra1k^^(mYoGĚSq I6pȆ MOvifeZr9(IbOHQ?VHrV`Xp4 JY^W'6^芊k<Ɖ8ԒX^ٽB}3;n=Ȃ:uȏcS֜#uu^VMv5D_:rZbJa-/ns?,Zjf˗q\=ߎ|g .8얶ļR_-f{CAڧc)Hja,L\՜ :N޵F]e-|DxSLgFКcyo$|C# 'P'unYCV0P:\ђ\O-b;d[:VoϪr7$}ۦ,t%t ~U h2vu34sSɵ+|$P8E\4kys02 Q:EexlPP0_'SVl`%#[>!~iv6-W&))N_b[Yb-G!C};Bxw bX(7FBGT~]#Gَ_I2IָEuZ>t_[I紘{5>&0 3m½!S͹cNmo?QD&l4YgM;kͷ!kݯ?arTL^^D =7]f6 ~Κ|]f Pثތw))2kdvj}yfIT"AYl'^p8r| HHI5yI?JȮy^c ̀{kn͔h '<`xuZɟ#Cn(BG[ߢ֎s9[щѼ`S}/hRT{aYo|)Y<ԮTzGHƶlT)8!!YD ;2}1 Aηȥ.H?Ԧ?Oԇk촜i>ݩkJ,憕&8QEHBе׭1%˶␩V8,^Wb00Fןsú1w X1Q=ojF4VhՊ5P!Cp9W:448ԭΚQ.U!N)l5"+|I;h6NU' mƳo/>K)?Hz*2ǃeKrusQgALg>d@M] NOsy~BQX9⧊zsTZ޹dtyAi~m1-J_!!&N&Qⶱh$3P݂t5qm $'*&_sZU橶sL"k꽈>]݂MoQn? 4ڇD[L tE`,eϊ6gYϡ80|bT'\X"PC*}#Phq]+ԓk$א[C} ٣0hQYq{7\4̹ina*܏g?Q1Χv;Sh|-&wM rsĐ398Lqn:n~~h^,fZ&os S+tQ<,!R״(EUg!uRַ V ^MaK3H ǾȢÕX óWk29Dv jMv 7aw#x u)׀0;"Y,H6D TV=V P`02>ohd=TTıpI(xg3nsX-u],WسPǺ[_3f$ԍVЇxf_1yёKy Vdg4G{ /`.{_ԻHB-l;dmw4Q_?w?%xQm)?pw U# ;{F`&gr+A3(쟷s-bgLg)C1I*3M*4eƶjƹhzK,*.e <`ӕ Y@=A6o{_*a`xIY4N} r%x72R?~#qP 5Lt႔$3_;t>0y>-:)Ūu]j{#P(ɫ;UN٫8YqF'qwB? yЕz==qk& rOA3 9/‡ՀgVyU 5e;g$bDm풡Ex g?Y=*^Y;1y*gsMLEcHɎ U"*a5g톳dI>8'M{Yz:26!iRnY&]xSJ(Nw[H01@/tcQ*0 q~ޘ+x&"@"rs/J_{_CW :rP k3]e._yvaT,olxru3&M췊݄^:^Ia@d9t:Q~HJfbGWQ$|k/9EBiӉ#WŅ dj% Jg~țᎧ}2L챱<]1p) J?]DeeNȽ%m'cE&d*gW+֘rJ;y"u:šsE°nw@{ԚMõS]3\kwIϒ@!o2z5NFA838VV/]2rx< vg ,Ö1|zs*Ee?PM2̩u 枀J=2S(~+#h8'hWdN-=x"f!"4ޟشsXhp(ύO߅V7,=tjG5FjBnrq~9Bqx|Fh Hpw+\qeeB4YӳXu !oe"5bY 0N>WikoU/%#16Lc%:SW/Bф7{5R_QʗJ (zp[f@Glgɭ_}Q6MTeI9F8Hr>~lΦGw"\|lݹjc&}!Lhsi^cd$P^H}ؘɇ|_GD()>䰑UȚ?*,VպR&k\ |/Sk bT”ykWdؗkO۷g/JgO4{kN4^ Ur9VHYWi3裲ܨ]L1d(0*:BL0IC 2zHⴤPcS( Z#Vj\[{5/zKWr4(G8 *՝4321̎;onP0 Q-B^ٚx-E3#i{ÓzCx>|q%uճoؠ/['NV~ѪM}My& P"/iޔJxW @Scnd"NK) l%l0~%&aTyԛQ ŎiQn^I$lUW؂9}5j<:W>z|S+[$ŏFXĸI|/:5۝s֩b/εqWvq9-^=}cB@*"8]ayx[M1h &;.RC  Cޢ]`>]9hr vx19l\B5#eM\'/VS(y0ɾF629BCӀCN-w}c((K\FK!Pt“U֖f'uD$h7D?ƙlVd*]5 b@޶'&?&vʉS= w+Ss`dAi}o۟AEZG+j2E@7s_$N~Ğ8=V 8MveMYnoe nc\Q\ab81H-)o~S_UKM"ۮ·d<!w]S3}jWDNqډCDxX]И_:4G7pC)gNk( ٦{qi$U࢚x>IVK5M='o1;?ޏ;o: Mě|Sa  0Y6PoCn; 5nz q"fqKqww"sہuЏE'w2#^,~zz|[53#a?AO;ǯ0kxIÎ :Q.] :t+L̥?qLz#wv!v y,.: O&Ꞑ|_1ȔNӐl]ҡ~S(h:RF>ͪsaN,q` ~Aғ3|{sғnj:jGa./p%;YE >.YM*ŵoчϛ:$w))|NЗ!3oH vS&۠դdzץ"gB$rP.`0f|ʙ1VyQ@z1('ʀpLGldt1-灉$cр[Ur9JjT†- ?4С[ 쫘WKVp7P%](ʿ$$/']F vt=НӠ􈉻j~rYIM1Qwh6Ӊ`ۺI97ҷ3-8 "6۾o cWO5Zv])^ :x1T3"d5ExN{!f&{fH-*bʍ.DQ 73E6N"z-"sH>JUaal2³|Gȸ\}J~Qtb{ QY z3|:16 n{л +LDWBC5j@J]놐BZZѰ-~|TxڏQJJnnuhfZGwrd;6wz,j{<S g{tboY͒[AI#,w&4hH0Ñm=W椟&K۞-E3pQޱ8/1x$5I{Ip-K#UFeRN!( cfq7A%BS$aMzIH7}l4o$ =8W]O.=@Y& = /i5ʰMU'qiB5v1]tKl::hPq̦WQq9N9ivŃɶ zm%3$JAL/ǔ d+Evr?TC{l`9.}KCR(Ӯ􈨆~1Ӣ*r|]T;Jdĥa7ԵEǬ[x֒nYlS8LO؅ڐ^2 n? 0STd]ڵj(7v:Yb`՟TvcFVlBu̸EuHiF> stream xڌsXm-wmm߹ljٶjZj ;su]i*Lb 34э `e`feeGְq Qk]\m@HM4IS7" n`qYY+rHzX G+ xsؘ:Mݬ`u L Z9xzz2:2\2+xpM_fAXq[~ӱN@ǿ$4 vApD g/, ~b#v:@i$'F1j8ٻOpv-S,pF@w?8/ ,n.؆jrXNxk/F`Ap} tws]v>hhH s0ۆ:1"O AndHq;PJvDw9*c5ЊАx<Ļᱰñd OQ.覮X c?Ix K-,1 $y;8tV#",FT>\xˇ3\Y>@nk$mHd:|o#r=vu78*W\ [ån9x/Ow=}1y7_(\xT:c)% gwrqʆN“sa ('ֲ><'_ge.>a|3܃^/"_*RbI;fH6\ǫ}4wq|M4 y3 #2 d;SB3?)w[ 8R]l^);˅C3zU5l :>M!b/TBIbSKs?f{0pm5N.Pge!!^+ľyw W!1?XҘ/Z?Ga脦LLc\t8aM<[,ȟīB@EkfƇߟF>#2HDD_LLK״яUpj(s7ˍ}+./A4f=S!8@`&Lĵu/߰2+`i{,G١Kkm c1H(üOpvn_bUFOO'9iۨ&M+lw. +NB'$$"  7{5p\5O,2ézz?U %|Ӌa?f8pC@k#$}Ȍfߨk4KcUuokNIckPL_ܵt(dqc䎘Xʀ䖎q=bH=a O-h !J+*ly8d6H[ a<VK`%{¢fbU0$"g_؞(uwgTs!DźRfCXv;|~?>k- I5.,H^"H(}ʕZ(9jBPkH/Ձݖa.OB?{1[nCL*z 9fS͡za񲊘j!XeQfdi S9*M oHk4>s6[ R8l"obt=N{NWt ^6>7me(ufzdfS1pEֽ?a'ǁʇ 璇a£ f$3~EEܦJ]as4iC?Ifx+_^Ӥ/|8 mH=o1է=#L=+SqTRjZ@fj$˘4=XZ&~AQ:6,jqcɴc QU,kr }+fx5LUo*= 7G]汖!A|+s D`z;ܚ 9e]ɺC^$ЫO8J͋?%z$Ku[ `v}*lB$ 0fu5'h~|sc&4pT=թbN 'aB>jm/?DnuH8)ROȗ*V3%hYoY>Ei16OHE m"qe{Ȏybnr.?33r`_v{t "5R=i^.)GM*|Uzo(r\/#K]Cë}>sx@ˉάh3m׳#j-#,&F뮣h=k` yuӦWSw}Y;LEe3lN45V7SvQFڏ֑Y5LΟ5t'7AY/[y?,2ik 5kF_[ k䦗,hS֢K؛ [0i{=K݌MW 6ʗWEͯ4\4LdC.)Og dSlJ հi2.Io)W©]&avͿ) &wgxbHcp^>jA, #-H\nʎ9\1kT8d -qGc4W 8L腛fh!~!~i1*bB*."_L/"Y)K|B'u1L ƚyS>'Ww}.MFD*+[Ʈdd$NVTYȺT3!N`8Yd: wnԃzn` *Y)ɋdCގ' XfRr(0~Nٌ;"U?#Ǿr}]]$qy7O zN?üNG[$~‪q?$3Y=V{&QBL( [ۓqfWr oHPIP"PL.c<]Ha\cJgE%q\W ~-qX`0;F^*a&|Ky,\8=IˣΗsI.LzhW D?<=8܈ٻgVl$U7ǹ8)@vraf#tː2`L`(׍ /f0I.Mo*|ԤY:òkkL4uEiՍ="hI{,}>B& KeM (lj0@ɕ+wd͜hpZi}xL_AZBG[x \J_ƇHu^r%X#aO_ e,زCq ҸI&#!F(CL%W66* [7l:?ǀHrNlC֌;sJ"#lOYbTJJAݷ~τjkN+Mpwy}Vx\S:4^vwhژbDe]U %a~|f˶Qn)$$ r-yu|XrԞ/3DVqqLX7=s){ }B$MLjKK暄P+k}; s@ȗxB%ûy'ںs~%I.hmUVʡOn™m*Wd$Jk"c8FYT28Bo}$&M|[o<^aꢪm7]dSj- iV{2 ` #$fdes <|ن~üliiP餑 /0 <.e&:?]yAgqsǜI @ey ٕMk K58ax~fZ NfE7KԭZw QM%~2uG"U LbO$( 9|_pB@y}P/B.P/)~d|U{ ;ቪ.z\$:;mmMff3F'G,EZ`꾘|oEsSy3UZB;cNN+?(LʱFmp6QKSO&SKE8*cgs0A 1fg"FD(BD" ]x~F}7)ꂁQ5sʬ*R}Q O-D_U+SJ#_׈VjkR>k0<i;eaJ*>k740qÆ'P&j%â^}j56-!kbnRA_i*7l.Ռ1(sv{{#xۋ*FbgV@ 9`m%α?9vAur5:3b\W.M%*gG1$ j=jGr^TM*cS̏uPo2+m'qBǻ.?^͑S*l羅m,#~bGYBՏ+3LH;c4~Uk#4Փck:xK`H*EJGب7OᡲT1&pwí贫PJj>#VE[ m:aqp ce1đY dml8Jæq3i=8'TrL3xʰS_zk?QM RTFȰ0;PԜbkRۭr,TC$Jq#l8ck1-7*^ee…HRr2&1 tk),;z„VРsi[e$[6d|urvj{䋑2ynpӮx}͆ȣ-͌aZ;C$oE;{> :o;f+v~|„r}9SٔOy˯^(g'm{"ShsLo1zGē6g0Bs".TUGg \p:G>ӭ cb ?^u^?`wӐ,t%9f,]pΆ6|۱sCŷewR#ך3ͽ 5P)9Ln3m'譗 z4Zݼ۩e2V{]y3ʖIƗ]qN^ay|}vz#b6!SlTPbSCt@ kb#1?-6g"}{*i}t "3i@Pc7ğNhSb |˅i(e1]3 6t`c|o1䨦MezS}w>w5?K})Ys(R0Q'PMz]r6VMK"5NKbџvQD 4; @Wnoݎhs|r]PCIF%}|y K)Zw'B<=F$_jej 4t=8NˉVh+hS[k_2Iv3xFYnJ]عb q"1tw̯I$m>x&Qxmo s-!c/N^თ/<%"k876_~brbTy_Vݣ Q|f,@bQ#4Q|ȶxl\*u\ OIܫH?B:N~CJfXAM:a_ϓLN̬-Т2u% 6S!{ց4;bY`(*hVýD˵biNN2ݼE\x @WÞv[8=}h%mE"-\`dzFb6D Mڃx\կCL /?İv|dӚmLR}Ӥ%T\N8?e@P A2@e8'-̳=E/lu0AW~AU/FׇhݡjzYrmm]9OyssGv HhVG W%scմ>D} x}B~Աrwb^[Aa#S # G(eT7Krv|Yvqu rVVӭC!giUNH$\YiH؆'dޠ8^g7q4 @HGsMf b i/K5e!@G/jOaMαӞgd\wȆENZg+~iłj%$CDtT¹H\8u O|"/=_95҇=2Ȯ&_P"^t!ހ 6ی˦$xTzy>Ků"3a՚R< ⎂}"PT_bP➣0d" p x43 ) @ =CfЂvb9H]0\u$ǩn'G5Z{: rgkL {leƵ}̭-PH104G@7)م`ڴ4a9o~ye:'sP/V%c!ϟTt_ Ԣىz*C.i^4>$ǪD\E2C 2Sx :F]Q=cPr{PMȯ9ډ"G[S-g7BD͖5{-B0^`ցviH,*l2r#d !ZaJJ~I}H,/dX +k|1J)~8ʽ}t5,Tmj=Vh}>ZƪïcAϚR8hD{I>y'XzeCI%S *_Sn\c+Y߄#y[Kt/z>O]{z8 D5*h+C+K3|P[5zڡszv)wh)*I vϾ_[ ӉezՇ(4e4sW167k \`beFyoi>Q&Dژ 2 q>L5ǺL@y/J<΅S ES~LofP\Ȩ=i<6rJt![dF+Ft\%hW%F[{_SoR?0FX>T]5(`VsяkռBD<Y_;sMDz_8NIoY!_ot/F>l 3G!N7 pٍn|try*_p"f[{s=,C_~g`t$X[los㞮IDglO=zm(ɢúmX'>rx=uyȏ&l߬h(lK[~$X$~cp5X>r u=)]e Y▘gX7/K¯z+pQJb5G߉l v։l22>dUy1q%*}\1YZzݨԈOOnr3$I>Y7-Rj3E1ĸ$PH;$=6 J S|Wx句k9JYיH/#} ެ+ba3ALƤab!Ќ1jOubt֥$vXs$?QTi8zlEϦȚZ6 MzܘM]g*F啘B?B@bF@ZR2LZ $nxc ,+1+f/ 9&9y"Md9V/_ 1Y4Kcە+,~I(΃`qb_a[M~x ⢀u-(9e_ zis'R[FK̆hShT?z=EiTtVۋ(t89r8|Un~96\.^:#C4; v 2UDG!_ ;MN>ꖦ߷,pw)_e56@\Rđ@RD{Y2 ]f;Ⱍ&˻Yj&fάn?SST{.Vz$dr(i%u($&ܷa&Y tի>{%{ m?3ѣw#f'}xFp \ʃ'nYddp0`$1y.4}R]h)B&u qNZUem[6\ILkgm_;C]Zz5%1 -‏D"m.lh]xN!HA".lCPQ+j˽,Mջ%<Wu Q򼆎A0 oP,>͢f I]&4Au{i7g(Fvg!/֫ ypcw2_Y>NWډ`:D}KKygAʺkB-,1ߋr!Cd*.?R5KI~ VسѨof[UQ?tՋg?$Uσ6*ȾvݩlE\fx|ݺ/Z#{5Qv18TEC֓ AϺՑ !&\1^+yT[w Ps>M3>$biΥ̭ ;ƗlmxRz[StU 7[A]r+=)zahsmnoj#Q1H8WrY(F1a}R0 =ay˕ʝ}ų_(WB6ISa,_n`Cz۝ pI4 2(ZM r Г Շ6^ʍt#gT$oHK3T$P * fu%]٦̔o{!"X gfZ0 ?c y78yO `Wzc{ RF^늋!C}A;(| ˷~^VItEyU|/_sOq|ne #m)ynd^dZE|*7ާO=c#b7%4 5'C@yіL5]L/N}ABVj_06`^ךKpL8rCڼ,ĴHKVeYFB$i_K<s1Z#fNAoWFPH>[(GQ'CO%g~WVҬJ>;p;0V n)txE75H ~4 Lrbvvk(Xα.f4ثDPȹls ѧ@d-z@(…:딫icp5a˒zȼE`u1(Cp1ʷ ul|v1oߒ_|?yVbNBm8i}I- zca_%UyREƩ![0t5? ωpgQ^6kQz !nLrO߳s›+KvlOħ:vvhbTS6㞻 j@q#ZNPE&Ή`CcFՆ=)_hGe?sO`;l`.4f8+vlޏϠaP!#uc xӒr7X!l @nÓXYemtsgSlDP ){h= uύ)} EwɽM+b"O(Yt%H;_jmyi(X-7a)B)OCzv. k;tMkqO)*љQa`u'vDhjVF4sƶ#{jc GPɒݿhķrl5++&^VXdMQȥE/c?jڒEw9]mt8#;bGck {rCy&Qz/EQƄT&RMAvܡ{Ih+Dg4ʏSgr: VEYyaB4R䗛uF,-ѡdmhn6 N9h_J[דUxQ]AC=/&9ǚ:؎v1ZYA#T(U[IDgdO&L(UiWۡ=-R4xk3S]tZ$W lLVzczyn>?r w7["CesrRwzj)j$1?XfyQNwIv ??)`WU.}YAz]r}%&SILd%MXcW0T7xCdmGWZ#o78O*7V6'ðn{I7Z@}>ܦwd:_oHzVZGIV}Q1,bE[ lv=lg5] EƢ"-O5yD'KI7H 5';CU>0 ^q5(ϴTqTfvM%lO;io[oDyԺᥨ7UF8yhrSt8-0蒂*}/OmQ;}q:ԁͅ|zCǿ*/dl"B<&u_=v]R(+7!'*tm|,R4)컴倨e}_E7li~)ӽ yt1{47&tE/3b MJW80,$A$=ăLpDYf;gwI!s>0 hFNQj^_j [Ɇlm֦CnZ= ƳBqvTlO3ؽ3 o9]PLH4 s+!BNtJkRQėՉẅ R~P P?ɝ5ȃLm;7(:ɠhh# 8pw?C9zyoSΈ[hv\8;[!^M  u# |߸][6da |ũ{fl:I%81M^aA{ 7n!`ߌ6ys+GOgݫːq&iEW >y31zuC6}p<ɍfuNP[D'ߒM06(\91ۧnl0S1EkiHʰtdg ڼ簗ރYzjL@[%>]2 ?n܏Fyx#}3Kɚi {CiW֛N;BUFhw&}Ts̓lxI!'iO@mW4岥<T@UIRveabda.nBvtfs G"HZ37PiRJ힝~4c/`iûRbHLai;X/{ukXx5 ϫO@؁/1±hl%1!Bl7w`}mFA'R> îsVаCtv7_y}(Og2:H|5uw׊iD+vb$ Kg5_~)«g wzZIu} 'e[CG}3s/w[پf0c}Cje>{`lޠ1h%<0XAiWeG(B\=\$.-G>9[ |bd}O&13Y#l#2,DZ *Ͳo}g.@:촅MAp_sUf]ErF~ endstream endobj 59 0 obj << /Length1 1747 /Length2 11983 /Length3 0 /Length 13093 /Filter /FlateDecode >> stream xڍP #݂-5'X 8='ȽUW[;Z 5MfqK9PafgaH*kɳ8Y8hh@{H4:@gQ_@3ȫL j v(9<ll66Rfn K2 @tA;y:m g `2w:,ffMB6+; Z 4.@g7%*fKcAhـ\Rh f@dttyuqu:^wh+T+ep, @:YX=A+=*0-04w_ L #0{\,AN5-%@G I9CV GK?ʰtubv}pKm*BGf 8 hy:T!~ z-  ygWKHK`9"U _0`{m?v^;hW̪#(#wUJH=̜fn6;;uq@/_yG+0t_?)c_; ٸ,^?.(3qSOdkB^@: T*-AW+1{qG׎ffbaKry-@ /fr]@0^llG:dvkk+hc8yffHwJoשzVG0Z/ pXE<V*_*CJ%>NjF1?*fXBտ5"k6N6?2п5k&TaWae _Sq/|_z8k kd?nYs^? z-fUͷ;\瑗ou %.8G͋OFݭcqD -4Yo1c (r*7t;iwbgp3~ +DPvSjs@Wf4& &Eм}'.}89Azoz+3@ u8yRG孁fWu\"'׌m܀q%p4)57`aE 7DgFOs E~YWqp+XrΏo{uҗj5g65P#-^F2m^KJ>=-yeleNn!\}_[.%ڮg!`@dj&T@rCB}%NUX9P;vPs\S(JܶHCDW c8"Q. 5+o(t +o<4 4+| EYA<'iI3K|Q~Xz^k#PXRBi4I9\ ~4UgƲz J'2 n.!mI2SUͻ"@.\E>& zn].Ǭ,N .FGD˺@hͥq͔c%l߇~=FWGK hՓ Z&ĕ2fvE<Ȣ@)"'si'ڵDRFXpPؕްԸ BCVJKn$cMʬVeCi8A`Qbk)O5h]ԳٻoJ=8-| 6G t 0>;c>>q(Eլ%˩t)jFB7SӷHݒߓ6|\=Cpg[CR@鈱*dn$GEn"QXP9`OڜS'8j'=XnAs [ $>Z0::'rUÁ@]5`ȳf1 z$w9`dtD JVT4Ұ)l52IdRu͏7k{'q6Wc᷅m*=<6,-Ǡy'qћ6Xsddsi J[6@dwrJL8|V~  Um\sM0~l ` ^乥MDž]`\ -js4L"wL0\7^اc0aP}dL`gJn,s4ÝjlA PKWy?bzb+j-a7")/:Tupi^X-&FlQ x0fQ`xϴ[KT?PάܜHYR D!n <%з!DvbƸ &ؕ![lT Ϣ_\61҆"˪H:$O@:a)Ǵ9^zV{{u<3aBʤƱwnO;'%h }^#7Iq}^tzlO~#q>>!:m.ZEqDDj?hTrbZ Vcwh.jZZ/y 4{{x̉wx~)x+٫ z/7:#*X`Y-k$ Sѥ)[+5bG@D^uvV%vz o%{I+IL+(DнhqEWT:ءp-]W)5kn{tu,YtV:[ݧǽQWw=*15律T.#އ JqLS'"RӜ )kS",i-ٿ( hAq(n)P'O/ DTTA^e襠 ̏$L[W&ͪ4`_- ef',j?Y ֬"m *gr{AaNԂz[+A]JCYv"rJCS(\eSV F&X(!гܟ'8w%kNcU Bg˦nQ'ÄN֫9z`[g acq8COKn^ y{YQM)[Iv /G-_kVt]%YJUՓJ7\ʈmgXq|@+ܗ;hs;pUEƭ&:6j=F\W0}">Й #ux"Q}>e 2/ hpD4 mV']w 7F|FrnU-ڔ}_/֣U :OBVޭw_ { ̨D3"Tq Ȥmvt-R^ȤY!S.*`v Z'D|<2WIS&W =T{ tQ7 rJkE{\ 2q~FBiI,?SzI4,^_ $*YśqBcj'g6v3G!‘M ˈx(8'#EIQ0hP*7'YyD*eZf/e5cS 1vkuїըtv\+Aϗ޲>Oq \U\=z>V6(FALi>|FdYL3:TO $['3}\),ܔy~4#-ѹO\G]AJD%լd SY~_2zK2/]A`KaBwO牢Sku+ M4sEЊco0D(qLգUͤFk믊@"@8h:01GoDg!,xɂ{4& ٛ£K ? Y^il 4KAWtQ]^mNbЛK o!7\pFTB柎E7H?D2+cYO"үsn7dbK0NSq54¶ذ/1}(`9HV${ڛQ45exTAv5vx'2Mm#]c9)K;Hp]SPUv_-u%g\s)4#81`|wun2dTˌ&0QWJ10BEziFrM, \!vjWI}:#ijPh?#H>٩e1gFIu)_%*緯K5"Dfs](/H&jXY=hp6gF|{sMYD9կBp h{Bu9ؗh>6Yw-3+s`:p%oQLs/pDm.U,30-vzۗfZ\X$Qttv ߪ@R'ZO@lj.C2̳$TDO72~o14p<{@#9bWnTnN/Hxzԝ }t8ѧ>1:lNw;E:Z򒯙+hD8p1{O]jAy<6 еe9Կ"g &7׈ ܽ>Hx{ŌjT.`U\jlUދ£;F$A(QMj6V5R*8Y*njN HcnЏ$G]Vɰ9/mb>Vo&0Y$]Gՠ>~8pI#N$ч|Z{*o?sE )uRv^#?>tN$c{,5CB`=mR!nyW[DZCq_ #^ON:7^ر=H<7W u%rTi?9͎ioa{F}bJӶQ7bXskmyҰ%hDALڇ~y./|T^&t&  dbN_pXO؆`gZT;a0rVue!u.5g5=Ƒlwɔ "lJY1sHH2|t#Cu9.eos7K#xJ<-Z35OH*M0 4P#>ˁ`2%EdC 8ghӔ "/DKR&(ƑQsx1X7X05Aeo!WjVL^. 7/Zo׊H|vLI;ۧsǔC΍u_6f|&uZTʭ?xWGI!]}}NX ))p 3Y!l#}~J}eEA_ ԽIUDQ!_QR0.r{qbtɽ"az򇯛w~T#ȥq#+,˹ƵԚ6\˜@R7[_ySZBn [nM:cq/A_| 8f-kQFY]<{ o>ncvIYRʎIs@'z1DjNO2463-򮖖%D:sB u~@QE%L5ti\G3HQ+f?,̵ׁÚ6FȕwI>7Q.C|;#sޛvؙѶ+"w\akԉw]ilq7ݓ 3t ~.fiG7tnё/Ԧ])flNi^-;kLI2{ jHQkRa.sG*]N)3GI;~oC8ƬEgjHe ^Jh9p.Z杒,2okt |fZ\˂:Og5ݔ涟l>uj>XyZˉpSM;Y, 5ivG!3(5Cvh~d 6K^KQ;qzV~gY{~,lꔨA .2Ǭ@;u b}&6˟hEBQw~h28v#!OF'iHk*^$QJ|JʹN8a ā"/=Qwmc1yElA3c#b6 07|]s5D1wb1<4owu=>C [eᆜugSRfuB^>Gh}5UP0PA^|F [ͪE\g(&;~R9φˮYyn$yBln(fet{SadcڦF3dA9MS7jE@z-}Pu\T(U| jI:o@o"q;@<*omH% z-J=B0'!QЮuÊG/T.2':ar-,:rxNFIP:6)Z2IMK+Vޓ&0VO^\&/>nQ~<-ĚwIeGULxuUo>iSi bJTdlBڻ0"v}WݱL{hU9 %IDj<^*'0;HhAn7l餜ºkyvgX{,ܨ" '-L"*wݓ"d\˄<8xZJÝtX XppxN!r䝲~N[Nwdt!WVmǵ-o$+-tp ҿի*3 %[3:ղ~c NSm\'=Jf5^?V 32@ uFAťnZ/YB8r4.m>^8r&PZoMtX"B7S؏Ln%׉MI$ CQi2vSFtOGa<į(S5D_:I_ !ֵZefIGDatA>bP;qChV&~>h}@tWA2[a`Fp]5(۬Pl lX5ZɶEJY|H5f(:?;گoP'cx5lZK,isg4[A=4Xk"ºۓHYA9㾮T8?ZN-/t~^:NޟԸ/,Ϙ3PyVR&\$#o5lpUM RNz[wPXD1Yy+8\;%Q|Mgw|C—̤'?j=Kg]~V)k]YM%2?ދ|KGr|mU1A%7 4InWK`Y:괧o9|w-i\duU}_lwu(׿wn:g+GDz9rAFy]ྥ|QGOꈽ|iWFҤz{R?-NZ۟,\rFlٲݾzh0 -p7i*%ozϴ-QL^rr) ^ݳM%&I_ds\Zd2,zop?ܙG8Ҽ]w>\{Ypj`R:?8LeʿJeeQ8ֈ ֏S ޓo[A^h5a0wd/.꽳΄fx1=:3fE){_ ;kZjZfW}ln謲^57)5? endstream endobj 61 0 obj << /Length1 2572 /Length2 17859 /Length3 0 /Length 19371 /Filter /FlateDecode >> stream xڌTk-H7 Hwwww 5tHK)H#-JI7JH~s{ޣ_k s :w__dv kOv]g'HQ\ +;Vr%q@m@h@/''lق~GA6w9p7S(ì!Ύ>bvIIYZW)%X>A>@FOEg@?B߂a?Xj(oA47専~p&.8WWߊ<3Gt;c孧tT!Mp,*@.H::;Hdg`g`?:rY9@ow(%Ve -/E2 Fk$9C<.hw_G _ >o`2 ]_`슿4o/iF\vE7FИzNZH7ZEPKYV`%? o{P~h+4%_' _ u8B o$NNTe 9}YAn w_)7fk9WPư_zWOvhz*6?K 3wDg"OhGvrTBtBgD>0ZzD8=m;6/43tC. 5jh0Sd{p:25BE_k*DsW'>ο~egGkB }:KŒf~ڑ:\KT^FU9/lO<'Fi~dM)SŊ8-VI'Fp1,s Gʕn_I(};Pܻ5/Ͽ~e\w$ڲ/v0o nmI'Q‹Q5d_1*/̏|K@*;Qd<6IVgEwXDv.6-QjUYR#5r}Ze "sa=X EW[dVLk_- G}է1N;ɤii_$x+Szw jўqmeWݷfC #s-sL>N թxbk/vp+]l9dz$*rMk>LMݖhI"|Uwr6[_ !ٟInYyvcj7Bwr"AD꽺f p8QfpA]p`}mޮgeG._;7cey.]oy8`x=_xv411KgzLe 9MPE @ ƛhЗayee3gCeGq6H*pe =n_[VffN f&m.<=K<lc3DLFM$qxNͶ|-x1SBI^LKk˾bWpd,88&N[=|Vn-Z~/@N>a7QrV91>܎sX*Ff ŏa_vn%^|AN@_P?]񤽫 ʤy!j Z(̽mO:5CxݛzjT~L>*VF.-?z;%5PIr~9OoiL+H" n3L\ /4:$-r"iGW?%O6?K}f[dR.U\yK[>y ߿II88(7# ڠ>:Tua>\Gw{Zk;=:oFoËtnUÚN+6T\򬷆Q,Ï+04E_O u&D<%OpDQ$O6$A>vH-Ĩ'> 9;Z$>)jtD]y+(wT#Ncbڇ82iܛ7ٓ\z '2/';wBʱWwϴ)W4ˑB#.ۍrfRJZ |Ƭ:L' ~>B7-R 9Ccgy}a;GTӹUXxX.u>P}uN?#':lmc`Lek2_Ss&R"Iqa[{tl]wM<7Ft{ׯ~*"Mwht4]hv?߮ϒB=,.zR*wjraI `Tηg& hCHV\Q5>HxyTBmv^x myo 2M 1c۳޽A 8V,L|; ijέg!Nqj6J NCmkğ0D;4o, fcNcjN)V8gZ(FacB:"cK-tq.)F\)fvòoN]?U9T֣7 ^~RN"^_enD,L.2ߦ}ѻ\taw1)xdJI@WqXz0Ӳd\SU\[cW c۳$^)P #k4sd5C˭q=߃ScO_8NّUmO9hj6A†4k_i}f6|iQ;l>ϟȲhA%h(f#xt[q*Xr9"c})P:4$ކ޺7Y<˫,YHC6&в![ןIL-A=~k"|Cuw%"R ?Fʘ;yfGL˲X6a/e`s4!5hP'O7obb(D(u1 ?VPA؍V;L$Y"r'E`VGH=XڲTS4AL}k]̯*,5#UT$Oo8 Y?FC=ҹk_!:5IS]&3-p4_N#6bL1A 4ONRZ2;VPSjͽԿD& } +{n˞ӑ_6s24%~i+}Z-PY8`˧ɴ3-qJd ȍλGQQC :L&:R;yjy).'O*)u/VI!Cq:y-HTڛUËw؞ bn=W|1H ʘvr ",[Ur8`P.jvdgcqW6`2\W9𴷛6EPe*R] N0m2*,*b ?s6cܠ؜#3QrlRm^REXY֎5垣 r%Hdw` <:wyS(V~ ^V;} bGob{ W$7ҡF<>3N N'ӕ72".Y뾇R2Mhn:I:=Kz8 !ʩ.ƤRvX 8EX+yYVk~|xTFwa[À\QL4-xFy)kOpw^@d6R^DYA/̂>o0Ra~qozk!(VHMyP|bRTlvRi[Y7Sju8x9To9\]λ4}`f wQ ^~{AQ+< Ae7iz5@s| > A;? S8f2H3'wDf}G1DX9ijyURbc+=,(pFZQpDOlah"%e^eڶÈ)n8|Z0Jkor뀋 _z1n<  ,]c t^0z)NpymhQgd.UAaW2zq+A%S oaM)7j-2WZ(u8|\YY;`!FEMYUey4{/4=PTg; /kjymzZCɥR/.BSKn▖NV9E-L0 ).(= L#ǻSi Tu.&*gF{0]w 0@Է8;/6|U0FTr>PfzΡvhGA0=lriG;w k t ko&atu?p[dLں`wjb7$yt4mJ΄A6%̣M=%Jߋ;,8`|U'-m2 ѱ,D( WG~9)ofd]FOk#"QFQaXk,5oO(8Asx'0cژUs:nΘ>oU mc$̅lJ%|sz7L]~pu'Xq*lCZB#~$M$5SEt>^f>2ma^ \ٓ8ecS5#tq NW F9'~5Kwo5KU}7؂7C7.0UjCdUQTASj3Agr=33ܮQsowM;A2r-ym9:kթ?L'Fo_|TDɚVJޓO&\>a{<(ƭ^^&~$Um8sY&#dkt{ * F9`E~/۵`)>O/R8瑋l+TG69yT/CG 7k#d% V#k~48&;xvݜDU]^s}qƔ~+y*Einnx'E'NWHɹ j &yˉ~s#n?%Յm/9v(ƌ'%n. BbV9йfL' ̠M-, s<~ֆE* ĘH*J8HT\-;Dw]5d2PC гO]cxR+="zCS]!>x|{!)N{0XSn9J¸G.LL~wFVx;5jMlv:WMkjmKSn$mAMG ѸfzXLTsg1$w'! Lx[?>Hve(W7 %&#!*[#G?DA{{ \SܺL)ە>')@E1Px- 8].f.oF]"+OmFJ(jWYXe7ksSI+L3vᬫ'E~X׊EV2Д*-V?r>}[ J)zkŻr6v$i󪽱̢iC ijtkCB1!Nyo]-\9( *`/}-pъhnl S; 6b{DT+P&%eoztxH듑1colxZUp ^IV]bMO ΂ ^7[#O¡V?,Lj)TX*!ɔJH<f*HoE;kڧBUW( X}PZ-<32;q\%=>¤nYdv-Hg_&>P"9aO 2{>D +e9uW9QijhȧzA9iIv'n}uks;ln;Zr)WM[16Jkqe4} XwKAD:z;Jm=ytd2 A Vy.>.ŏ?y7;_z}$vG&L:eXj+h6UkU JבiU¨>ɖ)$LHo T3$yxvq~p>iulm >mۂ@I{KkC'RWG:_04olF}7NFos;}Ba擿9-W0);ģb[pHHf٪Eۮ0h)5`}a8$e) 7յ4baHM>jeWc wQ|1NArJ|Űr:n(SՍ/$!)R(I4ݙWФ&l`4z>ND w @e_=|hW~mwYJ} ZqO}2FI)j2GbQ,բb#+vF3N2շZ AkK!]ىTti ٽ?[j5^EO2NE͹pEY,D 2^6ֻjsTAM6QRA}Rm?<7 iΚ(gk``"lG,p*T].Ķ[6 s(Q*22tOn5z1YTx|-M*nu|'1Xy 3˟5t)6$O,?ϲv'JΎOYǞ}Jsݫ_S9t;(|xq Q3rXU> MNjO31ɔ%B>>=Rcej*fP8ݽI(kͫg@MwUߧzu 55:i<jj-W|6?=ȍIewn#0ݭe lqb_yiS$M Nx陕==~"'<C \|m@O Rl} 1''YX Ҡ,%(av0EUS'٬0$9RB,MӸt;jy"߇8MTÁ[ cڃTx %j7t ön\бVD2^ v~F:݄7[1U,˷D>WZ7Q<6 ɤɱl}`3f hVGyOzؔ/"jҶbLNƏx-T_!/HmEBG3/cylxfh]n$c;7ԳZ:f\o4a]WTT+D7*/iYhY5?Wj\&rZQX^%e&]QC{\[IT*miCTnP,G|Zd,PY~k%+Gظٕ~u1se!d%-ގhL1lb넗O-TÝ\݈z~sZ1sRJ}aOLJj_ilAiȸ&'MxeOJwcxn&Xn*ž[c|6x3G:i^Gc&`jNI4I-=@ |j3cҶsJv,dR,,/7l;O J?)`<~&MH}7 yq5H.I'#?]6CZJ]sgg:Ēh/ oY>_.r#|l/㠠&<UPɆK=O7sE>u'#T}}TԢ_.R1򍬒HwQL)Zѷ7$ßK>$Ĵ~C[5rjȃΊD@v;F2AIʅI}TSK4sB7mڥ:/r1 |X<3砾0^[$e6Qk 1*]sm&eP\t7v>9Yڵv3&b&L(札~e+O 4SڴUj@`%Biv$C5k;Kpceet\.IJ3"Iڊؓl,L|UbJǞ*0nRE,sO4ngukZʎ\3 >4&d4xxN)Y*1eD=\`~$> q HDO+;~ay,6QR{RhuQApOJKRb%ZVZ1NQ[M,+FrPv@3gct]|VÆX. iKrLo=j ӜkDS`2ӥ)D_wGn?R+LCřibnN7yd$<-LQ鄮:uB2E_(GT&y`3BK'o vlF{3ud۟mؔ0x@yJy(̨̿VH3H4 7iɅ !kƿi\V6skgTu^t'uO?7U'<%!LUJ$pQxmf=yG0w ^\7~st9jW@2KQt/Eׯ.N.CD7OEUJ@fZBezWo>mnQu̢+]oNjsgdq>`% rGK^@w!2,UT~4n@4L):ĝvm6\x^{*Ͷ:LDÆTqH4 N.dY=zeR'I} p%Hs eqZQ8=L_aNh&JQpaF(pkݵ`6U*ţ "9?4x31V~Kf5ؓ_]-_MaD(NspҞYة>cs!cӓ:~nct`0&+NK_!:ʝ k?˦A^wemiq?ۊNߗPǨ*611Di^_fՖ[~|gԺ!c+?./ȡLyߠ 0dj ַ0t$YWo" Ɏ<(YVTXT4Jv0MN.U3fW&˒-Az1@*U_Hz|yӽp)݅h#J}F)M dFa(.S}AZxI$xA]'N43r,`jA}b~xZiy.n@uߗ*mɦjIDFˆov,CHiZGj{DNsRVgU'>bd], 3w$os4=h:!^6ccR%`K*ި 0"[[g&۱bN(%RSq;|R> SJ]+[XlzSg԰[;{ t,:Fo,>/@ P(j?0iwp;n/SMjB*;w0Dn{*Q1Y Sϳ˙I) |̓;9vEp,tRcF/*H@6d2RZa sUVj8aE\ā# n0R4pBkՎp!aR޽ P>-\-aZ߆2/fbcEN9^M^ q2 jl5[#fEBmH61hK9,ˇaQJ;dfԗ7UQVEidJzPhĉ~+نbzkKSS2bh71_+f=Oa`bwc/TC7]^튈=Y?!۷Y~,U 6;+zA4Oyތh V^m~[,٤^s45:$lO@VJw" 05C]pY3;}rME(%R5o sl7X;-]h冻glY}Un(E)g땙{}Mԥbק\Z^8c 'aF"|d})|UF4KuJnő{>X2$PsGR8" zM{ Mdr0e3ZoNOg|Mm/96=/yYP`aW/ gCӀo?N6Ĉ +;eq8]}5̐#nԵ1%%?8pYΩ_/w*4lJksd<\R=A5Q#c/j#*!LN]"BHGF|2LJ?^S{pAFp"U.hJ:TYyU4[r/Ti"i5'Eo}߽jR% Zggg$e_ߟovU+5YZHd&ԣ2];nL3Ր>nн6='f qC6tTFb2B 91$vU^Rß*-[$e5ߏM!S4ܔn\>ƈ{^hgK'Q>PwM'l/g ;)T)> H,FXI{G$[qt$y{t1kx% ӕ1ٙ9d*ŗ[bNn~!i(ͦzТCsq𚥲DR^%f05Ҋ8]XI1蚨PXDVҢʲݖeK2+2GX%XwXcH7_̈@X?i9ȸ`I$~(Ԓ/+`sr31dK4zEljh_&\'1^Nq\7AGuOMAN-iS+mN<m ֝cH%mG_yVd$O mI]G326P헆m1DpuO/EۼǢPFͨ&X_Fux\DX N;?'=LG>4:^p{|dSBp8Z "w"dXK\ ^g}luY&"iRƄxņ_H0Fo*]!_"څXE ~W'<Wj[ ,{45w*:⃗ 'Gtxy eQͿD=5{: `BbW34yAhp`k7ёܘiyl 8{ jdDz*C|2R0U \56zWTlДYі3}4i)qA8oglM^\AC=C\hG qq_أPfY9h+RS3DvbCk!\ji89M"p5FXV\i&'gE|LA>`YXLQ33NǍqmKLT)J(;2GyU@ =0\`)+2Qm\:"F+齂 i=.F=HpD..ͣ0H'ܼ6G7; %/%G̳9ed$ '|lQ I!~ q86h㥦[HW:Co *zCk3 *,y4٤NA jIC}!2^cƢ0ІG^ESvW'G#{_µx CJ Zj]peOA#ǁڢwB 8~ ѝhDcJ8 <݂grx!# tZ0Ы4ዜ)}=9) =(<_kMQGc<,%)-x eHr/?lk #ɻ9vЏ0_̩zo{=ct 5ɑ޸.*Cu#hc}/6S6?UPrcYl@CQʵBXbAܖn S3tC뵯AI|ܘo@<8ӽ:H@ 3Eϥ|Aa/{A*ÿ& I#q!x3,^ z :WhwYjn=/):>25?6v= ֌. bMr\>۹=PzCCpٶeyJ i)\5 Ća˱yMhrVUٞTsrI?!+-v6*ʩwD֔8grz/V=2 endstream endobj 63 0 obj << /Length1 725 /Length2 967 /Length3 0 /Length 1528 /Filter /FlateDecode >> stream xmR}TLyQ{?lhjԘhj0[s3stT,-EZۗ|4VێJ"16% mB[vo=g}=>qb %Djʢ39`bd2ζrt㰔@0OJ !Vpc2YVq$JAyJ)bJL|u-.M+a D"JCa (K@)9B0A$p !4! RX$_[,|((lXNhFh Gt+ @28 A!zD Ґ@p$*R h|L0(>GHd*U!%dR Eb$AMZx#!DnIO_0Tq"<@*A Q9!hXI~Jqh* h( āp&}Do$|b-Z%1W_+8CCqA&}Br&zKmU. o_3 e (].'ڡfǁEaʪ% vGm:oy׽sg=;4愷M+m˥=h6skɵmy/e>Z|HPlQ="&c]Y25;*Qf~`WYSeܡX^C79;R(&nHSfC+#wJ荷$qGۓMbZDyYVI~Wp.G}*<Ŷs =MSfYK3OCV>v\8wy䙣F({ :ߑli(.^׺7g!*is[gR mMYRz)Gؙ캙wߣ(#+ѵfIWDvuOЃcsNyE3^eo[_S|EQ3NN {k.pX^YOMg^?#=>(7u7EaS{CP>77౲WR'_vIͧIjkr(xIR5vk&)hٶ1bWw6y*dS۔uu߭)2R]IɈo.?ħz]PƆH kWVCweB`ʎi.0 v )ŻV)Uܸ=j6|CΏ endstream endobj 67 0 obj << /Producer (pdfTeX-1.40.15) /Creator (TeX) /CreationDate (D:20170622004528+02'00') /ModDate (D:20170622004528+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) kpathsea version 6.2.1dev) >> endobj 10 0 obj << /Type /ObjStm /N 48 /First 362 /Length 2509 /Filter /FlateDecode >> stream xZmo7_w(".I (Mk'$ Kk[YrRrVcŹP˝%>Y%+`b"8&$>0a1Lf$&=R0Sy);cg[`J4T[Lh @w 4Ӡ[_y:$),4A9f fD0]ஙw,v dV60[0뭄 (RBpz< c@Ef^9 ̛rJJâwP̈J `Mkp<;mU{*?.|/+#Naowr> S#~㏑?P$/Vjr, [3OY?-f|^%^B>ILLJ֤4O~>QJYI鿗-37c5lb'EL[1"qXm)U()]c5*]X/ ,̛~XFn8|Pu=,j(/BtœD'mSN3NbP݀e9^|L)xA9JEa H59E}+fC : *(q-z*NiF9&7X:> #1cM1,jHHIWUtE<;pZGh(#3E5ѐ{p^Grښ1^d W'F6mOΤ̿4@cI^i]CcԬ% %)JzVOqcbIW*4Jj~\%_. ZSO2Ve{ ti4P|,nqlWw`.&E4cV,mIxʦ_az.X5}) do#ҍm(3A$V{#3ʆF 0TnCH/9$[M $8˘@I'љ[<}t̽zFv8g_zag|5*Y'"tY h\_c}>%/ǃ^u/_k~!1[>9g`F_o;,pR[@I! <za'3( FzEFo_FǛB"QD[<$@ ê&A3V;zZ|A'Nr8ݐ71eǽf{ə;%̞,\HFݝWDU QtxfF4c\O FWG';PtSKJcE??6Vmqu,G1KUocګl8);ޔ_L{,Q i`2/M,M_Mx<U<+iu&/7OY<l2-JJw/~= >\L}b ]J:{? {QW˶oZUx5޷Y;;g/]`7ImJ~Ogepڟ<@ӲVGv9+7Gݮ|r{왲f=_4~/6j\vgXbܟ +p^^‡cN!؆`~14xUePք/@i5#y!Hv!w)̭Ș]lϻթX5&[]TnהhxyolmYدR+m^lϾ]VѺ=vi1_5o~-؇v$Y,WiyN5rjpC+}*ҧb 12:@[Pkbw{vpO:iP)(Ij endstream endobj 68 0 obj << /Type /XRef /Index [0 69] /Size 69 /W [1 3 1] /Root 66 0 R /Info 67 0 R /ID [ ] /Length 199 /Filter /FlateDecode >> stream x9Nas~fQd q’ Z**wAX a8yޛ}p rP݋ɳƼQ{Q{G IDH>ˈ4q,r"KyyQEq-nDIEETYjU'[b_q5tuGrj띫M\1/q?Ɏ endstream endobj startxref 133559 %%EOF survey/inst/doc/phase1.pdf0000644000176200001440000036043213122573411015214 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 3336 /Filter /FlateDecode >> stream xZI#ŵȃ1lpi$fQ=s_XŒJ >HU-{w7W߼uew}Vք*xx&S̪ד~ -_Om'յ V?4J~A[*. 9 ͏߼ԩZ% Z4bL;tC#!Ov%p8^ [e<ȴHkռQ𽆟nX%0 hjߨ1RABd&_z Dk-©9mR5^&٬~sO`f[m8\oheO*͟HٷnvB̌o}[Xgy91{Jw00~ǡH[͞.tBaKYT@Wbb+p RXe@Y DYoaM ,J OTpd=SLyn56F'-wwGE ~vUgRxGnla_;k& {Kʨ0M=dJ[njm<.:ZW >YVQe6~4FxH' X~'WD WZl1YEOɫ,y9u_G@}oR"$?u"حUHT a_f9kx*$o>~p Kj[42=كU1t7Dv& U߭u-2|=P,C \+O_5*PN*eQ%MNj5 'k!!ff{22 JcmeÛZl3!=dEbl3Q&(EK+F`pa\<}l) Qh-V@+T#z$+TީxK]͠Xl#5]U*mj-W9K1XR72zhDSyS 67Т.rHLe!(V瑱Odfc8 P+$}Gu4ٺտ}=VŦ3c%7 hG [mY *͛ڄ1퀥KylcjZ$09 {>L|&*WOhӞP#jai6 x N6 + $0ʌYjgЩّ{C8]W d(oŪb#\ipŞb2ԜٵBǡs˪XR$6߬,UȡSS EKc 'qvOpI+$z̨/4*f{>0g,% h_R3}7Ttϰ{>~{?4( c3>QғGfl/ظ t%3ܗ hILWʚxѭ/3&F_p+BwĆËp #/XI &yË~| 0>=& #HvbŲ'+Γw+ny#* ^}Nt:xS09N2 C0BB{h׀vtR86)ƺSsv` gN8n xqS.{1瑀ZАGQ_ѫFSzOV\lQeY05Z+T9B%87^:)>Tڃ h cSጺaty|FǏhE48)N̜٣F>҇"Jκs=!XilbS➋yl9@@DɕkCpJeH٘ь ChOcVA> stream xڽYo6_a`g"R؆(Ccx~G$Kv~`Lw<: Ng;Y'K$N;q2:ûSOt00~;>0h hI?K`04ڄl ſ w'EdeJQ"|u$7MH3KS#bwa#hp .$pa.6pTw<1\`|,^/0>5<@rhB9ASO xvؖ?ZNV!87tء>|6 ܖʍCT'EL#1mɱCA<6MΉ:΅[DkӾmVm>Qݮ$ ZoR֔ gJ$AޓIwa(\wsT6nR iwer+v}`jjѬKC̡T)W4 ^juM{Cfsb>3UZn~)$:5,J2/GaJ!Pl@vn]m[[M~lYI$6[+E] etI] aA,c꾲g{أ|@[ 0#Ԅ;#&:kJ VAʿDeR_vWZP6WLۂKٶjKyQ-Sxfx2]eMmdjk2 4LQyk((ȉ%+G(:f):^+D4?3#tw1NZ4Hj`Pį@,Qqx]{Y C੡9iX{ 7fw$!0v}K&6_mc$|gv^G9%zA{=:ڔ4lðGf>rm^fg35Gbvd L)ƕýv·R]B8a9ra AWsUmjU/L tg€1{KKɿR_fc=Ya_ᅊo=j',::vSrX|u=OjlH|_; 1ȱ Y:]^-vN12ځhh'L勻<*5&w?Qwr)YJ4g-ݛ\P'}Ԋֈ+|WLN\e0-ƩXҐAq@|_ endstream endobj 31 0 obj << /Length1 1470 /Length2 6277 /Length3 0 /Length 7273 /Filter /FlateDecode >> stream xڍtT]6 J 0CtKw#C0-%4ҭHI ( HHR{Ͼg_p *A0u$-Tt,@@(*pqn$\f0 F_Tk.@2 I  JMDd`8+DHT(3z<^HZZR;@C. sv#!p!x:2¾B`w/!$IW G;`^0 U2@S `tDQ0 !]P p;XKCE s8_x GvC Hw0p8`}u!ZF@n^kv&N PW2+S@{ y~(+1!*HwwE+?U8 >w?uE }WpWPoaSsm" E$%$0O,ko|]Cp.w]H0^`a@4G;(x-?ן H[,fH?FPD ("-"2$ZG$@|}τKy-]J!/Y]2Ug`wƵtcSaͮ. voT %ۿA h_nk v® z}x]7n MD\F$m^0뉄~  ,@](_=(0v} :N0a@{y Dп$F'{`)$D6ҥ>V閯ʈGTO ޚ_PGJݔKj<.0-1 [Lҿy_B,hxhۂy+[ ķWï mqD IF ߍãym%`DN'*MD^3fbd=~7vy#dh=JC$ [^>l-T<3CiȆ}ۼuX &dƍcci$wKR@.jWD2A/^掷^2=iȥY7X{XZV*8\*IXx>%O(>q3_izC˯ZeTҷeue OCXMxGUAQX)']]$ oO|*O\ҁ6/{7Y$vK\ѩ&32Gz-lҍ/5з$.|$L[qQ1 [nl;g'u>y{o"*1B'!"s!'9#AM}K[Y34.t fQ.R%!C+'<'kǧmaMż]'rxIv:V\)l 5*'k5#$\2,%MIxygQ>"@j c>-𞛘j5{2~-Qś"=κȦ$1̋1jiUϥ2_[g XQ3}o(NFy-ayY'gގI2 p.49 {9<4lw?a&f 4x3C+ry5rsI¹ygEu&k܀ǒ;CɆX.SauIVuo([Q0ǩS͍m#=;peP%+vxϲȐ>vcIkzyчvjZD^{IM׊L7tM=]Gggz5s&J؃q@2erq9tj@Qf@уJɄEG&M3tPʾ]۪KVŜI),+ߠ Ǎ2W1>nQ4ll~Zgehώpnk1@Y e19KT)~G d;dP o?U>2+I^(?:m={4ns2 ='wy?uI~f`t;$jڔwj,$(7KJ*~X&} <@=GWBZ밼Y?9n9.I$^qt1E fձQ{: ~rf0a&c1sȐTOg/{vsnX#`+B=T黝e:ME9wȔ#Uc^ط'#; %^}; &P]t.#'~T-Z洇ܴx_~th#ӏISwoqu'FʨM?bt#%8eb~=VQ*v-;;?`QS+՟7^z 0kcLβ,nmg|@KW_+Aea{:%,S'Gե<>\`s ~]v⡢VX$!C㫛{ ݅\F6dpm>=M ;3(۷Fi??vJHH9ْ^F7C^/dCkr4^`Wqoʚt771ݾB|ۈfʎ[`{ݽhL~:rt +,kpjLNYgjߦ܌{$AktpFv61z؂* ]Oh:vXnn<gL6TˡLX?6<VAkM_45'My;FVGh$3(d@gk#kzkE'+o9R؋"y?WxB),L6@lE k|^m%.ʁ x|*suQ 8 ]^}Bl\h~8*f4阼|m]}UǮyn5$+kmoaEz }:cܗf$3ȠHiBdxQr`F@o[yI䫫́=&hiM=B׃&:)FVEgOaK/ͭ/GB5p8o~PLQDRi*nn8!wX~䄽Օf}qՠt!hdź+?0J#E I=Qԩae/ţ7.JXSӇ֩3L3i=ߩ3X[~F'TүVs;ʰYyթզM'2kEsx9ZQ~$ԎϷ;gP(Kx(BȡзAbkPʀf}S0i.|*Hc &D\˲{AklMgiQX={Ŷ0tK MnfAG"$n$nV|| W]ՋKоn~dGdb[JRǑ])c%041>gaʖԐ)Maك^ZF RfeS! x9- WYF\>*O*gl[0_:9Oa<3 BBk-!J?OH1lqL柙<'^<:ˣSL q 8pg\^^uKrP{%!~B S(|5º:82%8F卌d8,t:-s T@+ +c M6b, u2LH NdU3!7pΔUİ/NO+R+YG-4,V3oUU2!PQ#*dnG֫CrCM:تx("닓'.2yO=?| rn9r<&GHw۲ VvIQI6&=,~l0/;-Ev0.[w:~UW68B `Cf̱VD`֡uwi4O+^Rq8$a^ Λtc4sE)&wJw Mz$w4_aN~$/RWQWizIIy!1`F=qDL(dX,Mt?8 4Ul<UqӔ@ ldB^NLr?:&FLpJOj|ZKrމ؊C2ަCLrpZm6ʝ)n:)WT ˣBRGin0GP|b4')V(Gk8 ?tj%JUy'v!Mlvf_) x`"hu2GjJ^ɑ;lxMgZ*V$60;&J%m7/-˥.D0CrF,Ti~dWJ G~4^b!&GX||:!݈\;bb4}q15>5Ժ3Y5f~׎d?`&j羘b/x@CZmjM c.tm;PyM3ۨtLP }aG 640[{g؎DnM2ABk g)[EA`KP]v㪿Kij@NԊj5qF{R=ɖKc9 q2ל/& <" HN%^*zhԉČ4fnO7UI, GXZrx(jr sMtQN] 3 dhNBvHg{qV;ޞTM#9ާ 0"s='y=RO9^VnҰGNFtwE^B+0} p3ϔĚ\%w]!MMVK8'.vFrB{' ,C嫋hx=Ks-SL\xMfNfH~Ҁ }G3d436/ l:dE9*yG/r~ WAg{o ZS)GVŋZq> stream xڍTo70PR) Fw#tw7Ht )!H狿|?}پ+>}c吱Z.HNnQ 7ȨA: p"rp0y/! ա.nN@> ((77[oC(\(r9ϡ.`Q Cdfq! :iv?ԅZCH ,nDD<<<8AN(NAu0l]2P 4N#PS Ez` b vAܻ؀Ӂ*j@MOc? ؁5O :@.^;- TTDz"ف ߆ '8 HT+>5C"85rsf93O[݋:@=\|Feظ] n`lEev`$P[XOXv=~-mAl? D~>o@@+o{1O|?8h}O? ?Of 8ykLj4_h`PO/W/ 8Z _y-;|w aw0 =u@n-m}?\h;z? ?z3/{!@z .kjsw67ժ A bwOi~Nn?"lAZI? ւ" {/no5*~ 7/b }@ }x\.P f?-=hA oHiy\:"~ ޿He/33?}?WAC{@A{B!R^>u`O5`aj-Pq^'C=!qvn1QdTHZTP\Q4w֐u=Y@AkGc7{w`&猒n%0EZ>E߃-ec7ˈ>уLQyXFWO]Y :6mcg_lƘLȠS$x, PF=w$PXk\: JHfr%^~9G26lX6 WeA2,x0O(Vr|8?~ba(]=Aj_cgm8j-6,}?ې!SC^4=ɒe@#>G\M_xeZtv%^oX(ʿ~nc{ 3o!OA|54qs6H0aS=( %USrvN҄LO!Cg$ʟ gkd$m?V58[im/(+[e߼t'V}ͺ<+CZBGEk !+mX˶ U|0)Ogm?T_M38:2Z;3᧋lr m?u/_}DDNէE+[}^M0EFE6GK/Ͼ7IJ-n5͏@xdLo"3m#T$^WZE w B\붗~=;I,u:F^O ųɚ!=}$gbj圡kU~6_|I%{ȗk<@Al'ץ`>1 6* .$]ގp,yZ:)QJInҫ(pFɐ?A * }'JB1"n4s~gmBV&lW; Y856NIRuZ7gUV]xkzMjyxIф9PpvwQ"5A Gnq\`Vp#fYnY|#WB S OAo8Ԍ ^TX}71vw Tq5Qj>O;G8])SLzea2YQ0> _3`Yw[ЊF S2y'}pN.TIJTQќl=]󨰽~oX/kxA=?6;|O,LC3jbqy*՞cfgB{J`<@唺R1jgyw sVdr~!2@UzgZD49 X؉BmGQ9 `~kXXZ{ `n怛A:X@oYC;).yYK؊1G !/9XuhԿL9ЪnZ< ) L~ _b(QC劊"*Kr]c Tșq6CX}3ߐ箕2 pxۖ3Xq|V9zEzբH\ϋB,v0 ZulO,G͏8Fˉ272 '_m4I1'ʺ`kOZJ&j|̭{5+T}]GflfrA )ʋׁw%ew6Gb`hՁ=C{06H*yLN Sxpb׸=!̯`ڇTx8zA6qѪk)?qZE8s*d.%Y JcrE-TȠP²t tbftK b1_mR˷GcJ,mlasisO;p,Rͳj7;>>bg,]"l Myov"w{#j\3fͤ;M}C-66OaR_?f~x|> dbD&yL}lt9k{Ỉ<6 +1Mt;jQ):|r`x@!@[ΝyQ:6K{^X 7 *|NNGA|cЊCX Oڗ\k_rBJv.Q]J0<9|@ʐ"r9b; W=2,?SVHۘF)Zj.ETƏV&U¾i<2[5ZF:/Vm<99k{]Qp8x>`٫b 1RYl`%=j|-wQqz v]*SۍWN:ZIKA᡾FZ3y{ޫ>5?3Qߌ'X!gV92KK1.pWՓ?@e G}ȼ|_ReHE׽<棕pS| /.P70r} *h^i WJ|;e=;s>' _$\N6o#zXb7irDZkҝVMn*U:I9cv ʝŎ*Ef&SۯpS^l.Y_gc*&VT<8L:Q_xhx CR^ur,vf5.㒓Cx-IB]սyUJa򍘜dhhv$5!NbnUÖ?%x&š xb Lr.ڗc+.pZ7#$ki6H)q:Kp_=Nͻ}rwlNIǞ4/%/8rhVyS=폄ϫ{J z1PZ2vUO7Q2Iԩ|Zs%,ɇ0P1⑏&G!VYmlb2ѕt0z'[7JҢAꁑ})OGWiVqpj“oSG#}?LwiR~WLFbhJxbD/>/KĿaK'72cxg-_P+AvqSX*L*˶gILTyuL/c1p>Ri]O>͡V?&p1KN\bO}=lUp*< fY=ܼ|?Q44d54X}I%j)^GQzqW5T[.!qFT+/ͤة6lgZUXj$a벆EP_OIu/_/$T~ס4lO1%Rw(0F=m;&+=4ԝ[zAhd s醟 4f`23|[*[Y%wicnI%g4,?.D ܻsD8NUdViD&0IlDU 9 +0QQ N*S .PAͫuO#s o2ìuhMto2޾4De,0رXFK$e%ZHz* miGI+{-9J{KM= ĴL2-CF$R[JU3fg kg Į~hd:QN(׀frGoNLsZcK8*;5"ye dA^!Ӥ~'! ۾D2k4D -_i)Xe7(} d:i2'-<~g5IrƠrHu%7ķHlܗdTDg׎GttH۵0<{?1sQK)JJՓ}:,;y,8(M{;9G ^GM-9j1m)#>X1՚H7Yq tP?PsbTniH N#)0d|cJvܑqzdc ^q^QwX\2.mM^2#7͟7G*PLݕ:Dqb;&mqH.jF^"yBJx $ TlǞg2Wx23tɾ}ؙz2Ͷs̐[(,ȴ>ꖳ$Tp1,?#UD*E_ܧyL {dve7;\lYv;#ŪJ凔'xʐWC׫+ ]5'9 |<|+}:DlfHF,Ġp` RXNpD*{#LFG}`'OCɫJof܆xJCLdOrd3s琮+5>}Erp~edbŷ5qTaJr}K&UOиLtd1lF.xjNk */> stream xڍtT.)Ht 3tItR03 R 4*t8޵]72 8(hj@A> PtuAa(AHOD4p$HD%@(/ M4j8UG+ N9C`0 FCQ'BN}E="vvCIs`H{ v``sG"nP@  :v5x_``v[Fp_@;Ü(e9]5!n0;;׈ʠnY npv‘xSA!kYG8 װml aoz@UBP.H0PLTPLu@!@Aܨ \.[-nl`$j: c<f =223co/+ @ (%Ut] E@?ݢ_{%_qpYL b-M)7"7;;0'i=(h"P27GPGU`v(2B0we7F/9P;׷W /#%65(9%8aKw"z% jl?DP3lnx  a|LpsCe: !!mgr^kR{g&~ǏR>CY֗#:z^v 3'S~tL3Mh9$tuݕg%gKb#+VU m.Р7YC6[ Sg8=mI]/ׁO$}QAjk,/$JtB8UFr<_~D*d38~-x+0jy=f#OvUzzb +wk?j>3Saiܗzr+#=Կ$_ߝe5e,[m@/!ǶkhiT]762\TWY}Pjjεݱ!kkdw:ͫ=1&[~TdO{ggm So"Zp8t΁:T.l/)I=% 0] NiZ;0v"ky!էc zHyP_DAG/_cRODN"erlt?K4 =3!JJOQ5dK|)$Ц,yÒb/=/ $.O-v6qu+Nkc_&GUl8oi0n'<ή-0.|nxAk #|yk)u|?ҿTPKBh貺׋e5S'سVͪT\fGW3G^ȅ]ì[jofc,tJBGhĩ^//1}\8&{ ӍpZi-\K=p[}w(6h?9>9V|+m>9w97w^-HT>!A"rZ_#DgI{}b-%tH͙mی*jxmÙS!Qĉq~V\fCTI`F9Su"(2uz#n R9mm[KƓKL3zӱ.Nb "eeB֠HiY QjwU/Ele)Mc{p^ j/[Նuios>=B%.f|Ȥ^ J90gŏW=ߒ Sz3I}з۝7!9hz?59SV m(wU`NqU [ J QRa*R[|B6bֿPp{~Vdpڱ RM6FQ h{~O;4s //IٲI/Kն,NVQSIaKs8 Ua^H;`. !`L˙\tq>6+pLV($ .M_<9zZzTEհw<ǩޜ֝LJ *ݬ/RZO2'݈Jrl%Ȍu*EPWzmpš4{>͖6tWU,ji%ZWUl^c (D10;RL+ ʭu} (Z2uƅhM6g, y=[Q蛅a+e8Ss*gj WH3M#UQlS3Pj~K]c/UDѨ h'kg "3m[r y1w#[ð~!hIۮ>X7sn{D|"]>}@ث98\աJjsIÓ:+I/p蔐 I4CR3Gl(=18謧ž^[ĐF5A5w8ÙoUY:.sv_(]64lkN_hS ^Ly7&'Cw#% m=w+p$z$"% ;b3o.a?E9Q6^9rX[?lH])NB[z){$FB#6VV ɽ k"{Ggze2v=]=g}[Ʉi-Ȋ/OT1y*j6u*62X}W3R3i=w}#ankw96*:So! NuKKa<}nmKRbceU'oOBVw[Ӣ.\jܨCh<`"L6\XK}y8ځ'sw$ûn^|˟;a}=z7t(0 쌯{cNj52O52_`Hc´率4wWeD ֎2 4Vj9=iZ[FsY57=jٜ֥Qk4vF[Qj@K(5$5ܫx҉޻uҤ&)B>.>l1@aŠ5gE6M@&9\N\V^~'6vS 20qـҾkɾ 0%KaC 5N`#;}/!e n4(6<'xRGV),0g2 v5i.RH 3q !x8`sNJ[KM,(w7#+lkflC>qpU1|e Kʝ`("~Ճ/+V#,l *\j`&+)$P#cBm?%1EZ=UV޲J/3:kKXw49b SZ3'`(vn}oWrF:08y)~q\Ry*5KH%^tO27+坐 ^ט*#XEFbm;Z]T$AX>51F_m˶"T쇖inu W)4OKʻUHaM:ވ;Zl-cScS0ouXvJ=^'/66^ΞfKl2z,-a!Y߳䆕V=Ew+rXsM#$>C84ސHkw`e wx*FVr/\ _JRz򰎽ƦpeEpԟt1CXKBp:vHW"o(;pGʊD?+{e5x`LN}قhfO.c]?=+j~dJIFA/.sho amf!YJ: (gI$\B(XH^␎P *ො͑VыJxcrZBoK(Z!ڮgLbEl [ o 9?rm t}cx crh[f#y7m{lt=j|zn=;29ZC+6ƈ vBL*\F÷U珪rat*~sx˃Js\$g6LKIOE DS~D Eqh%eoX7|/u~ZX'};ҷ)W(/C8Ce<)xļR8U~!n]6,B8џy>Zk4M,rm1TX$ZFywܐ0> ㅭ}zKQ)0{ R|w:&eKit_ {)Ca$ iMNóSߏ+,I 3]"1DeLbR /!=Y/#4զc*pt%3rϊݜtٓ&~M$z5f&weKF&yӐ¶Ƒ]U3lFA&r\bDx__O@4 n~tGv*\;Lfjҽ?Yo{]*S>{ʑtx0\:,%Ճƍ2þTU ·W&GjuiϹG >쳘qe&ni~*)4m#gF֓eyLs0@'Serym28/?\8;grLSИ8wT<&sV.8E3Mv-ɊmuK{񓆷c pkS+|G{ h놌 6'L A/%Cv)|۝?Rwܔ(2۾}MPt6@C3d#]{V#`zc<>⼝Fֹ(gRe.f{ʤQێEg4`Z }MB-%p^677]%lSSBV|&ّbZŞ kiZ /G{s5 SsXSk;RNxOF +0~ޝ] .%һ*fbba.Cm&y8y7gz I::-2$YY?v&\v"lȮsEsy8*aƺ+}Q[>:EzO;L%&MYJŽ~3AԔ=!y>v0T^]2&iy ~1v~ע2@?\L xhζ$Mb-7vDw[H$_I#0m0Ԕ{4ev`gZiiWqb$oֺbGw3ުMk9?,TsV' zڴ5&v-3RgJ,}IiX 'yƽ(f~'bގD(9񝴙3.q:uIEy;' ZuVKl4O8?6/=/;rAЂP1XtBLj#v,VĆQmg; SPhTHLZX#u&S0?~wۧsdڢ^gkǼ+y"Xܢ=ܘ7QLhe3WMnವI3˺S;]9?lz[B!ekf@9}$'4o7O~Ѱp56(66<DcP5F/i˃C#bp{N::Fƨ k}<# endstream endobj 37 0 obj << /Length1 2220 /Length2 17544 /Length3 0 /Length 18886 /Filter /FlateDecode >> stream xڌP - A NC8 Kpw 罪{*e}ۿH^F(jra(2hHIÑm@28˄ dl@I'+HO?6agsc -@t#u775s||PQ88بtX͍ @G3 J6F@G6st夣sqq5v7奤;@{g12#(;%W1qt1VF@ûhx8@IB g e,5?02M?A:XAs+ @NTՑ`2  )A^e5G|@YK ?dlGNt* s;'LEpLzzz6&t52^{^6$^&?p@ߊFp cs#G!h~o+@}I}m@Vn_:yquqU2['(h a02^M#o`0+2p{'b \6S P3,FGO 6; Q'+??jks+ؼZZJ8/2;*l9(o`YмWt8*#E@F6# + @?@G q|w0,:?D"6z? @'buJ f?@bЩ8ޑ߈}8 ۼK A ~M3-kVpA9YX?Q}``|htx?UGާFɿXޑߐz' iO2s5{?Xߋo/{i{XY@s/{ll_7j$3FD'柞0_x W_dx/ͿEtf5=T ̐%Sx,ٷ9=!|L_>iu[㸹&%^ogXũݟpy}h<_غ+-8Q}(w ֮A.EL C\G/ʂD֍jD&AF(`s5щhL"D4((HȕPK5B`%`d=l1p_T'{&;p#芇DL]EY].BI<+lǓ3=aS޸Z5>.2^~ [__U7w͖x 7UaqAl5^ʉwy*fcyԌםݹvK3V޽DKNym3FQ:~镌 hguyvCL< RRXGC]ԟņ< B42V(¥ȃ{gT*X%IH~>5: E< bK.1&VKbP;x˔1brK ekb_7bGx:_oT%r2o7A.m{$YƲBMiyrwjvD۸6; t<7ODq]6$SC.6ulJzz/|f#NقgП9`aX;EA,JW.d43UbEGX Hy$Ŷ!fU8f1ge^&40|I6BY|Yӂ.{kqjUXJ-[\TVW\U\1Ǧ>UxلS4jM>MrKOk\]5BV%ۭs@#p:u',) 2&0Rp?o G|]y[e Czf)ג(hC[`.я~ L\٭c3Hrrԭ'=A?xy6E7D 'Ƕ}2X6.Z#j:(K|y4`V`\5 (زSo*9Z8K!v”qIgc|C() pnc 6%X4YH~{,?'M@k98״U~B8nYg#ҴGLn!8^wLpnWZY[k N%Z̹J. TF3Y h|q N)v+6ƖHA<*D͋C_ F3Uv'k'%k^ j)R8Y(بj gIWبzWUe b/XIW])w}Ea$& r!^c/E`!RUY3\GV~O\ƯeݿO?=m /݇VY]/($zc6K?.o#ֻ5CRF '{AA$4SwidܶMVhiuOC T&nEz5!?og[a?].cY%`,>~wS !Fp,#ab3Ach?YȺVɃ+xPs׊<' 4b&罇MqmR-S#[^F6ɟ/tg 7Ů HZ[cb}M~$:dOnCwjEҽVǮzY 5,2{g+0h~# [&pv,L;X3L-^<(WgpvIQjI .( E#JHbWOP5yZ$%еJXǛp`ա`S3CܐXEM|˹)YmZZ BA/65ނ`[@2yE'L;\⎓Cz/e ' .vn:ߏo'bҝAH/WǛ8Aq T2Qfy8L= ,A pHaVE \Iٳ \<|Cy)Jūw]0E4h\vVchQHe 4Q \_%h{3Q-`i ]o%W7X$ddg 0̈ ~߸) X^!aqOp{ݼ˓IV\d_S1&S;i|9F`JdoPqg@g;_?ju SߵA[6 zQT|&zbH6Xq"J>,ʋ]}cFo}.xy7Bdž+-&l?/p$K0%+Bf|~,)܁JX/?OG.˱2>ҠZ٨P\ECۃ5~Y_ixX3yZ}pƯo!z٨&ڭ{ξ>HȁL>58Ѕ[4;hTv JT:ɎP|\\\7H ķVO,҅%F^f$[h*1.?5^49{':|Np)-`os)}^~]i~bZǐC _~]簯q/ ÛE&AT+3m?F-|lu6=23T'5݃TR6kAӻ7f>uF"ԱTݮI;iMMz7}~\$ eu8(&CKQp"7LͣnoK 8)ThK"'i6:'{J(!u.kT@[ M/ H"Pv4E]FM%auQQ@ U!<^xϗ6A~wr#XULzjL5oCخr,Q=Pؑ@fׂ[LG5m!g{q*,9Ң5U(d>_yP`Crn\T8L̗XF$'}{x|xGa^DqY7d AC./M F9K, QNWH%caxUucT5CRnx`i=)Zͼ8\ZVKJ|vfOQ]'Lɉq>ƃ?.%6>o ei䈈r 6}qqbtӻzZFqhgV=9|zf?kX> (Sqc-uZn0!-p7vS;td)l.JׯF:ט 8)Cpt6Pd-K 0<2OҌν`~fS uE y(,yvR 燒hɿx@(û9g`&Gux&qz9˓S%E އ!*[:|I]ƉVoE$$Aؕ4MLڃ^a?bNgc`ð/^ě_F,;Sv_^L0WkE+;X4}+AHSR ݁;4 Mkš`=xGʂܺK(2 <0 "!R3g _}ؠ4+巂 s^u5z>ΐgfHI4U4+7={* 8X=.L",Ĩ lD7E&^V(KJ?p3柛ٍ26A!Rl\xK2@`iy{TE"%Fb"efJ(s}?wRջ?~3t~g:]4G׮e -Àx!!̖:Gǭ>2mLN"^z*+|`z|V7"e]o쾱w׼D.,-Xkp80Ah؍Igl<'WVԄZVOd QC2ݏ{B_$[0#B GpNG&3 ťȐ O5dtI@ 5OB֮a7.'v=1Rpt>E(a)Quo9G!KIPfl tDhn;"5!'Y8z|ݳY+Q^um3{tϳA06 4~ > =N]lg9[鸈d ũO,31O?}S zjֱ#tƶYtIv c;%s[')ɢ}LGPγ}"*9]Kx& efEPz|?SШ:3 Fݫ(78;aiO0j6^ PTx|,vt'1&"CK.KL+VZK7!ψPK@w`r}@S8]J ,WZׂ4eA@($v`sИhu4B}X:盲M`b݇E63[zQulqPgsj|4}םvy 0…wmyN`h]yasrWXU^Z㱷ffK&naf>XBblvo7(/V3N Lp ,u(q%`wܧ/#~ ‘U|8eŠg??W\[ebrqPF졣 Tjb;uWbǵ/C (wY}FnlY/\LG=ʳly< *Ro%64v/}R3EK< aOrϭ:ۉUV=C`.gG,hP(+c8v}MXp:lQ$Qߎ7ZX?e'uM3DZn2Zڕ;L] LA j_V5Ƹț(<\ʪ W@8Ր,45Ufعm~o|x5-#%&ϔݡ3)ozfU xvF7e*|Vk)ϲZtƆe|8m^CoFSkXsU Я͓*zϳlhW2\ɇRF~Kd/?欁Xѽ1P > 8J!; V;RD +]">((B;.C؆_d&KLq>_.h [HiD{8e]܊5%ua'^]i0^"'(Ȓ]iFEYFG-&_*N/W,>|k^me3^x:CIYrqYP5")VCd"k\kl;"<*5Ƙ[[Tsd+uJ$7ndw'#ϋ'+-x랺8sba.m9.!00$ S[񖜠e7)CxԍG])OOЪi%7jG; XYJZ\PXCymU6/Й4JJ{b8fYLo:_ryg*?&=1J\T[ևkD,LJV(%I{Jţ'kKF(kobN 掚|x[3ҧ95ٰѨýt9Y⁚xe5l*#!ё~%t0IJveMM,M;}]eΜf#4%/t sw>Zk>h{K0&q)Q{vݕهOt2>QACU# (]^ `DJV:^yrg1r|Py3[2R#sm( LԕJ80}JR$5JMzëv,:W%欤Wgܣ0kSs80hAlr U$p!d{ny߮c|Ksm46MZ hxn?P^tDb.+XWٙ? f 'ʓCG^4'φ7IlG%;f7Օϲ|oJd}atÑ!c$ 4%1 OWN6?' E#?d~L}[*>}0$ڢꢖu#?8l~GixBux7:%e-`Y~S?ڒ+f2/~震jmPqT.F)_l.{{erJV,'oiK~)Z^^0u]!|+gMv& "wHvPёjRq%jZuӤVY06@8wK7:I8]U7FvqBvᆐO͟FibڊT$ ]fegDna]_$+lmG> (U̦⓺(+E\0P"Wɢ%3gK6Yb+݁/o*ɋOC.(INDgAq4nc3!q;59eWuk ]9σ=)!_z[|+!X~s((OÞ?v (xu E.B5,M6"U?uhk~ n×<Ħn3xWۚ͋m>Wʺ|<5tl2uX27&8-ڰق'O7 h%\YBmPa69<ݜh^|4AuZvcJxߛ6,:K]6}\ RԙL~)MT!nU1aY4a[q8ēP1"M ӠLK=|ͷ-t0kgkJلjarRpS`5?۞a:B+1+.U9)$kuyЛ_gdY)_%(hiop Y.LT!صVU7 xE쫴oȧp$G &aϳɩܼھN)@m>߼C7MV"m9$_Sh,Fؠ75!k D}@UuoXI]p7pV30ص l^ↈ <zN#0LcK natgXnNJO|#|t?z^o w(a_ َgi[lGs*:n{B3$\ DJe4;/XEqW2羅X[Ρ |PQTݫw5ٳʉla'/I0w@A%G x/'3@Z L]K5.3+K*{,*y."svCXWTO [ėK<^ Ҍk?ᦆ#-%uW6=N_Qq߻=/z3 Kma~ˋ0B10*7 `Xb&0S}XkkNBI)ęR&j33㮶C=/x`&a*{Rdй?+|d]NcuM\.|I[PbuR:łi]B>~( .JCxf sc4ya+ jnSwnr2 yu:gn%r)7]'$r;UQmHHjR? #O>&@f% $YQESjk$vY_G*aCȮijl_ks,+ UX8aLͱsNa b~W-PN&1+!~2*bj*ttJzqkmSιR7"8}lIT z4QUڨ͠19ڛ.Kit%Cҩ"Ϩ5NQq칐 -HSIӫmsMuV]y@Kqt/x~o2739Qm>:CkewC9o2k6_tSt~ j9#Q ҇᪰KGy$Zi&R)|^6jIf*~jyi-c_{m>f7vd6Jeb]QLPKf\֓}$=h&.R7o1>F8?Z,Aђ:snG tpƉ"vځ}/X/טe6Bns'gÑ\b Ujfb [SQleeC UgAz$gN:4n.|7`aD#cԩI(>"ȵ&HCFcPKv$_Ma'yD<󙥵N+hScaA>;ȇHEhN3Ȑo< fy#S6Ś2b7H_7iwh% w G+ ӏtΥiNLp"ԋjwurv! I%ߓ7/3_:aBlvwrQP.^TM!RBs^+2ok4$%]ӂ&6u^amժcJ31U'@r޽ڃ/KY5 5iߏT!qMrWv_dDIFWcB t;Hbڰ1Nqn؝Idn@نrey_k+;G>zo>Z{t;S%I^qF<;rbԏꋱ~PL,RSNqm EBd6~\H; WA0<-A!'Rف-„%6V(Vit|%V }⃍3MhIꆦ)o;`ưڸ ,Wei[Zf οQ)B/qu`Z"@Ub攦;T3ŪVɝR\%Wi_ahmhM ׯ,Uw%ڐ Wχ*WYP)ˬf={HѰ`X.%js8ᶧOEFfwFj aYWKAu[AeԳ1Ԛ*Q#fN2N:ú(x9!~YwL3ɮD{hr!f^A.8WTz- EwԏL]m:j@BqUJ5exQ 0K2)EBݬ5ݭJQ9m0Zp5X+"%$Y~`_BçzW>Յ* O9.Zso12蔗OKٲϠOӴۮ=aY&jv]^Sqo(qͿv &$+X>ׅ0h%u0b/R_ ꟈn!R2k9~CTڒ#FňL4#l}Sd~BV{y\I|IoPPU}22]Zto[lfR?P~f ]Z[,%jKN kɎh,FaF'O,KLehc$)p[Ԇ'Wk/)S:Q>C5Z3}3Fъ9bGeQENU2W'Fr@~Vx/WU~]lr{%^ĕ*JJ=hpޅtZyvkS;ʫ0Kn`"kk->hO* qruɗĒށpl{:E(dU.bd5O%3 CF˒QW fy=3ϘNEZ7wlQ  D<~5$х)Lۋ薠$D8#@lq+rvl38}v'ָ4& i-a>Y's?;k+MoS'i}./~M8D d[S'U jyOHkԯ.!)ܚ=Z(5vFAɩ (d"”LϦ~b`^j9Dž_aa`ReDto;$T`lbk96BzkZcdDuǐAh!{Qo=՜cbb8#'WS3=xA]Jʐ [ܹ`vC8Sk=`bֽ]9kE鿻P@P+߈}+AD:'W߇ iRsPGCBkO{Ž$ d7pUv%6IBQ5hp7ݰKmY}1rC/1vA]V@bͱ54 JK$=vt(sqidOc`ހGʤY?h*T Ȓ?7jBвǧS#9dLj֒&y3voRf.2#1rbt"?{FӈS-l$/]Nc߻4YmA-*uV؂%j-5:.Wv45 տvinK" $?H8@ȃª'57N$N@Y'i@>k@z' )hNbƗ~ t΋C> stream xڍT.SBqw)N B`E@K)wRHw;G9sZIoff3kqڹـ 0.^n@^Cs|LL` /3&! v Ym ְG > P?D7@lA@LnP#ڲxEE9Ⱥ`[k@r}<f |+# .muba]' ni 3nL&#O= <\ c<SUh $p tENlmkn C`@KIq!v.n`kG[du֏ ՞-nw)+B\]A'P}yYg/`n˝*Ey4acs@ PXTඎA^@X,࿪ wYS_n;ۣhA4(}V!-H7Q^Gk=nF?wVdr_*qd!.0[?! m7OW ql_GE=.ua|Bk(($>AA?*ځh q= ػA1ߨGO$Q/p x\@_1?g=r<C 'qX<0<{LO@?5\[/(yC- [̹i7[pjY*L[Foظ^7lUY+ O2tԣGY&ma~#VUdPAOnB\"U&LQpjTtм (]'4G+Qp"?^B^Y+;jO%h|dp" EέG;T"#VŸg het;{PtP֌QD*P3CgX/rбw?(Hm`87&䥃ȡiaTʡ/FN'$q^u! Lz:bz!›rj]ŭ[i|L7y˝*E㌎-bAb)/ ` ^U--ϥwmJ^=6N 0[\W268F3#^4>z1F6MSciÌq2x1-;3x{‹u0f N߿㠌ve!ZUF+bQB{Jg ,<jθ>jd.F<#ݟPlx(vb -\4C{۩ .^=4 u}QmbpCG_j f[ Hc-Pd PTj>P@~d&LqTMmF]E1wD/;:+yRN0=ն.<}.̠;"dR X@ (iYE3 ګRZĩՄ.IJZD6JRPG|n1p^ɴx޼ofQf15 A4(WBz%tNek!S0R͔ (ޕ7)Gߛ;%pv+8;Ym.ȻȽ*J9CCQg PIzn"`"N Œwh%$0|f4ìSڷaVSyJrY>(^ ,6l*CiE5kUYؾX t>3ɯh]6|%h9| hUL BSEٷ?W!2t݊H Ry Fb}fGk,R)gJn_klR^;hѝvgʸ̉9lcRG_9eoP8y*d~9ore j GO{iȀ$#b/ +<.L=V-t ƪ(Σ! 5PDȯ\esfBHFUvmvң%)kvkF xۈ;$!q^WYϦ= }2if1YQ)7Dw[~!p-U#JU wu/={cbW :0@F#R|6C vsnntŖ/_nH,b EPt!F5U,0;*N_c86wE}lZ=צ32M .ؠBе,$Q>] 6 $<֒"Ք&)J (y`dfE>(VwD5sϦU_'*(I$DZF ~jبD1iNQoU,ߚ~=-F/وߐjmw'-foʬ`oHv4aFU\qKIHh6>R %46v|s04JמNG(yS~E?;GbRp944&(&:j:`P=w*P!:1A&7K Im)b!T9it2 yM;_%\vKxD! MA÷dE)60x{5$"pN*[x Qקiқjr/(GBo0 8bḌr{ю)5?ek~&]6~>FzVvEMաdT_=KfV;## O Lf\ Mޒgv'zx}"q3]6y:̾pu.Y' w7I \vo*kL Q/}NfM׼Qz4>0ȉ-WwٴDuKSNe(Ш$Xhavy;q(}9& 5zlڳP7;25<敏LT(y]Qd ˗ɵ/3u_\>W`xk)Wmli3ڛ3%hBZ6]e s_56DY6n<~85"f)aCe:\;}ˑO8ȷ |A.Њ\~ܖc78d,5=l躡rK q?|d3ik!"}S¹iC>h|\WI<=e8'KOlߊskF/g ibKB墩Nyo 0<6ޠ/}ߣDie\s0{eKZA\h[&/I Ԭխ}m2ā"޾OJSst8Gpl| qqA2V g+43s]0+BS+Nd~B~)iN_P;Z8wf;|j#Y| B\ wμμ{܍띺-Vʞuy~[뭺t=ԄCLxP33Q1eRujNLڕRx F.!cHo#7_,%}`q:G`E`ď d}T2vz󆈵}ĩ~/Qcs9lS57ļM>hUϽTǬ׎ "z&rŢuya"Ah~5ȑҾZz VwVOg!d3,jv)t$ خdRX6rvUEx=S[XjI55(Ჺ#M~tGbliTTîwGߕWlMHn"$g5P!&676*cLWJ >g  lKFgmn(2rd&dˢ+uOcv԰b`,he1/j=ǣJwDUDSg )7"+_@LniYʓTnI Sc]~|qYfXVTЦV:ع{# 3h''FbńI@b'v{()kD.i&6d+ٜ>L)\W/>~ ): /@ʞAQ$M!s*%>6A8ETwq>g>5!_smY ɔ{Vt* %kŶQr: ?гoVd$SaCI|s'89g)z>D p$ I q[Ҭzhʋ_Ojhg+bGve}N* ߘ j oWx=(o}S6:),rm08uF_P8/ =;SjPG]lP<^ݢV'3W_Zn *\4Ppˌ%npj湾}ɯ5o߁V"}җ<{H^}jZGo6XTSЖbXV`]2L^wDDAU+hNCy&aċ4BmrN4jebd H,/ rZYDsHsc~&~!SPJwDsWE!S@'%vh6ԚOm4s0 gZZT1Y &qzrzs,si\0L/wO?y98Q< u_QDj5m8zՉ1pcQĕ628h-S)2xΝ'ƤT;T:[ ʴC f(/-Ғ4@l!5mı%\AķI 9pjO]\_*j4/ԉMX`R;s$U1Q5&58ȕoS QkzRMĮ$yv@P|Iӻ/6dje}ϴ:=tUjE)MCK;SuO#gw}:FV™#“A,EKRgƨc4tw;oe@ "iO'vx (n_OcPrčM$P:J[`.iM ^LԨhZչ-هS?: DYq$' ]9 9OX|9,E H_|p=L*r~Xҫ2Le;7}2>jtFH{sӃ(Mw7* (TjQ Yn&j{qUzt#> IܱU G41gkeRna/ɼ&.S5G2 je/X%O2LC4(jHZ91@?8w#zjh-;F~r:P%' /hD˟W8i6J?y)s Qx.pIq;143z=y5PS[oPJiO6_zoaU0e9!.+Pq.z퇇Nm֯w+f7G5 +[LHS2~'^xh| ,)Cؾhz7Y^*"~lv%BusD8s)IG71d:m=Tm>'Yc?]mBބaK&G1;l0;if薘ة%t!z FEPdڬ~뾂.Vad*n|]u]YDfV9.L{h:SıA卟^iڍ7l }q~^,dHr %i$MMM&fݧԨyohzhR(y^'_x `>\B1^JV 3}+EHv[856\*yςoڳB@~ʥzO4ƛ21Sf=$v.%q[RNnpZĿm4gIjvs?$iN[/wk{ۀkF |dB%4Ryi?ğ}|BVeժ58rB95yBW:Cҟ:kdrJ,5Z{74ۊ p_N2V u4[0r ¾??!%s{sїyV͓ ގj̄@iBYgpĊfZ9!EJK i䢄{ y9ec|l4M;-9 _cC\n̠:z%4q"4¡ }%vTphu﷪cXނ2A7 vj3dG1vB {\g1t^Rw7shD} jqGU.UG2pvq%Num9m7^TKG^(Ʌy֭@ǝC,|$s^*iQ)pr$;sE>_ݪ%V*}Zv^y*D1 ;;-[ endstream endobj 41 0 obj << /Length1 1648 /Length2 9287 /Length3 0 /Length 10349 /Filter /FlateDecode >> stream xڍP\۶.Nt%H C Hpww n}{U7|Q\UIb]ؘYJl<VVfVVvjjM=o1 6@h"4s}Sn67??++ !I3w%@ ]P% ^ kח4 0q9Af` %=@bzWZAWWG~f3f0#jP݁ uƌB д%׀Xz9/{:^4*@_Ɗ0>3;hV { @EZӕ`mhfy7s7ٛ -0{i\,A.. -rR`K >I3ؽXY;07-~7aȢ9$6y#XYYy@'†wxM/G%oK|!&@V?3w ߊF(llK+h E \3`=6ތ^e {c~Y5Դ?:qq' pwU3U**`٠w,e i8nj`f?.H6s{mY7+A^Muͬrf/s 1\A@KU_dK{A`*{XYe,^6 #/) 0sv6Ba}!;e-8 `aC\_\/XAQ~(Ex,K .,VƱx9ڼ,,^d\/l _%KnD._p|)Cpsv~Y;Fq@'eqb!b[v[%F3&4MJvLW|-kyKJt簹1ZIN+^xXm 21vl3tέGgm_Jn)XfW5] H`G&ǟ)<̞$et ONkvLQz='0}x&ҙtDRNgP1$+f ,NYctB&V"j60> t3jΒ 2iZ!q߿'S+{,Bܥ&!llIL@?F-1(D>J)!ϩHU=Xʶ%O)ˮwTVMOfFLvHU uq\/,0m{Go!.M~??U_$>}Hr_d·='ڄmf4j$f`}{2'JlT*O;J4<:*߅ kVr k8Y7iˁ,#^C}? +io9ܡчGj8Jv0>;Wc.I*|JCS0y81W_6鬊?YNE/վjp$ $Ÿ)h{9ۇ7ŌzDdC @R h87_.Vea$n`qc3?ǿ=h(ޔ'GFsQ_WP7SFvZZF"b\6R](3S:!(!f$oꢾB̌'ؠo}z[Bнߵ# NBobFOv$?Ѳp LrXl}^A蹵mngjzN6-OX&RxȽҧ Y@6|$Cޣ\?CJ4N\lҫh_nͺcBꐋbĽլ/woLpXyhl#@;}·ɭB:QePjPV!)Rz:ՔEk!:9LDD{5/'  gz(`U9^Kkɜ_wwU4U_+|p V' 7H#02fQ^@f- tIXo=v0u%sNu(?HF;;SbW\AGŽBNZ^r |[񈖩P2ک?0WCW1m!vpb -idSow Vx2+7 <ŽZ28pÃr{d*NWzɋ˦o2xMؕt*SN0.CeWC\y_!m;Z;ި,\F }*5hr8b.qaK0M &! )߸~탐jfayRQ=>r=ZAu'ć?K~hQc+qR\-OvRP|UֿlKM(ޥ-l|SK~?ઍ9"jx8-AW#O?&po섿Kt&9́ \ao?N&$p*tr ՋykvubE lVGY*t}*q?K%zԈts[DK;Jq ݙ+ESLD)""uhe2YT]y%GjSE(S\ ae]VwM#|rpH7, 7*"T.8'_+^x-T]VS;ͽYt1՛b1goMg:6ٓGϖk2J`^^f%W>6եgL,쎞.L;^K@Խc9-ϴbiQD=,,r0B`CS`vT7dM/Gvq݂ji;KЪo $%a$tlmlt_.O1H ]8ThǾH#)N烈Y"ruJ(3'"jʥ&5Ź倯9LP4˫_Ac?Q<*|-`L맓>'}-YLnd5$ / Hbu½)($4Z[B0eqSp'ȨhqZVZ~$1Tu7ql6 *[UpU;}|B{s"2;3? ߼y!5t :Hvn#m$h5h@S#>ɰѹoڥxE0ֱTZwx*UV_ے_clMH0t=5PFZo᠟AxCB>P1lӗf>|86?z ]>REhf-G*Dž$'# G5EXdSf7z>rf$H}Z It`Ro*ېNIVs_`T#t&椡^<$fF{V%GHaRWXO.'+,h]j#̀lrCUD0ZHJPh)PYs_m1z8C9 F(EuO( +!s_3<6=4b<0lK3bCzoAױ>a) W/=ٽ ESL+>QtZ(U;Ee2^Ûʣ/E*4 Wo^6?-o&"z/SBU*7VsAP#g"Y#-"'uc.oz'A1(u#hkTo,SGα N=G6u);&VTQsG"TCN#*\w#FP4TOR,ۤsrvT ]k RkOT0&iIZӠZc64!AL ox!7JUBҫexǴN;Cmo9gf Is˸gk]x&=I ĵB7Om9X5lQr/raqr.OnhEXkΜފZV8?2t} x»y  !77`ow[q*u?fuz8EWdÔ>3ZбnG0I\$K{^S04mSҴIêctRJZXQw=B'䦏tVρ*,Ou5` i@1 h~ JF =?avlim|{p2m;Q&\kS[Sw!"3Ǵb)ZP2M|K8qt<%9FM4/J[6 0 |eq!_FOC2:ICG#ys/ƚh_m~NWiN)FPIb5LӑYSC{$Ayo+z hr tJ:Xjg$M"]LU]ϹxV/ªb޻c:ݏX^^\fP5%^MVp-ֆS`E,徸AyOKds٫e%—N"r)q4!ˮpp>/҉\ojk9Ae 1h*#kXT :CVlW *|9&6jѢl+w-(R{6ުrٷҒ QM6%RaÐ/{5ҰK7?m*ϓ( D9cOSˀG3mNgm~U6IV̨=F=rIdt肽=ދjZ:zj{%N56`56qUQGK~ܔʹ΋py$eARn eq-߻ =S͇pRaI*mZ& }L Mr UEό̗PC7[/;ہosJg50b8{k 7] Wr:UJ /a+ ّY-1\O|FVJd'IRF%p^ 95<` F5NjB|?#tG3`XM~m)p3jȠQںL ѻj}D+2J1!)~RCbNsdfl~MV|oF,!J 6sMP)(&69!Q;I-o!7 ZqtgHR>z c u,&jZX]d!;#J8f(xDNN8\wJ(V2'x|LeDHa%]'pH\'ЛFy7-~l~P|/ǹW0̀k=tS%⪇ 쵬`\ a;Š ߴwT_۞jQdE:˼HEQ]aסizmqnơeHUp$ x!Lzv"$xeY,y ˹4/f뽞G;]-kVJ=:Ԍ?%D0{:!f2wmKܟ)ez٧ LD]ܹ}Žs"\Y7}dǠEpٸ(N:dΓ1dБ[o Xr([k*cYLFa`b&<|[G~Nai?|{hЋL?@-(> KdtX)nX$x}^.eqtAˎm 9fٲD6}Z}`Bc"تRx"$-h - fvmI_?TdW"k& <$;_ A9bVN9QΒ!D',c3I Ӆ 3|dMmf̜y!Kqkt|c}Spsւ:x6˨!jN5z(PllqJZ>Z=$&ij0ilT_M4Ԇe!,{3+n|NyO&ͼ`U z;۞;q5Ū Bch )<zWgp+J>di0EܩDA2dWNO%azaJF~j$Q'!2=]Xaq B#儝v8صo }lX_V[pGn u5v=R6-qrHp6F%yxvyB#ϢL@7BkQ{a4Ov7CoǶC!1?Ka HV{rnU oC)8&$0mX6oD {YFzSM٩4MGJ\P:̊:N5? ИEtڙ9YuB×?)m2=SRni(VpF>~)Tb$x$T6mH 8ȋ49= i~CG{BKR7|sn_'$8.l]#tqy[Yy0.jŤ\K!XV h}S#Gl`3$R!L`Ѡ?rWji\j; udPh*odm!RJr =izcoؼ {- 2Y6-"Wv-)t+Ut”~M*a,*3>/<]Y'Nx \PH"ɻKmjJ뤪<-tDkz?;bq| q`kGM.C0l 1:U{ΐI6A%P"$Ct|mEŒQv8+>9 V2Y`]^8VnE H,4".YW-JGhۍӼpf1xo(k OH~O#yϘFeI1q~Y@M dɿm 9q(Ԏ|"mӥiy_1hLבtddEZZe[f phr+r#8 endstream endobj 43 0 obj << /Length1 1391 /Length2 6186 /Length3 0 /Length 7136 /Filter /FlateDecode >> stream xڍvTl7%1:I(;0`$$$QH(!!-"HN~sq~יeS q57+\ŠC$@ #s9 ,%K-X-@GQˮC&Kp3B>@"S`E&44Qp7 ! rbÁjH8FP'I-0B=X_E(((H@c<ŀA'݀C߃I?j ;6  ' 6Bh Gq6 k5@tEJ@`h/@y>p6+~9B}фxh u%8n V3B 5? K#|~Md-_i"0pa!Bp|AV(_\O/ ʀ`909FrAFjۤ%2` ") # ?z(w4PO-n_/bM@,(2` !7t*XHO_v^ @ ]n[PP>/ᯍ"0?PE0 nGzP0lV ?Mpi]R Cb,@C+&H2@@C7xoA(4$tGcS['k CL * ` B_hص[^o>U _T\MbZ(2Fa2:>-i N_kJ3k>;qN5 f}3x]C-nvfMM_/@δ ['_9.v|l婬IVIQeȱ<"L;{#LCR%8yñЙjKIv{v=w2>KfGJ>9D/R]A?S%s%_3xTf/ x/&n9_c9..&D_TRڻλ3ȫ<ū#r,׌VE%R#wQё0aVP;U rv*q~^/Y1BeojXڊJwg}K|i(14ἴ̱;휃ˤ Pg/ Oh4Xb'(9-Ciʃ;K^?OLp}X,]ΐcy,u>r0quzpEE=szuFLiCkރt ףӹsO<զjߑ+2]fYVSĝxpZڅ=SPȝHi uFU\c۠fD-5C>\Ob(zSy HҺMBs;&& Lɒ`vل fɆrGӆL <+9u8V? ش}Fҷk"1EјrFgeۺ{ۗ GLtL x/-&^ zRdYd|tN2Xks ().kJBMvݨ('j,qtZWTGO .N][  I)iLyլH=3 jR9#xm?EA,B%djQŇrGpioNH%WG e;ɯ[;Z YOD^pewzW .l'zǢ%yPUS ) 5(@NpF6}un']J!QwiR_ΨX Uvo8(<-8.8{bvS1:;潇g,39wRKeۊsnc f(畾BW8=5u~VŌV nwr/V8 .QL{lԉ*>:ef+!DmY,0MuӜldyk2!RQ/*M4Nd *!3}t<{y'U煸Riɚd/Mr?#s=2$*ie)^vY:M.7XH<.Gk?~Cb<i,="BĜG ltPIږ?EQ|{9 Co+qegP笧/-;*74TIdna1fklS'8FuZK:Cwq#l+e\QGܮ&Y7 3n>yM1fK2ޜ}^#w_!GWz[&FOq4ZU ,J_z$r>RV ACHtU>A˶k2[7yEu4"<3f p\FrdaU-6ӢJ̺6RÎI ||%Vnr [9zoXmgHb[jm nj5((~>U2<&x7 wﶎѼYĨRi=vo|i8af戼Ҿ,) dlIs<IlsS#vFF 4Hm%P?Yux0KHZ8BorP9Ki}{|vhV GY քm߹˖D-򵜳5'$h ~1:pں_ Yv3Zfv'$P ~1I\|ygOe+{vM2Gk /qz-$B.F?GkوUTjW?T*~gX ph8'D eY^C& k?#e':i8Xff?C2f7Qb],9FbIp@d_s2l^nܭdZK~/ÄyPV惌yhr櫘:ocх)Wa{/yf>qAX+t?JKMvsp9tyN@*auɽZbo=>-$_~7ݎ:62}+Ph9DuONeun6Icޝ@;ĎDU +(@ J^i]bi 9I'mq;Հ`9Z2&yVoUOhl^̛HRf:G{}'R}gXS;ZD&{%=宜,;\b͞Ljuʒݳ1&c*>|~B5xJ;NW(5'կ/*UyA@GЖ˛Fӄ\|P1//PxQ~Aet9r?bf21PМ+Hskd#gxN,T[wMɶJb!w]ef[..4dR5/Z-_9Wi Ė3kG~g.\p/^X^Ā$LJs_ Osr YKۧ+mtJ 밈K.OF.zh$rzw;_@U3(RPpiسLg0s6xg\ׄM-ciŊ }){|mV[fdA d9z\Yawsg_KNwRV<3Y [ iSK7 6ʫDҫ_xTptn+]n ȥuVloMZf119NxH[C..)+opy:~I֗q#PA;L hcS}i9WD~xq-k: v ):{iY&QܢӻԂ6?LM}@6c(:3Of)MY| ɫ QƬdn&&]3^i+s|E V۸!T=ǁ`?*;2Qj,u+=0_ja՞Ovlw,*8Q"RV"W;%S:jP(=K@]WAg]M];J@t"*~ڨ,Ps2=*n#uPѠڗNw/gć@ڇkggܯ K̶uh'MfmiuK$]enpG=XGͮz{,dV/hҢ]qDWD@w<fXؐW=(Q5PӑUWiNYMpʢTk!-زIЭ]=)8LwK6]B1q?sh+h prIxr@fv90ӿ`Uò$v2Rbt`+\]XVSDBEkEZiz *j;mBdK"G W /@M]4)..L}.\}O7F]З*WDHalP%*ea4Qc\vrRN-r2='9z4: ҖNKYۊUz%[~V^] sZzVBPVhZN3F)~=^| KBDqٮC5{z̐^K L{QwWK36?[)vxp|u@\-u^q1)TyM`p)<5`޸٪ge9Z-yzmW+h#Β6^nF&]m- N9!"$qBZ"l׽5vrFnj\=1gg z4;@ Ik(9Fè*&Hg߳rku`~nӮñܺwe@EӌmPs6>\\*ZZDy(SL^rsoOn<v&nb5"XI%a]* U=T*?w"P$n.Q0繑Hk 4"=9^Jd0{ԩ&붠:@[Æкӷ6REɌW1 |K([um fPܫ۹B6sLI6&wU)RڷGr) 7h1jxn|zv?nbLʐSުGd.fxv2"{πkY oӆL(;6;Ќ}b8 ywCFq] ަD4UⓃ$Sy%&Q#t+D}-s}ϑR}vOE43d"fvM7umԙ6'#p)* {co/~q$>kP}t c×4=휦FVJ4uNH(gzYɒ~߂S-;+&nKk 2Y(eA'\+O|gS:\}"9:n0I.%W@wnv+ gu endstream endobj 45 0 obj << /Length1 2131 /Length2 12776 /Length3 0 /Length 14078 /Filter /FlateDecode >> stream xڍveT[k.P%Xqw(P\Cݡ"ŭ@qwhRJo{ܑ1<|EK"f` vwe`eH(+hhpٹX9Qhi5?Z- ^_6 +D& t*:l\^A>Avv';:8 $`s"+@B+ rdz3_1;3 hPZ ̀u30Bпruudc`ڹ:8[00f{$vD?qGC{ UVVDb[=/^ooIYyA!TY_UafS:8"Uq'jNe\8:OL k)n`hUǻEџ`iTۢn)Œs'7rʆ"3shAGEVq9|eGCӲgS]&;pJDHkG[Ȇ4ݾ&H&!>Φ|s]@ Ԑת:1;*KL2M1/%L٢[(4r7;[^78X}e,VIF#)f81G4Op1-G6lip LB@}jB5K$s |ټ>SNH:8I",ml悇+5/]tt5Y8g$tVBx)tC _/= ҿSt0Q6Б.E` ``` OGyFbxqq%cM&7%yCMq8 κ%Y;%7Pfs_mUNzB,!rU#@ƃ"''"8Y|༄r$V f1brEV :5]kUwif$ܷ]J5ܐW^P\24SyԽI^oVDR(mZ2p2H6c=>|_ޯYYڼ_ıT /!9S3_th}RRrN%\ÃTB,̖m`a=W#qj5cCO(HUgH0.:ɁGM]{6j9='⣺۵JR(>?]qۏЃ5^PSm1D8ȬL}/[Քxw!`&}Me_BxA}hJ DNy|3@$v~#Cy-ē(3`idR[x&& ü~Ol-͸qVrw ݳu95XK ŧ+yiz-8'?tl%&?~yO?jFxPw2y3>:-dx͓ɯOwR[z ֱ42K)x)Ϳ7Vj$󈙵4#HL$G}`:}'zlZQcɴC *7o3(Lw/^7 azI|H]b#+?0j4O0 fɗ{+g4YiV@]#B,@7IIYXdZ{tTG9Ҡ vPH;~nAS;4a&ӨqQG_|G1hZbLpi=m63:`,t4\6孨lj`ÍaY hQfh%)7NCWd<`nЁ+L /HOtUj5.{,D4îr洊h/9,)6bez3Hjd2N$F s{bCNwVachgVvܕUʚpg׾&TFrڅ~NS,`q%K'_}G4pᚨCWy:X#+Qu0Y91ڼJcNA!epcăTDI]"\t0W$a 57Lg__iD=?uBi[7QMaT_>˻k7Ey]'ZyShv͵ʱ˷}mCuWfe-TkV~9[9dB\? ͓"?oΜ`oӚ{^q2Ò0l.xivs6蛀(DmYP|pegR0~0Odߠ؅nb0%sVt~e'$⿼׷226p3(JkN^!INGD_t.ۮP4-S :ʮifBYȋ]g#PT05c芚 V4ђE+&rgx2|ZXʸ"S;*ez7HoLkt8Si@UH+Ϫ Ep/&D'[Z^c򱼭΍0|3Nk gWhT`ػUr|e$m렷*1o ޛ~`mX+LJ!6v&Ǖ yqAhj2_ "eD23b8w@r:3=oFd[,yD{-PR?olkX.T hyU]vu:&d: Gq/d?4nF(Di)T>Vh Yt29?ka؝vwvՙN_H4`g}$q@TY 51{KTCx P<ϊ&M^U^S ֙H>bw)vjAY'h=Tcd| RhGF|vM\r}4AMO ,LDU' Ȅkwۮ9 Znky[n14Ӓ9A6,ҳ+OlTӐ L4CV8xÇ^zc=_6-4$@n@bnK(,^T8cu`u먠Rѓ-˗ jt8an7\E9z74sI/W'ŬtAMŠlQ*h2B| &D4a_/6ur?VԇhShw)T.R>d>]B̿.0lO(X;UU p1+[/}`#-h|ӵN<)(r Jc4 ` *1N7G$;%qeyD Fns]j*Hzz^߯nQ1{"'H"]/C]i^MS5z]biq1Y⑱Hfȇ9sUߚx+g1;5FLDپDX7;c'ڽr`/׭_$̇q6F!WG*:“3AIjFp@ZIMXt: D5<}:\<< NnAn%l*#5HH|>Εot1kL5G MF>y%kT'=eY>vb%"*͢v;2:BjG\?<>Z㠝I5c[qw绬y`BbL".nq2DX-ԊjJ.>$Ξ~O~+|hY숾F.N)-`(PɡbHp9ڎDlT ŭ"UL9k]bjFB- M!kIZK̈(܌粿Σhչ7)q3FxʊWVi8'G%/Sp[hlΤwhIbNqNOhb#n0wE;B:O+ 0,檷3[삄6omwv5CDIӭG-ǟ7X-\X?E.cT Y {Dc.">H3 ?v} TtZR%|%ka Zp%Shy  R!.271nW"+W(IQ0gL\uIܣD5>0sb(._'~I}^U$+8v'LXxh[qT4j=cWʢ݄MtvZDQ'P[p [ eo脶j,̤_es܀׻TS柁֛kA4Uz[?taPo{/T2S(7t1#'ogGd$pKآ&LiZS}6Vp Z4J7\$n8gۅ/=3E6r)٣Gp6PLRmiF1 v6<*R- Tԟ>[%2jy1KL|Ą!z'o<}^ @R6_)9p$Q;iUo Ҧ28N/T, tvhf)Jw2IDU]-*mQy?[mD?$<31-`Q ] ?6c4윃~G7`@)>;6rIiÁLwF?Wn#Gi fis:^Fې,}=ОvnkټΎ,I;0p{C0N_]%$+-XF'>txšE@vPڂ, ׎RT'" 9+VBwN2ntLfO@p&_LebK8W܌?L[1Cy!i ( ƅwnk\(v9ЕEo0!` xz'hto9r+AB%A=ɛ[۽c*P' E\ SƨlcU~_W{"/݅o_nB0גTj?ɎT]dEzXY:k.QA9Q3}`S# 7uP:b[-vK8#6/^rܕH #GA ʏcՂqDNt6W{]6v6߿wfc4x/wqlLԑ ], xz U}˧OA-73+\2 E}FQGxx]y1'o+f%/9kjj4?xZya*HZNR¾2jSmzC1 4S紞r:2S$]rk2wQܴ#EWzv*VC- BΥ}wB//˄#Z0]zIzȅOÉ*v6Yid.MfxiE C*7l(O{B_؉ E=/»6ʅ14B <5-;!q0"놂E#(;mJYQ={zV mմ1$g8,W99mqj[G &꣭'i7Kbe= IT\T*5Liv>Q&[gqO0RtZ `nHCB.4E,OlgH,CJ89j7CI_.rUOD~q@c0{KV -Hm` /:=x{Vdwd:l$;ZZD0$}] ycMK$2]~nˢ0!Y&0'褛HJe- ?n 1OApΔ t1S/+ eNcm[(]}VmE5AkK̎yRy3 M^r2EurY[r;T]^M,0  K.JQثYl$TL!&/@7WE:`TF^FpfsO\|WS;NRY`ƧuZcUrU]}rPO{Zxq^v~(,cU6Iui_"GlNR4oe1]_1AQK=Nϳcs +((ic miB2߮{\7"DJm>ug2}bx\D4A[šeRZOMrI%M@!'`];V*ZfmjOZ 'q(MO={>ǚ{o;&ݘT]aeX=uv56锛N63ib˭_9녗*ص:]u>jfq=rSՌx%zrp,ϯ$_TlŅ& ?p'CޗYq[D{ p S{\ʽǏg%#WUI-)4 =eZ{o,_F7~ϗ}ۧN|m0Hyr=N)= |1Hi\kju\͒ sJUy|i:l{T"eY 0Fp^ cmz3^.v#񅦌":IsIiA0#nLO*LZ"KaaKLX#q=}-`9iCC5!wmxQ)b<*=K?"'l,|,{߲:ݍo`M{`W# rF?qV63&՞LL'F/NJMOՌ켏𤣗bɫ' * 4 &^bw>HD]y!M$#I|7>bqLGzMJzᐜLQ05U t6x['9Ɗ8G(FeSF#A~1X-o:պT gGUx@2Tgy+J HDB\׿v9!dAtۈ\ TX%cl}.`Dewj&5I:Plb̶7㩢,Qi ޮ'| (V+ a%htf0%f SdE '^iިw="b۟5R~4ﺷPRCwS.v%gpN>)~3c\5 & 猚QN&M,_\9UŮlxhU^b9Ř؝!׻ҀbNgڨ\BCUJ 5^w*'ңM\31p>ߌ%~UQᣈ%:CLÇ%nf"'ؿrh0GJkG,M[jNK4^L}ozĚZ DLzJT*i匡 mM>Ht xOp~݀k3R1fzૈf9"Gyj!s9~֏9+v G!{4@{jfMȧ3#I ^iHxq{-Ac?L Y$KTN2V۬Xdt n{Ug#_[Rq!N*c?4(ƑwuGzBK?"0lVH-Uso.eX j83B j\$hyuWm kG4>u)~`5: (T;1sM(lqLD"T5懻.=|Ee]΢RM{Ƿ6~qeT ^:O x $VS\B } :iC/=aϯ-M^Qz[vuAs!ֿLɓCi%.h/+S,1~m̶LdEQ`Q (/ Z<ߥ.*h=@; wŨgRs^/kvtͺps2Pd2<=qtzYdh_'&ioY^?G?kȼq [vLo [Mmp{HbbT^'Oc7]!Vo,b jk8$&/Re3޸;[o%NGOJ"o4'{ C *Q;6wnɠưN*~xxt fϻ+d]J{h?S5CZb@Cv9tzGقH.qhݮ27 |1 g)#癡j#ݕYo .We_z" Y)ZN5DŽ AE-#l_WƍB=3ou/KU~Jf0\BReSm9;pOen=L> stream xڍx4\ڶF{'ä5z.D'A5BѢE 7ɛ_֬g?}ykϬfh"t#hAPgb@Q! PCqCP0$B?*^P0cS1@=$ D qi4"`@OD@QD*HO/+S[Pz `@vz`*Bp G{^._` EA|N_#? qL]a&Hg/ 0„x#^Lu. @gs !п @`? pu]!ZF8($&u%#3P/'%(+ fN*H("՟* 컿uG }a'_c8y{ !`Z0ѿm.P4@ (%..@~W_L=͘=g`3E@h/ohp:"N0u!c:Ɯ`0'$o#757S3H?@@PJ@ 1@?aX-3 W}e?#^?s#1̅xM{@1 s;_YWwGpo?_ 0FcThP _Ճ:=۫cԠp0ZtWx/; :׿X0z`aDq\Z~cOdE幕.v&o_8$概Dl3C(YJJt^(T .qy*WIJdsBչhdφakΕ gUI{/DEKӉ`8ʅ-l0yJ|n+=錢@h>Y;%m3|KI1w!IkX3r.=%~8ɈVsx!`̪x_ϫ ,Ŋ{9锲ˆIOFC|Rg9]*NV="%|H-Pd銥ibvGq6&Z̧iNҨĥiONNwc&(T]?n)g_\(D8s/=yh aLo@0H玠tC'ꮻ93@Z!R2'w9|ql޳>|1>=snWɱ-$<3y+2pښo.f({`aq6˄X&y;$HI8G\YbcN4'a=j꼊VL0$80vjpXh&!S.u<^\o8XM_uʉVsTj{_JYk~c|(\k{0+@.g4鵯7y(b1g3<*KLYuv<;?Emf u@>(R8Ҷv)1@CE3<T˶ݐ5&8ZflEϮ]Ijw˜k6{Z_` 38$,0&#b/%xy=i@R/`jmpzRț~!EXGYQ "*{7 @JskFɳ*Ip)R% .OUDTE}ymƬ>}v"@lX d; Uw6iFP'a<RZҟ Iz|'Mop3f=|Ε&47zPiG`]C<3AQm3X.eBV=F엕xZD3uWw @껣іzr} ч[u#To $ Tlg6l=QZ%m|J?ߪ n׼.2 C0G5=B˝˻|fJV&'9?šj`=q'[A=eN?Ms=>=Z_Ee>$pe{ MX~ԁh $3#AYH:}3*?vc_઺F8a-iqU >T3H4H",OM#/Ȥ@[jy87\&c ۱f +{4.p ?s M0&{4z0K^E7Jyo"&n5ΚvfP,ꎯjة*mʏQZEzپP/\ae&f$T+"+A+λY).Tg@H?1 dƮ0|u\?Op/[{r쥛m%DR^8@aAu?TN"F#91><$1J Z@Iz/IZۅmi(qc ͞@4a 9B4[ wwwۻ{u4G:\,ѓg:V{h>yd~[}JǬEZb-@ٞB0uě ڦ'_h[@eg܏ D)MjJ7={jJo^ l2ʥ' z̡^6KSu؜AQ2\GxРr Yμk&V\P#Sڀi[7eg2n8*洹;W8oⓅWJ/\>AzkK6,Z,*KN;&mA/CMÚEg&̚v3’*YpUKFʹ4 t3ΙƳ4)Ě^ƇzUpؑt-W'7 3aEsIdg2:.wߟL%ȼei`5ztUABvDp:P=P~ L$}dfJn/ jgy?mPPhQhU#-Eًڧ/%P6G LTĮ4\p$='})JvuO/2#=MnP8^ιˢ[5][EFoZs9,y~G|z/)%t=Wѱ QW +KZO"\NojoI+3SM !n"*6ek $-.JG-#0ʚU<(tr[D#%'ι%k mD#ů&pO 8`{V Ck yaǻ$2'VVYg?X}T;9l9j ndRkO^+$,$(%T~S%x5H-k6`A)#MFhh,]7plzn^tN]e F3VL7k2P,K _!A7GDchv\;3Www z o9EǴl/v. bhtz2GT44lC3ZdEI;pY~3@3@x)_Y(C37ZqZ|v򔫉5e2)θm#r|7 j8 ÍH>85`<βh(7? j<2r?F!5P*{a7 }s!Ll]SҹV/&0bw)ӒVZlߛ˙[HGnˏE8 |`}_gj÷= bdzk<2cpK\?BJ{;z[S?7ubO~ȿ v^[x] y<E_[r^ݐ{ o;,vdJ>7 |ZDn\n._ݰ Hjg9+}vR L9ݐLW4l+>M!H`֑D/O*a&S1b=1O!#A4l߁Mt}Ofe |aVo0w)Bn\Dz{5hWe2u亣0]5<,@![;Wq^z/{\/ffF&9y=.^Vi&V]/ԣ**fr5zpzTo,r83c/= O]u~NK 5ӣCRR iC?JO3-Lb߽Ng'1hapu*.Av!H$ƊjU]= 9Mgv#Z+ WosVIl(&}퍀)c- r, ٷ=V,.7{U8-7x\T {+{}0Qf;,X( qdBk1pbQ*sph8ED t'SȾ$0ģ)VuCyZnk PqD xMa+U{Eʗ̼S\x!6Ϲ$ij<&T}|,MpMFި6 *c8M /x%KO > stream xڍtT.(0HHw#C0t7R%R  !Hw7 8޵]7gw}EKG a U@Q< ^>1OMrH.H((4O:@HD_DR vYy*8ԅM䉄آ=y; E `8@:w G q[I tww;"60-@EAh&%b\k;  wAg­Hzs@ CVCx{6/f*NC G'0XM5^! E; `70l& P9\x]`F*>ey, GOB sp;5) UKACDl(#aaAQt~ |NkP_5GvPHWsE`j:ZY/  -/+? 2QTR3c227HH"\e5OcWn@U pG|B|-)77;;0Ͽh]Qh#67ǴP+GQ`6h1y0J /9P- ׷_1 ZCP}<3~!a{/$ id@S}$ѯkapW_(?*C\H~ ֿ z@!Dӓʐ ,X@A/bLu}&,e2 ʭB,UZZ3Kk?`p i~51Wѓ;3 q34;=uq qԱ.Oɘ<|&gl:+LX:[l"xGTB0&% d_gp.d%ݘD*Rj5Ft>$kyy1Dprd}r14+AJ|`݇@+2_`?IH~JrRлUZyqGл9P]D^b^j`7% ƻ|r: (eJ;PC ),?J!~73-gU`绘G8&WD<"2~=*AӠD}pt2ܭG oގm J: Л,qydpfJ_M]'bA[s1M_ M[WL顫~R8`Őw1xe=o 2C]̌קf"gt{,@gGf 8JOCHHC#L;[$ igneT+e'Ȕ_vVvONِAI7uҿ+4&[a1[xDW.g~54!A+/c]|x"Zugyco r >^j{Qv%ga?ݢحy&p5x[8u#vlTP`Q \:[';~u20#+K}=Ϸ;4’5~]P&ƛlRƀ5'_^K AR)3 50ȸåv}fc՘).;EEGgyVPJ޸^suvq8҄IW 4=<8JR>3dF u  .,Rcz*&#fH,0sNhmwtjd'R.vOȦ30Vll0.i i^W5f0p'vJ<^ZmҶ{5* ~HKphK3W/lc+>-2xҰ6q6mQț!H]=1h'(EY~'t[w >|P?[\/Y@8|!Zk7}PBL>SOK_XUIS׶}952#a4{^5S}gWWdʣNB7a2l_gc̲@e1U69Nyj #'.o8[ V$;-_2*<S9,u._8zD/;aߌ+2Ҽ3maW(?ORyfO^[cHgM'PhF iMkɭ=aK {;wG)BC][Dz=vsj~'P,WX[/Oa1k"C#JReGGKI-k}َI73hbއ+V-q ~ 3ëĿSȓvIn(/5'Uܖ۝5Ӳ~Rd?zmUY}5s.1oጁ(JXlP+nvs^سi/BR;@|8 }2VT&;#SdkiOZxz rq7p óFܽ_V7Gsh.bJmedfT6*;sBr(bWQN=HnSGpSSm[2!&f(5T FR 1^2svC8j%KzXSxsy yNu2`cPJ |Mvfig&ik'kQ6E6EpU(B i /;U8Rm+4T`a?bǀt7׬qNޔmğ=ȡYMGyG ৣNpF5}N$XvK @~Txr6 <0Ӱ%Dz^͟?NvǨP:&oer#M@qR#?_˸R;7.p~Y栖bz$J}$^:PE~L2]ZYd~oaG9fcUe98 hߞXTyJn[$I{|r~.E]Rvw>]!d}S!2>ta$K$8-,Kmsf҉9窏}-lKt*V~T<?z/!)9>>h֐}0e_=xji6j?fQ"v`>GO<0lNZh.4(u->;9Y&i{OHO8;E;-s3-J6[mދG?ԛIs]OFP<|wٲܟ&^a:h.260<`}c**m\IWrH߫ËiJ&TGB'2m mL}ʭ<_%zT,fJ{tHVg &P.~bjVSRuQR$μp53e&|*]ȪPm(^RTIYӱ 2]Q'BfKg;/'6y^`E)~՗?a3W~E>L:lߟpYpm{'*@]'Х'L÷[z2n hvZM2mjkFf̶GKv 4.`"oE22kIƳ II׶CՓM߀UUZvk胉[dO-(miONP%r>NQuOͰ#q 4I'qSJ<Ri"Zprt.XPii+hg| zy|kخ S̥ZbP/ap k5)5U ng,&BWX(y)je*=R/_Ոeڦ|%* 9{wF޺P6byy7KJh)${g`x̡D4F0Z|XkGhAq@љyd%Dn|R]]=n۲N/[qQgh7f1G~핳5 VQzKD0fQM^<̘x)=}ל +>z"rVkx b,c X83% pϳHҚ7,NJh1ǻvo }QsiVM|7{U<`#HeqW88*4%hδnpwZI9e[?NAQK9k]q!ƕ8N*ۂ|=V*b&:?3[37 qikh0Jb:'u@^DxcrbX+6Q'F'A7‡$ݪ)Gڶg$E_n L:oC|y]0-Of*JHW\  BOGpNvc^oZi+7^ zξGiNn< ĚssVXjY*{ۉ]z&m:[d9;9ER$諩^HL@Wop; |!+xR6na7j(nT)(MygxE&]N9>e}[uEpn2JNQw亪J%%BM43k!%_{ ~!kF=jYW=u^M0@240d߼W3_\ f\34ik?2I endstream endobj 51 0 obj << /Length1 2137 /Length2 14297 /Length3 0 /Length 15594 /Filter /FlateDecode >> stream xڍP\[" N]Kp4N7 ];$8.Gsckε)ITEL@I0ȉ &`aagbaaCTtO@tpe!4rz9ʃAg+;?C@ b`;wKs <{ИXyyt,M@y#' kF#*4NNv|̮LFL`sAZ@tp P0M faBlj l,M Wg)*-P2ˀwsL@?LLvF wK9PcrrsbL04qYY@RD`o~&vNL6pd#k%@b`[[ -&}wgpA`W%v K{g6"2s L,HnS`Jmi|At4rޞV!L-M@sKb_,, `ϓ넙A60FG~/5Κ#qb$8wCȞ|!G>b⩳}?V؅OG}16M)z,Y\~3 -X?h')4.w[V/|殪]1"TbsaP(mK қkkI]]mxm&5_X0W{<]^V%5V'vn{ne?Q` P0 )k09>WC_T_a{8I}pu%lpI,4h"2;.BI gH.X.#Y1n<ݿ6(}4E'7}8~t xfN'+ȷ)E0\+6N@AAnh$ (i0ɨxvfMa 8O#U=B*i%uzcTg^Pcʿ.#MXҫ&Iә>6TYZ3I%7{AѰ:OK};mt`dk"*gyIh/Jn5fxViͶygO2kLda<̓EˋKl?0_krHEpm͍*nڠ'qS/[ɾwkgeDY)i챒>8!_qԸEVP™b#?[h|gկu-\F5sn%VTkVn*$N=C<ǹ v{or,NS3#BWiƙ[tKDP~_ )JHr.JhKԧJ#pa0 LSzrޗgdrKOXÊR%gsr:lTb>aml kdLZ0t.+~o~P2cVReO=N~&c$>[W.saNv3{pjn#iVCOMLi?#$[Jo8$M|߃:ضaLb]YB3ûݛkǾ#-䖬E$]>Pv> X^(P{׎=3y_.F &'o%+DQqoS~f /P'V@*zNK~5\,PXXɏ0! 3dWCAVrAzW]}TwQ*E~/^+-zAcA#Z"M=Pg~R$|F1ܐymK7A YThedmKڛ%g4I0iDԨ۳ԂJ |Rl*(\7qV}%q-R{jd_>-)TۍVT\m|711v%NA?6Q!m0̧iOk9ږ`rPP6zpBIM-F {czxemo!Ž.l2m֖O9'o( N=hdN,ey:>3blK1\}.2ݶ65^gHpPL>߂WPI]w'nYO6<3eb'clvtFXzQd!Nh7zya\fb@`,<.vdCj=}%x3КUv%ϐQ/b%ǎ䛚CCmXEҮg| &Z|L'C Q"\e_׳o]:bXZ&'iB 0b:~5~UA ؃$C1ܨ}~N^Q,?[=?~HL%ozjX0dH,%ܔyC"D7h8 *9u[ ZJLU45pțCIaڳ[]W4{aNr9wYpo1Ps⶝iKX.ԥu<$f&e,f"*gm- kgnisUFoE~Ȉ.Q j ɡxo#luV(Yu*m52}Ps}xEc$Ue=] fyc+cdcUnL!Z(ܤ'Bq)ltK%0$N| >P\ R/#*!2 ];#vߺs&/Bԡx&`FfFIFxUD'1xW&wBȂj Y,&9% I^?Zңu_S`jrkEG _"2|n[|M Q?ZL:2:”YͺNhHsDfOI}G9 U!lH(#+fX4{rbikuEjGH-*7 VR!M-]4'rM!ʖ$pNGz6p"0aA ~m wr\+loVo2f谂AеO"}rb ̪zj oWG!mAOt"pIzw*zSҕjnVƟ?$1!toe2ENAPw^ z1,{Ǐ9dls+BZs˝>$\$)OoS`77<ߛu5SP$)"P0JLp2 q3&JP/e+ZqUs6CWx׶-4ioUzF0}>[K1Wcph!oT[^nZR|2ύ4eR=}u>UnJ0~sݛ dw͉XBfM)-ZaOj@/kl;^Ɏ@3Yj:>Q|0o@ɞw?WnbCĖ@[͎w^"q[7T ?l}>y,2DWVq h"?_)# *Q i7[$;#'XhlKvH v( {8c/bxC.n|c`w_Ѩ H&.ڡ;㊉[!/x#!)^ ݽ 3qGhMW߮LNޒE$ifZE_O4; 6 } Z8KD 35" n6Ótl JD Փ~NK7":J5EϹ\b,rIUڬ]l(*,oOX ;\<.3ρaK1ŃcV2 *#slbq\6]1O,3db{P{fGuH Y)9ѥq@gbJ&LGo4еCW`JjLC'Uӌ*\M 9u}5u3f9!>R=sOrSw̭$x0S)0OlYB?80 xn@9pk]#i63@}PĹ|I۰xP@jآhrrSN|l?ø3P^?,!V7Λ]wGyũt Q?A>,4>Y.EDl4XV?'rTS+ʇQKD"A7ϖn%Oj#E"L .JȌ7-Fz3z"Sc4_j S7d7w_ƥ]j4rV: c;C-$U Ϭ8,rklǖsj  _{ܴATrcs;r u7~M!?ɘº$2~m#VʏqV][HF*%m.|ӉG ͏O9Ǡ54aly^^&iB15'eM:Mxx4=I_nHf3i}wծ=K~'aǽu :v"5{#J!GƖcW8EBՍŘaLp;4/fe6'M]SN%\p{ײTuc9Μ{<АCWYr3%j_`MO9kVP}V.c!Hdk pE=J溆l> "gFhr7; J[?djfi 'Hukz1Y>*=&G?ڿқ^Pxr| hXn~Q[~yKA]>or= XCD+'|H5E`!,wǖઞcO*=b+<RkRݦmPm=aXh4<SC1F>JgqJWZ,/^p^懣XG.pY{& ӣBF8/d68XJlC`vkL^" C5| #QF*@]<.o ky 㢃?SB8e l-y?=(=70 3~v /t&:q3_!KfB03,&DsPv6u۷S 4l֗uo 8WDV,rs^-bi=Ryz<3Y>=Kvơ!R,Z/qNrX]\4sN~k <] w.jlSmkl8e@Q hI`Xt;nn&jiSCzAZ.1t_s (txa &T{OXIAy0eJY@nt Iɻ'b(*׆N\ğ^U˭`۩;oH٘?\lclruD9npyD|.:rܚ]47da':p¿tcr ][sSϚW8 *KBnҩ &J"m_;X,݉Og0RhmSRw e>䈨Sq/~ ]$_ct&#WB926G}wZ>¸wũX#8u9Ȟ^'9@<NڇɌz5!i0I[K"ldMMOd]Q57z]p`^ފRko2h~ĕ ^ThH|\b;QG?ג带B8xy+ IĈ(KhY /^sIV>]DWJ5"0um_D -aAUt*f.x*?d/CQ LIҮy"DNqIj:MAƂQ/ wΛox,(ޭ&_n-7@ ;QN9dc#zmT5X*"p D*4H8 I8mB}{)~V.9x1C]Wg1m9kNs /QA51k%Ba(pr}=x3$&-5c%k.tD`=O> cΉơ5{:(rH;x~iߍ }neɎʕ|Dlѿ9Tx~Ҹ>s%_;8$t?~QR(bJΏL#,2f ;Ti7 }|+雨3bZLaUty$_Z! 0ۢ g]^_]A/-?ws cVqWr=/!Se2)-.~׸"1/JfRȻFjm tMT Xʩ}#bz{2*J> O㄄j"I_f09h>\n}1TK8Thc[XP5,+/F4j p+ϻ{2QShtrղW xPkj̎?J p :k0ӽmEVNGꐑ]B1 eaP> `1UД1M#*oY> &EJӠ ac܃ma剧zO#V\[;'3+A퉸 fNz${{͍&]^͓.ҤVYḭysN+:IY,RL<Ȧ^˥4c4ݢ\IAQCh_=a)6;ǥl"[(ڄ&ˬF!OOPafXG%!QKkfzO9a/v@jӓ۷c33-L}DV bGP~ocɭ @v@ȇ[S"%U_uB͔Cvd7O}1H[Y7Gsҋ>M9vk5UBkwn#Y?1} _SQR5Jo9Oгi&$_;!5ua>VZOlQNh5'2 c}~TBd=#Bԍ9cc@"Yr'a3XǏěk0¯JL!HBr~n{+&>\H-ƿpr:F_Sk͍6X]擽ۙþq '~I79;vi`9ݢuK487c9@c?4d];9nmD;<ߨESHE 0>Ӈ*]jqOߒ{јmHJ^p} %mʗ. ͽiWꮒf-L']Rg6dSpPLBDsSBwZs4*)6%|⺬h<MjזP5wPNBC >[ĕ^Evޕ3ߊ%f3W݋s' BTQ `I]6/j[A< ؉oNi!^Onh);MKZ1Es"'t_y_ cq 38 ^h')y.G/Oqud?plȭEnn Ȧ(RB]`~ur\PmVQ%[Itŗ,C%XPA{Qmf*f_ jjj:ZG+Qc?ZhPTo)iC]q`rnl&GhSaY { L2VhaA)e:ןcLJw+ú& ,S5:O4ϐV/EL/,\VpLJ 4 ӁqaE7,^ D)ԂHdcU#R@.F5 :e&;2k'5#BnҏvR@.9Ebf /3ok>j~am"HxnaY< a/eUfIJOe5/#WY|NwvޡnȶInPP VgDJc}ǖy,(}03P(̋ ( ǭ ?P mBqe˺s&--vhd6bE6;8hg?NoQSe,"B aVV,pjKnީOD/0B(s])LNq2R$wn3dG;{֝B7Ee!$ՑL,mT+x:N/c|1{0vՕͺ*lpvUV+15EI 3dan~}xplu$<Q,@|׋HgVg*w]jن= I]InPnĭyDvtuN s.-㌩@ư&򳨒R;-#d#>>@bcUN b7x VZȵ:]'ӅJPstzTL[d_YQ;CnzvO<ȸ\CρdxtO cG t+ )9;yM=xՐaUw]#L9 $с}UZ>x3mjkZruPɌ؏m{ut2vc5"yv[)]Q/]c^6 $lV1pف4QUy7V،׌jQWP@X#?( H!B3l HWȔ8>ؿE"ͽpX:4`_dWt]BK~3 BѥB y4hz;[2l7T c{eAb3'v]^{s/Tٜ9 :u{M+>\t5Tyh\Uv_J;;VơV`D GYHe0y:vܙ4̜`W΍3 '+KzNϼuw&,%2W΍JA(ɜiR`'Yp2Khyhv$LL*γ`&6݀R5 '{47g;d[*N6I~hya>!&-?<OGJzXPi-@ 7(az_[ <-㋯!6Z۲pUŲpL8x!C&hh*{f[t/w3a5C#R1~؛G >k}J6z*Lk^I_GK_ cYRIwgRY-I=KZ$z?ӕo:RpֈpX^3*)ğ4˟;"_̼qFoMH^#W¼#L"s5n_q#& 6e(K {f"gI}6 ҆מw bptLPKp{@ww-FstN3iz]zTNli-be'$1_uh߯}ť.Ti"խ-;pܶFnQ@uN&.J<^LiCa6jI:T۷ۏPmg Uv7ªʪhsLa?s!Ji"rR~٭z?0j;[j9YLG|z(buSBN4%-TNoupc1D[kZvIÖ*S yTT +>;)$2ryyEjxZ &`c\V<|Iw#K [}jpdO-}WC:>g!I'35 'Ba|4u:!A1#[❀F:Ph~\3by] t5mbhc&gݑʒw<;ש iX]Ɏ{ڦvKST`V߻  cX>z ft_.ȅM3 j3p\jn \mEۦ\  嗾Rv ;\^y #Y,Vv# p牔:L 61WdޙZ  x+|_2I/ ]\;ZZ5 O@g6}+SỉWBoC8}]UCK" zƳMF%g|-Nj>kA名59wFuXwaszY: 2[Ȟ9 wc0l_٭ =U$~&xX]\M'yzM` 85} y:Nk DqeBl%W. >S`4o7䆭,`f_"g9|صdIbx_rwllk V5:FŮ 4FBD[JGOL\ÄX8<ŖJF0\ȗ&(],Bѝ~?U1`zPeP:AiT7rB{>`ׅ թ1RR.+]%8 Ny5 ǵVlȽC|zozH e )|^>NZ}37՞@(X~:Ox o~گhE1P#^L{??m;nS3w1H\^؅J*gAP4NQtfQ&D(^4!;ƚqPYF@ g#R]-R endstream endobj 54 0 obj << /Producer (pdfTeX-1.40.15) /Creator (TeX) /CreationDate (D:20170622004529+02'00') /ModDate (D:20170622004529+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) kpathsea version 6.2.1dev) >> endobj 14 0 obj << /Type /ObjStm /N 39 /First 292 /Length 2383 /Filter /FlateDecode >> stream xZKsIWq76P_D`0f ؽȒG-1j[`RUY`E )tLk˔`F $0)͂)ˤbl$~XBȴiuiŌiÌ혱3^`VJ?0Y0@q8 )8vF>0/a*c^G5[dw _0 {Bs H ( j速ߖ)ߝNd^3 {;oz,IGeUL؅ '|}P> IiSRW`'`7# ^K  4hfL`q ttR {iy7g{ kݏnAHёǼ0·fYN!&*!` zpa]-Vzh:4xҼC(1D 6z myG%R_;1Nʡl胬ۆ94?06Z;t MUZIC{*c%X*DzAouI"pH%(C0$x$x ,A!K^ȍ43&%J%) jmJC2beEMgYb6yl֬pɄ`H0U>`\řkvSaDTg6 |7rj [6ha0Yёb-LpQNd6 . H!,\uHn*_4I@7}gxT@(P=B`(75C`Cniys<ŰNHnKK^S9 EU0qiԴ+AU~Zˎ'hVdMSKQsy [þe eEJho#]cOHodN)J]vh5ƙhSh\a܉CCI^rHqmLt>| ؔ0qԔ(e Bhf4ufi#'ܟbD*W[\%N$᪊3fo"+*#7I<N("4W 1hVΧy\_kŹ0.jf>Q=Q<>G&k`nq_VWs@3y1F&WO;pӀ7; ຘ;?Y1RNu|!+>׋b^M'U};.ۉ93zeZo߲ه`M6 l@P9nMmά q1ivj^_[~{>5E}g?Q6? b!V|bfw&?f.n~Ocm9%t'hqy\"_˪uU,1?W䟧Ϳ17h6@LIɧ| ()sUK~;^>,)_O~;۸ыSrڐJXN,s`:9<=h|^]K,|\RJ*e|Duy1| .RHy5,a8䮿Wd:\YYg7.e]g걘Oc %MXJVESBVl]~"o$RMɶ(^WMM5YL[7;/ ӦkE3 mu8[v1)Ey\݅,Iۤ4ٱjƣk77]=r VX|#N.闣|iS#$W9ڌ`:,)^]ίksksO+W6W.3n{+mO&r*W+A{ÚrVݻduumLGluu9=kf6+Zl{^5,+.C׼~-i_65k~K)_ngwzuuU[W o2=@k1 ^W5H7@jvfn+ endstream endobj 55 0 obj << /Type /XRef /Index [0 56] /Size 56 /W [1 3 1] /Root 53 0 R /Info 54 0 R /ID [<9C94C715D71C2C1BED30998A7FC5367E> <9C94C715D71C2C1BED30998A7FC5367E>] /Length 167 /Filter /FlateDecode >> stream x%9As7xyJTvaz [؁h4* jɽ @mCu]~ 6뉸HHȈ Wx'—*O̷Vbu ǪHV%ҽXE$*UUMs; endstream endobj startxref 122744 %%EOF survey/inst/doc/phase1.R0000644000176200001440000000367313122573411014645 0ustar liggesusers### R code from vignette source 'phase1.Rnw' ################################################### ### code chunk number 1: phase1.Rnw:82-105 ################################################### rei<-read.table(textConnection( " id N n.a h n.ah n.h sub y 1 1 300 20 1 12 5 TRUE 1 2 2 300 20 1 12 5 TRUE 2 3 3 300 20 1 12 5 TRUE 3 4 4 300 20 1 12 5 TRUE 4 5 5 300 20 1 12 5 TRUE 5 6 6 300 20 1 12 5 FALSE NA 7 7 300 20 1 12 5 FALSE NA 8 8 300 20 1 12 5 FALSE NA 9 9 300 20 1 12 5 FALSE NA 10 10 300 20 1 12 5 FALSE NA 11 11 300 20 1 12 5 FALSE NA 12 12 300 20 1 12 5 FALSE NA 13 13 300 20 2 8 3 TRUE 6 14 14 300 20 2 8 3 TRUE 7 15 15 300 20 2 8 3 TRUE 8 16 16 300 20 2 8 3 FALSE NA 17 17 300 20 2 8 3 FALSE NA 18 18 300 20 2 8 3 FALSE NA 19 19 300 20 2 8 3 FALSE NA 20 20 300 20 2 8 3 FALSE NA "), header=TRUE) ################################################### ### code chunk number 2: phase1.Rnw:109-113 ################################################### library(survey) des.rei <- twophase(id=list(~id,~id), strata=list(NULL,~h), fpc=list(~N,NULL), subset=~sub, data=rei) tot<- svytotal(~y, des.rei) ################################################### ### code chunk number 3: phase1.Rnw:117-124 ################################################### rei$w.ah <- rei$n.ah / rei$n.a a.rei <- aggregate(rei, by=list(rei$h), mean, na.rm=TRUE) a.rei$S.ysh <- tapply(rei$y, rei$h, var, na.rm=TRUE) a.rei$y.u <- sum(a.rei$w.ah * a.rei$y) a.rei$f<-with(a.rei, n.a/N) a.rei$delta.h<-with(a.rei, (1/n.h)*(n.a-n.ah)/(n.a-1)) Vphase1<-with(a.rei, sum(N*N*((1-f)/n.a)*( w.ah*(1-delta.h)*S.ysh+ ((n.a)/(n.a-1))*w.ah*(y-y.u)^2))) ################################################### ### code chunk number 4: phase1.Rnw:128-130 ################################################### Vphase1 attr(vcov(tot),"phases")$phase1 survey/inst/doc/domain.Rnw0000644000176200001440000000771612372242764015314 0ustar liggesusers\documentclass{article} \usepackage{url} %\VignetteIndexEntry{Estimates in subpopulations} \usepackage{Sweave} \author{Thomas Lumley} \title{Estimates in subpopulations.} \begin{document} \maketitle Estimating a mean or total in a subpopulation (domain) from a survey, eg the mean blood pressure in women, is not done simply by taking the subset of data in that subpopulation and pretending it is a new survey. This approach would give correct point estimates but incorrect standard errors. The standard way to derive domain means is as ratio estimators. I think it is easier to derive them as regression coefficients. These derivations are not important for R users, since subset operations on survey design objects automatically do the necessary adjustments, but they may be of interest. The various ways of constructing domain mean estimators are useful in quality control for the survey package, and some of the examples here are taken from \texttt{survey/tests/domain.R}. Suppose that in the artificial \texttt{fpc} data set we want to estimate the mean of \texttt{x} when \texttt{x>4}. <<>>= library(survey) data(fpc) dfpc<-svydesign(id=~psuid,strat=~stratid,weight=~weight,data=fpc,nest=TRUE) dsub<-subset(dfpc,x>4) svymean(~x,design=dsub) @ The \texttt{subset} function constructs a survey design object with information about this subpopulation and \texttt{svymean} computes the mean. The same operation can be done for a set of subpopulations with \texttt{svyby}. <<>>= svyby(~x,~I(x>4),design=dfpc, svymean) @ In a regression model with a binary covariate $Z$ and no intercept, there are two coefficients that estimate the mean of the outcome variable in the subpopulations with $Z=0$ and $Z=1$, so we can construct the domain mean estimator by regression. <<>>= summary(svyglm(x~I(x>4)+0,design=dfpc)) @ Finally, the classical derivation of the domain mean estimator is as a ratio where the numerator is $X$ for observations in the domain and 0 otherwise and the denominator is 1 for observations in the domain and 0 otherwise <<>>= svyratio(~I(x*(x>4)),~as.numeric(x>4), dfpc) @ The estimator is implemented by setting the sampling weight to zero for observations not in the domain. For most survey design objects this allows a reduction in memory use, since only the number of zero weights in each sampling unit needs to be kept. For more complicated survey designs, such as post-stratified designs, all the data are kept and there is no reduction in memory use. \subsection*{More complex examples} Verifying that \texttt{svymean} agrees with the ratio and regression derivations is particularly useful for more complicated designs where published examples are less readily available. This example shows calibration (GREG) estimators of domain means for the California Academic Performance Index (API). <<>>= data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) gclus1 <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069)) svymean(~api00, subset(gclus1, comp.imp=="Yes")) svyratio(~I(api00*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), gclus1) summary(svyglm(api00~comp.imp-1, gclus1)) @ Two-stage samples with full finite-population corrections <<>>= data(mu284) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) svymean(~y1, subset(dmu284,y1>40)) svyratio(~I(y1*(y1>40)),~as.numeric(y1>40),dmu284) summary(svyglm(y1~I(y1>40)+0,dmu284)) @ Stratified two-phase sampling of children with Wilm's Tumor, estimating relapse probability for those older than 3 years (36 months) at diagnosis <<>>= library("survival") data(nwtco) nwtco$incc2<-as.logical(with(nwtco, ifelse(rel | instit==2,1,rbinom(nrow(nwtco),1,.1)))) dccs8<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2) svymean(~rel, subset(dccs8,age>36)) svyratio(~I(rel*as.numeric(age>36)), ~as.numeric(age>36), dccs8) summary(svyglm(rel~I(age>36)+0, dccs8)) @ \end{document} survey/inst/doc/domain.R0000644000176200001440000000441613122573400014725 0ustar liggesusers### R code from vignette source 'domain.Rnw' ################################################### ### code chunk number 1: domain.Rnw:29-34 ################################################### library(survey) data(fpc) dfpc<-svydesign(id=~psuid,strat=~stratid,weight=~weight,data=fpc,nest=TRUE) dsub<-subset(dfpc,x>4) svymean(~x,design=dsub) ################################################### ### code chunk number 2: domain.Rnw:41-42 ################################################### svyby(~x,~I(x>4),design=dfpc, svymean) ################################################### ### code chunk number 3: domain.Rnw:49-50 ################################################### summary(svyglm(x~I(x>4)+0,design=dfpc)) ################################################### ### code chunk number 4: domain.Rnw:57-58 ################################################### svyratio(~I(x*(x>4)),~as.numeric(x>4), dfpc) ################################################### ### code chunk number 5: domain.Rnw:76-84 ################################################### data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) gclus1 <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069)) svymean(~api00, subset(gclus1, comp.imp=="Yes")) svyratio(~I(api00*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), gclus1) summary(svyglm(api00~comp.imp-1, gclus1)) ################################################### ### code chunk number 6: domain.Rnw:88-94 ################################################### data(mu284) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) svymean(~y1, subset(dmu284,y1>40)) svyratio(~I(y1*(y1>40)),~as.numeric(y1>40),dmu284) summary(svyglm(y1~I(y1>40)+0,dmu284)) ################################################### ### code chunk number 7: domain.Rnw:100-108 ################################################### library("survival") data(nwtco) nwtco$incc2<-as.logical(with(nwtco, ifelse(rel | instit==2,1,rbinom(nrow(nwtco),1,.1)))) dccs8<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2) svymean(~rel, subset(dccs8,age>36)) svyratio(~I(rel*as.numeric(age>36)), ~as.numeric(age>36), dccs8) summary(svyglm(rel~I(age>36)+0, dccs8)) survey/inst/doc/survey.R0000644000176200001440000000437213122573417015024 0ustar liggesusers### R code from vignette source 'survey.Rnw' ################################################### ### code chunk number 1: survey.Rnw:26-29 ################################################### library(survey) data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) ################################################### ### code chunk number 2: survey.Rnw:33-34 ################################################### summary(dclus1) ################################################### ### code chunk number 3: survey.Rnw:43-48 ################################################### svymean(~api00, dclus1) svyquantile(~api00, dclus1, quantile=c(0.25,0.5,0.75), ci=TRUE) svytotal(~stype, dclus1) svytotal(~enroll, dclus1) svyratio(~api.stu,~enroll, dclus1) ################################################### ### code chunk number 4: survey.Rnw:55-56 ################################################### svyratio(~api.stu, ~enroll, design=subset(dclus1, stype=="H")) ################################################### ### code chunk number 5: survey.Rnw:64-66 ################################################### vars<-names(apiclus1)[c(12:13,16:23,27:37)] svymean(make.formula(vars),dclus1,na.rm=TRUE) ################################################### ### code chunk number 6: survey.Rnw:73-74 ################################################### svyby(~ell+meals, ~stype, design=dclus1, svymean) ################################################### ### code chunk number 7: survey.Rnw:79-83 ################################################### regmodel <- svyglm(api00~ell+meals,design=dclus1) logitmodel <- svyglm(I(sch.wide=="Yes")~ell+meals, design=dclus1, family=quasibinomial()) summary(regmodel) summary(logitmodel) ################################################### ### code chunk number 8: survey.Rnw:87-88 ################################################### gclus1 <- calibrate(dclus1, formula=~api99, population=c(6194, 3914069)) ################################################### ### code chunk number 9: survey.Rnw:91-96 ################################################### svymean(~api00, gclus1) svyquantile(~api00, gclus1, quantile=c(0.25,0.5,0.75), ci=TRUE) svytotal(~stype, gclus1) svytotal(~enroll, gclus1) svyratio(~api.stu,~enroll, gclus1) survey/inst/doc/domain.pdf0000644000176200001440000031035613122573400015300 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2115 /Filter /FlateDecode >> stream xڍˎ6Q֌HJ4Z l/mzmydmo-;\)nr3y/Z=ӕ2,fKK7sT֛zw7Ÿnv0=w\`,a<̎ќq0joi JZ颞-Lj#$ ?\nu[e N00t33YYhUU3Tloop]5=rv<{ rȮR9y,Q(f'͉V¿M%⪋ Pn ~I|_$E5[R;]*D&BW:0}DN$Q ;^=`R5r퐋{0b0' :j)<ߢgıDl9nHk>Лlw߀97# : :c{ma͓("[o "h?dɏ 7Ԃ[-14Nh#frn`tȭݎ&`XNӕi ,拘:UP&ZnЌ.;au<+YD^(E{D\(̦,V Ж=!\~Dq&B4z!A;ᴑ:^p/}BJE>z*bo:'^́gےh#E_ޑǣÞU \,leUB:q1e9x&`Ą$%OklX4?hixTDlyW/L WS/`ɾh\Xzbg6@y܋# REu<5HBK * 2Ln﵇p {h&]֗l6 N^Y7ą2KbYhKF ߕ脣F^_3s|Ϟ0aNk7>X'vVI`Tx>lC& T4؄cW]FnDAa>))XqB1xV7q^|,5A*"OJ+Ez/!3RejFxRuؒBcB#XXJ`WG6DvޅB2B{7}.bBC&wy_f" x {Ԫu㖣 S7#ҫ+ĦܒOo~MiۚJ2:!sষğRMP? ƛgTJRfh¾0B_= 5 O$6-Hjߙ'U0J/hMyuW'VˈuJ: C(^iee*&X.0QEЫ TT8;oJP:^Y_fɥ,6JRN{Si*xesx6bJxVG/!9 oIO {X%}q|$?v*L=ъXVҭBN^SBD9C@R*jJZ5͟OWX*/防4]4 ZqWbTPZYc`!Ep<-oE@Z[Xۀ/HJܐ(00ȅ-Z^OaVN { 31:|w,>X}QKvf.{!Zu"4@mRPN}  *UWyABPzdBUjLVx,1&,ɀ/zfh 9Ļc'2<"/}/:){;M]Է!H؛e|%iL&_0'Gx2BU'4uLӯP5ڹygXɓ^('rȥ( huҍ 풒8>pVY_ ߱-w+??MfAʆa_}?j / endstream endobj 14 0 obj << /Length 1871 /Filter /FlateDecode >> stream xko6{?:m̉Gذ C {tGƒaM\_(d]}"ΗgOxQ.D%Hj-$%&JˣQz`Po#`Q% 'o¥1-Iحc WLx{3%?g߂fY4()rN_W $$t:yFXq. 74|!PWغ d[g4hJiP:eIW\ c8f8~b9OULw5X|>k 4$471HE"ThڳL Vp_K6LkP1k,"ʒPzHE;Oy\f{iwI 4"ǯ^|pvHʱFi]D%27YHc:㞡-UQO>>A0 P \{{0 8y+vP)%ţ8uyd\,IE1)_JI_;|~*2R@mr_8y6 T)x5}6҈$=Q?bHǾƁ+ԉ0CQK%bˆ#Z%'1W4}Si٥.Iœy&=G⼺uuI[nhz'`wD?rDC] 8}jbre%mWaTNߧ"c.3SWɲr:3HԠtW(81('# iѸCkYT[HY)--fYAc~R;iy}f0zEB5)w@ ^ !#(B4 uo1mfBGixa4&q$ɤSm6N97l~Gx-C nq\uŒ3shҮ s48חX+W;Xז|ΜN%\3{?۲9 $86鸆8,hAU ط4-iHĚl{*e7ś91yTRW!5[r|.,]^msvldoj.f-zoz"hPv?AF--6߂׮`,ݚbX:cXNΏeN!aeV.`pI{62 !{) ݒ4Xд- x4Sk9,ڸ:QM9HN8Nnil"P?N{NG7޹[~ݳ j">S4lxPsz.N1 ѷ-!CR}Uk#jnܿq-1ş27m0i7/`:)ɴ+"ǥ,Ĉ#\E{#Nپbx7mDM^QD0zP$&ٯt~YqQE6yQa'+ӦKO#fO&HBA .ΰSxBz{0VNAJWDt(9H& EZpƎٓqVJ endstream endobj 18 0 obj << /Length 1516 /Filter /FlateDecode >> stream xYYoF~D%憻؀ڭ 40bJPI4$ˮ[rHQXHfvfv۳4Q7 a1(No]w3euE;Cw67S3TT򮈝igSLZȟ|nBOVt~e t |rݧ( c>%#= W4{?u\4?gi)?܎ijY}9gE~+g4?D 8WD/ 'ZV0۳@%x1Y`wJfyV5M%WPP)9W$(~'˃bZ a1 9sU(ARK2U1_NyTILaXPm[k3pNXշp DBu4?t2!R;["C0uKd-(k e:Ke J{jh,K2g W='Z*Z7XwgD;hTMRÒ,`fQo}xQjjt FVݷ5<\m9{eR?By%g_^K(#pG_ )4OU s)O)u5L[gOx`֌E˦5(Z@7{teK\nhB݋pض7968ZU=mTME V迃4'ԫymvX4oj‰ucI"~m@ 7j 8K|}Cv%Ϸ w"q\fĔx-X8_[!{WSwѾunuH4^3"^}ffv?!<ⷔg=0҈Ǿ_fsjꉉFP}NH(dՁY7B"u#`J:(e_*gTB۞h"828}I9 !01,V s?D֣r &wN]qKr}4f=7xwSx3dU?C; G74Ea3}4M{[9u^41'؍ x `%& c+̏dR, ag9} endstream endobj 22 0 obj << /Length 1483 /Filter /FlateDecode >> stream x]o6(NmNDY ݖbh< ۲vl')쯏D$MpE}GћN4qg4pXvb9d"Ѵgǻ3cYo bv_;$,V˼7"Fg)0qJnI4AŐ E'@KN>@V  rD|?xA{XA%^}(L؋8ElMEZD6Z!vlˑȐ-ߡk\w8C ǵ am g!Ɯ-5z:{{yC*vvHN}lBDf c5[YQKU{cI"kg.6{v%#ؠ^|I1tSɖ7sjL ;⼷5_MI?8skS|T swCT*ÑC;pT@ #0r>E]QD ŦE?ա<,8ē{1MŊ=!{RHKХ'I$y dun=I&l 'bC?F1Kz'&guĤp?{Qn1|qO6DŽadNyUD\n{y'`%~L䒒vIェЪ.TK}D-qMxN.®m텥_MvRbi',)Qԕ {\D2S!NkETۼfu)LQ LbYZp:HFt{bu-L,7KHn>ףc S,X 4ƿB]otܼn1JfUcY0jťUWcLS\tkr)z,` 3X̗NelaXkj1٨'aUgZ[kިcƩ,7Po~\} &}7we}c__Qז)m%7.t~/ =.Yoa_pj̢Z2jqXg cW,^^3rC.qO`+xee\U ϱ\s̚K{I}޳X_ [ܷ5Kh8C?5#=lA4^xp LI8ĵ>!t'D:Ia+ڎ{ Ѣu #J˂Vfk|DF̩~;}( Rw@>RFOU<ߜgj:]M0Z%jߛћ) endstream endobj 25 0 obj << /Length 936 /Filter /FlateDecode >> stream xXMO1+J޵w$*Hmi% JH*$Dz~%ꥇ37o$\Fa☤2H EDZuZHd-x:U?g2MLl[-@]ZϿ|8=WJjSr@\Xg/PնJ37g浙kXi1?/{})2#@+qk}x 6nsؐm=sLaBO׿[ŶYڢ0̀ȕh]$6:v H#(R(0YJ)+UN%ρaqV6]Cg*}l19nծd[Vv36Z,,Tێ\iyNXEd4)ίW q0WW Jz&Yd-QehTh2 &s$M׽ KK"WVvN $ѷlDqzcC9 7ewa=7< Єol_t7=wn]'"1XLLy7?dQGLOi.y5=Bù$?UdNb)TIND/2eS endstream endobj 35 0 obj << /Length1 1517 /Length2 7839 /Length3 0 /Length 8847 /Filter /FlateDecode >> stream xڍuTk6!)CI3t Ғ = 00 ] HK "ݥtK4"%Z߷f{~YGO n|RE-A!0>; ˎnE0QPۭM vKB"p0@PLJP\J@ $ (<`?@+"Q0;{szp⼿NP B@nP 8@ AݼSY 9#Qv\O=@ Ey@!_-AN?[g\p#mRFB~mBn$$* ]G뷊@~6pۜu/o$y@#I$x? Pޒ""@@( @_Qۅ-9]P/(v ux<'OƩ\|8\?:I֔9O1]4TD4&6]>JhŸߑȈgpS G6ulw b\T>OmnVi\ƘNdNҰ`1rxL}"aRO+\k,w1Xf NFkJÈyJ68vWK:oћx7Su-$ JYm x*B6\?,JpZ*Uu'+T\ۮPDZsSN9/_Rfhs?JsT? x8#df "m~72}mvbdW`/hϜ%mڸQ8v CazMpܜCBi Ht,.AJqg@2UH?ً 6dreZE P~Jd.]}IpX3mH1ѽGϴHKGJJIymTb2Z}XjdCQ4e=SWCX3dL:sjxR zV_U%wk+pkon2dt %ƚ;[vkԝy{L,겖tgt>YMx펚|n_7<ޫ4<ء3mYGSWτ>W4c=4OllQ'uφdN1JWc U:`2S(tQ*O<>WwU[rйPOʒ+(T D9jFAXS7 zD5$?`f0:=S#C#*̝µi/ne ^jfLInzwnqh7.m; :4z(g?&S+`eRj5mzHnNsa;fү؜ȓGY%bM_-$X@hp谝jZ?/`}adWQ6a<\SA[_o~^p0xJ2"q_\$?d +f{a#F#jGw= YabÛ( A5ug=DmR9filCYQr*ZRKhzPU,G^cmOp6ٴ5^r$9 ?\⳷X3ɵ8"I͌>P C\u] Zǻ2-K{ e+-sݑNQ⣰ ~)9)y1)L.vQִtopIn$nHbUK6TId,X#} 7ۭL8µpJnQCDdrLDJDəM3)S?+m#50ɡiLW]q5 箟zP''~\xY3cGѿ~zqZEI1R,H ZucS;5DhL.<+D;Xx@ܫSFR.wS>=6yyǦbdws]1d6j>.==]I׎6.}c?ĠN{)FHK7$ɂMV0k9|'[_\Ϙ57? ߻ZTǻV V=,"0 q-s״Nњ ,ies|h=|Q1 (!i5׽N~pd dZ/xi^)㋮]JM˟n" : j8BC؃̵K>9ЍmDٞZ^F$zP=ܢX/dG4բ3䕸'"ꆰ|L`4& i h@S{\&R5`-X"ۄ~3pMAI<׼Zv"֦Kɤc2džMi8x&hZsFby2S{0zӂ Ȋ9r'+m1pS6r,pIr,Eۥ{%~;r.R]S tHnm&U1Lw#g=Z6lOVeX(G6I:6B}ƁKZ%H طѝߜk8oecOP6 {Q-g/#u#*Q=( IF.ŧ֕l?XY& mlCsRcɊ u2qWN}KfQ `=8y%͔M2f%@vw 78d?pWbc n!o HYaYD)-AZW?cجS N}GSz2vԻZ1Z;\^:CCfnX0NZ{ig^_{۶X߰^Y)n_($߻ꅘ%P5(U ۄ5Y}ɂuŮaȢР*2U tiW?W٩t-=iC|3+u| ܦ?LgP(S{Z?9QaQ s*t8> wu+[C5=qM2-(+cÂ:WҞk4e |!\x>sO7G p?uaS Xq26ubbKr89mu@qlBhtm1X|ѥ:p_1z/h-F|Y6mkQb"ҏb\E7gI*Z?*N^jxsΣ:0V.QJ3_-fay@m,)ĝ$;]Oj-˾?pwo/gk ^ikKV? r?Û8o0?ݠ$KGz7W-2 ^ mC]0(-MpƟᑆfZִKՑ85R-h5Jgp׉%^Zju{_BN5 Ř߳Xr^NM_C8wP7Vy1V+-cSJc"ZÞؖ$4QA4,~ 6}3*iuܼC|i tJo,OEHa/5yc)v>3rnc+s~ڲAB|8%UwYؔ{[VD#O*W}ip"mry(DPt6}µaAqJ-zKeizZjÄ9oBy_(DappL>hi$T^oQgK1_@d,leᤙ}z-f\cH5 KzjbD;3ɼ{=r|_?h4{ɔ8XqL5_fمȥ0vG& /̕@7˞ ,O90uSN>9ӴF37{Oj=ubo= .Lf >} ʔ;mj½oHX`-~;Q{BӬqW$DmT*9u(L8x//+n^،18q{xLނՊLط~~ ^o2Fc͝$~3~e"Eвf)p)G D#^@MgRaA9y=Οq\ ArQQKD2s3;l?RBHJʵ{0afO* nV+Hm|`(=ke(q(kj x|t/P\w~.쒎QDm 6zL)dHs5"WasT-y+{6󻢎aߩ&$x6~s1'bN0xoss_鍅6gs\,`VpzQ{Fa|J4ˋqF K ޷_@6mvoYfƻ| 7~*W PᱣpntWļA66ؑp1 O+>eSō#K&Hts' 算(}(4Z^xZ'מFI-lw#`%>g!{2Rl^u]qE.(*$>XK܉i_r cB{3TEK\\"RZ&gA(+ WHt׹~dڼQZ_P?N ;7bc3;{>FLY гRVMEsyllfi O ZGahō@'zkoCs -1ݏU„#S]twdU+\Hzv΍6 t5Qeg4=͟ ϧoWO_3N >'蟵 Iټ[t~*Gz.13)%y]v\,^[K)N[jӨP0qɗ[]$1?se Nk9g8 Z|-L`F%kHn-'RVFψ4K`u&2fۇh}cNx[Х*׺%2uxc"d %ŧ6jm{6GUpOۢiBBzZ' [Y|ҁ-M8umN<ۙz!i Lz*7a7lBz-DJ6H'_lu֙hSL؋bB\~=z7FunE0^v]I&++y*yr,+}6KO1. ۰SwMԃ>P?q%- b2o؉cRb%C Z XIHO+a>!榎<隂LѺ7v 1GRW늡ėsuP]8-r#c,=a):V=VKhm^eJsa$1>J۾> stream xڍwT6t*R%*pIh{BPD:HwP.Mt Eҋ˹k}Z;3̞yzq[ϐ_i SA"`@Q[[ @B OaCcH 0S`q@m$E%$@ $7(AvmÐq("Q^h#ߏ.(7,.~W:@C!6sŭ P8 \RX,Jbhn>0a`hw+hd#G8wia!0;[`EZ|? UOBpįdtEA^ph `=|'A! :"&3 ep۬SDX h^?@z |;c=Dp0u?> '$&`PGP_AO7n?Ǎp?d>; E?g C[A87;4` 0;$_G T40RWS3 HO _Pp~?rHb?m=!pYL. o[D@P_)?2;Ry+!p?ubq2FĀo)vavUBprG8( 1*pO uM~㟂s#`zH +Sw`p`p:ȟ6 '"~OPDA!^dY"0Nv0_H,.`DG,w&))ܒ(EFSu9rPU!كLFhN{gUY=f~5}?XDdєj?!KZ蟣f}= K,Ϣ$L\i2R,[UZmi5:ۖR:9ڤǀ?{R2Qvyl}2GLY5C5fƻF~ 寪4Ue^-?'.s\㦂bF2%s!-fBB O}}/쵷+pθUF#bibj|oꠙ1ˇ˖Z}bޭ"_b[Q! -w^̮tG*O+)x~Hي'D^s}!Cy>ӻ!i2 _fLKnP]lZ_#8B(<$hR=5g4R>|e=#_]dePͻz%jsn5n~RhTL9-"rNw37)YL%73fآG ĭVt ~ݏNFϞ}'ۖ6W-VSQSw31"ڹK'ylpg5\%$)BQo$a*\dO~$3ĢdXWS뒘._)/{x?Ju&UpV\{3ZvR?4QɃġ@eǝkjntj%7?K4N:^h#F/aƽ?0WrBlþlJufy T c\}P_oD;@M|){QOVR/ 55`-msr^H N_= k 2,7e[L64o3;CB 3hҧyiƸ9Z?Jv{VѠEav 㭼m.25naB=a##[-?̰3g#i}'E~DeH{blM'X7pSGbPp3A1#zQڵB?v#3cEwĐbp2)CQ,ޥ{mz^~ 65w̽qkuC,E1T[e dUG=:% HZ_r{=҂539gF`([c? Hn)?'(?o|p}#,л-m-]AH4^\ II00ʜ7: ~( %f$sU /rm~S9vn}ٜכ\RVk܂u_SZ:iH `J/b;cQ*E%˟{O|ʹj׮#yg5ӟh$z~QQz@E_I&WQNţ>v' 9M%<֗gbQN/:{7=xEƳ6o-N~O,^cwNneɔ/H}kR+۷ޝIV #Jg)d~}2N)cW~ǽxsHhvaqx:>W̔d=_kDӗV?lq;Wf7Il0V7=U/H(t²Du\Q3k}O f2:ا}p :ռH‡R ݉Sp ;7V/ϸnmx i㞴܂n2~BqQfSCT3ѓ~6*iKU)jJR*ù#.{IYy(2z_ B, PmKжBѭCʎ7CK6+rѷ3rZtK,gJʿx^K+0&#_~Yl&.PWkl)̈́#S!uDʖA%tmD>L9lcFohv\C?WӜM_B^yI: O[QMR~k6J5 Qu濎/y3NDmJQY/42 0Jht%[p.Eq̋sҪt$sfc@%I@$a!fz&m=\ #[>mq]:XYP*Yd݋,D[ O='QBx?.w &)@ɓH6A&0XN(]Km{C1HAwa! ~^nhn~41 \i9&/,17B !O*V?،,&Ōsg!i3ۓTdD`Ʊ.IV4Z^JXN`U~G/ ICw>o\$7;K*wmZ V]9\AY̧d%=EaMuY Gw'js_Y\e&Ku7UL۱,>/[RDžM}ԯ 7Ե腁ڬUwmDz bO6lORs򛯐3DޒȾ:葷=C43=` I}IF4D; uM50߳}ʏ2ɯaFAƶuoq/_RIŒJ{FP|(^L:M_ bxlAeE'i1Ǣ$N 3+b!֔_%{)LwXM\zpS,QC ^LFP纗\cA@"P4$0;DIw;DsaG>ltvyB$ sWlle0*wkٓ\z?=wt~UzC3+s񿻚L.rke:D?rVSvpU- =^,5`n-XBj{TK*qC "1PYt.E$|q=`diW{%뙬RG3|ZTWC댮R罹Ϲd:e 7^BA`BLbTǖt Pѽbf.vcVqX S/6: 4TսHxGSū0u֞P?F=+'R~|6E􁨷V,nbeF^=7QV}m19 i\ڄ~dLD=ج|ALS+v$r߻4 \ȴwjfmkǏIbD3[Zɜ[3+ϊdb"5)΄&,H=.f"긁- 21 cC&Jbϟ;T7>3;˾Ιe\0Fv ÂvU[}X@ȻMݵ+\2<çeE"[7vZ|D+< 4]_apCjUiBHb%2DDFvRWĐJ~fAp. +/jNٽMcEFZ%cĀm%S ;|gFc/ÿ&_QKC/My .U%_Sm"$QMOLaXL>c~*ڎT"|#hyϓs0BOE઻kfV RK? sܠ%uQN&?|6qXHy5qoN? v.dRqC"ɅWV-'%zgg»8x<3r}@E1k}.)&BFϮrhz3zI!%& !7zg7 /9Fk݉u||9fcV3xir,e07(Vr\{YwrVH D Fr؅L bFux7|Agj I8x:k5W;Iu;ߨ+w}֯SrB]O.׾|t%<\UQPM[Ck5!ŞG)2~D-O42*zx>'Z&\epv' nKoN;a} Dz7C+LmoxN39_[xHJbWV"TOߘtCԌ[B:wR/'4dQbpY>*+cROM endstream endobj 39 0 obj << /Length1 2194 /Length2 18408 /Length3 0 /Length 19726 /Filter /FlateDecode >> stream xڌP.kp]!wwww n}Nޚi[HAV(fkDHUbd000100;Y-#U:8p@h!1pH9[l\\ &1udR6@G8Ra[;wsS3c@aD `d;@`nd`5p2Zhd`P52:W 3'';.zzWWW:kG:[S>J@ tp* g` 2:8Rre['W C`enqp1:>(K6m@77F:_ml`ddkmg`nnc 01dܜh6X9~[~+s"h`nHhnW`YXhW~"@YKsc0vW1wJCGf t200s2_UR2%`Qh898=o067rMmDM`b=F_<|/,G'$dea22j2``4+icb ;'c7ſ߱l? F_ϭ/+wBbVVRSKQX[i>@c l:;[o ژZFsG1s7\)2*:VWted:?Z_*6F+?+cnjb=Ӈ L?NwrdQ6???vr]t~$aL?SG$GT9;|1݀Fp+F܁u5xs)+OЉ[w#{-!m^/zJ3mpӘS?a?Ӫz{YvI;s *=([^b.qcBɱ+6>- q֒gI[ O!a6M:-21SzRMS_J'~N" om? ]ρXM/ͩi"~cbys;`AԷ~cdt>8ait[+#VW:~2dX:Pf% .nW>9^{W6\unϣ,Yɽv%_]1gS䦋nF+r诶+1DJ evY H,Uk[4*$GF.M$0\&@Bb󩢙6k[t810 #=DDj`Xr/5JlMc9.5'd*a|杳kd?_:ӈ{l~G4۩tTg(S׎vc9mU)Bu&7c{"٪=RXW^3ǡɽ,TBl,h/PȤ;u{(ӚP ES~{[ p1jwOm sT_0bcƕR0pQЫɞ@ZH@U?Z-K=dhQ6WȌyƽ>:Z%O'mNQHpdͫͻ-@,$-k۩݊ʴ'sp2jl!iaL{рEfs^xkyh=#2kLw2¼9YqvNI7xeS+6w)h1ki؃Sأ.>VydG K+ dy ~Ҁ74zsXYgX,^a8~A…lfP8wk 'FAʲOvStZ,L F҂ 9 .g T"ovn8pU[w~R~jB`_pq[!~㾢!mqfHqGYAUgs?NYF56d|\lr݃zB4g;d>O ~9R&{{4e=g(7qo- ܱA<AXT?HgvH?)bXBG JIYL 3s(GPrJ3UG.³aǹۡ&B(OAdL,V$LhuAgEh}Tb:Ee# ڊxbTe*uwzʤ*?Z٣aRϴ _5o5˟?F/k(<U;y^@$k(0$DѭUBOc6i&AoJ/r Tz=Dp)\Lx$49|Oi+]t^o2:0k-/.2[뭇y,SH|/{omnSޏ:^٦ xƺ/ FxbЩ|m<$8d6 2uTH1&ѾO'@mFB-n?drý%pGNȣj4$;7|; MRHA>B5\Z 4η_A`VB?+a 2]?ml=]nh<(J`x@s,#k3 f]y9|ؑ&+ׂz`LL=7b{,cbjzipo4]ꆡHħU1/8ED©ÆNd^Eiހ2ӢN$B_IH_I^Βf&Wlq5e84J t+ ,`;$!>YAsAIH Z3Ek9OP3}^"-yoY'mK8R -n|l(V!r˵!Uk!pV#@A|{cM{P yU2wO=򾳟0cF?u7>v~Џ?bڃQXsc72̾ <=G  $C^)U~n/i. ٠X-̪'аXD95{VXi,mE}hRfiFT2#p);".}ZU:t/`)Xl"迥b\ۻw1sy6_+:j՘Z|/锶,rՠ`lwSkFS:'_E@dt$Q>@k-~( B"ULۨˌ$CdMu7ƵM3+QT@cu oTA cq=>mPw >}Y*h!\z2Ys\4+̀SǡA hшs~z#$tM*DOj+7|Gv23d|^2VA]08Wѝ9C ,[bبbUv 1b93<}hOe`OT`æw,L:1,%iyKi=2@ۺo ( nR%lbZK*ىz+39 ~t<(}g_1>LR!zV;Pǯ"NiDz|v"kNq#ȑk)H^KO&W:X:{V`婠l3V_`1ii2^[F 9CKdJUYcZw=&|$w}VqMsU?K^[OTjWF\PH"2$6aj ׈3B'$7\62%} 񕂠[QJјP$Œ'Wʪ+S1 ymc/-fC펶-qp{ĕ^!`eO^A2 h\&e Ž̗ыWL8Z?_2`T~4:[}yDs`L}7C{i5Fj yG&B^17E۸_le"^k_&nw7YGEt#eb4:81 őJu V\`:koDu{4>p*g|b:EHf3vMNTd~m>&"Or%Y3C@=uB\htUlӘ"^#\R,0Z8y|Mf6mWubg/WYpoI|*[[2"5~Knx3cKiA}qT8䜿ޜY\ƞֳJ9εww6hNDp{P5_LztwGMٔQ iXnM5n%'ݘ[| D Ll;+7v7y6`]Ǥ]BA}9;֒gMuk7K}6pxbou(ѵ#60׻L=b%ʌ@rcUOp'W{Z*$/  2=hO,R$1sY8`0s|U\3bE ~:|E;cfҔSoB T# +Bɴ=} [R_I){} l W.>F# ,s0f3-^nK.r/˜'nEl)bte])ޛi?Π% 0C"ZiGPw^oM6xu& m!qÇn"Z1_5>-꽵}=ak+ $dgc M9} CaS V"y'ySdvYe9 ea=<<~6(۸kؓaT-7wK+B{b㸽7N sy=UUoFTv7{>ݚJlaoJ=N,lEǙ͇S~ѠfSR[ #zv IC2]m%KEl D6!fF 窕=3[:/>N 6mF;Ru9͛խ~nI27+#LٴXݺr;o0ʞUkDm1w69r"\_vLc(}Vvyx&znzs'4 f0~Oݭ'}d_o9aIzku+ő`yE#FJyvy F}~ȳOq!{v7QylRBg_5LN _[(3ln$HA>lY =vIvCwHm櫐xLeQ7^/),@Ўw%M]J$_78 g gV)߮Ga-98^\\rqrf蘄^67]l\"OI{*C@^ (avy -Է}f[s@vN%\-Pm%45d2F7U14)MW ~.BJ³5Oq\iG\Q5. i,/΃+τ\Wdo1sa@ׁpHijg#Hv`Tmc{CR֜<,:ʠO @!ziKb؆a?éIUTV J0[%-~-9dzFyr@ʻ}Y!>W\i3^`w:\X;çK¼ DB}eyuI7#ܤ':Qi,M;b]J_$>J>ZA"wxG][Q|QUMw1(S0U5VaATMT 'Mp9̟켁jηŶ hHwJ0SK/d:l0΍ B~.\16 lN<@ UD<؂[('BJ i~D1ɬK9倀H2r*#686h[gb Lha8*n1ٻ\LX}H%%S+]#D=Sw'#nrr0SO6*\5#[/H: S;w'*nfJͶlݦ.גӰݢ@PoӉauf5\n`;0YWmߠ(4h{}ɷn+Co>o" WUWa? =SBcYVmk.M<ץ,=;adr9}Tꗇ8:?IT vOPv?!I(^V'Jel9(|B7:'|;楸Y5=*n!q2QnjUSre C"좯,JiBwiko\I"U,lRyÿx(-Tc *HC D.N@콓N~౩e!XRb)5o[_H6Ъ6aEJ9X( Ϳw%c'/OQ|cB z uO_d} >4^"cfGeҾ{sMwIew-KA*}޻jKwNǬ(֭#@&OXqJl27B%fzLd׼f羹Ռ> vD$ r8S嚹dGi229Qd7!u C/V7^^NzvhD17A~d''S˓aD#7ObOJ@wOؤJTR8C9rgkxOu+ .p?pƣ9%ZfgZk ,Ĥx cZb9_|M:ڶאƛEЮ4mDǍ&ñLwVKQv;O[Qj'|*'=k x⌚H0 j.oV8^_vIVh)V ^>{1-y,64rWg#؊GƆ:"hg.4a=fTU6jЏ`}K3\ y9\BO@?ޥC[qn00!@ qpIhid/5crْr * (4nj oP08ˬZSUqfDThk<`~.Wu|9`[ lzd礜wsA$%Ӈa*V6aȍ?@%sݲA QmW7\Z4# ǽ!u)rD@3北''CK:O U#h2v-GMsD+~_9u2rq| rȌp0E9ۄ2olu85ͧ>H95h! sp,"UjLd%*|JOU&,&FljQ^}>>JƎf_?`?"eUe]$lˢH@˶J觜BaLTZQrd ԢheHU.U] Z69}U؅$B!=F:i7VגPde]82V﮵_N4q|IK_j~0a29 ^0N?[p3TO1Mo_i$|k,6u|@'m-#hMa#_ag[K0nNζtͣ"@r|Mg;%Fސ'?/6LXm&MmDIv˛Ӭ{T:g@;;{axg, yE^됗 b$cRl~M| `B䛣{P&@'Z9-Oao^,Q t|PAwL%;B7*ԀVH֬ۨ[2[p]4[ Sٌ81уathͰY]GQUX'yn%6E=Ҝ TL \_1eS~ImGK/'ijUogcvt Oli`s%uz#;=0>%gPt݃Z씯 S(c͖=EM8y-8Cp̽]C2lϋ,papB}P{¬ag^HB|TŶ1~ayw(q_h1A͕0WTjOb,1?VmY>7eI'=šb[TOteoW * ;{.߆udSC,j}jKԍiu-'o3w[~V"4<]H1b?q{x+5 ;55GUg\(:5hc6!~BV-?iUGBKEj:itzDbJ2}M]<M6Vxp',(BGl?yIdjqh8)*čO=(ҩ!].bU&%vfJQ1ÎNgݩct"7;(9ruP= hӝP(+?RO Ա$gsg&|5 K=mUс6V6ŕ|hLs1esѤ2UXOh:\|\6vdt"ψ؍|b90ԎD}R iX ZVODa\`xP.zu(E`ۧ5&'{&z 5u2n$=K=q{5yat}`v`!{>AxNb8'VXo1ٰf9S#g|tCnEIZ<<:{TWpӕּNO.p]r,"KWP>-[kl_k8>mL+$mAThp6ńڢе¾vm!ON8/G7"A^|i9تI*B K3Ddm Z=H)lgG6 {k~{ WZ8 l^n #:Ԧ8ioC(:$8ASgT &FWZ$ix0>`wzÓeK⟳gyKraջ]:ԝǑrr hМZ2'$V6 )B¢0J㘕eJ_9vLGNrw."=Z,h4E(s8TbW+~38=rTⶓd6\~y(À O_B_U?a"w\Q@ثP5eNgf?2dNbn{EEjsvr5pnqe\uTE)E%5ᾫ))w\⸈ 'm9eޅj}-,u Δnf+te(iLc&4ىq&t4(R?Gf $[N.S ) L! +i&Zh$Y{}mLxW~Mc zôQXP?"8ުj]:eb~AQ Y.3"r3tsQ(·nJ[Y[(Ai~!È$T~6_"k@/$R4LZ5k@iةKbf_<^egAسmJX_O,ص@dz,='#GN@`!u =nd.*|Da栁ڹEJ$ʬ3?xc e0G ] ډ LAƝ钍;"eRS^#he7C"r2UDt+S2P\O1 b;@.pw=oX2}Fy /sT7me~9EiЭ)82&}-=$UF]*Zf+lM+ KpR ʺM0҇0Ir$44/r,J<&O2çLEOv+Z~\6/-YCLQܦx S[h)-^I3Vp%c3#;XR:=ǕD,[h^hD 69\W/sk cY7(%$M;Ctڜ>^k)XbOD—ʲ(^))fB5ZT*oIiϏ܁PJV|Xz p>J"7 k{wN0%H WT'`d່+JW{@^-yi;7Qx)K/8YЄ߰Jg0s o-_/E@* YPBvL@mtA,R7%'Ge8%ETC`Wye9|Za~>YFPvW>?e$lA&(i? \l!lFLPVGI:}F!o ,;N[PmUMw_|Nē.MwI)vEV7a0 Ϸ`\wsq.7HĈ6~$FnPgn'n{|!䧧Ǣ`,4NO]UaZ#z:%bDzEVwRW1wAwTp kJIAX,8C%Fz2]"#3w/7%?G#m'ЂSg$Wߩwa2=hV.vQ΢L/敭xmG/rzܿ-Pv+hN&C 9* Zn\ޔaڋ.> 9(j~|wL5?{%lЎsL: zP gd r{388@Ko+8wx\VE"/%p flp-^]48 -nQM#̜6fT^wRU/TqdSg^t)Ԩ vHP 3a!0^ZjhF:|DY㓃-O#$T"E lUI܃4)_~ذ SV"LJ HVv gzuTC6 L5$rpJB|kHʲʼ50.V֭5_rfa< uO}~=8Fm~uoQp0sD$+*Y41//ZXpg9Ѽ<`MLdFQ K4uܑǹ7,sl)6?jArKjP"Уs/jn󅟍>䠚oIu,$m]3M++`KyyI0BCLZXz&zg<yaB6"TZa; zvUɓV C\x>25룆Ro;hU钙gsΕ ,G-s .UyvE^Kx^e>n1.m!S?+wkTt]у] endstream endobj 41 0 obj << /Length1 1624 /Length2 8788 /Length3 0 /Length 9850 /Filter /FlateDecode >> stream xڍT.SBqw)N B`E@K)wRHw;G9sZIoff3kqڹـ 0.^n@^Cs|LL` /3&! v Ym ְG > P?D7@lA@LnP#ڲxEE9Ⱥ`[k@r}<f |+# .muba]' ni 3nL&#O= <\ c<SUh $p tENlmkn C`@KIq!v.n`kG[du֏ ՞-nw)+B\]A'P}yYg/`n˝*Ey4acs@ PXTඎA^@X,࿪ wYS_n;ۣhA4(}V!-H7Q^Gk=nF?wVdr_*qd!.0[?! m7OW ql_GE=.ua|Bk(($>AA?*ځh q= ػA1ߨGO$Q/p x\@_1?g=r<C 'qX<0<{LO@?5\[/(yC- [̹i7[pjY*L[Foظ^7lUY+ O2tԣGY&ma~#VUdPAOnB\"U&LQpjTtм (]'4G+Qp"?^B^Y+;jO%h|dp" EέG;T"#VŸg het;{PtP֌QD*P3CgX/rбw?(Hm`87&䥃ȡiaTʡ/FN'$q^u! Lz:bz!›rj]ŭ[i|L7y˝*E㌎-bAb)/ ` ^U--ϥwmJ^=6N 0[\W268F3#^4>z1F6MSciÌq2x1-;3x{‹u0f N߿㠌ve!ZUF+bQB{Jg ,<jθ>jd.F<#ݟPlx(vb -\4C{۩ .^=4 u}QmbpCG_j f[ Hc-Pd PTj>P@~d&LqTMmF]E1wD/;:+yRN0=ն.<}.̠;"dR X@ (iYE3 ګRZĩՄ.IJZD6JRPG|n1p^ɴx޼ofQf15 A4(WBz%tNek!S0R͔ (ޕ7)Gߛ;%pv+8;Ym.ȻȽ*J9CCQg PIzn"`"N Œwh%$0|f4ìSڷaVSyJrY>(^ ,6l*CiE5kUYؾX t>3ɯh]6|%h9| hUL BSEٷ?W!2t݊H Ry Fb}fGk,R)gJn_klR^;hѝvgʸ̉9lcRG_9eoP8y*d~9ore j GO{iȀ$#b/ +<.L=V-t ƪ(Σ! 5PDȯ\esfBHFUvmvң%)kvkF xۈ;$!q^WYϦ= }2if1YQ)7Dw[~!p-U#JU wu/={cbW :0@F#R|6C vsnntŖ/_nH,b EPt!F5U,0;*N_c86wE}lZ=צ32M .ؠBе,$Q>] 6 $<֒"Ք&)J (y`dfE>(VwD5sϦU_'*(I$DZF ~jبD1iNQoU,ߚ~=-F/وߐjmw'-foʬ`oHv4aFU\qKIHh6>R %46v|s04JמNG(yS~E?;GbRp944&(&:j:`P=w*P!:1A&7K Im)b!T9it2 yM;_%\vKxD! MA÷dE)60x{5$"pN*[x Qקiқjr/(GBo0 8bḌr{ю)5?ek~&]6~>FzVvEMաdT_=KfV;## O Lf\ Mޒgv'zx}"q3]6y:̾pu.Y' w7I \vo*kL Q/}NfM׼Qz4>0ȉ-WwٴDuKSNe(Ш$Xhavy;q(}9& 5zlڳP7;25<敏LT(y]Qd ˗ɵ/3u_\>W`xk)Wmli3ڛ3%hBZ6]e s_56DY6n<~85"f)aCe:\;}ˑO8ȷ |A.Њ\~ܖc78d,5=l躡rK q?|d3ik!"}S¹iC>h|\WI<=e8'KOlߊskF/g ibKB墩Nyo 0<6ޠ/}ߣDie\s0{eKZA\h[&/I Ԭխ}m2ā"޾OJSst8Gpl| qqA2V g+43s]0+BS+Nd~B~)iN_P;Z8wf;|j#Y| B\ wμμ{܍띺-Vʞuy~[뭺t=ԄCLxP33Q1eRujNLڕRx F.!cHo#7_,%}`q:G`E`ď d}T2vz󆈵}ĩ~/Qcs9lS57ļM>hUϽTǬ׎ "z&rŢuya"Ah~5ȑҾZz VwVOg!d3,jv)t$ خdRX6rvUEx=S[XjI55(Ჺ#M~tGbliTTîwGߕWlMHn"$g5P!&676*cLWJ >g  lKFgmn(2rd&dˢ+uOcv԰b`,he1/j=ǣJwDUDSg )7"+_@LniYʓTnI Sc]~|qYfXVTЦV:ع{# 3h''FbńI@b'v{()kD.i&6d+ٜ>L)\W/>~ ): /@ʞAQ$M!s*%>6A8ETwq>g>5!_smY ɔ{Vt* %kŶQr: ?гoVd$SaCI|s'89g)z>D p$ I q[Ҭzhʋ_Ojhg+bGve}N* ߘ j oWx=(o}S6:),rm08uF_P8/ =;SjPG]lP<^ݢV'3W_Zn *\4Ppˌ%npj湾}ɯ5o߁V"}җ<{H^}jZGo6XTSЖbXV`]2L^wDDAU+hNCy&aċ4BmrN4jebd H,/ rZYDsHsc~&~!SPJwDsWE!S@'%vh6ԚOm4s0 gZZT1Y &qzrzs,si\0L/wO?y98Q< u_QDj5m8zՉ1pcQĕ628h-S)2xΝ'ƤT;T:[ ʴC f(/-Ғ4@l!5mı%\AķI 9pjO]\_*j4/ԉMX`R;s$U1Q5&58ȕoS QkzRMĮ$yv@P|Iӻ/6dje}ϴ:=tUjE)MCK;SuO#gw}:FV™#“A,EKRgƨc4tw;oe@ "iO'vx (n_OcPrčM$P:J[`.iM ^LԨhZչ-هS?: DYq$' ]9 9OX|9,E H_|p=L*r~Xҫ2Le;7}2>jtFH{sӃ(Mw7* (TjQ Yn&j{qUzt#> IܱU G41gkeRna/ɼ&.S5G2 je/X%O2LC4(jHZ91@?8w#zjh-;F~r:P%' /hD˟W8i6J?y)s Qx.pIq;143z=y5PS[oPJiO6_zoaU0e9!.+Pq.z퇇Nm֯w+f7G5 +[LHS2~'^xh| ,)Cؾhz7Y^*"~lv%BusD8s)IG71d:m=Tm>'Yc?]mBބaK&G1;l0;if薘ة%t!z FEPdڬ~뾂.Vad*n|]u]YDfV9.L{h:SıA卟^iڍ7l }q~^,dHr %i$MMM&fݧԨyohzhR(y^'_x `>\B1^JV 3}+EHv[856\*yςoڳB@~ʥzO4ƛ21Sf=$v.%q[RNnpZĿm4gIjvs?$iN[/wk{ۀkF |dB%4Ryi?ğ}|BVeժ58rB95yBW:Cҟ:kdrJ,5Z{74ۊ p_N2V u4[0r ¾??!%s{sїyV͓ ގj̄@iBYgpĊfZ9!EJK i䢄{ y9ec|l4M;-9 _cC\n̠:z%4q"4¡ }%vTphu﷪cXނ2A7 vj3dG1vB {\g1t^Rw7shD} jqGU.UG2pvq%Num9m7^TKG^(Ʌy֭@ǝC,|$s^*iQ)pr$;sE>_ݪ%V*}Zv^y*D1 ;;-[ endstream endobj 43 0 obj << /Length1 1559 /Length2 8173 /Length3 0 /Length 9204 /Filter /FlateDecode >> stream xڍP-Cp,8 ݂{pd\;!x.!X @p .!呜s=_^M3{uޫwH!e C!0nN0@FM[r<:`#o3  =d-`O<5(p<@пPWa PB@n2PgoW0[@`+ @frz: `Ysprㄺڊ<0; n Wg;_vm x28@w5t8@[I EV{6nN;w"0O l *' X&Z8A-<,O?[4O ݞ+v"4OSX@@d {su'o`XnݙKvq)My2af @?yYqN m~ yj=}aYx0Ww?0`+d `'d~|W=n߿Le 8z~>iiEw*Al}ҿ z }-p?+Ogi wwtf-4{ҿi Kj kz`O{ un`/feX^2G0u~U@6p{RiqH9XZxc~ZEk 8!PS= p6AB. A@.?) 7|Jp9xBOʀZt?T_rwu}zip" d1? md;~Rz!oqC\rwS=jDKfߝYV+7]>*tJ~.~zA;߹ h^y*x}> ]Gn쫠)|˜iR:+$A#r"^{_U7>K:#˿6AKNֺR'vÞlhuci(Һ;ݏ\DmW?l5CbN|JMh*O_c޿ONV-DD0pG ٌca2bLB:^ 'hZJzM!TISJ ԴW0݂qLlW PV$d47DܡnYQ>,~`u g=W8u{׽sJ*|"wMYǒ~00d o0"n]\^Wjh8cr4Əe5FN2ܒ☘:L&5Mᅅ!Bui_ZSK< uzC6`'~SvlsBv寭xeS, س{MF4/ql^Ptj.9;0i&z8Fr )[ӏns!G昊X YuȪx=<N[TMuP# uE?X_>r@kA~6PeX6\'n!Tta)] 6Y,526ruJ@a)?k.G¤ ȜZPqv:UV";.te3ʧcXGY揺'4:r]wq =h r'2 ҋ^ɂwN;A4:"%? ;7:TjrW"-[#O n" =3Q*n*YtݩHT/FAHUPaz3?yPɑ(J6B%* UYlofJw=Sy(ƒP+L[%K|bV'K[ht=W3Z=}9S_1!&iu޾;7b߷BVma5[=9MNp5SRG,>"oe1b.r?iAŐQs>]O7g iϽgV"CaboAݎotp.L~)bԯ,dz[(2}c)ceH7.sg^;l6L"NrԟfxYǪʷڡ2*vK- N$Cg/櫥* q=Bқ&\`$:}#b hœ(ʹ^QõU;7UWLf^A]xۥ|D.yFT5O~3`vk+(rgexrQh.myC1-X=rf~1r%ծ(m;̕%|̪T);1yt$ Lz|׍!_$I~F!+&Gi^.@ .g\Ot$:cXO3HfҽfSR-$7tѤpX- 7C tl0Y-P+#"X0R@E jJÊs,W0az_RCcnМxO4S~e3v|iU6BHImҘK&Ҟ@]6 JPՅX]C,#Eg"fق-[i@W9/2bzc'U}|߯udi)z]֋d/S=z3U1Qtou &plAtT1K_J |a2Cl41l۲*tϒx Ӡ[>~S Em ȬLsG3k&74w;B6~}ad۴\hMJEGNaOC5? zk w28o"cڵ&/t2B զ#L>9Vo`ʠ^)%irV)"I mjV#ȗ~UG?f,pcg V7Ȥ5em\hQFUs4tb ۊ)X6˘%H.InQ[Ѕ)Em$\QTRxVIc=@G"ᆃC[{Yx:cz$r.\Tˤ؆VQrMysDdk)sq깙g4*Iá=E`~3կ\ 3x-\[JTMl[d!-ozB\4jyKu8GF⩦*gڹ* Ԋː/gzzc4<ڊ'oC  #YZNSvϿP5UsO7Qk 1Y2i5ԅxul?ҵ⽃q+J|H!NdaYgjPQL\ɷ*rIP:GL>'+1RS ȝu:(J^nPe3u2r|AXƒs&[ď+oׇW'Tʦ\qbzh5.hTS /vkGc#ǵR?քb|7&Z*.0 ~d=03,ÀwD ):+A36h;mVʾS3cMBq/5dcP4;QeSKZ-%/J|@ |ٳyyM"4dy}feﬔ3zy*2>~Ff-̜{-*.Դ}2P?;_4;Xm4 g%Ll:VR^Kb?USbq-,*oH60vy@e(%*&5c@d,2mH/q#ڛТ ! 4e./С;bΛ<Hעdv7!rC%t/-ea邻@UR̤N47r mRD:mBPx#x[3wCqH ҧ_7dܮ #K,VZ gϻ5:-/ɦÊuѕ [^R F؟oS;!/d/G n#^26&& v9kV=5}82Uhlypæx0:_oE|Z~cOc7ŇߢxXU2_P%ˎpӵ`Kgs_ /l Pn#yzb)ƅϚӜ |BnŰd ;q %lG#Mn$Mc=8㠃6̸GV.YP!25fZ^ˆo¸S0vEgJ!_>QaŎԚ(n6-)ڍ24 +y\L~88@W{5' n]U|֪B200R3nyyK,[/ d=L ;Rhu@s,{v7A{*Ki1wD6s:ZOߑ 4p2@&@~y7smE#M|Y(`ƈO8u0R6i,E`UYK%`7e sdQM >V~mř0H|ԇm#%NyE(T.kJaӐ}QNiVU\}NVJM\?-gloR>>de5S~oMh-̉f܂*k#UY+UOÖfqV8%bEϔ`7/'l%OQ ;H3{I#y^&XyW$*nl/JR?h@e3$9|\o:XB4}}F K wA8Lgž f-&:RT U76wjvDe,T-J>u\N&Buotj1.y~OG?ì흂+,zjy,ua!l+u&v1uɏ$kݪ.y+9$1Ӿ(pGG|_cRXAN!կ>t {n{+R։l+l}DV?&|-?$ؒghgH%g#%'l#<%N 8\7KuyyIߞ_9>$-hԥm*2ю}0`oP_I1=MjbITz-%瓇(%E[äKRw?V<ڞ 5/ ۩GƘa`vJXjӭTVi#ݔ|.< U=#5˻d5ӇB=rp&Ԙ٬z5[A48_4ҫp>5gnyu"ҷ$_/4vwXUnIU:&KNKqQ{ ¨H5Sl~^f̔`8yZ ?˴L+ *fC|ģGjޞ*?XbS1Tluw˛F3ﻞ{XQMf7&xt ]'v-0.ln7r)wt4|XSMŖo_R1kA :5mdgGok춿 Y=0~HK~St$'E*X-T JH1*-Gtõ=c2}'!Q摛<΢mnrpAdZϲd{N[w9gnR*?L\Iɱ%238ZL17/B^=B e디8Uַ$ 4r"O3 @pRvJ®e. ]~PY'$Zn($khp웠e۲wfވ,.`rfyGet68_}R*!L5׳Z7w՗ g endstream endobj 45 0 obj << /Length1 2302 /Length2 14461 /Length3 0 /Length 15836 /Filter /FlateDecode >> stream xڍsxkۍ9mil4I&m6F1ڸac7m4:wuM^^CM,n2ʀ\Y545ll,llHԚ6v?$jm A6@SWLlPpsyyll19 Lm,Y  $?_tv~~^@gsS{SWk=8@dnttB֮,., g+z&5@tvZjljos,HMk4@@X`gctp;9X y%#_J2`; @6;Ml6v@+/CS; lwq5)wblbcW-`! : U3̼q 7GV-'7Կ"?2++|@'ܚ$^}8V~6@?$Sw O"$vv+ he':X O' <$\O|Y#yVBNpf ?"O`Y5 wrOp\lZڸ#_j?sMDziO'`6w ̟x}5O`j@ '7Ds=MП`g5;Q97v@?Lq[?|?ՂN Lha0Oq]p!]+W?,ws{#8ן@=7ws3 ~@sy`m}hC88g/ݛR6 eD\|R#"_ CC'Iz|`z%Ex ,r@7yKPk@NZDr K#@GDZYXr0OϏ;LE_MngmpD:BW#>r,> TpY$ 3"r^α.bL_h/*A'SR ;E~|*?~+b!21*0aht\l-w[~3gF3t .g!|y C0o-'wovI2 n! j*hWcaUzfLM O}'F7e4 ٿz~ڦ],0v7ҿ0~1\d1}(X്J8Chrr`=  iWF~[(W;Wd*$FѽieZlCB՗C ݐt> 6]%9̻EcJ\_ڤeb *T&|Xw^GUd! Mˑ=hh?U'<p#1WjWg7<(U2^e,tOߑy?ٗK`%%:C#c;?$"gj5۞]+w|k'm~F(upf͇4As6X>Q-.4HAQY +9fs<;zA>񢪸7#dLmNˎ޸uSy*Q-I/f+OhJ:7 J ) E1btk'WK*+m9T̅K\#Sz, sPPuU'XH5 +6U . TD^ʶVdNaPn1s%Z=yN>5zs(p%"ncl[2e莋;דπG]L 3_;Nd|/4,ow)s[2֑ǕLg`Zà͉tXf%/cRiuGbjXY^C%w+l =K&xuL5/*]u V MCsv $MX,yb0;\d;8\ڟB^%ѫSXNK̋{>'G'JwX b~.liG"7bs5#hy|u爦&4tT JnS5L0G)jleGzQ*w(r7xc-:ȹg7iz) yn 3%C"GE%L*fL"BVX\M%i3QMd[Gd}eN>s'2~ 3"xwI-im_& ׂI|z ְͣryb*JU G$c3&/ccDOu4R7NBi-PU[RSўnwN>$~Y?CXgNnŧu9)]fZL A*pWߵ\|k̘"\x$ٌY8BZb}H'Ó9,.})a<,_  nBh n\9` aLĹfD ߋaK'F34[NzKF(hCfՖ 򎑆+EBdb6Őͺ_ζB!Ico!|KErLNE¾U/4Iw\%}-n.&_}n*2Q;uiwrs]h#q'̹H!w匹*;뙬Fk { TD7;R؅0feCҙN@_ׇ8qѩO]pԳ?!կ9Ӫ⪑u*O<lt}&ʀ'*T3fGa uaլ0gϪWg!TϗSs_^Q3r'=yTcee(}nDFxuMZv}6Eė2Xw Sw$:F~{eG~ a.4_򫌌+w\TOhdPN>XpY7{\J[hI&֡`Xȃ!hCUn l(p鸰Z&{t|4VR{ !@;-PqN܉1e?A qd߃5p%+{+m^k9!>%#<0SGBX_}A?fR)T/?Ue_A,yڡYt~)H,;SZp5/({Ǝ`~7 C%`ngt[X0!$`955 b,`n*S2s@?gޏL{Yn6yuyLg|5zR|Mf4qPӂ˙Q9w $'L&ް6(AYm]44 grSlay9UꑱAυ疴L`n̋9w]o=)o >7_>Sp9y]9E8 kd9*9Fqɰn6N{)A[Xx.sjA]Ag`]2xliInB׺`z8Ʈz|Z7S/ey]zt w/"=/> N8GNH spk){Y%`EMDx! -Tp axT]:O6} .fǓ%.SA+=؋^۹eV'W59;ѽW: lNB``W+CJShKj|5xWHp%8L)kCPfjtK^!A+ocPv gi+DtLN``d w$9I9uphzi]Xt!oaZ|Mzx͈ucJ .rXCIE,زC1 Aa5|:#5@Xb!ޕ';;LM Q& {5Ŭsxri` 㯥F8ӊ9[^6Be (8vSIiE,٬N>}g^;߱`GL IP̵fr %<-91|+,e[\/|s3$=}?Z@+aoF-q?3wX ׌6gT qk\[,*J:3gg\M}R̟│f,Þfh$d~-&K͛oͧ`[+S֏j/w q;dhR i)k+.+5rWz3P{FgLX3R[ۄ`b:%}UVՏåHI@G' \хEH$y1 g$ fF[ r;BQn"Q#Ѧ=i]u;YƤ:`a\'Ooef,H>HnD2 2"^f$l_~{/=-* *4BƐ<ʹD5~ʅ$w46v8~畬T8 Q 2c%^m^׸бV[w} 7 WF"og~`qE [mP:!CYYxq(Z51V$@rؑ7.tzYӅI(B.(ajL&Ak{ Ws&uD-UG|ݿKg@Жh2DmoL8B 2p+~;(NW&O>Jn< \Roƕ$8L&5u7K;lIedK :_,wEiKRedU~_͏S_}Dl$.2Y*c`t}Ncu46@A6ɝƹ2qUk(zҊrvc$dXGݜz3ɛ9i>5]5-Z=G[p"& `'O-7(ƩH8d5:ovTvz#Z;S xu5\ }1dž.˪GSnvG)1 ]]#\tLo甭̸.6"WF,'=Y2 »3t'kJr19>NF(W,c/HWE܈H?EVQ5v9Ԓ|*5/đ\&k#%bϑ+ZCx9K^LM÷G[Kf==ԃ#;BHk0f}x|WMF$Q ->/%&K5*je1 וojلI#k@n.!|DpL~*SxKTGWr^? h! {H,k&PaQNLpc4E9YΥʊ!sS =E@;SٮS&QxH3_yتG'2c3+dV ]?1g0꜇~I@7ՅmBz^ؔ)6PZAs(G TVskCFymol;zHY8r_IQՁ*63vTagJ s׵*r[LQ~#zS(&nDǛ9:c96]D3%e~m ;!bm yQӇlUfԣlʑRs 7;>]SEl1>yV u->kEAaP<;X$d!-7|~Za]Zo^R؄CEx / ,ͅ,eL!Kт9"*]Wjn.@ ܾs(ýLAçpoEMebۣ&bu> uS(z:.:8v8eIӍӊ<|̀{iOa_ { _'me&%^^9c381tZmaEfx=u㬽rŒAhCk7=-2]8{mard1Z-4¹ʻ9ĭ-6U1s-U[@՘zc~2r]Ҝ9 [%ݗBYXIuYG[m`(AA<:_^Lj5Mi=w5[?Тb|`5L(<{ie|a3+  aڋ/R=Fτ @6Rc%T4-g-Tֻޥjӓ빳b6 p WAih"hEq _ hryfXaf\ߚs,إ*$fO[d w;[{r3ZtuƅPshŘkq5?7abEd|ȗAg/Vߝ= ?CAMŰ S ]]s̥DܺbU9GN6`+܋7tNjbŽ0VTAאpǭE o5p=*򳟝1ZC^!/VGD"e$xC#L>+.(؏zi4Qg-";KEc,>BoիQsܸ]E#ɝYqgIuS(ZX8X"8}Ck$(_QOG4IĞ!J" j';\1U(mlY󓊮 #8FBMlE;;BFAZIu_^fc,Ba'1+XHP?2N"Ië ;g)bYs Tyak][j;jN-,[E<`??ctZPpM${Q23͖RsD-G,(. o*k ~*̢}9[3{3vO8y7&Zo /uKɝC/GS"|V`gD q$qhvog?!/ѾOۗ&& i8n@%C/Wנ>oF\Lw` cUό=_J{> Tۨ\7ؖ-JK`(nSZ:lcٝ)V~/iln> +9@#ոAp[Q">[A5Rwwg)ia.Qޢ#3VނAjjmr>&ps$a匣#ا$vUdd~7^FY(0ڊ-Bmw<P.{"#ekD%3xeݣй|ieQt$wةLƅڮ 1J,CkGsl<!CmpϞPT7yiӵ GXoGoŭ-t#9KMM}$9|I}^ EC}Y{ RBQDJ3 k/FQ&"sg˗1qsnŚ*4󸎁1rco&2L,(ȻO~ o)u^C"6:knq>GF <%2?ݽTpEɦK\&4&n]P_R4@"dծa sDp(i=XLj~ll`&1_oAQ>@tnq(^xE&wN;fvf1pCAD !IQW+%Z3 Qc~12ZDF}Z7b)e/g##JzDzHɖ|K7BCqј :0ۂ=KFE왡4-/if\A9u~44J$ 7Ϲ_39uUMnѥ#BuѸDېK%ٽ} ^:E%4YLM?PBY~*wkG.NN940>Cdu1UV|yd|rBpJ"‡7(,md7Jr7_*靅6.BSs-|m7kM~=ŴYhFݫH5ǰ+zaO֖U!&7ZT}"-shR i]w\:n䍖7??gݷq:x|^$vʯ@qR(:#+%Oݟ];$xf.C` <}~)8¤? }MheoM#7Uϧ4t/RƺmIbF]r.`EWzjcwT{R_\PTM_ ֭GkB;nZo<kPBDG ΛA-Zyٞ%IezݾoJ4f(zg?|7[b7iuJNo)24IT0"'=טl:Hτ} ayE}FNQv$rD旖:abd"]B#-Ϭ;qr~/XV޹_,LP1<xYhzF _YȉÛ3#[f4e qK^(*m%PmӼ693~_kFIM咧I/V csX v!G,ʇj&>f2oN=m͉k3c 0eٯ7R> ~͝"a"h/׸*?*`x,-T`)Cߚ P]πPk?~ũfOӋi)fh ȋw:2Vb ~>~Qe+}B0U{3!×mUzHB1 +9|G稣MGY.;t5F_!#0SNR&A[?F~K-M|g!RlΛK>` i3JA;y( 3ڽcr#? .2ĉt#peGu@f+>‡-Y[J3eD)zwdWWt#< }6Ǎ֦;`;.ƴ/? YɎqbUTI>$.PHՑh; /Du(RVj{ޔё[]j>UaQbҶߏ MX2M\x %YҸZN9:Nq/eW z}d‰٧lGJhVsQ{>*NEP+Ĉ4٠pb5#*b5x)38"% ہyn|~,R_S},Oo6RH] MOL{?'~}1n [A(ʑ"k0>_kkYx]ݕ(ZF\ORʹu[|jrwϷ4a™DTav^5uI| )!:_<(ԃR!{(~}h6Qq\wԵJ3ndb%Kբ&>i9j EXqFc70T= hċAϻt)^iׅ#kx3@69~{۾J.xv{W{!Q-z)i-NFO5n{&Ai4H7&z]03ˆV{G1 oBmQs ӹmkH9߻0$E8/VJAvuZt\!PA6 &^ AU0@'s4#,v*)hj名PJky7Rk.Zs&D}!~a#UN vVs\\=rܚ7KTnF'MVoP`rJΑi\{8 O{0n%V_ҥ]Ν{OCc\0qHcQ}뚧VoͭL{\Qv^Tw!&xw xn)*mvAZ;j ! $j)01!7*ҌMS҂;u=c'3*'ꪑ# ˰r)o~` t8FB>s&J6pmW*o3sڏe Lz>Q{Y(Cث]D[mb%ƳJ Уؗ"~+[+cuacj%rخp7ЬlQqvyIS U1qqN9J,|މ0-o#rd_IŅC(߻}2KK1Edsw2#kז Y!TIG6.YZIď[V"&D>=4B8 #/[hèy8KvNa TScnm<{oadpy9v0Y[lv5 EX^Ac -ERgK_(ݨ袏9V~4pt]Kpp"*sChdUw*nۚM Yi>qSHR`a@w,g@l 4F&dz"YOHze^σhG}j5<v :Mh)^bO7QY<'a]A veT. ~w _O~M gkтNGnS14^4"-b`m zR85b e)WBD8 MT==9Uo[z/܈;$~r*1LC]ڕ7Brr%ɨXfeڻ]P&.ܾl nWFDg_q/za\pýzdFP&T,4C?DG!b\7qZ{@zex2ofB3I ZcRQ0@%\Xg֨h',w+<%rL>c. TKR͏ al#y/Y3k7Gb.?yHĂ-u8Ʊ34Vypx A)Űc8b6~;rUXP7"H L+ DUnkکk4Kc)#7?0rMC, T)d\rzⓔ!Ig,Ca֔5cxqb`~,/26wZ$A J&n$&Mǟg-di!K`ŶpUCuU~M)4}-Y D% O9 %#4G̝ƈT3mr6s;N?SYSQBYoI[zwKVqyB+<{?]Ԩ/<98EDz 2c+,1'i1sŊ(yȚt ctU; CӈH7T#FPWV*Od=#!qĿJ]`Gv# ň1ELB=Z< c+%! x5/V#lq`Cd:f  *Վ0njOFS9z!℆ݰrNT:bd+ `)[^8UEAѨmhG*Z.w|oC50ºvttv0} Jtyt>׸s endstream endobj 47 0 obj << /Length1 2450 /Length2 16777 /Length3 0 /Length 18236 /Filter /FlateDecode >> stream xڌP c`Kpwww@#݃kp . ̝;*@AJ/lbkqgf`ʫ13XX)(,@#Rh-lmxu21P l`f0s0s01XkhX26 GD Q[;w 3s'pP9v[,6y9hP59Oj>s'';FFWWW# r9L PZifn+ ,A6`g*-PX?t`f`7?hllkmq1ZXr NnNt_@+G[?ha4]: ! ;?Gc ;'GG zd+ x6& 'GĿpZغxZؘՆ3HZ `gbbbe 7csƿہV2%igk00=. 3O"Dffdfa;:X 2@ L?f_fbkc#fTQO*EDllzVV;+'QT񇧴-?ł߂]a?AX `ނԿid _Q_i+p[O= 0o; o k ʃL,V a3i(a2Qp26gV6 %[Gn=3с|{8) ޝ(nclkגs@wD&0Xm4Mb#`jבrqE#.o `q2%~#Vo`QE\`?߈E7b0F:#p-Z"npL_ hlaal`lےo{6`BX8ZnWpL#ÿf0v\nlk>%r0Mr_~gS?; !.࡛ZQ)_j[g?&f#f=r?Mn|Xv ?,2? ? x KwnX6mCw9`gQ[?6V ߃ccG?dO'jYðwu1vf1ۅ/MOYM:Zwe˕Isr<&?vûrOCsV my>u MQi{.;t9?%dl8 '[Z!~WW2:ρOӧvsnn](p0 39)Fo0tj; thtFV$Կ3_Ohq>z4[%MK2?ƪBIK-\-'nR-4!q 9)zpgPhFfᄿP$f^;;ڒIp!ŮŸç]?\xX:/>Y3>E-p9j6Ҵ%LA*[itGDJlY^dR@k+jleM@^-Oڄ\71к/b:sGM{ J޿7zf7 Vƥl]cG[hݬ[S1'NW0*L=z8*rykͽgKTaGke硭nW)5Wp"׾x|||vQAݘڃ>'!#R))*%5"c]w}}!7Kĝ_:ljHwoG8픻٘!.uN]R2rY:ufD5f _Gem.B! F3yߑ]Ĕy^ Dk*t7o__>~s'> Tm4<ٰq5F3GuwqmIN_[> !~a(WLN_lEElzwқX#T[q hބ̇v+}uiw?ބ|^m' qJr)~Q~P4 G:zו\yȏO߄?őh d?? Zv2S"Zؑ[>2ܖS$x2P @U d!ux8 /pŷ H[=ir6I>~% :ܯίF H:0H&'SW%6o/߸65䆺:cqP>\WT u-]zec7clV ɫXCp?PEOxצ䖲o$w @: : |q~Vl&hͭ,q,S#Hcv͘ݔyԷބҫu(.DnD'"Hꛇ|WIA70BypFv%M2DeT!9thHgݵ 䛞VלcT( DR_>P&t9yW"w2t%hNE9(|gxHtEo(#G99V&=mNgn:dmcLne*_Yжg7axx)$CbOM :[G@cҰ~Jz8]MWm*=/OtI#ى;F"S#OK\^%s.tyۥm`Y6j܈?Nb1lbmv"#hK6 Pxd&!c4bHПO8\n< ㄌ", S: HâŮ#3"?6)쯺]y}ޓ^]oFBZ2QT <5bEEC T*E}Oo݊~¤C6muKHSMzTڪ Yw~_9{kH'ios%9@~ț&m$ CgLQH掌vIIo9 1K$I:dĎU4PS<] 3T1 ڏD0,HRlViϧ:zׯJOINXKdFTo1z:`7\S>s.8(7DNHΓG⧞Ԯ+4Af4R#iR~m•\ii\gr52=Ú1c b7beL(\t:4vռ3HgתWݻ;1A +3c_r xY>f9aAoxΛ*y&iOWMF'^4g>;$)~~:}\]jvU{|O9cK%#xaoLuœ;sU$Aj*stEDy"i\} _\NR emZjnтi}/miXm[wW I*k߰vxV<gP3jF[h@3`xۈϦrDK]X?t|\f"Gك楩M+xFJaTh?tDq`,^32f '΅To(hiah5TzĈ_rDFX}t5f6T\XO#U$8Cx _;!YcTx?ҹ[_SF~j_RH\>eb%.dkॺ)yӨ_l7M}]mApJ->I 5RO" Z ؟C!LaSr7:kfφYc*W`!zkI 랻NPQ STK,C<1 sR KPΰUeR{;ID1"T/))E1cc/$ݡm)qAIwyj_ҁK ;fq{;kPTC1ԫc\/3֑~yūjTkB[d7#=p=%ㄍ%{èV(7w#w?T9PE_ zHX!EޥycӦr+L2r;_.?|pJbg^D(1\͋(PU/KU]R3%>R8ki4 ʵ`iȠzpWz34mQ OW4c1'srѿ8|(㠔I^vx5PSOfu 3I7#X}?yn cdLgĉ$xsDn'4<„`g }]?WDcm>7#:DK_I 7y߳z {Hlij}S%K*9yŤ*1ASUq h"^^ HǻP-q J$P׵7K0{c'1XQ*PjF^D>' |G,xF>+r<22!ji/%jĺ2$K~7t<.1NX}3%sK- XW(* 4vӂs lK$6_9ay[qŋ$da&@,ϗ$(ݛ|֒m.fL%DGgUJf$UGQiyˠæ|bK+r*S&{.De7Y将t̡KP[a P]Z`U vkK>dOSP_ǐuH苙kФ^!CMȲe)ӥcCf1ƴ"hJV%4mLB佧UӍ[\2 -ٵmm0w Js@lI ?}k: }Wcf9%΅"hh[z0}b]4@ͨ3(+ZtYxJ)}|eXz`(c RId^2ouD;c ~`]嗋LbyYTlͬzm+քhxn{BA 2}HՇE[E Azjf#:MB ^ kJ\Q(>D!FAΕ_n%ݰyb ꦆA?..H7-kیfGf&̆>cuOU~6V>ɥޖ1TZ`ʂ**ǫn̅{AXg>0; ?|K-o][=WCgbg`Rrۊ8cf/s}ƳO5||.wס|o'!RFf '`qIݏf5Nz)_ vsn| EZ4i EG3#sUN8S{AuSwޜ}8Ңձ#m!iC pxԒoۤscv~a0B{V'&rGFܣCD|.?edVn!D :$lsNi ebR[k#4:nFIa?5xjޡO7 A`fV1@ʥ]z$jN: cuw¸;#*)gvֵ4d`[NT@ed9x 1Lj|hpV1dn#cte.U5LO{e\5,?_%v'3|<|Q̙#;sD2U+T+xuC=:_ɤ6$Дb *gc 4Sώ #6̻n/\XiX=&oMŪ+h-[l +HP0;m~IY  âc%5+f!TaG[LeQ9X. G#`\Emtp?=兣U*"TO`uQჃ>j]]ƺ?6xM :xsrK^?T̚-Rbφnm▧#yۢZq\Z9Gzx3 kTFik# UV)cBK@ epOi$AW\]5 Ds4d\\CmQuJ/Y8:&>oFtPF!@EeuW.>Ե_q/FyBq!%Xx~Vͥ,RT쮴j׽d_R=ݧWu֕+ Zx ,yWÒ9cV})El@q+^E` ݧ>MX^)(zˡY 4 ArYeܾ=] 9.oez$7-j9L? =< [JŶ#w{7 6۠^G-O Ǔtv|$1%CȠJR0~&4thjde1}oc$5yzɽC?&^"܉m:HFl ,N.c`U'}Ǹ]v>FU`M,o5@d>O$Bdixjf# czCtЖ(^sQq9~lẑc/WwOeBNA#E“9+t5:,ٺvcaQ\Z DŽI. 鸃oJo_.c-"b)8$sMΛ4 5b l_-f1EWO<99VS7܊4 s5$,^˗>ig{/=0SCK#w۱0lf3u<[.ə_ YIEs6.͵X49;x~ z>|\wDC+z0{9 k|ܗ!W$Zސ~#T 7s~yf;Qf7`.v|pq_]mn+٫xqHpaVG)ͻH׏ŬȮOu˔Պn!?4*=p˕X=<9(Jw#0U&#q>91JVʧd>~_Jqy[YP*hh4;U)KczǸBL.pl߀M#5to}1 kJ|%3߈zU OSiqZOPT0B@y~;(S703mg&y616 o QnM]8:WWaYQ"̮KgTlgh3?F ?F=?|^,حjm!o$Xrs8E~n +5뻂\/FPK"eYwRԉMs\vY2Ia -.i`q~/]2/ZCT5R?"ٗ Ez WuBT%Qs2̳v۲~WObxo;.-K s\X+OqzH3UWzHsz e2bY:( Tr{6BCWnN/y$yY ; "-=1ݢ0 S3l}+( <hp Y%FTp5մ"4ĕ]I{xpVA^8ى05>Ja9K}P* 'z}C̬\L1 W4_zzZjں7 wdtk,D)yl6ʛ׎ LEUE`T}SrLG sS5tsAR֒ޙ. S*~sID(!nw4zH+ϭA6SmeIE'/IFw~ަL?M+(jU1E[~o=F$M15m^M*{HeCGo*ERk;lEu~ܩSc~=~"v35C߷ [;Ůmky+Wy>ҧ|utC{eeCGcwLXY-q{^SxgS]zkٚz]u& C#]loE#WqQ 7a_ bv H {Km ϱ|. v,gVP;)ܷ*&X K M˟A5#Wdh]?r^^::$̪2g9Gg>gd wyB81~LC5ePuiW辨Wr=ET_6B\0FCοe`_ d\>G7jOzӧUO &q߷.X lYbe:8[OIz2Qzi<+%ɍ-*y2]ԟ-|V1;;(sυR.*Qu?X'!̞4pUD7!{oO1R˻ww5WJ[~v 3sHwo]sL®w|;3@ՂQB[b38vOpb `o2t-j(F nF]z>Sj?Y3G·T$&$NP#"hYl~.XNs*˾&|YTs(ܒV UkKm Cнl5YÆ 9ĎS_?xE5**[/'IΙ$BqgjD4᫁$tg1!aݥ KX޸Peáz# Zߖ8 `I7dg05c] ($Ѓ'<0KogPsas1W`6`-)pO{b[x`hr,{?Z*I<$T^Xi 2l Ts[]'3 e5A&Շ' j/MKO+űS~Sk5A'%F))ǟBѢM׫IzȦ~ iK~e磹}a-}2wK1|~¸uxxݱD*RqHwot@plf~dKdf«wŨl& y, w|(K3$4z"jzJ)WɖSJkL7 7nrrO\X9sm7C# b<݋ca5 ,Y&okgslhwȸ/Hsxry]߶ !gkwv*eBG eIPk`UnKnZW 4`84H@4*P0JiJm< LH%e΁:sOgO%_QeDz/,tR'ل}Ќ<]8mFCH &bQx$/h*VʴI'/YA= &MѬ C>]GTIG܇VzC&:wH\eSzJ iI#PAo $v-Z"B.A{yџԘrTҼ:ʟ:/ԠI%qxha tcBBWmZ%|"/_6m5whH=k)O:Y^0}_=&,"bz"Oc+`6|Jn@ڧZ+{pn0ү?}hQPM.Wn\K912/[u77:ԍ&rxV?@k_N1wծ=VsDS}*yttQTj{E_Rמ ޵2UmG2+ rC5k%U^]qXpWVjo@KJRq)innF/ʻΛ"Lʽ0;g34:7 QADp\m *R юm7g

b@-/gϽBwP0cЩs >cVɚ7^0dIf/6l>i[A\ْ\B4|(R[sok± l5V {AfX^5]=zD9SsEߐunӮh]LsD!YQi3[q?Ѳ [LY JF- +bBt1}Lz! :–aՋ؄C|W=5TgM/]%m4a o_Wld9C/2QX7,pmAE[ N&-D XYsluhn9]xj](Dkz@k_]jMۯ\-ݴ:i0yl 9r\$tn(N4Kv$FᰘF j:Jb ]<xbU4Ƶ[62I*XxY+=\\nbRlR74u`8"OI dqME,5 sUH#2 )5`ɑh((paW۞G$xYN+]pOEK?F6жbw&[Y`Xd[> O!x{mC񢓪U`O%{ڪFOy`jO]jS.%et׼W L)0UXz9# 4"kwɫ8 ~sv` {O_ff#`HW;Et+~m*dbd)O:䣭ξYH(o3FGi< "ϖ>mxzk?d@Gmz xYw$h-;u[MrBg)^?Cvj: Ͳto}0naOgfBJw?3%e b}bZz9jO/":f:S6{4 G=PmU=nƞo.[m~zG]]!([뙸<4t fg0rYwx%>vjm_c^7R޽$^X.hn"A%Cb`e\!+:Ad_%';3I#h_XGՃ\@[ア }bw`Fø˧#_^ _EqFiuǂ_4{aFO;Ҧu Ƽ#~%8՛(=X><%[@ vy@fl5EDSB3EA2nk6lb?|^y4=sqQr)?=9$JDq{W/⵮nYWZ3gS({$u p77ql\D>~ZhL4#lcJn00}Z4\ȋ"+T5,9M%[Ǻ<]X} F +\-n[EHv[f[}.ڊQ'47]L1\h ŗ@wGu}#YqmwbeW5ey}i]p;;h=Hӭy^=\j[9mrǒ6U_1N3%G"}6r]_H^3{{?O[+V UŁ0e~iR<:* MYL[Yij$e?:akr)6ћ/YYFU#5͟&X׼YYBs 9>2O{O -D"#*:#~aG7*%_"(tY)/uN-5^_Z:uhENA2h密}pVH#(BN<$ki?`aZn :eHj G ([V?sC1 'kx^z8O#$Fv,-G2WNnKj~s6L/@Yөg t]HX8DCԩ9e5xH0Q/,EWDI?im#eVCscJ"`t S~+?RkVwdm0fzi_)G.YOܓO<8'^ZObwwyL9EqtU(fxҫX1?J3KO dKM0r..hzG;.O=h%j}lD||^Ysdwhͫ!aaҊJE n](ܝ/-'׷t>k.{N1$/54𰬋4hҮV 1#j =*YRR$[ f :$P=~֪/j4|TZ.0 {X$N"'@O44zXyQ%3XS({'2y~_3~n`XHU 5le` 9?FJҋ4aXہV Xz{mV/4_r-`5[~[-Xhhq3#3 ҵw hΟnohbۛ` :s'm2ie,HJi? Yo`muni[R7!iEWZs):5C^bb 01G׍٨OQojx NFsi#0і"r W=&`ݡH փ]v=Qj ؛~Q= NX Np<H!TBfυ.G 0 endstream endobj 49 0 obj << /Length1 737 /Length2 967 /Length3 0 /Length 1537 /Filter /FlateDecode >> stream xmR{4ie*R^IHLj6C`2C32fO|3HlQ]dtqt[eۍ".#2ij=t=9y<{~ck)qJ"8qXlX!lf H(0Q$0pEl6WPqARb*bkZ/Z"5XtQR@)!V{␔)H#Wb#HwB(6I#k!IHBb18@ ؟.)5Άn!&,l’OXQ2ybs8 a<;;!i  lR"SA`/ T @HI$6D(e8 SoѧJFi\Y0^%CTQIQLF \W?}$A 1xAHt d6|_(H,DY=-,oo"9Չe',傥.KCѐ$ĩн| d?j!M {gj.g867Y{p. U/-^-Lno{txrl4ih̵"mxwĦ<>ɇg F2UHnUQhAzqrxaھaAjgo?&ibs]#:LtXEi%g^&V?($k~m/]:'mKtG)v39smkZM9pcq9;X\^v$I"[A5I5zMN]+|t ^zӵC2yWl̹ǷU3H~P3=OmNZѐnn؊mğ z{L\>L\SÞPxqWrvT/ί^y{M*'nW8@C3e?nM+;1{ZLa?zvxΫs]?_#;Ş~iy^iiCײlB{ ]gIĈ.)TxD[/Gݝ-v\R5CaVwa|K=N ѓoܟI}{{gBaFuuOis6FR+uƅGܬ8ѷ/2_Qb*c[Kȼܾ[tuo / jl|nfNm"剁cJWuv9՟YP'_{!~r~]J?-/I}|li "Z٠·t0X%cSJw=R}dBל`3ѡ endstream endobj 52 0 obj << /Producer (pdfTeX-1.40.15) /Creator (TeX) /CreationDate (D:20170622004520+02'00') /ModDate (D:20170622004520+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) kpathsea version 6.2.1dev) >> endobj 10 0 obj << /Type /ObjStm /N 37 /First 273 /Length 1943 /Filter /FlateDecode >> stream xY[O#~EtKH a &klcoUn(GGKU}U]5c,LIŔLL{ǤcLIfaJ0gSZ0W :=` Jƥ,pLZV Ӛ)Kw qCF0Vt Ff )"왕`f6^@Q;f1'X"洅̙`s\eCS{0u|}(?ݖ=Nf:MbAy]FBEP,ci?9{]XHb:6,QHݛU$Gr.]O z4+(ԋ`de/`Ƹ!7Dy{3F _XJO]RϴteB Wt%E: :Y|6^u y3t!SGR3ʩyocXS+DKQ[4Yz'袙ƍ%=L\aOn|R4wI6AϿ?ykWYIUEE!(}) RIOJuzB 4*kiJY{Kmde=غKhTOm!hSK)$"D^NJTAfkъhMB[:?hL5{wɧjq]f )_/9$M(JQ9Ve<K/i*`t;:Rz EA5΁v::BKz Whk!Uz/lx+r5s4 PM/^OhK*)|<}g/YiLcQK&z1Mtl9&O2&tD6[4PJ3#.$Lh4ԊB6@ ׸ A%42c .XDd%V'q6tNlN6LئP1Wĵ98GCCZ&:^f(o˺?&q*!?1r|}ֹTnkfҌX++6))@]S]9ãwNbh앤wޠJ&:xRޟb?o!72;~{K>|?I \k?}tnG;x' xDx[^I3X 9sb4?}{4G#K}Z(o6G#~O)?ǯ777x}}+OC}4,z7DIP5?OG2G>ᓻqY#>_?haD  vrn 6/f2Fn|Qm:`kMx6p9p߉۪F~.ԛ<<0ONŕ\' sR)R#3j! ? NT$ rgv= Ёq1,neAYѪ 90ֳ {ލe-:;$Y"=7ɏaUI\֯7w5ݢ•U9.ԙ^ΧYzs]qwRƩ!^4¯"XT :+qKٝr ΰ?WICw܂jiWKJ d/r?VzB^ `Uדx.Z}[n3ˢh&d\Vn-٪-L\֛n-fEeӒlӮ%~een!^l.[W K3rsfY]r!7}X@W)͓?}Q򼯮(֢-}W2ݢ?[cT6$v_ h2 endstream endobj 53 0 obj << /Type /XRef /Index [0 54] /Size 54 /W [1 3 1] /Root 51 0 R /Info 52 0 R /ID [<224C113F36B80B2D5A5F8F8666EAAAE9> <224C113F36B80B2D5A5F8F8666EAAAE9>] /Length 161 /Filter /FlateDecode >> stream x˹ @ssxe9@DH$P A""* :!K>;z ?(@ *S13d! #mcQEml(ѶfϑDMEC4E(hin?j!UxdV=⽷ӪOՀ>= library(survey) load(system.file("doc","nwts.rda",package="survey")) nwtsnb<-nwts nwtsnb$case<-nwts$case-nwtsb$case nwtsnb$control<-nwts$control-nwtsb$control a<-rbind(nwtsb,nwtsnb) a$in.ccs<-rep(c(TRUE,FALSE),each=16) b<-rbind(a,a) b$rel<-rep(c(1,0),each=32) b$n<-ifelse(b$rel,b$case,b$control) index<-rep(1:64,b$n) nwt.exp<-b[index,c(1:3,6,7)] nwt.exp$id<-1:4088 @ As we actually do know \texttt{histol} for all patients we can fit the logistic regression model with full sampling to compare with the two-phase analyses <<>>= glm(rel~factor(stage)*factor(histol), family=binomial, data=nwt.exp) @ The second phase sample consists of all patients with unfavorable histology as determined by local institution pathologists, all cases, and a 20\% sample of the remainder. Phase two is thus a stratified random sample without replacement, with strata defined by the interaction of \texttt{instit} and \texttt{rel}. <<>>= dccs2<-twophase(id=list(~id,~id),subset=~in.ccs, strata=list(NULL,~interaction(instit,rel)),data=nwt.exp) summary(svyglm(rel~factor(stage)*factor(histol),family=binomial,design=dccs2)) @ Disease stage at the time of surgery is also recorded. It could be used to further stratify the sampling, or, as in this example, to post-stratify. We can analyze the data either pretending that the sampling was stratified or using \texttt{calibrate} to post-stratify the design. <<>>= dccs8<-twophase(id=list(~id,~id),subset=~in.ccs, strata=list(NULL,~interaction(instit,stage,rel)),data=nwt.exp) gccs8<-calibrate(dccs2,phase=2,formula=~interaction(instit,stage,rel)) summary(svyglm(rel~factor(stage)*factor(histol),family=binomial,design=dccs8)) summary(svyglm(rel~factor(stage)*factor(histol),family=binomial,design=gccs8)) @ \section*{Case--cohort designs} In the case--cohort design for survival analysis, a $P$\% sample of a cohort is taken at recruitment for the second phase, and all participants who experience the event (cases) are later added to the phase-two sample. Viewing the sampling design as progressing through time in this way, as originally proposed, gives a double sampling design at phase two. It is simpler to view the process \emph{sub specie aeternitatis}, and to note that cases are sampled with probability 1, and controls with probability $P/100$. The subcohort will often be determined retrospectively rather than at recruitment, giving stratified random sampling without replacement, stratified on case status. If the subcohort is determined prospectively we can use the same analysis, post-stratifying rather than stratifying. There have been many analyses proposed for the case--cohort design (Therneau \& Li, 1999). We consider only those that can be expressed as a Horvitz--Thompson estimator for the Cox model. First we load the data and the necessary packages. The version of the NWTS data that includes survival times is not identical to the data set used for case--control analyses above. <<>>= library(survey) library(survival) data(nwtco) ntwco<-subset(nwtco, !is.na(edrel)) @ Again, we fit a model that uses \texttt{histol} for all patients, to compare with the two-phase design <<>>= coxph(Surv(edrel, rel)~factor(stage)+factor(histol)+I(age/12),data=nwtco) @ We define a two-phase survey design using simple random superpopulation sampling for the first phase, and sampling without replacement stratified on \texttt{rel} for the second phase. The \texttt{subset} argument specifies that observations are in the phase-two sample if they are in the subcohort or are cases. As before, the data structure is rectangular, but variables measured at phase two may be \texttt{NA} for participants not included at phase two. We compare the result to that given by \texttt{survival::cch} for Lin \& Ying's (1993) approach to the case--cohort design. <<>>= (dcch<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco)) svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcch) subcoh <- nwtco$in.subcohort selccoh <- with(nwtco, rel==1|subcoh==1) ccoh.data <- nwtco[selccoh,] ccoh.data$subcohort <- subcoh[selccoh] cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), data =ccoh.data, subcoh = ~subcohort, id=~seqno, cohort.size=4028, method="LinYing") @ Barlow (1994) proposes an analysis that ignores the finite population correction at the second phase. This simplifies the standard error estimation, as the design can be expressed as one-phase stratified superpopulation sampling. The standard errors will be somewhat conservative. More data preparation is needed for this analysis as the weights change over time. <<>>= nwtco$eventrec<-rep(0,nrow(nwtco)) nwtco.extra<-subset(nwtco, rel==1) nwtco.extra$eventrec<-1 nwtco.expd<-rbind(subset(nwtco,in.subcohort==1),nwtco.extra) nwtco.expd$stop<-with(nwtco.expd, ifelse(rel & !eventrec, edrel-0.001,edrel)) nwtco.expd$start<-with(nwtco.expd, ifelse(rel & eventrec, edrel-0.001, 0)) nwtco.expd$event<-with(nwtco.expd, ifelse(rel & eventrec, 1, 0)) nwtco.expd$pwts<-ifelse(nwtco.expd$event, 1, 1/with(nwtco,mean(in.subcohort | rel))) @ The analysis corresponds to a cluster-sampled design in which individuals are sampled stratified by subcohort membership and then time periods are sampled stratified by event status. Having individual as the primary sampling unit is necessary for correct standard error calculation. <<>>= (dBarlow<-svydesign(id=~seqno+eventrec, strata=~in.subcohort+rel, data=nwtco.expd, weight=~pwts)) svycoxph(Surv(start,stop,event)~factor(stage)+factor(histol)+I(age/12), design=dBarlow) @ In fact, as the finite population correction is not being used the second stage of the cluster sampling could be ignored. We can also produce the stratified bootstrap standard errors of Wacholder et al (1989), using a replicate weights analysis <<>>= (dWacholder <- as.svrepdesign(dBarlow,type="bootstrap",replicates=500)) svycoxph(Surv(start,stop,event)~factor(stage)+factor(histol)+I(age/12), design=dWacholder) @ \subsection*{Exposure-stratified designs} Borgan et al (2000) propose designs stratified or post-stratified on phase-one variables. The examples at \url{http://faculty.washington.edu/norm/software.html} use a different subcohort sample for this stratified design, so we load the new \texttt{subcohort} variable <<>>= load(system.file("doc","nwtco-subcohort.rda",package="survey")) nwtco$subcohort<-subcohort d_BorganII <- twophase(id=list(~seqno,~seqno), strata=list(NULL,~interaction(instit,rel)), data=nwtco, subset=~I(rel |subcohort)) (b2<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganII)) @ We can further post-stratify the design on disease stage and age with \texttt{calibrate} <<>>= d_BorganIIps <- calibrate(d_BorganII, phase=2, formula=~age+interaction(instit,rel,stage)) svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganIIps) @ \section*{References} Barlow WE (1994). Robust variance estimation for the case-cohort design. \emph{Biometrics} 50: 1064-1072 Borgan \O, Langholz B, Samuelson SO, Goldstein L and Pogoda J (2000). Exposure stratified case-cohort designs, \emph{Lifetime Data Analysis} 6:39-58 Breslow NW and Chatterjee N. (1999) Design and analysis of two-phase studies with binary outcome applied to Wilms tumour prognosis. \emph{Applied Statistics} 48:457-68. Lin DY, and Ying Z (1993). Cox regression with incomplete covariate measurements. \emph{Journal of the American Statistical Association} 88: 1341-1349. Therneau TM and Li H., Computing the Cox model for case-cohort designs. \emph{Lifetime Data Analysis} 5:99-112, 1999 Wacholder S, Gail MH, Pee D, and Brookmeyer R (1989) Alternate variance and efficiency calculations for the case-cohort design \emph{Biometrika}, 76, 117-123 \end{document} survey/inst/twostage.pdf0000644000176200001440000022114112242746122015117 0ustar liggesusers%PDF-1.4 3 0 obj << /Length 2144 /Filter /FlateDecode >> stream xڽYKБB^$^m1|}J-zLDͬ'䯧^M6E;4dwWuWt̔ ͂6fv{s]?Ÿb7_RGx_kY&榢3l'x?=#M|AO}^73U`󳅩Uh:aE <^ddzfF`lio%ܾ00vb,V=kT, PaAՁ3t-tㅩ\i+8ܻ."wr%0D\aZ޲頕,%#2\Ȧ&:vN!r gлpe-\2jJDmҍ$MD{U.81U+s_^9:6! p_wᄏx|809p0P?Bhjy e 3aކμb#oS ˥wp1W;9L:ec$"iMqDi<:Q_R#ki|Wݜ|\;*]:EiFbÆ`YR*IqN=J^F;R$%̐Er 0$G"C <@C*.;gB bEx iX07bYĶo t_8<}CZ&hVNW_򔸵'UfA2eD!z }t[kiW)mëFũjTgx0jW{"$,֞0 M2=8U=;H6 F>B#"Lm37F:*j`uT+_m^ݨdp!_:4@|LŬ%$/.2W%_'Xy-<<(6*TX0ﲯ:ײjTPq]t4Úi!;W줤*47vX'iB2E: x-B }9\Wl56S#X!F굼DyA *Dީ;Iw"eW)"*gPPD-H| V%ciϻD tNVr1>YǙ4NF/bz]j 47AhnK) IڝWbwfJ=/X>cݴAkqNߘQ?$*-[zyRb|o491dwa~1+X&Ah] \̺OY )ڲ|廼;Zu-f /W!Utд Y}}\vĤon;hyT T[[ٷnsdJ }=t+gdE`ictOmEVeRC% |u.Pendstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 1 0 obj << /Font << /F34 6 0 R /F19 9 0 R /F8 12 0 R /F43 15 0 R /F44 18 0 R /F46 21 0 R /F48 24 0 R /F53 27 0 R >> /ProcSet [ /PDF /Text ] >> endobj 31 0 obj << /Length 1534 /Filter /FlateDecode >> stream xڵXK60z)R)ɡӮYk]?v{HzE Z| 3<8wI4&*fLMSYl4Oa-~:KyDus5MwN<+iR>_~ o{"-tsÄ%KL<|%FU *Ǥ i& qTEH™Lk2s/)lCH5 ţn 'v{zJO=4iWT2ȈUU̘* 1Z8c]ΜI?c9nuf OНqIj} -DL b,30v*MB&VXhDF\#  x1O+d@DW@j30~aL{hij$mXoj}&&+٠NV1Y:8U{$S=1 5Sp7iOͷvZIL%G`µH0څVm+L Bv̚|hnS;m?(d0͠w[ҺsťLr aJܑwŲ K˲/LK@ r%Y!(-JP \COY՛3};.klPAUmkiNQփJ1::&li=0sw*뺚Y5b k?k,"l5A 7* mڶy uݩ,Cڊ# wP5 3CL8Qx+&+E/[|B0A;ɓ|AQ96Fjendstream endobj 30 0 obj << /Type /Page /Contents 31 0 R /Resources 29 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 29 0 obj << /Font << /F8 12 0 R /F53 27 0 R /F46 21 0 R /F48 24 0 R >> /ProcSet [ /PDF /Text ] >> endobj 34 0 obj << /Length 1232 /Filter /FlateDecode >> stream xXKs6WHM-4IC:==(d{j=ߞ}AEIڴ=p}|o&/A*o@[ƾx7Vƺdsv2{TVX |_>>nj9䮼ln\nVvn _'߿*lVeWZm@j'M"0ʝ.@fZoC^]5VgCfF;x0ZkA6Ghm02(oHkU9 ek`5pg+`d$,%fovcQZg \s26jܮe'K|d\P;$ "P\[,5벀}ͻxgӪX3Gr\Urs?bCl0T\ΈʵWV2]!~,/˫^8r6kg\9<j͚LD{X'5]Sd[E1@}$NB+g{-!af.D ,  3N ]C`.{j"4DF][_I0df;/ #7|Ղ;Qv.a218R@ێe`MZթ=NY%@;BPRƒ4/U- 23S|b\Qr3U-9Ί[.$_& 8ZK_B/F_A[12oT?%ŀOD粎߳n\+bUU@5wvpdf@2I̭8~>nQthcbq!6$us+UfOl%¸΅na8BXt<|szAX^slosWcyp:oo)2z34p>PYY^cwsubZJeI,J]\|~Lendstream endobj 33 0 obj << /Type /Page /Contents 34 0 R /Resources 32 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 32 0 obj << /Font << /F8 12 0 R /F43 15 0 R /F53 27 0 R /F46 21 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj << /Length 1270 /Filter /FlateDecode >> stream xWKo6WEr7VDRϢ[ m@EbXeu;/J"]Y2973'ghYlF2OtGM4.~o$ԑgM9{kcdКW㉉So+"lr 8]frKh?qQg |VT]F'_Nܖ5zRuXG2p, T(.(<|>, gk'KݏN3 G3|NqW nO# VoMҵnYJm>PFC4(OhSƼ7X wb)*gjޙD39+yJz—7b#B̋ڒ- T6R uYqްISq:OTJ|?Dx\BKCa 'D$(ϷӶ^_MOLUDf#kO[\%AKSo5Kx.ؾ@[b T^2Jq Qtyd!7Z Z*WND1v:u;6UؽceYh^R[&Jt)pFt/#`dߴ'RFG*uthQ/.BQؠwcv*6q\ѦA]头yq&/-)% hKߡypZDɴvDSdtd);E/4}cC=_Nj1[?푩Ќ-۸S]c? '< 찙M|[qjh+֖gLjW1%L8g_"_ xnkt_Jꭀw_ՙ$VwҜL|$"? @>J/qܲF'ZDqlp1ePJR=`^, ;=- 5x RΩ#C*"+z,$i.=I.W%ی{Znmn jkqL t8SW ޸`k=j+;egҜ-oA7qNw 5o@w\*_Ws0> endobj 35 0 obj << /Font << /F55 40 0 R /F8 12 0 R /F46 21 0 R /F53 27 0 R /F43 15 0 R >> /ProcSet [ /PDF /Text ] >> endobj 43 0 obj << /Length 446 /Filter /FlateDecode >> stream xڍ=S0 1; w pЁ 9pKpoG8WJz$djtRꤙ%JkY*M_Tm@̀W)hAzjJH.8ֱ}9s nr[$ky/t%gX?0K@]pÆ*mΒ<ɔiK!ZI z;OʾH9oIh]^tLh)>zYLleD 4 ),>I4xYDGt|{r] )W%uu :lW'>|/]-&qX+ZmΨPjV>r xL܅ %C{ F{/!ku4GǗZp/,*$A[$Q([KK‚i 䴙.endstream endobj 42 0 obj << /Type /Page /Contents 43 0 R /Resources 41 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 41 0 obj << /Font << /F53 27 0 R /F8 12 0 R /F43 15 0 R >> /ProcSet [ /PDF /Text ] >> endobj 44 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 39 0 obj << /Length1 871 /Length2 2991 /Length3 532 /Length 3613 /Filter /FlateDecode >> stream xRy@RW'Iƀx0u#y@BF/Px<;B`?=bpa ?RA|  y`S a!'h@[GfnG B@<`ؿS/ƐFyhc = DAO rCqw 8kI 7`OFi'8mv䕔7<-B{=4! `c#JH"/sJFADY]vs!h` oV "_P?ǥ S+#UEʹŢ@C=@ (=z pDi{h`2>8ӘPy4tI^ǛaVOpuztyqT<yyA7k-k/_ m3 ގ]lm\Q7z^yáYzrk! Uyh۫u BV\Wnd2$3 8(k]SO|׌hnPSULPUX)2VR7ؼ,2 7>s[Ly'Oamce7z{RA_VF 8ZlgP[=|樚Sa|w8]7p83Q'evO|YHXqgh$(Of/ !+& :hav ~KW!=>.MZRpSW9Tms'T|y-NOB>i:Zx%HdKi9@w:Ȗաl1tv/X"EҒ-rYmIfw K(kljQ]5sˬ'^U)r҃}vvp[+*ZckPd>d!i _Jyf'ی\'[_tڐ@,l(>p|zE9׫Pqܲ5SŸtaX3F'\WM]K;tRYEW{l_!*8?UWfCiJiň.F,CexNS  #)\F8޶|C-KMl̟sfGu^J> fWϳhSe#1' Nj珓~" #߻⼐Cq݊)ri৷aལ|w^D@@Tde5}~d֌/%kgɯ~K.K9ѶKx.QyQ:fG*UM%g`u6| 2hKWǶ=4XQ_sI UbUʫBi?b }?OKBz.FC_Gjx_?t&HՎnߚHvv[ qR_z37}>O-͵ K|8ƴb=^#xgawZƒ* ADwmNjH/ u \Q&W}<=NKTR!! hțq qo¨ȓESH)斅={+;4q:h>v`<հ}O[PRƥ?·t-%jC f / 9VQJ ƣ qrY\gS.(p{ёgG ,Hdqp93Zp(oqzY$[m%O^ JIm|L>d4-c)4Ts*)WN{}ƫ|"^r}zEJ_`ȠwJp/ȆoH+R! _4'0nx? Lendstream endobj 40 0 obj << /Type /Font /Subtype /Type1 /Encoding 44 0 R /FirstChar 51 /LastChar 120 /Widths 45 0 R /BaseFont /LYUBBD+CMBX10 /FontDescriptor 38 0 R >> endobj 38 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /LYUBBD+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 /FontBBox [-301 -250 1164 946] /Flags 4 /CharSet (/three/E/a/e/l/m/p/x) /FontFile 39 0 R >> endobj 45 0 obj [575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 756 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 0 0 0 527 0 0 0 0 0 0 319 958 0 0 639 0 0 0 0 0 0 0 607 ] endobj 46 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/dieresis/visiblespace 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/dieresis 197/.notdef] >> endobj 26 0 obj << /Length1 1527 /Length2 8384 /Length3 532 /Length 9305 /Filter /FlateDecode >> stream xe\۶qwݵ5@RB)KqR/'ksVxI>1x}5%m V@9;;7@ZUG %AO/ Z 2@0@ ps~idg`f+H BA֖UKw{  }8NNvn@'І`vX@yRt%xϒ'3`&3fbpA`Հ0/7lgr9''5K_Z|;vpB ?C2 ysU d-lpKɁ6 wk{; tOPSJSY%]埬Eܿ(`/7,QLbr ,PK ?rz0Üw'[㯉q8],@g'_KR[yaoi -+N{{oI 6woI B~ N3r3nഅx@ 0s ?"``]a܀8uo'p:4" 7 ]=`I7" lj&Gۧ ZA-6 ayxaQ3aqsiu?Vv  ?VFإtau! +;lxFX]?r9xyx!.uze`Ko {n~e^ ö {Zc,CE:5L"K5ūut`,&;*ܕe!zxY{k|ܯ=OLߖg>.4!Ǹm?NէJ r5dtQR{d4t eKw-yꅗ:̺ri +@{% TbӤxx&;Ъj)*'2jyzkjSna ݊3 ꔰ729l-c٦rUQ*OP55Nu46zWe.dzNpio÷K"u?F:g)~;i? )#֌)K6مP2|r_ӕ$sTzۡwbN+q-9b܋Mofp % vrA%q4,]>Z1<*-\>1@'딵#8)v \K'$D3vt&qxT,ܽŻyS)#d*X@~-n ` A_`4cw9=ST#EP&1\b+ތ%~7e_"Y9cݩL2J m+z0F{f{]8)lP)) ]㌲]hi!m)Zߔ|6,<Չr~%Kv lS;Э?XGx w77Rk-GiUruL(PK8yxw89E=m0*c(x;Rd̀8ee麾zZ>qqbYm)_oiQjng/G[DPȞ1J,2K>_بz09B\ D $Z^H)q Wa{wn}=ML ҳw 34aN!z%9L6jxMǯqWig=dSPjyQ$BťІ$$zXkga5_e NbH&e+]H؟N"fXCx'fA^i({[ؙUXKg!Ih*""RK_}3/"ib[r73M̻ :ojbg^,, 6 L%ҵg_&# _?XҦG'!ge%X-[ ]邶>&%} &/ K h4[f0l/ 21J^ro)ET]wsdr cs8hq3WdZܢN>#Tޠϕ_#/3Jbր.8re2[$僓1]/ÞSmd)h:ًh4&[7Z( Pȁ1 TuHhҰ<+K2DNyc՘a톊MBNB5jAܠ7/ 褯mvgB;9&^%vO$xhlUH r]ڛaA@NcW%cp^TedO2lv5T#XJ90}@d98 z! y{8b$.\\r|Kɧv\xP F2ocOd%%vuN},rqjI+v>YShRUp8~JUBĶ4q|fvGHZZ{}$[&+_S̶cӋ6 j~$rk f}46(>Vt> %⌎h#s$„YC&+LpMWPcؾz-#L$e}CD^CqqLj=IW ۭ>PAfM G^ KNki']box򤢽Hh5c&-ho<}ЎZ9:\Ws!0&ԻVP[9T X9p˰h8⒢1էҊ=9/}*zk|Ӯo*X+/6܃I[nx|w/NnR:!Ub ֠G =-XkkiQ= t #j3(A?뭕|o;?)'%%\ 3ԗ-w{S,i&SfTKg~VzG4-1Y:*4]~te Uh/g]~U:q݇:n-G]EY:&ڷZSMF򋙩wf4 3\Ƃ Ia%~gn1ۑz@|:!0'e;fS,k>Gţ\:D`[6z@nV9×!+gXoy]WWNe-y+rP>9b',ׂezoC wܖ;_mevJj(I3,U쒒F5ucn_bր rpŭ *J*tO!Wo‰5 FVv=hQi6^=Rs{hv=Uad Jk^2OM!L sQx0 f"T7GR4~`j}1ܘQZކB:$"ZT)uϰl= ʎ%LE6_(ה dqu#Y^*E{!U&<ƽVl" lceMqfs1^\4|VSH+*E9s@i,]2N|5|b@Y!yH2)!T{np ue=W7}Y7Qo=ܘ{ PR6 <PkRN/o)Y9di/xѨj/cV 97e:N#-PQN̐/N%0724} I^̯;J`7w1݋j =I2d%4f5;2ɚLɒYDՋ'3xXu8frG2ֆ_8u-Il*>n o]\3!_Xp߱KM>ݧ=tECً gRUzd<5ֆQ>y2TZ 4'l)`5jttXl4˗bvy9 M[vҠg,dѢUFHȥxHp Ʃbja}; ϭ4҆ƭXGbP}ƋlxQ#1 <ERD>+TGG>Ə_$ oV+Q  R$?XiM5;gJsFYN=  INʄ!71[~"LGZ #-52n:!~^"T"v|>ua+:cW!.cC|ɿ#^͛R&&UG?5]4,oJ$:GQR)fx .';t^sM6_y+V:v)(dqY_|( -ղᵝoPF}KR\Zp"퍈Þ @o!>6!fMVEUK$lD Z/+v"umjN _{X8*u)ۍ?9My&}S߂@їRǫ'H=AܳQb/Р_MS_}-ƸA>Ǯ@qӤʍIL$cjyCK^p!+\+?(~ 2~6%1r2dZƷ~[KLJꪬTz%r ie'& d!~3}T3;ڤHcc> ǯ!p xiG}\IUCso%E*>O,XF&sq:V F$W0FeX7 ]Cx+9q.sZ?c,>0.OnvY?~s+ b@er'fj=8ĵ* 2@RI<-4ZDQEe8F\,ԧXM E7W>CO/|L\&=1S u:v yFҪ(6(@ԖB}޴ط-&',sWw!ۙ48r1DZƧ(*_XvJ,sV0Yva&|GPj YVDZR4 mxXjtb2s~},vG/h41F$QS22)૫׎Lodz3Sc LHټuGg6!,ny;}v懴^yfT|;r`z^mM2a:ēϬ '{uɝǫܤ<޸\|9Ip\ ?܃Z-??!$'Up1 +\>Yahu;t丿FLm܏`0&Ԣι>:|esys1Hw`l-A\蓈ryMrl!9AӺf mA_5uy(THpBpGloCzR2x)Y4ӊHA17t@U:>5%cuˈ9vsG>YA~;Y&}qU*W(2c-}vs<ྍקq,j/G6~ wl/|34@J@uKl`h`hAfnlkh4JpO 7R6_r RtxiiSbV)_c~IRֶձ^O{h@ں.ńn i'|{z‚KqaɞRJs9ͬСf ϩ;c]nI^bvpJ'\D0qk /3qg]y{ER_lVՈ@J+,g9©J.IXeֵhyAF"t7L$'wc.M |rm ۻ F}ã/f+T)rbz|Le5TggYZ ܂csRw` ;xt[PIHp\fN^f܀ԕ9[r-Y6K?chAJ`7 Or#EӧC)V)֍m+R[wH$(]vC?`d؏óKM)o;1=nO ^g^ԺxWv-Í4;0Q:`{hYԫITv>͡X*5^J,' Y=7gR=Js /M RsBOö'–:N{.2y.c}/E{<7rzl$;e1MkGlq~0'X;-%쌚endstream endobj 27 0 obj << /Type /Font /Subtype /Type1 /Encoding 46 0 R /FirstChar 40 /LastChar 126 /Widths 47 0 R /BaseFont /YQBQKG+CMTT10 /FontDescriptor 25 0 R >> endobj 25 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /YQBQKG+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-4 -235 731 800] /Flags 4 /CharSet (/parenleft/parenright/plus/comma/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/equal/C/E/R/S/W/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/w/y/asciitilde) /FontFile 26 0 R >> endobj 47 0 obj [525 525 0 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 0 0 525 0 0 0 0 0 525 0 525 0 0 0 0 0 0 0 0 0 0 0 0 525 525 0 0 0 525 0 0 0 525 0 525 0 0 0 525 525 525 525 525 525 525 525 525 0 0 525 525 525 525 525 0 525 525 525 525 525 525 0 525 0 0 0 0 525 ] endobj 23 0 obj << /Length1 880 /Length2 2253 /Length3 532 /Length 2872 /Filter /FlateDecode >> stream xgXSiA+M MP*)%( CBB^ D:" EEpa)KGfƙu>~gO=) 83hH& p @ aW 0d>jpuu8Kwa\UCIYCE")T+ ;躃TC04WНQ!d,*D"` X )@pGgЅ@@wΓd@73NR=P,@đID_!P$ d7~,nH'{SN Avi 0#@*Kop2om0DVBo&!] аC #cl{P}%缀!hVew4O͘`08#C̀%$A* a\C~p@> *4F I'S!TVdk*0J&ת w ]DP/4%E2R@)JB}߇@}UyE8#SIPS{ D0s׊S wABXp9=rdUs_#gMfb&ro+mRqONyie⑐۔TzT3IFyf޷o涥/?˺ o5>*bUݒfcJDE^VMxƛo"9N9.ຬ6Lrm'FČ3RlK8ۏ݃Wce>96Q~-ke!\hmEyԘ+bH(}d\?2g@h秨 =K qɦ1V26|cגꠔc 3nyeQf^ '#Ͽih0" 횛oͻ5t/JsUA"/qc6 |*>o*^ %y/,DGYEQ=- *Fo]4]zB}`.FsYu) H{Bش][¡mOƻa8<$g`v5~?+Ro=Φq7Px#r~9&atioˬmG6Z87\Ǡu^VUuleĂ+Sl &n%mF$&bZ 4!3߰Lï;XbLe#DbglSG7Yby4{R8埗u?*3Ouw}vqGcy2=vM]ՍO+wx7CEIwuiWecc66C( v"\tzzv($$m!L@N[mA_tY,~4<~1{${uVDĉ8|%L:=[3K:^F]ij9ȇ ո >JQK\|&~ uUu~$l-SȄ*6{eڋ RIuM;8sl9W +'czH´b[BȂzRhL*7^== l?WxYv艁ψII| qsw6n;~LibN,^k\@DiEL<}(R0]P4L^"F1LL%~#$SEG)R8 .yBZzkuMjPqYܮwRPf7JgϠMMtA /*މ1Yh ճt=m^d pt/6_u\lj: (V*aufٱE*'$jA-!9|kJ/92>#%Q ^PkGrqٶ*,;|Q0qsp.旜6]WϜvHSDαa3*3.-\NbX?;G|eQ쳪7I\m—^㴕v0g͆u J=Ĩ'~Sd$JKP>b8Ħ*% ? OA FvP@Ϗendstream endobj 24 0 obj << /Type /Font /Subtype /Type1 /Encoding 44 0 R /FirstChar 49 /LastChar 120 /Widths 48 0 R /BaseFont /DBWKXU+CMBX12 /FontDescriptor 22 0 R >> endobj 22 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /DBWKXU+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 /FontBBox [-53 -251 1139 750] /Flags 4 /CharSet (/one/two/E/a/e/l/m/p/x) /FontFile 23 0 R >> endobj 48 0 obj [563 563 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 738 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 547 0 0 0 513 0 0 0 0 0 0 313 938 0 0 625 0 0 0 0 0 0 0 594 ] endobj 20 0 obj << /Length1 1515 /Length2 7640 /Length3 532 /Length 8575 /Filter /FlateDecode >> stream xe\mAfIi!aAAJ iS$=s?|ǹs1,ul`V0(O eaQ,0%$ȹ|,`S`+H ;X[B{2% v!xr@/\: WdÃqF@vP\_T0߲HS6IvҢ ؀lq0d- SiWEX:9@srvC PC4@6nN98XA ߲SO%6ٽ*>SQga5mEy9|&'///2﷗QN j q"w0En$ |P'䉴 OlapܿU@tq!@6VF@b G- (d[{@KWd\XoYd[AҊ32$B,]+7-0(BGxBFAD -~OM Jr=ad #upA #(C"ȴ(2^7!Qb [&dD@H  ҃, u~#r .Du DNDp6<~#?(^vp@8@l>0On/ \W 8}HUxyEy>npGD^ͶȻY~YKSK0 0I|C|h:7D@?F05IW4a:@>CI95H;10&vV#r̻al̾Nlر&'p4'X./ݖ^ @(_MPmoϪ;7X?i 1h ,Ze Q ͅMVxK* cdSkK'W|^p)٫S9 /FF)Қ`QtaQ 5tZػ\6L}xG?;,AőW75r!M6HktXlW_)ii,%ca ŗ+"}’:J,6=瀯jhggܢD:E{O;׬bIu}ۻ(-S(KsE0=0i.V`/{9'8%G1 T4XIhh|}'<&E9D:|%N-jf ĞZքČCRM'g0Ǥ?\c]#BUyܕMO[/FZXۀͅU~4Bkؗ~eI㫮6t.FK"oSEKo.Y&.'Û"N $iMy>F ;^:ˬ2^k %ԓ;4Tf_Xvw fs|zA.$wgߘenM9jZn<[yqTḛM)jFQn2n=m ~Zȶ 9٘5 q}MZK9 .􈨻 (Wi?{9;i1 x&~*34Z$ ;jRPq7fV`cjDaZFP,íD:RƠҺюwgүEQ3Jm\ eN},Q~~Q--[- j707_B;* FEF|k{_a͘.>ra?+$۸.0y G̾#[}ӂal@buR/ r#~䲉q-z'NvݍN:"nGUaKiR@ߤC֖.Þ/u+S|3p .j+&oNAimչF5{CB?tT`XmꛢGE/#^:C?oRN|ۇ]֯#a>ͭ{ `|4,e[?$%QVaWv1a`9LԸt8tjm($lx VxHc! 9iU(Fhw*9zN(AZ]=yu.:r_Q M+1cݥV$Zb/Rk޿ϊ&IWXofwUS`̀&Ku ǭiݭ׈a_%dրǔfgÕAI8OaQFw .UFK+:OZf [ctV>2QUWu}bJTj倃 U[ gtYp'B[Iy 4MzçŐ&;  =ޗSi(?;&NPhymxj7LMu7tm"G^bZf?babboUj|$^9Z?䝽VDL]};nnƱԹ̺&b=׺כ^\3 3i;M=o1\RkGޥ80t,?&~ICR.5ܪ /dʆͮ>ps߶1zLR :񻴵KsK/Ӊ&|`=m|"0dՐ35ȌJO]l|+݃?Φ0>P%)~zye D9Hf}ܿ+^c ]U͇ vRY#YBJF:-'D N7t~ vʝK*;Q,rOx'S. ؞[G"ks`JASh­Im,;fPbܡTsV۠@y .STisJs﨑 *.2޿DpO+J3s~3yُUg׈o⴨?FR[i! tRE59Zc8u$f#\ i34+/B>zIF3o5dy<^e!x4ٗ+Ԉc-.ʡmqZyc$mP$Y#}6ǚ~qmFۧ%u;\ ڴl%b5/g]%H<1?9ÿ1pN1O/4{(4.TǔPtV9("̢S"Ȱټ mUA}_:(^K,QOI-ވѬZآ/"Lv5Q+Rn5񮑌2VFo 94x_,i=!%v'pX l/aA?Q{hh0%0R0OL_v7+ytז+FU~+CYYy/Xdhn`zі}s"ްU\yfXCn\eX}۪XÀÔ~ .tE߸þI9WqS#O5EygYLV)x;F{s&'>o8&04Wլ.*r`zJ#5lJⴉ W ;㈻[Ct/7PC7{RxYhU D{+,W9(fZ. `$!ۖWlg0KDy ǬEjꚱXs֌l4\jګcAmQLM> \C‹7tyi98N[,28'<aPN/VGguϰ r#&Sa"J{"e U [mhe_RSP)扦?7 hs > lE" Vޭ,0&ӝ1Mv^j@?.zRօ;<_c.qfB2t/7/),/]w1jK.qBh!‘Bb$6V:c1NUYGwx5G۵dL 6])`6Xie[!#ͲR(Z($ߔ_hXƝ/^i6-i} <龝P̝Qs@W.lUBﯹbW?pZޮ{1b7﷥Y"3= eb,%| 8}'GsPFe .ͱNEm dW="j,}sSA]jǃpT1qveY{z0*ZIPJx}o&^G秇qRp;«󑪗}6d߫?|cn擣4`rx}5?S";"Uu${O Ξsv- 6WysePug˕(cw[xʽ_#ߣͅ]YԨ.֕b SoCsj/M%# G햼׬/:qjxx?X9l\GČw3QoHym{:d?_1ΛI9|,}<.3v1Rݛh,!!7Du&OEqtWD,^Fd ]MK] ⠢#އwa-IL6 8+-D~NO}G7w+bu̔_Qk_6Av]x8?qfP8 s.ηR"Xce/'ɪ7{YEw9ʶmj wb:%|z.ma(dk{>7-9޾/=yw \Q+TfF#Vm^^)IMY3>3b O3h &8p]+~DL&m}J8_]t zw5Աc[̽ҥ2Yo,?Qn{Q86Y-{H<1JY_3E,n#/[xt]1Fbt'u:# N )$[?iW#"F7m2!F$NOz|G/˚zƪI?0/eݸwVTivH1װ)ދVC"Nqŕ#~3,hb^ڽ$:.WmOe'xA͜R_!:PAUSky?M/_&^K.ӻ0~[frwYߒ55jtƳ)t|Kǟ<8zJlWsJ-#mGFGTڰKҼ[p*$|dp{=Rn7;걨3~;R9qU< WYgɦV:wl'SXA͆ jn 5Tc7| }0},bnM06VSۻp|l΂z*l##r)yARǃBU  CE 5zz&*4 ;vhf` *ag D8n̤37,6Qw}j6!~%#F}Oᯭu ZLXj_qzgb~g-VuѻYn]:s75/3oX`t%:/Xy+>;x#rRܸJZoqLUIt\:Kf:Qz.ZLg91KY04qrtUkym(:~.pT=Vѩ}}iZ'RW]N޹ m0IլUY/?O"sIfiKSqL~NWӞ)k}!v,J`02v+]H'$CcҠ{W^uQ(H}ɹ,!t0I`񼶙eB|wЙk?Z0&𐰓$`PJӾ~I'?#`NpG*endstream endobj 21 0 obj << /Type /Font /Subtype /Type1 /Encoding 46 0 R /FirstChar 34 /LastChar 126 /Widths 49 0 R /BaseFont /EWJHGT+CMSLTT10 /FontDescriptor 19 0 R >> endobj 19 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /EWJHGT+CMSLTT10 /ItalicAngle -9 /StemV 69 /XHeight 431 /FontBBox [-20 -233 617 696] /Flags 4 /CharSet (/quotedbl/dollar/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/eight/less/equal/greater/E/L/R/T/U/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/w/y/asciitilde) /FontFile 20 0 R >> endobj 49 0 obj [525 0 525 0 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 525 0 0 0 525 525 525 0 0 0 0 0 0 525 0 0 0 0 0 0 525 0 0 0 0 0 525 0 525 525 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 0 0 525 525 525 525 525 0 525 525 525 525 525 525 0 525 0 0 0 0 525 ] endobj 50 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 17 0 obj << /Length1 1151 /Length2 6470 /Length3 532 /Length 7220 /Filter /FlateDecode >> stream xe\ms$ABBbVCsbD[ECi;%$g?{i|\籎Yk]4b`DsbJr  C^1uaNA H@( 1{xx xp{7 (WP€JNV sS[: qrcT8B.0C͝fK( /Or0 8_a\ S@6&p bW?Ťw~o>3 1ǚ Z'yK})Fer|\8T,Ķ]nXBuXCKF͖`}fV X)`Q;xV1e4&2m,`֣  6!KczԜka鳶 %DF /ڻ§Sjk\1|Ajêm^X>l*f6;7|a5SFϔYY$pi f@X6XU^™9557&ކx=mLqsm2-$}ьL)oZr6B|=P_|ezlU~|u- 4+ەpiY䋹B-$nwtodz!2ldj5EZvZIR`>׺*ٲKvL5+q8Ixƶ8,PL9Qi/ҡgSqЕs3{scbo!^A(9쩒oWwu:xk:B(3DY2ḍZJ kޅ-qH!/%5)>zٴυ ';Fƨd }ƚx]nt-K#;k"7\K`9H& #3śѦ|QPV!;lK| /쩨H(>~ )͵a;qL &VݾEvUo̝NHeS*0<.ۮjDБIWx正F)Y?|qG 7V__ψ=q64ݝ9#$dAh/3yL?s>}>̎iV*^p$y#c}|ZK@fX$lYQ4!6:o;Kbג>9#q>e ES.{~fq",'^][V94'Qj'D2Z:"msШ#5@N2ƣ鎝7l :7*" 䨁JzVSF]sYw{?5ȃV4)2hK6|7#yęӢ;k͇B{@*蓾W7uO쳔1}<Dʢ֥3߰GG ~rґxhM)IBnYą ylN''lURuL /x쨘}3D`Tx"ԬW63Y:^(}K^UӒ32қCΐ Bz3Gɐwdh^%-nW,pↁV:M_FY Y{*>^CUިS\WK2M/tqgbBJ)]dx+ϙ Ff?cI⮯esmB b;Fn뎎j%/74 zGqQӉJ/!cWd/Rr2SAj,#v@8!}! +0;r["zcMS)#Fi&EJ3Ρ^W^+xrPqр\չ=X~X= kqұWjQ}Wx#]W )~nWFdfG6ROE]2!$m]0EÂzK?m'f?WcyB F#z6bGgޠ:E^6hh9;$Z_A~'j#fmk( =CbP{:V|ʥo7A\`u{&v|&Ojƭ4 \ꔈK~Va]I*dCoZ ]nzR\׿lm[_S .Xx&f£|VԮ=>VYY l6uாnr3 >8_'Ѕ ;֡`g`Ԅt5w)1RIi.2GC*{*t!T|.-,ߌBE~'pej)lN4iKiWed'!26ř Yiu u}Se}5)ȧdeة,jU 4k+/PCRjЭ(TKD?'5$۫׮- k1l)L~b[r@*,}>v9Z Fp]JfC7#B:\ZȀ5Kc<ҳO.(-Pabp;J3RֽfXasb?ScG?3p3 v>U)eJ;0 mb11hY F#Jgy]{ɟ-iY6_me4 miP5iifh0R*<_*AKEnѫϗ\,n1ל ՊUv1FkfT?WxIeQ}؝ӛȂ5r}$]TQڄhv۽uɶW1?@~V)*|>KNp9Ŏp鯐vXl̴&oF{ilxI3D[Qsh/ّ𾆘nexֿ ꤈Aܡdpn+\xֲ E㉥@'-<1KyQCtùUHn'*4pvetf'~ H-KXn>u/y'P3CZ߼D4]3Tn`~JtU$E sbY}R'rzcbTy&"Cp1ͭ(@Dv-~R'+{ŀʿL&0BSTB2aұ)bu]jvd=avZ-Ψp03R!TT,_NvЧ.W{z.R۞^1$-١{ZA95[EV qCԇ 3M>b͖f4Nu9-f{0ZͰUˍʶyѤqAO [Z_ `PAQg l< Ut>w\]Q\=`jq&\R\< 64P4ci G$pmC'<*SI~qⷁ [5>GD@~PYqJ.Sa8ʻk3Tw (}Z gxSo؆MRh|vLP(:Q!A$baqQ{2==v̸f HL?z_)MLZE;Ð#YWZ4 EhjR 9[AqR]{Ox*bĝ=ʡc FwLCcлayb^VL3_7Lqnh1#U(93ns1!W:b*XXlix l QOHKj3,ߟC A_w Q Kw$O"7t?{':zy l"Zu(b_ߔf"{fdS\C˟ɞ5(OwE:p*-cΤ7xVlQ ]E$k8>"`l3 "#jXCrr[Z$Z;쳋:6-C ijNn$)|:"6=GtGɑ+mb΢{0[Ě-bN^S2,:ʺζ7 @luMKf,'qr@#e|L6tT"|2p3aba*2'9AEw2ː~KViBmj3/N%ƼaB 5JKbN-Nfbo28l;`a kལZ*x e}0t~nrV>@Iiai9OkFsJ1Mzl!%0qQNY6ciѦhV:\ItQK(/P:G8\s<ɷ5.p=M<(7Xv{3LJ%[X,HjuE<yT-:v>2c-y5($j1ddIHQ6n:bo @`T5WTKә}ẹTڹ uJ :tPfiBxs_IF$aGt4*ںQ_";$ w A<=)z)c`EhiGO4 CHAT˫bX_!}aŎb&A~]+ 0"vZfoendstream endobj 18 0 obj << /Type /Font /Subtype /Type1 /Encoding 50 0 R /FirstChar 45 /LastChar 121 /Widths 51 0 R /BaseFont /JUFAKZ+CMTI10 /FontDescriptor 16 0 R >> endobj 16 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /JUFAKZ+CMTI10 /ItalicAngle -14 /StemV 68 /XHeight 431 /FontBBox [-163 -250 1146 969] /Flags 4 /CharSet (/hyphen/two/four/eight/A/M/P/S/U/a/d/e/f/g/i/l/m/n/o/p/r/s/t/u/v/y) /FontFile 17 0 R >> endobj 51 0 obj [358 0 0 0 0 511 0 511 0 0 0 511 0 0 0 0 0 0 0 0 743 0 0 0 0 0 0 0 0 0 0 0 897 0 0 678 0 0 562 0 743 0 0 0 0 0 0 0 0 0 0 0 511 0 0 511 460 307 460 0 307 0 0 256 818 562 511 511 0 422 409 332 537 460 0 0 486 ] endobj 14 0 obj << /Length1 836 /Length2 1560 /Length3 532 /Length 2157 /Filter /FlateDecode >> stream xRk8*DA%YH&3qY8iPИ0L%DB9*r 1ց"&۩khWs_统~Qic2!"E 0%ڂTTL9Kc1\8<Ma_Z0<t I0f@HdjPtEA\`LWn!?Q5` Pi.yҘ0#  R|!-RYL:B0K$t08G[+)Of?,/ q qS@_̑ *k%ic'0_J4?"-и/LV ap $+k?'ڴ!Ә\;dWث  w@p|p7H8 4& @c^,leP Ծ@P @s y@=JW01aDJSp8@W<{&̓,m V)<brW7PWA! SpԊ3y!jkL<+zj7%_Ւ6P8_!I *P X :.ֻ$?.8qG Wi6l\nœkr_z2~ifv˝"G/:3;oNcEiElNJ\(,;RJ4˺tlVu<)`$R-O+(y^{]塍 }axIeO0U݌:WL}chP޶`yz7/;O"/?j#}wJ\ga!GS=6"9Y[]^z"<_︂by9v69Ƥj~rQc8!>nRX@m %_~\ii|oq4~Z 6Kv3Z0Xg=1bZ&EfLyb1i#k̥4 tSƳń~8fh1"W9S3tr;0RB `fMGID(y:jo틱j1DexD刔fP_- $ҥ㪗K,߯$rju1  k& :~YczdRws&EDٲeFާ>)Au-β>=֊Mﭓd#"OwuFκ]Z\zgM}9Hgwcwk $DM,&*)HgNN튀 )ƺ b낳 ÎM,85}PПRo譺e9se'i qtWlo ![TMN#Kny%-n>܈qϕ-vTIxdIR $>JR'abrq5j`2R[jbwM5<[4O\k~{hN-']IWkZ%o 7 NZv=b/՝7k&}IwrJ'U-bk<Лh0j.ñ$dDžp,<rbaG^|Rm?7Ʒ/TPIʶ:DpY 2P|Bendstream endobj 15 0 obj << /Type /Font /Subtype /Type1 /Encoding 44 0 R /FirstChar 101 /LastChar 121 /Widths 52 0 R /BaseFont /LEKMNO+CMSS10 /FontDescriptor 13 0 R >> endobj 13 0 obj << /Ascent 694 /CapHeight 694 /Descent -194 /FontName /LEKMNO+CMSS10 /ItalicAngle 0 /StemV 78 /XHeight 444 /FontBBox [-61 -250 999 759] /Flags 4 /CharSet (/e/r/s/u/v/y) /FontFile 14 0 R >> endobj 52 0 obj [444 0 0 0 0 0 0 0 0 0 0 0 0 342 383 0 517 461 0 0 461 ] endobj 11 0 obj << /Length1 1631 /Length2 10865 /Length3 532 /Length 11815 /Filter /FlateDecode >> stream xeT\֨ ݥqwwwww-[p ww r|;9=5kSV-4ŭ@@;3; @RY &HM- ہ݁v~~ '%́H llt$ĝ`;Ksg- R ph݀`O ";;`sFdGIw<`7_`FdUAVB\2*NQװN9xeߩ)<{TR`wMhfni 6wt+to H#.3ט/fÐlC!֒vY98y`"7`l!¬, w'k9bF.`#OG} sX-ANN"V[[d.Y X}`П? sC,ܽsCwGge@ -C܀A ?6 `u[:L⁔C -lBAdi?dj!6du?Y]?lNRAl jV!"dBBB_r !VNraXB/X+׿b 9bB qXPjtaIƩ̀q zZY\&1"ِK(m:oB:Z󂩽Sx|הԶTagJ 6q_ܩD|Ꮦ^cDoGnOg0;ˎzAP<E4Xx@sW!|R%A <0+iDKæLe7=Ԙk Xu1:Vݐ4 nk"yѢ|DHd?sHW6*Ҩxo==;rj;E> V=9i6vfZi;D͵j]hGJIp_{;Ӑh)G$9 b$gR\w-PI;J-{lz6,NKm1вx3B.b˫ozrxd2Q-$~sm[IWrݿgx,C>a,5pDY퇍(֍`a ?1Ó꾏M몛֖EmYDh'& :!Fi߈\^Wfxp >*deb>q2(!f(_p$$!1w < T4}2GD"Eg8疄-o,!4NJ  ]TXx#W}ՙ`AU!@L\N!sn',iZY5Ԇ˙1\kGDpeᕉzAqif68Y1_|, _W4?`9SߏV6'U> %+,2Xj .+ULyHt7_cwI5_ ?i`kk.>AUYmz;Zߩrq[CuOn Oy2ʴ*$S<  ߐJeam0rc-ѿ/nNIᑊOh,NuZg~Aԓ{qP ;Ih2ВNύq2u[܁Q9}x#v ]'X7I#+_nL緀]UL}sC2vS4QȮo4L-4/*f rd񏄕JDCJՑcX_X;Or;p+nJK^&PR/Q)#̈|gڰ rn|y^ 0$v Y0`–H-\ ymڍ}¦/mzH} fj]S)"(j[oڏzo$Sx n>}(\.pwW=[шv{6v򘤲Ǝ\ k;a@[[r`ӕCOV^Xܷl/n8=;4vKѥϼ oǘfW3b,;}%ͷ>< ]iL6BHY:(s)XF!U25 k ۅX{u,ʞII=cg$A%@RZ7tˡHЀ3%b\ q#Tܙo)?tpU,2R6ba/r$׮5tR.2Yy>;j!ʮv}:j?9 al5>Âē0SLt ^E%A1wI"ωР"~/ٰa+&WwH)M}7Em}1õcBƹ+yno+-BgǑ%I_yO=X?$PGҼRǑl9 ս* pNnZjpx}mO8ҕo&,2Ȓ&ywT:K&,MmM -(3epf&9_#; a3W3<)@>mv7: 3jfas:Wˡr(\1\;=Ϛ(Y:{ɋSa697_<,ji]Ӟt6~"`9e 2{q;ef*qwWXϭ_زTa_%CPs1;Ľ;L`CGm<34@I牃va(XnHFt},xPҀuyFi!}8GN葘' 1̉)s]uClOd2÷/_ UտI1ne;q5k%7o _#TaqmVZ1 }*%)b8lk[|Gy0vwcsT/?S>,,"ഘ ]i.V55FcI«+,π`Mw3^wZh~> .rI5j OnwqvĬ|2RCAv$#}Es_.O?<5X|N1}i,u:V;GwޖnL!-ZB(^V2:+E'C?P'QWդȒ߄E. { sP}U7=A_w|>`wuc2иg3Ur9fqnOoX#{0+DQS#_Z1f06𗞪x!ehzCSvgrEV#+z82?sŴ9IѧB1Ta¨T/q1pqϊ64N |x9l|ID(:7BBߜ eR<),& b9yl;ٗU\Rs ߏ-A5ʅ5g" HWLi4,UF<ϞT"ֵ؄a$h"6sU³‡*Uol&]#T'[ ya|G]XhWSu]}M\˪&?hL:6ڃvH]YY^?oۛbtP;b9XZDIWx64{=ihA gٚw(vm?"$?g43NgY)C7~Lj^І:[taqђ+cՓIW6^,5[pyyH>q$?ޢCFFfĹͨߧwM nuz_N ˯CTlVjIFGyd3DS5ȣTv^$MߞHcxz0LՓW5ͅb*Q# |*pZsz;@=ąipNIkXFE{[FOգ)U6h0ZI6$3{3nɓt? hׂ(<(ו[V3MQOC4KdNuo֓j5 -kbpwbU%l1) k]c}[x5ǔo琒z'J$l/վ[}s?}XIQB;fo LP%^SӼdtd86v)L$ysI(Ԋ0483IXYݸi>TycR m>KSLCVI@FS0&~9Z247_v)c{[ħx-1RQh֝Vt\[/kj9nxB`,UTheF1]gj\|F^P-0|D*3e'y 8ێa\dBs^ [(݆NXAoaĉRյ\8㼾 L2BikB`Cվ{]6.ƯXC&kPB2"We 'b ?^_:h a"9<`ǧƎTTT'?u]ys\v|l`W6UWďuh9<*RSjL1>z_&tʹ !)tFK_h=A3W뢓x,bZݟ;K)R ʩV!9\}4+M_߿cL]Un6_}mK)Z8fǯ{_8 <5{} 2&E 7՗Vv܁`6 ðƱlkj~OVQvue ~n;>d]AZ CX2#'}m۽l<h{]ZrIfyo,h)BL\Q K3n)-~G,|t".S̼}.kmC#a8lrA17$bU) NwZJؓ)0Sߋnӷ_R1qhMJ\LJ\%"¶ʜ'SY6f{AOS[ BhDkQdQpJ8]BIͭmouoԯSj 3YnR@3"SdX#)6=bN\Rew;SS{^ǶγM>M&܊JN]}H ќ0 cXej0Ifl=Tв19~NM?b+0UQuɱ˽=i5vq8dir{󺝁nDM?@7#֙)ZnЖF=EXaI@t J5Gx= u&mL[̓XB̮;cKۨ1_gO},?j $ \l\T^X /g~#CPo, *&L*mu U}F6i$!-!lo:uzTGie^|vzusܷd_[.gY8ˈǩ^ܺ꯾!p' tbCH=ֺ B#QK,G닢vetl&~ϡx[a17Z ='ƿ>a :"w 0o~Ԡ[^n{F+}fё'VhL5哆]<ccߧ`T h+p*v'ND4q}E"~\` cŗ%CD0xd5/Z!juA#;\CהmY.r  ?au ĥEZ~F .;0ւE)n5R; yz^g3s;aʙۤz 3]UT"F$?,R_ѹ<;ԶR 6w%ڸfQwJ<t *NcĹ5J")P1tj]# GX8i0۸( 4v/!E0;oS̷Gdt-~!d,qj=saDPGK̉IWJ4j8Mr[?!h-S1 ח" Op4nt dZ>zKLJ?K`$e;k;eYZm Kv?ʳM1`H\Xw -{j{f=#$ "[H; xAstmY#Gd7-弈7@MfJ&U]2RM~ (a2u`t)]'[ꑢ0W;Bٻuzke3-M '-q$[CC a 3Xz mـ3FʏP2RPO0k,J5ؠ@B vsSĕU^6sHؠ5:CdwMϘKmY*:y68zeX|USo3%HN{vdzaO[@ D7CFOv`q3BDUoIWf!VL{>{N>&A{C~ҩu$9yt-%O )Wi̿Bg._;vuaJ<I//ggp~8~ժrnl$46_'dJO+gx==O:,Oʸ|h8%: }2Ԋ{"Ezv"EbrA0m q-мQqCwTkWIo+Tp>oW|c+( yFhURDXOO\=Q!LИ#ѭ ܗ0^BݔSJb OZ4mhajGz¼ [L\UPM۫Tb埴h5iS]}GS&n6j ZB緰v䂉5 棢oM> endobj 10 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /VAGMSP+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-251 -250 1009 969] /Flags 4 /CharSet (/ff/fi/parenleft/parenright/comma/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/C/D/F/I/L/N/S/T/U/W/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/dieresis) /FontFile 11 0 R >> endobj 53 0 obj [583 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 389 389 0 0 278 333 278 0 500 500 500 500 500 500 500 500 500 500 278 0 0 0 0 0 0 750 0 722 764 0 653 0 0 361 0 0 625 0 750 0 0 0 0 556 722 750 0 1028 0 0 0 0 0 0 0 0 0 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 0 0 0 0 500 ] endobj 8 0 obj << /Length1 1033 /Length2 3896 /Length3 532 /Length 4603 /Filter /FlateDecode >> stream xy{?_置.:G-FR٦&Jcєy]Δ?M>MLzp)K{QedF;ZK34TKSySgë:ª7WNLQ4T6bЀ1)GMعiǐfe^J]{V]wJBOŞ~"G<ژt; hs|O/9xb3kLIHO{,`x)i'Cq2^r`3pU( \jȲ9V>8_&hel-Vۈ3=k؝wiEہ0TIZKFlGt]8w~YQ,ϓԡ~xaT:'/Bř{#!(5ެbv7\B*TTTz;oB+e)ʜ Yi na!l}&}{=WSi 'e[$22ei\gshK R~ε'LS$-46|cMW?^LU,|Q$mzz;90?4bV9_vbunZ=3XRy{oZLF~zTtS""REz7d?ܛԷ6}Zb"7Ug!\֛7 $z nW54|Xڛ_4lϣbG0l1FI>0^$OhΕقM OS;rkD7MIJs~Fz.3MJ}ʟ.In?ߛ+Y8 d7C|ۋFe5= 9Y_:B˽Wt (~P6TEǖNRSN'M͋6豈fӽ*NB#h:6,Xgsْ̓2!ANr?iZH 3pquv7J;VŪnsxX6 @ bzm2ekHNwTRS>!-2Ʒq&WŇQtEꔯBCFBh;s9Bb'N~O`/e6]~#aVZƱرbAҦFMH^}oMVEJ֙X]@PvϹzUI:->ON}߼hTTZh KWRmv*'քx*Tjb}QeĹo!u2څ긂tԦ+yѶ_K|"a _X:4QBO$qlF ,l8e yP7h.3$G]UM^nG)={EZ$>y$t'{ Z>L{[oy}dљJHI(L Wg)aU0V5 t9DTׯ*ZRawĦ/Ej'⥝Wi5$Xk((kU_:ޙaHC,%颗%HZvp$KIsC:KQ-‹S&f:iWTE[B*[X5éV'P?/zZgFj誢D22v#h7tQK}UᵉQIJh_3*r>b|4yiRL]3qJBo5VW09@oc 701^'-\NY$F`fSW(K V(lο-N;XOe2CA|nq m|^5PFNbSM>{! r! RQYj/7vPǼ [Dz`>`*\.i%M,z2"EKOMڤFKE͘bJYv f AD5/~ug݂PovJ ɽvm0QVJ]q@@:CNJ;Z yVXB0%]?հBt{帴k4cI8w~[5ƙ|c7 #:*ƚv(-vwi2aE [hB{9sb7K [֌6׀tO.d gZINJzh۫D R N579a[T7 (ia&ʃrwx/3>;~ &%mc;e_Г\8Ğ ft!S َ"ݒ>yZqO+ϭNIQPzk<|8~lLlْzܪK+r?/N%oU3W.=a6~#[]67 +oxzͫI'HO6R頥pGK[hSru܅VW͗XH ܩHRW$U(u,'ij#kcs֢Շ?}ĂW~lcbXޣR$V yCقoTkH]\ BY E}#CNJL$><rkpM$by7" cNCVK[HϷAcmʺ[a̽SAȋW=y*iWVtx_J d$LLu\ly1h8֬B Zٯu[)Oyt8aPwfs&n{Y13RjBBo wdA>|h pPjտ!pvHfҼ& E d%.]suؠP<7TUu\Psji73f}@U$gY%K}z.[e<x-#/Vw@7Aendstream endobj 9 0 obj << /Type /Font /Subtype /Type1 /Encoding 44 0 R /FirstChar 44 /LastChar 121 /Widths 54 0 R /BaseFont /JRWQBH+CMR12 /FontDescriptor 7 0 R >> endobj 7 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /JRWQBH+CMR12 /ItalicAngle 0 /StemV 65 /XHeight 431 /FontBBox [-34 -251 988 750] /Flags 4 /CharSet (/comma/zero/two/four/five/L/M/T/a/c/e/h/l/m/o/r/s/u/y) /FontFile 8 0 R >> endobj 54 0 obj [272 0 0 0 490 0 490 0 490 490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 612 897 0 0 0 0 0 0 707 0 0 0 0 0 0 0 0 0 0 0 0 490 0 435 0 435 0 0 544 0 0 0 272 816 0 490 0 0 381 386 0 544 0 0 0 517 ] endobj 5 0 obj << /Length1 1015 /Length2 3872 /Length3 532 /Length 4554 /Filter /FlateDecode >> stream xi<}dz(!*[N3cl)E0fc߲BȖ}IY"!{B Y YB\s/y=w>qF"&Bu}4xyqH\rTV z8b*%'.#'&Ա>8#P$ q(8 HLp# р D"DAP(@ 4y"q$Sɤ @b>i`I$')F\~l\PhJz8@@0L5GM@yTC4Bk#_q$O3n`*<PM׿U&b这B PR"40p,!-`> fH(  I,t $@?)! }\_!)Y7MP 078v e07$ I$)P~COP CIߐT7$7oH sjjXo?qq@DLȒ%-!naPnH${pH _CڏE&$ ÜRk"J5S 9T7Ӆ'zt݄Y_Z:bwn7vO=Y[Hg3ze/t\cΪ$$˂͗+D#7OOqjnLG"?6aHs+ |bHJ64Љ@S'9cRRFoyh;P(0YWvW~\~02W8]0t?nC,tX7ěXṴgm7S VҸZ*LC܎F OzG5q DӒ u^hOF-?ݙM %4L_ZMA{P:QYVPd _͛ _u+ܪ+̔ W;s)TWU:4aE{- 3bcXB^R%v{B\r2b}Dzs/iػ{<۞qI@Bba5RȑT_dKr Zz*{/ U# = w"DIp?3ͬ|9it],S͜A,$ƃut]{Pb>~M&Փ&.)óLT,xgɜD{J~#W@ӽg/)y?PI۰^yf^9?Uwh@G{)G},y5(x\츏,Uˮڕ:LǎyM0ޜ“w /V:v8G2:hsxLVܵ>OVUg}JzĈV2̨vשA KD=&ׂl^N4k+?WpP1Eؑb,f;~edq(/bL-[ o9#xQ 8x +^0+'b7y- .vR L8bA"u*"V ѽyV^,mȃRT7XrGEFaŲf9g=zxV1@jioXۨ^O3nlv01ȑoY(Y8CB}. h\WX'_v oJ$TeՇCW;4}.GM vzV; 4^riB6SBǁ#-f#fFhD[L!%LZ~i 7XlJQ_Vk_ARR/ @doqh#_~/6=Z2yẌ8m{pߋ39;PUލ$0|R9ٞENwZ[&X SAXBoĭE܂5@xpW@iӌ\fm9v$u&QY Zds2{chD} z:r3N? e*߱N{ƃ\{#ϲa㱚 G~}W8 p(!Aao­e ނԐ5fӣ{Jzwzɜ& b9ZrJJ>k`"gp'YM|D4bW'!룯P̴_u~,썡T90G4T#;zC;?+=1Xo*_KO =Sܹ) W? hy[xerg98M1#+7;ߊ'_rUGՙ9 ݢ L=-{1K.9f6b"Nt۾#}7ǰ:[}$!e@lɩ5xDup|̆B㮑yH:J%\̕0m[>t~_BonZ)nYӌS[,Jh~WZwuA8qىyjs}!@ʫG'}m7n9$QA։uJײd]$`r{P=7BlL?:F..Q }e=E2/3xZK$c"=&H9;䌒 gezjCؿ̤xیLle=EfBٍwoܹM5.T&w [ \z#s% h8rA>io#,cצHðȋАcu*V Ǎ}3y)1i%&ن截&eG.iN9%:Λ3" O>l>x-sHn㫫{r]{RŔ_/û_%Yj hkɒ9]PvuwFszmG9tKIu~fZǯ_$UmlkxH{jѢC[YK`mwR *G(S~棧 -~LtXeK h*QJ}ıhM=R(,'A9’ʋ@|n$G^((*D)2bhqfsճQowT[$ɋtV2;ŲʻSW}~c)֔:ïO0k?P-I`dvbr$:W=١(߇@s83D[PQόM5Ql+ ~B3ڡxLY?{Lֱl`Fn(E@4KT8S.} Tbo+n> 9p*Jj[\ҳEFm-$ۧ⽨Dȩ{Vs/8c0ȸshp,a~sw7MҹnR"w]65ZZ{A$ݢ\zXkխ>sBﳥS.4$i]0(n@RRH˜6b[}2( >Tg n-zp,k Y8VMM?yBZ&?2?Q4rr7^_.:'y:ƚ Yb^֢M6r7yO*ja_ *xάg[%> Lcji%a/ٓ:J}2ڸb VCl2 k!fHb̢ż^]][^zk1lyEs$,mzzөkA_B4w*ژ^#U㻏+8YZ 50U Z˻W.K-Tb\V(ᥔ:gW78 )>&J(1O5,3[ ?QdphysDi4z")]e *و`Qmk~-eP}F`~cn%TrAie a}Osnד !e`mgppg16^Ψ)}}N Q˩zbR({=B/t+#j>4C_wz:Xw{8m#`28BҠZ$cNsW> endobj 4 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 /FontName /LWDNRA+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 431 /FontBBox [-33 -250 945 749] /Flags 4 /CharSet (/hyphen/E/a/e/f/g/l/m/o/p/r/s/t/u/v/w/x/y) /FontFile 5 0 R >> endobj 55 0 obj [302 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 628 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 459 0 0 0 406 276 459 0 0 0 0 250 772 0 459 511 0 354 359 354 511 485 668 485 485 ] endobj 28 0 obj << /Type /Pages /Count 5 /Kids [2 0 R 30 0 R 33 0 R 36 0 R 42 0 R] >> endobj 56 0 obj << /Type /Catalog /Pages 28 0 R /PTEX.Fullbanner (This is pdfTeX, Version 3.14159-1.10b) >> endobj 57 0 obj << /Producer (pdfTeX-1.10b) /Creator (TeX) /CreationDate (D:20050324135600) >> endobj xref 0 58 0000000000 65535 f 0000002336 00000 n 0000002231 00000 n 0000000009 00000 n 0000072367 00000 n 0000067539 00000 n 0000072212 00000 n 0000067083 00000 n 0000062206 00000 n 0000066928 00000 n 0000061460 00000 n 0000049367 00000 n 0000061303 00000 n 0000049089 00000 n 0000046654 00000 n 0000048930 00000 n 0000046166 00000 n 0000038668 00000 n 0000046008 00000 n 0000037039 00000 n 0000028184 00000 n 0000036879 00000 n 0000027786 00000 n 0000024637 00000 n 0000027628 00000 n 0000023962 00000 n 0000014379 00000 n 0000023804 00000 n 0000072807 00000 n 0000004207 00000 n 0000004099 00000 n 0000002486 00000 n 0000005731 00000 n 0000005623 00000 n 0000004312 00000 n 0000007293 00000 n 0000007185 00000 n 0000005836 00000 n 0000012971 00000 n 0000009081 00000 n 0000012813 00000 n 0000008043 00000 n 0000007935 00000 n 0000007410 00000 n 0000008136 00000 n 0000013187 00000 n 0000013362 00000 n 0000024350 00000 n 0000028003 00000 n 0000037424 00000 n 0000037721 00000 n 0000046429 00000 n 0000049294 00000 n 0000061840 00000 n 0000067326 00000 n 0000072598 00000 n 0000072893 00000 n 0000073001 00000 n trailer << /Size 58 /Root 56 0 R /Info 57 0 R >> startxref 73096 %%EOF survey/inst/api.db0000644000176200001440000042600012242746122013650 0ustar liggesusersSQLite format 3@ F}xsnid_ZUPKFA< 7 2 - ( #  rD*r5*)+33541688746043491EBrisbane ElemenBrisbane Elementary\Brisbane ElementarySSan Mateo(bYesYesYesYesNob:@ d@23)*)''3441688746043509MLipman MiddleLipman Middle]Brisbane ElementarySSan Mateo(dNoNoNoNo No`#@=pR@231*)+33341688746043517EPanorama ElemenPanorama Elementary^Brisbane ElementarySSan Mateo(bXxNoNoNoNo!No O @33@d@237*)+/=255751846054837ETenaya ElementaTenaya Elementary[Big Oak Flat-Grvlnd Unif?Tuolumne6d7YesYesYesYes+No "b!%@Qd8@219*)+A5131667796031017EAlta-Dutch FlatAlta-Dutch Flat Elementary Alta-Dutch Flat ElemPlacerd5$YesYesYesYesNoY5@\ dx@21 xCx *)##)1006615980631259HColusa HighColusa High\Colusa UnifiedColusa`OI NoNoNoNo*No^@QdL/@23/ *)+/7920651936023907MWilson ElementaWilson Elementary Chowchilla ElementaryMaderad8M NoNoNoNoD"No[? ?GK@235*)+37820651936023931EFairmead ElemenFairmead Elementary Chowchilla ElementaryMaderadYesYesYesYesL"No . @\)V@23=*)+E7720651936023881EFuller (Merle LFuller (Merle L.) Elementary Chowchilla ElementaryMaderad(YesYesYesYesN&No d0 ?Q`@23:*)+11+640687266042998ECayucos ElementCayucos Elementary3Cayucos ElementaryuSan Luis Obispo'd+  YesYesYesYesNo] %@ z@^@21 OI O:*)+?=1537680566110696ECarmel Del Mar Carmel Del Mar ElementaryDel Mar Union ElementarySan Diego$diYesYesYesYesNoddd@24@*)+==1437680566088983EDel Mar Hills EDel Mar Hills ElementaryDel Mar Union ElementarySan Diego$czxYesYesYesYesNoc*)@\ dj.@24? *)+;=1337680566115620EAshley Falls ElAshley Falls ElementaryDel Mar Union ElementarySan Diego$dYesYesYesYesNoZ3,@d@245 *)+?)1206615986057152MEgling (George Egling (George T.) Middle^Colusa UnifiedColusaddG YesYesYesYes6NoX@Qa@234 *)+G)1106615986003495EBurchfield (JamBurchfield (James M.) Primary]Colusa UnifiedColusab * NoNoNoNo?*No] @=pd@23 W<W;*)+=3#2019644776108294MCole (Gifford CCole (Gifford C.) MiddleEastside Union ElemLos AngelescH9 YesNoNoNo5NoI$@\ ^ @248*)+33#1919644776012967EEastside ElemenEastside ElementaryEastside Union ElemLos AngelesF!AYesYesYesNoENob"@z@Y @24A*)+I3#1819644776114227ETierra Bonita STierra Bonita South ElementaryEastside Union ElemLos Angelesd9 YesNoNoNo;No^d@zR@24%*)##;1715634121531672HDelano HighDelano HighDelano Joint Union HighKerncNoNoNoNo/%NoJ2?\)D@21A*)+A=1637680566038111EDel Mar HeightsDel Mar Heights ElementaryDel Mar Union ElementarySan Diego$cYesYesYesNoNoQ*-@ =d^@24 G: GB*)+G52513631236008460EHedrick (MargarHedrick (Margaret) ElementaryHEl Centro ElementaryImperial aYesYesYesYes`No Q/@ `dx@@DGz117*)+152413631236008437EHarding ElementHarding ElementaryEEl Centro ElementaryImperial dngYesYesYesYes`8No!=@\)da@DGz116*)+152313631236008494MWilson Junior HWilson Junior HighKEl Centro ElementaryImperial db= %YesYesYesYes:+NoX  @z_ B@DGz118*)+352213631236008478EMcKinley ElemenMcKinley ElementaryIEl Centro ElementaryImperial bn^YesYesYesYes^BNo d"@G ]m3@DGz11C*)+I3#2119644776106421ETierra Bonita NTierra Bonita North ElementaryEastside Union ElemLos AngelesdY 9YesYesYesYes7NoY%@\)S7@24 mF!m1*)+713049753906109250EFoss Creek ElemFoss Creek Elementary]Healdsburg Unified'Sonoma0cNoNoNoNo Nod @\)d@25?*)+O32949707064932109HGeyserville EduGeyserville Educational Park HighGeyserville UnifiedSonoma0d|q YesYesYesYes#No` @pdpg@21**)+112815634616009492EFairfax ElementFairfax ElementaryFairfax ElementaryKern )YesNoNoNoVNo_.& ?K@223*)+A12715634616009500EVirginia AvenueVirginia Avenue ElementaryFairfax ElementaryKernAYesYesYesNoU%Noa;?p^@227*)+152613631236008411EDe Anza ElementDe Anza ElementaryCEl Centro ElementaryImperial cd* :YesYesYesYesa4No!M# @`@DGz11 fS(f?#*)+?93541689086043673ENorth HillsboroNorth Hillsborough (Elem)iHillsborough City Elem.San Mateo(dYesYesYesYesNo dB@pd@245"*)+713449753906051791EHealdsburg ElemHealdsburg Elementary[Healdsburg Unified'Sonoma0c YesYesYesYes&Nod @ @d*@258!*)+?13349753906051783EFitch Mountain Fitch Mountain ElementaryZHealdsburg Unified'Sonoma0_feYesYesYesYes1+Noc @(`@255 *)+913249753906060222MHealdsburg JuniHealdsburg Junior High\Healdsburg Unified'Sonoma0cYesYesYesYesNo J @z@dx@25**)++13149753904932554HHealdsburg HighHealdsburg HighYHealdsburg Unified'Sonoma0`NoNoNoNo No 4 @``@25 G>}G=(*)+;5#4043695266047526EDaves Avenue ElDaves Avenue ElementaryLos Gatos Union ElemSanta Clara*cyV#YesYesYesYesNo _2@zd\@25='*)+;5#3943695266047518EBlossom Hill ElBlossom Hill ElementaryLos Gatos Union ElemSanta Clara*di&YesYesYesYesNo W7@G ^Q@253&*)))93841689086043707MCrocker MiddleCrocker MiddlelHillsborough City Elem.San Mateo(d{ YesYesYesYesNoc=@ =a@24>%*)+=93741689086043699EWest HillsborouWest Hillsborough (Elem)kHillsborough City Elem.San Mateo(dYesYesYesYesNo_=@``@24?$*)+?93641689086043681ESouth HillsboroSouth Hillsborough (Elem)jHillsborough City Elem.San Mateo(dYesYesYesYesNo dB@\)d@24 g<yg%-*)+/)4515636776009807EMojave ElementaMojave ElementaryMojave UnifiedKern*_YesYesYesNoRNodA ?33@dq@24,,*)+9)4415636776111272MCalifornia CityCalifornia City MiddleMojave UnifiedKernb *YesYesYesNo-No ] $@z@SP@248+*)+55#4343695266047534ELexington ElemeLexington ElementaryLos Gatos Union ElemSanta Clara*dJIYesYesYesYesNo `)@ \ dqe@25@**)+A5#4243695266047567MFisher (RaymondFisher (Raymond J.) MiddleLos Gatos Union ElemSanta Clara*d]LYesYesYesYesNodc )@z@^n@25A)*)+C5#4143695266047542ELouise Van MeteLouise Van Meter ElementaryLos Gatos Union ElemSanta Clara*cjRYesYesYesYesNo Q/"@ff`dj3@25 u\3u;2*)+?+!5034752836100432EAmerican Lakes American Lakes Elementary)Natomas UnifiedSacramento!d\ *YesYesYesYes:Yesa!%@Gd@2581*)+;+!4934752836107981EBannon Creek ElBannon Creek Elementary+Natomas UnifiedSacramento!a7YesYesYesYes4Noc$ @ `a r@2570*)+334847704176050876EMontague ElemenMontague ElementaryMontague ElementarySiskiyou.d_ GYesYesYesYes@NoO-@zd@211/*)+G)4715636776009823EUlrich (Robert Ulrich (Robert P.) ElementaryMojave UnifiedKernY< YesNoNoNo4No ` 3 @Y@24!.*)'')4615636776009799MJoshua MiddleJoshua MiddleMojave UnifiedKern)>YesYesYesNoENo^2@`C@24 G2&7*)''35504615150435602HOroville HighOroville HighAOroville Union High Butte^6; NoNoNoNo' No_@z@b@22.6*)++35404615150434803HLas Plumas HighLas Plumas High@Oroville Union High Butte`nN YesYesYesYes& NoZ@^;@2255*)+5+!5334752836104731EJefferson ElemeJefferson Elementary*Natomas UnifiedSacramento!dQ aYesYesYesYes/Noc   @ a@25)4*)%%+!5234752833430584HNatomas HighNatomas High'Natomas UnifiedSacramento!awF 1YesYesYesYesNoT#@ =SW{@2563*)+=+!5134752836033328MGreene (Leroy FGreene (Leroy F.) Middle(Natomas UnifiedSacramento!av YesNoNoNo#Nob @\)M e @25 aC"a><*)+C16033671816032478EWhite (MargaretWhite (Margaret) Elementary Palo Verde UnifiedRiverside dmC *YesYesYesYes2No`= @\ VoE@25=;*)+G15933671816032460EAppleby (Felix Appleby (Felix J.) Elementary Palo Verde UnifiedRiverside d YesNoNoNoRNo`#+? =Vv@25-:*)++15833671813335759HPalo Verde HighPalo Verde High Palo Verde UnifiedRiverside b# NoNoNoNo'NoY@`Lg@25.9*)''15733671816061782MBlythe MiddleBlythe Middle Palo Verde UnifiedRiverside dTH YesYesYesYes5NoZ%@=pX @25:8*)+;15633671816032494EBrown (Ruth) ElBrown (Ruth) Elementary Palo Verde UnifiedRiverside dgP YesYesYesYes= Noa/ @QW J@25 uP.u6A*)+376501612756002307EWildwood ElemenWildwood ElementaryPiedmont City Unified%Alamedadm#YesYesYesYesNod !7@\ d@253@*)+-76401612756002281EBeach ElementarBeach ElementaryPiedmont City Unified%Alamedad1YesYesYesYesNo`A@=pZ@252?*)++76301612756066492MPiedmont MiddlePiedmont MiddlePiedmont City Unified%AlamedadYesYesYesYesNo`E@\ ^~@254>*)+/76201612756002299EHavens ElementaHavens ElementaryPiedmont City Unified%AlamedadYesYesYesYesNo_%>@\)dH.@25-=*)''76101612750136515HPiedmont HighPiedmont HighPiedmont City Unified%AlamedacYesYesYesYesNo^D@\)\@25 |K0|1F*)+3)#7019649071933175HGanesha Senior Ganesha Senior HighPomona Unified:Los AngelesbNoYesNoNoN7No ^@ ?QU`@aQ36+E*))))#6919649076058507MEmerson MiddleEmerson MiddlePomona Unified:Los Angeles` NoNoNoNoN&No K"! @ =Iyz@aQ36/D*)+1)#6819649071995901HDiamond Ranch HDiamond Ranch HighPomona Unified:Los AngelescNoNoNoNo No Y& @ Q8(@aQ368C*)+1?6716639906010557EPioneer ElementPioneer Elementary)Pioneer Union Elem (Char)(Kingsd#OYesYesYesYesNoc$@ _Z@222B*)))?6616639906110233MPioneer MiddlePioneer Middle*Pioneer Union Elem (Char)(KingsdYesYesYesYesNo d !@ GQW,@22 OC O7K*)+?'7537682966110886EHighland Ranch Highland Ranch Elementary^Poway Unified?San Diego$caZYesYesYesYesNod*$@\)d@Z~Q280J*)+/'7437682966039010EValley ElementaValley ElementaryMPoway Unified?San Diego$d.YesYesYesYes" No c% @d@Z~Q28MI*)+U;7323738666025241EPotter Valley EPotter Valley Elementary/Junior High ]Potter Valley Community>MendocinodYesYesYesYes)No ^   @ `d@214H*)+/)#7219649076113500EPueblo ElementaPueblo ElementaryPomona Unified:Los AngelesdYesYesYesYes]@Yes&?,?ff`='(@aQ36:G*)+;)#7119649076021935EPhiladelphia ElPhiladelphia ElementaryPomona Unified:Los Angelesc!"YesYesYesYesX3Yes[2?`JHp@aQ36 ]D]8P*)+1=8049708966085229EBinkley ElementBinkley Elementary Rincon Valley Union ElemTSonoma0d5SYesYesYesYesNoL& @ @_@:~Q7=O*)+;=7949708966052062ESpring Creek ElSpring Creek ElementaryRincon Valley Union ElemTSonoma0d2DYesYesYesYesNo `(  @ @d@:~Q73N*)+7'7837682966093223MBlack Mountain Black Mountain MiddleRPoway Unified?San Diego$cH2YesYesYesYesNo c)@Gd_@Z~Q283M*)+7'7737682966109326ETurtleback ElemTurtleback Elementary\Poway Unified?San Diego$cHAYesYesYesYes Noc&@33@dG@Z~Q289L*)+A'7637682966070841ELos PenasquitosLos Penasquitos ElementaryNPoway Unified?San Diego$c($YesYesYesYes%No _%@ =d`@Z~Q28 =E=GU*)+G;!8534674396034300EJefferson (ThomJefferson (Thomas) ElementarySacramento City UnifiedlSacramento!d' YesYesYesYes7No" I& @ \ d @qQ72=T*)+3;!8434674396034334EWoodbine ElemenWoodbine ElementarySacramento City UnifiedlSacramento!dD +YesYesYesYesd5No!-& @z@d @qQ72AS*)+C=8349708966052047EWhited (DouglasWhited (Douglas) ElementaryRincon Valley Union ElemTSonoma0c83YesYesYesYesNoN@ =pd0@:~Q77R*)+1=8249708966052054ESequoia ElementSequoia ElementaryRincon Valley Union ElemTSonoma0d|dYesYesYesYesNo W #@d|O@:~Q78Q*)+1=8149708966052070EVillage ElementVillage ElementaryRincon Valley Union ElemTSonoma0bdEYesYesYesYes Nod)@ @d@:~Q7 ZD} Z.Z*)+-39001613090137810HSan Lorenzo HigSan Lorenzo HighSan Lorenzo Unified~Alameda]" NoNoNoNo No (@€Z 5@J~Q145Y*)+138901613096002554EDel Rey ElementDel Rey ElementarySan Lorenzo Unified~AlamedadH 9YesYesYesYesNoE' @€aj@J~Q147X*)+-;!8834674396034110EMaple ElementarMaple ElementarySacramento City UnifiedlSacramento!d'YesNoNoNoc7No!'@d@qQ72DW*)+A;!8734674396034060ESloat (John D.)Sloat (John D.) ElementarySacramento City UnifiedlSacramento!`0YesYesYesYesb3No @@33@d@qQ729V*)+3;!8634674396059307MBacon (Fern) MiBacon (Fern) MiddleSacramento City UnifiedlSacramento!b% NoNoNoNoU.No7@`d9@qQ72 l_5lF_*)+G;!9544698076049852ESan Lorenzo ValSan Lorenzo Valley ElementaryhSan Lorenzo Valley UnifSanta Cruz+cYesYesYesYesNoJ )@ =`f<@:~Q77^*)+1;!9444698076109946ERedwood ElementRedwood ElementaryjSan Lorenzo Valley UnifSanta Cruz+cNoNoNoNoNoT ) @ pd"@:~Q72]*)+339301613096002620EHillside ElemenHillside ElementarySan Lorenzo Unified~AlamedadNoNoNoNo9!No#M@\ I@J~Q148\*)+?39201613096002521EColonial Acres Colonial Acres ElementarySan Lorenzo Unified~Alamedad" NoNoNoNo4!No @paK@J~Q14[*)##39101613090130849HArroyo HighArroyo HighSan Lorenzo Unified~AlamedabNoNoNoNo No G#Y @J~Q14 ?<y?9d*)+7710049709386052237EPine Crest ElemPine Crest Elementary9Sebastopol Union ElemSonoma0c YesYesYesYesNo Z @ =dN@229c*)+979949709386052211MBrook Haven EleBrook Haven Elementary8Sebastopol Union ElemSonoma0d YesYesYesYesNo _ "@ €ds@22?b*)+;;!9844698074436754HSan Lorenzo ValSan Lorenzo Valley HigheSan Lorenzo Valley UnifSanta Cruz+a YesYesYesYes No[ ,@ €\<@:~Q7@a*)+;;!9744698076049845EQuail Hollow ElQuail Hollow ElementarygSan Lorenzo Valley UnifSanta Cruz+cYesYesYesYesNo Z#!@ G dT@:~Q7A`*)+=;!9644698076049837EBoulder Creek EBoulder Creek ElementaryfSan Lorenzo Valley UnifSanta Cruz+dYesYesYesYesNo H &# @ d\5@:~Q7 SF7i*)++?10546701776089650MLoyalton MiddleLoyalton MiddleSierra-Plumas Jt. UnifiedSierra-bYesYesYesYesNo5^(@\ X @232h*)+3110441690624133716HMenlo-Atherton Menlo-Atherton HighSequoia Union HighSan Mateo(`sNoNoNoNoNoQ @ `^/@24*g*)''110341690624138053HWoodside HighWoodside HighSequoia Union HighSan Mateo(``h NoNoNoNoNo V@ff`]@24(f*)%%110241690624136693HSequoia HighSequoia HighSequoia Union HighSan Mateo(\+0 NoNoNoNo$No ]"@^_@24*e*)''110141690624130993HCarlmont HighCarlmont HighSequoia Union HighSan Mateo(_wq NoNoNoNo No Z#@ V+6@24 lL&l7n*)+1511027662256115182MBuena Vista MidBuena Vista Middle Spreckels Union ElemMonterey`YesYesYesYes No^#@ €^6@229m*)+5510912630326008163EPine Hill ElemePine Hill Elementary!South Bay ElementaryHumboldt d/YesYesYesYes:Nod' @33@d@228l*)+5510812630326008171ESouth Bay ElemeSouth Bay Elementary"South Bay ElementaryHumboldt d"YesYesYesYesBNob@`d~@22,k*)''?10746701774634259HLoyalton HighLoyalton HighSierra-Plumas Jt. UnifiedSierra-dNoNoNoNoNo V&@ \}p@231j*)+3?10646701776050629ELoyalton ElemenLoyalton ElementarySierra-Plumas Jt. UnifiedSierra-c YesNoNoNo(No 7' d@23 PD P9s*)++;!11550712906053094MSomerset MiddleSomerset MiddleSylvan Union ElementaryStanislaus1cYesYesYesYesNo [!# @ €^v@AQ9:r*)+3;!11450712906053086ESherwood ElemenSherwood ElementarySylvan Union ElementaryStanislaus1d*YesNoNoNo&No` @(] ;@AQ9Gq*)+E;!11350712906095517ECoffee (StockarCoffee (Stockard) ElementarySylvan Union ElementaryStanislaus1dMYesYesYesYesYesZ  @33@d@AQ9.p*)++711254721655434931HStrathmore HighStrathmore HighStrathmore Union HighTulare5cNoNoNoNo, NoR, @V*@219o*)+5511127662256026694ESpreckels ElemeSpreckels Elementary Spreckels Union ElemMontereya)YesYesYesYes No ^@ @ag@22 ?9~?Fx*)+E9#12019650786023345MShively (Dean LShively (Dean L.) Elementary DValle Lindo ElementaryLos AngelesdZ! 9YesYesYesYesKNo D @`8,)@227w*)+/9#11919650786023337ENew Temple (EleNew Temple (Elem) CValle Lindo ElementaryLos AngelesclD (YesNoNoNoJ!NoQ%!@33@N@229v*)+;;11854722076054423EThree Rivers ElThree Rivers Elementary Three Rivers Union ElemTulare5dNoNoNoNoNo [ $#@ z@R @218u*)+/;!11750712906053110ESylvan ElementaSylvan ElementarySylvan Union ElementaryStanislaus1crNoNoNoNo4 Yes^ 0@ a'@AQ9Dt*)+?;!11650712906111017MUstach (ElizabeUstach (Elizabeth) MiddleSylvan Union ElementaryStanislaus1c"YesYesYesYesYesZ" @G[ @AQ9 .9s.=}*)+1;%12507618126005185EMurwood ElementMurwood ElementaryWalnut Creek Elementary Contra Costac]XYesYesYesYes No `#'@ d@6\(6A|*)+9;%12407618126005169EBuena Vista EleBuena Vista ElementaryWalnut Creek Elementary Contra CostadSBYesYesYesYesNoc "@ z@d?@6\(6>{*)+3;%12307618126005193EParkmead ElemenParkmead ElementaryWalnut Creek Elementary Contra Costade[ YesYesYesYesNo d($@ =`_G@6\(6Cz*)+=;%12207618126005177EIndian Valley EIndian Valley ElementaryWalnut Creek Elementary Contra CostadLEYesYesYesYesNod&@d@6\(6Dy*)+?;%12107618126005243EWalnut Heights Walnut Heights ElementaryWalnut Creek Elementary Contra Costadv YesYesYesYesNo^ -@`d @6\(6 GG6~*)++712647704826050942EWeed ElementaryWeed ElementaryWeed Union ElementarySiskiyou.cg &YesYesYesYes>No!0V & @(dM @21$AD}wqke_YSMGAC4B/A*@%? >=<; :98}7x6s5n4i3d2_1Z0U/P.K-F,A+<*7)2(-'(&#%$#"!  PP--tableapiclus2apiclus2CREATE TABLE apiclus2 ( row_names TEXT, cds TEXT, stype TEXT, name TEXT, sname TEXT, snum REAL, dname TEXT, dnum INTEGER, cname TEXT, cnum INTEGER, flag INTEGER, pcttest INTEGER, api00 INTEGER, api99 INTEGER, target INTEGER, growth INTEGER, sch_wide TEXT, comp_imp TEXT, both TEXT, awards TEXT, meals INTEGER, ell INTEGER, yr_rnd TEXT, mobility INTEGER, acs_k3 INTEGER, acs_46 INTEGER, acs_core INTEGER, pct_resp INTEGER, not_hsg INTEGER, hsg INTEGER, some_col INTEGER, col_grad INTEGER, grad_sch INTEGER, avg_ed REAL, full__1 INTEGER, emer INTEGER, enroll INTEGER, api_stu INTEGER, pw REAL, fpc1 REAL, fpc2 TEXT ) ]] tableapiclus1apiclus1CREATE TABLE apiclus1 ( row_names TEXT, cds TEXT, stype TEXT, name TEXT, sname TEXT, snum REAL, dname TEXT, dnum INTEGER, cname TEXT, cnum INTEGER, flag INTEGER, pcttest INTEGER, api00 INTEGER, api99 INTEGER, target INTEGER, growth INTEGER, sch_wide TEXT, comp_imp TEXT, both TEXT, awards TEXT, meals INTEGER, ell INTEGER, yr_rnd TEXT, mobility INTEGER, acs_k3 INTEGER, acs_46 INTEGER, acs_core INTEGER, pct_resp INTEGER, not_hsg INTEGER, hsg INTEGER, some_col INTEGER, col_grad INTEGER, grad_sch INTEGER, avg_ed REAL, full__1 INTEGER, emer INTEGER, enroll INTEGER, api_stu INTEGER, fpc REAL, pw REAL ) vO+v2))+33501612916002422EMcKinley ElemenMcKinley ElementarySan Leandro Unified}AlamedacEYesYesYesYes+NoU %@d3@@j`5))+A3401612916002414EMadison (James)Madison (James) ElementarySan Leandro Unified}Alamedad)YesNoNoNoNo'\&@€Kn@@j`3))+53301612916002398EJefferson ElemeJefferson ElementarySan Leandro Unified}AlamedaddTYesYesYesYes'No_ (@H&@@j`3))+33201612916002372EGarfield ElemenGarfield ElementarySan Leandro Unified}Alamedad* YesYesYesYes'NoU&@(O @@j`.))+-3101612910137588HSan Leandro HigSan Leandro HighSan Leandro Unified}Alamedaa`2 .YesYesYesYesNoZ@pRN@@j` ~M0~/ ))++31001612916057111MBancroft MiddleBancroft MiddleSan Leandro Unified}AlamedadV BYesYesYesYesNoU  @Lv@@j`0 ))+/3901612916002463EWilson ElementaWilson ElementarySan Leandro Unified}Alamedadq@ 1YesYesYesYes0$No]  @`G@@j`1))+73801612916002455EWashington ElemWashington ElementarySan Leandro Unified}AlamedacI7 YesNoNoNo+!NoF!@ QN@@j`3))+53701612916002448ERoosevelt ElemeRoosevelt ElementarySan Leandro Unified}AlamedacBYesYesYesYes No_"@ \ Z j5@@j`0))+/3601612916002430EMonroe ElementaMonroe ElementarySan Leandro Unified}Alamedad)YesYesYesYes$Noa !@Y7 @@j` KG.))+7+1510751276006985EWashington ElemWashington ElementaryMendota UnifiedFresno XmYesYesYesNobHNo b??`Q@@j`,))+1+1410751276006977MMcCabe Junior HMcCabe Junior HighMendota UnifiedFresno cNYesYesYesYesbINobJ?G @@@j`, ))+/+1310751276006969EMcCabe ElementaMcCabe ElementaryMendota UnifiedFresno `/YesYesYesYes`FNo _9? =Z>@@j`# ))%%+1210751271030493HMendota HighMendota HighMendota UnifiedFresno ^YesYesYesYesT4Nob5B ?z6#f@@j`2 ))+131101612916066518MMuir (John) MidMuir (John) MiddleSan Leandro Unified}Alamedack 2YesYesYesYes%No^ #@G U@@j` kS*k<))+5;#2019644856013007EEvergreen ElemeEvergreen ElementaryEast Whittier City ElemLos Angelesc&VYesYesYesYesTCNo[(- ??w)@@j`8))+5;#1919644856012991MEast Whittier MEast Whittier MiddleEast Whittier City ElemLos AngelesbPY NoNoNoNo#No 7 @€L!@@j`8))+-;#1819644856012975ECeres ElementarCeres ElementaryEast Whittier City ElemLos Angeles`YesYesYesYes=&No`( @Q=$f&@@j`0))+331715638346010235EVineland ElemenVineland ElementaryVineland Elementary KerncZYesYesYesYesa5NoaB ? @>&4@@j`*))+/31615638346010227MSunset ElementaSunset ElementaryVineland Elementary KerndNoNoNoNoa*No ^??€Qt#@@j` \K\;))+3;#2519644856013072EMulberry ElemenMulberry ElementaryEast Whittier City ElemLos Angelesct5 ?YesYesYesYes2No c #$@61@@j`9))+/;#2419644856013049ELaurel ElementaLaurel ElementaryEast Whittier City ElemLos Angelesd` ,YesYesYesYes2Nod) @33@JT@@j`<))+5;#2319644856013031ELa Colima ElemeLa Colima ElementaryEast Whittier City ElemLos Angelesdt0 DYesYesYesYes5Nob ( @GOr6@@j`3))++;#2219644856013023MHillview MiddleHillview MiddleEast Whittier City ElemLos AngelescVR NoNoNoNoNo] %@`a#@@j`2))));#2119644856013015MGranada MiddleGranada MiddleEast Whittier City ElemLos Angelesd YesNoNoNo No \% @ OM@@j` CEC?))+;;#3019644856089148ELeffingwell EleLeffingwell Elementary. East Whittier City ElemLos AngelesdYesYesYesYesNo], @ A 8@@j`;))+;;#2919644856013114EScott Avenue ElScott Avenue ElementaryEast Whittier City ElemLos AngelescNoNoNoNo No c- @€T p@@j`?))+;;#2819644856013106EOrchard Dale ElOrchard Dale ElementaryEast Whittier City ElemLos Angelesd@YesYesYesYesNob) @(I@@j`=))+7;#2719644856013098EOcean View ElemOcean View ElementaryEast Whittier City ElemLos Angelesd &YesYesYesYes No_ $ @ K@@j`8))+;;#2619644856013080EMurphy Ranch ElMurphy Ranch ElementaryEast Whittier City ElemLos Angelesb@ 5YesYesYesYesNoR$#_@@j` sE{$s.#))+5+3523656236025290EBrookside ElemeBrookside Elementary [Willits Unified/Mendocinod4! YesNoNoNo7No P #@z@^@@j`/"))+7+3423656236025282MBaechtel Grove Baechtel Grove Middle ZWillits Unified/MendocinoawNoNoNoNo.No[ "@`d@@j`"!))%%+3323656232335487HWillits HighWillits High YWillits Unified/Mendocino]NoNoNoNoNo ^ @Ga^@@j`G ))+O7#3219647586020101ERancho Santa GeRancho Santa Gertrudes Elementary.Los Nietos ElementaryLos Angelesd+;YesYesYesYesNNo D% @zLC(@@j`8))+17#3119647586020085EAeolian ElementAeolian Elementary-Los Nietos ElementaryLos Angelesc15YesYesYesYesW'No F@@+h:@@j` KJ())%%'4024753666115216MDelhi MiddleDelhi Middle Delhi UnifiedMercedd#? NoNoNoNoK%No a6?€^W0@@j`-'))+3'3924753666025415ESchendel ElemenSchendel Elementary Delhi UnifiedMercedb8YesYesYesYesQ-YesZ,@z^3@@j`.&))+7'3824753666025407EEl Capitan ElemEl Capitan Elementary Delhi UnifiedMerceddDYesYesYesYesU&No]-? T @@j`%))!!'3724753662430114HDelhi HighDelhi High Delhi UnifiedMercedd))+1)6232669696031454EPioneer ElementPioneer Elementary Plumas Unified8PlumasdNoNoNoNo#No V1@33@d@@j`-=))+7)6132669696031421EGreenville ElemGreenville Elementary Plumas Unified8PlumasdY =YesYesYesYesDNo M ( @duj@@j` ZIZ1F))+597037680236037865EHalecrest ElemeHalecrest ElementaryChula Vista ElementarySan Diego$d%YesYesYesYesNoaa@@j`5E))+=96937680236037857ERogers (Greg) ERogers (Greg) ElementaryChula Vista ElementarySan Diego$ddYesYesYesYes No\/@@j`6D))+?96837680236037840ERohr (Fred H.) Rohr (Fred H.) ElementaryChula Vista ElementarySan Diego$dxYesYesYesYesA,Node@@j`GC))+W96737680236037832EAllen (Ella B.)Allen (Ella B.)/Daly (Ann) ElementaryChula Vista ElementarySan Diego$cYesNoNoNoNo (! @d5 @@j`4B))+996637680236037824ECastle Park EleCastle Park ElementaryChula Vista ElementarySan Diego$cna YesYesYesYesA Nod]r;@@j` YKY@@j`:c))+E99937680236115646ECasillas (JosepCasillas (Joseph) ElementaryChula Vista ElementarySan Diego$d'YesYesYesYesNo1d_ K@@j`2b))+999837680236113021EOlympicview EleOlympicview ElementaryChula Vista ElementarySan Diego$d<&YesYesYesYes No d+@@j`5a))+C99737680236111322EDiscovery ElemeDiscovery Elementary (Char)Chula Vista ElementarySan Diego$d&YesNoNoNo No_} @@j`9`))+E99637680236109771EClear View ElemClear View Elementary (Char)Chula Vista ElementarySan Diego$c  YesYesYesYesNode@@j` S91i))+-/10537735696038855ELibby ElementarLibby Elementary7Oceanside UnifiedSan Diego$dFFYesYesYesYesK'No >, @QS@@@j`2h))+//10437735696038848ELaurel ElementaLaurel Elementary6Oceanside UnifiedSan Diego$dIxYesYesYesYesS@No R6?(^@@j`-g))+-/10337735696038830MJefferson MiddlJefferson Middle5Oceanside UnifiedSan Diego$df_ NoNoNoNo7No*T"@(`@@j`2f))+//10237735696038822EDitmar ElementaDitmar Elementary4Oceanside UnifiedSan Diego$cYYesYesYesYesZHNo[B ?G ^<@@j`*e))))/10137735693739018HEl Camino HighEl Camino High3Oceanside UnifiedSan Diego$b YesNoNoNo No \  @Q^?@@j` tO+t4n))+;/11037735696038905ESan Luis Rey ElSan Luis Rey ElementaryOceanside UnifiedSan Diego$dYesYesYesYes0No G @`a @@j`;o))+A/11137735696038913ESanta MargaritaSanta Margarita Elementary=Oceanside UnifiedSan Diego$d}lYesYesYesYes4NobI@d"@@j` UJU7x))+9/12037735696115299EStuart Mesa EleStuart Mesa ElementaryFOceanside UnifiedSan Diego$cMYesYesYesYes3Nob()@(as@@j`@w))+K/11937735696111777MKing (Martin LuKing (Martin Luther Jr.) MiddleEOceanside UnifiedSan Diego$cg )YesYesYesYes-No S   @Qb%F@@j`3v))+7/11837735696109995EIvey Ranch ElemIvey Ranch ElementaryDOceanside UnifiedSan Diego$dYesNoNoNoNoN@Qb@@j`?u))+I/11737735696108211EMcAuliffe (ChriMcAuliffe (Christa) ElementaryCOceanside UnifiedSan Diego$d#YesYesYesYes*No U # @ =bT@@j`3t))+1/11637735696088991EDel Rio ElementDel Rio ElementaryBOceanside UnifiedSan Diego$dQ .YesYesYesYes:%NoX@de@@j` `H`8}))+/7#12539686766042519EAugust ElementaAugust ElementaryStockton City UnifiedSan Joaquin&`KEYesYesYesYesZ"NobQ?\)X}A@@j`7|))+-7#12439686766042501EAdams ElementarAdams ElementaryStockton City UnifiedSan Joaquin&cP, $YesYesYesYesP!No<@\@@j`4{))+/7#12339686763937406HStagg Senior HiStagg Senior HighStockton City UnifiedSan Joaquin&aF' YesNoNoNo$No ^"@GY :@@j`9z))+57#12239686763932654HFranklin SeniorFranklin Senior HighStockton City UnifiedSan Joaquin&Y#YesYesYesNo*No I$@ @W @@j`5y))+17#12139686763932100HEdison Senior HEdison Senior HighStockton City UnifiedSan Joaquin&_YesNoNoNo(NoB@€Y t@@j` TAT6))+37#13039686766042576EFillmore ElemenFillmore ElementaryStockton City UnifiedSan Joaquin&c NoNoNoNo[No/ @QV _@@j`6))++7#12939686766042568EKing ElementaryKing ElementaryStockton City UnifiedSan Joaquin&b6 YesYesYesYesd1No].?\ T @@j`6))+17#12839686766042550EElmwood ElementElmwood ElementaryStockton City UnifiedSan Joaquin&cYesNoNoNoNNo C ?]Z @@j`<))+57#12739686766042543EEl Dorado ElemeEl Dorado ElementaryStockton City UnifiedSan Joaquin&dSYesYesYesYesd#Yes!)  @z@HX@@j`<~))+57#12639686766042535ECleveland ElemeCleveland ElementaryStockton City UnifiedSan Joaquin&a)?YesYesYesYesd7Yes`>?Up#@@j` PJ P5))+/7#13539686766042634EHoover ElementaHoover ElementaryStockton City UnifiedSan Joaquin&c' YesNoNoNoDNo./?ff`J@@j`:))+37#13439686766042626EHazelton ElemenHazelton ElementaryStockton City UnifiedSan Joaquin&bW% 2YesYesYesYesP$No.@z@WH@@j`D))+G7#13339686766042618EHarrison (WilliHarrison (William) ElementaryStockton City UnifiedSan Joaquin&dbZYesYesYesYesT"No'@(R K@@j`7))+17#13239686766042600EGrunsky ElementGrunsky ElementaryStockton City UnifiedSan Joaquin&d//YesNoNoNod%Yes&$ @JF@@j`2))+37#13139686766042584EGarfield ElemenGarfield ElementaryStockton City UnifiedSan Joaquin&cVYesYesYesYesd'NoH@@j` XCX< ))+57#14039686766042717EMontezuma ElemeMontezuma Elementary Stockton City UnifiedSan Joaquin&c5YesYesYesYesZ.Yes! @\ SK@@j`4 ))+/7#13939686766042709EMonroe ElementaMonroe Elementary Stockton City UnifiedSan Joaquin&dNoNoNoNoc*No @z4@@j`6 ))+37#13839686766042691EMcKinley ElemenMcKinley Elementary Stockton City UnifiedSan Joaquin&cNoNoNoNoY+No! ( #@I@@j`5 ))+17#13739686766042683EMadison ElementMadison ElementaryStockton City UnifiedSan Joaquin&`1& NoNoNoNoGNo : @X1@@j`9))+17#13639686766042667EKennedy ElementKennedy ElementaryStockton City UnifiedSan Joaquin&b*)YesYesYesYesTNo=K ?S @@j` 4?4?))+;7#14539686766042782ETyler Skills ElTyler Skills ElementaryStockton City UnifiedSan Joaquin&cqB /YesYesYesYes;YesJ, @G]/@@j`G))+M7#14439686766042766ETaft (William HTaft (William Howard) ElementaryStockton City UnifiedSan Joaquin&d/YesYesYesYesSNoD@€P `;@@j`;))+57#14339686766042758ERoosevelt ElemeRoosevelt ElementaryStockton City UnifiedSan Joaquin&dYesYesYesYesZNo (@ @J@@j`:))+17#14239686766042741EPulliam ElementPulliam Elementary Stockton City UnifiedSan Joaquin&bsF -YesYesYesYesV#Yes)@=pP d'@@j`= ))+97#14139686766042725ENightingale EleNightingale Elementary Stockton City UnifiedSan Joaquin&b,YesYesYesYesVNo22@P,@@j` VDV4))++7#15039686766059935MMarshall MiddleMarshall MiddleStockton City UnifiedSan Joaquin&]YesYesYesNo:No 7@V D@@j`3))))7#14939686766059927MFremont MiddleFremont MiddleStockton City UnifiedSan Joaquin&a"YesYesYesYesANo 5 @\ Vq@@j`>))+C7#14839686766042824EWilson (WoodrowWilson (Woodrow) ElementaryStockton City UnifiedSan Joaquin&cNoNoNoNoPNo%=@Z@@j`9))+17#14739686766042808EVictory ElementVictory ElementaryStockton City UnifiedSan Joaquin&c YesYesYesYesLNo!c)* ?`\.@@j`8))+57#14639686766042790EVan Buren ElemeVan Buren ElementaryStockton City UnifiedSan Joaquin&cYesNoNoNod1No ( @=pPkH@@j` 1I1C))+I7#15539686766098677EKohl (Herbert) Kohl (Herbert) Open ElementaryStockton City UnifiedSan Joaquin&de 'YesYesYesYes% NoE$*@ \)dvv@@j`C))+C7#15439686766098651EStockton (CommoStockton (Commodore) SkillsStockton City UnifiedSan Joaquin&cYesYesYesYesNo5@`^2@@j`M))+]7#15339686766097794EValenzuela (RicValenzuela (Richard) Spanish Immersion MStockton City UnifiedSan Joaquin&dYesYesYesYes.No=,@ Rww@@j`5))++7#15239686766065874MHamilton MiddleHamilton MiddleStockton City UnifiedSan Joaquin&`YesYesYesYes5No @!@33@U@@@j`3))))7#15139686766062087MWebster MiddleWebster MiddleStockton City UnifiedSan Joaquin&d!YesYesYesYes:NoK@M@@j` c?c. ))+55#16043693776046387ENorthwood ElemeNorthwood Elementary6Berryessa Union Elem=Santa Clara*d(YesNoNoNo$No Q @@j`5))+-5#15943693776046379ENoble ElementarNoble Elementary5Berryessa Union Elem=Santa Clara*dYesYesYesYesNo 7@ff`]yz@@j`0))+35#15843693776046361ELaneview ElemenLaneview Elementary4Berryessa Union Elem=Santa Clara*b YesYesYesYes##No ZsY@@j`9))+=7#15739686766115422ERio Calaveras ERio Calaveras ElementaryStockton City UnifiedSan Joaquin&c:YesYesYesYes:Yes0F@@j`=))+I7#15639686766104665EWashington (GeoWashington (George) ElementaryStockton City UnifiedSan Joaquin&d"^YesYesYesYesd'NoG@@j` tS2t:%))+75#16543693776089288ECherrywood ElemCherrywood Elementary;Berryessa Union Elem=Santa Clara*d&YesYesYesYes"No !!@=pX @@j`+$))))5#16443693776068928MMorrill MiddleMorrill Middle:Berryessa Union Elem=Santa Clara*c*YesYesYesYesNo dX h@@j`5#))+/5#16343693776067177ERuskin ElementaRuskin Elementary9Berryessa Union Elem=Santa Clara*d;,YesYesYesYes No@ Q@@j`5"))+-5#16243693776046403EToyon ElementarToyon Elementary8Berryessa Union Elem=Santa Clara*dYesYesYesYesNo  &*@ QU P9@@j`)!))++5#16143693776046395MPiedmont MiddlePiedmont Middle7Berryessa Union Elem=Santa Clara*dNoNoNoNoNo ((])@@j` XJX:*))+75#17043693776095350ESummerdale ElemSummerdale Elementary@Berryessa Union Elem=Santa Clara*c{AYesYesYesYes7No-@G ] f@@j`<)))+;5#16943693776095343EMajestic Way ElMajestic Way Elementary?Berryessa Union Elem=Santa Clara*dYesYesYesYesNo(  @RX@@j`9())+55#16843693776095335EBrooktree ElemeBrooktree Elementary>Berryessa Union Elem=Santa Clara*bYesYesYesYes8No !!@T @@j`3'))+75#16743693776093041EVinci Park ElemVinci Park Elementary=Berryessa Union Elem=Santa Clara*dYesYesYesYes)No   2a @@j`2&))+/5#16643693776093033MSierramont MiddSierramont MiddleY4/))+1-#17543733876047609ECurtner ElementCurtner ElementaryBMilpitas UnifiedSanta Clara*dJ4YesYesYesYesNo Y )@ z@a@@j`8.))+G-#17443733876047591ESpangler (AnthoSpangler (Anthony) ElementaryAMilpitas UnifiedSanta Clara*ci aYesYesYesYesNo !N^q@@j`=-))+C-#17343733876047583ERose (AlexanderRose (Alexander) Elementary@Milpitas UnifiedSanta Clara*d YesYesYesYes.'No _@€T @@j`,,))''-#17243733874334470HMilpitas HighMilpitas High?Milpitas UnifiedSanta Clara*a#YesYesYesYesNo^ ' @ =pY c\@@j`>+))+?3#17143695426047575ELuther Burbank Luther Burbank ElementaryLuther Burbank ElemSanta Clara*d'1YesYesYesYesL&NoY' @33@40@@j` ABA=4))+C-#18043733876047674ERandall (RobertRandall (Robert) ElementaryGMilpitas UnifiedSanta Clara*dk dYesYesYesYes/0No #c%@`TL@@j`93))+C-#17943733876047666MRancho MilpitasRancho Milpitas Junior HighFMilpitas UnifiedSanta Clara*cYesNoNoNo!No b  @ff`QS@@j`?2))+G-#17843733876047641EPomeroy (MarshaPomeroy (Marshall) ElementaryEMilpitas UnifiedSanta Clara*cD3YesYesYesYesNo Z@ Q`v@@j`<1))+A-#17743733876047633EWeller (Joseph)Weller (Joseph) ElementaryDMilpitas UnifiedSanta Clara*cYesYesYesYes)No  T $@V G@@j`:0))+?-#17643733876047625ESinnott (John) Sinnott (John) ElementaryCMilpitas UnifiedSanta Clara*c8!YesYesYesYesNo \ $@ Q^@@j` >|;7))+?-#18343733876067219EZanker (Pearl) Zanker (Pearl) ElementaryJMilpitas UnifiedSanta Clara*d 0YesYesYesYesNo  [" @ I.@@j`>6))+E-#18243733876047690EBurnett (WilliaBurnett (William) ElementaryIMilpitas UnifiedSanta Clara*dIYesYesYesYesNo X! @GXr@@j`>5))+E-#18143733876047682MRussell (ThomasRussell (Thomas) Junior HighHMilpitas UnifiedSanta Clara*c1>YesYesYesYes No [&@ G R@@j`'/n}wqke_YSMGA;5/mCl>k9j4i/h*g%f edcb a`_}^x]s\n[iZdY_XZWUVPUKTFSAR<Q7P2O-N(M#LKJIH G ]]SO##UtableclusweightsclusweightsoCREATE TABLE clusweights ( row_names TEXT, snum REAL, wt1 REAL, wt2 REAL, wt3 REAL, wt4 REAL, wt5 REAL, wt6 REAL, wt7 REAL, wt8 REAL, wt9 REAL, wt10 REAL, wt11 REAL, wt12 REAL, wt13 REAL, wt14 REAL, wt15 REAL ) tableapistratapistratECREATE TABLE apistrat ( row_names TEXT, cds TEXT, stype TEXT, name TEXT, sname TEXT, snum REAL, dname TEXT, dnum INTEGER, cname TEXT, cnum INTEGER, flag INTEGER, pcttest INTEGER, api00 INTEGER, api99 INTEGER, target INTEGER, growth INTEGER, sch_wide TEXT, comp_imp TEXT, both TEXT, awards TEXT, meals INTEGER, ell INTEGER, yr_rnd TEXT, mobility INTEGER, acs_k3 INTEGER, acs_46 INTEGER, acs_core INTEGER, pct_resp INTEGER, not_hsg INTEGER, hsg INTEGER, some_col INTEGER, col_grad INTEGER, grad_sch INTEGER, avg_ed REAL, full__1 INTEGER, emer INTEGER, enroll INTEGER, api_stu INTEGER, pw REAL, fpc REAL ) V6{ V4))+=-556739406115430EWalnut Canyon EWalnut Canyon ElementaryMoorpark UnifiedVentura7d=YesYesYesYesNo@ \)Zb?@F@E9))+93#419647336019285ESoto Street EleSoto Street ElementaryLos Angeles UnifiedLos Angelesd,YesYesYesYesS?No ?`@* @F@E/))+3-#319648816021505EAltadena ElemenAltadena ElementaryPasadena UnifiedLos Angelesc NoNoNoNo@No@QQ@F@E8))+53#219647336016018EBelvedere ElemeBelvedere ElementaryVLos Angeles UnifiedLos Angelesd(YesYesYesYesbMYes?Q9(Iw@F@EG))+]3#119647336097927EOpen Magnet: CeOpen Magnet: Center for Individual (CharLos Angeles UnifiedLos AngelescH0YesNoNoNo!No @ \ d@F@E aJa8 ))+991037680236038020EValle Lindo EleValle Lindo ElementaryChula Vista ElementarySan Diego$d YesNoNoNo/No@\ `}B@F@E? ))+E5937683956098487ENicoloff (GeorgNicoloff (George) ElementarySouth Bay Union ElemSan Diego$dPTYesYesYesYesK:Yes @\)[@F@E8))+K7815633216109078EThorner (Dr. JuThorner (Dr. Juliet) ElementaryBakersfield City Elem)KernbNoNoNoNo-No@]G@F@E.))+33756726036055800ETownship ElemenTownship ElementarySimi Valley UnifiedVentura7c NoNoNoNo No @ ff``k@F@E3))+53656726036084917EAtherwood ElemeAtherwood ElementarySimi Valley UnifiedVentura7d% YesYesYesYesNo @ `_J;@F@E QT,))+//1533752423330552HRancho Verde HiRancho Verde HighVal Verde UnifiedRiverside _  NoNoNoNo#NoF@ @Pf@.33@!))%%+1401612596057020MFrick MiddleFrick MiddleOakland UnifiedAlameda_NoNoNoNo6No, 2 !@Q7@4\)" )))))1310621661035831HRoosevelt HighRoosevelt HighsFresno UnifiedFresno ]NoNoNoNoB+NoC1 @z]u:@.33@1 ))+7/1233752426111447MRivera (Tomas) Rivera (Tomas) MiddleVal Verde UnifiedRiverside cNoNoNoNo< No W" @`A%/@4\), ))))))1136678506059448MFrisbie MiddleFrisbie Middle Rialto UnifiedNSan Bernardino#cYesNoNoNoENo @T  @4\) d@$d=))+==2010623316007009EOrange Center EOrange Center ElementaryOrange Center ElementaryFresno d8YesYesYesYes]'Nod< ?`Z@F@E*))+?)1930736506071179MRancho San JoaqRancho San Joaquin Middle Irvine UnifiedNo ]7?Q[1@4\).?))+/+#6319734376012231EBursch ElementaBursch Elementary |Compton UnifiedLos AngelesX5'YesNoNoNoc#No*( @H+@F@E@>))+;;#6219734456014179EFairgrove AcadeFairgrove Academy (K-8) Hacienda la Puente UnifLos AngelesdC ?YesYesYesYesENo Z !@Wn@F@E6=))+/5#6143696906049159EVargas ElementaVargas Elementary)Sunnyvale ElementarySanta Clara*d%YesYesYesYes*%Noc @aC@F@E jNj2F))+/3#7019647336061535MMt. Vernon MiddMt. Vernon Middle Los Angeles UnifiedLos AngelesbNoNoNoNoO%Yes7 @@@4\)6E))+31%6907617546003966EBancroft ElemenBancroft ElementaryMt. Diablo UnifiedContra Costad}M0YesYesYesYesNoT'+@G]~8@F@E8D))+51%6807617546004105EHighlands ElemeHighlands ElementaryMt. Diablo UnifiedContra Costab>YesYesYesYes No/'@ =a@F@E8C))+?-!6734674476034672ELegette (Earl) Legette (Earl) ElementarySan Juan Unified|Sacramento!c_PYesYesYesYesNo.Z '@dc@F@E/B))+/56615737426009633EFaller ElementaFaller Elementary Sierra Sands UnifiedKernd%YesYesYesYes-No&a !@_V%@F@E tM4t=K))+;=7527660926026249EOlson (Ione) ElOlson (Ione) Elementary Monterey Peninsula Unif.Montereyd0YesYesYesYes No >" - @\ d@F@E*J))+/57410622656006829MNavelencia MiddNavelencia MiddleKings Canyon UnifiedSFresno d[ AYesYesYesYes3No dHS@4\)/I))+//7330666706111298EWalker ElementaWalker Elementary RSanta Ana UnifiedOranged'YesYesYesYes\PYes>8 ?GP[@F@E7H))+39#7243694506047245EMcKinley ElemenMcKinley Elementary}Franklin-McKinley ElemSanta Clara*cNoNoNoNoSFYes38?(Qp@F@E0G))+-5#7119651366111926MLa Mesa Jr. HigLa Mesa Jr. High qWilliam S. Hart High-Los AngelescNoNoNoNoNo U )@ \ \ A5@4\) pK%p2P))+=/8015635606009708EMyrtle Avenue EMyrtle Avenue ElementaryLamont ElementarylKernaCYesYesYesYes`&Noc@?`8,@F@E9O))+;97954722316054472EKohn (Frank) ElKohn (Frank) ElementaryTulare City ElementaryTulare5d3YesYesYesYes3No_, @GY @F@E/N))+//7830666706030241EEdison ElementaEdison Elementary 2Santa Ana UnifiedOranged=YesYesYesYes_IYes>3?P7@F@E5M))+I+7701611926066476MKing (Martin LuKing (Martin Luther Jr) MiddlerHayward Unified&AlamedadE3 YesNoNoNo4!No6@\ ^ j!@4\)2L))+5;7624753176025431EDos Palos ElemeDos Palos Elementary Dos Palos Oro Loma UnifMercedYD* YesNoNoNoJNo ` @ff`T |@F@E oK(o6U))+1=8549708966052021EMadrone ElementMadrone ElementaryRincon Valley Union ElemTSonoma0dD&YesYesYesYesNo`#@`dN @F@E1T))+9%#8439685856111983EMuir (John) EleMuir (John) ElementaryLodi UnifiedSan Joaquin&dYesNoNoNo Yes[ #@ pab@F@E4S))+5;8315633626096986EStockdale ElemeStockdale ElementaryPanama Buena Vista ElemKerncfTYesYesYesYesNod" @ p`Q@F@E5R))+798216638916010367EMark Twain ElemMark Twain ElementaryCorcoran Joint UnifiedKingsb3YesYesYesYesJ No]# @z@_@F@E2Q))+198112626871235209HMcKinleyville HMcKinleyville HighNorthern Humboldt HighHumboldt aYesNoNoNoNo_! @ d/@.33@ i0x#i7Z))+K)9010621666111256ELeavenworth (AnLeavenworth (Ann B.) ElementaryFresno UnifiedFresno cYesNoNoNod>Yes@1 ?pd U@F@E*Y))%%98930736353030061HEl Toro HighEl Toro High kSaddleback Valley UnifmOrangecYesYesYesYesNo[ -@ \)c@.33@%X)))))8821654176058614MSinaloa MiddleSinaloa Middle )Novato UnifiedMarincnjYesYesYesYesNob*@d@4\)5W))+1;!8744698076109946ERedwood ElementRedwood ElementaryjSan Lorenzo Valley UnifSanta Cruz+cNoNoNoNoNoT ) @ pd"@F@EMV))+]98637683383730371HSan Diego SchooSan Diego School of Creative & PerforminpSan Diego City UnifiedvSan Diego$dYesYesYesYes2NoI (@ z@c[K@.33@ Z@Z7_))+33#9519650946023493EMerlinda ElemenMerlinda Elementary JWest Covina UnifiedLos AngelescS 8YesYesYesYes8Noc% @QZ ~0@F@E6^))+11%9407617546004220MPine Hollow MidPine Hollow MiddleMt. Diablo UnifiedContra Costac9YesYesYesYesNo^" @ z@V=@4\)2]))+//9333672156032726EMonroe ElementaMonroe Elementary Riverside Unified]Riverside cx8 @YesYesYesYes3YesU! @\ [+@F@E;\))+79!9234674136033658EClarksburg ElemClarksburg ElementaryRiver Delta Joint UnifZSacramento!d^6 (YesYesYesYes0No&& @p\@F@E=[))+?3#9119647336015820EAnnalee Avenue Annalee Avenue ElementaryFLos Angeles UnifiedLos AngelesdL 2YesYesYesYes=No $0@ I@F@E `P`8d))+A+#10039685936108237EElliott (Brock)Elliott (Brock) ElementaryManteca UnifiedSan Joaquin&dNoNoNoNoNod( @]k@F@E4c))+?99915638426010268MJefferson (ThomJefferson (Thomas) MiddleWasco Union ElementaryKerna NoNoNoNoM NoM("?\)Y @4\)5b))+93#9819647331932888HDowntown BusineDowntown Business HighLos Angeles UnifiedLos AngelesbQS NoNoNoNoHNo H$@G Q}R@.33@Ca))+A5)9736676866035653ELewis (Mary B.)Lewis (Mary B.) ElementaryColton Joint UnifiedSan Bernardino#c)6YesYesYesYesP!YesY#/ ?=pC;@F@E-`))+179603739810330753HAmador County HAmador County HighAmador County UnifiedAmadoraNoNoNoNo No`$! @ =br@.33@ VBV7i))+1+)10536677106111173EHemlock ElementHemlock ElementaryFontana UnifiedSan Bernardino#cL 7YesYesYesYes6Yes$@ N@F@E6h))''9)10436678196036420MVernon MiddleVernon MiddleOntario-Montclair ElemSan Bernardino#`(YesYesYesYes@.Noa%# @ff`8(@4\)4g))+-5)10336676863631322HBloomington HigBloomington HighColton Joint UnifiedSan Bernardino#d NoNoNoNo'No M@\)O@.33@?f))+C9#10219648406021125MBenton (ReginalBenton (Reginald M.) MiddleNorwalk-La Mirada UnifLos Angelesd YesNoNoNo No&Y % @QL @4\);e))+1;%10107618126005185EMurwood ElementMurwood ElementaryWalnut Creek Elementary Contra Costac]XYesYesYesYes No `#'@ d@F@E ~N5~4n))+5511049708476051924EOld Adobe ElemeOld Adobe Elementary Old Adobe Union ElemSonoma0b3!YesYesYesYes No d  @ d@F@E;m))+5;!10934674396059356MBrannan (Sam) MBrannan (Sam) MiddleSacramento City UnifiedlSacramento!dy"YesYesYesYes-NoO  @d}@4\)-l))+5+10801612596002216EThornhill ElemeThornhill ElementaryOakland UnifiedAlameda`tcYesNoNoNoNo^ 7@ =d@F@E(k))))510721654822133692HTamalpais HighTamalpais High 9Tamalpais Union HighMarina1NoYesNoNoNo8 &-@]yl@.33@/j))+5)10654755316107650ERoosevelt ElemeRoosevelt ElementaryODinuba UnifiedTulare5cUFYesYesYesYesLNoU3@ `R@F@E SE*s))##911537682056038640MPalm MiddlePalm Middle6Lemon Grove ElementaryxSan Diego$dm YesNoNoNo/Noc '@\)ae@4\)'r))++)11410621666088546EKing ElementaryKing ElementaryFresno UnifiedFresno b YesNoNoNod(No!X+#?G ^ E @F@E4q))+-911355724135536750HSummerville HigSummerville HighXSummerville Union HighTuolumne6awRYesYesYesYesNo^(@ `dL>@.33@*p))++-11227754736026090MFairview MiddleFairview Middle Gonzales UnifiedMontereydNoNoNoNoH2NoL% @Z{@4\)*o))+/111130664643036001HSan Clemente HiSan Clemente High >Capistrano UnifiedlOrangeZNoNoNoNo NoX)@ ``@.33@ `?`,x))+-/12015739086106306MMcFarland MiddlMcFarland MiddleMcFarland UnifiedKernc7YesYesYesYesU!No70 ? I*@4\)Aw))+5=)11936678766068720MShandin Hills MShandin Hills MiddleLSan Bernardino City UnifsSan Bernardino#c't))+7=%11607618040736504HSan Ramon ValleSan Ramon Valley HighSan Ramon Valley UnifiedContra Costab0,YesYesYesYesNoE ,)@ @]@@.33@ {G/{1}))+-512552715226111629MEvergreen MiddlEvergreen MiddleEvergreen Union ElemTehama3a4YesYesYesYes4No W(@€df@4\)3|))+?112457726946056329ENorman (Alyce) Norman (Alyce) Elementary Washington UnifiedYolo8cTG YesNoNoNoS Nob! @GdL@@F@E:{))+9=12345699146050140EMeadow Lane EleMeadow Lane ElementaryCascade Union ElementaryrShasta,dH }YesYesYesYesMNo[) @€d$@F@E"z))))/12214632891434901HLone Pine HighLone Pine High`Lone Pine UnifiedInyo cNoNoNoNoNoa @(d wj@.33@6y))+5;12131668296111702ERidgeview ElemeRidgeview Elementary Eureka Union ElementaryPlacerc}zYesYesYesYesNod+)@ d@F@E nFn*))''513033670333330701HSantiago HighSantiago High $Corona-Norco UnifiedRiverside cNoNoNoNoNo7\$ @ ff`T-@.33@2))+7)12910739996007371ESun Empire ElemSun Empire ElementaryKerman UnifiedMFresno d YesYesYesYesd2Yes_/?\)RK@F@E6))+/3#12819647336017529EHaynes ElementaHaynes ElementaryLos Angeles UnifiedLos Angelesb}SYesYesYesYes'NoU # @ J @F@E7))+33#12743693936046601ELynhaven ElemenLynhaven ElementaryLCampbell Union ElemiSanta Clara*bYesYesYesYes&No_# @\ XC@F@E7~))+1912627738256026413EElkhorn ElementElkhorn Elementary North Monterey Co UnifMontereyda UYesYesYesYes*No=" @(R S-@F@E qA'q2))+9/13515636936108575EOlive Drive EleOlive Drive ElementaryNorris ElementaryKerncD@YesYesYesYes No_% @ d0@F@E2))+/1#13419647256015168EBryant ElementaBryant ElementaryLong Beach UnifiedLos AngelescwYesNoNoNoN!No P% @(U@F@E-))''9!13334673633433265HFoothill HighFoothill High^Grant Joint Union HighSacramento!abzNoNoNoNo" NoR!!@[s@.33@/))+1+#13219734376057590MWillowbrook MidWillowbrook Middle Compton UnifiedLos AngelesdNoNoNoNocNo"#1@(>` @4\);))+?1'13142692866060032MGoleta Valley JGoleta Valley Junior High*Santa Barbara HighSanta Barbara)dYesNoNoNoNo((@ff`\"@4\) [</ ))'';14024753176025423MBryant MiddleBryant Middle Dos Palos Oro Loma UnifMercedd'PYesYesYesYesB No R$@€F%@4\)2 ))+5)13933669776031553EMyra Linn ElemeMyra Linn Elementary Alvord UnifiedRiverside aB +YesYesYesYesE)Yes&`"$@\ Qx@F@E( ))!!9!13834674135731708HDelta HighDelta HighRiver Delta Joint UnifZSacramento!dj: 0YesNoNoNoNo:@G^@.33@9 ))+53#13719647336016877EEl Sereno ElemeEl Sereno ElementaryLos Angeles UnifiedLos Angeles_-YesYesYesYesbBNo 5@=pN ]@F@E!))''+#13639685696041925MSierra MiddleSierra MiddleLincoln Unified~San Joaquin&d,YesNoNoNo$No c " [ @4\) pK%p1))+--#14543696664338950HWillow Glen HigWillow Glen HighSan Jose Unified{Santa Clara*bbP YesYesYesYesNo [@`T@.33@*))))-!14434674473435930HMira Loma HighMira Loma HighSan Juan Unified|Sacramento!`YesNoNoNoNo#L%@ =pX |H@.33@6))+/514337680986066997EMiller ElementaMiller ElementaryEscondido Union ElemSan Diego$d YesYesYesYesYes ( @ d}@F@E:))+59)14236678196036289MWiltsey (Ray) MWiltsey (Ray) MiddleOntario-Montclair ElemSan Bernardino#b NoNoNoNoI6No _3?`T|@4\)1 ))+-1#14119647256015663ETwain ElementarTwain ElementaryLong Beach UnifiedLos Angelesc.YesNoNoNo No!N $@ G Vg(@F@E pC!p-))))+#15019734371932326HDominguez HighDominguez High {Compton UnifiedLos Angelesd#YesYesYesYesdNoH C/ ? @7*,{@.33@9))+E+14949753586052369ECali Calmecac (Cali Calmecac (Charter #162)WWindsor Unified3Sonoma0di2 7YesYesYesYes12No = @ =^#@F@E/))+;'14837684523730728HRancho Buena ViRancho Buena Vista HighVista Unified San Diego$dNoNoNoNoNo `  @ _@.33@.))))/#14719646591934611HLa Canada HighLa Canada HighLa Canada Unified\Los AngelesadZ YesYesYesYesNo]$7@`]@.33@9))+;714630666136029557ECollege View ElCollege View Elementary Ocean View ElementaryOranged0YesYesYesYes!Noa  @`dE@F@E aK"a=))+;3#15519647336016109EBroad Avenue ElBroad Avenue Elementary_Los Angeles UnifiedLos Angelesba DYesYesYesYesR!Yes)X.@T @F@E,))+++15456726526060388MCabrillo MiddleCabrillo MiddleVentura UnifiedVentura7c)YesYesYesYesNo \ !@ €\M@4\)=))+;3#15319648576106793EJoshua Hills ElJoshua Hills ElementaryPalmdale ElementaryLos Angelesc4YesYesYesYes. YescI % @pI@F@E4))+3-#15219645686013643EDunsmore ElemenDunsmore ElementaryNGlendale Unified Los AngelesdXVYesYesYesYesNoX (@Q`mF@F@E1))+5915157727106071278MDouglass JuniorDouglass Junior HighWoodland Joint Unified9Yolo8cYesNoNoNoNo R &@X '@4\) TGT@ ))+I-#16019645686013676EFranklin (BenjaFranklin (Benjamin) ElementaryPGlendale Unified Los Angelesdh ())+I3#16819647331933852HHamilton (AlexaHamilton (Alexander) Senior HiLos Angeles UnifiedLos Angeles`I^ NoNoNoNoNo ?@=pS @.33@<'))+==16741690704137279HSouth San FrancSouth San Francisco HighSouth San Francisco UnifSan Mateo(Z| YesNoNoNo No[@\ [@.33@0&))))516609618530930081HOak Ridge HighOak Ridge High'El Dorado Union HighEl Dorado`YesYesYesYesNo`,@pba@.33@ o?$o1/))+-3#17519647336068431MEl Sereno MiddlEl Sereno MiddleLos Angeles UnifiedLos Angelesd  NoNoNoNo["No +$@B{@4\)3.))++;!17434674393437555HSacramento HighSacramento HighSacramento City UnifiedlSacramento!ZXD YesNoNoNo$NoM@ff``mq@.33@/-))+/'17337684526059810MWashington MiddWashington Middle)Vista Unified San Diego$b^? YesYesYesYes9YesY@=p`@4\)-,))+3-17214632486008692EBig Pine ElemenBig Pine Elementary[Big Pine Unified@Inyo b_ YesNoNoNoNoV@pT!W@.33@ fB~f*9))+/+18501612596001994ELaurel ElementaLaurel ElementaryOakland UnifiedAlamedadwNoNoNoNoJ-No ; @ =Rl[@F@E,8))+1'18437682966038988MMeadowbrook MidMeadowbrook MiddleJPoway Unified?San Diego$c3YesNoNoNo No c$@ dN@4\)67))+3918330736356101059EDel Lago ElemenDel Lago Elementary Saddleback Valley UnifmOrangedM.YesYesYesYesNo R# @ G at@F@E@6))+K3#18219647331933381HGarfield (JamesGarfield (James A.) Senior HighLos Angeles UnifiedLos AngelesdNoNoNoNoV"YesT=? S T T@.33@:5))+9518133671736112692MWorkman (James)Workman (James) Middle Palm Springs UnifiedRiverside dY> YesYesYesYes&No! W!@ G:@4\) pCp&>))+/319056726035630322HSanta Susana HiSanta Susana HighSimi Valley UnifiedVentura7cNoNoNoNoNo 22X@.33@,=))''+#18939685696105738EPacific (K-8)Pacific (K-8)Lincoln Unified~San Joaquin&dY BYesYesYesYes&Noa @ 33@X p:@F@E9<))+35#18843696906049217EFairwood ElemenFairwood Elementary-Sunnyvale ElementarySanta Clara*d)YesYesYesYes'No X #@D@F@E8;))+;318756726036055776ESanta Susana ElSanta Susana ElementarySimi Valley UnifiedVentura7d*YesYesYesYes-No 22?`pL@F@E9:))+7=18630665636028948EEl Cerrito ElemEl Cerrito Elementary La Habra City Elementary]Oranged6YesYesYesYesH2Nob%$?[ @F@E pD&p2C))+3/19501612426001572EAlvarado ElemenAlvarado ElementaryNew Haven UnifiedAlamedacYesYesYesYes$'No X!! @ @de@F@E6B))+13#19419650526022933EEmperor ElementEmperor Elementary "Temple City UnifiedLos AngelesdO.!YesYesYesYes" No d @ QC`@F@E8A))+7/%19307617880735407HPittsburg SenioPittsburg Senior HighPittsburg Unified*Contra Costab" YesYesYesYes&No@\)A"B@.33@$@))##;19215634121531672HDelano HighDelano HighDelano Joint Union HighKerncNoNoNoNo/%NoJ2?\)D@.33@8?))+1719133751766032056EMachado ElementMachado Elementary Lake Elsinore UnifiedfRiverside c8@YesYesYesYesE"Yesc% @ =SY@F@E Z5|Z5H))+3920031669513134657HLincoln High (CLincoln High (Char) Western Placer Unified"Placerdpa YesYesYesYesNo] "@G aW@.33@:G))+A119956724626055016ELarsen (Ansgar)Larsen (Ansgar) ElementarybHueneme Elementary4Ventura7c YesYesYesYesXENo a):?`_@F@E'F))+++19804755076003164MSycamore MiddleSycamore MiddlePGridley UnifiedButtecsU YesNoNoNo8No $]"@33@N q@4\)5E))+1519733670333331600HCorona Senior HCorona Senior High %Corona-Norco UnifiedRiverside dl YesYesYesYes$No ` @G_@.33@GD))+W3#19619647336018568EOne Hundred TweOne Hundred Twelfth Street ElementaryBLos Angeles UnifiedLos Angeles_5YesNoNoNob8No 0 !@\)*'_@F@Ev|v7?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I6?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I5?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I4?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I3?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I2?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$6/(! ~wp~i}b|[{TzMyFx?w8v1u*t#srqp AweSA7?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I6?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I5?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I4?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I3?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I2?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I1?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I <wdP<14?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I 13?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I 12?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I 11?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I 10?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I 9?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I8?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:21?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I20?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I19?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I18?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I17?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I16?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I15?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:28?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I27?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I26?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I25?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I24?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I23?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I22?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:#35 [?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I"34 Z?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I!33 Y?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I 32.?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I31-?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I30 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I29?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:*42 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I)41 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I(40 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I'39 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I&38 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I%37 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I$36 \?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:149 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I048 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I/47 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I.46 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I-45 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I,44 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I+43 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:856 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I755 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I654 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I553 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I452 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I351 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I250 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:?63 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I>62 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I=61 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I<60 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I;59 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I:58 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I957 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:F70?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IE69?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$ID68?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IC67?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IB66?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IA65 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I@64 ?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:M77?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IL76?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IK75?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IJ74?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$II73?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IH72?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IG71?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:T84?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IS83?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IR82?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IQ81?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IP80?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IO79?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IN78?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:[91?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IZ90?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IY89?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IX88?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IW87?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IV86?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$IU85?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I :vbN:b98?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$Ia97?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I`96?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I_95?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I^94?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I]93?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I\92?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I 4v`J4i1057?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$Ih1046?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$Ig1035?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$If1024?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$Ie1013?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$Id1002?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$Ic99?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I 3u_I3p112>?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$Io111=?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$In110?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I'167=?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I?$I$I&166 library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > ## check many permutations of fpc specification > example(fpc) fpc> data(fpc) fpc> fpc stratid psuid weight nh Nh x 1 1 1 3 5 15 2.8 2 1 2 3 5 15 4.1 3 1 3 3 5 15 6.8 4 1 4 3 5 15 6.8 5 1 5 3 5 15 9.2 6 2 1 4 3 12 3.7 7 2 2 4 3 12 6.6 8 2 3 4 3 12 4.2 fpc> withoutfpc<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, variables=~x, fpc+ data=fpc, nest=TRUE) fpc> withoutfpc Stratified Independent Sampling design (with replacement) svydesign(weights = ~weight, ids = ~psuid, strata = ~stratid, variables = ~x, data = fpc, nest = TRUE) fpc> svymean(~x, withoutfpc) mean SE x 5.4481 0.7413 fpc> withfpc<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, fpc+ fpc=~Nh, variables=~x, data=fpc, nest=TRUE) fpc> withfpc Stratified Independent Sampling design svydesign(weights = ~weight, ids = ~psuid, strata = ~stratid, fpc = ~Nh, variables = ~x, data = fpc, nest = TRUE) fpc> svymean(~x, withfpc) mean SE x 5.4481 0.616 fpc> ## Other equivalent forms fpc> withfpc<-svydesign(prob=~I(1/weight), ids=~psuid, strata=~stratid, fpc+ fpc=~Nh, variables=~x, data=fpc, nest=TRUE) fpc> svymean(~x, withfpc) mean SE x 5.4481 0.616 fpc> withfpc<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, fpc+ fpc=~I(nh/Nh), variables=~x, data=fpc, nest=TRUE) fpc> svymean(~x, withfpc) mean SE x 5.4481 0.616 fpc> withfpc<-svydesign(weights=~weight, ids=~interaction(stratid,psuid), fpc+ strata=~stratid, fpc=~I(nh/Nh), variables=~x, data=fpc) fpc> svymean(~x, withfpc) mean SE x 5.4481 0.616 fpc> withfpc<-svydesign(ids=~psuid, strata=~stratid, fpc=~Nh, fpc+ variables=~x,data=fpc,nest=TRUE) fpc> svymean(~x, withfpc) mean SE x 5.4481 0.616 fpc> withfpc<-svydesign(ids=~psuid, strata=~stratid, fpc+ fpc=~I(nh/Nh), variables=~x, data=fpc, nest=TRUE) fpc> svymean(~x, withfpc) mean SE x 5.4481 0.616 > > > proc.time() user system elapsed 0.194 0.025 0.229 survey/tests/badcal.R0000644000176200001440000000063412242746122014307 0ustar liggesusers## ## Calibration with badly-scaled initial weights (bug report by Takahiro Tsuchiya) ## library(survey) data <- data.frame(x=c(1,1,1,1,2,2,2,2,2,2), w=rep(10,10)) des <- svydesign(ids=~1, weights=~w, data=data) des.c <- calibrate(des, ~factor(x), c(10000, 5000)) des.r <- calibrate(des, ~factor(x), c(10000, 5000), calfun='raking') stopifnot(all.equal(svytotal(~factor(x), des.c), svytotal(~factor(x), des.r))) survey/tests/multistage.R0000644000176200001440000000012312242746122015250 0ustar liggesusers## ## Check that multistage samples still work ## library(survey) example(mu284) survey/tests/kalton.R0000644000176200001440000000270412242746122014371 0ustar liggesuserslibrary(survey) ab<-expand.grid(a=factor(1:4),b=factor(1:3)) kaltonsample<-ab[rep(1:12,c(20,50,100,30,40,140,50,100,40,310,50,70)),] kaltonpop<-ab[rep(1:12,c(80,60,170,55,40,150,60,165,55,340,200,125)),] jointpop<-colSums(model.matrix(~a*b,kaltonpop)) marginalpop<-colSums(model.matrix(~a+b,kaltonpop)) gregpop<-colSums(model.matrix(~as.numeric(a)+as.numeric(b),kaltonpop)) dkalton<-svydesign(id=~1,data=kaltonsample) dps<-postStratify(dkalton,~a+b,xtabs(~a+b,kaltonpop)) drake<-rake(dkalton, list(~a,~b),list(xtabs(~a,kaltonpop),xtabs(~b,kaltonpop)),control=list(epsilon=0.0001)) dcalps<-calibrate(dkalton, ~a*b, jointpop) dcalrake<-calibrate(dkalton,~a+b, marginalpop, calfun="raking") dlinear<-calibrate(dkalton, ~a+b, marginalpop) dtrunclinear<-calibrate(dkalton, ~a+b, marginalpop,bounds=c(0.5,2.2)) dlogit<-calibrate(dkalton, ~a+b, marginalpop,bounds=c(0.5,2.2),calfun="logit") dgreg<-calibrate(dkalton,~as.numeric(a)+as.numeric(b), gregpop) #table A round(svytable(~a+b,dps)/xtabs(~a+b,kaltonsample),2) round(svytable(~a+b,dcalps)/xtabs(~a+b,kaltonsample),2) #table B round(svytable(~a+b,drake)/xtabs(~a+b,kaltonsample),2) round(svytable(~a+b,dcalrake)/xtabs(~a+b,kaltonsample),2) #table C round(svytable(~a+b,dlinear)/xtabs(~a+b,kaltonsample),2) #table D round(svytable(~a+b,dgreg)/xtabs(~a+b,kaltonsample),2) #table G round(svytable(~a+b,dlogit)/xtabs(~a+b,kaltonsample),2) #table G round(svytable(~a+b,dtrunclinear)/xtabs(~a+b,kaltonsample),2) survey/tests/deff.Rout.save0000644000176200001440000000433312372251125015470 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## from Takahiro Tsuchiya > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > kigyo<-read.table(tmp<-textConnection(" obs uriage srs.w pps.w + 1 1 15 100 20 + 2 2 143 100 200 + 3 3 21 100 11 + 4 4 51 100 25 + 5 5 337 100 550 + 6 6 50 100 30 + 7 7 274 100 250 + 8 8 145 100 100 + 9 9 15 100 10 + 10 10 86 100 55 + ",open="r"),header=TRUE) > close(tmp) > des.srs <- svydesign(ids=~1, weights=~srs.w, data=kigyo) > (res.srs <- svymean(~uriage, des.srs, deff=TRUE)) mean SE DEff uriage 113.700 35.626 1.0101 > (SE(res.srs)^2) / ((1-10/1000) * coef(svyvar(~uriage, des.srs)) / 10) uriage uriage 1.010101 > > (tres.srs <- svytotal(~uriage, des.srs, deff=TRUE)) total SE DEff uriage 113700 35626 1.0101 > (SE(tres.srs)^2) / (1000^2 * (1-10/1000) * coef(svyvar(~uriage, des.srs)) / 10) uriage uriage 1.010101 > > > des.pps <- svydesign(ids=~1, weights=~pps.w, data=kigyo) > (res.pps <- svymean(~uriage, des.pps, deff='replace')) mean SE DEff uriage 243.914 48.752 1.9741 > (SE(res.pps)^2) / (coef(svyvar(~uriage, des.pps)) / 10) uriage uriage 1.974067 > (tres.pps <- svytotal(~uriage, des.pps, deff='replace')) total SE DEff uriage 305136 184965 18.157 > (N.hat <- sum(weights(des.pps))) [1] 1251 > (SE(tres.pps)^2) / (N.hat^2 * coef(svyvar(~uriage, des.pps)) / 10) uriage uriage 18.15669 > > proc.time() user system elapsed 0.163 0.021 0.189 survey/tests/quantile.R0000644000176200001440000000063412242746122014723 0ustar liggesuserslibrary(survey) set.seed(42) df<-data.frame(x=exp(rnorm(1000))) df$y<-round(df$x,1) ddf<-svydesign(id=~1,data=df) rdf<-as.svrepdesign(ddf) SE(svyquantile(~x,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) SE(svyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) svyquantile(~y,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,ties="rounded",interval.type="betaWald") svyquantile(~y,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE) survey/tests/quantile.Rout.save0000644000176200001440000000377612372251125016420 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > set.seed(42) > > df<-data.frame(x=exp(rnorm(1000))) > df$y<-round(df$x,1) > ddf<-svydesign(id=~1,data=df) Warning message: In svydesign.default(id = ~1, data = df) : No weights or probabilities supplied, assuming equal probability > rdf<-as.svrepdesign(ddf) > > SE(svyquantile(~x,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) 0.01 0.1 0.5 0.9 0.99 0.01545209 0.01265608 0.03388011 0.16145776 2.10061576 > > SE(svyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) x q0.01 0.01534861 q0.1 0.01514945 q0.5 0.03394446 q0.9 0.16409412 q0.99 1.86410482 > > > svyquantile(~y,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,ties="rounded",interval.type="betaWald") $quantiles 0.01 0.1 0.5 0.9 0.99 y 0.02352941 0.2230769 0.9340909 3.55 9.4 $CIs , , y 0.01 0.1 0.5 0.9 0.99 (lower 0.01594200 0.2020115 0.8578143 3.207543 7.568142 upper) 0.03287947 0.2467045 1.0059815 3.862241 14.978632 > > svyquantile(~y,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE) Statistic: y q0.01 0.1 q0.1 0.3 q0.5 1.0 q0.9 3.6 q0.99 9.4 SE: y q0.01 0.0250000 q0.1 0.0250000 q0.5 0.0250000 q0.9 0.1516809 q0.99 1.8599967 > > > > > proc.time() user system elapsed 0.917 0.047 0.968 survey/tests/pps.R0000644000176200001440000000353212242746122013703 0ustar liggesuserslibrary(survey) data(election) dpps<- svydesign(id=~1, weights=~wt, fpc=~p, data=election_pps, pps="brewer") dppswr <-svydesign(id=~1, weights=~wt, data=election_pps) svytotal(~Bush+Kerry+Nader, dpps) svytotal(~Bush+Kerry+Nader, dppswr) ##subsets svytotal(~Bush+Kerry+Nader, subset(dpps, Nader>0)) ##multistage: should agree with STRS analysis data(api) dclus2<-svydesign(id = ~dnum + snum, fpc = ~fpc1 + fpc2, data = apiclus2) dclus2pps<-svydesign(id = ~dnum + snum, fpc = ~I(40/fpc1) + I(pmin(1,5/fpc2)), data = apiclus2) all.equal(svytotal(~sch.wide,dclus2), svytotal(~sch.wide,dclus2pps)) all.equal(svymean(~sch.wide,dclus2), svymean(~sch.wide,dclus2pps)) all.equal(svytotal(~enroll,dclus2), svytotal(~enroll,dclus2pps)) ## the new without-replacement methods data(election) dpps_br<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") dpps_ov<- svydesign(id=~1, fpc=~p, data=election_pps, pps="overton") dpps_hr<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40)) dpps_hr1<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR()) dpps_ht<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob)) ## Yates-Grundy type dpps_yg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob),variance="YG") dpps_hryg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40),variance="YG") ## The with-replacement approximation svytotal(~Bush+Kerry+Nader, dpps_ht) svytotal(~Bush+Kerry+Nader, dpps_yg) svytotal(~Bush+Kerry+Nader, dpps_hr) svytotal(~Bush+Kerry+Nader, dpps_hryg) svytotal(~Bush+Kerry+Nader, dpps_hr1) svytotal(~Bush+Kerry+Nader, dpps_br) svytotal(~Bush+Kerry+Nader, dpps_ov) ## subsets svytotal(~Bush+Kerry+Nader, subset(dpps_ht, Nader>0)) svytotal(~Bush+Kerry+Nader, subset(dpps_hryg, Nader>0)) ## counts svyby(~Bush+Kerry+Nader,~I(Nader>0), unwtd.count,design=dpps_ht) survey/tests/badcal.Rout.save0000644000176200001440000000235612372251125015775 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## > ## Calibration with badly-scaled initial weights (bug report by Takahiro Tsuchiya) > ## > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data <- data.frame(x=c(1,1,1,1,2,2,2,2,2,2), w=rep(10,10)) > des <- svydesign(ids=~1, weights=~w, data=data) > des.c <- calibrate(des, ~factor(x), c(10000, 5000)) > des.r <- calibrate(des, ~factor(x), c(10000, 5000), calfun='raking') Loading required package: MASS > stopifnot(all.equal(svytotal(~factor(x), des.c), svytotal(~factor(x), des.r))) > > proc.time() user system elapsed 0.162 0.025 0.194 survey/tests/check.R0000755000176200001440000000271412242746122014162 0ustar liggesuserslibrary(survey) data(fpc) ## test various possibilities for svydesign a<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, variables=~x, data=fpc, nest=TRUE) a svymean(~x,a) a<-svydesign(weights=~weight, ids=~0, strata=~stratid, variables=~x, data=fpc, nest=TRUE) a svymean(~x,a) a<-svydesign(weights=1, ids=~0, strata=~stratid, variables=~x, data=fpc, nest=TRUE) a svymean(~x,a) a<-svydesign(ids=~0, strata=~stratid, variables=~x, data=fpc, nest=TRUE) a svymean(~x,a) a<-svydesign(ids=~0, strata=~stratid, prob=~I(1/weight),variables=~x, data=fpc, nest=TRUE) a svymean(~x,a) a<-svydesign(ids=~psuid, strata=~stratid, variables=~x, data=fpc, nest=TRUE) a svymean(~x,a) a<-svydesign(ids=~psuid, variables=~x, data=fpc, nest=TRUE) a svymean(~x,a) a<-svydesign(ids=~psuid, weights=~weight, variables=~x, data=fpc, nest=TRUE) a svymean(~x,a) a<-svydesign(ids=~stratid+psuid, weights=~weight, variables=~x, data=fpc) a svymean(~x,a) a<-svydesign(ids=~stratid+psuid, variables=~x, data=fpc) a svymean(~x,a) a<-svydesign(weights=fpc$weight, ids=fpc$psuid, strata=fpc$stratid, variables=fpc[,"x",drop=FALSE], nest=TRUE) a svymean(~x,a) a<-svydesign(weights=fpc$weight, ids=fpc$psuid, strata=fpc$stratid, variables=fpc[,4:6], nest=TRUE) a svymean(~x,a) a<-svydesign(weights=fpc$weight, ids=fpc$psuid, variables=fpc[,4:6], fpc=rep(27,8)) a svymean(~x,a) a<-svydesign(weights=fpc$weight, ids=fpc$psuid, strata=fpc$stratid, nest=TRUE, variables=fpc[,4:6], fpc=fpc$Nh) a svymean(~x,a) survey/tests/raowuboot.R0000644000176200001440000000023312242746122015115 0ustar liggesusers## regression test for bug reported by Richard Valliant library(survey) s<-subbootweights(c(1,1),1:2, 50) stopifnot(all(s$repweights$weights %in% c(0,2))) survey/tests/nwts.rda0000644000176200001440000000261512242746122014442 0ustar liggesusersRDX2 X  nwts    S03% @3< [ud<  !9) names stage instit histol control case class data.frame row.names 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 nwtsb    sVO @3< [ud<  !9) stage instit histol control case data.frame 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16survey/tests/scoping.Rout.save0000644000176200001440000000631712750744721016243 0ustar liggesusers R version 3.3.1 (2016-06-21) -- "Bug in Your Hair" Copyright (C) 2016 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.4.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ## regression test for testing regression > > library(survey) Loading required package: grid Loading required package: Matrix Loading required package: survival Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(api) > > dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) > > > f<-function(){ + form<-acs.46~stype + svyglm(formula=form, design = dstrat) + } > > g<-function(form){ + svyglm(formula=form, design = dstrat) + } > f() Stratified Independent Sampling design svydesign(id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc) Call: svyglm(formula = form, design = dstrat) Coefficients: (Intercept) stypeH stypeM 28.7449 0.7551 0.4022 Degrees of Freedom: 133 Total (i.e. Null); 129 Residual (66 observations deleted due to missingness) Null Deviance: 1838 Residual Deviance: 1835 AIC: 719.8 > g(acs.46~stype) Stratified Independent Sampling design svydesign(id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc) Call: svyglm(formula = form, design = dstrat) Coefficients: (Intercept) stypeH stypeM 28.7449 0.7551 0.4022 Degrees of Freedom: 133 Total (i.e. Null); 129 Residual (66 observations deleted due to missingness) Null Deviance: 1838 Residual Deviance: 1835 AIC: 719.8 > > f<-function(){ + form<-Surv(acs.46)~stype + svycoxph(formula=form, design = dstrat) + } > > g<-function(form){ + svycoxph(formula=form, design = dstrat) + } > > f() Call: svycoxph(formula = form, design = dstrat) coef exp(coef) se(coef) z p stypeH -0.677 0.508 0.665 -1.02 0.31 stypeM -0.251 0.778 0.209 -1.20 0.23 Likelihood ratio test= on 2 df, p= n= 134, number of events= 134 (66 observations deleted due to missingness) > g(Surv(acs.46)~stype) Call: svycoxph(formula = form, design = dstrat) coef exp(coef) se(coef) z p stypeH -0.677 0.508 0.665 -1.02 0.31 stypeM -0.251 0.778 0.209 -1.20 0.23 Likelihood ratio test= on 2 df, p= n= 134, number of events= 134 (66 observations deleted due to missingness) > > ## check coxph for a single predictor > svycoxph(Surv(acs.46)~api00,design=dstrat) Call: svycoxph(formula = Surv(acs.46) ~ api00, design = dstrat) coef exp(coef) se(coef) z p api00 6.06e-06 1.00e+00 7.49e-04 0.01 0.99 Likelihood ratio test= on 1 df, p= n= 134, number of events= 134 (66 observations deleted due to missingness) > > proc.time() user system elapsed 1.030 0.059 1.106 survey/tests/survcurve.Rout.save0000644000176200001440000000511212372251125016624 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > library(survival) Loading required package: splines > > pbc2<-rbind(pbc,pbc) > pbc2$id<-rep(1:418,2) > > dpbc1<-svydesign(id=~1, data=pbc) Warning message: In svydesign.default(id = ~1, data = pbc) : No weights or probabilities supplied, assuming equal probability > dpbc2<-svydesign(id=~id, data=pbc2) Warning message: In svydesign.default(id = ~id, data = pbc2) : No weights or probabilities supplied, assuming equal probability > > s1<-svykm(Surv(time,status>0)~1, subset(dpbc1, bili>6), se=TRUE) > s2<-svykm(Surv(time,status>0)~1, subset(dpbc2, bili>6), se=TRUE) > > (c1<-confint(s1,(1:5)*365)) 0.025 0.975 365 0.6446215 0.8594153 730 0.5410938 0.7766848 1095 0.2683127 0.5103356 1460 0.1444731 0.3722001 1825 0.1009672 0.3204713 > (c2<-confint(s2,(1:5)*365)) 0.025 0.975 365 0.6446215 0.8594153 730 0.5410938 0.7766848 1095 0.2683127 0.5103356 1460 0.1444731 0.3722001 1825 0.1009672 0.3204713 > all.equal(c1, c2) [1] TRUE > > m1<-svycoxph(Surv(time,status>0)~log(bili), design=dpbc1) > m2<-svycoxph(Surv(time,status>0)~log(bili), design=dpbc2) > > d<-data.frame(bili=c(5,10)) > p1<-predict(m1, se=TRUE, newdata=d,type="curve") > p2<-predict(m2, se=TRUE, newdata=d,type="curve") > > (pc1<-confint(p1[[1]],(1:5)*365)) 0.025 0.975 365 0.8410027 0.9266263 730 0.7371114 0.8548312 1095 0.5517779 0.7018583 1460 0.4335073 0.5992819 1825 0.3260899 0.5046241 > (pc2<-confint(p2[[1]],(1:5)*365)) 0.025 0.975 365 0.8409490 0.9267054 730 0.7370152 0.8549432 1095 0.5515848 0.7019513 1460 0.4332252 0.5992968 1825 0.3257172 0.5045795 > all.equal(pc1, pc2) [1] "Mean relative difference: 0.0002070722" > > (q1<-quantile(p1[[2]])) 0.75 0.5 0.25 489 930 1492 > (q2<-quantile(p2[[2]])) 0.75 0.5 0.25 489 930 1492 > all.equal(q1,q2) [1] TRUE > > proc.time() user system elapsed 3.410 0.099 3.519 survey/tests/nwts.Rout.save0000644000176200001440000001610312372251125015555 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ## examples from Breslow & Chatterjee: Applied Statistics 1999 No. 4, p458 > ## data from Norman Breslow's web page. > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > load("nwts.rda") > nwtsnb<-nwts > nwtsnb$case<-nwts$case-nwtsb$case > nwtsnb$control<-nwts$control-nwtsb$control > > a<-rbind(nwtsb,nwtsnb) > a$in.ccs<-rep(c(TRUE,FALSE),each=16) > > b<-rbind(a,a) > b$rel<-rep(c(1,0),each=32) > b$n<-ifelse(b$rel,b$case,b$control) > > index<-rep(1:64,b$n) > > nwt.exp<-b[index,c(1:3,6,7)] > nwt.exp$id<-1:4088 > > dccs2<-twophase(id=list(~id,~id),subset=~in.ccs, + strata=list(NULL,~interaction(instit,rel)),data=nwt.exp) > > dccs8<-twophase(id=list(~id,~id),subset=~in.ccs, + strata=list(NULL,~interaction(instit,stage,rel)),data=nwt.exp) > > gccs8<-calibrate(dccs2,phase=2,formula=~interaction(instit,stage,rel)) > > summary(svyglm(rel~factor(stage)*factor(histol),family=quasibinomial,design=dccs2)) Call: svyglm(formula = rel ~ factor(stage) * factor(histol), family = quasibinomial, design = dccs2) Survey design: twophase2(id = id, strata = strata, probs = probs, fpc = fpc, subset = subset, data = data) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -2.5701 0.1288 -19.955 < 2e-16 *** factor(stage)2 0.5482 0.1979 2.769 0.005708 ** factor(stage)3 0.4791 0.2032 2.359 0.018515 * factor(stage)4 1.0037 0.2592 3.872 0.000114 *** factor(histol)2 1.3505 0.3107 4.346 1.51e-05 *** factor(stage)2:factor(histol)2 0.1152 0.4410 0.261 0.793876 factor(stage)3:factor(histol)2 0.5066 0.4241 1.194 0.232548 factor(stage)4:factor(histol)2 0.9785 0.6214 1.575 0.115615 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.000876) Number of Fisher Scoring iterations: 4 > summary(svyglm(rel~factor(stage)*factor(histol),family=quasibinomial,design=dccs8)) Call: svyglm(formula = rel ~ factor(stage) * factor(histol), family = quasibinomial, design = dccs8) Survey design: twophase2(id = id, strata = strata, probs = probs, fpc = fpc, subset = subset, data = data) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -2.71604 0.10827 -25.085 < 2e-16 *** factor(stage)2 0.78141 0.14726 5.306 1.35e-07 *** factor(stage)3 0.80093 0.15250 5.252 1.80e-07 *** factor(stage)4 1.07293 0.17817 6.022 2.33e-09 *** factor(histol)2 1.45836 0.31780 4.589 4.96e-06 *** factor(stage)2:factor(histol)2 -0.04743 0.43495 -0.109 0.913 factor(stage)3:factor(histol)2 0.28064 0.41298 0.680 0.497 factor(stage)4:factor(histol)2 0.90983 0.63774 1.427 0.154 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.000876) Number of Fisher Scoring iterations: 4 > summary(svyglm(rel~factor(stage)*factor(histol),family=quasibinomial,design=gccs8)) Call: svyglm(formula = rel ~ factor(stage) * factor(histol), family = quasibinomial, design = gccs8) Survey design: calibrate(dccs2, phase = 2, formula = ~interaction(instit, stage, rel)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -2.71604 0.10878 -24.968 < 2e-16 *** factor(stage)2 0.78141 0.14729 5.305 1.35e-07 *** factor(stage)3 0.80093 0.15212 5.265 1.68e-07 *** factor(stage)4 1.07293 0.17905 5.993 2.77e-09 *** factor(histol)2 1.45836 0.31757 4.592 4.88e-06 *** factor(stage)2:factor(histol)2 -0.04743 0.43432 -0.109 0.913 factor(stage)3:factor(histol)2 0.28064 0.41231 0.681 0.496 factor(stage)4:factor(histol)2 0.90983 0.63187 1.440 0.150 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.000876) Number of Fisher Scoring iterations: 4 > > ## check subsets of calibrated designs. > summary(svyglm(rel~factor(stage), + family=quasibinomial,design=subset(dccs8,histol==1))) Call: svyglm(formula = rel ~ factor(stage), family = quasibinomial, design = subset(dccs8, histol == 1)) Survey design: subset(dccs8, histol == 1) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -2.7160 0.1083 -25.085 < 2e-16 *** factor(stage)2 0.7814 0.1473 5.306 1.48e-07 *** factor(stage)3 0.8009 0.1525 5.252 1.97e-07 *** factor(stage)4 1.0729 0.1782 6.022 2.73e-09 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.001333) Number of Fisher Scoring iterations: 4 Warning messages: 1: In `[.twophase2`(x, r, ) : 1 strata have only one PSU in this subset. 2: In summary.glm(g) : observations with zero weight not used for calculating dispersion 3: In summary.glm(glm.object) : observations with zero weight not used for calculating dispersion 4: In `[.twophase2`(design, nas == 0, ) : 1 strata have only one PSU in this subset. 5: In `[.twophase2`(design, nas == 0, ) : 1 strata have only one PSU in this subset. > summary(svyglm(rel~factor(stage), + family=quasibinomial,design=subset(gccs8,histol==1))) Call: svyglm(formula = rel ~ factor(stage), family = quasibinomial, design = subset(gccs8, histol == 1)) Survey design: subset(gccs8, histol == 1) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -2.7160 0.1082 -25.105 < 2e-16 *** factor(stage)2 0.7814 0.1457 5.363 1.10e-07 *** factor(stage)3 0.8009 0.1504 5.324 1.34e-07 *** factor(stage)4 1.0729 0.1759 6.101 1.70e-09 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.001333) Number of Fisher Scoring iterations: 4 Warning messages: 1: In summary.glm(g) : observations with zero weight not used for calculating dispersion 2: In summary.glm(glm.object) : observations with zero weight not used for calculating dispersion > > > proc.time() user system elapsed 2.841 0.113 2.963 survey/tests/bycovmat.R0000644000176200001440000000555312242746122014732 0ustar liggesusers library(survey) data(api) options(survey.replicates.mse=TRUE) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1<-as.svrepdesign(dclus1) a<-svyby(~api00+api99, ~comp.imp+sch.wide,design=rclus1,svymean, covmat=TRUE,drop.empty.groups=FALSE) b<-svyby(~api00+api99, ~comp.imp+sch.wide,design=rclus1,svymean, covmat=TRUE,drop.empty.groups=TRUE) stopifnot(all(na.omit( as.vector(as.matrix(SE(a)))==sqrt(diag(vcov(a))) ))) stopifnot(all( as.vector(as.matrix(SE(b)))==sqrt(diag(vcov(b))) )) rat <- svyratio(~ell+mobility, ~mobility+meals, dclus1,covmat=TRUE) all <- svytotal(~ell+mobility+meals, dclus1) stopifnot(all(abs(vcov(svycontrast(all, list(quote(ell/mobility), quote(mobility/mobility), quote(ell/meals),quote(mobility/meals)))) -vcov(rat))<1e-10)) stopifnot(all(abs(SE(rat)-sqrt(diag(vcov(rat))))<1e-10)) rat <- svyratio(~ell+mobility, ~mobility+meals, rclus1,covmat=TRUE) all <- svytotal(~ell+mobility+meals, rclus1, return.replicates=TRUE) con<-svycontrast(all, list(quote(ell/mobility), quote(mobility/mobility), quote(ell/meals),quote(mobility/meals))) stopifnot(all(abs(survey:::svrVar(con$replicates, rclus1$scale,rclus1$rscales,mse=rclus1$mse, coef=coef(con))-vcov(rat))<1e-10)) options(survey.replicates.mse=FALSE) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1<-as.svrepdesign(dclus1) a<-svyby(~api00+api99, ~comp.imp+sch.wide,design=rclus1,svymean, covmat=TRUE,drop.empty.groups=FALSE) b<-svyby(~api00+api99, ~comp.imp+sch.wide,design=rclus1,svymean, covmat=TRUE,drop.empty.groups=TRUE) stopifnot(all(na.omit( as.vector(as.matrix(SE(a)))==sqrt(diag(vcov(a))) ))) stopifnot(all( as.vector(as.matrix(SE(b)))==sqrt(diag(vcov(b))) )) rat <- svyratio(~ell+mobility, ~mobility+meals, dclus1,covmat=TRUE) all <- svytotal(~ell+mobility+meals, dclus1) stopifnot(all(abs(vcov(svycontrast(all, list(quote(ell/mobility), quote(mobility/mobility), quote(ell/meals),quote(mobility/meals)))) -vcov(rat))<1e-10)) stopifnot(all(abs(SE(rat)-sqrt(diag(vcov(rat))))<1e-10)) rat <- svyratio(~ell+mobility, ~mobility+meals, rclus1,covmat=TRUE) all <- svytotal(~ell+mobility+meals, rclus1, return.replicates=TRUE) con<-svycontrast(all, list(quote(ell/mobility), quote(mobility/mobility), quote(ell/meals),quote(mobility/meals))) stopifnot(all(abs(survey:::svrVar(con$replicates, rclus1$scale,rclus1$rscales,mse=rclus1$mse, coef=coef(con))-vcov(rat))<1e-10)) survey/tests/raowuboot.Rout.save0000644000176200001440000000170412372251125016604 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## regression test for bug reported by Richard Valliant > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > s<-subbootweights(c(1,1),1:2, 50) > stopifnot(all(s$repweights$weights %in% c(0,2))) > > proc.time() user system elapsed 0.140 0.021 0.165 survey/tests/nwtco-subcohort.rda0000644000176200001440000000166512242746122016613 0ustar liggesusersY9A,]x Xkx/@ƠVUfFDF{22./߿rbwϻo?>}~o~5z\պި}ݵe +sZ}=}#|vd߳+nh{WשЕv*v+}j|OٸE! (B95_U:=ۅgC}|b y@5ĭw+6\⻋w}PQ9(~?,q+]xY;876u翳[ydtuXXP}qv®OU{Yzy]GVݕ(^4*}uY/;djvzY@=q;ہ+@ VՏo(\ƫ:_fկ,XЅ6ounj]sdt|A(;Ϲ+*M>Q7n~Y}WB7<AUi]|UV?.}>xf>5W>ۥOq]__ˢ:tٞl/;Z]S͗,ނ͋ѝfDmw^Qq#]Γh9<>Ghu>fCclTMvXۮsUt+?<EW#(Gr*OPq?vՇj|/\ջү\Vxut}@wi֎<^]o+ޣkE|bWW\gQ·]y7x(\xS5łVÍGsW,Ab?H~survey/tests/deff.R0000644000176200001440000000201712242746122014002 0ustar liggesusers## from Takahiro Tsuchiya library(survey) kigyo<-read.table(tmp<-textConnection(" obs uriage srs.w pps.w 1 1 15 100 20 2 2 143 100 200 3 3 21 100 11 4 4 51 100 25 5 5 337 100 550 6 6 50 100 30 7 7 274 100 250 8 8 145 100 100 9 9 15 100 10 10 10 86 100 55 ",open="r"),header=TRUE) close(tmp) des.srs <- svydesign(ids=~1, weights=~srs.w, data=kigyo) (res.srs <- svymean(~uriage, des.srs, deff=TRUE)) (SE(res.srs)^2) / ((1-10/1000) * coef(svyvar(~uriage, des.srs)) / 10) (tres.srs <- svytotal(~uriage, des.srs, deff=TRUE)) (SE(tres.srs)^2) / (1000^2 * (1-10/1000) * coef(svyvar(~uriage, des.srs)) / 10) des.pps <- svydesign(ids=~1, weights=~pps.w, data=kigyo) (res.pps <- svymean(~uriage, des.pps, deff='replace')) (SE(res.pps)^2) / (coef(svyvar(~uriage, des.pps)) / 10) (tres.pps <- svytotal(~uriage, des.pps, deff='replace')) (N.hat <- sum(weights(des.pps))) (SE(tres.pps)^2) / (N.hat^2 * coef(svyvar(~uriage, des.pps)) / 10) survey/tests/nwts-cch.R0000644000176200001440000000215212242746122014624 0ustar liggesuserslibrary(survey) library(survival) data(nwtco) ntwco<-subset(nwtco, !is.na(edrel)) load("nwtco-subcohort.rda") nwtco$subcohort<-subcohort d_BorganII <- twophase(id=list(~seqno,~seqno), strata=list(NULL,~interaction(instit,rel)), data=nwtco, subset=~I(rel |subcohort)) ##Coefficient results same as Splus with code from ## http://faculty.washington.edu/norm/software.html ## SE slightly larger due to using sandwich variance. svycoxph(Surv(edrel, rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganII) ## ## This gives higher standard errors. calibrate() does not recompute the ## finite population correction if a calibration variable happens to predict ## sampling perfectly. It probably should. ## d_BorganIIps<-calibrate(twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), data=nwtco, subset=~I(rel |subcohort)), phase=2, formula=~interaction(instit,rel), epsilon=1e-10) svycoxph(Surv(edrel, rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganIIps) survey/tests/rakecheck.Rout.save0000644000176200001440000001112312372251125016477 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > > data(api) > dclus1 <- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) > rclus1 <- as.svrepdesign(dclus1) > > ## population marginal totals for each stratum > pop.types <- data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018)) > pop.schwide <- data.frame(sch.wide=c("No","Yes"), Freq=c(1072,5122)) > > rclus1r <- rake(rclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) > > svymean(~api00, rclus1r) mean SE api00 641.23 26.873 > svytotal(~enroll, rclus1r) total SE enroll 3647300 463511 > > ff<-~stype+sch.wide > poptotals<-colSums(model.matrix(ff,model.frame(ff,apipop))) > rclus1g<-calibrate(rclus1, ~stype+sch.wide, poptotals,calfun="raking") Loading required package: MASS > > svymean(~api00,rclus1g) mean SE api00 641.23 26.874 > svytotal(~enroll,rclus1g) total SE enroll 3647280 463582 > > summary(weights(rclus1g)/weights(rclus1r)) V1 V2 V3 V4 V5 V6 Min. :1 Min. :1 Min. :1 Min. :1 Min. :1 Min. :1 1st Qu.:1 1st Qu.:1 1st Qu.:1 1st Qu.:1 1st Qu.:1 1st Qu.:1 Median :1 Median :1 Median :1 Median :1 Median :1 Median :1 Mean :1 Mean :1 Mean :1 Mean :1 Mean :1 Mean :1 3rd Qu.:1 3rd Qu.:1 3rd Qu.:1 3rd Qu.:1 3rd Qu.:1 3rd Qu.:1 Max. :1 Max. :1 Max. :1 Max. :1 Max. :1 Max. :1 NA's :11 NA's :4 NA's :2 NA's :13 NA's :2 NA's :4 V7 V8 V9 V10 V11 Min. :1 Min. :1 Min. :1 Min. :1 Min. :1 1st Qu.:1 1st Qu.:1 1st Qu.:1 1st Qu.:1 1st Qu.:1 Median :1 Median :1 Median :1 Median :1 Median :1 Mean :1 Mean :1 Mean :1 Mean :1 Mean :1 3rd Qu.:1 3rd Qu.:1 3rd Qu.:1 3rd Qu.:1 3rd Qu.:1 Max. :1 Max. :1 Max. :1 Max. :1 Max. :1 NA's :4 NA's :16 NA's :9 NA's :34 NA's :21 V12 V13 V14 V15 Min. :0.9997 Min. :1 Min. :1 Min. :1 1st Qu.:1.0001 1st Qu.:1 1st Qu.:1 1st Qu.:1 Median :1.0001 Median :1 Median :1 Median :1 Mean :1.0000 Mean :1 Mean :1 Mean :1 3rd Qu.:1.0001 3rd Qu.:1 3rd Qu.:1 3rd Qu.:1 Max. :1.0002 Max. :1 Max. :1 Max. :1 NA's :37 NA's :13 NA's :1 NA's :12 > > > ## Do it for a design without replicate weights > dclus1r<-rake(dclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) > > svymean(~api00, dclus1r) mean SE api00 641.23 23.704 > svytotal(~enroll, dclus1r) total SE enroll 3647300 400603 > > dclus1g<-calibrate(dclus1, ~stype+sch.wide, poptotals,calfun="raking") > > svymean(~api00,dclus1g) mean SE api00 641.23 23.704 > svytotal(~enroll,dclus1g) total SE enroll 3647280 400603 > > summary(weights(dclus1g)/weights(dclus1r)) Min. 1st Qu. Median Mean 3rd Qu. Max. 1 1 1 1 1 1 > > > > ## Example of raking with partial joint distributions > pop.table <- xtabs(~stype+sch.wide,apipop) > pop.imp<-data.frame(comp.imp=c("No","Yes"),Freq=c(1712,4482)) > dclus1r2<-rake(dclus1, list(~stype+sch.wide, ~comp.imp), + list(pop.table, pop.imp)) > svymean(~api00, dclus1r2) mean SE api00 642.62 22.732 > > ff1 <-~stype*sch.wide+comp.imp > > poptotals1<-colSums(model.matrix(ff1,model.frame(ff1,apipop))) > dclus1g2<-calibrate(dclus1, ~stype*sch.wide+comp.imp, poptotals1, calfun="raking") > > svymean(~api00, dclus1g2) mean SE api00 642.61 22.731 > > summary(weights(dclus1r2)/weights(dclus1g2)) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.999 1.000 1.000 1.000 1.000 1.002 > > proc.time() user system elapsed 0.459 0.032 0.499 survey/tests/nwts.R0000644000176200001440000000237212242746122014075 0ustar liggesusers ## examples from Breslow & Chatterjee: Applied Statistics 1999 No. 4, p458 ## data from Norman Breslow's web page. library(survey) load("nwts.rda") nwtsnb<-nwts nwtsnb$case<-nwts$case-nwtsb$case nwtsnb$control<-nwts$control-nwtsb$control a<-rbind(nwtsb,nwtsnb) a$in.ccs<-rep(c(TRUE,FALSE),each=16) b<-rbind(a,a) b$rel<-rep(c(1,0),each=32) b$n<-ifelse(b$rel,b$case,b$control) index<-rep(1:64,b$n) nwt.exp<-b[index,c(1:3,6,7)] nwt.exp$id<-1:4088 dccs2<-twophase(id=list(~id,~id),subset=~in.ccs, strata=list(NULL,~interaction(instit,rel)),data=nwt.exp) dccs8<-twophase(id=list(~id,~id),subset=~in.ccs, strata=list(NULL,~interaction(instit,stage,rel)),data=nwt.exp) gccs8<-calibrate(dccs2,phase=2,formula=~interaction(instit,stage,rel)) summary(svyglm(rel~factor(stage)*factor(histol),family=quasibinomial,design=dccs2)) summary(svyglm(rel~factor(stage)*factor(histol),family=quasibinomial,design=dccs8)) summary(svyglm(rel~factor(stage)*factor(histol),family=quasibinomial,design=gccs8)) ## check subsets of calibrated designs. summary(svyglm(rel~factor(stage), family=quasibinomial,design=subset(dccs8,histol==1))) summary(svyglm(rel~factor(stage), family=quasibinomial,design=subset(gccs8,histol==1))) survey/tests/lonely.psu.R0000755000176200001440000000427212242746122015216 0ustar liggesusers ## lonely PSUs by design library(survey) data(api) ## not certainty PSUs by fpc ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1) summary(ds) options(survey.lonely.psu="fail") try(svymean(~api00,ds)) try(svymean(~api00, as.svrepdesign(ds))) options(survey.lonely.psu="remove") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="certainty") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="adjust") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="average") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) ## fpc specified fpc<-ifelse(apiclus1$dnum==413, 1,1000) ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1,fpc=fpc) summary(ds) options(survey.lonely.psu="fail") try(svymean(~api00,ds)) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="remove") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="certainty") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="adjust") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="average") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) rs<-as.svrepdesign(ds) svytotal(~api00,rs) SE(svytotal(~api00,subset(rs, dnum==413)))==0 ## lonely PSUs after subsetting ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) ds1<-ds[-31,] summary(ds1) options(survey.lonely.psu="fail") svymean(~api00,ds1) options(survey.lonely.psu="remove") svymean(~api00,ds1) options(survey.lonely.psu="certainty") svymean(~api00,ds1) options(survey.lonely.psu="adjust") svymean(~api00,ds1) options(survey.lonely.psu="average") svymean(~api00,ds1) ## with adjustment options(survey.adjust.domain.lonely=TRUE) ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) ds1<-ds[-31,] summary(ds1) options(survey.lonely.psu="fail") try(svymean(~api00,ds1)) options(survey.lonely.psu="remove") svymean(~api00,ds1) options(survey.lonely.psu="certainty") svymean(~api00,ds1) options(survey.lonely.psu="adjust") svymean(~api00,ds1) options(survey.lonely.psu="average") svymean(~api00,ds1) survey/tests/multistage.Rout.save0000644000176200001440000000227112372251125016741 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## > ## Check that multistage samples still work > ## > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > example(mu284) mu284> data(mu284) mu284> (dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284)) 2 - level Cluster Sampling design With (5, 15) clusters. svydesign(id = ~id1 + id2, fpc = ~n1 + n2, data = mu284) mu284> (ytotal<-svytotal(~y1, dmu284)) total SE y1 15080 2274.3 mu284> vcov(ytotal) y1 y1 5172234 > > > proc.time() user system elapsed 0.167 0.024 0.202 survey/tests/lonely.psu.Rout.save0000755000176200001440000002247212372251125016703 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ## lonely PSUs by design > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(api) > ## not certainty PSUs by fpc > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1) > summary(ds) Stratified Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 413 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > try(svymean(~api00,ds)) Error in onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (413) has only one PSU at stage 1 > try(svymean(~api00, as.svrepdesign(ds))) Error in jknweights(design$strata[, 1], design$cluster[, 1], fpc = fpc, : Stratum413has only one PSU > options(survey.lonely.psu="remove") > svymean(~api00,ds) mean SE api00 644.17 5.8058 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8058 > options(survey.lonely.psu="certainty") > svymean(~api00,ds) mean SE api00 644.17 5.8058 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8058 > options(survey.lonely.psu="adjust") > svymean(~api00,ds) mean SE api00 644.17 5.8281 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8267 > options(survey.lonely.psu="average") > svymean(~api00,ds) mean SE api00 644.17 6.0096 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8217 > > ## fpc specified > fpc<-ifelse(apiclus1$dnum==413, 1,1000) > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1,fpc=fpc) > summary(ds) Stratified Independent Sampling design svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1, fpc = fpc) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 413 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 Population stratum sizes (PSUs): 135 178 197 255 406 413 437 448 510 568 61 637 716 778 815 1000 1000 1000 1000 1000 1 1000 1000 1000 1000 1000 1000 1000 1000 1000 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > try(svymean(~api00,ds)) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="remove") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="certainty") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="adjust") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="average") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7501 > > rs<-as.svrepdesign(ds) > svytotal(~api00,rs) total SE api00 3989986 35616 > SE(svytotal(~api00,subset(rs, dnum==413)))==0 [1] TRUE > > ## lonely PSUs after subsetting > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) > ds1<-ds[-31,] > summary(ds1) Stratified Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1, dnum != 413)) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 1 4 12 21 9 11 37 2 4 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="remove") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="certainty") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="adjust") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="average") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > > ## with adjustment > options(survey.adjust.domain.lonely=TRUE) > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) > ds1<-ds[-31,] > summary(ds1) Stratified Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1, dnum != 413)) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 1 4 12 21 9 11 37 2 4 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > try(svymean(~api00,ds1)) mean SE api00 645.14 5.8909 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="remove") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="certainty") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="adjust") > svymean(~api00,ds1) mean SE api00 645.14 5.9119 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="average") > svymean(~api00,ds1) mean SE api00 645.14 6.0914 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > > proc.time() user system elapsed 0.449 0.028 0.484 survey/tests/pps.Rout.saved0000644000176200001440000000763113101456333015535 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(election) > > dpps<- svydesign(id=~1, weights=~wt, fpc=~p, data=election_pps, pps="brewer") > dppswr <-svydesign(id=~1, weights=~wt, data=election_pps) > svytotal(~Bush+Kerry+Nader, dpps) total SE Bush 64518472 2447629 Kerry 51202102 2450787 Nader 478530 102420 > svytotal(~Bush+Kerry+Nader, dppswr) total SE Bush 64518472 2671455 Kerry 51202102 2679433 Nader 478530 105303 > > ##subsets > svytotal(~Bush+Kerry+Nader, subset(dpps, Nader>0)) total SE Bush 34944285 5399833 Kerry 25581714 4028434 Nader 478530 102420 > > ##multistage: should agree with STRS analysis > data(api) > dclus2<-svydesign(id = ~dnum + snum, fpc = ~fpc1 + fpc2, data = apiclus2) > dclus2pps<-svydesign(id = ~dnum + snum, fpc = ~I(40/fpc1) + I(pmin(1,5/fpc2)), data = apiclus2) > > all.equal(svytotal(~sch.wide,dclus2), svytotal(~sch.wide,dclus2pps)) [1] TRUE > all.equal(svymean(~sch.wide,dclus2), svymean(~sch.wide,dclus2pps)) [1] TRUE > all.equal(svytotal(~enroll,dclus2), svytotal(~enroll,dclus2pps)) [1] TRUE > > ## the new without-replacement methods > data(election) > dpps_br<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") > dpps_ov<- svydesign(id=~1, fpc=~p, data=election_pps, pps="overton") > dpps_hr<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40)) > dpps_hr1<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR()) > dpps_ht<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob)) > ## Yates-Grundy type > dpps_yg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob),variance="YG") > dpps_hryg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40),variance="YG") > > ## The with-replacement approximation > svytotal(~Bush+Kerry+Nader, dpps_ht) total SE Bush 64518472 2604404 Kerry 51202102 2523712 Nader 478530 102326 > svytotal(~Bush+Kerry+Nader, dpps_yg) total SE Bush 64518472 2406526 Kerry 51202102 2408091 Nader 478530 101664 > svytotal(~Bush+Kerry+Nader, dpps_hr) total SE Bush 64518472 2624662 Kerry 51202102 2525222 Nader 478530 102793 > svytotal(~Bush+Kerry+Nader, dpps_hryg) total SE Bush 64518472 2436738 Kerry 51202102 2439845 Nader 478530 102016 > svytotal(~Bush+Kerry+Nader, dpps_hr1) total SE Bush 64518472 2472753 Kerry 51202102 2426842 Nader 478530 102595 > svytotal(~Bush+Kerry+Nader, dpps_br) total SE Bush 64518472 2447629 Kerry 51202102 2450787 Nader 478530 102420 > svytotal(~Bush+Kerry+Nader, dpps_ov) total SE Bush 64518472 2939608 Kerry 51202102 1964632 Nader 478530 104373 > > ## subsets > svytotal(~Bush+Kerry+Nader, subset(dpps_ht, Nader>0)) total SE Bush 34944285 5406348 Kerry 25581714 4047741 Nader 478530 102326 > svytotal(~Bush+Kerry+Nader, subset(dpps_hryg, Nader>0)) total SE Bush 34944285 5377659 Kerry 25581714 4010908 Nader 478530 102016 > > ## counts > svyby(~Bush+Kerry+Nader,~I(Nader>0), unwtd.count,design=dpps_ht) I(Nader > 0) counts se FALSE FALSE 19 0 TRUE TRUE 21 0 > > proc.time() user system elapsed 1.946 0.058 2.017 survey/tests/check.Rout.save0000755000176200001440000001301512372251125015641 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(fpc) > ## test various possibilities for svydesign > a<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, variables=~x, data=fpc, nest=TRUE) > a Stratified Independent Sampling design (with replacement) svydesign(weights = ~weight, ids = ~psuid, strata = ~stratid, variables = ~x, data = fpc, nest = TRUE) > svymean(~x,a) mean SE x 5.4481 0.7413 > a<-svydesign(weights=~weight, ids=~0, strata=~stratid, variables=~x, data=fpc, nest=TRUE) > a Stratified Independent Sampling design (with replacement) svydesign(weights = ~weight, ids = ~0, strata = ~stratid, variables = ~x, data = fpc, nest = TRUE) > svymean(~x,a) mean SE x 5.4481 0.7413 > a<-svydesign(weights=1, ids=~0, strata=~stratid, variables=~x, data=fpc, nest=TRUE) > a Stratified Independent Sampling design (with replacement) svydesign(weights = 1, ids = ~0, strata = ~stratid, variables = ~x, data = fpc, nest = TRUE) > svymean(~x,a) mean SE x 44.2 6.237 > a<-svydesign(ids=~0, strata=~stratid, variables=~x, data=fpc, nest=TRUE) Warning message: In svydesign.default(ids = ~0, strata = ~stratid, variables = ~x, : No weights or probabilities supplied, assuming equal probability > a Stratified Independent Sampling design (with replacement) svydesign(ids = ~0, strata = ~stratid, variables = ~x, data = fpc, nest = TRUE) > svymean(~x,a) mean SE x 5.525 0.7796 > a<-svydesign(ids=~0, strata=~stratid, prob=~I(1/weight),variables=~x, data=fpc, nest=TRUE) > a Stratified Independent Sampling design (with replacement) svydesign(ids = ~0, strata = ~stratid, prob = ~I(1/weight), variables = ~x, data = fpc, nest = TRUE) > svymean(~x,a) mean SE x 5.4481 0.7413 > a<-svydesign(ids=~psuid, strata=~stratid, variables=~x, data=fpc, nest=TRUE) Warning message: In svydesign.default(ids = ~psuid, strata = ~stratid, variables = ~x, : No weights or probabilities supplied, assuming equal probability > a Stratified Independent Sampling design (with replacement) svydesign(ids = ~psuid, strata = ~stratid, variables = ~x, data = fpc, nest = TRUE) > svymean(~x,a) mean SE x 5.525 0.7796 > a<-svydesign(ids=~psuid, variables=~x, data=fpc, nest=TRUE) Warning message: In svydesign.default(ids = ~psuid, variables = ~x, data = fpc, nest = TRUE) : No weights or probabilities supplied, assuming equal probability > a 1 - level Cluster Sampling design (with replacement) With (5) clusters. svydesign(ids = ~psuid, variables = ~x, data = fpc, nest = TRUE) > svymean(~x,a) mean SE x 5.525 0.838 > a<-svydesign(ids=~psuid, weights=~weight, variables=~x, data=fpc, nest=TRUE) > a 1 - level Cluster Sampling design (with replacement) With (5) clusters. svydesign(ids = ~psuid, weights = ~weight, variables = ~x, data = fpc, nest = TRUE) > svymean(~x,a) mean SE x 5.4481 0.7938 > a<-svydesign(ids=~stratid+psuid, weights=~weight, variables=~x, data=fpc) > a 2 - level Cluster Sampling design (with replacement) With (2, 8) clusters. svydesign(ids = ~stratid + psuid, weights = ~weight, variables = ~x, data = fpc) > svymean(~x,a) mean SE x 5.4481 0.5465 > a<-svydesign(ids=~stratid+psuid, variables=~x, data=fpc) Warning message: In svydesign.default(ids = ~stratid + psuid, variables = ~x, data = fpc) : No weights or probabilities supplied, assuming equal probability > a 2 - level Cluster Sampling design (with replacement) With (2, 8) clusters. svydesign(ids = ~stratid + psuid, variables = ~x, data = fpc) > svymean(~x,a) mean SE x 5.525 0.5188 > a<-svydesign(weights=fpc$weight, ids=fpc$psuid, strata=fpc$stratid, variables=fpc[,"x",drop=FALSE], nest=TRUE) > a Stratified Independent Sampling design (with replacement) svydesign(weights = fpc$weight, ids = fpc$psuid, strata = fpc$stratid, variables = fpc[, "x", drop = FALSE], nest = TRUE) > svymean(~x,a) mean SE x 5.4481 0.7413 > a<-svydesign(weights=fpc$weight, ids=fpc$psuid, strata=fpc$stratid, variables=fpc[,4:6], nest=TRUE) > a Stratified Independent Sampling design (with replacement) svydesign(weights = fpc$weight, ids = fpc$psuid, strata = fpc$stratid, variables = fpc[, 4:6], nest = TRUE) > svymean(~x,a) mean SE x 5.4481 0.7413 > > a<-svydesign(weights=fpc$weight, ids=fpc$psuid, variables=fpc[,4:6], fpc=rep(27,8)) > a 1 - level Cluster Sampling design With (5) clusters. svydesign(weights = fpc$weight, ids = fpc$psuid, variables = fpc[, 4:6], fpc = rep(27, 8)) > svymean(~x,a) mean SE x 5.4481 0.7165 > > a<-svydesign(weights=fpc$weight, ids=fpc$psuid, strata=fpc$stratid, nest=TRUE, variables=fpc[,4:6], fpc=fpc$Nh) > a Stratified Independent Sampling design svydesign(weights = fpc$weight, ids = fpc$psuid, strata = fpc$stratid, nest = TRUE, variables = fpc[, 4:6], fpc = fpc$Nh) > svymean(~x,a) mean SE x 5.4481 0.616 > > proc.time() user system elapsed 0.201 0.024 0.232 survey/tests/domain.Rout.save0000644000176200001440000001553312372251125016037 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## > ## Domain means can be written as ratio estimators or as regression coefficients > ## > ## This code checks that subsetting the design object gives the same results as > ## these approaches. > ## > > > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(fpc) > dfpc<-svydesign(id=~psuid,strat=~stratid,weight=~weight,data=fpc,nest=TRUE) > dsub<-subset(dfpc,x>4) > (m1<-svymean(~x,design=dsub)) mean SE x 6.195 0.7555 > > ## These should give the same domain estimates and standard errors > (m2<-svyby(~x,~I(x>4),design=dfpc, svymean,keep.var=TRUE)) I(x > 4) x se FALSE FALSE 3.314286 0.3117042 TRUE TRUE 6.195000 0.7555129 > m3<-svyglm(x~I(x>4)+0,design=dfpc) > summary(m3) Call: svyglm(formula = x ~ I(x > 4) + 0, design = dfpc) Survey design: svydesign(id = ~psuid, strat = ~stratid, weight = ~weight, data = fpc, nest = TRUE) Coefficients: Estimate Std. Error t value Pr(>|t|) I(x > 4)FALSE 3.3143 0.3117 10.63 0.000127 *** I(x > 4)TRUE 6.1950 0.7555 8.20 0.000439 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for gaussian family taken to be 2.557379) Number of Fisher Scoring iterations: 2 > (m4<-svyratio(~I(x*(x>4)),~as.numeric(x>4), dfpc)) Ratio estimator: svyratio.survey.design2(~I(x * (x > 4)), ~as.numeric(x > 4), dfpc) Ratios= as.numeric(x > 4) I(x * (x > 4)) 6.195 SEs= as.numeric(x > 4) I(x * (x > 4)) 0.7555129 > stopifnot(isTRUE(all.equal(SE(m2), as.vector(SE(m3))))) > stopifnot(isTRUE(all.equal(SE(m2)[2], as.vector(SE(m4))))) > > ## with strata > data(api) > dstrat<-svydesign(id=~1, strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) > m1<-svymean(~enroll, subset(dstrat, comp.imp=="Yes")) > m2<-svyglm(enroll~comp.imp-1, dstrat) > m3<- svyratio(~I(enroll*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), dstrat) > stopifnot(isTRUE(all.equal(as.vector(SE(m2)["comp.impYes"]), as.vector(SE(m1))))) > stopifnot(isTRUE( all.equal(as.vector(SE(m1)), as.vector(drop(SE(m3)))))) > > ## with calibration > dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) > pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) > (dclus1g3 <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069))) 1 - level Cluster Sampling design With (15) clusters. calibrate(dclus1, ~stype + api99, c(pop.totals, api99 = 3914069)) > > m1<-svymean(~api00, subset(dclus1g3, comp.imp=="Yes")) > m3<-svyratio(~I(api00*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), dclus1g3) > m2<-svyglm(api00~comp.imp-1, dclus1g3) > stopifnot(isTRUE( all.equal(as.vector(SE(m2)["comp.impYes"]), as.vector(SE(m1))))) > stopifnot(isTRUE( all.equal(as.vector(SE(m1)), as.vector(drop(SE(m3)))))) > > ## with raking > pop.types <- data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018)) > pop.schwide <- data.frame(sch.wide=c("No","Yes"), Freq=c(1072,5122)) > dclus1r<-rake(dclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) > m1<-svymean(~api00, subset(dclus1r, comp.imp=="Yes")) > m2<-svyglm(api00~comp.imp-1, dclus1r) > m3<-svyratio(~I(api00*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), dclus1r) > stopifnot(isTRUE( all.equal(as.vector(SE(m2)["comp.impYes"]), as.vector(SE(m1))))) > stopifnot(isTRUE( all.equal(as.vector(SE(m1)), as.vector(drop(SE(m3)))))) > > > > ## > ## based on bug report from Takahiro Tsuchiya for version 3.4 > ## > rei<-read.table(tmp<-textConnection( + " id N n.a h n.ah n.h sub y + 1 1 300 20 1 12 5 TRUE 1 + 2 2 300 20 1 12 5 TRUE 2 + 3 3 300 20 1 12 5 TRUE 3 + 4 4 300 20 1 12 5 TRUE 4 + 5 5 300 20 1 12 5 TRUE 5 + 6 6 300 20 1 12 5 FALSE NA + 7 7 300 20 1 12 5 FALSE NA + 8 8 300 20 1 12 5 FALSE NA + 9 9 300 20 1 12 5 FALSE NA + 10 10 300 20 1 12 5 FALSE NA + 11 11 300 20 1 12 5 FALSE NA + 12 12 300 20 1 12 5 FALSE NA + 13 13 300 20 2 8 3 TRUE 6 + 14 14 300 20 2 8 3 TRUE 7 + 15 15 300 20 2 8 3 TRUE 8 + 16 16 300 20 2 8 3 FALSE NA + 17 17 300 20 2 8 3 FALSE NA + 18 18 300 20 2 8 3 FALSE NA + 19 19 300 20 2 8 3 FALSE NA + 20 20 300 20 2 8 3 FALSE NA + "), header=TRUE) > close(tmp) > > > des.rei2 <- twophase(id=list(~id,~id), strata=list(NULL,~h), + fpc=list(~N,NULL), subset=~sub, data=rei, method="full") > tot2<- svytotal(~y, subset(des.rei2, y>3)) > > rei$y<-rei$y*(rei$y>3) > ## based on Sarndal et al (9.4.14) > rei$w.ah <- rei$n.ah / rei$n.a > a.rei <- aggregate(rei, by=list(rei$h), mean, na.rm=TRUE) > a.rei$S.ysh <- tapply(rei$y, rei$h, var, na.rm=TRUE) > a.rei$y.u <- sum(a.rei$w.ah * a.rei$y) > V <- with(a.rei, sum(N * (N-1) * ((n.ah-1)/(n.a-1) - (n.h-1)/(N-1)) * w.ah * S.ysh / n.h)) > V <- V + with(a.rei, sum(N * (N-n.a) * w.ah * (y - y.u)^2 / (n.a-1))) > > a.rei$f.h<-with(a.rei, n.h/n.ah) > Vphase2<-with(a.rei, sum(N*N*w.ah^2* ((1-f.h)/n.h) *S.ysh)) > > a.rei$f<-with(a.rei, n.a/N) > a.rei$delta.h<-with(a.rei, (1/n.h)*(n.a-n.ah)/(n.a-1)) > Vphase1<-with(a.rei, sum(N*N*((1-f)/n.a)*( w.ah*(1-delta.h)*S.ysh+ ((n.a)/(n.a-1))*w.ah*(y-y.u)^2))) > > V [1] 70761.47 > Vphase1 [1] 44325.47 > Vphase2 [1] 26436 > vcov(tot2) [,1] [1,] 70761.47 attr(,"phases") attr(,"phases")$phase1 [,1] [1,] 44325.47 attr(,"phases")$phase2 [,1] [1,] 26436 > > ## comparing to regression > reg<-svyglm(y~I(y<4), design=des.rei2) > mn<-svymean(~y, subset(des.rei2,y>3)) > all.equal(as.vector(coef(reg))[1],as.vector(coef(mn))) [1] TRUE > all.equal(as.vector(SE(reg))[1],as.vector(SE(mn))) [1] TRUE > vcov(mn) [,1] [1,] 0.3292258 attr(,"phases") attr(,"phases")$phase1 [,1] [1,] 0.1599264 attr(,"phases")$phase2 [,1] [1,] 0.1692994 > vcov(reg) (Intercept) I(y < 4)TRUE (Intercept) 0.3292258 -0.3292258 I(y < 4)TRUE -0.3292258 0.5901907 attr(,"phases") attr(,"phases")$phase1 (Intercept) I(y < 4)TRUE (Intercept) 0.1599264 -0.1599264 I(y < 4)TRUE -0.1599264 0.2588542 attr(,"phases")$phase2 (Intercept) I(y < 4)TRUE (Intercept) 0.1692994 -0.1692994 I(y < 4)TRUE -0.1692994 0.3313365 > > > proc.time() user system elapsed 1.707 0.055 1.778 survey/tests/README0000644000176200001440000000361412242746122013637 0ustar liggesusersapi.R: Run example(api) to check that results haven't changed bycovmat.R: Check that svyby(,covmat=TRUE) is getting the ordering of estimates correct. caleg.R: Calibration examples - calibration to information on PSUs rather than population - check that bounded weights really are bounded - check that linear calibration with error proportional to x agrees with ratio estimators check.R: Many combinations of options for svydesign deff.R: Regression test on design effects, especially for totals DBIcheck.R: Check that we get the same results for SQLite-backed and in-memory versions of the API data. domain.R: Check that domain estimators of means and their standard errors agree with derivations as ratio and regression estimators. Repeat for calibrated and raked designs fpc.R: Many ways to specify fpc kalton.R: Calibration examples from Kalton & Flore-Cervantes, J Off Stat, 19(2) 81-97 lonely.psu.R: All the lonely PSU options multistage.R: Check that a two-stage cluster sample analysis agrees with the hand-calcuated result in Sarndal et al. nwts.R: Compare results from twophase() to published two-phase case-control example nwts-cch.R: Compare results from twophase() to case-cohort analyses in survival package. pps.R: Brewer's approximation for pps without replacement quantile.R: quantile estimation on a lognormal sample rakecheck.R: check that raking by iterative post-stratification agrees with raking using calibrate() regpredict.R: ratio and regression estimation of a total. scoping.R: check that svyglm and svycoxph work inside functions. survcurve.R: check that svykm and predict.coxph give the same result when a data set is doubled and the two replicates of each observation are treated as a cluster. twophase.R: separately verifiable examples of twophase studies survey/tests/rakecheck.R0000644000176200001440000000305112242746122015015 0ustar liggesuserslibrary(survey) data(api) dclus1 <- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1 <- as.svrepdesign(dclus1) ## population marginal totals for each stratum pop.types <- data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018)) pop.schwide <- data.frame(sch.wide=c("No","Yes"), Freq=c(1072,5122)) rclus1r <- rake(rclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) svymean(~api00, rclus1r) svytotal(~enroll, rclus1r) ff<-~stype+sch.wide poptotals<-colSums(model.matrix(ff,model.frame(ff,apipop))) rclus1g<-calibrate(rclus1, ~stype+sch.wide, poptotals,calfun="raking") svymean(~api00,rclus1g) svytotal(~enroll,rclus1g) summary(weights(rclus1g)/weights(rclus1r)) ## Do it for a design without replicate weights dclus1r<-rake(dclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) svymean(~api00, dclus1r) svytotal(~enroll, dclus1r) dclus1g<-calibrate(dclus1, ~stype+sch.wide, poptotals,calfun="raking") svymean(~api00,dclus1g) svytotal(~enroll,dclus1g) summary(weights(dclus1g)/weights(dclus1r)) ## Example of raking with partial joint distributions pop.table <- xtabs(~stype+sch.wide,apipop) pop.imp<-data.frame(comp.imp=c("No","Yes"),Freq=c(1712,4482)) dclus1r2<-rake(dclus1, list(~stype+sch.wide, ~comp.imp), list(pop.table, pop.imp)) svymean(~api00, dclus1r2) ff1 <-~stype*sch.wide+comp.imp poptotals1<-colSums(model.matrix(ff1,model.frame(ff1,apipop))) dclus1g2<-calibrate(dclus1, ~stype*sch.wide+comp.imp, poptotals1, calfun="raking") svymean(~api00, dclus1g2) summary(weights(dclus1r2)/weights(dclus1g2)) survey/tests/domain.R0000644000176200001440000001016512242746122014350 0ustar liggesusers## ## Domain means can be written as ratio estimators or as regression coefficients ## ## This code checks that subsetting the design object gives the same results as ## these approaches. ## library(survey) data(fpc) dfpc<-svydesign(id=~psuid,strat=~stratid,weight=~weight,data=fpc,nest=TRUE) dsub<-subset(dfpc,x>4) (m1<-svymean(~x,design=dsub)) ## These should give the same domain estimates and standard errors (m2<-svyby(~x,~I(x>4),design=dfpc, svymean,keep.var=TRUE)) m3<-svyglm(x~I(x>4)+0,design=dfpc) summary(m3) (m4<-svyratio(~I(x*(x>4)),~as.numeric(x>4), dfpc)) stopifnot(isTRUE(all.equal(SE(m2), as.vector(SE(m3))))) stopifnot(isTRUE(all.equal(SE(m2)[2], as.vector(SE(m4))))) ## with strata data(api) dstrat<-svydesign(id=~1, strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) m1<-svymean(~enroll, subset(dstrat, comp.imp=="Yes")) m2<-svyglm(enroll~comp.imp-1, dstrat) m3<- svyratio(~I(enroll*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), dstrat) stopifnot(isTRUE(all.equal(as.vector(SE(m2)["comp.impYes"]), as.vector(SE(m1))))) stopifnot(isTRUE( all.equal(as.vector(SE(m1)), as.vector(drop(SE(m3)))))) ## with calibration dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) (dclus1g3 <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069))) m1<-svymean(~api00, subset(dclus1g3, comp.imp=="Yes")) m3<-svyratio(~I(api00*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), dclus1g3) m2<-svyglm(api00~comp.imp-1, dclus1g3) stopifnot(isTRUE( all.equal(as.vector(SE(m2)["comp.impYes"]), as.vector(SE(m1))))) stopifnot(isTRUE( all.equal(as.vector(SE(m1)), as.vector(drop(SE(m3)))))) ## with raking pop.types <- data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018)) pop.schwide <- data.frame(sch.wide=c("No","Yes"), Freq=c(1072,5122)) dclus1r<-rake(dclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) m1<-svymean(~api00, subset(dclus1r, comp.imp=="Yes")) m2<-svyglm(api00~comp.imp-1, dclus1r) m3<-svyratio(~I(api00*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), dclus1r) stopifnot(isTRUE( all.equal(as.vector(SE(m2)["comp.impYes"]), as.vector(SE(m1))))) stopifnot(isTRUE( all.equal(as.vector(SE(m1)), as.vector(drop(SE(m3)))))) ## ## based on bug report from Takahiro Tsuchiya for version 3.4 ## rei<-read.table(tmp<-textConnection( " id N n.a h n.ah n.h sub y 1 1 300 20 1 12 5 TRUE 1 2 2 300 20 1 12 5 TRUE 2 3 3 300 20 1 12 5 TRUE 3 4 4 300 20 1 12 5 TRUE 4 5 5 300 20 1 12 5 TRUE 5 6 6 300 20 1 12 5 FALSE NA 7 7 300 20 1 12 5 FALSE NA 8 8 300 20 1 12 5 FALSE NA 9 9 300 20 1 12 5 FALSE NA 10 10 300 20 1 12 5 FALSE NA 11 11 300 20 1 12 5 FALSE NA 12 12 300 20 1 12 5 FALSE NA 13 13 300 20 2 8 3 TRUE 6 14 14 300 20 2 8 3 TRUE 7 15 15 300 20 2 8 3 TRUE 8 16 16 300 20 2 8 3 FALSE NA 17 17 300 20 2 8 3 FALSE NA 18 18 300 20 2 8 3 FALSE NA 19 19 300 20 2 8 3 FALSE NA 20 20 300 20 2 8 3 FALSE NA "), header=TRUE) close(tmp) des.rei2 <- twophase(id=list(~id,~id), strata=list(NULL,~h), fpc=list(~N,NULL), subset=~sub, data=rei, method="full") tot2<- svytotal(~y, subset(des.rei2, y>3)) rei$y<-rei$y*(rei$y>3) ## based on Sarndal et al (9.4.14) rei$w.ah <- rei$n.ah / rei$n.a a.rei <- aggregate(rei, by=list(rei$h), mean, na.rm=TRUE) a.rei$S.ysh <- tapply(rei$y, rei$h, var, na.rm=TRUE) a.rei$y.u <- sum(a.rei$w.ah * a.rei$y) V <- with(a.rei, sum(N * (N-1) * ((n.ah-1)/(n.a-1) - (n.h-1)/(N-1)) * w.ah * S.ysh / n.h)) V <- V + with(a.rei, sum(N * (N-n.a) * w.ah * (y - y.u)^2 / (n.a-1))) a.rei$f.h<-with(a.rei, n.h/n.ah) Vphase2<-with(a.rei, sum(N*N*w.ah^2* ((1-f.h)/n.h) *S.ysh)) a.rei$f<-with(a.rei, n.a/N) a.rei$delta.h<-with(a.rei, (1/n.h)*(n.a-n.ah)/(n.a-1)) Vphase1<-with(a.rei, sum(N*N*((1-f)/n.a)*( w.ah*(1-delta.h)*S.ysh+ ((n.a)/(n.a-1))*w.ah*(y-y.u)^2))) V Vphase1 Vphase2 vcov(tot2) ## comparing to regression reg<-svyglm(y~I(y<4), design=des.rei2) mn<-svymean(~y, subset(des.rei2,y>3)) all.equal(as.vector(coef(reg))[1],as.vector(coef(mn))) all.equal(as.vector(SE(reg))[1],as.vector(SE(mn))) vcov(mn) vcov(reg) survey/tests/api.R0000644000176200001440000000016412242746122013650 0ustar liggesuserslibrary(survey) options(survey.replicates.mse=TRUE) example(api) options(survey.replicates.mse=FALSE) example(api) survey/tests/nwts-cch.Rout.save0000644000176200001440000000610212750744721016317 0ustar liggesusers R version 3.3.1 (2016-06-21) -- "Bug in Your Hair" Copyright (C) 2016 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.4.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Loading required package: grid Loading required package: Matrix Loading required package: survival Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > library(survival) > data(nwtco) > > ntwco<-subset(nwtco, !is.na(edrel)) > > load("nwtco-subcohort.rda") > nwtco$subcohort<-subcohort > > d_BorganII <- twophase(id=list(~seqno,~seqno), + strata=list(NULL,~interaction(instit,rel)), + data=nwtco, subset=~I(rel |subcohort)) > > ##Coefficient results same as Splus with code from > ## http://faculty.washington.edu/norm/software.html > ## SE slightly larger due to using sandwich variance. > > svycoxph(Surv(edrel, rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganII) Call: svycoxph(formula = Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), design = d_BorganII) coef exp(coef) se(coef) z p factor(stage)2 0.4629 1.5886 0.1809 2.56 0.0105 factor(stage)3 0.5831 1.7916 0.1785 3.27 0.0011 factor(stage)4 1.0597 2.8854 0.2052 5.16 2.4e-07 factor(histol)2 1.5974 4.9403 0.1334 11.97 < 2e-16 I(age/12) 0.0299 1.0304 0.0334 0.90 0.3697 Likelihood ratio test= on 5 df, p= n= 1062, number of events= 571 > > ## > ## This gives higher standard errors. calibrate() does not recompute the > ## finite population correction if a calibration variable happens to predict > ## sampling perfectly. It probably should. > ## > d_BorganIIps<-calibrate(twophase(id=list(~seqno,~seqno), + strata=list(NULL,~rel), + data=nwtco, subset=~I(rel |subcohort)), + phase=2, formula=~interaction(instit,rel), + epsilon=1e-10) > > svycoxph(Surv(edrel, rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganIIps) Call: svycoxph(formula = Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), design = d_BorganIIps) coef exp(coef) se(coef) z p factor(stage)2 0.4629 1.5886 0.1808 2.56 0.0104 factor(stage)3 0.5831 1.7916 0.1784 3.27 0.0011 factor(stage)4 1.0597 2.8854 0.2051 5.17 2.4e-07 factor(histol)2 1.5974 4.9403 0.1304 12.25 < 2e-16 I(age/12) 0.0299 1.0304 0.0333 0.90 0.3688 Likelihood ratio test= on 5 df, p= n= 1062, number of events= 571 > > proc.time() user system elapsed 1.823 0.105 1.962 survey/tests/bycovmat.Rout.save0000644000176200001440000000745012372251125016413 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(api) > options(survey.replicates.mse=TRUE) > dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) > rclus1<-as.svrepdesign(dclus1) > > a<-svyby(~api00+api99, ~comp.imp+sch.wide,design=rclus1,svymean, + covmat=TRUE,drop.empty.groups=FALSE) > b<-svyby(~api00+api99, ~comp.imp+sch.wide,design=rclus1,svymean, + covmat=TRUE,drop.empty.groups=TRUE) > > stopifnot(all(na.omit( + as.vector(as.matrix(SE(a)))==sqrt(diag(vcov(a))) + ))) > stopifnot(all( + as.vector(as.matrix(SE(b)))==sqrt(diag(vcov(b))) + )) > > rat <- svyratio(~ell+mobility, ~mobility+meals, dclus1,covmat=TRUE) > all <- svytotal(~ell+mobility+meals, dclus1) > > stopifnot(all(abs(vcov(svycontrast(all, + list(quote(ell/mobility), + quote(mobility/mobility), + quote(ell/meals),quote(mobility/meals)))) + -vcov(rat))<1e-10)) > > stopifnot(all(abs(SE(rat)-sqrt(diag(vcov(rat))))<1e-10)) > > rat <- svyratio(~ell+mobility, ~mobility+meals, rclus1,covmat=TRUE) > all <- svytotal(~ell+mobility+meals, rclus1, return.replicates=TRUE) > > con<-svycontrast(all, + list(quote(ell/mobility), + quote(mobility/mobility), + quote(ell/meals),quote(mobility/meals))) > > stopifnot(all(abs(survey:::svrVar(con$replicates, rclus1$scale,rclus1$rscales,mse=rclus1$mse, coef=coef(con))-vcov(rat))<1e-10)) > > options(survey.replicates.mse=FALSE) > dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) > rclus1<-as.svrepdesign(dclus1) > > a<-svyby(~api00+api99, ~comp.imp+sch.wide,design=rclus1,svymean, + covmat=TRUE,drop.empty.groups=FALSE) > b<-svyby(~api00+api99, ~comp.imp+sch.wide,design=rclus1,svymean, + covmat=TRUE,drop.empty.groups=TRUE) > > stopifnot(all(na.omit( + as.vector(as.matrix(SE(a)))==sqrt(diag(vcov(a))) + ))) > stopifnot(all( + as.vector(as.matrix(SE(b)))==sqrt(diag(vcov(b))) + )) > > rat <- svyratio(~ell+mobility, ~mobility+meals, dclus1,covmat=TRUE) > all <- svytotal(~ell+mobility+meals, dclus1) > > stopifnot(all(abs(vcov(svycontrast(all, + list(quote(ell/mobility), + quote(mobility/mobility), + quote(ell/meals),quote(mobility/meals)))) + -vcov(rat))<1e-10)) > > stopifnot(all(abs(SE(rat)-sqrt(diag(vcov(rat))))<1e-10)) > > rat <- svyratio(~ell+mobility, ~mobility+meals, rclus1,covmat=TRUE) > all <- svytotal(~ell+mobility+meals, rclus1, return.replicates=TRUE) > > con<-svycontrast(all, + list(quote(ell/mobility), + quote(mobility/mobility), + quote(ell/meals),quote(mobility/meals))) > > stopifnot(all(abs(survey:::svrVar(con$replicates, rclus1$scale,rclus1$rscales,mse=rclus1$mse, coef=coef(con))-vcov(rat))<1e-10)) > > > > proc.time() user system elapsed 0.299 0.027 0.333 survey/tests/regpredict.Rout.save0000644000176200001440000000472012372251125016714 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(api) > dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) > > > ## regression estimator of total, three ways > pop<-data.frame(enroll=sum(apipop$enroll, na.rm=TRUE)) > npop <- sum(!is.na(apipop$enroll)) > > api.reg <- svyglm(api.stu~enroll, design=dstrat) > a <- predict(api.reg, newdata=pop, total=npop) > b <- svytotal(~api.stu, calibrate(dstrat, ~enroll, pop=c(npop, pop$enroll))) > > all.equal(as.vector(coef(a)),as.vector(coef(b))) [1] TRUE > all.equal(as.vector(SE(a)), as.vector(SE(b))) [1] TRUE > if(!is.null(getOption("DEBUG"))){ ## uses 6194x6194 matrix + d <- predict(api.reg, newdata=na.omit(apipop[,"enroll",drop=FALSE])) + all.equal(as.vector(coef(a)), as.vector(sum(coef(d)))) + all.equal(as.vector(SE(a)), as.vector(sqrt(sum(vcov(d))))) + } > > ## classical ratio estimator, four ways. > api.reg2 <- svyglm(api.stu~enroll-1, design=dstrat, + family=quasi(link="identity", var="mu")) > > a <- predict(api.reg2, newdata=pop, total=npop) > b <- svytotal(~api.stu, + calibrate(dstrat, ~enroll-1, pop= pop$enroll, variance=2)) > e <- predict(svyratio(~api.stu, ~enroll, dstrat),total=pop$enroll) > > all.equal(as.vector(coef(a)),as.vector(coef(b))) [1] TRUE > all.equal(as.vector(SE(a)), as.vector(SE(b))) [1] TRUE > all.equal(as.vector(coef(a)),as.vector(e$total)) [1] TRUE > all.equal(as.vector(SE(a)), as.vector(e$se)) [1] TRUE > if(!is.null(getOption("DEBUG"))){## uses 6194x6194 matrix + d <- predict(api.reg2, newdata=na.omit(apipop[,"enroll",drop=FALSE])) + all.equal(as.vector(coef(a)), as.vector(sum(coef(d)))) + all.equal(as.vector(SE(a)), as.vector(sqrt(sum(vcov(d))))) + } > > proc.time() user system elapsed 0.239 0.026 0.272 survey/tests/fpc.R0000644000176200001440000000011612242746122013644 0ustar liggesuserslibrary(survey) ## check many permutations of fpc specification example(fpc) survey/tests/twophase.R0000644000176200001440000001176212242746122014737 0ustar liggesuserslibrary(survey) ## two-phase simple random sampling. data(pbc, package="survival") pbc$id<-1:nrow(pbc) pbc$randomized<-with(pbc, !is.na(trt) & trt>-9) (d2pbc<-twophase(id=list(~id,~id), data=pbc, subset=~I(!randomized))) m<-svymean(~bili, d2pbc) all.equal(as.vector(coef(m)),with(pbc, mean(bili[!randomized]))) all.equal(as.vector(SE(m)), with(pbc, sd(bili[!randomized])/sqrt(sum(!randomized))), tolerance=0.001) ## two-stage sampling as two-phase data(mu284) ii<-with(mu284, c(1:15, rep(1:5,n2[1:5]-3))) mu284.1<-mu284[ii,] mu284.1$id<-1:nrow(mu284.1) mu284.1$sub<-rep(c(TRUE,FALSE),c(15,34-15)) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) ## first phase cluster sample, second phase stratified within cluster (d2mu284<-twophase(id=list(~id1,~id),strata=list(NULL,~id1), fpc=list(~n1,NULL),data=mu284.1,subset=~sub,method="approx")) (d22mu284<-twophase(id=list(~id1,~id),strata=list(NULL,~id1), fpc=list(~n1,NULL),data=mu284.1,subset=~sub,method="full")) summary(d2mu284) t1<-svytotal(~y1, dmu284) t2<-svytotal(~y1, d2mu284) t22<-svytotal(~y1,d22mu284) m1<-svymean(~y1, dmu284) m2<-svymean(~y1, d2mu284) m22<-svymean(~y1, d22mu284) all.equal(coef(t1),coef(t2)) all.equal(coef(t1),coef(t22)) all.equal(coef(m1),coef(m2)) all.equal(coef(m1),coef(m22)) all.equal(as.vector(SE(m1)),as.vector(SE(m2))) all.equal(as.vector(SE(m1)),as.vector(SE(m22))) all.equal(as.vector(SE(t1)),as.vector(SE(t2))) all.equal(as.vector(SE(t1)),as.vector(SE(t22))) ## case-cohort design ##this example requires R 2.3.1 or later for cch and data. library("survival") data(nwtco, package="survival") ## unstratified, equivalent to Lin & Ying (1993) print(dcchs<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco)) cch1<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcchs) dcchs2<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco,method="approx") cch1.2<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcchs) all.equal(coef(cch1),coef(cch1.2)) all.equal(SE(cch1),SE(cch1.2)) ## Using survival::cch subcoh <- nwtco$in.subcohort selccoh <- with(nwtco, rel==1|subcoh==1) ccoh.data <- nwtco[selccoh,] ccoh.data$subcohort <- subcoh[selccoh] cch2<-cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), data =ccoh.data, subcoh = ~subcohort, id=~seqno, cohort.size=4028, method="LinYing", robust=TRUE) print(all.equal(as.vector(coef(cch1)),as.vector(coef(cch2)))) ## cch has smaller variances by a factor of 1.0005 because ## there is a (n/(n-1)) in the survey phase1 varianace print(all.equal(as.vector(SE(cch1)), as.vector(SE(cch2)),tolerance=0.0006)) ## bug report from Takahiro Tsuchiya for version 3.4 ## We used to not match Sarndal exactly, because our old phase-one ## estimator had a small bias for finite populations rei<-read.table(tmp<-textConnection( " id N n.a h n.ah n.h sub y 1 1 300 20 1 12 5 TRUE 1 2 2 300 20 1 12 5 TRUE 2 3 3 300 20 1 12 5 TRUE 3 4 4 300 20 1 12 5 TRUE 4 5 5 300 20 1 12 5 TRUE 5 6 6 300 20 1 12 5 FALSE NA 7 7 300 20 1 12 5 FALSE NA 8 8 300 20 1 12 5 FALSE NA 9 9 300 20 1 12 5 FALSE NA 10 10 300 20 1 12 5 FALSE NA 11 11 300 20 1 12 5 FALSE NA 12 12 300 20 1 12 5 FALSE NA 13 13 300 20 2 8 3 TRUE 6 14 14 300 20 2 8 3 TRUE 7 15 15 300 20 2 8 3 TRUE 8 16 16 300 20 2 8 3 FALSE NA 17 17 300 20 2 8 3 FALSE NA 18 18 300 20 2 8 3 FALSE NA 19 19 300 20 2 8 3 FALSE NA 20 20 300 20 2 8 3 FALSE NA "), header=TRUE) close(tmp) des.rei <- twophase(id=list(~id,~id), strata=list(NULL,~h), fpc=list(~N,NULL), subset=~sub, data=rei, method="approx") tot<- svytotal(~y, des.rei) des.rei2 <- twophase(id=list(~id,~id), strata=list(NULL,~h), fpc=list(~N,NULL), subset=~sub, data=rei) tot2<- svytotal(~y, des.rei2) ## based on Sarndal et al (9.4.14) rei$w.ah <- rei$n.ah / rei$n.a a.rei <- aggregate(rei, by=list(rei$h), mean, na.rm=TRUE) a.rei$S.ysh <- tapply(rei$y, rei$h, var, na.rm=TRUE) a.rei$y.u <- sum(a.rei$w.ah * a.rei$y) V <- with(a.rei, sum(N * (N-1) * ((n.ah-1)/(n.a-1) - (n.h-1)/(N-1)) * w.ah * S.ysh / n.h)) V <- V + with(a.rei, sum(N * (N-n.a) * w.ah * (y - y.u)^2 / (n.a-1))) a.rei$f.h<-with(a.rei, n.h/n.ah) Vphase2<-with(a.rei, sum(N*N*w.ah^2* ((1-f.h)/n.h) *S.ysh)) a.rei$f<-with(a.rei, n.a/N) a.rei$delta.h<-with(a.rei, (1/n.h)*(n.a-n.ah)/(n.a-1)) Vphase1<-with(a.rei, sum(N*N*((1-f)/n.a)*( w.ah*(1-delta.h)*S.ysh+ ((n.a)/(n.a-1))*w.ah*(y-y.u)^2))) V Vphase1 Vphase2 vcov(tot) vcov(tot2) ## phase 2 identical all.equal(Vphase2,drop(attr(vcov(tot),"phases")$phase2)) all.equal(Vphase2,drop(attr(vcov(tot2),"phases")$phase2)) ## phase 1 differs by 2.6% for old twophase estimator Vphase1/attr(vcov(tot),"phases")$phase1 all.equal(Vphase1,as.vector(attr(vcov(tot2),"phases")$phase1)) survey/tests/DBIcheck.R0000644000176200001440000000354512242746122014501 0ustar liggesusers library(survey) library(RSQLite) data(api) apiclus1$api_stu<-apiclus1$api.stu apiclus1$comp_imp<-apiclus1$comp.imp dclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc,data=apiclus1) dbclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc, data="apiclus1",dbtype="SQLite", dbname=system.file("api.db",package="survey")) m<-svymean(~api00+stype,dclus1) m.db<-svymean(~api00+stype, dbclus1) all.equal(coef(m),coef(m.db)) all.equal(vcov(m), vcov(m.db)) r<-svyratio(~api_stu, ~enroll, design=dclus1) r.db<-svyratio(~api_stu, ~enroll, design=dbclus1) all.equal(coef(r), coef(r.db)) all.equal(SE(r), SE(r.db)) b<-svyby(~api99+api00,~stype, design=dclus1, svymean, deff=TRUE) b.db<-svyby(~api99+api00,~stype, design=dbclus1,svymean, deff=TRUE) all.equal(coef(b), coef(b.db)) all.equal(SE(b), SE(b.db)) all.equal(deff(b), deff(b.db)) l<-svyglm(api00~api99+mobility, design=dclus1) l.db<-svyglm(api00~api99+mobility, design=dbclus1) all.equal(coef(l),coef(l.db)) all.equal(vcov(l), vcov(l.db)) dclus1<-update(dclus1, apidiff=api00-api99) dclus1<-update(dclus1, apipct= apidiff/api99) dbclus1<-update(dbclus1, apidiff=api00-api99) dbclus1<-update(dbclus1, apipct= apidiff/api99) u<-svymean(~api00+apidiff+apipct, dclus1) u.db<-svymean(~api00+apidiff+apipct, dbclus1) all.equal(u, u.db) all.equal(nrow(dclus1),nrow(dbclus1)) all.equal(nrow(subset(dclus1,stype=="E")), nrow(subset(dbclus1,stype=="E"))) ## replicate weights rclus1<-as.svrepdesign(dclus1) db_rclus1<-svrepdesign(weights=~pw, repweights="wt[1-9]+", type="JK1", scale=(1-15/757)*14/15, data="apiclus1rep",dbtype="SQLite", dbname=system.file("api.db",package="survey"),combined.weights=FALSE) m<-svymean(~api00+api99,rclus1) m.db<-svymean(~api00+api99,db_rclus1) all.equal(m,m.db) summary(db_rclus1) s<-svymean(~api00, subset(rclus1, comp_imp=="Yes")) s.db<-svymean(~api00, subset(db_rclus1, comp_imp=="Yes")) all.equal(s,s.db) survey/tests/twophase.Rout.save0000644000176200001440000002134712750543405016427 0ustar liggesusers R version 3.2.1 (2015-06-18) -- "World-Famous Astronaut" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.4.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Loading required package: grid Loading required package: Matrix Loading required package: survival Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > > ## two-phase simple random sampling. > data(pbc, package="survival") > pbc$id<-1:nrow(pbc) > pbc$randomized<-with(pbc, !is.na(trt) & trt>-9) > (d2pbc<-twophase(id=list(~id,~id), data=pbc, subset=~I(!randomized))) Two-phase sparse-matrix design: twophase2(id = id, strata = strata, probs = probs, fpc = fpc, subset = subset, data = data) Phase 1: Independent Sampling design (with replacement) svydesign(ids = ~id) Phase 2: Independent Sampling design svydesign(ids = ~id, fpc = `*phase1*`) > m<-svymean(~bili, d2pbc) > all.equal(as.vector(coef(m)),with(pbc, mean(bili[!randomized]))) [1] TRUE > all.equal(as.vector(SE(m)), + with(pbc, sd(bili[!randomized])/sqrt(sum(!randomized))), + tolerance=0.001) [1] "Mean relative difference: 0.001198323" > > ## two-stage sampling as two-phase > data(mu284) > ii<-with(mu284, c(1:15, rep(1:5,n2[1:5]-3))) > mu284.1<-mu284[ii,] > mu284.1$id<-1:nrow(mu284.1) > mu284.1$sub<-rep(c(TRUE,FALSE),c(15,34-15)) > dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) > ## first phase cluster sample, second phase stratified within cluster > (d2mu284<-twophase(id=list(~id1,~id),strata=list(NULL,~id1), + fpc=list(~n1,NULL),data=mu284.1,subset=~sub,method="approx")) Two-phase design: twophase(id = list(~id1, ~id), strata = list(NULL, ~id1), fpc = list(~n1, NULL), data = mu284.1, subset = ~sub, method = "approx") Phase 1: 1 - level Cluster Sampling design With (5) clusters. svydesign(ids = ~id1, fpc = ~n1) Phase 2: Stratified Independent Sampling design svydesign(ids = ~id, strata = ~id1, fpc = `*phase1*`) > (d22mu284<-twophase(id=list(~id1,~id),strata=list(NULL,~id1), + fpc=list(~n1,NULL),data=mu284.1,subset=~sub,method="full")) Two-phase sparse-matrix design: twophase2(id = id, strata = strata, probs = probs, fpc = fpc, subset = subset, data = data) Phase 1: 1 - level Cluster Sampling design With (5) clusters. svydesign(ids = ~id1, fpc = ~n1) Phase 2: Stratified Independent Sampling design svydesign(ids = ~id, strata = ~id1, fpc = `*phase1*`) > summary(d2mu284) Two-phase design: twophase(id = list(~id1, ~id), strata = list(NULL, ~id1), fpc = list(~n1, NULL), data = mu284.1, subset = ~sub, method = "approx") Phase 1: 1 - level Cluster Sampling design With (5) clusters. svydesign(ids = ~id1, fpc = ~n1) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.1 0.1 0.1 0.1 0.1 0.1 Population size (PSUs): 50 Phase 2: Stratified Independent Sampling design svydesign(ids = ~id, strata = ~id1, fpc = `*phase1*`) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.3333 0.3750 0.4286 0.4674 0.6000 0.6000 Stratum Sizes: 19 31 45 47 50 obs 3 3 3 3 3 design.PSU 3 3 3 3 3 actual.PSU 3 3 3 3 3 Population stratum sizes (PSUs): 19 31 45 47 50 5 7 8 5 9 Data variables: [1] "id1" "n1" "id2" "y1" "n2" "id" "sub" > t1<-svytotal(~y1, dmu284) > t2<-svytotal(~y1, d2mu284) > t22<-svytotal(~y1,d22mu284) > m1<-svymean(~y1, dmu284) > m2<-svymean(~y1, d2mu284) > m22<-svymean(~y1, d22mu284) > all.equal(coef(t1),coef(t2)) [1] TRUE > all.equal(coef(t1),coef(t22)) [1] TRUE > all.equal(coef(m1),coef(m2)) [1] TRUE > all.equal(coef(m1),coef(m22)) [1] TRUE > all.equal(as.vector(SE(m1)),as.vector(SE(m2))) [1] TRUE > all.equal(as.vector(SE(m1)),as.vector(SE(m22))) [1] TRUE > all.equal(as.vector(SE(t1)),as.vector(SE(t2))) [1] TRUE > all.equal(as.vector(SE(t1)),as.vector(SE(t22))) [1] TRUE > > ## case-cohort design > ##this example requires R 2.3.1 or later for cch and data. > library("survival") > data(nwtco, package="survival") > ## unstratified, equivalent to Lin & Ying (1993) > print(dcchs<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), + subset=~I(in.subcohort | rel), data=nwtco)) Two-phase sparse-matrix design: twophase2(id = id, strata = strata, probs = probs, fpc = fpc, subset = subset, data = data) Phase 1: Independent Sampling design (with replacement) svydesign(ids = ~seqno) Phase 2: Stratified Independent Sampling design svydesign(ids = ~seqno, strata = ~rel, fpc = `*phase1*`) > cch1<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), + design=dcchs) > dcchs2<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), + subset=~I(in.subcohort | rel), data=nwtco,method="approx") > cch1.2<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), + design=dcchs) > all.equal(coef(cch1),coef(cch1.2)) [1] TRUE > all.equal(SE(cch1),SE(cch1.2)) [1] TRUE > ## Using survival::cch > subcoh <- nwtco$in.subcohort > selccoh <- with(nwtco, rel==1|subcoh==1) > ccoh.data <- nwtco[selccoh,] > ccoh.data$subcohort <- subcoh[selccoh] > cch2<-cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), + data =ccoh.data, subcoh = ~subcohort, id=~seqno, + cohort.size=4028, method="LinYing", robust=TRUE) > > print(all.equal(as.vector(coef(cch1)),as.vector(coef(cch2)))) [1] TRUE > ## cch has smaller variances by a factor of 1.0005 because > ## there is a (n/(n-1)) in the survey phase1 varianace > print(all.equal(as.vector(SE(cch1)), as.vector(SE(cch2)),tolerance=0.0006)) [1] TRUE > > > ## bug report from Takahiro Tsuchiya for version 3.4 > ## We used to not match Sarndal exactly, because our old phase-one > ## estimator had a small bias for finite populations > rei<-read.table(tmp<-textConnection( + " id N n.a h n.ah n.h sub y + 1 1 300 20 1 12 5 TRUE 1 + 2 2 300 20 1 12 5 TRUE 2 + 3 3 300 20 1 12 5 TRUE 3 + 4 4 300 20 1 12 5 TRUE 4 + 5 5 300 20 1 12 5 TRUE 5 + 6 6 300 20 1 12 5 FALSE NA + 7 7 300 20 1 12 5 FALSE NA + 8 8 300 20 1 12 5 FALSE NA + 9 9 300 20 1 12 5 FALSE NA + 10 10 300 20 1 12 5 FALSE NA + 11 11 300 20 1 12 5 FALSE NA + 12 12 300 20 1 12 5 FALSE NA + 13 13 300 20 2 8 3 TRUE 6 + 14 14 300 20 2 8 3 TRUE 7 + 15 15 300 20 2 8 3 TRUE 8 + 16 16 300 20 2 8 3 FALSE NA + 17 17 300 20 2 8 3 FALSE NA + 18 18 300 20 2 8 3 FALSE NA + 19 19 300 20 2 8 3 FALSE NA + 20 20 300 20 2 8 3 FALSE NA + "), header=TRUE) > close(tmp) > > des.rei <- twophase(id=list(~id,~id), strata=list(NULL,~h), + fpc=list(~N,NULL), subset=~sub, data=rei, method="approx") > tot<- svytotal(~y, des.rei) > des.rei2 <- twophase(id=list(~id,~id), strata=list(NULL,~h), + fpc=list(~N,NULL), subset=~sub, data=rei) > tot2<- svytotal(~y, des.rei2) > > ## based on Sarndal et al (9.4.14) > rei$w.ah <- rei$n.ah / rei$n.a > a.rei <- aggregate(rei, by=list(rei$h), mean, na.rm=TRUE) > a.rei$S.ysh <- tapply(rei$y, rei$h, var, na.rm=TRUE) > a.rei$y.u <- sum(a.rei$w.ah * a.rei$y) > V <- with(a.rei, sum(N * (N-1) * ((n.ah-1)/(n.a-1) - (n.h-1)/(N-1)) * w.ah * S.ysh / n.h)) > V <- V + with(a.rei, sum(N * (N-n.a) * w.ah * (y - y.u)^2 / (n.a-1))) > > a.rei$f.h<-with(a.rei, n.h/n.ah) > Vphase2<-with(a.rei, sum(N*N*w.ah^2* ((1-f.h)/n.h) *S.ysh)) > > a.rei$f<-with(a.rei, n.a/N) > a.rei$delta.h<-with(a.rei, (1/n.h)*(n.a-n.ah)/(n.a-1)) > Vphase1<-with(a.rei, sum(N*N*((1-f)/n.a)*( w.ah*(1-delta.h)*S.ysh+ ((n.a)/(n.a-1))*w.ah*(y-y.u)^2))) > > V [1] 36522.63 > Vphase1 [1] 24072.63 > Vphase2 [1] 12450 > vcov(tot) y y 35911.05 attr(,"phases") attr(,"phases")$phase1 [,1] [1,] 23461.05 attr(,"phases")$phase2 y y 12450 > vcov(tot2) [,1] [1,] 36522.63 attr(,"phases") attr(,"phases")$phase1 [,1] [1,] 24072.63 attr(,"phases")$phase2 [,1] [1,] 12450 > ## phase 2 identical > all.equal(Vphase2,drop(attr(vcov(tot),"phases")$phase2)) [1] TRUE > all.equal(Vphase2,drop(attr(vcov(tot2),"phases")$phase2)) [1] TRUE > ## phase 1 differs by 2.6% for old twophase estimator > Vphase1/attr(vcov(tot),"phases")$phase1 [,1] [1,] 1.026068 > all.equal(Vphase1,as.vector(attr(vcov(tot2),"phases")$phase1)) [1] TRUE > > > proc.time() user system elapsed 1.967 0.106 2.094 survey/tests/regpredict.R0000644000176200001440000000305312242746122015227 0ustar liggesuserslibrary(survey) data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) ## regression estimator of total, three ways pop<-data.frame(enroll=sum(apipop$enroll, na.rm=TRUE)) npop <- sum(!is.na(apipop$enroll)) api.reg <- svyglm(api.stu~enroll, design=dstrat) a <- predict(api.reg, newdata=pop, total=npop) b <- svytotal(~api.stu, calibrate(dstrat, ~enroll, pop=c(npop, pop$enroll))) all.equal(as.vector(coef(a)),as.vector(coef(b))) all.equal(as.vector(SE(a)), as.vector(SE(b))) if(!is.null(getOption("DEBUG"))){ ## uses 6194x6194 matrix d <- predict(api.reg, newdata=na.omit(apipop[,"enroll",drop=FALSE])) all.equal(as.vector(coef(a)), as.vector(sum(coef(d)))) all.equal(as.vector(SE(a)), as.vector(sqrt(sum(vcov(d))))) } ## classical ratio estimator, four ways. api.reg2 <- svyglm(api.stu~enroll-1, design=dstrat, family=quasi(link="identity", var="mu")) a <- predict(api.reg2, newdata=pop, total=npop) b <- svytotal(~api.stu, calibrate(dstrat, ~enroll-1, pop= pop$enroll, variance=2)) e <- predict(svyratio(~api.stu, ~enroll, dstrat),total=pop$enroll) all.equal(as.vector(coef(a)),as.vector(coef(b))) all.equal(as.vector(SE(a)), as.vector(SE(b))) all.equal(as.vector(coef(a)),as.vector(e$total)) all.equal(as.vector(SE(a)), as.vector(e$se)) if(!is.null(getOption("DEBUG"))){## uses 6194x6194 matrix d <- predict(api.reg2, newdata=na.omit(apipop[,"enroll",drop=FALSE])) all.equal(as.vector(coef(a)), as.vector(sum(coef(d)))) all.equal(as.vector(SE(a)), as.vector(sqrt(sum(vcov(d))))) } survey/tests/survcurve.R0000644000176200001440000000136212242746122015144 0ustar liggesuserslibrary(survey) library(survival) pbc2<-rbind(pbc,pbc) pbc2$id<-rep(1:418,2) dpbc1<-svydesign(id=~1, data=pbc) dpbc2<-svydesign(id=~id, data=pbc2) s1<-svykm(Surv(time,status>0)~1, subset(dpbc1, bili>6), se=TRUE) s2<-svykm(Surv(time,status>0)~1, subset(dpbc2, bili>6), se=TRUE) (c1<-confint(s1,(1:5)*365)) (c2<-confint(s2,(1:5)*365)) all.equal(c1, c2) m1<-svycoxph(Surv(time,status>0)~log(bili), design=dpbc1) m2<-svycoxph(Surv(time,status>0)~log(bili), design=dpbc2) d<-data.frame(bili=c(5,10)) p1<-predict(m1, se=TRUE, newdata=d,type="curve") p2<-predict(m2, se=TRUE, newdata=d,type="curve") (pc1<-confint(p1[[1]],(1:5)*365)) (pc2<-confint(p2[[1]],(1:5)*365)) all.equal(pc1, pc2) (q1<-quantile(p1[[2]])) (q2<-quantile(p2[[2]])) all.equal(q1,q2) survey/tests/caleg.Rout.save0000644000176200001440000002072713115663632015652 0ustar liggesusers R version 3.4.0 (2017-04-21) -- "You Stupid Darkness" Copyright (C) 2017 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin15.6.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## > ## Calibration examples > ## > > > ## Example of calibration to first-stage clusters > library(survey) Loading required package: grid Loading required package: Matrix Loading required package: survival Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(api) > > clusters<-table(apiclus2$dnum) > clusters<-clusters[clusters>1 & names(clusters)!="639"] > apiclus2a<-subset(apiclus2, dnum %in% as.numeric(names(clusters))) > > dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2a) > > popclusters<-subset(apipop, dnum %in% as.numeric(names(clusters))) > > pop<-lapply(as.numeric(names(clusters)), function(cluster) { + colSums(model.matrix(~api99, model.frame(~api99, subset(popclusters, dnum %in% cluster))))}) > > names(pop)<-names(clusters) > > dclus2g<-calibrate(dclus2, ~api99, pop,stage=1) > > svymean(~api99, dclus2) mean SE api99 642.14 31.434 > svymean(~api99, dclus2g) mean SE api99 654.49 29.82 > > round(svyby(~api99, ~dnum, design=dclus2, svymean),4) dnum api99 se 83 83 694.3333 0.0000 132 132 505.0000 0.0000 152 152 574.0000 0.0000 173 173 894.7500 0.0000 198 198 533.7500 0.0000 200 200 589.8000 6.8335 228 228 477.0000 0.0000 295 295 646.4000 0.0000 302 302 903.5000 0.0000 403 403 852.4000 0.0000 452 452 533.0000 0.0000 480 480 614.2000 0.0000 523 523 580.5000 0.0000 534 534 564.6000 0.0000 549 549 896.2000 0.0000 552 552 730.0000 0.0000 570 570 518.4000 7.5478 575 575 800.8000 4.2513 596 596 785.6000 2.4155 620 620 591.6000 10.5869 638 638 560.2000 4.0954 674 674 760.0000 0.0000 679 679 610.2500 0.0000 687 687 718.6667 0.0000 701 701 651.5000 0.0000 711 711 690.5000 0.0000 731 731 702.0000 2.1744 768 768 562.5000 0.0000 781 781 854.4000 0.7456 > > round(svyby(~api99, ~dnum, design=dclus2g, svymean),4) dnum api99 se 83 83 694.3333 0 132 132 505.0000 0 152 152 574.0000 0 173 173 894.7500 0 198 198 533.7500 0 200 200 567.5455 0 228 228 477.0000 0 295 295 646.4000 0 302 302 903.5000 0 403 403 852.4000 0 452 452 533.0000 0 480 480 614.2000 0 523 523 580.5000 0 534 534 564.6000 0 549 549 896.2000 0 552 552 730.0000 0 570 570 548.9444 0 575 575 824.5357 0 596 596 787.5714 0 620 620 609.3750 0 638 638 585.6429 0 674 674 760.0000 0 679 679 610.2500 0 687 687 718.6667 0 701 701 651.5000 0 711 711 690.5000 0 731 731 700.6667 0 768 768 562.5000 0 781 781 851.0000 0 > > ## Averaging to first stage > > dclus1<- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) > pop<-colSums(cbind(1,apipop$enroll),na.rm=TRUE) > > dclus1g<-calibrate(dclus1, ~enroll, pop, aggregate=1) > > svytotal(~enroll,dclus1g) total SE enroll 3811472 0 > svytotal(~api.stu,dclus1g) total SE api.stu 3242857 38967 > > #variation within clusters should be zero > all.equal(0, max(ave(weights(dclus1g),dclus1g$cluster,FUN=var),na.rm=TRUE)) [1] TRUE > > ##bounded weights > dclus1g<-calibrate(dclus1, ~enroll, pop) > range(weights(dclus1g)/weights(dclus1)) [1] 0.7906782 1.7891164 > dclus1gb<-calibrate(dclus1, ~enroll, pop, bounds=c(.6,1.5)) > range(weights(dclus1gb)/weights(dclus1)) [1] 0.7198751 1.5000000 > > ## Ratio estimators > dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) > svytotal(~api.stu,dstrat) total SE api.stu 3086009 99477 > common<-svyratio(~api.stu, ~enroll, dstrat, separate=FALSE) > total.enroll<-sum(apipop$enroll,na.rm=TRUE) > predict(common, total=total.enroll) $total enroll api.stu 3190038 $se enroll api.stu 29565.98 > dstratg<-calibrate(dstrat,~enroll-1, total.enroll, variance=1) > svytotal(~api.stu, dstratg) total SE api.stu 3190038 29566 > > ## postStratify vs calibrate in stratified sample (Ben French) > set.seed(17) > dat<-data.frame(y=rep(0:1,each=100),x=rnorm(200)+2*rep(0:1,each=100), + z=rbinom(200,1,.2), fpc=rep(c(100,10000),each=100)) > dat$w<-ifelse(dat$y,dat$z,1-dat$z) > popw<-data.frame(w=c("0","1"), Freq=c(2000,8000)) > des<-svydesign(id=~1,fpc=~fpc, data=dat,strata=~y) > postStratify(des,~w,popw)->dps > dcal<-calibrate(des,~factor(w), pop=c(10000,8000)) > > all.equal(SE(svymean(~x,dcal)),SE(svymean(~x,dps))) [1] TRUE > > ## missing data in calibrated design > dps$variables$z[1]<-NA > summary(svyglm(y~z+x,design=dps,family=quasibinomial)) Call: svyglm(formula = y ~ z + x, design = dps, family = quasibinomial) Survey design: postStratify(des, ~w, popw) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.1203 0.3380 -0.356 0.722 z 6.2118 0.6451 9.630 <2e-16 *** x 2.2602 0.2514 8.992 <2e-16 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.919987) Number of Fisher Scoring iterations: 9 > > ## Ratio estimator using the heteroskedasticity parameter (Daniel Oehm) > # should match the ratio estmate above > dstratgh <- calibrate(dstrat,~enroll-1, total.enroll, variance=apistrat$enroll) > svytotal(~api.stu, dstratgh) total SE api.stu 3190038 29566 > > ## individual boundary constraints as multiplicative values (Daniel Oehm) > bnds <- list( + lower = c(1, 1, rep(-Inf, nrow(apistrat)-2)), + upper = c(1, 1, rep(Inf, nrow(apistrat)-2))) # the first two weights will remain unchanged the others are free to move > lapply(bnds, head) $lower [1] 1 1 -Inf -Inf -Inf -Inf $upper [1] 1 1 Inf Inf Inf Inf > dstratg1<-calibrate(dstrat, ~enroll-1, total.enroll, bounds = bnds, variance=apistrat$enroll) > svytotal(~api.stu, dstratg1) total SE api.stu 3190133 29561 > head(weights(dstrat)) 1 2 3 4 5 6 44.21 44.21 44.21 44.21 44.21 44.21 > head(weights(dstratg1)) 1 2 3 4 5 6 44.21000 44.21000 45.72055 45.72055 45.72055 45.72055 > all.equal(weights(dstrat)[1:2], weights(dstratg1)[1:2]) [1] TRUE > > ## individual boundary constraints as constant values (Daniel Oehm) > bnds <- list( + lower = c(44.21, 44.21, rep(-Inf, nrow(apistrat)-2)), + upper = c(44.21, 44.21, rep(Inf, nrow(apistrat)-2))) # the first two weights will remain unchanged > lapply(bnds, head) $lower [1] 44.21 44.21 -Inf -Inf -Inf -Inf $upper [1] 44.21 44.21 Inf Inf Inf Inf > dstratg2<-calibrate(dstrat, ~enroll-1, total.enroll, bounds = bnds, bounds.const = TRUE, variance=apistrat$enroll) > svytotal(~api.stu, dstratg2) total SE api.stu 3190133 29561 > head(weights(dstrat)) 1 2 3 4 5 6 44.21 44.21 44.21 44.21 44.21 44.21 > head(weights(dstratg2)) 1 2 3 4 5 6 44.21000 44.21000 45.72055 45.72055 45.72055 45.72055 > all.equal(round(weights(dstrat)[1:2], 8), round(weights(dstratg2)[1:2]), 8) # minor rounding error but all good [1] TRUE > > # sparse matrix support (Daniel Oehm) > dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) > pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) > dclus1g<-calibrate(dclus1, ~stype, pop.totals) > svymean(~api00, dclus1g) mean SE api00 642.31 23.921 > svytotal(~enroll, dclus1g) total SE enroll 3680893 406293 > > pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) > dclus1g<-calibrate(dclus1, ~stype, pop.totals, sparse = TRUE) > svymean(~api00, dclus1g) mean SE api00 642.31 23.921 > svytotal(~enroll, dclus1g) total SE enroll 3680893 406293 > > pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) > dclus1g<-calibrate(dclus1, ~stype, pop.totals, sparse = TRUE, calfun = "raking") > svymean(~api00, dclus1g) mean SE api00 642.31 23.921 > svytotal(~enroll, dclus1g) total SE enroll 3680893 406293 > > proc.time() user system elapsed 2.591 0.084 2.712 survey/tests/kalton.Rout.save0000644000176200001440000000641512372251125016057 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > > ab<-expand.grid(a=factor(1:4),b=factor(1:3)) > > kaltonsample<-ab[rep(1:12,c(20,50,100,30,40,140,50,100,40,310,50,70)),] > > kaltonpop<-ab[rep(1:12,c(80,60,170,55,40,150,60,165,55,340,200,125)),] > > jointpop<-colSums(model.matrix(~a*b,kaltonpop)) > marginalpop<-colSums(model.matrix(~a+b,kaltonpop)) > gregpop<-colSums(model.matrix(~as.numeric(a)+as.numeric(b),kaltonpop)) > > dkalton<-svydesign(id=~1,data=kaltonsample) Warning message: In svydesign.default(id = ~1, data = kaltonsample) : No weights or probabilities supplied, assuming equal probability > > dps<-postStratify(dkalton,~a+b,xtabs(~a+b,kaltonpop)) > > drake<-rake(dkalton, list(~a,~b),list(xtabs(~a,kaltonpop),xtabs(~b,kaltonpop)),control=list(epsilon=0.0001)) > > dcalps<-calibrate(dkalton, ~a*b, jointpop) > dcalrake<-calibrate(dkalton,~a+b, marginalpop, calfun="raking") Loading required package: MASS > dlinear<-calibrate(dkalton, ~a+b, marginalpop) > > dtrunclinear<-calibrate(dkalton, ~a+b, marginalpop,bounds=c(0.5,2.2)) > > dlogit<-calibrate(dkalton, ~a+b, marginalpop,bounds=c(0.5,2.2),calfun="logit") > > dgreg<-calibrate(dkalton,~as.numeric(a)+as.numeric(b), gregpop) > > > #table A > round(svytable(~a+b,dps)/xtabs(~a+b,kaltonsample),2) b a 1 2 3 1 4.00 1.00 1.38 2 1.20 1.07 1.10 3 1.70 1.20 4.00 4 1.83 1.65 1.79 > round(svytable(~a+b,dcalps)/xtabs(~a+b,kaltonsample),2) b a 1 2 3 1 4.00 1.00 1.37 2 1.20 1.07 1.10 3 1.70 1.20 4.00 4 1.83 1.65 1.79 > > #table B > round(svytable(~a+b,drake)/xtabs(~a+b,kaltonsample),2) b a 1 2 3 1 1.81 1.45 2.02 2 1.08 0.87 1.21 3 2.20 1.76 2.45 4 1.83 1.47 2.04 > round(svytable(~a+b,dcalrake)/xtabs(~a+b,kaltonsample),2) b a 1 2 3 1 1.81 1.45 2.02 2 1.08 0.87 1.21 3 2.20 1.76 2.45 4 1.83 1.47 2.04 > > #table C > round(svytable(~a+b,dlinear)/xtabs(~a+b,kaltonsample),2) b a 1 2 3 1 1.82 1.50 1.97 2 1.09 0.78 1.24 3 2.19 1.88 2.34 4 1.83 1.52 1.98 > > #table D > round(svytable(~a+b,dgreg)/xtabs(~a+b,kaltonsample),2) b a 1 2 3 1 1.21 1.17 1.14 2 1.43 1.40 1.36 3 1.66 1.62 1.59 4 1.88 1.85 1.81 > > #table G > round(svytable(~a+b,dlogit)/xtabs(~a+b,kaltonsample),2) b a 1 2 3 1 1.87 1.46 1.98 2 1.08 0.74 1.27 3 2.17 2.09 2.18 4 1.89 1.49 1.99 > > #table G > round(svytable(~a+b,dtrunclinear)/xtabs(~a+b,kaltonsample),2) b a 1 2 3 1 1.81 1.48 1.99 2 1.08 0.75 1.26 3 2.20 2.00 2.20 4 1.83 1.50 2.00 > > proc.time() user system elapsed 0.248 0.027 0.282 survey/tests/api.Rout.saved0000644000176200001440000003543313101456333015505 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > options(survey.replicates.mse=TRUE) > example(api) api> library(survey) api> data(api) api> mean(apipop$api00) [1] 664.7126 api> sum(apipop$enroll, na.rm=TRUE) [1] 3811472 api> #stratified sample api> dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) api> summary(dstrat) Stratified Independent Sampling design svydesign(id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02262 0.02262 0.03587 0.04014 0.05339 0.06623 Stratum Sizes: E H M obs 100 50 50 design.PSU 100 50 50 actual.PSU 100 50 50 Population stratum sizes (PSUs): E H M 4421 755 1018 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "pw" "fpc" api> svymean(~api00, dstrat) mean SE api00 662.29 9.4089 api> svytotal(~enroll, dstrat, na.rm=TRUE) total SE enroll 3687178 114642 api> # one-stage cluster sample api> dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) api> summary(dclus1) 1 - level Cluster Sampling design With (15) clusters. svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Population size (PSUs): 757 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" api> svymean(~api00, dclus1) mean SE api00 644.17 23.542 api> svytotal(~enroll, dclus1, na.rm=TRUE) total SE enroll 3404940 932235 api> # two-stage cluster sample api> dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) api> summary(dclus2) 2 - level Cluster Sampling design With (40, 126) clusters. svydesign(id = ~dnum + snum, fpc = ~fpc1 + fpc2, data = apiclus2) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.003669 0.037740 0.052840 0.042390 0.052840 0.052840 Population size (PSUs): 757 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "pw" "fpc1" "fpc2" api> svymean(~api00, dclus2) mean SE api00 670.81 30.099 api> svytotal(~enroll, dclus2, na.rm=TRUE) total SE enroll 2639273 799638 api> # two-stage `with replacement' api> dclus2wr<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) api> summary(dclus2wr) 2 - level Cluster Sampling design (with replacement) With (40, 126) clusters. svydesign(id = ~dnum + snum, weights = ~pw, data = apiclus2) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.003669 0.037740 0.052840 0.042390 0.052840 0.052840 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "pw" "fpc1" "fpc2" api> svymean(~api00, dclus2wr) mean SE api00 670.81 30.712 api> svytotal(~enroll, dclus2wr, na.rm=TRUE) total SE enroll 2639273 820261 api> # convert to replicate weights api> rclus1<-as.svrepdesign(dclus1) api> summary(rclus1) Call: as.svrepdesign(dclus1) Unstratified cluster jacknife (JK1) with 15 replicates and MSE variances. Variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" api> svymean(~api00, rclus1) mean SE api00 644.17 26.335 api> svytotal(~enroll, rclus1, na.rm=TRUE) total SE enroll 3404940 932235 api> # post-stratify on school type api> pop.types<-xtabs(~stype, data=apipop) api> rclus1p<-postStratify(rclus1, ~stype, pop.types) api> dclus1p<-postStratify(dclus1, ~stype, pop.types) api> summary(dclus1p) 1 - level Cluster Sampling design With (15) clusters. postStratify(dclus1, ~stype, pop.types) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.01854 0.03257 0.03257 0.03040 0.03257 0.03257 Population size (PSUs): 757 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" api> summary(rclus1p) Call: postStratify(rclus1, ~stype, pop.types) Unstratified cluster jacknife (JK1) with 15 replicates and MSE variances. Variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" api> svymean(~api00, dclus1p) mean SE api00 642.31 23.921 api> svytotal(~enroll, dclus1p, na.rm=TRUE) total SE enroll 3680893 406293 api> svymean(~api00, rclus1p) mean SE api00 642.31 26.936 api> svytotal(~enroll, rclus1p, na.rm=TRUE) total SE enroll 3680893 473434 > > options(survey.replicates.mse=FALSE) > example(api) api> library(survey) api> data(api) api> mean(apipop$api00) [1] 664.7126 api> sum(apipop$enroll, na.rm=TRUE) [1] 3811472 api> #stratified sample api> dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) api> summary(dstrat) Stratified Independent Sampling design svydesign(id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02262 0.02262 0.03587 0.04014 0.05339 0.06623 Stratum Sizes: E H M obs 100 50 50 design.PSU 100 50 50 actual.PSU 100 50 50 Population stratum sizes (PSUs): E H M 4421 755 1018 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "pw" "fpc" api> svymean(~api00, dstrat) mean SE api00 662.29 9.4089 api> svytotal(~enroll, dstrat, na.rm=TRUE) total SE enroll 3687178 114642 api> # one-stage cluster sample api> dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) api> summary(dclus1) 1 - level Cluster Sampling design With (15) clusters. svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Population size (PSUs): 757 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" api> svymean(~api00, dclus1) mean SE api00 644.17 23.542 api> svytotal(~enroll, dclus1, na.rm=TRUE) total SE enroll 3404940 932235 api> # two-stage cluster sample api> dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) api> summary(dclus2) 2 - level Cluster Sampling design With (40, 126) clusters. svydesign(id = ~dnum + snum, fpc = ~fpc1 + fpc2, data = apiclus2) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.003669 0.037740 0.052840 0.042390 0.052840 0.052840 Population size (PSUs): 757 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "pw" "fpc1" "fpc2" api> svymean(~api00, dclus2) mean SE api00 670.81 30.099 api> svytotal(~enroll, dclus2, na.rm=TRUE) total SE enroll 2639273 799638 api> # two-stage `with replacement' api> dclus2wr<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) api> summary(dclus2wr) 2 - level Cluster Sampling design (with replacement) With (40, 126) clusters. svydesign(id = ~dnum + snum, weights = ~pw, data = apiclus2) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.003669 0.037740 0.052840 0.042390 0.052840 0.052840 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "pw" "fpc1" "fpc2" api> svymean(~api00, dclus2wr) mean SE api00 670.81 30.712 api> svytotal(~enroll, dclus2wr, na.rm=TRUE) total SE enroll 2639273 820261 api> # convert to replicate weights api> rclus1<-as.svrepdesign(dclus1) api> summary(rclus1) Call: as.svrepdesign(dclus1) Unstratified cluster jacknife (JK1) with 15 replicates. Variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" api> svymean(~api00, rclus1) mean SE api00 644.17 26.329 api> svytotal(~enroll, rclus1, na.rm=TRUE) total SE enroll 3404940 932235 api> # post-stratify on school type api> pop.types<-xtabs(~stype, data=apipop) api> rclus1p<-postStratify(rclus1, ~stype, pop.types) api> dclus1p<-postStratify(dclus1, ~stype, pop.types) api> summary(dclus1p) 1 - level Cluster Sampling design With (15) clusters. postStratify(dclus1, ~stype, pop.types) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.01854 0.03257 0.03257 0.03040 0.03257 0.03257 Population size (PSUs): 757 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" api> summary(rclus1p) Call: postStratify(rclus1, ~stype, pop.types) Unstratified cluster jacknife (JK1) with 15 replicates. Variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" api> svymean(~api00, dclus1p) mean SE api00 642.31 23.921 api> svytotal(~enroll, dclus1p, na.rm=TRUE) total SE enroll 3680893 406293 api> svymean(~api00, rclus1p) mean SE api00 642.31 26.934 api> svytotal(~enroll, rclus1p, na.rm=TRUE) total SE enroll 3680893 473431 > > proc.time() user system elapsed 0.560 0.033 0.608 survey/tests/caleg.R0000644000176200001440000001023513115662425014155 0ustar liggesusers## ## Calibration examples ## ## Example of calibration to first-stage clusters library(survey) data(api) clusters<-table(apiclus2$dnum) clusters<-clusters[clusters>1 & names(clusters)!="639"] apiclus2a<-subset(apiclus2, dnum %in% as.numeric(names(clusters))) dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2a) popclusters<-subset(apipop, dnum %in% as.numeric(names(clusters))) pop<-lapply(as.numeric(names(clusters)), function(cluster) { colSums(model.matrix(~api99, model.frame(~api99, subset(popclusters, dnum %in% cluster))))}) names(pop)<-names(clusters) dclus2g<-calibrate(dclus2, ~api99, pop,stage=1) svymean(~api99, dclus2) svymean(~api99, dclus2g) round(svyby(~api99, ~dnum, design=dclus2, svymean),4) round(svyby(~api99, ~dnum, design=dclus2g, svymean),4) ## Averaging to first stage dclus1<- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) pop<-colSums(cbind(1,apipop$enroll),na.rm=TRUE) dclus1g<-calibrate(dclus1, ~enroll, pop, aggregate=1) svytotal(~enroll,dclus1g) svytotal(~api.stu,dclus1g) #variation within clusters should be zero all.equal(0, max(ave(weights(dclus1g),dclus1g$cluster,FUN=var),na.rm=TRUE)) ##bounded weights dclus1g<-calibrate(dclus1, ~enroll, pop) range(weights(dclus1g)/weights(dclus1)) dclus1gb<-calibrate(dclus1, ~enroll, pop, bounds=c(.6,1.5)) range(weights(dclus1gb)/weights(dclus1)) ## Ratio estimators dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) svytotal(~api.stu,dstrat) common<-svyratio(~api.stu, ~enroll, dstrat, separate=FALSE) total.enroll<-sum(apipop$enroll,na.rm=TRUE) predict(common, total=total.enroll) dstratg<-calibrate(dstrat,~enroll-1, total.enroll, variance=1) svytotal(~api.stu, dstratg) ## postStratify vs calibrate in stratified sample (Ben French) set.seed(17) dat<-data.frame(y=rep(0:1,each=100),x=rnorm(200)+2*rep(0:1,each=100), z=rbinom(200,1,.2), fpc=rep(c(100,10000),each=100)) dat$w<-ifelse(dat$y,dat$z,1-dat$z) popw<-data.frame(w=c("0","1"), Freq=c(2000,8000)) des<-svydesign(id=~1,fpc=~fpc, data=dat,strata=~y) postStratify(des,~w,popw)->dps dcal<-calibrate(des,~factor(w), pop=c(10000,8000)) all.equal(SE(svymean(~x,dcal)),SE(svymean(~x,dps))) ## missing data in calibrated design dps$variables$z[1]<-NA summary(svyglm(y~z+x,design=dps,family=quasibinomial)) ## Ratio estimator using the heteroskedasticity parameter (Daniel Oehm) # should match the ratio estmate above dstratgh <- calibrate(dstrat,~enroll-1, total.enroll, variance=apistrat$enroll) svytotal(~api.stu, dstratgh) ## individual boundary constraints as multiplicative values (Daniel Oehm) bnds <- list( lower = c(1, 1, rep(-Inf, nrow(apistrat)-2)), upper = c(1, 1, rep(Inf, nrow(apistrat)-2))) # the first two weights will remain unchanged the others are free to move lapply(bnds, head) dstratg1<-calibrate(dstrat, ~enroll-1, total.enroll, bounds = bnds, variance=apistrat$enroll) svytotal(~api.stu, dstratg1) head(weights(dstrat)) head(weights(dstratg1)) all.equal(weights(dstrat)[1:2], weights(dstratg1)[1:2]) ## individual boundary constraints as constant values (Daniel Oehm) bnds <- list( lower = c(44.21, 44.21, rep(-Inf, nrow(apistrat)-2)), upper = c(44.21, 44.21, rep(Inf, nrow(apistrat)-2))) # the first two weights will remain unchanged lapply(bnds, head) dstratg2<-calibrate(dstrat, ~enroll-1, total.enroll, bounds = bnds, bounds.const = TRUE, variance=apistrat$enroll) svytotal(~api.stu, dstratg2) head(weights(dstrat)) head(weights(dstratg2)) all.equal(round(weights(dstrat)[1:2], 8), round(weights(dstratg2)[1:2]), 8) # minor rounding error but all good # sparse matrix support (Daniel Oehm) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) dclus1g<-calibrate(dclus1, ~stype, pop.totals) svymean(~api00, dclus1g) svytotal(~enroll, dclus1g) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) dclus1g<-calibrate(dclus1, ~stype, pop.totals, sparse = TRUE) svymean(~api00, dclus1g) svytotal(~enroll, dclus1g) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) dclus1g<-calibrate(dclus1, ~stype, pop.totals, sparse = TRUE, calfun = "raking") svymean(~api00, dclus1g) svytotal(~enroll, dclus1g) survey/tests/scoping.R0000755000176200001440000000110212242746122014535 0ustar liggesusers ## regression test for testing regression library(survey) data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) f<-function(){ form<-acs.46~stype svyglm(formula=form, design = dstrat) } g<-function(form){ svyglm(formula=form, design = dstrat) } f() g(acs.46~stype) f<-function(){ form<-Surv(acs.46)~stype svycoxph(formula=form, design = dstrat) } g<-function(form){ svycoxph(formula=form, design = dstrat) } f() g(Surv(acs.46)~stype) ## check coxph for a single predictor svycoxph(Surv(acs.46)~api00,design=dstrat) survey/tests/DBIcheck.Rout.saved0000644000176200001440000001005713101456333016323 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > library(RSQLite) Loading required package: DBI > > data(api) > apiclus1$api_stu<-apiclus1$api.stu > apiclus1$comp_imp<-apiclus1$comp.imp > dclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc,data=apiclus1) > dbclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc, + data="apiclus1",dbtype="SQLite", dbname=system.file("api.db",package="survey")) > > m<-svymean(~api00+stype,dclus1) > m.db<-svymean(~api00+stype, dbclus1) > all.equal(coef(m),coef(m.db)) [1] TRUE > all.equal(vcov(m), vcov(m.db)) [1] TRUE > > r<-svyratio(~api_stu, ~enroll, design=dclus1) > r.db<-svyratio(~api_stu, ~enroll, design=dbclus1) > all.equal(coef(r), coef(r.db)) [1] TRUE > all.equal(SE(r), SE(r.db)) [1] TRUE > > b<-svyby(~api99+api00,~stype, design=dclus1, svymean, deff=TRUE) > b.db<-svyby(~api99+api00,~stype, design=dbclus1,svymean, deff=TRUE) > all.equal(coef(b), coef(b.db)) [1] TRUE > all.equal(SE(b), SE(b.db)) [1] TRUE > all.equal(deff(b), deff(b.db)) [1] TRUE > > l<-svyglm(api00~api99+mobility, design=dclus1) > l.db<-svyglm(api00~api99+mobility, design=dbclus1) > all.equal(coef(l),coef(l.db)) [1] TRUE > all.equal(vcov(l), vcov(l.db)) [1] TRUE > > dclus1<-update(dclus1, apidiff=api00-api99) > dclus1<-update(dclus1, apipct= apidiff/api99) > dbclus1<-update(dbclus1, apidiff=api00-api99) > dbclus1<-update(dbclus1, apipct= apidiff/api99) > > u<-svymean(~api00+apidiff+apipct, dclus1) > u.db<-svymean(~api00+apidiff+apipct, dbclus1) > all.equal(u, u.db) [1] TRUE > > all.equal(nrow(dclus1),nrow(dbclus1)) [1] TRUE > all.equal(nrow(subset(dclus1,stype=="E")), + nrow(subset(dbclus1,stype=="E"))) [1] TRUE > > ## replicate weights > rclus1<-as.svrepdesign(dclus1) > db_rclus1<-svrepdesign(weights=~pw, repweights="wt[1-9]+", type="JK1", scale=(1-15/757)*14/15, + data="apiclus1rep",dbtype="SQLite", dbname=system.file("api.db",package="survey"),combined.weights=FALSE) > m<-svymean(~api00+api99,rclus1) > m.db<-svymean(~api00+api99,db_rclus1) > all.equal(m,m.db) [1] TRUE > > summary(db_rclus1) DB-backed replicate weight design Call: svrepdesign(weights = ~pw, repweights = "wt[1-9]+", type = "JK1", scale = (1 - 15/757) * 14/15, data = "apiclus1rep", dbtype = "SQLite", dbname = system.file("api.db", package = "survey"), combined.weights = FALSE) Unstratified cluster jacknife (JK1) with 15 replicates. Variables: [1] "row_names" "cds" "stype" "name" "sname" [6] "snum" "dname" "dnum" "cname" "cnum" [11] "flag" "pcttest" "api00" "api99" "target" [16] "growth" "sch_wide" "comp_imp" "both" "awards" [21] "meals" "ell" "yr_rnd" "mobility" "acs_k3" [26] "acs_46" "acs_core" "pct_resp" "not_hsg" "hsg" [31] "some_col" "col_grad" "grad_sch" "avg_ed" "full__1" [36] "emer" "enroll" "api_stu" "fpc" "pw" [41] "row_names:1" "wt1" "wt2" "wt3" "wt4" [46] "wt5" "wt6" "wt7" "wt8" "wt9" [51] "wt10" "wt11" "wt12" "wt13" "wt14" [56] "wt15" > > s<-svymean(~api00, subset(rclus1, comp_imp=="Yes")) > s.db<-svymean(~api00, subset(db_rclus1, comp_imp=="Yes")) > all.equal(s,s.db) [1] TRUE > > proc.time() user system elapsed 0.497 0.036 0.550 survey/NAMESPACE0000644000176200001440000003025513101455546013037 0ustar liggesusersimport(stats,graphics,splines,grid, survival,lattice,methods,Matrix) importFrom("grDevices", "col2rgb", "grey", "rgb") importFrom("utils", "getS3method") export(svydesign, svrepdesign, as.svrepdesign,twophase, postStratify, rake, calibrate, estWeights, as.svydesign2, svyplot, svyhist, svyboxplot, svyby, cv, SE, deff, svycoxph, svyglm, svyquantile, svymean, svytotal, svyvar, svyratio, svytable, svychisq, svymle, svysmooth, withReplicates, hadamard, paley, is.hadamard, bootweights, mrbweights, jk1weights,jknweights, brrweights, regTermTest, degf, nonresponse, sparseCells, neighbours, joinCells, compressWeights, make.formula, svycontrast, svyCprod, svyrecvar, grake, svrVar, pchisqsum, pFsum, make.calfun, cal.linear, cal.raking, cal.logit, svycdf, svykappa, svykm, svyolr, svycoplot, svyloglin, make.panel.svysmooth, dotchart, subbootweights, svyciprop, svyttest, marginpred, twophasevar, twophase2var, ppsmat, HR, unwtd.count, svyfactanal, svypredmeans, svyprcomp, trimWeights,stratsample,svylogrank, svyranktest,svystandardize, psrsq, svysurvreg) S3method(svyloglin,survey.design) S3method(svyloglin,svyrep.design) S3method(svyloglin,DBIsvydesign) S3method(svyloglin,ODBCsvydesign) S3method(anova,svyloglin) S3method(print,svyloglin) S3method(print,anova.svyloglin) S3method(coef,svyloglin) S3method(vcov,svyloglin) S3method(deviance,svyloglin) S3method(print,summary.svyloglin) S3method(summary,svyloglin) S3method(update,svyloglin) S3method(model.matrix,svyloglin) S3method(terms,svyloglin) S3method(degf,svyloglin) S3method(svyttest,default) S3method(biplot,svyprcomp) S3method(marginpred,svycoxph) S3method(marginpred, svykmlist) S3method(marginpred, svyglm) S3method(print,svyciprop) S3method(vcov,svyciprop) S3method(confint,svyciprop) S3method(coef,svyciprop) S3method(svydesign, default) S3method(svydesign, imputationList) S3method(svydesign, character) S3method(svydesign, DBimputationList) S3method(close, DBIsvydesign) S3method(open, DBIsvydesign) S3method(summary, DBIsvydesign) S3method(print, summary.DBIsvydesign) S3method(print, DBIsvydesign) S3method(close, ODBCsvydesign) S3method(open, ODBCsvydesign) S3method(summary, ODBCsvydesign) S3method(print, summary.ODBCsvydesign) S3method(print, ODBCsvydesign) S3method(print, pps) S3method(summary, pps) S3method(print, summary.pps) S3method(svrepdesign, default) S3method(svrepdesign, imputationList) S3method(svrepdesign, character) S3method(print, DBIrepdesign) S3method(print, ODBCrepdesign) S3method(summary, DBIrepdesign) S3method(summary, ODBCrepdesign) S3method(svymean, survey.design) S3method(svymean, svyrep.design) S3method(svymean, survey.design2) S3method(svymean, twophase) S3method(svymean, twophase2) S3method(svymean, pps) S3method(svymean, DBIsvydesign) S3method(svymean, ODBCsvydesign) S3method(svytotal, survey.design) S3method(svytotal, svyrep.design) S3method(svytotal, survey.design2) S3method(svytotal, twophase) S3method(svytotal, twophase2) S3method(svytotal, pps) S3method(svytotal, DBIsvydesign) S3method(svytotal, ODBCsvydesign) S3method(svyratio, survey.design) S3method(svyratio, svyrep.design) S3method(svyratio, survey.design2) S3method(svyratio, pps) S3method(svyratio, twophase) S3method(svyratio, twophase2) S3method(svyratio, DBIsvydesign) S3method(svyratio, ODBCsvydesign) S3method(svyvar, survey.design) S3method(svyvar, svyrep.design) S3method(svyvar, DBIsvydesign) S3method(svyvar, ODBCsvydesign) S3method(svyquantile, survey.design) S3method(svyquantile, svyrep.design) S3method(svyquantile, DBIsvydesign) S3method(svyquantile, ODBCsvydesign) S3method(svytable, survey.design) S3method(svytable, svyrep.design) S3method(svytable, DBIsvydesign) S3method(svytable, ODBCsvydesign) S3method(svychisq, survey.design) S3method(svychisq, svyrep.design) S3method(svychisq, DBIsvydesign) S3method(svychisq, ODBCsvydesign) S3method(svychisq, twophase) S3method(svykappa, default) S3method(svykappa, DBIsvydesign) S3method(svykappa, ODBCsvydesign) S3method(svyglm,survey.design) S3method(svyglm,svyrep.design) S3method(svyglm, DBIsvydesign) S3method(svyglm, ODBCsvydesign) S3method(svyplot,default) S3method(svyplot, DBIsvydesign) S3method(svyplot, ODBCsvydesign) S3method(svycoplot,default) S3method(svycoplot, DBIsvydesign) S3method(svycoplot, ODBCsvydesign) S3method(svysmooth, default) S3method(svysmooth, DBIsvydesign) S3method(svyboxplot, DBIsvydesign) S3method(svysmooth, ODBCsvydesign) S3method(svyboxplot, ODBCsvydesign) S3method(svyboxplot, default) S3method(svycdf, default) S3method(svycdf, DBIsvydesign) S3method(svycdf, ODBCsvydesign) S3method(plot, svystat) S3method(plot, svrepstat) S3method(barplot, svystat) S3method(barplot, svrepstat) S3method(plot, svyby) S3method(barplot, svyby) S3method(dotchart, svystat) S3method(dotchart, svrepstat) S3method(dotchart, svyby) S3method(dotchart, default) S3method(predict, svyglm) S3method(predict, svrepglm) S3method(predict, svyratio) S3method(predict, svyratio_separate) S3method(coef,svyratio) S3method(svycoxph,survey.design) S3method(svycoxph,svyrep.design) S3method(svycoxph, DBIsvydesign) S3method(svycoxph, ODBCsvydesign) S3method(svysurvreg,survey.design) S3method(residuals, svrepglm) S3method(residuals, svyglm) S3method(residuals, svysurvreg) S3method(coef,svrepstat) S3method(coef,svystat) S3method(coef,svyby) S3method(coef,svymle) S3method(coef, svyolr) S3method(coef, svyglm) S3method(coef, svyquantile) S3method(confint,svyglm) S3method(confint, svyciprop) S3method(confint, svyquantile) S3method(SE,default) S3method(SE,svrepstat) S3method(SE,svystat) S3method(SE,svyby) S3method(SE,svyquantile) S3method(SE,svyratio) S3method(vcov, svyquantile) S3method(vcov, svrepstat) S3method(vcov, svyglm) S3method(vcov, svymle) S3method(vcov, svystat) S3method(vcov, svyby) S3method(vcov, svyratio) S3method(logLik,svyglm) S3method(logLik,svrepglm) S3method(extractAIC,svyglm) S3method(extractAIC,svrepglm) S3method(extractAIC,svyglm) S3method(anova,svyglm) S3method(AIC,svyglm) S3method(BIC,svyglm) S3method(anova,svycoxph) S3method(predict,svycoxph) S3method(svycontrast,svrepstat) S3method(svycontrast,svystat) S3method(svycontrast,svyby) S3method(svycontrast,svyglm) S3method(svycontrast,svycoxph) S3method(svycontrast,default) S3method(image,svyrep.design) S3method(image,pps) S3method(plot,svysmooth) S3method(print,svysmooth) S3method(lines,svysmooth) S3method(svykm, survey.design) S3method(svykm, svyrep.design) S3method(svykm, DBIsvydesign) S3method(svykm, ODBCsvydesign) S3method(plot,svykm) S3method(print,svykm) S3method(print,svykmlist) S3method(lines, svykm) S3method(plot,svykmlist) S3method(quantile, svykm) S3method(confint,svykm) S3method(svyolr,survey.design2) S3method(svyolr,svyrep.design) S3method(svyolr,DBIsvydesign) S3method(svyolr,ODBCsvydesign) S3method(vcov,svyolr) S3method(summary, svyolr) S3method(print, svyolr) S3method(print, summary.svyolr) S3method(ftable,svrepstat) S3method(ftable,svystat) S3method(ftable,svyby) S3method(weights, nonresponse) S3method(weights, survey.design) S3method(weights, survey_fpc) S3method(weights, svyrep.design) S3method(summary,survey.design) S3method(summary,survey.design2) S3method(summary,twophase) S3method(summary, twophase2) S3method(summary,svyrep.design) S3method(summary,svrepglm) S3method(summary,svreptable) S3method(summary,svycoxph) S3method(summary,svyglm) S3method(summary,svymle) S3method(summary,svytable) S3method(print,summary.survey.design) S3method(print,summary.survey.design2) S3method(print,summary.twophase) S3method(print,summary.twophase2) S3method(print,summary.svyrep.design) S3method(print,summary.svyglm) S3method(print,summary.svytable) S3method(print,svycdf) S3method(plot,svycdf) S3method(print, nonresponse) S3method(print, nonresponseSubset) S3method(print, regTermTest) S3method(print, regTermTestLRT) S3method(print, svrepstat) S3method(print, svystat) S3method(print, survey.design) S3method(print, survey.design2) S3method(print, svyrep.design) S3method(print, svyglm) S3method(print, svymle) S3method(print, svyquantile) S3method(print, svyratio) S3method(print, svyratio_separate) S3method(print, twophase) S3method(print, twophase2) S3method(print, calfun) S3method(print, svyvar) S3method(print, seqanova.svyglm) S3method(as.matrix, svyvar) S3method(print, svrepvar) S3method(as.matrix, svrepvar) S3method(withReplicates, svyrep.design) S3method(withReplicates, svrepvar) S3method(withReplicates, svrepstat) S3method(dim,repweights_compressed) S3method(dim,survey.design) S3method(dim,twophase) S3method(dim,twophase2) S3method(dim, DBIsvydesign) S3method(dim, DBIrepdesign) S3method(dim, ODBCsvydesign) S3method(dim, svyrep.design) S3method(dim, svyimputationList) S3method(dimnames,survey.design) S3method(dimnames,svyrep.design) S3method(dimnames,twophase) S3method(dimnames, DBIsvydesign) S3method(dimnames, DBIrepdesign) S3method(dimnames, ODBCsvydesign) S3method(dimnames, svyimputationList) S3method(dimnames, repweights_compressed) S3method(degf, survey.design2) S3method(degf, svyrep.design) S3method(degf, pps) S3method(degf, twophase) S3method(degf, twophase2) S3method(cv,default) S3method(cv,svyratio) S3method(deff,default) S3method(deff,svyby) S3method(postStratify,survey.design) S3method(postStratify,svyrep.design) S3method(postStratify,twophase) S3method(postStratify,twophase2) S3method(postStratify,DBIsvydesign) S3method(postStratify,ODBCsvydesign) S3method(calibrate,survey.design2) S3method(calibrate,svyrep.design) S3method(calibrate,twophase) S3method(calibrate,twophase2) S3method(calibrate, DBIsvydesign) S3method(calibrate, ODBCsvydesign) S3method(estWeights,data.frame) S3method(estWeights,twophase) S3method(compressWeights, default) S3method(compressWeights, repweights_compressed) S3method(compressWeights, svyrep.design) S3method(trimWeights, svyrep.design) S3method(trimWeights, survey.design2) S3method(subset,survey.design) S3method(subset,svyrep.design) S3method(subset,twophase) S3method(subset,twophase2) S3method(subset, DBIsvydesign) S3method(subset, ODBCsvydesign) S3method(update,survey.design) S3method(update,svyrep.design) S3method(update,twophase) S3method(update,twophase2) S3method(update,DBIsvydesign) S3method(update,ODBCsvydesign) S3method(update,svyimputationList) S3method(transform,survey.design) S3method(transform,svyrep.design) S3method(transform,twophase) S3method(transform,twophase2) S3method(transform,DBIsvydesign) S3method(transform,ODBCsvydesign) S3method(transform,svyimputationList) S3method(svyby, default) S3method(svyby, DBIsvydesign) S3method(svyby, ODBCsvydesign) S3method(regcalibrate, survey.design2) S3method(regcalibrate, svyrep.design) S3method(na.exclude,survey.design) S3method(na.exclude,twophase) S3method(na.fail,survey.design) S3method(na.fail,twophase) S3method(na.omit,survey.design) S3method(na.omit,twophase) S3method(model.frame,survey.design) S3method(model.frame,svycoxph) S3method(model.frame,svyrep.design) S3method(model.frame, twophase) S3method(model.frame, twophase2) S3method(model.frame, svyolr) S3method(as.matrix,repweights) S3method(as.matrix, repweights_compressed) S3method(as.vector, repweights_compressed) S3method(as.data.frame,svrepstat) S3method(as.data.frame,svystat) S3method(with,svyimputationList) S3method(print, svyimputationList) S3method(subset, svyimputationList) S3method(print, svyDBimputationList) S3method(with, svyDBimputationList) S3method(update, svyDBimputationList) S3method(close, svyDBimputationList) S3method(open, svyDBimputationList) S3method(subset, svyDBimputationList) S3method(confint,svystat) S3method(confint,svrepstat) S3method(confint, svyratio) S3method(confint, svyby) S3method(`[`, survey.design) S3method(`[`, survey.design2) S3method(`[`, svyrep.design) S3method(`[`, twophase) S3method(`[`, twophase2) S3method(`[`, repweights_compressed) S3method(`[`, nonresponse) S3method(`[`, DBIsvydesign) S3method(`[`, DBIrepdesign) S3method(`[`, ODBCsvydesign) S3method(`[<-`, survey.design) S3method(svylogrank,survey.design2) S3method(svylogrank,svyrep.design) S3method(svylogrank,twophase) S3method(svylogrank,DBIsvydesign) S3method(svylogrank,ODBCsvydesign) S3method(svyranktest,survey.design) S3method(svyranktest,svyrep.design) S3method(svyranktest,DBIsvydesign) S3method(svyranktest,ODBCsvydesign) S3method(psrsq,glm) S3method(psrsq,svyglm) survey/data/0000755000176200001440000000000013122573253012523 5ustar liggesuserssurvey/data/yrbs.rda0000644000176200001440000005357013122573422014202 0ustar liggesusers7zXZi"6!XW9])TW"nRʟ_''qФ}ve-m4z1 Eϲٔв5I|br]6;+z-.TG45@FG]Q 1DFCθ_ɱLMJ Rs/:ЊOY9%.즷;~!! ]^m!2sNВ8ɶ"m oP> uY%\ɷxamzPD5a+. omrKT ҉'E}AݼVX=u'Pl০!<)`Ui.UdEEL%+6ui|P{w7$?T5UZzΤ0>CH "w8ghT=.J`9zz@'>Zox͸zLA2Nb.vmob8%zP]®E@gG-KH% Zk jER;۲m,׍ &pG0rZңQ̨/&-$fs6;/XwJSyWRB^\ɒl(Bo=~X*iRmevC}̋8FRƆ vK*3J>n\F1]orR/w1_dՋû%?oAA =t2 8Oezgg%;5/!AAq? vϙ(E)Ќ"8JWk]8 IwT6V"*zB0DljPlԧM3GQYzG30B2w{Ŕey^'aPæFyÃ*48tnZ>|Ӫ6 x qѱ$fWg#ugaSiua܀*#W3@OnaP9;xfŃ@Is.i*Ê*SV]+ >+^f ֋s%-;Jڙ޹pԥZiIAfRΟ3 @Ou.wLK# s8Ol"ަdU/{3u ]7Y81߮t4jAѻp9$஥vT~!w6e6VIFhݓ# @/aZ\:H5Ώu&yPD~ MRJxWeGxf Ylq)ϓFLi)"PQ|_P`ӍAƉ7r„Xd1O_5fbu{ d)TN! { [CBTMy2QT!Bʛ ~>Oeʒd.|_O)s\,F7ib&fT$2jӘDl"XIX8/ε̉ ,LWBI*:-dNrdG]ʼm_1I}ýА+7!u>`Q5 9C7Xqz~Y2+M4&f9?.h`m2x +!A`cZDpIv 㓒 u|j#cb@~ ЅEMT v+kkL-o<F{g߄Xԍá6}'緓qPT[ir ?qf=HzPycw:J~GYr1lpLAtUQz4 )8f!yas1kUۻpc|hn * >2eً&p1OZޚ!23AQW;ڔ{nl`+S8J}+}[aTVfHN[æk+r7sy f쪻@'d;րYduO)r9\P*:}s{ eй~+Q2eٖQ+2xlcP[2}X"/2)s'Ť+6pR"Bu2a&fb96YyzxhC:un; ?akhBS__PTB 4Z[=t J@Τ .x!Бƀ UZ9iyo$k%guB6FGC1W3*M=9DS rMUFQjN} zl՞L~>~KH.>Wl)G6{%|=fza 21@1?QNp2P/phkѾۀn^$JkzuᴃMmԢ}Emk/I VE鴫1A49\"$~κ3B}ۅGjxrv8q٠~@D0s9H@4ً>1 9uu:j KnǢ^I#k ™ĵ''W/_o ܂;Ӻ夀-wK_ZGKҚP,hCC/Zt;7؀$O0"ԟ# ) ̄|&T6$X)ۊM>@ȣݔ-A7PS⤻@>O{}0~Izp$y=͎)>bwEP p!Mjk* {;P5+ &6Z:W*&l7?ɉ8ɽ386-50ΉBx L`B(ߐOb"# ^ZQTdz4LOJ1;m XG'^S̿=|n;Ω}3Œ* XYѡ?SrQEk3 o7.-w<[\-Բ-y(\PK )Q"půp^ >2ж츣 Ϣ G:!,w&;iu뽔%į])]RfjDFRg0d|CL*!B6yU]bwx鮷/`:xci˔?ds -(]_=Z2 '(fs axܧCE3͚P8] gOX,u΃ G]D7|;\.Tc *$ s.4IEZݿZXSf2)MEUCpyEpVx a6: 3 vND &hڽ D)tʌɍheߑ8i*g;1y 0U˝)tg&w#0rd~R[0đxj Yf<̴ v./HFb WWiN!3d֮hZ|%LQ $g1 XKfp7jX%ҲHJ(C59ClXF0|8Y?R =}6ҠjC{:@lA.SbvVod3ԢCAzl⍤95!a$OŲd^.NZ2H̉0zaAA\$.EmNdy#NXMŁl(Iyn0ΠUIt#'=±Vٿgg9&.{>bS LcL%W:y0]^vqx&^+^he?31!L$$9 .Ѫj/{:yE˅aƋ&;#P5{1.K=m1a;yw ɬ`> 2ϟܵϷꅁok>Wb8(ĆZ+&:'1!O+ R~!~9ceDiSH /gT3p9e"MPe-lKKfZJI!QO Q\Miہꔼ⥋;f-aC" B6kW[nOrE4Qd:DWd#D.ˏx,$Q9pOjyhc|7VEW<gg!Ok7&9Ѹel 9Eco{nFD,EzcJ/$F"ϿeFo؛* /*1b7ɥ> ]2ڐQlh\Jq^ #J\qԿCt$Z߿@a͵> 8м5lIm^mrdd{<2BI;üZ?Ss Lg\ubT&7$<ؾAGΝ /&F"*o"D^bȍ X[)DC,;@`W|p"bdnI3s iⴏsBB1F#GH"v'XL\3ٓ]QUzPQ87eo^y~;|k=R]wc{D&^[@vkU+142M9BHۨ*#&*ʾt.<^'b.ϖKEs UGd*2.I2eD3C_HwUl%qIvI ry%"~x@=d?**<-R]ǰYy}~`"o?<ó2G$1B-/D1oܢPaˑW5O$[e~ xo;,uyJP/umomC!u8Avr096ԗ͡U:ڽBړ@W I9MJ_+inN\4k۾6f.kx)(*{%ixlWFaV7|99--94& `Y{ P۠p-4$C4#m̄ƫ?#w]ƴ9jNa3%uYa W>)yJ!ᜑNJN ܲM{v}Kʉ6OĻMS\&~Ic!X:d:MV3c}OCegDʱk)qdk2Z\PQ5U27̮e<ܢS&WOs0.JI_s`H1n '벱0JH@lu'`BP?H*@ƑWŨ^O*)jr%ڕ'HTD{YVX,3[wq1VL6;uIQn\<|mn5̀tO5i0Łhj1Ȼ/ȜËm_^1 {UMϪkc9@1b(qE_׫ᷬG .Y(˾uP|P]AUz~gm)XW#!6%1L5P+Z /{n-)8+Qdl\}E (IH UrS`{eph4u`V*ۙ'xF68#W5-&dg Rތwd錱.^9mq/E#љ]z/kVXW=ϐٔ8R 0sO{"\|{F(wT"D=Y_]&(>#JkJ5>]ghb.v#0fz[)3Ì\ ldI{Eߺs0/MZx0OFnmlb p Wtm1qN;mS(%@坱?'gUi}dE8F'SAԵ>T.f71Kȯ$>~pF-xcQRE&2&IE*1BRA `!yk,rMw6i54TQ;1ҹc^!(rGH"/ff>uEP qbD"$meTq-2$^9NfH)\MrϜ= . r6ȩ0<hb;w3򶒋2rƬ5iVwJ@Oc&(wTxZ%o i-LfWuͿJK ݭSLЬTY7~YX"Z1˼8 6}c#{>P&YMCK}IZ(]0{ Ly)Gw ["b؞D ↤QҴx`D)OG\nMᆫ[E# \<4c M-r*-V,V=P0xϨlgPMFp;HqR6LNW2Оr$A%k 8aXF6pJ]}ވ4G0+#o9Oyw;?/2?ybcBPǠO}x"PCi+?Sд sci5 _3mxT@7Wg-!]}$5dܴsnt_ݷ$nv&(s ] i㩶K×ZwH쫧Ъ᧱eiVصd Su%tT(US0ltRzzb`][)ʰ8S )38[k!aIهC6]-of,qF*~YĕX+lf$/IpM'IԽ֑FH5hjICCA--4ɦ=׭l9\kiX D>fa0 ז(9jM8St$g~8eqƔSԇt k|sŷݍb/KEESnFYavebujEǥu嵳$Αo`مq M[*wdFdُLmLoۢFOxVC#C\1,B%>JXG9>_"Uu '*AtǥǸY2B?fhnDԛl]|^],{K$0y17lW! 2XK"D6KWp޿" CyGcb̎Q/3*=@J3s B։BEZDqDS,~74xY}B$3?F/a肒l['0|LNs\UHjjkBZ8pw,F0"a QC3}aO8ݏ RfRdXi@w;/*૿j,:5blgO>h>brm% -|4,Il}]˔2ǴH|`]jc;!Sm xEi x yH_0EmBZ婕cS e`7{R"/q8f6CeagRo\{L~_H7m3tM o>MwPT@&"4ϚzH-S{-4 `A gxDMލ>E<315*3j$\#zuC&1P]I+7 tKЌaЦgJ< ȗ 氺V=nW{n!H891I!.оVSO7ɦN%%N[%l˺Dl"9k ^9#pP< (LLL,%>~ȍ.,e( 7k`]R_*[a?Eumkze9|YYIA; A|l7w.wW+ʗylN!xVXbUzb~t֝G3xՙY*X^geǒy?T%\Y^_ p% -,kp{Dre["_''K׺{9"kJ4ˏ2}b?qU@'QT7}opZPX{>)TJ%~вV0-݉|nߎ)[f6ێ<ӃB*MPhth ^g #L58SJHU(nqmBO @*J/ ϯ.`C9ݵة\"GƊW\Ii-[DTC+@ iF  ` E1K\]=-hS8T9A%={9`:8IcI2eȡt>`^ sPG4X64mX ӝsə$f~"z?iON-YHC{CM~U̴SrG)*}vE+5 ȗԝ#K|gJhdϯ |  OARA =+MZC)GBQ/%+5~ج%=Yit$;+ŁVjuz 7P-L:3E Vʶ ]'}#'֬o=\ 530ҩ j >hYϙAod" [ȢQ\bB@RѺH'~،:;UL6Ajз^Ki')~-jYv_}C^+]tR2uzق@{(_eLM;<~QdyR\Ի4&Wr1{wW\MaclXYD fEϭ #ISulSV_Ev4(JK1Vx!6-2wuΕ#~ѳaڥ2X;i&a U~0oLSo  z}AR4N@X}e| cH6m GAWyl'7\)c9*j(ݍ} JFxs;C\jY8mC6i5Q4sW_ª _P܉+EfMkǗu"Ϳb>ϩn]+lǕ[\sL;~x.UNkwZ-iP~}c+Pc"XZ<*WK,k E тa={P$6;oȕ a6EI%U0/mŅֻ}>RDvǐvuu{G׉[0Cͫ_ RVws>pD{“NnpgHWHz6E°iM4oVRFmwi ks}{.vwԋP5Nܥ]VBĊv;C(+)}l}4~GA9!-g<&䚾ăF=d!yE 1]0$,"Y, MĔb*rVʻrF#P;DKGc&L0ubzSﳚtwX,PvMBx|~9zϚ]B,-GG$6A_D) cYFk 2_YrA7B"2,5Nęt[I+?hٛG;,{ ps=}б@d` o$Ve87qh}(5L!>`=NV N:ͯgƦBolk.ʴ`rwύ0*u&K̒S-.vm>)` [dSwӇfն6fç&推> +GMfT͠NeNfW76Y񙍆m~AvUB/}Jy宜R}CrY@50OԗN %U%vC .Nj4h"plbESɚ! &=9OΓ-~8Iʧ˕ۑF{yHvG6ua}Cw[:IS H91[;WoYSDFF+=5av^] CjZnwQLbFaQdCL!x=?.vrE~TPTu}B6yA,h>FjWw6AxKj+K{vWwY ms]MTMʖŚp 3B$s*_0Bzix]@]9~ib`g6%cNjzNN{~~/v2cWΌ?,o*gwHZEhڞ*ɷQx-Nf0> K$$F3owAi4|M ?g`3!/`N/Tʠl 4L(V /lGXj-b U._] *i㈦j`7F9I=e$ZNI/n4WLY79?|`SF;WK2st*ةz{:)z4R"te$.v[Z8'T`,]vaٔxQx]]x$v?ݪ–-g߻R/?\&Tt&?{~yaBJV Q"Zo\\o931Bmk T]HRnqI(%Ö1+1%DR )Tn8H_I~6[yXU{ba`rpRc$ټ24 rLouNǖLvg{;{b =c#[r͵![atq|Qm%FeZ3y;:F. ukF6X:X},شYLe]"겥}F\1So t'D SUql&xiKkCF4TӶVWMTOlLŲE2NF!0d=ACɅ2_L/P3+"ŤaQ3oI7z @c' [Fr-DDEVK ^HVS*XHnGJ|guS?ˡC4 Q%[KZz-,ARܝ"Ȓ}2b~w Rsv%[/<҉Gʫu2ӪF;dVT>Yy"qkG)I|'Hےcꬠ-Ʈ_\>/ `\3f8&gM8/Ac9T5FD;WxdIt"~TRF TUR)&4ȄzYb+-7Cid8z%zXvk#B[W<s oQ!%ˊ!2@3[6c 56ex feY曥Q!sDsbhp]q#2 Qq,Hin5=q a]lXi[XCFxRs(wcF\۔~QTd.I?s`K/_@&)pM ;n=mVߔo$`k dtd~]"X Ѫ ,b׮&m~/:)qrT}lE_&X\)Q7Ж]Cm0Rm|jD?!~^+ wpåp) 腷iy"Z@z2lٝcN{hUAFּ[جrec-O26c%[/lIPCS]nIy[T_+N_o0f}A hfKE¬H1]Pz_9JC '9V _wZħ}x%"j,٭\u^&u+ 9:JAE#D1A8\&6i-<|8<[Eksi`\.A?"m5ΰܹB$(.-U=DIJu2AY@EOFyƎ5faLPfU?v&?"H̋"( om QL,vTJcMluk(¢yD<>EipѠ3U+c.x]4go/[s -ʏ4їW PA/fD͒A*ۭZW_yU<2C1qzaTV.=Uj7!M&=B.h|xgpFg%wF }~R@LUG&¡.6h| >إc1CC;pDgڊdMЫ gh]b6?>EiENXEסypT0d0Ʋx!s֒1 W e}#nM5?3Un2#@:^4Fd .s,M%٧iӃaQ%ҊS2ωc߶pm -tT$̫犾v^ WΊ OGDf{lE!JEAYd}3*1ppA3tp`C:Zei1$r` !}&4Y[BO>iH3/zKgZ{5A**:朷#MDW2*15w4mt`觑>9%lPBSZvJLf>lBٛmdž+eÍ,e?yq|Lno5C?(\ˆg\b!qq4o/OzzK y1p9{C -Yեv|q{@qaƏ1W7a~sM_ J?( seq ?&P@l67褥#@0I!bd0~L}LZYG\ܖ^lEKVd3jUL,YPL3d}fױ`M7U2Nph-4!7po2 Sndxpi1k^J,KP+g,@-Lq`m}wnolR L@pN5Y'։*LqwP*'΀ID{*ĭV 'J ?^.")Vs2&_EB͈(#?Չ`,;m5:tMyz.eBnK;¥XFUCSXȌ7ĦwSW`nfJr 4u. nuz(psL_1+j7oڟ2_bm">>$ȹ5os@|WÄ} Ava+Ǔah?@ҴDecrEf˙XVߐs WG+)[G$^)SSeϴrx&)_ WxoNK˹VGݍ^6q@s_z&Y1cjD=p]f\Kd6y _>{p,a$e!Z9|Fa볘 `hyٚ]PC. DOLP Z:QI]*Ke Dp-1 L ) >:?Q8;m^`b yvvY8ihA~24̔`a9lT{َ dܱ $>CkV  !qAA\+mI^&MUwlESD)gy]P|e߂"$G^=4;ݓt| ~2zo!@:4r蓻L_4]u ټ|ΑOql@"8鏿OS{(!'XJ"?XG78 7e:/VY̶Ȩ1J{{Nzi/[+:ٟWͣ\ =. 7^Ꝩ7iL6Qq:NZuUjx"׺='BnEvzkݚ"681{=Vv;nbEdUt2=XDv,qXUwofows 'Q{/C{fOO[ cFbE.b`W+-?O"3v @43B&_ۋ8l%>Qrqn+X"_4'JTKdHtۢkMAmJ_D] H7Jxf5knZL;G;K 4QZ\ h|~Laq ϻ^y[ҹ *oшnU=qzY!}ˍo߬u'z/^R.{,(WZ Z7{x;+@]x7Tp'x2OrAx\Mԑ,&<1o,qOg<]VGvOеDzBA+) ϞA$d騿,_2Q~fu)~|л|A;Gm>coppow}سHltH#}$u 0\B+AmH527 ,qPg\|HNbA&Wd ?kuZEjEOՌΏȋw'̳J*>t^Vt_धڟ @Úxv~lq}Y>Y$;)n4LS^݁%]Fc52\c`OϻCopQ6 /"kTCsU粬]FRy^A.()Z$ ZQeiyG+tB|wݠ1aq UkVwRGbZCM Go?=mO'raɌ_0 YZsurvey/data/nhanes.rda0000644000176200001440000016226013122573422014474 0ustar liggesusers7zXZi"6!Xt])TW"nRʟ_''qФ}v˂V۔nblf9a-BYNQ'3'_`gh]gTNqJɮ~9tajo&)($So|HSv/UNXaDc*0W']vDFm%iA=6 ='ʉ)ag΀ F?tŠG@F.uIL_~vU*wIO!Dn:([+yFlY tK)T Eا۾hz&Kw8UnhnZ)x&t$KE2"X9 NEEQ2),~*> #`-iS)aFVQ>ݜ:ٶr53gm:T>+^Sb(刴1? mۯݣT>pfc\,8]W \k!Je._3|ңɲqFǺNzeJS Ô9jM\n}>K}ЭR~;D6W;f6B3{k>;mhmKG#^B'Ai&#Ƃ7GQ&F\3ie}sJ[W9ԄO7/u'hX(j.{ -pg6 XHE7 WʨskEi7ύDIiBimkcrq0L!nÓPbHu65DX 5u^ˏ}loȂPdl*=nο\T<~iؠFaghVw0pE%Gf_0NrUU*"9lZz r/跲* }u%+z;Hʽ;G' ]җ:XRKgj$co֮t}Qa! yRIN~TٔoZr-s0`>百eb 5 >anQ8!ըQr72,d5`#qQZ| F˦<4AZR*f{Y6ocB+ LjvQk% ē>GZI(#_փTv9f,L]-&4KtqredpS}zz~23*a#!V>ܖ[iYY xP,@~s/Ү 8smOw5t(L}2߈3YsI=R"q$|HCz -[sm膴Gb p_H}Re6&{sOaIz$i|~ ֿ⡄@5U'fy=<>a[ݯ[m|3ut俦 A"曵]Vy5ᎆC~Jğ@D5.'}(2t:ir=; =`pK^?!RXџ c.CbPkE`챂-NF*G0`$cVEf)ERMK~apYіP$4"~o6C xY^\_97#)V+<͝lha|D,Z&"Uh jOvi:u[˦1H9E9XdžT^x]\dK.. ў#ٮi3'غ6"++S2.x?1c!@zK:M:}X?_Xw^!xi_?*̈>rQ1JǽIֻkpV`na׃s[門vYl *\=$5ʪ0J:m)t} jfFO! ]WYJXO>. ϷiFbNf nHv8"1Y涟 <<5(b{kd4S¸9R(iƺRCJv5 [$L8U)MӣkN>irh6s4S/4}--d$aIw^}Xm `+jkC٪N⾂fwPPIMZ?bƵO1="^ffݍ(X!KQ )s. $|=ꕰ6{!#~t6@$= CN.y`[/#]izǐ&W'*gɕeD]=c>SoGxdM*T_(1CUԾw:.}/tTGpS|r>n9J$V H46Y ,qϱ (~{Ffx-$m']Rﺀkz5B.Un~9ua@d;/PόٵP7ע8O_~8a/@= U(v 3Z à !(1,m*p{x@&tX00H ҅^m:;߸s˿CDo"(CvRI6]2)ڸ*%EMwJZ}pJpѻ[Y1 ~2,HtDr|4icɡϰ*%2F(ޖ\ʅge@g;^:/h| %y辚HY\=Ta6,(w*7`s,^;Jk[V| 98;  Y|rN3ylH[l֌`ÐzLݕ8yR[tpZfLB,la7nB`E^獅fp mZnM Uʱ mnf!I? ~#o';xM6zGyă-9t :f*8^SzQ>Ж dDnzp?s0D]:T׋M`{E 8~YPd+@,{]=ү %) Gl)dĔ߲n,iWO{$`C*I 9g3J{ S3I@ѐn|]am cvZ;J%ʅ;ADYPuVcD)gb?VUfGHM(d851*d6r#fnuMˑsֶ2(BDνf?cqeZh?쀛%鋴^$=m˯tq!RhiI nR_(i1ؤ<`le/'~RZ6._3Vu!Q[T3߻USAbk1Qr%[J]l `/&5׹G$(ev=oK-O CcB;%rđFۖ :ջ# LXx8SQqYK^Vհ59/} 2ܱ{71AxyE+( "(=Qw5xzCN_yhkn%bj}a{"EgheguҶb nhr0>v`R{%S/ ,kQ9C@9}~-Hb@Qw2O4D^>cFau]-ٽ݋BكVGzH8>xwrb~KNkyDC0J FBOVV~(ٛ "%DR::.TlwV-"^ Cq:8zl%xzu|z*l,HW# \.YύRAдGa>\ãN:s-Jegض4Jyָ f^g%Dy $I'D_R Z39Pz\H ]k'89(%XV]\o7O7,ɏlN"h2*R*u_Kb3yPN ʜuFMBhhݒ>Se;M߉uݽ_E)ɦ8v5pl|ZcGe68oC#9yyrv |i~`I?>nX!5aƽ֓ҝ⇫%ukw$|, U0"?~+/ɢµ^ [#o_d,IaU7k@% O`%k M3)}o:ؐ@# f#{ۇ:C~l|i_~-#d6Hݑ.g%_}s-mͬO4fDxub.1ԤH͉CF˥;%BTK~ۗNa6kգ^t%<4ߋ>P+tibkHݕhHQ/RM!Vf$}}X2y%c)N_ C!ۭ8/_y/ uԆHi ~g+6}>dpsyhWNP6q[c`h #rQzҕ|LO>9JWrq b.|.CK k ͽ'ٰc`_lD>:ޣp|=V-F3T]Ia+`+ckHp8:bKsfFL{F>>1:h98h}j,$'͎sb \u$]>LGqc!ujw#~@K (pń\f@ă m:JaGWm[@W:8`PT@xuliyTmV!tXYsp= ng뾳%U)Cq1*~X6_ Wf_+2l&]{u6 .hRipdV4MIq>ܔ}ŪJGD! [lsMik VH~1TqXa_}ӚD#=N!X niU<:]$'xJLx괘 '$I} jDS aԣTq8la?AT hGذ9u563m2Ʉ'yÃ6 u]\<ֶνҢ| pP:[V9A|:׮]ݿU;Wy_xLNW[N1?V7ra9ÍK[8SqTLE̔cg@K%X**m ![ُ[gLvy}ΥGDwJʆ[uj/=8,U.8mLWڪ^wvL$b}Aj{߮?Cqi(*(BpS#r)aeUgo`wOS^˘GΰM|muh7~y]g( +8[Sx4{f>6R?K\HGj>zo:<^>D.#RKwq2m %ɨ_~G9œY~Ug?^+;sjOMiZ nhu@&h쏃w GKЊ>b"n~_h8tonGҘ{-c33~MM6}'OɋwJpMB V.>^b\wr7)PtrO0vj:ؿEHْuBJY~2x\t{TzHS[Nt^R/YkX P(,k#grE6Cn ^*xą0ت !Ew7_]TkrXir`E3 '-ܮ% tNUg Qe4U>JNǏԂHʾ/=WKHT*a7S6D+ G;FTa=kҦƎG E+&aZGu6+TN'|U6m܈I ^U &tR0_垬i2ZOWa~,zsҷҼ-p0Ů+/̭ޚMq`H-j;Ǐ6Fa!ZL(SV5:Eh!m_l?SwŠT)!E_}4BUup jԋe3ͦ lQLD7@fAnsch4&ôX|G[aKw&x^箞uy&dv Z@"*h׾a d }hBa#N; xf GY^sӶz=`١fʵЎanx)̝m1?L 1iO:(E/cZcv0g0ܶuQ|=*<5O+kRL@ $fKtDk3Ohk:A6sk~0OBq?0hpmgL8r-sT/Sq~[H?R@L Cwڈkn|)hkX/A[m$?? oV|:]a/"f9t(שABdpT?O-ba%)5JR}ΐHꒅ'UYpBsTAWAJH! ?ٖ^{0)OKx7Qė ws$A|{ɟ77Yp"`7 n#HI;D-QX:G2R]\7o rkۢF-d:]³quW¡^n [kۻeSW輳N)!Ü|ꦮd59u"ӟ3 lO'9h GL 'rX{m黍."PGjOH8- {اa,U= kغdf)M8,Q1NŖ^?ˎP'B1M>ߒjA)sE"vUv?a]Vuv T; ӫuDLNB<,*!;3TCn萯 {F_޻qQg¨<Kr}D:D FZQw3{k:U3^62V JM٭H<|t41w۶s" Ip w| Wf@fB@8f傾#R gR9}MMo QXtMe%0lA j\0*)-7b AkX$_.w ݄`w oM>&`ACL~}Po*jaOy _q;%2&|fnmnm$LMB\\ `h+[u!̱utk]Ag 0[X.*Kb;'>/6@A7SRbXpOc{2*9>'Z)0X:ۭUA̐0;,=,b<^4X=WKHkc5K*4`IRu~usӿ7:%ա)F ŹMx J]A|8Ĭa\INElU t*$r^z՗.$XO\ٷepΓ} Z7QG󧄕Az'zhGmT?z`1ވ Zz`]cg:eP]p)K= \̙|Ղ.#WAh@"jO &;쀣70́8 u\\I+Bh:G1E|_nVu"$ƻL$AU^{C\ @20Ł/@T ޤiU-i%ԯHCpгr6'{iwY,msKq;@=>#˳Y O~^?NY uB13G.lgSq/w=wuLO"Sw/_=m!Pðy~)D(~LNR"hܨo`U(`|d` 5[_o7o9SK;oJFvQHyHh(lCuOLB;X"wp'Aj[+A6>Šbfo Jtl 7 sMiyKA<6}wL63 16X\c|wG[ζTCDXt4i,εֳZ mF,fn#gsFZLGrv^;xJɢ %W pU*"pt/4xlHfQZ4"ZVV#R$ љ sxe9CJ.[_i 7K2mu mc4?ZT--/vp(*%T0@ayK.4k8 0\1#G~ jU(U骈PgW"Ä   h BF2Y1f{&gAT4l(|B,g,Q7ͩ ͖(sNw;J굝{|('^Nddv-&|űS/Z3Eل?^7 Du*\N!f}1} FzKB2W$9;;J8P|+8,F&H'QB/)X^"ŝlH0l$*o "v589 {v t!q_Ci#s{a1K0{coTN\HJT']Y(i3*A+GFe@6};Cl?c1NL۽+6JG8O a[^Ձ ɢVL /79?a%Kr: DHTXg4l\.g/9LDvqh,PX"AJT=PSGL)DVu"7$NJh%qT#\Gmd~'Z:9|҆8I#zΡDvf^n$QZٿj۩ChZuaJP;;zb I-~q(jCE!N~Z-1Srk!Ah/BFmj _]j_d#'$R~7)+ODGz@ZdY(A-bڲI~L ܸk.&l@Yʑ 8/W{3̱;h!KWAJd=$[[%|#:`[QܡFVЀO׽B1Дθ-5Qk]8[Hҿp+u^VuG+.|~bUkN)<8^x@se3n$Vw:urLƣ{xSYH4w%gf* Ze %[8ZMo3-6o"cw9t.7|92SW$6 x=Ja?Rgn\y[֯khj|4Ptn|V{~qA4Խ9T'aAݱY/ bڄYV>*-P--01CQ{kd onK@I FmƇ?W (Ѽ<&)]@oNU5PYReUijS2>$Jʂ4c%N,Pe y},QTPrVez؈SDW㬲|ѴQcEU24t^{'i, pqSa.{q,ʘ& Wdr8.%q&8v N€y "rEU/EA5sW.H>?T݅gШRY[b&Vٙ".\09Ol34TQ+WoL W?8N6"Vb'RfDMq!pj=@^VhFC(b3lBvH>4gvx>{H=2ZZjpsug'}5Fb^;^-?D 2D׻" H n َ9+M)vf%nrZ_,[SO4;UMv;>?Eׁ*99\(0%t+2xbn^#OF,ޅ$nbGBL~/Ԇu:' or>OO,[mK\@Z?x_9nPL\TaKrJM"K-)6_B0݈^,9]s{ 9QFA:j`ׅ:US/^s.]ZkCJwvNGU&WXR/#B'>1&ký[c5|bZ$ӨGL4[xw *]ium%teRⵊ/z|o٦ )EqcX:ΆX>)Vs$뱣%aj~H<җ"FV-U}?⊔Jɋ>' Yiu ǣ3RPDQ~(rz`oZEr*-YfD_"T`R^~yADS kF[0'Zjl u۶aZz:Y xO䀡7ѨY`Mtfww|ƒ]3ZqIݢ䥮Y9DXbtWtyէ졚+``ù( m?7H M9v_PSw`Y燎}Haw\xM MMNť!kL?v4W4@1Z4;p_|"٬I58oМFd6":;n#VFF؊ș *@ ~MO{/9Y;<707^r!ӕCMpӖvyhocyceX*͝"Yg/^;R Rx@docC;zRl #Y(S2*۫-ŒI/2,%9cؖϛ<{{Srx{Aɘu8qD\yS۵so [*K1GyjO: S,g)S^&a@>-l! 3UbajwfAY >m{:PojD r^6䌎F-wYQ'ח([2hIVC\K;zc4,7 Lϸz2H:|<%w2avfȭnG\tJVt>{RH$&bCK؆{ Q/wI-/s[Z0Uknj\B3vS~cYגjcX^K6/ڞ0Kщ(Y7Y"Ĩ\aVJc)UA԰,(`)/zZ#(ZfE‚W?/^".8G:w?CCQ Ywyf#*KJOvl[hsEcL {1/kk{pԋsq2]A~>W=#=gF =@xَ^ֺ|7q{[潜7hm!rƟ|&f0vNz q(3ȑYګבSd'ey8%*rJӓg}UהFݬk`Y ۮ75l͡npK 43 1\rwaԘTXdb҃,}P]_)1sRwHDs ϩ8G(~zewpKUBlY* ~0:'/ׂ nQr&7|uLkPHNF^]]j!v9F@V_swH~EL1>kT5\xwf蔹8˘h[\!a~8=DO3X/>dMLhؠ? coh$9*)lzX^s9xD TVyBPaDl2Mllb) O,#Ts&%,=XʲNJGĔ̙A@j_k4y7%l{*h~Q$ f:"f N%;=NQceBt⚃rtMZBdQ鎸"Y'` 4& )d7:}W:K@+Ը0-cy6A`רhsR_t' &>74v/٦N(:ޚ.o#ڳ ٭jK&q@yO%Sw}6mz[wpT0 5;$ӽ!:D nYdљğ{W A$k{&Jt7j)j~@a^ +C$I`'T RNڛA'H @_6B`"X˒ ú >B6`gk/y rߊ68sŌIŔ 4N:>?hKHUBE_4–{acm/Bj⬍XΊ~2GBs(⏯QcM=m-ò;Zd;pbHw϶w˻]q@:NTbn3R>4 3략UhXcT+{ZTo;^^.eu͉#O +8~[ՄiG^p;Nb)R% M8|,k,Sf! g{"'9S0܌0@[=OfuP{q`х+C[2P-;(+{G k3F yr,HF$IyNoʵݟXHv(ّj#4_lVˠb +yHihFm ZWp8{݃m"J;J\/P9y0/il|sYCd,O:ҚER3nDM/<_Q1B_;*J;`a%?<+mcC{:rܒ`h _/8/m#y)-ewVMkjB5'd/ P1|Z7>;އ 3tzLG5X[=,eֹ#4yt @QZO$4!<>ב@?_{ؔԊbT(#OU2"d%oYƧ-'.3)W1*RGT27&k88!X'jZ8ʭ:0QO?tq*o݄kKƥ tࡍ NiBA>IR8Az\:Yr>)z0q9ޘP"voEAAS7L ~w>;M2 kʹNDΎ%HCm+ͽenN6qWL':.N,¼ŧ{]4n b D_ej(؆V-Y ced#` vVf7jk!B9qW[~%0ڋGuV"c(i뼋iYAeG|˲NsPFz;4 Irl8x@a!;B)ux+V}: Ǔv׏3`:;k4 +hwqfc<zBy <ץ#vQHjFGX,ѩa!LxjqlCD\bϱDl/~PxMS]$zF_.mvFZy?A_ 73- ."[y*NƗ9Qixkz&q/Iz ;-$0EwXvxpT Eܚ.ߌXL[ԧWFC-gaTp!vH92I㟔cE$tMA W gf~K~=awENf9N,Hd Qp\ֺɻc;-..M:y.再5<޵̜i]qz7>CZG;SjCEJ`AtT?[dް!/j51 2(?Z_!3ۋi"5k79E=[u.Ɲ>D_Cu[y MԔbcc[P*dX?gDv9&"3T^m^@i[ z+i'% ot2wrBxA,qw"MQ 䘿?V\,"ӝ1j6!a_ }~Hi>sA~sCQ/S\.CEdTetEY5qި E6nh`CqzN|gش/>-mC#k1) xhmGX L̓$~,Plo[Yѽ;=FBXQRZ>ܚ`<~m0|zDגc+'0-[*I-Ds(vR&ĺ8vgS^5XUuFR?YQ9…@L~QSר 0<H3PT[_c(~WgKMIMEp_n~խ屑ggh[B3 B c{"U޾\] QVFB ǜ:feT9S?Xh|? v\ohPH? ϹʔKP{ǜ(gʛ-)νZ16KoQw!ճ kv}bFfd *A:}0^~4Jw+H;,pJLTl2Z{!]t@tvl Bɋ)O-{G[9R[5 #`Diw`z+>xخ˓˴՜M @9fȣUygAQ4姑S'Wlŭt1;ӿ/X.[< >ӯl"0Y׶=@T|w"RK@x%4I f o㰦5c݁.Xy='Qkd&w B@ rL6=\v Ur]sۃp=a&BhR5lExC3>v@z[gq̨.<9W2D8::$rrExSRN+ܷefvߺl6BϓI93Q>Zs&=2%$_f@ix5jB kuJ ѡyxh (-{x%Pv>8_TR뺾?5̛~;(H&{+,r3IXC%aY WY\r}g՚9xuT mEn}Y'C;VIMp=RD$ :y ύ*gbt> -(o*_3wrЊ`=wiRGgYLtT=A*Q9O+/G0UKaJXZT J`notwNP~eź4<z +Q P]ԃpF;ȓ UK-I:^b0gS6~˼;B vMer?;0Qc٤P%7# (% SbFs0p `9~Y ;( ($F`AodSz`Np7Pp 裲!@6F;ȯ7S8t47KXsɨyٮxiI^@w@J)0uJ1G0mC!Fm!|U(<˳mop2Hw!Eħ- u1+3=yJw_hx2M !F!|7+kV}_x-F$鄃Фh,l৭XO;_ZǎwQ #kN~{ΰ.{H!`N4Ez9ځtPX1}C70 ޑc[?Hɉ{?Q`MV 9{GÑSEPέ}wvԱebs$ъ:yЙf1rl݉S\w/|K_3.-uzEfnwsW2?O7Xn38ȚI)^YsC9̈JyM! \{xO [kP& u0UPɍZv-Vuҡ /;/wre[S^$vzcpzDh%/ ,4gv 9oF^Ia;`%-)t 4E!%"9#& g@ \ >FUR8E[!b/^[0MtGpl绊(oI@U^1Xf < HuWXRXP 674.4-ZlQѕrTrCnPXUJa5w| D쯌0'#^c]P.gmWm$H5v]/fb씰V"35 xZ1PQI+*jT61y5fU yZl%>MQ'bPI;BDR=F01JPzjPROEmg gH#xaJܤ|T[&ZE `9CaK/pt@P)cքyx2k'LNr>NҲ ~~|3N{cM !cxM;ƽC; {ez%>U} 7dw RƐPx"- P=PJp4$xة*蒗d A)L'QtH*3jgj,^3)IpШ:SgӃ^#ow=Yd\Wp@#Ϋݦp<b)2L!9u 2&mHjQpK,3:'|v[Re;qd$ r5TACЦz9^sG@D*zK3nh ) }^]CX |!_^8TFlͿ3\_NP# o-%uUE?pAsj 7?Z#p=:MΉ (‘ x2nD'4ĦrC -f&Y'?4֫"Gqɬ1Ltdǰ< *dq^Q|Da`-WX&;@(sAQ/b\S @E>-;uY\0ɸͶ]x)̲!s_5QR^\)+El̴ ytJ$KBuNn 5ZFmu뼙%5%nO1 AeAm7 _̮/u36=LOYY.K 2B~8c}r}kh96L br3ph ݱd:*5"98cG.vo y nA}"KJ1V[eكX2\ؚpցȬA ;#h3o6fV~VDfS8 3eg@D,p 1,ֻ`:02oi3!ovj:g Uj1wٺ mY֢ZPor y 8o`x{UF55? $g=kgDAzN8lYb'4*zQ]zHiBS.@*uM,GX]y֞`V}7sv%6|;:Z;Ỵy2g"c\ "| R(9 s( }6Kofȓ5JM<7t?4\(s*kՁ0!N7`ʺ2-eEI8y!k^nkȷ =A,I# ~1ȑbR0B\vKk{Φ-wU5T}o vIEƕ(SQl^h%J[;C &NRgG@dPV02{rsgMI=~-C6#d,un0[j }>d w|Vu~/ל&2`>T윦WxHR0'c.'-ĥq1I{1޶R9[]+Y!&Ϗ8MF@l) ۑi(u6@t)E=UĖF Ҳ_Ua^sc9U ڵ(/Њ[bT$N={ p${hI? O䠽eϛLReV%) I".[?)/\"Y8dĀ ,IE0&_م=h%,U_&_m*ES.ȑT1@ #*\YrEy%B$X`&d"瀪_,q\d]lUQ'?tRv!IK@"ۛ-ȘvX_[55!֓NV@n)y "َghMӴmo3CW(R;}d< ЀfU3IJ 8oc660dCuV_2)Q*CL:݅aA0O8 #BǮTyx&#eG$p¡+Ses^i1#CH#rs߃Ap4,K4qNٶ7omEΚC0;3Ά3M- 9SkU0Ƴ]r 0qr5h^ 6қAИDeII~twG{ժgc$&D!(#udyr;ѕDW\=z'!Pߦ:,cVX!85*|^K&8\ږnxdVAwem-?_W)wQ{pLc/ (┕[@/ Z6OTT2+'"Ľ{k>aheP/y ALD #F}h2/01ΪG3].ʑ/`GܰeaBQd~iKd6ۂ݄]$(qK9df.:Ov#\,+=NEF MUTgtP*b|M GJD*S|dHO7}(Ψx>ckÊS2 :zo*5)/0}ca-FKIeKxm`l9H%A.rDүZ 7b75.A$PjLPhMm)=ʲZZWTA5^V| F[gXNXⱘ{%|v:^b`ygI%wt3. 4͝520Vgt 2VTt]$*ƵW\IiS lW:DhiI|,No*E|>H挘2.Lנt+ wbsnr?,1mSdxAD%m M F-LBRğ"(mXDIoJSn%`sftwTntO #9S H]܏NJyUntp^2 #~49Q؎1I?.+HSq˿.ֳ55/DVcJK͇0mmvQw|K:־1C?kx0{+Ao{~5尻DnTMԦ?"-LDrkS hdZJ@-o㵍Jae sifwu' I~檻@S~JI{əż,03UJt_nI5)8M RQ⬡5TE{ }q K|w؍r I0d!|5uITe6QiӾE@EnՙH*˫ "J83W\# >v1',pZe>Z)X_?cɾY8"Hljw=F|Q슷m^绋{#: [>@mI#y\aZ,ԍ׿ ja]^G WUQ _$e.9mK1E9߽^I*QL"") s8XVjTY (5d 炭^4-Ap\'Šbǒ$5 R ٟ-F -;GT(0=e"3#f綕ʔ8ՙ-il'P1ޫpoϑ|c1p_Lkްva'#T/-%~>!+;m*M;|6޲ 8O+Ł7اg[!|ScJx\O~7[Гz$bUЎjs %zP MW9YJ-IR>3FQ CV6iG[ΎCo+g%k-;mGa8huVsH3QL_?0&RX'Dl#|Y+4o^ǣ=W8QY+7WalyaTɲ]1!溳/b aq<{i*h[&: T^q.[ҞP&ؼ(Ku(ac M u9"m0cJ!ξWW+^/ : _z-`zcxzh)DPkĹ1| ca4Fdp\y1G5no6ߖRK {eS~jG&Mضnv3`c&Po>b ̉ie=#ruOaEm f4;jHV3g]^a^EvDӊ}Zfl!M!T"9f>Re u:΁EgA~bp`A(6AeGS"2A}tˬWߑC #ɥP21Im3[]_Ҩ QN@r91<`UQt .LBޙۋ;p'# wN̷ɷ;`c5Zs (sU~t5QNTS 4 sa\j1yT;XTԞ% Nn:}K=.rB]1LdcF:"[yi͌RKekhUqpg/¤)u߸` $= '6 E(N*)=:j`XLyq 0B>` |O9 X' I299 W1yIP|nKv; °| 342YIf9=.Z0Pd[} @LP Je/zns 4d Q}DӢ.*E` H8"K,Ժ'xh\o޵bS@ : c{[-1*tֺW%홐N|sLJPd Gfb&nzo+8 (([muY/J3&cS_AXR8IbO&2dXk;3E7CXۓёPCEj#TWyRZU;e9/5GMs3 `:Nλw22vB^Nl(WQn@ 1ǥy+P:d වڦEVB9^,k p&8@f B> N 2+epgZ9\VABl$b3u&bǔ? ܪ\FCkQ̝O}J馎R[oEөxO#ſɌ bpgM쀟KvrgZWZTz."Y>:&;Dk>˶x"wCҪ'f &-ǖq8"Tzl='3)PKoLM(ulo:ZOR(s[XBCRQ2^Ig;#ц񟌖v[zѐCQU2[M&Q)FozĪ>Ϙ!e1 2%cYЁ*: C4)VuY84х֋HQX3`JkGLP_%GDGk*FQ."#P)wfi%|6a Hŗ؄./NƢ%8,Y3L>M"Uj'Nm=D,SA,c3䰝c&p/˒0S(vlt(gz_ P%hXѺd4!L>%Q֩Uщ9eM/^ dFEyfd%ikU`I j[GGj ۘVWÈX%=4+F/Q_,VD-t¦?v6Hms YU\`c7SQ2S 9Stpq=]n.U$yBd+Q7zj+Q,6edN5ZgQYM:l*I 0nXE]7U2oRو)@9p2]G6o7{9rߔad={C{r8 E tv|X-$m V Nyc9ffT3,áq3`=;iv߼OpKp[ r{hh6Hnv^M{Ӎ)o<7XJ OolK'pLn|]a E>rYfMKbr"BnZMxY|A_/Za89^bk/]E^!j07mtlfҫ5(AިQ2RcnD"JL]j[BdfCo.|]9P{,$ۄPK@\] k{$<.DLI9?#Zm(q8[H7Zyؓ92ALS`ׁ@ jzF&OҶsѐ ,4Wݔh4&$&vh}JDm*Ae@DON@<~#q9Ls&wc -<2_@PfrJhTip;~KZX>ʴ[b=s悎t*F)U| .ůa2- ۥG*E3p&Fu:gt]d'?2%R[41I\U:s0Hҫ 51.h_?'f E)J, ԕ&ݻB> C<'LnYs@bTV^c5f2y¡8}04J>K$k,\K*IE`7 3@X-^CQ+$܋h^ %W@$6)SkMYIo_M\u(d\H0xcoYLvg5j3Љԧk\h9vv0{$>'7!y PJoJt{O㴀 +:>!8ƒX~tJ}`yK2p=zx?[vEn[/q{TKdn]jB!\>uxgOl~5DS?aDXAZwkdGע+}A UADsPm{rqYBljHM];U䤺NЎ(p[\c]{EkgrpY ]qz_ C.!u/}PO07Vu6BoD šs{JCQ7 Nlw2 R;qb6Xg.˘vY#zJ@qɮԅIϘe h w_eZMi1N}rّpZ|.:_\ph;]r#0@ft!u%G^DneNo. f|/ D9)N KgM}ggL< Cz(೹ıZ<`j5+b<@\f:rQcp ߌ`p]@ p,XaDg @T=iQZԑv 0},ͩ9N;( *k,ѭu|!ѦG8>q7v+]% ~³jͯh}ϯ O1IDUqVM7oFo`"^H9jg< 5>ok(H~zu@Y$\2O=Z\ƪ1#O$?'X9ZeRc=\(l; tiAr.Z27z*- kTX qfZ7ӏ-qq6ey pRǾ;Rqcuw6~ ֊/E0V?K,Ѯ+QUƿ_,]mE߃T]?1D#'i_{kb)joCGPEb(]}]W=B z r|g'^ߐFǢggn+g b]#g@y "$V܅`IY7P< %Qv-O@$]_ {/J[NF$, 7 ?Շۜ{ǖP900qbY)+"=ށ9F/Z E.Ӊ^Ѽg_ z7t)G X4m\0N.j=;^KhYFv%eBWw̕B#w|wH⤵bW!9K0z(ť+:x|JZ/N@ .6oM TZɍyY*m19~ .a_hqdؚ*SvSr>(=y#E[=8[p̩lzw6%(a0=qtS鄥S?P-{BI 2dؔ#aZ[$/Pe[1敷Cc`,呢/CMH$~5Ni܎'X/VbB{l 8nd ࡔѧRX(HayW+ V+&I؆oDB2Dߔm-eN d[cA/αH&aPR]\l?_q`T@[7S"/aRYj,m>Uyh L J֓U@"&9sϯD=/SY.<\$_X0 !ޅS7zp37"֋N*!_QI+2@03!R!h91of{2 RT3˔sE(w挀EhGf~80F8] 7z4[sRVZd 0y3C~ƙG㊞H]1"MS fĢec*3MB')J?GƉϲsoA12\WQnƽ~!q!B=%k ӑCwaU_A_7T  Ho 87Æ%%^TXMcTg1PIgӋv$aj]d^'oo8YAe=Ur=Q}EN@W6u@{*_ wlR,_[^Le]{I.:av:^[, XѯD楔[ڛ"<)f ]e9EE 6,@;<j׽3r]J )f߿J 6͸w8?d()NO$34+`IQ']!208Iq6ߙWI_^ m(Hz)-I[p3fXqO|ˆ:Q呕򝏾^daTNWBhpc_M }ap P̪TVSie;B5bYggvq ɆRyTytQ4x)*{x1u2`Tx#s~8(e+ub͗;B FW^P1쒆)<,ߗ 0jA)m力P+(P$ԯ`0zuz/!;1FҩA){'L 硝f\X?]Ťd¸%Wpƒu@.zV,GN9z_vj<DuEjMJ l3K1jAO!=Z= DS(E[>W;]+斱CyՐ{Eb|q hmIj-۝[OEo8ϞWAL̜=,%k7g(?.3۱$9$)dpsCNmqgIyxs"rjyRAe}6soD/k: ytc)C4%6ߖ9絢S㴁%G$3co l]6 ~Y. 6K5{bv\X;$&$m@_3 ~ iת%1AoJC]F:ӑ'lXP KH3'Tn?P1uG)4o>Ik 6=f,82YvH<׾. uP̈eB|p7%+d׿ա[^OtI߅/s _W(,gJw}Ƚ͜.CB;Դu"ٳPb6t!?勔(DpQo>߉橺T;;GEtwRp[tF }yZ}3{(3=kڱ{nږr e CH c.d1`A=Mp,щGtDLeC_txqpA7ÊƢ)'(^T8((G\LЀ}g㧇,ruU4}#P'W9" kw_t9a,am)'I^c W| ]'<Щ"dk% ŷH <[͟QN; @mӏ.҉=7 Upoav lY+XH|m4nȱW9W wЕ␐i`IT @t+AYnE-\YT>*];Vo?LuK~ZOQZF7ʌ אY \h#u@uҝlIJX#Z6:^}7EH_ @&S':J~rdCyU2jLjƣ R (T7@omxk*#V{ֱR@O04GBi҂D$X\,M֐K8m)^2p=B { DK|M+Y(qG&\?[|T͞_}<<f;U wΔ +щ2+.΀еKy̗XGl}Ə+#ؘi&o!BqUPLT>2vemǂw_)-溨u =~~jXYpicʨCֺǖ &ˣ.mà |Lt+ʙK0/ho=AG+c 4I}4Z  /~F(; v!/zD6GY+~uG5"]cLjF3V5V"S΂F(.ڷmg{z6,&y,6OvQɨl/m&/0!]PUv Swri[? 3\-OgݬOmW а U'76b%r؏?p$ $ l>HذO{wiH=&u\z Î; UҌnOF |)]ۓ´:^`tiI.sg&Ol s\/TPROF5 -+4{hNdY@dzִ5m~?S; YHf{,(>+.RNb!UQ Ml\:Ebm#1+1<8D/Nɥ)yzcy(̤  O%a+˱3v;%\jHPwq擭hyC\pL0= w0]9;ʂ}z=&npDȂm͆r%~LɑXpU iSo<M/̞hYM,$P;T8+W̥ %`W?]rZf)$a7/(AFhEwJzqǬz(9bTkݢ|0^%fs;L"J9K{.|y(j|NQ=KdǠ65⶙tuW1I!96އe7_W_k)m/AaM)_}IoY RǕeF Ļ`5!MlgH5hRHBξ2hD}ՋGgݗͲTReL@;~yt=PP 8ؙdِMa~HcW]A[yz2qzm(:nGcmg.06 -c[X9pbH|1HooU$>0FPtmAah< 2M~vz/P1o)?4Y5 2jxX#%[(<0HUWa9g9SGµ(G^*ɿ[HX~ma)/MuC{ߗhuM Qώ/׸nJk\ pT"bg֢E9*/vf~9cN .Lvtœu+Nճ =i* yadU](_=B/RA\t(Wy#Q A$YOv (]EN>3j# =G\V sud uC*#X."%TI0dڔzXq.%ծ ^<2m1H`rEM bg*7' /C/=8+|:HMs3[(' ,X'| L_oW@W/%eMk Zy%BGjv$XC2+XZ!PfOMy7gcWI8fe5/Eh14̲v.;TqӢձ?ծK̄xe1ښk^@30 S\Sz>3<\ =iP_PK-`vo۶D6;;㢎a?,+etq V&[3FS9 rn>_dIFE 8Ί5.v>>μ-⌽UE 0V&.u ᴺ }bԶ 5:Ji}HL8;\wva&5^ 7%03?^lrkhPȸ$(mտ/QG"u|Se<%X\X*cy[vܵ|On ,Dz" 27!F|BEĔGfBħ̷Yʻ+B !608]aKN/+-*K쭶8#-8 ,Xm|s`AM;b -G`iG@=aF! raiD-TkG ^qS +яhl6XY.~ ԫcp ww%0j[d&=ɉU%kR2ȍӚkƁ@8lR 8|ĨJ$bs pWpO[? /@mpݚhGvSX) K0ݐջ|.A)KaxƏoc_y>86+4YcT`G.pF,$Pd΍uAG(} e3~tJ!Vs]_r/d+6 2E_h/c'b^PLnHe~RZ^)~%jq(,3N^<r}W3;Γ@\ݚ$jgIMޓZ}yq5n~C;R7y'e mRC,\'񣷖ɍڪ䱼0>8QA0lņ:/\؅.|a_Ƅ̤ ʾϿ߯VN^Y00d_( Sџal[Szϙհ (OÏ?i^?=Ny@Ќ"N7@ŝNuXM\$/ |'0Tz-Miyk.oAwc jB^v+%{Ӆπ֑v_ck=*H$˟Q ŪʹR|{)(W8Lcmͪ_x D3 ňH˘*{5)/WJ< Y}fM9ڡM9+G߿'ϲ 3K҈P~A_d &@63ޑYJ5_Àp+uts^ 匕z x{ δ" S֛SR˄ɡc3%SLPZXz n D+{WzB(Zyar;v5\c95רre%ea f]BģWIj>A؟L{xFE W }A9Xͪo>x\DtYTR-L]o-fCWBd`6Bm8h\4*)4>04,S >m]a xZX`ZVk̆y4DS @<'uHF)gϰpuEj_s/ @?ˇ\mu4NX!1/,rxR_0bbJ*0C:G$q}IU~Z&qjJ3rrf&5pI0Ls }N4"^A<%W!~9|Glda4!e#s5f83ԞuЗpPANd@1< ֡(/8ǡA`J^`V}3 1~=Mt je߸!~Nh$i¯Vդ/"dNokR;yg9@®p}t/4*@BIePBI6d1jkX%M+?1P wGNsqsa!Qf" ֧ $&)B/K ]H4׾}= WSR2 Ⱝ؇3Ǔs櫕\9Ec?( 3jU 0dxy ,^5k άHx,Lo5]}')}?Xb #4dP6ʁ6 ]OpFQne] f]2=o1aWf=27ݗ9  b]UI?|Zo+@@g"ܑ]+l( O_jxC)=?atЛ]P fe'ȷm_MnD;Ȯ-QꩳU,Qp)3\fHu[_, h]T r#ςB>5 |6GrX|$ ~ I^ki3&РKʲYJx)c3*1M0ċ-B%D DO ahI?%nBY)g-tm>)Ղ*L]]+Ib. W ;\rTh~/LO8-ҳXȷ'3˼7ji~T*Wuq+UDr؀v[]~U?ɕI3̘=wLa<.|40rqe?<O3!д(I*+~:[6g |C퐔s^=͙8|> YUha|fVD{}Lb2o?O`jjvH<pOud S (,%S iӞ4 dBg~\S8aEǁ'{4G)Q8Xc,oz,Ϳ=ž6[_]|o X3\Kl;rOCPq4&_s?,lY~ZeC#6٨u֘Ѕk;@b<4v.~Œ/ {GML/{[Y}P3e/MeP/K3qZiNR +x^Eٟf-Ֆ*7.޶ 吘ɩ ΐ>=̘7uvK [UCw?IީxK~)#Fhes$OuPmG/r  ])yཉ52`![9J>"uyQ"iYo"biްZ<l`[J\-cr<]2(sе,LDl+$tgk&~7An.l#'W $jȳBܿX=nC^%[s ެrCbF%hIǪP ȫ\dѵ 8t;+4Ze]Ƶ12|I o;{x3y ؞Z ɼ_?$3I܊ߊ'03.WMNxP}TiJϊ(x) @Xz'$hp޸wJYv\F|x`9H6nX`L7BOjxV@/gZԱ‘kf/&N#uh}_r{ (RM勒V3:*DS5UK; $ݯCzXCJ ';埩=L B% [`0D,̹ {ܗu3xܖeyiQZ*绢k/![jGn֋[Ƶ^gleݩ$^?(I9fkn9? I$tGK*De<>fA>vQ`{>EŤ9 |>(b26g֞)[p|&yts8yNg =xuIyGl0[w+]vh<CI݂;-ΟyNr(mL@}LSܢD4 0mK0z5I˟^̻'-Ri  KWj!2CMp03AL|ϲLmQ QfБ>yaޓ>a!IӥvmUaAko@2n3,eq$w EV?y*+:*_| (Flx ^HuQF4ttkq-u?Î,mK;*QеI<9FS_/ҐM /f7$%sJu=m.8 U'a,"Q/d 5%~m[ACə1cڑx*L9+Qam`*&w/[Peqv1P#n&0cIA5\t|( >i ASlKc qH zNPv:^kj'F@8SO֐i\Qv@aE!/I Wi$+yy>9cd|dډӲ/$ȧ2o|pʱّQnfY݇W0VVgz4&d0nM㏡"fF0>x0+aC. ӥf]eUE>@͋a$~rgSZԸ僘"|NƆMhzP)_ ksqo| E >!3H l: i,J+mT~..G{޷G2i:9$Ӗ峢?<"S^˷j#,$Ԁ(&Bn_x4NAyP(IW&dMBָ6[F#,H, (|!$xk fb0lQg+RelbcT_wC+Mi^8)i4 x;"Kbd+NBMeWMTcnJlYĦp]CE3BgW#Jh0c3#-!+ž:$Yh h֨DedPw6v<̚vJu2ÎF Q%`- , E'!+!g`ոhze큨`;%$ً*19 QvR]B ?4ddG@RM{qc="{~զ#QT|Z$ <6-?I'#ͽvQh5J3n)H@2ZŒf_fmHDAD z;J[P݄JǽglGҙFycduOr !gr{(6d:zMq >T.Y* t}r;C՚OS}f'#$LU$u41~]v^d #Tcz97}1r9[_sӮ5ì7]b ~N5r#IՖRFznαˮhFҊO88Ek' Eײ3|e)/ưAunqd{ɘ3J,*Hm3eo/wKUsOޙeSL1xFf[<c#FZaby4|l}Nm{1!ԏJF>fu~()W8IO􄃕RM^媜{9PbuԂ=K"TYgF?!,T=1wYWWv Æ,=9>X9*9c.??R*tֽ]Ng-=]lKa hY4Ɣd̢at vYYJ$ג3VF΅ ҆BfY%&;E4LN@@#}S[ȇ`MoAzXav~N BNFQ| 莀9崔=7OxJD_Cκ;674KTX?:F|ā$ %XI*RFSNQ 8>~M-d1Ew:l^KYV9\1S^(${ZK:RٚxM;gj"6?T`Tet@/BTɸsWIRtf? < f6xwW*X/4,9pQo_ScWAPa`zE #9_Y/)%;UH!0gZ8WgE&R@2T8Sh} ?WvaCR#/f:cjͪ6=* n>B  Q}=Scpçg/HRI yW(eT^K(b4$|? GU%d6 w-x*ڴ EA/Iᱽd!BTIgRMh/]QW^k?aǫWqi02Zx}KbW!_h=mCuQN{"?'>bˑVN޶k@U!ꆦ"p; <Ք ѽFHGSQB : #ixHY|>!퉞}['>|[g1! U>xX3R&6(ۣ'U1B ][1Ue]-O@JLsZSr˓Cݿz2 PtQvf]KzQKjMn 3^tn%y qH #,(\[(lC.NBoImk0!UoyG#Ŵ'h/L[腜m7".  /Ao"kr^\22s"(ʠE2=qp0q}|]J ,47˦?5#xIV\!51|" \Yj9| ~ḙ?Ri-\xӛM&$"өTKi8@=Q"sq?T ءlrz^ʗe6C5J'\mó ݙ`!hw2Bڰ%qD|:[Eaj {6 ZGζcU:a *"Κj{䈋rmf{K0l$MEJV)؞= x8#U*o%laN.Ȇ"\ՄaN˻0Be鰭faJ0Տ:j[bh@9O&3^4*;LHVL U塚};ڦ[ia X+ԭ l!a*Qn -C7rG`V> d5 |=m=ytOɌ$R8dwXX֯QwGt_q-wo<4K]}=JyLTd7KۑM輀$_(/ 6d\m9xW4Nj1*z\=Uhz-#U `H`"9/*+'71P(]C)-il=I>eC~!+ 7ƸSY h ~cNp%)1I/LEzxמN$rfP.fx\2G*LO<2E9D]&}ahg15ZK+ ^N53<@fv~O,nXyjA4R:6 K /mB:7RjdŒFw屸\Ar sN]>;TR[ѬEMt١%y "t-;W1rC|כTڕS$_v[3ʁԹׄz^3+B~idGK$lLZKOnT>U[㈵)Sg}rPĢ]GVFaao%@\WlW\MS2=ӼQA1sK.v<}~0ntgo62R/| AjAFgyP?@γLG *]pκ̰[Vnx Sشs"՗!p̐Rӷ"hDd\Y9G$(P!9V\oG8=WZy"%]㮫cnFR =[ny,9o]3yet氆ed,ޚP1 kd%Q"?HH)S_O?+ؔ4&o:E~Ev>;}b-,Z\f&XMt H7{lhU/fss&&4K#ϴ i_Y㢧d:;3-prNFrތ:2zv]%W{G%6F#kI?s#DWW+_boKH^̟-tYVMV8?Yܼ'K,같gMhva@&qn36%5WyL9v]Юw1nHQI} Ԍ~ƣ~4d\bR?Y89}<]qEWz$;zQZ+8cX3S*ҎT*}g$'1[zKn0A-ܹB FIp=iO2Y= '$cΰ/B CvQMs տG16sks.d1uNRzdA,0U]{/g[ Qa]" :z.#^9ISZ{3Xh>/KCF6<8KX:3uR`+{g),:K}tEBT:.rlV>3ٸ>H:Twf OOMy[T8h>,#ENU` +(o}jߴS]7b̉&X`|3r7#bsP[z^"D[M+8 mn)x`$Ip%/ӟo8P j\(ȿV cLUUR!{I @ݴD`#:>_jP ~3xKۮS?, Bhjb\QL~#FNFqۄ "w;}$ C|uu)_ ^B^DsͶRs/+bZqυj~HBL1/}HF@tP}aKlف i OߢIP^S?jvΌ` ?Vt`-;x<4kimyιĪy\H,|MK86GE δ:ԱkKUM.1k/6)g4/a@{ms#9:fp p>&c_;G4^8l9H+ئ1Qd&Zfp>Ii\3/X,bŀG^ 8%_{[iuYNAzeɴ,%$r=ywrq}n^A103Wty; d]8&$ aoZa3p|j_B¢ؐ]<;'9^9)51>02s+*㡩%st eKl@siEPC}+\=+{9l{O&w/|yZ&Iy16޾((SC 」]ny43.[X"S 9GVyC{H"o s%Y[\d M5[֮J\W>]4drL;*Qk@Hj'$aydl;W{iN^R!?BH\L߮'hۂ ?ý7uPG8+Ef }vJ,?Mh/8j^z# 2{, f/@^8aq6v[D1AW'yM)Zz+?:2_F|̕LaԦW^{4pBwnwHG#F 7ah5?HO4 b d} b.k@R`k 1b~Kinbn((!{lmbI%P@ ]I8ͪCڊmvZ`h"%=Z\ϙt ?W u>vF˪*rJbWN!VZ~[4dsS /Wdۺ`!ąr 5 [Z*NMd녕A4!uGiL[0IٮLmɱYT,W( 0{} `xu1ƃfdd}\RntjN?jpA H !/֎Iu jI ONsCDW"|{LL3TANr%U &M@-ܔiɄNi=_ԫ/ȯ: vFes\J>3(ϓnV/%>) MXs/@ͷuX+Pr|7"1AOrwQ]I_#Hpںlw@h"/֥톌>0 YZsurvey/data/scd.rda0000644000176200001440000000033713122573422013765 0ustar liggesusers r0b```b`fad`b2Y# 'f.NN q b643A13#3a@q ` tB7L`>K> (m=B6%`@er&&$%BRKas2R ,/C6 *hc0 a c59'f$L+%$Q/h]ĥesurvey/data/fpc.rda0000644000176200001440000000055513122573422013766 0ustar liggesusers r0b```b`fad`b2Y# 'fN+H@&10 D;0`́s@i(-<Tsi9"q7G*NNaKKKJK; JPqޙ3h)3gAJּb m6 {qIQbIf LMAq)VQ1eX~0c)%9I9P{`*M+.I-@S)hdU`d```hneh=-(7'zsY} D&QDbapk@1Vs8*/CN 41` c01` s"n/Jrn`!cV , nsurvey/data/api.rda0000644000176200001440000067764013122573421014005 0ustar liggesusers7zXZi"6!X/])TW"nRʟ_''qФ}v˂ yU| E<զ, R~K, gS 6]c\rH5o 1'K9lBȃߎ(rx0[Х,KvAix{k‡*[AUU{4&$n9@_mphFSE) ֗*rqm{{$)eYt>&xj/k# cc[#tRQc"VS5/:(/Ъ&~t%gYzsN0`pZ +NEXQlѫUswv0ې m (ȋ}|rHl 5kctb6fX(pnt 1l8[馒ݡ,;~L_dfQX ,eEj"ը?ǞaijO+*~#Oc'&!閽0:x,&n]9q<֖-*?ǐ^BnJiPAoG`9^ blj5El44b엛+8S8q$U"H6QIvrD6*6ZZ'{0ʇU/\ߘy͖|(&vc؏};byc*04GIptF]WG|/YB'sc =4ElBSD)BH N.K]Dy.UxY>{x mӶݺCuOJiaܓ@ 4%,_j ~Hl0wH)ր tr[c"ؗͦZ1͚m(e|[{lAav]G<(:Y1UC/gާZƥD#1ŝ<:;Os#9Kw;f/Uub_lL.Un |'~bOgE{rMZPw͔ķzi#:`aurr.onh +M@]če{r -t{6pz{ViS4ap{7sяr0~NPpAQ5jA(qHtqA%piLaQo4?mCI"e8 =hаmkfX߅cgx[܈UBH|dot@l!%,%,:mKPv\)!PPip5]eWe2%%uRDߋMʀ" i5ɉ,HL#xLfgr*mDnm`q v >"4Gs0Ak9Y %#:gLP)[:!`L m3whgPI|`O&6>P3s.( 帩㣚l}q:ڹ^ <&Zg^3uMڿ:NYgjo5XR-Um*z6#6 -x:X8A!Me6AMi ZC{7-q@h$]"s ޺t}ؠfy d>fDZLާvH TV*U<]50^}򍕐HUvh%Tl>0u7ݠi!`UR _<C n %xne H{-z$1 Vn3uB_%`ע;s})ga#s@Gm?~ 3eAyvk6qW[$Bvȴnf7_<1Ac%J3*?`ꏲ2 ;x &R~*Y2Iw)g.ΆauRW1>?4 i@=^D6LhFoN|q#J3o_^}$ngỆ‘Hbzv[MZෝza zK:-巑-_)])Kv[5~-rf=:䤻:Qk\bLꊓ3 (d@tUpiuaJ )Vf4JF.o3&jO,ڈ5s[nR64?R6XHDI7np-E 18v ˆOn a:`HjLݹN^}Xc ӵ뫱*ܯRV6ȍ0،+LNU `I %v2PAo%0g nou3ڀױ򎛾 A()1/jM_'ҮO*:ep, I` _l/׊=OQuLqҗu5 jerhd>DP1E9vv癠< I5FCDTH%O4!D=i 1.2 +Gj)pCLޣru-p N#UmK[[7ǮE5*C|&L-{ /!Q!;#f'h $Pr2ffnlBӰ20HVۏU߾;B?}H:*4e>2$2WoAVG1B}>թmJİSQw-r*&DK*xz؋2~ ܼ_[,llKYwUc(2ʏU?6Y]tl5bj ,'XP3엀/)vȴzuhl߽RJZh_ƃgBj;{͝.P ,0KsXZh\;)\[lJH; '_@ЗࡦKȅ9p9W8~8_LJa:}֝FFSvmcdg0{oaE(4OOlȒ ::xB(Ʃ4STeHԎ.bnj5F:MJZ#&B&uU_) B 35)Q)a;ZL6OW|kјmAL9݆pkxT*K QPRT1Hg%e*Ӏbi:kZr`7B sM:]M4"6"Ɉ81sp/U}e$5gF"eyhs\8e}UƀmzLyh7K35ۄh%10Wkm~zK\BR"\|<^8 >"a @?)PP̃pGA*|A[8z|YDC[:YuO,mz.X%C.%um.p@rW#M ث>W>FTS"{kࠈ-w**)pî n[?dM1y>쳅+IA:f<[oCWdqi] `~b6lq*E";X%_! 6: ŸG9 &KP OֺyhhiĮg|˃__"4N݌r1hX>Xiz?}O )w̓6CH7;ug,OR[R1#ҦPus]% IAf84 ;?Q_*$eǔQe"XAUֵ(2ɣ dzLk'pv//wm I`CcG>FʾE+g[glfPu{ WHE&  ^8cumf*?ź\'< A6TSVC憚I+8PyT7-ܥ*p̂aX57DZ*ڢڰඔr*0geA4Z0-&w{qQXJ.в=95 *$&z%e؀#b| _@;":`󈆶+y-Y4oІ_9e/l||"aގekUl({qZ'f4S/pjog(x#ԺU6tϐ .=JKs㋯>!N7'gAOڗ LmqUxKI,ZWzs3O]JɹBQ-v2UzGx~|U}oa9jU \GU<.x_Ɩ)ᑯM@.fkm_?|6:!8X&a%@"qL0si_j8'N&2J4s!= /1zr\qJS‡оd^`ܣ~ԬBl4K|zM &1D{K߃ҁ'ڪ#2C*8Pu{sG*09$ں;;}P55RN0 !9ѿ"35l ?1lٜC+s<%z|ꗘa"8 Hg[lj{ Q%uicvd!|3)He6'}F`jBo7l..PGKޝiє1ĸAM"e8ĉ9Hɸ9žn-ޡSlRLRZxaqb֦EvRY}Fai̸#zh~b-XUZܜSC 7z؇}"P;4GpQtm2q,uѷjbqVSFlK?(7)IgUzxm:JzH?FٟaE_EWb y]?na+Yya:*iARk+x=N qvVƊS 4.=Wp#p&KPm('zE.鱞tZt`{,c#xNDk3Kh4.G;,E@Xe4_6;FEB9?sQi s5nN%Ӓ@<ĩw0ފYU]wX-Ÿvf]becZoPU3njnf]14Y>qRQ7ua[i15DװDe{,фe!Y g]{i_/p"\\F?pS6R #&+Q{&k M!#..䒓F1X|Ұd. ?0vdv6j\8f(>̮TJ2w7f[Zyb25l""MvYuٰV+6ZfpHn|Qm<qC~Ja ,?q@6?>|1Z ^+29JD)dKpu|9KISK,V\,r9}d/ץ kM 7F`IozNA7X4A=mxay,3AoqyۥQZ'Wf5j|7:t29<83jvfpߙ#4J{H`>uDY3MnW+XaS%_C7W(j$XVo7<+⚓ ttw~،hMQK)4ߺ)5Ϳ{$JN _0q}6i{MN!]l\?zNS}0$rwmɍKX%rFz(]LfXM 6% v|Ma|yٌhvz4$黡Պ(Va~ ׸AgwUJ=l^Cdnu< j>:#9׼do[Dr>+%k#{0.ri!xV_RXw](c2tIlC;"׍,;>Zzm<dIHJOjh uӷ-|+J@F43 3허i nyHU䐂=Q;PV_aeNyJq1@+)Z_qӛ>PQ<&婸0$QNh&eZ[{ U$>x`r8FnCC5+m|!Ô*CKٕBd#IwOv8r'(z'.{p q p5iʟRNGG;9Ӱ!Z6GY-ia ``]kR8x*c~[?6ɲRC;W e!F,d1vlW@cXmٔ 4&N1u;v)7Y/^hy86Rf {0TA0 BF w"|?A-IbP`HDfQj+'t$: @SPl6L{lzk"#)褂V@kw}Is3Eh^&P*o0ïsq`cp4D߱'UTj҇r}Wg]l{{ {)<.ɲ~s'hYH`}uj-2"B&oaϡn% lǵ"%TAyjNgQ@ϣ1$d#bt#7^x$l?YtޤuQD-ʥ Gʩ2Χ̰.m%kLA"[Y Ϲѷpa'_ 3ٲEgseMҴXQn39ю8+$:XG(N@^VL6HcoC.Qsuk!ݫ:$~+]1) 5]1xLL-, , fsF5>>ԜMd=K/Ǽ4+> ~J%r0݋ws!>@RY qe *W0)Cf$WG!AjHpPwۇjt(W-=]ul mK";’kie zcdPY4 RTX{/"°Txmes|-Z Y'J/^K|x;3z8@_ k=QK ך̛橓 6M8z.*gg4; |s,QoPy& \d]1.ٜ!2MP)=cF׆虺+L ё4*-Wub +g(3o2h‰#!%5,+YdrՀ1i74s&*oV%90+ 20(Ƅk}.-*m d'" FB>>|{p&j+Y5tm!]y^2NyF+k{H#`e c%!ZqUhKSf#RQ=|_]QlIf:RE].ϔ_u94P.T"i)ė 2txEfZ"WiYLUTOWӞ(O{8 aԈD-x THf J }⾘HA{6)\MUuT-=X.M:m1dNV(&SqMve vB|t{}(Ͽ'\2k ԼKʯ#dV g ߮6Op\*lttd6RQ,DlgX6~a][fa ],zeS";Kъ$Sdg!mSيb"g5I"f"'W%"}#h:xxQ~%W@g6bPY&q9j.t{)FP:\L'7̄ɤ 9w=3OOv$)M9GU :DmLݶzf!Րe?Jnrc>LZ~ɚE΃FJ\̇Nzrnsq3BDN|_0i?O8O0_[ cYM)T:G6|"wvrHO[`o,2yl/DRIOG)uUIh?ׇsK!MK5f8Ng #QHޯ,7Sa$Srfa@U|>TQ[l~[DU']_~P`Kݥׁ`R/R1) QiV1# 38ܢU2ߕ0|v[ϲ6v K>F'B2jIgu PB 5{9g]@T_8̌@ͣgN/oFg*j|xǞkd)_a,﹘!]Cld+F0A* 9 9Tcc7N3ƀ(Vx2 mj_jFDdOyE?kݟ\Ck&Vb9g+ _8C3[ARAf_H԰gnL7A֡GE$4#a1l\| 7*͛r[:[<Ͳb+S5hNXwKdSlЪL3*ʏ&رS0m+)tr#Bdnc:QAO(%+떥lxZŁ[KC*bq:f^Njܧ eEarrm9|d,–Sc %"-)ubie!۰?$0Pf&X$M'A ܚf^*ު~>!..%PD"ۗv67yg{EV3.nүso4Q_C!,zęE!NJ3r~4wSt$ӫ/ @7h$F6Ne=^H*oE]}{ZpH3+Gr?9mƊӱ96X qQs|)d-;ixI wr D4-WuXWP`$-u2=.o n`b^f8)SmWj 0z K-g=^Ӂ9&xލQ=T!7#VO 'Z Ym=>]$Zńv0ܙ9KQ۝cɀ8ءx?;}4@C|ۋtC3ͦ^Q yb}׼rOpˍnT(+;jeJ[lQb̋bUF"ڳ2~]5;jGշ9RKԮW qQY7ehvŝ E'~OwC7udEi︀Ke;!"k$N;/g8$cJZ%msJ ٩Uwм*Ch9K R6)&,_\a:V&6:DBߦV7:|(2f^h?,ݵq#nv[CI@9J> /T1| Z3 sHK{f:ĹǷ/GMݶC1yg %s6T,[* ]@tC 6B7dixҰ΄6Ip8$/v% @f5I~m2NG g;V<ٽ<|\CC(!1HaF Z1]zEQ@35̷Go}Ztb;x%Y5*@픀!8u'+,A,kyTHdJI ScltP<$mp$: R$Yk ^L°gܒCRC/y֊! U?l;D- ~̻̅?=;wh'yM,~? v-pAF7-(Yz" }HSZ^Je9ִp:Oʸ%wqz6!5ȸdj_BN6ȥI(@kP %-r z q_hPΣ>? owD/`@e-e` m! kUI JkWWiLsgCR!lߌDF-OnĴz: 's,d?waMxZSzj$(hHht#@1ϽY\%<2ݽ:x&1e5Xj/6sA8m07VH)e`hP+{̶"A(Ρ*l͚pl:w@KCs C̕L^eWI ̪kw+DCwdm*,tӝ=Y"kir_ *(@*be།xoHts4YtY{+lW SL[?1.ȑz魴^+Ijn%.hIFHi򳲬:mR ,`PޘzmP: mvTf /;XUv+``sH{Fq4~ډo2!;^[iD[.c S9hw!)gYSKx(H-p#aGSc*p[ 8Rc3Ry^iuKkxB6&&6f?h!\n`?(d}Q/Q.,8Ϋ@wtWfR 1ɺzo=Ήtz^iJ(uY B /Uʬ^4dH]<ٚf p pV]'sMk%8c4,G5COpH,{}` G0IGm=u0 6XUrP ѡSPlX(~6y H[+AjGM67^Q(#Hc~m_ClzzJcf^5s ]%)XQCd{>CU|kkƮKZi{^\nVЬwѕK_wL?T"mV Y6JRc@ci++Ed~ϰ34-D[bjKbFǸ:~ _r`bs\mWɾ#rO'+7ɍmѺ'5ZiV1!MgsA\+( `[n}CgbF^לqpwp1&Ӥf)rcC팿Y-w <6GTg9 60Uq/:%$1%ҕ@PS'm1.r|9b :\ЫdW^`f8S| hP-7 &]@ۯG].H>kI+GT%ݚ>tH=cHNL-HtOn!EvAotK-oW_6hGwKDj&ų:DG\>F<KE4G K? FmY^+5CgtKT3^4) >RWtK~=O,[qX/;т> ¢۠Aݿ=l('5PsӸ&j:1^iZ4SuN t<4f@ہ$x&XtDKJ9. }sne@nHfB+#Hv d zP+ @JCJr~T /_L;h!^D[8뻚D'yn+0̦J/|6Eth R% eJFfO O9s29 T`TvsD1vQYEp. bGyu`Eq?Iޱy>juؑs=9n͛D%!T;bx$I=G՚d#08_~b/wAvfy z} * ١g)y7|6Xc5Q =ky8B95#{NT0e )^" H!|\+ .*g6L;o#qF =5m[%|"<:AR#{,R1KU~>Bti #if2LR9b3T~N_?^I%w}' c Uג%>?(dQ2G{$Mt~x$ZmOF9y&1A!.R94EE.P7{ZR>BiK~a"`AKQ"dChbtb~x@za |ʯqQ@j3njXUeQb.@t>v{{*x8 u4-B ~.gtWjw}~H-HjeXް?>3AQJնd;ai-]Nt 6pǦb,͘. ׊Aн0Z>5(}JiX|P㊪LsSeQ }B"@}>fQZ H~-D/[,e5n2΍@f܇JkeXMӱ!r_~}c@qw[ָݥӞ=g筵YV~{[$E{ *4Y E x9V:UL," O`Kkz!4k^F y4~$i,hǕhbUR6^/1]0QlbN#>r 8 ԰jjK8]O1ΦB5ǫC%-{5)fWU;)o,-2gMy;Tf+\d`YN6.S0:3ڇң PȋG)t h#DM9]ma#sGƉ $bsdHv*9۴8|Jm~JiIhwE <9,3I/ V#A+\K#iZ{&6y( 5JU}ԻTNB/XgYNKL9H'c+9jj^ex4Yr;mֵBdw;"q6rь'ܡCm=zoykuHшה$CrQ%p\6iA 6wj]&DraX:`]v0xH|9|,2=9jƑn21/k78/13ӈ0@ڮErzE?2MS+y ^ޱ>_ p; \tE3㷱{:C.v>'RSRKH1@ pa.-Rqe*!hc"3ZBd>480/%W[V'BI*T!77R?¼m#8܆m6K6aEQ2+b2NJf>bqOXxR W_Zi>;\X΂-5࿑Фo"MIA8.KEC߬ LǨn{}^EV&#Ub`!=qښ~ȼc<uTE=0}i2b}v:15 uiH ٰZRֺ@i~ځ0wक़.Z(8] A$ @khTRV}?5Wf; >_"+T8⢷8cS|j +c=5+K D<0k:@-MTBmr;t94862e DhXR5;JA{d Rm22 f(x%5ݮ[Wm>[?:"C}}utWH T|@i@#6c'x'Z9|T];:@6 *֨i+807wѴyiCJ_lQљ챽!1'ɜ͛sD(='v1jHw*QP $9>G(Zݥ4s|A<8}l9.-\xcIUA%D'Dxn }: 0꩖z Ż0jL oke?"RIn3 /N0](R*SnRc}pA$ZM x8a+̙KJjO΢釯=1 'UA4&ڈ+߷ oPM¶YKɆ@MwzmbVN'sTک)/zu&z8eVԓxyF]x^GWyլ!H@zF\\m9%pq,AGPu*.#/4a^P>B=`xQ7..g6 {3>E&ԫi+bfi,6Hxj||eWջdEf5+E'OO Xq4[ۜm] ;_($I^S4.T:2kCqFYMhkqHV*[6/?x Fp` n%-,{3!'Qi\KH7ƹ, K-u85UĪgXiXa~ AI,[EE;q/g43Bm$}G2+ 4!u}@&w Tjq*1@Njű93 OUX0px Ua9"DB-O=}Զ֟JBeݒ -νK>cUcZZ~6)JY'D9~ d~ {ouMN, ?֙kKcwTnuHpuAenINiB,X"T9m);bN~QN 䀆,OKHtxzJndw-gz9%׈@z$O'f]f\0Ǵ`}3Xvn !*i]D3} st?^ow 2ska%B2sfUy0v!tgx^ح~'^Tiv7E_Mjpҵ-z&i磸E>jŰHX-O5bµK \؃X蛁2eRh' -eOv">=nuLz>}ԽY,x2%~zh[-*rܲ[䒗AcOW 8_Mwu~k:0-x%_uP̖7~FG&ٓ8 "f/1xGH9hrSo<6K"[:ZsF&ǵͫoF:iOOgtAv 9_r}:'91 UD ^SsIkO,u ?8GM#ʨ&3_Nzi7+|@Bbw.0ЁֱV*{"I|﷜biDjP5?3Sj!$7h^ 6C6I\m|1>ߩY.UC*lG8djAz̑W]RR4ed^WR8/R]8ƫ^cdS=risœTǺ 4P &[*ȞtHMtm_!"5nTlw`J m%Hq,hyO \_Xߨ'o0Da7Ha"Z@v"m,Cwp4E3[ԅqRB*e%pW7Y͊D( k>XNKTs/f 3D+\wOh|)zJAgFa޵$y/Lԇʻs^b9kx1m e-?G%/Ht-pwp%Vs'.peW࣌LgLt}e_M"pFƷ2@C3kQ.Tr$ČhdT6n4?% &͋eCŮ:IuwF>I_%H起ⳡRE_3!|A-P{ʮZ ˫{WDAONnuyvT@r(NiF(Q/DSt]$͏hq7p1^t:G9ŊGZkq8i=7TW=E( ߥw sz+F'i~K&᫟ d% ]{ܙvo\m\ʞ;*_b|Ay1`;ز{TxԽfJ#쮴ikt)tMs^ڄcj$d\ySr*볽 ^c Vx9Cg걇u{qhoh"q1oH$JWUJfW94Qӌ+;f[V&49q-䉈S 7:B;"˩f*2IR&|\7?Wy-vJ({@ ԘHD`a[ T V/pan$`U;EC+lcQcd\m^ W?"wa-K箞WaR d^͖:!)b\9y1x #"l,W Lp ԓtطs;J"H=B'~=>%|$ ^[{hnjE #(?iGʴz2鶙-7&+{۵F-T~ *?Y&bzIOp{@籆¬\E(ۑ;9' 웬{(g&#K?=qE ƴ^d1=#P y/X&pR|Ya_쪻P9r@0ULBL n~y.[J@WZ| ؖSWd="%M0 F%rs^cl!Ԝ!亄IUZP.ԄO%7aLZu fgPŘIOE~OX4pRu-݁!όY\i7)@+^?'DU*ؗhA{YPJn~~ա٫ni5@tt '3 b'>դ j_*ilY;zݍ8`USnw_J 5&<*d3MrͪfyF>kj}*f*ӈ82%o]ILK7K1,^0?8O,(.eÎ7=Z-RfWʯ-`V ی!ؓ3^ދ>0K4 KNI!)$㵟6\S*C >O!,n%&Nn$. nRj m=pYҜ~ilY8@w *5HiRq)ȁZ7N6Xni]A")|ŮlNL{ƈYQ)aƋx [lp^ز 1AjsЂYE"ZNSS1*p(OHϼgUHt?NhU%[c(kKB+o8k: .5C#> ZxI[5?Qd{EPF'Jo]bNjԲ:՛+i1ܸ6z^ny6uF{ (7O?:}mȎ _ %§^5楨W>-A܊g. Mbz P x;Feֵ-(^pŢڴř0.CI.9²VN){~H$l=k?Brv,udʺg摒Gse9gfSn9KJDJ{S-1F (4?:}o!\/&0{[ ΂6ahx#Vt /B [-AaZ4tM0Ǘ"G`r'h?mVgMoʠ##6@5Nje-pMTI'? JOHxVd:~ 2X䘰Tlq@ 9" qGӉ0,7i5Yki1$;`ӿEջS8HxGwmv uzrLoM w61*v"1ġ7k[9W.,^#۠ʋP!ސ1uН ;84ʯݍw5Yŭ%{J.;=^4 b2ݏM,-kɹ0'4ї6Ơ\M$&69Gةeܚ +WIgL$RqS)uf@D'rqf tZMmic |T j&߇Zpކ"c G"IS \Dȯ|Վf~Uu&R }NyR8XBk"8!9@~gʝS{ՐjE$`(iW%+ްn'$<Ѹ≱&l9 FݣZ ň#T2M9Vp"gKRSKEYspy¯xE x p' VfSu/ц|^Qm7Lm:/Yx㭟TY Roڵ& {wN^Z9C!ց(9Q z<.$KpSkCQM7 5vJ^[vÇS23Q%X8(F`@eY`[b&;v`M"nL t`/QhQ#2pP0?l 9  Kq\d[ˀE1nP`\P Nt ʌj)UDJlo$%_|LXKOEv1,SP?í`AD!(W&@fRR6##c~;b/v"2> {Nl0L].CݏrZ2ԠMS4̪vw%VxbqGFJ~S᳤BhHj'.(’'|ÎT"nMln]U"lnZ_Qv פo0o= ;2g1+)0Tʪ y2qD=_Ԛbf;Niv`Ȑ@˛^!H&f[vM$`%|>B=5pHH~ɦ^/c╧/s5k 5I"MS +x&kT7gLyz8 |{?N~G1ţw[r.;w>1FE4x0ڹ&bw߻̡7$f])0'D#nȗ؍y'^ʾj_T&%F ԇd)]ZЋYkAtd"9v#lxyj?TJ^)yWZ 32\ 8c[iT6Q>ȓg&|m/^`X#/HK\rmx^5HNkH%z47a}+Au>a>OW3#) ̩vMtD}-)YvTxoǝ%x̘cfM"s'%d<-Ԉt*>F 껼B*)E_-Zc1Q̬מq7Rc!ʉ (~'m P lJPWu]ljjb ڧ ?QkX~i}5 r~=6v+b%ȼ%PxRF qbvNUK2"#X} DZ)LI]b4RxVT_aK䥮EÖTlxoL;3 71dVXE+pړ iݗDH1$L$9R-LDWs لW_J#yvx\Si9ڔu Hf*<;fKzq)3 5Nw0*iUV'eT| FpD+0ksrPwzoQZ $Pq{ hf0©@1mg+N4[NgZy]Zh3TD2-.) 7Φ5M9}]*ңV5=Ύ]BgN,7W3Tޅ)&eᄯ?_ u!~<|b8yutǧ:@fW1q{L&6Q3&uE?^&/B#@ƌԐv6D0',|_zbl ߙT$ޡݒ۸0HbWi0I X`0ÎbEʓZH< ly&xc_g d 5R@ډ9?ֳ̧T ЖҬ%=EU)"zuS+(:ƛ{IM~5Se'tssox!njˮqeHWo׏LNƚciQ;8=l﮻^k4E}>HkdD}h"]˖'#ATܡ^I)A(ŴمMml{I2h}_?$}-jmf-kK-ᜢWt 3(bP 5)qgR)qm[(B\! OCRlXC"y"&p [ꥸɕc$BN%u!B}^ UטRa_2X8Fh'뻓) }b&+(nh/~AOhSL/b9`rfPdJ\*ْšr 8O3Ͻ%P@y˶POSR+z!0}0yL͘:fZj La.La|[,l.#CUHඨswX]xfsV OWT*Uw@q織b%c]<߬ݚN*q86V|m4,ψ&JXm <7npN+rKܨz/19<`ӂbe-$,C &Mf'1wD*P>2N4$C*S}U ʐmK_l*a?dnY(Q9}׼Ss-$Q鸙cS\DO)ږs[5i~\Dꅡfq)ZZ=`gcouMt#[J$*ef Ɔ1¼E fj ùڴM)oq7kr݉WjІj5 ؛2k8}d>n8fŦ2"&wDu{yšCZBy5-0C%v.]Zt{ר=j;wsY/RWcN}VFCޕ&[>Ȃ3c{a^?`|BBx~蕞LVQQ禠L,~E^;q}M[C;C!w2DŽy,$ED=Ó &h^u Eq~GVHt*: +N0$BS,'}CԿPУJh>Y`sWuiZdpmM*v9_$2`n(xWxCg}VsBB5H2fl73{b)U.' q_? `\ MW{)}$c_Jzy)hiA?>g흎j'Pһ[_$t[cwz9d J#T>@;~5n~VhjQӅy6`CDR5Lz Z7zf7pE]M&lWIKU@bX=q))S,mrsBY1 ljн4>qCFl ['Z*x" ]l&EXXD9&&"N' b #{M0* !ZȞ 3hh-7N@իv'>?au~r;G,G&uz%-sq K =x Eq9f3'EUKE)|%je~R8N[G\^kvP!{K7`W@vow _1Mtx/@8P~w>dD7QrZ=VE=8rD5d.tT?xi|)# |t+hc o%㲮`pf/ e0ǯoEfgQnNm%_L9i<`ɉWXy;%ޛi< ~ڲJQ||ф{nNE'Efh[.,ZuoߛJՙUbBRnKVhW/[OF-Wӟޮ gR, fhj~ALL͸:ן$[\S: fvɾ* #X|F6FTTT EcL4ttuρW*O;ЉGv albYʌsBd L[F#?prƀ,y:H}ʾ^ !8(^kJPv )p ($xvQpoM*,h&pW! ,C4~%ZRӮ&Ajs:Hd{:C#lͫگfCV2 c@r9iw!1?+P9hx1@m,:>aXx gi±9xx-><38Ib!6q܍6:lĐIS2L3aI|-(ߝyfpk~a 3^UqƑz }m6 y4vN!h>7 Dк ,EJ!c.J]鍙ol$o&h?7!ߏW򩈱A97.Ptjtn X+@)Yޏy[\ҡrxVY^DR5SWb5+{(EעĊ}6^dvdB46&& 23$HzU8¬3PxAd0zT@ɭ&qL(S'fçDSE❕# _O$gY9F9XQ2xFJ8{[?in[ +:| vDaH9吏6xtL8|)ߩ;͋Lboɉ QF!PDXQ%R9+Pk|6wu9Sd 21 e6)>EwjԍβYu weR2:_fkʝttE%)gIN j'lA@udI-ANcd7y΍F(+\Ͽ%SڀEbbNn>vO?D`Ea&r =SW_F. P,.<{ck#غ@~1f:޲}ViJ^Pq*Hfvy6V.Hցfve Ri;Q̇5ƧӼüӠázf_`"!j<B(R1.3;E?KS.D16-{턟QYfGYȄ{H2Ը 1" D#O")ajI3^*y;vČC 9//cg'FY{3Ygj;z4J!d0.D6#QnSW$O3y6[%g08xgh`ч7?59Vl\6PbH65LjpmS p+/)!b|iSk/w$ǖ} ˳Ņ_oWr$Qa:Bj}+TW>~;oǒ+MK{NXcMTBQe2j (Ѐ; ?)!9,b7Z4ѴsQO>)<| [U8c{Kp݁-ZGC*;\D@Y+LZ R2d&L[m/jXHY^FT>ǟza|ؽ6)p `Xߢg$]?@=Sg 3XQOaF8;2R^ >Xo:mZ INwkJS9hAQoA00h ]Ld20KXS1.?^ey̔SsCy362]{N)hnBO3/R8} *l7ЮLe]-f;'I2JTZoa!v{6 B־!YqĴ݂3FI!Yd۴L~d >t~Q|u/ T vol:ܻ"bM_,]=ա%9I2HwrlK2jC3xϊM/$ak3pLKQ.2m8T"Ք ,Nn<}6E0 zd˺]ǔ&RAE\rߤl v闡vW5frS輸%[UƇhx%$ A$:,A x 'kGw_-\6hwZteV-`=f4rzQUV? u4FcbEEn;Fvwղ#(];WZʴ0%P.`w_K@nM[^lP|%Q1'W&4%m֗ Qt^ c>2Sf;NE]ڡ}JkŤ,n{&|S;u] k 'l1iƀC P!AZĻoםVn 3J{Z)j䂗&MvTo͎sw>p!ju9ۭV2L`ˀ HEg\lknnz@5$L֧7l86;˳вqiq? dUg•ٰf2Ȇ-=Άi6{s^ 0 >i?׳"#ӦJ!f%KsسKBb0uy5[!$R qǾ Ug$st-$- e ?hp'9|GFwUxL 9OV hĐ̪mFĬU7U"t MP; ރ0!\!#6}sKnOeXdžv1@t0lGN,{?*S V1 e[7X?;x~*S݄/9Fr \;1e[[_5v5OfҼO{l,3=2~gBבXg j" c2zӸjr{zy08dԩ.r$2YiXtx y > /8G1K>e2hnKtvPh7,-t1}a>wlPݩ=> KVJQ"0IF]POQVEM}H.Lju7Nj"ޕJp#!Q%~)+"@8qE.K,;FXt*W,ӥpJ>]Tf0z+Rs/ z;L^LI]M,W@*7c "1+{!k˟h!cpfD9X] h3_A54KD8~!?5p.(h@k. K CC jC>I@(KZx,f#rJIfb~vYɨ1t4bTp˯Fp*f tJ?pRx ~EYG 56<q BcekJ6BV0nfZҩqX[MNٗE.'KK^ i}%'4GX(XrkGmnw\:ЫLPgR]UD۔z͠ ͐PKn"Y v@[1[l ۈTS5t%^L I,۟ ybqZWεz$+GcfQ|}B^eU_x<3%W.g2`0 3 4o$K?b($#U`|\9!x[^ȏmvVήb3ő4ҋb[5sWbps=5U뤋z A7/҂nPUIe@cCzY>vViHo! 0kR!/W$bljD2`?{SZ,++`u֟??7ۓs =jw^n h.@^)ގ s* ~2dkX1uϬ$H<noaFp;Չy]%*mSvZ[d<~3];qo=>-pUU:&=nhTCBSխa؇ 5AVo҇tH5鬳 c$Xi7E"cX9:ZK"cFʈ$?L v!f ءSKk GnV0)]So[rqw=ZgDB< 7B(z%~+\}^$r8W"naf6M=w ]ǫPs*^"SZ~YA4&ό5,EKѠ)(#%w?X8'Av/H:,^Am^#y ¿%&O6 2^BOs<#^`h(X6#$HQ*NDyTuqz8)JTSňr44%eHmS%ʣuI$wA?j@d| MM~*?2ȃ߼w.␁A>{Kn%,mpP_ԑ#bxxO"Na̾.p}nɞx\Hωo5%@ ?F^$P5ai0NbMdU 1䱴=9jRT&ƹfwB֓?r6wl><" xS=,3uw )4Ź=OEܹץ+§*""DJĽJ=%X`T9b"y4a\+`)"s2,eJ=M-kVS>6R x<4;=of\f~[ejS}+Ѡ*{4v( |bO7!fqIKLw2J-Nrh+dT;s"ZY!RoVc\2u D#0CoG\ Qt:]3AR_&]o򪄳" d]3§?AxS 99/R$d*{s5f؄q^0.Ij7D*C7(;%&cX?mD͉w9M*ߍN\"T2CiV皻FH:{4g|YnΤg0W-ZEROC٫Q7a |CEGB O Yfo;3Ă쉭ֳϘ4Xm_aS nFmK(c VLRIe nw,Yp+n%JR~}У !TT֪n'DU i;\HXF ۖrm|{aLB21bIq홁K̆{]cvH^9&Z )RX 2],BrU1afY]}GD KY5Da%g y&f :'bj,6 VE/G_G܆i|UCvhZmn@ݾQ[wF ps`!aZ o= Z"!!i|@ }&>m)2L\#嶃!Y򓪎] Ić`m Ld™{3+{JSᬚ沔ufw> !?&K[_ث⣐Ϲ"~&)͌tzi .4S׾VQƽO&m'dؠl/Ő ynm# t*udA8:#]N*@V,8HY@?oTdZ=S8VI9ծߺuNj=NΠښ+(>hD4 8KZ'ku`S{*mIʳ괭ʞ{tFnJrD.ce !qT~l𚖗P&r*X[c {Q.1|fCv~ z~1DLǩ$NDo5`rNq4tLmh[ϳ-YS+x!$81dxVA( MVw߾7G6t{dj؜+Sk7bsz. Fn~x%_)yb3S/>ǜ䎸٢~!O;0,`@a}$6Us |Ь#[ IZъO-;kQ6-"AoF]' lP ;A"rAN{Dzf^V*pc1fo9K>ev@j"vfʹ;`kȤ-2@t'$>Y|1mд_ F뛹8C \ǧᨴlP`M)h|)k5L6'[z }^/5;.Judvon~Q@OCj`]K*ΘKPVG=ğXX,Oy=CmPY}]ʑFTSMDv͒H jHNȣKs/#WhJЬw(EggY $"5,Rj%y/qk@^RH bM Z`vƝTEYLU^e.}\Ǡd!u;cFrIU'%Vx"4Ck7Ԓ]6AL ?UAw.(4A&$k氷U> ޙ}ʽ*v+He{qu𗬛n.1m͈ӆ/@Qh0&9[_JD|nJtʫVRw} 93S(q m` zcqUY z ȮH(kY]XKT5x6^ξ(R* pH pݿT}qD>yGAv3ϛF8dMG0 n:lX( A~??II'*fLBOMC^r6I83WI(d!Q/imI蠤AKp*>U%(`Xw&Y&#j pI&tҎ4 t%C^{榋2)V^/a3QT)'{][!LZI#S:gu8NHic;URu6uAޫ?cA`1rʧ#=vIikVE'a6.` a%[C {$&듓^( 6q'V&o[,;zu|›ssUEºy1x>UyRCdT*sIoY^&(^ *he>7J k+XFJeafFf3f&Ojy&:߅b훦6JNRh KJ7Z=O35F7u%.KRx_sPV&^о$^d(̙~C4QutZ۬<)QԫrZk(w0S"["Ċ81nsU0o^ #1:A8 ~sR*<_ca t\M~e7r>@3͐ЈW80 "|K xA|q82K^I/6ϽߝKK-\*J"&TɥMj8B)pKc*{Mֻ`ʪJKUkwܩ) :?IqMsXorT3_G'`x /QѠdDNuVp?Uvs&vmt xa_XQ+n'C8>`Rg5l&Ԁ_ { (EO1{NcmxKk?tuL0V!N,ur* Am&xo#jk;҅ ̟;V^,0)!:0ɉ\jE9P =4eM")4BRQ1B7T t1rY%w*XN0]hWv+Gej>6l % |{'!) #eOXRGe~G* 8#Ԁ*cQoZf̔ }K$E:^I6(hq7Pڠަ'T?ٮ\KUnuU$fM7 _Ȃg -Uu2!Ty Qr_7!@?мKA њ:?DZG]:;A&qqfyl.b2ej `C39W| $؂ B'\@VHy )Y V=UȆe Tc3kk74i5le^)|mGȞi\ ZU4ۦV\ĥ2 '@ ~srX^-CT|Nn:ىT[ƒjAmMݦ(n3xɇ{^6|J7nO>q ڰfy u%{]K9*moh 1nÉe/kS.i<"m1 EYA&KC}p &@~- 5c]m9꣦f$u)2ZҨZ@O9?:q>7S3!;?4KO8>ͯq7$(E^*R{w%YIarFI^ k:ϼ>A*P?r=~!<0PRm&id_{ÆIیȼl;K( |PG*' ko ({ 3?uG\ 8 hv:J4%ЭeiWӠ״@.fsUtgfd)EU`AX) o=Z@a`ƌto19+)oJ'#&i`Rf_ *24qүbCq!ԭzvIy5@j@Z kj)jhT(-{|#b, (kJV4b *4:j= ̭(6(vOeZUJB$q9Y@O}BӔ8~W^)p;oM\MxQ=A »׫'W[c\%T|P]q)08G=2M45DDժGU_vdUBmq:-.{FME$Yp]B-"s%([]3 0ᑓ@F#uLXaB.%S4KA3iUXqΜ B$C r)NPk4gҹ!\,G )^]lf|"% c~U_jLTè c \ LJ:_8}3*?HƭmWL*o R>Π|J`Ÿ:|S>9 tL 'B:#` $w GHS5?bYZW{^iтD9="5Ѵ$&_ɳd+zUN7ˋHHK8t6曦AWr#*'^#2Ԫ:}'yЃz c$6rHѱ%NC&Ɯ+yyM2m۝*[^A\h/F 怒6$Ĩ_%~OH0! p!%b@ m'fY@B裏N/̴xs!ٓR텩?< `Xl }nw-CTLo%ôQz2i}Pʯ!33Ӱ:NsB:ԎĭN0c"ʱzϞߛ' PvsuvBDۣeг]餃7AuX)|ÖN 1#)l>d-=U_#W 3Ϣ/v<)LPy1K+H)$OUJ):y`ސ؉#xမ=3,7xE}CMx3cyQ  ̣k=7ʆ*.s-ykht8d`IcUQk\cb(/6emY3V1)^CU?Z4l&bӢP$GqX 2r)d#K9y2HqH/zaESzQ`*d?~ R]N6 D:GvZזZo^2y|ղr^'W~? 8TTB§ Y833Nr|)cg}np50`ƸzHJBs`b#v+85ǚ_FԧikBq)~zM66uv7DE{G]Y klrgXAjC>ކCR/ $3Ƽ4-F U aB#(,}gs5oRr ^;.UY=n#GT'We ޶{ɩe[%|z>^36UgE9lVll>D*UTksX|ʫiR֝_{2|p`g{Ō-D|h&jهlTẘ]D* kU`n'e]F$ᒂ>COt  !|',+plGn*i.f?܎3 ˜FRd[9"cll 8n3DBNfouW")G l;gel1VuTto54δ\KD=>}>|,%6F1 yj5"2peynjY B*W"]))9Zj~ѹ5O0³GRK ;Qb|/59K_Ep'*Ivs7kZ1sipאI9ԿyEؕʟ;y,tD_I}njiQ[Z̒"&~9q Ӳ)1\:7!K%6nF.JFo޻2#=(܊1}\EUBE@LqP-7 k07,f $,4RU"C=$; m#Sv{HOS&ׁ8}P3ןh{!ft@m|d&H>^Ʀ@.3]Bo vz)ۄDaxuVQFI/ Oq>3 ?/TR 3IvgE[+7Q%6?J7o:!M~R;JLQe~%i 9ԚD`H̝n{T(BJlQ $+rkC4R^6EL)WWo>ohLul:S PU.8P ] N'+\l#-r׮&,FTwI#C 7 9t!m 06*oio˕sI%v7A}5O>fJeXUz7QKhQM|_yJ5{z2MGՌ*Uj4+(n6j0pٲd?P}M';/qhFb]a6ܝ}0 'b, vRZ,IR"(&nDIh>ѣ3ِi e\Jغ{ղ5Si%܌:p秒F&JЪT?h"sI9hT|XK4'9hoɻ:_oK;Zt O2絿Bמ.|Lm @qEaw)ЧGhv$yBùawac{p+s~tT\Dvuhb5/tLI R/Y%r}.zK A .(;b  QjJA)HKboh6=S]Mynl֤(u MUd.N0lŀp>f3NyŧSdM"ʬNWIi^W 56_h#)Ad"Խl9cYyBN U~FWM_7*5\u`g&y-s6V,v h est*ytH1ѡWnoDa?|U:劋u ߧ G,CAPOU\:5#M9i,yP:TTq*b-5a;۴6~\W GCK ~k2UMC הp#mlilZ͇VٓqYV*/%-m΀;n~*- !ؼ\Vxl"head%\i"2XI7mQ#R ^tD|~$Eht#jdƙZ`2"uy!~嵪za6J NO>(lJ֨,llY?1u'w/[Ȳ7=~lRAg_;TE6icJ:N7dٖA1Z{x:F ii3մL'+Sm~&QeG#)*u?R!Ijpx,Үla 1GF3ly[o?{gv'~"@Ѧ&; 4DmLYLK[$ɯ͇^/ȅ~lg_nS1~~B")GTN 抒 /=mpY~=j\MQʝ'"1U]P㑒8P/l[43hל5][Ro`R5a;%7Ajp{9t80ZCܘН 猥"/EA 3ItX ?s©i7AM)~a`ʕ%B"k*lXam!܈Ly"sBeX[VЭhGviO2;W iDR YB' 8iSI;2XV>!-VX:#p^2[8"L't9]{MRs^XdpP^O fٛwU;cI[0Ds& M\)8.:`/U)m#i\8&gu"M M4!=v &rj}sj& Xm_UD}Le FSخXcQpBawZK@>IVF4$M%#jM (.iS yXGb\Ӂ8Npu rbY1彐Y74e.Ugvt@Atk`\#BJ|TQݟ?\׵i7;!Q% L$ۀv# /jNTYl4|:p$bqD] gڨ-"CҔ=ȻPi20='% Lˌ͜;%\ *0Gf̣GD[BX݀Q`9:GE䷵)[OѕmY*O,Z}CPyh.u, y7)վ&I`w+ 'd$#*!sK_T^={MyfN/a4sDQt$d/ںtw2~)5e@K?UgɯbuY2YpP~% wQ6k間RK&]>祗]b|)ʷK}ׁiWN~Q{mɎ\4Տ?gF;+CSrs|> HwΞkNZ_ɉ Lɚ|yرO[*5W⪵2}(?}s*NVz| 567֎(dksnN(>< PKa$H3%2:xI(-N6l8W%.]֋yQk!9SI% ({y=qbeInƵZ?C`JFƍh%xe(" {U x# :`m~.^@mzrp(၂b#9KKW3} NgvU0a* z8rl7/"4>S@9/!̾P9Áù\}X.Wl51?g\ULIM3q+tRgĠDbqGtO+\^?L?'⮧c`N s,9*'[̬]0COC#:T*"Gr|-@Qqm7# !n0eg8 •Is{&u-ĽJA͚:`co,Ɠgn+ĩY Hڼ9f"OטKKd#%m%(0mQP;u zPiƝ1[Υao34kSIHjTE|5e7U>"pdh_-e4<Ⱐ60QZ?ftj`?{ɇ2q)W˧fɫ8|Wok {rx;)iOad\Z\d;xuAӋ(Ivw;*yz??9&x @Eb82=^ykq_e)_S:߃~7)52e}tt?[v ݄[?5.B/%`8=kq݅qL M铃+ֺYJw}7:bƥ=MEI0KpYG!d16?o׸EG'zMs&rJXϮNJ9x.1('l7 `dxi^)6-+i[- D+0 tȠ&ӏB=0 ?RN0/.yOs嚦 PVyU8e/@~;N\dWJ\ nZtE6P-3CA&-@eL HXV24pJ .A\mҥf%;] *-EY)*N(j}! wFJeS BG4d6")/gdkPgn'ХhLE yz6TYO=LrN~oW=A΀M]; BF0.3} ZGK7VV0s<%.{K@ĉ1E[x`h- B ]oQu񏏌9fdE}K}A[ XS13t)ڙЈJ w+G]gHT}6Zc1/vVZXc̭nbNr̽F!@}MH;]ǽ*! )=ϗ[0Xn/IFJsvCW`MnER_uAb;|xY O(>"Gg#;VD9okiNzɢ6G83Dz΂iA!y\U ˉ @YK~+KPf6f/,NVחhNIE*St_λr3aq_Uq992oY`:-Nz7iB .AddD9z@F6亓{"Fd Ъ.!L0h IY:&)q) ;06臬j -zߎ @YqeA͚MKxHcu' zP0Iҍn5@\&ySTԖq'2ܿ%e1wNě:W͙K塎=jkȋshǦ6Yۣ=e&iTAcioS,l2 seIS@auV!ՆDZх-@Σ(3N O>S8VуG- Nf336𼩍 Eh|a!C3B~=F {N&8~0Xi,l='*r#(pkP@@4 E>%a˱q纰m .LG?|ѮV7_tK$S/T0{qFJ n!;csW8}NoXX/BQ3W ~H!0}#R\v+  W3:p8&/0e8a[$㵎Vp[Z2խbb{w? Y18(ko/6.f)%_lmƈ^N`], ـ1ΟVYD[M g~ a$]P1fk칈>΅rܝst1HTaO%xVOaTj p;IGfDRD<{s_Bs.Bf%$/=] eFm7^fWM,xRٝ$y5Pr*Ԉ܂ p8(깐d\U·m0T1v+t88bem}^ %DԊe@8pǎ|ļtҚ!N ghe$ȸc`*fG~DJwIGSYH%-*U-/s|m6wMTbzApv-6U-:<]ԇjNucUԊkLI%ܶsLQu^yhR`CoW]( ׏E4Mׁqe>]Y:w}r6,4jAG=S$/xw XEz"ڗ[`c_3x^ME*FU+KoC;Rd7Vx^VP`x{$XaV̽: :ZY2mOX,"Gnd^OC6$mSQܲᩴe(qWz<̪8 ig۳(ǨD/KF}ؤ cTx' ^v8C`ԇGG-Ma컱:C;?$WN_i;S--݃y.alkmk%TG~SEUyЅ@r.*8y5=Vdд^I81W_4O݇ts~Վ̸V g6PYk;< /MqĦ(2̶|%7=ha\iWC\X#D`ț1P^_XAA& eJHk~htre&!>K+*IFoG8+6qo͞.g׾86.M{h)XxZ2aR],]%ݢr",iNލA.5;*yI3 3o3~}D4,_={̀]YKؓ8 AS}%ī&T"{}|Ga>;xAdb%-'grj?g#GDOfK7Ś_,_@mM$t˸sBխ>5p { (<7O(Po"ںŽ A]l3k'IQl(SWͺ"6D_LK p 5w̙ᾦay-^vjIRwi 7v΋u0'`IS~S&@Hvt]nGNntw%9rU]'U73>`&*=k.Z 1oy9Gl$-jeF:n, eS71 cCR2ڤ?_u&(_Uhy{Yqa$K:04FKդτpZ"Eޥ̟-t0Wg0^X%޿gE;@`9 ;yBґF%.+˷ª' 46k:'t Hy%~K&@yjAu+4CtGK-Wo?4$ɠVdXCʜOk33lr|a'%۳TI~aH_W~H .jc~&(~x#￴}{Lrge.n>#t=Y|: )S&jiʯ1%=4{T0Xbd"5>IJsX"tu 5͟iy(|J-1Hs C#S r>XL60 :pOa9SDWbv )']AWYN1v{EW Jr.]3 \J!m0ŕ <x(RWع"Bbݜ# O-Cs4 @k.xzIPΉ'ӂ;䃹!*n*dED|\ |~K5eP,Dp$ﳸ TH܃^H9l>*]sanE62z07'H䋑b+a^PRUՎ *qKl SbQbٽ5S~O8䛅)۷o=߹ePrh+.nѹL?;+Δbh)2t5JWq>qZ#Te\vQ,5"]FxT_3VK>=5.|AnNEp,5xn3%-fe9ܱ~.eVwP1\<)>̒r/莙3Z=\[0P9u_G? NO`"-Ә+!qoT7yMBMsCF3KmC=K|a+JjôwyGuds([XM k&>TY|, 42)Y}09.,.}[&13w(j tTA$~w HEmbQ9.PUńP8j+tp΅  flΗuGT_pqh>ґÌ.2N2>6J-j>?cC;Rj%MAo.a x((,{Ä@TWk4?454xj?8`< ]zI1}ugtpnB!'ɕVl-?b@4lІ1y. ~M|Ca d,v)[ԫ[۟HT%j]'Α975L2*[ '_dV6a=X#Yub{tF% =; D械nSKYeJ=&J+;O7wi3dMhcWn5 H;ryl@udLY(`Ex;ZloQ)v'!/!%֏Z4 y1ѓら>̭ce-.x^ EM7q@1WrK(q$,|^63h@ (}x z?;k7v0▼Ǭ5`kز[ lE *~ `.tDJʣխ/C/li¤PW %Q֙Y$@ܭ)˜ީ2aY;f\=#oUfW~àseNz0D;Pˇ!rGM"xa[ ~#B l.Z+ "p|O8qUx"`Jρ-9wh"hXȁLGhH)![􎭏nwYqwF T;X7NBBFvw5 9XʂFBd6o5vb?[SP&-EyhI@ OYV ٙJ\2D@Ø>dH PzӼ^y޿#xEV^[elc^ ᵳBsp;q#*"+3Fh0I!n7ls<|h8p72dxm[=Ö%u+V8%Ä/x)Ȝۏ_ɖ {ƽ2 $FlT #:.dԖmh:6WM8*.:yj 6vUG&\&y|u9(#Ф LqVaBM,I4Wo髺E쩆`3Ffq a@<]59XuüMH5sg MJtJ֑ 2c9>SUOMrf#"QR:kΕ@~<#m7R,l]f/ z/SW,KF̌}&21c@`W"t`U@ѿ&@7VX )31: f5O83--YaQe;Ե4qQű.%x:~H#C"(<̉Ie!`:ק@ }M8@:.tÁvItǗvg gpw\L>z'Rj U$JUۭ1s=W!]ڭpx^HRqZz L*09¤<$lZU `$ּ]K| MZ:5+b$hzo*M/*ϑ&\x"k(~=~+ {f>-?#nYXj?|D5:pH8D._9ʜY`ry/F'\:7w7ڽx" UGx1Oy}B*.a"v˺Y'3%>p$/6OEԛ' U^[k !gN_q$~s_70#6$ 9UV"3TLNЂLn?Tv 䔼GhcQ*8($PM%.nqSi4]TOM9V6H^[WѺrlV@jn#Ī|j_iVOv(+5r)*!+t޳t;޳'#6R4VD#u#FC\uj,Cq6~Wxz_8R$b_gv 4' 5:'ޭ&dіX=C.nhce3ӊQ=f(V HM ] >^L8XW8݇i6\Tz%"NcQQdQK up3ey!Shd$ A| UCdim^[@+;Kߨ+]v ZD}'¦:~kn#E~% 3C) ׶NO,Z!EZ5\dF@CvMA(˕&VXj/˒p1LI{[p rǦ_oZOir^yiAOLsHFC3?Xݣ~y:TT[}\.5X Cq;id2WNƻ<$E Y\el6= O$ _z,z!uݍkM@D@§O^]Etcj%){Y]Ih!\̅ YyYVߞ/dKcnjʈ.kBeއ.-ȦFe|,7ryƙc]ؒ]]^HEˑzj)jhQ 2>|'Sbm:bi2BwF¦zٴ] CEr(UchnˈVlC/aW2A `5_h-ߔ &Ql}4R),F-~΍eDk,"efHO1qmM4^{)xlX"8М~_)cǀLOʩkZ5RɞV\:vEȩ47,dTM,q& L]kT *+o}?!覼$(hr }+^J35ݱR"L[X߫UUDT4?zjv*:*$ *T]_Fsiuَ|yC{Uc(OS'+<…ʦ!qIװHhMvO1bKjq[C;C\oG%Ex8pP/H'?Q+Gh|dZ;J$T%_sT- f}VsW9 )T]:s6ˣBOK]ȲQUKӤOMfEq64"07~\얬gut{ e '%.{c͛ c<p1,)$SSu˜)\iD1=d܃Q~@ N) fCXTD~К}4xO?nE1Z|fZ X3si| h&y5-02iDbĪITӼ ˤ;V=`ru^>{19hE)kǸc0쓃x{[Վ|[#]RplkLp@3u5P|JO{.;0nBc3B3`N5_b>; o۟٭U8϶ m.RdW&niR0}GE鉑(p4+֗iso6>,NoC HjUW2Wڕ7t N<*RV&܈a$`y o|t)3߭"'q<:x"- M"R dlw`eV:ss4ߙFuWQP""VLTӂhFwmnvA!3S|'o;Dž >ҜK%F:Ohƿ=O_ax3ԓY_#:Ǽ @I`7޷馘 ڀ+,J @ Y̦Q69kҩzZǺSvO3NsK2Ӄ}ڥl!ZvcqN]=3~D(/q+hK0 #8`~-g NL%7wGRIg^ꅹ zm&c@!+vErF`"t`%_lIv[W`'V9%SSjޏU-"vW.HN#Wr_^aP J>zH&C,ro^tQaO u1Oظ16ZJ Q:-@m*~ 2U=eQ#0StזOuON!5Kb=v?8ȜȫzgQzf,JkmOB\( n?aS9DAa5HD(Ac9} .CCH;,JH*AV"X_@LOշ=}p&B Nw.Yb>VV\o(v'viez2@dM*?DkMCu"_>IC숹v~ajF-fk{FD^ijC7# n!d48g! :m{xctZnsA:'8s{=PD|S ٻnk٪k咾:"jn'bL`Dդ?VL&G冫y[weC<*Rٷg.cNf2B/h쟚Zdj͈qpXK$dEVa''8nU"]2PA3E(+wq_o=. Wdj0:˴? |K E?;[]Jn!h" ;Ņĕo?l&>=8[>k$Vr9ٙ#{DS@ mHGVfz':Ċ71Y f$|~@ѹ d'5u.2D{S CYGM#P,Pm"ve\fl,ZE&y B z@(BؘUe wHqd طAqfӛm?Vj"+ڡiut lgb)2t<˴ɨ0,I\~<͗1RR&^~߷G>* &ϛC%YQrYv4#/8 }VNTqHeh.~~\,kL;N#mE$ͥX lvö~A*78nfØSH_D8n)6ԅ99ɦOd*z5dtṡ;6k;mQhW\,CG ;I5ܛ<$HEo63R;0|f$aynL]LHSl\쒐T G8Z0ŋѮr;}VJ7w#iY5wGlT^)wB =:J }ذ7>"ۏ*b7AoIuBR,<Eszq^ _ܼ|>n G7=%JwK@ s~a|}S@ᓅ^qy$օJ a,m~THp睃Nb\BNIqޢyMYIi&3:㰍)JJmjǘQas-zɮ%5v(=1'E C\r&} STGmekdf7m)QAM7l_Ȗ~<H Ƕu?˶{\Iަ" Ĩ }Wm|#Ny^mSYEd*ơ!pm(MD%7%%\]]ء,_rMG  6wPLCꤩy\Ƞ{M5b(w@݀΋#Xu!4 D-<5- 뾮Iv̀)?fػxkvy&$ {QF$Lr4eEزDrEě1[A,5 $`à1ZJp)Nt!]zX%E؍x1$][:Km!nI5s`v/ E%qov9D6QM]XjM0S+CI/"-?)-&dtJޘEab߉zaWs up%ރ Z{`R'%`J岃@Y>B8'Bk0Aϔf 2'RT:|RغSaujڠ7SG%v6 9v Qy,k`3~2[fe~yvP+_)2>7(:߸]oA\ᎾOOZ! nxA_$kij|(~^`Ve`}\uk-7 xTsP.l[3+ћQ/Ӽh%k|]c~7#-*>F +J}M,u%wăұ~;(z~*iHxM @~WӭДLjrr3Q ]p7S̤-±[S? vR&h)@M lj4m,;(wxM[zKFʩUj: s^DMnV-rX+ 9:6:8 }n#!5kESfy A-z#4QJuұ(ypgbOI*Y@y6LiP<r5DV3o7 40錶é+`/4)bx x$cϩy-ți`Fלz݅@Ⱦ2d鴇(3VYqEU& 8ZϵDVzIt [~2aT%t{UDj2Q߀^>`w,)gOT 0vo?̸07++ICxM FY )-Ts/ʾC,=4=J'/Pr}bf]yB0wպ k 8˃nyӻQ;f66x稜obe#9@DhP(IV6:*6/u<Ҕ wn*OWI՘_c…׺!?ߜ2}wޖ<'wſ34jFνf'99t~aw +.bMDہSގg tv̗| yż^c/(4F4=GP= $ s@ AKvf=*N}=WdbKrݱiƚ8ċpsb:dD:mJ5)lp:Oc;W1+g<"\;eWJՆ:zhM;чL{ޟ<ƝD6NniA-}z>u#VE# Jh/,{Qya`z8v/Vg:$SDvßܲgc[EǾ @N2;N-Wv!x6 KiD)bqyu<>~!,m`0~ !h,ܣGIܩk}oyt5OhhJ$L nW!~U!9"?+2=#lb4)|$q9Q(piZ #縉g2>vyN#R;ug EֹW/{vҋצ-Ќf޷,~{dAh Zۊ$ FZ9 Jh_~;BTڏkR޵jG6V̞eSo$0E!x2 >Ȟyn͆V:0 fÝmѧjb7\DitkJ:-T9&c6ةz >由;(\Ϧ@Č۩o [q*0!(001ɽq'{痯f Л l|؝e.~*EUQSH+ޤz5R"f 3n@V5K[GݞԞ9(>]wכpxN[K UM{)f<%3t ڽLy6GZ$_aQĘ_R`|G?V3AӢ5=GUnQlyV(ɀBu Gq~)FMJcnuuB-~CdZF3"vT6 e 5 QL]@&)@Y]Sыz>za3iz|ڜ p1lb}X?^(tVpض +?qF=h >J{"3 ' hyMEEMm`(IfT̄dTyUA+|n`dv8;kz*MjX<69+5O; ʾfIeeai YU2Or{ԵT>eď֐pgy72tӄ!ZR[>\|cD R*6^fFsĈxh\ZsG&eKܼڕ8H@d_AY7"!~" +-$3kchp(AS1s`/y n1 SMH>3nJ0xW*G!߼S‘ֽǨ^dEg)m`Hfeݕ!tWU~B^M3@dAhP3b{\ GvV1 r=nx 2SM%nRFX0z3U$ HYfOwVX$ezyB/ߤ XwQ1:2AyL"&M/Ltj?- 0yD8l/qX-&KJV4x)6(-6*#GSfD-^ yN" =,me#/옥KȶhG p('24Sw-^ev61h )?|^d0 )u08 %t?:jhƨx*3v+1Ye)`זד8ƽGpt^+?@{&VJ)̥ 4θ< yl\KخGnAٹQ[(t0!'z$*7~Tf62V,dgDrڸ~Hr<>j-BaǰhH!וJs4|םܕX䞍 ?%4 Ԯ'[uǵ<;TRjѧjZ07n,nNtVK($5>.tjW8VDMnp&}d$xH .dVn*UZMJdhvIJ=VO9afLb!>[!\]%{[*%ʌ\6][vkZbwC7-rץ6k(M(Ȋ$Ne.ƫԔP/-w+p졮`Tb}>ȘR!Kv|οv(jJJT@{-<]}t~ qAf#ʳɵ&],!ӎI|#>jg`":ow}q7[ӕ1%SOΎ H|taɦT*ײ3ϳK"]K`^Ӫ/q[-74%6iJ-l?|_Z CV Zcn1w׮A-#`%h?H{LH)FBiO0l]KD3H՛b*o(>YxP2JV+c4iz?*%OmޟY}U 6#ʾ.-+:Eyey-8$v[awEiyRm~t)Gw1%l,9 П@-3j&C dm`yϥ'n|B ISvcMx'CM[ )Or ߻HJ;G?NfdU#g]9\Bn}e`LMM>욷yuJE'Et#txla>tpg9XJlg`cO`0u7_FX-!jX_ݏn48ׁϚ$b_/ Z $zOmefƄ>+Faz j7Nl">l25yBu2bMnBuziCG`I >ee)ܜb{x>|0B9ң!'+Chy_<\IJΕB@!3/cJL& RL7=ZkZUUw }z_5{ pNgi ȻeQTİyk[1\GK_MYklIcZ-'4f" yymߕQBh PƉi?V|cV·Pr~~xگytJ~^   %)4wzi=!,0~A)WbߖAT D4D})?J>Oa%4j}7З|SX]1nS\Y1C'%| xCIlc#ޘ4xе_#>sJ% &LI̿(VdWDŽX0@chc:!:CTE@eS'+#Z|>/&FB\iEZO7t5v:()lLފR0p `}$+b1xF+x @RjxѤ,e(ף "9EʯLԁ%VZo˃tkU"j߼E*ObVmc/c+Ī#r"e1wA /~xg|7W.sO8.)=8n!,'xh`뜁 Œm 9,'/Yy*Icy6H_wyso֜!Y?WnH+uc(b<n}*3̎ZF`S2{;?ue|"$Keo(DРTb=RC9yd(; {'YnF[Og$4jV]PV[_2߽ȰFKq[pJڢLr /,l`}H|  Zq^&?lw}IrrJ=Hzp'NXecF NA@'ֵǢ*ecni+^#&tc)hsl<-qX/%8WdyID={S͐ϟ6R.B x ;֐qj@ `cZ mB~~oVhez͕A|IJ(;`a+prگzު;lVb>\`P~WZKU-tFAVsjlH[ mW8s}{p?= 4r]V~Rzi2R3 1՘:~-q<;PdpY\LSm0st7\E3ؙ>8r^8piXzny[8w2lk*Ͽd=j z*^K`D>d7Fռ:36l7awL$)>:Yb_q"kr-(,}k:fg;Ӫe/skC8FÄalU@g2)9Թ\/JS<%%[Pbs#L cXc_}ٹYag1Z;S"pF'Vsaty>pz0E0A…xeB:k +K}Z}1c]>M*X7p;]h9}(d-f" >fLZiٸe:2!V`J}ޔlU2;ǴkS:iPu{93|4(W%i%{^\)>8)桿w[2o(2;LA6CZAl62p I(t迒tvf |hs رDqʹ֝8V\"c 8ah +Ktv鄳)R&6uPs(N,\JGK[~R+O+|\TqJ4*Ea]D`*b/}o7?{x[S5d󜀩8 Jz> B1JB2=&lOv=\R.ơq&s>&&o zYKh,:N@ʂIf5" @2h\uT W 1wJ\ρu>y1;:f])!| DnKwrtluݭ^xݑ9qRR6=AI_1a')nԬuD)C䠠$j\yQ]{,Yv";}7Pk Km|y9ְn@AN}L!6R;j4u{=ytoc 0sONQT0td_$)J'd &! |햶ej8 (L/z펁Uy-]rTVB(ݢȴg"a9/ Э0 s>G1+>[:J⌲E!󣓙A#X@h ߁`T 99Gm=Fx[yy I>%#ע8 }á͗:[cHiRvYk\m >Bl /uȱc_5JZQ/$ʵCm^zۓv6\_u%@=Q-˼+w.f""uc5ɿEi7s(xPTչSZSрūXMΣG|@:&_uN{0>a[KlJC=3.}!2.w1.S4QهHNe75"sC~o &[a?PR!ɦ\rNWDj2 ;P丄4*;p~;~HJn5X(¶ægh8> G3r5.3d OƦoA*:۽ZϺ_]paX/?⏜ll.ZK|u\)1m +΢nk6C\u^Y% .qA/{sUC&fYNS-^իo$sXV 6ZQ-]Pi_q4$#X``ڦfn/.FI]dulQBz&$knd)R ARwyI3*s!C %ⶱFWI( (29Ř:'t>^k2`vF'Dy_[X^Hm^ФЦ 4qJnZ 510*a$h]jNʭ6}TpL bnk!̔sIA)xFè[8y3QuQ*A&C RJ :T̉&+=}/\ 37[IED㰺7mo(?03rKcHL&ݹ˳41] X 3R 1I Sw:TW0}0P rP7ź-jE z%Z3/zLg ědBa!m?GTq>OPB]4&U&Jai1DwJ ; XL7vM `D҅p z@EnM "[֧5)Z|fȒ2*%4BU{_M{2]1Z&,Lc {I1;dmb&m·nP[KZ{YtE@~2` Z~}#"W;uZͦ,9[F \;݂"nx,+vULL[0zl,G.jamB蜜I \_v5p[Xo՘|N7VdA81ȶUZppLxyra{APR[FFY;!L=뇪 r.`kVdm  qC\4j<7,.qò^S$n%7f$d6]Im&M-x#l -8*Rni\\Pv1-7#kVDK`WC;Gˠۃ6-lf18띴/YA K _I;Yi`ع 4t 联TF;xIF֦JkQkTCÖ/ e^O['[2A4v*4q9Oejiºt{*o{8-(nWh- ySz&~^bWr[v*b)԰HvhI'l]-3`!۹WѢҋ0DZ}xtZlk$>8>H͹ICQٺG.c|G1/_-鍍eG9|8ݢy<"W;Dk9ʵC}0DWѾd/:=`.ͨ1p )my-HA>ܜc3ʳKZq(_3re)G M )kgV6DXDt=A J1#ZO!%;:$ރ/':m+#^N&,|YTS@iD^a^Mmp3OYbti2Jrd/s%SCbBeX my!@/![JfS[?ҟSJT]“ +>d+7B|]?AڰW.D]5 H ̎ {uӎ5#vHC9IUL&SٌIu uڼvs'CJ$5LݖOʙFE@{tTnӭG,&xѥCnv`) ;6]o:Ď"[zֱ9i^ݝ%0gӁgdzvBpZRQ*շA ~jbwt(He:"{Քs"7 sVQoQ)/9iye2XGU"ܺk]A+[(a&V^M+YS,+8NX1c-VA#JEN֜vŠr荷h:zkeytkL\PO Lw3Y_2%SU$o IpvSVG0L;bi" 8E쳜CYGCB"QAUYϯ?䘷K$(ԳͲ&HŮj0Q fko1 kmܸIkO>'qtғ٨ִ]G5N,6p0æ[.o =X<#}~HDh+P[;1˳!nARΙ&=R|Ky*ϚetYS%5a~ U[&x lsE—Ϯ!fyL@fV"MY^ DŽ9-)2,~&*d2r; -@쥨 2;4Qs2 gx#}ErqfplAn P~-YM<6 ~@3*6z4lឣIΏ5ޟK-ОLe7L1]r t>TڹMUo4fŏҞpA)\b#uզij Fy]{C|YC :!( tFu-HhYT'MUʴO{Upcv/磖N};~Z xJo"\cr+ޗzVKro"RPG G82!HPo姘8NUY#KHrho:R09GbP-[cwYCNGNq432* FJ|'o?_wUvfZp\LVbȹd z.A 6M}uS[eIXT 4}dx~HNOt9\1<м -7!i uX=eWgVaur8F >}mP'aNH}r4{~G;)t.D7@8üޥ{2oj!:,y%`~.݆sjMD1GX78,S]nSh\;N"Г!6^o c#gcu+nT_Pg6 x%%Ƀq޻e63jʇ:/&WVgK|~6(z?^%n$:o\ |Ks$BA} @;;5z Uԭqx֙H5dVwő ]v+%TaXCŦFG Ss$Du+]:kf/m31x֠\xJJU]kpckI}&ҌJ@o3Aq* QsPPNs2`PWGĀP?ɴdv?uHC4CHPV2['bbRqkyʰ9 r=%j.5ǎP=J#EE?}0ONeAd{:Khanrőn{3@ׇٛ ŮS{/s^i-i* 8I#P,UoǗ;Z^0_&=P.6\x]f!a<詆,U&+<:qPGxx KI/APțS q¥ՁG7A*2?Pѝ΃pՋF;vu" 71~nAp Ӈ-V8)5㳃رQ#YI$Xu{*M0z ɖmJE4+Qtn&qU/UIT̔94xwa,`6=r(uqM;G0#d&)>ͪLV zTalZ6gw\[xJmG̦lPo8mIw (L̻S9 /vXWbKT֐Sd{"dR2w`yGhN5Yⶄor| 3mWJ۱|sEbR2"A46xsRM MƗF5).wnfn2unwWrgl3.׷kQ\QZ3b[ĆDj*4R R^UDwJVnb0.^)Aw?=#gԂh` r-\g&|[d@Rb`ݬ`&-LcsnhH:=W êFX(nbmQ h+^Q&[0R2'RX S=1^z&ԑ7)$nSL<G_7m4f "mf2`?5"T? 6|)\1s6KMH_ 1}҉CO^_)I /&֠s.c߬oKczYR^5'^H86BZv\>z''τz ~P!?c2m~)cGixbY$Sg(vf@SLEJgGW> Au`2r )R7k׍#5& kehz9vwF7q= =HPW`S=㞆znMJL9c*Y7P{Q #C3Jo kf 7UҌ\Pz4h!F4)W9^\WW򛮟l'#)eJ $KjeԿ=3R{Wq]S*0t{FϪ׮ެVJ}.Xw6j;<,>! -RlWIzXY+| g 3{ ݯ4HOXX+蟟Qε&*M>!-/אv!ɷe($^85HEI$ s%Zǁqcsoq`KU(O!wʫ,D$%}UJG$9U]qgsiB?_j[,m0)(=YqэNWZٱ|.We)'ɟ{ E㯤~o,B M )ni:K_dʰ0]jx%>b-8ag70OVvim]}X}>$ULE1L衲?TIx-~bg~?.Arpf֩DAٲiUۈ&H&v%f{.G,Z\0NF>V ;^p6(H+yn*Թ"'Ԏ$@=0GHu:QgVʮ`NXjr2jaͅ#Qe(r wFpM.,K!:U>SBkbk)j+CzG78"H^;,rp[CG<.ꓓ6"djR:&pwGfۛ)oU|ЦHߪ"v:k)4$x2U!VS8N ;YZebc(=?tDãJaanˡ\! GKhC+9!=S v} \/q/ z93);کE}&\IZp3d2&U~ mo[vj^ <ё[g\$%}F 3hͶn|xnf&VK3 \K#gQNqBS]7PWWŻ2v+ C`~1YuumQXlrF2"@q=[ I[9Y ՊVz,BZط9j$ $ϩ~!?Y]4 ߟ;Ɯu$\\(7ZAǥfH6S Ԓa߅< !@Z V 9SR͏aȋye$! FU$Br( >/L^$zn$KSsԪ.@I될֛Z/Jl;z#E\p dxn"XVG)^'|XН~ 5ԪE!];z-0U4UDsyP컈d30FJJoy}z1F?ݎ1G3$&xωz=r*T=;Bc,;*܏[x{^g)OdU,s̆؎ @]$Il)Y(dTu$-.Q]NW2E)>?e XGݢY"ִ| _O@+[kE0qS$⑱~[ͳT 2<6φs`Nn$ҏ2k*t8Nnݿc<)^ :nrs-fZfh=p#t/m>b5&ae5.v tM~% o>bbbE;ټ8e2}.Z%נUI8e?(bAܺpD44. "&L>jfa\'!2]D,N(j#pRžL$x[¢YgE?Y7 8ύ&̯ ®|:00sle]oMyc%>RZR4d,ԟJT+ꖨ\n^8,g$7chc2^BKgwlâ>rG΄?sjk?F|#]>ͼ-'|&(Q:ekK ;!/0թ=mQ.6ΕDVczwr$'UQBZ m˙qmb6kW5.sA0oxp`%C䢗P G <"icE, '0&Ii^J_Uv3My+[3U SI:eA2 A@J"1.f\_"8;/vW4+5 $ݟBa>- [o>/DSzxy5z Yx^C[#p"G})eqnrNC+OwW1*|;\ckԓKQOα44rn?Rޔ7A {H 潞 'L=gaE]1Y/c{M+.[//=?`{Xf!s~#/ dXS= F$m Mhi~LTA=!BԸm [~jh׫?5^k_(0c/eR1L| \1B6^2v bGm 9]FM"[jVGG^[/֋j؈W].FA=5ɭVQN3vMr2݅b (H6ȳ @# p~!q~H.!S6}P-rbpgT*b[9 1<:A=y ~xGN [=.!H ]*o " zT|O|]%ᵶomg$aeS2br=zI+FIyyNk!N=Vlg{iK]yWmP ޚɨ B@һA +mpUm ;*ziIk8R-\cG}N_L>|K>hc"$siaOgCچx];_(8OP>v!(b6wrDHa<$[7IJ}͑PP!;e(k+& h2q5l֨П͂\BZo;Я2 .+| JQNǑ\8ゥ?oS1 ~v?h}~o!B? Y|.?RVG@l;.*D鵦sS⩐FF3I?{LsMY[hQ4k>S* i!Z!ͪVM ͐>r1ʢA[XJxJzok~ ˔S/U/A;7hZ10'p+YD;ةcoBIznHɷaRyC@ϓ{;P5;o<ͯ5I&S@gHT3Rg65ɧ72;vK*e */D?S_X)"2戣- {0Y20)']Pr=o[Q`Y-oBl`J/)a.JNLRNGZ۵SA.~i]aPSN-^c¹!E(|`j|AHz;# iΚ 偈JECğz _(Re$E־a/kuٱniZlk[W)6P.FYRCdEOׅ+^aU+|F}k6!*_p/7XټbĒ[%.mrIo٥N锐>+rl'k;qZMrYі_F"$nʈOFg[Ydq[c?V+.UsE٬.` ٩D:;*G Y_A]АWaBtp-酀 q &JNؗE/WJ)9YkQ:Md7f+O%MōX8x/-lA v&AB \3PwB#.FBqm֦a(Fr{7>!!%J2|{~u jՓ +>L8_lTp5-NЖ1WiC-ׇXZسX;6<>Z91VؙUfXq@wdpvqk*s]5Ϟ(Dmb*:@kՒjy ΙCʹ;\SL`~-dK"$ bUUxSUs|iQoB.),*ax #_'r'' }*}YIyJ~-xD]PFJXԙwA2uY %<" `\~.`E=o.c_;sbSgwj j۠yBUI0`$sB^ Qi,Pe[ecf #߾(F;6ԿF-[!jgՕ`# f)ɬ%"׷}@"JM^=YWC䦍{4 k0^Llc Qpɰ~!*O@>N -ֲa(7Di| +sgMu3Pn-U0tM}Z (kH 6Y RiF-ʯ %~O;p(NlgwOwvGjO[j6׿jZ쥘l .NÂFl+9x.nmi,o, C+ڒN 6PT'ЬV kPN ?.7Kso;mPIeM؈lu߉EKb..l.yHn|צc^](\-tszF9d rHZ6I@QI ]> F-;eF=XVSEDr(}ŷ4NJ<Z)jB.ԅ.ES,`~֭~' l{JI{5y &BN^}x7^lTsW:b^cXK\x+h_4ZiG-b(njљʶ%bkPM&T=8WfvU0 瘝˯!jsЧȪ|G ӥUa6Ɣ GzTԿJ:OaY/l/yI#hjgZ6~vʓ^,êȚm~\7aW8e1ͤ&dݮ*`s[}6duʿQJ-N93Jw}3ǰ՝aUGkV*G$:t JKY7$q&_/.mQ{4^0 `鼺E=˖hIjMm)&r(յ3?7~g׶<ڞK^ȎSHG9DEK FL_ ## j@rMS+.r Рlh*W;!x@\QV|*}?ěNGp_ N@s<ougm-(7p߾EUbP'y8~[Da:Hr;'? d3O$8)|ފmހHW-lۥצ^PCL}&Z>1j4;t3FZ y`){Au*3%gYM`ѕجP U#N}Rǩz Hzo|i4%ܻGy@¿*> Y9U7xҢu1PgA#<M;F4ҔiK b\K&/hvW:}Q& 憝]9—f }d|3Scry tr,xeS3fg=.yDii>2%,d}!i㯒'h%CQ= RF)RlUlҫ&Y3:sP3S_B#5d/=xN rR@1v=fGN~ ?8tu%7̑0qjJ?: (/4eq $SR#? TѰ l&}T;V0_%G٢oH_)2r,H(Zy:צs3FWIf0p;`Cg8j**۶q\1;N. D$k'h7 Ul  hai1NKɤH+u |֥rf` 2S GtzZ :{[e'+~yxǔZlZ˿$:d p4.(d^$Gw}7yYN81 m1voݩ_%9@` On;I4;KBŋdJ/z]߻Ѐ /]*WfL!k{mIafs_i<,iOOF*n@L]% O~J-sx}0|2@(h'b!Ypuקߋ"#/)\<Wc lSq{c[k-^Z5F :<a6 QεIb{6i'\^҈Rd ۍP6f+ʀ -Cй }bhƝ0 uNҖ!}4@1%.f4㼤P^XYI&A8A0|&~IR{*Ģ+/w*{BÃ^r$L$U|Υzo2v#UTRkl*ht+IZibd ZEKđA::`!O߷#Ex|xA Y"s6q 8O+#`Vf{R'xx5PFV-SM_ZowPȥqY啬y6'kQʪ_O 0 G̡_ҕ0SJGf pۦ>*skdc ;@q>_6fZd-p'&VW}P>$vd1X@NiDmVn[3aVIAX~"UxԐ"rY6OQ2PⅲyQ5A9 Qϸ˕U|"'wK; C "3B BYiw @5"MzIe*"֕yLOmԦwjƂּyGᛸT8 ?t(ΘNuclo,iM`pAp $-x.o0RԈg 3`tb5'm$.JT`D/\ie1L'u8Zu1jB]uSվ~pTqՅ*lYۥA78S;;N疉^^Uq jtō(Ӭ}&6E!"~h̓+JySeik^|2*@Y-+dKFLK||`ԡ.4G$z+V9b[4K>O+ FҡРl \k>+v9B%_NܨۃI * Ǯnb_-J,eLjr/Z:,fʍIڂȜTHڇrp){1rW|Jc I kiϤ,!暁}ʨ8#SQ0i]J^DTiaYFaȂDZB#@PMZ1;a!ƘM ̜?rmXz>,2ճ|i;M@EsU="{GE \xr$mk*-$:Ϩ5jwbʏ(Nd QDFrX:Q9P0+g$Gmj˅@r=W&]%0'4! v裂@9o*&^I#A@:6] EBfb R]R ]?|Ss$2DSHt%]oqfFX6 ᮐSim-wH)۽ROݠSi]1G(/*I1lO(_i)b"'̤uZZ;P\F~^Xk6A_1/G \?$#άM:NT{UʇϼpA5#.1Ԡz;@&NMLC l 7kri} 'l8K'X0 C7?TD+ҬWNδD[Z#Ĕg"g-5|"|J3dG0 mi ;*gDk2A _£L*}rն Q7mA[ٰr@?}S(~#&4䎃p|Af=2q;mB3id,GTBE^g C˭@ B-F]#ED^.TtbKnގ*U9ޖT{3z崉oA:V:O1IբXXZ:=ЀUvbSIЭq{!aI؈QlF׎Ëvښ_R@i:, A :sruwnbNN\pCՑC;]?\`=V:^sz-HhLp: t n"\A./ܙ]g^(ɄN3b[ltCzdύ.MĂq}1=tuhycMX|yc辯ѷ[ĺŘ*̺jvI%' xMUMh4 8ÖDF+8THIyɟ|W߱3kXDӭiTDX+wveD/6\_H$aq@)I z^]H6w8|N?K%*hQ1`NL,},NkV!,#QqҙUlI UBp 8!縄BƩi R(U1kSNg}a,6ɺ.fbTSX#%:)+ #9vW`%QlImΤ нӫ&J~kUt0T7]K"݃O$]<hQW:0)ץTwDAWpgѓtIh=>~_9\#{'QskL)րL+9qQ50>qdch]!4;:Y~[j!E@E~G鹿"JOY2"@诓G>4[Xa@'}$Gp854=>6D,}YVC|a 3_"`>A#BDV7hPx 6A,I=" Jݺ]:X,܀uf _p0hDGb%/&b˨*sхS!~lG1OX:e'P`PjSgN~Kf;BH|,2&yS9R ",E}~C0'ީq9 ~N]dpw=tVő=ZͬCI3f.R^X}}.Uqȼ yL0šIU@'gp85L =TWqV>"HkWxEP1e%FErYR>Zh1538g?aaX %؝ CǴ7EE5!Z3uͺMZDD`_GփtqdÀ[&1. GQj^PyŅacU er%5kV܅qt=ADAB2ͣQpCTV,G@- * 24^ _1 .2)'m{:o%,mtRjL&@H6K?bEFeL_KWg :fqVzoWA>(i߂ιLl|*/nPҭ=!eJPwOio4EF"8.˘  mmuL( 8#pf SYK>_F!كj-ZyXD^\I\Kbg!X[iǖ̚N@<-n)yN^# a|2S `۞6 QtlUˤ c/ ǖ5e ece*h?Y 3Cqb܊)^X3l"|Mjv%p+(է^$y!1Y''4iyh`8#0"1#^q\49@Q?:^'1um¡H/]D3 @<|Vt>q}+b}8Sm޵>0/ǩ:tN|՞׫\p_;tIDX.q![Kp-P{3$LQPb-:F% HX#ˤq+|9ڜ tQ?ȜBM')|pf 'da$g4UJg|V0"ђzEN8W u19?rY`TAEϸ*Ҁ2w+L3KL}DSv<˾vG3m`٠Av6k˂U]0Kgul^6I6P';:1~BeQʕ2ԑ"~fwyCdϩvsфL%N 3C%v@ܸ.yxFE;6\$g`)OyAPQ Hu\/ÑG1 26ߔ"0 T+`Z0,Pn=&-VV@xgh0ܝ|f\x犹gU#<Ԇ}s"0CQUL *Vd=$2.kUK ʇܷ׻h0␗\*\w͇7,0V,QQyLEq1[GFɸ}xFh4r2%0|{2 [yȘB(RaY;7su_ T䈽"<9ȊO-&HU*L/2`̸J(-'xcXϐ¦y^пP\oޕ _c>;'ۉd& 4gzC {,H͵uC7Ep8kY[eg#ĕCu=0(~;(;:oH?#x[8r8mj"ՓfOQaV^a%AU}4:)Dr0MfvP|GS[⛟2sDbˋUB"¢98J̢ko Ǖ]S,~{i BƫP FQ$o*Fd}fB2B[nZe\I-E}FSU 1vDq_\g57y h| t5ۉg ߈;("T&Ngqs0%V#BSQqgo4Qj e)von1K ?0@iVTNQ 4Ll,$TJ8(f6XD'qD~ȴR0RӅ2rV"@ܠ,א An Ѻ\SѝhvX"훵2܄dm{KGz!vˀ , {5 qz[MɅ*D=V4TK!wJY]ltMPXEm6˞ zU(X δ`4Y:t،ݐ, V_4[u<8Kz'bEUoB5 '%Հe=)` 7ѐĬ*2XoR8&}df)1i]sXb2 Zy4*s*Tf5uEpVu2CtB5~96?cd g*nuypR9Ş>]D4C1"gRUz/a@UdžDv~,^kTPї^z7TbG='ҥ %2CM}ڢÓze lC+Gdlьc |K9)^?RRALQ34) _g#xήyCd稗ƙz47>/ @[!b#¦օbVFK3<\sѷy>k-)ʼn=yjD5䭗(+NI_wc pCnUJȎ/fk7zN5wh8Dx(-S2+u$ u6]GkhuQPZ#^ !}ڧvļx"qxGf`M??{~H 3" ]#ӤjQ; -f{C塐ePR0\U9^g#Ne t&炖" -׿V [!CPɬdZ٘AIi.+"O3 ϔZ 7y5UR61/1 GY."cGy[8idV3TjuP! N9GMTfr;%D'qv=C #u^丂f]^ $]kKtӠiy{lx>D|˿ɑoCnw 8 ,Ϊ}\2:'}<(z'ZCxʄ &N mHܩǣE-1Dm3s{੤嚾 еЙ-<_쾙 yP]%rL "m\UĠ#~_ \b~#8pܹ:Y{-gL(*T|_' x""0^?7F+b3rǒL=mۮS|m ]90 j۴=lTBPsy,Z)s<լz'#K4_";^?k?J+5^zfYݍ嚨P#mG|N ^`?CjY[! D=_A!$v:]urCu[R)>IZ-qU wHLJ,\za6 ѷO̵F5'-ǃp}˺t5]KЮ&uaGA낄me/+uf.g*X~ݤC~(zk/#Y-L,ULvPثһZDYfu!N|%]{DVue)e(-%KSRV~ͮXc_}C"3:CmxAPa8D=ih#y( 80ooFT . wwG{Վ (AJVgPb+eu)b(x)l xo8$_Cc]ر 917}<%7dV(#:?%M 1 tT W~NFj>RiwY܀M }73۝wu ˧S>ļ跳٧g#z3j&6I.0.Gr+=c@SB2j};okMq-sRyzop^}3mnW4 ["^3$O[ `w]8[ DXSʳKxA%7(^qzߐC)II`|Du,߽%2ڝYC '}6mȹ$Z 5ƤC&OUdq#-_TyAj$?S(g4 `"I@Fӄ+ԙB|(hڑ_86e?'0lۂMilsҷGN)z65٣" qڭ ſPŸ^T3;t%)kN1^'f/_"03D_ЕXܘٌvNєqRԝwHj~pkɢt;p:#)abn&;3Sa`En@H .?+%edɵ Sŵj9_wgXF̤gr-K Ԧ<ȯ?L]C" /=]m&_{7)Lx(;uS&$jIՋQIІEg_ϫnނ OmJjg` Zp Y5AY֝dSh^1$QĞ=0!꘮L5*v@$2lCMyMkFGTM\ǫZ Ċ#, \Q&~HY{1\%B)K PƷ` wLo>\(+C9F>DRéwgH?t 75TvA4̨ԍYc+ } l">>'!MyP "1*}P[ߟ0mXrH+5OBOx{ |-KUTDuRڞp[ݴ eRQĴ ,XNܨx`Si5Z7;ND^9hPmHeVA ]<,e2)4In*wŪcH~i'MeI|#h`߃TԵ _iVsk[Ô.Nq^R7fcGeN#{!M zg \wU=~At᪥ *7S믍m:0F?E[IXUKl$wOlA!Z4=;1w'Sƒ bD8.^,\ fp%L`-rx*c(ƄM_ynAAQ0p5ZdvoH,ذ5[ 井煱&v6/ExOU (96`9 񺱴8y3uk /)v9-}gqKr0!f _x8k\Aa Gd,4;RP?@gWĚ`ԗȺy<];kjcW9خVL4~(d Ҩm@Y~j`d]9j5U﮾YnAw]Gi/)Fvҵ2%}L^WSقoE#\ߐ{$b nٕ~i?{7CERqLliehd[._-ldFjBLyp&Rk@T z <]Pws.1èF/se!`AES՚AH7&W8=ph;/q @ϖΰ k7X# '&~ z(p#'ĘP1jd`#"Ϡ+̉U?˸Z]N;⍑C Ww6v9M`e)!A|}-t0Af_ެ[\6{{a!"J*!6O>>(nAG< o[!ۄf6~"ϳ{R./~KSZk:؆)fMGɡ𷵴R`"b?7|ɽpF:my$3"4_wc<Nbn,zD}WLS׸؄.MRWBa"QޏЛQ>0ĴyLþEnXf _eq!Ziy53p7aNs3uᔗ'#dQ$D2&ŖP5O0SC{Bβʑ2?KSi,H5(Oמnm~IHvnv,|"7&b@Y ;Գ0yݗx<#"\ܧhOJ`pY][$ǘ~>Wmܷnգ[/Bwz!V3>BokU& bl|yMt([7K,Læ4#q^y!ĩm8~hպ3YOMaCwffCY{Pm/~X)cw!6fQ)!0wS37P]TnO2xA 0zļIڨxͼ݉[8DR/u3rut\f ]r{@&M ag}vD&*^ZqY6]vx{O "W3pq=؉h)orI@#kEeY" T‹Mu?;JHB+l%; vu|} v/T飀Ah+iDAI Sv ɄWLTA8gCOF_Λ}Yô\]_8׎]1ͼO`?jjj.NN+1iV9ذV Mέe("oSe;rkgv5*O36rMHXdLJ"h2lAw|EiMx888&dRh?2AwʝɚX0]]ߊ+3QdbR:{lD\}v<"1`!].~u5 'EKhp3^b/lVN9̙Sc*x p"Vx? MJѪ!9?v"6tuP1CȗL$D { /)z8zk͎ywҾ ;m$[CNl9>޸;hc7 ~ϗw`p |&#vИ/qUIYk KUpiMI%! ߨiP'`a0F>Pa/m÷edg ZfK.LYAԚɝ"WgwyK(S+übcuLeHA(R[$UHgzʕ9],Z4[Z!!; B'B}YȰ/]#Į4=(.5J`! f;A?| $>I NbQʆylήtq$+I{?+1 2t2|QQT"Wj\UrKA)&_5Zrdz7`H は sN:L8{b{Hq?j3 K ](\w YHF4M'ܥe ܞivʠ3_Z_G;|<[x3=~Qy\'h[˜f$^Fِ)N~ٷʊg.(󹋷XH2NzƑ[2Rb>pK)3 ]ͼ="/SO张/liY$%h><Ù QՕ;xN) /_xڥ8`v֐O  <Ds37 rsbu8‚ҕ # :~.VOMvw` &%4<#?Xߪ ս^,V_Vwк6O//ܵo#R6)}!'2ٵN(l<{z0Ig2JQ/Kq_n ( 1C:?hjm(Y[&׏ @Uy\rkn |ltǢ0O1;n?$ !d'uj{Chy[KOB$U'W!:9pA[9gĉ H x]y~|.4nmBopɳ>௢Г6Y%gJP)s!ko&ZVb0\#9o Zs 6N:= O7GRaZhSzs*n>74@WDg\^X8Qi `KpN/|r*ȣ]Cb>m2Ǡ`P!ěgCYpon<%'uRT3z\RƠ)z'+%dFqfֿйϧ, fxO6CUCGg\ZгZhRL L<*[݅# % &G 6KI:/~PaуH ZMyCbчhc50j1AFhKE paP?{{Gy|f0 s]VwjOkDNIAbyϝ0;9\E [@&uh>?ADx*k{[ qKĦ{$~ԌcEuOIoEa D껔g6ڦqƦoz ^D,륃 w=WRj.szq'b [q8K7ʾrb '~#'d_2g>\b&ihVާeZز{/v(0Ҽ7B' kAh3]_Ž?))@`1;j1B|{9✓ i4Wǹ{Z6zK'DUݮKr7 3x)$`yVձ4WF歔*lehhG~'3̫(k)cP[TOƆcާ#~$+OACxPgx\U0SZ5fA2Ѣ=VU-dwV0oQCa׀HNLY!f Xe7WQG i([qܒUzz 1Aϱb1#aUv\ȋ\E.Ջt. .0F %CԈ oTjdEYrk$~F YzC , ٫&2P,\:ފH[\zmd8dv `Xyb{\i&k5ߩ3w'ED(hv.55F+] щZ5!E*۾^'Hr@Fgq:ZϤzw(=˽ Q+GPֵY<?: Qtx|=lN7`ϼ E|WaQ`n{j/̻43!"{( }[iMu7[K]LdbYSt%ؔuI>Wl}X=;h~-! (gSJ& "w( M@ $W?7jx "Z?j9 Z "}ȻJ~kyi>Tve:`& D>Ə{QgrLX׆z`mb`Wh[/<*gUROq'0 .~/ύ:h<`Q"k"&?>5A lóއ;1bb̆b ӟ脼=w?uTUa5СBw0GnmJBTMF:b>gqkpt4ârYu%\7_@@3!l}qd|bp"B)vYU((峀]q E1vJ .1|-4"-Mh27ӕMIaKHlgKģ 1 z?u\ẹ*UK:3RN玜^.q#G<gre2S~١ӈA^7+n-d I0sE!{rxO-lDVDXC>S9ѝM< Jᐄ H+kh}ԅqȁrBbbfuvip-ŅnR҂}폐SUS~SMܓv /W}'N!9ޝBIS;8*%|q}p$A罻Xe\Gw{^ 宊Y>y c}QIܨ6 $0Gzz ,¤ \S^8t#< Jᆫoi$"go-J瞮 \6jh`Ԉ9yc8~n}BV _rޙ33O79`kIi4fSK4 ߗH+?fAcXp󕶓j'Eg =`(aE\aØ,0~9}SO -k0Qb$Jw6w"Et_Vv` IRm*%@D PH$˕ed҅; &f JM,'Amfk級zҧNQ68Lnިq }$rrWqom̐A=^P*2b٨1} y\w/ep- x+LIMSOЪd}FEȬYR>Rİk]5ϗ=Es,+b!I*>aOxRobp0p歃 _{2x.O{KU.[S(U.G{}=%96%D;rg$|S4{]`P[TcC&1e ٺ>+ kfe+oWUsfc4C]Q͐yor(|xMhr: #Tkn&]"l \YtQ!Cf';C614+muwIHT @cPh Aɕm"r^N0_~QA,ķZg6X(fFmu!Ȑ^l?)To?NDHޟxm{pޑH'ix Y~a 2zS!sZ_h24n'vi@k- plF! u`WIeWk0dO:bZκGjVIKπ~Rioֽ2flL0ԯ3/.QTژwt7G~t;$4ª_J-'9fP#uK&e{~J݁ +@^j_z~!!<>"UAi2& p.>v-/(m{j2َ87L)NXE*NW4F !T͜`8u 6B :>/f7WSCϒ}G v3QD9. "KBrp0hc y-?xnK~Q&wՎ$vA! N")O>}o$l3g)pN_\+Ťdd0*&] :XiDX!fh *le ,&lw6I ezylyIN' &sSjwӨ0mWJor4"N/6PYG-vGdU "^lWM>\Ρm[: s;bKmZ[9Qu!nTL5_}M%WHcB&cgDDwST{Gr^LhX:SUlv'B֠7$A2K*Q0o ^DTs}wnH٫h -"mm9٥ Qs{]D{o2Z/@ Fp͊a3 lU?kiWb(%$r;c{|"ʷ_ T.Gj(>`})-G BW]l"e*w["UWG?P9D#,KM"$Zh BbP;b/yl7SszS[ɈMb2Y `l0,1p2s5# :ECpD)6OcK Dʚ#lPJNc&*A-t=J/&%y9GK%}͒W*V cWF%q okϫCd|‡QoT\5VeGm(/]/(jJ-'Ss1uPcÇ8s3\ -N&@uA|ߺ$<_KQi 5%ƺZMxuG88u6#2zK6J:"!*ޢuN6yBcKȹ찦: E]pYKLKa 5Sa'V62:CwY`q9m aRȔ&ej/q~_`3Վ#*%=nx 3#\ #`8G"gyLΖ3[@Rgol+a8 ŖGT)aψĪtC6$ d=XcN&^0 2*&+ >Yآ=Vm=QBCBf.{4ހ+{d'|"Px])U!S$䅵b}1)`vAtӂ*$fsޟIr:_) RVAC"R#kQK9 qJ6 c#l\ҳQa&t+ WQ(IeO, n[NAŐƃm8cN.6&G@;`r g*8R{Yeф/('p 5/Zd %+ˍ@O3 M#"R7l:xj]O\iD*I@9쒜5%yL4cs&j]pcODa~ AݴAh :hy,|ƅW"Lw7[џ^Z`.-p?Sq]b5jVs_CjҴ B aZ#{NsЩIuΕ,vVf[ܛ,^OϦ6̺\zn?S.:3XC zgʽVE>y O+Ǵz-YSq+ůS-*t 44E v(o܆}=u݈J(ҒĒPK tce_= uTPA[cxW^ZZ!۲Zɷ;/o:~~#J3MteGLDd4Ou$G(nb 57-;A?_Q UmDeIٳLQK`EH~lqҌSGј` j_6.SNj 1n)GEWY $I:-n?nu P6ltj>*=)_N̝]^fƖsSbh@R{]f#'k^c5ǝ 1F #b &ă>#a#M柁DPw&=C"R$yj时V?iG" T⸔Uټ^TSX}?`>􏈖~5O3X/TLsVs*dTS|~+q M~MKRA`.Ȱbe*g6D"rz0q@+ q y ((OJBU=Dݯ}OShKi pw^ NbίA~_7D(f)uXe.@_ĭ + Ώ>g܅ #9V-Ǔˮf5r_VI;~e}X$S~M0RC%G+dO؏\ }dWhrEY1T@͖cr]mQ#D>"61T]Ö ҿD`$偙!,$/opN\K*?G^4ԨÀC@W!^۬<Ӓ鮦;xl϶POCֿiq.=jԢ' nvu/%/uDEKȩ`;P[SΩ \fuMgUA dȗeOQq?ZwgiCQiuj c % 1Slm5`Y4zfH5(+H0֊H }xW(e=.,{Cq1S?d V-kTRWD7(vUW fe󲞃e4b?uV#nv+h4N.$8!? /$)Vi ߺMm)&xfڐD&Grw&=i5lfG{l@$X˵F0cJ3jH[nD; 6"HS(Q^g5GFl.n'u{{xCaf8.ulzGnUtڀ p:rm(ݗ>01qnHgX-!fU}צS7EkQO[iWڈYe?.? 8nC3[f)C l .xH[CT0.PF)#B߂@7Cɇ:l-csBSC3^6l%`F~˷\J ޫ?4Bgɧ+ۮbZvSQє &SM2 `@ͅv_J#yu֔dl;i!'ǯ:eS\ M~\PcKiMԿHŒcx"uW2){C 0ЩqQ:C7^䤃su&"@^Q]~8Tr,>"#9YXwc1lf.n9K0u;p|EKg6N4V?ߧktwi + _èb~\& e2Fۡ n`tUbRboel8FN #+8JRº6."z;L87mU aPm!V G_;n1vV ]Xh+])7kQe "U ʗ-ru5=&,VؤwbmX0<Po5p ៣M ZX)*I;AXs@묫I#rv n }y>3cXMKM=tb"9Sy.%@ | g: %y*u;y vIBE4ܯZV bzt*j@9y49-=.0,Nr6V2tuo/{нY,RK+ ^l>]zg\JfRH_ۥTVZzń eH!wu_JmLVhYKF1GjUG4CubY(ԡfFo:W\ ;6QR\0ISnΠOU#T}$Tٍq;rj (K14{qlcʐʤ7uM{9>:dVFW!3#Xc^"J. tJE2>:QH]rC$n/ǔ=A!1=>@H]gcu::[F6cgÒL#\Ʒo(p!WDl(R`(*U\{ ˺@-o6nmͫlY}^'ȏX׼ߐ5lCk3.NJ9QF13?ވYvax]vO܏ICAMɂCZ"Hܥ$-{}taEKZw` U0bd͍,(R1-kp!xQa9) s(Meq\@Bfsƌ@Focye9đt~Y`g\mظ ] R'7c(2f;“'I8+A6x2uY+zrTF6 ~{%lSn ~gtlvi.74/pG呿DJLU9k'}ZAP'G8njwѺШ iU ލC~tNѯF(Hx4VSBL<? oj }3e^6=EZ$񼛆Z5J$vM > D&A~2RVTX{*v][ǣ5;cdρ퐷~ez Fn<;;>8$QGd7fer]kI &,͋u*f?xY b|o+Wi( q/(= &a_J[(~9xWԉP?Qg 5%#Q2*n*=5Y".ugsmo[6:>~6Uy U߷_G#mӷq/ 5̰#]B371^q=WeE F1um"ƃhEbK۔DlΏ;RO>P~_?4J܆j/@-|(vh緁sAC8ckv>)RBim^CzK% ޴,C*p!L+p4ٲfzWoao[GHu(Z wUJ@8/_B;2S؛L44k1NT/{߂[E.tGrsCsL>QVJUtm-Ҹ X}2/PRG)i6v vK^66BWAf&uU&îv[XrfL ) }>(͊&4~ ABWcit6˒ky:뱣= +r] ݈qLmoG Y?x]L4}Dx1UJ'ɉ/lX4G`û>{J釕塬5"1yx9fJ& 1!}6wOHduװ}~[*؍Y?b8dwx$<!,)4Tq Ll4v}TzzMWekq(KLǦ|"t7[E'os%-nGX4_*~x(V:YYK3n**T.20k|wW.q 3"PAab aYC-8ѫip>QŦ?D3ohT̷ZF˹`3SN#%%4geZ.b޹}߰|٘YAt!OB@ sf=bjE>`U:$/mFGWR;7 rd!DL,{k1g)$3&iエTe p8g✤ ,V1eV,kR\Au{D,H7J ;*y q<`B`7Á+Fӻ0J6)&jPp rN>$_-UA:.XmZHr 0!홽j9a2a~'7^'fŵ+;*v85{;:õ5jC"1a^[ŸWJ5ٍD o]y%9uRE] eŠ w&_hYz ;wSyp7*@O'i_.m~6);06}>da (7F gwvq*0%9)_lag~ENA:ַ*(.ZpЮḛ>Ium$}C1LFsbr o1I'_tsiIzS捹֍Z(_le]7֝T0LFڢqY&cmKA1^aGtIx%m#¯aM3 {|WURõ*T:6 \qѩ*^OmݲCEJhY*A.!GP~!h`V^|ơ l\т1:6"3_-};ٖ}'Ǻx!G .5+{׏SIQ'e2n3e[&WoH)F\drP>qkr˽?;Gx^8sá=m砡pCbs bζi>B]TgGx橈Aۆ WxsOoH> og.PQ!B@>g\^5c9ԐFɑ~(|s2MQy?C^A _(_L"#۷FQ5 }ݭ,9!UՕTՇq2&: ð"m#vԤ`zzeWL!TᏬxt٠W r^rnW' fFےZ*ܮ 0%KH>ipޤ2x8!QiF,+\oA)O_ xVRafkiq6Rpp48|ɞN5~|Ns 7e\;"6D: Mnԛ;SMN#A%ܫCm[5KB ffd֌7$ʃ~%qbcO=;غNa>iFdĊXyn!">`½+' D,ꊻY!*F,:Nu>@# bTDYbOR^j+ʎgIcW k&47RsMzenhTg^JO2jސd!AP8f A{P)Z )0{j{oIIyl jkW v9_Gkm^w Ts{ bk Y@s% &0ċ&^BshsXVzԀ0~K?^Ƨ<׳ڵ};z6Hh|l;eRyљ9ymUZʝr(yȻ )"θPzd~q-33V~ Eȥ,+ 2(`t[ 2(TN`uOW3`G:q#% rðL?.Dg ɲ1x}FkT}Ud(S4\'OΧ4 b\ڊ(bRLAݑT]Ե{#8G_}0ShY0{CdKev<^!BD ꯃbew4SD&|~ʛD3Z~ly'_fFKNV+ܺkJ*n?Y^@{7rq$DTG`@M-4ĪYwwEc>$>G&3}[Hi!g ͉X W`7]t6Q"un9u_8qP5iXg--uH}fUQ my3q(FV^iQ餙 SKŝJ_HI *~JD 3]< +(7+ڋdGɜsYcF CË`BK#kYeG _na!KAqq)#OGK+tqT.{Eso>LG"PEEÞPKxvšp*\`eSȑ .4)a`qzsD%ȢܩMGɍKm "uдjهֳD1S{g)c'V`jYeh%b^Nh}FZĄQ/r)"PA{}%J&Y0mr^$=|x3 xXEw|CW >1 rhly ؗ?`mH "Ukc\"`EqAҠNE Bkn_iX&Y{D9PFjQ?:H'~h.Ӵn1( L/Hd5vP_]-/(EGw:2ZыMUT :nOBDZW-?մm̎XҮ0{sN+AB.^x,>"/naKac!#kxAQ# ,=cZ]UP4/So/ܷ[i͗<Ԟ`$V_ZE$o+%$qS 5VUxd{~Вm8 =fpҿu80ed'|%WF-HEA%v^-E^ ؉2˷ӱ|w"Q0|0jIDOPķq3?EVW%nǯw6όdHgeg#l . J]p&y@' m5Յ0j^ӯNU77[@h[`Ӷa8⮹ {ఎJOD.&$UH)s-򋙓ɪ% ]u5 fySS fClߚuo@\-̝4n_D'1ѾQ'sDIii#[T?z7va-eYy[],-ڋ[F5z4QnnCN(wxdeFtW! t3(XbRMte3h 9S<k\wVmfYpDǟp.2A 囒O&հ+b.l*6.zͳ@  L2d,/lRSjZQlkjE}&:ޛ hQ"UMGuqg+s!N:T!'FK%@yhQP5IS a3H6nj>~Admkp) ?3{!5M4a v4;9OeD-!8q%پa7ю..UddrTJbF|LyjnRRc Lzp{" wN,Sҿ q06Bn]rIхAiZSe֜Crxz 6w i1hׁ!2)%gL^Ǒ(|%/q /&h^0Jzu\i}3sR5p"9;>[z-G9h&sZyX0VC."ݽ ݨVnyX5Hry6~<Zk>ZB;& hjZѴ`5V?PPMt[8ɟRXo@LP UE6j9en}IRN3mpk-Hn|HSJ ,aQ9ʚ/n>Nvϝ1b+'e#י|w(Ӳk$-m.Zy=)H{=2?a ܪwN T?tW7A ,b`pذWG '}⧡Խ[HА?B v/;j"kίH+<_-.t-؅Idb@opBHV/@ D7 ХShP[<-[jl9E5ߟUvum Sn nBv<u,,d4׷1Ks~] _3*pҠ>&æ &8{RdܦW!,× z 1NA4 Auli{6D<}jJÈ}E6%Bx(]-'ԑ 0%ǷF^BgZ^7٧S(, 'z=^o&E<6`&2s1RS,D9jMD+ꠘ.S-PQ6?zohy Ȋ++=fDA.jh!p=J 8\Gx +K,%ZLwy$lS p'ib0#t!y)y~Sm609z|B8-@Qz)CQ~ؒT_=3/Cs_QYbAJ;F{&c2s`仿&1g`j0#~Nfi<`<:sI!^1Lm93mvYM`6wF\=ŶR%o#P؍@O&jig Ev Yœ9u b<+#CE Bx5yo iZLsi#P)6LKnQ圖r[Qxr]ZotY2nv\HI-D~PJ'ә#BX%6~yU GyL@y2y߭cZ|J:jܤr"u߉9C"Dp6q\c=Xp҄#_ة| Ts>&P1掔 \:icZg@,|MT4bT1XrlIɃ /‹Q޴4X{uT. 솅x%tEq Y:K?8?FL 36A D 4BYT iU<*V<Κ͏2 d$L 0a\/ yrVǬ'2J(tg/j$&:tq`Kƞ@^%IzK%t=y! WwFpi Ģev U)8Ȭ b@Y)k%D ĩjb1]R.>FuQ"C†fPB*[j@Hw"p ^/\ːz¨> ċ֗AQon|,'):SJT0t2HY$uT SP$ޏg As7 %#_U\bE-s>ZZ$DƐѯrORbxrΓFvX~ &m.7\bu +geiV=h%6s,)\p{wʙ^Eϱ˻U8Vc8|v- )ڊtn NB뱿lyDWFnG ˊs'vȞuS#yC9 LQ W}d؆iO|q=Bw2YtT T3KAg _o'Qj UDԠ%#W0[ծ|&jƠ$L.,9B*,?!9熖7gd\Or;ZQfQ ;Kl,mw˳AGHbg*EWFF V}ԱdI 02F+tP|/yAoe;?b-Vun[9ES1™%6{ט,=i{l, O=exW193,Uyz&T/\Nv#E.nNMB{:PېilHo6#chVn)E \Ț")|YdCus*/r!\n|ZgF^!k/9 Nn^E펳~n(6@$=v#`-Do#'W /<&lL1nkON *=hKLtwn@9o\*>9by\?KK uw.wjc0}o2>Ģ18Sɢt1#PB^+7 :.AD۲6Q^!"XeV ,Gi( WBmי6LU"Д5lСgTv`0.ZO\y ʬ ?n+P-1-Zټ`@{A*gAc&K[ rmӃ쌸c8`s#(x&8QdǀFev*.agpj^?@iD'j̮0ׄdj+L`-j푙7*+)$ZԿ*II 3 dءLӟ6xKRjfd?ф-VKDW-XW&&tf=x"'` P\PKRte=%lU ȌEon1p>^ݳ6UV"J(`'p.(j6 }qjs7Fm+έ^>NW_4ѿh+_?b -_Lӊ4!ADՆc{1E@)JY=A(PHKgObwyl=Ϲ Aϒ:y?EN G}NxaZ]ݚ'y\Z1AarŹ^ѝt8:[kV:+'py/MksʏfBTTr' RϬ_ 8I.@^Lw7SZ]G_byȵbBô*((4* !Qi{ZG?jIC.GPK 1R \nCx4^V/.?4`vۇ`4 [R* 5B2T'5C}K'g.|v/TkU huzZ&ĽzDZFtl~[͇4M1SL隧G7#ۭ50Mz(, S` BT~Br-McGn$NRߥ~}wK@o)YJO:;f$%MuxKf͍g^ NMo| z;o5W/CZ<seM|NpC륁Y)H [?R>7g|) 3a 9"GSfͷiEVMW\r#\67H3؞g,cƞŚM>y*Sǚ*1v` ,a7i`"`f1weĸ?h=!vbv`h(L?#U['!m?_`CfXY7#JאF*dWUZmc7\ .wMduҴ]6^ckTwB lٜr%*sھ]ܶQ$[+k5,ؾOGYR}zͤOld(PUIkv-꤈GJ(7D?\o\. )"Hmwh J:#}\˘3]g$Hǎ`Swǽ (/#bnj[c%G:NuI}s$jKLd48ᮺRb" kps\^U^`;t~#XiNSRi+dwŕ}Z.nvMPPv+'t|KEA䥧CEK짠U1Vn7 @x/ :Z>ڧKM`N0;G;M;7LG䪜\s'# UW!92m"$M,l MEXs}qdR|3LC.Ʋ য়۬DnHztέYM p5;X$Ew~>#&c7#U_VR4V^$67St|F*zug,OyvL^ ٵ>"9#yޖ0/Py \l!7!Edž AǨ'q8i~ G^4"&>e6 :p5|K.x%$S*i/1˴ 2\xϪhDĭLM?OpKnF4c `9v5Bk&mUV;P9?a81C)jǡٸ&o(#wj]:u1zh WA{ n$;Wۉm.O_y$̻AM+]2Jタk 1 TYiDnT#rR] C`TƀһGSiiTL``%eߕXX\{4_)VVuK/9ŏjC"X%mYNuiS|,Q?(`m:Y1[I&C Y~`ɿHa U /9Ld70Us5s[ˏ٤H6ѻ'.}8$FP#)ZbN,bg,I-4F\d$sJ!&O9>N!?{@Pq^=#ybz^!-PRJU.f BXZ k=c2# Ә"j΀&Gy//d1G@au|+WMnʷ^c,Ә'O'+P!ZJ>F"idJNˆ(w =c<Z*L9gkLM۳0VK;+BKN(|@m '8PZp&r3by= 605~>"c$K^3]bHzNi ]W)L~կ ]B.B%<.rF{άzA )8?L| ?v*-jƒ`P),?p=C=ըuR V ֩VChcI&\Ba4OQJ4+7NF7&l/Bǃf} 'z.]Gp5,Ly@oyh*b_Bf[Cc[H@Y&K-}3z^RY;lpOEo?Y-ȒY0u&АvQNi h$ӆ085 >;#Qd3p!.6k$sptRS`]<1:Ԯs;̡8<E#YHhrux(~]AvUX,tŻ;_Bxg!7Tԋne$g9mi>5q{.E0ۂ(*b)̒ `U :'/LLnȣviP8 mNI*+ӽ[̚Bn&seRQq\WU$ }2TZ0Wq}{L _H{ݷᬧ w?C=:Td(?2^?ƽ8:d<Üh[S:ʉqHIhBPսֽR39JNU7&WH{e=24cBnRjۉ,YáV)+{_ɻ$oӨ/q8ogg~8(9TEѪ],#24Ҡv 4 ~= N6tܝli>7QjHLUXٔ!|;q 0{OsE%AfMc+vݐL 5hLdA4/Ns'9(W̾Mga-_E2 uhBx?SM* NէF9vV~K.Y HS*(KKEBBRv@P-KGV 2=rAd{EDs&ːJBx+ߛ_0=(os@?:]LlF]&=%x1kux-ix_JoI JC=S>PdJLj(1Zm]>U[bC -R73EͿCHCx S +D3Ò٢e'{ըWgrXg8kؤŹ|q kKʄ1Nxr/,`>:RPGuYO!kCԫwNd02K J 8pvUޡ76`fl$]TKOJuQT2%:{.7BRԹy*+3p0n4LMTN_<4o7>Q/-mDA2cEڿ֒ޯC7fUQMR׈Ζ>6ba$ͯ߂()Z¬{?vhv_2Q䟪w\K:p,u _7o9q: 5j\ufe ` Hq&NLQ?^-EhѡDzɅwuf93LjvRmDI V춎 muoR6cs=Oq.dƨ^PžY2УLxflVITG8r &`Thܖ:2xh5(0^֎84lW%;3Nh][vx.M0 A~K|W48E?4X䗿ڧi6: f}Dպ/SlՂ~"J! ZEˈ~_▉>)gq0xtYDU&rUWN5V‘Ŝw-ˆM]*]Y9ApVbW^qm"5ojDpF=d;4 ga{'xZ BKA+Һ4,}gIٖtLvE^f&ccOPr ŵB<ieMV+ 3؀zRUbH[<,7MÖ*B8>񔖊&Tߩ˕:T V[W1wt$gSiR]V.9/㟳Nq W$( p3L?NXAsƜzgSͽ؄I^uصOepKgGx@],VykXtRDvd-s.%O4Aob%uNpD.[p{iB|;뺹eͣu  OLSjL6VOG\bV9GG-KP}Bȫ^@w_cmb?.&qMHa" ?? 'FHD9W$$`{zϚ<^ iu| 7xw "/4ei!G)Y\,Di^s{+$.8g O|aIR_^ey5 TwiF X2i Vnv3{ٚFQ;$Ový8l0u4h6wtcISHbrL]زo}p ،ٍKdtcwZ2d P>pJo_1·!ZBO[<ɰD kFd(#y&+9 ; ,,FDh$x1;S~ +l5uLNFBu. @VwPlʢlͶ;OI`'xBa Tl=J5OMHCS cX)&(zJ*Hc<"`Z%ޟ`U!كR?NI%Y)jC 0ݣR1NV/BŷӰtWJ"TE-Үn!.scD(;C# xcq:(c:?m_ β* /c> 1?1WߐW^ůQZd0!;Fz^d*^;Z<|԰IM%y Гb D6}QLMS9eA级*Sh`AwFmE+DZ%j \Ym6}N$DFJi>7s;MxU‹j]ژٌ[r3q 4NP>MDC`;ZG[ C΀Ͷ~xԩlh~ o'B:29ØI) {aN8n$pef{(Dw6v)ͯ-ݠ[rRY.PuW7i&Ov *FWOCwW},ܝ tHcȊii9ʡNA(a}BI! ^m `)9Zwϙ{tbDʣ] (;VseXQ˃Ϛ9ތK//InWhܨw}^_hq~xdz6dSsSzV?IUfH@o|lxtNSK~z:+5P H)X|p."+ZSs#nz0}gX_P B^ch[`͘7Ypo8r{/QP*PKU lhp"YbF*Q%Hj-W($g17#vx|\}H=1H¸qagB:v&:E !w@[#~0Q) SYݡjgK]G>. (-H;` Gyz]RX=JX$qw,xtq]9؏h'I&oz<ˊ!|Gr%7n>ԳbG|\$%"ZEmqOzcYuc03*Ktstv# R3( ᷌䌴ae$jYQNPu$2 Sc jqnrviPiW5Zp|6y5kn}bfΫEQ.b+\`o_*q< G +E&ɫ{qWv ;ʽ<wR9%r5 P#|EeY<$Q_F2=)2s:8`( ^,9nښr%v!F#xp{ Jgw]LԻBݸf`莰Ŭk鋒`jrNe][Og-XxhujȻk{'?%ݖzS`QjG- q(-ی:zUp,<| JMMliҽ fgXKCzfnT*3n'8@Q ql\f]ܭӬ^q{4LHL@ ]-.Q.m%]`OZj-j(($GcER DS J !\T=cKBZA@ 2KdAY yii*[~FREVQ۪W2)wcSK 43EQP;֎mr]Wﯩ,y' c!^t)|NK?JY%!thyG/m5u/Qiz #_nJNG]b~^W*쀨1ٟaߓ } 놭Q9|p;= n5Fa%*X<e(lRdc#bXELx Gӄcv xpGl]%DNH2ʣ3=<\?o1Tl095{ Hoܑ8FCryJuJ{a,at^#zlrqmc Ȑ B1Nu,IOC_, ^j>q5Za >8/VK7'2pc-qAdC${$XKt>Ƭ'fJ\N$q1=H2~38*7gFUvUŎU%ϑ=:bc_lV0AU?9r:$,C@޷&En}fWA}ΡvL $L Dž˱mTk6f!tgm-c.CݝM2DM;9)(#(]}MۖaQcR?p"Z{0ԅ!X8Knh$rTMvZEcuTqSBQu9Du3"d-w" ٱĐ.[F%Jڊ"L0f0ȞT.AkʭW~mQ[[*tl$ M nnG+X D͘GvddyJT%Et,cy<4 T)a-Vp7X%nFQVUEO\2͢T̓os*:r?rֻ$N\>He}e/?yR -geH֭ jb>Q%A6 n*Sue\뵽hD7ꀣ~v[R^ltzC]Sr"eG%j)LFV 2+k*=䷠LFȟiA ˔?;ȜcCӧ*L4'9 RWr@l*K i(~.Rnj3ܒq+\4Rp."`C.l6I_BZyD9ޫI$4m_-b$!=vr`v[#rǔA[3;Ӛ]*?DTgs[W|d׏|rrl!{' k{9)8̲C!y?e-U!IlbfU~t}Nuߊڰ K~ƌwW+z1ģ%;X=b-!dW 2ć>‹Yu|G ETe d̍0N=]iJ#, 9t$aU0q/zEWZd[; <`1öyݳ754 v =) Є3DM?8E )nMI 'Ef;QDSLT3Ś[$J"rAZc~^`AR(٣:{*3K8^eb%AF , ݕ}|M6: gYqFT$f$vSYh lr*ZquctFd֝Zi 4YA`zR|#(]p`1L쓫78q@v `XS~8sw˃@'2NQjz`! θ(]b\9߂]RWvxB3kWh ۽[?biEq|'|-*dYF+=v2K8zۯlxHXY& JZv_&*:}67-QIy 򾨭woMKVd5oӥL2QR`xC<8t*AM1aw`lHL}5F9!dl9ݩm}E?%ʭ_H%N ̠BGrHD{  `]O 9D#8ܦh'eE D=+ IY oc|URӣ[[)[ҝ>sx`Jy- 7VVhOU.`W$7͋KQO}2mv~"6QbyfN氣=@4mk$,s@ d^^207B_o A+7R(9(J pF%+zi BZ\ ;Vk@,دQ'?9l'W&⑜O eqqsc w\1{*:hz@OiS'%/,;@ Z%"v(Pk/oEZ[qk$J;'/UB}$ul.XsAt++KL'T c2]U@\QDD>Ȫz?B:lL >oreyw'mWCF|Gacўzx$ s-묮ʂ+dS*ǁ5t=eqIq=c} /nhu@V>Uk?9Ɍх8uQɩ)s19Y1mOE!A&+ czBEōoGWݟc+a15Z84O5X-} dU;)4}!>|?yyGtm/[F42ȋ9cv΁u @Y+UWn?0&i"'p !>.fj{-dzxöb省 I\@Sa3u4Ik5VwmIDى&7ze^J곏ɀd9nRܝ㭙ij(->f6$#3׀\IVPWy(>JT_u3Av ZuuƧ*EcЪZ;rH]wX2Z?S(H9`d=hRԜG\vcS!%Ͷbo&VEGqxMDŎ{:(a??ng$= o t&]Jw["j!HMrMi=P[ބ& EUA%6蹇DP\u‹;=w*Dzg-&z㍺sVvQA wj"@<[8"#R1B-uthTr;˫^Aփ:XkR477%3w!/M2?8+ r "ZϭGP9ЩPpA^Aexybfez56ar0+A.vλ_gNI ` xLC FsT{{Zd]ΧF-eT/!Lp ӌd“:L@DK ʹrSx•Cx vZ^`94' ; fnr|/#!VFbAO'Rşa({,e#ҏT#:&TcCoijA\$c)wa7Q C?+[їm*wP1B:ivQ 5t.:aP+G. r"+li%lc\qbKe $HjVOG˒&Vc^z몺4 ʺ 4(31G{p48;рDx 0{:#Œ.d_ur=;/.,lW?mӸǁJ @$1WHsJk]$aҦ'[^hn@cJA]Ϭ |[I; nK4?cjߧK4 D.7 pt"RfoN{3@ efO%pkMlsQUGȞ< ޠpUWĊCu.\Ҫi㣭.rJ4ÿf:>>C5ʄ-p[xW_Bje`_ /_Y]`zM)fl??5 9ģKRh.3>i $/(tjG(EmUF s!lȋJ"|qiPx7q0*ۀRNnD܅wiżn8`늏mP.#DǸ>WwYlz'r`&4Hֳ۩8+s Ko,>SA!@!qQ]ZXp!q 2#K\?kĩЗ~Sh >۸g/Ei|WԕZ'E9:)ǐV( <]1<ۈppo*c >E&TL8A14|d{FFx_bS5K82AjIr׺ўc@l;J.0U@,R)\L^ f?aj.5,8C[UВ_WFhþ\Luż7M)^(DsT2EN<}A#fНEF$\ð5&&sd)elYե.FQPsp/8TnKS;(ӷA<)z,dvzu/ dbўks wc#OAE1u9z _#~IyNX5!TֵB#Jʻ^fQ xS$DžW8u~x꠶C3{c]^Ο߷:ȁd6)ψ|o^gh=iTOQoZu"~=mikS&t= Lb yT@>F[tRa1,|e2}Cf~d|ص~^l3+<WY4&'/!2JEMB~ H<5]=\Nu9hW]56,?wIC.n0!z8R\6}þqR ?V~RjS.YwťҺ~tۚ98|:6%$USP p˓b^$X|f#+hR9 kdXPQӪp sc0&8r9y@133p =fC&3L|ȣMZ&Rg,ԥoZW?KtOv e=6uЁvS'LEiUc!T~QsVE7jyZ{h5OCNO>?zՠ!q+|b.5$ڨ^{&o+#^ᎹVqJ %}P98j\t $Ux_zֽw1LngUy &$ LmHe" #ZKN&'DpDt-DJ'\[V:x_F90,֌g쵣|lP)? ;Ȇ@Py  ̞[ kZ\)Y`Ҡ6YRw<ǎ(w@Ҿ1/ >"P/H@xnUN؛hJk^J'yR8#hAX ƴvܪ"@8@jgЕr |v 8pϸG$Hpȭg% Ȃgk4o+ԏk ١ЅǢwdj+ T{{+%w?:ر&Ă=C $XK|%$߫ 42 HBys̄ww`v~HgHj>6G`jәtB,!7šZâ/Ɩ&?t_Eݎo"oyP&aT!nrv捋e2vD(h?`X(7z Dkp;'%Lm)\@0IN^bX^J\(ӏ%M-z,K-.' =Sc(w]߀V!md8 `lF2y@XMwT *WyqΧd B 8&ν 7HDGGv? V =T!fUvU;^leOm3q~MY)z4xD0t]gr&7`PTZ0=0p'P j7KH0l.(>Wragʂ7ҷt% 1&Dj|'7l\;܍ U R݇J*#ܴioƎ蝀GkA8sT_|[6 `bN7\Q,+D{_AU bc|t|@RI˓6X^y,|q>C](pڵp)=aRAZ<fϫD)rHgcƁE|+hB?D I ?sc,MIK7 7R{c%;᝺͡n&ɒ+ n+Lc#S09߾BՈ#$ T1ƜZi7*Yrbܛug/H~ M ޮzB6Xu%JB֥ɨ5Sp 3MDtJA#?8Ā0e6F5]a'Y:%BX]l}W6|ٴQzC> .'#C(ƭ~|"[_ɿ1ېEG4Om/dW_U!xcňrC0 oCK\*c-MkI y$!_8=g@}MY#r Z#&f<O;Cmݮ}GRܡqѳ/B`4ϔ.+W_ P:MIuyuE:!Tqq%gYSVU7533-ff5ycR)q bK迁82bԁ=_oԏΆy["'ނiR_Ln X,(xPl}9/83:mӰ M_0FVWT|`zˤs qP״WƁk2bf>=QlCD&"6C ?{fUCp:|r˟(ytCɂl1ID}v6)lGH6O`"l}*BEJN'7_ܠ]D?@:FZ1;jgC(}pAR1@k֗ m$ܠUxc+yl#2*$J{'J6M W?HS#Cai=4jQ(I{洖 q}tIӾ*CW;~ VYθYݾ0UKiySci%R,!/rEK?iyH`!r?qYjJwDs'}hzߔvERAV&dfC5U+u/^ybb.`&C?!"n^BAӃ!$>1vYFtBB$[K| gީyS&nOWA-?޻_ AJ! Cz3"mXR02QUJ%x eFhDOtw>qуPF)qM'3p'=u؀%ϛaR$l3!An-BiB&u7м +vyb0VW<*D?<};k,Z(NId <4yҼ;݀hz\X.H 7͑j^&.Vtԓ.T#,<&rK&%Cm0al}ǀG8HB_G$ u Eᖻ03q'ȏvvJe~`{u)6ox-X. 0B-s 'kY?|Z=z,o<{t>|JQ|q;$\%7\3|n>cY 4\ɷܻW Jq EPIO8噑NhJRA=% ]1+ܣwOyxW2/}_ ~CȂSDEMXߐ?,Dޮd6&Kԧ/JS u7w+amRSZm~|" G+9IPt0O̍Z 7Q}֊ %x 8V{Z!q;+eP`Rt%*tfP1aj@DxKܝ|U}oZdC)+A)$VC6i2ʮ#-w"ӝv܉ɤϣ_&[C[;GTS qSQC*`yڜDj+zãf2ݓ[q8}R%VNHa_ h8 _Uʭڎ6_'|VD*Q>c-W,:qCkB]sdTCqXU"+co_fI `,BIJzjIǫ9db76mpWau ]L/x/JUq˟D)i[Tq/'|jĸ/rkbJ':6I|dkHD$DAʷ^z`*OY"DY6jN!aلNQn7=L7Dؑwě[Ƭmp)-;(u/@Jv_TnmSֶӕ D/!L7FxP9O895R2<3q9x2jN kh0%Rz IU,B#o٩im-I3#dF*40™&j`ē"5\\LD`ZEO; | 3I/{Q'A+;ʯ?.|)l SBGj$0zS%(0r,!b ~N0" ve⩥VqZ~?K!Xe wQ+k/ųzkBPl+4c`q.v~4Dr#uL`sM 9:^^]`lgpYڦJso9Cٽ(po.@I4͏Բ@˱G5@WPkz~XQǺS{*}W0UcjZ#T?!3 R|ݥWb:a9/B5%YiUލԢYgyz@&mau9IcC+ooqPk %˻zԈ^H<`pqD̓OV!/elD3dJ7G@.ΞJ f{@-ë(a9<7ew{owkl߆]ȭgؾ.6xcD^00g -@qKYܲrI9}-0$1porx=lrm.҈Q蓾8F)(Bg*k\4@/8R.fwZ@5Ǎ7:M@5y~kuF/^ђ}Q"E-bA1{V&3Jԕw4wQK- ?ς]p8:Z5l&ml⎗h{=W ɉK?35mn_u`Ab4@J}փ}\ p7.gF VhV΢5Ff\*Sٚ8usH"Mrkܖf?ΠFS F=e#TU`4"l*e[!t 8Ȋ䱥<BvƒѾ;Av0R'#[ӅwNY o*KBW+t`"X큥{ G?wPy e6wtwiP~=8T6$ YK)I3KgIiGW{aQ1i-cuW}-VRj% dxj%ѓETxC~rʑ,{09or/ E )X-DtFh|1EތȺ=/cѽȁ ;^RTOӓ8J L(SrB]!<`L mh A|k3#CS;_̭嵨ś"C={Sjn}w*go#`)^&K҆$nW\(YRcEtGk›iVbӣ++~gL^niDHvlXN {Z *F1.Su(0؍S7ZC6d} ?-rj0")qyA7qoaёivOh\&g#T:8>&Hdre̼xTY[ F)'1xqZr@1:ʻ ?aV) [%e%L*\"V!-oʬ}ey4_]#Ԃoc!_4Y_UəL,63[Re./' >,KSefQbD_ej'&崕}R-y5~b6@9{Ioyk+\Ƀ|\Ag[<egNYvd4 y]K$!س | Γ+JT扏u9 s #2t $)lv.]e$&3SvÇ8 ]<5.ittMt2ZK%w%2l؍En ܄w-1S`Sk_gbЋ+%rzخZ <7RNZ$9KreXf/(iboŸ=<NfKGj4AeڼNm/K7ՋzՆE?ޓDICj"E ~D e&1Ǘlt2ezW0ylD `I+]P/9'|"n .[UK#?Z 17. eoXSU^\}@QgX%o˦bbA:*+xAV5l\঳Z + {rs vݦ?ִ씯 EIlE+%W~z{k0pSkF$Xzh|"w F~2y\ 甬WoQ|O껇~Ͻ󁹵"?R&kOÛhN82qs8_[0l>?7 \5HC i,*&+ +5ޘ#8%{e4}08gP|JK[^t`v+\^T1j.BW:: ."~K)/KAhq%JCH _e?mˁjL˕HN!wTZaGQ]z a/UT/AlBhE!A.@>8/S<8ƣ ]CYݽ+ M; G]%ۺȺͦ\lEf<)Rj8 L*τ .H OR<َlipܞrqN/dWt7/b֒5,+\hsa,4 a={KQJc^A~E,Lt@ lTI[/}[laYgˎZƫ3>]7LHЭbcmi_@rƃ^wo]kD_$pG [B(^k7|UvsS1'֮Uw`&z|`q95聶v9_#ވK:Ӷ#h,Pƕ\1 '0-"M\D-}+d1 }MlbaXRS!$_U4Ɔ tތȖ\65wI( ;Z[G{+¡24_Uyђt9ыUY1iǡ`QTP)D ݭ)J5SB4C@bi>/iPe%#⌌+\UڇRL[y/l@AZu&:߽ZZ< O`qL M]uS%^61s>C`)Nf{#, o,ld8S~-[B 犤Tǖ{LZ*B%J R\#Ⴈxq7k0]?`7Z35WIk;+a-u1nEikV L7ʐ9:jg M>ml7NnMӋ 7O:2ޭI{m$#,σFp|tv- !6#kN>L؅.!u>s9^vAYU&!'N?M0^Im.q)N!"c~Q*wJ9/5@lQ囊 ̐f|;;]fYQ8 cg=gL?2'39"g57=%:|5Kd9vfQԠl~4=+R <ѧ:A6~m6Xi8JMXiQXMS^%8SB-%^|vUL<%=KzOcghƲ@j ITf\(pF`Ӆ2]7a :(JgdLG~TΡBtJdʶIxʖ%򞰦aW~Kbs4)'^t6D\Ä'4}\&`!ϔ3Po٬c:<[!NvS9%4o&&+0E`ɪZn :ÖkWBWjfz~\Ӳt5=n@ˎc-jS|;*`EF"t!A^&1*qDy;i}qFCV_!Tؐ`щ.jqb:Ðm6Ș.^#oiJjBtaCwuܴ/(-1 TL+JW:AEZr܈bm*jb@D,GEZs@`0W |.e^r/d[O]"asG aCWB/ZQx&N$)ḎdbS[ɢ]Z\aUTHՇB%ߞe*0^On8 W%\itFnh:d7k㾧tU (UD$Z QÇX1z@wL;+0 eIigm҂,.Sk7)p5>2[X@l,tdл::uS lOQbL# hxv̳`:5oڨoOe}AYFUV o'-#&hR0bS֌w_Z>;V/UViYJϾbC6GXeBr)MY=ѡ D1 @ ~UR*EwF,Eu(I&@@Qu ֳia5ǢSj:pc?lQdKoJ~,U1  ]΁=ƟW $}_NK$JPfm6.;r8FOCg ona1 }EVnDvhIY¡=VZLKۅS\v?>7 ND3_D 7-]B bB@D:{?B8WÕ*8~}M7j q;[M؉JV3#NNtG$y,HA].g4&P%rƟr. H`"C iWR \gm= ҙ47[6-gWG(F]V|ࡲbޢ>8kSkTҾN?[:uT^ϠU(-ԕBU & ,W%+ӹ fja cl 4n{TAp%a8`ZhcБ\ܭW~Xh06\EM:ڬ-Lm q@w 15 4(´y/ aR5 XСӀX4D3".'h<.fO }9P>j14v} rdk#8uh d5R? x]Ӑ['TD~%^vT ÈƜf"H-~y&rYw.B`L8yUK$` я2c:6ӴG%]A?.DAԫ6,pK䋡NΚqP~5A{EDo':81,}7iХOSIo(u!Mx]R5ĕ`AݮT-A!_3{̉٢vú qv7g[ jRR{;PU?PL'eG-3d'Oyw#XzYk;T׈ /䱱VVKIPJ1;&7e6VDg{3:Wr:uV@9ي+-1Y6Kf%qEE3gU޷g/TW9oǺ8vY* %vة9']AV+f&Zě!,MZMDk:M.od qQ'b5@^{u&o!;~nQ{]c3}ۻTDGMRD-| $41,Z)$bPD}J RcJ4Ӿ89 qAR_ҪrpOlz5cǠ:$N"^ǢhcNy:]^^^ ] [vQnZmÔj'eK[ йɝVEMAH/-]ǰݻSO9wɎ8D/z%VZ|M\3q4 jPofTK!!H0a%*fa )orkvtH7Bp*;gnۗRMAr UsOEƆF`+ӧ([YUAuO#`<Lp4 1Q2'fnrkNpQ\7m{ Ct!e|0w<ۆ_ k|>7jS{꟣ Fܣ1zFF1c~`hs0(n`LB=Τ#+ & `ZWV!1 Mq7mfy/Zh^gی+5*F~;o z t[pt Yx+0% .lq={@S1Ml(?ltlܢW.KE'T<;IR\&vZA Af1 F%Ҙ2On§)A[KCG&leRFaL`Ѧ@:7N,f3)&k.֕2U%mx8UG܌җ\]awaEkZ߅OMRWKFJP7)t'b$RnL!{}!vACmiEhhE'-C#^ ^Uɑg7`I@/dG_$s;pyah ZfɁE/X?]lB* M*I=mP4 !#Ħ ~jA&%J_EF;D6\/I%Y o:H0ܪ~ˣ[ RiMx;4ͱAbPJIߍt17DRx= . ]TX"OhKF3WQ ӂ܍F<׉Bk/)x`Awm B"QЯjUײqm|(x]ݖ}?sDq;q(>p *ש۪$ll4+QUڂP=tWBSH;zYoщAO,Y<%JAf]s1v)2# $Ɛ7*i&Q !}ike=tG,i;Ik)D-P,B܁|'ipW?e|j.!J?~K}^08:pc(TX᪕*Bkbyˡ2#=C862e01ot]CFرVHSn _IJ/RB&xxh2ࡶ3OaVbPEiFoϋ>U\E7kysvQ6%^B|84zzeWEy@TyVJ;|薈 94z< |s]< ɧძ\V_E0x,-Mt#87 w|FyݗZP]GJ(cX['S2IX# )GF`i(l+]xt)FDn䙻7iL ȵw.EHZցI4 6[t4p9[8=s~8(/4Lu8p]&@k Dw)/J (%lcyhEsm\a"^FU nCbu4#MND"Ac4?cvָsI/e#B_D9=7Py^ QAcW('{ExzLAs)D HXoCL^{d]'Ro@1#,Yv/ǝ6C˲]]_v4pc.qix#( f?KY[thU+I.rͥ6F-g.=WwTN39T'}XT-e Ą sЇ*D[\E9:-f&)3Fō&ĽۻaŰĺdqbz41ܰ>Uz*jrY,YZ#Z h!tۛ 2gMZ/RlNWV.ܨfAe;_n6ZZZ͙[MgYR)ڰM,:pqЉI t Ns2;_*-K׵46WwOBVN9mه]Nc rkDOE67HZ"aWN ޭ6PuNo!YN^ =/"YN؃B|%m5#w*Aa'jHH㋼. 7eCuf"b$1Qg[s*-E $xg28mRַd&}A=j;Mk{~"0J~O2k@<\$Rc(9C{M-L} &Κ+ODUm.Bɿƒh cES Ǔ禣BFl`w=6dj 2NѨ9axwh%LUK^ &?foL`i?B﵁5hhҊXTcN{nZo ϱri *k<&Jzމؓ#@db'=/?TTB__UӑUCSI"S S-l~^ljo/yOhQH4tw]ٕs{;`lA5P Zfj<-a h\tH'%eDzIA G",(uyczzsDqCKǯ^aX K;; nᇈ3_;!ބ$/#qY=w[7E-t!yy1UAͯ6uXa>ɒaǯ{!K`TMߔwݶWQ:x#xا4}Znou떙e2snJy1 U_Q!̀F }5Y!Sס^/x5`meUEݡ4%?A5#ink5߆y}%icKk 8zA{LkzLGxB,K€' #.5M[ ,N7ǟ|H:+gZ=={NtlPm N E>_- B^M@u8 ]TK1iXV+ KQ\|H&>L4?="w r|om<adnTw|]8x!%R뎹mzP3NXg|vRh )zRh[/Z$}=m]Z1yj,%W#iܭ^/L΂:DO\yWKq1Hh#ҋטˈko1,ݝ\7řn)oX3;dH0@@׸ ^7S:E>B])GDO/kv- a&]S~/R)Bepa-o.²>O>:.81En(rR&wƔe*4FixC>wLCLQlzkMGܾm'0q8lC%M ߟU\ȪORQbtQ@K-*J J*'{[gһh{T ߬Zpz~8(|7k!t(BP)&}FX tr>UDHڽ.֠8z<|٭<)qcjd\"8,}5P8  @39l*-NVųn&r/̋c]`-VA#?dvvF4|=xr:EاZ 7/ KZe{tkx(֛[nP& !_cӏ20i^ 鈻%г(L eF5+?plgL0E.ⲛ]}ȿ#m \vmex d΃_._t>"e=̀Z g#O94oqW]aw*-iHv|Vuv]IUK 6sp8痋9TL)8=bhQ} A$O#h3V N-aFG3مϕ6%a_N#%^g1Q#-e\̍ z+5<_zA=a8F,,&̩+"'"W|%>?Np$o'?'N^NrGi2ƶø479>Rq^$ rvDЗ&VU@71tjbl9' $[ΆbrYF C7$6c ȫRUO3 Rdc_D1nΘhYψϨIԮY.;V rrL;2( ifV9 {e$!U(f8:)SsA;D c26Mkdfl>'ءwsRU\!8IAI!I""AYEa~|>S~ÛKy=E~aS}iZY.zC\Ug:lrdլw@`9%1 i0(+Z]P1=RcLqF&=rXr GtG`2&'3[; 9eк HY;;4*'4e?kmh}FY 8n\y ^B Ɓ(P}/`Of7jj ])Vn+:#ۘ:xqyGE);""Tdc]nG{a&:}^TTdFciC8hN1tu%!Kvme7d"wb##bY])5D!3VZt|N>I ^(u>=nѻt ?h?ҿ-Po@?̓}ࠖ}EWvs;|mJ UVk}}P7^ee xTBu#^b NS&銮QIXd2>i9$`u6d>= 3u4G; -5W) Npa(}FhBfEI(S:}} mq . }J7-HYhcqRʢpA8ŅPTĉ Ym"`SZ RW}_خW^_TynSқ v'IG|).3Ѐse"_)E|S!`} KyN^,-O crw7;]h52'?s0L*EŐF?g:vlS#Bx$HA@pKop@? wY*m-QV!@] _s:#P7!71:א\AF_(WC"U7q|4HGܴ:}0gX8-. 1 * f]Z=˞3hh<{Zx(2b E^?4($ \| +꟒.²)GVKqEg38;o出Zn!`HKe :r$ {Sk|9b7JPWUo7tbp/kTd%&E(}l$ 䈟LԥC h1"}qӹ\9b.N7Z!**\nWڄ/Uwkȣd|J-eT2||̧e'RXwbonwKP6>)Lt׏Ί_"*}$f̾U b@XlCI:-~>1p@FvmCoc`].SIY@Fk~MN9BeYTZF{@lkeu@ʤO(5O!P Wx O`BȐ#+Q?_Ph W`yPݺhq|<V3ʍfC{'hV_ukZa~quQ\/zb0̗(:{2h_zhĐeidzgXٵgs%Е3 2VfǍw*f#cڽt3 /CBج@C a5>*5Q 3|Wx, TiIieyxV D͈Oǵ:Q^jTvwl6S2eti&HFݾh*S`H FTsD S"GDc&0w_6`$ramU`YpzΔD[ql2HP7NO2.=hZH4Қ[ DAb!bjFܯ6xӷJ)!4e;b^kv҃X‚r*©UN!vimfgj5W{j'23ϟfgZ6)1nF%vdAj!:dzyזּ9 I ?= xlMt;,zB]'Yo(Ĺ'c8g``*zׄ;bJdbidDX9͙;nh|#rg;զ.`.`#W8ڑI׿p"!N\6[|X=!?S1] Bxڝ|AӐq&w7Dk عE6jpEHw.uc/'e`Ad*C?H qIj `=΅ vA ^ņycӃ.x VuÇmQeP>('dFJ3.pѓϟi#DeV߯ ]1apT!:q=6ǤVw;oI8-灃/WK@W)q p\7;z)PJB>6߾*]{-U| yS <ˑ ^ƺzo1k|kvfO Jac~VPn6Ut_ Fqr#O蚺{ZƳi8վ/}>j|` zc+480 廾rƢj kb{v>L8'|h EqoS?ɓ\6^rD~ḧB>hnfkbn? tMnFDDLٮ٧-}Cdz,-3PB^i})t^qpBMה,H'v og$|=jsP_;>Lsd; 7ļS 4u;HqtL6 @kb8s^%al{V2M?_)sR We7e*~%IUTOUP>,eG5i=R_Nݕj07y+չEc0a>͢ɸ6NiܺoAg̬*{{ʧJb ­Ku8h40;)kFIC"3R YE[)XPwdqgo"s! -9/VT KN I &Wڨ rY **v3t{(+MRV߾s3yw~nYǶ[gB%{iiԅ צ{BF͞| #љ ެUǭ'U04_c ;@֗QE!OBkGѯJgզވ)鉶l;]lp/Q]'KHl DltRə@!9!_\t_ちSGfQ/6"Odj.Ð2$sh9/g3"lC07PùlρV~Nɇ¥#avƮPz 2o@V(}k'B$~uc*`S]Y;<*+8(EWBCyhrAѬtf>YƯ1mƳ+)N!4W 4hL93'9 KY9QlJYC׃`ܻ# ]G2?_;ܫ&_[4e%6+Nu7Eae{p=xrE3RT*|G9Qq@&iǮ&ȐZ{@ i#QgFEǪ<+d$~|ߢ]T* &M_Jmϙ} H=dG T-}@ӷRlLԍz&K8GB~̃i"J0)ϵA9'ҮlDUn@3u+,$9?0FZK-o/~-KNe5s hmB6=6Qq$y BpؗںڵrX^wFfcdY5!ʢ*gȂAX23d.xka}%;,koktRԠ,h Ŗq |W~ g^{-[LcfuVhG6 ewP}qat"is:}a!٠nDQQP"xzY!T,.Q8Y}VʓA,_›| .+J u\4pv ҏQ#Y7P' {vtvcGICJLwGMٛ?çz'g+?ğ #jQcUL|;pq;J_mM|(e{of`iM3)`U>\8)k{*5VFzA[L!Lwawhb\39<73dl$gG\$&YIԀvybd=UOs3eq4%rR^ [ S(dbfB%bJ|7Ƕx㪕PB4qdXR cӶX] %G}?81]QWF!Go*XD6΋V2o65ɵy|KF 7|XMn_|P;uV+t4Q6>*򅇀NA=6W2+S W80/~Z;jQ(c;PԪ k]pLlxZzW` V0ZD0kh { E*Yx4dښ_s2,&#,Jw{o:g7=&k& ,hm:>/VPC!$Da$x$_"mqbM;m~ W) Qf䧱AU >>%?heopsT#¾!X1(ч<}zk5,|K~N 5'Eh JdBY&>Kw;rHne'j|FbWB|Rٓ$m 8ꃠjQ˄fR Os2 yJR1 ^|^*>z1ZzL++I~`2|`G^NE٣݂x`瀫vnK=.9ٴ0 ݑΰ}?6/M"J!5ڥ*~H&VpMCbHBJ8jdްp ' <#O S۝ WPU@TGzz /`bz .8;+_y!<6X6hrƇ C^jSǜ$اN ҆w-FgL?Vpp;'U+6@@g`!`_^3<:@aS$[';5b^C`ۇ6K"zRD*}PuݙIT[9)^#oU?P}g 6,ϰp,{x{g~ǖ<3zQ2#]jQ&~]sr,xӆ?b򈒶E͌cdyns]ubHGT7Ə0M$|uc )fRqrz5LKB w"UrP4wA6ŋI`8Xf%s&n9eSQoP>.xf {zտn\S ܳՌi:MP]0}C ="y ߜըnӠ;K * {^yi 6`|lǬYigSv%OGTK%9x2\N{fih*,vtJ&MH/a4QIk#JpOp/5 c?ʟ4U$%zDH6yjDX+N`Ц2Was]Ja͐H" 9Y…͕E0gDJ~E 3VsFKEd-إb3 yid=)MΠvMSLh76Ʊ)+O+v`Tpqo=PtQے K 55. ZUH+\?ps ,Z[IYj[%\e jAF'fcƳ0o=?YbU[b[dHOqΙK+7&0R}џrlÿ1,)*Wlq1LQw/kAU) sk"'wѸV6yPn$ ;[貙{~,~1-)>:f|v'gzH$~,}z=<i6^Ԉ"BrK[ZlAJ4&Kf1akA9G _ m#TpQ @qܠ?aAS_uP.S HB6 S-|}F+@M5Xpy#N8ODȸ yg'ܜ6Aj%?B$9!@H 88ɆI*30AeR9] :|a02-ޛ s&X+RFKg$ ;廢++q6vɥT \$R]s:">Ǿv^&!R1?#`v3ǔ믌=~W`I5vA ;8g}ESކ] ^(+\<Rc%,YC97 eƇTm# kp9g0/~)> K"y {AºtɊ4AՊ6쟶5fK|UW|.G31H)Rp*]L:R% :,4m5L4:F9Fwl@; Sq~IR؉xXP. R{5y驔҆XV]x晶} (sWQk FE4W@#"ՈŔRKYw|Jڪg$>։$ZQ'2/,vJrsxRӸNz9MUmɥ܄(~ +i=YMu޳te'̳i$m6TvG \إAZ駢gh{L:X_UWBO3+[.|Eל\{$V@RZ)2yY5tj c4d4oʩKaBRcK[2_^7or+=t$k8.DU'EǚWt!~گ VYA6ɂm?Ti>pgXƌ2/ ,KܯMȰn]9%H{Lx1+Up7 `U$An$=Izӿ=4y;57S,ՠ/oЅ},qDQK'PQ@?+czƩ9&l>XC9egnwIfNp%)BĕAlws.}-p7*΂$}l;4OaQsn}rL H" 6<21'0y)pJ~ ietb'[BmZ2 xi#V4ePBctP.>nJs] b8S;5M+ČUOp+ )}&9@MV(KX5,MJӕ38-R3M g,d!Rv S[a oTu9;m"b8Yͫ`gR,2؄4053Tco][#]w'|WڐڵmZ١aGI l֕Nc?wx8ͤr+Q*Jٴ`e~1Ѿ 2u49&ȤQ2bWikPpa2'8kT/4;`XvH~5,D2&5W:.H_"j9[nJ=Tfö" шel[`LaF3N[2"5(<:xÑktڪ}rȫ㎠Cb`g @9Mw,zJYuQ=iOv<8Dœg4sD !ԮfY|3Mk7Ũz<[_Əg87s7ǦC+n>.x n7%^}N@eT Z7dsÁ"15y]rܷI܏`8̳_lJtX<9[0[fEΈgjSͩƴ?+`_ֳV(eJ[%]߫$щA5$N T8]/''~ ׻]Wwq =rZMmL%b}6+툪+vk[mݡv\KqœgBevL hP`Ӑ|~ hCɓAIJ%l`JЕqA=JIi.Zv-/3Hlw1Fvȏ'Z!cك\}Xq٢%vOx!4m z$_>vL+yr3E)0^SNi)?c%e\UpRZu$ 7g\`!JF+"uR[9)w^+RG/=#8نbQcU10ٗv p_iR-ToO {(Ԗ$aa6xuz{L=av! 2 #cwQ:զWܝuMpݩ1&5#*+ֵǙ1q\{+&uA?N+Ӻwh14:&u]ƥ> $iWšek bR}+xIp@JS4{ )ޫ&Y"J]qpwA\ڨLo!$E=mS"{J+,&TR(O1,ziک8]u.5Ҭ ?3 -؜@2&%l-m*RPˑC/J>vyӁQpaX%r Җ#T)7&Z_?En. D\@M4h+%=⢽<~%w? 2*۹ܵ?*:c=-U0!3fJz5KNFǟOm!rQ41KUc If/HR5=.R;rAӓ$|ЈZ}*&HjS ܑ %8i DOWÝyor;^6p>^DLGbQ+}H*h:{ct'k(W?.18mFk\7lx= Ovo EGVbqѧ haҫ+`GqM{ ؞݊CF % f1;]M\w+SW9:hM@āO1R߰6x gp45-r 5HUYܖc' 7\~`HYo{mbgiG>渏F $ԴO8ӻгm#. 8m0rwIպW5޳ +;l]\;LCn9Щ6O*(|;~[#`ջ^끗13gMJ4Gӻ0Ou&1|erbRQkr(l(x L¤, /6+Ð\^KZ|k$"c2=/:bETL4EPTMp89bۨf̹ơ( kN[0NP%GjZB$s/1fkIȏц15ݍercu_o<@z=mu0NxU~)96`e$4@ݮԊ> AFCЪDBDmUsY&4ߥXep6[!nNw;^5 aUUg"uC/X04/!j ƕ-mGdI6Lʘ}M/0 6*Ï+t$zBEd.ApJFW8R8o'8p65  oe<ɂz{1P0 &6~L+>ަ.Oj_N"jǰ׽5?R\q8FeXU SI %P.F΍}mڲk4&yJ}]gR끌mu w78RZ{^@1Jx NzNj$l aŮ9QD^ȑ `JPK2Xp!1 ̈́Ay&,ֈ޷%faK+a 5Um;[y1`ʧGZ+XՐ K,[2kr+>2U-ǗSh\ UEآ)o?j.jvɼ)F+J1J@1t^P9NJ?w/Wtn49+𓂪 0 PCcږdߤ9k/PZ?Icp Q:Oԯݙp= e~<iTQ b&tlIofw0(N&@tja ' Gn>L |A6fQ)Ŷ=[tz<"1QYxnLBMp_KޖטfENt1TF@7H~_;IkUC鲵G!wi.n )6zjd\/ՋϽG14b7s]7:f8Q8A Td(tHYe0 .oH\HlEMAqRq7[K8dq#μ&B~o*"@oY{,sb1Y4b{g-*Y$f\#8}gsCQ_z,Ŀ9J=^:EV=XvNZsP&WSEՇ%ēy]+>z]ryۃ^ 6QјE:;Fe/j͢Oab3ݞ Egٲr4œ!"t p{2;2.`<ӽӊ(SV~h|Kg, IŪ츅kPtp=#L2byk)VUKKT|OC_Fu[VI`dT3m#Θ: $NҐfP^Yπ`CcN=kQ3Q]gr|1$cVt $r3EຂRm)pӡѦٕɺ67t:,fig({+z?RO0mt0`;@ O9)惡I,5i@Y) jsI?) L]izGZzu+Ӫju3i%V? j0 1DnܐaQ4l;>.{á.aynIJB<`Cf6Fe|7?~)!&3&9F3?VUʅp:|SlJp$~g,…RܧYg0O=0pj6bPKI~ ]ݶy]2PŧyFc73m%|{3,KQ:.Q/P0*Hd~}'DmFk;"/3fOM$s^,%d$g}VfӔ&0^=` Ĵ%0npՆ }$!ax< !M2j)-WƉ=`,c3q@. {}vlIfۏ%v FzRI2}23(\7*f^cưds{+$v ܮ''XƋb}w x=AN$dQةsio h8r>Oqgwk'(1:; CV.~ ͯ$fR:^U3kmq`L <q,agQP\r= Ri(F,6:h-?ʽaY9$mi BZn儷y{9BuP6reZuj73<"˿p<1^%g*4yHPyR0Όbbڧ?\a8錠IJ~:zM?*֋o}ƣhqKU/$ezRQRnJ38niTM';i*?ŶW]jzC `~#PFs+^DLF+KM NJ@d4Q^Imꪞ )<(`[&Pbh^-4xHfK`QZ ZP5xW99(ar)&qC6&RSڭA'D qN0n9$)okvM ֕Rb?A!g(bK+S鬲z( #Ib,p(+hrXh*-SZC"x:SYXhN wZRƏm*`zV? iݷ%b|*5uM灨F&Q VѺ"3c`ޅbjlrL%e rq1.8>o+-na3 4E83Lj8KNV8ʄ^zHnQ&8nhC䘥as=kn@5,C(! :>֋w5 /$KAӾ=Yv2ٗj*2"*u@Sj |dz 㺬ocXt/VA&Zil6#kI]_Qq*I);5#&f7\G6v0A5нi)O.3(^y7If" nk%|GB77OuE8#iE*^2"f2f9as>ZN_itumP-eoʫ[q1]~)[(#My΂l8A%q0RRET5), i^Ü'gٜ/MГAT喧'co{;b4ػ BIR(rXCu-Ĩpd8_ƽgkUR>"1Jӂf+Wt)r]kv+k4cA+ƖoU%e@}ޥh)5'z &C5&[ZykxЏe?\g8RPUX+%Y=\w$oeqN}P扳PvfLdh pnLB?R0ex&R.qT`HN)( DeMsӄ;|qd՛#Pΰo9! n"|賈f- O?HR[Jeæ-[h͵/jSrK~P/QaҤ'" ^MҤΛkYl-798թBӜQ8aTr͙^ 0&WK1%ϫ$J .L(o`܁ qluӦ_eP ?[CZ?y&akK Kx~{M"f% N Zw .%oex[Vz2'|J0UOnj6 DhכB_&CQuBhq?D?T,Q2) b.YtɱN8%r2i|p&[8ls>xs YVtu 3(y[@jObHG mcwY g}itތ"\\H0sЏQܮ>j#l [KҝinY FD +'*D&F/śP*+w]a#n7tWѽ[Zjਿ:a]0l#NpF9oa+0t,b^B8 kaN4c2'cc`nw0EeU"58@$vT= Sx?(w:q–ޤ.R!cHC<eƽ>/- (>glm)~dF=![;#0n$li`F_HH, \/DQY֕jWk7D|n0ڏ)C84{3CIP8⎏8Qf b`1$vq_oVKdwo2P7X#'@dJĊvx&T/;mԝIA_>7ü(BCXFl0xαl/f݃BJ/@@dδpJ8t&Ԙ!<)/)'@aZXBUJ@% ?EhmE!/lItC"|%M8.ƍubrus,UaMhC`]˙a;Uy8b{tzQ|wnc^~;uZ6&IF@nn2kij  pɓe]H,N,Iz$6H.uh˃s0uB3ïqC) /?fJ+ݬT3R\ Mr`y-AX6 N<+2oqW^ն޵3/A ?N5x\ЮJ3\}L[ﻥ&%>q9{$p! -RwXnLx 0=wz"3_@Z#xwrYtU.RuF }$k>;qc A+SSq1=%7DDK̐=ڍqhPC/#7rfJ~.>"PCt!:\31IiEg̭L9j]Ȏ0C)4O0jǟ!JF"s'Ӗ}j-Ow+I-NbՀRr "Pm=Sѳ7lg] X{s~cRetG 8V&C/m(ŔKMcwU5ys !2^x-uN}o[1X 1G2_YɯfZNhtKܾvZ,)uG$U}@^3iqfNG`xwEUOh&‰-}tIG\LK(EyhhЋIWlO`Cg}x~|TſW ,dǢzNЪ0?W!P7_Q>?,P kɈO@_Oj8l6x]ĽK#t4%$?5j–""3!dr6vC53)X"y̶8.Q;<^5Fĉ& mN԰36QSg) 8V&cj&%S_w(Gd+6=ъGk1_ z+S^6QTQu$ î񷂆 G'`*,~OHApӥa["WXbCצwc|] y+W"5ڭA_!{(wӋQ#a yZ*IF:lB-T;ZLݢ`z6>H$ezA@|iCa:^ rfaQliaVGMl@!Q3 uv^ ӵ>Tpg53LI̽Bwv{DZ8)Q]&$&3VwoӀ1VLdyIe>Nc: L spbJTm Eu7l!S7.b!(L9'XeO%GuY"uD417;^a| ?փ̴&8qZwl3) ;x[ѱ\LZj3UяoQO:k~sR q4ɫӨs>fmv2nzJzOLߧ5/[ILY` y_NT}`+jc.."So1کY!6RP]. yjД2H »DˇJvdP/z_;K/- (wYP~YmײV"DB3TG˩OKR&dx_ LJ{Ec,nB ҼぅH& zmL*m{襵aMZMcWav+LY1d lkTJ$lJ150A k#DmH 'KY ݙб>/x+f#ڌCoMZ49}nʒclDh2\O-۾DkH=1MaVGsFј!Хƚpi9k&>(O4j,Wӧzt@Ɓ0K"-I^KNfGddJ˄RS{0Ӌm& 4M'uyuAy*KНFۍ@oՅ[$a+AĥTmAhfF߽OjYS o>p[}v(0Fܖ8QB dj$TئH]+'t.qb G5&q .C95% |ѸTDWR- 1XΛ:JX+IǭQ[ʷb">oY?$nV~*-Bλܠ^P}3Ľe6ѹ`2 X[)LA?9 %Z|_U<ڒp|Xj_NmMzu?~t C<Ά#0hlݪpwBk^SF-1~wQm2BofY~#Ld9̲3:޸2⑞؂B357$𭘑c}<#qD^D]}ʾY:_E5I/R:|]=2@bv-fПZ(ށ&^#K׉W,a+ yຠ\D=uGB ԯiKۼt?SFjaU$NzJ\Au$SBoXd{MIj " כׯďWMS1Êcn=ƾU&d\qtdTsQQqMw]Jы A,pvgtDQaQP4]Jh *(>xWn:;(U"27ʨ4ДzA*ނozBv弃 nn(M-ςK p&W(xx-@zgxMF_+%&?>kO[PuĖcJf\)m#QRf?U^;4oеדجc%b[krkqw:n[5IxG<^紴&! 09*: 7[ G gN'jGX ,j^ UlA]DLOZ;[+8BS-8(}{Yk7m_*e¢g\ٱnԆyoGPububPR{FBJyb%!?TQ!"(ul:冣m[4hiY@ @7*-;bMo2,6gi&RO/.Wqj9_;94 Ba[\֜aQ]*'\թŒ8)w([RkU=|kFzL~{@+`L"fg,׸ ŽG"~FYf:@yY ha3w~JQjaX A*?Tm"/OZk07^Wǔؑ(D6<"FvsAkޘYօw׮;DER F_^筜pQÐٞ<2o,O8Y;#s#ɚ1VPZbGm ->v,0* s*^R`+M 2Z㚞mGm2f/n)n>~ N(RkjJ&:}3捻[6ekl,(cQqQ<1mF{؊)_O?8A!E)ʫ>{X 4F~8 LN؜@IKR6 㜀7i g030# )dN4eZ΂G,`׌=F#<4a( uڼ@-ѵلad-Gu?A{[jPLyL$ߞB%5 ;SRY' vl*uktju 0ٞt^uZS ߏXSVR~+I#}活$IFS~@iaP+6\a8 ǩF(]R{j76$g̮ás,pGJIz<[ĆI89C>rbA &+je6CL3D?tM"ȯ)3&ɇYa:h=m#6E^nRI SvzÃy9#Um~f/CY!W"6kj[dVFܤXp+|J&Z,M\3^78EQ ih|';V4D+c]5;Şb.Pխ-cL-^vrC2qJGEKwܖ7 5Aٷ`<%'#1&6 z#$u1n$jA}Up;&>) YTnzs^UIMؤL/5YHv$qP]r`yF!b/eՊZD,͗1vǎ`kg!Jj\~7}eΰ;i!}@AFC,^??m2LVnE䏚>א 9;Dž㛖dzP  ' IbH췅cCVWf9jP9t=eh]haFFcWRUYuIu{8blܗ?7kU/(0v!LkWh:?rx<8sA\ !80ezFaYU[?Oj@>f@!<8T4vFԣd4[Ud2gC50 ^QlJXC.ۉ`\ʩ ,;پ;ʉ'b|cYI#H`%ȱ2s|Vh0?T`8SXZTvdQeAQ{V7n5k5‚ƷI!wtIC]aݖzOQ4,CbCasbsņ.%`5?ccmD}MN60+;K8vo %OսhБIxk]/|Q>n{c04 ODKATUo11OWע55Qq2oÜJD=m1긁kҿth.)!pSƇ~ `0hFUz>;^}ݬ@oqup"Rv%t d0F⭼{as ̗r>e8JrN)zL#$Y̥ˉ0󔣤^G%AX+MNbzUOhbӤ"X Zi?DV^5WfI> f=F-.:31|t OW-9 6 $# oH=#]Sp;Y3Y QW*C̀X16Boh3ƍ|]m-}৉JHEA!hV}hE ؁3k"[f%@lg)bRZJ^DŽ%^.#f/6Lzn{FibG͝[9#T\isbC{5*yBJ/H䡊P{8Iw?T {"Olw޹'l Hkȉ1#@ Ϡh(X C.'.O]KXXI z[nV2k&"OD6䣇(X"uSE-^v4_9\{p-:UeWwQ]2_1qr623U<׻ >#K[h}y¶I+MK4EщC$/ݻ9ysBU@ OQ,)wT*֘zsp $-QQ^!5~ s5 K N߫dcAY,̠pϱ󟁖\BfQoj`߶iqթ_Pbp.30J躹*#;tBޣ& ۝J+G5MYG3kY`_H]0JČ<ivs[\oQ:"z zI z~dpO&w_Z̀ yxх׫jo W)#^/a]%G]M';Hi~Ρ7-߂Ll~ʄ會> Ŏ<:vĮdOOqcֵ`7M;N57ܷ#/NnLҁyp$\ a1!8WوU[46LI]9ӕ, 75 #n;l-VL!YT^$f"5ۋĕU:X,K`ZA  W%nhĄ[RR[  @A2MFרͭS=oJ}_N`IiDh,"5i8`TmS|JAgXgVsivZo^!8'[as7|u> 5O̼Ne pv^pMZ~`M ǮF-N?6;gIV cN ;6 H\_]bgpsgbtvv\dj]rĒ)JLBW !F#9?)XlI4VGY|:LA xSb&oIiROtͰg=ie֞=eE'' &*U;rѼvd3NVkh%w˴GZ󣂠uOŖM2IUgU0DGsg'SaT&ѦFnkx-Z_Yҟ(8rLJ|xB؏2)O$Ӭr4zB;Z`\'1ju,k̪zGqX3IKoҚEcWF+ʟjM=hČ* P μ!h Ast/56#4qS%ci? ?s=V[R}3]H Fg"D'.ۦ += ͩ'&d< (DxA802.̀b oTg]UŜ DnB`eE~{V(jeA@8n(؎%h0&S>#RK,ج{z2CXJ4d1|0ẕR bD!h|+N(7Rf5VY3҇[=!ژZ (e;1#WOX-TV_ǰÎ7B|nz$5u^"dߴBϮMq=иS<j8Rm3Hl=~T>UCqqms'J傀iەvZ9=|':"RSy/9ւ;Gۜ39HMNndn uVV~Xd3[`xXpI#7F 7-[shf1/c'L)zKQ(Ո [O2?. C ܀Y*a 8 (Tc2&(.2QR9E%] ;{硨TJ/2ew͸1kbjz^E&:EhpO (YT8x?y&-I/??5/vwL:xo%k6Md ͆}<4I]K\}'jB>(f>12~=rb졅!BP͚zӁioGߵ 2q4Qn3`X]M#p<((nJWzS!Z m9K.Z)psڨ!OD9+ԉ r_%sEVc1q 8aݽ S z7 GŴ^9#l(Ñ)W%L4`'FktRW1g umLY(s,[\2Kt=LpǓM.#kp!,A!iZ-non&|HƘ?|.mtfyA5y-|N!MIqd٬ϳ}+7f0LTߔ"rs /?8mb3|W(8u@qBeraJ^w2C@<XSY* |\hBA+SizeصD;cY \F`Ԕwic{5 J$gs깬ߑr|c$pe6?pƄp 0tԹ%ZWb4{>[Vj2lLy|r 8h {_j8_PeLLܪ#`41[Љܦ|֭zaTuʡb:DAQC`LWyƥ)m}5-ypADXvҚ7?`4WvlSPJ9O}fa|esSQaUʋjRIl Í`Ŭ@ k*$y@)!8(u\jש 1P"ӛ<ԤR@M,k037nꅂd;Y4i"O~uUkFJ'ˈͱw& -PG:x.n24~fyPF ?G WGJ _FC ]f#19 v\BZqV<#vM/eB\t?f*ңmBKmk:HnHT+qQj1u0EόǤxPKM ݄d_d,Y%XA ٰ<, {@bX$5 / 1'?BSA{wƃMh1DG6)70Wl 3e&+[c^ӅuRthBgjrVN>~cLl,x-: 0ųX!P|R1կDaeŁ y8/I_XUl Iu߻5=։C^}+W_^njFc^ЈHaJ4P ,w>j0(qSbaɤq5v#lQ1((ZE.BY Ekh`J7jX܊?ͳ*z!|Žž?.ɺDSDh#E<߇DS#ֶ< XaÑQVv_O,0jr#Oޝ9unF\38xv| Q9޾9]/:]vmmC2[[{@*Icc_To(I*4>Q.g1KAkOv BBc7?eICd 4a"Y9 ""r{ug;*DG~ ,2oouc6]K FGW*gEs<,r|U-Q(_̿NBU 4"n#4 TEȸaekN..'no=۝"_j?ޡMWLe5T 7>$rHg 1_Dv&J H`?mBvD!Dhf }Ψ`*h|"Z!/x*FOuv[E])XPN6|N4)YMi`M NvA'.C&(W50Yңˎ-Å9QܠI9Fݏ ,HAKx <4Š]\3ohj&0eZ לl!;4 $$uXƱ"RL{,)!'FG A7 5~W+2g THp@Iw.P^E'%Jl穄443VRWu ˤVg$(U{S]P,zo̩AC vPsθaݠHlz2jW3GW*K6*}>^{=1u [`BMXL}+%駾rjc}~z=K-L9NiVf.Ɋ;.-/ mS!MP,l|:R+ 6>ofCi!H p0j X߻zW\s?茋^+de} ݆egʄKK9vWQ4d٫z7(q&R\}\xBŠyNN}9mIL EvM}`Rɐ@b`<{9`).C˒Ed =5l=8 1FO*cV QU+(ApLL xW&d<\{Vd5^;E¬ A0zgzM7+˯snЅce|NOh83U|͇|fXW}&$rCd~KCBdm3=>m%(Q4hԈ!GNCw@X?1@Zfd`-L#`Ҕ;Cw=G/V|o5c73Q)-R{A 5JET CnXVŢ?|\WDOde(5/6h%$ 䃔*،&&vp;nT4SI(J:OЬjIЗV&n݄Yb@ ]ۗ>fr>Px1J iͣcR :ɐE&S&'{Yb/Zw2kDe:aQhPvp.笁Gq]M0-ОLhadA޺B[ t $Hbbu$DevS{ά,Z *VQ+'m I5fi` Žqc,U9K[ 'l;N% uWC鉷)_Q`Rb2NdLru0=ע)p4šb^ʱȼ (zȣEA@EGխ![?'F"L~r*,v³h!x.+Sg6,\}ysfBƹD5 ~Pd8iz@vzBlL#K~B lAJۜgu6Aо=NjR' զίs 䄤:x#lzy%c'dtn`mRd`CmUaQ Dzyg"S3 DDuZ d#=tP'"LG"J!o|bC1w3" }3kl&[Vw[2{M<0;3]s@4k]OmͼU(n+ Kxw ;: /iK\Rv`rEJ#PpN$_}5I$g988=A6&\'6Ͽ=>6 ۋ3K R!Lv FMe)O.Nᶩ<BZZF#%)O Ub#02 UzsC6f 6S|Cl6d]$H 2ȃ"  XfKE%-]sa85zH ڍ 5eu?RA>rVhIWTw/fo4L^l`J.+,vg^ dCDAG|_M2ɐCtQKɰ)B{W"fVdG{. iew (s!Ի@L("[+&m>GfI|cY%t<@,NY/`g)cʁԓ&<0e-֍~Hsh̆f>`UsUthEIz\imZVyF87/+&֧_C[/:Ns~ Mvj15VX kzBnup naW>G|[6i)IH!Tc馟,l+gW\&cNYoVzOU.\*P1BQ@fl0 ƤT:̻GBe *#Ok`ASCM< wf1PA9ҧ{_eIyۮr6$Tbm-:oL?as5lt;~Gqx̙ >d/ޕ؅6mx `ʤ\Oeӝ7T@oBkNP"e)º^߀J̜+U̪a䮟Ac?] v"I[VH `+0uS#:6ĀY#/Ðy)ng| Gv)&߮ѷA&QSޢ] #:P>᫨Icץwm;UsMm.)-bH2'bxpI S{(5 )fd,H.N.6ԃBd"e>3<Yʜ=&X4 !RisaQnKP87S˫"'İDLu Be&dE}6hM͵qc)AQc6O G,?AeRbk˽ K44Q8a<^Z1;1;za%C& 'Q-Lۯz~A7܇ǿo9 6{Yx%Dn^fM&N(LjL .ڂ$w5R̀,5~3(^;'-g̦CgPfbC[`aC鬖q2>Oq@=Q]f~: t /EՉU:v0;`Ƥ_71{OmJW@o9]`Vq>bL# 1 dNԖ!]kХЀ[YgvFspΩ})Ah܌fCTJU %7=~Uw4Z QeP۠8Z;%+VUHEY7G踁Lwvl+`oǞj֑=nk =-0ONjPě 0lIEP[:;ڤG^=[ a}* a+Ӆ `s#.r~  0Ԉ"LBU"B) &54=g,9v2X~Kl}J}x4>в_kIxb6ࡖ.oCٟ4-1“M ᳙5 k^WSuS5oHr8bT\޻qdDvx f>nBHb/FXo,ۼYs$"2@8w]qxZ_0u Ԟmg狽k*&=+7+ɣ 3Ex>uSqTX|ۥWI JYh\>^~MnAI" L*13NCsۤ4=/ 4c}#!<9S0l -c#eԄ?  vzwCд)W퍏q3Mﮟm%du')1lK'|IC[+@ B8Ar n= c?L6".kZXC!:oJ[Iubu^sn*_ND-sz:гg\[Y{+I2o$dŁ3rw(S7RӃ[B#A9i`\,+xЫdXrxjY)K( GpWu۪9ҏ}~##JjǤ>xSu@O~cdX3ȴ&9Nѥ1iYIXVf/x&GtOc| r9ԢSzs/ۯ 3hSu݇)Cq50, ̅PvRliE+1|G%%ihOЭ{#v# )`h[&?2\}QOܖ3I"x7OV-.4gh^ϧ#?^&r ! 1̡1 Lf:oe  qTBe{氙@6k !QqkNTDh^_L`k%7KH{^—xf8'dz!tj͐7И?!7K1,x$5Vllv0TVnV!y Gm2_T"Oq#/aT-AlFJa7q %C,Ň۔6ȓ|/&6%Wa,)_2^om->LY-ԸnaSm~ 9~C2 ')böimlJ586@M]M;TZ\vE9uQpy%k.딍dNn1 7lyH?MI2Tq0Iei`eP)KBCPHWѐ} FƀMXsGd /^p,˭G܉vb]_|B$[o6s$1oUs^LgΔRt3ٞK#Az&c)i 1t (hwfl4 wJջP"[-Zrr3.7?-R_'IN\EWyYϦ<uv^g=d5YA5Y|X+]UǟM${I"1l.)gG/+/"J1X˂.n}651elT$FTWzɮ{H>.$K6X%r)xNd Ԗ[ *a~OKмg*m<'k?pPtqN)$4P$/ԞNݎ>>7@JS4kGHE:] >7v*7 Ql^N OMKEfOV?KF!(evJBSe?+6΍ݙlμΠc4HN;y3dT-Nrg֙6a" :S:Sfr1jgJr4a+1` $:i72(Bǵi Dשvfp!\K'-c;U^{ Dc:V0R)PhaVlU+@$ߔ9|v- ~[Y" ^#afCrfvqǀ['X N\p5iR1ݾC=:F` o/keUH;vFtb}\K)2M~J}7Y8ǤccƚͽTvI7mAq9_Sa.vW*ڷ}" |$&Cif񾥢,v T2,yƂTKq'~4Ԡ`h<$'mW/ooˢ.2R\'<mu;Cf)bktxH 1Aڄ@hY g=!k(+z-7pw^VQrq@!]-N\ w[}p %#|>qR~D gPxYX̪>[zO@]%74=X16Sů1 v6VUGWuOPkε`<HT̊<cYJ^ciEӏOԟSTdq7}cu"4⪄k[5:9]nݔk?)_}O7 @U}kx?'Mtzk>,oc|,m ?^mxq qdmUoXr?PHiao=&=0`c$\}:nZ"a/=`$Z_̸6)d`X_u0.E[JIpYa52t00^*nWhn^郍;x˳~=݆d|x* t)nUnIy  'Rd g;0UཉQlΉޔ"df|gWdɣ'#׎0뫨iA\*UW$_!.uPI#p:uҫ3j.M >IbCxL1񔎥ֺUɬr;~ @Hj= sJg+9~ 2r4GdәPG-)8|ZlL@g v.#,Wcc&kG(vJ݉aC ?GT)QE^|r@Sh>"y FUȅ|󥾠zDf舘zc\[᳧WZ,9y2( @@ Ն"XXG}qHc+{JڠΪ24aϔqt Hj6Z|՟QPdʷI6/!\*KX;rBw0"dFR?3Âk!ʂqg^"OܭWvEI#;_ 4-'@Ncdwkϊ?۬6>ؙ=NVUAJ: /cn;@[~547(ɶ!t #4#ʺ݀iMuY.Pz][Lm~仾.4¯2꾸ҥ2sߜߎ1ɲ';g^S8f iь<<.Æ:Uz- y$3lF<mUIMn+z;87}\. ??(BNYW m/I>#TO B,L zV ;xݱrL{XDd}&ʒ %u?@DoCDJBDZ'l1J-GyDA0,j}(LC1ZqE [qmd~Sn[R.:̵.HŤ]{5vk4[ ^eq2 R;_WG_FeG/0`zil| CtᗀRqheP̚Uc am*-RXt?c89`SeĚ_@"*"zѾ $H|UiN{UVᙥHM!<^Spa V3#Up峗\}QhָͷG6fģ`ðj$d@[~@Kg/)RH[wEA*pd. R-;|Wz үs#<ɗN;TYT}Jh wύ_<ԍ5#p 8%D m7qXUj~Y26 >K\uPn9C۰<2 ؚS][ O[!=l 0 *>L)^Ѽe[y`ro*j|P".˩4r;YY㡏9T{ v%f@I&峯 GCwῢVJ`>ɽmIH(vABf6v0T!G~c>%=~I k9f\,vkPEq7duS2ʝ.x p⋔IDZk$Bl": `UcP%q>.%5ȉa޸HA  f7P(S@{+ߓ{o!Vludz61d Jɵbft>AYON chEƕ):Tە9f{dHi|)_)(Dž+p/K;6hHmr&=Ұ]LN:btH*UUP:z P#ck=4('\w+pu (NJi.IǯEkoJ8%aam'>;c"+x*'BjءH6Ƚק.upDګPϾMC&6A4sE M>a%vp纑o'VbZ=2_79(٤GNտʃx7`IgS$ jFb,+f.8 ڎ6!LӔEL;!=NߝnI3B.[x &w3\6S^=%ž:R 4~&i #H+(m&͎fU > 5P:gi}Mn&}n0N?A\;IS$z:)WO/?Nu\#. :%KmK=iwbby&KFon\诉"/J*WiОg@YL'|J";6Y4NYx~U蛠&ak-EZ0` j[`&{`g3IM`WR ;YC6߮/R;)(t+QuH_[r4/ahMwȁK%ފ#QD4{`W %| 3[@|ҕ5U!s7FGi+F mxv?Lq":Ek5S%9~w1ŹB[y"WC[F)Gx6tn- ˿mA#>x3pqq="'t7LH5.0Fxdm= B"b\[|$ЕeEꂝ+3FotZcGy`@4C :o۔$iéh?Qk-Ϟ"+9#݁ʵz*T32M8r72B(޹Y K׉:QJǎpVRx%$,)4c v{yMrf.ĽiUɺ#LCfD˓dOYt/&M2Fʎk(У6S >cI!ǜ趉E&jLnbQLw,9BKBdY; P}oiڰINRwu[Z0l 1?Yn~4Z$GqQ7}8T:P0o۠@kr(8l-~NJdN5Ёx) %aIIx+uZ6j@'EOUgcC!nd<#Д)l}.yߓmb~Iv>KFtG)c ):[|_.حUdY kف7`y}ήzf'?wD=Ԡ.ib C΂cw/A +xl/KSJs4WW@wWjk e[b=䅧!4ghMIL]9 lL<NJ0W<^)u6,hb5Ϛ=_GS3}'U,*˛!vUK d@%,Yl~kg"60:"~_ 2+-L" \f#&3%\5"_:P]\zzFRA4%`Đ}4!{ӣ{\Wiqa.-T =:lĀlDs$]EIrB2p(m}#oл` eqS3[WGeY!t27}uF+WVk=/7AZ^CX Z&ʦf+W"z`_SfvԤZ|+ޟCn(L0T95ؗF< E߱Ko?f/?hZ@AnO;m\?L|swP-C[.'`l F>~\Td-nA{Ŵ3Y]ar= A:xl#\3wr%pnb*i'rY$#Itmc_6z wP/ 7D*~Bqѿßr4]9OȽŽ5\gIEq|Z/|##$߷L-,Q]at-J6&,ipegyT?(" y74d`r纙YIބo, )${ԉJcIׄ3)Lpr q8dhbN%&3OO F aJ-Q'}tX%vyFߢ;hyК¢gٴshƶ½lBzI;)aPT _ 5[ /R2-} Y9:*-#gLVSJ]O[]FO.qt ?R#gPgU!76`N mkfɺ3,J i?_cs$!m/wb6x5;R6&f|/2~\t@jH[= 'yfw>ʎjrB4ƺRkuet''G-2\TMS Sώ`}.̹LͶZ~Y/E624D|J6 AJOuu!;Vl@>?aʹDt_m#ƹL-!g D6 ڌK[xLH#XQ?D3!4'``9k1AD+Aq9u>]97hYdJuxܼ0YO&pZ+,"$4k+ErY}rg1ۯ6bV3:N"9rOB6f*VV.h e&xK90nC-&Zk:GPHuJ |}"H KkؽT=*S]=T\eMqPV5ZH$QN~M1j;gnnkw{5$uPY0'TGcPTM'(ߘ-!v5䫾]J~ى0|` 8 "R%|%(hI sM4^{j?h̕G~ ʬwߵ{z{^ +0n%"R@nϦ.6櫌FE_dIfAl22wNR ' a Kd~MgRQVo0 ٓ4%Gs!~ћS!wb $>WJpn9QJY8uj/ b㍒}H.Iq⦬)gsU?9Yh^ +ES@l!"1;zL^jg۸U \&dTPcPI,qj`o{\2)S&Q*h%kϠ[\ zR'+H=sܔWvc* 4ܶt zZmPz{C)|ɝojP[ *]%c4aEFYY_(`9| 6 < ) BjgxXeJ$z)ufs^Y6߇I9ӻF oF9*]7HZ9c7sQ5D[jlp*9“GUb&DeL1hb"4C)(<#pl$N$T+D#jӄDD?WaO<@HҦ*e\/2IJFz}wX&Z8Ǔ' *Ky+=51C_&؉U+C,Jӯ(5cTq,~|>+z?-ӨcKBʾSгKc~'&.J jaTSx5e>u H h kKMMN{SDI1 |PHn"VXmǬj1p$^yܰW9h$4!GP; Q*L09?XJDvrnj L@]amEvr?II@7ُBJPbʏ7ZܕBp; cWO ?#@:Nf@AZMlv-bo9"כPK%{R0>EmU7]ܺݵ0ji3m,lK*!d.P܄y +U+ 3Juh(|bcxYfBXn}&4c;S0WVsh_2dimG wP~av˘>᠟/'@C/GF6Zj޸iT4{>g hdbO9eEB@}0SI aҔ) 7Vn6t{yDՄx@P̛ٶr,̊4nv!a~(0r'9|;~W܇~njĿ,ᳶqq$X A$vmT$rʝϗ51d,^ʇض1-c_L/& NKLkL}5s %T tNfLv.{_uS4c'Mst[a  n Yc~Ŝ@}8F9G,>L]|u)f,s$4CԘSj\g AM@~j`#-- E?&A2 Y'&Cwp25?8}d6߷O)pH]沄cUƉt =p'蟱lعZb!T $Bq:0|ScH/7 (h1vGqL\UUR]׹:uힱGON*N)8p =`/%p99Nq-p9i ,䟊w jP}9o 3r}ۭQP^`w'ӂdnkgag{p5l(>ª=e9)m2(v&mЂ+ i >NVå5L|3t,eL"z% >YaњʖSvj$ rrP%4`GҶX-m0էMQ1B 0ATLJ)|p &TJ\:A=Fɿ{!leZۏR}3(_7PNTbI0y먕[efB T Z*?dЇo (ZE(ƭ/D'&vޒtؖQ_o-!OkO;!E" OK3=%*M , )v\8WoVrTo\\1ڭ%,8$YAyӴ*yV?|F )5hZb.cgN mUw@#P3N&Ҧ7DR)*MiUA@ZR[zHzd.2vbyO;x)x(_[b-%zZU= X30jXO]pe<9+(%}u d}EWo4-h(oYLmHў~' *YI\j,i1ᦔfYWq}#.0vWr)xxleKIKo\LJ4j$. 93dJWs@ tvuFBBD,N#g,jM$dQׂHN]T<_|W0sK|:n+W8#c`jc X*=5k8[^)6yvd$]| Z<*M=яR` u-)p~OF=zpeW8dEe=.W+aq.K$7<ӭ7rE4 =8^BBwC`E@8ՐzT4 NHg.'kZC=I^`F"l5'"TvPp̔zQv meGwB0Ϯ*N\|f\]ͷ[Q ٘K !Sp! P%.X<ݢ$AS)ZQCce{;hL?ɯ (lZMbL!(3!/}WtpX LBϧqGz6kPᬯ6j:'$V+^ȥE. pyEh/WXkY[;F.֊3gkc暮k&> w$Y܈bGG+4T u?P 8$` &/϶ ҪIHvQkYM_Ul`+W~(/L(>9J/D'JbAp q'Y>0 YZsurvey/data/election.rda0000644000176200001440000027370413122573422015030 0ustar liggesusers7zXZi"6!X[])TW"nRʟ_''qФ}v˂ Qr&nd"+_ Mk H(:o>#ҒZO*mӲd~Wc$9rp}3:5 U{waXc"@8x9sV@Rcl=uMKHܧSz5i)X.BK {<+9[*%w}SqQ쨞($,w}>EDȝl's? scZY[2B] ),i`I< 8ys"r 2f'CG$-5i@>q;cu6(_!;J*Z *anb 3v6e=0_fT 1?IL7KDdz2D, )}|> ^+"(~2{aIlcjX;9/l̝W xA}~\J>JAo>Q>HyON@ REo; ;/w__i&Je)\='p%?ZEHw<7Su9y]sdPʁG%ކ{0&۰(aJ^ot*T&9ASrXal S ^fmINdNE F{O>Dd7FBVbbݠc=DkZ%>YfԞ3zˈf9_$Y;٘AssccNsqxh/LN8PObH5I2qѨ~ˋPH}U+ۅM5s(SON%+ݶ#8/9mq¾ w[&qAzkyb FC= a1 20gXw,9 e>b&&%{߲aIj$^74w杷(qW;I'hC ~sC^gt~ ->w;OgI424G; zB{)m۵RV66SL1ԫ| iCkD n VjiklbѫڔkFn|Dn( ZOɾlR:{!ԒFUۚAx@UDhf-{.]T15UE%Dj*;Uf`I>Gv{melk%D#u^GoUӞ" EwgsVYO͟+rjR RO%_Ispc%Ո"\{c(~vOP}<[oY@G!V3f0:sتTb[Bb]9C JŪ+uK,YubA@é%%'QpW(.tPVq!wo"8a`)Bx'|f{9&=x2G 8uӲɠo>KuS ǙWk_:]TndMg(!d.+Y߫_pn"oBLՙ)S"㫩Eɏ25VN9~TcDĦr`nz J27[}&j| 9n ހmOn4 g}p6>߃VN .'B$sCFfZtr9^zmTܟa,M`gNf"i"-đʟm$' s'BBu|\Yc7+ 2<۠@U^ ּ%6䓁њ _fj1j]|uP( -y)2;ϩ[\HT\=A v?ysj/;- (ّ/ ά*·vm%ܒz>{{VIyfN%?k5Dqn-/ח(w,sB<sV: O T(tZ%:(ATVZSRKR|avG\ЦRӝD'lr;)2v JeGoC9u]o߹R=?$dT ɔ-h9~4xt{;&N럶)y8͛iHUlxJDH)ZؒHic*MQFK@+#Lq= )/LKKga/OOSMڰ%:q:~@Vm_ In%tapyۆŲ%l]LOQG`Ԯͳz 4s:}t+`Nz[|ؖ,vx!:̨'vl<tT") i8aR1HzyJ/c .5;@*Q%c.;82/UVkjZW)1s<_V7{[Fs%+HXgejS3N$r! eQYQkR#{{y`d"/9CwvrNM057lOg\\mW)oHH82г^j(KlA6G@XGU\\R+n~Nd>"vEK9*IV 5'኱dex7"3 '9BWVQz^(r? HkPT}Z<| ['%r#/K TrW]70sXr0{d;=u>U:CvzWƎ'Ǭ:{+ye;}5;2sKvE'|A.EL$(R*|֭ Ŗ ګVP5FRa,  ?'7wb!i@B>`ZcЯϚQx@@~CV5qX9D5H]ϱszi'I^dޓJdM"E1ՆjFJ;Fg z>*X:,[EjO=IY;5|ϼ\˒M ͧՇqTd5Q2ARSPd"& ^3.@L #b:4ieb69 -=p)n6!y`B S̊)A":eD}b e&򓇿J$#(xst#TX73leBZ.0efr=%6@?"G=5T.N":oW qH;G1]s[*1"m]_}0ߛUam.NpYDe,FuAj|@ ͔oewoe`~Pk~iN;aj>c%4Uxt(JZou1V1_expfgѐ0h; Td]B Iqֈ½6Qh̯H:[k KTzB> ⱗ=smg?]E$^DNpxYSHnd"XLhG[,y„Ԫ4Α3U:"(/1(_۠ +fpYmQ^TѐG;s\&b.E{k]MDPXުpCPT gU([Gzr#_CĪ!܃JsL~ us)3~ShX lљYk!c[ư @'E4%k%dDG_*[ϭJxlw(CZx̡`HɌ_4 ھt2< 8M @O= :K,CkS 8w!^%-cȥDC D4v}27iF(х>J'a Tgt$9`|iD峊e^QS62 1$<$QOhj Z^ȣ%rbln¶[}72lȳ,w%Lx ݫ"R[ o]~Y4d[ 2PldBGղ#x"Y) p I>㧠.D *_̤;IYTP7aĠZ\B􉗒 cf*>%ǔ\ Cx6mOszߓǃp>~P rQH܏}5r<_dł碜!fXVY aʚ(+؊a;p'^sE'S1Iq2ݴ1@5'6/=0(t;;BN52M_ 26_G2&0߻Qg^_֟lTs8TCR7;:'NBu+ٸt6 Lj\485V-Ogǁ:@/icU]!ߑ9ץk]8#AdDa׷xF>4nHD8܊$XfÚN#X7:F+ծT3҇|DΞS g8 e^>)îw?8س;y|Դ%PS6f$+Z9π)hTb-+(jo`/p!SW@6 <>Kd>R%#TDB?bOrl1$@U64zNM O?)Yx5G{_+ZFL.ڠhwcA'uZjycn׎)i:]x'47T2GUW\-c}_Jv {w;(@jV)pE`6ši05H>M [m-^jnQ;4Ġh x GeSP?6ܢve/O92KGM5q믃Դ\h!oN??AKܥ?M:S,{G4- 2s= ?kr mJ.g[YN>I V~;=gVo' 5Z ˽A6DȶaZ7(.rY nj kBa}6]zv?eS-9G<7]p͌iqQ"LT+EO yשbuA B|e^$j~XRXlK . FG=@ K8fD^0i#9woDex^g5nTUs0z NVJOe"?{m@"hM^5?v4y-3?7>iV-3WPa.db=Ȓ߹A'Is4~^Oǿ cWO)\eOK&# }t`#SfmbUFVv¸K;U8_t` 8-Hzpwm'\3"߽yvh4sqp/ .i&ǍYI j|#.MP&:ODsР?~Ǝto`NQMs#WT}G`K1'nBje)% RE@n`jL|ô+Ն-x"0#MlDjbM@T3e8|H!.QdC~o:ϨР a=29gq蝘۴q "/_6GU d;%Qzk}NQ*)&$>XA#{4_=N p_q:_pUFi4vQ3-kd?3+sb#3'WP >[Pw/Xdwp?8?dtye3Np!d,j{nNXm;g#~akLҟO#x,5L`N\8ڕ헢g(opUN%#rdM2ҹlOԦb?SY;y ׿~q|[ó"F p59 AWIx rS|_Hb^(VUin%9H~=(-B71͞XEMr֥/M)j eNk񇤚J 7\0EOllVU}XKz-1|[LNعb;)J>qr_td tc{~|ڌ\au;V4}#,luډw0q;lK=M&>{'x^5Qо/':@Ա?>{tqm2TNzfy*#nez#M #l*ǯm#%\M~(@WZ6 wG+UӋ)ȓ\Sلٲrdx[fݯ/2q"j.J_.EC$1_ٗGr&]:!!2%yfuM/ Cp>/{{P0/ %o#+oB@?zQ7`'6LXE!ވD?( pTtz>v/Q{ kyOR&HQ}{Mg+>~@;| ĽZ2I1I) 2جwT=^wԞ{235SG=yB8blX߰"iO HX}0KI/1.63NAxBu b\9~ #dZ펤r?O~CUW^X y$jk(yyr--سLr$R+W YA;DMLn2aϣ\3L,3C_et {hPkO)Dfr|lIvj)a"hL=^GOo;u|Wr|i~qZ>=B~G_6L;-EKzCtܛ9"oVk168b6ȥ$}_kF% tJ p@vї 3XV'LA^ sfu [I/p~xB!, {e Bfդ DKdVd.'55Wm#ǎ P….{XvڜhT[ϼalhхǘdaNB "7qMGx-!Ksl3 8(ImY_|&dIġU rT6": yœEf6EWJ+݌+6gz/_*vH׋DudgUD:;vW0$x1rdTlaْւHO {A̬TZCx/!U%|(<\F t| ɇYl2J&1A8]cRSȊXAWruXOl~G$mϴ tPdсg@8a^z8 3xM9c 5iTPckZ0 rg+KovJ2Qi7C ( ? ӇQڊgן׫k{q/֚,Zmm^Qf2<~,̗*dSd K+*I `^J. bMnqْ|4ل.^,[C:PvԵX0 gYwi$ts]vt5BAi 3$,z.%ohҩQ(٫ VRBvJ!\g8%'l0+:!C{GRHvv˦n]%K`\ MQ]vdiSW*'!z,7j>;G1搼 r}g=OUDh@"U7h!3xD_&](ͩ_`hgx`][lß]Ʉ7AΎ\hJX\C%߫ˈ`>it Ϥ/,ۦ=BQ0otd˽ҩ}~zZ!Jtnqh %c,K㷟W9Y[o2;YB~ SLGqH]JiJvOSP>vܲEɩUN-%1f] LOVji_;d2e\A<9BBaÒgTl) xl ⮣Ð9z[ە{8}j-E' v*Y+6*Zu4dvZj ӮdPȼh@@;y!0/L(a43ϧQLܑja0 ˛a= Y˔`5|r{:]g_ͷި3LozNR"Ƣ+D8>=k6dtzN|_,ND󜸿1$jҁތSpJ [0´Y-mN [<A 7Atٖ"L\UQ)ۄcBIw})ۨEtrA CUy*Zs7!5׎= s}Uc gQ&O[؃Aцy ,p{ {1@X/Dw6.JbY}:9SR\TOG8=7!Ձ7:!dr!mǹ؈ )DxA'MyE+isڏYPhȮ)bcgzhsƅJҹKD%FSW3\a _:]~i!-$nWǬI=Fetݯ\&JOcߡTyeh LDfj0NJc9AT'H^4_%m0:^ 3@Crޭ|@-SX/ k(BGQƒyCsƀ' 轻9րZ> q714+3߹UQwDbLϐȖu:YsG06(4>@򇋿WtSSFhķ1)$k>D^\>r7yDu[_'_e5&n7ƅ dY,E0dbl/ hG=z%7%%;bv7QG:BW+HW~Q4ǚRMa٧: >`p͐ldn;u^%o.Shddhr7dƿ~F!8ټU)',v7/D<۹?fbV*M_Q$.{ؾ rޖj/Xk:ݸVǣ24d"vc樅-݇ݙȡb+j$i̬n=?1Р}_nEce/޾yL!r7(ޣ͐w" qJ@Xx˳+ґ3'UՃj5uo"A7k w}wIkphGRiͰjD6b8=f/$~:wJ6+Egm (}U渷*ܬtddž[иJ"A%|mo9S$'g0d QU?bSG%+YBEW(Ւ$( adܣJeϰI#s͕'{((qq-:3c y1% "FhyeQ4qWu[ kYp#=?K"O`HF$4Ab";NFlaTӃcpOib2Bf#6铉iOxRT^{8@SҔMa-JQI{3$`g|G/pP2Rx{mpHH5 8)\~?2_J{{fu2]/«fL (}VO 'V{2$VR΄Oo(u2/ad#{wWoz ԃѪkHI5b rFX)zxۊ?HK*1JԒXj`\cKHBSd]BrpvzCنk3]MDfLeԁm?Qx̣tp:/J?AӵS%b}*QNƼ}P/*$ +1.? R]}^>16›qc&HѸVg.oz5F &)@K C֓ٗO!nXyX-2]䛣lȇ< v;^FOWrTXfJ a㣗 D cPm7xxƒ<'1_9zs_B[iϫVH}'4' i,J{0U_AgRQqwmm/ܷ9XFѱA>Trh蘼%ƠmHR8˥*'핥''.;Kl' Ly`ߤ:@Z-zxt))_n]^6`/F6^V>_u C$0..%EL2bHѵj|=qtd>~ W?AkmGmidoYAqQkf jWo&,r *^*+o1FNіeGI0;#;SfYx)'rWxԆڬZiJ+0?TGqa}"wBn_bHoJofHBoAnY $3rԌhwuWΧ?^9@:ѽ7Hb +޲3fP})hk"}b3 & <ӗ q1¬&-uX;zIll1y4(#swPg2Lͽ'Ϸ} qG3)}"QmI+FRcelI&dW/@Uh+NqP p Ye&V$+飈wNk@ $s&o 2C AQGw:dy@yLaQ_s{@?i^ʫlC4 {}[ >F(C^ʒW-d!QwLq#M,Ș8=U9X^ ;1d1;KK*QE"L1Y9^SI }!Λt<$f9N?yHdM3A YsrȘQ`?ch r1 QL eZhJk^xiB~ E !< D;G]dU^ӅWX6ucfI[mgÒoПfs )n]45) ڞqoT PL2=6$,JZ=~1c#^waNGGx)_{GZ'ѿ`8rvkѷ[`>4")X=н]FUuǿaGm8[pP^:ωqdgjC#O1/M ͲGNd`ޠ6N^o((T O#EFJկ 7vGÎ#tC9E[p_L/Yk֖yC'Q=5 Df`}<|8Wȿ [Gңekу-i#ΙSGRvt3.h/ ۝Qj mЪ>Հ/YV&d j*iih3K$|1v"ܿ`B`j `w%&%PV} @?6x#lWV®*i]JbsoAݷat ʿtPQpc7dW̻ɤU"J\lи5ThD.YΣԴq,+ff⌆8eG /A_]L)ژm<> X&bz2ŕ^\e6o&c = [3/W|G8Ko?[;R.RNx  ]9y!<٫Ox%=glu]4cL,8~ *eݠ}e7bks5{#IH Zrv.ک VQ?jva@&C"M i84.c1FQf(=e%O)zB90է /w%VxI߲0eIU/׌0oqWa՗ H9V9ctCfz@7VCaM-VGlg;%匊AtW=|OUy\\@{6co91H$ka>o EcT'rj6>g࠰/1`@ 4 & l (2|ݶ">d`&;A(h,<&ѽr.*Cdܓ>,f) Vo>_ʔhΠH}vkPdPrBY:(2^ݟjFU%c !:ڭ2N#0`wӋY:s}Q`N 8 1o42%M(i ^&ӟSNu@jq^3ȿQ5 LBl$R.-Wy^+0[?Z>v/B4`Y]]7FEX'񆱄{|}s&:JnKe"H@,WIUC')N "&hC=hM^^$JSQ2C:n<m@ĪKFי<($%czLk_0SrrQк~@hmeOx1+~yU=cmFʹ5HsafzI4V.cCMScɂ~܃BNyՙNY­7 Ɂ -W&=z9EG8 5qE耏Q U\o ,g6L*XdKG"aDCXQڊ;ŋJ"a0z١ҢL2*X'J[vGOX%/vʄ> yN!К%7LԌ`hjP+k:/c +xP^; RQ$9,Sb'{hly8ڸ)Q_P׾lo*6Ǯ2!3-w Z J׏m]㧢% ͇#} 5VbV.b(NA='~g?AG3ԛWSqBוk%jK1V{ցd2 =)8Bv N0 mvK&vJjk`9CAPM郳D<='^jls -KG&W@HmÓR Tzοx} bUuN<>z=GPvާ5`'y5*'Pyk@PMgDnggVͶ4Z*ɠW{Dr_k)Pr'Aʌ\Qq`M ν e\&v7%q2DX/>ŷOr6sC|‰.6r6^;f|~hu#'Z3"T!:>FxعIgSȵI=l$}<I6Gd+!ha5\i< t [z8X. JA#ࢻ%u{:x2;{yze ggBmzO}R+V*5 { ?^_wLN |4^N[0Vg!P;kj\ёo=ry-&6cA-OG&@;ݡ)r9y]|Ob16߂A$bsXi#nNtBT.M[vy&7e&%$ [v9' {OyuB# ,2Tij#BXQ t%\9.~oU;3iQx3?5Gfq5oGl_>Zr~.bu,EaKYJZ׼Q@>@ W:4Aa8}O]tYD`I?5 'f4JdsƷ13%#<xG.y' 5Ylr} .uY^s0tZt 1$,cV_^兒Xa`S["rk&>kPģ4Lx 7-[Z_sgJ:eNMHݴRTefXJE3ӕ:t[lRfXѸJ<F#l=+Ab= oW"b ynq"dCafX Ҫnsz ND#[zEn]h:賵h<tXzRu0 #EK$-]acY'UnLrfȘrO lNO Jl4~}e"irG$s觽/ƓBS(FaIi\H7:p8S G%?%A(MxD3"ߕ} rhۢg4}D?X݇nM *ԝp|JrXԞޠq?,ַM=P[ρP} !(B+o΁n[Dpe+`s\ym@>Pe.;LjE u}\?j)(gwS"d;Q?Z}( bx,'wPFWħ9IحFrfnKcF4"&4ȜFBAb1|c-*"Qa:MYqY1)y㾗f"hS~`> lq,!YoJcצZΛ'kk!6-cr( " fȁjLA+Q^$QVgh\cu50z:@@8[xv ;f:'O_wl{%`#$+xn!R%^)U$.Jx6hDj#:,4ˬElI@f!S>#.Ȟ4zG{9pL(9QVs/E;л~gs$?CKE|#A:]5#Y05]4 K+/EK@;FO4-8M|oL$}Y_l8h(z(tw[!sA^0S~njjy\4QӸs&A:7~M͑3|c!AgQ~at-;ɲs;wiL}R$0+"~`Լ-9MB-_A?z)j5I?KdNW= G߭Q]|-,٪-zBﭕO)yO̅~zɵVqddM~ M&L4prVw[XXZ\Ȇ7 5(9qBБx+lZ^)Dd-8+j$ɩDye.N@ҋhV2 cSz!Ggc|ũ gߤ >VOl1]-OVʇvڑAtq+řZOFn;KU9"4P`T=~Y/H*Tlᣞ*A7^]͉k]"^<>0ⳘuXP:. 7yænm'a>f,:S+xRƳ;U+6FV? cTg@nsV]h:X/|,u*L]BVrۿi m+4yeV9: ;3gֶəȓH>i+Ek)#31:686{MF׋͎p{dXl02 [=f %TUw*sh[Z@f-HLe,>>*\bo\M?_ܞNҡk9֥&fg!At{R"7 zQ8 =Bgt$iRm#raSPP>S n"O~F3p#F| PSxLbE3Aࣸ+,6K=cw-V(;meԔ=&pLXp\Ꮿ$AhT7aYҥ-~3mlKs@n1u6+xcfu)H2(Fu.8"1=΍{-36\TxC:0y0kMxk^EU$@NޕBN׷mķ%$cX* [+ִ5WlgvkfAFW&*2^vCWfjju2!1 ?*"^oL=Xql%Zb#Bg, er?:y FˡeQ6=}Ҍe^_K Ҁ1=,~ {@wqTK &$7T"Ѣ:b+hU,C4\z-AV㺧uᯘT.sgL! |H;CSQB{٪qfr_>H=93QSM;!>٦77sfm賊i#O)<*+n@ n 8mJ_ )T5ta )!C!QA^wEalj LRƒ^=7K.78DEۄ@IU7{9gҒ.,'W1 }uX9QUhՌR@PU_ 2r\(~2YD涡wvz0b؃2+jBZt7oMk%Beu5KC!q$^-Y l/@bqQnNlu)RFǙf3XWs+#! ˡ;f$Vv[&c*befgWѣooHԞ;NLrEӕ]XZdKJO*9'<_TߐF\o Wa]l YĔH%ˆMie57VvD찝"`H4Fۖr/ Idӯً8˘J:Cգ)>(p.=0mڨf 漑BK.Z_qQaZXL#N&;p轔0߯S08T'!;>M=â~'6iץղNg:y3̉+ʠ96y(E'Oɴ }Zefn6}&|=e:̑a p OMrӳKsV7MBowcfxWg&N>pTpcG_)z!} {JOv~=b2E#A5eaiK*^ol 3D/W2Ì̳*ݵ2%&>/ّ/ep "ESwsxw"ᴩt[ XUBF( }eȱ`SoՆ ZG2[3]u @y1G2YĴtrPNbDv^Mȷ]obw Y?Ѩt @-.%L 3oRmހh*"!xTPuܰnR̈_GF^Q@)R.9lcD+ VJܿɛ2@nU+|zNN_e7ݥ鄯椡 AG aLK@N 9^޳TcEZg0%߁ZpևWapo_yԂZ{yB|*\ީGG 7Ev6BcUwW -K6ccm& ܝv.f eK8:CsZߌLh8A+v?@?<'*w%Sԑ.f{͵S =3F=v~hуS2ý'XL^ycÅ \/3!G+.hdRpfh=Bf#L83C0RtyHf0|oSڛU$!+ʮٲ$Br'43 Uc}mm\2 _G'DP"WIH9&*ga[Zl[)آNE<5K5'SQ,UBNpBkC6OXIVŽRb0/×ڽ `LςX`!,'hmgru@6WҊ6NGĒޚdzO{>0rJ%Y*t/O`a:͂TH`D#x`mi_VvCD{桀Z%C81QÃ{hUT@ZiYt꿋uUAZ6o2Z(Jw8=zv,&ִkecJ$#krd+n1>џ_as3/Iħ7b8eL+NA0ʣ-h9Av{.wm;&Is:G$tnAi zU{QW\,5UC"Klt09C҈O[67-7TUhFU0'rBP "Ghi+=_NnBI 8OFo"Ig8㜱BZX띲F-ɓf?qjCR}D 78xB"{3j1$zufwu MOH'Fy/]a#Jrdhhz%#װ:g-%ǔ0GuDɰji(ak/lr[Ħ^7u9Z! C"YQNf [˺qLlNz\}'n g-O߃Pm ST' l'|njk5ق sESǿ5/oI $U~zey_# x4UiϻR]vH}JTXU{FԐVtQA FkOo?O+bSρ S=w\|RZkajٱ- cJRSxgA6Pth1c_||նZXef-VS/_6##BTPB@ &v?fVTr(*Ҁ'ݾC#G׻(GsAVxݤobs:B ] SԘN[`)!1u< .ySWS;-h_ҝ:;kr)8߮5C᜻D>C5<pL{1>qDdEܴBP8P:v{+em_֑R(_vA0kR%y)"Ĺc;%QܿkhE[zb_L7UR'W`QRF ׬s60Rș.: >50>DP9[P,1{u"PXHV)1&>kfJ+Am-/]"|{A-nZ9N_!7b cݬ;p6#D k:-2kDh~ mVj{|F]QtI`H Z1ֺ)Lp(unĜsG-554]kJh{#7Ϭx}9&ގ%"C~)hݷ.!oD*snᗷqn5NH5d+$G ?ȵebxFfq@h[j3}bi{\?+(hۧ #ٴ܋rЌm $]o4)Y}@/] JsFeRn7/rZ@l}i~ [ {Pb^PeI e΍C(BoMQ%I6(ySXň,Nǰ/pubcNfk-j/@b 3Wsj798vM\E4?3HMb}t@\ci 7[6ceƲP8^Ahh'BqCMp c`(FyO1j)?=ua$ rbhgp<]hpVCi(&duUń%v ]H"}f;N4\`n ^TLybj˾3C!501 Z:&Y9T|T}OK{Y,Yl&3nrS)+.ObR{hRt\=T+r'-xIP٤{6:ҥ>mPw^B"6iNo;^$80rajZ8gvΎQ%%F+Rr+5F!pu]dAŦ}Qn,p} 49tMp_ep'_Tm܅k(q5Wbץp 8tlvR }ojZcꉿL{%|ISXn-.'G̰xi\!L#5C'V7"Yq6x7$)YVj]e?o^Ѧ5u4Zizx /wlZcXB(+;폔eA͈{> hN Sz&!09vZʨ,~HwYؿi4f@K<^Do2<[}tN' C] DTX*]HJU5}mTA&ѐ}Dp%I> (4sWζIeSn_h|y`%#~~* =]nN)/^-IR\0A@*Z9ªҡtUWq.}aE'=#ڃ}w jM 7z|`$2%zi0M0j  8Lc_ߔ%˗?f:27@gHF=SZ:ػC4|=aBg?kxΟ#huqMo!ujH5i('ǯD)kS_`ԩ_4gbH8,TL+ II֠T(;*axŏv4Vբdj p!h0ǡ7gx+ V"Y!.(u4{Tp2P.R!bp$#s Hv,MC±̳r+2z9/B37NҖSvʋO'cVgZxjOP+`ֆROC d#3sixɏ9S:q鴋̓ߑh,26|j<Z!A&FR7jHBzf>]55X0@1>* C֬?v4AMv XCc~ˣur#iՑ\yu &t?ݵt셵3ޛh^T9+6;~rsXlb4u[uY.V,>OE_fT3fD|c\2qv4h}p7Ŏ*VK +s9DQTux0+\mzoE|FA C+v$<+۪[cN:#IEn M .z Br:)vnN+el|w0K&%\sRxEp65N֑;q;~8Yex!0%5 G@wdß&a9GxݙIPEPQJ+ aqc#Nqo`ה *vx#;_hJ!!c-4[b4;[àr;Щ@LA Fg27Ә Ob08ϷL dMU{h-I)aQ~=΅8 0{|U&mgP'tUjj?PmB6#C6LLJdIaNuR}[z4usľH;7j+h=qٟMvWkal‡N4KZQ.A%A.3O~X:a"$ a3OAUQ]#:TXt%pvJ*`*/iŜ4^ :a ~y \SVf%Yq#qSW^B̷,YycI P1zC{`&z xK:iA]KА+a |l!Wʖ\u2R g}!.*Gic Pr +Ӣm퉤+`SD.x/+;tO_&a@eeIJR::#4xVTB. b)d3)٠Jc[ȵo4r{.ڇN!#,0s5ǯHӋeI~3\y0eYT:A!ΘPZb5bj;Zv&oi*}ذݳՒ;SgQ6vLW"X+O8×ѦSaOp3a56*`f7豖*O[!lI+`*1Ywmu6 7]mm=x n>NRY<#÷܀N|~3_梅LWʆNbق`,zEQ(??--#ZVYjӬiN>%fBD£8IBݺNrAy.בbt jS(9F ^;T8In!0a:wB}Fb"2̀Pݰ5[H%*ϢI:Y4-ߌ8~h{,wtӣeVZ}/X rV%؆즑!3VLmB/p՚5n1n)57z:Hzfal I$/VSÚStbJ'@fC }^A'v\v3iZ$u _7-on9XًFGssR÷v1CE$ _X[:NhHDW&[0oۭI#nUjQx ZZδ8rYЃ#%HP uN88K._3˩NE~qm(?S󒮛i XI:Lߏya)#o~3[6aSdIJωjӍS]* 3%VPH2$|Wwz3k&ț4SxoeJc98q JWvsNS鬭{#2GC2*>0eǿۛ'!S)"BF/Jn"~!3If7-_ؗWCG(PMQy?ygs$uփasNmwQc*] {Lħ;91?V-ƫA^A-O""ѤUJ!!]MRmOkdӏɮ[cL OHp6g H0f2JS[nUP/l:3m ѽQ~PN N#SG#c|LgbtYXL|> hM`5RȥpEQfCC)ξʳ( Q=J*Lt:?ec]K.鷉v]c@ VwX|Şc@)?(y[i?;-_2?Q}Kqa_3xRlϹ'hKYP4p!/DzTXhO4|j!0%>kϹM+wR%NYh#3mt,Si|SZ[HjiL !,zbpE"^_P6E3QI<_^}ףoiּr9&3f*~ Ac?ɶ#xonmԫ'*Ql +4a, Z$;u{b1y!{xw&4wGij4wȅ^r(? Z+Ҥf#h+M<*M^4[#ȩx9 f@riOݰ")hw)>g%w!NM)"q6b|!Q/RP~THL]cKyX!na,m"@q&LYB` jbuh֡"7;&|iGYmqf 8Qrt|fE ';"rֹ( 2&ƜZ]%Hb@l˧"ե- +iqfwNkq)yp)~rwKhG(}zJ/V*lrE"W2܃XbZl^އAPa ;M;DA~ӹ!)2Tm$1!05XVdspfh"Jٻ73+s !L%wlIfw顏c@yJux[%@B$_,TEj9&R1l=Ȯ-J&8xhJRX,X[~JIZhpX1"˕Gԝ*KI:}By~*+_Q`e7/M#;.e I Sq~uCaΔ 7[o(k BMKdj̈DG1B@Mv<+^jI.)RGZ: bPAMM+Bm8`쬥0j(^f2!!ܘ;ϗ,]f{){RSW^fњť'Ed:'}8[/{@װn=| Go)IgZZEFjK%2fk0MB|;དྷOz6`ɍBK+u^ 2)^'T8:NF . !x^F:ik=b1tnmļvDdg*|k!?7hnl)S7n}1`_"sK2&}bv:q>/%YFyxw<]&]Ä{NeLmo]~@t33~XȠ:0@&&r}"aŽٔߦʤ5{&pѨ/7{9,-,GwД4d\)u݋V!Y/PǼYQfAEB֥I d[i'K5PÓ_hbTcpo)Կ!X[h_ H)ۅ@yڰ}?AkZpu)/*>GMIZϯ1|Rdc%؈'<ߡ]io$]D*GjvN:OKmoX߽YjFͰ4Ln/۝][. BrkmFXN5֐G~6^Н+3>YP~ ()_Vu~g T_I(5[w &k21Q~e5V*dT% U$l-} nW%ZQؓR }:TJ3 (ɋ?egMDB݈=-QE#c{\xOXIMnCP%7e(&R98٣=/>Db,IȀ(+!4;{5WQ}!:J,zm W韶=LsfNHXݕS$%@=֨TX('jjlxUs/WJ\_Fvؙ;ܓ ,?,4 ѥ`p$,$*k7Տӎ,Fb:1MgI.+t& {a@"lc+RGѶ/vƥA=4me:X;qeRt`u{V8Jz<$nE+7ܵ39P:/shUᦷ3 "O TmSOxdWM2CPv|z׍z ѭe2Cqߏ;nez'T:=aơ&v ?Fݤ6ޏ~+f3tq[oāEn֋xfEST[z}v2zVȡzpW>%"C2 5ܖ,j{b2apŷf-QޗCo\0e!$UNgEg*jSk 6:<ȴ6QǬ؀Ae¤Uxa>8Y:-@"q~D9;X3w(&}\QZH[B%ԡ'n;$Pk Jh;ɠ-rN9C#&[8U!4\l.e O;X@7C b⢿u8 &DHvJN7KU$+${ /xp҆͹ȍ}oaeA(DmB*9RA*AڛG*G4pxi[DI7&ƤOxfZMȝUُRG R4B?UW.Bb95>>TU*\wX&\\uvstx&@VbFydb-)\AN\똻7 Woyȭѿ|HeP,p$_K}g>!:Um/iO.^[YSo TOIT:zڣ3p~̻ȓk5!x`ْtΝT٥\BZ:-2໕+IcCבBgC&tezwTRwR뱒:bSN֗6%9$]8 g`_)!lQ-d]R$9~BBڔc'1>ׇ}rrbXʜr_[%cݲp=ʸӸsLЮYiDgѣ;}.×?9 m%5pR릒I6f=Xj(ѪJl{@l7R{,enV֦‡iC$[vYu^= /D>< `_192؝" [-JӹMDoM̺e CE0lG}7A@t<xռ. I'`5VJ*(d5^ҡ=|pصC}x7Ch+H Ndӵd*`lѩi 9"iIH>.Mb;XT*v)H[pr&G9ϡ,xzz*U%XϦ-=+Vv/wWΟh#GFq?h]h]%gtE+mtB-'1x^Cjg{u3CiA~{VyB: r",zIu(P+AөVv<RP!X3Ya@Ѭ4ղT v52-Mc|(}ϧ̍[w.TQ:䢭ObŪ֋{˨~M=erj4#ļ-vĀ25*QC ס9*wPh{J|8+n$TEYƗ}'5܆ c-K5omK}=^J|i)w'"Q ҥ c _ u6NPquGM J?{tR+x8Gh0Fo@lM*^Tf,]Hp vҕDcL-oZ#qZm0sFZ|vi,4v9L\X?0N7Ȱ\|9^ر -{DolSWSkv&C8}9iw !qh c(LL+b';jic3lb<pQA9XJj#m'f>w%"}#J m=Yw[)Bp\gl[֞rܜq72OeԴb"/0^ $b2ww:u;Nlrd,r/@:Xk:L. c 8rBe\M^|'C̪'dn@?yI#=l5x}Tfİg}Ib iʻR=xV;ag!gwy C_qO[c ө:v3[O:*"2\i|=jL!WGF'q(X=?%qpl[*] jqjm!&^`&{4r%6Y2"j-īZK}Υ_6*E1*<SB0/ɓ8mD%QL zX}ADfX3; 567]N #8_M1J}rE֣]NٕjsaV(.rӋ< /  VLrf Qxg[yd{% vX#lE^5Hxnr5аQj;sYJi hC09O6Bz*\xVAz|#,G{{b. :9^AV^!˫y(K\t"C.+2 *eD=pO 1?鴤Ъ ;yM䇄ZYWѤJ [/Q@0Gd2MU5{Ncܔbgn|SNRWl\M,D kA }]j$He 씱1bw4 Bgxsش}sJ zSջoy4BT,3 }~o*fw-U{?a./T̙PW MRQ3Ngp JyՔ2nflw.l-tX?vpչ4jk.teh!V|%\vMroRCkʞXn1r❺Rk K}8S#-/Z _kM~g:!$K/u0D Mr>XEьsU`У#DxJ° zöobYu2]5Zf˨ʼ}o`Rv"A*K19xc`hcڿxuaXq~ھ$;j%-%8Gq%|JeGU:C'|_5iή2Bn05i(~;˔Mo=T9*1P|5RDA!t!v8va9}cFboZ[3.I5|M^uCTuY(Q !xo4P7''O CFtoTe>eaȔU2F wdO (aՠ́p*yn}ᒲgW 0%0|ӿy{hƸ_?s}Sđpk /2zku8;SxTVƧc{LS2V2z驺" wƲt08qb 8-ʫ kp70;%z#OMͪLZ#+to@ZVO&I;MlqӖkm#.1JB/S߸oPȗ@W}3'VKЪ0RgNs °N`[;! r2FYkv|?1Q4Uo(]gĪ@>79QK\LJ |߬oqdv{Lܻ4ի>;m8gm27dVՌވˈ2T}qbGؐ*V3<|q|;Fv P-R8bN&q{`ں>\҂GqUdp)E6{6{n j&aP}bw^ /\5zS:f]癲Z,xTMžTF#ҨA\Di8^3f*q Śr@}WeoJ׷ߵ8T]j%%4fgnv2H1}>]!Bx iɟpտƌ7+G:LklxjTp\M{2!ϗi{wFH}u=bKb'*c*=Yj҄GF} +OYhYqD&eڕh煊1-Pa6cB?`M1ߩjm]PDJ*w6c슁nb*} jz{+S૊i{al}ݐ=O0",DI9͸@CP-ּ\u/0p5o4-N{˹ nʍ4|>H~T+~!/@:c_ {^9ƁL:{XbU٘ lh,-lLmBο S\fmTwaX~ a)+>z7Zޣ;o{Fg#$4aq!H NV(%uK$rS/cf"nns$k&a6「cJpB"; .՜1$apaS8s #P]쿼]_fpo@&9`gR H+$|&ͦ-E &4ovw {n ϷΟ6:~S{cmZK:~8bT(.z1'^NyR,*roLLr2uR]1 x](qr&?_)AկkH9$γz,*d3,G0)Ζ4Tq'8t3&7r;X^zll{}9ZjcNXVu o_i=s5<WhH*#}>'/2y |N'...ܩh<'ųdԔ a$CJ X`Eu4@|eG܂\Ot7k|s]3p4*:l\t]&s@UHNVu7 cI.!uׁ➘\1j{q/c#^\S,ހRwrզˤa#rS3ڮj,hP>9x&HtE/!;+&l0]EV`q6ik(583ks~y r^ʁF4Iِt o$am@enџpȃQk`WeUrɦ]@yOv+juG"^$:"v*f&#`iy2gs@ )QBg^@#]edW4r37n~k:9wA"J j vOx<2'r?)4εJy9q2ab o1]0u\GNW<.O%KX2 j=uՅ׸4ũ2,0s8&tJi)%3b.KvT|):h>Wy\>+a (j'Lwuu Dv:}1|}7vCVbpK" Y%0b&l23۽"?`jYN?/ ub,24W͸(z{?TG$ 㣲l6L+ E,8uh%s#kP <  qk]?u.m ~I G0.CEjftAE΃%99I:}^Y9‘X 3 eg[!uxrC$>r4aiG(>U$ Z__j#ջ8нZ%g 0r݆ckUʾ{·O"K*1?/lu< =pC&&% RyY_zoQ'9hm>l'>A0[HMM} }i3.iӪei*=rݘ\>PjF)]DU@/f4ǧe5S NS|0)X#E,>YF1^Sz5$OkjKZ70IK֜?16&>Ə5N ٶc<˷WQ[4X'\E~"q3!6UJ&?E~(x8ґ^ylX%PG (K^}C~Oxr3xAQiWnN[ÖGmkdU Y" *NWb.(0I\e@q~i{K/Op/Íd ķڞo[T^(pPߟu, R JCSk(뜡 CHAڛ8"emAaH:JqmfLC)vny5 1 Ea8ov)]3ug,8۷`v_.gj2:T9Zh2 G]x#groRyBd3YsZT:pqy[BE#]=d(&otc`Ci^&7VNt[opV1\qHtįU}f/_YPV(Va>- 0x(nH%fms 0X "dZ7Yu',` QZ ߑKV$v͍4lgkgɯhPK$$'FeA")$Dku!A8Yb?g$KJj&28]]e2&Ti*#޼\5u1}?Y((DŽILbwDt&<ꧻvd*ꠤ:< 9yAmԑF. `Akj&$IX˱ GF7F6d٘_U4٭WopQ&D.v-J/,cҘbUd4K Ah4UTz oO$7-ZOUkgd'{$ F:U1 ))~L|MM$rEV4 8[Ƕml"/:f›Tl_SRcX"6*>|jFjMU.mF$[*SĠɪQӝaasB@bz#mbw{~ɼ@(PQ4|1m[>|<{1eM< ]uHP~"Q1v[>)cSO~c~%ۖ+{F֐>MHRRv6;bhtҩw D| m~,ð:w}r?$CϤj 4P'еB )(;KĂ4'9mB-ĖK!:6$3)_nK:tDY.5B9FD6k6]G'2\.}--u20t5Յ Zo׫5cnurN.$;r~ҹ w SZm2ɣm[` )Vc+CTy3eUEϫ[>7eg/H=JzNLm>j 0~!ѳEIՌ^rPB/f$pҁ.fѿ"CG%lyv>^6ʒIm{^H,MJ=~Cm%z"h9bmV|wof|)h(#`Eɝ#/voBN)aREob6c=T>LϽ1%T% U*Ý.A]r%- bt?\c J"JiJ=~o%D4n/CyxNxE.Lw=V6\zIbDxXvZ=ғ:p{.k(`thq)5 94mZpo{fqIo j|;p}mه6Dd4ctrGP4õ"e4n`x 5*GwNXKK v$r{++o),ר)Tk,Xʠu4NJT3E/g8ZT>3ZZ"L×Q(3*n4foNԟ${j\~I=8ԌT(asp[$[ϩͿSFrslٿl rp ,&`R= ^hl!c'yIw˻_r/%| $9~W"_ΤDJP{=L1u*o75$畍ÄĒ BT?:& LC➞Q_S3!%pU:/لA!U/-]PkYT&CT7H zb-<8P29ct=Sj*艥bZ7g$H^ֽ怽1܂N*tuᘈBRL K];k+־d oH+0 lSZ8Jd,.Yvf=U$:6F?5_GƧ?W⪡*BZ)KB!2trø2t6v{'*F$.5|-&;64K fi.Dht~d{ź])0b6Z't2]d?7P[LhZj'.SG~/^eSd{*l8#M9I/ C}%pSRɲe쌔_!_ыel.Ì0DSЖvgg r A{@V&?dyRQ@"fAѹ G ofZ>\OfYsfdOCnvZ0WrW+{a0(uا^Ѣ;Ʈ7mTKϯLub^v\-ȡ\f '[7 &Cs[1NyߗqP8'l$]pY~ށ.AvN2$ac%g+Yex˱ɸ! Z5yˆd@K4b c!CFl?/6ɿ1>MSZ7v"s=$Y=RN;h5;Aزa_]7È {ԝ Ѕ v 3vՏ/ Bc 5Tn5¸';M\9hM΄S}.`=-"QVw腫-j0G,\JJ5#!ڍZФbBj1Y8M,2N}`AdW*g)@D8pq-7w.P!'A =6EAͨ &?l]a(8T jw JyuB+:.;$$tq)dl"".Ьƃ?׉M@{$jE>έVsH uչ{*\ϾfgPZ6iw ,,Ӌ*K5BCGg0n:۳g,ϒyzlq0Dd~Gnd:ZkJʢZ:'M0\?Dgձ7S<`=֘{V-Rǖ:vB(Ӳ V$YMjҽVMb"arUᝇudPE4Қw?yi(6C(<|=oWɅ7՞yDwqihmRCm9-FSd2( jGţ:xl U7:i+Ib!k5+Eю8+qTy`m8g =!JC,ٸܒȔC-⭎1JMaZwk]@+ 5zsT6(62uWqe6C 8PPg>rf}470A@*SRÃ>c)O^5lÉIK̥"T1Ri@ wUzUXBcoP@G}*L WD.vM-n'OZbaqKjy\rں잡f #״"suT.|o嫾 }y$V {u_ޝc>`Kjѳ*+v`Ao~LFb5сlTrʘ[bFyDR:OBtE]):W+ZV.VpNde}Mp#9@3&`瘣jD ~[zqIGͯ[H~8ߴ]6wwD$:쉧?W8%/DuU{vD@{hq ݂~|Y2e&v @Gx0&n*y>W LTm!lM oBXAƿI UhpЅd4GUR?sTx'YtgYӃ[(13~-JJyυ [:MQL p@(XW G6JtJԑk;bԏbaYpyxJ=jvx8G [AT8 iGr.Nu AyfRֵӖƇ~ ;&gz>ʺձFXqM4.@RbwW٣;#LhM׃%Q^MU'LJc49 #sg,AMTwPīT&t1Xh}.u"w?}, $Q >D5>|+k9ݿ$ @Mi5i K3Y~Ȝkg'nmˠA!rblb-AHxcz\%Lg(x s\*JnQ<WWd(ÎyuM/WnpFS&c0߆K@?ʻ%ֆnIR3ăTns[ם|Be "zޱ\'H{O"MiO}|Sm,=LtTHoG `UEI-Kb".x@ZYj<~B2=z'cnWOuٜcP1̕rߐPPD!gVw[RuWw/CE0L ) ,8\.gf/B# *g?cKW4/Ƅ VAqb=Hw2ZivD杗8}[7 /,x%0V1 A'TN33p!4x%1zyƎh;M S\cSfJ`%0W՞S"01q ϟu}.Bn< RZyL(t St)/k. ]"[pݗnA"l/*JA٭5,tBlMxI 5-eb2$<0^(`Ps-B#=A(4Y=Jdaxӎ ]UҶ7r/y{ ,IGbr@/n2D4|ӂv$r -(N`Gs9Bkg/[ : 4, wooqH5;xRlJ99+G05آ$VE6 RS#U[vD މ[r%v?(| )I|N8)r1=]-|}1跞ʅWb'&ӄ tѾ3 -Qy.N+8ɲ*qt˱ť)-5QYYGf젊Աڜ+ji͙Wh*;#|Yf. |'#q{1p%XC/ޏ :E-:.%WE/(/62۲^QY",p??l/I$?+#[q`R)*^Au׊\N|'NJjR 1w}Ef(Ukv>c%%@\eOeNWmNoEpikRfr^j|iHPpBN"~6|o=Bˤ5`9['&٫d# ]Y}_ ll3Wণ,PC.X/ՅBw@NXE,/9cq;\e#!,[OI.}/ȯ*f-a#.͝! p""BISru,Z#rYPvL5#/rK!B:#6L]̥RmڷC%2gF)E+>e!TS4L:]q"Rb?Xtg )3UC%9m%*T$EgfCH`P1$\V{k/rKL1Hs Et壕]5H|-4;tv=;倀/;5ě1'˔\V}ᯰ'{LJoXws-nɛ/Zcli 1_sV. "吠$' M5mϋ*+%z%!7mPx X ~peNPMCj#gRԽjLK(-335fHӾm3wY^z9]e*%T1p\2^֨H;\π 2%9 I ٲYC 6;"(8%0yxRчR} 9vsp/pr8w_j)=-ܘVs=P/cGpw0f콽t4G]DpǮ1D{Yw,yay <'؁ sَ`d9 u4?]6<.&Mu>uZK9<ޭ/_[?ͥ(a2EV%.86ODkz`p8!3&#O)[oVd|DDr퐼mIF;MW邼.ҰBt[H#h@ EOޜ֗ uy ЖY1͓C n9$UfP %_NaLwy;MsJyi JSALVR `1􏘯ֺ* +Y#`BAoĵhd&W?q@ğNN#Ar?be}}^j/:3BT^*.E~oov8wZ3=ã]А6}y'5Hи)GIp5eaDUY=oOI32d%oV7D@q"gzϓQjj0^ reP<ҚJ^9xÁ=^wlPKú:3!Ӎwf{0e,gKnR$!H?0C% ]|-v 5?#*BN/RN,bU AZFs(cγ nNjnÒ Kkb3n]{THsT5*TBLsr.\WZNIk{x4 ;3 V^?i[U#Ij3pcS@LlKC%}5Zk’PMUFfS 7N8Acf6ptO\9lg`Ya:Tc$3 ZNr&BHb~ʂÊ) 4 O4e>anpm E bkTfؚD5z_{ѓfBql4qCW9kJn>/%qzJη㸝\B1k /=w6"95NR;p=+J8OD;q7ډw1P{ vBYt o Ti(2=[k.2h#kg5|y >+cƵ:s8ZO笜YB@ݷ*mA(`RNְ:tG)k|3y"|]7+`tDNh^ P;Y>%+B=MzD#q@=ngtr[{YwTA<Ԓ+I,4%@Grt7#[LO ]kptų'湶Oxt8+ *Oh%'|ЧGpEA8J Y#?e؟zimX0F4_eK&`6L"HG0K+>}pH*2wR/Sl|aGdU @+Sm.My)V)zxheLqc:R Se2.XiP꿴Ĕ6D[aHYTJ#Nk6XU1|åhR%)Lj#YpǣՎUO&I P B@az6bmTxJ0K yG0؊E̔8Cw=z3~QUpP _Sb2*1M畚< X^En%\jzA]b\ه n8i}$eV/(s=@_81-[ۊY_ ~Af:k4GKV/T%ﲄ&~vJpxov>h(+fvVfw=  )-@|(}BڦKxUwK%  ݛV đ.&5x'T*<#4B %pkHmN @K?NL5s#~|[;Y~63J a|>aΦ^Y}ߣ|GwVلDOpԮ5?-dgZKA\n fp_+)*thq&=k&5шcU%f*`tVłEReuM!b~N8[<8QsY^Hnkc߻phU0آ魵"9$h]P=w1T2Y3f:% ]p3S& h_B"CjD1+9w*Vѷ2w>P5(1uUBяLFV05QNXj >2_6\)ׄ4]4* aDq#Q phWՋffPJp 092nAo0.]d6Y\הţa};J8BLuLnpVYjŗhv$[?䚑u˖̋tӨV0q* hB'{.x81CXbSj\@,D٦}_m_\>8f#p L/ W:ggg.Ay>|si *`땩 [Ϡk.YmG8w-(R0Pm9yS6[W'-2' O~; Rp ,gz x]U sZQvͣ~,JVb YaC`sMޮosK{H"~Dރa#h .vfތu".ۃ]sℂD&X)3N,Aod =2}vOy!l_.Luze|E+<]'g&exC5˶lT0FRb25 G.HjRUOjC|^["qY<Ѷ_=[L}[&Im3A$.ThZ#/>`۴ܱ&Hla63SCt aX bIo$uujt˿f~nXApTFywZXM͗3gy!i'rp;L {U~.6#lS LMpš{,{e}4"7 s[YsuHL4@G| oW!sR۽Z]SpuXz.@QqhH'Kg1rFN  WC=k]\n!x$:cL䮬Ic4`G*]6|\0f|o&J t\# K+vg+=Q _&GiIe+yc3> HtaP6!3(Wkf-&8m 6zT'*g@f~tKu+MDwlW#TFsd͋NZAe%=N8+Uapf]$t/?X܋`ۉwaT{t>>^nȔqRp;15Uu?Ұv(z<ud2 @†Ju^PM;  ٬i3 vl'ee #,ZB&</ =f`K}Ƶuzµ[I ~Vv>qNJvqNjY*^ӭvhLOZ ֮g|gv|IaHTXr|w(mlFv/A˳d7:PJOBiAoĹAzTy"༴q9|DQ&0rp4֮'I!@ߓר&ǀsri>"'9GwYxҦ+ ^9Slw KB[.YS^FBϙxzl=~>JfL0q TUTXEvhOV:N5mmle=,^6hP}4ΰ5O]o3W[ ̀SQUyR`#~sN8GhT>Z d$ko6EZJwE(CQd;q-ͱ)}EE2.@&sS$J]c㊁Tk3WLs>>zAರlZiY'ABIڳGTD,֒З4tEJZ1>a )u=Qx-i/FHR,(-Iq#q?MhCgh N=JI8U\w0jRh/2/c]rOh@ x!tB] {axg5pwض(ݚs%zO:f]s ]#l; '.f ʘ5%ri d2>ϖM\Aj4f'i Kc,'\QU?q&A7!P?ڏ pH:D~t5oZ8f(tpo"RFKyG[Rw'7e_ikM “3)&$O_]_f%x=b򞞔aYW5UZG)$gG"  ؃V긆`F = Ezҽ3jCkje>AjL"D׵ow,؈/eJ?f^זqɔ߁Sq Wa|"52Gn 6g }9[%37*YC$R'k>t*o&҅%Miv$G E6 8ڞ?wSoT*(b|숦r`4}wMٛ,.RhޯPcک5$g aFgV@hb}]oQ<B#Ou >Gt2NF`:@`ZMЏc]H&MMyoCp ~בyȼP1ύN<\J=@oGJ,l,LZN>tt<&N7Ŭ;'4ohzDZUo-x;ߛH-4Roĥ l7C3ǧܴOA(:^Vo,FN|`0Ji\qSB+*mTGA*3Ť]Mq(HJtIˆ &3~I7' Z0x2NYd:-ʜg [d{7C$GCq?H%0,KC9տox2Rq#wӸLLg`.9;Q A=jk19&̶Qk.UJ^!wMAϾpېm/omkXگWO,Ko#fA'gLeݑ="=nm7pUmpJ<]qjڎpDMp&;R!vrЪ8j6uJF<6+77q3r ofLsd +š&VVνr)&h~kYn^_L5EK$;lSsqqM!b吿<ND,y#-Z뾍Q14װ٨\TD֯ e;Czږ)=S(j^HO~죖p !ޭ2W>_&*AsIF YFRh.q5q lR຀J>",}E~BG}{6hY!Ϟ" f}Iyx9gK] ){RuJb2sAEX?oe߾$[ftg>Y7H|Z?LG2m&8+ 7+'wW e1'C[u;`{Hܰn׬l;xlw\S꜡!S^*ʜr&Z8\#C!"k@[UNÇ|7uL1vY(%kj KkPyB6Ws"PNX@uzި8\H9#*G)Aj1hwlұ*V-vA8໖1],>N֔C| 7Kywk\Њ^i2pƩ(qm;w=Id1Ը70;[w#z ]Կϵ缊.Jw-w !w] ۘ9r`LHB;|<, pԻ.%u(sm} Sա!fkΜrԓn)kL`g0rAi~-5yyE@-^Y%z t||w-Dch) @9C􂋚GcK[wͣ;?9l4EځvYKEzS"H'-+aQg2hXT[g[%A,r=$lLA׵ j!VUF+QQkΣB* 6Qg]ߜiDŽ#jv8üE Tg}qNK@U`4v*\1H >xbw4N1v)WIxj6nO'8NR6`zLH`9>pZO5U?[$[GFBE0 "z2Z6'p\#ud%\|"J7x*LG Rs#[cM끆z=Dgn:?༰ڞmk@=;푂_50`ÁRU) a[OU)83ݲ7 V;F }3k'L.i5uS.a/3d20;Pp~|^ZzxUH=@lWJ4^QVAӕm~ - j1(KfWR}>vtA]Rh3ag)E;qmj#Gp1T TĹ*8QM%OӓӒ@lC# Ώ\z$>y~k3-Y܅QXc k3`!?S&z=,S~b%&Hv UĒN4mEc.{`g^)( f*>:f+ ՀfdHhV=)V;2B1!цm-Su Bg=\0VǣumHY R;oVL * .$%I(^'~mWn ooqg˹-3:ԅ6!8 z±>vw<9HUZ ){]#&qusuexNl0 )/^ߴS?+=Pm"D=DI3U ا.~}_V|N/b!A[y{ (9)rbRW]'mꞾM&;MUmGYOaq2ytKT!lJ=kqhN>r ҿ{OPcmV ebEl(/O)'Q~5J+ko5JAB!ꖍv\~ XZdKedq{evT/ ~XE_χ+ܰ^wA7lǫ̓Gئ#eNj`,i:DgxVJfIpp1ȥO!fuxs! F^dD!>ƶBzFىU/K&D歋Hޢ/S Pqc;Kε% <EߞK1Z"94 ݳAtS᠂Ao#QagRB/xz 7Ƙ2kJAufUDk~pDp-FypIHO Ch2݂{]|KQ&/ vS;yv=9L.)Nqyuʍ+5v"<  P$ω{EFEi~7p lWB)mn*kI˱ gRh%ÛfMWzėt3#u|܂@yz/!tZkgy4#Oxדt\Eeξ\eьC@tS4=ɍXL~}?P6x\r,O&CܮYS s]_ >{8a`:S!S+.ȷBQM^^Kj@ތr | =VqEVN*뜕 k≾]OPUv2G]Tt}W\VĠB5B=뎒%>D {A8$ԨdEl7 2DZ+n#pY]>Ti04.j?`>Jֲj䗖f/P}pQnAVNrCuXűSgA''=?^kif}# '꟱vWd?ײLlfw fǭ/%Ĝ \.XS"zLk J(-;!5q[`Mnl?9gB7bIQE^R^~]׷ֹWZ%5P-cn^nQVƇĻw5ESEIsX衵4;1DR#Y"KyDЕ Igt*$!Xgn~ ze7 |ZK4ivhuToY2 bkF,3U1]r5eKU<&wjz9q>V8. :#ө z96%T)B:RmZc2g(SDWWaC6!\zq6? RX|K(ce&V? tόhQU>iaO*^ %^;"\;~}@hN`L,u.j*\v:ȀW;pǚ_\Z`7ۏ*`4Ǘ<O^.6E8E`pX5ZQf]YXt4q. i{SsIF0 d*|J^eқ}"1QTS8ءG~܊!>2O,R#iUaMgY p&Kg)Uq__ dSWn\@oA> _hQDO\@ey&Bd3E7Z>Ig<#NlCaEkqhqf0fQܗ5i~ű:RM,o0' zS^vZ=o؇{X)H]Ssm}Xsg9dt?CO"3KjXa=jF!F1ACc 6E!OnR\n6vy*F"$ 8TKIXp ă.{sx2,s= %n^|k8WH8-qoheͲPٽcK+ c{:rrV"P؝7!F\F!-f+&%aTc7YDRX-Kf2%Gs TFJK*Bߤ#obq1:)eEaYoyDxNs ή3gK( ȨM1NitWd[5L<י: \gE,Uܓ7/,R D-]a ՁEj`lGL"TIˬ'sQ|PTK1):Z8QZnX#_%5 ЗXqcweoRoSJER4quF ӀQEV:iAC MN,(Kd-ŝV4,]cS3fE`l0Mm8F ƫjeh˧F:rGםt)Pz1|*LK:T 0qւ9O<8N+AO}[l+A{XiӾ]tyrӋ21܀;1?(1n.8J.BZۦpo|GuNhfQ A\؉ũ(hDXbS= L' Nֶ.f1E ;T/)IgHG1wfh[ 0ZufYυqwV\2)8c]œfnk}3+l.f*^їXc&v lMXK{!#p2=;Ҧ }K^A+57ƒAHm6bq'lLxgk耋g}ߥ.d\f8k!te -y>XDU vbgW0|V(LfzZډ$mr$H j&J3Il4Z2|YL4) 2 y]}Z9DJcMk40R2udaFli mj,-n>_InW$ǿR"V?6u3d-2YBMJ`-嘣,~H7.@؎hmw 3tYjaJ%nq]v7ꍦ>m :ѷ9H^0ZVQ=~BŊ k{Q<Í)iU'*sau_*:g}"hn5yabQ|O E+h!km#gS t\5+DX/Gg-G2$-;Hڨp6[ݣy+BԔΡֹ 8j4d̟ eX_PʑH۔Ϯ\'FvfDc)n\F O=徻dX hN0/ c Ycqs?;0L٭:VJ`7Z 2LgUSϖAKׇyY)<.U8@E#d )S(/e0e˜&MNi;ԢN~&A6<z>އ/-ƐfVڨ[p$vefr (J+ ~aՍws8w!iͺ}|܉\Ij,bJnنp+W0"\ #Rw ꛕ@VSHks6i~Zp޼ù~żζqe>qfOZzd|>KC% y?g>~n%B0LLaUANc~C+kZ)e[&pjɧ kz j74+@G}\YmcBn̆J %S+˓x `ؑk^i֡v3)qGn{bLj,B.MliuЍЬ $6ōLUJo#+v*j@+oyD`RSyV MEEJA[M2  {8(> nu$JAUDR{ZJ!9gT.ZHQ콓Ue\7{e ^;h`7G7 F&iJx"%e(/6F?e65P*B)Xr5zux,yƈ(gr#f_ܒG/1%8F$(/w@Oza7nx|ʷϴq\3*&Jՙ5,x Xa'`*I漌װ}a H3< v 0c]mlDTgd7yyrXC7;QAoVno임J݄V\B1yГ8e U$^4#ZsgLhor~tdcƷqdvl8IX&֗1uO{G1`N_qdDE MKIHBƹuRԐ&@*!M%`F^ghzTγ$y7 XHYy gh-K# F8J$6=Tj24܊gmAkH0Rgz觮$1a81r;!ff8+e4CabK.ɔ'*3&5Blb!{Z!vYD>ŷ:H`a3'H( n^0tƂR d6a0QTsH-q\C@F R>N')+!wJ#m" dS:P.9\u]ӿl>4vQ-%qOwqJPO);ͻN@`Kr/ljRQJ+7PdwoW=GJ#Jb3)꯯va${nۗl'%:U!i5ueo+(|^M$[Shi+vq"2" .? <ק:U86{g4{~>)a*+/h3]mt͙4+zXzx=҇FsOt b C2L+xr4FJQSg<6齪h5[q yDz3lBD~gX5e_õgYn5تL 5 ZI1v PGrU"TD2@["9[g9t}`V#>"|l%iB9g͜ănߡn݇4rꦘuS2VW44:!cHÏ%E{S"JJB[m)/Xx!; 4 "tك y0:b}~KVVK=*#?aP zv(3Hb33V3Q`QEXtzT87'a9z"S`'GS-z)oFsi7bG>=PW a.n}NtGeO?ظ/;_,L^P∴Pڼg5"$H6 _$D003BZsN#Ggg!! j+I4$(^Fp RwM f-mWZP]$AB ZF+z3ݶcKYѺuRzz|bcrDtj6 &sZ47_Oƌ_%"UR|ifWnEK_霼6vvѠ(>>ȁ318?$~e7]8sh}dgi02_/LbVwN_ h[Q{9#m(F-,@Ts ,{VM!xFjp~@t8AL"{^^6I(MuYʂT$4$!ԹXD𓬙.h)ZR kϑA/)0ҍ2goH]W*ؽS̙kV3N'/3✅ Ge%JT;:ol$,읺=*AxEuN'q#-gN8CWL]'N:ȧ:ݥWi*}m>@Nyo(Y Dyly9KUhsR>E|k an7}Wȣ"pN]YHX"%Z uJ+).Y zO_c1L_zҩ44 PN6ꕇǯj8ȥv07Camk\t)WM7E#%!<B"b}VGar88U!=7[EA+GwVv7f2#4_wٷ-KKn؍[xrO}[vHHa}NSQ݈McˇS&fއ T?F?nnLL4:zؼ)B|'56$n؈ǔiހb 1M4A ʥÃ!C[w\男_C> \** W("h %׶x{gRᑥLu\Yt 69&{Tѿ:>qŚ{ݴ2'q$CV_e8Znv ̉{KEi4S\ă}~oGnE|{LRz=iьgѻ;m_d$ 2 ho_J\DWT!4fh;7wu?W|iHFDAG"k\=?,.S_l6;1I+5eKU zsIx_G]%]ybY"h뵅n/:8(i&+@+D쨦]ع|aTrwV7ǚl\ij%<;}1i;UTj`kw'$|>ԕ7GQpwN|Jl;x>4 V",MI`v?X|CxE'; kϦUѓIJQާbj0=lÊ]CxAD6O I- yI%DLH<@o p* 0SxTIcX@-v7Ztb~]8 L,_`/*_ǭh-n)WJQÿg,k9ˈPý!vXTI{칶Yw!W+?BNM#DZL~H0+~;U%>vdOX`|2 Hc>3&+mDUZ&!ҋ&&K"4WD`휦Q[VR'Ugߧ}I6q;-JjۭgC5Pտ&]k +O2L3 ^J D\Fժn! kvG m&LFZ52رmf֯g B25&!(`;rX"TqCni(XP&O {,̏XQHb& .SClW;~ iZ1 tFv mXZ9?mXa p$c΢RZQy Q aSgwbdRJ2tWp"#r:#⼕( wV"$)IN.|B b*Z38<ŧ+!9ak Dm;#YJXDJRkej!{I8Q^H0u/V?H#1(+KG|L Ӑ,dSFs,-!(wE@4WjoF 1ʌ͊dN*fl7 ~d}f9cz:k9pMS?uOR]rkV(SFZ߅XF,tNtC|m6ܧ{Ev,/g0/Xhx .uWWoK,?0BtȾ{ږ7q˥ 6ߞ̀I-ڟrEѼ -r!vaN:ѮlP}^hfm }gꏼǹ-<&${n8|<3Yn]zBxR Ɉe]M'k J6Zh|b:I 'JcuHW:?(R3Fß*}͈5MJF^"" є@>R-#GK.r}s;L_,pɅ8[߿\HId*šVs=r_0>5(Bc3mH>BAR'̀ Jr9:}!W5M| +1ܕdO'^#O0XJ-M6VaMb.T{3Y/6w F3B"J҈w؊*Bg)ӚG vh3 tH.pw]}kS+q9#ǛlSvBb^P,T{Tj;a0@s*Zֿ8&59Bl߻>zŴ;-K W- =oʋ|1hx!)_S#.C||{j0dck+ûJ?pu߇Ȉ7 y@O!)3?t  تxienmSH?ҘzWTC\l - k;%s%&MAռjFBU6>f&_v6^U>}Ňrr\(3T+ʡօRa5cdg .Kdob!`tuwnI#B+22mW{]jAd;Sa=ӭ]ƒ0'y*ʣnL\T` R_Bugr=K~HGcؽS3[leg@i^tO⋰qb3]wbYhWj,p/Nd|9?mZZ*P?9CCs;z'!tLEQЧD2l8,y;߾L{ph7WƕςD=W6g ,*hZ2r^)Sc)|%nU gV)T"``5bWl g3[ky2A6FIlվu:[5;ڎ ZU~qV 'm\8QfHGZn#]7Uh]ԩ6)G˽ӟ75eoT{6!?ۭ@á@g%{om49x0`6hnwȞmDլthO(Vxv[42;S0[ +;_61FCQFRMJ$م_~'^UNkF$W2M w A5+r$ *;>O寧Z;OmDՏ-zJp,<ίi2f'گ4^`K@;l= (1.*?v`' \?׿ lO:kFH bMpդhdL'1$̿O,5*R|r9=Ka?[@j2}M[F݁&W1;iX$ t_AexQ]`TrC )tz. v|mtJ` kίǾ srq UY`vG#?#0~.wP80X^eFRx&V>gsٽ4qә[B26A H7@_؅[X+X6r\.0v_joրlioІb08 ̇o#8,kjRvh]W!/r>4~亖lPխ' H[$7 o]GitbXr8kR+6'q]_sso޹wpoRAx_ʬYa@id-D/墟QZ07Bڥ ]Mج7 ;r0O2vlPvՏ; 6A*B]7tkrg{0re eH^j+m?Ѕga1 ɘI4.exݪQ2Ճ&W/(֤4.!$oٚg~Mv+A'9J2:Ý0pw@sjQ_Wc4Ne]FSG GAXBeG=g?N%MKL% r(ҖNV#x}Aff \dzM!G U9oˤ^p1m]+AlkqDU 7?.y |>RW"bwG!/^=ųuhޭ.&(`(MaRq东-0D'9hq@Xc eRotw:@ [ |(-jb}~PPϑj۠ ږhWړ"uمwnJ# W *I8@+fAg~I4Wteq/ݿI\FdF=5Nq}BI'*TJ*d9q+΢ pM?v[un%y[p* Wlm߭L'xx׃@RݶKTUD-c4 6){x38No||7mݠꤤ]bVLY[񦌜v 1` ytt6]ýt4}1BQ} \8`}nr<7q}%[W끧2۔z) >%WZV\ʒp h2+K7׳o'.Y޸ Ud1Wn9V_rEssr{&&Ee :E&Op,/,}?(މi)7 (&Ta2|]pd, ) #01@DufΠ&1ܿDeBZi}|,9x6-b,J,sWCc5?>!݋5wv?G+Sk㈰od1eedtzVTVU:[AcӰiFFӞϻ!{ʱ`h/!hkj9$7XTK#Up-}Ԭ>d"3g{%q |&k&//+@GYi~m=UP,(qKUE#uxJ-ZFv[)Zɚhѥ3Ord5B4 U߮nJys A[$&U͜8=%p@j=;a4 6,Xx0`8(dָ8<H{~V&s4iQ쁖]v4c[bC1ꀐ^qU! 1DOJVk6d: tf ǧr(4C /s2= ҪTSRhf;W :p S/ܑɼ=RHS)  _?̲@q>Cesnx/3<]Jv/>9% ѨJ{F'Pekd"RR Tc}{&A;Uf>c]> DUL;|e.9o-l[;oRӽ&l[>KMxBYpׁjZ]i17Ƃ7=-<᱈EW:jKG$uכ,m[5{z6"7k>"EɸHjis)V@&j%=˔c=3MHnn mÄ;oZPQS1"}=.:m)]yZz{۶sJ bGv$5E U#{ U39eJ,FƢTm FSG7&T~ 1,fۜ"n/rIU9H[{L<傇>.8+YmeBHywr\W&Ϗ(Hjy΂9On!b":V=RAx#-ި6Ye+9O1LtiDi(MꂁQR+d2j.S0LpQ-_5>$s ײğ޹VV$6~G=(69h ™FX<ɦų*ٳڀ}9B.g/P]-LowhS* E !bwIKuNwjѝ^BraJH*P6IZ@#&9;<IpteL$gil i\<,dou-\9A1z؎7FԷ_Ks``c.y.:ɖ"TdFOCު1? Y6R$dysb /#I" x44qtZ7o5r.ɛGXtfZͰs8(?"JZİ[8漧ʀ{VْL))3OqE p +ѝ0ݟ8FgGLp.-˂F#}Z³ RoN:6L)py3 @p4I;o.e< ĕ'.홙6-vBY;ġ*G 0S +8zێ/&sҋjȏ6!!!{Ȣ(_GjDLS0QKQk'Xsj엑IIS di$˕ɣzxB=1|9Pg CoL͏b48fќ#XއΉ3|/M)_D4|; 1;CVܝbɑ 1ۍ Ȑ[1187Z"̌M@,0S$tV1Qd)fuJDow9hjPd7X߲7&҂LLKVPzD\P÷ΊOM?T,¦u/TmZƐ<H#9Yutk5nOqq=ϙߨ4.8%}"ʤ 2l=<˶ Ľ ISkRy6dsr3t{j/ \S~h~GJzK`f:-!DU6 4DQ~$,qbizG(cm> *u76|xN_s_yAOpNs6ݏV_hOshSawVο(%=K=z'oT9J\2 p 2M/-Pnr3<()@I-:(q3RL L5RHHfW0MDKMcV%J 'ii=mRjBZiq5 $`X 쥤|W\!/ph Rۉ7Đ$%0Z\ظAlZw7GރfPd{g?++>c93i&0O?7#e8B/y2Q䕬A{7"ho}.0M%z֯\{];Ba}k٥ t:n5lGX؛0V TolW;Qsl!=&kGfgWӭvND>ۀV3&J5>ɔ62_Z b36 aå zi ja#KX$аM8L{8%Il4QT'^S&#T t=;ek|Ed&{z|uB6HI~em^!n,1lH/a#Ԓ"$ii؈zdڧx> n3?e%RœTqHYLFH6?M#(}^x\=^*ksG``JdəM*O;c/&[g\ӻUb?0R VU1hK/?ĻGPsx>G~cʈҺ`Ҧ,nF&p3Σ*3GAw*bJRZ*Z=ޒzZ4oC$ZHϹ1ӗ)cxy>L : *@ UN\:yB0|-2ʓqۃ9-!"k!.?;M ^T3m7BSb5+ 'k^1ZٷJّ|qKCE %~tT<Ո'mtg28V:9NN1 )lQƷx,PvţqHniQKbi *=(QeVow2vU>ɦlh#:'ZRkK-e |8>c=bTwZd,28G :4.OQnH$RLeso `y&ax*vӂ]P|2 hx\x|$ v =!ç3Ps$-<`Ry3?_Ǔ8[ćb~z'yQ]j23Wp*ke)L[ [LW~Hv}0 ,s <[QU!hLVa]T;惹#9jqH~)lsTjsQdgl$7-`]I'FC-<"2,m*Qj rl*ʱUqVk# a4CPVcckygɖwdB;͹}D]qɡaV4q4ds&ozs xI~gY4PRD5mJ0a<ɼث3_k,q2\ܣ?atgtp?mBס8N'8 ['XpU&J,J s?ǟenNCsߑ 9|Z >P@K]䖳~]Xv5#_Яߝw7\܌E)2$$((l q7!R Q$# Zr}L?6r8 aDmb~ "[Z2ŠB"ک8LC~`Ϻ9|^N)y[G9N? Pl5]`l@3>-;¥6jL#¦ASZD*$gm2"@Qh1BۛYjۉcx`>`dZ֔9k6eɯMV4* )8(Pju#L> DLV[bbp02bV:+*6ޟe&C;/Z,ehup;YMxjݞ'Efxv#JaȦ I5Lb0VȠؚ$[K$:ÍY1_diEL@4זm9TK*W4B/> 7A?f' ,ӒA{ִ#zmpL >')Y&"ܼ"\ Tl5ih́M!&!,-&-iYA(4xn^VaF?m$ QR" [ />GTߖD+3A!gL\3RCie67;=ph@cϕ54_wڊ5$Š|)=$(4- ɪc)2tɶոA^A1}kxr(~MrDhķvgzB!&ӳc_̥`ݚ_Tm֘0RwY䨱L_uH 1hH51dma$;X,o[}.dhrj}K{5a_ꎣrJs bW&yiJXFV{3rD.@B`.Ռ5p cn?/T[E<䷴q[̇>VQ10Zw6l0|1u|] )%xQPz79)3`@y#g/Y__ y5\C]N $pqp)q)[AwJu[529~:!JLF,i=#[s`͝o, 'O^H#  qQx`4Y"C*=$+N<9J#)*sdA>kTM{3{A|{DFoStJuJBfX##mޠV=Ipj Wr'kڠ 2ˢ)М1&-*"}DzMUX .S5ck7I\ژ"N+YC.z뭘H$kXGCZ0Qo}vmIx$V !*'WKpiWFJK/NCE 3[-6sFR*=0i:m֗pB4 /u8HY_'{@sS@nYgԸ#'15"KOvOU0@HX(9fa}znsWCeW?(O@j].޺2L hܘuzgEb]@h'R}"h~CQNV lpIKwd|q-U ~>?-g:u5J iXf\[8Sz˙  2“2Ti$BҤy!,&Hːd[J΀0zؾP!W!ȑ+CO뱎QcoU^\ʥ>&П¢| +X* )վH_|[ix:]yE]@򲟠{EԺ+pe30}QC">0 YZsurvey/data/mu284.rda0000644000176200001440000000051113122573422014065 0ustar liggesusersRN0FAP$>!@v+`@b`AbbjHE`!ҋs~x"@׭\gsA!{Cf6@l܀)B\'5pAmZVtEV#o?Z&ej!idʦpX;tDN/\nu5Lk0aZôi-ZLk{CTY޳YC `yQ#S{q.ˈ"?7jrܾ d:survey/data/crowd.rda0000644000176200001440000000030713122573421014326 0ustar liggesusersuPY 0,* P'藿AԔ$Kǚ`Ǜyovzʼ @*92ښI 6$p|:survey/data/hospital.rda0000644000176200001440000000067013122573422015037 0ustar liggesusersJ@5YX 7WQ m iJ2࢈K@qтѝOН>8ɜ4R?gN?dj% $L%2%џJ!2tEPr:* h,Nv1 e.*\TXb%.AHZQ(MPe*BUܩ}ީ8sP4 Eusurvey/R/0000755000176200001440000000000013122573252012012 5ustar liggesuserssurvey/R/ht.R0000644000176200001440000000163012242746122012550 0ustar liggesusers htvar.list<-function(xcheck, Dcheck){ rval<-sapply(Dcheck, function(stagei) {htvar.matrix(rowsum(xcheck,stagei$id),stagei$dcheck)}) rval } ## used in twophase2var() htvar.matrix<-function(xcheck, Dcheck){ if (is.null(dim(xcheck))) xcheck<-as.matrix(xcheck) rval<-apply(xcheck,2, function(xicheck) apply(xcheck,2, function(xjcheck) as.matrix(Matrix::crossprod(xicheck, Dcheck%*%xjcheck)) )) if(is.null(dim(rval))) dim(rval)<-c(1,1) rval } ## used in ppsvar, twophase2var ygvar.matrix<-function(xcheck,Dcheck){ ht<-htvar.matrix(xcheck,Dcheck) if (is.null(dim(xcheck))){ corr <- sum(Dcheck%*%(xcheck*xcheck)) } else { corr <- apply(xcheck,2, function(xicheck) apply(xcheck,2, function(xjcheck) sum(Dcheck%*%(xicheck*xjcheck)) )) } rval<-ht-corr } survey/R/olr.R0000644000176200001440000002431112750475505012742 0ustar liggesuserssvyolr<-function(formula, design,...) UseMethod("svyolr",design) ## ## Much of this is taken from MASS polr, thus the GPL-2 license. ## svyolr.svyrep.design<-function(formula,design,...,return.replicates=FALSE, multicore=getOption("survey.multicore")){ environment(formula)<-environment() df<-model.frame(design) pwt<-weights(design,"sampling") if (multicore && !requireNamespace("parallel", quietly=TRUE)) multicore <- FALSE rval<-suppressWarnings(MASS::polr(formula,data=df,...,Hess=TRUE,model=FALSE, weights=pwt)) start<-c(rval$coefficients,rval$zeta) rw<-weights(design,"analysis") if (multicore){ betas<-do.call(cbind,parallel::mclapply(1:ncol(rw), function(i){ w<-rw[,i] environment(formula)<-environment() m<-MASS::polr(formula,data=df,Hess=FALSE, start=start, model=FALSE, weights=w) c(m$coefficients, m$zeta) })) } else { betas<-apply(rw,2,function(w) { environment(formula)<-environment() m<-MASS::polr(formula,data=df,Hess=FALSE, start=start, model=FALSE, weights=w) c(m$coefficients, m$zeta) }) } rval$var<-svrVar(t(betas),design$scale,design$rscales,mse=design$mse, coef=start) rval$df.residual<-degf(design)-length(rval$coefficients) rval$deviance<-rval$deviance/mean(pwt) class(rval)<-"svyolr" rval$call<-sys.call() rval$call[[1]]<-as.name(.Generic) if (return.replicates) rval$replicates<-t(betas) rval } pgumbel<- function (q, loc = 0, scale = 1, lower.tail = TRUE) { q <- (q - loc)/scale p <- exp(-exp(-q)) if (!lower.tail) 1 - p else p } dgumbel<-function (x, loc = 0, scale = 1, log = FALSE) { x <- (x - loc)/scale d <- log(1/scale) - x - exp(-x) if (!log) exp(d) else d } svyolr.survey.design2<-function (formula, design, start, ..., na.action=na.omit, method = c("logistic", "probit", "cloglog", "cauchit")) { logit <- function(p) log(p/(1 - p)) fmin <- function(beta) { theta <- beta[pc + 1:q] gamm <- c(-100, cumsum(c(theta[1], exp(theta[-1]))), 100) eta <- offset if (pc > 0) eta <- eta + drop(x %*% beta[1:pc]) pr <- pfun(gamm[y + 1] - eta) - pfun(gamm[y] - eta) if (all(pr > 0)) -sum(wt * log(pr)) else Inf } gmini <- function(beta) { jacobian <- function(theta) { k <- length(theta) etheta <- exp(theta) mat <- matrix(0, k, k) mat[, 1] <- rep(1, k) for (i in 2:k) mat[i:k, i] <- etheta[i] mat } theta <- beta[pc + 1:q] gamm <- c(-100, cumsum(c(theta[1], exp(theta[-1]))), 100) eta <- offset if (pc > 0) eta <- eta + drop(x %*% beta[1:pc]) pr <- pfun(gamm[y + 1] - eta) - pfun(gamm[y] - eta) p1 <- dfun(gamm[y + 1] - eta) p2 <- dfun(gamm[y] - eta) g1 <- if (pc > 0) x * (wt * (p1 - p2)/pr) else numeric(0) xx <- .polrY1 * p1 - .polrY2 * p2 g2 <- - xx * (wt/pr) g2 <- g2 %*% jacobian(theta) if (all(pr > 0)) cbind(g1, g2) else NA+cbind(g1,g2) } gmin<-function(beta){ colSums(gmini(beta)) } m <- match.call(expand.dots = FALSE) method <- match.arg(method) pfun <- switch(method, logistic = plogis, probit = pnorm, cloglog = pgumbel, cauchit = pcauchy) dfun <- switch(method, logistic = dlogis, probit = dnorm, cloglog = dgumbel, cauchit = dcauchy) m<-model.frame(formula,model.frame(design),na.action=na.pass) Terms <- attr(m, "terms") m<-na.action(m) nao<-attr(m,"na.action") if(length(nao)) { design<-design[-nao,] } x <- model.matrix(Terms, m) xint <- match("(Intercept)", colnames(x), nomatch = 0) n <- nrow(x) pc <- ncol(x) cons <- attr(x, "contrasts") if (xint > 0) { x <- x[, -xint, drop = FALSE] pc <- pc - 1 } else warning("an intercept is needed and assumed") wt <- weights(design) offset <- model.offset(m) if (length(offset) <= 1) offset <- rep(0, n) y <- model.response(m) if (!is.factor(y)) stop("response must be a factor") lev <- levels(y) if (length(lev) <= 2) stop("response must have 3 or more levels") y <- unclass(y) q <- length(lev) - 1 Y <- matrix(0, n, q) .polrY1 <- col(Y) == y .polrY2 <- col(Y) == y - 1 if (missing(start)) { q1 <- length(lev)%/%2 y1 <- (y > q1) X <- cbind(Intercept = rep(1, n), x) fit <- switch(method, logistic = glm.fit(X, y1, wt/mean(wt), family = quasibinomial(), offset = offset), probit = glm.fit(X, y1, wt/mean(wt), family = quasibinomial("probit"), offset = offset), cloglog = glm.fit(X, y1, wt/mean(wt), family = quasibinomial("probit"), offset = offset), cauchit = glm.fit(X, y1, wt/mean(wt), family = quasibinomial("cauchit"), offset = offset)) if (!fit$converged) stop("attempt to find suitable starting values failed") coefs <- fit$coefficients if (any(is.na(coefs))) { warning("design appears to be rank-deficient, so dropping some coefs") keep <- names(coefs)[!is.na(coefs)] coefs <- coefs[keep] x <- x[, keep[-1], drop = FALSE] pc <- ncol(x) } spacing <- logit((1:q)/(q + 1)) if (method != "logit") spacing <- spacing/1.7 gammas <- -coefs[1] + spacing - spacing[q1] thetas <- c(gammas[1], log(diff(gammas))) start <- c(coefs[-1], thetas) } else if (length(start) != pc + q) stop("'start' is not of the correct length") res <- optim(start, fmin, gmin, method = "BFGS", hessian = TRUE, ...) beta <- res$par[seq_len(pc)] theta <- res$par[pc + 1:q] zeta <- cumsum(c(theta[1], exp(theta[-1]))) deviance <- 2 * res$value/mean(wt) niter <- c(f.evals = res$counts[1], g.evals = res$counts[2]) names(zeta) <- paste(lev[-length(lev)], lev[-1], sep = "|") if (pc > 0) { names(beta) <- colnames(x) eta <- drop(x %*% beta) } else { eta <- rep(0, n) } cumpr <- matrix(pfun(matrix(zeta, n, q, byrow = TRUE) - eta), , q) fitted <- t(apply(cumpr, 1, function(x) diff(c(0, x, 1)))) dimnames(fitted) <- list(row.names(m), lev) fit <- list(coefficients = beta, zeta = zeta, deviance = deviance, fitted.values = fitted, lev = lev, terms = Terms, df.residual = sum(wt) - pc - q, edf = pc + q, n = sum(wt), nobs = sum(wt), method = method, convergence = res$convergence, niter = niter) dn <- c(names(beta), names(zeta)) H <- res$hessian dimnames(H) <- list(dn, dn) fit$Hessian <- H fit$call<-sys.call() fit$call[[1]]<-as.name(.Generic) inffun<- gmini(res$par)%*%solve(H) fit$var<-svyrecvar(inffun, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) fit$df.residual<-degf(design)-length(beta) fit$na.action <- attr(m, "na.action") fit$contrasts <- cons fit$xlevels <- .getXlevels(Terms, m) class(fit) <- "svyolr" fit } vcov.svyolr<-function(object,...) object$var print.svyolr<-function (x, ...) { if (!is.null(cl <- x$call)) { cat("Call:\n") dput(cl, control = NULL) } if (length(coef(x))) { cat("\nCoefficients:\n") print(coef(x,intercept=FALSE), ...) } else { cat("\nNo coefficients\n") } cat("\nIntercepts:\n") print(x$zeta, ...) invisible(x) } coef.svyolr<-function(object,intercepts=TRUE,...) { if(intercepts) c(object$coefficients, object$zeta) else object$coefficients } summary.svyolr<-function (object, digits = max(3, .Options$digits - 3), correlation = FALSE, ...) { cc <- coef(object) pc <- length(coef(object, FALSE)) q <- length(object$zeta) coef <- matrix(0, pc + q, 3, dimnames = list(names(cc), c("Value", "Std. Error", "t value"))) coef[, 1] <- cc vc <- vcov(object) z.ind <- (pc + 1):(pc + q) gamma <- object$zeta theta <- c(gamma[1], log(diff(gamma))) jacobian <- function(theta) { k <- length(theta) etheta <- exp(theta) mat <- matrix(0, k, k) mat[, 1] <- rep(1, k) for (i in 2:k) mat[i:k, i] <- etheta[i] mat } J <- jacobian(theta) vc[z.ind, z.ind] <- J %*% vc[z.ind, z.ind] %*% t(J) coef[, 2] <- sd <- sqrt(diag(vc)) coef[, 3] <- coef[, 1]/coef[, 2] object$coefficients <- coef object$pc <- pc object$digits <- digits if (correlation) object$correlation <- (vc/sd)/rep(sd, rep(pc + q, pc + q)) class(object) <- "summary.svyolr" object } print.summary.svyolr<-function (x, digits = x$digits, ...) { if (!is.null(cl <- x$call)) { cat("Call:\n") dput(cl, control = NULL) } coef <- format(round(x$coefficients, digits = digits)) pc <- x$pc if (pc > 0) { cat("\nCoefficients:\n") print(x$coefficients[seq_len(pc), , drop = FALSE], quote = FALSE, ...) } else { cat("\nNo coefficients\n") } cat("\nIntercepts:\n") print(coef[(pc + 1):nrow(coef), , drop = FALSE], quote = FALSE, ...) if (nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep = "") if (!is.null(correl <- x$correlation)) { cat("\nCorrelation of Coefficients:\n") ll <- lower.tri(correl) correl[ll] <- format(round(correl[ll], digits)) correl[!ll] <- "" print(correl[-1, -ncol(correl)], quote = FALSE, ...) } invisible(x) } model.frame.svyolr<-function(formula, ...){ mcall <- match.call(svyolr, formula$call) design<- eval(mcall$design) formula<-eval(mcall$formula) mf<-model.frame(formula,model.frame(design)) w<-weights(design, type="sampling") if (is.null(naa<-attr(mf,"na.action"))) mf[["(weights)"]]<-w else mf[["(weights)"]]<-w[-naa] mf } survey/R/multistage.R0000755000176200001440000006404113122573066014326 0ustar liggesusers## ## Recursive estimation of linearisation variances ## in multistage samples. ## svydesign<-function(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data=NULL, nest = FALSE, check.strata = !nest, weights = NULL,pps=FALSE,...){ UseMethod("svydesign", data) } detibble<-function(data) { if ("tbl_df" %in% class(data)) as.data.frame(data) else data } svydesign.default<-function(ids,probs=NULL,strata=NULL,variables=NULL, fpc=NULL, data=NULL, nest=FALSE, check.strata=!nest,weights=NULL,pps=FALSE, variance=c("HT","YG"),...){ data<-detibble(data) variance<-match.arg(variance) if(is.character(pps)){ a<-match.arg(pps,c("brewer","overton","other")) if (!(pps %in% c("brewer","other"))) return(pps_design(ids=ids,probs=probs, strata=strata,variables=variables, fpc=fpc, data=data,method=a,call=sys.call(-1),variance=variance,...)) } else if (!is.logical(pps)){ return(pps_design(ids=ids,probs=probs, strata=strata,variables=variables, fpc=fpc, data=data,method=pps,call=sys.call(-1),variance=variance,...)) } if (!is.character(pps) || pps!="other"){ if (variance!="HT") stop("Only variance='HT' supported for this design") } ## less memory-hungry version for sparse tables interaction<-function (..., drop = TRUE) { args <- list(...) narg <- length(args) if (narg == 1 && is.list(args[[1]])) { args <- args[[1]] narg <- length(args) } ls<-sapply(args,function(a) length(levels(a))) ans<-do.call("paste",c(lapply(args,as.character),sep=".")) ans<-factor(ans) return(ans) } na.failsafe<-function(message="missing values in object"){ function(object,...){ if (NCOL(object)==0) object else { ok <- complete.cases(object) if (all(ok)) object else stop(message) } } } na.id<-na.failsafe("missing values in `id'") if(inherits(ids,"formula")) { mf<-substitute(model.frame(ids,data=data, na.action=na.id)) ids<-eval.parent(mf) if (ncol(ids)==0) ## formula was ~1 ids<-data.frame(id=1:nrow(ids)) } else{ if (is.null(ids)) stop("Must provide ids= argument") else ids<-na.id(data.frame(ids)) } na.prob<-na.failsafe("missing values in `prob'") if(inherits(probs,"formula")){ mf<-substitute(model.frame(probs,data=data,na.action=na.prob)) probs<-eval.parent(mf) } na.weight<-na.failsafe("missing values in `weights'") if(inherits(weights,"formula")){ mf<-substitute(model.frame(weights,data=data,na.action=na.weight)) weights<-eval.parent(mf) } else if (!is.null(weights)) weights<-na.weight(data.frame(weights)) if(!is.null(weights)){ if (!is.null(probs)) stop("Can't specify both sampling weights and probabilities") else probs<-as.data.frame(1/as.matrix(weights)) } na.strata<-na.failsafe("missing values in `strata'") if (!is.null(strata)){ if(inherits(strata,"formula")){ mf<-substitute(model.frame(strata,data=data, na.action=na.strata)) strata<-eval.parent(mf) } if (!is.list(strata)) strata<-data.frame(strata=strata) has.strata<-TRUE } else { has.strata <-FALSE strata<-na.strata(as.data.frame(matrix(1, nrow=NROW(ids), ncol=NCOL(ids)))) } if (inherits(variables,"formula")){ mf<-substitute(model.frame(variables,data=data,na.action=na.pass)) variables <- eval.parent(mf) } else if (is.null(variables)){ variables<-data } else variables<-do.call("data.frame",variables) na.fpc<-na.failsafe("missing values in `fpc'") if (inherits(fpc,"formula")){ mf<-substitute(model.frame(fpc,data=data,na.action=na.fpc)) fpc<-eval.parent(mf) } ## check for only one PSU: probably a typo if ((length(unique(ids[,1]))==1) && !(nest && has.strata)){ stop("Design has only one primary sampling unit") } ## force subclusters nested in clusters if (NCOL(ids)>1){ N<-ncol(ids) for(i in 2:N){ ids[,i]<-do.call("interaction", ids[,1:i,drop=FALSE]) } } ## force clusters nested in strata if (nest && has.strata && NCOL(ids)){ N<-NCOL(ids) NS<-NCOL(strata) for(i in 1:N) ids[,i]<-do.call("interaction", c(strata[,1:min(i,NS),drop=FALSE], ids[,i,drop=FALSE])) } ## check if clusters nested in strata if (check.strata && nest) warning("No point in check.strata=TRUE if nest=TRUE") if(check.strata && !is.null(strata) && NCOL(ids)){ sc<-(rowSums(table(ids[,1],strata[,1])>0)) if(any(sc>1)) stop("Clusters not nested in strata at top level; you may want nest=TRUE.") } ## force substrata nested in clusters N<-ncol(ids) NS<-ncol(strata) if (N>1){ for(i in 2:N) strata[,i]<-interaction(strata[,min(i,NS)], ids[,i-1]) } ## PPS: valid choices currently are FALSE and "brewer" if (is.logical(pps) && pps) stop("'pps' must be FALSE or a character string") if (is.character(pps)) { pps<-TRUE } ## Finite population correction: specified per observation ## Also incorporates design sample sizes formerly in nPSU if (!is.null(fpc) && !is.numeric(fpc) && !is.data.frame(fpc)) stop("fpc must be a matrix or dataframe or NULL") fpc<-as.fpc(fpc,strata, ids, pps=pps) ## if FPC specified, but no weights, use it for weights if (is.null(probs) && is.null(weights)){ if (is.null(fpc$popsize)){ if (missing(probs) && missing(weights)) warning("No weights or probabilities supplied, assuming equal probability") probs<-rep(1,nrow(ids)) } else { probs<-1/weights(fpc, final=FALSE) } } if (is.numeric(probs) && length(probs)==1) probs<-rep(probs, NROW(variables)) if (length(probs)==0) probs<-rep(1,NROW(variables)) if (NCOL(probs)==1) probs<-data.frame(probs) rval<-list(cluster=ids) rval$strata<-strata rval$has.strata<-has.strata rval$prob<- apply(probs,1,prod) rval$allprob<-probs rval$call<-match.call() rval$variables<-variables rval$fpc<-fpc rval$call<-sys.call(-1) rval$pps<-pps class(rval)<-c("survey.design2","survey.design") rval } onestrat<-function(x,cluster,nPSU,fpc, lonely.psu,stratum=NULL,stage=1,cal=cal){ if (is.null(fpc)) f<-rep(1,NROW(x)) else{ f<-ifelse(fpc==Inf, 1, (fpc-nPSU)/fpc) } if (nPSU>1) scale<-f*nPSU/(nPSU-1) else scale<-f if (all(f<0.0000001))## self-representing stratum return(matrix(0,NCOL(x),NCOL(x))) scale<-scale[!duplicated(cluster)] x<-rowsum(x,cluster) nsubset<-nrow(x) if (nsubset1 || (nPSU>1 & !getOption("survey.adjust.domain.lonely"))) x<-sweep(x, 2, colMeans(x), "-") if (nsubset==1 && nPSU>1 && getOption("survey.adjust.domain.lonely")){ warning("Stratum (",stratum,") has only one PSU at stage ",stage) if (lonely.psu=="average" && getOption("survey.adjust.domain.lonely")) scale<-NA } if (nPSU>1){ return(crossprod(x*sqrt(scale))) } else { rval<-switch(lonely.psu, certainty=crossprod(x*sqrt(scale)), remove=crossprod(x*sqrt(scale)), adjust=crossprod(x*sqrt(scale)), average=NA*crossprod(x), fail= stop("Stratum (",stratum,") has only one PSU at stage ",stage), stop("Can't handle lonely.psu=",lonely.psu) ) rval } } onestage<-function(x, strata, clusters, nPSU, fpc, lonely.psu=getOption("survey.lonely.psu"),stage=0, cal){ stratvars<- tapply(1:NROW(x), list(factor(strata)), function(index){ onestrat(x[index,,drop=FALSE], clusters[index], nPSU[index][1], fpc[index], ##changed from fpc[index][1], to allow pps(brewer) lonely.psu=lonely.psu,stratum=strata[index][1], stage=stage,cal=cal) }) p<-NCOL(x) nstrat<-length(unique(strata)) nokstrat<-sum(sapply(stratvars,function(m) !any(is.na(m)))) apply(array(unlist(stratvars),c(p,p,length(stratvars))),1:2,sum,na.rm=TRUE)*nstrat/nokstrat } svyrecvar<-function(x, clusters, stratas, fpcs, postStrata=NULL, lonely.psu=getOption("survey.lonely.psu"), one.stage=getOption("survey.ultimate.cluster")){ x<-as.matrix(x) cal<-NULL ## Remove post-stratum means, which may cut across clusters ## Also center the data using any "g-calibration" models if(!is.null(postStrata)){ for (psvar in postStrata){ if (inherits(psvar, "greg_calibration")) { if (psvar$stage==0){ ## G-calibration at population level x<-as.matrix(qr.resid(psvar$qr,x/psvar$w)*psvar$w) } else { ## G-calibration within clusters cal<-c(cal, list(psvar)) } } else if (inherits(psvar, "raking")){ ## raking by iterative proportional fitting for(iterations in 1:10){ for(margin in psvar){ psw<-attr(margin, "weights") x<- x - psw*apply(x/psw, 2, ave, margin) } } } else { ## ordinary post-stratification psw<-attr(psvar, "weights") oldw<-attr(psvar, "oldweights") if (is.null(oldw)) oldw<-rep(1,length(psw)) zeroes<-which(psw==0 & oldw==0) if (length(zeroes)) psw[zeroes]=1 psvar<-as.factor(psvar) psmeans<-rowsum(x*oldw/psw,psvar,reorder=TRUE)/as.vector(by(oldw,psvar,sum)) x<- x-psmeans[match(psvar,sort(unique(psvar))),]*psw } } } multistage(x, clusters,stratas,fpcs$sampsize, fpcs$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage,stage=1,cal=cal) } multistage<-function(x, clusters, stratas, nPSUs, fpcs, lonely.psu=getOption("survey.lonely.psu"), one.stage=FALSE,stage,cal){ n<-NROW(x) v <- onestage(x,stratas[,1], clusters[,1], nPSUs[,1], fpcs[,1], lonely.psu=lonely.psu,stage=stage,cal=cal) if (one.stage!=TRUE && !is.null(fpcs) && NCOL(clusters)>1) { v.sub<-by(1:n, list(as.numeric(clusters[,1])), function(index){ ## residuals for G-calibration using population information ## only on clusters at this stage. for(cali in cal){ if (cali$stage != stage) next j<-match(clusters[index,1],cali$index) if (length(unique(j))!=1) stop("Internal problem in g-calibration data: stage",stage, ", cluster", j) j<-j[[1]] x[index,]<-as.matrix(qr.resid(cali$qr[[j]], x[index,,drop=FALSE]/cali$w[[j]])*cali$w[[j]]) } multistage(x[index,,drop=FALSE], clusters[index,-1,drop=FALSE], stratas[index,-1,drop=FALSE], nPSUs[index,-1,drop=FALSE], fpcs[index,-1,drop=FALSE], lonely.psu=lonely.psu,one.stage=one.stage-1, stage=stage+1,cal=cal)*nPSUs[index[1],1]/fpcs[index[1],1] }) for(i in 1:length(v.sub)) v<-v+v.sub[[i]] } dimnames(v)<-list(colnames(x),colnames(x)) v } ## fpc not given are zero: full sampling. as.fpc<-function(df,strata,ids,pps=FALSE){ count<-function(x) length(unique(x)) sampsize<-matrix(ncol=ncol(ids),nrow=nrow(ids)) for(i in 1:ncol(ids)) split(sampsize[,i],strata[,i])<-lapply(split(ids[,i],strata[,i]),count) if (is.null(df)){ ## No fpc rval<-list(popsize=NULL, sampsize=sampsize) class(rval)="survey_fpc" return(rval) } fpc<-as.matrix(df) if (xor(ispopsize<-any(df>1), all(df>=1))){ big<-which(fpc>=1,arr.ind=TRUE) small<-which(fpc<1,arr.ind=TRUE) cat("record",big[1,1]," stage",big[1,2],": fpc=", fpc[big[1,,drop=FALSE]],"\n") cat("record",small[1,1]," stage ",small[1,2],": fpc=", fpc[small[1,,drop=FALSE]],"\n") stop("Must have all fpc>=1 or all fpc<=1") } if (ispopsize){ if(pps) stop("fpc must be specified as sampling fraction for PPS sampling") popsize<-fpc } else { popsize<-sampsize/(fpc) } if (any(popsize100% sampling in some strata") } if (!ispopsize && any(is.finite(popsize) & (popsize>1e10))){ big<-which(popsize>1e10 & is.finite(popsize),arr.ind=TRUE) warning("FPC implies population larger than ten billion (record",big[1,1]," stage ",big[1,2],")") } if(!pps){ ## check that fpc is constant within strata. for(i in 1:ncol(popsize)){ diff<-by(popsize[,i], list(strata[,i]), count) if (any(as.vector(diff)>1)){ j<-which(as.vector(diff)>1)[1] warning("`fpc' varies within strata: stratum ",names(diff)[j], " at stage ",i) } } } else{ ## check that fpc is constant with clusters diff<-by(popsize[,i], list(ids[,i]), count) if (any(as.vector(diff)>1)){ j<-which(as.vector(diff)>1)[1] warning("`fpc' varies within cluster: cluster ",names(diff)[j], " at stage ",i) } } rval<-list(popsize=popsize, sampsize=sampsize) class(rval)<-"survey_fpc" rval } "weights.survey_fpc"<-function(object,final=TRUE,...){ if (is.null(object$popsize) || any(object$popsize>1e12)) stop("Weights not supplied and can't be computed from fpc.") if (final) { pop<-apply(object$popsize,1,prod) samp<-apply(object$sampsize,1,prod) pop/samp } else { object$popsize/object$sampsize } } print.survey.design2<-function(x,varnames=FALSE,design.summaries=FALSE,...){ n<-NROW(x$cluster) if (x$has.strata) cat("Stratified ") un<-length(unique(x$cluster[,1])) if(n==un){ cat("Independent Sampling design") is.independent<-TRUE if (is.null(x$fpc$popsize)) cat(" (with replacement)\n") else cat("\n") } else { cat(NCOL(x$cluster),"- level Cluster Sampling design") if (is.null(x$fpc$popsize)) cat(" (with replacement)\n") else cat("\n") nn<-lapply(x$cluster,function(i) length(unique(i))) cat(paste("With (",paste(unlist(nn),collapse=", "),") clusters.\n",sep="")) is.independent<-FALSE } print(x$call) if (design.summaries){ cat("Probabilities:\n") print(summary(x$prob)) if(x$has.strata){ if (NCOL(x$cluster)>1) cat("First-level ") cat("Stratum Sizes: \n") oo<-order(unique(x$strata[,1])) a<-rbind(obs=table(x$strata[,1]), design.PSU=x$fpc$sampsize[!duplicated(x$strata[,1]),1][oo], actual.PSU=table(x$strata[!duplicated(x$cluster[,1]),1])) print(a) } if (!is.null(x$fpc$popsize)){ if (x$has.strata) { cat("Population stratum sizes (PSUs): \n") s<-!duplicated(x$strata[,1]) a<-x$fpc$popsize[s,1] names(a)<-x$strata[s,1] a<-a[order(names(a))] print(a) } else { cat("Population size (PSUs):",x$fpc$popsize[1,1],"\n") } } } if (varnames){ cat("Data variables:\n") print(colnames(x)) } invisible(x) } summary.survey.design2<-function(object,...){ class(object)<-c("summary.survey.design2",class(object)) object } print.summary.survey.design2<-function(x,...){ y<-x class(y)<-c("survey.design2",class(x)) print(y,varnames=TRUE,design.summaries=TRUE,...) } .svycheck<-function(object){ if (inherits(object,"survey.design") && !is.null(object$nPSU)) warning("This is an old-style design object. Please use as.svydesign2 to update it.") } as.svydesign2<-function(object){ if (inherits(object,"survey.design2")) return(object) if (!inherits(object,"survey.design")) stop("This function is for updating old-style survey.design objects") count<-function(x) length(unique(x)) strata<-data.frame(one=object$strata) if ((nc<-ncol(object$cluster))>1){ for(i in 2:nc){ strata<-cbind(strata,object$cluster[,i-1]) } } sampsize<-matrix(ncol=nc,nrow=nrow(object$cluster)) sampsize[,1]<-object$nPSU[match(object$strata, names(object$nPSU))] if (nc>1){ for(i in 2:nc){ split(sampsize[,i],strata[,i])<-lapply(split(object$cluster[,i],strata[,i]),count) } } if (!is.null(object$fpc)){ popsize<-sampsize popsize[,1]<-object$fpc$N[match(object$strata,object$fpc$strata)] } else popsize<-NULL if (nc>1 && !is.null(object$fpc)){ warning("Assuming complete sampling at stages 2 -",nc) } fpc<-list(popsize=popsize,sampsize=sampsize) class(fpc)<-"survey_fpc" object$fpc<-fpc object$strata<-strata object$nPSU<-NULL class(object)<-c("survey.design2","survey.design") object } is.pps<-function(x) if(is.null(x$pps)) FALSE else (x$pps!=FALSE) "[.survey.design2"<-function (x,i, ..., drop=TRUE){ if (!missing(i)){ if (is.calibrated(x) || is.pps(x) || !drop){ ## Set weights to zero: no memory saving possible ## There should be an easier way to complement a subscript.. if (is.logical(i)) x$prob[!i]<-Inf else if (is.numeric(i) && length(i)) x$prob[-i]<-Inf else { tmp<-x$prob[i,] x$prob<-rep(Inf, length(x$prob)) x$prob[i,]<-tmp } index<-is.finite(x$prob) psu<-!duplicated(x$cluster[index,1]) tt<-table(x$strata[index,1][psu]) if(any(tt==1) && getOption("survey.adjust.domain.lonely")){ warning(sum(tt==1)," strata have only one PSU in this subset.") } } else { ## subset everything. if (!is.null(x$variables)) ## phase 2 of twophase design x$variables<-"[.data.frame"(x$variables,i,..1,drop=FALSE) x$cluster<-x$cluster[i,,drop=FALSE] x$prob<-x$prob[i] x$allprob<-x$allprob[i,,drop=FALSE] x$strata<-x$strata[i,,drop=FALSE] x$fpc$sampsize<-x$fpc$sampsize[i,,drop=FALSE] x$fpc$popsize<-x$fpc$popsize[i,,drop=FALSE] } } else { if(!is.null(x$variables)) x$variables<-x$variables[,..1,drop=FALSE] } x } svytotal.survey.design2<-function(x,design, na.rm=FALSE, deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else{ if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if (length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } N<-sum(1/design$prob) total <- colSums(x/as.vector(design$prob),na.rm=na.rm) class(total)<-"svystat" attr(total, "var")<-v<-svyrecvar(x/design$prob,design$cluster, design$strata, design$fpc, postStrata=design$postStrata) attr(total,"statistic")<-"total" if (is.character(deff) || deff){ nobs<-sum(weights(design)!=0) if (deff=="replace") vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2/nobs else vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2*(N-nobs)/(N*nobs) attr(total, "deff")<-v/vsrs } return(total) } svymean.survey.design2<-function(x,design, na.rm=FALSE,deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if (length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } pweights<-1/design$prob psum<-sum(pweights) average<-colSums(x*pweights/psum) x<-sweep(x,2,average) v<-svyrecvar(x*pweights/psum,design$cluster,design$strata, design$fpc, postStrata=design$postStrata) attr(average,"var")<-v attr(average,"statistic")<-"mean" class(average)<-"svystat" if (is.character(deff) || deff){ nobs<-sum(weights(design)!=0) if(deff=="replace"){ vsrs<-svyvar(x,design,na.rm=na.rm)/(nobs) } else { if(psum\n") invisible(x) } summary.ODBCsvydesign<-function(object,...){ class(object)<-c("summary.ODBCsvydesign",class(object)) object } print.summary.ODBCsvydesign<-function(x,...){ print.survey.design2(x,varnames=TRUE,design.summaries=TRUE,...) invisible(x) } close.ODBCsvydesign<-function(con,...){ RODBC::odbcClose(con$db$connection,...) invisible(con) } open.ODBCsvydesign<-function(con,...){ oldenc<-attr(con$db$connection,"encoding") ## bug in RODBC 1.2-3 con$db$connection<-RODBC::odbcReConnect(con$db$connection,...) attr(con$db$connection,"encoding")<-oldenc con } svymean.ODBCsvydesign<-function(x, design,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename, updates=design$updates) NextMethod("svymean",design) } svytotal.ODBCsvydesign<-function(x, design,na.rm=FALSE,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename, updates=design$updates) NextMethod("svytotal",design) } svyquantile.ODBCsvydesign<-function(x, design,quantiles,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename, updates=design$updates) NextMethod("svyquantile",design) } svyglm.ODBCsvydesign<-function(formula, design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates), weights(design)) NextMethod("svyglm",design) } svyranktest.ODBCsvydesign<-function(formula, design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates), weights(design)) NextMethod("svyranktest",design) } svyplot.ODBCsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename, updates=design$updates) design$variables[weights(design)==0,]<-NA NextMethod("svyplot",design) } svycoplot.ODBCsvydesign<-function(formula,design, style=c("hexbin","transparent"), basecol="black",alpha=c(0,0.8),hexscale=c("relative","absolute"),...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates) design$variables[weights(design)==0,]<-NA NextMethod("svycoplot",design) } svyboxplot.ODBCsvydesign<-function(formula,design, ...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates) design$variables[weights(design)==0,]<-NA class(design)<-setdiff(class(design),"ODBCsvydesign") svyboxplot(formula,design,...) } svycdf.ODBCsvydesign<-function(formula,design, na.rm=TRUE, ...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates) NextMethod("svycdf",design) } svyolr.ODBCsvydesign<-function(formula,design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates), weights(design)) NextMethod("svyolr",design) } svycoxph.ODBCsvydesign<-function(formula,design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates), weights(design)) NextMethod("svycoxph",design) } svyvar.ODBCsvydesign<-function(x,design,na.rm=FALSE,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates) NextMethod("svyvar",design) } svykm.ODBCsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates) NextMethod("svykm",design) } svykappa.ODBCsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates) NextMethod("svykappa",design) } svysmooth.ODBCsvydesign<-function(formula,design,method=c("locpoly","quantreg"),bandwidth,quantile,df,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates) NextMethod("svysmooth",design) } svychisq.ODBCsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates) NextMethod("svychisq",design) } svyratio.ODBCsvydesign<-function(numerator, denominator, design,...){ design$variables<-cbind(getvars(numerator,design$db$connection, design$db$tablename,updates=design$updates), getvars(denominator,design$db$connection, design$db$tablename,updates=design$updates)) NextMethod("svyratio",design) } svyby.ODBCsvydesign<-function(formula, by, design,...){ design$variables<-cbind(getvars(formula,design$db$connection, design$db$tablename,updates=design$updates), getvars(by,design$db$connection, design$db$tablename,updates=design$updates)) class(design)<-setdiff(class(design),"ODBCsvydesign") svyby(formula,by,design,...) } svytable.ODBCsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates) NextMethod("svytable",design) } calibrate.ODBCsvydesign<-function(design,formula,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates) NextMethod("calibrate",design) } postStratify.ODBCsvydesign<-function(design, strata, population, partial = FALSE, ...) .NotYetImplemented() subset.ODBCsvydesign<-function (x, subset, ...) { e <- substitute(subset) x$variables<-getvars(make.formula(all.vars(e)), x$db$connection, x$db$tablename,updates=x$updates) r <- eval(e, x$variables, parent.frame()) r <- r & !is.na(r) x <- x[r, ] x$call <- sys.call(-1) x } dim.ODBCsvydesign<-function(x){ w<-weights(x) nrow<-length (w) ## need honest vector length, not subset size sum(w!=0) coln<-names(RODBC::sqlQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) ncol<-length(unique(c(coln,update.names))) } else ncol<-length(coln) c(nrow,ncol) } dimnames.ODBCsvydesign<-function(x){ w<-weights(x) rown<-rownames(x$cluster)[w!=0] coln<-names(RODBC::sqlQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) coln<-unique(c(coln,update.names)) } list(rown,coln) } "[.ODBCsvydesign"<-function (x, i, ..., drop = TRUE) { if (!missing(i)) { if (is.logical(i)) x$prob[!i] <- Inf else if (is.numeric(i) && length(i)) x$prob[-i] <- Inf else { tmp <- x$prob[i, ] x$prob <- rep(Inf, length(x$prob)) x$prob[i, ] <- tmp } index <- is.finite(x$prob) psu <- !duplicated(x$cluster[index, 1]) tt <- table(x$strata[index, 1][psu]) if (any(tt == 1)) { warning(sum(tt == 1), " strata have only one PSU in this subset.") } } else { if (!is.null(x$variables)) x$variables <- x$variables[, ..1, drop = FALSE] } x } survey/R/weightconstruction.R0000755000176200001440000001452612242746122016112 0ustar liggesusers## ## Functions for constructing nonresponse weights ## ## ## nonresponse(): constructor ## ## sparseCells(): identify cells with low count, high non-response weight, high total weight. ## ## neighbours(): find neighbours of specified cells ## ## joinCells(): combine two cells. ## ## reweight(): take a nonreponse object and a set of pweights or a survey design, and ## produce an updates set of weights or design ## ## weights(): extract nonresponse weights ## ## After constructing an object with nonresponse(), use sparse() to find ## cells that need combining, neighbours() to find things to combine them with, ## and joinCells() to combine them. Rinse and repeat. ## Use weights() to extract the final weights ## nonresponse<-function(sample.weights,sample.counts,population){ if (!all.equal(dimnames(sample.weights),dimnames(sample.counts))) stop("Counts and weights have different dimensions") if (!all.equal(dimnames(sample.weights),dimnames(population))) stop("sample and population dimensions do not match") index<-array(1:length(sample.weights),dim=dim(sample.weights), dimnames=dimnames(sample.weights)) rval<-list(weights=sample.weights, counts=sample.counts, population=population, call=sys.call(), index=index, joins=NULL) class(rval)<-"nonresponse" rval } print.nonresponse<-function(x,digits=max(3,getOption("digits")-4),...,max.print=5){ cat("Call: ") print(x$call) n<-length(x$index) nunq<-length(unique(as.vector(x$index))) cat(n,"original cells, ",nunq,"distinct cells remaining\n") show.all<-nunq<=max.print counts<-rowsum(as.vector(x$counts), as.vector(x$index),reorder=FALSE) ratios<-rowsum(as.vector(x$population),as.vector(x$index),reorder=FALSE)/rowsum(as.vector(x$weights),as.vector(x$index),reorder=FALSE) totals<-rowsum(as.vector(x$population),as.vector(x$index),reorder=FALSE)/counts if(length(x$joins)){ cat("Joins:\n") lapply(x$joins, cat,"\n") } if (show.all){ cat("Counts: ") cat(as.vector(signif(counts,digits))) cat("\nNR weights: ") cat(as.vector(signif(ratios,digits))) cat("\nTotal weights: ") cat(as.vector(signif(totals,digits)),"\n") } else{ print(summary(data.frame(counts=counts,NRweights=ratios,totalwts=totals))) } invisible(NULL) } "[.nonresponse"<-function(x,i,..){ expand<-as.integer(as.factor(x$index)) counts<-rowsum(as.vector(x$counts), as.vector(x$index),reorder=FALSE) ratios<-rowsum(as.vector(x$population),as.vector(x$index),reorder=FALSE)/rowsum(as.vector(x$weights),as.vector(x$index),reorder=FALSE) totals<-rowsum(as.vector(x$population),as.vector(x$index),reorder=FALSE)/counts mm<-matrix(nrow=length(i),ncol=length(dim(x$index))) ii<-i-1 for(j in 1:length(dim(x$index))){ mm[,j]<-dimnames(x$index)[[j]][(ii %% dim(x$index)[j])+1] ii<-ii/(dim(x$index)[j]) } colnames(mm)<-names(dimnames(x$index)) rownames(mm)<-i rval<-list(index=as.vector(x$index)[i], names=mm, totals=totals[expand][i],ratios=ratios[expand][i],counts=counts[expand][i]) rval$call<-sys.call() class(rval)<-"nonresponseSubset" rval } print.nonresponseSubset<-function(x,digits=max(2, getOption("digits")-4),...){ print(x$call) cat("Cells: ") cat(x$index) cat("\nIndices:\n") print(x$names) cat("Summary:\n") mm<-cbind(NRwt=signif(x$ratios,digits),wt=signif(x$totals,digits),n=x$counts) rownames(mm)<-x$index prmatrix(mm) invisible(NULL) } sparseCells<-function(object,count=0,totalweight=Inf,nrweight=1.5){ expand<-as.integer(as.factor(object$index)) counts<-rowsum(as.vector(object$counts), as.vector(object$index),reorder=FALSE) ratios<-rowsum(as.vector(object$population),as.vector(object$index),reorder=FALSE)/rowsum(as.vector(object$weights),as.vector(object$index),reorder=FALSE) totals<-rowsum(as.vector(object$population),as.vector(object$index),reorder=FALSE)/counts bad<- (ratios[expand]>nrweight | counts[expand]totalweight) i<-which(bad & !duplicated(as.vector(object$index))) if (length(i)==0) return(NULL) d<-dim(object$weights) nd<-length(d) dd<-cumprod(d) dn<-dimnames(object$weights) ii<-t(t(outer(i-1,dd,"%%")) %/% c(1,dd[-nd])) +1 keep<-!duplicated(i) ii<-ii[keep,,drop=FALSE] i<-i[keep] mm<-matrix("",ncol=NCOL(ii),nrow=NROW(ii)) colnames(mm)<-names(dimnames(object$index)) rownames(mm)<-i for(j in seq(length=length(d))){ mm[,j]<-dn[[j]][ii[,j]] } rval<-list(index=i, names=mm, totals=totals[expand][i],ratios=ratios[expand][i], counts=counts[expand][i],call=sys.call()) class(rval)<-"nonresponseSubset" rval } neighbours<-function(index,object){ d<-dim(object$index) if (length(index)==1) i<-object$index[index] else i<-sum(c(index-1,0)*cumprod(c(1,d)))+1 nd<-length(d) ## all the joins of that index ii<-which(object$index==object$index[i],arr.ind=TRUE) nii<-nrow(ii) diffs<-t(rbind(diag(rep(1,nd)),diag(rep(-1,nd)))) nbours<-matrix(nrow=2*nd*nii,ncol=nd) counter<-0 for(j in 1:nii){ nbours[counter+1:(2*nd),]<-t(ii[j,]+diffs) counter<-counter+2*nd } keep<-apply(nbours,1, function(x) all(x>0 & x<=d)) keep<- keep & !duplicated(nbours) nbours<-nbours[keep,,drop=FALSE] nbour.index<-apply(nbours,1, function(x) sum(c(x-1,0)*cumprod(c(1,d)))+1) nbour.index<-nbour.index[!(object$index[nbour.index] %in% object$index[index])] object[nbour.index] } weights.nonresponse<-function(object,...){ w<-rowsum(as.vector(object$population),as.vector(object$index))/rowsum(as.vector(object$weights),as.vector(object$index)) expand<-as.integer(as.factor(object$index)) array(w[expand],dim=dim(object$index),dimnames=dimnames(object$index)) } joinCells<-function(object,a,...){ if (!is.list(a)) a<-list(a,...) d<-dim(object$index) nd<-length(d) if (length(a[[1]])>1) a<-sapply(a,function(ai) sum(c(ai-1,0)*cumprod(c(1,d)))+1) else a<-do.call("c",a) nd<-length(d) if(length(a)<2){ warning("Can't join a single cell") return(invisible(object)) } indices<-object$index[a] if (length(unique(indices))<2){ warning("These cells are already joined") return(invisible(object)) } object$index[object$index %in% object$index[a]]<-min(object$index[a]) object$joins<-c(object$joins,list(which(object$index %in% object$index[a]))) object } survey/R/multivariate.R0000644000176200001440000001122312242746122014642 0ustar liggesusers svyfactanal<-function(formula, design, factors,n=c("none", "sample","degf","effective","min.effective"),...){ v<-svyvar(formula,design) n<-match.arg(n) s2<-diag(v) ses2<-diag(matrix(SE(v), length(s2), length(s2))) neff<-2*(s2/ses2)^2 n<-switch(n, sample=nrow(design)-1, degf=degf(design), effective=1/mean(1/neff),min.effective=min(neff), none=NA)+1 f<-factanal(covmat=v, factors=factors, n.obs=n,...) f$call<-sys.call() f } svyprcomp<-function (formula, design, center = TRUE, scale. = FALSE, tol = NULL, scores=FALSE, ...) { tms<-terms(formula) attr(tms,"intercept")<-0 mf<-model.frame(formula,model.frame(design)) naa<-attr(mf,"na.action") x <- model.matrix(tms,mf) if(length(naa)) w<-weights(design,"sampling")[-naa] else w<-weights(design,"sampling") x<-x*sqrt(w/mean(w)) x <- scale(x, center = center, scale = scale.) cen <- attr(x, "scaled:center") sc <- attr(x, "scaled:scale") if (any(sc == 0)) stop("cannot rescale a constant/zero column to unit variance") s <- svd(x, nu = 0) s$d <- s$d/sqrt(max(1, nrow(x) - 1)) if (!is.null(tol)) { rank <- sum(s$d > (s$d[1L] * tol)) if (rank < ncol(x)) { s$v <- s$v[, 1L:rank, drop = FALSE] s$d <- s$d[1L:rank] } } dimnames(s$v) <- list(colnames(x), paste("PC", seq_len(ncol(s$v)), sep = "")) r <- list(sdev = s$d, rotation = s$v, center = if (is.null(cen)) FALSE else cen, scale = if (is.null(sc)) FALSE else sc) r$weights<-w/mean(w) if (scores) r$x <- (x %*% s$v)/sqrt(r$weights) r$naa<-naa r$design<-design class(r) <- c("svyprcomp","prcomp") r } biplot.svyprcomp<-function(x, cols=c("black","darkred"),xlabs=NULL,weight=c("transparent","scaled","none"), max.alpha=0.5,max.cex=0.5,xlim=NULL,ylim=NULL,pc.biplot=FALSE,expand=1,xlab=NULL,ylab=NULL, arrow.len=0.1, ...){ if(is.null(xlabs)){ xlabs<-1:NROW(x$x) } else { if (inherits(xlabs,"formula")){ mf<-model.frame(xlabs,model.frame(x$design),na.action=na.pass) if(length(x$na.action)) mf<-mf[-x$na.action,] if(ncol(mf)>1) xlabs<-sapply(mf,paste,collapse=".") else xlabs<-as.character(mf[[1]]) } } scores<-x$x lam <- x$sdev[1:2] n <- NROW(scores) lam <- lam * sqrt(n) if (pc.biplot) lam <- lam/sqrt(n) xx<-t(t(scores[, 1:2])/lam) yy<-t(t(x$rotation[,1:2]) * lam) if (missing(xlabs)) { xlabs <- dimnames(x)[[1L]] if (is.null(xlabs)) xlabs <- 1L:n } xlabs <- as.character(xlabs) dimnames(xx) <- list(xlabs, dimnames(xx)[[2L]]) ylabs <- dimnames(yy)[[1L]] ylabs <- as.character(ylabs) dimnames(yy) <- list(ylabs, dimnames(yy)[[2L]]) weight<-match.arg(weight) w<-weights(x$design) if (length(x$na.action)) w<-w[-x$na.action] if (weight=="transparent"){ xcexs<-par("cex")*max.cex rgbcol<-col2rgb(rep(cols[1],length=length(w))) xcols<-rgb(rgbcol[1,],rgbcol[2,],rgbcol[3,],alpha=pmax(1,255*w*max.alpha/max(w)), maxColorValue=255) } else if (weight=="scaled"){ xcexs<-par("cex")*pmax(0.2, max.cex*sqrt(w/max(w))) rgbcol<-col2rgb(cols[1]) xcols<-rgb(rgbcol[1,],rgbcol[2,],rgbcol[3,],alpha=max.alpha*255, maxColorValue=255) } else if (weight=="none"){ rgbcol<-col2rgb(cols[1]) xcols<-rgb(rgbcol[1,],rgbcol[2,],rgbcol[3,],alpha=max.alpha*255, maxColorValue=255) xcexs<-par("cex")*max.cex } unsigned.range <- function(x) c(-abs(min(x, na.rm = TRUE)), abs(max(x, na.rm = TRUE))) rangx1 <- unsigned.range(xx[, 1L]) rangx2 <- unsigned.range(xx[, 2L]) rangy1 <- unsigned.range(yy[, 1L]) rangy2 <- unsigned.range(yy[, 2L]) if (is.null(xlim) && is.null(ylim)) xlim <- ylim <- rangx1 <- rangx2 <- range(rangx1, rangx2) else if (is.null(xlim)) xlim <- rangx1 else if (is.null(ylim)) ylim <- rangx2 ratio <- max(rangy1/rangx1, rangy2/rangx2)/expand on.exit(par(op)) op <- par(pty = "s") plot(xx, type = "n", xlim = xlim, ylim = ylim, col = cols[1], xlab = xlab, ylab = ylab, ...) text(xx, xlabs, cex = xcexs, col = xcols, ...) par(new = TRUE) plot(yy, axes = FALSE, type = "n", xlim = xlim * ratio, ylim = ylim * ratio, xlab = "", ylab = "", col = xcols, ...) axis(3, col = cols[2L], ...) axis(4, col = cols[2L], ...) box(col = cols[1L]) text(yy, labels = ylabs, col = cols[2L], ...) arrows(0, 0, yy[, 1L] * 0.8, yy[, 2L] * 0.8, col = cols[2L], length = arrow.len) invisible() } survey/R/dbiupdate.R0000644000176200001440000000604712750475505014115 0ustar liggesusers ## ## stored variable updates. ## updatesInfilter<-function(varlist, updates){ if (is.null(updates)) return(list(varlist=varlist)) n<-length(updates) v<-vector("list",n) for(i in n:1){ if (any(idx<-(varlist %in% names(updates[[i]])))){ v[[i]]<-varlist[idx] ups<-match(v[[i]], names(updates[[i]])) varlist<-unique(c(varlist[!idx], do.call(c, lapply(updates[[i]][ups], "[[", "inputs")))) } } list(varlist=varlist, history=v) } updatesOutfilter<-function(df, varlist,history, updates){ if (is.null(updates)) return(df) if (all(sapply(history,length)==0)) return(df) n<-length(updates) for(i in 1:n){ if (mi<-length(history[[i]])){ outputs<-vector("list", mi) for(j in 1:mi){ idx.j<-match(history[[i]][j],names(updates[[i]])) outputs[[j]]<-eval(updates[[i]][[idx.j]]$expression, df) } names(outputs)<-history[[i]] if (any(mod<-names(df) %in% names(outputs))){ df<-df[,!mod,drop=FALSE] } df<-cbind(df,outputs) } } df[, names(df) %in% varlist,drop=FALSE] } checkConnection<-function(dbconnection, error=TRUE){ if (is(dbconnection,"DBIConnection")) { if (!DBI::dbIsValid(dbconnection)) if (error) stop("Database connection is closed") else return(FALSE) } else{## RODBC ## we aren't allowed to check odbc connections in a CRAN package } invisible(TRUE) } getvars<-function (formula, dbconnection, tables, db.only = TRUE, updates=NULL, subset=NULL) { checkConnection(dbconnection) if (is.null(formula)) return(NULL) if (inherits(formula, "formula")) { var0<- all.vars(formula) } else if (is.character(formula)){ var0<-formula } else { return(formula) } infilter<-updatesInfilter(var0, updates) if (db.only) { in.db <- infilter$varlist } else { query <- sub("@tab@", tables, "select * from @tab@ limit 1") if (is(dbconnection,"DBIConnection")) oneline <- DBI::dbGetQuery(dbconnection, query) else ##ODBC oneline <- RODBC::sqlQuery(dbconnection, query) in.db <- infilter$varlist[infilter$varlist %in% names(oneline)] } query <- paste("select", paste(in.db, collapse = ", "), "from", tables) if (is(dbconnection, "DBIConnection")) df <- DBI::dbGetQuery(dbconnection, query) else ##ODBC df<-RODBC::sqlQuery(dbconnection, query) if (!is.null(subset)) df<-df[subset,,drop=FALSE] df<-updatesOutfilter(df, var0, infilter$history, updates) is.string <- sapply(df, is.character) if (any(is.string)) { for (i in which(is.string)) df[[i]] <- as.factor(df[[i]]) } df } update.DBIsvydesign<-function(object, ...){ dots <- substitute(list(...))[-1] newnames <- names(dots) updates<-lapply(dots, function(dot){ list(inputs=all.vars(dot),expression=dot) }) if (is.null(object$updates)) object$updates<-list(updates) else object$updates<-c(object$updates, list(updates)) object } update.ODBCsvydesign<-update.DBIsvydesign survey/R/regtest.R0000755000176200001440000002175212750511434013624 0ustar liggesusers##deviance methods not exported, used by method="LRT" deviance.svycoxph<-function(object,...) 2 * (object$ll[1] - object$ll[2]) deviance.coxph<-function(object,...) 2 * (object$loglik[1] - object$loglik[2]) regTermTest<-function(model, test.terms, null=NULL, df=NULL, method=c("Wald","LRT"), lrt.approximation="saddlepoint"){ method<-match.arg(method) canonicalOrder<-function(term){ tt<-strsplit(term,":") tt<-lapply(tt,sort) sapply(tt,paste,collapse=":") } if(inherits(test.terms,"formula")) test.terms<-attr(terms(test.terms),"term.labels") okbeta<-!is.na(coef(model,na.rm=FALSE)) ## na.rm for svyglm tt<-attr(terms(model),"term.labels") aa<-attr(model.matrix(model),"assign")[okbeta] if((inherits(model,"coxph")|| inherits(model,"svyloglin") || inherits(model,"svyolr")) && attr(terms(model),"intercept")) aa<-aa[-1] index<-which(aa %in% match(canonicalOrder(test.terms),canonicalOrder(tt))) if (any(is.na(index))) stop("Terms didn't match:",canonicalOrder(test.terms),canonicalOrder(tt)) beta<-coef(model)[index] if (!is.null(null)) beta<-beta-null V<-vcov(model)[index,index] ## this should be rewritten as methods, but that's not happening any time soon. if (is.null(df)){ if (inherits(model,"svyglm")) df<-model$df.residual else if (inherits(model, "svycoxph")) df<-model$degf.resid else if (inherits(model,"lm")) df<-model$df.residual else if (inherits(model,"coxph")) df<-model$n-length(coef(model)) else if (inherits(model, "MIresult")) df<-min(model$df[index]) else if (inherits(model,"svyloglin")) df<-model$df+1-length(index) else if (inherits(model, "svyolr")) df<-model$df.residual else df<-length(resid(model))-length(coef(model)) } if (method=="LRT"){ if (inherits(model,"svyglm")) V0<-model$naive.cov else if (inherits(model, "svycoxph")) V0<-model$inv.info else if (inherits(model,"lm")) V0<-vcov(model) else if (inherits(model,"coxph")){ if (is.null(model$naive.var)) V0<-model$var else V0<-model$naive.var } else if (inherits(model,"svyolr")) { V0<-solve(model$Hess) } else stop("method='LRT' not supported for this model") V0<-V0[index,index] test.formula<-make.formula(test.terms)[[2]] if (!("formula") %in% names(model$call)) names(model$call)[[2]]<-"formula" model0<-eval(bquote(update(model, .~.-(.(test.formula))))) chisq<-deviance(model0)-deviance(model) misspec<-eigen(solve(V0)%*%V, only.values=TRUE)$values if (df==Inf) p<-pchisqsum(chisq,rep(1,length(misspec)),misspec,method=lrt.approximation,lower.tail=FALSE) else p<-pFsum(chisq,rep(1,length(misspec)),misspec,ddf=df,method=lrt.approximation,lower.tail=FALSE) rval<-list(call=sys.call(),mcall=model$call,chisq=chisq, df=length(index),test.terms=test.terms, p=p,lambda=misspec,ddf=df) class(rval)<-"regTermTestLRT" return(rval) } chisq<-beta%*%solve(V)%*%beta if (df1) cat("(scale factors: ",signif(x$lambda/mean(x$lambda),2),")") else cat("df=1") if (!is.null(x$ddf) && is.finite(x$ddf)) cat("; denominator df=",x$ddf) cat("\n") invisible(x) } svycontrast<-function(stat, contrasts,...) UseMethod("svycontrast") match.names <- function(nms,contrasts){ l<-length(nms) ll<-sapply(contrasts,length) if (all(ll==l)) return(contrasts) if (l==0) stop("No names to match") if( !all( unlist(sapply(contrasts,names)) %in% nms)) stop("names not matched") lapply(contrasts, function(con) { r<-numeric(l) names(r)<-nms r[names(con)]<-con r }) } contrast<-function(coef,var,contrasts){ nas<-is.na(var[,1]) drop<-nas & apply(contrasts,2,function(v) all(v==0)) if(any(drop)){ contrasts<-contrasts[,!drop,drop=FALSE] coef<-coef[!drop] var<-var[!drop,!drop,drop=FALSE] } if (any(is.na(coef))){ badin<-is.na(coef) bad<-((contrasts!=0)%*%is.na(coef))>0 rval<-rep(NA,NROW(contrasts)) rval[!bad]<-contrasts[!bad,!badin,drop=FALSE]%*%coef[!badin] v<-matrix(NA,length(rval),length(rval)) v[!bad,!bad]<-contrasts[!bad,!badin,drop=FALSE]%*%var[!badin,!badin,drop=FALSE]%*%t(contrasts[!bad,!badin,drop=FALSE]) dimnames(v)<-list(names(rval),names(rval)) rval<-drop(rval) attr(rval, "var")<-v } else{ rval<-drop(contrasts%*%coef) v<-contrasts%*%var%*%t(contrasts) dimnames(v)<-list(names(rval),names(rval)) attr(rval,"var")<-v } rval } svycontrast.svystat<-function(stat, contrasts,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.call(contrasts[[1]])){ rval<-nlcon(contrasts,as.list(coef(stat)), vcov(stat)) class(rval)<-"svrepstat" attr(rval,"statistic")<-"nlcon" return(rval) } contrasts<-match.names(names(coef(stat)),contrasts) contrasts<-do.call(rbind,contrasts) coef<-contrast(coef(stat),vcov(stat),contrasts) class(coef)<-"svystat" attr(coef,"statistic")<-"contrast" coef } svycontrast.svystat<-function(stat, contrasts,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.call(contrasts[[1]])){ rval<-nlcon(contrasts,as.list(coef(stat)), vcov(stat)) class(rval)<-"svrepstat" attr(rval,"statistic")<-"nlcon" return(rval) } contrasts<-match.names(names(coef(stat)),contrasts) contrasts<-do.call(rbind,contrasts) coef<-contrast(coef(stat),vcov(stat),contrasts) class(coef)<-"svystat" attr(coef,"statistic")<-"contrast" coef } svycontrast.svyolr<-function(stat, contrasts,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.call(contrasts[[1]])){ rval<-nlcon(contrasts,as.list(c(coef(stat),stat$zeta)), vcov(stat)) class(rval)<-"svystat" attr(rval,"statistic")<-"nlcon" return(rval) } contrasts <- match.names(names(coef(stat)), contrasts) contrasts<-do.call(rbind,contrasts) coef<-contrast(as.vector(as.matrix(coef(stat))), vcov(stat),contrasts) class(coef)<-"svystat" attr(coef,"statistic")<-"contrast" coef } svycontrast.svyglm<-svycontrast.svystat svycontrast.svycoxph<-svycontrast.svystat svycontrast.svyby<-svycontrast.svystat svycontrast.default<-svycontrast.svystat svycontrast.svrepstat<-function(stat, contrasts,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.call(contrasts[[1]])){ if (is.list(stat)){ ##replicates rval<-list(nlcon=nlcon(contrasts,as.list(coef(stat)),vcov(stat))) colnames(stat$replicates)<-names(coef(stat)) rval$replicates<-t(apply(stat$replicates,1, function(repi) nlcon(datalist=as.list(repi), exprlist=contrasts, varmat=NULL))) attr(rval$nlcon,"statistic")<-"nlcon" } else { rval<-nlcon(contrasts,as.list(coef(stat)), vcov(stat)) attr(rval,"statistic")<-"nlcon" } class(rval)<-"svrepstat" return(rval) } contrasts<-match.names(names(coef(stat)), contrasts) contrasts<-do.call(rbind,contrasts) coef<-contrast(coef(stat), vcov(stat), contrasts) if (is.list(stat)){ coef<-list(contrast=coef, replicates=crossprod(stat$replicates, contrasts)) } class(coef)<-"svrepstat" attr(coef,"statistic")<-"contrast" coef } nlcon<-function(exprlist, datalist, varmat){ if (!is.list(exprlist)) exprlist<-list(contrast=exprlist) dexprlist<-lapply(exprlist, function(expr) deriv(expr, names(datalist))[[1]]) values<-lapply(dexprlist, function(dexpr) eval(do.call(substitute, list(dexpr,datalist)))) if (is.null(varmat)) return(do.call(c,values)) jac<-do.call(rbind,lapply(values, function(value) attr(value,"gradient"))) var<-jac%*%varmat%*%t(jac) values<-do.call(c, values) dimnames(var)<-list(names(values),names(values)) attr(values, "var")<-var values } survey/R/bootstrap.R0000644000176200001440000000567412242746122014166 0ustar liggesusers subbootstratum<-function(psu,replicates){ upsu<-sample(unique(psu)) n<-length(upsu) replicate(replicates, table(factor(sample(upsu, length(upsu)-1,replace=TRUE), levels=unique(psu))))*n/(n-1) } bootstratum<-function(psu, popsize, replicates){ upsu<-sample(unique(psu)) if (is.null(popsize)){ replicate(replicates, table(factor(sample(upsu,length(upsu),replace=TRUE), levels=unique(psu)))) } else { replicate(replicates, table(factor(sample(rep(upsu,length=popsize), length(upsu)), levels=unique(psu)))) } } bootweights<-function(strata, psu, replicates=50, fpc=NULL, fpctype=c("population","fraction","correction"), compress=TRUE){ fpctype<-match.arg(fpctype) index<-match(psu,psu[!duplicated(psu)]) upsu<-unique(psu) strata<-as.character(strata) weights<-matrix(nrow=length(upsu),ncol=replicates) ustrata<-strata[!duplicated(psu)] ufpc<-fpc[!duplicated(psu)] for(s in unique(ustrata)){ this.stratum<-ustrata==s npsu<-length(unique(upsu[this.stratum])) if (is.null(fpc)) weights[this.stratum,]<-bootstratum(upsu[this.stratum],NULL,replicates) else { this.fpc<-ufpc[this.stratum] if (length(unique(this.fpc))>1) stop("More than one fpc in stratum",s) this.fpc<-this.fpc[1] if (fpctype=="population" && this.fpc 100*npsu) warning("Sampling fraction <1% in stratum",s," treated as zero.") weights[this.stratum,]<-bootstratum(upsu[this.stratum], popsize=this.fpc,replicates=replicates) } } ## harmonic mean of stratum sizes psu.per.strata<-1/mean(1/table(ustrata)) if (compress){ rw<-list(weights=weights,index=index) class(rw)<-"repweights_compressed" } else { rw<-weights[index,] } list(repweights=rw, scale=psu.per.strata/((psu.per.strata-1)*(replicates-1)), rscales=rep(1,replicates)) } subbootweights<-function(strata, psu, replicates=50, compress=TRUE){ index<-match(psu,psu[!duplicated(psu)]) upsu<-unique(psu) strata<-as.character(strata) weights<-matrix(nrow=length(upsu),ncol=replicates) ustrata<-strata[!duplicated(psu)] for(s in unique(ustrata)){ this.stratum<-ustrata==s npsu<-length(unique(upsu[this.stratum])) weights[this.stratum,]<-subbootstratum(upsu[this.stratum],replicates) } if (compress){ rw<-list(weights=weights,index=index) class(rw)<-"repweights_compressed" } else { rw<-weights[index,] } list(repweights=rw, scale=1/(replicates-1), rscales=rep(1,replicates)) } survey/R/loglin.R0000644000176200001440000001535212242746122013427 0ustar liggesuserssvyloglin<-function(formula,design,...) UseMethod("svyloglin",design) withOptions<-function(optlist,expr){ oldopt<-options(optlist) on.exit(options(oldopt)) expr<-substitute(expr) eval.parent(expr) } tr<-function(m)sum(diag(m)) tr2<-function(m) sum(m*m) svyloglin.survey.design<-function(formula,design,...){ if (length(formula)!=2) stop("needs a one-sided formula") mdata<-model.frame(design)[,all.vars(formula)] mf<-model.frame(formula,mdata,na.action=na.pass) n<-as.numeric(nrow(mf)) hatp<-svymean(~I(do.call(interaction,mf)),design,na.rm=TRUE) dat<-do.call(expand.grid,lapply(mdata,function(x) sort(unique(x)))) dat<-as.data.frame(lapply(dat,as.factor)) dat$y<-coef(hatp)*n ff<-update(formula, y~.) m1<-withOptions(list(contrasts=c("contr.sum","contr.poly")), glm(ff, data=dat,family=quasipoisson) ) P1<-(diag(fitted(m1)/n)-tcrossprod(fitted(m1)/n))/n V<-vcov(hatp) XX<-model.matrix(m1)[,-1,drop=FALSE] XX<-sweep(XX,2,colMeans(XX)) Vtheta<-solve(t(XX)%*%P1%*%XX)%*%(t(XX)%*%V%*%XX)%*%solve(t(XX)%*%P1%*%XX)/(n*n) rval<-list(model=m1, var=Vtheta, prob.table=hatp,df.null=degf(design),n=n) call<-sys.call() call[[1]]<-as.name(.Generic) rval$call<-call class(rval)<-"svyloglin" rval } print.svyloglin<-function(x,...) {cat("Loglinear model: ");print(x$call)} coef.svyloglin<-function(object,...,intercept=FALSE){ if (intercept) coef(object$model) else coef(object$model)[-1] } vcov.svyloglin<-function(object,...) object$var deviance.svyloglin<-function(object,...) deviance(object$model) degf.svyloglin<-function(design,...) length(design$prob.table)-length(coef(design))-1 terms.svyloglin<-function(x,...) terms(x$model,...) model.matrix.svyloglin<-function(object,...) model.matrix(object$model,...) update.svyloglin<-function(object, formula,...){ n<-object$n model<-withOptions(list(contrasts=c("contr.sum","contr.sum")), update(object$model, formula,data=object$model$model)) P1<-(diag(fitted(model)/n)-tcrossprod(fitted(model)/n))/n V<-vcov(object$prob.table) XX<-model.matrix(model)[,-1,drop=FALSE] XX<-sweep(XX,2,colMeans(XX)) A<-solve(t(XX)%*%P1%*%XX) B<-t(XX)%*%V%*%XX Vtheta<-A%*%B%*%A/(n*n) rval<-list(model=model, var=Vtheta, prob.table=object$prob.table, df.null=object$df.null,n=n) call<-sys.call() call[[1]]<-as.name(.Generic) rval$call<-call class(rval)<-"svyloglin" rval } anova.svyloglin<-function(object,object1,...,integrate=FALSE){ if(length(coef(object1))1 && method!="brewer") stop("Multistage PPS sampling not supported with this method") rval<-svydesign(ids=ids,strata=strata,weights=NULL, probs=probs,fpc=fpc,data=data,pps="other") deltacheck<-make_pps_covmat(rval, method) rval$dcheck=deltacheck rval$variance<-variance rval$call<-call class(rval) <- c("pps","survey.design") rval } ppsmat<-function(jointprob, tolerance=0.0001){ if ((!is.matrix(jointprob)) || !(NROW(jointprob)==NCOL(jointprob))) stop("jointprob must be a square matrix") rval<-list(pij=jointprob, tolerance=tolerance,call=sys.call()) class(rval)<-"ppsmat" rval } print.ppsmat<-function(x,...) { cat("PPS: Joint probability matrix: ") print(x$call) invisible(x) } pps_design.ppsmat<-function(method,ids,strata=NULL, probs=NULL, fpc=NULL,variables=variables, subset, data,call=sys.call(),variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported") rval<-svydesign(ids=ids,strata=strata,weights=NULL,variables=variables, probs=probs,fpc=fpc,data=data,pps="other") deltacheck<-pi2Dcheck(method$pij,method$tolerance) rval$variance<-variance rval$dcheck<-list(list(id=1:nrow(method$pij), dcheck=deltacheck)) rval$call<-call class(rval) <- c("pps","survey.design") rval } HR<-function(psum=NULL, strata=NULL){ if (is.null(psum)) { ## estimate rval<-list(pbar=NULL,call=sys.call()) } else if (is.data.frame(strata) || is.matrix(strata)){ #redundant pbar<-lapply(1:NCOL(strata), function(i){ psum[!duplicated(strata[,i]),i]}) strata<-lapply(1:NCOL(strata), function(i){ strata[!duplicated(strata[,i]),i]}) rval<-list(pbar=pbar, strata=strata,call=sys.call()) } else if (is.null(strata) && is.numeric(psum) && length(psum)==1){ ## single number rval<-list(pbar=list(psum),strata=list(1), call=sys.call()) } else{ ## non-redundant list rval<-list(pbar=psum, strata=strata,call=sys.call()) } class(rval)<-"HR" rval } print.HR<-function(x,...) { cat("PPS: Hartley-Rao correction: ") print(x$call) invisible(x) } pps_design.HR<-function(method,ids,strata=NULL, probs=NULL, fpc=NULL, subset, data,call=sys.call(),variables=variables,variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported with this method") rval<-svydesign(ids=ids,strata=strata,weights=NULL, probs=probs,fpc=fpc,data=data,pps="other") if (is.null(method$pbar)) ## sample estimate of sum(p^2/n) deltacheck<-multi.HR1Dcheck(rval$cluster,rval$strata,rval$allprob) else deltacheck<-multi.HRDcheck(rval$cluster,rval$strata,rval$allprob, method$pbar) rval$dcheck=deltacheck rval$variance<-variance rval$call<-call class(rval) <- c("pps","survey.design") rval } print.pps<-function(x,...){ cat("Sparse-matrix design object:\n ") print(x$call) } summary.pps<-function(object,...){ class(object)<-"summary.pps" object } print.summary.pps<-function(x,...,varnames=TRUE){ cat("Two-phase sparse-matrix design:\n ") print(x$call) cat("Sampling probabilities:\n") print(summary(x$prob)) if (varnames){ cat("Data variables:\n") print(names(x$variables)) } invisible(x) } ppsvar<-function(x,design){ postStrata<-design$postStrata est<-design$variance ##Yates-Grundy or Horvitz-Thompson if (!is.null(postStrata)){ for (psvar in postStrata){ if (inherits(psvar, "greg_calibration")) { if (psvar$stage==0){ ## G-calibration at population level y<-qr.resid(psvar$qr,y/psvar$w)*psvar$w } else { ## G-calibration within clusters stop("calibration within clusters not yet available for PPS designs") } } else { ## ordinary post-stratification psw<-attr(psvar, "weights") postStrata<-as.factor(psvar) psmeans<-rowsum(y/psw,psvar,reorder=TRUE)/as.vector(table(factor(psvar))) x<- y-psmeans[match(psvar,sort(unique(psvar))),]*psw } } } dcheck<-design$dcheck if (length(dcheck)!=1) stop("Multistage not implemented yet") rval<-switch(est,HT=htvar.matrix(rowsum(x,dcheck[[1]]$id,reorder=FALSE),dcheck[[1]]$dcheck), YG=ygvar.matrix(rowsum(x,dcheck[[1]]$id,reorder=FALSE),dcheck[[1]]$dcheck), stop("can't happen")) rval } svytotal.pps<-function(x,design, na.rm=FALSE, deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,model.frame(design), na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if(length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } N<-sum(1/design$prob) total <- colSums(x/as.vector(design$prob),na.rm=na.rm) class(total)<-"svystat" attr(total, "var")<-v<-ppsvar(x/design$prob,design) attr(total,"statistic")<-"total" if (is.character(deff) || deff){ nobs<-NROW(design$cluster) if (deff=="replace") vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2*(N-nobs)/N else vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2 attr(total, "deff")<-v/vsrs } return(total) } svymean.pps<-function(x,design, na.rm=FALSE,deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,model.frame(design) ,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) if (any(nas>0)) design<-design[nas==0,] x[nas>0,]<-0 } pweights<-1/design$prob psum<-sum(pweights) average<-colSums(x*pweights/psum) x<-sweep(x,2,average) v<-ppsvar(x*pweights/psum,design) attr(average,"var")<-v attr(average,"statistic")<-"mean" class(average)<-"svystat" if (is.character(deff) || deff){ nobs<-nrow(design) if(deff=="replace"){ vsrs<-svyvar(x,design,na.rm=na.rm)/(nobs) } else { if(psum1)){ a<-rep(a,df) } tr<-mean(a) tr2<-mean(a^2)/(tr^2) scale=tr*tr2 ndf=length(a)/tr2 rval<-pf(x/ndf/scale, ndf,ddf,lower.tail=lower.tail) if (method=="saddlepoint"){ a<-c(a,-x/ddf) df<-c(df,ddf) if(any(df>1)) a<-rep(a,df) s<-saddle(0,a) if (!is.na(s)) { if (lower.tail) rval<-1-s else rval<-s } } rval } } survey/R/svysmooth.R0000644000176200001440000000737612750511434014225 0ustar liggesuserssvysmooth<-function(formula,design,...) UseMethod("svysmooth", design) svysmooth.default<-function(formula, design,method=c("locpoly","quantreg"),bandwidth=NULL,quantile,df=4,...){ switch(match.arg(method), locpoly=svylocpoly(formula,design,bandwidth=bandwidth,...), quantreg=svyrqss(formula,design,quantile=quantile,df=df,...) ) } fitted.rq<-function(object,...) object$x%*% object$coefficients/object$weights svyrqss<-function(formula,design,quantile=0.5,df=4,...){ mf<-model.frame(formula, model.frame(design), na.action=na.omit) naa<-attr(mf,"na.action") tt<-attr(terms(formula),"term.labels") df<-rep(df, length=length(tt)) quantile<-rep(quantile, length=length(tt)) if (length(formula)==3){ density<-FALSE } else { density<-TRUE stop("type='quantreg' does not do densities") } w<-weights(design,type="sampling") if (length(naa)) w<-w[-naa] environment(formula)<-environment() ll<-vector("list", length(tt)) for(i in 1:length(tt)){ termi<-as.name(tt[i]) ff<-eval(bquote(update(formula,.~splines::bs(.(termi),df=.(df[i]))))) rqfit<-quantreg::rq(ff, tau=quantile[i],weights=w,data=mf,...) xx<-mf[,i+1] oo<-order(xx) ll[[i]]<-list(x=xx[oo],y=fitted.rq(rqfit)[oo]) } names(ll)<-attr(terms(formula),"term.labels") attr(ll,"call")<-sys.call(-2) attr(ll,"density")<-density if(density) attr(ll,"ylab")<-"Density" else attr(ll,"ylab")<-deparse(formula[[2]]) class(ll)<-"svysmooth" ll } svylocpoly<-function(formula, design, ngrid=401, xlim=NULL, ylim=NULL, bandwidth=NULL,...){ mf<-model.frame(formula,model.frame(design)) mm<-model.matrix(terms(formula),mf) if(attr(terms(formula),"intercept")) mm<-mm[,-1,drop=FALSE] naa<-attr(mf,"na.action") if (length(formula)==3){ Y<-model.response(mf) density<-FALSE } else density<-TRUE if (is.null(xlim)){ xlim<-apply(mm,2,range) } if (!is.matrix(xlim)) xlim<-matrix(xlim,nrow=2) if (is.null(bandwidth)){ bandwidth<-numeric(ncol(mm)) for(i in 1:ncol(mm)){ bandwidth[i]<-if(density) KernSmooth::dpik(mm[,i],gridsize=ngrid) else KernSmooth::dpill(mm[,i],Y,gridsize=ngrid) } } else { bandwidth<-rep(bandwidth, length=ncol(mm)) } w<-weights(design,type="sampling") if (length(naa)) w<-w[-naa] ll<-vector("list", ncol(mm)) for(i in 1:NCOL(mm)){ gx<-seq(min(xlim[,i]), max(xlim[,i]), length=ngrid) nx<-rowsum(c(rep(0,ngrid),w), c(1:ngrid, findInterval(mm[,i],gx))) if (density){ ll[[i]]<-KernSmooth::locpoly(rep(1,ngrid),nx*ngrid/(diff(xlim[,i])*sum(w)), binned=TRUE, bandwidth=bandwidth[i], range.x=xlim[,i]) }else{ ny<-rowsum(c(rep(0,ngrid), Y*w), c(1:ngrid, findInterval(mm[,i],gx))) ll[[i]]<-KernSmooth::locpoly(nx, ny, binned=TRUE, bandwidth=bandwidth[i], range.x=xlim[,i]) } names(ll)<-attr(terms(formula),"term.labels") } attr(ll,"call")<-sys.call(-2) attr(ll,"density")<-density if(density) attr(ll,"ylab")<-"Density" else attr(ll,"ylab")<-deparse(formula[[2]]) class(ll)<-"svysmooth" ll } print.svysmooth<-function(x,...){ if(attr(x,"density")) cat("Density estimate: :") else cat("Scatterplot smoother :") print(attr(x,"call")) invisible(x) } plot.svysmooth<-function(x, which=NULL,type="l",xlabs=NULL,ylab=NULL,...){ if (is.null(which)) which<-seq(length=length(x)) if (is.character(which)) which<-match(which,names(x)) if(is.null(xlabs)) xlabs<-names(x)[which] if(is.null(ylab)) ylab<-attr(x,"ylab") for(i in seq(length=length(which))) plot(x[[which[i]]], type=type, xlab=xlabs[i], ylab=ylab, ...) invisible(NULL) } lines.svysmooth<-function(x,which=NULL,...){ for(i in names(x)) lines(x[[i]],...) } survey/R/surveychisq.R0000755000176200001440000003633312242746122014535 0ustar liggesusers## ## Tests for contingency tables ## svychisq<-function(formula, design,...) UseMethod("svychisq",design) svychisq.survey.design<-function(formula, design, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))>2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) ##if(!is.null(design$postStrata)) ## warning("Post-stratification not implemented") rows<-formula[[2]][[2]] cols<-formula[[2]][[3]] rowvar<-unique(design$variables[,as.character(rows)]) colvar<-unique(design$variables[,as.character(cols)]) returnNA<-FALSE if ((any(is.na(rowvar),is.na(colvar)))){ rowvar<-na.omit(rowvar) colvar<-na.omit(colvar) returnNA<-!na.rm } nr<-length(rowvar) nc<-length(colvar) fsat<-eval(bquote(~interaction(factor(.(rows)),factor(.(cols)))-1)) mm<-model.matrix(fsat,model.frame(fsat, design$variables,na.action=na.pass)) N<-nrow(mm) nu <- length(unique(design$cluster[,1]))-length(unique(design$strata[,1])) pearson<- suppressWarnings(chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE)) mf1<-expand.grid(rows=1:nr,cols=1:nc) X1<-model.matrix(~factor(rows)+factor(cols),mf1) X12<-model.matrix(~factor(rows)*factor(cols),mf1) if(statistic %in% c("Wald", "adjWald")){ frow<-eval(bquote(~factor(.(rows))-1)) fcol<-eval(bquote(~factor(.(cols))-1)) mr<-model.matrix(frow, model.frame(frow,design$variables, na.action=na.pass)) mc<-model.matrix(fcol, model.frame(fcol,design$variables, na.action=na.pass)) one<-rep(1,NROW(mc)) cells<-svytotal(~mm+mr+mc+one,design,na.rm=TRUE) Jcb <- cbind(diag(nr*nc), -outer(mf1$rows,1:nr,"==")*rep(cells[(nr*nc)+nr+1:nc]/cells[(nr*nc)+nr+nc+1],each=nr), -outer(mf1$cols,1:nc,"==")*cells[(nr*nc)+1:nr]/cells[(nr*nc)+nr+nc+1], as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc])/cells[(nr*nc)+nr+nc+1]^2)) Y<-cells[1:(nc*nr)]-as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc]))/cells[(nr*nc)+nr+nc+1] V<-Jcb%*%attr(cells,"var")%*%t(Jcb) use<-as.vector(matrix(1:(nr*nc),nrow=nr,ncol=nc)[-1,-1]) waldstat<-Y[use]%*%solve(V[use,use],Y[use]) if (statistic=="Wald"){ waldstat<-waldstat/((nc-1)*(nr-1)) numdf<-(nc-1)*(nr-1) denomdf<-nu } else { numdf<-(nr-1)*(nc-1) denomdf<-(nu-numdf+1) waldstat <- waldstat*denomdf/(numdf*nu) } if (returnNA){ pearson$statistic<-NA pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-NA attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } else { pearson$statistic<-waldstat pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-pf(pearson$statistic, numdf, denomdf, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } return(pearson) } mean2<-svymean(mm,design,na.rm=TRUE) Cmat<-qr.resid(qr(X1),X12[,-(1:(nr+nc-1)),drop=FALSE]) Dmat <- diag(mean2) iDmat<- diag(ifelse(mean2==0,0,1/mean2)) Vsrs <- (Dmat - outer(mean2,mean2))/N V <- attr(mean2,"var") denom<- t(Cmat) %*% (iDmat/N) %*% Cmat numr<-t(Cmat)%*% iDmat %*% V %*% iDmat %*% Cmat Delta<-solve(denom,numr) d0<- sum(diag(Delta))^2/(sum(diag(Delta%*%Delta))) warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE) options(warn) if (match.arg(statistic)=="F"){ pearson$statistic<-pearson$statistic/sum(diag(Delta)) pearson$p.value<-pf(pearson$statistic, d0, d0*nu, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$parameter<-c(ndf=d0,ddf=d0*nu) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } else if (match.arg(statistic)=="lincom") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="integration",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: asymptotic exact distribution" } else if (match.arg(statistic)=="saddlepoint") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: saddlepoint approximation" } else{ pearson$p.value<-pchisq(pearson$statistic/mean(diag(Delta)), df=NCOL(Delta),lower.tail=FALSE) pearson$parameter<-c(df=NCOL(Delta)) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } if (returnNA){ pearson$statistic<-NA pearson$p.value<-NA } pearson$data.name<-deparse(sys.call(-1)) pearson } svychisq.twophase<-function(formula, design, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))>2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) ##if(!is.null(design$postStrata)) ## warning("Post-stratification not implemented") rows<-formula[[2]][[2]] cols<-formula[[2]][[3]] dat<-design$phase1$sample$variables rowvar<-unique(dat[,as.character(rows)]) colvar<-unique(dat[,as.character(cols)]) returnNA<-FALSE if ((any(is.na(rowvar),is.na(colvar)))){ rowvar<-na.omit(rowvar) colvar<-na.omit(colvar) returnNA<-!na.rm } nr<-length(rowvar) nc<-length(colvar) fsat<-eval(bquote(~interaction(factor(.(rows)),factor(.(cols)))-1)) mm<-model.matrix(fsat,model.frame(fsat, dat,na.action=na.pass)) N<-nrow(mm) nu <- length(unique(design$phase2$cluster[,1]))-length(unique(design$phase2$strata[,1])) pearson<- suppressWarnings(chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE)) mf1<-expand.grid(rows=1:nr,cols=1:nc) X1<-model.matrix(~factor(rows)+factor(cols),mf1) X12<-model.matrix(~factor(rows)*factor(cols),mf1) if(statistic %in% c("Wald", "adjWald")){ frow<-eval(bquote(~factor(.(rows))-1)) fcol<-eval(bquote(~factor(.(cols))-1)) mr<-model.matrix(frow, model.frame(frow,dat, na.action=na.pass)) mc<-model.matrix(fcol, model.frame(fcol,dat, na.action=na.pass)) one<-rep(1,NROW(mc)) cells<-svytotal(~mm+mr+mc+one,design,na.rm=TRUE) Jcb <- cbind(diag(nr*nc), -outer(mf1$rows,1:nr,"==")*rep(cells[(nr*nc)+nr+1:nc]/cells[(nr*nc)+nr+nc+1],each=nr), -outer(mf1$cols,1:nc,"==")*cells[(nr*nc)+1:nr]/cells[(nr*nc)+nr+nc+1], as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc])/cells[(nr*nc)+nr+nc+1]^2)) Y<-cells[1:(nc*nr)]-as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc]))/cells[(nr*nc)+nr+nc+1] V<-Jcb%*%attr(cells,"var")%*%t(Jcb) use<-as.vector(matrix(1:(nr*nc),nrow=nr,ncol=nc)[-1,-1]) waldstat<-Y[use]%*%solve(V[use,use],Y[use]) if (statistic=="Wald"){ waldstat<-waldstat/((nc-1)*(nr-1)) numdf<-(nc-1)*(nr-1) denomdf<-nu } else { numdf<-(nr-1)*(nc-1) denomdf<-(nu-numdf+1) waldstat <- waldstat*denomdf/(numdf*nu) } if (returnNA){ pearson$statistic<-NA pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-NA attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } else { pearson$statistic<-waldstat pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-pf(pearson$statistic, numdf, denomdf, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } return(pearson) } mean2<-svymean(mm,design,na.rm=TRUE) Cmat<-qr.resid(qr(X1),X12[,-(1:(nr+nc-1)),drop=FALSE]) Dmat <- diag(mean2) iDmat<- diag(ifelse(mean2==0,0,1/mean2)) Vsrs <- (Dmat - outer(mean2,mean2))/N V <- attr(mean2,"var") denom<- t(Cmat) %*% (iDmat/N) %*% Cmat numr<-t(Cmat)%*% iDmat %*% V %*% iDmat %*% Cmat Delta<-solve(denom,numr) d0<- sum(diag(Delta))^2/(sum(diag(Delta%*%Delta))) warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE) options(warn) if (match.arg(statistic)=="F"){ pearson$statistic<-pearson$statistic/sum(diag(Delta)) pearson$p.value<-pf(pearson$statistic, d0, d0*nu, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$parameter<-c(ndf=d0,ddf=d0*nu) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } else if (match.arg(statistic)=="lincom") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="integration",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: asymptotic exact distribution" } else if (match.arg(statistic)=="saddlepoint") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: saddlepoint approximation" } else{ pearson$p.value<-pchisq(pearson$statistic/mean(diag(Delta)), df=NCOL(Delta),lower.tail=FALSE) pearson$parameter<-c(df=NCOL(Delta)) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } if (returnNA){ pearson$statistic<-NA pearson$p.value<-NA } pearson$data.name<-deparse(sys.call(-1)) pearson } svychisq.svyrep.design<-function(formula, design, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))>2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) rows<-formula[[2]][[2]] cols<-formula[[2]][[3]] rowvar<-unique(design$variables[,as.character(rows)]) colvar<-unique(design$variables[,as.character(cols)]) returnNA<-FALSE if ((any(is.na(rowvar),is.na(colvar)))){ rowvar<-na.omit(rowvar) colvar<-na.omit(colvar) returnNA<-!na.rm } nr<-length(rowvar) nc<-length(colvar) fsat<-eval(bquote(~interaction(factor(.(rows)),factor(.(cols)))-1)) mm<-model.matrix(fsat,model.frame(fsat, design$variables,na.action=na.pass)) N<-nrow(mm) nu <- degf(design) pearson<- suppressWarnings(chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE)) mf1<-expand.grid(rows=1:nr,cols=1:nc) X1<-model.matrix(~factor(rows)+factor(cols),mf1) X12<-model.matrix(~factor(rows)*factor(cols),mf1) if(statistic %in% c("Wald", "adjWald")){ frow<-eval(bquote(~factor(.(rows))-1)) fcol<-eval(bquote(~factor(.(cols))-1)) mr<-model.matrix(frow, model.frame(frow,design$variables, na.action=na.pass)) mc<-model.matrix(fcol, model.frame(fcol,design$variables, na.action=na.pass)) one<-rep(1,NROW(mc)) cells<-svytotal(~mm+mr+mc+one,design,na.rm=TRUE) Jcb <- cbind(diag(nr*nc), -outer(mf1$rows,1:nr,"==")*rep(cells[(nr*nc)+nr+1:nc]/cells[(nr*nc)+nr+nc+1],each=nr), -outer(mf1$cols,1:nc,"==")*cells[(nr*nc)+1:nr]/cells[(nr*nc)+nr+nc+1], as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc])/cells[(nr*nc)+nr+nc+1]^2)) Y<-cells[1:(nc*nr)]-as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc]))/cells[(nr*nc)+nr+nc+1] V<-Jcb%*%attr(cells,"var")%*%t(Jcb) use<-as.vector(matrix(1:(nr*nc),nrow=nr,ncol=nc)[-1,-1]) waldstat<-Y[use]%*%solve(V[use,use],Y[use]) if (statistic=="Wald"){ waldstat<-waldstat/((nc-1)*(nr-1)) numdf<-(nc-1)*(nr-1) denomdf<-nu } else { numdf<-(nr-1)*(nc-1) denomdf<-(nu-numdf+1) waldstat <- waldstat*denomdf/(numdf*nu) } if (returnNA){ pearson$statistic<-NA pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-NA attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } else { pearson$statistic<-waldstat pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-pf(pearson$statistic, numdf, denomdf, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } return(pearson) } mean2<-svymean(mm,design,na.rm=TRUE) Cmat<-qr.resid(qr(X1),X12[,-(1:(nr+nc-1)),drop=FALSE]) Dmat <- diag(mean2) iDmat<- diag(ifelse(mean2==0,0,1/mean2)) Vsrs <- (Dmat - outer(mean2,mean2))/N V <- attr(mean2,"var") denom<- t(Cmat) %*% (iDmat/N) %*% Cmat numr<-t(Cmat)%*% iDmat %*% V %*% iDmat %*% Cmat Delta<-solve(denom,numr) d0<- sum(diag(Delta))^2/(sum(diag(Delta%*%Delta))) warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE) options(warn) if (match.arg(statistic)=="F"){ pearson$statistic<-pearson$statistic/sum(diag(Delta)) pearson$p.value<-pf(pearson$statistic, d0, d0*nu, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$parameter<-c(ndf=d0,ddf=d0*nu) } else if (match.arg(statistic)=="lincom") { pearson$p.value<-pchisqsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="integration") pearson$parameter<-NULL pearson$method<-"Pearson's X^2: asymptotic exact distribution" }else if (match.arg(statistic)=="saddlepoint") { pearson$p.value<-pchisqsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint") pearson$parameter<-NULL pearson$method<-"Pearson's X^2: saddlepoint approximation" } else { pearson$p.value<-pchisq(pearson$statistic/mean(diag(Delta)), df=NCOL(Delta),lower.tail=FALSE) pearson$parameter<-c(df=NCOL(Delta)) } if (returnNA){ pearson$statistic<-NA pearson$p.value<-NA } pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" pearson } summary.svreptable<-function(object,...){ object } summary.svytable<-function(object, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"),...){ statistic<-match.arg(statistic) call<-attr(object, "call") ff<-call$formula if (is.null(environment(ff))) env<-parent.frame() else env<-environment(ff) ff<-delete.response(ff) test<-eval(bquote(svychisq(.(ff), design=.(call$design), statistic=.(statistic))), env) rval<-list(table=object,statistic=test) class(rval)<-"summary.svytable" rval } print.summary.svytable<-function(x,digits=0,...){ print(round(x$table,digits)) print(x$statistic,...) } survey/R/anova.svyglm.R0000644000176200001440000001367313101735412014566 0ustar liggesusers oneanova.svyglm<-function(object,test,method){ tt<-terms(object) tlbls<-attr(tt,"term.labels") nt<-length(tlbls) if (nt<2) return(NULL) seqtests<-vector("list",nt) if(test=="F") ddf<-NULL else ddf<-Inf thismodel<-object if (!("formula") %in% names(thismodel$call)) names(thismodel$call)[[2]] <- "formula" for(i in nt:1){ thisterm<-tlbls[i] seqtests[[i]]<-regTermTest(thismodel,tlbls[i],method=method,df=ddf) thisformula<-make.formula(thisterm)[[2]] thismodel <- eval(bquote(update(thismodel, . ~ . - (.(thisformula))))) } class(seqtests)<-"seqanova.svyglm" attr(seqtests,"method")<-method attr(seqtests,"test")<-test seqtests } print.seqanova.svyglm<-function(x,...){ isWald<-attr(x,"method")=="Wald" isF<-attr(x,"test")=="F" cat("Anova table: ") if (isWald) cat("(Wald tests)\n") else cat(" (Rao-Scott LRT)\n") print(x[[1]]$mcall) terms<-sapply(x,"[[","test.terms") stats<-if(isF && isWald) sapply(x,"[[","Ftest") else sapply(x,"[[","chisq") if(!isWald) stats<-cbind(stats,DEff=sapply(x,function(xi) mean(xi$lambda))) df<-sapply(x,"[[","df") p<-sapply(x,"[[","p") if (!isF){ rval<-cbind(stats,df,p) } else { ddf<-sapply(x,"[[","ddf") rval<-cbind(stats,df,ddf,p) } rownames(rval)<-terms printCoefmat(rval,tst.ind=1,zap.ind=2:3,has.Pvalue=TRUE) invisible(x) } SD<-function(x) if (NCOL(x)>1) apply(x,2,sd) else sd(x) anova.svyglm<-function(object, object2=NULL,test=c("F","Chisq"),method=c("LRT","Wald"),tolerance=1e-5,...,force=FALSE){ test<-match.arg(test) method<-match.arg(method) if(is.null(object2)) ## sequential tests return(oneanova.svyglm(object,test,method)) t1<-attr(terms(object),"term.labels") t2<-attr(terms(object2),"term.labels") if ((all(t1 %in% t2) || all(t2 %in% t1)) && !force){ ## symbolically nested, call regTermTest biggerobject<-if(all(t1 %in% t2)) object2 else object termdiff<-make.formula(if(all(t1 %in% t2)) setdiff(t2,t1) else setdiff(t1,t2)) if(test=="F") ddf<-NULL else ddf<-Inf return(regTermTest(biggerobject,termdiff,df=ddf,method=method)) } ## not symbolically nested, need to project explicitly X<-model.matrix(object) Z<-model.matrix(object2) if (nrow(X)!=nrow(Z)) stop("models have different numbers of observations") if (ncol(X)>ncol(Z)) { tmp<-X X<-Z Z<-tmp bigger<-1 } else bigger<-2 if (any(sapply(suppressWarnings(summary(lm(X~Z))), "[[","sigma")/(tolerance+SD(X))>tolerance)) stop("models not nested") XX<-matrix(nrow=nrow(Z),ncol=ncol(Z)) xform<-lm(Z[,1]~X+0) XX[,1]<-resid(xform) for(i in 2:ncol(Z)){ XX[,i]<-resid(xform<-lm(Z[,i]~X+Z[,1:(i-1)]+0)) } colkeep<-colMeans(abs(XX))/(tolerance+colMeans(abs(Z))) > tolerance XX<-XX[,colkeep,drop=FALSE] index<-ncol(X)+(1:ncol(XX)) ## and now need to refit the model ## ugly, but svyglm demands that all variables are in the design argument. ## We do know the fitted values at convergence, so one iteration suffices. mu<-if(bigger==1) fitted(object) else fitted(object2) eta<-if(bigger==1) object$linear.predictors else object2$linear.predictors offset<-if(bigger==1) object$offset else object2$offset if (is.null(offset)) offset<-0 pweights<-weights(object$survey.design,"sampling") y<-object$y if (length(pweights)!=length(y)){ pweights<-pweights[pweights>0] if (length(pweights)!=length(y)) stop("number of observations does not match design") } pweights<-pweights/mean(pweights) ywork<-eta-offset+(y-mu)/object$family$mu.eta(eta) wwork<-((pweights * object$family$mu.eta(eta)^2)/object$family$variance(mu)) wlm<-lm.wfit(cbind(X,XX),ywork,wwork) p1<-1:wlm$rank Ainv<-chol2inv(wlm$qr$qr[p1,p1,drop=FALSE]) estfun<-cbind(X,XX)*wwork*((y-mu)/object$family$mu.eta(eta)) design<-object$survey.design if (inherits(design, "survey.design2")) V<-svyrecvar(estfun %*% Ainv, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) else if (inherits(design, "twophase")) V<-twophasevar(estfun %*% Ainv, design) else if (inherits(design, "twophase2")) V<-twophase2var(estfun %*% Ainv, design) else if (inherits(design, "pps")) V<-ppsvar(estfun %*% Ainv, design) else if (inherits(design, "svyrep.design")){ V<-vcov(svymean(estfun%*% Ainv/pweights, design))*length(pweights)^2 } else stop("not implemented for this type of design") V<-V[index,index] df<-min(object$df.residual, object2$df.residual) if(method=="LRT"){ V0<-Ainv[index,index] chisq <- if(bigger==1) deviance(object2) - deviance(object) else deviance(object)-deviance(object2) misspec <- eigen(solve(V0) %*% V, only.values = TRUE)$values if (test=="Chisq") p <- pchisqsum(chisq, rep(1, length(misspec)), misspec, method = "sad", lower.tail = FALSE) else p <- pFsum(chisq, rep(1, length(misspec)), misspec, ddf = df, method = "sad", lower.tail = FALSE) rval <- list(call = sys.call(), chisq = chisq, df = length(index), p = p, lambda = misspec, ddf = df, mcall=if(bigger==1) object$call else object2$call, test.terms=if(bigger==1) c(setdiff(t1,t2),"-",setdiff(t2,t1)) else c(setdiff(t2,t1),"-",setdiff(t1,t2)) ) class(rval)<-"regTermTestLRT" } else { ## method=Wald beta<- wlm$coefficients[index] chisq<-crossprod(beta,solve(V,beta)) if (test=="Chisq"){ p<-pchisq(chisq,df=length(index),lower.tail=FALSE) } else { p<-pf(chisq/length(index),df1=length(index),df2=df,lower.tail=FALSE) } rval <- list(call = sys.call(), Ftest = chisq/length(index), df = length(index), p = p, ddf = df, mcall=if(bigger==1) object$call else object2$call, test.terms=if(bigger==1) c(setdiff(t1,t2),"-",setdiff(t2,t1)) else c(setdiff(t2,t1),"-",setdiff(t1,t2)) ) class(rval)<-"regTermTest" } rval } survey/R/surveyrep.R0000755000176200001440000020515113122573066014213 0ustar liggesusers hadamard.doubler<-function(H){ rbind(cbind(H,H),cbind(H,1-H)) } hadamard<- function(n){ m<-n-(n %% 4) ## hadamard.list, hadamard.sizes in sysdata.rda precooked<- which(m < hadamard.sizes & m+4 >=hadamard.sizes) if (length(precooked)) return(hadamard.list[[min(precooked)]]) if (all(m4) H<-paley(n,sizes[bestfit]) if (is.null(H)){ ndoubles<-ceiling(log(sizes/hadamard.sizes, 2))[bestfit] H<-hadamard.list[[bestfit]] for(i in seq(length=ndoubles)) H<-hadamard.doubler(H) } H } jk1weights<-function(psu, fpc=NULL, fpctype=c("population","fraction","correction"), compress=TRUE){ fpctype<-match.arg(fpctype) unq<-unique(psu) n<-length(unq) if (is.null(fpc)) fpc<-1 else { fpc<-unique(fpc) if (length(fpc)>1) stop("More than one fpc value given") if (fpc<0) stop("Negative finite population correction") if (fpctype=="population" && fpcnstrat) stop("More distinct fpc values than strata") fpc<-sapply(sunq, function(ss) fpc[match(ss,strata)]) names(fpc)<-as.character(sunq) } else if (length(fpc)==1) { fpc<-rep(fpc,nstrat) names(fpc)<-as.character(sunq) } else if (length(fpc)==nstrat){ nn<-names(fpc) if (is.null(nn)) names(fpc)<-as.character(sunq) if (!all(names(fpc) %in% as.character(sunq))) stop("fpc has names that do not match the stratum identifiers") } if (compress){ repweights<-matrix(1,ncol=length(unq),nrow=length(unq)) } else { repweights<-matrix(1,ncol=length(unq), nrow=length(psu)) } counter<-0 rscales<-numeric(length(unq)) for(ss in as.character(sunq)){ thisfpc<-fpc[match(ss,names(fpc))] theseweights<-jk1weights(psu[strata %in% ss], fpc=thisfpc, fpctype=fpctype,compress=compress) nc<-if (compress) NCOL(theseweights$repweights$weights) else NCOL(theseweights$repweights) if (nc==1 && thisfpc!=0){ ## lonely PSUs if (lonely.psu=="fail") stop("Stratum",ss,"has only one PSU") if (lonely.psu=="remove") next if (lonely.psu=="certainty") next if (lonely.psu=="average") next if (lonely.psu=="adjust"){ nc<-1 if (compress) repweights[, counter+nc]<-ifelse(strata[!duplicated(psu)] %in% ss, 0, nstrat/(nstrat-1)) else repweights[ counter+nc]<-ifelse(strata %in% ss, 0, nstrat/(nstrat-1)) rscales[counter+nc]<-(nstrat-1)/nstrat counter<-counter+nc next } } if (compress) repweights[strata[!duplicated(psu)] %in% ss,counter+seq(length=nc)]<-theseweights$repweights$weights else repweights[strata %in% ss, counter+seq(length=nc)]<-theseweights$repweights rscales[counter+seq(length=nc)]<-theseweights$scale counter<-counter+nc } if (counter==0) stop("All strata were exhaustively sampled: you have the whole population") scale<-1 if (counter2) && large=="fail") stop("Some strata have more than 2 PSUs") unq<-which(!duplicated(psu)) sunq<-strata[unq] psunq<-psu[unq] weights<-matrix(ncol=2,nrow=length(unq)) weightstrata<-numeric(length(unq)) if (length(match)==length(strata)) match<-match[unq] if (is.null(match)) match<-unq ## default is to match by dataset order oo<-order(sunq,match) upto <- 0 if(any(ssize==1)){ smallstrata<-names(ssize)[ssize==1] if(small=="split"){ weights[sunq %in% smallstrata,1]<- 0.5 weights[sunq %in% smallstrata,2]<- 0.5 weightstrata[sunq %in% smallstrata]<-1:length(smallstrata) upto<-length(smallstrata) } else { ##small=="merge" if (length(smallstrata) > 1){ weights[oo,][sunq[oo] %in% smallstrata, 1]<-rep(0:1,length.out=length(smallstrata)) weights[oo,][sunq[oo] %in% smallstrata, 2]<-rep(1:0,length.out=length(smallstrata)) if(length(smallstrata) %% 2==0) weightstrata[oo][sunq[oo] %in% smallstrata]<-rep(1:(length(smallstrata) %/%2), 2) else weightstrata[oo][sunq[oo] %in% smallstrata]<-c(1,rep(1:(length(smallstrata) %/%2), 2)) upto<-length(smallstrata) %/% 2 } else stop("Can't merge with a single small stratum") } } if (any(ssize>2)){ largestrata<-names(ssize)[ssize>2] if (large=="split"){ if (any(ssize[largestrata] %%2 ==1)) stop("Can't split with odd numbers of PSUs in a stratum") ## make substrata of size 2 for(ss in largestrata){ weights[oo,][sunq[oo] %in% ss, 1]<-rep(0:1,length.out=ssize[ss]) weights[oo,][sunq[oo] %in% ss, 2]<-rep(1:0,length.out=ssize[ss]) weightstrata[oo][sunq[oo] %in% ss]<-upto+rep(1:(ssize[ss] %/%2),each=2) upto<-upto+(ssize[ss] %/% 2) } } else { ## make two substrata. halfsize<-ssize[largestrata] %/%2 otherhalfsize<-ssize[largestrata] - halfsize reps<-as.vector(rbind(halfsize,otherhalfsize)) nlarge<-length(halfsize) weights[oo,][sunq[oo] %in% largestrata, 1]<-rep(rep(0:1,nlarge),reps) weights[oo,][sunq[oo] %in% largestrata, 2]<-rep(rep(1:0,nlarge),reps) weightstrata[oo][sunq[oo] %in% largestrata]<-upto+rep(1:length(largestrata),ssize[largestrata]) upto<-upto+length(largestrata) } } if(any(ssize==2)){ goodstrata<-names(ssize)[ssize==2] weights[oo,][sunq[oo] %in% goodstrata, 1]<-rep(0:1,length(goodstrata)) weights[oo,][sunq[oo] %in% goodstrata, 2]<-rep(1:0,length(goodstrata)) weightstrata[oo][sunq[oo] %in% goodstrata]<-upto+rep(1:length(goodstrata),each=2) upto<-upto+length(goodstrata) } if (is.null(hadamard.matrix)){ H<-hadamard(upto) } else { ## the user supplied hadamard.matrix ## Check that it is a binary matrix and satifies the ## Hadamard determinant property if (!is.matrix(hadamard.matrix) || nrow(hadamard.matrix)1 && type!="mrbbootstrap"){ fpc<-fpc[,1] warning("Finite population corrections after first stage have been dropped") } if (getOption("survey.drop.replicates")){ selfrep<-design$fpc$popsize[,1]==design$fpc$sampsize[,1] } } else{ fpc<-design$fpc[,2] names(fpc)<-design$fpc[,1] } } } else { if (type %in% c("Fay","BRR","subbootstrap")) stop(paste("fpc information cannot be used for type=",type)) if (is.null(fpctype)) stop("fpctype must be supplied if fpc is supplied") } if (type=="JK1"){ ##JK1 r<-jk1weights(design$cluster[,1], fpc=fpc,fpctype=fpctype, compress=compress) repweights<-r$repweights scale<-drop(r$scale) if (inherits(repweights,"repweights_compressed")) rscales<-rep(1, NCOL(repweights$weights)) else rscales<-rep(1, NCOL(repweights)) type<-"JK1" pweights<-1/design$prob } else if (type %in% c("BRR","Fay")){ ##BRR if (inherits(design,"survey.design2")) repweights<-brrweights(design$strata[,1], design$cluster[,1],...,fay.rho=fay.rho, compress=compress,only.weights=TRUE) else repweights<-brrweights(design$strata, design$cluster[,1],...,fay.rho=fay.rho, compress=compress,only.weights=TRUE) pweights<-1/design$prob if (length(pweights)==1) pweights<-rep(pweights, NROW(design$variables)) if (fay.rho==0) type<-"BRR" else type<-"Fay" rscales<-rep(1,ncol(repweights)) scale<-1/(ncol(repweights)*(1-fay.rho)^2) } else if (type=="JKn"){ ##JKn if (inherits(design,"survey.design2")) r<-jknweights(design$strata[,1],design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress) else r<-jknweights(design$strata,design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress) pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales } else if (type=="bootstrap"){ ##bootstrap if (inherits(design,"survey.design2")) r<-bootweights(design$strata[,1],design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress,...) else r<-bootweights(design$strata,design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress,...) pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales }else if (type=="subbootstrap"){ ##bootstrap if (inherits(design,"survey.design2")) r<-subbootweights(design$strata[,1],design$cluster[,1],compress=compress,...) else r<-subbootweights(design$strata,design$cluster[,1],compress=compress,...) pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales } else if (type=="mrbbootstrap"){ if (inherits(design,"survey.design2")) r<-mrbweights(design$cluster,design$strata,design$fpc,...) else stop("MRB bootstrap not available for obsolete svydesign objects") pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales } else stop("Can't happen") rval<-list(repweights=repweights, pweights=pweights, type=type, rho=fay.rho,scale=scale, rscales=rscales, call=sys.call(), combined.weights=FALSE, selfrep=selfrep,mse=mse) rval$variables <- design$variables class(rval)<-"svyrep.design" rval$degf<-degf(rval) rval } svrepdesign<-function(variables, repweights, weights,data=NULL,...) UseMethod("svrepdesign",data) svrepdesign.default<-function(variables=NULL,repweights=NULL, weights=NULL, data=NULL,type=c("BRR","Fay","JK1", "JKn","bootstrap","other"), combined.weights=TRUE, rho=NULL, bootstrap.average=NULL, scale=NULL,rscales=NULL,fpc=NULL, fpctype=c("fraction","correction"), mse=getOption("survey.replicates.mse"),...) { type<-match.arg(type) if(type=="Fay" && is.null(rho)) stop("With type='Fay' you must supply the correct rho") if (type %in% c("JK1","JKn") && !is.null(rho)) warning("rho not relevant to JK1 design: ignored.") if (type %in% c("other") && !is.null(rho)) warning("rho ignored.") if(is.null(variables)) variables<-data if(inherits(variables,"formula")){ mf<-substitute(model.frame(variables, data=data,na.action=na.pass)) variables<-eval.parent(mf) } variables<-detibble(variables) if(inherits(repweights,"formula")){ mf<-substitute(model.frame(repweights, data=data)) repweights<-eval.parent(mf) repweights<-na.fail(repweights) } if(is.character(repweights)){##regular expression wtcols<-grep(repweights,names(data)) repweights<-data[,wtcols] } if (is.null(repweights)) stop("You must provide replication weights") repweights<-detibble(repweights) if(inherits(weights,"formula")){ mf<-substitute(model.frame(weights, data=data)) weights<-eval.parent(mf) weights<-drop(as.matrix(na.fail(weights))) } if (is.null(weights)){ warning("No sampling weights provided: equal probability assumed") weights<-rep(1,NROW(repweights)) } repwtmn<-mean(apply(repweights,2,mean)) wtmn<-mean(weights) probably.combined.weights<-(repwtmn>5) & (wtmn/repwtmn<5) probably.not.combined.weights<-(repwtmn<5) & (wtmn/repwtmn>5) if (combined.weights & probably.not.combined.weights) warning(paste("Data do not look like combined weights: mean replication weight is", repwtmn," and mean sampling weight is",wtmn)) if (!combined.weights & probably.combined.weights) warning(paste("Data look like combined weights: mean replication weight is", repwtmn," and mean sampling weight is",wtmn)) if (!is.null(rscales) && !(length(rscales) %in% c(1, ncol(repweights)))){ stop(paste("rscales has length ",length(rscales),", should be ncol(repweights)",sep="")) } if (type == "BRR") scale<-1/ncol(repweights) if (type=="Fay") scale <-1/(ncol(repweights)*(1-rho)^2) if (type=="bootstrap"){ if(is.null(bootstrap.average)) bootstrap.average<-1 if (is.null(scale)) scale<-bootstrap.average/(ncol(repweights)-1) if (is.null(rscales)) rscales<-rep(1,ncol(repweights)) } if (type=="JK1" && is.null(scale)) { if(!combined.weights){ warning("scale (n-1)/n not provided: guessing from weights") scale<-1/max(repweights[,1]) } else { probably.n = ncol(repweights) scale<- (probably.n-1)/probably.n warning("scale (n-1)/n not provided: guessing n=number of replicates") } } if (type =="JKn" && is.null(rscales)) if (!combined.weights) { warning("rscales (n-1)/n not provided:guessing from weights") rscales<-1/apply(repweights,2,max) } else stop("Must provide rscales for combined JKn weights") if (type=="other" && (is.null(rscales) || is.null(scale))){ if (is.null(rscales)) rscales<-rep(1,NCOL(repweights)) if (is.null(scale)) scale<-1 warning("scale or rscales not specified, set to 1") } if (is.null(rscales)) rscales<-rep(1,NCOL(repweights)) if (!is.null(fpc)){ if (missing(fpctype)) stop("Must specify fpctype") fpctype<-match.arg(fpctype) if (type %in% c("BRR","Fay")) stop("fpc not available for this type") if (type %in% "bootstrap") stop("Separate fpc not needed for bootstrap") if (length(fpc)!=length(rscales)) stop("fpc is wrong length") if (any(fpc>1) || any(fpc<0)) stop("Illegal fpc value") fpc<-switch(fpctype,correction=fpc,fraction=1-fpc) rscales<-rscales*fpc } rval<-list(type=type, scale=scale, rscales=rscales, rho=rho,call=sys.call(), combined.weights=combined.weights) rval$variables<-variables rval$pweights<-weights if (!inherits(repweights,"repweights")) class(rval)<-"repweights" rval$repweights<-repweights class(rval)<-"svyrep.design" rval$degf<-degf(rval) rval$mse<-mse rval } print.svyrep.design<-function(x,...){ cat("Call: ") print(x$call) if (x$type=="Fay") cat("Fay's variance method (rho=",x$rho,") ") if (x$type=="BRR") cat("Balanced Repeated Replicates ") if (x$type=="JK1") cat("Unstratified cluster jacknife (JK1) ") if (x$type=="JKn") cat("Stratified cluster jackknife (JKn) ") if (x$type=="bootstrap") cat("Survey bootstrap ") if (x$type=="mrbbootstrap") cat("Multistage rescaled bootstrap ") if (x$type=="subbootstrap") cat("(n-1) bootstrap ") nweights<-ncol(x$repweights) cat("with", nweights,"replicates") if (!is.null(x$mse) && x$mse) cat(" and MSE variances") cat(".\n") invisible(x) } summary.svyrep.design<-function(object,...){ class(object)<-c("summary.svyrep.design", class(object)) object } print.summary.svyrep.design<-function(x,...){ class(x)<-class(x)[-1] print(x) cat("Variables: \n") print(colnames(x)) } image.svyrep.design<-function(x, ..., col=grey(seq(.5,1,length=30)), type.=c("rep","total")){ type<-match.arg(type.) m<-as.matrix(x$repweights) if (type=="total"){ m<-m*x$pweights } image(1:NCOL(m), 1:NROW(m), t(m), col=col, xlab="Replicate", ylab="Observation",...) invisible(NULL) } "[.svyrep.design"<-function(x, i, j, drop=FALSE){ if (!missing(i)){ pwt<-x$pweights if (is.data.frame(pwt)) pwt<-pwt[[1]] x$pweights<-pwt[i] x$repweights<-x$repweights[i,,drop=FALSE] if(!is.null(x$selfrep)) x$selfrep<-x$selfrep[i] if (!missing(j)) x$variables<-x$variables[i,j, drop=FALSE] else x$variables<-x$variables[i,,drop=FALSE] x$degf<-NULL x$degf<-degf(x) } else { x$variables<-x$variables[,j,drop=FALSE] } x } subset.svyrep.design<-function(x,subset,...){ e <- substitute(subset) r <- eval(e, x$variables, parent.frame()) r <- r & !is.na(r) x<-x[r,] x$call<-sys.call(-1) x } update.svyrep.design<-function(object,...){ dots<-substitute(list(...))[-1] newnames<-names(dots) for(j in seq(along=dots)){ object$variables[,newnames[j]]<-eval(dots[[j]],object$variables, parent.frame()) } object$call<-sys.call(-1) object } weights.svyrep.design<-function(object,type=c("replication","sampling","analysis"),...){ type<-match.arg(type) switch(type, replication= as.matrix(object$repweights), sampling=object$pweights, analysis=if(object$combined.weights) as.matrix(object$repweights) else as.matrix(object$repweights)*object$pweights) } weights.survey.design<-function(object,...){ return(1/object$prob) } svyquantile.svyrep.design<-svrepquantile<-function(x,design,quantiles,method="linear", interval.type=c("probability","quantile"),f=1, return.replicates=FALSE, ties=c("discrete","rounded"),na.rm=FALSE,...){ if (!exists(".Generic",inherits=FALSE)) .Deprecated("svyquantile") ties<-match.arg(ties) interval<-match.arg(interval.type) if (design$type %in% c("JK1","JKn") && interval=="quantile") warning("Jackknife replicate weights may not give valid standard errors for quantiles") if (design$type %in% "other" && interval=="quantile") warning("Not all replicate weight designs give valid standard errors for quantiles.") if (inherits(x,"formula")) x<-model.frame(x,design$variables,na.action=if(na.rm) na.pass else na.fail) else if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if (length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } if (NROW(x)<=1){ rval<-matrix(rep(as.matrix(x),length(quantiles)),ncol=NCOL(x),nrow=length(quantiles),byrow=TRUE) dimnames(rval)<-list(paste("q",round(quantiles,2),sep=""), names(x)) if (getOption("survey.drop.replicates") && !is.null(design$selfrep) && all(design$selfrep)) vv<-matrix(0,ncol=NCOL(x),nrow=length(quantiles)) else vv<-matrix(NA,ncol=NCOL(x),nrow=length(quantiles)) dimnames(vv)<-list(paste("q",round(quantiles,2),sep=""), names(x)) attr(rval,"var")<-vv attr(rval,"statistic")<-quantiles if (return.replicates) rval<-list(mean=rval,replicates=NULL) class(rval)<-"svrepstat" return(rval) } w<-weights(design,"analysis") if (interval=="quantile"){ ## interval on quantile scale if (ties=="discrete") computeQuantiles<-function(xx){ oo<-order(xx) ws<-weights(design,"sampling") cum.ws<-cumsum(ws[oo])/sum(ws) rval<-approx(cum.ws,xx[oo],method=method,f=f, yleft=min(xx),yright=max(xx), xout=quantiles,ties=min)$y cum.w<-apply(w,2,function(wi) cumsum(wi[oo])/sum(wi)) qq<-apply(cum.w, 2,function(cum.wi) approx(cum.wi,xx[oo],method=method,f=f, yleft=min(xx),yright=max(xx), xout=quantiles,ties=min)$y) if (length(quantiles)>1) qq<-t(qq) else qq<-as.matrix(qq) ##rval<-colMeans(qq) rval<-list(quantiles=rval, variances=diag(as.matrix(svrVar(qq,design$scale,design$rscales,mse=design$mse,coef=rval)))) if (return.replicates) rval<-c(rval, list(replicates=qq)) rval } else { ##ties="rounded" computeQuantiles<-function(xx){ ws<-weights(design,"sampling") wws<-rowsum(ws,xx,reorder=TRUE) uxx<-sort(unique(xx)) cum.wws<-cumsum(wws)/sum(wws) rval<-approx(cum.wws,uxx,method=method,f=f, yleft=min(xx),yright=max(xx), xout=quantiles,ties=min)$y cum.w<-apply(rowsum(w,xx,reorder=TRUE),2,function(wi) cumsum(wi)/sum(wi)) qq<-apply(cum.w, 2,function(cum.wi) approx(cum.wi,uxx,method=method,f=f, yleft=min(xx),yright=max(xx), xout=quantiles,ties=min)$y) if (length(quantiles)>1) qq<-t(qq) else qq<-as.matrix(qq) ##rval<-colMeans(qq) rval<-list(quantiles=rval, variances=diag(as.matrix(svrVar(qq,design$scale,design$rscales,mse=design$mse,coef=rval)))) if (return.replicates) rval<-c(rval, list(replicates=qq)) rval } } } else { ## interval on probability scale, backtransformed. if (ties=="discrete"){ computeQuantiles<-function(xx){ oo<-order(xx) w<-weights(design,"sampling") cum.w<- cumsum(w[oo])/sum(w) Qf<-approxfun(cum.w,xx[oo],method=method,f=f, yleft=min(xx),yright=max(xx), ties=min) point.estimates<-Qf(quantiles) if(length(quantiles)==1) estfun<-as.numeric(xx0,,drop=FALSE]) } v<-crossprod( sweep(thetas,2, meantheta,"-")*sqrt(rscales))*scale } else { if (mse){ meantheta<-coef } else { meantheta<-mean(thetas[rscales>0]) } v<- sum( (thetas-meantheta)^2*rscales)*scale } attr(v,"na.replicates")<-naa attr(v,"means")<-meantheta return(v) } svyvar.svyrep.design<-svrepvar<-function(x, design, na.rm=FALSE, rho=NULL, return.replicates=FALSE,...,estimate.only=FALSE){ if (!exists(".Generic",inherits=FALSE)) .Deprecated("svyvar") if (inherits(x,"formula")) x<-model.frame(x,design$variables,na.action=na.pass) else if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) wts<-design$repweights scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed("rho") x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) if(any(nas>0)){ design<-design[nas==0,] x<-x[nas==0,,drop=FALSE] wts<-wts[nas==0,,drop=FALSE] } } if (design$combined.weights) pw<-1 else pw<-design$pweights n<-NROW(x) p<-NCOL(x) v<-function(w){ xbar<-colSums(as.vector(w)*pw*x)/sum(as.vector(w)*pw) xdev<-sweep(x,2,xbar,"-") x1<-matrix(rep(xdev,p),ncol=p*p) x2<-xdev[,rep(1:p,each=p),drop=FALSE] (n/(n-1))*colSums(x1*x2*as.vector(w)*pw)/sum(as.vector(w)*pw) } if (design$combined.weights) rval<-v(design$pweights) else rval<-v(rep(1,length(design$pweights))) rval<-matrix(rval, ncol=p) dimnames(rval)<-list(colnames(x),colnames(x)) if (estimate.only) return(rval) repvars<-apply(wts,2, v) repvars<-drop(t(repvars)) attr(rval,"var")<-svrVar(repvars, scale, rscales,mse=design$mse, coef=rval) attr(rval, "statistic")<-"variance" if (return.replicates){ attr(repvars,"scale")<-design$scale attr(repvars,"rscales")<-design$rscales attr(repvars,"mse")<-design$mse rval<-list(variance=rval, replicates=repvars) } class(rval)<-c("svrepvar","svrepstat") rval } print.svrepvar<-function (x, covariance=FALSE, ...) { if (is.list(x)) x<-x[[1]] vv <- as.matrix(attr(x, "var")) if (covariance){ nms<-outer(rownames(x),colnames(x),paste,sep=":") m<-cbind(as.vector(x), sqrt(diag(vv))) rownames(m)<-nms } else{ ii <- which(diag(sqrt(length(x)))>0) m <- cbind(x[ii], sqrt(diag(vv))[ii]) if(length(ii)==1) rownames(m)<-rownames(x) } colnames(m) <- c(attr(x, "statistic"), "SE") printCoefmat(m) } as.matrix.svrepvar<-function(x,...) if (is.list(x)) unclass(x[[1]]) else unclass(x) svymean.svyrep.design<-svrepmean<-function(x,design, na.rm=FALSE, rho=NULL, return.replicates=FALSE,deff=FALSE,...) { if (!exists(".Generic",inherits=FALSE)) .Deprecated("svymean") if (!inherits(design,"svyrep.design")) stop("design is not a replicate survey design") if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] x<-x[nas==0,,drop=FALSE] } wts<-design$repweights scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed("rho") if (!design$combined.weights) pw<-design$pweights else pw<-1 rval<-colSums(design$pweights*x)/sum(design$pweights) if (getOption("survey.drop.replicates") && !is.null(design$selfrep) && all(design$selfrep)){ v<-matrix(0,length(rval),length(rval)) repmeans<-NULL } else { if (inherits(wts, "repweights_compressed")){ repmeans<-matrix(ncol=NCOL(x), nrow=ncol(wts$weights)) for(i in 1:ncol(wts$weights)){ wi<-wts$weights[wts$index,i] repmeans[i,]<-t(colSums(wi*x*pw)/sum(pw*wi)) } } else { repmeans<-matrix(ncol=NCOL(x), nrow=ncol(wts)) for(i in 1:ncol(wts)){ repmeans[i,]<-t(colSums(wts[,i]*x*pw)/sum(pw*wts[,i])) } } repmeans<-drop(repmeans) v <- svrVar(repmeans, scale, rscales,mse=design$mse, coef=rval) } attr(rval,"var") <-v attr(rval, "statistic")<-"mean" if (return.replicates){ attr(repmeans,"scale")<-design$scale attr(repmeans,"rscales")<-design$rscales attr(repmeans,"mse")<-design$mse rval<-list(mean=rval, replicates=repmeans) } if (is.character(deff) || deff){ nobs<-length(design$pweights) npop<-sum(design$pweights) vsrs<-unclass(svyvar(x,design,na.rm=na.rm, return.replicates=FALSE,estimate.only=TRUE))/length(design$pweights) if (deff!="replace") vsrs<-vsrs*(npop-nobs)/npop attr(rval,"deff") <- v/vsrs } class(rval)<-"svrepstat" rval } svytotal.svyrep.design<-svreptotal<-function(x,design, na.rm=FALSE, rho=NULL, return.replicates=FALSE, deff=FALSE,...) { if (!exists(".Generic",inherits=FALSE)) .Deprecated("svytotal") if (!inherits(design,"svyrep.design")) stop("design is not a replicate survey design") if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else{ if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] x<-x[nas==0,,drop=FALSE] } wts<-design$repweights scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed("rho") if (!design$combined.weights) pw<-design$pweights else pw<-1 rval<-colSums(design$pweights*x) if (is.character(deff) || deff){ nobs<-length(design$pweights) npop<-sum(design$pweights) vsrs<-unclass(svyvar(x,design,na.rm=na.rm, return.replicates=FALSE,estimate.only=TRUE))*sum(design$pweights)^2/nobs if (deff!="replace") vsrs<-vsrs*(npop-nobs)/npop } if (getOption("survey.drop.replicates") && !is.null(design$selfrep) && all(design$selfrep)){ v<-matrix(0,nrow=NROW(rval),ncol=NROW(rval)) repmeans<-NULL } else { if (inherits(wts, "repweights_compressed")){ if (getOption("survey.drop.replicates") && !is.null(design$selfrep)){ wts$index<-wts$index[!design$selfrep] x<-x[!design$selfrep,,drop=FALSE] pw<-pw[!design$selfrep] } repmeans<-matrix(ncol=NCOL(x), nrow=ncol(wts$weights)) for(i in 1:ncol(wts$weights)){ wi<-wts$weights[wts$index,i] repmeans[i,]<-t(colSums(wi*x*pw)) } } else { if (getOption("survey.drop.replicates") && !is.null(design$selfrep)){ wts<-wts[!design$selfrep,,drop=FALSE] x<-x[!design$selfrep,,drop=FALSE] pw<-pw[!design$selfrep] } repmeans<-matrix(ncol=NCOL(x), nrow=ncol(wts)) for(i in 1:ncol(wts)){ repmeans[i,]<-t(colSums(wts[,i]*x*pw)) } } repmeans<-drop(repmeans) v <- svrVar(repmeans, scale, rscales,mse=design$mse,coef=rval) } attr(rval,"var") <- v attr(rval, "statistic")<-"total" if (return.replicates){ attr(repmeans,"scale")<-design$scale attr(repmeans,"rscales")<-design$rscales attr(repmeans,"mse")<-design$mse rval<-list(mean=rval, replicates=repmeans) } if (is.character(deff) || deff) attr(rval,"deff") <- v/vsrs class(rval)<-"svrepstat" rval } svycoxph.svyrep.design<-function(formula, design, subset=NULL,...,return.replicates=FALSE,na.action, multicore=getOption("survey.multicore")){ subset<-substitute(subset) subset<-eval(subset, design$variables, parent.frame()) if (!is.null(subset)) design<-design[subset,] if (multicore && !requireNamespace(parallel,quietly=TRUE)) multicore<-FALSE data<-design$variables g<-match.call() g$design<-NULL g$return.replicates<-NULL g$weights<-quote(.survey.prob.weights) g[[1]]<-quote(coxph) g$x<-TRUE scale<-design$scale rscales<-design$rscales pwts<-design$pweights/sum(design$pweights) if (is.data.frame(pwts)) pwts<-pwts[[1]] if (!all(all.vars(formula) %in% names(data))) stop("all variables must be in design= argument") .survey.prob.weights<-pwts full<-with(data,eval(g)) nas<-attr(full$model, "na.action") betas<-matrix(ncol=length(coef(full)),nrow=ncol(design$repweights)) wts<-design$repweights if (!design$combined.weights){ pw1<-pwts rwt<-pw1/mean(pw1) } else{ rwt<-1/mean(as.vector(wts[,1])) pw1<-rwt } if (length(nas)) wts<-wts[-nas,] beta0<-coef(full) ## coxph doesn't allow zero weights EPSILON<-1e-10 if(full$method %in% c("efron","breslow")){ if (attr(full$y,"type")=="right") fitter<-coxph.fit else if(attr(full$y,"type")=="counting") fitter<-survival::agreg.fit else stop("invalid survival type") } else fitter<-survival::agexact.fit ## g$init<-beta0 ## for(i in 1:ncol(wts)){ ## .survey.prob.weights<-as.vector(wts[,i])*pw1+EPSILON ## betas[i,]<-with(data,coef(eval(g))) ## } if (multicore){ betas<-do.call(rbind, parallel::mclapply(1:ncol(wts), function(i){ fitter(full$x, full$y, full$strata, full$offset, coef(full), coxph.control(), as.vector(wts[,i])*pw1+EPSILON, full$method, names(full$resid))$coef })) }else{ for(i in 1:ncol(wts)){ betas[i,]<-fitter(full$x, full$y, full$strata, full$offset, coef(full), coxph.control(), as.vector(wts[,i])*pw1+EPSILON, full$method, names(full$resid))$coef } } if (length(nas)) design<-design[-nas,] v<-svrVar(betas,scale, rscales, mse=design$mse, coef=beta0) full$var<-v if (return.replicates){ attr(betas,"scale")<-design$scale attr(betas,"rscales")<-design$rscales attr(betas,"mse")<-design$mse full$replicates<-betas } full$naive.var<-NULL full$wald.test<-coef(full)%*%solve(full$var,coef(full)) full$loglik<-c(NA,NA) full$rscore<-NULL full$score<-NA full$degf.residual<-degf(design)+1-length(coef(full)[!is.na(coef(full))]) class(full)<-c("svrepcoxph","svycoxph",class(full)) full$call<-match.call() full$printcall<-sys.call(-1) full$survey.design<-design full } svrepglm<-svyglm.svyrep.design<-function(formula, design, subset=NULL, ..., rho=NULL, return.replicates=FALSE, na.action, multicore=getOption("survey.multicore")){ if (!exists(".Generic",inherits=FALSE)) .Deprecated("svyglm") subset<-substitute(subset) subset<-eval(subset, design$variables, parent.frame()) if (!is.null(subset)) design<-design[subset,] if(multicore && !requireNamespace("parallel",quietly=TRUE)) multicore<-FALSE data<-design$variables g<-match.call() formula<-eval.parent(formula) environment(formula)<-environment() g$formula<-formula g$data<-quote(data) g$design<-NULL g$var<-g$rho<-g$return.replicates<-g$multicore<-NULL g$weights<-quote(.survey.prob.weights) g[[1]]<-quote(glm) g$model<-TRUE g$x<-TRUE g$y<-TRUE scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed(rho) pwts<-design$pweights/sum(design$pweights) if (is.data.frame(pwts)) pwts<-pwts[[1]] if (!all(all.vars(formula) %in% names(data))) stop("all variables must be in design= argument") .survey.prob.weights<-pwts full<-with(data,eval(g)) full$naive.cov<-summary(full)$cov.unscaled nas<-attr(full$model, "na.action") if(getOption("survey.drop.replicates") && !is.null(design$selfrep) && all(design$selfrep)){ v<-matrix(0,ncol=length(coef(full)),nrow=length(coef(full))) betas<-NULL } else { betas<-matrix(ncol=length(coef(full)), nrow=ncol(design$repweights)) if (!design$combined.weights) pw1<-pwts else pw1<-rep(1,length(pwts)) wts<-design$repweights if (length(nas)){ wts<-wts[-nas,] pw1<-pw1[-nas] } XX<-full$x YY<-full$y beta0<-coef(full) if (!all(is.finite(beta0))) stop(paste("Infinite/NA values in estimate (",paste(beta0,collapse=","),")")) if(is.null(full$offset)) offs<-rep(0,nrow(XX)) else offs<-full$offset incpt<-as.logical(attr(terms(full),"intercept")) fam<-full$family contrl<-full$control if (multicore){ betas<-do.call(rbind,parallel::mclapply(1:ncol(wts), function(i){ wi<-as.vector(wts[,i])*pw1 glm.fit(XX, YY, weights = wi/sum(wi), start =beta0, offset = offs, family = fam, control = contrl, intercept = incpt)$coefficients })) } else { for(i in 1:ncol(wts)){ wi<-as.vector(wts[,i])*pw1 betas[i,]<-glm.fit(XX, YY, weights = wi/sum(wi), start =beta0, offset = offs, family = fam, control = contrl, intercept = incpt)$coefficients } } v<-svrVar(betas,scale, rscales,mse=design$mse,coef=beta0) } full$x<-NULL full$df.residual<-degf(design)+1-length(coef(full)[!is.na(coef(full))]) if (length(nas)) design<-design[-nas,] full$cov.unscaled<-v if (return.replicates){ attr(betas,"scale")<-design$scale attr(betas,"rscales")<-design$rscales attr(betas,"mse")<-design$mse full$replicates<-betas } class(full)<-c("svrepglm", "svyglm", class(full)) full$call<-sys.call(-1) if(!("formula" %in% names(full$call))) { if (is.null(names(full$call))) i<-1 else i<-min(which(names(full$call)[-1]=="")) names(full$call)[i+1]<-"formula" } full$survey.design<-design full } print.summary.svyglm<-function (x, digits = max(3, getOption("digits") - 3), symbolic.cor = x$symbolic.cor, signif.stars = getOption("show.signif.stars"), ...) { ##if (!exists("printCoefmat")) printCoefmat<-print.coefmat cat("\nCall:\n") cat(paste(deparse(x$call), sep = "\n", collapse = "\n"), "\n\n", sep = "") cat("Survey design:\n") print(x$survey.design$call) if (!is.null(df <- x$df) && (nsingular <- df[3] - df[1])) cat("\nCoefficients: (", nsingular, " not defined because of singularities)\n", sep = "") else cat("\nCoefficients:\n") coefs <- x$coefficients if (!is.null(aliased <- is.na(x$coefficients[,1])) && any(aliased)) { cn <- names(aliased) coefs <- matrix(NA, length(aliased), 4, dimnames = list(cn, colnames(coefs))) coefs[!aliased, ] <- x$coefficients } printCoefmat(coefs, digits = digits, signif.stars = signif.stars, na.print = "NA", ...) cat("\n(Dispersion parameter for ", x$family$family, " family taken to be ", format(x$dispersion), ")\n\n", "Number of Fisher Scoring iterations: ", x$iter, "\n", sep = "") correl <- x$correlation if (!is.null(correl)) { p <- NCOL(correl) if (p > 1) { cat("\nCorrelation of Coefficients:\n") if (is.logical(symbolic.cor) && symbolic.cor) { print(symnum(correl, abbr.colnames = NULL)) } else { correl <- format(round(correl, 2), nsmall = 2, digits = digits) correl[!lower.tri(correl)] <- "" print(correl[-1, -p, drop = FALSE], quote = FALSE) } } } cat("\n") invisible(x) } predict.svrepglm <- function(object, newdata=NULL, total=NULL, type = c("link", "response","terms"), se.fit=(type!="terms"), vcov=FALSE, return.replicates=!is.null(object$replicates),...){ if(is.null(newdata)) newdata<-model.frame(object$survey.design) type<-match.arg(type) if (type=="terms") return(predterms(object,se=se.fit,...)) tt<-delete.response(terms(formula(object))) mf<-model.frame(tt,data=newdata) mm<-model.matrix(tt,mf) if (!is.null(total) && attr(tt,"intercept")){ mm[,attr(tt,"intercept")]<-mm[,attr(tt,"intercept")]*total } eta<-drop(mm %*% coef(object)) d<-drop(object$family$mu.eta(eta)) eta<-switch(type, link=eta, response=object$family$linkinv(eta)) if(se.fit){ if(vcov){ vv<-mm %*% vcov(object) %*% t(mm) attr(eta,"var")<-switch(type, link=vv, response=d*(t(vv*d))) } else { ## FIXME make this more efficient vv<-drop(rowSums((mm %*% vcov(object)) * mm)) attr(eta,"var")<-switch(type, link=vv, response=drop(d*(t(vv*d)))) } } attr(eta,"statistic")<-type if (return.replicates){ if (is.null(object$replicates)) { warning("replicates are not present in the fit") } else{ pred.replicates<-t(apply(object$replicates,1, function(beta){ etai<-drop(mm %*% beta) switch(type, link=etai, response=object$family$linkinv(etai)) })) attr(pred.replicates,"scale")<-attr(object$replicates,"scale") attr(pred.replicates,"rscales")<-attr(object$replicates,"rscales") attr(pred.replicates,"mse")<-attr(object$replicates,"mse") eta<-list(eta,replicates=pred.replicates) } } class(eta)<-"svrepstat" eta } svyratio.svyrep.design<-svrepratio<-function(numerator=formula,denominator, design, na.rm=FALSE,formula,covmat=FALSE, return.replicates=FALSE,deff=FALSE,...){ if (!exists(".Generic")) .Deprecated("svyratio") if (!inherits(design, "svyrep.design")) stop("design must be a svyrepdesign object") if (inherits(numerator,"formula")) numerator<-model.frame(numerator,design$variables, na.action=na.pass) else if(typeof(numerator) %in% c("expression","symbol")) numerator<-eval(numerator, design$variables) if (inherits(denominator,"formula")) denominator<-model.frame(denominator,design$variables, na.action=na.pass) else if(typeof(denominator) %in% c("expression","symbol")) denominator<-eval(denominator, design$variables) nn<-NCOL(numerator) nd<-NCOL(denominator) all<-cbind(numerator,denominator) nas<-!complete.cases(all) if (na.rm==TRUE){ design<-design[!nas,] all<-all[!nas,,drop=FALSE] numerator<-numerator[!nas,,drop=FALSE] denominator<-denominator[!nas,,drop=FALSE] } allstats<-svymean(all, design, return.replicates=TRUE) rval<-list(ratio=outer(allstats$mean[1:nn], allstats$mean[nn+1:nd], "/")) if (is.null(allstats$replicates)){ ##only self-representing strata. vars<-matrix(0,nrow=nn,ncol=nd) }else { vars<-matrix(nrow=nn,ncol=nd) if (deff) deffs<-matrix(nrow=nn,ncol=nd) for(i in 1:nn){ for(j in 1:nd){ vars[i,j]<-svrVar(allstats$replicates[,i]/allstats$replicates[,nn+j], design$scale, design$rscales,mse=design$mse,coef=rval$ratio[i,j]) if (deff=="replace" || deff) deffs[i,j]<-deff(svytotal(numerator[,i]-rval[i,j]*denominator[,j],design,deff=deff)) } } } if (covmat){ if (is.null(allstats$replicates)) vcovmat<-matrix(0,nn*nd,nn*nd) else vcovmat<-as.matrix(svrVar(allstats$replicates[,rep(1:nn,nd)]/allstats$replicates[,nn+rep(1:nd,each=nn)], design$scale, design$rscales,mse=design$mse,coef=as.vector(rval$ratio))) rownames(vcovmat)<-names(numerator)[rep(1:nn,nd)] colnames(vcovmat)<-names(denominator)[rep(1:nd,each=nn)] rval$vcov<-vcovmat } if (return.replicates) { reps<-allstats$replicates[, rep(1:nn, nd)]/allstats$replicates[, nn + rep(1:nd, each = nn)] attr(reps,"scale")<-design$scale attr(reps,"rscales")<-design$rscales attr(reps,"mse")<-design$mse rval$replicates<-reps } rval$var<-vars attr(rval,"call")<-sys.call() if (deff=="replace" || deff) attr(rval,"deff")<-deffs class(rval)<-"svyratio" rval } vcov.svyratio <- function(object, ...){ covmat<-object$vcov if (is.null(covmat)){ covmat<-matrix(NaN,length(object$var),length(object$var)) diag(covmat)<-as.vector(object$var) } nms<-as.vector(outer(rownames(object$ratio),colnames(object$ratio),paste,sep="/")) dimnames(covmat)<-list(nms,nms) covmat } residuals.svrepglm<-function(object,type = c("deviance", "pearson", "working", "response", "partial"),...){ type<-match.arg(type) if (type=="pearson"){ y <- object$y mu <- object$fitted.values wts <- object$prior.weights r<-(y - mu) * sqrt(wts)/(sqrt(object$family$variance(mu))*sqrt(object$survey.design$pweights/sum(object$survey.design$pweights))) if (is.null(object$na.action)) r else naresid(object$na.action, r) } else NextMethod() } logLik.svrepglm<-function(object,...){ stop("svrepglm not fitted by maximum likelihood.") } withReplicates<-function(design, theta, ..., return.replicates=FALSE){ UseMethod("withReplicates",design) } withReplicates.svrepvar<-function(design, theta, ...,return.replicates=FALSE){ if (is.null(reps<-design$replicates)) stop("object does not contain replicate estimates") p<-sqrt(NCOL(reps)) if (is.function(theta)){ full<-theta(design[[1]],...) thetas<-drop(t(apply(reps,1, function(rr) theta(matrix(rr,p,p), ...)))) } else{ full<-eval(theta, list(.replicate=design[[1]])) thetas<-drop(t(apply(reps,1, function(rr) eval(theta, list(.replicate=matrix(rr,p,p)))))) } v<-svrVar(thetas, attr(reps,"scale"), attr(reps,"rscales"), mse=attr(reps,"mse"), coef=full) attr(full,"var")<-v attr(full,"statistic")<-"theta" if (return.replicates){ attr(thetas,"scale")<-attr(reps,"scale") attr(thetas,"rscales")<-attr(reps,"rscales") attr(thetas,"mse")<-attr(reps,"mse") rval<-list(theta=full, replicates=thetas) } else { rval<-full } class(rval)<-"svrepstat" rval } withReplicates.svrepstat<-function(design, theta, ..., return.replicates=FALSE){ if (is.null(reps<-design$replicates)) stop("object does not contain replicate estimates") reps<-as.matrix(reps) if (is.function(theta)){ full<-theta(design[[1]],...) thetas<-drop(t(apply(reps,1,theta, ...))) } else{ full<-eval(theta, list(.replicate=design[[1]])) thetas<-drop(t(apply(reps,1, function(rr) eval(theta, list(.replicate=rr))))) } v<-svrVar(thetas, attr(reps,"scale"), attr(reps,"rscales"), mse=attr(reps,"mse"), coef=full) attr(full,"var")<-v attr(full,"statistic")<-"theta" if (return.replicates){ attr(thetas,"scale")<-attr(reps,"scale") attr(thetas,"rscales")<-attr(reps,"rscales") attr(thetas,"mse")<-attr(reps,"mse") rval<-list(theta=full, replicates=thetas) } else { rval<-full } class(rval)<-"svrepstat" rval } withReplicates.svyrep.design<-function(design, theta, rho=NULL,..., scale.weights=FALSE, return.replicates=FALSE){ wts<-design$repweights scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed("rho") if (scale.weights) pwts<-design$pweights/sum(design$pweights) else pwts<-design$pweights if (inherits(wts,"repweights_compressed")){ if (scale.weights) wts$weights<-sweep(wts$weights,2,drop(colSums(wts$weights)),"/") } else { if (scale.weights) wts<-sweep(wts,2, drop(colSums(wts)),"/") } rpwts<-if (design$combined.weights) 1 else pwts data<-design$variables if (is.function(theta)){ full<-theta(pwts,data,...) thetas<-drop(t(apply(wts,2, function(ww) theta(as.vector(ww)*rpwts, data, ...)))) } else{ .weights<-pwts full<-with(data, eval(theta)) thetas<-drop(t(apply(wts,2, function(.weights) {.weights<-as.vector(.weights)*rpwts with(data, eval(theta))}))) } v<-svrVar(thetas, scale, rscales,mse=design$mse, coef=full) attr(full,"var")<-v attr(full,"statistic")<-"theta" if (return.replicates) rval<-list(theta=full, replicates=thetas) else rval<-full class(rval)<-"svrepstat" rval } coef.svrepstat<-function(object,...){ if (is.list(object)) object<-object[[1]] attr(object,"statistic")<-NULL attr(object,"deff")<-NULL attr(object,"var")<-NULL unclass(object) } vcov.svrepstat<-function (object, ...) { nms <- names(coef(object)) if (is.list(object)) object <- object[[1]] v <- as.matrix(attr(object, "var")) if (length(object) == NCOL(v)) { dimnames(v) <- list(nms, nms) v } else if (length(object) == length(v)) { dnms <- dimnames(coef(object)) vmat <- matrix(NA, nrow = length(object), ncol = length(object)) diag(vmat) <- as.vector(v) nms <- as.vector(outer(dnms[[1]], dnms[[2]], paste, sep = ":")) dimnames(vmat) <- list(nms, nms) vmat } } as.data.frame.svrepstat<-function(x,...){ if (is.list(x)) { x<-x[[1]] class(x)<-"svrepstat" } rval<-data.frame(statistic=coef(x),SE=SE(x)) names(rval)[1]<-attr(x,"statistic") if (!is.null(attr(x,"deff"))) rval<-cbind(rval,deff=deff(x)) rval } SE<-function(object,...){ UseMethod("SE") } SE.default<-function(object,...){ sqrt(diag(vcov(object,...))) } SE.svrepstat<-function(object,...){ if (is.list(object)){ object<-object[[1]] } vv<-as.matrix(attr(object,"var")) if (!is.null(dim(object)) && length(object)==length(vv)) sqrt(vv) else sqrt(diag(vv)) } print.svrepstat<-function(x,...){ if (is.list(x)){ x<-x[[1]] } vv<-attr(x,"var") deff<-attr(x, "deff") if (!is.null(dim(x)) && length(x)==length(vv)){ cat("Statistic:\n") prmatrix(x) cat("SE:\n") print(sqrt(vv)) if (!is.null(deff)){ cat("Design Effect:\n") printCoefmat() } } else if(length(x)==NCOL(vv)){ m<-cbind(x,sqrt(diag(as.matrix(vv)))) if (is.null(deff)) colnames(m)<-c(attr(x,"statistic"),"SE") else { m<-cbind(m,deff(x)) colnames(m)<-c(attr(x,"statistic"),"SE","DEff") } printCoefmat(m) } else {stop("incorrect structure of svrepstat object")} naa<-attr(vv,"na.replicates") if (!is.null(naa)) cat("Note: NA results discarded for",length(naa),"replicates (",naa,")\n") } summary.svrepglm<-function (object, correlation = FALSE, df.resid=NULL,...) { Qr <- object$qr est.disp <- TRUE if (is.null(df.resid)) df.r <- object$df.residual else df.r<-df.resid presid<-resid(object,"pearson") dispersion<- sum( object$survey.design$pweights*presid^2,na.rm=TRUE)/sum(object$survey.design$pweights) coef.p <- coef(object) covmat<-vcov(object) dimnames(covmat) <- list(names(coef.p), names(coef.p)) var.cf <- diag(covmat) s.err <- sqrt(var.cf) tvalue <- coef.p/s.err dn <- c("Estimate", "Std. Error") if (!est.disp) { pvalue <- 2 * pnorm(-abs(tvalue)) coef.table <- cbind(coef.p, s.err, tvalue, pvalue) dimnames(coef.table) <- list(names(coef.p), c(dn, "z value", "Pr(>|z|)")) } else if (df.r > 0) { pvalue <- 2 * pt(-abs(tvalue), df.r) coef.table <- cbind(coef.p, s.err, tvalue, pvalue) dimnames(coef.table) <- list(names(coef.p), c(dn, "t value", "Pr(>|t|)")) } else { coef.table <- cbind(coef.p, Inf) dimnames(coef.table) <- list(names(coef.p), dn) } ans <- c(object[c("call", "terms", "family", "deviance", "aic", "contrasts", "df.residual", "null.deviance", "df.null", "iter")], list(deviance.resid = residuals(object, type = "deviance"), aic = object$aic, coefficients = coef.table, dispersion = dispersion, df = c(object$rank, df.r,NCOL(Qr$qr)), cov.unscaled = covmat, cov.scaled = covmat)) if (correlation) { dd <- sqrt(diag(covmat)) ans$correlation <- covmat/outer(dd, dd) } ans$aliased<-is.na(ans$coef) ans$survey.design<-list(call=object$survey.design$call, type=object$survey.design$type) class(ans) <- c("summary.svyglm","summary.glm") return(ans) } svytable.svyrep.design<-svreptable<-function(formula, design, Ntotal=sum(weights(design, "sampling")), round=FALSE,...){ if (!exists(".Generic",inherits=FALSE)) .Deprecated("svytable") weights<-design$pweights if (is.data.frame(weights)) weights<-weights[[1]] ## unstratified or unadjusted. if (is.null(Ntotal) || length(Ntotal)==1){ ff<-eval(substitute(lhs~rhs,list(lhs=quote(weights), rhs=formula[[2]]))) tbl<-xtabs(ff, data=design$variables,...) if (!is.null(Ntotal)) { tbl<-tbl*sum(Ntotal)/sum(tbl) } if (round) tbl<-round(tbl) class(tbl) <- c("svytable", class(tbl)) attr(tbl, "call")<-match.call() return(tbl) } ## adjusted and stratified ff<-eval(substitute(lhs~strata+rhs,list(lhs=quote(weights), rhs=formula[[2]], strata=quote(design$strata)))) tbl<-xtabs(ff, data=design$variables,...) ss<-match(sort(unique(design$strata)), Ntotal[,1]) dm<-dim(tbl) layer<-prod(dm[-1]) tbl<-sweep(tbl,1,Ntotal[ss, 2]/apply(tbl,1,sum),"*") tbl<-apply(tbl, 2:length(dm), sum) if (round) tbl<-round(tbl) class(tbl)<-c("svytable", "xtabs","table") attr(tbl, "call")<-match.call() tbl } postStratify<-function(design,strata, population, partial=FALSE,...){ UseMethod("postStratify") } postStratify.svyrep.design<-function(design, strata, population, partial=FALSE,compress=NULL,...){ if(inherits(strata,"formula")){ mf<-substitute(model.frame(strata, data=design$variables,na.action=na.fail)) strata<-eval.parent(mf) } strata<-as.data.frame(strata) if (is.null(compress)) compress<-inherits(design$repweights, "repweights_compressed") sampletable<-xtabs(design$pweights~.,data=strata) sampletable<-as.data.frame(sampletable) if (inherits(population,"table")) population<-as.data.frame(population) else if (is.data.frame(population)) population$Freq <- as.vector(population$Freq) else stop("population must be a table or dataframe") if (!all(names(strata) %in% names(population))) stop("Stratifying variables don't match") nn<- names(population) %in% names(strata) if (sum(!nn)!=1) stop("stratifying variables don't match") names(population)[which(!nn)]<-"Pop.Freq" both<-merge(sampletable, population, by=names(strata), all=TRUE) samplezero <- both$Freq %in% c(0, NA) popzero <- both$Pop.Freq %in% c(0, NA) both<-both[!(samplezero & popzero),] if (any(onlysample<- popzero & !samplezero)){ print(both[onlysample,]) stop("Strata in sample absent from population. This Can't Happen") } if (any(onlypop <- samplezero & !popzero)){ if (partial){ both<-both[!onlypop,] warning("Some strata absent from sample: ignored") } else { print(both[onlypop,]) stop("Some strata absent from sample: use partial=TRUE to ignore them.") } } reweight<-both$Pop.Freq/both$Freq both$label <- do.call("interaction", list(both[,names(strata)])) designlabel <- do.call("interaction", strata) index<-match(designlabel, both$label) oldpw<-design$pweights design$pweights<-design$pweights*reweight[index] if (design$combined.weights){ replicateFreq<- rowsum(as.matrix(design$repweights), match(designlabel, both$label), reorder=TRUE) repreweight<- both$Pop.Freq/replicateFreq design$repweights <- as.matrix(design$repweights)*repreweight[index] } else { replicateFreq<- rowsum(as.matrix(design$repweights)*oldpw, match(designlabel, both$label), reorder=TRUE) repreweight<- both$Pop.Freq/replicateFreq design$repweights <- as.matrix(design$repweights)* (repreweight/reweight)[index,] } if (compress) design$repweights<-compressWeights(design$repweights) design$call<-sys.call(-1) if(!is.null(design$degf)){ design$degf<-NULL design$degf<-degf(design) } design } rake<-function(design, sample.margins, population.margins, control=list(maxit=10, epsilon=1, verbose=FALSE), compress=NULL){ if (!missing(control)){ control.defaults<-formals(rake)$control for(n in names(control.defaults)) if(!(n %in% names(control))) control[[n]]<-control.defaults[[n]] } is.rep<-inherits(design,"svyrep.design") if (is.rep && is.null(compress)) compress<-inherits(design$repweights,"repweights_compressed") if (is.rep) design$degf<-NULL if (length(sample.margins)!=length(population.margins)) stop("sample.margins and population.margins do not match.") nmar<-length(sample.margins) if (control$epsilon<1) epsilon<-control$epsilon*sum(weights(design,"sampling")) else epsilon<-control$epsilon strata<-lapply(sample.margins, function(margin) if(inherits(margin,"formula")){ mf<-model.frame(margin, data=design$variables,na.action=na.fail) } ) allterms<-unlist(lapply(sample.margins,all.vars)) ff<-formula(paste("~", paste(allterms,collapse="+"),sep="")) oldtable<-svytable(ff, design) if (control$verbose) print(oldtable) oldpoststrata<-design$postStrata iter<-0 converged<-FALSE while(iter < control$maxit){ ## we don't want to accumulate more poststrata with each iteration design$postStrata<-NULL for(i in 1:nmar){ design<-postStratify(design, strata[[i]], population.margins[[i]], compress=FALSE) } newtable<-svytable(ff, design) if (control$verbose) print(newtable) delta<-max(abs(oldtable-newtable)) if (delta1)){ a<-rep(a,df) } tr<-mean(a) tr2<-mean(a^2)/(tr^2) list(scale=tr*tr2, df=length(a)/tr2) } ## chisqphi<-function(t, df=1,a=1){ ## (1-(0+2i)*a*t)^(-df/2) ## } ## make.integrand<-function(x,DF,A){ ## m<-length(DF) ## function(t){ ## n<-length(t) ## tmp<-matrix(chisqphi(rep(t,each=m),rep(DF,n),rep(A,n) ),ncol=n) ## phi<-apply(tmp,2,prod) ## rval<-Im(phi*exp(-(0+1i)*t*x)/(pi*t)) ## rval[t==0]<-x/(pi) ## rval ## } ## } method<-match.arg(method) sat<-satterthwaite(a,df) guess<-pchisq(x/sat$scale,sat$df,lower.tail=lower.tail) if (method=="satterthwaite") return(guess) method<-match.arg(method) if (method=="integration" && !(requireNamespace("CompQuadForm",quietly=TRUE))){ warning("Package 'CompQuadForm' not found, using saddlepoint approximation") method<-"saddlepoint" } abstol<-guess/1000 abstol<-pmax(1e-9, abstol) reltol<-rep(1/1000,length(abstol)) if (method=="integration"){ if (any(a<=0)){ for(i in seq(length=length(x))){ f<-CompQuadForm::davies(x[i],a,df,acc=1e-7) if (f$ifault>0) warning("Probable loss of accuracy ") guess[i]<-f$Qq } if(any(guess<1e-6)) warning("Probable loss of accuracy ") } else{ for(i in seq(length=length(x))){ ## version 1.4.2 of CompQuadForm changed the *name* of the result. Grr. temp<-CompQuadForm::farebrother(x[i],a,df) guess[i]<-if ("Qq" %in% names(temp)) temp$Qq else temp$res } if(any(guess<1e-9)) warning("Probable loss of accuracy ") } if (lower.tail) guess<-1-guess return(guess) } else if (method=="saddlepoint"){ for(i in seq(length=length(x))){ lambda<-rep(a,df) sad<-sapply(x,saddle,lambda=lambda) if (lower.tail) sad<-1-sad guess<-ifelse(is.na(sad),guess,sad) } return(guess) } } saddle<-function(x,lambda){ d<-max(lambda) lambda<-lambda/d x<-x/d k0<-function(zeta) -sum(log(1-2*zeta*lambda))/2 kprime0<-function(zeta) sapply(zeta, function(zz) sum(lambda/(1-2*zz*lambda))) kpprime0<-function(zeta) 2*sum(lambda^2/(1-2*zeta*lambda)^2) n<-length(lambda) if (any(lambda < 0)) { lmin <- max(1/(2 * lambda[lambda < 0])) * 0.99999 } else if (x>sum(lambda)){ lmin <- -0.01 } else { lmin<- -length(lambda)/(2*x) } lmax<-min(1/(2*lambda[lambda>0]))*0.99999 hatzeta <- uniroot(function(zeta) kprime0(zeta) - x, lower = lmin, upper = lmax, tol = 1e-08)$root w<-sign(hatzeta)*sqrt(2*(hatzeta*x-k0(hatzeta))) v<-hatzeta*sqrt(kpprime0(hatzeta)) if (abs(hatzeta)<1e-4) NA else pnorm(w+log(v/w)/w, lower.tail=FALSE) } survey/R/svysurvreg.R0000644000176200001440000000521713101467321014375 0ustar liggesuserssvysurvreg<-function (formula, design, weights=NULL, subset = NULL, ...) { UseMethod("svysurvreg", design) } residuals.svysurvreg<-function(object, type = c("response", "deviance", "dfbeta", "dfbetas", "working", "ldcase", "ldresp", "ldshape", "matrix"), rsigma = TRUE, collapse = FALSE, weighted = TRUE, ...) { NextMethod() } svysurvreg.survey.design<- function (formula, design, weights=NULL, subset=NULL, ...) { subset <- substitute(subset) subset <- eval(subset, model.frame(design), parent.frame()) if (!is.null(subset)) design <- design[subset, ] if (any(weights(design) < 0)) stop("weights must be non-negative") data <- model.frame(design) g <- match.call() g$formula <- eval.parent(g$formula) g$design <- NULL g$var <- NULL if (is.null(g$weights)) g$weights <- quote(.survey.prob.weights) else g$weights <- bquote(.survey.prob.weights * .(g$weights)) g[[1]] <- quote(survreg) g$data <- quote(data) g$subset <- quote(.survey.prob.weights > 0) g$model <- TRUE data$.survey.prob.weights <- (1/design$prob)/mean(1/design$prob) if (!all(all.vars(formula) %in% names(data))) stop("all variables must be in design= argument") g <- with(list(data = data), eval(g)) g$call <- match.call() g$call[[1]] <- as.name(.Generic) g$printcall <- sys.call(-1) g$printcall[[1]] <- as.name(.Generic) class(g) <- c("svysurvreg", class(g)) g$survey.design <- design nas <- g$na.action if (length(nas)) design <- design[-nas, ] dbeta.subset <- resid(g, "dfbeta", weighted = TRUE) if (nrow(design) == NROW(dbeta.subset)) { dbeta <- as.matrix(dbeta.subset) } else { dbeta <- matrix(0, ncol = NCOL(dbeta.subset), nrow = nrow(design)) dbeta[is.finite(design$prob), ] <- dbeta.subset } g$inv.info <- g$var if (inherits(design, "survey.design2")) g$var <- svyrecvar(dbeta, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) else if (inherits(design, "twophase")) g$var <- twophasevar(dbeta, design) else if (inherits(design, "twophase2")) g$var <- twophase2var(dbeta, design) else if (inherits(design, "pps")) g$var <- ppsvar(dbeta, design) else g$var <- svyCprod(dbeta, design$strata, design$cluster[[1]], design$fpc, design$nPSU, design$certainty, design$postStrata) g$ll <- g$loglik g$loglik <- NA g$degf.resid <- degf(design) - length(coef(g)[!is.na(coef(g))]) + 1 g } survey/R/mse.R0000644000176200001440000000066612242746122012731 0ustar liggesusers mse<-function(repstat, design){ v<-attr(repstat,"var") center<-attr(v,"means") if ((length(v)!=length(center)^2) && (length(v)==length(center))){ attr(repstat,"var")<-vcov(repstat)+(center-coef(repstat))^2*sum(design$rscales)*design$scale } else { attr(repstat,"var")<-as.matrix(vcov(repstat)+outer((center-coef(repstat)))*sum(design$rscales)*design$scale) } repstat } survey/R/sysdata.rda0000644000176200001440000000073713122573422014160 0ustar liggesusersBZh91AY&SYS!x3XP@6f@ 8%)=L dbzi"S R4P 'EC7 *Uᙎ,n{EU>A*&IQP(1HND 1 $ pB`8 JNį3:'boJ@ãrY aJ ʍn4 \!3ew,rnw"E0*W3.UkD72j֍ZZߧ&max(small.primes)) return(NULL) p<-min(small.primes[small.primes>=n]) if ((p+1 > nceil+4) && (nceil+4 < nmax)) return(paley(nceil+3)) if (p>nmax) return(NULL) } else{ p<-prime if ((p+1) %% 4 !=0) { warning("'prime'+1 is not divisible by 4") return(NULL) } if (p0]<-1 rval<-cbind(1,rbind(1,m)) if(check) { if(!is.hadamard(rval)) warning("matrix is not Hadamard: is 'prime' really prime?") } rval } is.hadamard<-function(H, style=c("0/1","+-"), full.orthogonal.balance=TRUE){ if (is.matrix(H) && is.numeric(H) && (ncol(H)==nrow(H))){ H<-switch(match.arg(style), "0/1"= 2*H-1, "+-"=H) isTRUE(all.equal(crossprod(H), diag(ncol(H))*ncol(H))) && all.equal(max(abs(H)),1) && (!full.orthogonal.balance || sum(H[-1,])==0) } else FALSE } survey/R/surveygraph.R0000755000176200001440000002313412750511434014522 0ustar liggesusersmake.panel.svysmooth<-function(design,bandwidth=NULL){ function(x,y,span=NULL,col.smooth="red",col=par("col"),bg=NA,pch=par("pch"),cex=1,...){ if(!is.null(span)) bandwidth<-diff(range(x))*span/3 s<-svysmooth(y~x,design=design,bandwidth=bandwidth) points(x,y,pch=pch,bg=bg,col=col) lines(s[[1]],col=col.smooth,...) } } svyplot<-function(formula, design,...) UseMethod("svyplot",design) svyplot.default<-function(formula, design, style=c("bubble","hex","grayhex","subsample","transparent"), sample.size=500, subset=NULL,legend=1,inches=0.05, amount=NULL,basecol="black",alpha=c(0,0.8), xbins=30,...){ style<-match.arg(style) if (style %in% c("hex","grayhex") && !requireNamespace("hexbin",quietly=TRUE)){ stop(style," plots require the hexbin package") } subset<-substitute(subset) subset<-with(design$variables, subset) if(length(subset)>0) design<-design[subset,] W<-weights(design, "sampling") mf<-model.frame(formula, design$variables,na.action=na.pass) Y<-model.response(mf) X<-mf[,attr(attr(mf,"terms"),"term.labels")] switch(style, bubble={ if(is.function(basecol)) basecol<-basecol(model.frame(design)) symbols(X,Y,circles=sqrt(W),inches=inches,fg=basecol,...) }, hex={ ## CRAN will be happier if we stop supporting the old version of hexbin ## new version rval<-hexbin::hexbin(X,Y,IDs=TRUE,xbins=xbins) cell<-rval@cID rval@count<-as.vector(tapply(W,cell,sum)) rval@xcm<-as.vector(tapply(1:length(X), cell, function(ii) weighted.mean(X[ii],W[ii]))) rval@ycm<-as.vector(tapply(1:length(Y), cell, function(ii) weighted.mean(Y[ii],W[ii]))) hexbin::gplot.hexbin(rval, legend=legend, style="centroids",...) }, grayhex={ ## new version rval<-hexbin::hexbin(X,Y,IDs=TRUE,xbins=xbins) cell<-rval@cID rval@count<-as.vector(tapply(W,cell,sum)) hexbin::gplot.hexbin(rval, legend=legend,...) }, subsample={ index<-sample(length(X),sample.size,replace=TRUE, prob=W) if (is.numeric(X)) xs<-jitter(X[index],factor=3,amount=amount$x) else xs<-X[index] if (is.numeric(Y)) ys<-jitter(Y[index],factor=3,amount=amount$y) else ys<-Y[index] plot(xs,ys,...) }, transparent={ transcol<-function(base,opacity){ rgbs<-col2rgb(base)/255 rgb(rgbs[1,],rgbs[2,], rgbs[3,], alpha=opacity) } if(is.function(basecol)) basecol<-basecol(model.frame(design)) w<-weights(design) maxw<-max(w) minw<-0 alphas<- (alpha[1]*(maxw-w)+alpha[2]*(w-minw))/(maxw-minw) plot(X,Y,col=transcol(basecol,alphas),...) }) } svyboxplot<-function(formula, design,all.outliers=FALSE,...) UseMethod("svyboxplot",design) svyboxplot.default<-function(formula, design, all.outliers=FALSE,col=NULL,names,...){ formula<-as.formula(formula) if(length(formula)!=3) stop("need a two-sided formula") ##if(length(formula[[3]])>2) stop("only one rhs variable allowed") outcome<-eval(bquote(~.(formula[[2]]))) outcome.values<-model.frame(outcome, model.frame(design),na.action=na.pass) if (length(attr(terms(formula),"term.labels"))){ groups<-eval(bquote(~.(formula[[3]]))) qs <- svyby(outcome,groups,design,svyquantile,ci=FALSE, keep.var=FALSE, quantiles=c(0,0.25,0.5,0.75,1),na.rm=TRUE) group.values<-model.frame(groups, model.frame(design),na.action=na.pass)[[1]] n<-NCOL(qs) iqr<- qs[,n-1]-qs[,n-3] low<-pmax(qs[,n-4],qs[,n-3]-1.5*iqr) hi<-pmin(qs[,n],qs[,n-1]+1.5*iqr) stats<-t(as.matrix(cbind(low,qs[,n-(3:1)],hi))) z<-list(stats=stats,n=coef(svytotal(groups,design,na.rm=TRUE))) for(i in 1:ncol(stats)){ out<-c(if(qs[i,n]!=hi[i]) qs[i,n], if(qs[i,n-4]!=low[i])qs[i,n-4]) if (all.outliers){ outlo<-sort(outcome.values[!is.na(outcome.values) & (as.numeric(group.values) %in% i) & outcome.valueshi[i] ]) out<-na.omit(unique(c(outlo,outhi))) } z$out<-c(z$out,out) z$group<-c(z$group,rep(i,length(out))) z$names<-as.character(qs[,1]) } } else { qs<-svyquantile(outcome,design,ci=FALSE, quantiles=c(0,0.25,0.5,0.75,1),na.rm=TRUE) iqr<-qs[4]-qs[2] z<-list(stats=matrix(c(max(qs[1],qs[2]-1.5*iqr), qs[2:4],min(qs[5],qs[4]+1.5*iqr))), n=sum(weights(design,"sampling"))) z$out<-c(if(qs[5]!=z$stats[5]) qs[5], if(qs[1]!=z$stats[1]) qs[1]) if (all.outliers){ outlo<-sort(outcome.values[!is.na(outcome.values) & outcome.valuesqs[4]+1.5*iqr]) z$out<-na.omit(unique(c(outlo,outhi))) } z$group<-rep(1,length(z$out)) } if (is.null(col)) col<-par("bg") if (!missing(names)) z$names<-names bxp(z,boxfill=col,...) } svycoplot<-function(formula, design, style=c("hexbin","transparent"), basecol="black",alpha=c(0,0.8),hexscale=c("relative","absolute"),...) UseMethod("svycoplot",design) svycoplot.default<-function(formula, design, style=c("hexbin","transparent"), basecol="black",alpha=c(0,0.8),hexscale=c("relative","absolute"),xbins=15,...){ style<-match.arg(style) wt<-weights(design,"sampling") switch(style, hexbin={ hexscale<-match.arg(hexscale) xyplot(formula, data=model.frame(design), xbins=xbins, panel=function(x,y,style="centroids",xbins,subscripts,...) { if (!length(x)) return(panel.xyplot(x,y,...)) vp<-current.viewport() wd<-convertWidth(vp$width,unitTo="cm",valueOnly=TRUE) ht<-convertHeight(vp$height,unitTo="cm",valueOnly=TRUE) W<-wt[subscripts] rval<-hexbin::hexbin(x,y,IDs=TRUE,xbins=xbins,shape=ht/wd,xbnds=vp$xscale,ybnds=vp$yscale) cell<-rval@cID rval@count<-as.vector(tapply(W,cell,sum)) rval@xcm<-as.vector(tapply(1:length(x), cell, function(ii) weighted.mean(x[ii],W[ii]))) rval@ycm<-as.vector(tapply(1:length(y), cell, function(ii) weighted.mean(x[ii],W[ii]))) hexbin::grid.hexagons(rval,style=style, maxarea=switch(hexscale, relative=0.8, absolute=0.8*sum(W)/sum(wt))) },...) }, transparent={ if(is.function(basecol)) basecol<-basecol(model.frame(design)) transcol<-function(base,opacity){ rgbs<-col2rgb(base)/255 rgb(rgbs[1,],rgbs[2,], rgbs[3,], alpha=opacity) } maxw<-max(wt) minw<-0 alphas<- (alpha[1]*(maxw-wt)+alpha[2]*(wt-minw))/(maxw-minw) cols<-transcol(basecol,alphas) xyplot(formula, data=model.frame(design), panel=function(x,y,basecol="black",subscripts,...) { a<-alphas[subscripts] panel.xyplot(x,y,col=cols[subscripts],pch=19,...) },...) } ) } barplot.svystat<-function(height,...) barplot(coef(height),...) barplot.svrepstat<-function(height,...) barplot(coef(height),...) plot.svystat<-function(x,...) barplot(coef(x),...) plot.svrepstat<-function(x,...) barplot(coef(x),...) barplot.svyby<-function(height,beside=TRUE,...){ aa <- attr(height, "svyby") rval <- height[, max(aa$margins) + (1:aa$nstats)] if (is.null(dim(rval))) { if (length(aa$margins)<2){ names(rval) <- row.names(height) } else { rval<-matrix(rval, nrow=length(unique(height[,aa$margins[1]]))) rownames(rval) <- unique(height[,aa$margins[1]]) colnames(rval)<-levels(do.call(interaction, height[,aa$margins[-1],drop=FALSE])) } } else { rval <- as.matrix(rval) colnames(rval)<-sub("statistics\\.","",colnames(rval)) rval<-t(rval) } barplot(rval,beside=beside,...) } plot.svyby<-function(x,...) barplot.svyby(x,...) dotchart.default<-graphics::dotchart dotchart<-function(x,...,pch=19) UseMethod("dotchart") dotchart.svystat<-function(x,...,pch=19) dotchart(coef(x),...,pch=pch) dotchart.svrepstat<-function(x,...,pch=19) dotchart(coef(x),...,pch=pch) dotchart.svyby<-function(x,...,pch=19){ height<-x aa <- attr(height, "svyby") rval <- height[, max(aa$margins) + (1:aa$nstats)] if (is.null(dim(rval))) { if (length(aa$margins)<2){ names(rval) <- row.names(height) } else { rval<-matrix(rval, nrow=length(unique(height[,aa$margins[1]]))) rownames(rval) <- unique(height[,aa$margins[1]]) colnames(rval)<-levels(do.call(interaction, height[,aa$margins[-1],drop=FALSE])) } } else { rval <- as.matrix(rval) colnames(rval)<-sub("statistics\\.","",colnames(rval)) rval<-t(rval) } dotchart(rval,...,pch=pch) } survey/R/grake.R0000644000176200001440000003727313122061121013225 0ustar liggesusers make.calfun<-function(Fm1,dF, name){ if (!identical(names(formals(Fm1)), c("u","bounds"))) stop("wrong argument names for Fm1") if(!identical(names(formals(dF)), c("u","bounds"))) stop("wrong argument names for dF") rval<-list(Fm1=Fm1, dF=dF, name=name) class(rval)<-"calfun" rval } print.calfun<-function(x,...) cat("calibration metric: ",x$name,"\n") calibrate<-function(design, ...) UseMethod("calibrate") calibrate.survey.design2<-function(design, formula, population, aggregate.stage=NULL, stage=0, variance=NULL, bounds=c(-Inf,Inf), calfun=c("linear","raking","logit"), maxit=50, epsilon=1e-7, verbose=FALSE, force=FALSE, trim=NULL, bounds.const = FALSE, sparse=FALSE, ...){ if(is.list(formula) && is.list(population)){ ## inputs as marginal totals, as in rake() population<-margins2totals(formula,population) formula<-as.formula(paste("~",paste(sapply(formula,function(f) paste(all.vars(f),collapse="*")),collapse="+"))) if (verbose){ print(formula) print(population) } } if (!is.list(bounds)) bounds <- list(lower = bounds[1], upper = bounds[2]) ## converting to list if not already if (is.character(calfun)) calfun<-match.arg(calfun) if (is.character(calfun) && calfun=="linear" && all(unlist(bounds) == c(-Inf, Inf))){ ## old code is better for ill-conditioned linear calibration rval<-regcalibrate(design,formula,population, aggregate.stage=aggregate.stage, stage=stage, lambda=variance,sparse=sparse,...) rval$call<-sys.call(-1) return(rval) } if(is.character(calfun)) calfun<-switch(calfun,linear=cal.linear, raking=cal.raking, logit=cal.logit) else if(!inherits(calfun,"calfun")) stop("'calfun' must be a string or of class 'calfun'.") if (length(epsilon)!=1 && length(epsilon)!=length(population)) stop("'epsilon' must be a scalar or of the same length as 'population'") if (!is.null(aggregate.stage)){ aggindex<-design$cluster[[aggregate.stage]] } expit<-function(x) 1-1/(1+exp(x)) ## calibration to population totals if(sparse){ mm<-sparse.model.matrix(formula, model.frame(formula, model.frame(design))) }else{ mm<-model.matrix(formula, model.frame(formula, model.frame(design))) } ww<-weights(design) if (bounds.const) bounds<-lapply(bounds, function(x) x/ww) # if bounds are set to a constant convert to multiplicative value and run as normal if (!is.null(aggregate.stage)){ mm<-apply(mm,2,function(mx) ave(mx,aggindex)) ww<-ave(ww,aggindex) } whalf<-sqrt(ww) sample.total<-colSums(mm*ww) if(any(sample.total==0)){ ## drop columsn where all sample and population are zero zz<-(population==0) & (apply(mm,2,function(x) all(x==0))) mm<-mm[,!zz] population<-population[!zz] sample.total<-sample.total[!zz] if (length(epsilon)>1) epsilon <- epsilon[!zz] } if (length(sample.total)!=length(population)){ print(sample.total) print(population) stop("Population and sample totals are not the same length.") } if(!is.null(names(population))){ if (!all(names(sample.total) %in% names(population))) warning("Sampling and population totals have different names.") else if (!all(names(sample.total) == names(population))){ warning("Sample and population totals reordered to make names agree: check results.") population <- population[match(names(sample.total), names(population))] } } tqr<-qr(mm*whalf) #if (!all(abs(qr.resid(tqr,whalf))<1e-10)) # warning("G-calibration models must have an intercept") g<-grake(mm,ww,calfun, bounds=bounds,population=population, verbose=verbose,epsilon=epsilon,maxit=maxit, variance=variance) if(!is.null(trim)) { gnew<-pmax(trim[1], pmin(g, trim[2])) outside<-gtrim[2] if (any(outside)){ trimmings<-(g-gnew)*ww gnew[!outside]<-gnew[!outside]+sum(trimmings)/sum(ww[!outside]) g<-gnew attr(g,"failed")<-NULL message(paste(sum(outside),"weights were trimmed")) } } if (!is.null(attr(g,"failed"))){ if (!force) stop("Calibration failed") } design$prob<-design$prob/g caldata <- list(qr=tqr, w=g*whalf, stage=0, index=NULL) class(caldata) <- c("greg_calibration","gen_raking") design$postStrata <- c(design$postStrata, list(caldata)) design$call <- sys.call(-1) design } calibrate.svyrep.design<-function(design, formula, population,compress=NA, aggregate.index=NULL, variance=NULL, bounds=c(-Inf,Inf), calfun=c("linear","raking","logit"), maxit=50, epsilon=1e-7, verbose=FALSE,force=FALSE, trim=NULL, bounds.const=FALSE, sparse=FALSE, ...){ if(is.list(formula) && is.list(population)){ ## inputs as marginal totals, as in rake() population<-margins2totals(formula,population) formula<-as.formula(paste("~",paste(sapply(formula,function(f) paste(all.vars(f),collapse="*")),collapse="+"))) if (verbose){ print(formula) print(population) } } if (is.character(calfun)) calfun<-match.arg(calfun) if (length(epsilon)!=1 && length(epsilon)!=length(population)) stop("'epsilon' must be a scalar or of the same length as 'population'") if (!is.list(bounds)) bounds <- list(lower = bounds[1], upper = bounds[2]) ## converting to list if not already if (is.character(calfun) && calfun=="linear" && all(unlist(bounds)==c(-Inf,Inf))){ ## old code is better for ill-conditioned linear calibration rval<-regcalibrate(design,formula,population, compress=compress, aggregate.index=aggregate.index, lambda=variance,...) rval$call<-sys.call(-1) return(rval) } mf<-model.frame(formula, design$variables) if(sparse){ mm<-sparse.model.matrix(formula, model.frame(formula, model.frame(design))) }else{ mm<-model.matrix(formula, model.frame(formula, model.frame(design))) } ww<-design$pweights repwt<-as.matrix(design$repweights) if (!design$combined.weights) repwt<-repwt*design$pweights if (inherits(aggregate.index,"formula")){ if (length(aggregate.index)!=2) stop("aggregate.index must be a one-sided formula") aggregate.index<-model.frame(aggregate.index, design$variables) if (NCOL(aggregate.index)>1) stop("aggregate.index must specify a single variable") aggregate.index<-aggregate.index[[1]] } if (!is.null(aggregate.index)){ if (sqrt(max(ave(ww,aggregate.index,FUN=var),na.rm=TRUE))>1e-2*mean(ww)) warning("Sampling weights are not constant within clusters defined by aggregate.index") mm<-apply(mm,2,function(mx) ave(mx,aggregate.index)) ww<-ave(ww,aggregate.index) repwt<-apply(repwt,2,function(wx) ave(wx, aggregate.index)) } whalf<-sqrt(ww) sample.total<-colSums(mm*ww) if(any(sample.total==0)){ ## drop columsn where all sample and population are zero zz<-(population==0) & (apply(mm,2,function(x) all(x==0))) mm<-mm[,!zz] population<-population[!zz] sample.total<-sample.total[!zz] if (length(epsilon)>1) epsilon <- epsilon[!zz] } if (length(sample.total)!=length(population)){ print(sample.total) print(population) stop("Population and sample totals are not the same length.") } if (!is.null(names(population))){ if (!all(names(sample.total) %in% names(population))) warning("Sample and population totals have different names.") else if (!all(names(sample.total) == names(population))){ warning("Sample and population totals reordered to make names agree: check results.") population <- population[match(names(sample.total), names(population))] } } if(is.character(calfun)) calfun<-switch(calfun, linear=cal.linear, raking=cal.raking, logit=cal.logit) else if (!inherits(calfun,"calfun")) stop("'calfun' must be a string or a 'calfun' object") gtotal <- grake(mm,ww,calfun,bounds=bounds,population=population, verbose=verbose, epsilon=epsilon, maxit=maxit, variance=variance) if(!is.null(trim)) { gnew<-pmax(trim[1], pmin(gtotal, trim[2])) outside<-gtotaltrim[2] if (any(outside)){ trimmings<-(gtotal-gnew)*ww gnew[!outside]<-gnew[!outside]+sum(trimmings)/sum(ww[!outside]) gtotal<-gnew attr(gtotal,"failed")<-NULL message(paste(sum(outside),"weights were trimmed")) } } if (!force && !is.null(attr(gtotal,"failed"))) stop("Calibration failed") design$pweights<-design$pweights*gtotal for(i in 1:NCOL(repwt)){ wwi<-repwt[,i] if(verbose) cat("replicate = ",i,"\n") g<-grake(mm, wwi, calfun, eta=rep(0,NCOL(mm)), bounds=bounds, population=population, epsilon=epsilon, verbose=verbose, maxit=maxit, variance=variance) if(length(trim)==2){ outside<-(gtrim[2]) if (any(outside)) { gnew<-pmax(trim[1],pmin(g,trim[2])) trimmings<-(g-gnew)*wwi gnew[!outside]<-gnew[!outside]+sum(trimmings)/sum(wwi[!outside]) g<-gnew }} repwt[,i]<-as.vector(design$repweights[,i])*g } if (!design$combined.weights) repwt<-repwt/gtotal if (compress || (is.na(compress && inherits(design$repweights,"repweights_compressed")))){ repwt<-compressWeights(repwt) } design$repweights<-repwt design$call<-sys.call(-1) design } cal.linear<-make.calfun(function(u,bounds) pmin(pmax(u+1,bounds$lower),bounds$upper)-1, function(u, bounds) as.numeric(u < bounds$upper-1 & u > bounds$lower-1), "linear calibration") cal.raking<-make.calfun(function(u,bounds) pmin(pmax(exp(u),bounds$lower),bounds$upper)-1, function(u, bounds) ifelse(ubounds$lower-1,exp(u),0), "raking") cal.logit<-make.calfun( function(u,bounds) { if (any(!is.finite(unlist(bounds)))) stop("Logit calibration requires finite bounds") L <- bounds$lower U <- bounds$upper A <- (U-L)/((U-1)*(1-L)) eAu <- exp(A*u) ( L*(U-1) + U*(1-L)*eAu)/(U-1+(1-L)*eAu)-1 }, function(u,bounds) { L <- bounds$lower U <- bounds$upper A <- (U-L)/((U-1)*(1-L)) eAu <- exp(A*u) U*(1-L)*eAu*A/(U-1+(1-L)*eAu)-( (L*(U-1)+U*(1-L)*eAu)*( (1-L)*eAu*A ) )/(U-1+(1-L)*eAu)^2 }, "logit calibration" ) cal.sinh <- make.calfun( Fm1 = function(u, bounds) { if (any(!is.finite(unlist(bounds)))) stop("Sinh calibration requires finite bounds") dasinh <- function(u, alpha = 1) { p <- asinh(2 * alpha * u) m <- (p + sqrt((p^2) + 4*(alpha^2)))/(2*alpha) m <- as.vector(m) m } # linear truncation pmin(pmax(dasinh(u), bounds$lower), bounds$upper) - 1 }, dF = function(u, bounds) { ddasinh <- function(u, alpha = 1) { p <- asinh(2 * alpha * u) m <- 1/sqrt(1 + (2*alpha*u)^2)*(1 + p/sqrt(p^2 + 4*alpha^2)) m <- as.vector(m) m } ifelse(u < bounds$upper - 1 & u > bounds$lower - 1, ddasinh(u), 0) }, name = 'sinh calibration' ) grake<-function(mm,ww,calfun,eta=rep(0,NCOL(mm)),bounds,population,epsilon, verbose, maxit, variance=NULL){ sample.total<-colSums(mm*ww) if(!inherits(calfun,"calfun")) stop("'calfun' must be of class 'calfun'") Fm1<-calfun$Fm1 dF<-calfun$dF if (is.null(variance)){ sigma2<-rep(1,nrow(mm)) } else if(length(variance) == nrow(mm)){ sigma2<-drop(variance) }else{ sigma2<-drop(mm%*%variance) } xeta<-drop(mm%*%eta/sigma2) g<-1+Fm1(xeta, bounds) deriv <- dF(xeta, bounds) iter<-1 ## pre-scaling for people starting with no weights SOMETHRESHOLD<-20 scales<-population/sample.total if (min(scales)> SOMETHRESHOLD){ scale<-mean(scales) ww<-ww*scale sample.total<-sample.total*scale if(verbose) message(paste("Sampling weights rescaled by",signif(scale,3))) if (any(is.finite(unlist(bounds)))) warning(paste("Bounds were set but will be interpreted after rescaling by",signif(scale,3))) } else scale<-NULL repeat({ Tmat<-crossprod(mm*ww/sqrt(sigma2)*deriv, mm/sqrt(sigma2)) misfit<-(population-sample.total-colSums(mm*ww*Fm1(xeta, bounds))) deta<-round(MASS::ginv(as(Tmat, "matrix"), tol=256*.Machine$double.eps)%*%misfit, 10) eta<-eta+deta xeta<- drop(mm%*%eta/sigma2) g<-1+Fm1(xeta, bounds) deriv <- dF(xeta, bounds) while(itermaxit) { achieved<-max((abs(misfit)/(1+abs(population)))) warning("Failed to converge: eps=",achieved," in ",iter," iterations") attr(g,"failed")<-achieved break; } }) if (!is.null(scale)) g<-g*scale attr(g,"eta")<-eta g } trimWeights<-function(design, upper=Inf,lower=-Inf, ...){ UseMethod("trimWeights") } trimWeights.survey.design2<-function(design, upper=Inf, lower= -Inf, strict=FALSE,...){ pw<-weights(design,"sampling") outside<-pwupper if (!any(outside)) return(design) pwnew<-pmax(lower,pmin(pw, upper)) trimmings<-pw-pwnew pwnew[!outside]<-pwnew[!outside]+sum(trimmings)/sum(!outside) design$prob<-1/pwnew design$call<-sys.call() design$call[[1]]<-as.name(.Generic) if (strict) ## ensure that the trimmings don't push anything outside the limits trimWeights(design, upper,lower, strict=TRUE) else design } trimWeights.svyrep.design<-function(design, upper=Inf, lower= -Inf, compress=FALSE,...){ pw<-weights(design,"sampling") outside<-pwupper if (any(outside)) { pwnew<-pmax(lower,pmin(pw, upper)) trimmings<-pw-pwnew pwnew[!outside]<-pwnew[!outside]+sum(trimmings)/sum(!outside) design$prob<-1/pw } rw<-weights(design, "analysis") outside<-rwupper if (any(outside)) { rwnew<-pmax(lower,pmin(rw, upper)) trimmings<-rw-rwnew rwnew<-rwnew[!outside]+t(t(!outside)+colSums(trimmings)/colSums(!outside)) if (compress) design$repweights<-compressWeights(rwnew) else design$repweights<-rwnew design$combined.weights<-TRUE } design } margins2totals<-function(formulas, totals){ totals<-mapply(onemargin2totals,formulas,totals,SIMPLIFY=FALSE) totaln<-do.call(c,totals) totalorder<-do.call(c,lapply(totals,function(x) attr(x,"order"))) totaln<-totaln[order(totalorder)] totaln[!duplicated(names(totaln))] } onemargin2totals<-function(formula,total){ if (is.table(total)) total<-as.data.frame(total) if (!is.data.frame(total) && is.vector(total) && (length(formula[[2]])==1)){ ## just a vector total<-as.table(total) d<-dimnames(total) names(d)<-deparse(formula[[2]]) total<-as.data.frame(total) } if (!is.data.frame(total)) stop("incorrect format for population totals") newformula<-as.formula(paste("Freq",paste(all.vars(formula),collapse="*"),sep="~")) mf<-model.frame(newformula,as.data.frame(total)) mm<-model.matrix(newformula,mf) intorder<-c(1,attr(terms(newformula),"order")[attr(mm,"assign")]) rval<-colSums(mf$Freq*mm) attr(rval,"order")<-intorder rval } survey/R/mrb.R0000644000176200001440000000354412750475505012733 0ustar liggesusers## Rescaled multistage bootstrap ## Preston http://www.statcan.gc.ca/pub/12-001-x/2009002/article/11044-eng.pdf ## mrbweights<-function(clusters,stratas,fpcs, replicates=50, multicore=getOption("survey.multicore")){ nstages<-NCOL(clusters) if (is.null(fpcs$popsize)){ warning("Design is sampled with replacement: only first stage used") fpcs$popsize<-matrix(Inf, ncol=1,nrow=NROW(clusters)) nstages<-1 } if (multicore & !requireNamespace("parallel", quietly=TRUE)) multicore<-FALSE do.it<-if(multicore) parallel::mclapply else lapply weightlist<-do.it(1:replicates, function(k){ weights<-matrix(1,nrow=NROW(clusters),ncol=nstages) kept<-rep(TRUE, NROW(clusters)) cumffs<-rep(1,NROW(clusters)) for(i in 1:nstages){ ustrata<-unique(stratas[,i]) nstrata<-length(ustrata) for(j in 1:nstrata){ thisstratum<-stratas[,i]==ustrata[j] su <- unique(clusters[thisstratum & kept,i] ) n <-length(su) nstar<-floor(n/2) cumff<-cumffs[thisstratum][1] if (nstar==0) { wstar<-0 keep<- rep(FALSE,sum(thisstratum)) } else { fpc<- fpcs$sampsize[thisstratum,i][1]/fpcs$popsize[thisstratum,i][1] lambda<-sqrt(cumff*nstar*(1-fpc)/(n-nstar)) keep<-clusters[thisstratum,i] %in% sample(su,nstar) wstar<-(-lambda+lambda*(n/nstar)*keep) } weights[thisstratum, i]<-wstar*weights[thisstratum, i] if (nstar>0 & i\n") invisible(x) } summary.DBIsvydesign<-function(object,...){ class(object)<-c("summary.DBIsvydesign",class(object)) object } print.summary.DBIsvydesign<-function(x,...){ print.survey.design2(x,varnames=TRUE,design.summaries=TRUE,...) invisible(x) } close.DBIsvydesign<-function(con,...){ DBI::dbDisconnect(con$db$connection,...) invisible(con) } open.DBIsvydesign<-function(con,...){ db<-DBI::dbDriver(con$db$dbtype) con$db$connection<-DBI::dbConnect(db, dbname=con$db$dbname,...) con } svymean.DBIsvydesign<-function(x, design,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svymean",design) } svytotal.DBIsvydesign<-function(x, design,na.rm=FALSE,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svytotal",design) } svyquantile.DBIsvydesign<-function(x, design,quantiles,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svyquantile",design) } dropFactor<-function(mf, w){ if(!any(w==0)) return(mf) dropped<-w==0 for(i in 1:ncol(mf)) { if (is.factor(mf[[i]])){ fi<-mf[[i]] if (all(dropped[fi==levels(fi)[1]])){ tt<-table(fi[!dropped]) l<-min(which(tt>0)) levs<-levels(fi) mf[[i]]<-relevel(mf[[i]],ref=levs[l]) } } } mf } svyglm.DBIsvydesign<-function(formula, design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset), weights(design)) NextMethod("svyglm",design) } svyplot.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) design$variables[weights(design)==0,]<-NA NextMethod("svyplot",design) } svycoplot.DBIsvydesign<-function(formula,design, style=c("hexbin","transparent"), basecol="black",alpha=c(0,0.8),hexscale=c("relative","absolute"),...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename, updates=design$updates, subset=design$subset) design$variables[weights(design)==0,]<-NA NextMethod("svycoplot",design) } svyboxplot.DBIsvydesign<-function(formula,design, ...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) design$variables[weights(design)==0,]<-NA class(design)<-setdiff(class(design),"DBIsvydesign") svyboxplot(formula,design,...) } svycdf.DBIsvydesign<-function(formula,design, na.rm=TRUE, ...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svycdf",design) } svyolr.DBIsvydesign<-function(formula,design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset), weights(design)) NextMethod("svyolr",design) } svycoxph.DBIsvydesign<-function(formula,design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates), weights(design)) NextMethod("svycoxph",design) } svyvar.DBIsvydesign<-function(x,design,na.rm=FALSE,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svyvar",design) } svykm.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svykm",design) } svykappa.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svykappa",design) } svysmooth.DBIsvydesign<-function(formula,design,method=c("locpoly","quantreg"),bandwidth,quantile,df,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svysmooth",design) } svychisq.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svychisq",design) } svyranktest.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svyranktest",design) } svyratio.DBIsvydesign<-function(numerator, denominator, design,...){ design$variables<-cbind(getvars(numerator,design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset), getvars(denominator,design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset)) NextMethod("svyratio",design) } svyby.DBIsvydesign<-function(formula, by, design,...){ design$variables<-cbind(getvars(formula,design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset), getvars(by,design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset)) class(design)<-setdiff(class(design),"DBIsvydesign") svyby(formula,by,design,...) } svytable.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svytable",design) } calibrate.DBIsvydesign<-function(design,formula,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("calibrate",design) } postStratify.DBIsvydesign<-function(design, strata, population, partial = FALSE, ...) .NotYetImplemented() subset.DBIsvydesign<-function (x, subset, ...) { e <- substitute(subset) x$variables<-getvars(make.formula(all.vars(e)), x$db$connection, x$db$tablename,updates=x$updates, subset=x$subset) r <- eval(e, x$variables, parent.frame()) r <- r & !is.na(r) x <- x[r, ] x$call <- sys.call(-1) x } dim.DBIsvydesign<-function(x){ w<-weights(x) nrow <- length(w) #need dim to report honest matrix size, so not: nrow<-sum(w!=0) coln<-names(DBI::dbGetQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) ncol<-length(unique(c(coln,update.names))) } else ncol<-length(coln) c(nrow,ncol) } dim.DBIrepdesign<-function(x){ if (is.null(x$subset)) nrow <-nrow(x$repweights) else nrow<-length(x$subset) coln<-names(DBI::dbGetQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) ncol<-length(unique(c(coln,update.names))) } else ncol<-length(coln) c(nrow,ncol) } dimnames.DBIsvydesign<-function(x){ rown<-rownames(x$cluster)[weights(x)!=0] coln<-names(DBI::dbGetQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) coln<-unique(c(coln,update.names)) } list(rown,coln) } dimnames.DBIrepdesign<-function(x){ if (is.null(x$subset)) rown<-rownames(x$cluster) else rown<-rownames(x$cluster)[x$subset] coln<-names(DBI::dbGetQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) coln<-unique(c(coln,update.names)) } list(rown,coln) } "[.DBIsvydesign"<-function (x, i, ..., drop = TRUE) { if (!missing(i)) { if (is.logical(i)) x$prob[!i] <- Inf else if (is.numeric(i) && length(i)) x$prob[-i] <- Inf else { tmp <- x$prob[i, ] x$prob <- rep(Inf, length(x$prob)) x$prob[i, ] <- tmp } index <- is.finite(x$prob) psu <- !duplicated(x$cluster[index, 1]) tt <- table(x$strata[index, 1][psu]) if (any(tt == 1)) { warning(sum(tt == 1), " strata have only one PSU in this subset.") } } else { if (!is.null(x$variables)) x$variables <- x$variables[, ..1, drop = FALSE] } x } "[.DBIrepdesign"<-function (x, i, j, drop = FALSE) { if (!missing(i)) { pwt <- x$pweights if (is.data.frame(pwt)) pwt <- pwt[[1]] x$pweights <- pwt[i] x$repweights <- x$repweights[i, , drop = FALSE] if (!is.null(x$selfrep)) x$selfrep <- x$selfrep[i] if (is.null(x$subset)) x$subset<-(1:nrow(x$variables))[i] else x$subset<-x$subset[i] if (!missing(j)) x$variables <- x$variables[i, j, drop = FALSE] else x$variables <- x$variables[i, , drop = FALSE] x$degf <- NULL x$degf <- degf(x) } else { x$variables <- x$variables[, j, drop = FALSE] } x } svrepdesign.character<-function (variables=NULL,repweights=NULL, weights=NULL, data=NULL,type=c("BRR","Fay","JK1", "JKn","bootstrap","other"), combined.weights=TRUE, rho=NULL, bootstrap.average=NULL, scale=NULL,rscales=NULL,fpc=NULL, fpctype=c("fraction","correction"), mse=getOption("survey.replicates.mse"),dbtype="SQLite", dbname, ...) { if (dbtype == "ODBC"){ if (dbname=="") dbconn<-RODBC::odbcDriverConnect(dbname,...) else dbconn<-RODBC::odbcConnect(dbname,...) } else { db<-DBI::dbDriver(dbtype) dbconn<- DBI::dbConnect(db, dbname,...) } if (is.character(repweights)){ allvars<-names(DBI::dbGetQuery(dbconn, paste("select * from",data,"limit 1"))) design.vars<-c(all.vars(weights),grep(repweights,allvars,value=TRUE)) } else { design.vars<-c(all.vars(weights),all.vars(repweights)) } design.query<-paste("select", paste(design.vars,collapse=","), "from", data) if (dbtype=="ODBC") design.data<-RODBC::sqlQuery(dbconn, design.query) else design.data<-DBI::dbGetQuery(dbconn, design.query) rval<-svrepdesign(variables=variables,repweights=repweights, weights=weights, type=type, data=design.data, combined.weights=combined.weights, rho=rho, bootstrap.average=NULL, scale=scale,rscales=rscales,fpc=fpc, fpctype=c("fraction","correction"), mse=mse) rval$db<-list(dbname=dbname, tablename=data, connection=dbconn, dbtype=dbtype) rval$variables<-NULL rval$call<-sys.call(-1) if (dbtype=="ODBC") class(rval)<-c("ODBCrepdesign","ODBCsvydesign",class(rval)) else class(rval)<-c("DBIrepdesign","DBIsvydesign",class(rval)) rval } print.DBIrepdesign<-function(x,...){ cat("DB-backed replicate weight design\n") print.svyrep.design(x,...) if (!checkConnection(x$db$connection, error=FALSE)) cat("\n") invisible(x) } print.ODBCrepdesign<-function(x,...){ cat("ODBC-backed replicate weight design\n") print.svyrep.design(x,...) if (!checkConnection(x$db$connection, error=FALSE)) cat("\n") invisible(x) } summary.DBIrepdesign<-function(object,...){ summary.svyrep.design(object,...) } summary.ODBCrepdesign<-function(object,...){ summary.svyrep.design(object,...) } survey/R/survey.R0000755000176200001440000017524513010204516013501 0ustar liggesusers make.formula<-function(names) formula(paste("~",paste(names,collapse="+"))) dimnames.survey.design<-function(x) dimnames(x$variables) dimnames.svyrep.design<-function(x) dimnames(x$variables) dimnames.twophase<-function(x) dimnames(x$phase1$sample$variables) oldsvydesign<-function(ids,probs=NULL,strata=NULL,variables=NULL, fpc=NULL, data=NULL, nest=FALSE, check.strata=!nest,weights=NULL){ .Deprecated("svydesign") ## less memory-hungry version for sparse tables interaction<-function (..., drop = TRUE) { args <- list(...) narg <- length(args) if (narg == 1 && is.list(args[[1]])) { args <- args[[1]] narg <- length(args) } ls<-sapply(args,function(a) length(levels(a))) ans<-do.call("paste",c(lapply(args,as.character),sep=".")) ans<-factor(ans) return(ans) } na.failsafe<-function(object,...){ if (NCOL(object)==0) object else na.fail(object) } if(inherits(ids,"formula")) { mf<-substitute(model.frame(ids,data=data,na.action=na.failsafe)) ids<-eval.parent(mf) } else if (!is.null(ids)) ids<-na.fail(data.frame(ids)) if(inherits(probs,"formula")){ mf<-substitute(model.frame(probs,data=data,na.action=na.failsafe)) probs<-eval.parent(mf) } if(inherits(weights,"formula")){ mf<-substitute(model.frame(weights,data=data,na.action=na.failsafe)) weights<-eval.parent(mf) } else if (!is.null(weights)) weights<-na.fail(data.frame(weights)) if(!is.null(weights)){ if (!is.null(probs)) stop("Can't specify both sampling weights and probabilities") else probs<-1/weights } if (!is.null(strata)){ if(inherits(strata,"formula")){ mf<-substitute(model.frame(strata,data=data, na.action=na.failsafe)) strata<-eval.parent(mf) } if(is.list(strata)) strata<-na.fail(do.call("interaction", strata)) if (!is.factor(strata)) strata<-factor(strata) has.strata<-TRUE } else { strata<-factor(rep(1,NROW(ids))) has.strata <-FALSE } if (inherits(variables,"formula")){ mf<-substitute(model.frame(variables,data=data,na.action=na.pass)) variables <- eval.parent(mf) } else if (is.null(variables)){ variables<-data } else variables<-data.frame(variables) if (inherits(fpc,"formula")){ mf<-substitute(model.frame(fpc,data=data,na.action=na.failsafe)) fpc<-eval.parent(mf) if (length(fpc)) fpc<-fpc[,1] } if (is.null(ids) || NCOL(ids)==0) ids<-data.frame(.id=seq(length=NROW(variables))) ## force subclusters nested in clusters if (nest && NCOL(ids)>1){ N<-ncol(ids) for(i in 2:(N)){ ids[,i]<-do.call("interaction", ids[,1:i,drop=TRUE]) } } ## force clusters nested in strata if (nest && has.strata && NCOL(ids)){ N<-NCOL(ids) for(i in 1:N) ids[,i]<-do.call("interaction", list(strata, ids[,i])) } ## check if clusters nested in strata if (check.strata && nest) warning("No point in check.strata=TRUE if nest=TRUE") if(check.strata && !is.null(strata) && NCOL(ids)){ sc<-rowSums(table(ids[,1],strata)>0) if(any(sc>1)) stop("Clusters not nested in strata") } ## Put degrees of freedom (# of PSUs in each stratum) in object, to ## allow subpopulations if (NCOL(ids)){ nPSU<-table(strata[!duplicated(ids[,1])]) } if (!is.null(fpc)){ if (NCOL(ids)>1){ if (all(fpc<1)) warning("FPC is not currently supported for multi-stage sampling") else stop("Can't compute FPC from population size for multi-stage sampling") } ## Finite population correction: specified per observation if (is.numeric(fpc) && length(fpc)==NROW(variables)){ tbl<-by(fpc,list(strata),unique) if (any(sapply(tbl,length)!=1)) stop("fpc not constant within strata") fpc<-data.frame(strata=factor(rownames(tbl),levels=levels(strata)), N=as.vector(tbl)) } ## Now reduced to fpc per stratum nstr<-table(strata[!duplicated(ids[[1]])]) if (all(fpc[,2]<=1)){ fpc[,2]<- nstr[match(as.character(fpc[,1]), names(nstr))]/fpc[,2] } else if (any(fpc[,2] 0.99])) names(certainty)<-as.character(unique(strata)) } else { warning("Some strata have only one PSU and I can't tell if they are certainty PSUs") } } if (is.numeric(probs) && length(probs)==1) probs<-rep(probs, NROW(variables)) if (length(probs)==0) probs<-rep(1,NROW(variables)) if (NCOL(probs)==1) probs<-data.frame(probs) rval<-list(cluster=ids) rval$strata<-strata rval$has.strata<-has.strata rval$prob<- apply(probs,1,prod) rval$allprob<-probs rval$call<-match.call() rval$variables<-variables rval$fpc<-fpc rval$certainty<-certainty rval$call<-sys.call() rval$nPSU<-nPSU class(rval)<-"survey.design" rval } print.survey.design<-function(x,varnames=FALSE,design.summaries=FALSE,...){ .svycheck(x) n<-NROW(x$cluster) if (x$has.strata) cat("Stratified ") un<-length(unique(x$cluster[,1])) if(n==un){ cat("Independent Sampling design\n") is.independent<-TRUE } else { cat(NCOL(x$cluster),"- level Cluster Sampling design\n") nn<-lapply(x$cluster,function(i) length(unique(i))) cat(paste("With (",paste(unlist(nn),collapse=", "),") clusters.\n",sep="")) is.independent<-FALSE } print(x$call) if (design.summaries){ cat("Probabilities:\n") print(summary(x$prob)) if(x$has.strata){ cat("Stratum sizes: \n") a<-rbind(obs=table(x$strata), design.PSU=x$nPSU, actual.PSU=if(!is.independent || !is.null(x$fpc)) table(x$strata[!duplicated(x$cluster[,1])])) print(a) } if (!is.null(x$fpc)){ if (x$has.strata) { cat("Population stratum sizes (PSUs): \n") print(x$fpc) } else { cat("Population size (PSUs):",x$fpc[,2],"\n") } } } if (varnames){ cat("Data variables:\n") print(names(x$variables)) } invisible(x) } "[.survey.design"<-function (x,i, ...){ if (!missing(i)){ if (is.calibrated(x)){ tmp<-x$prob[i,] x$prob<-rep(Inf, length(x$prob)) x$prob[i,]<-tmp } else { x$variables<-"[.data.frame"(x$variables,i,...,drop=FALSE) x$cluster<-x$cluster[i,,drop=FALSE] x$prob<-x$prob[i] x$allprob<-x$allprob[i,,drop=FALSE] x$strata<-x$strata[i] } } else { x$variables<-x$variables[,...,drop=FALSE] } x } "[<-.survey.design"<-function(x, ...,value){ if (inherits(value, "survey.design")) value<-value$variables x$variables[...]<-value x } dim.survey.design<-function(x){ dim(x$variables) } na.fail.survey.design<-function(object,...){ tmp<-na.fail(object$variables,...) object } na.omit.survey.design<-function(object,...){ tmp<-na.omit(object$variables,...) omit<-attr(tmp,"na.action") if (length(omit)){ object<-object[-omit,] object$variables<-tmp attr(object,"na.action")<-omit } object } na.exclude.survey.design<-function(object,...){ tmp<-na.exclude(object$variables,...) exclude<-attr(tmp,"na.action") if (length(exclude)){ object<-object[-exclude,] object$variables<-tmp attr(object,"na.action")<-exclude } object } update.survey.design<-function(object,...){ dots<-substitute(list(...))[-1] newnames<-names(dots) for(j in seq(along=dots)){ object$variables[,newnames[j]]<-eval(dots[[j]],object$variables, parent.frame()) } object$call<-sys.call(-1) object } subset.survey.design<-function(x,subset,...){ e <- substitute(subset) r <- eval(e, x$variables, parent.frame()) r <- r & !is.na(r) x<-x[r,] x$call<-sys.call(-1) x } summary.survey.design<-function(object,...){ class(object)<-"summary.survey.design" object } print.summary.survey.design<-function(x,...){ y<-x class(y)<-"survey.design" print(y,varnames=TRUE,design.summaries=TRUE,...) } postStratify.survey.design<-function(design, strata, population, partial=FALSE,...){ if(inherits(strata,"formula")){ mf<-substitute(model.frame(strata, data=design$variables,na.action=na.fail)) strata<-eval.parent(mf) } strata<-as.data.frame(strata) sampletable<-xtabs(I(1/design$prob)~.,data=strata) sampletable<-as.data.frame(sampletable) if (inherits(population,"table")) population<-as.data.frame(population) else if (is.data.frame(population)) population$Freq <- as.vector(population$Freq) ##allows Freq computed by tapply() else stop("population must be a table or dataframe") if (!all(names(strata) %in% names(population))) stop("Stratifying variables don't match") nn<- names(population) %in% names(strata) if (sum(!nn)!=1) stop("stratifying variables don't match") names(population)[which(!nn)]<-"Pop.Freq" both<-merge(sampletable, population, by=names(strata), all=TRUE) samplezero <- both$Freq %in% c(0, NA) popzero <- both$Pop.Freq %in% c(0, NA) both<-both[!(samplezero & popzero),] if (any(onlysample<- popzero & !samplezero)){ print(both[onlysample,]) stop("Strata in sample absent from population. This Can't Happen") } if (any(onlypop <- samplezero & !popzero)){ if (partial){ both<-both[!onlypop,] warning("Some strata absent from sample: ignored") } else { print(both[onlypop,]) stop("Some strata absent from sample: use partial=TRUE to ignore them.") } } reweight<-both$Pop.Freq/both$Freq both$label <- do.call("interaction", list(both[,names(strata)])) designlabel <- do.call("interaction", strata) index<-match(designlabel, both$label) attr(index,"oldweights")<-1/design$prob design$prob<-design$prob/reweight[index] attr(index,"weights")<-1/design$prob design$postStrata<-c(design$postStrata,list(index)) ## Do we need to iterate here a la raking to get design strata ## and post-strata both balanced? design$call<-sys.call(-1) design } svyCprod<-function(x, strata, psu, fpc, nPSU, certainty=NULL, postStrata=NULL, lonely.psu=getOption("survey.lonely.psu")){ x<-as.matrix(x) n<-NROW(x) ## Remove post-stratum means, which may cut across PSUs if(!is.null(postStrata)){ for (psvar in postStrata){ if (inherits(psvar, "greg_calibration") || inherits(psvar, "raking")) stop("rake() and calibrate() not supported for old-style design objects") psw<-attr(psvar,"weights") psmeans<-rowsum(x/psw,psvar,reorder=TRUE)/as.vector(table(factor(psvar))) x<- x-psmeans[match(psvar,sort(unique(psvar))),]*psw } } ##First collapse over PSUs if (is.null(strata)){ strata<-rep("1",n) if (!is.null(nPSU)) names(nPSU)<-"1" } else strata<-as.character(strata) ##can't use factors as indices in for()' if (is.null(certainty)){ certainty<-rep(FALSE,length(strata)) names(certainty)<-strata } if (!is.null(psu)){ x<-rowsum(x, psu, reorder=FALSE) strata<-strata[!duplicated(psu)] n<-NROW(x) } if (!is.null(nPSU)){ obsn<-table(strata) dropped<-nPSU[match(names(obsn),names(nPSU))]-obsn if(sum(dropped)){ xtra<-matrix(0,ncol=NCOL(x),nrow=sum(dropped)) strata<-c(strata,rep(names(dropped),dropped)) if(is.matrix(x)) x<-rbind(x,xtra) else x<-c(x,xtra) n<-NROW(x) } } else obsn<-table(strata) if(is.null(strata)){ x<-t(t(x)-colMeans(x)) } else { strata.means<-drop(rowsum(x,strata, reorder=FALSE))/drop(rowsum(rep(1,n),strata, reorder=FALSE)) if (!is.matrix(strata.means)) strata.means<-matrix(strata.means, ncol=NCOL(x)) x<- x- strata.means[ match(strata, unique(strata)),,drop=FALSE] } p<-NCOL(x) v<-matrix(0,p,p) ss<-unique(strata) for(s in ss){ this.stratum <- strata %in% s ## original number of PSUs in this stratum ## before missing data/subsetting this.n <-nPSU[match(s,names(nPSU))] this.df <- this.n/(this.n-1) if (is.null(fpc)) this.fpc <- 1 else{ this.fpc <- fpc[,2][ fpc[,1]==as.character(s)] this.fpc <- (this.fpc - this.n)/this.fpc } xs<-x[this.stratum,,drop=FALSE] this.certain<-certainty[names(certainty) %in% s] ## stratum with only 1 design cluster leads to undefined variance lonely.psu<-match.arg(lonely.psu, c("remove","adjust","fail", "certainty","average")) if (this.n==1 && !this.certain){ this.df<-1 if (lonely.psu=="fail") stop("Stratum ",s, " has only one sampling unit.") else if (lonely.psu!="certainty") warning("Stratum ",s, " has only one sampling unit.") if (lonely.psu=="adjust") xs<-strata.means[match(s,ss),,drop=FALSE] } else if (obsn[match(s,names(obsn))]==1 && !this.certain){ ## stratum with only 1 cluster left after subsetting warning("Stratum ",s," has only one PSU in this subset.") if (lonely.psu=="adjust") xs<-strata.means[match(s,ss),,drop=FALSE] } ## add it up if (!this.certain) v<-v+crossprod(xs)*this.df*this.fpc } if (lonely.psu=="average"){ v<- v/(1-mean(obsn==1 & !certainty)) } v } svymean<-function(x, design,na.rm=FALSE,...){ .svycheck(design) UseMethod("svymean",design) } svymean.survey.design<-function(x,design, na.rm=FALSE,deff=FALSE,...){ if (!inherits(design,"survey.design")) stop("design is not a survey design") if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] x<-x[nas==0,,drop=FALSE] } pweights<-1/design$prob psum<-sum(pweights) average<-colSums(x*pweights/psum) x<-sweep(x,2,average) v<-svyCprod(x*pweights/psum,design$strata,design$cluster[[1]], design$fpc, design$nPSU,design$certainty, design$postStrata) attr(average,"var")<-v attr(average,"statistic")<-"mean" class(average)<-"svystat" if (is.character(deff) || deff){ nobs<-NROW(design$cluster) vsrs<-svyvar(x,design,na.rm=na.rm)/nobs vsrs<-vsrs*(psum-nobs)/psum attr(average, "deff")<-v/vsrs } return(average) } print.svystat<-function(x,...){ vv<-attr(x,"var") if (is.matrix(vv)) m<-cbind(x,sqrt(diag(vv))) else m<-cbind(x,sqrt(vv)) hasdeff<-!is.null(attr(x,"deff")) if (hasdeff) { m<-cbind(m,deff(x)) colnames(m)<-c(attr(x,"statistic"),"SE","DEff") } else { colnames(m)<-c(attr(x,"statistic"),"SE") } printCoefmat(m) } as.data.frame.svystat<-function(x,...){ rval<-data.frame(statistic=coef(x),SE=SE(x)) names(rval)[1]<-attr(x,"statistic") if (!is.null(attr(x,"deff"))) rval<-cbind(rval,deff=deff(x)) rval } coef.svystat<-function(object,...){ attr(object,"statistic")<-NULL attr(object,"deff")<-NULL attr(object,"var")<-NULL unclass(object) } vcov.svystat<-function(object,...){ as.matrix(attr(object,"var")) } SE.svystat<-function(object,...){ v<-vcov(object) if (!is.matrix(v) || NCOL(v)==1) sqrt(v) else sqrt(diag(v)) } deff <- function(object,quietly=FALSE,...) UseMethod("deff") deff.default <- function(object, quietly=FALSE,...){ rval<-attr(object,"deff") if (is.null(rval)) { if(!quietly) warning("object has no design effect information") } else rval<-diag(as.matrix(rval)) rval } cv<-function(object,...) UseMethod("cv") cv.default<-function(object, warn=TRUE, ...){ rval<-SE(object)/coef(object) if (warn && any(coef(object)<0,na.rm=TRUE)) warning("CV may not be useful for negative statistics") rval } svytotal<-function(x,design,na.rm=FALSE,...){ .svycheck(design) UseMethod("svytotal",design) } svytotal.survey.design<-function(x,design, na.rm=FALSE, deff=FALSE,...){ if (!inherits(design,"survey.design")) stop("design is not a survey design") if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] x<-x[nas==0,,drop=FALSE] } N<-sum(1/design$prob) m <- svymean(x, design, na.rm=na.rm) total<-m*N attr(total, "var")<-v<-svyCprod(x/design$prob,design$strata, design$cluster[[1]], design$fpc, design$nPSU,design$certainty,design$postStrata) attr(total,"statistic")<-"total" if (is.character(deff) || deff){ vsrs<-svyvar(x,design)*sum(weights(design)^2) vsrs<-vsrs*(N-NROW(design$cluster))/N attr(total,"deff")<-v/vsrs } return(total) } svyvar<-function(x, design, na.rm=FALSE,...){ .svycheck(design) UseMethod("svyvar",design) } svyvar.survey.design<-function(x, design, na.rm=FALSE,...){ if (inherits(x,"formula")) x<-model.frame(x,model.frame(design),na.action=na.pass) else if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) n<-sum(weights(design,"sampling")!=0) xbar<-svymean(x,design, na.rm=na.rm) if(NCOL(x)==1) { x<-x-xbar v<-svymean(x*x*n/(n-1),design, na.rm=na.rm) attr(v,"statistic")<-"variance" return(v) } x<-t(t(x)-xbar) p<-NCOL(x) a<-matrix(rep(x,p),ncol=p*p) b<-x[,rep(1:p,each=p)] ## Kish uses the n-1 divisor, so it affects design effects v<-svymean(a*b*n/(n-1),design, na.rm=na.rm) vv<-matrix(v,ncol=p) dimnames(vv)<-list(names(xbar),names(xbar)) attr(vv,"var")<-attr(v,"var") attr(vv,"statistic")<-"variance" class(vv)<-c("svyvar","svystat") vv } print.svyvar<-function (x, covariance=FALSE, ...) { if(!is.matrix(x)) NextMethod() vv <- attr(x, "var") if (covariance){ nms<-outer(rownames(x),colnames(x),paste,sep=":") m<-cbind(as.vector(x), sqrt(diag(vv))) rownames(m)<-nms } else{ ii <- which(diag(sqrt(length(x)))>0) m <- cbind(x[ii], sqrt(diag(vv))[ii]) } colnames(m) <- c(attr(x, "statistic"), "SE") printCoefmat(m) } as.matrix.svyvar<-function(x,...) unclass(x) svyquantile<-function(x,design,quantiles,...) UseMethod("svyquantile", design) svyquantile.survey.design<-function(x,design,quantiles,alpha=0.05, ci=FALSE, method="linear",f=1, interval.type=c("Wald","score","betaWald"), na.rm=FALSE,se=ci, ties=c("discrete","rounded"), df=Inf,...){ if (inherits(x,"formula")) x<-model.frame(x ,model.frame(design), na.action=na.pass) else if(typeof(x) %in% c("expression","symbol")) x<-eval(x, model.frame(design,na.action=na.pass)) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if (length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } w<-weights(design) if (is.null(df)){ qcrit<-function(p, lower.tail=TRUE) qt(p, df=degf(design), lower.tail=lower.tail) } else if(df==Inf){ qcrit <- function(p,lower.tail=TRUE) qnorm(p,lower.tail=lower.tail) } else { qcrit <- function(p,lower.tail=TRUE) qt(p,df=df,lower.tail=lower.tail) } computeQuantiles<-function(xx,p=quantiles){ if (any(is.na(x))) return(NA*p) oo<-order(xx) cum.w<-cumsum(w[oo])/sum(w) cdf<-approxfun(cum.w,xx[oo],method=method,f=f, yleft=min(xx),yright=max(xx),ties=min) cdf(p) } computeQuantilesRounded<-function(xx,p=quantiles){ if (any(is.na(xx))) return(NA*p) ww<-rowsum(w,xx,reorder=TRUE) xx<-sort(unique(xx)) cum.w <- cumsum(ww)/sum(ww) cdf <- approxfun(cum.w, xx, method = method, f = f, yleft = min(xx), yright = max(xx),ties=min) cdf(p) } computeScoreCI<-function(xx,p){ if (any(is.na(xx))) return(c(NA,NA)) U<-function(theta){ ((xx>theta)-(1-p))} scoretest<-function(theta,qlimit){ umean<-svymean(U(theta),design) umean/sqrt(attr(umean,"var"))-qlimit } iqr<-IQR(xx) lower<-min(xx)+iqr/100 upper<-max(xx)-iqr/100 tol<-1/(100*sqrt(nrow(design))) c(uniroot(scoretest,interval=c(lower,upper), qlimit=qcrit(alpha/2,lower.tail=FALSE),tol=tol)$root, uniroot(scoretest,interval=c(lower,upper), qlimit=qcrit(alpha/2,lower.tail=TRUE),tol=tol)$root) } computePCI<-function(se,alpha,p){ if (interval.type=="Wald"){ p.up<-p+qcrit(alpha/2,lower.tail=FALSE)*se p.low<-p+qcrit(alpha/2,lower.tail=TRUE)*se c(p.low,p.up) } else if (interval.type=="betaWald"){ n.eff <- (p*(1-p))/(se^2) n.eff <- n.eff * ( qt(alpha/2, nrow(design)-1)/qt(alpha/2, degf(design)) )^2 p.up<-qbeta(1-alpha/2, n.eff*p+1, n.eff*(1-p)) p.low<-qbeta(alpha/2, n.eff*p, n.eff*(1-p)+1) c(p.low,p.up) } } computeWaldCI<-function(xx,p){ if (any(is.na(xx))) return(c(NA,NA)) theta0<-computeQuantiles(xx,p) U<- ((xx>theta0)-(1-p)) wtest<-svymean(U,design) p.ci<-computePCI(SE(wtest),alpha,p) p.low<-p.ci[1] p.up<-p.ci[2] oo<-order(xx) cum.w<-cumsum(w[oo])/sum(w) approx(cum.w,xx[oo],xout=c(p.low,p.up), method=method,f=f, yleft=min(xx),yright=max(xx),ties=min)$y } computeWaldCIRounded<-function(xx,p){ if(any(is.na(xx))) return(c(NA,NA)) theta0<-computeQuantilesRounded(xx,p) U<- ((xx>theta0)-(1-p)) ww<-rowsum(w,xx, reorder=TRUE) uxx <- sort(unique(xx)) wtest<-svymean(U,design) p.ci<-computePCI(SE(wtest),alpha,p) p.low<-p.ci[1] p.up<-p.ci[2] oo<-order(xx) cum.w<-cumsum(ww)/sum(ww) approx(cum.w,uxx,xout=c(p.low,p.up), method=method,f=f, yleft=min(xx),yright=max(xx),ties=min)$y } ties<-match.arg(ties) computeQ<-switch(ties, discrete=computeQuantiles,rounded=computeQuantilesRounded) if (!is.null(dim(x))) rval<-t(matrix(apply(x,2,computeQ),nrow=length(quantiles), dimnames=list(as.character(round(quantiles,2)),colnames(x)))) else rval<-computeQ(x) if (!ci & !se) return(rval) interval.type<-match.arg(interval.type) computeCI<-switch(paste(interval.type,ties,sep="."), score.discrete=computeScoreCI, score.rounded=stop("ties=\"rounded\" not available with interval.type=\"score\""), Wald.rounded=computeWaldCIRounded, betaWald.rounded=computeWaldCIRounded, Wald.discrete=computeWaldCI, betaWald.discrete=computeWaldCI) if (!is.null(dim(x))) cis<-array(apply(x,2,function(xx) sapply(quantiles,function(qq) computeCI(xx,qq))), dim=c(2,length(quantiles),ncol(x)), dimnames=list(c("(lower","upper)"), as.character(round(quantiles,2)), colnames(x))) else cis<-sapply(quantiles, function(qq) computeCI(x,qq)) if (ci) rval<-list(quantiles=rval,CIs=cis) else rval<-list(quantiles=rval) if (is.null(dim(x))) ses<-(cis[2,]-cis[1,])/(2*qcrit(alpha/2,lower.tail=FALSE)) else ses<-(cis[2,,]-cis[1,,])/(2*qcrit(alpha/2,lower.tail=FALSE)) attr(rval,"SE")<-ses class(rval)<-"svyquantile" rval } SE.svyquantile<-function(object,...){ attr(object,"SE") } vcov.svyquantile<-function(object,...){ se<-SE(object) if (is.null(se)) stop("no uncertainty information present") v<-matrix(NA,length(se),length(se)) warning("Only diagonal of vcov() available") diag(v)<-se v } coef.svyquantile<-function(object,...){ rval<-as.vector(object$quantiles) if(ncol(object$quantiles)==1) names(rval)<-rownames(object$quantiles) else if (nrow(object$quantiles)==1) names(rval)<-colnames(object$quantiles) else names(rval)<-t(outer(colnames(object$quantiles), rownames(object$quantiles), paste,sep=":")) rval } print.svyquantile<-function(x,...){ print(list(quantiles=x$quantiles, CIs=x$CIs)) } coef.svyratio<-function(object,...,drop=TRUE){ if (!drop) return(object$ratio) cf<-as.vector(object$ratio) nms<-as.vector(outer(rownames(object$ratio),colnames(object$ratio),paste,sep="/")) names(cf)<-nms cf } SE.svyratio<-function(object,...,drop=TRUE){ if(!drop) return(sqrt(object$var)) se<-as.vector(sqrt(object$var)) nms<-as.vector(outer(rownames(object$ratio),colnames(object$ratio),paste,sep="/")) names(se)<-nms se } svyratio<-function(numerator,denominator, design,...){ .svycheck(design) UseMethod("svyratio",design) } svyratio.survey.design<-function(numerator, denominator, design,...){ if (inherits(numerator,"formula")) numerator<-model.frame(numerator,design$variables) else if(typeof(numerator) %in% c("expression","symbol")) numerator<-eval(numerator, design$variables) if (inherits(denominator,"formula")) denominator<-model.frame(denominator,design$variables) else if(typeof(denominator) %in% c("expression","symbol")) denominator<-eval(denominator, design$variables) nn<-NCOL(numerator) nd<-NCOL(denominator) all<-cbind(numerator,denominator) allstats<-svytotal(all,design) rval<-list(ratio=outer(allstats[1:nn],allstats[nn+1:nd],"/")) vars<-matrix(ncol=nd,nrow=nn) for(i in 1:nn){ for(j in 1:nd){ r<-(numerator[,i]-rval$ratio[i,j]*denominator[,j])/sum(denominator[,j]/design$prob) vars[i,j]<-svyCprod(r*1/design$prob, design$strata, design$cluster[[1]], design$fpc, design$nPSU, design$certainty,design$postStrata) } } colnames(vars)<-names(denominator) rownames(vars)<-names(numerator) rval$var<-vars rval$call<-sys.call() class(rval)<-"svyratio" rval } print.svyratio_separate<-function(x,...){ cat("Stratified ratio estimate: ") if (!is.null(x$call)) print(x$call) else if (!is.null(attr(x,"call"))) print(attr(x$call)) for(r in x$ratios) { print(r) } invisible(x) } print.svyratio<-function(x,...){ cat("Ratio estimator: ") if (!is.null(x$call)) print(x$call) else if(!is.null(attr(x,"call"))) print(attr(x,"call")) cat("Ratios=\n") print(x$ratio) cat("SEs=\n") print(sqrt(x$var)) invisible(NULL) } predict.svyratio<-function(object, total, se=TRUE,...){ if (se) return(list(total=object$ratio*total,se=sqrt(object$var)*total)) else return(object$ratio*total) } predict.svyratio_separate<-function(object, total, se=TRUE,...){ if (length(total)!=length(object$ratios)) stop("Number of strata differ in ratio object and totals.") if (!is.null(names(total)) && !is.null(levels(object$strata))){ if (!setequal(names(total), levels(object$strata))) warning("Names of strata differ in ratio object and totals") else if (!all(names(total)==levels(object$strata))){ warning("Reordering supplied totals to make their names match the ratio object") total<-total[match(names(total),levels(object$strata))] } } totals<-mapply(predict, object=object$ratios, total=total,se=se,...,SIMPLIFY=FALSE) if(se){ rval<-totals[[1]]$total v<-totals[[1]]$se^2 for(ti in totals[-1]) { rval<-rval+ti$total v<-v+ti$se^2 } list(total=rval,se=sqrt(v)) } else { rval<-totals[[1]] for (ti in totals[-1]) rval<-rval+ti rval } } cv.svyratio<-function(object,...){ sqrt(object$var)/object$ratio } svytable<-function(formula, design, ...){ UseMethod("svytable",design) } svytable.survey.design<-function(formula, design, Ntotal=NULL, round=FALSE,...){ if (!inherits(design,"survey.design")) stop("design must be a survey design") weights<-1/design$prob ## unstratified or unadjusted if (length(Ntotal)<=1 || !design$has.strata){ if (length(formula)==3) tblcall<-bquote(xtabs(I(weights*.(formula[[2]]))~.(formula[[3]]), data=model.frame(design),...)) else tblcall<-bquote(xtabs(weights~.(formula[[2]]), data=model.frame(design),...)) tbl<-eval(tblcall) if (!is.null(Ntotal)) { if(length(formula)==3) tbl<-tbl/sum(Ntotal) else tbl<-tbl*sum(Ntotal)/sum(tbl) } if (round) tbl<-round(tbl) attr(tbl,"call")<-match.call() class(tbl)<-c("svytable",class(tbl)) return(tbl) } ## adjusted and stratified if (length(formula)==3) tblcall<-bquote(xtabs(I(weights*.(formula[[2]]))~design$strata[,1]+.(formula[[3]]), data=model.frame(design),...)) else tblcall<-bquote(xtabs(weights~design$strata[,1]+.(formula[[2]]), data=model.frame(design),...)) tbl<-eval(tblcall) ss<-match(sort(unique(design$strata[,1])), Ntotal[,1]) dm<-dim(tbl) layer<-prod(dm[-1]) tbl<-sweep(tbl,1,Ntotal[ss, 2]/apply(tbl,1,sum),"*") tbl<-apply(tbl, 2:length(dm), sum) if (round) tbl<-round(tbl) class(tbl)<-c("svytable","xtabs", "table") attr(tbl, "call")<-match.call() tbl } svycoxph<-function(formula,design,subset=NULL,...){ .svycheck(design) UseMethod("svycoxph",design) } svycoxph.survey.design<-function(formula,design,subset=NULL,...){ subset<-substitute(subset) subset<-eval(subset, model.frame(design),parent.frame()) if (!is.null(subset)) design<-design[subset,] if(any(weights(design)<0)) stop("weights must be non-negative") data<-model.frame(design) g<-match.call() g$formula<-eval.parent(g$formula) g$design<-NULL g$var<-NULL if (is.null(g$weights)) g$weights<-quote(.survey.prob.weights) else g$weights<-bquote(.survey.prob.weights*.(g$weights)) g[[1]]<-quote(coxph) g$data<-quote(data) g$subset<-quote(.survey.prob.weights>0) g$model <- TRUE ##need to rescale weights for stability data$.survey.prob.weights<-(1/design$prob)/mean(1/design$prob) if (!all(all.vars(formula) %in% names(data))) stop("all variables must be in design= argument") g<-with(list(data=data), eval(g)) g$call<-match.call() g$call[[1]]<-as.name(.Generic) g$printcall<-sys.call(-1) g$printcall[[1]]<-as.name(.Generic) class(g)<-c("svycoxph", class(g)) g$survey.design<-design nas<-g$na.action if (length(nas)) design<-design[-nas,] dbeta.subset<-resid(g,"dfbeta",weighted=TRUE) if (nrow(design)==NROW(dbeta.subset)){ dbeta<-as.matrix(dbeta.subset) } else { dbeta<-matrix(0,ncol=NCOL(dbeta.subset),nrow=nrow(design)) dbeta[is.finite(design$prob),]<-dbeta.subset } g$inv.info<-g$var if (inherits(design,"survey.design2")) g$var<-svyrecvar(dbeta, design$cluster, design$strata, design$fpc, postStrata=design$postStrata) else if (inherits(design, "twophase")) g$var<-twophasevar(dbeta, design) else if(inherits(design, "twophase2")) g$var<-twophase2var(dbeta, design) else if(inherits(design, "pps")) g$var<-ppsvar(dbeta,design) else g$var<-svyCprod(dbeta, design$strata, design$cluster[[1]], design$fpc,design$nPSU, design$certainty,design$postStrata) g$wald.test<-coef(g)%*%solve(g$var,coef(g)) g$ll<-g$loglik g$loglik<-NULL g$rscore<-NULL g$score<-NA g$degf.resid<-degf(design)-length(coef(g)[!is.na(coef(g))])+1 g } model.frame.svycoxph<-function(formula,...){ f<-formula$call env <- environment(formula(formula)) if (is.null(env)) env <- parent.frame() f[[1]]<-as.name("model.frame") f$data<-quote(data) f$design<-NULL f$method<-f$control<-f$singular.ok<-f$model<-f$x<-f$y<-f$iter<-NULL f$formula<-formula(formula) if (is.null(f$weights)) f$weights<-quote(.survey.prob.weights) else f$weights<-bquote(.survey.prob.weights*.(f$weights)) design<-formula$survey.design data<-model.frame(design) data$.survey.prob.weights<-(1/design$prob)/sum(1/design$prob) with(list(data=data), eval(f)) } model.matrix.svycoxph<-function (object, data = NULL, contrast.arg = object$contrasts, ...) { if (!is.null(object[["x"]])) object[["x"]] else { if (is.null(data)) data <- model.frame(object, ...) else data <- model.frame(object, data = data, ...) Terms <- object$terms attr(Terms, "intercept") <- 1 strats <- attr(Terms, "specials")$strata cluster <- attr(Terms, "specials")$cluster dropx <- NULL if (length(cluster)) { tempc <- untangle.specials(Terms, "cluster", 1:10) ord <- attr(Terms, "order")[tempc$terms] if (any(ord > 1)) stop("Cluster can not be used in an interaction") dropx <- tempc$terms } if (length(strats)) { temp <- untangle.specials(Terms, "strata", 1) dropx <- c(dropx, temp$terms) } if (length(dropx)) { newTerms <- Terms[-dropx] X <- model.matrix(newTerms, data, contrasts = contrast.arg) } else { newTerms <- Terms X <- model.matrix(Terms, data, contrasts = contrast.arg) } X } } print.svycoxph<-function(x,...){ print(x$survey.design, varnames=FALSE, design.summaries=FALSE,...) ## x$call<-x$printcall NextMethod() } summary.svycoxph<-function(object,...){ print(object$survey.design,varnames=FALSE, design.summaries=FALSE,...) ## object$call<-object$printcall NextMethod() } survfit.svycoxph<-function(object,...){ stop("No survfit method for survey models") } extractAIC.svycoxph<-function(fit,...){ stop("No AIC for survey models") } anova.svycoxph<-function(object,...){ stop("No anova method for survey models") } svyglm<-function(formula, design, ...){ .svycheck(design) UseMethod("svyglm",design) } svyglm.survey.design<-function(formula,design,subset=NULL,...){ subset<-substitute(subset) subset<-eval(subset, model.frame(design), parent.frame()) if (!is.null(subset)) design<-design[subset,] data<-model.frame(design) g<-match.call() g$formula<-eval.parent(g$formula) g$design<-NULL g$var<-NULL if (is.null(g$weights)) g$weights<-quote(.survey.prob.weights) else g$weights<-bquote(.survey.prob.weights*.(g$weights)) g$data<-quote(data) g[[1]]<-quote(glm) ##need to rescale weights for stability in binomial data$.survey.prob.weights<-(1/design$prob)/mean(1/design$prob) if (!all(all.vars(formula) %in% names(data))) stop("all variables must be in design= argument") g<-with(list(data=data), eval(g)) g$naive.cov<-summary(g)$cov.unscaled nas<-g$na.action if (length(nas)) design<-design[-nas,] g$cov.unscaled<-svy.varcoef(g,design) g$df.residual <- degf(design)+1-length(coef(g)[!is.na(coef(g))]) class(g)<-c("svyglm",class(g)) g$call<-sys.call() g$call[[1]]<-as.name(.Generic) if(!("formula" %in% names(g$call))) { if (is.null(names(g$call))) i<-1 else i<-min(which(names(g$call)[-1]=="")) names(g$call)[i+1]<-"formula" } g$survey.design<-design g } print.svyglm<-function(x,...){ print(x$survey.design, varnames=FALSE, design.summaries=FALSE,...) NextMethod() } coef.svyglm<-function(object,...,na.rm=TRUE) { beta<-object$coefficients if (!na.rm || length(beta)==object$rank) beta else beta[object$qr$pivot[1:object$rank]] } vcov.svyglm<-function(object,...) { v<-object$cov.unscaled dimnames(v)<-list(names(coef(object)),names(coef(object))) v } svy.varcoef<-function(glm.object,design){ Ainv<-summary(glm.object)$cov.unscaled estfun<-model.matrix(glm.object)*resid(glm.object,"working")*glm.object$weights if (glm.object$rank|z|)")) } else if (df.r > 0) { pvalue <- 2 * pt(-abs(tvalue), df.r) coef.table <- cbind(coef.p, s.err, tvalue, pvalue) dimnames(coef.table) <- list(names(coef.p), c(dn, "t value", "Pr(>|t|)")) } else { coef.table <- cbind(coef.p, Inf) dimnames(coef.table) <- list(names(coef.p), dn) } ans <- c(object[c("call", "terms", "family", "deviance", "aic", "contrasts", "df.residual", "null.deviance", "df.null", "iter")], list(deviance.resid = residuals(object, type = "deviance"), aic = object$aic, coefficients = coef.table, dispersion = dispersion, df = c(object$rank, df.r,NCOL(Qr$qr)), cov.unscaled = covmat, cov.scaled = covmat)) if (correlation) { dd <- sqrt(diag(covmat)) ans$correlation <- covmat/outer(dd, dd) } ans$aliased<-is.na(coef(object,na.rm=FALSE)) ans$survey.design<-list(call=object$survey.design$call) class(ans) <- c("summary.svyglm","summary.glm") return(ans) } logLik.svyglm<-function(object,...){ warning("svyglm not fitted by maximum likelihood.") object$deviance } AIC.svyglm<-function(object,...,k=2){ if (length(list(...))){ do.call(rbind,lapply(list(object,...),extractAIC,k=k)) } else { extractAIC(object,k=k) } } extractAIC.svyglm<-function(fit,scale,k=2,...){ if (length(attr(terms(fit),"factors"))){ r<-regTermTest(fit, delete.response(formula(fit)), method="LRT") deltabar<-mean(r$lambda) } else { r<-list(lambda=0) deltabar<-NaN } d<-fit$deviance c(eff.p=sum(r$lambda), AIC=d+k*sum(r$lambda),deltabar=deltabar) } extractAIC.svrepglm<-extractAIC.svyglm BIC.svyglm<-function(object,...,maximal){ if (length(list(...))){ do.call(rbind,lapply(list(object,...),dBIC,modelM=maximal)) } else { dBIC(object,modelM=maximal) } } dBIC<-function(modela,modelM){ pm<-modela$rank pM<-modelM$rank if (any(!(names(coef(modela))%in% names(coef(modelM))))){ stop("coefficients in model but not in maximal model") } index<-!(names(coef(modelM))%in% names(coef(modela))) n<-1+modela$df.null if(any(index)){ wald<-coef(modelM)[index]%*%solve(vcov(modelM)[index,index],coef(modelM)[index]) detDelta<-det(solve(modelM$naive.cov[index,index,drop=FALSE],modelM$cov.unscaled[index,index,drop=FALSE])) dbar<-detDelta^(1/(pM-pm)) nstar<-n/dbar }else { wald<-0 detDelta<-1 dbar<-1 nstar=NaN } c(p=pm, BIC=wald+pm*log(n)+log(detDelta)+deviance(modelM),neff=nstar) } confint.svyglm<-function(object,parm,level=0.95,method=c("Wald","likelihood"),ddf=Inf,...){ method<-match.arg(method) if(method=="Wald"){ tlevel <- 1 - 2*pnorm(qt((1 - level)/2, df = ddf)) return(confint.default(object,parm=parm,level=tlevel,...)) } pnames <- names(coef(object)) if (missing(parm)) parm <- seq_along(pnames) else if (is.character(parm)) parm <- match(parm, pnames, nomatch = 0) lambda<-diag(object$cov.unscaled[parm,parm,drop=FALSE])/diag(object$naive.cov[parm,parm,drop=FALSE]) if(is.null(ddf)) ddf<-object$df.residual if (ddf==Inf) alpha<-pnorm(qnorm((1-level)/2)*sqrt(lambda))/2 else { alpha<-pnorm(qt((1-level)/2,df=ddf)*sqrt(lambda))/2 } rval<-vector("list",length(parm)) for(i in 1:length(parm)){ temp<-MASSprofile_glm(fitted=object,which=parm[i],alpha=alpha[i],...) rval[[i]]<-confint_profile(temp,parm=parm[i],level=level, unscaled_level=2*alpha[i],...) } names(rval)<-pnames[parm] if (length(rval)==1) rval<-rval[[1]] else rval<-do.call(rbind,rval) attr(rval,"levels")<-level rval } ## ## based on MASS:::confint.profile.glm ## which is GPL and (c) Bill Venables and Brian D Ripley. ## confint_profile <- function (object, parm = seq_along(pnames), level = 0.95, unscaled_level, ...) { of <- attr(object, "original.fit") pnames <- names(coef(of)) if (is.character(parm)) parm <- match(parm, pnames, nomatch = 0L) a <- (1-level)/2 a <- c(a, 1 - a) pct <- paste(round(100 * a, 1), "%") ci <- array(NA, dim = c(length(parm), 2L), dimnames = list(pnames[parm], pct)) cutoff <- c(qnorm(unscaled_level),qnorm(unscaled_level, lower.tail=FALSE)) for (pm in parm) { pro <- object[[pnames[pm]]] if (is.null(pro)) next if (length(pnames) > 1L) sp <- spline(x = pro[, "par.vals"][, pm], y = pro[, 1]) else sp <- spline(x = pro[, "par.vals"], y = pro[, 1]) ci[pnames[pm], ] <- approx(sp$y, sp$x, xout = cutoff)$y } drop(ci) } ## ## MASS:::profile.glm with very slight changes to avoid rounding error in 1-alpha ## original is GPL and (c) Bill Venables and Brian D Ripley. ## MASSprofile_glm<-function (fitted, which = 1:p, alpha = 0.01, maxsteps = 10, del = zmax/5, trace = FALSE, ...) { Pnames <- names(B0 <- coef(fitted)) nonA <- !is.na(B0) pv0 <- t(as.matrix(B0)) p <- length(Pnames) if (is.character(which)) which <- match(which, Pnames) summ <- summary(fitted) std.err <- summ$coefficients[, "Std. Error", drop = FALSE] mf <- model.frame(fitted) Y <- model.response(mf) n <- NROW(Y) O <- model.offset(mf) if (!length(O)) O <- rep(0, n) W <- model.weights(mf) if (length(W) == 0L) W <- rep(1, n) OriginalDeviance <- deviance(fitted) DispersionParameter <- summ$dispersion X <- model.matrix(fitted) fam <- family(fitted) switch(fam$family, binomial = , poisson = , `Negative Binomial` = { zmax <- sqrt(qchisq(alpha, 1,lower.tail=FALSE)) profName <- "z" }, gaussian = , quasi = , inverse.gaussian = , quasibinomial = , quasipoisson = , { zmax <- sqrt(qf(alpha, 1, n - p,lower.tail=FALSE)) profName <- "tau" }) prof <- vector("list", length = length(which)) names(prof) <- Pnames[which] for (i in which) { if (!nonA[i]) next zi <- 0 pvi <- pv0 a <- nonA a[i] <- FALSE Xi <- X[, a, drop = FALSE] pi <- Pnames[i] for (sgn in c(-1, 1)) { if (trace) message("\nParameter: ", pi, " ", c("down", "up")[(sgn + 1)/2 + 1]) step <- 0 z <- 0 LP <- X[, nonA, drop = FALSE] %*% B0[nonA] + O while ((step <- step + 1) < maxsteps && abs(z) < zmax) { bi <- B0[i] + sgn * step * del * std.err[Pnames[i], 1] o <- O + X[, i] * bi fm <- glm.fit(x = Xi, y = Y, weights = W, etastart = LP, offset = o, family = fam, control = fitted$control) LP <- Xi %*% fm$coefficients + o ri <- pv0 ri[, names(coef(fm))] <- coef(fm) ri[, pi] <- bi pvi <- rbind(pvi, ri) zz <- (fm$deviance - OriginalDeviance)/DispersionParameter if (zz > -0.001) zz <- max(zz, 0) else stop("profiling has found a better solution, so original fit had not converged") z <- sgn * sqrt(zz) zi <- c(zi, z) } } si <- order(zi) prof[[pi]] <- structure(data.frame(zi[si]), names = profName) prof[[pi]]$par.vals <- pvi[si, , drop = FALSE] } val <- structure(prof, original.fit = fitted, summary = summ) class(val) <- c("profile.glm", "profile") val } ### svymle<-function(loglike, gradient=NULL, design, formulas, start=NULL, control=list(maxit=1000), na.action="na.fail", method=NULL,...){ if(is.null(method)) method<-if(is.null(gradient)) "Nelder-Mead" else "nlm" if (!inherits(design,"survey.design")) stop("design is not a survey.design") weights<-weights(design) wtotal<-sum(weights) if (is.null(control$fnscale)) control$fnscale <- -wtotal/length(weights) if (inherits(design, "twophase")) data<-design$phase1$sample$variables else data<-design$variables ## Get the response variable nms<-names(formulas) if (nms[1]==""){ if (inherits(formulas[[1]],"formula")) y<-eval.parent(model.frame(formulas[[1]],data=data,na.action=na.pass)) else y<-eval(y,data,parent.frame()) formulas[1]<-NULL if (FALSE && NCOL(y)>1) stop("Y has more than one column") } else { ## one formula must have response has.response<-sapply(formulas,length)==3 if (sum(has.response)!=1) stop("Need a response variable") ff<-formulas[[which(has.response)]] ff[[3]]<-1 y<-eval.parent(model.frame(ff,data=data,na.action=na.pass)) formulas[[which(has.response)]]<-delete.response(terms(formulas[[which(has.response)]])) nms<-c("",nms) } if(length(which(nms==""))>1) stop("Formulas must have names") mf<-vector("list",length(formulas)) vnms <- unique(do.call(c, lapply(formulas, all.vars))) uformula <- make.formula(vnms) mf <- model.frame(uformula, data=data,na.action=na.pass) mf <- cbind(`(Response)`=y, mf) mf<-mf[,!duplicated(colnames(mf)),drop=FALSE] mf<-get(na.action)(mf) nas<-attr(mf,"na.action") if (length(nas)) design<-design[-nas,] weights<-1/design$prob wtotal<-sum(weights) Y<-mf[,1] mm<-lapply(formulas,model.matrix, data=mf) ## parameter names parnms<-lapply(mm,colnames) for(i in 1:length(parnms)) parnms[[i]]<-paste(nms[i+1],parnms[[i]],sep=".") parnms<-unlist(parnms) # maps position in theta to model matrices np<-c(0,cumsum(sapply(mm,NCOL))) objectivefn<-function(theta,...){ args<-vector("list",length(nms)) args[[1]]<-Y for(i in 2:length(nms)) args[[i]]<-mm[[i-1]]%*%theta[(np[i-1]+1):np[i]] names(args)<-nms args<-c(args, ...) sum(do.call("loglike",args)*weights) } if (is.null(gradient)) { grad<-NULL } else { fnargs<-names(formals(loglike))[-1] grargs<-names(formals(gradient))[-1] if(!identical(fnargs,grargs)) stop("loglike and gradient have different arguments.") reorder<-na.omit(match(grargs,nms[-1])) grad<-function(theta,...){ args<-vector("list",length(nms)) args[[1]]<-Y for(i in 2:length(nms)) args[[i]]<-drop(mm[[i-1]]%*%theta[(np[i-1]+1):np[i]]) names(args)<-nms args<-c(args,...) rval<-NULL tmp<-do.call("gradient",args) for(i in reorder){ rval<-c(rval, colSums(as.matrix(tmp[,i]*weights*mm[[i]]))) } drop(rval) } } theta0<-numeric(np[length(np)]) if (is.list(start)) st<-do.call("c",start) else st<-start if (length(st)==length(theta0)) { theta0<-st } else { stop("starting values wrong length") } if (method=="nlm"){ ff<-function(theta){ rval<- -objectivefn(theta) if (is.na(rval)) rval<- -Inf attr(rval,"gradient")<- -grad(theta) rval } rval<-nlm(ff, theta0,hessian=TRUE) if (rval$code>3) warning("nlm did not converge") rval$par<-rval$estimate } else { rval<-optim(theta0, objectivefn, grad,control=control, hessian=TRUE,method=method,...) if (rval$conv!=0) warning("optim did not converge") } names(rval$par)<-parnms dimnames(rval$hessian)<-list(parnms,parnms) if (is.null(gradient)) { rval$invinf<-solve(-rval$hessian) rval$scores<-NULL rval$sandwich<-NULL } else { theta<-rval$par args<-vector("list",length(nms)) args[[1]]<-Y for(i in 2:length(nms)) args[[i]]<-drop(mm[[i-1]]%*%theta[(np[i-1]+1):np[i]]) names(args)<-nms args<-c(args,...) deta<-do.call("gradient",args) rval$scores<-NULL for(i in reorder) rval$scores<-cbind(rval$scores,deta[,i]*weights*mm[[i]]) rval$invinf<-solve(-rval$hessian) dimnames(rval$invinf)<-list(parnms,parnms) db<-rval$scores%*%rval$invinf if (inherits(design,"survey.design2")) rval$sandwich<-svyrecvar(db,design$cluster,design$strata, design$fpc, postStrata=design$postStrata) else if (inherits(design, "twophase")) rval$sandwich<-twophasevar(db,design) else rval$sandwich<-svyCprod(db,design$strata,design$cluster[[1]], design$fpc, design$nPSU, design$certainty, design$postStrata) dimnames(rval$sandwich)<-list(parnms,parnms) } rval$call<-match.call() rval$design<-design class(rval)<-"svymle" rval } svymleOLD<-function(loglike, gradient=NULL, design, formulas, start=NULL, control=list(maxit=1000), na.action="na.fail", method=NULL,...){ if(is.null(method)) method<-if(is.null(gradient)) "Nelder-Mead" else "nlm" if (!inherits(design,"survey.design")) stop("design is not a survey.design") weights<-1/design$prob wtotal<-sum(weights) if (is.null(control$fnscale)) control$fnscale<- -wtotal if (inherits(design, "twophase")) data<-design$phase1$sample$variables else data<-design$variables ## Get the response variable nms<-names(formulas) if (nms[1]==""){ if (inherits(formulas[[1]],"formula")) y<-eval.parent(model.frame(formulas[[1]],data=data,na.action=na.pass)) else y<-eval(y,data,parent.frame()) formulas[1]<-NULL if (FALSE && NCOL(y)>1) stop("Y has more than one column") } else { ## one formula must have response has.response<-sapply(formulas,length)==3 if (sum(has.response)!=1) stop("Need a response variable") ff<-formulas[[which(has.response)]] ff[[3]]<-1 y<-eval.parent(model.frame(ff,data=data,na.action=na.pass)) formulas[[which(has.response)]]<-delete.response(terms(formulas[[which(has.response)]])) nms<-c("",nms) } if(length(which(nms==""))>1) stop("Formulas must have names") mf<-vector("list",length(formulas)) for(i in 1:length(formulas)){ mf[[i]]<-eval.parent(model.frame(formulas[[i]], data=data, na.action=na.pass)) } notnulls<-sapply(mf,function(mfi) NCOL(mfi)!=0) mf<-mf[notnulls] if (any(notnulls)) mf<-as.data.frame(do.call("cbind",c(y,mf))) else mf<-y names(mf)[1]<-"(Response)" mf<-mf[,!duplicated(colnames(mf)),drop=FALSE] mf<-get(na.action)(mf) nas<-attr(mf,"na.action") if (length(nas)) design<-design[-nas,] Y<-mf[,1] mm<-lapply(formulas,model.matrix, data=mf) ## parameter names parnms<-lapply(mm,colnames) for(i in 1:length(parnms)) parnms[[i]]<-paste(nms[i+1],parnms[[i]],sep=".") parnms<-unlist(parnms) # maps position in theta to model matrices np<-c(0,cumsum(sapply(mm,NCOL))) objectivefn<-function(theta,...){ args<-vector("list",length(nms)) args[[1]]<-Y for(i in 2:length(nms)) args[[i]]<-mm[[i-1]]%*%theta[(np[i-1]+1):np[i]] names(args)<-nms args<-c(args, ...) sum(do.call("loglike",args)*weights) } if (is.null(gradient)) { grad<-NULL } else { fnargs<-names(formals(loglike))[-1] grargs<-names(formals(gradient))[-1] if(!identical(fnargs,grargs)) stop("loglike and gradient have different arguments.") reorder<-na.omit(match(grargs,nms[-1])) grad<-function(theta,...){ args<-vector("list",length(nms)) args[[1]]<-Y for(i in 2:length(nms)) args[[i]]<-drop(mm[[i-1]]%*%theta[(np[i-1]+1):np[i]]) names(args)<-nms args<-c(args,...) rval<-NULL tmp<-do.call("gradient",args) for(i in reorder){ rval<-c(rval, colSums(as.matrix(tmp[,i]*weights*mm[[i]]))) } drop(rval) } } theta0<-numeric(np[length(np)]) if (is.list(start)) st<-do.call("c",start) else st<-start if (length(st)==length(theta0)) { theta0<-st } else { stop("starting values wrong length") } if (method=="nlm"){ ff<-function(theta){ rval<- -objectivefn(theta) if (is.na(rval)) rval<- -Inf attr(rval,"grad")<- -grad(theta) rval } rval<-nlm(ff, theta0,hessian=TRUE) if (rval$code>3) warning("nlm did not converge") rval$par<-rval$estimate } else { rval<-optim(theta0, objectivefn, grad,control=control, hessian=TRUE,method=method,...) if (rval$conv!=0) warning("optim did not converge") } names(rval$par)<-parnms dimnames(rval$hessian)<-list(parnms,parnms) if (is.null(gradient)) { rval$invinf<-solve(-rval$hessian) rval$scores<-NULL rval$sandwich<-NULL } else { theta<-rval$par args<-vector("list",length(nms)) args[[1]]<-Y for(i in 2:length(nms)) args[[i]]<-drop(mm[[i-1]]%*%theta[(np[i-1]+1):np[i]]) names(args)<-nms args<-c(args,...) deta<-do.call("gradient",args) rval$scores<-NULL for(i in reorder) rval$scores<-cbind(rval$scores,deta[,i]*weights*mm[[i]]) rval$invinf<-solve(-rval$hessian) dimnames(rval$invinf)<-list(parnms,parnms) db<-rval$scores%*%rval$invinf if (inherits(design,"survey.design2")) rval$sandwich<-svyrecvar(db,design$cluster,design$strata, design$fpc, postStrata=design$postStrata) else if (inherits(design, "twophase")) rval$sandwich<-twophasevar(db,design) else rval$sandwich<-svyCprod(db,design$strata,design$cluster[[1]], design$fpc, design$nPSU, design$certainty, design$postStrata) dimnames(rval$sandwich)<-list(parnms,parnms) } rval$call<-match.call() rval$design<-design class(rval)<-"svymle" rval } coef.svymle<-function(object,...) object$par vcov.svymle<-function(object,stderr=c("robust","model"),...) { stderr<-match.arg(stderr) if (stderr=="robust"){ rval<-object$sandwich if (is.null(rval)) { p<-length(coef(object)) rval<-matrix(NA,p,p) } } else { rval<-object$invinf*mean(1/object$design$prob) } rval } print.svymle<-function(x,...){ cat("Survey-sampled mle: \n") print(x$call) cat("Coef: \n") print(x$par) } summary.svymle<-function(object,stderr=c("robust","model"),...){ cat("Survey-sampled mle: \n") print(object$call) stderr<-match.arg(stderr) tbl<-data.frame(Coef=coef(object),SE=sqrt(diag(vcov(object,stderr=stderr)))) tbl$p.value<-format.pval(2*(1-pnorm(abs(tbl$Coef/tbl$SE))), digits=3,eps=0.001) print(tbl) print(object$design) } model.frame.survey.design<-function(formula,...,drop=TRUE){ formula$variables } model.frame.svyrep.design<-function(formula,...){ formula$variables } model.frame.survey.design2<-function(formula,...){ formula$variables } .onLoad<-function(...){ if (is.null(getOption("survey.lonely.psu"))) options(survey.lonely.psu="fail") if (is.null(getOption("survey.ultimate.cluster"))) options(survey.ultimate.cluster=FALSE) if (is.null(getOption("survey.want.obsolete"))) options(survey.want.obsolete=FALSE) if (is.null(getOption("survey.adjust.domain.lonely"))) options(survey.adjust.domain.lonely=FALSE) if (is.null(getOption("survey.drop.replicates"))) options(survey.drop.replicates=TRUE) if (is.null(getOption("survey.multicore"))) options(survey.multicore=FALSE) if (is.null(getOption("survey.replicates.mse"))) options(survey.replicates.mse=FALSE) } predterms<-function(object,se=FALSE,terms=NULL){ tt<-terms(object) n <- length(object$residuals) p <- object$rank p1 <- seq_len(p) piv <- object$qr$pivot[p1] beta<-coef(object) X<-mm<-model.matrix(object) aa <- attr(mm, "assign") ll <- attr(tt, "term.labels") hasintercept <- attr(tt, "intercept") > 0L if (hasintercept) ll <- c("(Intercept)", ll) aaa <- factor(aa, labels = ll) asgn <- split(order(aa), aaa) if (hasintercept) { asgn$"(Intercept)" <- NULL } avx <- colMeans(mm) termsconst <- sum(avx[piv] * beta[piv]) nterms <- length(asgn) ip <- matrix(ncol = nterms, nrow = NROW(X)) if (nterms > 0) { predictor <- matrix(ncol = nterms, nrow = NROW(X)) dimnames(predictor) <- list(rownames(X), names(asgn)) if (hasintercept) X <- sweep(X, 2L, avx, check.margin = FALSE) unpiv <- rep.int(0L, NCOL(X)) unpiv[piv] <- p1 for (i in seq.int(1L, nterms, length.out = nterms)) { iipiv <- asgn[[i]] ii <- unpiv[iipiv] iipiv[ii == 0L] <- 0L predictor[, i] <- if (any(iipiv > 0L)) X[, iipiv, drop = FALSE] %*% beta[iipiv] else 0 if (se){ ip[,i]<-if (any(iipiv > 0L)) rowSums(as.matrix(X[, iipiv, drop = FALSE] %*% vcov(object)[ii,ii]) * X[, iipiv, drop = FALSE]) else 0 } } if (!is.null(terms)) { predictor <- predictor[, terms, drop = FALSE] if (se) ip <- ip[, terms, drop = FALSE] } } else { predictor <- ip <- matrix(0, n, 0) } attr(predictor, "constant") <- if (hasintercept) termsconst else 0 if(se) dimnames(ip)<-dimnames(predictor) if (se) list(fit=predictor,se.fit=sqrt(ip)) else predictor } predict.svyglm <- function(object, newdata=NULL, total=NULL, type = c("link", "response","terms"), se.fit=(type!="terms"), vcov=FALSE,...){ if(is.null(newdata)) newdata<-model.frame(object$survey.design) type<-match.arg(type) if (type=="terms") return(predterms(object,se=se.fit,...)) tt<-delete.response(terms(formula(object))) mf<-model.frame(tt,data=newdata, xlev=object$xlevels) mm<-model.matrix(tt,mf,contrasts.arg = object$contrasts) if (!is.null(total) && attr(tt,"intercept")){ mm[,attr(tt,"intercept")]<-mm[,attr(tt,"intercept")]*total } eta<-drop(mm %*% coef(object)) d<-drop(object$family$mu.eta(eta)) eta<-switch(type, link=eta, response=object$family$linkinv(eta)) if(se.fit){ if(vcov){ vv<-mm %*% vcov(object) %*% t(mm) attr(eta,"var")<-switch(type, link=vv, response=d*(t(vv*d))) } else { ## FIXME make this more efficient vv<-drop(rowSums((mm %*% vcov(object)) * mm)) attr(eta,"var")<-switch(type, link=vv, response=drop(d*(t(vv*d)))) } } attr(eta,"statistic")<-type class(eta)<-"svystat" eta } survey/R/logrank.R0000644000176200001440000001673612750475505013617 0ustar liggesuserssvylogrank<-function(formula, design,rho=0,gamma=0,method=c("small","large","score"),...){ UseMethod("svylogrank",design) } print.svylogrank<-function(x,...){ m<-t(x) rownames(m)="" printCoefmat(m,has.Pvalue=TRUE,P.values=TRUE) invisible(NULL) } .logrank<-function(formula, design,rho=0,gamma=0){ nullformula<-update(formula,.~1) S<-svykm(nullformula,design,se=FALSE) epsilon<-min(diff(sort(unique(S$time))))/10 w<-approxfun(S$time+epsilon,S$surv^rho*(1-S$surv)^gamma,method="constant",rule=2) environment(formula)<-environment() coxmodel<-coxph(formula,data=model.frame(design), weights=weights(design,"sampling"),iter.max=0) x<-model.matrix(coxmodel) detail<-coxph.detail(coxmodel,riskmat=TRUE) Y<-t(detail$riskmat) dLambda<-detail$hazard E<-as.matrix(detail$means) N<-coxmodel$y[,"status"] times<-coxmodel$y[,"time"] U<-matrix(nrow=nrow(x),ncol=ncol(x)) index<-match(times[N==1],detail$time) ZmEdN<- matrix(0,nrow=nrow(x),ncol=ncol(x)) ZmEdN[N==1,]<-x[N==1,,drop=FALSE]-E[index,] for(p in 1:ncol(x)){ ZmE <- -outer(E[,p], x[,p], "-") ##times are rows, people are columns U[,p]<- ZmEdN[,p]*w(times)- colSums(w(detail$time)*ZmE*dLambda*Y) } means <- svytotal(U,design) zstat<-coef(means)/SE(means) chisqstat<-coef(means)%*%solve(vcov(means),coef(means)) rval<-list(cbind(score=coef(means),se=SE(means),z=coef(means)/SE(means),p= 2*pnorm(-abs(coef(means)/SE(means)))), c(chisq=chisqstat,p=pchisq(chisqstat,df=ncol(x),lower.tail=FALSE))) class(rval)<-"svylogrank" rval } .biglogrank<-function(formula, design,rho=0,gamma=0){ nullformula<-update(formula,.~1) S<-svykm(nullformula,design,se=FALSE) epsilon<-min(diff(sort(unique(S$time))))/10 w<-approxfun(S$time+epsilon,S$surv^rho*(1-S$surv)^gamma,method="constant",rule=2) environment(formula)<-environment() coxmodel<-coxph(formula,data=model.frame(design), weights=weights(design,"sampling"),iter.max=0) x<-model.matrix(coxmodel) detail<-coxph.detail(coxmodel) dLambda<-detail$hazard E<-as.matrix(detail$means) N<-coxmodel$y[,"status"] times<-coxmodel$y[,"time"] U<-matrix(nrow=nrow(x),ncol=ncol(x)) index<-match(times[N==1],detail$time) ZmEdN<- matrix(0,nrow=nrow(x),ncol=ncol(x)) ZmEdN[N==1,]<-x[N==1,,drop=FALSE]-E[index,] for(p in 1:ncol(x)){ U[,p]<- ZmEdN[,p]*w(times) for (j in seq_along(detail$time)){ thistime<-detail$time[j] ZmE <- x[,p]-E[j,p] U[,p] <- U[,p] - w(thistime)*ZmE*dLambda[j]*(times>=thistime) } } means <- svytotal(U,design) zstat<-coef(means)/SE(means) chisqstat<-coef(means)%*%solve(vcov(means),coef(means)) rval<-list(data.frame(score=coef(means),se=SE(means),z=coef(means)/SE(means),p= 2*pnorm(-abs(coef(means)/SE(means)))), c(chisq=chisqstat,p=pchisq(chisqstat,df=ncol(x),lower.tail=FALSE))) class(rval)<-"svylogrank" rval } svylogrank.survey.design2<-function(formula, design,rho=0,gamma=0, method=c("small","large","score"), ...){ method<-match.arg(method) if (method=="small") return(.logrank(formula,design, rho,gamma,...)) else if (method=="large") return(.biglogrank(formula,design,rho,gamma,...)) if (rho!=0 || gamma!=0){ return(expandlogrank(formula,design,rho,gamma,...)) } tms<-delete.response(terms(formula,specials="strata")) findstrat<-untangle.specials(tms,"strata") if(length(findstrat$terms)) tms<-tms[-findstrat$terms] mf<-model.frame(tms,model.frame(design)) if(length(mf)>1) stop("Only one grouping variable allowed") if(!is.factor(mf[[1]]) && length(unique(mf[[1]]))>2) stop("Grouping variable with more than 2 levels must be a factor") b<-coef(svycoxph(formula,design,iter=1)) v<-vcov(svycoxph(formula,design,iter=0)) x2<-sum(b*solve(v,b)) rval<-c(z=b/sqrt(diag(v)), Chisq=x2, p=pchisq(x2,length(b),lower.tail=FALSE)) class(rval)<-"svylogrank" rval } svylogrank.twophase<-svylogrank.survey.design2 svylogrank.twophase2<-svylogrank.survey.design2 svylogrank.DBIsvydesign<-function (formula, design, ...) { design$variables <- dropFactor(getvars(formula, design$db$connection, design$db$tablename, updates = design$updates, subset = design$subset), weights(design)) NextMethod("svylogrank", design) } svylogrank.ODBCsvydesign<-function (formula, design, ...) { design$variables <- dropFactor(getvars(formula, design$db$connection, design$db$tablename, updates = design$updates), weights(design)) NextMethod("svylogrank", design) } svylogrank.svyrep.design<-function(formula, design,rho=0,gamma=0,method=c("small","large","score"), ...){ method<-match.arg(method) if (method=="small") return(.logrank(formula,design, rho,gamma,...)) else if (method=="large") return(.biglogrank(formula,design,rho,gamma,...)) if (rho!=0 || gamma!=0){ return(expandlogrank(formula,design,rho,gamma,...)) } tms<-delete.response(terms(formula,specials="strata")) findstrat<-untangle.specials(tms,"strata") if(length(findstrat$terms)) tms<-tms[-findstrat$terms] mf<-model.frame(tms,model.frame(design)) if(length(mf)>1) stop("Only one grouping variable allowed") if(!is.factor(mf[[1]]) && length(unique(mf[[1]]))>2) stop("Grouping variable with more than 2 levels must be a factor") rr<-withReplicates(design, function(w,df){ environment(formula)<-environment() coef(coxph(formula,data=df,weights=w+1e-8,iter=1)) }) b<-unclass(rr) attr(b,"var")<-NULL v<-attr(rr,"var") x2<-sum(b*solve(v,b)) rval<- c(z=b/sqrt(diag(as.matrix(v))), Chisq=x2, p=pchisq(x2,length(b),lower.tail=FALSE)) class(rval)<-"svylogrank" rval } expandlogrank<-function(formula, design, rho=0, gamma=0){ nullformula<-update(formula,.~1) S<-svykm(nullformula,design,se=FALSE) epsilon<-min(diff(sort(unique(S$time))))/10 w<-approxfun(S$time+epsilon,S$surv^rho*(1-S$surv)^gamma,method="constant",rule=2) environment(formula)<-environment() coxmodel<-coxph(formula,data=model.frame(design), weights=weights(design,"sampling"),iter.max=0) mf<-model.frame(design) detail<-coxph.detail(coxmodel) if(attr(coxmodel$y,"type")=="right"){ mf$.time<-coxmodel$y[,"time"] mf$.status<-coxmodel$y[,"status"] mfsplit <- survSplit(mf, cut=detail$time, end=".time", event=".status", start=".start", id=".id", episode=".episode") } else { mf$.start<-coxmodel$y[,"start"] mf$.time<-coxmodel$y[,"stop"] mf$.status<-coxmodel$y[,"status"] mfsplit <- survSplit(mf, cut=detail$time, end=".time", event=".status", start=".start", id=".id", episode=".episode") } formula[[2]]<-quote(Surv(.start,.time,.status)) mfsplit$.weights<-weights(design,"sampling")[match(mfsplit$.id, rownames(mf))]*w(mfsplit$.time) expdesign<-svydesign(ids=eval(design$call$id), strata=eval(design$call$strata), data=mfsplit, weights=~.weights) #svylogrank(formula,expdesign) tms<-delete.response(terms(formula,specials="strata")) findstrat<-untangle.specials(tms,"strata") if(length(findstrat$terms)) tms<-tms[-findstrat$terms] mf<-model.frame(tms,model.frame(expdesign)) if(length(mf)>1) stop("Only one grouping variable allowed") if(!is.factor(mf[[1]]) && length(unique(mf[[1]]))>2) stop("Grouping variable with more than 2 levels must be a factor") b<-coef(svycoxph(formula,expdesign,iter=1)) v<-vcov(svycoxph(formula,expdesign,iter=0)) x2<-sum(b*solve(v,b)) rval<-c(z=b/sqrt(diag(v)), Chisq=x2, p=pchisq(x2,length(b),lower.tail=FALSE)) class(rval)<-"svylogrank" rval } survey/R/confint.R0000644000176200001440000000150712242746122013600 0ustar liggesusersformat.perc<-function (probs, digits) { paste(format(100 * probs, trim = TRUE, scientific = FALSE, digits = digits), "%") } confint.svystat<-function (object, parm, level = 0.95, df=Inf,...) { tconfint(object, parm, level,df) } confint.svrepstat<-confint.svystat confint.svyby<-confint.svystat confint.svyratio<-confint.svystat tconfint<-function (object, parm, level = 0.95, df=Inf) { cf <- coef(object) pnames <- names(cf) if (missing(parm)) parm <- pnames else if (is.numeric(parm)) parm <- pnames[parm] a <- (1 - level)/2 a <- c(a, 1 - a) pct <- format.perc(a, 3) fac <- qt(a, df=df) ci <- array(NA, dim = c(length(parm), 2L), dimnames = list(parm, pct)) ses <- unlist(SE(object))[parm %in% pnames] ci[] <- cf[parm] + ses %o% fac ci } survey/R/stratsample.R0000644000176200001440000000045412242746122014477 0ustar liggesusersstratsample<-function(strata, counts){ strata<-as.character(strata) n<-length(strata) rval <- integer(sum(counts)) allrows<-1:n j<-0 for(i in 1:length(counts)) { thisstrat<-names(counts)[i] rval[j+(1:counts[i])]<-sample(allrows[strata==thisstrat],counts[i]) j<-j+counts[i] } rval }survey/R/svyhist.R0000644000176200001440000000204612242746122013650 0ustar liggesuserssvyhist<-function(formula, design, breaks = "Sturges", include.lowest = TRUE, right = TRUE, xlab=NULL, main=NULL, probability=TRUE, freq=!probability,...){ if (inherits(design,"DBIsvydesign") || inherits(design,"ODBCsvydesign")){ design$variables<-getvars(formula, design$db$connection, design$db$tablename, updates = design$updates) class(design)<-"survey.design2" } mf<-model.frame(formula,model.frame(design), na.action=na.pass) if (ncol(mf)>1) stop("Only one variable allowed.") variable<-mf[,1] varname<-names(mf) h <- hist(variable, plot=FALSE, breaks=breaks,right=right) props <- coef(svymean(~cut(variable, h$breaks,right=right, include.lowest=include.lowest), design, na.rm=TRUE)) h$density<-props/diff(h$breaks) h$counts <- props*sum(weights(design,"sampling")) if (is.null(xlab)) xlab<-varname if (is.null(main)) main<-paste("Histogram of",varname) plot(h, ..., freq=freq,xlab=xlab,main=main) } survey/R/twophase.R0000644000176200001440000006112613122573066014000 0ustar liggesusers## ## twophase<-function(id,strata=NULL, probs=NULL, weights=NULL, fpc=NULL, subset, data, method=c("full","approx","simple")){ data<-detibble(data) method<-match.arg(method) if(method=="full") { if (!is.null(weights)) stop("weights not accepted by method='full'") return(twophase2(id=id, strata=strata, probs=probs, fpc=fpc,subset=subset,data=data)) } d1<-svydesign(ids=id[[1]],strata=strata[[1]],weights=weights[[1]], probs=probs[[1]],fpc=fpc[[1]],data=data) if(inherits(subset,"formula")) subset<-eval.parent(model.frame(subset,data=data,na.action=na.pass))[[1]] if(!is.logical(subset) && sort(unique(subset))==c(0,1)) subset<-as.logical(subset) if (any(is.na(subset))) stop("missing values in 'subset'") d1s<-svydesign(ids=id[[1]],strata=strata[[1]],weights=weights[[1]], probs=probs[[1]],fpc=fpc[[1]],data=data[subset,]) d1s$prob<-d1$prob[subset] d1s$allprob<-d1$allprob[subset,,drop=FALSE] ##if (NCOL(d1s$allprob)>1) ## stop("Can't handle multistage sampling at phase 1 (yet)") ## work out phase-two fpc if (is.null(fpc[[2]])){ complete.vars<-names(data)[apply(data, 2, function(v) all(!is.na(v)))] if (all(c(all.vars(id[[2]]), all.vars(strata[[2]])) %in% complete.vars)){ dfpc<-svydesign(ids=id[[2]], strata=strata[[2]], data=data, probs=NULL) popsize<-mapply(function(s,i) ave(!duplicated(i),s,FUN=sum), dfpc$strata, dfpc$cluster) rm(dfpc) } else { warning("Second-stage fpc not specified and not computable") popsize<-NULL } } else popsize<-NULL d2<-svydesign(ids=id[[2]], strata=strata[[2]], probs=probs[[2]], weights=weights[[2]], fpc=fpc[[2]], data=data[subset,]) ## ugly hack to get nicer labels if(!is.null(fpc[[2]])){ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), weights=.(weights[[2]]), fpc=.(fpc[[2]]))) } else{ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), weights=.(weights[[2]]), fpc=`*phase1*`)) } for(i in names(d2call)[-1]) d2call[[i]]<-d2call[[i]] d2$call<-d2call d1call<-bquote(svydesign(ids=.(id[[1]]), strata=.(strata[[1]]), probs=.(probs[[1]]), weights=.(weights[[1]]), fpc=.(fpc[[1]]))) for(i in names(d1call)[-1]) d1call[[i]]<-d1call[[i]] d1$call<-d1call ## Add phase 2 fpc and probs if they were computed rather than specified. if (!is.null(popsize)) d2$fpc<-as.fpc(popsize[subset,,drop=FALSE],d2$strata,d2$cluster) if(is.null(probs[[2]]) && is.null(weights[[2]]) && !is.null(d2$fpc$popsize)){ d2$allprob<-1/weights(d2$fpc,final=FALSE) d2$prob<-apply(as.data.frame(d2$allprob),1,prod) } d2$variables<-NULL rval<-list(phase1=list(full=d1,sample=d1s), phase2=d2, subset=subset) rval$prob<-rval$phase1$sample$prob ## Are phase 2 PSUs the same as Phase 1 USUs, or smaller? rval$samescale<- !any(duplicated(d1s$cluster[,NCOL(d1s$cluster)][!duplicated(d2$cluster[,1])])) ## For each phase 1 sampling unit, need probability of being represented ## at phase 2. nunique<-function(x) sum(!duplicated(x)) m<-NCOL(rval$phase1$sample$cluster) if(d2$has.strata){ if (inherits(strata[[2]],"formula")) sa<-eval(attr(terms(strata[[2]]),"variables")[[2]],d1$variables) else sa<-d1$strata[,1] cm<-rval$phase1$full$cluster[,m] if (nunique(sa)!=nunique(sa[subset])) stop("Some phase-2 strata have zero sampling fraction") rval$usu<-ave(cm[subset],sa[subset],FUN=nunique)/ave(cm,sa,FUN=nunique)[subset] } else { rval$usu<-drop(with(rval$phase1$sample,ave(cluster[,m], strata[,m], FUN=nunique))/rval$phase1$full$fpc$sampsize[rval$subset]) } ## if (any(rval$usu<1) && any(duplicated(d1$cluster[,1]))) ## stop("Phase 1 design must either be element sampling or have all phase 1 sampling units in phase 2") if (length(rval$phase1$sample$prob)==length(d2$prob)) rval$prob<-rval$phase1$sample$prob*d2$prob else{ rval$prob<-rep(Inf,length(rval$phase1$sample$prob)) rval$prob[subset]<-rval$prob[subset]*d2$prob } rval$call<-sys.call() class(rval) <- c("twophase","survey.design") rval } print.twophase<-function(x,...){ cat("Two-phase design: ") print(x$call) cat("Phase 1:\n") print(x$phase1$full) cat("Phase 2:\n") print(x$phase2) invisible(x) } summary.twophase<-function(object,...){ class(object)<-"summary.twophase" object } print.summary.twophase<-function(x,...,varnames=TRUE){ cat("Two-phase design: ") print(x$call) cat("Phase 1:\n") print(x$phase1$full,design.summaries=TRUE,varnames=FALSE) cat("Phase 2:\n") print(x$phase2,design.summaries=TRUE, varnames=FALSE) if (varnames){ cat("Data variables:\n") print(names(x$phase1$full$variables)) } invisible(x) } twophasevar<-function(x,design){ d1 <- design$phase1$sample if (NROW(x)==length(design$usu)){ ph2pr<-design$usu if (any(design$prob==Inf)) x[is.na(x)]<-0 }else{ x[is.na(x)]<-0 ph2pr<-rep(1,NROW(x)) ph2pr[design$subset]<-design$usu } ## compute phase 1 variance vphase1 <- svyrecvar.phase1(x,d1$cluster, d1$strata, d1$fpc, postStrata=d1$postStrata, ph2prob=ph2pr, nPSUfull=design$phase1$full$fpc$sampsize[design$subset,,drop=FALSE]) ## is phase 2 sampling whole phase 1 units or subsampling within units? if (design$samescale) u2<-x else u2<-x*sqrt(d1$prob) u2[is.na(u2)]<-0 ## compute phase 2 variance vphase2 <- with(design, svyrecvar(u2, phase2$cluster, phase2$strata, phase2$fpc, postStrata=phase2$postStrata)) rval <- vphase1+vphase2 attr(rval, "phases")<-list(phase1=vphase1, phase2=vphase2) rval } svyrecvar.phase1<-function(x, clusters, stratas, fpcs, postStrata=NULL, lonely.psu=getOption("survey.lonely.psu"), one.stage=getOption("survey.ultimate.cluster"), ph2prob, nPSUfull){ x<-as.matrix(x) cal<-NULL ## FIXME: calibration of phase 1 not yet implemented. ## Remove post-stratum means, which may cut across clusters ## Also center the data using any "g-calibration" models if(!is.null(postStrata)){ stop("calibration of phase 1 not yet implemented") for (psvar in postStrata){ if (inherits(psvar, "greg_calibration")) { if (psvar$stage==0){ ## G-calibration at population level x<-qr.resid(psvar$qr,x/psvar$w)*psvar$w } else { ## G-calibration within clusters cal<-c(cal, list(psvar)) } } else { ## ordinary post-stratification psw<-attr(psvar, "weights") postStrata<-as.factor(psvar) psmeans<-rowsum(x/psw,psvar,reorder=TRUE)/as.vector(table(factor(psvar))) x<- x-psmeans[match(psvar,sort(unique(psvar))),]*psw } } } multistage.phase1(x, clusters,stratas,fpcs$sampsize, fpcs$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage,stage=1,cal=cal,ph2prob=ph2prob, nPSUfull=nPSUfull) } multistage.phase1<-function(x, clusters, stratas, nPSUs, fpcs, lonely.psu=getOption("survey.lonely.psu"), one.stage=FALSE,stage,cal,ph2prob, nPSUfull){ n<-NROW(x) v <- onestage.phase1(x,stratas[,1], clusters[,1], nPSUs[,1], fpcs[,1], lonely.psu=lonely.psu,stage=stage,cal=cal, ph2prob=ph2prob, nPSUfull=nPSUfull[,1]) if (one.stage!=TRUE && !is.null(fpcs) && NCOL(clusters)>1) { v.sub<-by(1:n, list(as.numeric(clusters[,1])), function(index){ ## residuals for G-calibration using population information ## only on clusters at this stage. for(cali in cal){ if (cali$stage != stage) next j<-match(clusters[index,1],cali$index) if (length(unique(j))!=1) stop("Internal problem in g-calibration data: stage",stage, ", cluster", j) j<-j[[1]] x[index,]<-qr.resid(cali$qr[[j]], x[index,,drop=FALSE]/cali$w[[j]])*cali$w[[j]] } multistage.phase1(x[index,,drop=FALSE], clusters[index,-1,drop=FALSE], stratas[index,-1,drop=FALSE], nPSUs[index,-1,drop=FALSE], fpcs[index,-1,drop=FALSE], lonely.psu=lonely.psu,one.stage=one.stage-1, stage=stage+1,cal=cal,ph2prob=ph2prob[index], nPSUfull=nPSUfull[index,-1,drop=FALSE])*nPSUfull[index[1],1]/fpcs[index[1],1] }) for(i in 1:length(v.sub)) v<-v+v.sub[[i]] } v } onestrat.phase1<-function(x,cluster,nPSU,fpc, lonely.psu,stratum=NULL, stage=1,cal,ph2prob, nPSUfull){ x<-rowsum(x, cluster) ph2prob<-ph2prob[!duplicated(cluster)] nsubset<-nrow(x) if (nsubset1 || (nPSU>1 && !getOption("survey.adjust.domain.lonely"))) x<-sweep(x, 2, xcenter, "-") if (nPSU>1) scale<-f*nPSUfull/(nPSUfull-1) else scale<-f if (nsubset==1 && nPSU>1){ warning("Stratum (",stratum,") has only one PSU at stage ",stage) if (lonely.psu=="average" && getOption("survey.adjust.domain.lonely")) scale<-NA } if (nPSU>1){ return(crossprod(x/sqrt(ph2prob))*scale) } else if (f<0.0000001) ## certainty PSU return(0*crossprod(x/sqrt(ph2prob))) else { rval<-switch(lonely.psu, certainty=scale*crossprod(x/sqrt(ph2prob)), remove=scale*crossprod(x/sqrt(ph2prob)), adjust=scale*crossprod(x/sqrt(ph2prob)), average=NA*crossprod(x/sqrt(ph2prob)), fail= stop("Stratum (",stratum,") has only one PSU at stage ",stage), stop("Can't handle lonely.psu=",lonely.psu) ) rval } } onestage.phase1<-function(x, strata, clusters, nPSU, fpc, lonely.psu=getOption("survey.lonely.psu"),stage=0, cal,ph2prob, nPSUfull){ stratvars<-tapply(1:NROW(x), list(factor(strata)), function(index){ onestrat.phase1(x[index,,drop=FALSE], clusters[index], nPSU[index][1], fpc[index][1], lonely.psu=lonely.psu,stratum=strata[index][1], stage=stage,cal=cal, ph2prob=ph2prob[index], nPSUfull=nPSUfull[index][1]) }) p<-NCOL(x) nstrat<-length(unique(strata)) nokstrat<-sum(sapply(stratvars,function(m) !any(is.na(m)))) apply(array(unlist(stratvars),c(p,p,length(stratvars))),1:2,sum,na.rm=TRUE)*nstrat/nokstrat } svytotal.twophase<-function(x,design, na.rm=FALSE, deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$phase1$sample$variables, na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if(length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } N<-sum(1/design$prob) total <- colSums(x/as.vector(design$prob),na.rm=na.rm) class(total)<-"svystat" attr(total, "var")<-v<-twophasevar(x/design$prob,design) attr(total,"statistic")<-"total" if (is.character(deff) || deff){ nobs<-NROW(design$cluster) if (deff=="replace") vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design)^2)*(N-nobs)/N else vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design)^2) attr(total, "deff")<-v/vsrs } return(total) } svymean.twophase<-function(x,design, na.rm=FALSE,deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$phase1$sample$variables ,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if(length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } pweights<-1/design$prob psum<-sum(pweights) average<-colSums(x*pweights/psum) x<-sweep(x,2,average) v<-twophasevar(x*pweights/psum,design) attr(average,"var")<-v attr(average,"statistic")<-"mean" class(average)<-"svystat" if (is.character(deff) || deff){ nobs<-NROW(design$cluster) if(deff=="replace"){ vsrs<-svyvar(x,design,na.rm=na.rm)/(nobs) } else { if(psumNCOL(design$cluster)) stop("This design does not have stage",stage) if (!is.null(aggregate.stage)){ stop("aggregate= not implemented for calibration within clusters") } if (!all(length(population[[1]])==sapply(population,length))) stop("Population totals are not all the same length") clusters<-unique(design$cluster[,stage]) nc<-length(clusters) caldata<-list(qr=vector("list",nc), w=vector("list",nc), stage=stage,index=as.character(clusters)) if(sparse){ mm<-sparse.model.matrix(formula, model.frame(formula, model.frame(design))) }else{ mm<-model.matrix(formula, model.frame(formula, model.frame(design))) } if (is.null(lambda)){ sigma2<-rep(1,nrow(mm)) }else if(length(lambda) == nrow(mm)){ # for the heteroskedasticity parameter sigma2<-drop(lambda) }else{ sigma2<-drop(mm%*%lambda) # to keep the same functionality when variance = 1 } if(NCOL(mm)!=length(population[[1]])) stop("Population and sample totals are not the same length.") if (any(colnames(mm)!=names(population[[1]]))) warning("Sample and population totals have different names.") stageweights<-1/apply(design$allprob[,1:stage,drop=FALSE],1,prod) if (any(duplicated(design$cluster[!duplicated(stageweights),stage]))) stop("Weights at stage", stage, "vary within sampling units") cwhalf<-sqrt(weights(design)/stageweights) dwhalf<-sqrt(weights(design)) tqr<-qr(mm) ## not needed ## if (is.null(lambda) && !all(abs(qr.resid(tqr,sigma2)) <1e-3)) ## stop("Calibration models with constant variance must have an intercept") for (i in 1:length(clusters)){ cluster<-clusters[[i]] these<-which(cluster == as.character(design$cluster[,stage])) mmi<-mm[these,,drop=FALSE] sample.total<-colSums(mmi*cwhalf[these]*cwhalf[these]) if(any(sample.total==0)){ ## drop columsn where all sample and population are zero zz<-(population[[i]]==0) & (apply(mmi,2,function(x) all(x==0))) mmi<-mmi[,!zz,drop=FALSE] population[[i]]<-population[[i]][!zz] sample.total<-sample.total[!zz] } tqr<-qr(mmi*cwhalf[these]/sqrt(sigma2[these])) Tmat<-crossprod(mmi*cwhalf[these]/sqrt(sigma2[these])) tT<-solve(Tmat,population[[i]]-sample.total) g<-drop(1+mmi%*%tT/sigma2[these]) design$prob[these]<-design$prob[these]/g caldata$qr[[i]]<-tqr caldata$w[[i]]<-g*stageweights[these]*sqrt(sigma2[these])*cwhalf[these]^2 } } class(caldata)<-"greg_calibration" design$postStrata<-c(design$postStrata, list(caldata)) design$call<-sys.call(-1) design } regcalibrate.svyrep.design<-function(design, formula, population,compress=NA,lambda=NULL, aggregate.index=NULL,sparse=FALSE,...){ mf<-model.frame(formula, design$variables) if(sparse){ mm<-sparse.model.matrix(formula, mf) }else{ mm<-model.matrix(formula, mf) } ww<-design$pweights if (is.null(lambda)){ sigma2<-rep(1,nrow(mm)) }else if(length(lambda) == nrow(mm)){ # for the heteroskedasticity parameter sigma2<-drop(lambda) }else{ sigma2<-drop(mm%*%lambda) # to keep the same functionality when variance = 1 } repwt<-as.matrix(design$repweights) if (!design$combined.weights) repwt<-repwt*design$pweights if (inherits(aggregate.index,"formula")){ if (length(aggregate.index)!=2) stop("aggregate.index must be a one-sided formula") aggregate.index<-model.frame(aggregate.index, design$variables) if (NCOL(aggregate.index)>1) stop("aggregate.index must specify a single variable") aggregate.index<-aggregate.index[[1]] } if (!is.null(aggregate.index)){ if (sqrt(max(ave(ww,aggregate.index,FUN=var),na.rm=TRUE))>1e-2*mean(ww)) warning("Sampling weights are not constant within clusters defined by aggregate.index") mm<-apply(mm,2,function(mx) ave(mx,aggregate.index)) ww<-ave(ww,aggregate.index) sigma2<-ave(sigma2,aggregate.index) repwt<-apply(repwt,2,function(wx) ave(wx, aggregate.index)) } whalf<-sqrt(ww) sample.total<-colSums(mm*ww) if(any(sample.total==0)){ ## drop columsn where all sample and population are zero zz<-(population==0) & (apply(mm,2,function(x) all(x==0))) mm<-mm[,!zz] population<-population[!zz] sample.total<-sample.total[!zz] } if (length(sample.total)!=length(population)) stop("Population and sample totals are not the same length.") if (!is.null(names(population)) && any(names(sample.total)!=names(population))) warning("Sample and population totals have different names.") Tmat<-crossprod(mm*whalf/sqrt(sigma2)) tT<-solve(Tmat,population-sample.total) gtotal<-drop(1+mm%*%tT/sigma2) design$pweights<-design$pweights*gtotal for(i in 1:NCOL(repwt)){ whalf<-sqrt(repwt[,i]) Tmat<-crossprod(mm*whalf/sqrt(sigma2)) sample.total<-colSums(mm*whalf*whalf) g<-drop(1+mm%*%solve(Tmat,population-sample.total)/sigma2) repwt[,i]<-as.vector(design$repweights[,i])*g } if (!design$combined.weights) repwt<-repwt/gtotal if (compress || (is.na(compress && inherits(design$repweights,"repweights_compressed")))){ repwt<-compressWeights(repwt) } design$repweights<-repwt design$call<-sys.call(-1) design$degf<-NULL design$degf<-degf(design) design } survey/R/ftable.svystat.R0000755000176200001440000000372512242746122015120 0ustar liggesusers ftable.svystat<-function(x, rownames=NULL, ...){ m<-cbind(coef(x),SE(x)) if (is.null(rownames)) return(as.table(m)) statname<-if (is.list(x)) attr(x[[1]],"statistic") else attr(x,"statistic") deff<-attr(x,"deff") has.deff<-!is.null(deff) if (has.deff) m<-cbind(m,diag(deff)) rowdim<-sapply(rownames,length) if (has.deff){ mm<-array(m,dim=c(rowdim,NCOL(m)), dimnames=c(as.list(rownames), list(c(statname,"SE","Deff")))) ftable(mm,row.vars=length(rowdim)+0:1) } else { mm<-array(m,dim=c(rowdim,NCOL(m)), dimnames=c(as.list(rownames), list(c(statname,"SE")))) ftable(mm,row.vars=length(rowdim)+0:1) } } ftable.svrepstat<-ftable.svystat ftable.svyby <- function (x, ...) { info <- attr(x, "svyby") margins <- info$margins dimnames <- lapply(x[, margins, drop = FALSE], levels) dims <- sapply(dimnames, length) dims <- c(dims, variable = info$nstats) senames<-c(se="SE",cv="cv",cvpct="cv%",var="Var")[info$vartype] if (info$vars || info$deffs) { dims <- c(dims, 1 + info$vars + info$deffs) dimnames <- c(dimnames, list(sub("^statistic\\.(.*)$", "\\1", info$variables)), list(c(info$statistic, if (info$vars) senames, if (info$deffs) "DEff"))) } else if (info$nstats == 1) { dimnames <- c(dimnames, list(info$statistic)) } else { dimnames <- c(dimnames, list(info$variables)) } ## fix by Sergio Calva for ordering bug. x <- x[do.call("order",x[,rev(margins),drop = FALSE]),] rval <- array(as.matrix(x[, -margins, drop = FALSE]), dim = dims, dimnames = dimnames) ftable(rval, row.vars = c(1, length(dim(rval)))) } if(FALSE){ odfTable.svystat <- function(x,...) odfTable(as.data.frame(x),...) odfTable.table <- odfTable.matrix } survey/R/svykm.R0000644000176200001440000002515613012162177013315 0ustar liggesusers svykm<-function(formula, design, se=FALSE, ...) UseMethod("svykm",design) svykm.survey.design<-function(formula, design,se=FALSE, ...){ if (!inherits(formula,"formula")) stop("need a formula") if (length(formula)!=3) stop("need a two-sided formula") mf<-model.frame(formula, model.frame(design), na.action=na.pass) mf<-na.omit(mf) drop<-attr(mf,"na.action") if (!is.null(drop)) design<-design[-drop,] y<-model.response(mf) if (!is.Surv(y) || attr(y,"type")!="right") stop("response must be a right-censored Surv object") if (ncol(mf)==1) { if (se) s<-km.stderr(y,design) else s<-svykm.fit(y,weights(design)) } else { x<-mf[,-1] if (NCOL(x)>1) groups<-do.call(interaction,x) else groups<-as.factor(x) if (se){ lhs<-formula lhs[[3]]<-1 s<-lapply(levels(groups), function(g) svykm(lhs, subset(design,groups==g),se=TRUE)) }else{ s<-lapply(levels(groups), function(g) svykm.fit(y[groups==g],weights(design)[groups==g])) } names(s)<-levels(groups) class(s)<-"svykmlist" } call<-match.call() call[[1]]<-as.name(.Generic) attr(s,"call")<-call attr(s, "formula")<-formula attr(s, "na.action")<-drop return(s) } svykm.svyrep.design<-function(formula, design,se=FALSE, ...){ if (!inherits(formula,"formula")) stop("need a formula") if (length(formula)!=3) stop("need a two-sided formula") mf<-model.frame(formula, model.frame(design), na.action=na.pass) mf<-na.omit(mf) drop<-attr(mf,"na.action") if (!is.null(drop)) design<-design[-drop,] y<-model.response(mf) if (!is.Surv(y) || attr(y,"type")!="right") stop("response must be a right-censored Surv object") if (ncol(mf)==1) { if (se) stop("SE not yet available") else s<-svykm.fit(y,weights(design,"sampling")) } else { x<-mf[,-1] if (NCOL(x)>1) groups<-do.call(interaction,x) else groups<-as.factor(x) if (se){ lhs<-formula lhs[[3]]<-1 s<-lapply(levels(groups), function(g) svykm(lhs, subset(design,groups==g),se=TRUE)) }else{ s<-lapply(levels(groups), function(g) svykm.fit(y[groups==g],weights(design)[groups==g])) } names(s)<-levels(groups) class(s)<-"svykmlist" } call<-match.call() call[[1]]<-as.name(.Generic) attr(s,"call")<-call attr(s, "formula")<-formula attr(s, "na.action")<-drop return(s) } svykm.fit<-function(y,w){ t<-y[,"time"] s<-y[,"status"] nn<-rowsum(cbind(s,1)*w,t) tt<-sort(unique(t)) N<-c(sum(w),sum(w),sum(w)-cumsum(nn[-nrow(nn),2])) d<-c(0,nn[,1]) surv<-pmax(0,cumprod(1-d/N)) rval<-list(time=c(0,tt), surv=surv) class(rval)<-"svykm" rval } km.stderr<-function(survobj,design){ time<-survobj[,'time'] status<-survobj[,'status'] ## Brute force and ignorance: compute Y and dN as totals, use delta-method keep<-which((status==1) & (weights(design)!=0)) y<-outer(time,time[keep],">=") dN<-diag(status)[,keep] oo<-order(time[keep], -status[keep]) okeep<-keep[oo] ntimes<-length(oo) ttime<-time[okeep] sstatus<-status[okeep] totals<-svytotal(cbind(dN[,oo],y[,oo]), design) rm(dN) y<-coef(totals)[-(1:ntimes)] dNbar<-coef(totals)[1:ntimes] h<-cumsum(dNbar/y) dVn<- vcov(totals)[(1:ntimes),(1:ntimes)]/outer(y,y) dVy <- vcov(totals)[-(1:ntimes),-(1:ntimes)]*outer(dNbar/y^2,dNbar/y^2) dCVny<- -vcov(totals)[(1:ntimes),-(1:ntimes)]*outer(1/y,dNbar/y^2) dV<-dVn+dVy+dCVny+t(dCVny) V<-numeric(ntimes) V[1]<-dV[1,1] for(i in 2:ntimes) V[i]<-V[i-1]+sum(dV[1:(i-1),i])+sum(dV[i,1:i]) rval<-list(time=ttime,surv=exp(-h),varlog=V) class(rval)<-"svykm" rval } plot.svykm<-function(x,xlab="time",ylab="Proportion surviving",ylim=c(0,1),ci=NULL,lty=1,...){ if (is.null(ci)) ci<-!is.null(x$varlog) plot(x$time,x$surv,xlab=xlab,ylab=ylab, type="s",ylim=ylim,lty=lty,...) if (ci){ if (is.null(x$varlog)) warning("No standard errors available in object") else{ lines(x$time,exp(log(x$surv)-1.96*sqrt(x$varlog)),lty=2,type="s",...) lines(x$time,pmin(1,exp(log(x$surv)+1.96*sqrt(x$varlog))),lty=2,type="s",...) } } invisible(x) } lines.svykm<-function(x,xlab="time",type="s",ci=FALSE,lty=1,...){ lines(x$time,x$surv, type="s",lty=lty,...) if (ci){ if (is.null(x$varlog)) warning("no standard errors available in object") else { lines(x$time,exp(log(x$surv)-1.96*sqrt(x$varlog)),lty=2,type="s",...) lines(x$time,pmin(1,exp(log(x$surv)+1.96*sqrt(x$varlog))),lty=2,type="s",...) } } invisible(x) } plot.svykmlist<-function(x, pars=NULL, ci=FALSE,...){ if (!is.null(pars)) pars<-as.data.frame(pars,stringsAsFactors=FALSE) if(is.null(pars)) plot(x[[1]],ci=ci,...) else do.call(plot,c(list(x[[1]]),pars[1,,drop=FALSE],ci=ci,...)) m<-length(x) if(m==1) return() for(i in 2:m){ if(is.null(pars)) lines(x[[i]],ci=ci,...) else do.call(lines,c(list(x[[i]]),pars[i,,drop=FALSE],ci=ci,...)) } invisible(x) } print.svykm<-function(x, digits=3,...,header=TRUE){ if (header) {cat("Weighted survival curve: ") print(attr(x,"call"))} suppressWarnings({iq1<-min(which(x$surv<=0.75)) iq2<-min(which(x$surv<=0.5)) iq3<-min(which(x$surv<=0.25))}) if (is.finite(iq1)) q1<-x$time[iq1] else q1<-Inf if (is.finite(iq2)) q2<-x$time[iq2] else q2<-Inf if (is.finite(iq3)) q3<-x$time[iq3] else q3<-Inf cat("Q1 =",round(q1,digits)," median =",round(q2,digits)," Q3 =",round(q3,digits),"\n") invisible(x) } print.svykmlist<-function(x, digits=3,...){ cat("Weighted survival curves:\n") print(attr(x,"call")) for(i in 1:length(x)){ cat(names(x)[i],": ") print(x[[i]],digits=digits,header=FALSE) } invisible(x) } quantile.svykm<-function(x, probs=c(0.75,0.5,0.25),ci=FALSE,level=0.95,...){ iq<-sapply(probs, function(p) suppressWarnings(min(which(x$surv<=p)))) qq<-sapply(iq, function(i) if (is.finite(i)) x$time[i] else Inf) names(qq)<-probs if (ci){ if(is.null(x$varlog)){ warning("no confidence interval available.") } else { halfalpha<-(1-level)/2 z<-qnorm(halfalpha, lower.tail=FALSE) su<-exp(log(x$surv)+z*sqrt(x$varlog)) iu<-sapply(probs, function(p) suppressWarnings(min(which(su<=p)))) qu<-sapply(iu, function(i) if (is.finite(i)) x$time[i] else Inf) sl<-exp(log(x$surv)-z*sqrt(x$varlog)) il<-sapply(probs, function(p) suppressWarnings(min(which(sl<=p)))) ql<-sapply(il, function(i) if (is.finite(i)) x$time[i] else Inf) ci<-cbind(ql,qu) rownames(ci)<-probs colnames(ci)<-format(c(halfalpha,1-halfalpha),3) attr(qq,"ci")<-ci } } qq } confint.svykm<-function(object, parm, level=0.95,...){ if (is.null(object$varlog)) stop("no standard errors in object") parm<-as.numeric(parm) idx<-sapply(parm, function(t) max(which(object$time<=t))) z<-qnorm((1-level)/2) ci<-exp(log(object$surv[idx])+outer(sqrt(object$varlog[idx]),c(z,-z))) ci[,2]<-pmin(ci[,2],1) rownames(ci)<-parm colnames(ci)<-format( c((1-level)/2, 1-(1-level)/2),3) ci } predict.svycoxph<-function(object, newdata, se=FALSE, type=c("lp", "risk", "expected", "terms","curve"), ...){ type<-match.arg(type) if(type!="curve") return(NextMethod()) design<-object$survey.design response<-object$y if (!is.null(attr(terms(object), "specials")$strata)) stop("Stratified models are not supported yet") if (attr(response,"type")=="counting"){ time<-object$y[,2] status<-object$y[,'status'] entry<-object$y[,1] } else if (attr(response,'type')=="right"){ time<-object$y[,"time"] status<-object$y[,"status"] entry<-rep(-Inf,length(time)) } else stop("unsupported survival type") if(is.null(object$na.action)){ design<-object$survey.design } else { design<-object$survey.design[-object$na.action,] } ff<-delete.response(terms(formula(object))) zmf<-model.frame(ff, newdata) z.pred<-model.matrix(ff, zmf)[,-1,drop=FALSE] ## ## The simple case first ## risk<-getS3method("predict","coxph")(object,type="risk",se.fit=FALSE) if(se==FALSE){ tt<-c(time,entry) ss<-c(status,rep(0,length(entry))) ee<-c(rep(1,length(status)),rep(-1,length(entry))) oo<-order(tt,-ee,-ss) dN<-ss[oo] w<-rep(weights(design),2)[oo] risks<-rep(risk,2) Y<-rev(cumsum(rev(risks[oo]*w*ee[oo]))) keep<-dN>0 s<-vector("list",nrow(z.pred)) beta<-coef(object) h0<- cumsum( (w*dN/Y)[keep] ) for(i in 1:nrow(z.pred)){ zi<-z.pred[i,]-object$means s[[i]]<-list(time=time[oo][keep], surv=exp(-h0 * exp(sum(beta*zi))), call=sys.call()) class(s[[i]])<-c("svykmcox","svykm") } names(s)<-rownames(newdata) return(s) } ## ## The hard case: curves with standard errors ## if(!inherits(design,"survey.design")) stop("replicate-weight designs not supported yet") keep<-which((status==1) & (weights(design)!=0)) y<-outer(time,time[keep],">=")*risk*outer(entry,time[keep],"<=") dN<-diag(status)[,keep] oo<-order(time[keep], -status[keep]) okeep<-keep[oo] ntimes<-length(oo) ttime<-time[okeep] sstatus<-status[okeep] totals<-svytotal(cbind(dN[,oo],y[,oo]), design) rm(dN) y<-coef(totals)[-(1:ntimes)] dNbar<-coef(totals)[1:ntimes] vtotals<-vcov(totals) rm(totals) h<-cumsum(dNbar/y) dVn<- vtotals[(1:ntimes),(1:ntimes)]/outer(y,y) dVy <- vtotals[-(1:ntimes),-(1:ntimes)]*outer(dNbar/y^2,dNbar/y^2) dCVny<- -vtotals[(1:ntimes),-(1:ntimes)]*outer(1/y,dNbar/y^2) dV<-dVn+dVy+dCVny+t(dCVny) det<-suppressWarnings(coxph.detail(object)) ze<-sweep(as.matrix(det$means)[rep(1:length(det$time), det$nevent),,drop=FALSE], 2, object$means) rm(det) dH<-dNbar/y h.ze<-dH*ze varbeta<-vcov(object) Vh<-numeric(ntimes) Vh[1]<-dV[1,1] for(i in 2:ntimes) Vh[i]<-Vh[i-1]+sum(dV[1:(i-1),i])+sum(dV[i,1:i]) dVb<-numeric(ntimes) for(i in 1:ntimes) dVb[i]<-crossprod(h.ze[i,],varbeta%*%(h.ze[i,])) Vb<-cumsum(dVb) dCV<-matrix(nrow=ntimes,ncol=NCOL(ze)) for(i in 1:ntimes) dCV[i,] <- -varbeta%*%(h.ze[i,]) CV<-apply(dCV,2,cumsum) V0<-Vh+Vb s0<-exp(-h) s<-vector("list",nrow(z.pred)) for(i in 1:nrow(z.pred)){ zi<-z.pred[i,]-object$means riski<-exp(sum(zi*coef(object))) Vz<-drop(crossprod(zi,varbeta%*%zi))*riski^2*h^2 CVz<-colSums(t(dCV)*zi)*riski^2*h V<-V0*riski^2+Vz+CVz*2 s[[i]]<-list(time=ttime,surv=exp(-h*riski), varlog=V) class(s[[i]])<-c("svykm.cox","svykm") } names(s)<-rownames(newdata) scall<-sys.call() scall[[1]]<-as.name(.Generic) attr(s,"call")<-scall class(s)<-c("svykmlist.cox","svykmlist") return(s) } survey/R/svyranktest.R0000644000176200001440000000677512370572040014547 0ustar liggesusers svyranktest<-function(formula,design,test=c('wilcoxon','vanderWaerden','median',"KruskalWallis"),...){ UseMethod("svyranktest", design) } svyranktest.survey.design<-svyranktest.svyrep.design<-function(formula, design, test=c('wilcoxon','vanderWaerden','median',"KruskalWallis"),...) { mf<-model.frame(formula,model.frame(design),na.action=na.omit) if (!is.null(naa<-attr(mf,"na.action"))){ design<-design[-naa,] mf<-model.frame(formula,model.frame(design),na.action=na.fail) } y<-mf[,1] g<-mf[,2] if (length(unique(g))!=2) { return(multiranktest(formula,design, test,...)) } if (is.character(test)) { test<-match.arg(test) testf<-switch(test, wilcoxon=,KruskalWallis=function(r,N) r/N, vanderWaerden=function(r,N) qnorm(r/N), median=function(r,N) as.numeric(r>N/2)) } else{ testf<-test } if (identical(test,"wilcoxon")) test<-"KruskalWallis" ii<-order(y) n<-length(y) rankhat<-numeric(n) w<-weights(design,"sampling") N<-sum(w) rankhat[ii]<-ave(cumsum(w[ii])-w[ii]/2,factor(y[ii])) rankscore<-testf(rankhat,N) m <- lm(rankscore~g, weights=w) delta<-coef(m)[2] xmat<-model.matrix(m) infn<- (xmat*(rankscore-fitted(m)))%*%summary(m)$cov.unscaled tot.infn<-svytotal(infn,design) if (is.character(test)) method<-paste("Design-based",test,"test") else if (!is.null(attr(test,"name"))) method<-paste("Design-based",attr(test,"name"),"test") else method<-"Design-based rank test" rval <- list(statistic = coef(m)[2]/SE(tot.infn)[2], parameter = degf(design) - 1, estimate = coef(m)[2], null.value = 0, alternative = "two.sided", method = method, data.name = deparse(formula)) rval$p.value <- 2 * pt(-abs(rval$statistic), df = rval$parameter) names(rval$statistic) <- "t" names(rval$parameter) <- "df" names(rval$estimate) <- "difference in mean rank score" names(rval$null.value) <- "difference in mean rank score" class(rval) <- "htest" rval } multiranktest<-function(formula,design,test=c('wilcoxon','vanderWaerden','median','KruskalWallis'),...){ mf<-model.frame(formula,model.frame(design),na.action=na.omit) if (!is.null(naa<-attr(mf,"na.action"))){ design<-design[-naa,] mf<-model.frame(formula,model.frame(design),na.action=na.fail) } y<-mf[,1] g<-mf[,2] if (is.character(test)) { test<-match.arg(test) testf<-switch(test, wilcoxon=,KruskalWallis=function(r,N) r/N, vanderWaerden=function(r,N) qnorm(r/N), median=function(r,N) as.numeric(r>N/2)) } else{ testf<-test } if (identical(test,"wilcoxon")) test<-"KruskalWallis" ii<-order(y) n<-length(y) rankhat<-numeric(n) w<-weights(design,"sampling") N<-sum(w) rankhat[ii]<-ave(cumsum(w[ii])-w[ii]/2,factor(y[ii])) rankscore<-testf(rankhat,N) m <- glm(rankscore~factor(g),weights=w) V<-svy.varcoef(m,design) ndf<-length(unique(g))-1 beta<-coef(m)[-1] V<-V[-1,-1] chisq<-beta%*%solve(V,beta) ddf<-degf(design)-ndf if (is.character(test)) method<-paste("Design-based",test,"test") else if (!is.null(attr(test,"name"))) method<-paste("Design-based",attr(test,"name"),"test") else method<-"Design-based rank test" names(chisq)<-"Chisq" names(ndf)<-"df" rval<-list(parameter=chisq,statistic=ndf,ddf=ddf,p.value=pf(chisq/ndf,ndf,ddf,lower.tail=FALSE), method=method, data.name = deparse(formula)) class(rval)<-"htest" rval } survey/R/margins.R0000644000176200001440000001436213115662425013606 0ustar liggesusers marginpred<-function(model, adjustfor, predictat, ...) UseMethod("marginpred", model) ## ## Basic strategy: calibrate on ~model*adjustfor, to set interactions to zero ## marginpred.svycoxph<-function(model, adjustfor, predictat, se=FALSE, ...){ if(NROW(predictat)==0) return(NULL) design<-model$survey.design ##if (inherits(design,"twophase")) stop("Two-phase designs not yet supported") if (!is.null(model$na.action)) design<-design[-model$na.action,] modelformula<-formula(model) calformula<-eval(bquote( ~(.(modelformula[[3]]))*(.(adjustfor)))) adjmf<-model.frame(terms(adjustfor), model.frame(design)) adjmm<-model.matrix(terms(adjustfor), adjmf) modelmm<-model.matrix(model)[,-1,drop=FALSE] modelmm <- sweep(modelmm,2,model$means) if (qr(modelmm)$rank0 idx<-match(id[subset,stage],id[subset,stage][uid]) this_stage<-Dcheck_subset(strata[uid,stage],insubset,probs[uid,stage],withreplacement)[idx,idx] rval<- twophaseDcheck(rval, this_stage) } rval } twophaseDcheck<-function(Dcheck1,Dcheck2){ as(-Dcheck1*Dcheck2+Dcheck1+Dcheck2,"sparseMatrix") } make_covmat<-function(design1,design2,subset){ withreplacement<-is.null(design1$fpc$popsize) phase1<-Dcheck_multi_subset(design1$cluster, design1$strata, subset, design1$allprob, withreplacement) phase2<-Dcheck_multi(design2$cluster, design2$strata, design2$allprob) dcheck<-twophaseDcheck(phase1,phase2) list(phase1=phase1,phase2=phase2,full=dcheck) } ## ## Based on twophase(), so it computes some stuff that is no longer necessary. ## Will be pruned in the future. ## twophase2<-function(id,strata=NULL, probs=NULL, fpc=NULL, subset, data){ data<-detibble(data) d1<-svydesign(ids=id[[1]],strata=strata[[1]],weights=NULL, probs=probs[[1]],fpc=fpc[[1]],data=data) if(inherits(subset,"formula")) subset<-eval.parent(model.frame(subset,data=data,na.action=na.pass))[[1]] if(!is.logical(subset) && sort(unique(subset))==c(0,1)) subset<-as.logical(subset) if (any(is.na(subset))) stop("missing values in 'subset'") d1s<-svydesign(ids=id[[1]],strata=strata[[1]],weights=NULL, probs=probs[[1]],fpc=fpc[[1]],data=data[subset,]) d1s$prob<-d1$prob[subset] d1s$allprob<-d1$allprob[subset,,drop=FALSE] ## work out phase-two fpc if (is.null(fpc[[2]])){ complete.vars<-names(data)[apply(data, 2, function(v) all(!is.na(v)))] if (all(c(all.vars(id[[2]]), all.vars(strata[[2]])) %in% complete.vars)){ dfpc<-svydesign(ids=id[[2]], strata=strata[[2]], data=data, probs=NULL) popsize<-mapply(function(s,i) ave(!duplicated(i),s,FUN=sum), dfpc$strata, dfpc$cluster) rm(dfpc) } else { warning("Second-stage fpc not specified and not computable") popsize<-NULL } } else popsize<-NULL d2<-svydesign(ids=id[[2]], strata=strata[[2]], probs=probs[[2]], weights=NULL, fpc=fpc[[2]], data=data[subset,]) ## ugly hack to get nicer labels if(!is.null(fpc[[2]])){ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), fpc=.(fpc[[2]]))) } else{ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), fpc=`*phase1*`)) } for(i in names(d2call)[-1]) d2call[[i]]<-d2call[[i]] d2$call<-d2call d1call<-bquote(svydesign(ids=.(id[[1]]), strata=.(strata[[1]]), probs=.(probs[[1]]), fpc=.(fpc[[1]]))) for(i in names(d1call)[-1]) d1call[[i]]<-d1call[[i]] d1$call<-d1call ## Add phase 2 fpc and probs if they were computed rather than specified. if (!is.null(popsize)) d2$fpc<-as.fpc(popsize[subset,,drop=FALSE],d2$strata,d2$cluster) if(is.null(probs[[2]]) && !is.null(d2$fpc$popsize)){ d2$allprob<-1/weights(d2$fpc,final=FALSE) d2$prob<-apply(as.data.frame(d2$allprob),1,prod) } d2$variables<-NULL deltacheck<-make_covmat(d1,d2, subset) rval<-list(phase1=list(full=d1,sample=d1s), phase2=d2, subset=subset, dcheck=deltacheck) rval$prob<-rval$phase1$sample$prob ## Are phase 2 PSUs the same as Phase 1 USUs, or smaller? rval$samescale<- !any(duplicated(d1s$cluster[,NCOL(d1s$cluster)][!duplicated(d2$cluster[,1])])) ## For each phase 1 sampling unit, need probability of being represented ## at phase 2. nunique<-function(x) sum(!duplicated(x)) m<-NCOL(rval$phase1$sample$cluster) if(d2$has.strata){ if (inherits(strata[[2]],"formula")) sa<-eval(attr(terms(strata[[2]]),"variables")[[2]],d1$variables) else sa<-d1$strata[,1] cm<-rval$phase1$full$cluster[,m] if (nunique(sa)!=nunique(sa[subset])) stop("Some phase-2 strata have zero sampling fraction") rval$usu<-ave(cm[subset],sa[subset],FUN=nunique)/ave(cm,sa,FUN=nunique)[subset] } else { rval$usu<-drop(with(rval$phase1$sample,ave(cluster[,m], strata[,m], FUN=nunique))/rval$phase1$full$fpc$sampsize[rval$subset]) } if (length(rval$phase1$sample$prob)==length(d2$prob)) rval$prob<-rval$phase1$sample$prob*d2$prob else{ rval$prob<-rep(Inf,length(rval$phase1$sample$prob)) rval$prob[subset]<-rval$prob[subset]*d2$prob } rval$call<-sys.call() class(rval) <- c("twophase2","survey.design") rval } print.twophase2<-function(x,...){ cat("Two-phase sparse-matrix design:\n ") print(x$call) cat("Phase 1:\n") print(x$phase1$full) cat("Phase 2:\n") print(x$phase2) invisible(x) } summary.twophase2<-function(object,...){ class(object)<-"summary.twophase2" object } print.summary.twophase2<-function(x,...,varnames=TRUE){ cat("Two-phase sparse-matrix design:\n ") print(x$call) cat("Phase 1:\n") print(x$phase1$full,design.summaries=TRUE,varnames=FALSE) cat("Phase 2:\n") print(x$phase2,design.summaries=TRUE, varnames=FALSE) if (varnames){ cat("Data variables:\n") print(names(x$phase1$full$variables)) } invisible(x) } twophase2var<-function(x,design){ ## calibration is allowed at phase one or phase two, ## but not for clusters within a phase postStrata2<-design$phase2$postStrata postStrata1<-design$phase1$full$postStrata if (is.null(postStrata1) && is.null(postStrata2)){ rval<-htvar.matrix(x,design$dcheck$full) ph2<-htvar.matrix(x,design$dcheck$phase2) attr(rval,"phases")<-list(phase1=rval-ph2,phase2=ph2) return(rval) } if (!is.null(postStrata1)){ ##phase 1 calibration ## x is size of phase-2 sample,need to expand to allow calibration. y<-matrix(0,ncol=ncol(x),nrow=length(design$subset)) y[design$subset,]<-x for (psvar in postStrata1){ if (inherits(psvar, "greg_calibration")) { if (psvar$stage==0){ ## G-calibration at population level y<-qr.resid(psvar$qr,y/psvar$w)*psvar$w } else { ## G-calibration within clusters stop("calibration within clusters not allowed for two-phase designs") } } else { ## ordinary post-stratification psw<-attr(psvar, "weights") postStrata<-as.factor(psvar) psmeans<-rowsum(y/psw,psvar,reorder=TRUE)/as.vector(table(factor(psvar))) y<- y-psmeans[match(psvar,sort(unique(psvar))),]*psw x1<-y[design$subset,,drop=FALSE] } } } else x1<-x phase1var<-htvar.matrix(x1,design$dcheck$full)-htvar.matrix(x1,design$dcheck$phase2) if (!is.null(postStrata2)){ ##phase 2 calibration for (psvar in postStrata2){ if (inherits(psvar, "greg_calibration")) { if (psvar$stage==0){ ## G-calibration at population level x2<-qr.resid(psvar$qr,x/psvar$w)*psvar$w } else { ## G-calibration within clusters stop("calibration within clusters not allowed for two-phase designs") } } else { ## ordinary post-stratification psw<-attr(psvar, "weights") postStrata<-as.factor(psvar) psmeans<-rowsum(x/psw,psvar,reorder=TRUE)/as.vector(table(factor(psvar))) x2<- x-psmeans[match(psvar,sort(unique(psvar))),]*psw } } } else x2<-x phase2var<-htvar.matrix(x2,design$dcheck$phase2) rval<-phase1var+phase2var attr(rval,"phases")<-list(phase1=phase1var,phase2=phase2var) rval } svytotal.twophase2<-function(x,design, na.rm=FALSE, deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$phase1$sample$variables, na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if(length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } N<-sum(1/design$prob) total <- colSums(x/as.vector(design$prob),na.rm=na.rm) class(total)<-"svystat" attr(total, "var")<-v<-twophase2var(x/design$prob,design) attr(total,"statistic")<-"total" if (is.character(deff) || deff){ nobs<-NROW(design$cluster) if (deff=="replace") vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2*(N-nobs)/N else vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2 attr(total, "deff")<-v/vsrs } return(total) } svymean.twophase2<-function(x,design, na.rm=FALSE,deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$phase1$sample$variables ,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) if (any(nas>0)) design<-design[nas==0,] x[nas>0,]<-0 } pweights<-1/design$prob psum<-sum(pweights) average<-colSums(x*pweights/psum) x<-sweep(x,2,average) v<-twophase2var(x*pweights/psum,design) attr(average,"var")<-v attr(average,"statistic")<-"mean" class(average)<-"svystat" if (is.character(deff) || deff){ nobs<-nrow(design) if(deff=="replace"){ vsrs<-svyvar(x,design,na.rm=na.rm)/(nobs) } else { if(psum1) rval<-cbind(byfactors[uniques,,drop=FALSE], rval) else rval <-cbind(byfactors[uniques,,drop=FALSE], statistic=rval) expand.index<-function(index,reps,x=FALSE){ ns<-max(index) if (x){ i<-matrix(1:(ns*reps),ncol=reps) rval<-t(i[index,]) } else{ i<-matrix(1:(ns*reps), ncol=reps, nrow=ns, byrow=TRUE) rval<- i[index,] } as.vector(rval) } if(drop.empty.groups){ if (keep.names) rownames(rval)<-paste(byfactor[uniques]) rval<-rval[order(byfactor[uniques]),] i<-expand.index(order(byfactor[uniques]),nstats) if (keep.var) covmat.mat<-covmat.mat[i,i] } else { a<-do.call("expand.grid", lapply(byfactors,function(f) levels(as.factor(f)))) a<-cbind(a,matrix(NA, ncol=nr, nrow=nrow(a))) names(a)<-names(rval) a[match(byfactor[uniques], levels(byfactor)),]<-rval rval<-a if (keep.names) rownames(rval)<-levels(byfactor) if (keep.var){ tmp<-matrix(ncol=nrow(a)*nstats,nrow=nrow(a)*nstats) i<-expand.index(match(byfactor[uniques], levels(byfactor)),nstats,TRUE) tmp[i,i]<-covmat.mat covmat.mat<-tmp } } attr(rval,"svyby")<-list(margins=1:NCOL(byfactors),nstats=nstats, vars=if(keep.var) length(vartype) else 0, deffs=deff, statistic=deparse(substitute(FUN)), variables= names(rval)[-(1:NCOL(byfactors))][1:nstats], vartype=vartype ) if (!keep.names) rownames(rval)<-1:NROW(rval) if(covmat) attr(rval,"var")<-covmat.mat if (return.replicates) attr(rval,"replicates")<-replicates attr(rval,"call")<-sys.call() class(rval)<-c("svyby","data.frame") rval } SE.svyby <-function(object,...){ aa<-attr(object,"svyby") if (!aa$vars) stop("Object does not contain variances") vartype<-attr(object,"svyby")$vartype if (pos<-match("se",vartype,0)) object[,max(aa$margins)+aa$nstats*pos+(1:aa$nstats)] else if (pos<-match("var",vartype,0)) sqrt(object[,max(aa$margins)+aa$nstats*pos+(1:aa$nstats)]) else if (pos<-match("cv",vartype,0)) object[,max(aa$margins)+aa$nstats*pos+(1:aa$nstats)]*coef(object) else if (pos<-match("cvpct",vartype,0)) object[,max(aa$margins)+aa$nstats*pos+(1:aa$nstats)]*coef(object)/100 else stop("This can't happen") } coef.svyby<-function (object, ...) { aa <- attr(object, "svyby") rval <- object[, max(aa$margins) + (1:aa$nstats)] if (is.null(dim(rval))){ names(rval) <- row.names(object) } else { rval<-as.vector(as.matrix(rval)) names(rval)<-outer(rownames(object), gsub("statistics\\.","",aa$variables), paste, sep=":") } rval } deff.svyby<-function(object,...){ aa<-attr(object,"svyby") if (!aa$deffs) stop("object does not have design effect information") object[,max(aa$margins)+aa$nstats*(1+aa$vars)+(1:aa$nstats)] } vcov.svyby<-function(object,...){ rval<-attr(object,"var") if(is.null(rval)){ warning("Only diagonal elements of vcov() available") se<-SE(object) if (is.data.frame(se)) se<-as.vector(as.matrix(se)) if(length(se)>1) rval<-diag(se^2) else rval<-as.matrix(se^2) } nms<-names(coef(object)) dimnames(rval)<-list(nms,nms) rval } confint.svyquantile<-function(object,parm=NULL,level=NULL,...){ if (!is.null(level)) stop("need to re-run svyquantile to specify level") ci<-t(matrix(as.vector(object$CIs),nrow=2)) colnames(ci)<-dimnames(object$CIs)[[1]] rownames(ci)<-outer(dimnames(object$CIs)[[2]], dimnames(object$CIs)[[3]],paste,sep="_") if (is.null(parm)) ci else ci[parm,,drop=FALSE] } survey/vignettes/0000755000176200001440000000000013122573417013624 5ustar liggesuserssurvey/vignettes/phase1.Rnw0000644000176200001440000001221312372242764015500 0ustar liggesusers\documentclass{article} \usepackage{url} \addtolength{\topmargin}{-0.5in} \addtolength{\textheight}{0.75in} \addtolength{\oddsidemargin}{-0.5in} \addtolength{\textwidth}{1in} %\VignetteIndexEntry{Obsolete formulas for two-phase variances} \usepackage{Sweave} \author{Thomas Lumley} \title{Obsolete formulas for two-phase variances} \begin{document} \maketitle This document explains the computation of variances for totals in two-phase designs before version 3.15, or using \texttt{method=''approx''}. Since version 3.15 the variances are computed directly using a sparse-matrix representation of the covariance of sampling indicators, and agree exactly with the formulas in Section 9.3 of S\"arndal, Swensson, and Wretman. Variances for other statistics are computed by the delta-method from the variance of the total of the estimating functions. The variance formulas come from conditioning on the sample selected in the first phase $$\textrm{var}[\hat T]=E\left[\textrm{var}\left[\hat T|\textrm{phase 1}\right]\right]+\textrm{var}\left[E\left[\hat T|\textrm{phase 1}\right]\right]$$ The first term is estimated by the variance of $\hat T$ considering the phase one sample as the fixed population, and so uses the same computations as any single-phase design. The second term is the variance of $\hat T$ if complete data were available for the phase-one sample. This takes a little more work. The variance computations for a stratified, clustered, multistage design involve recursively computing a within-stratum variance for the total over sampling units at the next stage. That is, we want to compute $$s^2=\frac{1}{n-1}\sum_{i=1}^n (X_i-\bar X)$$ where $X_i$ are $\pi$-expanded observations, perhaps summed over sampling units. A natural estimator of $s^2$ when only some observations are present in the phase-two sample is $$\hat s^2=\frac{1}{n-1}\sum_{i=1}^n \frac{R_i}{\pi_i} (X_i-\hat{\bar X})$$ where $\pi_i$ is the probability that $X_i$ is available and $R_i$ is the indicator that $X_i$ is available. We also need an estimator for $\bar X$, and a natural one is $$\hat{\bar X}=\frac{1}{n}\sum_{i=1}^n \frac{R_i}{\pi_i}X_i$$ This is not an unbiased estimator of $s^2$ unless $\hat{\bar X}=\bar X$, but the bias is of order $O(n_2^{-1})$ where $n_2=\sum_i R_i$ is the number of phase-two observations. If the phase-one design involves only a single stage of sampling then $X_i$ is $Y_i/p_i$, where $Y_i$ is the observed value and $p_i$ is the phase-one sampling probability. For multistage phase-one designs (not yet implemented) $X_i$ will be more complicated, but still feasible to automate. This example shows the unbiased phase-one estimate (from Takahiro Tsuchiya) and the estimate I use, in a situation where the phase two sample is quite small. First we read the data \begin{verbatim} rei<-read.table(textConnection( " id N n.a h n.ah n.h sub y 1 1 300 20 1 12 5 TRUE 1 2 2 300 20 1 12 5 TRUE 2 3 3 300 20 1 12 5 TRUE 3 4 4 300 20 1 12 5 TRUE 4 5 5 300 20 1 12 5 TRUE 5 6 6 300 20 1 12 5 FALSE NA 7 7 300 20 1 12 5 FALSE NA 8 8 300 20 1 12 5 FALSE NA 9 9 300 20 1 12 5 FALSE NA 10 10 300 20 1 12 5 FALSE NA 11 11 300 20 1 12 5 FALSE NA 12 12 300 20 1 12 5 FALSE NA 13 13 300 20 2 8 3 TRUE 6 14 14 300 20 2 8 3 TRUE 7 15 15 300 20 2 8 3 TRUE 8 16 16 300 20 2 8 3 FALSE NA 17 17 300 20 2 8 3 FALSE NA 18 18 300 20 2 8 3 FALSE NA 19 19 300 20 2 8 3 FALSE NA 20 20 300 20 2 8 3 FALSE NA "), header=TRUE) \end{verbatim} <>= rei<-read.table(textConnection( " id N n.a h n.ah n.h sub y 1 1 300 20 1 12 5 TRUE 1 2 2 300 20 1 12 5 TRUE 2 3 3 300 20 1 12 5 TRUE 3 4 4 300 20 1 12 5 TRUE 4 5 5 300 20 1 12 5 TRUE 5 6 6 300 20 1 12 5 FALSE NA 7 7 300 20 1 12 5 FALSE NA 8 8 300 20 1 12 5 FALSE NA 9 9 300 20 1 12 5 FALSE NA 10 10 300 20 1 12 5 FALSE NA 11 11 300 20 1 12 5 FALSE NA 12 12 300 20 1 12 5 FALSE NA 13 13 300 20 2 8 3 TRUE 6 14 14 300 20 2 8 3 TRUE 7 15 15 300 20 2 8 3 TRUE 8 16 16 300 20 2 8 3 FALSE NA 17 17 300 20 2 8 3 FALSE NA 18 18 300 20 2 8 3 FALSE NA 19 19 300 20 2 8 3 FALSE NA 20 20 300 20 2 8 3 FALSE NA "), header=TRUE) @ Now, construct a two-phase design object and compute the total of \verb=y= <<>>= library(survey) des.rei <- twophase(id=list(~id,~id), strata=list(NULL,~h), fpc=list(~N,NULL), subset=~sub, data=rei) tot<- svytotal(~y, des.rei) @ The unbiased estimator is given by equation 9.4.14 of S\"arndal, Swensson, \& Wretman. <<>>= rei$w.ah <- rei$n.ah / rei$n.a a.rei <- aggregate(rei, by=list(rei$h), mean, na.rm=TRUE) a.rei$S.ysh <- tapply(rei$y, rei$h, var, na.rm=TRUE) a.rei$y.u <- sum(a.rei$w.ah * a.rei$y) a.rei$f<-with(a.rei, n.a/N) a.rei$delta.h<-with(a.rei, (1/n.h)*(n.a-n.ah)/(n.a-1)) Vphase1<-with(a.rei, sum(N*N*((1-f)/n.a)*( w.ah*(1-delta.h)*S.ysh+ ((n.a)/(n.a-1))*w.ah*(y-y.u)^2))) @ The phase-two contributions (not shown) are identical. The phase-one contributions are quite close <<>>= Vphase1 attr(vcov(tot),"phases")$phase1 @ \end{document} survey/vignettes/survey.Rnw0000644000176200001440000000670612372242764015666 0ustar liggesusers\documentclass{article} \usepackage{url} %\VignetteIndexEntry{A survey analysis example} \usepackage{Sweave} \author{Thomas Lumley} \title{A survey analysis example} \begin{document} \maketitle This document provides a simple example analysis of a survey data set, a subsample from the California Academic Performance Index, an annual set of tests used to evaluate California schools. The API website, including the original data files are at \url{http://api.cde.ca.gov}. The subsample was generated as a teaching example by Academic Technology Services at UCLA and was obtained from \url{http://www.ats.ucla.edu/stat/stata/Library/svy_survey.htm}. We have a cluster sample in which 15 school districts were sampled and then all schools in each district. This is in the data frame \texttt{apiclus1}, loaded with \texttt{data(api)}. The two-stage sample is defined by the sampling unit (\texttt{dnum}) and the population size(\texttt{fpc}). Sampling weights are computed from the population sizes, but could be provided separately. <<>>= library(survey) data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) @ The \texttt{svydesign} function returns an object containing the survey data and metadata. <<>>= summary(dclus1) @ We can compute summary statistics to estimate the mean, median, and quartiles of the Academic Performance Index in the year 2000, the number of elementary, middle, and high schools in the state, the total number of students, and the proportion who took the test. Each function takes a formula object describing the variables and a survey design object containing the data. <<>>= svymean(~api00, dclus1) svyquantile(~api00, dclus1, quantile=c(0.25,0.5,0.75), ci=TRUE) svytotal(~stype, dclus1) svytotal(~enroll, dclus1) svyratio(~api.stu,~enroll, dclus1) @ The ordinary R subsetting functions \verb'[' and \texttt{subset} work correctly on these survey objects, carrying along the metadata needed for valid standard errors. Here we compute the proportion of high school students who took the test <<>>= svyratio(~api.stu, ~enroll, design=subset(dclus1, stype=="H")) @ The warnings referred to in the output occured because several school districts have only one high school sampled, making the second stage standard error estimation unreliable. Specifying a large number of variables is made easier by the \texttt{make.formula} function <<>>= vars<-names(apiclus1)[c(12:13,16:23,27:37)] svymean(make.formula(vars),dclus1,na.rm=TRUE) @ Summary statistics for subsets can also be computed with \texttt{svyby}. Here we compute the average proportion of ``English language learners'' and of students eligible for subsidized school meals for elementary, middle, and high schools <<>>= svyby(~ell+meals, ~stype, design=dclus1, svymean) @ Regression models show that these socieconomic variables predict API score and whether the school achieved its API target <<>>= regmodel <- svyglm(api00~ell+meals,design=dclus1) logitmodel <- svyglm(I(sch.wide=="Yes")~ell+meals, design=dclus1, family=quasibinomial()) summary(regmodel) summary(logitmodel) @ We can calibrate the sampling using the statewide total for the previous year's API <<>>= gclus1 <- calibrate(dclus1, formula=~api99, population=c(6194, 3914069)) @ which improves estimation of some quantities <<>>= svymean(~api00, gclus1) svyquantile(~api00, gclus1, quantile=c(0.25,0.5,0.75), ci=TRUE) svytotal(~stype, gclus1) svytotal(~enroll, gclus1) svyratio(~api.stu,~enroll, gclus1) @ \end{document} survey/vignettes/pps.Rnw0000644000176200001440000001455112372242764015130 0ustar liggesusers\documentclass{article} \usepackage{url} \addtolength{\topmargin}{-0.5in} \addtolength{\textheight}{0.75in} \addtolength{\oddsidemargin}{-0.5in} \addtolength{\textwidth}{1in} %\VignetteIndexEntry{Analysing PPS designs} \usepackage{Sweave} \author{Thomas Lumley} \title{Describing PPS designs to R} \begin{document} \maketitle The survey package has always supported PPS (ie, arbitrary unequal probability) sampling with replacement, or using the with-replacement single-stage approximation to a multistage design. No special notation is required: just specify the correct sampling weights. Version 3.11 added an another approximation for PPS sampling without replacement, and version 3.16 added more support. There are two broad classes of estimators for PPS sampling without replacement: approximations to the Horvitz--Thompson and Yates--Grundy estimators based on approximating the pairwise sampling probabilities, and estimators of H\'ajek type that attempt to recover the extra precision of a without-replacement design by conditioning on the estimated population size. \subsection*{Direct approximations} Using the standard recursive algorithm for stratified multistage sampling when one or more stages are actually PPS gives an approximation due to Brewer. This is simple to compute, always non-negative, and appears to be fairly efficient. \subsection*{Approximating $\pi_{ij}$} Given the pairwise sampling probabilities $\pi_{ij}$ we can define the weighted covariance of sampling indicators $$\check{\Delta}_{ij} = 1-\frac{\pi_i\pi_j}{\pi_{ij}}$$ and the weighted observations $$\check{x}_i=\frac{1}{\pi_i}x_i.$$ Two unbiased estimators of the variance of the total of $x$ are the Horvitz--Thompson estimator $$\hat V_{HT}= \sum_{i,j=1}^n \check{\Delta}\check{x}_i\check{x}_j$$ and the Yates--Grundy(--Sen) estimator $$\hat V_{YG}= \frac{1}{2}\sum_{i,j=1}^n \check{\Delta}(\check{x}_i-\check{x}_j)^2$$ The Yates--Grundy estimator appears to be preferred in most comparisons. It is always non-negative (up to rounding error, at least). In principle, $\pi_{ij}$ might not be available and various approximations have been proposed. The (truncated) Hartley--Rao approximation is $$\check{\Delta}_{ij}=1-\frac{n-\pi_i-\pi_j+\sum_{k=1}^N\pi^2_k/n}{n-1}$$ which requires knowing $\pi_i$ for all units in the population. The population sum can be estimated from the sample, giving a further approximation $$\check{\Delta}_{ij}=1-\frac{n-\pi_i-\pi_j+\sum_{k=1}^n\pi_k/n}{n-1}.$$ that requires only the sample $\pi_i$. Overton's approximation is $$\check{\Delta}_{ij}=1-\frac{n-(\pi_i+\pi_j)/2}{n-1}$$ which also requires only the sample $\pi_i$. In practice, given modern computing power, $\pi_{ij}$ should be available either explicitly or by simulation, so the Hartley--Rao and Overton approximations are not particularly useful. \subsection{Using the PPS estimators} At the moment, only Brewer's approximation can be used as a component of multistage sampling, though for any sampling design it is possible to work out the joint sampling probabilities and use the other approaches. The other approaches can be used for cluster sampling or for sampling of individual units. This is likely to change in the future. To specify a PPS design, the sampling probabilities must be given in the \texttt{prob} argument of \texttt{svydesign}, or in the \texttt{fpc} argument, with \texttt{prob} and \texttt{weight} unspecified. In addition, it is necessary to specify which PPS computation should be used, with the \texttt{pps} argument. The optional \texttt{variance} argument specifies the Horvitz--Thompson (\texttt{variance="HT"}) or Yates--Grundy (\texttt{variance="YG"}) estimator, with the default being \texttt{"HT"}. Some estimators require information in addition to the sampling probabilities for units in the sample. This information is supplied to the \texttt{pps=} argument of \texttt{svydesign} using wrapper functions that create objects with appropriate classes. To specify the population sum $\sum pi_i^2/n$ needed for the Hartley--Rao approximation, use \texttt{HR()}, and to specify a matrix of pairwise sampling probabilities use \texttt{ppsmat()}. The function \texttt{HR()} without an argument will use the Hartley--Rao approximation and estimate the population sum from the sample. The data set \texttt{election} contains county-level voting data from the 2004 US presidential elections, with a PPS sample of size 40 taken using Till\'e's splitting method, from the \texttt{sampling} package. The sampling probabilities vary widely, with Los Angeles County having a probability of 0.9 and many small counties having probabilities less than 0.0005. <<>>= library(survey) data(election) summary(election$p) summary(election_pps$p) @ Some possible survey design specifications for these data are: <<>>= ## Hajek type dpps_br<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") ## Horvitz-Thompson type dpps_ov<- svydesign(id=~1, fpc=~p, data=election_pps, pps="overton") dpps_hr<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40)) dpps_hr1<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR()) dpps_ht<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob)) ## Yates-Grundy type dpps_yg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob),variance="YG") dpps_hryg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40),variance="YG") ## The with-replacement approximation dppswr <-svydesign(id=~1, probs=~p, data=election_pps) @ All the without-replacement design objects except for Brewer's method include a matrix $\check{\Delta}$. These can be visualized with the \texttt{image()} method. These plots use the \texttt{lattice} package and so need \texttt{show()} to display them inside a program: <>= show(image(dpps_ht)) @ <>= show(image(dpps_ov)) @ In this example there are more negative entries in $\check{\Delta}$ with the approximate methods than when the full pairwise sampling matrix is supplied. The estimated totals are the same with all the methods, but the standard errors are not. <<>>= svytotal(~Bush+Kerry+Nader, dpps_ht) svytotal(~Bush+Kerry+Nader, dpps_yg) svytotal(~Bush+Kerry+Nader, dpps_hr) svytotal(~Bush+Kerry+Nader, dpps_hryg) svytotal(~Bush+Kerry+Nader, dpps_hr1) svytotal(~Bush+Kerry+Nader, dpps_br) svytotal(~Bush+Kerry+Nader, dpps_ov) svytotal(~Bush+Kerry+Nader, dppswr) @ \end{document} survey/vignettes/domain.Rnw0000644000176200001440000000771612372242764015602 0ustar liggesusers\documentclass{article} \usepackage{url} %\VignetteIndexEntry{Estimates in subpopulations} \usepackage{Sweave} \author{Thomas Lumley} \title{Estimates in subpopulations.} \begin{document} \maketitle Estimating a mean or total in a subpopulation (domain) from a survey, eg the mean blood pressure in women, is not done simply by taking the subset of data in that subpopulation and pretending it is a new survey. This approach would give correct point estimates but incorrect standard errors. The standard way to derive domain means is as ratio estimators. I think it is easier to derive them as regression coefficients. These derivations are not important for R users, since subset operations on survey design objects automatically do the necessary adjustments, but they may be of interest. The various ways of constructing domain mean estimators are useful in quality control for the survey package, and some of the examples here are taken from \texttt{survey/tests/domain.R}. Suppose that in the artificial \texttt{fpc} data set we want to estimate the mean of \texttt{x} when \texttt{x>4}. <<>>= library(survey) data(fpc) dfpc<-svydesign(id=~psuid,strat=~stratid,weight=~weight,data=fpc,nest=TRUE) dsub<-subset(dfpc,x>4) svymean(~x,design=dsub) @ The \texttt{subset} function constructs a survey design object with information about this subpopulation and \texttt{svymean} computes the mean. The same operation can be done for a set of subpopulations with \texttt{svyby}. <<>>= svyby(~x,~I(x>4),design=dfpc, svymean) @ In a regression model with a binary covariate $Z$ and no intercept, there are two coefficients that estimate the mean of the outcome variable in the subpopulations with $Z=0$ and $Z=1$, so we can construct the domain mean estimator by regression. <<>>= summary(svyglm(x~I(x>4)+0,design=dfpc)) @ Finally, the classical derivation of the domain mean estimator is as a ratio where the numerator is $X$ for observations in the domain and 0 otherwise and the denominator is 1 for observations in the domain and 0 otherwise <<>>= svyratio(~I(x*(x>4)),~as.numeric(x>4), dfpc) @ The estimator is implemented by setting the sampling weight to zero for observations not in the domain. For most survey design objects this allows a reduction in memory use, since only the number of zero weights in each sampling unit needs to be kept. For more complicated survey designs, such as post-stratified designs, all the data are kept and there is no reduction in memory use. \subsection*{More complex examples} Verifying that \texttt{svymean} agrees with the ratio and regression derivations is particularly useful for more complicated designs where published examples are less readily available. This example shows calibration (GREG) estimators of domain means for the California Academic Performance Index (API). <<>>= data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) gclus1 <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069)) svymean(~api00, subset(gclus1, comp.imp=="Yes")) svyratio(~I(api00*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), gclus1) summary(svyglm(api00~comp.imp-1, gclus1)) @ Two-stage samples with full finite-population corrections <<>>= data(mu284) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) svymean(~y1, subset(dmu284,y1>40)) svyratio(~I(y1*(y1>40)),~as.numeric(y1>40),dmu284) summary(svyglm(y1~I(y1>40)+0,dmu284)) @ Stratified two-phase sampling of children with Wilm's Tumor, estimating relapse probability for those older than 3 years (36 months) at diagnosis <<>>= library("survival") data(nwtco) nwtco$incc2<-as.logical(with(nwtco, ifelse(rel | instit==2,1,rbinom(nrow(nwtco),1,.1)))) dccs8<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2) svymean(~rel, subset(dccs8,age>36)) svyratio(~I(rel*as.numeric(age>36)), ~as.numeric(age>36), dccs8) summary(svyglm(rel~I(age>36)+0, dccs8)) @ \end{document} survey/vignettes/epi.Rnw0000644000176200001440000002362212372242764015102 0ustar liggesusers\documentclass{article} \usepackage{url} \addtolength{\topmargin}{-0.5in} \addtolength{\textheight}{0.75in} \addtolength{\oddsidemargin}{-0.5in} \addtolength{\textwidth}{1in} %\VignetteIndexEntry{Two-phase designs in epidemiology} \usepackage{Sweave} \author{Thomas Lumley} \title{Two-phase designs in epidemiology} \begin{document} \maketitle This document explains how to analyse case--cohort and two-phase case--control studies with the ``survey'' package, using examples from \url{http://faculty.washington.edu/norm/software.html}. Some of the examples were published by Breslow \& Chatterjee (1999). The data are relapse rates from the National Wilm's Tumor Study (NWTS). Wilm's Tumour is a rare cancer of the kidney in children. Intensive treatment cures the majority of cases, but prognosis is poor when the disease is advanced at diagnosis and for some histological subtypes. The histological characterisation of the tumour is difficult, and histological group as determined by the NWTS central pathologist predicts much better than determinations by local institution pathologists. In fact, local institution histology can be regarded statistically as a pure surrogate for the central lab histology. In these examples we will pretend that the (binary) local institution histology determination (\texttt{instit}) is avavailable for all children in the study and that the central lab histology (\texttt{histol}) is obtained for a probability sample of specimens in a two-phase design. We treat the initial sampling of the study as simple random sampling from an infinite superpopulation. We also have data on disease stage, a four-level variable; on relapse; and on time to relapse. \section*{Case--control designs} Breslow \& Chatterjee (1999) use the NWTS data to illustrate two-phase case--control designs. The data are available at \url{http://faculty.washington.edu/norm/software.html} in compressed form; we first expand to one record per patient. <<>>= library(survey) load(system.file("doc","nwts.rda",package="survey")) nwtsnb<-nwts nwtsnb$case<-nwts$case-nwtsb$case nwtsnb$control<-nwts$control-nwtsb$control a<-rbind(nwtsb,nwtsnb) a$in.ccs<-rep(c(TRUE,FALSE),each=16) b<-rbind(a,a) b$rel<-rep(c(1,0),each=32) b$n<-ifelse(b$rel,b$case,b$control) index<-rep(1:64,b$n) nwt.exp<-b[index,c(1:3,6,7)] nwt.exp$id<-1:4088 @ As we actually do know \texttt{histol} for all patients we can fit the logistic regression model with full sampling to compare with the two-phase analyses <<>>= glm(rel~factor(stage)*factor(histol), family=binomial, data=nwt.exp) @ The second phase sample consists of all patients with unfavorable histology as determined by local institution pathologists, all cases, and a 20\% sample of the remainder. Phase two is thus a stratified random sample without replacement, with strata defined by the interaction of \texttt{instit} and \texttt{rel}. <<>>= dccs2<-twophase(id=list(~id,~id),subset=~in.ccs, strata=list(NULL,~interaction(instit,rel)),data=nwt.exp) summary(svyglm(rel~factor(stage)*factor(histol),family=binomial,design=dccs2)) @ Disease stage at the time of surgery is also recorded. It could be used to further stratify the sampling, or, as in this example, to post-stratify. We can analyze the data either pretending that the sampling was stratified or using \texttt{calibrate} to post-stratify the design. <<>>= dccs8<-twophase(id=list(~id,~id),subset=~in.ccs, strata=list(NULL,~interaction(instit,stage,rel)),data=nwt.exp) gccs8<-calibrate(dccs2,phase=2,formula=~interaction(instit,stage,rel)) summary(svyglm(rel~factor(stage)*factor(histol),family=binomial,design=dccs8)) summary(svyglm(rel~factor(stage)*factor(histol),family=binomial,design=gccs8)) @ \section*{Case--cohort designs} In the case--cohort design for survival analysis, a $P$\% sample of a cohort is taken at recruitment for the second phase, and all participants who experience the event (cases) are later added to the phase-two sample. Viewing the sampling design as progressing through time in this way, as originally proposed, gives a double sampling design at phase two. It is simpler to view the process \emph{sub specie aeternitatis}, and to note that cases are sampled with probability 1, and controls with probability $P/100$. The subcohort will often be determined retrospectively rather than at recruitment, giving stratified random sampling without replacement, stratified on case status. If the subcohort is determined prospectively we can use the same analysis, post-stratifying rather than stratifying. There have been many analyses proposed for the case--cohort design (Therneau \& Li, 1999). We consider only those that can be expressed as a Horvitz--Thompson estimator for the Cox model. First we load the data and the necessary packages. The version of the NWTS data that includes survival times is not identical to the data set used for case--control analyses above. <<>>= library(survey) library(survival) data(nwtco) ntwco<-subset(nwtco, !is.na(edrel)) @ Again, we fit a model that uses \texttt{histol} for all patients, to compare with the two-phase design <<>>= coxph(Surv(edrel, rel)~factor(stage)+factor(histol)+I(age/12),data=nwtco) @ We define a two-phase survey design using simple random superpopulation sampling for the first phase, and sampling without replacement stratified on \texttt{rel} for the second phase. The \texttt{subset} argument specifies that observations are in the phase-two sample if they are in the subcohort or are cases. As before, the data structure is rectangular, but variables measured at phase two may be \texttt{NA} for participants not included at phase two. We compare the result to that given by \texttt{survival::cch} for Lin \& Ying's (1993) approach to the case--cohort design. <<>>= (dcch<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco)) svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcch) subcoh <- nwtco$in.subcohort selccoh <- with(nwtco, rel==1|subcoh==1) ccoh.data <- nwtco[selccoh,] ccoh.data$subcohort <- subcoh[selccoh] cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), data =ccoh.data, subcoh = ~subcohort, id=~seqno, cohort.size=4028, method="LinYing") @ Barlow (1994) proposes an analysis that ignores the finite population correction at the second phase. This simplifies the standard error estimation, as the design can be expressed as one-phase stratified superpopulation sampling. The standard errors will be somewhat conservative. More data preparation is needed for this analysis as the weights change over time. <<>>= nwtco$eventrec<-rep(0,nrow(nwtco)) nwtco.extra<-subset(nwtco, rel==1) nwtco.extra$eventrec<-1 nwtco.expd<-rbind(subset(nwtco,in.subcohort==1),nwtco.extra) nwtco.expd$stop<-with(nwtco.expd, ifelse(rel & !eventrec, edrel-0.001,edrel)) nwtco.expd$start<-with(nwtco.expd, ifelse(rel & eventrec, edrel-0.001, 0)) nwtco.expd$event<-with(nwtco.expd, ifelse(rel & eventrec, 1, 0)) nwtco.expd$pwts<-ifelse(nwtco.expd$event, 1, 1/with(nwtco,mean(in.subcohort | rel))) @ The analysis corresponds to a cluster-sampled design in which individuals are sampled stratified by subcohort membership and then time periods are sampled stratified by event status. Having individual as the primary sampling unit is necessary for correct standard error calculation. <<>>= (dBarlow<-svydesign(id=~seqno+eventrec, strata=~in.subcohort+rel, data=nwtco.expd, weight=~pwts)) svycoxph(Surv(start,stop,event)~factor(stage)+factor(histol)+I(age/12), design=dBarlow) @ In fact, as the finite population correction is not being used the second stage of the cluster sampling could be ignored. We can also produce the stratified bootstrap standard errors of Wacholder et al (1989), using a replicate weights analysis <<>>= (dWacholder <- as.svrepdesign(dBarlow,type="bootstrap",replicates=500)) svycoxph(Surv(start,stop,event)~factor(stage)+factor(histol)+I(age/12), design=dWacholder) @ \subsection*{Exposure-stratified designs} Borgan et al (2000) propose designs stratified or post-stratified on phase-one variables. The examples at \url{http://faculty.washington.edu/norm/software.html} use a different subcohort sample for this stratified design, so we load the new \texttt{subcohort} variable <<>>= load(system.file("doc","nwtco-subcohort.rda",package="survey")) nwtco$subcohort<-subcohort d_BorganII <- twophase(id=list(~seqno,~seqno), strata=list(NULL,~interaction(instit,rel)), data=nwtco, subset=~I(rel |subcohort)) (b2<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganII)) @ We can further post-stratify the design on disease stage and age with \texttt{calibrate} <<>>= d_BorganIIps <- calibrate(d_BorganII, phase=2, formula=~age+interaction(instit,rel,stage)) svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=d_BorganIIps) @ \section*{References} Barlow WE (1994). Robust variance estimation for the case-cohort design. \emph{Biometrics} 50: 1064-1072 Borgan \O, Langholz B, Samuelson SO, Goldstein L and Pogoda J (2000). Exposure stratified case-cohort designs, \emph{Lifetime Data Analysis} 6:39-58 Breslow NW and Chatterjee N. (1999) Design and analysis of two-phase studies with binary outcome applied to Wilms tumour prognosis. \emph{Applied Statistics} 48:457-68. Lin DY, and Ying Z (1993). Cox regression with incomplete covariate measurements. \emph{Journal of the American Statistical Association} 88: 1341-1349. Therneau TM and Li H., Computing the Cox model for case-cohort designs. \emph{Lifetime Data Analysis} 5:99-112, 1999 Wacholder S, Gail MH, Pee D, and Brookmeyer R (1989) Alternate variance and efficiency calculations for the case-cohort design \emph{Biometrika}, 76, 117-123 \end{document} survey/MD50000644000176200001440000002546313123040336012124 0ustar liggesusers7a8a748caef9b77763418c83bd3ed84b *DESCRIPTION a219168409f56f20702ade7ecbe4c6e4 *INDEX b42cfe9b2e880a2e836deca77738e2be *NAMESPACE 859355590423571d6faec06f8e5f999d *R/DBI.R aaab27b80eb753175ca0c92a20957478 *R/anova.svyglm.R 5b81c3cd21b951d535a27679230eeda4 *R/bootstrap.R 4a27dd1029f20c1db823e474cecd6994 *R/chisqsum.R b5cffd73326ccfbef1954d2ad032efa0 *R/compressweights.R fd916fce7443a3771c3a965175efa324 *R/confint.R e4b7519f8c5cad157788d9ff0bebb9b5 *R/count.R c9e16bb78e9f9d0b8c5dacc4ba7c635c *R/dbiupdate.R c5f1dd01370e4c3d7f3d6d3558ca15ac *R/ftable.svystat.R 1adaa3b2100082e2c2a439923f93822e *R/grake.R d0da6e0a4f35d49acf8f68cd493e84f4 *R/greg.R 8abae944629ac267a54eb76119674a18 *R/ht.R 7f99c61dc8bd8de3d1ac4d8c6695408d *R/loglin.R 11d41fda4b83a1e193ac5af76958676b *R/logrank.R c6a1188d8529d0313542793acf9da4e0 *R/margins.R 460e2318fe0dde7157ad7fbba843eee0 *R/mrb.R 9ca0b28566332e9e3d5236293fda88f5 *R/mse.R 2ba37abb22de1766b626f5a579134622 *R/multistage.R 7b6d54c119096397e472d504308cf749 *R/multivariate.R c9984602da6dea103676acf4d6fca22f *R/odbc.R 6fa343fbbc3e78131350ccaa6ad7478a *R/olr.R 8169eb47021665ca2790739b12669641 *R/pFsum.R d7bde53f7898b0ed437962b894c9b798 *R/paley.R 0c78cddb50c37c625b02ba83be836fd0 *R/pps.R 6c35a4a344593247e9986be7c345d25b *R/regtest.R 0ff4c8baea050c34a186be41372162ff *R/rsquared.R 18f0183f59c24e9c46c0c9126a4c7472 *R/stdize.R 14aabec32aa01b0ba0783771cd12a355 *R/stratsample.R e227c31eaca954643c08e8b34d8c6e32 *R/survey.R e867dc537df5a0597e28540ea441e156 *R/surveyby.R 080da7f97232c658bdb864e2d2c4c74a *R/surveychisq.R 61298ac4e7791c23beaf5745991a8c3f *R/surveygraph.R 54b7061f4a0bd023de3c350969e26d69 *R/surveyrep.R 5bc03f84ff7bf31c74e055c9efe00678 *R/svycdf.R 80cfb5f559a64507400fa4d2d1b46f1b *R/svyhist.R f167949077f73d87c969525ae5e11550 *R/svykappa.R 2b4889035a00f98f1b27a9e3f76dd2fb *R/svykm.R dcf500be3b5b5432d57cba2e763a9a1c *R/svymi.R 9c89fe232fc819518a6ececefcef7a38 *R/svypredmeans.R cb39b6c0471f473b887426b65410e61e *R/svyranktest.R 67ee66fbd9f413a2b3b0d52d78016d4f *R/svysmooth.R fe04da44d7a50f474e3db433e3a982ad *R/svysurvreg.R c6d29ed0ad3f92a00eedaa2c9a1bc6ac *R/svyttest.R 1154f5e218c504e07fd4156eb7790836 *R/sysdata.rda 3a2f19a9a7b6e5f206a6f8a5537fb2d4 *R/transform.R c18e9d7bc5814f60e7d1a9854a45d7d2 *R/twophase.R f9830c11cd2b6e5d7924e2f15e33d444 *R/twophase2.R 6c069bda823793258fa7630e6c8138ab *R/weightconstruction.R eb824b1c86cc645085498b8e79c7a7d3 *THANKS 72b41af2715bc7e0eeacfccb34a1eab0 *TODO c04fbbcdc195e38f58a452a12ebd8fec *build/vignette.rds 8e3d28f3af898bbf379a31d6d51c2202 *data/api.rda ee15e443cc0429b31c43347c0617a4a0 *data/crowd.rda d7d106a0fd2aef7f68260e591f2f8735 *data/election.rda f59db3be2a5288c5365cbd2fa4ba71fb *data/fpc.rda 9fe5210bf0ea16f800b07ca075a92276 *data/hospital.rda b5188905407cb8351c6a4e807253172b *data/mu284.rda d198bd71650894ecad4887a04274aba6 *data/nhanes.rda 3e7391808a95c4cb1eed3cbb5f49f075 *data/scd.rda 531ec47ba7d12714515d326c417f9443 *data/yrbs.rda b31a81da0dd6e5adc582717575192368 *inst/BUGS cbcb51243d375f08d35ff3dd0f1ee6fa *inst/CITATION 9dbfcdd76553194b1513751a02042f91 *inst/COPYING 0ef640715ee51bc8a8a932d30b3dfd21 *inst/NEWS ad0ca60c6d7d1c64ed77618b40c5d1c5 *inst/api.db fedebdbde4e7cfe28b3941fc8371e857 *inst/disclaimer bd13d234657132da1a44e0a33bcfb456 *inst/doc/domain.R e549b9eba82a7a3db5543ec5be0b0bc6 *inst/doc/domain.Rnw e9a71ed902994d85a2cfdccfd7d26930 *inst/doc/domain.pdf a5142360787a98ec409e10229bbd6f00 *inst/doc/epi.R cf470caff322c36517ae4ac286e420ee *inst/doc/epi.Rnw 3078e77f419321aa02973046f91d42e0 *inst/doc/epi.pdf d82d7a650f7a3ed2b846c6280fab38b5 *inst/doc/nwtco-subcohort.rda d102892ef1145ee2e54b13b668714651 *inst/doc/nwts.rda e473dab0d0bdae45394af33e262ce816 *inst/doc/phase1.R a3fc06bb909b1854d4bdb8f14bd0a5cd *inst/doc/phase1.Rnw b9ff83771466db392217ec4ff6a32093 *inst/doc/phase1.pdf d0e73408df9033a260a40660f32e1b02 *inst/doc/pps.R 45d31ccd0e3bcb193a3cbce5c89824e7 *inst/doc/pps.Rnw 466877931076cb903bdce7e919c8b812 *inst/doc/pps.pdf da0b23328004b9044b0f62f9341945b9 *inst/doc/survey.R dfdd268e5e85cdb9422e11b2c183aa79 *inst/doc/survey.Rnw 53350d8fde61912917f18e7b9e478967 *inst/doc/survey.pdf 67fd0dff07ced7069e2ac813865dbf58 *inst/porting.to.S 0caeffbff77347fc2ab06f30534c3f46 *inst/twostage.pdf 4db9100417c9160c9271bd853cd93f86 *inst/ucla-examples.pdf daf1910c21501f14a63aa2a7419c1466 *man/HR.Rd 234787faa3310c2325952029685b5272 *man/SE.Rd 65c7a9190cd7ff86cd1fdf3f0c85a571 *man/anova.svyglm.Rd de347a74722b08dd9507caa14c0ecaf0 *man/api.Rd 1df4e44a0124abadc68eeba8da160f7d *man/as.fpc.Rd f0477fbe848d323ffbd1aa84d636b6a7 *man/as.svrepdesign.Rd ca07d024bc8ad2920881be3a92416865 *man/as.svydesign2.Rd a2487bc8b605e35fa16fc160f7194055 *man/barplot.svystat.Rd c48b922c011640f2ab6585bf91f6d37f *man/bootweights.Rd b05701bb4ccac840031ff7f887bd55a7 *man/brrweights.Rd 463295027b3a68325442d258728bbc84 *man/calibrate.Rd f98c7338d5ed2bf6930eaf66a5f0a1e7 *man/compressWeights.Rd a664c485c38842cd41c1458b4110101a *man/confint.svyglm.Rd b88cbcc5a0339e24aae8cac15abc6085 *man/crowd.Rd 5e635a33c60f5b5ced5b6b2d3adbe088 *man/dimnames.DBIsvydesign.Rd 55e032d442b0447687400e28e4085d29 *man/election.Rd 3d46235191e8edd4839ac7ddddb272e8 *man/estweights.Rd 4a89f9119309209a91debbaac354e0f2 *man/fpc.Rd 1fc9004a0c1bb430f025861083e5b379 *man/ftable.svystat.Rd 809a5e046151f44cdc4288915f1be7a5 *man/hadamard.Rd a9cb5d02e17af9460aa10aa8d1b6497a *man/hospital.Rd c523dcc5d55b4f182bd406ea48d4e64a *man/make.calfun.Rd 493380df216b5c1b55bbdd05ec4cf22a *man/marginpred.Rd 14e3927d8da68cd926652ec8462a16f9 *man/mu284.Rd 29e8240a02389f11221722f8683bbff4 *man/nhanes.Rd 8447ae42f78e376968421ee46543a195 *man/nonresponse.Rd e1f8b3f012cf614ebc7b5729200f4a0d *man/open.DBIsvydesign.Rd ab3aaf2c676494d82b0b440385ac2f05 *man/paley.Rd e362b53e399180b614ee43f8a5cdf849 *man/pchisqsum.Rd e8fa2c17aa1230065ae000fdb0913157 *man/postStratify.Rd 47e775140012c61bde6cca8aaf0dc3d0 *man/psrsq.Rd 6e7610099924ec8ebda3bfc6dcc40015 *man/rake.Rd c80211687b71386e23f63c578ca0dbfe *man/regTermTest.Rd c38155f62ea15df2c750a0ca1f2cf5ff *man/scd.Rd db845dc8216a7d04e1c224b93f764d5f *man/stratsample.Rd e2d5e837e99c491b1c02c0d135516aa3 *man/subset.survey.design.Rd 4d4f8685de34adf511eca14f1d25bcd1 *man/surveyoptions.Rd 9970c91560e1c33898ba7bc2d4f71010 *man/surveysummary.Rd 4c4993863452ec84eeb68d5ef07c7e6f *man/svrVar.Rd b959cd069e930a155c09c5f7bc32c0a4 *man/svrepdesign.Rd 939d043da650a1f44502ba376d12ec3d *man/svy.varcoef.Rd ae19a003c9f60058fa4cb749f23e1c68 *man/svyCprod.Rd 44100e27219878082cc8447e9ea523ac *man/svyby.Rd 533fe820a1e613b0c8a395b49af7444b *man/svycdf.Rd 0f088991a5dc31fb88970fd62c1b0dd4 *man/svychisq.Rd 4be2574f626a95dc2dab3fa0bfd3e04e *man/svyciprop.Rd 07c194c6877552919c3292edd6b92ea4 *man/svycontrast.Rd 76f1c76aaf479969dab8528d4958ef74 *man/svycoplot.Rd a2660919025445d508679096d71fc740 *man/svycoxph.Rd 22f65fcef51ec027097d328c4b41095e *man/svydesign.Rd ce556903b7ec044cdbfccceb75395dfc *man/svyfactanal.Rd 5785bcf8b5d347b9b3e8e476b649013c *man/svyglm.Rd 8bf0d8396e58c466da6ddadd2bf2f28f *man/svyhist.Rd 38354ceab289e3056f6a3cb44f74c23b *man/svykappa.Rd 342cc57dfb19aabc36854c557774739b *man/svykm.Rd 930237e3c9e38a447e00b8390528a4af *man/svyloglin.Rd 601083be411fdc19d1c5021de705245a *man/svylogrank.Rd e951bfb0758e87c8f86e1aba63a697c8 *man/svymle.Rd 9222dce182bacbe70b3c72e9bccb0128 *man/svyolr.Rd 3b9e8c67b5844eefd79765361bec81d5 *man/svyplot.Rd 44aa5fc0f7128f7f84b32e8fa55f7bc3 *man/svyprcomp.Rd 3be0b543b4f64d2c7033cceaf4672e97 *man/svypredmeans.Rd cd1a60b4e0228e6e2c8162d361756f73 *man/svyquantile.Rd 0132b662eca171a0a5e547548a6829ea *man/svyranktest.Rd b5c15b59be245553e35425cf269f7031 *man/svyratio.Rd 40e1f8bc28b3aacbb73efa5996b51f5f *man/svyrecvar.Rd 671fb4c053614fe861700f3d5f4d804f *man/svysmooth.Rd f2789526be33e6b107178778ad9b9212 *man/svystandardize.Rd 4f58ed2c680c203fcef35daf14ed5cfc *man/svysurvreg.Rd 43ef70402c346de858bf8c497244b3c2 *man/svyttest.Rd 74fc6fcfb5bc67e0178f6522fd33adfd *man/trimWeights.Rd 91161a15e1718f9141c8e196dd99752f *man/twophase.Rd 76f2f9f51b9ac247742fc0ee1b0b7f95 *man/update.survey.design.Rd 20ee2b3e3a8d1848105f1cee6d57aeab *man/weights.survey.design.Rd 10ba32bc8528e4861b29c0044b20e802 *man/with.svyimputationList.Rd 61dc769cecbd6460f91b7a77401c9c75 *man/withReplicates.Rd f01a3d553c7b9afd65e616b196917f3c *man/yrbs.Rd c91c9d0dd78c264236d5aeadbe6de4aa *tests/DBIcheck.R a36403b415fc95b10256ad06ac94add6 *tests/DBIcheck.Rout.saved dc2a6feb6e6e21f3fef6be3c2ee3bdcb *tests/README 527e5ba782684ca6a459d09a52e4bb4b *tests/api.R 3ad53ef34903baaea1aabc5d8f4cd0f9 *tests/api.Rout.saved eba420580d5712b2bdbee74f844e2c9e *tests/badcal.R fca32d6127f578fe7cacf6957c9bcb06 *tests/badcal.Rout.save 0ece37ceda0022b032153d4496a3f943 *tests/bycovmat.R 0d4380b36115f8543b2476ddac923676 *tests/bycovmat.Rout.save 7178e6025a01c697c3d122898e573698 *tests/caleg.R f920f94f18bee3ea62772d8d7fc1abf3 *tests/caleg.Rout.save bb39e18b97ab5f91094f9ceb71d992f5 *tests/check.R d4e620440333904b7e057ee26984fe12 *tests/check.Rout.save 9afd1c4ef859ba69520afe4825a3b1e2 *tests/deff.R 1c28ba9df80a9d65aee6d49bb767148d *tests/deff.Rout.save 430cd5207b02ef92d2d5a75e1bdf9074 *tests/domain.R 62c918ff711bd24cfa3d860df5556513 *tests/domain.Rout.save 85b0201ab5b022cf0e51b6badfc5c07b *tests/fpc.R a9f2ac6a2481cb8100a634703fe5c0d1 *tests/fpc.Rout.save 32174d2a986af7276bdb7daa62670c77 *tests/kalton.R 9b30594ac4527d0ece5bab043f6c06f1 *tests/kalton.Rout.save 3ab5b5b8d2fa053b62832df2585db7ee *tests/lonely.psu.R 0add96a76dd1182564771813281109f8 *tests/lonely.psu.Rout.save 5c88d425cfb80a6b350763acff6c2b92 *tests/multistage.R 188777251024d61793ab0fb393cc175c *tests/multistage.Rout.save d82d7a650f7a3ed2b846c6280fab38b5 *tests/nwtco-subcohort.rda 9f37aa87c54f9e9585f6ed839da38a75 *tests/nwts-cch.R 18298f29aee3995d9e480d5058a09ca1 *tests/nwts-cch.Rout.save e7866681f0a2aa1487345e96e77fe49a *tests/nwts.R bd1e49943f467fe7b2591764fd66fe4e *tests/nwts.Rout.save f78a9ca2f7d82b635a9ac83c84f22721 *tests/nwts.rda 1f2c987cef798c0d6c8635a5be720c24 *tests/pps.R 73e8268a284580d4d32ff928262a88c8 *tests/pps.Rout.saved d5a275559b33371fc701d467a1e1b8ba *tests/quantile.R 88b3bae4b81c7b895bbea52c14b4a9c4 *tests/quantile.Rout.save bb6b47311c28af44e4386146bbb766cd *tests/rakecheck.R 227b1e5214e1f36393633ed5b926a154 *tests/rakecheck.Rout.save 23d3f3e5924ebac663762223b9073dc5 *tests/raowuboot.R 597d97f91f48834e3567ce60d55a56a3 *tests/raowuboot.Rout.save 73d743b02cde34dea66b7a5a1e358a69 *tests/regpredict.R 17f986ce4a44a05026529890440f7e9e *tests/regpredict.Rout.save 08e7b85dd0996a1afa68e8dfcb698a4d *tests/scoping.R c21c1abba50dae13b4eb2d4738f20461 *tests/scoping.Rout.save ce54c4edad7a3b9fd9c8aa995473a794 *tests/survcurve.R 3cb8a60c150867bbd537a9c0a2493f6d *tests/survcurve.Rout.save ebd38893f6dfe5810cc67e87373c2440 *tests/twophase.R 96a10516fa9b9a7cd6548c1845eca0f7 *tests/twophase.Rout.save e549b9eba82a7a3db5543ec5be0b0bc6 *vignettes/domain.Rnw cf470caff322c36517ae4ac286e420ee *vignettes/epi.Rnw a3fc06bb909b1854d4bdb8f14bd0a5cd *vignettes/phase1.Rnw 45d31ccd0e3bcb193a3cbce5c89824e7 *vignettes/pps.Rnw dfdd268e5e85cdb9422e11b2c183aa79 *vignettes/survey.Rnw survey/build/0000755000176200001440000000000013122573417012713 5ustar liggesuserssurvey/build/vignette.rds0000644000176200001440000000054013122573417015251 0ustar liggesusersR=O0uSBBOT0PAVKmnC67BO~0z, 1 qYƸOb fO!ف*,u .uT: K~c٧I\ }[c2Q5'!:I7Spw:PV wȥP[ 勹iiJjLy9\4,Md&_1k7${:ʞSUNGdxjԬM&YVlP"CD License: GPL-2 | GPL-3 Depends: R (>= 2.16.0), grid, methods, Matrix, survival Imports: stats, graphics, splines, lattice Suggests: foreign, MASS, KernSmooth, hexbin, mitools, RSQLite, RODBC, quantreg, parallel, CompQuadForm, DBI URL: http://r-survey.r-forge.r-project.org/survey/ Repository: CRAN Repository/R-Forge/Project: r-survey Repository/R-Forge/Revision: 53 Repository/R-Forge/DateTimeStamp: 2017-06-21 22:41:58 Date/Publication: 2017-06-22 22:12:45 UTC NeedsCompilation: no Packaged: 2017-06-21 22:45:35 UTC; rforge survey/THANKS0000644000176200001440000000341113122061121012506 0ustar liggesusersThe survey package has benefited from code, bug reports, and feature requests from users, including: Daniel Almirall Guiseppe Antonaci Maciej Beręsewicz Brad Biggerstaff Milan Bouchet-Valat Norman Breslow Arthur Burke Ron Burns Stefano Calza Shelby Chartkoff David Collins Anthony Damico Wade Davis Michael Donohue Rex Dwyer Melanie Edwards Francisco Fabuel Bob Fay Daniel Fernandes Ben French Jacques Ferrez Daniella Gollinelli Alistair Gray James Greiner Zachary Grinspan Alois Haslinger Kieran Healy Lucia Hindorff Jeffery Hughes Ward Kinkade Stas Kolenikov Scott Kostyshak Alex Kowarik Michael Laviolette Jean Paul Lucas Lisa McShane Ana Patricia Martins Tapan Mehta Daryl Morris Joey Morris Kirill Mueller Daniel Oehm Jean Opsomer Gonzalo Perez Djalma Pessoa Ana Quiterio Gillian Raab Christian Raschke Brian Ripley Fred Rohde Steve Roberts Andrew Robinson Mark Rosenstein Pam Shaw Lee Sieswerda Phil Smith Matthew Soldner Corey Sparks Takahiro Tsuchiya Richard Valliant Tobias Verbeke Renzo Vettori Chris Webb Thomas Yokota Diego Zardetto Alan Zaslavsky and from dicussions with Chris Wild and Alastair Scott. Some work on the package while I was on sabbatical was funded by Fondation Leducq through a grant to the LINAT collaboration and by the Marsden Fund through a grant to the University of Auckland. Patrick Aboyoun did the S-PLUS port of version 3.6-8 John Preston provided an example of the multistage rescaled bootstrap for testing. The svyolr() code and the likelihood-based confidenece intervals are largely ripped from the MASS package of Venables & Ripley, and parts of the code for svycoxph() are modified from Therneau's survival package. survey/man/0000755000176200001440000000000013122573253012365 5ustar liggesuserssurvey/man/svycontrast.Rd0000644000176200001440000000417512372242764015270 0ustar liggesusers\name{svycontrast} \alias{svycontrast} %- Also NEED an '\alias' for EACH other topic documented here. \title{Linear and nonlinearconstrasts of survey statistics } \description{ Computes linear or nonlinear contrasts of estimates produced by survey functions (or any object with \code{coef} and \code{vcov} methods). } \usage{ svycontrast(stat, contrasts, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{stat}{object of class \code{svrepstat} or \code{svystat} } \item{contrasts}{A vector or list of vectors of coefficients, or a call or list of calls } \item{\dots}{For future expansion} } \value{ Object of class \code{svrepstat} or \code{svystat} } \details{ If \code{contrasts} is a list, the element names are used as names for the returned statistics. If an element of \code{contrasts} is shorter than \code{coef(stat)} and has names, the names are used to match up the vectors and the remaining elements of \code{contrasts} are assumed to be zero. If the names are not legal variable names (eg \code{0.1}) they must be quoted (eg \code{"0.1"}) If \code{contrasts} is a \code{"call"} or list of \code{"call"s}, the delta-method is used to compute variances, and the calls must use only functions that \code{\link{deriv}} knows how to differentiate. If the names are not legal variable names they must be quoted with backticks (eg \code{`0.1`}). } \seealso{\code{\link{regTermTest}}, \code{svyglm}} \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) a <- svytotal(~api00+enroll+api99, dclus1) svycontrast(a, list(avg=c(0.5,0,0.5), diff=c(1,0,-1))) ## if contrast vectors have names, zeroes may be omitted svycontrast(a, list(avg=c(api00=0.5,api99=0.5), diff=c(api00=1,api99=-1))) ## nonlinear contrasts svycontrast(a, quote(api00/api99)) svyratio(~api00, ~api99, dclus1) ## Example: standardised skewness coefficient moments<-svymean(~I(api00^3)+I(api00^2)+I(api00), dclus1) svycontrast(moments, quote((`I(api00^3)`-3*`I(api00^2)`*`I(api00)`+ 3*`I(api00)`*`I(api00)`^2-`I(api00)`^3)/ (`I(api00^2)`-`I(api00)`^2)^1.5)) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/paley.Rd0000644000176200001440000000500112242746122013761 0ustar liggesusers\name{paley} \alias{paley} \alias{is.hadamard} %- Also NEED an '\alias' for EACH other topic documented here. \title{Paley-type Hadamard matrices} \description{ Computes a Hadamard matrix of dimension \eqn{(p+1)\times 2^k}{(p+1)*2^k}, where p is a prime, and p+1 is a multiple of 4, using the Paley construction. Used by \code{\link{hadamard}}. } \usage{ paley(n, nmax = 2 * n, prime=NULL, check=!is.null(prime)) is.hadamard(H, style=c("0/1","+-"), full.orthogonal.balance=TRUE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{n}{Minimum size for matrix} \item{nmax}{Maximum size for matrix. Ignored if \code{prime} is specified.} \item{prime}{Optional. A prime at least as large as \code{n}, such that \code{prime+1} is divisible by 4.} \item{check}{Check that the resulting matrix is of Hadamard type} \item{H}{Matrix} \item{style}{\code{"0/1"} for a matrix of 0s and 1s, \code{"+-"} for a matrix of \eqn{\pm 1}{+/-1}.} \item{full.orthogonal.balance}{Require full orthogonal balance?} } \value{ For \code{paley}, a matrix of zeros and ones, or \code{NULL} if no matrix smaller than \code{nmax} can be found. For \code{is.hadamard}, \code{TRUE} if \code{H} is a Hadamard matrix. } \details{ The Paley construction gives a Hadamard matrix of order p+1 if p is prime and p+1 is a multiple of 4. This is then expanded to order \eqn{(p+1)\times 2^k}{(p+1)*2^k} using the Sylvester construction. \code{paley} knows primes up to 7919. The user can specify a prime with the \code{prime} argument, in which case a matrix of order \eqn{p+1}{p+1} is constructed. If \code{check=TRUE} the code uses \code{is.hadamard} to check that the resulting matrix really is of Hadamard type, in the same way as in the example below. As this test takes \eqn{n^3}{n^3} time it is preferable to just be sure that \code{prime} really is prime. A Hadamard matrix including a row of 1s gives BRR designs where the average of the replicates for a linear statistic is exactly the full sample estimate. This property is called full orthogonal balance. } \references{ Cameron PJ (2005) Hadamard Matrices. \url{http://designtheory.org/library/encyc/topics/had.pdf}. In: The Encyclopedia of Design Theory \url{http://designtheory.org/library/encyc/} } \seealso{ \code{\link{hadamard}}} \examples{ M<-paley(11) is.hadamard(M) ## internals of is.hadamard(M) H<-2*M-1 ## HH^T is diagonal for any Hadamard matrix H\%*\%t(H) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{algebra} survey/man/ftable.svystat.Rd0000755000176200001440000000337212242746122015634 0ustar liggesusers\name{ftable.svystat} \alias{ftable.svystat} \alias{ftable.svrepstat} \alias{ftable.svyby} %- Also NEED an '\alias' for EACH other topic documented here. \title{Lay out tables of survey statistics} \description{ Reformat the output of survey computations to a table. } \usage{ \method{ftable}{svystat}(x, rownames,...) \method{ftable}{svrepstat}(x, rownames,...) \method{ftable}{svyby}(x,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Output of functions such as \code{svymean},\code{svrepmean}, \code{svyby}} \item{rownames}{List of vectors of strings giving dimension names for the resulting table (see examples)} \item{...}{Arguments for future expansion} } \value{ An object of class \code{"ftable"} } \seealso{ \code{\link{ftable}}} \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) a<-svymean(~interaction(stype,comp.imp), design=dclus1) b<-ftable(a, rownames=list(stype=c("E","H","M"),comp.imp=c("No","Yes"))) b a<-svymean(~interaction(stype,comp.imp), design=dclus1, deff=TRUE) b<-ftable(a, rownames=list(stype=c("E","H","M"),comp.imp=c("No","Yes"))) round(100*b,1) rclus1<-as.svrepdesign(dclus1) a<-svytotal(~interaction(stype,comp.imp), design=rclus1) b<-ftable(a, rownames=list(stype=c("E","H","M"),comp.imp=c("No","Yes"))) b round(b) a<-svyby(~api99 + api00, ~stype + sch.wide, rclus1, svymean, keep.var=TRUE) ftable(a) print(ftable(a),digits=2) b<-svyby(~api99 + api00, ~stype + sch.wide, rclus1, svymean, keep.var=TRUE, deff=TRUE) print(ftable(b),digits=2) d<-svyby(~api99 + api00, ~stype + sch.wide, rclus1, svymean, keep.var=TRUE, vartype=c("se","cvpct")) round(ftable(d),1) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/as.fpc.Rd0000644000176200001440000000227512242746122014033 0ustar liggesusers\name{as.fpc} \alias{as.fpc} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Package sample and population size data} \description{ This function creates an object to store the number of clusters sampled within each stratum (at each stage of multistage sampling) and the number of clusters available in the population. It is called by \code{svydesign}, not directly by the user. } \usage{ as.fpc(df, strata, ids,pps=FALSE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{df}{A data frame or matrix with population size information} \item{strata}{A data frame giving strata at each stage} \item{ids}{A data frame giving cluster ids at each stage} \item{pps}{if \code{TRUE}, fpc information may vary within a stratum and must be specified as a proportion rather than a population sizes} } \details{ The population size information may be specified as the number of clusters in the population or as the proportion of clusters sampled. } \value{ An object of class \code{survey_fpc} } \seealso{\code{\link{svydesign}},\code{\link{svyrecvar}}} \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/twophase.Rd0000644000176200001440000002047512242746122014515 0ustar liggesusers\name{twophase} \alias{twophase} \alias{twophasevar} \alias{twophase2var} \alias{[.twophase} \alias{subset.twophase} \alias{print.twophase} \alias{summary.twophase} \alias{print.summary.twophase} \alias{model.frame.twophase} \alias{na.fail.twophase} \alias{na.omit.twophase} \alias{na.exclude.twophase} \alias{svyrecvar.phase1} \alias{multistage.phase1} \alias{onestage.phase1} \alias{onestrat.phase1} %- Also NEED an '\alias' for EACH other topic documented here. \title{Two-phase designs} \description{ In a two-phase design a sample is taken from a population and a subsample taken from the sample, typically stratified by variables not known for the whole population. The second phase can use any design supported for single-phase sampling. The first phase must currently be one-stage element or cluster sampling } \usage{ twophase(id, strata = NULL, probs = NULL, weights = NULL, fpc = NULL, subset, data, method=c("full","approx","simple")) twophasevar(x,design) twophase2var(x,design) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{id}{list of two formulas for sampling unit identifiers} \item{strata}{list of two formulas (or \code{NULL}s) for stratum identifies} \item{probs}{ list of two formulas (or \code{NULL}s) for sampling probabilities} \item{weights}{Only for \code{method="approx"}, list of two formulas (or \code{NULL}s) for sampling weights} \item{fpc}{list of two formulas (or \code{NULL}s) for finite population corrections} \item{subset}{formula specifying which observations are selected in phase 2} \item{data}{Data frame will all data for phase 1 and 2} \item{method}{\code{"full"} requires (much) more memory, but gives unbiased variance estimates for general multistage designs at both phases. \code{"simple"} or \code{"approx"} uses the standard error calculation from version 3.14 and earlier, which uses much less memory and is correct for designs with simple random sampling at phase one and stratified random sampling at phase two. } \item{x}{probability-weighted estimating functions} \item{design}{two-phase design} } \details{ The population for the second phase is the first-phase sample. If the second phase sample uses stratified (multistage cluster) sampling without replacement and all the stratum and sampling unit identifier variables are available for the whole first-phase sample it is possible to estimate the sampling probabilities/weights and the finite population correction. These would then be specified as \code{NULL}. Two-phase case-control and case-cohort studies in biostatistics will typically have simple random sampling with replacement as the first stage. Variances given here may differ slightly from those in the biostatistics literature where a model-based estimator of the first-stage variance would typically be used. Variance computations are based on the conditioning argument in Section 9.3 of Sarndal et al. Method \code{"full"} corresponds exactly to the formulas in that reference. Method \code{"simple"} or \code{"approx"} (the two are the same) uses less time and memory but is exact only for some special cases. The most important special case is the two-phase epidemiologic designs where phase 1 is simple random sampling from an infinite population and phase 2 is stratified random sampling. See the \code{tests} directory for a worked example. The only disadvantage of method="simple" in these cases is that standardization of margins (\code{\link{marginpred}}) is not available. For \code{method="full"}, sampling probabilities must be available for each stage of sampling, within each phase. For multistage sampling this requires specifying either \code{fpc} or \code{probs} as a formula with a term for each stage of sampling. If no \code{fpc} or \code{probs} are specified at phase 1 it is treated as simple random sampling from an infinite population, and population totals will not be correctly estimated, but means, quantiles, and regression models will be correct. } \value{ \code{twophase} returns an object of class \code{twophase2} (for \code{method="full"}) or \code{twophase}. The structure of \code{twophase2} objects may change as unnecessary components are removed. \code{twophase2var} and \code{twophasevar} return a variance matrix with an attribute containing the separate phase 1 and phase 2 contributions to the variance. } \references{ Sarndal CE, Swensson B, Wretman J (1992) "Model Assisted Survey Sampling" Springer. Breslow NE and Chatterjee N, Design and analysis of two-phase studies with binary outcome applied to Wilms tumour prognosis. "Applied Statistics" 48:457-68, 1999 Breslow N, Lumley T, Ballantyne CM, Chambless LE, Kulick M. (2009) Improved Horvitz-Thompson estimation of model parameters from two-phase stratified samples: applications in epidemiology. Statistics in Biosciences. doi 10.1007/s12561-009-9001-6 Lin, DY and Ying, Z (1993). Cox regression with incomplete covariate measurements. "Journal of the American Statistical Association" 88: 1341-1349. } \seealso{\code{\link{svydesign}}, \code{\link{svyrecvar}} for multi*stage* sampling \code{\link{calibrate}} for calibration (GREG) estimators. \code{\link{estWeights}} for two-phase designs for missing data. The "epi" and "phase1" vignettes for examples and technical details. } \examples{ ## two-phase simple random sampling. data(pbc, package="survival") pbc$randomized<-with(pbc, !is.na(trt) & trt>0) pbc$id<-1:nrow(pbc) d2pbc<-twophase(id=list(~id,~id), data=pbc, subset=~randomized) svymean(~bili, d2pbc) ## two-stage sampling as two-phase data(mu284) ii<-with(mu284, c(1:15, rep(1:5,n2[1:5]-3))) mu284.1<-mu284[ii,] mu284.1$id<-1:nrow(mu284.1) mu284.1$sub<-rep(c(TRUE,FALSE),c(15,34-15)) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) ## first phase cluster sample, second phase stratified within cluster d2mu284<-twophase(id=list(~id1,~id),strata=list(NULL,~id1), fpc=list(~n1,NULL),data=mu284.1,subset=~sub) svytotal(~y1, dmu284) svytotal(~y1, d2mu284) svymean(~y1, dmu284) svymean(~y1, d2mu284) ## case-cohort design: this example requires R 2.2.0 or later library("survival") data(nwtco) ## stratified on case status dcchs<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco) svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcchs) ## Using survival::cch subcoh <- nwtco$in.subcohort selccoh <- with(nwtco, rel==1|subcoh==1) ccoh.data <- nwtco[selccoh,] ccoh.data$subcohort <- subcoh[selccoh] cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), data =ccoh.data, subcoh = ~subcohort, id=~seqno, cohort.size=4028, method="LinYing") ## two-phase case-control ## Similar to Breslow & Chatterjee, Applied Statistics (1999) but with ## a slightly different version of the data set nwtco$incc2<-as.logical(with(nwtco, ifelse(rel | instit==2,1,rbinom(nrow(nwtco),1,.1)))) dccs2<-twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,instit)), data=nwtco, subset=~incc2) dccs8<-twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2) summary(glm(rel~factor(stage)*factor(histol),data=nwtco,family=binomial())) summary(svyglm(rel~factor(stage)*factor(histol),design=dccs2,family=quasibinomial())) summary(svyglm(rel~factor(stage)*factor(histol),design=dccs8,family=quasibinomial())) ## Stratification on stage is really post-stratification, so we should use calibrate() gccs8<-calibrate(dccs2, phase=2, formula=~interaction(rel,stage,instit)) summary(svyglm(rel~factor(stage)*factor(histol),design=gccs8,family=quasibinomial())) ## For this saturated model calibration is equivalent to estimating weights. pccs8<-calibrate(dccs2, phase=2,formula=~interaction(rel,stage,instit), calfun="rrz") summary(svyglm(rel~factor(stage)*factor(histol),design=pccs8,family=quasibinomial())) ## Since sampling is SRS at phase 1 and stratified RS at phase 2, we ## can use method="simple" to save memory. dccs8_simple<-twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2,method="simple") summary(svyglm(rel~factor(stage)*factor(histol),design=dccs8_simple,family=quasibinomial())) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svyhist.Rd0000644000176200001440000000424412242746122014370 0ustar liggesusers\name{svyhist} \alias{svyhist} \alias{svyboxplot} %- Also NEED an '\alias' for EACH other topic documented here. \title{Histograms and boxplots} \description{ Histograms and boxplots weighted by the sampling weights. } \usage{ svyhist(formula, design, breaks = "Sturges", include.lowest = TRUE, right = TRUE, xlab = NULL, main = NULL, probability = TRUE, freq = !probability, ...) svyboxplot(formula, design, all.outliers=FALSE,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{One-sided formula for \code{svyhist}, two-sided for \code{svyboxplot}} \item{design}{A survey design object} \item{xlab}{x-axis label} \item{main}{Main title} \item{probability,freq}{Y-axis is probability density or frequency} \item{all.outliers}{Show all outliers in the boxplot, not just extremes} \item{breaks, include.lowest, right}{As for \code{\link{hist}}} \item{\dots}{Other arguments to \code{\link{hist}} or \code{\link{bxp}}} } \details{ The histogram breakpoints are computed as if the sample were a simple random sample of the same size. The grouping variable in \code{svyboxplot}, if present, must be a factor. The boxplot whiskers go to the maximum and minimum observations or to 1.5 interquartile ranges beyond the end of the box, whichever is closer. The maximum and minimum are plotted as outliers if they are beyond the ends of the whiskers, but other outlying points are not plotted unless \code{all.outliers=TRUE}. \code{svyboxplot} requires a two-sided formula; use \code{variable~1} for a single boxplot. } \seealso{ \code{\link{svyplot}}} \examples{ data(api) dstrat <- svydesign(id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc) opar<-par(mfrow=c(1,3)) svyhist(~enroll, dstrat, main="Survey weighted",col="purple",ylim=c(0,1.3e-3)) hist(apistrat$enroll, main="Sample unweighted",col="purple",prob=TRUE,ylim=c(0,1.3e-3)) hist(apipop$enroll, main="Population",col="purple",prob=TRUE,ylim=c(0,1.3e-3)) par(mfrow=c(1,1)) svyboxplot(enroll~stype,dstrat,all.outliers=TRUE) svyboxplot(enroll~1,dstrat) par(opar) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{hplot}% __ONLY ONE__ keyword per line survey/man/update.survey.design.Rd0000755000176200001440000000372312242746122016751 0ustar liggesusers\name{update.survey.design} \alias{update.survey.design} \alias{update.twophase} \alias{update.svyrep.design} \alias{update.DBIsvydesign} \alias{update.ODBCsvydesign} %- Also NEED an `\alias' for EACH other topic documented here. \title{ Add variables to a survey design} \description{ Update the data variables in a survey design, either with a formula for a new set of variables or with an expression for variables to be added. } \usage{ \method{update}{survey.design}(object, ...) \method{update}{twophase}(object, ...) \method{update}{svyrep.design}(object, ...) \method{update}{DBIsvydesign}(object, ...) \method{update}{ODBCsvydesign}(object, ...) } %- maybe also `usage' for other objects documented here. \arguments{ \item{object}{a survey design object} \item{\dots}{Arguments \code{tag=expr} add a new variable \code{tag} computed by evaluating \code{expr} in the survey data.} } \details{ Database-backed objects may not have write access to the database and so \code{update} does not attempt to modify the database. The expressions are stored and are evaluated when the data is loaded. If a set of new variables will be used extensively it may be more efficient to modify the database, either with SQL queries from the R interface or separately. One useful intermediate approach is to create a table with the new variables and a view that joins this table to the table of existing variables. There is now a base-R function \code{\link{transform}} for adding new variables to a data frame, so I have added \code{transform} as a synonym for \code{update} for survey objects. } \value{ A survey design object } \seealso{\code{\link{svydesign}}, \code{\link{svrepdesign}}, \code{\link{twophase}}} \examples{ data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) dstrat<-update(dstrat, apidiff=api00-api99) svymean(~api99+api00+apidiff, dstrat) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/svyglm.Rd0000755000176200001440000001455313120055374014205 0ustar liggesusers\name{svyglm} \alias{svyglm} \alias{svyglm.survey.design} \alias{svyglm.svyrep.design} \alias{summary.svyglm} \alias{summary.svrepglm} \alias{vcov.svyglm} \alias{residuals.svyglm} \alias{residuals.svrepglm} \alias{predict.svyglm} \alias{predict.svrepglm} \alias{coef.svyglm} %- Also NEED an `\alias' for EACH other topic documented here. \title{Survey-weighted generalised linear models.} \description{ Fit a generalised linear model to data from a complex survey design, with inverse-probability weighting and design-based standard errors. } \usage{ \method{svyglm}{survey.design}(formula, design, subset=NULL, ...) \method{svyglm}{svyrep.design}(formula, design, subset=NULL, ..., rho=NULL, return.replicates=FALSE, na.action,multicore=getOption("survey.multicore")) \method{summary}{svyglm}(object, correlation = FALSE, df.resid=NULL, ...) \method{predict}{svyglm}(object,newdata=NULL,total=NULL, type=c("link","response","terms"), se.fit=(type != "terms"),vcov=FALSE,...) \method{predict}{svrepglm}(object,newdata=NULL,total=NULL, type=c("link","response","terms"), se.fit=(type != "terms"),vcov=FALSE, return.replicates=!is.null(object$replicates),...) } %- maybe also `usage' for other objects documented here. \arguments{ \item{formula}{Model formula} \item{design}{Survey design from \code{\link{svydesign}} or \code{\link{svrepdesign}}. Must contain all variables in the formula} \item{subset}{Expression to select a subpopulation} \item{\dots}{Other arguments passed to \code{glm} or \code{summary.glm} } \item{rho}{For replicate BRR designs, to specify the parameter for Fay's variance method, giving weights of \code{rho} and \code{2-rho}} \item{return.replicates}{Return the replicates as the \code{replicates} component of the result? (for \code{predict}, only possible if they were computed in the \code{svyglm} fit)} \item{object}{A \code{svyglm} object} \item{correlation}{Include the correlation matrix of parameters?} \item{na.action}{Handling of NAs} \item{multicore}{Use the \code{multicore} package to distribute replicates across processors?} \item{df.resid}{Optional denominator degrees of freedom for Wald tests} \item{newdata}{new data frame for prediction} \item{total}{population size when predicting population total} \item{type}{linear predictor (\code{link}) or response} \item{se.fit}{if \code{TRUE}, return variances of predictions} \item{vcov}{if \code{TRUE} and \code{se=TRUE} return full variance-covariance matrix of predictions} } \details{ There is no \code{anova} method for \code{svyglm} as the models are not fitted by maximum likelihood. The function \code{\link{regTermTest}} may be useful for testing sets of regression terms. For binomial and Poisson families use \code{family=quasibinomial()} and \code{family=quasipoisson()} to avoid a warning about non-integer numbers of successes. The `quasi' versions of the family objects give the same point estimates and standard errors and do not give the warning. If \code{df.resid} is not specified the df for the null model is computed by \code{\link{degf}} and the residual df computed by subtraction. This is recommended by Korn and Graubard and is correct for PSU-level covariates but is potentially very conservative for individual-level covariates. To get tests based on a Normal distribution use \code{df.resid=Inf}, and to use number of PSUs-number of strata, specify \code{df.resid=degf(design)}. Parallel processing with \code{multicore=TRUE} is helpful only for fairly large data sets and on computers with sufficient memory. It may be incompatible with GUIs, although the Mac Aqua GUI appears to be safe. \code{predict} gives fitted values and sampling variability for specific new values of covariates. When \code{newdata} are the population mean it gives the regression estimator of the mean, and when \code{newdata} are the population totals and \code{total} is specified it gives the regression estimator of the population total. Regression estimators of mean and total can also be obtained with \code{\link{calibrate}}. } \value{ \code{svyglm} returns an object of class \code{svyglm}. The \code{predict} method returns an object of class \code{svystat}} \author{Thomas Lumley} \seealso{ \code{\link{glm}}, which is used to do most of the work. \code{\link{regTermTest}}, for multiparameter tests \code{\link{calibrate}}, for an alternative way to specify regression estimators of population totals or means \code{\link{svyttest}} for one-sample and two-sample t-tests. } \references{ Lumley T, Scott A (2017) "Fitting Regression Models to Survey Data" Statistical Science 32: 265-278 } \examples{ data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) rstrat<-as.svrepdesign(dstrat) rclus2<-as.svrepdesign(dclus2) summary(svyglm(api00~ell+meals+mobility, design=dstrat)) summary(svyglm(api00~ell+meals+mobility, design=dclus2)) summary(svyglm(api00~ell+meals+mobility, design=rstrat)) summary(svyglm(api00~ell+meals+mobility, design=rclus2)) ## use quasibinomial, quasipoisson to avoid warning messages summary(svyglm(sch.wide~ell+meals+mobility, design=dstrat, family=quasibinomial())) ## Compare regression and ratio estimation of totals api.ratio <- svyratio(~api.stu,~enroll, design=dstrat) pop<-data.frame(enroll=sum(apipop$enroll, na.rm=TRUE)) npop <- nrow(apipop) predict(api.ratio, pop$enroll) ## regression estimator is less efficient api.reg <- svyglm(api.stu~enroll, design=dstrat) predict(api.reg, newdata=pop, total=npop) ## same as calibration estimator svytotal(~api.stu, calibrate(dstrat, ~enroll, pop=c(npop, pop$enroll))) ## svyglm can also reproduce the ratio estimator api.reg2 <- svyglm(api.stu~enroll-1, design=dstrat, family=quasi(link="identity",var="mu")) predict(api.reg2, newdata=pop, total=npop) ## higher efficiency by modelling variance better api.reg3 <- svyglm(api.stu~enroll-1, design=dstrat, family=quasi(link="identity",var="mu^3")) predict(api.reg3, newdata=pop, total=npop) ## true value sum(apipop$api.stu) } \keyword{regression}% at least one, from doc/KEYWORDS \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svyquantile.Rd0000755000176200001440000001576312242746122015256 0ustar liggesusers\name{svyquantile} \alias{svyquantile} \alias{print.svyquantile} \alias{SE.svyquantile} \alias{svyquantile.survey.design} \alias{svyquantile.svyrep.design} %- Also NEED an `\alias' for EACH other topic documented here. \title{Quantiles for sample surveys} \description{ Compute quantiles for data from complex surveys. } \usage{ \method{svyquantile}{survey.design}(x, design, quantiles, alpha=0.05, ci=FALSE, method = "linear", f = 1, interval.type=c("Wald","score","betaWald"), na.rm=FALSE,se=ci, ties=c("discrete","rounded"), df=Inf,...) \method{svyquantile}{svyrep.design}(x, design, quantiles, method ="linear", interval.type=c("probability","quantile"), f = 1, return.replicates=FALSE, ties=c("discrete","rounded"),na.rm=FALSE,...) \method{SE}{svyquantile}(object,...) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{A formula, vector or matrix} \item{design}{\code{survey.design} or \code{svyrep.design} object} \item{quantiles}{Quantiles to estimate} \item{method}{see \code{\link{approxfun}}} \item{f}{see \code{\link{approxfun}}} \item{ci}{Compute a confidence interval? (relatively slow; needed for \code{\link{svyby}})} \item{se}{Compute standard errors from the confidence interval length?} \item{alpha}{Level for confidence interval} \item{interval.type}{See Details below} \item{ties}{See Details below} \item{df}{Degrees of freedom for a t-distribution. \code{Inf} requests a Normal distribution, \code{NULL} uses \code{\link{degf}}. Not relevant for \code{type="betaWald"}} \item{return.replicates}{Return the replicate means?} \item{na.rm}{Remove \code{NA}s?} \item{...}{arguments for future expansion} \item{object}{Object returned by \code{svyquantile.survey.design}} } \details{ The definition of the CDF and thus of the quantiles is ambiguous in the presence of ties. With \code{ties="discrete"} the data are treated as genuinely discrete, so the CDF has vertical steps at tied observations. With \code{ties="rounded"} all the weights for tied observations are summed and the CDF interpolates linearly between distinct observed values, and so is a continuous function. Combining \code{interval.type="betaWald"} and \code{ties="discrete"} is (close to) the proposal of Shah and Vaish(2006) used in some versions of SUDAAN. Interval estimation for quantiles is complicated, because the influence function is not continuous. Linearisation cannot be used directly, and computing the variance of replicates is valid only for some designs (eg BRR, but not jackknife). The \code{interval.type} option controls how the intervals are computed. For \code{survey.design} objects the default is \code{interval.type="Wald"}. A 95\% Wald confidence interval is constructed for the proportion below the estimated quantile. The inverse of the estimated CDF is used to map this to a confidence interval for the quantile. This is the method of Woodruff (1952). For \code{"betaWald"} the same procedure is used, but the confidence interval for the proportion is computed using the exact binomial cdf with an effective sample size proposed by Korn & Graubard (1998). If \code{interval.type="score"} we use a method described by Binder (1991) and due originally to Francisco and Fuller (1986), which corresponds to inverting a robust score test. At the upper and lower limits of the confidence interval, a test of the null hypothesis that the cumulative distribution function is equal to the target quantile just rejects. This was the default before version 2.9. It is much slower than \code{"Wald"}, and Dorfman & Valliant (1993) suggest it is not any more accurate. Standard errors are computed from these confidence intervals by dividing the confidence interval length by \code{2*qnorm(alpha/2)}. For replicate-weight designs, ordinary replication-based standard errors are valid for BRR and Fay's method, and for some bootstrap-based designs, but not for jackknife-based designs. \code{interval.type="quantile"} gives these replication-based standard errors. The default, \code{interval.type="probability"} computes confidence on the probability scale and then transforms back to quantiles, the equivalent of \code{interval.type="Wald"} for \code{survey.design} objects (with \code{alpha=0.05}). There is a \code{confint} method for \code{svyquantile} objects; it simply extracts the pre-computed confidence interval. } \value{ returns a list whose first component is the quantiles and second component is the confidence intervals. For replicate weight designs, returns an object of class \code{svyrepstat}. } \author{Thomas Lumley} \seealso{ \code{\link{svykm}} for quantiles of survival curves \code{\link{svyciprop}} for confidence intervals on proportions. } \references{ Binder DA (1991) Use of estimating functions for interval estimation from complex surveys. \emph{Proceedings of the ASA Survey Research Methods Section} 1991: 34-42 Dorfman A, Valliant R (1993) Quantile variance estimators in complex surveys. Proceedings of the ASA Survey Research Methods Section. 1993: 866-871 Korn EL, Graubard BI. (1998) Confidence Intervals For Proportions With Small Expected Number of Positive Counts Estimated From Survey Data. Survey Methodology 23:193-201. Francisco CA, Fuller WA (1986) Estimation of the distribution function with a complex survey. Technical Report, Iowa State University. Shao J, Tu D (1995) \emph{The Jackknife and Bootstrap}. Springer. Shah BV, Vaish AK (2006) Confidence Intervals for Quantile Estimation from Complex Survey Data. Proceedings of the Section on Survey Research Methods. Woodruff RS (1952) Confidence intervals for medians and other position measures. JASA 57, 622-627. } \examples{ data(api) ## population quantile(apipop$api00,c(.25,.5,.75)) ## one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svyquantile(~api00, dclus1, c(.25,.5,.75),ci=TRUE) svyquantile(~api00, dclus1, c(.25,.5,.75),ci=TRUE,interval.type="betaWald") svyquantile(~api00, dclus1, c(.25,.5,.75),ci=TRUE,df=NULL) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) (qapi<-svyquantile(~api00, dclus1, c(.25,.5,.75),ci=TRUE, interval.type="score")) SE(qapi) #stratified sample dstrat<-svydesign(id=~1, strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) svyquantile(~api00, dstrat, c(.25,.5,.75),ci=TRUE) #stratified sample, replicate weights # interval="probability" is necessary for jackknife weights rstrat<-as.svrepdesign(dstrat) svyquantile(~api00, rstrat, c(.25,.5,.75), interval.type="probability") # BRR method data(scd) repweights<-2*cbind(c(1,0,1,0,1,0), c(1,0,0,1,0,1), c(0,1,1,0,0,1), c(0,1,0,1,1,0)) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights) svyquantile(~arrests+alive, design=scdrep, quantile=0.5, interval.type="quantile") } \keyword{univar}% at least one, from doc/KEYWORDS \keyword{survey}% __ONLY ONE__ keyword per line survey/man/rake.Rd0000755000176200001440000000773612242746122013615 0ustar liggesusers\name{rake} \alias{rake} %- Also NEED an '\alias' for EACH other topic documented here. \title{Raking of replicate weight design} \description{ Raking uses iterative post-stratification to match marginal distributions of a survey sample to known population margins. } \usage{ rake(design, sample.margins, population.margins, control = list(maxit = 10, epsilon = 1, verbose=FALSE), compress=NULL) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{design}{A survey object } \item{sample.margins}{list of formulas or data frames describing sample margins, which must not contain missing values} \item{population.margins}{list of tables or data frames describing corresponding population margins } \item{control}{\code{maxit} controls the number of iterations. Convergence is declared if the maximum change in a table entry is less than \code{epsilon}. If \code{epsilon<1} it is taken to be a fraction of the total sampling weight. } \item{compress}{If \code{design} has replicate weights, attempt to compress the new replicate weight matrix? When \code{NULL}, will attempt to compress if the original weight matrix was compressed} } \details{ The \code{sample.margins} should be in a format suitable for \code{\link{postStratify}}. Raking (aka iterative proportional fitting) is known to converge for any table without zeros, and for any table with zeros for which there is a joint distribution with the given margins and the same pattern of zeros. The `margins' need not be one-dimensional. The algorithm works by repeated calls to \code{\link{postStratify}} (iterative proportional fitting), which is efficient for large multiway tables. For small tables \code{\link{calibrate}} will be faster, and also allows raking to population totals for continuous variables, and raking with bounded weights. } \value{ A raked survey design. } \seealso{ \code{\link{postStratify}}, \code{\link{compressWeights}} \code{\link{calibrate}} for other ways to use auxiliary information. } \examples{ data(api) dclus1 <- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1 <- as.svrepdesign(dclus1) svymean(~api00, rclus1) svytotal(~enroll, rclus1) ## population marginal totals for each stratum pop.types <- data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018)) pop.schwide <- data.frame(sch.wide=c("No","Yes"), Freq=c(1072,5122)) rclus1r <- rake(rclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) svymean(~api00, rclus1r) svytotal(~enroll, rclus1r) ## marginal totals correspond to population xtabs(~stype, apipop) svytable(~stype, rclus1r, round=TRUE) xtabs(~sch.wide, apipop) svytable(~sch.wide, rclus1r, round=TRUE) ## joint totals don't correspond xtabs(~stype+sch.wide, apipop) svytable(~stype+sch.wide, rclus1r, round=TRUE) ## Do it for a design without replicate weights dclus1r<-rake(dclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) svymean(~api00, dclus1r) svytotal(~enroll, dclus1r) ## compare to raking with calibrate() dclus1gr<-calibrate(dclus1, ~stype+sch.wide, pop=c(6194, 755,1018,5122), calfun="raking") svymean(~stype+api00, dclus1r) svymean(~stype+api00, dclus1gr) ## compare to joint post-stratification ## (only possible if joint population table is known) ## pop.table <- xtabs(~stype+sch.wide,apipop) rclus1ps <- postStratify(rclus1, ~stype+sch.wide, pop.table) svytable(~stype+sch.wide, rclus1ps, round=TRUE) svymean(~api00, rclus1ps) svytotal(~enroll, rclus1ps) ## Example of raking with partial joint distributions pop.imp<-data.frame(comp.imp=c("No","Yes"),Freq=c(1712,4482)) dclus1r2<-rake(dclus1, list(~stype+sch.wide, ~comp.imp), list(pop.table, pop.imp)) svymean(~api00, dclus1r2) ## compare to calibrate() syntax with tables dclus1r2<-calibrate(dclus1, formula=list(~stype+sch.wide, ~comp.imp), population=list(pop.table, pop.imp),calfun="raking") svymean(~api00, dclus1r2) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip} survey/man/svy.varcoef.Rd0000755000176200001440000000132712242746122015126 0ustar liggesusers\name{svy.varcoef} \alias{svy.varcoef} %- Also NEED an `\alias' for EACH other topic documented here. \title{Sandwich variance estimator for glms} \description{ Computes the sandwich variance estimator for a generalised linear model fitted to data from a complex sample survey. Designed to be used internally by \code{\link{svyglm}}. } \usage{ svy.varcoef(glm.object, design) } \arguments{ \item{glm.object}{A \code{\link{glm}} object} \item{design}{A \code{survey.design} object } } \value{ A variance matrix } \author{ Thomas Lumley} \seealso{\code{\link{svyglm}},\code{\link{svydesign}}, \code{\link{svyCprod}} } \keyword{regression}% at least one, from doc/KEYWORDS \keyword{survey}% __ONLY ONE__ keyword per line survey/man/svyplot.Rd0000755000176200001440000001026213115662425014402 0ustar liggesusers\name{svyplot} \alias{svyplot} \alias{svyplot.default} %- Also NEED an '\alias' for EACH other topic documented here. \title{Plots for survey data } \description{ Because observations in survey samples may represent very different numbers of units in the population ordinary plots can be misleading. The \code{svyplot} function produces scatterplots adjusted in various ways for sampling weights. } \usage{ svyplot(formula, design,...) \method{svyplot}{default}(formula, design, style = c("bubble", "hex", "grayhex","subsample","transparent"), sample.size = 500, subset = NULL, legend = 1, inches = 0.05, amount=NULL, basecol="black", alpha=c(0, 0.8),xbins=30,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{A model formula} \item{design}{ A survey object (svydesign or svrepdesign)} \item{style}{See Details below} \item{sample.size}{For \code{style="subsample"}} \item{subset}{expression using variables in the design object} \item{legend}{For \code{style="hex"} or \code{"grayhex"}} \item{inches}{Scale for bubble plots} \item{amount}{list with \code{x} and \code{y} components for amount of jittering to use in subsample plots, or \code{NULL} for the default amount} \item{basecol}{base color for transparent plots, or a function to compute the color (see below), or color for bubble plots} \item{alpha}{minimum and maximum opacity for transparent plots} \item{xbins}{Number of (x-axis) bins for hexagonal binning} \item{\dots}{Passed to \code{plot} methods} } \details{ Bubble plots are scatterplots with circles whose area is proportional to the sampling weight. The two "hex" styles produce hexagonal binning scatterplots, and require the \code{hexbin} package from Bioconductor. The "transparent" style plots points with opacity proportional to sampling weight. The \code{subsample} method uses the sampling weights to create a sample from approximately the population distribution and passes this to \code{\link{plot}} Bubble plots are suited to small surveys, hexagonal binning and transparency to large surveys where plotting all the points would result in too much overlap. \code{basecol} can be a function taking one data frame argument, which will be passed the data frame of variables from the survey object. This could be memory-intensive for large data sets. } \value{ None } \seealso{ \code{\link{symbols}} for other options (such as colour) for bubble plots. \code{\link{svytable}} for plots of discrete data. } \references{ Korn EL, Graubard BI (1998) "Scatterplots with Survey Data" The American Statistician 52: 58-69 Lumley T, Scott A (2017) "Fitting Regression Models to Survey Data" Statistical Science 32: 265-278 } \examples{ data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) svyplot(api00~api99, design=dstrat, style="bubble") svyplot(api00~api99, design=dstrat, style="transparent",pch=19) ## these two require the hexbin package svyplot(api00~api99, design=dstrat, style="hex", xlab="1999 API",ylab="2000 API") svyplot(api00~api99, design=dstrat, style="grayhex",legend=0) dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2, fpc=~fpc1+fpc2) svyplot(api00~api99, design=dclus2, style="subsample") svyplot(api00~api99, design=dclus2, style="subsample", amount=list(x=25,y=25)) svyplot(api00~api99, design=dstrat, basecol=function(df){c("goldenrod","tomato","sienna")[as.numeric(df$stype)]}, style="transparent",pch=19,alpha=c(0,1)) legend("topleft",col=c("goldenrod","tomato","sienna"), pch=19, legend=c("E","H","M")) ## For discrete data, estimate a population table and plot the table. plot(svytable(~sch.wide+comp.imp+stype,design=dstrat)) fourfoldplot(svytable(~sch.wide+comp.imp+stype,design=dstrat,round=TRUE)) ## To draw on a hexbin plot you need grid graphics, eg, library(grid) h<-svyplot(api00~api99, design=dstrat, style="hex", xlab="1999 API",ylab="2000 API") s<-svysmooth(api00~api99,design=dstrat) grid.polyline(s$api99$x,s$api99$y,vp=h$plot.vp@hexVp.on,default.units="native", gp=gpar(col="red",lwd=2)) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{hplot}% __ONLY ONE__ keyword per line survey/man/mu284.Rd0000644000176200001440000000174312242746122013537 0ustar liggesusers\name{mu284} \alias{mu284} \docType{data} \title{Two-stage sample from MU284} \description{ The MU284 population comes from Sarndal et al, and the complete data are available from Statlib. These data are a two-stage sample from the population, analyzed on page 143 of the book. } \usage{data(mu284)} \format{ A data frame with 15 observations on the following 5 variables. \describe{ \item{\code{id1}}{identifier for PSU} \item{\code{n1}}{number of PSUs in population} \item{\code{id2}}{identifier for second-stage unit} \item{\code{y1}}{variable to be analysed} \item{\code{n2}}{number of second-stage units in this PSU} } } \source{ Carl Erik Sarndal, Bengt Swensson, Jan Wretman. (1991) "Model Assisted Survey Sampling" Springer. } \references{ Full MU284 population at \url{http://lib.stat.cmu.edu/datasets/mu284} } \examples{ data(mu284) (dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284)) (ytotal<-svytotal(~y1, dmu284)) vcov(ytotal) } \keyword{datasets} survey/man/trimWeights.Rd0000644000176200001440000000421112242746122015157 0ustar liggesusers\name{trimWeights} \Rdversion{1.1} \alias{trimWeights} \alias{trimWeights.svyrep.design} \alias{trimWeights.survey.design2} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Trim sampling weights } \description{ Trims very high or very low sampling weights to reduce the influence of outlying observations. In a replicate-weight design object, the replicate weights are also trimmed. The total amount trimmed is divided among the observations that were not trimmed, so that the total weight remains the same. } \usage{ trimWeights(design, upper = Inf, lower = -Inf, ...) \method{trimWeights}{survey.design2}(design, upper = Inf, lower = -Inf, strict=FALSE,...) \method{trimWeights}{svyrep.design}(design, upper = Inf, lower = -Inf,compress=FALSE,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{design}{ A survey design object } \item{upper}{ Upper bound for weights } \item{lower}{ Lower bound for weights } \item{strict}{ The reapportionment of the `trimmings' from the weights can push other weights over the limits. If \code{trim=TRUE} the function calls itself recursively to prevent this. } \item{compress}{ Compress the replicate weights after trimming. } \item{\dots}{ Other arguments for future expansion } } \value{ A new survey design object with trimmed weights. } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{\link{calibrate}} has a \code{trim} option for trimming the calibration adjustments. } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018, api99=3914069) dclus1g<-calibrate(dclus1, ~stype+api99, pop.totals) summary(weights(dclus1g)) dclus1t<-trimWeights(dclus1g,lower=20, upper=45) summary(weights(dclus1t)) dclus1tt<-trimWeights(dclus1g, lower=20, upper=45,strict=TRUE) summary(weights(dclus1tt)) svymean(~api99+api00+stype, dclus1g) svymean(~api99+api00+stype, dclus1t) svymean(~api99+api00+stype, dclus1tt) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/svycdf.Rd0000644000176200001440000000355512242746122014161 0ustar liggesusers\name{svycdf} \alias{svycdf} \alias{print.svycdf} \alias{plot.svycdf} %- Also NEED an '\alias' for EACH other topic documented here. \title{Cumulative Distribution Function} \description{ Estimates the population cumulative distribution function for specified variables. In contrast to \code{\link{svyquantile}}, this does not do any interpolation: the result is a right-continuous step function. } \usage{ svycdf(formula, design, na.rm = TRUE,...) \method{print}{svycdf}(x,...) \method{plot}{svycdf}(x,xlab=NULL,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{one-sided formula giving variables from the design object } \item{design}{survey design object } \item{na.rm}{remove missing data (case-wise deletion)?} \item{...}{other arguments to \code{\link{plot.stepfun}}} \item{x}{object of class \code{svycdf}} \item{xlab}{a vector of x-axis labels or \code{NULL} for the default labels} } \value{ An object of class \code{svycdf}, which is a list of step functions (of class \code{\link{stepfun}}) } \seealso{ \code{\link{svyquantile}}, \code{\link{svyhist}}, \code{\link{plot.stepfun}}} \examples{ data(api) dstrat <- svydesign(id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc) cdf.est<-svycdf(~enroll+api00+api99, dstrat) cdf.est ## function cdf.est[[1]] ## evaluate the function cdf.est[[1]](800) cdf.est[[2]](800) ## compare to population and sample CDFs. opar<-par(mfrow=c(2,1)) cdf.pop<-ecdf(apipop$enroll) cdf.samp<-ecdf(apistrat$enroll) plot(cdf.pop,main="Population vs sample", xlab="Enrollment") lines(cdf.samp,col.points="red") plot(cdf.pop, main="Population vs estimate", xlab="Enrollment") lines(cdf.est[[1]],col.points="red") par(opar) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{hplot}% __ONLY ONE__ keyword per line survey/man/fpc.Rd0000755000176200001440000000305612372242764013441 0ustar liggesusers\name{fpc} \alias{fpc} \non_function{} \title{Small survey example} \usage{data(fpc)} \description{ The \code{fpc} data frame has 8 rows and 6 columns. It is artificial data to illustrate survey sampling estimators. } \format{ This data frame contains the following columns: \describe{ \item{stratid}{Stratum ids} \item{psuid}{Sampling unit ids} \item{weight}{Sampling weights} \item{nh}{number sampled per stratum} \item{Nh}{population size per stratum} \item{x}{data} } } \source{ \url{http://www.stata-press.com/data/r7/fpc.dta} } \examples{ data(fpc) fpc withoutfpc<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, variables=~x, data=fpc, nest=TRUE) withoutfpc svymean(~x, withoutfpc) withfpc<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, fpc=~Nh, variables=~x, data=fpc, nest=TRUE) withfpc svymean(~x, withfpc) ## Other equivalent forms withfpc<-svydesign(prob=~I(1/weight), ids=~psuid, strata=~stratid, fpc=~Nh, variables=~x, data=fpc, nest=TRUE) svymean(~x, withfpc) withfpc<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, fpc=~I(nh/Nh), variables=~x, data=fpc, nest=TRUE) svymean(~x, withfpc) withfpc<-svydesign(weights=~weight, ids=~interaction(stratid,psuid), strata=~stratid, fpc=~I(nh/Nh), variables=~x, data=fpc) svymean(~x, withfpc) withfpc<-svydesign(ids=~psuid, strata=~stratid, fpc=~Nh, variables=~x,data=fpc,nest=TRUE) svymean(~x, withfpc) withfpc<-svydesign(ids=~psuid, strata=~stratid, fpc=~I(nh/Nh), variables=~x, data=fpc, nest=TRUE) svymean(~x, withfpc) } \keyword{datasets} survey/man/dimnames.DBIsvydesign.Rd0000644000176200001440000000317112242746122017003 0ustar liggesusers\name{dimnames.DBIsvydesign} \alias{dimnames.DBIsvydesign} \alias{dimnames.ODBCsvydesign} \alias{dimnames.survey.design} \alias{dimnames.svyrep.design} \alias{dimnames.twophase} \alias{dimnames.svyimputationList} \alias{dim.DBIsvydesign} \alias{dim.ODBCsvydesign} \alias{dim.survey.design} \alias{dim.twophase} \alias{dim.svyimputationList} \alias{dim.svyrep.design} %- Also NEED an '\alias' for EACH other topic documented here. \title{Dimensions of survey designs} \description{ \code{dimnames} returns variable names and row names for the data variables in a design object and \code{dim} returns dimensions. For multiple imputation designs there is a third dimension giving the number of imputations. For database-backed designs the second dimension includes variables defined by \code{update}. The first dimension excludes observations with zero weight. } \usage{ \method{dim}{survey.design}(x) \method{dim}{svyimputationList}(x) \method{dimnames}{survey.design}(x) \method{dimnames}{DBIsvydesign}(x) \method{dimnames}{ODBCsvydesign}(x) \method{dimnames}{svyimputationList}(x) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Design object} } \value{ A vector of numbers for \code{dim}, a list of vectors of strings for \code{dimnames}. } \seealso{ \code{\link{update.DBIsvydesign}}, \code{\link{with.svyimputationList}}} \examples{ data(api) dclus1 <- svydesign(ids=~dnum,weights=~pw,data=apiclus1,fpc=~fpc) dim(dclus1) dimnames(dclus1) colnames(dclus1) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{manip}% __ONLY ONE__ keyword per line survey/man/api.Rd0000755000176200001440000001054713101467321013432 0ustar liggesusers\name{api} \alias{api} \alias{apipop} \alias{apiclus1} \alias{apiclus2} \alias{apistrat} \alias{apisrs} \docType{data} \title{Student performance in California schools} \description{ The Academic Performance Index is computed for all California schools based on standardised testing of students. The data sets contain information for all schools with at least 100 students and for various probability samples of the data. } \usage{ data(api) } \format{ The full population data in \code{apipop} are a data frame with 6194 observations on the following 37 variables. \describe{ \item{cds}{Unique identifier} \item{stype}{Elementary/Middle/High School} \item{name}{School name (15 characters)} \item{sname}{School name (40 characters)} \item{snum}{School number} \item{dname}{District name} \item{dnum}{District number} \item{cname}{County name} \item{cnum}{County number} \item{flag}{reason for missing data} \item{pcttest}{percentage of students tested} \item{api00}{API in 2000} \item{api99}{API in 1999} \item{target}{target for change in API} \item{growth}{Change in API} \item{sch.wide}{Met school-wide growth target?} \item{comp.imp}{Met Comparable Improvement target} \item{both}{Met both targets} \item{awards}{Eligible for awards program} \item{meals}{Percentage of students eligible for subsidized meals} \item{ell}{`English Language Learners' (percent)} \item{yr.rnd}{Year-round school} \item{mobility}{percentage of students for whom this is the first year at the school} \item{acs.k3}{average class size years K-3} \item{acs.46}{average class size years 4-6} \item{acs.core}{Number of core academic courses} \item{pct.resp}{percent where parental education level is known} \item{not.hsg}{percent parents not high-school graduates} \item{hsg}{percent parents who are high-school graduates} \item{some.col}{percent parents with some college} \item{col.grad}{percent parents with college degree} \item{grad.sch}{percent parents with postgraduate education} \item{avg.ed}{average parental education level} \item{full}{percent fully qualified teachers} \item{emer}{percent teachers with emergency qualifications} \item{enroll}{number of students enrolled} \item{api.stu}{number of students tested.} } The other data sets contain additional variables \code{pw} for sampling weights and \code{fpc} to compute finite population corrections to variance. } \details{ \code{apipop} is the entire population, \code{apisrs} is a simple random sample, \code{apiclus1} is a cluster sample of school districts, \code{apistrat} is a sample stratified by \code{stype}, and \code{apiclus2} is a two-stage cluster sample of schools within districts. The sampling weights in \code{apiclus1} are incorrect (the weight should be 757/15) but are as obtained from UCLA. } \source{ Data were obtained from the survey sampling help pages of UCLA Academic Technology Services; these pages are no longer on line. } \references{ The API program and original data files are at \url{http://api.cde.ca.gov/} } \examples{ library(survey) data(api) mean(apipop$api00) sum(apipop$enroll, na.rm=TRUE) #stratified sample dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) summary(dstrat) svymean(~api00, dstrat) svytotal(~enroll, dstrat, na.rm=TRUE) # one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) summary(dclus1) svymean(~api00, dclus1) svytotal(~enroll, dclus1, na.rm=TRUE) # two-stage cluster sample dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) summary(dclus2) svymean(~api00, dclus2) svytotal(~enroll, dclus2, na.rm=TRUE) # two-stage `with replacement' dclus2wr<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) summary(dclus2wr) svymean(~api00, dclus2wr) svytotal(~enroll, dclus2wr, na.rm=TRUE) # convert to replicate weights rclus1<-as.svrepdesign(dclus1) summary(rclus1) svymean(~api00, rclus1) svytotal(~enroll, rclus1, na.rm=TRUE) # post-stratify on school type pop.types<-xtabs(~stype, data=apipop) rclus1p<-postStratify(rclus1, ~stype, pop.types) dclus1p<-postStratify(dclus1, ~stype, pop.types) summary(dclus1p) summary(rclus1p) svymean(~api00, dclus1p) svytotal(~enroll, dclus1p, na.rm=TRUE) svymean(~api00, rclus1p) svytotal(~enroll, rclus1p, na.rm=TRUE) } \keyword{datasets} survey/man/psrsq.Rd0000644000176200001440000000256413116661662014040 0ustar liggesusers\name{psrsq} \alias{psrsq} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Pseudo-Rsquareds } \description{ Compute the Nagelkerke and Cox--Snell pseudo-rsquared statistics, primarily for logistic regression. A generic function with methods for \code{glm} and \code{\link{svyglm}}. The method for \code{svyglm} objects uses the design-based estimators described by Lumley (2017) } \usage{ psrsq(object, method = c("Cox-Snell", "Nagelkerke"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{ A regression model (\code{glm} or \code{svyglm}) } \item{method}{ Which statistic to compute } \item{\dots}{ For future expansion } } \value{ Numeric value } \references{ Lumley T (2017) "Pseudo-R2 statistics under complex sampling" Australian and New Zealand Journal of Statistics DOI: 10.1111/anzs.12187 (preprint: \url{https://arxiv.org/abs/1701.07745}) } \seealso{ \code{\link{AIC.svyglm}} } \examples{ data(api) dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) model1<-svyglm(I(sch.wide=="Yes")~ell+meals+mobility+as.numeric(stype), design=dclus2, family=quasibinomial()) psrsq(model1, type="Nagelkerke") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey }% use one of RShowDoc("KEYWORDS") \keyword{regression }% __ONLY ONE__ keyword per line survey/man/pchisqsum.Rd0000644000176200001440000001056013115662425014674 0ustar liggesusers\name{pchisqsum} \alias{pchisqsum} \alias{pFsum} %- Also NEED an '\alias' for EACH other topic documented here. \title{Distribution of quadratic forms } \description{ The distribution of a quadratic form in p standard Normal variables is a linear combination of p chi-squared distributions with 1df. When there is uncertainty about the variance, a reasonable model for the distribution is a linear combination of F distributions with the same denominator. } \usage{ pchisqsum(x, df, a, lower.tail = TRUE, method = c("satterthwaite", "integration","saddlepoint")) pFsum(x, df, a, ddf=Inf,lower.tail = TRUE, method = c("saddlepoint","integration","satterthwaite"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Observed values} \item{df}{Vector of degrees of freedom} \item{a}{Vector of coefficients } \item{ddf}{Denominator degrees of freedom} \item{lower.tail}{ lower or upper tail? } \item{method}{See Details below} \item{\dots}{arguments to \code{pchisqsum}} } \value{ Vector of cumulative probabilities } \details{ The \code{"satterthwaite"} method uses Satterthwaite's approximation, and this is also used as a fallback for the other methods. The accuracy is usually good, but is more variable depending on \code{a} than the other methods and is anticonservative in the right tail (eg for upper tail probabilities less than \code{10^-5}). The Satterthwaite approximation requires all \code{a>0}. \code{"integration"} requires the \code{CompQuadForm} package. For \code{pchisqsum} it uses Farebrother's algorithm if all \code{a>0}. For \code{pFsum} or when some \code{a<0} it inverts the characteristic function using the algorithm of Davies (1980). These algorithms are highly accurate for the lower tail probability, but they obtain the upper tail probability by subtraction from 1 and so fail completely when the upper tail probability is comparable to machine epsilon or smaller. If the \code{CompQuadForm} package is not present, a warning is given and the saddlepoint approximation is used. \code{"saddlepoint"} uses Kuonen's saddlepoint approximation. This is moderately accurate even very far out in the upper tail or with some \code{a=0} and does not require any additional packages. It is implemented in pure R and so is slower than the \code{"integration"} method. The distribution in \code{pFsum} is standardised so that a likelihood ratio test can use the same \code{x} value as in \code{pchisqsum}. That is, the linear combination of chi-squareds is multiplied by \code{ddf} and then divided by an independent chi-squared with \code{ddf} degrees of freedom. } \references{ Davies RB (1973). "Numerical inversion of a characteristic function" Biometrika 60:415-7 Davies RB (1980) "Algorithm AS 155: The Distribution of a Linear Combination of chi-squared Random Variables" Applied Statistics,Vol. 29, No. 3 (1980), pp. 323-333 P. Duchesne, P. Lafaye de Micheaux (2010) "Computing the distribution of quadratic forms: Further comparisons between the Liu-Tang-Zhang approximation and exact methods", Computational Statistics and Data Analysis, Volume 54, (2010), 858-862 Farebrother R.W. (1984) "Algorithm AS 204: The distribution of a Positive Linear Combination of chi-squared random variables". Applied Statistics Vol. 33, No. 3 (1984), p. 332-339 Kuonen D (1999) Saddlepoint Approximations for Distributions of Quadratic Forms in Normal Variables. Biometrika, Vol. 86, No. 4 (Dec., 1999), pp. 929-935 } \seealso{\code{\link{pchisq}}} \examples{ x <- 2.7*rnorm(1001)^2+rnorm(1001)^2+0.3*rnorm(1001)^2 x.thin<-sort(x)[1+(0:50)*20] p.invert<-pchisqsum(x.thin,df=c(1,1,1),a=c(2.7,1,.3),method="int" ,lower=FALSE) p.satt<-pchisqsum(x.thin,df=c(1,1,1),a=c(2.7,1,.3),method="satt",lower=FALSE) p.sadd<-pchisqsum(x.thin,df=c(1,1,1),a=c(2.7,1,.3),method="sad",lower=FALSE) plot(p.invert, p.satt,type="l",log="xy") abline(0,1,lty=2,col="purple") plot(p.invert, p.sadd,type="l",log="xy") abline(0,1,lty=2,col="purple") pchisqsum(20, df=c(1,1,1),a=c(2.7,1,.3), lower.tail=FALSE,method="sad") pFsum(20, df=c(1,1,1),a=c(2.7,1,.3), ddf=49,lower.tail=FALSE,method="sad") pFsum(20, df=c(1,1,1),a=c(2.7,1,.3), ddf=1000,lower.tail=FALSE,method="sad") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{distribution}% __ONLY ONE__ keyword per line survey/man/svyratio.Rd0000755000176200001440000001154612242746122014545 0ustar liggesusers\name{svyratio} \alias{svyratio} \alias{print.svyratio} \alias{print.svyratio_separate} \alias{svyratio.svyrep.design} \alias{svyratio.survey.design} \alias{svyratio.survey.design2} \alias{svyratio.twophase} \alias{coef.svyratio} \alias{SE.svyratio} \alias{predict.svyratio} \alias{predict.svyratio_separate} \alias{confint.svyratio} %- Also NEED an `\alias' for EACH other topic documented here. \title{Ratio estimation} \description{ Ratio estimation and estimates of totals based on ratios for complex survey samples. Estimating domain (subpopulation) means can be done more easily with \code{\link{svymean}}. } \usage{ \method{svyratio}{survey.design2}(numerator=formula, denominator, design,separate=FALSE, na.rm=FALSE,formula, covmat=FALSE,deff=FALSE,...) \method{svyratio}{svyrep.design}(numerator=formula, denominator, design, na.rm=FALSE,formula, covmat=FALSE,return.replicates=FALSE,deff=FALSE, ...) \method{svyratio}{twophase}(numerator=formula, denominator, design, separate=FALSE, na.rm=FALSE,formula,...) \method{predict}{svyratio}(object, total, se=TRUE,...) \method{predict}{svyratio_separate}(object, total, se=TRUE,...) \method{SE}{svyratio}(object,...,drop=TRUE) \method{coef}{svyratio}(object,...,drop=TRUE) \method{confint}{svyratio}(object, parm, level = 0.95,df =Inf,...) } %- maybe also `usage' for other objects documented here. \arguments{ \item{numerator,formula}{formula, expression, or data frame giving numerator variable(s)} \item{denominator}{formula, expression, or data frame giving denominator variable(s) } \item{design}{survey design object} \item{object}{result of \code{svyratio}} \item{total}{vector of population totals for the denominator variables in \code{object}, or list of vectors of population stratum totals if \code{separate=TRUE}} \item{se}{Return standard errors?} \item{separate}{Estimate ratio separately for strata} \item{na.rm}{Remove missing values?} \item{covmat}{Compute the full variance-covariance matrix of the ratios} \item{deff}{Compute design effects} \item{return.replicates}{Return replicate estimates of ratios} \item{drop}{Return a vector rather than a matrix} \item{parm}{a specification of which parameters are to be given confidence intervals, either a vector of numbers or a vector of names. If missing, all parameters are considered.} \item{level}{the confidence level required.} \item{df}{degrees of freedom for t-distribution in confidence interval, use \code{degf(design)} for number of PSUs minus number of strata} \item{...}{Other unused arguments for other methods} } \details{ The separate ratio estimate of a total is the sum of ratio estimates in each stratum. If the stratum totals supplied in the \code{total} argument and the strata in the design object both have names these names will be matched. If they do not have names it is important that the sample totals are supplied in the correct order, the same order as shown in the output of \code{summary(design)}. When \code{design} is a two-phase design, stratification will be on the second phase. } \value{ \code{svyratio} returns an object of class \code{svyratio}. The \code{predict} method returns a matrix of population totals and optionally a matrix of standard errors. } \references{Levy and Lemeshow. "Sampling of Populations" (3rd edition). Wiley} \author{Thomas Lumley} \seealso{\code{\link{svydesign}} \code{\link{svymean}} for estimating proportions and domain means \code{\link{calibrate}} for estimators related to the separate ratio estimator. } \examples{ data(scd) ## survey design objects scddes<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE, fpc=rep(5,6)) scdnofpc<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE) # convert to BRR replicate weights scd2brr <- as.svrepdesign(scdnofpc, type="BRR") # use BRR replicate weights from Levy and Lemeshow repweights<-2*cbind(c(1,0,1,0,1,0), c(1,0,0,1,0,1), c(0,1,1,0,0,1), c(0,1,0,1,1,0)) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights) # ratio estimates svyratio(~alive, ~arrests, design=scddes) svyratio(~alive, ~arrests, design=scdnofpc) svyratio(~alive, ~arrests, design=scd2brr) svyratio(~alive, ~arrests, design=scdrep) data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) ## domain means are ratio estimates, but available directly svyratio(~I(api.stu*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), dstrat) svymean(~api.stu, subset(dstrat, comp.imp=="Yes")) ## separate and combined ratio estimates of total (sep<-svyratio(~api.stu,~enroll, dstrat,separate=TRUE)) (com<-svyratio(~api.stu, ~enroll, dstrat)) stratum.totals<-list(E=1877350, H=1013824, M=920298) predict(sep, total=stratum.totals) predict(com, total=sum(unlist(stratum.totals))) SE(com) coef(com) coef(com, drop=FALSE) confint(com) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svyby.Rd0000755000176200001440000001534212372242764014046 0ustar liggesusers\name{svyby} \alias{svyby} \alias{svyby.default} \alias{SE.svyby} \alias{deff.svyby} \alias{coef.svyby} \alias{confint.svyby} \alias{unwtd.count} %- Also NEED an '\alias' for EACH other topic documented here. \title{Survey statistics on subsets} \description{ Compute survey statistics on subsets of a survey defined by factors. } \usage{ svyby(formula, by ,design,...) \method{svyby}{default}(formula, by, design, FUN, ..., deff=FALSE,keep.var = TRUE, keep.names = TRUE,verbose=FALSE, vartype=c("se","ci","ci","cv","cvpct","var"), drop.empty.groups=TRUE, covmat=FALSE, return.replicates=FALSE, na.rm.by=FALSE, na.rm.all=FALSE, multicore=getOption("survey.multicore")) \method{SE}{svyby}(object,...) \method{deff}{svyby}(object,...) \method{coef}{svyby}(object,...) \method{confint}{svyby}(object, parm, level = 0.95,df =Inf,...) unwtd.count(x, design, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula,x}{A formula specifying the variables to pass to \code{FUN} (or a matrix, data frame, or vector)} \item{by}{A formula specifying factors that define subsets, or a list of factors.} \item{design}{A \code{svydesign} or \code{svrepdesign} object} \item{FUN}{A function taking a formula and survey design object as its first two arguments.} \item{\dots}{Other arguments to \code{FUN}} \item{deff}{Request a design effect from \code{FUN}} \item{keep.var}{If \code{FUN} returns a \code{svystat} object, extract standard errors from it} \item{keep.names}{Define row names based on the subsets} \item{verbose}{If \code{TRUE}, print a label for each subset as it is processed.} \item{vartype}{Report variability as one or more of standard error, confidence interval, coefficient of variation, percent coefficient of variation, or variance} \item{drop.empty.groups}{If \code{FALSE}, report \code{NA} for empty groups, if \code{TRUE} drop them from the output} \item{na.rm.by}{If true, omit groups defined by \code{NA} values of the \code{by} variables}. \item{na.rm.all}{If true, check for groups with no non-missing observations for variables defined by \code{formula} and treat these groups as empty} \item{covmat}{If \code{TRUE}, compute covariances between estimates for different subsets (currently only for replicate-weight designs). Allows \code{\link{svycontrast}} to be used on output.} \item{return.replicates}{Only for replicate-weight designs. If \code{TRUE}, return all the replicates as the "replicates" attribute of the result} \item{multicore}{Use \code{multicore} package to distribute subsets over multiple processors?} \item{parm}{a specification of which parameters are to be given confidence intervals, either a vector of numbers or a vector of names. If missing, all parameters are considered.} \item{level}{the confidence level required.} \item{df}{degrees of freedom for t-distribution in confidence interval, use \code{degf(design)} for number of PSUs minus number of strata} \item{object}{An object of class \code{"svyby"}} } \value{ An object of class \code{"svyby"}: a data frame showing the factors and the results of \code{FUN}. For \code{unwtd.count}, the unweighted number of non-missing observations in the data matrix specified by \code{x} for the design. } \details{ The variance type "ci" asks for confidence intervals, which are produced by \code{confint}. In some cases additional options to \code{FUN} will be needed to produce confidence intervals, for example, \code{svyquantile} needs \code{ci=TRUE} or \code{keep.var=FALSE}. \code{unwtd.count} is designed to be passed to \code{svyby} to report the number of non-missing observations in each subset. Observations with exactly zero weight will also be counted as missing, since that's how subsets are implemented for some designs. Parallel processing with \code{multicore=TRUE} is useful only for fairly large problems and on computers with sufficient memory. The \code{multicore} package is incompatible with some GUIs, although the Mac Aqua GUI appears to be safe. } \note{The function works by making a lot of calls of the form \code{FUN(formula, subset(design, by==i))}, where \code{formula} is re-evaluated in each subset, so it is unwise to use data-dependent terms in \code{formula}. In particular, \code{svyby(~factor(a), ~b, design=d, svymean)}, will create factor variables whose levels are only those values of \code{a} present in each subset. Use \code{\link{update.survey.design}} to add variables to the design object instead. } \note{ Asking for a design effect (\code{deff=TRUE}) from a function that does not produce one will cause an error or incorrect formatting of the output. The same will occur with \code{keep.var=TRUE} if the function does not compute a standard error. } \seealso{\code{\link{svytable}} and \code{\link{ftable.svystat}} for contingency tables, \code{\link{ftable.svyby}} for pretty-printing of \code{svyby} } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svyby(~api99, ~stype, dclus1, svymean) svyby(~api99, ~stype, dclus1, svyquantile, quantiles=0.5,ci=TRUE,vartype="ci") ## without ci=TRUE svyquantile does not compute standard errors svyby(~api99, ~stype, dclus1, svyquantile, quantiles=0.5, keep.var=FALSE) svyby(~api99, list(school.type=apiclus1$stype), dclus1, svymean) svyby(~api99+api00, ~stype, dclus1, svymean, deff=TRUE,vartype="ci") svyby(~api99+api00, ~stype+sch.wide, dclus1, svymean, keep.var=FALSE) ## report raw number of observations svyby(~api99+api00, ~stype+sch.wide, dclus1, unwtd.count, keep.var=FALSE) rclus1<-as.svrepdesign(dclus1) svyby(~api99, ~stype, rclus1, svymean) svyby(~api99, ~stype, rclus1, svyquantile, quantiles=0.5) svyby(~api99, list(school.type=apiclus1$stype), rclus1, svymean, vartype="cv") svyby(~enroll,~stype, rclus1,svytotal, deff=TRUE) svyby(~api99+api00, ~stype+sch.wide, rclus1, svymean, keep.var=FALSE) ##report raw number of observations svyby(~api99+api00, ~stype+sch.wide, rclus1, unwtd.count, keep.var=FALSE) ## comparing subgroups using covmat=TRUE mns<-svyby(~api99, ~stype, rclus1, svymean,covmat=TRUE) vcov(mns) svycontrast(mns, c(E = 1, M = -1)) str(svyby(~api99, ~stype, rclus1, svymean,return.replicates=TRUE)) ## extractor functions (a<-svyby(~enroll, ~stype, rclus1, svytotal, deff=TRUE, verbose=TRUE, vartype=c("se","cv","cvpct","var"))) deff(a) SE(a) cv(a) coef(a) confint(a, df=degf(rclus1)) ## ratio estimates svyby(~api.stu, by=~stype, denominator=~enroll, design=dclus1, svyratio) ## empty groups svyby(~api00,~comp.imp+sch.wide,design=dclus1,svymean) svyby(~api00,~comp.imp+sch.wide,design=dclus1,svymean,drop.empty.groups=FALSE) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/svychisq.Rd0000755000176200001440000001672212372242764014546 0ustar liggesusers\name{svytable} \alias{svreptable} \alias{svytable} \alias{svytable.svyrep.design} \alias{svytable.survey.design} \alias{svychisq} \alias{svychisq.survey.design} \alias{svychisq.svyrep.design} \alias{summary.svytable} \alias{print.summary.svytable} \alias{summary.svreptable} \alias{degf} \alias{degf.svyrep.design} \alias{degf.survey.design2} \alias{degf.twophase} %- Also NEED an '\alias' for EACH other topic documented here. \title{Contingency tables for survey data} \description{ Contingency tables and chisquared tests of association for survey data. } \usage{ \method{svytable}{survey.design}(formula, design, Ntotal = NULL, round = FALSE,...) \method{svytable}{svyrep.design}(formula, design, Ntotal = sum(weights(design, "sampling")), round = FALSE,...) \method{svychisq}{survey.design}(formula, design, statistic = c("F", "Chisq","Wald","adjWald","lincom","saddlepoint"),na.rm=TRUE,...) \method{svychisq}{svyrep.design}(formula, design, statistic = c("F", "Chisq","Wald","adjWald","lincom","saddlepoint"),na.rm=TRUE,...) \method{summary}{svytable}(object, statistic = c("F","Chisq","Wald","adjWald","lincom","saddlepoint"),...) degf(design, ...) \method{degf}{survey.design2}(design, ...) \method{degf}{svyrep.design}(design, tol=1e-5,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Model formula specifying margins for the table (using \code{+} only)} \item{design}{survey object} \item{statistic}{See Details below} \item{Ntotal}{A population total or set of population stratum totals to normalise to.} \item{round}{Should the table entries be rounded to the nearest integer?} \item{na.rm}{Remove missing values} \item{object}{Output from \code{svytable}} \item{...}{For \code{svytable} these are passed to \code{xtabs}. Use \code{exclude=NULL}, \code{na.action=na.pass} to include \code{NA}s in the table} \item{tol}{Tolerance for \code{\link{qr}} in computing the matrix rank} } \details{ The \code{svytable} function computes a weighted crosstabulation. This is especially useful for producing graphics. It is sometimes easier to use \code{\link{svytotal}} or \code{\link{svymean}}, which also produce standard errors, design effects, etc. The frequencies in the table can be normalised to some convenient total such as 100 or 1.0 by specifying the \code{Ntotal} argument. If the formula has a left-hand side the mean or sum of this variable rather than the frequency is tabulated. The \code{Ntotal} argument can be either a single number or a data frame whose first column gives the (first-stage) sampling strata and second column the population size in each stratum. In this second case the \code{svytable} command performs `post-stratification': tabulating and scaling to the population within strata and then adding up the strata. As with other \code{xtabs} objects, the output of \code{svytable} can be processed by \code{ftable} for more attractive display. The \code{summary} method for \code{svytable} objects calls \code{svychisq} for a test of independence. \code{svychisq} computes first and second-order Rao-Scott corrections to the Pearson chisquared test, and two Wald-type tests. The default (\code{statistic="F"}) is the Rao-Scott second-order correction. The p-values are computed with a Satterthwaite approximation to the distribution and with denominator degrees of freedom as recommended by Thomas and Rao (1990). The alternative \code{statistic="Chisq"} adjusts the Pearson chisquared statistic by a design effect estimate and then compares it to the chisquared distribution it would have under simple random sampling. The \code{statistic="Wald"} test is that proposed by Koch et al (1975) and used by the SUDAAN software package. It is a Wald test based on the differences between the observed cells counts and those expected under independence. The adjustment given by \code{statistic="adjWald"} reduces the statistic when the number of PSUs is small compared to the number of degrees of freedom of the test. Thomas and Rao (1990) compare these tests and find the adjustment benefical. \code{statistic="lincom"} replaces the numerator of the Rao-Scott F with the exact asymptotic distribution, which is a linear combination of chi-squared variables (see \code{\link{pchisqsum}}, and \code{statistic="saddlepoint"} uses a saddlepoint approximation to this distribution. The \code{CompQuadForm} package is needed for \code{statistic="lincom"} but not for \code{statistic="saddlepoint"}. The saddlepoint approximation is especially useful when the p-value is very small (as in large-scale multiple testing problems). For designs using replicate weights the code is essentially the same as for designs with sampling structure, since the necessary variance computations are done by the appropriate methods of \code{\link{svytotal}} and \code{\link{svymean}}. The exception is that the degrees of freedom is computed as one less than the rank of the matrix of replicate weights (by \code{degf}). At the moment, \code{svychisq} works only for 2-dimensional tables. } \value{ The table commands return an \code{xtabs} object, \code{svychisq} returns a \code{htest} object. } \references{ Davies RB (1973). "Numerical inversion of a characteristic function" Biometrika 60:415-7 P. Duchesne, P. Lafaye de Micheaux (2010) "Computing the distribution of quadratic forms: Further comparisons between the Liu-Tang-Zhang approximation and exact methods", Computational Statistics and Data Analysis, Volume 54, 858-862 Koch, GG, Freeman, DH, Freeman, JL (1975) "Strategies in the multivariate analysis of data from complex surveys" International Statistical Review 43: 59-78 Rao, JNK, Scott, AJ (1984) "On Chi-squared Tests For Multiway Contigency Tables with Proportions Estimated From Survey Data" Annals of Statistics 12:46-60. Sribney WM (1998) "Two-way contingency tables for survey or clustered data" Stata Technical Bulletin 45:33-49. Thomas, DR, Rao, JNK (1990) "Small-sample comparison of level and power for simple goodness-of-fit statistics under cluster sampling" JASA 82:630-636 } \note{Rao and Scott (1984) leave open one computational issue. In computing `generalised design effects' for these tests, should the variance under simple random sampling be estimated using the observed proportions or the the predicted proportions under the null hypothesis? \code{svychisq} uses the observed proportions, following simulations by Sribney (1998), and the choices made in Stata} \seealso{\code{\link{svytotal}} and \code{\link{svymean}} report totals and proportions by category for factor variables. See \code{\link{svyby}} and \code{\link{ftable.svystat}} to construct more complex tables of summary statistics. See \code{\link{svyloglin}} for loglinear models. See \code{\link{regTermTest}} for Rao-Scott tests in regression models. } \examples{ data(api) xtabs(~sch.wide+stype, data=apipop) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) summary(dclus1) (tbl <- svytable(~sch.wide+stype, dclus1)) plot(tbl) fourfoldplot(svytable(~sch.wide+comp.imp+stype,design=dclus1,round=TRUE), conf.level=0) svychisq(~sch.wide+stype, dclus1) summary(tbl, statistic="Chisq") svychisq(~sch.wide+stype, dclus1, statistic="adjWald") rclus1 <- as.svrepdesign(dclus1) summary(svytable(~sch.wide+stype, rclus1)) svychisq(~sch.wide+stype, rclus1, statistic="adjWald") } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{category}% __ONLY ONE__ keyword per line \keyword{htest}% __ONLY ONE__ keyword per line survey/man/open.DBIsvydesign.Rd0000644000176200001440000000305112242746122016144 0ustar liggesusers\name{open.DBIsvydesign} \alias{open.DBIsvydesign} \alias{close.DBIsvydesign} \alias{open.ODBCsvydesign} \alias{close.ODBCsvydesign} %- Also NEED an '\alias' for EACH other topic documented here. \title{Open and close DBI connections } \description{ A database-backed survey design object contains a connection to a database. This connection will be broken if the object is saved and reloaded, and the connection should ideally be closed with \code{close} before quitting R (although it doesn't matter for SQLite connections). The connection can be reopened with \code{open}. } \usage{ \method{open}{DBIsvydesign}(con, ...) \method{close}{DBIsvydesign}(con, ...) \method{open}{ODBCsvydesign}(con, ...) \method{close}{ODBCsvydesign}(con, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{con}{Object of class \code{DBIsvydesign} or \code{ODBCsvydesign}} \item{\dots}{Other options, to be passed to \code{dbConnect} or \code{dbDisconnect}, or \code{odbcReConnect} or \code{odbcDisconnect} } } \value{ The same survey design object with the connection opened or closed. } \seealso{\code{\link{svydesign}} DBI package } \examples{ \dontrun{ library(RSQLite) dbclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc, data="apiclus1",dbtype="SQLite", dbname=system.file("api.db",package="survey")) dbclus1 close(dbclus1) dbclus1 try(svymean(~api00, dbclus1)) dbclus1<-open(dbclus1) open(dbclus1) svymean(~api00, dbclus1) } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/surveysummary.Rd0000755000176200001440000001766312242746122015646 0ustar liggesusers\name{surveysummary} \alias{svymean} \alias{svymean.survey.design} \alias{svymean.survey.design2} \alias{svymean.svyrep.design} \alias{svymean.twophase} \alias{svytotal} \alias{svytotal.twophase} \alias{svytotal.survey.design} \alias{svytotal.survey.design2} \alias{svytotal.svyrep.design} \alias{svyvar} \alias{svyvar.survey.design} \alias{svyvar.svyrep.design} \alias{coef.svystat} \alias{vcov.svystat} \alias{coef.svrepstat} \alias{vcov.svrepstat} \alias{cv.svyratio} \alias{cv.svrepratio} \alias{cv.svrepstat} \alias{cv.svystat} \alias{cv.default} \alias{cv} \alias{deff} \alias{deff.default} \alias{confint.svystat} \alias{confint.svrepstat} \alias{make.formula} %- Also NEED an `\alias' for EACH other topic documented here. \title{Summary statistics for sample surveys} \description{ Compute means, variances, ratios and totals for data from complex surveys. } \usage{ \method{svymean}{survey.design}(x, design, na.rm=FALSE,deff=FALSE,...) \method{svymean}{twophase}(x, design, na.rm=FALSE,deff=FALSE,...) \method{svymean}{svyrep.design}(x, design, na.rm=FALSE, rho=NULL, return.replicates=FALSE, deff=FALSE,...) \method{svyvar}{survey.design}(x, design, na.rm=FALSE,...) \method{svyvar}{svyrep.design}(x, design, na.rm=FALSE, rho=NULL, return.replicates=FALSE,...,estimate.only=FALSE) \method{svytotal}{survey.design}(x, design, na.rm=FALSE,deff=FALSE,...) \method{svytotal}{twophase}(x, design, na.rm=FALSE,deff=FALSE,...) \method{svytotal}{svyrep.design}(x, design, na.rm=FALSE, rho=NULL, return.replicates=FALSE, deff=FALSE,...) \method{coef}{svystat}(object,...) \method{coef}{svrepstat}(object,...) \method{vcov}{svystat}(object,...) \method{vcov}{svrepstat}(object,...) \method{confint}{svystat}(object, parm, level = 0.95,df =Inf,...) \method{confint}{svrepstat}(object, parm, level = 0.95,df =Inf,...) cv(object,...) deff(object, quietly=FALSE,...) make.formula(names) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{A formula, vector or matrix} \item{design}{\code{survey.design} or \code{svyrep.design} object} \item{na.rm}{Should cases with missing values be dropped?} \item{rho}{parameter for Fay's variance estimator in a BRR design} \item{return.replicates}{Return the replicate means?} \item{deff}{Return the design effect (see below)} \item{object}{The result of one of the other survey summary functions} \item{quietly}{Don't warn when there is no design effect computed} \item{estimate.only}{Don't compute standard errors (useful when \code{svyvar} is used to estimate the design effect)} \item{parm}{a specification of which parameters are to be given confidence intervals, either a vector of numbers or a vector of names. If missing, all parameters are considered.} \item{level}{the confidence level required.} \item{df}{degrees of freedom for t-distribution in confidence interval, use \code{degf(design)} for number of PSUs minus number of strata} \item{...}{additional arguments to methods,not currently used} \item{names}{vector of character strings} } \details{ These functions perform weighted estimation, with each observation being weighted by the inverse of its sampling probability. Except for the table functions, these also give precision estimates that incorporate the effects of stratification and clustering. Factor variables are converted to sets of indicator variables for each category in computing means and totals. Combining this with the \code{\link{interaction}} function, allows crosstabulations. See \code{\link{ftable.svystat}} for formatting the output. With \code{na.rm=TRUE}, all cases with missing data are removed. With \code{na.rm=FALSE} cases with missing data are not removed and so will produce missing results. When using replicate weights and \code{na.rm=FALSE} it may be useful to set \code{options(na.action="na.pass")}, otherwise all replicates with any missing results will be discarded. The \code{svytotal} and \code{svreptotal} functions estimate a population total. Use \code{predict} on \code{\link{svyratio}} and \code{\link{svyglm}}, to get ratio or regression estimates of totals. \code{svyvar} estimates the population variance. The object returned includes the full matrix of estimated population variances and covariances, but by default only the diagonal elements are printed. To display the whole matrix use \code{as.matrix(v)} or \code{print(v, covariance=TRUE)}. The design effect compares the variance of a mean or total to the variance from a study of the same size using simple random sampling without replacement. Note that the design effect will be incorrect if the weights have been rescaled so that they are not reciprocals of sampling probabilities. To obtain an estimate of the design effect comparing to simple random sampling with replacement, which does not have this requirement, use \code{deff="replace"}. This with-replacement design effect is the square of Kish's "deft". The design effect for a subset of a design conditions on the size of the subset. That is, it compares the variance of the estimate to the variance of an estimate based on a simple random sample of the same size as the subset, taken from the subpopulation. So, for example, under stratified random sampling the design effect in a subset consisting of a single stratum will be 1.0. The \code{cv} function computes the coefficient of variation of a statistic such as ratio, mean or total. The default method is for any object with methods for \code{\link{SE}} and \code{coef}. \code{make.formula} makes a formula from a vector of names. This is useful because formulas as the best way to specify variables to the survey functions. } \value{ Objects of class \code{"svystat"} or \code{"svrepstat"}, which are vectors with a \code{"var"} attribute giving the variance and a \code{"statistic"} attribute giving the name of the statistic. These objects have methods for \code{vcov}, \code{SE}, \code{coef}, \code{confint}, \code{svycontrast}. } \author{Thomas Lumley} \seealso{ \code{\link{svydesign}}, \code{\link{as.svrepdesign}}, \code{\link{svrepdesign}} for constructing design objects. \code{\link{degf}} to extract degrees of freedom from a design. \code{\link{svyquantile}} for quantiles \code{\link{ftable.svystat}} for more attractive tables \code{\link{svyciprop}} for more accurate confidence intervals for proportions near 0 or 1. \code{\link{svyttest}} for comparing two means. \code{\link{svycontrast}} for linear and nonlinear functions of estimates. } \examples{ data(api) ## one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svymean(~api00, dclus1, deff=TRUE) svymean(~factor(stype),dclus1) svymean(~interaction(stype, comp.imp), dclus1) svyquantile(~api00, dclus1, c(.25,.5,.75)) svytotal(~enroll, dclus1, deff=TRUE) svyratio(~api.stu, ~enroll, dclus1) v<-svyvar(~api00+api99, dclus1) v print(v, cov=TRUE) as.matrix(v) # replicate weights - jackknife (this is slower) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) jkstrat<-as.svrepdesign(dstrat) svymean(~api00, jkstrat) svymean(~factor(stype),jkstrat) svyvar(~api00+api99,jkstrat) svyquantile(~api00, jkstrat, c(.25,.5,.75)) svytotal(~enroll, jkstrat) svyratio(~api.stu, ~enroll, jkstrat) # coefficients of variation cv(svytotal(~enroll,dstrat)) cv(svyratio(~api.stu, ~enroll, jkstrat)) # extracting information from the results coef(svytotal(~enroll,dstrat)) vcov(svymean(~api00+api99,jkstrat)) SE(svymean(~enroll, dstrat)) confint(svymean(~api00+api00, dclus1)) confint(svymean(~api00+api00, dclus1), df=degf(dclus1)) # Design effect svymean(~api00, dstrat, deff=TRUE) svymean(~api00, dstrat, deff="replace") svymean(~api00, jkstrat, deff=TRUE) svymean(~api00, jkstrat, deff="replace") (a<-svytotal(~enroll, dclus1, deff=TRUE)) deff(a) } \keyword{univar}% at least one, from doc/KEYWORDS \keyword{survey}% __ONLY ONE__ keyword per line survey/man/svyCprod.Rd0000755000176200001440000001151612242746122014473 0ustar liggesusers\name{svyCprod} \alias{svyCprod} \alias{onestage} \alias{onestrat} %- Also NEED an `\alias' for EACH other topic documented here. \title{Computations for survey variances} \description{ Computes the sum of products needed for the variance of survey sample estimators. \code{svyCprod} is used for survey design objects from before version 2.9, \code{onestage} is called by \code{\link{svyrecvar}} for post-2.9 design objects. } \usage{ svyCprod(x, strata, psu, fpc, nPSU,certainty=NULL, postStrata=NULL, lonely.psu=getOption("survey.lonely.psu")) onestage(x, strata, clusters, nPSU, fpc, lonely.psu=getOption("survey.lonely.psu"),stage=0,cal) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{A vector or matrix} \item{strata}{A vector of stratum indicators (may be \code{NULL} for \code{svyCprod})} \item{psu}{A vector of cluster indicators (may be \code{NULL})} \item{clusters}{A vector of cluster indicators } \item{fpc}{A data frame (\code{svyCprod}) or vector (\code{onestage}) of population stratum sizes, or \code{NULL}} \item{nPSU}{Table (\code{svyprod}) or vector (\code{onestage}) of original sample stratum sizes (or \code{NULL})} \item{certainty}{logical vector with stratum names as names. If \code{TRUE} and that stratum has a single PSU it is a certainty PSU} \item{postStrata}{Post-stratification variables} \item{lonely.psu}{One of \code{"remove"}, \code{"adjust"}, \code{"fail"}, \code{"certainty"}, \code{"average"}. See Details below} \item{stage}{Used internally to track the depth of recursion} \item{cal}{Used to pass calibration information at stages below the population} } \details{ The observations for each cluster are added, then centered within each stratum and the outer product is taken of the row vector resulting for each cluster. This is added within strata, multiplied by a degrees-of-freedom correction and by a finite population correction (if supplied) and added across strata. If there are fewer clusters (PSUs) in a stratum than in the original design extra rows of zeroes are added to \code{x} to allow the correct subpopulation variance to be computed. See \code{\link{postStratify}} for information about post-stratification adjustments. The variance formula gives 0/0 if a stratum contains only one sampling unit. If the \code{certainty} argument specifies that this is a PSU sampled with probability 1 (a "certainty" PSU) then it does not contribute to the variance (this is correct only when there is no subsampling within the PSU -- otherwise it should be defined as a pseudo-stratum). If \code{certainty} is \code{FALSE} for this stratum or is not supplied the result depends on \code{lonely.psu}. The options are \code{"fail"} to give an error, \code{"remove"} or \code{"certainty"} to give a variance contribution of 0 for the stratum, \code{"adjust"} to center the stratum at the grand mean rather than the stratum mean, and \code{"average"} to assign strata with one PSU the average variance contribution from strata with more than one PSU. The choice is controlled by setting \code{options(survey.lonely.psu)}. If this is not done the factory default is \code{"fail"}. Using \code{"adjust"} is conservative, and it would often be better to combine strata in some intelligent way. The properties of \code{"average"} have not been investigated thoroughly, but it may be useful when the lonely PSUs are due to a few strata having PSUs missing completely at random. The \code{"remove"}and \code{"certainty"} options give the same result, but \code{"certainty"} is intended for situations where there is only one PSU in the population stratum, which is sampled with certainty (also called `self-representing' PSUs or strata). With \code{"certainty"} no warning is generated for strata with only one PSU. Ordinarily, \code{svydesign} will detect certainty PSUs, making this option unnecessary. For strata with a single PSU in a subset (domain) the variance formula gives a value that is well-defined and positive, but not typically correct. If \code{options("survey.adjust.domain.lonely")} is \code{TRUE} and \code{options("survey.lonely.psu")} is \code{"adjust"} or \code{"average"}, and no post-stratification or G-calibration has been done, strata with a single PSU in a subset will be treated like those with a single PSU in the sample. I am not aware of any theoretical study of this procedure, but it should at least be conservative. } \value{ A covariance matrix } \author{Thomas Lumley} \references{Binder, David A. (1983). On the variances of asymptotically normal estimators from complex surveys. International Statistical Review, 51, 279- 292. } \seealso{\code{\link{svydesign}}, \code{\link{svyrecvar}}, \code{\link{surveyoptions}}, \code{\link{postStratify}} } \keyword{utilities}% at least one, from doc/KEYWORDS \keyword{survey}% __ONLY ONE__ keyword per line survey/man/anova.svyglm.Rd0000644000176200001440000001113413115662425015302 0ustar liggesusers\name{anova.svyglm} \alias{anova.svyglm} \alias{AIC.svyglm} \alias{BIC.svyglm} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Model comparison for glms. } \description{ A method for the \code{\link{anova}} function, for use on \code{\link{svyglm}} objects. With a single model argument it produces a sequential anova table, with two arguments it compares the two models. } \usage{ \method{anova}{svyglm}(object, object2 = NULL, test = c("F", "Chisq"), method = c("LRT", "Wald"), tolerance = 1e-05, ..., force = FALSE) \method{AIC}{svyglm}(object,...,k=2) \method{BIC}{svyglm}(object,...,maximal) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{ A \code{\link{svyglm}} object. } \item{object2}{ Optionally, another \code{\link{svyglm}} object. } \item{test}{ Use (linear combination of) F or chi-squared distributions for p-values. F is usually preferable. } \item{method}{ Use weighted deviance difference (LRT) or Wald tests to compare models } \item{tolerance}{ For models that are not symbolically nested, the tolerance for deciding that a term is common to the models. } \item{\dots}{ For \code{AIC} and \code{BIC}, optionally more \code{svyglm} objects } \item{force}{ Force the tests to be done by explicit projection even if the models are symbolically nested (eg, for debugging) } \item{maximal}{A \code{svyglm} model that \code{object} (and \dots if supplied) are nested in.} \item{k}{Multiplier for effective df in AIC. Usually 2. There is no choice of \code{k} that will give BIC} } \details{ The reference distribution for the LRT depends on the misspecification effects for the parameters being tested (Rao and Scott, 1984). If the models are symbolically nested, so that the relevant parameters can be identified just by manipulating the model formulas, \code{anova} is equivalent to \code{\link{regTermTest}}. If the models are nested but not symbolically nested, more computation using the design matrices is needed to determine the projection matrix on to the parameters being tested. Typical examples of models that are nested but not symbolically nested are linear and spline models for a continuous covariate or linear and saturated models for a factor. The saddlepoint approximation is used for the LRT with numerator df greater than 1. \code{AIC} is defined using the Rao-Scott approximation to the weighted loglikelihood (Lumley and Scott, 2015). It replaces the usual penalty term p, which is the null expectation of the log likelihood ratio, by the trace of the generalised design effect matrix, which is the expectation under complex sampling. For computational reasons everything is scaled so the weights sum to the sample size. \code{BIC} is a BIC for the (approximate) multivariate Gaussian models on regression coefficients from the maximal model implied by each submodel (ie, the models that say some coefficients in the maximal model are zero) (Lumley and Scott, 2015). It corresponds to comparing the models with a Wald test and replacing the sample size in the penalty by an effective sample size. For computational reasons, the models must not only be nested, the names of the coefficients must match. } \value{ Object of class \code{seqanova.svyglm} if one model is given, otherwise of class \code{regTermTest} or \code{regTermTestLRT} } \note{ At the moment, \code{AIC} works only for models including an intercept. } \references{ Rao, JNK, Scott, AJ (1984) "On Chi-squared Tests For Multiway Contingency Tables with Proportions Estimated From Survey Data" Annals of Statistics 12:46-60. Lumley, T., & Scott, A. (2014). "Tests for Regression Models Fitted to Survey Data". Australian and New Zealand Journal of Statistics, 56 (1), 1-14. Lumley T, Scott AJ (2015) "AIC and BIC for modelling with complex survey data" J Surv Stat Methodol 3 (1): 1-18. } \seealso{ \code{\link{regTermTest}}, \code{\link{pchisqsum}} } \examples{ data(api) dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) model0<-svyglm(I(sch.wide=="Yes")~ell+meals+mobility, design=dclus2, family=quasibinomial()) model1<-svyglm(I(sch.wide=="Yes")~ell+meals+mobility+as.numeric(stype), design=dclus2, family=quasibinomial()) model2<-svyglm(I(sch.wide=="Yes")~ell+meals+mobility+stype, design=dclus2, family=quasibinomial()) anova(model2) anova(model0,model2) anova(model1, model2) anova(model1, model2, method="Wald") AIC(model0,model1, model2) BIC(model0, model2,maximal=model2) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{regression}% __ONLY ONE__ keyword per line survey/man/marginpred.Rd0000644000176200001440000000562112537401202015001 0ustar liggesusers\name{marginpred} \Rdversion{1.1} \alias{marginpred} \alias{marginpred.svycoxph} \alias{marginpred.svykmlist} \alias{marginpred.svyglm} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Standardised predictions (predictive margins) for regression models. } \description{ Reweights the design (using \code{\link{calibrate}}) so that the adjustment variables are uncorrelated with the variables in the model, and then performs predictions by calling \code{predict}. When the adjustment model is saturated this is equivalent to direct standardization on the adjustment variables. The \code{svycoxph} and \code{svykmlist} methods return survival curves. } \usage{ marginpred(model, adjustfor, predictat, ...) \method{marginpred}{svycoxph}(model, adjustfor, predictat, se=FALSE, ...) \method{marginpred}{svykmlist}(model, adjustfor, predictat, se=FALSE, ...) \method{marginpred}{svyglm}(model, adjustfor, predictat, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{model}{ A regression model object of a class that has a \code{marginpred} method } \item{adjustfor}{ Model formula specifying adjustment variables, which must be in the design object of the model } \item{predictat}{ A data frame giving values of the variables in \code{model} to predict at} \item{se}{Estimate standard errors for the survival curve (uses a lot of memory if the sample size is large)} \item{\dots}{Extra arguments, passed to the \code{predict} method for \code{model}} } \seealso{ \code{\link{svypredmeans}} for the method of Graubard and Korn implemented in SUDAAN. \code{\link{calibrate}} \code{\link{predict.svycoxph}} } \examples{ ## generate data with apparent group effect from confounding set.seed(42) df<-data.frame(x=rnorm(100)) df$time<-rexp(100)*exp(df$x-1) df$status<-1 df$group<-(df$x+rnorm(100))>0 des<-svydesign(id=~1,data=df) newdf<-data.frame(group=c(FALSE,TRUE), x=c(0,0)) ## Cox model m0<-svycoxph(Surv(time,status)~group,design=des) m1<-svycoxph(Surv(time,status)~group+x,design=des) ## conditional predictions, unadjusted and adjusted cpred0<-predict(m0, type="curve", newdata=newdf, se=TRUE) cpred1<-predict(m1, type="curve", newdata=newdf, se=TRUE) ## adjusted marginal prediction mpred<-marginpred(m0, adjustfor=~x, predictat=newdf, se=TRUE) plot(cpred0) lines(cpred1[[1]],col="red") lines(cpred1[[2]],col="red") lines(mpred[[1]],col="blue") lines(mpred[[2]],col="blue") ## Kaplan--Meier s2<-svykm(Surv(time,status>0)~group, design=des) p2<-marginpred(s2, adjustfor=~x, predictat=newdf,se=TRUE) plot(s2) lines(p2[[1]],col="green") lines(p2[[2]],col="green") ## logistic regression logisticm <- svyglm(group~time, family=quasibinomial, design=des) newdf$time<-c(0.1,0.8) logisticpred <- marginpred(logisticm, adjustfor=~x, predictat=newdf) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/with.svyimputationList.Rd0000644000176200001440000000351712242746122017422 0ustar liggesusers\name{with.svyimputationList} \alias{with.svyimputationList} \alias{subset.svyimputationList} %- Also NEED an '\alias' for EACH other topic documented here. \title{Analyse multiple imputations} \description{ Performs a survey analysis on each of the designs in a \code{svyimputationList} objects and returns a list of results suitable for \code{MIcombine}. The analysis may be specified as an expression or as a function. } \usage{ \method{with}{svyimputationList}(data, expr, fun, ...,multicore=getOption("survey.multicore")) \method{subset}{svyimputationList}(x, subset,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{data,x}{A \code{svyimputationList} object } \item{expr}{An expression giving a survey analysis} \item{fun}{A function taking a survey design object as its argument } \item{\dots}{for future expansion } \item{multicore}{Use \code{multicore} package to distribute imputed data sets over multiple processors?} \item{subset}{An logical expression specifying the subset} } \value{ A list of the results from applying the analysis to each design object. } \seealso{\code{MIcombine}, in the \code{mitools} package } \examples{ library(mitools) data.dir<-system.file("dta",package="mitools") files.men<-list.files(data.dir,pattern="m.\\\\.dta$",full=TRUE) men<-imputationList(lapply(files.men, foreign::read.dta)) files.women<-list.files(data.dir,pattern="f.\\\\.dta$",full=TRUE) women<-imputationList(lapply(files.women, foreign::read.dta)) men<-update(men, sex=1) women<-update(women,sex=0) all<-rbind(men,women) designs<-svydesign(id=~id, strata=~sex, data=all) designs results<-with(designs, svymean(~drkfre)) MIcombine(results) summary(MIcombine(results)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey }% __ONLY ONE__ keyword per line survey/man/svykm.Rd0000644000176200001440000000774412242746122014040 0ustar liggesusers\name{svykm} \alias{svykm} \alias{plot.svykm} \alias{plot.svykmlist} \alias{lines.svykm} \alias{quantile.svykm} \alias{confint.svykm} %- Also NEED an '\alias' for EACH other topic documented here. \title{Estimate survival function. } \description{ Estimates the survival function using a weighted Kaplan-Meier estimator. } \usage{ svykm(formula, design,se=FALSE, ...) \method{plot}{svykm}(x,xlab="time",ylab="Proportion surviving", ylim=c(0,1),ci=NULL,lty=1,...) \method{lines}{svykm}(x,xlab="time",type="s",ci=FALSE,lty=1,...) \method{plot}{svykmlist}(x, pars=NULL, ci=FALSE,...) \method{quantile}{svykm}(x, probs=c(0.75,0.5,0.25),ci=FALSE,level=0.95,...) \method{confint}{svykm}(object,parm,level=0.95,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Two-sided formula. The response variable should be a right-censored \code{Surv} object} \item{design}{survey design object} \item{se}{Compute standard errors? This is slow for moderate to large data sets} \item{\dots}{in \code{plot} and \code{lines} methods, graphical parameters } \item{x}{a \code{svykm} or \code{svykmlist} object} \item{xlab,ylab,ylim,type}{as for \code{plot}} \item{lty}{Line type, see \code{\link{par}}} \item{ci}{Plot (or return, for\code{quantile}) the confidence interval} \item{pars}{A list of vectors of graphical parameters for the separate curves in a \code{svykmlist} object} \item{object}{A \code{svykm} object} \item{parm}{vector of times to report confidence intervals} \item{level}{confidence level} \item{probs}{survival probabilities for computing survival quantiles (note that these are the complement of the usual \code{\link{quantile}} input, so 0.9 means 90\% surviving, not 90\% dead)} } \value{ For \code{svykm}, an object of class \code{svykm} for a single curve or \code{svykmlist} for multiple curves. } \details{ When standard errors are computed, the survival curve is actually the Aalen (hazard-based) estimator rather than the Kaplan-Meier estimator. The standard error computations use memory proportional to the sample size times the square of the number of events. This can be a lot. In the case of equal-probability cluster sampling without replacement the computations are essentially the same as those of Williams (1995), and the same linearization strategy is used for other designs. Confidence intervals are computed on the log(survival) scale, following the default in \code{survival} package, which was based on simulations by Link(1984). Confidence intervals for quantiles use Woodruff's method: the interval is the intersection of the horizontal line at the specified quantile with the pointwise confidence band around the survival curve. } \references{ Link, C. L. (1984). Confidence intervals for the survival function using Cox's proportional hazards model with covariates. Biometrics 40, 601-610. Williams RL (1995) "Product-Limit Survival Functions with Correlated Survival Times" Lifetime Data Analysis 1: 171--186 Woodruff RS (1952) Confidence intervals for medians and other position measures. JASA 57, 622-627. } \seealso{\code{\link{predict.svycoxph}} for survival curves from a Cox model } \examples{ data(pbc, package="survival") pbc$randomized <- with(pbc, !is.na(trt) & trt>0) biasmodel<-glm(randomized~age*edema,data=pbc) pbc$randprob<-fitted(biasmodel) dpbc<-svydesign(id=~1, prob=~randprob, strata=~edema, data=subset(pbc,randomized)) s1<-svykm(Surv(time,status>0)~1, design=dpbc) s2<-svykm(Surv(time,status>0)~I(bili>6), design=dpbc) plot(s1) plot(s2) plot(s2, lwd=2, pars=list(lty=c(1,2),col=c("purple","forestgreen"))) quantile(s1, probs=c(0.9,0.75,0.5,0.25,0.1)) s3<-svykm(Surv(time,status>0)~I(bili>6), design=dpbc,se=TRUE) plot(s3[[2]],col="purple") confint(s3[[2]], parm=365*(1:5)) quantile(s3[[1]], ci=TRUE) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{survival}% __ONLY ONE__ keyword per line survey/man/svyloglin.Rd0000644000176200001440000000651512242746122014710 0ustar liggesusers\name{svyloglin} \alias{svyloglin} \alias{anova.svyloglin} \alias{update.svyloglin} \alias{coef.svyloglin} \alias{print.anova.svyloglin} %- Also NEED an '\alias' for EACH other topic documented here. \title{Loglinear models } \description{ Fit and compare hierarchical loglinear models for complex survey data. } \usage{ svyloglin(formula, design, ...) \method{update}{svyloglin}(object,formula,...) \method{anova}{svyloglin}(object,object1,...,integrate=FALSE) \method{print}{anova.svyloglin}(x,pval=c("F","saddlepoint","lincom","chisq"),...) \method{coef}{svyloglin}(object,...,intercept=FALSE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Model formula} \item{design}{survey design object} \item{object,object1}{loglinear model from \code{svyloglin}} \item{pval}{p-value approximation: see Details} \item{integrate}{Compute the exact asymptotic p-value (slow)?} \item{\dots}{not used } \item{intercept}{Report the intercept?} \item{x}{anova object} } \details{ The loglinear model is fitted to a multiway table with probabilities estimated by \code{\link{svymean}} and with the sample size equal to the observed sample size, treating the resulting table as if it came from iid multinomial sampling, as described by Rao and Scott. The variance-covariance matrix does not include the intercept term, and so by default neither does the \code{coef} method. A Newton-Raphson algorithm is used, rather than iterative proportional fitting, so starting values are not needed. The \code{anova} method computes the quantities that would be the score (Pearson) and likelihood ratio chi-squared statistics if the data were an iid sample. It computes four p-values for each of these, based on the exact asymptotic distribution (see \code{\link{pchisqsum}}), a saddlepoint approximateion to this distribution, a scaled chi-squared distribution, and a scaled F-distribution. When testing the two-way interaction model against the main-effects model in a two-way table the score statistic and p-values match the Rao-Scott tests computed by \code{\link{svychisq}}. The \code{anova} method can only compare two models if they are for exactly the same multiway table (same variables and same order). The \code{update} method will help with this. It is also much faster to use \code{update} than \code{svyloglin} for a large data set: its time complexity depends only on the size of the model, not on the size of the data set. It is not possible to fit a model using a variable created inline, eg \code{I(x<10)}, since the multiway table is based on all variables used in the formula. } \value{ Object of class \code{"svyloglin"} } \references{ Rao, JNK, Scott, AJ (1984) "On Chi-squared Tests For Multiway Contingency Tables with Proportions Estimated From Survey Data" Annals of Statistics 12:46-60. } \seealso{\code{\link{svychisq}}, \code{\link{svyglm}},\code{\link{pchisqsum}}} \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) a<-svyloglin(~stype+comp.imp,dclus1) b<-update(a,~.^2) an<-anova(a,b) an print(an, pval="saddlepoint") ## Wald test regTermTest(b, ~stype:comp.imp) ## linear-by-linear association d<-update(a,~.+as.numeric(stype):as.numeric(comp.imp)) an1<-anova(a,d) an1 } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/withReplicates.Rd0000755000176200001440000001101012372242764015645 0ustar liggesusers\name{withReplicates} \alias{withReplicates} \alias{withReplicates.svyrep.design} \alias{withReplicates.svrepvar} \alias{withReplicates.svrepstat} %- Also NEED an `\alias' for EACH other topic documented here. \title{Compute variances by replicate weighting} \description{ Given a function or expression computing a statistic based on sampling weights, \code{withReplicates} evaluates the statistic and produces a replicate-based estimate of variance. } \usage{ withReplicates(design, theta,..., return.replicates=FALSE) \method{withReplicates}{svyrep.design}(design, theta, rho = NULL, ..., scale.weights=FALSE, return.replicates=FALSE) \method{withReplicates}{svrepvar}(design, theta, ..., return.replicates=FALSE) \method{withReplicates}{svrepstat}(design, theta, ..., return.replicates=FALSE) } %- maybe also `usage' for other objects documented here. \arguments{ \item{design}{A survey design with replicate weights (eg from \code{\link{svrepdesign}}) or a suitable object with replicate parameter estimates} \item{theta}{A function or expression: see Details below} \item{rho}{If \code{design} uses BRR weights, \code{rho} optionally specifies the parameter for Fay's variance estimator.} \item{\dots}{Other arguments to \code{theta}} \item{scale.weights}{Divide the probability weights by their sum (can help with overflow problems)} \item{return.replicates}{Return the replicate estimates as well as the variance?} } \details{ The method for \code{svyrep.design} objects evaluates a function or expression using the sampling weights and then each set of replicate weights. The method for \code{svrepvar} objects evaluates the function or expression on an estimated population covariance matrix and its replicates, to simplify multivariate statistics such as structural equation models. For the \code{svyrep.design} method, if \code{theta} is a function its first argument will be a vector of weights and the second argument will be a data frame containing the variables from the design object. If it is an expression, the sampling weights will be available as the variable \code{.weights}. Variables in the design object will also be in scope. It is possible to use global variables in the expression, but unwise, as they may be masked by local variables inside \code{withReplicates}. For the \code{svrepvar} method a function will get the covariance matrix as its first argument, and an expression will be evaluated with \code{.replicate} set to the variance matrix. For the \code{svrepstat} method a function will get the point estimate, and an expression will be evaluated with \code{.replicate} set to each replicate. The method can only be used when the \code{svrepstat} object includes replicates. } \value{ If \code{return.replicates=FALSE}, the weighted statistic, with the variance matrix as the \code{"var"} attribute. If \code{return.replicates=TRUE}, a list with elements \code{theta} for the usual return value and \code{replicates} for the replicates. } \seealso{ \code{\link{svrepdesign}}, \code{\link{as.svrepdesign}}, \code{\link{svrVar}}} \examples{ data(scd) repweights<-2*cbind(c(1,0,1,0,1,0), c(1,0,0,1,0,1), c(0,1,1,0,0,1), c(0,1,0,1,1,0)) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights) a<-svyratio(~alive, ~arrests, design=scdrep) print(a$ratio) print(a$var) withReplicates(scdrep, quote(sum(.weights*alive)/sum(.weights*arrests))) withReplicates(scdrep, function(w,data) sum(w*data$alive)/sum(w*data$arrests)) data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1<-as.svrepdesign(dclus1) varmat<-svyvar(~api00+api99+ell+meals+hsg+mobility,rclus1,return.replicates=TRUE) withReplicates(varmat, quote( factanal(covmat=.replicate, factors=2)$unique) ) data(nhanes) nhanesdesign <- svydesign(id=~SDMVPSU, strata=~SDMVSTRA, weights=~WTMEC2YR, nest=TRUE,data=nhanes) logistic <- svyglm(HI_CHOL~race+agecat+RIAGENDR, design=as.svrepdesign(nhanesdesign), family=quasibinomial, return.replicates=TRUE) fitted<-predict(logistic, return.replicates=TRUE, type="response") sensitivity<-function(pred,actual) mean(pred>0.1 & actual)/mean(actual) withReplicates(fitted, sensitivity, actual=logistic$y) \dontrun{ library(quantreg) data(api) ## one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) ## convert to bootstrap bclus1<-as.svrepdesign(dclus1,type="bootstrap", replicates=100) ## median regression withReplicates(bclus1, quote(coef(rq(api00~api99, tau=0.5, weights=.weights)))) } } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svypredmeans.Rd0000644000176200001440000000473412537401202015375 0ustar liggesusers\name{svypredmeans} \alias{svypredmeans} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Predictive marginal means } \description{ Predictive marginal means for a generalised linear model, using the method of Korn and Graubard (1999) and matching the results of SUDAAN. The predictive marginal mean for one level of a factor is the probability-weighted average of the fitted values for the model on new data where all the observations are set to that level of the factor but have whatever values of adjustment variables they really have. } \usage{ svypredmeans(adjustmodel, groupfactor) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{adjustmodel}{ A generalised linear model fit by \code{\link{svyglm}} with the adjustment variable but without the factor for which predictive means are wanted } \item{groupfactor}{ A one-sided formula specifying the factor for which predictive means are wanted. Can use, eg, \code{~interaction(race,sex)} for combining variables} } \value{ An object of class \code{svystat} with the predictive marginal means and their covariance matrix. } \references{ Graubard B, Korn E (1999) "Predictive Margins with Survey Data" Biometrics 55:652-659 Bieler, Brown, Williams, & Brogan (2010) "Estimating Model-Adjusted Risks, Risk Differences, and Risk Ratios From Complex Survey Data" Am J Epi DOI: 10.1093/aje/kwp440} \note{ It is possible to supply an adjustment model with only an intercept, but the results are then the same as \code{\link{svymean}} It makes no sense to have a variable in the adjustment model that is part of the grouping factor, and will give an error message or \code{NA}. } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{\link{svyglm}} Worked example using National Health Interview Survey data: \url{https://gist.github.com/tslumley/2e74cd0ac12a671d2724} } \examples{ data(nhanes) nhanes_design <- svydesign(id=~SDMVPSU, strata=~SDMVSTRA, weights=~WTMEC2YR, nest=TRUE,data=nhanes) agesexmodel<-svyglm(HI_CHOL~agecat+RIAGENDR, design=nhanes_design,family=quasibinomial) ## high cholesterol by race/ethnicity, adjusted for demographic differences means<-svypredmeans(agesexmodel, ~race) means ## relative risks compared to non-Hispanic white svycontrast(means,quote(`1`/`2`)) svycontrast(means,quote(`3`/`2`)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{regression}% __ONLY ONE__ keyword per line survey/man/hadamard.Rd0000755000176200001440000000425412750541053014424 0ustar liggesusers\name{hadamard} \alias{hadamard} %- Also NEED an '\alias' for EACH other topic documented here. \title{Hadamard matrices } \description{ Returns a Hadamard matrix of dimension larger than the argument. } \usage{ hadamard(n) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{n}{lower bound for size } } \value{ A Hadamard matrix } \details{ For most \code{n} the matrix comes from \code{\link{paley}}. The \eqn{36\times 36}{36x36} matrix is from Plackett and Burman (1946) and the \eqn{28\times 28}{28x28} is from Sloane's library of Hadamard matrices. Matrices of dimension every multiple of 4 are thought to exist, but this function doesn't know about all of them, so it will sometimes return matrices that are larger than necessary. The excess is at most 4 for \eqn{n<180}{n<180} and at most 5\% for \eqn{n>100}{n>100}. } \note{Strictly speaking, a Hadamard matrix has entries +1 and -1 rather than 1 and 0, so \code{2*hadamard(n)-1} is a Hadamard matrix} \references{ Sloane NJA. A Library of Hadamard Matrices \url{http://neilsloane.com/hadamard/} Plackett RL, Burman JP. (1946) The Design of Optimum Multifactorial Experiments Biometrika, Vol. 33, No. 4 pp. 305-325 Cameron PJ (2005) Hadamard Matrices \url{http://designtheory.org/library/encyc/topics/had.pdf}. In: The Encyclopedia of Design Theory \url{http://designtheory.org/library/encyc/} } \seealso{\code{\link{brrweights}}, \code{\link{paley}}} \examples{ par(mfrow=c(2,2)) ## Sylvester-type image(hadamard(63),main=quote("Sylvester: "*64==2^6)) ## Paley-type image(hadamard(59),main=quote("Paley: "*60==59+1)) ## from NJ Sloane's library image(hadamard(27),main=quote("Stored: "*28)) ## For n=90 we get 96 rather than the minimum possible size, 92. image(hadamard(90),main=quote("Constructed: "*96==2^3\%*\%(11+1))) par(mfrow=c(1,1)) plot(2:150,sapply(2:150,function(i) ncol(hadamard(i))),type="S", ylab="Matrix size",xlab="n",xlim=c(1,150),ylim=c(1,150)) abline(0,1,lty=3) lines(2:150, 2:150-(2:150 \%\% 4)+4,col="purple",type="S",lty=2) legend(c(x=10,y=140),legend=c("Actual size","Minimum possible size"), col=c("black","purple"),bty="n",lty=c(1,2)) } \keyword{survey} survey/man/svymle.Rd0000755000176200001440000001350312372242764014206 0ustar liggesusers\name{svymle} \alias{svymle} \alias{print.svymle} \alias{coef.svymle} \alias{summary.svymle} \alias{vcov.svymle} %- Also NEED an `\alias' for EACH other topic documented here. \title{Maximum pseudolikelihood estimation in complex surveys} \description{ Fits a user-specified likelihood parametrised by multiple linear predictors to data from a complex sample survey and computes the sandwich variance estimator of the coefficients. Note that this function maximises an estimated population likelihood, it is not the sample MLE. } \usage{ svymle(loglike, gradient = NULL, design, formulas, start = NULL, control = list(maxit=1000), na.action="na.fail", method=NULL, ...) \method{summary}{svymle}(object, stderr=c("robust", "model"),...) } %- maybe also `usage' for other objects documented here. \arguments{ \item{loglike}{vectorised loglikelihood function} \item{gradient}{Derivative of \code{loglike}. Required for variance computation and helpful for fitting} \item{design}{ a \code{survey.design} object } \item{formulas}{A list of formulas specifying the variable and linear predictors: see Details below} \item{start}{Starting values for parameters} \item{control}{control options for \code{\link{optim}}} \item{na.action}{Handling of \code{NA}s} \item{method}{\code{"nlm"} to use \code{nlm}, otherwise passed to \code{\link{optim}}} \item{\dots}{Arguments to \code{loglike} and \code{gradient} that are not to be optimised over.} \item{object}{\code{svymle} object} \item{stderr}{Choice of standard error estimator. The default is a standard sandwich estimator. See Details below.} } \details{ Optimization is done by \code{\link{nlm}} by default or if \code{method=="nlm"}. Otherwise \code{\link{optim}} is used and \code{method} specifies the method and \code{control} specifies control parameters. The \code{design} object contains all the data and design information from the survey, so all the formulas refer to variables in this object. The \code{formulas} argument needs to specify the response variable and a linear predictor for each freely varying argument of \code{loglike}. Consider for example the \code{\link{dnorm}} function, with arguments \code{x}, \code{mean}, \code{sd} and \code{log}, and suppose we want to estimate the mean of \code{y} as a linear function of a variable \code{z}, and to estimate a constant standard deviation. The \code{log} argument must be fixed at \code{FALSE} to get the loglikelihood. A \code{formulas} argument would be \code{list(~y, mean=~z, sd=~1)}. Note that the data variable \code{y} must be the first argument to \code{dnorm} and the first formula and that all the other formulas are labelled. It is also permitted to have the data variable as the left-hand side of one of the formulas: eg \code{list( mean=y~z, sd=~1)}. The usual variance estimator for MLEs in a survey sample is a `sandwich' variance that requires the score vector and the information matrix. It requires only sampling assumptions to be valid (though some model assumptions are required for it to be useful). This is the \code{stderr="robust"} option, which is available only when the \code{gradient} argument was specified. If the model is correctly specified and the sampling is at random conditional on variables in the model then standard errors based on just the information matrix will be approximately valid. In particular, for independent sampling where weights and strata depend on variables in the model the \code{stderr="model"} should work fairly well. } \value{ An object of class \code{svymle} } \author{Thomas Lumley} \seealso{\code{\link{svydesign}}, \code{\link{svyglm}}} \examples{ data(api) dstrat<-svydesign(id=~1, strata=~stype, weight=~pw, fpc=~fpc, data=apistrat) ## fit with glm m0 <- svyglm(api00~api99+ell,family="gaussian",design=dstrat) ## fit as mle (without gradient) m1 <- svymle(loglike=dnorm,gradient=NULL, design=dstrat, formulas=list(mean=api00~api99+ell, sd=~1), start=list(c(80,1,0),c(20)), log=TRUE) ## with gradient gr<- function(x,mean,sd,log){ dm<-2*(x - mean)/(2*sd^2) ds<-(x-mean)^2*(2*(2 * sd))/(2*sd^2)^2 - sqrt(2*pi)/(sd*sqrt(2*pi)) cbind(dm,ds) } m2 <- svymle(loglike=dnorm,gradient=gr, design=dstrat, formulas=list(mean=api00~api99+ell, sd=~1), start=list(c(80,1,0),c(20)), log=TRUE, method="BFGS") summary(m0) summary(m1,stderr="model") summary(m2) ## More complicated censored data example ## showing that the response variable can be multivariate data(pbc, package="survival") pbc$randomized <- with(pbc, !is.na(trt) & trt>0) biasmodel<-glm(randomized~age*edema,data=pbc) pbc$randprob<-fitted(biasmodel) dpbc<-svydesign(id=~1, prob=~randprob, strata=~edema, data=subset(pbc,randomized)) lcens<-function(x,mean,sd){ ifelse(x[,2]==1, dnorm(log(x[,1]),mean,sd,log=TRUE), pnorm(log(x[,1]),mean,sd,log=TRUE,lower.tail=FALSE) ) } gcens<- function(x,mean,sd){ dz<- -dnorm(log(x[,1]),mean,sd)/pnorm(log(x[,1]),mean,sd,lower.tail=FALSE) dm<-ifelse(x[,2]==1, 2*(log(x[,1]) - mean)/(2*sd^2), dz*-1/sd) ds<-ifelse(x[,2]==1, (log(x[,1])-mean)^2*(2*(2 * sd))/(2*sd^2)^2 - sqrt(2*pi)/(sd*sqrt(2*pi)), ds<- dz*-(log(x[,1])-mean)/(sd*sd)) cbind(dm,ds) } if(!is.null(pbc$albumin)){ svymle(loglike=lcens, gradient=gcens, design=dpbc, formulas=list(mean=I(cbind(time,status>0))~bili+protime+albumin, sd=~1), start=list(c(10,0,0,0),c(1))) } else { svymle(loglike=lcens, gradient=gcens, design=dpbc, formulas=list(mean=I(cbind(time,status>0))~bili+protime+alb, sd=~1), start=list(c(10,0,0,0),c(1))) } } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{models}% __ONLY ONE__ keyword per line \keyword{optimize}% __ONLY ONE__ keyword per line survey/man/barplot.svystat.Rd0000644000176200001440000000273412372242764016047 0ustar liggesusers\name{barplot.svystat} \alias{barplot.svystat} \alias{barplot.svrepstat} \alias{barplot.svyby} \alias{dotchart} \alias{dotchart.svystat} \alias{dotchart.svrepstat} \alias{dotchart.svyby} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Barplots and Dotplots } \description{ Draws a barplot or dotplot based on results from a survey analysis. The default barplot method already works for results from \code{\link{svytable}}. } \usage{ \method{barplot}{svystat}(height, ...) \method{barplot}{svrepstat}(height, ...) \method{barplot}{svyby}(height,beside=TRUE, ...) \method{dotchart}{svystat}(x,...,pch=19) \method{dotchart}{svrepstat}(x,...,pch=19) \method{dotchart}{svyby}(x,...,pch=19) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{height,x}{Analysis result } \item{beside}{Grouped, rather than stacked, bars} \item{\dots}{ Arguments to \code{\link{barplot}} or \code{dotchart} } \item{pch}{Overrides the default in \code{dotchart.default}} } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) a<-svymean(~stype, dclus1) barplot(a) barplot(a, names.arg=c("Elementary","High","Middle"), col="purple", main="Proportions of school level") b<-svyby(~enroll+api.stu, ~stype, dclus1, svymean) barplot(b,beside=TRUE,legend=TRUE) dotchart(b) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{hplot}% __ONLY ONE__ keyword per line survey/man/as.svydesign2.Rd0000755000176200001440000000202212242746122015351 0ustar liggesusers\name{as.svydesign2} \alias{as.svydesign2} \alias{.svycheck} %- Also NEED an '\alias' for EACH other topic documented here. \title{Update to the new survey design format} \description{ The structure of survey design objects changed in version 2.9, to allow standard errors based on multistage sampling. \code{as.svydesign} converts an object to the new structure and \code{.svycheck} warns if an object does not have the new structure. You can set \code{options(survey.want.obsolete=TRUE)} to suppress the warnings produced by \code{.svycheck} and \code{options(survey.ultimate.cluster=TRUE)} to always compute variances based on just the first stage of sampling. } \usage{ as.svydesign2(object) .svycheck(object) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{produced by \code{svydesign}} } \value{ Object of class \code{survey.design2} } \seealso{\code{\link{svydesign}}, \code{\link{svyrecvar}}} \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/regTermTest.Rd0000755000176200001440000000572713115662425015141 0ustar liggesusers\name{regTermTest} \alias{regTermTest} \alias{print.regTermTest} %- Also NEED an '\alias' for EACH other topic documented here. \title{Wald test for a term in a regression model} \description{ Provides Wald test and working likelihood ratio (Rao-Scott) test of the hypothesis that all coefficients associated with a particular regression term are zero (or have some other specified values). Particularly useful as a substitute for \code{\link{anova}} when not fitting by maximum likelihood. The Wald tests use a chisquared or F distribution, the LRT uses a linear combination of chisquared or F distributions as in \code{\link{pchisqsum}}. } \usage{ regTermTest(model, test.terms, null=NULL,df=NULL, method=c("Wald","LRT"), lrt.approximation="saddlepoint") } %- maybe also 'usage' for other objects documented here. \arguments{ \item{model}{A model object with \code{\link{coef}} and \code{\link{vcov}} methods} \item{test.terms}{Character string or one-sided formula giving name of term or terms to test} \item{null}{Null hypothesis values for parameters. Default is zeros} \item{df}{Denominator degrees of freedom for an F test. If \code{NULL} these are estimated from the model. Use \code{Inf} for a chi-squared test.} \item{method}{If \code{"Wald"}, the Wald-type test; if \code{"LRT"} the Rao-Scott test based on the estimated log likelihood ratio} \item{lrt.approximation}{method for approximating the distribution of the LRT statistic; see \code{\link{pchisqsum}}} } \value{ An object of class \code{regTermTest} or \code{regTermTestLRT}. } \references{ Rao, JNK, Scott, AJ (1984) "On Chi-squared Tests For Multiway Contingency Tables with Proportions Estimated From Survey Data" Annals of Statistics 12:46-60. Lumley T, Scott A (2012) "Partial likelihood ratio tests for the Cox model under complex sampling" Statistics in Medicine 17 JUL 2012. DOI: 10.1002/sim.5492 Lumley T, Scott A (2014) "Tests for Regression Models Fitted to Survey Data" Australian and New Zealand Journal of Statistics 56:1-14 DOI: 10.1111/anzs.12065 } \note{ The \code{"LRT"} method will not work if the model had starting values supplied for the regression coefficients. Instead, fit the two models separately and use \code{anova(model1, model2, force=TRUE)} } \seealso{\code{\link{anova}}, \code{\link{vcov}}, \code{\link{contrasts}},\code{\link{pchisqsum}}} \examples{ data(esoph) model1 <- glm(cbind(ncases, ncontrols) ~ agegp + tobgp * alcgp, data = esoph, family = binomial()) anova(model1) regTermTest(model1,"tobgp") regTermTest(model1,"tobgp:alcgp") regTermTest(model1, ~alcgp+tobgp:alcgp) data(api) dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) model2<-svyglm(I(sch.wide=="Yes")~ell+meals+mobility, design=dclus2, family=quasibinomial()) regTermTest(model2, ~ell) regTermTest(model2, ~ell,df=NULL) regTermTest(model2, ~ell, method="LRT", df=Inf) regTermTest(model2, ~ell+meals, method="LRT", df=NULL) } \keyword{regression}% at least one, from doc/KEYWORDS survey/man/HR.Rd0000644000176200001440000000242112242746122013163 0ustar liggesusers\name{HR} \Rdversion{1.1} \alias{HR} \alias{ppsmat} %- Also NEED an '\alias' for EACH other topic documented here. \title{Wrappers for specifying PPS designs} \description{ The Horvitz-Thompson estimator and the Hartley-Rao approximation require information in addition to the sampling probabilities for sampled individuals. These functions allow this information to be supplied. } \usage{ HR(psum=NULL, strata = NULL) ppsmat(jointprob, tolerance = 1e-04) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{psum}{ The sum of squared sampling probabilities for the population, divided by the sample size, as a single number or as a vector for stratified sampling } \item{strata}{ Stratum labels, of the same length as \code{psum}, if \code{psum} is a vector } \item{jointprob}{Matrix of pairwise sampling probabilities for the sampled individuals} \item{tolerance}{Tolerance for deciding that the covariance of sampling indicators is zero} } \value{ An object of class \code{HR} or \code{ppsmat}, suitable for supplying as the \code{pps} argument to \code{\link{svydesign}}. } \seealso{ \link{election} for examples of PPS designs } \examples{ HR(0.1) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/hospital.Rd0000755000176200001440000000163212242746122014503 0ustar liggesusers\name{hospital} \alias{hospital} \non_function{} \title{Sample of obstetric hospitals } \usage{data(hospital)} \description{ The \code{hospital} data frame has 15 rows and 5 columns. } \format{ This data frame contains the following columns: \describe{ \item{hospno}{Hospital id} \item{oblevel}{level of obstetric care} \item{weighta}{Weights, as given by the original reference} \item{tothosp}{total hospitalisations} \item{births}{births} \item{weightats}{Weights, as given in the source} } } \source{ \url{http://www.ats.ucla.edu/stat/books/sop/hospsamp.dta} } \references{ Levy and Lemeshow. "Sampling of Populations" (3rd edition). Wiley. } \examples{ data(hospital) hospdes<-svydesign(strata=~oblevel, id=~hospno, weights=~weighta, fpc=~tothosp, data=hospital) hosprep<-as.svrepdesign(hospdes) svytotal(~births, design=hospdes) svytotal(~births, design=hosprep) } \keyword{datasets} survey/man/svyttest.Rd0000644000176200001440000000213012242746122014554 0ustar liggesusers\name{svyttest} \alias{svyttest} %- Also NEED an '\alias' for EACH other topic documented here. \title{Design-based t-test} \description{ One-sample or two-sample t-test. This function is a wrapper for \code{\link{svymean}} in the one-sample case and for \code{\link{svyglm}} in the two-sample case. Degrees of freedom are \code{degf(design)} for the one-sample test and \code{degf(design)-1} for the two-sample case. } \usage{ svyttest(formula, design, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Formula, \code{outcome~group} for two-sample, \code{outcome~0} or \code{outcome~1} for one-sample } \item{design}{survey design object} \item{\dots}{for methods } } \value{ Object of class \code{htest} } \seealso{ \code{\link{t.test}}} \examples{ data(api) dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) svyttest(enroll~comp.imp, dclus2) svyttest(I(api00-api99)~0, dclus2) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{htest}% __ONLY ONE__ keyword per line survey/man/make.calfun.Rd0000644000176200001440000000375513122061121015034 0ustar liggesusers\name{make.calfun} \alias{make.calfun} \alias{cal.linear} \alias{cal.raking} \alias{cal.logit} \alias{cal.sinh} %- Also NEED an '\alias' for EACH other topic documented here. \title{Calibration metrics} \description{ Create calibration metric for use in \code{\link{calibrate}}. The function \code{F} is the link function described in section 2 of Deville et al. To create a new calibration metric, specify \eqn{F-1}{F-1} and its derivative. The package provides \code{cal.linear}, \code{cal.raking}, \code{cal.logit}, which are standard, and \code{cal.sinh} from the \code{CALMAR2} macro, for which \code{F} is the derivative of the inverse hyperbolic sine. } \usage{ make.calfun(Fm1, dF, name) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{Fm1}{Function \eqn{F-1}{F-1} taking a vector \code{u} and a vector of length 2, \code{bounds}.} \item{dF}{Derivative of \code{Fm1} wrt \code{u}: arguments \code{u} and \code{bounds} } \item{name}{Character string to use as name } } \value{ An object of class \code{"calfun"} } \references{ Deville J-C, Sarndal C-E, Sautory O (1993) Generalized Raking Procedures in Survey Sampling. JASA 88:1013-1020 Deville J-C, Sarndal C-E (1992) Calibration Estimators in Survey Sampling. JASA 87: 376-382 } \seealso{\code{\link{calibrate}} } \examples{ str(cal.linear) cal.linear$Fm1 cal.linear$dF hellinger <- make.calfun(Fm1=function(u, bounds) ((1-u/2)^-2)-1, dF= function(u, bounds) (1-u/2)^-3 , name="hellinger distance") hellinger data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svymean(~api00,calibrate(dclus1, ~api99, pop=c(6194, 3914069), calfun=hellinger)) svymean(~api00,calibrate(dclus1, ~api99, pop=c(6194, 3914069), calfun=cal.linear)) svymean(~api00,calibrate(dclus1, ~api99, pop=c(6194,3914069), calfun=cal.raking)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/nhanes.Rd0000644000176200001440000000174212242746122014133 0ustar liggesusers\name{nhanes} \alias{nhanes} \docType{data} \title{ Cholesterol data from a US survey } \description{ Data extracted from NHANES 2009-2010 on high cholesterol. } \usage{data(nhanes)} \format{ A data frame with 8591 observations on the following 7 variables. \describe{ \item{\code{SDMVPSU}}{Primary sampling units} \item{\code{SDMVSTRA}}{Sampling strata} \item{\code{WTMEC2YR}}{Sampling weights} \item{\code{HI_CHOL}}{Numeric vector: 1 for total cholesterol over 240mg/dl, 0 under 240mg/dl} \item{\code{race}}{1=Hispanic, 2=non-Hispanic white, 3=non-Hispanic black, 4=other} \item{\code{agecat}}{Age group \code{(0,19]} \code{(19,39]} \code{(39,59]} \code{(59,Inf]}} \item{\code{RIAGENDR}}{Gender: 1=male, 2=female} } } \source{ \url{ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/nhanes/2009-2010} } \examples{ data(nhanes) design <- svydesign(id=~SDMVPSU, strata=~SDMVSTRA, weights=~WTMEC2YR, nest=TRUE,data=nhanes) design } \keyword{datasets} survey/man/svycoplot.Rd0000644000176200001440000000372012242746122014717 0ustar liggesusers\name{svycoplot} \alias{svycoplot} %- Also NEED an '\alias' for EACH other topic documented here. \title{Conditioning plots of survey data } \description{ Draws conditioned scatterplots ('Trellis' plots) of survey data using hexagonal binning or transparency. } \usage{ svycoplot(formula, design, style = c("hexbin", "transparent"), basecol = "black", alpha = c(0, 0.8),hexscale=c("relative","absolute"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{A graph formula suitable for \code{\link{xyplot}}} \item{design}{A survey design object } \item{style}{Hexagonal binning or transparent color?} \item{basecol}{The fully opaque 'base' color for creating transparent colors. This may also be a function; see \code{\link{svyplot}} for details} \item{alpha}{Minimum and maximum opacity } \item{hexscale}{Scale hexagons separate for each panel (relative) or across all panels (absolute)} \item{\dots}{Other arguments passed to \code{grid.hexagons} or \code{\link{xyplot}} } } \value{ An object of class \code{trellis} } \note{ As with all 'Trellis' graphs, this function creates an object but does not draw the graph. When used inside a function or non-interactively you need to \code{print()} the result to create the graph. } \seealso{\code{\link{svyplot}}} \examples{ data(api) dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2, fpc=~fpc1+fpc2) svycoplot(api00~api99|sch.wide*comp.imp, design=dclus2, style="hexbin") svycoplot(api00~api99|sch.wide*comp.imp, design=dclus2, style="hexbin", hexscale="absolute") svycoplot(api00~api99|sch.wide, design=dclus2, style="trans") svycoplot(api00~meals|stype,design=dclus2, style="transparent", basecol=function(d) c("darkred","purple","forestgreen")[as.numeric(d$stype)], alpha=c(0,1)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{hplot}% __ONLY ONE__ keyword per line survey/man/yrbs.Rd0000644000176200001440000000225413006463121013627 0ustar liggesusers\name{yrbs} \alias{yrbs} \docType{data} \title{ One variable from the Youth Risk Behaviors Survey, 2015. } \description{ Design information from the Youth Risk Behaviors Survey (YRBS), together with the single variable `Never/Rarely wore bike helmet'. Used as an analysis example by CDC. } \usage{data("yrbs")} \format{ A data frame with 15624 observations on the following 4 variables. \describe{ \item{\code{weight}}{sampling weights} \item{\code{stratum}}{sampling strata} \item{\code{psu}}{primary sampling units} \item{\code{qn8}}{1=Yes, 2=No} } } \source{ \url{ftp://ftp.cdc.gov/pub/data/yrbs/2015smy/} for files } \references{ Centers for Disease Control and Prevention (2016) Software for Analysis of YRBS Data.\url{https://www.cdc.gov/healthyyouth/data/yrbs/pdf/2015/2015_yrbs_analysis_software.pdf} } \examples{ data(yrbs) yrbs_design <- svydesign(id=~psu, weight=~weight, strata=~stratum, data=yrbs) yrbs_design <- update(yrbs_design, qn8yes=2-qn8) ci <- svyciprop(~qn8yes, yrbs_design, na.rm=TRUE, method="xlogit") ci ## to print more digits: matches SUDAAN and SPSS exactly, per table 3 of reference coef(ci) SE(ci) attr(ci,"ci") } \keyword{datasets} survey/man/stratsample.Rd0000644000176200001440000000165212242746122015216 0ustar liggesusers\name{stratsample} \Rdversion{1.1} \alias{stratsample} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Take a stratified sample } \description{ This function takes a stratified sample without replacement from a data set. } \usage{ stratsample(strata, counts) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{strata}{ Vector of stratum identifiers; will be coerced to character } \item{counts}{ named vector of stratum sample sizes, with names corresponding to the values of \code{as.character(strata)} } } \value{ vector of indices into \code{strata} giving the sample } \seealso{ \code{\link{sample}} The "sampling" package has many more sampling algorithms. } \examples{ data(api) s<-stratsample(apipop$stype, c("E"=5,"H"=4,"M"=2)) table(apipop$stype[s]) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/postStratify.Rd0000755000176200001440000000751512750541053015401 0ustar liggesusers\name{postStratify} \alias{postStratify} \alias{postStratify.twophase} \alias{postStratify.svyrep.design} \alias{postStratify.survey.design} %- Also NEED an '\alias' for EACH other topic documented here. \title{Post-stratify a survey } \description{ Post-stratification adjusts the sampling and replicate weights so that the joint distribution of a set of post-stratifying variables matches the known population joint distribution. Use \code{\link{rake}} when the full joint distribution is not available. } \usage{ postStratify(design, strata, population, partial = FALSE, ...) \method{postStratify}{svyrep.design}(design, strata, population, partial = FALSE, compress=NULL,...) \method{postStratify}{survey.design}(design, strata, population, partial = FALSE, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{design}{A survey design with replicate weights} \item{strata}{A formula or data frame of post-stratifying variables, which must not contain missing values. } \item{population}{A \code{\link{table}}, \code{\link{xtabs}} or \code{data.frame} with population frequencies } \item{partial}{if \code{TRUE}, ignore population strata not present in the sample} \item{compress}{Attempt to compress the replicate weight matrix? When \code{NULL} will attempt to compress if the original weight matrix was compressed} \item{...}{arguments for future expansion} } \details{ The \code{population} totals can be specified as a table with the strata variables in the margins, or as a data frame where one column lists frequencies and the other columns list the unique combinations of strata variables (the format produced by \code{as.data.frame} acting on a \code{table} object). A table must have named dimnames to indicate the variable names. Compressing the replicate weights will take time and may even increase memory use if there is actually little redundancy in the weight matrix (in particular if the post-stratification variables have many values and cut across PSUs). If a \code{svydesign} object is to be converted to a replication design the post-stratification should be performed after conversion. The variance estimate for replication designs follows the same procedure as Valliant (1993) described for estimating totals. Rao et al (2002) describe this procedure for estimating functions (and also the GREG or g-calibration procedure, see \code{\link{calibrate}}) } \note{ If the sampling weights are already post-stratified there will be no change in point estimates after \code{postStratify} but the standard error estimates will decrease to correctly reflect the post-stratification. } \value{ A new survey design object. } \references{ Valliant R (1993) Post-stratification and conditional variance estimation. JASA 88: 89-96 Rao JNK, Yung W, Hidiroglou MA (2002) Estimating equations for the analysis of survey data using poststratification information. Sankhya 64 Series A Part 2, 364-378. } \seealso{ \code{\link{rake}}, \code{\link{calibrate}} for other things to do with auxiliary information \code{\link{compressWeights}} for information on compressing weights} \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1<-as.svrepdesign(dclus1) svymean(~api00, rclus1) svytotal(~enroll, rclus1) # post-stratify on school type pop.types <- data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018)) #or: pop.types <- xtabs(~stype, data=apipop) #or: pop.types <- table(stype=apipop$stype) rclus1p<-postStratify(rclus1, ~stype, pop.types) summary(rclus1p) svymean(~api00, rclus1p) svytotal(~enroll, rclus1p) ## and for svydesign objects dclus1p<-postStratify(dclus1, ~stype, pop.types) summary(dclus1p) svymean(~api00, dclus1p) svytotal(~enroll, dclus1p) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip} survey/man/svysurvreg.Rd0000644000176200001440000000352113101467321015107 0ustar liggesusers\name{svysurvreg} \alias{svysurvreg} \alias{svysurvreg.survey.design} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Fit accelerated failure models to survey data } \description{ This function calls \code{survreg} from the 'survival' package to fit accelerated failure (accelerated life) models to complex survey data, and then computes correct standard errors by linearisation. It has the same arguments as \code{survreg}, except that the second argument is \code{design} rather than \code{data}. } \usage{ \method{svysurvreg}{survey.design}(formula, design, weights=NULL, subset=NULL, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ Model formula } \item{design}{ Survey design object, including two-phase designs } \item{weights}{ Additional weights to multiply by the sampling weights. No, I don't know why you'd want to do that. } \item{subset}{ subset to use in fitting (if needed) } \item{\dots}{ Other arguments of \code{survreg} } } \value{ Object of class \code{svysurvreg}, with the same structure as a \code{survreg} object but with \code{NA} for the loglikelihood. } \note{ The \code{residuals} method is identical to that for \code{survreg} objects except the \code{weighted} option defaults to \code{TRUE} } \examples{ data(pbc, package="survival") pbc$randomized <- with(pbc, !is.na(trt) & trt>0) biasmodel<-glm(randomized~age*edema,data=pbc) pbc$randprob<-fitted(biasmodel) dpbc<-svydesign(id=~1, prob=~randprob, strata=~edema, data=subset(pbc,randomized)) model <- svysurvreg(Surv(time, status>0)~bili+protime+albumin, design=dpbc, dist="weibull") summary(model) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey}% use one of RShowDoc("KEYWORDS") \keyword{survival}% __ONLY ONE__ keyword per line survey/man/svyolr.Rd0000644000176200001440000000337212242746122014216 0ustar liggesusers\name{svyolr} \alias{svyolr} \alias{svyolr.survey.design2} \alias{svyolr.svyrep.design} %- Also NEED an '\alias' for EACH other topic documented here. \title{Proportional odds and related models } \description{ Fits cumulative link models: proportional odds, probit, complementary log-log, and cauchit. } \usage{ svyolr(formula, design, ...) \method{svyolr}{survey.design2}(formula, design, start, ..., na.action = na.omit, method = c("logistic", "probit", "cloglog", "cauchit")) \method{svyolr}{svyrep.design}(formula,design,...,return.replicates=FALSE, multicore=getOption("survey.multicore")) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Formula: the response must be a factor with at least three levels} \item{design}{survey design object } \item{\dots}{dots} \item{start}{Optional starting values for optimization} \item{na.action}{handling of missing values} \item{multicore}{Use \code{multicore} package to distribute computation of replicates across multiple processors?} \item{method}{Link function} \item{return.replicates}{return the individual replicate-weight estimates} } \value{ An object of class \code{svyolr} } \author{The code is based closely on polr() from the MASS package of Venables and Ripley.} \seealso{\code{\link{svyglm}}, \code{\link{regTermTest}} } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) dclus1<-update(dclus1, mealcat=cut(meals,c(0,25,50,75,100))) m<-svyolr(mealcat~avg.ed+mobility+stype, design=dclus1) m ## Use regTermTest for testing multiple parameters regTermTest(m, ~avg.ed+stype, method="LRT") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/surveyoptions.Rd0000644000176200001440000000777712242746122015646 0ustar liggesusers\name{surveyoptions} \alias{surveyoptions} \alias{survey.lonely.psu} \alias{survey.ultimate.cluster} \alias{survey.adjust.domain.lonely} \alias{survey.want.obsolete} \alias{survey.drop.replicates} \alias{survey.multicore} \alias{survey.replicates.mse} \title{Options for the survey package} \description{ This help page documents the options that control the behaviour of the survey package. } \details{ All the options for the survey package have names beginning with "survey". Four of them control standard error estimation. \code{options("survey.replicates.mse")} controls the default in \code{svrepdesign} and \code{as.svrepdesign} for computing variances. When \code{options("survey.replicates.mse")} is \code{TRUE}, the default is to create replicate weight designs that compute variances centered at the point estimate, rather than at the mean of the replicates. The option can be overridden by specifying the \code{mse} argument explicitly in \code{svrepdesign} and \code{as.svrepdesign}. The default is \code{FALSE}. When \code{options("survey.ultimate.cluster")} is \code{TRUE}, standard error estimation is based on independence of PSUs at the first stage of sampling, without using any information about subsequent stages. When \code{FALSE}, finite population corrections and variances are estimated recursively. See \code{\link{svyrecvar}} for more information. This option makes no difference unless first-stage finite population corrections are specified, in which case setting the option to \code{TRUE} gives the wrong answer for a multistage study. The only reason to use \code{TRUE} is for compatibility with other software that gives the wrong answer. Handling of strata with a single PSU that are not certainty PSUs is controlled by \code{options("survey.lonely.psu")}. The default setting is \code{"fail"}, which gives an error. Use \code{"remove"} to ignore that PSU for variance computation, \code{"adjust"} to center the stratum at the population mean rather than the stratum mean, and \code{"average"} to replace the variance contribution of the stratum by the average variance contribution across strata. As of version 3.4-2 \code{as.svrepdesign} also uses this option. The variance formulas for domain estimation give well-defined, positive results when a stratum contains only one PSU with observations in the domain, but are not unbiased. If \code{options("survey.adjust.domain.lonely")} is \code{TRUE} and \code{options("survey.lonely.psu")} is \code{"average"} or \code{"adjust"} the same adjustment for lonely PSUs will be used within a domain. Note that this adjustment is not available for replicate-weight designs, nor (currently) for raked, post-stratified, or calibrated designs. The fourth option is \code{options("survey.want.obsolete")}. This controls the warnings about using the deprecated pre-2.9.0 survey design objects. The behaviour of replicate-weight designs for self-representing strata is controlled by \code{options("survey.drop.replicates")}. When \code{TRUE}, various optimizations are used that take advantage of the fact that these strata do not contribute to the variance. The only reason ever to use \code{FALSE} is if there is a bug in the code for these optimizations. The fifth option controls the use of multiple processors with the \code{multicore} package. This option should not affect the values computed by any of the survey functions. If \code{TRUE}, all functions that are able to use multiple processors will do so by default. Using multiple processors may speed up calculations, but need not, especially if the computer is short on memory. The best strategy is probably to experiment with explicitly requesting \code{multicore=TRUE} in functions that support it, to see if there is an increase in speed before setting the global option. } \keyword{survey} survey/man/svystandardize.Rd0000644000176200001440000000414712372242764015742 0ustar liggesusers\name{svystandardize} \alias{svystandardize} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Direct standardization within domains } \description{ In health surveys it is often of interest to standardize domains to have the same distribution of, eg, age as in a target population. The operation is similar to post-stratification, except that the totals for the domains are fixed at the current estimates, not at known population values. This function matches the estimates produced by the (US) National Center for Health Statistics. } \usage{ svystandardize(design, by, over, population, excluding.missing = NULL) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{design}{ survey design object } \item{by}{ A one-sided formula specifying the variables whose distribution will be standardised } \item{over}{ A one-sided formula specifying the domains within which the standardisation will occur } \item{population}{ Desired population totals or proportions for the levels of combinations of variables in \code{by} } \item{excluding.missing}{ Optionally, a one-sided formula specifying variables whose missing values should be dropped before calculating the domain totals. } } \value{ A new survey design object of the same type as the input. } \references{ National Center for Health Statistics \url{http://www.cdc.gov/nchs/tutorials/NHANES/NHANESAnalyses/agestandardization/age_standardization_intro.htm}} \note{ The standard error estimates do not exactly match the NCHS estimates } \seealso{ \code{\link{postStratify}}, \code{\link{svyby}} } \examples{ ## matches http://www.cdc.gov/nchs/data/databriefs/db92_fig1.png data(nhanes) popage <- c( 55901 , 77670 , 72816 , 45364 ) design<-svydesign(id=~SDMVPSU, strata=~SDMVSTRA, weights=~WTMEC2YR, data=nhanes, nest=TRUE) stdes<-svystandardize(design, by=~agecat, over=~race+RIAGENDR, population=popage, excluding.missing=~HI_CHOL) svyby(~HI_CHOL, ~race+RIAGENDR, svymean, design=subset(stdes, agecat!="(0,19]")) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/crowd.Rd0000755000176200001440000000205312242746122013774 0ustar liggesusers\name{crowd} \alias{crowd} \docType{data} \title{Household crowding} \description{ A tiny dataset from the VPLX manual. } \usage{data(crowd)} \format{ A data frame with 6 observations on the following 5 variables. \describe{ \item{rooms}{Number of rooms in the house} \item{person}{Number of people in the household} \item{weight}{Sampling weight} \item{cluster}{Cluster number} \item{stratum}{Stratum number} } } \source{ Manual for VPLX, Census Bureau. } \examples{ data(crowd) ## Example 1-1 i1.1<-as.svrepdesign(svydesign(id=~cluster, weight=~weight,data=crowd)) i1.1<-update(i1.1, room.ratio=rooms/person, overcrowded=factor(person>rooms)) svymean(~rooms+person+room.ratio,i1.1) svytotal(~rooms+person+room.ratio,i1.1) svymean(~rooms+person+room.ratio,subset(i1.1,overcrowded==TRUE)) svytotal(~rooms+person+room.ratio,subset(i1.1,overcrowded==TRUE)) ## Example 1-2 i1.2<-as.svrepdesign(svydesign(id=~cluster,weight=~weight,strata=~stratum, data=crowd)) svymean(~rooms+person,i1.2) svytotal(~rooms+person,i1.2) } \keyword{datasets} survey/man/svycoxph.Rd0000755000176200001440000001074212242746122014545 0ustar liggesusers\name{svycoxph} \alias{svycoxph} \alias{svycoxph.survey.design2} \alias{svycoxph.survey.design} \alias{svycoxph.svyrep.design} \alias{predict.svycoxph} %\alias{print.svycoxph} %\alias{model.frame.svycoxph} %\alias{summary.svycoxph} %\alias{anova.svycoxph} %\alias{extractAIC.svycoxph} %\alias{survfit.svycoxph} %- Also NEED an `\alias' for EACH other topic documented here. \title{Survey-weighted Cox models.} \description{ Fit a proportional hazards model to data from a complex survey design. } \usage{ svycoxph(formula, design,subset=NULL, ...) \method{predict}{svycoxph}(object, newdata, se=FALSE, type=c("lp", "risk", "expected", "terms","curve"),...) } %- maybe also `usage' for other objects documented here. \arguments{ \item{formula}{Model formula. Any \code{cluster()} terms will be ignored.} \item{design}{ \code{survey.design} object. Must contain all variables in the formula} \item{subset}{Expression to select a subpopulation} \item{object}{A \code{svycoxph} object} \item{newdata}{New data for prediction} \item{se}{Compute standard errors? This takes a lot of memory for \code{type="curve"}} \item{type}{"curve" does predicted survival curves. The other values are passed to \code{predict.coxph()}} \item{\dots}{Other arguments passed to \code{coxph}. } } \details{ The main difference between \code{svycoxph} function and the \code{robust=TRUE} option to \code{\link{coxph}} in the survival package is that this function accounts for the reduction in variance from stratified sampling and the increase in variance from having only a small number of clusters. Note that \code{strata} terms in the model formula describe subsets that have a separate baseline hazard function and need not have anything to do with the stratification of the sampling. The standard errors for predicted survival curves are available only by linearization, not by replicate weights (at the moment). Use \code{\link{withReplicates}} to get standard errors with replicate weights. Predicted survival curves are not available for stratified Cox models. The standard errors use the delta-method approach of Williams (1995) for the Nelson-Aalen estimator, modified to handle the Cox model following Tsiatis (1981). The standard errors agree closely with \code{survfit.coxph} for independent sampling when the model fits well, but are larger when the model fits poorly. I believe the standard errors are equivalent to those of Lin (2000), but I don't know of any implementation that would allow a check. } \value{ An object of class \code{svycoxph} for \code{svycoxph}, an object of class \code{svykm} or \code{svykmlist} for \code{predict(,type="curve")}. } \section{Warning}{ The standard error calculation for survival curves uses memory proportional to the sample size times the square of the number of events. } \author{Thomas Lumley} \references{Binder DA. (1992) Fitting Cox's proportional hazards models from survey data. Biometrika 79: 139-147 Lin D-Y (2000) On fitting Cox's proportional hazards model to survey data. Biometrika 87: 37-47 Tsiatis AA (1981) A Large Sample Study of Cox's Regression Model. Annals of Statistics 9(1) 93-108 Williams RL (1995) "Product-Limit Survival Functions with Correlated Survival Times" Lifetime Data Analysis 1: 171--186 } \seealso{ \code{\link{coxph}}, \code{\link{predict.coxph}} \code{\link{svykm}} for estimation of Kaplan-Meier survival curves and for methods that operate on survival curves. \code{\link{regTermTest}} for Wald and (Rao-Scott) likelihood ratio tests for one or more parameters. } \examples{ ## Somewhat unrealistic example of nonresponse bias. data(pbc, package="survival") pbc$randomized<-with(pbc, !is.na(trt) & trt>0) biasmodel<-glm(randomized~age*edema,data=pbc,family=binomial) pbc$randprob<-fitted(biasmodel) if (is.null(pbc$albumin)) pbc$albumin<-pbc$alb ##pre2.9.0 dpbc<-svydesign(id=~1, prob=~randprob, strata=~edema, data=subset(pbc,randomized)) rpbc<-as.svrepdesign(dpbc) (model<-svycoxph(Surv(time,status>0)~log(bili)+protime+albumin,design=dpbc)) svycoxph(Surv(time,status>0)~log(bili)+protime+albumin,design=rpbc) s<-predict(model,se=TRUE, type="curve", newdata=data.frame(bili=c(3,9), protime=c(10,10), albumin=c(3.5,3.5))) plot(s[[1]],ci=TRUE,col="sienna") lines(s[[2]], ci=TRUE,col="royalblue") quantile(s[[1]], ci=TRUE) confint(s[[2]], parm=365*(1:5)) } \keyword{regression}% at least one, from doc/KEYWORDS \keyword{survival}% at least one, from doc/KEYWORDS \keyword{survey}% at least one, from doc/KEYWORDS survey/man/confint.svyglm.Rd0000644000176200001440000000345412242746122015641 0ustar liggesusers\name{confint.svyglm} \alias{confint.svyglm} %- Also NEED an '\alias' for EACH other topic documented here. \title{Confidence intervals for regression parameters } \description{ Computes confidence intervals for regression parameters in \code{\link{svyglm}} objects. The default is a Wald-type confidence interval, adding and subtracting a multiple of the standard error. The \code{method="likelihood"} is an interval based on inverting the Rao-Scott likelihood ratio test. That is, it is an interval where the working model deviance is lower than the threshold for the Rao-Scott test at the specified level. } \usage{ \method{confint}{svyglm}(object, parm, level = 0.95, method = c("Wald", "likelihood"), ddf = Inf, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{\code{svyglm} object} \item{parm}{numeric or character vector indicating which parameters to construct intervals for.} \item{level}{desired coverage} \item{method}{See description above } \item{ddf}{Denominator degrees of freedom for \code{"likelihood"} method, to use a t distribution rather than norma. If \code{NULL}, use \code{object$df.residual}} \item{\dots}{for future expansion} } \value{ A matrix of confidence intervals } \references{ J. N. K. Rao and Alistair J. Scott (1984) On Chi-squared Tests For Multiway Contigency Tables with Proportions Estimated From Survey Data. Annals of Statistics 12:46-60 } \seealso{\code{\link{confint}} } \examples{ data(api) dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) m<-svyglm(I(comp.imp=="Yes")~stype*emer+ell, design=dclus2, family=quasibinomial) confint(m) confint(m, method="like",ddf=NULL, parm=c("ell","emer")) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/SE.Rd0000755000176200001440000000120312242746122013161 0ustar liggesusers\name{SE} \alias{SE} \alias{SE.default} \alias{SE.svrepstat} %- Also NEED an '\alias' for EACH other topic documented here. \title{Extract standard errors } \description{ Extracts standard errors from an object. The default method is for objects with a \code{\link{vcov}} method. } \usage{ SE(object, ...) \method{SE}{default}(object,...) \method{SE}{svrepstat}(object,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{An object} \item{\dots}{Arguments for future expansion } } \value{ Vector of standard errors. } \seealso{ \code{\link{vcov}}} \keyword{models}% at least one, from doc/KEYWORDS survey/man/svykappa.Rd0000644000176200001440000000170212242746122014511 0ustar liggesusers\name{svykappa} \alias{svykappa} %- Also NEED an '\alias' for EACH other topic documented here. \title{Cohen's kappa for agreement} \description{ Computes the unweighted kappa measure of agreement between two raters and the standard error. The measurements must both be factor variables in the survey design object. } \usage{ svykappa(formula, design, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{one-sided formula giving two measurements} \item{design}{survey design object} \item{\dots}{for future expansion } } \value{ Object of class \code{svystat} } \seealso{ \code{\link{svycontrast}}} \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svykappa(~comp.imp+sch.wide, dclus1) dclus1<-update(dclus1, stypecopy=stype) svykappa(~stype+stypecopy,dclus1) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/brrweights.Rd0000755000176200001440000001211012242746122015031 0ustar liggesusers\name{brrweights} \alias{jk1weights} \alias{jknweights} \alias{brrweights} %- Also NEED an `\alias' for EACH other topic documented here. \title{Compute replicate weights } \description{ Compute replicate weights from a survey design. These functions are usually called from \code{\link{as.svrepdesign}} rather than directly by the user. } \usage{ brrweights(strata, psu, match = NULL, small = c("fail","split","merge"), large = c("split", "merge", "fail"), fay.rho=0, only.weights=FALSE, compress=TRUE, hadamard.matrix=NULL) jk1weights(psu,fpc=NULL, fpctype=c("population","fraction","correction"), compress=TRUE) jknweights(strata,psu, fpc=NULL, fpctype=c("population","fraction","correction"), compress=TRUE, lonely.psu=getOption("survey.lonely.psu")) } %- maybe also `usage' for other objects documented here. \arguments{ \item{strata}{Stratum identifiers } \item{psu}{PSU (cluster) identifier } \item{match}{Optional variable to use in matching. } \item{small}{How to handle strata with only one PSU} \item{large}{How to handle strata with more than two PSUs} \item{fpc}{Optional population (stratum) size or finite population correction } \item{fpctype}{How \code{fpc} is coded.} \item{fay.rho}{Parameter for Fay's extended BRR method} \item{only.weights}{If \code{TRUE} return only the matrix of replicate weights} \item{compress}{If \code{TRUE}, store the replicate weights in compressed form} \item{hadamard.matrix}{Optional user-supplied Hadamard matrix for \code{brrweights}} \item{lonely.psu}{Handling of non-certainty single-PSU strata} } \details{ JK1 and JKn are jackknife schemes for unstratified and stratified designs respectively. The finite population correction may be specified as a single number, a vector with one entry per stratum, or a vector with one entry per observation (constant within strata). When \code{fpc} is a vector with one entry per stratum it may not have names that differ from the stratum identifiers (it may have no names, in which case it must be in the same order as \code{unique(strata)}). To specify population stratum sizes use \code{fpctype="population"}, to specify sampling fractions use \code{fpctype="fraction"} and to specify the correction directly use \code{fpctype="correction"} The only reason not to use \code{compress=TRUE} is that it is new and there is a greater possibility of bugs. It reduces the number of rows of the replicate weights matrix from the number of observations to the number of PSUs. In BRR variance estimation each stratum is split in two to give half-samples. Balanced replicated weights are needed, where observations in two different strata end up in the same half stratum as often as in different half-strata.BRR, strictly speaking, is defined only when each stratum has exactly two PSUs. A stratum with one PSU can be merged with another such stratum, or can be split to appear in both half samples with half weight. The latter approach is appropriate for a PSU that was deterministically sampled. A stratum with more than two PSUs can be split into multiple smaller strata each with two PSUs or the PSUs can be merged to give two superclusters within the stratum. When merging small strata or grouping PSUs in large strata the \code{match} variable is used to sort PSUs before merging, to give approximate matching on this variable. If you want more control than this you should probably construct your own weights using the Hadamard matrices produced by \code{\link{hadamard}} } \value{ For \code{brrweights} with \code{only.weights=FALSE} a list with elements \item{weights}{two-column matrix indicating the weight for each half-stratum in one particular set of split samples} \item{wstrata}{New stratum variable incorporating merged or split strata} \item{strata}{Original strata for distinct PSUs} \item{psu}{Distinct PSUs} \item{npairs}{Dimension of Hadamard matrix used in BRR construction} \item{sampler}{function returning replicate weights} \item{compress}{Indicates whether the \code{sampler} returns per PSU or per observation weights} For \code{jk1weights} and \code{jknweights} a data frame of replicate weights and the \code{scale} and \code{rscale} arguments to \code{\link{svrVar}}. } \references{Levy and Lemeshow "Sampling of Populations". Wiley. Shao and Tu "The Jackknife and Bootstrap". Springer. } \seealso{\code{\link{hadamard}}, \code{\link{as.svrepdesign}}, \code{\link{svrVar}}, \code{\link{surveyoptions}}} \examples{ data(scd) scdnofpc<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE) ## convert to BRR replicate weights scd2brr <- as.svrepdesign(scdnofpc, type="BRR") svymean(~alive, scd2brr) svyratio(~alive, ~arrests, scd2brr) ## with user-supplied hadamard matrix scd2brr1 <- as.svrepdesign(scdnofpc, type="BRR", hadamard.matrix=paley(11)) svymean(~alive, scd2brr1) svyratio(~alive, ~arrests, scd2brr1) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svyranktest.Rd0000644000176200001440000000361012372242764015257 0ustar liggesusers\name{svyranktest} \alias{svyranktest} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Design-based rank tests } \description{ Design-based versions of k-sample rank tests. The built-in tests are all for location hypotheses, but the user could specify others. } \usage{ svyranktest(formula, design, test = c("wilcoxon", "vanderWaerden", "median","KruskalWallis"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ Model formula \code{y~g} for outcome variable \code{y} and group \code{g} } \item{design}{ A survey design object } \item{test}{ Which rank test to use: Wilcoxon, van der Waerden's normal-scores test, Mood's test for the median, or a function \code{f(r,N)} where \code{r} is the rank and \code{N} the estimated population size. "KruskalWallis" is a synonym for "wilcoxon" for more than two groups. } \item{\dots}{ for future expansion} } \value{ Object of class \code{htest} } \references{ Lumley, T., & Scott, A. J. (2013). Two-sample rank tests under complex sampling. BIOMETRIKA, 100 (4), 831-842. } \seealso{ \code{\link{svyttest}}, \code{\link{svylogrank}} } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc, data=apiclus1) svyranktest(ell~comp.imp, dclus1) svyranktest(ell~comp.imp, dclus1, test="median") svyranktest(ell~stype, dclus1) svyranktest(ell~stype, dclus1, test="median") ## upper quartile svyranktest(ell~comp.imp, dclus1, test=function(r,N) as.numeric(r>0.75*N)) quantiletest<-function(p){ rval<-function(r,N) as.numeric(r>(N*p)) attr(rval,"name")<-paste(p,"quantile") rval } svyranktest(ell~comp.imp, dclus1, test=quantiletest(0.5)) svyranktest(ell~comp.imp, dclus1, test=quantiletest(0.75)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{htest}% __ONLY ONE__ keyword per line survey/man/svyfactanal.Rd0000644000176200001440000000502112372242764015173 0ustar liggesusers\name{svyfactanal} \Rdversion{1.1} \alias{svyfactanal} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Factor analysis in complex surveys (experimental). } \description{ This function fits a factor analysis model or SEM, by maximum weighted likelihood. } \usage{ svyfactanal(formula, design, factors, n = c("none", "sample", "degf","effective", "min.effective"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ Model formula specifying the variables to use } \item{design}{ Survey design object } \item{factors}{ Number of factors to estimate } \item{n}{ Sample size to be used for testing: see below} \item{\dots}{ Other arguments to pass to \code{\link{factanal}}. } } \details{ The population covariance matrix is estimated by \code{\link{svyvar}} and passed to \code{\link{factanal}} Although fitting these models requires only the estimated covariance matrix, inference requires a sample size. With \code{n="sample"}, the sample size is taken to be the number of observations; with \code{n="degf"}, the survey degrees of freedom as returned by \code{\link{degf}}. Using \code{"sample"} corresponds to standardizing weights to have mean 1, and is known to result in anti-conservative tests. The other two methods estimate an effective sample size for each variable as the sample size where the standard error of a variance of a Normal distribution would match the design-based standard error estimated by \code{\link{svyvar}}. With \code{n="min.effective"} the minimum sample size across the variables is used; with \code{n="effective"} the harmonic mean is used. For \code{svyfactanal} the test of model adequacy is optional, and the default choice, \code{n="none"}, does not do the test. } \value{ An object of class \code{factanal} } \references{ . } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{\link{factanal}} The \code{lavaan.survey} package fits structural equation models to complex samples using similar techniques. } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svyfactanal(~api99+api00+hsg+meals+ell+emer, design=dclus1, factors=2) svyfactanal(~api99+api00+hsg+meals+ell+emer, design=dclus1, factors=2, n="effective") ##Population dat for comparison factanal(~api99+api00+hsg+meals+ell+emer, data=apipop, factors=2) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{multivariate}% __ONLY ONE__ keyword per line survey/man/nonresponse.Rd0000755000176200001440000000627312242746122015237 0ustar liggesusers\name{nonresponse} \alias{nonresponse} \alias{sparseCells} \alias{neighbours} \alias{joinCells} \alias{weights.nonresponse} \alias{print.nonresponse} \alias{print.nonresponseSubset} \alias{[.nonresponse} %- Also NEED an '\alias' for EACH other topic documented here. \title{Experimental: Construct non-response weights} \description{ Functions to simplify the construction of non-reponse weights by combining strata with small numbers or large weights. } \usage{ nonresponse(sample.weights, sample.counts, population) sparseCells(object, count=0,totalweight=Inf, nrweight=1.5) neighbours(index,object) joinCells(object,a,...) \method{weights}{nonresponse}(object,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{sample.weights}{table of sampling weight by stratifying variables} \item{sample.counts}{table of sample counts by stratifying variables} \item{population}{table of population size by stratifying variables} \item{object}{object of class \code{"nonresponse"}} \item{count}{Cells with fewer sampled units than this are "sparse"} \item{nrweight}{Cells with higher non-response weight than this are "sparse"} \item{totalweight}{Cells with average sampling weight times non-response weight higher than this are "sparse"} \item{index}{Number of a cell whose neighbours are to be found} \item{a,...}{Cells to join} } \details{ When a stratified survey is conducted with imperfect response it is desirable to rescale the sampling weights to reflect the nonresponse. If some strata have small sample size, high non-response, or already had high sampling weights it may be desirable to get less variable non-response weights by averaging non-response across strata. Suitable strata to collapse may be similar on the stratifying variables and/or on the level of non-response. \code{nonresponse()} combines stratified tables of population size, sample size, and sample weight into an object. \code{sparseCells} identifies cells that may need combining. \code{neighbours} describes the cells adjacent to a specified cell, and \code{joinCells} collapses the specified cells. When the collapsing is complete, use \code{weights()} to extract the nonresponse weights. } \value{ \code{nonresponse} and \code{joinCells} return objects of class \code{"nonresponse"}, \code{neighbours} and \code{sparseCells} return objects of class \code{"nonresponseSubset"} } \examples{ data(api) ## pretend the sampling was stratified on three variables poptable<-xtabs(~sch.wide+comp.imp+stype,data=apipop) sample.count<-xtabs(~sch.wide+comp.imp+stype,data=apiclus1) sample.weight<-xtabs(pw~sch.wide+comp.imp+stype, data=apiclus1) ## create a nonresponse object nr<-nonresponse(sample.weight,sample.count, poptable) ## sparse cells sparseCells(nr) ## Look at neighbours neighbours(3,nr) neighbours(11,nr) ## Collapse some contiguous cells nr1<-joinCells(nr,3,5,7) ## sparse cells now sparseCells(nr1) nr2<-joinCells(nr1,3,11,8) nr2 ## one relatively sparse cell sparseCells(nr2) ## but nothing suitable to join it to neighbours(3,nr2) ## extract the weights weights(nr2) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/bootweights.Rd0000644000176200001440000000621612242746122015216 0ustar liggesusers\name{bootweights} \alias{bootweights} \alias{subbootweights} \alias{mrbweights} \alias{bootstratum} %- Also NEED an '\alias' for EACH other topic documented here. \title{Compute survey bootstrap weights } \description{ Bootstrap weights for infinite populations ('with replacement' sampling) are created by sampling with replacement from the PSUs in each stratum. \code{subbootweights()} samples \code{n-1} PSUs from the \code{n} available (Rao and Wu), \code{bootweights} samples \code{n} (Canty and Davison). For multistage designs or those with large sampling fractions, \code{mrbweights} implements Preston's multistage rescaled bootstrap. The multistage rescaled bootstrap is still useful for single-stage designs with small sampling fractions, where it reduces to a half-sample replicate method. } \usage{ bootweights(strata, psu, replicates = 50, fpc = NULL, fpctype = c("population", "fraction", "correction"), compress = TRUE) subbootweights(strata, psu, replicates = 50, compress = TRUE) mrbweights(clusters, stratas, fpcs, replicates=50, multicore=getOption("survey.multicore")) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{strata}{Identifier for sampling strata (top level only)} \item{stratas}{data frame of strata for all stages of sampling} \item{psu}{Identifier for primary sampling units} \item{clusters}{data frame of identifiers for sampling units at each stage} \item{replicates}{Number of bootstrap replicates} \item{fpc}{Finite population correction (top level only) } \item{fpctype}{Is \code{fpc} the population size, sampling fraction, or 1-sampling fraction?} \item{fpcs}{\code{survey_fpc} object with population and sample size at each stage} \item{compress}{Should the replicate weights be compressed?} \item{multicore}{Use the \code{multicore} package to generate the replicates in parallel} } \value{ A set of replicate weights } \section{warning}{With \code{multicore=TRUE} the resampling procedure does not use the current random seed, so the results cannot be exactly reproduced even by using \code{set.seed()}} \note{ These bootstraps are strictly appropriate only when the first stage of sampling is a simple or stratified random sample of PSUs with or without replacement, and not (eg) for PPS sampling. The functions will not enforce simple random sampling, so they can be used (approximately) for data that have had non-response corrections and other weight adjustments. It is preferable to apply these adjustments after creating the bootstrap replicate weights, but that may not be possible with public-use data. } \references{Canty AJ, Davison AC. (1999) Resampling-based variance estimation for labour force surveys. The Statistician 48:379-391 Judkins, D. (1990), "Fay's Method for Variance Estimation" Journal of Official Statistics, 6, 223-239. Preston J. (2009) Rescaled bootstrap for stratified multistage sampling. Survey Methodology 35(2) 227-234 Rao JNK, Wu CFJ. Bootstrap inference for sample surveys. Proc Section on Survey Research Methodology. 1993 (866--871) } \seealso{\code{\link{as.svrepdesign}}} \keyword{survey}% at least one, from doc/KEYWORDS survey/man/election.Rd0000644000176200001440000000547312242746122014466 0ustar liggesusers\name{election} \alias{election} \alias{election_pps} \alias{election_jointprob} \alias{election_jointHR} \alias{election_insample} \docType{data} \title{US 2004 presidential election data at state or county level} \description{ A sample of voting data from US states or counties (depending on data availability), sampled with probability proportional to number of votes. The sample was drawn using Tille's splitting method, implemented in the "sampling" package. } \usage{data(election)} \format{ \code{election} is a data frame with 4600 observations on the following 8 variables. \describe{ \item{\code{County}}{A factor specifying the state or country} \item{\code{TotPrecincts}}{Number of precincts in the state or county} \item{\code{PrecinctsReporting}}{Number of precincts supplying data} \item{\code{Bush}}{Votes for George W. Bush} \item{\code{Kerry}}{Votes for John Kerry} \item{\code{Nader}}{Votes for Ralph Nader} \item{\code{votes}}{Total votes for those three candidates} \item{\code{p}}{Sampling probability, proportional to \code{votes}} } \code{election_pps} is a sample of 40 counties or states taken with probability proportional to the number of votes. It includes the additional column \code{wt} with the sampling weights. \code{election_insample} indicates which rows of \code{election} were sampled. \code{election_jointprob} are the pairwise sampling probabilities and \code{election_jointHR} are approximate pairwise sampling probabilities using the Hartley-Rao approximation. } \source{ . } \examples{ data(election) ## high positive correlation between totals plot(Bush~Kerry,data=election,log="xy") ## high negative correlation between proportions plot(I(Bush/votes)~I(Kerry/votes), data=election) ## Variances without replacement ## Horvitz-Thompson type dpps_br<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") dpps_ov<- svydesign(id=~1, fpc=~p, data=election_pps, pps="overton") dpps_hr<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40)) dpps_hr1<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR()) dpps_ht<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob)) ## Yates-Grundy type dpps_yg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=ppsmat(election_jointprob),variance="YG") dpps_hryg<- svydesign(id=~1, fpc=~p, data=election_pps, pps=HR(sum(election$p^2)/40),variance="YG") ## The with-replacement approximation dppswr <-svydesign(id=~1, probs=~p, data=election_pps) svytotal(~Bush+Kerry+Nader, dpps_ht) svytotal(~Bush+Kerry+Nader, dpps_yg) svytotal(~Bush+Kerry+Nader, dpps_hr) svytotal(~Bush+Kerry+Nader, dpps_hryg) svytotal(~Bush+Kerry+Nader, dpps_hr1) svytotal(~Bush+Kerry+Nader, dpps_br) svytotal(~Bush+Kerry+Nader, dpps_ov) svytotal(~Bush+Kerry+Nader, dppswr) } \keyword{datasets} \keyword{survey} survey/man/svysmooth.Rd0000644000176200001440000000623012242746122014727 0ustar liggesusers\name{svysmooth} \alias{svysmooth} \alias{svysmooth.default} \alias{plot.svysmooth} \alias{print.svysmooth} \alias{lines.svysmooth} \alias{make.panel.svysmooth} %- Also NEED an '\alias' for EACH other topic documented here. \title{Scatterplot smoothing and density estimation} \description{ Scatterplot smoothing and density estimation for probability-weighted data. } \usage{ svysmooth(formula, design, ...) \method{svysmooth}{default}(formula, design, method = c("locpoly", "quantreg"), bandwidth = NULL, quantile, df = 4, ...) \method{plot}{svysmooth}(x, which=NULL, type="l", xlabs=NULL, ylab=NULL,...) \method{lines}{svysmooth}(x,which=NULL,...) make.panel.svysmooth(design,bandwidth=NULL) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{One-sided formula for density estimation, two-sided for smoothing} \item{design}{Survey design object} \item{method}{local polynomial smoothing for the mean or regression splines for quantiles} \item{bandwidth}{Smoothing bandwidth for "locpoly" or \code{NULL} for automatic choice} \item{quantile}{quantile to be estimated for "quantreg"} \item{df}{Degrees of freedom for "quantreg"} \item{which}{Which plots to show (default is all)} \item{type}{as for \code{plot}} \item{xlabs}{Optional vector of x-axis labels} \item{ylab}{Optional y-axis label} \item{\dots}{More arguments} \item{x}{Object of class \code{svysmooth}} } \details{ \code{svysmooth} does one-dimensional smoothing. If \code{formula} has multiple predictor variables a separate one-dimensional smooth is performed for each one. For \code{method="locpoly"} the extra arguments are passed to \code{locpoly} from the KernSmooth package, for \code{method="quantreg"} they are passed to \code{rq} from the quantreg package. The automatic choice of bandwidth for \code{method="locpoly"} uses the default settings for \code{dpik} and \code{dpill} in the KernSmooth package. \code{make.panel.svysmooth()} makes a function that plots points and draws a weighted smooth curve through them, a weighted replacement for \code{\link{panel.smooth}} that can be passed to functions such as \code{\link{termplot}} or \code{\link{plot.lm}}. The resulting function has a \code{span} argument that will set the bandwidth; if this is not specified the automatic choice will be used. } \value{ An object of class \code{svysmooth}, a list of lists, each with \code{x} and \code{y} components. } \seealso{\code{\link{svyhist}} for histograms} \examples{ data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) smth<-svysmooth(api00~api99+ell,dstrat) dens<-svysmooth(~api99, dstrat,bandwidth=30) dens1<-svysmooth(~api99, dstrat) qsmth<-svysmooth(api00~ell,dstrat, quantile=0.75, df=3,method="quantreg") plot(smth) plot(smth, which="ell",lty=2,ylim=c(500,900)) lines(qsmth, col="red") svyhist(~api99,design=dstrat) lines(dens,col="purple",lwd=3) lines(dens1, col="forestgreen",lwd=2) m<-svyglm(api00~sin(api99/100)+stype, design=dstrat) termplot(m, data=model.frame(dstrat), partial.resid=TRUE, se=TRUE, smooth=make.panel.svysmooth(dstrat)) } \keyword{hplot}% at least one, from doc/KEYWORDS \keyword{survey} survey/man/svyprcomp.Rd0000644000176200001440000000520312372242764014724 0ustar liggesusers\name{svyprcomp} \Rdversion{1.1} \alias{svyprcomp} \alias{biplot.svyprcomp} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Sampling-weighted principal component analysis } \description{ Computes principal components using the sampling weights. } \usage{ svyprcomp(formula, design, center = TRUE, scale. = FALSE, tol = NULL, scores = FALSE, ...) \method{biplot}{svyprcomp}(x, cols=c("black","darkred"),xlabs=NULL, weight=c("transparent","scaled","none"), max.alpha=0.5,max.cex=0.5,xlim=NULL,ylim=NULL,pc.biplot=FALSE, expand=1,xlab=NULL,ylab=NULL, arrow.len=0.1, ...) } \arguments{ \item{formula}{ model formula describing variables to be used } \item{design}{ survey design object. } \item{center}{ Center data before analysis? } \item{scale.}{ Scale to unit variance before analysis? } \item{tol}{ Tolerance for omitting components from the results; a proportion of the standard deviation of the first component. The default is to keep all components. } \item{scores}{ Return scores on each component? These are needed for \code{biplot}. } \item{x}{ A \code{svyprcomp} object } \item{cols}{ Base colors for observations and variables respectively } \item{xlabs}{ Formula, or character vector, giving labels for each observation } \item{weight}{ How to display the sampling weights: \code{"scaled"} changes the size of the point label, \code{"transparent"} uses opacity proportional to sampling weight, \code{"none"} changes neither. } \item{max.alpha}{ Opacity for the largest sampling weight, or for all points if \code{weight!="transparent"} } \item{max.cex}{ Character size (as a multiple of \code{par("cex")}) for the largest sampling weight, or for all points if \code{weight!="scaled"} } \item{xlim,ylim,xlab,ylab}{Graphical parameters} \item{expand,arrow.len}{See \code{\link{biplot}}} \item{pc.biplot}{See \code{link{biplot.prcomp}}} \item{\dots}{ Other arguments to \code{\link{prcomp}}, or graphical parameters for \code{biplot} } } \value{ \code{svyprcomp} returns an object of class \code{svyprcomp}, similar to class \code{prcomp} but including design information } \seealso{ \code{\link{prcomp}}, \code{\link{biplot.prcomp}} } \examples{ data(api) dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) pc <- svyprcomp(~api99+api00+ell+hsg+meals+emer, design=dclus2,scale=TRUE,scores=TRUE) pc biplot(pc, xlabs=~dnum, weight="none") biplot(pc, xlabs=~dnum,max.alpha=1) biplot(pc, weight="scaled",max.cex=1.5, xlabs=~dnum) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{hplot}% __ONLY ONE__ keyword per line \keyword{multivariate}survey/man/svrepdesign.Rd0000755000176200001440000002034612770613073015220 0ustar liggesusers\name{svrepdesign} \alias{svrepdesign} \alias{svrepdesign.default} \alias{svrepdesign.imputationList} \alias{svrepdesign.character} \alias{[.svyrep.design} \alias{image.svyrep.design} \alias{print.svyrep.design} \alias{model.frame.svyrep.design} \alias{summary.svyrep.design} \alias{print.summary.svyrep.design} %- Also NEED an `\alias' for EACH other topic documented here. \title{Specify survey design with replicate weights} \description{ Some recent large-scale surveys specify replication weights rather than the sampling design (partly for privacy reasons). This function specifies the data structure for such a survey. } \usage{ svrepdesign(variables , repweights , weights, data,...) \method{svrepdesign}{default}(variables = NULL, repweights = NULL, weights = NULL, data = NULL, type = c("BRR", "Fay", "JK1","JKn","bootstrap","other"), combined.weights=TRUE, rho = NULL, bootstrap.average=NULL, scale=NULL, rscales=NULL,fpc=NULL, fpctype=c("fraction","correction"), mse=getOption("survey.replicates.mse"),...) \method{svrepdesign}{imputationList}(variables=NULL, repweights,weights,data, mse=getOption("survey.replicates.mse"),...) \method{svrepdesign}{character}(variables=NULL,repweights=NULL, weights=NULL,data=NULL, type=c("BRR","Fay","JK1", "JKn","bootstrap","other"),combined.weights=TRUE, rho=NULL, bootstrap.average=NULL, scale=NULL,rscales=NULL,fpc=NULL, fpctype=c("fraction","correction"),mse=getOption("survey.replicates.mse"), dbtype="SQLite", dbname,...) \method{image}{svyrep.design}(x, ..., col=grey(seq(.5,1,length=30)), type.=c("rep","total")) } %- maybe also `usage' for other objects documented here. \arguments{ \item{variables}{formula or data frame specifying variables to include in the design (default is all) } \item{repweights}{formula or data frame specifying replication weights, or character string specifying a regular expression that matches the names of the replication weight variables } \item{weights}{sampling weights } \item{data}{data frame to look up variables in formulas, or character string giving name of database table} \item{type}{Type of replication weights} \item{combined.weights}{\code{TRUE} if the \code{repweights} already include the sampling weights. This is usually the case.} \item{rho}{Shrinkage factor for weights in Fay's method} \item{bootstrap.average}{For \code{type="bootstrap"}, if the bootstrap weights have been averaged, gives the number of iterations averaged over} \item{scale, rscales}{Scaling constant for variance, see Details below} \item{fpc,fpctype}{Finite population correction information} \item{mse}{If \code{TRUE}, compute variances based on sum of squares around the point estimate, rather than the mean of the replicates} \item{dbname}{name of database, passed to \code{DBI::dbConnect()}} \item{dbtype}{Database driver: see Details} \item{x}{survey design with replicate weights} \item{...}{Other arguments to \code{\link{image}}} \item{col}{Colors} \item{type.}{\code{"rep"} for only the replicate weights, \code{"total"} for the replicate and sampling weights combined.} } \details{ In the BRR method, the dataset is split into halves, and the difference between halves is used to estimate the variance. In Fay's method, rather than removing observations from half the sample they are given weight \code{rho} in one half-sample and \code{2-rho} in the other. The ideal BRR analysis is restricted to a design where each stratum has two PSUs, however, it has been used in a much wider class of surveys. The JK1 and JKn types are both jackknife estimators deleting one cluster at a time. JKn is designed for stratified and JK1 for unstratified designs. Averaged bootstrap weights ("mean bootstrap") are used for some surveys from Statistics Canada. Yee et al (1999) describe their construction and use for one such survey. The variance is computed as the sum of squared deviations of the replicates from their mean. This may be rescaled: \code{scale} is an overall multiplier and \code{rscales} is a vector of replicate-specific multipliers for the squared deviations. That is, \code{rscales} should have one entry for each column of \code{repweights} If thereplication weights incorporate the sampling weights (\code{combined.weights=TRUE}) or for \code{type="other"} these must be specified, otherwise they can be guessed from the weights. A finite population correction may be specified for \code{type="other"}, \code{type="JK1"} and \code{type="JKn"}. \code{fpc} must be a vector with one entry for each replicate. To specify sampling fractions use \code{fpctype="fraction"} and to specify the correction directly use \code{fpctype="correction"} \code{repweights} may be a character string giving a regular expression for the replicate weight variables. For example, in the California Health Interview Survey public-use data, the sampling weights are \code{"rakedw0"} and the replicate weights are \code{"rakedw1"} to \code{"rakedw80"}. The regular expression \code{"rakedw[1-9]"} matches the replicate weight variables (and not the sampling weight variable). \code{data} may be a character string giving the name of a table or view in a relational database that can be accessed through the \code{DBI} or \code{ODBC} interfaces. For DBI interfaces \code{dbtype} should be the name of the database driver and \code{dbname} should be the name by which the driver identifies the specific database (eg file name for SQLite). For ODBC databases \code{dbtype} should be \code{"ODBC"} and \code{dbname} should be the registed DSN for the database. On the Windows GUI, \code{dbname=""} will produce a dialog box for interactive selection. The appropriate database interface package must already be loaded (eg \code{RSQLite} for SQLite, \code{RODBC} for ODBC). The survey design object will contain the replicate weights, but actual variables will be loaded from the database only as needed. Use \code{\link[=close.DBIsvydesign]{close}} to close the database connection and \code{\link[=open.DBIsvydesign]{open}} to reopen the connection, eg, after loading a saved object. The database interface does not attempt to modify the underlying database and so can be used with read-only permissions on the database. To generate your own replicate weights either use \code{\link{as.svrepdesign}} on a \code{survey.design} object, or see \code{\link{brrweights}}, \code{\link{bootweights}}, \code{\link{jk1weights}} and \code{\link{jknweights}} The \code{model.frame} method extracts the observed data. } \value{ Object of class \code{svyrep.design}, with methods for \code{print}, \code{summary}, \code{weights}, \code{image}. } \references{Levy and Lemeshow. "Sampling of Populations". Wiley. Shao and Tu. "The Jackknife and Bootstrap." Springer. Yee et al (1999). Bootstrat Variance Estimation for the National Population Health Survey. Proceedings of the ASA Survey Research Methodology Section. \url{https://web.archive.org/web/20151110170959/http://www.amstat.org/sections/SRMS/Proceedings/papers/1999_136.pdf} } \note{To use replication-weight analyses on a survey specified by sampling design, use \code{as.svrepdesign} to convert it. } \note{The successive difference weights in the American Community Survey use \code{scale = 4/ncol(repweights)} and \code{rscales=rep(1, ncol(repweights)}. JK2 weights use \code{scale=1}, \code{rscales=rep(1, ncol(repweights))}} \seealso{\code{\link{as.svrepdesign}}, \code{\link{svydesign}}, \code{\link{brrweights}}, \code{bootweights} } \examples{ data(scd) # use BRR replicate weights from Levy and Lemeshow repweights<-2*cbind(c(1,0,1,0,1,0), c(1,0,0,1,0,1), c(0,1,1,0,0,1), c(0,1,0,1,1,0)) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights, combined.weights=FALSE) svyratio(~alive, ~arrests, scdrep) \dontrun{ ## Needs RSQLite library(RSQLite) db_rclus1<-svrepdesign(weights=~pw, repweights="wt[1-9]+", type="JK1", scale=(1-15/757)*14/15, data="apiclus1rep",dbtype="SQLite", dbname=system.file("api.db",package="survey"), combined=FALSE) svymean(~api00+api99,db_rclus1) summary(db_rclus1) ## closing and re-opening a connection close(db_rclus1) db_rclus1 try(svymean(~api00+api99,db_rclus1)) db_rclus1<-open(db_rclus1) svymean(~api00+api99,db_rclus1) } } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svyrecvar.Rd0000755000176200001440000001076612242746122014714 0ustar liggesusers\name{svyrecvar} \alias{svyrecvar} \alias{multistage} %- Also NEED an '\alias' for EACH other topic documented here. \title{Variance estimation for multistage surveys} \description{ Compute the variance of a total under multistage sampling, using a recursive descent algorithm. } \usage{ svyrecvar(x, clusters, stratas,fpcs, postStrata = NULL, lonely.psu = getOption("survey.lonely.psu"), one.stage=getOption("survey.ultimate.cluster")) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Matrix of data or estimating functions} \item{clusters}{Data frame or matrix with cluster ids for each stage} \item{stratas}{Strata for each stage } \item{fpcs}{Information on population and sample size for each stage, created by \code{\link{as.fpc}}} \item{postStrata}{post-stratification information as created by \code{\link{postStratify}} or \code{\link{calibrate}} } \item{lonely.psu}{How to handle strata with a single PSU} \item{one.stage}{If \code{TRUE}, compute a one-stage (ultimate-cluster) estimator} } \details{ The main use of this function is to compute the variance of the sum of a set of estimating functions under multistage sampling. The sampling is assumed to be simple or stratified random sampling within clusters at each stage except perhaps the last stage. The variance of a statistic is computed from the variance of estimating functions as described by Binder (1983). Use \code{one.stage=FALSE} for compatibility with other software that does not perform multi-stage calculations, and set \code{options(survey.ultimate.cluster=TRUE)} to make this the default. The idea of a recursive algorithm is due to Bellhouse (1985). Texts such as Cochran (1977) and Sarndal et al (1991) describe the decomposition of the variance into a single-stage between-cluster estimator and a within-cluster estimator, and this is applied recursively. If \code{one.stage} is a positive integer it specifies the number of stages of sampling to use in the recursive estimator. If \code{pps="brewer"}, standard errors are estimated using Brewer's approximation for PPS without replacement, option 2 of those described by Berger (2004). The \code{fpc} argument must then be specified in terms of sampling fractions, not population sizes (or omitted, but then the \code{pps} argument would have no effect and the with-replacement standard errors would be correct). } \value{ A covariance matrix } \references{ Bellhouse DR (1985) Computing Methods for Variance Estimation in Complex Surveys. Journal of Official Statistics. Vol.1, No.3, 1985 Berger, Y.G. (2004), A Simple Variance Estimator for Unequal Probability Sampling Without Replacement. Journal of Applied Statistics, 31, 305-315. Binder, David A. (1983). On the variances of asymptotically normal estimators from complex surveys. International Statistical Review, 51, 279-292. Brewer KRW (2002) Combined Survey Sampling Inference (Weighing Basu's Elephants) [Chapter 9] Cochran, W. (1977) Sampling Techniques. 3rd edition. Wiley. Sarndal C-E, Swensson B, Wretman J (1991) Model Assisted Survey Sampling. Springer. } \note{ A simple set of finite population corrections will only be exactly correct when each successive stage uses simple or stratified random sampling without replacement. A correction under general unequal probability sampling (eg PPS) would require joint inclusion probabilities (or, at least, sampling probabilities for units not included in the sample), information not generally available. The quality of Brewer's approximation is excellent in Berger's simulations, but the accuracy may vary depending on the sampling algorithm used. } \seealso{ \code{\link{svrVar}} for replicate weight designs \code{\link{svyCprod}} for a description of how variances are estimated at each stage } \examples{ data(mu284) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) svytotal(~y1, dmu284) data(api) # two-stage cluster sample dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) summary(dclus2) svymean(~api00, dclus2) svytotal(~enroll, dclus2,na.rm=TRUE) # bootstrap for multistage sample mrbclus2<-as.svrepdesign(dclus2, type="mrb", replicates=100) svytotal(~enroll, mrbclus2, na.rm=TRUE) # two-stage `with replacement' dclus2wr<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) summary(dclus2wr) svymean(~api00, dclus2wr) svytotal(~enroll, dclus2wr,na.rm=TRUE) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svyciprop.Rd0000644000176200001440000000764413006463027014723 0ustar liggesusers\name{svyciprop} \alias{svyciprop} %- Also NEED an '\alias' for EACH other topic documented here. \title{Confidence intervals for proportions } \description{ Computes confidence intervals for proportions using methods that may be more accurate near 0 and 1 than simply using \code{confint(svymean())}. } \usage{ svyciprop(formula, design, method = c("logit", "likelihood", "asin", "beta", "mean","xlogit"), level = 0.95, df=degf(design),...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Model formula specifying a single binary variable} \item{design}{ survey design object} \item{method}{ See Details below. Partial matching is done on the argument.} \item{level}{Confidence level for interval} \item{df}{denominator degrees of freedom, for all methods except \code{"beta"}. Use \code{Inf} for confidence intervals based on a Normal distribution, and for \code{"likelihood"} and \code{"logit"} use \code{NULL} for the default method in glms (currently \code{degf(design)-1}, but this may be improved in the future)} \item{\dots}{For \code{"mean"} and \code{"asin"}, this is passed to \code{\link{confint.svystat}} } } \details{ The \code{"logit"} method fits a logistic regression model and computes a Wald-type interval on the log-odds scale, which is then transformed to the probability scale. The \code{"likelihood"} method uses the (Rao-Scott) scaled chi-squared distribution for the loglikelihood from a binomial distribution. The \code{"asin"} method uses the variance-stabilising transformation for the binomial distribution, the arcsine square root, and then back-transforms the interval to the probability scale The \code{"beta"} method uses the incomplete beta function as in \code{\link{binom.test}}, with an effective sample size based on the estimated variance of the proportion. (Korn and Graubard, 1998) The \code{"xlogit"} method uses a logit transformation of the mean and then back-transforms to the probablity scale. This appears to be the method used by SUDAAN and SPSS COMPLEX SAMPLES. The \code{"mean"} method is a Wald-type interval on the probability scale, the same as \code{confint(svymean())} All methods undercover for probabilities close enough to zero or one, but \code{"beta"}, \code{"likelihood"}, \code{"logit"}, and \code{"logit"} are noticeably better than the other two. None of the methods will work when the observed proportion is exactly 0 or 1. The \code{confint} method extracts the confidence interval; the \code{vcov} and \code{SE} methods just report the variance or standard error of the mean. } \value{ The point estimate of the proportion, with the confidence interval as an attribute } \references{ Rao, JNK, Scott, AJ (1984) "On Chi-squared Tests For Multiway Contingency Tables with Proportions Estimated From Survey Data" Annals of Statistics 12:46-60. Korn EL, Graubard BI. (1998) Confidence Intervals For Proportions With Small Expected Number of Positive Counts Estimated From Survey Data. Survey Methodology 23:193-201. } \seealso{ \code{\link{svymean}}, \code{\link{yrbs}} } \examples{ data(api) dclus1<-svydesign(id=~dnum, fpc=~fpc, data=apiclus1) svyciprop(~I(ell==0), dclus1, method="li") svyciprop(~I(ell==0), dclus1, method="lo") svyciprop(~I(ell==0), dclus1, method="as") svyciprop(~I(ell==0), dclus1, method="be") svyciprop(~I(ell==0), dclus1, method="me") svyciprop(~I(ell==0), dclus1, method="xl") ## reproduces Stata svy: mean svyciprop(~I(ell==0), dclus1, method="me", df=degf(dclus1)) ## reproduces Stata svy: prop svyciprop(~I(ell==0), dclus1, method="lo", df=degf(dclus1)) rclus1<-as.svrepdesign(dclus1) svyciprop(~I(emer==0), rclus1, method="li") svyciprop(~I(emer==0), rclus1, method="lo") svyciprop(~I(emer==0), rclus1, method="as") svyciprop(~I(emer==0), rclus1, method="be") svyciprop(~I(emer==0), rclus1, method="me") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/estweights.Rd0000644000176200001440000000716212242746122015047 0ustar liggesusers\name{estweights} \alias{estWeights} \alias{estWeights.twophase} \alias{estWeights.data.frame} %- Also NEED an '\alias' for EACH other topic documented here. \title{Estimated weights for missing data} \description{ Creates or adjusts a two-phase survey design object using a logistic regression model for second-phase sampling probability. This function should be particularly useful in reweighting to account for missing data. } \usage{ estWeights(data,formula,...) \method{estWeights}{twophase}(data,formula=NULL, working.model=NULL,...) \method{estWeights}{data.frame}(data,formula=NULL, working.model=NULL, subset=NULL, strata=NULL,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{data}{twophase design object or data frame} \item{formula}{Predictors for estimating weights} \item{working.model}{Model fitted to complete (ie phase 1) data} \item{subset}{Subset of data frame with complete data (ie phase 1). If \code{NULL} use all complete cases} \item{strata}{Stratification (if any) of phase 2 sampling} \item{\dots}{for future expansion} } \details{ If \code{data} is a data frame, \code{estWeights} first creates a two-phase design object. The \code{strata} argument is used only to compute finite population corrections, the same variables must be included in \code{formula} to compute stratified sampling probabilities. With a two-phase design object, \code{estWeights} estimates the sampling probabilities using logistic regression as described by Robins et al (1994) and adds information to the object to enable correct sandwich standard errors to be computed. An alternative to specifying \code{formula} is to specify \code{working.model}. The estimating functions from this model will be used as predictors of the sampling probabilities, which will increase efficiency to the extent that the working model and the model of interest estimate the same parameters (Kulich \& Lin 2004). The effect on a two-phase design object is very similar to \code{\link{calibrate}}, and is identical when \code{formula} specifies a saturated model. } \value{ A two-phase survey design object. } \references{ Breslow NE, Lumley T, Ballantyne CM, Chambless LE, Kulich M. (2009) Using the Whole Cohort in the Analysis of Case-Cohort Data. Am J Epidemiol. 2009 Jun 1;169(11):1398-405. Robins JM, Rotnitzky A, Zhao LP. (1994) Estimation of regression coefficients when some regressors are not always observed. Journal of the American Statistical Association, 89, 846-866. Kulich M, Lin DY (2004). Improving the Efficiency of Relative-Risk Estimation in Case-Cohort Studies. Journal of the American Statistical Association, Vol. 99, pp.832-844 Lumley T, Shaw PA, Dai JY (2011) "Connections between survey calibration estimators and semiparametric models for incomplete data" International Statistical Review. 79:200-220. (with discussion 79:221-232) } \seealso{ \code{\link{postStratify}}, \code{\link{calibrate}}, \code{\link{twophase}}} \examples{ data(airquality) ## ignoring missingness, using model-based standard error summary(lm(log(Ozone)~Temp+Wind, data=airquality)) ## Without covariates to predict missingness we get ## same point estimates, but different (sandwich) standard errors daq<-estWeights(airquality, formula=~1,subset=~I(!is.na(Ozone))) summary(svyglm(log(Ozone)~Temp+Wind,design=daq)) ## Reweighting based on weather, month d2aq<-estWeights(airquality, formula=~Temp+Wind+Month, subset=~I(!is.na(Ozone))) summary(svyglm(log(Ozone)~Temp+Wind,design=d2aq)) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/svrVar.Rd0000755000176200001440000000246612372242764014160 0ustar liggesusers\name{svrVar} \alias{svrVar} %- Also NEED an `\alias' for EACH other topic documented here. \title{Compute variance from replicates } \description{ Compute an appropriately scaled empirical variance estimate from replicates. The \code{mse} argument specifies whether the sums of squares should be centered at the point estimate (\code{mse=TRUE}) or the mean of the replicates. It is usually taken from the \code{mse} component of the design object. } \usage{ svrVar(thetas, scale, rscales, na.action=getOption("na.action"), mse=getOption("survey.replicates.mse"),coef) } %- maybe also `usage' for other objects documented here. \arguments{ \item{thetas}{matrix whose rows are replicates (or a vector of replicates)} \item{scale}{Overall scaling factor} \item{rscales}{Scaling factor for each squared deviation } \item{na.action}{How to handle replicates where the statistic could not be estimated} \item{mse}{if \code{TRUE}, center at the point estimated, if \code{FALSE} center at the mean of the replicates} \item{coef}{The point estimate, required only if \code{mse==TRUE}} } \value{ covariance matrix. } \seealso{\code{\link{svrepdesign}}, \code{\link{as.svrepdesign}}, \code{\link{brrweights}}, \code{\link{jk1weights}}, \code{\link{jknweights}}} \keyword{survey}% at least one, from doc/KEYWORDS survey/man/scd.Rd0000755000176200001440000000362212242746122013432 0ustar liggesusers\name{scd} \alias{scd} \non_function{} \title{Survival in cardiac arrest} \usage{data(scd)} \description{ These data are from Section 12.2 of Levy and Lemeshow. They describe (a possibly apocryphal) study of survival in out-of-hospital cardiac arrest. Two out of five ambulance stations were sampled from each of three emergency service areas. } \format{ This data frame contains the following columns: \describe{ \item{ESA}{Emergency Service Area (strata)} \item{ambulance}{Ambulance station (PSU)} \item{arrests}{estimated number of cardiac arrests} \item{alive}{number reaching hospital alive} } } \source{ Levy and Lemeshow. "Sampling of Populations" (3rd edition). Wiley. } \examples{ data(scd) ## survey design objects scddes<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE, fpc=rep(5,6)) scdnofpc<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE) # convert to BRR replicate weights scd2brr <- as.svrepdesign(scdnofpc, type="BRR") # or to Rao-Wu bootstrap scd2boot <- as.svrepdesign(scdnofpc, type="subboot") # use BRR replicate weights from Levy and Lemeshow repweights<-2*cbind(c(1,0,1,0,1,0), c(1,0,0,1,0,1), c(0,1,1,0,0,1), c(0,1,0,1,1,0)) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights) # ratio estimates svyratio(~alive, ~arrests, design=scddes) svyratio(~alive, ~arrests, design=scdnofpc) svyratio(~alive, ~arrests, design=scd2brr) svyratio(~alive, ~arrests, design=scd2boot) svyratio(~alive, ~arrests, design=scdrep) # or a logistic regression summary(svyglm(cbind(alive,arrests-alive)~1, family=quasibinomial, design=scdnofpc)) summary(svyglm(cbind(alive,arrests-alive)~1, family=quasibinomial, design=scdrep)) # Because no sampling weights are given, can't compute design effects # without replacement: use deff="replace" svymean(~alive+arrests, scddes, deff=TRUE) svymean(~alive+arrests, scddes, deff="replace") } \keyword{datasets} survey/man/as.svrepdesign.Rd0000755000176200001440000000723512372242764015627 0ustar liggesusers\name{as.svrepdesign} \alias{as.svrepdesign} %- Also NEED an `\alias' for EACH other topic documented here. \title{Convert a survey design to use replicate weights} \description{ Creates a replicate-weights survey design object from a traditional strata/cluster survey design object. \code{JK1} and \code{JKn} are jackknife methods, \code{BRR} is Balanced Repeated Replicates and \code{Fay} is Fay's modification of this, \code{bootstrap} is Canty and Davison's bootstrap, \code{subbootstrap} is Rao and Wu's \eqn{(n-1)} bootstrap, and \code{mrbbootstrap} is Preston's multistage rescaled bootstrap. } \usage{ as.svrepdesign(design, type=c("auto", "JK1", "JKn", "BRR", "bootstrap", "subbootstrap","mrbbootstrap","Fay"), fay.rho = 0, fpc=NULL,fpctype=NULL,..., compress=TRUE, mse=getOption("survey.replicates.mse")) } %- maybe also `usage' for other objects documented here. \arguments{ \item{design}{Object of class \code{survey.design} } \item{type}{Type of replicate weights. \code{"auto"} uses JKn for stratified, JK1 for unstratified designs} \item{fay.rho}{Tuning parameter for Fay's variance method } \item{fpc,fpctype,\dots}{Passed to \code{jk1weights}, \code{jknweights}, \code{brrweights}, \code{bootweights}, \code{subbootweights}, or \code{mrbweights}.} \item{compress}{Use a compressed representation of the replicate weights matrix.} \item{mse}{if \code{TRUE}, compute variances from sums of squares around the point estimate, rather than the mean of the replicates} } \value{ Object of class \code{svyrep.design}. } \references{ Canty AJ, Davison AC. (1999) Resampling-based variance estimation for labour force surveys. The Statistician 48:379-391 Judkins, D. (1990), "Fay's Method for Variance Estimation," Journal of Official Statistics, 6, 223-239. Preston J. (2009) Rescaled bootstrap for stratified multistage sampling. Survey Methodology 35(2) 227-234 Rao JNK, Wu CFJ. Bootstrap inference for sample surveys. Proc Section on Survey Research Methodology. 1993 (866--871) } \seealso{\code{\link{brrweights}}, \code{\link{svydesign}}, \code{\link{svrepdesign}}, \code{\link{bootweights}}, \code{\link{subbootweights}}, \code{\link{mrbweights}} } \examples{ data(scd) scddes<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE, fpc=rep(5,6)) scdnofpc<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE) # convert to BRR replicate weights scd2brr <- as.svrepdesign(scdnofpc, type="BRR") scd2fay <- as.svrepdesign(scdnofpc, type="Fay",fay.rho=0.3) # convert to JKn weights scd2jkn <- as.svrepdesign(scdnofpc, type="JKn") # convert to JKn weights with finite population correction scd2jknf <- as.svrepdesign(scddes, type="JKn") ## with user-supplied hadamard matrix scd2brr1 <- as.svrepdesign(scdnofpc, type="BRR", hadamard.matrix=paley(11)) svyratio(~alive, ~arrests, design=scd2brr) svyratio(~alive, ~arrests, design=scd2brr1) svyratio(~alive, ~arrests, design=scd2fay) svyratio(~alive, ~arrests, design=scd2jkn) svyratio(~alive, ~arrests, design=scd2jknf) data(api) ## one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) ## convert to JK1 jackknife rclus1<-as.svrepdesign(dclus1) ## convert to bootstrap bclus1<-as.svrepdesign(dclus1,type="bootstrap", replicates=100) svymean(~api00, dclus1) svytotal(~enroll, dclus1) svymean(~api00, rclus1) svytotal(~enroll, rclus1) svymean(~api00, bclus1) svytotal(~enroll, bclus1) dclus2<-svydesign(id = ~dnum + snum, fpc = ~fpc1 + fpc2, data = apiclus2) mrbclus2<-as.svrepdesign(dclus2, type="mrb",replicates=100) svytotal(~api00+stype, dclus2) svytotal(~api00+stype, mrbclus2) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svydesign.Rd0000755000176200001440000002314712372242764014707 0ustar liggesusers\name{svydesign} \alias{svydesign} \alias{svydesign.default} \alias{svydesign.imputationList} \alias{svydesign.character} \alias{na.omit.survey.design} \alias{na.exclude.survey.design} \alias{na.fail.survey.design} \title{Survey sample analysis.} \description{ Specify a complex survey design. } \usage{ svydesign(ids, probs=NULL, strata = NULL, variables = NULL, fpc=NULL, data = NULL, nest = FALSE, check.strata = !nest, weights=NULL,pps=FALSE,...) \method{svydesign}{default}(ids, probs=NULL, strata = NULL, variables = NULL, fpc=NULL,data = NULL, nest = FALSE, check.strata = !nest, weights=NULL, pps=FALSE,variance=c("HT","YG"),...) \method{svydesign}{imputationList}(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, pps=FALSE, ...) \method{svydesign}{character}(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, pps=FALSE, dbtype = "SQLite", dbname, ...) } %- maybe also `usage' for other objects documented here.'` \arguments{ \item{ids}{Formula or data frame specifying cluster ids from largest level to smallest level, \code{~0} or \code{~1} is a formula for no clusters.} \item{probs}{Formula or data frame specifying cluster sampling probabilities} \item{strata}{Formula or vector specifying strata, use \code{NULL} for no strata} \item{variables}{Formula or data frame specifying the variables measured in the survey. If \code{NULL}, the \code{data} argument is used.} \item{fpc}{Finite population correction: see Details below} \item{weights}{Formula or vector specifying sampling weights as an alternative to \code{prob}} \item{data}{Data frame to look up variables in the formula arguments, or database table name, or \code{imputationList} object, see below} \item{nest}{If \code{TRUE}, relabel cluster ids to enforce nesting within strata} \item{check.strata}{If \code{TRUE}, check that clusters are nested in strata}. \item{pps}{\code{"brewer"} to use Brewer's approximation for PPS sampling without replacement. \code{"overton"} to use Overton's approximation. An object of class \code{\link{HR}} to use the Hartley-Rao approximation. An object of class \code{\link{ppsmat}} to use the Horvitz-Thompson estimator.} \item{dbtype}{name of database driver to pass to \code{dbDriver}} \item{dbname}{name of database (eg file name for SQLite)} \item{variance}{For \code{pps} without replacement, use \code{variance="YG"} for the Yates-Grundy estimator instead of the Horvitz-Thompson estimator} \item{\dots}{for future expansion} } \details{ The \code{svydesign} object combines a data frame and all the survey design information needed to analyse it. These objects are used by the survey modelling and summary functions. The \code{id} argument is always required, the \code{strata}, \code{fpc}, \code{weights} and \code{probs} arguments are optional. If these variables are specified they must not have any missing values. By default, \code{svydesign} assumes that all PSUs, even those in different strata, have a unique value of the \code{id} variable. This allows some data errors to be detected. If your PSUs reuse the same identifiers across strata then set \code{nest=TRUE}. The finite population correction (fpc) is used to reduce the variance when a substantial fraction of the total population of interest has been sampled. It may not be appropriate if the target of inference is the process generating the data rather than the statistics of a particular finite population. The finite population correction can be specified either as the total population size in each stratum or as the fraction of the total population that has been sampled. In either case the relevant population size is the sampling units. That is, sampling 100 units from a population stratum of size 500 can be specified as 500 or as 100/500=0.2. The exception is for PPS sampling without replacement, where the sampling probability (which will be different for each PSU) must be used. If population sizes are specified but not sampling probabilities or weights, the sampling probabilities will be computed from the population sizes assuming simple random sampling within strata. For multistage sampling the \code{id} argument should specify a formula with the cluster identifiers at each stage. If subsequent stages are stratified \code{strata} should also be specified as a formula with stratum identifiers at each stage. The population size for each level of sampling should also be specified in \code{fpc}. If \code{fpc} is not specified then sampling is assumed to be with replacement at the top level and only the first stage of cluster is used in computing variances. If \code{fpc} is specified but for fewer stages than \code{id}, sampling is assumed to be complete for subsequent stages. The variance calculations for multistage sampling assume simple or stratified random sampling within clusters at each stage except possibly the last. For PPS sampling without replacement it is necessary to specify the probabilities for each stage of sampling using the \code{fpc} arguments, and an overall \code{weight} argument should not be given. At the moment, multistage or stratified PPS sampling without replacement is supported only with \code{pps="brewer"}, or by giving the full joint probability matrix using \code{\link{ppsmat}}. [Cluster sampling is supported by all methods, but not subsampling within clusters]. The \code{dim}, \code{"["}, \code{"[<-"} and na.action methods for \code{survey.design} objects operate on the dataframe specified by \code{variables} and ensure that the design information is properly updated to correspond to the new data frame. With the \code{"[<-"} method the new value can be a \code{survey.design} object instead of a data frame, but only the data frame is used. See also \code{\link{subset.survey.design}} for a simple way to select subpopulations. The \code{model.frame} method extracts the observed data. If the strata with only one PSU are not self-representing (or they are, but \code{svydesign} cannot tell based on \code{fpc}) then the handling of these strata for variance computation is determined by \code{options("survey.lonely.psu")}. See \code{\link{svyCprod}} for details. \code{data} may be a character string giving the name of a table or view in a relational database that can be accessed through the \code{DBI} or \code{ODBC} interfaces. For DBI interfaces \code{dbtype} should be the name of the database driver and \code{dbname} should be the name by which the driver identifies the specific database (eg file name for SQLite). For ODBC databases \code{dbtype} should be \code{"ODBC"} and \code{dbname} should be the registed DSN for the database. On the Windows GUI, \code{dbname=""} will produce a dialog box for interactive selection. The appropriate database interface package must already be loaded (eg \code{RSQLite} for SQLite, \code{RODBC} for ODBC). The survey design object will contain only the design meta-data, and actual variables will be loaded from the database as needed. Use \code{\link[=close.DBIsvydesign]{close}} to close the database connection and \code{\link[=open.DBIsvydesign]{open}} to reopen the connection, eg, after loading a saved object. The database interface does not attempt to modify the underlying database and so can be used with read-only permissions on the database. If \code{data} is an \code{imputationList} object (from the "mitools" package), \code{svydesign} will return a \code{svyimputationList} object containing a set of designs. Use \code{\link{with.svyimputationList}} to do analyses on these designs and \code{MIcombine} to combine the results. } \value{ An object of class \code{survey.design}. } \author{Thomas Lumley} \seealso{ \code{\link{as.svrepdesign}} for converting to replicate weight designs, \code{\link{subset.survey.design}} for domain estimates, \code{\link{update.survey.design}} to add variables. \code{mitools} package for using multiple imputations \code{\link{svyrecvar}} and \code{\link{svyCprod}} for details of variance estimation \code{\link{election}} for examples of PPS sampling without replacement. \url{http://faculty.washington.edu/tlumley/survey/} for examples of database-backed objects. } \examples{ data(api) # stratified sample dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) # one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) # two-stage cluster sample: weights computed from population sizes. dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) ## multistage sampling has no effect when fpc is not given, so ## these are equivalent. dclus2wr<-svydesign(id=~dnum+snum, weights=weights(dclus2), data=apiclus2) dclus2wr2<-svydesign(id=~dnum, weights=weights(dclus2), data=apiclus2) ## syntax for stratified cluster sample ##(though the data weren't really sampled this way) svydesign(id=~dnum, strata=~stype, weights=~pw, data=apistrat, nest=TRUE) ## PPS sampling without replacement data(election) dpps<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") ##database example: requires RSQLite \dontrun{ library(RSQLite) dbclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc, data="apiclus1",dbtype="SQLite", dbname=system.file("api.db",package="survey")) } } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{univar}% __ONLY ONE__ keyword per line \keyword{manip}% __ONLY ONE__ keyword per line survey/man/svylogrank.Rd0000644000176200001440000000534213006463175015061 0ustar liggesusers\name{svylogrank} \alias{svylogrank} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Compare survival distributions } \description{ Computes a weighted version of the logrank and stratified logrank tests for comparing two or more survival distributions. The generalization to complex samples is based on the characterization of the logrank test as the score test in a Cox model, Under simple random sampling with replacement, this function with \code{rho=0} and \code{gamma=0} is almost identical to the robust score test in the survival package. } \usage{ svylogrank(formula, design, rho=0,gamma=0,method=c("small","large","score"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ Model formula with a single predictor and optionally a \code{\link{strata}} term. The predictor must be a factor if it has more than two levels. } \item{design}{ A survey design object } \item{rho,gamma}{Coefficients for the Harrington/Fleming G-rho-gamma tests. The default is the logrank test, \code{rho=1} gives a generalised Wilcoxon test} \item{method}{\code{"small"} works faster when a matrix with dimension number of events by number of people fits easily in memory; \code{"large"} works faster for large data sets; \code{"score"} works by brute-force construction of an expanded data set, and is for debugging} \item{\dots}{ for future expansion. } } \value{ A vector containing the z-statistic for comparing each level of the variable to the lowest, the chisquared statistic for the logrank test, and the p-value. } \references{ Rader, Kevin Andrew. 2014. Methods for Analyzing Survival and Binary Data in Complex Surveys. Doctoral dissertation, Harvard University.\url{http://nrs.harvard.edu/urn-3:HUL.InstRepos:12274283} } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{\link{svykm}}, \code{\link{svycoxph}}. } \examples{ library("survival") data(nwtco) ## stratified on case status dcchs<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco, method="simple") svylogrank(Surv(edrel,rel)~factor(stage),design=dcchs) data(pbc, package="survival") pbc$randomized <- with(pbc, !is.na(trt) & trt>0) biasmodel<-glm(randomized~age*edema,data=pbc) pbc$randprob<-fitted(biasmodel) dpbc<-svydesign(id=~1, prob=~randprob, strata=~edema, data=subset(pbc,randomized)) svylogrank(Surv(time,status==2)~trt,design=dpbc) svylogrank(Surv(time,status==2)~trt,design=dpbc,rho=1) rpbc<-as.svrepdesign(dpbc) svylogrank(Surv(time,status==2)~trt,design=rpbc) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{survival}% __ONLY ONE__ keyword per line survey/man/weights.survey.design.Rd0000755000176200001440000000254512242746122017142 0ustar liggesusers\name{weights.survey.design} \alias{weights.survey.design} \alias{weights.svyrep.design} \alias{weights.survey_fpc} %- Also NEED an `\alias' for EACH other topic documented here. \title{Survey design weights} \description{ Extract weights from a survey design object. } \usage{ \method{weights}{survey.design}(object, ...) \method{weights}{svyrep.design}(object, type=c("replication","sampling","analysis"), ...) \method{weights}{survey_fpc}(object,final=TRUE,...) } %- maybe also `usage' for other objects documented here. \arguments{ \item{object}{Survey design object} \item{type}{Type of weights: \code{"analysis"} combines sampling and replication weights.} \item{final}{If \code{FALSE} return a data frame with sampling weights at each stage of sampling.} \item{\dots}{Other arguments ignored } } \value{ vector or matrix of weights } \seealso{\code{\link{svydesign}}, \code{\link{svrepdesign}}, \code{\link{as.fpc}} } \examples{ data(scd) scddes<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE, fpc=rep(5,6)) repweights<-2*cbind(c(1,0,1,0,1,0), c(1,0,0,1,0,1), c(0,1,1,0,0,1), c(0,1,0,1,1,0)) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights) weights(scdrep) weights(scdrep, type="sampling") weights(scdrep, type="analysis") weights(scddes) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/compressWeights.Rd0000755000176200001440000000320212242746122016041 0ustar liggesusers\name{compressWeights} \alias{compressWeights} \alias{compressWeights.default} \alias{compressWeights.repweights_compressed} \alias{[.repweights_compressed} \alias{dim.repweights_compressed} \alias{dimnames.repweights_compressed} \alias{as.matrix.repweights_compressed} \alias{as.matrix.repweights} \alias{as.vector.repweights_compressed} \alias{compressWeights.svyrep.design} %- Also NEED an '\alias' for EACH other topic documented here. \title{Compress replicate weight matrix} \description{ Many replicate weight matrices have redundant rows, such as when weights are the same for all observations in a PSU. This function produces a compressed form. Methods for \code{as.matrix} and \code{as.vector} extract and expand the weights. } \usage{ compressWeights(rw, ...) \method{compressWeights}{svyrep.design}(rw,...) \method{as.matrix}{repweights_compressed}(x,...) \method{as.vector}{repweights_compressed}(x,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{rw}{A set of replicate weights or a \code{svyrep.design} object} \item{x}{A compressed set of replicate weights} \item{\dots}{For future expansion} } \value{ An object of class \code{repweights_compressed} or a \code{svyrep.design} object with \code{repweights} element of class \code{repweights_compressed} } \seealso{\code{\link{jknweights}},\code{\link{as.svrepdesign}}} \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1c<-as.svrepdesign(dclus1,compress=TRUE) rclus1<-as.svrepdesign(dclus1,compress=FALSE) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/subset.survey.design.Rd0000755000176200001440000000272112242746122016771 0ustar liggesusers\name{subset.survey.design} \alias{subset.survey.design} \alias{subset.svyrep.design} \alias{[.survey.design} %- Also NEED an `\alias' for EACH other topic documented here. \title{Subset of survey} \description{ Restrict a survey design to a subpopulation, keeping the original design information about number of clusters, strata. If the design has no post-stratification or calibration data the subset will use proportionately less memory. } \usage{ \method{subset}{survey.design}(x, subset, ...) \method{subset}{svyrep.design}(x, subset, ...) } %- maybe also `usage' for other objects documented here. \arguments{ \item{x}{A survey design object} \item{subset}{An expression specifying the subpopulation} \item{\dots}{Arguments not used by this method} } \value{ A new survey design object } \seealso{\code{\link{svydesign}}} \examples{ data(fpc) dfpc<-svydesign(id=~psuid,strat=~stratid,weight=~weight,data=fpc,nest=TRUE) dsub<-subset(dfpc,x>4) summary(dsub) svymean(~x,design=dsub) ## These should give the same domain estimates and standard errors svyby(~x,~I(x>4),design=dfpc, svymean) summary(svyglm(x~I(x>4)+0,design=dfpc)) data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1<-as.svrepdesign(dclus1) svymean(~enroll, subset(dclus1, sch.wide=="Yes" & comp.imp=="Yes")) svymean(~enroll, subset(rclus1, sch.wide=="Yes" & comp.imp=="Yes")) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/calibrate.Rd0000644000176200001440000003513313115662425014611 0ustar liggesusers\name{calibrate} \alias{calibrate.survey.design2} \alias{calibrate.svyrep.design} %\alias{is.calibrated} \alias{calibrate} %\alias{regcalibrate.survey.design2} %\alias{regcalibrate.svyrep.design} %\alias{regcalibrate} \alias{calibrate.twophase} \alias{grake} %- Also NEED an '\alias' for EACH other topic documented here. \title{Calibration (GREG) estimators} \description{ Calibration, generalized raking, or GREG estimators generalise post-stratification and raking by calibrating a sample to the marginal totals of variables in a linear regression model. This function reweights the survey design and adds additional information that is used by \code{svyrecvar} to reduce the estimated standard errors. } \usage{ calibrate(design,...) \method{calibrate}{survey.design2}(design, formula, population, aggregate.stage=NULL, stage=0, variance=NULL, bounds=c(-Inf,Inf), calfun=c("linear","raking","logit"), maxit=50,epsilon=1e-7,verbose=FALSE,force=FALSE,trim=NULL, bounds.const=FALSE, sparse=FALSE,...) \method{calibrate}{svyrep.design}(design, formula, population,compress=NA, aggregate.index=NULL, variance=NULL, bounds=c(-Inf,Inf), calfun=c("linear","raking","logit"), maxit=50, epsilon=1e-7, verbose=FALSE,force=FALSE,trim=NULL, bounds.const=FALSE, sparse=FALSE,...) \method{calibrate}{twophase}(design, phase=2,formula, population, calfun=c("linear","raking","logit","rrz"),...) grake(mm,ww,calfun,eta=rep(0,NCOL(mm)),bounds,population,epsilon, verbose,maxit,variance=NULL) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{design}{Survey design object} \item{formula}{Model formula for calibration model, or list of formulas for each margin} \item{population}{Vectors of population column totals for the model matrix in the calibration model, or list of such vectors for each cluster, or list of tables for each margin. Required except for two-phase designs} \item{compress}{compress the resulting replicate weights if \code{TRUE} or if \code{NA} and weights were previously compressed} \item{stage}{See Details below} \item{variance}{Coefficients for variance in calibration model (heteroskedasticity parameters) (see Details below)} \item{aggregate.stage}{An integer. If not \code{NULL}, make calibration weights constant within sampling units at this stage.} \item{aggregate.index}{A vector or one-sided formula. If not \code{NULL}, make calibration weights constant within levels of this variable} \item{bounds}{Bounds for the calibration weights, optional except for \code{calfun="logit"}} \item{bounds.const}{Should be \code{TRUE} if \code{bounds} have been spcified as constant values rather than multiplicative values} \item{trim}{Weights outside this range will be trimmed to these bounds.} \item{...}{Options for other methods} \item{calfun}{Calibration function: see below} \item{maxit}{Number of iterations} \item{epsilon}{Tolerance in matching population total. Either a single number or a vector of the same length as \code{population}} \item{verbose}{Print lots of uninteresting information} \item{force}{Return an answer even if the specified accuracy was not achieved} \item{phase}{Phase of a two-phase design to calibrate (only \code{phase=2} currently implemented.)} \item{mm}{Model matrix} \item{ww}{Vector of weights} \item{eta}{Starting values for iteration} \item{sparse}{Use sparse matrices for faster computation} } \details{ The \code{formula} argument specifies a model matrix, and the \code{population} argument is the population column sums of this matrix. For the important special case where the calibration totals are (possibly overlapping) marginal tables of factor variables, as in classical raking, the \code{formula} and \code{population} arguments may be lists in the same format as the input to \code{\link{rake}}. If the \code{population} argument has a names attribute it will be checked against the names produced by \code{model.matrix(formula)} and reordered if necessary. This protects against situations where the (locale-dependent) ordering of factor levels is not what you expected. Numerical instabilities may result if the sampling weights in the \code{design} object are wrong by multiple orders of magnitude. The code now attempts to rescale the weights first, but it is better for the user to ensure that the scale is reasonable. The \code{calibrate} function implements linear, bounded linear, raking, bounded raking, and logit calibration functions. All except unbounded linear calibration use the Newton-Raphson algorithm described by Deville et al (1993). This algorithm is exposed for other uses in the \code{grake} function. Unbounded linear calibration uses an algorithm that is less sensitive to collinearity. The calibration function may be specified as a string naming one of the three built-in functions or as an object of class \code{calfun}, allowing user-defined functions. See \code{\link{make.calfun}} for details. The \code{bounds} argument can be specified as global upper and lower bounds e.g \code{bounds=c(0.5, 2)} or as a list with lower and upper vectors e.g. \code{bounds=list(lower=lower, upper=upper)}. This allows for individual boundary constraints for each unit. The lower and upper vectors must be the same length as the input data. The bounds can be specified as multiplicative values or constant values. If constant, \code{bounds.const} must be set to \code{TRUE}. Calibration with bounds, or on highly collinear data, may fail. If \code{force=TRUE} the approximately calibrated design object will still be returned (useful for examining why it failed). A failure in calibrating a set of replicate weights when the sampling weights were successfully calibrated will give only a warning, not an error. When calibration to the desired set of bounds is not possible, another option is to trim weights. To do this set \code{bounds} to a looser set of bounds for which calibration is achievable and set \code{trim} to the tighter bounds. Weights outside the bounds will be trimmed to the bounds, and the excess weight distributed over other observations in proportion to their sampling weight (and so this may put some other observations slightly over the trimming bounds). The projection matrix used in computing standard errors is based on the feasible bounds specified by the \code{bounds} argument. See also \code{\link{trimWeights}}, which trims the final weights in a design object rather than the calibration adjustments. For two-phase designs \code{calfun="rrz"} estimates the sampling probabilities using logistic regression as described by Robins et al (1994). \code{\link{estWeights}} will do the same thing. Calibration may result in observations within the last-stage sampling units having unequal weight even though they necessarily are sampled together. Specifying \code{aggegrate.stage} ensures that the calibration weight adjustments are constant within sampling units at the specified stage; if the original sampling weights were equal the final weights will also be equal. The algorithm is as described by Vanderhoeft (2001, section III.D). Specifying \code{aggregate.index} does the same thing for replicate weight designs; a warning will be given if the original weights are not constant within levels of \code{aggregate.index}. In a model with two-stage sampling, population totals may be available for the PSUs actually sampled, but not for the whole population. In this situation, calibrating within each PSU reduces with second-stage contribution to variance. This generalizes to multistage sampling. The \code{stage} argument specifies which stage of sampling the totals refer to. Stage 0 is full population totals, stage 1 is totals for PSUs, and so on. The default, \code{stage=NULL} is interpreted as stage 0 when a single population vector is supplied and stage 1 when a list is supplied. Calibrating to PSU totals will fail (with a message about an exactly singular matrix) for PSUs that have fewer observations than the number of calibration variables. The variance in the calibration model may depend on covariates. If \code{variance=NULL} the calibration model has constant variance. If \code{variance} is not \code{NULL} it specifies a linear combination of the columns of the model matrix and the calibration variance is proportional to that linear combination. Alternatively \code{variance} can be specified as a vector of values the same length as the input data specifying a heteroskedasticity parameter for each unit. The design matrix specified by formula (after any aggregation) must be of full rank, with one exception. If the population total for a column is zero and all the observations are zero the column will be ignored. This allows the use of factors where the population happens to have no observations at some level. In a two-phase design, \code{population} may be omitted when \code{phase=2}, to specify calibration to the phase-one sample. If the two-phase design object was constructed using the more memory-efficient \code{method="approx"} argument to \code{\link{twophase}}, calibration of the first phase of sampling to the population is not supported. } \value{ A survey design object. } \references{ Deville J-C, Sarndal C-E, Sautory O (1993) Generalized Raking Procedures in Survey Sampling. JASA 88:1013-1020 Kalton G, Flores-Cervantes I (2003) "Weighting methods" J Official Stat 19(2) 81-97 Lumley T, Shaw PA, Dai JY (2011) "Connections between survey calibration estimators and semiparametric models for incomplete data" International Statistical Review. 79:200-220. (with discussion 79:221-232) Sarndal C-E, Swensson B, Wretman J. "Model Assisted Survey Sampling". Springer. 1991. Rao JNK, Yung W, Hidiroglou MA (2002) Estimating equations for the analysis of survey data using poststratification information. Sankhya 64 Series A Part 2, 364-378. Robins JM, Rotnitzky A, Zhao LP. (1994) Estimation of regression coefficients when some regressors are not always observed. Journal of the American Statistical Association, 89, 846-866. Vanderhoeft C (2001) Generalized Calibration at Statistics Belgium. Statistics Belgium Working Paper No 3. \url{http://statbel.fgov.be/nl/binaries/paper03\%5B1\%5D_tcm325-35412.pdf} } \seealso{ \code{\link{postStratify}}, \code{\link{rake}} for other ways to use auxiliary information \code{\link{twophase}} and \code{vignette("epi")} for an example of calibration in two-phase designs \code{survey/tests/kalton.R} for examples replicating those in Kalton & Flores-Cervantes (2003) \code{\link{make.calfun}} for user-defined calibration distances. \code{\link{trimWeights}} to trim final weights rather than calibration adjustments. } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) ## For a single factor variable this is equivalent to ## postStratify (dclus1g<-calibrate(dclus1, ~stype, pop.totals)) svymean(~api00, dclus1g) svytotal(~enroll, dclus1g) svytotal(~stype, dclus1g) ## Make weights constant within school district (dclus1agg<-calibrate(dclus1, ~stype, pop.totals, aggregate=1)) svymean(~api00, dclus1agg) svytotal(~enroll, dclus1agg) svytotal(~stype, dclus1agg) ## Now add sch.wide (dclus1g2 <- calibrate(dclus1, ~stype+sch.wide, c(pop.totals, sch.wideYes=5122))) svymean(~api00, dclus1g2) svytotal(~enroll, dclus1g2) svytotal(~stype, dclus1g2) ## Finally, calibrate on 1999 API and school type (dclus1g3 <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069))) svymean(~api00, dclus1g3) svytotal(~enroll, dclus1g3) svytotal(~stype, dclus1g3) ## Same syntax with replicate weights rclus1<-as.svrepdesign(dclus1) (rclus1g3 <- calibrate(rclus1, ~stype+api99, c(pop.totals, api99=3914069))) svymean(~api00, rclus1g3) svytotal(~enroll, rclus1g3) svytotal(~stype, rclus1g3) (rclus1agg3 <- calibrate(rclus1, ~stype+api99, c(pop.totals,api99=3914069), aggregate.index=~dnum)) svymean(~api00, rclus1agg3) svytotal(~enroll, rclus1agg3) svytotal(~stype, rclus1agg3) ### ## Bounded weights range(weights(dclus1g3)/weights(dclus1)) dclus1g3b <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069),bounds=c(0.6,1.6)) range(weights(dclus1g3b)/weights(dclus1)) svymean(~api00, dclus1g3b) svytotal(~enroll, dclus1g3b) svytotal(~stype, dclus1g3b) ## Individual boundary constraints as constant values # the first weight will be bounded at 40, the rest free to move bnds <- list( lower = rep(-Inf, nrow(apiclus1)), upper = c(40, rep(Inf, nrow(apiclus1)-1))) head(weights(dclus1g3)) dclus1g3b1 <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069), bounds=bnds, bounds.const=TRUE) head(weights(dclus1g3b1)) svytotal(~api.stu, dclus1g3b1) ## trimming dclus1tr <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069), bounds=c(0.5,2), trim=c(2/3,3/2)) svymean(~api00+api99+enroll, dclus1tr) svytotal(~stype,dclus1tr) range(weights(dclus1tr)/weights(dclus1)) rclus1tr <- calibrate(rclus1, ~stype+api99, c(pop.totals, api99=3914069), bounds=c(0.5,2), trim=c(2/3,3/2)) svymean(~api00+api99+enroll, rclus1tr) svytotal(~stype,rclus1tr) ## Input in the same format as rake() for classical raking pop.table <- xtabs(~stype+sch.wide,apipop) pop.table2 <- xtabs(~stype+comp.imp,apipop) dclus1r<-rake(dclus1, list(~stype+sch.wide, ~stype+comp.imp), list(pop.table, pop.table2)) gclus1r<-calibrate(dclus1, formula=list(~stype+sch.wide, ~stype+comp.imp), population=list(pop.table, pop.table2),calfun="raking") svymean(~api00+stype, dclus1r) svymean(~api00+stype, gclus1r) ## generalised raking dclus1g3c <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069), calfun="raking") range(weights(dclus1g3c)/weights(dclus1)) (dclus1g3d <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069), calfun=cal.logit, bounds=c(0.5,2.5))) range(weights(dclus1g3d)/weights(dclus1)) ## Ratio estimators are calibration estimators dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) svytotal(~api.stu,dstrat) common<-svyratio(~api.stu, ~enroll, dstrat, separate=FALSE) predict(common, total=3811472) pop<-3811472 ## equivalent to (common) ratio estimator dstratg1<-calibrate(dstrat,~enroll-1, pop, variance=1) svytotal(~api.stu, dstratg1) # Alternatively specifying the heteroskedasticity parameters directly dstratgh <- calibrate(dstrat,~enroll-1, pop, variance=apistrat$enroll) svytotal(~api.stu, dstratgh) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/INDEX0000755000176200001440000000775513101455546012426 0ustar liggesuserssvydesign Specify a survey design twophase Specify two-phase designs svrepdesign Specify replication-weight designs as.svrepdesign Compute replication weights for a design svydesign.imputationList Designs for multiply-imputed data. subset.survey.design Subset of survey update.survey.design Add variables to a survey design postStratify Post-stratify a survey design rake Rake a survey design calibrate Calibration and generalised raking estWeight Estimated weights for two-phase designs trimWeights Trim sampling weights. ----- svyplot Survey-weighted graphics svycoplot Conditioning plots for survey data svyhist Survey-weighted histogram svysmooth Smoothers and density estimates svycdf Cumulative distribution functions svykm Survival curves svyboxplot Survey-weighted boxplots svyby Tables of statistics ftable.svystat Formatted tables of statistics ftable.svrepstat ftable.svyby cv extract coefficient of variation SE extract standard error deff extract design effect confint extract confidence intervals svycontrast linear combinations of estimates ----- svycoxph Survey-weighted Cox models svyglm Survey-weighted generalised linear models. svyolr Ordinal logistic regression svysurvreg Accelerated failure models regTermTest Test sets of terms in a regression model svyloglin Loglinear models svyquantile Summary statistics for sample surveys svytotal svymean svyvar svyratio svytable Contingency tables svychisq Tests for two-way tables svyttest Design-based t-test svyranktest Design-based two-sample rank tests svylogrank Design-based logrank tests svystandardize Direct standardisation svykappa Cohen's kappa for inter-rater agreement svymle Maximum pseudolikelihood estimation in complex surveys svyprcomp Principal component analysis and biplots svyfactanal Weighted maximum likelihood factor analysis ----- withReplicates Replicate variances for arbitrary statistics ---- hadamard Hadamard matrices is.hadamard paley Paley-type Hadamard matrices ---- stratsample Take a stratified sample ---- Utility functions: make.calfun Define calibration metrics cal.linear cal.raking cal.logit *svy.varcoef Sandwich variance estimator for glms *svyCprod Computations for survey variances *svyrecvar Computations for multistage samples *svrVar Computations for replication variances jk1weights create replication weights jknweights create replication weights bootweights create replication weights brrweights create replication weights mrbweights create replication weights grake Computations for generalised raking *regcalibrate Computations for regression calibration degf Degrees of freedom for replication weights *twophasevar Variances in two-phase designs as.svydesign2 Convert a old svydesign object to the new format. * not exported from NAMESPACE ----- Data: election US election data fpc Small artificial example scd Cardiac arrests example api California Academic Performance Index crowd Small example from VPLX manual mu284 Two-stage sample from MU284 population nhanes Subset of NHANES 2009-10 yrbs One variable from Youth Risk Behavior Survey