survey/0000755000176200001440000000000014576600372011621 5ustar liggesuserssurvey/NAMESPACE0000644000176200001440000003327614571143205013043 0ustar liggesusersuseDynLib(survey) import(stats,graphics,splines,grid, survival,lattice,methods,Matrix) importFrom("grDevices", "col2rgb", "grey", "rgb") importFrom("utils", "getS3method") importFrom("mitools","withPV") importFrom(Rcpp, sourceCpp) 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, cal.sinh,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, cal_names, svycralpha, svyivreg, svynls, svyscoretest, oldsvyquantile,svyqqplot, svyqqmath, svybys, svygofchisq, poisson_sampling,ppscov, xdesign, svysmoothArea,svysmoothUnit) S3method(svyloglin,survey.design) S3method(svyloglin,svyrep.design) S3method(svyloglin,DBIsvydesign) 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(as.svrepdesign, default) S3method(as.svrepdesign, svyimputationList) S3method(close, DBIsvydesign) S3method(open, DBIsvydesign) S3method(summary, DBIsvydesign) S3method(print, summary.DBIsvydesign) S3method(print, DBIsvydesign) S3method(print, pps) S3method(summary, pps) S3method(print, summary.pps) S3method(print,ppsmat) S3method(print,ppsdelta) S3method(print,ppsdcheck) S3method(svrepdesign, default) S3method(svrepdesign, imputationList) S3method(svrepdesign, character) S3method(print, DBIrepdesign) S3method(summary, DBIrepdesign) 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(svytotal, survey.design) S3method(svytotal, svyrep.design) S3method(svytotal, survey.design2) S3method(svytotal, twophase) S3method(svytotal, twophase2) S3method(svytotal, pps) S3method(svytotal, DBIsvydesign) 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(svyvar, survey.design) S3method(svyvar, svyrep.design) S3method(svyvar, DBIsvydesign) S3method(svyquantile, survey.design) S3method(svyquantile, svyrep.design) S3method(oldsvyquantile, survey.design) S3method(oldsvyquantile, svyrep.design) S3method(svyquantile, DBIsvydesign) S3method(oldsvyquantile, DBIsvydesign) S3method(svytable, survey.design) S3method(svytable, svyrep.design) S3method(svytable, DBIsvydesign) S3method(svychisq, survey.design) S3method(svychisq, svyrep.design) S3method(svychisq, DBIsvydesign) S3method(svychisq, twophase) S3method(svykappa, default) S3method(svykappa, DBIsvydesign) S3method(svyglm,survey.design) S3method(svyglm,svyrep.design) S3method(svyglm, DBIsvydesign) S3method(svyplot,default) S3method(svyplot, DBIsvydesign) S3method(svycoplot,default) S3method(svycoplot, DBIsvydesign) S3method(svysmooth, default) S3method(svysmooth, DBIsvydesign) S3method(svyboxplot, DBIsvydesign) S3method(svyboxplot, default) S3method(svycdf, default) S3method(svycdf, DBIsvydesign) 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, svyolr) S3method(predict, svyratio) S3method(predict, svyratio_separate) S3method(coef,svyratio) S3method(svycoxph,survey.design) S3method(svycoxph,svyrep.design) S3method(svycoxph, DBIsvydesign) 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, newsvyquantile) S3method(coef, oldsvyquantile) S3method(confint,svyglm) S3method(confint, svyciprop) S3method(confint, newsvyquantile) S3method(confint, oldsvyquantile) S3method(SE,default) S3method(SE,svrepstat) S3method(SE,svystat) S3method(SE,svyby) S3method(SE,newsvyquantile) S3method(SE,oldsvyquantile) S3method(SE,svyratio) S3method(vcov,svyrep.design) S3method(vcov, newsvyquantile) S3method(vcov, oldsvyquantile) 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(extractAIC,svycoxph) S3method(extractAIC,svrepcoxph) S3method(AIC,svycoxph) S3method(svycontrast,svrepstat) S3method(svycontrast,svystat) S3method(svycontrast,svyby) S3method(svycontrast,svyglm) S3method(svycontrast, svrepglm) S3method(svycontrast,svycoxph) S3method(svycontrast, svrepcoxph) S3method(svycontrast,default) S3method(svycontrast, svyvar) 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(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(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(deviance, coxph) S3method(deviance, svycoxph) 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, regTermTestWW) 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, oldsvyquantile) S3method(print, svyratio) S3method(print, svyratio_separate) S3method(print, twophase) S3method(print, twophase2) S3method(print, calfun) S3method(print, svyvar) S3method(print, seqanova.svycoxph) 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(withReplicates, svyimputationList) S3method(dim,repweights_compressed) S3method(dim,survey.design) S3method(dim,twophase) S3method(dim,twophase2) S3method(dim, DBIsvydesign) S3method(dim, DBIrepdesign) 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, 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(calibrate,survey.design2) S3method(calibrate,svyrep.design) S3method(calibrate,twophase) S3method(calibrate,twophase2) S3method(calibrate, DBIsvydesign) S3method(calibrate, pps) 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(update,survey.design) S3method(update,svyrep.design) S3method(update,twophase) S3method(update,twophase2) S3method(update,DBIsvydesign) S3method(update,svyimputationList) S3method(transform,survey.design) S3method(transform,svyrep.design) S3method(transform,twophase) S3method(transform,twophase2) S3method(transform,DBIsvydesign) S3method(transform,svyimputationList) S3method(svyby, default) S3method(svyby, DBIsvydesign) S3method(svyby, survey.design2) 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(withPV, survey.design) S3method(withPV, svyrep.design) S3method(confint,svystat) S3method(confint,svrepstat) S3method(confint, svyratio) S3method(confint, svyby) S3method(confint,svyttest) S3method(`[`, survey.design) S3method(`[`, survey.design2) S3method(`[`, svyrep.design) S3method(`[`, twophase) S3method(`[`, twophase2) S3method(`[`, repweights_compressed) S3method(`[`, nonresponse) S3method(`[`, DBIsvydesign) S3method(`[`, DBIrepdesign) S3method(`[<-`, survey.design) S3method(`names<-`, svrepstat) S3method(svylogrank,survey.design2) S3method(svylogrank,svyrep.design) S3method(svylogrank,twophase) S3method(svylogrank,DBIsvydesign) S3method(svyranktest,survey.design) S3method(svyranktest,svyrep.design) S3method(svyranktest,DBIsvydesign) S3method(svyivreg,survey.design) S3method(svyivreg, svyrep.design) S3method(summary, svyivreg) S3method(vcov, svyivreg) S3method(psrsq,glm) S3method(psrsq,svyglm) S3method(cal_names, survey.design) S3method(cal_names, DBIsvydesign) S3method(svynls, DBIsvydesign) S3method(svynls, survey.design2) S3method(svynls, svyrep.design) S3method(print, svynls) S3method(summary, svynls) S3method(coef,svynls) S3method(vcov,svynls) S3method(svyscoretest,svyglm) S3method(unwrap,default) S3method(unwrap2, default) S3method(unwrap2, newsvyquantile) S3method(svyxvar,xdesign) S3method(svymean, xdesign) S3method(svyglm, xdesign) S3method(print,xdesign) S3method(degf, xdesign) S3method(update,xdesign) S3method(transform, xdesign) S3method(subset, xdesign) S3method("[", xdesign) S3method(svyby, xdesign) S3method(dim, xdesign) S3method(dimnames, xdesign) S3method(estfuns, coxph) S3method(estfuns, glm) S3method(estfuns, lm) S3method(sigma, svyglm) S3method(sigma, svrepglm) S3method(pps_design, ppsdcheck) S3method(pps_design, ppsdelta) S3method(pps_design, HR) S3method(pps_design, ppsmat) S3method(pps_design, character) S3method(survfit,svycoxph) S3method(influence,svystat) S3method(estWeights,twophase2) S3method(postStratify,pps) S3method(svycontrast,svyolr) S3method(svylogrank,twophase2) S3method(svytotal,xdesign) S3method(svysmoothArea, survey.design) S3method(svysmoothArea, default) S3method(svysmoothUnit, survey.design) S3method(svysmoothUnit, default) S3method(summary, svysae) survey/THANKS0000644000176200001440000000562514565514512012542 0ustar liggesusersThe survey package has benefited from code, bug reports, and feature requests from users, including: Justin Allen Daniel Almirall Guiseppe Antonaci Vincent Arel-Bundock Pedro Luis Baldoni Robert Baskin Asia Bento Maciej Beręsewicz Brad Biggerstaff Milan Bouchet-Valat Adrienne Bradford Norman Breslow Arthur Burke Ron Burns Trent Buskirk Stefano Calza Shelby Chartkoff Henry Chiem David Collins Anthony Damico Wade Davis Qiaolan Deng Neil Diamond Michael Donohue Rex Dwyer Melanie Edwards Adam Elder Hannah Evans Francisco Fabuel Boris Fazio Bob Fay Daniel Fernandes Greg Freedman Ben French Jacques Ferrez Natalie Gallagher Daniella Gollinelli Barry Graubard Alistair Gray James Greiner Zachary Grinspan Brian Guay Alois Haslinger Kieran Healy Lucia Hindorff Jeffery Hughes Beat Hulliger Steven Johnston David Eduardo Jorquera Petersen Lauren Kennedy Ehsan Kharim Ward Kinkade Stas Kolenikov Franziska Kößler Scott Kostyshak Alex Kowarik Michael Laviolette Thomas Leeper Thomas Loughlin Chandler McClellan Klaus Ignacio Lehmann Melendez Benmei Liu Sebastien Lucie Jean Paul Lucas Lisa McShane Ana Patricia Martins Tapan Mehta Isabelle Michaud Daryl Morris Joey Morris Kirill Mueller Daniel Oehm Jean Opsomer Raymond Pan Gonzalo Perez Djalma Pessoa Molly Petersen Elizabeth Purdom Ana Quiterio Gillian Raab Christian Raschke Brian Ripley Fred Rohde Steve Roberts Andrew Robinson Ángel Rodríguez Laso Mark Rosenstein Benjamin Schneider Dirk Schumacher Dan Simpson Pam Shaw Bryan Shepherd Keiran Shao Lee Sieswerda Phil Smith Matthew Soldner Corey Sparks Elena Stern Ingmar Sturm Terry Therneau Takahiro Tsuchiya Richard Valliant Tobias Verbeke Renzo Vettori Chris Webb Justin Wishart Steve White Jasper Yang Zhiwen Yao Thomas Yokota Diego Zardetto Alan Zaslavsky Stephanie Zimmer Jing Zhang Tomasz Żółtak 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. Much of the new methodology from 2009 to 2016 was supported by the Marsden Fund, in particular the developments of the Rao-Scott likelihood 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 confidence 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. The C++ code for variances was contributed by Ben Schneider The small-area estimation code calls the SUMMER package, and comes from Peter Gao, Jon Wakefield, and Richard Li. survey/data/0000755000176200001440000000000014145567457012542 5ustar liggesuserssurvey/data/scd.rda0000644000176200001440000000033714576431436014001 0ustar liggesusers r0b```b`afd`b2Y# 'f.NN q b643A13#3a@q ` tB7L`>K> (m=B6%`@er&&$%BRKas2R ,/C6 *hc0 a c59'f$L+%$Q/hr7survey/data/api.rda0000644000176200001440000067764014576431435014021 0ustar liggesusers7zXZi"6!X/])TW"nRʟ$l9 |]vA-P}\#=fv`ƾWY=[!+N(H]1&c9I6FvAzb/ȕq@0η."J}a53| ZTI<: ]Y͵u.#HAM2:k9ݷ듲`r[ŽΩH؃˘Zܶ9^]mN'7*NB9e~4;񶱫A@cY6@"8rIǤWCڀ_(`?kwJaDi 0q8e?&MG+5W],J #輍^D 47ЌCt< r׺1a "Ek ]OC - -E;F l,V1:ǍJ';/NKܺPO)ΙFZ>JY`{=$I0BD<w wSi7hGW7,,&}$SejaSO!BsQQm)z"t+f4sY9_ / ~%7G諔|+'pH[ySrtmV$"kqcn@v[X.w$fB;Jjȩ?V%/]C&/}_8ZFi"3Y rLˀV":LY,F=>[OL!D>6yr=4Qajr2zKӊHŞhG8K,4h6B۷  WAW;˿_xF3f}fhl5ЃbB5Z=MXD\~ꁆ? FFk^ .n:E`!Y#^'Qӎ@߅\p/;cFt?yļã%SĸG~M\?nKo\5<8H"!4 YW"%_@t m]4lH,69K,B'ߘ. p zb3_Xv |@6vV]sBYl2{hBh.{mO$N*yXB2?Ž94v- ͨ0S~CȽX-=q?JŬd 8to2՜:;s1|ɍ-Td/m3=XYXx4m䩍ŨqH/=23!# kEwCcn|V+>7"DiGk$ұ;7ro#@}&<-Rlur0"{Nbh`]]M l :%t&W0-N`B0y":% Co4 GOf[+ʒYF)c,&؞ltql*bO)K"M_!:N2(T5PT&םgi.O扴 zЈE~Q"&mC1oPOQ6D܍hj%ȍR%t J3ZNo%J}_?> |J@S& a3a|?K& ^( ?yUc7@>e@Y&+hMG7:V",4F w>OЭ8q.?ewAv@rBiR&M':&+ԕdL)+UytqP8 pC Yj,iI,q=0┳wY@=;'cv\`wl]&[S!{w[M>)yG}lIfwKÆIkuЊ sټzA+1A$e`zkɧd95Z}0tG2^5D2#w}CHPl[+4F6ѩ(6+] пGRәXJܩR]Ea=WsZ_+HSbQXEN>OXO!#cѨv;,+⻹"#B NF2!9oPt;dzV1p}"Oc{_aϡb N7b"4[  6ZOåp38+*[nXS3rU3< wOsdAw:)Z4. H a4YkIS9bf[hNi]b@8yiB) pk(iA)N6Iݔgp|# J݆BHAsI' hg򈵎YeΙx\~jU !D.LI\@.I]S%V'z$;r2vUXt~uj L_|r%Z{^ӝsq1'KO?M>3GD< gD/"_9X'lmg0"HU㘝oMʋjtE)aYy4/pu#kS MH%u<\ȍ5hI 2=Spq*y~IE5@1G$x⥴q?e8 :oZ.g #!p;J陨s('DxFrJ>#YA`0{ծXƸ/, Vс:?#wcMvĜ,萧"Wt\X}~ILpBT) F3CS$}a NZOΫ~hQĉS sa 2is,VY)ϼ:㞬TVuYJjtZnMw"$CsYVqjB }C@>G;ru R|/$TQxaCmKTC0*6S0o:7qjߎ&G]%w37㇋#9 ><|%9`8;$Ix2A_,`Sܴ.@j_\^z_Y7!F ^ʠHXU8=Y_[q56XeKY+Zvg l,8熝_di)!02((9e yB%o{0.-BީKþ/NU9P<`' %=# Wx4o0%JA?tB9.vIzdR7$-rEN*RZH\;3]jD_7j|^Kκj;j "ʡ09R_ Sw2^z-s@4O2ӳX 05"}'Zs g"u/3vS_(FS\%/&aRd"1dZJ_'4yO ӄ'U'Xsj`zDc[=}eAf-nbe<yir[R] Bڅh,BBx8$iWE *6Ե\4>Rڞ ,n`'8i/[a0S@C!E7v6r-&M[.8;4a(\9',b {7NbDs:o8%UРx) +5tf'Jvu`L坩;o4u3g 5a}ܶГގ*Y)$Y驯2#mWLMeyЪ③r_zO$$IZ,"6BG~xX5)\12hvpp{ݑepElAŬϧ'XzM:){쑫j۹BE,SUq1/5`mt;_o'FVXX͓T]c4z!]A?Wyko ڲ IC)T@9+{ͽ)]spr>Я:8S+9jEB(#Z˭>r+#"L3JNxep;)PU[`{{v0v'aDڽ+SAuEErhj@2F%aU=qHވ8O*گiA@sZ |r׃Eo]2_c)U=0$oq|aA l(rZ(w[GmMPVT)M켅e*@iR4; ԸـXɱNWQ%Զvb8=n#w 0{gS Lo֩ ]RZq'd"8mZt^l!+{ ^&Hiy"s:pA;FN7tۅovaQcFa @SoiN0#n S~zn͚4Z ΂ʑ4 N 'vCYa&UEcUy<9e*{33k+5`~ĤPh_a'AX$.6iYk ɥH8!̜O ܣP@j9WY#ťԊ, O0\ZC Yd c >eQ;2t_mh5˴!.PD;wh}ȠG#%zeӨM PUSY*PKKhPֹ>]=&zCW(CEqơ%q@p2p{[}'_ yw[!Qk;/]6|J/a7n2p;n='`5 Q}'#3o{:17 áD˝R3N;B)HHuL ~iP(ZU41`cE]'#Y?Π(&rsSE .O7p=/ץke<i~0OK yRL)z!.!\e55>zmQ`\hv|#3ܵ ВE®e^z(fce`IA w$2} dNi_bve`tTj#X iTGUhC?3)ZqqҔd~!CJ^ x=+y8n=qCzso#V [a(4CI rk<f3 D.'z s3c,(Wi4Ak5Vdf)n bb3!#;BFEԓX;-uL0򤫣>J|NR?W<1!L^wA {5a>kU2Ûl2,x=6kJb$~*툩Qa˶F8K~L P'P߹wLaG6XXl<_1槡ƀ ݘ{ɶqMFU!r]>,pW< 0PeqnxQm)Z~Vq8ySys8Utsu| $X`Nnrˁƨ &,|$JqNz/N *_797FLECrӦ*( idʾǧTE,R+?]-09Yv!&pX {ʜ_KϴTAbG <)Jt8?$XHAۮO'"6SI`J{:vIK Ca S|LlMDV(u˧P]Z&G>`nL=+)Ni)t_1e<~?~MMAч*~X^ߑ&scK4l auj h]m͢/gS $黡Պ(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'J; q'Y>0 YZsurvey/data/hospital.rda0000644000176200001440000000067014576431435015052 0ustar liggesusersJ@5YX 7WQ m iJ2࢈K@qтѝOН>8ɜ4R?gN?dj% $J&2%џJ!2tEPr:* h,Nv1 e.*\TXb%.AHZQ(MPe*BUܩ}ީ8sP4 `!survey/data/nhanes.rda0000644000176200001440000016254014576431436014511 0ustar liggesusers7zXZi"6!X#])TW"nRʟ$l9 |]jo붬Z rXًxsɟC*fnϠ9lK]+Kةm~2{ n(>r+8b%*̊0~%-TDK%▞Fސ{ ҙUA޳'wP,(2)hwְ`xeؖYELJi%LV~ <;6&)d>ގ~C/E'̽7h43M :ipYC'$'yÑsax}>8+7䟯,73rN( maT|!L!? |2LLΎ{y0hD?hOta6Ӳ} Va݋M@$14z0E QU\:xdA,CYdͮLQ;MZbIKլw}Z3vgq˒j9jk#"ꏬu]ApﱬF'T!A*ߊ. 7MY;U" G$`n_K/VYYC~U=QKW"ώ:}I숮ޠtɻ2EL(`9KS6~Zy& 63[Nk32,%̐VCQ"M~uGԊh>L@"3E*l6B:d˾φ=Rb]՟d%n=f˵JDD'ƱAkĠ_za, @ =-?h-sl{͉mU+J3iw|^z ogY xxքdhrșyg!1>P` JZASNmҎIJJX.#<#_FwЈSM;6}EuO&,^ʋ?ʅ:[,NFZ֩Ub$Sd^IU;gC7΃n g6N.}ZvtEBlŽbNMARTlD͠'ßq7j8 tYDi˓ F=BjS)NR&8KӲ98{Th޻\=Oq\.2bApp"<@_[9mO/ƈ9YO>g(0"=">#kf_Z98qPB3ɓEIZ F4>=!;r _7''7i=rI[m6ea bg @E]4^g&5^C; #2ORyݢ IʈڀӃ- ȥfy1Im;QL%:p c ķ%kզnu7*% )_m@֍P̒-J^6 }LuO[;uD#hnEz $QOW~@t󿈈t)_7G`omWe)OoqV_{An `rlV, TڍhS=͐%UƼ tk$=!O=qd7!~IzZF^ֈ9av!F/R/d :f^Y=h ,\TKYjXxFq(:Cm]}Q+&Vhsn(<$C(wջNI&"{/iJa#m#߽-L}j1z<-3 aKd|tQ&zB Gt~$ŹZI,>qWr#)C5H77w$ ԯ#?3ŧ:\šL{eJyPݜqo;œ }a$՞>3CО%wKn&c/sF:v~_KeVi3 N}.[ԛD{&?+ E{Ry݅>vCX[8cEfԹ2JZ)hdccg'tGXJ&O"܍-^RALn\| L`7ct99к8VX/ǁ}Htv~~'pmO 6H2=IPC=q/KEY9YglX;sUcB\-P>krX=.XI>sd8[L|+n}9= Z/?!!&/axm TDDkP5U-L 2jx5/~zV%n HC?+Oi4,Ƿ䉚md[YvΈtI(`4${3TNTzu0_].`AI_i 1Lv;~PrLQ0B/눺$Y0A;e:q]]>zpg7 bP+MҶz[:lmGjVHZY>\Zu?o|Fء'|:+ SF0{":w 2e߄1by.OBӥ<*믶rf%;~D*dqf_Ͽb.ZW|8m~dɤH/DI"m;,Bc@q(R+qF˳"Eln]iH1C'`B2 ]nL7L7!+3.?K)s $ ªm\Wٔ]}sD NB>2#mD9']4rP)S+&YqcgLΛ^p`#mA=++ JT^J56bjË PpP&$8ڐA`)]01b&%L )qRaD8ݺ%"Fv#%3EY"ٓ]LSڜ]NtGGf}N)ฌ|ڥ:{RpAZI"/ fkۿѺ_;%m^>r&#H + *[w5$\gW5#zi@oj[K\a(S^ð@~rKឱįBݵ?j"z]U sWqD9/ w\qqy98hV:Nl['[,ic/5I=rmYVe!# 36!'!q r{ZR8{fA (nT<4m*i\@QUB$l26^/,u.2϶^ZL{O,.q=n\HzC"׈%:,i5lWT١͙o`)/l%`@X 8f\[I'6Avl' 'S RD$mWhyC[^d}+P]slUJ h&Y3DN ݜ#m&>TCvR&=N$W5&AmTUr>iː7xL-,bݒ7[4f$3B۰10xzi`{k˼ 3uƻz22)pC}zù ˸|mqEO8krTqe2&Jjk(0~4iDТꍂ:uU:ltVd͆ nZN09nrhPS:FۢCyԚqS?YV8^3mJ&I)`x}5FB8Tgc-Va,ŗl}fCu+.{M? )BҐ/3 8C]$oRppU;.(|Di@ՙ&HmT0]p:Bq 5 U%8>GlB&%1A>o]*5T `bX?ﮚP6g~^CZ~etoўn@@a+hnko](o(vwO)ʦhd^ȴ%qs,y7g?O x뼒)m9{u}0Y¬!7W`̘L8{C^GU9U1H(t)πmͱ"fvQq/&bЕոMViWR#`eCA#oR:P񞉥 BQZU//ЮW[g'fS/ hsdZ1f )^ A϶?LP^:94(Q0uM̓Z㭕Q<] NꏗbiX'y6T8"'b rD6 Ôk ~bU[jVy.]aY„JBREM5%4.\+?>)S(]ЈF ;)4{TN‡d5A7lz9byɃ5bG 4 !;w,_|/B'͕z#N C4|E;gA,ōICT(XM@ )+0͙&W Ez*doS9,Z.&@ &N+iLqJ@B)Ba=3qG!Vie rZ[e+TbqaZ:U]5M&8rw)fEQŃtSmi'zE,sDog#ϡ^U3b 7Dۉ d+.#j}:iPZZ a}<7tt`6|3=+TQ3~kB+Uw|ԩ͏L+^dكHj끊IA㴎P]BLU'洢J/ q:OƯ#X]//ioo%_YP,Ja1Qnj' q^VSxz} A& 7˃Agtt Ir^ t|ܹ@oHaKq+Ww6tCP /I·z&wt>Gsjkq#W<4f{;AG(@_fZޤE1Q4W0ba6LshNnVQ5_{?&T꺝 §IJ`EGHFvJ>ru|fj׶h+!zǹ^@m^O%2QnD8FBefѾ#z4\]$ų, ,sީqP.*@"y|6(Xg{]LDe) -uW>;ēSL4ԇ%E@osT3vBX'̻o-"I52g[2<_ #%υZqey.SIP2 x1! Dm0V id%^1 寱At`X[-+kK!5{Iua=XMƔN1c_jM KL;FCSR4-$`v p)G5,6k}G(6BWTr м)%OI 31Qv\ P@ RBΜW{AE^dӻwUN՞ʼnqgiQ9q ,X&7.Pr  cRD!ܙ`ޔuƃS Lc3Kʃ&d!HL1$\1]Fxw6bCAS7s} ©aV[T?p}uXkgu_ ?%tZܦ*^7j,+_xIxNk38o=StRy襐}gw3[XDm /g>] qّ'҅}9hƞWj@ ᶭ] 7j?C㾐CŦqySb[^~N}?L#o>'M)JkOFB ~'AS2" g:!ɣkD7G$8k"se'䍒jE)wdR,H=xDP%D$ZD&idKڰY~b'~Qja7TnNN;)5CF_/T岒0Md]F]" DF~˧k"` Di r󾩩,ls'oV$ddo(2ou[i^-E0@0϶2tef;@)|xrJ0O W kE7C;iMqpֻ>J=ɔ='x|jG-֐Ek@gzq}m Wѯ7gI$<˙;0 \ ڞzrXՐl+~Nr$qNh|"3..o]Q;`Uue\4Su{:OQٝZw pBq12N#%`S' gݽ3:|W5$Zi^m1.lIZMoR];^֪88SMqN庙&ɸWL:)Gi\e.8ě_'hބ`cz])U21YJe@ 5M` (V#S8ląQl^bpK3|'yj\TXl^`-V&e·VRΎ|d0I(yo Ղxde)NjJ2(Lg7$3^ӧɎs+ @xԹY_J+9?ȗSCxU9Si鴟2鈧n=,+E_*LTLֲ+(F%-&3ƶaƔ M:N9g/BN'"uT^|yXD MQ:P+1iO'ߊo^$pY껩Zܜ_V=` Pm&"u |٥ùDcWhI|{&v?,%ZM%?YPpn־8%tC)5됢mMڶi&FP=QQz}n[=rV FN]S(]SPx9mh!MtI| 4=' i2hJ5o,dV| e'*Hl(YH6HOZtgMiE!SlC?i@l9\فk,XŎpGj fKU=fpu+j11qhw (喾ni<1 :x%4:g@ #V\O!=`~R(Z&HtžZvoT7*ʄhhOJ>LZB{IIZÓ5,~U37?VD .:=)#ݏYy٣ZVMrCp@ks+@L2(2VX2@&TBglulYwݞל}v0WUt"4aΜ!)$>*EcVH{n\Q{)zYf ahu&29d3p 3S*9}rplAFp¼ *d4j<ŨFɉJjHw2 v4 [?H{+fVK}ZEffӧ!,x}XsT 5|Cj2n,c+X LMKTZ׃3mh:92X ;_!W%ךT6Mj\@jLOcH 8>eow'_ÕGbiL[HKuT.X 8:BPne!;Xn&0ҾlC‰IQ_lYe^Sd qǃ%d"u gGǼ%* <Sώ&Nj QCC}3ϧ;2 rm%zykA d([DH䨠Z)Z/,2qkشXDLН=bSw yrfH~cd939|Zr>,eRtC Lo7+?zFI=|}Z$ۑ cr*޺[2ϗ .S, ]xEXu2X=d\K<}^F1w:A;;iF ,kPH?s⌿2|r3ƍd UKɲ:IsY99jW' }9y*N>卉;c FFl>.¬/&D⻦rM9R cw`:M0T9Ȃë&(oSm;4)Ilg(FII6iw Ut>9O)E)Zp|45 'dbHLqFGIp{9T2U;\Až,E(AUՃ=29jXŝaQFz-vMw^Ԓ{%o2~]$uJG]lҨ^aZU1*jq㕘a֗-dK31ciq{R!bn)HTO̳;Z6@/$ze]՚,&أc ]8ZдrEag`IA l:мhj" c*eLPœ Tқb>,b y)^Tn9AV3M#p)Wq4GZ;%٢UHi o'ӶX];gή3딼q3 [coQ$ Fƣ^yK7}k/؈a[ěWaGK){56ɗ(cPcP2 ֐NZWFXti^ˬiHf8 &Uڠ#wuhPVUTN?`hfrGNT}nGoJG5XJlHTEӖۓڸ!!/y ~ ;gWOz/SI<"Ǖm/ƹ.p-#Tz-9L3ՌHm6.J1 s.16q6b,c_3(WUBeD~LgTy/o ^k|gdszY54SGn8b*,߹0}14.Ζ7rq9Z(vF *n#mAGĖF6_n<7Gw'CqPaޭ:f^+}8|C{K7$T Ivrv93 :iMmֵ Aj+e D"JZ|a6Zټo[mވxZ17 uP=Rs6" Wvi Wk+tM$9JMCPBwm\i8ܩ6J_4n6|(pHaT\QW9 Brj(Pqwx$ӣp/ppg2 zIf#APgA#__I-1♈+ƃM  7uS>3#Ƀ4 b4tNv [r)0+o0S B\fS:a gV 4_h>/Rvmo%tNZ 5($4.skWN $/;(玅es%aK =fҤ#{}z.S3JҤ玥催.Љ/[nT|\[f*1}eQgd|~hk/fۉ>Gi}L%.Mg}Ё:s5tTV*bǧMXO v0alLT<Eyʖǔ9wtkQs]Fa_ׄтɇo?稬x%QI['p&#:QRJ \Wfg.1()8 zhѿag' Fg~̄Z{?vFH<7g,O50$k 38N)y`2dɊi{P'f*TǛH&ʍu_\,qc/Rr$7 r'DIY&S$˃j)۠~vo$Bd|7U &Eퟘ5YX#tswi˄XNyϸc@u]ʛ-&3l4f-1^00Sr`4~"H𪣗Jw2j!& \=-vlALbsP]4|.Rp2+cߧH^^uV%ZiGDD߹x+Dev^JS [v էL2+GQj@HrDcq$9Nܿj{hrN|WCU%KwAekU n"b:[(a/wz3lnԲ𬗑3O' 0[6r 8 Rtu=T^h)2ţf ,LTSݭ<^dܖi8&G"J:9 >n0,H̴+N-7H캲U1!RQOG4 $/R%Ls]c e[I-~PW&XP'y%eUKvQ+?}2a]BXtz bn*UuP: ƻ < .cqP\hghm"ZΗGt #{LFq+o8L]*LtzDφC'6Be_o[SA bvܐPC% }D 9>:#\ʬa0;&zI0Oi t!*Xg$C%:8)bTH-6z̋@vʢGym1"Ssiħ!]o ,[܌8V,&_FM=CH *%u>E_.Rso8FΏdžVsH0|"y>< @l3lY? Vp|~"8߻a3r"+J3fQk/x<$JX~LXHhY"uTWdX6Eb>FJt͉p<熘75=u/װL TC2sA~lsuOt 7J/,R}4@$[R֐Z s0'[g 7R# <4zDw2S<\> s 8ہq$dx ֶ=F]^iiZU`=34biؤ(XGir}~Yu$16eg&c#wIKIrghĊ͖+ׄ S `?>.> 6cXhޭ6^큿,iE_$Y%,'vNitB;XԄ?@ *e&CO5`D+a'T;Yg*y>e7<].",%1%'%[__mn<%9aVUV%؞PZEhsnO`ȶ;#{gS&8ApQp?,1m8xj-wdSVg06Hxd=[ DJfd[606 cȰ,l'ZG`aXZ >ik \8*4e$O oWugpy~>"0eS!-JGV} wЌ锱T Ldg;C@- `n)aK|솕EmHsUEqDQѕ9}x[cNr5Gv# o+7K\;% O|z\*ۆ#{LeM& +B2x97ɨ݄R?mugX5-?3^õZc>F%8=NَS1{*9WWA3GW'ǡ\DC:YٮF;mdzq'm#qL5 0Kj0yȻy85_qƺ!RZZE'AGpQmf5U<>,CY;U%(as9ꔥ\D,Mk%]U<)Xu+cG96) ?Dmwn{ uuZ$Sf pyH Ɗu>'+WnDVdigT$puwbJ<# J+S$7&'teݸg#>Nr!+MM߬Ð([ ;F yy;N_`]Rl5rT`BYtjCz)_WRobf:9 -1ݯ yG{gNDMqllta6p賯wl}0G]j0`ܐ0y8*z: !/_Rs_aYn@ƀ*@h-;鿢5mƅOp\V,Q"ew ou,T.T{pʣ'H3HI}ڒ}VQ .}%նf"Ք.r1 8pnwx^{ISCAkU圵E+/(hf8>3ˡ?4&+DЛR-Wa¸YҠR2.a1Wx{ݱZĐ)5h&}xD)`Gv\| F:nΤ2ѽJyV 5^*o]͊ەf =U.qi=9eC}w-$tjJcyO`f<IuoeJ%qR9)Go8 o^gSkK*J& {7|ډfGeTA.[:9vs/?S1Y7-bM0?)@"1!@h%6:FlŽe8=Z0k'V* Cϭ2*W(8U[mP% nsX_9yH󄜶$\x)em1{ȷ맠5U0NU_:WрN(J{1Ə[fRgY)p) R xrcj,\jұ^ /p!hIyw6הk?stP{ZFA#B6['lNEt%%5Nm`vaӇvȲm9nO4u,М`Tކ>d"qwhO:︛Q|m_E\8X{G1܋L`uc+΢+$z|X0D=FdX5460mѳ>#SPPM>].Ys\G\zc=QËm`iXiE/>g{8#m2ءHeh_bZ|\$4sSpJK'[hJ35Ynj4o#(8])ɠR&`d,NO-h=N5H?T4X:jhg-/0BYR,sWYp7[y@I*t%(#٫=҅IItX4oG7a?׵j[%W9 F| c.+ Z+jt?%eH,N/BBWF@.Ԟ9ОFL$hBi!_孷4$Zuf|5op6~ځ٢`)*rN`kաXrvi%d,Z.7w{=4Lzvl^$98LC<ڨ4|ZzyaR)ڦqb.?vrknG.l1r Rb,nu9|JeCMWCq}!uzŽnij b}ɆN^]pmDɳu){*lh!_[(ZTNS>O ;Z>e+Gh-ր )ջզ¬܉LX**LL>-m7cv,g]U8m˴WBg&CkvF~W㤱(x|1XI $('5k79Ycn-JKI+79@Q$Pf[P*N-2Q'[wEf,roh2&'!5ۭsT#D { ug,7P FVMI;.IG1$.,o8QS$m?={S\=0@:X V~L8s۰q l/Hp%wDu˷ϝsUpꬽ1n2rֱxKdxlD!*w;x!Ej/9l[ؚ "aL+=d0n}Ų3>\D>z2lUцX W /%Ƈ[H+ yC.JϗΖ )Խʴȹ$ep!mrrOuxL S ڄtLI&X&& uK#*87=^gx4j>tˈ Y?ŜF€Y^DC8xt~Q(wc됂*ZAV}j" =ʁ(D?UʴiŽ@&d[P _4o'Mj<&g r8\ @^HM<.N| 2Yɾ$sv*+zP&rߎ)zSXXl/cJO595.PxZر]Bk|M#k`6)ȎVq pxE Gom}ҽ$V-)# Y74N;%m?Q="ӳD?D^fIc M*wF!&_)̈́YȭF  v-;g )\A_lr^l?$tyl,+8FmX'MkY7٠sgX95Ψr}F/!AD~Y3IњoGOij R&1h䬀ݬF+ hKZgYɤЮ͸%aWiު{CRN$Iu}>qK\T?p38m) {hz*$nIy2-G7+Aex'(RbK2crIHS:7ư~ej4źPD9r z=lQbpȼ6 5mJ\kOCiq|oSw]'`C*i-l ͨaF]-jyE"*d9[j ҅8q?`Y4d6[XњE,d#4>Ijݯ\[r&wmX]Vc fƅL+ihGʠA4s] r^?Ebnqh@u;p) "1"؝@IOk@D7QߐVGᨍغClOR/9I$y'm V #E|(o/EV$Ԧn Ꙙ>h>cс.,)U2+ZGxiϕzmq"\ix3=6lr_&!<*5y|yq .r3tX)3IDXH:%q+Ox[ <˜Kي(SOCcD F65CG&y*Y"s֘h4j. Ȱ^NzmVY.ս}٣s!-xAd.d`\/o,A=reco'_G-c4GE0 Hz|cc |Rv@mÈόPMZV5F6` 5N%yqM*yʊ:4ľKvſ떭\o4<~axN"[Btfk/SD8}/#%,USA31G"ĥӛɵ˨.A!NJcx2nS[P +P:I?ul&T ax{ H9/Ρs?2| C#+xK/S ʹ#eh+xʃ~:ka7ٌŐK:X'<,zuSCn".]@EMh[eTh7N~ ⮐E rJ*$X8(R \,,GSre0 tHklT4L R{$?|PUu,h^VӏrV^0~W7fvB_=]2kVN=SPyQ~!UzsT%񠤁ObaEѭ[mk|G_* }!Ldc^.zEK\b5ZdWdhXQhrD塲M@J]f$7Wqe7g@7 ǹϗWER$`-7ce#~jĿ{],ҍ|/5JcU耘Jil"ۍ,GXmwWzh(X TWWM3+kD 0I-^K9 a++ˈD#)4،Ovf-]Y(Ө{ov$ @]`Gբ^h@qȥ ؄m?; e,^! : e"= E \:7-D9=xVT#|5ԞUT|_Lϯs#`]T:.uX_BqDt8҃Dζ+c/4=f5xi}/ZGȿ3JŶ_|k;9Oy}͆?3$$: Rg<.X9dF^)>wE^ b@ǃ i˃U4s0KvZ{@nt+[d1"2$}zG5O"fje/`E*[ MainlKql@S;g o"*E%s88c^uރjUOZ# FߚT䎩dhgB|_Ce~gj'*%.I\uF4F{(nI`nPxL2WoWS5yQKAg,Mbof26:RD|e~Wy 5=3/v[K.q`ؒP;kHE1_V{qaPW_'pn4)^ #[!%e.'q8<Գ0\ e(lL4P x.^'WAA>@_ae b1o| _N(.CͻN2wGYRF~_AaG%oɩ1n1\B6s/eG2;!~ ɏ0ôH0/S<H[u٦ۑTp{R|&H\пIمY88.r` 2\31DOzM]Fi].#CiB7 !c3Ə&PxS[ y%'o^ w^f ݭFL2tpoV+m\8緼FKs\s@=J\V4f2za!䶨+Џ-yZL*ݎA֗J@psi<1zZ&glM<J9&y"h[Ec4ݡ+\Q0 rKVk\>>Bb8W7GF!uFdWNrzu3jݽl-uN} ;(5=W9@'3wO^hؚw b<)K۽JGRTK1+\A,g10rD1AX*I% 78ulǮz 3nT43ku Zr 7knz93ЛdoA.0,ҋK.z?ޓߌ<_oJm,AJ I1l*-0(ڭhoxy|emdawcAJqjlnf`uOۤ mqyi&gT1s;*8]Tk'k 6ȿYfWNߞ΋!)t`y/nzH$KebAv jgTXֿcw@Q3ٳg 0tcb`Z&9saKGJ[5mb臩ĭ*惍B9:em'MV%BN/sͣq|lYD%kCTl;ͬ1\F7$a_#%qT J(OkRГTP&eY41. c\6 Z3uFq6FT5r(/{]kBѷ\!j># V #H9{@[T]_맋^H ?cݒCG11'Uveޟ?$/K\ult) 9ech BM _0?Inl (a|yz'=UՀ5>6k Pj(o$>ʀ_Ї3# ϧiK z'0.b˅c +VbH 0[Bi61u'K[`^srӅ㥤f&kdǡW:zhM$;]KJ<#~_>gvV,L5ٕ.-Q0G?i,A"j]cqa a+?T%9 )96#kYw60Wk 'YqSztN'bR [s_ЄB9=! {Mqnb o\NLmv ʚTC3v3Pw |nݔ;tp{~dSu+FԀY @y{ ]=W̝K}4/eh% :@ans)Pc[ MU@)wu6(t{cűzMP4ϛ4RlBfJGh)B=TZ"#3ya) )``Z?4Ȓ ġĊ7g z|[54m>x-mgB8c_ He ?#k(mBAmYlܑ(TR*#o0K+22Y&+J,yfR讏B>zY 8̅mO޻qςcXTb8;orO\-irodSY!!ȅp#uX*q<$扆 ,lЭˤ{Cb.i•~y`JEȎ[pcBƣgY$ϗHhr,4s*E;!\Xۮ\;dQmp,`H9k:.yuJG07DM%cp%!\єz"WíTAS? K531""9ޱaJ._̻^W1I*`"M7{VoW%ocqMSUVIuJNN3LfLu2y)elg g$Wv,B$M+aStC40:!l2r甽2z9>LhKa1@ cpZ(xD~E(EP1cyVU--E>|T>1lJJqAPlXÅVΗho#D_9 pBu|tXDo'1ގ( ^*$WlB3M,IQdAf[hIUϴR:"]C1K+z1WE&X4cK4KqwX GSN!1RG2tcS?,g_.wkS4gn͔,ZY;/p XJT/@֣^h/{~gB9a \2#k &%:8a1n_E%0/rma3>ːvQQ pr2gSBɠiY {SE~e迌EwLj~'Nff^n䌢͢DJڢX#=7YizΝɸuC6x ѩQt;)no!6wx쬲ᑵ\i2"ѓ~M)y׌ԤH? fO=]쾸*kzt֊*E=-c Jn^ .|Y(C"kX8wP3HPc.a6a6ȉu&ܳuʸ[LQQChuG]N{L<Řܗ~3= >wmiefGХ%emYh1C[Q:BXA=H^%o[Jaփe' 8g;*Vbr2ꗙWx`01,@LvpjFl]( i1_|Ғ+5*9T1Hζ, AZ5E_b]"[QF6Ws73uƴ;5?:)^r8?ڨF#:E}Q'Ja҅dvpv+%+Gm@c>4G4IxZ4~lx"E:m=4B64Lj<,ZJl/ptj&knh'*cWݘȳGg}ǻk$ɐ=?XU$g uUja֨BY%A(7F f_1U[ZzK9&_ ]k{:ȡ7pOus(ǖ[aJ*mw|XN _ρ|[ΒR ^[~ۮ*duTYr4d*ely.\lǓ< fJNBSi}G:C:^Q6=?)<+QQF;ɖqw+//A߆¿P~[RT ´9pJ.Cάv_h &T zxuX ?bY$FqDM!˒ kmR8M;b$hz; S(b@rc7&+xNSEܘ: U@=MLr܂e[ߑ[%/ }l9s-}b1!;ӥ|B3(Dw̻RY:q')ej G(0357K))9m,8oЇ:;%,\׹"xv/YX‚6ώNR>`;ݺUa uu޿'$ s AkWO'21IAx}{pÆ( ?R3܁ /;4ᕶ:uuNM ^*w)Hl 4Gͺ1o<s,Hʣj+Г<2-i9}>8!%yl$gV{jucf[/2 x/"\,NxJEFuA`!Y~0n5ʕ֐L=gCo){-A.Pz/2 9##?f#2yc6lp%'8a O׋]vgL1p -Zi)[Ei$G{ؔ-tY Ra=?)՚ *{d~~'K@5{+$K3 ݘ kv/쨆{/vAf2 adCi[T}dlh؎6Pg Sq@h ^u bqp!cK jJ6( 6-##Q-rAUo7,o jjiWVMT7V/}F%, *~&=6}ϦCtcS}LQxuX`k[2t]dARf;mE%q%bX`U" |YLfG.{k74dUv~`Jo;wTȅnA|azݑWjAz1^{Bߓl%QbEcZ 㧯η)b kZӜA:IGAe)m;+VCS1e?FHTҥ),?@xl(D|tc}ا@p]5 uFaG3Jn 7N'93xDܔXU=/ W Rx-qKgLa=dyyُtrl'## (A6d警ǘP Chs kͲ 3#0{Zh߃Y@Y Ep{ aQ,# % :CP (W;$k3[oߜ;l$ !< L@TE'w|\*C~|K-~X4}g(ɂēXđmZcT \D2OBxlRu;/y ѐ@Z~&mB/m`bmٖgwPv8/9 "`^Rͻ@!MLOj]iJS74 gQy !?9O{6x+bS`3TC8(vV Gq_vadўbȃt\|CA6@Z_L I,atA/|U]U=\I+DKBBuΎ;]%fΐHx2{* It^10)_~_""mnPڸ.+byn59Ya1IA{Awqxݦ'T˿uP&y2ؚQ-hR{\;s~2bY1ƨQs]3?@" FIB1^ b7i =Wn^-1F+PzU EP(UHcj[b*{@tbI\#X&tH Phueڄ*z9FπC3PmolHZBɪ:DYdz|0ђ{)\bʁ$(J,OH8AmFgp?ifÞa~p95vY gڬ6>b)wvev ItwOd-jCZluۏu>^hݦiQ)v^_gyh/F-|J:TMgndP=-xg]ۇF jdv8-eK̕5ZkeBINyC;RŪy2(}R8ꇰHBSlIYuwI.̓y֏E8\._7d;b،L{ɜIXR4N0` ` #jG!DUsѯ͖"kJX ³0k;<̀oL:m C?iM](E";K |4GbljꏾiNrb+[d-uKR!hZ4mz?5AZkMOՔ+"'lS%6r,D݁TmSo3}ƠT6+.CꞼZ#B(8,DHsKh#5JGڔTvkSVICymx"=F@@"5̱g ZQ'U4DbhiXСwݶpCDo #+ p*J=)F@9vO7N0!=rŔ=FgТ ^ule[t!\:2 K *g!`fNݻM0.B˺; TgcFkK*@ xju7mdC)cVZbdUG;,:2}C?/M="U]K *b$*Ht -t=uvDQ{4U,,YpEqm,:$$r3H?< -ppt*i+Z鸒MW]Mc<< ${|o+:iNչĐK[ h٨mӞ -\ \E #A%Lm1e+. ŠbkaT Ա0jg, ?,! X,lyψ/^9gM8ܨml2y8Us| 슐}ItN%J. B`û< ;L׌̈cj庱XbH0 dHR2 %l"i>.Q SqXSa ֙MƶB0Lqǵ NK5` kagpp'1Ħ>F #/ MP2&l$H0{Yֵr$٘ S܊˕M˃10Hҗ6=#;ܾ9L/^/)?L'h@blaf?OӀ#O:#(0FOoOO} okTJ86לuF٠/X|ފnՒmv:GoZo{|Ď_!N$k{WhQ3-˥tukո%@Cz*1gwt?$v{K ͫ{l _K\dlkFГdFl}@ "AKH5Hѧ ~ɲR]I3g-çy8D߸$p#@xD ϸ WX*|`闁kZd"Fbt@ xql0w|nNJ*i[r=йL/wYQ;;yy*;oQT^)uܒJr 1Te'ѳ?,|INЃˊЖ=6j;µݿttW"7@yl=ɬG*]3ST*|md7ݣ9{}+.'[H}#.fU8\z*IRج#V LQ h\'cV* `fb{8nmWppl)x2 pQKVLDFeBLk `HS564xlu +ҩ>20wT,#.$hX(q>L8C05x\P{F⇵@!(+G;05κ!B9'*&Jݾ|p59VX]bFS9[InA+ke[Z2r%Y6N WVє`x;,وJf_(IU Q;(=)C"-wS6a%5BjϱCѫ _¢m׶+]8Q`s@!<3)}u͙ GX^ӇvzR ~=ʎR~/SWmjiD@Ib!7jhvJV%jK'zoWWoPlx. 3x35? VV} ޽Q{e[r[m gYO/WWֽcqhS'[UNof9  ~ZIuM2ŠѰ2Evض8?P\WCqĤ4)Qxs~)fZSEN ". wuߞoWT۳Q]@_ԭ5߮y3AB[:EG󑳡X1OV+̡h^ T<0~\u%tz/}Amp}̒zhɉ)'zycm%Kow6o `@*G5[2*+۴A)Xd/'VT}]~gpUKĠ`n ?fX%d9? ̾BXhdmL9(y&g$t?Q܀BmʜR_2XCFՈF'=x$qz)hoï۸ɕdO`l'\TXT[쿘٭V!ygx5uN1F9.ȋk (O^qFهV9KJ ji!gpyT6iYxuaV##W^3P yaVgYi@c#ǚcpZNyr1JA9rV]9^L5n YM酐wHw TA3!s2b燢d+mLoZ@о/!:+};iB!4?{Xz g`]SiWiENMu6ʳ`άL*;{KA]Hi{u 1{}`Pk)8n'M(3ҒݒsgE' {G q΋ޏ^rMʎe24nϒfScP<Smx$lBC nIAQz`A\4-WOi>Ū>(*a9\ "Ex'`g_jGeiN6jl:i0\$5r7p[YV)H|2.o 7jO,)lW4r-fpzv"pu1|7w21.93ЍiXhr^q;!j0|DVl䂹6ڂ`i+ň"QE_++¥KݎYLFs {'`wqq# zrB1wi$So[8CMWN$As\F¨;8yz_V0tQ@Yv??`O)P 'I\[H58>ⅅ[&85%"ĶFl"JV(yJw7jt A4oR(?)[#%ާz֭ 5?l tF_Auϒ'jaCm#I~ !nlE}eDy .$W k ;EWljX*ǽ7:[}n't Vm^呤鲯`u<3|i܎&6l XB:Z WA]2 1mIJ,ȯ8"! Å$KfyJ"l1\T H.ȅ_UM㠅ֶէO oR5l"~:,numROu:6J ő758?0cRde|j bΗ}N)L:% ͷM0V;ȵ]ao 0gÑ{?&Ճ"XD9Tជ q(Ҽ[;qLI9O@%C*1 3&X=hqq #Mw|oKK{zX)B0`~Qexv,[Z`Ni8!q3_՚Z T%MfO`HfYpK ppQ],|"ѬPȿ!p |&Rɜ̗]Eϲ]8.#pvY dotL'O&jpM-SG[ZcQGY@cBn'p1>Hḁ__(H/HɖS ք~r`<0⁖07kq1.>]YcEGOCŠaξ\Af}挄RF~!tk23^J@kk2jzt{b-fN@ ɫYUcϕ}◵d!! Ы@ nf'6/^!2R.0jmv 0e]8I3Kc:W{L&T֩,ml~yH)!b C?.~W0#MBUȉZZ*2!Xo?p-σԚMP>M/_$^<A9¤]`٭t_w+.ʳ`8K\`L=M.)n`>"ۀe __dV@'y id=^![m5RrazMJxUi=@ޘn>l$QO{'>W$BNk} Ji|-%D4Sf)-aG YO707t6O NcEb[97"4JFT"{⾜I$ |r}F[6esc2ְ_0*D[b"orS*C0O#d6 ls$Nuz[ma<#xzf¥ qUEA]׊f ±I< `ͭ$5ӛLZĄCn'Bf<+ȐRH Q itq0dχb+n@aeAVia͐`#qD43T]Q7leqMm =zc wO9[ gwK\3% *u3$ UpIXw n.q}e$S7<>`Ney?O0Ck/W_PC $ I}b-[e2$1 %T' ő:`$./?3ٞkSڲ)kßڈ`Vwk}s}#d`1AJ96{%#۬ZY%#1nh_$'m6Zd@@h'L>QN\GG=dZ{NBv6F@o:$Y'. TS! t綾xY["{e4c?Cъ8<Jy; ^>}3MKC8[G d2(sV"A=kY\Dߏl2b{"A-+ACx8/aF>$u@638b"ҲW5oMz]Λ{:[-/JcA+2h&^o L"K%K2%082O k3G-~Gby͉YLGĨ'A*?j7tд nʃbgB͠G1#t$v_ ,@XFLI0)³DZMQ l;A izW X` +c[c#57@K)lNJ%ǃ@[듏-~Ndds2TUFr Ո#[82O -Fl+-3GXaHtM&7 ~Q(uªߧF /o(bЯ|?qW4cc_#dBs⭿5ðz;.z֖syB1hJYClzRC&cimp'/ af*BIȍ(65:nerU. qtRސ?SFZ9!VTJNCghQb4tAۿv 9f;މHDu5h@,}N)BBZ/\9 [ִ.ph)#[7mpnPKZ[ >3DT/@E ]|YO㣌XW\-MWYI #s.0K' # JzƮ!QsBxsyYIQF|1{Hv+l姥cF:"Ț(aDCm! Hm&pH=ҩHT%\Z@&2z9Va9ϔͶZy5 %t(/4m{;kc <e!ѳ_`ē@p&PcUR`eÄNh^ TL>Պ_n0 t.@Uƍ3Z+H22">s*&)_M5=o )[{%(̓GrbbYebuveވgCENv;@/L}/Nc[Χ^5B AY;`In8~+SoT#ѝWNQ>:%ޡD q$osgu EO y5fd aV AD_%Ž( 0Tk hE+#]xߖawfEb[vq6>vW0 떟84K7@x)- `+O2D6 =)NrmM0kb_SW{E0NY>m2tj] >KZ (54~IJ:A]}Tϟs饥%}[G|x{jca!sL56ݫf'l"SZYÔׯ8T%:A=ƁRQKN[gjZXduɔB0-׬>(>őˇ/E1/½MG2j<9s*pUt-u m VCev)]G@ Pw8{}zNMž~K58Ab && #d[1z *p`LOWZ]ݏ(P ׂiH}jsAB;6WZ~w7M:i&٩uŋJ`]oH] U|\ 'H@29u=GJ=ʧp X2̘[/l2K|P{`t/-fhJl f5(}@_O;ۓřE)5ZvD.66BYNg3i{ D?6WYtfn2F2O5D[n~{ pqX0M y-g7=r#̠#C'r}DFD{=cP?bMsk-:vl&5i&إH~=Ah][g ?Wf{i^ږ+Y q}nKxXD/yGŦLwi[ODhW$zfBwsS?. 1\QD>RX dtuOM]qr I2WaHekǰlYr"=^k+#纂E*TTcg9| s3OGXo K4(JA8Tޗ&g\H1UԴ>jjgZ)r&dDMwx.[tmT{0%1: AH&MIA~L`5՜N1uw0HR/Org CS K AWrf:E~޳ ]+^9.}@uu\G=m7O\m#93  [GxQd~X[2HG}}Y^b c5e+zjv'9<(=naN Tdx\M0-aFn=p*\Q"XT|\\]%C 7$ʈ.WB-t^RaҿB&3 IMkiHlSW?_6 :[5Çmx#mV$7J1_6j޻vbiSMy1'jy#a-e}W$]P[wu-`bVQ ۿCSЗo8phŸ #9C{E=]ʭ vU"/W"5hP,e/\0<})*mDoщm&th?\U7}uK bS"G\H8GHzX zV|qKe`^JOaz k e[T:xgpָ9m!DQPb0d`umRՠ*B 7>"N?p+> 3j5UaIC!"[Ldw.N7s׬ v:U<=oSh2u jXh9r?1z%R H@)uH+ ȇE s"첍ŚC\-_Z ts,J,[h1|^.uN NﳓW<.57 ,ʰ_L43uvt 1RX`rmH*}H֐>,xAЇ@Kg- B'RfH,0D={"?D֖g Q8? )b{pZlxJ!NrjF^#E7?tmryWuı~ce@xl&ʚ6dje-u)+^yEt/[tܱVceOϗp@UJe%+ %=P2ɤY! nG)>?"7`׉c;چHrLe!Ҫ,4}înc~^~D^"NdfǍ`,7m4:g+[h9>gvt{ 4.yDu Ui |n[5=k{\A?1oo`Rs0ʱj:/zOl VrIRmj:>~xo X}ט-bX}uLA5X5v|lJmgʈ;ѐOڽGjЛ zqih̫Mr8@^BIX1t c]O`U@ x1l/n(߀+˘5熀Che(/r/t,MR % H;CSBĉު>&\LjNvB8w4[ Ǽ(^HPJ}* ZJJV=lgWq]%}Dt.zwMzT|Ft[]<>=_ŸQPiZ0[Ӟئmn[4;M"?0,LtX6Q-P5;ZRK R1hۮƅ4&8 *`$,sIJP1~oҏxP;v2gLjZ#`fBcJn}PL%1"}F"NOS(AضcJa  ^5| |ߟB:Vh,I,be(E=¥CT*2!B[Ek-}{2w?D%R0Aܸk(Y_ l3ݼf dΊHF 4kl^UL1_ _n=V$v9QZ5]k"ȘEl]CқlJ s70'Є,o BgbH>RAv87 @wT q/a[u>䪈m}?@r05-{7wb+(iʸ߀Ⱦi\ %OXcq# [ŇXM_BM}[]z|'(؎A$e,`TG3SN` inGM ֭$*<݋t<:lc/x8o7UV-"Y}jZ/FF"BlGqiکX s^h[a{mL%f?wj81t1wj3u ;ug*ceAJҕ9Gӆ5M"u:M?YɁS^l$V_ñc1FYFD%%31Gm ݲT.bXC6IwF5 ڽO:>M&Jcǝ33/A5Ēq'1:Rcjl 6rxZkV5*d;#@Pi^|98}TJ(G"OnVpK6dX/Za"PF?5ΩM# ~@ސx V+{q:hHټ5#RߵC@tS^5=vHY3?@NwAAR, ]Z ;NIBti7rh' p^˝o%(AO7w+1#:Ҋ}|@)KC35= tV[z(EwsfL-K'j=J+!cQɂ+>ڮf$%L<|]N).̒;9e&(OD*ͰA+O=_͞=S' )4YzW61D>>y+-W[gu]+vP;4tRO * vrRmd$&.=Vߦ˘ۿ[˙`P7>5fx m!9bvNՀ[b¸Zb<Е K腅t[F8[J^0 h w\ϋVm#MYA ҅afT)3o;u1ek1aUV19쎄a\kRih3#<ԄTrmbmѰq} Z:~UHh8󁼍B 'Rҗ#`ws7q+-A29dۚ5]CuJDC6Wh_}ku<gYs*%MKWy*gqe(6h˦% Z뷢\?3 ,OR Xc_haf3n ' ]p"L;UoY)i@v/~Y 才כ{1U;HcRjk^/ZTzMqр[l᯳[ӊ,|C2>d?&pTGn`>(à&̥,l47U֦8%JH4N7CVU tK}/+H9U}4p$U"m8KL d5~0X|9!⅞-,ac^K)Q"U3Xus Cڋj6@E^`JSӠڅӖ;bql/UbTdV*opL~e \`2@$`ؼ;4Q\w>AVz°pncU}7CHXkJg*sK~#"rAl` />>I{C5?Q#$=xM'\+Xc(WRV56wZZCvqnZd|^[fE*߶bEބBŇ;(=[_,dc̫+{3k (P' ~s tm#-Vm{5~c5Ȥ~sG>FKtcB}'[Cۃe9]Lurl}0maMĢӦpc5MK_Qi[/> !C tS8 k.\*^֩ppDIu.a}lgƄ(5y#\~ Bnˊڙk3l~;6[zqV1`%*L1j4lXw{j܊)c4OE+:S @U+>&CA)iξ  ˺#2z~Lo{t,h밽%Rmޏ+h"k"T 0X=8އ p~ڼR(wA"Qg=>zxR{Ez8w]T=$jA; r=]jp3۸~t&vdN5ujR\ 3!jqZxT2|81fSs\\< Q3Yb4C*!w D`0Za绿?Mц=po#< X|2=C0yzTʹ ;:њ%dgE.l L@  !.]X@>}&'3s1coaZ >Bq}9+KXξ>ozM0`3fX&Jxc-_9G\增֥HS~Oo)]NejZ/N;H!;^7ob.0>Zi#TƠqs:]c.4|l4k1@r9"WBA(S' A.@Q3*$X85J_=eci6]e 2TIiz4 E v ;QFBi;'ޡ4fd@w9G:Z<^zQnEUQk - |kKc"I$rCVZ^$R)D*K֙$Q:VGhQz"N17y C'UCoA;¹ j(QaA!<)o(aeWzh)#%Z$9HZ/T)Wi}Zeoo* Zjg5.bhwW>pCVUrS&|O~zwC_ك3ڡJ*ZI=Cѻ@VM'=˙w" װA u/MÒA1 Ar c#^E$ş\8۬;`y#Bw %/6.!Td'7jS3{uRZb;=W΢,!%Sg[AN퓅z~3Ij à1/[lw9pN@?G} THoN @Bg!q< Lʼ06>Xne.-?CN>w :|9GjA8nu"T5$s,ٜ< j} h MyDb6RV5MHl#=j13rg]T˚NN+E;CZf! 4Ndg!u3 fiOU O'%,Mc܉RTv/"p2n2*8hEead nL\Ǎ X zX;?@}pLܥj0pwح%k[Nk9YnMCḋ> gU$CJLFuڄ.gbaf7<ԧ ≇2"OhnPF|^ݠu'5Ϊ?Eh'iX9tPRO_iߐ: >įAX ncWc+KUFEqlcy0Wu yrO~ѾO_rjs$iI d=)-\d *#xI=1ky--/JΙA]CQ*pJNvsqG0X&ڂ8䃩a9^`FKrCЬLit RG*wЏÑsv%]HM@cSlEs8^א3r}0=,<.4{r. Hs=tkh&f2")mʷ$>Ucˊf+%@QV/+ߛn"] u zIʁyXN)g݌!DiA/ȵKѣ4PDbYC.bN0q׎*c3{9,AL.NO+FfDрAYV {Wc8='W!hAA 9*5Fş s;Ȉ~c'L{8g>p#]-B~ZU-4څ{V3֗$Ӕ\zB# ;D,b> )c,{kW[){lSN HbR~7[n/MjFyyeJ􋋒/EֳTL[q3?( U\ q1r} G y/i\$|׍@ )WLq*QSVdmVzV?eYSM֗#g9GYxi,bP xN'z!L*&(-|( q`\iROmJm:^E-~r)Vm2Զ1<  gn͡hĎyo)р ?Q m9.kphq\E'0_ 1S~3=s:J]];GrDZdMmgB'Cɪ|Zc2 '+HGOo^pJ&MtDr@+,n߳j+~pqIkA !ݭ*x=u©-)DJ@>.T^))ˎuiy,D"NvH5GuEմ:x: L2+̽D@䭯ˠ;g%z*3v#/=E{FH(3`"MF>"hj@WڊC OXHet [J;/SaňCQ;O=I"37~HwkՖ{@ s[@p])LVs vOu sqǷ6d-KyxagnaNx$];wV*4xwc'(iw:0.uv萴L p|օ9akSȽ HCE~;|8 84:MΘFb@$"=x=@?9j% ۤ9`P#,Cg$2xG]=d#iؘUvFk>++l7*!@v k-=bkfTT2 6𹈺O)qQJJYB|4Q};$KWL~̯Dyw}LmGX%>gѫnԽ\>Ҏ΋<_0"*6[h S_ѲeB(jb+o|$qzҥyR5hAmOg1.~?.PEB a%Iz鲫ݕ^`fH2I *1",h>'ٮ3O17@t a3gk\-Ǵ6[n3J 2U!&Ib ebHIAYh#2G, 0 uB 1OFl5Lv"]CA @m!܈ WqLϋSᆖ3)%89oW5(pBoy7vDvBXFVVze.8|Wd}H8uNj5teF+ybHJ};u4˄00KPy6OQ*IBAJ IZ=;٪Ix)R_P϶/q/M]_oʂ`{GGe(}xr@]#]Pߌ쳧H'T R_u1 Ta1'>,g GѴIfŠ]ylr`S[\-i*tr=COhL=YH C^&FNаffrY2^")=QV2.}'zvTf KV"{+ndPΠ;x+@Yw]Ld^F̎O4_XC@Ҏq=COll8H A6:9y`X'• зvnazcjDř+(ᆏr4iX ;Ӛ)e \r--:b} F)>1A#%|~ċ]"ťD#yޢXZޱ.Mmyƣ]@1ޡhqƵzr_dz/?:gY m?A4w~/0dz)J(P,`9$RmQ`9aU4q3fcꜫeؽZFǎR³A44=ua>JH %cJd.r jo2a$(d!5&*9g)޶fފ[ 3ăoI){f΍6?Xo1"Q]Yp!J=N$܅]rK4ɨI3Gpt)ZP_-y!K~ӄ#AhFceqjFx:8uO:䥰E)#޶'\DYT6m"+ :p.hB"Z>Z_0Lq-zϊso":{Ǯ_k~͵4x/1LOwg;0 8 nb{Y{F0z`L~V߸v>z-Lմq_6!l252u]†:D{g[[<:ZxHR1gm6q"R*/0ǁ&Dt-d:8M-aPBwij51kYcQ;~零8 gkgڴ6RH%u+~`5F4)إl"/=.@ޒN%zJ[wzw[͎LÜhgn1~/BvϔԟI(Vig<y18noAId _}$x]W҃89Y|{; kKZx`$RGR`(>n<"U %R|3uaC܀YKd͆G'r 7V+3n!rT>[Ja< p3JU P@Z(f vɥ`w29t2TȝA90@Xf4\Bj}Tp|'jF8M/]b) J>̿q'*%aF ^bmp‡-LC ~4U!f a)?qplm@#ݖRcV u(m,50Zc1*Y/-NE!ǝ;0suN`O I2BM!Phk :RR,mf^hqJc2Z% ؋mT|\+ |˹AW|ͭ΀/сoo+`ULY7Q3;|K'hxY(p:F*/&4Y)uȕjNt3yhq}Z,j<%#~s[w,YiPvdܞ]9SP҂e#b1{>|U|7 A>u.Th) ǜm}цPR* #?,V*g79`, 1_`7}+3McR=k80_fOJ0dtC&4s*Z֥9dCpVzh=׼N<"11w_BvԸCAakݱ)?oCzlE0z{"s5BW{Juy+Y_GٷNN,嘔} tbI]yQ*ǬСnRCDӡKx tu0m^K;)Ef ձ&xT!_Vsž=4Oa4x?#0 Ǹ1Kg!!.V ЄblR '$39Sf┞f MFE1x:_Txuԛk ƆtD UqH`eZ榬胧]}xG3^Wntb =ժE‘+an4jٖhwI'+ct~LiɺɥU{eNˇy1wp9QPWl#?{X*u B}E9Fb:Ҫ80 -Lyo-Bܤgdž "m*7Aw2%ic*|zˌ+Yv=@^2dْlUq,KX;p[t*YR(:%^Ygײ4 1I #5䗙C$Cd4㩑[?^$i V6t?$} mS~-k٭R *f<Np֥=Y>0 YZsurvey/data/election.rda0000644000176200001440000027370414576431435015043 0ustar liggesusers7zXZi"6!X[])TW"nRʟ$l9 |]vK3B+,j /,EDhoxQN2ƿ^ ЍW3ާMRnĶ;8&UV)fˠz!!fբP),0SDI -|hZqLޒVVZ2.Ö A J+{ѵ8e V LV Wkc5] Tg/8U·dnOLcK6Tom;Ӧaa9yK#fb^{_Kk~x_5zLr藘hؑ:Σ}N fX"WZbZƻ"gn=Z6Z̒^Yԋ0=|2~'-c,53Y8iyŠ>~?֨#(8#k;~lrA2g8ڥ.4"yw1uݕ y-axM"5Yo߆䷱^ B\U^"\ p /k@Qw`;s d\Lbp+on%(3G~ڐ!jz0Ng*-e)2P *&5f#(}Rț } mnSs)1'Hέd>439PP|X+dqn:xZir14(d_7É̕#'Î:jXPt#MiTk_}WvXu*9k<ᦪ'P˚lvՓжd݃Yz uќv8fL)w뮿AFuX{.Cj+,+(FSmB&<b/2F;D րk|kBB=Y ss_'JIpZ6' nw;tRDn-WlLxx`C6` #;Ke)iQKԦUjȜjs6(AF,՞m]Ƚ!#aM.Q 0“ͯJS@8h7ݒl{A4Iqf]Hy!JZ˒h̀G=J"g \W[#OawoZ9Ҧ.REUE<aú)OqR{Ҡ &|&ߐ!{r3y`מnvGBX/棙S92F U=)  )@1==Wl=-QQI&߾iR';J,.#dKAJ0F'U$QZE=Հ{)^>)#*&Fd{e%k~j1Nk$B,VuX#Ř7Nh>O5gYL|U)CD7bLl+kB(|`X5G9-5nV'A.@qmT_x"kQiPu18!;E5?S]OtI[nR̪09<X{6 |:sv -({?{ Nr];L{ 6خ㬟ʮD˚3 4M!qM[Ѿ]z'alͫg!3H] ]W@e"(x#d8w;FBdacpcTLEyV0cKD|ϝ`sOHaB5d6*$UxymT"O9MD&8wݒQwBD4Ӳou^i(=҅]@{|`sl)Ո(HP̀|5}uhc&@Ig0P0G6qZ(oęǎMс^C?l*$OI XzGAfF^/:Js=5*@g><^#L9 JU6?g4S%oH{*ȕnϪaϓnҚ{l+B~Y Gېl " r6 σB?1>K\ROę04W/S;1/įb n/+Qi lt>8Oܮvhpq$q.sm)Ti30 h+p]̣\}E68$QyRWa^xAaRAq0F`S{/pi& Re"+h LrAs",) YECVH'lvaF>g "teѷhWҖ)Sz1H4|68 ?zD9 CЗO=;SmML͗+03|XNɥt>peȸ'WzG8mŃWbE4Qk ?bx |)p[_13W d{/:\ޝ,0>vG+Z3Z1oն'J#olqOZ+g9 `T=f0DTnPeX'a "1V :a0WLiB~h~\Z.GjnTAABWΒOQO3:U:"|~6&_ IUΗg$/%e0Ŭ̵kTZtN6Ǜ9ƪ!%76XU-~n>rϭ*CvT08%1.>`< ?k[Na?.ŀIYhVnߠ̅*vsTUa!B r^ɽ;MӪlZhҲ)Ү6kB"tGCeIL"a|!H)Dˢq+) oYgtU3aCI*h`)J,;{ҡDt K(*3t3Π88j|!qFΨyMm@pGeBLk9'*}2[C-;}FKz0oV@=0-|2D< aS$av?iT, 5,%bJQ>r|oo̭RY[KOܦqF?A}Lc]͓91!~}&7~Kc+7ѲFRȼ3PCPՉA`m]>Dr\h MqwY:1%7+.^d'>aXU /xe SMXxq ۯ[T"5Hɧ cYҫR>M} haZ`>џʪI1i_ԧI:_hv| D$ǃwםV?\!"Sl[.X~b^j,X- y/*p 'Eᄨ)b<"a|=@J1KQ؀\>acD@5Pv`S 5eGB7M/mhG)5 ѤSIt6fRG;EM$ؖ,7m`gˮwq!c{S';`©FkE NI/z>asJք}wpWT$ ?)Nj!xjiZ=(Փ9,F-3o^ƨ-Esjs#K`Z :\;<o{'r!09܀hCq Bdk~_(uV >zd~1^0䡇2KXJ`HJƗ, fŖF#RQܳ6ߕחRʪApCEkpE<7_ꝶ <̹iu"83jeLa8I8PPnL?ׂ[‹DL6&nh6crP)L2HcZ븓iA~ nAMT=ci 2NR- 0)W 4f"SXTXC>sUMT%"$X0l{J 77Q R}nj8$zj-TaD&;;ST+uSE\1{l<?-Br9kBFV223IQiU)6Jh%q+ E8* I˼Y⳼rGkxx X6-zlh 6d6&!ZO l8~;uGSCPqTJю&yN  'V Fz-EJi"=/J1ťhmcjVeZ:7zoUã(Ư,b9@R%~k~TؑW2_hKH40 ϱ?<=PsMâJ79MfJ[IdcDT oBDrU8u M/̗sodX=X m'7OaN)n ăgTہkZHO(O8]ƀ@3yq| _ ƒ^7g&}:i=jyl{ m=[d7 FOaD,8<|vEQ!`M% :[hUB7La|,TUYAiՙur|RDZJU-;϶+meims5ʼndh}Kc}YihAD:+vv!Y ϻ!^0fzv~Z,V#DDs񡊕j;y(, _8Z;).0¾ ո=emh?^ET+A@Ϩփ`R⩝Q(ɽJ{R`xh+1P⟹}Ȁ/|x9uZKUe3Ua :DcE?,񋸰dfZ>x)J'tt0Ģ'SWilyGCB`aP;}R='1,EFz2|2[ V38F!2vgw]ʴkGWAzy*_tR%[Kozg !`,Vg6,~bC{nS#HS'.ʴݖX3[BhV.BSͭ qI|B6dx"=\*yxUJ5דP%W`"C̮aGNMgYʃh]Օ]D*ARBj s`Mz3KUt&|8yL^=0}9ri,LBd~:=r/|S/ ӕ0UL͖tZ6tr we"JڣE]Oӆm(o1%t" qdRq :to{\5ݩ;K!뇓V)hr2(YOj/le x@ B  -KyEYB(C:SK+tc(u׏>ѯ5sUAsw<_gL{G{Md[qS˸<#pv.:_ҫeW`μJM`V@PE:])G"̩K* )TXW+=IGt }J%}7Xʉl@_aVw[?8Ia!30AriA4vx(C2%.s-2iDa i &:[eA@k|=G0Rq*sdݺk>*DdMcʻ*x_KMNM11|KVjW}?oQsI&<ƭԈ2vfx,V2{'U A#/eC8`ss7E} 9!r_NTNܭY\.NRlpIu T}^]4WcHsAws1T2ܻWm9IԼ% F6X ՓCeO_ 8.@w]O1bOp87"nѫ4pW=50aKbEE_Hly{Eʲ\1IfDctzفm"p0NEHI!YK`#V] s:".VPʔpaG9wqb7|DAԙ4:]M 6'z 뤁HeK #[[+>%[J3n(U}_I/#RW4 9UK"=s/kaʾ/xeFo-ۍTgن37ߤNSR|%9,amkSI~8p򫍁zAeX^Ѿ&7ɼ:%9gYe+5R>wy!(H!tcijQ JK )Rd_PRJE1?Vˀ83q1 Y9yuAdcP ְQXipǸGkː%<,1 BIO?;au$jM!3iCQG^jt 1qPwH$t2?JTs;:WAS(9+vo)I@i2*# wpJ {n ,$cs )u)v?^SYM&ළi+F6Z<@WW[~)Mh$l4-F_SiWbZln䏲X2RϜX=7A~0' l様6iz9 <+ކ&ъcS:J9 ,o<-:Ea :3.zUiC>֪ 1J!؅dI2{f֖͠#߁51W>y4"[ O3i~G^ vx]5 oo7r։Jg kb/yi1JbSY뿭[=Rgfà|?̢$>ui25PMoĻ7}X|Fǔ řVW`=;/{G.5#K7k$X`R#ȳ=TWU`]pi }u |*oƴYd>ϾcɍiMc  gj]tޠE.+(*^X5&)Ϳe@2{/F6Af HqsS"wߙgv9y'wҙS6,Rߛys tM2+9)89evNGC"\'k#@Xʗ( 2\ȉr"ikӜ&+eEu/a\_rNgTÀ:9BwM?+4Yi8]a`.rHus9~mEFCqN&c) B)$ɻ#eOOY cmb&%^6" D+m)ߵk7ezpAn>Mys{ FLgwߘI3jM }=4f- ]lpP(i&Pj}20ӟ{Ǧ}Yh46 X2$,l% Uyg**l]q " 6Z9-9q2l{aO8pLLppQ"rה m,1'>{,Z$15[26%}U32 Xrb6ԋfHbkOZVmǃ#/ڲՉ#+ـPbtDn5V*+d{E#|VWVh$'i׈~3v2]@TdJ]"WPev03`gW|Uq#ߓA`ˣf]`@V4~êa g]_/,Y/1ɜ謹)@q&8>Oi=v6bh]øFzMPQe>X魷@FnMޚmŐՖ/oz: ʚO DeWNTO=H[n 4)$X7KfԚ3/Y2a/WoBM8lBw(),9xs8@ZwW]h'镌=llYӈ^Hnr-SAF S7ad(c[I~v ĭf)͓]/1]OVBcm2AcDWpbYV~7w>ª,-p4;OQk &-}G4MWj,}}"nWl=rR3t`^S7g|Ϲ`/w+՞LP+ ڑU0[x݁%A*o@w +*[pauP/ɏ5#a%%ۧ3ir+DٳPz<lФoƓa-wh.l(0>p%i=o$.XR du0s9㼗m^Τn߿]؆?8"zLI0IIWMdpx)xvNv!"zb_0 䃕iϤ+dўB},`8ȥz~hn&hwYC7:rͥNCFggvK !6cNVd Z葎i9$?`WO-ɵQ-ۿR^`b4wEi?@ՐZRWVR7s no.!Wh|9.|hBq#2|,{QIz5u0 |[֒ϑFQSsD_yĥB}O,,AxR epo+M  VTo b y5au-QR(-5!6 /)+֮EȬThDxHzٷ/v橾pӳÃSJ"ClRmfCfiifEcqҗFhgv߲elO(JM?(v w?uÀ{U|.b Y>/bA񼁐ۨ9C{)Uv2p(T?hMW8oAa>r¶"E;LHTt!$ʶݯN,:sdΈR^#*RzۍcΫʔ0{V鑕@ӓ'  8kE3X,sPxIGMl Sjd6qeZST}O<k]9w;!7>|-KW:Z)7 Dj(j̛I ZFJx u|n\`BwНuGg!f[EiU!Cxi ¦t `ɠUYסIT*S̲3|"# C!I]y'eHV4uvr2!O2NN/b4.UOFew;#ay0NmқIӅ`d9~cԷ%&U恿"q" [2eFBpwtLLPUubvB{[&g>[P4$.иnr*JD]%+1b UoaKBWG<(7#Et`nbTiqU@j^ɴa0K]=ʺDp1w({Sd{* gF>︥e"UW$~ud(db|"h| 56 8knTIy֓Љ ' 8^/wjnfC%{HJe;ch.na@&!"xg%f>-Vx($q7{b ^37Ȍw`:]*LUii{%3_;9CI/%Ez(XVmPW5$߁YYƢ2fZ>k+=vV 63gm6/8_Ljn< 7ʮ]ʋ{A{ er^܅3i`Buw.7#s~g0i1l8!ln"SfϊPQ"p^)6zgţZ D-1B&Sr75; 9!#?^mRSi(wȬn63H|2$MB@r3ʼn)oW) )⿕}fKMJ7HBԉ[ާ)%lyR("f&4 2xFS)0"1-5Z51Cр{|j3aQ .q0Γ0n(3Qe!#Q}8@0^B>6#yl$% :)Av#JxDTZ2 S_:[|n&QЇy 8Շ,LAgX0IRKdAgGju wfyA7~uq:gs~ Be`_2ڶ4293 /2$vP db' F #L]WN*>Bp)G(eVX/˚7~FI"2fטNO+LՂt|!H1WYkr:#I ;Z`g,nzi!\'dqV :R(OE7~گIEI6sh+p ; gS4IQ٦ld{r B)9bճ7j3 eZM;U޽SFF_BR-yPA?B^J,f˼X$D$I-{!%FG/kB5/cB>dc=0;cYyؕ'f[Ajf!_[s[,v%SE HH`7!9Fh^Wmqu."* /0s*BUg>Ƒ?Q]8|T2d0K6&͞Gk Y^cj"{u1Ķ֋{ΥD6sO %8X71\r-9L o)Ǚo6oԍrÆ˦ZT`>%$UF#myi], 7)1Ay6dA/ n$edcfGfv,Y٠1AѠE{Ԝ)'ܮ:.1TP.d#'@1;WtkLJICkj6{ב6w.# aN=I95w^1SfZe שpp1d 7yHCs[ =Tl:.?~q<^HqM# =xK;##&. `5L%*('l3|S>i9'Dmקv ->If|V HHпymgEpk|-ԿU˚B8*8E-lU>9Ví#//J ͦoJte?W\n?ΒfS%KӘT:2oTc{k/O̡K8A{nƞАa r͟m "6itW^ŏ_c"ӛebq FxP6ܰӁl%K!ީӛ;Mt~pÏf6zK fwSe%dԔ!jnj-=iX\Yj?J$59ua~HAKhDIIⓗw0J;cl~, SpI4SawQY -"MWM,Q+ 7?K2um4czrWVO_fyc$ܪhcbE/'VfGfLK3\1w?lЧ$S^ϴU. cz'7gޯnt9-&tT0ׁ=f`W -`6'oԘbyfB~Gp v.?z郏sV@s zjq.w$hcRK>Q08mlG,5A9!UP03D=_m_8 3`0P8O9y`k^͔š;M^abDI!Fts'N}=HigZoe4mrU%JWD48&j+ gh9+|Ѳ.tKqv)eU@]_~pk9ί'jſMvBoo&$Aμ>ĕL\4r}z*w "LIΨMX_{ib 2??b\QC,TCa1?w.mykV@\TEDeyʲ;w6ȐU\z@ UckK]gk,Rf!i%x7ƿIG0;Bu]n&$P="oZ*5'pT@RhY> nϣ_d<:d 5eD<'[G7|9\ co{Zv]7=Д t)"<~ 'm8+a-? ܍ڟ)Czn<H4(íwX# 2.455z F$.]t{Dà'[-*$Cy b(价$`US`O?ҽEqpnjyG@?8<cD-'$o-h`ܴPK-BTUm烗68!ŊeqZw:U%=>42̏$$%ץi s9܌E>` ZbrƛCxFs~101[`㾢^Bb{pG,Eۢ@QL˱C3@Bվߐ65kn/\ܪ1?IdVI"%)X]#jvN[їh>65wq qV\ghsUbo]0$lRQh7 |%.gG2BqY^za/x -N|\Ll<̫>mʢ(P 3=Mnzh?39Si, F :yqFP͌IN#jy < LyGK v?MrKQZv=}A\F&uAhJVѨ;Sm,(]}H\(a#ikv2ߡj$ǢR[&orq-$DK7PJDxkei92w?l5x\\fJ?HWLuyZ=3)/"fj=ЉAmdʝGoxD 1+W$vB/ GA|:m A0t=ZN_z;$m4 oQ^NKd/KWj^1dZ?y6U '~Q i"0, p̖Af25#h`UTF!H;Jέb4 Ѭ{fo߈r'a(}*pәuB;+K?ڜ70H bfl(΀c}GL\:j mo4nB.3 lZ?QQٝ`U9˦-k`ÎO\ѱ:5 ClAYIX=kQو %V96LthwIR;v0Dx^*RKJ M-/a;b88}r jwz5aY;z >w3Oy(ӹ.žC/^e %<ܱ-(_D,u H=j1?OHE6$,JŨ̻]l=kb*{-E Pi~/݌W) Qϧ z\ǔ[2&KR-ތگk TpRm-9GP ؊'2=5 O ˞1 9 X2n=zqxB{ä7`BxȆgv7#wǖǢ-()Aoy:V$hu#V g_5)yI;?dF`;M.~%vn}XTm&݆v8TlgryqLݏ)ݡ,(=z%mQR^1=?ւLfhTka,Z/8G;B, хAaa5pyQF! [Hu1:i@Ny<}0S] `4qb+r݂ۅ_aKf'YB/n3wJH^x]Yo/:' ZC>iB+43v*PRmɨKTRξ{of~<7hb]#UG"7xM^ .ь0Hͽ&P1w|rY|3/pKRnVҨVE$8408בr PRӄ9Gh,M΢Q)>)Sm0\򪱭QpSsDˋ´cmZ&N]-B ϡCEXEwae.% aϣgsv">8POz.֤V\K TAӣ}%avrux5XB9ɸ+f ͰǶNLԙ|_ul 貭)k#<֮//- den,!jEMSҵӞSKGM+wB EaGr{+>"}@6vIFlQuש3q-UP,VU%D}awhޯ/$?:[fz-Nwt~;B@(Y _{]"4dwHY/#ϵk>Q-я,@r}]9e?imvH{gz$ro\]J |>7!A,ccmq=~,%H9ٮ!9Ԫz⬔%IM}$喞s!#9ÉG_bUfÅv-}8U6b7,+[nW_7~Q@o2a^ڹ-,[%#p1)*2D6^~X 47%j:}3vcw0d@lj]oCa;`$ '5X*`98&k:7bRB*»Gw(;RMp@.,kBMze'@gX[q'k^Ы\J|m;ۯ azk?Y9y{`P /ݷ!Gλ䳗I$)=bi.#*8$c@jpშZ"[uc=FR}gOӉ7~)b^Yw, Ͼ* [ v8[ʨ';k.ϊ~tW3,'m,䌇oCdpp x/LrvQ04&cěV0H=Ö$jI&7TXl%YB;\d<1 $,|'03:ӚKJ^nGLx87bզl=xY)^sh+% \}ąA/P8 t.uze߁!oɴL|ώ@~f*Uc~f[1ihgӢ7#ӯ+K{W:t&kCAZ7Ve6H&~ !ǥ4v-Y>}Df?ɩ*8hPE4m/go1F۩AnBX'P 2772Ơ+1:y qw G BteDSle6c1iPKcW6CMN絡ca5?FpFE*FS|.SO9T9@+?+pj }eز鞪ϺTw\ , ֿkH1}3{qL-;|8e]&KP jā]qs0i {heM=dB/&f"#A oݷͮ`0|nWjAkoqSJ'"&vASì?))нԪ rT>T(m]ӱ,K]GSW?"SY8-$V G B.ۻ#m>.lwax ƨ !4 B< ]OM09 ]:/e^ ⋏8c/JԞOW; 'v.6}g}DSFк*頋R" J'0#Y4#8,)s]uٗJ).i ]XH'Bf Q#TbzdGlxMkT@>!3xi!֯nW pVX4A^7+ vP9`yo/MH&'|8NM4 \f̄tDRC4imBe6\v.P2kY0zYt `1̺-P9}M$ Dþ[a<SLRSi\}T]@K9餆-6Iɹc;qlAxMBWb k8ҝ#)-YgAqaEoN5HlZyU JJD- ωۥ%em FKota/ŭDr+ uv$m_H}H3`cD,qRVVE+xg5Tp п<:{ fs WqB{0q|MPv9HI5 3^XŚt_UItPmE!Dseu2*<G=Nc[:*Y5o&\DҟBcd[RZ&Atn}^aٷV8xZoBr= 9EtOS's Ҁ޻VBS]{#_!#NFxSHq30ۅ/\&,5 Y&t^*?^59r҃\qrGVƒe[Òycf:qt>;6V3xDZD 1!NTQ诃m< VF-qWi=6$iP0А]bGArh3lS*ic>kQ(4xT!|0:<[xI*ՍC6 T!2CWܞhw 3-Ħw&X^1'|<6[m1dž*Hd.u&J8J[mx|3VWc"BtFCfAG'^*fݥx_B[eØò04פ7lV[Ʉ9dWL`6eIz3@&ЀN]O\t ;*Λ.81^-9Ttγ)Lέωm&|K|ZA1oюJwӂt0y-S o'<fn=f ;.>\vw62u7ZkTtfѤ\[<5W`q 3wVDl%v/ydg~ӡ1.2mRsqCaJ@QS+#2J<5vx~T/jEHZP1 xGxz˰s]*{TN7Xd*Y䭔űAj*&R*>65ç"g, dR0غ,XBlXJM+!^9 WkƔRfZي?zy1S10cY]\H- ͊ܪ1\Wt)$`yi4y^G&CRMAhIc}ֆ"CVR۟*`_/׈!jri>NTxLF w 4Gu Y - 21~Wp^KcK{*fWٶ?Ӯ &Bej=Pv B!Dg dd6YSu—=&Fϊ@otNxm#3Vxw/ )iXH Te zytԬͬ+ 9Z{,}z!*@\hZ{uPK8_!APW5 {4;l˵T[UBXDYK[w\hM.V~W8^C<;[ o!KedW>"zꪮ.Pt{{puS[l?9Ü٣GƱxp3dr z 7<.gfu+o%|Kң:-A:n׼W z.եiQ F'B֡2YL[W2}U;L\hk$Tr#?{+=Tp+yC+eG bh'yOrafe#Dye+'?B@4z^KN*m25Z߸C{:`9KI>k&RK/yeÌ:>P;RDԥ?Dܧy" Yw]R\ ӟi9?͓Veq|6C2׼an7 yZH9"K$m^S8"}\LRgI/*DKVP~*uݯ(ZC./sd39~+? pK;ű=?[}a4fcw_%!w|E W'PRmh|*{DD!%3V iž?] 讑 yϟ :ECi#6Hw5]MNJ)}P/b PhFRBx3FDĻ T᝗Trc[ },wHLx~?HjwYLRøFkAȄ#z4M Nt nB@m#HђHW@=^ I2gFHU- fOdvh]1gơ%CuQxpFp+U_-O.Ct F /O? wY;nG e(A$LAW O.eȫ D5qowb#>&hZSk"9%y%raR8)w/_}; n坭.Uz`<}Uf%k0 !؋.(`Cٻjr.}!mu?NAC3xUthZwE-Dc4*DLXWY1@bǾp0}3 uiRׯ`i2˾Lu'A(CM$)a?SQ[@{d'W~FmkW18W%%>}N/KI,_ib+:BӸa%Yl3Y^;MoWl)0bϫVŹp./S|88$"xUrp)ldTs˄o/;\zWpG@ $E) xO'Ϗl+#"y2{Xmdߜ9HbYm{1J3S釟WA&O'؁7Stj=յ$*pP9#tdUr ]9W W$WI@IY8V 8HP/|*\LBrӶʰa5%gqg}tt#R)gS.@1u^*H瘒Eq [FIV\V++P%2@$˒bD*`2j߬)/eu*}X3YS )29yc tkIi;IZmT|p~ 쩄IetS4>\\ sKO]%E9Q4n__@D'\ГZ쯃K:Q^ ` ůj gP`n;;0zv-.əZk%>"A(GO0b ([!G0p'Z֫7P<5^^v:R^qŦEN!j(\J*{A?6<0rid//X1*ޜ{uWYsgH [H@)іB n"vR^kMcNl1 JceXh.UVB[{`,T꫿ 98K-E&b7Q00B=<-`ج.<1ɾMZ c= C|~#,)זrs&~tKVWbB ,Y7v4̎JFLY`Z9nR__[uB]p P鱟p_B SUlN0.? .'={o4[6`k͖ϊծb`*etfbMNXO+YZJ9 8} *b_O *(J Jۍ*_Gz:$4d {#W}t]%]cnQuE5`nTr;=g-2e0},Tԙ/S|EYVZ2ڰ{J6 OY)o4VQZH-7xpȾohn9r%A.nQ+Xn#\4O0ݯ^!4+ ꣆/2lV,Z97XDQI<0;,V`T.n[%Dt}kI7d\ b)ei:p,0+FoCtµwT:G6Q _@ , ԋ?Y #.Gl}R5f[Gή}p6vʩD$jI8؍ J6e<B1d!l7X[lV L_Y6OZ-%sG0;"X9+?<8~i@H nv2շ3g3``F(y48=V>SnzΔQVG³qLr@i3N M+|=+5AD//)H9H؁Ogc֏Ξ= iG$RF/2 }iL-:{0k}6Hg[fzUՓ:G@}DqX]RZq`\>-=w &Q6AݢF)ǚ]Exhv a*~Z7jvc|6SoM.}ë4fAV1\t\q $˝?&ˈ 9'lP44f:ז}HtiB0mL=4Pgkа2ua$=$ְ͊eaL+8RUEFldPnx QUet;(<\ܗ;dK3IE0CD?3R0dۻȿXq؈swǜ<4 ܧ 4hY;ĩWe*搯2hn5zk=7"%:|rՅhlLl<8DnZ1Ť,x:U11MSHWh]w* _ Kњ H/@Bbjbc=sQrPβL7qekRm56wjuJ  ?IuS&=>U2 (BmpP?sN6u(6{ŕ͒~ɾwd ~itD w^C</zr]C=B?r Msv 4_eڳ7a)<v&99z7\Z3Sw "mnĻ.AzcܿlPa:rݠ_mv")UօJ3oeMݼx)tO5ih(.~0Rΰ\OϾK5s%N|߭w~ΖE^>DuXc4 D+ Δ""߈&S+QJsa$~J/0ux@䶵+Nc$vxYr`z8xk{eyxpųix6LH*9*>*q 6ܱ+GI9PC!,CRq ㎏tx]f*e68 eCoSb l>oϷS8tU-^@Ø N(%ѡ \Qn-Lv].o)!FڨltYUC?V?<<{=9}q3ڊpIYݴ<,5dO(Ro#"0Q 2I <\xjŷˤ$?.'h݌FzZ kAeaXԱF7QFg>! #}wdn\[V7wde2iEEvmz6啵Yiw1_=$j ӈOtiTkydB^$Ҝ0i^#T̟'p{3]9WtR֜O4KgWe>dH+X~\tQ<5y ѠhEQd^nQ*M`?g$r:?9<| Vn¸+kE:lG4Wz۶X]l)[" 1xIgsv3*mzʄzu+yP*q*=e4ѶQwyԄQU4u#FFe-yEu@]}9B)UEhw[Drb߁ZdsfIg_i!|9bfg#@=m=? #/Œ^~ jN -0Q J7~c<]1s<]dzu) OB8@- ή.-{@nʿݙ )Mx=Z*?![YͲǡmầZ%g59hMwާ@9+NΈMO ֧^ NI (a$ Bzy1&;-GYOd3U*mNΛNjrYהe 7fBBh4M,En*&MmlN]`H}YdPLP>f$ ƛ4c. ZBd/\L/l3n&*&#pc|vNG{-R6l6|m{^| ެs l:f6gplN%N122U$\ҍ 8FIQ I9Qի)ڥ?=A 3gx1X'GAaƓd0=DA\4//"<PzV{Ȩgg 7`p[?F3hG9< M͉Tz9dt̺lMCʧ'/'k)7^(fͼj[Jƫ/R2"-L|+F<gp|,F _F7Θ|xJM'ǫJ0S XW8)cqmνC "Wղx/CGJsh!F0)q V{rq< A1O坅bO_`4W9:Skװn OEtç{aHԴK.b1"p\#BvئzM*E"e~7yJ]<n1*NrpϩСiXTNZxiKŪhXK~oQ浕|%ӋTH^UN& I^}d~[>ҾZ ~ME܏%U-hiaI5V/6ːwL  s='1`cDgbmH[(dVa`[@!Z0s0R'$Su#C*9lGnreW0V|:b{b3f%L{`jrnnUGDp:TTC}a,uF k$r]Nj+*h^5N^ki`1qU6Ka9?}p_)|_5C].(򩀚 1kb6nX2۞cng2瀏{[&M#h:/WܰuwI{yK351ta8TS@,9 B[k[E!Q㈾^Ť+[qpkܠf04̇v !FhOrlۡR1#Q}xNDeBǡ33/Tg{ =Q9+H]{ k-yƍ.dXX/DV9 3X}Y "Xg7ߔAԮ3?X 9A@DB-@z_ fR8 `Ud!PLHzzD:9f!nȴ]Ųf[[5@o),+l1k&?c;J`U*b\*s=Ԭ_j 3z*c+XԞ %Dɩڻ:ħ= lrIYOPsxv@1]=UI, wI)'(:ΖO$O~E4MUJ&fLhG}wehRvJN_;qdܓs|&h3X0|0 b@`yZCv-1yioU s4`ҬP_|uy9:Q/~Rc>F~ҷv`n~"b$9=\2C c-\LQ0]D%Y%~iv4<*1<ymLr& S˗閅llrf+B5)y,PHe'pR_k /&EQ-Pw7_]Un9 *0zm?05E:䇠0c~)@{MVqm(wj-p9P hLR} g(-5v.=\OŅVwWQT30yD$:$2%97M0kf"ѷc\YUwAǂKoAq? B "#9efOrhOje8q4s3"{ ϔLҋ!\>.PM?L҆ @? W bM,rؗcF}/A.91'QZrсS0 SϺ[Ro{*s8LW<8 9AL-Z qr!5T: 9C*dSM!o.$j["RA f{ /4n(QK-zB̩P} S͡ Als;ͧ*ʊl}*L_'(-/,v4U}t*btb0!Xpc =K1\@5 `6D5 c@բseoN5:+R dyj'es D#+TSB^Fu@F^S^]QͣiN_iS@4 }64')9 pٝYhἅ? ?`ƼmFBF.vПQYYiV:>.:1T(T0Iv'L},HHpw8}mNWA!q,kG҆z wk<`^-iuc9Oν&u&Mp7rd2;ν톬GV6X;pi<8,uDJ]eۋ#!u螂lcMce eG2JIУ>r9Ohvh]a?|o2C m>F ڲQSa+'P5=3ˆI,MΠU)h9:uRf8sQ&Hշmoh%v}>2pU)]&],iy&7 Z^IG byFfׇf7B)}˯B{UX*V9ɖrՂ8ScDŚH;ejL6uQ-_M$rƦupNiY.S j!l;e*/sֱr`53u#?;"Y^_[ټ(ӆL=YMH}U;<1lXއ\3wM rnG2Bނ/OE J..>6 {X?D)8B&]'D[$Kef#1ܛysmʺMm"E8X.ki>ԱfPĩ۹dZYDjbdNG \]3twu)3߮еqx ̎fҮGĝ1cY41#==Wp'ղ+LodI.Lp ]7I:Ӕ7w%v"!^6v37]X'knTCϼUf04&e2J>p陥y$z=W竢Q\Y6P?HyBSqc2eFx8L7 L+׋KɖIeDk8:L1Ԍh-pP$#;I7 66v?j}0KI|ρxYd%ށ_q GʶMƆ{!1BMQm( Pak< YZa8vvqP^,trȦiy!չWzɮ6h| %l&Ta%$}A?]sݤ.Ecz t6^;GX5\067X!ٍ% eׅq Tװa@ <|$gԅGSOi薇S𣒜 zk?U81t=[viarj͊;WiimjYZ Ic ZbCdP1 +:J&"3OID2V*;ӧ|į S6|Rkrњ ـтptėmh>5º "#.%NV.&g;6G„&O@MV]$g#EGfJ_Ev`R~D8I8L3e=>WA.yfLaR@ A%g(kᙲŢ#i5B-*ωYλҒq:u3 H*{zQ`?2\P e9>c6˯vSyU-ty˹(-[ï*5@۵}$ǚOb[ϐZ52MSa$Yy[^+eg,m"ӿ>.@O3 `8J4W}IwU" s YMC"Zۡsd{zT{EALKȝSA;B. =վfvHT@|*׃)EiK>:.֛诋^PX>װ|ѯ-o!' \aB1ʦ;mHOpj>6PDJxmM?u\I| @ϣ64&ãS rT̡``4(s' Ht`clm"*ufq ,+II%}.ΥyBG™ UOS[zE5:;.Í؈˝An av"aLUFA)P%M!O{_ަx;ipjdWd_EH^"w[5'mP*oŝt(( /!aP![0A{E o'rBe?ޙt#x5|^`RFW-"׶T|i&n ֥wclP*79l jP*bl>u7*$fjC8e u0lrn a9 = LLQ9{7^/=]j:QfA(ӕIbm &fjVm3S8mld'I1@5x-7{XsҴ [65>`/`LkvŘW$@)zT`v Vgl$̜CܱuX,z$z(< #vf(ragU:m\இ02A$(%) z %JSL=~v+E=6_y(IMއG+[V Kg3yWNqz=zobs 5;ύ7i\nBҺ,qGhË=.qԭ"+Z[=+$؁wc&bVG<=JxO]bbB:@-^}x-qlNy~.L专(z;s u_Uc `Bw ^^L G@" x^ ЕT@f`Ohΐ]fBJșvdNa󠓞(b|BEQ?&?3O8UV.qu4J(}ȯP 6vZfqS\ 5azy {2 6i9齹7gZ hSh&̞Po$r0D'<ʭZ#2BcB5va2T(,5~w*@_Ojk8"̵R_²v^u~ J~!ډ7‡;4S&ug@j IKS/:-vF-Fp >]v(jnsTaZ))KCݻ?Z Jx)L3i[ zHQ _mylw*A?a)D"Ւ4UnM}owzadaoFOSUlkIݝ:K&p k?P7^߲N󁪦@?m`!@m:)nj NGYeNes]^>ԑoa}gon"&(Vؠ'Ηu }l~M'nǑ63܆uKdo' "(?;Ġ8/V_LO$QB#F0iW'ݐ*itG_H1B2.˛ڼ xfu{t,@ɳw#[/^n@ e!}QbY!1O_6. \PGۤ:^(88x-%L{9mn'a)9=4̓Dx* M-FfZse̬A ~Q*Pi985JR dDI9h+|PE{TsǕX45_P~!-a6;+V^,ٔY+B~ETĬ#0BYo ;UqM˭, E`D_7tSa}S:4!-L3Eon ΁ʫlS2C5|^)r?/59f,l$gNV66KtC-61z _5)=N}$%ۤГf%"9gD}eZҥ5p0d-eLdlK:Bxt=8Zj,w%G!-qp?y/:t0Ȃ,tŀD)d,, e AԌ_n Kb)Pay;oG&,sSrv>ve8BhuzXe8ޖyd_'~-LֈA4̗1AYI>5*N ^i;ڵom+,gٕyEACh{h(f@cOh+mMUџwLm$D6b< oF3fW(D]ɲbMGu%Ndݞy1ӬGW?yKS }>sJRh#m!NrN/,"nĄ ocґU{hTv(˽1664d Zigb;#WMB'),OLP$ϹpGpqU\>a \GDSDNV<'7D}lG^#\@Y_ ~6+(lhg6H WR4ҩ`*2N㫿{S-?GuS<˽Llܰ*öŭ_ v]< N6M{֕X!;nٵ7fWYS0.0¿~hB$gb BܕU:c<H>] V.%qt\kgՆNg! iy"`2]iמ`#VWӌZ2 GA+lw\pQWԩ Ӌr@l0fo!k$fKrwigG-#U?1"cPћ16De+eƖ1cjsp9Ô3XazΨskY1;יE%MobfbV}Sy *qO6!ɣXye1h&IK#ob:4$$Xz^}~3*{#8Ų(<=:jހx-aS`f`]hϊmx~7hbK%j{s.]JŰdۇ*>LPoת=-8hvLBY$^tEmi-Kp|jE C0s/œ8xȄ\:뺺"H vڣ2lۅ!'%-﹛ p[\ϧ\]OQk:5( goPaq<eojWz%v 6zƚd3f".#D| 9.^b6xlѣ9)>HɡPWihE) 7 Ǡ<.?yȡ~=&puz9@cp]OlJ% QprsA14j#̡a -9L*r'ħH[:tCݮFᨸcd}崝Q\DC|E4eiU)VM^i ?[S0 7]{+]:wQ}^a q>9F6ҹ ^>>IdD>*;o4@k=)O=ٸ1WӼ v]ehn𮟾Ȧs GԤ@OοmC:Dhk6g\S-"hNǘԂ[\Iy^('MvU4hM֕?5)$1`gI=&~@-f.f>\4H?Z=NAVr"N]v t>BqK{kӃޞ:vVMXHA헌V<9#|6J')yL^Ėk˧٘y1g7!jq2H-3j:`lېRvr Em~z\V]qVhcUؓ`F#+s^VQ| dwjJ` GHY`藌mkuM{y1^qݭ5 䅟/\,#Ճܦ‚-| ێv:u"*dgo*});XtM`1O s+,Fp?t\\#r=4ЋɳHvHs]ehLd|587k"4ỏalAnn2dzzes7CUW Ào_KAAQHA-u=YDjzlZ/%{~E=e4+NN87*|ysG_7Jg1M8Q5Z5:2*_RU%EeUx:r i(dB\wPbfrZt!(/^gc?-s] ln-Y4^_4pNRԗ1&\|_}.Y22bA=/E_4kA=nh wI~,/@ KrM1ŜC\lо4HSBC)"u, SDQtWfbl7{/<5(r-׬ÎD tx1tT^àkGuzm`ӭ'z207>k#zczE86@,nB:C ;տ.*1+wpWsUvk{Or"xkh 47[-sdrѦ9aʤFhLհ 8 H x<@%f44ߦ_<6c%Hb#+xڒyi1!RW<-3b&l=m n;s]@sn *˚#ʔgI!fdtyPؠ랧χwHÏ2^A(/Y\Oϸ}o[ C1ɤ0.NW#5+(Âk-!IZ:8hKvop%GK?&[-O3xaKOUFYgMZEC5@Mpq!>>DOg _\$*73x/&ⵂ;blwjEk0 R;F)zA+, _EGrˁJyLp4=WY>'ZaKng3LWvJ#`x~oc͈}|"!`p?2|8r~p @[p՟x1P*p#0bS\{>Bדlk pwS2i/ged Fc?ÈL=ha4|~SF'!N0*ZlJ2\^{zPXJc6k.»Oył!HIsnK9@e;G*|A*9O`~;tsA]P*Cܘz`8aC"%;]ah ku9@LnF;ctI:qn)ADv1k&K\eNxI&ݢO7;qxu`(EK,+Z.ho5̺?dF[G̭+u{oKPɷu0q{? N9 2+'^LKX }Z]q&#uJQ$'g,.SI*7ۚw撳눻8OHziwWI7P`{Ex̐W!3P^i$BcP(uw@K<<.pT!Y'V$v['.k*hX] 0h8XP՜s&JXEg٧')So)R+V$wӺcVAyEɉjML*N17}usQjnr]t>w*ٲ F3d> yxnoMnGɓ^w"Lz;G\ ѽTې/Y&G*^6nxu! ^5|XԱ9&U0! sb)/m M1%2EQ5^*b?/2 "?wapUˤ)7HH:cI@ŰGzR#h">7/Hσg 9F#A&?[^@`>EnSLanF7SPA0ғ{ťI-v^E\&/aR]vx,Ss 8+6IBCU9|?qF%'+)i 'tF{h3(hX&sF}E'-yKd>8~ϥeɞLhH u!&TA,e!`AS>|NVIOlOc"㼚xɤi]k1-m=Za}F*hrS8yXyaZlF/V4>gݧSzyy`];:4l/ÅJbN ISk+oPE\ŝ(gz9/UWhUXVjbi/_eRݣRDZ_Rõi44.{.cl+WAr5F \$v$׶zԵ؞f`u`eCq; Y܄@9q@!!w"ߦ45g>΋Rk\0)Q䜴% s جQDf.- КYH%>Ab]7_|:]bI/kƷC~6)/w"bc'խy-x׫ yb6T0zED=ɟ͵Ph$(&q b&[wx|3)7cZZ7 E@ Λ"|5y%2q\nѢCxJJTQH=|ЁF@\a R<$qX_8p Dx}&vtrL4srL۪tHg)c5{"]UoXP#XJ1qSE  =' 6c ~*ۛ46$6yUzA(73N1ql D; үQ8Ap'Ӗ])S~O#ł8~yyd &11q$0ؼdRS~P)k59ڴgWRC=.u%G 9-7N4ӘqҜRF7 gk]BS~UR̒c|_*sI`M-LuC`Kƫyi VB(Vޭ>0Mܖf(}=$ހMyIc*p}#r$kEa̞zλ0=VFڒ9&cuGMVc'q/>SA`?MViHu1y>;$J/~vB_X~(x[aP/KFT^].<&XaV-M d {OP΄/N*P+;*sQdp4-ne MWُ AQw;Ϡ00`FԡQZ_wq]ˢ8)=pb@.9~G?yR+|!q΂^޵ -e%{~]P#>7؟H\#X* _ J_ ܩK4[3XbH=1;bia^8aV=Q a.'ȅmw;11FnQaqjBT6fYz o-%tɓw`[⊨ODpJƼɛCqJ's PI8L9T#oӷ#/k?(!Dyħ;oql}pNAM2k-򷟱5kv,N%<9^ oמYCD_6lpͱޢإVU:e̖|fD~!6gVpкȬ Vlt{B8*4Hm~4.gNCט* bP昳r hfF "D W7֨!P_ꮍ{X< ɱyiKqpid' fv>̦'TɦNDu(}.A<%6:ym\QڿILɭ0pN8I0S F/ݬ։e? HihkS.x] t Áxy~6CfҾBڗ\}Utl"Q=KhMӷtqQA{X.yFw$;]N}k_Ig@zjޢq|/M061<Hvn\5_єn7KF |)}[mx_Jk l 2<*2BIVG.ψ%XQqbsbGQ.谛XOL.loPku(h*0ћ9B ZB{"%{wqL#Ɓ `1[ra l)qtiW=N(\,G~y!G龿QSm*!aTP =3am{7}!m_5xb.c_&$#gga̚wsmcӽbV(A?exQK/,.˶{!,T9fP|(̇&\UyC(]#v3ykHɂlkz؟ŝ 5wTNTg]]N^b4Ww{r׸78FҰ=>8ܡCs,80ȍ|w:!Cz2EirX8X"qM:pӤugUvQqIb8 m_0 Ԑrw轨N|Y~͘xWi|~"7\E(Ǯ;5yCB~ȏ`E)6Šա;xX^O0၀ \oZF 9 /du6nȒ8?EllVށ[.&+'I9{.APLvIrJBE)>%hnūE4wO (hCC558-G[ >Ka̱eWKJrjF+[bòIKUom~bF1ZھH n|2CcD垢Ja |؁ t\6Ӵ_,{皘@2ꠈ|Y3՜|?\G'f%ILqZg2<+7qPT"I_ͽbu'@% CBRC|LXC}>KL.O >eoHMH?UG? eWFF0xUT-c i_hw&Zwm 4.g@X6C׉Ç۰gv":kv;J5h]|UP`qb02:Tsd2oDhHċd-61x6XcPe)JH[ˑ0 <_KQ ,Y~c:IWIDG#% ,El( \rڻROKhϼ4|I/]^: nuZ|* MLrʏyCaD$ Qq OlM]Ȍ[cl01|θ[[= Q?YbKxiY-r3մ3R0X0K6ϊg{s0e$5].Ele. Ʒm/[{Tiӕ#)VH}yqOBi'jU$v|p徜-2>A^1ӌr@U8 dt $;<:ͪ>8q\,6ezMS zC/2?\QvyyӠ-ĬJZq+HVIOC; |f܈VS68JVdzwS0A (w=΋~ =\g4U\vi*M P ]e@:4Ws\`ZNԆXBWn~jN^dRo;E%U4H3c:Rx)'HG`6pOIv{Pk u iqE`=n~$IPeYJ\ d󢻝ĽoPl-}FZ#aeͧMZoρGfޔ_Mi!詺`.Qr}0:]/CW$~EbLC>;#|E㣴MRJ6%Mʂmy&rdťVDd% U1F~־?@֛֥**ltk: Z8VaBZ1R Ѐ]_S2`x|x`iæPI5,͊4s$I[˹ބnQGj4^U &1q!`y 7!{ER ? dqVOѴ*xC-fm]O.v+)w"4+ȴZ]vr ⓺N8ɂKtI-PNeAGؑY|&M|^[ L/=gv\u׉.S&>}a.d;`0 hИ<<]%|MmVh"YvI,Ý}6*6#D2چL^ %?JScb%f-ȤxAf/M8- +p0-5櫬c.W eSBhGFA`9cHDV[@'R yU|Ak0$|k:KxkXY.=52S#ED\bOж}DŁWILI`|_WA:= ux<ȨD *ggQ41ECt=XyՆ*1>>;ADX4N.%Z&nu4Rd_ɯcÉøM\MAP.p5qvq J[}PD=Ӻ9ƕ "ɕH@6eWv`L2(RTM}Ŷpv>m'Y{)guN3`XdH^J`mwAiA>]y #OfOBFPy}XezTvTOpM/ `@x?h-I~E,/缵)0k!8>A-òpZ3t^WamȘ5'@HxYժ24Ry6vNԕ9ə `ϏVC5zS5 zG%H`>J\' ''~&x}Yĵ!䓐@`kh@օuL,ʽ?ajOT v̄8Q'x%Ev8Ikg*a żIS !OiËE{AX 2?;\͹֔)1&÷w5bWa``'v'06=#Vc20#ek࡛HM^>1v sa2I{?Pa'^|ogcd!M*XvA L<~EkUWEpA}֊)r &l4 RYÍddXs"8\)y?ܼw7sŃ>MZ !\pmC7% `?VWa7(ӉFd,y+?Q"W HV'K_dUL="zwOxZ$)a}@0XS©-.-7G̷j&AUqm]ĭk yTYvKqvyZ7oU\ҩxe?ׇHлuSP^\/Íd=*Z>Zpz4e%Ή.Ód+><q!~AYտ;8O(#BS [ ĕ \x_>5>~7ҥ~a҉ [GmfljxzAP\c_t䌠ںҹO:2"ox=\`nn=дg,<;Y%"uGoFL]U:5W$0 x-P { zU`L42y\pdwYCdZFYf&dzSΏDo_%3=br3-XU@'/ªFz?I=ymёr;Z`hZz=ɞT32/,L=vF]0K0=O T%|o6kۤA.ΠWD<d:ȔK03҃H3-+";q v;Z3?-/N-soAQ .:`;0ۙѱ@ o(z1e=1Aa CH^fFrՈ‡ZkARf]:kԭ|5RcNf6aPm͗$g6כ9~\Au;=6.<Rtz|-7м—y芇h9}_ HI>$rF T$5Cd. x"Bm,uB<: !#?jI36{A4=`"@9<8~4]N H{<:QvSDtR^!ij2 HY缒t^=}`G'_89?cIsgQc eY0>G9o%z*15xud2c/X7 K^_.9vQ쑈D j9- Ӫ^}*o; O7!.q>?HgpJ'Q`|Bj'U B !`*Zhs>MⱢ0FC'YY9&;, ];p:7UBcA^C^ |t=f*wnٛf)*`\p o9X~`m)-mȰ,b Q#CduR,(\4wz52Pgv*Iz亲',9?H֝W#+-Eav+L"ScIg#dEmKIIrQ7k+fOj| >&Z\snS gi;/kmG͊mI/1C!H -;nkCcJl(cJ'AN}q,cf#KkSUf$b:jՖx͆NO 8(Rt |H65mZ8gDJ Z(WeQk#o9gJΔm7|Vq1 4Y YD(Er> 9*- DhH\H2#O#M쯸߇QGνQW=JϑmBbz4ء5GLBf|qIJxᧀZz76 JWq z c ظg.c1~,UM}1e+ImCZ5OEk=N-nmX GVԙ>$he2&I}ߞ{g~rzDxb `X0M! 踥3B;K[m%*QWd"W5aߢhpG^q$5W߱m;eLE.Ry9dת:Rdrml_=Jn ^YA.)xu 9xoRrsp xѯ+ O2Z/vB\Mw;?׏<*C.QF!?+?V̹q+>AH6<)uP%M㦲+ZZѶ+#t)ҥ; sE٭2 'P惕zzT E8yj﷬nB/u4sg>x 5-':tҬڜWNkB(*WE;Vv$k7uqe/6 [ޓĿߙV2tD.Ld.37a8il-M97{o;r;ӭid+Z`u$AoZPDS1reZSset]hEWgI >? 7wO3Z.\gk* [iū] S5љEV`Y|",0sc;&QR!LUe2VX6WԞV%Sچ7(26OqK+5>͛_L:zet'=S| &0Z(ҧL 123Tss$'.b/X^JhG˝'SSCχu׿!RTfTz?rEwq'Lq|E6!'Qc[غ!x(T㇁1о4eWUzE2b+A!bi*DԒQ=U# $PRNְ: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Ժ+pe305C">0 YZsurvey/data/salamander.rda0000644000176200001440000000157314576431436015342 0ustar liggesusersBZh91AY&SYzt /G@@@8J"GlmA=@ da4dhhd0 4b2dH3Jx4 G =CM #C!E$Kv`cxnb G#`PPW+!B!B!B!B!B!BL'/t;5QGfA*T@*BB&ڲ/} ]Ffffd$I$J(4\ܹr˔ @EQEP4QEQ@ QEP%EQE I$H0I$I*6x \cBIm)-/*/iP$HH, 8eIp SM4 8ni(D:(@BA$#wX`XzWͫT#r^e|ȜŤ St0'oskn1;Y6m?H Nsurvey/data/yrbs.rda0000644000176200001440000005357014576431436014216 0ustar liggesusers7zXZi"6!XW9])TW"nRʟ$l9 |]ᵽհ^\~nr %{=nMBQBKd< !nK`/ie)۲s}Ŗ8㑳56R0y~9Fܭ.% @uP&ȯ4j| e^[**K{#5MG0lg9L{ek싖\TDtDǂZǵD:]p^J=7|mqa] Adk󽿱`ձY{{7\?{tjy&%lW+uW (_"tt_dikXJţINB0pu#9z^z{rvz.MYqhzv4W7sK,qy82nҮ>Mj Y-r VԲ LϜF!xӍ^Vk6މջB m"hgC.4 3p5 ,!8! P#vWG9aZgNn*W4[ZI "G O0 =(JȖXι*4&:#<\K7lvsy (S^!4$t ~ٌA Mj:a\ 6ɔB !5'ȸX9 V;b}`cOj-煬 h7 ?F6x<.+73Ǣ;OcP4%oڦf8G%mg|LCҀE2OQ=,pӫ^ni T@% 2pQ]*`tD#N 8#ʾ#:@k6)Gky+Fc z.eXX$KIchF\:2fT+sN p n,Y.xTȉV =-" *')JKyq==K2|L %cL~$釃w)Q!urPܴIUo _BSYe@РyګoI2GdKxb=_C- "ATծMjFN{ENGِҢ1I'+-&uf螎eSMEp?! #ʟҜT߶`2Ń-žj**IƆ|?z!'<#e0= ')o۲\ehJ9~0:N$z̆qЂ[^+3[,m"N"XG[6'gM8 ܻsʗUBSG fhK#"룒id^3.+>7VfL!EѺQ9PIЛl72Pȸ͕al=bLޚ.u3>,~Go"\AF$Y)ױ[> Tg.őv3_HOarNUibd ^W,=_;HwY z/;+ ^ b$asWRK@ؤ-E4U"s)- SDSUޘMZ QA0 _W%.~fFmUi5(T4+!n H4zmȦ6F(1\2OSRq#UAٿϫl? H\ Dt{QG~-j!Y2k qIR޸!{f:m.7F\!*B3F:⛃cXA,ݫM`\( jn%@jd,d{yok7Nu4@V֎gr@pք:`f-BCf]vT"|8~Y[ mĩJ'XO8Wv6_|7S/T =~ lg-#(os+RYy^`T{Ӥv*'?A wDH+3r,M CcF8排O}CoeoxmNA.5;Bw~VXGJkA0!fh*I:\”<;2iq0n( .62L ,-} ă_ǞͣKO6J^j*;"ݔLU h8+2Rq tҵvAnUI`BE!Ae稖Jyfg<3 :ص+3LD;xRl mc,RFr\gN yDiu+3)X?75#a15h?.h%8#4 F?c>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"# knk2(JZE rX[m)VYyAaǐ>gh\Ut%$Ύc%3oRv5` >)#L>י[̿za1Z jnj Vj/:լf8и31- ֶ㰃r>FH6#EZwIbR1^s5WΙɂYҪ KіH M6bmc| >U.|!ScNuWF7酀.iE ZGF 3{Wq=CeQ. U~~ߦ1NنB 'hݮLk{~cux Lyx:_jcEAryJ+kQh*s,Ӟq)Nop5S$ۈ]F3^Pi gǂsa'ŚC4Ch3p>+-,899U"P\^(Ь6TUU9W?p509coMN)A`K4! JI@[~?zN:a4?E=IR?q*Nz'lȟ>VaJ]jo*nwo7NB.ȷw(YܮgO>x.8~B,3DH,o-dNUx3\T߉y =.ee]7<'\SroQj+yM[-X\u!#nͅ-[ z\Ƭ_hi fgf 2<A~Q o}PPtV5^o58\gꤐښjUv-k {uj0PlOZAkREc2 2SR S0ͿȑFn/u '{T]\Mǵ/lVM'OĨLS =Jq;GhV޴]:r$"$}.uwXV l)vL_ka;hhr^-pTM({Ag4$|0rofN]jb38z1t=SpQD.3Ep`x}賸?/kOܬ g&r]'LQWEУeӧr_oNxkV(lncbzai-zo.0ljHUC/4^b+x@S"dRXR AVdS@3*w:x1C.vX= $ "~^ف( $]F4rg@.A^X&kj[|-`̰ :6YW &5԰(L.Kl4jZD^Fl{5Jhauӑ*G*@hǠ-H_a0ӏٵ^ƚom5Ϻ@ kQ=uN~'yu grᥥVZΓkJd;nK' g=rTHXwnxk s 4.lwOA./yh7r\Km"Ķ+iv À4D*VZ7b![$i/Ca0: T{,\էl6Q5u`̵a`e*6k#ЁzU/p9<Л<7 )0uKʪ'ÞQ%4P֞oFt6WƹH]awH59ˑ<{#tV p X,AΉ62$bܳߎK/"\Z6݌y>D@N2>_Ѡ!G{G!,Lc5/)bONyⵠ~ڲՄw۸ mhMđHLѲlT6yRL_F\Apc6[yU{͐ ~%oZ5#z,Rz#./}5H$5s 1{&t-IK#5*ePs㙨KTWf-D93Vf*~ b1-G/p-'}$HLӳX r ֿQi#8Y8Qd{贿d,(R'T^eq<6FqiQ )@B;tQ*\iw̓eWD$vWoY#8REl;d1Ž0Hf+ƻfB.B\IME2VY&Qf" &ڮs(eI=vvpwd̆-Fy-P褔2:`]wWϒvJ@C ۺMTscwd_'#cl{pHO c!F9AjCj*a=NIW MwϦ8XOKmV<= jLqd%f-0 @8*قf.[faM8lCeÃK\0?'f9(|<9i|X,CrY»t7ȇIt[>Qvo@>)ZVeº^4YA<,w:q.ϳ4Ѧ\'΁2j ڡ#'25h'fуD7 Mh}BzR"dٜj&Zu*̔z{v$,Y{!0t#IjF%G ==!S?޾1re NA!j Sxrs@&̑/3Ze7 EtItՖD|Di6>o(l ǀ|d2]HIFyqjoZMo\ >ċv3̤$%a}B)@ [ݔNX,.ʚJv~3fV/>I7yV&$Vx >ިԍ%5fɹK$z3#p~*Q6uoxsY7B _-4kN;eXN^ *~T]@naPmb mLN^`RZ.9Y]AT7|qZq$Mڶ6P|{i^L/N μvC\uzn)MXL\s)5:om@M=hXVwv2֩ \o7ڏIoR= #uff.1;Q W@ F_TN1BBAtahġf n{kY&e 1 pJ'(, MQ b6M5ҟBvZ %dE]=QzX#Kn){)o2Cvlg5F nd^E^$;(AD!VcQ#MK ~BLmb&vrQ:*ڌ%3D &clP9%Q͘~ZN[OD`۝)!`!kƢ'g,1X+PbmL&'@*S\Ic97ȣY VX>4L]qzM zK+0b!júf Ќ"L;vt7)+(]PhrXLG|c3X~O }ԝemȨnMC# akU_sn/mZdHO"uSc.bY|+}pfα[9 !rRY Hx"x][zucq{Eelm:BJ ݤ ? Ia27J}|xA3P޺8Djl(z@ӓ(z*]U+`JIH1&ZwGK<1Kw1Y.uCRj (4Yvzɫg i_{ X5GԠz%hrfZG?cPyP X Ӯn;-=gNз  u+99. z@Sn\U-D:ז(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>O W/8-K7eC2SSBR8˼oJ5];S(>%j8efl7ŋf܋yrNvY @*Z\qfWiiO9f#g/'Εsnt4׮6$ވ3R4{uBE aA㸠r9D?ol\?9Z>`)\NU,9kt)DC 4f8mߺ.VbJhU|WpEDIe.&};))-Ġ9Rg坋SG"LT5 \͋f&7[>р|TybT4GnK<jǭ2%7z9w6I"`m:tAuLkJ[OU u&N' H˄Y${=] \X=J"xbT9?J@E%"'ԔVچۃX i'&J{GARKixE| TVJY@:[b-ss' jUNo,7Ւ2wΊx!BVeW nPGpΖ7t1QG eDɘZ{=3AΖﰚdwJw_G,en5Њ1n-vz\ˤ8qh!"0{+RZ=klpe8h &iN(_wOkqU2["',Wd4߂lZ,,qW'0Qr> +od9{ e(<2stK,، `[*.An"锎Cb`J$ dzhBY;ZY2~6zb%FI)j@iLJ/}FU GcKe hn_0eo_/ w (uZ{&;O°hwM!]Fab晖eςȳ_s 'Ht^ii{PR=~Rc*=ZgdQ*2:P$VxUj/e @8j1-JfWyePҨOH S%Y"bV57u㹀p<A׻1-u?P-LJ8#}#Yr AŽvv՜O/$ne _k.ܳ/KU }]qQ>wgosk,yiA%g\l!o0֧}H]n~%@OU-]/abdjΡ>#mQD@c7I-HAJRKBڏIm}ӹckc6\UTE2>n=h ,⇕8V-h'C"r/ow`EknH٣EBJnad[ep50pIEX,\0ϟUJXqوe뒷U79\6=G0>Zc:ǡa+K`.gaNc$cr\Zx6S^\|exL!e G>::ltM怺zqN&ZAg7 P>YzݭP,A{]XcUkl-UK2qE#댍6>ObWc(eݬ$BG{tc-lB_O ?iI{_k`;8Q/Z@mh U`j/y/Ԏ"aT#&Hv++O_=ZGޢ(@Q\Fi2B-~Z]6u}f [zLF!?ҼlJ"KkP`)m~^P+R/= .<|dw4b>p EJKsX }|oN03{eq/$;R`O`f@[:'t"`7 x=<ʗv9}8 ;()=EM2(S.-5m]1 z[ƣӲ^XąpmYz{(9΋y)?U2(B63aGLі0fS瓼2ڐpq FҪO&~xO8gw]e>#?uE}R6 hA[ 1=0e DjPF%~*S t="w4-5B01[DuqX#B(0$(z?fǙ\&rbӰ$*ڱD,3&n8li;^B\{b=j*%'廆} iM  O_$Fx Nfum -N9uC3ٿ[sN :^z@VIu?wϝ䝓AT9렇Y5 aǹS!r8OÐѺkL<Y0DB8?aK-Q +Mh/լubUэ-A%*+ב_C4$c(6.Y62.Ye.>;Ah,L.iG"jvT_JF vX:S +pCRz3P-rxקG[1߇qR{A/r腷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(¢yMq̎1 e3`}a5*gE') )%^]ZqA9'q?uL CsN[ 2t+3|^{ *i`2# ,8}L/oǥhGMZx-_v_籋Iw"h+:åY1i6FT Ȋy1no&M/ Uzbc:Y!c-*^_fK!AVlbi4Ӻ e 1ߥ+aq*׺hw牂|ad; 1DEtf|Teu?Fc~H#V18M ;vZjgI=JN4 Ek*ؗ @Ki!@2'( -WD ܐ مrE\ qlIf&*io *Լ}tZH 'Jk52u? H2BF ?Upa#<|PE_)3Z 0h]&"zP՝ȷNlOU<}ުL+'096۟Gh> qԉ(45m٠BV~B\mEُG+'Bt$6p/eq`{b{S`tl*}( _nj:YBidSK;DÇ&H l;]ehNf,9w ¹tB?l 5[% -;[۬nzSu1腛+)5a۔GLj.3w]YsF ϋêJzϕT؟'r͝W^s s\A37ƨ*j{4iO|1wZ2˦ay8RL_䷶,{ZMSb*!"ڸW_YOC* ?Dy>Y`bs.:" ďc<&ͧ# }i_\}F=)5_Ы'"Ů~AsWe˔wV V_O?SA&$F~>=?ީx<'-UL7 fX_Ri+;|Ԏ ]h&ߤ+7@Ɲև)~@I^*qMOgnܜ],M>>^re`AzȘ_.v> l"f5K~}A̡gbt"!)Qٲh9GvO0$7r E˃0YfͰj -ھ̲)(ź7L|@D8Qnh$-^ UA]5 p=zWB*mjҩ6x|c`jv3N^CAcq> $( ٖY0ERte_X6YVFUٸZe ڗ<`.asQ\`U{o)]MkpwloK EFn]gvSספaxh쟂dz%UȼWo 1ĺ{@Z;5TY)#BRs(/P~gµ?NHLeK_ƹ[;D".M $ͿDj yS|3C<ґKk| P$Rn91\Fj;3 J40 Tљ&twgoZU 6ц22/? E}ts͚Ħ8rL?'Bxn J-tq]Ex1h}mp[HHW  $JGROLaDI\ry1/=|Aw͎" t>Ί&G` a &*FɾHՍV-180DE=)w#o{ f6m+5ǂ(*7_ɒ?}U&6h+dzCrV լ.voxV~P  ʧizuU3y [t-A֖` {~(H:5+Cg1[>Ο{Ӧ߇m 7`٧#p YLl!0 YZsurvey/data/fpc.rda0000644000176200001440000000055514576431435014001 0ustar liggesusers r0b```b`afd`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 ,ۧhIsurvey/data/myco.rda0000644000176200001440000000272614576431435014202 0ustar liggesusersBZh91AY&SYlp$hӯBA`@)`>8  tU `iPihL65RMh&h?ʣC@?RI(444MR(&`S&##&&!aH䞣ѨC@ W %Dƪr @$ . bYCF[]׸obT3ҚT@HXTDj)fBYcNJ>^PR^,IrªQH&H @P8ڔ"}*PP !)JljLVTE^DMPl9=G|V=[cM mzm6ymmNm$I:ѕUюu<˦mG\MfIJ0 ▲U7@3rMI$Q]><= L6X* Fq)p#ĥUpyke֭mh-_$42%e6Tꖷ'P)mTUL ASquz/.`$I*Jym$M$ I4$DII$M$i]mݤJIZJo{ؤl m%xH!"- PfU +*@eV`@UePǭ^;޵kZҰ$mw$ rB" /u99ε&s.`T(I$Q$IPI$DDDACMiJRs!"N$ !!ȤR4D@xMqDFPF$kMmiᶴ۶$OMmI$>/survey/data/mu284.rda0000644000176200001440000000051114576431435014100 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: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. The relative error in the right tail is uniformly bounded for all \code{x} and decreases as p increases. This method 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{ Chen, T., & Lumley T. (2019). Numerical evaluation of methods approximating the distribution of a large quadratic form in normal variables. Computational Statistics and Data Analysis, 139, 75-81. 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/svyranktest.Rd0000644000176200001440000000537314226370750015264 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} } \details{These tests are for the null hypothesis that the population or superpopulation distributions of the response variable are different between groups, targeted at population or superpopulation alternatives. The 'ranks' are defined as quantiles of the pooled distribution of the variable, so they do not just go from 1 to N; the null hypothesis does not depend on the weights, but the ranks do. The tests reduce to the usual Normal approximations to the usual rank tests under iid sampling. Unlike the traditional rank tests, they are not exact in small samples. } \value{ Object of class \code{htest} Note that with more than two groups the \code{statistic} element of the return value holds the numerator degrees of freedom and the \code{parameter} element holds the test statistic. } \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") str(svyranktest(ell~stype, dclus1)) ## 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)) ## replicate weights rclus1<-as.svrepdesign(dclus1) svyranktest(ell~stype, rclus1) } % 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/salamander.Rd0000644000176200001440000000364214145646540014776 0ustar liggesusers\name{salamander} \docType{data} \alias{salamander} \concept{generalized linear mixed model} \title{Salamander mating data set from McCullagh and Nelder (1989)} \description{This data set presents the outcome of three experiments conducted at the University of Chicago in 1986 to study interbreeding between populations of mountain dusky salamanders (McCullagh and Nelder, 1989, Section 14.5). The analysis here is from Lumley (1998, section 5.3)} \usage{data(salamander)} \format{ A data frame with the following columns: \describe{ \item{Mate}{Whether the salamanders mated (1) or did not mate (0).} \item{Cross}{Cross between female and male type. A factor with four levels: \code{R/R},\code{R/W},\code{W/R}, and \code{W/W}. The type of the female salamander is listed first and the male is listed second. Rough Butt is represented by R and White Side is represented by W. For example, \code{Cross=W/R} indicates a White Side female was crossed with a Rough Butt male.} \item{Male}{Identification number of the male salamander. A factor.} \item{Female}{Identification number of the female salamander. A factor.} } } \references{McCullagh P. and Nelder, J. A. (1989) \emph{Generalized Linear Models}. Chapman and Hall/CRC. Lumley T (1998) PhD thesis, University of Washington } \examples{ data(salamander) salamander$mixed<-with(salamander, Cross=="W/R" | Cross=="R/W") salamander$RWvsWR<-with(salamander, ifelse(mixed, ((Cross=="R/W")-(Cross=="W/R"))/2, 0)) xsalamander<-xdesign(id=list(~Male, ~Female), data=salamander, overlap="unbiased") ## Adjacency matrix ## Blocks 1 and 2 are actually the same salamanders, but ## it's traditional to pretend they are independent. image(xsalamander$adjacency) ## R doesn't allow family=binomial(identity) success <- svyglm(Mate~mixed+RWvsWR, design=xsalamander, family=quasi(link="identity", variance="mu(1-mu)")) summary(success) } \keyword{datasets} survey/man/with.svyimputationList.Rd0000644000176200001440000000376713722115566017437 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, warn.missing.labels=FALSE)) files.women<-list.files(data.dir,pattern="f.\\\\.dta$",full=TRUE) women<-imputationList(lapply(files.women, foreign::read.dta, warn.missing.labels=FALSE)) 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)) repdesigns<-as.svrepdesign(designs, type="boot", replicates=50) MIcombine(with(repdesigns, svymean(~drkfre))) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey }% __ONLY ONE__ keyword per line survey/man/svysmooth.Rd0000644000176200001440000000623013517345016014732 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/svychisq.Rd0000755000176200001440000002030614230114357014526 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","wls-score"),na.rm=TRUE,...) \method{svychisq}{svyrep.design}(formula, design, statistic = c("F", "Chisq","Wald","adjWald","lincom", "saddlepoint","wls-score"),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 (1987) 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). \code{statistic="wls-score"} is an experimental implementation of the weighted least squares score test of Lipsitz et al (2015). It is not identical to that paper, for example, I think the denominator degrees of freedom need to be reduced by JK for a JxK table, not (J-1)(K-1). And it's very close to the "adjWald" test. 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 Stuart R. Lipsitz, Garrett M. Fitzmaurice, Debajyoti Sinha, Nathanael Hevelone, Edward Giovannucci, and Jim C. Hu (2015) "Testing for independence in JxK contingency tables with complex sample survey data" Biometrics 71(3): 832-840 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 (1987) "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. See \url{https://notstatschat.rbind.io/2019/06/08/design-degrees-of-freedom-brief-note/} for an explanation of the design degrees of freedom with replicate weights. } \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/surveyoptions.Rd0000644000176200001440000001035414462643117015635 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} \alias{survey.use_rcpp} \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. \code{survey.use_rcpp} controls whether the new C++ code for standard errors is used (vs the old R code). The factory setting is \code{TRUE} and the only reason to use \code{FALSE} is for comparisons. } \keyword{survey} survey/man/svyolr.Rd0000644000176200001440000000431714423551650014221 0ustar liggesusers\name{svyolr} \alias{svyolr} \alias{svyolr.survey.design2} \alias{svyolr.svyrep.design} \alias{predict.svyolr} %- 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, subset=NULL,..., na.action = na.omit,method = c("logistic", "probit", "cloglog", "cauchit")) \method{svyolr}{svyrep.design}(formula,design,subset=NULL,...,return.replicates=FALSE, multicore=getOption("survey.multicore")) \method{predict}{svyolr}(object, newdata, type = c("class", "probs"), ...) } %- 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{subset}{subset of the design to use; \code{NULL} for all of it} \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} \item{object}{object of class \code{svyolr}} \item{newdata}{new data for predictions} \item{type}{return vector of most likely class or matrix of probabilities} } \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") ## predictions summary(predict(m, newdata=apiclus2)) summary(predict(m, newdata=apiclus2, type="probs")) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/oldsvyquantile.Rd0000755000176200001440000001633613707712045015756 0ustar liggesusers\name{oldsvyquantile} \alias{oldsvyquantile} \alias{oldsvyquantile.survey.design} \alias{oldsvyquantile.svyrep.design} \alias{print.svyquantile} %- Also NEED an `\alias' for EACH other topic documented here. \title{Deprecated implementation of quantiles} \description{ Compute quantiles for data from complex surveys. \code{oldsvyquantile} is the version of the function from before version 4.1 of the package, available for backwards compatibility. See \code{\link{svyquantile}} for the current version } \usage{ \method{oldsvyquantile}{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=NULL,...) \method{oldsvyquantile}{svyrep.design}(x, design, quantiles, method ="linear", interval.type=c("probability","quantile"), f = 1, return.replicates=FALSE, ties=c("discrete","rounded"),na.rm=FALSE, alpha=0.05,df=NULL,...) } %- 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} } \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) oldsvyquantile(~api00, dclus1, c(.25,.5,.75),ci=TRUE) oldsvyquantile(~api00, dclus1, c(.25,.5,.75),ci=TRUE,interval.type="betaWald") oldsvyquantile(~api00, dclus1, c(.25,.5,.75),ci=TRUE,df=NULL) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) (qapi<-oldsvyquantile(~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) oldsvyquantile(~api00, dstrat, c(.25,.5,.75),ci=TRUE) #stratified sample, replicate weights # interval="probability" is necessary for jackknife weights rstrat<-as.svrepdesign(dstrat) oldsvyquantile(~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) oldsvyquantile(~arrests+alive, design=scdrep, quantile=0.5, interval.type="quantile") oldsvyquantile(~arrests+alive, design=scdrep, quantile=0.5, interval.type="quantile",df=NULL) } \keyword{univar}% at least one, from doc/KEYWORDS \keyword{survey}% __ONLY ONE__ keyword per line survey/man/as.fpc.Rd0000644000176200001440000000227513517345016014036 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/svyratio.Rd0000755000176200001440000001164513640531200014535 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,influence=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{influence}{Return influence functions} \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/withPV.survey.design.Rd0000644000176200001440000000407413517345016016710 0ustar liggesusers\name{withPV.survey.design} \alias{withPV.survey.design} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Analyse plausible values in surveys } \description{ Repeats an analysis for each of a set of 'plausible values' in a survey data set, returning a list suitable for \code{mitools::MIcombine}. The default method works for both standard and replicate-weight designs but not for two-phase designs. } \usage{ \S3method{withPV}{survey.design}(mapping, data, action, rewrite=TRUE, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{mapping}{ A formula or list of formulas describing each variable in the analysis that has plausible values. The left-hand side of the formula is the name to use in the analysis; the right-hand side gives the names in the dataset. } \item{data}{ A survey design object, as created by \code{svydesign} or \code{svrepdesign} } \item{action}{ With \code{rewrite=TRUE}, a function taking a survey design object as its only argument, or a quoted expression. With \code{rewrite=TRUE} a function taking a survey design object as its only argument, or a quoted expression with \code{.DESIGN} referring to the survey design object to be used. } \item{rewrite}{ Rewrite \code{action} before evaluating it (versus constructing new data sets) } \item{\dots}{ For methods } } \value{ A list of the results returned by each evaluation of \code{action}, with the call as an attribute. } \seealso{ \code{\link{with.svyimputationList}} } \examples{ if(require(mitools)){ data(pisamaths, package="mitools") des<-svydesign(id=~SCHOOLID+STIDSTD, strata=~STRATUM, nest=TRUE, weights=~W_FSCHWT+condwt, data=pisamaths) oo<-options(survey.lonely.psu="remove") results<-withPV(list(maths~PV1MATH+PV2MATH+PV3MATH+PV4MATH+PV5MATH), data=des, action=quote(svyglm(maths~ST04Q01*(PCGIRLS+SMRATIO)+MATHEFF+OPENPS, design=des)), rewrite=TRUE) summary(MIcombine(results)) options(oo) } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey}% use one of RShowDoc("KEYWORDS")survey/man/anova.svyglm.Rd0000644000176200001440000001510114462330731015276 0ustar liggesusers\name{anova.svyglm} \alias{anova.svyglm} \alias{AIC.svyglm} \alias{BIC.svyglm} \alias{extractAIC.svyglm} \alias{extractAIC.svrepglm} \alias{anova.svycoxph} %- 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}} and \code{\link{svycoxph}} 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{anova}{svycoxph}(object, object2=NULL,test=c("F","Chisq"), method=c("LRT","Wald"),tolerance=1e-5,...,force=FALSE) \method{AIC}{svyglm}(object,...,k=2, null_has_intercept=TRUE) \method{BIC}{svyglm}(object,...,maximal) \method{extractAIC}{svyglm}(fit,scale,k=2,..., null_has_intercept=TRUE) \method{extractAIC}{svrepglm}(fit,scale,k=2,..., null_has_intercept=TRUE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object,fit}{ A \code{\link{svyglm}} or\code{\link{svycoxph}} object. } \item{object2}{ Optionally, another \code{\link{svyglm}} or \code{\link{svycoxph}} 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{scale}{not used} \item{null_has_intercept}{Does the null model for AIC have an intercept or not? Must be \code{FALSE} if any of the models are intercept-only. } \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. In the examples below, \code{model1} and \code{model2} are symbolically nested in \code{model0} because \code{model0} can be obtained just by deleting terms from the formulas. On the other hand, \code{model2} is nested in \code{model1} but not symbolically nested: knowing that the model is nested requires knowing what design matrix columns are produced by \code{stype} and \code{as.numeric(stype)}. Other typical examples of models that are nested but not symbolically nested are linear and spline models for a continuous covariate, or models with categorical versions of a variable at different resolutions (eg, smoking yes/no or smoking never/former/current). A 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. \code{extractAIC} for a model with a Gaussian link uses the actual AIC based on maximum likelihood estimation of the variance parameter as well as the regression parameters. } \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) ## AIC for linear model is different because it considers the variance ## parameter model0<-svyglm(api00~ell+meals+mobility, design=dclus2) model1<-svyglm(api00~ell+meals+mobility+as.numeric(stype), design=dclus2) model2<-svyglm(api00~ell+meals+mobility+stype, design=dclus2) modelnull<-svyglm(api00~1, design=dclus2) AIC(model0, model1, model2) AIC(model0, model1, model2,modelnull, null_has_intercept=FALSE) ## from ?twophase data(nwtco) dcchs<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco) a<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcchs) b<-update(a, .~.-I(age/12)+poly(age,3)) ## not symbolically nested models anova(a,b) } % 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/rake.Rd0000755000176200001440000000773613517345016013620 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/postStratify.Rd0000755000176200001440000000751513517345016015404 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/svyrecvar.Rd0000755000176200001440000001101614462643117014707 0ustar liggesusers\name{svyrecvar} \alias{svyrecvar} \alias{multistage} \alias{multistage_rcpp} %- 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/svyfactanal.Rd0000644000176200001440000000502113517345016015167 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/svykappa.Rd0000644000176200001440000000217413641210710014506 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}{passed to \code{svymean} internally (such as \code{return.replicates} or \code{influence})} } \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) (kappas<-svyby(~comp.imp+sch.wide,~stype,design=dclus1, svykappa, covmat=TRUE)) svycontrast(kappas, quote(E/H)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/ftable.svystat.Rd0000755000176200001440000000337213517345016015637 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/svyttest.Rd0000644000176200001440000000243514066261522014566 0ustar liggesusers\name{svyttest} \alias{svyttest} \alias{confint.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)-1} for the one-sample test and \code{degf(design)-2} 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. The \code{group} variable must be a factor or character with two levels, or be coded 0/1 or 1/2} \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) tt<-svyttest(enroll~comp.imp, dclus2) tt confint(tt, level=0.9) svyttest(enroll~I(stype=="E"),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/poisson_sampling.Rd0000644000176200001440000000230014565003231016227 0ustar liggesusers\name{poisson_sampling} \alias{poisson_sampling} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Specify Poisson sampling design } \description{ Specify a design where units are sampled independently from the population, with known probabilities. This design is often used theoretically, but is rarely used in practice because the sample size is variable. This function calls \code{\link{ppscov}} to specify a sparse sampling covariance matrix. } \usage{ poisson_sampling(p) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{p}{ Vector of sampling probabilities } } \value{ Object of class \code{ppsdcheck} } \seealso{ \code{\link{ppscov}}, \code{\link{svydesign}} } \examples{ data(api) apipop$prob<-with(apipop, 200*api00/sum(api00)) insample<-as.logical(rbinom(nrow(apipop),1,apipop$prob)) apipois<-apipop[insample,] despois<-svydesign(id=~1, prob=~prob, pps=poisson_sampling(apipois$prob), data=apipois) svytotal(~api00, despois) ## SE formula sqrt(sum( (apipois$api00*weights(despois))^2*(1-apipois$prob))) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory (show via RShowDoc("KEYWORDS")): % \keyword{survey } survey/man/svycralpha.Rd0000644000176200001440000000212113517345016015026 0ustar liggesusers\name{svycralpha} \alias{svycralpha} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Cronbach's alpha } \description{ Compute Cronbach's alpha coefficient of reliability from survey data. The formula is equation (2) of Cronbach (1951) only with design-based estimates of the variances. } \usage{ svycralpha(formula, design, na.rm = FALSE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ One-sided formula giving the variables that make up the total score } \item{design}{ survey design object } \item{na.rm}{ \code{TRUE} to remove missing values } } \value{ A number } \references{ Cronbach LJ (1951). "Coefficient alpha and the internal structure of tests". Psychometrika. 16 (3): 297-334. doi:10.1007/bf02310555. } \examples{ data(api) dstrat<-svydesign(id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc) svycralpha(~ell+mobility+avg.ed+emer+meals, dstrat) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey}% use one of RShowDoc("KEYWORDS") survey/man/svyivreg.Rd0000644000176200001440000000341013517613332014531 0ustar liggesusers\name{svyivreg} \alias{svyivreg} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Two-stage least-squares for instrumental variable regression } \description{ Estimates regressions with endogenous covariates using two-stage least squares. The function uses \code{ivreg} from the \code{AER} package for the main computations, and follows the syntax of that function. } \usage{ svyivreg(formula, design, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{formula specification(s) of the regression relationship and the instruments. See Details for details} \item{design}{ A survey design object } \item{\dots}{ For future expansion } } \details{ Regressors and instruments for \code{svyivreg} are specified in a formula with two parts on the right-hand side, e.g., \code{y ~ x1 + x2 | z1 + z2 + z3}, where \code{x1} and \code{x2} are the regressors and \code{z1}, \code{z2}, and \code{z3} are the instruments. Note that exogenous regressors have to be included as instruments for themselves. For example, if there is one exogenous regressor \code{ex} and one endogenous regressor \code{en} with instrument \code{in}, the appropriate formula would be \code{y ~ ex + en | ex + in}. Equivalently, this can be specified as \code{y ~ ex + en | . - en + in}, i.e., by providing an update formula with a \code{.} in the second part of the formula. } \value{ An object of class \code{svyivreg} } \references{ \url{https://notstatschat.rbind.io/2019/07/16/adding-new-functions-to-the-survey-package/} } \seealso{ \code{\link[AER]{ivreg}}} % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey }% use one of RShowDoc("KEYWORDS") survey/man/paley.Rd0000644000176200001440000000462714572663035014007 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. In: The Encyclopedia of Design Theory } \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/regTermTest.Rd0000755000176200001440000000752213517345016015134 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 Wald 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. } \usage{ regTermTest(model, test.terms, null=NULL,df=NULL, method=c("Wald","WorkingWald","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; If \code{"WorkingWald"} the Wald-type test using the variance matrix under simple random sampling} \item{lrt.approximation}{method for approximating the distribution of the LRT and Working Wald statistic; see \code{\link{pchisqsum}}. } } \value{ An object of class \code{regTermTest} or \code{regTermTestLRT}. } \details{ The Wald test uses a chisquared or F distribution. The two working-model tests come from the (misspecified) working model where the observations are independent and the weights are frequency weights. For categorical data, this is just the model fitted to the estimated population crosstabulation. The Rao-Scott LRT statistic is the likelihood ratio statistic in this model. The working Wald test statistic is the Wald statistic in this model. The working-model tests do not have a chi-squared sampling distribution: we use a linear combination of chi-squared or F distributions as in \code{\link{pchisqsum}}. I believe the working Wald test is what SUDAAN refers to as a "Satterthwaite adjusted Wald test". To match other software you will typically need to use \code{lrt.approximation="satterthwaite"} } \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) regTermTest(model2, ~ell+meals, method="WorkingWald", df=NULL) } \keyword{regression}% at least one, from doc/KEYWORDS survey/man/confint.svyglm.Rd0000644000176200001440000000345513753316711015647 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 = NULL, ...) } %- 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/hadamard.Rd0000755000176200001440000000425413517345016014427 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/svyCprod.Rd0000755000176200001440000001151613517345016014476 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/svyhist.Rd0000644000176200001440000000457413517345016014401 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. } \value{ As for \code{hist}, except that when \code{probability=FALSE}, the return value includes a component \code{count_scale} giving a scale factor between density and counts, assuming equal bin widths. } \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/nonresponse.Rd0000755000176200001440000000627313517345016015242 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/svyplot.Rd0000755000176200001440000001026213517345016014402 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/svydesign.Rd0000755000176200001440000002306114423650257014701 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,calibrate.formula=NULL,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, calibrate.formula=NULL,...) \method{svydesign}{character}(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, pps=FALSE, calibrate.formula=NULL,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{calibrate.formula}{model formula specifying how the weights are *already* calibrated (raked, post-stratified).} \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} 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). The appropriate database interface package must already be loaded (eg \code{RSQLite} for SQLite). 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}} for details of variance estimation \code{\link{election}} for examples of PPS sampling without replacement. } \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")) } ## pre-calibrated weights cdclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc, calibration.formula=~1) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{univar}% __ONLY ONE__ keyword per line \keyword{manip}% __ONLY ONE__ keyword per line survey/man/brrweights.Rd0000755000176200001440000001211013517345016015034 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/svystandardize.Rd0000644000176200001440000000554514074414734015744 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, or \code{~1} to use the whole population. } \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 \verb{https://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]")) data(nhanes) nhanes_design <- svydesign(ids = ~ SDMVPSU, strata = ~ SDMVSTRA, weights = ~ WTMEC2YR, nest = TRUE, data = nhanes) ## These are the same nhanes_adj <- svystandardize(update(nhanes_design, all_adults = "1"), by = ~ agecat, over = ~ all_adults, population = c(55901, 77670, 72816, 45364), excluding.missing = ~ HI_CHOL) svymean(~I(HI_CHOL == 1), nhanes_adj, na.rm = TRUE) nhanes_adj <- svystandardize(nhanes_design, by = ~ agecat, over = ~ 1, population = c(55901, 77670, 72816, 45364), excluding.missing = ~ HI_CHOL) svymean(~I(HI_CHOL == 1), nhanes_adj, na.rm = TRUE) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/svy.varcoef.Rd0000755000176200001440000000132713517345016015131 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/bootweights.Rd0000644000176200001440000000621613517345016015221 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/svylogrank.Rd0000644000176200001440000000534713714425162015066 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 test 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. The \code{rho=0} and \code{gamma=0} version was proposed by Rader (2014). } \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. 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/SE.Rd0000755000176200001440000000120313517345016013164 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/svyloglin.Rd0000644000176200001440000000651513517345016014713 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/svyprcomp.Rd0000644000176200001440000000520313517345016014720 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/as.svrepdesign.Rd0000755000176200001440000001072114113106500015577 0ustar liggesusers\name{as.svrepdesign} \alias{as.svrepdesign} \alias{as.svrepdesign.default} \alias{as.svrepdesign.svyimputationList} %- 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. With a \code{svyimputationList} object, the same replicate weights will be used for each imputation if the sampling weights are all the same and \code{separate.replicates=FALSE}. } \usage{ as.svrepdesign(design,...) \method{as.svrepdesign}{default}(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")) \method{as.svrepdesign}{svyimputationList}(design, type=c("auto", "JK1", "JKn", "BRR", "bootstrap", "subbootstrap","mrbbootstrap","Fay"), fay.rho = 0, fpc=NULL,fpctype=NULL, separate.replicates=FALSE, ..., compress=TRUE, mse=getOption("survey.replicates.mse")) } %- maybe also `usage' for other objects documented here. \arguments{ \item{design}{Object of class \code{survey.design} or \code{svyimputationList}. Must not have been post-stratified/raked/calibrated in R} \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{separate.replicates}{Compute replicate weights separately for each design (useful for the bootstrap types, which are not deterministic} \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/scd.Rd0000755000176200001440000000362213517345016013435 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/svyciprop.Rd0000644000176200001440000000764413517345016014727 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/compressWeights.Rd0000755000176200001440000000320213517345016016044 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/svycontrast.Rd0000644000176200001440000000765514461114655015274 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, add=FALSE, ...) } %- 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{add}{keep all the coefficients of the input in the output?} \item{\dots}{For future expansion} } \value{ Object of class \code{svrepstat} or \code{svystat} or \code{svyvar} } \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}, and \code{stat} is a \code{svrepstat} object including replicates, the replicates are transformed and used to compute the variance. If \code{stat} is a \code{svystat} object or a \code{svrepstat} object without replicates, 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`}). If \code{stats} is a \code{svyvar} object, the estimates are elements of a matrix and the names are the row and column names pasted together with a colon. } \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)) ## Example: geometric means ## using delta method meanlogs <- svymean(~log(api00)+log(api99), dclus1) svycontrast(meanlogs, list(api00=quote(exp(`log(api00)`)), api99=quote(exp(`log(api99)`)))) ## using delta method rclus1<-as.svrepdesign(dclus1) meanlogs <- svymean(~log(api00)+log(api99), rclus1) svycontrast(meanlogs, list(api00=quote(exp(`log(api00)`)), api99=quote(exp(`log(api99)`)))) ## why is add=TRUE useful? (totals<-svyby(~enroll,~stype,design=dclus1,svytotal,covmat=TRUE)) totals1<-svycontrast(totals, list(total=c(1,1,1)), add=TRUE) svycontrast(totals1, list(quote(E/total), quote(H/total), quote(M/total))) totals2<-svycontrast(totals, list(total=quote(E+H+M)), add=TRUE) all.equal(as.matrix(totals1),as.matrix(totals2)) ## more complicated svyby means <- svyby(~api00+api99, ~stype+sch.wide, design=dclus1, svymean,covmat=TRUE) svycontrast(means, quote(`E.No:api00`-`E.No:api99`)) svycontrast(means, quote(`E.No:api00`/`E.No:api99`)) ## transforming replicates meanlogs_r <- svymean(~log(api00)+log(api99), rclus1, return.replicates=TRUE) svycontrast(meanlogs_r, list(api00=quote(exp(`log(api00)`)), api99=quote(exp(`log(api99)`)))) ## converting covariances to correlations vmat <-svyvar(~api00+ell,dclus1) print(vmat,cov=TRUE) cov2cor(as.matrix(vmat))[1,2] svycontrast(vmat, quote(`api00:ell`/sqrt(`api00:api00`*`ell:ell`))) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/weights.survey.design.Rd0000755000176200001440000000254513517345016017145 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/smoothArea.Rd0000644000176200001440000001123014567546455014775 0ustar liggesusers\name{smoothArea} \alias{svysmoothArea} \title{Small area estimation via basic area level model} \usage{ svysmoothArea( formula, domain, design = NULL, adj.mat = NULL, X.domain = NULL, direct.est = NULL, domain.size = NULL, transform = c("identity", "logit", "log"), pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = 0.95, n.sample = 250, var.tol = 1e-10, return.samples = FALSE,... ) } \arguments{ \item{formula}{An object of class 'formula' describing the model to be fitted. If direct.est is specified, the right hand side of the formula is not necessary.} \item{domain}{One-sided formula specifying factors containing domain labels} \item{design}{An object of class "svydesign" containing the data for the model} \item{adj.mat}{Adjacency matrix with rownames matching the domain labels. If set to \code{NULL}, the IID spatial effect will be used.} \item{X.domain}{Data frame of areal covariates. One of the column names needs to match the name of the domain variable, in order to be linked to the data input. Currently only supporting time-invariant covariates.} \item{direct.est}{Data frame of direct estimates, with first column containing the domain variable, second column containing direct estimate, and third column containing the variance of direct estimate.} \item{domain.size}{Data frame of domain sizes. One of the column names needs to match the name of the \code{domain} variable, in order to be linked to the data input and there must be a column names 'size' containing domain sizes.} \item{transform}{Optional transformation applied to the direct estimates before fitting area level model. The default option is no transformation, but logit and log are implemented.} \item{pc.u}{Hyperparameter U for the PC prior on precisions. See the INLA documentation for more details on the parameterization.} \item{pc.alpha}{Hyperparameter alpha for the PC prior on precisions.} \item{pc.u.phi}{Hyperparameter U for the PC prior on the mixture probability phi in BYM2 model.} \item{pc.alpha.phi}{Hyperparameter alpha for the PC prior on the mixture probability phi in BYM2 model.} \item{level}{The specified level for the posterior credible intervals} \item{n.sample}{Number of draws from posterior used to compute summaries} \item{var.tol}{Tolerance parameter; if variance of an area's direct estimator is below this value, that direct estimator is dropped from model} \item{return.samples}{If TRUE, return matrix of posterior samples of area level quantities} \item{\dots}{for future methods} } \value{ A \code{svysae} object } \description{ Generates small area estimates by smoothing direct estimates using an area level model } \details{ The basic area level model is a Bayesian version of the Fay-Herriot model (Fay & Herriot,1979). It treats direct estimates of small area quantities as response data and explicitly models differences between areas using covariate information and random effects. The Fay-Herriot model can be viewed as a two-stage model: in the first stage, a sampling model represents the sampling variability of a direct estimator and in the second stage, a linking model describes the between area differences in small area quantities. More detail is given in section 4 of Mercer et al (2015). } \seealso{The \code{survey-sae} vignette} \references{ Fay, Robert E., and Roger A. Herriot. (1979). Estimates of Income for Small Places: An Application of James-Stein Procedures to Census Data. Journal of the American Statistical Association 74 (366a): 269-77. Mercer LD, Wakefield J, Pantazis A, Lutambi AM, Masanja H, Clark S. Space-Time Smoothing of Complex Survey Data: Small Area Estimation for Child Mortality. Ann Appl Stat. 2015 Dec;9(4):1889-1905. \url{https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4959836/} } \examples{ ## artificial data from SUMMER package ## Uses too many cores for a CRAN example \dontrun{ hasSUMMER<-tryCatch({ data("DemoData2",package="SUMMER") data("DemoMap2", package="SUMMER") }, error=function(e) FALSE) if (!isFALSE(hasSUMMER)){ library(survey) des0 <- svydesign(ids = ~clustid+id, strata = ~strata, weights = ~weights, data = DemoData2, nest = TRUE) Xmat <- aggregate(age~region, data = DemoData2, FUN = mean) cts.cov.res <- svysmoothArea(tobacco.use ~ age, domain = ~region, design = des0, adj.mat = DemoMap2$Amat, X.domain = Xmat, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3) print(cts.cov.res) plot(cts.cov.res) } } } survey/man/nhanes.Rd0000644000176200001440000000202114073741722014127 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{ Previously at \verb{https://wwwn.cdc.gov/nchs/nhanes/search/datapage.aspx?Component=laboratory&CycleBeginYear=2009} } \examples{ data(nhanes) design <- svydesign(id=~SDMVPSU, strata=~SDMVSTRA, weights=~WTMEC2YR, nest=TRUE,data=nhanes) design } \keyword{datasets} survey/man/smoothUnit.Rd0000644000176200001440000000550014567546504015042 0ustar liggesusers\name{smoothUnit} \alias{svysmoothUnit} \title{Smooth via basic unit level model} \usage{ svysmoothUnit( formula, domain, design, family = c("gaussian", "binomial"), X.pop = NULL, adj.mat = NULL, domain.size = NULL, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = 0.95, n.sample = 250, return.samples = FALSE, X.pop.weights = NULL,... ) } \arguments{ \item{formula}{An object of class 'formula' describing the model to be fitted.} \item{domain}{One-sided formula specifying factors containing domain labels} \item{design}{An object of class "survey.design" containing the data for the model} \item{family}{of the response variable, currently supports 'binomial' (default with logit link function) or 'gaussian'.} \item{X.pop}{Data frame of population unit-level covariates. One of the column name needs to match the domain specified, in order to be linked to the data input. Currently only supporting time-invariant covariates.} \item{adj.mat}{Adjacency matrix with rownames matching the domain labels. If set to NULL, the IID spatial effect will be used.} \item{domain.size}{Data frame of domain sizes. One of the column names needs to match the name of the domain variable, in order to be linked to the data input and there must be a column names 'size' containing domain sizes. The default option is no transformation, but logit and log are implemented.} \item{pc.u}{Hyperparameter U for the PC prior on precisions. See the INLA documentation for more details on the parameterization.} \item{pc.alpha}{Hyperparameter alpha for the PC prior on precisions.} \item{pc.u.phi}{Hyperparameter U for the PC prior on the mixture probability phi in BYM2 model.} \item{pc.alpha.phi}{Hyperparameter alpha for the PC prior on the mixture probability phi in BYM2 model.} \item{level}{The specified level for the posterior credible intervals} \item{n.sample}{Number of draws from posterior used to compute summaries} \item{return.samples}{If TRUE, return matrix of posterior samples of area level quantities} \item{X.pop.weights}{Optional vector of weights to use when aggregating unit level predictions} \item{\dots}{for future expansion} } \value{ A \code{svysae} object } \description{ Generates small area estimates by smoothing direct estimates using a basic unit level model. This model assumes sampling is ignorable (no selection bias). It's a Bayesian linear (\code{family="gaussian"}) or generalised linear (\code{family="binomial"}) mixed model for the unit-level data with individual-level covariates and area-level random effects. } \seealso{The \code{survey-sae} vignette} \references{Battese, G. E., Harter, R. M., & Fuller, W. A. (1988). An Error-Components Model for Prediction of County Crop Areas Using Survey and Satellite Data. Journal of the American Statistical Association, 83(401), 28-36. }survey/man/svyquantile.Rd0000644000176200001440000001444014572663272015256 0ustar liggesusers\name{newsvyquantile} \alias{svyquantile} \alias{svyquantile.survey.design} \alias{svyquantile.svyrep.design} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Quantiles under complex sampling. } \description{ Estimates quantiles and confidence intervals for them. This function was completely re-written for version 4.1 of the survey package, and has a wider range of ways to define the quantile. See the vignette for a list of them. } \usage{ svyquantile(x, design, quantiles, ...) \method{svyquantile}{survey.design}(x, design, quantiles, alpha = 0.05, interval.type = c("mean", "beta","xlogit", "asin","score"), na.rm = FALSE, ci=TRUE, se = ci, qrule=c("math","school","shahvaish","hf1","hf2","hf3", "hf4","hf5","hf6","hf7","hf8","hf9"), df = NULL, ...) \method{svyquantile}{svyrep.design}(x, design, quantiles, alpha = 0.05, interval.type = c("mean", "beta","xlogit", "asin","quantile"), na.rm = FALSE, ci = TRUE, se=ci, qrule=c("math","school","shahvaish","hf1","hf2","hf3", "hf4","hf5","hf6","hf7","hf8","hf9"), df = NULL, return.replicates=FALSE,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ A one-sided formula describing variables to be used } \item{design}{ Design object } \item{quantiles}{ Numeric vector specifying which quantiles are requested } \item{alpha}{Specified confidence interval coverage} \item{interval.type}{See Details below} \item{na.rm}{Remove missing values?} \item{ci,se}{Return an estimated confidence interval and standard error?} \item{qrule}{Rule for defining the quantiles: either a character string specifying one of the built-in rules, or a function} \item{df}{Degrees of freedom for confidence interval estimation: \code{NULL} specifies \code{degf(design)}} \item{return.replicates}{Return replicate estimates of the quantile (only for \code{interval.type="quantile"})} \item{\dots}{ For future expansion } } \details{ The \code{p}th quantile is defined as the value where the estimated cumulative distribution function is equal to \code{p}. As with quantiles in unweighted data, this definition only pins down the quantile to an interval between two observations, and a rule is needed to interpolate. The default is the mathematical definition, the lower end of the quantile interval; \code{qrule="school"} uses the midpoint of the quantile interval; \code{"hf1"} to \code{"hf9"} are weighted analogues of \code{type=1} to \code{9} in \code{\link{quantile}}. See the vignette "Quantile rules" for details and for how to write your own. By default, confidence intervals are estimated using Woodruff's (1952) method, which involves computing the quantile, estimating a confidence interval for the proportion of observations below the quantile, and then transforming that interval using the estimated CDF. In that context, the \code{interval.type} argument specifies how the confidence interval for the proportion is computed, matching \code{\link{svyciprop}}. In contrast to \code{oldsvyquantile}, \code{NaN} is returned if a confidence interval endpoint on the probability scale falls outside \code{[0,1]}. There are two exceptions. For \code{svydesign} objects, \code{interval.type="score"} asks for the Francisco & Fuller confidence interval based on inverting a score test. According to Dorfmann & Valliant, this interval has inferior performance to the \code{"beta"} and \code{"logit"} intervals; it is provided for compatibility. For replicate-weight designs, \code{interval.type="quantile"} ask for an interval based directly on the replicates of the quantile. This interval is not valid for jackknife-type replicates, though it should perform well for bootstrap-type replicates, BRR, and SDR. The \code{df} argument specifies degrees of freedom for a t-distribution approximation to distributions of means. The default is the design degrees of freedom. Specify \code{df=Inf} to use a Normal distribution (eg, for compatibility). When the standard error is requested, it is estimated by dividing the confidence interval length by the number of standard errors in a t confidence interval with the specified \code{alpha}. For example, with \code{alpha=0.05} and \code{df=Inf} the standard error is estimated as the confidence interval length divided by \code{2*1.96}. } \value{ An object of class \code{"newsvyquantile"}, except that with a replicate-weights design and \code{interval.type="quantile"} and \code{return.replicates=TRUE} it's an object of class \code{"svrepstat"} } \references{ Dorfman A, Valliant R (1993) Quantile variance estimators in complex surveys. Proceedings of the ASA Survey Research Methods Section. 1993: 866-871 Francisco CA, Fuller WA (1986) Estimation of the distribution function with a complex survey. Technical Report, Iowa State University. Hyndman, R. J. and Fan, Y. (1996) Sample quantiles in statistical packages, The American Statistician 50, 361-365. 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. } \seealso{ \code{vignette("qrule", package = "survey")} \code{\link{oldsvyquantile}} \code{\link{quantile}} } \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) rclus1<-as.svrepdesign(dclus1) bclus1<-as.svrepdesign(dclus1,type="boot") svyquantile(~api00, dclus1, c(.25,.5,.75)) svyquantile(~api00, dclus1, c(.25,.5,.75),interval.type="beta") svyquantile(~api00, rclus1, c(.25,.5,.75)) svyquantile(~api00, rclus1, c(.25,.5,.75),interval.type="quantile") svyquantile(~api00, bclus1, c(.25,.5,.75),interval.type="quantile") svyquantile(~api00+ell, dclus1, c(.25,.5,.75), qrule="math") svyquantile(~api00+ell, dclus1, c(.25,.5,.75), qrule="school") svyquantile(~api00+ell, dclus1, c(.25,.5,.75), qrule="hf8") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey}% use one of RShowDoc("KEYWORDS") \keyword{univar}% at least one, from doc/KEYWORDS survey/man/svyqqplot.Rd0000644000176200001440000000401313710466023014733 0ustar liggesusers\name{svyqqplot} \alias{svyqqplot} \alias{svyqqmath} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Quantile-quantile plots for survey data } \description{ Quantile-quantile plots either against a specified distribution function or comparing two variables from the same or different designs. } \usage{ svyqqplot(formula, design, designx = NULL, na.rm = TRUE, qrule = "hf8", xlab = NULL, ylab = NULL, ...) svyqqmath(x, design, null=qnorm, na.rm=TRUE, xlab="Expected",ylab="Observed",...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x,formula}{ A one-sided formula for \code{svyqqmath} or a two-sided formula for \code{svyqqplot} } \item{design}{ Survey design object to look up variables } \item{designx}{ Survey design object to look up the RHS variable in \code{svyqqplot}, if different from the LHS variable } \item{null}{Quantile function to compare the data quantiles to} \item{na.rm}{ Remove missing values } \item{qrule}{ How to define quantiles for \code{svyqqplot} -- see \code{\link{svyquantile}} for possible values } \item{xlab,ylab}{ Passed to \code{plot}. For \code{svyqqplot}, if these are \code{NULL} they are replaced by the variable names } \item{\dots}{ Graphical options to be passed to \code{plot} } } \value{ None } \seealso{ \code{\link{quantile}} \code{\link{qqnorm}} \code{\link{qqplot}} } \examples{ data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) svyqqmath(~api99, design=dstrat) svyqqplot(api00~api99, design=dstrat) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) opar<-par(mfrow=c(1,2)) ## sample distributions very different qqplot(apiclus1$enroll, apistrat$enroll); abline(0,1) ## estimated population distributions much more similar svyqqplot(enroll~enroll, design=dstrat,designx=dclus1,qrule=survey:::qrule_hf8); abline(0,1) par(opar) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey }% use one of RShowDoc("KEYWORDS") survey/man/withReplicates.Rd0000755000176200001440000001337013730746661015664 0ustar liggesusers\name{withReplicates} \alias{withReplicates} \alias{withReplicates.svyrep.design} \alias{withReplicates.svrepvar} \alias{withReplicates.svrepstat} \alias{withReplicates.svyimputationList} \alias{vcov.svyrep.design} %- 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. \code{vcov.svrep.design} produces the variance estimate from a set of replicates and the design object. } \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) \method{withReplicates}{svyimputationList}(design, theta, ..., return.replicates=FALSE) \method{vcov}{svyrep.design}(object, replicates, centre,...) } %- 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?} \item{object}{The replicate-weights design object used to create the replicates} \item{replicates}{A set of replicates} \item{centre}{The centering value for variance calculation. If \code{object$mse} is \code{TRUE} this is the result of estimation using the sampling weights, and must be supplied. If \code{object$mse} is \code{FALSE} the mean of the replicates is used and this argument is silently ignored. }} \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. The \code{svyimputationList} method runs \code{withReplicates} on each imputed design (which must be replicate-weight designs). } \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)))) } ## pearson correlation dstrat <- svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) bstrat<- as.svrepdesign(dstrat,type="subbootstrap") v <- svyvar(~api00+api99, bstrat, return.replicates=TRUE) vcor<-cov2cor(as.matrix(v))[2,1] vreps<-v$replicates correps<-apply(vreps,1, function(v) v[2]/sqrt(v[1]*v[4])) vcov(bstrat,correps, centre=vcor) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svynls.Rd0000644000176200001440000000374614076446322014231 0ustar liggesusers\name{svynls} \alias{svynls} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Probability-weighted nonlinear least squares } \description{ Fits a nonlinear model by probability-weighted least squares. Uses \code{nls} to do the fitting, but estimates design-based standard errors with either linearisation or replicate weights. See \code{\link{nls}} for documentation of model specification and fitting. } \usage{ svynls(formula, design, start, weights=NULL, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ Nonlinear model specified as a formula; see \code{\link{nls}} } \item{design}{ Survey design object } \item{start}{starting values, passed to \code{\link{nls}}} \item{weights}{ Non-sampling weights, eg precision weights to give more efficient estimation in the presence of heteroscedasticity. } \item{\dots}{ Other arguments to \code{nls} (especially, \code{start}). Also supports \code{return.replicates} for replicate-weight designs and \code{influence} for other designs. } } \value{ Object of class \code{svynls}. The fitted \code{nls} object is included as the \code{fit} element. } \seealso{ \code{\link{svymle}} for maximum likelihood with linear predictors on one or more parameters } \examples{ set.seed(2020-4-3) x<-rep(seq(0,50,1),10) y<-((runif(1,10,20)*x)/(runif(1,0,10)+x))+rnorm(510,0,1) pop_model<-nls(y~a*x/(b+x), start=c(a=15,b=5)) df<-data.frame(x=x,y=y) df$p<-ifelse((y-fitted(pop_model))*(x-mean(x))>0, .4,.1) df$strata<-ifelse(df$p==.4,"a","b") in_sample<-stratsample(df$strata, round(table(df$strat)*c(0.4,0.1))) sdf<-df[in_sample,] des<-svydesign(id=~1, strata=~strata, prob=~p, data=sdf) pop_model (biased_sample<-nls(y~a*x/(b+x),data=sdf, start=c(a=15,b=5))) (corrected <- svynls(y~a*x/(b+x), design=des, start=c(a=15,b=5))) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey }% use one of RShowDoc("KEYWORDS") survey/man/xdesign.Rd0000644000176200001440000000666614146565107014341 0ustar liggesusers\name{xdesign} \alias{xdesign} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Crossed effects and other sparse correlations } \description{ Defines a design object with multiple dimensions of correlation: observations that share any of the \code{id} variables are correlated, or you can supply an adjacency matrix or Matrix to specify which are correlated. Supports crossed designs (eg multiple raters of multiple objects) and non-nested observational correlation (eg observations sharing primary school or secondary school). Has methods for \code{svymean}, \code{svytotal}, \code{svyglm} (so far). } \usage{ xdesign(id = NULL, strata = NULL, weights = NULL, data, fpc = NULL, adjacency = NULL, overlap = c("unbiased", "positive"), allow.non.binary = FALSE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{id}{ list of formulas specifying cluster identifiers for each clustering dimension (or \code{NULL}) } \item{strata}{ Not implemented } \item{weights}{ model formula specifying (sampling) weights } \item{data}{ data frame containing all the variables } \item{fpc}{ Not implemented } \item{adjacency}{ Adjacency matrix or Matrix indicating which pairs of observations are correlated } \item{overlap}{ See details below } \item{allow.non.binary}{ If \code{FALSE} check that \code{adjacency} is a binary 0/1 or \code{TRUE}/\code{FALSE} matrix or Matrix. } } \details{ Subsetting for these objects actually drops observations; it is not equivalent to just setting weights to zero as for survey designs. So, for example, a subset of a balanced design will not be a balanced design. The \code{overlap} option controls double-counting of some variance terms. Suppose there are two clustering dimensions, \code{~a} and \code{~b}. If we compute variance matrices clustered on \code{a} and clustered on \code{b} and add them, observations that share both \code{a} and \code{b} will be counted twice, giving a positively biased estimator. We can subtract off a variance matrix clustered on combinations of \code{a} and \code{b} to give an unbiased variance estimator. However, the unbiased estimator is not guaranteed to be positive definite. In the references, Miglioretti and Heagerty use the \code{overlap="positive"} estimator and Cameron et al use the \code{overlap="unbiased"} estimator. } \value{ An object of class \code{xdesign} } \references{ Miglioretti D, Heagerty PJ (2007) Marginal modeling of nonnested multilevel data using standard software. Am J Epidemiol 165(4):453-63 Cameron, A. C., Gelbach, J. B., & Miller, D. L. (2011). Robust Inference With Multiway Clustering. Journal of Business & Economic Statistics, 29(2), 238-249. \url{https://notstatschat.rbind.io/2021/09/18/crossed-clustering-and-parallel-invention/} } \seealso{\code{\link{salamander}}} %% ~Make other sections like Warning with \section{Warning }{....} ~ \examples{ ## With one clustering dimension, is close to the with-replacement ## survey estimator, but not identical unless clusters are equal size data(api) dclus1r<-svydesign(id=~dnum, weights=~pw, data=apiclus1) xclus1<-xdesign(id=list(~dnum), weights=~pw, data=apiclus1) xclus1 svymean(~enroll,dclus1r) svymean(~enroll,xclus1) data(salamander) xsalamander<-xdesign(id=list(~Male, ~Female), data=salamander, overlap="unbiased") xsalamander degf(xsalamander) }survey/man/mu284.Rd0000644000176200001440000000170613517345016013541 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. (downloaded from StatLib, which is no longer active) } \examples{ data(mu284) (dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284)) (ytotal<-svytotal(~y1, dmu284)) vcov(ytotal) } \keyword{datasets} survey/man/svyby.Rd0000755000176200001440000002172514360203326014036 0ustar liggesusers\name{svyby} \alias{svyby} \alias{svybys} \alias{svyby.default} \alias{SE.svyby} \alias{deff.svyby} \alias{coef.svyby} \alias{confint.svyby} \alias{unwtd.count} \alias{svyby.survey.design2} %- 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, stringsAsFactors=TRUE, multicore=getOption("survey.multicore")) \method{svyby}{survey.design2}(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, influence=covmat, na.rm.by=FALSE, na.rm.all=FALSE, stringsAsFactors=TRUE, 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, ...) svybys(formula, bys, design, FUN, ...) } %- 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}. NOTE: if any of the names of these are partial matches to \code{formula},\code{by}, or \code{design}, you must specify the \code{formula},\code{by}, or \code{design} argument by name, not just by position. } \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. Doesn't make much sense without \code{na.rm=TRUE}} \item{covmat}{If \code{TRUE}, compute covariances between estimates for different subsets. Allows \code{\link{svycontrast}} to be used on output. Requires that \code{FUN} supports either \code{return.replicates=TRUE} or \code{influence=TRUE}} \item{return.replicates}{Only for replicate-weight designs. If \code{TRUE}, return all the replicates as the "replicates" attribute of the result} \item{influence}{Return the influence functions of the result} \item{multicore}{Use \code{multicore} package to distribute subsets over multiple processors?} \item{stringsAsFactors}{Convert any string variables in \code{formula} to factors before calling \code{FUN}, so that the factor levels will be the same in all groups (See Note below). Potentially slow.} \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"}} \item{bys}{one-sided formula with each term specifying a grouping (rather than being combined to give a grouping } } \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. The variant \code{svybys} creates a separate table for each term in \code{bys} rather than creating a joint table. } \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. If \code{a} is a character variable then \code{svyby(~a, ~b, design=d, svymean)} creates factor variables implicitly and so has the same problem. Either use \code{\link{update.survey.design}} to add variables to the design object instead or specify the levels explicitly in the call to \code{factor}. The \code{stringsAsFactors=TRUE} option converts all character variables to factors, which can be slow, set it to \code{FALSE} if you have predefined factors where necessary. } \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)) tots<-svyby(~enroll, ~stype, dclus1, svytotal,covmat=TRUE) vcov(tots) svycontrast(tots, quote(E/H)) ## comparing subgroups uses the delta method unless replicates are present meanlogs<-svyby(~log(enroll),~stype,svymean, design=rclus1,covmat=TRUE) svycontrast(meanlogs, quote(exp(E-H))) meanlogs<-svyby(~log(enroll),~stype,svymean, design=rclus1,covmat=TRUE,return.replicates=TRUE) svycontrast(meanlogs, quote(exp(E-H))) ## 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) ratios<-svyby(~api.stu, by=~stype, denominator=~enroll, design=dclus1, svyratio,covmat=TRUE) vcov(ratios) ## empty groups svyby(~api00,~comp.imp+sch.wide,design=dclus1,svymean) svyby(~api00,~comp.imp+sch.wide,design=dclus1,svymean,drop.empty.groups=FALSE) ## Multiple tables svybys(~api00,~comp.imp+sch.wide,design=dclus1,svymean) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/svypredmeans.Rd0000644000176200001440000000577013743475476015426 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, predictat=NULL) } %- 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. This does not have to be a factor, but it will be modelled linearly if it isn't} \item{predictat}{A vector of the values of \code{groupfactor} where you want predictions. If \code{groupfactor} is a factor, these must be values in the data, but if it is numeric you can interpolate/extrapolate} } \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, ~factor(race)) means ## relative risks compared to non-Hispanic white svycontrast(means,quote(`1`/`2`)) svycontrast(means,quote(`3`/`2`)) data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) demog_model <- svyglm(api00~mobility+ell+hsg+meals, design=dstrat) svypredmeans(demog_model,~enroll, predictat=c(100,300,1000,3000)) } % 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/fpc.Rd0000755000176200001440000000306014423654147013435 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{ \verb{https://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/surveysummary.Rd0000755000176200001440000002113414227413234015632 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,influence=FALSE,...) \method{svymean}{survey.design2}(x, design, na.rm=FALSE,deff=FALSE,influence=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,influence=FALSE,...) \method{svytotal}{survey.design2}(x, design, na.rm=FALSE,deff=FALSE,influence=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{influence}{Should a matrix of influence functions be returned (primarily to support \code{\link{svyby}})} \item{rho}{parameter for Fay's variance estimator in a BRR design} \item{return.replicates}{Return the replicate means/totals?} \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) ## weights that are *already* calibrated to population size sum(weights(dclus1)) nrow(apipop) cdclus1<- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc,calibrate.formula=~1) SE(svymean(~enroll, dclus1)) ## not equal to SE(mean) SE(svytotal(~enroll, dclus1))/nrow(apipop) ## equal to SE(mean) SE(svytotal(~enroll, cdclus1))/nrow(apipop) } \keyword{univar}% at least one, from doc/KEYWORDS \keyword{survey}% __ONLY ONE__ keyword per line survey/man/svysurvreg.Rd0000644000176200001440000000352113517345016015116 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/svrVar.Rd0000755000176200001440000000246613517345016014154 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/estweights.Rd0000644000176200001440000000716114423551650015051 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/as.svydesign2.Rd0000755000176200001440000000202213517345016015354 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/open.DBIsvydesign.Rd0000644000176200001440000000252613517650711016156 0ustar liggesusers\name{open.DBIsvydesign} \alias{open.DBIsvydesign} \alias{close.DBIsvydesign} %- 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, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{con}{Object of class \code{DBIsvydesign} } \item{\dots}{Other options, to be passed to \code{dbConnect} or \code{dbDisconnect}.} } \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/svycoxph.Rd0000755000176200001440000001172314141100455014536 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{AIC.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, rescale=TRUE, ...) \method{predict}{svycoxph}(object, newdata, se=FALSE, type=c("lp", "risk", "terms","curve"),...) \method{AIC}{svycoxph}(object, ..., k = 2) } %- 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{rescale}{Rescale weights to improve numerical stability} \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}{For \code{AIC}, more models to compare the AIC of. For \code{svycoxph}, other arguments passed to \code{coxph}. } \item{k}{The penalty per parameter that would be used under independent sampling: AIC has \code{k=2}} } \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 \code{AIC} method uses the same approach as \code{\link{AIC.svyglm}}, though the relevance of the criterion this optimises is a bit less clear than for generalised linear models. 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/api.Rd0000755000176200001440000001110514413607127013430 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 has been discontinued at the end of 2018, and the archive page at the California Department of Education is now gone. The Wikipedia article has links to past material at the Internet Archive. \url{https://en.wikipedia.org/wiki/Academic_Performance_Index_(California_public_schools)} } \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/svycoplot.Rd0000644000176200001440000000372013517345016014722 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/svycdf.Rd0000644000176200001440000000355513517345016014164 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/myco.Rd0000644000176200001440000000361214413717610013626 0ustar liggesusers\name{myco} \alias{myco} \docType{data} \title{ Association between leprosy and BCG vaccination } \description{ These data are in a paper by JNK Rao and colleagues, on score tests for complex survey data. External information (not further specified) suggests the functional form for the \code{Age} variable. } \usage{data("myco")} \format{ A data frame with 516 observations on the following 6 variables. \describe{ \item{\code{Age}}{Age in years at the midpoint of six age strata} \item{\code{Scar}}{Presence of a BCG vaccination scar} \item{\code{n}}{Sampled number of cases (and thus controls) in the age stratum} \item{\code{Ncontrol}}{Number of non-cases in the population} \item{\code{wt}}{Sampling weight} \item{\code{leprosy}}{case status 0/1} } } \details{ The data are a simulated stratified case-control study drawn from a population study conducted in a region of Malawi (Clayton and Hills, 1993, Table 18.1). The goal was to examine whether BCG vaccination against tuberculosis protects against leprosy (the causative agents are both species of _Mycobacterium_). Rao et al have a typographical error: the number of non-cases in the population in the 25-30 age stratum is given as 4981 but 5981 matches both the computational output and the data as given by Clayton and Hills. } \source{ JNK Rao, AJ Scott, and Skinner, C. (1998). QUASI-SCORE TESTS WITH SURVEY DATA. Statistica Sinica, 8(4), 1059-1070. Clayton, D., & Hills, M. (1993). Statistical Models in Epidemiology. OUP } \examples{ data(myco) dmyco<-svydesign(id=~1, strata=~interaction(Age,leprosy),weights=~wt,data=myco) m_full<-svyglm(leprosy~I((Age+7.5)^-2)+Scar, family=quasibinomial, design=dmyco) m_age<-svyglm(leprosy~I((Age+7.5)^-2), family=quasibinomial, design=dmyco) anova(m_full,m_age) ## unweighted model does not match m_full glm(leprosy~I((Age+7.5)^-2)+Scar, family=binomial, data=myco) } \keyword{datasets} survey/man/svykm.Rd0000644000176200001440000000774413517345016014043 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/make.calfun.Rd0000644000176200001440000000375513517345016015054 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/HR.Rd0000644000176200001440000000313114073741722013167 0ustar liggesusers\name{HR} \Rdversion{1.1} \alias{HR} \alias{ppsmat} \alias{ppscov} %- 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) ppscov(probcov, weighted=FALSE) } %- 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} \item{probcov}{Covariance of the sampling indicators (often written 'Delta'), or weighted covariance if \code{weighted=TRUE}} \item{weighted}{If \code{TRUE}, the \code{probcov} argument is the covariance divided by pairwise sampling probabilities} } \value{ An object of class \code{HR},\code{ppsmat}, \code{ppsdelta}, or \code{ppsdcheck} 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/svygofchisq.Rd0000644000176200001440000000242313743755164015236 0ustar liggesusers\name{svygofchisq} \alias{svygofchisq} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Test of fit to known probabilities } \description{ A Rao-Scott-type version of the chi-squared test for goodness of fit to prespecified proportions. The test statistic is the chi-squared statistic applied to the estimated population table, and the reference distribution is a Satterthwaite approximation: the test statistic divided by the estimated scale is compared to a chi-squared distribution with the estimated df. } \usage{ svygofchisq(formula, p, design, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ Formula specifying a single factor variable } \item{p}{ Vector of probabilities for the categories of the factor, in the correct order (will be rescaled to sum to 1) } \item{design}{ Survey design object } \item{\dots}{ Other arguments to pass to \code{\link{svytotal}}, such as \code{na.rm} } } \value{ An object of class \code{htest} } \seealso{ \code{\link{chisq.test}}, \code{\link{svychisq}}, \code{\link{pchisqsum}} } \examples{ data(api) dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) true_p <- table(apipop$stype) svygofchisq(~stype,dclus2,p=true_p) svygofchisq(~stype,dclus2,p=c(1/3,1/3,1/3)) } survey/man/barplot.svystat.Rd0000644000176200001440000000273413517345016016043 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/svymle.Rd0000755000176200001440000001632413640534666014216 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{ Maximises 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(), na.action="na.fail", method=NULL, lower=NULL,upper=NULL,influence=FALSE,...) \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 the optimiser: see the help page for the optimiser you are using.} \item{lower,upper}{Parameter bounds for \code{bobyqa}} \item{influence}{Return the influence functions (primarily for svyby)} \item{na.action}{Handling of \code{NA}s} \item{method}{\code{"nlm"} to use \code{nlm},\code{"uobyqa"} or \code{"bobyqa"} to use those optimisers from the \code{minqa} package; 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 two optimisers from the \code{minqa} package do not use any derivatives to be specified for optimisation, but they do assume that the function is smooth enough for a quadratic approximation, ie, that two derivatives exist. 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) ## Using offsets m3 <- svymle(loglike=dnorm,gradient=gr, design=dstrat, formulas=list(mean=api00~api99+offset(ell)+ell, sd=~1), start=list(c(80,1,0),c(20)), log=TRUE, method="BFGS") ## demonstrating multiple linear predictors m3 <- svymle(loglike=dnorm,gradient=gr, design=dstrat, formulas=list(mean=api00~api99+offset(ell)+ell, sd=~stype), start=list(c(80,1,0),c(20,0,0)), log=TRUE, method="BFGS") ## More complicated censored lognormal 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)) ## censored logNormal likelihood 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) } m<-svymle(loglike=lcens, gradient=gcens, design=dpbc, method="newuoa", formulas=list(mean=I(cbind(time,status>0))~bili+protime+albumin, sd=~1), start=list(c(10,0,0,0),c(1))) summary(m) ## the same model, but now specifying the lower bound of zero on the ## log standard deviation mbox<-svymle(loglike=lcens, gradient=gcens, design=dpbc, method="bobyqa", formulas=list(mean=I(cbind(time,status>0))~bili+protime+albumin, sd=~1), lower=list(c(-Inf,-Inf,-Inf,-Inf),0), upper=Inf, start=list(c(10,0,0,0),c(1))) ## The censored lognormal model is now available in svysurvreg() summary(svysurvreg(Surv(time,status>0)~bili+protime+albumin, design=dpbc,dist="lognormal")) ## compare svymle scale value after log transformation svycontrast(m, quote(log(`sd.(Intercept)`))) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{models}% __ONLY ONE__ keyword per line \keyword{optimize}% __ONLY ONE__ keyword per line survey/man/marginpred.Rd0000644000176200001440000000562113517345016015012 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/psrsq.Rd0000644000176200001440000000256413517345016014035 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/hospital.Rd0000755000176200001440000000165114073741722014511 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{ Previously at \verb{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/svrepdesign.Rd0000755000176200001440000002164014556563037015226 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, degf=NULL,...) \method{svrepdesign}{default}(variables = NULL, repweights = NULL, weights = NULL, data = NULL, degf=NULL, type = c("BRR", "Fay", "JK1","JKn","bootstrap", "ACS","successive-difference","JK2","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, degf=NULL, mse=getOption("survey.replicates.mse"),...) \method{svrepdesign}{character}(variables=NULL,repweights=NULL, weights=NULL,data=NULL, degf=NULL, type=c("BRR","Fay","JK1", "JKn","bootstrap","ACS","successive-difference","JK2","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{degf}{Design degrees of freedom; use \code{NULL} to have the function work this out for you} \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 \code{scale} and \code{rscales} arguments will be ignored (with a warning) if they are specified. 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. The successive-difference weights in the American Community Survey automatically use \code{scale = 4/ncol(repweights)} and \code{rscales=rep(1, ncol(repweights))}. This can be specified as \code{type="ACS"} or \code{type="successive-difference"}. The \code{scale} and \code{rscales} arguments will be ignored (with a warning) if they are specified. JK2 weights (\code{type="JK2"}), as in the California Health Interview Survey, automatically use \code{scale=1}, \code{rscales=rep(1, ncol(repweights))}. The \code{scale} and \code{rscales} arguments will be ignored (with a warning) if they are specified. 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"} The design degrees of freedom are returned by \code{\link{degf}}. By default they are computed from the numerical rank of the repweights. This is slow for very large data sets and you can specify a value instead. \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} interface. 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). The appropriate database interface package must already be loaded (eg \code{RSQLite} for SQLite). 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. } \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/subset.survey.design.Rd0000755000176200001440000000272113517345016016774 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/trimWeights.Rd0000644000176200001440000000440614113110202015144 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, strict=FALSE, 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 repeats the trimming iteratively to prevent this. For replicate-weight designs \code{strict} applies only to the trimming of the sampling weights. } \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/crowd.Rd0000755000176200001440000000205313517345016013777 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/election.Rd0000644000176200001440000000547313517345016014471 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/yrbs.Rd0000644000176200001440000000217514567004143013641 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{https://ftp.cdc.gov/pub/Data/YRBS/2015smy/} for files } \references{ Centers for Disease Control and Prevention (2016) Software for Analysis of YRBS Data. [CRAN doesn't believe the URL is valid] } \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.Rd0000644000176200001440000000165213517345016015221 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/twophase.Rd0000644000176200001440000002124414565003231014505 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"), pps=NULL) 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{pps}{With \code{method="full"}, an optional list of two PPS specifications for \code{\link{svydesign}}. At the moment, the phase-one element must be \code{NULL}} \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. The \code{pps} argument allows for PPS sampling at phase two (or eventually at phase one), and also for Poisson sampling at phase two as a model for non-response. } \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/dimnames.DBIsvydesign.Rd0000644000176200001440000000303413517621352017004 0ustar liggesusers\name{dimnames.DBIsvydesign} \alias{dimnames.DBIsvydesign} \alias{dimnames.survey.design} \alias{dimnames.svyrep.design} \alias{dimnames.twophase} \alias{dimnames.svyimputationList} \alias{dim.DBIsvydesign} \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}{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/svyglm.Rd0000755000176200001440000002021713641450705014204 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, family=stats::gaussian(),start=NULL, rescale=TRUE, ..., deff=FALSE, influence=FALSE) \method{svyglm}{svyrep.design}(formula, design, subset=NULL, family=stats::gaussian(),start=NULL, rescale=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{family}{\code{family} object for \code{glm}} \item{start}{Starting values for the coefficients (needed for some uncommon link/family combinations)} \item{rescale}{Rescaling of weights, to improve numerical stability. The default rescales weights to sum to the sample size. Use \code{FALSE} to not rescale weights. For replicate-weight designs, use \code{TRUE} to rescale weights to sum to 1, as was the case before version 3.34.} \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{deff}{Estimate the design effects} \item{influence}{Return influence functions} \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{ 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}}. } \note{ \code{svyglm} always returns 'model-robust' standard errors; the Horvitz-Thompson-type standard errors used everywhere in the survey package are a generalisation of the model-robust 'sandwich' estimators. In particular, a quasi-Poisson \code{svyglm} will return correct standard errors for relative risk regression models. } \note{ This function does not return the same standard error estimates for the regression estimator of population mean and total as some textbooks, or SAS. However, it does give the same standard error estimator as estimating the mean or total with calibrated weights. In particular, under simple random sampling with or without replacement there is a simple rescaling of the mean squared residual to estimate the mean squared error of the regression estimator. The standard error estimate produced by \code{predict.svyglm} has very similar (asymptotically identical) expected value to the textbook estimate, and has the advantage of being applicable when the supplied \code{newdata} are not the population mean of the predictors. The difference is small when the sample size is large, but can be appreciable for small samples. You can obtain the other standard error estimator by calling \code{predict.svyglm} with the covariates set to their estimated (rather than true) population mean values. } \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/calibrate.Rd0000644000176200001440000003566213706523370014621 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} \alias{cal_names} %- 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) cal_names(formula,design,...) } %- 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. The function \code{cal_names} shows what the column names of this model matrix will be. 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{ Breslow NE, Lumley T, Ballantyne CM, Chambless LE, Kulich M. Using the whole cohort in the analysis of case-cohort data. Am J Epidemiol. 2009;169(11):1398-1405. doi:10.1093/aje/kwp055 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. } \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) cal_names(~stype, dclus1) 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 cal_names(~stype+sch.wide, dclus1) (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 cal_names(~stype+api99, dclus1) (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/TODO0000644000176200001440000000407013517345033012304 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/DESCRIPTION0000755000176200001440000000225314576600372013334 0ustar liggesusersPackage: survey Title: Analysis of Complex Survey Samples Description: Summary statistics, two-sample tests, rank tests, generalised linear models, cumulative link models, Cox models, loglinear models, and general maximum pseudolikelihood estimation for multistage stratified, cluster-sampled, unequally weighted survey samples. Variances by Taylor series linearisation or replicate weights. Post-stratification, calibration, and raking. Two-phase subsampling designs. Graphics. PPS sampling without replacement. Small-area estimation. Version: 4.4-2 Author: Thomas Lumley, Peter Gao, Ben Schneider Maintainer: "Thomas Lumley" License: GPL-2 | GPL-3 Depends: R (>= 4.1.0), grid, methods, Matrix, survival Imports: stats, graphics, splines, lattice, minqa, numDeriv, mitools (>= 2.4), Rcpp (>= 0.12.8) LinkingTo: Rcpp, RcppArmadillo VignetteBuilder: R.rsp Suggests: foreign, MASS, KernSmooth, hexbin, RSQLite, quantreg, parallel, CompQuadForm, DBI, AER, SUMMER (>= 1.4.0), R.rsp URL: http://r-survey.r-forge.r-project.org/survey/ NeedsCompilation: yes Packaged: 2024-03-20 00:51:41 UTC; tlum005 Repository: CRAN Date/Publication: 2024-03-20 15:30:02 UTC survey/build/0000755000176200001440000000000014576431435012722 5ustar liggesuserssurvey/build/vignette.rds0000644000176200001440000000061714576431435015265 0ustar liggesusersRMS0M[kƯAq@3  ] 3iͿE mG=tw[V0h`]WvuHysۡ7&1h]d)015x-.I-{W9ѯi?8(jR0,.T1)T ɜy 45[2ն`2Hj&t:d*GK0t?gGBeMRɱ1eC2YծGPpj 9mvكe|懼>( Uov RTl;593Mw 1Jw"Sꩬ}s/vfGKw0}o/Hsurvey/tests/0000755000176200001440000000000014571451657012770 5ustar liggesuserssurvey/tests/toy_example_for_postStratify.R0000644000176200001440000000307313743475476021112 0ustar liggesuserslibrary(survey) # Dummy data for testing nonresponse adjustments toy <- data.frame(id = 1:10, dummy = 1, class = c(rep("A", 5), rep("B", 5)), responded = c(rep(TRUE, 8), FALSE, FALSE), weight = rep(100, 10)) # With jackknife replicate weights toy_repweights <- matrix(rep(1000/9, 100), nrow = 10) diag(toy_repweights) <- rep(0, 10) # Scramble up which person is in which jackknife group toy_repweights <- toy_repweights[sample(1:10, size = 10), ] toy_design <- svrepdesign(variables = toy[, 1:4], weights = toy$weight, repweights = toy_repweights, type = "JK1", scale = 0.9) # Get the sum of the weights for the full sample poptotals <- as.data.frame(svyby(formula = ~dummy, by = ~class, design = toy_design, FUN = survey::svytotal)) poptotals$Freq <- poptotals$dummy poptotals$dummy <- NULL poptotals$se <- NULL # Adjust the weights of the responding sample to match to the full sample adjusted <- postStratify(design = subset(toy_design, responded), strata = ~class, population = poptotals) # This works for the weights... svyby(formula = ~dummy, by = ~class, design = adjusted, FUN = survey::svytotal) # ...and some, but not all, the replicate weights stopifnot(all.equal(colSums(toy_design$repweights), colSums(adjusted$repweights))) survey/tests/datos_ejemplo.rds0000755000176200001440000001307713676544610016337 0ustar liggesusers] XTUQds DLMILAD]s J2s%si}-ܲ@f()/Xay3\fyY߻P(vu ~Tԍ!t7 ] Q,NkkDzy('&YX K>a>EQ+o m/YZS3X|GD}S|G#A}Vj3q{;K}F;e1+BXA.A_B&Ţ15#k ׌kWZPG}L;?ʍy(H@g_q扨J&[0?Y< eut*}IH <4B!HT0)h73vy*XLJN_n}_Z,餕I (_5=A~GhbܾJ&yx<ڂKkkh'c¼ZbIhn=3^:n<^_!Y! 5Brp;R+ O#'$6oX/ԙ !Xd ˉz!_= cIgܟ"5IJA\?(o6 {E}IW%Ts1v*4՝a}S2i#FFPaIV)Ǫ22T9ɡʜ#23Rr( GffUCr*G~W l~R^3;ϧi|i{͵U[j-]r v}:קœ+[n-*XTzX|cK=^9枫xS_[[oSRxO?7͍־'kVnp?gϳKk/ZkߟV\|Vu|Q?hިlŸ[St1Az^3^b!y fę6G*N,TWa~*gqcgE:ayzEF`n_Y LۿIy/[ rS}z> ٥ܶ0QӲ[Χ-okـ`7yq{|8he/$Ī_MP=zDo?'a#zy9І@> gz9yj$WNf|VUD  ^*_^ؠ xv>2Omd; #Cq*3ث(4čړqy#[f Mׇ?<#DE+,Lq<Н=|ˣvN^^``BZ#bл'ԟA0yKl7}`#OQ5QzyW5>oϱOf&ۦ1iuk0qWeW$!},;3Ou+n,SP4![E{'|[(yDzaqm!@`%Y=xUnFgh87`T~8o5? }d,¾¿ڿR d W!QO=4ΡSV^w$Oqc7je6:~A~wX3cxY6STmu%f㔎G '#跓|v>w.[n_h:/]'KH: uN B'^Fz5^[ݛ B} z?NyXVɟVĔ^As#SlK u(? ܻӼXՂ/ P׀D|r՛~=^&'"S Aِw O%ja&yNNu?-~~?EgH!4^U#ԙeʤ,UFNG Ə~VV%g*UJu05+3)]^rJ2%GRg*:lSym=w'_c|[X_|kX5Z׊Ebݻ7babvq>r"CDyF(yX/ GÐƶ'gQ<]}vjw~55l-QOv8 pl we6D%l/F^+>q r[FF:=oYaj`7٦at^ǺeX[lW`<8OxTq{p o2ƶ/#[,4P[C"]ϫPDq7yA%u>s >ӏ%;W]ON~saj*yEK^oe-M=^nyΖ"We+#7QixG Kv'kNkQdQq_ױ ̈]wyNYcrͩYQ}i9BB{9:k+[7q%I9I|Ur;uʛΘr>ﺚ7< 塐ߵDx mEޑxtGq]p8ޅF8X;dn9}kYs|ۨ{v'+?_uԢhT}tDoZ'/AoVeTgu}0m}r\3 VW6ȱ_Qx@r 4]$#$ļX.q,[lJ7 425!C|^xD6k{gw0/ʿ=0?h/LGb|na~6tze"#~XNoKx6u}\&=6MCu)r G,+l10瑸2z!h~8 8.C|8Q7׎"HF&E#ȃq X7A:^T/mۻ?ywsu!P&E.ǸA-C=gl{.?{/_o{u;\KŔ_G@VoEw߻/6MCA̱ϟ;{yӨYaɺ{(hӜ] TM׼aݐE}}u^3?ݶN0 yˤVܸ/PC6O)Tpv쪷qj~ ?^Q`ר A~ac2[p u.u "U> _<ܷPw9)Ix|舐HCUl{xq}`'#I)O;຦ uko9B=԰$N{V"<%~Ә ]:|{@?!@ ww:w >e"' %Uqx/ju4˃<];C}vey|π|Ey՘տzaҗ`+KPOܨf@ЪQwIU$E\vx}#N? i #ԁn_Z:'|E~#J 9o& ac|?a1Ͻ3νFBE{|~ 7t(O@\ ^^8qӂ~[W ~M~ O-WR2Dvxy[vmD{{>%y~<w1N_!oyE[z&yMJ1=yJۉ@}Q!UR_Mg.B i}Ÿ؏}?894P8<`?į.{a#<_AܹWmCn-It/AGi[6 HN1SgT3Yi#ҲT߫#}E ЅjST;1f㵇noOgy˻ubc=ΒZ?|~򍶟ݙfk?k>'X|Ydͧ߬6yggk?XɒOkX|aOo~kyxbi}bͺocc'K;^fgky~YkSy:y'V|^gϨcD*'G!~lwU''$-;C 蘬RBFfƦPrggN 0Wr2=z`&U+;ҒӲS7-w FLJ΁u|9B$ V<awsurvey/tests/check.R0000755000176200001440000000271413517345033014164 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/svyolr.R0000644000176200001440000000234014360203326014430 0ustar liggesuserslibrary(survey) ################################################################################ # Example from svyolr: runs OK 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 test<-regTermTest(m, ~avg.ed+stype, method="LRT") ################################################################################ ################################################################################ # If we wrap everything into a function: error b/c it looks for design variable # dclus1 in .GlobalEnv foo <- function(x){ dclus1<-svydesign(id=~dnum, weights=~pw, data=x, fpc=~fpc) dclus1<-update(dclus1, mealcat=cut(meals,c(0,25,50,75,100))) m<-svyolr(mealcat~avg.ed+mobility+stype, design=dclus1) ## Use regTermTest for testing multiple parameters regTermTest(m, ~avg.ed+stype, method="LRT") } # OK foo(apiclus1) # Clean-up everything but apiclus1 and foo rm(list = setdiff(ls(),c('apiclus1','foo','test'))) # Error test2<-foo(apiclus1) ################################################################################ all.equal(test,test2) survey/tests/README0000644000176200001440000000501214571435540013637 0ustar liggesusers3stage2phase.R: twophase designs with three-stage sample at phase 1 api.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 degf-svrepdesign: check specifying degf to svrepdesign rather than computing it 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. rss_scores.R: Score test example from Rao, Scott, and Skinner (1998) 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 quantile-chile.R: example of interpolating for quantiles, from Chilean stats agency na_action.R: check that svyglm works with na.action=na.exclude svyivreg-var.R: check that summary.svyivreg is finding the right variances svyolr-rake-subset.R: make sure subsets of calibrated designs get handled correctly anova-svycoxph.R: check that symbolically nested and linear-algebra versions of anova.svycoxph agree survey/tests/domain.Rout.save0000644000176200001440000001553313517345033016043 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/twophase.R0000644000176200001440000001176213517345033014741 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.002) ## 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.R0000644000176200001440000000354513517345033014503 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/simdata1.RData0000644000176200001440000020110013517345033015367 0ustar liggesusersxTI;%v-hp  wsjf13;t<,t[uXikۧ^&RRҡLۥuf6RgSd2E+V=ZbRXbŊ+VXbŊ+VXbŊ+VX&RZbŊ+VXbŊ+VXbŊ+wΕn׼{v]_YW[p?zBwyg֜ rm=ք P z[ :Q ~L-<ttd_C>ug6tZA@k;CkïvھAkï 3AS> =o|ZTЍ:uBgď:ou_SpHS.l.x=ȷbU=zsh|TcȦ]Fևo5;s#3)"]4@7/4@[ WnhANC Ю3@ <@ WȼFz54D=BLL$0U0S=n4D_46|-oFX֨ 8 ?66&.l i, }ײSwZ@Z.-Z"hy\ &D,h*ČV k+Ȼ5Mk|5rְY[#j+׭ўp+[0mm 6PTgAi+ mO0 qkmoNmj>j*CyW;Āvvu|t&Q>{ DƠ#G]#G; @_t@;uo u@;/ttLGGȵc#X]KvD8g:xftP'ġNE}T'wB[;5P;/0S0t7Qp} mdtN]. Kw?ΨSgΰ:_ uNww@ Obbvßt_}s'>K>NqGFA{ H% -/CV !!x_O =s  c^^PAJ/ zNF ^_B ^ zgO& 2,z#.@ }@7{}О>hK>>A[ {mw_^L_fAaAQAybT?wCѯ@c~B?[__6g{Âı < P??Pwg 14i   3 AA34BÅPP+ EF PЅ "SCBO!A#N PW !nyaQa~8 5 Ða {&@c!p? ‘)uZ1TD7A߯%bT"?"Wy77!񅉄o,-G"EŽ"EOE"D|MGB#"QH䧑!_zE H鑨O$|HTA\l _ߏ:=m [ 79A mO#~N^ @ߦ))-)=й)SsOA|X4e`n }*|TİNEn5}7q|Z0< @1uZf.+\Źh\a.:x.<ēyW  3#̇3#nG^4>|A "͇_''{ [Y Q`4~eaA`4Olx1rhbbo/-F|^|E\߱X?eeˠ0XuYfAhyty [R_YpZ[Z[Z~VT |'ʼ5Ћ5z amv6O_ XS0Ym\? `6~@]Zwl Ч#|7`'sm@<05f #o=nl6nqو`<bFƳ l.o|asO6@7UTx@+%t ' 8lF&A>cq|f8j{gf Č-:-ȵ  Mb[࿶`ܲڂlɢa?ш[{V%ǭ[C[ö:$>q+VVM@"ڊؿu_m)۶|_Q6mmx궝651g`6&?@;wy;Юs;Ɏ~`Dxom";`;;0;K!#(N9@04NA;O]750]n&i7tbwiAn0cF 9^"x$=@=YuZ8ۋg/tr db/>}:dq>{c̿ovmޟ!(o.G޿F^=ۏ~ĵ]#N@>pyrPDvutU>>Y?6<OBu(ZA8C p t?s<~]DZAzrȧN8 kON4h '&;qDɬߝD.qcI0rc"t$|IITqB'b#B~ЍX0:;2/"Ţ b' v_z!v~B?"dv9E͋K. c]RCVHp>AE*l*sA OrW!\mMbU,,Џk9Z]a}m:u ~ v~ u Peסk77nBo$ @V]O _r ;/7#n B~x  rtRo۰A6dv6vg =JFNq{ { _s| g1 ;;ݙЧ#o%]ǘ>l>}Ě'`"?*@_>D> 3g8 `S GK/@} 88ļ8#8B3 0k&@,o'@0N;{/+_yz>@7C/c|FV 0yy#gÿ#׉o15z~%kץPF:%>5kkI^#^%@{^-іȹ_L N 9[@-1 l{t}AywH=~Yd}! 2C;_coc1=2T0^y| | X_|A@o\L_F J `X >16MjP>v{ jz!h _Fƶ8A &Usg 3i`A`i`Ĥ-/ V`X΀e6`8.k ))Ah [`g_'C)AEh0 9fxd{ƌ̈~XF-@' Nbq!ؗ| !njoMTWh_&ĝ ("Xτ\f9&``& %3 G z Сe6 lli VB"86t7t#~p WhG^\({QP+!@( ;/d69ua?l%'l gIDxw0v*.gs mꞀ~_%+@{rvǂW2[.(xfnrp? @P{3 3&/"ov[uAg0^}ygق@}*~Nf~!_nAWsV|]xU̷\CT>6?:Up` іWBU!^!S!k{0lp.0Pro[ Ч [2)"Ym.v4_v-E/E!+E&̦-H#HC1F1bN %OfSW|ϖ/_*͕*пJM=^0 گ|* F Ǖ*#ר?QV T# VTAlyVE쫚YvTEUmUU#sT~jC>3v)@ lvn]v dl!?*8"؝{ؕ}*Ab=oh_M %v@,p@,ph. Ezuv8"OsKG#t s{ 9łUUNWNog9():Cv·lpɔG+ tw>NKweO  ܂[7np0 now;b(,;|;|y# ,艺{BW<sxN;y Dߕ%ylΫ B>  P^p ^^m\JG =UߕOd6* 2RIb 6B.BT W!vP'tRv6 *ءqGuK_/Ȩ :@!k5G ? Ո-j،U}YO3]i0o-`]!֢ZF:Cqnr!e=|D_ft "BN?3ߖح/| U $vWT{Vm m'gaW A55j' 1A52Q갿Vძch v ]z.Ϣ.W]g9e9cgl޵v؃+֕Q+.z[9 ֭DWxJJilb***ê2j~f5&Lvvqf-|ZZA v!} Pu_\X;7AF zĻGRbӦ܌߬x|Knu}}}ym }E7_$m$ |Şr.Эh { o+z+Vޭ ۠```m>m6ĪmPmПJ~bP1K1b(0w7@cbb1d9@1!hv4xv44u4d~tvqvq< b3g΄ w}zfIt 35g!9 9?r<<82-~b_b rXTls;ȁcb 3}Hb]D_.^.^y\B?\B.!G{ 2dzr 9\F ] B&xx 7.WWUUU跫Sx5Ĝkx5kȥЅk5|5|Tx "א\C=A3Og>y}}1 7QMM&򵛰M&&bMĄnwo!./@F [p~y퓼b|uqw@wK A888qo}A7v8|t>zSz6=<<+6`9S)bSSSg3|3ϐ?>CA{`#{ϛx ]?y ~ K///a/O/K%%K%p ^Y`k`+C7 PW}ƿ=> ^^^F}x8Ax@?ߠO |[-t>uyy4 w~@ uĺ|C}~}@?}]@l:@Ny#dyGę:m]~^>3|g33 |A|A.ġ/|9%8sҀl ' AuJfc cm: T@-^pM <7Ec.Ii>240h :mPf6=fy@>P?h  T-I@fh`v!A+'2 9~.+ւu2  ` +ɃG+g}9N[2_^t= FY{oO9yѯy_&  Wcχ>͇g P|u>V>o Agp 7'w")قEA`yI `M }[+}\xLĦ\~P@["@ʹIr(')_@67<k3|` G5FgU}2D15OM`:^Ay?rl:lQO?~2 ȗ;@`~@@/e6l #Ps'&C ZCGd6!ڰЫ[{v?A %~ j{AA賠 às;=A#u\auo>:S>>_}X6U慎6CBAb (*W3W3@ 6M} ul=kxz5bMkK16555rl9۔Sm_[Z?q~pmaCmٶSx:z=>=bY1=U{^{]G3g|:ThGzg: .w ЦxWbf厈a't *;B{: ~#|]G\GĮhGa'e'NЏB`9  F Fu,;}aϝ/:-:=;#|rg aQΐ}gO<3@ttiS.Ѝ...nW ]!h{WԽ+t+JWPF+bhWȲbq7wriѾh[wȢ;bwYwYwПȿ==Szx$6٣@z@=з==z@Wz 􀮄@~!F\*z?<.~# AB P= zBzB=Ξ{Yt^ DoqoBoBo!e~ sn~o&`g5 @@4[`78Ďa¦S LBBaw♃ BA7!> yF[CB!PPt(bQ(3: -𝡐!|o|͐6u]or0Zt, }  ahO>z#7 o cap+<mGp#Z7~q?>uPGGg@@_> O>g?~}|;}:_;8=ǡaǡ+s'3'Ig??=Xs1  l 3gg`Wg;_N<#Ţc,>E\!9\,l&{,d w❱as.@. "t"^/B`ۗ` K%%Kh%Kг{].# v |+x u1*t*tj?_~_sCЇ_aa7`7 Щ b ߛй܄ݴxM&sr\V}b-o!wq+2[[[-[mm]]]3b<}G#u[~~?F!x~>B?Bġ=qi']C|C0~Ø(n*a|??Fl~}v> t >>)bSOOȯ1Έ߉ǣ^Sx^<L Bėx ėh yy<%ᗰKKK/񞗈5/O_'DL~++Wȏ^A^^߿~9L^/^#6F g~OЭOx't|gϰϩg333d}w~F.3bg_w_2| t KVV4&e6YA6@<@mP4A7&`C/mhlE<'40{eY^Wx>/22dYAufPN@=6M6=-  Tm(0jFf( s\Lr<@  9!ۜ, l14r}__ʂr@ \"7,7>7{@ ܐk2_}\*7*- _Q. F.\ٖ)?e`SeCe e/,R9J9ȵ\?k+u#ltC/{Q>lsC0x_X]8ЏJ6z^ tl|D%ȱt|E%JʐUegeԩ2l22QmT) U[**Г*С**mPUSTT*F6m { -@_AoPG;|ofاC g;q?jOG_C=t._lp!u'zVfgǺfGWsG?#Fæ;;v>wCwz{@&>z}5v,{u9.ar[[÷y!7oؠ7 _=L=F! !>OrhA7 #TB(u4|mRT>(ӕo%ޯ;]UIf[ V uCQ ?F gS'%@uKuKu :q]Ķ:S]|.bV]uԭУl].l.t.t.U1Q^/ևlC_=awa|LȲ^``ԣ!а 5 ?a Af[4on=h 5Bᝍ4i\ttmcAcȷ1k1>q?669@cBưM< @G7j74ܚ@MMg74E5Ek7;MsSs3fUዛ~!w S gK%MK<%MK,-얈-s[VcZ6[Ag[=QְxOU bGč6em`m?mm@۬hc]-tm~n ֮j7W<lwhXf2 鄸ة?@|~J{|lM'XO2`s06`CБ`H0l,%4 F># vntv͝s@]P..s]SWYW|'%3]!O7nn]!G@` nnhc7;{wݡ[ǻCogz11 AB b1!~3~662?DD {:Fv177rސio6>P>uqUĩЗxg_`_0u E ]/BO](d"Л!C׆@W x>?qr(P<(lo(tx(|PĖPCg M E®B_BNcC!xPC{ pxF8>mE vEmxWt)6~;(ą(\碠Qo: { |< t} r))S0f6s*t*ln*8Tm*ii`_Жix4iЋiMG_L?1:z12;2b&1=9VgD}fY33g.3 3 ͂]-@[d hě{B -D=jBDžЕ? /^tD&e΍yZZKki-ZZKk[ҟZZKki-ZZKki-ZZKki-ZZKki-ZZKki-ZZKki-ZZKki-ZZKki-ZZKki-ZZKki-ZZKki-ZZKki-W~Oe-۟).vΟ]ݾuy|~/_~4𦀧GE^w]zj'|97~gJz\V_KRUZ?Sr?ݿjo?Ǟ-פ>Wi_korSrVOli=F~I;g^ï]ZgWׇ?s,69o-W_׿~v?Qk-v;JkXߟݮer뿵mt=~v&m_j;^7t+rT}~~Kzlhy'W=~<~vW_>eR*WӇ_=?>~+o[bGWGrѿ-[˟U#ߪ/jo>hg;nϖkrWϖw*?z߿]n~_~2yGݟ*g϶؍~g9{]y>K,-o}ӷ[OK$_^KSb[BrKϵtU[~^^9'_|+_K3KcRrLs,oꗾU~IeR\ryR9rIGINKە{Vb⳥ۑTM.~ KY~7oWKkR~ORʷG뇥tb0=Rv`8T{I'ծ[K{!Ttklj#IjXz$[Zo-G*zCRH^X*~I$Uϓ/_,?qRzf){H&6$=WG,?,/o?ޓI#Iޤ7ir#X}&֞ۯ%6.Y*.&^Yy-+IoZRJR MR+~6~R{Rv\8ai;QGř{QbTT^^?$5[ʯ$~J%6XJ-$j'+GK=/>yJR%ϷX(HX?&՞,egқUK{Cbc){I^orM+}ER+zXjiM&]??ZڿZJ/w,ei1L{j۞_G+RR߷TL=$CmHr1K!Kǵ>'~-T}zZڎ,WK$~_&~g %ןk }W|.[NI}>矾=YJw/-?I}[()[?MUg :?M.o$_͖{?{OK_wRt~ηIm_=g_=;r᯿?I?#{~x}O{R˟_}柞-XZK,>K[cZr7oSRsozb|hrLJo$wW}=t+,$IN]K[rܹBb$6~W?/lߒ_ zoK+og[Z *~=o?&e\?= %=Ixgo~Ԙ/c_OR#J;۟ʓӎ>3s-HfMבAg }Ŋ ǐ%S.AC#ٜTC=sn] .O:"źZbeSԡƒC(К]Ù?ʀQNo*X.'ٻkh]^|٤oAg?6~u;LK2iXkѣC:zMM7 \UόAn+wA):=Ѝ nWl/T@ 2fL~ _6ЇqdT#Iu{<:vҹW1:>xѳX~Dm!c+v'ufkGƍ)6jKRћ<:=q^*Jpn}|Smہ{)e4PH56{yھOVy[r"sdJl}YUw7AdNUp+48ɵknwZU*Ụ8h 7e#n_Αs6T9N)d<;݅ݨ<7|ͻ;%;%$2YtΧҨs4 LKRNLâSxPM2:EpbȻ I%;+~j,wҙ5utC%dV\3e>R<}u~x5d^aٯ/ITs}ݍT+ʑmh*kVo D bۍ^>U m_kFbrH4ߛd6Iޢk=8Ace2Dm6rQ -7fO܅HsX>)߾z&R>R皳ud\lӤ=bV)n7H?xYa3ەZn>{3xPz3u#ye6yGsd2MHRVJRǓ_M!Cv^"] lEj㽁fvduttÞYJ}ftxԩ4 i(cwͫA#uUɝ#;Ix[d04a̲z#IjuR_ue0)$w,!zjيd$.߿to5=.&myݥQЈkٺuȷ9RthtI*}65Ғn=R=p" #:lzFy&)nNy)Sld]0jٯN.v3R4-2c=V=Y\.w~V~ K]E/dͿ~VR{8ysyy?yt+KH{t3U%K/}L:An};]I3KJXl폌%{T)g$i ;v]Ibڽ+7> }NC] Ɽ4|z9> e&|a6~+.Dj\W`2!iR~E29/ue4 Rs7ovxhU/ǧLɿ[o]ebWoE ה׎_"vdcIUBh[#͌d|_v)'Q75Hf':&M-_CQp#oLݝHu#Y3q\dl >?*n:"t2wV?8i?x7S '] yR~QwIqWS@>$F{ɱǼ" zzd'I?g+ނ?Cgr^{lJϞe x[.2-b,dsֿ-6)d>T`)۫I78;m1-<]`jw76DM%5jF*/}GdC_7ū*Q%G2~6;yA@$q")&!Є Z{IyP.Y&n6CRF*w3簭wQr׿8U:-ˌ!-x")7tsJ.,3tye>wS`)RbDڮBbTB66O/XRyW|Ww?m{KJRU>qb*HA_Rlޡ.z⭻{2w@kk%CDYMIRM Ώ+ߚʎ:;3U]vSZ/1Cr-#|jyUѽ<\geOMפ(D"Dنс|fS᫿=ruE0 /soǶFLxUL^%;^&dJ))15 ϭjo] 窛{ <<48Ezh=k-r.F+x@;q{rPCIFrn!1 n6>}kjo, 65X5by_D72gEw\E^\y"> !)tƀ->BĈ<`xyiϓHd#}/e']hM'07$iMI6'ݒɰe:rםPgx:-&U7k~/+@=Iiki%6$/5 %܅Aٞ6#ӲI'({cGMĩI][SucSG=":_]|ڧsn)ׇ_>'sdƒqʐ`k"]gKOMXS 7 (kuTfXo/Ȅq_8Z^Ro}~O7<[Ҋ*zq(Gyy O8C}") uk-*B_ %$B>UJJ硃=}giHsM۾bʎӁkΜSifKv ip^u*^Wy'Gl3mg^]K>ui펭,U0>ёoFm)b*|[§uG f7CڃҰ1KfYxD^!)VEҧz;kTtK>Uj !]wG&A~^Dn4.BOy17/GyDU}!5ҀjÖNKr1.c䰍tOO߲ RQ^C^ֶUJ#;F{IuނC)I)GeuoIsX&0i{Foٯ'-a6:eѬN!4jB*ϫ%YJ=F%m.vE֜'^-U}*T$M{Det dK\;HԧtiHqx'7]*dV̤k"37 b߇UP:dxgw)~j6EsG5]|hv+\#mlIWcۥV-p|-VݻLW@O)9 )Rv߳Ukǐ&7nMٮc41E^I'o o۟J6{i "gz$Xi?ٯo3yuݰRB O^ O)zdrSJSǟGi=K4_L]цwFz2 Q?J@CĘhC sn"ϟ}^m3y?JZ,2W~`yyzh7SYdžrw;^1'u3mIN_b pQD;i;-X1`{cX9iHm>dͯ- XCm+g4>T<^% XnGe%ܗ2V%cwu72ޕцDW=&|KԮkmBћzXL]e{ ߝ]o>n%iSr[[YQٮ?^IkI㊬4;?+NkPKɫ =]ظ geKJ'zr!m!MG%qQSxlï1X4=T!7Dʒ}4hhGKn;=~O2,uf7[p(Şդu;s͔ aJT /\L6V$-#dIIyR@awCd/@I ~/y=,F:n+#GᾛgwJ%sSU+\JҏzÝWGܑŌӌ̎/L1YxJ_>sڐP^T=ëXr~-|:} stsgRG?~\t4vBLxxdtGI5^S_Z3,\Tl1]mEE!'<fDc=QaWI{[rg-8|^r &/jTgdxhhA~T~jɒ&%T6=g)42if+}FiG+]A7Ϡӡh"Ms 7~qtyKr߇S]ΑOyS9T|}똞dڦ߻K%sd= iA䝤Hix3^291O\1+HvYǎ|o|ygFڻ㮷.r9`@d5H_ZVjK/^7vu?]}Ƒ'_\㐮yHN8^&3+`#y>L{PӵicSj ya_:9u 2gyX>d:*|Kt86]o8H<&Nޒ̮,GT Iw3.C1l=%4M0>nOoI=b#!x`]ꢉdx[*M!kȫ!?};nkQTy^rCՁD{Jx\]& @4]dcʩMQXQƴ<;V-׮iGڶzޙY4&;ݙc09љa({}S2!os:RkEm7b.65CiCjI ݤsQy\$o֖ۑԣe<_2|fpʋ#jtD/)ҤhT0<,K:i#8;ʙ*&;/9CGi"-4&=%f2,_Xxz{iZt3όO>U_#2fZg1ds+c-R ͅ5SKvb;K,9xзO@ԓx3ۏa)")wۖ]1"@>*-w;1#mmOq4\h!~Ʈ z[^_u.-Mۆc"5BQ}R[g^3%Fŧ ѲDy?oi;uLbvG%-ēyIH^"%mR쬜wUA-͕\y[߇OMa.>1dlVyl% |ǎוՍ4Y{9.isT\rQCWǤL}"㘝ۤi<b?!oA}QyY|ϟ JjgKN>vd.%-g$Li| 롿>p_5bDEE;tK*DD ʖ@ҥN\cC;Ԛ|4Ԗux?ޗ"mkA5&67kɘCM:H{>m*m(f(1%'ks[(54bxTJ7Z-V`1oqqy;inV˹D]IxՕAG\"I)iÅt9r8y}`4}ZrZ}kyH;}nJ &M?$$Fz2ozN䛙 RZþ1yC<3-0.]&R<ƭqr.p>#]O6%%Ob{M7܉\5֊ GK.de;#X}P@ҍUaWy^G'+V24 d1UKbvq+2t[>6w*c_A4WژL$wjOzsg]U -ƷBnCeT ̧=oKzqxyX\cХ}nx􁭃 Wn\ Aoz~{0Yֺ#Sߪ|6EAP'JRc.md:SQJ>DJ vK>/r?/ Gu[Yte}NC?kNq$}J̗}\b.!$)I:j}4;{.4y^v#IMFRz>4\S>'ZF`IȐ8g_x~ON1GoMxƸ"gIu;#I>wyJHݝ ' 쐎u&кtD/8m U M%z!c_iլ0 ~.v =cEOCwmIag0dZ$Qv^W6p?p~lx4}Fݯ摵-(9`2|swe)|0:N GAu|R\&#% @&HuHW2՘9M҆ R\VU+5\IwMD+GSG! }]by)/zbXŦ}$`>"㘷tP-鹕*ޏ/> a^sj?6 =L7uJIwm ~)JW^4 0/H$Q?nfHǤ ;$m0)+S~Ir8Ȍ_J2~*'G*I n~D[DV^.|9'Sj^VqA@jIM(-/-h)n/ţl&UN7M>{ہKMs'-D:M-n/"ur{.XO~oIٙgYx9z׹;yM"}mIR:;uP}xH;ǕnFNrܢy-vFz4,Tk#޷;,-7@}Kz4&mo5'flh28&/2{BG1`\I&rn>Lb٥yާrρir52dH<8CB$RP{Hўˑj\I^aRT,J|nsOK_&G;v~iO[ϜJ>]D9P]etY%|y."V n$|v˚I7i'L۵^nl8[ϓkO#Tkr]c 9}C˥zaMI8Ii#私-sɅU5pJYw5v>a0z`^O5qCZ d,RO~EJg|YhwgJ?9Kq݂D2:\|k ".+>hxGI:NP i<_<g'o0#bl }[qY&AҎyT<~P?1.|~ey ۜ7y/i!d3HRy?œ9閒E6 lM;xxy)xQ]W{tǤ?4;5mHkx<{*hsLuKY4\[?םYۈOڭ uI'ΙQY[ $K4h)t㗒z ׅ(~_d$-޼O#Mdj<*ݥ:S=^O x>끤wsgdl|^ tTsm!,w>W\D* n~5myN|Ί4Nv }yzq1U%iv9+6䑂\-}MuI]sNK/޺Gi[=sMIRO uiMy)Wdn/;Hj]2D8C;n@xMEFKӄwD&[4mٽ@_=5\W?"Q o>*"CM t\ڎ"oBD%uq^g_UA\>׾oy>e{y.OUiD*!l<ϦezF0A=~x߂_IǣnK ")2ym#J}Mb<#''e!ؿ{J^骰4[6-4s8:cȘ)V?RxS )NK8ӚO23=1>y=J(-4/|]iaά.w26XcƼ_Hld ,n{ZO96SژqjK>8qN7CI3wt`ҩyg)7Hߝc iJK-ISo^6O3~Ap q*<4yxC8:8 kjXҜ#q|~+jo*K>+ʪ|Ov "OEx~=/ I XO &to¥mֹɣ A:sd# *eNn끎s"q>GR+8e/POdһzɤ2MFľB1|O[R:K))̼2%OT|b$_יҝuo>wnqDa 29< iIv$lJ.b?a+^7|ߒ—޼SJ_\oIR6})_~V2$y}7<.;6Sy}Ndhd]RQEqYv/K:;ɛkVon)Iv1}6ߜg^|FoM+RHrFbKML_R}y>C<ߣr& %ω912=w{-cHs.@|HnsMO}Z#g𼾦_!i/髞 @FȚ*;|ɚ qn/H U)?*\Ic3}T 1.yRTȞ4Ҷd7_#TͼКOT6]9)9!-I[FJ*!3ϗP}|C+.a]ӓPfnFޯHxXSۤ}vZZX}KǑj^- I^HR ~Jq_{^>gilAIWՊm迊oy~[umvQZX&FR:}:Ҷ{IR4;8)43 C4R܂I{|nlCv/٤+M?g&6y`p+}r^2\(h3ir6CּIm-0/c:N32:.X#|GLY_Sy@#(=[29>&G^lN.bwkdo"]DK| S_}Tu %vLucNd'D9:"d|'YO/OYL+ؐ;䷏f -!ߧ&U8@KJz2*09t6xN=k768<Hۑ:?R+ljwm|'m,_^Օݮ7|WE2p|4ܶ~4,=ץKkۑږ!C*nyXgG8 Gi(MC_MN^PLy^%P6PS5 J:KsާcZJ2LZ+Zvikվsa=̍H!+98l؟JcE>_%M{C7&Ot קf^}t҅jCzC,T595o.$]Q:K~μ+/YZjHvfB8eH>|}%\PGn%wUt/N{Uj׀W;-+|w_R.H{A<մ9I: @zQܣޘG)6gue`1<(7]IaPjtKMF|Կ41AZT*^R^w˲ȷ>"i @v]y1'?^my#e]}1nw=͆b2bLֿ41K*q0^?S]V7k6!yyd6,'S>cƒz$.QzZKRts,]Gi)M6$GچD^W9?3TiBW UE>mC>=9q|8ߛSgYwA)yOw+{%+Q>˭E|~ݳo5#5uPK}>|ϔWzQuC/GH1L<ǼN *c\m\}{t1~nh>тK%7 'x?#-#N-#Ra:/?jLfRjPtHHݜ馜 :p /: f2ɛ}(=ʃ|UGm6wz/yasqAqE(-T"WNƆ_J܃~G^@+%lK)Mэz\d^nu[K k' 8O#Bxp;O>띪~>ҎU8ʜY?\RΤ]%mG>s%.yWqCXRU)u&Ei{Q`ksSzw@>|2J)ˑ2HSe%vK?rN[wG~[^?ٙ_9?vx'TW{Ho*y}steKɧH6cD RN 7ǸeG.HlW_Y\c8܎mޏbhJ>e)iY4iM)7:9(q.m'<9Fn % X34wniI zw73p^< 'Ԗ{(f%r#cK á7ɤsF57{FfMCS/_0q~ϣh~S@:.Tb_IBcT/sJ 86q{|R|[㑵oC#Vw|_o4__MΑ}K.6!PRȐw- BU@=GxJ|*k㸭-$|_{9Xд}rtT99yCK<~4̙=V[rMH'\9L˼Xs=#]4|LyԽH ÿ;ۜy=R] rtôQZNt‡ty_a1ۛ }J<2v|}7&~Ԥ,ިx!3qq 'ZUD|J|J]wG\_kWP]P7Ќ3~ IQ( g᷋-qC2%)S7LEϙyp3I]Ґ^7sz-ḨmIjtΫWe.dKnޓΘg #F^MV.&Rsl%f >w۞D6ބ\Dxz"|A/ԂK SG"Ѳ #7MMADjy"cߋ՟%r9䀕D΅m8򜤸~u:e_awr]f)Kt|XqQJv7*"Ky].ݤ*g=ܻWUi{ӻ9gr_unSOެx<=#7L4:v:-$zj+1cF +ˑ#q iY:/9iݸ'Hi9ys[򖼮5se=$v=/g9s^O4Jg6_()yK9|s"+v\"NԻkyim!4/'F7ÿAԝPQ$Z[{])7 _smQr[}bRzxIܝKg&m@3^uhgHύy^٤Kj,ܮz砊2)1.G"x޳:7䑗Ǐmx\݆a㤴ćBZcUvJя\gelGjHw4y}NǽGeJǴms^~c**EqK8䒎i 8ϾדyٖERs~'yץw;{ܖ>6>Q =ɥRW\Z$DžP|o2W2}4G(iEv2Ļi{7w2ϲ>uTk/_Uz|EԊ{^ژLzQ<5%}SVbxr7ۥ$/w C^/;޿z~V󬄴HDr6[Y:a>7C|gJΗ=3WQEI]IC>?|g(7k9>_Q"NrSջx>_9t>¼{tm5loLp)@P2,^VN Gd7@U_:W: P>/fy1Z;To͍*j=Gkm|b2It~=ʲ'1;tt/,98RSr3en+?jrIK^yI:Tܟ8HUǒ}sN|ψtUsUٿ OtDxrWsCHސmZsw~/^3JqSr/StqA^L{Zr>-v =T{IYoxus*ʒCw"if$$]LBy-5wpM|Y?RQe=+U f 4ofXn8?{v ÕyF׺3Rg݋ f;_ĭr *=Ź⻥x=ρPd\/e{]/:6G{;lr]r9X ߛ亝~?_ϓx\{iV/xߒE`K?;VƣsHj3C/D`"|us>ggrunT/]oT]>-blы{I<9[O/ؒނ?ԳwćDIIo[[>䞏)ݸVy Ԑ ߣMg~[g)FO$EmNO؏WWP#>礼tHqNߛm#m#9ܑæ$/߳&;ۗsǓg]=&.y:ʽ%B|\/HrG SJOjJoF%S/{\7q<+O>x(\JpyLsNc- Oo:;K )`Ss޻^Oݤ6fSr[P!㑴Ϝz,L{^Gyaއz *44 {{C};"u7R]"^o/>z̧:#qiڥ9yVȜK{&rY*󾊿+FMNQ&ߟ,mHγ^Qxg{:B:@M;Ԯ_a%Gqm В1 r ̭N5oJ" "1"L09d&'1&w"w~5bgv[UO>= _;o6 8<Ǧ ys9;;]cC8ߘ tmP6yD[ayZjY7@wZȋ_Zls&K@9AuG2^/LgLMژy[a_`n{ _0F5+IQoU廍;<⟈\v~YQec;-ks-.>I?7ԃL X9Q/n㘷?1{6k"kg`~Q?ױA>H; lN͇|[qE+'B,yfIj q;/oLa~G;. ~a>?e?y:~C6G{hj'\7|MwjWkm}ig_uWO P jcgşm_ uOkm U7y;BKEo |+[_80ĩU>_8<|_C4b9k,:,_+2{t9ޙL}W+~Uc\c3#wڷc]Xu}c@}J`^ԩK\|^APH(Ta>O<> iĨstjgC :2Z| v~*ڏP=iaDW_W?C/)_S'g`,-!T6u1W7ݰo!u21|+xW (m䭨OpqG0,\C~Tm:$Ao/U͹nZ>'[s>žQRq#/dJ[ uّ!1 ~U~ԯ=H@;\6 glXH+ ?X6h?Zئ{Q'Կ+Xy:;QvCh1oy[[9wfZAkc?(tUioza>a#MsUwE܋U쩝"oGɂ!Z|y5z< ћye o'[.N*W q> ܭ}zf7s:&KC??5Sٺox%_yT؏<܍>cnOb߸Ĉ;tPO[,ڼ 뗃 Q<~"ɿQW1py9\ͧ>xV[5?V<8TqbC>MVڬwc0b0\.>_'VGj(o6;ޣDi܂iyR CaG&'k?m_% ] uZo l|Icc`]8z >D p|>SVh\08?6>! 튚5z"6nC])xyM Ϝ}+)aa}cNMCYAsߵ a!f_"WhTv;nGfBǼ{bԯ v}u]񡯣NDYsioI噵soK%AWXG#Zxy#:GVj6 <&^6CtS7:Q]w-`j}'d#Vp8 Iw7EBܹKb\^S>x_O)wɈ7'7oòۻ7oN^ƝY0NZbW?aw8>7a%3mᵒk\_K~UB"B^Cw>O_zP5Zؿccfo)Cx=؇얘mLQ߱[y}<{~"j1>^Z+[S΂־>O?u:O.Ю2˄Cxy Z.<XߌøLjq1 M}+n6髧1M`XY/32>3iLoWVu$kڸ벝 *.=QWbtF9JEٱs: EwMn^΄\Ou|L|tXżXsԥyqO/;g ˼j}O5ʯ+s¾M~]'L;PäVw 겪n|:YXXaO/j %lk+-/3oKb>x#Bmm0i!/Y=ꞵvqH1 u e81O.$75Df yeju5<$PdOG|μ56_u./6S}zubhAPҷ}|β_5I{}ݪ>c{;x#Wы7r쳋}ug <Ρ,pn ild7gt|V/x?=3/"i׺,^{j{wcޭfXyl cdu-FlqԯXy,]1ztϚ}Euۊ vgnu`_zO{XtQX>9, l]13Px oMqz}[?:ױKHWf3`4]V6=/\["+|m>N9̻5x[ly]hv ֓V~ߋSVuK]+WO,y#\o|<쭀8.l#_Zu+lM\+x~4~챏 ev>}\O5<]S=0njA]*xwgȴy !G^ɘm;74 ۋFtr 3iwKhuNZ{xD~bks}߄ km׽zӫyp ('Z[WUs.oy֏p3zfvڰ?v(?S W?´R R+t$xx Hż^WU~|^q`^>2hr+kg__-uoMwzlk.Խm;>-:Uc;?z3߭#uwE7; F#*yW0o׸c;'ߊO^,G1?W [q;u]ÆcP;;#O XϚv%^|Q;/ޏ-O_ڕ/9S XRג|曡Qx5?͂&] >9ѰXr[?Mn{vaްj?֒x#35'͟ 4Lgv]u][4f~#~udu6#{@?߿Z~ 5 ~;q`(6wG} #߽މx+ltX]aӽ 1 vjk'ֳ? ʧ#gA; ]k\c7dM,0i!7֥Ĝocz[zxVԗZQZyn +䁃SeQ#l ޱy|5y"޳ b*|w[8;;G<|+n>>oxUmVF۾4mk ?#Ty\7hɵ0V3wKxVE|$}[CS96D\X_kO KVyBY-s*]P ͇7>QzLq&67>w!Vk~=x{.?߅nA<<<6)"Դ{Nj^t#O㌵P+_u(aþB5?%$--b Çm9U]촑v&w o/44TUMԁ"op6a{NXFiۿk1V)-7x4:r0ݻ&a^ÿ<~&lCk~eZc},V [f7>s萖~|ۨ8N{nQj|[=¾g,- :F->b۞V C4f ռzYoh򀧵y"iq;qEY0S!nm0>!b}7廗̈4+_XxODZ?]`V篭2٭n?v޸yn<4Oo9\Ru^ʗzd3]k?Ez 퐦bV\q[q&nRU~v0[u>3!Ow|(E^ƕӃvߘBYT+o9}(7'IgyxdI-.+:t9}t=g $57J/j#[ ȇwۚa@\?ݱo/N'a_@˯#mQ՝I(̫@g7,ϓ~{ⱶwAs|W>T7üU{vʫs!6[iuƊeyYئGUź3l͑?7\5iYtcCZa]<yy/.uF}P^mFW!-k:¯~T}xix _!q[swi]Sy=ekB\m/<:Zy:2_[#OL~iV/ox0~́|yS;;km')q]Z s?|V70lh^fv ^zvnQKWTf>sb3#"v,ƍ|dž+_bڒ狆DSksGhmW/~F!~>y96:O6n6h5kDh7')e8߁^;_n)ռ/X o unNYYBbmRy_.>B\+?8u}QG':nvŚۿ&lR+]nɐcjg'Z"!YT #~X&h6|:WШ#IsLq6[}n`M/=o 1{exȱe`7L9?̯Y^Iȿm1vyCz0lс-l4^ xZ/»i#yAny 눣_m/:";F3 ҉\L7jPlcݾ;ۢ?Lzlmua~yx-Ƶ'. _j{*Oל;d3=棳M1^BiE KVY(p4}~vx+kKQ/9֫xI[.߃oTpc_k~6䕰7mX\S ޥ흰u33}D F2 VW5PB_x钧|< zs7 :bݩ4l6v~0>^Eo`i`eK'thX^^Z{ 4ȇ;fE|neWc=/ &Ԙl,yy+UƱ ҩgs26Dmv흅]*F`&,>Vfȟ=v3Q6;{?fU<_ۇ ZqV}꠷UuO6B+燁>7OO.D}c1ߋwDg*OM}TuG])k¾|oq  흐W$/mu ?ݱȯ4`3'7 .kw1;cݭuMͷ9lB#4$Z9P $g =6'X]{m'U!`ge& ky!.Nv ow2.CFԞp/ڜҍ߳}>e"Oh,7ׄ4v<{ ӛ~5;_r=h2Gz/4}?,k㚨+]y@J3c=!<ˮ_`fO:Ka=; ׿|nƧӎ[`>yM!`Wȯ?^b Ɓԇ1_4xk Qה0qQOU.8πNxOWC^or|A/㝰s砾}g-`?'_r }6 $ݱq ַ /_,qm`}H[{y9a|;a%0[U'}S0xV_ߓ;ħڞgq2?]TtFgG=tB*Y~W+~Q9l\Dݱ+!#kjOX_Tu_;# F&7[׫? 뎃/K}74/!_Y7g0B;i5jF^y]uKI~ 5Cqmu܈+unρ:ױ~;C.u_䧃za"H:xΟnGݥ΃͢ų/*_8Z'K5F޻bfO.򳝃q~N-ǃx;ǃޓEVu=w+,LXkwu=֍!30żIk.xmڞ*C׫V dis'CZל?[!EPXۑ j-~G}ks_1$~:w8[ We 5-6nC0_٭KD7UBy꺋 N@S5v8>rHW9Qn}|&YZྡ9ϗֿ7't`޶{Z+=1 9CH\>S4=#.֘"N+þ.3*ZC؏qa^oqx}ṁ%mE>az)&^O=s&Cwd83 +;̍*^wߚ뚍װ;hȆ#ocɮ'CޠmByw|N"oe} Zytn{1f]q搠^uh\N<}Y|Ȼ>屸tA;/>~:A2mX>eiF\C;!|w mx &[Ҧc6Nu /uFs>u֪q{w>ΕX7i] )|ux 3}ݭ1hL W묗E%N">hm:B>^ JeP|,笫תKu,ZƕW0%/*MN@ǔv{gDbޏ>*{Z_ Ϩu]G^yBF!/d]o8Gcd{קP۟zmUy+%*/ġ_=AȫK|MmݿzcxӐ6wa5РoŵTE<aAWߗHE*F 4wĸIOAV>4mrtZAs?8kWjv$|޴ٜH7%Gyn'VhD+XmQ>^;UbstQ2|ӫg}c~}"?GʨyF=H0z^v&!mFpWi9G/ =^뛢Ungu$<8Ǻxim׭%cռ8t'ᾏ?F0u?bMaOL.|Zi1_Qgoy0ٽyF/ҝͯ[5B^cF-w6j`>OHCYPqZ:?unxūkX@m8G"iq(w-DE~lX^u_9ᥟvU_(Wot0ޭ\ik=[_lYڬ5oz܄g$t&7\ze]:7q_wkb??R|l ]qA*[CGaX2_ߑ4ҫBzS)ڸ _bX?mͿ8u~؇:5Py%#PO˪?=,ZƱ[ь1~ׁ5ݱȇy{Tj>tԧjU(v$~a=}(WMˬݹs=B~|ag;d4S 2diL_[Q6f-??1[|Ni[W/~k+_[chnm2x-n˝MkuAW9V[b6.uϻ=Vahm1P7؈`#ld _5kz-\ZqZiZ>ׇ^Cz}H!3K̮w>;zs5ޙ]Q^QG#z}D>^qG#{}ă}L'{Ž^II_/o$[Nz}'^iww;״G#ΜΜΜΜΜΜΜΜٙ{W{}^ׇ{}^ׇ{}>5kt֌[3fj̚EͺYlZo5fլVj֛Xob&օXb]u!օXκpv^gYκpօ.uᬋȺ]D[dE[dE[dE[l7vNĺHĺH켉]ob]$EjM7vuZuR.2-2-2-2-2-޼7oy[oz֛޼f=/v bMgȚ5k̬i/vb/vb؍.v"v^y{^.]=/z_n_z{M~A'00A"Ũ6.(!F 1JA bh^PәcjZ' 1d!Cb! 1d!Cyb$v^C2Đ! 1dH&yҘ<1D &b#A"F1D b#A"F1D b#AAAAAA6a6a6aY          [ gpM83N8ㄳh2!2\d֛000YzV6H\Bj]2l/uXL5X5X5X5X5gDqFgDqFg383838383838#38#38#38#JdD(%2DFȈQ"#JdD(%$2D\"KdC8g"Ld3q&2Dƙ8\"Kdp .%2D\"DƓxO"Id<'$2DƓxO"Id<'$2DƓxO"Id<, !!$2DDFȨ5"FdԈQ#2jDP*"CEd!2>DƇ"BdPzPV6- /ֹ"X$2rDF1lR7®/r 0&2`bLl 0q0(:Gjֵ̚&6FhmbMl6&6FhbbCLl 12&6FhmbMl6&6FGaeӾ ȠbREbRlP JA)6(ؠMz/1'bcTlQ1*6FƨbSl` L)60[8bcTlQ1*p&6\ņpbUl-\+p&6>ƧbSl|- <'6xObI <'&1$= +FMbCLC̰ɧ7&1$= +~®DiePJ JA)1(%ĠRbPJ J(1%FHXܓbCLbI 1!&1$ae>pMbI7&1$ƛĂĂ`LbI 0&1$ĂXkcMbI5I5&}m֣Q(1$ГzCObIRwR=zѠ~àRbPJ JA)1(%ĠRbPJ JA)1(%ԠRRjPJ JA)5(=( +it̚vƭǭaeNXR#ZjDK-hJ bA,5ԂPRCUjJ U*5Taeޟ/|jK]EV,5ƳxRYj)O&R[jASjK bA,5 RXjK bA,5 RXjJ\+5rFԢZP5ljJm9: bA,)5TPRCUjJ U*5TƧzS=ߩ/ 0.˘RO2cZfLˌi1-3e= +k#)HfMYfXf W*3\eƨ2cTfʌQ)30e22Of ?'3d~2Of1TfzlV6+^YReu2NfɌ:Q'3d,;1dPj22NfɌ:Q'3d/e/NMPY]2K֣Kylj2CMfɌ/A%3d_22cEfȌ"3VdƊXXXox6(FoDx(s9 o ox#7x#7x#7xrLLLL|&(,,{ͰIgiab!b![6h6h6booooFoFoFoxkkkE2 / /"ox7x7x7x7x7x7xAg =vBmG1jڽ:^o^3j kt5FWX+֨%ԗP_B} %ԗP_B}ԯPuy9B\9]+tt:BGWFtMQQQQ1S1S1S1S1S P P P P=6-+7MzSƔ~7kLSƔ>ʨɨߌQ/}g13)k<]ktNO<}ԯ~5gY#~ֈ5bfirhgԦ5"aHX#Ո~5 ˡM}jDѯFjD&|~z/DEjıqFjĮFjĮFjĮcW_hw=߼މr5\-柡+$Ոr5\(W#Ոl5"[V#Ոl5"[f~thӧA2E:/"TU#BՈP5"TU#BՈP5"TU#B//FyjDFyjDFyh#D!F(Z"y#D!F6Bqy̔ mWtD%!* gB"% JPBT$D%!* QIJBѕ%D(!B JPB"%D(!B EWBw#!Oڣtk IHBD"$D$!" IHBD$D'!: INBt$D'!: T)n"r K(~ń(&D1! QLbBń)F#9"#9"#9"# t4Gs1GQ#>}oΚQShV)GrD.GrD.G2/LhVPJJJJm6Q b9"#b9"#b9"#b9"#J9}}}}}}'"DD}"OD>~E+0'"OTz$ 6MQPQ)"*ED"RD1TDާ,_x bED""WD\Kq)"Eğ"OD?'"Dğcx_h_h"QD4F()"2EDQ"TDRQ*"JED}"}ߜ]7)"2EDQ,"TDh.*""WD_+"~Eį"WD_+&~įbWL2"9^RjgԦk"ʙ[ qDb"[Ldl1,&h|ĶSSbbYL,e1,&IJƍ1^1q-&oĸ-B1/&Db_L~1/+&Ļxb]Lq11.&ĸbb\Lq11.&4>w11.+&ı8bXLc1q,h+&rDb"WL䊉\1+&rDb"WLJ\ &WW~+vL)3jU"WBJh+$!%ı8bZBLK(BKb Q,!%D(XBKb Q,!%D1B? [B|Ko -!%%D"ZBDKh -!%D"ZBDKh Q,-!%D"ZBDKh -!%D"ZB\BtKn -!%D"ZBDKh -!%E[ m&sBKv .!%DhR]JqZJK)NKg),%4LcY~.6].%֥ĺXgF{_hߠ+$֥4cf,%DȗR"_J\h.%8S`JL)q0%8SR"_JK|)/%ڥDhȘ[q S"aJ$L)0%D”H S"aJ$L)K)Q1%*DŔM m~o?Q2%JDɔ(%SdJL)Q2%JDɔ⾔(%SdJL)Q2%JDɔ(%SdJL)K)/%D2_Fˈ~/#eDQ42"\FTˈjQ-.#eıbȕ2"WFʈ\l*#VeĪX2bUF|ʈO)#&eĤ2bRFL(ˈI1)#&eeĝw2NFɈ5&#dĚXk2bMFɈ5&#dĚ""0B^y隈;q'#dĝw2NFɈ;Eg1(#eĠ2bPF ʈA1(#eĠ2bPF ʈA1(#eĠAAAAA)#O<#O<#O<#O<#O<#O<#O<#O< O /y⑧<1<1<1/ B>/ 9""9Bνs/ 9Bνs/)"2/KD4"_"|!/_|!/_ m/q|!/_|!/_|!/_|1//"^ hd eF6DD1,}!K_,}!K_җ(F^/ B./ B/*}W|^{ B>/KL"^ȹr{]1{!^ȸ2{!^ȸKW7q|)"_r\|!_̹ m2 |!_b.l|!_Fνs/ 9Bνg/ yBg/ yB[/11<{!^ȳ<{!^ȳ<{!^ȳ<{D 9b}_h7E]~]&~/d Bv/d Bv/d Bv/d Bv/d PE$1{!^ȿ{!^ȿ{I]d Y1qIνs/ 9Bνs/ 9Bνs/ 9Bνs/ 9Bν$-2z!^̬ Q}%yEr|!_sCP$GF/d BF/d PFF/d BF/dKBZ0r|!_<|!_×GN/ 9BN/ 9BN/ 9Ȼ{!^Ȼ{!^Ȼ\{!^ȵE>O/ B>O/)q z!^R9Bμ3/ 9Ȓ,y!3^Ȇlx!^Ȇ x!^Ȁ2%1#B6 /dKJ!]x2ޅw!]r܅,w!]r܅,w!]r܅,w!]r)"]kڅv!]kż  2ޅw!]x2ޅw!]x2ޅw!]x2ޅw!]Rbb{_hӓ3s5̌Ai/'Zs/ 9Bνs/ 9Bνs/܋'ZȿwxjjDԎP;vFmB#3ߑwd;2|Gf#3ߑwd;wd;2|Gf#3ߑwd;}=zz>݈"*"qLoLoLoLoLoB&oB&oB&oB&oB&oJoJoJoJoJoFfoFfoF}eWF}eWF}yS_ԗ_OzS*2wd;Y,|G# ߑwd;Y,|G# ߑwd;Y,|GL{Gv#ޑ]Ȯwd;zGv zG#ޑAȠwQzG#gޑ3șw;ry+F"Sޑ)Ȕwd;2LyG#;ޑȎwd;3BqxG~#'ޑȉw;r9 ## 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/scoping.R0000755000176200001440000000110213517345033014537 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/na_action.R0000644000176200001440000000044714066261522015040 0ustar liggesusers## from Terry Therneau library(survey) load("naa.rda") fit1e <- svyglm( pseudo ~ age34 + ccr5 + factor(times), design= adata.s,na.action=na.exclude) fit1o <- svyglm( pseudo ~ age34 + ccr5 + factor(times), design= adata.s) all.equal(coef(fit1e),coef(fit1o)) all.equal(vcov(fit1e),vcov(fit1o)) survey/tests/degf-svrepdesign.R0000644000176200001440000000114014556563037016342 0ustar liggesuserslibrary(survey) 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) stopifnot(degf(scdrep)==3) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights, degf=4) stopifnot(degf(scdrep)==4) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights, degf=2) stopifnot(degf(scdrep)==2) msg<-tryCatch(scdrep<-svrepdesign(data=scd, type="BRR",weights=~I(1000+0*ESA), repweights=repweights, combined.weights=FALSE,degf=10), warning=function(w) w) stopifnot(inherits(msg,"warning")) survey/tests/3stage2phase.R0000644000176200001440000000251213517345033015371 0ustar liggesusers## simulated data with three-stage sample at phase 1, SRS at phase 2 ## motivated by dietary biomarker substudy in HCHS library(survey) load("simdata1.RData") twophase.full = twophase(id=list(~block+house+ind,~1), strata=list(~strat,NULL), probs=list(~P.block+P.house+P.ind,NULL), subset=~phase2, data=simdata1,method='full') twophase.approx = twophase(id=list(~block+house+ind,~1), strata=list(~strat,NULL), probs=list(~P.block+P.house+P.ind,NULL), subset=~phase2, data=simdata1,method='approx') twophase.rep = twophase(id=list(~block,~1), strata=list(~strat,NULL), probs=list(~I(P.block*P.house*P.ind),NULL), subset=~phase2, data=simdata1,method='full') twophase.repapprox = twophase(id=list(~block,~1), strata=list(~strat,NULL), probs=list(~I(P.block*P.house*P.ind),NULL), subset=~phase2, data=simdata1,method='approx') svymean(~age, twophase.full) svymean(~age, twophase.approx) svymean(~age, twophase.rep) svymean(~age, twophase.repapprox) survey/tests/svycontrast.R0000644000176200001440000000072514251531666015510 0ustar liggesuserslibrary(survey) data(api) dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) rclus2<-as.svrepdesign(dclus2) model<-svyglm(formula = api00 ~ ell + meals + mobility, design = rclus2) svycontrast(model, c(ell=1,meals=0)) a<-svycontrast(model, c(0,1,0,0)) model2<-svyglm(formula = api00 ~ ell + meals + mobility, design = rclus2,return.replicates=TRUE) svycontrast(model2, c(ell=1,meals=0)) a2<-svycontrast(model2, c(0,1,0,0)) stopifnot(!is.null(a2$replicates)) survey/tests/newquantile.R0000644000176200001440000000052413706504553015441 0ustar liggesusers## quantiles with equal weights library(survey) data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) for(i in 1:9){ print(i) all.equal( as.vector(coef(svyquantile(~ell, dclus1, c(0.2,0.5,0.9), qrule=paste0("hf",i)))), as.vector(quantile(apiclus1$ell, c(0.2,0.5,0.9), type=i)) ) } survey/tests/caleg.R0000644000176200001440000001023513517345033014154 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/quantile.R0000644000176200001440000000262613707710052014726 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(oldsvyquantile(~x,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) SE(oldsvyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) SE(oldsvyquantile(~x,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,df=Inf)) SE(oldsvyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,df=Inf)) oldsvyquantile(~y,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,ties="rounded",interval.type="betaWald") oldsvyquantile(~y,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE) oldsvyquantile(~y,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,ties="rounded",interval.type="betaWald",df=Inf) oldsvyquantile(~y,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE, df=Inf) df<-data.frame(x=exp(rnorm(20))) df$y<-round(df$x,1) ddf<-svydesign(id=~1,data=df) rdf<-as.svrepdesign(ddf) SE(oldsvyquantile(~x,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) SE(oldsvyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) SE(oldsvyquantile(~x,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,df=Inf)) SE(oldsvyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,df=Inf)) oldsvyquantile(~y,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,ties="rounded",interval.type="betaWald") oldsvyquantile(~y,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE) oldsvyquantile(~y,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,ties="rounded",interval.type="betaWald",df=Inf) oldsvyquantile(~y,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE, df=Inf) survey/tests/rakecheck.R0000644000176200001440000000305113517345033015017 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/svyby-strings.R0000644000176200001440000000052514221522101015727 0ustar liggesusers ## check that stringsAsFactors fixes the string levels problem data(api, package = "survey") des <- survey::svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) est0 <- survey::svyby(design=des, formula=~cname, by=~both, FUN=survey::svymean, keep.var=TRUE, stringsAsFactors=TRUE) stopifnot(isTRUE(all(dim(est0)==c(2,23)))) survey/tests/anova-svycoxph.R0000644000176200001440000000026714207320246016066 0ustar liggesusers library(survey) example(svycoxph, ask=FALSE) m<-update(model, .~.+I(protime^2)) a<-anova(m,model) b<-anova(m, model,force=TRUE) stopifnot(isTRUE(all.equal(b[2:6],a[c(3,4,6,7,8)]))) survey/tests/poisson.R0000644000176200001440000000063314073741722014577 0ustar liggesusers## check poisson sampling library(survey) data(api) set.seed(2021-7-15) apipop$prob<-apipop$api00/1000 insample<-rbinom(nrow(apipop),1,apipop$prob) apipois<-apipop[insample,] des<-svydesign(id=~1, prob=~prob, pps=poisson_sampling(apipois$prob), data=apipois) stopifnot(isTRUE(all.equal( as.vector(SE(svytotal(~api00,design=des))), as.vector(sqrt(sum( (apipois$api00*weights(des))^2*(1-apipois$prob)))) ))) survey/tests/fpc.R0000644000176200001440000000011613517345033013646 0ustar liggesuserslibrary(survey) ## check many permutations of fpc specification example(fpc) survey/tests/kalton.R0000644000176200001440000000270413517345033014373 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/quantile.Rout.save0000644000176200001440000001240713707710052016411 0ustar liggesusers R version 4.0.2 (2020-06-22) -- "Taking Off Again" Copyright (C) 2020 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin17.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. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > 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 > 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(oldsvyquantile(~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.01543792 0.01264453 0.03386225 0.16131948 2.10605799 > > SE(oldsvyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) x q0.01 0.01554946 q0.1 0.01425828 q0.5 0.03428012 q0.9 0.16457488 q0.99 1.88672412 > > SE(oldsvyquantile(~x,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,df=Inf)) 0.01 0.1 0.5 0.9 0.99 0.01545209 0.01265608 0.03388011 0.16145776 2.10061576 > > SE(oldsvyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,df=Inf)) x q0.01 0.01556240 q0.1 0.01420086 q0.5 0.03430175 q0.9 0.16461019 q0.99 1.88818131 > > > oldsvyquantile(~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 > > oldsvyquantile(~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.02547977 q0.1 0.02547977 q0.5 0.02547977 q0.9 0.15287859 q0.99 1.88302540 > > oldsvyquantile(~y,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,ties="rounded",interval.type="betaWald",df=Inf) $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 > > oldsvyquantile(~y,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE, df=Inf) 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.02551067 q0.1 0.02551067 q0.5 0.02551067 q0.9 0.15306404 q0.99 1.88450896 > > > > df<-data.frame(x=exp(rnorm(20))) > 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(oldsvyquantile(~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.03576771 0.07329496 0.30149917 2.03440784 1.88468597 > > SE(oldsvyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE)) x q0.01 0.00000000 q0.1 0.04598541 q0.5 0.25943731 q0.9 2.12343073 q0.99 1.91998924 > > SE(oldsvyquantile(~x,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,df=Inf)) 0.01 0.1 0.5 0.9 0.99 0.03637398 0.07470310 0.29938115 2.16381289 2.00708994 > > SE(oldsvyquantile(~x,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,df=Inf)) x q0.01 0.00000000 q0.1 0.04732818 q0.5 0.24957966 q0.9 2.25211815 q0.99 2.04043154 > > > oldsvyquantile(~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.1 0.15 0.75 2.4 8.68 $CIs , , y 0.01 0.1 0.5 0.9 0.99 (lower 0.100000 0.1000000 0.3674054 1.352279 0.5674674 upper) 1.132533 0.3464541 1.6303784 8.473337 10.2000000 > > oldsvyquantile(~y,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE) Statistic: y q0.01 0.10 q0.1 0.20 q0.5 0.80 q0.9 2.40 q0.99 8.68 SE: y q0.01 0.00000000 q0.1 0.02611112 q0.5 0.26542051 q0.9 2.10908603 q0.99 1.91777710 > > oldsvyquantile(~y,ddf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE,ties="rounded",interval.type="betaWald",df=Inf) $quantiles 0.01 0.1 0.5 0.9 0.99 y 0.1 0.15 0.75 2.4 8.68 $CIs , , y 0.01 0.1 0.5 0.9 0.99 (lower 0.100000 0.1000000 0.3674054 1.352279 0.5674674 upper) 1.132533 0.3464541 1.6303784 8.473337 10.2000000 > > oldsvyquantile(~y,rdf, c(0.01,0.1,0.5,0.9,0.99),ci=TRUE, df=Inf) Statistic: y q0.01 0.10 q0.1 0.20 q0.5 0.80 q0.9 2.40 q0.99 8.68 SE: y q0.01 0.00000000 q0.1 0.02551067 q0.5 0.25244616 q0.9 2.23558589 q0.99 2.03881114 > > proc.time() user system elapsed 1.791 0.148 2.936 survey/tests/nwts.rda0000644000176200001440000000261513517345033014444 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/naa.rda0000644000176200001440000004575314066261522014222 0ustar liggesusers <]ǾTP)9EMD+al!iע-i(I((Tٲ(mJqw<}?s>kw-:Ι6F6$F?GUuMH$Nv 6'n{G{{=oF| w" weW88xxDD$$dd!(!(# "!#h h"h!GF0AAAAa2!1Ti&f "D0 @9s!GX`ab%K,!X!,GXajk56k!G؀a=fG'2g\<<#x!x# @E؉ a7#@G8pBQcN D8p!!! !! B$Y(s."\Bp*B,587n"BH@p!! .=dR"#d N^n;#{ovtu5c"J|<`Il6TH&M.F߿I%ovr[{x9:y1wsq؈/ې~o1(2T^n;\ supwsr}+|^N6d4zՏ~u_Uq{]%?t_~,2,2,2,2,2,2,2,2,2,XF#d[orb˵wId}בeYfeYfeYfeYfeYfeYfeYfeYfeYfeY3w/2,2,2,2,2,2,2,2,2,2]cf__+.726N'->UF܃"lzQ+{eHU'\<|B"bR2r TT44#h#L@`0a*43Lf"B f#,@@Xa1#@X a55[#l@؈ a3#a 3 Vmn|v "DC؅a^} #D8p!(1@'N"BBF8p!,B9 y .!\FFAp!Bux7n!$ FpB2B }i2!W?,{Owot׃_B#-;}~rލŒd{/HK,=9}?ܴ5ܧ`-2=lky$a-Gʎ_׊5'adx\ߖ]5$ŅFFb-mpY5m& B]2 >Zɲ$vDžRV@瓍 uϾ\Պ7dca-`-ޜzڒlH]X ^_q B2.P~{c!"B|HXODM|&dE>|ۊ5zlX _։&a-vpVn2 m7b-dz8k'S換a-|$yLRta-:kGA&vZcMš[`Vwx&c:}k;"!Kga- #^!a-^'-ͬ xsvkHX v[zFa'~WETΐ敖tCE|y褌5eX_r5wB@׺b2֢?ߪ`-TyӖ)dʏ+ĚW O%eT[u*RŦڊȺ 'X \9kFۻ T᚜D:DwN`-nZoXhIƚwwFXs>|w5ZH/k兽 HXzّ QeC}dsc+&?`[2$<:X/җ؊5ĪHX6-Ě&k݋ob-ʡIr95Çy"s ւS-ׇ;͑Y%WGšOM` ւaԂּ?lJ"XMj7MFXs83YOƚkUXw/ c;4$p;fpA!\6`-LwTIWg!PF{!IfSt+&a-BK䏝ÚG$9f,P[DYk ;kaYFX Ixs8k3m=$=8oٲ5{(XyX5lbx_m%ɴb-"kqa fYo#;g}Hƚ Tc.k!Mg昿0|5 C#6Ěנ/\A}i3k0is4MOÛb$fb-:Xy9>!)XK':OƚH!]-XݽWf5m= k]FXs4-7wZg<^h {EkY=Jɦ2b_Pm$G[ꎱчB/[h[ÆX Kmsƚz,<g~9IX^"IX5šX=HšmTEDmBZ}4}Cق\)Xs5 S5;7XgbZi%c-|<֒ϓ/g]7ߍ7;=*̼UqRKN=nd92Ks9-shH!</]5y!ւ/&a`d|+SJygs_my:kʼnvǛD?Kjo];^mǓ ˎT˵ߩD'8DT,vZEFXY4`ujk-%'Kc7n$%-p9Cg)S6b8ۺd3$٤.a-`o4o}$EÛ'Z2IB8IXs4oPD8 կi'aaxۦR]ki=y\ fsXn[ޯXvwVy|&l-k^O?-ïte<֜v5Пq:g<ɳINE zZEƚtyf kk5sov/7S8Y6注w'cMzzd;|洠h? ov?܂1niCC_;Ahp_#ΠAn_Xn/-Zut;_qGqF͎Oƙ(QuI\^Πi+h8%Tp u DGͰQ8'ozt.g/#ΠpR|h{HXwżV(Ux%$alEև!8 Cy\/<~P pe*CHX7ğ* .iuKa&8CR' ꋽW|c "t*D v:\30S3%" uJo#!KIXn 7u,)rp&^:_3(58L)fZM4S Ǚ8q&fw >j/sLNh.(gfFf8/* ٖ~vl-$]({'O]n՞&8_)̣j9 H41;\[H,L4pgСʿdz'%bQXڵJ3Q]V bŠDž$?)WKZ)X7\YP.gn$+gS@3>s<On~ 2[3ѻ;l/׭Pj'aΩ3Y$Ơ8ȫg'DN QXf*E:czj6|~Л Ơ6HqϛUYșiF${ZsKL^ ?=gku5GA&oX ĺfn'>1qg&oVu$uV8{8bW$?+lfǺO.Π.pٖX7^`j,X3p 9M1Ơ}5;8ʏi#X'.D]u'߇*cAoG띱Nٗ~CDIaLkÌ5bbAG@8g |[Aυ`}gmY_ _z:PuI`˩rqT Xj2VgAo8Ճ{33f$vl|au܈ vʌ^J=Hº﫮3ΠD(_ I-xuUtG%[cQ49'6H}cv ycP?|(]q"G.xN^iu1i gP鱰fScH HZa lPcuefSHXw$mbM4} S\uy (Agݣϴ9q&m[jukGLšf|Èsn ;^6d^RuDN`-  p&5>u<>A3ޝsl]qfX_F58Zv|Ù_ˁ1̽:gJSA*֍fUn} p}δ6ĺeˢi8ORbsq_U\xR8dd p&8zDq䛻RH8gQln|\FC876<w;m%/ ouX2Y DďrQX7*kPB7? *NxܴFqvX?y{4WgЦE6zpg̈́y ~cuSfL*48E$.u.i;7p&zrs1ĺe卝QX)S2Z!y025xS>X__c30M)b{ gΐ'{#֥;n\43:)¨kDJuX²vE =4ƙh~O7 3ˣIXu\yA8\8 g9ELӝ]uڻcA뛕vXW\?>gY鼓'3Π߸՘0NإN2 .5gwS붘pW$vELԾ%a]zgޝ>gK0ƺoκ%%XjI1+voX7pv0.0[!Ik@KҁkPǹ^_>MJ!֍G,`ݛ9)gFN[8y3ۂc LAcycIK_kp5,w 9˜y/%a#&3ذ7w= gpVza-b pM?&ߍd?rx3xUFºpEUKJp&hl)A8;4(ƐMlܹl8lV] U;(8O_6[:LLGGC*$/`}&aK\Y{!!{r^6֖9|AkVNlVƍk.)(/Jg\sӄ5x'51i 0eExqr_?5 [Gy!X7.)zgP_ yV!!j2؁vS@Ε3 ٴ;B@h$'%hK@}%PHo]@(-OTdӷP}cڳđ K"D~5Ā=6} $ue%>Z*/Xn7TwYN2L]!Tp(ubESpEIF%`IXk(W66*tDޔ? 5~ #$shcp Q0H̟DEO:>? 6n fG*|Nt¹zżPϼ#Pist9pgWBUz9װZib ok ,g,G[ ڗiDwD or:cƏ=ptL?h):#z~R y?+C \ 9y $ޚȴļ&'O7 z]%*F(hXGD |uN yKw>ڊSv i]zQ 6lb[E\ˉs$~F}DMmCq@\ʰְ;)dR*TwzpC@ԪHoPVgnAOŶ j'G,<+Py?jgZ.ޏAծ\uK@Fy>w3 v'^ u0 HrDA Q<#G3=7_eJɼV?zV}dm"J"+.[+ o*HB(}B)(l;GCV,rI]I\?5"뜉w:M}GqO9D1%]TBCm6H~e(?@8]_2p<1sʅ|;m/~ěs)m7LΌ&J\UeK٣-gbֿ!GŤ}uBb8P}`^IP־zP.|DuT[8kTM\L_NoP:*~V4FO/јϻOoh4Wllʗ3>>ƸoFyՀH^]LdN8 *?ܵր&IK[a8 UR"hT6[SiD 5sePGA/C~#S_@yz(Z޹gS0΢nY!M~pGz[[߿&Kj{Z~2$W:'m_K~Oq}fP ~cfB n]*D wn/Cٸ@Rkrh^gްǬ?/U@9EKQOީ?lGwxA(hYmk(o&Msl2Lx7<>x Ml^5Bdʹ5_'Bg'_ q{lQG2mHhj3#fTH4A| ?r +/ܴ+.ȟ:J{ʼn*UܷMNN`6~ wuy>ͩoš/Fٓ_9.bf lX,/HsI"_0 ^*DSMBEÇGOOO/?I}TsX8nj(PU8k]ɲP?fe{0#NU$={槊vJ)CH޹'O|؊h69TH )hX!􊾣8 RcVϋ;N8޿m?fhKL1oc=~iP|qDzEr&}m#]*%*r#ALjӆ}2i3RiD洆}D>wDyޛϴl4U=b_TrRex_Qڡ H|I8mٗ JД]q͵قMGP3YA4TyEYc=с!#G1F=~8 -h/av_DsiZceTL|J>>ӀFx-rʏGßBM ; ne~To? |n|S|Ss? #ژpVedAQY$R xUSDUBxJOpP iSuFx (Z .Rf+5 v0-_))a ?ʒ[u,7*h*/mvz%&ۣ?[䩟'n+=#u.zy+?mVNJDL@!ac A刽?m+#*b/'W؁&/Yedž'_@y9o,(SʆULLhvڦJ78< ڡY!˟j#(jE+M"jn-NFH ߚS /B W֩@L PŮ4N2pmyQ Td$"ScCT"muۢ\CPPY P+DF 6ޗP ucVe?i̴JXt=-ך] ٴsMyfEG>4F$1-?[E[PJwb"^(ӭX5U, =]h@OyAC8]WAuhA]/̸2y9攘0y;3z}ޙg,l}i8?](TP$gݗ(߮{n =7^9jO\Ycwҗ[Y IGTt]wK\v{oʤCٓQGBJǫko=t +=Dl@K>k.BF.߇?\T7r ȾI4 e-d-\gNr]=^VslGR뺇i| SPTCca%r abI(\8oxhbGNAMʹTt򤷼PUAPsqG^o׉ǏOS}N'UzNtk@ODgMrvTO( 5lg_L<_ c4@Y7Jrg'vH@`ĚZ*#,SWnp~h<Υ ~4YyMIyV@;*=@ei[:~97/R;"̅(Jϫ7=ȫ x}Ճ>len=h~uǃ* ~Dkv;sl}|rz HQSJݎQJ@J`& Rwj$BۓWnR!Ĕ |Q*^cS QowXI-Hսmk:q2 Z eGoK6w25uwv@)^Ae⻤6p{܌C JМ? ٠r0oM,J9&Sûq/ZUg q0PpaR(rОϣǼ::%s!C&~tsQ Q.KYj+b3\?8M/zu=iD~J!mTذՔPTws8Q7ecXO}1w[vpp}BT7}޷|Pu}F6ϗ;ޯ>\z`6?GJćI'|F HS ^&{*s|D%<(nQc %~ݚ#o5PNK:@˜;'^ciC I~ôޮq9 MM죻h ?"\<*iE 8҃ӽaP$'VtP4x!2`m=No KOg |O3=/MY {{)?[/B~ Ǝ (Ua& ?yhTPvҖt4F.Oӑ2%-4zE 2m!X'1|`~ SBہ9V@6x~Aǔ -K~(|y4quvL??*m+?V$r=Q<V}끥!Pj{֜OPÊv1Ԝۗ_#DžuI |MV /_#S#DXN'ӽ( DSY_s%;}uvW0 rw>:We*gN9׆gsVɐѮ;2Fole:[ʊ|NN@QxP-cEF64"a:q/t+ڔ6FVœﻤgpN~O~Bcb`_8T92*q` *o*qޥn72;nrG-\jwɨoy[٭\>f -_eEHkK|J4',]CtGW9>ψ6~a _lX'lu{sTԜz+ht;bQwħϗ=D<jCN=$IYH4C(?@2YbSB*S]4^g&6GE(x(+_=+AcݮRqR3}>S=3قDwaYn[`8vvQPLE"g]?:vE ?*NQbq`49׹H8oƑ,Aou&fux@/~/{s(۽4\{2 }`/bOk,_R Uؼj87|AVsO'H:sk)hA$Ig#e;yMb0z|d^z3{q1m޿ߌwߦ,; 5%޸MŕqZ2gV?5"s˩fEzh ٬}M:?߃yޟAc߼d0Yt= t ΖŞ}G9 |@T1P(w?uAhht:fB,I~[ qJ3@܉O,1.5`~_n/?6/PuC'Ulw?<)J\U,W]zSZt{^( !bӺgnNy>!Ghz9Ҳӡ8d|5+$rotFߎb~Hk4ߐ{ssptP-ly~珿Ob_q~QV ,X3~6?~zfqmMA{ۺ@AmOǬ|H0w2}5GO{˕sm畣IjR~+]U^so^+Bviq.ߝ7 >Y٦Y[d@g*q:w'vXl kS.ST՜MT"S4׀%{}9}UlCW17и.\ܟ!zfp(:tm^:% IG?>J#V9}~{uy>]u>9O!cV~02_|F"NfzFQa:%h3xShbT۽͘⩩ hinyS&L*m Ixttso,Z2joDghF䎹LAJ%bBG5M_a[սBύy>< $R)԰QϷ%$?z1㻱14I2c^*}.8#mߚ5~{UaH_y}d~̘_ygR DuڗQn~c7OG >e*JAc̔&#6@;&}P /ޜ;|?g<ό!1֏Gg]!S}^۫Au׶|0;2?OO2]󾿮M7n=ܾ{ G` wn_F]J[œ_'wVzMtg_>h|A۟`g?'|Ni=#:ľFԀNN+1_PבcV"5QX՘g=&mlq246uK<0{>?|﫟Hg_?MxDOHkp@߾'Q( j"N w{`5G\?|CD*TB4!܀HP0CtTķXG׶.\b\.߱QգAw_)mT|hW~?`bǃ8?G?Kj^H\- Oz {ReOAۏHֲt?~dHktO<]>gn/Psl*%]|[~d=Hx>n54RHʍ.I, ;}}k&o;WAU|}, c}rysZH#9S"Ⱥ||V3.#Q@s[ }p]Bb֟_o`3)KS·_;zzDkG¯T)?9zi˵mu͏*~ģmc>& 6+*9~Z+bG|^cVA _O4-7o?ʜ?L4hO:{4[^O2 d]_[VPU6eи|Ɠl3d\[g'p޵D-Ks*6}占籫cAS*#1HGL|T싲i#K4c1g緿O5c~[oG2^6#WK~|̨mS4-c~7F.G6v2[->Qq{@}VKtge{r=SjF0hQ_YH/1L{}Yg}gdM`mHT#If8~-D|it,}Xۗv=p8YGL<:ŵDbG7 7'o N)C-N Șc/wKnOoO1t26F^e{ _[aUJsp6y~2J盿Kl*FI??:Ic#I?ޗ`/Jw_p\F BCͨvC=GB py܆Crj{[_f(27'/MwӶosӯ P&W_~l椑7~yDi4_k&zt8+` ,X` ,X`߃~vkM׌cvte%טwx:Dt`,d>>|8qZ%:pzzyl//9?{ov^pU"Əޤ_]|=G'o-wxwh{ڡsurvey/tests/svyivreg.R0000644000176200001440000000054613517615116014765 0ustar liggesuserslibrary(survey) library(AER) load("cigsw.rda") des<-svydesign(id=~1, weights=~wt, data=cigsw) m<-svyivreg(log(packs) ~ log(rprice) + log(rincome) | log(rincome) + tdiff + I(tax/cpi), design=des) all.equal(as.vector(coef(m)), c(10.42009 , -1.588135, 0.6140887),tolerance=1e-6) all.equal(as.vector(SE(m)), c( 1.047699, .3394232, .3614382 ),tolerance=1e-6) survey/tests/regTermTest-missing.R0000644000176200001440000000100314261220777017012 0ustar liggesuserslibrary(survey) data(nhanes) design <- svydesign(id=~SDMVPSU, strata=~SDMVSTRA, weights=~WTMEC2YR, nest=TRUE,data=nhanes) a<-svyglm(formula = I(race == 1) ~ HI_CHOL + agecat + RIAGENDR, design = subset(design,!is.na(HI_CHOL)), family=quasibinomial) b<-svyglm(formula = I(race == 1) ~ HI_CHOL + agecat + RIAGENDR, design =design , family=quasibinomial) ta<-regTermTest(a, ~HI_CHOL) tb<-regTermTest(b, ~HI_CHOL) stopifnot(isTRUE(all.equal(ta$chisq, tb$chisq))) stopifnot(isTRUE(all.equal(ta$lambda, tb$lambda))) survey/tests/brewer_cpp.R0000644000176200001440000000051314571451657015242 0ustar liggesusers## pps="brewer" can't use rcpp ## this checks that it doesn't library(survey) data(election) dpps_br<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") options(survey.use_rcpp=TRUE) a<-svytotal(~Bush+Kerry+Nader, dpps_br) options(survey.use_rcpp=FALSE) b<-svytotal(~Bush+Kerry+Nader, dpps_br) stopifnot(identical(a,b)) survey/tests/lonely.psu.Rout.save0000755000176200001440000002473214571451164016714 0ustar liggesusers R version 4.3.1 (2023-06-16) -- "Beagle Scouts" Copyright (C) 2023 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 (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) 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) > ## 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(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : 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(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : 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(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : 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(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : 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(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : 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(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : Stratum (406) has only one PSU at stage 1 > > ## checks for `svytotal()` > > df_w_singleton <- data.frame( + Stratum = c(1, 1, 2, 2, 3), + PSU = c(1, 2, 3, 4, 5), + Design_Weight = c(10.5, 10.5, 20, 20, 15), + Sex = c("M", "F", "F", "M", "M"), + Age = c(30.5, 40.5, 35, 52, 44), + Height = c(6.2, 5.0, 5.3, 5.7, 5.5) + ) > > design_w_singleton <- survey::svydesign( + data = df_w_singleton, + ids = ~ PSU, strata = ~ Stratum, + weights = ~ Design_Weight + ) > > options("survey.lonely.psu" = "remove") > > stopifnot(all.equal( + target = 126625, + current = as.numeric( + vcov(svytotal(x = ~ Age, design = design_w_singleton)) + ) + )) > > options("survey.lonely.psu" = "certainty") > > stopifnot(all.equal( + target = 126625, + current = as.numeric( + vcov(svytotal(x = ~ Age, design = design_w_singleton)) + ) + )) > > options("survey.lonely.psu" = "adjust") > > stopifnot(all.equal( + target = 127579.8, + current = as.numeric( + vcov(svytotal(x = ~ Age, design = design_w_singleton)) + ), + scale = 127579.8, tolerance = 0.000001 + )) > > proc.time() user system elapsed 0.570 0.040 0.608 survey/tests/nwtco-subcohort.rda0000644000176200001440000000166513517345033016615 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.Rout.save0000644000176200001440000000433313517345033015474 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/regpredict.R0000644000176200001440000000305313517345033015231 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.Rout.save0000644000176200001440000000511213517345033016630 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/lonely.psu.R0000755000176200001440000000620114462643117015216 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) ## checks for `svytotal()` df_w_singleton <- data.frame( Stratum = c(1, 1, 2, 2, 3), PSU = c(1, 2, 3, 4, 5), Design_Weight = c(10.5, 10.5, 20, 20, 15), Sex = c("M", "F", "F", "M", "M"), Age = c(30.5, 40.5, 35, 52, 44), Height = c(6.2, 5.0, 5.3, 5.7, 5.5) ) design_w_singleton <- survey::svydesign( data = df_w_singleton, ids = ~ PSU, strata = ~ Stratum, weights = ~ Design_Weight ) options("survey.lonely.psu" = "remove") stopifnot(all.equal( target = 126625, current = as.numeric( vcov(svytotal(x = ~ Age, design = design_w_singleton)) ) )) options("survey.lonely.psu" = "certainty") stopifnot(all.equal( target = 126625, current = as.numeric( vcov(svytotal(x = ~ Age, design = design_w_singleton)) ) )) options("survey.lonely.psu" = "adjust") stopifnot(all.equal( target = 127579.8, current = as.numeric( vcov(svytotal(x = ~ Age, design = design_w_singleton)) ), scale = 127579.8, tolerance = 0.000001 )) survey/tests/cigsw.rda0000644000176200001440000000644513517610741014573 0ustar liggesusersYwXS"*`0DPVa#, BPR+E[GUb[B*^'V:9iGy{!05B{1-# <7MhAD@ ؙ`OЎ@t"LPLЕ;A"MЇp#$8/A? J YC '\Fp9r>7<93+]㚝мl vp۲4oZjr2&4$!IV{co0Ф'q *!J!KI/R'4G]7."y)ؐ%>K_7d/BNC!|ϡ x^ h^; #‚xI}i$A$A}T,'),Ѽ.cbW?<&{R75>ׂqmǭkr >`Y)EH<9 SmH-- !JQ1gj̝Tw0TAK. [Qx{;YhlȠ`zbԻCL43ݷY4֮bhBqڵ|ֈvY[yN*Z_l3MshQO`OĩaĤ86SQU*xd6!#rGbOmEu\!FaW!a'JA< %= N/BN D+e:Xu" {׈+d-aV|ArtWu`c/aQ5O]~Ƣ]Y\dۿ@<ա>{S|[Sð?HS ].m'3D}LP +gFbzU̫)?Ӵޤ Ίr?}|'1Oq6>t8b;=Y?#v^;uf`u~΋|c No\i%JO`#vc;'`eno(Kks{0~fG.c<%đA}G8CԆh7'vTnº޿"0y\ݫ>c)J#e]QLE\݋|NN1=?zn+F Tc^Axj 0>CJS>z%/=ƅc@b@~#/!.Lt$l]P 14ꢖBP-X s}hNn.muT$D=K-om+@Pڑ'!i{{3}9f6[d]kt4|91'p][r{C`ƝABOB#KA둹fTL"K, խDO_[Fݶ<ЦY?Yq=W5m8e{v*#H.h ;eDܓ ~i(]y;rOH,̟2TK]?kxſJm}NNAEF ~@8=0ti$[_Qn+ qOC^>x+Os灸RRa|ܝ'S[ȧc4}}~o^#xn__ 7m[V}=J<^zѽph*La|ŇmfпGW+%Zܳ}MmCMIԶ;XXXWm ]~ڴoz>z۔vDB'?>Y{9ftw -z,֯ǢE=([7$1J{~O?SNY2X"zoohVˏm~F^]iQf? 2qEe y'u&Ґ&ÐԢt>>A~vL33B%u={c%fig<-/2,*/3M\ZԜtNjqE9w}V-cmuܲif%oQD%::3T,{I/|7+:oDgoà0ڿ{IwyNWCU>h8όRg|Ii=B2}ٔ\:Oϋe fxԍ{CiF&ƺ)iD49eAEM&gsE2t\t++M|D-H`OKN^KVf+9ׯzKg&nXzM59% HOsurvey/tests/svyivreg-var.R0000644000176200001440000000042614204276526015552 0ustar liggesusers library(survey) data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) a<-summary(svyglm(api00~ell+meals+mobility, design=dstrat)) b<- summary(svyivreg(api00~ell+meals+mobility, design=dstrat)) stopifnot(isTRUE(all.equal(a$cov.scaled, b$vcov))) survey/tests/kalton.Rout.save0000644000176200001440000000641513517345033016063 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/svyby_bug.R0000644000176200001440000000334514360203326015111 0ustar liggesuserslibrary(survey) options(warn=2) ## Caused warnings and unhelpful results in 4.1_1 (Guilherme Jacob) data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svyby(~api99, ~stype, dclus1, svymean ) set.seed(123) apiclus1$api99[ sample.int( nrow(apiclus1) , 5 ) ] <- NA dclus1.na <-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) # subsetting w/ na.rm = FALSE... svymean( ~api99 , subset( dclus1.na , stype == "E" ) , na.rm = FALSE ) svymean( ~api99 , subset( dclus1.na , stype == "H" ) , na.rm = FALSE ) svymean( ~api99 , subset( dclus1.na , stype == "M" ) , na.rm = FALSE ) # ... looks like this: svyby(~api99, ~stype, dclus1.na , svymean ) # subsetting w/ na.rm = TRUE... svymean( ~api99 , subset( dclus1.na , stype == "E" ) , na.rm = TRUE ) svymean( ~api99 , subset( dclus1.na , stype == "H" ) , na.rm = TRUE ) svymean( ~api99 , subset( dclus1.na , stype == "M" ) , na.rm = TRUE ) # ... looks like this svyby(~api99, ~stype, dclus1.na , svymean , na.rm = TRUE ) # Without missing values, this works: svyby(~api99, ~stype, dclus1 , svymean , na.rm = TRUE , covmat = TRUE ) # ... but this breaks! svyby(~api99, ~stype, dclus1.na , svymean , na.rm = TRUE , covmat = TRUE ) # ... and i don't think this is the expected behavior svyby( ~api99, ~stype, dclus1.na , svymean , na.rm.all = TRUE , covmat = TRUE ) svyby( ~api99, ~stype, dclus1.na , svymean , na.rm.all = TRUE , na.rm = TRUE , covmat = TRUE ) ## Now some more as tests svyby(~api99, ~stype, dclus1.na , svytotal , na.rm = TRUE , covmat = TRUE ) svyby(~api99, ~stype, dclus1.na , svyratio , na.rm = TRUE , denominator=~api00, covmat = TRUE ) ff<-function(f,d,...,na.rm=TRUE) svyglm(f,d,...) svyby(api99~1, ~stype, dclus1.na , ff , na.rm = TRUE , covmat = TRUE ) survey/tests/domain.R0000644000176200001440000001016513517345033014352 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/nwts-cch.R0000644000176200001440000000215213517345033014626 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/survcurve.R0000644000176200001440000000136213517345033015146 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/multistage-rcpp.R0000644000176200001440000002602414526736255016237 0ustar liggesusers## temporarily disable while it's being fixed ## q("no") ## ## Check that multistage() and multistage_rcpp() give same results ## for different options. ## library(survey) # Check for a simple random sample ---- data('api', package = 'survey') api_srs_design <- svydesign( data = apisrs, ids = ~ 1, weights = ~ 1 ) x <- as.matrix(api_srs_design$variables[,c('api00','api99')] / api_srs_design$prob) base_r_result <- survey:::multistage(x = x, clusters = api_srs_design$cluster, stratas = api_srs_design$strata, nPSUs = api_srs_design$fpc$sampsize, fpcs = api_srs_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = api_srs_design$cluster, stratas = api_srs_design$strata, nPSUs = api_srs_design$fpc$sampsize, fpcs = api_srs_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) if (!isTRUE(all.equal(base_r_result, rcpp_result))) { stop("Differences between `multistage()` and `multistage_rcpp()` for SRS") } # Check for a stratified simple random sample ---- apistrat_design <- svydesign( data = apistrat, id =~ 1, strata =~ stype, weights =~ pw, fpc =~ fpc ) x <- as.matrix(apistrat_design$variables[,c('api00','api99')] / apistrat_design$prob) base_r_result <- survey:::multistage(x = x, clusters = apistrat_design$cluster, stratas = apistrat_design$strata, nPSUs = apistrat_design$fpc$sampsize, fpcs = apistrat_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = apistrat_design$cluster, stratas = apistrat_design$strata, nPSUs = apistrat_design$fpc$sampsize, fpcs = apistrat_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) if (!isTRUE(all.equal(base_r_result, rcpp_result))) { stop("Differences between `multistage()` and `multistage_rcpp()` for stratified sample") } ##_ Check whether expected true zeroes are actually computed as zeroes ---- x <- as.matrix(model.matrix(~ -1 + stype, data = apistrat_design$variables) / (sum(apistrat_design$prob)/apistrat_design$prob)) base_r_result <- survey:::multistage(x = x, clusters = apistrat_design$cluster, stratas = apistrat_design$strata, nPSUs = apistrat_design$fpc$sampsize, fpcs = apistrat_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = apistrat_design$cluster, stratas = apistrat_design$strata, nPSUs = apistrat_design$fpc$sampsize, fpcs = apistrat_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) if (!all(rcpp_result == 0) | !all(diag(rcpp_result) >= 0)) { stop("Computations which should equal zero do not.") } # Create a stratified, multistage design ---- data(mu284) ## Create three strata, the third of which has only one PSU mu284_stratified <- rbind( transform(mu284, stratum = 1, y2 = y1 + c(0, 2, 1, 0, -1, 2, 0, 3, 0, 0, -1, -1, 1, -1, 0)), transform(mu284, stratum = 2, y2 = y1 + c(-1, 0, -1, 0, -1, 0, 0, 1, 2, -1, 1, 1, 0, 1, 0)), transform(mu284[1,], stratum = 3, y2 = y1 + 2) ) ## Create domain variables which yield a lonely PSU or a lonely SSU mu284_stratified[['DOMAIN_W_LONELY_PSU']] <- mu284_stratified$stratum == 1 | (mu284_stratified$stratum == 2 & mu284_stratified$id1 == 19) mu284_stratified[['DOMAIN_W_LONELY_SSU']] <- mu284_stratified$stratum == 1 | (mu284_stratified$stratum == 2 & mu284_stratified$id1 == 19 & mu284_stratified$id2 == 1) ## Create a survey design object with no lonely PSUs dmu284_strat <- svydesign(data = subset(mu284_stratified, stratum != 3), strata = ~ stratum, nest = TRUE, id = ~ id1 + id2, fpc = ~ n1 + n2) ## Create a survey design with one lonely PSU dmu284_strat_w_lonely <- svydesign(data = mu284_stratified, strata = ~ stratum, nest = TRUE, id = ~ id1 + id2, fpc = ~ n1 + n2) ## Create subsetted design objects, subsetted to domain with a lonely PSU or SSU dmu284_strat_domain_lonely_psu <- subset(dmu284_strat, DOMAIN_W_LONELY_PSU) dmu284_strat_domain_lonely_ssu <- subset(dmu284_strat, DOMAIN_W_LONELY_SSU) # Check same results for different values of 'lonely PSU' options ---- lonely_psu_options <- c(certainty = 'certainty', remove = 'remove', average = 'average', adjust = 'adjust') one_stage_options <- c(TRUE, FALSE) design_lonely_psu_comparisons <- expand.grid('survey.lonely.psu' = lonely_psu_options, 'one.stage' = one_stage_options, stringsAsFactors = FALSE) design_lonely_psu_comparisons[['results_match']] <- NA ##_ Check for lonely PSUs caused by design ---- for (i in seq_len(nrow(design_lonely_psu_comparisons))) { survey.lonely.psu <- design_lonely_psu_comparisons[['survey.lonely.psu']][i] one.stage <- design_lonely_psu_comparisons[['one.stage']][i] options('survey.lonely.psu' = survey.lonely.psu) x <- as.matrix(dmu284_strat_w_lonely$variables[,c('y1','y2')] / dmu284_strat_w_lonely$prob) base_r_result <- survey:::multistage(x = x, clusters = dmu284_strat_w_lonely$cluster, stratas = dmu284_strat_w_lonely$strata, nPSUs = dmu284_strat_w_lonely$fpc$sampsize, fpcs = dmu284_strat_w_lonely$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = dmu284_strat_w_lonely$cluster, stratas = dmu284_strat_w_lonely$strata, nPSUs = dmu284_strat_w_lonely$fpc$sampsize, fpcs = dmu284_strat_w_lonely$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL) design_lonely_psu_comparisons[['results_match']][i] <- isTRUE(all.equal(base_r_result, rcpp_result)) } print(design_lonely_psu_comparisons) if (!all(design_lonely_psu_comparisons$results_match)) { stop("Results for design lonely PSUs differ between base R and Rcpp implementations.") } ##_ Check for domain lonely PSUs caused by subsetting ---- domain_lonely_psu_comparisons <- expand.grid('survey.lonely.psu' = lonely_psu_options, 'survey.adjust.domain.lonely' = c(FALSE, TRUE), 'one.stage' = one_stage_options, stringsAsFactors = FALSE) domain_lonely_psu_comparisons[['results_match']] <- NA for (i in seq_len(nrow(domain_lonely_psu_comparisons))) { options('survey.lonely.psu' = domain_lonely_psu_comparisons[['survey.lonely.psu']][i]) options('survey.adjust.domain.lonely' = domain_lonely_psu_comparisons[['survey.adjust.domain.lonely']][i]) one.stage <- domain_lonely_psu_comparisons[['one.stage']][i] x <- as.matrix(dmu284_strat_domain_lonely_psu$variables[,c('y1','y2')] / dmu284_strat_domain_lonely_psu$prob) suppressWarnings({ base_r_result <- survey:::multistage(x = x, clusters = dmu284_strat_domain_lonely_psu$cluster, stratas = dmu284_strat_domain_lonely_psu$strata, nPSUs = dmu284_strat_domain_lonely_psu$fpc$sampsize, fpcs = dmu284_strat_domain_lonely_psu$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL) }) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = dmu284_strat_domain_lonely_psu$cluster, stratas = dmu284_strat_domain_lonely_psu$strata, nPSUs = dmu284_strat_domain_lonely_psu$fpc$sampsize, fpcs = dmu284_strat_domain_lonely_psu$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL) domain_lonely_psu_comparisons[['results_match']][i] <- isTRUE(all.equal(base_r_result, rcpp_result)) } print(domain_lonely_psu_comparisons) if (!all(domain_lonely_psu_comparisons$results_match)) { stop("Results for domain lonely PSUs differ between base R and Rcpp implementations.") } # Checks for edge cases ---- ## Zero records ---- zero_row_design <- dmu284_strat |> subset(id1 == "Nonexistent") zero_row_result <- survey:::multistage_rcpp( x = as.matrix(zero_row_design$variables[,c('y1', 'y2')]), clusters = zero_row_design$cluster, stratas = zero_row_design$strata, nPSUs = zero_row_design$fpc$sampsize, fpcs = zero_row_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL ) if (any(is.na(zero_row_result)) || any(zero_row_result != 0)) { stop("`multistage_rcpp()` should return zeros for zero-row inputs.") } survey/tests/defftest.R0000644000176200001440000000117013645212133014677 0ustar liggesuserslibrary(survey) data(api) ## one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) # svyglm model mod <- svyglm(api99 ~ enroll + api.stu, design = dclus1, deff = TRUE) #deffs returned from svyglm model - implausibly high deff(mod) #> (Intercept) enroll api.stu #> 351.3500 457.6799 491.5567 # run mod with same data and glm() srs_mod <- glm(api99 ~ enroll + api.stu, data = apiclus1) # manually calculate deffs clust_se <- summary(mod)$coefficients[,2] srs_se <- summary(srs_mod)$coefficients[,2] deffs <- clust_se^2 / srs_se^2 stopifnot(all.equal(deffs, deff(mod))) survey/tests/testoutput/0000755000176200001440000000000014411726371015217 5ustar liggesuserssurvey/tests/testoutput/api.Rout.saved0000644000176200001440000003543313517345033017752 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/testoutput/scoping.Rout.save0000644000176200001440000000631713517345033020476 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/testoutput/multistage.Rout.save0000644000176200001440000000227113517345033021205 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/testoutput/README0000644000176200001440000000043313517345033016075 0ustar liggesusersThese are tests involving the printed output. They do not give character-by-character identical results on all systems (and in particular, the CRAN Windows system gives slightly different results from any computer I have tried), so they can't be part of the default R CMD check. survey/tests/testoutput/caleg.Rout.save0000644000176200001440000002072713623322530020103 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/testoutput/DBIcheck.R0000644000176200001440000000341613517345033016740 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)) ## 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/testoutput/scoping.R0000755000176200001440000000110213517345033016777 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/testoutput/nwts-cch.Rout.save0000644000176200001440000000610213517345033020552 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/testoutput/caleg.R0000644000176200001440000001023513623322530016407 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/testoutput/fpc.R0000644000176200001440000000011613517345033016106 0ustar liggesuserslibrary(survey) ## check many permutations of fpc specification example(fpc) survey/tests/testoutput/nwts.rda0000644000176200001440000000261513517345033016704 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/testoutput/bycovmat.Rout.save0000644000176200001440000000745013517345033020657 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/testoutput/fpc.Rout.save0000644000176200001440000000542213517345033017600 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 > ## 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/testoutput/nwtco-subcohort.rda0000644000176200001440000000166513517345033021055 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/testoutput/nwts-cch.R0000644000176200001440000000215213517345033017066 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/testoutput/bycovmat.R0000644000176200001440000000563313517345033017173 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.equal( as.vector(as.matrix(SE(a))),as.vector(sqrt(diag(vcov(a)))) )) stopifnot(all.equal( as.vector(as.matrix(SE(b))),as.vector(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.equal( as.vector(as.matrix(SE(a))), as.vector(sqrt(diag(vcov(a)))) )) stopifnot(all.equal( as.vector(as.matrix(SE(b))), as.vector(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/testoutput/multistage.R0000644000176200001440000000012313517345033017512 0ustar liggesusers## ## Check that multistage samples still work ## library(survey) example(mu284) survey/tests/testoutput/pps.Rout.save0000644000176200001440000000763113517345033017636 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/testoutput/quantile-new.R0000644000176200001440000000135214411725742017755 0ustar liggesusers## From Ben Schneider, https://github.com/bschneidr/r-forge-survey-mirror/pull/7 library(survey) data('api', package = 'survey') boot_design <- svydesign( ids = ~ 1, strata = ~ stype, weights = ~ pw, data = apistrat, ) |> as.svrepdesign(type = "boot") # Attempt to estimate variance of quantile using direct replication ---- new <- svyquantile( x = ~ api00 + api99, quantiles = c(0.25, 0.75), design = boot_design, interval.type = "quantile", return.replicates = TRUE ) print(new) old <- oldsvyquantile( x = ~ api00 + api99, quantiles = c(0.25, 0.75), design = boot_design, interval.type = "quantile", return.replicates = TRUE ) print(old) confint(new) confint(old) survey/tests/testoutput/quantile-new.Rout.save0000644000176200001440000000407114411726510021435 0ustar liggesusers R version 4.1.1 (2021-08-10) -- "Kick Things" Copyright (C) 2021 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## From Ben Schneider, https://github.com/bschneidr/r-forge-survey-mirror/pull/7 > library(survey) > data('api', package = 'survey') > > boot_design <- svydesign( + ids = ~ 1, strata = ~ stype, + weights = ~ pw, + data = apistrat, + ) |> as.svrepdesign(type = "boot") > > # Attempt to estimate variance of quantile using direct replication ---- > new <- svyquantile( + x = ~ api00 + api99, + quantiles = c(0.25, 0.75), + design = boot_design, + interval.type = "quantile", + return.replicates = TRUE + ) > > print(new) Statistic: api00 api99 q0.25 565 526 q0.75 756 728 SE: api00 api99 q0.25 19.22732 14.45368 q0.75 13.72320 19.50807 > > old <- oldsvyquantile( + x = ~ api00 + api99, + quantiles = c(0.25, 0.75), + design = boot_design, + interval.type = "quantile", + return.replicates = TRUE + ) > > print(old) Statistic: api00 api99 q0.25 562.2056 525.4800 q0.75 755.1226 726.7813 SE: api00 api99 q0.25 18.91980 14.53474 q0.75 14.13114 18.73837 > > confint(new) 2.5 % 97.5 % q0.25_api00 527.3152 602.6848 q0.75_api00 729.1030 782.8970 q0.25_api99 497.6713 554.3287 q0.75_api99 689.7649 766.2351 > confint(old) 2.5 % 97.5 % q0.25_api00 525.1235 599.2877 q0.75_api00 727.4261 782.8191 q0.25_api99 496.9924 553.9676 q0.75_api99 690.0547 763.5078 > survey/tests/testoutput/DBIcheck.Rout.save0000644000176200001440000001002613517345033020420 0ustar liggesusers R version 3.4.1 (2017-06-30) -- "Single Candle" 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. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > 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(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)) [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 > > ## 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 > survey/tests/testoutput/pps.R0000644000176200001440000000353213517345033016145 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/testoutput/api.R0000644000176200001440000000016413517345033016112 0ustar liggesuserslibrary(survey) options(survey.replicates.mse=TRUE) example(api) options(survey.replicates.mse=FALSE) example(api) survey/tests/bycovmat.R0000644000176200001440000000563313517345033014733 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.equal( as.vector(as.matrix(SE(a))),as.vector(sqrt(diag(vcov(a)))) )) stopifnot(all.equal( as.vector(as.matrix(SE(b))),as.vector(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.equal( as.vector(as.matrix(SE(a))), as.vector(sqrt(diag(vcov(a)))) )) stopifnot(all.equal( as.vector(as.matrix(SE(b))), as.vector(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/badcal.R0000644000176200001440000000063413517345033014311 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/svyby_se.R0000644000176200001440000000042613714425162014746 0ustar liggesuserslibrary(survey) data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) a<-svyby(~enroll,~stype,design=dstrat,svytotal,vartype=c("ci","se")) b<-svyby(~enroll,~stype,design=dstrat,svytotal,vartype=c("se","ci")) stopifnot(all.equal(SE(a),SE(b))) survey/tests/rss_scores.R0000644000176200001440000000114714114021600015251 0ustar liggesusers## Example from Rao, Scott, and Skinner 1998 Statistica Sinica library(survey) data(myco) dmyco<-svydesign(id=~1, strata=~interaction(Age,leprosy),weights=~wt,data=myco) m_full<-svyglm(leprosy~I((Age+7.5)^-2)+Scar, family=quasibinomial, design=dmyco) m_null<-svyglm(leprosy~I((Age+7.5)^-2), family=quasibinomial, design=dmyco) stopifnot(isTRUE(all.equal(coef(m_null), c(`(Intercept)`=-4.6, `I((Age + 7.5)^-2)`=-427),tol=1e-2))) s<-svyscoretest(m_full, ~Scar) stopifnot(abs(s[1]-10.73)<0.05) t<-svyscoretest(m_full,~Scar,method="individual") stopifnot(abs(coef(t)- -32.61)<0.1) stopifnot(abs(vcov(t)-99.1)<0.1) survey/tests/multistage.R0000644000176200001440000000012313517345033015252 0ustar liggesusers## ## Check that multistage samples still work ## library(survey) example(mu284) survey/tests/nwts.R0000644000176200001440000000237213517345033014077 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/regpredict.Rout.save0000644000176200001440000000472013517345033016720 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/svyolr-rake-subset.R0000644000176200001440000000145614204303154016657 0ustar liggesuserslibrary(survey) data(api) dclus1 <- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) dclus1<-update(dclus1, mealcat=cut(meals,c(0,25,50,75,100))) ## 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)) ## rake with the population totals dclus1r<-rake(dclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) # works m <- svyolr(mealcat~avg.ed+mobility+stype, design=dclus1) # fails in 4.1 (should work because svyolr's default na.action is na.omit) m2 <- svyolr(mealcat~avg.ed+mobility+stype, design=dclus1r) # fails in 4.1 (should work because NA values are subsetted out) m3 <- svyolr(mealcat~avg.ed+mobility+stype, design=subset( dclus1r , !is.na( avg.ed ) ) ) survey/tests/logranktest.R0000644000176200001440000000734213714137352015445 0ustar liggesusers## StackOverflow 63333282 library(survey) D = data.frame(unique_id = 1:135, weights = rep(1,135), event_time = c(0.53512437, 1.35655869, 2.00414189, 2.37276648, 3.20343526, 0.96618494, 2.57894309, 0.94575080, 1.25347833, 1.44416450, 5.04038200, 7.80587169 , 6.53631154, 6.31914568, 7.00146597, 9.67616088, 7.94212358, 9.70693890, 10.67575835, 10.06764688, 12.29175616, 13.60092871, 13.12508566, 14.66417522, 15.35250691, 0.93368707, 0.19087611, 3.15533767, 4.40821633, 17.54334957, 17.95177642, 15.50903946, 16.48376185, 20.87956697, 21.24571398, 22.34297263, 23.36042629, 21.01760215, 23.84785038, 26.06105822, 4.16866350, 1.96922485, 0.66199008, 6.76987830, 1.55617685, 0.19095871, 3.13291784, 5.43159409, 9.55805671, 4.31437322, 0.78259860, 5.26415156, 3.45095686, 1.69128712, 8.41942426, 3.33748695, 6.08516173, 2.72897404, 0.22789783, 0.86348009, 2.35707587, 2.97477615, 12.33273800, 0.58532123, 0.14586238, 10.67948547, 4.07655972, 3.94405136, 0.37226898, 1.42558725, 1.47680658, 4.22506540, 1.56703478, 8.37484756, 12.54015087, 1.80994787, 3.66453633, 1.02834532, 1.99065652, 1.23577436, 16.21981618, 14.35039798, 4.15321606, 2.79740679, 0.35538726, 7.46823358, 1.66329088, 7.46525382, 2.62734831, 3.19057957, 0.33317193, 0.09122886, 9.14616245, 2.48542578, 2.37569263, 5.48499630, 2.22749399, 2.64816296, 0.97101545, 1.42468625, 1.27668904, 0.03692447, 1.98783210, 5.47692729, 3.88316178, 0.32921277, 1.77225345, 9.33268901, 2.44517775, 1.49813702, 2.56059172, 3.43194832, 1.22955630, 3.56263947, 9.07060099, 3.58312362, 2.22755370, 4.24783776, 3.46364804, 1.61671354, 11.10973565, 7.18764270, 1.80400046, 6.39833474, 6.72825192, 6.46063344, 5.76855531, 5.27157807, 4.66154734, 3.50019718, 2.27156678, 3.28531594, 2.35699896, 2.94956000, 8.85381736), event_flag = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0), group = c(rep("group1", 40), rep("group2", 95))) svykm_formula = as.formula("Surv(event_time, event_flag) ~ group") svy_design = svydesign( ids = ~unique_id , weights = ~weights, data = D ) a<-svylogrank(formula = svykm_formula, design = svy_design) ii<-with(D, order(event_time, event_flag)) svy_design2 = svydesign( ids = ~unique_id , weights = ~weights, data = D[ii,] ) b<-svylogrank(formula = svykm_formula, design = svy_design2) d<-svylogrank(formula = svykm_formula, design = svy_design, method = "large") f<- svylogrank(formula = svykm_formula, design = svy_design, method = "score") stopifnot(all.equal(a[[2]],b[[2]])) stopifnot(all.equal(a[[2]],d[[2]])) stopifnot(all.equal(a[[2]],f[-1])) survey/tests/rakecheck.Rout.save0000644000176200001440000001112313517345033016503 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/mtcars-var.R0000644000176200001440000000072014141640222015146 0ustar liggesuserslibrary(survey) # don't throw an error on domains of size 1, just return NA input <- mtcars input$carb <- factor(input$carb) design <- svydesign(ids = ~0, weights = NULL, data = input) svyby( ~mpg, ~carb, design, svyvar ) ## same n with na.rm=TRUE as subset(, !is.na) input$mpg[1]<-NA design <- svydesign(ids = ~0, weights = NULL, data = input) stopifnot(all.equal(svyvar(~mpg, design, na.rm=TRUE), svyvar(~mpg, subset(design, !is.na(mpg))))) survey/tests/contrast-replicates.R0000644000176200001440000000133113642747466017103 0ustar liggesusers## test use of replicates in svyby, svycontrast library(survey) data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1<-as.svrepdesign(dclus1) meanlogs_without<-svyby(~log(enroll),~stype,svymean, design=rclus1,covmat=TRUE) c_without<-svycontrast(meanlogs_without, quote(exp(E-H))) vcov(c_without) meanlogs_with<-svyby(~log(enroll),~stype,svymean, design=rclus1,covmat=TRUE,return.replicates=TRUE) c_with<-svycontrast(meanlogs_with, quote(exp(E-H))) v_with<- vcov(rclus1, c_with$replicates) r<- attr(meanlogs_with, "replicates") vr_with<-vcov(rclus1,exp(r[,1]-r[,2])) stopifnot(all.equal(as.numeric(v_with),as.numeric(vr_with))) stopifnot(all.equal(as.numeric(v_with),as.numeric(vcov(c_with)))) survey/tests/twophase.Rout.save0000644000176200001440000002136014567002133016416 0ustar liggesusers R Under development (unstable) (2024-01-29 r85841) -- "Unsuffered Consequences" Copyright (C) 2024 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 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, pps = pps) 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.002) [1] TRUE > > ## 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, pps = pps) 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, pps = pps) 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 0.826 0.055 0.878 survey/tests/testSUMMER/0000755000176200001440000000000014571436153014672 5ustar liggesuserssurvey/tests/testSUMMER/SUMMER.R0000644000176200001440000000166214571436153016032 0ustar liggesusers## CRAN won't allow this test unless INLA is a listed dependency ## which is impossible, so the test is hidden away here. library(survey) data("DemoData2",package="SUMMER") data("DemoMap2", package="SUMMER") if(require("INLA",quietly=TRUE)){ INLA::inla.setOption(num.threads="1:1") library(survey) des0 <- svydesign(ids = ~clustid+id, strata = ~strata, weights = ~weights, data = DemoData2, nest = TRUE) Xmat <- aggregate(age~region, data = DemoData2, FUN = mean) cts.cov.res <- svysmoothArea(tobacco.use ~ age, domain = ~region, design = des0, adj.mat = DemoMap2$Amat, X.domain = Xmat, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3) print(cts.cov.res) plot(cts.cov.res) summary(cts.cov.res) } survey/tests/raowuboot.R0000644000176200001440000000023313517345033015117 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/glm-scoping.R0000644000176200001440000000132313517345033015316 0ustar liggesusers## bug report from Thomas Leeper, fixed in version 3.32-3 library("survey") data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) # pass `family` directly (WORKS!) svyglm(api00~ell+meals+mobility, design=dstrat, family = gaussian()) # passing `family` via ... (WORKS!) myfun1 <- function(formula, design, ...) { svyglm(formula, design = design, ...) } myfun1(api00~ell+meals+mobility, design=dstrat, family = gaussian()) # passing `family` via default argument (DOES NOT WORK!) myfun2 <- function(formula, design, family = gaussian()) { svyglm(formula, design = design, family = family) } myfun2(api00~ell+meals+mobility, design=dstrat, family = gaussian()) survey/tests/coxph-termtest.R0000644000176200001440000000216114141071074016061 0ustar liggesuserslibrary(survey) library(survival) set.seed(2021-6-25) test1 <- list(time=c(4,3,1,1,2,2,3), status=c(1,1,1,0,1,1,0), x1=as.factor(rbinom(7, 2, 0.5)), x=c(0,2,1,1,1,0,0)) # Fit a stratified model mod_c <- coxph(Surv(time, status) ~ x1 + x, test1) mod_d <- coxph(Surv(time, status) ~ x + x1, test1) stopifnot(all.equal(regTermTest(mod_c, ~x1, df = Inf)[c("chisq","df","test.terms","p")], regTermTest(mod_d, ~x1, df = Inf)[c("chisq","df","test.terms","p")])) 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)) library(splines) model<-svycoxph(formula = Surv(time, status > 0) ~ bili + protime + albumin+ns(bili,4)[,1:3], design = dpbc) test<-regTermTest(model, ~ns(bili,4)[,1:3],method="LRT") stopifnot(all.equal(test$chisq, 47.314, tolerance=1e-4)) stopifnot(all.equal(test$lambda, c(1.4764260, 1.0109836, 0.6923415),tolerance=1e-4)) survey/tests/deff.R0000644000176200001440000000201713517345033014004 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/pps.R0000644000176200001440000000353213517345033013705 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.save0000644000176200001440000000235613517345033016001 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.Rout.save0000755000176200001440000001301513517345033015645 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/nwts.Rout.save0000644000176200001440000001632114567002133015560 0ustar liggesusers R Under development (unstable) (2024-01-29 r85841) -- "Unsuffered Consequences" Copyright (C) 2024 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 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) Loading required package: grid Loading required package: Matrix Loading required package: survival 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), design = dccs2, family = quasibinomial) Survey design: twophase2(id = id, strata = strata, probs = probs, fpc = fpc, subset = subset, data = data, pps = pps) 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), design = dccs8, family = quasibinomial) Survey design: twophase2(id = id, strata = strata, probs = probs, fpc = fpc, subset = subset, data = data, pps = pps) 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), design = gccs8, family = quasibinomial) 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), design = subset(dccs8, histol == 1), family = quasibinomial) 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), design = subset(gccs8, histol == 1), family = quasibinomial) 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 0.872 0.065 0.934 survey/tests/qrule-swiss.R0000644000176200001440000000100014526736255015400 0ustar liggesuserslibrary(survey) data_no_strat <- data.frame(x = 1:10, id = 1:10, fpc = 10, probs = 1) design_no_strat <- svydesign(id = ~id, probs = ~probs, data = data_no_strat, fpc = ~fpc) quantiles <- c(0.01, 0.05, 0.1, 0.15, seq(21, 81, 10)*0.01, 0.85, 0.9, 0.95, 0.99) res <- svyquantile(~x, design_no_strat, quantiles, ci = TRUE, interval.type = "mean", qrule = "hf1") stopifnot(all(diff(res$x[,"quantile"])>=0)) survey/tests/quantiles-chile.R0000644000176200001440000000170513706504553016176 0ustar liggesuserslibrary(survey) datos <- readRDS("datos_ejemplo.rds") design <- svydesign(id = ~id_directorio, strata = ~estrato, weights = ~f_pers, check.strata = TRUE, data = datos) set.seed(234262762) repdesign <- as.svrepdesign(design, type = "subbootstrap", replicates=20) options(survey.lonely.psu="remove") values<-datos$ing_t_p[datos$CL_GRUPO_OCU_08=="ISCO08_6"] suppressWarnings({ f0<-coef(svyquantile(~ing_t_p, subset(design,CL_GRUPO_OCU_08=="ISCO08_6"),quantiles=c(0.5), qrule="math")) f0.5<-coef(svyquantile(~ing_t_p, subset(design,CL_GRUPO_OCU_08=="ISCO08_6"),quantiles=c(0.5), qrule="school")) }) all.equal(c(values[1],mean(values)), as.vector(c(f0,f0.5))) suppressWarnings({ f0<-coef(svyquantile(~ing_t_p, subset(repdesign,CL_GRUPO_OCU_08=="ISCO08_6"),quantiles=c(0.5), qrule="math")) f0.5<-coef(svyquantile(~ing_t_p, subset(repdesign,CL_GRUPO_OCU_08=="ISCO08_6"),quantiles=c(0.5), qrule="school")) }) all.equal(c(values[1],mean(values)), as.vector(c(f0,f0.5))) survey/tests/api.R0000644000176200001440000000016413517345033013652 0ustar liggesuserslibrary(survey) options(survey.replicates.mse=TRUE) example(api) options(survey.replicates.mse=FALSE) example(api) survey/tests/confintrep.R0000644000176200001440000000067214464617427015267 0ustar liggesuserslibrary(survey) data(api) dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) rclus2<-as.svrepdesign(dclus2) m<-svyglm(I(comp.imp=="Yes")~1, design=dclus2, family=quasibinomial) if(anyNA(confint(m, method="likelihood"))) stop("NA in confint") mrep<-svyglm(I(comp.imp=="Yes")~1, design=rclus2, family=quasibinomial) if(anyNA(confint(mrep))) stop("NA in confint") if(anyNA(confint(mrep, method="likelihood"))) stop("NA in confint")survey/src/0000755000176200001440000000000014576431435012412 5ustar liggesuserssurvey/src/arma_multistage.cpp0000644000176200001440000003325314576422540016277 0ustar liggesusers//#include #include // [[Rcpp::depends(RcppArmadillo)]] // [[Rcpp::export(rng=FALSE)]] arma::mat arma_onestage(const arma::mat& Y, const arma::colvec& samp_unit_ids, const arma::colvec& strata_ids, const arma::colvec& strata_samp_sizes, const arma::colvec& strata_pop_sizes, const Rcpp::CharacterVector& singleton_method, const Rcpp::LogicalVector& use_singleton_method_for_domains, const int& stage) { size_t n_col_y = Y.n_cols; arma::uword number_of_data_rows = Y.n_rows; arma::mat result(n_col_y, n_col_y, arma::fill::zeros); if (number_of_data_rows == 0) { return result; } // Get distinct strata ids and their length, H arma::colvec distinct_strata_ids = unique(strata_ids); arma::uword H = distinct_strata_ids.n_elem; // Initialize vectors giving start and end rows for each stratum arma::uvec strata_ends; arma::uvec strata_starts; strata_ends.set_size(H); strata_starts.set_size(H); // Initialize checks for end of stratum bool at_end_of_stratum = true; // Prepare to iterate over list of strata arma::uword h = 0; // Get end index of each stratum arma::uvec row_indices = arma::linspace(0L, number_of_data_rows - 1L, number_of_data_rows); arma::uword next_row_index; for (arma::uvec::iterator row_index = row_indices.begin(); row_index != row_indices.end(); ++row_index) { if ((*row_index) == (number_of_data_rows-1)) { at_end_of_stratum = true; } else { next_row_index = * std::next(row_index, 1); at_end_of_stratum = strata_ids(*row_index) != strata_ids(next_row_index); } if (at_end_of_stratum) { strata_ends(h) = *(row_index); h += 1L; } } // Get start index of each stratum if (H > 1) { h = 1; while (h < H) { strata_starts(h) = strata_ends((h-1)) + 1; h += 1; } } strata_starts(0) = 0; // Initialize strata summaries arma::mat cov_h(n_col_y, n_col_y, arma::fill::zeros); double n_h; double N_h; int n_obs_h; double f_h; double scale; // Initialize checks for end of sampling unit bool at_end_of_samp_unit = true; // Initialize sampling unit total arma::rowvec Yhi; Yhi = Yhi.zeros(n_col_y); // Get count of sampling units from all strata, // and check for singleton strata double n_samp_units_all_strata = 0; arma::rowvec singleton_indicators; singleton_indicators.zeros(H); for (arma::uword h = 0; h < H; ++h) { arma::uword stratum_start = strata_starts(h); n_samp_units_all_strata += strata_samp_sizes(stratum_start); // Check if there is only one sampling unit sampled in the stratum if (strata_samp_sizes(stratum_start) < 2) { // If only one sampling unit, check that it wasn't sampled with certainty if ((strata_pop_sizes(stratum_start) > 1)) { singleton_indicators(h) = 1; if ((singleton_method[0] == "fail")) { Rcpp::String error_msg("At least one stratum contains only one PSU at stage "); error_msg += stage; Rcpp::stop(error_msg); } } continue; // Skip to next stratum } // Check for PSUs which are lonely in the domain (but not in the sample) if (use_singleton_method_for_domains[0]) { arma::uword h_row_index = strata_starts(h); // Set singleton indicator equal to 1 unless there are multiple observed sampling units in the stratum singleton_indicators(h) = 1; while ((singleton_indicators(h) == 1) && (h_row_index <= strata_ends(h))) { if (samp_unit_ids(h_row_index) != samp_unit_ids(strata_starts(h))) { singleton_indicators(h) = 0; } h_row_index += 1; } if ((static_cast(strata_ends[h] - strata_starts[h] + 1)) < 2) { singleton_indicators(h) = 1; } // Throw a warning message about the domain's singleton if (singleton_indicators(h) == 1) { Rcpp::String warning_msg("At least one stratum contains only one PSU at stage "); warning_msg += stage; Rcpp::warning(warning_msg); // If not adjusting for domain singletons, don't mark the stratum as a singleton if ((singleton_method[0] != "adjust") && (singleton_method[0] != "average")) { singleton_indicators(h) = 0; } } } } int n_singleton_strata = sum(singleton_indicators); bool any_singleton_strata = n_singleton_strata > 0; arma::rowvec Y_means; Y_means = Y_means.zeros(n_col_y); if (any_singleton_strata & (singleton_method[0] == "adjust")) { Y_means = sum(Y, 0) / n_samp_units_all_strata; } // Iterate over each stratum for (arma::uword h = 0; h < H; ++h) { if ((singleton_indicators(h) == 1) && (singleton_method[0] != "adjust")) { continue; } arma::uvec h_row_indices = arma::linspace(strata_starts[h], strata_ends[h], strata_ends[h] - strata_starts[h] + 1); // Get stratum-wide summary arma::uword stratum_start = strata_starts(h); n_h = static_cast(strata_samp_sizes(stratum_start)); N_h = static_cast(strata_pop_sizes(stratum_start)); n_obs_h = 0; if (arma::is_finite(N_h)) { f_h = static_cast(n_h) / static_cast(N_h); } else { f_h = 0.0; } arma::rowvec Ybar_h; if ((singleton_indicators(h) == 1) && (singleton_method[0] == "adjust")) { Ybar_h = Y_means; } else { Ybar_h = arma::sum(Y.rows(h_row_indices), 0) / n_h; } // Iterate over each row in the stratum and its following row arma::uword h_next_row_index; for (arma::uvec::iterator h_row_index = h_row_indices.begin(); h_row_index != h_row_indices.end(); ++h_row_index) { // Determine whether current row is last for the current sampling unit if ((*h_row_index) < strata_ends(h)) { h_next_row_index = * std::next(h_row_index, 1); at_end_of_samp_unit = samp_unit_ids(*h_row_index) != samp_unit_ids(h_next_row_index); } else { at_end_of_samp_unit = true; } // Get contribution to sampling unit\'s total Yhi += Y.row(*h_row_index); if (at_end_of_samp_unit) { n_obs_h += 1; Yhi.each_row() -= Ybar_h; cov_h += (arma::trans(Yhi)*Yhi); Yhi = Yhi.zeros(); } } // If the data were subsetted, some sampling units // may not have rows of data that appear in inputs. // Make sure these units contribute to the variance. double n_h_missing = n_h - n_obs_h; if (n_h_missing > 0) { cov_h += n_h_missing*(arma::trans(Ybar_h)*Ybar_h); } // Determine scaling factor to use for normalizing sum of squares // and handling finite population correction scale = ((1.0 - f_h) * n_h); if (n_h > 1) { scale /= (n_h - 1); } result += (scale * cov_h); cov_h = cov_h.zeros(); } // For the 'average' method for handling singleton strata, // the total variance contribution of each singleton stratum // is assumed to be equal to the variance contribution of the average nonsingleton stratum if ((singleton_method[0] == "average") && any_singleton_strata) { int n_nonsingleton_strata = H - n_singleton_strata; double scaling_factor; if (n_nonsingleton_strata > 0) { scaling_factor = static_cast(H)/static_cast(n_nonsingleton_strata); } else { scaling_factor = R_NaN; } result *= scaling_factor; } return result; } // [[Rcpp::export(rng=FALSE)]] arma::mat arma_multistage(arma::mat Y, arma::mat samp_unit_ids, arma::mat strata_ids, arma::mat strata_samp_sizes, arma::mat strata_pop_sizes, Rcpp::CharacterVector singleton_method, Rcpp::LogicalVector use_singleton_method_for_domains, Rcpp::LogicalVector use_only_first_stage, int stage) { size_t n_stages = samp_unit_ids.n_cols; if (Y.n_rows == 0) { arma::mat V(Y.n_cols, Y.n_cols, arma::fill::zeros); return V; } // First reorder inputs by first-stage sample unit IDs arma::uvec samp_unit_id_order = arma::stable_sort_index(samp_unit_ids.col(0), "ascend"); Y = Y.rows(samp_unit_id_order); samp_unit_ids = samp_unit_ids.rows(samp_unit_id_order); strata_ids = strata_ids.rows(samp_unit_id_order); strata_samp_sizes = strata_samp_sizes.rows(samp_unit_id_order); strata_pop_sizes = strata_pop_sizes.rows(samp_unit_id_order); // Next reorder inputs by first-stage strata IDs arma::uvec strata_id_order = arma::stable_sort_index(strata_ids.col(0), "ascend"); Y = Y.rows(strata_id_order); samp_unit_ids = samp_unit_ids.rows(strata_id_order); strata_ids = strata_ids.rows(strata_id_order); strata_samp_sizes = strata_samp_sizes.rows(strata_id_order); strata_pop_sizes = strata_pop_sizes.rows(strata_id_order); // Obtain first stage information arma::colvec first_stage_ids = samp_unit_ids.col(0); arma::colvec first_stage_strata = strata_ids.col(0); arma::colvec first_stage_strata_samp_sizes = strata_samp_sizes.col(0); arma::colvec first_stage_strata_pop_sizes = strata_pop_sizes.col(0); // If there are later stages of sampling, // obtain the necessary columns from inputs, // which will be used recursively arma::mat later_stage_ids; arma::mat later_stage_strata; arma::mat later_stage_strata_samp_sizes; arma::mat later_stage_strata_pop_sizes; if ((n_stages > 1) && !use_only_first_stage[0]) { later_stage_ids = samp_unit_ids.tail_cols(n_stages - 1); later_stage_strata = strata_ids.tail_cols(n_stages - 1); later_stage_strata_samp_sizes = strata_samp_sizes.tail_cols(n_stages-1); later_stage_strata_pop_sizes = strata_pop_sizes.tail_cols(n_stages-1); } // Calculate first-stage variance arma::mat V = arma_onestage(Y, first_stage_ids, first_stage_strata, first_stage_strata_samp_sizes, first_stage_strata_pop_sizes, singleton_method, use_singleton_method_for_domains, stage); // For each first-stage unit, get variance contribution from next stage if ((n_stages > 1) && !use_only_first_stage[0]) { // Get distinct first-stage strata ids and their length, H arma::colvec distinct_strata_ids = unique(first_stage_strata); arma::uword H = distinct_strata_ids.n_elem; for (arma::uword h = 0; h < H; ++h) { // Determine which rows of data correspond to the current first-stage stratum arma::uvec h_indices = arma::find(first_stage_strata==distinct_strata_ids(h)); // Get submatrices of inputs corresponding to the current first-stage stratum arma::mat Y_h = Y.rows(h_indices); arma::mat h_samp_unit_ids = later_stage_ids.rows(h_indices); arma::mat h_strata = later_stage_strata.rows(h_indices); arma::mat h_strata_samp_sizes = later_stage_strata_samp_sizes.rows(h_indices); arma::mat h_strata_pop_sizes = later_stage_strata_pop_sizes.rows(h_indices); // Get count of first-stage sampling units in first-stage stratum // and finite population correction, based on all first-stage units in sample design arma::uword n_h = min(first_stage_strata_samp_sizes.elem(h_indices)); double N_h = static_cast(min(strata_pop_sizes.elem(h_indices))); double f_h; if (arma::is_finite(N_h)) { f_h = static_cast(n_h) / N_h; } else { f_h = 0.0; continue; // Skip to next stratum, since variance contribution is 0 } // Get list of first-stage units in the current subset of data, and count them arma::colvec h_first_stage_units = first_stage_ids.elem(h_indices); arma::colvec h_unique_first_stage_units = unique(h_first_stage_units); arma::uword n_h_subset = h_unique_first_stage_units.n_elem; for (arma::uword i=0; i < n_h_subset; ++i ) { // Create subsets of inputs specific to current first-stage sampling unit arma::uvec unit_indices = arma::find(first_stage_ids.elem(h_indices) == h_unique_first_stage_units(i)); arma::mat Y_hi = Y_h.rows(unit_indices); arma::mat hi_samp_unit_ids = h_samp_unit_ids.rows(unit_indices); arma::mat hi_strata = h_strata.rows(unit_indices); arma::mat hi_strata_samp_sizes = h_strata_samp_sizes.rows(unit_indices); arma::mat hi_strata_pop_sizes = h_strata_pop_sizes.rows(unit_indices); // Estimate later-stage variance contribution arma::mat V_hi = f_h * arma_multistage(Y_hi, hi_samp_unit_ids, hi_strata, hi_strata_samp_sizes, hi_strata_pop_sizes, singleton_method, use_singleton_method_for_domains, use_only_first_stage, stage = stage + 1); V += V_hi; } } } // Deal with potential floating-point error V.diag() = arma::abs(V.diag()); for (arma::uword i=0; i < V.n_cols; ++i ) { if (std::abs(V(i,i)) < 1e-16) { V.row(i).zeros(); V.col(i).zeros(); } } // Return result return V; } survey/src/Makevars.makefile0000644000176200001440000000006014462643117015652 0ustar liggesusers PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)survey/src/Makevars.win0000644000176200001440000000006114462643117014673 0ustar liggesusers PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) survey/src/RcppExports.cpp0000644000176200001440000000770514462643117015414 0ustar liggesusers// Generated by using Rcpp::compileAttributes() -> do not edit by hand // Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #include #include using namespace Rcpp; #ifdef RCPP_USE_GLOBAL_ROSTREAM Rcpp::Rostream& Rcpp::Rcout = Rcpp::Rcpp_cout_get(); Rcpp::Rostream& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get(); #endif // arma_onestage arma::mat arma_onestage(const arma::mat& Y, const arma::colvec& samp_unit_ids, const arma::colvec& strata_ids, const arma::colvec& strata_samp_sizes, const arma::colvec& strata_pop_sizes, const Rcpp::CharacterVector& singleton_method, const Rcpp::LogicalVector& use_singleton_method_for_domains, const int& stage); RcppExport SEXP _survey_arma_onestage(SEXP YSEXP, SEXP samp_unit_idsSEXP, SEXP strata_idsSEXP, SEXP strata_samp_sizesSEXP, SEXP strata_pop_sizesSEXP, SEXP singleton_methodSEXP, SEXP use_singleton_method_for_domainsSEXP, SEXP stageSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::traits::input_parameter< const arma::mat& >::type Y(YSEXP); Rcpp::traits::input_parameter< const arma::colvec& >::type samp_unit_ids(samp_unit_idsSEXP); Rcpp::traits::input_parameter< const arma::colvec& >::type strata_ids(strata_idsSEXP); Rcpp::traits::input_parameter< const arma::colvec& >::type strata_samp_sizes(strata_samp_sizesSEXP); Rcpp::traits::input_parameter< const arma::colvec& >::type strata_pop_sizes(strata_pop_sizesSEXP); Rcpp::traits::input_parameter< const Rcpp::CharacterVector& >::type singleton_method(singleton_methodSEXP); Rcpp::traits::input_parameter< const Rcpp::LogicalVector& >::type use_singleton_method_for_domains(use_singleton_method_for_domainsSEXP); Rcpp::traits::input_parameter< const int& >::type stage(stageSEXP); rcpp_result_gen = Rcpp::wrap(arma_onestage(Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, stage)); return rcpp_result_gen; END_RCPP } // arma_multistage arma::mat arma_multistage(arma::mat Y, arma::mat samp_unit_ids, arma::mat strata_ids, arma::mat strata_samp_sizes, arma::mat strata_pop_sizes, Rcpp::CharacterVector singleton_method, Rcpp::LogicalVector use_singleton_method_for_domains, Rcpp::LogicalVector use_only_first_stage, int stage); RcppExport SEXP _survey_arma_multistage(SEXP YSEXP, SEXP samp_unit_idsSEXP, SEXP strata_idsSEXP, SEXP strata_samp_sizesSEXP, SEXP strata_pop_sizesSEXP, SEXP singleton_methodSEXP, SEXP use_singleton_method_for_domainsSEXP, SEXP use_only_first_stageSEXP, SEXP stageSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::traits::input_parameter< arma::mat >::type Y(YSEXP); Rcpp::traits::input_parameter< arma::mat >::type samp_unit_ids(samp_unit_idsSEXP); Rcpp::traits::input_parameter< arma::mat >::type strata_ids(strata_idsSEXP); Rcpp::traits::input_parameter< arma::mat >::type strata_samp_sizes(strata_samp_sizesSEXP); Rcpp::traits::input_parameter< arma::mat >::type strata_pop_sizes(strata_pop_sizesSEXP); Rcpp::traits::input_parameter< Rcpp::CharacterVector >::type singleton_method(singleton_methodSEXP); Rcpp::traits::input_parameter< Rcpp::LogicalVector >::type use_singleton_method_for_domains(use_singleton_method_for_domainsSEXP); Rcpp::traits::input_parameter< Rcpp::LogicalVector >::type use_only_first_stage(use_only_first_stageSEXP); Rcpp::traits::input_parameter< int >::type stage(stageSEXP); rcpp_result_gen = Rcpp::wrap(arma_multistage(Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, use_only_first_stage, stage)); return rcpp_result_gen; END_RCPP } static const R_CallMethodDef CallEntries[] = { {"_survey_arma_onestage", (DL_FUNC) &_survey_arma_onestage, 8}, {"_survey_arma_multistage", (DL_FUNC) &_survey_arma_multistage, 9}, {NULL, NULL, 0} }; RcppExport void R_init_survey(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } survey/vignettes/0000755000176200001440000000000014576431435013633 5ustar liggesuserssurvey/vignettes/pps.Rnw0000644000176200001440000001455113517345006015123 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/epi.Rnw0000644000176200001440000002362213517345006015075 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/vignettes/qrule.Rnw0000644000176200001440000000774514073741722015463 0ustar liggesusers\documentclass{article} \usepackage{url} %\VignetteIndexEntry{Quantile rules} \usepackage{Sweave} \author{Thomas Lumley} \title{Estimating quantiles} \newlength{\wdth} \newcommand{\strike}[1]{\settowidth{\wdth}{#1}\rlap{\rule[.5ex]{\wdth}{.4pt}}#1} \begin{document} \SweaveOpts{concordance=TRUE} \maketitle The $p$th quantile is defined as the value where the estimated cumulative distribution function is equal to $p$. As with quantiles in unweighted data, this definition only pins down the quantile to an interval between two observations, and a rule is needed to interpolate. As the help for the base R function \texttt{quantile} explains, even before considering sampling weights there are many possible rules. Rules in the \texttt{svyquantile()} function can be divided into three classes \begin{itemize} \item Discrete rules, following types 1 to 3 in \texttt{quantile} \item Continuous rules, following types 4 to 9 in \texttt{quantile} \item A rule proposed by Shah \& Vaish (2006) and used in some versions of \textsf{SUDAAN} \end{itemize} \subsection*{Discrete rules} These are based on the discrete empirical CDF that puts weight proportional to the weight $w_k$ on values $x_k$. $$\hat F(x) = \frac{\sum_i \{x_i\leq x\}w_i}{\sum_i w_i}$$ \paragraph{The mathematical inverse} The mathematical inverse $\hat F^{-1}(p)$ of the CDF is the smallest $x$ such that $F(x)\geq p$. This is rule \texttt{hf1} and \texttt{math} and in equally-weighted data gives the same answer as \texttt{type=1} in \texttt{quantile} \paragraph{The primary-school median} The school definition of the median for an even number of observations is the average of the middle two observations. We extend this to say that the $p$th quantile is $q_{\mathrm{low}}=\hat F^{-1}(p)$ if $\hat F(q_{\mathrm{low}})=p$ and otherwise is the the average of $\hat F^{-1}(p)$ and the next higher observation. This is \texttt{school} and \texttt{hf2} and is the same as \texttt{type=2} in \texttt{quantile}. \paragraph{Nearest even order statistic} The $p$th quantile is whichever of $\hat F^{-1}(p)$ and the next higher observation is at an even-numbered position when the distinct data values are sorted. This is \texttt{hf3} and is the same as \texttt{type=3} in \texttt{quantile}. \subsection*{Continuous rules} These construct the empirical CDF as a piecewise-linear function and read off the quantile. They differ in the choice of points to interpolate. Hyndman \& Fan describe these as interpolating the points $(p_k,x_k)$ where $p_k$ is defined in terms of $k$ and $n$. For weighted use they have been redefined in terms of the cumulative weights $C_k=\sum_{i\leq k} w_i$, the total weight $C_n=\sum w_i$, and the weight $w_k$ on the $k$th observation. \begin{tabular}{lll} {\tt qrule} & Hyndman \& Fan & Weighted\\ \hline {\tt hf4} & $p_k= k/n$ & $p_k = C_k/C_n$\\ {\tt hf5} & $p_k= (k-0.5)/n$ & $p_k = (C_k-w_k)/C_n$\\ {\tt hf6} & $p_k= k/(n+1)$ & $p_k = C_k/(C_n+w_n)$\\ {\tt hf7} & $p_k= (k-1)/(n-1)$ & $p_k = C_{k-1}/C_{n-1}$\\ {\tt hf8} & $p_k= (k-1/3)/(n+2/3)$ & $p_k = (C_k-w_k/3)/(C_n+w_n/3)$\\ {\tt hf9} & $p_k= (k-3/8)/(n+1/4)$ & $p_k = (C_k-3w_k./8)/(C_n+w_n/4)$\\ \hline \end{tabular} \subsection*{Shah \& Vaish} This rule is related to {\tt hf6}, but it is discrete and more complicated. First, define $w^*_i=w_in/C_n$, so that $w^*_i$ sum to the sample size rather than the population size, and $C^*k$ as partial sums of $w^*_k$. Now define the estimated CDF by $$\hat F(x_k) =\frac{1}{n+1}\left(C^*_k+1/2-w_k/2 \right)$$ and take $\hat F^{-1}(p)$ as the $p$th quantile. \subsection*{Other options} It would be possible to redefine all the continuous estimators in terms of $w^*$, so that type 8, for example, would use $$p_k = (C^*_k-1/3)/(C^*_n+2/3)$$ Or a compromise, eg using $w^*_k$ in the numerator and numbers in the denominator, such as $$p_k = (C^*_k-w^*_k/3)/(C^*_n+2/3).$$ Comparing these would be \strike{a worthwhile}\dots\strike{an interesting}... a research question for simulation. \end{document} survey/vignettes/survey-sae.html.asis0000644000176200001440000000011314576426776017571 0ustar liggesusers%\VignetteIndexEntry{Small area estimation} %\VignetteEngine{R.rsp::asis} survey/vignettes/survey.Rnw0000644000176200001440000000670613517345006015661 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/precalibrated.Rnw0000644000176200001440000000611114232650344017112 0ustar liggesusers\documentclass{article} %\VignetteIndexEntry{Pre-calibrated weights} \usepackage{Sweave} \title{Making use of pre-calibrated weights} \begin{document} \maketitle \SweaveOpts{concordance=TRUE} Public-use data sets often come with weights that have been adjusted by post-stratification, raking, or calibration. It is standard practice to ignore this fact and treat the weights as if they were sampling weights. An alternative approach is to calibrate the weights again in R. This might seem impossible: calibration needs the population totals. But we know the population totals, because the effect of calibration is precisely that the estimated population totals match the true population totals. From version 4.2, the \texttt{svydesign} function has an option \texttt{calibrate.formula} to specify (as a model formula) the variables that the weights are already calibrated on. The weights will be recalibrated using this formula, to population totals estimated from the sample. The weights will not change --- they were already calibrated --- but information will be added to the survey design object to describe the calibration constraints and standard errors of estimates will change. Consider, for example, the \texttt{apiclus1} example. This is a cluster sample of 15 school districts in California <<>>= library(survey) data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) @ The sampling weights \texttt{pw} are already calibrated to sum to the known number of schools in the population, 6194, but R does not know this: <<>>= sum(weights(dclus1)) dim(apipop) dclus1<-update(dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,dclus1) @ The standard error should be zero, because the calibration procedure ensures that the the estimated total is exactly 6194. We could use \texttt{calibrate()} on the design object <<>>= cal_dclus1<-calibrate(dclus1, formula=~1, population=sum(weights(dclus1))) svytotal(~one,cal_dclus1) @ The standard errors have changed, but the weights haven't <<>>= summary(weights(cal_dclus1)/weights(dclus1)) @ With the new option to \texttt{svydesign} we can do the same thing when the object is created <<>>= precal_dclus1<-svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc, calibrate.formula=~1) precal_dclus1<-update(precal_dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,precal_dclus1) @ Calibrating to the population size simplifies the standard error relationship between mean and total <<>>= (enroll_t<-svytotal(~enroll, dclus1)) (enroll_m<-svymean(~enroll, dclus1)) SE(enroll_m) SE(enroll_t)/6194 (cenroll_t<-svytotal(~enroll, precal_dclus1)) (cenroll_m<-svymean(~enroll, precal_dclus1)) SE(cenroll_m) SE(cenroll_t)/6194 @ Because calibration in this way changes the standard errors but not the point estimates, it's critical that you {\em only use it when the weights are in fact already calibrated}. If not, the standard errors will be wrong. In particular, it is not valid to take a subset of a data set with calibrated weights and then pretend the subset was also calibrated on the same variables. \end{document} survey/vignettes/domain.Rnw0000644000176200001440000000771613517345006015575 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/R/0000755000176200001440000000000014571730437012023 5ustar liggesuserssurvey/R/olr.R0000644000176200001440000003147014526736255012753 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,subset=NULL,...,return.replicates=FALSE, multicore=getOption("survey.multicore")){ environment(formula)<-environment() subset<-substitute(subset) subset<-eval(subset, model.frame(design), parent.frame()) if (!is.null(subset)){ if (any(is.na(subset))) stop("subset must not contain NA values") design<-design[subset,] } 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) rval$survey.design<-design 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, subset=NULL,..., 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 } 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 } gmini <- function(beta,logdiff=FALSE) { 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) if (logdiff) g2 <- g2 %*% jacobian(theta) if (all(pr > 0)) cbind(g1, g2) else NA+cbind(g1,g2) } gmin<-function(beta){ colSums(gmini(beta,logdiff=TRUE)) } 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) subset<-substitute(subset) subset<-eval(subset, model.frame(design), parent.frame()) if (!is.null(subset)){ if (any(is.na(subset))) stop("subset must not contain NA values") design<-design[subset,] } 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") keep<-weights(design)!=0 wt <- weights(design)[keep] 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") betakeep <- names(coefs)[!is.na(coefs)] coefs <- coefs[betakeep] x <- x[, betakeep[-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)) ## MASS::polr reparametrises the intercepts other than the first ## using logs of differences (to ensure the ordering). Need to undo it. vc <- MASS::ginv(res$hessian) pc <- length(beta) gamma <- fit$zeta z.ind <- pc + seq_along(gamma) theta <- c(gamma[1L], log(diff(gamma))) J <- jacobian(theta) A <- diag(pc + length(gamma)) A[z.ind, z.ind] <- J Vm <- A %*% vc %*% t(A) dimnames(Vm) <- list(dn, dn) fit$Hessian<-H <- solve(Vm) ## fit$call<-sys.call() fit$call[[1]]<-as.name(.Generic) inffun<- gmini(res$par, logdiff=FALSE)%*%solve(H) if(any(!keep)){ ## subsets of raked designs inffun1<-matrix(0,ncol=NCOL(inffun), nrow=length(keep)) inffun1[keep,]<-inffun inffun<-inffun1 } fit$var<-svyrecvar(inffun, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) fit$df.residual<-degf(design)-length(beta) fit$survey.design<-design 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))) ## used to have jacobian here but it's now in svyolr 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) e<-environment(formula(formula)) formula<-eval(mcall$formula, envir=e) design<- eval(mcall$design, envir=e) 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 } ## taken from MASS::predict.polr predict.svyolr<-function (object, newdata, type = c("class", "probs"), ...) { type <- match.arg(type) if (missing(newdata)) Y <- object$fitted else { newdata <- as.data.frame(newdata) Terms <- delete.response(object$terms) m <- model.frame(Terms, newdata, na.action = function(x) x, xlev = object$xlevels) if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) X <- model.matrix(Terms, m, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(X), nomatch = 0L) if (xint > 0L) X <- X[, -xint, drop = FALSE] n <- nrow(X) q <- length(object$zeta) eta <- drop(X %*% object$coefficients) pfun <- switch(object$method, logistic = plogis, probit = pnorm, loglog = pgumbel, cloglog = pGumbel, cauchit = pcauchy) cumpr <- matrix(pfun(matrix(object$zeta, n, q, byrow = TRUE) - eta), , q) Y <- t(apply(cumpr, 1L, function(x) diff(c(0, x, 1)))) dimnames(Y) <- list(rownames(X), object$lev) } if (missing(newdata) && !is.null(object$na.action)) Y <- napredict(object$na.action, Y) if (type == "class") factor(max.col(Y), levels = seq_along(object$lev), labels = object$lev) else drop(Y) } ## taken from MASS::pGumbel 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 } survey/R/naa.R0000644000176200001440000000434414066261522012703 0ustar liggesusersnaa_longer<-function(naa, object,...) UseMethod("naa_longer",naa) naa_shorter<-function(naa, object,...) UseMethod("naa_shorter",naa) naa_longer.NULL<-function(naa, object,...) object naa_shorter.NULL<-function(naa, object,...) object naa_longer.default<-function(naa, object,...) stop("no default method (not psychic)") naa_shorter.default<-function(naa, object,...) stop("no default method (not psychic)") naa_longer.fail<-function(naa, object,...) stop("can't happen (na.fail)") naa_shorter.fail<-function(naa, object,...) stop("can't happen (na.fail)") naa_shorter.omit<-function(naa, object,...) object naa_longer.omit<-function(naa,object,...){ ##from naresid.exclude if (length(naa) == 0 || !is.numeric(naa)) stop("invalid argument 'naa'") if (is.null(object)) return(object) n <- NROW(object) keep <- rep.int(NA, n + length(naa)) keep[-naa] <- 1L:n if (is.matrix(object)) { object <- object[keep, , drop = FALSE] temp <- rownames(object) if (length(temp)) { temp[naa] <- names(naa) rownames(object) <- temp } } else if (is.array(object) && length(d <- dim(object)) > 2L) { object <- object[keep, , , drop = FALSE] temp <- (dn <- dimnames(object))[[1L]] if (!is.null(temp)) { temp[naa] <- names(naa) dimnames(object)[[1L]] <- temp } } else { object <- object[keep] temp <- names(object) if (length(temp)) { temp[naa] <- names(naa) names(object) <- temp } } object } naa_longer.exclude<-function(naa,object,...) object naa_shorter.exclude<-function(naa,object,...) { if (length(naa) == 0 || !is.numeric(naa)) stop("invalid argument 'naa'") if (is.null(object)) return(object) n <- NROW(object) keep <- (1:n)[-naa] if (is.matrix(object)) { object <- object[keep, , drop = FALSE] temp <- rownames(object) } else if (is.array(object) && length(d <- dim(object)) > 2L) { object <- object[keep, , , drop = FALSE] temp <- (dn <- dimnames(object))[[1L]] } else { object <- object[keep] temp <- names(object) } object } survey/R/count.R0000644000176200001440000000172413517345031013271 0ustar liggesusersunwtd.count<-function(x, design,...){ if (inherits(x, "formula")) { 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, model.frame(design)) x <- as.matrix(x) out<- weights(design,"sampling")==0 nas <- rowSums(is.na(x)) x <- x[(nas+out) == 0, , drop = FALSE] rval<-NROW(x) names(rval)<-"counts" attr(rval,"var")<-matrix(0,1,1) attr(rval,"statistic")<-"counts" if (inherits(design,"svyrep.design")) class(rval)<-"svrepstat" else class(rval)<-"svystat" rval } survey/R/greg.R0000644000176200001440000002140414074217675013075 0ustar liggesusers regcalibrate<-function(design, ...) UseMethod("regcalibrate") is.calibrated<-function(design){ !is.null(design$postStrata)} regcalibrate.pps<-function(design,formula, population, stage=NULL, lambda=NULL, aggregate.stage=NULL,...){ if (!is.null(stage) && !(stage==0)) stop("'stage' not supported for pps designs") if (!is.null(aggregate.stage)) stop("'aggregate.stage' not supported for pps designs") regcalibrate.survey.design2(design,formula, population, stage=NULL, lambda=NULL, aggregate.stage=NULL,...) } ## ## unbounded linear calibration using qr decomposition: less sensitive to ## collinearity than Deville & Sarndal's Newton algorithm. ## regcalibrate.survey.design2<-function(design, formula, population, stage=NULL, lambda=NULL, aggregate.stage=NULL, sparse=FALSE,...){ if (is.null(stage)) stage<-if (is.list(population)) 1 else 0 if (!is.null(aggregate.stage)){ aggindex<-design$cluster[[aggregate.stage]] } if(stage==0){ ## 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 (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 (!is.null(aggregate.stage)){ mm<-apply(mm,2,function(mx) ave(mx,aggindex)) ww<-ave(ww,aggindex) sigma2<-ave(sigma2,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 (!is.null(names(population))){ if (!all(names(sample.total) %in% names(population))){ warning("Sampling and population totals have different names.") cat("Sample: "); print(names(sample.total)) cat("Popltn: "); print(names(population)) } 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/sqrt(sigma2)) ## not needed ##if (is.null(lambda) && !all(abs(qr.resid(tqr,whalf*sigma2)/sigma2) <1e-5)) ## warning("Calibration models with constant variance must have an intercept") g<-rep(1,NROW(mm)) Tmat<-crossprod(mm*whalf/sqrt(sigma2)) tT<-solve(Tmat,population-sample.total) g<-drop(1+mm%*%tT/sigma2) design$prob<-design$prob/g caldata<- list(qr=tqr, w=g*whalf*sqrt(sigma2), stage=0, index=NULL) } else { ## Calibration within clusters (Sarndal's Case C) if (stage>NCOL(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("Sampling and population totals have different names.") cat("Sample: "); print(colnames(mm)) cat("Popltn: "); print(names(population[[1]])) } 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("Sampling and population totals have different names.") cat("Sample: "); print(colnames(mm)) cat("Popltn: "); print(names(population[[1]])) } 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/svyttest.R0000644000176200001440000001103414526736254014055 0ustar liggesuserssvyttest<-function(formula, design,...) UseMethod("svyttest",design) svyttest.default<-function(formula, design, ...){ if (formula[[3]]==1 || formula[[3]]==0){ ## one-sample tt <- eval(bquote(svymean(~as.numeric(.(formula[[2]])),design,...))) rval<-list(statistic=coef(tt)[1]/SE(tt)[1], parameter=degf(design)-1, estimate=coef(tt)[1], null.value=0, alternative="two.sided", method="Design-based one-sample t-test", data.name=deparse(formula)) rval$p.value<-2*pt(-abs(rval$statistic),df=rval$parameter) ci <- confint(tt,level=0.95,df=rval$parameter) attr(ci,"conf.level")<-0.95 rval$conf.int<-ci names(rval$statistic)<-"t" names(rval$parameter)<-"df" names(rval$estimate)<-"mean" names(rval$null.value)<-"mean" class(rval)<-c("svyttest","htest") } else { ## two-sample m <- eval(bquote(svyglm(formula,design, family=gaussian()))) mm<-model.matrix(m) if( (ncol(mm)!=2) || (any(!(mm[,2] %in% c(0,1))) && any(!(mm[,2] %in% c(1,2))))) stop("group must be binary") rval<-list(statistic=coef(m)[2]/SE(m)[2], parameter=m$df.resid, estimate=coef(m)[2], null.value=0, alternative="two.sided", method="Design-based t-test", data.name=deparse(formula)) rval$p.value<-2*pt(-abs(rval$statistic),df=rval$parameter) ci <- confint(m,parm=2) attr(ci,"conf.level")<-0.95 rval$conf.int<-ci names(rval$statistic)<-"t" names(rval$parameter)<-"df" names(rval$estimate)<-"difference in mean" names(rval$null.value)<-"difference in mean" class(rval)<-c("svyttest","htest") } return(rval) } confint.svyttest<-function(object, parm, level=0.95,...){ if(level==0.95) return(object$conf.int) halfw<-diff(as.vector(object$conf.int))/2 q95<-qt(0.975,df=object$parameter) qthis<-qt(1-(1-level)/2, df=object$parameter) thishalfw<-halfw*qthis/q95 rval<-object$estimate+c(-thishalfw,thishalfw) attr(rval,"conf.level")<-level rval } expit<-function(eta) exp(eta)/(1+exp(eta)) svyciprop<-function(formula, design, method=c("logit","likelihood","asin","beta","mean","xlogit"), level=0.95,df=degf(design),...) { method<-match.arg(method) if (method=="mean"){ m<-eval(bquote(svymean(~as.numeric(.(formula[[2]])),design,...))) ci<-as.vector(confint(m,1,level=level,df=df,...)) rval<-coef(m)[1] attr(rval,"var")<-vcov(m) } else if (method=="asin"){ m<-eval(bquote(svymean(~as.numeric(.(formula[[2]])),design,...))) names(m)<-1 xform<-svycontrast(m,quote(asin(sqrt(`1`)))) ci<-sin(as.vector(confint(xform,1,level=level,df=df,...)))^2 rval<-coef(m)[1] attr(rval,"var")<-vcov(m) } else if (method=="xlogit"){ m<-eval(bquote(svymean(~as.numeric(.(formula[[2]])),design,...))) names(m)<-1 xform<-svycontrast(m,quote(log(`1`/(1-`1`)))) ci<-expit(as.vector(confint(xform,1,level=level,df=df,...))) rval<-coef(m)[1] attr(rval,"var")<-vcov(m) } else if (method=="beta"){ m<-eval(bquote(svymean(~as.numeric(.(formula[[2]])),design,...))) n.eff <- coef(m)*(1-coef(m))/vcov(m) rval<-coef(m)[1] attr(rval,"var")<-vcov(m) alpha<-1-level n.eff<-n.eff*( qt(alpha/2, nrow(design)-1)/qt(alpha/2, degf(design)) )^2 ci<-c(qbeta(alpha/2, n.eff*rval,n.eff*(1-rval)+1), qbeta(1-alpha/2, n.eff*rval+1, n.eff*(1-rval))) } else { m<-eval(bquote(svyglm(.(formula[[2]])~1,design, family=quasibinomial))) cimethod<-switch(method, logit="Wald",likelihood="likelihood") ci<-suppressMessages(as.numeric(expit(confint(m,1,level=level,method=cimethod,ddf=df)))) rval<-expit(coef(m))[1] attr(rval,"var")<-vcov(eval(bquote(svymean(~as.numeric(.(formula[[2]])),design,...)))) } halfalpha<-(1-level)/2 names(ci)<-paste(round(c(halfalpha,(1-halfalpha))*100,1),"%",sep="") names(rval)<-paste(deparse(formula[[2]]), collapse="") attr(rval,"ci")<-ci class(rval)<-"svyciprop" rval } confint.svyciprop<-function(object,parm,level=NULL,...){ if (!is.null(level)) stop("need to re-run svyciprop to specify level") rval<-t(as.matrix(attr(object,"ci"))) rownames(rval)<-names(object) rval } coef.svyciprop<-function(object,...) object vcov.svyciprop<-function(object,...) attr(object,"var") print.svyciprop<-function(x,digits=max(3,getOption("digits")-4),...){ m <- cbind(coef(x), confint(x)) printCoefmat(m,digits=digits, cs.ind=1:3,tst.ind=NULL) invisible(x) } survey/R/svycralpha.R0000644000176200001440000000057313517345031014316 0ustar liggesusers svycralpha<-function(formula, design, na.rm=FALSE){ scoredef<-formula scoredef[[1]]<-quote(I) design<-eval(bquote(update(design, `*alpha*`= .(scoredef)))) vtotal<-coef(svyvar(~`*alpha*`,design,na.rm=na.rm)) vitems <-diag(coef(svyvar(formula, design,na.rm=na.rm))) K<-length(attr(terms(formula),"term.labels")) (K/(K-1))*(1-sum(vitems)/vtotal) } survey/R/logrank.R0000644000176200001440000001647714424406073013613 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) dLambda<-detail$hazard E<-as.matrix(detail$means) N<-coxmodel$y[,"status"] times<-coxmodel$y[,"time"] Y<-t(outer(times, detail$time,">=")) # was t(detail$riskmat) but that doesn't do what is documented 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(x[,p],E[,p], "-") ##people are rows, times are columns U[,p]<- ZmEdN[,p]*w(times)- rowSums(ZmE *t(w(detail$time)*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.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/DBI.R0000644000176200001440000003133514556563037012554 0ustar liggesusers svydesign.character<-function (ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL,pps=FALSE, calibrate.formula=NULL, dbtype="SQLite", dbname, ...) { if (dbtype == "ODBC"){ message("RODBC support has been removed. Use the 'odbc' package") } else { db<-DBI::dbDriver(dbtype) dbconn<- DBI::dbConnect(db, dbname,...) } design.vars<-c(all.vars(ids), all.vars(probs), all.vars(strata), all.vars(fpc), all.vars(weights)) ## Need at least one variable to find out the data size if (length(design.vars)==0) design.vars<-"1 as _ugly_workaround_" design.query<-paste("select", paste(design.vars,collapse=","), "from", data) design.data<-DBI::dbGetQuery(dbconn, design.query) rval<-svydesign(ids=ids, probs=probs, strata=strata, data=design.data, fpc=fpc, variables=variables, nest=nest,check.strata=check.strata, weights=weights, calibrate.formula=calibrate.formula) rval$db<-list(dbname=dbname, tablename=data, connection=dbconn, dbtype=dbtype) rval$variables<-NULL rval$call<-sys.call(-1) class(rval)<-c("DBIsvydesign",class(rval)) rval } print.DBIsvydesign<-function(x,...){ cat("DB-backed ") NextMethod() if (!checkConnection(x$db$connection, error=FALSE)) cat("\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) } oldsvyquantile.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, degf=NULL,type=c("BRR","Fay","JK1", "JKn","bootstrap","ACS","successive-difference","JK2","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"){ stop("'RODBC' no longer supported. Use the odbc package") } 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) design.data<-DBI::dbGetQuery(dbconn, design.query) rval<-svrepdesign(variables=variables,repweights=repweights, weights=weights, degf=NULL, 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) 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) } summary.DBIrepdesign<-function(object,...){ summary.svyrep.design(object,...) } survey/R/svysurvreg.R0000644000176200001440000000521713517345031014401 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/anova.svyglm.R0000644000176200001440000003076114207317361014572 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 } oneanova.svycoxph<-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.svycoxph" 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) } print.seqanova.svycoxph<-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 } get_cox_strata<-function(object){ t<-untangle.specials(terms(object),"strata", order=1) if (length(t$vars)==0) return(NULL) m<-model.frame(object) strata(m[t$vars], shortlabel = TRUE) } anova.svycoxph<-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.svycoxph(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) XX[,1]<-resid(xform) for(i in 2:ncol(Z)){ XX[,i]<-resid(xform<-lm(Z[,i]~X+Z[,1:(i-1)])) } colnames(XX)<-paste0("_X_",colnames(Z)) 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 svycoxph demands that all variables are in the design argument. ### FIXME 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) beta<-if(bigger==1) coef(object2) else coef(object) coxstrat<-get_cox_strata(object) coxstrat2<-get_cox_strata(object2) offs<-if(bigger==1) object$offset else object2$offset if (length(offs)==0) offs<-NULL else stop("models with offset not yet implemented") if(!all(coxstrat==coxstrat2)) stop("Cox model strata must match") refit1<-coxph.fit(cbind(X,XX),y,coxstrat, offs, init=c(beta,rep(0,NCOL(XX))), control=coxph.control(),weights=pweights,method=object$method, rownames=names(resid(object)),resid=TRUE) refit<-if(bigger==1) object else object2 refit[names(refit1)]<-refit1 design<-object$survey.design Ainv<- if(is.null(refit$naive.var)) refit$var else refit$naive.var dbeta.subset <- resid(refit, "dfbeta", weighted = TRUE) if (nrow(design) == NROW(dbeta.subset)) { estfun <- as.matrix(dbeta.subset) } else { estfun <- matrix(0, ncol = NCOL(dbeta.subset), nrow = nrow(design)) estfun[is.finite(design$prob), ] <- dbeta.subset } if (inherits(design, "survey.design2")) V<-svyrecvar(estfun, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) else if (inherits(design, "twophase")) V<-twophasevar(estfun, design) else if (inherits(design, "twophase2")) V<-twophase2var(estfun , design) else if (inherits(design, "pps")) V<-ppsvar(estfun , design) else if (inherits(design, "svyrep.design")){ V<-vcov(svymean(estfun/pweights, design))*length(pweights)^2 } else stop("not implemented for this type of design") V<-V[index,index] df<-min(object$degf.resid, object2$degf.resid) deviance.coxph<-function(object,...) -2*object$loglik[2] 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<- refit$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/sysdata.rda0000644000176200001440000000073614576431436014173 0ustar liggesusersBZh91AY&SY 3XP@6f@ lIFdEC@4AM& @ In(8R&iy"Hc fhdNWdbIu }!ÏBH&c*Bee*DC ieɐZCm=jq޳_oL;;R׾>o .+ŲJpZ! #+cwsDY^.Qˎ s2VAmncs,-hեq51cm[Q k0Z -᮲iUJ+hւpB, eCme54wrĥh ar1^)X-bVTR¥Vb*, -I`RlRŋ ,,C( V `V+'}d)NO˟*X=48G[Ww$S  ]survey/R/surveychisq.R0000755000176200001440000004137714556563036014554 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","wls-score"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))!=2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) if (statistic=="wls-score") return(svychisqzero(formula,design,na.rm=na.rm)) 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","wls-score"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))!=2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) if (statistic=="wls-score") return(svychisqzero(formula,design,na.rm=na.rm)) 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,...) } svychisqzero<-function(formula,design,na.rm){ if (ncol(attr(terms(formula), "factors")) > 2) stop("Only 2-way tables") rows <- formula[[2]][[2]] cols <- formula[[2]][[3]] rowvar <- unique(design$variables[, as.character(rows)]) nr <- length(rowvar) des<-design[rep(1:nrow(design), nr), ] yind<-as.vector(eval(bquote( model.matrix(~factor(.(rows))+0, model.frame(design))))) k<-rep(1:nr,each=nrow(design)) des<-update(des,yind=yind,k=k) ff0<-eval(bquote(yind~factor(k)+factor(.(cols)))) ff1<-eval(bquote(~factor(k):factor(.(cols)))) m0<-svyglm(ff0, des) test<-svyscoretest(m0, add.terms=ff1,method="pseudo") ## rescaling: the weights matter because score test uses svytotal test["X2"]<-test["X2"]/nr/nr if (is.finite(test["ddf"])) { p<-pf(test["X2"], test["df"],test["ddf"],lower.tail=FALSE) } else{ p<- pchisq(test["X2"], test["df"],lower.tail=FALSE) } test["p"]<-p ## formatting warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=nrow(design)), correct=FALSE) options(warn) pearson$statistic<-test["X2"] pearson$parameter<-c(ndf=test["df"],ddf=test["ddf"]) pearson$p.value<-test["p"] attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based WLS score test of association" pearson } survey/R/twophase.R0000644000176200001440000006123014565003231013766 0ustar liggesusers## ## twophase<-function(id,strata=NULL, probs=NULL, weights=NULL, fpc=NULL, subset, data, method=c("full","approx","simple"), pps=NULL){ 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,pps=pps)) } 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(as.numeric(cm[subset]),sa[subset],FUN=nunique)/ave(as.numeric(cm),sa,FUN=nunique)[subset] } else { rval$usu<-drop(with(rval$phase1$sample,ave(as.numeric(cluster[,m]), strata[,m], FUN=nunique))/rval$phase1$full$fpc$sampsize[rval$subset,m]) } ## 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(psum1){ 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, influence=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" if(influence) attr(average, "influence")<-x*pweights/psum 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")) } influence.svystat<-function(model,...){ attr(model,"influence") } 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,influence=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 (influence){ attr(total,"influence")<-x/design$prob } 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) & (rowSums(is.na(as.matrix(x)))==0)) xbar<-svymean(x,design, na.rm=na.rm) if(NCOL(x)==1) { if(n==1){ v<-NA attr(v,"statistic")<-NA attr(v,"var")<-NA class(v)<-"svystat" return(v) } 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) 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,rescale=TRUE,...){ .svycheck(design) UseMethod("svycoxph",design) } svycoxph.survey.design<-function(formula,design, subset=NULL, rescale=TRUE, ...){ 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 g$rescale <- 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 ## unless the user doesn't want to if (rescale) data$.survey.prob.weights<-(1/design$prob)/mean(1/design$prob) else data$.survey.prob.weights<-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)) if (inherits(g, "coxph.penal")) warning("svycoxph does not support penalised terms") 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,] ## if there are betas... if (length(coef(g))>0){ 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 } if (!is.null(g$naive.var)) ## newer versions of survival switch to robust=TRUE with non-integer weights g$inv.info<-g$naive.var else 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)) } else g$var<-matrix(ncol=0,nrow=0) 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(formula,...){ stop("No survfit method for survey models") } extractAIC.svycoxph<-function(fit,...){ stop("No AIC for survey models") } svyglm<-function(formula, design,subset=NULL,family=stats::gaussian(),start=NULL, ...){ .svycheck(design) UseMethod("svyglm",design) } svyglm.survey.design<-function(formula,design,subset=NULL, family=stats::gaussian(),start=NULL, rescale=TRUE,..., deff=FALSE, influence=FALSE){ subset<-substitute(subset) subset<-eval(subset, model.frame(design), parent.frame()) if (!is.null(subset)){ if (any(is.na(subset))) stop("subset must not contain NA values") design<-design[subset,] } data<-model.frame(design) g<-match.call() g$formula<-eval.parent(g$formula) g$influence<-NULL g$design<-NULL g$var <- NULL g$rescale <- NULL g$deff<-NULL g$subset <- NULL ## done it already g$family<-family 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 ## (unless the user doesn't want to) if (rescale) data$.survey.prob.weights<-(1/design$prob)/mean(1/design$prob) else data$.survey.prob.weights<-(1/design$prob) if(any(is.na(data$.survey.prob.weights))) stop("weights must not contain NA values") if (!all(all.vars(formula) %in% names(data))) stop("all variables must be in design= argument") g<-with(list(data=data), eval(g)) summ<-summary(g) g$naive.cov<-summ$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<-match.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" } if(deff){ vsrs<-summ$cov.scaled*mean(data$.survey.prob.weights) attr(g,"deff")<-g$cov.unscaled/vsrs } if (influence){ estfun<- model.matrix(g)*naa_shorter(nas, resid(g,"working"))*g$weights if (g$rankNROW(estfun))){ estfun1<-matrix(0,ncol=ncol(estfun),nrow=nrow(data)) estfun1[-nas,]<-estfun estfun<-estfun1 } attr(g, "influence")<-estfun%*%g$naive.cov } g$survey.design<-design g } print.svyglm<-function(x,...){ print(x$survey.design, varnames=FALSE, design.summaries=FALSE,...) NextMethod() } coef.svyglm<-function(object,complete=FALSE,...,na.rm=!complete) { 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 nas<-glm.object$na.action estfun<-model.matrix(glm.object)*naa_shorter(nas, 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, s.err, tvalue, NaN) dimnames(coef.table) <- list(names(coef.p), c(dn, "t value", "Pr(>|t|)")) } 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) } confint.svyglm<-function(object,parm,level=0.95,method=c("Wald","likelihood"),ddf=NULL,...){ method<-match.arg(method) if(method=="Wald"){ if (is.null(ddf)) ddf <- object$df.residual if (ddf<=0) { ci<-confint.default(object,parm=parm,level=.95,...)*NaN } else { tlevel <- 1 - 2*pnorm(qt((1 - level)/2, df = ddf)) ci<-confint.default(object,parm=parm,level=tlevel,...) } a <- (1 - level)/2 a <- c(a, 1 - a) pct <- format.perc(a, 3) colnames(ci)<-pct return(ci) } 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 if (ddf<=0) { stop("zero or negative denomintor df") } 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(), na.action="na.fail", method=NULL,lower=NULL,upper=NULL, influence=FALSE,...){ if(is.null(method)) method<-if(is.null(gradient)) "Nelder-Mead" else "newuoa" if (!inherits(design,"survey.design")) stop("design is not a survey.design") weights<-weights(design) wtotal<-sum(weights) if (!(method %in% c("bobyqa","newuoa")) && 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) mmFrame <- lapply(formulas,model.frame, data=mf) mm = mapply(model.matrix, object = formulas, data=mmFrame, SIMPLIFY=FALSE) mmOffset <- lapply(mmFrame, model.offset) # add a vector of zeros if there is no offset provided noOffset = which(unlist(lapply(mmOffset, length))==0) for(D in noOffset) { mmOffset[[D]] = rep(0, NROW(mm[[1]])) } ## 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]] + mmOffset[[i-1]] 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]] + mmOffset[[i-1]]) 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 if (method == "newuoa"){ rval<-minqa::uobyqa(theta0, function(par,...) -objectivefn(par,...), control=control, ...) if(rval$ier>0) warning(rval$msg) rval$hessian <- numDeriv::hessian(objectivefn, rval$par) } else if (method == "bobyqa"){ if (is.list(lower)) lower<-do.call(c, lower) if (is.list(upper)) upper<-do.call(c,upper) rval<-minqa::bobyqa(theta0, function(par,...) -objectivefn(par,...), control=control,lower=lower,upper=upper, ...) if(rval$ier>0) warning(rval$msg) rval$hessian <- numDeriv::hessian(objectivefn,rval$par) }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]]+ mmOffset[[i-1]]) 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) } if (influence){ if (nas && (NROW(data)>NROW(db))){ db1<-matrix(0,nrow=NROW(data),ncol=NCOL(db)) db1[-nas,]<-db db<-db1 } attr(rval,"influence")<-db } 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) if (is.null(getOption("survey.use_rcpp"))) options(survey.use_rcpp=TRUE) } 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/svymi.R0000644000176200001440000002336614556563037013332 0ustar liggesusers svydesign.imputationList<-function(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, pps=FALSE,calibrate.formula=NULL,...){ designs <- lapply(data$imputations, function(d) svydesign(ids=ids, probs=probs, strata=strata,variables=variables,fpc=fpc,nest=nest, check.strata=check.strata, weights=weights,data=d,pps=pps,calibrate.formula=calibrate.formula,...)) rval <- list(designs=designs, call=sys.call(-1)) class(rval) <- "svyimputationList" rval } svrepdesign.imputationList<-function(variables=NULL, repweights,weights,data,degf=NULL, mse=getOption("survey.replicates.mse"),...){ ## dispatch on data= if (!is.null(variables) && !inherits(variables,"imputationList")) stop("'variables' must also be an 'imputationList' (or NULL)") if(!is.null(variables)){ if (inherits(repweights,"imputationList")){ designs <- mapply(function(v,d,r) svrepdesign(variables=v, repweights=r, weights=weights,data=NULL,degf=degf,mse=mse,...), variables$imputations,data$imputations, repweights$imputations,SIMPLIFY=FALSE) } else { designs <- mapply(function(d,v) svrepdesign(variables=v, repweights=repweights, weights=weights,data=d,degf=degf,mse=mse,...), data$imputations,variables$imputations,SIMPLIFY=FALSE) } }else{ if (inherits(repweights,"imputationList")){ designs <- mapply(function(d,r) svrepdesign(repweights=r, weights=weights,data=NULL,degf=degf,mse=mse,...), data$imputations, repweights$imputations,SIMPLIFY=FALSE) } else { designs <- lapply(data$imputations, function(d) svrepdesign( repweights=repweights, weights=weights,data=d,degf=degf,mse=mse,...)) } } rval <- list(designs=designs, call=sys.call(-1)) class(rval) <- "svyimputationList" rval } as.svrepdesign.svyimputationList<-function(design,type=c("auto","JK1","JKn","BRR","bootstrap","subbootstrap","mrbbootstrap","Fay"), fay.rho=0, fpc=NULL, fpctype=NULL, separate.replicates=FALSE,...,compress=TRUE, mse=getOption("survey.replicates.mse")){ if (inherits(design$design[[1]], "svyrep.design")){ warning("already a replicate-weights design") return(design) } pwts<-weights(design$designs[[1]], "sampling") same.weights<-all(sapply(design$designs, function (d) isTRUE(all.equal(pwts, weights(d,"sampling"))))) if (!same.weights && separate.replicates){ repdesigns<-lapply(design$designs, function(d) as.svrepdesign(d, type=type,fay.rho=fay.rho, fpc=fpc,fpctype=fpctype, ..., compress=compress, mse=mse)) } else { design1<-design$designs[[1]] repdesign1<-as.svrepdesign(design1, type=type,fay.rho=fay.rho, fpc=fpc,fpctype=fpctype, ..., compress=compress, mse=mse) repdesigns<-lapply(design$designs, function(d) { repdesign1$variables<-d$variables repdesign1 }) } rval<-list(designs=repdesigns, call=sys.call(-1)) class(rval)<-"svyimputationList" rval } svydesign.DBimputationList<-function(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, ...){ design.vars<-c(all.vars(ids), all.vars(probs), all.vars(strata),all.vars(fpc), all.vars(weights)) design.query<-paste("select", paste(design.vars,collapse=","), "from", data$imputations[1]) design.data<-DBI::dbGetQuery(data$db$connection, design.query) rval<-list() rval$design<-svydesign(ids=ids, probs=probs, strata=strata, data=design.data, fpc=fpc, variables=variables, nest=nest,check.strata=check.strata, weights=weights) class(rval$design)<-c("DBIsvydesign", class(rval$design)) rval$design$updates<-data$updates rval$db<-data$db rval$imputations<-data$imputations rval$variables<-NULL rval$call<-sys.call(-1) class(rval)<-"svyDBimputationList" rval } print.svyDBimputationList<-function(x,...){ cat("DB-backed Multiple (",length(x$imputations),") imputations: ",sep="") print(x$call) } print.svyimputationList<-function(x,...){ cat("Multiple (",length(x$designs),") imputations: ",sep="") print(x$call) } dim.svyimputationList<-function(x){ c(dim(x$designs[[1]]),length(x$designs)) } dimnames.svyimputationList<-function(x){ c(dimnames(x$designs[[1]]),list(paste("imputation",1:length(x$designs)))) } subset.svyimputationList<-function(x, subset,...){ n<-nrow(x$designs[[1]]) e<-substitute(subset) r<-eval(e,x$designs[[1]]$variables, parent.frame()) r <- r & !is.na( r ) x$designs[[1]]<-x$designs[[1]][r,] same<-TRUE for(i in 2:length(x$designs)){ r1<-eval(e,x$designs[[i]]$variables, parent.frame()) x$designs[[i]]<-x$designs[[i]][r1,] r1<-r1 & !is.na(r1) if (any(r!=r1)) { same<-FALSE } } if (!same) warning('subset differed between imputations') x$call<-sys.call(-1) x } subset.svyDBimputationList<-function(x, subset,...,all=FALSE){ n<-nrow(x$designs[[1]]) e<-substitute(subset) df<-getvars(all.vars(e), x$db$connection, x$imputations[1], db.only=FALSE, updates=x$design$updates) r<-eval(e,df, parent.frame()) same<-TRUE for(i in 2:length(x$imputations)){ df<-getvars(all.vars(e), x$db$connection, x$imputations[i], db.only=FALSE, updates=x$design$updates) r1<-eval(e,df, parent.frame()) r1<-r1 & !is.na(r1) if (any(r!=r1)) { same<-FALSE if (all) r <- r & r1 else r<- r | r1 } } if (!same) warning('subset differed between imputations') x$design<-x$design[r,] x$call<-sys.call(-1) x } with.svyimputationList<-function (data, expr, fun, ..., multicore=getOption("survey.multicore")) { pf <- parent.frame() if (multicore && !requireNamespace("parallel",quietly=TRUE)) multicore<-FALSE if (!is.null(match.call()$expr)) { expr <- substitute(expr) expr$design<-as.name(".design") if (multicore){ results <- parallel::mclapply(data$designs, function(.design) { eval(expr, list(.design=.design),enclos=pf) } ) } else{ results <- lapply(data$designs, function(.design) { eval(expr, list(.design=.design),enclos=pf) } ) } } else { results <- lapply(data$designs, fun, ...) } if (all(sapply(results, inherits, what = "imputationResult"))) { class(results) <- "imputationResultList" results$call <- sys.call(-1) } else { attr(results, "call") <- sys.call(-1) } results } withReplicates.svyimputationList<-function(design, theta,...,return.replicates=FALSE){ if (!inherits(design$designs[[1]],"svyrep.design")) stop("not a replicate-weights design") m<-match.call() m[[1]]<-as.name("withReplicates") rval<-eval(bquote(with(design, .(m)))) attr(rval,"call")<-m rval } with.svyDBimputationList<-function (data, expr, ..., multicore=getOption("survey.multicore")) { pf <- parent.frame() if (!is.null(match.call()$expr)) { expr <- substitute(expr) expr$design<-as.name(".design") if (multicore && !requireNamespace("parallel")) multicore <-FALSE if (multicore){ results<-parallel::mclapply(data$imputations, function(tablename) { close(data) .design<-data$design db<-data$db db$tablename<-tablename .design$db<-db .design<-open(.design) rval<-eval(expr, list(.design=.design),enclos=pf) close(.design) rval } ) } else { results <- lapply(data$imputations, function(tablename) { .design<-data$design db<-data$db db$tablename<-tablename .design$db<-db eval(expr, list(.design=.design),enclos=pf) } ) } } attr(results, "call") <- sys.call(-1) results } update.svyDBimputationList<-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$design$updates)) object$design$updates<-list(updates) else object$design$updates<-c(object$design$updates, list(updates)) object } update.svyimputationList<-function(object, ...){ dots <- substitute(list(...))[-1] newnames <- names(dots) for (i in seq(along = object$designs)) { for (j in seq(along = dots)) { object$designs[[i]]$variables[, newnames[j]] <- eval(dots[[j]], object$designs[[i]]$variables, parent.frame()) } } object } close.svyDBimputationList<-function(con,...){ dbcon<-con$db$connection DBI::dbDisconnect(dbcon) invisible(con) } open.svyDBimputationList<-function(con,...){ dbdriver<-DBI::dbDriver(con$db$dbtype) con$db$connection<-DBI::dbConnect(dbdriver,dbname=con$db$dbname,...) con } survey/R/chisqsum.R0000644000176200001440000000553514153237064014004 0ustar liggesusers pchisqsum<-function(x,df,a,lower.tail=TRUE, method=c("satterthwaite","integration","saddlepoint")){ satterthwaite<-function(a,df){ if(any(df>1)){ 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"){ 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/svycdf.R0000644000176200001440000000262113517345031013434 0ustar liggesuserssvycdf<-function(formula,design,na.rm=TRUE,...) UseMethod("svycdf",design) svycdf.default<-function(formula, design,na.rm=TRUE,...){ if (inherits(formula, "formula")) x <- model.frame(formula, model.frame(design), na.action = na.pass) else if (typeof(formula) %in% c("expression", "symbol")) x <- eval(formula, model.frame(design, na.action = na.pass)) else x<-formula if (na.rm) { nas <- rowSums(is.na(x)) x <- x[nas == 0, , drop = FALSE] } rval<-vector("list",ncol(x)) names(rval)<-names(x) for(i in 1:ncol(x)){ xx<-x[,i] w <- weights(design,type="sampling")[nas==0] oo<-order(xx) cum.w<-cumsum(w[oo])/sum(w) cdf <- approxfun( xx[oo],cum.w, method = "constant", yleft =0, yright =1,ties="max") class(cdf)<-"stepfun" call.i<-match.call() call.i$formula<-as.formula(paste("~",names(x)[i])) attr(cdf,"call")<-call.i rval[[names(x)[i]]]<-cdf } class(rval)<-"svycdf" cc<-sys.call() cc[[1]]<-as.name(.Generic) attr(rval,"call")<-cc rval } print.svycdf<-function(x,...){ cat("Weighted ECDFs: ") print(attr(x,"call")) invisible(x) } plot.svycdf<-function(x,xlab=NULL,...){ if(is.null(xlab)) xlab<-names(x) else if (length(xlab)==1) xlab<-rep(xlab,length(names(x))) for (i in 1:length(x)) plot(x[[i]], xlab =xlab[i], ...) } survey/R/ftable.svystat.R0000755000176200001440000000372513517345031015120 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/regtest.R0000755000176200001440000003122714411724132013617 0ustar liggesusers##deviance methods not exported, used by method="LRT" deviance.svycoxph<-function(object,...) if(length(object$ll)==2) 2 * (object$ll[1] - object$ll[2]) else 0 deviance.coxph<-function(object,...) if(length(object$loglik)==2) 2 * (object$loglik[1] - object$loglik[2]) else 0 explicit1<-function(formula){ if (length(formula)==1) return(formula==1) if (!(formula[[1]]=="+" || formula[[1]]=="*" || formula[[1]]=="/" || formula[[1]]=="^"|| formula[[1]]=="~")) return(FALSE) if (length(formula)==3){ (formula[[2]]==1) || explicit1(formula[[2]]) || explicit1(formula[[3]]) } else { (formula[[2]]==1) || explicit1(formula[[2]]) } } regTermTest<-function(model, test.terms, null=NULL, df=NULL, method=c("Wald","WorkingWald","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_intercept<-explicit1(test.terms) test.terms<-attr(terms(test.terms),"term.labels") } else test_intercept<-FALSE 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,"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)) if (test_intercept){ if (attr(terms(model),"intercept")) index<-unique(c(1,index)) else stop("model does not have an intercept") } 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 %in% c("LRT","WorkingWald")){ 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] if (test_intercept){ test.formula<-make.formula(c(1,test.terms))[[2]] } else { test.formula<-make.formula(test.terms)[[2]] } if (!("formula" %in% names(model$call))) names(model$call)[[2]]<-"formula" if (method=="LRT"){ model0<-eval(bquote(update(.(model), .~.-(.(test.formula)),design=.(model$survey.design),subset=NULL)), environment(formula(model))) ## same missing data if (inherits(model,"svyglm")){ rescale<-mean(model$prior.weights)/mean(model0$prior.weights) } else if (inherits(model,"svycoxph")){ rescale<-mean(model$weights)/mean(model0$weights) } else rescale<-1 ##FIXME -- probably want a generic drop_and_refit function chisq<-deviance(model0)*rescale-deviance(model) } else { chisq<-beta%*%solve(V0)%*%beta } 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) if (method=="LRT") class(rval)<-"regTermTestLRT" else class(rval)<- "regTermTestWW" 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) } print.regTermTestWW<-function(x,...){ if (is.null(x$ddf) || x$ddf==Inf) cat("Working (Rao-Scott) Wald test for ") else cat("Working (Rao-Scott+F) for ") cat(x$test.terms) cat("\n in ") print(x$mcall) chisq<-x$chisq/mean(x$lambda) cat("Working Wald statistic = ",chisq, 'p=',format.pval(x$p),"\n") if (length(x$lambda)>1) 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,add=FALSE,...) UseMethod("svycontrast") match.names <- function(nms,contrasts){ l<-length(nms) ll<-sapply(contrasts,length) if (l==0) stop("No names to match") if (length(unlist(sapply(contrasts,names)))==0) return(contrasts) 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, influence=NULL){ 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) if(!is.null(influence)){ attr(rval,"influence")<- influence[,!badin,drop=FALSE]%*%t(contrasts[!bad,!badin,drop=FALSE]) } attr(rval, "var")<-v } else{ rval<-drop(contrasts%*%coef) v<-contrasts%*%var%*%t(contrasts) dimnames(v)<-list(names(rval),names(rval)) if(!is.null(influence)){ attr(rval,"influence")<- influence%*%t(contrasts) } attr(rval,"var")<-v } rval } addQuote<-function(contrasts, original){ ll<-as.list(original) names(ll)<-original ll<-lapply(ll, as.name) c(contrasts,ll) } addLin<-function(contrasts, original){ id<-diag(length(original)) dimnames(id)<-list(original,original) rbind(contrasts,id) } svycontrast.svystat<-function(stat, contrasts,add=FALSE,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.language(contrasts[[1]])){ if(add){ contrasts<-addQuote(contrasts,names(coef(stat))) } rval<-nlcon(contrasts,as.list(coef(stat)), vcov(stat), attr(stat,"influence")) class(rval)<-"svrepstat" attr(rval,"statistic")<-"nlcon" return(rval) } contrasts<-match.names(names(coef(stat)),contrasts) contrasts<-do.call(rbind,contrasts) if (add) contrasts<-addLin(contrasts, names(coef(stat))) coef<-contrast(coef(stat),vcov(stat),contrasts, attr(stat,"influence")) class(coef)<-"svystat" attr(coef,"statistic")<-"contrast" coef } svycontrast.svyolr<-function(stat, contrasts,add=FALSE,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.language(contrasts[[1]])){ if(add){ contrasts<-addQuote(contrasts,names(coef(stat))) } 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) if (add) contrasts<-addLin(contrasts, names(coef(stat))) coef<-contrast(as.vector(as.matrix(coef(stat))), vcov(stat),contrasts) class(coef)<-"svystat" attr(coef,"statistic")<-"contrast" coef } svycontrast.svrepstat<-function(stat, contrasts,add=FALSE,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.language(contrasts[[1]])){ if(add){ contrasts<-addQuote(contrasts,names(coef(stat))) } if (is.list(stat) && !is.null(stat$replicates)){ ##replicates rval<-list(nlcon=nlcon(contrasts,as.list(coef(stat)),varmat=NULL)) reps<-as.matrix(stat$replicates) colnames(reps)<-names(coef(stat)) xreps<-apply(reps,1, function(repi) nlcon(datalist=as.list(repi), exprlist=contrasts, varmat=NULL)) rval$replicates<-if(is.matrix(xreps)) t(xreps) else as.matrix(xreps) attr(rval$nlcon,"var")<-svrVar(rval$replicates, scale=attr(stat$replicates,"scale"), rscales=attr(stat$replicates,"rscales"),mse=attr(stat$replicates,"mse"), coef=rval$nlcon) attr(rval$nlcon,"statistic")<-"nlcon" } else { rval<-nlcon(contrasts,as.list(coef(stat)), vcov(stat)) attr(rval,"statistic")<-"nlcon" } class(rval)<-"svrepstat" return(rval) } else { contrasts<-match.names(names(coef(stat)), contrasts) contrasts<-do.call(rbind,contrasts) if (add) contrasts<-addLin(contrasts, names(coef(stat))) coef<-contrast(coef(stat), vcov(stat), contrasts) attr(coef,"statistic")<-"contrast" if (is.list(stat) && !is.null(stat$replicates)){ coef<-list(contrast=coef, replicates=tcrossprod(stat$replicates, contrasts)) } class(coef)<-"svrepstat" coef } } nlcon<-function(exprlist, datalist, varmat, influence=NULL){ 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 if(!is.null(influence)){ attr(values,"influence")<-influence%*%t(jac) } values } svycontrast.svyglm<-svycontrast.svystat svycontrast.svycoxph<-svycontrast.svystat svycontrast.svrepglm<-svycontrast.svrepstat svycontrast.svrepcoxph<-svycontrast.svrepstat svycontrast.svyby<-svycontrast.svystat svycontrast.default<-svycontrast.svystat svycontrast.svyby<-function(stat, contrasts,...){ if(!is.null(r<-attr(stat, "replicates"))){ s<-coef(stat) attr(s,"var")<-vcov(stat) attr(s,"statistic")<-attr(stat,"svyby")$statistic repstat<-list(stat=s, replicates=r) class(repstat)<-"svrepstat" svycontrast(repstat, contrasts,...) } else NextMethod() ## default } survey/R/smoothUnit.R0000644000176200001440000000542114571730126014314 0ustar liggesuserssvysmoothUnit <- function(formula, domain, design, family = c("gaussian", "binomial"), X.pop = NULL, adj.mat = NULL, domain.size = NULL, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = .95, n.sample = 250, return.samples = FALSE, X.pop.weights = NULL,...) { UseMethod("svysmoothUnit",design) } svysmoothUnit.survey.design <- function(formula, domain, design, family = c("gaussian", "binomial"), X.pop = NULL, adj.mat = NULL, domain.size = NULL, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = .95, n.sample = 250, return.samples = FALSE, X.pop.weights = NULL,...) { if (!requireNamespace("SUMMER", quietly = TRUE)) { stop( "Package \"SUMMER\" must be installed to use this function.", call. = FALSE ) } family<-match.arg(family) rval<-SUMMER::smoothUnit(formula = formula, domain = domain, design = design, family = family, X.pop = X.pop, adj.mat = adj.mat, domain.size = domain.size, pc.u = pc.u, pc.alpha = pc.alpha, pc.u.phi = pc.u.phi, pc.alpha.phi = pc.alpha.phi, level = level, n.sample = n.sample, return.samples = return.samples, X.pop.weights = X.pop.weights) rval$call<-sys.call(-1) rval } svysmoothUnit.default <- function(formula, domain, design, family = c("gaussian", "binomial"), X.pop = NULL, adj.mat = NULL, domain.size = NULL, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = .95, n.sample = 250, return.samples = FALSE, X.pop.weights = NULL,...) { stop("svysmoothUnit is only available for survey.design objects") } survey/R/svyivreg.R0000644000176200001440000000340514204276141014014 0ustar liggesusers svyivreg<-function(formula, design, ...) UseMethod("svyivreg",design) svyivreg.survey.design<-function(formula, design,...){ .data<-model.frame(design) .data$.weights<-weights(design,"sampling") .weights<-NULL ## make CMD check happy ##estfun<-get("estfun",mode="function") model<- AER::ivreg(formula, data=.data, weights=.weights) U<-estfun.ivreg(model)/weights(design,"sampling") n<-NROW(U) infl<- U%*%model$cov.unscaled v<-vcov(svytotal(infl, design)) model$invinf<-model$cov.unscaled model$cov.unscaled<-v model$df.residual<-degf(design)+1-length(coef(model)) model$sigma<-model$sigma/sqrt(mean(weights(design,"sampling"))) model$call<-sys.call(-1) class(model)<-c("svyivreg","ivreg") model } summary.svyivreg<-function(object, df = NULL, ...){ V<-vcov(object) class(object)<-"ivreg" summary(object, vcov.=V, df=df, diagnostics=FALSE,...) } vcov.svyivreg<-function(object,...) object$cov.unscaled svyivreg.svyrep.design<-function(formula, design,return.replicates=FALSE,...){ .pweights<-NULL ## make CMD check happy withReplicates(design, return.replicates=return.replicates, function(.weights, .data){ .data$.pweights<-.weights m<-AER::ivreg(formula,data= .data, weights=.pweights) coef(m) }) } estfun.ivreg<-function (x, ...) { xmat <- model.matrix(x) if (any(alias <- is.na(coef(x)))) xmat <- xmat[, !alias, drop = FALSE] wts <- weights(x) if (is.null(wts)) wts <- 1 res <- residuals(x) rval <- as.vector(res) * wts * xmat attr(rval, "assign") <- NULL attr(rval, "contrasts") <- NULL return(rval) } survey/R/loglin.R0000644000176200001440000001471314526736254013443 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))="4.4.0") FALSE else NULL an<-anova(m0,m1,test=no_tests) dev<-an$Deviance[2] if (integrate){ pdev<-pchisqsum(dev,rep(1,ncol(wX2)), a=eigen(Delta,only.values=TRUE,symmetric=TRUE)$values, lower.tail=FALSE,method="integration") } else pdev<-NA pdev1<-pchisq(dev*ncol(wX2)/tr(Delta),df=ncol(wX2),lower.tail=FALSE) pdev2a<-pf(dev/tr(Delta), tr(Delta)^2/tr2(Delta), dfnull*tr(Delta)^2/tr2(Delta), lower.tail=FALSE) pdevsad<-pchisqsum(dev,rep(1,ncol(wX2)), a=eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint") pearson<-n*sum( (pi1-pi0)^2/pi0 ) if (integrate){ pearsonp<-pchisqsum(pearson, rep(1,ncol(wX2)), a=eigen(Delta,only.values=TRUE,symmetric=TRUE)$values, lower.tail=FALSE,method="integration") } else pearsonp<-NA prs1<-pchisq(pearson*ncol(wX2)/tr(Delta),df=ncol(wX2),lower.tail=FALSE) prs2<-pchisq(pearson*ncol(wX2)/tr(Delta),df=tr(Delta)^2/tr2(Delta),lower.tail=FALSE) prs2a<-pf(pearson/tr(Delta), ncol(wX2)*tr(Delta)^2/tr2(Delta),ncol(wX2)*dfnull*tr(Delta)^2/tr2(Delta), lower.tail=FALSE) pchisqsad<-pchisqsum(pearson, rep(1,ncol(wX2)), a=eigen(Delta,only.values=TRUE,symmetric=TRUE)$values, lower.tail=FALSE,method="saddlepoint") rval<-list(an, dev=list(dev=dev, p=c(pdev,pdev1,pdev2a,pdevsad)), score=list(chisq=pearson,p=c(pearsonp,prs1,prs2a,pchisqsad)), integrate=integrate,a=eigen(Delta,only.values=TRUE,symmetric=TRUE)$values,p=ncol(wX2)) class(rval)<-"anova.svyloglin" rval } print.anova.svyloglin<-function(x,pval=c("F","saddlepoint","lincom","chisq"),...){ cat(attr(x[[1]],"heading"),"\n") pval<-match.arg(pval) if (pval=="lincom" && !x$integrate){ x$dev$p[1]<-pchisqsum(x$dev$dev, rep(1,x$p), a=x$a, lower.tail=FALSE,method="integration") x$score$p[1]<-pchisqsum(x$score$chisq, rep(1,x$p), a=x$a, lower.tail=FALSE,method="integration") } cat("Deviance=",x$dev$dev,"p=", switch(pval,lincom=x$dev$p[1], saddlepoint=x$dev$p[4], chisq=x$dev$p[2], F=x$dev$p[3]),"\n") cat("Score=",x$score$chisq,"p=", switch(pval,lincom=x$score$p[1], saddlepoint=x$score$p[4], chisq=x$score$p[2], F=x$score$p[3]),"\n") invisible(x) } summary.svyloglin<-function(object,...){ rval<-list(ll=object) class(rval)<-"summary.svyloglin" rval } print.summary.svyloglin<-function(x,...){ print(x$ll) print(cbind(coef=coef(x$ll), se=SE(x$ll), p=2*pnorm(abs(coef(x$ll)/SE(x$ll)),lower.tail=FALSE))) invisible(x) } svyloglin.svyrep.design<-svyloglin.survey.design svyloglin.DBIsvydesign<-function (formula, design, ...) { design$variables <- dropFactor(getvars(formula, design$db$connection, design$db$tablename, updates = design$updates), weights(design)) class(design)<-c("survey.design2","survey.design") rval<-svyloglin(formula,design) rval$call<-sys.call() rval$call[[1]]<-as.name(.Generic) rval } survey/R/dbiupdate.R0000644000176200001440000000536413517615617014120 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) } 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) in.db <- infilter$varlist[infilter$varlist %in% names(oneline)] } query <- paste("select", paste(in.db, collapse = ", "), "from", tables) df <- DBI::dbGetQuery(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 } survey/R/newsvyquantile.R0000644000176200001440000002564614411725461015253 0ustar liggesuserssvyquantile<-function(x,design,quantiles,...) UseMethod("svyquantile", design) svyquantile.survey.design <- function (x, design, quantiles, alpha = 0.05, interval.type = c("mean", "beta","xlogit", "asin","score"), na.rm = FALSE, ci=TRUE, se = ci, qrule=c("math","school","shahvaish","hf1","hf2","hf3","hf4","hf5","hf6","hf7","hf8","hf9"), df = NULL, ...) { 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 } if(is.null(df)) df<-degf(design) if (is.character(qrule)){ qrulename<-paste("qrule",match.arg(qrule),sep="_") qrule<-get(qrulename, mode="function") } qcrit<-if(df==Inf) qnorm else function(...) qt(...,df=df) interval.type<-match.arg(interval.type) if (interval.type=="score"){ ci_fun<-ffullerCI } else { ci_fun<-function(...) woodruffCI(...,method=interval.type) } w<-weights(design) rvals<-lapply(x, function(xi){ r<-t(sapply(quantiles, function(p){ qhat<-qrule(xi,w,p) if(ci){ ci<-ci_fun(xi,qhat,p,design,qrule,alpha,df) names(ci)<-c(round(100*alpha/2,2),round(100-100*alpha/2,2)) c(quantile=qhat,ci=ci, se=as.numeric(diff(ci)/(2*qcrit(1-alpha/2))) ) } else { c(quantile=qhat) } } )) if(!ci) colnames(r)<-quantiles else rownames(r)<-quantiles r } ) attr(rvals,"hasci")<-ci class(rvals)<-"newsvyquantile" rvals } svyquantile.svyrep.design <- function (x, design, quantiles, alpha = 0.05, interval.type = c("mean", "beta","xlogit", "asin","quantile"), na.rm = FALSE, ci=TRUE, se = ci, qrule=c("math","school","shahvaish","hf1","hf2","hf3","hf4","hf5","hf6","hf7","hf8","hf9"), df = NULL, return.replicates=FALSE,...) { interval.type <- match.arg(interval.type) if (design$type %in% c("JK1", "JKn") && interval.type == "quantile") warning("Jackknife replicate weights may not give valid standard errors for quantiles") if (design$type %in% "other" && interval.type == "quantile") message("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 (is.character(qrule)){ qrulename<-paste("qrule",match.arg(qrule),sep="_") qrule<-get(qrulename, mode="function") } if (is.null(df)) df <- degf(design) if (df == Inf) qcrit <- qnorm else qcrit <- function(...) qt(..., df = df) w<-weights(design,"sampling") if (interval.type=="quantile"){ ci_fun<-function(...) repCI(...,return.replicates=return.replicates) } else { if(return.replicates) warning("return.replicates=TRUE only implemented for interval.type='quantile'") ci_fun<- function(...) woodruffCI(..., method = interval.type) } if ((interval.type=="quantile") && return.replicates){ rvals<-lapply(x, function(xi){ lapply(quantiles, function(p){ qhat<-qrule(xi,w,p) ci<-ci_fun(xi,qhat,p,design,qrule,alpha,df) list(quantile=qhat, replicates=attr(ci,"replicates")) } ) } ) ests<-sapply(rvals, function(v) sapply(v, function(qi) qi$quantile)) ests <- matrix(ests, nrow = length(quantiles), ncol = length(rvals), dimnames=list(paste("q",round(quantiles,2),sep=""), names(x))) attr(ests, "scale") <- design$scale attr(ests, "rscales") <- design$rscales attr(ests, "mse") <- design$mse reps<-sapply(rvals, function(v) sapply(v, function(qi) qi$replicates)) reps <- matrix(reps, ncol = nrow(ests) * ncol(ests)) colnames(reps) <- as.vector(outer(names(x), paste("q",round(quantiles,2),sep=""), paste)) rval <- ests attr(rval,"statistic") <- 'quantiles' vv <- svrVar(reps, design$scale, design$rscales, mse=design$mse, coef=ests) attr(rval,"var") <- matrix(diag(vv), nrow = nrow(ests), ncol = ncol(ests), dimnames=list(paste("q",round(quantiles,2),sep=""), names(x))) rval<-list(quantile=rval,replicates=reps) class(rval)<-"svrepstat" return(rval) } else { rvals<-lapply(x, function(xi){ r<- t(sapply(quantiles, function(p){ qhat<-qrule(xi,w,p) if(ci){ ci<-ci_fun(xi,qhat,p,design,qrule,alpha,df) names(ci)<-c(round(100*alpha/2,2),round(100-100*alpha/2,2)) c(quantile=qhat,ci=ci, se=unname(diff(ci)/(2*qcrit(1-alpha/2))) )} else{ c(quantile=qhat) } } )) if(!ci) colnames(r)<-quantiles else rownames(r)<-quantiles r } ) attr(rvals,"hasci")<-ci | se class(rvals)<-"newsvyquantile" } rvals } SE.newsvyquantile<-function(object,...) { if(!attr(object,"hasci")) stop("object does not have uncertainty estimates") do.call(c,lapply(object,function(ai) ai[,4])) } vcov.newsvyquantile<-function(object,...) { if(!attr(object,"hasci")) stop("object does not have uncertainty estimates") r<-do.call(c,lapply(object,function(ai) ai[,4]))^2 v<-matrix(NA,nrow=length(r),ncol=length(r)) diag(v)<-r v } coef.newsvyquantile<-function(object,...){ if(attr(object,"hasci")) do.call(c,lapply(object,function(ai) ai[,1])) else do.call(c,lapply(object,function(ai) ai[1,])) } confint.newsvyquantile<-function(object,...){ if(!attr(object,"hasci")) stop("object does not have uncertainty estimates") l<-do.call(c,lapply(object,function(ai) ai[,2])) u<-do.call(c,lapply(object,function(ai) ai[,3])) cbind(l,u) } woodruffCI<-function(x, qhat,p, design, qrule,alpha,df,method=c("mean","beta","xlogit","asin")){ method<-match.arg(method) m<-svymean(x<=qhat, design) names(m)<-"pmed" pconfint<-switch(method, mean=as.vector(confint(m, 1, level = 1-alpha, df = df)), xlogit= {xform <- svycontrast(m, quote(log(`pmed`/(1 - `pmed`)))); expit(as.vector(confint(xform, 1, level = 1-alpha, df = df)))}, beta={n.eff <- coef(m) * (1 - coef(m))/vcov(m); rval <- coef(m)[1] n.eff <- n.eff * (qt(alpha/2, nrow(design) - 1)/qt(alpha/2, degf(design)))^2 c(qbeta(alpha/2, n.eff * rval, n.eff * (1 - rval) + 1), qbeta(1 - alpha/2, n.eff * rval + 1, n.eff * (1 - rval))) }, asin={xform <- svycontrast(m, quote(asin(sqrt(`pmed`)))) sin(as.vector(confint(xform, 1, level = 1-alpha, df = df)))^2 } ) lower<-if(is.nan(pconfint[1]) || (pconfint[1]<0)) NaN else qrule(x,weights(design,"sampling"), pconfint[1]) upper<-if(is.nan(pconfint[2])|| (pconfint[2]>1)) NaN else qrule(x,weights(design,"sampling"), pconfint[2]) rval<-c(lower, upper) names(rval)<-c(round(100*alpha/2,1),round(100*(1-alpha/2),1)) rval } ffullerCI<-function(x, qhat, p, design, qrule, alpha, df){ qcrit<-if(df==Inf) qnorm else function(...) qt(...,df=df) U <- function(theta) { ((x > theta) - (1 - p)) } scoretest <- function(theta, qlimit) { umean <- svymean(U(theta), design) umean/SE(umean) - qlimit } iqr <- IQR(x) lowerT <- min(x) + iqr/100 upperT <- max(x) - iqr/100 tol <- 1/(100 * sqrt(nrow(design))) qlow<- uniroot(scoretest, interval = c(lowerT, upperT), qlimit = qcrit(alpha/2, lower.tail = FALSE), tol = tol)$root qup<-uniroot(scoretest, interval = c(lowerT, upperT), qlimit = qcrit(alpha/2, lower.tail = TRUE), tol = tol)$root w<-weights(design) c(qrule(x, w, mean(x<=qlow)), qrule(x, w, mean(x<=qup))) } repCI<-function(x, qhat, p, design, qrule, alpha, df,return.replicates){ qcrit<-if(df==Inf) qnorm else function(...) qt(...,df=df) wrep<-weights(design,"analysis") reps<-apply(wrep,2, function(wi) qrule(x,wi,p)) v<-with(design, svrVar(reps, scale=scale, rscales=rscales, mse=mse,coef=qhat)) ci<- qhat+ c(-1,1)*sqrt(v)*qcrit(1-alpha/2) if (return.replicates) attr(ci,"replicates")<-reps ci } survey/R/gofchisq.R0000644000176200001440000000175513743755164013765 0ustar liggesuserssvygofchisq<-function(formula, p, design,...){ p<-p/sum(p) means<-svytotal(formula, design,...) rval<-chisq.test(means,p=p) nm<-names(coef(means)) ncat<-length(coef(means)) means<-svycontrast(means, list(N=rep(1,ncat)), add=TRUE) pN<-split(cbind(p,0*diag(p)), paste0("p_",nm)) names(pN)<-paste0("p_",nm) means<-svycontrast(means, pN,add=TRUE) for(i in 1:length(nm)){ O<-as.name(nm[i]) E<-as.name(names(pN)[i]) expr<-list(bquote((.(O)-.(E))/sqrt(.(E)))) names(expr)[[1]]<-paste0("X2_",O) means<-svycontrast(means,expr,add=TRUE) } result<-svycontrast(means, rep(c(1,0),c(ncat,2*ncat+1))) lambda<-eigen(vcov(means)[1:ncat,1:ncat])$values tr <- mean(lambda) tr2 <- mean(lambda ^2)/(tr^2) scale = tr * tr2 df = ncat/tr2 rval$parameter<-c(scale=scale,df=df) rval$p.value<-pchisqsum(rval$statistic,rep(1,ncat), lambda,lower.tail=FALSE) rval$data.name<-deparse(formula) rval$method<-"Design-based chi-squared test for given probabilities" rval$lambda<-lambda rval }survey/R/pFsum.R0000644000176200001440000000235413517345031013233 0ustar liggesuserspFsum<-function(x,df,a,ddf=Inf,lower.tail=TRUE,method=c("saddlepoint","integration","satterthwaite"),...){ if (ddf==Inf) return(pchisqsum(x,df=df,a=a,lower.tail=lower.tail,...)) method<-match.arg(method) if (method=="integration" && !(requireNamespace("CompQuadForm",quietly=TRUE))){ warning("Package 'CompQuadForm' not found, using saddlepoint approximation") method<-"saddlepoint" } if (method=="integration"){ int<-CompQuadForm::davies(0,lambda=c(a,-x/ddf), h=c(df,ddf),acc=1e-7) if ( (int$ifault %in% c(0,2))){ rval<-int$Qq } else { rval<-CompQuadForm::davies(0,lambda=c(a,-x/ddf), h=c(df,ddf),acc=1e-5)$Qq } if(lower.tail) return(1-rval) else return(rval) } else if (method %in% c("satterthwaite","saddlepoint")){ if(any(df>1)){ 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/RcppExports.R0000644000176200001440000000152314462643117014435 0ustar liggesusers# Generated by using Rcpp::compileAttributes() -> do not edit by hand # Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 arma_onestage <- function(Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, stage) { .Call('_survey_arma_onestage', PACKAGE = 'survey', Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, stage) } arma_multistage <- function(Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, use_only_first_stage, stage) { .Call('_survey_arma_multistage', PACKAGE = 'survey', Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, use_only_first_stage, stage) } survey/R/compressweights.R0000755000176200001440000000245313517345031015372 0ustar liggesusers "dim.repweights_compressed"<-function(x){ c(length(x$index),ncol(x$weights)) } "dimnames.repweights_compressed"<-function(x){ list(names(x$index), colnames(x$weights)) } "[.repweights_compressed"<-function(x,i,...,drop=FALSE){ if (!missing(i)){ x$index<-x$index[i] if(!missing(..1)) x$weights<-x$weights[,..1,drop=FALSE] } else{ ## this is faster than just subscripting x$weights (!) x<-list(index=x$index, weights=x$weights[,...,drop=FALSE]) class(x)<-c("repweights_compressed","repweights") } x } "as.matrix.repweights_compressed"<-function(x,...){ x$weights[x$index,,drop=FALSE] } "as.vector.repweights_compressed"<-function(x,...){ as.vector(x$weights[x$index,]) } "as.matrix.repweights"<-function(x,...){ x } compressWeights<-function(rw,...){ UseMethod("compressWeights") } "compressWeights.repweights_compressed"<-function(rw,...){ compressWeights(as.matrix(rw)) } compressWeights.default<-function(rw,...){ mat<-as.matrix(rw) tmp<-apply(mat,1,function(x) paste(x,collapse="\r")) unq<-!duplicated(mat) rval<-list(weights=mat[unq,],index=match(tmp,tmp[unq])) class(rval)<-c("repweights_compressed","repweights") rval } compressWeights.svyrep.design<-function(rw,...){ rw$repweights<-compressWeights(rw$repweights,...) rw } survey/R/svyqq.R0000644000176200001440000000444513707657463013347 0ustar liggesusers svyqqmath<-function(x, design, null=qnorm, na.rm=TRUE,xlab="Expected",ylab="Observed",...){ 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 } n<-NROW(x) for(variable in seq_len(NCOL(x))){ ii<-order(x[, variable]) obsi<-x[ii, variable] w<-weights(design,"sampling")[ii] cumw<-(cumsum(w)/sum(w))*(n/(n+1)) expi<-null(cumw) plot(expi,obsi,xlab=xlab,ylab=ylab,...) } invisible(NULL) } svyqqplot<-function(formula, design, designx=NULL, na.rm=TRUE,qrule="hf8",xlab=NULL,ylab=NULL,...){ if (is.null(designx)){ if (inherits(formula, "formula")) x <- model.frame(formula, model.frame(design), na.action = na.pass) else if (typeof(x) %in% c("expression", "symbol")) x <- eval(formula, 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 } Y<-x[,1] X<-x[,2] wx<-wy<-weights(design,"sampling") } else { xform<-formula[-2] yform<-make.formula(formula[[2]]) environment(yform)<-environment(formula) Y<- model.frame(formula, model.frame(design), na.action = na.pass)[[1]] wy<-weights(design,"sampling") X<- model.frame(formula, model.frame(designx), na.action = na.pass)[[1]] wx<-weights(designx,"sampling") } n<-length(Y) m<-length(X) if(is.null(xlab)) xlab<-deparse(formula[[3]]) if(is.null(ylab)) ylab<-deparse(formula[[2]]) if(is.character(qrule)) qrule<-get(paste("qrule",qrule,sep="_"), mode="function") if (nm){ Y<-sapply(1:m, function(i) qrule(Y,wy, i/m)) } plot(sort(X),sort(Y),xlab=xlab,ylab=ylab,...) } survey/R/surveygraph.R0000755000176200001440000002314213707676710014535 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<-coef(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/multivariate.R0000644000176200001440000001122313517345031014642 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/ht.R0000644000176200001440000000163013517345031012550 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/mrb.R0000644000176200001440000000354214020241104012703 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] fpc<- fpcs$sampsize[thisstratum,i][1]/fpcs$popsize[thisstratum,i][1] if (nstar==0) { wstar<-0 keep<- rep(FALSE,sum(thisstratum)) } else { 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 30) { ## plot_breaks <- c(seq(0, m, by = 30), m) ## plot_labels <- paste0( ## "Areas ", ## (seq_along(plot_breaks)[-1] - 2) * 30 + 1, ## " to ", ## pmin((seq_along(plot_breaks)[-1] - 1) * 30, m) ## ) ## combined_est$plot <- ## cut(1:m, breaks = plot_breaks, labels = plot_labels) ## } else { ## combined_est$plot <- 1 ## } ## plot_list <- split(combined_est, combined_est$plot) ## for (y in plot_list) { ## n_domains <- length(unique(y$domain)) ## plot_dat <- data.frame( ## domain = y$domain, ## xval = match(y$domain, unique(y$domain)), ## est = y$median, ## lower = y$lower, ## upper = y$upper, ## method = as.factor(y$method) ## ) ## plot_dat$xval <- plot_dat$xval + (as.numeric(plot_dat$method) - 1) * ## .2 - (.2 * (n_methods - 1) / 2) ## par(mar = c(9, 5, 4, 3)) ## plot(est ~ xval, data = plot_dat, xaxt = "n", xlab = "", pch = 16, ## col = (2:(n_methods + 1))[plot_dat$method], cex = .5, ## ylim = c(min(plot_dat$lower), max(plot_dat$upper)), ## ylab = "Estimate", ## cex.axis = .75) ## segments(plot_dat$xval, plot_dat$lower, plot_dat$xval, plot_dat$upper, ## col = (2:(n_methods + 1))[plot_dat$method], cex = .5) ## axis(1, at = 1:n_domains, labels = unique(as.character(y$domain)), las = 2, ## cex.axis = .65) ## legend("topleft", inset = .01, legend = levels(plot_dat$method), ## col=(2:(n_methods + 1)), lty=1, cex=0.8, box.lty=0) ## } ## } survey/R/svyranktest.R0000644000176200001440000001045014226370323014532 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)) } 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") ## calibrated designs have weights set to zero, not removed na.fixup<-FALSE if (is.calibrated(design) && length(w)>n && !is.null(naa)){ w<-w[-naa] na.fixup<-TRUE } 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) if (na.fixup){ infn<-matrix(0,nrow=nrow(xmat)+length(naa),ncol=ncol(xmat)) infn[-naa,]<-(xmat*(rankscore-fitted(m)))%*%summary(m)$cov.unscaled } else { 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") ## calibrated designs have weights set to zero, not removed if (is.calibrated(design) && length(w)>n && !is.null(naa)){ w<-w[-naa] } 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) m$na.action<-naa 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 } cov_inffun_glm<-function(m, design){ A<-summary(m)$cov.unscaled xmat <- model.matrix(m) U<-residuals(m, "working") * m$weights * xmat/weights(design,"sampling") h<-U%*%A vcov(svytotal(h, design)) } survey/R/grake.R0000644000176200001440000004320514423650257013240 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 } cal_names <- function(formula, design, ...) UseMethod("cal_names",design) cal_names.DBIsvydesign<-function(formula, design,...){ design$variables <- getvars(formula, design$db$connection, design$db$tablename, updates = design$updates, subset = design$subset) colnames(model.matrix(formula, model.frame(formula,design$variables[0,]))) } cal_names.survey.design<-function(formula,design,...) { colnames(model.matrix(formula, model.frame(formula,model.frame(design)[0,]))) } print.calfun<-function(x,...) cat("calibration metric: ",x$name,"\n") calibrate<-function(design, ...) UseMethod("calibrate") calibrate.pps<-function(design, formula, population, aggregate.stage=NULL, stage=0,...){ if (!is.null(stage) && !(stage==0)) stop("'stage'(>0) not supported for pps designs") if (!is.null(aggregate.stage)) stop("'aggregate.stage' not supported for pps designs") calibrate.survey.design2(design, formula, population, aggregate.stage=NULL, stage=0,,...) } 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) ifelse(ww>0,x/ww,x)) # 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.") cat("Sample: "); print(names(sample.total)) cat("Popltn: "); print(names(population)) } 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("Sampling and population totals have different names.") cat("Sample: "); print(names(sample.total)) cat("Popltn: "); print(names(population)) } 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<-MASS::ginv(as(Tmat, "matrix"), tol=256*.Machine$double.eps)%*%misfit 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") } do_trimWeights<-function(pw, upper,lower, has_trimmed){ outside<-pwupper if (!any(outside)) return(list(weights=pw,has_trimmed=has_trimmed)) pwnew<-pmax(lower,pmin(pw, upper)) trimmings<-pw-pwnew can_trim<-!outside & !has_trimmed if (!any(can_trim)){ warning("trimming failed") } else { pwnew[can_trim]<-pwnew[can_trim]+sum(trimmings)/sum(can_trim) } list(weights=pwnew,has_trimmed=outside | has_trimmed) } trimWeights.survey.design2<-function(design, upper=Inf, lower= -Inf, strict=FALSE,...){ pw<-weights(design,"sampling") outside<-pwupper if (!any(outside)) return(design) ## doesn't need trimming has_trimmed<-rep(FALSE,length(outside)) while(any(outside)){ trim<-do_trimWeights(pw, upper,lower, has_trimmed) pw<-trim$weights if (!strict) break outside<-pwupper has_trimmed<-trim$has_trimmed } design$prob<-1/pw design$call<-sys.call() design$call[[1]]<-as.name(.Generic) design } trimWeights.svyrep.design<-function(design, upper=Inf, lower= -Inf, strict=FALSE, compress=FALSE,...){ pw<-weights(design,"sampling") outside<-pwupper if (any(outside)) { has_trimmed<-rep(FALSE,length(outside)) while(any(outside)){ trim<-do_trimWeights(pw, upper,lower, has_trimmed) pw<-trim$weights if (!strict) break outside<-pwupper has_trimmed<-trim$has_trimmed } design$prob<-1/pw } rw<-weights(design, "analysis") outside<-rwupper if (any(outside)) { rwnew<-matrix(pmax(lower,pmin(rw, upper)),nrow=nrow(rw)) trimmings<-rw-rwnew rwnew<-rwnew+t(t(!outside)*colSums(trimmings)/colSums(!outside)) if (compress) design$repweights<-compressWeights(rwnew) else design$repweights<-rwnew design$combined.weights<-TRUE } design$call<-sys.call() design$call[[1]]<-as.name(.Generic) 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)<-paste(deparse(formula[[2]]),collapse="") 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/transform.R0000644000176200001440000000076413517345031014157 0ustar liggesusers## another name for update() transform.survey.design<-function(`_data`, ...) update(`_data`,...) transform.svyrep.design<-function(`_data`, ...) update(`_data`,...) transform.twophase<-function(`_data`, ...) update(`_data`,...) transform.twophase2<-function(`_data`, ...) update(`_data`,...) transform.ODBCsvydesign<-function(`_data`, ...) update(`_data`,...) transform.DBIsvydesign<-function(`_data`, ...) update(`_data`,...) transform.svyimputationList<-function(`_data`, ...) update(`_data`,...) survey/R/mse.R0000644000176200001440000000066613517345031012731 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/qrule.R0000644000176200001440000000622414526736254013305 0ustar liggesusers ## Need to call qs() from qrule(), because definition of p varies by rule. ## Discrete qrule_math <-qrule_hf1 <- function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } qdata<-qs(x,w,p) if(qdata$wlow<=0) qdata$qlow else qdata$qup } qrule_school<-qrule_hf2 <- function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } qdata<-qs(x,w,p) if(qdata$wlow<=0) (qdata$qlow+qdata$qup)/2 else qdata$qup } qrule_hf3 <- function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } w<-rowsum(w,x) x<-sort(unique(x)) qdata<-qs(x,w,p) if((qdata$wlow<=0)&& (qdata$ilow %%2 ==0)) qdata$qlow else qdata$qup } ## Continuous qrule_hf4 <- function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } qdata<-qs(x,w,p) gamma<-with(qdata, wlow/(wup+wlow)) qdata$qlow*(1-gamma)+qdata$qup*gamma } qrule_hf5<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] cumw<-cumsum(w) pk<-(cumw-w/2)/(cumw[n]) approx( pk,x, p, method="linear", rule=2)$y } qrule_hf6<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] cumw<-cumsum(w) pk<-cumw/(cumw[n]+w[n]) approx( pk,x, p, method="linear", rule=2)$y } qrule_shahvaish<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] wbar<-w/mean(w) S<-cumsum(wbar) pk<-(S+0.5-w/2)/(n+1) approx( pk,x, p, method="constant", f=0, rule=2)$y } qrule_hf7<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] cumw<-cumsum(w[ii]) pk<-c(0, cumw[-n])/cumw[n-1] approx( pk,x, p, method="linear", rule=2)$y } qrule_hf8<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] cumw<-cumsum(w) pk<-(c(0, cumw[-n])*1/3+cumw*2/3)/(cumw[n]+w[n]/3) approx( pk,x, p, method="linear", rule=2)$y } qrule_hf9<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] cumw<-cumsum(w) pk<-(c(0, cumw[-n])*3/8+cumw*5/8)/(cumw[n]+w[n]/4) approx( pk,x, p, method="linear", rule=2)$y } last<-function(a) { if (any(a)) max(which(a)) else 1 } qs <- function(x, w, p){ ## already has missings removed, ties handled. n<-length(x) ii<-order(x) x<-x[ii] cumw<-cumsum(w[ii]) pos<-last(cumw<=p*sum(w)) posnext<-if(pos==length(x)) pos else pos+1 list(qlow=x[pos], qup=x[posnext], ilow=pos,iup=posnext, wlow=p-cumw[pos]/sum(w),wup=cumw[posnext]/sum(w)-p) } survey/R/score.R0000644000176200001440000001356414526736254013275 0ustar liggesusers fisherinf<-function(beta, model, X=model.matrix(model)){ design<-model$survey.design eta<-X %*%beta mu<-drop(family(model)$linkinv(eta)) V<-family(model)$variance(mu) d<-drop(family(model)$mu.eta(eta)) w<-weights(design,"sampling") D<-X*d t(D)%*%(w*D/V) } scores<-function(model, newbeta, X=model.matrix(model),fullrank=TRUE){ design<-model$survey.design out<-newbeta==0 eta<-X %*%newbeta Xin<-X[, !out, drop=FALSE] Xout<-X[, out, drop=FALSE] Xout_in<-qr.resid(qr(Xin),Xout) mu<-drop(family(model)$linkinv(eta)) V<-family(model)$variance(mu) d<-drop(family(model)$mu.eta(eta)) Y<-model$y Uin<-Xin*((d/V)*(Y-mu)) Uout<-Xout*((d/V)*(Y-mu)) I_rss98<-fisherinf(newbeta, model, X) ## equation 3.3, Rao, Scott, and Skinner 1998 Atwiddle<-I_rss98[out,!out]%*%solve(I_rss98[!out,!out]) #equation 3.2, ibid Uout_in<-Uout-Uin%*%t(Atwiddle) if(fullrank){ rankcheck<-qr(Uout_in) if (rankcheck$rank1){ 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") if (!is.null(calibrate.formula)){ rval<-recalibrate(rval, calibrate.formula) rval$call<-sys.call(-1) } rval } onestrat<-function(x,cluster,nPSU,fpc, lonely.psu,stratum=NULL,stage=1,cal=cal){ stratum_center <- attr(x, "recentering") if (is.null(stratum_center)) stratum_center <- 0 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"))) { stratum_center <- colMeans(x) } x<-sweep(x=x, MARGIN=2, STATS=stratum_center, FUN="-") 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){ if (NROW(x)==0) return(matrix(0,NCOL(x),NCOL(x))) ## For the 'adjust' option for lonely PSUs, ## recenter around mean from all PSUs in all strata if (!is.null(lonely.psu) && lonely.psu == "adjust") { n_PSUs_from_all_strata <- sum(tapply(X = nPSU, INDEX = as.numeric(strata), FUN = head, 1)) recentering <- colSums(x) / n_PSUs_from_all_strata } else { recentering <- 0 } stratvars<- tapply(1:NROW(x), list(factor(strata)), function(index){ onestrat(x[index,,drop=FALSE] |> `attr<-`('recentering', recentering), 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 if(isFALSE(fpcs$pps)) use_rcpp<-getOption("survey.use_rcpp") else use_rcpp<-FALSE ## Brewer's method, doesn't work with the current rcpp version ## 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)) use_rcpp<-FALSE } } 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 } } } if (use_rcpp) { multistage_rcpp(x, clusters,stratas,fpcs$sampsize, fpcs$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage,stage=1,cal=cal) } else { 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 } ## Ben Schneider's code to use C++. Should *agree* with multistage() except ## for one known bug in lonely.psu ## multistage_rcpp <- function(x, clusters, stratas, nPSUs, fpcs, lonely.psu=getOption("survey.lonely.psu"), one.stage=FALSE, stage, cal){ lonely.psu <- switch(lonely.psu, certainty = 'certainty', remove = 'remove', adjust = 'adjust', average = 'average', fail = 'fail', stop("Can't handle lonely.psu=",lonely.psu) ) use_singleton_method_for_domains <- isTRUE(getOption("survey.adjust.domain.lonely")) # Prepare the inputs to pass to Rcpp function if (is.data.frame(clusters)) { for (j in seq_len(ncol(clusters))) { if (!is.numeric(clusters[[j]])) clusters[[j]] <- as.numeric(as.factor(clusters[[j]])) } } clusters <- as.matrix(clusters) if (is.data.frame(stratas)) { for (j in seq_len(ncol(stratas))) { if (!is.numeric(stratas[[j]])) stratas[[j]] <- as.numeric(as.factor(stratas[[j]])) } } stratas <- as.matrix(stratas) if (is.null(fpcs)) { strata_pop_sizes <- matrix(Inf, nrow = nrow(nPSUs), ncol = ncol(nPSUs)) } else { strata_pop_sizes <- as.matrix(fpcs) } strata_samp_sizes <- as.matrix(nPSUs) # Call the Rcpp function v <- arma_multistage(Y = as.matrix(x), samp_unit_ids = clusters, strata_ids = stratas, strata_samp_sizes = strata_samp_sizes, strata_pop_sizes = strata_pop_sizes, singleton_method = lonely.psu, use_singleton_method_for_domains = getOption("survey.adjust.domain.lonely"), use_only_first_stage = one.stage, stage = stage) 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) sum(!duplicated(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,pps=pps) 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,influence=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 (influence){ if (na.rm && (length(nas)>length(design$prob))) { infl<-matrix(0,ncol=NCOL(x),nrow=length(nas)) infl[nas==0,]<-x/design$prob attr(total, "influence")<-infl } else { attr(total, "influence")<-x/design$prob } } 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,influence=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" if (influence){ if (na.rm && (length(nas)>length(pweights))) { infl<-matrix(0,ncol=NCOL(x),nrow=length(nas)) infl[nas==0,]<-x*pweights/psum } else { infl<-x*pweights/psum } attr(average,"influence") <- infl } 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(psumlength(design$prob))) { infl<-matrix(0,ncol=NCOL(r),nrow=length(nas)) infl[nas==0,]<-r/design$prob } else { infl<-r/design$prob } attr(rval,"influence") <- infl } class(rval)<-"svyratio" rval } survey/R/svynls.R0000644000176200001440000001506614113105662013500 0ustar liggesusers## svynls svynls<-function(formula, design, start, weights=NULL, ...){ UseMethod("svynls", design) } var_power<-function(d, maxit=3){ ## this should use svytotal dispersion<-0 rval<-list( precision_weights=function(res,mu){ dispersion<<-sum((res^2)^d) /sum(abs(mu)^d) variance<-dispersion*abs(mu)^d 1/variance }, iterations=maxit, name=paste0("weights: variance =",signif(dispersion,3),"mu^",d) ) class(rval)<-"svynls_weights" rval } svynls.DBIsvydesign<-function(formula, design,start, weights=NULL, ...){ design$variables <- getvars(formula, design$db$connection, design$db$tablename, updates = design$updates, subset = design$subset) NextMethod("svynls", design) } utils::globalVariables(c(".survey.prob.weight", ".survey.repwt")) svynls.svyrep.design<-function(formula, design, start, weights=NULL, ..., return.replicates=FALSE){ has_vars<- intersect(all.vars(formula),colnames(design)) dat<-model.frame(design)[,has_vars] if (is.numeric(weights)) prior.weights<-weights else prior.weights<-rep(1, nrow(dat)) meanweight<-mean(weights(design, "sampling")) dat$.survey.prob.weight<-prior.weights*weights(design, "sampling")/meanweight if (inherits(weights, "svynls_weights")){ maxit<-weights$iterations } else { maxit<-0 } first<-nls(formula,dat, weights=.survey.prob.weight,start=start, ...) for(i in seq_len(maxit)){ prior.weights<-weights$precision_weights(fitted(first), resid(first)) dat$.survey.prob.weight<-prior.weights*weights(design, "sampling")/meanweight first<-nls(formula, dat, weights=.survey.prob.weight,start=start, ...) first$precision_weights<-prior.weights } theta<-coef(first) repwts<-weights(design,"analysis") thetas<-matrix(0, ncol=length(theta),nrow=ncol(repwts)) for(i in ncol(repwts)){ dat$.survey.repwt<-prior.weights*repwts[,i]/meanweight model<-nls(formula,dat, weights=.survey.repwt,start=theta, ...) thetas[i, ] <- coef(model) } rval<-list() rval$fit<-first v<-svrVar(thetas, design$scale, design$rscales, coef=theta) rval$naive.cov<-summary(first)$cov.unscaled rval$cov<-v rval$coef<-theta rval$design<-design rval$meanweight<-meanweight rval$call<-sys.call(-1) if (return.replicates) rval$replicates<-thetas class(rval)<-"svynls" rval } svynls.survey.design2<-function(formula, design, start, weights=NULL, ..., influence=FALSE){ has_vars<- intersect(all.vars(formula),colnames(design)) dat<-model.frame(design)[,has_vars] if (is.numeric(weights)) prior.weights<-weights else prior.weights<-rep(1, nrow(dat)) meanweight<-mean(weights(design, "sampling")) w<-prior.weights*weights(design, "sampling")/meanweight if (inherits(weights, "svynls_weights")){ maxit<-weights$iterations } else { maxit<-0 } dat$.survey.prob.weight<-w fit<-nls(formula, dat, weights=.survey.prob.weight,start=start, ...) for(i in seq_len(maxit)){ precwt<-weights$precision_weights(fitted(fit), resid(fit)) w<-precwt*weights(design, "sampling")/meanweight dat$.survey.prob.weight<-w fit<-nls(formula, dat, weights=.survey.prob.weight,start=start, ...) fit$precision_weights<-precwt } v0<-summary(fit)$cov.unscaled theta<-coef(fit) grads<-fit$m$gradient()/sqrt(w) ## nls scales by sqrt(weights) resids<-fit$m$resid() infl<-resids*grads%*%v0 v<-svyrecvar(infl*w, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) rval<-list() rval$fit<-fit rval$coef<-theta rval$cov<-v rval$naive.cov<-vcov(fit) rval$call<-sys.call(-1) rval$design<-design rval$meanweight<-meanweight if(influence) attr(rval,"inference")<-infl class(rval)<-"svynls" rval } .p.nls.convInfo<-function (x, digits, show. = getOption("show.nls.convergence", TRUE)) { if (!is.null(x$convInfo)) with(x$convInfo, { if (identical(x$call$algorithm, "port")) cat("\nAlgorithm \"port\", convergence message: ", stopMessage, "\n", sep = "") else { if (!isConv || show.) { cat("\nNumber of iterations", if (isConv) "to convergence:" else "till stop:", finIter, "\nAchieved convergence tolerance:", format(finTol, digits = digits)) cat("\n") } if (!isConv) { cat("Reason stopped:", stopMessage) cat("\n") } } }) invisible() } print.svynls<-function (x, digits = max(3L, getOption("digits") - 3L), ...) { cat("Nonlinear survey regression model\n") cat(" model: ", deparse(formula(x$fit)), "\n", sep = "") cat(" design: ") print(x$design) print(x$fit$m$getAllPars(), digits = digits, ...) cat(" ", "weighted ", "residual sum-of-squares: ", format(x$fit$m$deviance()*x$meanweight, digits = digits), "\n", sep = "") .p.nls.convInfo(x, digits = digits) invisible(x) } coef.svynls<-function(object,...) object$coef vcov.svynls<-function(object,...) object$cov summary.svynls <- function (object, correlation = FALSE, ...) { r <- as.vector(object$fit$m$resid()) w <- object$fit$weights n <- if (!is.null(w)) sum(w > 0) else length(r) param <- coef(object) pnames <- names(param) p <- length(param) rdf <- n - p resvar <- if (rdf <= 0) NaN else deviance(object$fit)/rdf se <-SE(object) tval <- param/se param <- cbind(param, se, tval, 2 * pt(abs(tval), rdf, lower.tail = FALSE)) dimnames(param) <- list(pnames, c("Estimate", "Std. Error", "t value", "Pr(>|t|)")) ans <- list(formula = formula(object$fit), residuals = r, sigma = sqrt(resvar), df = c(p, rdf), cov.unscaled = vcov(object)/sqrt(resvar), cov.scaled=vcov(object), call = object$call, convInfo = object$fit$convInfo, control = object$fit$control, na.action = object$fit$na.action, coefficients = param, parameters = param) if (correlation && rdf > 0) { ans$correlation <- cov2cor(vcov(object)) } class(ans) <- c("summary.svynls","summary.nls") ans } survey/R/svykm.R0000644000176200001440000002525114423650257013321 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,drop=FALSE] oo<-order(time[keep], -status[keep]) okeep<-keep[oo] ntimes<-length(oo) ttime<-time[okeep] sstatus<-status[okeep] totals<-svytotal(cbind(dN[,oo,drop=FALSE],y[,oo,drop=FALSE]), 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) if (ntimes>0) V[1]<-dV[1,1] if (ntimes>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", "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/twophase2.R0000644000176200001440000005736214565003231014063 0ustar liggesusers## ## Constructing cov(R_i,R_j)/pi^*_ij, or \check{\check{\Delta}}_ij in Sarndal's notation ## We use this form because it can be sparse and because it is easy to combine ## multistage and multiphase sampling. ## ## For (stratified, cluster) simple random sampling, ## Dcheck simplifies to (n/N-1)/(n-1) or -(1-p)/(n-1) ## Dcheck_strat<-function(strata, prob){ if (is.character(strata)) strata<-as.factor(strata) strata<-as.numeric(strata) ## for ave() n<-length(strata) rval<-matrix(0, n,n) sampsize<-ave(strata,strata,FUN=length) strats<-unique(strata) for(strat in strats){ these <- strata == strat rval[these,these]<- -(1-prob[these])/(sampsize[these]-1) } diag(rval)<-(1-prob) rval } Dcheck_multi<-function(id,strata,probs){ nstage<-NCOL(id) rval<-matrix(0,NROW(id),NROW(id)) for(stage in 1:nstage){ uid<-!duplicated(id[,stage]) idx<-match(id[,stage],id[uid,stage]) this_stage<-Dcheck_strat(strata[uid,stage],probs[uid,stage])[idx,idx] rval<- twophaseDcheck(rval, this_stage) } rval } ## subsetting now happens in Dcheck_multi_subset ## (no: need to know strata before subsetting to get sampsize. Dcheck_subset<-function(strata, prob,sampsize, withreplacement){ if (is.character(strata)) strata<-as.factor(strata) strata<-as.numeric(strata) ## for ave() N<-length(strata) n<-NROW(strata) rval<-matrix(0, n,n) #sampsize<-ave(strata,strata,FUN=length) strats<-unique(strata) if (!withreplacement){ for(strat in strats){ these <- strata == strat ithese<-which(these) rval[these,these]<- -(1-prob[ithese])/(sampsize[ithese]-1) } } diag(rval)<-(1-prob) rval } oldDcheck_subset<-function(strata, subset, prob, withreplacement){ if (is.character(strata)) strata<-as.factor(strata) strata<-as.numeric(strata) ## for ave() N<-length(strata) n<-sum(subset) rval<-matrix(0, n,n) sampsize<-ave(strata,strata,FUN=length) strats<-unique(strata) if (!withreplacement){ for(strat in strats){ these <- strata == strat ithese<-which(these) rval[these[subset],these[subset]]<- -(1-prob[ithese[subset]])/(sampsize[ithese[subset]]-1) } } diag(rval)<-(1-prob[subset]) rval } oldDcheck_multi_subset<-function(id,strata,subset,probs,withreplacement){ nstage<-NCOL(id) n<-sum(subset) rval<-matrix(0,n,n) if (all(probs==1) && withreplacement) return(as(diag(n),"sparseMatrix")) for(stage in 1:nstage){ uid<-!duplicated(id[,stage]) insubset<-rowsum(as.integer(subset),id[,stage],reorder=FALSE)>0 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 } Dcheck_multi_subset<-function(id,strata,subset,probs,withreplacement){ nstage<-NCOL(id) n<-sum(subset) rval<-matrix(0,n,n) if (all(probs==1) && withreplacement) return(as(diag(n),"sparseMatrix")) sampsize<-NULL for(stage in 1:nstage){ uid<-rep(FALSE,NROW(id)) uid[subset]<-!duplicated(id[subset,stage]) insubset<-rowsum(as.integer(subset),id[,stage],reorder=FALSE)>0 idx<-match(id[subset,stage],id[subset,stage][uid[subset]]) sampsize<-ave(as.numeric(id[,stage]),strata[,stage],FUN=function(i) length(unique(i))) this_stage<-Dcheck_subset(strata[uid,stage],probs[uid,stage],sampsize, 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){ if (!is.null(design1$dcheck)) phase1<-design1$dcheck[[1]]$dcheck else{ withreplacement<-is.null(design1$fpc$popsize) phase1<-Dcheck_multi_subset(design1$cluster, design1$strata, subset, design1$allprob, withreplacement) } if (!is.null(design2$dcheck)) phase2<-design2$dcheck[[1]]$dcheck else 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, pps=NULL, subset, data){ data<-detibble(data) pps2<-NULL if(!is.null(pps)){ if (!is.null(pps[[1]])) stop("can't handle pps= at phase 1 yet") pps2<-pps[[2]] } 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 if (is.null(pps2)){ d2<-svydesign(ids=id[[2]], strata=strata[[2]], probs=probs[[2]], weights=NULL, fpc=fpc[[2]], data=data[subset,]) } else { d2<-svydesign(ids=id[[2]], strata=strata[[2]], weights=NULL, fpc=probs[[2]], data=data[subset,],pps=pps2) } ## 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(as.numeric(cm[subset]),sa[subset],FUN=nunique)/ave(as.numeric(cm),sa,FUN=nunique)[subset] } else { rval$usu<-drop(with(rval$phase1$sample,ave(as.numeric(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) stop("number of plausible values must be the same for all variables") nreps<-nreps[1] results<-vector("list",nreps) if(rewrite){ sublist<-vector("list",nvars) names(sublist)<-PVnames for(i in 1:nreps){ for(j in 1:nvars) sublist[[j]]<-as.name(names(PVframes[[j]])[i]) if (is.function(action)){ actioni<-action body(actioni) <- eval(bquote(substitute(.(body(actioni)), sublist))) results[[i]]<- action(data) } else { actioni <- eval(bquote(substitute(.(action), sublist))) results[[i]] <- eval(actioni) } } } else { .DESIGN<-data for(i in 1:nreps){ dfi<-lapply(PVframes, function(d) d[[i]]) names(dfi)<-PVnames .DESIGN$variables<-cbind(df, as.data.frame(dfi)) if (is.function(action)) results[[i]] <- action(.DESIGN) else results[[i]] <- eval(action) } } attr(results,"call")<-sys.call() results } survey/R/svykappa.R0000644000176200001440000000265513641214070013777 0ustar liggesusers svykappa<-function(formula, design,...) UseMethod("svykappa",design) svykappa.default<-function(formula, design,...) { if (ncol(attr(terms(formula), "factors")) != 2) stop("kappa is only computed for two variables") rows <- formula[[2]][[2]] cols <- formula[[2]][[3]] df <- model.frame(design) nrow <- length(unique(df[[as.character(rows)]])) ncol <- length(unique(df[[as.character(cols)]])) rnames<-paste(".",letters,"_",sep="") cnames<-paste(".",LETTERS,"_",sep="") if (nrow != ncol) stop("number of categories is different") probs <- eval(bquote(svymean(~.(rows) + .(cols) + interaction(.(rows), .(cols)), design, ...))) nms <- c(rnames[1:nrow], cnames[1:ncol], outer(1:nrow, 1:ncol, function(i, j) paste(rnames[i], cnames[j], sep = "."))) names(probs) <- nms v <- vcov(probs) dimnames(v) <- list(nms, nms) attr(probs, "var") <- v obs <- parse(text = paste(nms[nrow + ncol + 1+ (0:(nrow-1))*(ncol+1)], collapse = "+"))[[1]] expect <- parse(text = paste(nms[1:nrow], nms[nrow + 1:ncol], sep = "*", collapse = "+"))[[1]] svycontrast(probs, list(kappa = bquote((.(obs) - .(expect))/(1 - .(expect))))) } "names<-.svrepstat"<-function(x, value){ if (is.list(x) && !is.null(x$replicates)){ names(x[[1]])<-value colnames(x$replicates)<-value x } else NextMethod() } survey/R/paley.R0000644000176200001440000001307513517345031013255 0ustar liggesusers## Paley construction of Hadamard matrices ## Only implemented for GF(p), because it's ## not entirely straightforward to find ## representations of GF(p^m) paley<-function(n, nmax=2*n, prime=NULL, check=!is.null(prime)){ if(!is.null(prime) && missing(n)) n<-prime ## these are primes with p+1 a multiple of 4 small.primes<-c(3, 7, 11, 19, 23, 31, 43, 47, 59, 67, 71, 79, 83, 103, 107, 127, 131, 139, 151, 163, 167, 179, 191, 199, 211, 223, 227, 239, 251, 263, 271, 283, 307, 311, 331, 347, 359, 367, 379, 383, 419, 431, 439, 443, 463, 467, 479, 487, 491, 499, 503, 523, 547, 563, 571, 587, 599, 607, 619, 631, 643, 647, 659, 683, 691, 719, 727, 739, 743, 751, 787, 811, 823, 827, 839, 859, 863, 883, 887, 907, 911, 919, 947, 967, 971, 983, 991, 1019, 1031, 1039, 1051, 1063, 1087, 1091, 1103, 1123, 1151, 1163, 1171, 1187, 1223, 1231, 1259, 1279, 1283, 1291, 1303, 1307, 1319, 1327, 1367, 1399, 1423, 1427, 1439, 1447, 1451, 1459, 1471, 1483, 1487, 1499, 1511, 1523, 1531, 1543, 1559, 1567, 1571, 1579, 1583, 1607, 1619, 1627, 1663, 1667, 1699, 1723, 1747, 1759, 1783, 1787, 1811, 1823, 1831, 1847, 1867, 1871, 1879, 1907, 1931, 1951, 1979, 1987, 1999, 2003, 2011, 2027, 2039, 2063, 2083, 2087, 2099, 2111, 2131, 2143, 2179, 2203, 2207, 2239, 2243, 2251, 2267, 2287, 2311, 2339, 2347, 2351, 2371, 2383, 2399, 2411, 2423, 2447, 2459, 2467, 2503, 2531, 2539, 2543, 2551, 2579, 2591, 2647, 2659, 2663, 2671, 2683, 2687, 2699, 2707, 2711, 2719, 2731, 2767, 2791, 2803, 2819, 2843, 2851, 2879, 2887, 2903, 2927, 2939, 2963, 2971, 2999, 3011, 3019, 3023, 3067, 3079, 3083, 3119, 3163, 3167, 3187, 3191, 3203, 3251, 3259, 3271, 3299, 3307, 3319, 3323, 3331, 3343, 3347, 3359, 3371, 3391, 3407, 3463, 3467, 3491, 3499, 3511, 3527, 3539, 3547, 3559, 3571, 3583, 3607, 3623, 3631, 3643, 3659, 3671, 3691, 3719, 3727, 3739, 3767, 3779, 3803, 3823, 3847, 3851, 3863, 3907, 3911, 3919, 3923, 3931, 3943, 3947, 3967, 4003, 4007, 4019, 4027, 4051, 4079, 4091, 4099, 4111, 4127, 4139, 4159, 4211, 4219, 4231, 4243, 4259, 4271, 4283, 4327, 4339, 4363, 4391, 4423, 4447, 4451, 4463, 4483, 4507, 4519, 4523, 4547, 4567, 4583, 4591, 4603, 4639, 4643, 4651, 4663, 4679, 4691, 4703, 4723, 4751, 4759, 4783, 4787, 4799, 4831, 4871, 4903, 4919, 4931, 4943, 4951, 4967, 4987, 4999, 5003, 5011, 5023, 5039, 5051, 5059, 5087, 5099, 5107, 5119, 5147, 5167, 5171, 5179, 5227, 5231, 5279, 5303, 5323, 5347, 5351, 5387, 5399, 5407, 5419, 5431, 5443, 5471, 5479, 5483, 5503, 5507, 5519, 5527, 5531, 5563, 5591, 5623, 5639, 5647, 5651, 5659, 5683, 5711, 5743, 5779, 5783, 5791, 5807, 5827, 5839, 5843, 5851, 5867, 5879, 5903, 5923, 5927, 5939, 5987, 6007, 6011, 6043, 6047, 6067, 6079, 6091, 6131, 6143, 6151, 6163, 6199, 6203, 6211, 6247, 6263, 6271, 6287, 6299, 6311, 6323, 6343, 6359, 6367, 6379, 6427, 6451, 6491, 6547, 6551, 6563, 6571, 6599, 6607, 6619, 6659, 6679, 6691, 6703, 6719, 6763, 6779, 6791, 6803, 6823, 6827, 6863, 6871, 6883, 6899, 6907, 6911, 6947, 6959, 6967, 6971, 6983, 6991, 7019, 7027, 7039, 7043, 7079, 7103, 7127, 7151, 7159, 7187, 7207, 7211, 7219, 7243, 7247, 7283, 7307, 7331, 7351, 7411, 7451, 7459, 7487, 7499, 7507, 7523, 7547, 7559, 7583, 7591, 7603, 7607, 7639, 7643, 7687, 7691, 7699, 7703, 7723, 7727, 7759, 7823, 7867, 7879, 7883, 7907, 7919) if (is.null(prime)){ nceil<-nn <- n + 4 - (n %% 4) if ( (n %% 4) +4 == (n %% 8)) { while (!(nn %% 8)){ nn <- nn /2} if ((nn-1) %in% small.primes){ m<-paley(prime=nn-1,check=check) while(nnmax(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/svypredmeans.R0000644000176200001440000000207213743475476014700 0ustar liggesusers svypredmeans<-function(adjustmodel, groupfactor, predictat=NULL){ design<-eval(bquote(update(adjustmodel$survey.design, .groupfactor=.(groupfactor[[2]])))) if(is.null(predictat)){ groups<-unique(model.frame(design)$.groupfactor) groups<-groups[!is.na(groups)] } else { groups <- predictat } model<-update(adjustmodel, .~.+.groupfactor,design=design) w<-weights(design,"sampling") fits<-matrix(nrow=NROW(design),ncol=length(groups)) dg_deta<-matrix(nrow=length(coef(model)),ncol=length(groups)) for(i in 1:length(groups)){ mf<-model.frame(design) mf$.groupfactor<-groups[i] mu<-predict(model,newdata=mf,type="response",se.fit=FALSE) eta<-predict(model,newdata=mf,type="link",se.fit=FALSE) fits[,i]<-coef(mu) mm<-model.matrix(terms(model),mf) dg_deta[,i]<-t(colSums(w*model$family$mu.eta(eta)*mm))/sum(w) } colnames(fits)<-as.character(groups) cond<-svymean(fits,design) addvar<-t(dg_deta)%*%vcov(model)%*%dg_deta vv<-addvar+attr(cond,"var") attr(vv,"parts")<-list(addvar,attr(cond,"var")) attr(cond,"var")<-vv cond } survey/R/svysmooth.R0000644000176200001440000000744413517345031014221 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")<-paste(deparse(formula[[2]]),collapse="") 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")<-paste(deparse(formula[[2]]),collapse="") 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/svyhist.R0000644000176200001440000000223313517345031013646 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) if (freq){ h$count_scale <- mean(diff(h$breaks))*sum(weights(design, "sampling")) } invisible(h) } survey/R/surveyrep.R0000755000176200001440000017467414556563036014242 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,degf=NULL,...) UseMethod("svrepdesign",data) svrepdesign.default<-function(variables=NULL,repweights=NULL, weights=NULL, data=NULL, degf=NULL,type=c("BRR","Fay","JK1", "JKn","bootstrap", "ACS","successive-difference","JK2","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","ACS","successive-difference","JK2") && !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) } if(is.character(repweights)){##regular expression wtcols<-grep(repweights,names(data)) repweights<-data[,wtcols] } if (is.null(repweights)) stop("You must provide replication weights") if (anyNA(repweights)) stop("Missing values not allowed in 'repweights'") repweights<-detibble(repweights) if(inherits(weights,"formula")){ mf<-substitute(model.frame(weights, data=data)) weights<-eval.parent(mf) if (anyNA(weights)) stop("Missing values not allowed in 'weights'") weights<-drop(as.matrix(weights)) } if (is.null(weights)){ warning("No sampling weights provided: equal probability assumed") weights<-rep(1,NROW(repweights)) } if (!is.null(degf)){ if (!is.numeric(degf)) stop("degf must be NULL or numeric") if (degf>ncol(repweights)) warning(paste0("degf (", degf,") is larger than number of replicates (",ncol(repweights),")")) if (degf<=1) warning("degf is <=1") } 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 %in% c("ACS", "successive-difference")){ if(!is.null(scale) | !is.null(rscales)) warning(paste("with type",type,"scale= and rscales= are not needed and will be ignored")) } if (type == "BRR"){ ## the default, so check it hasn't been accidentally defaulted to if (!is.null(scale)) warning("type='BRR' does not use 'scale=' argument") if (!is.null(rho)) warning("type='BRR' does not use 'rho=' argument, you may want type='Fay'") 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 %in% c("ACS","successive-difference")){ rscales<-rep(1, ncol(repweights)) scale<-4/ncol(repweights) } if (type =="JK2"){ warning(paste("with type",type,"scale= and rscales= are not needed and will be ignored")) rscales<-rep(1, ncol(repweights)) scale<-1 } 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","JK2","ACS","successive-difference")) 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 } if (is.null(scale)) scale<-1 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" if (!is.null(degf)) rval$degf<-degf else 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) } svrVar<-function(thetas, scale, rscales,na.action=getOption("na.action"),mse=getOption("survey.replicates.mse"),coef){ thetas<-get(na.action)(thetas) naa<-attr(thetas,"na.action") if (!is.null(naa)){ rscales<-rscales[-naa] if (length(rscales)) warning(length(naa), " replicates gave NA results and were discarded.") else stop("All replicates contained NAs") } if (is.null(mse)) mse<-FALSE if (length(dim(thetas))==2){ if (mse) { meantheta<-coef } else { meantheta<-colMeans(thetas[rscales>0,,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,rescale=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 if (is.null(rescale)) pwts<-design$pweights/mean(design$pweights) else if (rescale) 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)) if (inherits(full, "coxph.penal")) warning("svycoxph does not support penalised terms") 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,family=stats::gaussian(),start=NULL, rescale=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 (any(is.na(subset))) stop("subset must not contain NA values") 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 g$rescale<-NULL scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed(rho) if (is.null(rescale)) pwts<-design$pweights/mean(design$pweights) else if (rescale) ## old behaviour pwts<-design$pweights/sum(design$pweights) else pwts<-design$pweights ## no rescaling 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", ...) if (x$df.resid<=0) cat("\nZero or negative residual df; p-values not defined\n") 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$ratio[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/mean(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.") } vcov.svyrep.design<-function (object, replicates, centre, ...) { if (object$mse) svrVar(replicates, scale = object$scale, rscales = object$rscales, mse = object$mse, coef=centre) else svrVar(replicates, scale = object$scale, rscales = object$rscales, mse = object$mse) } 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 if (length(x)==length(vv)){ m<-cbind(x,sqrt((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(as.numeric(Ntotal))/sum(tbl)) ## avoid integer overflow when Ntotal >sqrt(maxint) } 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 && 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 } ppscov<-function(probcov, weighted=FALSE){ if ((!is.matrix(probcov)) && (!is(probcov,"Matrix")) || !(NROW(probcov)==NCOL(probcov))) stop("jointprob must be a square matrix") if (weighted){ rval<-list(dcheck=probcov,call=sys.call()) class(rval)<-"ppsdcheck" } else { rval<-list(delta=probcov,call=sys.call()) class(rval)<-"ppsdelta" } rval } print.ppsdcheck<-function(x,...) { cat("PPS: Weighted covariance matrix: ") print(x$call) invisible(x) } print.ppsdelta<-function(x,...) { cat("PPS: Sampling covariance matrix: ") print(x$call) invisible(x) } 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=NULL, 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 } pps_design.ppsdcheck<-function(method,ids,strata=NULL, probs=NULL, fpc=NULL,variables=NULL, 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<-method$dcheck rval$variance<-variance rval$dcheck<-list(list(id=1:nrow(deltacheck), dcheck=deltacheck)) rval$call<-call class(rval) <- c("pps","survey.design") rval } pps_design.ppsdelta<-function(method,ids,strata=NULL, probs=NULL, fpc=NULL,variables=NULL, 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") w<-weights(rval) deltacheck<-method$delta*tcrossprod(w) diag(deltacheck)<-diag(method$delta)*w method$deltacheck<-deltacheck rval$variance<-variance rval$dcheck<-list(list(id=1:nrow(method$deltacheck), dcheck=deltacheck)) rval$call<-call class(rval) <- c("pps","survey.design") rval } poisson_sampling<-function(p){ ppscov(Diagonal(x=1-p),weighted=TRUE) } 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,variables=NULL, subset, data,call=sys.call(),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 x<-qr.resid(psvar$qr,x/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(x/psw,psvar,reorder=TRUE)/as.vector(table(factor(psvar))) x<- x-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(psumlength(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } w<-weights(design) epsilon<-0.1*min(w[w>0])/sum(w) 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)<-c("oldsvyquantile","svyquantile") rval } oldsvyquantile.svyrep.design<-function(x,design,quantiles,method="linear", interval.type=c("probability","quantile"),f=1, return.replicates=FALSE, ties=c("discrete","rounded"),na.rm=FALSE, alpha=0.05,df=NULL,...){ 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) } if (is.null(df)) df<-degf(design) if (df==Inf) qcrit<-qnorm else qcrit <-function(...) qt(...,df=df) w<-weights(design,"analysis") if (interval=="quantile"){ ## interval on quantile scale if (ties=="discrete") computeQuantiles<-function(xx){ oo<-order(xx) ws<-weights(design,"sampling") epsilon<-0.1*min(ws[ws>0])/sum(ws) 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") epsilon<-0.1*min(ws[ws>0])/sum(ws) 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") epsilon<-0.1*min(w[w>0])/sum(w) 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])/sum(w) ww<-rowsum(w,xx,reorder=TRUE) uxx<-sort(unique(xx)) cum.w<- cumsum(ww)/sum(ww) Qf<-approxfun(cum.w,uxx,method=method,f=f, yleft=min(xx),yright=max(xx), ties=min) point.estimates<-Qf(quantiles) if(length(quantiles)==1) estfun<-as.numeric(xxnrweight | 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/recalibrate.R0000644000176200001440000000024214227413523014411 0ustar liggesusers recalibrate<-function(design, formula, ...){ m<-model.matrix(formula, model.frame(design)) calibrate(design,formula, colSums(m*weights(design))) } survey/R/bootstrap.R0000644000176200001440000000567413517345031014166 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/rsquared.R0000644000176200001440000000207213517345031013764 0ustar liggesusers psrsq<-function(object, method=c("Cox-Snell","Nagelkerke"),...){ UseMethod("psrsq",object) } psrsq.glm<-function(object, method=c("Cox-Snell","Nagelkerke"),...){ nullmodel<-update(object,.~1) method<-match.arg(method) ell0<-as.vector(logLik(nullmodel)) ell1<-as.vector(logLik(object)) n<-object$df.null+1 mutualinf<- -2*(ell1-ell0)/n r2cs<-1-exp(mutualinf) if (method == "Cox-Snell") return(r2cs) scaling<-1-exp(2*ell0/n) r2cs/scaling } psrsq.svyglm<-function(object, method=c("Cox-Snell", "Nagelkerke"),...){ method<-match.arg(method) if (!(object$family$family %in% c("binomial","quasibinomial","poisson","quasipoisson"))) stop("Only implemented for discrete data") w<-weights(object$survey.design,"sampling") N<-sum(w) n<-sum(object$prior.weights) minus2ell0<-object$null.deviance*(N/n) minus2ell1<-object$deviance*(N/n) mutualinf<-(minus2ell1-minus2ell0)/N r2cs<-1-exp(mutualinf) if (method =="Cox-Snell") return(r2cs) if (any(w<1)) warning("Weights appear to be scaled: rsquared may be wrong") scaling<-1-exp(-minus2ell0/N) r2cs/scaling }survey/R/surveyby.R0000755000176200001440000003776014221522101014031 0ustar liggesusers## ## tables of statistics. ## svyby<-function(formula, by, design,...) UseMethod("svyby",design) unwrap<-function(x,nvartype) UseMethod("unwrap",x) unwrap2<-function(x) UseMethod("unwrap2",x) unwrap2.default <- function(x){ if(!is.null(attr(x, "deff"))) c(statistic = unclass(x), DEff = deff(x)) else c(statistic = unclass(x)) } unwrap2.newsvyquantile <- function(x){ rval<-do.call(rbind,x) rownames(rval)<-names(x) rval } unwrap.default <-function(x,nvartype){ rval<-c(coef(x)) nvar<-length(rval) rval<-c(rval,c(se=SE(x), ci_l=confint(x)[,1], ci_u=confint(x)[,2], cv=cv(x,warn=FALSE), `cv%`=cv(x,warn=FALSE)*100, var=SE(x)^2)[rep((nvartype-1)*(nvar),each=nvar)+(1:nvar)]) if(!is.null(attr(x,"deff"))) rval<-c(rval,DEff=deff(x)) rval } strings_to_factors<-function(formula, design){ allv<-intersect(all.vars(formula), colnames(design)) vclass<-sapply(model.frame(design)[,allv,drop=FALSE], class) if (!any(vclass=="character")) return(design) vfix<-names(vclass)[vclass=="character"] l<-as.list(vfix) names(l)<-vfix fl<-lapply(l, function(li) bquote(factor(.(as.name(li))))) expr<-bquote(update(design, ..(fl)), splice=TRUE) eval(expr) } svyby.default<-function(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, stringsAsFactors=TRUE, multicore=getOption("survey.multicore")){ if (inherits(by, "formula")) byfactors<-model.frame(by, model.frame(design), na.action=na.pass) else byfactors<-as.data.frame(by) if(return.replicates){ if (!inherits(design,"svyrep.design")) stop("return.replicates=TRUE not implemented for this design type") } if(stringsAsFactors){ design<-strings_to_factors(formula,design) } if (multicore && !requireNamespace("parallel",quietly=TRUE)) multicore<-FALSE ## some people insist on using vectors rather than formulas ## so I suppose we should be nice to them if (!inherits(formula, "formula")){ if (NROW(formula)!=NROW(byfactors)) stop("'formula' is the wrong length") if (!(is.data.frame(formula) || is.matrix(formula) || is.vector(formula))){ stop("invalid type for 'formula'") } } hasdeff<- is.character(deff) || deff ## all combinations that actually occur in this design byfactor<-do.call("interaction", byfactors) dropped<- weights(design,"sampling")==0 if (na.rm.by) dropped<-dropped | apply(byfactors, 1, function(x) any(is.na(x))) if (na.rm.all){ if (inherits(formula,"formula")) allx<-model.frame(formula,model.frame(design),na.action=na.pass) else allx<-formula dropped <- dropped | (!complete.cases(allx)) } uniquelevels<-sort(unique(byfactor[!dropped])) uniques <- match(uniquelevels, byfactor) if(missing(vartype)) vartype<-"se" vartype<-match.arg(vartype,several.ok=TRUE) nvartype<-base::which(eval(formals(sys.function())$vartype) %in% vartype) if(any(is.na(nvartype))) stop("invalid vartype") if (keep.var){ ## In dire need of refactoring (or rewriting) ## but it seems to work. results<-(if (multicore) parallel::mclapply else lapply)(uniques, function(i){ if(verbose && !multicore) print(as.character(byfactor[i])) if (inherits(formula,"formula")) data<-formula else data<-subset(formula, byfactor %in% byfactor[i]) if (covmat || return.replicates) { FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...,return.replicates=TRUE) } else { FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...) } }) rval<-t(sapply(results, unwrap,nvartype=nvartype)) if ((covmat && inherits(design, "svyrep.design")) || return.replicates) { replicates<-do.call(cbind,lapply(results,"[[","replicates")) attr(replicates,"scale")<-design$scale attr(replicates, "rscales")<-design$rscales attr(replicates, "mse")<-design$mse colnames(replicates)<-rep(as.character(uniquelevels), each=NCOL(replicates)/length(uniquelevels)) covmat.mat<-svrVar(replicates,design$scale,design$rscales, mse=design$mse,coef=as.vector(sapply(results,coef))) } else{ covmats<-lapply(results,vcov) ncovmat<-sum(sapply(covmats,ncol)) covmat.mat<-matrix(0,ncol=ncovmat,nrow=ncovmat) j<-0 for(i in 1:length(covmats)){ ni<-nrow(covmats[[i]]) covmat.mat[j+(1:ni),j+(1:ni)]<-covmats[[i]] j<-j+ni } } } else { rval<-sapply(uniques, function(i) { if(verbose) print(as.character(byfactor[i])) if (inherits(formula,"formula")) data<-formula else data<-subset(formula, byfactor %in% byfactor[i]) unwrap2(FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...))} ) if (is.matrix(rval)) rval<-t(rval) } nr<-NCOL(rval) nstats<-nr/(1+ keep.var*(length(vartype)+ ("ci" %in% vartype)) + hasdeff) if (nr>1) 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 vartype <- c("se","ci","ci","cv","cvpct","var")[c("se","ci","ci","cv","cvpct","var") %in% 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 } ## allows for influence functions. Does not allow for replicates svyby.survey.design2<-function(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, influence=covmat, na.rm.by=FALSE, na.rm.all=FALSE, stringsAsFactors=TRUE, multicore=getOption("survey.multicore")){ if (inherits(by, "formula")) byfactors<-model.frame(by, model.frame(design), na.action=na.pass) else byfactors<-as.data.frame(by) if (stringsAsFactors){ design<-strings_to_factors(formula, design) } if (multicore && !requireNamespace("parallel",quietly=TRUE)) multicore<-FALSE ## some people insist on using vectors rather than formulas ## so I suppose we should be nice to them if (!inherits(formula, "formula")){ if (NROW(formula)!=NROW(byfactors)) stop("'formula' is the wrong length") if (!(is.data.frame(formula) || is.matrix(formula) || is.vector(formula))){ stop("invalid type for 'formula'") } } hasdeff<- is.character(deff) || deff ## all combinations that actually occur in this design byfactor<-do.call("interaction", byfactors) dropped<- weights(design,"sampling")==0 if (na.rm.by) dropped<-dropped | apply(byfactors, 1, function(x) any(is.na(x))) if (na.rm.all){ if (inherits(formula,"formula")) allx<-model.frame(formula,model.frame(design),na.action=na.pass) else allx<-formula dropped <- dropped | (!complete.cases(allx)) } uniquelevels<-sort(unique(byfactor[!dropped])) uniques <- match(uniquelevels, byfactor) if(missing(vartype)) vartype<-"se" vartype<-match.arg(vartype,several.ok=TRUE) nvartype<-base::which(eval(formals(sys.function())$vartype) %in% vartype) if(any(is.na(nvartype))) stop("invalid vartype") if (keep.var){ ## In dire need of refactoring (or rewriting) ## but it seems to work. results<-(if (multicore) parallel::mclapply else lapply)(uniques, function(i){ idx<- byfactor %in% byfactor[i] ##save this for assembling influence functions if(verbose && !multicore) print(as.character(byfactor[i])) if (inherits(formula,"formula")) data<-formula else data<-subset(formula, byfactor %in% byfactor[i]) if (covmat||influence ) { r<-FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...,influence=influence) } else { r<-FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...) } attr(r,"index")<-idx r }) rval<-t(sapply(results, unwrap,nvartype=nvartype)) if (covmat || influence) { ## do the influence function thing here infs<-lapply(results,attr, "influence") idxs<-lapply(results,attr, "index") if (all(sapply(infs,is.null))) stop("FUN does not return influence functions") inflmats<-vector("list",length(infs)) for(i in seq_along(infs)){ inflmats[[i]]<-matrix(0, ncol=NCOL(infs[[i]]),nrow=length(idxs[[i]])) inflmats[[i]][idxs[[i]],]<-infs[[i]] } inflmat<-do.call(cbind,inflmats) covmat.mat<-svyrecvar(inflmat,design$cluster, design$strata, design$fpc, postStrata=design$postStrata) } else{ covmats<-lapply(results,vcov) ncovmat<-sum(sapply(covmats,ncol)) covmat.mat<-matrix(0,ncol=ncovmat,nrow=ncovmat) j<-0 for(i in 1:length(covmats)){ ni<-nrow(covmats[[i]]) covmat.mat[j+(1:ni),j+(1:ni)]<-covmats[[i]] j<-j+ni } } } else { rval<-sapply(uniques, function(i) { if(verbose) print(as.character(byfactor[i])) if (inherits(formula,"formula")) data<-formula else data<-subset(formula, byfactor %in% byfactor[i]) unwrap2(FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...))} ) if (is.matrix(rval)) rval<-t(rval) } nr<-NCOL(rval) nstats<-nr/(1+ keep.var*(length(vartype)+ ("ci" %in% vartype)) + hasdeff) if (nr>1) 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 (influence) attr(rval,"influence")<-inflmat attr(rval,"call")<-sys.call() class(rval)<-c("svyby","data.frame") rval } svybys<-function(formula, bys, design, FUN, ...){ tms <- attr(terms(bys),"variables")[-1] lapply(tms, function(tm){ eval(bquote(svyby(.(formula),by=~.(tm), design=.(design), FUN=.(FUN), ...))) }) } survey/R/dAIC.R0000644000176200001440000000655014462336035012707 0ustar liggesusers logLik.svyglm<-function(object,...){ warning("svyglm not fitted by maximum likelihood.") object$deviance/-2 } AIC.svyglm<-function(object,...,k=2,null_has_intercept=TRUE){ if (length(list(...))){ do.call(rbind,lapply(list(object,...),extractAIC,k=k,null_has_intercept=null_has_intercept)) } else { extractAIC(object,k=k,null_has_intercept=null_has_intercept) } } extractAIC.svyglm<-function(fit,scale,k=2,...,null_has_intercept=TRUE){ if(is.svylm(fit)) return(extractAIC_svylm(fit,...,null_has_intercept=null_has_intercept)) if (length(attr(terms(fit),"factors"))){ ftest<-delete.response(formula(fit)) if (!null_has_intercept) ftest<-update(ftest,.~.+`1`) r<-regTermTest(fit, ftest, 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) } extractAIC.svrepcoxph<-function (fit, scale, k = 2, ...) .NotYetImplemented() extractAIC.svycoxph<-function (fit, scale, k = 2, ...) { Delta<-solve(fit$inv.info, fit$var) deltabar <- mean(diag(Delta)) d <- -2*fit$ll[1] c(eff.p = sum(diag(Delta)), AIC = d + k * sum(diag(Delta)), deltabar = deltabar) } AIC.svycoxph<-function (object, ..., k = 2) { if (length(list(...))) { do.call(rbind, lapply(list(object, ...), extractAIC, k = k)) } else { extractAIC(object, k = k) } } ## special-case the Gaussian ## dAIC=-2\max_{\beta,\sigma^2}\log\ell +2p= n\log\mathrm{RSS}-n\log n +n +n\log 2\pi +2p\bar\delta is.svylm<-function(it) {inherits(it,"svyglm") && isTRUE(all.equal(stats::family(it),gaussian()))} extractAIC_svylm<-function(fit,scale,k=2,...,null_has_intercept=TRUE){ y<-fit$y muhat<-fit$linear.predictors Nhat<-sum(w<-fit$prior.weights) sigma2hat<- sum((y-muhat)^2 * w) / Nhat minus2ellhat<- Nhat*log(sigma2hat) +Nhat +Nhat*log(2*pi) V0<-fit$naive.cov V<-vcov(fit) if (null_has_intercept){ V0<-V0[-1,-1,drop=FALSE] V<-V[-1,-1,drop=FALSE] } ## for mu Delta_mu<-solve(V0*sigma2hat,V) ## Now for sigma2 Isigma2<-Nhat/(2*sigma2hat^2) Usigma2<- -1/(2*sigma2hat)+ (y-muhat)^2/(2*sigma2hat^2) Hsigma2<- sum(w*Usigma2^2) Deltasigma2<-Isigma2/Hsigma2 ## combine deltabar<-mean(c(diag(Delta_mu), Deltasigma2)) eff.p<-sum(diag(Delta_mu))+Deltasigma2 aic <- minus2ellhat + k*eff.p c(eff.p=eff.p, AIC=aic,deltabar=deltabar) } survey/MD50000644000176200001440000003750314576600372012141 0ustar liggesusersf07115f8d647e59e50253dcf83575ec2 *DESCRIPTION cd81bd2df8011ba15fb4ed0851cbaf42 *INDEX 034c8026d61cff5ff54313af5c16deca *NAMESPACE 67dc3d7edccaa6fb2c9506b87789141f *R/DBI.R dbe4804092210e425d0c40a06b072435 *R/RcppExports.R 0e9c6348d61a1019a03298cd27577922 *R/anova.svyglm.R 5b81c3cd21b951d535a27679230eeda4 *R/bootstrap.R d04cfe15ddf5203320acac50557c8cdd *R/chisqsum.R b5cffd73326ccfbef1954d2ad032efa0 *R/compressweights.R db32c4f936329e79f2578749c87bcd81 *R/confint.R e4b7519f8c5cad157788d9ff0bebb9b5 *R/count.R e7b06489b29dd5b33cb2ab354cbf7e87 *R/dAIC.R 87b020bfe7dff04863803840b57ab969 *R/dbiupdate.R c5f1dd01370e4c3d7f3d6d3558ca15ac *R/ftable.svystat.R f061049f41241e8baf7ebddeaa940e0d *R/gofchisq.R e0f78e6f847b7d1cfe589e1eb016a5dc *R/grake.R fc7f59f3476023bbbc977abedd40152d *R/greg.R 8abae944629ac267a54eb76119674a18 *R/ht.R c179f70e236b229ae2b8120802636395 *R/loglin.R b346412969aca919c164466214c647af *R/logrank.R d16ac882592b056619f33b48dcb97498 *R/margins.R d5974389ea182dc31a4232bd81b3e7c8 *R/mrb.R 9ca0b28566332e9e3d5236293fda88f5 *R/mse.R 1e081ddc9cd881722530662a04d1f732 *R/multistage.R 7b6d54c119096397e472d504308cf749 *R/multivariate.R b476ee2dbcf229d6645099c0746b38d4 *R/naa.R cdd45608d012ea399ac2714c1a1c444b *R/newsvyquantile.R 1a837a27c6e21e4589a113a40f090559 *R/olr.R 8169eb47021665ca2790739b12669641 *R/pFsum.R d7bde53f7898b0ed437962b894c9b798 *R/paley.R c235a201f75ec17b87a64b1f6e01ecee *R/pps.R ca93c94f602206cd5cd636441f442680 *R/qrule.R 9d6bf2b384a489d158a1fedf6835e931 *R/recalibrate.R 49d04f038263b341db26c9f0f47ed533 *R/regtest.R 0ff4c8baea050c34a186be41372162ff *R/rsquared.R 5e3778581f76c677829a614704070010 *R/score.R 5322fc5eadb72027f93002cfaadf076e *R/smoothArea.R b5b5b23951af787a3a684b60777ff9f2 *R/smoothUnit.R 254b833eed43c2329c37ee6950ce72b7 *R/stdize.R 14aabec32aa01b0ba0783771cd12a355 *R/stratsample.R 1fbdd9720843e461186e90a52ea09af3 *R/survey.R 1e918b6eec91ae5eadbe1e8032529fa1 *R/surveyby.R 32491c8ca552808351d9ecebf532ec8a *R/surveychisq.R 6c14072ca284f40ae34d60a17ac9cc7d *R/surveygraph.R d6d5bace72f0f83fec5b42d2c0f5bf98 *R/surveyrep.R 5bc03f84ff7bf31c74e055c9efe00678 *R/svycdf.R e13df885a072b3cdf1d2b8914dbe9f31 *R/svycontrast_svyvar.R faa56ad693b9a8640405d834cd740d0f *R/svycralpha.R c3846a9a7d4cb10c069e57af505863f6 *R/svyhist.R 1a2218180bec03a003e47a28657538ad *R/svyivreg.R f93da4eb3dfce901e24adfef27619f2b *R/svykappa.R eeb8342e956d2c517075bd6f7e40167b *R/svykm.R 583b9d6e6cf3623dc610cd833452517e *R/svymi.R 4a5331ff88f51ab2977fce04a107f546 *R/svynls.R 1db96e2c2908ed667bec1c68405a4c1d *R/svypredmeans.R 2d52fec7c7315546084e7e41ce9231bf *R/svyqq.R 152b532adf8e8c01c9a41df34be39b7b *R/svyquantile.R 28f3f42d5c997f75d10b0aa3a497b88a *R/svyranktest.R 09148c721d7b9fd492e25b82c64dfb75 *R/svysmooth.R fe04da44d7a50f474e3db433e3a982ad *R/svysurvreg.R 1b1badbe82633acef773867d2c33ef3b *R/svyttest.R 6582c43691b893c8a81b431a34b42ebc *R/sysdata.rda 3a2f19a9a7b6e5f206a6f8a5537fb2d4 *R/transform.R 1786d64f472b598658ffe7fe0b7fedc8 *R/twophase.R a94cf28bad6374b453e759fcd5c3157b *R/twophase2.R 6c069bda823793258fa7630e6c8138ab *R/weightconstruction.R ec9159b6d06e606f8d161c6d46a31c1d *R/withPV.R 13874fa8d08f4d3dc8d61367a0f33f92 *R/xdesign.R 1f92fb894f4d59912b7a3e9bbc749795 *THANKS 72b41af2715bc7e0eeacfccb34a1eab0 *TODO c201aea3ed362bf320a1dbd9b5daddd4 *build/vignette.rds a196a20119f5aed02bad79fe38f5cf81 *data/api.rda 62150332361e65ad46f66d9795798b63 *data/crowd.rda 341f7e4d3ba3fac0b48c20e98482e8d9 *data/election.rda f3edb04d4c39abb2f588e241b6e9d9e0 *data/fpc.rda 681c6baba0deec63c2490df437a1597c *data/hospital.rda 82c06d12c47ae88783730b9ec6cdb8a2 *data/mu284.rda 7516dbf5d1d75488c05559563cc524d8 *data/myco.rda a41676247958addafe7a87b8b173b20d *data/nhanes.rda 38a7e191c3fc46276ab5c1515766c87b *data/salamander.rda 633bc47478074ec079603bfc050c730e *data/scd.rda a80354b05752d60869c8b948e1918f19 *data/yrbs.rda 853b47b0c3796b5a596d02c946f2030f *inst/BUGS 3afd82f3101040fd9eda59e6df58ad49 *inst/CITATION 9dbfcdd76553194b1513751a02042f91 *inst/COPYING 4f80ce5823c0204e0604645bcc34c688 *inst/NEWS ad0ca60c6d7d1c64ed77618b40c5d1c5 *inst/api.db c17f45ff942d0d826c09c2c97e296249 *inst/disclaimer bd13d234657132da1a44e0a33bcfb456 *inst/doc/domain.R e549b9eba82a7a3db5543ec5be0b0bc6 *inst/doc/domain.Rnw 8e2cbefcfa257e54f9532dc67221f703 *inst/doc/domain.pdf a5142360787a98ec409e10229bbd6f00 *inst/doc/epi.R cf470caff322c36517ae4ac286e420ee *inst/doc/epi.Rnw 0bfb1a522e103651bc05dcd39b896131 *inst/doc/epi.pdf d82d7a650f7a3ed2b846c6280fab38b5 *inst/doc/nwtco-subcohort.rda d102892ef1145ee2e54b13b668714651 *inst/doc/nwts.rda e473dab0d0bdae45394af33e262ce816 *inst/doc/phase1.R 81ed17de82af7ebbec63620560898807 *inst/doc/phase1.pdf d0e73408df9033a260a40660f32e1b02 *inst/doc/pps.R 45d31ccd0e3bcb193a3cbce5c89824e7 *inst/doc/pps.Rnw b888a72d9ae29e7d853c893400d834de *inst/doc/pps.pdf 30b720c13df60735352742274fbbeb3f *inst/doc/precalibrated.R 25a889bd922911a9a826973969ba4751 *inst/doc/precalibrated.Rnw b9282f314254b1543c543dcaff3c66ef *inst/doc/precalibrated.pdf c32d6bb7b69fa9ba5f774af64d2f0ef6 *inst/doc/qrule.Rnw 363cb1a9ffaafed95948e959bad97d52 *inst/doc/qrule.pdf 6cc6d6eab40ba2b77531ee3bfb9c11fd *inst/doc/survey-sae.html 8ac4685d564face34be1fcff1f53b60b *inst/doc/survey-sae.html.asis da0b23328004b9044b0f62f9341945b9 *inst/doc/survey.R dfdd268e5e85cdb9422e11b2c183aa79 *inst/doc/survey.Rnw 16d5e147dca033718429adaf9114db98 *inst/doc/survey.pdf 67fd0dff07ced7069e2ac813865dbf58 *inst/porting.to.S 0caeffbff77347fc2ab06f30534c3f46 *inst/twostage.pdf 4db9100417c9160c9271bd853cd93f86 *inst/ucla-examples.pdf 793d514796f2d79fd31a883ff41af1d3 *man/HR.Rd 234787faa3310c2325952029685b5272 *man/SE.Rd a528d6c6df904a943408197835fde244 *man/anova.svyglm.Rd f15d33e77dbc7c73369831f107a09d43 *man/api.Rd 1df4e44a0124abadc68eeba8da160f7d *man/as.fpc.Rd a3d805b1013bb399a705f13ae2356fff *man/as.svrepdesign.Rd ca07d024bc8ad2920881be3a92416865 *man/as.svydesign2.Rd a2487bc8b605e35fa16fc160f7194055 *man/barplot.svystat.Rd c48b922c011640f2ab6585bf91f6d37f *man/bootweights.Rd b05701bb4ccac840031ff7f887bd55a7 *man/brrweights.Rd aaa020172ef8de6ac25ba2b61072cf03 *man/calibrate.Rd f98c7338d5ed2bf6930eaf66a5f0a1e7 *man/compressWeights.Rd f7aab0d38088617412ac45cdc2cb7588 *man/confint.svyglm.Rd b88cbcc5a0339e24aae8cac15abc6085 *man/crowd.Rd c32bb431ed452b4d1495953197db0427 *man/dimnames.DBIsvydesign.Rd 55e032d442b0447687400e28e4085d29 *man/election.Rd 7b7bec60c38e234bf63817c9f54df4d4 *man/estweights.Rd 61910fd70173387a35a7788b4aaffcb5 *man/fpc.Rd 1fc9004a0c1bb430f025861083e5b379 *man/ftable.svystat.Rd 809a5e046151f44cdc4288915f1be7a5 *man/hadamard.Rd c3f82951b153e67cce171164ccfdc19c *man/hospital.Rd c523dcc5d55b4f182bd406ea48d4e64a *man/make.calfun.Rd 493380df216b5c1b55bbdd05ec4cf22a *man/marginpred.Rd 3798db27ce3e376ea6711eafba258b1d *man/mu284.Rd e3e0fbc9fdd8c266bc6f7a2b8187cc47 *man/myco.Rd c7085a3734f01ba6c00cbb79480ac05d *man/nhanes.Rd 8447ae42f78e376968421ee46543a195 *man/nonresponse.Rd bd43fc6cd74a95f729e8099ee3d66a72 *man/oldsvyquantile.Rd ecb179d38dee1a930f80120be4d02375 *man/open.DBIsvydesign.Rd 252699f3b9df1b2849fb1d6e43e991f7 *man/paley.Rd 5261a009c48bd256a64480a197dfc243 *man/pchisqsum.Rd 9d2a995363794d228bc4e9983a2ee186 *man/poisson_sampling.Rd e8fa2c17aa1230065ae000fdb0913157 *man/postStratify.Rd 47e775140012c61bde6cca8aaf0dc3d0 *man/psrsq.Rd 6e7610099924ec8ebda3bfc6dcc40015 *man/rake.Rd e7ba254bd22674a7636990ce99cd95b1 *man/regTermTest.Rd 5284116f54e1bb172e72eb163813620c *man/salamander.Rd c38155f62ea15df2c750a0ca1f2cf5ff *man/scd.Rd 2d86aabed010ede7d3ccda0d2ba81498 *man/smoothArea.Rd bb5d761732c36494bd7b1e9f1bf81d37 *man/smoothUnit.Rd db845dc8216a7d04e1c224b93f764d5f *man/stratsample.Rd e2d5e837e99c491b1c02c0d135516aa3 *man/subset.survey.design.Rd d60c7a31c1308c483f75c15ac3314431 *man/surveyoptions.Rd e6819c07b429350dcf941ee74f7072da *man/surveysummary.Rd 4c4993863452ec84eeb68d5ef07c7e6f *man/svrVar.Rd d1ecfec3d49af00659dfa4f256ca08c6 *man/svrepdesign.Rd 939d043da650a1f44502ba376d12ec3d *man/svy.varcoef.Rd ae19a003c9f60058fa4cb749f23e1c68 *man/svyCprod.Rd 5c26c227b4ed0abc2a1f8b44cb8b4709 *man/svyby.Rd 533fe820a1e613b0c8a395b49af7444b *man/svycdf.Rd 87a0e4250d9cd4afe1fddb47e00da98c *man/svychisq.Rd 4be2574f626a95dc2dab3fa0bfd3e04e *man/svyciprop.Rd 7b9ac4501a2c81a00c83ca4acc7498c3 *man/svycontrast.Rd 76f1c76aaf479969dab8528d4958ef74 *man/svycoplot.Rd bd92c8158bb1a87906f6a3209be1a46b *man/svycoxph.Rd d3a668ef39f7c71fdabb476a0099a4ba *man/svycralpha.Rd a515515ae32f7fb2de779c5dbe549db0 *man/svydesign.Rd ce556903b7ec044cdbfccceb75395dfc *man/svyfactanal.Rd 14255d4805d6969a10e701beb501aa54 *man/svyglm.Rd 2c0ade30e854fba2febff7fad554da99 *man/svygofchisq.Rd 23cd1c1aa81a18a5cd728e74ca65ac78 *man/svyhist.Rd dc09806e2748f311d8c32fc8f8cd415e *man/svyivreg.Rd b23c0f61c02476829e9f5850f7da1be9 *man/svykappa.Rd 342cc57dfb19aabc36854c557774739b *man/svykm.Rd 930237e3c9e38a447e00b8390528a4af *man/svyloglin.Rd d45ebee332be3990548bb76794777171 *man/svylogrank.Rd e539db0193ec579f51b2ee927e92bd61 *man/svymle.Rd 87f974343399b3c444fb632353054d9f *man/svynls.Rd 9349af5a4293dfec88b36b03723ae4b8 *man/svyolr.Rd 3b9e8c67b5844eefd79765361bec81d5 *man/svyplot.Rd 44aa5fc0f7128f7f84b32e8fa55f7bc3 *man/svyprcomp.Rd 389375ea77c22206426323da606f51f0 *man/svypredmeans.Rd 35c1c678324addd81f628b0807030bc1 *man/svyqqplot.Rd d454ce874ce988184d1fade9480d13c9 *man/svyquantile.Rd 283097212cc64626aec865db87ab8451 *man/svyranktest.Rd 823ef92329cafe1951fd81821a7e2bf7 *man/svyratio.Rd 7af7d7cb98df6e1d8007d1cb6629acc1 *man/svyrecvar.Rd 28b8adb800fa559985774702e88b1068 *man/svyscoretest.Rd 671fb4c053614fe861700f3d5f4d804f *man/svysmooth.Rd c3f531ef8116503c4dc314e463552f7c *man/svystandardize.Rd 4f58ed2c680c203fcef35daf14ed5cfc *man/svysurvreg.Rd 7be2a1fa3d8a6de927d78e67d95d048c *man/svyttest.Rd febaed1d0d48a76214b3cc1dbf0f85b9 *man/trimWeights.Rd 38788a188f43a96893786ec5960dcf2c *man/twophase.Rd 235915d70b5a349e96a7962fa40be8cf *man/update.survey.design.Rd 20ee2b3e3a8d1848105f1cee6d57aeab *man/weights.survey.design.Rd 0666e2b9553c96d8dc7420ee54a44ff5 *man/with.svyimputationList.Rd 075d275064dd0be36ad5414fd844e79c *man/withPV.survey.design.Rd 268d8dd131876cfee17c3d97768e6a1e *man/withReplicates.Rd 6ee7f8912708af0675eaadec01449f72 *man/xdesign.Rd 27bedfdf4ca5e890b2969789963f0520 *man/yrbs.Rd 7eaad78af4352e54e99e63d18a220eba *src/Makevars.makefile 8d46d69896a1f1d31ed76035a0e49d67 *src/Makevars.win 59df71c63c865a3b74a953f8b574e3b7 *src/RcppExports.cpp d64216c98e837d0d3a339a2b85b0b76c *src/arma_multistage.cpp 6cc4d0329eb80714fee45788490212d6 *tests/3stage2phase.R c91c9d0dd78c264236d5aeadbe6de4aa *tests/DBIcheck.R 272d0227580fe64c05c4c7acf2aaaae6 *tests/README 1a1a86949b851430871e465a28511f90 *tests/anova-svycoxph.R 527e5ba782684ca6a459d09a52e4bb4b *tests/api.R eba420580d5712b2bdbee74f844e2c9e *tests/badcal.R fca32d6127f578fe7cacf6957c9bcb06 *tests/badcal.Rout.save 7532f1607ace7f9ebe23ce646b81dc8a *tests/brewer_cpp.R 02afc0b2619b18dbd3fd4c11f7afbac2 *tests/bycovmat.R 7178e6025a01c697c3d122898e573698 *tests/caleg.R bb39e18b97ab5f91094f9ceb71d992f5 *tests/check.R d4e620440333904b7e057ee26984fe12 *tests/check.Rout.save 116d5b9f18d84486d0169c858dec06d8 *tests/cigsw.rda ad76b3e25ff40c0bb3d10d333551f52e *tests/confintrep.R cb77bb97492e653965018032b217cbb9 *tests/contrast-replicates.R e81abd8a9fb22680fa8975667237694f *tests/coxph-termtest.R d59c6e9ef79624cc1c29fe9a2fa409fc *tests/datos_ejemplo.rds 9afd1c4ef859ba69520afe4825a3b1e2 *tests/deff.R 1c28ba9df80a9d65aee6d49bb767148d *tests/deff.Rout.save 56ecbd4b088346c57c3cef3f10ef4d17 *tests/defftest.R d4cb9cfccfdc7fb9ec7c34a64eb7c1ed *tests/degf-svrepdesign.R 430cd5207b02ef92d2d5a75e1bdf9074 *tests/domain.R 62c918ff711bd24cfa3d860df5556513 *tests/domain.Rout.save 85b0201ab5b022cf0e51b6badfc5c07b *tests/fpc.R dc7f9da8098092ee549185d738d9399e *tests/glm-scoping.R 32174d2a986af7276bdb7daa62670c77 *tests/kalton.R 9b30594ac4527d0ece5bab043f6c06f1 *tests/kalton.Rout.save 4b9b3cff84916f06f5e07207d610778a *tests/logranktest.R 743a320cfe2c872e5a57aae7749b67ff *tests/lonely.psu.R a3074ecbddc3627ac12ea4cd9221f394 *tests/lonely.psu.Rout.save f1344d65b114f7183f2372f2aedd0ed7 *tests/mtcars-var.R 5c3caf5fbda64e61d4819120e15fd595 *tests/multistage-rcpp.R 5c88d425cfb80a6b350763acff6c2b92 *tests/multistage.R 5acfa941d494a5c97288681e5406f7f1 *tests/na_action.R 6ce50050d55305eec749578f5f3a7c9f *tests/naa.rda 4a5af33260200b9e0b11e9bf4c50948a *tests/newquantile.R d82d7a650f7a3ed2b846c6280fab38b5 *tests/nwtco-subcohort.rda 9f37aa87c54f9e9585f6ed839da38a75 *tests/nwts-cch.R e7866681f0a2aa1487345e96e77fe49a *tests/nwts.R e28ff9f23c9d2f758a368c9bae2bd0b3 *tests/nwts.Rout.save f78a9ca2f7d82b635a9ac83c84f22721 *tests/nwts.rda 4cc42f37fa2cd358d0483f7e2e0b4b02 *tests/poisson.R 1f2c987cef798c0d6c8635a5be720c24 *tests/pps.R 64f61874e7698cd196cde84f0e2670de *tests/qrule-swiss.R 8f57b338973720a043c3cc281a857337 *tests/quantile.R f16c0fe601c071e6ce51d25d14f6c5b1 *tests/quantile.Rout.save f80c37f905322aef5fa769353f0fac26 *tests/quantiles-chile.R bb6b47311c28af44e4386146bbb766cd *tests/rakecheck.R 227b1e5214e1f36393633ed5b926a154 *tests/rakecheck.Rout.save 23d3f3e5924ebac663762223b9073dc5 *tests/raowuboot.R 597d97f91f48834e3567ce60d55a56a3 *tests/raowuboot.Rout.save 462a7f4dfda5426594667867a7007edf *tests/regTermTest-missing.R 73d743b02cde34dea66b7a5a1e358a69 *tests/regpredict.R 17f986ce4a44a05026529890440f7e9e *tests/regpredict.Rout.save 5cec209951a03d5d5a81af1347ede8bd *tests/rss_scores.R 08e7b85dd0996a1afa68e8dfcb698a4d *tests/scoping.R 1e41f32fae86cbcd05262014cf6b75be *tests/simdata1.RData ce54c4edad7a3b9fd9c8aa995473a794 *tests/survcurve.R 3cb8a60c150867bbd537a9c0a2493f6d *tests/survcurve.Rout.save 3abe6234111e6b1270315ca3e6b4c271 *tests/svyby-strings.R 62bec47e231e8cab763e4f93a59c4771 *tests/svyby_bug.R 9f446168f9169ccffbe532fac1b42f09 *tests/svyby_se.R f0fa0a734c2764df5ae5af21cefb7260 *tests/svycontrast.R 2692edc4b1204fef6a4d46f428a3128f *tests/svyivreg-var.R 4071d97f56b9bb4f4caaad8fa90bed37 *tests/svyivreg.R 607b2dd253517df1d1553668aabf09df *tests/svyolr-rake-subset.R e65670f0c8e89b395faea9f8b8542543 *tests/svyolr.R d7dd7af1a31559c31dcf6fbfa6c9f7f4 *tests/testSUMMER/SUMMER.R 6bfd2cf7e1f355399615485d29f1618e *tests/testoutput/DBIcheck.R 86298835a37161ff56ec400a23525520 *tests/testoutput/DBIcheck.Rout.save 30aa47b8b87de939651aa5c13ba75f20 *tests/testoutput/README 527e5ba782684ca6a459d09a52e4bb4b *tests/testoutput/api.R 3ad53ef34903baaea1aabc5d8f4cd0f9 *tests/testoutput/api.Rout.saved 02afc0b2619b18dbd3fd4c11f7afbac2 *tests/testoutput/bycovmat.R 0d4380b36115f8543b2476ddac923676 *tests/testoutput/bycovmat.Rout.save 7178e6025a01c697c3d122898e573698 *tests/testoutput/caleg.R f920f94f18bee3ea62772d8d7fc1abf3 *tests/testoutput/caleg.Rout.save 85b0201ab5b022cf0e51b6badfc5c07b *tests/testoutput/fpc.R a9f2ac6a2481cb8100a634703fe5c0d1 *tests/testoutput/fpc.Rout.save 5c88d425cfb80a6b350763acff6c2b92 *tests/testoutput/multistage.R 188777251024d61793ab0fb393cc175c *tests/testoutput/multistage.Rout.save d82d7a650f7a3ed2b846c6280fab38b5 *tests/testoutput/nwtco-subcohort.rda 9f37aa87c54f9e9585f6ed839da38a75 *tests/testoutput/nwts-cch.R 18298f29aee3995d9e480d5058a09ca1 *tests/testoutput/nwts-cch.Rout.save f78a9ca2f7d82b635a9ac83c84f22721 *tests/testoutput/nwts.rda 1f2c987cef798c0d6c8635a5be720c24 *tests/testoutput/pps.R 73e8268a284580d4d32ff928262a88c8 *tests/testoutput/pps.Rout.save 2eed0529f30f190d41b24eaf0b1baa0c *tests/testoutput/quantile-new.R 5d59b70021116564a5e36bd26bf60ebb *tests/testoutput/quantile-new.Rout.save 08e7b85dd0996a1afa68e8dfcb698a4d *tests/testoutput/scoping.R c21c1abba50dae13b4eb2d4738f20461 *tests/testoutput/scoping.Rout.save b4b8f63f5d0e2b82607e611cf285d3d7 *tests/toy_example_for_postStratify.R 1f37c63d5a85505ced4815f455bc8dff *tests/twophase.R 9c6dbee744eefeae70e510ef9d4f4ad2 *tests/twophase.Rout.save e549b9eba82a7a3db5543ec5be0b0bc6 *vignettes/domain.Rnw cf470caff322c36517ae4ac286e420ee *vignettes/epi.Rnw 45d31ccd0e3bcb193a3cbce5c89824e7 *vignettes/pps.Rnw 25a889bd922911a9a826973969ba4751 *vignettes/precalibrated.Rnw c32d6bb7b69fa9ba5f774af64d2f0ef6 *vignettes/qrule.Rnw 8ac4685d564face34be1fcff1f53b60b *vignettes/survey-sae.html.asis dfdd268e5e85cdb9422e11b2c183aa79 *vignettes/survey.Rnw survey/INDEX0000755000176200001440000001034214113101417012375 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 svyqqplot Quantile-quantile 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 svycralpha Cronbach's alpha svyivreg Two-stage least-squares for instrumental variables svymle Maximum pseudolikelihood estimation in complex surveys svynls Design-weighted nonlinear least squares 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 myco Stratified case-control sample: BCG and leprosy nhanes Subset of NHANES 2009-10 yrbs One variable from Youth Risk Behavior Survey survey/inst/0000755000176200001440000000000014576426452012603 5ustar liggesuserssurvey/inst/api.db0000644000176200001440000042600013517345027013655 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> stream xڵXݓ۶Ԍ`:y'NIk8(I_],#%Zv2~7ҙpL ۻLrŜ5eW]Z lC_7= ~ 50F"_˙:[KϼݗY.4QUv=:KwoQ] L*tRQ6F6: P $zZ?<r=Ҽ }"ɵ2[ySQZ摭V9Je9F4Fzİy7GJ¼ ?H=)F9a0 Z2rV؟-@'|.jFXbA[R| MHBMXVmƤ< pdh</Qzѳd{{pCz.{s󏛗X.j#O̗ gŘTsX0QB:KrU) @4˛xw d^q͙UP|B/qz&LN_PS*iZ,[Ȉ:,sLYQkYy)sjB&oQѹYt^糉-5V8ęLjUFg$T_ pk-3=JM0;a=1cjz K,G,m\^^΁bBz}`ӀKMjJӀ +|? `]5ߏȮf  Iߊ%ca+hIY[)YP yr_ AW J`\t/j-~p Mk*ǖ/9WU906x8 \Ea 2 $&& 58C'VD(Gʥ oUz_9læUar-ts)^h5Mϟ&ScfBx)΢“^{EQgAJ Qeɢ gb=D wb úv#z BsZXC:!}&9, iQI`~s<$$JEdµNߕ ^۽Hg܅Pq)aʂʌcڞV endstream endobj 20 0 obj << /Length 3008 /Filter /FlateDecode >> stream xZY#~_!A,76q|WWO}57H$ͣXWG*[iW7+!$sBWL*٭[DOU^l7bه?O6)aW}ϕ2T&1j#&?Ҵ %%گFZ&1lΨkci~H_bG]U^ur:Ut1mSzf0Rَ]o44odI sIӱjmd;Rj2C=ı'udKLq]meʈ,,~cF_JR^z,㖊)sJbT8$L$.X,l0>Իi5{=piѤ?$1?NNҤ/$0_AjĥjT3{KLj̃no=2J1 yr q \^LdAAvsj_g6~e Mv#(gCzu'wWJ}&8G,F*poe>ߢ^WOm^e5 pI="nIV\3LAMSiM-+",=ySS3/0  RKinئqyduȘ"ȁPƄQdUy$$JW.)dqႦGō|ҋD.7C`48b 8( 8 CC]#:G2I.K`B=ĢpFM!7&b0($ q.<چ"%\MZ<új 9gRS X{}vDBpǨoO|7A`/nXH 7Ώ8%FF)3p+*>/&vȁoӴn#~axh07l3AH&9:)Ɨ_F˪^l)"? 1N`=:G"ܑDOTYtQjEpqՅ lv[%E<[=lM^7]0X'.<KCO\t8m-9 j kw%:'m)!eF˶`elN_燼ɳx6AOǒQ5HH gubYk?1&&8HV*p kbd"C[7n]=lnyA8(;vmz h nyGδ !ŞI8B~7ニFiBg-I.|'Yb{joO%'CahF(0Gp {c/Kc>@C%atb):#?.مUGG@DgTNE:!Sߩ?.?sv؎1t{v)" *ۇqS,D%͒/FXT&j*r)&" RJXO}Zi͖t0@E(#ZM*F_}AYF‡!xD9a/>xyRArAWt|{MV#Um{x EKBE~lf#SQI.My)fq9`~xb]'!ӋpY#Џ?uV$"`~lzMqBoq!4bmuw=4-$J= %Pu{jזSa^XbL... \n)}*UHO*m-פH5z[e`@c^=QOO uu v3niM%wa/>$5=.T&v69+ gO; H@H&\~j#y2-pLˋdƫqyqf[dٮ+бDEht ^t9l;/F#O`GRv@^0Oi^=uNЗq\37{ؘ_3 (xzУt`I gYP<.jЊ~*B>>phA<)^54EDjʢ}~޽*\hWoO$A=iRK%P,H SZLے7ͱGl6rCFÁNI4$nɹ7TXrҘKжA~_~_?kJٳ!ñ896雾 yz=?2k|@IR0cq:(vS'W?Q&E.x>nbK~f0!zoi0>i!=tpfWx CiB283cZ*2#=N+N%q _w6Fsn;U"@&oLu[#^> stream xVo6_!&#WQXcoR,k@KT5>oQ2q?(@gw;x]#Pq0QC' I, o/Qs'燩+,հD]zΘ\ ͙*E#Ͷz/bFbM&|LQF)|a-~(WߴH]k,Q^vo}SzwUe1=޴G{n720Ul+딮U4?[v|˻3pXt}su+Ec=h_<}>rS돵 k!]@aע1lўvrt1׷lTۉ ƮlbwzV?#u%kr>?ڏH)!LjjWH0;gpGkXs#lO;V,5oQ+}&mg䷾#mO7pD*}q675IE eψK@W-yk-HKS1bjRɫMa3 ;EH'Y #eN"$1v=]p@-d6S볰SntA.p4})7*(5F)50ޫEIB+>^NG i2ZOCOI/Cp/1.vBӲ4 B$^(dL?.7 endstream endobj 23 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/private/var/folders/4j/jzt_yf7n5lxcqw4mf5qs79yc0000gp/T/RtmpBWoxYl/Rbuild1691a1df113/survey/vignettes/pps-003.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 28 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 29 0 R/F3 30 0 R>> /ExtGState << >>/ColorSpace << /sRGB 31 0 R >>>> /Length 4408 /Filter /FlateDecode >> stream xK} /wer)H" 8U=y2E:4ff2 &4o/|įweÇKv]לo?!&mqs K;-ݻٿyÿko7wo/}[3mخ_|Ӊ?;=^ߵsakn}Zg>{ven캵?5i>۫7.SK>._֩]oצys黩 C!ktH:dO|tmC|fnwrSͷaZmXvq,/Kz;/^d-!㱁'_0_`}v,b[¾k-8VtoDZ*OhϦl3B==):i+M!ts=)^}-GM_X|l};X7wnv$8;'9αkRݚX7w=t{ۇ fa|;/z|U+|)xz~ /rc,\8rˢeO笢eJev O3a ./`岛5U˜n׿JPs>1/øh̋F0/hL-++s*JK.>U8]?i&K0.9KN,9ӼD˒-빢vG笢i۵saQe, V0/XƲ`˂e, -XѲ`Yۂem 솊|**-qi{DSZXUrWL0.wø r7]5.wӼMr7]5.f*Pi4PXVf1E0oYf,4oѲYDf-4oֲkKuTjq >.ݱ2f`jy &Xije&Zijm}\SsQi 1kykJ7aܨy *7`٨y*Z6h٨y*Z6h]t:*n e>>m.9ce3mضhmm^gy毝ֳ|:XH`m#̛{Y.@|}߿q,<̈́yƁ"`(ybh(eakeH!!Zi@]t]:gFL}i.-˄y#G`1ycGh1eĈcG k1eĈ#ZFi1e~UtUuTP}}sD?Vh< J0(<ˀ2J (2Dˀ2 (2Dˀ-4(2Dx笣xG۷E/,ˌe Xcoe1&Zkom&ZjomƛhomZfgE׆c:gc\~UPSaYf0G<pQ G<Ep-Q G<Yp-Q G2Mp-Q G2MhM笣h{bo SVYG@u +c$H9s @,dIh $H9X[ @-$Z4h $H%Ls @-$Z4k $ђv]t:*Y}7TZX s8q&L0Ǚ`3g%DK83qLęh3g9DK8-qfLęh3g9X[8-YYѕO6sQ1 |8J +a C% K20dla(Z!k C% Qk0dmaP!k C- EK0dmaP!j C- YKVtGYE(]뿾Q 0GaR9Js (5Q*ZTDhR-JEK(-QjTDhR9JEK(-QjEhR%JMsNWtuT '!n02 6A,X0`bĦ9EK -Alh bĢ%Ms -A,Z4h bĢ%Ms -A,ZXibђyzIDT!uj.,ˌ9 c 1.c\ĸiq%EKgm1.Zb\ĸhq%EK71.Zb\ĸhq-EK-1nc\ĸh]|>gKе[aYf,%@0RK `,%RX[ `m%RPk `m%VDK `m%VDK `m%VDK @%VX[ -%VXKèZH笢R{b7T_Xs0B0W\!s,4WR!DK-4WV!DK-BT\!DK-BT\!DK-BT\!X[-BTR!Ls-BTR!Ls?JI笣R{b7TXs1D0\@s,4R@DK?*)zNZRVUZY-eERV wyRlDK1FRlDK1ņRlDK-4RlDK-4ҚOs>mL=1菕}X=~ s-2H0"\s-,4"RDK--4WVuDK-UGT\jDK}-E\_DK}-E\_X[}-ER_Ls}-ER_Ls}-Et.e|:*1v!DqCG3#c)?0ʏh)?ʏh)?k+?k+?k+?k+?k+?k+?YUtiUTNUq?u-6'TboI,&\ cg̕I07&\ c_b,uI0%\sW2UI07%\sO25I0$\sG24$\s?0#\s706#\s/̵0V U)Ԩ6giTq --6*ԨbJ,6*ܨ c̍J07*ܨ cb,J07*ܨs2J07*ܨs2J07*ܨs24*ܨs̍06*ܨs̍06*ܨs̍06*\*Ǝ3V7_/>|՛|~w7]%4㯷1UjgKO1 onr@?|}3j\{]x~t{B|I4 y )e?>]G-ݞձ{joSY-(oEt{R}ǿfSR0\ߓ+uCȷg5Ňp(%eu|MKgn w +d=Ӷ5ݞU2[U=ܟIm<_'6&?g_n؇K>"=ɟvysx|z eF!i]=^]F>FoYCMe9rzøt!qN-B^/Ӷ9ތ~cHܰwg?o^>4yM{?t>=dkLק<ܿu~T# endstream endobj 33 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 36 0 obj << /Length 613 /Filter /FlateDecode >> stream xڽTn0WdQ׾~fâ bv-BH3TЂP6}syYa6Qͳ/S8xJ=~s*OORn3)*3̮Uu5ē߻G`~q,Jv\&uO4΅~ oƟW~%U3B]Ɔm^MXP˜d2fB&ƻ"F*ԗBɘjaF?44>oc}?m@ IspC<0ZXZ  nbη|'\XVvi*ԇkn(ӐEğPQph;xD;h& IBIbRp6H T4r)Dc`q06IUwIfYoZ¶ضoHۦ B<SThN..V endstream endobj 24 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/private/var/folders/4j/jzt_yf7n5lxcqw4mf5qs79yc0000gp/T/RtmpBWoxYl/Rbuild1691a1df113/survey/vignettes/pps-004.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 37 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 38 0 R/F3 39 0 R>> /ExtGState << >>/ColorSpace << /sRGB 40 0 R >>>> /Length 4886 /Filter /FlateDecode >> stream xMF<ڇl~s& $@`@ A2Xd6n z2-OW&TP}_/./e|ݽB[~ Ua>U>U}S/<>\'ls.U7aٞ9 sxǶjRw$ok請_S_Mc蚹_U>_/c{ۛW?wUSz ~v^Cݷէ*_B,ǪzsiK%s[pIb%'Ih/[4R7S=~A u3^/HwazA{`n#|q$ۮNdaގdu.@i8qf{Ӷazg-_.Ottx{B}_A*|f{²>=mjtcƹ.tKg?]r<| <1nS`6S=.˕헸t>u0Siy]maE)D15>B[M|92#XƵCHhlTZ@6ig:`em v;9fLLl}L{X(GMXfu] \*t;c=OMrՕӬ-wkZf UM4`-u?a]wsģaƣꣷɕ>vKLm>X(֗a.iI:z &kSp:CZӄJ!EӇ+`}v`v2EDSbI6T:4m_gcͰ>4lLJ>JQ"Z%sԩkYiisĬf|Il8>3xq; FJ0Z p`jT 4/ Dk4 - @x 2IIAh-}@ "4Z4M"4Рmִ͜D8J+ k10A 5 baCA 5MbiCM b(iCMjP$@jP$&1P$&14! F14I 5 JkMU_4o P:X Rj XsI]HQˮ+E-1Z]v&Z F$Ȼw @W`\Yy,<`\K0 W`?t~x$S)Ԉ D>ȎzZ\'!oWF`ii`m^6`)Dk4z փhm=4M&h@q," fh}Aֲ4> @E[$@< 41Z7 6T.DObCca-\k%C΂,m Vγ?dkǬ+l?18ksGqkqk08 `̀kFf&k4X3 vhmc4X(B-` 4X(Y4% h0@Dk4X hm_4x#nO״  fO6i^R["X"+U0J>> S!2UYFh5B[打̚'Npr7y$cɒΒ`4MvSa2 5IQV #K:"Ԉ,'K28ɞʑ=4SM=Tf雹ysK-cOYx :$iEexU~C~nf`u]VUt!Emt >SuEM+JqFu+Emp!Eo `n]U\m]Qjk֓"[GZO}B<պM+Ei]QjK Uӎ`mh~U\mg]զ܎h%e[6 4QtJ' jKfiО׵B,=>y=R{^WJQ{^WB,=/-ǺUXXϙ hXGXW}u}+Jcj},Ǻ}3,y}Eszq/Woi}u]T^B:~}j5?$O<ŭ?듼>ro/6ȪZ!Ή4uMlZWc=@0i~)1I25Gj ejX~wՐ~wUn%j-F? HCHMk-66wG5nz{v.RQݖWwW;ħ7*|gvUj푚;ja[^6i˜nT;٤n3QUQD뎿oSse7:\'b:o[OBJBKq9BZY=ߕdd5mpIsm/5%%'J%Y^YⴭW{1n}hɺ,ݧY݇˷w_E!-imuҎaZ_1x0&|>{C}u? endstream endobj 42 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 45 0 obj << /Length 332 /Filter /FlateDecode >> stream xڽN0>D%ƾP *JRuq !)j7sϧI9&5F1嫉jUMY*/8[owf}M>֋qy]wj^_jZ?/[I r@j)Mhzto2ŏ'KۧO dBiZ\ И]g 4K*C{O yJ)3J)]K퐞j}ܸ7e $#K}vlq 6vl$ؖsc > qmyc> 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 65 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 67 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 69 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 71 0 obj << /Length1 1519 /Length2 7319 /Length3 0 /Length 8340 /Filter /FlateDecode >> stream xڍtT_.- JĀt]ݍ00 "!4ݡt|{{׺wZ9qvZ(_[ C07+[[.0_z1 ĬM-VpoY%6aPC-p_[!Hwدg(0yy:1b6?TC@VLD\F>̐18EoH4)/D~MR_o@D(0Ha B<0 aeL(W낀C?pLBh/o?Jx0ߤozC!1$D6aUX[^w9V-^M2m4;*6:>|8%5p䖥fP]ylO/Nzj?/X(t*0:yx՜geҘ^pZ,ZTdSϥ.r~!?@Ky۱{wij< (o^!{Q<пbo/YT.=;;MI\1Z6kL%9ՠ6i dGv?6OD%N``$N^l^?L+Fr/` ^}[]{:>76_-4z;ɔMb,|RކrbQM)[u(7Wf*XW4՚貪#:汫fy 놆511OV4c*.?AbJO^[ {I%YqPz^=M0j#8CV㳎8J徲Ffg$Z+]@xE!;;Yi@U '椋^wS)پ7X>XTw#15+rD7:n ]K/WI}8^sz.T(Z~:qx 0jJZkdrзVK28P̷fِrcuZ|xd.ۭ|WlU82{ʾ}:xQqkqnQ}Xn{c#[eGVDB8@X#q25dRUF7,~[{R(n7W weօYߊ%W2ByͦݥCb4.eƞCx%>ݫIIB?3Mj"2J<&ʺBkr4;*Jpr/-w&# c^bIO [;LiWl-p앮uzĶc/,nm\KdU4љ,l ,,E}.CH5:_ZẔ^7ĪQOKڴˡxʌH/mm;ΙQj-J,u7=fV\of#L}F޷ nfZʡ݌$فoOb>[{X7=H{`gd<%!gPۃ;^z`HH=,D)K?aFY:w Gm>V?& ?~-pUvXFv1-MN0b\7r5TͿ8/4tpP%# :Cً5 6JKoݏs[.c8Ovٕ\ˢHz3݆b6SD̋K>"bKY5i@:wk}fUE$[=o[<3aUaxMCLȝZ2 PV䧣^3?g(~ 1ͶnEipY6v}EҮLZX!%{ %Ez9Uۧ}y\w?CQ+%B-e^E/ػ;t`>IԕsGQG _8ZjL#=cOg(ˢmo" #8GJяR#霼&YoO$WՉ,}L<'TVDĒ*|QrsvlHmlxb-EE%%ɢ5p (?u""]*/"A]w'a7? Zު|I/Iý.XŘ]gԙO9>ڳö#ce&ce0;۬q *q iO?,<z90gi]2ft@s`WH=*8iCqA]J!=Bj6XF+ BļP vJyI)^6Ύvrܞ} KEB@>y5!$'p%}iMP z6?eVxڕSy U,@=m+)W^&l3ۈ`4\Wt(05?Xa%fb˜kj 1#-Nћcc*/#mq iGk-ܯ3 ٱ~XH@ebb|;)jkz HZEy]^L@; $VFŖ!MPW>`qF,4^!ZK,pE!nIzFv#?0aI3*bi.g`T0K_޶PL* z.JU DG|#- PXw~D8Lv \ZJÆms*^woO8o<µ˨I[v=9Y&3ÎO=xp 3Ly"HgܦwsB'DsʻNo56+4uť8g8NGb D=+|՗6ʦuMJi}q~b⠤ϧTMijL2%Io~rB"KήS7A珤&:.]\QNUB-}eW{Deʒq-&ίJ7J֢> 3E?{]³ʄԒɝirb; iX\G[c|4ԥWy 6BuEnx=GαK}TЊ7E^oM(?䑳p[k~]6Wp4`@Mɴ[{ؑenba,~4pӬZ3uc$\&\bT@U뎐[#F/2De=e=`1)~hO=QN!$9z' e>Fm=A<֚AS\qd3z,>g!%(ںRߨUk_spETf[qB}v]ɽYJR cMbꪵӂLqxlL^QԨU+-5m#G{_'WWvmӼ[Bq2c%tEi(Ih[_۞ȏf&5cE=w2/|ggQR!fg^<{N_FdɯrE莼%PՐ_f+7Y+>[u 6Η r,ui,hSݍ3!K0fΡv"B;z s> dk.ԟ !hS:*eW۳_h:|ܳg逗iFaV3srfdB |G DfMĥ#NB[agus08bc_dIH0]"(=ࡎMZgE[GpҢ^*9hܶ <bKZ^F1ЏZ䛬+kpvt̜Ѿګ+21i(J[mb#P{O$aB~͒qs+U1eqq`3i4|JѕWEDC}mk:=P2Y0L˴Ģ%(@wNgy[1}7ĘKy=e86w!HSugDEQuS{jBsWQx@Z{}Cѕ-.͛5bNDSyʊf!a\]nX$?4-zH|^Zp<647u{?uat}d7;V4W,.<ԋ̓Y? |"$7M9wT$^e+Ƶq^SQ 1?K!8trR Uj~ZO "(HU=Ox}QRj 8fjBlv#OJ cL`FH۷*w}HEר.vbqԪO.]ʹJ|;[Dv ̾>*h Nj).~;el U,mĕ_ hGE> 8e81UcB7I{fK?*6L>":>}UUظ>@BԻKyUpSH'㐤J*vu6:/9X  .*^^qF&J~t44Iw ;}7lD6(o.9;f6[=Lplb_P61߈P-qʿOrc͝3f a狘P~BHUIVS,Wb77JJ/vWq*~/0׀\rd> w'jtK|w-{vȾohvvr"SRegrxq+wx.CIܵ[ ,n7n4?`:ʧפCEu4~7jo3JUK ;(^¤4Nڱ͍JWbl d_~Gq^ Ս\(*GYبć" )(wFKVǂn@?N endstream endobj 73 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 75 0 obj << /Length1 1379 /Length2 5902 /Length3 0 /Length 6848 /Filter /FlateDecode >> 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 xmzcpnmc';۶m۶m۶c6wl}9;[9G=zԪ^@Yބ$*HOe&!r41p6p6L  $!;{G 3sgſUkc  G9ՕɅхIJ&&gs @HN^CBV @.&35q4ȻZ[-LlL(v FvDo&3uȈ( *D蔅i:;q612t 7o?-4`hbfa M/$lMIOBN! \ cglh 6; g5GA,D-M-W3f ϾZ{߆,EũkEl-lJ(jhĿPOXEO/Hܽh4L Vf#khboYm'w#e;#`˴ _?`Ts3*T +=7ZHCzWXXn<;̈́q&ǓS:X%D|k uAU1mdAo"3)rk$x;Wm(t~gj~ÚSU#Ι^ څ!3/? 4@;` dhϞ. ߑ]̃V #e!H_zhL'Ƣ;*]=#PB=MЖtZ&ږr/`p S025 IaJ(uge<=ީb̏k(ljQflܦl+YAŀXVj8cB ]vVX$QY]_cҧTib:-xxxM35<]P8kmPOk@ 4繯JZ,)v:8rސb,QA,YUg>&ﲉKN":_+CQpAeLdQjF6J=j߿m<4,âr.q&_^&Con˅vx)StDZhP|!;a~R /{Oe)c:h?hn`̿qu&MbD^U5f::+OPۇ1:cZ",شG=&JQk[: Nwqvp+^$Pچ_wpDBKxZ!-"}ۜfқ_:a ъ 0{Iz\#rT!@! cgm8k /se,o N|Nr r0)(lFO:Rjex9vphҥ4|'~O+bZ3LXSf 2rv*AczQQ}%4@'E|Kk5d(ݒe>&,8LJL9$u :>4KҜJ'/-r|18=)$G" _Lq7NR^Il- qB*6Z hHa8t3TXcJnϵ%mRi/UF u}Ȑ} L$ϟ0VWSEKXs[ S/K 6u_?C߲GGM_$Ȗ8EiNB!BO1ϠI7nF\5M+![*.P󿃞nmq̟"+ .*4o CuNcfkUK'q7iTZW:h`ZWEۺp3VHltaTQ SZkyl`)?XD9υZAj-1")N85W52[H|vQAE?'3 8A BYb@iYeu<^3fp(ɒ]HGe^ѐ )$zλnvK | -J3?7|-#ԯ+(2,~轀YW_e6~1Nd2B ^!sH]nr])Ν"w1[\o9G0MiClRpTb] 52a[귦T@%v!y>Q*=MI f3d9D3:9TTya;5p iʓ\TEJe9g=9;N}fa4~n6}iާ8P)~Ejt F؄dŝ@$`N:$KsB&M#ֽQ scۍQ͢MuD|waui %*Yn ݮujߺ zPˌllB7)=5GAV]%7v-x#]c79.7aKLIkw/xuu:?u;xcd1CVRe~VVY%ߪUMs<0k>Z,f,)QM6z`/),]kN*fx N{ӏCYFQʐ>D:zz'*~',M!A]9.X>EHqW|Uث;ݏ)MCtƴjIImNUWTr$xFQ± ҂Sx_Ԃk)%+}>O҄79\tE@:O)5"QIzE$/՘PTzjW ]?͔ Tz>%#BwK0iLªj,Hܦx \_#C*'q|l!Ȩ^b!¼_'BQ}U eJfטK"`@^Wz:ЯyߜO*KiTZD$w.қRNvĻ{Q6N6U{U@20av%vf-2o_ѬtTtٽ4e \(`g XN_l-;9^*lpGA_aѧ$ӈreO3%/~O>N˱ _!J/Q!|Pd\R_@RD$e}]WLɔMޒ! fc[ŸN IetuU;& T*Z*n~<0t`Xp(6昼&( MJk) N'dFL#'c*MJ"ui)~Xߎ\O(7r"9 )̚X2vƺXɃ+Hp-:ɥձ\9#䭭v pC[p.x7wp{"stR٧ub4MWܙF^l*h=or4q{iChmjĹ2aKt&3Rc1nP1|c/~ r߄x #Ȋ$>]-ld<>4 T|ٲY ]%GwVGwhZ!%)}^j{E]P|r`yo6.z͏G@*d4GƈԄӱüŤYJ3ݰӘ6wO լgHyp%+/a^tII7&Qvx4WH%*DSu%L#ȇͤĆ-vr^.KI|0,3~eF9?3A`>&B=.ǝ'uM~ ;"ĕ2xC>wsAKcp"]B&y~^6 _DvЫtJYo~zw9w i *9T&>[k&~$uշc(a|[* qLt-;E'G;9y;v е'dfŲH]? anA֔LD_\"GEr9,OnrX }w a xJa^ FLk0b@3bm<@u P {f;|vg٭g:ﹳM[iY&]nv#ޚcE5[n~lp;rV[ÕL֬* * |#|4-$[s]Qv5$Pe9{@۔C9ܙdxP پC"ӃTXò*#OH /UHG{ƀxYl#Tvjd(o}~aut7W{u7dեad6 !hŢdA%`YSI&yget!ebAN*=lJ?rHQoEoV->]TwoE"Xu:}_ w[b"Y$2Xd MOxE/ mLS7_#}S-t"jQM7]qYwHW1g봢oܚWT\c0wR+Shś0^6l=xUM:0"UF ppV \2~̂fQJen'+J(&,UD)#\NpDs==eD/˜C|$Yv2$ Hafu2s0)&?V.SL$',uf7Eu<:s4rgh*b(e{yǐBɯv(cм;W(yM+Xأo$Ld&%EnQ-$dh,<^ }$$(~#ۻc1113B`v.o/Z2&6mV0nUA};l|vy6pMYSS_Qg%(=6y0\Q1,[n`R.mdH׭ ӾZ&ĥ^k0A֔Q:ԇfZ֪ :/_QEOi6yXu ^)dSt'< O~Rш{ I~:&ٜr3%ϕ-%!G2݊/2Aי Wgr;'[oyvXE[0 -^))w!/39!W p+٥!ތ>.`*`pO#Xav偫j$XǒgpV ZxU~;O! P?&ExE jIhV?'h$#Vs"E cU~YG!Mė4m M~2d8]:ix8s8rHYzAJ8PLMD,c%EaT鰼ԆPڃ_C6pL U JGeMc@0L(;2~cY=$!ȯ`%jl~&J<'m0(xiikr2*[zt~1O(1,nkG2#r7Ҡq;\DbJ^u!GaQ)Rb8 q:{uu@^ dL_ "Iܥ3{I42~BMQYܓ̍7jz[8Ub9Z@"C0I ^R4^}+_$^@5WQ9"Јˍ0Vr;5Mz$Z4~no=nT@?tM{4@]$ɟkA&=L,6GiNN6oz Ԭ!H?YQ՘OL>Cb|iD5n;E~Kp_ہi|4 *iI]6v 7Y[w zG?ґ-1]IcJĥ/ kLj0D /xB}wVK+0 \n ŗ'O'p (qQC" !Y_R{cshƙPBJ&sz5" ܑ&#]0d.mo4}PA>M}\I$oX{(2zNL$ofɋ b; bsa!#A2+.mhb^۰Y9}µ4ې٘s?&ͺ~@u:ld<5 _,`jpPI'6BUy}Y@$Hmּ6e85xQ5Դ8x$X2!Ұv=p(B҅q3@gR[zV?f/;xS9eFuD~ cvu + }oeqN Ck҅W={TMqsZSld} {a/~z w M6s@8T k 85*bcƯVJJaIg<Q^ Ƴ^o_ѦIM>XB[bp_8v~a8"ffjMt=SP}^ߺ@'y.za/y!cP m/B&>P'ԤarzrFn}+teH%/lL̘P# îqua!-j"Za-?Ri$@`)PGg@o wY_~UYćX髋/nٱt7YyA]Z8~yò-b5<$}YԶC̙4!+OStY;`&q?@"C_R>GlRg'Wfmh>'\:WnĽ4x{X&*NWk5,&]| k֑U*_e婝o3I|H<}V7QrZ※I8{f^J0FzLzڬ*Xw L`Sff_1CPX۩$tA܃(ʘA{[+Bq}3?U|6oȊ4-˽N,1'Ѵ`_X|i([a\s :eSx 7 Asj|f9z&iٛ: =sY qɧ<QcB[l_knAM۔BrQHe2F# 7*36wRFZ8-OSnlg4)Av˲gMurRkw ==x^)ҰTsBXEzq] }Ј$]TX-B`8 u=&OO wt߻F{GųP e~ qF Y],ť&܃01vKNn &vڲSF3N_W .QC2U(yL ^JYÞ <ɩϙ%g4˝?t"RTCKT3G(oԤZRV҅}X@*3ndE@TOJ!l@/^0Q8Hʩv2kƈ}l6)$b`v ]!ʉ#%DT4ok- b$MO ޛo!Lq)C+M,+`̤muHX=Yƽ=,MԱۓ魲]-6ܘi:Ko@oɾjgڜzhzDdѼO'v|me9kVcqG6J O9#2U(#CFEéz$PRρSDoPO-b"0|%,aB l=_م&j(rcb߫[f۹үݹ.y~gu+L6Ko͂?V'h&j=~]6,o5!`(G,`q7j8*>S&uc]gUXu+?DZHBW#dUdȹ[g>zU99m,1D{bDNR8l04HG$h`PC+p|qO \mh5[!ʖ z0tC)ߑHSwC@#d+r`̽0]K9 HSP@ \ppIj#^Mڸ0œgޔwv2#t<˧.JА2.RT$|w/zN,u[VVs>>/" ""3p[6AX!@` ƮP(ˌt:w !,n'wQomDJUL]9x!MpT5<äV%+|_Ep!$( q`X\$q ]͗H~QfQ=KKi|\pNxgA`s0tmcUMol5 +?1ڋ.׿!Ql(%GsM/~.5[l!@,7Q35xY5AUĹȠ(9^Ebpn+S4$ë-hWՓ^(&"KoS.1WIiU C6x&|e7~7u5ю:qQ į  choډ`: _?Xsj*Csiiz5Х^['sn6K(ėV^uq1gYY%l Ps5x 42mqRfqn?9/Ōf `;d2kbȽc݌ќK}B\^wW4| BRA@,֧Z]0dgWO T8Z >B|t!W4;5'|i('_Ցo٨(dEJqK[5r9I KCHrB*T[kuER5Ҁ?J}vz,<Uv$_ vL=iN.>elIo^]x`3k~ajpƙ uX uh7 7CL$b| jΧy+N/^9gF 1ʸKPDd+)'jh~y̒GPe.NJNpXVc< "la?Гpb-r1Ouk آ(EfW ԛd-īvCT"& F`=Z]0#sO"4fk(+͟wNAw>$& f14jI*sX8 &f<*_1n)W[{aah׎6F9X3Munl͓2C9[ص}DdVBm$,)c5Jʑz[>*/8O-XnF̕/ZcҖ5,[Eڧzz:99?:ogQtXO%]qtҤ|qgWTI6"MTd1T2.!'}+FjVE{_ f S&a 9ƅ x2Aak{b߾+ tV1dbc*އx}]D ϩ]xyeWVTT9y[@/̐=}<:~B;a:`GGY?U|p PPD=4| Vv2B+ڪOmf `&}/- q*ŵf)r^vuD>qQupOVe@PR)[+PRy`%Xtlh HԸ;IZLn84 *Dyq9r\dEj!!$ ǣ7Q!Z[$kLUQ9t-AgN03&& vh(-yFT`)Tڙs}HfXH'jKOIG$c)-^s"*pKEW#pMErulzV`0 "uM0':h)Ģ+*?<\'DAt=3kXRF bHJGd R"v p%gm~C b\U# {kqm=f׼A?:.`Yq1[Κꚋ뗜'?'(5CD4?$aq}P~RD@XqR_W3 <'ʑV rw~B7gKɕk[juɕݶrp;03˞>]`L_ϧDutڿ[H1f<+ʹ}B@ۓ2W#VK2y3a&:uX_KCpzTrU2^kn2qo:^L;N?%OzXBr)%Vx HV>BW(UUI] zѷⱰېv!}. ~ӺQ]]s߬ǯްkm +9#8q\o7|ՃZy9%UfKr M4C R Rv$e$3Trd+mTL 4aϸ %2RHӣpΙ=7VTV4 f}bۊ! ƾhd<:&|`a5WlɳeE*ȩG(+ӗUCA#a#Ύ@]vo>!g@A^%/_rcsId[͛’=a;P#IEkAM^.4:G,[.;$<0Uk^Ӳ俑 |2K \WѸc&C:hWĠ.LD]2ˌ9EwHb >:,v5WIeFWaŦ`;h<Hw1"d$- (9 J̈?z?Ǵa{s;HuJñ6;Jb࠯F,wՓ:ה[a@@vNKzgM:w;1kYT T=F7*w^@fk&u'YW 9/ TbByTO~VD&9dT|=`Jm5N l;tț=|+ sqV>'g}Sy4rW\Yq?xpWSgDyE ,+eעWyp #iҍ &.g%7VI83scޡ3^z soapiʷљr=}ԒApN<"7< $ 7L"񏘿ӌJ5(\%xz843T.  Gj-9ĖXzGX5ێu@!wh,JQLцl%)]",ؖhݞ=RزՓx*E\}(&nT#⋊'&#, %;˵@7G V8;+0P]\?"crnXUomÔGt$IC%PuU-S8;|襆OspB[BVYc$U.t:"K@C'ս}>GThM]t!XLPka#fJڤ$1H3v5g7hWl0;snC=˼l׽X_!cLwN; ?掬%$՞k#MH~JO!(/MSnQpp-S{ .uxo+$N_qdݴHp`hm"LT-_h]Ntž[ǃKj0w| {I}Q@ꌤ}qkZQ(#<}㲑A KC73ŻA.:FkpfG5%KqT՚EqT'":A5 }9;C xhxE^U ;>ɁV ̲Dn)7]Wp!x,W^&lyX6Κl*l 0&> stream xlct&-vضmc'wlvǶݱm;N:w;3Ψ? s՚k^FUQH:ػ{9YXyj ,fF68 1g+ 4,Vff8 +ڔ_A3@.&Op̭l1%emE)ll Pv32[]4sgpra{w?̝ "J 1&u1@^r{W@Sg_f=m1±̬L]&@ +{8MﰙRr if@nv@+`t:elge?:[CV.V@3e+67G5>ݿω9zL ʒbt]%M̬-jhilVޞ6XW0vu23z0KQ> ,<6V ;'Gh/? ­8ZWKUA[a]E43<»W+@ 2ػܕo!5N"ONŒDབUYnm43UsXVb;u*@b5DI\[|ѧBBB +6z_(C5, r<оb5uYȒ=>=)BI)&X]e?tyVA'zę^FҵV5D~S zkczL'aӽKH9-EQR)__BuMfmKI2R7$*QpZ^dFg7p!虢IeUBU[pdALAy =FvAL1[8f#sD>3#' =ˠ&b C\WIpҳxĊPUwT#MZ5;2yOoe/g_yoc/dt3#֔H4 Έ| W0ǩtQ@dW9lM9ˀIOO 8m4@I v2z"}~Tܸfuş?*j:@*Sފzݓ[AL˥V|m-ew'7X4Ry n9љp2$GJHф;X0M)/+:Νiv[ᠧF%g3;ČF @<+3ۜh0Pt;VNWݒ)Q,cM9@ől;AǛsƇaKw˂Aϵ Ow&[ph_oj[Q@_9'2"&5";tW,7it-ڱ; }xLšṀ%;̠| AxZ(܆p\B5%ZX\ m5-ߕ^r`x? xK$ iX9qҢ5ǿ$=lk<(:ō=7^#ma+<_28NoAP)6 dnmtotf77LJ@fS[EXE4Gjc̳12<]o8<Ё}rśz }KY^qJ8>H 8I}4R($D!0zRfa ϑ=` 9e}&,Ocuj 0wi#R QUeܼ4 ^:Éכ&6>HX\_7Z"k6$j|9>ZaN'tlLk_Ib`YIil<,(o|ٜxy+.Rjch&$oapoXLz&(6wXxOD~uX|oU?Aw V1& T2=n079\jeg[X40wgh.\Ǭ1sӝxFJ/pD>Sj7Ufħ'B/*uq i!7*>?Cust|?ܲ G!,􂞅XK=ÓvcWJbȘþ,6q*/P6Z91A)̈́mvzp[C)_>N]B{Sf۹DmWMMY [׎fqa2T/&Ѭ,$ <%Gҗ9$`7K9a7B-pVxw!ci no8&TިOP!O:L=٤zs7`ecEo ^@m1[3Nb;P eW  AMO]Pٻ]rGpg@4ipTCBqԚRaҽ6wyֱi?їc=뿱=-S9s%tA5c 5( 0 CNf#Zi>UTPA{7`u/)>f ?4S?WhEÚZj@$)q@3W޿-MoۘҦXv~ ڣ:7 kz#z!3hkg?xһ7! Vfsڹ/')VWw['uA$<#KI?V\%\ Z.=璣њ"֛ExZqqlG][y<qyTMx~X'kD!4g0Uwe0U2ГGmenqt|oq3?!7wS$ T4OA Muh5mMe_9+*GFR8^*h?uN}rk|'&')Nd?fy?&g_-\%pA@)vȑUm`n?}2Yvý%݂tԆxxe}צi2nDN 4MI_nXA!ش _u{;'oK (іۃJAbմ,Q`x[LӃy:{9zu?Ӓ`3drLSqvƃܭXfeM=aD)h>9-ЏR܃#qné1#C x1QX\pne^Agy@˫Fm"aBCmK4C Zш̣y/٫=EȢ"NdR{Ue󷫣d*)p̧p"Cpފ /*ɀ:d Z*YU%ZW΂iQRh)CQaXTA5#ft:8$PƲibtćGЯzԬ˷Wby`vgnd+km1'ks{}hPێOf^+gi)ktT% >7SxiM* 5xe~"bjT(:Kѣ[sE$YT~niy"xڐ}TWt)@y0F}5?IojT0yk!n nR_c:fyȲm!p|j,cϚ"Н¼&S#-WW`W'[! &$bRiiB<TƖ00fVLdZChJ հZ˟I#Nk9Fpr3"uK0Ib9xc [OS\IKJ<0՟J?/*A-\?mɾ4IbRR-^h4Rc4jyeS=!<+ SXMZ1Ns|7.d_şl& 6Qi]JYY-PJP\ةsf ?Vٻ:a*cIح/EiԆޛ0$= `._a+s舷)QWl6f}|nJo<=jr0/E, 84ೞ櫴Ø :TʲP  ۦ6W3fXM {xC~)NO~u9"?q{7u"@G=zR)WLq쵅Zt *%&PD!$+(a³û }'fbi/r8!o ^FSHU7G)p+&eˑ%|x{hmdՇ6I˖QzƃDo%I,$[ H;w-{/},Z_;p\Ym񰨔z~+.±p触0sb3V&dw^ #eC!D|}).!YOD[UQtŸ:+̽y *$(A. |-鐟m^=i s8ƨ|\]V Dj,V =hj=c*p[4ۿj`4V^qZtmPt_Of[ Wh1 6Nk'Cp5_YwƂ3Y(@4^[Ef<4KKp_ȠoEaCvt?x+9<_*Ym_iOsvASo ~H] w| &XAhPH-M*\TAQ?uEջmigLB1Xt_Գm$Ԛ`T#_4GUg(~,xo3ƼQa2+3@ <7lSJrǑ"N!bOȲ[t ++:ܕIn<1E߰(6` "/Rl| $'_JގGx/S!n8F-EˆP0l(p"Q7|\o_ʲVk28DJeDV6oXHҿ4i!v˼-4wI{6XޕGꕞ=F.o+{0-mDPqJe.tıӵ-$MJ']!:=2* >HnoKv=覇?&,~W~9AQѾ:74}I$HYZ|)E[+Gƴ? QSN(C,~EY,Nfc_>dܺT8'IAD 7,/J7}o+>>aVGi e82- &sn>`JBGaoi`ϣ2sZlIHLv~"e`|5CFOЅnW{pl.bUwVc#UݟF{oU6瘋Ƨ<սVbU:H)?KBaEw&_u pb43e9XGa+t)wd=QN_@e ֞t!H 15Zg_0M^ ʡ'OAж'TfY֞ eWřB*紫R!W,KRQ4G(aJ#E,e^a]3bg"43 Ŗ2~k1 JvHN-yB4v)F!<+0+am( Q,FI;}},sfbT<!ઍϺpwEL+ !C[Ԙ؜ :lPHxsZ ޾l[cj&50278Bx=>cQ۷wDgyЇnB*#amXT0j[`ٜ8Yq}y(; IȾ'jBMPO#{5H 2s$!gAӕQ_͖ZUN>n4Q"ж v>~: 50Xe V0LeZd1R (f}|I.b &@}81$کlUWĘ:V"`C@*},+U4V9핈cӞj:xM ք^c3X(VM!OYt\膧S 3,oNk]PRV1nazWw }Xփ_m3,T &轿/w_dLސjj/U=7ұRJ~zH0t̩v4Zh&\\rNuyͬ^ؤe4JdIe8|YuA\،])]-$pB2O(O\*8GE69+va{ѡNpð;sR cu # :;pǪ\Xrf[IpTx @^:qŻ<)e[+ZSn3/qPBg6&AD\cn~X$逍T4R#֜vVK(7tEaqmBM\W:)<]o OeP_#vO ]TG$u.ZM":e+TM_%\+>K/әCzܠxbBl"ޮu8]S蒙DE.-z+5|޺{,) ]~&N UF5ƅ唖Qr+.|Dsқh4\A;fQ$ yFc&O5'IdzF"6k/+hjr|ȪuUu=t<4'ZUYrOgߥga;?>R2$ טtn+34VLFcV,ɤMcG5xԀ_߷1s\ SH:->D*k x0I w[޶8s|:Vrbwg$uGxSBP"V4geeƏKTV=Sfcw0:! 䛠*A񌤰?sFX 9P6ۂp[AL;31@=7/kguDqWYYY1d)I@"T+< VX.m$sY0nss@ܡaVUSM ,kaΌJ( ch^>l v|([2y 1.Ø{q0`Sl=iE}ތN<Q1iG"Im%]. *敾e6x#>9{oP G(Xg~pe;7%Jgg|4sC .Bhx:harMG%@5 y `#q{&C8jhz+e HZBY5[9p_yGLcz@*Dtp#2 \R@v>z u~jFzszH]YE Eo}p4k3Bψ08=}Ynm"O,asYa ,: kGPվg椴$ g3ONtE(?4J+(&L%^o*#1cuӴ=sjV͉V % ߄;Y[9 [ V@CU~ޫmxrDu0KS5eǺ0o $c vSYq2rX[fu;2x**Cխre(R1x>2RH1N.EK7p`?p! W{L 9O;g/v~-jl ?{&M.P0;Y;]:Ęj&PtJZ Wy)nCN&`n.ISKfCm^m2Y3"HYX1oD w27#g4ÉC[k=AW||chGo.|)8y;jzdBt[7gRT.Ɗ 0W <&xŧT<{=ۭ-O{$W (@iEU=ްi'3OSM~ 2s!5R>6cd Y>HB ;$t*TN]zmZvr)n]&/q {!rVm+ 6%1WBbL <U@7M^:\]Щ/٩NHNaI+:ͣ\Hx1%Cdpgnnec`QM>٥]t?u͵c)@IqUN~Xsq52˫.e ;n ?c2f32XЃ9jۼ%qcaOqt;h8wnfMOgّf#8UF9*2.XrX!Z=0qνs6+glI䕵zߦ  )-m)5ɨMS0KET,nirɛU<gV2[7|{S,dnP^5!U Ӟ:/pJհ]=]o2kуfi[ υoόoX&%G?\9n"Xcv 1>ZbiU}6]I괱 -k,cl\M+z#AҶj Ž_8ݏk:S \mGe ?N! ƒM7]8%ks&0CmtjtG-϶l jě+MqEȄ3N\D犣Q\QI7HӢ$%v_͔Fػ -k榔iGö' )W0cTِr8k.U20t' ӣdN qwvvq~7{D,qkͣt!Ƕ,Ѭ3:gz.W\-L{ͧ7W7E7OK izz'':%D:1 #y%AF{Mˣ$ ޸uos 6!)ݙ'6*'-)O}ʮ>Us39m&JX)R5 DL^qzÎX*&C0i2y]M؅yM:Q̒M`K0INn\R蛹1f xJB׃QlJ42[,q 5d֮N];.'M+0gU56|eqp^|*l67w=Cw+T2W}9k?`)|KU y)АHwh?RUAA=pӼ~t3\u1Eo' X+*_qDvCPT z_ ij@B"~BdPߴDZKbWR/kF ~\VF$-WD+~A5{=(@$:Ҧzʼ*̴plR~8I*i{3 u{`Zq\<|aA,I;N"*f b۵)mŖ2"̥\p']t %zO`20& e˯-Q,{˃[(hre-!9ih/G=#5ܦ-xWxl%q "Jci_ﰶFso #Ԏ v®IP' N8%Wuon :"Nh/o*)|>I78:rf4+AɜC^_dPeY;H&b)_4ﴎ"TM32Vqe.`6_Bo,RnCǾPⶻrOnHtp51 dTG$=&Lj4>6?E;Ϭ/,^D"`]`V=y!(GQ偯 3="V#`W1lIɆ OMmXђu$]sLh^(9_K`:*'uF.IHL^ցջ89VBQt|&F+Ɇ IC0nR!fmyZe:),ڻ)(Cw} h 0Gh BYmH#+[m mZ挜 Xۨ uİ%Tyi1Kl?߂|Xa^ ѪFFktkAGטrooa"0Krzx*n vzrSE7vo+|Wꔗqp18 +oy/3BK<FJS,J U%L;\nIuU?C ͷ>Ej 5`P?΀Ύej\ZtpFhaDӱ &t&lmpoK  hCywӥ_g6`=я1Jx>?Vzv`zّ]F |'F)G+=΄;x\?r7Q,)X*2% j\ ,C AK(04il#H_sě\ߜIA6H5pX5dx| 5hz;7*SWHœ ;h6s/8$rm_r ~~/t)pT711bIEilJ.F|'c$(ok1mzdP"(K,$'h-{S64' ߔ:)-'٩ [[i,xY@?7+I+ gȍQǩ$؟$ɂJ嵵KtÁ5;(r|Ѣ-4WVsHwr(s A֯jI^MݱtR\W6oetEm18'[i86wfz1?\5l⅒*eV%{a|O+ER;aXLF}ٲ(]b,4q԰^:)0}_?N;J|e'͈PD=ҷꃌ \Dg#'jb%3L;ġQ&z{ɑ.(o^Wj_[ lTtfKlM93ю:.nǸ_̇ƜX\ô s՞nd]U'$!6E XԻ}k~/o m]c:pE,J3wq;WV~VMG_iz5+H M@ [xq  Mj&&$\ 흟%F1a7Ex5l[zوZ{CX>HTT!RwP,CSe`A1ŕhE E䆼2YnS[Ȼ<3M'vwLcNDm2[?b`/ʖ}˃Awrq4^8bOs%֒,Wj=@ PpVY(~{|cnU+83˶oETYX"D1eZW'おtT-ܰp*h1kÚD^e˼nmg(|?1o"r}AܹEg>!>U IAV%cYH vYzdй\,}Vfh?-,Ulzp}CHoMp9#P@4ӥj7GA 籸0[{??^AOJ0ئˉ_drbL[dۇW) Ph?0ѤlH׹zM<&u@,Ts@ϋ_../WЉ g~%rг_~{Ԗ&8ZҖ?1M_~]2@ *fiXxSƇDkd& P|S=D'׎%ZtT&_jTf b&wu;)QTƳM!;Q Dt䒸9dm=l"1$}yQϞmEh2<؊?ҋYK?H(jk|bI[.炄8k<;[8;9Z>INB5izN! [OiC<Ju9L0RRlC$ X޴Y)f|'G-4=S?F@NOKC.N6. 6!}=5l~61\לžQV19ʪOg0,GHw_P-&%k@J]Ǩp +sρ b{y,r3Sh,Ǘ܉D [󓍚mC9-MPw$"Єs41h+%OmN؆D]{aw+%#0.1 ^eʀm͡b0w'|34F6qu0d4cY~^qڐ} :sLͼ6O7&)ݧ|>B_tbg\w0֮,BDOQ5-yBS@6^ 㰺`尜=$&R\Cr.Ɯߏ8J>VwBD1SuS i/LnJ۪SbMnKN$x{FR[ҿ`V%=wIfe!IĖMsGטOUIdMIlNFs(MӔvJBw |-?Jߢ ٱ5\H BYLkRqo&}1 &dML6̬uoGpwT?ɯ *e_)ka҂c*ė8"j&Tw r\v+:q.{Jd!i{q.p Ȭ[7`KbF {%ɯ &IПX,|;gF*1ȋ$/Xn]DRtQ~3#{#f^"Im=2 وBw7˧/ʗQEGн7)Fl ˣg->PBQ;homZ n*$lUu5›#?- _QS Kc,/Z{iHGХaH 7%0zɭY?7ttpNǖiUYt3N4jXl vLq<|7)1LE=SRu͓RN;l6']c@Cv^ܭFI"ރASyM:u&Q%+c s,jԬt$Ը u84EOS`{6p';qɪ_(0/%\I&3/o}Vpݙ+ Є:Zp6KL{'M;\:)^!\ 3?TɶS pL}Wʾ!BMq8]N0GM8Z)˪-*0^u29G/E`x!isw~1V2\c [3 Pk!I@ٗd4MZO.|)+ J|}N%dJJ|djŭ2%!Bt1zc%aɱ6}])ndeVh&;ښ01,\Q}a#[p }\oZkihGW9_bk,F 90dQ_hQ<Έ?qFP؜P76u%>4]ݞ6WBLsw&ٝ8&LGE4 AOŋgw4 o4wOxgEs~'eۆŋ%\-$_=o)8b>0' yz8&e*V]W!`S[o2Q1L~9JXڽud_T> stream xmxL]ݶ5ݥ8ŝp;wš;}Nv5X#ɦ"sQt11T%UYYTTbN@c  4l쀿6*@kJOacl94m@77nήNBT@%`ľ)i(JhR@; @d 휁ts{'Ϳ_!`trK &"MQ !Ƣ&03Ksq:k;F#F&uwČ0L ;&cgnw?Ր`4vQ4hm\]N{3@?(c[?:YU%$hr+_k}/ @3{fv6s59EA[FRF-agjo쿅JƠ?d& .N .+?DE=xL6ο/^NvC hwO@)O{Sְ~s s3F ?W{uACfwjHij&.vdZȍHGS1d? K)*-j^ 4D\Aiۚ*B]G޺d)Oqf: KUt@m'.>I`d| j,CLw !]SZ}t8׾mY`t* F$Xޡ ic:+7~1rd2~ ֔~tfꔉuQxiODp߽W!-v_O6b934wiDI6"~x&q4Q}cXEI%b| $V7kT?:S+|yj;7ɢېܙ&iׁT&p-T>|2c($CEv֦I. ؐYl5: +S W'5J3tc3ϕYSm7t1ghbŒhxVMu<\fZ(sˊ?P:P=)5]0(Y*'7~8w[qz Xu}} įY-VC*t !/0꟤x\d0$ihxPYGNa{DIn}rOs҈;0!f5L$#˥GCǿ,ժN4ui 'r?"*U1Q\fx;qIE"Ҵ putp8(djÊK)c0 }:w5g0L7Ux; s_56!DNVFXR I}4CD`З#3<}ViZuQ=켈eڨ-컓O:v/͝`;J)_$;kyFUr_^U6ˆ苈__Fwbuo%PP/p3((Z&;W ]w]% lSds}ЃixY'̚[y?I%5>'( ߐd񘮪yhsʂ&M*jZz_(cҷ 'J%{|+zvdzMRgϞdPӽ[^Z gퟢ"%lj8ƍ%%cz{]ƗA )g-MfuI7U4M_GM#Z;tm̥hHPYI;R@rv98$JqwqEz_^Mx0s1q=/(q8*M[Vw~EvAٯٷ9?ؼ~Q[[؟b95*;%7wq]_2Ut{\>M*+_|a%ŧO6f1+R{ uIq3Scf4)W }G|X BV6837ͲπLSJ(E[yޡ3f*Qv+A7'nj^M`ب: GqQHzȜ Q72TJq`ܧwt XEۛWŕV_;%W/i#F ZHܣ͜.9FߠuCUg+5󰠍+5D%VYOj-m&P43+ VRl`T_SΏ'݋%Taj}8 ׫| \& W+|S%g&,fW<~oM)k„&M{Z~94Cy*w0OD0Fh꒒5ۮsU~ot\]q7_+EBɉ[sOѾ#=^赇M}߉VGl>LV\ȡ$!QSOem0`0 3 U#@9'"V~ l?i{BvpT9c]ytBl[!^J|Ma-*͠s; >qLʪi`fquWp@ G)tVŬbB;? < = d=*㴐bQ&֝7UpbiB6}֕J RsgX f|J#Q6oO QH\s٨>#H[h! w$׶JDBiPQp}&b!z1kL~gm*O<9uJPֶ͟dlGcoJoq]R.骥bșx^7~1C,tڱz}<44DS} qbz ×x :4`+;?-#Ob+%η(aK`_0Wz9^S8KI M2dY_& x1=›8 ;~2FfUO8,S 0me*o) /_ԹG0MWM) {yrۊ1ux{^w|-Ͽʶ1qoPioљ0z%P(e$"@cy&Ae ; /gxeXô Y*!Gjy>nwःQՓ/ŏp sSTUXxم{I$WL%@y[TOͨ; Q+:l/]8|{=HZ2[P#, S34/h, %wĤEyp&l˘P$7pT+ ~w$no3{,/~V??) |Kq$;.+O ʔPY iP  h-9f⑭8(v6$eFD o>Vsn/8j-c?聯HшgVZs)v)Y^QB\#,#fS5?sԶma=g#> ,I$7B s- $S9WAhsF7CDQٗ>7Q ==O\;oNz+wyD[tӣqW4VvyC}q\(ʀy8i5+hFx@Xt4 VWLKp5'e,eBB)gIː+v!mHжKKHYy+:^v}]Fx:˔]Z(j/Y&}t͑}AB͕P~ iR.hKZ ׂٱ?aoyrkmtnA2 uSK:M|ر#ߧ [5ۦ;l,gUYTqM? )IJu&2RJzD%bC`%0l2#C:j Hj<ƥ?La}V/ߖ/&6&ă1QY1[uT* I lNKDZVH-5N 5ئ~p$X)%qoa]yiy&;k€VGĐo2^Z g-VrF@,TѶnLAL,cOىnn0ȍt통 L # `sFRS? ,B{NˇW ؃*.Tt=B&K-c2Zfm\iMb46-4&Ĵ "$j:\l?_ŚH88ZoDř|:ihgEr^UBRD現yXHI!rSA)Ng5$Dsb5<3]D760=KOB+x96#5o*ubo圛{U*@C6P*K |6O4sj2!x;MaL+ψwb/SSW)N5OroCST5Tr˸#ؚՌ%IɐM*'yfc~#Ձ?0J RȂyRp%u*ߟ'+k/v.z\ p]zo@'n S, r"|P2c6iqP_cCE4N؝K$>?cܰ/baڪk]PIE $0fLmw*;Bqj-y: y9?;?oV8q1|hE emw|2)Qa 5!tnh%uVl]h,-/{4 5:ljV]$JTBaLcTPFp=dt(>mM>CɛBpuU5қ. P/[A[8Qrӎadxݼv%̩UpYM88i]>ev(ͻ5>EE)\2jIPrIA?xIʱlCȶIYHjAz!i?x [n#!K;u1$UWTn 世1* żehiAxSw0-SNU%}?rnēK|^.QpGx5E^ ϔΝ&7 (GYz-9&(V^u;E%DClhLP!9ZZ*jв}2\_!4/1a+I!L?z=MѡU?jJ-_;+7Uvc`x`!P?P &݆ oh.L[gzRpIJ QC,N;b۴X!uʲlPsKw9Iƥ>Z$Ú{&d݉ ià&O4Hdss)W7:[>e5 oY2DaaPk)@qQ Z6jLgR#ZB_>Dg5Z,L%Pr3(}8+Z0z-F1:h-aV3s< R*GipPKd2uUp(gd9u][t=" Yrɮzu蔂}\_Tz0#]غК~2!W9 6߃#N)2IL`\Rgo˫R%y+e54ZQC*oT\o('^^T,vw-FoQi:EE#B Ie}-b#Bg¥\`tBH~YgddIԙY$p" .Yo̒\!q,xǫ'(%31'"Wpa$x \oJ:,J"t=a9ď6 ^sQ%3y 3wCeY&{g/޲@}3ey؏_ކk^\6wWl,K <|ti"QdBrp並n;2*KWzI0L[5xWj }W:7$˵˴ais?kЯCĐ#ѸjT9k05$HOGґ~7?ccɱ)~/,z46egLOFĖ,~Z<6' PYrғt7gTZ6Cr|Ne0_AO>ԭP9U+ρxyK_g x9dGpe,0 x\Ժ:v$%,lw9$L>R;) fV6G${K4iiy!|:1 )0t{ lⵝgtمx_&Dgs![j1q{9=2:A+*lF?>l厚M5 7)qW5Zr`ȉCxlnw85+>Z$1譏c $b0Q s9*eufj"9,{4X!?{fVu5)*)="kT>/p&+ `M @?6oOMB1Nr'xGRJ]=:͗ B:"`*iC29ؙePHEt M`vnCx1mū\g}o$\Šٿl:;vƕo 'amS(ePK|a#2I`&';#~7E*jiE+ҶrKp-ȀT{r?$ x v&Sqm@kV{"_k_dNJ'FQy>󋬹l+ѤEHCB܅nxq.BIz8X_OT?5^lqmG4g(j|W^/Aȗyi ^ʜM)^& y\S Ȇg2V\1 xu&W~)7K= ]gmk?~3O۾UbH @M+uS#Uk;7gBe|A{8vj|-Sn>&B:/ +KzuW\ ߧipnQտcϘp&'A9wanqxUΥR>S^ gEt2{dMRRҐ++Q=8ucIyí TN).hjz,Bsq~wΡ/4[yAc8h=CHw ov{SZfm͸BEaZf)KG۞ɬؐB)hDN:&<Ϯ.J.\ s @BHɟudћC7r"׮PlHu_u1+x!\g(oL}aݝFQ7q aѨ@~Ne2kmgN%NK(~ P+;>{ϝlEP<@4]/_HAW{g 4[Bod#ryPgh B[3bsDQ¦çQ 1@Id 7 >Y[*Cz?RFlHŭP~uϑ5=CytB|?LS3n @b\؉gQe|m}&#߳Q=TS &yeUڔ|~4?qfmEIe@L?jR}ǻ">qY*L=r{] '}WgA,UwуF1ύTl\Kzc;{ǘeo:l_<4E03JϠ>bmg>BbӍ%f)Jn<aΗwp^pX>gj{8;Nŧd \Wg. l2Ynўk.zyDr;䧾zԽ%Բ#;p'"5"Y65iW &ghNONݣ{lMoZ)R N+6{ٛyw:Py@< XV"ڒF{QRq(L4-t?꣔~ҊG9L5o&Q1| ١>p%'v0"'J[3nY[ߑT':ON!?j)gJ|.*7f&rka@bdurܯc twzc(XUIoF,Rv0b>R-k뙾eDPGPA|f1vcRu+ܔ(̈dDo4&?.5F&)G('oK u'< <4^%Q*HD_:4@7.ЯYoܭ/I_K|DKS}wy5B4?J=JkP#7q%37KfwB{uC"0Zgʲ`A*9hYN5ș|2Q3X>GÄk3/8)Ӣ.s r=2\0H,UV=}]WҒ¤Pqm!lw4S`KPOϗ8.L]Sށ R{8MLյf'l]97k(kf^CDvaHU%מx3=49VJڸ~`+#yKL@uwrnkr8l8r-󷎡P#  ~>?ɃEStD>l͢= KXYq%LAVoe |k=[+;.m[4\Pz x*獽u+>)ʨ6ITl^@½x/q?.3-n UӪF_Kyywiw_o >dFDl A߼N* 9x͙{Nx뒵&("!IWMC +j&}H %9 :#34:Fo׭q3z4y LOW<+ƣ BP8]_qN$=_:&zǢہ{}-X؂!s!\ىf൮R  5oqWRp/.r&O|5Mͮor' zbf1  ƝZHZx*ܞBչgf^A^=7U^r%Co]Yzͷv mӘ'Eior7ސ^=ҢiaƩUο/5n(#(vyg/#jB:VfbM+.9Q;^zNQ{ori+#BSMeva݊ ՐzHA鳔%H9*MR[&F6mc\u+LwcMťDoe "*_'&x̽N52K?<ݗ`3ݳT S<*EQ,nnJ%5Tz0aFIMݧc@K{W> stream xmwePݲ5 n,@pwa2$@.y=֭ӽzukRA vfv6%v^> '-beo'e  @fuƎF wpM`c3+[+'= *"I@,As+0 #, UȂ@N` he s1'S{;3irfG+ W-@I(. HK%vfEvglc@7o ;;0YX١7y;s{Ͽa3 r@C/ V6%m\ '?,c[+? y_,:oYdjk1EZߋ~Q3{;wdT&,mgjofegP?eUcog+Cl,Z}%!a`dsr}\S''EAhKɍ%yF c8V}fg$@l7  *8h4eKo0a2 =V/1m,_Uf+[ BCˉy ٦qc~0d-\OVKDK̬d,*WCܝBlh>`LʊCܫ^l0sT|5WQZNJMk@<;?řw <:#CڪyN.9)iNG.4(SX9*iLVGD(!_I.` )u|dpG`U8o"X7ɰ|'}KԝxCG2o벍_CV˗F2PhME)?|JS:ٿ=?Ǧsժmy{.,K\eoli?wEZqG%r˪ —cll^i$f"i>x^eo62}hi+Grw6(Hɻ`)IǍR:y"KDI;nZƂf: oR\Uzr4|oQˇ3DI:5 ]2zpe6Rs]J@^yC ( 9(jo(CP^XRKw*?XFbNI Gka,7fN\kŹ*s{,'3bDQpЙ&` ')* Y#Psm7vN,m6_γYomt 7XptW/' O圢iUSǁǬtv rNcfH+E[lUsSE_hYc8DإByCh{cZcG$Fc I@^o049f2IE(BbUjq[\-v,#QЭ,ǣ%hLN&pտFOŀTʖGDW/EJ%uUD.M"|ߊM9m9#[ +R_3$;OqoSG\AjOcaxgT:/e]f;A>y~7o#B}_j2^,~5-™>QgࡼPm|Y}|Ep# ՓV7,[+Eo>u{Li=3'L0OCpwTv:R%2?dDsIrN (Unk;3PieAFfs`5y~Dk um0܁|^Љ{@hTVtEW>A Ktub*hy8<f!j7KtGyvnn'q*c{FJ.F7͐J})$Z= s#~̛@wdpVMD"݃5`f`ӝk5MXl:y0\aVpr)ٜ>J9]S!wqYMmuO-i 0.Bp[bLP煡VwGq|lj(sdYXc^BQBu/:;>CZzP*JN`#@bZ0FωQ>M[ҏn\O2{B *)%ݯk@J5JcQS4]߸/Ϣ2 X A,faq`P."(\YYw"毄/ /8o_PݸjYH=B<"!Hb:N mc~fiN%"~Y m#yOd_Wslbl|@s\&z\ȵ~_;rr-&\6&An͕=sӖOYA=>"Zavrv%ވ3/Z)֍` *Uo0p1or!>*fZM@|ClBa)&ܒ5F ޭy`hڨ {TN0fAUv!I8{\c]5\h,h( r/+mwo\CG |0r9`LWlOA>RGش <;VU]+. V3鳲 l}mO>Q^nz RGi;[/|f5Ƅ40W5qN^7m\ c{jz"OYk 7D/0zy}Yպ0Hɓ#L+YS0W=,8h׉B |P"RNPX܉YMO~+(K+݉QI:]20oo 8D="ι#Ս6EuiH>(7yu"uSQisE3ƍ|`dgOd/;~r~d\ 6dnԝK(fZŠJKHr!džZ/@:av4,XlbbG0hFamRdӥ)l6;l/d 9aE9:./d|rT{JJ_>N$7|z`o)G49#dI"KI&X'->Uy]̜+6~ cF_?ƷI ys MHzz~h_)ҹs3V!:.Nn}nךu؞gݍhڕνè|OL7ܰA韶p]$ʸF&{?m*{w{Ch +rTDAM[ J &R͢N,zQ<1$0B&#<!j~D'Ѷ)S\b%NXQx8;Y_!e\rGdY2~ёL%wjrhR9Zq#Dhc[ѡ萘pu~"q&y/-6_-Q_E{fpX.?d]3rAw .Lgtfs~_b)!Αz~`C2TWk5̜lBƳkaeO˼4?λ]ZKb\֏åAzOqAtު"߼ oCcJEԢMo!e lt7,WUSq»)e2j]\:T_k=?.rƲ?m| j冖mdP,o6&vNgڷ o2(;_Z p1?2`3mkɥFʇ[d{'A 6[˽F83R'F9IYduﱆ֢/3t0^IU:uԲ߮LJߦKD6GKe5'%Ci[Fk[o4#TmLa#Zsڔ^.Qp![ML+<;ߒi;ü5@-OkM [FU\sɃu0B@!M^Wqcf۳.0R)" ~@sYG~(-lcp;-fO9! Pr q@Z]C9*/nln@鑼]CQEXL`ࠦD*q5d7[FxM( [|`/0/`z '?>S SPkȇ_,DlqC0~&T:X6ːAs2fwiS ;~TGe-0 t)ퟥaEĹIC{[ OS?r;l~A%Vh)-|O2R"•?>Uַ:t$Z5v4E7k~j/$z~хi^fWwxIYLdm6d#6$8VTltV4! 0W[l)ḯ{\աrY+{M B:NnkkP =I`z7H@L}$ɜ<;:6ZEq9hWB%NKt|ּ+! n&»p-yġ!n^qʭDj5{)YؠA(uv*ߋbeJ7 h0rx,*PX8(fP<՘fM}e*߾c::Kec])%Fq Y1ŏm^" $ViLLe~ b/3)4$^r@k<\-W^&p[ҌֆfJ&cxUtU|e%0#Pe{guΰp4zgU[>!o{t?9{[B53nUaqyC"e C"~+E xݨwqWR@0yjDM6JF'~ -G@sd;~r\QƦOrXCNnd5 vθtN4Ƥ1ػ]OjFkvք0є٦? `tI)DC]S{jzb ]QsMygW9>jҿ7Dfij+Z5Q$|;ʐ_\HLK#-f^io4^b r:vTᅪZ; ăGI ~ޕX !^~ _Mlj![x11-} _yU^!VÇ؍{E,{d) -|N Xɟnndؒp@D) = x}XoaxH]A='r1E8N\^ןF {<PPh!1v(Tⵚw֒#αߙ!eY}`[<39 pd_?q.2W`URXԒ n h3nwR۽%uZuQsb9Dk!?"yNk|)f- rm /J5Y23 zϰBaxPAO(}Gab/Z~*S0f'F_ 8Xo"@QϏ~Qi^xhܡ[ vۼ j4̚F=tבWm~0;\}]eNUyyXݭ"N;4"M|~rqd>s!Szm"ro^Cxvob ng+D6RJiǍ3{H6+.\r=_MkAK#Eʫ]ĺsd6W v+OQ?|R{O@ǧu߈9P{[fS@l/ JKb0K- }DoV>FS$|s(ۀ {خʂH F’a }l\G\ 'g\Kz-]Yp)Uez. endstream endobj 85 0 obj << /Length1 737 /Length2 28231 /Length3 0 /Length 28741 /Filter /FlateDecode >> stream xl&ݲ6ڶ~۶m۶m6m۶gڶm~{s;FET$We>U+=#7@E\EHCF&lfj`/jj 039̌L0dG/g+ KW տu[#S+;+g%]ōٍ'33 %%/WHٛ9݌mLV&f.fTsgտbrwfήf`SWW0MۻpcmfhGei=C01LL\fV0 M `H053V @)`j s05s {gITl]lBP-?b+q+O3SE+wuv3X?u33rfOMmg2Jki+_C[-fo`jeoPq[#g[hdn03?^HvavcbgбscbdppW&nf.?/2343Y[v0 h +6TYf^A458¹W)ß 2۽ܑo%6J0;7(Ro絔¿n]1RLD&Z"_:ir>d XÊApՅG{ *= ,o8}ZY˰kc׽5]2lˢ +k-9I|llѭpm`+=MCݧy"^@9|[nȜOj^脭'>֪ni ] @i my1b`vACq=u%WY AI߫(VdzI1)gE.|;dʙE`A'p"p,@  I 7f\ݭ.li"V,Y->BlB)+M`d ~tȒ 4QgUc5|_^U#)`urk@e #SNve4 gX2-_8]XG˹w[v:U$2JQK:\ћu*Cx#V4O]A'uUmzrli)Nl!F"٪ 4RR2u`sWθNm#yd",&$#jH趚i8\eB.\.n#ĔN&ћB?kg}8A.4D30Er.Sj^ws)%~\E-!-/YŭT_'MƵPN2~i@lbV8ɴu9>շQ}+hq'$ UvWSh~;Vna $Y_!'S`H xls0ˍr(XLcXU2 ҋdǂftw9Ch)^jpH_Tؘ T`> ˭'Nvܭm ^o38bB?,Q$Z۔hȉ( wih霪2N@2=`;i?5,ةh\wzVg -M ob*uC[9|ndݶGb1z)v5pǾe}pPmYrôZD`V΀C>1ޏɼ$pKcyd/U`VCO4lTbQ(ә" P Pl$՗*m)1/2(I=|ɦ|wŖ.v,@D=Gb׻19(3JD r+ra,JE#| 7h=|{c$g>:% J//wUO;}7܊ hGX%@9q!gRvKz9`ysR:>W$`J:w3?<e!!GFhQgeKI# +R gK$$a!d. 7d3=}ęr]?CMCI)OlYx#a veW4g@sFB񪶦{|B-),[_W޼]s¯PP#`ٹϷ h+Dx7L.ĉCTEf>ZX*z]o L ԰%!{9 ~rXkE>/(qb‘B =㒍X${ "OU|ͤ>CT\:XQBn)Bn3ORo@9à^[ lqF ծYUwhpx;d|!MY-Ab ~b~dRX̜ɈCnw~`n&3Uh"$BQL2ڨckXaS%wۋ, ^ˣ$cUEv {i՛.3W<67?mBUOgymGe'clG1kњQ\ld"*"Á۷=^1JhxK U#q<6R/M)ӱt4>R4Gho'XT4Kۛz.Xs?g렲Q"aEh& }xzP;5a rG\1&f M~N׸sg>寂]]zà1gpR˱"b'N0Qa `u8`01GɮW)2&+ ;ug+|m ΐF,| ,d芾ir09.1|]iA_uR7cfDU[=ս[1Ms%o pH -0RDjv e&G2"g*@ໞݴwcPъ;틔rz 1rf+7o"HX9~=x&&w>F`|l[eQxe>R븂[N!;80% Ҍ \3LͰC'3|:acu)%@6ƇkvƲ'{'C]3&h[uC?w0AT=/0es.0fLc׍x4g$6r';+G- _рQa;y$2QXQ;QqpJ)8`3٤֔ [?LB']D)i1>lM zJN;V]nw쀬j}Vj̽pUǕ.P ‹[4<7CKQ$EN T7:brxol a IC/Өw>d/yrEawMzBKKyC,Rϥm"&Mbun7Enٴ?$餫q[BLszo B34m D"-\84ZFmb,5w^4*QN`M䤞RGϩ)bp:cZWJ&5 5Rc園z{ x ]( xmz0_t/|)eXwnf:]Eg̪+{ 7:_?(%(%28{CY? 9]0jI (]j4f߫%;X$Ʊ|" ܨ=4S`"USqⷙs5W15,Պ$ tv~V=ks 2bk'( @`luwA{+Bkp\QJcwXVS[#)$(rz , }JdbRɒ?˕zOu6DV+5zgrdr֤4|rLw|~4*wj;@4E#,SӳW@l &@- @"dAOwtb/P'' {a<- ]le_\Y%rx1bBPXR<C$@3^2iKY=qr4=^DѥM}G[lξ&EsMv쳑V UcJmQǙwU~/ ;ȒXCsmq2 b-3ξ< +L2nCXĚe'0ĞfIʾb$پt+= ƻ7]Vm N<>-~:͎x[ ̆S#5ﱿWR';- Qrکd<" iqNaDW$:7_T)qS/ yoE@Xc(4`4 }AC֧[acȇ 3+oN(%.YH3ϮѬ_"rW1K*qrrQB?hLZL)E&4~1&?n]{ȁgKԼuuHN" rAZ(Z!4yq*TR Áڛe2=pYWw+T4]aKWAsJChm>ͨ) `@J$4|>c<[SQW^TN *^d* ˼d=*R򬄤®b@/yؚCPįbv0ܼ5/V߀+EU+j(/\?\8bϾ\ hG \ IޛVhZo#?{bz Q~# p(OEP2OxWC) aXMS߽0Sލj+6B[MwCl;m ]J >;j)w%=`;JŶ)BڎΝFzsVHF >Kl wZñ n9%6A?̀|~&h*gq|OKޮJ-44m:Tyg[))wL93&$)T:VGAziVo.ZhD\, X]c-Q 6ȒEb;wN(E06tsrPqzSFmlᨠa$nkPyr,|cs||GlcJD_/85cƋ@Kr!sP)j)l{ȵD 'B:N mys j-E(¶?GPNp΃@;ߌFXK ^]up6\;Q_9p/T71,DHvm)+ 'TRg|=E}ax@'FZ%qhB&3GOL2r-~,eFT6ʂ!l$faYac61a(*ea2-8#U&hy]\Iq~C$;D#( xbLw(8,yi^<[' $٣hЇQ \V)43.1)(\=SB!3P0@SOxEPKOյ |[ >ccϠv7rO#S$!+Z0;SwBSaE75gmhph&7%Igʼ!Ng_Y^fy`wmm/Xg*A9lo[ =љ~FJ vM6N.bd! Z ,-6o Wė=q;JrIWҶΰCVp\?=4؏=~<98i̿4U 50Ȅb]L_#p$ZkQa<%~/Mm[5DFGҿj߇zlƉD^5uk B!#]l MuК!a( ?3} ,D ,IYI~p~[Ϙ>\9 oy"O DHB>9=eγxQ > ,£57MۡR}'cL*GmÔLO:nHɔmbWtS%{(Ljŕ' J`*NAHrQ]qY . !TTHp'҂2_l2j[ü䣩3<|PaǮ[U㡑΃D ! u+P*u׆5 Yuu֢}z|$^!wC:lϰ%˹ TAB1`ƃ%!2ڲdpLjwtk u׏\bhF-~O'+.VɦM"jW^JzJѵ+ ~N;p b1-3a5 I'/wfZEl||x9lq[lt>E;'q : 9W=Jli\F둤j\ Љ_/18wy8C+Sc$.8L*= m2<'+)ߧ 䳚Æu~ϑ@_LwPLcsPqdH0-I9nS5]F.&㫋C)׻Ak,\Uba8TkK0o9<&Hs PtM3f na kbWQË3+j{~국5ې .ԒRϭ஝c\/6N*Uu4)k jψ >hp!'ˈ;2dR _*!yZtPp>C~Rw5 !X#.<+Qk\_YJV>/_CQW9&um/vNlQ '$Nj^Fk%<^6d6ed"cPVȃ D1uWN*Kɰ|Xxaqb JxXKjj`j2I Tfܘ|!'|c*?`~kShɴ v[NiT3KgTQRwPډ)Z^vU*JnzHuj4 ALz4UwWWb . g E5򴕇E_JA>Qlmol#[/zipΕAT0k2Ѧרff.D.ǘnj3??5ZsH'a9|Yb~M+Â⟇]NQ߾_ qkH!e_/6a 6/Z:mӧ h9 ( rSZKЏƯX=!YrQKc٠mEn U [+2MLj}Oԉ1!/z 3R@a-襏52PCo0A QuaD')#7צlՑ xs*\3<e@҇ӖT;zP(" Ħr0~5\s'FPb:דy6@pZ4h IK6ؙܝڕXswR1,WL&.\tjUxFj|9y/o}zf9| )5xx8hiTw0mm!|iKvWJ2O|ֵk(Kno5No%g 眚98ZE`~ƯrwWppAe+_bl>FihŘ)#l+.M{)\CS#X3ftY˗NeQ:( S ӷ$JkXB <)Wd%~Kwx2g:4L?we@._M$tlX:6 s:͗՟zy#,z<~'̅D^,[,tHALvv/ԟO" #Wfƃ=X1em􇱮XwҗtИYk=Q=TƏXr1JF'l@z9&o (>}fafR?,~;Cz~1R| kw h@Qk&s\%Ȗ>H?&2>7Xn8d+j˳nQ3 67m~N)Q@w ~/'|;R)p ]DkxxkYd L.M>#ۮ;̅FI6gY88-yCVw5 CyT -3J-9'$.> t$y-~I]?y1 1'0Vcyde&5+xhI6!},7?x(n9|:!e(^K"\iIA*8351$*u 4ƨ p<$%NDDbBd.#J_|&~_oWO.JLupX\%<΂ͺ >}S"8ŞSsgIlt-#r,ɕBmTI\?=y-+u 0 "$zQgz\IsxV'fxz^d()6Al{cm ':+~np|; wR;߀&{oiUIQ`@j@GG},(٢uWhJNM 7 s58dT*ƜF%/&xcIrD<% vnrjy:O+Q;G9T%Hmk0gZo$YM)= 94̑;6"]n$F㮐vӨZޓ!e!-fP-;宨,څggggw _gGX _X]+!~LK2+7wjs}<?v5NefȀ|#2kF9Tv#AƿQg1j }VÐ$Sm,!3nĄ/}0ZD4([hד8p7o5GrZʞ rgG#' +>~+,tmi&^m}kPk/LDۘȀ̗^\{u,&z`{Ƕn"ԃ^gIT|&J3G]JChUVf euu&S9F3JAdte۠MJNxqM7bCĮ4.}qE(Ct<^: J .QFTwAZw٨y@rqGdɖȡ0?mnYAA=BUB-n^_ʧ0ZBw0[qΗ؇\laDbԹ>Ŋ]u>qm Vk> -TQo ^SN17N-<3.pqBTy#?Gr˚ P%gD3njDމ>ns--ZF56H־{/r: @=^ 1S Bύ 6-vz\Ws,`6Fa l{@ߟ`؝%icYk0`uWݘ\ŎWYY+\p+YI.Mjsr۲C}D/ůF 7gۋosލmf`%7>u&0K#Y6|'Pl8 )ze#_m=?=PE5k.È ̳vTXh2 Od+8g] 7湈ia]Mh?"8\]"YwmP11}"V7^_2:\rAcQoAHw+v;idy?keX GtQ/xb YmeX [?%%7cSawD6XG#lǚU%'yddX^Ϊ7_KJ"2\;CvOqT($G`++ܛf`trbP zPVu3Tyw8Ư(CեDMqׯNn_5'|ƪ)R;^PPv=h)y {O!+)qɁF Ǐ:rwN&uyZC4%PڼL1ΘgY_&5Zz ,g_R-#y)@X'/)4>AA,=@ !%6sTsy,Ru1t W9l bSsBo\|pGX!ʏk0:M7ˋ?NV/'JH0R{[i^qBp`Kp_4!m~Lq zkR19Rifr}$ =N*Jo$EɈrD (]ƿJJO8iު jsS,".: |D4EWk4F=bqB4 `PSߍւ /$yqaeb@QtPkN ZP֢5CRCs/@W%\3a]ɕDȳG|wOL[f:+,7suʿfXq} X=.꿏Qt]j% Ztx#lT<~9uX6V_m9$6"p4d(6![RO{aV+ZnG;zՙx@e-EUۓw7YEP L-K$U(IRպ93AON{Jt^  Έi1oIbc< Tc}Tj\]]ÂDqJa)ƫR P՞h" #NY4mNWSP*r}Lrԅh2dFG3|SqYL_ӺX}󈋬֑i :K\1Ʃ}aß-% qۍ>(Y$44s]7ͬLE3[if'saUs@8AH T˫]C7QƼ ڞx d\>&:1.|8."!xH#>SV/P$!YMK-gFZT8B~{OanpE~}&ujHXuTg&RU4+朝7?0\ sԓFgʕA3{ %^ºj"v:!p~֊-qnCCS]ˉ鬮؊/+y7%&&<2}➘nkOn047k+Atk2|c.fW]AĒ}%ݪ7\MYm0Fvr9B*N iqElnL +.Pr$%%՟n?0.{_=\>|Ls C6T_~3 B=;~Tb,:sT~,ͪ/É25Yw-pƔYac'uXf542CAٹMna%zLEA lZ VPlbӾ9iyʼnޞ`"Op*`+m1>"UY5Tm'NAnΪt? HNyV ) fAc\U^ .T3 o mĖ.[CuR17mP<^ZX*yt,&25@m50l}qOVʵXJmo :s8K+Qe_k2X[+= wπzT|Kffjrp_$Zc,(.hfIԗ>Vk ­F+(N:O| MZgkЎcx 礩TR J,<"15@}/J]Z_hLzJ=LsP,uhq/l*>WP6lL fyteX>;!N+>*ݎfqHZG?.§& lL~2(e&[ tzq~sqV`) _,7Kbobsc5-9)6JGgӞ~MՌ,:Sd{mҗ_4 ybudxzb.[fAhWox bs=evK9} 5g0]v(Dc۶m۶m۶m۶mɋmӳ: y.|XyWju كqkPI\tA_GMו6HVN-n#@i8" "v>nf?!]!a#^Ր #lIWk.Av̦<ǻ/7'ZVH!O ޯGi|iNK ;n`|~[yN=Uy%WS ۂrD֓N>^B ҈Q#`ſ Z|v!t5O駟[TߴxPplFBrVn6а Bk_zxͽKV1I]gzWN\~0s?@SUߪ ՃW U0%bY/aUZ]nfTXg w|> -)9RZ]s}~TوR78P#؁_Z"LɄ"Fۈ*x6S(e^/`a7Jȫ*)L s" $7iOa7M*>EHd?)QzQjS.bhU H6F_^e4`~z`r93rŪ링oW'5u~tulyxȭ٧Q(lsH`?~RaIU$g@G\t3v:$JXOar,3V0>q{`pw$ǫ:u(cGtIҴ (*rD6Q#Ӗ(TIA)mr2}sI=-5䩤,v|K1@Yd3hEWG" u=@-bq˨~sǪ09]@:v:me׺Lj2zcB \W@Dݨh(kЄd=g}skA^lcDJ}Cf VJ-ףjRTBxˤS~lN pbNE\ "LH[XPha01)s/ eN< D>|xm3 Hx`"6vgAP+DR| O^x*% =rp#[^Q5KhşhT|WaS>v@^ A|\Ap '-с T1:UK0 9%ẀـÑ*(jm>!{ar<[h;~_r@'fUozXp`Ȕ=QM26;ˤ=tE)~sw7}>;DAgzȀ07o&t$"Y&z S贯>.L(J|8ql"%O\< Q 9HQJnA@zCx rh+=9{7g*!zTuٚ.d 1XpIC -XhuGPRкxY6z;4PrߌRn;amq9ME:!=ߘ6l#G'hcSll_L(4ҁN+ROIGFQA[!4ڇT.ꎾڞCƇ=G-\+9#8Z_jBޡ#8<<&y5w89Iy.5G|,{uǖ 1J4Eb- cY>p ;Ol@m@Z8k H>lN,'|7y(\ӄwQ4%w:ĝېy u\ju|4i[bvDY|=[4plFN-PܿZ^Վ _HcMIy޸. ~wζ6vst0u4Y:]1!sTr-k1I Gj$u&m-wkrѺ}pAsVI GI uC9 ڋ|%<`s J:cbԾw9⼡1 0%=7@O̳N4ofgbP)8W[ITVhw\8-رX+HO < mM*q4PXeTǵwB|.{UUd`Ltѻ5 pAT'- 2.t01}BL%N,t{;D,sgwX"L[Pč"̩fzf n[)4ޖ C]s%o@*kX 7γDF4Xŭ)ئJG+~iZF6^1gTj1x߁Fa. tl&fADGy[7!Qpx )&?/ ⯺6isQ\09bcXse|Rp .aj5[2 ;==-w2(Ŷ[ 殞kƶ {<0 "MLKb"4fU;OFۅ_hԦz7\1Dc{_,)J񚂋`\`!?OnπRLd!d{t3?;s+}tyfqUOu6^f ׇmɷA\,Y.1#ëÛg]7rq2fň,ǯ跳B (5ooTK0W'ɇpXfd࡫4x1 Al*E? 'wONЇl`{ow?ܨcxvRhaT3l#=,iu3[:o(,ã6NcQI 1'T3!iQ 5 ,fPq;9.,84\Yiv`h)i  mWw;:e_3_Hjvy@6+DF1{6?*l٭Z!LO({oϛYbZ&:|~aڀ$TvΕed(,k_+XE7x>ce<gʎ2)g7SЂʉrFUx읭,R07I"ι-޹[4+H-/-1ݴaT| 11׵}/M K=i*Tl]tE~}&}q8c=̻yj[4ˈJ*8/, lHa'7 x,KaZKgYPA>["&x4#ht\R'R]}"}*@ibqҍjYB(?M0y:|O1?=;Pxw}}o8I軖("I~.6^ΗÊ fhnv[epLJHjhH$[Q4إѺmyw.?'L@kߗR%Z`QG&oM5/8A=FуxߕLP@pWJL( ;&V)P&?j<۪:cy3ןC.%O4Mk(VӀJ\sW>y0b3& ƛ'-s"%n6T x ðb(Ō&aC6^p&ZJ72FLF+d1ݴK`^o|CC:hS,^Nɾ'Z8h~NJT|^v] }@dp!yTNM|cܚfNYYf_:I2.9l#8RbnN/p?[j'9+=YjpV`)L4F!&Tf4 SJg("#.͉nNnK= 88wS?͹Z7C<"4>14vм<'3mrNAU&[u;.,(dLR|bK` 'f3SH5|rJ@*)((Ip nlJ>buvg8Bķ7$֛3Pp&0se_ gj'#d bZߓg2:kv$Ȫ a5X jp%tL'LT2HrPbY<+1N™ U2SrH>y^G՘ar=A esN>dY>pWAPOYlclHR]!D1n"H qYGr-7p<[Fqܠ̒ګ\VV Fշ*ӥ|ccJ?{Br0P|n!k?K?xc?3|ݍO7be0ZC6V؄n_ۿWǐ^.&]As[>.ʯi޻9r HI 5ٻ \<(W:ʳӾxXA"(4ʰYCYLC40|Px_[5hA&1z8d4 ?-Nk?%770**K$)E;yfc(MPaHS*ɬuRW IL.\ki{wX_GL{l.HSJ(Eت ;ԸyMX6Jv^@"4!)KǪsDV,C{`00 n\u |w[3M( w,ɶ6|4f`}OrЗ Y1I TgثpE* T`6jNBq;@f?YxeA8]1&J^,9fXOn`?Vo]p녤,eKvڗڛ3r6\5+ ."sv8#aLgq'W݊_{$$LU'G!%#cq] 4P[t! 3h zūp:r6Kss J}  \Y CU8K^wO㽺됹U~[mlx9M(ibD5Yt7Q svMh`".AƛBy ΄tZ#&qKMQhI"l`?ĩd=#yJBwHCF %'m+s}j#zšikV˜}{3#Xn5s~uUf No @Z.ݚGECQíȵ8ŌKnY?A9>Z6(++}ǹ!E_a*e, tQ0BA[I꫟ە;!WRJw}-#f :2CnG?lJMlSVzf+\2 _⾽s[\$#,#7=)KYG`IYø$yt _@7 'L4P;Z*s&8~yB#\@$k@ 5]Ϸ_)#D2>e/Lo &t#v&odE/H;,G+\/.`~O%15S۲l=Z:}v.nMPNH)@sD]k ")cߝ(3l3_n=e >& xP gH"_ZHLx8Sdf,o'u@'?jX,@Nj9|G45~\"A#M(nヲz^C'BP",A W>dzs_?cQԈ6{q&h=0R =4!S#ѩxk fZ%#44MTނ_+Wk+- /YS4_|uiQ7Fu%AǟKQ/}$2!rjX Q{2hx)wj|¼ӻ8)95KR4eS<Ħ!xPH1~}FN*`s4'IP}̦+=94ΤW􊂵Vf WjpJ|}!Oɛ|durg]>Dpj-G3vUC/É'/ dnǕuh Թ`aGٞ(jg5fu`@I"#C#?-2ePf M#D&U4%[qeߣߧ00PBa>y ]g8bXt"e骠v#ŋ0e[c]&Ax1U^ Ms..ziP4>F{'{1el7.5#|l*#ܽ'^6?h0A2+0@I &`3*@_O­!{LdhY1jB _zF߸R<8w/| "ӂvCJ #7xۼk102~AnU,} M\i 7 8rХnn(F-+5b{[dr$W*wdy{IZF̹W}]* Ž1c! %@3{n䛙[Gn<~#bP~alf}M9Ŷ\KhNq#.13&<,xZ0lH)B;=s 8 Qe2N'aw*i˩(!vC%:Yϑ(|˯a7 fb"A}R]N$s8δȌK:(CE.H`]£ ( c!o9&Xfx6l&u{?D7j >b9|E9T}"ҵc-K7xNl dr{^uDmH|R-rTX cHԂ%vo]PրA:k-אU%W ꌮ/TDɮ7AΠ$fd{֠orXNj^2K 2tY I7옛M:%&= N#Dp6/m GŸl[7j2۔;Ea-Dmwv5@J-*>cer .¨/7MJm=ڢil{UWXmQ(>5?ΉQCY QpFGw5[U a2o*asbr+Ko,q;ʗ]U 0@Q.}$pLDIT9q!e%LRT`B&Cd;UkY$nukX=pgg%s+ + x/7ѻUђ{%ILl(IC980*=Fr@;_fXyPYhlpo f 6s~]WޜtڋSAe:S="G7kFhܴԪ c(o7}3B[[S*$0ѷg+[v*ԗ㨎nF^_U5I})lЧCsLGXN P sFjl$znsBE.[!?݁RكKR-x}mJ3_ʿW c=V_\"TX?Yl 8YWM a7,s!'AdkDqm6>0Ex{&M( {۩T܁jn^}6;a+4#(.ks4NipdGQ2r7W4"w~d1mi8/>nᴍ삺IozĖ•k" biW- 6 q{QĜ+w ݤΈ{+Is% a[Xذrf5/(䳜uAE{'u8^0vQsɯkȚ h(w 8ox!f[.!Aڛ/qQ qS'R7f< 7I.9W^$+(#A)< 2WfLw~: W[4'>&g0PPݥI!7.dDcR bتL'_9|g({Q:xL}3J tY+1V  c MEo+>q_TFkD=@rnvٓUNxb^zId! bkᕻBurvԹ&xZ ژ+ԍ|rg,|FgnHdtSHZez+n󓇳RfLX`9Ǿ>,6Nr"(bA4ܹf6LJ'}/TUm&xܕP^nٴ !۔^5`P`DhD>/Rڹ-̹To{xBzHq!/䮟cg(1&-s`6WqOW+|c8O'+JަJ8hh#:^ϙkBU\I bDvи=!ٛ)U͈7?ʔrPc=P_`FuŀPR4ǹ<bGvP pPMLl SM5!D ?DI;fVH I JwG8af<+1&xG8hȶS-3jM!$k[*nuB?˩V,Ue*.z.Y?[c^fy/٘154ZV}~v5lʻIĢ1.M PH_@ e1E}kd}ri% 6o;r`2Cbz9[%]WӨr9tU_Yͻ&/fδ9kh&$!$g+f= y?Ub˘AP{zЀLK @j&/6~"L%Zqצ 2(b WR>D 6-7CuP\xrV_AQڮ endstream endobj 87 0 obj << /Length1 725 /Length2 32756 /Length3 0 /Length 33284 /Filter /FlateDecode >> stream xl{cpͶmlyc۶mY۶۶m۶:U?c52"q{;UO3&:&zFn*###LNŌaf P1s01`"NV.J6FVVNu{{7+K++??I*ffK3@DAQKJ^@)!03s2(XdLͨN({;Sar7;73';TUb" "#;S?v.D:ZH6F#?^'H0LLS+ ÿx3l_?C*?Ѯ66FfJ{[W3'_ܻ;Yco7FHC?1d,nafh.Nf1kgoL\mn'쪩]R4bv&Vv4r2ÿ݊FVboG.gdaW0=9t,&V' ߤS7 ڲ OujsHXl8촡2Tՠν*N;1}QdQ2k1IOֻR[]5:MҬepHh^. eAav~ݕS$f6V[WfDڦS2a4 S P; \8YVrwGBQ}FXXKxi(&gd Q+Ƙ/!6sUz02?tȒ 4)gnŚ}y_uu#K ;1ݸSPUK +(ʞ|v$\x^}ri,Rnq6@׿=pLdh47=d,5JM!%B-hnPijC8Z>4?ߢ. R/Vh85dEvR8#jnPmz76nn"5t?tĘϳZK i[]=Ikrdwn\J++aJkW\Y3`QSD&|zd<-&( gc#yj D0x(Љ؛QvIUTXлIF<7~_e 冉 7lNyhz B=|);_U\/6́' >p>t?wu!^2naE@K%JgǭjSZW[fՀ!ƃ!R s˽6g4V`ƄIqw/Gǩz'Y ,CM!uS~gƒI󀖤;{ٿ"u~m'uK--fgwUV? W$Kܺ/ $,e$,nUkGe 5բV;s{1oRg嫎2Ӄ3D%IH9َ{\w0 ҆YAxU*JULd)<[j5_BCoDUꩃ}}{[aj 5hBv pF M2Ehױ]hE+s6 4̥Uc_k)RMv~#N8]Ǝ''fPnnJN.Gjq3ÆZϢ wS' 'Gc9 v2/c#6r#< wNҠ~78:AO_5c +&uD&Fi7VLhI+P/?#R c2W޾o ;r{;uǗ =~9̬v X 6a@>CD}ZB,+왑~2UP5`2J5\PZڇ=EccdTN(>=%{q= eK4A8LB= h8lS=/KB7qiP@q¨RKJŝVH&0Rrڂ4O|& :ztĽ#t&?r5mN4<"ha\RGqc#nKs2d.2)_ٍ&Awģct]!)S'*>2@422Ix_ D͡äDI&!+繛dsؒX$7`,T*9y:}T 9RvZެiLCvlx[변;TӉd0Rr]cE'Esw^Z*ˁK!JQ]}ùy\:ZyIm[}6 r@a Yl-'< ap4H%omݰVP.gJ_]‡;ž:R彅X8?`L OrZg ozvb>Tc\ Ep öt7iPG:ϩj@V1?e]-oIuI{\^Yv@ĸ U:s鉱=/X&{n! ~,"~2ZKG>`XgJ`SRc+hw׎OI_Nm,)]'Wz&Q{(MNyv0'Ёϳ /$ C[ftG, U$WHҒ&[pS+Bې+)Wt M]sq?tl[nnqk]DS&TAKkؿyr(-$ܮxCg7?9oLRz0LJ]Zތ32h&ʯA-^eNz!=ZSVL z0PG@n~ G*_Xon\[5 U.U؁2*[z,_?2= gLoke]d~:yqagkWidMC_ lahBu>ݫkV1r{wS=ㇴq5fٗJthTMљ~o4qXݰmFkqq3z<(QnNOvAti8 hsQ_CAi41K|ld?IGR=6?fsJdDhT0f[_(Jdjs1tD~ FFOu:TRʊDvPx򱸬oݍB6Ōn !HSdu#,Z@O_j,`4\OE$/AY #r8FqKJy!LHF&{ @ ࢴΜ6ƩVNAlb\ahM6㡭]Emirr7*8hgQ L0D8^ ;fŚW`k5@x-1 StElOSB* ڟwJ9fJn(-^s\[j]39ר\v66]bv]a͑H+sO3.( rLzi^q qv]-c<KE%HpX.?WGaϏ(iTUQ,ӂ-gu¦@*ɶՀ56w~"ey܀k3~ ;i,Q"SmtwfCeB"l$b[͝} f()P5۩md&n+ CUD_XbQmfC$wQ]~*ʥ8fZyjx>nӔ)ҎC%@FYmj1[lJKX/e8/5x-,;da5 h*eơ0{lE'B χRU#B($JA ܰbX#C%}YV+wkqΓ{YLG&Tm^FPu&P?{eKJxࣃ^v` P -{1<F;5v5@Y4t{zGQki D=:ܞ8<8`b}G,X܂i| < \ nrT/A,ٮ(Rtʰ6[6V=ϛG^vHF{:Ou]~ho +80Z]./;h)9)/ 2-剏LT$wJd٬- r(:"˅wo拮e£hXRnX>BrdTʫN4˺76K0Ĵ"'ܣނ8XNqc#-n`1ǁ;=c!(M UH#l˹l_epov$`i>w̏uz}8gaG) ® ꫯ 챯a|?0}?|ϛhGNwZ/92LafΧ۞I 5'E6`oӪeO Iģ\?GeݏɸyD?QdH߉y1Ơtq׮epWM}o6ɼzeQZϗDMN̐;`CaԖbM8,FcTohA+|TZ]9`2 %  WApRRɛRbf)r#vp!׆<.swz^_}`h"xI.d#v]65QCf~N{d0nۋ(Jg!4YK(č=pSW"Ұcbu#v΍;UbJORߔ)x= CF).<<}yFʥ_z[ E(nёZpF :Y$jPQS4WsA16T ӟȏٙoy.o#d'@)SbEozQ Y'T y'j#ɖ0h]hVc^&v!ֆϮ%[TA]&M|.L;;6lKVîwA $-B;X4ݐ] x1D L^T q&G낰-t!J0tyRu Xi &B[|qhSg bVigqn3e^?;?7j s1iu}r.{rݱ֒mz !$ tiWϱ'd8ԥ.U^T'|`(\9ZNuYC*fIkj7CeЩb4dzqّ7ѯb8Ax?^e.qfC ?u2h,4YLBjD$~!%ji٘-=p$QL߆kF꽂HF!_\^qhǝFz{óD/FP#3 -!kfiO٫>f:#op"fS9&(('mT*ha6-`cp[) 80rC AɔL/wY7| erkUұ2BxPBD…2Z{o!pu3|5g+֛1S#y( dsy($b c)n!2ۀvM{{mlf̌@͚^&d]R¢e38 )` iQ%%&zHޭNQaaB%gˠnT5xPԎ;{=[uG-7T2CNJ(N~Ym?d7rzF4iѪ4NcU^ k÷ןp<)U[gX0hr+Pfx#7l*&xcSCqKm:vKC@ڇM)@.;mj  avkҷc;ТȱT#șNu6^e 9)oA$^Ш4uv $/~g'L˟!Z툔ldc#$ &*b@T}+ԉԇLIԐ99P9 BRC }׃&/A.Jԁ!" K6, m;H!f?N#L3z6CyWMK3/pZMIx\&_C<뒃M⸴P"_ʍi+3l#߁=ts#1Πun:4!lWgΎGOU: h3f/O:a:~I(M= QHn9K}^L!C0"bIGڬs7gD1'!/#bm1TCgJ/D[9MuD657.yeE s4.֚ PslsK9 TyvAd;!&Z'ҋ7{|&yK :dp+QZ'@ h}^X<׹.=aItnyN #Ju8vYɀ%g 4Ib]dk|C.P6t-oGhC_:*f"K58!y D_̀/oGje kBuSAf $b\[?9-yڰIJxD;u3.>M ݕݥ9g뢌`f,Tnqؘ]0nAoo"q@^O`@sAsPlﬓ(Ϫ{ @Up6 pqcGXBCkt: E5IPʧ61C;jy[3Zؠ)pYijrCXף#{u B%ՅߛL4 { (G# :T7%IW"b-kl )S+Ko不Id#J[+w!v $̪3\Uq!eZR9HךLKnp-G>O&h!L6&lRƯ˽Ѭn(zu j#א,[4 IKX5%ᗜrWƳ \#CBX#u$ Wmv"O[i6i#Lpt'$52y13/`ZI'.WV?p3 tG{94@AǸtJ kXhq2m"k({"J'Z\ ]Gկcwl ]Q}awlF[Q+@t5d0ڀ-Q-9|G܄ yOIW@i/#΂Q-:-^GiJvm"5Q&{_~ed{' 's|i.qfu_9jaGJk:śc\Y"5OSmjn-/Ѕe8CH" nj&[82ڵ!{jV<UZ^H@N&L*x86m\k8'3~~ 9lKP!=-8 gy*^0ZXx]|mv<^~>?u-Ê{$zWȉ ^eɀCq64p`l MD9XGlk]EHIУb)5;C6R5%{kL/<%hDn I;V|ҳX{҂l8\?eo'+`~@s 쟃ZgˣN%P,-t[.i!YnG= xt9/WAP3L|#ߋ׮Һ:G^ &nAGsEՕgףX4k Qt <\Aۗ '6UMD"& ^@|;]uj 9Jv4Y"K}T7-ZF'9qnwU"cMr;PT~) K_uDvyYLR8pO)ܩ¦Ā:KS: ٗDc*~,gr9"b~'-F*%y8v/ kNQnsWAY~ũ@YKCf{^cì2UXPIϾ"{q-H.N<_dӳ/IOj90@Q9$>˿pʺB +\Vβ֮J9E^/,- %|? n.ؘi :ؑ]>r?s+ڣe1gL40a!'8hj!zT+L)` Ɋ4#"13qR\Vx coxsxX[JjK*CԽo3nULOxIk-z]n(A<i6R|&I7CE(kMJMZTVK ./Hbyp <z8RM5ԭAA<ܖ4oӖvAjM]x!}SʡQopITx {op;iJE4˕-W_ p<Nm!UTac9jFrUJRC^͸,S} 2e +fF[ #Ũ;7uI8MaG(I[ ⶱ8JαX0}lnTdEpaZ!ɃIv<ҟa"(7L,ˡ+ss{ *d-q % ܧ($xlcj*;:\!5{xLoYr۱:qw@rx 6jH2ऋJ@ݼ,RDG0t̤urq4ȼ9a0s,is*o.bn PF'R["OV-Fs88]Rck"d ǴD~zv;ԨNKn؉}7ϙh@2'7 \4g؝IDQ !6(HvN9)jKAhփ $7a6l?8iȝ&“nrkG TLgu %L$Q{L;.~`k FXQC4JOmȬμAe g#s F /slb`}fx]%:ϩ_/sn<?CJ^eYAEh ;#(OvPugӺoo2B̞M@]s7e, ;bizBPň̵Q-xYDlVE,4wb/oRCO7l83Њk=:,4Z,, ( A0.&i#ii/ۉT0`!Q(ȉʻ\k ^IjC~1 9uO+HM<(fހz ) @zV@Ob4hFfIUĝeP/q,ȄZ&[Hg!K H/xw|z'4`He+: J "L/O]Wʓ3 5{L 8"pml ,JDlL.K[>^hx'ipVTNt١_.8ؿ2?31ީuIځ1LZGc֞_TƯo$HDX߾qLq<GA|%[{8)Oh ߣP&WꁼGQ4fLX?x? ߯Ac#;OuMTEwT$xFy|.rZ%4i$ң 0Ū%{!uGzn [Q/Aw!i T1lv_<h2"~X}8xXv G:#MwG8Fy1%N꺄+$W $Mgt(O+-ꩿكFo12F+i=ydУHei\N'5 4.w ¶ $M*9 !bZG,L(ӌw__snn> ^oi|fg0HN]fgypVu`>Z n#s .+A5a#z' OYBU~gVțXDG3 rD6;hlpTق,Wm3'IiTalL/|N1t`h. b-ye~=oO71vh)\-4K^Չ,yTى-* [q_'9>mRyB_I"}t=4j2WKŁ7lC= .+}* ]"jBcoHg2GI>}/e~DnFdIeORdjfV+ϔP68t9!7WY> tGfvhӪ~h!V6n0-+25>i)fzW_j]k *]&TQXf)~ZŏV)z**JB7XK_)e" o7C<20BYr ֍rWI8B" ^͙C~Y^}nv?TX2qq܀VIq8KQL!"B+8[u !ԃq8!:.bфbFN L24N4tsYʳG{ [ MꙖ\G&QV0u Z2?";(p‡V6t͘E=XGYX'2^C"ݴ:7P=Զ4= i?u<FaIĻDK*tϪs=>:P|TPg7Rwrw:m:i:2O9kt"{#|V@- X{RG^J Y)yv~e^BAhULq*$ߓ=Wf뤤)׀IEsI=Hf-]Q1-)lMHf v]CC}7ebWc0-ܣ2Efw/c 6a}Ǻ=pw30SUiy^7ڽT~"4 <11g$'@cfB8z :4@]:u85;\4, Юz2kX{kF6i }9+0 }{-Xa*h[$xFم&SRd1uqb*oh$LiC׆q5}j(3- )[9Pt|CYY`@." Q>wsU]y/+ CAfv0w盪CZ-<-Mk%w 'ՈR`ڲ類{uS*Bz\ֶky4Lhgy mو/`1,>c1g.p4H;^|dÝ>m6-F:8xkl)"~Ĺx!ҽs>-a98(pfƵ[ #eƛF2U(}um0KS}i5܏B\=1%[5';ѫjWt y_pI]czOK+rp@" r :bD.(䖶W Ƭ:JD*CvL5֘R ӔrD`d p%B!0$T9ګS#So<+x u! @IOj!aPVsG2Z"Z:U[s2d:o#CH֕s;^h%ͱ@q#!Kek4p"΁9%EV^/'3jjK4B'(K!.Up۾=}~bE&6og0K҄ Ms ,}˴Z9<8}͊r+~Yz@/,mk<:lRFRGTAm="sCDc`MwߌԻۂ Zc)17c TAmz֟i_&Cܦdd>G "2ɉMK9N÷y >u^"r}k _q+D#cY~*X@H#3K {yoz""uvxUARk<$ ќX es4w{@&̶م1R z^/x4Ni>n?;Im DehVh\=&C"WMzWZ5OX\lkpxuk&'W# ٶm۶mo۶m۶m۶mL=k*)ieAbG=YNnj׫ܯ-Qoq]2 :ߛ#L-X<ݢlBkMKAXQ3Wf%: cSi~٧F2gZ1r^˧ӍjUv*zT} !3mg^Cp.4m|; {;9e_$qP1X| ӓ8)~En ]~CpJmUzTlj6;ʿ>OG5Krx.>6CpIkVr3G/繌En8|`uv%6j1]*L8 >"s rj@l7FT̽vЀ" λ/ ~Sl6z@Jo=`={߸a-WR3p P_Y$[ 'fpqÉs9U&akTrQ58*0P:ZM+^ݙޓ^Pm,^6+O$ BAC4Ĕn> 6Cn!zت}*%E+Lɗ3GO3[6q{ͅ`w|@$b.Gy͹% cw~cXqzegOƾt^.\ MgƿoH+zcdIT;@]WӗTf4ѭhNHhx  gi(;I1k5l)EM4:,]5agC)y <$Q? &|qFF{$?~Ƣ 5L*ĥ4jraJ6A8##OydK܀ xu[%\N0x P] 3pQhY`0ĊY0Vs7ؒ\)[z?(gPR[_Oz xΐ!9yq7J94Mp1Ȯ Tz|=M nR4tHubDTv#EUm0)9]fl"~f?(Bn"t ;_ nO/Ў#s[cQi_H2!G0x`Q`{CAd(ъ[\xt' /HJ櫋gIѥC>Ψi߽&ir-Kz7 rR"3['*AEmDYhm^Tf:`qD-Lo-Uzf休z4k)2ke|:vqdL̡RÂm}v4^5CKsм-GnZY$<4Sԡ&Ġ*ک8w]gAXS꡼?ǫom+anG8 xƏY:IqK9#Z>c)Hkb|gT\goEG]%!^&)'Hto HـLZшBCaߠtŰٖf~$E!0ptRn_{ŕ̏.N* ڭp_"$IuaIEj | !-k/[~D{Xɚ^fvPAq!fcƘJ\$c'P/Ŝ,щMKXyj  ~pB$g#DoiRhcJ%e?r{&/\17ey {4! 4gc!Ї}X|ɉ9#PK uvT $ߦVVCKTt[ 3YĚbn=| Zx|Ϸ7EJiݬJmo$-U'jQYAVltۯ}Ī_k)!MeJҴoXG_c֔YU]s9MdKhdwϭxꐮys?]/kK?u楃tX$b^Վ( KÖHP/ PPĦ;[y~~hw{>y<[?D,K Nyz(V^5S./)^0@ĸ["$I{EՓ}Mlt B.(w3^ڈ8o\Qa SEtbE.ElD챋bRa8 I=x˔%pO:7ܱRc2O7;vyn12R4&L^G18Ȟi\+.x":sm"}{J2] eq:w}(iܝQ,9x kukin259Tہ-5h>,< 2ǻ~SB]eSqOMLJ_]敭 2h],I:}9WW+IfaO1CDsTӦpsW?dĖ_eNj{ۃ0Š> D*䮵G:?K(iڨH+kZ ŃgC'>.jGtigY. W%%]$5a8o~2# XxD|rY OeO<ET$T9 w+)"I̸ SS<ˣ_끰XC0:K9|#eqܘ\°V 㵷&+D۹ueB:EgR1bV5hOH7zdޭZ x-2Z@y5ܗM%e(7BuJv 4=C4f#l^PN!>i`bm7WɛtrsM R憌n>E fXA)ll)yeM(:D5յǾg΋ҺmEo lIwbqQ)u'Ruj K9e^Xi2HfF+] 2Ȱ +ZG*xh_mTwE-//!qO;$ p&S !J?{WGE38iT8S umFh5A)jT-e K  C/|YU/ar̘/HS`:+>+755k 2̃f"El.>bOlRD/@,t+e>knB6m1h//"t NeWޗcFQa8KEs$[5bRJt?xIYxm8L{u50$( G}C0KGw l_km[OٮAܨWHga+|; z 賓ՠC}Պޙ;Sd}weλ-BTBSm Tf7tM':Ѯ0 ߊZ`B;gnu2ԉP#6O(5y l' /EX2Kxf7JY(zӀڠq^qtjos'ɯ뙘 | )X֛Aˈ~v["#l3Z2Ph skLWR}בӂpį>㼛|0ofA<WgR>u>0 k\P.4|CTm$tWh*w~M &;M iP<;3l.'[j&~ѹ H^ˇ3gԈKlK70?soڻ]"R<(&> p@9(Ad%V1hDd,'@R*Jak:.]l:x}xGD3[l*.WCkz> nڎ'r $Pg.TB4Tb4FH4ˢEMZ>PZ_V)N1$M5|Ak'h|WQ׭5Te E.S,8`2ĥ4yZMѲ\!t|*쌠vx 9!É] 1Bd"xJs.Q 7&Uk:8UWϲ >2?NffM`)w+3Uog''RH3ܷ_5{.,VD*svraoE51V(G-1(+U` Kvoq=Ex kŽlݷdjmd.ɄsYy:7Ҏ͝#;9jO5y`,`Ú LMc&T`)TX48Xg fA mGŹH#%`7DĽDnE~_ <+c(= o0VS0nnQя$r%XR|CuY^pUfB^8 z?* 'Nzuoωǃم(䤎E`-7}^kЁ*3#9Ȇ: Kho74x]߱yYBAkK*`Xb$$hX j$j` Co;7Kk1.9$q[cJ<5Z{ZoR+إB6B]Ё5B*G}d,ے,j,;o8U:2KZ&:o\[[ aPf C=:!O!Ĭ bELSљ-U&*:ymh؝UcUcC_`>j FMǍ00ު>GS ##ymAn/nc *lr:-Hf_z8UXdd Em+Ďcw  mX"\9Z eYR0EfS0f=̋Q񹄑S_)ĺJg.;|rS,'9._E  @@4apef% 'R\'y[^N}Msɐ1sj@4pEȕ2)a2擣ۑQOw`֓2D }=7-{\<;{pi.h>$q%=->ޕss-M͊[˅;\J_4KU{7 NDad^G^T?jiMy5QI?)?" &&װ@_.8yWCyZkTSRbt%gֺKu 9-$XmW3H,. mf@)#KG e5ȉM:38l ݾ8'ut :@oN?KݥȘSO)7xIG`SõrYS:3LgcQq_J81d(ʘZ tє29Ղ%JBNPu-L 5'F@dc4ڷ^i8FKBoYIXL_cOڔFoxjvrId:?>XAP(#)9MB_Txy6%'۷+Nd +%xREyFB G]xb&cq m4JK z{&\!sPG,0Y9#4ۜ?¦$_ q #la_;75=‰^fnǓD$x$֑V$pv,:c--x ?*eץ._ׂÅwFHko1,Zр^Wz"L}6o׌"&;˄(W#@]RPz4,=AYWI"Wi ˮBOjFª-k>c.K[歆Lá\;C/6eUWIiҦ}A0F<+oߌ}EH,raG*x5ܿq򕕷4c .rI>{Iy>/T37Qtvpm8]\rNT[CEے{؄~0r0|@H Xd[ 2֑f Up 4/hsvU{ ƴ b4nLm%Wy |3붸#A,҂e{R'ٹDkEXI^-l7b8x ]LPGu(Ei&O(.wh et !}T)|ߝS)Q6Cz(_'[cʤ擯PdiRP_y!0Ґ\oϑ>zW)sG?5RaPPZ,ɶ|>QuvlPO x([=nA_`!!tS.t4#Yng%Qa&j<É.i?D@K%/@qɬSVo8%ҚBk>./+;>`bLmn)>B@ %u_: qqQ^dfsKVD{-x svuш- K-WL-d\us8c.skY/w禍#? l腛~"xW@ r]M&GuXDu@ك#Ϲ_TX >Xn0^| w6MaQ-ȣ>e-3PX,= XqoҔ;MdJ8r$|XEY5Ri9\ v^Gyģ#[ 6 "/:{5XTErҔ%PlUNHT԰z{p|o%joPo 6uP>Ě^nYI%>n lҼ墕߽u $lk+W>j"kT)eh_mk/UC䡉Q!a|n,Q4c% z "I$m)LqZHZSIwy!H|9ԁNXt-HWRk.Hz} d]T׭1| Lm#Ap&VLpJ J@zc@w%c K!\~_ްa Qェ,Ki~#7 .g::-0XXh,iMBD/V)=d_ v-z3!ćo۴pΔTStC_7ņjfN0a A0MaZ&ZeqqhO  vq 5KUY9g~ fqdiw{t3,Hj%|5}|CX6]!ܖ>'y 029"RL5"(P喲MOJkB.@ʖ99aZf9]Ba2KϨ'zEQ̠@.;% |)Uݕ-_C צMC`cxS u 0my-+-t֐z(;:yWzTojVĈ Pya!8m)gfw78Ebu#?Qd4t1 KVrZI[Z!YfoPM{Ĵ[e!L:ϟ*8*8WSԾ@Zhd5u7$0~Y;ṉoO0s`Dp̉1*yR0;Hӽ)zc1H>m|?jHc x1(K}'\GjRwOjO]=h?/|l4?SIsREv0Y0Dfe $ :m6?Db(Ԣ鱛t *Pfڢ78|ǙQn]fMdU>ؘ|};q LPFo^rx>ڵ@}~::$JD'*ck`ڛ@i>rV[KՇdҟX/]+3??dkVzM#uFĴhףؿV&;8o ,]/5xV~aNa>8ot\驿RllZIfn7Q 8V2s(973E RJ;K4brp70猑 :WV{T\)V-m;UҵU0 {JXѤ3tŠ Iә*b#}}ߛ/19&~~w#@ѸW'%ml[9nUHot\ [TUPyr>cW-23Ji,h{;{^idK B$h0`KE}/)pG}ċ":*$j+_{~:z"qÄ * ;=4sDKi|Y!0REeN&4E uAT\[3ɣ @OIƿz()CV f@, ~A]sI?P1$mt`o1xyeta㣘}Y̟.dPrULd6PAe;%cU 5imW`@S L,d3]7N)rxPY4@؀0ƍ`XXt*#>vX :gcPELЌ&W0C7}Y9#i76z?G,a݁bhYJ"x?Vn.F5 i6 ljK"ucX<'m/U}}=̈ȜeVvzЙV.IeaQL0X0_q_ <,R a0?5?"uWp\-n*@+\ QƊ6毱]/PQQk-wm'^ft5y~;5osM/k HUpsGNmKͤ˿ia#)2sh#eqg2x*Aou^J!74Ȧho:5)*@<:=8OMI7'5UlS(rdL)t<7k=[e)Sb iȕ=G %Q̢0U&ť(@tW)/B4:k&bE|R` E2hd/(jqPo&߭ur2˃[BȰpFf Hcm0/BmJ:Os72yQ3 s}ns[Gk bH~7XV#\&l&;,~x`|n{g%C9UIwn0W͜{nve-Sm76_"}}7gVġ|YQSY lm'ߤFx2m.6VJAj+jx$oC&O6ˑֹ.:)5&ǿ~ؾZ& 3-r0>o3pߝ l/39<rR5OeX JyYU,3<&BF"н3> qmyWzcFބĩ;kr$d)`i yEm%bbhY)D |=p42]u#tfܟW`ӧ.:J̷I呷pH#I %c8e/CWBG$}ţ{gQv"a2mёnݬ He5^5aR87z]_v sz28黴- ץ`ߘ}@I^36a=jWŲ_Rt9P&x[R2  J6+xNm7[7{|>.f<1c"r@Uƶ&ɓ pt<)>^{|GM^I(O+xß|F)Kdijɽ;q-u$hR7jG7%54s`T,#%MPT}4y)բ=w9s*Pע㷌<<]9xqh-Kb OcظPVPlUjXM)ٿ*@^Jr'7x_YqByGTW铱pÍ`tV6{ "d qLE! GKibYAlP^YlZbj?JfP;+`t/̚HOFCW` ަqO8o)+DJ-i3Ss4rPa9X}| PѷNӷѹGG],)`O0+¹CeW2 5:ˤbXS4 Td˚J0jAQ,ײ PM釿Yz>"/ueᎨa@U L"!|7/L'~֢< YUHSb>TxJ%ڋ+HUyx nϫ* |ńAZC!)܁Ѡ!yq"iBCVt w,޻>M+˵/KeVK *N& l=S%}^fb:.VeSC2=]Y1 (ar",.P;aZkC &wSxGą&a̠:FmG';D'b>zap|oF:MX͒F%ZDGa,6 #T ++(H  `+ 9-JŀYnw1;]unuVs"?:VNnoTCY"|}:qG k$R'`+XQ+ pM̈ח"7q'Gu⠭1>_kW^>~m?Vk=5\:gnV8SA"s ӳۇA˜zZ2Jܵz^ej!r;Y&sYzft.H?#N*\#K$EJ|p *\@XD"3Ii"wA l۱ MIR<+hr(S` 5$l` `Cj\~C_K&:[¦`0Cˮ^C4QSg mNFpa@ZcML  }'lu.1wV?yrՁw>q`=<&#hc7]p&,,3)G!?l=7#Ҿz}gRzT,DJm6b]-ע#KBn_@X.KZ 5]nͰ;ZzG-F'hbN~íTWڄzkH ⊙Mq?yˉB]N-fCՕ|c,@Qgjȟ:vǶ1N:bǥahz8SSlQFV~^PmY$Z} S;d9ģ=+Y)otUj 6r\X{*ǝ{p, 'O%.۬gTNd8UrJz1#>Z?7i (r6;{"T]o1J&H~ 4"--LZoc]|o9V{t [QjBs$uSIn`]:kPlBܞp}%bݱ<>) LY78ր.`v$h Z6ܼʧ /EgUsQ5wVCj ޞdnr< 0d :Rrv|l\d4:-ETh#HY̼UXDnaĺlRt?jQ<_h*fwZEuIבI?3"dkȯ%]h|3xgH |vR#7ި|as V(6x&7VDX>*anvTEm=n4 p[/~GhxFb}37I+3(ΏfU Ue0Gm y1ZˁĴϷ}v0[Ԧ!6#g{חLqʪHUI1/lgb|Og^ {#x96ȯD„,pP57.4cn0幟6YB􈯬9К]a US_<>)q|Y7>7$M YWkG endstream endobj 89 0 obj << /Length 494 /Filter /FlateDecode >> stream xmMo0 !Rz|UAa۪V&$E 6~=HUAgɯ~uo$ƛLD- t @ZcNt=YNk`T=Ro æeCڕ(>Պ AiZsn[6uc^0Xah\je?0bprOY[AKS|dۙoF)MZ}4W@{YmG;<9`;K (EytbabisbgEjq(po$}Idon-p!J m-O[L endstream endobj 90 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 91 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS 9_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZK endstream endobj 92 0 obj << /Length 695 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS>u;q~:fc_0F)lGιmu f8Gӫ6b"!YUe.`M{My?IC4}+̝l/Bj*{pϻƲO('$ *{>J-9_eQ"V$)MP:^9 ^` br @ {@(\,RH&ti m+3ԅ ,;F$БzFFieD(0A1a8yΠFpnù[w6p@ )9r9b_ia|F-(:(nQHY^`nA|n(戥K}s\}sԑoA&vqc⠦ YK^ʛ!_my_)=^ ^{TGRw1RDž'xJzImi9j'pͽܳ/-_Z,N_: ~iyY2q,nЪ5QN Y58.] endstream endobj 93 0 obj << /Length 695 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS'K}v}tƾ`R\ws*pWl:*;m_Ű=EB.=]6E%‡hWvE;^N ƣՊU ٟweӟQ?OIz^UU|ڕߵ6ZrbˢXEIS:.trA&TH>4"PX H BM@5*08WfH AX v.2I## .zӘˈ0Qa8tcpN0A2 @݆s>^l>^wo_j4Rrtsľ x[%QLuQ.ݢT ܂PKߗp#}߂pMAM37CB2>*R{@8񩎤3 }c$f O#z  ) spW)9N{=g-_Z ~YK/t:/~e}Y%៍-t:UEk nmGkp\x{)ނ endstream endobj 94 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> stream xmUMo0WxvH UdC۪TBb B8߯{ .@=/ۙڽs{K;K.k6/k+[M'ҷ>dyӔKe'$cS`vfSfK}fƁVGGf\bu<19w|擬CTAW $rG]IyMsh$aW7y̟u? sK-`θtJ!'c83?NaO<Dg!;IX 0z)rЃ@kpBQ]^Z7! / U <ɉ#W m/%]cX! gȀhID8QN~ACT/sQQRs 穅ύ>7: F+}n4eE=zG~<6OɈy2kLd>O&y2ϓQ>OfdV>OF<dR'<>O)yJS*}𗏿tx>z{O->tՍ]*3>cC~ endstream endobj 96 0 obj << /Length 900 /Filter /FlateDecode >> stream xmUMo:W5?$R. d9M eCkmCp;;w~>|3E_?O]5߶w]Occ]=~?}Oyh9%?۹׬B|Ɯ>);vw%g43>\ 6 EJ78 1{~`W(-;]%=xe_,b+-O;q\L}UI--=BKE1p[! Mߊyu>.N5K)Wb٬8i[_uʕMzQ)V(Txޢjy!Z2P="Zd0\ÃGR\).2*Шa!U,H`+j.5Nα@VK-x%3%AYӀzΚ>kP#5m0Woþj.ZT$X/)n)#Wo(oRZ $Kp4Z-b\1ܰJ P"GXQi/8k^Zq:Zs9dB )sL-7xJ`aɽ)f$1 dъcCZC<73JgznHȰYɚTa,_-O87}KԴܗLloK+gJ.GZyVc48Wt]:P~`rZq.n1] S/Pu7Ue:?&?!d&1yHn5)yғBx#1ޞ]Go׏M?X endstream endobj 97 0 obj << /Length 867 /Filter /FlateDecode >> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5&z& h<ϯK)ٔ?pݝ2ZkXvm)85];B7gѻ9x~;a`>W'?y:o&> ݋L'/㫃Bnz_7_t|~;:ذƦoiܰ^\0zu\7g"NFsu_E07H6!L@@B@q\s *Tg ]8 i/nTvc-+>c_ZZ~Z83z3[:ޭ ߬Lg3t3-g B|B|\3gg|2?z)BXIAup*^+&#sU-'H8qɼe5A78{Y-7^=!U endstream endobj 98 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 99 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 100 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 101 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 102 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> endobj 16 0 obj << /Type /ObjStm /N 65 /First 519 /Length 3651 /Filter /FlateDecode >> stream x[Ys~ׯǛJ޻oRm}&BۓȒ@~=H3SR[^N;Kw- D" # ^8 QxeN"X%L!6xUEҩP9aS2FE,5I( ۻ$@Vda.5B+{6gq`Q` (@E@mؐpXL (`FP{,u ]Gk1hu='<{bMRg0BAMΪzNif1 rv&C'_->+6|ѿ>ݓYIFS9|2L3_ͭNF[žG{{8c9?d+-dzl?Ϫ{(h:y]3Nd^ r8RgJ^NJ,TbT~j4,u0i c`J0aK̪OBNam9ƫ?]\\NrGypg`4ƻѣ_~k%yuvcn٭;{3ǿfuݚj+[pPIr#|ځŖfǶJ4xۥ1Ki`( !DfN ;pysxDܷ^wg:R|!M#^pK|L:~Oމt=Yg%eZ>$y_mmkZTf˚xpz|intq^wL*jy"nj`ucZ*i$(N.03%(NX*-&r].Fng+{O_`&>0;xs!Ahj 'da>Xb5‚Xǧ|pUDRe(\/&;|шxP *! q {!x:  @_Lzĥԋ-QGwY8ᢪ(no&3ځ%" i`h5D;S@# \n}+S g) aLOcdWG㔡tA%Npt@oE/ +"3$Q4:)>Jsl$ʎ<})R ]eP<1[Ѯ`?| Qh [r*iU,HΠnu Y%$DE h(e`8JcEK`=2G.)P#m7HK#•K@R]JCO 9bM%D.y6zuHI1ծpɫ%n"zi4e"^i/s8Wg3٥$n bxVj-9]BaZu6_>eVݐffynH&.E0\^w ]ANK8F3yٚxli:?ܦ7XB%oyK uɡ-%yJKBrVrkk{>!^/JǬ9^o*\qd+gxGטaŸ<%fT.CN^n1nގd=Y$NQQr-4K,c u?Km"WFQ '¥K"^l!T15-Ql<1LXٞy/x}SLs cCtZ:MC0 :% u GeU\'\v\Bt Y/VxN#ˊ :O`Z'S~ρ_w\1_΄HNΜ>OI+d\\;Q'Q5x<j^^ӓ kO lq}Mf4@:@vߝ@m G. FlGTؙ|hySNPTr6ϮF Ɠo3FZb;an#ƛmtg&܎e EDSy(_3N&`r :q#@sxp+s)lt"=*~9r?Ky?M\y3ZIB*?>?|v,lX6Рb*~s^۸9$T7 ӓ_+]lBT GRHjCJŽ r@}y"_|VR^A0^0ag]nS )?˿i۠[㓃=$ mHlj5$<>AmӴ=h+(d_@Pn_ߏ`2¨<J*C [Y0 s5aRo۰XccAE!VFͬo_3ѵÕ޽8,&'se4IՊƑE e/j6G}쀯gq*v)1>/5u b_Ŧl*" z_~ίf28<W &龯5tomlW2m`/mԱ]uR:݋vG:e_FmMQ&vq)Feܘ5mtmmBF-SQǭcWs3*SO K].v{]Î*k>ls;yŦ5]tum\8eԚ.~{]dm|M]޼bh0= pa|kpq8K_rZTMjW5kaa$6*p!ٯQ;*Ư%xo {?xׅ/.-){}8 O.{,.{Aƹ endstream endobj 105 0 obj << /Type /XRef /Index [0 106] /Size 106 /W [1 3 1] /Root 103 0 R /Info 104 0 R /ID [ ] /Length 306 /Filter /FlateDecode >> stream x%ͻ/a~.uE/ԥVVKՖM 0q$b@b%0J `<'o+"@"~aH,Y Y2OIY` VKVH-GC;k'MͤivE: G; !3$L"(%} $q2D!U79?^XAV [j뵚"QI`j xJwV)3a5 'xb[y YMyU>ܗRV1Tڻ~lvo*pj:+ endstream endobj startxref 223758 %%EOF survey/inst/doc/pps.Rnw0000644000176200001440000001455113517345006014635 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/precalibrated.pdf0000644000176200001440000037670014576431432016653 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Length 250 >> stream concordance:precalibrated.tex:precalibrated.Rnw:1 14 1 1 2 1 0 2 1 3 0 1 2 2 1 1 2 6 0 1 1 5 0 2 1 7 0 1 2 3 1 1 2 1 0 1 1 7 0 1 2 1 1 1 2 8 0 1 2 1 1 1 3 2 0 1 1 1 2 7 0 1 2 2 1 1 2 7 0 1 1 6 0 1 1 6 0 1 1 6 0 1 2 6 0 1 1 6 0 1 1 6 0 1 1 7 0 1 2 3 1 endstream endobj 4 0 obj << /Length 1509 /Filter /FlateDecode >> stream xڝWA6 Wgɲ퀵h 0ʋZ6$Y.#E9b'SEO݋_ާrŋXLvXnW9,Vzq ""T41HPXԾ۔YHX:2,zv zgۥrd\N.Gl4TPt\دK'/6=AK4+2 T] aѠe*s! '͡sHu|ekݐ7C†`IIYΔ5 đ0z7Tp(A"nWVyeG;ϹR44 ]@5>GGfz3J~#%l7-D7JyR$Mq@h%1F^HO HXaC"r/b%"aƹ5q,cq i:!r_“ T],0z~p7Z Ms~_J: Q"T]exQE46s&kꆻ!Te{:X2} Q{a;PL- K&ZeALE\8)'jP%&B0Pm qKr0DgxHIA$*A- ,';BcG]Jo*ߞ`ck3[MwC]}+Ș?T{AB鋧s\כYR!*¯1=05MO7ϛ[wSzpaW󕠘}r|qRJaG GOwY:?/I]gNWҀioP g<@_4qC;ۀ5b$?5ϱlo'/ is^ g>ЧPzE2={Mgr CEþ쌞?7L6}"O'K*{!]_[$|*rW,kqwpaEH{0;d7C];`sxRe T[x:Gw*f endstream endobj 14 0 obj << /Length 1032 /Filter /FlateDecode >> stream xڭVɎFWz$!|1.LJT"V[U^[6d,7 )Ih"!1}:< Q5 \@}ۻC;Un4ptna*4ߛ|X[#b3 ?ovs)Ʉsu<11q?aƲV.@;ʊz I3N5C”S Tnr1˪HMdU}S$"XIC6[ȫ_:κݵL$JaP:ȫiov0ipocS^FvWaQ˧81>dF.K7/T|ik$-CZiŔpF]XTN,t13NyD+@x6~ptP!v8?I[+0B!=5H$`76?aNZ3&Eo_o%T.55lHN*!.tQ*lrAn4ZyA4,{Bfd¯/qQi]x.m5.E\vvD7.TkK^*oΕ3Q֬sFlxY2cDe QH$ ǐ^Vh2^Y@:ʼnuS:R4S(TcME(ԨGCFrbsc`| BoJd,Ö1Ttwro;J 7w;^׽+)dz$J+HeFpwFRxˍn7m endstream endobj 17 0 obj << /Length 679 /Filter /FlateDecode >> stream xڵTKo0Wp RCTJ[[E^`" ʥ3,jU{e^vNLn4B䕮 3{f+PEӍ4 ]Ғ=b殱m 'W;үPOՓU^hdMYQ2͸}CIƕ4QA'd!,PWƔ*V;gWl ~uѪf|&8*/M zC~ _RCK#;5>|<5`eiؿq(i̽[() S@y\q qBڄB9-n$KwGHsJlzMل? EYiVLrH%.Z#yqPV vy:zp]*CQC1Q gޑՒѝ$O~ ,?) }kIۋ kh`wch4&.a/:R[<+B4RsGM.[lt^@ endstream endobj 26 0 obj << /Length1 721 /Length2 17799 /Length3 0 /Length 18402 /Filter /FlateDecode >> stream xlcpM-vNvض۶m۶m۶̙9U}uz]W߿HQΘ ( `g!#7w4w4LfFF&2#ҐE=@ ,DoG"Ecc1 $+..# Q[ R6T[{89?LmEde6F)8:p66tEV k `dn0065an6&_)9!(ѐ `dlJF@)dkmhl52(ZomnqGt1G9D]D]W5ϹH;Yg?zsF6Vnw B43l mmLhoo¿rqMK;ڛ4e}o[W:&N 3C߂3fm֐;"9Ol98촞22T&νN }~1d$Q2kIwֻ|[]5 M؝c$kFy^dQH>pՅGQ*m to8}*Yk׽5܀]2l]2?{oXyt K#죐0os)EUCr['u%($G9%+M 0r.]' H[KV]ǟp6ˮmjlzq%uQ_b{LGVVҮ/>Z+CrK*մy:'[I7 T8R. vbcوڡ+ .[WWn>a6:N=d1M<$cI=06uLQ~׵ QϮ- ssb+~҂#?Խ c=b'|{3v5?hL7F` oV31]D"U#W}pVr._|;򈭭ȯ޿-I!ZH'IE<ވP9$&wlҟ4 :&2e(޲J^k?O%SSLk"?|x' ~.jHNINi5ŏܓyՔ6BX:0 p#ns>s4y9;T,<c+IVtE8)fIdy^׻*tTN#qinU\}̇.:cW{6W: 35ZLgm&lԁ%.Ʊׯ.cHf/x|6FW9AS, ƛ{|seih 1,g"Ndw@A!K3z\w,JvtaDojb-E2"o]%% bD(ml= |Q1t4LhxuI_S$2\ޓ' oܤkujM.#ϴI {g~^! Ā ۠1Iz-u 9 }K᪯g-A%ė8~4U<ҺQ2\cfJ9͢ޚBB0$bqgw+H'䄎-M|6M/ԏ@q `V̖N&@&ؾc1ڔnZGO` xy=e=GuŞ#4.mq'o!sثIftl/E餪 vH{UfYC./*sMSK^<%д_$k;%Q NZǂ'>Ifzi¼ P; 0x/9pEpe !;$C9dLHmO8k%4WF)vϑ%T$%8@RUW?hٚ$glA~AW ~Zb:]z "GO21z&۷ q. TS U E}pBfmݪY7)t˸8|mE12VzVr6-TDv 56ɦ,_b^RՐUw% +^>P7pnȎi7J zLQ-0K4Ľ_}\V$7}xxt,KQf_ѕknv3A&;q׷B#*tukٺp# ȫjcNlbn,ړKBVuC&qmbڰPZQvKJ,ڋ僞{;\}C>-1W)Ep2$G(Ƣ%`d:r- 7D^$j0,:mC[/;ZR).)brO֋-~/43rf >i3&GLUס笌&sԢ/׸gLɸx冀DwDKհ5B:>I兡LNSDuv ԻP&Wz kUK6$N~?yhZWHJrގ\Kgwn:ՠA*)n!QFV#lN4f Nl07P̻rBkm7-VRewwп$"y!ngA`рEkz۝^ϩDHwoshL{TXYVYQrLbPzB=<˔9^|'d؞|9$k:rg1ga(ZR!ֹ#S&#Vk&;A2I ?}50ueI )2NL'Y~l tJGedc/;JD%s ei!|vn\+KLhuYHFSȞ]a:ҽ"U,E65cybiOgY j*e v~;[AE'z(8%@9,?~ʾ +:M,iz2 p5h*AQMdUK_1elC wadDqVF$ Goɋ,ǾKa$G"ONzIr1P# & itdŲ`%Y}z FPo I4vy({jM䝡~S &wfȦu6`bÎ"$yO6UyU'gUxE3TŲT*N)Th/VŽnRaC:*:2[ݦkdyC; ;w!@`(}LQ(S:l'm݁W'23 /ʼn1˸1F][Xv x<ɰsT|=0HLJegnvAwJ0)Zκ Z4 VN RXkJV%gHo1cG58Mj9%gVAv'X'mʞT\W*pgodQ[pqDobC!9BLVaVᤶXF&:)îyy0+aT3*iԔgTY!r ix*0:WYq yb&{ɚNոlm)?D;!80\ķ"nyňv#*"0&WdIvee%6TGdDWI7Klr$豨ܝt2]0t$/}F=e;  }#4PZOcҒdcןZW[|B8$>em_| 1@㗡f/˚>w6͜9ɖWlQ?_+^aP ?VcyCɅC|?a5$ztgOaЗCB2&.ԹO €uԛXټDЃg(T) Ty0߹<+3g`OP{үD+ )8}ڏ'4{jc n81~YvݡF6 bL_DG -Ng,:{ i#vqbU R5E 7Z3XLusvs>:#'ľڧeUI;CJff6~c^Sp@BeI|6k^9ON}(::[˰A%7vg5i˖2)o-5*]x_OzSʈL;Q/L.HATK'q%Rzhzt'}Agųcdo%~H@Sȅ*9~0 /rvNNh;9^x!^ït2Ƿi>%gMNl)ge Fr,:sT9 (UYܧx'͍χV[Fcx iQ&zdk]F`" P!>̖[1vʼiG,s^9:E^u,+>VA?*z9?kW˶tnO6Z mmSz |v @b4KY0]WFA44mT 8eCqL0Jr=%57hAB4([g>c_>RSFQ9Hfs=4 MLͣ6U+~XcT-oO3IɲX4ՙjYh݊[L;<qW PșO [2C!- ͶF#p*o%6}U*;"KԢ' AV0N!k2xi-fzd:iM.1U> ] YfQ SrhJIu\ 2m)#d>L Tt_ՄKi41]2w3_%w𤉺 WDw ] ^q"֋K[|V cf:/;>O?RVS]8!GCwj<6D'oTMnqm 4|k+$Q\e:!$Vțl-ML$D->΅0c)(G3MCTKDuKYQ3lL[!O;__0Q],x^B&_PT'C6'$_ffLFmp~,D3"wF\y<\ZDkN%F.[GK};C\-%A]sm~qR<_&4lk5qLi\ dQiy…`㧬hAFjfI["DPmr֑Mt!p)a_!Gݣ+2m0{0z-]Eig#ByCrvF5q>]pdw'P@D4Jp/mќTzUq4"X{K [XZC^j0+Bم$Q{W$C6N\kU/è+5 3=ИQ,6)FX:ĐCzLv(@> Z7 )a(&s&o'%j2\U/$_Hop4@dbz#p=NVzüzgji ǝV^8/R'*YP0f4y\G +4xޘ[ TwA`q҆Մ'~*L}Ue';HakUMt >Ȁ} }cSە d\̞qy}+-` Gh?= Qθ3Phy84+YƄYT 6X4`aE ѓk$:h#Qbm64E#z _ר fѦoK_qLF<xs#=FZ9R*e v2O 78@ϐ|<|քOTB!_Mx5ޘ Aq zGC<vP71K9ö#|mK"ňu؝ڈޮ?~V~e&% !q&(֓=ЗN$G&8dZJ t 3Lv #kA*%MbY,>3&=XE #Z.;$ ۂCPpviZg%'Q:e''00#iCqCw_bU0քIIHts$d5&ןh]( SEjpGR8_Y~UqqRE{/3]y"wM ~_ fx)§g_Kه ]z4A[3!; 4˾{%(.j$׃Z_✀{7Yt/yQl1f rmN$\ԟ̃/+ $T) Y9K"ٚI,ͥWoh=ULF9 v<,)Xkӎ&U7w+! 02'#24d)dO+a4Z J]"V4G =k:urÑ2EKv>Pi=-h*dڜ$Olu##uolQڄaQ;Ϧzr,$<%/] ȳZYɵ6s7?RIw [mZF)lkp}S]!_GZ9[I5Y3ɥ&3AR &`g͡n'S;l="n%XwH'X(M^ΣɭQlXX@v!{U>ދ&y𹆦eEwfbb'obzPmwt> *%lI59=oxJ6`U~Oo5-\,MB= Ԣ&b?w=1!_ ^/<_co^r81 ǭCqnjTJ:-X0_!N6a}jܗcUI " ɮooUHp@i*"vRc2:p|ݳOޜN؊v!wQS_uobr-5\@$ csٝ;Kxܰnv=X@lg\Yl, m 6~/"$\S-+a}:T> Cwp-vzW]ڤś'ǓquX1SȀBebxG&{T'[ֳ: ob*. \gʼn|+Xf"asmq@, hV^2#O|8&N5I~B<%7^9dӞg`^'ͬXdws4O\~ʹ[FގO +GGe^9ǠIݛy'? gG׊Hl*ܫuzۮٟ^H yΪyô;7UL}bdxI0"x{ n̴ˮl'85bw$BEjXQ3}=99gw-lI΍&`#L{ ju(S~Di״Z4X`a?`J,]2H$]m >_<7{MF v7^0( }i0y( _ Uf$R5dݷ\%\9dtт5a [O"EaxlmG%N} FE7aܪl4=/!E/}Jc46IX!S7TBZ"2>l^CX \nfr:#*[@v%X?N4MfotiImaG9ˆ8;ܾ6!*y>_ W%'%xD +Qb)7Sn˞vmLLUː),lHkOBы ʒfB+wcڴ:M5ţ2K#nIzUg)ٷ&zb[P[a Mp l:i5T=KĊ yLwbiR3sVrJ pwtI~>C}ͧ2Wrh|a?qP?Rl駇ݣt\. YJ40p$+bpwu*ʅ5;CQ k׉Y8ima!r=|딳313 \heF T ҆GH+OIYѣʵtBz=fyJnMZE^hҪ{ f~eg󡷗]7p(.H*jIb){'䰎ڬʒBlGa٨9ٲ@K*?./$ڜDj xYTչ, EpY<46! Podh&-[vY7϶:Y¤YQe|ݶŒw=GE όVs5'myJadNpd3 YILKKr_ct}b~i)SHlb퓄GaV5&"A>=Ա*~ mI u@K6i#ECfew_B%3 B@ZpW2m"7CWp to] v>lTl9> _Vph `Lv3Tƍ7^8+/)!j`I?˿aHdkB在m ZfVDKX{Tx|άX/&yy/Υ5PN"WA4BrZ6&ѭkVTArBZ_F? S@4U6yCSGC[K 2r(y[b] pƄ6Ńo΁U>H_f8~6=]j]bhSS_hRADG7g2ؒ9/ySɯń[ŋqn)5Nǖam5EV\(`">ɷoP'u)@^q0tYSV2 dvx ?5'g2ol]J h qNǜ@`Sѧsj`u<4|&Ij]~R:?E7?DԊXbc&o]n؞2& ^Wʱ%2f^ c5:s-D9LXg"w/M) %NA= bej=aVK>~ċ+#Cba'P}MUAs`[mъgW1!#3kp\$ӔݔU3W>i^*f*/4ؼ)SRߪ$uY$H1r#y$ZL r<;vve_`z*h-c[36x =G؛dM~ 7cfvߐi{.G*#%2#I(Îo^&ByG~ h5b`CҸ."RdElbty-漣Kf:DAZIt)0dw%W˚8ߋ!tTmپp]8U^,4ۉ׭;4wZNtY&3P@Wg/F%%2 Y{TpB6.#@R_igخD>3{ϲlwf:7 ]#SȖŌG*5@Fg8cA*us&\9k s'SmHDRG<kՑ\¨;%l)>b}_\Q ;Gi̕f(́ G~'sdvoō=3wgk|ϟ &[V~C4J0$_-0Fr-31)9ۄijmecr:?O*~L8&<3{}D]BE*4ǩB8y-vJ.ȿ~{?Խвͪ|]IGN;_-@"UrިZcmp+M>-~3ħԂHJxp2 w5G`glFKOC8r2 ?}\Csz]`{GZ_uj) : |4LIC0~ @yp963û}upv9 wmPʖMWER 1ioҘsx**"1jz;"< XQfY@,8Io8uR̜@Z#H*d12+BJe:s{~S$|/9dIq O!$wش9aYՁx#~10(=q>ִ}^X"4r+*UcoY̥(o%!]+N9zO~9"Nyr.o/-ojKKn~v,l;˴.ޢBN73&E3KϺl! nu[hi;Й'2V?#Km۪w:„$XEAXEIA8>崹\y) 8, \`qo3s+ϩW-x鿽xf \ M 6~\?61{χP,@aeJ0ٜL9zrr if QhԪ[vVTڌQK"EBCF(piԦu^)U|2DbomxqKsN鰖$~ZP(O;R|o ,!sӇs]W4j)]@*br]Z& ~j "Xi[:pN Pj$NS2far"ZXU⋰oNP6b4O}#ݴ#1ܗI!4`Q nVy{i]@7HEY9 ڬ"MY{rzu m @Jl(ϞwUuWdC5, $W>V",ӛVŶ)&{KrCiQ4.e HjCzhOhxT)3`ehuN_۶i*<%r]}OmL'fI+oA*-Ǔ%Tp9+od39qLh ޢ)5Nڰ ĐV^I e. ep6$ߝiο>3Θltĵ9?2"&sƕ6kmW#zx -LY°"F8ծ.e;PMjY@Z'~I94!p:x"I2 h"E!Rp jtlE-0eACt+ps2yG񉧌 Fhԑ9}|K0jMFDfabWG, <~/ɦJzq^B^_x@N% 9!2 ?,=N#vJK.lٍA92Ŧ-Q"K:=jvi>Uv`@1)N%n-LŸ́KPu 3LDu(+^MG9ՁCa)hM#`,zv[-;hXKPHJs1SN.Һ`T=vռªsJJiq 1k40bcpܵҜ}{#gS" vhv;vVJ $ OqrqTZ$4k_:45ɉFKqOQEi?O CM@ Vj:`_0AlhpԩGHn7fqӹo JDyl}6dt4U1,/Y!oe:ק.!bz{a_ VLe VN$iX)X䙘֟%\h֠ݰh;8z]o #zdwi<{0&l/Ł+QޝUۯox(W^>)зI6>T2fn֍AYV$%/c%n F 3[sRzcP$e-b_2 >)+TMqby, ؾ*g((Nf=LfR!_ʢB\% n,M`5і)g4 !|TeTyHǿh6Q;\mʳf^GJ55v'b>bJ&zK|nZ,@"#4{Ȯg!ynWaAjN8G0@d5чN3 ndtƵe t*}]dOp;'JP)uq'+Q@>{FMC{/v4N9Tm= ._N+s؝@";cGfٿ@x l&ķ-eM%Pf`h$ h !Kx)"Bp1:^'ȊI8k-vgNq횞EEy;mo`ܯ0@7G2+ :~$p}xfHAD2Rh+N  )fV$ {'4[VQ*Vj9+.|r`490oJM2ad&OY"Ds ?HF4XSɸԓo`Q!e!|Y3wb}ܢсrRn}+jilфkD H&!:<mQ'Ɲ_w$dq5V=#|L\[t~iB@^ҼShSGJ\WP/Lm>y[gj011j:8õTc"^/Ȇ m'1">W#vA!Ǿ \](v.t}oҙ"ϫ-CK endstream endobj 28 0 obj << /Length1 721 /Length2 10753 /Length3 0 /Length 11339 /Filter /FlateDecode >> stream xmuL5ݭxqww=ANq(N^ݵxq-P}w/$;3kdY{B``ehH+qpYhh$\fn GPh$ @oж79\ڎ gWwVwֿM@ *zr2ze-  t1ۃ, rt;X8-A0+G&@JMS`(m e-\53#Fx;bEX,@k_Ɂ-ݝS+>_@lw{{e3 ^ Prf@_0 !4 h rk_u~%%~}QKG\w.dSVcS[8Z ^XjG 񿹒 ``Y^,x,\?7kcYH@imB069GTl9,촩2T&hV(t&\mY<hb2"h詘:zY-O]%62Uԍ[Z*$jyRaLXӲ>XՅ{ V; p c&\iw *"O+BNzw<;m,rπf5azȄX*[[t @lO;Rz*Sg/:COv<,r.2 *oz㑼o?>ёx !XEULv%⚒OL Ɛ9k6٤j2;qK^oZ;>]-zqn;;ɺׄҕ.i׉V\aן2jH&tuj$.R'en)j|e)9O*~{2%Nf=خwzCvsi 񎱆؍~Պ2߇vl@ v _@I~9LNwC}TvkpиoS oS A͠J kr(!A \t$&P Y].f++ZzJn;`rtϬˏzw !i Um>n=?hx.?tE $Bf4Fg-$A)k%4+j㷮CFoX#n(=!؇T@fOȱ3eW;y&,_ihZ_]SR4fdTH6ۻ^[]ZΠ~5QJ؊ y`2ӭpY*c0ceD5*5xL&zM-Ū4C|we%a $% \Ƨexowȝ^j5^**De)I+'|w(䗿 [֦vbt*gߩ糨> EJUR{.:*E1MM(zE)7f%7-3N p%z`YM<1Tϝ$$_ 5Vgs5L5][H8RV'!Ou?f|q[Fɚm:!(%;x.*!:_Cݑ:[j@m?L+d0*?pG6V4%%b|cգ]mW ~$=l0hhoy̓1tnH0 t9p@ p.U˿Ak *[KWĎܨ1r.W"tDzRԹI rV|0@<' 3ꞾvFT2BXQOnA1-ECf@tb?ig+ngm2G25}VD3z^w[k[so9r5i.Tlb!td'4?I>:-u/yRi xA8ɃUyk&csD|~xߤ 5mO#TdFDq\WƆj"~%h?-X*' ]1Z3S$] ){1tC"yf%k\"ݎmQxB>TSwu5.2jޠ[ v>*^A94guSnF+ۄ,Lڸݾ_m޼m)TwD0xFKnVr%n؂;ȹYO 1Lp!Ky@>ctF ͵8bdQoE3 |F92Ov<Ϭ$} ~Ԋ#~ikE6aua-HbZIaFo&9#M`͒M=[J53Cyȸ&qGCs\BHkIO{1Sͷ)> C=xLnȈ]}A=-'"ġ(1'սcT5bԐHi種+$=f@CMmp+X{lU.$4NS!X(m[åJyB[F"hV1ϕ5eԒh^ʤ0m{w~G=n/bIk02&ί+M\1İG XSX2f >+WHQz"CuC6bȉ%);zzu&Qn^ӾILQTv!AclW*|ÁS~=.h"lla5[Y◺wgkqt.:b,ޘc/3%0əK gYE'S!+#©URe_O ~4P 딵r/ڶ]Qg"-DPؖ9@9˕BQY qPTuL$p y_K;̫l(J gС@Ș~Y94jduj7A?+ C۷Ÿk8VP쫼mЯuJ v7j]QZ'=w>Z4IA7!*<g a4Y,u|ĹM^+TU폥 2Ԓ ɘ G*"鎍yn$Oml%\l-W`h{ṕ_nCD9*v%' mL&Էx"%]߿N;MGy|qݩWXb lQ&\y\5jC E`3ITf}=9{M;Zx*jiT(YE䰖|[}Wi:)Z%sE3iE6ʕZ&Fn #kɶ0˟~:=`? uC)9l e9XFE~wv?h$hW1:@˿Zc#A֞ummqIuzi'#3.D'~Msby-dzj`Mᄕwe}^8hgՙ.G ag΍_ AԁkgAn< }3%ȸ~o|ƛxUfwVQDVJyπN%v]Fd䶩Enh3(H<MfT ~#N&}˔Ќ xAGl+3 u4YrR{]ӛRAE^|[ݡrƪlk~~<5A0n%s*?aCo2Nh Qlx#c g~p ѣO9S$xbcqUg Ls8nl_ 148A`Ӛu^tV&ZzOm/3g,CX/N׹$b>0_[*W/֠D %b1QljQ:C!M9J9Ym vH}W4 *,u;~-9(vOgchety1A5{7 7TDu.n酥ږ=9i :IG5gVpcLɕ8}~NOC)jZ]1'SN4=*j9}J]!Y66xvVWl?3|E_;>ک=8uy]RAaQ7#7 CthY.fpYwEtRE(a ' ZsXJR(rKw!&,ipP z楽%w}) )ٻ 5z,%= `c(nvRU*"yt^xrZ)(_?q=L3m^;4SI}fv_/? ^tG#Cؔaz"Hx/yיbc"zp3 SUuR_89(ʞF ፷¤6LQXX:_ga8mb*\<"983Ri|xJk`!᪝HV \JAErJ"]%*Q)BKjkIY {/SheI qDٴ4LY&)iP"Ǎ6,"hM`x#Ud>ZiHBgXtEWL~V^)S@do\4;~SCEu ~/Am@5џDPsZ"i5oGf^ůzQ:b SA.Đp_V{4%)4z`pk)o$z,-tz/0qQ+U\wV(Z¸0Kk oWtb&:pomlgiSufIޱyCQ^4 ?(z}&8Q[NSVyR*!T dpY >owp9AG82`NqI8)uf,g^˹B9giū!"=$nMBr0~HGV/U m]t9ZWGUaMBƾZQ.tE;9 H`<,%Y!6!{yQI!TݻfiV)Y<93AnRۙWǘś&TzO~ )]OT'U@ ɱ~EA*L$ϳ6]{?Ԅ#yv~ן Xb!pz. 31SaTX#Iꞧ k^X'bSܕB31u9~5 ܷ9Zڪ~: AVʸ!c@?d3뀻>mGZ{qD4Nn'*uY4 <=֒]kf}YcE@c㸗Jcs<,8 D\.nW7op-{br/];};Sՙ8Y:{%OM{ (Y}ܯ@(MXwޯݪ]1 l\cN>8q [mfz֨=:cFI 7GQCxˬht~gk1/r%s\f`q,},'Uoҝ`+6a+b%?Wmq񆃰pR]QFP!O#xeKѓ -qc ?U,E"mf-hAtݘQsEtl3|,sG pؘ]i ܮ%@,^{ 4Z57tfM5=t;', "TݟR+$s-FZ nrr Fzsv! gHXCtr ? @<߭`7WFMJغ˨z #=QdLHϿ8!TH53"x*jf:ʻ [`Д4ɠ'v6BZ{KE>F6m. &$%QiK8d9)+Î>D,ޣHClr!/0I>l<d x~i poIxr +Iqa@ğVGvP1{-%?DxZQ2Y *;]L@vHㄷ/jLHX. hofߖ×>o}7ғ]1ŨbjuPU^sT?j|VYviRZ](ӐMlS<)W&{43cyEMDy_,0󾪧_qPy[kň1K1$$H!^ `3 !.9mTit53ۦ&Ineu{=Q!c>bc08v,>X+3%ARGpg=vw3sLSH!`woB;tXA+0pD;gz#57Wc:Kg2BS~~9b&Fug|`j3ק@3j[lߒ ʄѓ")3rZ }.`yadY8I\м%å.>1?%|h 9^b(/)^n> LG\ahZ4DIڹhUjK:-(\2Lñ!  rDQ>Y[BG,Lo~ #ɌodSi:Ȏ)XՐU>0 \0 :a}Zqvvun&bY*?3V9tK y{ 5 @-e߂ċ?$jao,<VCqt*>D&Ms(#ǰ&1?B.atђvJ J}SZ&{E {Rl o],THI,萍ϻ* M&ѫtcskn|V<ר1ÉbݽJjk7PoF}&(Wڜ֎dT{4p#?b+Ol'9Y%8w*xIXw*O-ya{pި`3 oȘ=A'Uv1䵼[Bsj+$on%8c";Q1t9ԫbr؎ot:]/pD^tLz#^h"t\9 -cX)L*YM}Ieyoh>mw} 6mMP^Mȅؽ[ƍ zQܨa2 6i {Ę==A{Svq,]h3,XeOu!{2LÑZo\.ꥤa0ugؐfy]oDY'A JdxrIQ :C?}_Y˔_n/p<90(bG8cegFDXgYҬq`%rstS~Ơ$q0[[N+Y{ M啞y-C 5wIKzc5V]ojoG>l%6ZGeփPmhANTs)s6<${=%͜gzZ'DV)dޘU JC+īt]a; Ha~,lQ?3V3[7J=FbqG֠@]Tyݟ^ʍLJ{e:CLbJ-dm\# endstream endobj 30 0 obj << /Length1 721 /Length2 11252 /Length3 0 /Length 11852 /Filter /FlateDecode >> stream xmweP]ݲ-eCpww 4!wwnw9^ի{蚣kRK;]5<AlLl̬ui5E6v^+33,i h, G; lce 5hٙZ8ḽnnnn._ 3mR  +$QȀ gS;W3;sv,vN` iraG W=@QJCLZYI %!0[. sgMpodg63 _Ɂ--:W_}ڿ,@_LAZ {ǯ g Ps7ejoc/Cb`αqYظEڠߋ"A{`;=Ȣ,+,6w[]zil_Ϳ?bMM]m<Z} %. ``qp8|_A` ; #,9 ئ *e2dXb\qi3`maAxAXB2h&}%wJaB9!0\"|.\eWZat E`osy㚹B?wZ'T.)cR k,CgHP1cZti&^rEE`l]TWnSes$|vĪ]~-lGNUL4i`W;}7. OH{k"S86 'K4{q%L[8NܽPYK[1sB-r#!]VN Ƀ )fݤ<B}n:yxѬuɏ#<~\~"иt}7<BlwEރ?R Ӄ?h6Luڃ5lB!Aa#/՚>,j]Vuz %5GO8aa5<ƬX.iL˷3 1fgX!gn/&(Pb2"% LCWO [-PV<4$~(ԙ> M#cB4͟NըG4bf"r)Pඐru{t!W{]a/oԳ?5#i`mWC0bJCTLC^W0Y<BsEhFLF9HFF-$j^C!jܡxn\t8Qa‰n0w'j}N8u ٕ[6lvxpmkz:ݨ~ 6BX=:Y\scO94A2pO# [('_koXN |XɮR/暓`#N#T2ѪndD4&p,~LƤhxy7cI?ET".n-,L4DoX9d ܅yuD`o9QAoQd*'9g̩q32 Q> \}I0Ȧpr}HWGhRHTMА4c6y,jbAZךheGVPDwGb:4[ClCPmdpj϶W>{Ћ,|GH.8wnbs>z(SE]74)[gzIBK5!4—nKAG3YMs Ɛ*JI6c-cv3* Ln8d'SF)^CZyM<@߸IuɲDJK58ޱϏJbG<g|G-"!" 32]5Q!qn >x_m=(j(̴+G &d LiKVjSx)ɐ}-[h q̹3wb*B:&Nmn||q$.xeI5 $Ix1D\m O? Y..;;V#&꼝P힄shnRvʼnRFLVQ)fzWd2uN"[»l%L%]1 ܔ+֮f:¹l1Xo>v%GG3BOJ+c3fLD>M;3sY bkn郘UKT"k+m|PzS*uJ { OdCr]E ^?vue9 8 , U[HO`WK;nY7H:;Rzqp: loOQڞet?Q?E_d_E'91}->%"}\lpa`қl"sF_%4fJL^6<+vZL%R,F9)8#娼@eX[Z>-iv@5AS SSv qǘ?0֑y 9#;_$<\/%HOsX'2pXXBU-ͭrEE'ʈLn%ؐA%z'i\X/n̠T9$Bvum-D*QIxbM hZl!8RJzF[5x? p-׶Oְ pl! hZJYɭ@oc>|? R;͏+[c8M:iuLj+vjC7cjKh({~BZ,@LjzƵKqA\DrF9bn~8eӕ?Xfȝ. rIAnclZ 0d2ݧ  Fo=(2% FDZ0?UC(mѮANԜ׷b+!]$<}DA{~fߧ D M~޴%I_:]@ˏ3 zeWFBFoǭz4cRvR R> >_7_65$F si]Jyjv$Ogٹp*do:I0f"d 7H/,yCUtSe22>#6B ?(Z䧿V6Y]kQX)C?WO˚A3TH,NGHdBI޳hx7Yn7N7݉9tڒ(\k|6i0Sڒ31OAZP O8Qt~@jD%RLjKpT& KFS&`VGl͒vʠw=|x R% .*/GmlxfF8y1ħu La@4d;0󜘳[!L& \P LxpwY}A)K/>mMr"y,qa&'?'pcPpvїL7NʹArp})T Ȟ7-L9^cr~ޮ(JV vpgj]"2!̚(eGEax d;zԓ1U@@ nd>ʛFn>vNJvԟ- kGg]*'͛nbV)207kya'^]6DGLWd˯bDCA덝`<,(ud lbA$=rpg Z7^,HІBJ}"VI?slɊAufDt%]9A;Pn/srۦGtTumFh'/*˕tn D=|ǻ;)הJCI  4P|~ӂ(-&OAњu,`K>V5;꒼C 8zS:}@`NV~88zXCvgD.:4b[_2ݝ_q{yveh3\=DfvmiVNBAAj,;W-JfsÞ(jX(!3]:yUͳkTz},MĹAU=7y(b`C5-;Ujƺü2>F׋ JLA3jidUBI(D?OY] /:Sg'[x0zƥ}AdZ>Y؆KB,u_,!3?ҕ`E(^TDM: Mro!OuŚ* Ul=ML$@wfxPu)2`lT>D]5Lp/E06=`9!Iki5/U'1lBTE|8$DI$#F\&Cv8UR2;mULf>(LGnT4ЁNFRa&߂=|ֻHL*]].TG}:ہ+HԭHi,o\̍pnv8Pp)R.$=Va'yu$%f%b(45Θ%#QY2Hrzkh;#'_7}!s?0/J#K/uFL+y3쵴*y/$0ufnr;4~],<4GIf 쑻]0 v_&$jˏ[sb(0/urW-v 3Od^m5^f(#ʳz/U`fFnM𼞬څDQ^ e ð bvO,:126툠JJG/նj-m d &Y։w}&ak(·7'g1ѥBj/_:9<{ߜ)،&OfiŤ3>ɲ(ƈ9\ (MyrM;%U͉n[_vf% 0"kq)(cRI4K*uzPG IEYI#{i.'!qg]JFO0պ?rረ4 ॸ[Lܝv[ ww* eAd"*蚎Qe=|*!{!Xۋ/ERf^iwx%*JxY"Aljm%$PjbwQ̮XPc7=9!EY3qÀ#ُDn}1[^3]wGQ/o[iR@{,zk"wwC-+$I_w`YTp8g .>lVRl(o3y^|SĔ:54cP=i4s@N: 4yu=mqAv ;$l 6ЭJFFiFW؂{Uq/7O)Zװ~+n{~w~͍]oJz_P!*^ti^1{weРg|ќO2T =3oM.q=SoKnօsnn<0ژӈ,r;;X9%B^SKDNOmDJN }?x"Qs>0ZT 6xKUnxra=C'v蘳O<"fo7er+ I"Xqw ;\wG:7MHYKt `+c9er7cx{ ¶Rj=&vA/l&Ϲ4"CT6e)rlz3aQxr_Pb= :H9mk(zqӎ*70j&u42LwzMK,u~1FJXib&6‘D18ok`Ev d0_aO/i[ӿuP|@9P7ɵ |@)b9/z~x ^1Kl$6!ӿYRN3y3hZdGL2sٗ WlI ~CT8QG||6"<>[:虸%yϢ=Ͷ'j{!|1pv #_Lǩ_"a,=޿y6͎gjW:|u;8ԥAVt=V>wer#UʼQJLkt3)Bф~bD~HI{Xkɋ0Wgx-АH^C<9 Ws `ݟ"4LFō"=9׳MQʷ8AoÈI׻<lq;p _$pR1Y},Yltauڞ8b vO2˞hɇs]a-)?E~Ƶooږ`X>`G=D n1-yKSny~}a/!1SM9E;-~k%[|h"L@E%x̉%- vea $1E!BjA,}(AHoZ5ŤSdFwu0J$yTGm>Y4:N#QwA2rbU]t<\, kxޣRb][+6 #ulE&r-'m19 ^d#c_G#[C]Йkwu26?rv1 0&#Rd>[D&ƀ 9fXvq [kb ]37@(U%|I߽?f73IjI^tr IڂitHܕ5PU]g\5Z+,vQ(gW f](dL;TD7iQK?Tp]??;#J;ݕ)t!dGSvZf7?g zȬ-y-S%#DQ֗2bWH㤦5}!~VRx' R}CŭU $Ḭ(KȄ*!'[A3]svSةWB '~D+"Ԕ@r!|mc\ygP?LMcIʮ0XQ]x2<$Q⬤(#0Aq/0W7尘B$gBh.5 enCl!3ĂYvKF9f?^Cmɠ^O%)'- 3 >;Zvm5 r'Qc_?ͧPaf⋊ʾZd'wv9asx;Zk=iiܡ)ȔqP8 1ʤ.Aic3gGkYY0 zlcZ,UDTqn;$*ʮ6ml[`bO?/а$lXkvJNŁI^8ŎQ&.8X/ ,|Rj%} E\ T4#W'I.-TKg~[R8<9ȋ]Uh5,EZTs'It:r',(I$/zD5Dforo ;C? }fQ \dܶ$/e Sjc [jECϫ= _ayXblUO_{9*BSsf# v:n wr,''^5Au@4x m;> N6T&7=4lQWg2g{+?/.Vp 9-YӨvg[yz endstream endobj 32 0 obj << /Length1 737 /Length2 24794 /Length3 0 /Length 25314 /Filter /FlateDecode >> stream xlpo/vIvl;m۶c֎m۶m{9}o[_U͙EJ$jgaoHHPURfd``01Ð ;8[6p6LL&FR3ˆB#@*BG `jamאPɪLlM .Fi #['J#? _19;[WG3uȈ( *D镅im61rrWv4 2_`FC3 [&akj`TO|0cbm-k`cwq6q8ſ$Jd?.6NBPm?b 'Q wcy wvt1X?$cblb!L6?ֿ礗RMo@l Wo 7ygG wݿʅ_P:JH݋@ϋ _8::{ڲwejshHl8촾 2#TŠν2NL!}A d4Q2k1IoֻB[}5*,MĝsZ<$KfyC)/c~Y{8v£9J7>u5ҬyH!HX^. )yAyaf~c8f6Pm׊?W{inˇOy73/jj:ے"0l^#6{\9RK^cj(TdzzĕQ׎gNؼ;BiƲl`ƹ'p§У p@f  7&nMNbYWϕM_Ю"_SDUW=&]US7=J*W osyԊJ㺓 'Nu9cڏᄏ^&zg/,ˑ+ Af81t^n,kә%Mag:c'YwHzjtf}Ň7 ϾWVC*- z0Y v7xw9<|>G|Աq ,i*x!:-z=tC>پkPǷ$记>$VHUq3&yej2Q$ iC-xpڟ%1mm~r%T![*I:{*;GUN+yIuzb la!٪](?E#hEpfۮTaFhHT9HGCBem%bq Lm̆1T'Ņn)t@L,fq ?] &?*-=~ 1AwXS)~LY5>5i٭jDwu`V;#2D?6NFrx/ېd6Y4\)kU>$N):x}hHs rqkxމTm$0ބu UAv93qR*^NJځpL/R.|nPb k|ul$5үnVF9%UR 9)WK+[V,l>cy=YAڟm1Gk?t$4vhq(]i wh)R|@R`;?UvIhw:gunAD@kXxk]! e9t'.Sn-**32T  E Ո,~Q"]9N܏܃ZJd4}/YXIu{~EU(܌IŽ;A@Еջ Uly؀yV%[iݹr|9hl,o8z"G_Ş>Wa> %mxU*3c璟dj5 iYDW_:aADC*z~q9oaȡʣ$"7 { :TL!ii'+ӆ@M:.|`yA$\`:KB'ڪj0 ż5ECdpLl\i؅Oy{!p1ރ=_a+/Y?>(ϔŽӿ' joJ/=fE ?8 Q%o$pJghiKi ЯKbeJgQ:4LGX;m靁r&)}&F޽V+)cqۥd":^2D{NvxPOI4EQe] ̦qy{\i5|IљٖޓIF!  CKfW (t`@᝶gFST=I[vS'*^pamiJݶ.4]JP}vd- \*xm؇lUO Bwi[S~U$p]EQ_ekݎή*V%'+T̑K8 bpZB541,n7 eXrfJ5tQ1XB!Q˞vjЉG=<iTg**%H| G(߉#;Mu|A7ayӫbEo2=&L{)s}atZ ke?jA[[nJE*pjY]z\ xe Zv ^ͣF;\v(~r·oG>Fm~E>3ݔƠw)X{pKN\mq 3хq_h'ɖm[Nr$'rE\)(f&9+\ y +9nܱl#_D%DpCkNU{fȬJybU\s+CZ!|l^!,%kۓ5:ߘ^HbBODeAtxU GtR$Zԋ5i[ r:tj#̔*J* {$F|7mpWͦtBY[)4"uuu~_o>$* #۲w(ȥ0d0bI8&UOuJ0]^ !rh@Kt0c2)s1q#ϣǵ];\LJy g Ke۩~N6JQIѳ85ApJ101FmLGq+yI;p~?RPy9 /ZwIt%g|DX e&3R"<'>1ߟy,S+kqfΖR})JRh1i u>t>7mK y:H|>`r|s"Ԓ'FϨ+0s1iR<:-ֳYutL4]KoLA@krĎ|7eܢ).\ΛNaMZK~fO@oHFShhv8q[պ .災^1MH|!oYz}Jm%{lf~х,bV uze^;S97rrqR+ yS]n09M+kk* ;’s Pt--v:Qcv&ُ >ZKh c`d[hc9_GjXF~ IS 6`:^`bFdMr{:b<!یs`!%G|uE"^HGw4.*Tɚ>d;{|׎--Q]u^S0-<<subVusҋ5\LKSru s&o$WU^ZX#nlOˆi?Z1|+$&!7GA92XcxӟJkY:GWGiv;Ʋ8 Fr)8U#RF43/[VE=c`(D䭮6rgraixAgj Q4(hnN#jk XZug!JGogj m4$76Ũ=AΆ?נXP6".x7+n$S]m-n#D:</h6Ƀ=z ~e'N~P -rohf%KH+"&d"/?:"PLms C槙Tp\[+bufJc}% _ ( w`TQ#A3Lkn2/4^(7˄옽# Íxa<3$4']BG , sൗOup*2`lR5ްQ{ HvnSBBy/p.G.u s;'ժl\4ήBƗֺNi牒o!0$)e}" Tb'pIk>;vB"A-8cfc>S4MpX}N;lud컰pۖ55U<Ā  PPMNZ50i4Ybۭhǵ; R3X-ɏI-[Д"kaLwyW+; u{z=;!,|-{w0V~ⓔ-7Ge|0H(Xڷ&"hLD3H G3f[4#6olQ# u]GI}͂edǥT[ nﳿQtAFWldR:-x.)]{xQ= */3qZ?'s| kÚsѷN"2+U}Ft^etÚ=tcU}AKJtWɡWw0L?*a) =B wje nN* >1{: ~ f8+̢b0 <2oeOCPjÍ;Qr;gdTI'XpV}"PØ:IAPAUT킛Be  9am%% 7NPV:/rAH.ԟm*m^58S59(F1df~`b2֑9-{u =q |wș80VSJ,"3TUۜnWqD^@=+2a"S!qTcۡmv[ Ejh3\WHVNG䠌َuWnɧN'!uM20T|ɖa˽L]G^ [ ͌ efݙ?_.jlQցV48(.Q{n\6\aV^#~DFtRsd̖0?̑ YtA>e\ۙ>z_Mv~nE< 4ۚؒmxD: 6[Y I(Q@ZY7͉yd?!j5v0K@ e_+iCfڶDߜ&UX!laV?6$"7*#VoZ0lQ2Hj.b°6@ƌ?8}OZ/E>G | <#\(~OozUv[ Jmn1*Nrr)?6wrz[Ae J / DNCu!F,?*A9iߖdd6`6wy\+6}s\gqqZ*w<{ f>ڇZ`62*Db_kUh\~O?`r03U4Dzd픿A47^jʹcO3zRM+ VdMCkyB~6sx ͻo`rk5ԵQ[6xw Řq٩FIz 6#laUmrܼhUfěJ٥!J%.8xh[.)v@ܶQ->C+)k#А!6޷Wj68HV&qN _ވqc%B?HWw:XZg?吙4#D ò+y}29 T6獮?@ Mge( f+oE,3C0;@HAy5&J>;Egr%5(wۜ14yeEe$̚pT@mIM wе'W*0BoT3u噄W=+ WeviƓ$K)w&>*Dl=ojbZ7l c ;{ڕұ3Xn~\ۡUywʑ;6UtQm߃p lJO q I \YEk!,>@23HOKNUL Nqdͫ3a~{|e< ٫U2t-nk+A&fd>8p|TՉ,#ᦠłK=wը?ŗncOOTvb[T"8}aKyGZs5%hg NY 6ĹNxb>f7َ:2$iw]Q'cenޜG[#EAO<ҮkP%M,ڰ U8v%/(p{}g^#&nuto2̂*DD )\R6BۢQ(rD6g9WBe< {ix2z̰|=^mufqn`y'${d*˙ >[Xv $$CRۇd&?Q:CҞBF MG`Ll.Ler:G %Ҟ@ݟHwmjp['h DTꑔ< Srؕ*v<3pwolJQ3/akစ7d!qGl ㅎU""ڂmѦl~lQsW>l6^,se&T7pq48]V6`5v2u_YC(Z 5LC=ŷp͠#|-# d:LJu@HZ޽ط6i>JlS̘dD4rfL{r$ &GMCy:*sR^"ϙ Gs&őT21K I烞 hhMe^ZR>}fKn?Xh< ~wW =y2fH۶ary4׶ l8FR=z-aΖ'ob"ǽGJ&X#p/_yq…e:,[ڏBXdčvj4>!6D F)w9e³3% `DR3BCgؤV{xBM2oNה +p$h5?:3ֶgԥhdgx!)By)lFzWl_6pSv z2晖/37aՇhR }OgK j>壙t GVY^?$#0CaMImWaYs;*78|-rQ}b먳Tΰ>-}fKqhYeK1yg{U~Xn-a?ޮUi--şJ&}/3A95q`VE blD6рxkRx(׋q+UW>/ϊL9Jqo5kn4,K'ToxM@ 0OI^F|MI Y(TJ`U# 4/ܑ/Z<j*ͨht_0B؇##L`G34Km-[l1 se=-"Q-"I΢m]k̛< 6'edLhD*u/#-! P&GR33S)5h`!#2Ɋ`ap+W0q$m$YVRNc%=(_@D R!ֶV dmr4 1C%ja+/@CVέ~v>Ġ-p΍]! 5XH}{}:_c1 "2~7k uoYjB7z|9-ԌO'*r{DJrQM{Z'ЕO6 )i_k;Ghb׹6I_~Bs 0&oMwK%D G"z֧1524Z\dŭwԬ('O)U N"⛿K{ HDK瓩0Foc; |}\R anJ~GRq2ô+j]N Iz)ԹBC4&n\9ݣq1$Aђ-PLKJvoU 񂟥87unl%zrb_=y=[7nq{=f޵u!un^s004^ 7yb-Yjf)D҉RCx`8 lt յBڮ5u{[LP̄rp| rH?xk< |oh_t9|d{\i鲖D jw``؎ˬؖD/ fkc2\6oȫ:YG7x:{M+!BFY\$OB ̃OVk?#XJ%G`AĚt/@!?؄і:7XQE.?$1o'EK̋t ?䘻b+>{IZ`} Չacz N `OR&֢y.>_]I`F*.q: =M J7|͉5uehZl^y`z!^aY<-eO2:.#A+iӹm݄ޭ_B02|}92ݐ[$<0.g I7fnsu9Z{ׂiGeWY,u=;<)BΎތ/5֟&+? glK}%Tq/ I_-$c!(ǝmPvu@Sׄ44=C⍋D9dZQ0I 1T5r>O(&Bgτq͜F:s4(XU$`J $#.%,R2TUa1.c0;GӗJKŎҎxEx,zXh A[cǑ1*k"Ӡf/8<+ GV >R ]2sbQyx G,ɍdPWqE Z 6`;h`Q3uXeJRkXQHvEm1N]"5zoΌ!0 eW(<ž&nI~ Ip]n;PN@-F6 66fؙ]5O \qRX"٤h"Ue}N0;B=rVrA@s~k8C-ÌMK:46 [ kNƙկ;5Aˊq ϲn|otפAN(9dEs 2 v7Ry9kx(kuذpJpt)]Us8G4vUjy25gm/ΰ 6>k%uvqXʝ6)u줞|~ 4kR3b>]ɹ'eJn:,0wt?\ki)'FftEuT z1`$mxYY Sb5Mt]Gtu좩W d,#‡|twXa c"A0xYibp>E?2-!ke>[״>Px2 !1xE6ɬi1jTgke>J΄ܜx2kEQC={oc isjWu+ F'˵@޵6*2{칐pcr¹`;0MmRET]zFcطzwi#:xΝ I "0>,1豼e$|l9P2$iܔc^ #${Ϝ[p홬a~-Pav=i/A- s @ iPՁV,&`\-sEn#&r#6ga`u}\T2—š f@WbDE](2 49*K$6Gi}|Lv. |$s*,Pw8!oAˑۥihl=I31|c$Kʍzo€}dynDaj:pRKK坮7Ɓ`Ay \*$18^mDYwap 4v/Zcܰ5{-UVo/u"Ej<#=a<)ċZڊ}ɨ 8PW/ ";-3jLߦY#D_=)gaۉ JuD1H0=OYjb@w4)/_بWSk?=,γ3q9k +>j*cǸ?W,ڦ#̳wBNL, \mon*-KZ]8,MF-Hvd_w\~s"T,zp^+%cle̿GzumG8yrɡ&74i5~a ѽٹ,[*Ͻp,ZsM_:LPE98Ӧ;ƹ:c3-O#$-F<* pY9L {ۣ\5;U]Ai?QB$pW75~+*p|2rAyI$w9 aL$wP!l~~X0"lp9ˇrCXؔZٛm؉aH r8 n8Dx<?ݰ"8j5b?A05G?b5`j[QpQCʱ.k LJ\r`5JY#YC)2F-A^7 u,FN9H;<%edSepD?0٩S'%v&)-N1ep lq0&^1I~]c/1a8a0ulSK=e F1HNE.8׏Yf_.x;tA-QTOX*{))΋g9/|/^ }?ށ +[nWj|j! b3 W{2M?ㅘe4q8;`p_Y@VZtje)Hٿ9 m* &R`D*W撮wq6 +Tѝ2ɽh\R4]SDD-D* >8L򈖰&xprrwkpLؔ0RpP5,u:IFZuQˉ. cx'2ʃ M`ΈZzt PdE!϶+JStBL^DlKO)QjRH{r*I)5rz S^v]6wº|Q'>`\s_K`1$N_q &XNXK yl<_y1\TȺaOjK76KfS@{nl.I N3+ԵnnMbv.v6#nMu4 е:7źC5_ۭgMXѠ0H%٨H^Ļ(=,`ӵeH)>}z4Sshf1֥,Rٛ1o73#u7CR[ؾP;ujvKx5w=s.E ϵEgf0~3ZF+1ۉ JuMr7R_yAN3Xi(WRc] |hH()NxlcZa[yITM$pxp#&D2mhf? ~@/QBqj`@-cм8[1E><ϙ[U> 匬{v&Ų8|4BMςL=I3>0!}b} RMmH7 .'} U2GN3O̝631( 6i]d mq?wT0>.f.8ވJ m. ٷ O؝@4mEV%OwB`"2qjcY:Nʽ`sh^Qo{_RQnD9   N9P~庋 \˷/<(~ QDǮҝ7Acμ4+GqZȬy.(&[Ȥ?۔JnK ;bmf0Tpm@VeCLS-,lnPv+ ys~t2%vE>]rT m3B>ZRǑY$Ouk `D:x*8 pE-º5NCf #QIeapqQ.Z+ajB 2h_|$i%߰xN [0ZZQanTKWϔu;~"8$UY߄ޘmY[5{Ry9| /M'+wBN|"9 z͒ ~?UWK7A1{Y}V,u<1* wxODgYgģ ILRmԫУDN&a^T36$b}^\U&ϚUy 5,MhS,pflsY93\ 8D?5ڒ &yuf %Ӹea$rC`H gFp58Ȓ唧F$m_GwN]UA38 AGOz^?'{6V߿U.'zr=lŢbJRBS uw4! MY YG8ឭ n\+_^ؽ1I^()_^fV{t`tQ/1lS !NiEuR׼iP<}W @: sILh; *7 eoWP3.^o[OR6pn ϺNL*. WEhٳR{+)?5JG&m ,E8HI!2.VCldi?*!*Xp_+ ٘t \&A1Ѣ#<2wS'07'ל5H!l]H&&0#/=g?>ar]bDÇ[vvy=UÉOJAEY`:o;m mtI= $F211nV,7^Z=M:Bxcߦ}D;|"2a . t J-A(59D_҆~P1 tn\|#cW^ J"= vR~qTQRX{Vؘ='@/WRXߎ:9묾Lf0/I%I=K=Y;%w"MO}7"YP),i՜:GA>zujУ@A9Jϑ(\ ?ؕ&EӖm!1S Ո(]Cžnt?dtKf⼸ ,: Wľ4H`qsI!&_zb*oBM}do`*z˶eI؟19yE3/dzE۪ (ҒäYօY C6ˤHuCuZc`21lI_wbLDpZ EaS\4Mޖ_ բmX j?VgYT)r].W*TkI@k* tIPv:m|V _̱P9(t(kIJۘ$4GeܰZkSYaLoP*cߤ5J^}O*7qRd%+BN'&/KZ簠ۜ K#m$6,d1&,#Wo\fڬCgBN(Oq'@N p/f?Xy༨}=E!;4)Hbxq\u2F7m '4_Gb<6!kC'x`S?^#E; JfMϗKrNs)L_o_NN- Mm@T(==;OS5–\t7/,5p}Y">N> :9̆g.^Ȏڳ.<>ޱ˙ar]M#^r cސگ?bd#<`o[&H2(B(IYF*WllQX„dC1(̼SeoqxmCϡ;B @NCb`0Q٬UK+qP0H]J(Nh<3 {nD¹Ҏ=BsՉ#p`l`o&1CpJC蚤FզBb$8E~gojz7s.pFh9>(s]Bm>td݂K'$|ХfE^0Wf,jv!Wq ٳ4r`nutvVSQ en,Z.j {qdnHv1:D= #htޣuFU&(ZLڜ9V&@/㜴wb-i÷i-^{Rڞu<`A%ˉSLr$&/]|)o]'.'7z2>3.fn9%DRw 8JNhO>;@NH[g)mK Iy1EDH?JaKhX۫wc0a>–W7Ooqjs ti"Dr# Rfָӻլ ܆lS2;5d 2*' !LDc9p`JvFf0z2Q-`W"Mw1\Ri SkLd! ⻒;8"#X6 aT SEQ,L5xrctXjAsg'<1 \AL }= 0Iqyb^M\U"$m+jdީ`2-{kF`l\k pxC 'H37YܚpZ}nOHuV-,^3'kiP }|7L>euk*i~^a߁*fcJHF242\SGms1U&K+_6 kT#ǿD`$Vm'")m97zy:.%U6C=,|.1Ikr큠#1~[eZVkzT":2i56noKS{)ZnC5v5N0gT 3t'TTn,hPQYADÌah88$~v 9 3ρVM[Vaib㉁:w"\#_EwA6pqdxY鯦pe&vطH) VĄ!C~ :PY`PS8~H<"?9ZxpPOhE(|˞׎dKVyX^N1#Gzq!=|-C}9h!)f> stream xlzc(͖m۶yڶmݧm۶m۶m۶mo}s'ŋ2s2"PIΘ@ITY DXFXɘ@؈@؎@̉ܐ_FU+}#sksU[+[sC3n~GgZg^)8[kHȊɪ;[;XH8S:X[!012i?8ZȈ( *) HɑeGMJ?x-B10:@o6&69럀)MA;[Y[ Z9;;;H8ͭ7\him7w5w367wp}]߳#cldlNay5r̿FPRO-bchkdncJF1-o"3.`FEO_EB_K:u`!abd ``f`!`b_:;88Ro_dlflbkdR#R8WJ57B:sh>df{t ;ow+Lk s29EVL\aS^DP6)}c=@r93FҾQ!Ja'nmFB )Ca,ƀm(4/pS׬(T^cRЙĔ.z&2)c4HtIMr_ih n V}coe6&X%!s; ~AF{N|7e+ZX.NrV_wb0X8ߙ"DmzЯ>.~X/jhXBIYp6C@zR`8&Q_ҁ'"G7,ckL¸7=&A8A="J d6= IL՞]dYk2}t\ߐL:8~!021\޺s4 2 kT,v|>g3Sv”@h 6#t^ ^UYz$ ` u`Y(OD *tCSoLLWEw )~,PodÃz8fׄjea $OzF^DO!|^5͉_X| |;v$XAk|+fP"Oz]dkNV9‾sk7)*W1W'Lۤ 6GDws4r{]+H4yKv6㛇MZ['0)KakaBYn(ԁ>D9{H4UZͰNBe2`$=@]:2'ɛCN$)PBO1-^K -zDmDd_C$#խp+cU(eSѨ4h8WiZVz]%fp\] JytS fVk 2:5؋ _^տ*/8z&E"(گAi jr⼦2|kр /!9Xp]R u`iШ8RI慈aC1u)4EXs<, 9^x N* jo^+9;kǁϹ(!& [lxuNߵ(Wg_G?P8-5,+|l]RczJ&Z߹ 5 zg}t{cHo$méKdd.,,i]t$^Yw~e`XaiRb6B/fw4G8swT rIblE!! s6Wh'LH3:ej87֔Y$0ڡ@n獆(Z&D3A#;Xf9!X HAuUr=$.UYA]:ZOs-isl~zc>MOs$(N,N 9%o~9ޔNGдYMq]^dGEJ rU裊;u),2n qOk=6ili= Юn ;l=y41GCdȲEuaI}ح^K slNf^f~nC\虥N}qREbPsz]/ t9Qqo5ՙ2eM8XAb~uP{ڨnH-&ɝۈ19ְiaO;O1 ڂK,Y6vJ]NtH^hZ.)}q톤 wZO0eC.pv墌]g[&\p%A{PJ23Ж \_`f*'#VV.ZEm9ޑߠY u> )FezcTϞ5HSs^,[J&[c5Dڲ4J |JY$'kpTIA >uY|_pHnaa3m湤BnGjhOK󷄣_eЈI32ЫuBr'֏>zˢTkɠ!cchwFUA:}; XH\jhTS+k\TbgsU SQUUxvrz#-Ƃ\Vq ! tRɕDQGYDjN3[X!ANG(7ޝjȊfMfLL!H J;%Zpl0ok?uXe,P~Vz{r#%dSP0ky@ekU_k΀R%$#&fPbjϒY"}yh ̭|!%uI?~tK4,c@eϏk w_Y!爾Z̿}VQ~ۢFrx/4 jZ;>f7*WзW\ ?##" &ᵷ,!yKF`6rRKdsʞAcJ;|}('hSh/nY0@\jNVP592x&"R|k&71rҬ߁G9&2]G%q\C8GDcT_NJ+S_S^ 2_;c?LexV52̩,J2A^[ oR)>'~4ѣ_niH]0q` aYF[R*dFf08ˠ9g{h`yK u3_#&_wӭO:np9müXE\;M92KM_1gyS%cn'pRMkCw܄y@Y# C޺lڦawO{lΜL2-~+>RKߞ5V7ϯ)d~K\P2p`hA#~ZI!$RڊʏP TrMߑDz"r>d#wִOF\/k_fƗQw)){P(՝cz?#5(8B]+W10Ҹ?s9ZBq͵0 1AKܟ 걁V[.ץBL8Pti ([9 k7whxΩv g]5]Iw5I[u\a8;& e ?r:I+NKXmp ܺ;8w~jyYF--0M=R 5'mPk-Ɨ:-Js! Bي#n{&"V2AƢ T\jQdUAq9잀 hS^| 3fyQ+;O󡔾,=;d\՜&ۭ tNo8$;|ϝHاA$WWr%:C|tiGB /7jf w#GQkɊ=㦶~]3sMSE >!Rj2a\ɫx8)T,Fn " g-}k);&a9lSrwzcG?;;S,-]'A"RR&Ěq0">O|vw5b ^~,! ~# \3dK@ѨGo>LӫsBzQ1ܻ2# %ҋ?ԳEˣ?jjbǫ # Al{:19Yb)`MuWpMfk*tP'_ X lh}" <ѺW :rF]b&G띾`k(@}A.r˫8%LvR0.b3٩8F!ԙRf?1!KZ(S3AJIR0vd<+f {e81ɆM?WZÈOv NYT/b1Pv?ުS$ ?]+HRbwe;R &?-5*I{0i0Biˎ_:o2<6Jq>_lJċ3u}c8gΩ5$BgA8;lC_%泱*loI1L؅,uuE.o$uZΉٶnd<=4뜙h!FsvJZ.;j@Ks| 懹ǬVu㴂W&BcPl;rK!eb}DXGw1.y+Nn~੯G^gGj sn_ۄA-GaQQU{`=w(L?'N!ʅxMOT&;'GWIcV %K^u~S40)npó Na,m#&mIv(U+$q~r˘ϱ1;RkCPخBPC8AZ} ]a2 IW=pbC"qI 'ȉQa&E˪ iu! =~4^<\QC[Ÿ7)j"z݀&hTB7ϩj>Q_F6|{(>{ UnjO oYل)9C+2J TՌXt_L5]C;!~nؙJi$DJ`N7 O#/3r[)҇g^G<攌3ŴI,ѯN%ӕjFtv1d;IVϘ&k=$Z@fWou|f3µb&y1iA*F&|Fh TTυC4a4ޔeǦFD9/+RL,B~0PW!i&B?=EdUl3zacY?>1iث@=3*m8(`]9$jX5:i[T/ݏ}$ıjwhW_];ۊmK3 i,^<ǟ#-NˉʙVuu#̈́]N@ ɿ爐S3)p,K]r"8tiASA>a0b3 f#sV}2**? >[c^k2\jj $$+S_W;G d#fxl#K3SyRB8N2)jdz ng{~4H {aw[A9ٛ;tjcdU(RT~tx^~q<~;{ҵӦca!{4#Nw.ku%anf(H֮F\H!ыh=O;wA*pC) [(.'s1rP uځyَ!\>iʹ?(uI2 XzwEHڙ7X[rw>XQV0q=EV)#=wk)[ n jI۔B oکiMqUKlI<{Pc++D3x蘠4?ա>U92d9T ^'i?qS`{!ZK4!) "C=/tmR|/$MTzaF9[OcK? W}ߐNo\ ݕ, :m?-vU,Є@r{qJI\B$QQK|.-ݶ]UӋ;':N {9Y } sW RVWs{_M0@cv,>F}sG-A>$_bq|=?O"~_%n(*" 5@p ™濻uݤN\|}Q&rbe /=fQ_P< phZ"sGs3p 1o\ .%Q.][2h 1k:%mM7@+dXSIBFy,M:e@u(=ͮKߞXp?=lcünN 廗qf6CҌWs S^OܠTfAF[k#x)K Ws- bOM"܅|Ѳ&;&2,G@&&Sp*`#%()`i+Fp K~F|uL'Ie[Ƹr̹;G[Rq`NM* ՠ=!A|.>&9aPgFH& 8 YΖj gk@@> k!SH m1VRAuX ]ؙӇY >50Wc*"cT=RUvmuo~ Η/3lSFs\$R9}aȗ3MB5vkTJ1x8sQSPI𜵭)5%n=-C^݊Pj#y%.}{OLnbo@7G"I&ʏ(%B*[y n喳TO߇`ns?%GgI ,W`V[ȻB!0s[!~`3%RG /U0 rRr( ֪Aj:Iw-y{ou gPÈGRW|ȡaLf;ÉwһsC.hWE@ I;})g^)uiLD#E|pc٥?%X"?IZmc2,vI&,Ҳ:Ls|LyEb?S爼wPj N o Q/8Fi-=)YWbine$?BP)gQuv84w8mҫ F_!^N4P\I\j> uu~q"Y[x:{( %b 3o2ufCѩ/uY3ֻ^ #G,7۝mFthqqk[M Wj6;x0)qXs} QKNFyJF^ѪؕfY )&kxLi\Ⓖ/(Zj]Ɵ?N3ey'1n`F@te[b= s&sK_rQ[(yC̮]hyje2ɾ=SJWv|m\pY#E,BL"RVwg{.&b0̟IϴÁgĹo}T?7_ dcZ/c<'J-)&6|#y:8//<ʽwDi)SQMGsp e̲M&;@{-mQFoSsUxMV`Kt:i ^?elx:@|ynZ[tXwhb>ׅnUGrC,N"; u-|ޢ{ӏr+11Q.ׇ#HR` ʗ_W,ءsN? 6V,:A')2x-Õ:oI5/FӣYxC='g M]򙔴^Rxʏ9;_j vnՒVcњ/i6*c;;0UL="ok2fir:l1C5{Ro9*0;&Q_h! ym1ʯڶ [i aF3@<ܘZ7:%lT+qr#zܒERUf( wIX/DAQ1mFs'ӧ bxk 6-yO5W7 `O.j]dS@0IٻgܤXRɰ>Щ=0d-)Y'ss[a.@;`@[>Di{R:Cb_q.$OC;F67\ Шvl8sxmt+ 3c[& ɞ1ߔ$)!-Y;ǭ@JC z5#\LG G7AM9ޕ}|/\[ (WokO\]"86)h7ʀϭ-$x4q쒾_h<~/}9LpUjRYAxJe.ޖd&6^kp7O-vԾ9EpmF3Ǐ`总3SuYdCm?$Uޘ:}>PBZT*Z({8W~Ee"WEmٺ?at 2_L. 1PB%nkٴRWtr9"9io`6S^sf]dž~p5d3]j9 kgΌKC9gxN2.hRx]%Z~]^̑_YsB v~UyP '":n(N }HioX(J"k<$GC y^#0vAP5M2%A;b_dn!ԁuvvSE/0m? FVU=cH _ J`yބ]A &з(\[A9NACtyRV,ăs(Y3B)N-?MUygPuG( E1fSZE)XzGAwi;xЊK(@m)Rxc^cV -`s̓ߝ32łiC+Ӡ!eVvU]S.qvV4F/$ _ uk|B/AJ4|Hͻ YGee!v% θ׺"3IF_Z)a<_VjA$;lʊ@?;0`tQ+k'NR -Uc3Q1]G\UM13Q)xtsMO2)}n*[„_4qߦt^mA&yQ(z5aR)~3p;5R }vVo wq5cj:˜ .`[d܂FDȴ.@S;qһWLgǍ ZRJ%;_|v.'_..JѠH:>ؚ&6 75pX:s#_lːW}GcouyqymW@i 2mf=*-xJ|qݒ`ۑ ~QΝX`|@\5rm{"tdWsϑt 4R闾eFIqV8B\&4BlhH\|f wg`Z3¤v P$DEc "ɒ FdqJs'FcgOި E`j쳳3pΥ;cĶp%GE3Uketw0n< 'KU\iܡy_2w{y,uuVSy!w߂ڪ7q!P[23&w3$VVI94!"&+\qK6(%~D s܌!9&Fj(^4;Ss6hMkgaH%Qͫ㇌5ȼZ `p+>FGϖG5&C4%);X\(| z?#[3^E&p=fwMj!>~J]>x- z xR.iN t],t+G%bh$6AY^:/ͰzF$gw@w,Fd먞:~W88N[^MOAxy>dvrpK~dL4Mý怔K}8qs IgX mJbdc:M4>:8> ymcͶK- =ZjGXJK˜IՙPV_o(oE^4 ӄYp֢媻MM$}~:ùK?70 l&6k\w)0çϧ}S6 f>|VEYڗ6zĮMav\'\hsl6i:Gj#kȉ>g"B=)ِ])G+HK#A`0a`8&[ksu ]Lff)cIVu@ {Qu ]Ji=`w}̫G~Бiex}T/TZWku,eu8`=qRT#k,,UVpO"/6kO +cXhef0w.-u?po&!kOR &]dtq0|߫zawڌ &ϧaɭvۑj5jR-kNӵDb'9~Kr~JdqY%C m%nu,wxG"a7`V6*4PW&+M y/U+1rFpn#ig!wo늭,/bO|`_"@YuHvz83/N nX@+ml\gW:@ˮ?V$5#\7)d%xԬMeh-&`)uh߫]$yu{v~jCwM"_cy>j*ΟA愹$AF7~tE/!Kbh0'y~9ŗ~t5,[ Im fj4xW[@RQk=dP39Aע0߿@Y`.HI%EV*U%9ZH@GZ%&r b`V7N}1": ,p;[BܔPp2ٚ-\=Ցإ,54ԣ| M!5Qֱ|r#F \+lBm#Z?5A(gLfE׌)y.|;UH/{ZJ2jDa(i-{xxaEx:* 1Q;OH}VR$7'"Yfa7x9+3mq ihp!Y/qn F=f(ƊX-J0CuJ7iYV_"(0G~ȚWUK0H^A@O;=;^SoM ݜDThzdɘϓ7VF≠X0H^[:06JX",w',̵./չ"aM,Ο>R\UuuD6.C;?f6uH cz]υON#DJ!Cd˵jP!vo@cTKn.O{k@j 9 Y]QE~ەbp {Wۨ.:xV?p%Ed=3ylCT%5鸂Ogl|?XibMmL)i½LиYC$+V+5%(8\:3I s?rL?FAVVρu|-4!F&hNLh4ad)|)Z۽P1:VYW8ղs?Ż0o ԎZ|=V jH_%̛g9 ;9c +M3h9#roz7R KIf˲aK7r6hr=HCgM,#;UGV]9 TT]j^)Le-}a$2kH~,u2lN+v$z57CכArk q\@y-L̗Ƈw= !Yz`CmC<#IMV IU SJM[[ymdݥlٌ.:u˞Fsggð<+V˦~1–ZwRַ2@rXGR{!c}RlJ,7{@=[T{ dT׀Ox,jTRzj:#K _f';LoFd8>="X L /7w-R9gӪFOҖlUMPе'0t'ZƂHu ƙv`^;3u# M{Kd*N YhWkzԊ0Ǹu_CZtw[ѦZp2;+C;|p'[&̊] .a@?OCq M:J6!aM4޾qNh8!joVmaĿX(A)2q2`KT8TFz4Kn9 V6%pR6ʿ4 ߾,o\o:XSRi9#mL|n+O rU+VMgeRJ/^S<4 1J5],ס=(h1kۥN5xHOs> F=: Z?aUKȩ$cY}znMZ@.6B#tI kep@U8 ]"Y9M8I0I*w >r&0kʌɌR&ҹ5N#[9E{SpQy 7rPFTx9|}Uܥ%zpIJRoJBn,%+:ޤh9"- 7[y@ѓG.~3-4г{hP.Ǔ{0sV%e1.y~>GuFV묆Eⵆu( +]pp8gnjIQnVj{7(p Ƌ$/n7^|izRy1BUMDb.XGӫ2srE:%Y+9P۱j7M@7oBAA+4͠Z q{i<>N-QXOuq4jcD Jrwu]jS!` D ř^De_Imr$Re{<ا&"1&>3# ziΞ9p"i$,/.Q0VV|>9J9&a4q-^~xǿ2wcnA|<_j<&lOX/=xsJ80kҔ5ڸqd1 "aoF9hIJQ5w =Nc$ 48k|u Ţ%KS0Zn{>#> VAɦ}=Tb`ct~Ǽg.>f뢔w;NZ4 l|KUg_l&Ӣǃtc&b.e]dN>/Bq=gOocșf8(H;Ŏh0Ffzw5ANԚzp)wKR<|;[)3G&<3R[]s\֮WsҼҏL{"Fn7-#ʩ48櫏Hf"SZXƂ"VqjD|V'V;B&ɚP-U{?uv{ D*pm[_)M S].\_r=c },ѦD%ʝ  H!}|w%FCQ7. ӌ}ۋ"'Ep1Koû<F2! |(@ لFbe)#Rݚl#Wf8mB;-CVo7t[rm'Qjdbj4P'LKئBIu/-Z҈!ۙp7(i7i+)Mk:p0;R ̧*nWTǂ2~qg@ִu t)hzdRykAJ*#aXSH]6SGf;gt+th5ɺa͵1-ge"1Z}+/Qom goHU277<*h .;ᚙfXCבX|j6eTyT[+Z#(ghM_( O/4.v 7+ x&GEֿcOAj덓k\fZ9BȖ̊O 1 zn#A߰W>@;qv*~ 7U:޼nǵytbuWGā9d˥.?Tfٓ}ѻ;B.G1 Z4C{e)>Zo4ĵX7s/܃ zh'f0V=ķ J3t5 zpZQq çUD_äeږ(G[z8bqhg{XMDezG̔{ŸL(T㇦Rl{%Pse~8t[dl0TOkTKp?L/uL6&6^%D8F~%FѲ$%qCimw 1Xv/L qEg-Hv"Rɡ,vRQ'Xh*ўTko[X)ϿT9LΞfTN! }̩G&Z 2kJVZxb1@`T+yaA/ݵY endstream endobj 36 0 obj << /Length1 725 /Length2 29853 /Length3 0 /Length 30293 /Filter /FlateDecode >> stream xlzspfnlyc۶m;olۘp&m۶=s:U?]{m IG7uo'  #3/@MR]GA!4qvt7q5GstvrP[ д31vh:9zXY=<<=\] RnV@ #(RH.&vewS;k3Hptg0st0&Wp ."cR8 wpshn+ٙdZ]#1±̭@Kk8&`Lri@Mj1G{'w7 @.h=dL!Cv+[÷;?j-Fhnnp?vwR|LZZ"t[6K89[;X6+XTL\ž*=#?/QQG/_Vfn'3_p]\n&\gbfpf|a6iEtt,k37zVFGWxwxs{veZHM~NcI~⽔UZ60ĵ7S떱L;͞{Q+\&*k\9҃Ze*Te,2?tȪ"(RFLOGy[;OW|'Ggv>Tc>"Tt! !B[^*~;]QG{sZZTAnTe%HB8|ys7V䝷}'y&ֵh +OHbڣ] \qv)DUӡܶ/9  N"`e*@-C ~Z % -g=bxZ\9RŬ2|E8D8.-!(.Q/*R+Fi[%޸eI|"ķyMZťzOD x:O~;3#EVNH7rJVe(Ʊ .7mlq]Qa6gؒe&u * +1FGԑك HsخJh@Z\sƏڝϭ`Y.%!qήȦ?Nүɚ%<4rN5HUv-(>Rq1h/o_cQ>* v/x7&-uZ&,ش[Qǹ$D\4j{əvU0*EjGBI1*aBvCiGzi_gR%`fқ]m :IxǙwgWĚL2w纎񖞭)LEşv{11fv1rȩxi&Ж_ cOALVp#8Kv}I1/&;ֆt8owX _#e{ق[=ڽ}5F_l4|QU)Mɸu Qݭ!7ɞ5o7kg`_P?H[JȾ.iMcb!kȊo8x$izsGUD t@mޏ+$ƇszwܥcVa]]TobAg0B8[ gD_["a3pS*HFPrD53 걖t   5]c,78. ImgM@w:t.Z.&=YN x$֚}f9|" _r4 M p؜TZ4V܊g5EٸCX)wqyMoͱm,!8I?.DPPUoƣ,O-yŋ8`]tu~]<}(p48g zws̃UjXfP@!sk@!W캭z0Ss;'g:%krme+z/oê6yZ_Gk)Lis=d 8LڪihQ iB4Ve̩SUQ0 "pFIUcO-ݖ-1JX80h:ŝUN-!i?{XI!|ήRlWIgg9Y(##:/99unM=uW|I&ΣGJ\8xE":h͉7z[f68:%8tk$wײSOݟPZ ukS_3;F<~W'<ZAH.ճ'J#ZEyN9rvy&Iu7}GΒtHf6& y vݪ5buPm|f+jwb9Zo@t BI5;;R0p%Yd)4zLPI}|SI=SDkK%cOkzE,vˇ& ݞDaƃlxoFU]X)&5B hk ̧ňIV& J 1L* 6~3mg-bM[͗YȟKIH!*RuASr؛nǵbM#c4)tTcة( `&? PY,%2edP ֖BφPeF+46zzevRw3N9r74U=0G* UT YjD %">J`!p;7QY ip<-cu#WUg" ?o fj&̥:#Ew;`%ex5#(UDw=cWݴR m1sf >ƬK,pu3xBb n;jm"r~!a}ᄼ X+Qj!ΰ6bl%&$cAv#Iݖ) KtJa38"+IB# vTX[%D? *;Gwb{^#Eo #ځ4!WŚ#SJvV lpѵS|>wL?cp$QtE#DHA F85rҒJ;53mpTN$ݬgh [O(b/hïq_aLv:0\Y9U£G^yqEP{aL-)Er\%jv0KM{0 Q@idAs|B7C:nBLj2ũ>Ni.*_V޹U? (>Ⅺű2_pl8X9|v[,iUhzWpⲗCb9jQŲHvFo-J, EW; r!c̡9Z6 &# rԔ+dQ!\m?NG 9'Cd[:XsQy)o/@l3MXS.bD"`|ʭ4dgai%Ӧxo |6}#sNy`'ehϸfa"rDj$䛽k ' MnϨ& &ʟ,be-fcz^@ > !SJaiQ/.& o\X{ZBھiS8r<@V d"z:y{2 .?A-0^] ^kB iN8Op~w.,PX^?[Ep Hio@nqRgݪcT0F-shҴEh8*pq;wzX#nOɨ4w2Rː7 bU" *qҲpi̓WJZ?EIc! +[݉1ˆ&J]5f1bĵ0Ov#йOXɄ0l6!%?$&n-dkW2<a?cx( EaAa]ȝ-[->&.( 'FZ~e: o:Q'ZXIt^R"1JHO/G=דB*K5oZ2=@DeԲa+"R: 1ZAEvZV:.R_&xe< xw철W`^pOJ _wrJ#+}g;L$QGFd':ܓƾ;)yO=Hf{ 8N(pI݇͠R- BƟB};I'`V+|*գ*fk7MF6#MǕ&5.~Z8yV ̮t2+R# Yvצ&Pƨ{HWyB;+`PU&6,y(& §?ܶ8n!*9_دchED΅iVW~:(_ `T.™HR?fd7z;@.{>Q/I[o8≂A!wA3ބKQ^w{cct36JBM b>7I{;3Azz~M|v59Rz"!M,<7>-Ue_X0=oJJ dcoK,O+&q4!MZ(Ԧћ+H 733냕?2ڴ -iEXyȶDĖ*b<}gLͦhG11`$ meѽ1[wC3 -}r+^)Q>'@QaNDr2;-խM)ө24IXBrCnl*u ՗Y92ί$6Tpg@D~uzVƅ:(2v5$W&+Tg7tgJeɥwOCa֝f@^ DD-,/m7YQo<5.ƥVJh^5^@D&)9KjW}4'lAb 8GCb)b/|ҩ#Açi^# %V9&7?N{ dKX>z)s宱 e]F2b*Y ^^ ,CIoQI,x4Y жyq]@Xb=SEM] uK*X߮ V@?i=X8:;aW!?}z,ôlH6]"=^:Y3;4I3bp4_lU2 oLӷQ>hYfsޖ֖Kico _z1(AprԹ+ʟ71,c=nAe19@궇ewu"Vڰ8&ݵg-S yLRm%%]dU<$gPWykPT{dlZYr4`*r?]LnK`NJS o}QM_f*jGg+)৅k=0y]hit)#1BbOaw||m|̓WV6( Uy CHJ+xr wx|],>`pS,ݸe]=L9|eP챾pF K]g֎o-łY`8C0n$% z @Mg B8f4#*7%3$(J|șUaGѿ!g46hv~՟=ljONc`*լ@)K%G`VpL[XfY!!Wa<~p9ѧz(),WiL'lFt]9KSXU"`Hfu#=yuErE BT蚏鸻0M2>af5y @3dJ/u+pyEmF0To8w 8]eСwbW|V־x*`9w(bnʏ62L`ɿp?ˋ+')Dܖ>fYF.!7c`-RƍiOpy!yrMlZ0,]ޕ/ tpX8x9c$A5z ^ᖰ5fl0N7чsepc Noڠ{T { Cz.ZO}*͑پH+Fz[ Vt#-n2vքHKt7mZ]F4A91߂ zX\e(*V 4BvF@hd2ץnK(vYD.'5P.p'{̲Ka# D$/tAz$CΨQPzb孭_4ԝ<@zk±j0Gm5/@܉nzQNQk p~('+| VNn17DC(oq<CXGCWQ'z$QVO ]q!:п{.}eDsFŚ를_h/-ረH|o()hU;b5S1nG$Qf !6LNp5ay=] zTz}]ʄ#"GI㱁?΃S]IOs*{@uSQ吘VDR\R|es5aM/]oTFΆplw屈E 򩐟=wlj36F-!prόߗEԨC'PONKbHA6f vVGc0ַg=/ l8Ց`͍bײElhhaHı[)$ncY l( f.USroq_zS;~ؙg=dke:[B.3*+0vVm\>#tg!|ٚ/?0"O=LYjHwgtQ|jLnmԇjRʨ\u!+Q[&7 [HO=IJd3g+5JaF?Gkꂁ0omkU^j'}FC<\WĞ4].Zя2MRȐ_?NkVˏ 13r%) ZB<,cZ-h8=9*Qw|$t6W mNA>?|@pЇ2~ijx3G,=YSy:RBd7씯 o{ 9ziQӥ@QypO W3')LbJ})󘿸3N&kOC7y$_Rzܾ.Dr$g2QE4j^ܰwP?Oջ.zsI_eHKcv;\BER YK2PU@CGRؾ=hJː4nR~ [Į)?#&H_Ul1%D_\'W}GZ0[n@<+te]w̉MnPBXώZF?bQh$ڤh3Zp,~n)!~T J[cK)# \=30FOE>ܐa[Jl׌=,ӕ)N_yu\vK ašї_71ֈqݟl|dzNK'=G\#ZOŐϋjaW"Ds}xλJ@0WtS^XB^l”ܢ)߷hn&,JL|(W5=&+?_D:E3bsT:L]\Lr42nhEwT`p"et#꽷m/HG0%Ome bK59);^8Wiaq0DPW)#gD\(Isuo#AD$@[՘# B'+܋+2y2A-тwv% jz1}a!RibM`Z2_@O&yZ˰{BDw؊r&jmٮ;CY3MK%(ɨwrGBe/m˥~8x6eca|2i̺ UD=4ꍫD ¯}?k-H>ː{Agئ*a9WZa q[|T#sloQԇIq8wʮKڨVJkv9L4p6ػHE^~>ی#<9}b?G:b*T @H0)6B-Ih:oh\)BL "%PztDyG cU ekcvXꖥbvfxښ^Fsuh53AAJ }}6hiF]2U&6۬<.|@Fd0T/i+Տu`,.XH/HW=(ϵۊ4#l? bgxvxN=$Ux_{um/wTdPiwWVd={4r/oUE_^W}yo*&0(7V / zVI ˽s mbEYPpCKF[&"[R? DO\n Gi:9[WCvzԾ*_ة&V(PY' aBy&PwLH#¿ܞ$yU|; 85833P(B+E昽Oi[x2{Almf)D3UNc5{Ā_gýr L_1hS]C8~T;=%B-̜ʗO {h( XȚjSRvL\@Ӛ5SK2×ƙO U,yB\ C|8|~ZMtviy`y6n YQ~(s>.GZɉmBWaS+ >cW\ CkXN(v Ndp*H>;R}Auvy6ʇ^_;n4(}NweZrY%ztP1!aIuP\ }u~nbR4^*co6! tlwӇwa\| i@:k0k᭰И,V*7 v$컸L47ܴK쟨,aiGVؓgA/#ie,/|i`2:ˮq|/H~>|=Jw`BQ^ dʹ%w↣a:`kC+ƁSMq2=-r-߉ tG{]<,fU6 Ÿ_jdW$4k99aopg.Td2%;[2U|xɛ[g2ƣCTxVK9\W{nЕ* C<9 !QA P'_ٶt5{9nږP k$ _6Jw؆|&3}kiO&2IfK&T_G\DG\5(?Qrڪ^F$x:Lhߩ=9ء$鳨n']=q\9ې5[|o)TK=t_Ю`6P d|qƥșa^E;ルydZ"pSD}5baG %+%ۄާM0xq4[Iwj'5rv4u2Ucm%$XΌo[y\0wWO8ֱTWܷG3rw{mx,TZU"䮤4Gn4ۭP QѭY%WWKnkՉ3Bp.v%)ط/j;k]YՅ&wEеeimbEv2t =L [Dף(>8fXuռNƎU${Rr$Jc$ˌ5x]sbf)z=J.MPѿ\9 |̛7>mFNДcDž^HKHs~Ĝ7"Bo7Оg뽩]eXb@oI{z7њKuM&b E:6 >m1 Ѿ.i扴M>?k"8LmɆ۶mvǶ7m۶m۶͹wf+z*aޏ xGg,*_÷ν̹|4vߚWu Ƣ|Kn1}Lof,0)mϕ;'ȇYu)$ '?yNbCo;\t(O".a C4 e7m5+&cVɥ!yV9y~xQ:LJ-rM5!(@_1T²[;|.RrQDrew%TEGL^B9}K?7h'V'!sf~34$9nMubG|aQm=1&Prܷ&bm\;y ƬFuC729̹ 5|YE|s HWNe_z}'?Kr=Qr(l o^ug"5F{HM1%S~nN7u*ڕ3ajmKXC8ÐL#$zjeͮߓ]d=1n:g誝6Vɢճ[4>R '!JM g3zJtrQ>̈fZqC,3gIF;{ oqx|AVqAj- a/g=$\حǼ}L1g޵ygJofr9LR+t`u5?F%B]wC_ U%[W' 5d w)<m̸Iɸ` eV沶ʭ\ H}<{MlHVS BBHCӭ#a5 :9DŦQU#\S#;w;}>} yټ2n1tM,gSid?95 i6M@ĠW:dJ4{-%T1Gi/X3`^mOMjPQolU' qF"rWLj2R9#49;'c.YF]@?;M.aT#v qoY8Sz`C;UcvI̶{un#K]/6j/τU8ڬ,b ~&!"O|\> y(i$Rds5I~Z 77{,rғR#Z҆F+*͟U7]·≏Nc'0iVD}0W7R\eG8VAe92G.*/׏kZCuw\2XhvO7LJm+@?Kg:]Cqe K\ܬUPƤ~]['Z`맩 GiDDE{nic.ީ\uMweawĪthz8Z0@g'Retl|=&+iy*|*p>S ]D+~,NׁWw|20EdlSfQiwp!is)ds #>oG܅,>m5$-|0=׋%HJ,>䚗r2w` رG/@3g-<l 8%PUJLhEI̡"t*S҅K* !0?݌t1_|s.GRCܡhfY\~sWuQ z1b]E\:LPܹjˡRGL*q$̺BY̙} Nƣ Y4\ɳ/NKI#$;7q"DRm –aޭ+A8me ݍ.Nyr^߰UgzALJʻ}֙S5kr.y zlӘo'A8O0SW{lVG^2ھ6&:Tӹ 6+a`iĀLoq*8&MouI`y3פjIErlҞ?'A^laWI#7mK]<%o w^wB=r/ty tc\uqd+0lfې*VDwACjG+]lIK`_\rMfq?qVq'46H1M*@0;$= FBA]9 9p1њtJyGoj|=%׿\R0V}u9&ٜnԪ|%OWn>;?@ssGf+bKc `, U:p"7>t$g[3t" ࣬9f4:}?TN߯>K zD_^3^6tRg`߫»DBP(hfd]Y FbAp \(z{{p U?SIMWyQ+ ^mtשU UL˭x !%ok}jIjw3;k#A}7"fb<ۑuzr~GHx̅ z`3A6cd6Z 0dፉpd"5)ՈLzdURtv>| *r!D^z z]x.ӜX_SsA067) X/PIAʭ<+'CLlSVC+B( dS O }#9M{:2UԲfLUJ3V /Fia|ټ!; !zg&t'rZƉ(8,n`B&t`^V&t.\O|-<*jg(>}*mL[6ؠ#KaDwٱn;Pѳnz3!` ،)A1a|l:*]]hA$EV1e"_f}PV( z<^>ߛ^-]7$kr׵gi;tK A o+S}Ei;(v$L~JGF0& a($a,QYdY^,CoHG퀅<ƒ''=NHYi>TQl?]1p٢FP"l#.lFVL: CC~`#2m|w" < Sq?+t@O/_~Qx`]&j0ϥymu[x~h$ v'O@GZ<ŅI2޾AFexO H]cI̷7ri<bC5 iq|D}N~_1H3Ӿv~uN|JUXS:xS4 2Iȅ)rٙG+U%8fږz0es@th;9W-Aw%R [׻cTtΠ]5}Ϡ>x)]ZP!&%,%^^ߠJ?̞?Dx>Q|k!=Mxo aO+]GpezyPM}&J JKm)Y$ Kaz~U>A%)ǡK9T 'b{NOBuQ1m<UOEa#2GGs!Rri"B xoQ֑njך  ;t"`/5;MВPW)x/c׍gis# = v#,5cO $:Eć.uPcn#YB- 1ziLQ3J /#N3z_Mܘ#]>B~YZkB"{}e P" vc'1Yj:/dv,zwrȑ<*]:\O-!,[Tsxf؈Zdbq NVJ|޺,6)v˦ع$Rz\B>|=-:swnujz _d@'Lc4 PMb!܌_ztS\­I"vF5 M{jJahL 6pܔiuiqhCoóYh}*u}Ro"Kw Ź )q.]/@Jj3Gq]gcf:8泦p~sFoy"R(M.N()#nxb鋸Pu" pEurt"wc䞓E³!c+@Y1W2ȋMy%{iRo]~af77 dm?#* |\ .qцbw\qۯjoꊒᓲfau Q[w@kKrHwfe"cDbCюj\2ƼU96y$|w`+CPw 9>Nzm~<CUna-1bL\+Б@Y j!*ROߊ)ER HmDWRJFXA Oka03{,xS?jzE|3|c (uB, ߩIv Nó».մcwCyֳڧ n,g0D/=!%՝T9-VBfnO&-#ۅW=Zv!^^ƦL&rSͬl0GЅ)6B!2zךa~]dH7CS.+ނ.M/ Pgű q`mN޵rtBn H>;ݳ,h2H,o%C%g>-%M&;mÚ @\Cç:*&d()}ae]0 hii.N^d;lp^/k)L讽;(b 70>֕F W6;1j8B6j*mmndHT94QA}Y3mE#1BiT9xCyNoHQaʼn% "}Dr˜:"6֯.I}w\_WT6]2U/y=CWGV:B%ILrp^=)F{- Xp1TpR i͌!@PE"Eg .!a!B. +CW^)IA4'V%^ҘH7|ҕwՒNd6sh0Ô^? `>T2/huE,,UA+]b!Zf")yZоhߺ`9X.y5FZ93DaL9yc4tMUa"s`8Oi[D|N5]DUķ$9 C/:|%y_G0o0xՔB7LKO2--]v0M ^Q.ᏴRRD /leW`*Ƭz4X2hrQ=͎ЛRۃOtdPb5KpiS0ʣn?gؔ9A>&~~$B}/֞(iEZ Ғo|9mnsM '$Cc+/<_-шK8dš8+|_CЋ-%7wm/Hre( !oX1!SW3HRMYwu3}RxYγ-ƖZ1ƽ$ B򓋆;ZS;Ux!Hd5$\~'x `uq yO7?x ! p#RO~__څǑX|rNBj])PW]OtxQ 1#d[ί9 }S2a!Q(M U ν-ON l.EBcK;)L>N@5vEyUAQ0' O:Y::,'dS^ɣ́vꡖxU7i+N)6<ځ^ugCyg sR TXH) Ԟ:}|шXA.Az^N-Ӊ֟6aq_Dzm֝X;kg6u:'ؙತݹ5G]LֈV['2cG@nYEL!(49YjtYCh771LG7nYZYrL Csm*΍Z*C/Ij$CB!o60aR1fK?+'B!ֆT :.ȡZH:.xk\lU@b2VٹpK1+9.^ce~$b!pX**I*.k) hDr~7#،USNL#Eo23:mäx,54R"qٵ_`<-0{E`7L\yb=)tWr w 4>˿o/z*$'G<03'yH_֊pao4 $ ?̉RZgH .!.k[ HHH0~;}#d 67l~ 2i:d)þCC?Tp'ku|{\ &v)9e2)>bء5`nút_-wBkMi:3߼fi+B=$, 35DSFM;HkKEjL)B'y.5Sg 2PDӁUFha2aCZ D1{ /KN kgJ AgZgu1[IPouɋ j+#g}a[FHsyW0h4yu* f4nR!1u ˆ 꼲I.:3}gR't_aNFi;KCWB P v&]7}*w]c+7Ã#ݰO}6ryH W%ը#j c)̰dw=,H)d_ǝuH \†PӈǻJHb'X~ay&φe9#kރ #$Sk/XߪO][R1&LL3\kbϗ$gO)%M7<yRݱ5%3Chq.cܤǞQ Lf"ÆoM'#\AB,zEdhӢnsG+l㞊|~)6.tRNff&ځ{:%S=,&oBXo)ý=y؉5rUhh2Lk=nyG/(74"eא'__[9cae'yͩi^KUr<d  q>hZVxԦZ3es[羽 @МYơYRiG]?A+<Z[77Z^IXm< \\ ,EQ5X\k>i|yur5w.oanWK9ksaE,I} 8nH&(VTEI,N~s;,MJQ}Y:e ,eδ&,3nPI^UWH/٭}B@k2I62<;dŏ@!iln=3hxga@ǽT~Jɻiȣs,#'BMP<;{,_IO 9T_DY@vBӮhR4YFQR5a1Ň>\)g얡I?6f]ϟH$Gq@#gv>xKK&!@>u2E)kx㇃nr>ڥF M'sk4һH*1,DMMyPJ%a-oZDQ<_AGEsdy.',d ;6_-|Qz9qء82?rKQx5u3D@dv!z3n9D|7E8@-K{ͤN37D3YJV.%J>ѨGO,MG^C;_[zN֙sdY,36Dz+M!EortMsf WI88C֊#DX<{ 2 ¹J@wvIä*xRd2cqӡHCI-f.ND֮=OWm3e2J|VaWfi! vI""f[]h^c+^]JV;l ExqT ,E?x9 # H7LFUN\4cB}f0+D*eƘ`*c}_#ofI(EJ6VЗ4GCI)T }D[A֘p,JXgL ]^)ЇB{\ XxIX Ÿl9>Lj-r">u*E71I~8☯Ҵs[+nQNVaOHnR^tJm*&b@t/A0i_3LA=MM?$zH?I?ڪ:͙* +ק ~X#p[= jJE/ji1DVtSv1J2q̏Εa-,/S*6DCnf"l R7E/tk(I2å WokttCI^Т{ U5vmJ BʄEnMr)*{1qb2 8mp:Q\S좷*䢒鮁 >$z4FVq}6rcfW96e d[ߔE9֩:5iR@E~V++lMʽ7mCy?.-nVG3 (Mh}wG.Ƙ"5n 痫 W΋H"gpX*N=- Aybֺ;rxa(c}T%}O\])JH1Yqr7C l > stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 39 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 40 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 41 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 42 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.R!W3njNylܬ;WWМ~8׺2{SlݤMƓ7}zn݅9p/]A:fzfэ4RS`)?>RTO)s}`ݷp@c`."w( 3&TmL2ws!yva`TG?y7{֍]? F`RޗS/~g> ilXc3t5n/.XjR˺^o3L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> endobj 10 0 obj << /Type /ObjStm /N 27 /First 198 /Length 1776 /Filter /FlateDecode >> stream xY[o6~!xb@6[ek:yPm&X_-iS/S$'yx+2&ϘPL ɤLXf0-3J1)uIɄI^ T., l)2 O 6  Ǵ ϴ)dn`3ÌN 'hxcXά@ $Skf2G|q^\?M75P倿 uuƉ0){arK#Q G?QBCj= 5Ali)'‡].t;0̓``v; !186-<mg6=wg1C.fC: ,츮,vUkP1mVunh:?1o{TTNB:7 Q}1JfPktKsPK>Vȟ4v*T+3O4VzBD)]\csw;8TElA[k$qH|Rv[0g^Xp|ߞ Y;/"tkቢ!ikjM;N*7Injvt(eFuWI4J4N%&mt(u hL١WZ(r:?rh::WȥL L&dewzH{[ْjt\\ {SSTuMi>&>%cD5G7>0{;G!*ڌ Mru*#Svv5hN !r ![yϊ2ȕSE\"9?hy$#h)ٶ7c&uli>I쮒\-\{BIlV[{М7.F{6r&#x5촷Ԉ>xY.jߊ^8fx_+yu~ͧ|q1 s^?_|oy@|A,\5i$ |e5VMH3K^L!}o;?'+PMn^=;z}.?mvCfkZ~MּьShOUO|E_<;()d Ex A^(U?X(T我Et|Wj}414?}&l-}-ռ=q՟s(_l$yΨo%Tʢe(],~鴘Dgd$,q 1> -1ߞG67 7ys*ގ uXmCJgKf*~H`e_WgE 8B][cwϔ孂OjRίyyup }y#e{1J p6X#yʤ6YZ) RԎ&1/H'tc6KٖҲF] ~^g,pcyG,wo]w {atywGnOTE&^LH۩)a}GDu?zqO]wrY7qע}tQNiMn#ʷ 6N% >pBjEHcPߏp#Tb!^:]P z^~bBлBAݏPpo!tذPޏP"5}%5࿔Hibݪzx+XN `ۿ1f endstream endobj 46 0 obj << /Type /XRef /Index [0 47] /Size 47 /W [1 3 1] /Root 44 0 R /Info 45 0 R /ID [ ] /Length 160 /Filter /FlateDecode >> stream x%+@(*/$$\ 8@#pCp@@@`?& ?1< D D_Ő|v"*#D6G' |E36VZdU vv(4%7?s endstream endobj startxref 130085 %%EOF survey/inst/doc/survey.R0000644000176200001440000000437214576431435015033 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/epi.pdf0000644000176200001440000061271314576431430014622 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2073 /Filter /FlateDecode >> stream xڅXKDWDW8(=~[$4 bbO~D4~;1v{<|ؼzQ ?q? O׏EȒŦXlIAKYJ٫ZS^?AmO˿6?hnEH}7͢:H4M-%& u"p I'] Á'AhEfq# 7J$FvySKɇZ5K^V_ԍ=Tu(Y^d(y[xNEEڊf(OhS~fa#ٙ4BbCRS'D9e;rA;C=_T_d}#~fх4rc/ڞ,j:rS(o7Xƛv0Qĉ#qAL2!(RepРqϞFxyK]j@SaTkWK SDTEClrXAJNѥϢŔk=F9\C'C1uv,U3B3,DSraW%C F6=G8 1 hoز,k:Q /}NK#d'smSY7  -2 'OĘ+Rga>CcAvj@F^`K xp$ :fnz^ʖmI>r *KGg*[MFPA6YZDOX[Vn.l|v}Ktj/BYT2@:ͽ y8 TH 8sTr˓9אM"E.X%LM1S M`8R(Ә.Ok33cscG󈸍Jn }dJ>?D e6 f$"&c fnh0{u$Zb ~L8kdD$#|왻R~a=Х[FfF k`T/UGN5 8<oVWSŞ{}g,J%eSW CnǙ|2k7LД4-HR-kHARQ[#߄UiLK`OGt4CQ7!H2#p^x*y-I7+kJ6EmfQ ;ՄVWnq>VCYf#0۟"A z^?uP72gd}sA%E |Pz5;0X󶆖m(Mzn665"쨱Ga.#x4j 즅[5Њ<[:?a_AWDN-zթӄ2oeAOQG\y(a gȹL)ߡǻ^clY|EyZz`=\F"?bȧu5AwV@S֍=P/}_/#y֏P^!W׀IgƄ(w(4ީ'IjŦ_M{AfY}D!0q!I?\bEވUJ_L4Su7ֶ=Bk]ͭk1PCʞP7[hͅVolt zNo! +%譍12_G\PH:A endstream endobj 14 0 obj << /Length 1486 /Filter /FlateDecode >> stream xڕWn6}WKbHm) ݧ@+Tk wCJZaWřsBWo>p4bHcG"J&pq/geywUVmkC-Pޚ.ipGm>+ cAN슮oJ\r eQ7U/$g, -<맴ꛞ"eOkgbSNͪ4eAL#OuۍdNT< )Fė,QN "-XvF}82`IpD8VXŌG11@A6 >3 @#T!CyOXP! i;"<:Tɉd$#Rꃾj( -=?"O: œFM- )ˡ4~u $U(E>"7#&^ؘI &RRS1Pa24>xmt}  +8_SxdDNo]eѕ,q16qQ}_-u!8¡ [:dII ł ; LrndPA%dY$n Z b8CL 7NcE.![pxW+.;ݯj6kK?Ie`.$քd ݘhԊ沛|63co&j}hDi<:8x%wLwzxݝ$?:PeXPy|ֶ_I:+vW~?F gG!1WgB& y[AMƓh϶~*a Дr90J#z'% 9rC$- PB !A,h(Cf<2Ms iCOyl(B}A<ۺ"Hc|B4N$^<ÕJ/r2P/in$1x#. .%ILXlo8+OE!nk +&YB0%hwzCw( >^ikAY78&NW1 ?Ýk 1pCAKBu鐆+ ۹M:`йL;$y=SWJ8ܬ^]9H endstream endobj 17 0 obj << /Length 1311 /Filter /FlateDecode >> stream xWMo6Wrjq% {6X, $Emm*KD'bDIӠ9C䐜7ofuBIJҘǓ|' 8hrP:k4<Z03k?s{׬uwʶvF/fWdJɃ^ޕ+7\LCuj/6^AkLk2SU_8 $e$<6lˢZXn %cAQᗃKW<>5nM؃+8I_Jx|yY?zdn]J6Z r06Br)؆7fӐQ!+aWݸ8o/dtnQYY,@v[Q"v ^XWc#!3r٪wטH+j^]l6"pl6說Jpz-͟>&[,P՚}5D ecɂyukEgv,:AڑYbs>f+C`O@&kٯ @Ay%ԈN2 <y.Y9sq۸q/0<`ײַGn~>#SO$k@಄c&C<É(X aw 容cQ]Zs }$mp۸mE;X:.ja8ewP;ΏmYuu ~>:ϋe+:FЬs FVR0M 7Y~yvaT;nWnƥ2MdL%vu+20ڟfn $>.gfa hUYp݉/ N lk@ٔh-_[x^kolg|g}z>#-nX`(dMOTWӱLgE5==ѫtj0wkz > stream xڍَ}b] a`C5b $5{"Ei9}b躺q6)2<+nڤ7wۛFBK&P;~ȕZXSF$Nlnjk`M1.JeVMrV*.繚?J''.̞*my Y+eLLˤ,ΪfF0Uɴdz^Bl:l]9Z8q~ 5a i9t WEnHHh}t]C˄Ǫ`71 ƷF7Ok>9?!vTIKz@<B\:"YM/>s0:O~Kb,J.$Vpv5'_"H_S1j8hN c2 Z2+s܅)F% Qa56zǀdLWPBgs/jXOP5uz[K#SvH|eOiă8y\E؄#b8KLHX}LXPU'^ /L<5;e%,~>5irưR&[< ojt %ڃD`-$,e xcC}ȝNz%_<d뚅[Q~q q 72Ѷ*FQreQdUĤǪF>0; HΞ#2"]ōӁ?|3[ۺ9m@ A7a+>XupVfr˵Ƙs vzbr2 PDQⲑVElʂ7t`tzi2g?`h^؄q Xoא.{7&`|tv8'. ~_rY5<%1SRR9pHpBó}{eҸz,]L,<Ч MwMlat<*NԋCBzMBRcyђt 0.zF>hpϣ"/ߜqbn|@}4EǸ+tlwK3 ZsLx1$Aɡ" 6\1e7H|P\R+ؤűg!q&--bZSZiؖ29qb:)v4W܌hc33^I h<(v$)MnUː.ī-Y[_Vw)F\N"+'B2 mZB˖S?OA8Ja[ >6хlkO SC/iGe`G> [ɿNbB&.O^i"a$@c R@-t(6JPzgA٩> stream xڝWmF_aEQsf.,ֹR5RST)WUU|w0zvvޟyg޺L1 v~8˄+g7]ZEhsUTs8^i^KiEmVDcj5j w$5q+6=ߗN[N65XQmP׿Μ9S,k씮U k|SBHIFش>n52܊ۨQM}dʳh]5 &!Z<5£.f5.t,L^ d 0WF. dVQfqVEmYE"9+|~8όpT n1]fY*̐N-ιAC.dZUZ aq9 \&U(D62a 8sqT@UFj~?>9JϑUU]FhKfc2m!Q0g2.eMM&)9,d('ƚ\ۻaiCS f/P׀|Ns5ȋT\izxg :Oo 7ϔتkcc i ;OI]iՀh6|uv1Y2!Q)8C<+)KFк#W@kݨ ]TH2cd~ML۱=hЧ$/96'S5dտw`CrZBԻ"I~ ,|]n,Wyz x/(ЌuzAg*d)%k:<]>>ɠ\:xf.Z_u8 / ~ Ig!4JTݰl qQ}-U&Y*MeIMݤpnTh\zi^*RV=c|y&w0GEԻtI% ==Y]tWNG]Ʋ= JSP^ ј!\L7x3\}p0BOԽmP=e};h~(`i"%+&;L)hB@W$ø/E4 )ܙRۑS4tk0pC$|0ǁQ=QG8J.@44 惍jaKm⣚&̃C }\:{ {0Ÿ2?t_hY^ :iHW'H:ՊCtn\-KpڦhIT>hjxiЉE)t+~{gpߨ̭s4zI.tnxD &FѲM6u|45>Is e$5#=caEařn{ˉgCp ~~/Ho endstream endobj 30 0 obj << /Length 1800 /Filter /FlateDecode >> stream xڵXo߿"XZ(ah=>( %Uᐿf8#YNp~1Eg~M훷urEJ4JT$Uru[\+g^*ԩMo~ bR"24f&2Hf A"H’BFq.)(LIc8NRmbYBaVAS W ,,d$fJE :1FZHy]Mv8Nc<%lVL\ͨaYL!aC9XUTKzQR*aMzH#+"k%^ZLP@]լ P 84AFm״0Aӻ:>%|n:7Mu98fKb82EC0\w#lB\5=Î瑆y?;Z>z޳ŏ]^?8aNx;t(>L60b]wGsς)"^ 0qXUX!8t~ͦ 7quSftCY^,3(+ѵPI[ua7kx Q彫z, BlLr+6sXt7\hglhn%3>h$ۻ=RB ߕ-5BpDe),47N{^҈7'e 7qC>h) ] l%SO@C>Ӈ{ups]Bȩ$ALpW[hRuvwUz#υ?k?~.Nc@/6Ͻ_\Bo|\bbpH w3/ ;y,=ϟK %>yߗm3< \LSǧ7H{<~:tcɻamyUE }vMWWK1i397~_yUxN{3Lzz%G3ߎaާG|W$ g 0 YgJM,@06UxO8 ;Xl )BeeToxMHUb')*=6Ic^ëf#(cLJԊl4T/bz$+yQmW5Lu$@@:ɖxd5'D@<=$B'bw5/7Nfׂd`H7 0% _$TL5BhQv]GZ^/+H2gQS_W쯈\7,ah͒5'V Ӯ>-U1v_)2Yd% |o>ܾ- endstream endobj 33 0 obj << /Length 1687 /Filter /FlateDecode >> stream xڥWK6WF2bs"r94EJz(wd;n ICrg>zq crrBQNDj(rGvYLl]^sm/1֥lAUfwp[lӘM:ju8eM޷<1#֬l+n=>3ϫ_' ‘i|j],q!ھ*k"ʷ7mLf UaX*긿ZEƆ~eZZ@ |L%L]ˢIhLئ+w:@تLSX`'GѾ"nn dU,0 kºZ`4Fd?`P:t"-jjiZuh*{YNt{xR`=D!EU h4b_cqGߖ4ą$[2BmܙWOn~DIۻmCޚz_]ѸynnL%B&w^ҋ`Fj%MYӹLY5gRES5s aAhE-$=8b|=W#1y`Q4OWw&,vAtxUk(W39YPSW֬; í9Q ;>Bڢֈ %WzlA0F9J×EFV9%GDRlXet KLH)BE`1}9ALc)0EޛD*K=>JJ(3vnlb9!vmI `ݰǍ '*?4Ӕt0-Ja5@=>PPyY% L:{2+[=EaLKΧw6L)y$[A_܉_8W/)tJأݖ }lߵS|FcV߽?n?E ԭ:UjK4xJqrAS\WПczc1%@>Ѷ} G-Ň[)<팖sZhn5B(zv}Fsd/q&]D,ki(NKθJI(%@cX.iZe;C[xٷs5Ű-ydYK1XWi!*2LݰAG$JAy%QC2Қ@Dr4(29s39LL299̎0Ȼ}؉g6;Q4 !JIz'i{h)1鯢'^ՋP endstream endobj 38 0 obj << /Length 1642 /Filter /FlateDecode >> stream xڍWY6~ϯ𣌵&$ml$ mSMȢ!IP>6Jp87Gr7n3\̌LH=]~̝=сWɘU5yօKL]_ޥi٬҄(*X/1+eYWX k.E\af9H};ϵޕ͋)*&ȷ.l mnγp%a.>UӇ\Ultt} bph/8sμ>7pvz~1 -ŭ؋#mSu}/ $c.}1Ͻ)pp:EhA0@ܑe]_N ?(E_/u }7],_b@. %<}e 0qyehSLHSfư# hMn) \qPI-V[V π=! ƕ02)f#K32 c"A^$]0.'K{IiIgJf?5$3a 5%6Bh6\G͚Ǥ8EM=??3i+?Ŝb\0t*x2Fɼ1VB0`Ay!Si9y^aYR9d5iއĸJ ?RB믒jFY/gw5eJfl~lK8V҇]bvlIv $)W Іf:b>9l8.5gm93B% {5|xr/hj@R؋ D}/[*߆{:J|E}IYCjE>^x,WTͲkZy LH(h_iqoT4kﻜ l0lJy{?Rm endstream endobj 52 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ڍt 4o76KKuƾe7}:L !"Y"55.{Y#k<={9;_}}>77 Eo`,6C`j@u0,Ot|DHA`@ ##|.FAjh /#@de~*p aXw3 pl?R)cr~~~"0o4M_C`7 w~ <&qf?zS+x Gy#|P.p /jpg?B߻ "+;(7P=?V\~9h|<@œ;Pcx'[54[@=<(7W 6{C\(_Cx^>pm.x?:78Ҳ ;Jo mR' D{!!W8 X<$) n?j| ~>F!{7͠&&MU Ka1I02i!i`mXm+-ձ_%?\h4_&}_qwԂߞiZm%it]qG&K~}k*oYɯ )/z[&%|Ý#s(ЯMM;nȒr. pC9NL$XaV2mA}:A!A7 N2nbbJG=8TX0a̿V9)+"be8Tuko;b j: !}YC-\6utþE뭧&d?9(j~VzMw} |piaWDž˗JJ 6SrOq؞ Mpm+BOdNaQ Aw@2ĭ6%? )6x77D=828wzt{;]\1_NF^c xPNt{AD(]/i^r{WfhiW݀[Gy"%yq=UᝪQm.Ū_G%~1]IGg0US%‹Vrf Tf7z^ չy u*Dۍ2SfW&VhxGp)CI]XT^#hܳi`+YbR|J|1;{Akl͌JĵItZ@~oƌ^ Hr֭Lc޶3t{ Q7l fՕb̿/H=y_3Q|5-yQ=8ct'FXnFc k]2U82a^Ί&F9rԼsg*uD*tz t8 iDrpɻqE/CG8pzWzRP 8y+ت>˘rߞɎ-FVUuRҮtCw6͓w2F aؾC- *Jyښ4s5bDCb`0d?m3Vm]ݲ/MÁv]7e'X;:Gϭ|f0Ͻ8řo=4l+2YQn,FfV#5`r.V1CR)m#..ϯǯjlֆ=]q,d̺ݣ.\EYX>T\xl<8?n+y?Ee拘: :*iYQ؄0UA.uHmXLz(I?"eYߘnt&-u6hW-A|=U/x:9׿y)W[+a/r?#8vL[#mIMukD6riȱY.+6%iqjY*yHҠOM|ƬQP$N8g2A&c$63FE N*gh} ڑԳg5R,ꯞKg7YdʆLwoخ.8SkTQa{/9t32gziwr)) 1ӧ"}ȝXZ@2m*Z A";6XO .JD阘cAg[igar]1MΙvgX^P6ϟz^d?-Q3LOsTmfa|l*մ)]ͅq]Emnl6۟.H'3%߷9tp;x_oW5A=iw=ӗ;͔`TesѣjJ mXBCq  %#á|$c vc_})p9{s0ɬ@C‡9Oi#iqDM/d4(4,5vq'B Fm\Fq#Q޲ф %l #9ރ{ٕI\#.eسZNGI!),h+>:-qxNDzUJc7-1<뱭񓖫PŒ{␧ϔAtBIȺ zv P>vRAuP/\#w}nD0ފ*E›ʽTsX&B~6w'K_y&a-oZZaBfSEQ'D:z9 d|)ʠOi* ]htԷ; zeyvd|-٩\g\M't-vwP7gRo|F9)=  PSc bt& v}m̈sr6z%<`_;Σ"M RpJc_*TK?F?CLw·݆V+BX p(e2oDv(%V0=Ԓ#$ZudrL_ju,KӳǛE0FaZQH-O*'5FXr=Y>e9XlCrIMp48y*IԫVymƾuQOo,thS:/ӓ^.n%k'EsPʏbze߲0ND՞D|!{:SBReIXRڇ%TUWC ʏkq|cy-8blUE5r_@9,2n}r:j*VŀXXTa!jҍ.NÇxG3RSej@W=c) o6`G4^Ԕ}"N-oto"4{'.<,x|یv;|BUآO8Ij${Xy}.WZ 6]3aw]0/Iџ}e$i +Mhy ojݬ,7y޶bd6ِRsf]Uu7Tǻ@뻃um㬅1Ŝ$}#k͢~y6ً. 0Z0E)K%M3)RdFTwk݊νM?ZiQ)+t&ϓRv]ae"smšr1_FdEkݴN0k"`\gf`6_VSڜRN!x+baTKy*1ܵ/vZީ/oX oBz}82I:!ވڛvUo4}$4I!/~RaE Qwo$CJP1?CY>d+LȊmfE0+E?䷆6zuD\K9ouER%Nɹ*$؝Q֣P(ވ 7+ͳ9{њ"֋]ک^d{^U$~IK?x_qQ!F|4܆pӺ:+jNf*L%=6 'l,2v~(B>) nvRgHܸoxr[N5XGs 73X13-vkI緞7Wم!3$جC"bm wz~7)m(AW )HM ,GH%\k "co.ۛEBN(bnh(;7!W o7|nYtL`qHo 2 JꈎT2"Ma˞2x"eB Ymp`-g=ٖD]> W=12TwO 2Khc?{ ͹ܺ^P[6ENAQUNiJ',pG_X/7w Wȅ=^o%lR`~4bƥz,D'v [ɵ #`Ow UV0gMg:-B;Q}O,f3@Nҍ#+mf̛];1,=WNaP?j*){0 a<.u-۪׆E{"v2I .ɫU~ QtV{<*.jWEcC@·B@O ] p]ai%R&oDC1[bcZF͌el֋]h)9 w G+5%#VI(K??qa:~pVSvX`y#r#/_DJ(AtKt˺ril{j'ڪSKm > t$ntoZ%љ[%DT:.SV ؅%R\=ȿboI_?eYO L;^~CbQOFs5=,fG"N@yqInDt\^A- -\B &%bR>S92g\ [ݣ̰ͦ0i:pjٲ+-ȿ~]&A&iyTV勬ZסL[W ;(@3i""7HțT^4<{ΥF܇  endstream endobj 56 0 obj << /Length1 727 /Length2 12215 /Length3 0 /Length 12797 /Filter /FlateDecode >> stream xmxstuhxjfc;юm۶Icjl5sc|ga暿5Q8,LL&V 0F Pvf_3@ laf6'PXX[j [g cs؉o2p4L-@@ZBN  A'#11H0@vƶ6&g /1S5@VLEH\^N &¨"01[n 46rt@k7 vŀ 00v,l-a'r@WC / 3El` l\6&@ -@n_  !dcWA,-\& %75ꟸ:F \Mlm@n0cҠ151(;Ul?iCg:-\L Z]t%,lA ge0s|g|ga?t`???Vmy-S˼ a' T!&~]h[] NmmJ]7#IBuͼ?+=ՆQõ6rL[]Wg>)m_‡.iPiЮk]59⏝;MǢ/Q⇻v/ ڍd'6},x1W0!h8E";|)6$$ਰidV:ˏe Fkv(h$:@+O24%B֓L:_IaL?O/[Rdd$M$fMI?Gܫiȹ|5)YkVa?pje?lhB3*/OI^*ۧz]fE:U`~qm*̉g]>~GV\CR)~U";=tk-c &LЮʂa~O5&x|@hNvQ6WgJfh؏"DiZ!zS!ВW8dftɈ'7K3|+%j 6lM*t(崙 2£!>fKZ ݱ;Ңcզaex/-Z\;T^pc[^\\s1/Ӗ4wrvVRm?ރc(_+ݲN ^&y<3#);_[f[HH[w2EŠc,^7Z TFl+2tjV?TGn@pwМ;xh])UgSާr@h 6l?@M5~iC=p`wt 8\a@ n   @)gε´G 2:.wM6.|Y30Td%ᅖ3>RP_U"VqDJk 4K\d>o~`%!4,fqǻgf⨻ ~/ڼà1P~][LMdY`2[Ӟz}p-#=@KiDrw jA¡`->1h_敨[(<]R8,\e,`{KDJ$;Ǝ9yOj)9,USFkAB~g-<qٯ-\Jw'3 ]醂PQB%@QEn4mCmJGDg7jW3]0߽U6y-6leJt=0'R@k}5!A۞l*LP2TM%$#upȧOaJEv0( 7ȁ.U/ yDɫ\5_, S߲7t M..1 {?ͺd.j7 6(=.|e%%ah2AM8?w_ΦQ깾6YX0ɨ1CYܝtEq~15~b9 u~` s+!]3H[eAGGVeM?]T[[{шC_),6 +̄@t.Pr>1BF1eo0Kfhh+7>_^}"3f#Zݒƿ_s}8jnSʹ=/'4kv޺Ѓx(hJ9]Z(DeLhۡuU90WIiߕ}H4;"ZCUAe*>M1ttx,%E4㬻AR{r@S~Ƅ5DF3nY(I't~Z)Э<7z}S|r֖>}ҁ7O!rMfo.q,sϢ~)-K41JCOCB֧ciN%oQ>rfth˧JԂHċN !o3Q,7h˰WJAm4aLѣ"G+ݶơgPd[ה;f)./뱈}$ʃ/wF ]8X K% ZUf.IoOLdQ&e\E |+(M%ӃHv!l I-Ӕ*X8"ṧdӢZ,`.3j>Zl%ޮ :HڀL{2j_DApT87!R^h_s`RڤttS+_Ѫ^Jog[{j<_fΖ30qnp}8\ҝ[\:B:O~Ω4ѧ-=9.jdڪe|50Wk9V};Tw j-lV.;臝Vʜ4O(U=ґ/S $G%Yˬ(Q.ucp$׵PHEE$./S90׻.mm G· }|Qh\ u mȭH{ qL*?X- XS0fW_ 1,;a.Ť;=-p'VjF/!79 >wusz|",Š5}Csi|RcRQT8JwzqG^[-:0MʶEw̧m-x s9x uc:Q6F-i;Zy"F;eI2fr1KcK*Y@I= ?߸YpZEGelx9賧8ac;7.>f*vw<DV彜CzJG:kBa^4q/drlH0U bߤOC>A3|yú.Zd?'(TopkIsz*%1ՠ*EP=#>U4׻5.-2Wr`y9RkBjotc`NwX6Uv_0g11)RrE_BW0qQ9J!$>xn{ۊzU&Ici)nH#ʞۚfB@O FV Ay vˎY(uncKڛq؟?xvZOUSK6v4z~Ew0(wkZ( Y[S[%l~{u ] C1ʆ^|LgaTN4(kĢE;/tLȗ8 )!o>s= J?d_) W&g=NzIn_b"LMgX 3{} ЧsF~ލD¨hN} !t_3?sU O+Sx;v 5:o Gڗ3mgXnGifȄSLL,H;!j=Epܾ񭫛䁼h@|R}$"2NOlMbx'REw+rpn#0B%]*gZN OBQSN"i~9xҚh 1xWx9yEq.tÖ H[ /z Ƹ,r:p$%uI Ru.>VQ1V%n]dv#0;kb<dtE'R-NFõ}_ nN4өW/ʚ>)y9>R͡G"Yc뚎y|:,ob&cލ\FNc!|%"3R,yx hn1yX  )8y;96 ׁji3,UQ&Q7"0/5̋ܐyx>Z>3'SYs$܊ EHVp4-EVA-Ija5KnMV(8v6r&g:3E̐wYQs"'2Ea:,pg}f/`kyբRǠଶ?-:Źt<CEj:,'m5+̗ E}8;OTv‚Kx<~&ADES1ժZlwjɚ9@@|7h% Sr2 \nq1[>+n-k['ylLQ..0Sjs写_p;B&4uYhsD:Re9tgwMlV߆x%)#AZϔy;U3N]Tꆧ_;Idl3X}" zZPNXAmns/ qQx!vFd>q_ij^ ?E[|cxe;h] Dʲܚ4^tyJo n+j^%5lj}#jbƨ:[qɎ 7 R2*P8 N!x~d<34&)+E>:xY ]I]߱{y$+~ܪN&8u`x% ঄̕%R|Sa?hQN)R4y`> aW)睵(^V3yvn61u緌> ҐnJgzcD_{P+y0L:Ǥ +ϒ(-Vc,OD>+?cM1HIct7tĎȼȅw/~{ӊgX;_ⴣ&Wc`do B0ws/Q'3܊T*Nl @ j#j'i!>|o=MMŒ0Z7א/^:W%ԢK7R4$ށw Q?MH>$nf +m eH)!`.My Ϸ´3gC"/rH^yU,Z[&KG2TtݷbVY?̖hX$ob^3߫>^a,Mh\L YLhW|RdI{GbLɅV DeڗeLfL#FZ 1TN UzjvVNX:f`*1Oo;# ĥႌ{Q^k;1>#n Uzrìw s{za}u^rI*Xq"[}pυLYjUNL[E)Io"vaRh8eCЬìA@^TO0kъ2հcȻ[{'B kjYw.|rw)jzDW}BJ ȝmX^Vt %lI./8 īxwU~Fa[dS5kĨ荼oetLxz 65_c дP_<-iJ&u \V[rp Lr|G9<;SJ=:r*^Ie㠾KMJ~3H/b{6B[6 !>A4T 3֭U--0zH$zp {^mMg8poFx$yB-fu5/sD~VLcE9rosdPȊ[[gjGu#GuD/Ap8`j$ΜIݸ|}ɨޛU)]X!aF*#Q5/<6bԗ١++EgόM^G2TيA IG2cyRJӤu7}`*7yj`dZP> !>vD{Y<5I {uawUԕhxl54xA'?I@'/ _LۢBB>\F,lّ$]1Y;N^ڽqePSBç.^{o> ZM:xhgg2 ȍ&j-|r}CԐEn&-?r3\Úɾ͂U[NIj{PHK~: 5|+(vZ*;bIIiw?i ҼN <1%E{fBOX eYp#լ>̝Z|Sc z! -v━TԩDD4OOo(O QvVՋ6y)J$OHo1g2Ll'^Cx >4 {#@~_~ﵽAmؐש^S-0ߦ `GpڬUӚ*T0 rju%lTϼ < W`:#AP~-HclqMcRX{{%PV-#Y YNB>KFd^s*!m6;*db@zS^`=Ԯn5ҝ^QYTY=^â\3L= &7H:{KfjuhTl3BP ϋ)!ҺqAAkR!&+ [ƾ5b;P6]?nEMOQ`6A("Fj3Ft5]"4.RUt\@)kIM44bf^0aI^\ qwHmE" 9t=:#ܕLK.L =fa'&X-UqVP2~lK2~#^Lo|mcW!RM]\,t? 0K&RΘ433%VjtHVoVO 큏PxZR{˯ZD [n1/W檠=66(lOLU7J d\e8|dޜ D^!4Iim7D_Oe 8*-].ey[Lknj1VQ7T֙ '! {"<4s Q9}ؚ>s7ly;"7:d(,U* 2!d7nk(OӴsq#E{MNƅCw.i 6c NLCLZݧY’O.bX7=4J%< #.'} _iS04 NlT _^eE*\iVK^!!"Aݻ堼(=>$ͫ^,%{G ͆JbW;M.2m 2G['t+a;J#Oxaլ0hRwWw/kǸ`)0f\9pLfGb #Qx,Muq돴LAlGc\EߎZt%ıM|R;&<녍?]kg Yߖe_ Q7C\c޷L@3T;veA{ar?k"Q+-$ ~jkcbKye뮳8k{u=W,r >9/*9?㝿out7Ԩ+Az9/A[CNͦ(8_?+ B(HlE噠ٗ=\~׊ ]U2}y`ޚzpXhށm*6

nviduZ9`EW~-Ik8hW/qQM xZ[&MMvGLR jS84WPqݽČpKFڬA!v!Z(73c+,)5lb,:A YUpJ5LJ!k<j^Fw&ET W#A_F;I$6ġ$Ǫ&lϊ%͏/w`ӂ{_X Cg1N@gz 3nJ_zJb.?}DoBv<7#s)qʨՂsEpf% 6!PpNl{wqX"m|QǞ*4"ǜl&QZ#:pm̰?NW+8fSw+夤ңሼ!{`жYu" d)4Q8/:ߟ8PržGq aG;?>Bx`;tGadGrE}=Υ%soWA!7Ꝥaryo~^XZV:ceyGHAr|~;1ɢ`k̇%1ݬqK[UĎ膗lY?+S2oAm&+mxi%$E8V:h/Ξ0m`٭5XGZ5dVvfȺm_)4XZhdzdh]Pu)IV>kԼOQxV cdX4/Z3<1Ч uO}0#Vn'k~jah'Hde&h\ۺ8:w/{$<7LමSLLrn۱ ڛ&v>m8>(w֝9P5@֩n $,@]qy$E8wpQq;$;jCuk{KS&˸]s!K,'@5$ p>Z4֋Jc-N,rCgo'Q2/*U;ovpE$3:GR3qEm%qxGn&ͽb61'ͪ{SfQ{cK&Oc K8Z0ǯ::',=Bs.0850!i16!z N(z{KftmPἾMSd7^}ifeH^sDkDGWm*3;b5qJt=쁹VVU VXZ8MXsx3a;4)]phM/4Lstr`*ޜw>6ޡڢGF yemTpP R (ɉ-(nYx+\3vEwTfN֞ v428i|Yu;{J^ݰGq^60 ۣU/dԍΗ3S!_:_,D#Iܫɲь/9{=2t)B93y5;A2i5S- *Ӎ )9B,v 5 T]qLj4j}g ,ڎY"iO̡&c2{ + ҥ DLRѮ^]uEpeXo +au `%A'ZkY2肾/ q2ՎI?7sd 6.{ygdGB,]XP@AȌk37%J}.,SփiN׵PB<^_+xSIw>MQhSd ZlC $vZ=*mK_p\f-3[MaBOHrSg-Uʎ=!B~7vq((ח^(Dpb6U|g}l:pӖ"E*= i}r"rO3=AQa::QWOk?) "֤Pw 3VԻޘ4BК4$*wgfd]IHT\ endstream endobj 58 0 obj << /Length1 727 /Length2 11360 /Length3 0 /Length 11944 /Filter /FlateDecode >> stream xmxeP\-`!Cpw> \;- -hp9޺^tT2`7-o'  +@SFBʅBG'4s9܀@K& dg@H::ym- t,A  !.HV { @RUMO^EQVE ]j v2]v`Kп8CtqK,%.dӒ-Jrn@ sM peo_.^XQ88 79Fan`+GÖNI%_ @hw{{3 ࣤh t$-^n@%?h3?y7z*UTT?}>j꿭l? O;6yMEu%?ii%l t@ޡPN8W6ssy Y$zc/JB˗ Znw@YYt l ]<] 4=iʹ4sa nciwFG|*\xjD xU"C)Mu@ƓzcC9 Edu%Dq;Is0,GiEG? Q9l}6kGD;LE鼍T׾pʝvr#iie.~iD7330S w%0KTruu4eza,Lސ#IPJnTK z6X5̸}>QC7ѹBnrYڸ!T V(PZ'`)&jnMtfv@푐as@p0Z/sIJ/g[#?]6`{ǁXW4 }:˵ain2ٺEFHXeluץqcwy h隙F{KQCǾEnekTR`zB [s\+F6+"Ө5נ(SQsDt[এ%7)gDT&ǃ~'•ٓgM ހs](N7뗠&9>)9gbI.י2_Ik pWSu~ TW̍05U:Qvm:Lh7T01EN`t73p!B`#9~UCٻHL䎢C21jM]ʺY~LU|eC&Aonp&f~ag]!j%Mt=iL ۰qѮk%Uj*x{ެR } >D3w)ջ?KwH"}3YJXS2/#Q8NYk*E.(?-R!M~h NJC} g`I-9(ln8BrXARV3z+)p1'Ka-Mfpfgڝ*GQ+Y~TS#^4&)OlWph)s cOi XBG{OH*9šR2˧k)Ż] s%5o[q@^SӤxA]o:y^\cL%c0$(6iZXZ āwVd>P\_W|*Dp?ֶQ19Ӎ,.yS( ~=|WHJ8R.mk xӟ2hpQJu iuSO5?GBL|!QssO;%>!ڢDYFp }8"tL@"s\_V}zHm͒.V NrE`LJk pbK".~b}#.F򩹷$ů5vfbwrU̵+Zŋp#Pʽe~A"etZU^sMϙS<~ E˽yݲQ胅y*&2bdI^n$f|wدfοS$ xaY3wnP]aɒHke$0TV䖿$.u+f-/_k6}ݰn©KCZ9[Wn;Bdad*vaLhH""TW%k SxM<}EMGNJ)$RcrW[q>Cޤw0EEN~yo8bV۫^7{z5o'dOurH9NK&GܹUR?3J *nA"X=yz $_O'9gaی-&}m>AmU+zC}1 LSagqE P鄨}7:lQҮ3=f d^Q0rj Ɉ3 Z[QEA_{ R{/+iUhf)Yܵ1;>P;:Xrw>%ĔJ1@䄩y}̀ȱU ig|mS:_8V$$]+n?@>T$y#Y3 WEgc&%h_~RA-@2k"=/\O0 &u$wAЎM+W 2g*MzJyز^Yࠚ@X|bGU|Xa]$5X"%H@& 7:N!j. R$v[0kte /*f&\J XcN\mcOlJ,@$25яg]9&Nd%iMv"h==m@lgхc"Bw]޽zꏩ:|ܟP+Om` 4J=NuĆvow/ރ='BC^u( wCay3ҬV팭a5rC^a=sC*Z0I8ˡqY7A|(Z.B+_kkj"8V(^û5^E֣~z\Ii C iR\z[IlA\Js%HrcE}c;;\n/I~}فui%fLŵ,? 1\4U5IcCnh%NohtLёLY~q{Rք̀{wzȏx\4;e&pЪ6 A3Х$\{O,dN Ҥg{e/Bf:CC$N_5۶"CVSjS7\nl`6l-:쏌 e|7Y>7n)氿y +C8{'<prv7i`p˃K94FA2*ro4$UH9"Wdi;Dͷ|l7$}R:OٔsPyaIq }ǙGFZ̩^=xJN9= p79dz6Հy3K\<#YvcYu,tfDvd1w7C'wlV<Ӆ ku |V30RGzMCb./GVmQ{!_RpG P6Փ*M*>b`+2~0KG$sJ"z$jIP #vᱢjDAґ\'vܒ<|{DSÇd?μ)| Qr'J ?hR%P7 ,QIX:f P҂s?' [0Vt۠guPc΋vâC -Cq |T9G7wG`WеlCTGW{eDE4(y!嫮QΒrv HtI0pSgfy_datk:7L [5jgN%-6/C c= S`^nPIN2+z1PFWnCêE}Cׯ}}NU@KmZTTH_YGETcZ9Njr4¿Rg9- NU oݖ`i#ǀz~WmT] ڞ[zcWa;+aQ^WeԭnЪr_d}[|$ (t-66?<#XX[ᮨDbY۟7;-+$Ѭ к*QtgBW7&1}7L'jUwFƽөDQ+?dLq)0a\eE2( T:P1Ygk,KU8n.13f=+-[XLDOSۖW߮w0V~imlB9x`6W1Bh0 } j0Z*,4azE}45C d6R^oQOzz\5ղ5 ` sehBrީ0]Q ?k5fTfR;\.[5*pW& $!_B2#`֥ 1'\7s|{ 9|52K-R,QGboP) pRmCwHx*o [+/?z,R_]rz9g KkBF mRaaߘ$XC 1.bs9A6~1"6˺XgfɀE ["ψ)Vd=̮aVjpfw":*e\A7B {_|O%-ky-w$ډ6x'?y.Cj~%c Z{$VB36M9|:BE>9 ]&峗;u  s48Gi&#ڬfy}iK}$xOUDRIlUx+aDgaטY!G@A8fG~T;]|}Hsy3 oI.O`6ɪ㠾hlW]kxd=qg pf&UvsVeG0wԄ܂K?9*"Ӽ oq A!cMk܈l^k\ m8u4#1s= C-b}1Sttbu= <}!γ{TBMEjniM+c\SmdH1+ȒvkXU\lߏk _L%]mTdy~f(O߆PXE=DMŜ5@ǁF?mD097c-:K}.0?Y 5%ƢTJ#4W5gP/n{߸!deV+-aa RfBq-[Bd= sw./ Rw:A8 $G;b޻P\]5ī M~o;\$3.%{304z~u$7]H>qu]ᐻޡSu4hN. Nhves B Wq-˕+kǣܾ"K<o¦w?VYk?>2lct4-4ϲx(/(zކAm׵w"[IbZѿhWo<FUmsLj_Ykʠc׷}zOݫgISEF34˵fp_IqN/oGy2CQiG|e_O29`" |τ V I5XeKW0Ay{V,t'ՇiVz*J" :]쪍i !FS^4r~2b'C' ۫Tފڃ4#1d&"$u}1Y FuUdey10ܔ:"hW(n[bJF/H׏vѓ2#4^~3U.D]C_ϦHSw,5+a.7zut DSuٍ>ߓs-U0Tі98JcN5eV${ Qg"77ϐfbY}]ciq:m.amc&m qIy8:b(N|?4dq}1Ը=j`N;`K/!7č Z[QLC :;nZH)OTHV><,B/* ѫR-.'OQi}TUuWR})l$9N#i "eZE5@( /O՗vJy Goj tsvwrh!Uڳutz]Ko/,,1Cn {CK*ۤ' ll. 7E-XvĿ ->B!t~G1A1&mu*ȚQ("N|\H/걢DgbŻl/5:&|dynsj',,;KrNO%H@n])"nRR%?v 40\%,NY6> EmKb58V H6,=腜&|%<mަ9 BiJh[^83%ƕe ݉7W>~e̘w(嵣ck`(|U_V=9Ӯ7l> stream xlc(]-Xm۶m۶eۮ[m۶mu~1gc8kdd&))#-#,#3)) ##) 1心j6&Nj6nىS#ejPW#Yܒb[8i>0C:/gJYQcEp? $ZNl,s-β9D~)$`%e>1[i#%l@ԯQLZEA ܤB Fd&䅊SrTQ |`hc^r< >2Qşjxdp$|펰--s.6ZJMG~Xx, n&X`v_pE8xs0(c2l48PH-KoSlSTIK#*A02slj~)TfhLw+?ޜ"`FfCb&` H\|9pk9$e1Qc5B;A<KC`fU=EH,j%5̰@3HI٨"+Ϊ,11/ pbE;՛&4hޗ'f<Ib}jƼB?bL&\a_}B^R?jAO޺Ī3IY$=W?6# 1Jy}3G%"hi"a 3rnN:XI~ 5H^(QsGX* Vpӟ{%a ^-)㋰|P7>B%XS^O0$ W$ N[{`*;.)-1mp?v4] (Q=B}+p}n:CXA+E9l>xq4;p== `Ugw-μkx г _"lSez=AGoX#-8:hVupgM+"أ6S?8i))tEVnn䟔@Q! 3FE0\YHC$kF?Q6[cЌzw܁1CQ(J&ӓ #f'tx$FPԛ99mI- >;,Ad`b)ڳ ghmVWZ/]K<F9؊^51iq R=ݬ@5reEH^ bE88DgD+(- T4ЬbxX+`9Zs /=B՟`'Y;-*H4)tگLAlbYk{ YU7%s;nqu>??g^?@@!X} x}V\ o,j\\!X wV־p:[%kx*o %16b*mN׀RZ9i=B_IBf}hdbONui9[kU{bB &z 3ٹyڃCaq[BY҇01oqIkE*1Yu`crHI4{e胼q utG\^jN:%)%\EDrA24TY0(זe*гV6xS̍qm˺EuWvɡ_1; ik^*=yZȰBq| 1T]!ǟVt752}!OPt?]澰8r`Q^u_"/Pxs@8UAq%NSEg|_lG[{ƼzjPHHga+ yiy^uSl<ٶء'<=u nPk/[VoԱ D$Y!uL78>s44B C#Ug[z.CRwv1e7c%dIyL4^?j$WhēM8 h k>pm*lz6sT`u~9 ;N՗TO F<80w;zmua "!k~]q|hVqUBtE P_pߐC ljcp涮۳|4B' @5{TtBΆmqJrz% },Uklc?2?:Ȥi_z̍̚!ϝ7r_E|ρxn=J^l?y2T#Myo.WZ(C !2avbCO'-#Nd8NÚY[%忟'h  +ɉ("%~Y3`PΟ7`;Gvp)a&6%aΦXR+E7/T4Bmm$_fF>篖_"ggP,[bȈJ&yU wNחq3 8H%$  ݮvJ1 N.UJh5TOOԨB<%QVaQUJSCm%+pȆ DÿAhRŰ{v=%o?-(QhM`!Y@ʵߦ6ЖmDeֲ ~"3H :u01Eܭ*}dмМXHsU;+O}ՙ|@AWBIDxܽy1Q!J"dRxgy)]3M8^-ZۣK԰ܻ鷙Yʙ׊KȔn}MDµF᥍A͆*rUcMg-hQlРަkX[WIщ*R`0W߈6*23=yUW\pF{kU5gTmr"𥨝r)[Mk \ 3RO@VxhE2ۀiwv[FG*NoUlRωQ v](nix%V\*J7|E[aY≶FlG >/^S8amQ;L BGb+ܲ֞aף鏑>c'Y+kQ?rc?_5;D2}9r}h*N}&#?_ϿiBf;0s0t9mx}A`Qi.Y8]o( 4gPf #y75Ex=vn1%Oy.hFCfX%#bF=L#8VҀ#5_7vTFZH:N1` z{t<|8Grb -g,*B-jȂo=eօn"mWEnC[wUƔ0]&2<2ĈxI҃F5@LipYV`X?$ 5Lp+5E[3^%&pH·"H۶ظhҵ̒1[ ."fΉ7&2]MIjRϻl%m!F(&~0e&<=K>Yg"@,[>"XP W\$QܪbXwn⒒pW6c3Tsiw9sogo uOeΥ(|7KYr!]#&]WX?ɞZ(4tđ%uP4yiW8R%RZiE\.پEݗ4;v8Ъzw=ECvWa3\KoSpfzRSϭF_c0PNq6s ]<_Ьs E5V-헴Af e i :#\b+7cZ\΄4ЀtVO. bL ֫D|G3z>Rj] oIePOMyl4`X}QN>S-6G=ރ&K h2D*فBa^ O>R9ѳo :@B']P8s1ߘ!f6I>$^qc?3W%`,d+U 'Ҥn`Q6w.Ay;CyR_49#cpcR-'Rpr Z;PG},=aILu kU3Wrly<5^Xq;UlN]`-+pW@O%Kj1&uJ6 , w?%ۨznfQ/i]4dBiż5r׋/d-?WmyeV J&ϱ==x ) p"lZ\2vIr=~ W/q뎟HnwPUiב Ly55<(bj붓vHk窦d ZisΠܯ\[^T%eEQm;ѫG]4^q-tLNJ?nɨ0p`%z1FמxSUdEKgXD 9Z= ? @:pl6{Yzb>wEx\-Vg&][h-"g jPH: c'3Xt-/AJja>F%jIj,/++m F4>XY>JvvZ^Drִq 绻0!wV3fXy>V65KL^w^0y)|f oLoe,xM]bv^^`1cPj'Ƭњѓ:&_ $i- ]bM!R *k}+":Eɗ+100_GB`hެ*EPbH|g ͝VGizs@QUęh1O $v&dd!V]#rи[H=¹QݛMKAc>#9 yLC6TF>Y7Ef}P+7Ϟ.R!T`IDz3*-nbw{M=T~zS,oiٙS|q+Gm&" KafJtQX#qXQt7Sc8r ?lZ 3[_  {}ThHxQ5ٜ4+ \D,+Yk&RZQ5!"rk8KMeضX[ŝjTi:01NZW$|!mxo樅fVa}e4g6Di>1Be{Q~kICxc6܉ : L]* s1TJ]x-Q{ |lE,R/FT@7aZ^(D0t%1<ٹ?ʼnk8 4v@C|e#$22(6j^kckf@UHHyhSw8pa'&Vqܝ[k)=Db|RGWH@I <Ӊ3*t^E. 髒>7Baa*Pv!5$k(r.3mI,hnb֜hvѢ?bueZkev XNoWKm\4P>U7c5>'aH^2f}%%Cr@2O2FGkֳ1ߔ"o.4]{:ΌKr0|wQ!qI:4m%DE! <% 2Ċ a6;!Cwq,_*eŖ= cE˹hY_G SSZzP۹tdI![XO**K]M*E ٙm[>'qR) $gol).ݐ()S4@*V%aؘ)({naamR-Sb*3In4] ؞Lڸv#F#BCjAƒo&^%/r(?CQk!}렖^ .F#˞P8Y׊镽XQ  MZkXsiP)ULJ{gءyJQ2u}SLEWS',)sn/Nfǩ_qu^j^X,\Y4@C>  V<-(HH\[lU=*Ze^3rՈnJU'͗SMG^Dž7kTp[KkY"G'"_6YxK(3b9~Nf&0JB3LcT"#+i*#􁬥mάL$%'7R]H}3 3 uam|et@ˠ\MaO1B00|U'/bjܒCͱK^u*_ H<>rǑ&rI?(:D6u|R*k6KA+2'}{i2!n>!Á, sݥY,r)I$E]\xAW簏2n]>5ٚ vObLZ 3<wR9a(WX{B>rRq!BWYHC zŷUTwLܦ+"]*ǵ&ZF؈F)>Q=R5Q`oE7]J'POs1/jk5I1,o|Ґa-N TF;r0'`6jaׁi3rȲ3gzC5׮H ;k.ԍ4vg|a *X7/+Bߐjm_*aAjNK}rvHq4a6 3c+obU-~j!w}}qplv:O):,Njl]kj Q22Ut^F2ˇ+*ځ j^5f>%;H%dـX>br ݯy}5uyu]P/rv20 ғըi5:S0~sKUƶ|RyF8 j[[K2b:ɰģ* $ZTbxE3w|',-;' dG~L_+Hk ⥱Enݗ};<ϊ^tU7bL8xXw|x@-$ e#\^I;D34T벣*?2M6GaW'¡lP7q#G^G j0QXtw[*CJ3 Ÿs(_b T-O;>Β }9JNۘJS;֟ӛ ^1J3,Un1ig.MÛ5_R3 3b-Rf+M,)"ѥ:,,oE/?rOڞ݊6%xvT5!z.҃ +h $=1^=Wlf]k3ݸEZu?@0|@1ؔ #NmuݰgI;򅘹8|/V#fa Oyԙɿku-pHVX> P *c.dA ܴ FQnN Usl حCݍZ†,8HUy,)µDCf{!_y-i6MkW$="(>nq޵eZ3vg(rA;!8٭Z] j 3( (֥!+(K$dY$8ht$%PKv ƌcl":k25{i ҡvB^n#n}Drj 3>CN aP-gJfP{xg%!~`x57&ʀm),J;]eGS{ iv6}mEgƋZcgx!]Yb97 :{9E a6jĚ$.˵H[ȇ%u, Uڳ7 ogҶK7 C8@em@t>)He~wc!_ڋk| 1}ڻ"'B[K,?Eh"*j615V;(F6C}_.Ѫ X'3Ʀ-}BۥgVʘݑă.ʑ0X("i7ʍ\j`ăyug . L0|۵BV~ Hi?4 ї]o;Sd^ L T*04lCK|cp< T|{]]2$ގdn;zĞ}s ^IDY4b0ī)enw&Yn ,߉!g*C=y&{Bv"GfpԔv0(]HUb$z+FUa݇cHfg) 5dK?i,|\D=2Ĉ4);\ό=*pCTa@>~2t3p\Aނ|qE6 QUShfަ1A|vk~IyIn$^I\ F5^hc`f,IP۞?2IF!(megIkz븡sK %T9_ab:FZb=] o <B,Y NEzŨ R-f~ kLXpp ;r tƏo];amo(=lss jUwS}yfwzXm5=mM>@Qi"f_3 ,9Mp[10cY1Z8 >,Uޫ!ҔQtS{ 4LSrV9OXE,k[9LȨ 37) R}$[&RRS%Gd(D<+wFfl iE=t -.J7BbZ%'[PM.Ԕ|II N& 'Wo q'mA5cWu#)tj{$+hL)3,c t Ԏ.*u̘TS/Kq69>M$EY-Q,EfA6IRp#5(4Fі% c#E65Qmj'>G_(I \=!|[h.[\O1qyyى5%-} rn4U&#<.݉O~U4l}/F W;pBaOYG+@t  ĩj>ATCK6i;W]U&Z 36OD@sFg}&o(-@Oov#j/<[rÂ˫83#@jL&WMtx;\уfۿbdWߡNI~¥w.~)L+py 3xr~4yZuW5Y?$1P:sHw:'JhP0M6C|G ؕ%ZX39u;rn(bbEP?5 An`$.OA,gh?ySnf`EV":=*$yuA3@nMfնq _LzY9ܯ&лzBJS8b 5~m|ǥظ>Swd؀یq: p7i7ۜ pGNP3m6fBFFox9g^v,M~maTot8~ Ś i熕)O]ГhYŔѱyך E@6ιi 69!Ógh-T|f2[9Hځ dR/TY՝%g kΙDފx[8@.wVYLNV@vd)$P^rd^*g55(]' }}mMѢXMaa[-7$;!N5['u YyU.(ʂm4m";I48 I%T5i~wafY+Sp={lkA]Vy3\󞑞QlW]}q!546Ɍ4 gqj _fQ K(Od"@l(' =en"G*/?2(Azp&+G]Q3[>C8<W. bEIkɶˡ$T# 4r&4'8+{?7E{]sBZj,c APK 6.vWwQ]u;ܷKSNt3!V c V|L*lᣑ dHAklK3~:MCնI}&i ^x0_ô?uw%oBND۵JyaEITÅ`wW Os bh\O6>xBDZXaӚ^ڠJ ۩eDvocRp09C,Askw,rP(xB_y @ǧRu|6X®q _sUUk">DG2"j1д ?h&n3_!43W2]prs{oo%ul_ DY/ A#h3췥 9kxI$PQ5tj k )Pb~妪}VӒ>Z[ h'{u- e&AmW=.2\!Ә,r E3@;X<gxR[ VIz똛V0XOQd\|+ƺی%yզIGV[~tg.1eMs,Jq;Ȝ Z9Vˎm9?+VYQёMnt=vZ W =mvzjf)Wz=O!L/+|{MmӮ/ո(v4_a"C/ب 2l|A{Aoo!ȱ? =tgb5䦈,ӧ),)o=NSa_&ﻛw >1imfjR.`,H)f%ְJ Maf44h;e:~Uf&~X>;qYed4> o".25-O G#.s' +s+T{HJ}[M{ LF03 ao.M$2vgcN~5`vx^%W4H;$'&ǏO"!H&*jEQ`t/Z[i##U Z!)1|b#+ ײPܐ"zAdń6CSy[NbL:n}5G..jR5^VjOql5> &+nSqX "[9~-1`r+G {:&36v\iH*_EU /-M:.̢Poݠ1ZeVW ]\_z $fؓ{4^N0;Ž-υ?RC$G2g|9_kH"ԁmgȁs p(PJg[Re*?#~ ͡o%W/U9"n+e,ttԑMl9 ߼oȷ#<[8V Nu8:3+R90OZclka=PϪpp̣ Ejlܚ YKXKLahG1)O2ӵi{ F,C} #娇b'^ _ET*&{wZg^ꈨe/AS7v/ k^pL@<;O<,_h:Iirl'1 ㊀I|~Z3YT7@C^ӗQAکI^|s.gn#@PJ'hz'21b1d@ E;fG2S:2%;тz]ͽđf" oBXZzh ϫ7!ތЗbSvu8Q ֠( IGeVk o3a3~ff~ wͥ4d Eiqe\)[I,'l/+&'*0XU.=xHd|̏K?`kUd^pX#5)9+xloU =%x'gU5` -fi%)Y ]{'9RFnJ9"C٬_Xy7cHub'0Q~_1.9؊>v@\9 x \U8".sFA,.:*b]z>fڅk!9 W駽UUu0tr,kSO)]`IqQM~W3ɫ2AoJLaM&܂;+ 12]]U1=EFO,^,&Nj8RChׯg9h OB.!RHFp=kw8܅ĥDUdfm^nDg,QdAEkv8eLE6 (괱Nx^ .ݣ̋nأ!+ފ4JЦA:y=XΩD헄T,[,UGA+d֑nT_kQ z`5HB("JTtܪwK@tFϴK Da@ 9;qɖ [ɈL8EY,V-OYAW\&{Pdcm4I`m1/QȈ6܀'{3`2F|.L촧8 NJ<SM [5x oHMaMB9MN{ʲt2_)ᆬH$R -VTuO JAqQ.-e93-kaXX&&w)bUG-}6-+ YO |>['LЦ0,'ti-Qǒ@ uEFenƜ^I?M':ѝ\CT! '}@#Yxo ]j,Q 8){O;˾d⻦I':ԯXxhNnx*ܱDw>f ^5{>i>E$ } Oq>|}nΫ^&PFj޵&q XWXoVsDtW 510;7Rd)_qg1}w_782Dz3]bF$#\[F w!b,( (rto^`R_}بBȃmj\UE7yJ@`$rd}0_}f@BTʤ֖P%8Etؤmѷ[?ܳDņ/3z_ az&B q_u7ӥC*"2:0&kg"BjP2k?{R;D3eÞ ")*Uz & 0s^[fUI eQaHmO[B貞١ԁ0Tbn ,Ee!h>7T؜G%b(b*kя` (+mRVv[K žY5 uo - Q$۹mJ:gC%'x=0{,8>=2-GS):/rh /]gL5aڷw+ɱlBϺL#E-J\eqa.FC;DCZxAtN7R6 b{^k& F=8@B(A6.RҹRP| O [rhY{MrF/]ang70'ua=j/jNŒ'[7/(}]ꌟ^cL^/!Bra$ZtP#;-F@A9z̅IםHxwm9X37r33G˰ݞagcs@o; r:m.i3N{ <?$Ψ*bi]mÀQaR.3.F=^4#By&D7\'z0/vVn>_]2$ߎYܺtƾ[|cb2 4:F)qHH~??HߚݩRc5(o'Fb *vJUTKn,Y@y>eLkX(Xb j%ܒ ,%MmNm6EA`]LO[kHI>M*=^G#_:f?Gf}#5|ϣxz]j~t R?cѢ-F/RxяFrme@ $AzsyL[`mF] oLN2 B *p1= gT#Nq:IZ6Mi:<^|Z~R-}$Ee-hdfElbͻƕQ INU3ڬuR},hx dEՆ8[Nao=2'Cނ.FgЂ0H6?[+TibYؑUUDXDS,X#@*am ?yX ib ;X?e#㷗Ieu/|Ss_PPWG_[26d?]P{ua Þ}Z)(| %ՍnngBF1[qIZ䭲2ݲsxfkY.KN }AT&q0^TMxN$,@w/[F:BZ1F#;T|W35ZK5/D ow`rWGZz͒P=>&llAhR=Aq]֊5T=Xj(ZU8Aj-1mOSUai+ύ )J!HH ,B\f6o'%JfgF:ɨJR0 \41|;GÅ5ߑʱQ!ȹsXRV wg *o"0A8r`c37wƠ xv%0x;zTT߯OT.•Ab_&yܕzfjK@-[j0)Ķ ] OveB # բl!Aφ*i,@*tot%f%0TN@\g}+Kz޻FJ>҉!5¬lƜެZߟDQqlIiS5]٨%Ho&;Ȑɑ{vMh)m0kϥu#ka(˵^6` f=X٭@mWvO +{sP~pиM6؜J $} SMBsﮕcFѬV?Z[cA5Pn9)Xm^A`6H>}wPy4ݻKyD_۰mb@YW-'M.7!̀t|Ra}T(?6³6eK]ofVyϐI<ܿ?c( FC ˇ<Ih'D؟IPO瑑  P>?V1_->9Xl>x>w5ҥ>"as+{00%Yg[1.ḴGtꜘʘr@_|S $}r;~S/%HG="w عoғ*,Zkw%e47sVO|\D.e(/>>f,N:, 0c.n澡([}Ũx *@&v6Ho;b\嬾 bn׏b=r 3@\1爅L}{66U\-hxc-hsY6 Eܼ] 4Aސ1*}j,ĂIO\Q te \` X΋=I!pE1#BBno~YfgɢS/"TfYq7/  h](W6H1fR;D0PߥWw [,YyDq0%k53>ѩ4k_xW|/b >9%f'-нsRdpC`*BV<Ԓץ!Ôepm2WkϮN؊ q<`X6Pa>04Kސ)~PTw)jGR|[9(1`etط)5ێ8bbiQz9W^sI7{UX*68vxa gR(*a`؆푥 hd6aTU3 bxgNDcU+ 8VǚwA 9VX Pc[l endstream endobj 62 0 obj << /Length1 721 /Length2 12170 /Length3 0 /Length 12749 /Filter /FlateDecode >> stream xmxL]ݶ5ݥ8ŝp;wš;}Nv5X#ɦ"sQt11T%UYYTTbN@c  4l쀿6*@kJOacl94m@77nήNBT@%`ľ)i(JhR@; @d 휁ts{'Ϳ_!`trK &"MQ !Ƣ&03Ksq:k;F#F&uwČ0L ;&cgnw?Ր`4vQ4hm\]N{3@?(c[?:YU%$hr+_k}/ @3{fv6s59EA[FRF-agjo쿅JƠ?d& .N .+?DE=xL6ο/^NvC hwO@)O{Sְ~s s3F ?W{uACfwjHij&.vdZȍHGS1d? K)*-j^ 4D\Aiۚ*B]G޺d)Oqf: KUt@m'.>I`d| j,CLw !]SZ}t8׾mY`t* F$Xޡ ic:+7~1rd2~ ֔~tfꔉuQxiODp߽W!-v_O6b934wiDI6"~x&q4Q}cXEI%b| $V7kT?:S+|yj;7ɢېܙ&iׁT&p-T>|2c($CEv֦I. ؐYl5: +S W'5J3tc3ϕYSm7t1ghbŒhxVMu<\fZ(sˊ?P:P=)5]0(Y*'7~8w[qz Xu}} įY-VC*t !/0꟤x\d0$ihxPYGNa{DIn}rOs҈;0!f5L$#˥GCǿ,ժN4ui 'r?"*U1Q\fx;qIE"Ҵ putp8(djÊK)c0 }:w5g0L7Ux; s_56!DNVFXR I}4CD`З#3<}ViZuQ=켈eڨ-컓O:v/͝`;J)_$;kyFUr_^U6ˆ苈__Fwbuo%PP/p3((Z&;W ]w]% lSds}ЃixY'̚[y?I%5>'( ߐd񘮪yhsʂ&M*jZz_(cҷ 'J%{|+zvdzMRgϞdPӽ[^Z gퟢ"%lj8ƍ%%cz{]ƗA )g-MfuI7U4M_GM#Z;tm̥hHPYI;R@rv98$JqwqEz_^Mx0s1q=/(q8*M[Vw~EvAٯٷ9?ؼ~Q[[؟b95*;%7wq]_2Ut{\>M*+_|a%ŧO6f1+R{ uIq3Scf4)W }G|X BV6837ͲπLSJ(E[yޡ3f*Qv+A7'nj^M`ب: GqQHzȜ Q72TJq`ܧwt XEۛWŕV_;%W/i#F ZHܣ͜.9FߠuCUg+5󰠍+5D%VYOj-m&P43+ VRl`T_SΏ'݋%Taj}8 ׫| \& W+|S%g&,fW<~oM)k„&M{Z~94Cy*w0OD0Fh꒒5ۮsU~ot\]q7_+EBɉ[sOѾ#=^赇M}߉VGl>LV\ȡ$!QSOem0`0 3 U#@9'"V~ l?i{BvpT9c]ytBl[!^J|Ma-*͠s; >qLʪi`fquWp@ G)tVŬbB;? < = d=*㴐bQ&֝7UpbiB6}֕J RsgX f|J#Q6oO QH\s٨>#H[h! w$׶JDBiPQp}&b!z1kL~gm*O<9uJPֶ͟dlGcoJoq]R.骥bșx^7~1C,tڱz}<44DS} qbz ×x :4`+;?-#Ob+%η(aK`_0Wz9^S8KI M2dY_& x1=›8 ;~2FfUO8,S 0me*o) /_ԹG0MWM) {yrۊ1ux{^w|-Ͽʶ1qoPioљ0z%P(e$"@cy&Ae ; /gxeXô Y*!Gjy>nwःQՓ/ŏp sSTUXxم{I$WL%@y[TOͨ; Q+:l/]8|{=HZ2[P#, S34/h, %wĤEyp&l˘P$7pT+ ~w$no3{,/~V??) |Kq$;.+O ʔPY iP  h-9f⑭8(v6$eFD o>Vsn/8j-c?聯HшgVZs)v)Y^QB\#,#fS5?sԶma=g#> ,I$7B s- $S9WAhsF7CDQٗ>7Q ==O\;oNz+wyD[tӣqW4VvyC}q\(ʀy8i5+hFx@Xt4 VWLKp5'e,eBB)gIː+v!mHжKKHYy+:^v}]Fx:˔]Z(j/Y&}t͑}AB͕P~ iR.hKZ ׂٱ?aoyrkmtnA2 uSK:M|ر#ߧ [5ۦ;l,gUYTqM? )IJu&2RJzD%bC`%0l2#C:j Hj<ƥ?La}V/ߖ/&6&ă1QY1[uT* I lNKDZVH-5N 5ئ~p$X)%qoa]yiy&;k€VGĐo2^Z g-VrF@,TѶnLAL,cOىnn0ȍt통 L # `sFRS? ,B{NˇW ؃*.Tt=B&K-c2Zfm\iMb46-4&Ĵ "$j:\l?_ŚH88ZoDř|:ihgEr^UBRD現yXHI!rSA)Ng5$Dsb5<3]D760=KOB+x96#5o*ubo圛{U*@C6P*K |6O4sj2!x;MaL+ψwb/SSW)N5OroCST5Tr˸#ؚՌ%IɐM*'yfc~#Ձ?0J RȂyRp%u*ߟ'+k/v.z\ p]zo@'n S, r"|P2c6iqP_cCE4N؝K$>?cܰ/baڪk]PIE $0fLmw*;Bqj-y: y9?;?oV8q1|hE emw|2)Qa 5!tnh%uVl]h,-/{4 5:ljV]$JTBaLcTPFp=dt(>mM>CɛBpuU5қ. P/[A[8Qrӎadxݼv%̩UpYM88i]>ev(ͻ5>EE)\2jIPrIA?xIʱlCȶIYHjAz!i?x [n#!K;u1$UWTn 世1* żehiAxSw0-SNU%}?rnēK|^.QpGx5E^ ϔΝ&7 (GYz-9&(V^u;E%DClhLP!9ZZ*jв}2\_!4/1a+I!L?z=MѡU?jJ-_;+7Uvc`x`!P?P &݆ oh.L[gzRpIJ QC,N;b۴X!uʲlPsKw9Iƥ>Z$Ú{&d݉ ià&O4Hdss)W7:[>e5 oY2DaaPk)@qQ Z6jLgR#ZB_>Dg5Z,L%Pr3(}8+Z0z-F1:h-aV3s< R*GipPKd2uUp(gd9u][t=" Yrɮzu蔂}\_Tz0#]غК~2!W9 6߃#N)2IL`\Rgo˫R%y+e54ZQC*oT\o('^^T,vw-FoQi:EE#B Ie}-b#Bg¥\`tBH~YgddIԙY$p" .Yo̒\!q,xǫ'(%31'"Wpa$x \oJ:,J"t=a9ď6 ^sQ%3y 3wCeY&{g/޲@}3ey؏_ކk^\6wWl,K <|ti"QdBrp並n;2*KWzI0L[5xWj }W:7$˵˴ais?kЯCĐ#ѸjT9k05$HOGґ~7?ccɱ)~/,z46egLOFĖ,~Z<6' PYrғt7gTZ6Cr|Ne0_AO>ԭP9U+ρxyK_g x9dGpe,0 x\Ժ:v$%,lw9$L>R;) fV6G${K4iiy!|:1 )0t{ lⵝgtمx_&Dgs![j1q{9=2:A+*lF?>l厚M5 7)qW5Zr`ȉCxlnw85+>Z$1譏c $b0Q s9*eufj"9,{4X!?{fVu5)*)="kT>/p&+ `M @?6oOMB1Nr'xGRJ]=:͗ B:"`*iC29ؙePHEt M`vnCx1mū\g}o$\Šٿl:;vƕo 'amS(ePK|a#2I`&';#~7E*jiE+ҶrKp-ȀT{r?$ x v&Sqm@kV{"_k_dNJ'FQy>󋬹l+ѤEHCB܅nxq.BIz8X_OT?5^lqmG4g(j|W^/Aȗyi ^ʜM)^& y\S Ȇg2V\1 xu&W~)7K= ]gmk?~3O۾UbH @M+uS#Uk;7gBe|A{8vj|-Sn>&B:/ +KzuW\ ߧipnQտcϘp&'A9wanqxUΥR>S^ gEt2{dMRRҐ++Q=8ucIyí TN).hjz,Bsq~wΡ/4[yAc8h=CHw ov{SZfm͸BEaZf)KG۞ɬؐB)hDN:&<Ϯ.J.\ s @BHɟudћC7r"׮PlHu_u1+x!\g(oL}aݝFQ7q aѨ@~Ne2kmgN%NK(~ P+;>{ϝlEP<@4]/_HAW{g 4[Bod#ryPgh B[3bsDQ¦çQ 1@Id 7 >Y[*Cz?RFlHŭP~uϑ5=CytB|?LS3n @b\؉gQe|m}&#߳Q=TS &yeUڔ|~4?qfmEIe@L?jR}ǻ">qY*L=r{] '}WgA,UwуF1ύTl\Kzc;{ǘeo:l_<4E03JϠ>bmg>BbӍ%f)Jn<aΗwp^pX>gj{8;Nŧd \Wg. l2Ynўk.zyDr;䧾zԽ%Բ#;p'"5"Y65iW &ghNONݣ{lMoZ)R N+6{ٛyw:Py@< XV"ڒF{QRq(L4-t?꣔~ҊG9L5o&Q1| ١>p%'v0"'J[3nY[ߑT':ON!?j)gJ|.*7f&rka@bdurܯc twzc(XUIoF,Rv0b>R-k뙾eDPGPA|f1vcRu+ܔ(̈dDo4&?.5F&)G('oK u'< <4^%Q*HD_:4@7.ЯYoܭ/I_K|DKS}wy5B4?J=JkP#7q%37KfwB{uC"0Zgʲ`A*9hYN5ș|2Q3X>GÄk3/8)Ӣ.s r=2\0H,UV=}]WҒ¤Pqm!lw4S`KPOϗ8.L]Sށ R{8MLյf'l]97k(kf^CDvaHU%מx3=49VJڸ~`+#yKL@uwrnkr8l8r-󷎡P#  ~>?ɃEStD>l͢= KXYq%LAVoe |k=[+;.m[4\Pz x*獽u+>)ʨ6ITl^@½x/q?.3-n UӪF_Kyywiw_o >dFDl A߼N* 9x͙{Nx뒵&("!IWMC +j&}H %9 :#34:Fo׭q3z4y LOW<+ƣ BP8]_qN$=_:&zǢہ{}-X؂!s!\ىf൮R  5oqWRp/.r&O|5Mͮor' zbf1  ƝZHZx*ܞBչgf^A^=7U^r%Co]Yzͷv mӘ'Eior7ސ^=ҢiaƩUο/5n(#(vyg/#jB:VfbM+.9Q;^zNQ{ori+#BSMeva݊ ՐzHA鳔%H9*MR[&F6mc\u+LwcMťDoe "*_'&x̽N52K?<ݗ`3ݳT S<*EQ,nnJ%5Tz0aFIMݧc@K{W> stream xmxePݲ5 0fupw y=֭ӽzukwծzh(]4<,@";/ʉBC#X9K`3:Qh+ K)? @ rup29B\?mR.`- +$ VHc[)@l f;@NfV{700s@QRCTJYI )Φ!07(mwqB53忑#FB<̬L]&` +{&ko7l_Az0e*ہv.`@ 9elgeCrXEߋ"~Q3{[9Ȧ%,io`feoPw1?ecog+@<@_/sfap9x\G+w'g`)_BZ*$+ᙦ'4~C/NcY Z]i廣Nm^Pǁƣ)""z(]}R-xliڙ*tX8Ε{T+T&%mTa-~i^ vxôehᙉo sBCŠ@ǝp|^ у#v|A;jrvtHK_%Gk_wop{KKb ޓ-iU ˖# -q ^'nhFj! uff34V9&u)[g+|'c3SfF=\EYsĊrcRu c 8"F#}ouSC=tHHF:?4So! P>П?4}vb,Xkk;K?UgԱcRYtJ֔L< 2u$6FԌDhS0.u,Qdp.X @Orj-#0L7jz4y5MHt74>#E֩y!Rļ$ZH! RjJjY0)景bh#%mzJj6vd[6Y9i[і,Z*m?CND#a e% 99W_?+F{dihbU7B<5ΟBBU~S/__pVoU -1: %sK VallN_5i=C*zkD>8Ǧ.!DEWϋ҈=C`Q*j\Vc\ DwWG44.G*iMW+q=.P`>^/o??_T̘_PU=i64anF|efQLo"o zb)2ii ! 0SQ/wMusޔPdx[Y isbh%F{uuJ*YP֖$"E;SsWPj3"ΕM,eq^ZqӡJ4{AaI駴;m,Ro&\F}!=9L,IDo_Epm}Bè** üZGOO۪7 } ;V6s˕L=exƩA<L.,hOmO~a snv[;nU΍wSfQħX+P:`0IwP~q^b̅rɏyq+%\ 7Dmt./BHP͠ J+S-|2(;}"+],ō^KOƕ[hj`yk!i{4}Hl{?>cnvY?)$'H o$)"f9S=e  k 0^,>lNHc3Л_ώlUz2Sg WL;5A`Q8^1 (Ѡdg .9j'_=_애PnA 1?sTW7O%Nd@F-Cvİ n6Px嘶[Ȇp2'C] /8t[vحfH;c䅳׳؈-[@EF1yhG$y}n-$SL61KHϺyHX0” a3z?Z|Y+/t5^lPx+e5, =><ISK7#:=0~U-'6 0RqZD#V)hⶎU|D5 )X5XODD?x~nw,B4VW->_.̢\q~Oj"^P\džݿMvW5t'A~5xU  *5U䐩lĹlָbɠNd)ox|/W mUAz壟!'/eѩNV]L꩐A8잇,w}*Ax¥U 3-ցĺ%0NݔCo+kzT̀cI_P|Q: , pL;F=N779VDu°H}yoMƆe=BZ$sYBSR\F+W@_wp'eRGy'bqYV+\M,JS@FH&(A ^|4hyDJ%GYYAYiM^LQ$WsT̗Q+"g/xh#1e甧ϝy{ZVlbdM6Asg Om5ܖ|VDgC*zв5ׂ^n3y_)iZW٪l -a!V%i_'5qA\ #SS/e9ُˌG3"1̏ 4w7XP }%D%c"qAHbs g/kr#Twl 7!M68MH<^ Rͤ+<)x!+ tj7f  {H\\o`_a)}Ed[MylgxXqo1t>׶C[]}d S8}6YX> (gckƃf=ľ ?pk (۵fpӀhvhk(Ozݔ,MIlZQ1dro^ nP=;*oj/,/4|3~ϯ Tw%(Iwh~F= 0ƃי Dmo7tSPfA3ۄ3ί _*¤ۭh(ehmn6[V㿡9,(;^}d֠װȼ +,]c ~',ayzV@OC$[Ҕ\{]3~ g|Ю 3o x\@ K%hSO+ڵ|2dLa O H B[lM? f8%}u}V 6;DG&/Z& uC5!,%6zW\B2g>U|cC(g,=B5\q`͒hi 1T}Unv(hTAXv{$#?7MrzW a2{#лjU^"l0+*-پ@ks6 TZB%5s2htKRyZw}1BzQsba!GA͗wq$1zgJWjx86cuf-MӘq{\ Jz+.NlcC&]vRShHM`* O$! ψ.wu{\h..+|ܷKA),x./Mi鄋ltY1= !mbKsgx9ӹ&+Qq֤~n$ ٹހKn`. t&I+3.MQ3s.apx֍e6 ,#4i(7R*Z'h'ܞQ(Q/`Uk,gfdE&V+kV^F@7.+GjT*ӏG[5HȞ\C^+ׇI鎨wG)y^f!Șȁ^_{{Ûȕm"+".sJ`^qJ+NI{c_V\N<.hx?rB+ `.Je09afk(fUșZvሞބ,xIMe}v)5ے@#I>:x'p}Gvo;NJ=&;Fp]A% :+Õά]2H@hzStsUÒGܮB̝p["=\Y{SP D(pY]Xoϟ-80:|\J^F| N棜 AE8"ӨAI/MxBl0p]^u]Rc.9Y@ǭ5ֆ8k3 Ճ*GC):2ÔWm ~́}ED&^pz@r҆v٣ҳ)Z$Y^d<aɼU,' c Qv"𠒘Ny 42~Qޚ/e&:nǵn'i4Aw՟\a 13gƭ#b8m_o15i=1 gx' osU}>vψq[.)Oms^Z \ &R\)cyh;.+vw u\%ڛPVfE;›3vas(YqwTwbXb\k5<M)kSaś8~x[P#Lmz|vڝs0$z* ޟ(8kn2"CfJK(JHDMT˔e:i6*s{}^fTMBծ`v2WqgNƑ%Aƿ?'ͳ PgZٚvJۃ`s?[\cO:iA:X[w=*+bݚp*#EE/TE?Op{IG;Y?ءmjIbB:"ΰ]U^Z|ip;+4{N{?tݯ&E)dwFUNB.<$ =sor|; K4a&0g GWw-eI,";@+G/:޹:`@*+!ZuooS] Rl| [A}2(,O 5qa|j}/rSZJ9ߴmgF.,*6;/QLL96ZM{C8N[4;~x;aVCS>'>p+Xs) zG51؄WBQljf Oq=,\6:D|wIDzxy&U `Q',I|p[/b1m}mDqE.Uv97LDhIt{l,6m>6l8tQLc"ضCcz8BH0GW5/(Zh̆x_> "~f5A o@i:UTQKy6VN["ߠUÿЈ]BL-NUR+))cT9KƇR5'kŅ9 >f"OL[9&Bvo:\ZHjB)ް#VBtvz׊:bOцJgH͢ʒN$w7:A D߶8N{ ު:,1C[ٸPj6Y<.%G^JpFbX)'&K>QYxȠ2͍qî͠x݋|h pɱ=W=!Tl9tZ5y`>x"̼hsnXCuYH q"|sao#bV%(Jmzc%huO)PΡGx(lf˅תԢvD`;CD:7k> stream xlpfݲ?Ll[Ol۶m5m۶51&m;{9{ovծ굻kWXELPPUcfbb01’:]Ō]<M@`f011ÒD=,,]T4lͬ쬜nV>777!7gW'WT@%`ne **iK+H$@{-@ ge wRafVəػ\q /&,eTۛ1wqg4_\5_:ybefYLVMqT`H 03Vustu:̀Nad/?!b(HL]\kN@3+WLV}MFyy9 uMM̬-.`kdM<.NV]& ӿo7=33+5uurڻ{'4][v0 NkU'^4[ A;;mN Fj ^ 7`&ЄrG8<9MZBZiW\np cg~q璱D3Ŗ{^+E9ڨsy;~u^Z5S O[RAMScaw㻯)aA e3&쐑;Sc ʢ<ܘg8/7u,^u<mUamb Pro(##xBٌu &/S8YA.g3]Ҁ>ݺY a UЪyNDw+>,v 0>ـ$d/x_3ϣ~diz zBcxﱒ=$E W-֞ tƞt4|S.W Φ^8nda1ᡫTcHGyѱ!*ӲN|KdH]"Y,9/MyqfG 6yB//)lf>]N@Mbto5}ra*(΢vח&ڕ :)WmgBƐɃǡi[Ko> %SoW!x4"[LՄ1qxC~h@ ]p~\,zZՈx3pvUrR3!$ guf)**tAʻdk\4f/DbKтFgY#ӄKµf:%?}+ 86Ȗ7*̋B+MY6[9RpS6=D!CO_m9Pi9U)"fDRcl_tiBIyXBmM;mRfXkQXWk~ֺKpٷ@ᚓ)á104}Ïa! nXb1d='(ٛF2(Y05åX|r9j Y1.6ͬ`d$O6"` !%/\DhwD6F;|]^m5j2jn0C3{"KLl8 S~=go{$J=vH=W5]x[Dj "`D7EqXd{/ibZ t_U*ȸ-.^2\4S5/s(%ClM'.0GaI7xk% ł6̶Phd+GgiD~;5-Z.D6CC>\U5hFC +?"JdHO-}N/&+LV3 DP cccIW'FhwE+|"Q,_ٛ!`x0}07t m]-JLś|_)O~ y3R1vhڏnvBf9*9shϡiy/KOJm@Ӳkbk7D<8P_W3R'*6ad<̐v%lީ"&H#sFt򼵱)X /;':v˝V|٭8-: W %R\F8_kP{:41h$&Gl̕E`. ~rG$(Mp͏MicO]|'wGfD8'r*tA/b[rw׃2@=8T^EKߒp(4ܟ鯊=K ~>=sI߻:6k7^DxXj?鎫++ʽ7Udk\:ɩwTϊZ6~2SdGk",e& 58ābicyΚ9jJ޸S.QRC[=dol$JN*dz_}2pEnL~emUaՃ#+6rxpbs.O+X=rE1*<#?0od7.(u5 UwѴucxwMݮ2O tRGgWg GZߣcf񔼖eL_۞91[arkXo>u=о\gAXYM$HC9( YD@XYf&݁>Ɣ5t 'x0 zDbaOΗ}4=U1B'pWQZlK0uk=w>Gř_ь\TtC21ǼWn%c[Jp99L~˷v5Ul6-d8NaIyB/GnAnK(п4q8fۥ}ZhioYӊ*{ ǻrPD>=ouYE²Z>E@5pior}=qz| umUi P=C} ϳ:,˴_>Z |ƪz6ӀU xMa`^|߂LU~68tnikJcS3B8ۺp[#ƅ#^tșR9t^SPX[!!Ɖ徧gÎӰغ|"\"D`CSG,J,tӴ'k rkTAoY sR1ZeywV1j^ gĀFbkRpkTUE͵ +G_pj!YR"l~z5Wg;D.%ƀ|b_$)o !rM9r.o5DoOdc4y8/Z(N1,Ԩ%cXÓRl/4鶪*ӗW=[ۃF(î¾ʶ/A15F7}dnl oOd3I&^vآ]1efu/ur"V0e'Iu>Qy+o!;=ʬV-1# o泧D'\&x7nV VF}e*P(v7RP樛P*[w=liee8\0C7q#4, TYP?,XtMSg~{IAJ$# )ZrF|L\ޱ^ToĹWCLjw#QԜ n>4kO`r_ ~ۙ"Yh-x\ MHFMpNۆ{#dVn6Etk4;): u1mU&HNnٶFp[L>\$jORJʝK..p?64} Y?  5Q[ ƯLJa90ah?E4_=n-M|".qlr~>qb*Uihxl*,Sb*]_]M#Vf.Y)6b!ؗ7~A8HEXrlad 8xPe,^?5ĔS blgm߮U}|YGN9/gT`E:55vRZOLm9gCg. IM$ƼL$6s`ӣ Om{s,B :a˿ QD찦FB8*N j+':ebBԢ&g&,syd3+d=>(PՓx^G(_-!h-j}g$QP=mΫ57v6M!V%>¯%k1.^MSد)H6C WؼMh4l!9'^|i_g%>|~%Ԝ6Gvm&l,}V4X睼 p"m T^<VlEttxL~!M؊_(5ƕ\L [3:Y H,8T4cnaU< C#?.chg Y|z5XPpfOt'qZNXahkLE~c=D$Jp{Đ6[մ5\mt+Qӱ=n;\RDb?/M.CFCqTG xGqN@sw?_@zIDy]Ra''19&zPإ{6+%!3i[^ryR%6]f%|L3lX p7nؤg[! ٬)U- $q[\!Ck2D" +?,\+1R25r/a"-3)ZLv"E3malPVD_)n/_lv(AmDh?KTY0\q/GO!LUVUoY;?z5'l"Y[T`t'SV[ne(SMG\;7$^0w\tpY2]bcp̵ PɎUӘdE۔QٗDQ=i%ȒňDu_~cU2}yn]CB, 2@[?25e2nKTatx n91,x6Qʞs7u{f]26RhZro4r2coL)'MYœ)x"}ؒ?hk9Fh uK܀6Chb2zhJc'm#wAe,aZ r}08\?)#YVjl>ЄA.4Uka?8x"CHyp"C./[BEr}mq4vB<[tCqp8Ciͣv5 ሐ1*X˩] LW)B} גU?o[H\+į1ɶA-! oN=_eyP)F^F%={g <$84!,"6Ű׌Qɟ>emÄ.Litq&5JȈd@(/bp^_@dOt64K 'fnǜ#;k1`t귅Jpȭ||mpI"g8"ʥeSht-/SPEubU^Yd[^,S`G .N_iB PH E0VOIpױF)W!8!_,>͑}ހa].ZV@2wQjb_ Swdq4v Y2aWpύԎU[})jLG!s})z<>{6?zÔVjhHIFJw՚jnZ#g1hl2cuPК!PZF^l]9dW|V@]ڄay6LY[d`kcpT[27keH?׼dV#0ձ4lh쨽0Ћ5NE֝Eq=}F1ʃTF|c? ȅXΝk꒕+鰔^}RenC53k9dJ:BP! Հ8"..oT#yx'D6fP:8,XlrMf'Fփ @Jzp]3.o2t@!`8 N̓(dEGyKPkw0cIS/.Zݍ`go wdB2ZkҙM߅U'©2"ZYR@Q4$v5E!wy+ ܘ;"o!fotnTڲgc"h3Er&|<Ю@Gh>֓st;+pQ>3nSޥz~/[<ѵ@?uϊh pX `EYe%W,^L`3TxV:~;޳yCo>*"CGs),N!/4-肀-*RtwR cO54j8+f޷)$ۅ ~SW"WT]/N9Mq ^a~]+3dIƜ3Sǂx$[t@EFssjiu_~ev ?'58(L94gEUyR\pRPɑl ԮٻYM];zeY_&oK{rKr~{`, +8$`_PգI>ڲ}W)tGroƅXYGE$qU*dH >XϟJ6p±Ǣb5Γ'n|SF9i.=}Q7p>om dx&W9ZoH]6FbI.$P(-ts+fႚ1Sq5-4L1ͫK>jMB5_:XwOB j C.rO"ԋ"s mvDj&=ͯeY7 w!!8ffAOzȱ7ĠQ7P'3j:]A%-5@[[M=4|ms0n#GKmDm.X?+rdп_Bmai2,slrw#3pB!PSy= d}6EH&ªYteg6i9󱛊-h|oЦ-wK_M;}ש/PXcfO@ *,%W&,R ]9779Ie^; sq K%Z15+Ìx^J/x/3j@>g,_g2;>_ɈqkӾt!yWM1 ֥(|x }:sB4g+`;I YʩVNb `ȃ&7ju"{*5N{j5렇 :<>SI-Ԓ#eďKu^&>FVVLYT09z?\;fKCJv&y# 9Se/ x6yˏH|`q8F YXwـHǢWBD}]ʠj uXB`CϊNV!a 3 :T!UJ<;BL!xk-g=;KdK@$Ua< kcBeÑ˥Oy?!uH%OQ4NTd0Bvo\ehk[Y8_s4>)gnjhzY%-P9Xl vUQ?Á.b4{&yIG* 4awG[cf()MXq#-JXo2rHo1ADh] Z9лuA(Y2[_)Y0S>zr~ z.L?}}|CJR-ji "$} cWJ0A EJw΃sg|=~Gq\x}z)?ƶE L<8__9IYg Ft!8R@쿭 .$79/n633;B'<a`('J{͞*XBxdC85]Xdykl5&\$I G]Mni-mY pݼ&,q;$q7B005֪dr ھ?lfq߻&7 ¼׆]7uٰZ\QʌQ&pfW8X"' ]%(F).A^"b!bqa\uu+zI!%٨ v4f0Qiqe6ۯӵ,|(s1Fb)X<Qm]n1g 1I}kQfPwnfHeɍpw]MwyfTwhnnᰲ% tzV<2 t L'jYSPz  M.kYn/m>y2 i©%0Z/'/Љ lj 3ubI=~Ǒ5cQlzKJ]]ESA%< }ncz(/U 312Яh5XUs0EtX[{+:Ʒ%.'~Bg!&!\ۅBwZF8z<  B׫PAu&D56fXX7íTO573ݫ9"jn-;en.ǵ)֞^~N+B9e 7j׈2zv8S߾Oj8L(^לּe5M͝wǒa^_(4 +=Nէ' FR[ UR;<pbr'gy"lnjڛ6󳷓ɘonN6 P/j5hM^4<_`yVti!vMY5|,ZhWq[ ,ˇkZruFA:6 Obc(j…}3(fwϠ Ȋ ږ*Yv=b\{)HDcNS.' 0[c8A<=࿓P uGJ{JЫK}.0Lc5_)W2Q`Xty̘-%N׼2W}|[/³Nw1y}hv ei b'<ۛI|p?~̧YWBe2+~wb릃iՐ-wxS˘u:!1@ޏ0tCM%]ju0U\>LeYT+?>_A:+"{T$ם_s֯27r~udjeYE $Hw=2+,5ȲR(E]ĆoOg `{0p(F/#5j>:y]3y -;1̵"b'؛? (ә6Zm$=FhXXb{MӸ49|!}p?Qb??Si>NmT'g\u cJ̳I%+c5~@'0Z;/ _d.ABhĮT6aʫ&{xUkQѪM"ȝ'?"q%'aG4 F&P/wl>53ST`vԈucuQZ4tT\v܆g_?C̚blnIЧ~%ktUp}ZkiwJ"gy ,tu:12FN |~t{*/,ZJ53<}#'I )D2=dCvᆁֺ:( gr-߇ >Shu`6X*%४\w&~8 dO݄n0jw`"hPK=2)X;##*vB)?tkCe#AKhwNIh%W~ ~(eLd- bh|=b$M>HCm֋e‰o$N]˿-JB+@e(t"rµ*)PuO( "NJ ;B'_#hP}%t06YIwPwb,,iT# ToBO:ym(SVGXWgs-/S5/1U;+@;Q"Onؽ qټ4kry {W$ {tȤyΊi%~BeS06j6B8PZ4ʐ }f3w4Tr3o/7 *0蘛:h-(F HQlh"wE@0$y /vU֑1ZZh8nqɤk,,9+p@W281$?yH = E}K% IbvS[ %^zKihTaVv7nF):(%N95M7 stWF5@1i$>Ɖ 'hc:!}b} RM5&yr/4rӰ\ͼsZe!)f>zE]$}~>VnHDVh8Ǹ,k@x vd| -%]nh霭u}Fg?djJ zt5~oֻv9.q40^-0C?,^SEe8=I]` I縗K_~7zWK*jTCg $e,[*dyMrCJZ E{~Ķ5u}QL;z!p U,~ 3/pYqQ4`'cdcNe[AXvb8]C"uXEWJ#r(9Gx/7P?BtDRY70׫HVb⧂'0T;݋vBQo1yS}N 5 'F $+vp:FN2XZ͢<2s c͓JHH &(`/ܚy ¢:v`cogZ#)ǷK fլEbd0'X#kijΣ1(8 wsߧ+hԘjsO 8| ְLX5^ ~pz Unۡ9]4oE;uSrw6RKk9Ӿ7غ(.k2q`MOiQ8y<<T:ak=. wS*P*J+id mrV᝸skB>fʂ.ȚM9hšs|_F{i`c~Ǯ#C;>=bW`5g+Fbڮ,1 ]xBno5 `232.IK?t fU ޟv4p0=G46FcӢl~T{g<b~5%r{^mKt%8^ |k_*l-f`T# 44DtyETBvSp@86%,H9z-e Gׁ9z<\懝Z= 6uyR .K)/?9l7P4V7mFhh ~uNu=ʩ튰yζ#6 pfofr*&fD[F= ,aDqixX86M yESrJjrtD%#`!VGcZbyQ LGDԧ,D- [;V(RezjWo P:ad \ˏ~,l686h?c)H>g2usw֬)1È☌tqwWW'>_~_z'C! :Cz0&SU 6ՂC6*O)']:J CΞ/eOm˶:_<**OT9]S1@P@Ϟч!=O{Pln|d\ |-~Ag;fi= \j"ceU#PJF3ז\=*FρF*j>vTa'""e>~T}@a>~Z^2ĥY[+Hnday,,;_Xi]d"Zڲ b3Wb[hرI񻽂RF[XДA@#(珳vK#;CWڱ DOs'FAc,xPy[ ttUǧσ1?ASsOu{1/N|/~,fk sti|')ץ" "ߐmMGLיQְͯc/צrzDm_0"Յ[~5HZ%! `WP2bӫ]; ?os'QlS@LNnÚkCY!CUH /!Ҝ>6#gCI˝6 0aCV}L*?Ș[FLG0C]n͊gKb^o;i3Jg-+$w6:MCrQcBG?'<v۞"kV7N'V5i<‰@ bV'>蟕fAW*L8mh*hxBC1;@%(R_7N\g9z~b ˇ7a5'3Ӊ,q|%b}FF'uGpuZ s6 DT&2] =w8drHDWx7q:F+|ki.5l7C5c0n51vmps9I˻%7BQl{A1 sH"~̺$827+/o=LREOdjY`1cP#̫ EEPIնn z16ZͲ`W]?KE%C5(M@ Cڕrfc~;PJK)ky@ {z%sz=oT ᳋-uCH,=}>IS*aK;p:5"mwh٭5)gwL.01>dQKrř?ͻ0F/y!@Gu%L"E/xFTmc(mikU9P$N?m4!-ۑW')ɗ{74(.9PCjjOB3n-v$_QB iKsqrFuB! %ic#xo$EEڽAXSh|(WV]ݷ( *q Bo6l榽'U~V6~x0tvS_!*̛PiFn6dY&ωi[Lr16&=TKD[}`C: b, V)cas8Mn2%2kn# ob VG˝zo@"+ jr:q3 gPyZ /3@JuTtQp &\ qd]ݩR{ v[y=;iksYBFG FY*kcLmHt%_9tq}k9~9&%ʓh-t- M{2xw ؔBhdtxU(c(H-Y;!zNNO; xbOy /B +@r+!S_mPNhO;ʶ-y>66`-Hp+1Ί_hDDl/`ʛmm$_%6V_(RMx x{0 =+f˯&o).ٿq9wRI8xB;;^|˛L&5l!h6OO?{R\I VmSsd נdF}]A@9רxT6!QF $Y Cy=7-q~.̫r>ĝu&ʣT*oNZzLl-]1Pyt<<顫C/EB71&"_$;;qQdzIK pJ찂3!ߤtN3f[1NR9Z/G\}L,b9fuGs&6駐U,^ <3-F:--:gN8\w21wȆbrEO*7e4#x,Jbi0}³Vq:/&Kvw>8sy66${x<3.UizP 95R k *@tq-z 7H\eT {b|>+D.I;+VESJmX^Wo3B "י Z 3IC b<7#907j-t_<4:N9%$6?hAqO]`7ώ56 lƵ:܉9T<]%$Kп(iӊOל`1DQev;k ls)X0ǐnvsn#277'`#OeUG*Cڈ$_v>ش)S`e u}G(XV<&9<~Hp']>[ .[(~!EԑhrO$@Γt KE~|tC]Jzz.t)^b-X:a^pS*n*xAt2m3"2rWc7z7`Ma#;n1G&e8;M#چT #amDƳ*ؤ2-0z=+;6;::>+'WJ` 8RL[7- DW"7ʐ4uM[J]+Gf$[M #? aw]֊)AtQRM4ߊH(93LՈfs?X78QF^?kߓ=ڻ#Zķƈ,q#3ȓ5; d|m?mK։< f ~սr־KJ#1?6&YZx_(C/73WpK+DR0>}G|TJ&aXO`[2g@;G¢5I݇դP¯GEy6ў`O^wsxi"\-ͥ{bg jBPϘh `ǔ9n ,%Ŕx*mfXWUT܅MHi๙Ȱ.6+}X?F}@j5:_9 Q6-*TI 5/zOL|&X3> 213g6qNlc":(Zrӗ' œX nNg=wRFs3 /qNC<Oئ(}^,_j8")&j9驠򷢁pA -C5Q87}&G?;ʷpZ}l^W9η7Yyذ h SuM2hWwe14RG0aYuWRk er+{ (-i!A(`|'? GD ) Q8 `{Y(p(R22x鷪k0km-K䴮apfcrgKZ,=bnž~ٓ4vI? ߹ܧvB@4-d<ً׷Vhs88,,5Rs"\ mlJ%|^bG(LzhU\ ,8j_̏%pй%vC-"u'=b|:4u%c SS|VиܦNt?߾4({Qɇ"R^`O;E{Θ<B()V= ݱGGܸ>=!9(E7/-+z슨&ruï[}Шj~~xOj/bY GEL8$ +C#uրH”EbƉ3LRp'{1L]H.-NDG7#p񪢞Z%[^T H)5hַTa)-\[`Qq Cٔg?)%jQ["bF<'ͧ}HmV[_r^ҾAH:>6dxߚJ=%cZib&MqOAk-CT!mHo/wǩ S *%Kw[e~/I/>ּ U͢Z_0,Xp;cɶSy_:0D:Q08ܲ%ek/K45[K`ݕB9eCn̆iK :#kRg2罪)ZL)? =ሞڍ!BfH=bpCY֕Xc,QP\uӆf_~KYn]y|˱E.qAѮ?)kvF@,,Edf>nb/~_K? W{91Mq\S< O\Z]΀9n-(5%imB;h&87͖cⲬgj_"iN7M 5o "f^7$p:}=ϰTs!nM_Sl, R7}pK} 4@q5(J oL^Iϖ'7(wh$CqRiu6'abD"0T[7iN~iboկ҆Mўe?0)5 m-W&? MW/zzh4v?4%ğP,*ӄ ۇE 6&<78rY0aD+:,y aąʷ4ã7,w^dp . 5P߿$#7}WWGMcv- |ݫ1dJXC&n.A^JO%5v[sǺTs3amtivmcYZD%+g4ej׫LK9@L_ZF5lUx73ۯ@]GJIj UiH&œ%V5F0?7 dX:%mRǬѥ FiGE雛)E-/RW9ҟƋ3&~ySU9gU2? `e(z2'&+lj =J=.%Uw˴A/&*5Bn `͸-y#߰<0XC:gXHcݑp?CBrpr ĵ]B:xS/o2>T%2p!\?9XByޏKPGFSe'\HMƅgqO 5ђECn@M?tOm] 45vҾfkU덱Lc 1dB4վ P'4 +C|Ҩssb LYߚhr@E .ޱ1?˚B0G䴃13"]bsڢ]gC-+:֓x9vMe)*qP" 4‰ =@$N65kI[ QФ5q#dLC`oz:ZhC,A&R7M1TK;ߢDbcKsi(~yla\ 50^|2&_M .k$d P\' ]j+::ٙh7K#HHώv5*ܥ&ŀXCKVGtu;f[촾Q졆`>5JOh@.&aLo^Y8/lPZr_n560Wބ[Y%%lq6rB+1=kRQ: "YPnHn1SHhLbVZ.Ž ҡz-)x(=bRdpωn`(*ف•pPDLqg_xzK$ȰT%rrH MCCT]CsG5流:U2=ٔ5^[Q&?&Jd *vubi9?Xkvmk-\ea6d]ԜB>z%Y4@5[aږP9a%_t&A(,n U}y#gꞐ[~\^ȧ:Ѭ b_}ض I* qVOh3}Nc`4]v_" y}ZFN]LKƳȉ誏p&zѳ2|P8BKQ_6x6 C:jpN7z*vۃnXZ!9aTyT/߹q;;4 gTC /l™)Yݧſc 8 %:ME]sxVJV"B|QQrpUSpyg014CpZo⽴ַ|jK#tepTcr{¯+j cT-so [KEeP(X9F^wSgfA2GpvƔ?b1MY1Tx aŸ9A6QR;A.N/+c0̸'Iɤ?^g rF0AVa,od4:3\PeE#wJl oB6;.ķ,c!W(nÛ=m`SE< Wwa`s^ :l&2zZibEM%;} }}G}p !dOq*ar>6DZ@F"yIN|9%BALQ=co U6;6].zT,d1mƌl4s- %g~va:Oi6"ԟk$#E*JsxAƆ.d#n`4Yf)Lv=FW.w+`,(gω0p<^ c&RV fkΉBÕ[@8:/<`ސf];wV]>F"K@=z~0 iqS&ꉇp0JT "ͨ)t'fC8C%uD&qso?46DҪITC+]Q$aǼrq[>VvV nJTƩ,ُr/3[(a04Jm|@5 ~LCe޶> hS6N*HlP1T^ 4,7gCb?J>'[)v#(Ax1H@QH5wl\^]=psG"Z}Z<6>ƀe/fg!-$؀8Zk[6'KO!VYAZu q|}3Ɯ (e룁IRF >5o)*WkK闠3̥6XJ#|qzzm6rC>lo Y8Pě9*QVq2<I[̱ +H(c) ϩ#,tƉ f]WPk!|HT)P~,6=*G2p7x~$~-fNV= &9௅"8DHv5gKdGl#|: H Æpw咿r=5*{g`Soͫ~B;{7 {Ag?l5\" >P;h [f}Pl`.XdM1]2|2֟c%m4w*l)bЂƋV<mxy'y[8H! 4\[{:;uN j4<Q3L$;TFK+{_͠Q`9Y=rTJ*{^xBR]Zu>`KY;tS :0 zthze3 UyWxh?`àoׂx'o7"PXXײ&Ak5hԹ W1Nh{^.$L{ ƇʿAZ˰ӡ+Kt#_ja ŀ<{Hic[ Ib nΫ7kcYr\Ų:αE֠XviWzU@wˈ-eG?OPĠơh'zEcdKZ>ghVoe5U\%0U2$6RPaYM1Db-ڰ?]훨4]]Q G)25d(^VhqY O>| 2w+{ǫ endstream endobj 68 0 obj << /Length1 726 /Length2 17919 /Length3 0 /Length 18487 /Filter /FlateDecode >> stream xlxs'ͶevuWmFm۶mvuٶmۚ;ykvD㬌$!qRv3fa(*K0iIHmm9jF%c;# dk`nj 7WjodnmPu174p8::83Hdf 012kHȊdUb6Vyg+sC1`o`hkcd_iEb&eQ9Ye@ -p'GƆNU5?,X:ۢf`: MmK7 [Fv?hH026le%om sv2v;$aV_E.`ct4 ̴;ɛ;#?B+fݑ162w$ϾXu)_ )H+S 1521(9J3ݿ|eiIoKPn4,&F3 5tvp0qzm֐+"%GpjvZOjxe$A3#+{epՅG1 m2 oX}jYk׽5м],]rP; A`g_Ǧt[\|M'A{2$N/G\UpoF$/|31 [8JjCu+V{]r,tu[7*=#yδ!=e&jSk~qHwz)$UTTC%h@J3::- !qM#kEnȩYGWXqLZ4A&(l$系.-F+uQ`g1p}C2E(  2pE{-,ְhYT|f )k m@F= }=6+l(뿂+A/f4E?E컋+0 M߾xڟN3]e(\hjt,XC* 쁾I]u3I%<p{$6Spf_\ӊCe")0D;`#}MKTp'6ײht\ů2ՌΝO` #땏iÇ> 9IޏEhϞB8OCzTV,# av-'744Zm(C[aÉj1QA͝[sHxt;hȢ[ciz?>qj Qޙ$sL~;5=qMIiS,P$[dS6UH/t\UtC(MG;r$cE eqĉC+.+@ad_X_.{cvDıɥ:hQ rL,bK8LvRZ+whN=!JQ1n6mN97Ѕږ!\ϻh_/3wCJ'|Qkx,RI=>)(5ZN 9K^$;cbz9Nq([<}j K.ZXmlJWኆ[ 0@9mZ hdL+Q<T&( E=a#iNu';q>Ό^!RZ] 7H4[ "ox/SKNU%btDx "* @x,RƜR|aRPYWs7o5:? $ |]ze\$?hEֺ0^/sܪ[w`R31Z7yrv#ww8 ArA a]dB)F8нK-w}*?n+i0%Z ;Giu{f+` N2 kiMQc`]L<(r4!]WS'}D7mTKVr~A76+{|x\0}8*Ƙi7w'ͩC:\xM86A[vl;LO 6]Ȩ~0Erg cz`9Ѽ+ ` c|5JL#ktpO7ZEB#֠IO{%SnL"JdrKlwr w};|=Sjk`LRdAhmW~&^ᫍx=hqY1qWǡ]& 4 EPvJMł7[9 MV&_BjKªOvju&1S0i$fbC qsΟyr$.E04]̈/ _cJ'm292 R, "{RBB)pwdtiten7K9v WUZsh0?RF5cݠ5S,ep*DM 99碋_/J&P,[[Q-5tl F=S@ÏNELM10|4=6VVߧ5oRsgz5ؘzIޥdake-82cڜMߺ8ųUfDWC0Fie_-A:L)W<H^6=Z,Z>6݁-1$ IiN}z"hnWo3=>6ljPU 2ե]ZA鲣m4i?[ ?]ժ׼\&#!{k<;eяT@xjܢm^%0C+ r+pUʯd8ªxf''kaDUZk={/2^3Ghb4`ŒW7'޴gyjG^E(C@Ox}9^1l։g8|Len4ϔUURRn( '0q,6|FRt(޷,τ^fQْ=Ap.ߴ'쇬DZĊr. ֦PDۯݰF4Rʏ]M"KCsW MrDo〴rY"0^PեDaar%ķ(vQx5r ILbϨ"?xS}7̕{_<1Iy-+^Xk[P88O*Z#[Y| o~d$V8^N_RyŽ;.`z{ +A,#^sx5-$^׃zD}tN{I}9 Ic5Pt}]X(?7 +! )ZMYzWOo.6Ҝ%0Mn'a>/mn.RGd?ز2l40J!cRILסU-~]2?A~24P0Rh:Μ4^h4YeΪR#ᒉzq|Uߚ_Fp@Д W <,A GȢ-L.Ch6/caH(u4 UsSd`\lª9eg'IʉŸwLSkk.}Atg#a[Z/p`{A_p1ݬ:-ݢՃ^iV] >_ʼn45Uk_\|LE =.M`n.Z )sѼ9 iڇ arM7X&k'n(\,2#=Z2RLA;I:8#E4^DE~x^~;NPm:8޻۪ky( 4#n׀e`)栜u-xvYJ٠;uy È%/VI}:$=dI+T1]+9V tHk:C rt'ZCp9Ҁ{;DD`H[#a%WlrFB {7oNsg6"hAC4HI[;L=FK5#a V0AFS!oo)n_W{p]ij%ML.!K :'"JS*D꤭m?ӑ鞰w5'~S_IUKYkEzǟP鯡 SsBݳq]`V.ol8 LѰ)Bp F߂0'$䋔Od$}H|ÿIJ.r&tH*PGWӳI)DyߛmOVF UcFxϾ`uA3vDUGa"mj v3E] 9nT:8Δ֮z 5OcJ'c$KE18B 9GܬYݛtR_mM|_zpCAA26hG8)ؓ :v,n?hpNN_2T֐w|#rgg8 Z09Di 4Ԟ @7J'_nمGOTՁTa85:GY%%U1 '&+ ?=\TݡoSw<ׄy%-,%`^Pu68P97X-UC6(2Jo,?"Qk C+p2x II;~']B=WZZnwqv-[ #(K~,x{Izx=7/ř[?Fx펴e'- (=Ί pFŕ|]UeUgBm1庫 UyQ{k 93 >ҵ >b \-G-K{?!HRЎ|TMUm#qd-ikHij$72u`_:҄=;]^e[wj5 Eaapiu))J^|<昉=}&= j_˟'(Ek")m㻊Nj~u%QI!g-d7 d\QWQbX5'30nYtT=/C|ؤzj b?1Z VPv9QEE{.V!4Y?0;$jTW (OQv ':umvy[5?t:_m'>8(w[ˆ FU\ h3xMF{n)QiʵЮZ ȱ7}ym1[̘Pns YzGl{j4{qI%Ñ6큺3]Qk Pnjh6u0}!FcۜmV>L9zvA324 c`>^HGeeoOc˶:uQ3t =B"h|aG,Lֿ$}0ao':O<9S`؅Y#CE?eP88A2~MzF/w# Nk+dW N="P{njO$5dn x* +b;!=7V0asSM ʪkMdJNMP:Rki!'jD\hE%~PQG6y} R|H%Q\㠾OE_W/(sU UN) H\+rM*+e_&A#tEfR {h?nd՚حk*9AUzKĒ(e"m/Y YaG]v`DIzY/h7"E8e\(K-컼 *W w D|>A|[JLA3`x@ 0 ī50!_-@A| "g]h1D,I[ΫƇSt ֑ 0$Q *ԂYgY BX Jr6-|XrDoS;"ևXk3RÍ0GqQZ\@~Š8Jk7K@)Qd nnۨIݯn}ĺDHj8˯`zdΈB ;޲`, ,)l 4b 5ɏXVh$8po| p[ ٯDlFztզɥ+mwwĺ$r6N.WMG,t[_!u-'T `$#ϫ5@;S^\b֮ 7D7E[ߦbBaTv&Ì]x8˔p{)ǀMIk kXjv`_?qxqh5q#h9KpYiy%qH MmICtZnc^ lPꀓj~ΦMavL'\pl28Vf=ϡ}2P)}VE`0i,+3I-0a.U'x5 tcl#jlVN3 5&6Yk3]8-CqDF6su0ңS6;-vX5 O05RwٍN#qIJ4 Ȗ.VQa$%GeNҿ㳰c#ͪCdک 3zo%_Ng0rѹSH鎣)s/ TPnFj)s_e#XB2s?: NS̉eTZ|}~ Mա\iv[Cˣ?xdIW'/r|ܢ8 6 (Ѷjg/SzZ@)|'R>؁vw!NEL)RVFnxD^<MP3d-gs8ճy^R=ͬ5M`ݞ*Ptø}%dfFgqԽ[WXۃ:8dձ!i ZCM*W_*O pzc"@n|!K#jL0WÅa&$28%*<=9|k5v:AUI9\tQ]>T85baWJ9MNzV,B94~v#?[`kLBgQ V4'+q[؅1s!7> ? lj/:z F Zs +ÂeΚthm֔Z'ĩD(nqߥ@ gX3U+d8)3 USJ*_XMvΎf´Z AM&q*A+S^|ݮ)íBz/En16Kjav?yaxK vhZ^^U⬦GYsEqI2I>iQ̘fEn ~]E1F/E@2T@Ia X>嶲9W$]2·'NrWܖO*,&CY.7`dj`Vjٛb5Rv!4U=xG0*|Jʂb]| c3b.Ն]S^@GΑsKŴ_=}aoAŷ-u9tj+]ֲS_Q(qzJ{K Ʊ}5ε47w3A,J)7#)BYq}>(?bi"CBu۝P^WA6` ~A~hvc1頙W>V 5,)fֳ-&8bA;6X4qhS@'xU$:=eE鈎C? xg̳ ɘc$Q >NɆˈ| qY!DfKHLHO:q#n+@xu'?G,$ RZCK$L vO=Ĭ0+Gk5 )W @ ٤k;9~P ]0~Af(A'F #.%mҐ}pTˆvO ;) vIk#1tI^?-X {oWu#1F3d uEáTzテGȗ "RtT Gͨ3f#˹}vAg69(ƅ+jlw@BH0ʼ3 x*x&p(Lg7_^k%I=,Kk+aBY!?,/`|+SFdb/j3ɩ1PB'Homΰ&w|J*xD:Ʀt}#&ȇ$o "~sF8_D<~VW)lKH[9L!t`ƈO_-F87 P ڌDB;~YoL~p#yL=85hV3S~OnM[)Y6k敢B6WߘRpv62^L4IPfɢ#+r|,[ PN<׿f!pUH|+<~ IG`gn#M=/-Fyei(bG,1ht*Yda3TQF∪Q PݶL/"8tĮi҇Bap>^&)<-2ƇO .s*F:[RC_ \6ٕy:̣MS&”,J5#X^ֿAzNvii1<|Bx͛EFF"룔mV3}/ N B+zcRi&oiУ웘]Ns:vz_wVʳ!M t=z"-h<4.54 /c&R*…󋗺gu(kNu"zҬU[&VH=62uQ.yv1ף:eMGج[TLr4 ' ?ՐһNOUL p.!o>V |:4d? DwBrcBOz+)Q"cw5+p wgt<w&롒7KY 9R2ktÃ6i` oi^ʤ8C/kNE++#CX>HYc6S0^n7['rwl+c\($] NGMʛUgټJqExA7ix1g =v̾aYku59cF{h_KGY.]@H}*," l$vDH,IWaT$&9Nm<,|#3%O7wUCP]cuLHfR+ yz.eҘ i@cAs.сV9h1 m]~mL8oJ{{zFQ~} ORQ~` ݝ7陒ފa\0lhUyUݝלx+b-tkb*%Q>HTBe%l: '4sRNELDQw큻Du9.xMG%|,@u%tc`~ <&32?kŁ|R,. z Qdb>d.͂7ys1^-@UxXfg@q.apdj,~:٭ gwTK(Q ti%xC3`㙯2d~ 6#q]/~$V z>kkb wϢWجaV(yeJ|9Ԗ˜/UH¸QlI[џGDmKzt[J!%>cnJ $%3e8T$JjGEFG K.i% #D :1Az%o =v6TZ*~U[[hM<>fŔhʀBJ 5rm?]우zWY4ڌ;$ԑnļjtHNJvǘQu~k"{hX;׭55-wLO]VmG΁{/_Y č]##WwqNlڔXcT%Q*|16PXag I,_sZԀsܿCVͦ)P|hTZqc&.T;Aoɹ (Z/'{ZuŐFp {s$h`6ōmΟEM ^c M-ь֡3 5("jOoQ C3JDX% ?%Zp|q/??ϡ>!;#gM9{XZRWt ϘMlGe6۝^쫂UIӾu.Y $3Ƣi,d3RpȗҷΑʩiLXG+|Ԣ]'fpxST̓i͵(Hg{(Y gTf+r% A)Z"tDW0,>ˤw2G(hά mRfvil@2uDޭT0a[Uu%?_=[I[ЈyIhO]9Fp-@ "cuf @',!̪/5!|d )fwڮ! aSQ K) 4CY9)LۉHOόdw ?nϱX+{;%" #LIdDKD6ÛΦު@ۿ"FJrs٥uxB:3R\T-Rr!GƕVa|vJҐ}0&2&Ҡ7;Ѿ@HS/xZ6XI JCa 0EA -5}J endstream endobj 70 0 obj << /Length1 725 /Length2 36328 /Length3 0 /Length 36847 /Filter /FlateDecode >> stream xlsp.v~mm6Vضm۶m8}}jQ}5]wMϐ۹z:213rTUU,0dd"N.v. SCwt4pPSK P14tػY[xݜ]\ R15X,mL" RJ y5 @ kiljlJ0w{03L`f03'{[*@LAU`hg'řoSc?X<-01L,]Fv0 Û=jW5|8jc#ohk upu1uٛ:{w'4jhki<\ !Ct05Qto'W5L7r&7vdcV%A&YN&Qˬhh_,Q3tqh3O0cfб3X8X,_SL0+e*yբ⶟X+:}#fhhP8FPH/ ysl,:n zOpmiP[%oaWFE%-8;c +Al_ځmڝɊAI'•=2 1Y$ ,ޚθpu6;PHXd4z %\51\ҭ!K^*ӔFzWT=%l&/ϫJZS%m<(*IԀ~曥`]!0GKT 5`zc 4-^NW͓2ܨ3 <BRi^Qn18v+v`=EFGӾ&?FSxJNZe>],{#wKɏ_; (<gt ΐmc35Wg&+HͪTq/[udѰ|H8q8:s+(tyKv㛇KrlHYm g~ESuhYVKoB94͑.'̗.?\]\w؝hYH8Dց|1.%C֯TquZi*(0Xݣqiq 4͝KC=ʽF%6D#_߰pCj(#S#YZe-Rm;9Od " @rI?B2 q<1Ӱ$O˷(ay'h7Auh=EBuXֈKVE{ՉC% ^^sŁݽIAU_[ˑ5DF4{mrv@6ELtHJpQ :.L~84iAcnH"qm#侥ss>-a8(Ͻ,xu}𑣾/9OWF?6P:o=b=RtfOI<Lj]GDj Av ݕvs %yuFLeh~tY ZyI~NI̻> jc_rwj"(Œy]i?ƅ3jAΆ<[܋SkNvd^OiLpZBE[ūݏ@ܸ<4>Gsg-6*#WGƲD6o\m+ iիN`:F*UPEn27+T5='Cn-U3ZJE!DRwsx84SK_خ`v$z3x A|Y$/14GGW2p+u$_R&^dNY 32jk D8ӺTk[ȦUrW@aō؂䶊H0])g xSC K꾷}?W>һE狡u߉Wp"E ¶y.No\ 3=0?!9/c335긯llڞ$[%Z~^U15mU-5o6r++oEFQqɮmed..;(InziI ,=ο$K?l*ʍ^Q޶ g ګ@N'=<͂cm`iYt<yU ~K;I6KQM΃V sJ14}%7|{Kio |㺍;*8P Z^6Q f)\(*is9ZPG7LA@>yTʤ!R?0o=a 1P/=dfY(/rsUfm$MZXxP:W&g< Gi#4.1+[e|&K>2RSrÚ}^ =+e Zy%}cP,a»80o\d" ϕF|M=Ky )d\et5PsFQ[(B{G[4 w^?aM} Ji[)tA[ TJbPպ|[Xi3RT $%#)Pex :r4aftѭ *UŲbghn˟Zy^gㅺt` 0a^^[w]>C 1l16H7^:9z "mi(}Y1)[M.yuFtu,qY~r;ܖ8V`[쩫jVɯ7?hY⏠v&3 v]ځS=QǠ> "TFMDd4v}qciSr|qSy/>ܛ"ƗZY VT'3> 89dkfvZ[L>Jz`(E!a, ~o9(96hZ.s| iAK~%y0鼢nRWC puoLf,+0Dw)?w*{T_?!ĸWȍdڟQ"|%N-"ѵz|_(rULG md,zh~ )2?ݫ!|W- j5`v1e|BSug,t-cmXlcwwU&@QU҂'pBWE^v9e\'[B *i>Է%SALJ;%Âx\qӺ FBl0cmOBi rckx18]+e$Q|!+R=lB؟m>cYbHItܩ^S49RGE4)N{zjGz/!Yen Z"MtSK.h4^~?ҁDyy{̃!2[Cn[r[G@DH8b%ƥգjOh-oERʊ_߿ɛ¶!rwU[LBߡ2 >rca7p"3$lG{Cjvg#r9L)O@@EIx|1sZVq_7e|!"M̒ H ,{e6;`Ԏx{d'yxcL.8.ܩmߖq{撱XHb|y>I)ǘ!{!D=&e9I1 |4hYt)n~-iByT%ɰ o<"URxݗz`Y+'Vcѯ3q?fmX};*S>7Wױ `^sQPt@^49;gd?wM jăld]` SO~sO0L\Ҁ+_\^/wTv` z^/i(0*耕VwH= `{w8Yu?6~j"M$ ; l64fe~8H\&FvօƯ4n.4ȡ`́)C#'ę)My3GdÂ`CmA2d}'z*T:~ TS"S^% !UZ7beW RET\0aS{k0bnJ*_Th!w v:a*W 0Zeu"،1%^8Z~0|pi:j,,5R%1!9y"bh!| BエFyc0 IiI&G:.u۔YiKs >wp4mgFgMg♝~Fmܝz8e0c ֞Ntz ejB$}]Ma@{!42/1'"##y[,y*Ą-q._vE)'LpZP|-q }ԅ|왩}S+'  /$m_ ?ѭbdxYb"BfԦ*Gw4;kPfc:ťk3pH'm a ĊH,b?ɵt" 5(ت-W:EwaX_ڔ܉Q xؙ&vÐKemMERdqiґ77eҋxS_Ѳ_ z$sHZwþr1/`z4(# 0\ ~B6YqXNEt Nlj-+c5_K@I鐄lYv\7#O: Q_OQƇ9w`2ƛ0d9.kCY2c[&+4F]duZMȊ:ʃ4Y= UkmAӧ7YfkDsGۄ_WPNX$- $%\La@ǸY-**l9Xro#;T}όZ*&tB29HԵ`( [Ae\B|k>6.^F O9I@F MbӨd`/덎)\5kIˡ_fZS&JL}'4ShhF {lEg3PcO)VGKҌ9LjW{l+VժdU3C-nz-MgV:$qG{c;1S7KFyʼnL.$w8w-_6ġX!Ǖ IĤ!mz@ ^~Z|V0Wa@c D8.',feQ1!g+ĪZSOECWZ{,m 6Izc< 'nN6a>B]s^X_ ٗva eYBX88z`(X_(H(_in3[& VVB= a tiRŷuA{j^#聋!ի xƻy0*y]:#Z>0eaE9e *7N~i/Q.<5~hVt(No_Gx w% fZ Y7R.fK{:,# Sw_>rv]AdS_U=i8y` 'upwJyEôhPw\u5]4!j}|-œj*yH碗֡؏GExث0dh l?9M4AЕ13:lH?]Չ:]qTZ_;cciŚCp1N<*lk̈́bY \R_r=zlJF,<<[YEMTh񯏒s1imsAң}el1>5} #%om%O K2^~e1T'Sv{FѓГFYov)ߌ6,D"Gm[`qNyH1y(Fs~V+/ʺ8Eƚ\`3mfLp|heUǪ!`g@Igx73dggtgǛ(Io?v$y^>nU1z P7#~v,^fHlUE":dE )s^M`>ďPP?Ku4cBhM;i!ySn=m2V f=  a* -3%A4ZTY G\es][9Q=miXV}/rqÑMx^8C0MD˵Vd+w;QV@xW TLe¸[aoM7`fcA $##$Hd۽%Sˍ*YȂ;`**c6+N@WZ)V4ϵ~5Bcoh97hX92OgY<7xiKϻ{F@c|8z~osuFvsC2y*1aNH;МX+π=PH.G =$S"ig0burOggr_^\v NUh\$taX-+gRoTXThVydѤ Y~V1f}if]PlxlE=-o3ą<+ޑ'v ,i. էU.ijAM1euڹ;xf$Z 梉ٿO^HF,^^x- ()JBU.T{s<1+ݒVO*Q\݇V &" 3?&uM;-hv; j(A^mϰQ8#,zծWzB3d.@wH5HLKrMIo-B(U& X x24S/u+BfL)x bN"0U Zϖ,r0LGZ$M]\d@Ɍ^ LnEYq/LD1bf }ZXp B\EALI"7[/2[*5x%d&Q+sCSwNiݽ^֠ZI{ts!5+i`[=响}MRpY9d5.e77t.ux2Fưf x1X%k3۩GtjVJe}W }|??o0JQ%mW͂#r\|] -gVGF|}DA؉&Ra?zĔ s,A6Fi & = Tq'a?sN>2? SLxrA5އuyb d]TDGm2kLFnVM3AJ gLY] ض#\Imf`TngõZD$iـyix,㔻,bzFE=a:;FsNI|;*2Y9 {ڎ$+,eT-@"͵Ѹ~ϦL!,vTyl# *{G s bۊg 3;@Yω]Sۏ4q^cӓ vp@j*wt ׊ݰe!zXB L'Je2Q)Rb$~fuv<3VKڢe4Gt/_IL944st_G(*ʄɇd+k }gpY2 {UsVӭ `'/WHJw[>n !k;ѭl>&0)Ñf YP%6 1C%OYIןyK*_PRu[uKbnZ vcA#ZvC*k 6ƻ5\zWe `w6Kw(fWs]11jZ?+kYqYRq;G5rgͫA"~!APNw]}7t?čDrIkZ'VJJO]ɭ 4.hCHB/* 5H{?FaC(M^ċ) 40i1E05shk(->1~p1mʚ};p- \\TVDmbf7.Gxt 8Z͘Zop[ZE -䱣Sl4 T\k5s4Dv/ [$e)c1`\dl|c7W E 4+f|P?-A,G4"_v-GTznUT@ ^u^ dԊvWህ½ +=W_- 23tOvOղq?*pI4%M[ pt]xoGߕT?s@s0W3do.n }FӈO6C@ZVKq[,?̞@{'eEEɤqRd⵲SN셚cEN:djY#dR!x<?y[,3!Æstmy@ ^jxf u_k׾ >PWuB!"rhEcY(v-kw[+V3H mp =[҆R ?ܛN39_W6"ŽvrɼTiΛ _ S&2tWDWMRi1aGh#-o0umxb^Գl@DYvYzMc'9Z[4͐RɱhgL'IPfwE7؊zF_~!!ҙO3"a7V,|gNf{2\C Ј jul|RPm?;VM{Mآ UTDlG^}Uݰh HJՐ09%]_/fsa1țu >Vn̚)s}HǪL(cC ;:S݁Ie_gB)diV < IM|mR" S}HDO6rL5 eU,9#Ld"_#)vņE cq=xʄo\_fBFlX7vV("s{כ +I<`5H)3Qua/WJB$iy9/mƷʓUQE3#$-l1\t\vJZ6V_ wZvo a|BYd挷߅:?lڭE%ף~`]`̫w 8`rPD|k|Ay\-Lf:M u{PطOfPӘ mbUq* 축_&mؕZU@UKo8٣d/;BSP'*Hq3[33zc{r7H8 aWٮ_XEZ- 1aGVRUͤ4>efP nJJUvLAz)ܵB<9Q K/|̚pHx$Ncm5'0Of++1$ʿXTdsՈuТ9w޷>9]*\nhpR1'q&q{/o_B2?Tl&3TUT%W=>֍b+sUޡ#p_\*Zgφ"cPbP e>e5tao(Y/n ipIf 5ad{M\ifJu,YyPǑޅ@eMi q_Fvhe ¶Ņ,~v]s%d:mb 6`|a=+Ydv+ߘ*U×fy9?PB{ n \JA&fR!~e ꁭo;5d/gơ$QVlQuZVq ~[BȠǭ"Ph]ra}Әtq 8<'z9kDAJ^g$e Dg_nl=BsdgpFF)?E3S@!˚50AKR|aSMMュ2㐀tƵ1cR=BZDiN{p#ֆ'aFk$;6%P5U8@jRt8`\Y|Ѫa0gZ]Fa"iwW&#k|ܽ^?>(s}dDlrgL <('AK\]?|MKa˫ҵ)a^q`jV Ue'yOHfq)Ӭ7`e$Lkw`Pn^e - ]8ur1t:H!mbȎs ]tj >Ѝh=CCv20yђM(IWp}L㎘2v^UQyE*'bL6Uh7 gOMp̟SUo9`k4,۴ՈB8q36J.UzL Br%IM"KFL(O p?O@\?W=0y/vU ZPM]#ؓnO@PDi=}-hf1_{"؏+SA58ڙ\br3w$R4@DSj;01M Ms'cV {-ttA8tC:Q`4TTU Ǿt땆4@jÐY_;ɝul"6JzDh|em YuK0Jˮ{xϟaqM)8 gL KtㆧQ"hi6 P9Uq\Yhr\I_˖܂mQ_ G@o52B+=}bPwD6z^bFIռv]mefBc+e\CqK {ZLLOb ==c6O'@^$g $X9)x1%Vlw#SAIwțO-?_+mZP:9'4xȴGYW5+|Z4pܶ.Nzܨ%o&a5y;BpaQw8xd, PU[Ў;|$܁ V\].9E0ؠ,{f`J[qZI9mWhY4۩IŶm'm۶m۶m۶޷Ǟ@ gcD`8`vlW@(m>l'ba}i,ˆPum2fɚKջApΌ .(Dj L{DAl:d/;qNs iu*Ze>BMfyMSC~wB\͐X|K*cMJ "s9vrt{9ΐuiұH#[fS6lW[o(5SiBfoESփZS"&Dz5UYg\;pIПŽ 4#Lx$Qu(J"r:Yղ]]LcYg=t)H'δ*ZbðДg:g3dCFc^7iMJ(7u$e$bYJBhR&M9_U"ئR܃9#Yep}bԑr _n#JT]PqkVwo簭s,ARHGb'đLN*EvvBx _zɽzyBy4-6!;& 'Td"I+-6d>yKB3ڦrx7L8†xB;7cgyʣ %,'^g۽VI؀ dYCuS!%6= L/5ݒLKD7jYW%ޙ1ΠigOI:40Q=OIxbRFD?Ŕ.tG8ߍg6Cz&i.CLa;b$Ӕlt$[r *j62:$=ei&]GT]i#G}% gY#m{/ڊb`nC:ޛ. p/~7Fn̴.s L#I ޓgNTFb^tFFG…bS։p5*G֩ppm2ϴl-lKe=^(wAmm\,LjkTW9"Tn<_-f> kPўߵC+o}TSBJkfKw =+..0MƮ ;ky! fT+T7۶zeOW^{pᄴWrr|spv$T/? d%5Ny "K"sLݬ R0=ob<^7)B}\Mb70:ؑldvuM/4q=M{ >-RVfKJH"UrTuf(/$>Y'7fNw/YLh/{,$C08-2f=O_dMS"a~|-Ox_\M)i{u=ӬPOp>n.]j,W3B[tBgߜ{7"x@vssr5\0TXjZq^>^%3y kOF Ef+&IScM֟$$ o lG_ T-cJ\(L1WIMg0^cb7N }ޚtS~ݑ!5_A߭E\o"qVkJw߲cq"Zxgo^ EI5-%zuı_b. @Xu܋] a e=@m<|t '>o ݅ԯZ.eeKPIYkU}s#Xxh/Lӯm@/=mrW䣦! '8%|$i6”$8ߎbwBRpPb] 14a۲,Ʌr g^S JkES^##I}n%Tk2H1jHĆ=2Z |2+33H v  s٤ЬSUfPU)(eܹWOI4ZZ )uA]bgP/qaP9}OVO;<4V[DTmHe۸&MNҠu!}n~q6=zqݏ 3ɣ wV&;$]1m!!XS-zE rSEZH'om?Q3W$o8}]?_+=0t K+#f\wH{z%G1lݭ&wm(IMQ$KTp;ç5"P%:ʑ_ɚ.}U cU6:_lg^>xxH\,JL_?ݦDËj%?2 t]]3-p c9-_ }{7ܘ0\ 6+er/\M˴[NnzC2>vxK=n$P fC0x?B39tƈr֐$g nloXQt2.[yT5yRt7ZBJb2?~4?/9i8iVN^|#47%#ggj[qK6WZx([!\ +7v4Mw;,Rrۏa6-_IsdzjrT_M\w&[z,fBȔɷ˞3dN@%(LJy$HyXFYxR=;؎wRDŽ4 Ob1v.ZSȘ *ToLjW.qന,uz5tCKTpzt%Bzbu'#" Egg)xk%v7Φi]DHfV%Z,v Xl8eMz r& [~)d궁ZrwK:t(q@`陲;gɋ0͆W M! :K7oPҸAVex8*ΪVAL~/o9ң }a&<Tķ)ן=]$H9g$Cqt*Khs9W)[rqMqy&aYɑs2' g ?CwGo)=0#J&ꕠjh`Du/Isouf ,{4k64[>b1*4/*pgZcebY[Y/,1if^VPE^{6倭swʧ~wjjߢ+dH|ml{$C􄷊&d߿81:sJ[Uah?@Cş`mA } (G霢R!f ,v] @6`g6%|ݟ6s5+||7T@R8:Pu=!8|H%WD|fm0U;HȚ|WēRE)]aboZ1l[L.  S ~PrG:~0b'g{S4.#R}8Fb:=,Eׅ_t(%K.>3TVeej9O>A oD%*sZL/dqƯGl' `vjYH0o6Wjp@f&z\L~r=O:"đ|N}d{]߯93t" D͋@C2m 4LX0g΂I,1ig5 l3TFJu\h1DNLO< '7|Abq˱ aV(H; _SwA5bYj&e @{"fLK]e<>*+lvi˾zPBeZ"53O'TeB|4΢6䆋1|(P17{R՗]QMJu0!6JGQ*_GC,+"UIʷ҂A^[Hc1cA|\]8ƠX.r Q|WP]ї1wUsOCwpmNPBD,0-kη 2Df4\Z]k({+j_YP eZ\{ n,Ot0/Cc8+۳;>{wz.>Ϩn)b9bٵe"5™6.ׄMf[wsP6j֛KxXs ԩ`{nd?!e9jL7 ]L3K /|/0a ^}`i}H_LXP9%n+B 3ӌ^B 5ONh[FIOP!w3.M)ch'7DpaڀTy]i/܋\Nw{#3L>d.=`тfLQ~QE ٦zȟ/j9ʔ>"+ ~U\z+udKY%@,BD-)J T6XoO_n,~`p'reiA䋮HOdŕ ˾t3 LUC $Wq̟QT?pB&5} <Í:/ 2]O&{5Dj :2H}̋<+D wY$,g#P7^;G%Ue:d^:-{RVs䷝ܦ0vE!k:4 _ߟxQБ1h;0h vyvn"4\|hB|}&'Y4 Bҵ$'3yTlDDP9J_6;m_ե/m6ClAezy,vj+ĦMRnM2>$7I^ݣ= n 6 J Ԛb́ׯ7x=ÿ1{Z I_ +ݪޮVᬺKNdy$A~=K +Z&Xi[m5Qr ?:Y; )2m`PJBkT>gG y5(:PR;p[ܠr wP\~ 7bϺ@YjߣCgF-}ȖEN Ng@ZQN-YQ\{4Tc &@cG[bN7B_|N+F`DvP}8ۑb-q-|`orD/,wA-fɕ7qH`\7켥ցnM)<-s\6f0XsܛWr c .#*q{ R:(msxR'W/)q+Lflh|ѯtC8@–Hmk1db3@pNdwTc}g3NMSzSC1O=RզL-V"IJjEZ(}]a)Zx//(3p!gU׬˳%>]D~'ZBQ7vY>g{ *w+ M5@]@bg$Rl=4ϼcenaZ%qW|qvjMdX |]L2,LTb"e 5N]h:hze$[۠1&B T@a@nR(=BZWsRy߸1daHgKzqVTe]-Nd^\L<!Pet?+g]̐a a?֍MVEK += !g+LOOqf-Y w7N xy Vꈉ'@˪z>zc0A)X\/JO7k%Iw' +4S,̬p&],$z֍9c(r('ҿO^iP#2 `߉00b{%%&Q[!O?*5}fT!i(TGqsz}<dW?i$dJ:[?3dG_/Pe  lр:8-z.rjd8]v%¾t6gqzۃSdȯZm~ X2F0͑J3I \u 5L  nO~? aKz1/v^X8F]Gab]A<~K İ$Q{6قsHcZ4,(Bt-{./^zJAɯB~RKcdV6]uKPw<͜숦8DKtxةpu D{k6 JkG+;fj~lh Ll c0~s$~}-0biKT џRs?f$Gߥ'f_ vV@}0Eko L++NKKZ㎁D?ƠRDADmmBꗃ Zy|fY[Aacd%R/s uZі,XBjcd=2D:[؉\In Qk?a*(*W̰vac߉I\푌41u]2*PR e Ii6|bTrhmU,~䲢2u2@yK Ȗ`_L Mg)PCѭ@oG̜v S/ϥBW hwѳ93KB\S6@ gU=<Ƴ#` z),œ2rT)ca[{i;YnElIUՌBE1K=ZhL4-2oRظ]8> :jk6$bf~2wC@yrJ c;k7:vqjzVn%էflv^uoDvOXY!b87>WZȅѹ&.Kp8e)Y^ICa7dC>5\Ite綫~EFhgj]P`]NͿX]NO:u0imdbd@5c 7E%{ c3zl'~!'Pr9 S0[ ׆rzR܍3;OôX+gdֲa.riςiҊʝhl%IcWNk Q(F?#fYJƲ_~>fkV!*ۼcrGFc6aݡhfF{bi$Ƙ*ƃt/V {N zfMOi}8@g Dz&!k|*t>84FFWpkR G__'oަՁv]D5k `3lY$zck_*.(,xt7W~TA:tC5Y;g«W!pCީ?nr{E}{]$Dlc%~Ԇ 6zRy$a]S~[ID|ZG&QX>tC^˰x\9~c2zl9Õ~:s P. 2w[/@,[uhxjC[EgUXAXZ澑V|ȕ|>xwS+]4I @"˼ ݀'+Y76qs{%ɮ@:8k2qsɹ+ = -f ? [D_T20Oʎ\K",VܮVdq(ߵL7Jj>7Ob%tus=8`[[u0_G8֌\CeۿH `-r4Iub)#},Kj)$uIp#NQȅ<^׫59Vj,>[yn1)3 DEI"ʫ~a|?rKRCx w0^T\5u Wpkqw@j-#miCZ~FJ>|oP&)S9#/ZgvkS@TB'IyηkbJd $CĘQ蕆M E _xؚb˳(LW]4IΠA.Ԛ Tx #j4xg>/Xq8N̕Sbst 㦼!zd nˡ(fUk;%ij;}%n8PcG f.SN[Ye{zdnB*Rg\-idwvB6QZo4*:d>?)v @F1ŁZEBjȓ=a}!|7E6GgWƱҌ/}i|q{+>: +kGcneMDv~8N5]RF8 K_Չ=]EY٭$ѥc\[{ӛg'JirYːꚷ,d50.x$ %|5ƺ.UAN8 쟠cInU8>4oɕKpU", y[xi*\,ѩ#lpF~{0txys0܈bi$^e W)܂ ] s*Sbn%<Eq[Mx9>A2ݣ)~Cn]q?6*E#" FNLtEFjlJzrRԸkEQ㨰nP%$fKh"Sťsb"bW\ܭd,S~%[&/љ-FBuŰ.[-H@<*RlDzb>%ifZ,_lydna%8cRhAڶ쬕1ڠt 5ͪX(g\|듋!PD[dt.(-"C7Ɲ;?gJ5[/}&{!e/0'[vIFr6oִ*a$N?Sd A4ֳ0l3|8 [-= g@5<Ұ$Aj}qV'2 IZ݂};f dT徢a~?:A롌Fy%*Qs s$^(@j؍"Ih[{-[SR۸p'dZ\K*lCb[d]().9|kWO$6/G'm[QwjIU5hLSedu'bhM>j\ M֮TV¼s I9VmhX=/U dڿg1g9)&lY;zH]<\fPˮ'bpOON%^=qfUE23FN6%n۽M&Nߤc+9i0J60l`ceoN TO@YX XKB7|iyc%q\|+92M^~!v8}S[#`W2T8E1Unj$Jl 3]CY";Bj-~;vC!5ke.ÞňS i+j1V\|UJTDj g>8y{ TPt,Bpzu%t\Rybó2θD7 k.3oDp9{o{ oςb9-4ˮtau[Q 1[sEg|kܝ.:1o-6ᆭ!3A c#JMﵰ; 0o0[>3jnN7]AX( zSȓ{,B6#vɗ(N1m#>yh=BU8ڴ@D}iǖGvU1dا3(@)inF_xz]O̱ tp]Cpɀ1 TʫxB*#7aZr%%v*d> J䔌#OS^o<xn?7xEgf諼XfF |DEjύvT^ WmQ܀0ro,sz-f/{UȔVV| kJ<ӮQ ם HYjNS~}m-6=#N@Q0jшÊ`ˮԼ%kyrB9O1)8T/6)$LF- LE6n}"Z/O" ջjWBF a%"C gv#S<&/Uv9JXjU/X0tu!۰Va'"xd%XVO `&~gY-\ 0 m$*εCN)MXjro@ 6 4DHKѴc}j^B}sLӂ!;rV0 @+-F}l9v21~Gz%k6K1/:2kbJg*ivc hv8?ȴ8 4Zp e7x938+ 7gȏr5zCÃ>HKn_$㿇/͇49z;ÄUD3{w Â^1%; !ߔ=2UOE- x[NXnM2(dp_;a2N Wp8&:7wjhE^[jhh>W}U `y5иHӭ.SlX^bYI|7dBSwDtdٔ|TV jO, NQ,Ӡ֒dYSh(]Xe=Hp\ϯcG#[FDKBsaNf̃ d~Dnsya<ٺO ֠%꣕F 7!0]Aqk{Jכ< k /Oοg!4e }''f (`כ MO9A߽C_pg~8 +F/1:?IZo#InТN "D>UM[]1Ig4*9*؄@jU=Y xnU qy IBZ}t]Y)qTAVm氱b/Dʀ|d]IφXlS e-L VZТG戛BcJP&sX,6t\{3{c_6/}d;IC]cz Xὼ uVnrssFn>OyȢ8q.Br BUvDEJ{.#K2K."3?՜Hfn'D3="7e]y58C,ORЦ?~MY _1:wH̭it+ ?z|G{jfHF!Oa)L`(.n#|?$#b Q20Hc1OK@}(MeU $9iTJv<( ~AalT>9+~!=rϒ' 7g7) Z#wƊ78!!́o͂Ģ*9{c¢\k9͒<=Ud\5u7_DUzP;%{F2<_@ >oQY M]t4`(`B!4 X˔ nivʓ4RTrA5$82&B}eTu5_8\(*S򦌓jW(F. @m&aNcø0=ZQѴ1RbLYF)4NJswh,H=hHXg^JPӀ 1cYD >ӹnM$<!h{C}Z*KG49)a|Z]7u!g¯Yn)Ԇˉ2Cd>ކ{SPG3L_!^izk4,qZL0^P<UB=jλQ6sgxkNE; .'6w }a*Ac]f++"pԷŹ=*Ra]18?AٿjjϜϋBg~9C{d=ρJ aQ~+ĞkKFK <'27KA9+1.zsjHI_7Pe(Jִ l3,=lk WV* [_s4>`]͚8#6}7w̄ dqv06۬k. մN2J<]m^$B*:@Z<07 /)Ȋhza5˱_btt΋칈R0?k̺\' 8泞tj2V`vh2ڀM}5itdSaWF4kZ"l3:uV~HhC&9جitd.~acjl3gpjMI08+MS=TAcOWM2]12H!_FI>5qדr,n݄?LJbѹuD=G Y?\4IX]ڬ؃Ҷ$T !ߙQk.l6sx$?SW)CE-\P(sI"nT4VCW $eI}=6lI` 7& YuSSBu"9cd'_G*.p\k(MqN 5ط?j(ѝ.ւ(3讕笒=.<I8>cXy&P8]#kkz/LP%T#Zz[#Ub4+ף" mFDa(=6NKtt<%O#pGt C瘺P6DU$8;˟shϫˌ.2PJ?ڶI(o!sk=ˌ?h+Z꾱"W4wUpJnOXZ:v{ V;f88_,7lpHDh .W5}λ @zbTy*uݝۻ *[tY2JL@?_Ftc(c:'mq3]p,FzӾ|tZJ_3Cumjeu0%,P( &\&1~-;ut% iꋎxWkyUgc`]BÏkp5}>8D:r= `9BB2=5>>.]DW3j`qSrysAz; o6,-?H;CtLSuQ,sCT{jc>L#Ĝ񚊔Em|w,ܱ -4>*v}7պdc:y_9E%Ω)4n҈u1),'oAg@AC6? ,U&D®Vcq'}>z5ƙB 2}»!蕈b1+?ƉW`a~lYF7X@d{N͠WNT,vv^Fn('2H; s$d@ɠL<׆w jCX1-x)p?FL[U'?|`g$m#sL(–`25QDQ Z4Ɠ帡Ua-GUrmY,ah"̽{l!Hd޴× 3< |keă |Sڽe\pG[e։pN \אyr9Ds%ju01O QGyG7q2Z Ht{.r|J3nƋVYF/jkT'09]oL">ڨG@ո3[mu! 7em EDd%Vb6`9,0Յڎtz;&W 4%cз,BTЙtšf A(|z7u:!zrAcldtIa'幘͑kU2(ojyOj$$DWzz. כZ1(0/N\Plj~Wj~afjZZu߶lYg$g!ɆGE02ij68έlL]H;Ϸ`P꽁ThTGgdiԬEx(p( 5c*ըXjFvPQﴇ]ǟ6'9h,ݏ)pgJlX=WSZp:]MZ$?t]C7 *bqͦ)xpbKwo)kW6 @-~^MfyʯhAr2TPsG0 = ql/eH!kQF39>Z Z7:ݻ|fۑt7{r*@ &t}G^ /6}@= prVhE׃p }WDlK"nz=TYobOΫH`2 LB*XT5Ԃo9NZ-m_H:TL&my9 a9&DWʔOj%,>W@k.Zѭ돇 PwMgٞmf*̈aVټt67Xro,zT,g,ǠQ*6_woը${+M}S+Zwu>Dъ&O]x)5V{=Z٩H+lЍU:)A3^J#:bN> K3gi+h4t]~ǛC5˖Y{ XԇϹ*`)}fݣ7 Xd,BI*%OTJۚ endstream endobj 72 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 73 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5&z& h<ϯK)ٔ?pݝ2ZkXvm)85];B7gѻ9x~;a`>W'?y:o&> ݋L'/㫃Bnz_7_t|~;:ذƦoiܰ^\0zu\7g"NFsu_E07H6!L@@B@q\s *Tg ]8 i/nTvc-+>c_ZZ~Z83z3[:ޭ ߬Lg3t3-g B|B|\3gg|2?z)BXIAup*^+&#sU-'H8qɼe5A78{Y-7^=!U endstream endobj 75 0 obj << /Length 868 /Filter /FlateDecode >> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5f6ӓ09]nD#y~/XOϦӾZkNTĩ(wA-&T9ˈ;n>yx#7ahݰ^g=a}9_(,u;_r985wѩƆ56}NMM₹ 5E9qv7rk u/A )`JbD>`2$`TY'``9&*8W`TR&4`(ZsJ5RH+h3}76Xš60aG+gıXF888sέ-.x]/+5MĹPN<1\?ǘt1:˿#7^YH{upQF^odž1BЖEQ?1^׆ƨqА.yaf%+CsV2GYŘS&ƞjЙ??grCOe zYJ|֟uМ8gΈrY}Ŋъ1LkYҊX׊ӊѻߊigngfg/>Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h. ljeuȢn( endstream endobj 76 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 77 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 78 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 79 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 80 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.R!W3njNylܬ;WWМ~8׺2{SlݤMƓ7}zn݅9p/]A:fzfэ4RS`)?>RTO)s}`ݷp@c`."w( 3&TmL2ws!yva`TG?y7{֍]? F`RޗS/~g> ilXc3t5n/.XjR˺^o3L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}TMo0+J6*ħöUSEj9߯ IVcf͏睟ݛ{)^؝}]u:vzyu|CW$nmmΑmq5)M{`qjS5MJJWG> endobj 10 0 obj << /Type /ObjStm /N 54 /First 424 /Length 3086 /Filter /FlateDecode >> stream xZYs7~n, nʕ*ˎ6JD(=HbB2I9v~!1Qxk\%518__9ZTBPZh|x'h D^@+I$ѰRA*iaP*Za`  W>>uV&,3nK6 Bv?pJ Hq=O 2hT* DH(|&}XP¦I@4~&4F (X9@PI -QT tU.T=X@8  S ^=~ܓ_k!_.|:|& 'fzZѯφgv I`WyǏ,`Ӂ. &"4MiFPNNx><'^jlG ۊ:b-UGOY|YfFB_ʯj_AaM:$,b.,mV"ǎVg(=*@ ;&SFw\n܎W=zsQ< L\8mZWCu'RzO`E2<8{ qEPI!3G\yN[4V-fUUL]d%~fY2c Zm Zs2(ǞPs QT[D(]֧-)afVP x{1FC1ҍg2:sF7b'BÜCnSfq#`oq t ns?s,GU!-C1CmW0/޾i* .f]m_j聎y}DQOɫQr0/%_h077Nާѻ÷}pBj6 U:>Ug2tnOpFjJZ(HĠXTtB'kK~y&ky>e=C9y-r&F~n)7Qx__֮SXFapO!|JJ3pOy#қni7Ѹ;h|\ 4pg28ۦ56U Z?SȟEȾ|._H| l0>h2zuB,;ǿOK)A?䟀;BM(5~0ܚWL~#.ZxX?ρ t8Gg541LfB(LzNDq~6`"? F|:\a~1Gi Q=eCףM sj =L"{zctNIA.Q#0\WZ)mߨ{K>|mo`W.[JZOCzS3{}A6ǦƲ]-l8 kUVh =\JE 4 7e| moka<mH2)h0.d<2#aF豍J dC~sG"E1A+Jc- _1=hE/ , |;y_I7#@L|#vBjzsl%|]^Ngs`(v=y0V><_B"/xO^"DXsK0nU alZ c:˜ͅ^V RX(ߛ\n.a&"aHXO)0/\ͩ-WL u)a_Bv+vBBB+%W$ƅ['_v+v"Ř%W$L{%vhm C'R]a_B0 Vuzໍ3|Wc_gP Co*~WQˉtroa& 6+6ʊ88O.z  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 [<8CEE98746E67FEEC429CD1B5293FC4B5> <8CEE98746E67FEEC429CD1B5293FC4B5>] /Length 259 /Filter /FlateDecode >> stream x*azw`33r")XZiJX+ePJQ,^uo~(@ՊhXˢŘ;#mE 羖xcN$D%XKڎﮋnQ ꟾ+zƞKbCDh|cNy/DYTĠ!1,F(毌Yq,U#.&[I>";^UaH ?^ '`x7_[5w7cb7b$ endstream endobj startxref 201677 %%EOF survey/inst/doc/epi.Rnw0000644000176200001440000002362213517345006014607 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/inst/doc/phase1.pdf0000644000176200001440000036142613517345025015226 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 3341 /Filter /FlateDecode >> stream xZI#ŭ<A'F`[ZZ3UTjlA*o#業+*n+heMS5T7k=n9S[=cvum;lxT˟{lxmf {? ~-lݜ/߼ԱZE ZնBL;tC#!Oz%p8^5m-ʶmsmTΩ|^O355,b9WS끗1o!/w{hBZe@Y DIoam ,J OTpd=QLyj56F'-wwGE ~nT4gRxGnla_;k& {Kʨ0M]2X76N@O-OV6ae5FxH/ *iN"@0jb'fE2Z>YT['wOC)upqHՊx?~BrχX:]zcpcl,E~95,iw`ydV}Tߘ.= ۝͖l*FGT~Uކ>B8g.%|3;nER\{ ଐ B\{bc//eeqAVd!QSxVTt z3\XRȻf3$4v{a qB=,԰wCa)1PD=" ~Mp2A}OA v06͛4%`*GAaq=No{͚XEDwCj{U!!]B[! fi"vXTRQ7`lIGзZ7ɻ,IZ8ݥ8p~8Ɛp:{l@3NPI&e S&#A$wef:@_HXP"ὓȳ`T7OuT6H2NRa-b`|S<551xZ VQ둬DS x6`V/u5J`1TtUE^,E~,UeJ>uQ'$A: "n˙r+ P˒CA#c/LxqVHVZ`Szd mo(QQ #H6N|eMm1|[6~;Hkaz72 ᓸPB`emsj$[=6Zm{;MϜɆr6y9aF!%%޻^x:5;2}o{ƺ#XUq94m0\X 5g"Fvs ՂNF,)o} jpu)שy,I'1d8 eE"\ '3:i@Z=E~sx7g,%@`YGоg~Z$@a͗}*4( c7>?L*O#3V9n&'"]є26xz` ݚ2nM?ïi0itIl^vx8f5VRQ<?>~Cm$Ib·`V0="9F !iJ8.H6`H?B>>XHgw h񩋄5**Ϟ||ښO8OߝyP2x)~LM8P*aj ЮF@ͱxH106Խcn`=sqʀwA?^5(sx )^pӣ~5>W꘿95_.A}VFCscL=ӰZ <>Vi4+*N>k3-A(D})}ҥxjt~ۀb#Y[h#\@tMSN 13q\{3#4ZXljU0~p}J ׾ ͷ#G54Cx1̭t)=Bm[eOƺhâty8ڔ^Nͳ}u;Cؘp.K@y7ǒ3ys^gysgN2:iz,S5P!PD]g2xczB'=..~}HP/Di|B YY%8[7rg:RG;]k{)QH<33z[,z+ .KN6V1v," *ں [t4 W};W|5NIAљ%SkQ>$ER{@r~r/%K*mS4&I2QgfǹChI!؋UfD1wIJ2CJutȷ飷\b#Ib]m r׏;.>S VuP>f"K=tPvC%Kn7R;Ѕ4 ,U}@B:؄hF Cj/Pw)[ȯS9bf{6YbW}U!9x2q47ZNoߛj4%BMM endstream endobj 18 0 obj << /Length 1324 /Filter /FlateDecode >> 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 1492 /Length2 6277 /Length3 0 /Length 7280 /Filter /FlateDecode >> stream xڍT6L (%H^w#! JI#M:*AiD@H/Js=<3=3;\ƂJPL2]5  "$\\&po;  #2PAk*sME" QHB$)D@鿉H @ tKᇂ;9c @ҒJ0FtguF `ax BH<q07 %v&D0q0 6!0 Z:}/_@+ =?8 wu0E`o0 pMu0@]VG{`Bh/¿\tw!0h_S`sS\W:6E=`Z8&؜`8PZDRB|!¿y~_k AH Xv" @a W$  `0'8?ѯ0ǿG}l; D:zj$*+#}"bAi $&.;?GV0+ KOk^3!OŁvk_Q;RrsE`wuC{aCy="h]|=$J'V p > uA@`cqW )$K(؏+q@zN0 B 1.kyAG$WMA@1 q]_e/Lw!ߗP8 _ k/z7׵׿/!BBd#]#Njn}Z1+0jIA[4 H)crvIPEfK#a̫4ֳ)Fc+$ӣoo*53 (^x`w0(9m+.zjpFB|\04&t!g#BG{cu+{)$A[%V "Is&"LYpߍ P^˼1dh=JC$ [^>l-T<3CiȆ}ۼuX &dƍcci]I>h#P|?\Ժ$dh_/[e{0*Kn꯱8(]xUpW<,yKP:}tg*|_\oD6rAl-*Jx*)@0z!t{%=Mtu݃“/8+nmy%ieӷtLѩ^KTnjglǞeicBmB.6έr':) ˮa;k77sq2]$lJeCbkOǖk/^?9Z1 nQ)bOW{.9^ I`0ЪL9`:N r(zY ivd"ޣƦL(e֮mU[%+b$ oǍ2W1>nQ4ll~Zgehώ; ܀]cp@6hebr8"B S 9Y#AȔw8:+F3} eW.EWWޞ e'*kuL8+;gؼ;]X5^ihC d?~a&uy~(9g'8Ni )'[˖Ԩf(}+s lhYnfËU\[yof9k~ i 3DP4_6b"yw/2Sa?x5F|#]BŠ-'.\2өSnꙚ!;tp)7^3dhZ.\Dр dLlQFii e;E77v` 3&Nd&?afSHs+` &ZR˓&I<'o8\&^ψI̠8P%҃~jzP)^Tu;1ӦV>OVtq+ hiC=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\˲{AklM磰z&mua# Mɛ .dO͂2EHVHx-5~~#SaۖݭOuP x7PĆ-dK>(|}S@"Kx[gzOf5Li8`RegQD fףvF,uF)qP3_ɫ/'9l^T{ #{V '-.Ŝc0m#r0LT.-ȅVM=OTF CN94-`aMi}G]"cƟ/MI2bڨmJsJo* v7,sdAk8nY,W@Ὄaj5Wޜ>ނ%wOiyaЖ_shgh*ʒiV7Ѩp<F}֎M/ M{KByhw 6 nqe*y>} MQxϧ&-'ۻc]WǸ?:}" ӤQYux4(Y>y¨j7Yِ;~NgHi!vS7`F.rr#%uϾ^?Q+TO.$ڶ Yk[,^uUW/.C x_tgO2=n)IGvaC¨sӄg8vx_B{)[VSC.6Abg^@<ʦCbs[ލ|TT\`ts|y&7g$[B~e矐b yY6?3y^M?xfufG$.:7<.":n5աJbCh;rQ*>9[kusa%GtpeJp RpXpuZ&>VT XWVWǨl: Y@G:e16;U{Wm\҇z9SVeڒþ;?կ<&J>OHǯlf5mW {ZаXͼmTUL)dB 4FUɜݞ @WfW:t>U+F("닓'.|3yO=?|rn9r<&GHw۲ VqIQI6&=,~l0/;-Ev0.[w:~UW68B `Cf̱VD`֡u/wi4O+nBxǣ!,s,}ՖYYSC_\7OT=w]>G\}b2`f^nY>3NyV lnFڶ+%ucVF+rV<$Ƀ<c:霪5 jz*RH53bn#L 14oiL%uQZdz$1P/)/C:X2kg÷gu aj`٥Zic;^Rq8$(_ ΛthSMV:Hh>z/H~_ҵգ4Bbzd㈘~Q2SrY(~p4h78x0<]qӔ@ ldB^NL_r?&&FLpJOjxZKrމ؊C2ަCLrpZm6ʝ)n:P&ɩ8Ӧǁ)-`ly bY@w LBٮދ r߾<-Xm3S26kf*[MU<qok#ظ//hc} yч؂+' lyI6Kݬ&<_Fx&7)>oO Reom,y9 g:H} Wܽ==^cXGB2#"ȯVЬ7+w|/ 6J\mďT$V*}WE>sQQ7zCYMKiAQ#爃*@,愣%JRP9:qNQ 23wp.dh͎+"%O]N&>HY99ru hq{qbEbs.0.@\yG`D]楅~tمF`HΈŗ3 ÏJ_QazˏW #9˜/O3ľܗ_yGZL/N=[^ZZ}7lQёKi/Ej\$nyЙDS >vPۤ0BgٶT;J˔ ݷ}Zb#JHq8H$$֑[zUt 4e99D>DKخVop'3lI:/ 穋,#a#܀]B-:hEN$f4vk~-JbT]8ҒãxDQCPL#m>rbX0T @0vT-cD:ۋ{j>\ !#X 8쑒]|̶v}ZчS'6ܞy$*} QnjZ0^a?q3J\;qNHe)*_]gq~LO3[+~͜cnflYif6[mh l:doE9*yG/r~ WA>g{o [S)GVŋZq  endstream endobj 33 0 obj << /Length1 1563 /Length2 8528 /Length3 0 /Length 9559 /Filter /FlateDecode >> stream xڍTm50H3Cwwt 5H( tJH(Ok}ߚ{H!c+B]<ܢ@9uun 77'77/Qtm0E?"`&BC]ܜ<|@AQ!Qnn /7߁P(PsA]#dfN8k P;w9u0J0#0Q..N3 daz@@0 wQjQ0!?P[ `} UQj.k8@Nw2 xA\쀶'0PSQd\l~|;}tPQFg?5C"8_~D~O[݋utzl!.6hظ] n`bMmv`$P[XOXv=~5;y~90= |A@$ F  A\V7mxM^a6P'_1s lQ)+ p9x<@f۪ub jf4Ѐ  dWxwUOgr8yq/h7rCWC n:^$~Id\Pxm Hk?mpȯ}7w傸?] ""_/ _>5N Ap8 p/{$_^o8]=g?-uт"@._Hiy\:"~ ޿He/3+?}?WA{@A{BUk78~5z?w ,BBC;d(<8'1΍x9&̱ S Y <9s?}hO9hwhfN$QⵢRQ{lu|O`".Sz֡SWFB)bjDo[OίB6cL_jdЩw]SZ\vSMU1y?̮ q[ů36-6,}?ې!SC^4=ɒe@#>G\MxeZtv%^oX(ʿ1 6* .$]ގp,yZ:)QJIvҫ(pFɐ?A * }'JB1"n4s~gmBV&lW; Y856NIRqZ7gUV]xkzMjyxIф9PpvwQ"5A Gnq\`VpfYnY|#WB S ۩A9Ԍ WX}71vw Tq5Qj>O;G8])SLzea2YQ0> _3`Yw[ЊF S2yG}pN.TIJTQќl=]󨰽~X/k_{A=?4;|K,LC3jbqy*՞cfgB{J`ç<@7唺R1jgyw sVdr~&2@UzgZD49 X؉BmGQ9 `~sXXZ; `n怛A:X@YC;).yYK؊1G !.9Xuh?L9ЪnZ< ) L~_b(QC劊,*Kr]c Tșq6CX}3_箕2} pxӖ3Xq|F9zEzբH揝=X :`ly؞X/p0eneN>gtimbN&u:NS)<L[r`W ~̰V(S nKY/)L6l$.Ƌok0{A"AQ9ejFrMgH{#.(b㍟ڤU}Ɣ$+Yk3 VJwXxgϣ9n*-w|x: !YD&5͛:Z;@_`Eﬡ*GXFոg 1":P)ICw.5tZ'lm¤Ͳ(7ul!),|#fAĈL >6>ryPGN+?xIP{ (y3Y]sԍj_ GuFZb<{x6`?ô+$$ XH^Ca)-M5VK饚 qywA{/Ρ0I}gi[`7K򋪧+_[ d)Uu^I9Hqx$C^uxCh.3dxwQk|aFl~x.?0kḠ7apӏh&HDtpl*Fvi&(U:}^7Uzp .ha`^=1#uh99)AWyzpK+{<&C5ݲ#Y2S 묗rn&&ܺE*>;c.s y^ss [''.8^qmaM&A3'B_BR,H6`EtMnmEBN;wrԧE0ڔf-yiza1܀ƻt\: ;A+Rsb-;~*'־B^+R{ٖvBBVBRL{8 m6 Jlwq g-B6JѪ4Vsq'.ʠ7~2ٮHぇڬi2ۭT|j婘ɉ^0~xOn߫Ru.ǃu^{b38P/Q7૯+d5#oMRnu4|a5g9ȼ:_ɚ;#E>8yqf#3{C0 |k=4\p[׌W %e:^&4X c>Z 7{IXb u-k *b+FpwQC3spBMr/d6w%Vq)GYN̼f+`l$/RS08iGXjHI)\Rdf25|Q7ef0u|2ϯr hbẼdpq0.#S'R+imb:1.9 /xއג.4QUݛW5 &߈I)vyfL(X$WK(}6lmj^ڀ'$}=V2~uoɳbàbQWt{/Օ[E1qaG-k3Dz\Cƫ-*F'c ?siюd GiݼKg8,wʦ~ISR,c)fE7Eߒ|Oa7%CaWEt+%CKʷ>WR|#hBqR)nuKF-&(]i) [_Hc gxxNz$-ٗ~{vlU:!<;u4~&5˚m|d$vf.jg}q FAD)Mpq|S /s*tBbW|ACNgz0:i/ί$01P{R\88?OIX[k#4B4,9~H1B\(|bhvҙđ8rDVzOWg:}= sZFʦ]t[kn&E=?|kL^rEIV%l2OT g@,B-*'Cx8&^diTWR^9EI8iujǍz߼GP(.Åf؞Ƽ^ޗhbeOZvJyLS?j쪥7!jDCn=M8rX!nR53tOJJ,( *2R\`Sx5O<9TZt)ݸqsQR%XQDR*nU![VzS95=<vq K`Ϧ-Q_Q=ZÃuDܥ“!Cs+^ ̅oS`;k3R'|Ѷ>|͢=(,Zy2h0Fԇ Luěa: K)>BKшYC^3!O/0-VJNtwĘ35pCfկsl-Ғ`NEh[92<@QáIS2' E5[] j(`ضa$@iRIFj:8 7$&i-6 `}ooEg'LH}H=H7љޖU~lmHZn)3Ok7:Vu:=t_1}J ~'\y*ulJ k~5?qh?~ KqRA&0ol?4dLJNYcu\Hl\(~?EuD:{X`/K* aR5kˀ0-y B)//欱yV5?t2d!>rFT+/ͤة6lgZUXj$a鲆EP_OIu/_/$T~ס4lO1%Rw(0F=m;&+=4Н[z^hd s醟 4f`23|[*[Y%wicnIg4,?.D ̻sD8NUdViD&0IlDU 9 +0QQ N*S .PAͫu#s 3ìuhMto2޼4De,0رXFK$e%ZHz* miGI+<[r#' i2ڇ$ \_SmvVаvP@:{>GvAs_ X܊Z} hnF/qϤ95?莃ࡲ[#Z +G[+N1,2MJ]&~ XK:.ȩ?KӽXO N-i_1y>\&Mpҷ_@&3W}F\AKPÚ$gm ([W"yC|}IJEF\|y$NNw[N]9O3 ]=G1jâ#"؎sRѴG#m~]~5} 3֑B<.kC^|Ie@ 5'Fժ&Z:4O_ ^Lʧ=aG<6E}%ئ_t-3|=rq|sA{X*=+]Cwa1a(3ngghmeOQ{nG4)y9 .T]:*nW$9hߣ)PX bHɞ^}QJT!v+YHKb谶\sI+EQ Tk߈.Xd4&<ƻ~c: /?" g޻Qǻ &3O"kȌK͢"o-.p 5Psza9> 3S*߼F$cK)r1If,Ji uݔr?STr9?AA Bx3)nW9`C .᫼si39 Kڝ#]^vjWϷ)i)E?S@PDhܣAku۫ʢA}o_Q7QϬ#(8l\YGbvÉ--B'O>@CRnXHcVRӅv,NN"Ȥ$-#WT}*U(uVy y&s-|7:,3Cۇ'(l; +ʂLk`n9{HJC1E^} qݎ18fӔKm|?=,O0*#sm4qբ{?|*2`KjVj xa]2 $栤Ex]&p tt7I)MX`V)3yչ!{V-LOsayB67eåز?bͤ#yVRB5Bjzuefd:g1}GcaEoSǕt X̳(ܖlA )He/siPi(yT׌0RcIRlfntu6ا5Hί XL\,a\ 88nJP9LYIλodN1,m]WM!= }mFce#@S"LZs`r2`tJC&e2G#o$:Vf-%Őe4Rq`MUc')7S1w_:xb`]%g;GaU*D)RtEmXXy z\j4qJų_J˜K0>7\bc*|nӪ'dƲmҎ$ͭVj}([J6΂U"~)y2o0gŦߌ!x endstream endobj 35 0 obj << /Length1 1422 /Length2 6376 /Length3 0 /Length 7344 /Filter /FlateDecode >> stream xڍtTk/)HJ 0C4Hw*5  1C -"RJKHIwt4(ҠHz{޻ֽkϳ{-#@@I aHg_j<6c _P0S#Q~Z8@D%Ab@ @. P{lZuǦpu; Qe>8!\p Z`Uv 0(_)8HWIooo~?^ C:Pw/-`6?GoCzݡ=Pp[;U` q8kqu7?? @.`/ n9C:*H$/ v@^`3s0@E^F 9(+ ꖕᶊ(?%;v_?u# v0/Fp'TM/ =  nAWzC_Wo#  C젨?<toÿ%<` 6P{(5;E/[P7~hml ?'(@b ,7Z]0ހ$T!  _ke.@q @ /eQRtvmm?`_(*{"Qk@-]MVY j toZy=| a~=CՅ!!,P5ap.AEeCm x&@ pPԒe8akED`ww/(IB-7p@a!~~( *twGP77H8քUyIc隆 Y"'V 25JTzA* ng_fj|OU3NߞO&g&nD6IR/Yއu󮬭}ov"1VΪtMJz U}d̀ 5G֪K/#0kH{W[X$e R ^?`}$QWƩ4^!*yCoLAWBQzZV`Xƫ \g;%WCD]ӭFޯ>ZT?a S!t y7HH_[J0Z`pI;g$T63T>ЏK"ϾgdiT}窉dG7Tu WNd}Thi6߱zE$ !|h[wbkLtz\٨#Sό;?FF{(A!f}IiT- M[ā~Z{0VgGA{IX!5.w{}geI=/Y\$ɠ=8nwᐎ*i5R7|[VC嘒=׺xһM6)"JgVE\TF Gz^n7b3M,sl@Hk6Kh2DMiçZ&\bja֙v2uk)@r3!j,"/XZ׺XLz(vOf*rh-:XĞ_k؎Wy!?I}S!8a 6#gI.2U?8W,/nX N Մ̺ ɾgH&ݍBy _}n&=bYiWH3gHF8TJ9S5qb0Ry|vSNXğ_`6|vOCL\*B۔ԭ+bHa>D'l?CUaX%2o漫 C'Q4ytq>:#pB^ ,.CW41rVvtyϨ%57ڷˮ'j*^k fnx¨=gP#h-3)I,Jy{ P!&lɎdp-ki`#2g5 ]~ˍ/x) :o+lɉ l4S{/@E+$F>ɦNyy?oikP"$/<Uk xIۂ(fHGbђ NY3{- B2fI\>٦NsGtTajoLihxws 2g q=檝yU\yp稇窹#\V8㍈bﴏYN tWMgk,eٔ|0^Y+j V/8ҕ]채BUqV7ʼnX~IݜJ{9n"U1A]ӑ'|>1K_erlFwR:%l]ei,x$NQ<5%3W%?Yts :ۉO^WyR7oMQFO*ƴVxQ~%Ze R3#Q}>&jv܉n"^3)a~TYBR|XZEl&Dj;3<.Kcgq-sfntQӍF6#Xkhsc T:{oRQ̳,΂rHTzq:t(r;[|IA{*}#8I=Ϲ"-U4}c#^'~Ubp PtիűKi"+^~sW솕:Y)w_kIQFlDtx_ވ۝I-.c8rr'aFL+`NN kyc%]Gd^|U $ .atS[?^6{g/iFkO6rOTo-\=" #^ -(}*L]N|i_Ӽ3(94s@ =v#;MSRys{?BiT4S|O6_jWhgS]±) 4OYKO:$‰ZVsa=b)wޖ00eO2j>aHێ\lV\ KbmzE44uڔ:|,TTjdӗWy|yÀz`Ͼc5E}2uf&.u6$oxa5V_b(.xl7Əŏ3mȴ؂V{iaxA1[,zƧ9?l8Ee Vc9x mSr9-K^2JZ*t]g7Y_<9;'f$xtηJ12JM/8yiu[kfLA}Rҁ(&LudO&T#Zs_OF5"AA;X'=\ ҕm`3й]nOfjs޵rѾ/z2v'$?h knՑMz1a:Ơqvm&PdY#jNidQ$(pR]0pI'1 pK.xD.q*C;_oZQp8?aK/~/\o2K(ro=p-SMzs4\~C.~˒f~bd$h"Kpa/V#9<稴Ղm8c5&.挏RRd OnJtCmRF'Cd` :XfI$5Њ; >urch,ܭfwKV3R+ʔ=.O"5MWm!)d5*793_So(˜w1Jt`RZVF*) aώک<M_wMgjӼO>Zx^)YP<ʙ|h(B31,9œ֝酳 te)צllqn ϾG>ucš!nnty" ec4Yηg+;:Wό0Ǝm&JA{sa؇/O)'Kc s[dž gad5pd^hW.M%CW z 腌iN!),Eu{];A=qؒ;{@);{wn,xQ_-%\L Ќ+֟a;u=8os>!VگV䤧:Mfܺwl8d#Xe> eax!'1jٞXl!Y=b_f ƋG`ؔh9Y4I/:&%:u Z!0Qd7=$H(RMUzC~Y[&ͶM.XXuIk.JV#Y2VBOhq|{NM$] 7&l̪wCxAp5X̂u 2#6`P%r*||n1󙜉K%!I(]JĎyv1k\8~c!Q`)-52z#?+%:mzMn|_. S|Yu]A2]q{NXN]א0)`\Q+BY6T ެ(¿fb8wR{ѽi>jj>WsUQ+xٶ6%t0d/\NZ$x (jA1gORnN7$AXDPBS-Yk%Z?:XY \4cb si).JITE'XlĤ HͯFDe(&\&vίjpmS!ZV ;^1i1"fbرY`cbt.9D%GߪG=h .r+ð"6쳆^D2l0>xk܃5W =lIx8 l=)q|&"IsB@ endstream endobj 37 0 obj << /Length1 2242 /Length2 17544 /Length3 0 /Length 18896 /Filter /FlateDecode >> stream xڌP CРA44NACpw%efΙսU )!PH@K Qd33‘*;Z##U;ۀ8e d4p| 8؀NV&+''==㿆6agsc -@t#u775s|濏 #J@{s#@ h~@?ftt...6sG3"h 40@Wdpe3sJ6&.@rx?2/(IHl2'7Zs"sП lm @n S '*MH 0ah``~O  !Ae5@UYK ?dlGNt* s;'LEpLzzz6&t52^{^6 ^&/8g o"8#hj] 4 E{ ?>?鼷 ?K'/.JWm\4FzM4')70sb8=y?mA񟑡 6 P,F?G,ouSMGm`mnVvr| _S5_,46wZ GZFsQsW_=*[6,{},{T1x,{{7ҿ#]lm-=5@WҼWEM`C 8 Z2%ǒ}wtu;CݟVE(n _<`BZ~|֋U 8?w,PۇFSC4ΉI>W̵de4x~WaU d&J%Rۯp40cڑ++ ꏉ7BX*8(| oskeʌ$ؚXSdXBP#G.j\zA^;ロRA]CNjrPola튾?:R">o|4r,Ld=YB]"!LJ$'u⹤(߃]ˏvX&@ii FWA\%凜/`= cD#S$Vڅ̽M.X2muW_*.uxiQH/0mL'‼b_To[OM<5oJy;5IօBU>N=~1*(M 1$O$Zf\rCIikt =G>Xx&$MHYB:)$\I [#$9&XFZ Ougxn^|7:xItԅX%!R)ijF{|< ~J߻;6y]b!_Y凾UUi|C|lǘzYPZۯ]幙y'XS쥜~Ab։;Lxݹa̿zj۝j11;iKTV>cEЯ^H>Р/v`]J~|a7J̄s͗5-벷HQ菨V%ݒ@EUh5A<}UUsls_犨Mm?E J3hڤ!|] UCQ>\(dU"*˿:d=l_q}⟚0/c#$%1mSLL 'Q!'j '3 &jkAd.V{$jh5.kA'ror?Іz軕D*T JVލ+d\2@Wpg+D\+"] K2eF&mڄlV~D;ԛ@e2>V@W#^1#yuBH:A.;\5\J ۮG ~7%ˠRl?&f8?4&#?h<Ȼ2eax=q̣@#faY~{&)Ղ~`HO95b}(ed)r]@q`JqS슡@ȫU>/IH¡ÊNdVAi^(_zA+qޙ\QUER!.X ]Mp V 89>3 WtQ\0Jͷ;G讥"b\-+ v$X*7_d~䎱-89ZI 1īXpbzv"&:rz CJ%e[Q\ԓvmeY^ប=+ 74g*T:z{nUSD#Of%`g5vf~`KT6N\Uf|iA1CR6+ѠVu3`kMrp@F@O}Ìg[[{H haﺚGͻ<9_Y=aTlEX{9 Ci2#Ꞧ8ȗ-aƯ$Nw teioV0] ns^Pg^@%Nȼ·mҙx1' l'8Lx=76iG.Z Gȉ}#{l:ݒlrFYGSB.dǒt?+cAY/ zQx𡕍x U4=XcIŊ>g r jݺhsq[]xEc9KƳmۇ'rv'UĵNp&^Fv=T,]nD/k:sO'H*Y{WYrA+z@9C|QWIhL2^1^̠4qMmhSN0Im](7R_Y学& VktɸL{|q?&EgrkZT1n៣KVnτXl9B}և bN,zbi0K "g_7F.6êAzylLJL9HueuŤXJ\BH۝ 1k;v\MLj:㌎Z6&Q̇X 8 ӔPSn mMph:*cqHa*K츘7hm}puH|k"]X"iTiFI.2S#Ls|w"/g ؉;c~5._w.m귾E6j bVx'Qn.\l=+iϨ^UCsw|\`RvA!ߒA_<*4ݯ#F6HO 8v'札u 98~10Y$khD+0ӆcRVk#1o1NuYS)=hOnkM%e~4{cSga.OI[J횴Ԥ'^{#MP]b2? z+r1: <:P3-NzxMT.rRihsRA%,Թ ">$U^hGOXeTD]V%e /+XIog|i`w'=>UŤ穩10^6t隊z "5 i?dy-(wdZCyr޼7’sI--^SBჟM^>$%{qAϴJ|UjDyםǁJyGwe}S{L&P`4rPitQ2w8[,^_7NU3t+/z_GOZٓ\eɊ̋õe$gn& ;9OE?˾(wWsQ4Pkc6in4^]U@5ECrzՔm׀Rֻw]0Nk5,:jlGKs P W GV*Mz9\W z/̙zmbE s&e!tѥ[aJPvdg'ʊ S Y c/͕f0v64qpRbl !JvWA^suJh&%s֭LJ<رZƍϒګxWF'XϏȞ# SiSأR&IK~NSZŭҥΉ鿼gDuGQT窠 GC@W-xTI&q|ozaڎaZ, EW@ t%Fxdv.,}y{>w~0g$.c !\}P?/8 8Kx31?)5|] 1^էϵӣ"猋l]+ N5vԆhjDPEdbtRö~\2r+4myAnlT|Y0.u 32?"小Sx*\mb+Zme l^XKh7qtq*>KW 5r:SjRBjB #X ~1#{VB0)4-ڊyclh'.(ΤڅݡE2"C5΁E Ǵ#>CF*]48Q㠵Ys.g~ܛ%9̔ɦGƮn\3B2b}<ͩPPY7"PpʅH~݅7NxKs&}y0Vc$sYɀï2T Lg=EV؂̀ú)+$ܛ 渪wgV8Z0uPW’g'p~(dNO:s) lorI^g=u]b_p}u cNɗϛ*hnVt@rxJ]_!NsĤ=uov((c ?]/6`p6>0 k`Eunϻc?%od cxVcLsЗj4+ CдV փw,ȭ>"ـP!2"U >|O՗ JY~+0gYW9 K|aD3PKc?+=PܿzӱޭB'HڠF@tXnBeR${۽_7oݨM:'/!j3T^O/Uug߻$I 6NwJɺGU9ۮ:-Rn N)*Rf b?7#{'Q[ ?sIЙy#UJsxZ1: wb~lsyS+f+2q% `1ϧm{ )_OazkHTi: ݘts|eEM[[>e5>Jư<<1,#_(n9)A32/p8td2X1_{Z\: YQkTK6_I`^/dz+M|arbwݣ#% w. NSry½%Q@srxh e1ͦJК@Gt#X:xI_Rz7=˞" qmEn_6C1G_O<ty, iNl@bv#HZD9b9#7vq\m;HvljM=HUKD&n {1Z#W)}XX:9wyIvrxZKi牥^ʉ !K{I9Pmјĵ: 'oyLW<0% 5EB{'8,Ev7y۷^b03hd ORdq 3-$G ?-[,M@hS=l*+,A6D@iŕE]ujcnǩB^4%,j 5!^dku<' K,Xӵ'oPXYf^HȩW3(3c`ԽqF{$k f5 A`WOW[q11Ck";!t˴b%4}L[) yq&$9EPP rK~-H]dzO"h67~* VG#!琎%ϱȓgk12o|b6?<:'g)7{[B({%sZQ{7pT|*.=%[ޝh1άe!j#S $R e\I{g^ /3o*nYe,^ M7PO&]} JDrcIv׻}=Rhl~r}l܂gٹ{qވS^:,&[2ݖ2 Cx,;o Z^v.=КGݘ{D5+bTy[Α6~[8>q&0?A:,ُj Қen~E 1,hV5jb I4ϩ'/6 ca~5](GqOhɥNm}XVAq|hB[tTTU9Ͼe FI}i㵙-7yy6L!S-uz9/#A=r8چTH]dSPӧ/JZ#_Ԥ7j7ʢS}YbJzu= SxyvI.05#N &PEHwo14F !~ls䨕%Og@$_?(uPi ߟ*zb<9~M}lxӘF~XҼIYj|SZ],qn0M;GF;Y2F@cPR:Cd8)?~Q82COp+ ܇ CA-:o[.ji^7ĞG:!TG ws]PRF0ź>-b&뇝y_v,@@uRoG' o^&-hrrX4K엢u  ]H·dgL."yόd'>΁I&WU;M+a=H +k{H @BR%rE,Z2x&Dh.檏HT1T2 DItz NCh NFn??62.SQv{_!/<8ߣѱ纒ܸ~u7ȋ>$<MlˀWX"4 \d#Y3]8.(y_8|SOLl6x%޼|SJ.S7% qcR}ݢ -x~xԙ|V…%dy !Цme)f`lcIGYeG8:ir/SeCE @.EIaDVUV+%ZMC< #20 *Ϥ!仉CG|B9aPV?ĝM8!g( G9: )Y L#Dr]rNY E|]<ݷEٗ{ ,MpJC吁ZJ(ꌂ0/_H]{aXaU{#\0|]\̾J[ƈ| '=,zq]Fu ns;=4⿑:66H[Z|vG>1ݬagH7 >~Upr?e"Yxv4]m֡q'T=Lś| B~[F3ɏUZwlpe*s[IyEOսZ}W/ = (!?FvbT s8 ZWB{gr |2TܵQ1tǢ@0/2g1u5ZYAu(_ٰuM|i̠(+?cnjȃf*ݰQث!sA_1K eT{3b6 !;B~%qǒ_-BU][[1"KWkyIwG\e,۹hgOZ?sZ+QRX#WFgjw480th3p0͙cH>u[tvݖ.ڽrt{:}6ƌ]HQY diDٶ{5A \")_$<[ 8#^yGٶ(4ݳK4,̅Sq.z9d8ѭ>gE#a^(|<RRw!Xa>n iam=Cڠv'##2{zkiiʡ.vYa >gAƿ.B(nҩ&ͮx==cX:j84Bi.UKC̾RIM6H1lH߲C<|56Dz°[eM&1yK?,1^+finù. ֫KM7_$76圛/ |)Y۝tHpG5Pu =lC9$:ȜHZ2X.,lAY3/X:̞ Ђd0%;PVo:!ư5ϖ{p[_0<PuV$Gr I} L*L49F*\k:0tYjT0&AT NaGs6N 鏞,dhQgHL <M ( -Yӎo$-!od}vͯ$yj! NbjPQQGs{&ա3MN4Wumlohq;b5Ŗ}o5%iF:D)ԖPEcAgg۷NIA9ۃxmSU Z VX‘#[T{»>QQ1\]kJAq3~p `wm4E2\:mwzn2t)BMgX!rblGPZ@wv2`*tVm[kvS2 ^NU'hy=o;&35!~#T%x7@?YZ roD_e60g9=S4v F#IR5-hmbS6!LV:&d}m?SYUy$ݫ=HUc[ Z`N ہpeE6xjJdnt/9*`Y+*N's! /ˎnD Dm(WbLSZ>WJaìZ)J/.9U {Z2!iü#'Fhi7ށIJ*%:c~؈ʓؚt -} Fh-}jn>^[Nawyq//AjLq~F 6eګʫQN_p]#(\@ \scw`u1XfuCռA*&ǧm-I]>Khv^_O4I? k1ԭxJ%D~VK|6ITw1 ֥wvzcBurW7P~^KfgݒO̗a=DCxQ[f MqjՠlQe}:?nLsaǑ{2D{igdp+{h٘j|TJX1߯cg.վq7+T/u$:oتfy&UβD4!X}K6&w$Y_A4ÂMp>>F 9=eEeUh/@ʚA-&{SCqq+L+^a-ec=}ȓ#}t0497@+X;)Yp=Hm:g3'_+pM_+DmS~T3 iXRz+I)"LXbskU[BJj)pMWYb'>8ӄnhff ˠrUYX%km^{":\f{%.T%FkNiCNu09YY*zi)UUr >#UNFMycOǕ|`/?|NPK6/xUvuRzV+lq?mr6O/z٦Wu%XwS@h_ߣeM=}kG`T+1W6cŌT`CBI* }s9D|Uz=3T(nNtU!2KX IusPo|7LVQ{M>UǦB0^tUW FWY|H4[44_қ$SO9©1mt֐HG9[x;v1H97<̧3Pnd*b/ra\M#(DWd@1 T܆ZVY)^(-a|hU'6M\-YQw JDbbV/$#8)uwa0aOؿJ4w?&bvڍ3{oLլPtxGՖ$7,j^^SyoYV?2zK2)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.S KqARES8E@q3sg_뽕|{{m9RΖ@yg0K AA73X_d>TewG7/[@[P %3D kr@7tzgot‚lj:=hevI uprp؊3YxP;ߎFk` dyf?v;zC2* XTOZ ` oUݸIq)vT01̀>Ai&ߘyYowwtp9zExdwV:??7Yh rw_i;&ZkVvj8~5vn.=훕{ԫ?\u#Vֿ_`Xxs=??iA^L6 } <8CwTPO$T 8uF‚No|zs?M0'_a//( t>m ?ɟOO NӈqB Oz:+I]<xxj}lM\;mNg׈ܩL#ɹUPބ)|*}ss˃|Y V7DHdq9Yf& oٵQ_w*t+~IVCSDIiEܞp'R-"Qt_lٱI1;G46[|2GwH1GEI G5.mv/Srk' nTXYs ,9!xF á߄ V ::c՞&ynS@ҕE=y'#w[𙩚GqKlN@6ǻd";\7)Tb?<4fhŸh`n:Flw,WY׿R O;iT2{1$0,aG_Mā=؞RVNwTaRKe{dXJT02>Jhf0e! 1?c%v`^RD.1 LPpeݰ~^7>L#y.1l[fr,U0mZap!LqJe U)W6u_kv&Pz{KC]a `ڼKf*;WD;dVb/7vb&3*#А;(t_> yǑ_=i׽j0Q˜ƾA?uKʋenz͖J D1HEVܑVw j8i[|Upϩ@fv͂4=KA/y/Ee9{ֲ_v\?e_V5EXs)3vYHFh<˛͟) Sҕ먮SCu˗h2Fc$rN-CD1 o.WSu`s:T HJH!\O`sp)qM;|H?CjAr63?F[ANr9-k~}g$˼DTY =yX\n7,5%nZ'?B¨mV=N)~j|B˫:ޚ[ mv`TV3irpϮ^v͠5R?Y%]ݭpD)4ߎPV*aSoE`*!ݞu,jFdmL]'UJj`ڤgqMr% !&Q4{B&~3Ȳ"6_s`;QA Pe'׫`N`XTaku0k8k")[ ˰vZd!G[Y`yz5A%54z][uGNr3f9q:쬡o8Lmh]+wzo] džV2_j^K1 2&Gq+ga0c⿝}9s߶p-1Ɍo⃿ZfqS 7Cx\rCP|R*%"0NX=-% I? {m%d5~w.V{-0^W^9nxJo7H؆6QRqf! %֘;l)3?MXZcdV}/ƾ`c^9$3&N\\Jr Vy…p@7i"hJƢ8fOĜ=qTH)V)O0nY fidsP†KuWޒ}QM=0~JZ @54>d]7KQ$x8W"WU+5.Ki";n5OBM=eCh!Z&YMl`7^{V[걉+_c8@$f--z*(w7,f Y#MY<' qV',Q T?Wɸh6E|`>uv"5/m_zM3!y7 Zɓ [ /(ˎMΈ*N$E@ 1o'MZq~Zq <|àOGWjy@Y3gzzswwP#9'f^NmrY{\Sy2*Z L v429ɨ/T*'K8(ƌ. Cb(Pr6l -A]Vv+hM<Q B  u-w`8La` ^S-~["w&;#bxNH!a@h8B tdVotu3DW˱pbFPǰnSv|@AwԽw(ygmѤy9@W .J,~9ִ6ᴱHLqߙ8C`RRC?~͌gmxơ(^Ap1D):KӦ#-掊t8;Hŏ'>EhB"0WB>19!5k|YQM٪̋MUS[WmL# yeq\~2^C=% I5ɌoW67<u> H/b'J }j= )wyΕt?zv[6ieV=njL}2`]IkJMɩDLa+z¥jC滔|'Kv:Bv}ka.4Z̶9wb  [:Q[T0Vm^$٦G5Sg=[㗭3޴SkòY&ejfT,=GƒݳusWT - Q / FUUm` /  B5{@{6}NjzNFu}\TO#cvNf1!kV2'bbdaMG%Eun@/ψ/q+OVg[y(u ΍Br)ƣ\Fh}l?,saCS!IJKk%OKjFw.[%L~I9H~*Nb{'3u U鋻"6wƓxA= Xj9`Ag۵DnӪ0wQ7WrF;R9~ps(w2? 6{Tɟd?ώ_XOv5!4Tɹڻ" 'FVϜ:߳u!//X3BW>,Nd-85ϰ1~`^9\awY+xKR>"M~ȏ s]),B0Ws݉@*؞=$Cy7unKU^T`Oo06gk{QO&_sdr=SZXb]έW  d ܩ0)-yTa,M֪PAX/X;]nv;8#bPr{anc2Hm򹉎;Wϖj˺309:YCM@*p. n`JxA>wɡbCijoPo,^~ٝõ[ZxKyxRE{:{zQqlf}W'7֓3ع_1tSJGĆ [k`(0l`~yh4G:El~:+MnyJ[hŘ8n+E/u&f*G]c+d \ECV&Z>2 {[:4K`!lqËPӆR-6чi׶R)^b;%3l0% ezzN/UDž (VxoxXB|@H6:.5TS %OeGB[Gw/?󆃟IepV%"{^p)7Tm]o/Ъ(qcS&N$QSY]Uz;㎘99.>F\6%avl*P+w+|K^ASݝEm*&7^\pGW:wSE?.grkg!K2`w$LZoRm,ZJIrLXw΢a6@DN(pas5q,ޅK: 2LH$K$*ڪ }$51ܬõj{G5'#FhZA cN."BnZ@/hKXϴ͎[Xo@6ETCQS!=QkF@J8]61ހVziH+T ۳Hyg=OxqDcc"wN=iTՔے*G̰u65̞J8 :IiQVb5j%Qjcrc.l*ПEMfPXo_Q-8Z͒t E%ne?;UlF։]gx4sT.?Sۅ'LMb]$+򕐗#N3K{]hH@XBrXme'ZQNB7oI{WqUwljc_  R;[őS'GROn.rll6yaaݽFh+STFq-\}GO=zW;"}Z(dz*hrqW*]#կuȼ3s#hY\lj? sQ0㾔1҈nu.rf*QjL $'ftjAVi:K/*?f݇+dR :XF ީ7[yH<&H [/s<SG6P79eB T\x[U֪S׫n{Y(8'B 2ْgw\QK$BصDc*ӦŐaTie=_73j+()PCrqD%QTPP&iAsuͽ Vu Srd?,CwR6 h;}cC<.sYG 7?bUJic kG 4n$" {0KZ *`@) O6P1Ma塉[mzF$b5mCWy\u$/-6dl47%AFR_+bpsC)QOs1ڴ!-O:3Sd:6ܬ ke/:I7P ˋ/,=~{ [MHX5l8)P_8ALc<1,3vJT4.;{mM qsE#m"'ړfEqAsOE%l W>XV=p#,mԞ7_apLjPlBPCXSԳ=>BV)ΛIKEd b~ƍ8?߽~)0 ]8kh(F*I$Q4}Qt|`FRl9P8uζcNsL[Nó`R5}lW}9Bo=+(4?m@+̪lj/w/8*G\UPv>Qbj iaHqE3_q i]e W6:{N_dj©^c8#Jrv!Q+/׈hli7¼$6^qôOMXTL>fMm(z-F}ez> %N.a_a{S0_:r]K¬Y1ɥjarԷ˻ 矻6jw~4eg]*dצ݇3_ȚnD  `ۭ*G2_)h542X6C_}zѤZWI8nЈUI,4n>4k⧃.vҏG/h |ߞ"J^3?!NHtG|Q3W>29$2T,v}汽>}D-1mjz%@R;&m$4)8f2(0bgrIZ \%FqP+* D'I+{$E\jepO!`XwWIrY%t* w-|9홼6qo$72% SqLbyd{@rDq.P6M >O7gjл=Pb$~mj``wō.BBok&~I,:U"ǯNU$?0(3vG6fݟ2F 'Y|I±l~`/ [u9p^ַc'|?bbk9% ,u@7fqVzבx>لMr!',>%W5;'t x2 % Ҝ6k}LP#[[ 12Tn'! _ 4m5$R/ #V{hksu"oBre 6{XodC&G n-UgoMV7%ƺ/бR}>tdbα l;{H&yjUѝ1 dӇqb=3 8ޟ~fY{K= ;YN7@7t;SƩCxK"Qz[d ?o9?^%;]8*xX yԹ56igx5nơr +ێ ȟ0՛ۙO6Dk1jIs,[G߬iLm1ۇSB„OhԠ nvj K0U7%yx轏B6=!]RTD4ۢq-x$Au>󔪞*s]:W9A|&c0iA"Y$-q\!*!ٹ}O.U# endstream endobj 41 0 obj << /Length1 1670 /Length2 9287 /Length3 0 /Length 10356 /Filter /FlateDecode >> stream xڍP\-Nt%H C Hpww Np {N{L]c1WmjrU &1K9PvebcfH(XY9YYQ5A(@gG3&il6n~6~VV;++!I3w%@ ]P% ^ k6yZx 30@]#?  3Zr]@K/e3_̘Q6 +W3g `]3@gss"@+XF{`cfٿ ,, f`/`T]=]f`_f.|3w3sfb rtuav.K-% @ ʯIځ!`li#;ل bee@O _5l 8BV$o@V?3w O#66%`QlZ 0`}7gyYB^>_9q 5-ix|88L\>N.'W^V_?4VCʐg)*ߐ)U]o7om;YnSy d%%rf!gA. O*/ ۃ@U ]`bceY='.g|n)X;v.n 볼ع>lj l 3x`qFu<|_߈b/#-Al e,V@N?Y,6^6˿6ÿGT@ϽϽύ\?3c?2 k-ܜ/c|"o> h8 i#`IcYtnw@L ZsK҃%E{)Ds\N$A}rea@IStW;S:ɍC5ƣWƳH܎n%CSVa` uy,+ ='4v|ʛX"u+.]T$#}Ŀǟ)<̞(et ONkvLQj='0}x: ҩtDRNgP1$ f ,NߛY#tdz2!UPmcTros>ôZG7hDV2k`؏X.'Jfz(S}I :.hbVѨ5uBȜ(g yRYtv)f& U&bHfF[Ʊvoj}. &q+n' 9A#$/?>H6rdʆ¿"p5µp4Ti20+#~uPP5ģXGOg?x+̘ؕ "=Wu #U[FTMjjohu崊K璻?>O@Zljݓ:mNxuL31Kn^!ICcJH+{ЮId˿An)>d* Ki.L /kl a gU8]5֤/s-̇Фo8Q8ꄎ6+/0;7L/;.}$VfGOT=:I_nDiiWgqEeҎ_Huw34J unu(ᨱUíj_π7N l=Q!7~XBu/O*B |8}T̔'+N4J*)oP/3㉯6(K^y}t/&bWmciHt櫓%+B?ZVxkv(znr[-pq<ۙ i` ֡ ;79s/iŪm{R PʹD1Ik櫆nr{颩`#WOjd# b2.ZgAU[:|ƴqo5"S*asG=9BH*VO{!NEVV(PRb(])=jʢA} G[^"^Ό#gP3=S7lI*dNů;;IϪ^*/V`8d +xDwbWJi(t NmϋQ IZK dۇ$l,7 ;O9MJẊ[]SW`YA# J\&zANIdP[qܔ27Fd/C< 4hٽrNpO_Gw\l~k՝QWK|^!F+.RàF!}ۻNZ^r |[񈖩=P2ک1WCW1m!vpb -idS/シo Vx2+7 <ŽZ28pÃr{d*Nzɋ˦72xMؕt_+SN0. CeWC\y_ m;Z;^,\D }*5hr8d.vaM0M &. )߸~흐jfayRa=>r=ZAu'Ļ?K~hQc_+qR]-OvRP|T?lKM(ޤ-l|SK~ÿ#UsDY38Ba[TC>Gm6Dk $Mr@~HHU+\U;h?'N7 ֌+WMl(A9: >(ToTXJ5t+g٭ ط\yd /v(>3m-WaSDDbd (F%JJ]iզQV5λo.-F$Zđ X$mUD3 8]pN>?W P$'#ZxɩZاw^.{ By ,c7bpaE_\ul' <.asfel_ b l2z]K>I;į|lKrPY61=]vB :8{Ǡs7Z2i&Ӑz5>QzQYd  l;nDȚ^8e7pt B4ծBNT1 nޒxұѱ~șHH@ b]回IP og&ո:/);Mԑeks,SFϐM/l]ʎlU\PR ݈T9 Փ( 6)E#mET|) rLIZҟG4(?pϘMg.`6MsIHSvƍni}kar&!N9c[E}wC){G2IZIOR?qеz#~[:Vy"[yԲBE#p!x^]SƒRNڡ9X'c͌z϶V?&zT4lNJ# $쬩= ϼ{|َW=Qt 9j:r%bu,f3O@.ܯtg\Zxazl|1sf1}}Vknm,/DWKA3/^G| + I8hIۊkCpЩM 0⢈~tr_܉%^9ĒmhKk'K8sȐeW`E8Dt]DՉ7H R~kt2qv8dtZ,*R`!+h6̫K{ qզ߭1Jk'=18^if5hQ6پIj+ ?[m=Z+Ip+IPYQ.AQA<:0L}8@ 4jM6l S%*d 9D2oϴ /;e-NMJ%u<HT8zՐq"ᐤS)J9S?[W .,gߨ#pqݧx98felDv0'5F~T7*"=r$,[ޭԌۥ$K2('aGceax!= . ׯS,*xuzPO^%ZH+^ >6ߟpUx恻@B)=i`ѷުrҒ QM6$RaÐ/{5ҰK?l*ϓ( D9cOQˀG3mNfm^U6IV̨=F=xrIdt肽9ދjZںj{%N52`56qYQGK~Ԕʹ΋pq$eARn eq-߻ =S͇p\nI*mJ& }L Mr UEό ̧P{C7軠/;sJg50b8{j 7]Wr:UJ /a+ ڑY-1\OFVJd'IRF%p^ 95<` F5NjB[G17fjR g A+ك4uZw7xrC JŒ ي9C:KͲ׊#4YM"+1ؤޫh:ZNA@5aq o3ؑLli4|[ ݼTЊ]Ʀd?B;dl mԏUKe1QgWRƊǫQG1Gd$u^a%s_}ȁT6F :]:]DH8ȳT/dw? wItZ>j)$MqEW|L/?V p*T7Fc!la]aF9lǍ=-&v/#:S{ٟv)|(Y=)tS86 ”L~\%-L͚scą ecmggPFE \-јOwXl"@aEPܐOYS/rzyS#{){%G&2Q+dT ˢl3Xڹ$O14 ffuKH-Fi'[BJd?IORz/-%Ta9wՓHw繭W~f>VHGg1fO'L^mg̏ɵّ! @F,VL#s,~rZ\jyyA)خׅg̰,a4j^ ( FtK3OłءL/<鐨+;wNx]<:k9>"WEIly22 :r˷KNzekMEv," LuCl]لH(,M/{}zxڽgsba}Yq"% ¿w2˥ "Nn4Hsٱ|u!g,[V:գpSk#Mhc^q̞'ZYU D̮|0G6IJޒ1*d]dЄ@~ZC·s#:XJߩQ<'7V2Y|9HE}r*Ipoagaoփi͌3"d}[ns}U1n5zN[Q_ZFq57DުF\4]m46r#RI'C0M &U3܀-&tм=פa~;cbF{ō5o ^2 DO~es'FzX59Ah,-!E>WZ=V6pEiw]S, ô;uBXbr2>\vw̄2a獨Ay:Hmtz);խHJGYqTg PACHN;3ǫnRy2SGabS>S=?, Ū(/JlR$)S`'?y&G0G!((pstIꆯ~³Fk..9oK1+99 Ek):@2P*Mk䈭W|S!ҙ[*># ,ǾSJ-KmG!GӍ 6$>tu)¯|*LeimjWN ~E&/-UݬpW4MHNU5'DrY\]x>V՟^KndMܗH7-pf37Tx|ĈL?$x2z^1gpǏ/ӫe}pwBi'MlsY޼M;->BJIǑ7M/}CaO]^%ZegwE5ڀbK]1' ^"yw ==RmViTpvpM5ѽGrG,3Noa=.l툽E{}Aw!=1Fq2fr:Jdd(X.m8ʎ'?Ta*\|}5 kK ӭhs]|iFEU6XimQ_\n,7|M%6~ i4q9OR ӈ2i=6&/Փ, $6%ڑ7\Db0;>bQ"O3-:RHKqlLcM)N endstream endobj 43 0 obj << /Length1 1413 /Length2 6186 /Length3 0 /Length 7141 /Filter /FlateDecode >> stream xڍVT컧$F42 Ѡtwl1rR"4" 4 %$%Ti=޳s>=lj!vkQXqXad.$`I%C chk`P,A ܌(~"*B`$#Ԅ"܀F@}4 @`XB@!0 ';c0( hz‘0 C!J!tU$H 4CYX zpL .&Zz"P[ݱAP HP `p?!  z@_8g?Ā^ ";ݟѿ!P0 E P@whm( Ɗ(_P4!E@] ̀P?0_?BЯ4KBiH8 ՟&n={(t rs-dB4 >B E"|BX%ltFp7D?zX(a3P>_"_ w3E`a PpS?3a#̛&'ҿKj`h_;')# b0aI @ % h  WN_6[y*k@}RAUCT٨`1v>r8N0S9~( |T ~^2p,tRҿCÞt+8L}QOD:TrCTzI/x,hnGLe>^9YK"zɰdjxvXNŃ 9`L*OȬ 5զ3zw!/q"]FTt "ei'TnibNU8vllD׋{{Vx| "Y_<_Jetp&>M8/-s/s; i)]̕ ͻO^w~ܳ`Pɨ' l@nqyځ֚#n5I k26iJc\:NmtҞSߡUe%ZoCn~c1ƴ2iY` ھM7 d3,u{ iҦƇ \ m3Fr^) rL\^|p.\qQ@OpoSКu ]g0~Cut.g)%Oڹw m)hY0}&qg!ַvafT=,r'R;hp$~yxخ6biЬ1O)J&$Tnodnl|&rýy$e6ᥥ!xsѴF^|QKPyᇦ!trៜ\[=GյHNN>B~<*a8(\~ݪB:"%hco{T+}JB . Pp=l88MGq[w }R%cyv]cԗ3VB$t:3Ž2 6#|ˠ?( "޶TΎy" iAnNR+ۘgʟyPU0%a9tz A쩟E1)/CaK^8?)'ufNJz=Qqn{ *DLDS4$Yxچ{TԋJ-S=izJkH茶F'O^ ry!`#ًi\⢮2|lJZY]VjS+xͫ}+ڏߐ7FKs4yϭ12TO,8h%rak$/(n`7Cf8Лʇb\9KJ U[zZ#-[ QwG_kҪf䬡о=>q&JxE*IoŒ[O^SْLi7wȿ]WFdU^2Vīzѓn\/*V)ED,/K upBg3n`#$]fsUu-隃L@ E^QHϵE#7쳑YjXU|䴨Rmu7.Mc_0_sIjVֶyؖo[1c !" _Oշ ^9ݻc4o1lڿ9C!o_}xgج#ŭ9"/KscG~E[@D9~mmԥȇ Gk!|y ϽE{{zodVf8ЛrNiRZ9ڻUѭ+n5aw.IJ%Q|-l a=e`1ȧh\.u@H%]cYGF=ĉ!#Վ4~BDEy5MRYh*>$G)TĖfU V[?WFX3\Js$$/wmG$u'AEB}@YTK3/rX5OkvML#` T;ZQݓ5ǢEVzRe;C1~g1㧍*׿0#U*n=\l<ibks|3riG>6v-?tLNaS:?{;?ijKA-ok\:i寅_?eqD='d2Sq1:zhT_gFո(%_#^x\Dq˥,n@FcwPSmdx𼋋?S Wߓ.Gq@Dƕ">G[TJ| u!JЩԻ!q\L qCNRֶb^VW}?|:bխ5%m:Q DvOF:RP8r\na 43W++*^T% Oz 4,f]4PcKhE\L(e^S'm=\ O ;X7n~C Fmf^U '50,,qQŒ VmSx@5MwfrgD'gS9qW-Gʧˆ2X {|eȖXq+Z˩zQPpD8dfMWeIWgei$ezHI\us 2G1#Wm!q{a*Yh-l-p-wB}R= wN09FʥI.&Rim/i6X[oǸpl,=]* P!j#4ADzT(œͽ$`4UUz\tK+`'W}O'5B\[AR_8-ܔqyt33,-0v)fJ&|:v[,v h2/㖳zp]*w(0ڒk}.ϸgh-LաE E,\yCYvO;$ov鹽 y=T~iyK dB=v6ܤW;WG(V?!Q|>ʔy$"\ӪߡX3}em)k/xX pzU~ϝrIgKyn)þHOWn̞+/vP e|s0`R}]kJ)1푨\ab >z ݏ=2唻.93^Hw^3`sy۴!1o M74c_9=Br-@PѪcdFzWpGo)Q|{ MTlySh?L~'Yah]2un3N+wcyƍwӤ@d$!KurN(G[~_VAץ\. E+}t6N5(ЊWu7.+qq0Wc'81M2I]V,} lI]i-]-*F?3z?]*Ry%2V`)3KN_cUaڙqKB3F{%1j@O聃I*6^ysiG7>oY=W ):}J ۋųo0MM}3)zPope2W-MS_ 1!-O$-d yuveoj^V'voo=$Θ[p}\uBRZgjTnFmz2жe9ّHg:,]]v4ni_UwiN")x!I8ͽӓVyˇjɴU@ӧux2<94^' 3"WbhKX n1gSw~`wYhGv}$tޢ:>9%iݽ8fmb:QlPqh:9\E5mmy+D̽1/&VC߷܍:FY~> stream xڍeT.;w V  @pww(Hq+PZwwR쳻wd$g9R;]Y8X vv.VvvNZZ -V v3 I]!y7[WO._CgA$lPd;؃\Ph%VL 7cp19̀E h Pw0\'+WWGA66V 3jPAߴJ@;?XQhV`,\= D` 6ٻ@AH~@dc0np{hf`[, +3hoh@S_b ]̜..`,~4Z\d>I3 y/ۛ[bȦivrImY\<9@fVlhx9RrCx8:8, T@~` :|_0LA`{?!b0d }vrg3s{[?4,?Q;x|X8,\\^>/ӂK]޿[8Ҿ2q{<fPr5@g y _ϻ wMnYczml7WȒ(:@V6gA`7[+ ,%dYXy#H=A*`W3` 8_@?:@.ȡAJٛ9DN^5NdeAM90X88>Z^o_ؔA6? q4   6;#[ 5#-OHHme'& lm9AF AH/,Ca*H  /!'#/fcG~A\AlAl!!%:QC|! {[)l?bH!wBn}G[?qA:9M4_  [տ ?ÿAH!=5N2^Y37gA׿9fLUWDdHGjI'x|Sفm2;/0.Z{nJ['9`m't7sQ'+梡$jag>Uh[oJ(g\ cZ5GQiw_P ,Y.Tx \7yr4ab-MD/;ҼFDȺ)\1P5*N@̨ΰʒ=&'LFmKIks=S f {>Vy׍+Nr0%xOsU='aNC?\L3*(10 }G'ghӲ~-z=P/bDP?03_{m6k@luo26ήCR>uvJKx]$] {7 qw P×gO!,E tK;=C*(Q^\kqy 23r D9"SQe@5쳭]iq?(#Ѹvuߚ:'൮T0~V:bukްN غ|S|GI^1yS΂msNeM(Dhv[{^PC\t&3*Gj(ȉ!+Nc#8/eYANMhgaگ%;<>1}q}M-#7&t T޾`0=uoכU,d6QԼ:6Jý($a|l Ҫ+(Xߗc1qx69!G~q,KwFNԩ~LaǗf6Z\)uf6> GƸPg8 AXt}z?:mHںz PfƓ0 yYpb>! 3Arѭj-t1CSpŞ͆qw|g!vmt6JϏqWrc,=`TT[ Q2E,:2+%SKŖhD5%#^4]`(ph_S! rP$w:v_.  <P^n,$̢a)Xf@Խ;bc$ŅɃ H0nS[K3n]C{S5\nO;MŌ*8K!jtuGrA20b/Y0 ;sP㉒D]PPjؽ/ 'Ң'{5(mxEvRH)f4_֟~eMej}s=ttQx>g<~Є0Dg(rX7cʈcı4fD#-q3W:w'\̸ƚMok"g(/k&={xXM z  M.by+*pcDք,+%Zgi?ZE|bI=uʍ[;t Ӈ@sAaK&]UZAͨ 氫29"(b$KhʟX}{ 社Fƫ/ɿ^8|j=靕=0XpI*W})-E&jPjUViy~JTLV|h6Giؼ~sHXX,!!:~R9f¸+W=*ƫ-gX&kB&M"әlgŨ~OOw֍GgTyX*՗MQ^_#e~]fsmGrmhiPݕټs>a}K"#ՠպ_|Y8ϾFzĦ@x3{>&林A̰2= "e{ܬ z<4&`' Q[V<5)lٮT5g# ,7(vv!ۇLIܣj IFLͫ)M$CJ`+9F22J A9ZA.0])N}Al$Ҿw1ʳ*Cܦ;}ˠɲ{7ɖ֤ׅX|,os# i5lĕ%6n)A_x4 z[:Jx֊'SRzs`qan^DbWáHmLA=\L&V!K|D7u9Tڲ7i;cOقpq׼b Q܋-M[ 7lZ4"yu#HLOZCv]j]uS>}W=+g:Yj}$@b .P5bCc ub^72}B23볢IvS9hZޖ[sL;ʹdvr ˟,-4ꐕo -.awϗMn >G?4"< <6?u]&+X4x|m:*(T}l$FBNXk;& `Qv/{#%F,?b Չ{1+]|Sr1([T!~aƺZD j MW 1hto| !T*]4$Oz!o l1;[,F/8:NcwKDe_p#XpfH"㠹~a ZotOv &䟴܂-آ0Gk6o{,9$J tfQh-~ k\Dǂۜ/GW ^79޻p>uTF6B$qqH;+H׭F8yWWS.`t~ư^Wpo\Loxd3p %.<?7y\&^!p-x M$)űj>?GƋSbO xD0So<&Q/ v9uk sMԩik-=v:ڢX\@yC^.UjcMj-UtP7䶾EāUL윋}Zlk$P[| u."T<~d{U0Qh3ZEHxތ$iDpꉜ_,f xq]:} gƒ%Xjs1.Hoaۉ^ٺe%U4:;+vB s6]~ G0)関$e}4ۡ^1RHH:#$Er~rmZYp&5\ @s]>z9M]1D|i??6quMQGg`l N8LPѾ9:РVRp|b kĽjeQ#b xD|E)09@Gi|龁Өm[d<['hHM &(F9s o$cMa"(o|u>$4AQOFI$xOmb=nX e(!̇N~=g/9w#OL؃u Vq/BDz{MYPYK73fz{V"_ mX̕sY:|䄫GeiXDl/ܧerA©|ӞgGb?5~th*N_U5W*b`BN6>(ץx=&sUK'ORK<lΗ4t>8x>g7`ӭkܤ flL:!wWB98: ib?ɅUK=[%4~`'AzZ" /V'kWUMwJg=hC_D?8hgz8}ؖ~o\.k7@c$AS ư[uL(V"K I-'*uw2B_r -G0PנM'9ˊQlRsU*.(NWO~<-TdTxb̰&r5׋Zۤ6dҖ2aO;SJ )TrR<\}GAn$-0HqHSZ*kڪQ;gK"=hy9itFxҸ'3";;+7cŹ쯱(lu9FJ@ut=Ϊ}v&{7c?)Wԣ3Eؤ⥣Uh{)N|Q{ ?⋬,|T(2s3ie]fj=Z;SXe%B5]΢ǺӊG =-'svV9 [rClmt,oe| 8O˘kctјҌ;ߦs)$U#dI1s|e.l|Ǻ!8ZHxiTÃM{ 6 RWj(iL|׉-d_ew/'`a~.I 5I/*-V=:V||83<ln}䕲(h7!DݾV0Q;vɁ/T.æV{l:-. ~63)Wf"7`.Քg`ZЦ'Mj֏+6x!]Ttf9a&襨M3]t Ie-cI(+7uz1uT?cg~lE)R cm6F0Ǚv1K ekm2| GQ$ܹ _=x2STy?i|Bt7?!] T$U{aD00=9$VIZtLs}@+1ar4|&F~B+P%*WbNn}N2EZU&tìhL3, e;KC ;wv L>QUWJ#}in^7 eE[# L"gpqL XB ;: Psrg \RZp +*6ϕ[nȑFY\נ6$r_+cZ_6# F3|?5\^(S.+m@c J VŢQ뉏6^qh$0@&@Դy8IrHyΊUiG읾,]7ӲY=+`.(;95ܥɗ)S/?iYإR*|c81.47z/Eg^6pm qJiteLaz8މd&e䀜mJPmd`Oyfv ?&:IBQ?f1**[Xߗ-ȋcwWc:L/6;O#o(&gQVN/>7KTD_sNTbf}D7H!E(wpDp˦Έ mzKw5l$QH亲h/F,ǩ]U)^@W:_4^Kx?`k&u$,*F ޽^BUnSgD{ˍ Le)fF`c^!}@ĉۊ,|"fɋ96D=9< V^t :)TebPM9LF1tܚ]m#7HwѕޅտƐy~2xÃįPsid9F2ƯLiC^'Dl=j%,rpʡͬwd7KӪ䲙}ާfZAh З9vbꟆBQsOE=rhAOM Nj31:8LfkH庡`NDVTq3'C[5mDps kCNΩh[xbZƑ¹h pŒسqoBU?U{~)ʦk SOVY\ ])+lЭ ͫ}"qcd19R#KDNlMP!dҗO7,%Y e恫HMA}#GO$_4RyUxapcv%R2D˷?Gt<,ޞ,-=ɎV68;6—f|9h$;`qPypyy VLJ['!qE<4A41Z;qL:lDI^RqЅ#0+Qpwn&T7b ~~GeAH "o.>TW+ƃId!yat-ge{;uX.Lg۲( lHV > :&w0ҨF|z9|dB S53%7E|̔ Cjָ:hW_U@(hf$|MZ* RI`}Gw=Z#9NIWL0HV=6g_'ZZެ۟wׂR;>chTL5H}}0LQݦ\FV-?_#U׭W8k8 EeR9#) yq h rq[U" -5`xKqξ4ϹS4>{S +J/~!12SЈN7ZYyJP^^2B5KF~g%Dn,<γn{;@"bh̓K#a_Qi7}*[嘮(%u=Je`"yn!ܿxEO$ 8ͧ]d2DCz}nm8!hףO>?`%8w:|G0iF "UN'%3|׭dldh&UN섓y) ?sVqhSmelR c_ȉ,4C׎ʣ|G)0S|"I\@J~bS@^(rޛNI7&UW^×oe齓3:=&z R}\{3wOx;2):<oLe3RZ(ךv;A3q]6W.9=;+O7Xu,9I=Bˌt.I7F:8'fs;"6UEt=smGY.QVãMW%̴ޞ$s_?1@RDoU(_N1[^:+k5qfҽ,_;cvךzn|nւ1 ܶqhh^oLcrtH|)#C{\Rerȇ'؞ev9Ul3QuΙ=e*>.Dj`)8Z f=Jp%- /t򁶏ӓJfƣ9.p|HGXX$Ēj0.7H@cOo,nNАzmE]^T @,"J0{RhH)  ;( ^Nw[v9X^8XUHh6}G!vܢцO͌z'Ӊ˫RS5#";#<%XFj d$Cm< -"f'2R0QgcvlHlS(HR<ߍ2s^^8$'gLM<8}m$Iwsb>%5?Q攅|`a)(r˛v.U@Q̷4ٯE'@ 1}-amo]zNoinݻ6bqyGcy<'V pK+Q靚I eҬT:ۿmMGx(2KTI0r2}C:3J}CX mg;t>");'y)YuI7@f7|]Ȁ-gͽ9:A8{5ToPݔ]:d+O%5OᶤTi'XN Θy&̞U%ҡZv2'vFcTzhV* u34h9el߄2h[՟ʃ4q,cDl#RmЎ* Mx(({Zg'}{fMWE)IB9iI˺84uN(n_ u+^)?wXN1&vg4S56*Pb񰆼q W] (dF0LD x7c9ybT(rNP/"ax$E FFǦz8L>Qx⾦`tskdc%d_!榖38xJZ9cExi8unS."_ex7`EZmזTopJXO% g#ʫq]]:ρEm lK|Kf'7Z.2NqL8*ZDUfO]vEJ"XFsGoc/=Nb~̜@S,j%&[\&nj8q;Uᮋl4_QwYeת`T"9Mp_\;tB2:Γ8"%^@by'O#bLAlGRFc鰤5[ y3)pyDΫޖ!p&YRB7gy7K: e )<)T3Wf@&iPCEo_bhBzNKOX+nut8zWC^]e}\ȇo;xEvPZeI 5K_k--:S44mwyXTyB)&* !wiJ"Z,@=ЎenCG`]1jyCw?˚b2]~.ܜ  Ok9"^r0e76ɤ:I[ncǏ~2ira©.ayB$p>+Gz/8UxIMh~H0UX*Hap~>勔qtD* 7nězdѓH9 o^GP2ǷJԎFk~[21l hë f.OTPP]OnYW()=M1VQy0l>i,"]DcEC[mdi)Ue5%*&*[riq-K;a%}!V ^&C I+hɾK}PQB9lKQvH'xG$8UĚp|HIg*VdkyC‘YK F,׍SIA^u=Y9oM)I{5  Ӊ29~?Z iF$ex7v3z-p՟ToŢ gDn\Gq|V%JM5R *Atۣ|TEh7U*^ bd(cj^wL ~;'Gi;PABbqN[<.Q'ҽijK?z| p_LgFYyf>awe֛|UٗOwq^rya}O=68t{O4ҋ0Ũl^֦ ]|+v'ښ|t5QUSBLMH$ռC|rs6`~$ϻN魽x)b=/w$5~%z hh^Ο3H Ԝ#;XdFki@VO3%}p_0,VwɏR̘t$l J$p&؇@7 a) *1 dک#NեxfXnY0zKM,1ȄwR%գ=ӅyD!,mTyxj`^Hgчs*͋UUuO\޶3BJaNBӽۉnws+ v(bGpw 1!ucQH4qDO ̛Et݋RnLJz> WTT[ASټ[znzO3"*?&|UM=}зT{ԣ@{0AV 5{f|Nk/ۍ2ӓǣxb?j*#! %QQk0yuyCJ\1Lݢ0_y3itC&Ȉçi25En É.ojIRC՜,7dbs<"_Ov^hZ=-vP"}YH%]LA}F<" R|S)u,9uP85,`BMq⭑ \ĮNԬ[J=-)Xáabyǹâ©JnawWoņe?^ M'Րt&#_,î-3ʹ)>@ӥ0T7Gîᒢ4_!"LqW*F= Sr J#`Z]oS ^v_u(ll8^x8…#A v<78Nfb k>Ĭq̱0OP] endstream endobj 47 0 obj << /Length1 1418 /Length2 5966 /Length3 0 /Length 6933 /Filter /FlateDecode >> stream xڍxTS6Ez^{ $*IG HR H&E@@s=v;Nd34TrB:BՑ H( P3@(Bi Cáۉ8͡^(!/(@4HBR^U 'F"("N- III(y@`0FB=0!`8 AH#F{J =PBH/y^/ 0^>P'/}5!"N+ {A"Po 0xBu$W?ѿ!\08`+C _@0ă}08u0@]0yQB(G_i0ǬpRAzx@hѯ¼̹ i;{ C89)lj`LD@1A\0v6c8z"=`3E@h/ohp:"N0u!c: b}ugQ7wMTPSYJ H !!g[ ?Zg$@/e^?+#1zx-{@1 swO{<? =$fB 5zP'{`̌(!\0:CN04/- L 8 5D`;( |уc-(L~g]5kE`//?F U'oH4& pFzj,(v{607 ^^i >^}( !ZCBd"ݞGv^+1 nᯬvǥX Ċ=t%՘#詹 Fq{Ö4XjGN^@Y .)Slpm-殢$zE}*FmYK<glYD=Vl{I^6ަZfaIʝ mrF^<=.MEOV86DOť,vRN_͵ }d#uHԻE_%7-ލH9c&X,TjeL?ye=Ĕrs_w斟f㈆{d%Y]ei&fyJƹ1\FvʪJ2()z\Rı!$_%)I"s!,W {ڒ=Gg}LKT LCspu>> [WB4<۲Ϩ׆kuw$*yMڑȺHۭmUH@"4=.wO7}PB8W-|?-y;Wz6U'] lcW3B/O'c$*^H&Yd|}so9]q'j 򷰊Hj$6[ gߺ՘=zB&͗!oE;h7T3j TdvH2N4-*{47_A>Bal|^9M1U&#An@zEM=o-tSx>*eFD3Cd]-% C;߅\r'awȹh&#fZ΁:Uc((1}>'l۾ϳr+hFDS.r'i?] Ihbw5S8mSXM䛋!}G'hBk+꧉fƙn6J:Gc" x#Hj39InFj^<:9q Pup*Q9;|rp%̭r⿼Vo?l晢-E2 q; ثrt?jiKHtܱJDZyφ=dG;\ 'Ƕ6W)kkvl`ڃUڰ.b+o;,8"%qe9b:Ӝ䆉N**[a1ةaŢ,L0U'bxqil`5~U8֡+'[Q!ݪ~)mfpU¬1#J. ֧׾xMT p6/W2eY=>,RI͚i2 nI#Hڥ< v R/vC֘xh6ǧm?w%ݙ.salk!~-%8Ø0c4DTrB"dyI]Y]IK!oW!VceEy7$\;*6)O'&Ϫ&ådN K 4T<VQV/evVyN؉s?{Dv`%<"3?Wݥ7lyY_@އAJiKZ3$4wOϘiQ8WC-v `$E͠b% A[<m_V5*k:Ό^Er5F[yzne6DhlY jS2xW*Pm߳%Dih50*|FF۫.4a\45We J.w.usB+AX cO; 2k3WPRlI;t7M k6h~ԓ7:6McUCS*|&f#uΨ܊ۅn ];!ʃY㈆ "]ܲV]+P ҄">5;b"mU9~ pa{lǚs+=ll)X2y@e)3dGE.4[0޻@kϫ j8xĖ{CJG30 ϗgI,#4l1!ˈdg_>1c9tJkjĻ-Ԕ2"tϘWYǽHWYpD~6oYP+w?7`~9B4O:uʯ >^3N ĭRig:ϖ_:sƖuiҸin2́4\uv,uz[O(1罉888kڙAї;Bwxc )?F|heBlsuyY}ð 3bA}ۨ\/,I|D.JjD(T%f5?g"VddndW㱅ؙ|Į =s1&GJ!kF4;=,8JiS*j }D\fz(lo}V\|hufxҔ3Coo̙֞ w1=*I]z𑸳{"iO߹"Ȳ [o2^T}Vɀ7䦆~ʙ+hW/~d;Hkb>ǣ¥'l=2_Fᴤ?٧U4/ $ߺͦ_{3v*MepJZ1tzd!-&%~Ze- sg*쒘R Xdk^ ɮ>:fbدP͟!}"[3J6l'Lʓ;¨ rm\]+ó^>ӈ%_ȅZk;uRᯝzxrhzbÔh5w N^r[j,YY,N>`M>B'x^] j"u XH}r/ݓ)|{\ކY˼[zzD͍$}ZFUV6EZtQށ ‡O>jPjvaޡ3_9m Rdœsud\ ^QXi $}=q4I)&#(yCs(7bj*T1z,MՅcscGmԆ˜rC1g g:󆮍lZqFwcCULionݔH p^]p6ON>^e(Śs -!ZBt쳺sh7,.9J 5kJy6 ^2k͸ Kd!U-"6XЭ(8gf",ܺNkz[sT~`G҅`Tj(s\ g^ܸwz>_4̤Ql%Fayk}2"›}QIfVOW =ifB@-|S:F3@z)/?j7WKB C{!bG%kUe/jbo4C>O'0-JPrY3'{Ñ(+>'AFƼd]:|=7:tE D ~Q B O4馛F˺D;|jL0+Q=<4A,*z:.NK nviobBim`|9`jt~zi Wu\Eǖ#2?D_xX< .ujf(?p9%ЋΘO713 xؔ}1st/+x~\NOF+kV.mTaSdqG[p /hʜ|ZaG[e`EzRH+ oOI?e{咮_0>`xt*lglP.Ohc7Ŋ "{|D/Wƒh6 󯆆wov/wd0ϮȌ-q??7+dJmoOԉ=#+hyxGnquq*=:,bx\}msF{mvC%Կؑ)Z3cjCLpiں|9 \Xvsw&/"m ]t{dفg J10EB(vC2n_6K߯4e YGʎUp6.#<ŪNŸ]zǰ?gs{Ѱ/~6%u>}qw6G0Ar[ܥqeo=BXS_eԵkf nhq19Q m B@CESJ'>uq|9.:\dBNIK- 2X*=` 2*? }:ȢqשԻ|ۅ 'n+Tɟw$(3n4]>PChg +\Y%7R~(șL3|dXԺxU}㴤qP].ȣ!D`u yUF@G1)ӟX>#v NS_#„NbXm7jYy+CƉ ilW7qMWO+")_2VLqፇ&o["[ާ}KgݻP]P*I$s 4b61z+_QXk4)dϿ,!"ز_č8Yh%U V0EP|8?|W}f}q|yII&sUDU/wr endstream endobj 49 0 obj << /Length1 1393 /Length2 5904 /Length3 0 /Length 6854 /Filter /FlateDecode >> stream xڍtTk.]  H"!ݍt C0t7RJI!! tw"(9kz}|EKGaU@Q< ^>1OMre&bӇ"]a EB(MBǩ#7GH@0k:/@"0[;߯'i'(` v" 0(_%8P(g1 Ãʋ@Jr>xPv+ ;A %b\u6(0 @a("]e53'XOC_xA)WB0d0prý`p[  TPEyp_`GW:9o(Hkhs a(W^W/_eS["p+ѯPz^?u#<>l`pk_ ݜO07_!h?6[( HXXPu@=!v__f4?g3 |\P ߎ@ 5 XAmapP?g0O { ߯F _ <>< !#!ď~]?o A8_e( A~x}!7Gn v9z - uZ5:^e-i-< A^>?vjCAU{8P-+_> 诊+za]PWAXR0D$2z7 G)4F? Ik| J7$@[P'B43< m^!>,ި;R>N ⸋u)`cS \G?},񫬚&ɊnQ٠Tc+BPLvܻWrbiXڨWB7 ?ZAQBk.N5T3# gGjgOYs xM8" B6dعF~ OMHy' B^s(gEdp'2&j JUKiO~AG/¯zi|ڝJlúCYݤO>~&cl>+%L\:[l&xGTJ 6% d_gh.l1T-KHZ0d`a8N0WqPDJ HNiġ})I+VEġ>&@K@JB{wx/rSf)>S3)05@?/SiwǒW:T!Gi$O?87|-B zNGe80+nUX NL%vw QC&{[6̘X1^nCA>} |y!%WV}WaR6cl/YJAkQM\]+^n1Ǎ+vTg|vI1x302'r\l]0?_"mR[snT菍) \ȠYγoswsa]C{,So3't8sĩzP ,`,^ʪ OoQI^wyԸ3t$]S*aLZhJXD.؊>׳s} zIϓS3c{"JGb 1 zBXܟGdMNP+X3+`d_.ђwN yp Yҩ6 ;/+C"}e#b-"E1[8JT>^֪^~](11}ԭ#@yjRlGv+?0^$l6"K}.)yb ݴ{%' ܑM_[!ief?`=90~o7*<;rc5[yP z*D^ #~ iIU*!|d2D0k}w+De!=_Q).Vn|[aq0NI,$kfNqJ@wJ;C>?9ݐAK7uֿ+MUkǤzo5_\҄WXuE\LfS]k5^nM;OO*Gn8bFjxfM1G3TwNyJnjZ{yB"V,Z7LbN-7=)S8~*Z72YT廇CmsLt$K)X̢R+?a ;.OSnGs[\#ˣ[Hqťv5 Vߘ"u1I]oP7CXO#wk}45^~>3d݈=S:!)58EbÖ"x-Ŏ_$ &-󍶒ZXƯ+&xE&wDWHycgB LL.Rk&i>~l߹FwfԆsś2_v[,>5bê_ޛk)I.@9*r 껖v嵝nQk!/B|uK"KxT>*DbglzcƢ. Ҭc$%*7۷l45wL2WlV} dhzel1iݳ0,U8U4JVʂJۥ陛gOqV|fSeiX}IeMqmϸPs"d$ f ] m!g?50K⊪oE,h(V´z@Y Ibi?bu,V%ܣ]x࣌ƹ׫gkWS⊴Jy*_UP[$\ff;, Tgܯ^gTF i9[c}f+d"tIYqiPzYz8mޢO&!npMԉ搘"?WdK #zAPIj *<:\ZOXZsuNA_便ba_g>$:Z;ՠ<1a_KRemٻ=k޳[S"'1|:& 51?g9c|/3%\FAnDY9ό`3HN{Eysw"Ay~3&;{Jr0bWIN=HaSOpSWm_2!&f.(5͐ǔ F2 1^RsvC8j54?Up*ոu ?ƪGX@oē|F;8do =rw%ffEKȏg9? 13Q8|L…-N5L+F^VqOso\A $A4AzGǚ#P`7oGeeu#:+?5vɼ`\ ș p\g4=}M%:{(V1p]J9»$ʃ|GBHCe|/#>I<e&sN$618G}kl` 犌,Ou*m"Zb@I\#^=mVs.S˲X W{0[^`g s2椁F ߤñ7m"^#3Rܤ #m ghg" Y l+V fRz%g3j,.[WRruI?n.>kd#}cYk J1$uHt#Yn:`B)JYl}UFdWK63Pvrk=r?Kر,o1r|UBoɣ!Tr_زٜԺw]:+7´abd1ϰZꋼ~nbF:zC=$eϰ Uq|l|ʨ`!X;ӭ3~'ݏlԼ4!~D<2ܡC i7/f:?4 s|ٱ?9*+ຆ*6%0{NTd_[O㷌lr v:MRmkFlfGKԷ/_D 1R#eֺĽjj#%'\7Z|,CnɞzXPќ+J@ w?2ö,eGq 94K'bpSI< Vi&Z<[Ƚ'q4B"9u,*S1xbt.XqHkk(h~L'zy|kخ UC&^fR8c%Rܞ+f,&A^ȯ"LQTz$6F:}qW;iϾk|21օr--RZNȏYs<%fU='970(GTvy Ǻx7 " YOVd'555_[#Й܎ ~Br|fѹLfï}rֲD5 ;Jo)sW#l"+ٴTJB_F'~7䒗‡ķzTS ?w߼(`4)l {knbu-,gZ2P:>4PZ=3Klj:مxR{%Tl+FiNn<-ZobdZd],9o>.xk36#RO" Bo$tR"i|*6EHJ%;% /pnO>WWFiD4Z]S9!T@3> 7fTcVkY\5Ã-{e-=?+:lS&Y(P endstream endobj 51 0 obj << /Length1 2159 /Length2 14297 /Length3 0 /Length 15600 /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]-` endstream endobj 54 0 obj << /Producer (pdfTeX-1.40.11) /Creator (TeX) /CreationDate (D:20131120084007+13'00') /ModDate (D:20131120084007+13'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.11-2.2 (TeX Live 2010) kpathsea version 6.0.0) >> endobj 14 0 obj << /Type /ObjStm /N 39 /First 292 /Length 2377 /Filter /FlateDecode >> stream xZKSIWq76z"a1`>E#$F-yj[hwORUYڲbIxf1-S)Ôb>*4 ZG,Vrn` "*Y3Bj 3÷c XxY)(fY1@ ) 9g΁ȼs%W^2Ǽn`y$.0 {b,Z4Ȃr `,ϟ׻u9ɼkx]YOQY%i⨼=0$`G~"{ =ƃ ᄶfu  4hf,A;;N9d/?-`Ba >-)Ā8慅|\0Cj9ᇘ<)!Duq[Z=HMc+1T `!óK}L>;)*oNDCPBk54qTjIC&m>C)J".DJdQD`"#H:I@OY:CR! @2+if22ti}M&JB K S$< aXede)+>ĭϤl(=Y#<6 ` | <3A8M,p/ˆ,loZmк1( `V83c186#2Z$ B`5o l0\@B-V'Y:hkCkaXTDhHn<#p!/Qzg4Pnj ]~<?mJxa 1ܖs:`dyj*iG9W6響'hVdMSKQsy [þe eEJho#]cOHodN)J]vh5ƙhSh\a܉CCI^rHqmLt>| ؔ0qԔ(e Bhfs m\s{\6 ~!؍9?>7-zhd"BM;6vN~=#r r2T&> <920E6AE7C880CFC42DF5726DC6702E1E>] /Length 163 /Filter /FlateDecode >> stream x;qsۘ0^(f6թTV`O"Q rn嗛 ?p B5C1s]1c3uBdG[MDVD^DQDY"kBb٪FnVVusjb$WΪEnVm[)%LAr endstream endobj startxref 123256 %%EOF survey/inst/doc/qrule.pdf0000644000176200001440000055107214576431433015200 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Length 38 >> stream concordance:qrule.tex:qrule.Rnw:1 97 1 endstream endobj 4 0 obj << /Length 2298 /Filter /FlateDecode >> stream xYKs6WEUēaL氵dVeVeR>h/c{M* u7?H UrI(,z~ӝ}y2;0U.:Z Erx,eZz6y2L \vy%b i2)XaÖ9l" UD+,7E1f,(N`QiʺIuZv|V4q&-wgzY,yZړUGw{<ɒ,/4J&uwjn'aތg+bGS&$S/ [,R;FenS;;;E^H(PF}uEёn]JwA;uGrse2f&8qa@c}hny)w#RC^VzҚ֛֫foK4QM5.|,vo,Tr %DN}>17;/'@wOhXVɒ5,BAc#'Ep|+l&v!7ӂ6l9\<[b>mYzh"Cs(GAtcW3wp{̦^ɴMFqdh@Jj,Sq*Կf\H9hA=Mrߒ0SvmͦOr@FIJ* BQB(ĤOq`z_j.V%(hV Ve%RZ ӴkgBXN`Zhds3B!UƒЯM|&TJxB%s^FgvsEi͇14=9 ]{(}%gD=lwV~w?Շ)PϏ(PM +t!HI3337<XZbx+ɞ endstream endobj 24 0 obj << /Length 2587 /Filter /FlateDecode >> stream x[KϯɠVo|Y'Fn$ 8aIIcקA5 ć͏oNAF'1NP2.7fHe_ɔ)UVMoK 2J; ND#vU|!y:/6ծwq 6/lٕ$Kgqg!t:! HlVq|ߔ,c,ɎHotp"fBvTn7Y✨÷sṸdJuZxUbJ;Jjb= Dv;v񥚗RA% (kjfy v%h5Q߱ajbH+^ن2(0a/ G` v+U)2#Pv@" 2+} 8O#A6Qy"l* *eW/@kk;)a1NjbdpHZ$no"sdtUiF'jV[zm\{psvg3;9̲,w1呹$T}059͇; NHB@!9?p#FƤU?o~rY{'Dp @Z+[/;9F4Eb]`VgC,.1)gJ{kQ/+*0h=w΄W88Wu3U,t1zqU-n(J>b=֠WW/ߣtr ^̊nıת=#I~!BE&duL:3)4~]%W6hKd=c1G&y&0`TlQXKgg bi vdh -n!û\: ߰U801 eqѝnw)>zҥPzDAȩېRg}iS<iupt֏ m֒gק ?YXUb5&ԩc쁛h%:QdW\n}m_r=:};0=]F ^Jq3Fh>192'.U(7QhK r,' ׺.\UU2uڅ+"nl@s Y@8~ w~|^Ӥ.PNͺ(3XoWlPoyiꇱ|ďMGC88!$93h;qMAjXwKO]("H'H AF-ﮥڷǓ&7bD/xi$x9Y8qOr*j0J6:WE56 O Ͷ6CLP&nBU0K_OW;ľrG¼+T6zM宼u)ZJ"8qFmXr)sӟ [z6T\*v}m~9bSˁL-`!b攨c5{\wJ3 0*ʺ.* )O(zȅ- Ʌ'Ȏdk/*͈ClϩuРBS}Q%{)dDL,Ch!,5Bg}wKdv+͒a]h]P$/?(GL糩mD&/djD 6j a~wV'<[ڝf^=Y5a@8#eg=Rpp66 ZdMzvʲլ½-|: .BCTq:&䢙ڵNãm0q0)!gWC6AvCVmގÇn^ذ.> stream xڍtT6)t(1H "ݭ C0"* H tHK}{y}Yy}]{_fg5SE@Up( PR1@?(HnC9CC0\?JH(ucSnZ8ࡇ3$J$@ (7(=a-~CNȮpAP7upB 1(Z`" 0@@`P?RpJ;P^^^`w~^C9P'kd6g4~Bv/FB7g w BuM+X//@+ ; \\p`stT5Q(^n vvGă=0g w`|3!H+ʝkF_inYnpqQS!}sNp5UW1fEDb qU ep݌Ao>hw'Bz@ ( 'w3#a @_V7 E} }&&<FSQ @ %D0@LLD`؟F#XnHFݳpQ7ԅ8tKr;G_YWwGο?qC]ԍ 7b7v07rP;k#a0o. q1ٍ~i"an/ߍ N77 -7gI8aKh"0 !9曕 Q-7p&p3?$u@ Fro{[P7B85H9V5V*[¾b=lIU2CUK7?`'̶9n⤺y^]j5_?EVj]YdѱB1sSy=:BSBx`٘l{{tGRN ^$ع^Y<28DhtuSO=5W?7*ij1`Gܷ43Dy|4RkT % .)'ԝI#yC;Jq!(󼃓[C uRU\'s.%N|K^pzxz"+8?[jtCţ\fPн0?Zô͸;- I.wMR`pئ3YU04[I^/=KF^Q6610]:!pI[Q+gGX \qnJQx,J\ΐѸJ;( Czx;gEn9kW )x-v#x6 :.M݊rAw6Ƽ?O(B[-FTk%9ڈ NW^r 2,t ڃNep/r1;*ȒZ?W=y^Z=$.q)~*oqt2;wV[nKhgxM|uahJI]?ލ[W ٓcFR뒃2VcL[/oFn<-}-ܶx(1ITERɤ=oj4) J;pv $zogKӮEdrR2KOcFŧ鏤ʖ)r1϶NP]ֹz U?2a̚"c/.0Gx ;6Gis`ZJx}< -v}rph+\ƥ+QBiYߵZ1\|#G%*꜏f,nFZmYn]G!ɔ ߔ{q KʰV.iq+Mg~S8\}+t`י5Mm(Ǫ'69NC /W^dӾsg`q|=zQM1TxְM/fh^^%_i%8|Y ?zPT,nēDIvC2k[e<‰ )mnRb95p9,B)Es+g%{8q\ƟjryA@s+F1%A*9 QB?1^!<}MII8"ý5D_$_ut]Q:JҖh= >xGlꛖKH%t ל}ma[4z fX )q"AKo=T9)1QYgxrxG>@NZCA}YyF'%x<*>0BsOzs,U VIIUnm {84kъOy? T{YKVʓ{J9==VV4եwo$nXX=V6, bGGZUlY}ճb_ϒd[|굧qD2MYqiڥp8-Dە/Vse~YHXmZ@vd"yN pRمUIu 2;( 36 vN5%;׶/W*R/b#uwcWYaX=-2%P-Wʈt0'e %/-۶μ2/c;[ a=RQOQRL;#aw`1ћ>*>\Ւ`z~IPʐc3/VsJF|,wq= ?"}KI }`B.{ (?uJN M_77-۰JEB2U^Q>*սuI ӱuoZY?yce´\򠳾5Rf&ڨޥdWUv9c(#;r!ǩ΄:6fj?競+IVEUIT6O1 H>!kMޖM{8F&鸳BX+FT^6Gu9ZZq)_PkG cY̸$ jL)B[څ3'8$3N689ԺPwR߱6Óu0Ukݍ:i5'K"iۧ)!dPF^$0l882Q,0<CcJRgjT(!80UWJ ^,&)OxLη0́faY<Nf{Gm`jY8nҒ󀺊XEM~0.UDNyY{6m xOD6WiɱN Ǐd, Xcwt&iiv 5&^ojLϣߺ+逬;8 %uGP$lE19lJHXn TV*0f!p8?!G3n[EpR-r6<|&6fa=HDh3!fal]bmryj]qJ#%[+5A t%yY&]Q+vP `_Ӊ8ley*:$G.T,:/rmIܭH<Í(~SHPU[d>=B72Vw)qā5bR*-NSڵ{(IfZjg嫘4)TgRfcJ$"Lҏqʍl2,T<:4 :W^Nh_mhOq/<;{6A`"J~'V/c 红c:*%?;@UvgT" ` fAE0/bR/kO3,ژiٌ_'ۯM~@/S UŨՁ\Da)ܷI@+_ǝ3@?Ȝ k),>?~ZyYYWsAFc>ҾRVJg`]8i[я4kb&x1)?#嘹G`%;u`%뀷N2#|yP!4`m0|@*KOblwP~֭=RmxҸ&wM.Xs;"zMStubM6lrEĹ T.h!瀮EdmlvJ |Oa ۑk;Q.ꊾhf, `,wzrX@ok9h5RR>bط2c:+yԼ º9'|+-$5ɾ91f+ݴz,wZH2ӑ=y}?MM_YϦ8 p@c>i$8&㗼?LJr}^߳"Jw#3 _C\t5^{UhPAQ}εcϗdWL/vu'Al&xC smejnvlDt/2x3[7* Rz'|)Ah|"fYI,} gi'vm7͈]%ʐجn䧚ɗcc;F YbzeB  : ˳ej:6ʐc8yʖeh.Rz,S1bR> stream xڍ46,-BD {kh3hDу(Q.:A$z|995k<}{=̨%c(\\ nQ Ë̬E:Aeg6!0`ȹAHMD5`.Uw' xyxDEP7@A3nP;{$z=X !?g#!N=5H$\;#anvlO( A@< 6-4ΐ[gC9`HO68A!.t ^ЂC\"E97'lm s].v[΍Br.6`' CVhŸE!ݠp$u#w6+!.Hnk{>\GϿ-w6p "7mfAxW{}o8یlm@ !~>olHOvbF `ƒ'3l`.N1𙱚.-)+ pxx ~ah*.0dEoԿj[O࿓i҅XQ)5 ?!2H鏟/v:y@K z\jkv5 6Pw qqCK PzAlHkd9A] 0zʬͿ\`z7Pp>^A 썏>|4cjnD=lanZPmx@#=[@P" kkw77+zK\@vf-Pv^%Cɵ1"vk٫0n:kNTqhС)z4s^PŠi`7}{zg24IYzb^ mhN<)^=fߧ5_=Y(JTC4;J)iE |E6[ o?|UZidfc5 Jҕ@U}0$VJwlz˖Rk4wY:-lc@?Ptd 4oQ6 Xgtw_UCռ&V~| aH)_W>6 iU ٺe۶mp^SI#^46}ɢgd||Dд b`{Ƨ>(vY9hXJoF=cuzuyԷkLV,see Lv#*$!wKwk='q6%eǁ`m|%1; &>]@pN?Sr@%U+@YgZab#e\l5Y#i]Kޏ+ Pe)Kdt,^"b۶A|A &&%fcg&3t5 *GЋG iA>QFV?fg;HNgEV.v%ϭ~zfLgBx-t])~6#= ny,p Y$6V&|WOwY7x!Y˼m5X`ny[9gs}f@Xit~kmB]%j<jXkf J}rKo𞯴7gRV5=byN>'{}OwiHUUcAp[1x+/K-Z0ϮaHk̽a``P$ϡlBDߍӮgҳmƱU}w< XWb|iEZrѵBo94v$Xפ>7~\p Þii7SZ]Z]l(JȀ!DnIZ[CŢh+"HjaFϴ{dZFKk%9%@)0XPS=MAji@#R_ve;bw *sw!+ 0k4K_Fj\Ԭ`I~4e`Jb*j0Trr]ɥƯRVֲ3_[%;&V2y68TzO2gsj6 Rm`qPmӪSglUMl%05)&ؘV&V4hbwr=gQWfu98J(9"Hᙄg֍'43yRTr4N{SDsd}"67guތf:=flTZjy5(fF'EU%xCJg]g&mID8SkRY.'=;oi8@q e&{X4F2`đ.sgӧWh,4ҲK!Rނ{H Vơk*@ Qp0y < W'_ xƏR} dmB %*P|sӪmLjo,=ro.nFs!7Ӷ^Oćb "AN=Vߢ0rZ0Tv(,^?O?*! ~|[ {IjxqݫYD7 PeW5%h%fn:k[ym {-6%n[.'ě%)*IWƙ eK 1QqEd)OK3,J4# wA3e ~qoFK"k5%r1־l5c[ksv_cU}sEo3[&:q9t!xΓ&Xb;cC8eeP'߳ڴk=^O3P_n;M}D-TD9SgW voWSflrAHIUA3 闣os1Lp,w}[Ph@t2$Aa>bӸC_ t u Y#L*SIӾOuU9bʹrihhg7,b:&EXg e>r4ӉˑZ.]4@dW$zl9Vf6C&ϥT^Ja$;2G:T)R/q2W]"l :X;`^[Хn)WzvJ~fd] >~҅,=V[lR?>OVTfNɍ<~;l} [Sct[󰒂$˦ԃP@ k"ьi0SiD~. #30.GV}땍&KPr.\h,{7;f4?,M!^%{|ŭP4NY9=X;)VyMQAƪ aˎF4ISX$"ڀk!$Z RvM, 2X WfMa?.n:q!ÈJ˹\h&]m7S}_#QWcMA~]xv͟B^~>[%'.\;^7|qƒ`#C^}ZQ(L iרq :|rZ/`F4!'9t(cJ<a1onwr̷$.6wfPb-D+#_Gro^6]|%a:wп)Q0rލ1R.9D0n]btã:Q$ Zo(VE7U%#+мmy\ yl8Zfd΍ۈ`vfXE;6X b(OZ>{,|u:'#pqsAGfO<*鮤tVBG V^trUY 9ӿK #̺Q|&4YNyPlLrTǶD.;pP'i+}N40oWj,ʥcu`EpZ'85U}BxbƓ03R>L*鞯 { .ڔc*HdW\pB[nkjmNR#HQ@Y,nUH#kƫFZaZ^L^ ^^?k-VSe 8FmwSj:~M_n$6}"jdӖX+-W TI$}7e)*&ݭe\%I]+汫9XLc@ڦd ZO?[V~gV}KX!LKeJM+']ٴ<''1-Í;\#x%?x"6Z|Uܻ,uϦ,ަ7lwƟ(0ּ8x)$BcA+n)IWQh;fjn6vn]DbS^SgD߻N[)uĠ Hܥƒ>=s+.؛;)ph[CklN,oE?jl1=e-&efüG~x=B=R 9h4~8Ap;-]lĐZ3u0=3Ғn9Xī9 j)oILu90ytR –qo/s7 5]6O+P&,E,᝷&rWDu,S;%z.%1$o. PUc!{ wH֤8d^G\kŀ%n*a?}Xtsb־Un $^GuIrU{yY\<"pjƈ$yIe:Ng1Jh6Ïc,)2,{'TWFaNDt֔[:vc '|sjLFBއ5M&OB9>N:zRϋ>6 J&ߗpU mR}J3s]UxzY dd;T_8]HiOu 8̪!}Ԫ糑W?uo۠=%ѻp<,6s_zs^w"(p\j\(T _ъnMt}95>m.joc0sE-2&T"s@䗰6SD{2oH>gb& ጮ$<OH\.%1J^A˵UZ6$@ SHC^vQ%w;`9YO.(ĕ8InK!y[sO5)߮UG8h<{8I_J9󣻍˴qO7㣀 {F1&ȤoI,N9w*G^c{2 ﯟRi ߸WhD :Ǵm^7T}#OΠYS;"B7|tXwq- ݈{Qg03JpJ8ɼlrmگVӓ!lmHKwpߨfn@<~2Eu*4?M(l}I`'x:Ho<7eG+_7>FcP?֮u&\8fPO}ߵG:1 pp ,{ŧ[X6=۶RChB[+%'@=@l8ACyoMRTd8J.U^}Կp, ; eO*UO֜R3x9}UL=>M{in 2'cZ -l)93bߓvk3EF71 *YnoAs*.C=fCgz5a钊bE)>ʫM7Vb Ulwe ̬_ Fl2=l Adaz:`.8JS{L ߟbhV?xug+5(8†)~:c/ZSJM5AƸv=j[o;>;0TΥݠ1xfA-D9/Rjr7yhL/=>`W|^-\FUk!eHπk`gBOl[?K7X6Æ7\wGjX XT~%{lbLYn3;8qoLvW>fAN4[Q]ɁMw r6gqE?dRbiAŝtOwZjꥷBxឆ8Τ'53tGHg, 7Wofi8.{~~8WIi:3?^Ydt_~לt%[Y,bpߛ8(GkPˏ&);n"'4Uۤւ2,hr-nюQ8D}D4s*,IyM$ª #X 1J pZz"56zB*tc8VN76z"+Rl|$v~9d endstream endobj 46 0 obj << /Length1 1415 /Length2 6638 /Length3 0 /Length 7611 /Filter /FlateDecode >> stream xڍtT.)"]25tIt 0  1C  Hw7R)"HHI41Ϲw{׬ͷ~~~|@z-].+%TGryr^^~n^^>< Ptu .0\\`$'Fp8@@b>^^.by; PAx@9 :_V$**; uAp:i uD;t%X%lH'1n+7FCtPw #dx@-_a@( 2VPp@ Vr'!aP7 í~T> s[;e`Ԁsܮ0_#*e GO݋f_5>U A@A^a~>*r&qB8QC@`P+ @A|w?-<` P(7Z `‹g(zY!^GYQ_[ր"<>\  /Q/~YE ?pk[5c`+6@X CrS^A^URtspf?`G_nH(j#ZuH0J2p@ܼ0WE'J /9P-+׷_1 +B`Wؐˆ}(!_]\^xգ,A%P+ofx$*`pf cmǩ7T[ɂj_oCP4"lWrV)C>"rf5kQ0_IHW-V)ٵk:Tш ,O(X2Wc_|6Hxà*vQK@"Q7mGT{S(HAF^`1*}C'IJJl&lqi=;Xa/7r;veki->:\T9 [ nR /MCw @$v >_ }@Pm/z.>+Q]6Ky6;Ooȥj)"d?%!!C\2͹"w_4jag4s8Ω:zDpzLA|]Oxw-Y]⾉3VVTU$ur07SdmW\{Eu,e1ޝT! :s~U2M>&|T:|WSHNK'WS7.rgDvECRL4^K4l໎}rr(*_e+H6J[QoUZlnG} VܠAQ +6KCo׫Ǣ}q?qI1n6Fiήx0|.i"BY,"a/oM$WFc \Vvy0-8gheB:2 2 %64߽\h>vA.lR&Mj0 p;B pDb<2̧Zr>- 2ea#gٵG1{pI‰cRee2,:wf2)u)]suCߟdLDe[aSe+Tv!/i;.7 Ue1n"tL1*Eq+Wz`$qF0SURˬ9_dCtJIdLALDcf9SFSu?ثD]Ȅ(B rԯy%vh5uX_> -f[Y~imCK[A% /}9WIeMn Yz+uҮVU,Zs\;di!ExMAj@ k G$gʌ8́l'C2"cNI>Y"wǜg@c9P}Qk8Rx%a6GXF0}}rHf8Y &~5X l1ϓwKkT5w"gY N+ŗ+{v)3]Ǎ d٫y߈sd?;0q\R#Vlby "{Jx t~=TBhLtHT=_&^ JARj3a 'lC)pjHI ˣ=i]Œl];\< qa9Cw >XqCHƬ8Uڐd#EkA0b-gdz²pR zũ仑Ďާ-S.\(mi$?b $hO˘_N~k(y?H҆6'uw0ۄ=[j >bZ,m$0od;bp\cM'6jo6/!O呢U"(&vhSq75*['@2'faQ"m:$Xugs@+]JoϪbK9+BxcCE\f=]cbٌi%s.L ;;|N=RؘI^N,5mٽ]hnY}Ijkg43*D&>=xr]FѼ5M3%Rn:Gr9:PYHq8@e :xL%3W5ݨ=n"^)aڽ(|6Yᴜgp"~1z8m3tguN4,5~7X[Gk[ޓ:v2gn`F@s>8AAP.ϯ_jifoKǗGս^") $u`4ST S>&\*τaO{OڑV *<uZv넕?s}Nǜ$+-=CS?fArP}֦%4ٹ8gR$ɫ uw&=mTd!txBf&р|ຣ~R䖪?H,.).ǁݘri$O\ѻonaٶ QrX{b;<Ľr_\wCRN6m53_±)H[U)NJOň Ua=kxXT+cV-AUn:MEaÜ0|zVMގ\elW\S djzI+ke:)~h"TT9~5Iũ˔eXϞc5ME#2iz&.5E$gaė 5&/"(6lOg^k[׋3Ȳwȴĸ<`IJ釃Ai9h gd e_=[h5}̕zekVM'f3,+ۮ3ÜՌ~g}tR>9(bu _/RnΙ3EySmk„Gȸ+Mwq}}ca MfОdj>ChSDAW;8{<A|t Y;4"_ b6y}]W""fw~[SnNx>z*rtӇXea*l}[q8tw1cQ ؛㏇; K< 3^ÿjS}cQr}c!l$CLk&כS-*N&c?s,skGY{!w-]xCsH8bQO-l E}xz+Nv &sfFr֞~/-pқcm$No Z]Ux|z2l~ImY.S C~e7x&/ޙ&{ncЗ578 %uV'ƾi_Oj ĹyTyS[z!7hL숆H"w׬zcCF7ƦH5Mbƀ^}0E=D,!2HMy~;A:]t#B秏yy vB[sťk#SI B1~V̰S* ;P${}?p a}y|Uw(|wpݍB}\(s*:DsQ*j{=ē>t=vhE%|}ޞ nx DF)%͆Yl,*%}0DRpt("w3KB'Ms`V>[aĊ޲‰dPmƓßZNe\JсGm7$"AiGOʇfAxa닏6˃tco5A/r~K/xSC\Wc^acϯ']?%N) ~@tHHi-hb%9UCsKlzNJ{q 1h-^H- 9ZՓ,99c:3)Kzh#BH_}ng'>l1 }v|0mz(`%04SfGû_/jq84==[fD2Wq2>lf}uP-"빴sW 7O'3H;ި2OSܨ\C9$*(=徶6w`.FNm2%ChG$8dvF'+Nw z;&uc4SPUno ij)3O )Vg{ ;~ u]b;!{d$u^;~Sv?De|l h+LӋ\NCP+Tgvi".⼕Jڱ jRE6Y>x^[iBؠeW=7`)XDM9lKw]BZt:tɆXx!Y%b_r$5FSA|\lUd,V$yUtRdO> Ӂ(jrK{3|1:W%7̗@m.7 *#Uq[>E;*flgZ}>ՠ?ڳojΐ"zV^C@H{Mnat\_4nAƄ~ _xTVNo='gSaoH˴ͯ^arDؘ1*~1|0dVX&4atMbHql>fr߬4\}.m0쟵.JwɎYcܩ-&]u:}b̄DMn=U 1.0Sb(g|[уiӞclFJ˅X*Id߻[4 '~XgX>gXr&#/@j@5(nbQn8a QoHf|rR=H94. Hw}F8l+?ɷ')\ &T%̖ȥn Oi&UU}_xG>yf Q24._)6hC C Fv *)QעNjG_|N>sW){ٖi=2+Kj}f^Z5#݆SCci)Ԥ.Wdse۽mHņ=ڰe{{¦yky GW r?ճj?EJ<{@&z$Šb휦 U.҅0+Q|hiP8ӸZD_VA~jV4F}Qݲi1Nl“[qb~-Fb'>0[%8:܀A36OJl@h? ?.mRb1YBU~yRײ36}_2ՠV'_>S_ :\?=O`RC"&e՚73 !Oj뱾-=ޤ䜜2I|9+W]t(;!ϼPYRLDhHh2 bZԧdӘqz "}wJKY B4[&R^)%e6۽ endstream endobj 48 0 obj << /Length1 1571 /Length2 8317 /Length3 0 /Length 9371 /Filter /FlateDecode >> stream xڍTZ6L ] 08 0 " Rҝҍ%!z{Z߷fsga㐱s)@<ܢ9 ]n77'77/#>c1```  xEyD"!D@O@c1ʹpD,,!g l 4pG3"-s> "rqyyyq9]`/0 r` 9pvj @0h >9(" \n  U+R@p77y:r m#*suq#A,?w'yl ؀P#`=a`o7B{<_Wyٹ@!>/?muqs8xEN`#:Ɵ<1A9zO+`//tՔR>{)9598NŞYF|L\;`hh}g\+FV qFBUq=^*^ Dj/ð-ռȗ{$nPCZ. x͢DSߢQڌ@*$I7h0qDzה%SȦ "d&\SůD몖SAR 1u zl89ֶ;5<84xOq^Q 1X/>EG|d{-64<)MߜkfӖBWʿa}*Oa-u*Km5fz*-3E}*TFLily|@ V^^=>Çf- aO[ZtfV*r>TސlFSrPh^idp z 'N_vP`n($.Pq.gmg43UhY`Rc0|[!#ѪY$h?Bmh!Ѧ7Bu"FoG|JVĤ &{#E+R]jd䃣_͏2LRG~BwZ4RF~LJzѩ}X|ǐUt>w|IEocW~R_y-\J:WVR*;ٲDx0f0|/^/qBաz'^L*3|/DK1o 68j^Nmh{N9 ژ5;wIM;/0rϽCc~+;a%3¨-Jc(ê'ε%^Bv @\"!rlfyi O)TOw%Kˆ][#•;\ {Ҭ*˖ <CZg7+I6#͓u[| 1n%3TO1 %WFTۆo,-)س u[czQKZ9wZy_>( 216$|{zU}u`w :&\7$x }eGqҹ~c%mHRyE9Ka0Lj!sǴd72VikPRfpَlvp.QV*YXt&d3'͒h)ߋ⋽0ktH\ֳ%bsIUI<0lɦHdU`SJ 3?\'"["X8fR*W:$/\QFPl%Sݔ=3X~My7(j '?b$B kD@!gфZH+:IdS|U8c}rZYPSM4 ~11,pr% jMBUU&`Iƪ{U^IXpd,f9پze0 &sP}eV;@b{IG t-Ib%F/gNN6-QǽC-GPU0wwv ?*G&S]?? j7>O޹J~ק3Uo@Dfd3:Ncd`.0T3VBC,KMELi=a()Woe tW;Q/pVVf//òH?4[P&!0!=;ٺlN?Qj~ɓ.踡.M|xA !1tv#QI0 Srr,=#*W9 EwT5Yc~ 4 r1痘PPbc<븫 : u\gvte`T9T˶=<rVxXT$U+k ZѰm LcgCI4qoHFX9cl %lcZG> UfgK2 j`ѐg 緞AΜDzMCsZrinou+<R^ćsľ[Z;ZYS)/t˾AđBPzK1R<ݦ*0C">{+&`Γý/D&0o?Dcch.d8%oIX>K?9MzcmSv6>jxG?v y’|D ^Xf[H+Fl0ƫ$imvh^w:Hq/ǥ4 =Zȝ=2|Z p*G)dvxQidnOԁ>lK̍ :40e7 "eZ{4@-ٰ-Oʡ>ԗPZ`][as߽D`SKx[E6aO[C3\1c 0}O; 7^UO$6Yj()CfkFsq/ekHpN{17uKu;8cB{=y)7(eɇso5{Ϯ7 ~>Q1>-NG]xXa0WNz6=!yJ C\j/s2;8OK"?76aI'kfo2zVQ|@^`[*iEU#;C%ideJwy\ n ;/2) /K]ާfhJK:9Zoh4GJ? Z7W1~x,Q~L=-ʻD1(fOF/ͷ)o/,'P)QR0ͻ^*{L tߎcN~VoHɆpKr [ fAmYu0"~*J`=(FTL .2iW9Q>mݗU<|yPϸ}Jqh=߾QQ1vsFRm& pˎi٠@:&|Vymq,|䫀u#V1!uJ*)ۋ?$oD ~KNpMԙ͒b{l(٣兝k *qcvZq@5H6)j$r4[/v~Z .Gt<P:}XV&?E@nTqTh}ɔssa a6oEܴY]ljb M9 hϤ$7̲<dRF{ ""+LVK;r0ЊѪkjԪR/WJAw [>47K_ahvTV #6*iKpZ|ϊI bURSw5c1IN2ecJ/^ n'MխX6H7jS)y!bhM3_v~u)j>JPSl.sM}5[l6f+*5G1sV81f'c'7iBw/}æq(Qww1i7)rݶ;x[dB="&Dv4 hp`uJ< n{FbتsmNT˪wՁYtOwӂ6~RUREH)4WXݲt}J^f+C94@‘"طFz~?cO99zW;A5f$8I S&gVPKC["Di#$aoT7cOauTjJىrk7h|6fNϭhxAY+H^Hk|P<?\A[#u8osI<dŖi:;lӨ]6czs~-۬ST(b=ܡi[Jέ ktPvei<)>6WzA41yeW3(mYcbMn DλEH,ei^h,DI={iXCɥdz;>R--J^e`ﮚM)= Y%yѼK'rn2@t '3eBr>/{G69X}?VBl;v\^p]p%9R=(ՒV2 L&&Fig@߶>uJiyF(/bCo= ]z?]#DĎKmFH07aA"uUdZyf{Gg}tǗNDPz`HcNr7a:-f$Ueg4eBb^ێDؚQB\!*F)ՕdJjB\OW+דT?0%:[T2])U}ɠ#Hfx1<IYo]eY)$zlwgl#kU9!q^?Tp9,K#vJ+{eb&ApȱBȥ/,*#..;E1O|GЄ?|93_mh"di㸧.]<Ċ7[\.KiDӚ^]'n˒j{ęxC]Df7`62߯N;DŢ^M+:aCS|{#k4gXNn jib|X8Zec66]mSM&ewkWI\;\huds {Eehs>ꀟ>mS 45Ly4秛Q>fܰN\8-#lݽ0Ή]OP{HMlP\ZrdDD(y {gfj[JIǬςSrL,78D# ʱld$$.2%TjeL9D~ hvz͝0O+lSIY4vnaFE MsҨ-WZ}/ZHF+}m\Zm^Z#vhAʽrX*[vZ_ ['TZCV9ѷBO8lTӳ<6kB?QYtrE{l ~U\tCn 9 ie m'L6ӚMR_"*s]Kܭnqm27:Rjҫ|/u\gAëT~톱I4j#%n_ zE_Fp<ӉB&}3X03i^4}82%/<\TF%E Wٷ룦G#> endstream endobj 50 0 obj << /Length1 1402 /Length2 6509 /Length3 0 /Length 7468 /Filter /FlateDecode >> stream xڍvT6%1t Jt300J R"H)H" Rҩ H)ߨyy}Yk{k}F蒩;A$ P\H )%YñH Z?pM,#`8 BP9%@e*`HwAB,G_G((/cn047|7$"W=q8_%08((C0XQ ` 4ñpwr0wa GmA`X8A; $ 3 Hj  /_077 A=hc$0/C? !}`߉À:f@w"}q ϯ vĠPp4+?-$FzXј 4D#~ B#zZYT<8,W~@x'Wp_oKM?"%Ñ8@6O #p@W wt#&ECă!Onc>!6=\440@!76ߦ6?jwG;Hd0sC?z_ DM1_$/Unބ?!8aiy6 kd0, PÃ318 P^8~ Q}~b12 -# ,YBH_Ãn ە^7_ըsI* Oa[N(2EEc3:>.kMo|Nהn|vf> f{3hSGRm-_u7K6}B:b棠׺u3b'V֞PULJrz<&T`'K)ƴL?vp8T0tΧ&J./H9o%=`z7r_V2p!4Ac;nd3^Kk߷ڨY~HTި%][?`OV05=>S=*[g'oG$(&8%I~o0:%{#~z]/^j{ЭJ첸Du~T1_m+l1K( rV4|μKG_aښ}rcyn]c9VØ"$otg*oG>SEmN3wS1:;3Ŗ3A.R\gG*+|2)uU%aret9R]4ıcn3ҷ: W)A])f~6NDfE~0sؕz!67R,U_ ʶiȌOA/Uji.'rl `q4$W;\N &k>cMyFzb%$A[nUueuݦ^_'ќjo&̃Q2Mk",DA̹/}!F m3kDuXyʜY*y61'9 uJPnDhq?ucT2dsxz圗5_/=;[2pj=s(ε'(mI73^?nQpջ1!gWF[1&FO $a jJ((-TԈs: >]n3(Xݻ"ɐ^ehK⠰+z]O\W3RiVGߘ0 OܬYușd\tn79* ҆>v|vh^Ǵ[ U޾˞D-57$h#AХtM#R@lN3zVNmY'$QPL5ǏoFqXtH>HKCsus(tL}@a}ɳ 4m=1#$<["jnK/Xz\X*6Vu>FihыR8MRYX!ϱith2x;3¹"|jO!':(zYA,ǎHAIBc@9WT˳Y{S_i5WX}z0ӎ>52B|nk;D>zLl24uR q7O9-H*jݕj÷[bwisy)'mq{U`ylͲ53M'w*b18|e/t-'r}gDSڮDkM,\*]9{y,GX=-T^ϑP͉Џh}6;> q(!*q1n?WRD34;kVMi\]R40O`-/ō?1_(6r8bx21PМ+Hkkd#oxN,Rچ&8ܙV姑K4-7c].]\hȢj8]vXt} a2܌rL0!X 'ņbyw87Wo??to^FoF pqQ ȥQoa宮f"[^y9 ^u)8=- QCϯkixJ7øT^ Б|6"~OP0sBCv¬xyX,`ugh[c[r^'` kjZ0)m/7Kp6wcPB@ jW?1Twn_l1f.?db:e+1w! -OE3c[)9^Dh[C>CJ:fe`dx`zXiEӛF%18rCM,4אc=7ONqf^͋"|GL7]m_hN+?`,=ۤ^@?Ϊb7bs _ԝxEG+RmwCw-6۸!tޫǁ~u(eY?X7+Vk:{u=SK>\37/*ؽ/uCk#?g9}mns㚷/3E-Z+H𲿓:mY]Ave{O(+u u4T{LpK,KI˷[;vXޠ dxS5)8Lw1YNV68bnxUW2"tj@vn50ӿ`UcIwkSHKd >u\Ƽ±qU!I _iC{IwU5\YmwrK%fE|`:.Zw)Y쿧ՊV(F^ 8 &R|re@RD{eXM 8ͽѣ!tmyvUJЩ%nqZСc3`ԍXrUgeU_U"S6; ʅdjčf₶9I)E}"~x)-M/s *_ Mcx.;10z*F<%C0l,St` r 5WL+bRIuV𴰣U{fw6/ Ӛo׬kXp%. @=ayM㊏)a F9$E [RH e p^Aw;K]UHpDTvMWEIW Q ^2O=\"PLOts :O5#Wk!q=xi*Y`-j%p-wFuJ= o^09ZҥI2J)kv.GWk_ۮZmTGd4^.xl1Y4Z,ZrK/d$&|ag";Arl{ro亼s|3-mMqE $䭹^ N˺qt%pEWg[$ o7Ssh"}C tRb=Pp(Ӕ .Rץ J[Rskr؝>_\~x6A!X*)jvʁv-o:Y(0c-'ٖc.nEsJǖ+-$03l0u}͆L鵙b Xvgz0I2 -Iݨig5`uZ@@UeW ( '͈Bx5q]ŝ> K8mLbc`wOpNGn~-?Hrj̪~Co̠kdTۥ& Tir Cq/ Ddd-(, -u4KaT8VÊ=` ]w")pҭWv؛(0ߠ,fĝ05z*KLdHau:hCCᵢhVULGh볔es.] G`O $LSx y{}cs-+-/zFWc6YYwj:@"&W'.?3~WMOɭ)k7?R P+,~5dJ˱4;\r +a0WJt#^lf(P/bBdK5Z*NN=+nu91?(*V(畧5ZMm/(V ק0V\,6!q.ҰU#C뭷c˼Nצͻ̢+c9VeknưZ2tuOM},qG Fsq*@pi&]KqMѧ;qmNԍ؞ ^x0+{H;\}$xs)GP SO)ވ^NjtA(`Q, endstream endobj 52 0 obj << /Length1 1473 /Length2 6709 /Length3 0 /Length 7708 /Filter /FlateDecode >> stream xڍxT6E^Hwf!:"7Aޑ" H*E" ~k}Zɻyf̞gv΢oįh!(~!@YBE@avvc( '`7 ݡ0 PhxĤĥ@0(7<NpABP}~pB|$ t@('+zG00B?Bp8PnR^^^ WwQE9 !'d.4v/BBhCh= @0A"@H@_x vW7 w8@aA0w @vhA5E]H] U0cV+#\]!p;TH}>Gx^9@ʰp4C{@4Up1G @ `'_A~ntAPHH"C( 'wt4 qk? 'z0{o j)_F%%7_X/) E?|5_=hπpKV.o[E`Y]*gsE W(\z tY7 @mDӠwD+__8] ׇN/׼p>A{eC}A?UMXT B"A>^W?!TC (G.tWcA;$ APl`?_m: HcteaDAW(7H$z ]7  ҡίB/k7GpWV;,"EQ/'+=Nן+ 9zP[W:vdsOZ';J4`$ydməl6s&-U}P|NʒFU|f¶"04|Pjn9./]@F*Kp-eb΃Je EXėO%x4:*{ɣ!:#۽|`mM9)ʉ6M|(F׃MSg QRza$D8جD!aTYJb0&akT9;&.=>/wCCFɠ󎬽ךLyTPuZ.[@ü\lNu s"$d[-N1V/T!,*-xҺ;plǂ6Zyr>@O6%\o+YL,)0 %/}b=YQb}CXTJd2ތtpnyk4^c K *E[)L,AgMg,/ol7}/K9&)^C04P]"xc \ɡ`&@Ug9JaA/(XM⻧'As=w>'{[fUuZp#-7XO/0W=־^nSRH#joC]_23fdOa}HYπ1 &4tfR˵R\5#R}etF:0\<ˑU6]7H?@KB'X4ļz}![Ԕtf/ \QOU',J2}I~z1nCx&Q:;p>]؁SgyvzZ$\BV}=Y 3&Eߒ>B2g<,Xp/^mOY!ڂmf^slXIR7^pLX[b1} ":\<_ 0b͗N0"P=S%X i__76qQFn-;9?7! J| u~\o4WN[q|82[HYi1:*˲>ۖ#<8CÒ3HEzvۖL0`]~@тh+]T0msI҅Ї,Q#MNepvL{ 3.ulj]m竮,Y*bٮK.2fEg8{sE=]-M1_"c ]j^hK96!(1+5>j-6rg|{;l7V}V}#~z<]Szγ2Q`!R9%69WEHXYś9m=x+\ c6s@L}6Qkb~}ZVʪ| wx$16>Jߛ:gCͅa]k@v2x%tѤGtpʌ[tB/căbxTEG|)DĥY+˱R2ъ1_{HHD"Oq)-GȆ8X`&:h^iԓw?/](`Q"kv}G me tno☆ܓ0E}C&G|f(0?(>+pxXQORW32?z*33a yeμ[|)=u/2^!c=Inn5j<_3hwL eץԋcj#)ں`Y,Էy;pp{ %Ze;zt94]s^ʙsM|RQd4Uؾ|.z:G2G׃[T'Pm(ꍄ "mvQԴֹ$ l2*"mH?Qc8y V Yx=/2W~4AwP{|9o iLN}wL I7Nź G8rĘ}#oOEϫ<ս a'b{Lmg%:/spĥG}xzMri]>rjPQ3yL26J-':Tι JcCsU i2Ywn03VK)No5`0N~ܩ6!mcZ, GngVtW.nɺ%TU^/zEd]>鲯8\ v^H~28 Ey+xt"I7NբQjZgW']BXLjr[gZS@Z֡ ٽ/;!ވ֫,ョ>E  Vzs(]oU=Sﳵ9ԛg,zt\3%}_$uI|cN"7}(Wss˙U 2Vrm=jgތ&Lo..ҕX e\mCN ?8zۅH0Y>pIAfgҊt..."!W1LLsYh|*x~EpWBRfmˎS +O8(Z<3oї;TےF%荂]->U]u`p:d,!1)y5QBa}X4B0=ݗ y=$xݱ.~}_Iks;_Hsf(r,.A2=BvD"Tq'nH]DωP(榰CZ@keoә*gksyxq?kIÄAK)h<8sQqʕ40*Gkܽ4reԴ7"pFJ< p[p27{x7k ڋ!ҍE/ XTۥFWx*0EkY$j|fs:~.i7VCYluiὠz߾=;_▔׼R)Fu%Uܕbq[w ef* ۟:Ԛq8n&ˍ7I?&#~ɼPcly> `F9ǮTD<< <R2gM.iǻV/zVSd]2il.G/kbn'{1BjvlHE<+oe{N04 $$4n^/Q;Ͼe34͆ 2-no/L/AL8rC*fGs+)hHҎe|`,8 eR?vxlZat`~f8d(Kf:{:^|K̕0aiw=|H>3/%ĵlrXtK]ϴ,(7dk\nǛ"(^vƠmA7Á74$KZ'tu-%_3>mE;;5s;$yb.?]{.@kKu~AǷ1$աFsS=~*3h}Je`"DD}=SgpJy ̆wǻ|!TљD w]m(0uQwN?݈[N%NpA D3L*.y9vemco8&ynjY?$<Ƞn]O> stream xڍtTk.(1( ! CtKJ C0Hw%R )tw H+!9kz}^6m=>YkT G$zb!~A"}LaEp QhLBi"57GHI@J`M~u%G8{"av(t_\nNP$ 4(;"C@`PRpIڡP@;?ɕpPW(k`cdD};\ar#4@75 @j?tEJC 'g0-% ~> vtE0Gw`\!H3ʕkD4[V[#p+ѯ`H(}?u#l`pk_CX9a.nPU\?-x **,;F/=3` ]Ϡ >@kDdGP?g0{ ޞe;z{@9]EYcm?&'xD|D@ !&.wm06U t;~7߹#Ь!SwῲH )9:6sf/4iPhh"2!h507h!md aJ06 C?_RsWدo :J@lh}AW4/h"3AQ{ $("i d@C}6$ѯ `W0W~#0 Q4 D7]M}-~( !@@W42}[\n7AqNOW"gi]Jן=U6:lì53p!Y%ع*w{~j eF0D'0߶41pgX& ;'@w2dFTlvV12،,iꦯd +C!s4.o~'3Ez{hi%=[vb7=uBZ+w;Na N &&z'@},,3u[mat@G'+[ H$-0G V,KhZo:T8l(`l̞}@׿%`rrEFkZsl){QYJyhLu3ytw'ӕw60'</v 3pa(n.kZ\hEB(fMjGțpsk[C}Hb̮́s#GJ 52@Ob{rVM1X _(bVQuW?V-ٝwC\;zΏc]r&,]qxQKj UzN]I2-m' Y ?bU.eL#o兔@1?’|]] ]އ}wD}'BPB~ؽWtbihڰgBmug#VA"YԡH5ZjxYS!vagy|\`hxlE$ B19nc (wyxP̆DU@vsM\#X#I諹s;3ɐgaGwί!8 dL?L ]4Rx,.6c%* !/*M} ~:MxyD1SM_Gר!Q.G}d/pb l| !JT#s'C0ӟ$D %9peX$~Y YY(`6" E^jpnj&/% ֻ|b:(gN;=s,I%Vi svo=_:mClr>0q! LQII`HGZ1kUD%-NՎT %q/A]gKܨD; ~^]aCn9ƒJW>0-lE{ 4 2+jD>(!F/o\t=jl3KAìThրR|:)kWǪL}ƂAkNN4UyolLoB_&)ۑ{97pQ?onu4M=U'ŒD-NlPϝFMhzwdyӻ!аm.㞔̛f}iQ'H/[ ˣ$[C}y=3kSTaa?y`jخһQ,Y[VƁfc4]k.`Y=0|\){//q\ogqH]O0-U`#OP9!┃3>%2TD> 6y3*ASByt2nV̓Lco?o J< П,uy`pazar Mv_'bsA]Z0O ^ KzCOPߚ1$7bˏ  M:;&b{FC#ˆ 7 81JOBDHˁ< GS7K.+qXnfT( ?Zg}Hs{1*? lrmR%,֦g v.JdN6Bo jx~3;nF*F0` YKWȃѢ, n9Q qn r gH+hY? ő~#|-E h͎%eAkšH q9(KFpms7g,94IFw9"V:3rg(ێS>V% 3A%ڜF=:[CI)6:qW7:$/GT kp&槉 ر@]_q1YOwLƓUyƻhH~`\^Ikz#Oc/l]h{ f -;:#8KRyz$ngD8|wЇ}BGKMF./jTY̺8By)iij'aۥIʍZp=eoҔDp%eNw&U=vZ3\ zmLԽ,z))MO| g"b&c Pp}={ ɾ{tt6:S$0BbA8.-CWē:fGEuK¡;])!@uMPO$;T&ԡ! aMHtu R$m۞8-C{ͬ.m[Qg69mSUw_I2y_vZ.Fs`U?] m*I. G;멀vxF \t(ݤvzB#x&s"&KA'bKxԘޠJDg#vۇLo:f\%mwOg)Qa"&԰eZz,r'x˲Vc:⦝Q75b$5Q;ޟEb;f#( l%yxY@8|!F{ŻhLD}'iռ۾8U6g׶WXx]§f2{j&`lWFWdZ"-7ar;]S\=6a[yxv*V>\ lJn[T%=x d<+4qsYRfN͜g}|RyՒ z0TC{4#+^Ju>]YGln͑5{}pB_}bMmg$:J_SBCʍ@SRE-y֮5wbG13VuL-Yb~字x^ g LFT2yc܈|s#{`[^Hvo{eEsCb\񚟧i *xέ]*L͇I#&#0Ӟ +`o@F&ޞ}UM1\ZqaFjop33{wA7Er63* Q-alP<k}$\8)yū.3SVpLC*v{) ~2p,xsH$~sq yNuhkXJ(rMvfIGy+_kQ6y!EpW᫴фA,^tU8\2+ӫ(}~[?]\"8${ho=^Rmc;~$=AzG*a<繫q_ $~.6`!=Hڏ Ov?z̕u(9Аq.|}ʃ$-l<"6 >M7S>4Twi _Vvq>MDdM;?l+m=ok<ȹnty@OVg)lPhUM5R5Wm"isuOH3ڡR8/b%Ѧ֧s(w2D0e'fK'e)m:^ڬz x\3Ub­/335趔'wF'%4ŀ&5wԻ 5>isr({W>]h[v8k(67-4\O0QQg:YӜdieVi%.F#R#DfyL3 f臜2~5%\ׇF,/WRi'}DcX[}A c[k6L1"uLt#]n?dF.IYl΁|BJІzԽ?Uu\7Uk£@g 'V>11VG cs\L %լƤ뢤(ˎpn5Sef|*=ȪSo:%l3=FQtu&: Ny/XG8(ii}&xCnV_^vfYIj}q|ٶ7>,/了*1!4 {V\dOS_MQmc5ul9eD].1Zd[ՄL$9,r%in]1Pe :Lf%=“(ԏ6xUUiۯ7yY27+ȟ[Pў|; AUo{amw/?>!~mYʉ;pj;6ল잍JE4- =R]З]? &Қ8]6xrC :"6GqDI'# =fo<Z9%]\%)RF'ӢܧXb*AwLЗZH U$0JQzZU^|Jfj8\vDr;Y!|Ϊ0z vd6#!ٳ|%_:Vv5cPS]Ka)v<"h>l/985@@!Mw<[C弶1^" F,]= F3:U- DTph鐗3xm2yN 5'kpH&t?Ƹ@dH.{7z|l\:"ސw2NPŵu}={(B{(5O>&K<,^ -j_L,^"^@aUGW%T''^?yz1vl"ܙr:l}ܴϭLp{VQнIKWX7n{uVKU3l\7¥azK1 :*!##Eb[}]n|+tC!}Mt~K=@ԑߓH&%iGC"eE$,C_ܻݵv*7rIץX=kkwxZ\ԼTlrh>89--u00D:+y^٩k-*߄,mӨ98J) ZmhtLJ}6^i|XOv[?SԺ4UvK͝CQ:g]v&k'4Q}=ڨ2Knqd7{~2oUCbX7 ?0Nlz Qjc,9p61Tőܛ\\Ԛ?{қKGon]\=9vGYf/P#j"GR xHEˢ1۾*i?*y7O=LEU`Kڹġ&=37퓹Te.~ރ.ҳc{w7U36Zwb$$:(R'1~v5}Z',BƲrv̅tWpFmIbINcGEύC;3-%gƥM˔* A`_>i{!:.Zn V47:gN= * C4KZG$&wkBxyYz59^L ]WN W n i2a FlMT7l֩vm%o>!Z(]i F[lB'w័_fDT0v2wR jB{}Xbb;CB5ڦpm¸n>L27`SO󢣮ZcK%}JIi endstream endobj 56 0 obj << /Length1 727 /Length2 16764 /Length3 0 /Length 17351 /Filter /FlateDecode >> stream xlcpn]-;'ضmvNl۶m۶mΉ}V}Lsw6))#-#@YLH@ CJ*hjlig+blP75(L 0a;{GKs g1忍5kCKKGUɅх$eSS) ,))'Sښ:Z\-2ƦN3;G09?l*br*Qaza @Ft[g'M $I:GadX;L-maś?f>?RLLv31Pػ8:dLLmBv&QwgS[SFXZ{Ig5A,,MM,mW7)g]Ml=Ow9zqy9)Mݢv&e5t4nCwW5tvth3kHWQBBv^LLZfF6#;3;khjofcΘ;*5Whz~@zxmVrD^; o.wjO0dj:0\wܷv]!\L X6sF4KVEC/8cAy8nң8.9r7y#׃ }[R,}Š0k+a!> böEלM~.*b1Y%BxB0<\)lsϕ'DR~zщ95 W_ %lAGA %DaC YEbSw@[}q*ս.*zǎ#{Ml_P  HpXr9YfE9 mb pmuQL =__zp9@L-mQI1,ݛIeU*~Jx9# 0۩wR>hFŏla]bjڎ.X=#,;1*8RwԠԈUleOk%x$ю@Ҿ7>qa,n'SSv7VhYSw5j;Ǐ _Ir'R1 ٰ0c~nǚ.ACt'Mnn>9a^%MPr\Fp dO9xf:*?n;W,i҉L] 2@/MrU-"%GOcBU*٫ڹHr4)(n]f;U {+xK5E'7^i+`2lnN]}iPK  Tڲ'lSt3DTh*ЦgHE1#2;ߖo ) 5Zzuj^ɟv0Gu{Я ]!~nuњ룯!Hz@z0යnj{]d[ u (-rLgх'1凿Żbz`$*z:oMyXjW+aw4-Fn1\|',:j#"?C0Kn.r>+ 6fd䛛p͗FuaQB;1:ҍy% ;R/zwlx]M&bY{l(츢vyg1FN1t =T0 1L ;Ѕ>ɇ֥M(324&ţS YTmGJ^+ij!Q1j.Ս_] ;^6 xwYh ʜ[mE*=9ëIsJ;URy ڷy``V򔗤4%{[mu>LNUpκ gD(695b_W<^]`5vjpi w{NV(ƞZUf_"\#v&1hޣyQ6D~ G7E'QW"`|=E\1l`\pv,c{KըTrR8΅PD#?nH0Wj6px&6Q}e =xqNmIz|*ޯ2ߜM+tv wBb<_],ab|B-wg7%9dMu_`qSOYIC9(.GtBYS8.(%KH %7 Q^f'"wX8mnZMXD%e%c43JOăs4e~"^?v^4c$E 29"r١*AY0VSؙ)c3{f臄'`WXȣ+A|Z{BTXvGLyw rQ\ cY+or>CE.fɤSIYS#cX7~ђI's\7z=-5<@ϫ@z$Wkͦ'!G)*Jr#;I9#;#+|22R'T( TsdȠz Rv-=D^1b2!BiǓI+âHwν3o H#,AlPo$)G|1wW.t#1+ԥAYb/A&8}Ns_z☕)+{^Hc<]%#?l<㓻H ?;ңVbL-V'a|Tpfo}hM-=5{uI:;(Ne[O@/`W&g@ hH&',\*Iצ9g`&{g*%D#llg_.upk1A'3BS*ȾsQP]_NoZQ`K2OHni!‡{hM$[JۃOӾ7ٳ:5(uwiGcP@޲=N(T^I'&[8_? c*<1XX4ii ,UZwg }<\d֌.{+ 2nP u:h{.W*+:o6u%pE,m[r\|??-,f>ҕW]iqa# s!=Obo+es`#BA!|cPYҷvnxbWx~i~tS~X2gO{i^ܘ3pd #zxVoHX0*7 LSKxze;m 0O7m4!hM>מ Y0s (RzsZǑq \.uZɄ O,vh\Bi~m0. o6ٱ[Vyצt(嬪⨞o3g2 rLbfZhPAhsisVIӶ*O}6\*v¦ ~Rpˈq !uƿ3>n2M5'W3l4(H0 a r+hgGԗTJ z6/0c9./r@!yo14&۔GfpGQ}g]CVؙwǴ HЄGV s o.96hR_Ӳ5-B~]ʨAĕk(hH1?q9߽V1;eKw)K 8܉[Zlz}s7)P0w݃r?3lMߨE4$g"1ԲcaA'}FʬޱdW3J;B\ ESx+aN֘cnWxRFc A/m:y+%b<(wцʭŢ }204s? -Z7'sS,bo O$.A1[p힧܃:Q 6#\>#tʚJSII6(A:IYd(SݝH\e*}s-زdk6M|y/˧⃢gmw\oI,v>]h m4s0:ۉ$E"5&D*ٞBaA _94FV"f (EC}Γ`GW!p cQt#t9%&T0"ư/vR% #9ˍ/ATNJ3b $߈̚* kJ8 nC#!HsݫyDeDzQE(/B388GS)ᬷ$ڜ/ y;@0) a鴲fyZhV#C aWqc (vۍ_dadiܛ.N:-#Q^*mXI7];~u~;#l؅kj-cꗿ2+Kd>Rm:~|$Wq/- \>[xN/|_M(?*fG{Qb,r'SwM`i;uZPs UX ӟ`ju=cNf/˵}@hi\+l&snJ'&t#ccх22**H+E{ [V С 7bk)$A-[:PH%p潐 %pjⲝϥF(SۡK&N@6֥vVZEpn#B>f %!$lĈ^«^x) D7*oH &.T;wi@Ԇ=+^Z+ǫLjbtvCqrd/[ v>XO얔csPZG|ߧM'TM2*XO4成mt`)tA.HN=^T}C%$2c/R _#-?ERbgpP4s\3ouA0S4J[%tSG~)"7 LPAёa.^zكy-e p@7-ˆF5C-%7[|~1$c~U+88|xcz~.M&ln2ྈ9c[=x Uνo+0L^MC/#Mtc5V)]$$Y"RQw*Es)ڌ/jqz?fJ٭MwAvhk[ K)VҪ"׈+\P6Pg %Rfy^rį~t"kGR++LEʅ>PjV=Nˮ`U25I}XFSRpi/zpKNf i"]/0׈$L|R1&gLp@@I;SBw!6:Êh<`:eZU `2:$'mŗ{Ъ ڨaHr=sjQ~HYb3G8)xPKqt=N^ehh<1/AGMyB i]eEi@R #詈 X`_(-ʖ4"ST[g[o^=tDTk{']R,^c]VQwо\g^du{ ^N|#,ο!sb4"Y6sHܷh4A!ƻZާyXhw:~y}Egnt\jhwxI¡Ϟ`v= +7f 0. ߛbs,;K+@nV\P?E(ev ;R;暨qrHR~:h >_]Ѫ1*?wI7KT.Wz͙= 5ݞ qZkh*v NC཯JOqZӖ\4pu_ 82hh9 # 3ߥ+i^w W'[մ ;XLm >cSO(Qg؅jP Ԁ]\b {ԅv=AO$[ysSaCep4Yɣjhp@Ww*SܓJL=|JAo43ևįt$x׍ϰê~i4j>fT<$)h3LG}`ea)ѲDY9tUy Y@ /q %4J#g꜇&T =-GQ3yvZ ̨zc.Jv9kWPd\ȥK>z8M4yo>Xb JTPqxݨLXk4) F0NbPxt8GcR|շ©Vbl&LGEm*ϛOοak6}xeDߌ'؄փT]e&/NsӽAD1p#cA|H݇l-]LHuņJfl#4q`}ZMSf$M$ꄩ\h ::.hKvXe{gz F]~v n|\*r h=si`%5 Vԩ֤09“Aϟ8 5M˸^!1 ="VqOpf.4M*I%/6 bJ;Uܬ19 Va*9&O=VJo/W:b?Y`xQ|SǣGVOOeemV }!ry|rbjhio(ǹh;ϠR]8ho uw) bvXV;EAdžxZ$~Һig3j '@>B~%zduFYLjt0s  Bgarڮ9`0OKZ>^K 9ͭ VBHJX\Q#(pFpߐFZ%럨]6ăq7>E;MCD5:MBJ|Y$?}{Iaxu#Ƨsm8p31()-jbH[i  wlĕFPuHsnke+K Nh6't>gk LUoJ%O+c:kh4Tfe<,yu=_R*)]|l@մњbͮ1[>?E %(EN{Xk =81&_"aPerDP_)* EJ'lB])k9]g}cƦFҤt@b=-i퉧`c]&9o]͗. eWSj/!+|3@6T vOn,`7fDBJzDAn4oڰ`(@L1_0T8*If=k頻NU^R 3p"uk&eڵ'R/z l? $c4CCMOם806i@3"$9]@ϣߠʜbNTu#*ѢԢM.>^.9k'b]i dxwNzv4MMÛzQu%WGm;f bқ2@i37ܞxW3n VBW×}dIjN# KІ4U=Ph+LW4鮒\@ i-w1۟_iY(³99w)Wh.uYR4 O4PG$!_WrPU'+*D&kbk\m7u h 3:?= cQ\%b}֑len-pz?3Ԋrij/goo^>VKgDn.Nl!Rt8uvSJih+EUYf* xMU2$X#LrR `x%8!MJ\0~>jԯM6{@:B1GDntSmX^+LJND33y-Ğ$ƃ#%<> ņ57[7V.ѹ+drEפcϗpp;WHrn? :e6lVqiI+Ʊ;\ee^`: Hl!f7`dJB IDz!":Oȡ}\4i$}u xAmXSh>AT㽔F O2VA뭪QED*UԀUZ>I.݉-_o%4.u9kpYUXt-HK|'ϦJ979Bփ#·8ؑ L<8P̿X4F O}ɔ-/Q~kG c.pO(]%[g? y. w噈!_ ]TMeouK=K7_)?ʲqӦ*:w$wz0u $R}4f:me!ie61g`ő&O>Kf(p-sCYmdr30q X ю!QrXw`ꍷ_ܺ2 #еRPr 'uAo힧1R>%" *-zWf?47Zrr)|r+ &Vav N]39m$$|-,ByB`grrJfQY]gmO7$kFQ0}J8]ÿo7'xS$0Կ3<72ey^hZi|g.0-Nb$—ǂn/*ICƥNFlxV)+ 'w!+NPO>;lj/(<,c|^{.4<}A6ĚxWBisUrM4grL6`. U㘳OTK-g|z 08_vrA>,EQN>,&B/F˭85QU:Y8=߯FZ }z?$Sz][~,wGr9Lo.w)737 +!m $|YťW%OTrUI)C^ɥ:7,ޜ7D\ 3`-Tp {šn?|%E\Eܞ"ÔR *Z61|^wx(vdeBhu k[QWPA]D>pr] a/#NBRC2Ɛ-]xGr QXG5q=8C]=NهM;~'8>ap86J^jXKrՙ/q dh"&ʦmeQv ʽpŹX99KB(`YGL62ޜK۳Aڞ@*!>Aܷ\yf%j |X -lӓh\d=\RhYް$Na~ti:L5mTCtނ@:9=R<\CJ B-Qc%g ޫl@q<*k1!TĶ(?F ̄7yOB =IfUF͂~[t."feZڙwHKnKS?.G3*6iK&'g%" pVJT2gHu68"͠ :#(W ҏ^bx^| 7jŽ-2~zb]P:\q)E9'2U=Ĉ$Ov"kيz}iX8on<ʲry^=T,(أ$E; JQ<+!iۺ,kuOV@0F#^<vM0W-0spdY<#9Nw=,$B'6)l#J6CPΑm(f2 tek]<ۺM\N0 }} :Å^/iPkrPgZb4B6L[vTЄ,nN8E0Q0^9ho=P _#}ʳP\RFdeX~Tj dk3x)Hd Qosfĥ䴌NY.?͐V]oZڮ'c<^nQgTs:yeX,Uƺ y;F#thjan-iku ((m}J'9,ڦ $C%KMr{rk۱1^q\-!v*"-j7'൶3Hi\˖T;x483&6K3'﹕3;66QFseo_[h^V4g)eY|6T Pv82)ZK )=:$8ղzl).-'"Udο#!n8ՅU2 +I;}M/h>O{N}jlNsiܚ ޶,g}l;NİxY{6AØk< [j $>/6R~li\2P8N[$ P*VqXy :h|#DAK҂ICN3%TX3 ,t%H#zKq-wKZ0;wWT@yT#b 4]̑MJp-A>$޶P,bNv_hby+蝖!;AGs1hJd> Y6 >iH65n?e+%u~B=,uϹu,šaq //5eXT)j^}Wvss Ps,.-^Gq C)ht<ȍ?!ΔaSU5b$u-ϯk9 ד!n)e%'(5/xS>Wkuy iI2r=,;wQf,Pօ0g4~j]ܬCԐe|<FV\YHd D#8#6aO)GsYP^fX:QN!Adpjɑ#pftTD1d@#T/ _ MKa};x&MTMEAg7~4렡! H: QhVzJ1wk,8ɘ#Hyb\(䔦̾%AlUOZ˔^%Ƀ^"%f=7wZ=nv z ;oP&yD!&]٪cU n|6SoLÔT oV0(4хCćIOvBVAI N_QWH2+ vCظNuh4sop/Lvoؼ 2Z>~1;vAgv/fgSZb,_ښuq/ջ"pfUSeF5IOס0FN;#΅eD4兤0ڵ\3TQCc{)|t +THYh3NJGK*۾DɌZNHX|vb׺>yN<& 9ip-n ܨ^w-R Ŷ;QŃI!xaR=Bsl-9*t?сkjq$],Vx=ƿTL_!5ˌr!H쉥.7, q;_@j2!q{ȋ'rV,\m<Г \hu2UuibQ!`:~ljKpfup_&PzNrr t<.OU*$QOǫ*,4/( Zz;D6ND*ɿbjvpcm@ä2\Lcӫ'^ɢpӐ_r\S1Oui*1;n휓 s[YIz⃛I2t®tBX NqbL[Re(Ee 6?)MIT'WqUoR[nE92B8.ʱDa[P NU7(k yR3*6n0Rif5XFc`Q)ʦP_fȁ2_#ų,3Bz7ntaW7!|X^M{͕#KRHp2چzmmcU6m ͹X(+XԗsH>inbgIEȺ<rdr} ~EА<,qBU7@[e5jh͕q ?@X>C2y5n3̨}[,Pڣp,^6Up+Iܥ&%"[f}_pgQ+_JF@{uTmսv5!H|~BӸ:=%S{&3.eIJ@џk'ajt7E_;\}'"aUF5jo _faCz(}JoT\FSld^FkhRj2,<>1p$:2 - w\O_|.FۈUeFH氡96̰ }XoG~|X))Ec~{qVxrM!o}_4Qd]/wxuEb֎qNIR!  ˆt1#j~[Ǣp$5a*qo:],Ur<K$ 뵇\nN-SIDtcm4.0y͔mI T OFqiwS r^ XSGu*XyȈxK0|Xi]zgT pJjF/ʷ^?Wc=#C-~A*r21᭻ .dSwg j& ≫ ΙgD\;qǠMW~i)!{;P!$ʉ5H!:Pp~۩'N(=b>uu7)޽Y-& 7Mr|.h۝.g wĜ}q ֈmBdc{A~{ #rH7zvȌ`!83i^ܝӧ+|:4+z*_u qXjNMQqsB&2@GC{gl. w> /;WzQ#17"#wOȟ>P eF{L[Y87czU(S|D2u}(`uc}0YP!_+ endstream endobj 58 0 obj << /Length1 727 /Length2 12871 /Length3 0 /Length 13432 /Filter /FlateDecode >> stream xmwspm0o8m'Nض5m۶m۶ɝ;9[W{W=6֎Jn@ZzN#== Thfc-@[#/ dcfofb 7'P722X8hxi)GS S%# Q9'K3C!H0XX?XEDee"BtJB}k#rkGοh뿦8ײe_Y{[ #3CG_6;ld_BjH0E;YZ[B6VN@{ hciquZַ2tQ&wAh$gWrc}˿RW|[4;?$4UըE m̬Mշ7oٿw?TSK;ڛ4i$ci_ ## `d_t ֎w 4]]1 4On .ɟ)SZb]D105=ľSqǛ3ٹuH ? ^~)$.3|} չee(cڪszY]1C^I[/VO4?=JӠ+UkR,]ӼR?ۃ6u@*+a0&֌"rЯmՍl(2¤ٕߗ-X9)ZؔEs:$*Y'ZR.{K[#! m@ "D6Q=d\,_V(ё#PǷvef~<9lNbGKհwpRHx"ӕ) lic*`vD@.l;@eSxfc2N)@!S^.78t`)] LlG|OV㺔$.GY22e@g@8?7\NUu6~ 8z.ʬ'i٪nm .k(ό%bZFgCUaTno9[c?tX!vSo*v}YǹN]ܽv~FNRn2&;1cJlejFƉ~Pr| DNX(CI%%=c]xUJe hَiTo,.{W$&e 7UYP{!}͗zRPyR4BVb$RaQo799374>S+?A{'? f) 4U5`7@?hߕ C*&c|}F2)O25@7*`4hoCE|R(+b<ඓ?C5k^Mn1aϔ>jj=g$|^=dk~Rf.iëȾ_؇t=v[BBCBgMW0 $ՠTN$sUXIX/TɯJ*WnKl*ꎏ%Cft ~*PKfWWKBӚu9קLeMP`3-HRYA!lvm2](:61BάUdcA#جgD 3@Kt4-Xm;k,'k< ud  zOwIurHܿ}x^lh O?X`agK jW$Svl;.q_U9+W?qO+Q=ƵP@[Fe0yM J4}_hhiwYCfMDXy ֟zd{Jwt=^C2nGW^Q>X^`2ZH7w"ZZh!K7n>8 2:uxbwn?P:šFʱ6]b s)_fZdAy|d}8Z3ORM09> ?{CJ4Pv_n]Aڋ\P<#Eqv^ctVsa2XlD>rWgp# %U*[a8~۶'^LZ\vOQ M,C#7o5 qGR /!+s-W#su I;:8vsǵqfشrUQmt%632  .,GZﷱ 86a Na=&Hu_fomqza&?,EaܓI/l!trmB/鹾3K"TO';A&T*PxD'mƆ} ?# $zb#0P1Uim5z@xx .y47dE'TH&J֪gM6ap;V߃,SyBLڹԸ}Rc_(D#U{⢪ O5y،q&|{ D1})Nvu0 iSv4ٌmS:Y͡,#p9-}}K Qmnifc!{)nfc+]9G2R"D]ޫQdP8j,CST~MȞ\-(mhF6A& =sxrI6bӷ J)^'?aWz]@G7dL~,ĐD 9{7/ ޝ0;+޻~52{y?{+i31$,9wv̈́|4?r|!ƚF'䍊 Ot %{nȿ40YZ?U#ih2\M+#'=25L[4VۋR6pьB 㹖@l(nJjvZ>뭨 7 b7]&+kņ_ V!ys=G.x׷ְُQ+ lҦ8V4V$댱!Pِwd"_0W[^4 Mn|)F𭻲D4Yuœ"1 IUN#/ְIq:>oʌlexPL%9%{|qYҾp$^En*#l~aLswi~KVr{K#!}RR Q/6DXKB6ٺK"\|Yi,&%eVa]jc2NvV.z&"o |H&oFĮVkt:3~ˊ q d@@3V%HOTW.Qu\ٸ 0(w7~%+s +n8 CCs7:5hwpoiՙ2BG 3W|a-;J!{r%x{9LΝԹi*chټ\/ XIMr{>n?a=(I=Bяju~&jܽry/X,(F5l _G36l=\yǾh./Xw̛v_=![|ueM nQC5@ce!qzKq۪)Nnk#qu-Ju)BqT;IcˮrN< ɲ.U wЌ/GP1%SfZQ=ǵN}A_C))]h䜬],ٰ}^E9y|S=xҼ|6qU0uLEDCҲjcU7Jh='r N?+順K/(fhLQ68.dc{nj¸&c:\,K DNp<>}[Gӏ-"aмrw-]PMܒgYAd-w[ ()NrRbwn}"|ݼ^ږ 纽G׉[ɠE 96{vIO(J:wgUiT79,MP8b}l 3F7J(aҿ|`&#MLq4C]<1=?W 'c = Nε8u[y+h j3;3@c_ldvɝ=, h8:K@@W燭yk J7&u"4]ƭ-9dZS+c׋)_X}?HAqبi{S!(euJ1>0 7b7Xfoȼ%yܶmr:Apo1:usWv]WPDxGfx)z6q,XXW޲ǺʛҒ%iװ GE!8|dzQ-r&(q'PimB ($:_K48c@ /|(c.|ds `fP)aUH*JTʣ޶"=r}ǹ}_Ul܋)mu3%xv/Ƽ:yΦVHo 036RaOº+Ww%n4vi ~MmDn;>`2>sj"kƹW8 u j&?Q̹bbV6o A#hX<3l4c!|ipO7'GJEVш3h|ݐV2 goH7gW=5Áio.7}qd?#=q*▨Պ"Xx/jwdt|B,_kPTGke6 3 FF '#|,<moϪLܚ@PsneU-ϘNY)`0N@HG6=n9k[+GM%4fqp-SH-Y=m#< 0.d{:cr.Kx]lJXoͣ9xJ[aU1ixa~z?MB\I 6t?ֱG*ܑcEM{˼ A0o,  1GnsR05z[*гziI.oG!ܕ~\&M,QrhVPA1g4P-y \BĕA^?|k'(ǡ p̹ߎ?mL9+0/vXNM v_+g!7CmJ%G6vjz)O8An ,I.G. ZPUyBje]~M\iA|=`r-kRA"khȣQjVf (x+%-$1aC1W6"'BP~%O]Hxd+5!`M:kQHͯDN3E9>i*a naهIUo(Aёm"#@NPщY̝[!{WWKXaW l'`^tGp3~|/EHc߃Vx"I>d2sfg~ J30{E+:(ހi?:2 # keb3 m`';.1ѯ[Bp/m M vdq,1e2eB*Z<3[͋s]] m®flgMI"<N.Sr4j2=>lI)`i֑FSѦ1UKVPĚYEЉM̕ rD.*62 |5m-~~KCfk?~'A8(]z&Ba(h4r$QRmQ"'pMo:g5.眢7I"4> Bl* dPF]KЛMZH'BG- xb}7HQ$u>%n @3S_|+J(:y4#AW)qgw )W\tq{veJuUaK[\Rۆ #8ٶS# 42CkpQ\VTv8@PVm‘D֌JoaLNd&A9AMq+faDލ"#`Ha +5jyo'gfVeۡ7haXϭ{ d146JnU^QC,8T2wefh֒,0cV o1WC^VR2)q-yXb^r<ߑ>{>щ-] ];|OzDa?,?0|G^WJ1kJ  ^* BCGϩA;4ޏb*K8:%M9 "41%+1JO]]r('1r+1̕3!;C)hC~I.A2+.l:kзHh[tm=wJVR{Gd(uvBk8 GgYC>Mۤ*M nHv"A/(ꥳO]Vs@Bprwe-J]nP=HO~k6Wm|1KbReDt%_aUyWT@Z7:7za{e߀M %,[rѲ ^,rptk6\=`c%QU{\9 3P7(nH7m>Ԍ=._A@Ek}~SĮ~#Xy/Ǧ 'D_A Y N9{Kȗ#b; UCb笟!|#/jL|$#%TDfZ$tvጘT$;sbCF$Xu%ZP/c Tr\MC;qQwbФ͞Fo!P?}"êK@(`b}2j8tmAU_q2> 7ď7#dhE|c{x*'usA-v@瑀Y9T9;fʹ@T#Hv{,/?MΣM?x *Cj E=Nb8[I$ lـ1"5 7mEqm$Η>; iESIt7xѪ{7qC|n4z,n4C|?6P޺O`XQa[-BB8>/vG#F̺#Eyqkqm(l;- Jf:6ǔIx3D9ngRm8)u*1*ۘz I^] Ë[G8LbJދM6pTC lJ}eH7#jФn4<älYZd1-ΧD2RpKg(]%3 [āt>M@ Ӯg}4X+»8o!:[՞R %,Ղ:9 jy}mb;L|J:t+rfUYtoѦ1SjMsRWBuFDٙEdE:^9&3S!#qzvɎGj,~\ q<Ez6B^Y[+! {9F2~8yS`!l?!Bce=C☯D B1A1C)j?!X~?W%O~(-ZU5_\:Jʃh'r/69ւ䌀 p CroH<0kX&0cѕɼHҀfho0+h.I|PF#ǩÝpd-l.FR>/+, #Y}/8) uZ@I ("vD/Hxf8,*](D/LBH3'f{ui^P`M : OQDqSe]e&Xw?i[)jd:97mZ x:iÌC_$Sz cpזj&X[؂e^B QQu_Ҝ%e) dR^øcau;nløjG|h}|gQv[=W#kR iA7}՘0?)K%n]dn9in˯> stream xlSnM-Zʶm.۶vٶm۶m۶u>'nč21f#Cf"#qRq3fcg(+2122Y`DmmDv&f3## @ @iH @JfkebnhuqqtqtwpHdf 012+KI(%T6Vg+sC1``hkcd/N&`b1[k @LAEocɑ8ϲe?YX0LL#sC' ÿt1'll?GC*?hg++9}kc@dko_/"A2w7w36R0wGj}$wE?ώX%i 2H) Kko1521(;N+gzK`@_ᅱC ۺy1qrXLl.]Cgc O/=HnƆ0k˶<)eb4z4L+S7fFW8*8p3~|;RM1pD8E$[you:`jֆr`7awNik ԓ%|Lz}H۱ 6T(p4UHfA{k !p7dغfe~v!,w lz]ӥ-ũB¸ C￑KɦHs/̰Ex|v?@!=by,!]iZ(Es">QlW@2ZGS?YvmPcГ-KKzU2gnA[[Ⱥ-WhM#!!F%;Ttl%}ۛ.֪zXq,_-L CWZV^ܒ=- 4sx4 T 0BH8b@ {Poyᅎ~hH\OJ] gޭ hդ:ǀ)m4 '4v\z!,:^+Cpn6*u8'4,</hEF$_V&^bEU5}uS帼 o<șSlXg*:IȏIAka @$)_GG%O{"{uAf݅5!)4p(E!Lިjm?gf cN] ?x ${bۏu!JľL5YR9#Off{sdb+dK @'y2NИ xAf\CQ<z$|b5Ie1cq~&PP?lqś3$l8lq}+2Izb>W`v\d2$ٴ:VDɅrKP qQk}IjԂDDy8-ɇ2*0Uo SUD=\E8ӎ#laO{b V\H&029 ]".QsSl HxD˦˶.*!aYKdHlD &[1y1>@m!_5çdr#qZU, 108r<˫pP;YVi#VDQ)A/Ӈ)x?:/`B_Sr.DMpޣDm呗 V€rȻ&r#.wwΠİF><,. NV!v;F =1mpQLEaJ…[c7(w7;ks׏S^2a-hҏ7H3FIɢV݅ LΛ G]k=u5?15ӻEl{T֯עefKH@Ogm%aa𲢟%P@x ݗCpMRJwٙcWDJ1 =Ga *xfo D%Zkel(9dVk `i{ǧڐEwr`$*R4"o5GJbd^>zrEC4o{\=x6@Oxcjc.'L%CHB'f$Ђg+.*R OaN&Y\nѽH9亭qowZΪ 1.w^$90؜WNC=3F8}&bZhLg'& ܩi uOGXZ 7UYPD .r4D|}(W]c rkm|$:ݜVX9% +uf6``8 ~*ThAm?ɔ]4 [AS*D߰`[Opwː$XlSQ3!BD,6_d扔bD&Ypolgv -RXd`kzDR'6IZ Rp#Ӣl&,DƛK/C&rBw4}ڜhvO({_9I`ccnkK6T#c2G2i>NjCZ,$ ] ? 9ve-DT-|4/]5zHI+)VP)ݹeIxN}/|<]MKÿ;`g.nVx7r3nFbD:ZrTXSa$0cqYS\bK:#< i3"&3+kp>buOqIQ3\}J0VćUOEge~u8`ޅl@nKu8#Cu P#rTr}x@S\#1Vo3Nۉ}ާjnSySHL,lޕhڒ\?9DD gqy-"Ͳ] R꿝1[p&?@`q|j.^,27hR$F;n炿ȷX {_d ^sI o,h@]{tOb13*բ e\R<&#8Y"9p%M޽ 4ީ z@9װnl#aꨎE @DjEPDܶ? f=xvHc 'iN`kDğA<9y֘}SۺLw-`tB Hs&-Pc('5N-$@u]k?eХBxI|Ie6%>5a;sAQ[{!n1CE/d*8U@Ëx7^i3|1\)Y-Y|[W5ɸkm'0QEO}8 5({oyNCW~JN= `Gvm' x"ʎUsLn`M+PiuCk1YÖȸRuKZF  BX"lAc ~K>j};= uM u'u}=0Vz MrᜄRq^F;(0[qve}ܥd o(  !! 5Z*ڴFWy(4/X:c?]OB\ʒ `C[ouWE(.<umn{}8 `9H&Ij2|ܝ8A_m ^'z+n3X¼t^Cz|3H1FX u/猴=&t+lNQDW'6 ")!4IJ$@4r|-hX{RƸ)-ks]*haMI4\!$I R~dKH4?,!q mi]/ vWZ`~" =yT(KԬcX9Ey:qn\3_K8Zط V={$xN $&PƆJt˥p 04I<4&DZdgFpTO5]; kFIPQK[ivn~{ X+}_G3qn\bq O/_*v{Q50$^^"㸈Ot6*W!36[Dz T5F{wXO!λoYAX:5D'uٽ;frܾ˕(v[*؃_Byl4B Df(#$f;OO<[}>?rf)AwN*S|Xmy 7\V#%mP9b\;[A?s@Dz sueO[yk9KJ[fA%cuy~+:[L$P!(.g: fu._eqfSU/HKx0IFRu&Ę {?ty.VtNLO(n!J?pTsLN~Fx] ZEQApċn9hm[{9 c%gCJmy%:kl;K Va |t 2N}ib>-Y\9Z[[7WYJD^Yc`  4ܣrP"YEN09NV#B-2qҨjs&2Ē*-FOO_I.+zr\g201hP~y@¤fHs{F bQC.MN>YN,7= L<֖G|㗤#6|7-iR{Oق{`-˅~BǛD. ݸB3yct`so1Q|!P|s[Oak?1( uMRD UNviKK޵KkP*evHC@Y8.T0X<2c%pL!frGZh9 ; :GVnM<$ڄ;{Oz꩖43~RdXK20 o"ډ Ӛ#2͓v*X.Gc ag'[4+k};F qJVƱ-&顁mG%'DcpG]K: jkJGׂOPpdhԱPMxJPbsú8V{{RHwEa* A&y>9CuŸ^ʷ%N'"þyoLor1,oYw~YRlgOH`I(-jtw19dd -\W3 ,X-^m 0n=͢g (bIҶPo&k #es6%Է i{AA2u$[m!|:v,b;߯.=1͘{+we!wpC0v\軤ăG٨ ZR%ța "mGX!H)>l^оwpJ5ʞ-e?3؇XAK1&(]ʽ:M{:SQ\nj׬vjK IZ1iaGDa̘ >XJ%־0U%sFM/sum6INSsFm;rYc: K J'i?Ơʋi~$ɡMvJe1(Br穘_ U?^|_Y~(V'h0ڭv<+r3]NC~̽trׯǻAq㾅0dX\,χ>wڅj^JNq^r?j+4J6qSˇ8 %zN `.JAKϠ CK2)ՙDx;Vexbm^:.!jc+{r{ Y5s -%44@BM*Q] .tJg[BDay 8шM[["7)ojkGFz f2ڸ=Op~.7Q琫|4 g߽ re*D3fgQ^/ތ_" eQtVoUs*W:l?'@)qApn7ټ?Xrpl`Ufhas}Df?* 8(1{œӾ5q)E]֋jVhpZvF믙UCEvaM$*[xth³n;8?hӚUhr ~pc+|tFHE Ljkƾ%&=I{{ߕ#lL*|TsoP]z`jF3qC-an,g,vEEw~V3n'SC2i7ז1|/bwC5 M\X%O'O0w!~XHG+}/0 qz7&?'x g%˞Ői\OdːZ06AZmrX΀1yԮ9awȓt$~Q=a9؃"i/ QW%Jxl?;`4wޫ:mF1czp~!` 7/uٸn,mOQXuH$Ts!Sr,ApF=0l`#4)ƛ1\[wLeN ]~ `^'$MvQGϯ5Ȗv~}7FY4^䄯ŭVE%aW. I'먼 `>(~13~VwFv׽L =o_S_&Z5̣Eˠ=`Ȓr5~mO+{0WfNbp^;GZ7 t,V*V? ΀12KB tA sSvG5~輾E>xho;:ڹev%|_nB6hG @TOX]gvRt%c:P}Qd X6/# h+ ).r53oaM hSZ/(G!d D>a5}-/iss6q.8 nݜWiתHZE .!#b)Gs>sj5@vvuӦ񇖴<8'%R6e'+?.xSۊ)8Ra0HF;?05VRj70Nf6r Z~/ނ\&d(eX'!(h{rTnn\`#MͶ-[#1äj' =wT_E$ v ùm2' iüpؒiЗ#yY ";` @"N{o6>2Xlsh`K"Ŭ6Xʴ-ʚcb匇uTx> =Fien8:tgj`Ĵb *.Mܯhs4oK+-ns^9^{Ui - r=!8{X1v̏8$> iU%0i3637rOJ58r2qϰ"ʶ$ Creԛ ݰt7Nԉ!ֺaz n(Q"Y}e>"U $nLq2ivVtWךҒeXJw9Ǧ(,oG%ߍ`T( -uD>m*I5%bOFNxFgEU)S{7FP޴==YHBxЛշe)+w@wչAk5"u;b/ 0tn;>W2VtEXY<&-\zicݷ;%9kk2•ac??qu!W+ j&dUd;Szbu`V~Ck_$%V G*vDnkHkYbjѥtwCz糝S?|'h/b{ÆQ]\G /zo&G 1U`4QN DǕܪV,~Qw!t]p+=lD:]cv[w z5Jơ`r ٮlykzImQ} z@O`lYܶD"=r~I@iGNPEUk4=aHEed$`}JwLI Z00Б>^t'7%jU%TS3JɚkJ-u ]1߯;w~r ].:G3$Pܻ>l&=NOqm U`n;A fvƀdPvMA anj}6gW񤒪aSU}7X6X} 2%}Pj uNɭ“9R}}ij=dJkP1%FbJ 3ƅ@HF[w83 Y d q0D\oTMhOLTSQQ_ǷRIW;+GHKhXV`wyѰnsp8Ÿ7f>0#Yy /PK+UyglvYK!!I 8(g< 7m.@UIADaIM-5F~{j&``>wMcDk{誊$ *פ,+ +A5!.}ˍýE"HW a8V2[˻/ 'ncEbK/+Y+tqnýVe^hg1nF# .w.͹Di +Yag;U<&*Źۅ`y; w޺rs~U#_1 n!Ctەz P## I`dp}\66iMdF#Qj^FF[Ē2ޢ/~A@:h۹+Fz/42d[ABW_X>T#DьcOr+V'l!l}-t}t*"NxbUar:591>p`Կ@0 KLiT2u};pS5Rca`ON7>=P} AH}I8SRx$$YiA9j)` A@ HZY0[]Q}g8 HѾ髇҂PqTiz+%1ts ɷ|n,X-4*eڗ@.+K` ~gZ.Nat e%_g0(+)0(1<n7m IV&v%6=ˍl"Ɗ!W@kz~Y*] 2P [i|z fo7r|How X[m졒~J+WjRݜ(C RFvt20t7]єbDyW Vv%:qi2ʜ$8?vU]qͧX 7oWN*Lr=cxD8 ]yHDK\u~&4\M5ƑK-B^9%w&:d'|BWѣ֪$xч͋}ednuJ^Wsӧ[A\UݱM#DP  (/=-sch!gmu?^{岵5U 1^uC1QQyWj'50q[XF]]eiV]wWQmVv3h9_2hr'T[e?)nzm2N;mX76hW9#MMc(ɴ{'`X!hgD \S&,>16D](v xUy?a?O%$b&ߚc/ve!)چ ( prF_VP%C9m%JRDe;㜲Oߜ=cSuAT{n 5tvA)fs/33 f$xYU~v`vC 29ֹҦ"_0RαPQk^+//AZjq*_^.ǜ'ϨQi@wds^$^ ͬKL]#v ݼ8eS`\I" Y;i=]tn.YKR Z:>%RCPB2il®/!^/@>& CDPpLu$Hf +"OZ;oqEZiRsǮQ.2„R8{eQY{np`LےE[aFoZ\ a!WIXW.[*'as[)2+g6O#g<4+ ЃHOlX+R}*FXkb<ž_D> 1Yz꧒l^\5a_|rhj}zBICojD8u]΃̧N@Ϳ~|}(V2NB#>t:Gy:]*PUdksUKr ^a# n6|\M,wt!4:A=X)n,5x2 h:  {Q>xDH>~V? oE`7H ǁ21`4 Yx^/*6&eVf%9 8@1bOj/"qDb{HT|3iKb,#fMpŔ bRpv=ur_S!78E')%ouw`rU_zs7̣ 7HGص0A56 )RYv/)~^ۗ¡4f6>zr- t[jWkU d_8Yeg/2~WQ\*FZQXUElR'&Ȋ1nj=^p%7ͳI߱KDQ[Z'K5/uGg;Q"~_M!KtuƓq&GفEWf'K2%'G Rω~KxIgKrS,+nOK))2!0c0} jtr4)KU绻Xz({()ydp5WhSvɼ jh K9bXv3}!QphmĆ8({Bf TEA TBN1fN0y2_މ OQD?S, ݂ƳW^H 0NHŃz[l4^k_j:?vJ sJ -#gn8Q׼oBӓW*B} -5l k~'6vs8KWv|bڰb_Gyjp1DLº_v@aQ#!ȇiabѡ(X+.+%hyu0!v-9Ѳ_Ntl7ebE|?q;* 5;2.O[|@/}E]v<M-Lf _?,* S9/U*غYfvk0cFqL.QMPG,Y1aN̷kE}SQIoROeb`tO7Tpփ1 "?y&h)(S 4uΘ&""FK]#WEͫȣfBGQ˨&+p\*ZJ"iďa&1vޏq8#[օs -#('hJ$xp22SP?'/!x|G͠ןRJ]48}iٹ`|bw4snCӫIUXNj'.N>ROf8غ*tXҎ4oue_&'NiH$H0'XM}hj45yPL0:X% YGk{"S[y"ajF~>׷|sj !#=n"s&:%ʺDu^8< d $ʌ`!~D}6nXjrEm%0<(%{ `5 J$ޓe/˥`BXkk iz Mp6;RusIJY M:4K~sʾmYpmzYr25$WqZJ@D1`v`iǑa-CH,xRȁ356ؘzzXӬ"5,Mg :na|]uQf0|L;Yqy]~OVk7Ώ5Kk}z%x \JiqGJ(3aMҷmydJ:)t yN6DE[]HX[cOM1 ůd+6r5TP3 ly#>nRPȥ`jYgD1!<ֵ9Fw&l x!f:2P]2'Vk %}UWq_]h1hs{J3XWGw!O}5dyt@>^T> aK6ʔpͲ-_r qS(Zԭ]rj NfO^s'X52`yL ){}&gj7ō @#51.cY@w0 Wk'233ߠ hbvPtKI $}4k={.Ykf<#* ԥEs\]20j3"n{":lж!jEt渞FwԶYh]5ta3gja6:xPa)LeOeǛ Pyʐo?ӽWUH[;L]^y&hHA9>r̹E,V/J&A:c l_  !];|B81^LboP-'$gIkbbӯsi_'e>{mwOԧPǓƱ `P1 9|:Bq}Pa鮈e/ּŊS[F`: (זQH:n錩"\0?fAnT[q7XԠl<_B8246)#Ok[Hh) R!8buʧ^[˦Ʉl[Dve'_br iݗpV\*a1NI;uf|JZNUX+&lc6Q $8>ႍ~\'ӂ:U; 8u93MPQ} 1ZY+.VFOQ댿GxV(1|jah#9JRjVF譥e7'r< N  nR2Ypt,ς_*$[$zX) x?!JꊻGI҃;WSF3ndtv!z>@I/ʽeDΤ;F}dYKίl*XbWQV1ԵǎctqRJu!#E" - "ߴ.6+ vy9q3~Nq6jԺFJ/ZlsW4X5JEN,BI˅O)0G jQcэ"$;/A+o`eJ^Kpֻ8U?p)E;lŠx^z|M>Ҁ>cĞQ;&[n9ADLpUScOv+)3~kZZ04Th5&Zi,H+^tQ1M,~]ąl- ΚtEkT{Xb)i. $h;-}/v ; _Tj5*y[gHa-b%b-"*78~7 ūo ˃mrխkD~12כ0Nu?u k&=X2դ+ԜB(o!O&pj᎜+ș ". E!8οrmC,S7O4ϩp- [m?\PS@P!6б\*V7>vpoM)#3n8F’+Ѓp@ľ v A8TZfrPR60čLIb3y{&l9-껝 d }a[s);i}q1V endstream endobj 62 0 obj << /Length1 721 /Length2 12170 /Length3 0 /Length 12749 /Filter /FlateDecode >> stream xmxL]ݶ5ݥ8ŝp;wš;}Nv5X#ɦ"sQt11T%UYYTTbN@c  4l쀿6*@kJOacl94m@77nήNBT@%`ľ)i(JhR@; @d 휁ts{'Ϳ_!`trK &"MQ !Ƣ&03Ksq:k;F#F&uwČ0L ;&cgnw?Ր`4vQ4hm\]N{3@?(c[?:YU%$hr+_k}/ @3{fv6s59EA[FRF-agjo쿅JƠ?d& .N .+?DE=xL6ο/^NvC hwO@)O{Sְ~s s3F ?W{uACfwjHij&.vdZȍHGS1d? K)*-j^ 4D\Aiۚ*B]G޺d)Oqf: KUt@m'.>I`d| j,CLw !]SZ}t8׾mY`t* F$Xޡ ic:+7~1rd2~ ֔~tfꔉuQxiODp߽W!-v_O6b934wiDI6"~x&q4Q}cXEI%b| $V7kT?:S+|yj;7ɢېܙ&iׁT&p-T>|2c($CEv֦I. ؐYl5: +S W'5J3tc3ϕYSm7t1ghbŒhxVMu<\fZ(sˊ?P:P=)5]0(Y*'7~8w[qz Xu}} įY-VC*t !/0꟤x\d0$ihxPYGNa{DIn}rOs҈;0!f5L$#˥GCǿ,ժN4ui 'r?"*U1Q\fx;qIE"Ҵ putp8(djÊK)c0 }:w5g0L7Ux; s_56!DNVFXR I}4CD`З#3<}ViZuQ=켈eڨ-컓O:v/͝`;J)_$;kyFUr_^U6ˆ苈__Fwbuo%PP/p3((Z&;W ]w]% lSds}ЃixY'̚[y?I%5>'( ߐd񘮪yhsʂ&M*jZz_(cҷ 'J%{|+zvdzMRgϞdPӽ[^Z gퟢ"%lj8ƍ%%cz{]ƗA )g-MfuI7U4M_GM#Z;tm̥hHPYI;R@rv98$JqwqEz_^Mx0s1q=/(q8*M[Vw~EvAٯٷ9?ؼ~Q[[؟b95*;%7wq]_2Ut{\>M*+_|a%ŧO6f1+R{ uIq3Scf4)W }G|X BV6837ͲπLSJ(E[yޡ3f*Qv+A7'nj^M`ب: GqQHzȜ Q72TJq`ܧwt XEۛWŕV_;%W/i#F ZHܣ͜.9FߠuCUg+5󰠍+5D%VYOj-m&P43+ VRl`T_SΏ'݋%Taj}8 ׫| \& W+|S%g&,fW<~oM)k„&M{Z~94Cy*w0OD0Fh꒒5ۮsU~ot\]q7_+EBɉ[sOѾ#=^赇M}߉VGl>LV\ȡ$!QSOem0`0 3 U#@9'"V~ l?i{BvpT9c]ytBl[!^J|Ma-*͠s; >qLʪi`fquWp@ G)tVŬbB;? < = d=*㴐bQ&֝7UpbiB6}֕J RsgX f|J#Q6oO QH\s٨>#H[h! w$׶JDBiPQp}&b!z1kL~gm*O<9uJPֶ͟dlGcoJoq]R.骥bșx^7~1C,tڱz}<44DS} qbz ×x :4`+;?-#Ob+%η(aK`_0Wz9^S8KI M2dY_& x1=›8 ;~2FfUO8,S 0me*o) /_ԹG0MWM) {yrۊ1ux{^w|-Ͽʶ1qoPioљ0z%P(e$"@cy&Ae ; /gxeXô Y*!Gjy>nwःQՓ/ŏp sSTUXxم{I$WL%@y[TOͨ; Q+:l/]8|{=HZ2[P#, S34/h, %wĤEyp&l˘P$7pT+ ~w$no3{,/~V??) |Kq$;.+O ʔPY iP  h-9f⑭8(v6$eFD o>Vsn/8j-c?聯HшgVZs)v)Y^QB\#,#fS5?sԶma=g#> ,I$7B s- $S9WAhsF7CDQٗ>7Q ==O\;oNz+wyD[tӣqW4VvyC}q\(ʀy8i5+hFx@Xt4 VWLKp5'e,eBB)gIː+v!mHжKKHYy+:^v}]Fx:˔]Z(j/Y&}t͑}AB͕P~ iR.hKZ ׂٱ?aoyrkmtnA2 uSK:M|ر#ߧ [5ۦ;l,gUYTqM? )IJu&2RJzD%bC`%0l2#C:j Hj<ƥ?La}V/ߖ/&6&ă1QY1[uT* I lNKDZVH-5N 5ئ~p$X)%qoa]yiy&;k€VGĐo2^Z g-VrF@,TѶnLAL,cOىnn0ȍt통 L # `sFRS? ,B{NˇW ؃*.Tt=B&K-c2Zfm\iMb46-4&Ĵ "$j:\l?_ŚH88ZoDř|:ihgEr^UBRD現yXHI!rSA)Ng5$Dsb5<3]D760=KOB+x96#5o*ubo圛{U*@C6P*K |6O4sj2!x;MaL+ψwb/SSW)N5OroCST5Tr˸#ؚՌ%IɐM*'yfc~#Ձ?0J RȂyRp%u*ߟ'+k/v.z\ p]zo@'n S, r"|P2c6iqP_cCE4N؝K$>?cܰ/baڪk]PIE $0fLmw*;Bqj-y: y9?;?oV8q1|hE emw|2)Qa 5!tnh%uVl]h,-/{4 5:ljV]$JTBaLcTPFp=dt(>mM>CɛBpuU5қ. P/[A[8Qrӎadxݼv%̩UpYM88i]>ev(ͻ5>EE)\2jIPrIA?xIʱlCȶIYHjAz!i?x [n#!K;u1$UWTn 世1* żehiAxSw0-SNU%}?rnēK|^.QpGx5E^ ϔΝ&7 (GYz-9&(V^u;E%DClhLP!9ZZ*jв}2\_!4/1a+I!L?z=MѡU?jJ-_;+7Uvc`x`!P?P &݆ oh.L[gzRpIJ QC,N;b۴X!uʲlPsKw9Iƥ>Z$Ú{&d݉ ià&O4Hdss)W7:[>e5 oY2DaaPk)@qQ Z6jLgR#ZB_>Dg5Z,L%Pr3(}8+Z0z-F1:h-aV3s< R*GipPKd2uUp(gd9u][t=" Yrɮzu蔂}\_Tz0#]غК~2!W9 6߃#N)2IL`\Rgo˫R%y+e54ZQC*oT\o('^^T,vw-FoQi:EE#B Ie}-b#Bg¥\`tBH~YgddIԙY$p" .Yo̒\!q,xǫ'(%31'"Wpa$x \oJ:,J"t=a9ď6 ^sQ%3y 3wCeY&{g/޲@}3ey؏_ކk^\6wWl,K <|ti"QdBrp並n;2*KWzI0L[5xWj }W:7$˵˴ais?kЯCĐ#ѸjT9k05$HOGґ~7?ccɱ)~/,z46egLOFĖ,~Z<6' PYrғt7gTZ6Cr|Ne0_AO>ԭP9U+ρxyK_g x9dGpe,0 x\Ժ:v$%,lw9$L>R;) fV6G${K4iiy!|:1 )0t{ lⵝgtمx_&Dgs![j1q{9=2:A+*lF?>l厚M5 7)qW5Zr`ȉCxlnw85+>Z$1譏c $b0Q s9*eufj"9,{4X!?{fVu5)*)="kT>/p&+ `M @?6oOMB1Nr'xGRJ]=:͗ B:"`*iC29ؙePHEt M`vnCx1mū\g}o$\Šٿl:;vƕo 'amS(ePK|a#2I`&';#~7E*jiE+ҶrKp-ȀT{r?$ x v&Sqm@kV{"_k_dNJ'FQy>󋬹l+ѤEHCB܅nxq.BIz8X_OT?5^lqmG4g(j|W^/Aȗyi ^ʜM)^& y\S Ȇg2V\1 xu&W~)7K= ]gmk?~3O۾UbH @M+uS#Uk;7gBe|A{8vj|-Sn>&B:/ +KzuW\ ߧipnQտcϘp&'A9wanqxUΥR>S^ gEt2{dMRRҐ++Q=8ucIyí TN).hjz,Bsq~wΡ/4[yAc8h=CHw ov{SZfm͸BEaZf)KG۞ɬؐB)hDN:&<Ϯ.J.\ s @BHɟudћC7r"׮PlHu_u1+x!\g(oL}aݝFQ7q aѨ@~Ne2kmgN%NK(~ P+;>{ϝlEP<@4]/_HAW{g 4[Bod#ryPgh B[3bsDQ¦çQ 1@Id 7 >Y[*Cz?RFlHŭP~uϑ5=CytB|?LS3n @b\؉gQe|m}&#߳Q=TS &yeUڔ|~4?qfmEIe@L?jR}ǻ">qY*L=r{] '}WgA,UwуF1ύTl\Kzc;{ǘeo:l_<4E03JϠ>bmg>BbӍ%f)Jn<aΗwp^pX>gj{8;Nŧd \Wg. l2Ynўk.zyDr;䧾zԽ%Բ#;p'"5"Y65iW &ghNONݣ{lMoZ)R N+6{ٛyw:Py@< XV"ڒF{QRq(L4-t?꣔~ҊG9L5o&Q1| ١>p%'v0"'J[3nY[ߑT':ON!?j)gJ|.*7f&rka@bdurܯc twzc(XUIoF,Rv0b>R-k뙾eDPGPA|f1vcRu+ܔ(̈dDo4&?.5F&)G('oK u'< <4^%Q*HD_:4@7.ЯYoܭ/I_K|DKS}wy5B4?J=JkP#7q%37KfwB{uC"0Zgʲ`A*9hYN5ș|2Q3X>GÄk3/8)Ӣ.s r=2\0H,UV=}]WҒ¤Pqm!lw4S`KPOϗ8.L]Sށ R{8MLյf'l]97k(kf^CDvaHU%מx3=49VJڸ~`+#yKL@uwrnkr8l8r-󷎡P#  ~>?ɃEStD>l͢= KXYq%LAVoe |k=[+;.m[4\Pz x*獽u+>)ʨ6ITl^@½x/q?.3-n UӪF_Kyywiw_o >dFDl A߼N* 9x͙{Nx뒵&("!IWMC +j&}H %9 :#34:Fo׭q3z4y LOW<+ƣ BP8]_qN$=_:&zǢہ{}-X؂!s!\ىf൮R  5oqWRp/.r&O|5Mͮor' zbf1  ƝZHZx*ܞBչgf^A^=7U^r%Co]Yzͷv mӘ'Eior7ސ^=ҢiaƩUο/5n(#(vyg/#jB:VfbM+.9Q;^zNQ{ori+#BSMeva݊ ՐzHA鳔%H9*MR[&F6mc\u+LwcMťDoe "*_'&x̽N52K?<ݗ`3ݳT S<*EQ,nnJ%5Tz0aFIMݧc@K{W> stream xmwePL- ',Kpww-kpn;sU?[֮^{n/R. VFV&>"+7R tv s:`caaE;8z:Y[Zhh lvN-[7k3++"ubXXۂ*Ji%M4Z@ Z_!`rrK(!*g 2]AfNv__NXYf.S=tpp;l_BhjH 0YE*@q;GW@dPs!_XvXhWڠ"z=Qs{[ol,& G'-io`nmo Pw%*@Og+]=,LXsfd0X9]3W''???y̐Cl~UIMWOOh/B.M\cZXh滣L nm޴@(c1_"  K+-jןU ".`̔`.#]2VT9rOj徕 bJƘwbl5{G`L[^ ?n/Co\R[V:YpklI>:bU_=!(>MvBvi땾 ]@]"Xcd9 ɜ4$iKsqӚ838 w'XZDK}~/An2cS͌q:Ym;a3G<|:_bSzs+JQwF=ɤ1l5ɻ~E n *WEL» $|}p/UoT fk?#&Gd\:v&(A79iH^/ɘ _ tC)zH!D9T^B#t\1 *WPoL z'*? @ kWdHrᒻ [彵n#\v= a7߀D̯&ߣ|L \RVgًGĞV6C52sg0V{4TD]ܿx32RC?a|~;"@OeTZ0 `8븝 ɛ$*N\YĒq7T>$:߯ ut'iR>GFk[L7~Jzu^ʎ:CpꤡO))=}bLMTG=M6[AlLs=!6=H\" !";#`h#4$UUW jBAeh%mGPwGbͫ8d0+ꮕ4_'ooWzAwP MTcG( %@b03Z؀:|Cao&$Pp:dNʌFb- z|I#1t:پq6RUE\&:x8`;p_DlHX/ x@M# y׌=F7Q_a3Z$ u;~ݜ'%8!QHK?iDֈ,DH0hQ9B? 7ߴq7q'$Th-젖RR,ؔi/f!tQvI^i h㞃`eŇbVQV㶾kc ZS]j/ުw}mMnX={J%"R}I! 9O\D 'zvtd8 {ݖY9OFows¦;nivHZ76D4(m&ڞ*O&yyEYD5~|I1}-D?% R,4}O\mx|Kz 6lp>dUВnBq,})T;%UҜ|!b/4A66?ɵ ΂x[+/Cgľ_kCHO"%0a t{N̲0|;iQ7; G%]†CuוdI;QICOZaʫ>:k[X\F`T_bTOXp|/Ft+²zW[ 'qGm>g~Us"m| 2="϶Y;Ƽ4Ì[E^go3MHXT:'gI6":f?E{I}4:$.a 3ɓSS宋8GcK!.JF BY}Ѹ|~iJ>,F]SlFNŻFbTD)~>=b%9qFW?Rj瓘X4ފہLCh鞶]`7֭\[P [Ke(=u-~ iؙӗ| <ΘfPm[^^ЍX%5}4]?A-fvLjv:nݲLp ΎgDF٢n~V8 S]'n.ڀ Y-ş̂( wٖxEL1Hc 'K!VL7'h~ (ZE4EHbW zX-=杺G(^WPHc;4jB7_?ݛdR˞xx8%!w06~QD` Q]QqIvqNJ+}4g3Y6tAIΏ<33at=shOsW\;{t QCD8dd"ĵi'+hy߁2Lv -ћcpL1)X))Q~3_)74ć  \8-atl6G}n1 *edk<{I0f"d ypO?zݢ*0 r鯖NxšTHqѰF h!Rh8QR?GY~'.sj5/ AN-ǀ\ܽ#ϧw C+ H+Cv&ZXvl=JGf1d.t1Hf}\a?Կ9<*hm$A gv~9=}K8r8Xf$l9:^%%Q9_8WvyTPm>;8.0TY0968! ۃa̝߈ԪN8l4O6H@j9|]ZW+Ȕ8T|Ο]Y4zKy,72PB[$;6ū!֕Pܑ2l^H9–JANCߓd =Z4lȟ,uօP:耽1eMQr,rdIIj;sƟWN05쭷CB"bVoS-8H0` DB Gy)j}SD3 rB^kؔV7 t\7L=' |7?bPjpTo9{q=0S]dnmQs@5Kn+;2]~Tp[sty9˒LMY$yQ#+ѦXJ2du9$J[Gdaiz0b9-Gr.=2 ?͙,t!%  #}" sYo5zh[7T>,u f8ûGU-i2T-2y)kc!ܒ~8ee|Ez&:n+R2n6 C/eՂl^qSwʰ{Q}NK'6 &X>j<?c?h %7mv+'VXZ/1zBxWbЦc,@!i\~At i@tJfIc6F㦯6iwVSV/?:cvY@_/UD{wǿ7Y [ԯ t9Lv}lnw wO/AiDv@QɁz;Ug\?F)=, "렚$S@DHG,祸f5hs,o~"@|Վ -5NPNn`T*3(lT&\^GGLgɭ=`DAL%#Ĝ8ӰƖy|Ho#OY&K#L&HP+nfpq#qe ǕsHrTOJ$~]Q;gA*/K3p 6պfe}ï޾3鷣9'8gٺ+2!ɭ8цwl&kyuFq_GWv `sfRWt]v ; zΎ/ }>z,{SIjHSzQ+!d E%h#=X`9)!͟&?9jGཕWQ?cΎKCA3^ 3 qԆkNI)G=ހO}5>##=.aJ` O4e.Զ/v9XB+Fdԡ/l77d$i9`etA,v*%:_Ee!%f.VLz?4oe AHT7lODRev8gֽ"#kׂ@ܨدR9luOs*zkoo@I[eLqkh/cwpA'S>'+FVMY]Kwŗ2bFVf/aEʾ-{Gx 2 +]@Fl^X_`+teU6AncI ?l#kْbᐺn^(n 4g-ߊ>oJUP4ǝHFQ 02lA ɍeyoP!t2R_ʪb[ sSw|le/_RM:#=s 38 9f٥Yٟ5_9ڥP.1# ]at@c_nY_A6!Լ_ 5I{%* OvS&A'ӽ"z:X^Eq ݯA\ R_- .\LlCr u`Aگ]ʐe7X<(>O(*)ߨfȓ.X6^=X¾(J&h&V am߫:y0X]S>DU9D'E +? 23 $!@MU)O*_#(QH?_bgFj.R7HQO+7xY5<~a29^F`ڋEM%(us$[p_J:`4]vRx?X}kwo:q)0':W1τ=R)aS~G9)fɸ\lfSi^o%s2lhIzd,>>Ѝ X bNhVqi^PWC8aEetI#>񵯢q]l 'ۧ Y) y^qTt:ZlKҮ9Ǹњi״df&^˳E<u"sN񿈟U֔dwb&+73vpUv 1-g=_6\~N_VFc^,̈BUݜXZc&(XJE7]}iQ)oBx~?l[[WB*xa/Fkq]@ bkxrbz,|kcѩn4 ycӸ]2T:'nKDvjl49qR;C(*TIY1FÕP)B#>rSlTvh1MSS[CEH08\2Xɔ(AY[7 h&ʣ{TeGJI],#zhrǿ@ FFa.u}!QjL7O%-eCvZ w+g3w!c eQօ\Zڄ tޏH W 2bimO4ZAZsҝ8oqŲ lvui<>%zfP /0<&$j`juFv\*/.s7Y/U'|Nk<'B8IHtdTXf2gBy;}  1wx4!O9Q)Es; arhr۬٦y(?e@2h>\NU6F%b==szg{e4$msXkt%~UO:7]}:[G%=W{v&2T5{hh#FYH' tMeJ}ﴋK`sw^܋IE7@ZnZDsTzx*&$"̰-|RT_J4CmsD`Y߿BdjOrz6ɪk~Au +8f/3E,6pHA~(= <;EHYKd(?`37cER8; jǔ*]F6/Y9y6`O#Q)%^tGwj3[<.5e؊6c_ !$[cs{RE`kgbr !#L .uCr]Ѹ=$7݂ꔻX,sĸ eR*{sА A0P Nw/*?A0a3S7ɫ"+ZDBz,,O.WuB,*e#!ڿeM xҹFAN]@`KtaLĚ=>$.TGUR(Xf^"E~)DSu;0`}xFHs|h*|>6)Z ɏ - ʴL(_ZX~k05B E_uznH&[7X^gcw[lˉlѕ]٣M1 Ttph *X[ۚ{AaƷΔbr?-q_WHPlbģ^}]$!;DP`}wyn3BϽ\e8'U}OіE6WPݟoC3K"㈂F.!ψ5R"*ʷiccN.N?0BtTxǍ&%w?-mI]tP0iwpȌe VM uUgOBN:ЊVB Q*\;Ǝ=5k*W%eI5Fxv pelH ~.&:\G877:~!t2/kz%Ty0 ,gzoT=i$+joYغ QdSxE0Vf|<}&2i|6:HZn;10eٌ8'Zad59 :Oq N:}7e|ʐoeP%nC91&`]A>9*q<5`'<>2QbWH1Iɉl E5N7C9^Ic5-*ܮ˜"V|zzg (:X>)A O瑶f>˧=a-ݨyO_=#IkLatf'm-iC3.\jݓ=,!]YIP)2Jܫw@;l硱|}q=桹MT"3unR ˦=ŞmWC; p[Ei4W S+չhL\x_9@[n؈ $s>v==~а|n0kB4UZc54NKh t4Q"ȪjGR2 i.!Lo.G5?pGi[t蓽U^ ?8uv endstream endobj 66 0 obj << /Length1 726 /Length2 1990 /Length3 0 /Length 2567 /Filter /FlateDecode >> stream xmRy8.KCHH}4dkRblc|g|khL٣")rEeYjD ٳ^E܉[=s{pДB۳|@*R ؙ!PӀ)( QX:8x(@ a âBD/:SGyCTB0!d2O0i 5* m\,E3+ $T, ax p d(T8 DS@fT:WJ,M M=)sn;NAc;+"aE_UfC"< "fA&PMY q\ Ι|sRQL~AߜZm6GI6K(]Cq}#~<9oA?sZ}!^@-61j:Ծ="[kQKYɬxyEK,3bl#b!SyHX86(yxdfjbVupbƤpoQ]r@]Ӱy`!Lm[iG,3mzvūbgcrwfKفۜ~_יrn+FCOjDRTTFʢ.O[Ze-܆^yUaGJ^ѭu,BS:k8aFwbv}z6Ő|ͽ"~1R tƴa'K^ڱaR|zc*P*q.}t>ޠs\HIXhCֺ:eWPpV;('g&bmXfy /~# ׳*x+`Jn)g&_5xSp"BCuz(Nk[xJgwaH?ju[;ɱ];]k;z5F*'NvdՎX-<4j"`vJX#+?*n.R#dYj9|i1|A߇ʙ:.9i t}b\IGd̔[4e\py?$|dt c_(?mV']*˄f6O 6FתN&h39. ~a n͵MCv(| 8 ]cZά/zgC=-_EHO;Ucuk1_ӬQSzy5.7/Mxq.Pwi2 "Ub {a!ßvX/Re:8 u==>&NWaocȨz3vCdcќ9cVG+aߣ*2V*o5S5iQ9I]e/3qKmð;aDV 0qՎ$mljˍI6٭g֢)ТspO>(on3[Z5$l- ZGy9%u7%2S2 Km]lr z+@i )[d2YGON|I0WvZɝ b?ƾM)hpB6Spʵ*m~&3 ;9tJ,a8g0!`ؓ\F7(i! hCb>!|{J`!R"]nF~lzZjexGsAg^+>Y)-t$;o敷ɾ0hO֬X 4, }>_0]~32}XK$K>չݦ1N-d:B ,e34Lw,ZXK(>x<"2X:`_ck-4t[HѼ}7CqڲLc^,;g;,e\|lmUiHq _L|OAD{+PJ6p;y@~T6Ryn:Th,,x%`moAsr)̨D¾$DJ"M 1TחMr HU~ endstream endobj 68 0 obj << /Length1 725 /Length2 27673 /Length3 0 /Length 28134 /Filter /FlateDecode >> stream xlsp.'+m۶m۶VdŶ۶my}OiMt]=դbv.*t \e1F34))@l`d0100B<,-\Ɣ6l M,m-j6n7777gW:'W>)\,Lf6ayMI9q*@jdci 46s6;lL,əL\fdo US ӫ L2,sq'_\W1_:yGfdXL-ś=?fWq|8jc#ghk upu1uڛ:Ž? 5 .!hg} 1Y:Yz(X÷9YSKW,7NO*ޏ^PY^PRnQ;c{K;s?|:nCT`0?]@a?eb21Yߤ.&SSSce{cԖ~Գˌ+S7H&W*yx3F;Dqфد~5[oz`jXr`7w.kA T,95RHeW)uɑ3aMg-B _@waoH- ô믬5;%0rD~mU|n _1Am .<CDonrAf-~JWFm=TtFθM;FLnK͋A zqK/8nxsn#S[&oUFE&_;;c )Al]ځmڝ5z&[H@?0jcgpc:̺B.>*lɜ;-/¶bFJK$q!G]'p1疮QEVڗW1-Bp۸ϣ^T+;y@rXP3wˤ/~ Ek;ccrBY0N3],wt&sZ. ŰVdt 3qDљx"I@vT+uJ V $-zh*|M.Q3MEK<~ӊ;Pt2\ꡝ!rN~|W7T鍫}1heT1h A/Z~c KdnQb]!ME 8-FȑWe]`'mÓ -M2VE]%S,hl#$qRg}u$Uّ!iE:賾1皘sϚ>o)ْ/Q cnS}Aʅyz9VP'BoJzE0'UtQmaA&>[ȂY:OU¾ #N0!8Aɯ H@葢r3tczx|VqMF4;([擄~ db?4 0?84^#Tqin8/w-ˏxxAz{˖4hA_mkvCY|v]5 = GF̔ܟE)dXRm{T-%"A7 7+ T_U-pg*T~32Q2ą7b풱LՍ{*MayŊaIA+M1Ԯ@Ȍ}H%fv#9Ns2AT~F66qsb?/~-OBCT 3c>sդ7e1xh=)Wg qx )U8 ‡f8 Re᝙]L 1! Pl?@jᘜ2,Ԕv; Tns~v#RGYu!2c8z:)R1nCe 9v! `,kMLy Zmɒ(ː!*qzSaFlH#@Wo9#,!zU~'># 4.yqљ,_ՏPyqVʝ+ t߲ʣF\B|j_35(Csv%( 7<نNN~z&T²\:%n$dPdق%VÅR桠 \Is{\T̢:Vٺӓ4Jtḻݣ 4e1\H|%v!"Ur?2".*:&tGϩ̳{TcFgV9|u|Wth_9`:`jd3#S-cHPp uko x+nD#nEu>~BYR/_-q8/\pK\@d#v,ո3XTk)?=MpU4x5pa*r퓁üa#ֺa׋DM9wOybTa#!]^,=8w2ubg*H]1w_v]MB#aUm#CN}j2yKrUM俄aY@GY\К!$P[Ob4}næZ.fU%^w-vdpGe;:ȷ9v {+'_8zʉ:r֫ "Y3dw^w:uΉ悝SXoEHcC_E^L*Cpŝ>p347P+a %'A7lcjy\G Lv}1DazN*gT/1rH( -˩|14w_7bK\TR\-"T8itb d@̏q;e7o[H GJ90Ŷ3.ӝmlJЙt XOv"]-ڭĭ,Qoo2 6',U7UW# 00"N$9sx\fk9l*}2 i@9폋y. oyNk,-l`H]'e0Ct07!T߃v ťٙcT#ᵖA2ߞ6K^KrDQYdOli Kp@THkHx;9WD&)#bq,K Kk:P5k8'8WmD7!=Ѽ[iBIW+q0@:g4&Y4sLصv)3,.x?X 2_ؾta>oDܸ>3Z-"*r is8`&{A]TTm}Iiҁ݄׷ W̦$Wq0}j/ Gx-YC{v_y%|Xw39[ ,HYd+36j(~f4[ g"Ĥ"P?)qJR @>sE睜ZlXĀ/10> WEJhc#odvyNAV 1viF>yjjW9k | I. ԚHjL#dE6V Ef"|0~bCkHbw][Vwڔ, tuH UL,?v޷۴wUI71 $*6v~);dG[; 8ƞIq=6SgB֤h=j(a;/43=,(9*Slihwn_vGt?6(Pe-r-uD>9,IsC|OCU셺te M÷ACk 0vy_ctGxHw9@*QL IxBvMvr}ςA)Bq@j i:Z *gch_R$!:x j(|X ^$ BȁqTU9%~E$t%Oq"2 s<ئGCt3?wAShl0Gsv?BPGɅg%PХ)Oi (N]aFA7A)0!s;yP^J[c]&8GW.pdejkz'l.KA }2"þ~j Ӱb'Ӗ$ly(zݠ 괏BFX `b-'in |ASp -͆$Z2  Jܠ β{eYF(IJwYOxIZn'*nhGD9"_CnmiI60_u^ K:B(2x f;'zo<͍HM/Y Dp+q3Tu框W3#{,J0A~_6¥U'b u_}ISќO)t2 }WG#bnAF>zF_d;|{a3b(aLoH| 68F'R6fN31Oi-uӚC Fb ߶1V()uife,0`օu?[/N|hC_ =$Y~3C#)6gj2OCQB%2hv1SRf:eKuZ 5 ]0#Ee1TT=r 4ڪ@fl@z7󮶁 (' |D kykvSC8>=j3湙j=޿3i_;7,%4Ѳ؊ޟആT4He9:ku2 O>Jz76OT@UCU `P LV!,1⟎_e|d[e=\8 b%!\B,Ӡش-wy?6i v2ĵ'h&4¥E 0uaa.Pĝ"X4q5(A7uXuZl>@]1I4F#0"%a:4*.G"[8S3.b֛٘H!ð-?39t>+w1jg#5m#*[`I|2]pԒ(ܾ:\X[U yu{(hU.=64 ./S]K_/ܚ\ǁv^% 9ꇡ 9Z"] ۍ?A:3F??{W\&GZ]e-NiV47a@#;T9iʓ"Z~-۴ cZ>nvu 8ónͫo$1sQџlU%\=lllxثM ,bMR[^ ‰z|"QяPcМh2ڞ5X  EHD`v!VHuf֓ /%+`ځ5:!,v,Ekp-lҴFF9~qY^,& Z=WKg-?ӼA˼I}&•J\̋5{rdI kwvso /VөFMnL^N%y@rCt..Vn+Pmc>kU%UBi<6uDXed'W `1S_TPwEe`a i2IP>6t /  ;US )3N#7s2n92;}MY_o',E[Ľ ~>#;SBVK'dIfQ*A$yվleZzAnVڎ*DX (&N'8{EZ% '|$$W-|C6`a ;B,pK&v:gh֗VaV^9F3SM颯ŃetH:BLdaHmcs"D)țCEmT`c oD zcý 1O^?@g^(p 0r ;;v9E^쁊!&i.N{&0ǴʐU3` ]/vR3p |֖ sfH+_)C {F38dYU1E*8`~oQׇR,Z;4G\V{Hdi OhJ)4q[C\j/ {$baĢ"X'7g˝%ZCu682u1Nѽ_:JU +6#d1\S}'}Q9'l6+C0|7q,V% caJ(]݀ER=%m >)k}ЎBL*};R.WۧH@'/C'5kw9#So'C2'H\w*b5W!_u(uajp/i`&lsbm8&72l^|]dq;*`fwbZɱ8pѢД+ڦkٰ 0VhyL&LQw y'0?ۣ#`f:zC| : _R,l~?!M1D#+K-</J ?Yd'l(Z\0ZOܬDmUF }BgaVTNga<\GJ}jMmds oH5GKPv6؞=kݰK\ӚX+{lb7!&sMdkf}E&<0Ą8M E[`7ۑ7flEt>gc7rs>8zzXJf47 3Z'wӹM׳pŠ[ 0VYn xa<l, kOr߬i*$gq t0Rh 7-UܜID ɵ3O}lȰUtD]ɰFs5khۦȟ_6}w鄹6Y R DGCLj*$ AH%C\ĔK78äJT@MW0yp 4RJh89qtq YX,3q"+CaMTgIjxA]1* hD.{D-KTJU4Bu=݇vz!s(Q-ed-E4(2 ȅ1"n86XiOnUjݫ[Kr3U[?I47s78Tt~|)΀;`pxCt3i6n#|"WYZĽanE0c] XQ$.*Aɕ C$"!VWX]Y唸)vsUѤ=pɷ?Ygh:ߤzݐJDFSejoHY:uROȍb[`t`6!̣}Oi;VfJ E9c rB3?rq-.BAk! Zuw67>[ Q96*ji'HKݍ cVRW䚧;`6րJeRi@|LcVvGҚ2K̊v'?;&1lZg3h+ 6~i#ɽet;ڛfTF#kՆFrf_sB^AWn1$`Pih]>hTp,gQZ㉱tjo:M^(+bcPIwJrƂ-K2?QN1rmFO ¸]]dqʩˑ7BV~ZY*_ S/Y|xYx/ݿevp3j_;6JUM q֊[ڟmLy}PPgO_ر*bO˔FYUFjVrgw7҅J l6ٺwc@.+Yj_ñ|rq}PRy(dgcYujrQ!?GaeN/G )bFW \P '''Swr:0 Ƶd)R2<-2J"`=uw0׶<{ ӖǏ @/QM㛧5gDbjZ@a yșa%csRΪ:С;(Xv9e3vZHSIwJ +A:+k *LNZh7no&m!݌erEWT'.`J%r^RXZ1UVJ6iTLsƭ8{]D]^FzaЌg<'Aw1kTHIlb9䇗! ϡ!S6"^7`f; ǍƆcOyf94pxW(6|{UPT`?(v-r0ԩJA~n$3x'޺ȣ$5Sߺ5>Ej|x-cS+C=f"$~s+.`,U27{Hzm6 _1Vaff65#K5-l1yP`.VGAXۯPH,OĻ2DE:Hw֘ P[Q V5^iZR^N_dZX(iGm,y~z~1#W(wӑ@Bs+d5EL6hgXe Mr/d~j7U.'{Pǹ5 #f笾6W}7H,\75N,މ}bE%Jbb,:H-t>mΪOUO)jڥSP|XCy4D~ |&5)L24mLhiKPaҘAQ k{s "ߤ˝kdGJ4jA fjwT6lhz E|L<=/g؎8dz^]]L?ckvy`SF*DZ~ixbyrz><3~`hJ/"M֡$w baD7^\V Wm@]ADZ嗩Ϻ޵UY|amI+z F0Cv> Ȓ7îۚ|wEb1Vbr:ӆdrDu[ (ԾZB{q#9n:mvC%LvQ`ۻpM@VzJ.&4I/WK] g$hU*|jA  ѝ>>RFsVXtBC%穦 G^}/̈́>PJ&4yOAjraUnfFW*=4lݘB(/+2-Gdke2}.'I @û AuZ*-?Ԁԯ"(o?7-e==V$tFhW9 J 5 M][EjGD.!/TZc,Y|D)bՌ(àu(ցEb7zsW9r3q.;#wR *ڵ=BWϺQ6htw,ԗ N#сљ b<o~l^+AzEVrK-`MV@|lZmWzuh ϞX/x#A`+;h<΋E^7Oep Lקo5~1`;<X˜B#ՠ5%.Gl}}TvօaC%Xse6[t]@JZvڙV|a]{UtYLj->(خ@޴3b(f0)ۧroHʃ)g0MȔIb4%lzX{F^*#,%(b ăo9,<ғpDz>w"aĦ@pWóK*5oPQ6ˋ"MX\яbxҺϙýnu9-;L_OT_gV( 8=aڢJBUlgbZri2>{5f~ *$ڀ-gsoq}r*_]sa5> OdzD# Cft k(dPEMT~v߭63p)+gVꇼPŤQqadu\hSey_T+Zc#aI`Ӳ:WS֐N U2[~k%L]4\ iuB+<?{8bTprWx_Zw׳fJc<Ijk텓!=* nCB6 Iw,XުC0DÌ|"Ѯx#o|2G)όjXsQT/ۧknKk+c%G3?P*[u{qHԄ#s],W&X*ބZS^15@; gښME7\Xu&Bci\$~w62FpȟL[1BdZ(nUEd :om%dfdw/j!v`c`)b$Cfݧ`;_3e<_^RJ PB68@tQ27;VNtxZu=SЧlṎxxqr D cKQYf*XA<8g3VުAP}8.(& $(dEH+˞>|ƕʾńjKh KIb+٨hKLtFNͷJthPc7Qg@c)5+a{ ;h/ dc@*⭏\SB>\-!sHGQ[]kMB^~hTtOcҐZ菱9I04f.C1*˼2mׇ5 Rc08E||}r;ˈSq p@۳0*,֌Q~7KH,> c +LdPͱSp aG0b: n[-SKoJ:JΨHu_୛c/OQ[0ר~Tgz*bj] sOb~i5=@3e5 %mF,Ү6{M5~B,f\򈔱W!~C*Ji8{XSmk7^N`xyuGϬ(Z7ohۉA}1諩 sdu 6Tվ6?]Sw%F۶m۶m;86:Ɖm۶ɝyjUCI!|xzWѴrзNo1G-/)`@m#ϣQw}bZLVh'k9w@`3Ahwے/n/RA(svWtxwa@S\$( hTm9$A'0oک1!jpJvWJA)N?V]i0@78&Z5LJ{.Fs6 o+ƌ{-#xm& )G[<<RSuhd.3~ z:hJ_)~4a8# ]Bw [%Z@U'"(54j46C7mUw>."po\/a<L׋->W1KPP4)k\V@!u=-zٶpD L,t~&i 7t,-YhG50_ 3t%x:+j\\&?oKƛޔՄL3IaGp3Qv;̐]>A]5VA_mֲҨT^ y:"xxG3,baK{LKD |_PqϿU2ɰȜgk#NfgMX fō7v*p#.ܿBfccKcPn$ }1e rk]$2W͈[*-*p$G7 iѤRъ9u ALʊn:ICe"?֡u}DO$d=S=]{<$N]B7cd]B?w\^A>i0ғm MQK,-8 .z{5[tmDRFuvwchZ)lY ز&h.E{. UU$( [taM N^}L1ηhVpOn;Bn >"deJhԫ&v`/w1Ib\fSy !UJ"#j:-i%_) 6;3gzGjtsz*(~kxy5 ɍ":9*:39QsؓGQ|k;:3?њL^p$4[oD ־_ّY.f-ZyoG+B$/E}:a1AzdyT/4^ƾٳl?4ph&)W}w!$C~)'1"_7e}ik;K%rmE]S啐/g|mX=ȤgGG._܁l7Gw¼` s@Y|;SHD7{܌o,&< 0rL2(WSk8bs;Q&Ha%(?nWRwfѥ3$ceu/3(L5OLV"#wxZ8iLWmи1\U_sv:3Wn.*)"A;yح_wP(i۰VBYV޵h:&!hZ0Hv" /9l;<_3忾Q jp%G%dkX5,\vXwxN %I`=?zV{sv^_øG'wީr1*ͻ|G8$Gf=k,hGhnw.W 13aV y%*}kJA}ng2̘|;Qjs'%qJJH}j;Ӥ7IIӹ<;y~&E7`fPBm>x|ԗk{=Ț91s"'=ULXqܳ1}KqH578$))eo7"g j+/et4 /YCά]F%џvߥmJ*\1;^e綸w7M71dzO9Juڱ--l rˡyd1z*zF m)}Ĥd,=fV󪔯HZÛ{l^u5lTS=0A܄җyLY v8뷣Y`1EhP[IFEDI$Y:jE߄Ԉc8NI0:TsѠ8Kщ&;]4DP d4]':h(?Jp/Z(X=HY11^̯chƠs +elD#gN )tG9E:?Oq  ky71/IR.{F}h""i0%pZOJ[Σ]"M;*8(̤).ÂxP`,[mHO5shh ;QR6ɛKMʾtqSZͻ/]DrN52I7?(Y2$59i /X1Ӂ'Ǚ|yH*K׏7ڭ3C֕G*1|hLX@x֖:(֙P3ؓ#ti(t01^~X߭ǫ~X&ɻy dVk2NM*abyȲ`aLaYlMNE}kSftlbΐBRo{z'!YQat%g| -wlMƯZdP2a?Fq" T\rȃYw|/%b>JV);}ǰlܯZcb!g #.k3W]ZwHrC;J0k~jKG|ʣ\][ zy7=x!*4k`:H~#P]ĉBA>#./qcvP7-(  {ʨyxzvx+W +>݇t@ I]~hb秋iHAzQf5w-tGѯZF@%p8u5~ŀM!ǃ s_!$i꩜_6` 2/R5W{0C{nVi0&!]ADq ^ hySM3 |z< A!X3fbq~+~UĤA@Y m3K*1or>G%j Ueu>yv:|@3$*=ƢxzY,]%eA\F籷߭ty ?<=a(H`vK,A\e3TvkD~LMJP&Y"#TOE?GE ίWg?Om2PAc ~061w~efq,Ӌv ~pM,{I׼j׎C_7d޼t٧ipTu+_X)S$ 4Xx kג|v/ E} ߽81 M QmYmuk'{%Ij?VeTfMY,2`o; tSpTGA%E|$anJ̾v! 5y#mHڟM7]^/7fs Z$jize`J*@U*K"FgӢj%DOϐ_}"Y5|)VUĖgtZWzYc6^u6ߵ0cI/9Q盔0SwZΚ7YGEѧwBp7u0N8IgW:-/|7HA#%pS%îvzvk;9|% bdI!k\3_o[Jjq?-TtJ9dZ;_Ye-48Ғ wSw!fpE~"h݂| ԁװ_@u(K'dVމ 8YXjuQb|Ҍ+l&G}hv_?r7n(]Rğ"A*9$njveD@lŬԩ^"2fςP[A81̺getSV_w)+}K:MTT)7*w@bV%7JbЁWcUFڃ|yoH-)G2ED|)'_F :_:5Cuy;vUfYV+1ND"(2ȈY1faُdڐca\s6%|ȥx9M_Cw&( d#E.1wu"ӁyNuKSvRI4Z؆m:"]t0Dq8#<҉#3=PWS5աooIz5H94jlR)X(*n%[3ZecKLzf{+2BudQ*SxP:ر=Zt7`5mY_Y|f*FGǩQHk\+Y:/6W OTt&֊MMF)>rG^ƻtdzJk*9/q]ԁN>W啀(`5VE&kuEFtj 㝴ġ\U\3ESa`|SgxV7qT 7Ol/! Y!oo޾DBlV60K3>T_̂G|֎x~K@(Pgr-ֱ+ -yҊk!Fo*o3ɳl/4e'ư[޿:ҏu~y-bg3cV;@fOO8nsMe}QޗhF-Y5 ކ(@7/ɨ)5<ϲOQLM2KpR r$XUv&}G\_,Ȥӿ LWJR_p-$dP(c"Bf$UT;F4-TY+c X6l§=ū=~=Vҹ[Yeۑߜ\~4dL 9#ѪFO7{8H~!f{2leٱ)we7hg[TWV8M+9hW)]4fnOrTvAHfZ;MUZ^v>Q !۔KmSqajS$,*7LWIPEj7kOK^tm{פh `(˳FF!LKcQ:V85LQQ|uܱ{tLpZfY eq۰hr$}WH-0a z /Fܡ"fIRܘw5zYj>éUqwTmM/äB˭^8EըB{JKi zh5'T>diCl&xufaAJǪ&gԊJv C*L$)Е.al 'POYrR̢8oS7]\ zkbRȠWcW'׵6 Ro|Y7 S#pP,Y*v~C?rh[l4Q7~`~? PAٯ 4o`syUuM.- -:;d?;Zu]- 'T Ztܭ9KW`%ݔ+fm|]ɸgE!nin7rZTc9ڠVAEX$`'O5̴lH=T5 I~q.^I@mEx z,oӂVryg{ ]+Hǿ z 2|t)$5nL/Y.K$CqOZ]XRР(V4Xш7y%C/[iԴ8f+ʘ?f_ssghf3IDS8e>#׺jE WY0u1zIa-2 bmF`|Úz1%VP^_e+pPoUr>'nЄ<% ]> /Wm@S%j[Ki BqU)1eϹYn<ˠ1u m*ǀuaj,utDAG}>\;^RE@™I^3^VGq̐ 1}QI+с}HcDtwrkiv ]ǯPFg>W8WML/" %)]⭭``!ґVU(NMj넻~;HheYo `4܊w5&}0C=/n V:iKąM ag[,{B>ʡ葠%%T|<_ .4Yi"g>RvMK-+Ն*yY5:ơ D^yq\7^ $&p4-_^7s9xO 'h:!VB '3f2"ԠƁM=]A7ǘ^\26SRM~8~{*vj' h}fl9Yᬕgڝ9>$!Ek{;ۑA\ 92 )3#T, }Ṱ,<qNF<WoWϹKHEyjNCg{E3FWp[L%|Բ %|PX4JߥCZf%}NaeyPT\aR 5[Inc|x4UεmmaGw|.Cmd6,w6@on٪z!ޖU폫V\ȝap 2󁐃;TV(]N`7w+9V( U" (]<g endstream endobj 70 0 obj << /Length 494 /Filter /FlateDecode >> stream xmMo0 !Rz|UAa۪V&$E 6~=HUAgɯ~uo$ƛLD- t @ZcNt=YNk`T=Ro æeCڕ(>Պ AiZsn[6uc^0Xah\je?0bprOY[AKS|dۙoF)MZ}4W@{YmG;<9`;K (EytbabisbgEjq(po$}Idon-p!J m-O[L endstream endobj 71 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 72 0 obj << /Length 695 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS>u;q~:fc_0F)lGιmu f8Gӫ6b"!YUe.`M{My?IC4}+̝l/Bj*{pϻƲO('$ *{>J-9_eQ"V$)MP:^9 ^` br @ {@(\,RH&ti m+3ԅ ,;F$БzFFieD(0A1a8yΠFpnù[w6p@ )9r9b_ia|F-(:(nQHY^`nA|n(戥K}s\}sԑoA&vqc⠦ YK^ʛ!_my_)=^ ^{TGRw1RDž'xJzImi9j'pͽܳ/-_Z,N_: ~iyY2q,nЪ5QN Y58.] endstream endobj 73 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> stream xmUMo0WxvH UdC۪TBb B8߯{ .@=/ۙڽs{K;K.k6/k+[M'ҷ>dyӔKe'$cS`vfSfK}fƁVGGf\bu<19w|擬CTAW $rG]IyMsh$aW7y̟u? sK-`θtJ!'c83?NaO<Dg!;IX 0z)rЃ@kpBQ]^Z7! / U <ɉ#W m/%]cX! gȀhID8QN~ACT/sQQRs 穅ύ>7: F+}n4eE=zG~<6OɈy2kLd>O&y2ϓQ>OfdV>OF<dR'<>O)yJS*}𗏿tx>z{O->tՍ]*3>cC~ endstream endobj 75 0 obj << /Length 900 /Filter /FlateDecode >> stream xmUMo:W5?$R. d9M eCkmCp;;w~>|3E_?O]5߶w]Occ]=~?}Oyh9%?۹׬B|Ɯ>);vw%g43>\ 6 EJ78 1{~`W(-;]%=xe_,b+-O;q\L}UI--=BKE1p[! Mߊyu>.N5K)Wb٬8i[_uʕMzQ)V(Txޢjy!Z2P="Zd0\ÃGR\).2*Шa!U,H`+j.5Nα@VK-x%3%AYӀzΚ>kP#5m0Woþj.ZT$X/)n)#Wo(oRZ $Kp4Z-b\1ܰJ P"GXQi/8k^Zq:Zs9dB )sL-7xJ`aɽ)f$1 dъcCZC<73JgznHȰYɚTa,_-O87}KԴܗLloK+gJ.GZyVc48Wt]:P~`rZq.n1] S/Pu7Ue:?&?!d&1yHn5)yғBx#1ޞ]Go׏M?X endstream endobj 76 0 obj << /Length 900 /Filter /FlateDecode >> stream xmUMo:W5?$R. d9M eCkmCp;;w~>|3E_?O]5߶w]Occ]=~?}Oyh9%?۹׬B|Ɯ>);vw7{>oaI> ѲH8U/RǾ0ñ_x0ӅxBiE.͏S=/b_ixމbc4fi|8EXD_R4.GRQhV̪xvqڎXJfUıkM;rͭSlҏ֋jU,N2@ ",   T[<5 1"àcvG@mg K | +T|5flxZ1YP^ꠦdb}[ה_Q>kUbw88]k|'%Ǿjց{ g䈏rsqk:n87xIue.Aft0!?4ɳ4mFtӔ^z1?z .~lP}L endstream endobj 77 0 obj << /Length 867 /Filter /FlateDecode >> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5Fk=iL4RWOlJQn8N[?ˮ-;SݾkQP,#z7o;]j'OӇuþ{Qן x|utX|]ߙoGB;76݋ Z/ԼL)]z+Q&)H8@hcReT\`^QqJƒXQh)5HK |6 b.fh\e`bsN[sS9ӺuSrk4"nXCA8%ľFp O<cǘ,⏜x! g!aM4cnGym: C[1Flx L^"K~2&NCC&^к䅙` YecO{"CgcY =9O('=g)YB|֙Bs:S|uF:#e~,٢+>G+>3qgegK+>c]+>O+>G|FV|~+>Cѻ V|B|ƺ ~!>_Sϔ+>B|&LOrBG/}XTK5?)Nkx$sy儢 G5. &&s'sձ?"Ƌ:Z endstream endobj 78 0 obj << /Length 867 /Filter /FlateDecode >> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5&z& h<ϯK)ٔ?pݝ2ZkXvm)85];B7gѻ9x~;a`>W'?y:o&> ݋L'/㫃Bnz_7_t|~;:ذƦoiܰ^\0zu\7g"NFsu_E07H6!L@@B@q\s *Tg ]8 i/nTvc-+>c_ZZ~Z83z3[:ޭ ߬Lg3t3-g B|B|\3gg|2?z)BXIAup*^+&#sU-'H8qɼe5A78{Y-7^=!U endstream endobj 79 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 80 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 81 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 82 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn"H73W3nj24nV~ߝo.Gם8׺v7[wVt'oҺ9p/u5s89 i<ίK)ٔ?0N[?-#SIе(TP,#z7Go7ݾK5yx#7~hp^g=a{9^(Vu{_cwtjȨS! kl֍]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}TMo0+J6*ħöUSEj9߯ IVcf͏睟ݛ{)^؝}]u:vzyu|CW$nmmΑmq5)M{`qjS5үxO%r^q &\TƦkw(:m>8+>4m="${Jљ8=tz-/nqOR|-M.nTSXlDmqb]goo*co߭r#el[⌷L @ baomBҽ$`$@B)@p@)p2 d Ί?a.e8s`Wg+`#)S%~8NTҌYE, (6*3FӪr44P#Yf͞hhӰCkE88+j"7G9~PpC+R2C#`p˜1q EE5=F]=7z&`qp&bð| _/cSMrΤ f/%m Ȱw \ԉCb֓x5cfw(:Kzgqf1iXg3Np y/hHS>W#/5ferTapC w=衡xz* endstream endobj 86 0 obj << /Producer (pdfTeX-1.40.25) /Creator (TeX) /CreationDate (D:20240320135139+13'00') /ModDate (D:20240320135139+13'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> endobj 20 0 obj << /Type /ObjStm /N 52 /First 410 /Length 3290 /Filter /FlateDecode >> stream xZ[S9~nMjݥT f M*4mr_v80[[EeH}9؈Jha &%p. EV(TI(Qhe0 >-5V`aKB>g&a|F Q<l)+6 F8mӭA8", *+^~8ڛNx]>~DP ($Bj)i჈Z%ᓈjX)([(#q agX%'%UB( |NçC3T@ "N4+ TV"rJ?o׵/G@L'z .;z>sMԧx_aB}St.&?rp`fCRcR3Dݚq@8N6cv1:?,<OMh<&/gӓz!ރe y\]bLm0Z*,VڡԽԱ0mieĦh3$ÆwH!(Ћ싾B0`71aʜViq &Bd0㙇RjI/e/3xa8;zEL+n-je]#5> GeNcݭP@v '* |ӘT%uL3`,4yTEpƁM[QȤP+4肤a3KSGT pyć+)`YBg1ϳyE J<6Ni7fмPy&˝?@Q#jÒWf<& G屫>UE[6vC><)^)[Y5^E4FSDrq3eRUk48Hp6w8 ?G1Y9 3G9b6!6+< yT&9BN\ *#4Qr>"jTr--LfL{ և0N؀b "5Eغ?]QF hsYUYhc&qh-!F$rdAȠt|Aóȇ+[Ut9f1-А P*EPy!15aCTPU1G/WB}JIAMT!&B'vɑP@Բk 1{#8P0G8T8Mk3Q5r0 Vjp@thxm|g|2J9cioiLU/&r%ll L^h@+XX# -A[Ru8v DnF} wzg0?İjEI!ɐc6-kDjrb~|:HjDhꈏ2EKq'*-Q"RUTmNcof5vepzDlQRW)QfTBCFĊM3NUJ 7GZԏ QWMw%s1Obʘ<3>1S.+ksC(ÔRRFTu]g *o <\Ƈb'c:cSuFyl㰛ނy 3<3q*=ҳ)IPcQ>i~ҍ'tO&`7TX"Ug4J]$'|Z"ﺖ_ĕ5y,W` :c Qlw<-@T"**#XMrP!2%L "'<‘*<Mo v_rXcU<ת#C4rw=֍7 &~<4|׋߃=]'o~9xVUp9: Z푶N_:D |5?k쌮󋅀/\x>{dkr~YѢz 6okp1;h1Ɨ~_f!vǰ-]:}!tN'A'KXI*AW)RXjHF#wtʉl<=r4_׎vev_ 몲*Iը֪:F;My)hssja4U [WRX<߮/ h <LIHXY~hxǫ7ezMrS$IwBנ |49+ PRݭ"ԂY 뺈>xtޕ<A7 |o./2C<1y+hנSѲWn[ n Ƞo^]ݽm6^ovf Hx6A36k.d)[_`~ՃT OTKLO*n=;|T<:VIHVT hb&[Y!^u"^lQOJa7_oJu¯K4jFh.;sן-nKNet<9ggzLu`Hp a*,^-"8)H~E#I[EgS`^6Nn]܅BSΊ3ԾB)a?z{F8:Ɵ,AΧ^Qg<}IѼ_~n8_/OJvdz#DD`_ތOsqO_M b-4iܪ4.Ğ8jsqVn+҄UiTJqT!7g*"NZǖBtkQ=at`]Yɒ:IKa c7f"N/K˨ʴҤ4ԽѬ'Ld?޽cE^Nk s ᪄as w {m:YBn :tl[ %+2[l;%?tE^ZV-}\)̔Z'ۻw+~N6n #Qo)Eo~EDӫJdo#ig|;_ʣ/s3NGdeH@c endstream endobj 87 0 obj << /Type /XRef /Index [0 88] /Size 88 /W [1 3 1] /Root 85 0 R /Info 86 0 R /ID [<8E9486389CCA3A7495289177E3B52CD0> <8E9486389CCA3A7495289177E3B52CD0>] /Length 262 /Filter /FlateDecode >> stream xK+q۸]f qÆ)%K/(5 E) e&D5%ewy~~G BRqy1'fŨX fĘ#bRL)1Z{EHNԋhI$Eh"/DD]_np"6WWQ>W/Y#jW\'wֽȇ'A^C 0C\J`8~7NqgkEƸ1΍ &aVm1k<%=X? -( endstream endobj startxref 184377 %%EOF survey/inst/doc/nwts.rda0000644000176200001440000000050313517345025015017 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/qrule.Rnw0000644000176200001440000000774514073741722015175 0ustar liggesusers\documentclass{article} \usepackage{url} %\VignetteIndexEntry{Quantile rules} \usepackage{Sweave} \author{Thomas Lumley} \title{Estimating quantiles} \newlength{\wdth} \newcommand{\strike}[1]{\settowidth{\wdth}{#1}\rlap{\rule[.5ex]{\wdth}{.4pt}}#1} \begin{document} \SweaveOpts{concordance=TRUE} \maketitle The $p$th quantile is defined as the value where the estimated cumulative distribution function is equal to $p$. As with quantiles in unweighted data, this definition only pins down the quantile to an interval between two observations, and a rule is needed to interpolate. As the help for the base R function \texttt{quantile} explains, even before considering sampling weights there are many possible rules. Rules in the \texttt{svyquantile()} function can be divided into three classes \begin{itemize} \item Discrete rules, following types 1 to 3 in \texttt{quantile} \item Continuous rules, following types 4 to 9 in \texttt{quantile} \item A rule proposed by Shah \& Vaish (2006) and used in some versions of \textsf{SUDAAN} \end{itemize} \subsection*{Discrete rules} These are based on the discrete empirical CDF that puts weight proportional to the weight $w_k$ on values $x_k$. $$\hat F(x) = \frac{\sum_i \{x_i\leq x\}w_i}{\sum_i w_i}$$ \paragraph{The mathematical inverse} The mathematical inverse $\hat F^{-1}(p)$ of the CDF is the smallest $x$ such that $F(x)\geq p$. This is rule \texttt{hf1} and \texttt{math} and in equally-weighted data gives the same answer as \texttt{type=1} in \texttt{quantile} \paragraph{The primary-school median} The school definition of the median for an even number of observations is the average of the middle two observations. We extend this to say that the $p$th quantile is $q_{\mathrm{low}}=\hat F^{-1}(p)$ if $\hat F(q_{\mathrm{low}})=p$ and otherwise is the the average of $\hat F^{-1}(p)$ and the next higher observation. This is \texttt{school} and \texttt{hf2} and is the same as \texttt{type=2} in \texttt{quantile}. \paragraph{Nearest even order statistic} The $p$th quantile is whichever of $\hat F^{-1}(p)$ and the next higher observation is at an even-numbered position when the distinct data values are sorted. This is \texttt{hf3} and is the same as \texttt{type=3} in \texttt{quantile}. \subsection*{Continuous rules} These construct the empirical CDF as a piecewise-linear function and read off the quantile. They differ in the choice of points to interpolate. Hyndman \& Fan describe these as interpolating the points $(p_k,x_k)$ where $p_k$ is defined in terms of $k$ and $n$. For weighted use they have been redefined in terms of the cumulative weights $C_k=\sum_{i\leq k} w_i$, the total weight $C_n=\sum w_i$, and the weight $w_k$ on the $k$th observation. \begin{tabular}{lll} {\tt qrule} & Hyndman \& Fan & Weighted\\ \hline {\tt hf4} & $p_k= k/n$ & $p_k = C_k/C_n$\\ {\tt hf5} & $p_k= (k-0.5)/n$ & $p_k = (C_k-w_k)/C_n$\\ {\tt hf6} & $p_k= k/(n+1)$ & $p_k = C_k/(C_n+w_n)$\\ {\tt hf7} & $p_k= (k-1)/(n-1)$ & $p_k = C_{k-1}/C_{n-1}$\\ {\tt hf8} & $p_k= (k-1/3)/(n+2/3)$ & $p_k = (C_k-w_k/3)/(C_n+w_n/3)$\\ {\tt hf9} & $p_k= (k-3/8)/(n+1/4)$ & $p_k = (C_k-3w_k./8)/(C_n+w_n/4)$\\ \hline \end{tabular} \subsection*{Shah \& Vaish} This rule is related to {\tt hf6}, but it is discrete and more complicated. First, define $w^*_i=w_in/C_n$, so that $w^*_i$ sum to the sample size rather than the population size, and $C^*k$ as partial sums of $w^*_k$. Now define the estimated CDF by $$\hat F(x_k) =\frac{1}{n+1}\left(C^*_k+1/2-w_k/2 \right)$$ and take $\hat F^{-1}(p)$ as the $p$th quantile. \subsection*{Other options} It would be possible to redefine all the continuous estimators in terms of $w^*$, so that type 8, for example, would use $$p_k = (C^*_k-1/3)/(C^*_n+2/3)$$ Or a compromise, eg using $w^*_k$ in the numerator and numbers in the denominator, such as $$p_k = (C^*_k-w^*_k/3)/(C^*_n+2/3).$$ Comparing these would be \strike{a worthwhile}\dots\strike{an interesting}... a research question for simulation. \end{document} survey/inst/doc/nwtco-subcohort.rda0000644000176200001440000000166513517345025017176 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/survey.pdf0000644000176200001440000036266014576431435015412 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 1711 /Filter /FlateDecode >> stream xڍWK6W>@̕(Q--"69lh[HqPE/g87C"HDx.xŋ8,̒Sx^az+{Lldu֥&J}ROR QAXiJ:m-((|( 8OA2da{+x{a#g-\d,y#P,`^Ѯ/kՠZCC׮}, %~2O6,b6Ux pRPи4Î2GAIJ(B1o7zF޶kk\ 덬m5$5BeNQղݱMa ll>zY bBkߌaZ2-}q% Fg(:GT @Ƿ8Y74 "&lvp] E%> /~U@N!(Eb$d@U7AJ ?cic# -Mkl#$S esj!$,2H$#/ Eb{gZ_c9O+(jڪݡdyUw,sLJAnӛw` vcd@ 3e>׉>NL F#ޕNv}w Q8nVZc NvVs%yށ3 L SjY8f?cX_`>W)Rh3uh7wh׀esҵn÷P8NzYCYMYۡ ]KܘA0&hY`, AȆk"T gf`X;4}%M%/VwJ:t{f`1p'xI@4r&&bXm}͘Sซ/ #}2:0Hn !i}U8ͅ"bx$ea`2x89$?*QPQ&o碓A=Ij'a_xKkPEY1'N//nL}>$0t809bx @32Sp #&wM)w&B:f.T!FPasO*l)ـvO5Bׅ(ѡvr^rx8P^ήk1uTUp3!pc.oA?Acip _Q>֢[Zt[v#7eURWV +eHg ->@=0{U`ba´ܣb`MiHmaM?~ҘWd.i8ʮjHbٵsDy/ʼ6h{XTVA[3='bz tY3r Cn |lg  e#jaK0ړُ ۋƁiQ~. dg Z!ZJYçoUl8u.F'bbNN\3qT1mTUUnDjg.iӏ@1|8-.8c!198rAůO/m endstream endobj 13 0 obj << /Length 1237 /Filter /FlateDecode >> stream xڥVKo6W,!) @ 8H (-zHs%V\Jw/P6Ec} 3?/޼eVKX/*r d^,C۲3\RfRa*/j6i~@=9DZl7Hw\ׇ$TOuo|\3b!luSu56d<9)JQx@档~.:M9a]a[n#j+^"> {n,$Tv0,Rq+᢯$g(־5l/rV Ct2gYvxCry_$3^Whʙ,8s=LUsτ|CR3ߏH:!3 `'FePaT0fE!!LY!\0e{2Q<-"JJAڔ<amucL#JV9(>)lnnr 9pGf=Pպawο kų6g'gbsz-1쎕G"Q "³\y׼f ֔TP_2}dV*8L4 z=T }:}UfbtWVq%_ArC6`ݱ"OgGR҇oID0$<7U$6U Czg ȪgqU$b;.Ú̵=526~t|Ýi!rmjB5.$+B6wXPyJ6EIY|TbtZA.qS8*rjJl-5ai!$>77^F endstream endobj 16 0 obj << /Length 1160 /Filter /FlateDecode >> stream xڅVMo6W9@bPP ŢvC݃"ѶP}pΐ#LX"7ߤ^Yb5׫nń F+ BkQqPLu7U{qɸf4?o}Mfŀq:fsfm5j9#Š3-~xwyFy83 Mj):&*AE6jm+Nef*ۈW"nƍl+AgG|H):>F~y4n,w$I5&lJLH04{]sCWw1 nUmeue<) B ϳ?b#2wZP4qCqz| /.'XPJ \"F9㓆8t0&0ψcWAIf]seU1|*UP`I˹{̢ Lr9wgGHP>v|nL&]J{1L-*\` KJ9oZC`ګ9vnD 0/wsWma(ozݩƟu#8PZ OL<07OԷ5b X!b 2??V7\ɤSXS qLKA89A%WDZ&t )R[dnRȱ<׺rB;a܈Vc` H} ˊ)`v}#9sZrI9 }JP<{2HÈ~rkB'm2i枖HXL,Z3F-"zD> stream xVK6WDNV I=t.6RݽMm5\;вզ)9 ?={}E ADzd/$#zU+YoL)?)ћ,a^f``3(9#+Ȃ,p`Bִ-$XE܂3.9q)h gID<#1xX2df4b.7&΢$#oDg4MN8h~'p Rci@84ԿMqMEX%%vG94Q~ Zmֺ@2Ii v*u~~:8.()z:a)䁧IbktyPdQ-1iNmB;ƶM6UmD4=7vj!j7 @22bKTW6ѿѓkYxe/mwꕶIE0K|7#aj{'pthC" _ɩG rGЂ۳WDZ jLJA".pg){9YMҳ+ xwZ54^8$׽y/Zڋӂ%Aܫ8j}~lWMBzi,# ґs?( XNҌ ht F\A˗7*vBx< IA99$))<6$k$fp}g0ʼWF.THoE -(tWg{6H_q>|&8⹢9Yq};o|IO{d34˿-+_>\խ}:Y*;^kۓh;lp/ir6zޛ'1<+O`2քG#6lvM;i`/iO@D3&f̈nt}H.`S柲τ`0#ߠ z']*HptA> stream xڵVnF}WF 6@VЇ4@h%El%ߞݥ$:rw;gΙ+f8ly7cBL+CP}Vu^(.]F qL[ƥa2p`Kŷ(*73:+#N%*>/cG N{hEc&SEQ2_#qV|>ȁU9LdobǸOf6R₀HoUvnˮl@e5T]ܵiߴ/l<v(M5Zw'}܌Aۻ=xG>nB_,|w摈DBP'ׄ1L8Q1a uٯ;}ڰ Vu_g@q58o0BӶ: 'Pͧi N?tysHk1&}*ߓ.BH-,2dVË^oIK,x$DU1wBt ?PRpH};YHv%ӛU;"<-Tg˳Ϟh endstream endobj 25 0 obj << /Length 220 /Filter /FlateDecode >> stream xm=k@ w 6}N.dv0 n\|v K~{㜇zϫz zk,02) Rkt䁬C-=|otEi84?Olx:8:6V\0RRmWk(1Y|WPJlX%yr 6ͬ!x_5Bxr2~ZZo-1j"( Jͩd fG endstream endobj 32 0 obj << /Length1 721 /Length2 19473 /Length3 0 /Length 20054 /Filter /FlateDecode >> stream xlySpmlgzc۶m۶m۶mΊm[++ާSdEw?bv.*t \e1%YF3 ))@l`d0100<,-\Ɣ l M,m-j6n7777gW:'W>MM.3KS8B\N njgdhPp54X9R6vv&ə_L\fdo US ӫ L2۹8sSmjd?\k2߬ǿ-:FF x3;l?CJ?ծ66r a{[WS'@?U6ߺ[!bv0?TCѿYSKW?;jbogg-H*sҢv&ve4t2o_iC?`&e ],= t#c*!!{oZFN-3# :9ڹf/!zlsXU/TS/R2i#[X`?`_I>ƛNFbW+5F݂aˁE>dnn)PͰd]I9"3Tt #&/=ۉS꒣di}ÙR"-Xlݑb[U:k>3ê;/gIYQ`GrD<~#[Βl.s-ͳ9TB#|tm Rťh0#r_'պw7h ˟l hES0"M¯꠆&)gFӆ _cu šPx#/4 ]^-`gǿ ˂=Xevhʂ6SCu5;/ Mm.{GOJːTC]eq#"f"+_4#c&|Uw=MXA>==iW|#nX"z&L4V)hD:m,ޮacl?a'SV1PڸˑWTotuS*f`/193*#(ԶcW*sD@{O=ErϺƫ@[0Rshh Jp [XY#% ϜH@8"^r}"#H P*W bUBΙcj(SW xQE?WoڮW(sw-"Sw cFNGvWKLJ+L[:?e&AВG/pMjZM^6~rGf:j*TBosqbt OboPdD{q"[7{bRQնR NX dp Eb#UNPlE}_`>\bM_I};R=wޗcýby;' &/AW 0${,<A$P>YtAz_Hl;|Lon>g8? wS;ls(m'0`8$}7O90IV&4OY'ccے$| 1zT*iRQIgF>_;DW0.e/C:m4-Tox~:kVF sp8j26si+H{j\?]HG(7vuctr!lAAvv, Var1~2 ,&<%nO.0( `9\G}jgT p\o \Ls`i7#4oAeR dYN $ S:w?pU %"l</0He*>>՚fۖ;N%q8R2y μlt|7'( 6W,xeDRe/MM {>hMHI8i]j g7U2&BQT#}LDK俳F4$ ;SD)IƋ h1Pퟯ깗K+t/"ǎk2I2,^o,rS/v}]>GQmmH%h_@M+UG\v] "%tL=2 Y2p/ly4 ):j1Z #N13V@sC} z =ptd|Yp͖`E.כz nkԙ/ٰN}:!77+^f`=I}.5tLxL31rcw y ޓ,V.5 $#ȱF+8dɍO)/@9D'6`w/PSط)Ѵ#P37{K8 #0&zĘ$N+lt^EZ_HL}F]Q3O(&gB4/`;h. K7/n GHqO$!Oؾx 3hpp+:at.3_>N# Nk:iE[<2X@+Ljɧ =z /S ֝s\dIv, AۑM)f2L\*J$`B=cmt6k{dU[td%yÙx}y?ZJ^ ]+'OU4_h$U"q \EGoKNT۹[]@cFXf*T_bà牳0mAj}u'Ls+vd堗)K=Yk-~߳mPCQ%!ۜo(Ӝq(T12rQ]O HѢ+wE@Wp!YlkKpq<+~46J#Cз*md.}UEcW4cz1sLp!p"6mJȭ~p^ Ol zqx4z4VH> ;wh:W?;y󊑜2'TA g6`InO#Ϟ/o,o;]Ow;Q@3T9>Se}VT 4sig`3`eSCˮ̷P*ԢQłhb[iwA`~@ʎBi~ȝ$ _{}~Qp gdEm_#\6l7#ņv {UbWdvnw| l^2,/K#d|@rB aՓ*\ظ*۹c P%)&+crc9z_[с+>.rqP٫^!MTt`]QX>y+8O딍>\?.UټVHܩ.yWʚTip3owelr}˖_│uQ?w5PXl]E? Krv[ X{0Tn Pha^L ̹a7p_Otg8CJto-g&Тs? l2B%Awڮ-N1dH[a7V_ll3`BS$ZT 2kԟ94ZWBQT2foPV%N[T蓪Ls?o^ɾ4Z7>@:_;ǾC* a9]Ӑ.o +UY@dtӑ(5L*&T ]ql}t/ RYXT.OTVGe^'^˯v^p1CiA*ʸjhة.p;ztSN&UQY0M iRr tM+Z[:^åK!W0^p;s4z3A6) ]SDv$Tԉ+ʜ;dK3r,К/7 x-ťno^NX(s&dMƬԁTth㥔;xY5l/8Б_Cv PS1uGxӤ68#pݗf kL ַE~E#_c;p1w$+s&{3Jޢ\Ϙa9O .^2W_8{}jm@"kJ >N18#VID4 aګZ5F])95,p.!7|{9." 3O׹|F3RObIaNq`1KЏh W Qx`#:0LJK0[ 9?5ggi<ʯ S`o<`!L ~9V4ا`,_&Gۭ>EbVQT\Q;^;+rˊ#T\VZ(員cEL,d:LʸP\? _2uZCM77B1Kq0P#.-]~ N9 s_g&i{쉊rDY"^< pdB~{`C!+[鶚7}qP-AZI+h׈Rn13̡o.i*v a+ +QU8jА6{A,$}iՉ.|`1qAx(E=AG`NF'eȆ&;~D ݟjiNŤs)ߐ{a,V(y#xRw I\ k`d{΃P׋ " [9*}@M@T;SRS^DcE) YDK}-㝵HMȑhG0hBמ񨶅=Aya %y_s#F~8ɿ=w5)?ޠW1.XvE[w9OITIx!A7D/ܒ*(?X5\'ݱQ$-=F܂/Kxro/pU¬&9bu!ŵ!6,cntBAbb.OjA8 $a_1-K 㹝>EĴO @ AQÏ~zeIq"^+ f'q[!dYږ+D@QQjQ\L~棦)C)cF@;``t_rObM'W+ZsK_ժ^S6tej pA ++O M=t#*b&5#FFWbB3烖"'jV&']v?NIT{*8dٶG028Aeg@yjѬRp$0A QBPd`n4%-ųtgNS_LKƀkd'v♒_1c{v1 =ۍ eàY^aIP޷+K͚6KǨv`u 9Z5,~^!2O>6hYmS7.͗t¶?Po??g _ ]Ǽ>KmBn=#v{ >*KV| NvlR?)߅79D邬.*>4W; O3G?FoF.Aon[Sgށ.0va (K^QE`? KK:ڀ^WmVlyTOo:U̢Q?['F+`xo[!*t@iUǥ0Pa:|ZZ'Q_R&%n0+$Gmbi\?~7NIOW ӳve)̂ ja8`%<)7Ё5NJ|ǩʯZaڦbto7 Iw8W3SS K F#z?߁C7bl02>܎[l(@h7\[l^Ɣj@fаʃ \ f9u inf!OAQQ~h~cB/=)D)o6e\I, [$ÇgPا>ވ/GbgEl4g5rR#SYTbhO!:郌"LQlX<ژF[ߓ"?k <#!dzsJf^w$W@m!ɰ:6U6bo1BtYC4&E5 |Ԓ ~A9ۻwd(pV FdS63a[/osj+~8#2 >MZ]aLO4FQ7L=;$%Ȝ~`T" P|hLII^P1z'Al¦s+6I3)]9o밪' +Û]_Ee]m\P:m34+zxDK֥3oؼhnoU1[.K3 1ɯ]a#FZ@(Q!V((8wYK"z❎tN{{TH&|S *D4%jtFS$1_ Tq1p!M#8&Qb7H12VZq_~tqYKi6@#^ UNwٔ{HaY`?[A-(Eعj\ܲɄU~܊0ɬ6l! a2ӧ+Xe\+.,rw/)z^~/},%}'mcXbJcOp R$"\d$1wBHz3SAgdO v9P/\hֆ9jʨz9R; g/ !5P6X}22t$*n׆X}!Q# mtүbʢ|F]Mkfr._!&I+5Fb&uT԰Á?a=RQjeҙt㶖Mq=wv?S+/SaJWK:J C_rF(N(Z^`ZGkeURt):%hJǡZ+lbg.Ι4<+}8cGZ/5*f5},y͙_w? #!}Yf_RYWXyq:4xެ&1cYWK.vLRSXAY&%y Ә4))QuW=r_=MFd`(>ɤ^%v:?_%$)F8,Xr]VoJcf nI~l,:e'ؚ X08ޒz&@E%z&a39wsˡ-o=ܡP9z0|` 8J N=/ T{.mԉF/ZλI6b`R2Xk^UG9{ˡK緱M/I{nGDd؊l%N4fcrL&S]5Z5Q+OzO1c٦zPAP-%Qŷďˬ0/`XxɊY͔BR,Q Gk_}}tv ;{~^a f"\`k|0ϡ_HHuD# q|4S_%KF hQT~iG0Nu5Wy$ǤފkfP\+n]<p H% gW/JYFeO1e7Gi6C5k->' qvdF/0 I! fXd?cۮ'#"JVAz!<0#Dz#P[%wNxgJSDc_J+s͇ʽ׺xOQ)ztb:~$ :EegK!d}lX2<5bH ndۺXP(AXANJ 6ퟺx7?5l:n+qHvFN$)7:VZxo -W)7M)=n*x!<̂# z=M7os4HgޙEG! w*Յ8҇}>x)16^&2g=V"tH-%2fV'0rNk[ى꼶}jiY5!듄n D-Uau@7trw‡1O#)EUyN ?<լCŋ+8eHٶ\ K{mt(G_"sw( [s׸ZUgP}(J%R+HolwMFB/sACBX- {[o9۟մJZxіGzujY/,Ge"vN ; BsE^"v( X*cwFy@BYwM/h1Yz%v7v4ΟDiC0c9R\ WK2Z߈(P!E(yI{Ju\ᄑhi&9_#nzYy JOV·+Y00ߜnD^ vF0>'ZK gtKYOR {!۵%j[OHl w [˙l7l*¢#)D27sdH8?0+X97E7/A3扢O744]H:{aA>D=*JK#[f4fZWT2{:ͼ'Np$|-Widh2iqrLRФ7jM;`<VxrM‹R`AP]x_~SiLF|;A2ETH/|.R8~XAch"rVBN)#r&cDRSgQk햣}&"%ut{ P(cyXk01ʑ-SpmwE+<ĸ lFڒ"%{WQ7x +K$JI1A~3]nBD%pSVЗ]^uVv[>Ѕ~:[ &yr/ 7?|%/_aݠJ$ibGj銈0Gc,Kj7 eJlNgIi7Б5`cx C~dVVU|\#О[7EGS> l¶5F0H%vD[("+duG!ވ ɐM]6A*Z " G&Շ]Q37B&eaw֚Ir+ )tɀb(áh{V}ó"6*<-ҏ Kҫ{#'ڥDmm㚝;A49| lEIw![^# "`+7|%cTi|MnklB%u*Cѕ 8T3$E>Ja&Ik2&;;满k޶}4e=)F힙IWN|N<=A+ v4 ӮLH!we3ǻ:~_WЏ 9I%tQwnWmQ rXɳC)p2;abf;{kټ6{tNcW,"Y/ӌBG1Hxt+ȼ+~c$vK`gc%Ȍ(1Ӿ k jnIf#'8.!E]wZgWt˩A޹rІM):tZ>ep Fg۞UHp0xH>цoFvUaP]rKP1*+D$- ͦJ^|%Ԩ7R-r,hA6}+((HMO6t!=(AkO01ڶL>r`C& dPYh$W8:"-QA)y5 u)!Ad#蛢ؗ$k}g(aVuO D$lY/Ҹƒ;HV.Eo94G7{'N;7R+ւ#3=S2Ͷc;Dpd:iCdUg׾($:/![A-6gQ 8+vKTplPCA10E++Ecs M+*=+ ؏+ FXLjr*n%2i֊K\/211ba"8Im6npp41vLrd=m\väLD̯{S rxؙq8 "ĭ #a!c)u[7HiC\ 1Cehχ!pQ3`68zKr5ApNW=yP'C+6`Wk5G `c$Cc]g0}f"e]mos*0囥MZʣұQww[ =q ?#Ѳ;8@+ ~Aڙ3ɔzﲛb o14ؓTrpwfXS$w|px𝣕|EsOy,ՇJUV7Y1Gz6I~5Ә? Q@(/&\Og6| T͹{21oNurkL%EakVGo vL|+"w`[8(}_n,z&@A}KT IBSSnĩ3G4PɁ$~b,ksIsYбz%TwSqުuOaň#DŽn&M*a_MF HB.UaփTS"!E6G"ķjQM6Cv#L*<54|N@}H; {} qnv.Qsź@5]HIi{>zxphJ}NYdOࠖHT5[La.qlD Ȕ^xBwS5uv 2iBݯORjvp&n=q-L`A~Eut MfٜGJ5شE 2h_Ѹ@G`_v!<8u@]rId8=SG'Fy|59 #9zHck{""=‡eo'+WQP8k xA/GZC߳.dUQ 3 WօYآZK[27'p7ӵԊr(pZ*qJTSd"R+Ia 3^ .Q`=AP/_0\Mŧ@i&Ҵt*j_'_ _\VOS%\XT+,Ӆg f.N>gOegP'sZdk@An@]qgp};,#nH&AhrPq9g mg 2,}"|?- |uݒ V\!;jp-ok=e͡'"Qr^V|d)v _jXv5k&0騐 /ƄwNPKlgS}8*U#-}R2m,n̍qeOAM+¸ynLIr+Ad{ KJPu=#r״ΐi\K`5<-W͝-Jal85?B3A~-wb#ʍ5E)`S{)I b˞{Jgd`)$RD]1_JE: (mxܯ ~cJu/bs#O%D觿lz u> \!43,MMJ>;7T'P19 4tIefJ5sPy`y*0P-b7SVJ/@$y˪u~P& D?0IPA6;p4=;h|Gu';aM8,!lDz 45t{lMB ~'yop{s@zJ&!VI_0eM 4yA#2Mam$IQhfVxONh)Q \Ik sTLA AS4c?.>JJDvsē'8C<pR-)irpY^.H}5-ǫS%.FK=zFEא=߿Z3KjЭPJ2cUߊt:ZNT0s P܄CPZ=lR0}!:g f8g [kqi[ }jmQ.- o^ɒW]68 Kֽam!~8ض =xBz8PJUj( E!JF8j}*Hm@97jߌWtxLw ~mP'&vrScѲ#shc=THR_'iw'{⢊\\;V+)298@gqe|7jˏЩ{'`@V1)QDr9J X5nF%u&%p*`$`~ "Wͱ8.@Ɉ^q6Lʹ8ytVHƈ@JCv@[n sU PhYY w[j,`9|gw40"[@`6^6olTٯ֯n4w (3K0(I-D2y/ޤG2h^TH0"Ӟ--H(bGMmёz53#گ8 ( s^@Cl7{cTo!i"+hAqYA|C)DYM3yz2f{Ey/09>"T}O#BK4ϞP03pϙd{N5kߑr1\خ61b;z)%I6)$%f;~v"8ZoJ%y=!C$| iPtJW决0r|G<`p`c0jmܬdpT } p!:dЫIu&FATݑ⫝4ށuaPTYJ yck桖MEKσՕ9(gGI#x[]2ˆؖ|h{ 1Z?ʑs~M{  v]o X3LT!WW\SH~bqua- ACSO> stream xmxL]ݶ5ݥ8ŝp;wš;}Nv5X#ɦ"sQt11T%UYYTTbN@c  4l쀿6*@kJOacl94m@77nήNBT@%`ľ)i(JhR@; @d 휁ts{'Ϳ_!`trK &"MQ !Ƣ&03Ksq:k;F#F&uwČ0L ;&cgnw?Ր`4vQ4hm\]N{3@?(c[?:YU%$hr+_k}/ @3{fv6s59EA[FRF-agjo쿅JƠ?d& .N .+?DE=xL6ο/^NvC hwO@)O{Sְ~s s3F ?W{uACfwjHij&.vdZȍHGS1d? K)*-j^ 4D\Aiۚ*B]G޺d)Oqf: KUt@m'.>I`d| j,CLw !]SZ}t8׾mY`t* F$Xޡ ic:+7~1rd2~ ֔~tfꔉuQxiODp߽W!-v_O6b934wiDI6"~x&q4Q}cXEI%b| $V7kT?:S+|yj;7ɢېܙ&iׁT&p-T>|2c($CEv֦I. ؐYl5: +S W'5J3tc3ϕYSm7t1ghbŒhxVMu<\fZ(sˊ?P:P=)5]0(Y*'7~8w[qz Xu}} įY-VC*t !/0꟤x\d0$ihxPYGNa{DIn}rOs҈;0!f5L$#˥GCǿ,ժN4ui 'r?"*U1Q\fx;qIE"Ҵ putp8(djÊK)c0 }:w5g0L7Ux; s_56!DNVFXR I}4CD`З#3<}ViZuQ=켈eڨ-컓O:v/͝`;J)_$;kyFUr_^U6ˆ苈__Fwbuo%PP/p3((Z&;W ]w]% lSds}ЃixY'̚[y?I%5>'( ߐd񘮪yhsʂ&M*jZz_(cҷ 'J%{|+zvdzMRgϞdPӽ[^Z gퟢ"%lj8ƍ%%cz{]ƗA )g-MfuI7U4M_GM#Z;tm̥hHPYI;R@rv98$JqwqEz_^Mx0s1q=/(q8*M[Vw~EvAٯٷ9?ؼ~Q[[؟b95*;%7wq]_2Ut{\>M*+_|a%ŧO6f1+R{ uIq3Scf4)W }G|X BV6837ͲπLSJ(E[yޡ3f*Qv+A7'nj^M`ب: GqQHzȜ Q72TJq`ܧwt XEۛWŕV_;%W/i#F ZHܣ͜.9FߠuCUg+5󰠍+5D%VYOj-m&P43+ VRl`T_SΏ'݋%Taj}8 ׫| \& W+|S%g&,fW<~oM)k„&M{Z~94Cy*w0OD0Fh꒒5ۮsU~ot\]q7_+EBɉ[sOѾ#=^赇M}߉VGl>LV\ȡ$!QSOem0`0 3 U#@9'"V~ l?i{BvpT9c]ytBl[!^J|Ma-*͠s; >qLʪi`fquWp@ G)tVŬbB;? < = d=*㴐bQ&֝7UpbiB6}֕J RsgX f|J#Q6oO QH\s٨>#H[h! w$׶JDBiPQp}&b!z1kL~gm*O<9uJPֶ͟dlGcoJoq]R.骥bșx^7~1C,tڱz}<44DS} qbz ×x :4`+;?-#Ob+%η(aK`_0Wz9^S8KI M2dY_& x1=›8 ;~2FfUO8,S 0me*o) /_ԹG0MWM) {yrۊ1ux{^w|-Ͽʶ1qoPioљ0z%P(e$"@cy&Ae ; /gxeXô Y*!Gjy>nwःQՓ/ŏp sSTUXxم{I$WL%@y[TOͨ; Q+:l/]8|{=HZ2[P#, S34/h, %wĤEyp&l˘P$7pT+ ~w$no3{,/~V??) |Kq$;.+O ʔPY iP  h-9f⑭8(v6$eFD o>Vsn/8j-c?聯HшgVZs)v)Y^QB\#,#fS5?sԶma=g#> ,I$7B s- $S9WAhsF7CDQٗ>7Q ==O\;oNz+wyD[tӣqW4VvyC}q\(ʀy8i5+hFx@Xt4 VWLKp5'e,eBB)gIː+v!mHжKKHYy+:^v}]Fx:˔]Z(j/Y&}t͑}AB͕P~ iR.hKZ ׂٱ?aoyrkmtnA2 uSK:M|ر#ߧ [5ۦ;l,gUYTqM? )IJu&2RJzD%bC`%0l2#C:j Hj<ƥ?La}V/ߖ/&6&ă1QY1[uT* I lNKDZVH-5N 5ئ~p$X)%qoa]yiy&;k€VGĐo2^Z g-VrF@,TѶnLAL,cOىnn0ȍt통 L # `sFRS? ,B{NˇW ؃*.Tt=B&K-c2Zfm\iMb46-4&Ĵ "$j:\l?_ŚH88ZoDř|:ihgEr^UBRD現yXHI!rSA)Ng5$Dsb5<3]D760=KOB+x96#5o*ubo圛{U*@C6P*K |6O4sj2!x;MaL+ψwb/SSW)N5OroCST5Tr˸#ؚՌ%IɐM*'yfc~#Ձ?0J RȂyRp%u*ߟ'+k/v.z\ p]zo@'n S, r"|P2c6iqP_cCE4N؝K$>?cܰ/baڪk]PIE $0fLmw*;Bqj-y: y9?;?oV8q1|hE emw|2)Qa 5!tnh%uVl]h,-/{4 5:ljV]$JTBaLcTPFp=dt(>mM>CɛBpuU5қ. P/[A[8Qrӎadxݼv%̩UpYM88i]>ev(ͻ5>EE)\2jIPrIA?xIʱlCȶIYHjAz!i?x [n#!K;u1$UWTn 世1* żehiAxSw0-SNU%}?rnēK|^.QpGx5E^ ϔΝ&7 (GYz-9&(V^u;E%DClhLP!9ZZ*jв}2\_!4/1a+I!L?z=MѡU?jJ-_;+7Uvc`x`!P?P &݆ oh.L[gzRpIJ QC,N;b۴X!uʲlPsKw9Iƥ>Z$Ú{&d݉ ià&O4Hdss)W7:[>e5 oY2DaaPk)@qQ Z6jLgR#ZB_>Dg5Z,L%Pr3(}8+Z0z-F1:h-aV3s< R*GipPKd2uUp(gd9u][t=" Yrɮzu蔂}\_Tz0#]غК~2!W9 6߃#N)2IL`\Rgo˫R%y+e54ZQC*oT\o('^^T,vw-FoQi:EE#B Ie}-b#Bg¥\`tBH~YgddIԙY$p" .Yo̒\!q,xǫ'(%31'"Wpa$x \oJ:,J"t=a9ď6 ^sQ%3y 3wCeY&{g/޲@}3ey؏_ކk^\6wWl,K <|ti"QdBrp並n;2*KWzI0L[5xWj }W:7$˵˴ais?kЯCĐ#ѸjT9k05$HOGґ~7?ccɱ)~/,z46egLOFĖ,~Z<6' PYrғt7gTZ6Cr|Ne0_AO>ԭP9U+ρxyK_g x9dGpe,0 x\Ժ:v$%,lw9$L>R;) fV6G${K4iiy!|:1 )0t{ lⵝgtمx_&Dgs![j1q{9=2:A+*lF?>l厚M5 7)qW5Zr`ȉCxlnw85+>Z$1譏c $b0Q s9*eufj"9,{4X!?{fVu5)*)="kT>/p&+ `M @?6oOMB1Nr'xGRJ]=:͗ B:"`*iC29ؙePHEt M`vnCx1mū\g}o$\Šٿl:;vƕo 'amS(ePK|a#2I`&';#~7E*jiE+ҶrKp-ȀT{r?$ x v&Sqm@kV{"_k_dNJ'FQy>󋬹l+ѤEHCB܅nxq.BIz8X_OT?5^lqmG4g(j|W^/Aȗyi ^ʜM)^& y\S Ȇg2V\1 xu&W~)7K= ]gmk?~3O۾UbH @M+uS#Uk;7gBe|A{8vj|-Sn>&B:/ +KzuW\ ߧipnQտcϘp&'A9wanqxUΥR>S^ gEt2{dMRRҐ++Q=8ucIyí TN).hjz,Bsq~wΡ/4[yAc8h=CHw ov{SZfm͸BEaZf)KG۞ɬؐB)hDN:&<Ϯ.J.\ s @BHɟudћC7r"׮PlHu_u1+x!\g(oL}aݝFQ7q aѨ@~Ne2kmgN%NK(~ P+;>{ϝlEP<@4]/_HAW{g 4[Bod#ryPgh B[3bsDQ¦çQ 1@Id 7 >Y[*Cz?RFlHŭP~uϑ5=CytB|?LS3n @b\؉gQe|m}&#߳Q=TS &yeUڔ|~4?qfmEIe@L?jR}ǻ">qY*L=r{] '}WgA,UwуF1ύTl\Kzc;{ǘeo:l_<4E03JϠ>bmg>BbӍ%f)Jn<aΗwp^pX>gj{8;Nŧd \Wg. l2Ynўk.zyDr;䧾zԽ%Բ#;p'"5"Y65iW &ghNONݣ{lMoZ)R N+6{ٛyw:Py@< XV"ڒF{QRq(L4-t?꣔~ҊG9L5o&Q1| ١>p%'v0"'J[3nY[ߑT':ON!?j)gJ|.*7f&rka@bdurܯc twzc(XUIoF,Rv0b>R-k뙾eDPGPA|f1vcRu+ܔ(̈dDo4&?.5F&)G('oK u'< <4^%Q*HD_:4@7.ЯYoܭ/I_K|DKS}wy5B4?J=JkP#7q%37KfwB{uC"0Zgʲ`A*9hYN5ș|2Q3X>GÄk3/8)Ӣ.s r=2\0H,UV=}]WҒ¤Pqm!lw4S`KPOϗ8.L]Sށ R{8MLյf'l]97k(kf^CDvaHU%מx3=49VJڸ~`+#yKL@uwrnkr8l8r-󷎡P#  ~>?ɃEStD>l͢= KXYq%LAVoe |k=[+;.m[4\Pz x*獽u+>)ʨ6ITl^@½x/q?.3-n UӪF_Kyywiw_o >dFDl A߼N* 9x͙{Nx뒵&("!IWMC +j&}H %9 :#34:Fo׭q3z4y LOW<+ƣ BP8]_qN$=_:&zǢہ{}-X؂!s!\ىf൮R  5oqWRp/.r&O|5Mͮor' zbf1  ƝZHZx*ܞBչgf^A^=7U^r%Co]Yzͷv mӘ'Eior7ސ^=ҢiaƩUο/5n(#(vyg/#jB:VfbM+.9Q;^zNQ{ori+#BSMeva݊ ՐzHA鳔%H9*MR[&F6mc\u+LwcMťDoe "*_'&x̽N52K?<ݗ`3ݳT S<*EQ,nnJ%5Tz0aFIMݧc@K{W> stream xmwePܲ-H%08 NpNpww{έWj^Ϧ,iqV002$UXX̌l(b`#gK;36,@Vff 3ڄicdjikԴs4򻺺 :0:2mR` (-(RJ!`G# P q6N&vSirbGW-PAB]DRIQ(!Ƥ.4Cx&近V1M-M`sK ӿ|9 W_}@Mf.66F` 3`g vUl aZxyːq6s,$-ʖ63k?6tw?_bW 4Ed% &vs_/M SV6G ;`O,QQ;w/.v  7 5qqtC1,Y$0l`glZ+Q8UO75aA8u ¶05;'Q'wC8`,u)sDfF;@XܷfYp 8M"eĵsr2{VICKaY{CzC*5Ucl;kt BC\j8N1 y7SuѢJyƋ8Uup!$ֆGnDh0"cRBEuo Q.X 5ɥ4fsS=}\${J=tZJ!Vkjg pRekTʸ R wp(%}j|x-5EANθK("MZQk>oզ`6^ 6D;ڿVFS N郙U$rE:'?^%-p4_ 6 F':"D>G)َ B5&KCxܟ){sk5J2 촲{>m_vG;^qGz[:ΰҒLe> ʮ։U&lfg< Mcvi*׊8g[},kR3eau;cx~;`2(ӟN}̛A\$ ʗha- M WA}ڝ`Zy!sĝ^:lrSҫЂ LvcV5x eGT*=r)p ѩzC q({OxP\SCT!ZG,|m }U(|쫹puCIRm^IR n!@S}ꃝ&b?Dv:ŻuQ9JB(H+0ХJ6;s7X Y\<+HMiB-xw@ox2/5VQSI i4!LeUdp"> }`a8㢖6u ݈;F;^*2SUFqyOQ :|X;j5I VqʡmrVy>&.ty1R-s˧MUףc#L6)tVb J\L7ԽEgH(je کķ:}sZ]ehHꀈ ^E^)A 0 rA3i#pժHVA=VIY_y޽aKA ({F334MFԟ g3}YsȀoɐǑΒI%Bj~ҋ7DنwiY\{2vD/;5]8d#d 4{};|M9.,ۊI3lgXymo^svUcnfiU{< -MP/: PRC m܀7}X3)1k`Y_oYk+b4^B^JmX^s_b*2Rc¦~qG3Vr ]0Q0 }CG?#MW%އüˈxj_l3I(. ܦ6ܙ{7Oi7kJՏp-~.PZ,QnzMpEa3#eVi |%3Da[D"$0b iaf|pRUL!c{h(tiMIX[]w$H;H2uJ`;+Q}D v;Z! y{◬6_yhkjyS @#ԙV@QC6ܘEU.]p6#ux‚", SyD='ɓlSw]Cfet2O7md|YbvhFvu)t700NNVa&Uvutcnrt(Qq'+ f;XB|sh8QLxBY};0f )ӲMRwh%_0}үb&~k. F'|$Pu?<;r/zd9w.@=vЮyKq(*ж+$^fF˅}o4sga<6̾~Ƚ^Idy'ɁspmkcKlstBhQő`F,훙 O-‰:-bVx+OqL;f:X`=`PFvXb,7Uo|?ޙdRɜ-rsH@bm.Xñ z(B0 (?a♚("7jU\{kL#,3Y 7/fCif0f9Yvh1G#DJǿl⑑ HVcK3*aC5EmBFͻSpStS"F@k埁bDQ .  _T"d)cM6nl5yجg/x"Z0D aFiaS * zbC$lį}\ՒbxoRd\Zjpoԉɒ}P) hq@yT/Ap"A_8կx+2L(wRТ"WYם^+|<JVOv!f uza?+tN'd0wa,x>pc(x F肒SQچ}N$fG3ŏ4-EVͨ)t{&RK F3d=1V zs孍j v״2;O?SL0Pm|Rag_ 'T%:^'c8$,.7J:0ǏQ4#crMf2,?ydD)' )LM6YOx )\"EeFi8?vJy *[/G ODbY'*DAhpJ e,pO`ny\ɯW<Fp`*|f\L=G(q|W (X<*4囹i9f^f< b oBVj9{φDzr@tjljyn!۸T9(2Y..r(N+5/$%1ˉ(\Db(JQu2fQG+|B& OӃ~؛Ұ'7I@(ငiNdPd%)XS$Y ImA5 ʬ[RITBw/%_^38~?F 9vQ?^6< ~hi F𽥎<m-Rԅmҷ 0F 3Cnp* XIPV^͂Da%!w iY$ Pǻf,u+Y:Jx]й^';VlԕWP)ym%i" zӃD*6w)1P'GP(2Ll957.qCqaJ8.QSuyF]aNl z8 *Rl3l2MOST5VD䡱|+eO:i9D˘x8m񵲽Lt*&4B3esH9}|cf+.SK1rR[0cWn_jtk-sF޹1֗9UctOmZ:fko2o4FhuEbװMG R)^O&CĐNVer1M#!ȋϥָt+3iXoj@πiYew i/od6]a ؐ-1@uE7¯NҬZu4񥫛VƝ-Ifvw * 31oE7%RɅ>6ȁξJtGR"}da*|257 $Km~(S% /74%8*h- Oheʧ#)T$|(F&".8SV뽯=b򡱿iě|4I0]TxuZ}&#<ҿLރgx]hÇg' Y,Y_}椾h%KT%|Eh=RHz+8}%~OE֬BM+R?ý\Vׅ ,q IY'r0v4~.p '(tx'Td6b]`;W&'r?9R\0p6 @P W8οۚ̄އpyIBkG 63Z8zɶ'M1ҤG2վW%6)pƺ1q*ٝ'}o;p9O3k] p2;LwDEKQ2q(K4ܭ@Bx٪Q +vv" iBc ?)tP%]JHp=C S٫r>ȫqN ^!MRNw=fZfB8= ^Q^@)Laٮf,J5YZM?y ?dܰqGQkČ/=NJtQM]X[Ϣ-n|\n=w`=镡.q>a5lR@dl%{dv Z wmiȟV`o?ZsRʍD0*9z#*u"):#Oq(&EC]Zv2Vm-yH_pmu R > "mvP5 XL>)*ls߉ $HE'f (]爮J Rǽ|$۷G1 0u BtPEU2z#qǾ*XF3(a 24]u$ ~}bpUmJ\ab+7J'TmuАYZ٫[@r:oh6&իF-4v_a {YQ@Pøb}jDv[$<2ɽJ=]|xjymCյ #pߍw6ƒaF#7vlcPAhvQZcZLh% ; ^$Jh6蝡̬?FfR/FRi;)Bqh.=˽8䙗}NLE#ۨ"tE7c3PG/Y p_[آZ^xêTɔ>Em/s9|G) FSO-PhOѥsq`n $}[ȅd !D,>g Kffpddu\ duTn |٘/LnG /ʳkw_ 50] -YŽwz"^Xy{Y +BD5m`hud" (UixB[C?P-f"Yv9+JN!dQ%bᢱSVm0PK soDfy}aIyv7 9}ŽayʼnM/LK/c96yѺL pU4c{x%Ւ%ZVVg+Pw0O M.+Nm$: ~J'̗w+y C_WVDzp5|uaP55GhՔ7QKYh¨J+@*y].7ٹmj.!KxWO#˿=2QnU@c W6uJt/f';wMM>P^Mʗ KXR3eN lo5VR^hTޠq֞H_٦z8B4}GpLkj{ў2 %A_ɭ_M#V/iRr ^eV8͎R\Q՘BuLN&ȴ4֩Izx!]ۨ^܈ν?u.r5.]u"{Kq3376 o{Qu$G)LgUFpg(y e0h6j8@~л$(:|>ƋnҸ%7<i$9۵uՋ3kq`ltGtlB2qfђr`m} (i J s 3r%pWfQF ňa]}U5}j!v0E\qc QQG}SF[|ZEēn,۩ !"&1 i*=1tE}$S lh34Y wSۈ>ނsIl.yFR>9GOvh\vm/H@-d41XɐܦQ֖1v=aiQ UY";yT3 W3>h R{̕ui/,# wz^Z߻nߍc4g4\q*T-6Ϯ|5 ۿj{< Y#ǐΎ%w3h]['v6 M,m}m"\4H 1Xa# (dz*НRlc &<)py ?Qm=ٰ[ &G_S՛J6 J9.~UI),5&~?h i(Q[GXUp\i ;ӛe. L[y4qKk:W)TiN8'vK%E =F= >D ` x0#YH =W](% Kʯt4& Z,-x9MWJ**r_ob;8]N2Wz""@-|`{ygh#KھiNQ#X?󼼉|+iXP>XjuC +bޱ%' kteEͷWwxϲʕ> stream xl&Ͷ.ܶy۶5ힶ۶m۶=m[Ӷm۸sGET,fʪ*rbq['w;fzf& 3\ hk#jdP71(Y,LLp[;wʈB1Pu\\\]2lbp27L" rTTLlL ΆV@# ф`j01+&G`bO`Y1!qy9 #񏻍#?&FNʎRK?33h0411 7IS[v' P!5kg++9k@/]([X?٘#=7@GqM#V78ɚӄ?3ƶ6Vw RR[VmN`k` &kc7.Yw6\~?1AE@^ol @g-|HWFn>UtxLsKۍT j?B\`-zbc laxgz%uJhۑ1Q{]O 64},:d^< Qg4^+02:͘?!jn1N  wؽM@޽!#l!@#k}aI9#[VbEkG^v'Fz ԭ/5L&.bGlgP3 A"yMVquH9a}j(QQQ=g[e$Nutpg?^FUצ?;ØK?8`T x,xcbu`(- ʀFlB=V)^Ï9Š;C1pԻV {.[C' (ƃnL+8V7⬋nJgЃWI[{p{K48 UKװ6d@HS027/{-Je8z/n@W2RSi~k-9&'$VQ=pQUL?ksu4)[ ͢e7B%&LIgWԉI>q0tJΉ\f7+ȱ`YrKd?؀|kTwOg 2OgߵP&,KB4q6cCUP杀іX]]SlٴOeD} N/ΤTuI.$sF_j9H)@٫ ne:o1knǏ rj =oҏ>QqouհFrJMDuAwUwA~~#:~;Dnݏ0.8O`7uEyN껮 󣼔rTvY$t q !sB3 E/&ݻ;+UOkdt%u8Xd8l"mt Iwb?ʃd fx8C)] kR*2"X 9<63X5⪋wnϲ9GRF4|d$E| KO˘=9$<9˭td$"cY@B<r0#kЪy©X[btNihʴXv G2pQIܓm㏪wk - ;.c zd30U=E/oM[6[$Mo/# Uz,)L`"uHgB^[IYqbPhpb&QLoaֽl)nl!\Qq=V|%XiGFmHIhGwX0?E6>xnk\5-'̱676_Us,ڊZF$x%RA? axT^\;Y~ZNBM?uris|vL:q ,aWNpT߿z Z-[lb@E lO,|<֬lfRE ;J+;ֹ8!a QΞ;-L8(ʿ?*A]f$eTKoDRğo 3D80/Bj 2j$o71?+/&2à_˃N6yzr3pQ6@<AcI PygMh"]"o?v>io:khH ZK{!Jf78 :~2X#ɀ.:ۃDiTsp@R+ L ~;KA&B4z};*NѮ^?0C J=d"08N@Zq>-N U 8]\fңP)[{`I ì#y;3v"tu9W>l5Oڜ5 Hp0Ӿˬ0vɱK`v<;MYMsp0.ŃjhNce&1#xZ BA*=BUm0ن&*duj}46dlU#΂I_|p G&fjx`I+ }x"fd`Q|zI$sW%X&k#kOUytMsuwO?v3vgdJ+y:~C2W:!iCp̙/~{H,_y1>?fDΒƵH9I,yB kH׭ߦ|]G0(nf0b1:Զ.Nfqb%%Qz#ʅv 2XmLYSo_*i7719T(Wn ?RDc%G^n33>U(( pžxNMIo{ځN¾wrCuVp ZiA<&@|ޫ=X RN} AO*VR2\AjgVJ͔ M Ih ug?{Ey>Ԕm ISu~k#wN &w/YP/㐦1u%=RuE"`677ؘ>*MǺJĀϒJ׀hibiV[~s8cG)Śe&ACIODtYIgoKI=*G5! nbFjwVnaLN$\UFd̈́+߼|\0-e^fW,q`NS0d|q"BϚ>?/?QKjީ&ѐCC{RT^@ b" CPg9Z26%>VZ ԀJj{OgNz kd҄́U#g@VԼ.QhRO2}EDž\i#`_nTgi'\;[>w*7۾瑫 [b9L:Kn.Ae QkRaQK3k`H"1x!I\j C]tةG[ e"xu3l1b#+ƘG̟)^| s<9>Js9t\^F}`ׂ՟7/co|u͔> <Fi/X12aT~b`ېkt7>J#FΒՓ$GܾԺH=<h]n2t(^.q hۖh>knf`qZ)'VǾ֦08+?Y8G$`~?0E,Ub:Q>K|7-$5_D FGɰ~gk=m&:QeNK$%@5?v{pS]:Uꛙ0NaGiT~A)w P_AHW~3]շudY_mŅ j+NJټ9&}[ǭlf@8^fq8R3SBrUJTՐ顓 5]k:硬%q_2?JA@` 6V In͈\RavlU ib9 KW ˗F[VPE 88(Mhr[983Aa¿rjFH<5ѢLZ[g| z8)eBwmt~E5zAtJ٥$&$B߻˰}@$^wNhT:⭆⩗9}ㄔ٦-|J$7גpSWy9-8* IC7>PQ!(OjW|=:؈LisP8 Hv'ȅ~=s,KF2+e>V j[cV=kaSݺyDK{ڶ5,96YnN>W6T9E~vC<` LI|mޣ^3v׎594B&ߕŚfe&4u @e6=Bb 4x yk:$P eccO9i*bW8$Q{F#[Fvs~ )w%< 6j h~.jzQNTyPQ01IX=ziZ\8a> 3ˬ|m|!c:5=8L»<,f#&Lwg&eShwF4+wfiދ5j#IP*'^36?ŋn@aW>x i]o3(nBo;U˖4‘JGO f>_DMf0R=wFz0kC-b *:*ɋʒS(ز`(lkIxu15 v*/WQ¥!=g,h0̠a(&D|qWhXޡfwbrn-kZg﯂n?נP@ W5O9GQ,$}%ҍ_|/tҳ{5*#dW + ͜Δy`ޜv!/d[~mT*r>7Ef-<T)e.K;꩟4)fW~JAc]!*Z1Ublf;ZI*Nm^|k"ctP$ةZ=݂8_`62%zd&!~ҥ0 4DXІU2~!Bzy΄Tɷ‹ <;% ); p.CF*4^DJKQܸ4OsEiPHTf;g%ÓpTewUgBDݮoϲW*g/ekP}mu!c A KFlS[ΧX9b|[q@"ǰ <(F_/B4w/"Gm0귳T@qJT~ۇRĤmN~Bn2 ?:AuU߷5ĥT֚^LBau{b.iq+U<|TtčAv9F' D DH06ANr,_>CqY?Sh0ٕrk{8(|PD*)cs̳[ 蠜Ma0-qd73.ޔ\bL>U Buybgz4ˋ/X2)r[98>`|\4'gzrx&g?έGdif_B8v)`,As޳-~8L ^EIy1R~ q섦.6's,m߄AS ;hn:+p+7S1w2GIdkD"z x1Rptk*C5Y'ZYV\@ Z{ o^.g8@@z!Z)\| Y1R,in)Jʳ"48z+T m3G j`ޓݡ6dO}cmL$޻R}4AQfC sXc'DjjxWĠbCj>0gzտJSi?ˮ핪b4q-?{- !-C7;aRsۅ Ni.InLJn haWH)pn+ t8y}y &aa)pVcxIju2u2DkZ2`7Y33ΐhU% ۲2-T>0 vޠ7?+.)WO [?W[."{,83#'ߔH7%_TzNE3L8+'$x~YGoST;%}tpV_xK=Ht~ȞW]cv;,6jBeJE&VMlh(Dce?5 k{BLVaW.: zyI d2?"2߱`/kalIDX\ xbi/f:~ z3|J߄JZ7hpAP]6s >6C\xW21ѦTr2 +| W{S{ {C -pUvق{;*1]1 $OD<ֱǴVaQp:XQtGysK!CQ:BngG4!$ڬp(*0O-\h*P+*0Y<D#g3o8uBA'H Zs];cu{j aZ,o[mۘ \O->t {Au PNU*]cQ(t|n K]4S)켺 M&}Pw]3R(o96&(j67Z ,P1~ ]dv͏(1Zb([|O{PtAX^?ZlB^eJ<A/xt,p 1)O O(ݹ)g d6iҋUJW#='`~hE؀Os-(JnOY֟2R#-f&8:~֙G?&ͅ FK9T|Xby/Qg5jD@dNaߜ,37 ʪ+ߜ }bZӡ.!)mX/Mt.c|+iz# ͦ8Fl6Uoe^CaMLI˘ Jcsw}YqdҸ2G}78=D|)?1Ǐ/x")CM#ziQ. cp+XG2!/.iѓ3N_~faIa.Z7w8]0LfRZk]bmA}8@dv{gK^%F~ZP;Ř+׫-IT|F]C=d}U.Q$6{֪C=TB,_d%<R̀k ~Ȥ !ӛv~.wD0`qvNz$64(3+W [$u0;F`s ,)nUy -p|F]NxG[8>)dr~x-S3oq00v(c]E1VH(ם+kƝifxZt&ٟU1Fy_zvĊ0[cR0-1%A!P]ufxο^zCO qgE>v^J#oLuh8G95 ܳN+( p`Dz;F-z PXy:Aa5jLXop=\2,Co+w:\w4gemeM#D}g?[O(<"Qf_~,nE.)=a£::A\$G5eZGf?'k8"]#\zj!4G m3êys#]Ej(C|$^0;0ɑ_>gy7Nk-R:-z,J_gǠ$/hO\;s<#VLp\3 }7Q O"(QB%:$ 9zF|RM k,2dciQ);tQbOg^ޤ!df Će~2 j{ Y(" 4пS%c)3KKm-_|z촹k&w4G2C lɺ=YzԊ`nA=<"P҅|% [ '#Y[=\.?^{0!Tί'7EJ^+^ >lYmw%rXD3[ I$n]5#,K$1MRFJ1Mk[ŴU\O %%V# S F>"SUG-cOO!QDV$yLSyF#nNy;,ƞ/Uyg mYTR1q @dSh#} 5d pEf=x+@eByQzGm2[Nѭ@y`89"Mڰ1"r끁4BX膫5<ض@\&~|"攘H kE7|UI ـg7ESkmgQ}W 5<mHL^OWn>+˶s%a!04B% O3ph&"H@W!Nak뻼Q>r&iK-1 U %>x%"eܺ ka@wr"Y?|F7-1 dB#2byh:T\{,'mdOʐޮ;^Tח?#(RpKp f.I!zDIu#D3釩yut6m1Lj)[ж·46µ6ZX`cײO gWS㘸eHϵu#w J vf/Ls Ąt.GȔ:ѽ7O\l^ףnwb@ iqb5Ac#1ȈiO.Z1xҋ`E0UvXV̰Gf{>i'CG@Z$HF)L츳8cJP6bF4= ɦ.{vǵ3\#m &ܵEwΞ9 lX޸Fc,X~ft.cw}]{EnI컚jaq5>A9]x_k( \$uszL@`{y^(n"/zw1Eږ2ZNLF 5y*+͠k iӑ VBݠ6b8̵N<$ Q*DmL,k6_W^3l i뽙FC62?FˇV[ʼ-Bcx)= ]Bwa"~Qtma/ :%.zO$܁hr2Εfb=kpFYukvԆu ^wj%Fvݤ;f&I&%up(Gak-̓i; RXB4890N"͢d동[6m,~2G#/<*v&i~zwR'8a sȲ4X"~iZ61ZP pu[hL*ʀx8BUӫ~&acmB2I?5l.P*i) ~/}džPwF,"aݶ xb4x_:130L G!uB?^6MqO'qlyP|fNR@ spx\orTۛ[-n1t!h5G%\#-8ۜg/=-."Ryxμz>>'Gp`4,1_l^g+f!ԏ'й)ץCV46Y($;h 4RydG0 9<,[GqdcabCȂTMyũ3;6^GE*fԜr$9 pbh䘲vA rdz~vk{d-'s sz;`WpX[*k'/ЁG=8{+:%Zlߛ@Ƒէ}cISs@@8_M?R :`GZpDNU'YYXTp8h~Wisړ"~<6]gv*sV=n+!'Q6poKh}&Pptokm B=CM{\7hump Jq nqmN=kHxZXx"e;&&ͲQ̊f3W˲\-MrX 2Y:"BYeMA"YDc ބp'ϿE{֟uA˩˪CG%di+8].A0(^J5GCiΫw:F\sl8QkN%k*wdso+_i8R=> rA#6g<7g)?<;UrݽMbZRSxpr;aa= w>WuRmJ#1//K@s;:AyN]+~dn'p_(4ނ|;*9*W4r4aM[0/bMkpWl&$vbCT,!)42 ,TqƟ#Ԝ+G)VTAkH(pxo GմxBXT 3aUJƋA=܎PMڧg!է)o J_ krjl\bC##|hiIXtýK7|Xt-Y[+;- n g؞ 18hc-;\?_},k0g!v_m{z{z(|?%9xL¶rh4Uq(6բDJ (R$iz,~Ҳmǵ,":|wWHݭOَ *F=,k˛p56'[Q n0SK#5Ɂ/0`MUBn~Ր"EgH9بDLZJU}S2B} YHS#&ƖZp}w" 8Vj@?)T}hݹ1z/ѻ]KNrNͬ?l^6{SP@Vӌ~2<4!U3"`iߴV4zFZA[ʁQa`\VGuagꖫh{BG$~kê. ~*AF!n-!Xkп`y]AmxKWICώAc% k+bL,?&΃66$D4%X"Q虇hS ^?S$]jo?s ;㧺5n XQBWfYT,2]{c ?z:(.߄xblqBQ"$iԥٔ*\!1_:eR#d"<F8484zj[!t$oG2?<{~ꤚԷz!4 >.,>YRnmSoJ-w +Ta\c0àm좸XCO!VGsq\MY߸,> mk{2EoMi݃3k%$2&o@꒛v|{C$Nf꺜s.&٩KݓJ(o/ PҗҜ;Zm7vd4XQFWV 4u[(rol İС+J=poO=C($V/.j%)d!$6ޤ䎅Mz "U)򜡙, y(/Ɏ mtQGq~Ts_ 9$ewNvn/8SӚJ7gF[5D:Gy=4#0PC \HVE@,Ӈ -Ɇ;=ɽz:F7C9*JWX8-h&h$Ѵ5lTiR ty{ʹw6.5clbcIsnVj9BT9?D|N:Ʋ8ۃy$I4gwM_Ϛ7p+se 5?a7TbNMz+&UX.gRLA'gk91. wB-B}onhc-2xIm'O37O.Zp`}ҏ)j,-Nw;=ND Kp܈w."qJeo0JS0%ᚯ;[/:sPɽo]5zKp#nɤxɻ3GޖAFG朜!c{C^Vjrjeiç&"M(KOcБmoS;7F@ޫ 4L,2I_8;" 5V wM xj㦘'^GX(e_@Ѓ b>jiFl('龶%h&9p7x$CrR X-}Vh~#ujl!mcļ["/ڝ/]w>/MzO*2tYԈ]PZum+Ioat{* +YĻmM[ 5`"(s&K$MR[3 & e3a)Lu]XdK3G{@L+c/ nJqqӋsbsxmUl纅a U UMOsCҪfAtAP 5FzCXc-qq yXLe8-7ڊK ~!%?bUKa YT_wvnϪUI /C+7~5ˆ%/*phc3gf&вKnD:o{2#^;VHE?体oou\2XL*`DqF0"3@jɦ]k:gycy3Yז,U^UsCA\Y] ]RLD HޜA)>}N>^XJWFb#)wե(2CC޲L[aPP~Mæb懧֒Zz9A]'읛FHѸk2 3wE(1ʩP(%0=n AhuR!B8F;KunqtlNC+?b|ѡ,^S[]K~a8fiGP5x_ͻ6 " @ү8n6ZI1"m6L,HmJk/ȡI7t>. BC\&(v1+$ G| g.S,̕pw^ku[TaNs/T55;7hqĖ\"6ks5HްUH"Er{g! N@T)>pA4fm-{PW{ \'mܿnY2I &Q7 n_Y9u ]XB3㞲TW[ y zT kPq鵭Њ*3[+? XOM'z&G̺F"ER){O%Rf㺞]ؽ_ vqi&b J2pTrS:\켃ՂC}|Rvph15QNF~ؕZЧC\,5^駼 4_̼>&% !k1I%ye.lw@nPmYfbԯq"fs"Ɛ.|y9VH I=zf74'x@.`2e̬aD|NGՖwC !jS/L9n5<3D$n=~%0Jv\Dv 7&y#7"}"D V{ ztt),fMϪ(*DDd fop*'KHîĔc *NMgPYT|ߑI=HswēaЧġ{#Vm*D&wb՞LFI/Al$E]tJOknq^d7ǥpUx ›0ڂy L2`F[==K 4hF}s᥺)I$lj%(&b\{ޙ.R:bgV!"?L۽8N(Ҙf_*0+3ێ}{K>d 3v;Sދ4_I~ҝجF6R ٧ּFC8zp%SvGwjD%#nU rӲÂl:W,dx[OɆ^əfab9=w3/'8ufrv 4F Tz)fT1G)Թ=w!OK)Blt8ܜ[j&WfBYݕWGF=ҩoQWRP<59rM/Ƌ&=tx8WgfE!1N;nIB3U hʠ8L+P!Tvvf@1 *pOvԺ r .V.n7LȿuQQ4,8YofiF.aS$o5I|ˤ:/^B5R!, -@&Er6nuzDO#X.r[D/jb;[eJx\¼>(B4wA_{_~4Z;F@ӝmV@ +eeȚ(Sc>,SiiӀęa@\!IXU_4zF#|dj2&lݴ@&JçTZ0l2ж'TsRa,AYmQn1>e{:%*D'94*}՘W[bvԏf>ڀ"*lؐ΋-* AR8lXV?E>Ʀ*$udB66iqtuqa/6=ҦCzW߅΀7Ѓ`a~rM ÔT͞* ( 3g Jl0;9Lv2:g\F7W$ݝ9ZQ2|N '1Z):jVχbԩ 9P4{ Ko7V(btvz 8ǡhhؘEv GxfS\eGShA/IOf`TQYvI8<lil@B ]lT>d=P͋KKGWzLOh4hsC,L9^0x.S/f<1KyOH9 6E0NPu66 )Z>(U MKD\S8RWP<)&f[$۱ +9IgVUWVUtAޠmk7 =yV֐l,/P!Yl,S]Bbb5kpH"s7Il㴖7@HX\>Ō2jZS)a$6 A+lJь@9BH6K}T!F3kv: V8JgN6UYk6SYG5X'VYגQ"^V{/$b-m=R =ī75;$:!`WIϏ?(x>(I84-m# "XȦ Rj7CT C-FuhTnrL<6 Q9ѩwD|)WJ'ACi{"J\rя'P[7w[/ňڵ-)%S:7Э endstream endobj 40 0 obj << /Length1 725 /Length2 36686 /Length3 0 /Length 37188 /Filter /FlateDecode >> stream xlc&M-\e˶mm۶mv6l۶5w}+8Ċ;vfȈlU<t \b** t0ddŽCg ;[Cg:P`ODCF(lghafLHiLo'#9! J9@(,))'NH).J(8Z*Y[XlTvlM,ɉl]:ʊ˩ ӫښHn7`$tem_Xt0&΄F3 [&ikjG?#! o RH(kgp%n=I5M?Ά5K?. '1 w_],ꀿU;[k߮=zy 9EuaQ[c; [3Be|:ﰂ? (e - %=to-!-3!#3; !35vqt:}Ob0kvi-E44ˌ+{n-MUfxw/w$ pǓSDد%$f ԰ln"3XrI9"3Fw#mǯ.<ڊSRdj}ijfC _@vnȰ +ô ,5$0DBɷ]+b6ﯘ 7uG!" ox7eo ?xT#㶞xY*;}"wg\_|u(")tEa`Fmrץe6&87WQ*,g71" ߝxwȄ!7L. Am6LlOdOCNڤ*߁ `mnnN)c̙M^I+l* `d>4g#ՏɄxji%XeCI܂*y<ť=Ƀꐓǂz1w/S`}˳&V #wJJȕE \`gXv/7nLf\vܹUa"( l̐2op#}#8ürF/SXY?Eg- ;% {ktg}&SH.?+LO{6^S0#"Y=Ҩ}6ZaH \xT a{ 4-86_qV ̒r] <SiqPn1wwaXNҊ(u%Znƙ])# ܣ?Qd?I\o)9υ7DĵM󑕜˃A/ g҆HA-xK.~@B{g11?Eab{`Uo53u)Q_vvmPxH]Ii?a^6Em'04}(-rF}GغF}x⽗)]"u*6Ī4 ̳&^PliD tLk(2ZMX!ys,!{" tx]U:*fIW5"BY ' K"Ky3穘Y]\;L P:-@QIqt0""e\ʪ3}uї/[NEv;fKvss;` ZddwZg`nQbJC=0SRH#Ԗ!O\^g]F7mKŒ!SIu=+aO4e8Bvb͞x1Iu;x5 [8_\d[r5//7MkXm""w }3Eb- է?gBQ?E}j h0+<+(୦#Ppʲ=_Y[Ad""ZvWD.єRI嶹)3rHzlc$zгa2Ku$NJl)ބMm[~ۅMۓNϥLHYy{s365%豗b:Zr>k./-q"% 菫܀mrZE5AhRG5dn?793ݰn>vĐ?4Ex}* AY4,փbKHtlȘz0|o$H?S%N Γ?tz2خZNz=ᶀ5 ,Kf,Rؖx3[_N?_= C$XVrPD¦ΧseqW?l"12ru{Ri|,Y"ύ~]4-eA'cZwv|KE>&a?\R5H poFJF]R6轲T2~`FgٚrԘZ-ؒ='`\Z6> wir>V>Td$=w=FT\_9 2}mB/^_ޤ:,o {T=tV6) eWNaextN2o|sN/W~xNQƺKs9D.liՄE<]5\lMCހDQtzSؔ֤ z~ wQku7s/.j3^`/2Yi&Fɻ#I;{cq.D C)6YLЧ.W[A[x:[W >(fHi> #Ϟ^&0n j=T-hFŸnsQ$w3XY#Ӣ\G~"FtK2-z!*wE *Q@gtڴ00Bl>F(-ŷۉiKZDQwV5Ya t%@+J˻4rm)qs;6 s#|TO7~YhHb~3lXrtb^p\(/I[meN]#$~ [G)9a[6\7LB~#MyPfhʎi{Y5*q=|%J(36,^ 쐌*6xOK,fч>2arS8r,fEϵ%>J—TkoBA-EY3uBi "s Bg*& }duqj $]/Eџ(>&[֧:TwCs.K.~~>Y΂̰ 4huDŽ;a;)[4D]'7czRp[ ml[1QP[ե %8nV$=GAv[!2ص1Hx#_͛Cf yF<,Ot<źW#⑉T ʧX^#P<07DK8VlJc \q,dO %joJ&F#HT ΀£oh͊Se7v qU/oȻij(&?}]폁]x\pj\9cHꞧ($3L|!8#ӇiJ%˰=Popy|#^MMZwtHh1X77{]P<0 d]+uQܜlm=g(ثӫ'ha ChRp ݫS-0|*FKhj9augAZ9?X;pn$Hƻe lr6 h`G[$":E;F׃ܡ*އ&X'/[Xڟ<7\M:VRpJ*vFiOFжDŜ2,o@Aq-f;AFqoUYT-HiҡNe-}^=!lpdvJ9P] J YG7l=_:DEgBAE+˝7Q÷=l#!y/O4 ftLK4g6rUUn\o9imOr$LL:y6ǯ߬YʯCq)+_oB""NNN5Nɍ ۟P} cWda,>|Y>91!9T^JND8gk3/  P6}Ѽq _/-J^B#jKjP,MoHVrQy~y"۶bOL7 (\[Yأ^OzneV9Q(T֚ep8tē/vΝ!soh?wwEI*7v17N,79%6'qk"E.+9C(+Zjˤn{JK<2 n0:nyвj9'0^PDeqcTU ^9\On S<"$uAXo MbTՀs\d㡘$BNapNC:'QS6[M\M@S.(X<)~[(.:1zbhI[)Gu>tds˜ECHίYH?846tM]SXUe`#!|*jg7e) {Ge!#o/26]o; ~C[uNqM bIz4r:tZˑUag4@)YBO4 P1\!Jy-[sPqො_̃.qLx)A*'GsrB⎾" =N#Eǐv 3c<]ePp2i^֣uN~sc nLڤ&Dχ0XQƿEٞǴҩK⟦vHO-C@(hhv")ad"dd_e" G?$ pv'kxڇ Uw%u񥫴3]*PXZ6MǾqCmDhKU@*S.SPD-جIU3KME[D>$5)-yK^oص{TԚ cw$\;v=uߟQдZVۨc{Y.r'΂a6 W֚@6T/PzaCT_4T>FsTǾ9_CHgn gm !pnh˰gQ_3;Ԥ+l:)x,J`*w[A`q4?IyPr$[XLEf oblt54m xױ1@| H!*O8$4UǮɓt7ͷ 5gQG=Π4a:4Qߝd9:k$*UfaE֘whl V\1'q&Wӽ灳/ |ͳ/iP*w,CڇS'Kb*bh#U8>9U!@Є dl͓ )|le"*C=03ykr@"xV !00**DAC3yh\\,UsrTz}-3PPsbMϢfS$8=#T&fqRҚGrѝ{e$R{F23>r+.%7.,Qv8B_$ѷ8~lzsHiJ[wg%K[R%uĥiƻg' B5 v#LN~Xv%ec&vd}]1{IڦX#n{FK bCZ7IÞoh2J)6@x]9Po}<*qg0nHDY\k@cMb.tl*HDXJ 0+~o΀:V_IרÆ,+`EWd@$"pa. p%a_4Ars!]Kvqƫ?F0~Ȋ#()^U E7w<h=1.rb -:nC;;T=]]@{uy#Dh|+Q"gL׼-R6)&D<R tWN!:̒d]9z8ȠWp7Kao7S;#%n x8 Q yLz*C`|yar n\WRU+jy2D#w;(5^z`sdH#v,2M1qo eoa6;3o*~;(󰕼zLyop;kó?%=ľ?ANDcCgQtvٳ,;ޯ+'|vj'v%7r+=!vEHt KX($XX;Z1 C}eB6]Yľ,+%fbg9p)Fbji+*Or"k?2BjHTJ8>~5ls~Mj7m+׼D2Uo %6I.Ӊl֒uX u4mͣZlġRDïj9P~ăyZ0*m~!1pyN1sco1-jU=UQ B:ED~/ETcZvXf &&:j)#.Y{w k+t{ Sl|3&-,2VRdvѽ%Ė=='I/dŚ|dOWEfXȵ +k{c">*LpE;QaCe5sC㊄GFԈZ`)(2xe$5ٯR7b-uM0RVH\Az>hQ.Sv1GZѪ-l-n|B{kD 2H!De=URx[,b'SnxQU=R]V0[ 3`IQ~'2ሏ_ g5 }(Q"F1fΛ lx*7V9fփ_PiU>WX gښM0b¼/X>*Ol/oKI!/*?>XBh L E/.1VN`",>)lAS9_l]k@PqF.ޑBlw1IL=UYA^nr݀ ݱiD,yY ff1]e[tePLO^ÖI}KqsvŸr>Iy G.ydg~´Q +=[֦gBdJ$`Z&)d7@qZߘJej#3hehFݪ`MA|§>W * ^n э.^1K [%+&ƮzXf##˂{J[-y9ʎ%yt,<\2Ѐ*g[O=ٳjtD0> :DW}c٣)[vg{FCbğvr jԎ˂_:Uu Ub9&?5/OAdnj5$01-'Ĝ|Oý$pxvi[n%@Dr }~xYo'WV? y:8Zq]+4Y{ۀ0 >Q@Y:ZoPΡ]\%AC.DxG)+eAdAP&&إU\ߎMM4+$P d=xÁU/.q( j!310y_\Y,j" g-tg;8_¨ hW >ע--+=6n{Jpˡ׺ zitOA"VD^!#F3FهEGB0UE4áڮdin[}b7.H;/_T&,/F5#Ji!BUx Sܥ-f̪?XORU>1ƛ?/OCZq4 OA{-e @D2\U1@ٙwY@p lF+Hǩ,~cڊE4 jBťvh(۬v}818l` ,9@-Vs0L8)-JiǴ"Ct˺&u1+4&l׸si1y͏2> o݃'61Td3}s]Q &=)$fUO HVC@WM 9;!JwF#xJ]"- #]ҞQG ^3gΜxl;4!D(¯ōda'v\jC7L; [grpPK(RKƃ*]ݸ77k;qlDsQ ;]FiQn `ǬfBv '?6Pz:[JbLX_yp'MUpGj#u`5: ,4'CшubB|V}>8BnwD@9Zdgx +U4fXJ&:(kS)R(h{ u&g)F8c?dC |:\1r19%t?ӭ%ׂݏۜQNYJp)N?\_~wv/]h#y-S"hVǙ `fҝY$9ۏbR<\L 6oZD`.+ϓC9oFш"i )1MmnXbZR~버GgɱԱw-;k݅YlyDkצ΢,!v|nV,0Su:j _л͓b"鎂h:;]3̓ l9$ӚzP:xC_= [wrzɼx@_!&4mP;y9c[{WQ Cp:gKyN%fl=Qɏ~Wg7>D"$Cx#hllrvK]!#톸MkgwڐE Qxpge 獘nMB"2j[A/-mm[pHrlips2}~:";zDh 3-v9Dm6UspOg G^skp˽c( S֔,Xm3#S0N ,[WRȧE|t7M)! _4g5 TIES~}`ˏ}wwD%iX@⟏Bc8;19HPY{a&[*p^nI%TeV05]qL ޴egMnEf/g:ơ߇QjZ]BB(;g3d *!*f M{m " wHƈ0a{#ਖ8tݢs PlQS5zՠ0ؑ竘=k9GŇţ3[^ cxO:- I3kG^@=UhJd#;_SIh5y&?q Ϸ-6h1&|{}@c)2d6Q񷏛LE$$dK:pu#ϟ-4qba'Z=8d}ۧG>r~LUO,@TlWjIǝ<:^ TmǑpx `AВ;=gAiMv05-^JvRG{ e tFf6ja2qdZ/P$MVu"txUd)t_j8^yb>bly*1a_ Y)^dzR٥t%c)\!hmq>e"n}eӏUZg/Ş= l{T1hאkɔT# ~ z.n/w͸CF^:dtϛ=ZXfw061+%.یzh5##?:62bOclY@$>v@mi!ݔ"  R!|ZGYe,\[bF}w)0@ϋ\8 (!._P26VvUd %r .Gܹv3x}]E019Da5]Fl}l5htƸ'K:D#ÌwI'hDwP`%йng9SK;+iI 㹖[a<)QB|nC&}2(-a~B^=!* ~ߠ/sa@Õr#xe`':& RnND$0 g I_Th驀KyZC3f럇T%!o<^?O쒡y(p# /"6#i>AJ\W&y<>li*B:; HŠ8 ӣ`:Ï_/Uu =Gr":w`~PTi'FPbplX$ڲ Uջ+^24 1jOemHW!Is9sEh96Rarl6#Ü kP_lE,?5crH3C;e]K˖X~ ӓ{">W1-M8xc,i2Rg1Ndx3Ɉt79B=iƀmm/ 276*Σq}Q@wv:isΖS h[3h(-]dӓnh# #^i\@J%qΐ-\ ZF;%dV[6Y`gVg8do)VȗG8VcLFѣ5k.Asov, Z ӾLSW#5-As/B9SPO6aҺ)3I&a}3^Q-ƥ>տLlZ>#I6G,0Օ[~+\mvɌ+4,'%@Fw[><%\%i\!v.nfV"c^#󸳧bLj/B!Vu4:. ܟ w"cEJ: :UϦ6'A  jj?G~p gxSX$ G}`.u6(GR]%e .GMND( ެF7UZVrz8Ձj!pΏh0`a }W/ ;[XX\oшskedh;sKW{ObQu %/Y4}lcY+5֙whe&Tޣ ka|%ݡyw]N=[+Հ\Ea()uaNT܎? G/\=z+ʤp{é+ǁ Hs\rsCr 7Ru}uFP3gy͊^Lb:bDH+g!ҕPôCf)hүrܱs5BHɒՊPsNr\~Mg]}ޑWD>i̜>K$4GVU袧 w?})9{74Wu,ZjVu #BGx`~ڡMH\Ȉ}HfDf4FRzQ2#NÿWqPEOL:eڔ-6#m JO js_us*w {J$2{f(J3/!Zz7u ?X9+`mF)5t/@\h Z& #$dubes,F{F!wa42\ 7: !)9p1d'-#@E!^S8;ִe"#o4恄MDwwo~| !VLA=HP XבL~-Q%z Kյ]k@XAP[1T)oTPBK*ڊLcYW/A#VoCM@00Ha*Bzc:31*گ̡U3?.iIٲe۶m۶m۶m)۶mt<EW@ay2Kfc2ԛj{i/<]&HJj]YJ)%RfO1 .g gtgZtwC9$' ::ɖX4{$BUJ w#n}XZ~{/$c`@#*徚zyNX%'~"°fmހoaSEV%Z"Hj>NP+z֐8.L }X`z*Do'H6ג]Ur3 ݆X0DV;oQxmc<.r~;);Ϣ*˯Hp1@+Sg~Z (.KdJdӛ"OB[8U]PʌzgG krS^^@I!(f9?Z%32cM^G2]m9:%Sڲl c_iߺbq3X1~WyNkzUKv& PKiϲ~vL ʋπ;x}Q!.8n0/ȈqDWX|$M1I0ǜٛBy4)!P)S3RH\] XFߓƩҐ[Ij_.\.њ,69Š(D{$9݉uB򓕿H/tH37qTl˝l6J+cG꼭_:"n&VQ Q!,- r g$؝+uw,@M+m0`<$t1 Fށ k VPWs MշIPe[Ÿgcy0M52Ot>#ՠ]yGtƥWCX/Gݓ7ޛA}`Hg1_mXo`oGeժ*жAʺ*Vq5a'{ݓ$KĤ3bIpte;?hY>ƽP*h~!' *GA+kc܄MPE:u#8kqS@y).Λ _`l*@,qIS@쥞$gpo6]/dSaex떂ITZqҭ!~!h4SܾKw(".!׉N& E`8LA?N[_h`oJYJ,C~/38>#jL*p1US>B΃ZR{̤3qBd&`Ł Ч̨e(Gr~$_ &9*C[tY67# |w0$04s<\ho5tDMزaC*?n7JAQ촞6PZ;.%UXO JqP4Dcy2˜H ȇGK-+ǹ!IвiW%H0Hѣ*/Lx'bv;vj5Ufܕ0FK%bGٛy|'G5>m|"@3K Ǻ~ĭat=K2rcK俔/sLw^ZYr0 \ġ!IFRx "zǃs5gK:zcZʄYO6mx:/{CSݬ.VDzi ~#xoy򒙲9!p3=k])!YcN&yBFUg(^QUS~g bkø vK!c-,6-Z8I Cm)ݾm< xq̌[){h!Z=rKl ڹa2MGP.3O?glJ}@&Ϋsy@nh2::^mZm@2h0J/w/d1QqшXܿڹZ,Gg9A2I.,)yE%+N|76 ȷ;(_cH#/EߢUYn*ŠzZrVЂ/.w GiiÕ 2mh9եxR7׮Ӫ64J ;Nt`!^k&:,ى0ioů^VEYPe{c=KOϯ a{^;-.ZVbl#Dz'1cwvuhčit 7_ )[Nn[~ʋǂc~aIJ;Ӎ]/Qp~,e{tk7NnH/'~w)*`CM}5R ҃7F QCu(Dr^SIhQ@1M嗖5h֭AuFaHU޲oC}ä"Y rm4бO\{ۂ( #gXd& 阜+oxV kF~@_P.->m2PNXm7%ʸR 5*.? >ëK3Yg5TɊ0^sCoUVV|'z0x  A3VOއnS|Y"YX.` ,yDdI_\| r}hB`- z|H?RU$"Z)@Jb b͆.e &܂5gYkAyٴ<i5MxmIu>qrN\U&fo7L&jY{F@z(51Ȍ0fLJG.yʙ#$OgɝY>3G A:&D-NA*\Ջnau@G-ބHB\{[xq[ _—2(ZkgAƍ:P҂ĥR<j[{_#^[4ɮ:"(N/ңrLbpD#ښָU\FۯkӢ˕&l &PH=R t W} ;G]M<;K07HHz2D;NE4$+ouH(g4+2nٓ_42w"W8B<0QҝWzȵi$w.D6!WŕٛA Am%kk-Ƀ*~ }Sބ0D~(}l#áwC6tDŽ7"EBL8EpeTWMy#ٟlUB0H@KHA/^rdRGoD}U\6^Xn{P.J $, @.Vua[}AǨQwY]Ӗ^5 $:Vk/qZNSn(6v}.MTKbFR8k՜yϔ`dxc%ͪVE!GչkjE0`Ya !Y|. CKc.坼?N*+flg=s,@A[B3z½X2ID.{f&&4 4Au('\'Y`Uk\9 \=TW])QSec y8y Cki +`0>Ǝ[, O[s߂xLVtkNU5WkcC/yzF`_g`"{M}Qf qEQvs_ PAj&!5jA+=vteBr\Ej!q/y:s*³\y|)w:{pLoXFٱ8rcd]7A# p$]w*@w'|z7hֿZV &b@?]Pp$J7iPsC^f5^!8 M툲O*Ϡ!"X䨒KDBUsvN>y9qe"SF\1:-*%%2v)3~ b'=q!h3㤄8=˨X~HTݝiK;0u @>=lrt_PWR>Z)ߕP57[_۱xw%yw0k9JQR +@2BC+W<10[R9UnӘk|_2:v߷ͣ0 `FOjycxk%;Lq YPI? ݢMSN)o"{mh݉0f&jG$#oY<>yQpSz%cNA'R NS|ٝ2'NVmFB4p֝6EY0 Jn+]o+W(tρ&!> Nn0MC`GS!x[B1g,ffC"/'vЦ&p׵tE=eMb-+y1y*[ozB6vQ-P/@ Plv8 qgOގB=i(돫行="HraaKsX\l Q\s51ERJ0Kj3uGFVW}9LSFckxOnjMOx#Uv-:Yap6]cY CG|r#ui Sr+)~uvUd8z`(mjvb9|5j2f+0>j8=[GN#]gQ+'G+59״R|ݽ .'H5uapRh[ NhH/E+k{ͯ~EyeY~-K{4&%vu?y9ިuz _d kJLW-⩨zw,/;G&) N̬>Mei}#| H 9ܫps_1B|~ j.PC//vi]FR6sD[Qz(A)BK"Iį"8!٩@£4^(,$~I1ב2Ө\RM׏kL]wk4TqʙA<Ԭz€;exY#~gHu@#0,?Uꖯ A~V?՝L%9#q-|H:Iod(ie X{0?a>ul&tQE Ĵ`H/cw呯j;|!S3B [7(WQ)FUدYd ̓0tV>fT-!Poǎ7;RNGM$d/`.GFxГ.f/.#GbnjNV OE'o.W|Qg˟Pܮ%WEęޓ2EUְPW(S?y*؆[AEExG,W7%\{""&*M>*kę}~oB􈘠ʴX0~SIe^{ܤ˽enX7Mh'`T&Lc4IӢqrO:a -FYfN]eZV<-$}#Z9'tHC+œq6"s# BX58q^ 0.o艀*1ӫ|r~47-CBzǗ9_d_"NYjbVAUl['m40mOqԝt@agjRLQdnzK4[ O2GsAS ErSm2Gy~%צ96g|<^S鶚X Z`1 Z\ܻgH&p&R;z]$4 [K{}CӫͲe614ũEF(X{zl/Ϝ/A},\ e440wT-ڋ ktRp2cUuF_#Gnɶ/^kTLmIܽ1ZЮO0u7(Q~WpC65.V +1AEl@4ǥсnag_k֪Z!!zL1!_+$\;򾛗ሺvAԬl~ŢuVn'%GB.^6e {}C%J;`1k60 6m2ુ&lIM /])PƷ-($ρ6iyv{oڢ~u_j`t3Bt V>3[P_)OIQoy/*K~G xRD,Q^]9*Y4,{P. 2;Vսq|Ze *5XM8+cڣEs|䳎*@=H) +$LEΝmӖ&\r^=cM}yH]R\XDc)ZQO?CV'9dF2U\$ `s3).ոEC\--OiK׻ߴW@FK>'Ƴ'Ѡ$8C'5}yӸ1,4()j$>U^ {>G)n[XF#\\u W&]@QIfw}7KKYcVU&6[Ko'k74it?u@c)9 &Zu$ZاdόMPf̓vq\VR1r]Gp7萢^$СP]i4zm@HAމ7yc`̽9&oV}PFo8k;0rEd֘9@Հ6NI?Ɉ Z`(de[gDo70_OSʦWǻrvt_;>Dͥq6 PAK(ZGz$j̯G b^ea8i M8F %weؤ0`?nKr4y`dP"=eh=n§bCfuc0T, 4z.:AT:(D54EϺF R ܵ hf`<3~tk}RUy9- xC߈7.pY'_1hӤ&Y(}:u47US)+NYx?-kY1OB AǠ@Zgp[X ?0#"!$=a;R!+[> xNF=MppUZ`,i6hrqN=e[`e5@v44`;x_BBÂlT@~;e0Yf rl 䧢?6,gqD< JY,mLɬtF$Ѓ`2RXwga_wJMdȖLZ[†;5}ܘx~4paV5N slLE"&‘WU RG#8XnH@|"S.>|iwh'l J]uO_x/Ko`hY U8)2N_ں\2zǔei8!e4\Ol{ EULBr!qba!)F_}wTH,a-;:rJWWjQ#5P:[Ygs}R>ɻψ_ > t>*q'kWEg \bx(! ț׌hd=fL!z䀎 " Ӊl5ƔynܗQ\TEWwh|s:p1n5Xj+K`m( 1`5¼4tk&,z2RfJבJ zoVBwSC>QU,U2C k4nc<:Ik^EcsXwLK8t לSgdBv9}e#]Tʀ6b;LdpS % a3KO̸Ƣ\J7kfѯYx.ޢK_XO+`bӐWٸfTr5=5o%B nͤ*:,#!`!VNxGau@Nk|+ ):tߺCPy@9O[nH\8|_) ;(QzD-Q Dg̸}>žK̚Z5I;#ɀYwp{r UP 5뢚'V0ʾ@l60 ^1e"=< 6m*| ˈdª306䋡%#Ƨ%nPu-S*_`{ez{-h=B:4ݩ%)VpT9T1v$xͽr:QC2|~'֭ 0N[* =zA8G1 @~O#0 8("QL 99u K6j7!ߏgY[7@_J0~`Nn 9?d |KqZ1 5Nr1|+ԙɞ":tjP$V4PsfFOT3+Ū)$E*HZ ; aycHBM 4R)I›;9.І{Elj)}I|{i ht!U\E8' +F/Š]NނUQ/U"IA&&}?*2P,i]7esuz0xskQ6CKA ,r!p[o_l X+x?&7,~Lm5lLЪ硗7~5zKVc )M]Cwł'2m/@<ɻ**Wn#z8P1_bЖ%LQG2 9J&Sk7 ;ɂմӖrjԥ͙6C~[ s ]bܜVfe{THQtBeHi *_ҏ tu/kr Dڶ(Kpv ; p($T4FV]V,"v' |?A~\K\Ly #\nfagsgXe*zȒ S OpA-ך a) &Ii3}sO=+`k^#k8ĉW9ΐA G.jg#EB F+W!Fr= ]i'!/ҡN"J8gv2jOVX6X}ilPpb ͫǕE-<eAw4j!?=Y0.:v7İvnPpE-q#cMn|t* A‘>OCTJd'J9h ԫjOfk5,^ m-H\]}7p#:+cpF&}eШ] xy3jf{)hvÙ@0]^ɰzK+;\)w;i~Y<1 ܐG_2ibB$ 1gxT*iTm\&|2:D(rG,Nz]bI@Y7 ɸv{a^maKeFčiH7iMt樟~${,NZ NjZS,gm$fbhTSbi_0TI,`/GQ:L Hy0v,"X&Qo6)ffDVTPaeHHz*؟&F/G1\oUA2טNs7@ZpD4VlA+MՓQOm[r+H Ē%yGj 30M}W*N f"{@;;v4]4t@WU)'\')̆f1iG}qbmt)zˌHs^`FFcx?;hcUFiCJ,"@#J^l c{ϸD\9yNP&eM6 {1@l+_RO: ACy ^?#|k2 --ZZ}hc$0>}PQ *y;+Nﯱb"SS^- }r[> zQ<"cGK }jԣgZ㒨Sk@ iSNmA.(M٨ri -pJTe`N"Q8b ~뒺 LPyg'|Z?Ukwˁo[E#"1IJJĽO騂})jH0#/ )P?*Ex~m.;PIg#~3: _Iuѥ{k_Hu+N0IyX%"nJW{0CPݢ:Gie rgE9n_$)1)NΤ9mI[HweZlK~f wJXDo{|q|կV cZr麆?j !!ws?n ~fQ AT,MO1sѣpTl5)+50'1T7ܡnܴxY[0^ 8T |>iq)BWǏ i~hÞ)]37Tu\)PL0汧 oaE Q['O;SZo!P4WV6ubYND_=&.y5:L0TI>gBuW@Ƕ*bWTr9yt`4{ Quύ0̇ wMA\!OZ[/<%kw \}0sVXIҍc"p˸ߴ+ E4^|`Θ%okԑs8vK.ĪH"+$:9c-6,zεZmB}U%0eV[{գE ~hQ\-8xPz5a_ 0*t f? /#1141*dDbXр.)t3lHhxLm)ӥiQpL@;B<l@_-p͸"- |~5ѷ~jZ&m܀Sal,$t[H eղ{NZ )J .8`Sof; Du4shi`5ó4$9H @Q &.C5eb:M뼥O>289mgx .Jc&ޝ<9ĺ2HުWjGh1;ՋS-^I롽 cb5fcy jȍoaeivްYߜquM]G굶]c!^F frB{I ktuIydW#PAu|a$ &մcP/KTmzdMlmbfT2`f<\4C1\vy)(򡦏~P.u9G!M!%h-L3bh[&"#] U%c/UަzY9I#;`2z oG@ys2ԏ(]xO9N=e^v"P\p-_kj %2[-/CKTâ>#wBĸRF} a߽f}4g1#e&bn3xy<ݕk훂,l^ǝau'r L:v2m:# ܤZַB{hlLM6yذMml42XZ:ۣ!c~V8 ]wGNToN{L0otU<=^ ޱEXwQ%YDnv+8=4\z"NN . ʇӥ6ӄ-5ȇBl_/!crʦ~I˚Nm.e؁6X蕚I/Pa>~{h[6讔p0j2>/F׮u6Dqg}$IwveAUi/l2K =m!KXEѓlkEN35VԢ9.^^zĕwFR6ÜԤqs.ږ\^"a/_ ۆVfOayRDE2+Dmݞc ǀ܁oaKO>HFE;!sxF%'V}.1׶А -VF2uWTP_/֘$Mu]>jΚ̓"Nŕ$ KZtQv'OetE~wj=F 'UtάYUq=2ɤ|bÖF&Ylw==(|7R1v'c62> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 43 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 44 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 45 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 46 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> endobj 9 0 obj << /Type /ObjStm /N 30 /First 218 /Length 1755 /Filter /FlateDecode >> stream xY[OJ~ϯstx/ĥQ)-&1OCN gfI[ }N{fݵ,by gLZDTLk, ˌP 4.H\32 &,zSt*RhS^eZ8Q aҞu,G1nj} 2@a?%wq)pÏ2CAϒG` ˋL/`a^]ƶ*X{P|3UfRu khT ?*IZs@e4l;U߀9@0 L,wakU~}hR.ÔyG_fS8̇RozGO\/_Rpii87u-0փčT9MD& ڔlZlOzt ff3'IcZ]s$!I4rjFRn1"$nxB/Ї*XP5* ;<lZ$ä5h\6jp%C:f/+&qKC糭 svBLP#}GE7Ž٤ 9&{}I(Q2(1;*!g _kult8d&W¾ ~x0J?O<om_7|GS_ _ } .||x;cW>|sS>@ҫW擴>ƿM*_€ Oev+^ 4ՏOw[Lo \7olc~w3#0k;x y n>Pk&7A-t 7hs7m77B;%|N^U٨B]IkZu*LQ>ncmBI.qP N.*GiY3̧d4-EJu~wW$#7t{@U!{uI[V9LG#t5H}AYlvNr9Jq?-^^:ZeXɮR`΅ySڼ\St}NIp^G CG6D>p"bB %xp3"1GY\L$,?;(ͬ#8/3Ng<'HFdBjR5X-Vej')kL#z͊ºbtdEyaYpgIu} aPB1GK2B߇P <768630B82135ACC94F93E090C5512336>] /Length 158 /Filter /FlateDecode >> stream x=Ps'Mh ؎Bc *;0) 3 gs ?(@ j*&"(ծ3M"ZEHCfWDqHĢ''ʷ}Ij@VC|jLK8n}xvO?4X endstream endobj startxref 123927 %%EOF survey/inst/doc/precalibrated.R0000644000176200001440000000337114576431432016272 0ustar liggesusers### R code from vignette source 'precalibrated.Rnw' ################################################### ### code chunk number 1: precalibrated.Rnw:16-19 ################################################### library(survey) data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) ################################################### ### code chunk number 2: precalibrated.Rnw:24-28 ################################################### sum(weights(dclus1)) dim(apipop) dclus1<-update(dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,dclus1) ################################################### ### code chunk number 3: precalibrated.Rnw:34-36 ################################################### cal_dclus1<-calibrate(dclus1, formula=~1, population=sum(weights(dclus1))) svytotal(~one,cal_dclus1) ################################################### ### code chunk number 4: precalibrated.Rnw:40-41 ################################################### summary(weights(cal_dclus1)/weights(dclus1)) ################################################### ### code chunk number 5: precalibrated.Rnw:45-50 ################################################### precal_dclus1<-svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc, calibrate.formula=~1) precal_dclus1<-update(precal_dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,precal_dclus1) ################################################### ### code chunk number 6: precalibrated.Rnw:55-64 ################################################### (enroll_t<-svytotal(~enroll, dclus1)) (enroll_m<-svymean(~enroll, dclus1)) SE(enroll_m) SE(enroll_t)/6194 (cenroll_t<-svytotal(~enroll, precal_dclus1)) (cenroll_m<-svymean(~enroll, precal_dclus1)) SE(cenroll_m) SE(cenroll_t)/6194 survey/inst/doc/domain.R0000644000176200001440000000441614576431426014744 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/phase1.R0000644000176200001440000000367313517345025014653 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/survey-sae.html.asis0000644000176200001440000000011314576426776017303 0ustar liggesusers%\VignetteIndexEntry{Small area estimation} %\VignetteEngine{R.rsp::asis} survey/inst/doc/survey.Rnw0000644000176200001440000000670613517345006015373 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.R0000644000176200001440000000357214576431431014275 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-sae.html0000644000176200001440000121626014576431424016344 0ustar liggesusers Area level and unit level models for estimating small area means

Area level and unit level models for estimating small area means

In this vignette, we demonstrate the use of basic area level models for small area estimation, as originally implemented in SUMMER and adapted for use in survey. The models implemented in survey include common small area estimation models, as outlined below. A in-depth review of our approach to model-based small area estimation is provided by Wakefield, Okonek, and Pedersen (2020).

Preliminary

First, we load the necessary packages and data. The required package INLA is not available via a standard repository, so we include code for installation if it is not found. The survey package will be used to generate direct estimates, while dplyr and tidyr will be used for data manipulation.

library(survey)
if (!isTRUE(requireNamespace("INLA", quietly = TRUE))) {
  install.packages("INLA", repos=c(getOption("repos"), 
                                   INLA="https://inla.r-inla-download.org/R/stable"), dep=TRUE)
}

Area level models

Artificial poverty rate example

In their vignette for the sae package, Molina and Marhuenda (2015) generate an artificial dataset on income and other related variables to illustrate the use of area level models. In this example, the objective is to estimate prevalence of poverty in Spanish counties.

data("incomedata", package="sae")
data("sizeprov", package="sae")
data("sizeprovedu", package="sae")
povertyline <- 0.6 * median(incomedata$income) # 6557.143
incomedata$in_poverty <- as.integer(incomedata$income < povertyline)

The incomedata data frame contains information on 17199 observations of individuals in 52 Spanish provinces. Income values and sampling weights are provided for each individual along with covariate information including age group and education level. Molina and Marhuenda (2015) define the poverty line and calculate an indicator variable (which we name in_poverty) with value 1 if the corresponding income value is below the poverty line and 0 otherwise.

Direct estimation with sae

Before considering model-based methods for small area estimation, we compute direct weighted estimators for the desired small area means. The Horvitz-Thompson estimator of domain means is given by

(1/Ni)∑j ∈ Siwjyj

where Ni is the population size of domain i, Si is the set of sampled observations in domain i, wj is the sampling weight for unit j, and yj is the observation for unit j, for all j ∈ Si. The sae::direct function also estimates standard deviation and coefficient of variation for each domain. Note that Ni is assumed known and is provided in the data frame sizeprov. The domains of interest are identified via the provlab variable.

We can use the survey::svyby function to compute the Horvitz-Thompson estimates:

incomedata$pop <- sum(sizeprov$Nd[match(incomedata$provlab, sizeprov$provlab)])
design <- survey::svydesign(ids = ~1, weights = ~weight,
                            data = incomedata, fpc = ~pop)

# estimate area totals
svy.DIR <- survey::svyby(~in_poverty, ~provlab, design, svytotal)

# calculate corresponding area mean estimates
svy.DIR$prov_pop <- sizeprov$Nd[match(svy.DIR$provlab, sizeprov$provlab)]
svy.DIR$Domain <-svy.DIR$provlab 
svy.DIR$Direct = svy.DIR$in_poverty/svy.DIR$prov_pop
svy.DIR$SD= svy.DIR$se/svy.DIR$prov_pop

Basic area level model

The basic area level model, also called the Fay-Herriot model, treats direct estimates of small area quantities as response data and explicitly models differences between areas using covariate information and random effects (Fay and Herriot 1979). The Fay-Herriot model can be viewed as a two-stage model: in the first stage, a sampling model represents the sampling variability of a direct estimator and in the second stage, a linking model describes the between area differences in small area quantities.

Sampling model:

Let θ̂iDIR be a direct estimator of an area level mean or total θi. The sampling model treats θ̂iDIR as a noisy observation of the true finite population quantity θi:

θ̂iDIR = θi + ϵi;   ϵi  ∼ind  N(0,Vi),   i = 1, …, M

where Vi is the known sampling variance of the direct estimator θ̂iDIR.

Linking model:

θi = xiTβ + ui,   ui  ∼ind  N(0,σu2)   i = 1, …, M,

where σu2 (between-area residual variance) is estimated. In this basic Fay-Herriot model, the area-specific random effects ui are assumed to be independent and identically distributed (IID) between areas.

Below, we provide a quantile-quantile plot comparing the direct estimates to a Gaussian distribution. Here the observed quantiles align well with those from a Gaussian distribution, which lends some support to the basic IID model.

par(pty = "s")
mu.DIR <- mean(svy.DIR$Direct)
sd.DIR <- sd(svy.DIR$Direct)
qqnorm((svy.DIR$Direct - mu.DIR) / sd.DIR, main = "")
abline(0, 1, col = "red")

The svysmoothArea function adopts a Bayesian approach to inference using models such as the basic area level model, carrying out computation via the INLA package. The svysmoothArea function computes direct estimates and then produces smoothed estimates using a Bayesian Fay-Herriot model. The main arguments of interest are:

  • formula: Describing the response variable and any area-level covariates
  • domain A one-sided formula with the variable containing domain labels on the right. The domain labels variable should be contained in the dataset used to generate the design.
  • design: A survey.design object containing survey data and specifying the survey design.

In addition, other commonly used optional arguments include:

  • adj.mat: Optional adjacency matrix if a spatial smoothing model is desired.
  • transform: If "logit" is specified, a logit transform will be applied to the direct estimates and an appropriate transformation will be applied to the estimated sampling variances before smoothing.
  • direct.est: The direct estimates may be specified directly and smoothing will be applied directly to these user-provided estimates.
  • X.domain: Data frame of area level covariates.
  • domain.size: Data frame of domain sizes used for computing direct estimates if domain sizes are known.

Other optional arguments can be specified to change the priors and are described further in the documentation.

For the artificial poverty rate example, we fit the Fay-Herriot model and obtain the following smoothed estimates.

# specify known domain sizes
domain.size <- sizeprov[, c("provlab", "Nd")]
colnames(domain.size)[2] <- "size"

# fit model and obtain svysae object
svy.FH <- svysmoothArea(formula = in_poverty~1,
                     domain = ~provlab,
                     design = design,
                     domain.size = domain.size, 
                     return.samples = T)
svy.FH.table <- data.frame(
  Domain = svy.DIR$Domain,
  Median = svy.FH$iid.model.est$median,
  SE = sqrt(svy.FH$iid.model.est$var)
)
head(svy.FH.table)
##     Domain     Median         SE
## 1    Alava 0.23394447 0.03989036
## 2 Albacete 0.15516988 0.02843149
## 3 Alicante 0.20488000 0.02071508
## 4  Almeria 0.23808371 0.03515380
## 5    Avila 0.07854126 0.02392518
## 6  Badajoz 0.20805100 0.02200545

Using the plot() method, we can obtain a comparison of the direct estimates (with corresponding frequentist 95% confidence intervals) and smoothed estimates (with Bayesian 95% credible intervals).

# plot comparison of direct and smoothed estimates
plot(svy.FH)

The SUMMER package includes functions to generate additional diagnostic plots based on samples from the model posterior. The SUMMER::compareEstimates() function generates a heatmap of the posterior pairwise probabilities of one area’s mean exceeding another’s mean.

Spatial area level model

The svysmoothArea function also allows the use of a model with spatially correlated area effects, where the default implementation assumes a BYM2 model for u (Riebler et al. 2016).

In particular, under the BYM2 model, we assume u is composed of an unstructured term u1 and a spatially structured term u2*:

Here, u1′ ∼ N(0,I) is a vector of iid Gaussian random area effects and assume an intrinsic conditional autoregressive (ICAR) Gaussian prior for u2*. Under this parameterization, σu2 represents the marginal variance of u and ϕ represents the proportion of variation assigned to the spatial term.

BRFSS diabetes rates

Below, we provide an example using data from the Behavioral Risk Factor Surveillance System (BRFSS).

data(BRFSS)
data(KingCounty)
BRFSS <- subset(BRFSS, !is.na(BRFSS$diab2))
BRFSS <- subset(BRFSS, !is.na(BRFSS$hracode))
head(BRFSS)
##   age pracex       educau zipcode    sex street1 street2      seqno year
## 1  30  White college grad   98001   male      NA      NA 2009000041 2009
## 2  26  White college grad   98107 female      NA      NA 2009000309 2009
## 3  33  Black college grad   98133   male      NA      NA 2009000404 2009
## 4  25  White some college   98058   male      NA      NA 2009000531 2009
## 5  23  White some college   98102   male      NA      NA 2009000675 2009
## 6  19  Asian some college   98106   male      NA      NA 2009000694 2009
##   hispanic mracex strata             hracode tract rwt_llcp genhlth2 fmd obese
## 1 non-Hisp  White  53019        Auburn-North    NA 2107.463        0   0     0
## 2 non-Hisp  White  53019             Ballard    NA 2197.322        0   1     0
## 3 non-Hisp  Black  53019          NW Seattle    NA 3086.511        0   0     0
## 4 non-Hisp  White  53019        Renton-South    NA 3184.740        1   1     1
## 5 non-Hisp  White  53019 Capitol Hill/E.lake    NA 3184.740        0   0     0
## 6 non-Hisp  Asian  53019      North Highline    NA 4391.304        0   0     0
##   smoker1 diab2 aceindx2 zipout streetx ethn age4 ctmiss
## 1       0     0       NA  98001       0    1    3      1
## 2       0     0       NA  98107       0    1    3      1
## 3       0     0       NA  98133       0    2    3      1
## 4       0     0       NA  98058       0    1    3      1
## 5       0     0       NA  98102       0    1    4      1
## 6       0     0       NA  98106       0    3    4      1
mat <- SUMMER::getAmat(KingCounty, KingCounty$HRA2010v2_)
design <- svydesign(ids = ~1, weights = ~rwt_llcp,
                    strata = ~strata, data = BRFSS)
direct <- svyby(~diab2, ~hracode, design, svymean)

Below, we fit two versions of the spatial area level model in SUMMER. For this example, we apply the area level model to the logit-transformed direct estimates (as specified via the transform = "logit" argument). In other words, we use the following model:

logit(θ̂iDIR) = logit(θi) + ϵi;   ϵi  ∼ind  N(0, V(logit(θi)),   i = 1, …, M where V(logit(θi)) ≈ Vi/θi2 is the sampling variance of θ̂iDIR. The linking model is then logit(θi) = xiTβ + ui,   ui  ∼ind  N(0,σu2)   i = 1, …, M,

If we change pc.u and pc.alpha from the default value u = 1, α = 0.01 to u = 0.1, α = 0.01, we assign more prior mass on smaller variance of the random effects, inducing more smoothing. Note that in this example, we include no covariates to avoid having to introduce additional data.

svy.brfss <- svysmoothArea(diab2~1, domain= ~hracode,
                        design = design,
                        transform = "logit",
                        adj.mat = mat, level = 0.95,
                        pc.u = 0.1, pc.alpha = 0.01)

The SUMMER::mapPlot() function can be used to visualize the posterior median estimates and uncertainty estimates.

Unit level models

The nested error model, introduced by Battese, Harter, and Fuller (1988), uses auxiliary data at the unit level.

Nested error model: yij = xijTβ + ui + ϵij,  ui  ∼ind  N(0,σu2),  ϵij  ∼ind  N(0,σϵ2)

Here ui are area random effects and ϵij are unit level errors.

This model assumes there is no sample selection bias.

Corn and Soy Production

The cornsoybean and cornsoybeanmeans datasets contain info on corn and soy beans production in 12 Iowa counties (Battese, Harter, and Fuller 1988). The objective here is use satellite imagery of the number of pixels assigned to corn and soy to estimate the hectares grown of corn.

  • SampSegments: sample size.
  • PopnSegments: population size.
  • MeanCornPixPerSeg: county mean of the number of corn pixels (satellite imagery).
  • MeanSoyBeansPixPerSeg county mean of the number of soy beans (satellite imagery) pixels.

The variables MeanCornPixPerSeg and MeanSoyBeansPixPerSeg provide the known county means of the auxiliary variables.

We load the sample data:

data("cornsoybean", package="sae")

Next, we load the population auxiliary information:

data("cornsoybeanmeans", package="sae")
Xmean <-
  data.frame(cornsoybeanmeans[, c("CountyIndex",
                                  "MeanCornPixPerSeg",
                                  "MeanSoyBeansPixPerSeg")])
Popn <-
  data.frame(cornsoybeanmeans[, c("CountyIndex",
                                  "PopnSegments")])

The smoothUnit function provides the ability to fit unit level models with unit level covariates for Gaussian and binomial response variables. Below we use the is.unit argument to specify a unit level model and then provide the column names of the unit level covariates in X.unit. Finally, the X argument provides the area level means of each covariate for use when generating predictions. Note that we specify a relatively flat prior on the variance of the area-specific random effect (the arguments pc.u = 100, pc.alpha = 0.01 specify a penalized complexity prior such that P(σu>100) = 0.01 where σu is the standard deviation of the area-specific random effects).

cornsoybean$id <- 1:dim(cornsoybean)[1]
Xsummer <- Xmean
colnames(Xsummer) = c("County", "CornPix", "SoyBeansPix")
des0 <- svydesign(ids = ~1, data = cornsoybean)
svy.bhf.unit <- smoothUnit(formula = CornHec ~ CornPix + SoyBeansPix,
                           family = "gaussian",
                           domain = ~County,
                           design = des0, X.pop = Xsummer,
                           pc.u = 1000, pc.alpha = 0.01, level = 0.95)
summary(svy.bhf.unit)
## Call:
## smoothUnit(formula = CornHec ~ CornPix + SoyBeansPix, domain = ~County, 
##     design = des0, family = "gaussian", X.pop = Xsummer, pc.u = 1000, 
##     pc.alpha = 0.01, level = 0.95)
## 
## Methods used: direct.est, iid.model.est
## 
## direct.est 
##    domain     mean   median        var     lower    upper method
## 1       1 165.7600 165.7600   0.000000 165.76000 165.7600 Direct
## 2       2  96.3200  96.3200   0.000000  96.32000  96.3200 Direct
## 3       3  76.0800  76.0800   0.000000  76.08000  76.0800 Direct
## 4       4 150.8900 150.8900 610.238739 102.47299 199.3070 Direct
## 5       5 158.6233 158.6233   7.430247 153.28077 163.9659 Direct
## 6       6 102.5233 102.5233 430.314438  61.86580 143.1809 Direct
## 7       7 112.7733 112.7733 213.115805  84.16083 141.3858 Direct
## 8       8 144.2967 144.2967 665.975547  93.71685 194.8765 Direct
## 9       9 117.5950 117.5950  87.414716  99.27015 135.9198 Direct
## 10     10 109.3820 109.3820  40.331533  96.93483 121.8292 Direct
## 11     11 110.2520 110.2520  24.148695 100.62048 119.8835 Direct
## 12     12 114.8100 114.8100 178.260890  88.64166 140.9783 Direct
## 
## iid.model.est 
##    domain     mean   median       var     lower    upper                method
## 1       1 123.7876 123.2013  86.06266 108.32013 142.2333 Unit level model: IID
## 2       2 124.2452 124.7868  97.86504 104.93144 142.9875 Unit level model: IID
## 3       3 110.3233 111.5757 102.53029  88.20383 126.9989 Unit level model: IID
## 4       4 113.6742 114.1331  71.81986  96.38425 127.9440 Unit level model: IID
## 5       5 140.1470 139.9905  75.00325 123.76649 155.1843 Unit level model: IID
## 6       6 110.0132 109.4203  57.25731  95.71681 124.7636 Unit level model: IID
## 7       7 115.9491 116.0076  57.80478 101.21077 129.8307 Unit level model: IID
## 8       8 122.6541 122.4973  55.39583 108.86131 138.6098 Unit level model: IID
## 9       9 112.6702 112.1757  48.62457  98.12156 127.7731 Unit level model: IID
## 10     10 123.8395 123.8251  36.20162 111.43605 135.8105 Unit level model: IID
## 11     11 111.2287 111.9254  44.52737  96.51444 123.5814 Unit level model: IID
## 12     12 131.3522 131.1526  35.26051 120.12848 142.9651 Unit level model: IID

References

Battese, George E., Rachel M. Harter, and Wayne A. Fuller. 1988. “An Error-Components Model for Prediction of County Crop Areas Using Survey and Satellite Data.” Journal of the American Statistical Association 83 (401): 28–36. https://doi.org/10.2307/2288915.
Fay, Robert E., and Roger A. Herriot. 1979. “Estimates of Income for Small Places: An Application of James-Stein Procedures to Census Data.” Journal of the American Statistical Association 74 (366a): 269–77. https://doi.org/10.1080/01621459.1979.10482505.
Molina, Isabel, and Yolanda Marhuenda. 2015. “Sae: An R Package for Small Area Estimation.” The R Journal 7 (1): 81–98. https://journal.r-project.org/archive/2015/RJ-2015-007/index.html.
Riebler, Andrea, Sigrunn H Sørbye, Daniel Simpson, and Håvard Rue. 2016. “An Intuitive Bayesian Spatial Model for Disease Mapping That Accounts for Scaling.” Statistical Methods in Medical Research 25 (4): 1145–65. https://doi.org/10.1177/0962280216660421.
Wakefield, Jonathan, Taylor Okonek, and Jon Pedersen. 2020. “Small Area Estimation for Disease Prevalence Mapping.” International Statistical Review 88 (2): 398–418. https://doi.org/10.1111/insr.12400.
survey/inst/doc/epi.R0000644000176200001440000001157314576431430014247 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/domain.pdf0000644000176200001440000045232514576431426015322 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 1763 /Filter /FlateDecode >> stream xڍˎ6Q ؊E-RĽ遖[r^ጴWDr8/[e{W"Hj{WFʳv3k:lPQYF'וu7mJ8OS'\XJ *V&\S,:LFjVyiPFk 4Δ@lr]՝;ѶfZZId)+ 7~L"|AF޼:εFdpwGa; T Z xi| 9MϾBIi-WuGb<_NO,U}羑{Tl}>w>9 !E. f3 U{Btړ\d2"+@U㛍"E.vb7h0*yw+S~lWc* sS+XZC.j 0kmw2_IQdODwv;VsYC\.hI>hʺ LU5}5 C"W9>#ݐWrߟX2߽;A$r")THm!2"%F#A**R*킽bG0 (!2*Dha:+#~-T}KF?-t>Mck©r"_+!uQBc|tz)T$qGoj&y+z. VO.WrzҕadlSZ>M/IO㻥f'c#& 5,#9Haѩ58W\}Dd0kӦ%I}_CGXannɺWn?~D 10(B Z_CuPDY΃ņ4RG︝1<P<-HS.b;B HF9WMGX8[:;\yeeetUVP4|kd*kέ-> stream xڭWmo6_oӘDI $%mo(-QVC߾;iˉ>$"֯EƲ$LrpD.XNjuû\04c_oW{xW|7ytu^.G -\UDXAJɺ~b'8*kIh.y{Em@ iK0'Bv8B ߩ)*N>XVz9(4$+y> /I 7~=*}zïWzsW1ZSeYjM B?=JU#E #\W}Dd=Z_zt/?\-WA,"3D| |_pb/Y\Pl _Rh^2/aA8a8.WխVJFG-G'8P_0gGQ.$v $<+S:7; V]֕lzOYYwc"dq,^HŸfu%}+ |w}ҦXR]3S!|Z"EF))ZGe=6a ^^K+5m Ww8!4]#+l+Ei-a}zJt>`9j:X0;#6:B1uC|ÝD6ZGU>S ˶o&{D`ۮw"xDF@Bɏ(#JnQr;Yr؅iۛì 5Lw(5k(4 sUo)McԞ .[H7A2 t!뜓S}A&eŸQnFS'9{Ȧ훫ePFЃ0feAES:$L#mvjRTA =SOa0QXtL{< ~?V]a>/v73&^ 0ٛ%6@) M4jnj40- =cB6KvWWV+ݻ\sj aDۨNQs$ S6W$еV\lISON9Ӳ'?>HaxTy1!"~6 wx:-x:2FXju咂I8 zܓ5֙1OZ;^o5;~##L&wb0E#I䬱 9x=;2߶#kvKds֊.]u,MOƅ\B@LΣԎ3aC5*&y #~~<+Iwq幂Gԭ2?aK23Jd N0(8iD;NMZ5&L+[%0NU?{ tn9'v"E#Nel׍U܍[GCIE񽒅|XEU OŊ5fT}u~4 endstream endobj 19 0 obj << /Length 1199 /Filter /FlateDecode >> stream xڵVKo6W{Y9"%D]_@Zr>dKXp87Ù4p%! G104Bħi6Ù.$jB.1ݛxY#B OzN>9k)F3+s& #9+~㿦\$QB-4 Ʈ1Ls13GEנbƍof~||P\px +b1.%XAV ٵZ[Wn3.;BYˊu~m6\,Lw:@hVž &5F|֍Nۿ&Eq:*jOpbr&p*֟*nޢcVy~\xG; 0j]86 L @Չ(S!CtRjHQ|^jmk{]6;i8HP䅺S.׻ԁ/"--Ior02A%+1 &,|yuK]Q_7ݦ3{oz^p/;Q+B{6fmŃy!+^K=,WQV.ZJb5X [qcߜ{BD}Y/-k,[ӬE0 L-oov3w[tFM+cTوfij~P @y^4xOiY+ O"W"#z.UA2lF3wo atv] ?w8o endstream endobj 23 0 obj << /Length 1174 /Filter /FlateDecode >> stream xVn8}WEȩ)J:^EP,}.Zmbur}gDʖ[`9!,~$!IĢb5!'QNpFXNz,bܹ8O:x$j{:B:<&QbP?R'F+Bil~עQ7?O/]qAhR YtfŎ6j8uf~X&ԍ*DS՗8G$D'j]>0cxa"L0CJuh2jB e||zf"$>y[ ?N]Qz=xӎ1K<ۺSUU\,s^|>RΈn-{_0Q:gofpT6@|PgY8m:T-eF P;(n\Tdh8HEC^BwMF 뺮j#lA;{9^=5O'tPo<ܼ gp)ܯҘ3@{;>}?eX^"B@F}c@'6 @ a$~7yVĘpB<߹&FcGIb'G[(qs~Sz+k*{,i ;+Q|ob5/iōm5K 6ӞijWXiW,@|oN|V*,K}ik%uנ7?"#Uv#4b-mbozg5&GlpD*/ε.q슪Scu\ZAlj)*Wo썰-M)Vy&[)l|VZus Fe1zҰ݀Œnem|COtwMؤ hUe@fZTpdoF(5}+%ϙKzʪ)e]=и]B`e:~5yͩl+ݴ)-.+|z6/An3qu#59!1X-NOORf~h7_>{@a ;]>H?;#N8^kqn'H2:w0ZfG5WS(JH0Iټ0 endstream endobj 26 0 obj << /Length 722 /Filter /FlateDecode >> stream xUQo0~߯ۉb`tBh-O47u:dҴߎsڦF$ C ;$ 1a2MC %IMQjkÛ.[ ː1_.wYӍXƽyYJ@+ݮ/;]phRj\v88@r[=m\nJ*Sr]kQ$e}UqMIUNX5kez\?% nߛ?O'!eld.K2IpQ +ij{cĄ}SHqK:wiU#pJӻc!J} ؃+d:lovX;xhl>*VDaҔtwmJ8\jZ8;9/M1ʾu> 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 40 0 obj << /Length1 1400 /Length2 6204 /Length3 0 /Length 7157 /Filter /FlateDecode >> stream xڍt4ڶ%":5-{1 HD"JԄBAD ^훔s5ku=lJHG(@ e]#0 ,,*(,,BiCáԤfP7 T!h.h(I "rDdU/7) 3suCcq@Ғ%( A{#`Pt?Rȹў2BB~~~oA$U#7 u~6 A<;$L`޿H 8 F ({9`{Bu~;fAN'g"W0 A :h4?A8tx/8b~UJP0O7 EiSVC8 =<7Ta(vB7{C\`gM8x "`^>PM?.X:W(^MgzO/#AH'p6 @A_(F@COaNh CGka,@߿OXx9#WHln۔@0 ". ~L{gOpAҿŎ_r̥Ģ raqa'f@}_f_ 8`A@]͡I uxU A a`?vrzӟ,P7`W_6,bo,$XJ5'D%  .+A ,@  "hlm/pAHnTA|sǪiĤ!s,BQ_Ba %:u"F:FGU'}gs@ɵ+xKϠu4]\PWg=ZPq%&ɰ4>otsOһVf&s`p?iqfzH]3Ȧ>kQ׊|0d\*Mv7}hf31}-L|jǟbp`U%ViFh^լȣ"FF+f}> d-ϣX_?.*Z 3CT5vՃ37?S/&TأiKkew̫.Suf.ϙƥ]naՍA^S_> >x^sQe1B趚uL*sB Is!$J.w\aa+)fN-B+wg)G~Tz29=JUk+k1l9r0#3[L'Z8/>#OLSyi#~tYiCō8v刨Be;5N_rǣ9Ȭ^5x맨+>\j&qiQBW3?~*'wޘn\tj^30ED?\M>3myǎ*7oe iZ`ڷ/y#R Ȋ?L'p,ܛ0%zOb,u3tf@֕4@nwڴNpR|` ;%64rQwl,q9fTbL.I<{ﯞeh+2qV94mTG:%叅P^.QV)q䆸i'76Ub)䦜UEQ*H8RՍp5I=(#n۰>41t3i/N5;Xc1HCdd}˥ S.j<+GӦ;v3#gˆ++߾MU`tPؓL^#$~V'o 'b޻9 HP4U!@ 0 _sbᴙYeN?Ԭ~S ]]cWE}$f5xW^/E?M7fOE;b񑔅9`Z6f}%ӵj$YAhWGQ bF.NקчZ)>{E"- >)у_~MD^w);F%G)/מ9Wb.G=-?ND&~82lTSs{EYWtKn"-̄+Q,q&h <<=l l)A77='b4% n_)|V=D2kģƧf0y~$Bx׏@`}mizQ7;܉qx~%+i&Ie9@M$KLXYGhYC%NQPʙ9L˖}m U3jA% 2E&R6,ڛ9*]j#u쩇S\0%|$X]+,xAg+ֳqY `D;ҫju>eQtYJDB7iɗ@ F͔+3>!4n1gmO6X o|4H\CD޺,maf)oD1) T[Iu'A7O]%Doh@|Mh߾lUbYl*}@6h I^l(Jjf&;U3pD_P?c_'%U8 ;mI鋄zGpkIccq[*f(y1DDP(=eW3H(q-0JqJ0NF # ,6/᫧Z.)͡JRu9KFk<Wi,t?RRb )t͵Ryd4R=֍c>޻Ր- \0Ҿ}H3n4J*i % ܵ0?)cүz*Z8=s[z nLSd)l, e$=mr,IJ&Wh^O~HVd WY[7"j%Iwn TL _K''Y|%kKJ= mpĎT&ķ{t:9\,Ag1T:35bI?@/8BQJ[h>"fo)8⽿LqT J&#fSQa w"4zͲ,L ur6x!gsP=ʥ#N}5ý |.msʁ%__=!;XGLmn$&8A<7vHr Lb`l{{+c8Ryx(59ݗMx*թu}#0LoW*d'Yi[R*;[>Ӱa(&:%wl:Ic, PV"]C;a];e3xD.:*$@sRpŸ@1_S XLP+YwK38Jbhᒐ$946ybt\qX ,ݿgC,L}8tqQaS3}<7Hқ#:T5ܣ/xӢhO&. 6ɏf}^2oJ.%2. K"80աJ!{A GX+Y.qOgY0+ÈAdd8&wѽkN%Dt&9uvdn]+!gUՖ-vda#]mlq]XɮFw&kUf]+E1vC1."ip\mwŤbt0Pkp9n.c"N՛[# `8/sC &<6ma! \cg2_^CBVh!3laDCqIKOj#s_6A*.&1x+d]UawŭkvK}SU^R]wΊU*F؟ʇx-`\8O[qmuF?kȊ,jE]XR|šw?moSY1<wfb?$)) `@05n=փo|.W#)[L ~I#nzEh$_ֹ_ylp vciHT6izWkJ{{'5 i:mنsw#hvx2fgq[B},֥ݱ;2rn4n@Xn^ \@"Bܿ]P<͉] i X6Ox%e 0kpg_W6Y=tsN|&쭩O߯lH;|ne._%o~:2N?Ɣ.okd pf_\3IT5v^m|]٩#/{t{%&Jo~K@mmq:ŏD>˞S>jo ~ckmf5a,yaܒip}LiU*_ŗTTw8$|ˍoXRukDXTP00? 7mEPuWE3AVc+HUC(Wrnu1#栳fZCkj,(Bިb?+0I|j"K>P}0p;$f`> |2oFM}r AK醢펲w`)7'8Z Wd_n1̦Ûm~ ~XiO?G_^^禆ڔ6jj vemP0Toӯ]]1h.+u5& (ZxBp 1aK/䜟,JZWG!%Y!2i`G߆(zrN1=}c|iFpEbe[t"u M2֔ȕ33Sҷ5C*m؃FiEM?YwFU{#Eq4/ďdǕ:+נ̬1nW꼑I%/F-cN@!9-:CԱy2a.!7MJۏwDZ0& [sM:J|GR̴K1vvLL]-i+`mf %٭yf6I鋳T i9F & N|e$z"c2؛[޹M-9M>LZcC7[=G=UrT B*J|RtǦiݸ-82egdUQhk<ߩ-2ګa H_ʲih!P,Vh>R㭧;^.YJD^p Y糅|ݚPGyf(YD6mkaQP&h=᳐v~V'{6ERSK^CzN;\M$2H4S'~ø^~J|< HѾ|szex ImCo\Z>apUk=!yB4N[,tR_dtYa(/xHȸ %],pD?1Bpګt'iHkNZe'=f,^d[8K+;Fz7£(Yv f˒e0:=Uaơ}9gYE%W>Γ fЬ:NwbEmπ?u]I9l#OtŚ?"\#FIEXZyP|N3o6d&SU26-h4; U޹I7{W}mքD۝ktڭ+vhr} endstream endobj 42 0 obj << /Length1 727 /Length2 11030 /Length3 0 /Length 11603 /Filter /FlateDecode >> stream xmxspfuLlNl۶7m۶mv2I&7w9nWzWwWMF$fgadec( i0210Ȅv"@.: 02Bvf c5kC  G9UɅх!e lZX r q9U8hh Pp10XmS;Gſ89C @VTEPL^N *L" 05H=n 46rWw4Zֆk7o`ba 0YK7I[S;ۿ&.I%⯆_ @!lgc tڙmBv&Qwg ?hC k/Ά5 ÿCNb@ 習Zꟸ:B>zZ{OS^RRE]AcOZ WQCGI+Z{C?3`__@!aKQBBv^LLZfF6#' 5vqt:#^3N@;n}Θ;25Wg%$YUFՙkmasK;|7#޽]ɻb8 ¯hpJ3Włp+5c9[猍@iߵRe(;k┺?P3>5?C p +´ ;1o2SۀE2kvvdϔU~oA)ίE\n߷kRݞE.jIc&pஐH\d8)u)-jS' , rb?vZ)(qu%?8[k GֽE1"W a5Ί^*%"kjAp]@#1oڙ9^t i Y[s%B*}G\9]=lBboN4>{E*2Uɢ`O`ˑ8,?|~Mma:g"7Une,|mXdt.%G54yMG E~:|.yu;^ЈP/j!~MAGVZ,hqxU.76MSl &1k= *cM>ܛ<I'2w`ӕQLN.nty6o %bI0+7x!AN+&j(0Y3%rۍ:`":=5FAO5Jօ)oSA1^@u'>VΥ'.nOOptQ+LҫEeh?%wd+$g%^y>'Z2qKNOu˼X (1 {*YhFNb;l|TPCC@KԳ DDBp˶dpCBLU5`; s=<0y~}J} ܇g[K;ֿm/~ tR?fLЩEI Gp=FSvWoԵ&t*1:$t[G07Ĥ֫+LyӏΐHG&U9L6~Wo t8;?i3`@"s46S ^, BcUCYB zRM2QY) W|?vS))b@ޔ}d҃1/4hwasbʩ@P,Ҵ|&9Ox$L!F4gnqp(Y)=-19ܷf%m֮Tz/rkj{l#Fxtռf_gKGs7.睬ndzi:|Nqz5*rjRp`\8.8HqK# y@=:p` J$|EuP:s`5y_oO~5՛ʲڢ)nlTG7!TޘLDMWoqN-ȴ]tu~xDR*49$d7$Xiwl <=lvT~c .@N̢㡵B40ls`bRI4g!xuW &tmΤf͂ғrS n;Vr?1^ĝpT-% xń K`d *%nצg@f&iPR`2iȌT>b=kddpsΪT\PѹGIΟ w/=\3H2|s3KƝ(HŅk-dD[@0h9QJ_0!U05KLD\}ΐtizcjF?]Lm'c2qA Ë"|`OvE(Mp|`iV]X8v@cdn) ܣbhf.+qmOQmܖ;  Sdh 9|h((`r\9tKC[HhJWlg w&!O>y&SiƇǛQ=E0A/"|&}m; hie*gA2F_<6Y18\knz`gԓz=YCW LMpo"4q*҄>gR. {}.?ڡP*)DW5ӛ]Cbط`W#DYf_+9*rvBpL >',A/Wf}[ʘٝnGb{-m3jeK$oN*^>{hgR +SfWKAD=c);ؠv_r[gNyEv̠V)X _EVjIo>J(vXgWn{QaX[ŌN:F[Ms"~hݾT] W9a$17H[,!A9usne}r P,̗gq%a\(h +Yc{1膄GB>|ک [P (mSUW'F[Kg>[VtTuyh/H8Z8esvC7G-#_:iϾ5AՊcѪ8\kM8=ҟT'`云{D5Dp7W]_&$=#{=%d$fOSHes`$$,#,[02}6|s%YK"\XgTЯ[(vFooW_;'α.VM=^Z4ԽZ?'3n 4 U-JN>hUA;_2[)! ?c{YO3 ZB7-{Bڊe*|:bT8R/O P/,dzwΖLy*ZF,ghu(&lYXXmSBqbN|3F >OQͶ`sqkZH.Tw4)Y Y[*!ׅXP)0U+QEx7jo |aWqc v &D冊sSuqZ26+~?e :q7y~c/1 %ým,ةM:~-VXz\EnIN#+3U;M chMwωMH$CI ~_gf=v |Gg bfk8^o+g^~ {W8rĿ )f4O~8ZQ2A*ڨ'dh\ûq~:-vM`kCBoGw$/H>4n+n;X.1v]Ƭ+;9JM|aM]ѨBiDrKuAGSl~abNۣ 7Qu1-%Ζc# ոQ0BFCа,B䧃f"nKŗ?2-ݘ"GbnKLyimV4n*C -},-!]Ba%T9u,qH_:xm\>rK䚶)ʌJk] jqlӁTYk+2w)}Cd|^Yzk=6=5<ĒP_Zu8B0BO Sc L/R%B'7?BxcD9CĪB}Q~~I1lA.S zTqv|'Iܟ,ZFT]Ee~\{:zw3 h3TԑW#!/,i1ljEɆ$9L"=f!.${rhEZ_3$s_,C>sI6R sSE$jMm,k[̥]͹,ϊu}uX&q[_ٚaenBIj*NtlmofrEq$5|-(K:ROIHNqK/peWC|2yƽN F H`Fdn;]>zm}0s@r#XNPޢEbujxyQ@2 xQbckv1eL&IPC7ۺrtY \I BkY>UG=pJ˃T"j-stw"_u>2{#1|w^&ї+Amu5&O[̓:8FGh0[==]^g(FH@ "h-';lM&I" B,z%d$WnϔDAz]!LKA꥿kiԲJY "kULAi]ct $*uv 2Aժ˭&(kv<vV^}+ CX|; qܘМ3\9TX̘OWJQ9T6{p0uRIyvqc@Cc/f d&qy;z ]X$!FY~7J=Z) OΙ|SІ%j0,(|hz/]lFͽ# SI}%{/Qώq%V_~~U< );?`)VbS~K9V06W,/hAow7M.MZPS恆 '.oSF$5'j![yNثkbMuH22dIIoDC['E/ȬpLp>&Wl4\e ?/yj |c#^ " #ڻP)G};ɲI4f V-*_u5S_ |WbĖSFSOߓ^h|ep;ކ񼲕av4b–#L 6{Lx?+ƶzxb8FGNdl(}+tfKEF]&dfP_NF{<8 ]vO2`*a fX .+&gba\jsNě zF;Lvv9*Wй O R(=X؁Dv㭫& dfBRx!eHc 14DY/͞@Cly P= %VC]"7tTVoiP:؛&q0YoMȇZ\'2~%-d섃"l2U[2v.xjv@*\}%j;a!CxH &=&fӣ2|W0N㤵g 4W1zMì'GE(OdɡyTS/XV1cB2h{:RxbTڳ` @ #}u!6i%^4ҦFbg%LF(q| H<8v3*Ekh+n]Ҿ</M rg1&wF|{6p8+OhˌUK>>˿qTq(xQ|KɎ[BiV`,"![lx3xP8 U9 2..1bu7N f(In#G3ԯlVY\cg ,4g0V6H)5.m0Zb/8@ QR!"VdtñJӶ=ၙͱg卜*S+fu(Ȉ9z,sX=Ll?SDߐJ?zWXUQr[?;=}7J=!{~3ST_`!?BDEC y4F0 ѧVQ}ǰ||r>t(1Ϝ PH|o5"\޷ X]f/6.{_`Y׊ )*U8i/# eR[O<Kl?Ğ c K I@ OLɃZfaD(vzBy77E$m/v+vڈ:w$PO6 CW(2 =X}xVzA6!Tn+Y;V߽ܳ ;;zl[Vm?pvTr)#ܞZsr)k\Bߺ/c@,Tz7.tkzw1Ӷ~FUʙZs 8+˴}Dܗ6WҸK6W}7e!9 ,QQ%:=.y(CGQ3T鎸3j(0A} W[ QR8lRSzgy,.sVyi 9;α̟E=wQh]X^v6[)\B@xKv\E,[ * vn\?Ϗ{Oe^"'^xT%{BpJeNeUk ʳ*FW_lpDӶ%F/[| 0etuEcH˃@MsPQ2J.c0W4VokР zP P,綄b`0["ŗp͔D{b"+ RS8DT#?yp\ou UTe.i᪞͢z"wRgdxK:z,ϵ̠!|rJ0\:Tk2/SBauGƂR'r~14 ||S!P]g^Lf*6^cwv.NIǙ 2NyrLur=X("X[N#N&ԭFW[Vga g4kQۂr9R+mdꖩ`#zt޸I q6!x2> yW˖;Tc̕J~g+Iq\٣ׁ[V}3p됾Gcʓۛف=;t<5-$g]r`ۻ){1hx3l2ՠl R\16vK6WCOwO% Z잜~ET*[CwIL ?L.Ky U!/p ׶T <+evTeghiaeyN fBFrN3VL8bkTumFs!L?;?n2zaӋ >]t۫Y̪QjdBou`oع߶E+LKY*GX(VU4;ȞRzoOj;2p8FllNDC)ᗟB$_"Ku?ϝ4=OtS$=Dzrg)3MHlln#I>6\9:x 8+}u3>DFDL[9Wl9h`i€1X䳱\9a Cc,O,1Kr nK īˎڑ򝴹h0biǽxtBJޮ7td%u݊WHEwa%ƳO*+ө_)S0`b^˘ж!3vMyn)Shy1vf1|b%+,-#:_J˲%}Z݋wQ'Oψv(;R GS1ԾEX&L./"c'L߆GՈcE0ie[|.Dq%ᦲ_wg?Wб } )]҇v!HՇw֢ jS\U:ETZF iE]UGYҌP(@eB7HIq*~QE7}z endstream endobj 44 0 obj << /Length1 721 /Length2 19438 /Length3 0 /Length 20032 /Filter /FlateDecode >> stream xlct%@-N:رqF6wl۶m;VǶmw9w7ި?5"'qRv2330qeL ?ɅN6"N@n0X¶vfN*#VU[+[s#333ÿ&% d[r*qY8``w627678&vF6ɑ?l\N8ZdDdŒco6NF5-+ ߬[ pcs#'!x1wR9!5hJsv:dl6E[k26r?Nx1݀N61Gj~EmmϕυBRhWIۘqi` [=`@_,[%$dI `fecp5rvp8!n@#%[_A!>33S*K̠˓Zfzxwxy;ےwM$@(0%b S7?aWFNk49g5RQe}([q+6:h_=j+CUмkr\=rP;ӯjۆ6=sRb4G\Eaw_(Idk jӬvQ76>=ݏ0(68(Z1`zȏ4[,7F{;bl][4 c e>Ut Y$oVV2nKÕϾSHHByw)NU:<dS]05Eϕu7er a%6vJK Vc5kUrO~yGqvXjrNۧy y ct-CsoL}$#zB7]M x>n]mi\_$,n阿ޚl`#X3hqe nR GbYdFfgh-W@ۿ24 \)3@#80́:E9c5iHW}4!H-tB8cK?_gAA>/WI!b v?t72.%|ZFF7G`I CSjj}5H*}{uI>wV tŘ#Ɂ( SF\xAƣ-rg s)F.<# BFX&W7#dW.fK&CMK/nЁ.ʈ7U02"ަC~“tA +H s:Dm=! )S$|PMExG/oB@\ȆGC^6]l/m !{1XuFƤ`j ) /'Hn[O *Ԍ%RrqI*$UKfi0ȕhՕ%/.#ouzfX"75YFERߞ+\S;~m\φw\8=~Y h>IE#ɡ. .뇃RtE^uwNŲF=.,LT"w9}tcPI5Ffl8@"Phlt¾2>g'XgmH=򩋾1EIf(@X[^HOF6䝸%z|NnJ"[lC i^ |l, ~p UE+}]pe}2]|ѤdxvU98Q8HMRnDigCYKmn.\.d3&3΅L Ƌo1̓1)ڝj"D龗kUDX ڹ8@KsOcm1G.&3݈JϦb"UFMMBܲv GRx$m)Zq9Q!+{l[MfT'd`m  ;3q,Dg ÎB(s8 GqrJPnNie~`|sf.PH RA ,3YL\<FyTȱVgQ ADZ[1$+XA;ۂ/,<U3LDL3Zy'&Z)>%k>lh-/Ȩs6_\Pq4i֕3 讀3;J.Mn_וtOtU^"/Jb(GePcRa^䴄&< 61e׏FlQVunwFW$1-UqVޢn~ǯ)ObH7=YFR֙L{904?1w˃u|O 7uieEؾ"n@2@PzN!ߺ2)w坋Du ,3< S K@B SD0hлkNM*:=d&xRjZo!A+ x==OI˕gTNת M=AnJ(I8;7(u&#>N*B&zkXĔ PfFGٵ,#ʡ^vO.`ҭk (1zdA#Өx޽mu1BU&N>V^x: ~빩9,shM{M)^4eyWI<"c}IO^t}2u"$=@A6'KhC=nrɛL&kX>X5zB^V-ҬU$T\{,ߧb™vdeONpE2`+p,zp6^ɏ_}a>3}2,Ց+,j،<16_fdɖ t1h],JX"ۖ*K-b|u#?OqdL3>LI~+iV45 uk졡{@_(yd/ $mKnZ/&'^284&a^TEf\oYlnk?-搴E ΄m;@E'aTsՎRO X-Y]6 2fx` Cxt%;Np3SR|it4ۮp]Q"e8!~Eaqwa%O|찕l1PҭsıÆnfD7nϼ=75`d.h:\9JtTޔ/;9$ļ#\y㧚v UwDUV6T|pʖ/+!Y8CÕ7<e-qbbj _ `YLxm:=}=gNsN.Wud:}/ɪa!*{ȊC/Zt\2M.9\N:%%{7^qY#'kHD M#-#ۂjV%TB|@*Nc=4׺ʙMT`~ǁPc<(Kk{ۜG$#gsԊ6lf&4_y=levgxj4Aܥ";u_FI/ +Nl ߄H:}$u6*?^N/(z4HXX~O˶^JVB @Mee e1M#'C+s_:HoqyR0|'R,XՑqw#ۃt9-^pyt% $_0{{;ܶף{T]w\-j戎O2{Y3T Saf9~Xe3pKJtؚG;Xh?jp'Acv̋*+w$D-'oJ PzWPa,b+dƐ+Buۖ\.uٜ 1pab,D;+ꀗ1鐉5P;g&5WV ^>e%;e:"FSް\0@ڦt%y]̖x_:3p޺.Ect O|Q.8yV "WNHioc|d> (X+`y?NSZ,>iq3A=6w 6㬚1KJrt)Bhi @*U۲KOp3J;)bKQ[PD"g1S~ϼN - IU . [~p̧s\N,ǭުLHZ 9dIQ䆂nL/}AcOtid\О- ,63W"vߜ%o jh\b}~8΄'PyV_'퍁T#SmjO]QKY‹^YoKwB.kҡMV[}?y2}Q>%_և4t UBCi|%Q%CU,N3 i۝*b%\@uJ)@͒=#"Ywk牑^ι1ȫW|08+|}e.uk~[i# `\ƫA{>@ҀSdjNv]ԬjE7yo,Z'E㽂9Pxҵ6\d0D68tQ́gHAibҎrPji /J޴&wSSVRpֶxI" :@܏X/е;7r᮲,lkYTm/j҇$,.Gy~W`hL)&&l$iu~ΎqA ;úى׏~`'CS#BaK{͓25 - ei,龳]%deT; (*Ѝ86hIC?P0&ӑa~ r{taCP#wb(Lfv,#DLػM\YPh2ĨJ,g\LsMTo W_AӰ8ixRm@r^QbgGĜxW}bKPP'mV+=(s#iP_<2b^,e<^HǭPM=Y$'~Ljg S}mw %/e,QoEOvN i|V_>ߖj?ɠcԄ#A\wp /%=k]\aWUوFpI/y0$įX-hukhJT.eE:kt#:!=kw+a,T`I& `ǽE> Iٵ[xW`y#koљh:%!U1 OhoxǸnPמ}o<5G V; 3[ZKen ZgI[w8qf+}!` JM~ }Lcw0!`83\چW#. Wkwvs\SfP|-)%fwLBkj:_AAŨ G NIMd5*C}5!kB0 R*H] 6oji۪m'oEEed@DAJe{¸u'6Xv)s8FQMzT褹4/#ߩ;&A,Z7 npΟZ`P@߲ G҇Iz>}eP~!)ZQzBI{"?"vK6٭Z _&? M"̱z1|i.'@odߊX~d!)!8[hz)I8w}Ј4疋3zxYr$R!jK콳h/RpFɵqXcC`GN 7Q*|\{ *-We(s؎fQZ?OM[YZ yɴB-5‚;DG3̹>#`S##6b,T+d>Ig4vy/}9Za[J׈,ȝ0JpQrOqwfߪ扃. sY 3;#8(e`ѕvL(bGcU폪?Y]_ +k!ߵo|,Ƹ8! ¸22Tk~J . fj 9Yv BHeNV>u17lƨƬ}BArc9%~el=]_Y{E_M?O-{VҾNF][8Z{L0 eMrd la/XR*V|TJv\'gSdb"9!i4Kv^TwI; 8j?~)%LI֚:O7Ǒ$wМ"b_5!YÜ90Q d[ahbbفҟ 5saJ}jJ ) 4Yj6W&vvUa:=jC 4/rFrȦ1^_:>=5M32t5Õ.oCH6 8oEEHj>{QYg(ѿ,2`dG,LU-|;(+G%/xwX$|[Q oEN/i`3?s0Q:L41[@VnY9+lT(: Q8}7J4#CBe⽬(Mdgbibq@-$@L駂`9u|20f;[8eW1 smv1eń 7ZD $K /gѶ5zIͧ?xJS[xk'JQsKz'MI1VClT B'{S "#xܾpM~}vݱu(s;\v䩯t'3k4XƘ2`#|'& j-rmmDW5Ղ::KI](㕑94f*Ԃf5ƊJѐ]*P,9LV O~Z&zo_sbt<™ՑS>"#6mW_@ZַqL4UI s9"rq1AW'SҼIzzi6>$L(D挝>Pez t]՚jx4n=JڨoTZ TJU8A|02= [Ip>4ќ_f}6vTK UXC9 0! ֞SYYo("'cg{|1W/"KArLϑQ; o:h0t`_O?Sm/o^|Ǧ"$# Mɢa!;˓ LLc%s{1ZpLͽ!+O›귋j=ё+?v v;foa=G^vUxʹUsuԱE>0ֻ^4d.vXGڪ2"Ui+CUXh b ts q},kUfHz*:N3?~ʫmHn+jaH}_(O jUd (zCUy—E|(unOҙXKvJ S3;J!aNeUX&` C|ذtBBFI6{YG!(hu'x=jiǜI+)z8MrZ,ܯBgB+fAޏv6S-; pU<5C9ԣx5{tujV= ≒0Qn!B0s0_ǎHnY9ll:6NɄ'6֯7r|]1d^fxBԪaYPNWL["&׫.6lH<%5٠@7q`vM+$۵ppa;R`R~Y@6\`gqPi<"-7yAuWН";"e5zC63xzJ^Rk){3=za]0A>TDJucT4k؞[3߆ }-O/왉P*<3 D`H199Ѳ#lCyocs.7*T~266Ps=ؐXiݱI~݊wz;4 zd ($]>Qֆel)JMT+jﰹޔB_G>okcb켲 s0İ4c?;J##fmW^2A6u,#0杛&L;'yH@>▉IGkHpfm#F侀cMNwE_ 6g 9v q\ӅtUy7ƨQ'>)f8Ce] (<%.M癇u 3أgR}:; @Nf$u(.2iA+UMiI_,Ɋ< ڧVga/iDW8qp0g+:*Ӝ`0I^5ܼtB`I.j}>[,JgE?~rRv9"o=5=pz4怚P:#w>BX(RرXB#@ PKbv)L%ޅʰCT~C,eP?љ໌$)pJV}`9M c^ls?A*GF/ .w 1#>^UKo5{o|Lf] Msn"̗E(Ft8w1ɞ|L,Y k*$T+ V@XQBڥ)Co ,Ŧ#< eڌНJ1ŴW3(uȳOʊ eб]oϏM]J>߇?a-!狿UbmmgvRr2~^{_cĬ:sMsܭX W5 :AnsbDVBֈɬT@.}Ei}ԟ .(0ԂA$g~$"ZEߊlIdS0]/ODIV4DW+SziF=tZ[^Ɔ1wnY VVˆbꃍ G)%5EEr^[bupf9j1I-΍|(  g˪EM~@2CqZa^g i$eTHk>qhhb Bgm[`ΝO̞"K"kqϗpM.t&@.]DdnҐ\̗x$lIӗ;i$AX㨆6HwI&a8:<3{IeA YFm;J,įI`"Ԧ63w|-9@kҜ.k-U@uȮY#x3yQ&0HcQ4lH0"݊OjwG{%e̋p }OZ+OohYPY%S%3{q Ŏ8+F> <7X Бe *=z/aWyxBT=EI9!.6A#uU1cyo+0SM5bS~\V/m[BxϋYo1UkX Ka:w>&fjBu]K8SA=Zd߫.8wVh0֊6f#~r m?:#55D}yA9?x#{ b(Ɖ^ַI80\At h$3;~a\[dЕPxo%A0 2iVX'W?ݞ5c3# F,m=:nTEV| ݣW/#MF~z>]CTg\l4)pt]L%n%:Lj) ko)Ipq^? t45wouяGc[ݱ/?o~"]aP"_OjYw wXKDcHJ ^Bϩy {YA",+Aα0z6OOבHVqėR!?g; 4k]aE52q ^>p?Pt;~RLcCd:C:]/Md<2-T`mG{󉏅|Ejzzy|e0D gO(yeǂ=6{1F g^> X3(HT{P vUu,n_yӪ .~CN'2_42b0I 7,qm_iT>`8n~i-atyifPdž | 6j$ N!G cLeTqw3-{\ 9ZhcajqR0cn] lBpٺ"b>M$o+u"He=WYedl3;EFה1  lk)I̿jxT"8P[';J~DV6 -G /y$3`0'eEu*G"zݨâdgAYѯ&,#Nysٷy%\`Y'ĠdTP||λK+R)7!~~eGaנCe mc"0 9qi'a fRtkLOXk tw0 D1-*.,^_:Z8caLJ-(k#D{ՊcFj7p aG%|?f]4?͵Tط$0eyͣZuI+:)ZfU/)xT=6Htf l7X;d]ՠV1X5eڱeR%H)G$vj@KO/PqF~g!sJu֗o檏rImw'Bǵ_7'JUKvsi]x0oRd0"a*GӫFZ`fO.n Ve541RJ)1X.mʹ)Z|^yhN)^\R8;xS7C9յ˄%d@0I܉q~>a,eɴAX!@8 xYrk%i=.v/}f dEڣ@-dIlC+6c&ىR,/g"diF @?,p'tBB :j(MtA#di!ƠO݈u&1 }c UKEyw~X#hc;&*#*#<7 W0@D;4c#t5T. yx;&ݐ)~6u@Yh'@s<|wB~|X$#RI ̭YTEL3{!o~zyձ`"/f8C`5¶ЧvoaN]ef5ZE|^ՌI^M6˼^&9{}gScsB2rX7*smOE\rfTk C^ʡ&d.e?e#ѺW9ٛE݆EQ=ʳoO[~l(Md }:F͌>PN>ʾ} @FǨhETYЛԁ~+O/)E'`X&5>D$ao 3ɍb ̉X9=+]pZ:JŰt`弈 + nl9'%KO:6hWu[Ev*1ەW!R/)&.׳fUfxfynO``yCt\v*4M7Hn"(}&HBNSD@5@'av4d;>qWS;5._> 38>Rja/޷w4O:ڬ_LW/CsI'{c5(s)2pQ.&'ƶBIv& TqRP^$ l*F,~wAt5L0m4Ӝ7XiQ1IxL K2k|> D/c )RMo'Q@?ò˅7"`@yu}zrH?;o4w\" TAk< ܋$ov@DLcN蓼7'J:+:Y 9(>‰CIh9m;x2MbdN1.7er07ܠʄe"~伽/;i<m(?I Dƫ<Б9W(\!}O=RR$ģoIzgF$4GʌpPR1ۏN \$< 98<> [LJHXE&cKq;#oY$kilՔ])8p}"ZaRh,5sjwZ Ʊ!/V]b_VB@xl*y;@qXK }łaPk\F>Lq*īt1CN@m1Sp؊%:7D)!(nEEgn} x+ ?aU7}\g_Tw1'g5?ɷ@ ۟?dwo=@b0DVJb`kV>wѫM"Lk ŽBgOgh̰5=BpG?$?rI>Vu]$d$G)4~L cN."a/UWƬˮ7D'&ţE p_'7XȾ;zUCzV $N6}ʈ;2gW!gG3-Em$bLy=OzQf$"s|:.w 5"sjp:D-vܜ 5+q1Tg8>3xJ G]rY%ݙMS<ێi&[ r!.f)lijgofYFgĔtƋCKf48Wo]Jw M!t|n`ڗ 4c/ vݜ5xe3>8R]вղ15] įrcy &݂ w䤙YeD=.? sqKD=1yt镩կ(E8@.W~~VXEvr3f*Ijɀ^ərOEiBO !z*!*Oڑ&Ey3CTӣ}-/ ᑠnC'||U@e<ˁ@U@EK-4= yt3fZHIKF ,,Z@_ވ)> th^--Ҡ&cTIk~:]Ia]YVynF h1üumY׸jIܲXky{kfpqpLFb8(-5W4B(_~P*vn}ފjUָ~TC dpy'pʍY">X!puE⎵D1pŁ endstream endobj 46 0 obj << /Length1 721 /Length2 12170 /Length3 0 /Length 12749 /Filter /FlateDecode >> stream xmxL]ݶ5ݥ8ŝp;wš;}Nv5X#ɦ"sQt11T%UYYTTbN@c  4l쀿6*@kJOacl94m@77nήNBT@%`ľ)i(JhR@; @d 휁ts{'Ϳ_!`trK &"MQ !Ƣ&03Ksq:k;F#F&uwČ0L ;&cgnw?Ր`4vQ4hm\]N{3@?(c[?:YU%$hr+_k}/ @3{fv6s59EA[FRF-agjo쿅JƠ?d& .N .+?DE=xL6ο/^NvC hwO@)O{Sְ~s s3F ?W{uACfwjHij&.vdZȍHGS1d? K)*-j^ 4D\Aiۚ*B]G޺d)Oqf: KUt@m'.>I`d| j,CLw !]SZ}t8׾mY`t* F$Xޡ ic:+7~1rd2~ ֔~tfꔉuQxiODp߽W!-v_O6b934wiDI6"~x&q4Q}cXEI%b| $V7kT?:S+|yj;7ɢېܙ&iׁT&p-T>|2c($CEv֦I. ؐYl5: +S W'5J3tc3ϕYSm7t1ghbŒhxVMu<\fZ(sˊ?P:P=)5]0(Y*'7~8w[qz Xu}} įY-VC*t !/0꟤x\d0$ihxPYGNa{DIn}rOs҈;0!f5L$#˥GCǿ,ժN4ui 'r?"*U1Q\fx;qIE"Ҵ putp8(djÊK)c0 }:w5g0L7Ux; s_56!DNVFXR I}4CD`З#3<}ViZuQ=켈eڨ-컓O:v/͝`;J)_$;kyFUr_^U6ˆ苈__Fwbuo%PP/p3((Z&;W ]w]% lSds}ЃixY'̚[y?I%5>'( ߐd񘮪yhsʂ&M*jZz_(cҷ 'J%{|+zvdzMRgϞdPӽ[^Z gퟢ"%lj8ƍ%%cz{]ƗA )g-MfuI7U4M_GM#Z;tm̥hHPYI;R@rv98$JqwqEz_^Mx0s1q=/(q8*M[Vw~EvAٯٷ9?ؼ~Q[[؟b95*;%7wq]_2Ut{\>M*+_|a%ŧO6f1+R{ uIq3Scf4)W }G|X BV6837ͲπLSJ(E[yޡ3f*Qv+A7'nj^M`ب: GqQHzȜ Q72TJq`ܧwt XEۛWŕV_;%W/i#F ZHܣ͜.9FߠuCUg+5󰠍+5D%VYOj-m&P43+ VRl`T_SΏ'݋%Taj}8 ׫| \& W+|S%g&,fW<~oM)k„&M{Z~94Cy*w0OD0Fh꒒5ۮsU~ot\]q7_+EBɉ[sOѾ#=^赇M}߉VGl>LV\ȡ$!QSOem0`0 3 U#@9'"V~ l?i{BvpT9c]ytBl[!^J|Ma-*͠s; >qLʪi`fquWp@ G)tVŬbB;? < = d=*㴐bQ&֝7UpbiB6}֕J RsgX f|J#Q6oO QH\s٨>#H[h! w$׶JDBiPQp}&b!z1kL~gm*O<9uJPֶ͟dlGcoJoq]R.骥bșx^7~1C,tڱz}<44DS} qbz ×x :4`+;?-#Ob+%η(aK`_0Wz9^S8KI M2dY_& x1=›8 ;~2FfUO8,S 0me*o) /_ԹG0MWM) {yrۊ1ux{^w|-Ͽʶ1qoPioљ0z%P(e$"@cy&Ae ; /gxeXô Y*!Gjy>nwःQՓ/ŏp sSTUXxم{I$WL%@y[TOͨ; Q+:l/]8|{=HZ2[P#, S34/h, %wĤEyp&l˘P$7pT+ ~w$no3{,/~V??) |Kq$;.+O ʔPY iP  h-9f⑭8(v6$eFD o>Vsn/8j-c?聯HшgVZs)v)Y^QB\#,#fS5?sԶma=g#> ,I$7B s- $S9WAhsF7CDQٗ>7Q ==O\;oNz+wyD[tӣqW4VvyC}q\(ʀy8i5+hFx@Xt4 VWLKp5'e,eBB)gIː+v!mHжKKHYy+:^v}]Fx:˔]Z(j/Y&}t͑}AB͕P~ iR.hKZ ׂٱ?aoyrkmtnA2 uSK:M|ر#ߧ [5ۦ;l,gUYTqM? )IJu&2RJzD%bC`%0l2#C:j Hj<ƥ?La}V/ߖ/&6&ă1QY1[uT* I lNKDZVH-5N 5ئ~p$X)%qoa]yiy&;k€VGĐo2^Z g-VrF@,TѶnLAL,cOىnn0ȍt통 L # `sFRS? ,B{NˇW ؃*.Tt=B&K-c2Zfm\iMb46-4&Ĵ "$j:\l?_ŚH88ZoDř|:ihgEr^UBRD現yXHI!rSA)Ng5$Dsb5<3]D760=KOB+x96#5o*ubo圛{U*@C6P*K |6O4sj2!x;MaL+ψwb/SSW)N5OroCST5Tr˸#ؚՌ%IɐM*'yfc~#Ձ?0J RȂyRp%u*ߟ'+k/v.z\ p]zo@'n S, r"|P2c6iqP_cCE4N؝K$>?cܰ/baڪk]PIE $0fLmw*;Bqj-y: y9?;?oV8q1|hE emw|2)Qa 5!tnh%uVl]h,-/{4 5:ljV]$JTBaLcTPFp=dt(>mM>CɛBpuU5қ. P/[A[8Qrӎadxݼv%̩UpYM88i]>ev(ͻ5>EE)\2jIPrIA?xIʱlCȶIYHjAz!i?x [n#!K;u1$UWTn 世1* żehiAxSw0-SNU%}?rnēK|^.QpGx5E^ ϔΝ&7 (GYz-9&(V^u;E%DClhLP!9ZZ*jв}2\_!4/1a+I!L?z=MѡU?jJ-_;+7Uvc`x`!P?P &݆ oh.L[gzRpIJ QC,N;b۴X!uʲlPsKw9Iƥ>Z$Ú{&d݉ ià&O4Hdss)W7:[>e5 oY2DaaPk)@qQ Z6jLgR#ZB_>Dg5Z,L%Pr3(}8+Z0z-F1:h-aV3s< R*GipPKd2uUp(gd9u][t=" Yrɮzu蔂}\_Tz0#]غК~2!W9 6߃#N)2IL`\Rgo˫R%y+e54ZQC*oT\o('^^T,vw-FoQi:EE#B Ie}-b#Bg¥\`tBH~YgddIԙY$p" .Yo̒\!q,xǫ'(%31'"Wpa$x \oJ:,J"t=a9ď6 ^sQ%3y 3wCeY&{g/޲@}3ey؏_ކk^\6wWl,K <|ti"QdBrp並n;2*KWzI0L[5xWj }W:7$˵˴ais?kЯCĐ#ѸjT9k05$HOGґ~7?ccɱ)~/,z46egLOFĖ,~Z<6' PYrғt7gTZ6Cr|Ne0_AO>ԭP9U+ρxyK_g x9dGpe,0 x\Ժ:v$%,lw9$L>R;) fV6G${K4iiy!|:1 )0t{ lⵝgtمx_&Dgs![j1q{9=2:A+*lF?>l厚M5 7)qW5Zr`ȉCxlnw85+>Z$1譏c $b0Q s9*eufj"9,{4X!?{fVu5)*)="kT>/p&+ `M @?6oOMB1Nr'xGRJ]=:͗ B:"`*iC29ؙePHEt M`vnCx1mū\g}o$\Šٿl:;vƕo 'amS(ePK|a#2I`&';#~7E*jiE+ҶrKp-ȀT{r?$ x v&Sqm@kV{"_k_dNJ'FQy>󋬹l+ѤEHCB܅nxq.BIz8X_OT?5^lqmG4g(j|W^/Aȗyi ^ʜM)^& y\S Ȇg2V\1 xu&W~)7K= ]gmk?~3O۾UbH @M+uS#Uk;7gBe|A{8vj|-Sn>&B:/ +KzuW\ ߧipnQտcϘp&'A9wanqxUΥR>S^ gEt2{dMRRҐ++Q=8ucIyí TN).hjz,Bsq~wΡ/4[yAc8h=CHw ov{SZfm͸BEaZf)KG۞ɬؐB)hDN:&<Ϯ.J.\ s @BHɟudћC7r"׮PlHu_u1+x!\g(oL}aݝFQ7q aѨ@~Ne2kmgN%NK(~ P+;>{ϝlEP<@4]/_HAW{g 4[Bod#ryPgh B[3bsDQ¦çQ 1@Id 7 >Y[*Cz?RFlHŭP~uϑ5=CytB|?LS3n @b\؉gQe|m}&#߳Q=TS &yeUڔ|~4?qfmEIe@L?jR}ǻ">qY*L=r{] '}WgA,UwуF1ύTl\Kzc;{ǘeo:l_<4E03JϠ>bmg>BbӍ%f)Jn<aΗwp^pX>gj{8;Nŧd \Wg. l2Ynўk.zyDr;䧾zԽ%Բ#;p'"5"Y65iW &ghNONݣ{lMoZ)R N+6{ٛyw:Py@< XV"ڒF{QRq(L4-t?꣔~ҊG9L5o&Q1| ١>p%'v0"'J[3nY[ߑT':ON!?j)gJ|.*7f&rka@bdurܯc twzc(XUIoF,Rv0b>R-k뙾eDPGPA|f1vcRu+ܔ(̈dDo4&?.5F&)G('oK u'< <4^%Q*HD_:4@7.ЯYoܭ/I_K|DKS}wy5B4?J=JkP#7q%37KfwB{uC"0Zgʲ`A*9hYN5ș|2Q3X>GÄk3/8)Ӣ.s r=2\0H,UV=}]WҒ¤Pqm!lw4S`KPOϗ8.L]Sށ R{8MLյf'l]97k(kf^CDvaHU%מx3=49VJڸ~`+#yKL@uwrnkr8l8r-󷎡P#  ~>?ɃEStD>l͢= KXYq%LAVoe |k=[+;.m[4\Pz x*獽u+>)ʨ6ITl^@½x/q?.3-n UӪF_Kyywiw_o >dFDl A߼N* 9x͙{Nx뒵&("!IWMC +j&}H %9 :#34:Fo׭q3z4y LOW<+ƣ BP8]_qN$=_:&zǢہ{}-X؂!s!\ىf൮R  5oqWRp/.r&O|5Mͮor' zbf1  ƝZHZx*ܞBչgf^A^=7U^r%Co]Yzͷv mӘ'Eior7ސ^=ҢiaƩUο/5n(#(vyg/#jB:VfbM+.9Q;^zNQ{ori+#BSMeva݊ ՐzHA鳔%H9*MR[&F6mc\u+LwcMťDoe "*_'&x̽N52K?<ݗ`3ݳT S<*EQ,nnJ%5Tz0aFIMݧc@K{W> stream xmweP]ݲ-݃6$;www8ww4=֫zt]scMRbQ-'@ITQ@ OJ*d4p4 8Ԁ%- O u775sPQT ͭ6V6Ffnggg~g':{'^MJ@ 015$db*1 ho`w227HA@J= dl/Mt9 3Ȉ( *D蕅 cvϿl872odU{Gtcs#G!O/$@&6N)W⯇c_5@!dcmAEkXVn_2$ 2ÿ!sQsW_M Z͝5Y@z Ii%a.?e9K{ =m0_.cho bz0O,AAWZFv-3#5r1,Y$ h`ch\-?UE=5BeqR ͼXoF/ۤ!٦M#A4`t,8Tg{wBsm*,eصcʲ<KzI]1c~I[/FHR=MC]:ewa xIgWgYf{E/zmAH|ŸmҦY<Q M^WKk: F?A'f˔yv7 90}SМOI~3SsP˦ͤtbv|/FVa5n9K -7|:WhStq07m6i'luȒZ@S0?S8*Z]ׄN2Z.w#W$znrv LL%`H>o 6G  z.WܧRn7Ҕ)h=,|z ecVBwJ^,ݐ6\ RW9fQ)Jg yUI_u"L& ql3`)~ĐME?!P"% ٹ>DFLv}  eƒ;AV~(UZ)Bm%cE"궭rL|N-C:U8  ]3QtťgޮZļ8=(|Ù5歳Q2D^P{r񵊞6yt\JE`,/9ZA!\T=n&XMyHՔQO?J*4^ _K/5;Akׯq5XR0Eyh*DYЭEvS-αClQ@ie)1L׊L6p(Ue bKuRs7"_a?trTN_M9ueriIN l⤉vYfG9 pߵM $L 9)RjD^LܧD6qvz m}{;H݄ L S˷2=0?.L-+1 {Q׻vVڀ[>[]:.%6$GlMib/xV" g~ zujGx"%< tϗTjY.sKz* Xt(&bC÷ђif~Vݶ[S&ˮb},?BoP~-5MN0ʼnW(MVR!]"U'3CH,-,>0ϭ3"ݵ!΢ekhEA(/zIZwom!v+ưa+L ⪔Ǜ6f5\ͭȗqk~vvyeX_ ~7ix.S W 8~: .~T90PҪbu#쐋ErCKQE / qѹ 0Hu )u=}xEx*k lJv Js,]fcG :uQA<-Ü>{K}'/8ՅyGb?wN mJ*?+I} b":OpF1i=/Hjp;w6.@LhaXY* o V ̴ 3F~L A]eQg lqY .Bh9ğ d0"~j7/C#ɴsdfhaⳀD7x !W_/!M_^v2[v PoWF'h'~ kbMZ}.%8cȐ[`٭׀{]6YP0AsEEw&hO:^Z׎lytu-|j2ZC`牿?pvWL ՞8{[=r*HMM/O7'(h JVZQtuqכG^Z649vo8mka/63|} go30̢g58x ۖL-=])X>]$ӨHY  76j3 ܱ7僧X]G23.W5~;Q>7^_GW%N 98YETn0-0E# @iϿ"5ilt" [ؠVví2 eƘNqx %G~z`cۣF (aIBOP%Zv|™AZEY1b4j L凾vDv zڒtCYh?"Vij!mT$/[`1sZ6ϺW8P}5 p<jB␩'[$g~Z]S]fsi?v?D ZĤO]wd'3+]6)cl~1 F3+<39_cA\תL0R5dLN(0بq YUy 4s{""ܣ/ \͔y I)+QG%ᇱFp>al}{,8u0KI>u+]ň2m,P{A ~u ޲~YMe__tS @:V[U k'NJc;•QkQbģo+lF2;ByrRb鸁Tz.'=:dfytA:0mRao羙uB14#rinUERħ9]T9IwߋYFU9y:2Z۲wY_vH'l6Sku%ٛB;O4X(."r%u`VM0E2ɘ\nw AëGe!&>S_s3H;$_J姙OL+Ly7ޮyW&0T9%E:\R(O'6 Â\3^ݦ~>.=Ln֫>Dr_Ϸ?PXCn1|}_k- Νz9C9KpR]5HE݄6"eGݸg?(eWMnji$0ͽE)S5;0]Z(_Ik1 OlkJϚhh3H \d^ Gz#kV:[?&BOSd:m)YDvAːd 0D8hdԔ)tex\m^ 5T[bI*WERYt8l5CzwDga\I#9۵EJS~"&RA?bT4xzv9Vc APܠˁ{%X;&J IWenf#s!9#{! dvf_:QqYnEr\M'#XʟSp>}`x+Эץ04h<*1B^ <{YgWzҶevuT;)n6of֎ ^I_!Elg|ʮLZNݕb)~ѷjN.WW;q"JpMûUުԻ=]YsW ɆC\#$\7\/!цy~&t)l&k7wT#??4R.4G>g,?5 pU|Z͂Kp]k:,+}H5(9XCYpn:8Un 4} Dh=/HfQlaFq= Lj1<f%V(Oq6QT&zTO,pNe0/&f[lT0r4#ʤ9]x;&{- R x<7(P(ZW<{t AޟL0՜&?8 =t)@;}%5$ħ>H xp0_p۩'](&N7yRG!G}5K8 ~`yr ]4bya谔(/ЏWYtp}I%*>pCY)sX-:2hGK?9`b!0>eͭAH:(JF>XR"=T-{4&-MwH-g}Gl{P  ` Ҥ/69#X료ǃלXZ;3cXAtˑL{!:q_/ݣDR"XqIJa[$.MjN$j9*NQ%A Kp}ׄ j݇^ad#y!=yVF̡V*͕b 㹞cl.؊Ldef_`W@'B@V=sﶤ8x1OChv rQե9eIkJO} q ^_l)=zͰ%J4"WF"7ָ#E8$H;*u ?갠OѴ{I)mpn}8a O<)_4~ٮ&*tr%IjFG-F[L@6xCgz GJFL~`Br;iǷ }F,~=F zPg}H;=ԢU҂`E0>gZfַ2OwbFA\5uyUoߞXŲCXFܘq/Zn$2E04yf[GZJg_5Lnd#c6qG$#?u;^7A_>04ɩ!j)HkvVHkgp}lY] CZ6. (:]o=UcTJq8+0{\Z'c?uir=OPES)BqnLX4l4O+nr[--Qcx:o>&%KݣJɻ4vU'yZ햇ͰlcjHj 4<ѵB$%UxxjeyCɹٿ gΘ**,COE.G5bp3wpKB-dq'ri!G7V,4lg&/zyf77"|1EAs%G?XGTz ?f#mO7+Pjow˶ؑo>MHJ}̘VVNUR4 IrVruKdq,Rs98C(PZ \kR*#0-a]=[4F 氒jIN䒝~Tz6Ġ[ 2n4E?桠ʜUilef}rLmVk8z<:Qܺs9MIbml wGGAqr\)_[fZ˄KfO5@=)D0/5+6?XVniڛ/G~6ɪFGŠULDXE @ȉHBe r۞$_Ǿ6T󯟙t[0j?-ۡi}_[є9'ޞ'u*"%˨~imH@NfٖL?7t:?$"[އyXGfkM;qܜkg7dK 泤*Xn>K9փG߹cjYBLa͕ } 9bÁ,xj'gdHʹS]'^tOmc5}C~0/Z/s3xLk9.]}5Ð$*q8&ҼܭSuހ[qEE-m<4Aݧ!CRo'ޙ;.\d PP-7"DGq ې\xdZOp0ާ0:S^+Ǥ;+d; LJfd4O'S#U?}rŲ ȟlQ{WhҊb^wy*  LO3ct`< ߙx FXxT~CXݠ'y%;VX=:PF͋AJgKe\hP?xFvh`C)fZɄxQH;Uɂ)&Bz.큻y=SbQ"h 1[eO7GĭWjh?:"Yk|jda칿/dd۸zm}Q[?QM^ G*Ik~5,RW@Ъ.kb&ÿky@C^?FW XbM"i8FI&m;;[CAH2"}=F9<wo\XUVZVrr*|u,Ta%;V8/wįF%QiwO[0>TG TxsJIwn鑢/6[DUɿl3~4C(`&:rˢ;~a6=$q,7- ā,(hBnFiR~*+% '(=TI~mis \c#\UAJ\TSsbRN3kh""zZ* B}mЙ<V{uq'*E#(벸]P^0"c c%@TKowƼdt4{TtHgz< Y!\G$m)F21eפ%B.XލZP&o͋=ZU+, ˳]_)׃c ʳ;hƥ(2ꗔrϫ+֭rf.B%Ԯ'|Stv?FG;Ge ;x9K[dAq2k^Ixi^q?Rm^Qp )=K9ߚu]!>3v ]*hCYXX=07F{Lnj\> stream xlpM6mm۶m۶m۶m6m~399JVUOWk-RBQ;[ge{ZzN%Q%ezzzzZ&(RR!Gg ;[agN5c%{FFzz(R!;{G 3sg # T -l, T\- ]]]]\h]xiqR21!p67!06!א#U!35q4&w10"02u2$0s$C`dgkl񯘜h?:Ȉ( *) Hn󿲣&p/em_h- M,l.' #CJc]e lL(l]M dMm ſ$Jd?.6NBPl?b 'Q wcy wvt1X?$cblb%L6ֿ߂Z֌@l +Z?D@g_^@_B(sa`'aJ5rqt4u.,w#U;#`˴ _J?*Vfzo-͍`p yI<ęNMGbW|(7ހbɂF;glnSM3g^J: 1Dw"Ư/=يQ#ejA7)1{; ڇ%3/?,hҐ_`G: %uxf:KvX=~Χ],^Vya8ޟs}US&ww%ٕ\! d>9ݔZqvؚXWC­8OF#jLZq(p#TLs2b-2 =:?ooL`x§7 ԥ3K[5u;jqb9L!`l`HZc=T6m!YGS~Qyu{*kyz:-ҿ:`lEoµ~.R5 o*a/X;8ƇXke̗$ͤU5nFSkigV`yr@Oi3]Fi8[/{P"%O0UH[ñpK0z6E(<ZAC2Lޓm&]p-Z8WUN+yEevda!Fb.J Ѣ8\;7EhvǾTaVxHT9PgcRU]ri0L M̖1T'ŕn9lPL+zq"1}*:2n+ 7^oD'c9aLy5>57iDoǟe^%6Uf !۩>YL"M=] YbsN.;w뎙Cp S2M@g" ѐz9bf 3ՙH@%4)4Z2r&< f4RB#р~}vżHź{j򷄚HZ^0Z9%(OU2 ɝWKk0;_\Y,}Xcy=Y]1'kXZb jq] p`xY${̫OTve)އ`c>8nt]&;7~{-zeFw%Zl:Dȫ'>ɪ"QZ:ߢ36P9UCP`M6y2x@fv(}'Psa;2j lLK`vz(.gJݭWs'CZGa_5i#SsX%Hqu!iu=m7pէ*ffiC' HQ0,R -A5اh@UkNkC 2-oq\$ρCNRyQ,O-mXuj Sf߷?pR2!+{Iom6B̫"IkTt|rn{#UU'R-Ū^aSp  :T!gkࡳq-:. 4\AĦѨ :+gڪjP_7@%<_Go)#d0D4IB|qK_?G$G۰akƙٿ>wlwH/%˳vRuB8ηJ=E𕿄9* 3$o%v潨[jhh aPJd[J4SM'Xmrʏ)V}>+;)cxٰ:FdS.#^PDJ·50Edk.]fx\iNWZh>2|6ӎ axp/I>/x:[2zO4ROzp*_Ku)zԞ9Jk2Ts{X}פdc.م| mw^_>|N )^m'(;UfWm¢\_j~p[(>$4+]r;.U!*rAтHuw^9P9$| xhu+ҸOR)AĽYjۑ)p>t`V?{7h}S399T'r^GQ|\hMͯ*VT$*mV.qgH8rˢOqXCM4/6 Xpqd7x(sS (}:5$ ɞl_a5+ӱ>䤭BG*1zN`oI*G]x?0mWһG>+_.xR Z- д bM]k Uά KOA5s"u#@ ?ythQ_n'LOɧب-gRTtn38kOn7)z䮽MjTj^C۞QziUTEr,#E+QocJDi9/nbr~L>Zlөdl&'| YvG2Ɔ+| `;+4$"eq գ@HP;Jg'9hY  rn3"c_ǽ Hۉk= TN00&H&h>wgzlP x[O}f7 nJ.l?E F7WWi 6'k1`r̔D{qͼ黭 KWu[&v} ]0X '-.,TnCa~.y{~%ְi/GV5dh( 3AY8.ϼ"yo3 :+}qߧ~1D^$Fn[UQA# .M3 &ɖj maͷV8OCu-SKuV V՘Cs_L%:$,Mu_>DzMXhLjK =/zWyd#8U,+}\ӭcۯ]Lu<^Gv?slKZ2Z\hzOɳw[::jԐۗܶ9O'D O\q3s9KA]n!;pThǘhrv<\2ųA.-\ {PO]ĹxU$fugzZTJ0k-:2:sשSiۿ}CcIl~0.̂1Aě,MY:B>"^í+&I7oSyUр#/h" .F2i3}s9B IV7|Ps,;T4K׎J_:JO6[h@ꌘAE;*UI`ܘYw bR y P.#\MV׉e,b֍vDМ#\yҬXOPYqb1F*c8bĥ?48vUCݗkMQ~;;"9VRM/6`J, tE ϫ jcN` 0J=XXⴏ]ug{5>ZS;60n!egyf8K lq麅KF̼7UK[*[l @ :Rs#+Ոd0pLp,g+11אl#i/hj<7_~Zᩃ }1c ;1e~QS?M!CPx-O 0 ' glj~rK]TxgT0U<$` R8ZTe׫IfF^VE9cwO[iGeQV$LiIXFWlO5ks7zNC[Fs6RH,F6q [k7~f{l@m6 lR%֬,ڋsoxvMxW=ƤZܩL;;Uhd|C/kd@xfh2 y!KSA!UYٍ3=ОS3μ_?g0e 5I}䜳2ӦК8K@뀨MkBR9W&Lq#JڙH#-z/Z'MlJ!߰ %Ϝy޷x|E2cl&hJ-DfC|BxH$e0{׷(1GTYg)rlFüJmd\K\y| Ց@" Z#~qq5eҾ:P"ީEe$AM 8N_"\Cm;mP{ (k)gMS/p]"XV ʭJu -zbhsD<G<\Vi30&Wq9)e,lPz)]K_l!%FG(U~AҊo-/ε}pd$l 0|!I<=Cҿ08HM3?RMYZ$T$z{m뤪˧$p,7b&+7vYj$A&Qǎ6tfV_+<WD z ~"_@ |h-`_xT)6u]N6;(=PIf{qH=gQ./ߩu0t5>ݥ1rUEљO=WCjKlBw:v "#[BQ,ĥ@N/P)|=,fhwoF;<];琋:P5^np/\h< I˷QM1i!%2D$7p8Dq.*k~ˡeF4n71ifpz)|q0/E&`gny،ޡ@Mdf VE4]{]H<*9%9nhKbC5̦l CT } }Ǧ:b ΰqPh )7Ƣڂuɫkm悥kA~=&{yrڊrv9;rZ?B`߯W!)&F) |ݏi(@keɪ0ycuahn\t[uhϬ% " $P 7 (#&.*[{ 5_gfsmNc/;rU3X,VWPXfƄ<[lͶb%Qt6M[aϸ r,.f˘H۲`x*oCW60#+ +!wI:>.o #0ye~ul';ƺ)Y4<}cGdA- M$5^cٜzIȨ +JlRS}DXh{RsIZ&n<|WD˱w8=U[7ڏ<?; [ssnLgG7;0ڨhZftzvT6;V~C ,F;ł+r5%~Mu2]ঔynmojb2TNafek[D NjL !<b 'US\?BE:&RXP]{CXG>h~C8]()xn̐4rF]W:7M4!;姺7!`Ak+vCgׇ m1F![ |͙F6ϜĆmsR1bfi ȋn:(hqxۑ.qJ\~=LAvvnNڵ+H6_W6f[24걋a'-Rvz L6:_-lN:8F6mmjvB2^#o~B~e.^cLe ?-}:XVs5,:ߟ ֡~ ͪJEr4/7jYyNy;5@!{V_몙'Mb S>гVݹi'o0u;byKƅwM[N15INf8X˫cj7wFDp23B}*F\c<;P3|}4LzsM %IYhG m5SZ1! 2pc/ fcyVZjb{\{Ԡ˰j.B5Dm׬^)Fܰ}}n) c.IkVB`Ye]%gARfzߡ떺^t6RN0CmAsgS -0L|#xKXPg]͕ئ 3`υnS.͝4[w ]:T4c>oh|% M=bw,?QF˟L]|\O&WBwQ-υ[cZLjo/_~Կn*r<)\!o{*U dHM{P̔s;R}QGw7fZZ0Ԛuf@pSC&p]I6L/6:|VKh3wa\.]O;ᅔq<G%c['-3S $>8dpy N %)idؠ @Q0cW6-x_.絽oMa;;Ɉ"\~$4(+x QJ #'ӾML0'1MN!0OƸqr5l6n=9nSzXԱn0=Hj4gschNKoh3mD">QEĔo_C=s%(Bd?|"*Τ@3ag*KM4g,d%w>#?q|,bR ;6@(œDzi8׍m[xvmWpakA" .'"nÏ ?O А=wɧ+|$1[Ij5$n:tN@E/]U~l KNMunSue;eJzb&Ds<4%Y71M)t z/6g ަ݀ L՚B(x!w? kὙ#B&ZnyM1xgEԩ0nwŭPKLE/lW;˅K*ko}@<(x?m- ;=8αqWطQ|[I=eaA2e&Pۢ +b?ذǤY=miGy]  7]2ܷ0UUٕaOe"h.w&2-s)kԨzO`btD7Nd\tEN˫R\ .7䧐͆&3Ex>1F~R{CB.2QzMVMTL"Qi~vufmwK+[boo@U~48us+#(Hf ^n!hLtm3һr#T";v UfS# <q {X] ׫;*ٲ’$1p^~w&BNمVڳ4rN:y™8Z;Dl7| p^2{qxS6F>H&HFб?b{|<.`)?u'] ֈUNBe?vVA"UA1k|$NNdmB]KG ǟ.\89q)}SM,PQJ{g% S1*$KzC6a!9ଋpaC@< GY EL>ؒ9N#\}-zg@-l53r]h\,)nH:pxqn<e?mNd{Uؼ'\2p^d)gp5;p2mS6CI7aBU_fn#;6V|Sb@&] K<u5 Ȧw$T4(? WfL"_22@kyҢn(ff3+UxT;IvwhKW6^_O K2)R9G|| L8- ߠ/95}&XAՎW5vĹdqb8%-!^)8&gD>+) M!}ui:Wڴe0?W.VP*;prYFI1A4/sGz:rT xZ'5PV.eGt:łyzM=pꑾHL"m3RŚ5W2lM$'\q>tدXEN땡0C"UHS*ˏfC S+׌Gsp#ʩjq1g?QuX0_$RFncqVТ<`Kh}1DŽp"ciˤ-=6Nt5l& b.eO \|PjpZDd?JCxgj0$CFFE Мݍ CF5OEF<0 `n};6`h^>DWXZZ}PkM;@`|:is?sd]sEuLtpBNcV@)6sJ5fc{baq `4d 4/jXA$gCA"vͬG̊uP6(;[ꈶTς8Bͦ\wZwv30U7K>ē.eA2dMB9#Wq=^"1`%7~qTxBIkHL3I-1:{#np7A fdWe[)kD#%~(Rq8]?Tl[OqKtP!5v`!NIK~"4 "K|1V~'\ZPηZ?=Ƃ:ػ6۸: ƨRTk=yE6hNtd_whY9< ~_:~}>p ULپV(j7ѐCFZ.OT,ys#clgf` {@%m&F^0 H~T{Q/u|7bivm \Kጏ _é>O'4n@ԍV)+mېӢL>ةu_:7L5RIdmRղÊ9OnmFealn-)b4_5Qǐm曡cʕ˥~IX%Ku>!WJ"B~PZ Dg\-ИɔM2ZgƟJǖCp^x9fM^HJzB1x7 uK#@e!o DZt21,PzUPD,2=gjٵ#Q|==R+/igqZn"cmVݠ/u}#ƪPC @נ_xYc`;ٖ,́T&.v'*'bځ󵐶B"WP+=8?Rm,hcNXd`AdĩP puPj.]/_y Z>'Z PlqڶkveO`V*™æv3BݺVȹR~Ҫ ?H 8[Pm|:}ђιE'ttIbA8{P3#85ʂkBDVM<cCN!MVhcL*Yt5ǻ6v*ftU*YfÜ@VJɽ!Ÿ~6 p;,\206ޢ7@){ƠtwjV@ĬD%"2nAReĬ5wztq}z Mۏn~x0oWtaf}N&físO@=*UiݒuMk=FPD37(U5IsICtTWj!x~])dga*61R:9 |'*{R#G`ڜ1scpSȩ7冨9뙭JR5.x\]7_tq!ȹqey4fّ w5 ̂Jlv7 |.T+hυǍj5h)i*p\ ?v+J׆C|jFݦ)MЪ0)BR3iM6GP׋[)~_$S>,9TM)sɥ4No[UWrW -Tbhk;*=aQn78S4Ṉe 4}v, zOl O-oIw(F YL* 9TMDj%h& Ҫq37JS!ƒ`|\r] oq L|t-#7hJ|,=Ep !-CЎr6b0j--@PbW}&u6#'J<]ReJOrAw𭯶Kcw77Kݾ6]\y\U Afz@Fc$k#dK{Cn6ŝ?aưO@P}[Ծs[! 7|hW-fOѲ`IPw/:6i/x$ha]u=AZkh@`ٵ7#R(Ltଗ/ zcSQ3́C &Gx߻AT@ _ZS8+OiI*.+_-\>]:IEYL[`Gz4XatHUzz3\fGоWI\ wļn ߕE R\=ѮJeF+r($8yw]/+a$} _RNyeT1<b*M91"#0=x=couECe@ /eo ~Jӊ؂\ C{(=գB ^ڡn ƴsu+]T80ԥ^ [dmbfR=Oiʾ`wI&`SWO=nflQ]nyLZcDMX@;:3;C^Q'@cuZ"`"(ql.o%\̹-5Km\ff]״\ipxCA<nZ,Q-!* w>˸A%]h i' F4 ~lu~8avkWzcDnb&(ԗ%HJ=C<+  \($7xSSJ2+dĐ3Vk.vUpa^D֍Oo6!"gC;Eΐٽ^Ix1jU IA筓͠1:o7yjISy!257OCDWE{p6:M:Ygů,\kom۬o񙻍 b /kXӟ#`uV J` ¼yib?14ձRNUN[):l;[{r4nG `$Hy`M-5mjIH%X 4a"ȤPɝHP] P@ָl_t Z_qP, !8`r_0vA (PebsG[KN-/D}wٓ'S UI)Ux]`Tu:w|0V/ EOKx>;([X!7VC(njCN]BYM<㵐Yw&[mDvKG{ݎ>( 9P+z%={Ld`T.S=`b<uMQ0rA ׵#Iw{G %YD\0di-G=QtO l"D6jBI/e\"cDH Tμ$5 ^1i|mήBBORo7S؎!x.,b?Rkg82~G0QG}*IÃ\2s̗B?$LCs`8Ԏ6 lFݞh4_>-/d;qP&¦ 7EHt٭b,t&!W XAwM~_2 `_eψ\0`/x_*N:SNjdE&vD{|:a _^D-nZE$W$3z({ŶunC7|壮Ͷrx!d@_s|q$#az T=XM1h ٸPS{Pu'y3LH1屩BC0I< >DEm4CX%:TqJzKF>)gC6*<0A@ՆEk a$^eGk5@2'WO7&cs5ɳjus '꟏[ӜZ=F#7qʉ+\b&נS<*2Fl||m}'y Βw.0(Mb0в@fbˣa3,Ǎygl[ۅC؊asKFŜҚ* @􄁹e6*ʜ8dkEI =4/+h ,d+/aH(6́5U2@m^[ҤNspQT/A#(m%C"U] v:?e{aKFu >|<{G[nSʬОy E{Rb{A T3I"S`zJB08fY@/ e91qxBydcͻ>.`:ư$\’]ZUAyiRojI,M yKlUQ*ľy1 t*4l(2="N罹? D q "PŨ,rw5_+:`ij9:7cCTii l"_ 0é ;#O(Bc 4 EpuN2s4%i|EMo_E VwJ8lTHHfJ vXcJ`zڻ-h`cҳ쏒r'ڬm4n4Dw6F NC,:v2\fUu?y0^ K~[ټh2Ii4#)ANaf0`9f F}_u<5 oIڦ:]6T/b[?`Ca,XS Sg@%;U>?+.ߍT/_Lf57_R6^gՅ .VW|:e>3Dhx' Pu~eo*o]kbXtQ\03F2a;bNI'=$h'@ѯWZmJ>rFo)IR]1U-uD747@N}~pF}~`#id.L$)u4J ڋMഷDvwz|QA>=ߑ9˅r Z ,rvMOy[)#,"aS`Ed<_ 0,Tрz/-aS'9pDt /k7^o4׫H|u6 #V)ȯGM,H5t![9QxU@V枳 Uy/Z=ebbA]-zP6Ȕc78ؾ[Sp@ U[Qɍ=qƔ%Mr#/,l2 OneKr%#udD<Ϭ( ZaYsLGĪd4W3V^81Sz%/B5tOt$rAy/Y:G嘍Z(VWؗCF7GF_|"ւ1o|Fgw;TEpgIf;-烊R=a!ރ,@cUR!uv}oK# Gމ\D icGtJ-n4`"&{;%.vϕ Wх<_t|H)_U+S0Y3ni\e=Ѷ %~ZH?) o.81u?Ea>~Ylfhr㚬0<۞amwL<ِRG$sߝ{<Ƞ`OΪpVQ\64yyQ䳱0h!"eХ ]"YG5y۸ĥ`[;e(AXƥqg<ڦ8[_2=]!:E ^ yҨa~K}U׍ Z]/G ?oMJzGnch3thPj~^Xj^1b|اMNCiG?/J'lePA/ٹ[{|mq ` D!SZ.Vl罨 7;R~Awħ }dl3vl{^nqfssU8yjm,t?=b{[<چ >y"zSً\ , Մs @\,0kMW͒JX,0}g-75ׇSL%_hJ3X"Rn},9oyt5[mA0![&[7R>Q}`LS+X% y]+i/ H4n@6uq'5#8gaY:~?;Sy&Y@64}RZ+D'CCVA(6VO"ۭ*I2 dw$mt茳Yڿ@[Co8{!V#(yo#L^]Kx8b}j RWy 0P*mibuɍf'YYy3CS3{)~V#-L6TqA&NEj SKG}ġ2@nD$e@X•%OZ&e3XFnxҨA60<0'l4,~ p2tm(>Y7v&Ggκ^n@ T77Fq7VD RΝ /ݱVM R_kCdݒlgn\/d=v:(v /yYdc`%d?8/ i]Q"M1hمSlpa++//pKp|:m^9F3e 5H^P'7!0xՎЮ ͆r+T汐 7<7 [U(k '&OZ0|p!<jmk_$}(EqݝԊi5'/ԔZϵ3<#8\5/"9 -h7{E7҇OS%EOsJV:'#h a?BW aHT۩ l`>* sTw+ @ I+smaiCa~ s<KmǞW*Zż*6 x1 Į,;"\qq4܈0w4̘tonN'Ǝ ; NʑGo"L <&J`1/my*SS 8)`KʛVC7u(V >-jW8MHoDVb %+A+$#WWGUGӽkWf%s1$ܠ#o%SMZXQ?&h⛢%(8IXΎl5sB`B)_h4H7OEm@ӯV ڣַO^`@q((zܰ r:'u\%h/i ~,-J27iFrW6l+՝!08Ne&@te L1$$Soџ$[L9X#g>#g#w1 9=1Z4Xx16#)k,t^q6,q'lIx #tT'K(8v5{CnffD+Щ0>\*'d`A<rJ*$!Ȟche4Mkܴۜ:t坷>z]=߁zjc)Z)KߧzA "vA\8q$ ͷX ;n{J@P/^7F.;WA!>0C48.6gd>wtM<-OTlDRQnT|=g;|?-|EkxH$L4|_O?o SγY̝ٿEc&I6GPl"ᤒcP{6'{y&Os"r`OPSwwg%8%iص1<ɩ:wDZoHsM%G^Чk3ձ_5]+s1+qi@9hYR>b5 l3&V?:͓pR*ȶG=",YOv?Dܩ("Ľ],X7i$n*dZpQ00,[Ȝ'^( i`2rކVT4VƣeݲWeKnuS<~[7B+tH;DVSAjKR{윁RyH6 X%0lCrt50ỏ:rr)!ˤ6ha,e5:sDG'.165 T}i OYȷAHzi]M[HsMSf8!lpɟn8mW$}RjhݺP ߈vg^:>}Q;Uqu5 1r)sS7ij&ؗ e(4a}2Eլ CDV_xŀGN|//(r@BvQkG+j?"8Ҝd7PuRyȨ;{oگZ(F9|âtm3F%2t ռLR _] &#N6 Rbb#2lVlYͦ0֩*][ CQo.@*HsHPC[/p[gVݰE*)(d?1snmvT4r}&p5_$\hmDeMXzg]L*iHW\TnLSPG!~CJl{ɯjRړ )ކW4(2R~u?|,욾QIhp.0uv9J*='i!J;ZZiw;Ik3=Ul]j f|qo*lN"{󲨡 Ro^f-:Ej2|Lb1bU< SaG~$!UZ JԧU^4~Kӯ_ P%7)2D`)dG>Ka}q}#9*trͿ$L)*Niǟ2>J{$ȞIMx%syΌBU#z -)qz 6񢁡|%.]FZCo8H1I@zQQ8/襍SKz)JpZl {* π 3qrW}emFT7Oi?(u6foyg@' I'nr~i2&)3OyEO3N2m`P ۦ*mOb:8Y@}ذ/[ ^^wk2, U%\dLrY)3;H+%T`"Fԣwr9"e=aJ2xe ; LC{x_WI[ s8F:Sd6mۄvs\xd,AK!ͤ!A]u;9P/̛ƹ*%G?/U3eIҸ^)̅;\h4D$d#߿;pǏ*ڴ! T?'󺏿JJm`mg3ᙫ~Aˮ10D=:)K)n]8émv6v4U~pƮ$$%Yp7/SW;<༞.Zֈ7/Q*]t%բK@ҁ ێF{%Dw! HNVmcx;#-'ֵl~Jf^?#;<i oD8m]]>F p"u>I8>E <ߟº3Ĵ fg~4:eEF;N7(aӝTCnK~M{P(}=X" $2A)\FP7M׬etD?G`\d/u=V~\ xYtѠ {?w)V}m@S @1ДvyV`{kؓncq^ôdsωK{UO]ODN᧛lҷHNl";5U~ nk>OA"&}.g;9="qfjC_Cд_ʀ+Zd\[;V:+vGY]b^ 褉 }Z-)߳J$U+kKG$[#yU{x 6 u"Whlv~L ^ } @ ΡN֨`)ފ!߯di9Hɘ8hW_wU~9ҚՔe,$<"9u^>;?Io8wj*JW##ؼљR+xXe䍀X"&]p)pHE^ueT4hP)]Faa):7m^7 kca!RmI"<NЀ }f H54_S&IgIXJGmb4T#slR} wa1]gFys4 Ӓ5CvVF[7%Ox rt)&ْ,>Vi:&,^@n6b AL~)b7LE0 .γ}AkgPڶ3z i*/&@NY+ǞOH%Ffge y!4l'XǢr熮S?/$tҠ/ I2ᥧ${.vJ[&_AAXt+n&H!iQ98-k 8L^Ij/NZ~!&o-嘀F[?ULjQ-"@vwjI]%:D˘xX?(3ITT:UB]4 Q*#KpOF$Ă;1^,dj1tǁ• VJe{^#8'J*QU鍾  r^?LZtcw:7/R:w9gcNퟖr jhxG]ݷbuŎ1ZJ#wÕ&jz ?!rї;%}pzlWDQfȾͷ4EO%Al.k{Zo8}t;`Gތnm Fv<{t]G֦/# O}M0 8`Cd h`Z7G[%}Y-spdWT' _kCSGEII@yV5UpxO'&)y(qodEgCaG_[&@wCi#O 긳ӤOp::n!{Hbpv=/EB+Z IɝjX!i9G/ B0TPaR,^.U^G /F͕jw˲6_lCa sb́&29X3b:y~1k.>SC l]:pq7&2 BB 2[#Xu0%~5tkVn7OXENz(5h#-#Onx8 H_N^r#|S-=miF#CޕO%ttn+V&+̸="utPQ/ɪ5uK[^?Tx8$Dfn7Ͳ܁b ;jg(3Iv6:7rܬJ_FnJ/nSK4wv]k'dGN: 뿔 %}lȭ7T[XoԈ|(5`4ĩoVQjơAoH:Y& }U=!ajɛ}'ilWwB(AJ潃 _ʢ_>a*IGmj#R*CpMW1Ϟg&@st0'0,H}GH`1#@Ndd)1mI#F;GRIe:!tXL w6Hה,]ŐTpo;r{~U#< t_[jwqȮž Xֹbז?U9T/hwq*XhJɊ;6Uo6vL=K>k0g!ّPk c7M aGH=e;Gv+VdC֙>R;"ÑAmoL(󐼿`e:N?{460@0,cLА-OU07[ endstream endobj 52 0 obj << /Length1 725 /Length2 34298 /Length3 0 /Length 34817 /Filter /FlateDecode >> stream xlctf.ܱm߱m۶;m;mF'۶~xgĨ9Ǫ5k9#*`b`%'uZ9؋y@3*`abb%:8z9[YXLhYY94lܭL-|B.n n WK UTҖVPI*$@gc[)@h;8l3:؛Y ÿػ]f`WPTP2rRۻ 4uu#d?X=#123̬L]&@ +{X&mo@3?n v@+ `t{g4u5uҮ!lo}LQYHXy͔\ &?Y''dR=4fVU4v6ſJVboEXa_Iy8xг0qY9̬l.V.hoY.& h `j^/^4[ A;;mN 2{b5difxx{O0d¿{#}Bb?%_})!zS.xm43UsX_ Vd=q*Gd5*@N\]x֧D Z^쭁FߐZV9F4\Yj+1wKamSlW~m _Aoz/=3.S'P^SNzg:ܝqԣttߖ' ;]]rs[D!:M2$i9|VoC.apQfad/'z3z. _㑈E}` pc?Ņ}?RrTԊ590s5Fpr ?U Eڊ(ϳ?Տi%Z^8eC?yWՈn4Ka{ք8E86| vm?tuƕڣޗ6m8Cۧyrc1Ta$m3P  1{ FźFºjCϞ8x,A3`r]\z/ia %>#?%K&"tFҜ$?g@}[ߣ o}"ѕY;w]j38~BQb< 'pUN&eH8俺.7<_̩,G̺L 0@׆|gްpqM.tiKR2gf`իYW{zpwz8=czů.d۽A3MsMz W*B Dc/~?ߘ(TEN$kɤ~H&Q/Rf|2.aߋwZf 4⮩j8SjCq lIj@6zRpM瑘jϮHԆ3-{\Y!N,]L+e f<đQ]9 ƤYV7o:.klR:Oa{ޯCQsmńKrkAAor_JKD>9D&n %.ovdv7۫g]fzmRT@J0잣6eυ):Jb5a^WDZXpX(w86ތ)}ˡty$ջ",𧎟xNBӬZ(xz* JE5Ç|/~e3mx=X6=i0'9FU@ʼnX\wL ~"Q7 ^o, uKGf4ER4軃 -$1Е:l t.|YPt !@ dbG951RWݢTď GQ^؊|QFJ(w[$ʢj?'P~Pl}ŠBRBvףÊлU"Νɣ4ڐ%,q4=/ZUgG}нF~K4?e錽ddE}^<"ސM"'B5Vb5a1ʩ GuVa7|:]P}D'V~75̈ݱWƶB)!Y5ѣN1U }u2M 2&: TO}fښggzYkH/-/_4ZDž1 FAQ4/u|q\PCEo?#tQ H,r},dy_!CBT;ާc>[O(ӠfDㄶüWe:Ca[; ↏ I&1MV-TъTJעzUX ubǵ zּBƮE p8ؗԈ6jkKESrF05&pC[SpCz;yF*6@C\ЦLTaX8#c=ul]~ʫ]s&ŷ=ڪϏ}=5?QiȃFΫ")<%cJT ¥/SR NpKjޯkQG; qҨyo'2c:>E ~M;g5b)C\"u0+r\gbu#c: ٌ͋NTNgOjwz@F#a:RM< _ rQUegA/<\nT *,dY信# 9 V/ !y h:G͉@z{T- |0RzK|YjpB~)FrB./.oLWSHЗ9&48ch >6u ^yz.8yǺEƴ@i9 !5mФQZ<\'^*#˜~ufb|6)xnïق݌j&[^yI R7y5Mk%[-Wte/Q6O_DSFp {C̗>9{aI2GD bW[µnD;G`:~hHA[Duz. WIkxWKp_|JR^fW.UkvC ۯ򕇽a+ azPQ>ز34OwF'ct qg =t(KIi*oo:zc5!m"%deu#w*!Nz2yO/qkK D=¤vs^qӵ>.?|*鞌N>t8+c;ιASC@7v`+8uft$L8|+쁄+[ }DERӞ+|=VӋ< tcr2 c\)u*I3۹,*Hлϭ6dUg> {>en2HI(K>+djMbdt$ȓ> _~2ܾ͋w[HʹNS[=!`O>3F]1U`R+\9)")F k7;XqU-ai92L~_<oi0<c7]s}!G)7Vf1C`a_XjLRTM&dې.o_#T4E˫hζ:t/m/[mxm^R"ƒ&0"j}mvכJ˫S 49WڽedE#Z8DR=K#ӥOJ@ ;ZCIblow,KLӄtY2Hlb…c =b7[ڕ{G̡;^RrHj!~PteW&7O2 .~)N*\ ӣ}mv-~Ƶ Nyl|NHy+qw ;~$ ,׵ [ =]GoՓ-FFJN:7p Ff%y1/9=G*xT[kqٻ̅4CTn;Ӂ h3وV}MXP9)W6wK+9Ji7_}G!zE@ m1Y񿸉Ǥ鞃\V_'Mg6V^N$FSW*"WSvwmR_OL^"`=OpA)ٝ<m-M;yvd,CH}Ӗݎ拇Ŕp}I rݬ +:;?&B"D8A7Յ.kϛGJiQg'tgaN'6xuF}k jYD3+W)8.t'(dDx85%Q_/̑eDc x=O`aA :t4EFTx,[`,GkhQ_l\sqZ.Zg=@_ &]R5Od_C7̖.Kvx8B}of"39 vقջNi9s GXxtY --(7q'=. opW=|Bu*b}Vع; ͹ [`N 7d ̠^̳ʂBj$r⯅:%z gҬr'Վ1loVժToe[4⥦8O{r߳ܽ3ShT128ɒ jW5_F}Դ VGo`ڌ@EjK\a4."et)]N?X^0rܞR}]ht_\ ڜ, )}'Rbkl׆-˴9q4L Kʴ2 \ G/}VOŖrsAC2;ê,>Gm;$IcZk7~x>r-eyވWe O<8x^G#߁>fe[pt>:o/#j (]û0'ےCFbv=Py8 T/we!"f36ȳݴ(UN5v*JBTp[Iڔq"gC:k%W%N9]Y%.S$`w67D.biq\A* Ÿ^vj܊O7(yޏf,J` hr6tϔGKH.4XUg=ej1 ͦƁf7el!*0IM?'O}ٺ.8[0g F,4;}36k(Y>{緑$MbxY>|Qhzs~a1sIYYDJ͞;Տ"T=_֪zT3dXS+Z*8{$Pnb6t:F۶E6'?QʅS'=g6"|izzX"W(bȻ:FNJ@}1ֿԾQo ʿrry7HQ4!U #}9/čp9BN&g$A" !}Ĵה(\y۹ؒjXi.wUM<`>oT콎}9Gcc3'Mb971QgW>"-ejUEG?K?'[4<>6,H7m-DKCݧe"Z"5ǻ֝!MgS214.b'E+vFۺ$:-Ի3^_ DmPۜWU 6o__nE[-a#s.u9 J<@n\\-FS%\>K%w0DV_zɻج9LgcGMnS 4˸/L HęBt<b_5agK )E[}ŽzAF"{gz \"Gͷ?g\?FM0\ NO>2m aP9Uj̘ïXޕ]m9 AP|.mBzJfhj/-J+0{V-xd -M%K _B+e$nk8lvOĹp; bk+MkTUs2Di>.҅hVA;IX_{J7Qqj<6i k18%bY/qg8XxcŊ1{lmlR-wf#S4X"|x&Kyg{X|K}F2TF%gƧ »>y ф8['vC};A°$(T`%鋾e1хpRFԡ&׫Ur础u=5. 5A|% O/XQP 6򩺞 D=u;-統$y"[H]0b0GNZTfʗhh>2fё !3TtVZr5^ &>pc1#0 q~pT(QDr:v'u[?|g7;9+ca6ݭJ//RQD\0砭/dJá]EO4wReib)gVmg//9˵6;{ W=!ͧ YI-J<$o5<: ]C:d#ǘ~}.^dfCO"c*)oaOd~BT؉6 A;~oV8,]D¤uZs#X,{E7[`q1&c=$>ʭ@110V;&="󔃦2 8[M\٦EuޤB̮QR& e9%2]|pX6Ch %+y'j]߿e3ZxoM&ڵO*JA֮UXE̓@p+r)qJ_nElTABϒdlܹE ߀SFi5=BOfMt#MiNrPoXJ:L8Bd8z÷J5ȯ-#`3_h^+z*{m7B;rn`fV4H藆7pc΋hdU}~q;߅:U–xZ0!v7K'jN@% "+6  VۃNEƼs|SZU!Se^ D}N׿R;q %~]U?ԲN}\a?䪆st L *$_uɇxpP-=`zL2/ȋGzR>ED{_ jZ#No ze+ %&$F.UɰH{ @y m n7ױH'c[*=S׽"!Gͯ~&,_OgM'շg_pLSqA}FkRU/CW1Rp)+dHd*(1dJՀ v}-MGHLyj)˕3J݄߭wt-a:(Ѓܸ za菬{C(9ڲ)?ѝ7"x#fX\Ae Jiq_i=:>rŊ OQ8XTUnYه,ߞ{mb CQ7^җaB,+tR˧q/\D\)ޯt %dhPX vPY={th4&4Mkfm[ox}brK::1۷@coB}&9EV$ gmރ+&FW=iۊ)] \K#Kn{ .P'A. $L#!Hk ?,"*^GJmŌ{H/3aʜrf/d}Sf4Ԉ ۧێ<xkSJ qeRw+1LBJBGS&-J}П0i‘Z,g4 Zpy<ͳ8嚚NN[JdExa kO4PsM{V|G] )}%żfJDW-F45~jp7~A k@Mxk٢Dv%H\QK?e{J t^{]*U{ǰg8"şLD! "jl xŸ0< `O)gFneT;sS(Ѻ'L*y9ZbhbGne5K<=T :BN`pd[ni+שFUq) aXsq//2Nb/##6e#d׋ dr&?{WoRK-fg^nMOj3F1LV^'Lx!F2fW$@ۈҚ(}FL$q@0`{~՘~4ަHp{6sG{=\[~@mgIҶ,@R;` (x Zm FKӠDO1)1l97˽z,~5/]>־@A+J{rͺrwBߊA6п-|ƪ6!c<=-<]_=doHھ SdAz))ZC٫x?؏Jd&%NAs- FZ0|r #{?3OBٟ&G+ 1>4Huc/'j.x{&4K]pcpv?x|iETDde,8vBVRuCtQ%棞 aF> Rv@Y'M V-8BGD.q5L6Z?+Bl9Mjtk#{uNHoyF܈lE5BnU5ͫiCCV;$-!a-nܩRW qku@o3 Vݺ@gKAD. I;9(%uxN.O0-[?!hz5)2,)|AәSG> \a?^2J+qW> "޹aεϓzET{ʵ٫L W\[ʁaA]8/UIFE4n\UP[8"b?G>qNCzs2Uwzu-j|%#(.7[1 ^,!m}̼$YW+ͧ*os?N PwV/^1NWid[dS'jCU.z\fmi繱kb^SVD']DQ;Z(Z;Q@x@/:z> 0qq^"1wmERnC< TZf/9#iyW2 `T|MΦ!<EH(v:#Vތ4{:#h叞N`y\>2Ka%%bF#49q-^ܽ"!w,,,"H{gk>opYky0dyVYvfC| 8"ԥM?[b6?6V6a* 磑r+O&:\M(BꜛFy˂U4kة eW9{6g۫ge{ ]/B 7bI8@!$8R gS3magKw=O-i+4-;Ov[qfnp{ۦjxGQMc/H»lEx;jU "W&yr291}(&>I@Vc-0$4~&W(h#`"\?'nu Q(iS0e-.פX,萂QξU __:٣t%Ǖ.&[3FM7{J\2C_uP-lm7 mFgLGW%{gxH>դlF9#wYscFq.2T_A%!Q)rWk)(@ >g Nw1DΠ 8¿:2^*Wcj/d[`_>Ӽ0Z-scƀMO?! f };7JOtM3ԃlAq|*{ ԢTtMGT O" [}l^ݦlL0شS& c~%td}XไVp ˯i}6|!;,2h,AaQ9Z!i$p#b jD$9>rt݈anZF$l0y $ +R yIȲj288ZY{ꄈ}K5ǒPUoA9b(w0}ƥc7]wW\8[7TD۝~/f~cYk-=/v' +~ X -qk >Cr!dQḟ5-<r^f:+\FRtRБ 1Cǻ{m|@4ߐ eLP(ZӼݕ}u±cQ{%&ԝ/oD9FEtq*VǑ:Mp( 馤䚞 ]t@'&ͺ]o3[ugOI}&њU54k~88HQ"B猓aYl MJ;}(mX+ҽ1NMG+cp 6*nsm۶m۶me۶m۶mo}~!J2f lhb6L_{RY>s6Z_FVK[&Ic{+HLw a.\ r_# cʨ&bG ?h3!18ƀasӄHQ?E~nP‡ߊ-Moe:M.,UzP2;Bk3tbTgXzIpi.Hұ7XKD]f.+ k($FJCv;vπUL1kt p*nY Tx΅Ƞ(f?,C&;K֚E +g pU=Rh'Bzqz(gM"Q=lpڃ"*Eg>n z?"= 0o׊ٱ/-?j>Vx$sI6?-7!(5`B~;$8ibG2ѥ4ӦA K=Rh{d fe}]Ng_X aD)IC:ewMԆguKEh{OYp쇟`lTy. P`9eXeGګݜOP13@"H+ixp %0'Q6_O_|ӝ02g=9OSXRA .Z~!rbg _\$Stm=>Ѝյ '-Q4ƔLʌ[rҤ 6P9-Z{E P [{>Yt Q)w6U UQ9p3iDkDadU˵!_'͜B&j'ԣ`?u͘ޗ-Vkj%$9;͜Pam po񻮊#•K#gHRSL7{B>qow ӃPf*+_'4y aج\%MSAz}c M$U/Cx\%91 pG{JgBlSVm#ŐvqMmh0 .3@BkAiIgkJ5n~UBDk0j;Q;z8'GeI"}s8lU6(b|ɡ\뎙A:ɻ)Hn< :#t*/LYj+uVش JU()s?#y!O;GPLPl6.cEHEgВ&KF^b*f:NC9rAoΠYdׄ?-P.ZjF|AӃ̃U0(cXp9%lZˠ@YoKYռ`5BГʵF6nD.w'0THnē؏Z Ƭ'ߚmY$uqn8ef"F&%[Ky$BL-Ƀs; ۏf fyP:}5JR@{O0c.b[{]X+=ہ'KCY/6!>Qzfˈ!G@lq)K *8NH@@5#1:VK^zX27cr2^"UP4Ώb{fTd77I;_rAj^#٘Soa~UYp 'I /xSVeqMwtk:^yڢic=qmGn?LVnrl^pȚr]iLsoެ9&Ȩ<Ԥ:mA٭2@RS> B[ML*ܤUvlGk+IG*g,MmW,(\+5 Ѿa=RowB\~Ċj; }ԤRl-և|a?MTI6 5UK֗PKQ9n2RN&F HihLF@J앳 z ߚљKvx2B"A |t1 -f`tuUeբ$* KDp9vPΨlD/ B_\Un,?y39V@yar&ExT1E$J '7lia4:)+(\:K;:MW|&:%>g&v `ո"F A9?S<{.#w\50;ήu_e:Z4@dbJ5}$fH5bD^ pۤ)q.,ptZֲ_;@v%—DskO}/Cw OV{drADP,J0ҕ4A㱬s"Par.-8eѤ$8x_6Hd=HTR$!/L8DEL߰${4\Q+3%W)M S,JO6 SQC\֣SW3h=-|gQ Τg:%5[R"!+@p7pqIA3~STsʠ}_Fx "8HWVQj Kyub^>t@#uB  ȓEfPL#O$\Q&eES?˫3&VLU]Z!|w!̆{kvhv!֗XgUAvE"<0Ą0El\n8⬰cXDŽ8AG[14^EG7IN܁ <5Bh1eC}k%N,ifcC]B?CODTew#6X 1ņbY/G 7?e;ń0@ )Hxe|:& 8W"V `50Z]ߙI7Q'}~mmkz`Gޠzm) us\LetG;v‘Aq-o^!$D_B?pҝ}|Zk$9‚y`kϜH2_^3lcq;c@:M^ v`gGߢ1OEAN$]:<9w ܥ"J0y ibiʈ7>gj^ȏȪ2pZJANA?-λ4} ,Pf3h\tKd`@ܪgM8fo_N 9՚Y==҂1#uLjOxehԎjץi GPwm2s^H*E>Px1qeZHftcyjOLJ^7{PL;wҦ"4anjVs>6#=S}ϓ=C\sm`9[ \2ѝCV 5: ?2.gͪb#ƑwKD;LW' }~o}.]V9h-1')5 {$){مNU~xe 6\mk#}vÆJ#:[|ja=0"$WŠ=}"3TbnNkye i~K pNmzDsbmwgy^<~P^ btDmVT0l >KƁFY<'}y!tj/CNЁC`dnrSP3`I֏x+Zjo+6183]F*MR]L4 keScr0M\D'@kh'mH,qP-Ș$0<ס zuWK|KQ&UԨ.>$D$G1j0Lu l9-oEr|Tm̍=ajh3hFmߎZ?!y m J|0Cad3΃1N/[o|hA%f3 x Y3}@@H?J8av~T^㉻Y*JBpd(`I_$M+he va[ʙLp$T5?zܷawj)3XNc{+Hj,Psp51 (5n DcŤDLvnC爵(X;ozeI J 9: %ڬT932#u0-5<|'?jH0Y{0VHz/zes \`bucqH.1t 2n[Fr,E]Pwu%BuNQp0ͯ4*q'/4ycÈZ{ieĹݰq@`U > 1q.! x7N)ap+p&2m[ {,)T[+Jaj+^|4ii@2Z48+vC4v/>m1!প<jxZ +/3,Pmo{G ha$_(=chbd}fQ_Vӻ;Q4Mm_0Sdpe'>1)ZA RYKsZsҩ`kh@V-Pa*ˋQK8S=knE9]~p:]ȟ%WB"n$bٞV{>NOi_m̍% JYTH2whFr?G?J&&([5Ԓ D:16ChJ FYyo$ 䩺p~JmD@qWxƗb6^Nb!6}f 2$A2 _VQWǞWLRxHT*QvK,II={oK+b̸xƞ4KK' .bXގ7k3!tL,?m^oA p>y:)PU)|@K6R2-PgeD(kp`Bfc:LllvĠq<$k+: KƏ3H5|~XX 'z񟻕 L߲ ^it_4!Mҡؿٮ4 vXr8#}ipj ]8DCD /@&p(L%%n|U+F;Y` P麎b|\"ZYӭpp/9(.d9d-_3Tѳ-w!߁WYJLMpr˧=c˪n6ɻU s:J@2W?'?Ǿ!-['r@i?BOÔʡz.,pQ&Mo*nv`CSF}~ULv폿gwuz?Z}6$AazNǿ=%v#EH;Dmgʂmմ_)*xqOn.I(ax]&- \۟=){]P'it2On OA* as/1*2Ja FNHzKqUpPq\oIJg{BoCrWG7t޽.?AZ`󔒺 zbWȽ4P2!6,ミ,YxV~=PuZ>y#J@HqdЦjCE!g\H `\R8{B=Yʧ4]ӲQJ=RdTrkŸ\S2ӡ^UFSD"遥J:XqG˥RLgƜqO3Ri 5#@)%l32q[gG=+ ~AV4[`Mx}S?ҋ%|s/oa W%DR7uADwi{,*LToaQ};*VFS$v[B'KPXINWI_6Y3eF3o+jlfHs[]rev*?5"#T*-l[L\ Lw;$Zw\y s\olu1qz(<W>H g*ȵHx)`kB Z:{<ȞV#ՖJA8&mTC2Q!V|;!#B5юzt S]lSb P/zXOyzuy8)GW(di&LVM@y9Ͽ%$Zɫ?3ј`Kn g%lZ|/ZM+: q;?mC䤫㚏*ZD+`z3k_AhA7e9WENdDPdN|<] TgݥRwRE ̫T؏݋GȰ8ϝ~@&!hP|q'UE7Ų}q(эT#YFT)-p6vmlfؼBbw@<LECn5JLU']шo}pXםt$([ʝ #`Y@2E5n*I'?$b?| 왿ʘ8H2@xYҳk}(5A6\J{9z mtc%x/EjN<)rJZ0!s7G#;j !cxֺNj^EǾx'ڟ7x@gg~t݂UXl Ic=+YTN^L׹hyQ |Ѳ0" f(\9`Jӕdq!07:[;<_)/"18d5ctTy:OP3ͳmNҩ3_r$˽xѻj)WÿSoy[8vA7ᦩ_!<EOOc_^uwb49 K_sv!XJ)͡$`n];ڤN{a6W)S?{ !k+9]ikep-$La3$NG5y2YO&N"YqB0l2NU@] Ϡ)@J )rj[R;YnL+Hn7et8[Pc*tJF ,+6isJѥ!6pD 4^QqN&I(0O@#ݣR*!wӐ^w|p}%yXPI-,l'!^_|G~X_ L_Cy5m|BqpUR>akDFݑwgЬdDw1䟣/5tS+,?{WWsH$r@á* 5̴_\NSJ!xa Ջe4%u.BO`Pb GV||jZɭ𪰆adfSkC(xYJwmBD(^{mJBQ][CX:(t+Smӓy5>:chQUPb)җIGF%ZSe\";L<@M~soeFbi=Y!m ʱ~];ڱ\ he+CO<ĩBLRRIujQҼV17&P`g]tıY7omDJ͋xh䭈 i/x"D5K("!BS3tW;fFu$r'P!m &㯤!4[,&TRʗ>uR+,.c5>O- E9*aTDY2LCXlE(#5Rl!{r >=th;%4(` 3E*7y_݋rl"-Yf}?f2 "Ar/&"9r̿N;Ip/l.}4ލѥW,::>)*XDwT27MPs8=u mw@X q>-I ˡGLp Ex~; , X`H090vSZ>osێˇvR$)1ye) T*TgȑaG EFAY"EC\™`mpmA$V#E@4ئ< :2!ꇑKq`Lʺ>X^ʿKW~qѮ9{-W/Qہ&) !EWfv< xg1Ǒv3u$A>`P%i ]TWGͰ*$ک.&]/<}^ Z5cc<yU ER^}ǀwtKOUƻ(K#_?ww,v_Kh'q 2SuaG4-))*0ifF8H96XhDN6]\i_;i#5܆)vU5vo6ޓ.UpQO $A^a6g-$}m-7F-ux͒HWϳS@ˊa14~óW'Shm"uQn!H!Eo^fAdY!1gN l$2gQ,}zCc@^^I_%Vt4yl/L*XD'41J=^EAf!@*ӽ=\dmwxh:x!ߧX7U^e3n =;ճ!G_sz#-}ڦ-j}_ALĖo$bmDY N}TK]+M^Fr!q4 ]UK S2M:mY"Iڤ}K`sRrL%$#r|'P2Ϗ/56c!1OWd|옏=?(Q&FE^Y3)w9P[,ߡknf[jݺA\:L\9gMu.% R9_⮑@l.w ۺ]r0L~ A!8F~0kUT{1 s{(=%KgY:3"`^E*ܐ ss 'a`%o{-Zf!Ј[Ps?dʂ(! Jvڡvu{$"{YY:(RFG%Uﻕ8HQi/3r E_2_8Wb@t#Oɺ<"~Җх ɇ_Oރ҂j5heAū^@qSX Lj8,Q_oMvMG7sZeVb,cЩ+w etX%WOJy)8N>x 5M< f5$LlYlN}c~7vٗVTu9 +tfH0!#&_O Xȓf&XF&=D&:ҕ?GƄ@I%Vc&+H<9|bB3Rsgv8V{5y+!@2Erw&L(5(qKw?xQل9w!a4rc'wķ5>؍ra:q@ CN:o}L=l@\Ǥ O uFyW9i2\oZ6;8$*Cޞz$sH<|]n1c -l_em]Xc:hoOX8\\k%*JV%Z^sVYPnhKZG/EImQa%a}vcI\<$RI#qHHif 3ȣrqstz?VzwƘtzlum:Qe gaR;D$_Xh>yD· r->mǂno +vbeP@;UQnjȻ*<ƾ9ԕVq!Ѭo KR[ WNN ?pH*|=!&5,bK3 gG+mub`~{l7dV敽2Ršr: }g{H%^կX6k)ߪxtĤT_Zj"|IkՓ*YPS[TN}yĨ]$}5B;EfFZfBMC™4sbA2%'Ʊ!| 'N AibN]]:A16" ]6hѧ_QmM%BX.s Tãny݄aB/ǻkky=deZ )s#Jϗ ɝGSVt5u"dlgRz?> ReCGrql%\OwPrcj'@?rf f<-&: 3C0(I[LPw<&InR̖Ya\ʛn?7ĈߝLZE{si{tfA eV?5]:!&̶5f^@|2NW$4NT zEgDMxԾ6o\v%8UrBNcZ{Z \En=LWeqbktD}CzOUu h̤P$#?匔鈂],r)A)9Љ>iŶQ A=g7ⅵ=Y]TF.[XaiU#9>1j,f_ SnݫC^7𒮏 3!d ›H*W2^)τ|_Wt3P*d%-S yѨs6g92Q /<%ʵ066`\z9淈rE/H*8e:m&26_hlڎ˿] QGs=bS0 e Y<ҵ҆UM~.[5A{?v%rvdqB 'se@H"E>Iq{kR/Inٙ#7\Bt{Lu0R0$|M L1%HH~?9c#<{Zzv$^v%4%9m^0-YV ,5 v F4sÕl}"Ƈ~ŋЦ /GҥR!ӹ,YEۜ^sfUgZ[(sD1qx|\zo͚ٱ!x&x&< b~ }30KЯod 燍q˂+ʷR%W 9msH xO U kaf9comDϙO:ћåʿk=o&H8{h]Qdž5){QIdg]4]: .RIS n5}|*cA#ztTA{\V*cs1tCi~<>,u5v-}8"t¯r1;Xt#t HE[Iyfn.TOjXuʰ*^Lnp\NcYWr&s7$s3!(IPhHP뽽hۓOMcT4Ixg{nm{&v=WEЫ^{.7_\libK8l(tQJoA%XYixc:ʭ`ϩ$mX'ƵM02"pB*~Q Pn7q ?_:&u?ف3O#{78\T֨7R0LW47oևqeo Ҡ_`r,>Kv&I .3˷u1;Zuwm/cx&H3~H* E}fP]loE0tƊ*SU0p!꩕V LR*08 1k I_Cpzf#?ϵAʔ)_z&{SqRs8Cg߶p%ӏgM/bW';bfwѷզ6JB?Pd!W['AxV퇩m8f'o[1v7E~'/2T澣3t>GB5b_fdnӚɤtj1j_ I0Vq **:N h.ȫtl8O(^:rN0[%< O7 4t03QIq ͈ip&d8OtPpQft6ίUHi6IBk5pZ=ƿEF5'5$b}L5H`m~=02b̋Hkgڕ#ebWi* s zi oD%Ff(DLbΤ̗ԸXEdt-/ƋӪ3 X=E7%FNߕPg4^0A5TM񋭩!@g2<d=y K)r*yc2Hgo;@ylϩID\¶G%c&ahVd{ߢ{cR  YeҐ%9ESHƳt. '^qk\7+Ը%QhOKauQ;!=>h0g=~'}~d_)3*T`4aq\"oAֶAӛDָ2'Jdt q\Vڗ>; LTzA#>SD \Z9R :䟩 GJhr[&OÞRD~WjvNT1kF@e&e7Mu؊5*uVFu) ;{;{WCoJ3n/)35q⎦2G0+ \{n|5*f"q%ۋ۝Y,RQG'ӝRe Wug%7&?bP G޻{=ͦ.|݁\L4c]p@F0d=hyۚnA/y9P~dWm*go485@g}`Y~Q߂TLpZQBMh3ppdCj\Kj Cs䔴k:ZcsQf?TS&&qp״a/'˕k37.Os,ff<׾GN3G+V as~QVIalFJ8 4U4JI4 YVy\j贊jiő&s@cO8yl u7uђ\N3/IVI~\/njxFg3L]]`2 oRP_`݆4a!`#(.m'NO%!S?!tۛJfgI"[ٌPH<r>8N.){$ $.Q w%/:8}Kz5ctOGS<<>F_oCN*gtȾ>*/l!:lN:CaR>=LRV'>bڿ`luns&\$׌Ƃ(]\; geMBz=6yhkAT/OIJ;*rI '/ZDdXΆ_imj Dru QDW'?*#e}ٗgr;;MŽE?U:5Oږ)BE^480> K<̝<:2$R;ڿ1(oqb %I%#=)bR.$M94ߵۃ.Dx^mf = F -}*Ɗk"ti5]}X}5zµE PF LAvbnԂ&^x|rd658ˬdeݲ#S"(!+i`Ĥ\^EEs҆_Y1uPJܒ0Vmyl6Y1H/Ul3?gD<w4ht ZXy8﻽xɊ ϙݒ3M¿):d25K'K.qrdod/KL<.˰X+;$d{RrL9ăd5dp~ 3k/`#ӿR)!?)W.f!LRFچ x{Iv㤾<vp)oH;u[Y, As3{MLnA }CuBq?𫃞V‘ʓ̤5tQt\ߏHƧ>Gg/Ň5'ɅSR ])#ѪUq|_;xky4_)~27(U%ns+$pPʧs],'H́'$4@EҏxK)4Cod9 uVW,g9|4!;a SBzzޖͻ#"gaHyA7*ɡ@ЅņԼ&«!6cϳs*Xnj4h$DE%^&24Օ3N%-5ōrKeK:_E;Nb9|.4m3'`&]Yl8)XʀGf_v<6*$1ᩆxxb* qP r̟&&W9\!`TtGM;x@mϸqbWpN"z1BUn4"ȖuI~wjN>%itʓՐz+.V >_"M-H!.&O 0J&,# c&!g0ȳJM(55aba-eQ9^"<.ᵶ}Uf`Ʉ0np.^ N{8Ҡ)$TK< VG/•3΍lI+ `)>:UAQM%ۛ f->$\WY2:M# '53P:9 L=pEsd'+Tu!y{3 iOm{T-HR#}[ Qm&cPС}#iiFAhP1+0/׋mxI`@g6: O%s"XSAaeD[[RUk+I,ЎgmnW(G*Tkzو"8 endstream endobj 54 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 55 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5&z& h<ϯK)ٔ?pݝ2ZkXvm)85];B7gѻ9x~;a`>W'?y:o&> ݋L'/㫃Bnz_7_t|~;:ذƦoiܰ^\0zu\7g"NFsu_E07H6!L@@B@q\s *Tg ]8 i/nTvc-+>c_ZZ~Z83z3[:ޭ ߬Lg3t3-g B|B|\3gg|2?z)BXIAup*^+&#sU-'H8qɼe5A78{Y-7^=!U endstream endobj 57 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 58 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 59 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 60 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 61 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}TMo0+J6*ħöUSEj9߯ IVcf͏睟ݛ{)^؝}]u:vzyu|CW$nmmΑmq5)M{`qjS5NJJWG> endobj 11 0 obj << /Type /ObjStm /N 40 /First 297 /Length 2133 /Filter /FlateDecode >> stream xYYo9~ׯ.7 vưk ?(vFqWdKb})KlX$-Y IT!LxrLɤd39m+ߑ8+)0!R0~1?˔M/CG &:0vi)eF0Q@f cVtr(d lx`Ŝ = )CO "޽#3E<ʊR? YbH,"? Ӷ`3#u7wDam70B%I.2(R]:raC;P%$%ک;Tjhb#QZa4IHiVT=AznƟx!Ŵmp6GQ07a \7# ^./ \Q*Y3xE׍cFꊚJ?nٚGyOU6jH{ MrMT;氫x:xbOp8J;Kߢ¢I^wMͧgZ깤+(C֌+$HE!BxVRzss$Tc'U*L4xj#~#InfGA`2QR&k#`]dPjk há@7=cmJbH:}K2LRd$ֲeqXpE* 7LMک?G`xcD6G7FwR'$j1+QR("%GڂB$[;T::OD ~y,qRe-F*l+j$9IkJ9_#Em)%mک?IGI^!$nb1iRNWt_jc< С}.l_F0„OR=,f5Ɨv;lZ neg-wSz}:=L&ܐ"H4!*6Mdddm:zsxTw?ӔNضvP=ĸ*/XCJۆkĽCz{$,[zԵQ8Q,-MȨ?A~u1M l?r<Qn]W9w=/JU!'!UM; m5OÔw{$)WҬUw߼c=+Yn F\".?Wc$]Txn8eu1ǵ+6"jI]zlgt1aU qYE(}\"4O#t#lVOuaT4B>Yha+ DFG>4V^ z-G޷W#O# a PU𞭒>EV-pLkpI;eN(s> )cBT>/N}/֗P endstream endobj 65 0 obj << /Type /XRef /Index [0 66] /Size 66 /W [1 3 1] /Root 63 0 R /Info 64 0 R /ID [<29A6EDA53E770EBB92E68FC0832AE369> <29A6EDA53E770EBB92E68FC0832AE369>] /Length 205 /Filter /FlateDecode >> stream x=Ka+Q{|+ AlUhKUV ?ߤEp:ˏ9Q@'uQe= vq%.vM"ݍ&6>[Q1q' "$ KMbj&V' qZeIk#Vyr=*еvk^&#?Nt endstream endobj startxref 152333 %%EOF survey/inst/doc/precalibrated.Rnw0000644000176200001440000000611114232650344016624 0ustar liggesusers\documentclass{article} %\VignetteIndexEntry{Pre-calibrated weights} \usepackage{Sweave} \title{Making use of pre-calibrated weights} \begin{document} \maketitle \SweaveOpts{concordance=TRUE} Public-use data sets often come with weights that have been adjusted by post-stratification, raking, or calibration. It is standard practice to ignore this fact and treat the weights as if they were sampling weights. An alternative approach is to calibrate the weights again in R. This might seem impossible: calibration needs the population totals. But we know the population totals, because the effect of calibration is precisely that the estimated population totals match the true population totals. From version 4.2, the \texttt{svydesign} function has an option \texttt{calibrate.formula} to specify (as a model formula) the variables that the weights are already calibrated on. The weights will be recalibrated using this formula, to population totals estimated from the sample. The weights will not change --- they were already calibrated --- but information will be added to the survey design object to describe the calibration constraints and standard errors of estimates will change. Consider, for example, the \texttt{apiclus1} example. This is a cluster sample of 15 school districts in California <<>>= library(survey) data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) @ The sampling weights \texttt{pw} are already calibrated to sum to the known number of schools in the population, 6194, but R does not know this: <<>>= sum(weights(dclus1)) dim(apipop) dclus1<-update(dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,dclus1) @ The standard error should be zero, because the calibration procedure ensures that the the estimated total is exactly 6194. We could use \texttt{calibrate()} on the design object <<>>= cal_dclus1<-calibrate(dclus1, formula=~1, population=sum(weights(dclus1))) svytotal(~one,cal_dclus1) @ The standard errors have changed, but the weights haven't <<>>= summary(weights(cal_dclus1)/weights(dclus1)) @ With the new option to \texttt{svydesign} we can do the same thing when the object is created <<>>= precal_dclus1<-svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc, calibrate.formula=~1) precal_dclus1<-update(precal_dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,precal_dclus1) @ Calibrating to the population size simplifies the standard error relationship between mean and total <<>>= (enroll_t<-svytotal(~enroll, dclus1)) (enroll_m<-svymean(~enroll, dclus1)) SE(enroll_m) SE(enroll_t)/6194 (cenroll_t<-svytotal(~enroll, precal_dclus1)) (cenroll_m<-svymean(~enroll, precal_dclus1)) SE(cenroll_m) SE(cenroll_t)/6194 @ Because calibration in this way changes the standard errors but not the point estimates, it's critical that you {\em only use it when the weights are in fact already calibrated}. If not, the standard errors will be wrong. In particular, it is not valid to take a subset of a data set with calibrated weights and then pretend the subset was also calibrated on the same variables. \end{document} survey/inst/doc/domain.Rnw0000644000176200001440000000771613517345006015307 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/ucla-examples.pdf0000644000176200001440000027472013517345027016042 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/CITATION0000644000176200001440000000172314567546754013753 0ustar liggesuserscitHeader("To cite the survey package in publications use one or more of:") bibentry(bibtype="misc", author="Thomas Lumley", year=2024, title="survey: analysis of complex survey samples", note="R package version 4.4", textVersion="T. Lumley (2024) \"survey: analysis of complex survey samples\". R package version 4.4." ) bibentry(bibtype="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" ) bibentry(bibtype="book", year=2010, author="Thomas Lumley", title = "Complex Surveys: A Guide to Analysis Using R: A Guide to Analysis Using R", publisher="John Wiley and Sons", textVersion="T. Lumley (2010) Complex Surveys: A Guide to Analysis Using R. John Wiley and Sons." ) survey/inst/porting.to.S0000755000176200001440000000032013517345025015016 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/disclaimer0000644000176200001440000000070313704752740014634 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. Times are approximate. Batteries not included. Product of more than one country. May contain nuts. survey/inst/BUGS0000644000176200001440000000066513517345027013265 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. 4. Should drop unused factor levels from strata, but don't. survey/inst/NEWS0000755000176200001440000016305714576426452013321 0ustar liggesusers4.4-2 Invalid read in C++ code, found by Brian Ripley, fixed by Ben Schneider Updated small-area vignette (Peter Gao) 4.4-1 CRAN 4.4 Fixes to calibration for PPS sampling A PPS variance matrix can now be specified as phase two of a two-phase design. This includes poisson_sampling() as a model for non-response (for Pam Shaw, Jasper Yang) svysmoothUnit() and svysmoothArea() as an interface to the SUMMER package for small-area estimation (Peter Gao, Jon Wakefield, Richard Li) 4.3 Added Ben Schneider's C++ code for multistage variances. It is currently controlled by options(survey.use_rcpp), which defaults to TRUE error in scaling Pearson residuals for svyrepglm led to confint.svrepglm with likelihood profiling not finding the ends of the interval (Stephanie Zimmer) svyolr with rank deficiency and subsetting of cases in raked designs was overwriting the 'keep' variable (Justin Wishart) print.svyciprop() was printing fewer digits for the upper CI limit than the lower limit. C++ code issues fixed degrees of freedom for score F-test in loglinear models fixed (Thomas Loughin) correct the scale in the F-distributed score test (Keiran Shao) allow user to specify degf= in svrepdesign to avoid needing to compute it (for Ben Schneider) warn if svychisq() is used with a single variable (for Isabelle Michaud) fix svyglm(rescale=FALSE) for replicate weights 4.2-1 Fixed the penalty term in AIC for linear regression. Also stop scaling by sigma2 (Justin Wishart) null_has_intercept was being ignored for AIC in linear regression svycontrast() now works with the output of svyvar(), eg to compute correlations from covariances 4.2 Handling of influence functions has CHANGED. A function that supplies influence functions must supply one for every observation it was given in its input: use 0 for observations removed by subsetting. (for Guilherme Jacob) regTermTest(method="LRT") required the two models to use the same observations (of course), but didn't check, so IT WAS WRONG. It now subsets properly. (for Keiran Shao) This will probably be the *last* interpreted-R-only version of survey. Future versions will likely incorporate C++ code for faster variance computation and for small-area estimation. deffs in svyglm.svyrep.design (Ben Schneider) svynls() allows for prior (eg precision) weights (for Gary Nelson) improved names in svyquantile.svyrep.design (Ben Schneider) trimWeights() could get into an infinite recursion (Ingmar Sturm) data(myco) from Rao, Scott, and Skinner (originally from Clayton & Hills) as.svrepdesign now throws an error with post-stratified/raked/calibrated designs -- create replicates *first*, then calibrate (for Lauren Kennedy) trimWeights now works with replicate-weights designs score tests for svyglm (with Keiran Shao) svyby(), and thus svyboxplot(), didn't handle the new quantile functions correctly when standard error/ci weren't requested (Stephanie Zimmer, Raymond Pan) svycontrast() threw an error on the output of svyby() with return.replicates=TRUE (Alena Stern) Fix regTermTest for svycoxph for the methods lookup changes in R 4.0 (and consequential change to marginpred) We don't provide model.matrix.svycoxph any more;use the inherited survival:::model.matrix.coxph Recent survival::coxph() switches to robust variances with non-integer weights so check for model$naive.var before model$var Disable the pass-through from predict.svycoxph to predict.coxph for type="expected" (Bryan Shepherd) svyby( svyvar) would throw an error on domains with only one observation (for Dirk Schumacher) svyvar() computes sample size 'n' in the same way for na.rm=TRUE as for a domain (for Raymond Pan) xdesign() for crossed designs (which aren't strictly surveys, but are basically similar) removed redundant loop in saddlepoint approximation to pchisqsum (Qiaolan Deng) fix in summary(svyivreg) for variances (Chandler McClellan) svyolr() didn't run for subsets of raked/calibrated designs (Antony Damico) add predict.svyolr (for Vincent Arel-Bundock) add anova.svycoxph (for Bryan Shepherd) add stringsToFactors=TRUE to svyby to ensure factors have same levels in domains (for various people including Stephanie Zimmer) more complicated svyby example in ?svycontrast svyranktest() gave an error for multiple groups with replicate weights (Kasuki Yoshida) Additional chisquared test for tables with zeros (CrossValidated question #571328) svydesign() has a 'calibrate.formula' option to tell R that your weights have already been calibrated/raked/post-stratified (for Tobias Schoch) svycontrast() didn't work on svrepglm objects without replicates (Thomas Loughlin) error in svycoxph with rescale=FALSE (Jing Zhang) error in vcov.svyrep.design with mse=TRUE (shows up in svyVGAM) svyquantile() didn't pay attention to interval_type for replicate weights (David Jorquera Petersen) svyquantile() qrules 5 to 9 now return the single data value when there's just one (David Jorquera Petersen) regTermTest() on svyolr() objects created in a function now finds the design object more reliably. (for Pedro Baldoni) regTermTest() will now test against null models in svycoxph() Fixes to svyquantile: https://github.com/bschneidr/r-forge-survey-mirror/pull/7 (Ben Schneider) anova.svyloglin was broken by change to anova.glm(test=NULL) (Brian Ripley) One-sample svyttest() on logical variable now tests for P(TRUE==0) not P(FALSE==0) (Stephanie Zimmer) rename svykm.fit to svykm_fit because CRAN tests 4.1-1 CRAN 4.1 svyquantile() has been COMPLETELY REWRITTEN. The old version is available as oldsvyquantile() (for David Eduardo Jorquera Petersen) svycontrast()'s improvements for statistics with replicates are now also there with svyby(), for domain comparisons (Robert Baskin) svyttest() now gives an error message if the binary group variable isn't binary (for StackOverflow 60930323) confint.svyglm Wald-type intervals now correctly label the columns (eg 2.5%, 97.5%) (for Molly Petersen) svyolr() using linearisation had the wrong standard errors for intercepts other than the first, if extracted using vcov (it was correct in summary() output) svyglm() gave deffs that were too large by a factor of nrow(design). (Adrianne Bradford) svycoxph() now warns if you try to use frailty or other penalised terms, because they just come from calling coxph and I have no reason to believe they work correctly in complex samples (for Claudia Rivera) coef.svyglm() now has a complete= argument to match coef.default(). (for Thomas Leeper) summary.svyglm() now gives NA p-values and a warning, rather than Inf standard errors, when the residual df are zero or negative (for Dan Simpson and Lauren Kennedy) In the multigroup case, svyranktest() now documents which elements of the 'htest' object have which parts of the result, because it's a bit weird (for Justin Allen) svycontrast() gets a new argument add=TRUE to keep the old coefficients as well twophase() can now take strata= arguments that are character, not just factor or numeric. (for Pam Shaw) add reference to Chen & Lumley on tail probabilities for quadratic forms. add reference to Breslow et al for calibrate() add svyqqplot and svyqqmath for quantile-quantile plots SE.svyby would grab confidence interval limits instead of SEs if vartype=c("ci","se"). svylogrank(method="small") was wrong (though method="score" and method="large" are ok), because of problems in obtaining the at-risk matrix from coxph.detail. (for Zhiwen Yao) added as.svrepdesign.svyimputationList and withReplicates.svyimputationList (for Ángel Rodríguez Laso) logLik.svyglm used to return the deviance and now divides it by -2 svybys() to make multiple tables by separate variables rather than a joint table (for Hannah Evans) added predictat= option to svypredmeans for Steven Johnston. Fixed bug in postStratify.svyrep.design, was reweighting all reps the same (Steven Johnston) Fix date for Thomas & Rao (1987) (Neil Diamond) Add svygofchisq() for one-sample chisquared goodness of fit (for Natalie Gallagher) confint.svyglm(method="Wald") now uses t distribution with design df by default. (for Ehsan Karim) confint.svyglm() checks for zero/negative degrees of freedom confint.svyglm() checks for zero/negative degrees of freedom mrb bootstrap now doesn't throw an error when there's a single PSU in a stratum (Steve White) oldsvyquantile() bug with producing replicate-weight confidence intervals for multiple quantiles (Ben Schneider) regTermTest(,method="LRT") didn't work if the survey design object and model were defined in a function (for Keiran Shao) svyglm() has clearer error message when the subset= argument contains NAs (for Pam Shaw) and when the weights contain NAs (for Paige Johnson) regTermTest was dropping the first term for coxph() models (Adam Elder) (this was in R>=4.0) svydesign() is much faster for very large datasets with character ids or strata. svyglm() now works with na.action=na.exclude (for Terry Therneau) extractAIC.svylm does the design-based AIC for the two-parameter Gaussian model, so estimating the variance parameter as well as the regression parameters. (for Benmei Liu and Barry Graubard) svydesign(, pps=poisson_sampling()) for Poisson sampling, and ppscov() for specifying PPS design with weighted or unweighted covariance of sampling indicators (for Claudia Rivera Rodriguez) 4.0 Some (and eventually nearly all) functions now return influence functions when called with a survey.design2 object and the influence=TRUE option. These allow svyby() to estimate covariances between domains, which could previously only be done for replicate-weight designs, and so allow svycontrast() to do domain contrasts - svymean, svytotal, svyratio, svymle, svyglm, svykappa Nonlinear least squares with svynls() now available Document that predict.svyglm() doesn't use a rescaled residual mean square to estimate standard errors, and so disagrees with some textbooks. (for Trent Buskirk) 3.38 When given a statistic including replicates, svycontrast() now transforms the replicates and calculates the variance, rather than calculating the variance then using the delta method. Allows geometric means to exactly match SAS/SUDAAN (for Robert Baskin) vcov.svyrep.design to simplify computing variances from replicates (for William Pelham) svykm() no longer throws an error with single-observation domains (for Guy Cafri) Documentation for svyglm() specifies that it has always returned model-robust standard errors. (for various people wanting to fit relative risk regression models). 3.37 RODBC database connections are no longer supported. Use the DBI-compatible 'odbc' package set scale<-1 if it is still NULL after processing, inside svrepdesign() [https://stats.stackexchange.com/questions/409463] Added withPV for replicate-weight designs [for Tomasz Żółtak] svyquantile for replicate-weight designs now uses a supplied alpha to get confidence intervals and estimates SE by dividing confidence interval length by twice abs(qnorm(alpha/2)). [For Klaus Ignacio Lehmann Melendez] All the svyquantile methods now take account of design degrees of freedom and use t distributions for confidence intervals. Specify df=Inf to get a Normal. [For Klaus Ignacio Lehmann Melendez] svyivreg() for 2-stage least-squares (requires the AER package) warn when rho= is used with type="BRR" in svrepdesign [for Tomasz Żółtak] Add "ACS" and "successive-difference" to type= in svrepdesign(), for the American Community Survey weights Add "JK2" to type= in svrepdesign Warn when scale, rscales are supplied unnecessarily to svyrepdesign More explanation of 'symbolically nested' in anova.svyglm Link to blog post about design df with replicate weights. Chase 'Encyclopedia of Design Theory' link again. 3.36 Add withPV.survey.design for plausible-value analyses (needs mitools >=2.4) 3.35-3 Warning from svrepdesign() if type="BRR" and scale= is specified, to catch defaulting to BRR (Stas Kolenikov) More fixes to svymle() with linear predictors for multiple parameters (no change to results, but gets rid of warning) allow svyby() to have a vector as the first argument force character vectors to factor in id= argument of svydesign (fixes Stack Overflow 54239063) 3.35-2 The previous (3.34) patch to allow offsets in svymle() didn't work with non-trivial linear predictors for multiple parameters. (reported by Beat Hulliger) 3.35-1 svytable() could give an integer overflow with a replicate-weight design having integer weights, such as CHIS. (Elizabeth Purdom) empty factor levels in the strata= argument to svydesign() no longer create strata The twophase() function gave errors when the first phase of sampling had multiple stages (reported by Pedro Luis Baldoni) 3.35 The use of RODBC is DEPRECATED. If possible, I want to move to just supporting the R-DBI interface; you can use ODBC connections with the DBI-compatible 'odbc' package Some instances of deparse() needed to be paste(deparse(), collapse=""), notably in svyciprop() (Boris Fazio) Fix to svycontrast had broken the no-names case (Brian Miner) More helpful error message with missing values in replicate weights (Antony Damico) svyglm() now uses match.call() rather than sys.call() for storing the call (for Michael Laviolette) svystandardize() now takes over=~1 for the whole population (for Michael Laviolette) svycralpha() does Cronbach's alpha (for Franziska Kößler) many tests based on the printed output are moved to tests/testoutput because they differ trivially between platforms and so aren't CRAN-compliant. 3.34 removed duplicate definition of svycontrast.svystat fix match.names() for the case of all the same names in different order (Sebastien Lucie) make rescaling of weights optional in svyglm and svycoxph (Greg Ridgeway) USER VISIBLE CHANGE: default rescaling of weights in svyglm and svycoxph with replicate weights is now mean=1, as it always was with svydesign objects, rather than sum=1. This does not affect estimates or tests or comparisons, but the AIC and its effective degrees of freedom will look more plausible, as will the deviance. Fix handling of missing data for calibrated designs in svyranktest (for Brad Biggerstaff) handle empty subsets in onestage, because svyby(). (for Greg Freedman) allow offset() in svymle() (Patrick Brown) svyhist() returns the same as hist(), plus when freq=TRUE a component count_scale giving the scale factor between counts and density (for Ward Kingkade) example of geometric means added to ?svycontrast (for Irene van Woerden) move check for missing repweights later in the function to pick up more cases (Anthony Damico) fix printing of predicted values from predict.svrepglm (for Anthony Damico) added minqa::newuoa and minqa::bobyqa as options for svymle(), and made 'newuoa' the default when a gradient is available 3.33-2 confint method for svyttest (for Brian Guay) partial fix in start= argument for svyglm() [still doesn't work inside function] 3.33-1 two minor bug fixes for ABS contributions to calibrate() 3.33 Add explicit family= argument to svyglm() methods because of strange scoping problems (for Thomas Leeper) calibrate() now displays differences between sample and population names (for Stas Kolenikov) cal_names() displays what the auxiliary variable names will be for a formula regTermTest() now does Rao-Scott-type Wald tests, which I think are the same as SUDAAN's "Satterthwaite Adjusted Wald Tests" (but I don't have an example to verify). 3.32-2 Actually add the hyperbolic sine distance function Add AIC method for svycoxph 3.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/COPYING0000644000176200001440000000031213517345027013622 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/twostage.pdf0000644000176200001440000022114113517345027015124 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