survey/0000755000176200001440000000000014075235144011614 5ustar liggesuserssurvey/NAMESPACE0000644000176200001440000003053214074217675013046 0ustar liggesusersimport(stats,graphics,splines,grid, survival,lattice,methods,Matrix) importFrom("grDevices", "col2rgb", "grey", "rgb") importFrom("utils", "getS3method") importFrom("mitools","withPV") 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, oldsvyquantile,svyqqplot, svyqqmath, svybys, svygofchisq, poisson_sampling,ppscov) 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, 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(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(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.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(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) survey/THANKS0000644000176200001440000000477114073477743012553 0ustar liggesusersThe survey package has benefited from code, bug reports, and feature requests from users, including: Justin Allen Daniel Almirall Guiseppe Antonaci 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 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 Klaus Ignacio Lehmann Melendez Benmei Liu Sebastien Lucie Jean Paul Lucas Lisa McShane Ana Patricia Martins Tapan Mehta Daryl Morris Joey Morris Kirill Mueller Daniel Oehm Jean Opsomer 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 Dan Simpson Pam Shaw Keiran Shao Lee Sieswerda Phil Smith Matthew Soldner Corey Sparks Terry Therneau Takahiro Tsuchiya Richard Valliant Tobias Verbeke Renzo Vettori Chris Webb Steve White Zhiwen Yao Thomas Yokota Diego Zardetto Alan Zaslavsky 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. survey/data/0000755000176200001440000000000013517607716012535 5ustar liggesuserssurvey/data/scd.rda0000644000176200001440000000033514074415513013766 0ustar liggesusers r0b```b`B&f H0y@89H āP,τ;1CpNW9P~0 ,, PšZ d=k#əT `O,*J-.)O,KE3(\`6!ac&0)ab0AĒD"m@?!ư8survey/data/api.rda0000644000176200001440000070060414074415513013774 0ustar liggesusers7zXZi"6!X)])TW"nRʟF X#R q8d`&`97LPz1E x_mԥrQ\YtyڵY@ ?02H,1@KP!pA:$m_vX:`kݢhiQ6 [>? znP{%6g꿩ޤ z d_̡<{>eFQnm+J;LTvX*sbQvkPxGd[ VDʪbJ&d& ] Nfj+S ߘG\t. ~ g)n6'I?2T<8Pp>PХvP6:VqujC*2߽ zslx9&.$9 jkܮvݳ!.ܪ/ض{ZE7A}ja,א?`\<W鳊$ͅT]dϳZ+iNk<슉F {,s"_^2Bwh9-#EjXL"@zVv8ahއRNU#|֢G7@liNbx!Q+kqq C9UsOadW}Pj p)F31̚lPJevNgs;}1M![c&dg:^cgo+dD؎,n8U٠F$j2H'twR5]p7 aVuprHO@ڴ9NC | tyFigy]Źp4Ά6L*QI9vPz@\!Ls+LeHQMjƧfUM бg=Y˲m !'_n4ƿP/?#Tg+w>Ƿ rf6wdw֬ZaXeDCI@G(Dz4.:qA-n^裍URka?Fr%=o8GIc =5Ͽ.JXv2죓PW\H8ÏcpNo9wc {Pi"hW R!r(@;ʴ;Rfe /܍II6}%q=ȎAHN%)QkD (&,e0xAY枻zpp;FI׏ٴf|8D'V,vmgȐ)![Ԏ")gr*,EuSqtREg"ejɚWn}@tW|),f|c5*qmҞ:,ؚ߳D젊~.l5Յ߼hÈ rożx*D ma,6̳CUVz h.řLފGRܓ ن  o3dC&Mj+0ꙹr_^GN^qVR'9ĵ4:Ί" CkX.9i՘mEn*Ѵkb{Z|z!Z*},ƔO5o\vgl/93D7veh(lٚ@*3%S $ʎ: "~7[ CƤ"R1߫r3,erz3*x~ oUۤ:mܬ&07/ fb0a~oq9%"T;z(/ _/8Ϫq$B.=jJ b9*wk 5=(=ߔa iO)uw$wG[%%=TFϲ]%7Y0K01Rw U%`dZɨ +WpRHYmyД4Nh؋Ũhur\>*^#K1.6J(B&@yPߏ'aINH!`̳I'Fh-e|@F'ŕ$[^ء4ѹF:)%Do1Ҵۻgju6Qydke^7Ps#s2rkʸ`ʿ7r/GжֵOwdE0&JXVUºz++rZ<@T2>-.p@whƼD b0O*KZ F~ KpQ$Cq/k~G7y =tDݒPSv0t!KC~_UYEPt^ڬz]z'{mӦBj񵰢h_p#D&;Ӎ| B3 m#w? I"z~.i5ca9g6M7jIRҽxv pn8㙀TaVq3^4ˆy6Ͷu)zy0>e$ژΌ3pa>Nffv/}T@G _{nqM-0;RZx-/{T N;0r ~y㵬4~DN)V1! $ujSYÝ3fdWfe%Aw&|q`9L֜"O2QlS+S L|&Szd٣o}̒O$i4V%]'PEtvIQ`# mk@L}~9ϵ͵2ܫqk- )qK2)eߤ>a+uVW&G\% Ti :P9dyQ{|jL@Y`VJ r ~1Xt RH,-x7f # ]%K䏴ztBho=K;}X?$íõI]w  RpqF+?uL1ҩe0RUgl{r-|-apyQ g97z7'| h:~GoHg7d/sf*]m_W?5RZB "z\wo-&Ca'tkF/$"ڔ4?qp$VZ1t[ݍt0 9>Tb*QS#lQ.z:Aͦ"2uEx MM81k[}cөw׎:o@^7ֺeH?R@3 q%9Ubwtb_Rb} [[+FU]~-Q>J.Z(Z{dF Ze2AoYӉHρB-cnҖ2kZs%҈4O$](T=3,V}F^GY(0o{^Gĭ)$?R0qYrDXr-#eZƄxCWE6ļE`+@DnqM/* pw/4XNVƑ}1&6j]R~-́Uӻ Ӫ5:74ȃI蔅"ViS&6Frvd}<*]!V 8k<>Kr ehC_jЈ6Tړ+Kmy"׸p8;nc^8j!S]?H\^Khijq&lVG Z:$7]Lm j%m N9-5x//@<Ξba&X D;E$yD⾚c$^@}EZ/$MV?;c)ع#x}W;B8SiI8gqEO ׺^N0p^qcFJ^' 6 a/Q*v\~t{&=]YM1d6Gd{Z^j5y[3? R[ƨShf8V&:4͒,SC+H baΖƀKڱ( ˝Bj2q2 PE?B$߉~~q 6%rX;p"<'.uKGJ>)G(d: .X.8nG*78cQ۷igo6@ 5ʱ_k!z[Xvxy)r2CשuEfko;z6N kem;\O_s+cw? GO^iɏ-W 38;N&$4 L0Z6 u.\B,0JNt&2ܵ!f 38y;?0C7j[ȈN$߬5&gekT\V 6Z\e8-|(,KRR+Dbt]9Y$IݽBf$VK Vx!_/Y[]Cp J7lae1r7႞*g\=dwP'n|Ar/a Z43_HdtbuxP9Am"& it9HU/_W*o*_ 羬٥A<ठ 3 /y*[TO)'SH9=xZIw;4:o ZPMCe$M*ruBM/h|BxS8iZh Òr,t曃NkyqcUC6-m K؆*odI!$рڷ^y__MւTp"sK4LɱӅr:P* Yl6@Z)m rEB0r;bOj}DByI@gq̟eS[F;pLMϥض$␒ 4 x.urFhHsoH8u_-;M˿͜R#}=8+覶Epi\t+(Ho3Y"Bl2߲ZG#osYpE-!B1>>ME:*:cG޵qǸ#9PDHDcoŽϝ&R kjIآCTSZ!˫ՎSVEz-ԩj5c:~Z%A|ָ+(. ;@*TxksaoXqj<1[&3M|f<54]KTj)bƱcJ̌Kg']WF$zmਭۣZQ1`a0%bIJ/׈STeuD2]&yND3O`ܵ6uxtZ_S>YGݤ6{ lȭ6ځ3X-P08ǎζ$Q"ߓ,їaW-cyr$c SYA/fB%͞%JÂ!9)}g"jm{Z)AX!SVS2ѧؚ08/DSC8L88._. NhZ^]n, vRY. =yqʆJٞzU_Ab_oPT!07 X/dic śTxxL*.M!ֆʄ3mGpcZVeԷ6fb*"-6LvaZ55pQjp}_ $qMRh拸zܦrCc"EEH7HS!_2Khbv4pз 39.teC0':ӆF4pOiìC_ ;xrI>*4GMU/.-YD/;T-!ZYiB~7ǂ@ &W˽&(Y&cm5-ik3Rhau63554q'B^Հq=E nn8s#Dkc(s>v-"ÜlJHcYzvφAVzV0Ϟ9~Q L*l}˩/ 'xE}F9ݢzgS2[?xk}ZP#i'~-kq^RpD 坨sIZ.޳Ct;)-1 Hkck!,$MQ.xqOa АRܜ>y9^z@C ~%@)}DnZЗM~hXZ-ܫ4EK±*ץ֢I¦Z{RP76j.ïp[1OQB-֊XRKgv -K+C\݈la3F <07I96} r{i E`T)$KHE^N г! =NøM 0#]̙Mv>}⫹Ao VDٿ6Sr MnNNCKiS.@R"*tOS.;BPs<6,-qqg`Wpyٟs S 9YZ3b 1\0KJx8L'u:+l6i]p2AƊ=Z1bb@L_o4)'W}k aJ`hcN1+$(k3 jöJID{'JX#8٘!_N ؁Ġydz|J98P~Ԩzf }%i'-nRb|/ t/''`_y e.,e"A-u%춻 S)GZ˕l^爽侙C:%<+yd ?:aa4-uaFaK\Pr Bh?A0W$؁f S!@4Fxo:E2Qê,Fb3u2 rr1DסloT"ˆȦ^n,L) 8n<[zvW.)2r1u9 {zxٴ:N[{pÒ#wxߒnJh7ՇZ_혊^X$C#@/jt(g 6ėU`+? &{k"C2ad]3CmtxпYRl,!-n)pF[ncu6ywoȅw„m&x2M;1#X4*]\>E7UM˧2`,t=ۗYJc 2=8o5VJ0X<|{cf’At8Ϣ\tsa布L26il_~Gs 9[å5dJi%$@jګڥQ_([}yFv~i ptƢⴀ|4RrNjZd-z콿i g8%3ՅPJ}jNkEPJ7:6nM!|zX%G%Y:3^rk=(Іq?bI˸iE O{ ħ٥.*^RڮRF*U+J3 #ՀTE;D *2q!Խ홁w@ +L$\qtds.Ҝ. JMA:K(}xU*ET},mE#h˹kw:e;qjG)w͌ QR.(uI0얶|=YoT k0Hz05Uӹ7'^iӼr1 3uZ1nI B^/ J&x?gMsf, | vf*k0=]VBnkIpPh;n&,7䢮d{29oXOͬ(%E(mNZ:HD;)aͪȄdt@dw_(tm^(wkQ! {o}wC<,;I3eϾ)S9ˉ@!tELd8탾ZI  hA~jx?J:wQQ1<n^qo,{'&9n˙kaD&V't4lN1+=Eb{U!BS'gA7#Ac8!+vnl33&-5V(CI踶t)7Gx,:j̆gw66j8!.M!򌱒 *=}.]t$jHF}NNCzngMF'O] .([,\Ǭ]J!@1j\q1׶'noS`Lhbnĝ6LKW,ѩԄC- ! ;,ft d3neFF1JoI!tO#47A2c>!0][Κ%EKI%$;HʖGֹnnߖ+'LHbuv-䂟gvǗF[(/>lWQtPpw;Ϙ4w3Pi>-ީڱ1-(@6PdjA2IJG\?z= N\P5\ֆ]mduuZiǪئ@fvdݧ2,Z#$i"%_]yuL⦖M*~%}jϼ:S5@~vMޫ֘-HR GF099 WUpے9?BW|sw0h<@5m{!Zn/sȋUe&Y\[-&σMGݮqN:%ha8p@MW>Oť!L)R R!x$ꢎ؊-鬒A]Q:~|vH חvڞtCQWctöoT*2V27!~* V[Ī1v#%΃'p)2Kz\֞Ń`Ndd2 ~_IKm+/D9窫K$H0Ro c]+1̯mmb@Ó}. {ҽJ>uB1ౄ7](Ŀ|q>xG@SlY^!>yv g],x/%vg'3%mr^tyU,s s)pbxs/%A+~cD%Tw;V~Jm9plEecBCE= *(fp2n+s^C\5o.Z:wG1f(ʚTvGwUT$&ZTJ`C2فB.L:*n|&ۙDf2'ʇ*+( s jfcy^CjD/ o KGa8tcskteML&ލ׀ g"tU!ڴ}"7 tQY6WYLaXx-DJpyv%VxlC174.\^/>9{G?gXߍrU#)7Aڙ]󧆟d'KC;>o*p7dd홷5,pc%fJ%9Nez=N %`O>#={1I5 `i7BDG.ܮvY>1 9XIԖSxn,BDL*轛\jW ?BNmo聽 a@+"=>hD_U9羿.އxB*t[:*>hoÔ6 @n'-c<n&S2mTR]9t瞧H6h%w =6]?p1+NVz s Urq  tw"50c+&|H Qw{dlgy2"t?NGW`}Ł `y2LPH^?>=#E4^ۊ$Es\s1=.e .7N_^1M*ݸUA}KVد p7ׂC: 0:7\{v\š_iX.ґȲ>;!iհYc![l>A;'%:θ\b*G_w}{&:o )óIS&T/}Wš?7𪚸*jǽ3ȊlMvBZ*4S h`ѡչ^;֎8W<kPMTִ#,jr7PJV; Q PJ }+j V]EO'-j[2e6[P k?QVdbae -yc%,'`?ˏvpηqsV$2eۮ !,S#<:O^{g;>-RreV$PBօۍ77 IoIuq;>tc9AU\E ImPC\oH,xŐ׏zxUJũ了z&Mj :o5#rUmAC 3 o2+=#(lq6j9Or#=5(#C G\, CFR9dUac2P#Q|4jVNۦB\ FZNl8 >Hb\$Aߊ=𩛿*x!)ጲXPuqYZb fIע8N$#icBv3UN*HA*X)1\E!miXbͧ?aYE4E$k|5&&fP?yb"FJXOL rk SM(k*]gs֎HbK_xz~oI i8P˄ D&9-L9)Y{ײV1yfz0vc>hL( , wGo#?uO5_t73Q(/ii65h.2muf-Wt/tk 4پ 0\wp|ލoSceQzh@:B,xG9Z$%?s{̛'t _腔!AVxeM3ռ}/6)G|$^) +hn}!%)Zd$si1 OE'-|k넞Vd|KQ KS<oV[+H9)'LU,X]_< VǽC4\8V:Yz1Ji.LJU*d+Ƀ‚{-IP9v[ uW!`fbfka[cPجXBeA+$.ۣ 3^U_`ӧ*w;P'z ~[LlCգ2bk~4-^~=0)i4rO$ 2xl~.g;S/DNUosRTJO#p[)7Ep>$e0f)mq\k8|1/߳rNEgM'<=PRe#A/*3Y_&FTօw$7>֞\Y`rXfl'bUP<* D/>]]za6 0I8堼,y隔n?݄Po;^TpQ)`J@ WoW=:kZWkEbxS x0Jw'VSRrb ɰ&!g,3\"γ< =J6ddc.3 <*?mZyߡ|bqsnX oM[Ǩ&3kkx'!LMj6 ~D2 =jxMknn̰|nFb`֣]9Gd:|iFUk b3_Dx ]:t!6BMKQ+v/A9qv{Giʊ՗UBA[,*kDb5О୰#Bb4騀5U@Fأ:#qЖLz:ceMyћh /ʽqBƟwQ KBX]&":TLmªH/j-ɔx6mZs4{<G}J,]`2:4qOhb]M]HnM0j)v5mx Ύ)l_$s5[&\p_kW>񊹷' {a; D=š胛t UCɕXʆKvƢ'o5k Hx0;߻T!޶,DZCo(b!p! _afD2rV'w@طȻqp1ݫ@MdPlZxj9 }xC6_Kਆ{*8%14@d0ACY7b,GR`oZ\%13?W$7A|93č|y?}bɇ7i>6*a /m#-&qHjXlY|PSsO7~†8Ͷ)GYa]!xfUW ΰ^3ĺk]HpZiVJ~Z^10RlfU]m1:@OCz2 trw,{n#U>*D:3Cvf|x&]B,4&6J6[ ,nh?plm[(tR!ި=1gՎ t4ei3%9.9޽M Ry|`R=]k ߸w\ܗ#sr 9tҲCnbВJŃ>k]9m"X-<Ӫ^ Tb7mR---jqKh?􄧄`,[`U[>}c& ^FnpbrE1U5D⹾"mD9WLi/ģu nDr6> "jizUNO0t6tlvE ,bX\s>]yf@[lăFtDU[j/k:b/6*2]þA/P%3KD)L A䈆zLoJ&H}Ăxz`p̦ CW~_&E$8iFaO{z۞z;d }6)ڻiW̼΁.'d+3%t,ZqE͚jFFi\A6ʩ }mߢQz%#!l-6KKâ%S;kUlY6&E ʌ%Y{7I5`Jqj ~&NA!, wz@ON&sPCx l&Rwa+ckNg>ˡhl6$sԟyrCxr{Lz#4=8=?0Oܦd'ǁ"ֿt=6&G:b$5W '%5^e5NɌxˌ#h;I!ꥲ>N5q;=E/!L$8 =OE -X7NI\8@C~Z~1qFzG?$xdl--+\9=b $ vzEt6&U'8`'֤Nn{e04ԩ&v@h?:tBlLҨ9~qXccij,}{@g˕7?w2 'i?OξvHYց#uC3bS7$!mx)u5&<;`X0{\5L7"(ey._8#ah8f8ćh 'Zg@swp=0.:tKX;2^ը뒽Qǒa;h#a=[P[Dih9/P6<@ى<g]\ ?u'Б~ާjWEͱ%l EC d~lZm);"R< zCU)Ͼ py"gKze$ziB!oi16W)2m|F6bs7D I+Qi͊5"XSٶs;zt t]6i ^>,9&L #_έWǻn eiorO C&^~4Ń}#~si-Sm3>#̣ Uۑ.ga@=3 1Cj7.L ذ[ tw%S@Mv7%y|hN>A16JO¾y#&^Xi9I?93}:s8a:؇O"$2rJS e՜%(_YApOqCco_%Ynֳߟ6C3CjS}Z* BKo ȵ5 j;fZ_UʷW,^u5-7:l^pcӉkʝa!r'F^y6u=_Hux( ҧ<4%!P}1ߩw֭9ܲ=1l&M ^аZ=ӫcŇ V*Ehu6X (rѨSc\g~*`>b2ϰ ^kҢ[gaCqy իd=Nqfٗ7:>ãxʞZb]6EC( T\؛m%O\zzJ_Q{[S"r_u+%-vvXSX PnehF :>@0wUZwkOH,ZUODv͙j$RDxCe9zun,\cwHy9T]Dou`{ j"h:E;e9\4Ljh[$O!6{ PR5,\맰MJT\['4|7k#)E 0EU8iNuXb.q·nsOӭ+hT?SL0]0[O0f")*o~GMv%^R<FE&DdDNS!7kQT#I*ZbF:͠#_8d=HXVVk}]qQGYh&Ѩ_& |h4lVWOT!Kkoy 7IŎGqbQLOޕVǖ Rf{}mzh9;?ծ(teykv @O!^P_y}`Tl{HN-GN{!cA@װ+%PE҂Vtn&c=W] *|1bTtnXckrsoa̅/H[&:oepbJo{ 3=a׼m9u!t2(\Q3 ʭ,2oF(CJb@8ڠpܼgUTZ6Wq\zMEӱ5FKll ú%)߃M?Lj,xa&e+`#86|cjAWNmOi3(k> \8$ =9O0EJ1(j<{3\xUH.*bQ3܅ n#Cjɍ_ v,EӔI,}P_uFada J/}V[0y=3s9Ӆk 9%rY6go0`&tNWmܦaQC|p|#cL/P O25f:`WkJ"PwǛO\Xɪz QF_$jD_aUع` ? fca+ YT3˳6Oc'cXax !Lx/ Y+aߓUY/̍BOk?g2f};6f&<L.nPIUu=!mE|Ӈa{Cd{ 'uVY,8v-m+澍T['9M~92;6m8p_q(E;0pGM~4Ure2>ٓb%$vJ,-Q"4ҊV)߉g|ͩI*a) 8ν)ㅒt$S0,#?H_RMJg6͛*ŸzEH)`ʈߍN֜#JrٖP|M@5ktUJitûϏ5woWї±pʖ>.T4Ks2"!A4]oðQ9搣@.OTLZ W;},yĤ:Haf?~* .AM3U:_X>J$MP¾4G?7ZZP(\E8 f _ϋ ¿"}EYʕVE|QbzU!v* Tt^CKcQ?C~uGP~SISO@B8 \|{}pW'%302ۙ3_Yߥ H񨰦U@^z&bsS94HR6Nsf5Pl0$Za /Ym'`9v2 L4ΗRǕJc9mCA iOE'Ⱥ:u|HeQIjmt*_F #^J5=dߒӴI NS\]3l ~VJ\?ȷպl3]ā/Q'ӀFڬ;g2֐dh`'E2 $8J.>3ǽ-5˺6H1eS_={4?u2z:}Ba}\WW9Y;L>$} ѫ7w 4hC .Е8-rRn9#VZ(瑫ʐΪ 8!~ zO16 j+HҼ4fdxE#@N1cH^z>Gvg *c ȹ. 11/{/zFRv'fjHqvV`͎%m"vu' ^.trIos-S<2;,"?n 9vG&E9q#%} ǜU5ElY~"NNagt <:hz9.X[NHs__wO&r~C{Kwڮ] z ^XZ{՟W.#,T¨ ܌ >',(|0}1aneAi滼ta0{\;'~]UJi悮C9caag7 2*zl}I7tGY6 Aj6q; zY,~/xnjI< |u{jl|7s$>,F0U%A+=YIݷ7OxjtFSa S#N!jҁrd\h-RPfhbR2=.4IS}j~"spuP4Ky4~FG`8l"x1Hbe Vwa3Uz7LkĝJ o)6a"65w˟}z|ZsQ2>-/)׊mdSFPLo`܇l6Kgtm=+b\|}+Jf ~WUY)3%f |>8)`&;tF82NЬ'.whؙ /V1ظԿ鳵SW>Fݹh@ sBo}C{w-=>ݻd6lt'3?tnϪpӲ'  >BQ?)qQ WNmvQ#ܬBB#4> CǟH|Pf B(qGJ@={oNh M%c@g?Z?KB*?`y8X[S]j8ǽ9zOrBt&CU HԼN]^x i|b\O<΂4tcS3U&e=r^=쟎YFq- rlXsN"YA' [."񣳼ar,ef9))_[E|5#iRw`U"[5h+_I}LE]&"ݐ Nz $uO\TAj,<ݜ< 'lޝ\MH棾91aftwR gIRȌ?g]뺽rIv3._z :wlc] /Dze~0\3cg+Ŷx lK0A#_8ϽtR:~WKE*m$@#-EM> iL5?H[6E.'(N6FH^첌Џ9- pW<pF8tE1.")#tׁP5 Ǐ?'ʫ}o 7Ҳ?+`WtA=k?7D%r Q8(lN{~霕; <̫$I_紓2d",KGg|N-s/!t<('.7z.l*b:EG5 uJjw`ŵ|$wQR}t^S'.}Z1`k6A97!QtՎetFn{9t(|,p}^X|>CkLPG08 \}tGaTz09)~5$Ї:* Ewz4;*ln*t,wD.ǔk vZ |?-.RpZmy^hhflFBQ̮wz.x.DM\l+$39jdTZ5Ol[yiBcLCAbf E|ʤ;K`>Z.n}Rp՛< gh15d]SĊto̾ 5@rg3C_u~漶 [D9}&n${G|zn=."Mw2xJ6j29Zǜ#`*S[n&3~W~ǘZ:϶XF!)+\n`WvfcIC⎲,s"0 MF9q)Yϝ7O4ÍD?$A -- ( DsbdTqQ(Zh޹W/zq,5c+$RE!xG_Ç[H>FSdž1DYm V˻ЛR)HC;ڛ]ICIOHSEMx3/ B*.Ps%':(MPUATgqAjv~WIHysq(l圗D4sۃ'&Ya<}ъatgAT:EjOI…ٮ[t 2JKչp X:`H,z{\3ɺx_;dZ/Ê9dX]#+Rke[SrD(֎-p|Eo .ջ48K ե[LwrF},ȢcvP"3(̄g!\XZ/H{jgnP{|1z5jtH3d{,a"id?Җ$+mH7\3]Geݢ/+ %nj3 [@1v5J"}Ԝ,! WHLF{NY /0U*!F[^^^ ]Ǡoө/5g>A~}ؙt܆D1ce2(먃ǜd6!x_ +s} `269vNyJ"WX/';@ʙ㢨"hyD/:wx?qLDN J^/f) FW3_s8ֱYLHJ6C)4۰H;qll!rqugrܔhEAA0oR4iJX' 1Kr-SWkm;e%NR̎&nl`ĭ$v `>s:_Y&0|6NUz]kӭ J7*AU3vYohdxHNw^=ķr-oLGW/Tax|ڜvTMC՞e>˿6!(#@Z rz%!n3KG[,f₏D 7Q:7QT" ;~MpQbCRz8f}P\6 ,x-g`oMnne ) Be8toS;5C T}h ns?ΝlSnQ%Ѓj6IUd,}[] nѰ7&B_n6E@hkE2/r\>vˀT%KBTQit {uk=OZəJ zQo>sx.cu.kܸӞJ)O"[:5|8qzXy%D]4(*f]l=8w"q; ׯ'n5Ik\ΟFtHcMiN&dSUH1ςJs>5丬C@+\\tܥ#zHG}qyʤ+$ 3#TT'|VHu몸M va_z,!3l-M0i;AߒzzqG6OMoԑҫtIn3JgB#z[3I]U}or*."q=,>eb.) Eyhۉ1`1THD)i]l OZFhb,6GGCwQZwrR G^C3cq;o=ҥq륗ϗ2KlZеP4)r[+p؊gT;ied#B׋Cӯ +F90ey[IQBa[ߟZoONe/&M J~M5gq\3,_6"`zIf0bb{r5ԁ[קO" sdQ^"P&ž¤#'YcY ڬ+x',7P;(VwNꤳʏYM&bݭ%13R6Zso )4QCJ]=@^_acUHui?2Z`ɧoEOͮxzC;wxbٓ.\Sq NڦZدj_n3VR/H19gUTYSp|ds#1D";mDQhmj~_Csaݰ̉굏r.Z_cY9?K_*370R^䍡`zKPނ+*lS[XlT їoA IGIYހ$)V츠H*mv8ayr5/_2,~O0q[n)A4bAA\KuJY9Im \_-{ďԣQ,pjC8|!,<3+`%IVAQKJ _mvjڑ OMQjj!̃öt lsjb ȐIaW=⺛0ZZÂڬ ~ӱ*C\iIs̑ы@Y9GVE`CAr#*6d~יiHϠk3L7QAd"O͘s[XnȢ@Ƚhv"h䆠;]?ծ|a p3,?!X[ :15YVQKaF̓Rh&pw@_![=(߷Uċ)PL\O,E\#^Ez**9;/藽L y]L[''c:x ɷlE&P'QÌ"o>*Cl8xkg]/T:*/18;dޚLP^v[qWmll/(m&ބ-m_)lژ FzJPHj FM;zO1xZuhF"7nj)K%fTWX#-g?JؿY8*Zy(^c4D^if^Wxog5aBaAjT}rttL*wk2fͭp;a ެes(A󞢸 f/Ҝc3gF~AZ̆K@5q 1 =;+& Ck3g܈d${yrHC`Њ9e%풼5(А@OhjI:6U0i7KH?i,%̠U{eRLB@-.3q]3OΤcmȞ5cRl픑|6|N{!isM!g?# rĀ s9(:4+0w!ggg-Lŏ8~( |/AɼImy\GWP'XYSRO2DHDL1y7QـKa)رEmk&Ğ 7xpھ)'.T\r,FUf-,CXx3~o*67ph|ܑ!7V9-끓me;y۰,0:hItGsMC.;=eJ_ʘsʐLԌZ6[ʈ}xs./6*Q<>$ܠ|1^ XÄZ'p碂xO|<eMk9Bs쮿~/3S{zI=o[y<0֧:u[ @9]A[#mjM\8pɉ!ħInAOL!dmƪ#B"驫L/3^.DDWANQiEӧ)Z.Yϕ ̂!W8CkNXF`n[Hv) >K*нžͩS,XȂS!@HgoBFՂAʳFM<?'6H=qIA29`XTP\ E$ȔlOOO>#2>_\O2n=AaS-rIc [̤[Pؚ'aNҶ&ncc%Jx=8]@l}&?HBm]/(p k[HHmqΚҸ|j>ΒS 1]CgN~Sͮ'-f<.,y:Y*̆WenE ܁9e4/4ϗ9^Z<qGtY_ĩ`XwG_suhv{Ǫ Ӫ2n؅Y z6>ɲgϸCBz8눆ΑGt8u(!Z~|1<0 .QzC1DSO`(C=#nTNl>jeWAJnM_m9# є,fQnB=|YIb0ݡ,NLkd&Fdmsޥ2`A2q^9<;Ij.;)?0eqmt[hzO^twT%YOs6l55:Ɏ 7=xMvq!m^.NmcG#9vЉ>7DapZ¶RmSp=VsW@j0im!κL Ο @J7eT뿡Clvn/tKXbI(.NIJAV!4$y$̮^-$*Sj2(Tb&H{SOLx~vd=9}%%.@O/"[am\W\[|wV®44'S1EY S¥}(zF=2ޛ=")уBeZ]q"WpWKK8" ?)j٬Y(' |U-Z~T=zYT7I5R7+B"NAH(3G;Jrbr(!IhɦQIqC W<-@VE1KwDԩhbUVi;hEEǑR/X I! 1B)uqOb)j['ׂiQbuPɇ?hjw8YvɣL4ډأ|ݫd$|=#ۯ{艝~Sp^Xbq ucri {}>/ UtGM߀VIJ`Az0*n*_SI=44hBLA˴;{s?ܽ}(ϒ'sa!)DM%f-mN]hqF|ad" V\d@q]Gv F>\ [=K s]ɇ4o-S2Qt {^dw^$,Eoe?$E[*#K5 'Y *<>$%~ co`l=i\vR.@/9M# W~~2ʽml}'sLsvl3{fJ3Kceb&ZEUӼc54'vCfv yn}1fl)|L7 {3ds@AX}|ME}0I&nHwRM硪,b,E[lWa:jSy:({/n4?6ܬMisBd%%Sv:%4g&^=/cCe*%5VWv̹ dL*B+A%[Cco,XnMIq8۸#(.i&2^Lf= Ɏ!7.j⑨eY>L@7u,]p圑=-hO yɎ,B ILBkS :| B Scb wAL6S88*tΰ@)w(.RVV!&;mh4꟨=3olT/b_5426_8xhc`h2g*EƷnjE8J "@ )Os5LOFRB򐫻EU=SS@CzȘUwkލcEƕ>SLÁQe=EG/=ō|YdlDl{j~Yϝq9ws.43u|)=Tw?y X0/mgx02Ԗi/]PYVGӔ䂩,ypawT8ЉI "N[i4a[?-Yͪ*jοY<ŲwP`j e+?{Y1]_GKE1/e,Qbچ7p=$Ɣ%m3 Lxd.p:$LHShu g\eMHt7T=M݆i6WН-A_t{ G7+IJN_$'e"}\1t{'ҧ{p[xKb FS_@Mo t)䉤 ݷ#ҚLs] Ì8Ir˽ c#!D-j4,{jP͚ D%#\TPYJ>S [7Srh$V^Ϸp+%˞|+8с/uӆ!b^Pt,R'xީ E 'r0жIlS)TbOױ$ 8dݐߜ6ulFj 15ߖtK@,D)u]+ 3| S JeK7K(Cf=)ʾVۇ⑩ތ %IN&jnb$PdAn&e?vlݺȲqZ\aרXBP6ijg֝S鋇% xTkNYoN)'º )ߊVM7X3 kZd91LP[:,T ԛٶD8Bz=/Hq[w! >Hfn:3Wd=QRXzJZ}] ];0q6JS).IF)PcɞEHˏ U̚NZCxDxXԾTϔ1V(SSC^2)tj9A??eX?#f)P JJ&YBۍk]E%Y:^z`#wwn ^t]dDB矒DHαVQ~jaLȌ{bc*9Hr# c[K ? 30Ɔ'Jtڝ\dȕhQCc,@:SHI`Qy 71;hxe^0] 4&ϖړA3RӨnO/})i;^ŧ v͍ ڠcu 883Toe8TjOx.r=`|u_SUWH]#Nƀk{}\g@8$3aKV5(wU\n |>*%R{h.Z~-sler9}SC,ԥTPD8wĐ̈N#_s!jC8Omʡ1}7,UG[^.BIuQ|ɴ5G≲{9 -WwݾIi#"u¸sRE[ӌY[50u[}(aZ;^3z]4 ILM/Έq=%C/N;Bg \\_D p%63Ei]")zM-BD+L@i=uB.Q]_5huǃ2 4DemMU@ywup0.`W r# (RU=z0% .}.Gs3 tv.[6-?;C^I|"JmT~i =C2ԁ* ]e=Aau( J. : 6V_9 >*5 ḃ@RcAF%h8 촎azШSj{)q۾:% grз,nB3W(!-ᗆs9nϾJ9kbfscn ]- O>(]ܦWWgH@5{L,yoEׅY;2+GmSҏH]@;˕`w$8BF~m$J]I;qLpx)G3PRM}9+iK z=ِWAl^ȇP$!Ko;6"!=85ONQsOE0萁L 5eo#$W{'[Q'}xiPĩDؑmѢ4 v򛈊'R#iE+ Z D(6 6LaIBڸ~Tx/v` HY']8&CFLTHV!VtGy&M<0%fxgAD*؉O;v;4xp.җ |W9 = \}.BQfA9=>9i 28\HO_MU.7_+aJyiaȡu@[4蘫LVu9?Yz>R1X@d;SpYY#"s 1LtC09_U@CFbV+D%SYyDBGgɒ[JTny*urcHߘrYxsヮA%m\MOLisއ e"v3.^0N?.d䫋ؐ07p5#Fh^p"D>{=;z2jߝ M ]"I='HMѰ$>}C_=GɒKx- q&~ *Qέ ^px , NjخLg0J1U p 92Sd}Wbu,[Rׁ̤ ;I ߖln 6i0fi^ĦYĄO=OF~˸2_`E?!`l{#.9W%b23̷K. jm♨sG*('xWſf!Ic^#NE9@N^`.jTt7iL]6$X8i+kmrmgA0O frEͷ}[*5!a*QKRa&Fu "&<"H%zf[ÿe`Z5gGX&]ܐ{獭s:0l.YWodZBp!OC.=࿊ھy u0Tg`tn85JdPP(ohjCCC'<75`kj1CfTCv7K%%OyMp^$=Z+]u`RIe6BDpBUXWȣʳZ3M橥&03ȇ9X#΍3q ڥ%k{vZ4=Ɂ]*0Dar.3-kR'-iIBkn2UU ]p,"BA$v. 8Ue哨q_mڶ`1#_lN  `҃'QM_jHk}uyZODXI:͑U  QBº͏%H ꄀ zƶ}Do*c־o vۢ)p#(A|.pǂW<( &3)mn4K7 c Gk570:AF1{7w;Xd$r]s?WxD^5t)BGl8Hv;?e 5^_U,VwfX9 iVnh760Rtu}.2(^1sov׫{(f1 I"LhԔ,6n&ӗhZ;h Fi֔~.${ZN edQD "(a$oAaxKHw!,8/ cJŎ_u_D{m|s~1IV{a{t_) @V@3S.TJ|n3&Ol7BOnoCb O,OHޘ f,\= [^NIJ'*K.Y! O.>$0NCߌfd͕Rԁ NgN J-QI4##UqgyLЃké6AJ)V y;K,_GqOds l|wa ,^讛9hˬJ ^o1*e*ouGMZ$w22LդܦI_\#H>E+H%X<[bD-6z:P(1ED-ov<7 hq:S(2 T&:4THpVLNtGqDNɒ;fmWz;7,' BN .Cfn[67_u9[Y]!~9#ruahP3ux47يzK[/_PR{?/*f^2"fv)EW3=l7k/ #ko0%l@5Y+yV@5[4h"֞7۰Da"4`l%eZ"i$IJ"ҟuBVe sKFϪ\CasL)Y{wšf>'fzLm Hc! 0 e"{+OH8>@@$?Wjp徧Zm pZ7t cH0X~7ѳWṃ\ZHU"+`B6ݲw?䤃wN<灀0luY|K:mL'v[d0]N{%8s4,guܪi`dl+/ \*OQ҄ø'-c܈N1?QM|TwQ`~Xś p@oJEJI"+em]OއRSbuH 'lK5ᰊ cY8px"U骾Y1V!w|4u Tםܷd!{2!hrRL@NW 9k^]FƇdR+j_́aW׊OGN5"d @ ғ޳fz!Ҁa5@:'o:u_1Xv]VV(R}NY O9.XIN&Un\p䝯Z5RK;Gظy+5nkp9yWQD<{ՀcɂkKVPӘ[财$FyM]z\q+W^fǷx{|w<^&Î;F쐞5c 0. ~Ҽtc,4n )?FܦN)[bb!fVJR^Zd >Hm6FDə]z:8%J:c(_ :"xw|O [C)(Nv%jWr)0B\YH% gJ^KPbٯ  N(dLG%|I/Y'*3s~!7̹x9mּxu^r'rI\[v YIJgWЍ{Vϫ96ztK ҭ=[^m).o̒DiIT("{+xV H+kVKܑ lX /%2΄M0o) G PyG7 8!ApjuDsˌ/ۉޝR!`kʭ>1!e: yhI2!o&;amH%?J<C=2&b(0ڢ!FI{3\rgGlJ屹v@78H4d#k3 R ى)0_J*ԛ>Ee**]sdzy7P꾘.dACw蒦8TuH¡P=6ѿb[s@$|bdL'*p \Eڵk"0{THߔaJu㕬@:x/5j)n(R!ʼ| 22EaM1xs`^Y26iU}Zw]+sES`^r5%cL<3D`QomAS<=ZO| QI,B(+7nl*T*OS~y_m1~3rJrfJs9C]8N? ͩm$p5BXu6_م/wÝb$*jyXm&âBW "[8m8Fיּ:O}#Ws2Eѷ \X7SMJ>?ZZ<("q{e~ƨeiڑ `͙̘Xav@!B*"]_'2ܻ'O+Q*'|z^Maf͞BH}C|,t= "Ont(ntO]7V*Zs-%̓޷adV80̃W1x&(/ nkoLwUU>b+E 5ܟw*' u;o]6$w^|mSbn*hm,2!h4*gzGI640S[tS4"[:f|4cnKWl%k卦6*,SXZv+Y19#?]8kEJJڑb_q,2'ON {M{[09blG{HWay>k,)=ʶ)u6{?{w0np|]K?||xeBIZӅS{8зy6AM2f`5z`/1ߌu2-)s̞[a&D\6a6zip@2J!^>IAe% +9+1}(yKM-6R;n bD~jGV4{p^bW^:SZc};5 j\1Y*8uE~ȱwcO\ir@FiXMdb6 !][q>nhwׅ2V6{YX4e^paw9E 1*LD&l~ڛzv\Exҡd 3>r}n(!- ]1ƁWk\.Rג1@$c_,o£U4PLT)ն gj +an A+f K-J4k ydepi2KzK:@P'!H},4oN:&mj*S!`Dm@࢟ޮ23VY>۟[Mpn{gx4N?E)~_JswCUC1~h\:y39zTϗ@|L!a+ &D] cDŽe47EGg={ KS%Qت$ۮdUϹkw1~+EEcU'fx]>7Pl2VGg }QɭxMp}-AIb좳)MĢk  Ϡh"m"y.wa.\Gas8O6Ms9'8n ,zQmCܤ·ʣW0<?qrRꝴ)V+$Kw'ն{T&g"cu<քe^9#?W(yXDW34IItٹg -;[#rBS 8TP,W8Ti@V fFAˍ*ÿ9V=62lOOȁ`,:K:h50Pb5էQvDzo¤z{xEQOi,ؒGDݝ-OYQHA=772Fh6|> iY[l#1sL"ͧ)w ҇`&E1:(#:QZIvXvUGB{!Ej E3r*x>xf`ʧ|xJGـC2;~Wꅍigڍ(VAȶ-]ApoVdvsX@ Ү=DT#D̉_q=2{Ld} XߌѰ}JA7W;u^-a vnqgăXO "QJJ쉒>ޠ +je[~wϓ T DXrUk[jgC KӿŃi%_e9[b/f&#B C99![~(ty[^J)2d>ՠ:Z;M1m<ѿ-wN LAVV 85.;Ŵ- wa/hV]g+?1Vgki[mޮմZM NDoG"Kw:aL,8pve# [;1-Nut"E7+ya P28?bEm!9͠ cxsa9yD:-ނRԲlSkXsu:BJw o!ׯ,C[mfˬ4]f[mDaiIMwϏ:\17W{c6Ч}& ;wG& zB4V[WByc4\%(8PJPɄZ 9^Gأ?&j7rHZOճU{GJԌ 4+\8ׁxSGa. [8jIpx +o99uHl`'J /mэMۋSk5nkWb,%xU"KxwaDzZRWR6Bo#D!t'N @[أ=d&?+KAEJ1&Q#]*w.5jBg*[QM]pC4l}Z XL0BFzL8 tcW{Pb<j\4\hb׷F+1V}NSe}_` ;wF1^ʣvc9,7/{X\x0%~wTYb< 9+pUZk&&{pEX׷ZO'˘|`tzG!م_ϙsC5-Pl,?'5p?5esSO嶣i ᨗlO`U: -: _ q}{@+ s!J{$ BVB:npe"dDV8H( ia8'r^÷+y29DA]r(+\| 7SzGJ@#$dR;1H ros:QϝA03|$?t){zWSfק`#',yQvn6F _XkK_7[ r҈Pr ɛ}~8p?:6W|~Eۅ p?'_ⓣx%-]1P$b}a*~2K:c:'+F Gej7PVSdww6˓!.iꥆhm4kmz'kqp,lzNc o:HywAHk9MW!djo1nT{BE`0!t9%1^CQz^Jz׽]0jt%A)*̢$K-~]˞7Ӻy}.ʊ8Ri*R'BW"?gS[*Dߟsi} ?O4:'V0>K_)*VeٮȦ(f"}KUHNLFЀ!mf S߭ <34+G*ȧCc!G~0LSsG;H0%/,qmB{J4B8*@;o#e-KҤ* >xJ yB>E]$VIe{\V=`ԢI7p=Nbw+ 0),d jSz+ayy:<]0rvGXϕy5*СE D(m<0S S)N$SQaHOZ Ȅxy埊 '-?>ٿ` }o۳C9*VYnobZo1k!jA!٫ٞU/$oX6{|q z۱ՙ &RCޞxaU>~:= (m'xD*炘*@1 X1}diC̊ck[)l<_ T+4ǔ<~lȿ;*͑mc.Ӑ̞ӟMb,U^H$>sլ;ߋ Ժ@|W> xpaU_ '@ 9œc3lA/5DsdkGY/6PDS+M6tF1Qj$"{EO [ҏ9M"&OC9(/YLRc;> Gd:_3{+Ysh|ªdx}Vi<EB?<)W M~5_]c3zȞ6ŏl;?wg;j65OCmaǔ3m nd%;q=ՍOP]yy:_BB=HɳHb{6Lxy)R3L=ӥxeJNJ hp͔l)@9hw6Y NPbBW+Xz&p7=p;ERtEtpq9%ru_'0IչXd 4mQkoW"9fjk@217O|Jl>O:B'IMP;!90EwևP]34?}qÙ>e?ɐF-5NᔑዲHOT)슶X]UtUlaWßtۢGe֙*@1^C \TI}-ڔ2xw '8nmS|g"g$Lx,r/34҉ou^ov=ὅq(@,="06P̀:& [Dՙ>c(Z#N KmZ7vBg%]{UӸ7wIGNh F؆X~QJ*?SkLշ $enmT94ч ׁͬk.P+ـ0HdD, ]X w\20t%8C+?G!ڳn[B tlK2A M)BHvD6)g%粿@ҁ"0Js!T:1~>d2hsHPܖA{Ͻ^"y>* 92о'XGLLJ+^jhUNH)>$WQ=kփ\9ٔ e^Y,L&-AJjG R.3޲RJ.Rgm]c~n{)&5}Pȴ}N6Ozy_X<%lIwI"e˳d>aw]8/L8pb1sL"$Sͮ %Uyn 55N4ȷa1OE+0Y.0܎.hggPNQFuՅ,!xʼnW0VZ,MHmqRMx5`@r5第xuoH =?>(ؠp eot[ Z\9,풆Ykv H. z.Eށg,=I4A Lt4Rղ9ӭu7d|nEfs[b6n)fi֦YG=YXC0q W(ZxaT5ڑdII7|IoB`Wސ[=ȸZݚ>av.VSp_.4y&c?zڐ{Zm}y8e-p_C ia%b2I MEaͦwDӖb۷GBqíY(/,PKgi "~6\sb+9AH7$a#:&yd O Ou,8\|5tbh ChTmuڼTM+2!DpAЛǴ%y*xON*l00#(yMϵ h؟A!BV[)hW,}N꯷bV%PՄk:Aނ(ȇ܉YjM(#9˱}7d1, 뇦cuZF"a9g#QIނBBD0}9M̡݇,b|'J~"yBfihUQ*s!\ `n tϜ$9Ptdu{můy|yνG&*t,Ȫ* {Fddrde1P.ES"rg:Нv5gP R#=0 %]%j9}s u v[D+i1bO\X ">33tk]І>y@Lȥf@gA|Bmaodm'DKL+F C[2Xk<3,7b2C QMLng}{@r&{L. tYFt-rχg$fC(Z1xBdٽ6͉ f>!V1@bLb%by J 0-FZ!o5fg1eH3\W{W@UW=ZfOFFo$0p38zIfٙdYuha90)faˍo,1}+^vtp[\54jngP$}ylL: hӸ 46S6/ج Aæʞ6F%qh$}^{)b 7{ٳ q-bȴWj?Qkm`\X'1.)sb5Hr 6"WTC|ЮdGεށ+$$U;/S;ĴZ&y˨Qq̺0%2K[0IPk@`&ֱ7@]!k'ġf)CkXؾYu ]>Jᰱ7i u~2l4r]KY,&r'= %R|{L-LVwTfTS6i7C:*E4FƓǿN%39DSdȗMwXj3up̙]n=|gDWukE YR K͘emb8a?U^ǘIW'?Bm/|tWzD*įH~@^]%³b/v,/V>=;~eܠQGоcH}q)i`lRcƄju}7oBEG:hDɎu3yψz<9`\_ݴ4f5 ⁣Zaߺ$ٞکS ͜0**IC(\ox!ty ^!8ʟYh.P*f׋$CAS,B;$RNFS6%pQ  "8^ݖ(X|B_idpE:=85 Vm>su$VAL갶hFx`<._eDSFJv1vPJ/؊;PWk;~TzWk}HX38N>:zs]md]ьIiˢӰekQ*g- x@56]µo =xK:?rYf7)La. \M\/ĭRmxl 19GNaؐ"n) ^ʁ`;_@kY[@^Fu}0^=_\|R+ҭDѭ$L _G]_'t%a3zz9HWn&i|^OuGRS+ש5X{u~Θ@fhYAkaݒ)m\)5/4aNːa<'/ea`A|ȭ¾FV7cN&9:/IG e.ιgX---0գ( ]YSigd*tWx8;uhg$jsVH`LQ qn+Y]*)MЛ[R;DO c/#_s# ީbP<q.Ԫ:kE4^rZ^n_9,K`Vo+`Hx0yar[~a1iWZh;Q9Y|p9!] ^1 |˿`v3 aqZCN)lfsK 3\$w)8{|a ?кohƪ2>"r$X]q:R^=t& 3 p9 uzkPtb_fYԵӊO tfsܞgpS ˕RIBB2!Mz 6Dc+wiz-&{+lL} &l1|>@)>ļ̌~r`^wn»D^#59E %qI|D5F}e PKyOO(WjजK}.=gq}"1[X$u#fU*2%L=Ս_nq?`lR:a'P0< W"c/!µ1K&9a}65r Irf*kP (.0X܄=S#y늄 ӣ:6-{xvjuIך{A|-1P/@g+djL3G$ӹ( ˜pZ缆z..0 SΙVQZӏx8Q%ed>Q9XL%ldG䥈DaN@p]>kr$4enAm+M>&DDmiÁu!1?,y]Hq@sy*o_0.&B=?< N(WƗx@o%XPc"ԛ#bs+&1P!:AB6±S &%ȝ\ĉrʴa:zX>~ wn&/+I pݨ`Wrm/#AeV+fr)^RǟO; q''ڹdpHUb/o؜/ʐ)kxġ!otVW=9)r#݋OяXwM}[W ;%r)1h?l*jO͎|5Vggڅ:?̷nbKIKx4zU`Ud4+R墷UaDžbb dl]^TM0U=E,eޢR_Ҹ&h4z` '#㥿ΤjiTmv IK.`P*ksl ~GL"OXDBm3-T ӣ,Hk^\8,n盡HV ۪۷2")![rH)e1',Zlտ?Nb ܃ G=}CU_mV2 qհ vqk!!b.w)O)P&kV0iz%A~Kps7\]-qJ5|KVP<¶n#G[9 DC4\'cڽ2\a*2E-)'Cm 9h)T4ƶظRpE>N5dzu0j8lV$m qxу7>8zkO* 9=z95r? QR^?,\JZp+Zs\D•2sba|5yȖ⻣ơX:1V"*|A%KRR|om-V<\Eq-OPOpst o9prn%nCxyKҫ''_ћpoiM_LMDS1>2}ī7KwKA Q-#RLb_ zH=2]yj٣;>7,O s?;;PVCMٕC y:h}>omۤCM8jODҼ2.co|_Y ] í-vaRô$o- Ln);C^(,Ks aFe +Щ]FNd1ProLmR]A*# Ws1q៿Bܪ$8%oZ^O).-_YɓnQ[*F_eAF<~Ց sNq/]DסqGMr #>m$:Pxַg?O:Z94o,ؔ?nj ]=bA>Uu26ޫaDÌܜ6'Hۈж|7H?<*^ g/bjQ WӂMoۚ\[ J//ά{$0mVv`5j(RdoEj2) -N4Ř ؚ1*F`IW|\]۽؟]Uj׫)J u; T>L 6Xk`K8m̀|ř]%sDcS6kF.uwR,2eAsX/NzzoOHN84*}Y[E;u Ÿ,I'[ؕA)IJIA3I9CVcԳBt;:9bنx3ܾ8WSZPh8P{P(xdIUɍn:nJV+k3%QF oPԹZ,6FVZITk>^ڳ>#G Z+{@j[j;H!&@)H]]wtm55}yuSʀ3aJĐP*EBf#i ~V33Πl t!vQS`=E}>s8@h'v 7w ,S>GN׿kWرPar܀ WW` ᜖p]$cd:nzC7AG1bjV-tF6L00`8ǔfgo@gu`$K?uF9࿖dr_Qr/Fp+|ęMX#`ZHphfIvKpc}xeyZ '݊o~?ފAg!4F43*%p|kp;UQu[1сWp\ .)yϱ&] I EV v{K+=Ym=*`C;z ȳ?c`Nt{Ycέ`;lw:aD*%T+f9 52"?[KVhLG̥As2jERhBWG&808{odoe4W z6vT5,XFm/(e} X9жuj<py:ultqKk=D' 3L77஧_ P\FU07C>zBk F7ڕ U\iw1L>hvԣr3FtD(0WڡVP}͹pXJF!C*&3=UiUBԄo")}Y3֪DAZ>>gJ<"j;G fÊ& v͜5A5I`qaz< dQaC y-:Ʉ^x<ƨIA?_ւ8*$C1Z/tĺ<ͯх7O}5U֨D;GTfҾR@pf%ÊHWciUŢ!.mm#(|8Wy) TdE9M1ta6ӝp]aMog5Ugqg9/MXT~QyB{@! :"1Eqcx/1|+cJD٢lL֫38 1420н .Z9 &[FG2J?jgņO'363XڵFkV)/V G\Ia2~*k9T AF`%O]7pwZ&c)FQG4,y#`1 ۝+Wj#AE7@Q3g%ţUFA}8g:+wW[obˊ;\_.joF7uG nm|"VuD[ i!yU M Bƒ4RrB\fL94J,.&jȔ.xjTI[ζ)B C|T&>sG>_ʟ\ůSXp /7,]̺V Zzp %0(Q;u .#,`g;&@uFԈ9ÿ̩p pq`Ô:fvL%bb [+ q>?މOh0wGUb ߌm-nU4}B8T~,{:7'Q o+;:0"`/SזaǓ?;NTbYNI40٥R4W˻ZQ nBޱG oi`c nW ߊ!jpv@6Ntz9 _)XJ%Al#a^;B vyPR4.LT\ djyhKz/wǿ%2/e>c&<2ȊsH(GSt3Lz{d1 .*qp\KR# oG{#:ZQjBߥRϝN7 X4sXVќټLrG 8N j-Y$1p@fnuؓVa Rٻ,< ydLv LP \~ bX i|[|fx>a%tR1ju64AT-:{Owo,}#EH\`cAƇxHc?E-tK,n|] s-ʈ.DƀGV7M"QހBS(J&C\})p6AATV[eΥ ,ό|lk=.]?؎d5hOڀ辛9djMvSK[?y7zamj{ =&:z[MqƠ"_~m1Qjڐ7=#F)@J0j\8O\u*{R~ΒϬI(4yAO0Υwn=YnnqWwtu:<9.=&/cwQ]J`ZbbpwG$@Z;(0_4jX;Ww.>CuyOLb8vIe{;uWcW]үAqvM\ɾr=6w9j k0{u ~xX1^)-zlqrT:{J_;1fJSCOL&M`ovӜH!5W>$!"Oy={0'ȁQ455,;L[zw|W9=Т,^x< 'W"/}x֠5vb57c4k\+xlx46 i=cBk#JV@}z9]{mn %s8o@#fNЏ`L_u=)BUtnŷ534|,Ǝ5+#|+g3~.nx/R!{U_5L y#`p(Ck3tge"̣l8DG$ Bw~T=bVxc6Xu) ʯJ/'C{9"|6(?;V{X;װD=M =^#a㜛 |wo{B$6߄v9H  LKw`[9%Z`Km' F1Y@q2Ey>ut-s_8ԯ]9КWkYdJjwƣzI< _`/XU:_WրQլwB>h캭IgTUW"9Qpn"rx.< kl|{zI{Mwt'vy;_ }jatw7!4Fm8 2M <" AI7ªZ)'3u;g)SÓL31=~U2_'?>wqSWT˺3).y*ڐ+K]^.$R;Xop x)`Jz(IY TP1V_VҜ -۩EJgOAOzc2+ N ߎDAirk!)cbR٥qb-,^XE{} 4ƈУ2;`:YcG&TZdk(σ)_&%A56 yYQ ;,fu) ʺMx+UX&zy:>}Z5ho˱n1DTL)ӱd!GzQ߻OQ*J!뮭瞛0T?)>|ENf1{:`NÝ;(6q/yX2F3Z,* =BFx}ЬeX=l@e+msMafWp_ᕼE^-W,*<W74bqr9^>S/]ۚ]f?aJtX'PGA ֋)AfzCvz83KZP'Rh["Q{;w @@SDm4; &n_^l>ă ӳj,*A ϼZZbrIoʕ>_%À2Ti`sW[jެS[1z0:ٰ%LH! ~1iEBt5I iיSKUkd!^:r+-xXE1O^z ڕ$8{,VJ!8Sb+oYٲc;x Zʣ!9/9Ut9<̑4.ycCE{; VW Eo 1W]_ ^-51f{–Eyϣ2g8sRjnV wl[BC]eG͞޹59b5 qRj{~]5{XỚd_J宵LV{`'C5O~Wz 3 9ZG񺋂VcʲRE,1?x%S`홸v tM=G-jIyI{NѶSPZO6 p״-z];**xZNQMMX?kbC? N~&7ȩ p$vLqKeE5PQcՕQnf uqMksuh$I "֊0tcMԌx.0%MzK̓'W,nE><=w͕jc'ЃyG_[zX1b_oDgs{rEʴ;EU;<ΗNol?Tӳ"8\ylGVY=BEvzQJq PR xUr\xX6@]klW_wS_ ")+=pT&2&Gwr@ 5*؎Bf.~F& !>jwLIJ.+i9oZeJ7I6"%aurZ\l N25J/7%Oޅ9·_I3C<޲zjIy٠3I䍹EpZp0֭~ 駐4]Z≃{`3{ZLm2!$z83e>Ip.%c!e@ĊxôAiwfS i,Xg& <Ã+ppP{5 zC KF'M%n7<xo!zcvSNh6ץϣ/>ŇV:D͍Ojg[H,'q`:k f_^i*6BK` CIXrrQjŠ9nXwY f=(ЍO= iz1(ѵlMN`i0gǰӌDc+V!_QɃ2rnԍsmSDZRˀUS6ZGGǕS mljQF*Y;#1g˓+-|ccdd(`ːb`b|ͫ {v/6+HxWM`!v+PN-lGvb> 3bfV̢os}p6G D?֛9! iPC!ep0ztQ;6r׶9qQ't&CăR'h2M#7X:f\`x mWMIuyXR_G#F k=' uۯ@RFߔ3rF4f]k:%kw#_/.~MQ4ZM8yUCG.>L!v끔TBJ-r:-hK? HCLVy \thxz6&=#IIlW5 LnrK9sRSU'ܺG=FGurxf:vPV'}iu*U7ąW/ˀmT3JH^?^0akbPQm2Adi+]xfn"bl`*1@OR*sW.;X7Sax33ǐ+Jl%ʹ_>rIǺ OQm^,pp - r򹇩*TyU'wiGSX5VRܹ:-ys#>BPZKKOʕ!eT*{`D0W[L7"D:^L̝KAZ rJdwOw]81AЃŤzczuypwUHWZXNOb^(I\Q좼+>*<G$b@p%5eDF7jXU{k}Hη/'Hx6Gdthל,J",?y1Lү@e{gG…|^lrAӓW| Kcrett'"ϐ/[Ks@ؤ~WMpW|TyaW_3Tȗ!@Wqap:v9{%=?$Ā@ L= 7#M `Xk4$kéulԕWEHj:#QEӃ LP 59T},aht"I;X8`KAb#a53~/է"Vpݐ6CsT#qw(p-;N hce {'m YrT$M8vπnޝVFClPl-BCNs] AT VuIO,dhkuȃIJreo(:$Wќth-`,Uqa$FJdiVwF*WW9u(]AAWqhb$ܳXy}SgHs )HW13(VT7Q<I||5q|W;Hb5qVt\/?0uL&M4lp1nG2XQmNtÏJM3.EK]obS3P=;\|aU[ήѾy^X#Ll`<l2ZʽbQ@O5,d:N: yU<"HXBsQq.ʲ]A6I辀}V$Y R;ZTNnFGm @_$g;6hlFQЁݏk@C<-bs mg >r5gemGZh=wmNΉ>J]t$_sD ̂G[HNU&e,{k6s~pA{oߚ]oñTcO .P Ep6kѡa]-U>~GlmB"eOB)̪zfmLh V#rA:MGV]Bok17t#(sʼn989Mgs(s!7~p{oMkZjQ9`y,'P0&/xZJ]j B^E8wolq#]Lw.6i+ sf6 N[IA#iǥڏ8bB(ȽnWM4z"ĭtL06uR\NR%< yk@ it)%ȚOX}a!C΂$ ؞uvx_s0/+Jǐ Ԭ*#\'`8t |m^!!! N撦#ѤÑ?OJ0%DG- `h"tZ /W?x~rn& 4r2#jlvgL&yѩ!闠t:qHl' ]ͯl=",{i~G}@da{%XJvRa0E:\t]FqC*}%aYB[M|Cr*BrNgom b\0дU/6ǘ8К V=2?>a>pr7Wǜc|fNCU@ M0.؝u_|oĄxj@8%8_^qKfk} N`btc<)(_+\;s}< 0%$~"L%7ˤP+V.3}G+'XO2kM~h讪Z?6GoR0L)ϒ+^uA맯H sHqT- ( WڕN*Ji m]J6e FbZwYd&ݙͪXu7 b4bm$8ΤGmjr1KR2 (aӃc=Nɫk7bjΔ6p*w>FW,#Otmuɲ* MCQIcy ȔaWXoֶڣ3{XёD^NDogBuIa$D2. *{D%YvK& IL"(antbpU"t`Rmқ9PRS޹-o֧)eXK h2M/,$-=i!s33U9mؠk$]Qi}S}eI #szQ8?["NvU0S\D8cfRaOh=5Ƈ9Ɵ+]Ppm֋;\Y`HoWTe>M ]-,ۥ>xVOb3^48<}+G'QtZ)a4W ~(2јHS@S$A[fG F~|yUp;"`wW# B)b ym  wqe4\x,jaieP}{4cy] +mR(] -sL[?7n7-es⪭Ρ:mL`d@"%r (:!.A +jIGK`me$],RV \zI@|&w]-y38iUk;712-;|2 J9C?M'I{hH Ҥ͙x,Q!ykXj?3[C̾X"zZN)okqt>J'J-_(b,JFvZC )q${3s=U fэH&79_@7'u(m%z }yM%u(o9;(]Zϭ=>:nxff\[̟UTp0Gq-Ravy_TY`K@K7N~,BCK$?[&22UL #cKW7YS@9|HuI"shΣSbC{qCG,Q+HnͰXІ,8l-q̱B]^BmWn'ԑ-og X(84& @V Gt=k$97$E/j||tFBݢۉ=&)6oXA/y'1T#D 7{cFMH}%(%Nd$zTڤRˉR|ǵCBpEDqK[)@˪~q*f(&iduO>8e|V24P]90tw6\,Zɪ+n)VAP@EyΆSN'^{ (B~VIpzX0orifُ *O0jQ(߸Y\29+ _tiծ`hGjp%v8<i=zVF &:Dz1 fVA)_APW#=NSy; 2f:o"!j?)By*1>o`Oga6 ǯeqcogXN+m,XDTDn;^BO^Ðw-Fi\]-j- _va͞P3za>YLF$sv&r^O8;"[ =43lp.IvSLdN,ql>EaLf;k}۾ C)^bM0gײ-=mmuMfVLc- `l8䰘? Zd_+ M`"݈Z|:$'bfbm#\@{[p"SuѢ,n|pI2@aи7ChɈ{rWpb_G&L?\K˻R;1*ӕ==&xMN m!&'38MX(oճLey8EBpiО7{IӋtF<3agxqG? '?=#NvWZ'I>QľKZx)g8jlZ! ;(Kdy"w,q4c 3Nd**E-8/Ux3/XϼW\XNIrB%z 1_ ˹^q;{38pY!On01!%)o}κq}r}PpIqD nGoLkTUG;:OUEh#g+y;b2Zibo٣¸~ޒME3;Lx$W 2ZdM9#HtO}x8)Y^ܟ-o~٘B|nje6Q[$7Wߚ.e(0c٤}p=c σN4 QaI|slMmV3{U3!܅9&jwQBQHɭ;V?f!Ay*) ou܈cLm;b#rx-Ea/#ݥ [7ի6(6XQ L'X/8̧-`eNʲ 0BK2p[ku+a멺R^\J٨x6Bq.:K%ΉzxTEZ j(q5ubgh`M$6A&w/:e]]ei2 hG?e>g4cxu>2x,D <,ޙRv}<7ߏ]4OMG;B#-VO/ւu"XF~b(?@s{!x*EE^_ .7+A)աMуުN<@"ԭ6&ԄQ9M=mIfRc7Z~Sp8bQe"+z\qf@Ử2>FMh,idI@vPq}B9/U*=D,qC+`fhO_ZVM'=v]\1|%LL?uǝJ30mU⳾mk3VŇbt0ܝT)vݰS.p%RecSںXHt),`^ӏ[p*3%DZƺph+ xQp~IaӮs!f.i쏖B%+pq(ZE[_|QMŤ"nU ]줠–vi:XVBFs1EҲˑiG=r9cUs@&)j>N? (/1PaWӇet8`T0dz.n hsJ]@e#h+(R(LwN@Zj6{CąalM|+]41''tCs 6ՀZ`QiH*rm^w4aN i/L)2>& s12RQt Ic[5̲~OG`=xjhR.Ah8:xS%|av,,g"vcZ7Qy߫Y A蹀[ۓ:QPO*u׉l=鯂5>2]:ZO7-R >} L7ϴx'X XxW̾dITu$ji`⥓m;k5kc 2q*3k/SCވ쎏`F~C!y{>[üÞfbmFh RLe4HۀvF1 rmW;tط 'UtzQeH\xbRO a \鑰{@6rOwU!`0b¦="VFNrM]we;@9WIQ+%o!GD9ѷ0 7aR{$:Y\C)A1,j9*)3^#I(;OU Rk<%5uŭUWMowBl?7=Ji0{v);8blH21RDSrXQōy,Ms/V;>>]XWOnoձ8jxG0/<+75q`i>k,{tj^Md$^u7K&?3]EPZ2[96O$]'5wÓD b >O,`ko .DOȢ<ξJGErM0x}]g0 V`mr=bE "$3˿\uW&BX,E% %@}L\ ThAaٯ4F|sƃGQ47޸\g o@mCB-ƇQC*=%,^1[hL瞨4 7CrKuVs=G<,=L,F-jua4^P-8e49sf;'՘# &¿AÙTk5b $k 5Dj4',w#Ӆq{14(G<{e=n( z WE(!]9D I/MpWsn_>\4l!@gH!vBM4|jѩҚ?a3lgU+ڋӡx#isrCC <=wd>)W뽽dgobk 8;l0NX 8LS_,uob#Et*Rw>z}WO' 9 ˉ B7 Fz(ja$ #1'ly$t֝^]θv+n&҈E_,VxX-?pE8B~>ݭH.9< JLc jhlK B:s]@58 {2kOg 3._BlԠWůEF ʛ̡$ßGV?)Qrd!I"7sCL6}滣vߙ8l]*JTPB ZC<2!hm`!ekJ:uh,ى BZ#_pz'˧9tΥ f+jGM|pKap? SLLr}Kim[C %cY-f]:Y ]ƞBlrX#oY1 rfB]-38x9I1F-u(%wL(GEH焨; `AjZd]A \/W<OVĵ5.ǼF5.h؞Ϳ9S7L^e<^٤DYPڱ}YߧW]`Δ\/ڧ|byYsXlbo~*>D~1 `1:~E}Q wh!kV}%s"(׌Iou*}dYk7Yt+fcJ2vy4V=?jP ћsO|b[ Q 1q ڡY^Ad1UQrYΈD$#5S [([\diW^(IL%]:pB|p2*e|BSKW<!F%X] {5A%؃]W8B~8x%WW*FңȮ|Lo@uW4 fS\c-w K>Ov RZk@DCjLfqLjke iD ?taeO^G@AV2'cu־@HJW/x. Vل|G$YڅH<+dzqIa{ݨTE :35$ 1NW'?˼ӏ:Kx9fѼvs1iچ(-ҺNOVJ5=d\ԹACr;*hvyaVAūUeF%uaJo-o~Gjp:Tb/QNC2KmP۱gd es&cl3"i6 &UO7^zs"P$Nh/[]ALӣ%M1$4Gn\Id"BUIFTiF|xe@} X5 dBR |t[$r?klk&/Uc %V@ ~T2x`ѯz(Fr*ȋ U*탴p6jtARkV#meqΧx$nj2S m Dj`M >:zF|R~+Y4uPs:# {)ŵL\i4*MRrEк%&[Oӫ{>qWl_^6VSBJ2cZfQ<ƷwUv>\P\iMmEZU(5@-crxAqWj_Nrbj\sy9[S^(Ps4]9(C $/=gNN;o)v?KqCbD1rXЩDoG8\6H0}qז~|  bEmn((LvGb[\ܺ>ojMܔϻOj5mk*KTO/|nv3ْ%vX2/j_9:FQbM^؁7ws;mz7]JM[ ЀlL+IUeFb)PM% w^?LN SOmD:^>U 0L^mg&LFD+Uf-Wj+j?wEWk?'EMeM~a 9nUޯR0G9/5 vvflwok*Q#D2n`4q1IJt0o}>F9bOxVuE-up.'m+{jCjb-w`.WB!x-ai–ߎQGRaqi?k%}]1]?Am.I>i!$&RRl~hdۦV'V8 /Z]5#sdp_ZX}mfLtIGJj3v;E^5B@m+G:6z"17'] ؕJ:Cm,&dO;zaRFIճ"y+z=¸Nnd)4[x2`<{,˛Gkukg!` F *\ laJUal) ȮbhE,lUa|3zJQY1zm\ltAc-~Ou3Kvς}E:D5/z: =Sld.'vec)sdCX#ۿBAH>¯T"_GmQѓm^k) \4셃":Y%MF>PH6xU\JT4zKmVb5iŐ%hjAo(Qa'pBP0CnkO]7[(Q{aCF݄@e?$vP}>p*fCw^,񤾦C+@W5BpU'ME=Mf փ!5iHPFj̴G5P숓,c t!t!e sf^f't3Ɂ~&t[[3J ;g) 3ݯHvoV$B)0TZ;:\6b`Ǫn  b@:x9?3EvJ_ŷ s5ȓ"&G]i!@4^R0_#D}ŨF׹-rd|7Syمud IߤKui<?ETtNpT.yWp f^OK(>i r;n:bi9{W<3gmBe[:n ^8W !®rFdޓޜUZRύq%OŶ ֝pLJ=,LNSRxM3Ֆy2 ;%\ ?L `!رXJ `?J*QsN1f:cR1uɌ $V 0AR51.2OvckB F=4J` Df”ߥg襟:T؛2 *\ ȀRCj>umZѼJZlTv%mކꈚokm(JHX2Sb̒iy?,UD=t:usó->c0I" uЛ3X?8_o+o25DpƠ# ]<ՒWe<]}Pjs[i$1_Ead[5ysbpҘSRWp˲}$>k (eS]=-]fS3WqS DÆo nT8ܿz#'48&[JuzHv|)Ais&b 2@MXōvuuQ"ΚX8+p,3,M=B[Hˉ֗dЁJVl/o2; Ot/ N}Uަ)͖uU3 9\1 3z+Cb 8x zr[iEѽWyTzwV?'R_CE[Q][*|1 69g$q@ڠATys"^*Lk(ŭUniեr[<\a|ru?.lЮ|8v"`4R>vn eEL"@ WPѻRRѪӈ;8%Wg2XR SM$,K?`,mGԱ͜=.uL''>vu5'oEGQLڙLCSPу}7I=Llpu)"U˖-K"n$*=::,GE!IPqI7pdM3<E,b+#|ׂVE^&X;׌c]˫uݘkL|X뗟{|p&/X2uSzv+s=n <yXm!@ (a O8Rvf|EKC1mCJ@{i>i@J:4qO"vsgC(p k mQ"WH@MHI̓b96OJ r&a2Di'b{qfY4-aܴ5d BU0 D9^}/-xJrt>L7d~G[zSh켢yq^$LϸXx7\bګdFD`Zdqr,>(Q{3&3E7(AIO4PyuUY.CJ?1]7*B礤)3хv {9 AtJF]1_MEGCsAXW yo MH %q[uIPws@C*c;rZ \_>JoO:5z;mSqai[mb3rEgBF@y"e }MV%i\Tlְ1Ҙl)$䵇]d+ Kʲٹ$ А ceܫe**7;msCS~:c<5)",}'`IyXТFkŻ$>A"؎+^­s4-QgcE &Tpܓ.;Av+U,CH5 DoMXTt^Γ+ QH Xs L/dQk^]JQI_8 3D 442yV&bWCa߂:$1c8ۏ`#xJCW}x f̀?a"!6\#T^>+w#iYJ 6? KɉaT|:B$!Q'r"yr3t@GX PUgV؟>?\tD n6e5?(Sc~c+uoI_VQ _J!oQLgSl`ntvk"xHGnc_ǐWѬJ5\O,AyH{}u#jh8-ҊNҭRmyzL |И:'aU t td YuB/œmu0[W; sNJ2i`97wЛ3"c RPaCmöW;-J 0CɑNEPa^ T3 yxz<1hLQF]K!wg*qZk\*mg"8eeu'M|g3Wרhzs>( S#upGc\icyvCyF8&Q9`8[ūrA~!^ Ryϙ. bhG͐Sz w_c?Qn(/nzcO{L^y@ho)H.&`*VQbpepH\oف&HdrxO:ZG(("dwgA;h~Z=✩?f3Im4=-;} hzffn#_ 0+(#]vo?j/jj@Q=cCk84y%Y$gO I@ dzd.6jVG/mX eJ-Z/y(FNc,z!yy!錭?XdV7KRdsYĽ,JzxnϺ>#=Zq+8ym #o5z,29} s{R? nMd;-7yT_Bq 6?ZM~ ҚZT^X&x &Z# g~㕄V'a)ZF ⤵b&Cdǟ5'`Iu,38& e8cvmOYe\o 6 Cܙ >f' 4ڗL'wVmL|ݾ}=o^%ܑ+SW<*[㣂c5ٶ{a <7D:zuh&Ν^&GPM(xu.Et5q*igũغ+XorzcGjL]<aXpq=Pjd?NXQ}ݷ/j`рolz^Aʵ2u:V2g^7fXc–+)ނX œGW1=3CgwRF||AjU ZN2 ! A3Xt@4 X=/ bUHT{!\K?U]f/JV"Fw8#8ڑpk!x:  2F&}J,Z /zAxE RՇ= D)/9Nk0?FEG6#[afGay?wSr7ó*`,DȍžFx83ᇲ~%') 2Tl7aQ[95׫ ?! "gĂضE}cœ6Z5J݀[:)U@ CQ=C>w1KKEs՛*LZkYC3ջ98tz Vi@5c^ȢXf"ugJEDiO5 4@"[10,gdp6T q8h>#95uIyY.Ec-϶ȲMem&HA3WdFѼW~EAڛ`]c3[ii =i::&q"VVڳ&!{}wdb0FU$|b~4Z! 7yNݐ;zqS*A lnkݎr@ UB>8EFmJŚvѓg7Ǖ+3ߦm'+QK؟- *dZCpw]nNC3>'1daV= 5J/4K@CT9;y(CzjZq?'&KXa$j*H<, I`_ JZal&!Zl15S# Ȯd͛®uקR qL_/q Ymჱ*`  Rзǁ*~So9 W_ T> zVF*c yW@rT1'  XՀs=l O# m9ՍY8Ƿё6 C[h|Dsn)Yf6*]R^4LI@_RQWfW5ގXGϋgP&bCz:2 KPlЯ)ӺUJ%N )oꃁw3N\sj{RǍ~EvFKc=cyA&\$Sgq6pځՏ#==c>2i炁^vv/,.D}`ƙiJϿ:Kyu{]i ,Dܢ)ČQi:;1Vm%Wϼ]Z&cc q\[9\235ʀr5r^htN!L7pt-~gB6o:)Hq.].2v̽-2tƽ"GmCo#qACT\3TMIJYh `g+T$ +%X%0* G+@i( _Jk)J?_ȕE*8rfd _lhR$0/#SQ `oIȗFӀȰ-ekTo~.)6.EԶ՝Pf>P4ujWd=~uhmg I%Qaqv&ƴs2K GAm69Pq݇E% 4b9|}?z"=x]֙yUio{26QO *$-`%'j fK+~tG%6\k4݊R 3 ox.ET`vr˜O~V?~d|]jk;_5/+63BԌK߃GT0ÎcjErDVU#Ǎ4 Cp3':Uy:Qkunn*ھL a ] #!s4Zb "׿&v!;L/g-XuO.Iy_̇!+h$=h"D3x N(4_f&+F8^}?Vʱ)_a'EC2}%SީMfнjynoWO'Q5[vVƛz B]9Zm"?(1>,nL_QC{7I8"œ{f]r/ eWļIewu'w0}B#&P Nxvm|z`Q9`GǴGFwtM]qo%>$8헅%wnE/ш2HkSW}IUHJ9FIiT^ ;h$]jVJjXPf B@PwTo]UͯA9g٨ ge-",]T R.79?PW>@7BnaNC*[4ʄarŬSJ|CLM(pAaLH_ phzB6yy$$ k1ijb$?'uo-`9*Y-2Ld-j'ꩍ(|{f)Z˧+P;NUK6;*a"`eQǢxm;½S鱠WUҫaaXhNaw$15J&O)\& O]8w ױS=H0%AbCT_D8N2[)MDjgnO?{qԵV)E?LO9CR SUض6(UfwWꋲTT;#ܚ6&/W7nvş#2f=NE&Zqx]=uVWV spGi)aցJVtEy)seO'#K?p!Qz:øO|s2Y=$̍fnnXb c˹sȱ -`– Ub3t@287 Z2`E=>?r$p* 38mo .u7B),ṚN9 m1uJontOp+uP Y q#t?Uz.לּ$%Δ3:&Gն˃ ~ԦՐz9C\8(w dTK +㚡W<$}Lfwl$yYY }Y HCπ/LH>CyH^ 7Ok:e~I9 {Z/?yoLkc߹L:B`Sj:ps(t.1lF!th'U1*IT~>nKg$%mw_^C7^/A1ndBߕYa5霂:K`jD <>+&K@pô.@iCFz-i!aWCg:YU#XE~dDїAwyc8]WASf9fF-%p4ZǙF t6Ajyv:K5'bw5W x'[ !p1,0{tX:*+>J?N@M]&tRDC FZh8nszħsou>Ct4:\:p814d ?)50W%_*B`ѥLPZ1 (kOMLhkkfmf$U&"ʷS-PMBj ւ3vJ+#Uw9W%w (xd7ǦS3uCjÐjC(`8azCI^"(/1n.flX˲"D@O9qQQ):Ͱ^.`"zpL(CE[w嗊U;זWOW_P ƫJvtM\}{"z딹n5 alق28]1Y+TxзRGuߦ!EDzUK&S.2Ye d9}*)4Π0BX}6AE 3.%RFZL(5p5*棬''$MX`PjfV(@wF&FM„߆r}y oI=][fLH :9J.4?;ZH;A*U/N{yc:&1;`pcZ}l,A xa~K֬r>ZZsIL}#nlAg7e& v| M`fgirl8ƿ/Ό/$]YqLcUeQ7ǥl;?&sqM'n%Cw+I&eƿi8B׵_N^Qg|:I;1{lZq@= A Iu/U@܎dTc{l|ܢm<E:+32GhšJvF .zgAFg6J'J@XlhwP9zB"Kn()L|Qr(Oʃb? d,T\aavֶSR$sD%^i`Tmj aUlWnk(ClҜp'O )D{AiY~ */;} њ-Udt@˼bqcݙH>WfJrЄWK𒱑%Z*RѸNrIm< {6 T.ܰE"AIC'17!,OY.)!;Zvd$ 8Xv\(£`7X-ۇ WYzNFX!Ĺs?yUCĦa :~zuSF.E$?f{L.lmPQn/:%)3ŕPG{KtDX&RbOA\$f<|eJvOMT CJP`.YkO;ޭtaMoS% fQ7UV,(ǛyGFdOlEKoLWzcDR/(I7 zχB }>"6e؜皡}$Y8gڊ\-5euγ@TnVu@6H{]T4,Y+d\XD\2V$k>fQ+_1%3QFF š8oH-*ٙb+~Hh%2\k!?݁֡]fd:P[A`ы$ o:Ëkᵡ ΝL9^ S 9끯uv?A;3iXZK2n$0bRPٺov?4=r貑\3Yp1CR?YaR\O>wkn_'vL+.x }aB=W-.^T&!2j%o)ת@OQ 0;ۘV)Ə9Fl1P%l {&) '"ـrpZ#KE޻hs_OW a/u0dνoC P^Rj<&F5@lǡ#]!9< +aRCA<(D7!n* M :ӏDUf7FAεMYt'˴.z޻Q/4vevu۸^A.j94$%?IeuP\C#T"vbW, "o~hiUau'7bg!n?_&HْDAY6g5a]E$IOATTMR/nSV$LN2I:tY2N}X_X=Y0! Vf&(\w''gv KujcFGRʿd(){6X5 7J]x"HWqj꽸·, w<,4f^Y)]/{kES[vH.]Bk5t`ERʱ\5'[hD `֜{Y9kha~vBQ'K(qx(Z;3_u_/^1+RlqO{!d9S # u!+e܂+~sX'ĸEW(ӔTiKCő1l8^a=( yC8iW-ÞaM\rI5^Y,O! GK]TDpW/C}:NpUj]ztDU{oxkERklRp̡ x6B:هzzC`g9s&ߥ%3~ 5bR4 r)-IAf>^~|L klw/VM2mR}Il$}ELRKJ[]8~k8qGXbohYH7:Ba:Pp@.X!ve1Vr\|S6 cEupl7٨3K6v 026%]i:7{`Aa6=3ޟڻc \EOf>KZoΰN1l GAiwZ9 Z(+Be5 ذX5{ ChZ܌л钎Lk's{0WFmĦ?~FS(G_u W5ZB JhjWךd@=«z֠HXE1mC ᭗9 UKd=P-Ko,Zi~,p(Y;xZ@ł _lH&jBC&>9NJA迓Pq /'L2ig_.mߥrs04q T^x{nf Ê8Zt1ٳ҃sY)G@(ՂV]+c vF .oK1=m%_^{ݡځ!‚dfRPG S+B1^H\C?Aۯ??|Nh 3T0}/AۨTt}ĊلBA(I>^Ŵgz2$H]4mG{5-9c|Mh̡(sŧPT ='K(R9䮹s4Q5ܛ / ɺLPa4Trf&IQ kjxv-ŠǶ"I"JtOLUЪe/ŻzK>P% Tp68k4hLsU*K7ގ%|h70zv7v7:]oVW#'o I 1`J(+a|BGZSSvM# @ s 2Jz=yC(Q Z.qur#2Ktr7Eq"&g.ϕ̝Zjc[#Tw!d<^wl;-@R:nd!qFMk'e27 R|R(;s_3M 4x^}gJ~W 1pXT \9i4Gh5מa Ęv#7\/`0 /deiƂ'z1T%GSfFD< R3GI8d->;>cB/sY22 #`2PAtpAPܫzFyikJ258?Y3P>ủ%v q-)pSgp`xa3?L9 \v6K7 )_9|6Tޗ="64Z r)*G!D"O" Ȫ;n!^@ہG*ڪbCh) %U>)ʦ^/wgQ]KZ; ‘VGNx|+è2 ф5 y*rREyDnԴL- ;92B] bw)p/64.=rAnr3;$n 3,0Y\@wz^7m^/*7~ zACp D6'B/pz(N4s=4Mm.>eWr9jqC/VlZRQV*&G(I1ڬCX:#KK8 ~p4cX:P'H]KGBKEa}Doޫ,HC: <~$ڥ_+]5 0ר˯,p-/I{ s'1n=*fiChK䓬TU,لh?.p^*]%bӶ`6 mS*G}B 7v)sTk P؀eH@ĕL=] }m߾zj^禭`|LX#ì3W m ؂c`4k; qYax!sA*vYK* OI⡀U.e0S{n=rU?%qϥI?f P]o蔷 IC|mCMp! QS’9c: %f+ĴOlb WYM)`>yG}znc-1΋0uQ( "#N<` șov\g]9r UpV80$q?.y'`},lCvCtSnlH-I}F1mZR=GQKЕ{ŜG j)U[ћWFe5IuC7̺uy4*zyzHP@wm4D/ϦbQP'*KJxZ  BHsRAx#{NuTݫj zg&%1?GL.P/uհ$[HsP02A蹏U ?[; xvDi*ueV;$đ-p4$8&!M~Qq{L|G,WU[9p¶g50n 2R.E6{a8lM"!-m|@M@PDe9bk=fկ@Gƞ94G#$RAe9s0ztR ^z5|-\i3Uwt#`h_l!CQ2#/I!|3 *׺%ۚ9XrG!J8jK:Mu= rWל.f&jF 5ZəaǁhF~niے?8kTzI6Pv!HaW T92W6}{9S=4Caa:61.]ɡ/ DvVy "3~=ںx &Os\m5UYA|kᠬH%ЦxuyS䠉HʎUg# < }h([8kKxdM?27\"jj؍ޘi00+O;̓[(OiXL7;6&Ǐ(S\5<{HpkSHk $a,TW*Ӵi(+L\V{lve>FRVF"|E-a'ZAm3^sde:nCqC7Zd J3lgO֏ eM1؉1 RX;`M ^T(c@P*%[S^G@v?tWnJٚb鰗׼̌h. w9nMVFXpSA{YxdE4@ρ"~L?7ri&m)N 7b^.ݨC &sGRx 3fΧSOgêeWZfPGkn{P#5 AfR@YVJ}a@cp,X]VB.4&ߧhΉ+}@jҘpwg̈́Ve~I j-@Z.dfbH yr/|&SoVIK/Y&<Qkj+o{ˀNqtbK~RȗN'aft_,y:6;{v m)FXumA[BK*lYC1ȂVⒸEbM x #.0#Ո;PbLT'Z.G`JPW:'Fȓs: qFpZy$Vp0#yJ0ďahN8Gs sgb }648 ԕ>k1 N+-_ 1L Ǒkh^v^̯!_@|ZƂٯ9 5du4A+&PF CnxZ6hX8Kد="q÷2浪[Py0EYt'죦/ ApTv~®`7Mcח~̻xC6F#Rk|ՕR2۾ ^sSiz?a\b%R%[0҄ގ/oԊEPn'Zq `jxw+)'UgM!(-m?8tD.ajVYc[j8krHQm7S5%4ZqizAr?|%9q\GZG_=u.IE _n6n Xp8)|,L Ȥ7!P&tL +c"ݐ$: _fzzڟFbnA{>plEI@ uG%WWIR]d:_ٳO%NW))1[ޙ"|:q>qZ\ ǝ0KGae`\?&nb"+B/ܢ ի]X8>fm0Vh"Np#P; m;L>&1. Qr`qSז]bUYE3&"cXuNeӖ8õܻ'{ B$CVp6P*w"_Ym.{uϡ^}!cv~ZA0 >v'7kz3y jv,9Y(sXziMܔџTIͪil0b,zR<ɐijԘefz"Ͳ`YvnZ- K6cw5ariL!EŔe!T~ń!iQxpH6Xݱo,݈Ex; TTy4aYh6(L+BQxB zfC4@+ӸwӆfmQU&Ӈ sj+t+bLY>,PC 9)&i7Iɏ'D~ IUys!k)@Vs/0b* 7*=.9fvZ?Jn"f$=}P^06k04z;Z^<>m,v]3#] Z4< ӕAn8XN`d,P@<α ^h5i4׭\ &J]mE5-876&4rZH/,KdVa 蚁$.K 3 ye|\4U!xPvtB9=i,ӉAax|"$NTg__ 8ʼnٌj5.yѺG5Q1GDMHCqﰈ>$v̀ps( f: \_bfwm;ك:C]V#W\R0@۸@~Ӡ.ȂEZOSa_ש?2o;B# NNyc-c˱8A*&ʻS\h`Os3)d:q]Tb j61TqdB0||#7_PxCWb:v =TXNo|sOdmW!PY. WQEae A,{bЈ xΒ2}6􅆂_rt)/q+zҵ"~Cn%qzndEqat~N:n cFI}XQTIw6W oo, !M߿mAoE-iXLF Sa*R\W/Bהi詇2\Om3r"X-QYh=+a'Tm#Uo{5e,SD6''d*V$~Q\lr@3}>٣0(4z,7JL4^ U}*a[{!Gy 3Ɓi6~t)mJ0ev|fO#msT"$ IW 1MXZk$=̺|Yל(( GsT2Wb*_̸}d-jP5^0c-O=s$:lY~d:jbz`DCbh.tpȑ.1-#WB Mn1!>E$Т&=lfkٹ+D%i,!$BgƤ"~$g63%IlW DrD#:Z4b6Rs޷sZeᨕ8czSGi,q֟$J ;X/Nꭉ3f`rbp6) #KvNEmdF;[Pj\pͻ~jDsobKiN8UR}<=eRtV+Xڛ€R q`0XO.LKw}uIuB=ka=ʖ窬NB,}l㉟(AÿDCy%|rAlHO.U}C)Fԣ]_\ٷQ=6Y~ĉF⟂*-x㓠YQFycBʿo ";\At&هY] 8f3g슴89 5vSq6wo,?OKK8*Ol>c*tӭn9K=-~Z#_*Y[7ӏ-$6f^a[1|hB=\]zAMJ5#TGӟTyG{LY Bwɚ]vZIFZAFCn`5Y9"NUdc-uapSk@:ǔhHgC0^s \-?H!\TfG}%Ll\ƥ?lk]+J 2TkbXًIJ:[7U;AAJ*'V"C\b?it*^׺Og!eȎ ǹRLb/5]k6MT ]M61RB ]|}Ǥ u)$4c?9uEsK|yCHVԚ*UKUQ=Ky1g$i/"@1y%x oYϢpd@VTvkZOrPm'XОlP*-hxh/_/p'.IJ3)M8QKNEi2,8<\XM3_9x16 y!qYQ;eRDkOi=?? OKk,޵8Z# Ly,m& iɜ|n#"FAҒzBj²d'M8#/ۚS@E:`mD$)giƸx*)ۙh=f\{Fp1Y@5=nuK GJ%C%35[7u؟ۆZHRp_R0 '43t=5:a(qz b+t;9@SInˆ30 :@k5 eE֓J86Ԕ18=lcw:}7aRQQ 0{M0>=]IT/6֊yqPUrL} PR 7|? 9s}-UIKh6%Od2L,VqbnkU{(%%l:_6޹'a@jk\:/atj/42.}G< dPP쑠::B-{F%$E_?GOCޗ8KW]-@Ht8)<+l)~m\P,,@b7 3g($톑lNKRFBH _ck4)eQ+mCP[bSY|Rw=h)z7:{wkC' r9XշF"B rjTF/%Np#۰_oցaD!> TBIE.(h_gRQ/U`&;㠞yڅxN1m>=4\ x&9Op5ij$d~ yҾ %LO|-7} RS46`krn`6! #$23~rʯ'd+j&k~r?.*/& p͎L@rw=ϙ5Ghɏ9^|ij;(!9]Ĺ G&:Nt[,\Ipa5h/GPr[PuO#@$# 3HNXHؖM 7@+L[Kk(lJe:h M$lYėb,ʑO{o+fa.њ]%׸Pc_xnʭCBdzU4]xʻ;H7ئ!3 ^6 H5|IܝQ-.t%Fi_p.g~EDD 7z|&/=e o0l8U*`Vc}19O~]zd^[0p,ܳfWʼnÙĥt`t\G+ȝ[҂cc_΂diWګd-z޸٣d fVTNyf}&l:!W;Fг$Sa{K_Nd6C!qaeHvh Ձ aAcjyrXqEr}!},҇0^lF3 ev,4-tG;郉o1:HԵlJ2+M ?Ϫ|߿{vJB/3郑oºFeQJGeDmx3"&kgq#^RGz>ǀT];а`:ոa1U$ijV pBx5zC ;Xs"oF%M,a0C c?M"Sb; 6n 7/ʦN*NmN{-*)fCEͲ iZps85QG6y-6 HHq r"8v7f+sǡ@c51MRE]a7,jixbAG @&dV^!~\1j>=JguP|zqxX;o"xԊ>ng3"|>ozk*$f(Gp Kc@,0xP;F!i"`|?ZzXjڿ,QG;r۪̳#|"7t1X5tGY%ksPG~qɓxm% @t{DsV`yes;Mex)!˱ԝ ~4<Wr9'q6paHӐTztfУON{bDV&m%S;u }V՛›2%L-$7Aȫ|>uÚ4B= K%,=c3^Hm(^v0I#x7+OߏL '9=˪(}MJu WBw@pٰ`]9zO ݀_~;J+/l)~e1Yt2yzKxIYHG H%M Ԍ9CtjeӯcbV$`.g0؎wUx h`@cQJ_TfH $ 5{mIc XhlMH WI|wѼ6TM/ CϪ>ȣEޘ(;B/|@XG,vhXMhR_VbBsq30,r :Z|{Npf cI`4PhzbIFt8.uue# w 7Eu%ךǀ:ph&3/ W`b2f$Ak̟ىPWM^U'/(J h;r?N:h ]J4Ȧ\_,F\>%Yϭ^Tҩaru?٤[V::7A ,})$'9B_=08vBqmXjqoO6cbJ7[nI*|(Fj3!Zfx;X+jU[Ɯ5qdSb/}wSQ tw#)qc~45|ipۈρka+,:ܘrlƠ0 g N%M poQO6x{#[ic\):pmvu\~)A .Sh;ENƈƹLӝ1,M)! ;^)`'4%eͶNlx0vk2pu-ǵ>'^c5ÑkSo`Q|4oFZK~&Qf{ 8Q/+* e\Z2Ofdf & k?Fйl.ޕ$BJϲ hƩZ9ܼkRG\eȧ),f )ԴEO*ݕjlѤOK~QGr apAC b76rKSz Fc3eJhOh4vh+ARFf@gdo,Ҕ}[ d[e{1R'P`TKITgmdφsBɢ˔>Ӹ4ഺ}`W=O<E)9wTcBo;:_9b#Vi_fiKiI4),+Gy.a#鵡{CCÜ'rjl~PN `(cYa(@@ØsڡʁOjCș7#j!ww':cfnmvưNI62aв]y2f=kW E"-uRP'!eԌ=mhB֒$X>Xki >1eWUAjd=djB KssVUG"V1Ff.ߛ#- DzDdΞ9 {|/zK#>R{UW>fCW1#h B}f)*yOy.pڅϿҙAXԼOJZE"ak:þ Yl ڃ@|DIaDwZ4MIuS<$ڀU@fI4+m di,LV =:K9s'* ك# N4żyţVJ`iڥ$Z_"xK>2uq DD.l%wr$ޓ~и}}+=Ar䏏P# ~$9nש` N"ѯ=%szu*2l.)YMh/q.Xs~L9J3i20]8Z+FyVp9.CnxQC%nE8})/T-D ` 1Վ&{^d5NAvJ[ A2ڿpAeU, xWⲱW۫-$~b ӺIh0}Sbvmٶ48'Gݣ@f*p "+"*7hxYӌc8RIߥ$+vR1eM ~?ohn<DfY*mAo)%>)bj '1/5K((cF9u7'x KL* 24 _˕d5Ew@ҙP˓Xc? S=J~,  y ubvb]u"8mYdӫ8EʈafPtYzPl&N/H{,5Y2QOam`8jq[]EhT,ѝ^PKcŀI`0z }PVMpNU}t3ܤW6E( B*f-˝ZBZG%ye"%A[I,%npX3~?~ˢ؟VapR6>Bw0zP*\-m6w MtW'YBpdZlsm&Q OjXz ̐tW|‘a=Cn/V<&(Y 9"Bʹ{u4*!1%I8v| O7{]PO/4֣9mR2*WSF8Ꞿ,s > }b9Rn:2ċTOC}|ub8&.%wL :p8ap.W/SQm ~rp{geeXƢ`@Dj fL|nX1n]z ϧ)*9| ]D*0.p]b/ѤKhx Yr$\3O&zAA*Db )4kF][Tpbs 5uڔ;mZrNzeI&7 F{%Xͨv7lq_{.G@QFSu4 ]x8L!v$7}$fӅ{=?DTWi̫)#|û<|ݟc]9[vCH=L$tADJ*'nT7R*D ݚ J+/ $3 $tWعjb&l `3LlEn(/S]Wu,m3+fNYѰSkͬؾF$HV@oMS'lvv0ΊʫdH@pj3/4{alUYoA_x?a/өoY[󒡜GVd>;Ϛ=0Dٰ0wdٕB]/=AByE&{ hWn` \' Esw*Μ(;h Vo)PRvYϧ>A:+1; X;&[uAL(hش~E_L"`|;]!NW\ÄgjKUqkTސC: 3j@(&pLʾQA wsFH6n6󈤰tXz@z^l=158K4 t\c*${Wy2K$za$u 1+yS=/ѤJbmZx69F>- oTe=N{нjV~J$y63(a2m̤t:`'MD>p.I9ցQS @:~:X;O)OR/TPׄY&@bd7p+AUB@dAl}JQ)Ԑ1X>SD@dt'ṁ~X(0ܞ~58#Gr9$鈴1گLS}pN7_eVF9d#Ў'!aVFc[ (Y+#*C8M$q2UQ;$,u~w._~O%l3KL`!a2MH>o3`TᩤIz~T ~bƒ(4Sps:]>V R 1x`WmvDc6kH9nM[G-Owlo{)t^}[J~Ǘ> fdjlSpubONJHnjFRO)2LYFH6tGK"i̘ '7;RxW 1kxdxK:ż>`_FB%N[>vAmPGDjA-tZnQdԼh>G*<,j]+COFM0ڃE:˗EX.Jpi !C-N7V;`эuj^%F)Bb ]N-n5{ARwY+a9bt?7 rhTxi=]t2 b/ 0l< wiX0Z{WRjݎ_t'Dqc1+O.`$2Oho, R Ҁ\0绍P2XiwM܎GJ+ e0^]l:$d5Z /,phe[QV3KXKNKUITydž-!32 &*puJ #]5ng$jH1*ۙgÖ%nvKtFk-a^D*谨5JyHd+ד;RŰU&1zsɸ$ +]k/ϐ퇤;]x?V2M XǸʕOw,os4?PCGe1N蝉-E04pT~U#:ǤS)߰R XsHk4 A`RZ3V"46x닽/0hz{(9lƭqlPocQg6ٯGZ/_R05\Y5)Ǯ9^S%~gX']A[#7EpMG! \ABy^uhơ%DPzѧE㸵uO{LhbzaԿ+k VfR1nSQ&2s{ B SRM )dVר0j5aO[̒WigR!Ma՜= )'`hk/cvi\Mԧjn֦)D.qa+npcSGI4\5y+2m{V]+'=Cc&s!0>Pc6_-`[~*[b4&;9ƂԣS]'ps1M`c/*>O>U%h t#ElOe^]]WgB$#LsdiEȭUH4BtG8ˍ{2mWjA6IX":j,V,S/"3ify[/5%ܠ+ tm3>Ycy҂{mv]Q()"Kb/HUxUn d6)3Ci=tW+ 2uzM{LiFy&=1OKCT. qyڈO{eRGvå ˑV/ӡ[Uއ2"ME14҃9`mS@g49,(o$z/ L5˃dE!@--F}Ct/2VIo%?+SQU͋V-^exy"w|Ðb,KQ*kBPKn<]G[Uђbq1#FRI .U&{==6J+yJC{yj:QcbM" ʯ.m;P<:"NQDSi",>*P[a%`f6KźHjW{CYT) (G'^ Tk?Fz XH_'Z*#E+N'ҎT: DSW=ZHG&ˣ|{Q0 u4+6R%I] Cb-W'#ͽyt'#v򎩺L=w/ZZ `< 2l[6z#^.xe"}L\VδAv#TAtCdTnPx!'3mv`{۪,\Y$˥+PCI_<_:Ǣ.Hl4),c7B[x }䴣dԠ&ߛەZ\bȟɶU Ia;ٕ LuoqLeDcݬ`)8㏫c[^,s8E#=>1яjp<uF@L;  !U㣅*:q%h*QN0*lŪHTdRVʡtjhM3YѡaU m-}a;'2HC,DB[NFYYmH?ϐ;`p`T)%Ame鹀smy9/Դ(pjZO&]nrΌA#3[)P ԍ_E^A@%СQL2\9Jzb.7?v`{Y^ؗs8* 1J2T4AkN^%w=u[=ZUG 1$ΙCV&.wcpE9^M6RPh xK\urPe#{GEk˒v Q8zٹ8^%#"[e"GFƦFbZnn%1;6ܼ iLXmch cFU`8ptQ6l|_iՓɗ 'S>aCb0F{gtW[C-՜&褭3m_#7bOԁ F!a\ ]"pԇ?%@}SL[ɚ$q#V*x.ܸ)D)Z,c&y&Í6[4HJgOB MЪ;Nk7Wìl|Q/םbHRZhĄ̩xubVh,$ECWA֔dbz? F-F̧_ 1j8DpuG.70}M'@oH )c5F͛fBP3V=&y)6#T|3!bSC 0WDK6 B)6VqʺGpb;RuONK']jgqq/3ga̸،(1'chy)1qw\#f$o:un. 5HF$qE^Cc۠mmwA 3,9R~*ŗtꟛjHﶔ, n+IG8APKA:0) -rR'$.HdfӒ Yg 8OPk:|1N\ŦƢ!D} PE ̠ĥ]ҩ)c(Й)gD#zr\rJ{4t?tlҙFP6Qjq'|pœ8u5A'a,%Od@ WxÌ^7jvgXc=cow龽a:28{0xqtg=OaS8 )r<ɐݢkyK=qYrgHO `c5h]X3\J5u|u12^cS1mzH-'it,-~붳~۾0ĨBrK?`JWeZYQ.΀ hӴ2uoWlcD+H̪o4{ wGM"٤r)%TSrhȧ 'QnHWYiBs駧-&0EyXu9f`ˌmJR(Y~"y@FAo뤒a@]6>[q Y 7G2 i^s-AMh'mE4Pٓ45:iZqY&v04Pr-jsnN~\`A̾+[GP]U8MPFRQIӍ (T@kW5?t 쩌ŖQEt'lpM5y3-Q?z >ܚ}e0$]K an:AxY3 [G(ݷM;(`! UZoٜqA-[*C#Lj%Jԋ!8a$ ӃOhvjU4t6{s[ʞdȂg=$Q8 =fb3lr%J\k"'47P.ǩ.!M-~^dUxKJH?R*HFC I Zop/`*7ӐAR߬^4Q1_SX<դˊL`7de1aCƒrg {{Ohׁ pbjJjH9_7A;-İ+߻;Vgۉ%RrGZ쯷ԩ'_#ӆ#)Qc4[XMw(PBD}T;OK^V͵;[VjvO5[@15' m/>8[SRQ% ZC'Oe6؋%QayQcF7>6|sN O,X:aVOoLִ).o HiDm|g*V 'IM:^V%PkbVPNQk3cZf3ne,4a'i5? Lra׺xxmZXxBlOY-1-u^dI_fwn`*Vo1pAVa=yz% SiD4x+sc]_w8%W84XacP?2JjW/Qd<"g .6k%d'!LaFS&Dmp qZj4f7M4\ḱMu]Vgɐpz2&pa\-]̷( }\O9ue0F"˦Ԃ֥ p'MuR+̂ƬV?k€V(a*aFp~ǁWǹUZQ:PA*+qa7B~M!8`4 ))QPKS/Nt[2x+`KTS~0яAhp~dq]P7#|zuS`@MehN.%[߽:@KRBZo;z|i]sZN9lUW I';^JDzq&A7_ћF>y^Pt Uc^K]`$_\F,l1bxޑoCX\c?.kF->.:FEM1tiuG̹[*W Tg4c?W_pqk8B,NȻP=/$ܹ#iMWw_ (IGCD\6 nꦾME؆{0/ IxYƄC)]حmzJIŴ?K%T"h{> dxBJRb(Z]iV>1K&=u|YllE` }0,q!qASuhu dRg2O<"@`;W2$ C)<.j(P gáRuՌSz2ptB `ePbfh-Q)ljG ?kOQEK|_ -RvT9TT-\[)n\#Eٵf*,FMʌ Q=h"Hm>}mp밒r#%k 6^0E:v:'znaɀPf^ցLFq=4 4,41lt)rY8@ PJ FvV[)v`(1$ ]w+ބ Tz݃xY,S!z4: db#0>OX1^l\&] ҸnA;m>lהfH|GA1li+ȇ7|YpsV x'xh|v] Bv]Kpԧypb[ٰ$8"yZ7{+)$p}y,b7&7`h;E)4]hؑ6X[÷} ڇWwe2Lo;[!^Е-,8=?911:o cG;лUNf Oo3?ʸib?݃tQ|G5!ulOriRW3󖹚wb1pΖ).SˆA)wZ.rH{0~=,& J߻Q}u##5CJuQ0`{D9KKLkRm4UI{c$LNO'e &Z5<$܎ 3X2eBFy5C.ÍVLla-lub;q4>qD5cP~$h myT~PH jt{EK9}mv{;SC1ߘ줏^zKN͝OAJM- C ߈炩t!/Ec Z [z34fG:%{Qiza'rEyh xfN0, ~e72~PEB 0פSՌ8K%x+gX%D''3,F0>=NAVpJ[[6(`ӑt!eӅUj{t 0@9ɍ\zffe.ˀ['(!u !F:~mBA/?-~2zx\v`mj;m[8 O= ]l\O<:$*,[E&dXP _N)G[40S ?a?^,o9H `x A@1%y-" 2XtXC >`{N21N$A-&V*|HQq.EU6Af@Ry+ ?L)]sPg{¸,+VysRe@ߖ}Sˆ)$|;h)bY .4|~ɼY3GҤ>Ay-8Zh(:J c.@c"TsFVЀ1L<Sߠr__(eF!V^|~# ـj02|ȶJ5 Q'8NHEz(ŅKjEWqϗ`ݞ%sw;F6x9 Nw$VYfoj ̇9o(ڵx;yJ=!$,xc( $l~)@[^QlM49g :vx.eKdC0r?4ѿTW;~ i^P\QaFڒRCr }AuSv$MBf4+*fgT$Xj˷-٢4\f[oFgsZb&ؕӺ~0~H޻)F&$mTBaȱ_4+q#yQ3=rx,c1YMdkvBa+,xM[H:8^Ӻ/wX|%rҺCSn%^l`c9j%I&*fJG1kb)u|,y`>iBx)\@i/ov1dm&3\0'm|G!:4 T&|#3mڨ+*/PTt%IN5I{H. {҂c~0>& ·٫I>j[v1:ISu+$T'$WmNN{3t)Pv?"e;C8Ps}5{-,}:56v#\p)k HN;[y8|$My@bi '*3$ W9̒}*j4G;]nE.^%o Ovj_JrX]Kʖ|dYG;{r$1ԫ.C4[LE6C1;LV{&fI`zׄ[;Č%CRW~€=YOjݒt?v K`zym>%ɲ#z,Y[H(+JNi)5ُɆ+> fa+dtTy\3glZzt+DAp,c1>&y4>l4\oS:vUg rPYj]v{!rox+EqO&2jd$+-tiyMYҳ9|i'M_Kp>>y[3۾V:yD%[ 4m6fU" MHdQb5n;4S{^-Qp`P{IU_̤tmF#r#{:pCvŦ&dp7T0טAIEP8p^L`pq$9SvXCDLY*kK{: iaUHt9(5zRTUQkUM&DH\rYoxL;ߢ<\(cscnAݡ"dOhnL/9^&:8xt넳:Oe6A=|?txk j)0V?04[Saإv &!=Qc*Hh7sgUKAFH惤L@F!ѱ`<~%x!nd%4L"VqROMi4Ol╒I R;[ tSp4/S':0aQoUsJgV .jwE +3`ڋ,A|Pn*(ȕâb*r:ȗ( 4DMˎذq'16nCJcYŠSW9Se+NpbTxB,I8wХ{Ԓ?pH0_"iᭌ  ,M$#N˞Sb~2>NamF1?Ǖ3z|+!~PXaѯjąܺͫ\Sc\ YZ8Qa& BoaD;< $ȏJA(';,)S5楗6 B lM@2hSU>b-ܗx6r7Ӣm$J'ѵܮ^eGO+ûW-j37*Mr&:֏b~OޔHs $yqR ,MQWT+7+Z}װP9!t/}0M]Z꒿12}) %3.\NqLye/~ML.Na/Van{M;+ǟNM;RZ~twj@l [WHX@6,iq JnjA]>jK!\ `eiE҄O}_O[{_ً.B Z@ڦLt,Lcyyn֤!e\&ݶ&JflWpw/) uF-8B6&Sr!~@93}nɂ..yկQ{.M&L{4 \}4' ,kEDUT]㌇F.Ԯm|@2J̹ n軸lR&,ڛQp*el7d[!}ӁJ@Sxsr:\\عU=9N,Xv<^)bhB pcu<㇄}àr4il{Dذ̷4bΈgeLHsq"soN}U_cZ)iA,}Y Y\Z)n*e-0O"y4L-|$-Jx_K:㱲 dlhA:2{;uL wHG1FeOLarx3%F&F{6Rm#f MAru:FrXWtR)r}z" wuEE[S񶞾{w|:< )#}죇@++q,wMb/ z =ð1es\F[C=C9ް7TXfdWr˞i%Ee[yPdoE?։ _-O?W3|Z 8]+MP_&Gs3jYWf Lͤ"xYտK 11CۥI@\`lDhY.c'pqpR>nOtAGѾ;IQw%Փx R*?fQqj3Vt ĜNG0)z;w\3p +$} ޯ[BU6Y^O 9(G/GC cɾ< NLtOiRbi&Gg爛苭q>"83y59TR982F4l`xoκrPdI4>k3P6*%flc͝5U!{,~`!;sVP nӀ5)$!)N>qT .#Vd_]b V-ftIÃ[' U ,MqTOJ*z98dK51zd }~b@؍6$ [ NM?޺N>VA"JZqJ,T{FMDGUW<] DM܏Y|R!y{BW"܇#_4wD5Xe# οMh]4UTg T>ٶCwtP);%JJ^Jgzl{9*EФO2'D=C06V3?wAÄ`5!,+tc3!vX/[D1PX2}W/L9Ci"+;e,e1<pWVɵՉ;K GRj D5unޖL0L `7mǣ 2 O`sPwZV}ύsgZvYګ?Q >~sjw{_и|顓 g'tNwԄ%wsB7%uv3 PLvvӉF챐W+9c`PkaԼR.xi8! Yj *cRYWlN͎~w)8šݬR_&p{7A$:<<$$8oUH*;p挗”U~u[9E%q^ܵFjR+~xޅEc|OQ·v0LZص&,{a OMfnStm Gx0Jlaz];tѵ.6;FЭϋ?_ٚI_P*nC.)K pO'}[`RI5`w$p}Vj)aCX =>͏w {F(\\ߺsk`qPyi3wlv~JP5f<@Pt{ηҳ |QFv&`I&A۽R+0[F|}%I B(ml͢JZ z<Va1gv10`2a'8zw~M쫳gSF/گhO%++AFiOG5N|3nŌ%tF 4k ":ji$ Tӎ&\I6J3ꈨWw8Sƽ (J\AE!ϫNǩ6|E 7МCR_zr:]O e 2jV SYh0o5ʊ2;_z2<O p|DP ET3rJzNsU` 7E~88kR\)K,7s wO,ٸxpJ7t!f ;^1ز0!aOHJt!%th#̦ԮF`FTu/Edv3g& Rs]Ŏ`Z'9/+s{6U%H1mװ97%L^O: WnZAwS{_*_n? M\|̔T]?F{oÁȰ0T}OМ+84e["7j?un_ư oA9P5?tc+NLMeWF,zڶWW!3PbOC%+Kl9ļ'q[ְW}Icz= B'=h+bgO₨ý C1J9⽏^FOJIDf8Xʼd n) DSOsY]ބb>N'PM<ok9Pw)t+huώ2n<(Є%%Ej(C^oxzP"@ a=Q<4!vrʬ[c 6 SCϟovѵ#p4L3\: x_@i!6o"<$D:B܃ qwrYOE\guX;!BdW\{ jAw7h+'JG `]fzԄ3+Az塏SQM"KpӘDĺU,:iQa] 'Fw.U[މ *h*8@IDysrTٵmX^ D!EynL2"bQ -obt擤m, 0H8o-N;yf;0.,Z$Ek3ڹAtJ-\zn0j3/l>"Rf~.Rg_4;yT,tD waXZӄĬY TrdnfVx_eOˆ9cOb3] e.rֿw+]aՅr,y1?}>y5"s4X|znPM =hEy0Y;Sז29>P*4Sk:lp* iὬQ1% *ʓx#ׄN@ʇÇV[&.GV 'g8HҞiM,Bߋ/qQMkqrF4cozZGG]A&_+泖Bwl'7NtN"+mSK#6zX%WzCv% zﶙcɀT]TIy+ܗ7>ӳc~ ,}lYrw[)^ `[/BsCٺ*S )vg:U^\̴!ڗa8GUQ05LLV-#[~GTIP*?K;(qdL%~hdc F4\vJD_ymg<_𴫺m>3L꥜owէve2ZhU&w_-C\7'7v09IԖy'7U \wƒHr*U}C#gv'VG+(E g/`I+"JKpt P`D<V7p۳)u8ʫ&]է@1+ }~09“n>.M^\锑z43.Z'Rn?<9-!D+DADG⪏U⎲F+*`+mftsk0P&a|QXri{3Id},UÍIe uZyf" u0@K|M(Hoh06njɭW/#gipx !/j@ EI&&CRT"R/!L1AKH 1GUa-6 hJ?M~%bW08Arb"Īwѹyi3-}#x l.EJ+k-%SsS~~Lc?{NuKMr yH X&n9H`i&" 3 ={\ZD8UrzFW! ]?܉M~>_zT#Gԩ>nH+Br#D=&.%jvFOɝOh.mR8y62f/a|6xKd6 *rAN&kak@xmX$wn-qc5 r2xSn+\I(ﮔ]UnNcχ>؛"]wsdݞ12@أ2l]鯿&= $}lc" Fވ@12D )gW%F}R;a3f=D~-=D%] D<:Y:D\MO!>|ޯxZ~"}SR+9Xy/-q {:xleƝЇcG# "_0J1JPqU#E]kX{h2xwl³TbK-Q靭~tkGe9]^̡VX)¶j#t>-#/[H;lc2¹U(qz^aU1n9vp-, w2A]nNs_,>͸j3rT[<>waX"Sە#!7-kl Gih3<:+ItGoJՖ̀TLvzhk@m)VϚZ v#6zo:AHpn4+8;⦊-?^ ;ӷhEh|PYVh44D7Bf ;NE9*F6IYh#Rp*,WMK[%<>F 6>,iVN`gd-ޝp^_mXĥ3+W層NE1)Ҭ_ ¤͟Ád \s򬼒@lRF3Uy"kZiXQ˵5 钊++ZJ>r~v:DXqHFaM>z>_,)D[ j`̜.QKJ$I_BSl °h4`qUs/z[Yx(D!C,+e˕f)z'UҭwgJ =^)*Ce:%1d 8dQ$a*ɧB=T*AH/ ysk b;CжZ- ]/rmWiϺC |mȂ Y *i[&Ϭ%gwg;lI֨O}f#1HxsQR[.BQ.B {{k dIN\Qnt!x>)w+.%fS]/劻1ij/;oռ,Y§y6RYʺD7 1~8$<)$DOqU*?vp;ek侊NR$>%kEm0 :2Xx M(KSCTU$-T×'~$9̑*H  *TiO@w@d[X]`(I|ՌHMΜYH |[{j/Ѿ9ӛZe>F/u M, ͗=>‚aqGvE!N5.Bo?8S7.2Oġ"o g45p.8~"NZmыaC݋ |dˎծTXgPsƽ0yi&F6 9L;>3d#g >:g2C΅0!CT!`I;AQ庣X}0_ mkNHF"+0atY/m/(lU`EX˗C. q~tށ[Z%f릕ҋ-jT%¹:"\دb'1?)Gx¼| xja# I VroV[h-5+:Vhwdlk1n{QЦek/)1#U]9+&fy /Q7R&CݰmVmBxD?C1Ga 8m> ]oB.;6 лThgw@΃܁bJEʞC`W1׾ۈ3IGA \=.%jm~Q#p?DeN%J12]Y+t!An=O{y(`RZ;yn?sԷ)._ڄ5 PAWjTS| f b}&ʩ WCG\SyH"gHD({eeCԎdQ)6`,-CU^zHD. @s/z#ͅ40(DX(n,QH :[|W1hUsɭO˯1Ye=NWw3&oফMfLKMǤ(}1™n.U9 1؄@Cj+#LcRJ :^iKYmݿbi.e\t0L4 ljJeg4CRR>qY z .(Ϭ+l#xUcE Po݋ךhNz.뜌H,  Y_tEoWk/%(Ya&&_5` m;\_f1\b EQa PjN X4L]&uX ij,YNc )Nש)"?UK9^q (25e $Ci~wnwI0y&8}Gq&o,0&j,Sx7M cOHN*ډ~ (NiCm$K8>Os;>{wM,MyX'-[ͬ|J{2Vm.߶v O;D4<tYLQ u4"7?tlhB!(Ia$#JܔӡY{&W Td·#~^ : G &LzF"=%~ʷޤFاUYָ|xY;kqSw!7+'3\[ RTL{6w VVg -/Vnk"H^6'SV (YO D$6k^!>:$l$,v+(S8w+>xP}`[LZ24LێKn{E3YnJhJ4 7~7nayL;f㫸 |EA'g+1r >(HR^T1=q/1O`N@)/psܠ'iq^:t>M CHR1/+RKZئ*v9 <-zɃ3*Z%쫙XPzrT9N跹1gҝ-?́ q J>\S9\`CvF)a?1lIR& =I&R#Q9靀d_lS+ !"}׭0G&fIFrQq[A$ay$5z[ܸ9Oru$l (M'>"n9KQqncƐ|~[W|eniG3S'ч="_SyPS,TԑԚd"wU*зۊ:̄hr) rJ/P#\:WϣSou g^]/!)-4u1uFϪbG>b:)~;' ~qEh,WS*mv?-:)W#&r HF'>B_AmZlR\}2 &^d 1!E.qtY&,oy <ͬ&DFNR_'39|{.7k(WȂX+9_:|fqhuŝO+ #' C- =4;);S7$ECug3^cj`&aDMqh,: Y 5, lO}Co*ќij1T: bWI%J$˘(J.?Q1K7S[7 1TLk(PAY7crmU{letkis!xZal4 x-!O6\ip#NPhN.(%9!0ڊLXsɈ I8NW ?-8%,#yvbiQZ~ zG΋mYN=~O%>(j`grC06HuB藵8iუİi;X,-ғe` vTu, I9ݹ2դSk?ҷv )~W9u/$2l_isw[.[R1X'Mx~#mr>xmd *)Kt<ET {ń@[edhH-MV B$}w9ɉNfb)_`ǏbJF}0S++ v}j@ IPl/@܏03Mg_v#rlTtםdWPZ5]F_6%5_?3F.0`ݱWVehcVʎέ㾌^Gt3VEJqL+ۨ4o"ͥ2A9ecqDR%uZ{ztǫR5/TpȘcd; $EN˝eF$ Lee {&ʔ?< 8E 6A zL!dL07ڭ*iSmK";LrOENzf_Ʋ2]]* D+kP/'R-^՟k/ bCdŀ6A#cqCB'}ױ[|'7a{mr#. -vGhJ])4t8p8 ck& TɿIZ֡ܨmc4\J#ZFGε +;.hG@%$Sl(ur61 EM(%s^&2t<1G9+HbTgй]5zy-pcժW AG%]\17\4uՖ'2$sA1# X?k0zpNL'^A"sa_n2Y,- ]Cxm@^bt"[}YA,%4ΰ:+%~_XzH~#z[*iXφ\E3/v҈ϸXh}גhC\e2'0% Z$3 ٙV^8CorW-wU3Xo;2<LT U jKƳz::+5؉~7'd&AX02<YLQ0/ 8iS n+m>a>ÂC}\`9UnSCTH [+4Gi~R=e-o?1Q/ oP&ʞW}f-RȺocqaޤhy 5֤@ξa :dĤ3&m}:VQ%R9v~ "[D! |KDPEngfxѰCPC`mtw V-:g)\M'iY菗#+/he,n !.YNJ\et"N=30CHW0hM}Y% }=NҽE'z%5!k^n$W3ZcN%nn9;CtˬLg#Fc|C[B4 _p}ĸҺj{JpQ{WRԧWZv_}=]&Z Ϩv[X0Ty HA })i,o|1q a^5R˃mKوm.-Zz_UHU25~'2\"r*wJ88]R`H9jSGhu{\0 F>@,h89j~S8|-KA^W=ou@~6nIF.Uݶ.!0 rx|idd if8DǼSZ7J7ǧЀ <9XLlR׊ζ{b!t};:Fn="=fI*_i,2&Ó@[hTmA@$ZԤK%y .n[)TTG #-O_ 䂹8E}7:w_!V22:l0aGiE(idIzܬ"sC[VJgR>Ho{;eT tvg]HH@669:?x+RN5clQJŊW'9?O}d9UzA9Y_A1pIpRGEeU)EE8í/< 00;n<{|o1;AÈ&jXGPG4'{Q3&rpނP SA{yz a;/,"a>_ʺk PxK`!aOn 'cX~pk5ߘWymM8>}^bAVYKt?0<þ.+U֓ Yj DJ r/ISxYNE9 g)2ڕbN^xUe +(]q.LxxO%v%o`ʇw͘Q$[p_8~lJn.iz$wDK! z4ኒ(Ujdzb|V)@|uF78 i\yhҋJr=?xo Au1sٯkyl(ܔ/.P8};XGNeU.`–]kp{j63ֹSHqfVv9cKO=ATd^dӹAm3825_'ʐeF#EBAz 0J~cRiNQi9>'bGT )1H:TG[Č EeTZz9pc=u?>ӰTSoV0J^avrVQ``N P=XxaWF>R bVZtA]DOIh>Jώz N)ObF< 1 [YMRe|P<|Ew:|] (` U$6h~wX%_Fi#aEb?$tCva7=-:? ;>wu ,D*VEDZ2 TUb\Qv14/@g/Ec#l;4g>g#x1EMy Sf0&Ny+ݗrB:qV+nX\LrLyA`܀W@s|W/FwH 7heH7Qoa+C`аDk|~]U5/.rFɀΑH#$f25(˔>"r9(}U/$o:f@;iu +JFIf@y6N}N#4 X7)ޣN*s$dQzMkM0w|,@tђ6K~$¡@' 0Gtͩ<c^qg듗F~ψn _y+h{vg%p^s[*hh"fx3Mt ̻lAvִg1Sp(^g'A.З =Zqڴ! 4[;CKcQb]@^5&#Am*b!gd?Q"&JV`z_ {E.c(VM'Z?5$(P r!DqD6 [938LSeg dX Go 'I/Q<9~mʲ=M؉qn؋8[2oja}j\?dS>UT:WYYjM1gƌcL}!Olp}[D{P8549/Wˁ+I\.7&'ARn#V~0ڄY*吱(Hő*{LVQYGy7`$N%`H;W3 \ҳ,aF%bH*:*&֌OH%S5g}R S 1yt3VNkNO򑖌K^s :. tb@( ' FNޡf]ܸ딬"kSNnT VTnM,{QݜWja1[c"`cK]c i"aՋf?YފoF' ȦvlMhK0kJptJIe$n g~SFM&- Y4TxK$@2Y9i'e,/+Bm)igj5ڛ@)= _s > Ҿdד$Hty]yEdn~}?":*+P`LmDa (wH3W}b1jyt=xH(5y/2f`2K {'Sji|=WֱŅ{@P'|#ڈfx}Q3aX&ۜ b\\VrFi]'(m{=UVj fHn . `6m5qO)S6>ⶐt)X}hSC,x\dIec-GIHⓤI+> ?P)_ ;ii<&#S2f "|IJ_pC:(_`ϕAIAJ! 8I*?,Nv@b'Y2u,eC{xj6e\2Ab/xj")z\KrslX5FT;!f6.70~K` K͏F: srN,&J17ͤC v@ߜB:%5>깩 _"z>)J o '.S"FYbvD6cafE)- $wHI*P /PóoN~7ѭI 6Onhγ`ᥬFY^\A#rtso,dj2VX9-C^Ӳ;yIKp GU4/ݴ@2,J.q|_j1srm_T1R߷]0v91ʼZ{GKK@ f ߢDLpG϶$dNML;O t[d6ҳbHGoA̹++X IF?S9?י6rЮ38GBeyjh< MOj=eΪ 7~i[[&kFY.Vt4A hfp䐏FO0(^ esvNL*OA_u۶8}3olr{lƉ]HWb!WJ}/N\JN~sT[:`$gtU_! _S9 ú{x٧ij삭~nM @*VGQH֯MXО8gTl./$}.mOO8&l_"<8Y!a_I?^‘!1̀4"T\@Bc :g0{]/q, */5 N )Tsl-<{Ђޙ$50̀CI"U4J\C~Ƿ|JGŪ+#`DˣpLC sɱeҙ'1~;C,pYn%LYyX9ZXYiܯ\%(۹ XT 号u]J|*N|RqT=&/0YI$? jj!yy{ඥclm(21WSH #Ex{􁃄yOj ?8x|Jẑ֪ӈ| Dz1sꆧ;+uݒDrveF56CZGMi呬`>yӀ[C!ːh??̦x❝ $#^0d'eHSxԙ,2:! z]CCsV3P5Cyn)^@ !֨8Vi,gIRt/bUywgM{pD2ַ ZynHCQaGBsbdt`&\Dzϫyr e؆݁Dڴ^e #13!݉>T۞D]z/Y9A-`z`Ṛd_vc}{gH끯&'J|4~8D<_e8Tt4JL-"hbX17̜fjqԅjxS(M% V~KXAn]'׃5`ZɵS`K\bhO>#1 ;F_T$XL%60Rn6[Tv:N" 4|h5W=&B!Ev [+6S"M`v9Ïq]ґ,ª T={Ή*.Yz^4wKMLǚW1Tک~Mb.WpktLNH|$'+j/Wxus עpsVT(ayX>ݾQ·ɑ+ݮ4 W K6gq[WUz-W2!~ڣ?V7t9%:>nL_̥k$݈≣иB|_.{yBӯu֥ e w)"밫K#" r{޶CHY O0*i~bJLr}V_sśg䮽WUDa*9Ejn~=bCHՇ '[NOD ߒmZL+5n"yK*mmHDZeRPGBV hF)1}]lv cm$Xth %(#TS͎i؜%ԗJg~erF3م TTs/*:tTY-F{1/5n˒!8Qd;≶5k e_//#7ᇮSvҖqg`ܥהvj[6`\SN>(Z8~hSod+Ү+f"khSe%."۔挜B,1=*L~-0XwN*Mj{)IV56 G)ORjrO$k_Vg$],$7EՒM`dD}?v^r܋/|18n;\΍œ* /m:YU/'GIk$S<o7ޒ'3).uvz|$M0{:D6KiMшO00y3PldybQT!o+V<7D/ROkD}+?zkBW ".ۜ/k~weU,>$g:SDEԻKsqo@1ĆpZscmW5KKgr1{*gɤ6=0Z~혃a7ֱ9̪=j/| EAgϒ%IMr}u"%?O}9O}CFf W<ݪY/ M1xx6JbE<;~Gv\7(i9e5~}(P(Js-;i`r+̻:tB3 8*U8-mlȬ̟1%Q-ެ]la?6r&b,74 Dg6&Fn@J5O)Q?q*xFnx"H^X4PHbW7j+i{1`c@%xEB'g"g\cg֟I즸^cO~mBZ4罢6z~ĴBC˪ۍShs5ztb? aǘLp ͻbyb{_鈺yU0Dx9ԝmػ<x@f+fpbķO\O Uh=yZc{7 tg 3;]ĦL~'oH6%litwuM˜v㛬Vb;f1]UA9?m]0-bȠ{}$Xo;X:3c"O[8GK ./C&Riz-9$3BibR޶0}OpCʥkie$=L#pC׬]]oxk8~z!ϻ Kuk$x}xDar.s0rI7ox;=~b4E hGQ;{Ts;񆾽+:p5:H)5&]: ")nE(I)m."c6ͫ7,\a 7µxڋa`@dJ 0C^de5 žn)cP$ֹrp@1$'Bd{߷Qn@(QמQOyNP2\p\M-SZs ̻RZ;} ̋`o|#%juX$3jt&tO8>1<1T+AͧEd V߂(-ck):A%/ꍃ)0(wUaƤGYGܴ5a>v(=kv mV`P̛Dz|Ee [3Dl'& 18+|^頬 `cS?'qzXod>m}܃s2XEA^ZhyR`_K ,pc󩩿W\&[ok*MYLP3d)Y|СV}l߶xCV{ b7Kc`I|aH5@[88ib>߮WcX-vZ62_-(n8@d(BPDk0š*Wž\9PV !CΉyF[IypيOW0eȡ24ui,,2}oϒjF9Lz(Q{Ftb^akA>cyg 3@BsVUWa*[bԉ]5i4chJ0MC; w+'o~xߎtƺZs -z4̕ k#kf\ͶuTŇC1ş%7vЅ蓼NwێRQ#SQLdoD-i1s4#t&CnhAԩq )LB.&nw[6,'}59LvcJئZ*Ycל1cS8MڴUf}ɻ L⽶;SkhuSL`( .n"Fuv$C hyn="!κS%h-z,@Ъ99o `0Qi: Bɭ8kg rꃼlFIw Fawy@?i =J{2L¢.^7<& Jh?cZ;kHKF&HnE*qTWۢSڝeI Ee?UX7Hv("'S6U>S>٫4@yABuR+^֍e(1߮#R]Fu%fJA? T˗wS sLy:TD{;m ۞h})UH;ŬgEd#cP&~ڹ+}96CKL"CC%ڕo-.gugnL挅άִ.Ls 4+6 b@MAQ :Z|`bg\fP&uHeoɧ؏0qeW\E&;# eA/"xua 5JB'XGy_ZG|9 G[EY# 3qL;.]<$mbԣo{hI${HtivN+`[  3MC}|o_疙 m-}%e@*7:|a "Э! 3p\sfpӠj-~+)mh[mCQHQ?e? Ѣ(6\8tg}Dz%D[9Ϥ/GK~mFBd = do:*SBzth/xᖏp b@_f ҊJbjlM׉Q \nnd)@GpQΌ} 6im7u:nF3uS׿_#*m*gk '/c]M p@۴.MB56C7wzA^yo`bD]OP)J|o6#ZHIXv Hr*{, Q$ttj&w Y澷TmwL!J7mI96O)|Q]J몂Z(l} rqT. D4"Pdv_ DHg{wҔUMT]㮝fSO^_qǍ$RAbs|O<5!,o5Bf|<Y|e?u;aH9a3'H${'ogzQWf=2Z9lA '8N (JXhl験K`ИH' c}6 PV](!4zCLQ9?]O }iLepn sQY+]91T{\uq9ķ ɩ(j,(H1l`N@Oco,V\2=驟"ôXm7 cCe0SZF 'bCޭl19`eS3_}kJͳ \LwLJՎ W;Gp0B}l0F3~ěpSs.ȏzzӱ#jr@jwICKL~(R4)OD<3InD&j?^#`)45<ʗ.ɐl\N%L\'wVAş,09 <2se]A8tj`_XSKh% ׿RZ>PTnbK:(2_~xF%j 0\w)li.yԑ҆0:no $XWNO$F@5~ Pj"-.[P1-zn=Yɦ/UUJgm0 @ 4]crWgjKhѕHN7F?Fk' , aQi>D 4_ :9U07R 9oikjJ+of܋6NŤ9U05$F@>-yh!<0\gP#*S,N1l7duh$QB @īS_V|vP$а'&E{ycWK_ʚG+ Qq~=Hb k rDH ⌬.̛܃y ZS"#*7&^~?_ܴv9@ôxIxS7.V5WKZW.w4$9b33a `*`6wGlKt̥)#\=8P!9;,eXn$WX*I ?|d,G5nMM m$1'|]3_3eKy0!.yٲG ~8;NA;)oTrMVWpKIƵ@|rFn<8.19T۶S+"6bdڔW)`{X-$?1Y.U;PQӨqhKQ{/"rrPN<~:gL3#p&_%cr^`$FIuV嚮Q>+ H~DM|S~ÒqgaZ!{r>Gh% `(8tU dI: L]T'dF{6zm{B ,S#UJ`s,oV,W6ٱ,K[+4klt֌ӯC)F%f5E7\Ӗ|!R>* =uΟ\kwy)g7N Ib js_혃TeRtKM2hŝ/5İ(VBo:fy, uҢtlWI`|WS~58WP]^ ; c2Uu/-J_m7_4qd3`*wf[[b2tt0Gdo`Ę/Mbj 6jBWL++\ ):ӊ'hOOӐ[۵W f:qHz5>p<6 O)M =45-2W;e@M|;p-x,:_&C{,BH}/Kwk~7Q[%mES n,ktFLLJl /8L DNid0=,[$ͽ8F 16ʮ9ؒ+#J!kBX"u߲ 8=2\e#p\l!L"@4' +J A3oz~*T: Bv`/:^ld-x uD KZM]X" O#lmWg KnTwZ0:#ե FX(:.N"sxZ 5D|(̇P$d|(`HZS+%8,U5qrKiG-:j6:䠤gg\BtQU Qɞfxm!Mѫյۥ<'qۜRJtD2y|n6Ne]+ض^[q h+1V\*Ζz 4'|Й%KʵϠTz ,ގWϡ t/U 03k+*y"Op7`7/ W&m$0er&AAе Gvl/4:mlgK[3唭? qLUD2_ZBĻ(Y+&DOݱ>[N~iۉRo9䨡6GYpEz|#pM޻6?dZT#6ingGSN6FLVa)-jZ]xôp)C_[oUŐ- A‡RhvU)d[$<]oL'5,8 a@, 7d}HFq gcÄ4d8vsUoiP#O'^c?$^-o!]W]Ӧqjm O6`|, /EW8ݒ+r, @p8!˜fTCl9QCk I xR`;B@8) SF[tYJZ&K4vX z)y _@pԍHo׀9 |>*#́ T P)a_X]8pg,T5ǧX=L{X#I*fn˚[ڎ?Ϫp<[亮^N d.Z a)kC]R,* νHβF#\Yd(?E(JZ~o9.qmPI#F^9}p0DEk\=NdtM6OTaaT(8$O?b+Ot2<Q,A܋zٙ[gL%=rjq%"TYPX;Ab48ruOgǨN-߹64YEԬc'W3 aT&&ݦ潾N"rƸs_"*/QPiY5Zc˶si!H?H3ɂ/cGMÎL`(d}V |h'T} zshbBV/%9ٻC.+2PqlaRb>)jܽ[d4wӇδɊ1pmn8ІrdZGeb3ԉ(.UsJ8'U3W´<\ջPS8-5jMxk#=,> aɾ&CK/ľ, |Pd`vO< 놇/Zl'( r KN;WAV$(MJຒUq;5U b!Z4ÆwA:J/j t&09'm" _n[ΰqPZn' X7rӄ!{GUZz3*NFnŃeCE)uOZS37P;h wBBMWEWR@V[T1䌓:G=k&DZ.PWB}G0i%Y(tFaKn$4,ۧᅂI,>ϫᙣD~~zފV|{Eq?hfI@a @=H!7x_w08xll`(PSp"64(2xS=>hl&!vu76WCG)BќRk=/fv6S {T,a0Е*St :q%?q^ݏdLR5' U!E}$#G +IJk`,#cd(ܙpo5DNjF%"72#'(qR x*@J P6^~<LjEY,5VeNpajYlOTM8:pYѹ MVq g0hz]؟&%o :ļWL <<3džCP) _ 0E6x"(6qMuO[R(2 rqmZr] ٨ˡ$k* P[8]|Tg"AM>Y'jJ9=2q( ),F݌ e0BgQ]\u MW;ŏ5<6cW3/m"LiUU" >.YgRM' ga淺yifƿ5e5"$XAS?`T&;q{}6ZC6'/wt+>z0lt60-9c$+/YfNV%.5 J㮍Ң^ :-Ç7!vD+dA:ߣt0xt?X,3V!|v=,N:j{πl/K a1qK UD]#مIk2}6!"-ds[T|ccְp,@9yMʲ#Xf(pFLo8wWl'sfe4襅nƛt-a)_2kK^d.S-nm=hM+yj@ ֧ʮP}wE4K!5Od?gd];좿,fC}0Mw3HHÑBu_Yr7mjbSo# Da*|Ym.&qWPەc"zWUڝ.QuQzyzS/:Wo@Ҳt5*I5,9٨*^%gt[JsҕF μjͧ٫K5pr̝ 1=@x[U@ vCEg@DoQ_yaXdWȽm;OE'WCtU9(Ÿ^})`ѭ+/6YO&~׿'~.Ӭ ٚ GNyCLlTz(w]h{\sޔ{1_>24fԘ^Qh%zU4z2~DnaMqaT|D -m&7 :9F;70F$3TTbѼQjB|Ac.EoƖ6f>'@۰%+Sz>˪iB,{7rXzL+5`Ғ!3'a`qyMj ~^'4N`kf5xrv Y9ۡ0Dt,zB=0>ُP/UEíb(XI; %V͚Bq`m_Lq &ʹCkwii֟(m+`izKjl`pN#~4;@;(Ǜ'tTuI1y)DXǷۖz0oO3p ,0;ÿtd {s٤h!q~QYPO eb̍/w3Pд8$45hyô"==J]SBR7Bu/'QcpfNџ(sS <%@o6DCvlRq%s>M3 &-wCiD5 +3mf^`ZW}6A(¢ːiy]&&, [6uhVJ0Sh?D642ǢL4xP:BDe'>"0 Wf XWTԁ f\{f>|]p+!d֎E@!l)*>#Wn{ eDցҝSfd+HC.fKڏ}tn*yc *BX\&u!dD; =iD/ U &3}HdhQrT2}R{[iAUQz͙{'>ͅZG%ݺKU^jݾvspbdA84]6+B 790W H^' YV祿r݇jEtOcWZ# t \|i[v:qf/N {On՟Ʈ$4<ܱc希7t ķqѳJl9gp5j@\Put3ľh60%X/k! 7y4r( qPowpa"xU3Ey )OMcj/G~gV5z$-1DOd:u Gp_Q'1ǴNT9 T&U-*@V]3xXhwM(7aïYjZ6:*$ u}sV ʋZoP!1i7 GN>a\rÀi/x@L~Uaj hҰP.T'YxrTΠl)V*jTH$+kV|T)0ѣcr(,4rMd}rAlK6t׉Qw[VGתeΎp޷/0Bh)$lu}$ iuv> "<9RZrPKTsr|>wEoq`)[SK ( skﱻq_#rۧHh@nf8ݸriI3d۷<}Mr!\(F7[i pV,%%Q1LC, de(#ȉv6jb13H05E)8 @VHtjCێfnᅭrᏊ]mFrF9%?URG(ůj :3~}TN, 䭟poy΍7}Àx:E%Hbu wODxS BJ *ކeg,{y! y auXuFn00hk.b04=224[CpS #g(RdR K]8TU`~| ~J 3W]"qQVnUqCOqGV+/_~2oEܨZ|>?o+`S˼-Pu4PaƁ^WU96j(u:!R0?,S5';5*;"m6i,}&eg} ^kRJ͙hۄ)Z]俅=q^FV+N7o)|XU5ZK:a_$CV}c:z 8(Nڽ+Y'wp&c22obw>YbU=؄ CtAhՊbIB3>S4j\vq/:pB^y&kr2 \bq-3$\!:쯈C054X,Q!,swZ?| NJ1Z{P'Qʋ"Ŀp;&]dt@iXV+05ưMx'aome$p'%&ҷp(D9JT-LbjqV B.Ax$eA\1ܸB4oW24x^Ԕ%!TW1}z@B_wW+R)u&ucQ1:85(lv+], ҕuZ e"6< юeBC`K>PX$% Y%ſ;Oݬ${tjnqGXD&0XXhh$gv ;a%_(R.%Q8oPu2;^caKOTk \uD\0SS]neMNwQTU$У SΞ9ג4f=-) W %U !P2f%1@/&8{Bϟw#zqJo-A`it~ykN۹\\q~5 V?z IJyc@G-?lq!N^Cҟ ^uC1#^x[?k7,yZD6h[Tޡ);+"iVE67,#-+I&Vb(nA;j(j(_4жi% 4$6R2cH9FQR 8qYY[M v Z ޑ̀ [ SXe=8gp}۩+v'p?Ǟɺ@@+*ti=u~A500ء01K@,vg'膎l7q{p ۧ oMUdgsߦFԧ9hfHZԒm i3iq3Y4D5 M7-T+Z"J=c RoÉN}Mkbs+:0~~Kl/۹z ?:Gw䴬k"ځpɬL[TR[E~  tϧOBƟG̖+aWȻ{k:cFJwF$PȷKQjaN|œI$T#rLC!1@';K*H)B1ulp[ LEa >0IwC'MJՂ_KX-ic#oP'8c/k(5A>o<󏤆 ,o̓Þ~~ + yqg^n VIIET0 T7i :=g]ϩ%6W~HXco Rv|)m|>ƃ!yz@U*DE/96ÊfYĢyYHˤ)u'J܋u>㭓 ~zB T\>۠ʅK?2Z19l|Of62gGHN8aK_(ou0U^aq#t r?56Б*ks%S$­JfxoٛKF leǵU`Jo\0fʛFa 7I[M.צNӒQBAODy/ޤAI>VH6"_e9M%BwR/]Nפ&s1">8@?mOk, q`Escbk ƽLB-;w -uXƣ+qq"*,Ze1]Zvw,k( kht1fFAmD.gfB ﯺ@Wyt!(AՇCݰ K#K^objF-fd|YϮjژK}ۂo8 ({!u=| a',в#c$rh i, 6k` ?JI=Iw h]c8>|X+^/-vumJؒUXkz`~:6e^xp/K9Y1[i7Ur;l\bݻ}k uޣ"֬ As9ndpzI?_i%3"g8) 'S2"1sL,cp^7K fj#__:gec #6)%m˜w]Ixsr̚p$re:@m)sc:fw3C߶l,U"NZn LJ:ѯmu}A@!ẄbmQqB)sTM+zA&A=XIH84RPiʹqC#y4IvRg/*Bk/J3OZ@6+dLT] *4d;I1 {ᑎ(M\gޫg]  1.aW$3>9( P૫`HاBH:Tz5' yO]D7rc?݂=v(ߤc9Mp+.›50-]U%њmQcK{mLjɩVzBS5h>\,vYko^\﵁,T{ Cu95K4tNX$]E@3˜Tymg驕_|*҃4M P 1zh)AaӰ/v@>u+*E"ɰo6EV ^`mCh*YRtPhC=#ȹm14f"E1MZ7\~lp%?t*Kbq]|yv,vojo%Ǖ\Z`+8GNMa/rkj[[S^;5I>c8@/$7`|5G[Xe",.34?fkaqWݦLm>46NyTx~ ^̢Uv)I+ k8t[ƕǃO5TVfVKk4ִ g2`u93)`^`)nt-\tGR-0tnc%gp3{?͢3npaYyH7ږjLAUv-T#e .}s@9h"=A2`x[zpBn7@:U.{Blޅkd;8khV 7$J:xs]skcwf5[ >q';rhKE~hE(/ͮ)S[/uT'/TC ;L*'-.%7 ˄z&FGRrX8v}cR<)UޫqQqsNj RFxdډa~k1GA 0?İKrs= Xf*.d.6V= Vou,4%zaeZ̞Pǚg2ro51E. C9Sot:-y}Պ*L}tvYa;Uec }F]7 TuѦ{j4.^ƅQe;N4-,IVIBE ua2ƛdו "]-_rqFY3犖sf \CmHs 4 }X W44w7XȪ>'U2 {ZϪ 3lt܍(SvtJ%ȣH4jv3Hv:D]֤$/P9yoL' TMHc6ۅF8?k|PZk%0:zGǪqJ[J# wAg0w>N"yq+}-b:aLPQ$.r^Z(UG*X 8L9IDhSIVKۉ/ (ןJ+e-(CE9@_wBXj $;4*䦳m~FBV',i > 4=@>kn*{A|i5!78=8,> L:lC ɰт~=M<$R+~ސOen#RCk$|zn QE\9O%benR$cJ TyJ͇0fdb;k')f>|SXw^XP9DFiD5SrA {ۆrS$wO&!ˣmӞ% w"Uިk ( sR!e`{<癨6;1Y}}8O @=Z0/Rჷ[G(z :x BKBnmLlx' d(/bF0Z<Ċ0OI{)l2ݍn 0.#@- -yrBwבcO |#AORZc PUZ~ڒwiǴ'@)ijh?J,M>,'v-vI`:d Z!'aG=k@ Om|##W5^H݅_n2x8c}m|ui:0z}P3E">evn$ب⦭w$.ȢfR 9JISDmp~\+p{OZMRAm,l.9SY 3_f[ aNK[B>r^hf\V>?DvRG wXP: `:+$/d%W &Ne%z`)B^I lFXhi{5BLR>;k]@2ul9rÍK~=b O;O͏N-!^;ࡥiem5D@ i]T 94*BPviAQ -(BH=*UדlvP/eʌ<(Mf#=( d">'}GI<-YZ'ʺxq~nSBr\OZ}rL0Yq*N'j A"N9U9]ѧ08.xtt }u4w!Q繝|wZIpgݚBjlkA5&Ɋ)>Cazk5i?Swx;>/lW:͌oYL'GCm-~Kn|O`uJXOZjM3|jp&D2`MCUO+Uv:H{tl>^$cA^a?$|r#_Q&,Q>%ETB } <{k{'IBG+}-K"53/@bmD苤Ô% {PcrdG5ipn\y ɇRh z$0n~qu20+%q :ΥهG(N;4h[7?M&VF7?8lqFR!=Kb~'&yFލA+xh@qj`U$wDDGhT"9A,g;k5c %nZ*j񅷄ciK_.a_Y0CFt'#Di˘Ll`BZhPI]O 1FmFiãhpUGZS]dֆ] t"tΛh> ;!b>=$9 ;eR!U~EmSJ+Bz kvҤYuիCUMؕ_p^&_e tFYbjrO]r!IMpU ,eq<)B LšD.n3IKqޮQw5sC[('>D `Sd{F@`PJ]ev⮝1\9z_tk\zzEC QJ,'nE)P|&o Qty&Cq24I$3:i+m.>O!@™A(NryRھe9h.`N ] t\vnb/>qԆ"cbʚCw6=ȼ 4oonUoѷPn?Rď<=>ޚmp[wR6uT U83xejqL؉1'x i]̂Dl \_Ӕs .仑 ;"#@_5` *tCbY]',$+4McOVRf`wg7(nTGGW14ruZq˝b?TFf)"tHۙHɾ/![ USozu9 /~W5M+,6]a 3HiFdo7[:suq|M2KHTPI <Zm a}8zɜ6MdHm1u]5b838<@ FWOO#=o'C|k2;D_ϟ26p@ ̧16H_IMkyuKPI~.$=jԮ2D5 ïx8q%U+@9#Uav?\T4%p#>6}{5aPw@7U#?D˙I:c,BSfXlO\Zq_%(-.3Z.w{8!u9E>-~u &9LAW,eLA_vfg.yٟ艪C6*Q~3i~Xʷ4B|SAƵj"̵F {ɷYgzoz(*/Uݔj+/}7qD'S1k[OL_Bz:Esu>Qݲ 4)~N|zV;xI\Jc槴np EqS4uc9o< = ]QQV4s.DDԒ1,W/حx u4\09al 0' eȆ2{}wUyÓ8t)f2p#@ש|q8}5xg6BȕW0%WG/btrPŜn+_ٻL#L Me^bpv Hv+*./]#wHעQݜpnȳ?]*Ŋ?[Z/1Q|ekLOm4+hEMRKdԼ IWӢ}H~4+k)`'$λрLs;# 0.OA[9E;#2Y@pՀeͪPBLA,)ew`vY@AO\͑j!, d?Ql!N# C!YEoNaAN+}԰Pn"laCfݞ;Su_Cة{Փ7O4:EQ/!%"IYݻ@ h(R?m1:}0[ba,CC. _*j PT^R6NeU0`,D #;dDTY=4?27x%\6&$o2[!7@ +E[ S"FT2U+:?[_ܧ#Bh}䬸y`&B/hp34$~XK4ǾLJ=ܺH}8k`2yrpݚЄk=hui ={"VNylbH5W?c[s.ht&)ltNQ[^(w/d2#-iG8.;7aFaڙ-;waq(;8߿ꞻ< |g WT!((< i'9w:jtDM$ Zj)<0=`Z@,7q:(ឝ ^Ƴ8 Xx 6f 䩎%hŀL+%j2+0OC7"`+&x[T|Ο{TVvBN8$ܿ |WG&ӄ8NOc-7e Ygr4k-kTU.͆ o(QS5E頁c{:ԭ/Jq p8_Y<#?|DI0M5lFr>Zj'jzb&)8QRķI1XbǷY(U,tQU/VܢO /,8=Tys*lka' MVA&Kޝv&H W Lni!^ڣJ_ 0}@YretE|8do͸(4 4WI4&ݗ>U|J@wثwdݔO&$ u_c2dwo-y6\V\JsE3f>w=~Fy@rI[ha5~c])w4qE;띊-S a֩y{[nxM0hZ.ݾgYP<[y~ڽB?FVÝ}zg4r@xӐDȶ!= FTׄ uCHg7;yb L$qrjБGK0So$Sq`=30jDn,vrm0-5dMKС]ˮD{6Њ\*$լI]^t>YDs:|rbS9YK/)$Kt8}i͗/Kwf̃j(1P}wYNuOo';'?I)_5UY$C1UQn8'*aFv:1yNʷ7(G>O~ њc8fAE7Wb+蟋OP'm.K7M/a8 9d.q:-)1Z%>mo U8Y-Rt?ԣp-qD4=zgn1}qrN6Jn;Fx1T)O\͑Fn[ {au`5}\6}D(por֗6 3ʜeMV dfkw ?^cF 0%fV%PF͐Dc:Vp|+GEU4]-x ^[%Am UchqNHt`dZ> [? 6Q4m eh5(aS2^2g&s2dB \\Egx`),p)Run]zZO+~kO֣T 8t/ ^]X o l8QiNR+sxVUn= QzFsڠsZ^hףz8{q*Fma<;Zf\.~tF*7㦘JGY Q".I[2m9Bi/Ʃy6Ԏ5O3qHKvI/,RD}Ȋ,sȇ#oRzOz ̈B_*yKyRXU7T6sgpLeC:@3NuZޓ̈́*qCu4*xaOʰY>~lBN] +o=VDg {QtyG| *xTRx[R؋G7@7yhe2pα69}&yHߛP4a{Iw˪[i@vp>\:`fBV s{ ~bF+ #Q3jQ*9tw3b~ 4p}kEI;%YFK bh!s49v?R1 s>!biGayה)s֔qםI ڮ䃾w7l1EvH|<8Kl%BֺA\5߫앆-b^_Z0%*9"ꝭnؼ|F9+ s] ۯ}ܘ4kM,qdMdl*(MRxkg˿b^G]=<}*'v5%ےb|>Ghn,?-]jehrd@Yz*dG&v F[B^E:g@YlE_lٹ{oX:>>v,{ uq?x\;6AQK"n&ɽjwߎ67v#?x/Z?f "R0 po4"n]EX oTK7ik:RPY.dH5fx;{MfZwW:o)$ ?XXۘ @\eY15.OCSN>fl5'P֨h=pt7m*a:Sp>P_3f9/9ِUO!ֱ<";[. 2$ʟmu]8c~oO0k%ol4;8lz~\> a|۔9։;{Qu5?]ːiT*nԺ-1|3oU~GDoj~H}A+(CyιΙ!^hPcY/=jI&eTg? ϼz=UҢKP^6;vX+歅XlØ K:@5xm j-xA)o[f:9%y#@9~Ȃw1~v]9ѨWjD1AHCԵt?WJSB Dk4g)T&C!Y$/p} #m,sfwf߸l88>G]2xjʗ 1%mYϟCfr6wvt,`< ^׆c/߼Z ڸVtQyC'&rvH&[ ?#z.h1&łҤBデVAl^xf}i"+ RG;ɷ~yEBj53$G2ܛTkĆ3\ sl+lPq=-Od]Fޗh.k>tM>x%n? !ԙ'9.;+i(-H~$ˬw_fٶTXmj/7>D`|z/-+ qD/po_~:zg"6Ow9TZK$rޚPBX*kZv.>h)cjO ]zw|,ժ0ݗ}U۹HJK`tNb 936hGyj+&{gtw1eCC=I`QW^3qn&6Am!BqML`Я. 0V[CT|%/ !x d -!o.Gds&HEa!+C*DL'rek•ځ(YWXuEhI~>Nf*A1zX SиӅ`-ъ9([us+{j'8Rg$BWMwqfxO KAHo^z!845;`EQAa+ڊ [ צx'o})jL'BO }nh=P$Jh:uqm vjFӣJJy\ (Y˖O_5kߡH+Vc`1>+ՅA:# s o69喙[1oKx'ӌ#`Pבl+xva#IBdj5b/ˆXș$Qe^%r Ξ-A+M=A ~g2T"'L6(Z5j/e7&_<OءO &en06=10k}|o>RGi3ñ!=<{OAט0NfԀPlz/h7Ũ]u3yB\@Cx߄4Q Xq.XS:$譶cL<DAWZCo0Dj"zsv®fEPtau qGli r5rFhS9r-޲2scdmlS$& ]{ ,z:B5y4-goZfQ~'\/ߚtnUF^h>];}[v)a`n|'B5`DZm\WXg&+޻J^ܣsNJ6A$ 2^;ᜤ4o̼͂͒Fj 9JNC [[vKsDȹ1Roη(|Em} ]ҽAsW\k eG$DS"i' gdSٴu+ xD_:7 \3wbQiZwfId靹exSvQ5MB_U},kLg.cWcaЪȖ}bxmS()YɽCV|nz]OMT0iO{X>0h G0##ӈ1*1̦3a C ס5R03vN0ؐԡ)kl y:~u2!'C,&{NC"?VgL 2̈X}I~W 񄜹;T#~j"0'GidH羙$' +%Oal^yR I bf׆D*ɺ:π1YiakG`*sO_b"gnՙ:a!z$hewqhItك17;I\[*in&V#z'~?FMd02wHfe/ en*<uˤ3˴)DȱRW$snҒol,"&odN!?79F8?{lG~O=bk-n;g2a4?[[HlC{V ۻ" 1 uK*[N :vߘB[ aزLʋ(% 9 kR捐S]Ow58UXKf#zql!Ux 5);9T,^cVz~OWc_A^=UG/2\Ε6$_|.: |Fd7r'gBtLPtogspj*,~ '&:u5}<5.U6@].iUb3ͼՋ uvkrAiUwYArˌЛ~, se"2Ө-4ըy/\-lyQy85ITYB^vG_ԍB.,̩ny㰟IWaC@R?Rߠ/ѕ>KP˘if.k c+t= Q܊_{U9߮Bk NF=` k_}-vmt DY,Y:X.y1UY;A82#)rKHOV?voV!-]fBjN~0`T#FcڌWi1d>\eC)\zQVS>:N*1K 8&:kmiO0q3U?%~S~07`fb-h0ٖlAyE%~~ W9xm+S6wZ.?엇]*K(UC`RMq'/ HSq}rL˷$k&`Q̖r=n4掚c!{uf,K95DEp Fy4S|Vwv2g_ 2XY'6Yd5n ~ޒ麹l͟} Gᩲ84:CEM.fXtYnD/UWׇoBzFf˭~dgOe_ˡ)x>H&1wuLhPΒ EA5 %Cŭ |:q&zx ڝSPws9){Y-5ʑW<A^Sq!$+, xagg@%uUysdC7˲=dnɹ rrv E›U㋉Z- հa ˂q$ v^G?Pjْ۸ځzYBpuC&@^Hꐝ{æ7B)Hv Ej-Et[%hDɿ/HfYP^͙e?x7sse6vGb)TVD ]?iPK<&2ϟ\ l)^ )/X+:YHս0#<^NxM$ are^s8#qbD̶AY~C+x F2ߴatڧ#\_#-?FACi@U*%# 8uHU؏Ky?8xnZ 37I֔Ēue BͷǓ`"_06Z;{K!WqיR@ K͋i%3 9Fr|_Evo5ϙ?H1TYzngɫ~";zhIhl7|/ݕKQRoi Ͷ*TyGz_s?ٹ.e x+"w[4rnuGcC{U!9Đl*RDZde{3N0ʊ k˔N9[C};(wyŰ箓~Qs:w 5 *|.s5~SXo0Ž,.p9$N! ]R&4Ȋb n;3>$Z]mR}Bo;WW`ͥ\XWrm`5!KyO8d ǠAR g%?N.Vs=_(\Y<{Vne/R/w*eJx#qU^Aq`Npb9] \K &)f])y 70 / dFe)Omg0`⴦ v7b X-0_!E]t>J)Sdbf *-暘gE^] WW,[_{9 I}9&H۟[h _jעN-F=v yW@ƀYFWp\.SlJo)_n Ab“xILuJI9?o? ~nȴQVzEbmX<WXZ ʵ2 m<"H! *D!N,O7^O{Nr'qȆFQ]鴶1S"_ưoKk3z?uR':޹i.n]Aߴ\Ҽ=!'w]8Klϭ&yz\bWYk 7=,5.RuU2꽙||"E5k)OAq0.Lk*y?;(A4ir;y?Qk.3 D6,_ol !j(PI7 C`tU5$Fh{ d< j@w VHoD %%H]q|?.jJLѯAj+Y[<䄆BĉT_oe2 V{HIw:pNvWAj8%P̌Hl@ˉ?' F5$Ø17~CW9حζaHx-}xL]AAHc'$HcUIE6|O@7 =ҩ?]ΝiD'_dw,m?ݢ$cd~T{ d ۟hvcS`6o/h:\.K\ܲDZ&xq<`1vU4Ae'10I3 9tƸ#7l'%Ĕ%4شT\.}_C~>\r2-WAs|q]5 Ҷ8ӥC)Y՛7uUN!}ѿkW[ HmC.&[IÁ:FjK$trYXA^&߱'7M1~~X+Jd-a5d~(;6ǮP-5cq6& _gK3 `n+w^>N 7X;օn>6J,+?N@LAT< yDz,0`f?7gytǦHYت El1_}*CqTJv{" `0#V)BY1" eZcRWg̎7IW šl p/ۡm|e)io-=֞v<ݢ΋`9Aw'taC=$ e~;S 6=˾X$Ca#Mq@C-VC2mru ɸr@ZUDm Ka,r3:9ÓH`w"F~x}94IcmdJ+sd!Aem@Di=vrYI?B'%'l/Ct zU 'Jr'P,mO\apjQ ^hv  #]em3Ɵ(U;&0ūkey5 NAQmDZ[2?<|Bf+D0pkv!g5ǟ%k|b+l?;SB/!31 L:'?I({0I6ތY 9 bzv}UG@UcpwWO*LW;%/Qn18tN1Cт..E1IflCOTVlkҏ|dd!5:T#`9x]t_({}q+U:J-I攧n̞LCiTqb섨׃Z|!_`!X9I(3VHq\g(~4c(+Ľs6 Ͽr~f{ryдb<\/"p4QVUSt'^[BE#"I ;-FS:kGOj.0AW2n8x*nZ~ݡxNR}!{\i;,QD?zU-qL"|uyA#% ڱv/+L_֢0OJօ'mMYyO6p"6 7+'Ca ZMWch==r,ߊ {zcnn_{FRt}fha2hqn{eag@R%2ʮu}ok z I9lBb4=3,9f$+{R0&#z>31=wO p؅sSFolδf$iPqhoT2cs5 Luݻc}JlRBPh|Ǵ#bfCZ[> ^,n$&5X'9>nӅŸ,} K/ QZrC~7}{1} 2O͖ k '{Գԋ^Uڙōu~?jQCÎ3a5C(Ć͇tdlI?sy\Ͼy~`MB2{C5~,5C9QcMAWԏܮk՗ۻ:ʦif_a$㾕a4!=yx#+H\H}KYCp˸X[Z5v{'/ y([һPK; #sބ.gex!6rsyxtPӸ`D# EiӌЅy C皌_ZȒ2p-'by?='ɈOӋ wϨi$ iˎZz3.{~-,4_:ӘI﯐n} J=Lbn)9iȓ8>i&Gj?ULY(FYÃ-[YCXB:їgІ!+BoW(_V/JLw6vdE͹ uDf2{c␒0dGl䌃^ :(Gy[H#R;;9RܳթUK ]DY|.,Kne`6zdjU.P,KCRQZ`.::蛔8]4OIӊXee˸×BwڥDjDWTlMN;LK]w&M 7p(c2!K};s.c6oF|FwV[r+8亱'?Dө N5v滈CvBw/O.?79ݱ*e߱* o^q=i:*B1Ce'\s@@ԣXiq(O_mKxLnQױ}N׎%uυ'=lFth*@tB±{9܁`&df2!ڡHQOLrd݈ӊL.?t~+PKzg45*A{x)Vx]V$/eC+ ķ72OEZӼsg ~|~w ^L^jMށ7F53V&v jUO U'Nor0mS}9$+U /B`E. B< է9k AWEI9ZW˼=9a G2RY;874jǡοxiNn9Pjnز*ù/_GD98LT0nqx١ˣ2+$)e;dΒDZ*wG'1Zbsx_qr= aμ+ڷp? 6!=ohzٺ3@?ЏkNϏK}YP=6V<&)xywв !9 nrBIb4@(8܉wiȪ8jS[&-`8,*q_?֡%\KB CRޅS}eJ,_ڷ=![@:X sҮ芏kI;l42Г9ؼ1)ڗVĀ?e̓Gt礷d!g7&ꒊ8EH6"$VY7ThH cH|kʍoy _7*(ƛ)+ jp$zhLYܻv€~PpFM Y#TkGj30wI%6zb "ueFy@<2S{Ŕ J̀OvvE6Ciޫ'AYERs(KPQF[$ԫƗ${5qdVKݠCL(JP!Xa7TK=lmYJjVԣt! Ivpt ?ʪSqxvˁBӴT ω/}о2%IS5-ahoaϪbbps2!lpvb ΊXPK^.kt=WK~7>?U0@Ofj6ڴ;"Lx3NzpEBkdktn7xjm,smni1ًsݽY:id[ ֚lV,ixsOhfC>& rr{,vudΨ;CZ])苺4' 5uPl79r5^1}ddH@dqOSߍD9v) }֫E[=X?m gn2~j!,ęJFVbXܞΒ$8Xe5aa3A{4Muf|\b.}F4#U+xl8slFsj:_CcRD@Q4/'hK&I^AP\obޕi0xFy 4Zo=&.i(L@Uk"HXz 0i=I7Oj!N\wn:W\Պh./g^ꬎXd]JxN缷Jލe2B,12Jatqy9(p"=e׷xƼ-OՁ-M ^:F4EzA22ht(mTxHG:"?XeӀ(Hb$>t-P*=c~cTiQI#\MT]_6"Bb;<BAjwcꒈtr jfD":$gA(Uu yyC&$aO˰p?MQ:N  5aA~*R)DkM mkqшNigЕ? 'y&]^ *wm?^I?2FG{* D*bN@\ P'DRI %Q2]ݟ\^@B d堰Y`uza6چ3V%wpJ*In2kxb ~a%o>^+Œ +E%[թػhwm{;E-{{E3m|҃+'3CP?̉ rpEdmTٔ"֎:E/j,#Tת g$˅O\ Y9cYs|ΨJs>lr)8dA!J=XCYC@}Dd]dTu[aLCt~ةے{k\bz6nrVf~zOо #GsqXi7?]j7Szl+I[WwICVʒ~2 "2[r:J2q$-qY=߱ Z7lcꮬaW m]$b]teS}#cYNw}FrK` (.8HKW4V/,;HYr%U;8?ű3ʟ. >H!ɰMݒ1@l-c'(̲cpa_+UBDnk} Q\1{)z9.5p肠5\`G P'E9!cewU),JjAS1Â$6Pf^+BduKAU-c1*-o2À^H!tv 躵[w63zYh''5BQE  ,^Fz~0OhYsт~|Aem^_дA S?42y`g۹ŀf'D!0FɆ6ʒfq4^^Kqae2PG/%Odh^ kqŨ]x3;^ a'uD\QĢH´FNlV ||y B=\gF2(|mTwt >|+'<&j)n B=v( t7y@*׀Ԥ1MPJ R߲6+%]>d}Gt&\k>:WJD,O@c>m/. !|z$RƆYzDy?CktO0-nkԞ? /搶Ev^Eu9"Z׀#'!h%C3لc(;l%sk[I1ʎӭXIMypUM zִ.ot]va=EnvRyɜy [J ^?k 86slؾEd 1g扡LLnPRn_Bp Xمuv<ЇD"9l4|9 H[.8! lvpFېS!Z&bX}vW>\_N;|wIZ WaMZdaw'^yj}n fb)VTx fa5o|k]ĺn1n.*zIk(ۛ DX˅I 5#\E|s]kLJaQ{T_d--?T1fL\DtRxD,qLc&8QRIW\"3(k@zZ}[GAQRPv8e1=Y%Xż:Zs3w: kx4@Xpy: A[=%"-t" 4]z!RmQwR" %=ڶIr@9) Qwɕ, z&\ݸl!nV&/-1C 9 !eV~?T7۸X,6 2)D+g,g\/fqGcxJ|ˣq˖~XPԎfuXSU2Ce#j13Tq ,9՘k5Cׅ#4Ҁ/=F"},=| A Qҍv)W\d)%z{,0+ _r6 IϠeՆg-4ENk^HHZ^CNyGdAL?X2K@Fs@}}81OJ-&ާq"Z%>R¾VrXf$:Z r{Ԑ7ކԏ~N[ `IaXKĪ`./,ք_re]VXz4cmXEi'!X|-#Q@2swb`\iě`'^$J2}RFc2ǹ#LzDm}tx!%:hЦ8J3'ܤ*g[7/>'9`1 ɜ;#a;L#P:u~<#-AQ_vĪn$MY Xs]`}ڗ*su[PY &om+Dև:xc3҄c'Xt-tJJZI'Dn܀ʑ'y[kmЀ%!&(uUoߠ13%2gbrbol毳ҋHR׍ׁ*(ߚXTA1 RoN`S5>O3tzPfEV~'9Ӗ#zG3mWlug]l ftmfõQN4i#,?bE eQr&G t[ݼRu #oAgH!:/vqS~g[q~FXoD-mvօ1Vi/u"ŕ!El -HA/ʹ%Y%+b trdFSiqo#'I78ۭnu}|—O^tXNgRa_:Քn2P'$Wx,΁AfhvB4q0q¸(jAV vtʆSc"l,ߔ|#֑XқR>#n xl cR3!!Ԓd 5ot_/2dE `1ma]fm?Cej0b<6@[dCMc4ǡ\,֘O@e3 ŃBW.f2ڠ-5[GG-BzTΥ -zP4Ur`@z<H1HLcԞCt%zCdB<Nw[9?qJfV]CR1Z߻?}^w4x%o@Ҳ.!C][C 24nOXzSz{&]VAEg>h%  ahSɊ0\JGӌ. `Ϯ m&?/;'YN!B,b-WR`CBH#4CqA4bxG#Q^Y'be[H!:I ad}sgsF<<@#Z ^&/ڦ\kT*K<(yXr0]>1(')@>Z H-~+Fc 4"ž jzlfW^9B1-\*~?IЃ^&D }? rDvۑnM[PԘ9oB;&ukUe2j_l]T[;aaݾs4k\P,?̶:=&I;YZ %9W9a[& ]ՄE" bY P%\ߞQ\xzuS2UBجbGye<H6ȜF`]7^Ppl7B|Ic ۪}1Mŋ<:e)xwe]K/zeH~cvַ, V~SSuj4 < l(UekUN`=˂dV0LUq-~n7M(O 4eej l5E Ӽ$2],14<ǖ!-hɴ/'yb3u]7B#"zpz*c&YQPDAENr%߈&-(ۮ[2^-緣̈ҙؚ.fI*ft ̿#W5tZBs|l:f~}|}BWCζ(.QxL^vڕP@hE۾(X;!Γ g!M/Y)S;M1EŅݤAQQ @qĦtLȩ+s!ȮIl0Y=PqY;qrﳆTzҭ\Kũ!@jЗi؊%|$*c^@];WY{`r _Ȃ0OQNF~颮+J#wx)}0` .FLtc NIL`S Ÿǃ I%TQzCjXd5bкV&x9B7غQrޮ/ >'UM޹P8ԻTsZ%gϩyK.^(nv-Ǘ2шu_=lZ*1g'7;$ϱ4R:ˮ)ZnN3wn74x,Mb8~;&|=EE ꡞ6Ēz h/oO7s{n (1ژyjX88K݆ʙDji3WI]Vz8m̏ryQjKuZ[J7 mPdU5.J>)SV?t@?43[ lgm{+>N1+0 K:' iZ*CcVESik67Lڭu:F.5$0./_wE*䩜BR]`T#vUߡМ!W*f0B6\(=^$~nx-ɔ d~2`Гڽ\Ew` Ihȇk#NyZA.Tgcqft>n4T rMBږOi`KDFAΥk~Հ\GwvpRԞ75+cX$ [ WOkj -EfY*,eY㉱#e87:zuP-f0Ȗ`J.>oB^$%ȍaT.3 TszQ =,l\`npmčjL2q,7K-W^0N\05_ =nQWB HM\.5lԛ0+w&q 3b Z'|$ᡝE3W^.ٍzq_hpsxTË,%!ڲ6 -mwJ6T piC[0Ec2g l_@(ƦM<̜RYQ# Rwgچg(e Cq(vjTh-q̢!,T6pW.5~ (M5}tgjxH38,d>% [ kҔ6+6BJzLsHrAW_wZ;AΑWP\0Qyl*cw +A|T*BV<*Ib 9iCAh,;sfW8ƽ?juu oEs4!}r᣼g5دAdHR̓}ۄuɏ=qveZx5{s'ZEh/%Ɲ Ä|@`^#)w_Et m[#\H4V Ow\Łg2ְSN\FaĵKǾW*M1]!#&2xIHig|%0>6jW!HbohONlX4aӴXzb 4^ x1ngdM<9/Å3L[6?6۫!qOD㏕>~4#ߤ3YJ ]$$Uύ+=fB?Xڰ`8yZ80D2;yϞ\)~UΞ ]g#1bpI$GBB43@ Oą' 7&ڵRۯf[7E6V;d =c{ _eI`n.ԃ"u$ĚMHSH4l&rz7[6L&T>@ V4^#!Ұ 'VX~| =lX tEwghv|!o7PsV`1OgDIZx(c .nae8 ؤw,mi ͺs$+`1V^_J:t譖~w^MтG:Weu/2|vBOaӬ#RCXP&GZfMw06nNό|M٪D\^JkӫW(5=L]7ʸCFDId_ r{,hXE )2˜KbL98A|W` S[QQHh,o%ɤ%s8INdXE¯/͠:Ab䁻.33V̉ SW!u%}Yfמ$Ƶl?~ i3s]%b _Rn.%}d*9[˲|gܓH Q\3(`4g5p^ ė5#z[Z+|9X>:$QxYNd1ҨP o LxJ;~R`<%xYƙЫ 7uqv> _Wx"Is6OYJU& ~FKDۜ4/FuUc tՅAmRеy-PSsM( x &#IE> 3!n!'FdFU.qWiNnQpIzWr"4z:?a Nn͇ yc>ĮP3Mt]s{>"UЏ@E\ӾVAoRV*2 RQ\nS5#b\0 r5 Z``}EqZ/AVj`r\JDLaxR_uC5&0hމ 41ѝIv տ"eeMBҹYe.4GG%sP;{G,D^K^WwhKL.YSd eP{ۍœ 6rlB^TMPG%oĎNUQ؋'ο)n*'KiUȈǂ,UϿLӪ O(j1l)[28`VSpo.C:)˱U&7 gPthg ]@u 'h,>zRң%  d2LXz9rOEH1i+!) 4t!Ga+;c`?7Ӝ8kG W3-q%e-&D0/3AItp'E9ŗ+!hB 6(]['woiTG-NJaG 4BÍ`A@Uw!O;ߴ'6VR*-gun6-xwzUrur8cWܱfk2`wy-tӇ?-tA9ƴ«K"IÍă! t˦v^vVh=ƥOc_7t>ZI6$mF78mГrݧ<(#ԛ0\hT7Ym8:a䀥L.˓ c٪-.F?QBG~ұV>0b09y+>p:&OH Hv@f!7"3-9`CdHXl)> lv}kR65^?F4qn]N=֦ NR7$MupPb (Gx;J!G58 -Y=SۀaIRj]C|9H-٠Uy^VIWO{f2=KitNЭ0*ĩӵ_\s4xEF](9]-Y<$hz04]~\L yV"ix< 0Iu,ByzvHXAz(b1dG&~_{'?`D7)"6PosraZ'VE)I9kJ6zPVpu:a`g]lN ٱc-H\n=o"I>q.PTh,;ZlA3ԩd¯ DEO \voG7[1 >7_5o`;g5׺)-%G/ڧފ.)KZLB;VTx"@0-4fRb* `SyFwY\&U9AB5<b+kFRjKI}.ъOMbzB2 cVJ@!ILLl|oG9p0RSvYSwВLNHOò<Epny VIawIp#?VUCmg#nkt0<ߠ+=5lX:/qPuܓ8,= xp;s HD=-DR8"M7p/$.eq B WB 'BEPFEGHz C1CNv`c~A/ 7l.92F9(4&LWyaAv{|ީ$?ˡz [ wI=7#>ǙԗtI$]͆_ץ ™iѠe:()vУ E\6r h"ŝ%;vc{AS]!.0.^(:Y_yv|5TYO~ YPT;7̳'>XqI/)?T HQ6L1ej-` r/hkmx&-pt*誾/.{X>Be{)|̳K'/Z˼z}R0 Xl$㤼*8]e_~ϋyh1Xr*d.U1=C~US/ ܸΘ3k,k7!4bFz@s@#:U5\6${5pzƌq&𰓵qAWs5/[80ܴ`"!-/mz?"(MJ3UNY2ZC-tDu^ahyR.Gόm:s[A ơ% + REA>)o9)]#p߮dH.U2QAB{^Wh'DiQ~_Qh`vpeγP=oĩfwҔG0CL)=qM_txIw9b;wj_Obץ eDg]")L89p% ]І ȧ;1,HO{.N$ B!e:޽ĝljY*v35`[_nz41&D ͯf:)3/|D爎)֝\_s6;y=>8\B5}&hYeV|&.J`DJ|e F)f B&Jx/!emZ6F o8N)Elhug<䬴T뤉3dO׽Pcؘ<7#'JU4@{Cailr(3&|&Cڵ-NZ5F]Piia? ׷/딃zT b4+ה7}te$.M>7ꖩެbQV{+,&TOkPMFD.gxPeAX[Q4%Pf(8cT1F;eK%7;N-Qјn^J9DuX`/}ɳyʒ>}ff[LXs̈́'~eS;XsLϤ߫-,-~b#Ukpuv$m08֯- Xأ~gWNH%qh3Aó+tb2VB?5Ma& 4p\_T,nOzȀn2l*{$6l+;fEDX7\S d3tlQWd(dB{3yL}ʴO6a Y֖!nv2$c)X hRhx?'TtH]&!R;)P <4曇5Ǧ2eX?C(,vfZE$㮙 ~feă|-Z2 ߂ȂbL %wOru3}BBpWL0ûZu\rt%)O\/6~0Ĥl.y4w4%\yN9߲CڽZBwzTFC ^ۑ$DWU'.H E#a)_>GG*̐w Dž? C-HT 48Bpn/ *)7}8(ZĐbRL6N}Yv'1Msl^9.*6fJT1b$ӘQrt|\lGL}CynJ3nqBjܺ!UuW=/¸3FXiv}>0ĝz@Bq 11!|ʫ܉ez;,vno(x o_?ǥktX9%aFf uV{zV0k,)Sh{{7+vx}*MpGOǤO75Wyu)c V݇VәGsé wؖPNwH!U9P9)7zo-Zq% Lr_*;w½UsӘ)53"o,(Š^՝p3(YJ+>BeĢY1Ydq9lZ9G@EruOۀ>$?jT(IӎJ, g bN[nO{YV3ٳFpβzOL1Eg˿&@/_Ҷv7]C8LHZ3.iwBOO)ku2/\kNk. 3TɤS0%u>,9x~€d$*"+Ig啬+ CnJZ҃w ]<;dYfʚ"Rw 8Ri`bJqa2|Wm_H*Hdý+o.ut'?h\\[aYMX=Q1)+$06>GBA⦯^Q}1۹Xg.&0?$kR fGQ[CcMSAxP x䱓,?a6,_;Hdp 3\-XANGW?ٟO=taUg6puU@@yXua/>ן1ނB-3@oHXkO[77ҝ8 \'1Ɛc%1c;Ȣy*5(W;dD HN$9%/`׸{3̝.Mbj= #jk+ִ>S$X6CQD ?)O._ݬn&);Yvd EkDJNHurm\?`Q_v:#h?1*j+|ظ?7{gINEGn!9vW@xЮaUaAB13νRsxHgHb3 kxkUJg4LT`a {V~]2bd&c0d(2||\ٖើ+ˈO*ФxQ,HQx҂jeHOq%ѳRݯߔQg_?7D"@RnN@LĂD(o69Fĩi4zp¥ HfO>Ï&M&f2nu/mv:P1"" DؚrV\903i+"7v냙4uK: 3g[gF3$Δbz_wZ@e+GuOnNɛ%pm4"cD>ͭ)K4_,Z֚վ*H5f[O/<,[܂=uָЗR&c~IId9 uWdbe5S|c6b(uU}{$[&`= mglmqw87Pg0$'מ,V|}ӟV'2v L Q^%XyH:U@+j*v9 ˸ԩptڻ܄_?ÖEJFPW^68g՚OOHSBJ+g\|B&-yZ{YWDlxiύ~E/-Amϵ} 6fY5+".(Gx7x_?Rr?:I̓V< 5TɓZk <]+X7*rVN9=*Ne ے~bs?%D AD. wunTH>W3Ӷ\zMêL;$hV0]sK'W΍5ho~tqNJZvs\tqS4{;.9=6RE\xi_?su )=YbSC8YQQNgs{۞E?4 p%WraCnZW<)zȾ`PψNQsFo^`4`F8C\١ub]@,^}!뛈߿Yj.o8cM="C ;!|7d(C yO`E߅’y!bl= <|RS= !t5;W8:rZ(8j}"v _i0Lum1kZ9;|"bsN6)l%J#E/~>OJxeW#ijGQVn[`,+zqԄ̢`2{da޺*; 8=30lLsUsR:2Zg2D55O[c>G.Rtƛ?es6Nr[Et^pHHށ0A7+5*aY;džٛe*QV4 x3kQRꤧ4ljE_ d(#*9T\Ƣ2L@Y|=aY,ig C&_ ;J>ot'{&fQRC <#CӱM ;ÄwG=h|~r~>LcG5U%Wh?U>Zz Hk*YbS2ڄ ^M*(Y!jooAKPWvJG/t*HQ=KVc{_&d) \aO+iя _Ns9ViqF9|I7B`{ghbE/Y _T_M5kX|_?.Fk5]qȌ V2_!{{IL4ytf$ /JSg&y4^܍o?JZ`n bG̽a7(/.)):" R(qo{TOaօ#S;Td$DO{_Ț wK*5k8[; +W͉f~oo*\$f֘OyMf؟HC?\®ap;I1ߚLVO2_E-ꤒ.:HyB,ű.I 킝aC}Trt12'17.qpO.o+sڨ١8CE fxG-GҔonV~b_.R[$v8sLbd'$d>-AvS<2@wr-i|F{`gbPfY*~Xyb.e3Q_g) LE;DJ2?aM|}7F) qw9-YH H'R|Α0+'XMHqaedԶF$)fr8pY6E,.2F]% (ؚC/Y^UD;=zת@89L͚ؑV=ևs1pnuk3F5P:7d8@F &S.tI 0|եxCL(FvVNw2+Z ?~ mM.c}BQjp!Am~|OǸf6}8mfSIlnԿ:W@9}זPȱ+GJk:oh[*jW+-x'f-(z.3K,IȨ=MH"rsM~[TyvuWF|_AJ~.AFݺe㭋6U ML**4G,;q/\Fe$kz!R)2r/ טƀ:y><{bᘐ]0UB :+5'$9e'{fZSȇIBk[zTT-G0񄼖l 鵁x"֝J4 #ag1Gb]U{5S. z$cNClc]avQ j w:] 'Al8zBPFoc #[@ngQ@{ÃNav:Ρ`q~:: D0#l:jS-K.5|w %_wjnDty [;Ab-*} s)i$Ͷ~?12,ՄG G_Cm2iR̰&y5f,3Jo3\B|vZgi"E튗8=S6w> uˆKD'҆vYVYȆD2 T7aqܛNdⓓPoϑhXG5Wl}P)nAܳ3w {R}!_P*Gi/ oyƙ%$$7f pm~L>LYB ǫc<㊲|z&6"(=4wiE4˳E5;V.I~ѪʒK _R"U߃0 9hI.pU)^OB܂?弟Υߖ_eZ2֕%pvqwScD)-"T\ne8n|?'g9t}r$3+Pk+3E1Hsxgb笔;E6]=!D! ,B\pfhw^${̡8ZF}Rbu n'h];3oUToDg \6OB3t;*֙MayNYƔD;[`$!];lw8Rk:\p{KgU^KfL 3 Gj"^DͰN$"ꞅ}t^xn=ub:ѝ0\2fP i6=k#g/ޥvLUD_wra7vG31 /$/!Ӛ6A}gZ_y-0H,6MIteG|BHl0w{cF}߃ 8`;C2gD;6l~1+v5|ڠSZWTqEщKQpRD;A6{d4b!h9 tk6p/rRCT{XLl4zēq1~[`"_t bP.hǧw Dn0`8=U #_-5|o̲W䲻Zţ@׬l|4BDAP Nu@pHi.3bdjB"Ft .LSX`)L(A 5vzLk:H:9{=rK[d`MS4ฤ'GިUB/粁; #T_\{ꮠHl§qD+(nj=r7iɐ45kw-ّ7?ڹfnO?s-Zܪ[Ly|~ԗ2b>b{;<L@#f=YI9-8S:<1Q,i0O[7$bp.~ xNG Lx3 ęc,Ms@K''Z(GAƩE))'@+s̍̃|J Is R PSe8]򷌑񥌨?]i#16 }fGP@uJTm9Z1oUU~99YjY;o&5 -h8/?65>eZjfI‰S1apscTy$tr,$b'[[ӝWpL'8L{/?rطvEJ&ֲV9\d=o,[M=oMS/'%lPCN$HUN4LϾn|"o7+ %[㏅%fywssH$NrV 2Zh]Py{di8տx1`|&RYc?4+׭fGM@o9`b+`3(G|a̯KႱSnݙ:+E7|415%DM7 2,;t5_A3w3kƒ7?Wc0іSL^Nu }$Dۄ *^2^rj==_)KҟOGMkgtp؜ º8)x%6ҺЉ5_3=\k_f[9#uM!^,J'Wv79 *b~o\urmvxY 3Z3,ڤTUf03~ V>5[7ò)tE.-Lޛ3j+絖p@WmlibQjǦFrn̬i Lr )CЊ+Ƙ4g~pΫT'ls7&TZxjGbaaTõ $l&,GKqS?u*Z+]zp@X Pe{7 /${pG"hƅwd#mRg )ۗyE,8j_d*f),BPCocG$=2RPbpԭ^68E| 5VϘ?Z](!ZWBqi 鉸;lҸw^ć"bhq>@nQ ͞U)pz7ܪ# x,v 4w̓ys ?B ^~R|D`a2ᡫuΪg >qǾ-Z7Q 9Ӱ *RTG1V48\R3VY%Rb<ɱ{ ] cz <8YS9غb4P. ?ga"VwlrH7_vF,}Ol2*/p``?H=R;)IGy"9b}Iib&[gWvLygy9|~Zb-/5~.VT\4`Oj /.c9 H+ϗbJF"V/E Oj-"^d?X_vrZD}HЪl}B#v3x΁ <%屛Cu+uƶj ^c|[:b*e)VEmYlu"眢PJ3l|x'iB03&g ZTEm&۽@'?lb:ɝ_cKSԂOf5dH^ix h?#/.*_-4` 6u ku~ ]n^j{C/14E6/MX2=Adܛ B_ _F.h8v7ٽʙVQmLEh`HN SfgM yW !G{QdYOLFOo0Q%JX(2K̦ʝF .h,G]u>kz'fkltln]D!;,L# ~lFz N޲_BSMӵu_@\+ޏd= I6&7^̑/暎y(J48bEtn\ST`؅8ſzhhҚ@~ `guQv" @^AzQ8݃2Je"M秦{Ā8\:Ӷ181J,ۙEGY'B۪ GH2S'Oe`M*:*ljy8\-4X_x|q1xC;|D:QCGT`ܖ@^ۓFmP;.Yx]{zw8vm[=2Xgpu$Pvү*E;SCJ7jb{S_9ĝ{X SPnwřo|=3"He[MJ&6 =BG_ "r je.>u_; cTJ7)pwЛ%A*ƒ@~j|wKf ɪ#=$h ˖5\K$ kT6}F #G  ꥼ7 _" 7$ I׏hi!=Dad.ƵYp.@YwҨmD|u~|0rU]rZܗVfy,~csq@eaRħepV#7 ~Nsj +*Pإ@7*=Ì:ђfq?s{AH2m͍QFt,sܥvEs5=0~T]FU؋0!lj1!kΌ)ࣉXay#yC6E kO>Shxkn2/o!Cl#s,`l' Y q܋#}̚]m5թf?Xsݝ?'`sJv0 Rv܎# _AT|j'_=nTXSqOdxsJWYBE݆Cg@μ͜d1~'=Z"jvMMu|IsaMWgRpPGewugjv  AO kɻ sȶ)mwl#Tn@/óyD*}h)&a;P'cu2j2뗢BNG@ʁ(P&=oBF6X纐ɺBu&Li)L/'ޓ$[/٫P;{3@CVGW*sp%ˤzDڧ>J 7fpVHo8WX~6%QiL-;\jAs31ƭenEWH vBlhiEaI sd,cܓ2BJA2s|[6Jxx{R0 (v T9LC!Ws_XncCKS<)qY~\̟ [=H[MaBa77PGS+F?2kE\`/}I5S^k^5WϷ!44ro: ں+2B.R93eӯH}9(r0;:S5 ڜ̾+7P?FxS%pG"(:E&U:l"7uEQd/=0WK*O>sq0%P6@)͞h^Wmnɤ0nN&Ք"Ix/DqY۵A[5;b8SNt9J;v0t2MY4b*szu2^ yQ1+ <ۗ DEL (w]Ϟw`"<2q7M6S9uWej#k} m!}o "aHt#ʞӮblh僶U8GTODV95TKk1K #+q4&q{>Dd*됭 캃*0}HBd1 9xAsǗ9KMRuZ, YR,ݬaȩ?,ح=d]9G<~3"֠_+  ;(y߂qr, >0 YZsurvey/data/hospital.rda0000644000176200001440000000066714074415513015050 0ustar liggesusersJ@5YX 7WQ m iJ2࢈K@qтѝOН>8ɜ4RS9s:mJJMAI(E?RʔDɔ-m3g蜢3(>ww3B|ׁCFc`>Edn2zX~ Xf6054E/'&ۿa>{zoxx;qg\'a~[1}*Qp9X0\ .1mnh-qIjXid%~|ݕ b9df焕´4ob.Njw_;y]cBBE U.XbeVJ$TYP wjcw*#xԺGuxsurvey/data/nhanes.rda0000644000176200001440000016261414074415513014502 0ustar liggesusers7zXZi"6!XO])TW"nRʟF X#Q}0ʞ+HQ^4 Ph+Y22^Q,nzɪZg+P/yYʤaу(&C: VMÉsۥ6ޤJ !)ѱMr 6CM 09EPDuEO0o7 1n'f6si=娋xo{H+ {r_>'jqIrn(drcX+5:9Mg[E t 5-98VFWƗ 8A="fK ּM T9}h+㙰Qz7-ASn01*^o Aͱ iB kXg3n6klNtal͑Ju Zfktp X(/ ܥŎrT$s@D(&;'\ C{w+^)KKJs񧞿4 wRtRm66zk|<>BO~Vp@%-mle ywŬj_nSY@;9D3YdեԙZFixXV.jt>WKw(#^M%9?ŋ}j"ynl5DPyӥ p`5QL"QNPt8quiN]aNY`=~|a#64hȠK9(躏NuL>)jzsnN}ZIO_"9߾H|XMS3U-p;.Ͻ)0 k (ٝGP;p5CpE}ov7R25 ]©~x~ sXT!\6MgگT)7ybַ^,=8KR~ H/k0+LYmIZV;qvf|t8=ٻq3I='pf{3qv<˼ۮC[dv X' ꂏt9K1*?Uxy!W7q:Q`hc,QN5EZ6M4F(;=@=bUOmDz<5~ǙoHqr;I~SO,TdL͢7 5*q:" cNm}6JYzq@6f%,M#:m5JdyDByW P UD&Qf\bBle~rS_?dPt.Ն[e  b&'TsgWv%,ZxgR>߆?׀O/Bn{xڗ>zJ9 7+ॣqtQ5-vٍLӽr1d]:+rR{赩\B|2ꩽؑ\9%fȚWg`ln9LѢ;$! ƌ']뇛F-i.¿˃J.AJ5W]|IyBZ $p OdrL/2ro)A3%!SHVXԐ`i %ӓ&V Eux-Mذ-@oSpj&wT,P ?qI6N*Ε9#l)ky0K$qL0Tk2k霐܂DS:^=h=?*QӹrrI̍0++r!\2&D mCbDU*AUe~e\ [! һ]S*̛͍FX.V\H093x$ d 5zq6f68.枟@+0e(rѮWTӂ{/d2ETk字Uy-WZe@샤*M>fԓ7;FD_x!+W\=(1`3,PVV,0XP&j ȏb_!/#Q51  )$wR'G~.OqQkk26BXꀜT^nCf_ػkFݬR?bV'4rA'po0V/&~B؃j=|sngژJϥ9Xؔ$:]s@q>0:- ILKZHJkhD KDiFZP ΰѶ3 W(  F+'2$~q}D!g.~(Am+źFX<{m8>LQj/)[eC|6KڬJ4\8&rqbRJ`@17)PN2D*U9qGT(DŽ<7oWre9jkD<J2nMtZgb$1U7W0Q2C.AlIHd!n$S$p)J=- W ?" }6 bz]FSku푶_HƃXi^[#^ zJ![nZTU+xMNӏ"hrӭ1p0,VX6S~.C6uܥ+0A ُD7c,ۍ%hs'#9bʪU1cfj,+qXf rM6&c#cYr>?jJt1222>6ITR)Eڣ|ؿ~ʡDTDX2ւ>,fA) c+I'%d4PštQ(.:#Ssq RJGN*m iYq)+hCnmK5kw.ls؅B \3-H4+D (2ָ Fzxʋ2 MYO2oLk﮹%aO_7u jJ+{Y{^ g} sX)hﲶr%B / P/8.~hi\hO75s*Y)a !'RDLYpkNj-k/Y55Ss{#8HF51X(r:ϑ¦Xx,8cɐdT C_Ǚj䯭c8&=(B ǷeD.aQV!+ދ_zR hhj$q׿^ن̌"}e4s1^5j I*JĖϻhۣ,-U#/Rkyç9uKL1|`xq؃ܜ]nME#[wY/83/Z31;17I(qa'L2H@LE4}# H6o `VnDIgN* 7'd@:|2}$"Wc7Nxs 9b&2@ki(2x[Ky}DhL(-M||Pe Hɾ_G^Q cq)]qnwP1Q%ĥ.rݠ2#"&k 3K 0.EPo;^$ʺCB2"tFi*}0IUxq UzJ) I,ާ(<:j=Yc_4)<+ʖ.Th厒zOUYe yQg9G R=9i zFOcatLx(: 6$z>6((I % %>as*5=:'Cȝu/j*7.4EBptoB! |)H/,Y4Y`p+8ט)Ğ8#Jk1}#M0W2pZy߮ 3D49ipD>$f==nQ6B_< 4P/EoAd&!DW>ks݅5v塛?a >erBp{}yFvÛ" 󭷶SE-xdoUs[-Sǻx﵏+&%CLF{ MvS^[` &iu:i\o P̺CssOk!FANr$bvwV$  J)"O-çlb ;)^@nN-< "rG>"g<@'+mx @ ê"Mi7 Z$WX{-ieT ;8!Z g{w}Cr).da= {{w-Ϋ3vVo(nd݃m%' OEQ];ٰA$)ЧI[쳸=3:/Qt" A p{Z&zcj˙;}Z;{XbXr0ѹ=.*$}x.8Ƒn&xcKf5}Z# ~-.[0qE'j@~0_'cGpV9:Ւvvk\Sc?^ʶZgu7w CR*V!J_g;K,X\Ϻ?uEx>H|NOC؝Q%j\>CڞKpGسhHΥw1A<ayu!:3)Wܯ0Dxjl<ݱH#>ũۇƒ|BLijvBQP18v+L7a@?ܠccl$~-LzJDb_5tG:ZWB2B[98H1ȶfEߓwCw}oHA7oepkJ(<՛kDOV;9>˵l 1v,aFu3L[2KӐVE9@HgP e9DGȺ~h mӇC=8`iZ ;7fXAFx$8I\'=/,^u:]4zkHPנʄg. 'Aŗ*-SӢ, >E'<'Y +j#Fy)*Qs$h*kFqqRa]%J u-&9?Ĺqc H0ؗ 3 }3BkdD]7뱑"EsIJo&?DYc,@ǣoU̯~j 4;uTyW5BS(^I,N 7-:^4jY,gItoeOsִ7)r:K=&ey3fg g/v 6aGjr_ZC{HOF_q|٪_tzUa6H-.)iS$([r^y`+ż;9b J۫OS'T!,(g=hy{*>Bckd%U˽M3dʻ>TM|gH:{&ڇmlcʍ(m4F7 8?mWC 1ЗJ%{AAӵzмR!<he:džR#~}:1>+ @!w"~N*̘GLB@wtXqv<̒Y_b*NLmTnQ>눅ܔu2C/6L[O1Y1Ǫ"R1]NøʻȒ?|}9) Mfs|.@ō)C \&?GGwǖ^\P 30jw+Bg\fܓG=ZX*~E'\'K"Їr90dus,֑&eX(kBM6U,-y4,˸*4+.Ԣ'sI[; y7>UU N&D/:Z|H/:gX0f`f[JFE_/BU/MAOp$Fǫט@8lpj6[&a.$1;G] RLchP-*aa'P t{$^' 1pplZʶtR* 5U/Tu"w(Q}>ٗ*Q9c=8 {'͚?hp>g'r'xvf*nVVz6$=r{ȂF&ήЇxN`< %z;Ҏo^@ y*`"yhb>#WtoԆv/o %A+NQU~rB^).|V7\ 3ȴdZ9zuZ9 kl!8ϓӫR^ѮH 4D{~*XAN!:YZ@#8&_S`CZ :.+&`z$Y baZ,)0RѦA4 VLȡq^̶@ab Ӭr'sv#UUDcYwAEJz0h=23C=˕M 1&zL"/ĕu Vf(;]2HlAN*_vgBQa8Ed>#aR8ŗW%')9#9Y(J2W1AЛiBg`'ք2pCPua<Ǯ8#~8|CقZ?q t0DJl<c@,P'kbGqxDV s:J'ΤUctP89K8 F5wxr"30>zu%gvۗ'?BlR((/ʊ3q&'a k;oE8~ƿ FWIERltZHO8Cb|C<id(џٟY;#6%fEĖIf|kP 'BKEHDhӐҳB<088Y&pp]}ɪ: lIy!YĢӂÚ҉̷'ۼN#|eMn>2_~|w!<P=2{IlRjC<,9'r=ALepU.I2tFM) ]6OBOTz,Y؛66*kH9/mZG]WamRltR_t2l59i{_WoXɢ9I{;EȤ%Ψ<0˨%EQwrRjS%!-kd)u[yб>C|x_ WkΡȭg虄h3 WgQ"_<BzK[ۥ\ڳa{%4ƆVVq5&SIwj{ČGo?s+Dg ;/c3PK `N< U26OQw4ĭ~,9b2ȁxMRN/!>WEsы@l2דx6K8+SHYnmljM>ZaȌ¿@5<ުw-yg miX$!77o=,*{E븄 nؾZ>jE FfQ"Xd%1C:wK^ M+}yi?Օ+OA4 zWoG#WcBqs#8?lұLο ۋՐk/ڏ/lHOH0nˇfaf F90`z~6DV5Ob# | fN?I1dveUJ0 Y_mwE/Syj#7$vzwhNiSE,\}Dy>o</j[᥶W1q Yu Yz%" aqI ̻^ 0n0A pr9k O7<+Ԉn0U8 *lȽ9F|9?k%6Fm`U{!ͅo•\{;_1J%'%XP+;δQD, 2x k(ii,V$s!\@(tCRrQ< Q|XLږ۸8-pu]5Us BX才vvs\*dIg=db)|;]}B N|un=c :{_+Rqnmb=4=OS$pYܭԐ2i}* h~үf,.-;Z hBCgx%?<|r`x^ys 1Sڞ %jcUM}| VMK܇xϺvH,LttL%oxea!Zg S3!v>q4`ՠ/ZIaHqlB Ϡ:yr0#SΌ`qlGQ,p_iYKIE'z>X̄]uT|=j!$CĽY8[sFzZ/?R`:lm8UxgA:?y<LO h2Sv;\k o?fhE^;@OԖ}}a;Q!)7`F2 b*jKr˹GĈ)׼>C=Tv0= .L:3ahf[@_adH[~̩`> [fJ{/LVN*$up+V1{h MN0MbZ"= c(k5y" Z°NY7\ݣU/ʘkVא\ݓ92x4 M4nΈ 8;1D}R6xG.b])ؔ*S] hNBHCx"v{ /x4 teiyѝ4eӒKTNeV4H CgFn6Km{ah) E*h]Z9Qԫxd H>f82uVZ؟ҟuG_ˮέo'OjvWwV҉Z_|Iɔ;6[ 6X\ }+7\)d\%34,Ac@IZ9 L8Y9LЩ+c+wp$n.+q <0aSfNSBKnKTwDB]Mc9& ;6X7f <کG|G\gx=/;َ+A4BGjR$F\kW:MqK~ hTHzxَ%M*қ+~=7_-G׃>ҝ+@enxiG:eSY5#zR0~p^f(jG62|}[l cO+^R-{{Zana CS 1c*-ro Zf~=I|ƚF:W^bR8h*B25r w(}a/w҅ys бO$[ )ެD8<ܷp+PM(#KL[)U"4|/17ψ2ylGv9 f(WTpBؔ8f'Ϋ%BE0bE#~\5a %,{bD ]IW0)li( |p VJU&(oH'n˟v%Mۆ5T%5A$OrY2NTdU K*hDD0ubj#O^Ġ$Fw]|5["Pvh[K/bx\i6 )ۉ\.e9#3w Y+cj+ͺ zq;B N3(/91UItL<KƐ};' fvyr޺W0cjfx B} kDNc+$T,>dY##a`JD8 kN{0غ , AzO5 0Q5zQ "r7:a~\(~ u}H~7fU~!tud1WW,#cCeɓ} Oް e=*&ÄZO61jqO_8Aoaʇ 0#41 ;x9mu DV^;b枌gS+ĻZڮUU\k6:IgQ-=P*^qgI!ߋ@H&Ml?\g,}]ReMBa1AmpD#MHΌ !ڂEnܜȺtDZoS6M2VP\E@ RrGZ]pēQ͂nX\ -+hlk]-e,mʱ]ꅵ&LRBl8Lȫ`W-ubXŹ,{<8 5}̈́ֆPݞ))İyi̕ix#']QzVœc3{QMص}L7T8|=v!-rcxC0WR5r6Dt֋yUO yk+rn(g~EKk*\ EjNK~ Y"$CeEqSۍ%Za@=}f`6tQW/acJ'u|@4⑽d-Lҡ @pyZq3b *0Uwr{`TwwmiU<$c͠P*q4NʆvՎ&VǡS-QUToONdu`l1-;D@L QizPlBQM)û|u]kv<`3` ~##/Dk|UF'"ڀ@w@Ͼ $Tݝ,]S@މ\n!y zzFN\ǃ=ټA|WĨCs*>h-ꎣz{hл}nxzל3 9]d.*y-*: uX3K&`=@0{$w[ mP]a`MMm`syjÅt8m{ز1䚐>=@mάC>Ws+:EصUB3=ԥ#߬t\Mυ@)Ă:Mc}fKDd'4c<[H= RD4)37*Ƙ S b>(:|8Lw'н͐ř(? W.wr72^Q)x&ġ ;QPdL9,W0JU6 ?k)w^sCH/DrkEiz` #jhdTY ?U??6:J5* &Ȍ8(K>JksߌiQO]2Z?[Ztdd9v ϸ3 ?U6tOCy5SRU9wBړUR]&4-j/:&!fzHڐYg6(&:vu]:I})?ij!@Mh[o_K-Lǔ{bz?V _#w2pg glؠ$ԸPi'njlsMxŎq$̘9rC_Ka^ Y$VXvcC9 I4;w.zS!3╻ӥFfp6L&l!&G+y0£#5Hji(!I#"Wf˜!# JC7VZ1x={SnoN ^p/Vly] !qmxKp>@0[\BlK˓M ɮ!wM+5 "ۆAHr:0K/ [Q($QWx.L k3 =j:I-̊eۅ3/%/ K42I.(n,Ҕy7IoVib4DlqRU̡ = M(vqW jh`FkpfSI4&XDžtf#PZW:i*&Ny~.-TJ/GFGnt>24h頣y|ulx'$m~Υ<pcT 2&;5 bkTY3#L" |d?ØZcFsGʚV3gߛ[dliv=\rxћzv0Qc6lwfҼ>jJOǨD &6NhY)O[9[+ߒڳ_ ;̖diOsU"D_a{c!<MCB)l<(A"saWOV73RK6u [$1q$!v¸Ϲ\Ogb">]sɾ3w/=m(n&'Wg ITO1ް:ʤ#Rze=ݝ`$8/LQ;h//A J5[tlԙ3f9@>׫+/:󢜪H :aù*c>sPU:7a,1GPZm1j38EԂ_3&FNq `znژ|l,c(3=qy+*c4EQ Mfj2ǰ{o2}z_F N֧WR)Xѿ' 6!ZUSu%[BA/)juHY">Y|P/2Ot_śx}{uF[42 edcm_XT&oeVگ&A7-+zoRm0\r]ܓ׊hr\Fx2;Gc\_RS5[$M{"ƆT\ ]ҢQw-p3G_뽁.硗qB< f WkS+kXpaU愐â6" tvjctt?Op;4WO |vUٜ{Xz&-EPB˸]5qro'}ZWif:OGvXha{ve+\DZø40ͼ>#$ 8 ury{+d&60|} 5mBt2:WuWXK]1^uP'&msոо6Ꜩօ.k.fP\ PiTJR* "Er@Dd4ᣚfݓ ;9Ls=4S4Lgb j5˯8CNh6Up{6$̮$+5%ig<$dw^X$I43m=0Ƅ\-[n9+;G`W晗}E[d}EtQMGT<)>)O^ڢ.. .paocJGGIfY^cL8n*޼XO^s.U]_YY$iNI#:K+NهP~HP*h8|7e e,ѱX]c/(==$x#PWSI$ԁ)0&~Bw"/|nbѹ [#l:.?CFJQUiU{O[|PJ ^.IFuf鏕A~,P;U6tӲgUT1#6U{q=|LVSgf10ާ{";&LG3v~sPLk{ub̓:{&^pхͣ?׻;6bM{'֑zI'BK`*s#+tns1>(MYK&{+.;h|Fp i_Yny8ϛtf Wۏ#_`+W_Q\6 :fqyj"gZO _Jwi)6"j>w/D2N^Ț_5E&?OG:Ci;~^51B@5QO55xGfFqYXr􆪯ϐcCtd`)0}U9c4q F8\BZ(8Wd =li̢wuY4WT K`o!xAXA&">{i+c.6)c.Ёd_4*R8oCB}!֦RU;NA%J^) _[A*rg4~O˹ϥ*7E6,&g'PDLMT,z2mZfjZ/i?"*<ڋԕ8Z p9Mv߳>౼fnl1ĕ#5G{ ZC&1ŵ#H^Ulʥ~6s6[u#;,GH|NI Vs6F&@}R{=ւU uU?#]I7{rbXfH9 Ƥ!o@Gw3K„r~ 3 a6J#> .䓩jLݖB۩K}@zE4~:}gEXPޣ0H1%x\mT|Nf1۰mGZy']w!x{f~O%ci4){A1,_f^箍')>pϻ%=}m*Pv!g=d^pv\.#AA<3#0z{/ءaQ!^@Mo~ň_أ',O([lCMP2!dW7l:>^r- ,|mQΊ6^GQ&W#Vn+DN~ x]U(Ԅ,},&e iru#Z|.d㊎ n/ȫٱ՘P|w5ԉ%-[ցVSRNj{ IJT>mfOAM]e@4_#LږCؚ\~-4Q7ݐ57z&Gfz)]9Tc7f#A.b|Ppލۢ@LǃtZ>J"!<^QiZr Ӕa^IxFeo]f*If\xEC1:A0^"_Kv%@5D(#AZv\g>=Ϧ`Q<D*@jpN3b! vj=fj^JRLLL$?\UpIT1/IFj/Juϓ TXRTTc3'%S;gm75]z(Uꭝ_~5WfJ䷸br [B/CX%p+'^?'mNYZgNٖL3oz|I'&[PaG]"bgtp#ΙKeEa[GUZ~K(77ӌ_/b9V**s<"RvV =d;._rEQKAs֮i"G)OJegb*3#?/t8m0ؤQ?x48aถ2lX*q-%Sݨ3CeC#kxQ]*h\Ēex#cDV/ZNR\w+5k7nv{I@ a4)3HRR?V[V`G`6a.Ɂ4-螹M3nzٛu|HvAϴLfg0uԊ>D֠RpG<#FN1iᡚp0C=^\ v9sU}^yM*IlAkߌh);):uX=,Juz99 i F{.¡5a96F۶7g٫@ ^QpAfƇX!nYBIZ> &~cztp88PY>EoCR TSY(kakFj3 #qO :q>Ē}>&pı.>T*i bL@Uߓf5CpBPAfC`r x". V.(IN8x/ֲ $t~l 'k:govH\CVif=cZGjsV ;<^avB;3oplVC`)EPR2P#&yڦ ˛aNricA$&-.+֕wH,f4~H@g/{i%DP6A9R>Gs#.AИ~.iB4iTA]e%pd_Ajzn}.7PRgsV <֕wdÌsv{O{'Vm UaH -+} E̮5{=?8 kP(Ve&n߷.Mkv GE'Y9<eZanR%2'-Hb4L'mrڮpnC=̾%3ųQ 3R\1B;1shґP!% b.x!v49c,$˗GE2Ej+Rc^|(YC/mGYĶ)oeD<&ՈbKEdw&aQY;'a[[ȧb2I$ļdD8萅ߘ\PIS6R ǙSmqD/C|X̝[7m]V}ף+xm=#q+2]v2ƹY@Css< aWeݖιZ"|THn0fI`ĊX iWK%b}HU(҅-_czd4MTRskD~^SU4H:E{,G~3qE .D$=%T6_?P9@ft{ ʀhU=-,ݬщHbvx0:/ܱ_b5(x,n2@8v Ì=vLl! [&NR~W,Rċ$F@}#?r %ABM@a*2m:OyPތNq YΩseU;`/F."Q=SE!@O  yќ8ޓeA1+'3F/q{3w Dݒ (7#<}Z;$}̞]J lm]eȞRi1sC=;Jޑ9%!aOD5S nP*aㅧ8-P>[Ip*qmU$$"oބHsV ̳\oŸT!F;S;!i^PyϾU\dcVx{景{pQ 0SdpCg}%  " GФ&g*vJTVBL("Z{-dPײLo|0k>T^ӳz HxNJb3xSs[{^>UɹrXĦV(9k`\2KMis@iMF˝%JQiϦqrW_9jzC=%䟿~Ӈ1dՀ I =˟.~Պ8dH&b;m.)a^L'Hӟ٪뵤mf{؈q=iݳfpY:w?U4a_^?3\c`qTHL3'@TgDz?3̓͌$HIy;SpIH:rW^L^/ljLZ`x|û 8_Q[㙇t}'5$$ѶMMQ𗭝= 6z]mqɎQ!&'U Ccv3)iH|VQep5o5QXF{>ZZoVLI=$+#??g'¥k{TT-U">^{@+̛O&M5(G?t2 V,zOb@BA'DL8o%Apte :gOYI *$!Ddwb5YcFGF0{՞@zkマ\#FWl-@B1l*Sުj J/k6'/UQZ[d|Q'ê*PȲVfd7nc`,>VHzZtϖ4+tb1{MCCv M_T rPM11Q XSbE!~;g{="OP=LYZ"q[6+櫄kpE W'jQ= A_P@5nԓL$$5*pgI(3H+^V=+n3y1AyIeӷ6AFVʰ/?OV6b@]~ L9mM!Qϔ.AWrw^Lk!W~ZzV GV?rxwEnJsm){4jm!e&/ޅG@fiV>A\鱫Ic'G[JTLl@ 'EV[4?)Yw"jOמ%]Dhި]hd)Yhy3/G7_Ie٨>})]ooN[n?E0[<ýc%Ʀ lm=a_G(XBȕ22)Z\N?=޻V-.zMH5܂QU/.F+U%r՞ DJy{~f2ݣw @yB㡂ezMyN]2X#F^MIFUYiPez˜"mŒ=A5qL+*h,Pz@bJW6@'ƚR<5nQC'wB ~{ʥQ Z1֒U/ â\O/p|ocG"=3@KZGU&@Ⱥ?\NO^Q RKohDu? Q0F>iŠkS]X;-zNdmFǗIV5Eoj'L۶S$Ufz_njxͣ_d8~hpA ԃ{NB05[Hz (+bӱKݡA M 'SY8fkjiHHCquz^k`9^w(/9: jʻrhQF:I68R^a۪' Yvہ=+wʏuY)a>*F_m#nelWM0Lݑ;.l5,J4MX6H_y.:*isVolEȹ?4 m;v#]I`Vc*8 +fݚMR|CX &;ȃh.#|8 ̹Q8z2tXoF#"$t;E#-U) ; ;ţ_ \S$Lιftu33/koy1.'ΧPyv9ǁj:2+IU ϰCLiI].DpmлmR#cΖfZ$Lr3G7;L~W9tUlSb|m4zz TE)Z*"̔S*zYє:n~L-Pr{苲먼ZVu*QIHv23ƍvH^O/4 –oWQ3#g%fX- 銋c+CKmZvjGtk8.M]*{Pk[wZ,nxwjn\+A Z1ARYkXz? &A@Y51Ju]_C<1g=c--IKr 󹉠;FT;ENƹ^$5} ᓟu[3JUcQ yaMd3(? ?|7.I~n -"WCRck7ǧ0_J=c r2Ra\ 6+kKGkDe|-hLjr?ϚP ZHc}рy6A߄&~Ac/ Usv@i+#Ix5;Q}M߼a}E-,a渱4L{Z< U={+򶇣 ?_̄4vLZ$; h<$Nf\YYpcnՏS1 n_EWq8s|W `=ullX s&^DEb?3u=;>nF݌6O  hPr: Ġxd~DtPTf'E\],}0R.E3 l~L!B^@ IcN#9 ,܋,':@e5>O 9Y5vm@Yr"xEvF#''y&}41SjO$i&) 6F<ɷy0>˪C2yɕsHzCo+U_B-!gpZE2&u_,}FǼˈ'㭑Jۥ&nm 3%eoS@ !qMgaesŎ!ÿϜt| Jʺˀ؂GERxchYwQpO!ݦ"x~m4&1qM@! vAFdS֫uO<"6ԙ]HJ܂+9zs1< J~eXC:hWdYdO)S(M)/w y+Xal&jKGOÌ UI, Gǭ'o,=)/ g_O,P }\~MKE+LBuBVڞ}J-O7oT2!5b& 4 2V]! Qvr J>P@8T.ЖBB̦٭2jS7"hRJp9_6;\I) #@T@Q6,{`.f4:JQfpSFx&+ڟ{.٤dxNSEMp1 OQɚW<6e\|o! quFN,ʷ7nѫ^y6a5YZɰ2̧HTB1 kgCk᎜c<̚p* n;1EFjKv~G14_6g|*<PbZ 6з/X $_Tӧ ͐<)F~"rIx;~ p>yKt0I2 z*<ȂkZAn\ 06^( bIoJI>]/oSMEs-n@Gsm|zB4E;Ϣrӽ CTAۃ2l"~z҄Oz^@Z*!BX;f-]:]qʓ 7)e9z]"$C3I(.,V؏:Rj.ͷF!g`m~z~D=JihT&$\󔜪&Ю!aŜyQw?3tV ;޶_[@ˏLh؈_(RP#ׅ6?J_Ho$P΂uoo]8_>>n }E[H+"Z ȃv0U^@g*䋿O5ܿf__ |ų%0a h!7\ *iߍ TةSFNz%8~`kI T\3ذI2ebQa.J݌hџNڬtE(i@KD^xb(x!?;A__FшOHͱWj8jee:T%Kn7 [n]tdXtw)js-`@UH W@@IȂISpF{*ݚ" irŗ6OM2d;NjP(IE> ֲ?v8_ ~I??1RfKlk|bHe~]x 7(IzI6#r?paaXv. p㤛jOIe 3jc4AmRkb|FA['\`v@/BoL\X'>mŗ2vJnrz2ΛPft_ U%.><@(R%R{$sYjn>/y ԗpLt/)43a'vûn #ӐYyL Ag)S 2V\ zûa]Iޒod $k0'G[r{X uVV P$R¤_EQ]k&[0ΕSg1EWp;<5=s7l?nd$ITNj`٦N(;B{rRX*#DDA%$=v({ WPj[WBxЩФ(),KT3 j`]]UQ"9gk3E^yd9#R{]<}$DΫ{MKk7]1г>4ɴ?0 ]M{j1 aD :ȩ6-}7|be{6HQm٦?"W|ǖdM,4-gɧYo/ygd.oRcEu}+vNJ>gd[k-kZsbr// gLjy(otjW2R'\[y3~VĖj뛅iJ!=]IkMfՈ&_2~1|JD[+[9Qz:_݃p=ylg6Jf~}Lv-U#~9&-_M՗WH`khWͼdfDx5>ԌbY cg/kUa˘T+ MyOIƹrmGʡn+**'"}\84 |­JQ ? 4Vms4A^ oup¹&Hx\-5'zGFo2)s5+ rZfP4v]+Jlq-7MJܦ pGqهĭ9? PYeoW Yw]ee7K l47sw^xݯ5連#ldcτ.D˝AK#@(x]5^?-+i10a\p}^I. +'M7%vE8)_砖J?FYܐFQrknM%*<* (|p#wS{9#së2+b!wfdk9[ nw 󔃁 "։BnQRD%wy6qȶ]|$ebVҔ0əfhX=s]S7z}ҚlfDYyokВ1+eoT:Sg7YF`wfSqjO.<,;6*]hL~J7. 7?+Ֆ"m1Tb5jk@!ZL$B,M@@O.3ޱ5P?*y7ەoXd7fp8kb <)^`:+[gZA^9wjaҮN4>,iE@aSfȈ 2qHÝRIzF oEa$Qfi]R AE(UӗhÊ|~-F=,g":;RjEl}@a҈ MjRboi5)Cte[av9ت[{uCRM< m x܁G&JA֚q&S[Ӄ8q[;ٻV:T\jF6XhOsu2@hNBy,omBd՜mɊ:}{M5ru^OKԪq>u{Y@`;BM: ղVM#4 '5{dAsŷB,RQDZEE;3T *(WR>`h& GdU??@-AmNT< s<`f}2P'~2۹!QIaf!gE2g ?76 'OYU&{nxk6d:_˫y6kﳂ&jU @[s*VnQsgdgO+$WL>>a2Q1>9t&CHJ!6W n$cf1:)[+ "(E0/Ieو7cIMb߲?=b2!Mto̷C`:҂'h$`Bek3, r[Ki^SкkJ 4OϴaboV]\dvht\*iRe:rDՎ8KQ'ef~j{b.#ĖCSIz/4[+++B>_FrL&s׻ʧuL!!'h /.X|YR:奝8eb3JާuUHn2㺛5:6im+*|&DWx%|cwlyi$h{, s p_cNYHR>IX0ѤR_aěeZV 0dx;)ha.%0lBAo}FN\4 Kz_%OպXy|@][VC3:FQbgEw8^uM@13XuȨd6GoėT|m{v:m U>ܽ1h/fdJ)/ڽGoV*"mZT+ nT%9;X K}ڱMr 8Zk#~0Їt1!"zY?%ǝ#pACԣ+^䱢CG `椂W#0E7Q؜MFWd~Ϳ+S>t,/?TQ'x&C 莟.|IP RRTVR} )f/)Qg㖛{#6{=~m{L9^K<bA2=Sc1j-S&7àVˍ^΂B96LO˽K\TqZ% E][lAҬ1)Gc. 44;G5Ɖ\2oJא[A;ntt.$;݅dSˢ/ zJ܆#tQ+Q\ݐS%7ڵW vϮ2zA*)8F&##JA:.ԂfBLfq_.}t1g+?W[+)1Lq{)?Qm5)d +ar|o_0`)m'W-01F967<0oSpG3tx#} K,GZ:-9M?C>;̞;olb!PBp[wRm1°I.,BWaWи¶cG!^;-Cvr,VԈ'<\X%?k W/H<OOx j ݌?,0:)cH6x!ž-Ty$v!n-HKg1ꮣZEt!GC.칵LeMKT\=dҫpDh GA]0$pٻzLK_m+!JNZ`f} m8,L`EE|)OF]V%;~ Q5ydIk6t%ް9c4ǹ_H̷R?C!7^P{ϭv a1W C'(0;il`_9NmhˆDY^[v{q0XQ7Mw(ɔl QV5'm n.)<߱pB?o*JAs%LFH*vfRJLE}JWuwju\ښ4x/YJ0Y/4 !H էZ(A˶%GlkqRhHPs'+h8<_GNRa9AKBfp| By7V:D}#gpIHZIw ߻HPhcn25֤Â?t^fFeunaH&0*D! SN _A'~XEʱtT(\}XvAcDxgmr:lt\H-o>lol\ރR]ŽrKqJf0JU҉ FS|q5$F(K0PJiJ=:_Ek;mӻ]{VpXTp]֬u,A lzHm;ӲM\HpOg[ St1 \ .ijhaP'1_?O#6>Gs-A*#< Z@C ;5h/pCl.f;ߗ0< t=.YX%3`am銻`Hk!`w+^B 'jy;e4pL˶1x@ɓ~Mav'h(?%\Œ-DQ18H'FÎͮ/EEb W-w^zN'x7s:ImAžj&S/t5b͂:'"Mp~C)a'$ pq<6MSu6c71=x} *!Jx7UG_]1r9 oJ-QXyL~;_Nx]iY]SDzr^`=]V-؝&Uz%`V,*?TZ`żd!*—%'Vw&`5?E+K tdQ .g}JvW J[@+sfcQ#PQE;+<İ&N,eTw"3$}8*w(PzcZz]kLx>: LuvjUn4/yUU9;ȷAȘ\XʃP|-Yw6jww4?GIߏXR]QKrB?C3``VDFH 8/7vR|U {D?qn 21l 6@|ߒzyJ{R&L ҼțV\\k,=Wsc"iͱwLہ[z.w9@~] N[&ċ?]g.LKdU};LVdoéLsc!Fv/iJ %.]X,_L0THј~Y 4g'sua1h w,N)}Z\9*pc ݂ %| xP7:/\($+b}x}i`f"N 3 x`D~^03g<g7tgu:^-sc Ss_JGSgq4iGT[#BUCR7O\rӦko!ĝ"0# wdj@&^a˧JL 9(`oQq+0yǷD~Cn0v)e8M1>N8z\T7,WbQ_o<>t;M|&( d_%vG-٬:d2GDkCA.eyҠnq924ִ`EWG bz!<>%=|C15{OZ)αwAڋY5i2ݽ7:UJXK2Z֙I o> >穫!vMfz.Oמ9c[!Hr S.]sjcexY$%'=IFv]s-mL;q5i}\ [SZxg .u.nrmANo桝Å^iŸ9Hr%754`-:AՉW1J\<<*Qќ3A_+_U\S+ *iwϺ&{,e"8^hk4IEA)HE)NR614 VVkt!Ԧ,Ys\@ɮb=Sy*6#9Vs=w1I8!$ߺ"vc;Xg]umViVτY9V0&~|'|YW_`$6V4ʻ6릎y}=ڟ.Ms>^. 4L2 7[1 K姩TRď! -YڷX/Rϴ;3|bo`q"~69-`߻ E|23tb,:(YXNBLL匚ڄ.IEcg\đyCGB'<ܬw"gzfMj oA/Mt,ؓBoY TiB[Nt_8]e⇍e| 4gC'ZΧrm(SF}6`_?eCVx>! y˃QT`舘L@9plr>>za⎲_m\u}q{s%*E_l,;{G2YvωLC Ʉ,Tߍ ||B-J Ξ- Bѧtk2x\աr](VES`) hA$%dmtΓ}e~ l`Mi$+W+б[ا#tȝgӯ;7f9z^,hdQ]#GΝXLjp*R҂$JNC7c R`Z(ZQn\%PϖCRFmz-| # ;q9 E'~6DuZQT6>emh:_dUi,QRdF]p6۵%qx/1gB- 8rUBB-J,9S)اC"jg y d8Cqo]maVV!9 4pq.4S1gB8g:+ʹQ3) .AsJK;w.fs$ T 3 i;EsLy0y YPt$;?64eV͵ƣ|UXn&6,eYiwnËcr/t_)`' \ YOiT G!8sO+QLI`~C6!^ ѐk"-J>wK-eiwn\R9Wl`_Ǒ e3.Q֢1?[{Om:F;jO[jtvmmg%{wIcblY tF75(;"?pq<mq$=i /znD#HK7<9j#SX#_*TEW9)DqQ"yD F-w?3;ًś f}[Ýh[4$•\PE\IVՋzC=pE8j'[da %gjb@#a&3OZVTO ٬SLSIfB|^ *FZ1\rs#S}9U*)j[9 gmU`hy&Ivľ'}0"H0P [k9TXVx4QОS/.WHmik#P <]R%;GAEQ\7xa+Z] pDjcd-{fȗ+tJ2E*EU6Ep Gp{rkz<2k$۲` M 'e#Jg,(F0"Ӈ;MbącBǩ<CtoH&'8|zУ0O v`({C|l ΢2k1nXʶ$AՎ3ap9`>9xzv5u;̼vq p zμR.n]Y}{j-;k5kpU;~4<&O -5IP3c' άҍޟvgZ*V֖ (.g\48jCz& o Pƥ~o6^pFfSqoj kK_q \:QRpFs>9Vf6L_3n۰sA^hYC$;ӛۍ 9"u4\Ppϖ}>R/#x(Co#6]8m.V^P/j*joBdO>=&5 řRbڽrt3v52h`&ypH!֨x9UN=OJ04#-9mq߃\$~hw toM|ɐeSيq?N3Ρ794N5Łs}Ql7zc\6j)FrFcPZKL 0C!a&ٓk|ܷkw]m˗R.Z~`>$[TZAu0ܙ0|tNhAvkOZ|~?0E:ҁ){}=فǥqMwŞW Ix˺ޠk~ċڥG$&c;ʷ g4+V>(~ .dܯM#ܣ^3̍S(pd͛tZɜn2,r֩@?peȔ"ĘrxownXwGdEJ܅mgzt~g[BiJ#>l_*O1)!kq_~̈;*n,IuYB #>pL, V /Ȧ51f8vZ,Trq'.?GvL=p3< *:"l߲N!%$ ӑ8 .;3WY{'rrg'tL &H }W n@U XclRWFq_*~.NP,߿CrKD_'H(֊@oܕ"uRO)Nuuc9ڟĥR;D{YaSȬ|HycX @  x*u Dj=SH2̑(TH 2YP%x=/ m:p x*lիN0(I٥Hya'8 G*rw2G7S(tw@"&ƑJ휝:+КYx JӛE穀`nQOyxS}XчG:VWo=\']uE &b.*j5arFoM7UJ5 WR6Y|3;2e.QLEܷILxNLĕ]2Vxg1䌇/>DtdXIjPJ+qf3{梗"VŸfen# X ʂp 1>PP6I&4R'2>s7d][P;wD8 oA1zyNi UđOnmU;/$`Ku 배nNd-M*TC(* Zu:oe̥fIvR3~qyvj/HÈɱ2M.l;dxP 6<.d?UɘsλBx =Vdѭ۫?XthK")l)oT44oX'aT; 5xK<; C:I5A^ ePD:葋X\QNRt팕gY8xpTŸNKW8Xʸ!q8CW*GH)L|N,Cy+z,ss1עCg<\WcgFHN^YXJowÛb5ՈҦP(-QM?U?J1p/Pj ec4\GX7ΫDfj-a#E*1D#Hw\EI<~եbqfz Vc$&tw++!n- pPAu-;#DZ F ui\T- GG2펆'Hc&jU> g1T%C_E9$ E7lƭ:P8F:{6Pg+S*G3$& r x4z&lQn^HK"ٍ鲻ϟ3s*W`lK̘,]tj_'TN8Xnq@x"+pew%`]Y]Lv~Zez3nzuYǘGS} ތib,DZ=?1@ft9t # K^m:h rݢO> !J*-7Wz%d{|BfqsGIԈ`}DXc;quqx~qXDoyoYS7U6ȾO:\5 Qs_e@ MHOdk 7d+d ~6v,3zbלUd\:K?O^ NDDC Ҳ]Ed̨,gdsZTxD/jLjY#jmج%԰h L-[ɭz׷+^eq 1~eLF&ep\ k6gAD1HLsΦhRgiiU ^\wû$S|khto?g0̘~uAөحJT,B^:~`ELY,ywh8hDٰe"I4TEkIh&~Q+8X)ktq_ W.}y󇛪,[XzӠ$D%EJ~ڦН|"&mVT,>:d;AoYƻ2l",QRIrcӳ;ĉi>Š_a'8aQ,M)3;qD+QO M0"N#H& 4C_XsӘISLGߓB+z0{w|:Aa4cmGui.*{W׏׳ o\#ng糏veT[|.8Jܵg-)b ](q Tqq2#fuX;JxԷz6m" rv@?p7z{c0u'5G.>yt0|+(?L W6M~OQf/7 ߽C4L: ĂC܅2l5x;a nozګ`M/18Tqg3FС$6h3U߳$~h̙s( 6V9 ƞ&{m" 5@#qRPB2fWc(gvXZuèo"/.Ju-RgcqƒAe68F|zUUKx֪<ǿHUhؕ5&Zdj*.%?xNu~W uBO"2; |Gjk9;P+(g+Lrݸ2cM `7=f̺ ᲏qlQZʵ$9@?+󀝣8Lͺ?M/sV(_z.N= ܹ  `bki!)kܢşk5ALNDkI27*@b^{{/J"@qRT|Ql!O[T(w{k~)Uڱ))G4p+fU7) 0G#Aܐ۩Yx$wɞO 5H©U~$JK`y'hD>έ ^~m,]5Jj9 Cȓly;Z bKLLװR>S(5QIڔwu^ݐzIVj "6K嗑:=ec5ypkI24-t-G$U%~`]tBFfB-B?7kmt%|<;K*ׁ-Y]EΆʌ/TB| +SޫЏEp- R3-ENZ5)=NupCEрC2M+woz;F}j)>6\X ˞q|;(XC`C ޜTUYFg}F~S|UјHymGr᭣H~jw1 h+/kE}'>O9qz_L;W/ {r:fgr|Ca6X! ?CYvich +6G[ҹZJCXаdəF{|]SX/p^LL:jXG#iD09Q!gh fp7 *a*ЈE}B' k7 }y4!^ }%t _`;.6[׃x X{{8WIB`5]nEqƫUrbî$#+bJ3ԉL*{֛Y V7 y[THބgGETFyq2{—* iB?Q{Uh䫹{(!WM<%7^h3R˦="ٖS·qBEoޘd?Idl4-31na$32yA%E`qu=do[xL![vIV[g`+Ȏ)q>^}BW!rYGdp\+Wvѓ\c Qݿ! i70ncAn78GwDD܁jHxW˓Z(v| Cw'3t1M9'~T2[b,P4%m%> Pߊ6?sq_~tz^@"4`EJ춧Igi`ZՔU|0ѣbshO1H$޲#2,ktdoDgV,:IF"rhx:h $*ߍn@zcnI]xǢV̷sf8P B[10IvmTQ};{gJf1͝azdF95FgxhA<dh}tˌIU6K4={=4K VC9F|Nsw5/9gZĢPxszn1`SVh 8!*3k{e6/|66O0ҫ [ 웩!]%DmlgW΀ [76Kbp1ϒ|hcR('>O"ikuRT99 @wRhmw̙=2T$on.W e GZ@/M&"xrF3=%[WN#!}E-$\9zҘf Jls}| 2903V#12N]lv":I JRǾt`"Z-GmvgOoGX'Vc&Ja_/C7DsP v&`2M|,rŒ::pymgq3VA[zaݡzJwqlyZifﰮ ۰Q c[TY#Cs ¬95&& Xd3u*rl!"Ȟ_ xOKԒ:gC*lc7]ǏlFb22+1Uu-T E,W VN"4tǍ8(z욏6Cݛ 8Dz\`|޿RiZc;1hL\޾Qn'Vk%Ej @qq\]1M{l%hB&LjAld dT%}fn ]3cYMJB>-C5<\MkXv5|Tb:bPܛi/ގXUN(VxBP=0z)elC@ )jiF23Q [3&㣾XOf3~Cf:9ٸ`>Osy) b Tjh0X$D EPɓ$ ڥ{@p:B1 0E78G?FpI`Xv}E\k=薭.x:i$]#I5bIJה,]|jcPeBDdD`v(ْ.^e()5)Ǵ)a.y0h5H'5p# .–U ęfҦkN@uGpO*ɒAS?X( @q7sf@^·f_@!lo& c'Nx$CɒY<$vY;jl8Bsa&VQۇˊEt/>>Ž~┸bϹ\ SM{Yb!i6,>J?e*$0NEY^!@$[اs.c1@#E@.1'%bE<41KS<<~Ccpk1ڻf"(و66G)BzQyi{o: rD篵}!ewŜ:=nI;`SV$5 ) +R ˗>WI׹,e&r2~ޒxnqnbc]Qij͝Mq "\7~K$ TH…!JwZZah3+9_Ggȥu407bǽ lrR-uXM?$]c nA]ptVHU|DN^J^;jjWX{שu)V e3+AN3:XX3Eyjn٤?}<1 ޒycrŎ4-1th0&ꔆ >ˡhWť/4KTGXfW0,j uQFT}:$cO/*x(fUVM oh6l(rU-"W5GyN9@  B&&k$tk 0Z'(^r"^'um0!ܤt1~1XrС` OԮOja_(!3ޤo/Q7?$G/4#%'$tMV5E`t7ecKsA)DL`J4"O:(ճZojPXMں"C?JJѥ=^"v?md%fkk2WbknD3$!PKCdi16>LYmQXIrHuQ਷`F&k!I7X")6zo(D0S!&K{~;𿡟PttevmԦ7jR :7[x@Iyѷ p1b3/t4;{aiR9/"b1f*'qYxL" X%ҫmXRxoD?UXVvX aGCrKEˆx KA8;AraHLbziX ~Z5I/s)P= QN]k2iQ #r5ػ>h:: ȭZ3祠g-R^pݮ4{ $ʮR2ϡ{t8˂Zs0qp<̛X8"$MmM3OEMo1[N5}`Mpiau0Rd5RAt\2UM15iU+T 5PvQETMf=N t )t-Wjm#ylcsI 4Ok6H'ZTo %y\ o\L}KjɸQӞ1f 3HX}:$-C.0N,_{"S6 [mfSبIפݠBU_=bn۷oV)`Mɺ*֓2ifa^.FfzW =# ̂ n5Z_sU}m~ksHqAg}JNrac#bO⟅6Ց C᧞LtJ@ʝceda X$'/SC q|ְ$o^%'^$v<\y7^e}rbXm& W,<)~TWfDphz%ߞ!5M`E#.rMJO7QNLk} JB?j% k XN9#}Dp4v_b[@E5u݈B;"`ҰwBd{C^wyn|puZovu '~9p*=}c|k}Iy z5z3Kp.^Fih.&Y&_ߟ_ QwyǪK['~0i^[Q^X ~2tdݩr84(rrwߐ.qvoU- ?0R^7AW@jz8 "J̈́x0<5/l刴 ; +G@cFlx* 0ﳉ!]Z-0sl'3SCi%HñkѾrX$ VdV~ 棆:hKIG46 #ѓnFxZPǥ'0hlu\H @0k`; *)n)ST-pFfvJ4}m —UsP"<>Ya&+JNIഃt4c1)07?*@X_і)wbU6O&U FY!yA}"'`nh{8'mW@-ޥ`dJ)~?N=P5fU+ `rrf-Iq5^,YdEɟc >5c*Qr[EML؊U=(s!yo |ci'pzVhǭ?az{Ge9Jr.M#mޫ@/e7{ L\"8гdh.2qz vP#'ҁA֥h>0 YZsurvey/data/election.rda0000644000176200001440000027374414074415513015037 0ustar liggesusers7zXZi"6!Xΐ])TW"nRʟF X#R Z#9ө1Ttci\$I>lU*:RLX?F2=lם+ ?:0Ŵ3"PjQTz9-K.p 0n/ȩ'*?\}Df?WU§e0I\*ʫgO7vW0)[uh\Aw+*Wc\iCj)6*X Ҭ$ >xU]0!Ιumgrxo~.f8jf Zqu6Wq2۰Gdkx?@h4L{]_I3*-G[CBDy>e0WJBH8nKpr5 u@3 \&Bki,FN#)cG.44L# ֡*f)`: }x $%lQh8| U,SYg ;oOw?sCv`*?iOޟmP-o*evZZq[u2ג~8~++IYlK 41%pu/碹W)l|d+lZ\}^VƆvdp4 =Fx)пU$3{yG Z0vS$B2NAjwԠCHed`2@], .=/m2 tߊ%eux?4A9ry6 arİe^/`$Hf<ÙdFEFS~޺ P3-$7f3Vn1ThWKUA].sqJ:M**%ӳdʸO|vZbᰃ'?>7T6_Ai֥U̻v| F CD1&֍u3a!1/]rp^h#l&4(i3tʪ8+ˉ"-^vT4 cDÙ.}aȯ6ݦa 3xOKuڀ. Y =ړƔ˖Е!KL57&Qkt :Qz={tTi.5Mh {%PNe?kT+a*JV]T $:.%nݣ&`Al׹+{^wS~\ۑ7f" 8>C ֥ rn~{!MKB||UuxV;TSkzH|4`N$E)${MC| McAEvx`ZyjqVGףE[dúDAƙX:Hݯ|3Х (^UL;ucy4X筑O@ &_Ya|}#\$ET_+\Dn6My4r>3D!Kut؟)TE RyMRpA(y H>qqE$t#YЁ'A(ܦS \ ,1`:hӍ.ɎJ:dQ u"+"{Zf:Hfz5אz g+t+)uQ^zږ zt/g^6`㣲 ZBz_dN 'ðYU`Ώ{KIXNs%).PjrH 0&U:d8iזD;SvU@q{GlDǣQhsip*j>st5{}﵊^eT 6֐:).|e 3a]M`8iӀwqʱPL@]`oP0Pkh`5!$)m9P~pf{`z Sgg;׎cEl/"[0d v%-KtR}@S,>!`yWJܠ~mZo]-KNa Hۏ*uJzF~f밥{l7ӢA\(akR^S X48Ί h!] pIh}Z@ǥ<ߒ_]b Vq\Hå~"K Y&Ss9v!Z _5i&QvnPgpz t۲ԝ>W |^=j^B_lk'¿ߝ7KD/Y9hVy[t#?'=jG4?z2g ϹjfyiЛ }byn!"VĜ羟GCʡ{ ȿ}wPe oG) CO^s2H}$V рvh5 ̄sxQ莟G73`}tThimuWTKՄlє9 6ʷݴO"bWyߦVq ֹȦPb gfy'HxΣ/>iXIu+9r7Szu'#~FOKyJJ±`'IEdkg1#[wו2A Q=xB:wEr&3c]\w_ճ^P^,Vtt4*If&޳L[279&˞~H<jb6j )0HU)\dN/RG&5KѤIܔi|yw&y׉{M-ҳWTm32SƩЙi%O\M`ă_[.fKXRx@Qf8$<zMEPӂ2Olւ,w7ej.-&ԏ!2ůw$]g+ JJaLcX ?`1P^2@C> waqxl4'ՕWpOyapCddx@(͸3r&>P0".AI>p_Nl$~_A"$)Z’H]h4dQ 3҈vXRqD{0E1~" "W iWGp&M盎<:}Sn6g!߉9h`#-)}~8W[&H 9^_z"`@T/xmƘp$ƣJrw*ɶM%iDhS Ke#a\NL|Qv9( Q/qr aH>{B0.f"!aRHM偄ݓ}f&g /~I Y(]X8SY^'`p)pȐt4lV$/[{@FΛ6Ɯ(:o@@E_Wf'QZaZNɶ]GöG><D2 }n*p{0`u/5K+aAUv^M+4FOňJvjc`7X7Y2( rXMCi{r?d>LƁY"2Ӵpi.OH9^E33᳌C0u!]CcJ>fFQ628K(]~P.n!J%# 2jK&?pWKq0LjeHp&#7ѷUת$ P"ĥB/"D*I|@(sU>J`=R/Jbߊ04_HERw3ɡ2@ C)ᆣIE;0qrʏnmq.nͿlp>C;tWhpV.8aHԫٍ_ HN!!{tMmO@e5â&i%xCbAֻt^|%[_KF`GPBpz"ǙN)rsPdwY^/ida4vg6(WdjQ4vVjRj|~AFUHh5ry|pVs~A;O篜C26:hZ A2᜿gPE 'RC\ȭ0%sMS  _XFUlxol5ѣ,&xu:nIꢶ d()QE0R%Fd\pZ=(>1mVUZ ]C&S.t*'Z_|d8{*w 6v|-գ&2\(3>-!ʶ>b;@P@1g턒cx"=.e}|xPu *P9z F" mMPeWj6zk՟?՚R!I]Fɛ s'uT+\Tc$#(l퍑we_ SOcʭn^/ zo.'NT:k{hJ"Iv;ԯ+Yb%`uY;)l,k{N6~84s:&TMFO`U@0PB篷:rpPvd/nmp:/J\+ƺJ-$)I-ܣ@~ Pow$+S)J)֑Y@WT?հ.fq&ú4a5e[Wgd/|w? ΠQ>nR'C<_BC޽Fan*Jxذ TAJc :doÏ׎x"͐-H -t(x|.!I(J~JfZ5:0lL#pm*zTK ‹ͼw*Q;SC2e}I~Us`9._eS>g\[b#2 Yf29o#cKd5C|$p'{'o}ܣY/ɥyO{ # ZSH] G*I}<"1sCJ{+V$ϸ‹*e9f& qqJղ4/F >!K)/؂rP֜eETK>*j q54JkL{.>̈́w 5cT^GN.ZZ'x 9CB щ\ @a/ͥJEPNWw%l8e DlZV*mR˝$6EV^܂e[x7A ħQg`x݌'˅<ЖB/[;QQ8+cZx艝/x JLЋSȝa '@<) ?tWLP[ѷLJO33Ci8O^%vn+B# h{Ob3Yy镗le,yAXpgv58&Cۼ!Q哃&glp~؊φF!OhCX]FEs`#axտ/v<ԉӘ@LL(<j4Y T.rH/Q"%}%m8.i߲;6ȫʘ>D ˜B>˽KyU2;կ7,j/c$S5G. FӲFͺ6qLJi PwLp;ya`i¿3bf[ ?u.qt2mEMHE ~fWx4:<+ǨB8 Sqvxi= ׵HW*1Q\G Cc#+tOfUc^ d×= 5ܭ,z7]j]lئbNpgD>c;Qh <O+'; 3j'ǵ[yBꦇF*SB*wS%eOG*Vll{zfioGE֯ TS "Eʗ fNנ(v$ğp+}la3[ΌiњDaVo B>KxfE 8e76_ĵa7is268j9+Q"uBW ޶qReIo=s BH+%SU ]xu?W斮y}~啫xdf |=&s ny,Bu6+!&"ZS)"!I:%qŪOjZQt(r9~>0\~` <,ǘ)D7|X#Ǽ/4`~)(89hXUJ+h kk 諐otm,CկuGӇt衡I@ٮw|ZW H,]adQ㥓 +46Y3=I_yҕ-'j.XVP\ .>cq==^Ģ`")'>z{ LڜL~|)٪>o +JL|ga}H %T!nwo*MZ @f'eU&e%>8SqNU`ӟ!;l )xMw&fǮ۝BɆThnr2SmB'hk.I*,w㠍]C߅>9ߢƺSU*oa&&Y|r%/z%}?Zezn]5Lr)dE 2<5WPS%xhg<#@$$C$!Nz+g# &7 26U௫iWS"@d, v{s60G"l 8V0Wn 2 [ r1 lo&0NWBVJU`(b z84d㆗ <P2p$KD>ZQ?c)pOXQ":Gtqy")pu]-bP@ŗȃ-$- nL'qG>oUB'߰a=d!S%05* `X&_O̝zM5 R>bCs]\, :h#Hc?nGK_6Nv~N%D2@dM6lIӄc 㪅'PqaҘ.I5PT#Fl"{fӉ0dw=_fihT5F bqU.ws+5pP* U%/ r) t' u%ܤ ͂AD,Vr*' t9o0(#>HԤ}vBY3 HhdR:_βmG4]/CslOgYk=Vk'O}> S21>lDb;N僉ڤtw2~KA2LZzS_IFZZ_D+HeƜ^P{fu\"mR*$0X6(HR5wEY=w(86|2ٚC$G[^$a"ʫ⻘MO4/SFb0ٺ3VM7<"5" c=Bn}:B+SsK% Hr : z_N_K]!7vSngۏKw0й핆ST y3*_2Mb7 "q1ޯc2lUMgn܈j^i3яԔUQPM%s0b6вxO]pYkߞų<`Ɉ?2 e^Q.t ar7۟"jdN쭠;b N43$x ?K@ X7VDz}$AV5NsGTΜWr1Of(Hl8`X&qfMqhTfח[ 7 cFyGɨphlpf2y2CWnepRNu Z)TboX7˕-]YDwLBI]td_cK5\N,zwG> WsNuكgs|Pb Ս8&*#kt7dUŁMM&0w鄀툒$ 9t2@6hټ:EݑB)TG7TAd% y{i\(VdHǤvo=,@ϝPPlړ_ثh{+Zi-Y2>/:$*īBoFbT]4a  LN>떏Ӡ8] WOazi7lR|\O8*&RyB{c<@MV‡I1|.?XmsJ;0Xj*l\'1Nf_z‚*I=Caf# "#sÜD 6,th*L 6 󼧈Ap! 4=5á:̜̃}vPM_3 f<'͏[b+3}tv~$D*^h\9aRi' ]E[* &GRR ܈5Xm7WF`j9 @%?]*Z{Ʒh| YC^z>Hz-$q$>8T1'eg،e2Q1jr2a] 4sHWϜks*ac9iWtL\*uv y4[xM3qܷʵww6od ?Y-p" ]}kjbNn2YYEyW~[i5Z=VE)AZLe`eA2K'~Vwb~m6wr,saa Oqg|GzVXjr`Āрj4IK64a.>Cv(c?"J}%"-Jbpܥ˞J!z7X/<2{)*>.˚?Fs{~dM*fȕ&f KWq3p(Hsd ;l3잳LSG`; ^#!;ʓǭD>/bX j8?nb]OwA=U;`׺AUH" >Co ,2Pˆ~2$@0Q}xZXFd]e!m)+__%P3UyW&Sq > TȋL(ik؀cUG{$'upK^^xAm0y떮QOFvI<^At׻N pVnZHVA*`aRIrW YHzQU{s;I^P4 p^hPra*H1;3*d [)Dj*``<6W¹EZZx,Z^S,n]"JΤۉTvrkGX*jwp[`TN005@ٗP5rf/F_@Ҧ9D Sh8lҸL(ԏ'9[O1ƍblAC9bIeGHH&+۽ ^c 1 (#@GxbM"jү2ُX OJYtZl [azU~$Ͷ-F7olF&{rWY .$W(@͉?qy_>v#1c݄RIR+kcOwڮoӠT)ij#)`Y*6con6/#KAUҾ]ud]ב%Nۀ+/andFJ ~:JNBȲ i&p,N~&b0Ϡj@!xtzã-4l%C+ ;Y_cayŌ <5BȄJD`]Rixz 8[%J^'R،$W Pkx vQ/0},<1=|Eld4#/NWZF6p8ukK;h̒?{B$8bB)'aeu!?ʌ-IX?!ZuYhdCGjL+:H^OKO%RU\T^"8\`$BTRB1dl3dևeo8 W K8JC$kJ oNx5-Kx9Ӹ\̗x氨5RAXUv@oQ!*Hޤw3s5AYDd/4N64RArV,k /f{ (Jw:)lvحB?wKc U,9{MLUйO Erm*|}(7o|2nF5ڂt+?Ll%vR6^^QCj[춴w8L!YoLH;I/Efqv5G+jǨN"rj#-nN&JPן51yl'FdۋEީ2ӜZ7Qx&q3jheJ!:ѱs$Z )@JAK u߆,l*]"HEf(UHỸ6,f:նE봎4F8[$lm NǙDKtE'^s4<|þqo:iD)-&r$s: ɫ Jv ρB$C`1腡I5KfnV[DB%{Ee@a~.6N0CX<á薜H6 GHiR.{f\29rCTW,_o0lN1_NvSGmi7:쓐LG* HDt82o)cBvs݉ˀp TW>%h'v *O2YIPLN&9\FRmcvSCbʂ'v]K>^,\~ i٦GS|Al-O-f$V#& g}9J}q,Yf58xm"@JA5k{*&L)(]~%vSYC#gMսE25mry㧡ӓE`~teY +cUcl8pq؀ kcu'[q{b (kp8+5Mڹ6Pr/ v'_evcv*(jy -"DM%_vہ[x b {b(/oo< W"O^)NXB&ڟwf$zs]SotzzG&yIkk{xdvUw_vW+VTZULDxOdu{v˥Ur[B=РZy0$M7a ʵ29Eg?.3k ~UgIƷ _ (QdJZ}(4?Fwǻ*\gۿe\Ko\ϳB0f(h>i׭hᒰM?cL?䜳iO:RВ1ug2ٌ_}͇VaEC^91iji0xЮp4oeO2fl& UuYb [JAjoجr1I Ff.6Iozshj;񔸽ˣ'&I)D Yj,=8NEJ&"MqBࢿ~+DWŸ@2T~ޠMxu9pT"JG}VL1 -ەbG*Ze3@ۗZaBhIKFRЃ~hbM k1'RrX<yq{]U ǪG՜a%0ٛ8kXqlL$XD5\5?_:5c@'3Pm58oUtܰ Q,~;qe.1ФkW\g9VvIq é5 $V5y?ɐU=oMD e7``?d yl-Qӈ3_-TƦTޙmo<)E]󠴘'X4:4bMH$+wk,>t9ㄆz1gNRlRl+%u[ՠ ]D銭SE.zі 9x͏f]`FП:YH˓ef SO*"yZժ?grP"v6~ZZ_Kέ` x/qÇF_l|sٞK>C|dr2iH[$z &&K ݝLW_- =3ҥBRRJbARpPTn܅5Cg[ij!\2\uxWEc11:1L4.႑Żal)b-|0 ~D&9#?GĮ 6G|БzݜnY磱~4jӉ3;%qbW29? ,M/*4ҟ^.r1mjұP41]rjjY lQ59HI zwrn,,5t>^~<[R%8sשl,AJRCx(@VT?s2Gp-=.3M+wFiѺa7Ӄ3ϏJdtk0zc.ZS;P;B`vumL eJ!5@#v(zlxݕ>_zNm1:r`f#*\{UZ<"&](vK>b֢U)O7v@ꒁ.=iyXOz~7wM;/3q%OMWY-P^olPA0//g,mP5òGMPhnXuc N 3:կ<) ?U*@iGrfbX6I[/Z`P@ d2 z_ gӷ1'`6Q*ÉҪK;|p)vK~YݹO7>d44S. kA y`%XzZ嫣?rXD/7}?X]S_#^x \ ˛% d m!$*3 ߈=u TB7(m2C#3Ͻ]Dn:%-Q: 9$hO֍sB  nv@d Lzg_1\=O= 8&os9둗֘^RtV)hr /+FځrHv%?]SXS(∀PPyN#}5 )@2ꍹV|iaTX on1M8sOk'J-H\0E%F`o_ט[;?7n4@41L%4?,m4С=GK,3h `6zٚ:aG$0etm d5Osy"]y06/%Nm>@y7ZV5 l)VRiIțvz6S<䉗FΦp|f=W'V`FF us-"u -hxgh'\s ts Fwn27 FY#<ճgEWư3u>!C9gAj ʰ2% cc t^9*4H^ηo;W0,V}uKGA(YN 符c0mTlsCHId77U lb(CrW!ϵ缔1;7W3oh1/jÃ3wBBžކ ;j[dܩw3C1=%]q/IVs$Lfh>;lĴX貍vh%_gX#Am5j9YP!4AIv2 l&/Ryv"Knn,UDy^qHkπG#ܸהTYg\sʶ at>ƞ<*eOnpv\#5p%7jsX:eET<#,8#*wHZ^_)pk @oa@ =|tuF(ﴍ!pf ypms4y@_ &mኇ C]Ss[']վ~J*1J/AUyk$d:̻nђrXyt󻞴o-ƭ?HlĢͦԟdǪx!{(Ǭ 30fzpt:Ed{FU[cu,x-!Cvgn/KhX,N2~G.+J @v:oC=rNbY&@X $C~%c َ1CsHݤXV|93ފ;Xչ;!Κ$bo4Q0CwRwH@HmׄZqL f>倝>'ᄗ׿Pm7Ү2aS_rB N-uw^~,:q5(7]1S{VDRebhi`n5==)@q_bA^ϸ~"=+:Vv.~꧎{ WPˇ<j8}.ҼIP!D;cL*+2f>5ZKm'gy&!" N|qhyBTX0hԾ,0MM,eAVBу4XlsewZEfk7"oZIl,VA$j-d@DC iWOa˪WA N6$ܹU~ d\/DpaselMyy{gfjPUw&x'/}'YRI|k3o) +?j6b?jeulavEwk}pW|dqTt۵48TKk![ѣA"xԎthʕ{u`Ew\<s+~ @W:\r?n@ׯb';q,N7D 9װn`, ]Ck%#.S8&`MyWSy"%SUchJIh_1+!Qa)CFn}6\>Ep_(Q`9oR:'5E|X>6jZ-}J綹X(%ܮLH@R-G_vgN-P~^=CCnuCVѬ$7 HI@h l?Œ'owv"yfxW҃hTY [aw}dbpw_8X$j ,RjroGFB^.rrZ':.KsFdg8,*]^oDz[a`4s؇f`E@6=KxN)SY ;m*7)vT SGPOSSbt`Sy09208 `R*punt%0\ԛޚ؏ΉB7lN-OHlU}R۫ lBɁ75g Ụ(,h`TcU/^*˹ L: Bmvܿo7j/꛷t.!*3h?b =g?b1:{qUAb9(W{vtT%e$$jYk=$}އy1_C`hD9Iv2;üRp (} K"ܾ88EE,]x1J{}a55~"P݁-g"?4\IToqVnÀi/P"DxRA -їpIAUW.g¿5^?"lhd()ݛ'#3b.V6 vj) Jk o.bRZMHl@/9ީ{W$n?!K=׮fV9czeT(>>3;:+ٺ&T=Ds}QMq+LZy+}l1UDRq_ELCT OSo15d|z\>"_Vb/( Y\}*i 4QyV]?l@1zeLk(gJ6kkozImĒ_}cf)|5Zo"!hoe.YRTl] Y#voKfVN?S1Z 6!f97kevqtʹKxM[^ťviˆ2-Ւkc^P0khoޫRvv/./kF`i0r(J:pَ._U$K]X습[Z Li'!2*!?goPNtc_szh;MܿY}ʢOZg/X?gy qhBUv~DfuB97tAѸ{ $h& LӘ<{2O @>ci6|K_zО ·1`PĐ_ mfCrSyl/%pc?ԤLPgy9gsd7(bύ熶L YVΣUI#p0um6ER t=O9Fgi-18kuI y;(+7obt;bhQ&JФ< RN@V}] ^ɲceQ^'?"LV+Н^x3%W>![U_aaǃHsѮBy xuO?i+k0"amR1# (UbA Ic(i@ފ NO6;')[j$YǺg WGeywI|] CǼU>?,"~VEK=3/wSuz<-vd̉_!Žd&Ee\ D:b0wODͅ.siWz;Mԩbǒ$ *`@u?pXІ.H+‶ fbLnHMJ73C^cYR;NϺE"K-,=5ÿ涃8Vgb *y܃P:T> ( .OX+]ɷ&"Nu3`݃ iӞ%D(ח+XPr:^E0yz+J0BCZT-{ZaCTnM\6=xVBp|\FȂ13IW%46ѭ|)Q}8E+ "zI $Bkx2CV8 @~UU!HQ' bB&ɏլ2*A2+^Fw!5n u 5#Q)I֠6?=sqddcYUd+՝{Xr(̞%0QzP*dh;ݦGl(lJl+p.2"'{a.6,I(\P S`>{9-) m%::qp`2s%8hJ8/3VV0TGҟ82qX'A]D%r'B_&Obv80jK*[b3 i׹ŋɭ.ڦ;Q ܢjZM1+<6;Sw;#j!w:"$>>a>]Z(ػ)7AjnG#a6lB3:&Y:YqۭI^C6'I|fN&pzj("|||oy/nYagoE QNk<_')g6g@(mK^BJ#(uJ6t 4uuO쩅ߠb×HkE;]e£~9U3e=e=*C*UwYh8ZNTV'4Ӵ$ޑ;pY;"Sveױƙ 3-lKDkD_\ , ;{HI]>bkI:ZA 3 ;]>!a:$HwP~PS֐ъ tdFT smf(جynyb/yAQI)OUơw}¢botshD%1Q?@7doc꺛b`:⁐DD+}JX}P4 >}y(w9:]Y'oApÃq/hfoR?׬bAJ9a]ddl0 W|꛽Z%% ^$; {Wej9  x|ȧ8+/ӿ_?^LhUv=JbRr'/M_&UNzӒ?*Cͩa 1u,m7~3󭀨T3ӷPS;oCo7uJ< XB:Ƨ:K%]*n/n5sZ&MI rPtD)Nю 6J*N8x*M^-1[{KfQq]-*m6Cלg`Z6$ PoW Kf k^d˔(H9OBA :J.vz 00}bnĘ)@DG69asjtcL>TV bFI5.a-M ?]bAI,8k^:w<_ȼmֿ`+>Aq Kg_ҧ %5W+U'9OcљM?5YMB)^};(dINrU; p h+DܻK _Ĭ\;ߢx%8"o-QHk@a~ QMKu'K*q=lrGOOd.}.j'WVd?&9;d&'&s_1I0aZU|Όz$d\=l.`1eB2Z?;  F0{;jsg M&+ Y&3qIxTVڞHI=>r.XZPUҨ%9WX}DV߷IZS\H( k 2iOXʇ.Z^moL  Z**a\i3w9q5E5G$de#fz:ٝ:޸o.³UU)䩳̀[VCt_%@J2"J`3 G]QAsklclfBtKvDTV58JG@?$N v*oevHW$%{TH =x0NTRdwE}7 Z\9Lz!H3 @"&F!ȟ#OlИMt!L\~w0^F$לl{(6?;q0|@.>FhW]2)ٓ@SL;6[k+&7w:]^6]1o/5˨уsvgD렯V y]`_ruaiD\Ӻ@Si& ̮$glO[QPt7:~K&nbД+KZNa)-Y,ޫ#QC>C㠶DÚ(YO{*ͷVТ ArODH[RJy^320JM<7;P>"PJАQrrqaZ4Vd & a0XNqr|3ƯײA"ntX+ĠU\Y4B4(/E4;?mo6x)XסvN{(@1ȼP2p?6Uυ(#ъQU6pxHORFD6e%\TEQ[Zm)X7iCrf.:ĮLJ~>8vš(+4"X{g`v7׫x'~QFdNDE׍ҥgz`MM;-?J"cYP.8`!,e|QG*451?07-զt1ɲY#[ػ:_ir[MHg& Γd0͏&o9:baK (~Ukj o18<&KFK'\=ԅ@'"545cyY4u1w914@svQ,]Sgi 'J=Ar xvNd}qSp?͎owOgՕ3ເ|v.h :4R ǧ1U/Nj\GЬ2G2I|H3OiWeopD}f/#2 yר=Fv5)oOEM4*.̣(CDIXۼy|=zU/Ƹf Ů2_VWL;EqzBHǓ.l ㇗9% 7n!ˉeqB-EcnlDy^*60kAFG/›Yi;\\e o>fsVljE5E@^6^JH.J.|)s$s>\(&\ZZOuh x<%U\8VGJxtˏ-øE#>a=3PKNahKO-/dҗg @ FRdoa% @F0EkZj1~[raD6 5T*@aSݳ^ gLC nh38]q vDZ64u.RAXPۓ]iG@ߣVd_I5eV:W7xlK4DnnVY+Ls` <|e>kv%.B12h`ދR*4lG ]#HD3O"" %MQ*vc?(};;rps#<,.D}/(>-]i@Mjt7b7ܲ- *ʑs|+CA}Pķ-{CYȠ u;KHu* Nxx)sV:jX\O 0/p-ev2fsW= %qt(t(u]xmܵ(΢~7[}yu(oxGDMkfζҞ2rTCH\M8:^,QEqa9pha׀G!.v.B1M%+ g͖?$u",fpԅYv"%tBL vVd/-I+O D;~%:%vO>l]X$IZIFn3OPaE:"&"k I,+EMt,:l[K[k ܤ+ 1= ѽԧߤknca9C-,gQ i?^[r^Fӛ \O [A~WirI-mhNEuLJY+5#8+-kД D|B̦H\!N8KcihYF?`X%hib8)wy & KkSݕn}rssqέy;XF-#mңJ8c k Gb ԳrpJj 5?xc{ h{-$|cQr"xq]2Fz%9L qkg̲-8|ܠG80(OV>DeRJ1j u@bm}^Mπv's(C)ڲ%iKDHMCY=zajzn\=1.jI>6`VgUMnI~6 Bke\,Uj{d-ꤒ9|$nAn~ܟp=O9%(g4)9 U-y U37Fʄ"y-ǝ!K/:QݫV^dC/5`oH>+5E$D)Y.'?~7o)X9i,Fa0xtkAXіj\˒`\ +*KDyl>W̨ɲi&>GCWpKWF~]7֩Rt/q0oC!\A<'>$oMHc!13$\v}017 NAޫF6PMZsl}ފaK$ґu__A$!| A3 KSE񹉯C *P95U<"L\~(Q~:2fjM}tVKz_E!R4R>4@BxMq[{RN59DӒ Jn~E*#\Ǔ.Z8RǸ_/d:+Epl./4yb7TZTkBMF sK" )匣s9AkPjI彂^na7ZGV+xS-uҕs6\`Ϲ9[rUŰ$Hۊ^+Ro[}TWE!iU(_0adZey7 TCSz߀)` j=U= ;A΋Q&㧤~5-8.vjZWu\_EA6A!64>W.-U~қ&h@)u-gNo0i*5Lٛ[F |(Uda9ߴ81݅Zȹsgg K8p1˦3[؝ñԈQٮLT A+#O 5 q$_zj8&"&DhbDz6lxq̈́xĀɣ,ArHNd{v,tAH La4y] 2@cB֧̕LEܮ{ )oJibVƴpėN蘓n "]V7J)i5 '/B\"hA;I>›cz4F"Q:Bb_DMT !XI^oPo>\az!`V `/;_TW0(GH_>N",+0~JhknޅIs9_m"CQ[ܮ㫅KٴJa[^1{F5kmϑh IGrJ96)< Oc2nvR<\J[脋b6TG[KƱ| +7߱QwK v}$þtr Y疫@@:P^Z(uXqPlQ0sC2fUG{#ۙrX9[%e0 h1a+lKa}y&ɴo ;C"%M SzVzp[:~}zTl eQ>Jp„ Ug7k`:2qz߇N'rqBn^NBEokR/&J~Yܜ;<4sZ{`"REa)0[ihAP^W=I/F]A.J_:̉V{ t$v'Stll?B'5Z8orx9pV6]~")Y{MҰ_P&d'->tLtt!am}/;ǿHK{ޟ|`\[  [hD$/%MQێkx7==Zد R{8k"uZz*@<_m2/Ģ̃e%B;+:N@&^+s_:6 |y}m-;:J;NU@96NY%pp<7s /Hgn=kAh5gg;V0Yfen~ܒ65KK>Wo3.cn-D~,S"]zo_'oAe>0 V/0u7s[}#JX~(V]eW<4Wg?v"}] a`} #@Ta ynٵZa/Eڼ*gVw H gay2)ǡf!:F&mFaDSwpoUP]`9)2Aϛ-b䬻٭Q@s!%Qzz7,ePn oһ)1^B\p_v 낫JDQI$ [en@x_jtnN]YV0?JiwȩespϔYO~Sj5nIKʕO5D+|M[}|ц/犉QEe^ y(] 4eߤ)5,1ӺDN5nw{,޸++,P= .goJD?W~39a}Exa-cw@DTM!R^jv7) Q'U!S' Ѩ r!R<(OI.;AUG6wwrX >|`yQ)K;E(ew6Q|'WÁ]-Ŧ.4a)贝y3Y5e7 4_{ky.8l.I,ԧ>u߅;¼E|U& Lld$/blxV繞+> s^{\%iRds"^}1ns`fd+;8<ϧW t3~h>}im-yk~ &^) O>' w0bbAf,EÉgpX,f\Hh2PNNNROҲ20 \ 7$$ƁpoSKlF9#NbS16H!@ߤߠsOD?vv /9G E !(-$UĪ{Ԋ|< ?i=Ҭ[%94εU)f.!nי; }ƢJרeM㼕'wMl*:(f1o݂S|/2q@(Ty>?m܅DJ)<\O!?-mCA93/<Ŏ7Q5yG d?pcnߎPX9a}'Jmo7Eb <4׺ҿt;֡[ln*VM!B5+j Cdzڑն%]I1F'MqR guc0ijrVR;zɀЂɚwbU+Z{җ.Ln MՂ35g9yt^A0X>(7y,~6&'uI}Aja/k!q*-ab6gFԢVX݋tÈ&sm"'9 Oj2G+]r4qͻD]KPypq`窅$.Zͽ{q;&=yT(+)V{-I  0~# |ud' u. P"(xwGOSZaI[a.?(:,7$')6e)N z#إ!  ɯ~}7g^ygvӓV $&߁.$7%xZҺGȯ{Té*rxb+C)T 0b1EZ75Ρ_['{P~!Fy] v73Z7n^et~yI/;8E-vRg|.#2Ʃm} Nm5岪/{&;Ġ`:g'L MAi *7V.ʹ;(W ƓfҪ֛nura ;4,kOpw?jg>ۮ31dl(;4KʠnF Z4D[3 șEuݮa6GƠ"j)JU*d-+h k$J_4[8iW{&D}jưCzbMQúIl[nB >FV-s~dd!)FP,rDg(;X'2ln*^~jy9>K>,l$sVh=IǶ}MhcUx QΊ!=eeNc΋‰1a(1(|N,Yf07=->s\9n +f};`g\`Ou} 2*YusA,NBAuEiW `3e$򺤛_ NlI5~ErQd_Aޝ6mξ˵uF;2:]4o=FwrAg=|QxbOjF܏0%;&KvOJ!AM;BW,SX!4*ql_bLʭa=Xo 9[ZA9cY[%', @!JؓfM#ef4頾!8y*Rm 9@sVXl-Vō7X;SKp[K XBqg}\%RCJq-+3(n y{n/W  bep?@2Q0*$1QdPoi8J8!BeGcIkb_zjU% ;cG TDS5&A1>Л"y}2r/ӏtm[z]Mh8u5)li5:, /aJGsɦKKu5t^]aIgaC8k{J#ޑsǓ0\6}/ٴ]r$ ӿYE@#OVzi^ ;$}5B[!G&áflM2פzAuG6P7"fJ8f=I¥Jx(ii6gvo,W\p$ҋU^s;LO!)X;O5KgOB_؁PPp&oNm)S"Ҷh3CY @|cd[$[Z$z}w6~$7] BŇE*D| wl(5!Pwd{TuɌU話_@#M!Tpi{ aWbVdJbEM6}3Zf~iZqR ƀ9ʟ k1>5e־G]7Oන$iKb>`6VP-p6Qwm8:& "$׋_M~>Shd^8rXtGHZ}:f= ] oĄG&~<5r=N6ys k\4^Iܣ1=^hݼH߯gPQgQyb$pr=[^&.m孩Wb$Z/*ʼn d=,vD%Z29ԕFR{mg _P΃>åQڤ"'EokwXhyDRa/eG9Q%E1#ȣ)U3ˏXVyy7oPRh@ڌ)y7V$rHx6>!(~&?:y='8 Ћk bI`)*4@MxcFteu㝤Ye| =e_d. ,=jH}-dDx+Hb!a"/oݪt݃+&!G%zM޺f> ohym)"V8-w?չP_P *; QdBd:l`\EvcԲGx̡^=Uv* "&#j>Y׵߬-\bet40ףY_b,󋕂kR;ZbXoQLqI#9=&I0#7N_}ZΜ4O`4sһS٤?ni˨͟6$+l*>IUFjh$r56I?3f͗u.wi}Ͷg r3df,N[,Uý7KVW`ֳi^l89 Ec_O!NZkYc1=$/I7FKH9jNH(:D-Lwۅ.)r(\X4. Cz֓~4[LYy57vzAƽ܇rDܑWn8}ԛAHqb+%ta0eQ~}/ XؘCV^U56BhH7qˬ/N} JaWxxh6- rxq=x&~mt}<^@hҸNb7x+e~K<{tIEoQ@73js߉ j%_❊8 Rl%? 2?rQwͩM's{ F.PQ byVs/&d`"ʊ숨ڽLsF!Rtv q1hf$ n˶'"wT5Gⶔ ~ɕ\Wjz[}\3f< n+'NMYe";EPؗJ}d/GV|y" gdfq~52T-dL3s_ǿ5x2~bM֙,8R]6wӰhT!֍#)bU3f~b6P^AB .97Nm3WO%!(:5AAwbx15Ոla;bG (C(WW w()UFzr~dK~Xh-)va'*v\JC`A2L-j6p`CU)z:ħ& bd4Ȃ-ǤM*o~Xgz}^VI'}sۺ81(MO=}%tXVnƮ4 | ;wbܞ -pǾIihHr*AK cN'֑Tݐ<Dc!%@%醅01}?vF~ėzy#_s"ӳGVd(a"-" XQ..VbX`9zB;+v^u̹ @Dj=B?!JߙJRcϴf 83 m:ɼV|0roF%Ebʴe=msVM 2 >ǀ,I|i+Eq]Ek#ژ/wH!p }FCq"\tǙxF=hW%W҃ e]9o `"ҁ[`zV1ECJ9I-Dz4:懲 oNǐv:"]b>4eQciQUܳ80Mڧ A \0dO~>C [2N}6(C鈐j T|_쮐\>U{ Tʘ: "JX+p7uLQ^%S.d= 6x}B+# -tY,#fk' fJDoqS ȱ,21|z ,:H7Hh>EKA1yy`$X{Af )7ahҭhJ!#wtkSɳ83A&kC)z}.[2 29]jEK Ӧ( kMHlFd 7=+˽|J?`Al¿)tTp@T_0f'-Pcy~x*.1]"Eފ(s(چ9cLQ4l` VɝwB.b'dOw.P$4.Mp,n B_W4OXX <8zC^s[K1oݕ_ <)tmQߵ4e0vGwpzl nU}X#iN-E!%b_p|&fU)Ѫ0@R)dcTف%F]M P-JahLZ[sHXA@B+IbXkh{籖t W{܄rwlCӓ,9ބ1P`1-V/yjK퐗F";IIe _ΠΥ='ebfO!{VI/oP]+cY&ֶ:s?kٶ ^df/ƚFT>̢EvJVF _f}pkb-?2RڿO*-;F Oe~zRAW95M_ Y>[o aחp^UR|}WfV]~8{lpAeԍQ|I+ G ڥoJIA}ҼS}:L>Rw\x>W~VSO$yIe6*V4 P^2glܥ Ђkk 8E6XR#%#`Ў 9<LQiֶhqKEA\c$zz}-|ElrmټC'wзa',hQ)}!\ga=GOɵQd6ȚLuK\$3s)7(KuCiF&V$R/0(*vy5%pF+)b,!uc|˰&.v 0NWVqXHbk#}υۯfFv4|?RS-]aR_k7q>x9_W,dKHrW% %4I;YbC&SwrÀ0|]NKlIX[@-:wO=z(#D6thrZrwP笑yix0" cAauor+XHY k SV>[O#r[3P#:MzxY2&up: S^JJ,S00lE ]?" 04ޠ$YAnȀ Ad?j. b#Z.9tx)tK93Z1[\1v#0:Q!-nmKfjξƌE^z#,G*):eμXS-RC*[ab;s䦛5w*Xʹȹ[E| dv!͔x庚#avcnP9ḥ-AsielN9\b5@G<{U9Ap`/[h<&V.k$(X|T3Q٘!p5_ ߔE4Ү X5D_^f)  #bn Hc4D<5{mgޱ&pGGis*[ .u/,ԌI*Ƣc'Oשnx2)Y[J%՘Rt!)rʾq&TEO6Yr,QZcc*\Uv8>_|XlBJ&;pH :u8i:}+PeL$ Xˀ"K{ўF9LℲ&4jT?\Kѻ.|X䓫 u*;\6B[Ț+2i*ۅIE(/? 605 [oz!kLCH IRfO&^\ . Y|!+RܰF%T]x _/3e)($bbZߙ3H]v, b?QfE 2;~2JySQ*RtXk-VBF. jKs%quS1[៸f BSն#dSZ؟6սJAu$2R+sA )g9Nݧ~UvPpKg:*u ݯҧ)p> ='D Ǧ*G$j5≎wd)v JT}GS;J91);E_\rG#FbU;ȟEv&&+W"QJ,he-`x K"eoj=g { DMMyv"YJda2D0(iqE)2RFY])ΰ\ȨL՝Pe3s?X@P  *u x|nCtMѻ2և@y`:>f5\> f|uś^6};2R l7Am: -<ߒx5ʑRl\Ҋޙ?/549H8βY( []v OMגw<R&d?ZlG|=~$YlZ"6(YJɹ2ZXKw .%Cx<{HSW׎]|NOnj׆1:ޙgF2CI-pm21nxXmdJ3RMzkOcZ$8 vowpoYlm*vMp[5%5TuDR ()&a-:djM-{S?~^bdk 2LN*ׯia"d(#nqˋ=5 "VV7vѠMpUN([Ax6#K%)s)G9dž6#_"-ȫ|0Jevc&= 2+b{xlr|NZ4=0|?9qqf}f|w,-4GI5s;K >c-F^bG]cNo&`ݥcW^7; 2Ԡjw6oyr,&\`j!+> ӵRꔅ |*ʁQKd`QJX䴔Ұ|OT2P*֊]/E~_V CΏ|;RЀC 'b_C⎞yGeh q|`yMś\ۣb.V1?j~C_l^iic:}ץJ~˱c,՘]Qz8\sQ90aLhm<ң4an ƈ4 ?6۾QvR J)"Ͱw{~*B!y݊,-S&vP WEg,^J5R&  zgyIZBrHEƱ`'S;7]b9V"f::-f}Z䋽bNkv,%b3DtN&<_ћ!;یD8&tIQ&MήId 6%d6_#D>16FڦͲMq 'z˜'ĢM%Qd_T oz0Z2!,"sNfmr,S m>hY?wc7Erne¬lK>zRdF[6޵CtkFFhWrB'n;.Xx#l cpkYq e~*~O,q d&Z3\/gU4AF]_nq+bb|Oe=iH9>0vVrT 1mP=S6K|ᎦPgY'VfzZEdo`B;&[sCe1):3TB삢焨 D\$ +8AqFWJd]y/J5t'PB.CbA@8Qp%~ M HlZRqLv澤97rs+,/)7S8VAт 34l WV/3kawEQ@;Ҫ) f%,O벽bdڅLg |U~֑ӊ1k$mc Y\Xxե{8CsaT`ZN4yI0@{ݛ5OR#;=a89F@/z~qԗ:amN2 k{֗\VI3zG:n7҄qވ%̛}<0~ˍ!G׳ # K<>`H =NX!S*L‹$]0;K}%$2 [U 6=D)7JaJ"~"wDD^{ 1KWriXvV p!㌇=j58U⃭d `&xLO!ؘl%lOCEhA֩EgF О  x|]aդ[t϶Xc41LN?o=hB^a6R}wey7[56 p}>& i+RQP#~##ETG d_3T\U`Fj*?+a V Zs9}k=DW* ߐGX)#Q d1!E_"~ܐx95b%oΎskU{ nʎvZpHF~?C;eڞ)1궁Z~"NYcv˲j,NHm|ftҽ-\075T%opYfڥW9佟<2#c>zQu[vs?6g1J{탨g|SMR]- >oAc)L+9of`wp<5pFvIϜ1\m䶑bx.ZPvW M"Ŷ7ŧ`xFϮp~֥ <}fD8x*)|x}54$#T~|8uAKẕڃ<=z(0LwBWIP~QWpBN8GhnI*K㛮T'M1jd%rԓfHCXS^]ߝ#6V!t|t{Gg2ݧ3F;ٮCaS:.4 !tGEk֫LIZk60v/qKV9ꑛ&T!/d4kLµHo+xKDNa|hSMYs,o$9ZIgqCjw7J;/Dk FY'a9FÍbis0˽齪+u, zl8Bv\]]pji u̙ۊP@RUe1 ٢Q4?JEѴ=f<cR {4P} ԭo4A@ x|FT& Q31 ({؟g߫j8{yի?ѪtPz]Eia!*ho/%,!#%_XvWQf⎾ ht2?76mƃg@4,cʧAc3L-Y}d3 E$NYDxs8 Hh+J3xQo;L1ɥj:H(z]dض:_ۃ=xO}iJqB)߈ohZ cθX6a>Yl9.hgRHX' ?qO7s JgNUg^.)OO'Y BP O (3bg0$L5GLj@[&n#2e&i~2ЏW" wOff5 = 3O(38 ~ -Qj oG^1Օ"SAkAUwm >~:mr`:WaHZG1,?QSZI<;,}MdKPW|a\Pܿ0x"U6%CZ,(L_N%d+JܯIa 2#|`Vi s6i},fkhhF%\tB4 w,A!V]KHbRL{6E ̢iQbL AG#NRN~B}qt:,TEʷMLɪ3BT̶EA2':EE}y=f'J@{;2F>0EcHJ{iq%EζLmcYVz@4+rN7L8C)cˌDWҶjX4]&WOFwV9떨 /l 6{ u-1 Hf~F7s٢KHc$S@\Н.ց03\`w `OO|4UI4V_A9tVQs%E0Yj>6!d֪]w}AF .8 ,VǍPLQbgt@$Ɯ@a3X~A˂56ާwل^A^SU+?GWLZ׼FEľk6'Sv0@ *2MacQ: gY`m!?P<mʡ19fҟ ; j0b?G#\̟WGelzO2OoAM^ Ӄ{ddBknj?4+^Ѐ.jt>jz\N &]N\z lñ{(&|iM.,^%S~rӓOJĘh ,'o[ӱvbSy% bt"Yn&E.S+u#OfG"BV: ls((NMCѻHԹNSfeasLя7 .Q”PKM?㚈:0!s~(ʉ"_\/2 y8pc8Lj("^?ɪ|j”|}5يM:#jN5;2XtK:FǾPp0)f쨟̐ ;L Oa mҚh`Z@WSi+o5ŐrMJJ9WʊfmKE^:<#X5{96:bZ4+Q%Qxc<{4YdK u A$[Vʛh`P_ӽhݬSH)AuIN (w!M"7590>P/U\͛inKU?v9 H) ~W=F$^^:Ktނ̒l~0K]!1Ui a]ѲR/Ae05:Yu}+B2ZJԋ Γ4NbS 53_SHmA tT+GD~O9c5> h\)ec5Q z`YrPP-Oz +&1)B@s>>a#m0(4V4(f|G:ߔsnb0hї4[@VhVt6Ec}=ȡ6>?hz1Χy*RdZ#y?vj6cqmCoBm2,/EEtУS DE]w] /͝1'1s.\3#%~U&({ o_f*tȜ6A 4OM'T iSǼ4mV_L8f[8T?+-}e30! 3󷀝tԛVVHXG|y Œ`q} PѺ%/"q,ݲ<s۫W] ΤD~ޅI]d0a&!]dPn\CbD^2`EŴP1/_go'˛(3$vh+"$ >&ʕ:E&72# v1M npZO.ugP}4 Qw3vL@@vO#=|Q V.u"2Nhk1N=tRI %C'r D{[e"тǮ'}ͦK)hu9!}r!kѿ}R k߻ mUwGlfWL Z6 i-ZbR^݌I?o~r2 /+ssy/a}^Q"uwXOd䜰(|z@ -|GWICx8 rHbi+ⰔY>KVchd)FC,o׾\fm ^Ք ת1m_p^9T&*ː%h uО?M mIE|BT'i]Z)=REhDۛz=UTi}xX| \~˙Y4%Yr17hOP4v AR8aqLL-~]jEɪ Tg_l튺|B&;ZtL4ЯGhd\k.%8Q&ׂӁ/%L[itaON)|H=ˇsehR}p 2,]SBjBQ.,޿RĠ)z+( !.146Y9VFe~Hb"2go혅qm^"&(B"צ׷B׹g~kj 䓚G5ǁ 0=*6ie '/91I"t9:]k|H/ztϥ1-hXDw]lX`S{)RP$Hz Ѡ:CEҩ_ }RP J$ݫ>X rpPt۽s+Yf_3i0 $1|>\"k_ 1fXи'!`1œBѢYk`|r&Ρm ;6.t_ʿ@dHM^ώc-1sB:q.j#  jnºr_"?hSg[J GٷOs'.y6IF6-iȑsE -6I܇^/@S%c4Уk)Ebj7wA<[t%6S;P@5S.7Jܘ6Lk]<_oU/Xɗ Y' ]agid5 g/c|T67sS}(ݬB<$lFʏ7ѡ@5>k***U@ d͙b|)H̅V~~kdd7xz l\ :U/8 Z^1 ;I}0IKOm8;;-HuB*# S}Z+fm]F;YEbx^D 5rGhhd^Lq%K5n"=HhB1{g`NBgtTM5Bd*-p1ˆe V-(r߂D+<*q$1',^}Զj$ڐZOg ,w^պoti!*#.ZN^ "SJ>(.Ct+*&'4J樃gRtcѴ}EF7S:5+MP*0s+$V)=,21"XJf"o޳RuG]Vb߈|@R_bue)QS^51ܕ5E#x{,5I.G {&$෕6_:PB^D2:O?##h v {aݩLρTqxVp÷DvJ2B03Ӈ.+[;.dY(%GCBĹ;#"0p*crD+KZA‚9Ci {ʔt:)gZX\iq5ZfGu%,dPfc@)Qet?~uǙo"Z꺞2bosF2u+akJ]E*`XvՇdeekq>]߿7Ev* |tNˢ~w׎DEƦ!pyi4tgcSFX"AYgî385e|LَL߼6w\z2; dUYQp']WI_H oֵ oX$4\O-QfD.!. 0-J1 {TGe.'D8ܨjƴÖyK=KWvu{ ZA/OzOT`fG{b2SO F=3 scYM:ScP*K.?YJo S퇬}뫓9rٶQ͡V%b>K$2g=9'GL1)TtcG, C[,9z`bZ< e=D)NbJg7Tpnz)~%DH )iB,%)lB^q^Y\ra)YxPo蜺e]&kXQ=?qe^D0i U@x53e4#N'?HXc@fܹ%Ǎse]O {-_*Wqu4Yu]fVaxq,7 (%,9,n|1{Z Y4G1q)&*L`d_qmAV$?uD Cy77mzA y%uGaj lwohۼs] @*=TG@.+ʹPY.{[2)Ԛ!wr];VKɜq;y@cw>`Wm~_5R$;uǫ{Q/iVk*>VzGl/t/*D'{myiN8}AH@W!1ZgS8 dkΥVpye' Hzط*J^, ʺ%gW|uw”H9ډ<uNR?Z^}q9dx 8vr?>ΐȖ׮*5gXije c{)w P# Dfw̺qjfcf{ib+ _Sw >XD.U̔Kp n;wI _Zu+@>Iޡ޸קkv5 }W@NS v?HPka E&d'o>|*jOS1 ɭ\k[A$4,]Pwb] 4ue[̚,h.L1$,Z`Nzƀ] z}@Ѻ^nY'l!2iJ|n=U>Y`}0Y͝:?(Q}uN/3kYK @hR-wzjr=NKo.}S*SM-z*7)o&mz7D^b3J0¶De +Aic6ET%)\+ qkǂ?f;ZqO6N0P&TfϿ5Du@M.kDTRy34_֎8^C([heP]0SR>)wQEb .mw ˟E]ZGf}*feW3d6N+̌'O6ÈV߬?5#XN1m(Ӽ#bZ!~(mߎF3C5%(xv/'m.ĥh뺂w> BBNi̩n,Yhw[p-djQܽK[3 CbOiL<9q N/hj-.5gsSGz`"vR׀!XW n:Οr0&cI9m6iׅ[W=Sct%RvP__.%?-YI@I}P!GEļ;q`J2vCa966Y˞yUzcJr;xG'@WPxĎZ'kk,L䜖V?z44jr+T# )t9ٛuiL-:(knSK]pXmWqQo  8!(h !z)М6-ĭL5a@3 tvء.i=2pxkǤR?*{f:e1wh^eF!VZ) @c0<.f uYwa!NWEHʀ5>3T~ÙWC!=bZ.ܝDW"ctfF,v do"W'Cѭr/K9w{*8|{ ~rz۶ >Cw:u6*R\DTbwX7U~76#GnVl \u' pZ %ep72+;XZ 7N?'*{'|xa֑XvQDd㉔w.oD-+i|}>ԡqiMwݤ\Ί#.I&*Q\4^wYQf"K=`2J݈f!H @%dfUE·/ypc9I"+O/lhdIFT} fZ'nx/a6w:n۞K!k?vx nhCG +Of.o⏍B^Q3E툠jO YP4 aJe@C~I.9g> nrA@p@m;4[gڅV Yd}pHҒ5'-c;η\w~4l;7ٴc-71##$" '$NvϞ':sE(/I 'AydR3@B0>Fk=IR (G4g6Tvzk~l,M;aEqmmgUMY^D鑵m J7!$& 6,T- gs@u 0,`=ĦU(!3@w'LOy =ϥd""ۜz cEl<:1%6Z,lX6P(VwZ&sŖz(HpvgTR,ҋu*pgmX@ñ]qfa^۲E5\Ԩ-kmOq+Yw$Xx~\ <TUSj'u"D΃ei%u4ڮzړ5*=|?]q2C<~%{* )p.&z,c~$@&3JR` hK&0GRS~.gX`;1Ʃ*p+r97H""4hݤo`H . M %e(’=9Ğ0_hXڄ뇳& @XaPยrCG)jZ?]녉upnDOJ5ry+ {d&˒k?$췏Z7m[Mo?vۼ5⸫%zvN,}%Y/{6,}Q@Eq )쐮eIJFQtv AXxtk$ƍ.Z w [1/ QR6R>*ΠM]oƋU[,| /.}67L yt5#&e9^+҉# Qs2:d8=QZ+FPgDj:T,8/hcmtQUJɒNdĵ{;//:Gc \ŋTA&4/eڧfv]|v<E.ߙPnm>=aGؕIl7po0(ng}]diKlpR֕%n(^͆ jP|X'NI[ rp PFf80Yޫ)C_$ (y578L|Zo*fmM?`Y:";3"2$$.xyYߗ2iHm8vm,0EmfC!HmncEq64a]pbݞ]#D{olYh tg^}ZwWoZ_5o̖%OIYԿ獏pY)[trvi(ļ)04*I=\{p9yA@Tk7J!ZHW7ZQ .!!,.3W-VY@6f_9I~J(P{ ݤİ;nݞ-\%laGZY dr[{ P{1#nX KP{Og}JOn'CH L1 U{K7*djm|bqo-P1E[PvW9yeE|b $}Aa0"CzoAOy{ZV@Cc>Uo[Ivʅ֐hm^ewEA#`>I6s>*z,2E=$iSZeG, S{=C]j~Q!BM"47rc-w}8 -2k-p9Vpԉ/<2$ 3n4cL4oiW5&= KS.pw+hzɵ%BAFPEE!֌{%!s@9]<gѕp"zVhj3Rײ#DmSZA_퓻K5 S6m.Qn%!PQoH~Kw)J%j7] V$e?mylx:O8(P`hlxÞSHȩyD݉E@D4fY,,t4ɯ7_cAMG%U.81 ҸDnӀw؅6~o[}徐4?a߹Ѥ+uV5~` 5īIYV>?ޢP]J8hژ,?\ K)yKcTo{,L@]4zfؙb۞!Zk U2꟧'חJuqHe-:-n}9Ot~6K d0jd6H+nN];R~ }C{LW)ƚRGΟcPTjVlT{Y4Ibɭ9yP?o˲ֳl(]z8J$6K9 ü5$L.ue@MI*!);}c1u4ȧ3ʠjlDsӪ:0?CG5YiG)J΀&"MqY"YZ kA _K`++l{Vc:B҄bK^)UF Ab)\Dva`݂*wwQN}}3,;7f>I:u mĐ+acC}D}hzu7IX(~4ԥ,̆lyZgd{ҝ"]_~Nh J#h@ }b,؆{ֈEoN^'T@VU5lmse+ɍ 7y,EAD.ڈgAɭ>@lhȴ*Hqnz ߽ B*O$EaQKc0Ҋ&g*qL[6^tC?`'pbiK!Pu]-Acl9*C5kwN(V S2K@טVCFnc5+514=Y*{鞙&E<͞1UN$R[;{^j+y1Xn!F.t?aT)/-XƯ 6 0u1jN^:d/+~Fdϫ_]\ >K]⨀M r$6 D#(.j ڵPfyg=d<`)`V,ޛ) @2^'5FYCB,7u4 4vqmP$ՍH9kYuޥ75 $Cwӓ8*9=YYam> g`'ϸ7GE"xҸ5MNE(-NMLK_8u4oZ0QNNz 8gh{T+\"OH&_d@y~ JIfn3pV r,qv}q!`HQӫ`E>X}k aN3Ϡ}Ggd~l\g `u+d@iDwdW_2 oUt1 =w"$b C9ܜm FgԠ@d67d\`FG5?"6fwrKjT_.q[Rx0?Pau3"H&B?3sH"vHKz_K yQ_\!;< 1~V9'3BEm ;=U[(͆S08r#QSBS`_t&<peѾ `y邟W~M+yi_OH`ae+*E ƵnA8Zmm-yKQ*BZȾ}Hd3RV6G q` EgS$20ޕ8/""+Cgo%p":Vt#0$GU&Űba>λP)Vc4Cu:Ez7ƗS hs; c&,ŕfW3!`$Qs92#3읩ycI"@?,Tpqz cD~yT&C(-|]jď`VaW.oM0 ܌F9aI5.O8MU} L3=5i}e<*ZΎjBx ;:g1sn Qʘ`˅h#lnH>1VJF, R=[!g?|GR9Φ2c!X.$h'R 5j㬒Z#|ޙfMš*YHl YT%#\ת|OL sJDZRֲ!yhmbBޮ/7Y/ƶQk ΛİMrJ5 U.p4w>H"7+W,xI1-,&njxNĩƌGt7茰0Ķ#OpȀKo5|Βarb6wN4ôޛp(1ljp$$|QO&(8-~*ktݼ(+.J==Kgʃ>ZVɍmX"- FlU?SF'¾=v7ˊ*?_uc[ Q* Ys@+zvˮjPJ5Ջ@j2.ktu<sCD4͔!RC(]}-cILpZ-įYHria5%aAb5 ~<bURM#?7eEm)Nڭ)gVIÜ,NWrQgmk{F+n M74ira5 w;mgXzFgMXϸ<<2sE&>UͰF]cQ(nDlСVfi9&r_=6Z ^Ƶr6BwͥZ㧇<(k?P)2E+fPⶀx}ha^=ՏdIe{V>[h:[bpp"DpXD8PVCqhxM ͳ+D=lK?J5geh,)8GFO͔Eqx@GA 1Tv_\Wڒ@Ma"H젝 eGɅk6AVLȟ؉ 9Ovo%@:#wV=Ūa&Zj4׭K6gY§z 0!4ݲk"ٯ z.NmEqW76ҹBh6ts2{1+FAEs1Áاb7Gp?"e,o>&0&4!J[NK}Ýgv]L}EJ z5 s b{].<[ $U/q@9NY$v kG@O`$nJ"px^NdQ T"|CyňJ}l&;ȼkfCs 'sͦOX]?Z"HY ˏLP[kPz~5^Orň#4AZ#r0 6N_bS &t6TE+sO͎DzRVbfWC+:fzdޫI۶K B4/VZ+ioΊKWӢ,669ȪuMz`fCU:t𔡞H]lzÛu>EKW=9O=bb_`nףm#{ⵔ9My*%Uho7q*(PS7^ݦG_B_VX eC¤ߤCKԟep3S(=ܫcO-`=.}Y94ɝֺDqY !14oJ\%gx-a#J7o_ 3yQdse/ 7>(b@d`"AKW$FXĐV J5w0#9-J 6-C5p~۳mkM)C>C`n4qzhIl}iwN;jH j_bYOtijQŜn.ȴ,V\onP[Ӯ_p@,k77s[|)כdbPCrKjpͿ&%a m>7V$MhfsM?+ /߬9 ڋaM{Ů ~6"RTn$>,@-aywP='B@Jѿ67zA?mp{Lpgo P"`??"#fW~+]$]-A1}^k `D?O;݂CF3d BA%P6XD-w͠߅8i Tasco-:gmJwl.1r8:v"S/g/|8G!'chU#3 DbTN;Bue'1SÜ% VO҈U1J毧U3>mr$u /D0yGɲO|LK"JNԛcC*5?}9oMwVMa& U\yv6Lydr_y˿$wLc%M"ȖƖm~Nʋ!3N Hmؖvp]JldpTm+\c()#+nL=^z <\˚O;#Tף˾-XHk+ Ψv+~{"?rܷˆ2Z;x#:>%+Лh@)3 =JL6g׶ ,G!"zHi rm0UĆo!b JXY(eڐ̸EPxP }ct-'`༕V{L%NB3w+jbA [N,$Zy͊IHu&>s400~P% RcҸl4.xsts6O8L$-5z:r+_crM7y]1)8(zc6>5fíhYMYf_Ś@V@ k}<}ʦigR/ `qgFB IsΊ:1I_{?NB_|51,asJA i \̜f@wjks)a?gPHYo7/幰5;AZF;)jBrѷ~J㰞$ǻˑ.)]4m8,뛪Os'x^+/h~ Z=~y(-CؖPY-\8`n"E X'ᾋ#U԰q/\mnw uAJsƝyT1jj{;glvrt8O_ފM=q}D SuH)רxx&Π PHܰGS‡hZwZ VW?vzAFGo0\o 1]0jq)h{ŗQܖG|u:rjf"d+TsR?duy",~7>ӣXO+< T񅥫F" QIMV0<9y~oKlcN*U3d@\Gr7҅3=, Pkp25f&%/]yxM.r=&3j(S^~72#^ݦ%"ۃYjh|. q7*\Щ-{y#^J(_ܘ`1;Lz`,cB+W[r{gpJ F^;%of,hB 26Vf6DQ 9Qy ";SQ0 tOe.1rBg3yVcbfsxԸ1OSaMtY~a W{ hKs;2h bt!r9*m/ޙP"&'E? XK^es;Q7 CP6ez,2tu!5vf4S4A6í 7R5`_~|o#5 }uiDU%{v~ 0+^N$i9xoq9ޥbpM<9Es- b[IH|V=fuPL-nLZؠ/qL>𚣾7dÿ=\LkZa6 SS+`A1isä08W5U߆y,5[ooȩ9^^6Vwn\hgŒWkhʰ ï8Mǟd.FMAs 1Fyxfqx烊[USM<ZsVlRpOc<<{o~D2'jx[k%~`;ad@|J~dٟXc|5ؔ]lG'$y^n&+'Bם)x{1JŻfsFK$ 2PYjV[.T-PEN`jĽY~~xx[_2ɒ g:XOt[ g f?ʫ3B\V}%MNfGh(d1}Y-PH6-s~wR@KL7Y.)s7HqC`*ν4C \ l7:K?R ;XF㗓i=8T'C}zl_zrP2ŬR٘<ٶ| >tm”drEQ*5' Lאg7?-ٌL5V)!8Gʭ­X8͉ 軦9 HCy%F&͍>Γ)9|Yi,Fw`] on3Zf$ڸ z_1ru:љLR=r=]#J$OX=>#ؖʭ#E].3QHm5 |O&qXUgbhz uz4ox5ȩkw}nκC" .6Fng&ktٲ ?P;B!Dگį(Q`"Mm*odkb{,!gs\(T7njW6?>I2b-w'..OdّS-7ôڎ Ac}t1 @&Jggs ?pC"Қ}Z9dL>*8fLj|e`Klз?ʅ=ӹ܅}_RiꦶL{?+ ƊQ45꙰S Eve><$Z+EC'G@OMhzKFNy!l&L; Їݨާ U66 \xUkk|:6_ZPQ(9|[OdQnvwc*|%Qew8lqE+M=P=^ljF+GŘoᇴtGYc7MG¯\scvqȬ8_αE<?Q䋇] /رQV&̐2:)9^"-hZ2FiqvM``KrCX@y %8MHc8o$B7o0;ݨvޅg(<7]#CymOy^}(o~]܉/.WBC 'qizd~O_7BG ,Sd\ͲQΓ6)%\N7n(&B[KIOomvp7C>* ɀNoyWI@Q:^H$A̳i0%a kU{`nk))A3<9x}?0!|$ o\IGau?qz#g^Ó\mN4tk]b7f\u?ʤ @HMGO?WbB?4 x}7 DԻy H^з9D̊ZSQdY7wlE;,J ܷj˷<7cB !aTXfZZu{@LTF/8W7Qs'ip7N*!_>=e*Hֱv oZoIR#HO7+(m~hxߟPGі&Z"D hZ,dʐrRMDP۠6TXeO$ȒfG 8{edǕv2n}o RЬ+?#kr_>CA΄ax-#cϭq}fŭ)jej*]h7~ :cP:5 ~'2Nƌ3z^$M M*!iY|lͿ8,Ol7Ӗ UC6ykpv'V* 4K͓KWKDZ@m%1T"-wn‘_=;tf~7P>GR.sfspM>b-Zbd]Y84ڿts ;.Π<"؀A&"!5=^v4MػŞEv/yy.E$ǧL7%P URTq΂dQpZ-t,%a4':#HtUH3?3k|azO>Ӑ||@´.SnЄ7 5js#MlcI@i@zQ)N~f>E`"h~@f8s@vE/9QY>!TVQ}/KB+'Lb@SM=*?@rHڤ/y]|mSzVabCVa0jm{i);RXlÞ>νFb+5 J;hAD)l)rݜu>h$GiU˭Z䈈'T QwEr(\{gtj*EUxnHZ^"Ķy:2ׯ}q{:h*4]N\'GQ0NL7-Ag8&ez^h봴6;_ѭku"%g9`u-e>W7=w !w/킊̓2W0}sXA2-F|_?fdi1z-V顔!DL\mTHi3GHi#"*xYsjdd/@YO LR k ݞg\}] HJ@yN֫0Ich2ߕAfsg<^)TRsESn16q5+*07o^W2jҘrGpx~4"3(奰42hp \>oE. 3 ZT"JpĄ\j᮪&Y^DP1t j~V7#iefUuEp =0]$sjKye;r*EO"wn\6p "Zbnց'9]ȭ9#0[9E]r xVc@M64៾ѬuI҃ mNNDf)9/;-yՑf"0`F_80׉JMؒn[IfUx:Ss r_\B±+U/C3\n &y>_Lz6k'D[WuV!/$3|io]"IZ ^ z~mCy`l>< Ikic2ꊩ'~+X `һ/?Dw" !o"XL&JMZ.s*)\)ZPq6U!>ff=hxӎ 9BZT!ޜ:+Rv*DgRY:6!O2 Ȏ7%lvɖ*@â9yA0cY. (ytC;FY{+AsÝ֎.xs `a]sg"YGO@q͎2^85b&OmS'eV81_rT|[78a'4ؤ}Z`Gw= `(pSJ;\c}A}BliB̭V.]M;p )zDh0ȼ.\ YBKEI 'iiԠd `";F4|꧜F^uN\1JuaI/8&˛r-@mƴiM R#K ǭ35W jhWBkCJ%U=Nh'YAHSP\32&r8).*mU "͝ͅL =7:S#]+3M p7:OmDžτ )L/|-R虱:#qD+\w? 0.EjW(3 `JfAfV/6}{[Ê哐̠[DN? 5ۗ`F{=qzB;ڴIs2 6&3=̝^#PP]2Zʸ#\ &8W7 T eR.BԝpM `fiԶ1z kl:tiM;֍x`02 n V mOGc'8p˿X[{99V]\}ߠm֐q7] 'sb&=F 5 o%HƗT}1UFYJ08pEZ7B3#{'cP.3䠚@2.ꑡ0"}kU"`-ҴZ*5kf{yQ̝D[rnB1qoȫN mWM7'fI$9)k ;+T<[~45[Cu3 ?$bۅnWro:lS#YS̡2٦ʟC*F}9oCfFLDU@_F)y7f9e.9H(7E vl)~7+PÁsMUwu-~"\>V[Yڊ(LD](z< u\zީQN0K|G*"mY,E$(~bqI &vN?*:Y,VNHߖ`svf 7@,y>T m}Ծ_nVNM!F6jJC $Zs>E6a9mѕwY|6B{)mPn_x\Z_`&hޙyc9JW WjRPN{Eb0C; 0xeԴ.ԋ3#ra-O՛5d^}Up`1c@[]y~r#[BZB;w;G-{A8VA("2 7U|:7zˆD[tqiڒyq,߭2DfwFh _hw v2 A 1G -^1Ѹ8ur?Y7~\6ѡSvM)}O>޺ )5TAOn„&gj;*s]+SʗX+qb /j-)o{2>9݊aq(ED5^wX6 B@'Z0[p<[W`gH=oe4p]\ {b$JmEG r&G!5MChmŅB?鼵 q'4JD\Uw)6gMs h׺V S"YeSnEwa="HõŜمFB ce.@a C }ȥ6nID>>a9z얂q6ˑP3h>z /46YwV$*[dQ2I ,_ǩ412]L1?^3*ZSEnx{ώ?SŇP./" ) ߻wLJa o NjЇgoޟS3& D 3v>@E$h4qMHFc~d$x&qȍs-pkưn5_8KXTqz6#ƨH́w Q\YѴ ) jėŭ!b^8@1RjFP߬_Ƃ\54!dlxjOSudLXHAR\4{I-asR^3L&Ch[-GNߙż~󅷂wGT Bךs<1Tv^ +>͡h^ ~KYbZ4O}YB@yg˸ 4 <3% /L'=0ZZ0PJ7q\ 4[LtwaPVҌ ꗱ W vt"LtzGϨ/')vb!&sB 㧥PqA'wO/0H#KxH; 7k 77`K@(p)ΓPN72`ˀ{Ի#[tlI\B ivS۾#ސ su.jg*zn /ĢOW AlJi;ikBaJwXaz f72ϋU/}S=+`\pO:&O݃za02VEfR)V0Im= j: |yh5]N)y}K,]7NPlU 6t1#8ɬ%P1]ҽP{Wytwt)_LA'ڴUEO}+)'g1o3>_pvmSXZe33N8l`Җ`bTzhj% eag5P,l'u#•\ 1f>6C=75g-S1:JOS4zDȿB޳d%~2x5JgΡ/SS1@+˷D|&V*QrscrLŸȟM85uH!5F<.Њ~jv$8O +Ha~`2wX *;eMr 65lsa/x(%:KLo]h~lTCzqR@l!NĠxtt,:M#> HfgG~3`2>W):&BK?a5R??h:H'h3\G_.Lp֋ ;;57н7M/{ T]^~*\Oj`p nv eߩ;aoL"GcL@;liԶ)׹I7Ȝm/58#Z6. KY:onTE&R izhX837WO0adD^s8x gpƏ{3dZ^.j%)E7c(NX8 O-jnJ2< W}cK,{f&SZ4UpvSx83tO|6.h;[av jifj:ݱH'%%xNI A<ѷP9 7ZS9z^< B콳RY-c˽Ad$xv®_dS6x`l2#qxRSEp,1'Tqʆݹxxy0Q)1ԻjT|e {Bn#+Zrŵ)OF #<%XDbH7K%qp|OBKXbT!Ch,a;ݣ0y# '2/{ߛ[Dɪ婡)v+ =@bg"=)P \6jsW5t6:T". j``<.;[T_]%|.݊Tv͟T|29G! b'M9{ޣHכU0-[^ XQ\"?>TdZ7X7qf|v;6BNr/wקMI/'#Sl4!tG"2ME97Q_\K6@f=x}#]9co>lcF9_SM}gn7_!kq pѻ5Twۥťu<$(y{,8e.]nː8hx!,zrVr8֟\ЬuJeĆƖ4qy}Olː$x|?WZcOP'g\'U!098tYLJUt؞ɚ%@ߔWkH1,mք 0KW%Amn[c-ZB Y.׋Wqs/Ԍ`L7,ͮH=Fho=#LKɩ1x'.7tQ?*)/嚧rJ_lW*Maz7ϱ ea[[V*4QF%F;pU!ΛvٿY;!qWy ׇw$]d 1+;68X)ERɫ74yetV]6D5RSYHV<|R[fJDŽ2NèA]/jM˄$bs[}QRy 8>7#Ҏ)O TL%7tdK?nUe\(lC8Pgx!a;*@P5ɃJB>Va1<8ĝ`9!M5ff+q-1׀4ElY>b4 6}[U\Uݖwx+eʚHVTmmQqD qWս s|C*r9s͖i]; b(HGdxRSuwzF޿зj޻ d|RgM>f.^jςHYed`O\-mzEGO7"gg|}ϬCc}^5b("k:W5w`CԃĆ< JEfWʅ|!Mc(Q2sT};9~0u U*M ՗cK|ɨ%9X0s9hs2"}_p,9Ǜxy/babp_z1̍Y4, ?"(u]O8)ևG@/C.?ˈ U3w A?QJfjwY U`~y* SSrLQgaրbl O #.EM{y!: ?t^9wA؋Hdzd9A.N1WJ-h!%m/W&XM؝X2Y>0 YZsurvey/data/yrbs.rda0000644000176200001440000005360414074415513014203 0ustar liggesusers7zXZi"6!XWE])TW"nRʟF X&\NS'x\Š意F-V/ˤ^8 jWwo,+ͅ›# ݐq]b\d \p E}8J#gk(+GHOfP\Q@WPb-u>8ȜB1pWYͷ/FE1{G*sҖCR.beiS6Z6H@*L3+bh|"uw"RU3fA窥CZ%NGf䄛o5h g+L b'Iwћ.l CLq0@gstȭ&2r*d#O)_K'<؁AVwF^m>~y6^Ƣ\G#?nW̲WITK \]v-.L a.<'WKGLO6,#ss~ed[Sߛ4 EF[ZDTOy./CS(G>2X@n;!apE J+pa} Tb,m0>=?7DYJQ|?eoԍIDy=9g[%&Ly)7nj, L,wTxG؈ S,EW|٧&J-XJrⴃ^%2d$ m|p-:=CN 837|[]J'8Y+=!X.-9j%cZ5Y3Hc3Op'`UC`zTA (KidF.'{%_mԖ{vq٩9v_yL 9NUW1$f`Aw3WZC{ 2/=+6kQM^dOKJ?H~cWa5uFڝ!\;Grv1rDZ8.|: 9b & ^#eI5 +h_#3 =5KGe¶rTI\ΔzZaʥ7N_%oߞ#]Oc̓ٽمI1Kp 4[cvv2&~+T.^p #$ 1',9[::S9>+!2E2ڕ-f9z[ANjnNz} K %HJ`GP^sSßrw>xjj1x3cnAXH-YD=rݑnZ4+- o)mL4Sq p "o V7{ȫ$^QϨTagudP?SCAm-h= Ww8ܪ}D>, r at*|7s PMexM߹R!C"ȔiKOLѝgOgu/2 IӁ":@ RE=Az ,`9y.|(_ܩ (0ٞFc\a[jMx_!Ht_;t%"R=4<w8ݷ˶+~qLޤL[3n4wQt 5ŝ.v )3O]n̻4 2ufU/SWgB O>ql|j 6&GLe9>R2dەݝicuun8% o(&WL$ {kO3 2:-1+WTqH,o%BNkބlǚ%/?Cson O&JUod_Frlfq4 hf{6FW㚅%O`>X3ͼv'Wl1sߧ̿^-0?JNYKsYMJ*=OѢC|A,,ˋO}Œec$l!sW`:(zxRʝ[N@~}ZӇ쓒[*2@X?B]% |H|5( / ##[7ܓwOR\K=?E''aIqgsܺ7C<+!k2u{!3FϺZz3͑ K/K]@D e:+v7}e$)l+ڿ9mE>@%1p>q_)qS7ẔC?Sinb>jł=D]qM %' q$xW(-1ynJjߓEʉ|*׵Y/U7!QB4kDvH&G P$m8BVwn[aE;|֗ s5﫼HInp G3Lo΍Fp 90i[P4/E+k4-jE@6\@EE7sԤ%1(X3MY- 9M\lw уi)|ÿo% )08#}9ug6~\DB觇d`u ʑk7NPƑϘi0`d٧7C&Y 2Rh(g|hh>,)A\̶ J I/SA,UHmO\eL_ ݂ bB"<]@ͫLlG\+u)egjnq"ՙ#c}X8$pX(i E0n%v/O$O>"54{g-#0ζJL5ؽXYE*og :Gs S g(q貵u]"dQ0B+OqvNwڤWrl x9Kgs>tq*O5a>6e:Oq3 4ѽE4Y4܅:ڰC][犙!ɝ"UG SߡIF?fR M #Ϡ}V) 4a\PSGNmC.e;LPD[7`A2!,j5JXJLSFQIԗlk=?ǫrY9 "YxWBma0%e'RpKZEZd8/MImeFC #w&*յ\6؃J5֣.*9&,hqiS|l-H\5BGSNVaMeMiwSD-E5#qwY5c8 k$ x˿wQС@/`uLC!9¹fsf PsJg'1ۛ-NhmTIѬgDlהKG`Jj+JV}%1K4 hqlJtWd_ jjG ;/Ox]+ɿٕ^\c8:~i<R)nJ2GDAPUv]OÕ:E6A̮Sfv:Qm=|B=l82#U|05ns =D#oKS%GՈWP x@?sB^_im!(L[ ! f1ePzt}+~Y>;s38/|O}qm$KH%j.KiY)OZN2r#R(;^r}zp F-ꑞ7g G,UMl )0_S#[=3b~d\l{]Zȡ嘇'WR%;ϽIK/RpOrm,r*qNl x?4y:4st`Yj d*{%iUqDg^=wՈŪ\p;kݭ~f&]ݸyԼajЃk;5J*. 7Vq ܢ>|$6]Bc׈vwţ\'g Hl#l,UJT}§e͛/[d'mr,^[̙Ҟz2O.J'(H?lLʓO5m|{:߱߁xk?K3.Tm+296izYknRyrl'Ϥc"aТ [+ˆ&r@yݺ|r0z)*OF/.#Nr9i;9$u"1 -1F-nYkL$pin9V? x=#u D9}X^(9-R.:DR"z0bj,Wb[?c{L^ѭȃ*zkF۠x`bĐ.AtRgYxV?躿 AW-yNq6:4]CqiT?h0EKmH&b@:bЭ 3ajbFq # fP*t7vFMg K5#&T_Jz6XFegpJ[Th.p؆xn𠡾l})Y?΃YĐ8SmЙQ^Esדl |1AyI+ 1s(6utW7|Z1Gx˲:v"ue[VLz=4o"_=mQ]''*(En6I' As V pAgа؏e>K`}nLeVگb:Eѩ%z?Q(c(;,ڮߎ5J#N n7|3 MfLMLjYD"vB9OYt6+L0-m4DFU_, C5&8'Gz\\-P 9"kѶ%= _(OPFgB'e,Nbݨ.<YG\!#spoHޞqgRFX7riDJ,!~Jo7gX.:b$Gi|Gܖ:\Hy{(ܧ+"!4@G8]vL[gp5֧F^Ho?ل2([EaN/G6Vc&q|bQvJ<=%WRqjHwV2%6h3c R'3fū6bly1;A0=>>݇d8"3/jӨoKU 2Ad,; l|Jι/q(+Z/|AٻgDm zot'Qtow6pF_K?+TѸ%*>M~v>ţ8O{BЙo;vSyR<19T^?Ƹ+A8hW_h&T y@-P6AFzGvjSqE7 jm'z߲h t@m*4SQHin9OdwnβgPsg߷HmIaMOp>;J&,ޗhF**=a)Ibɟ(!<B*?5-EqAA"]oL)&Ϥ]UjzV/EQb?yUAB=r09cD0W.shiO_87&qTjÀ-(A>eeV$ Oh(~LȐW e7Mc ɤV^g|~.N!nUfp~a7kNB ۳ؒP+vt_&ĘS훖9pT=Qk-, 5yyBlː)RD"N}%Jڀ148jV6x_#ZR]2@]ً('f3#b?O4Xq,AtBKBgzqb~_z'/Qkw'BF![oЮc(3nSuޛvtYHciz7quJXnIq[tro:;>} \CUP>ō Iշ]TOgXyQB;p_۲EןYxNj7oe@\W ۵M:5;f9+p?#Z:W=vB {YƽZ6(*$ԁJ35ɺV7XwcT_I,^=&Vmr[΃Xo 5y=EHPᗿF1QNUy8V%;vKW ҈? ##M}֢6($5V琚ؠL臸16?wxZK] 9I*̭%:/s}p֪E& %Q OBjӫߔb_hgmvjWN+т5A,mzSW|~?kSES B,ÞV)I$ơָaѧ | BFGNɀ6!lЏA-lQs:˰Qa+z_xV+m5hL^$'XNKؔxxeW џrg &B|L 7rl[sHCW%ɰKGï\&)TAEeV.xb̴дai5D?dы j^I Y9b}(<]fl֡1PϹװGSPڍDbbnOߏ{?Cm@pUoʆ4Ri6h X`s<Ձ (TN:1H@&gͳ!BDzpYf?B+=/B, Ek D3>J# HhOIljEoD@M*I-m52Hs1Y,Yw`0%YDE7_g*Z Ge}] 'y4dgMz6 V Ýrڠe&{o @'qI ӀmX:x_Э1?)ֶ B%vri+sGq>yKi* pc1xCAnΈ.DmC2qEx(SM[n,yF&;̋ gL3 (ZWjGoK@q!WjqAF7u.|cċou7b_L<HCp6f&)ㅐĘZsx'[ugӰ|e',<˿u'ips^5'7Nxi ҄Ͳ }ǑeUC186tJV3(:['$61h )vsq7J)Ak&`6Y2"h՛u<%yJzq.6ѥYJ8bÁ"V108[p!Vb:V@wD`&燙Y|g 3z#S4VwAOM6|\EMCJVԦ`TzWW7ʗ[r0f-p2GQMI7}Shʉ@|2((_ҫ*e!m+0 VqюIYPn4BmUe]Uv$"O#y T+{Bx{v9y]/C6"p,?;Vp WnwuVKLQ W6t@^C{VL#k{˽RI t*īFC qk$Gf| Qć1^.CU*2;0@ ɾY s{`bUEh$P6jҸ6KT25S{ndcOiA*]ϕt }`0%;bk1XorgnW.U@A|ߑ[r>U *Z2VG6aeFw,SzV֥lzɰps~7Ƅ/-Y^AhĴEj)HdB/6$C#r&\ZЇCTG|/dב3/hQf)ϫrK/W@ /%zsgSŮl…ty4#ONnkGJh?(ż8 c÷ϗ0,z b>~-v3n-/LxpTG?BU%a,WQ(L5*o K\o"p-)ǢM&]u;|7[δ*U^ՙ2;A#T!wNz\)⯌C]bPⲠȜaqWjXL)Zp+KZiXyWe(̫W揑U?(Po~v+3hu'ܵ>IY0zjji<~KjmrqQ$R:!Tw.Ј{R0dX9?XWADST/Xء Ȃ77) aV5H&W DRbxdxDVufR2=~E}ԽY-R='a+QK+ђZnq/|e,K|qݑk祣KLSiS8eAR!O-RooV7o#'Yn/-0Gl!;UTr,p|Fܟu-Us{# P8)cd:6B!CGE61˭D!KoߪSeppYk3YH]AP;TU1ϙbmd ,Bb@mG1߉LLΟɾ:[oE,eN)lU<eXypc#LN\}1~n'14wڃ֌$788hz #.K/| z UފhD+S,^pX MZ_-/Q6>2bFDeNG+'ԃ2AE88S;uW!v,ȩ5f#Pڻ;@ K,̤okZH F#+#q19|5/l~t`~n)nN"PAFUi+&L~ڍmDUlZ|^,z\.;V5Òaq[T6殠N?Wi+bȾX_Cي fp9כ\4 2=mD=?Pfg!;8'kKvB siZ9K͞Gv=Hk }竇-ǃHQ3*) {ZBgA\ yOemrFw ~kxFE~ f#_MTnB89lΝx=YU >O8^HADlH&a38>y"5rwbGc5jT89Dw \IdZH3>f юl"La vSB ܟܡ3Ԕ(⁜Ϧu#T&]u`4|NA:pd픳!-XI*yaLϗ<kn8:;jiWM؝A%{bQh_RôTw- [d#v_C8f+\' }[56Je3XzɆL (~C ]%c'n0 QUo`Y/'fGz5mv6?S̓e}`n٢/ Sw~azJIjEt emFAcb*T71ȣm.LJ `z뫶Sl_ihj&{eb6QA %et0oB5jN"d|bI!.azkG(=萂#Ȭ8(\:،9o5*Ə2e+T!0:Qry738`&1(5 }v]a#~Os["AZ=CoarTIjķ# ΩmDoM4XbS:꠲r mSggar!=9ZD$o7/9lb<ҁu5Z`H2K<ȩc5JΕ AeV7+ [[p7@VF4 &1Wڂ}E ~JUѿ}=aqjW;})㠪Kxi2igF!Wr;_9g&xvM$e;YY !(L\) ɞJr"DFpKa@jQ=1vK!ҳ2G,,jrgJP;ڤs~$O[eYqE#ʆx2W2B+n2gX=lZ:+ԃ0_D+wW,t3ETE\cs#w}ğ ֲ&1,d\fW_Q"ړ[3/v1L^C{DتDd|s7^cz[kjg H[jq<:߰-n578ڢxQ! ;vm"owcy^onYFfϦK-Cщ'AaWR|6&7hl^C&5Z ^k"Pr' XPQ3^ը] 9`J`V3 \OH3\>7w͊ Ht:o7VneHB/.*7FwTzRӒLj.Tp%*ע$ϜMG1cwNy5l5T8~hPKrfU3HSXI?8eKi !, 0Wqj 'ZY E۶(bw}h6 &)Qو$ CSNYh.h,*qJڮܿ\]O^-4L6\M;in]v{V_V7q \I-ɌjgݐkLX\@-lh@H ;U8,ZS9>Q,^bDHA Dc)9:rǀŠ Dcn-kAI+Po,1Y" {\`AK@HVʮU0ݬFi*h4x2Me1(t?~Y#"Ύ }ElKSaGhX!-MT~Tp;qXQQ"/$BG-H%dUC51Fsr+)~ϯut-ocB<)t9Yƻ;*pNw)zT fU!;V[.6= x54DDZ_Z[[lJ,@H>U2.p0aRѱQb`DM@2`2~S!O y[b.lT# eqX)I'ygQ^AMP4^6lT:8y4A4nxwfB{:>{%MB'|qO?Q.v#qݻUu.L-,Ϧ$3mf dp5Oep9^ސ ~_6#Kg%],)r2O+X .6NՃ8 ֜Y+xBIƵBڻ'T#X(pFheG뿕;֤>h|tr}E>~4EìBÎKʒqSڒobMi̴XhH{#Tޒ/[ri.A|ņ'Z3) _زf6 )PSl\,d'F٣Af "mC ҭV̀&,_V!g)h{vV4Ԝ[s1r1u_n*{L L֮>ngH"+@bQtHy)DtI5-S'< ݼ3 @l8f7Q[.m2&6<(Qg4,g1?>RN$w?0])s϶*lRW^f 8Je)IF0hh^d$<:g9zJgfw|e8B qqG)2gGlk6nT@yLYp:f웬CJ4e%S9qh^NQƋzK҇-X$|g|þ#1,M~SӒ2Ǹ) fzǐIʄ4]]*{7hmL)k3͝L.$t7 6 WU1НMbuPj;pqHVs'R[SӑBzXa}HӗȖC&~_+Y4j{.$v3eQol pƩEJ $gg֣}V\}2ʹ0E? K95;b@[1ݮ~0du >iZɞ@]XiKxMX?Q?OCYcP#FhAo}(8Y^7܎*,[_PTO{aaRU=l78ZcYF+]<C7UYOqGشDӷ9r{%թ.?mӝ_}Pza CcLy!sާ|\^y3~N׼EZ۽h*hVtx?06ltcp]9#8jgqNԼ> ؝ƍt ʹ☻d.~*_)Qe%\Uc }iPk`.% +E>`dyࠇnD;VL'x8ؔ;mxAt>6<{, )$߂ 3Q$-蕮+\;۫:bOhkf4m@Q4BL'7 Wd>H[1^p]'u7Zޠ !ǑLl׸|q{Rڱl71gTLE*#,ssm}Wq~_ ODg&Y>48e3N݃3%^/ng(:z AmiϺ>&TK˭HRkueCz,-;$4ϯb `CAVYr" ւBʰhDl(,aoa?܏ˠ]"Q \@PY tU _{vyx,Sc6ےmWNtRR3k4@b]qMBC%x ,]]$Db|@񘗆Lfa}x}e\8p0_N-egY6` W#XHV{cծ*0N5!U̱,L,d2fgR-lNؗ5o{Tz%PcϞ]>]׵0铙Y#@N r.k١3^'QA<:h*kn] C9 a*6V:}uڏm$m# f"9`o+;Xc 6YYG xKFvo~)=ocG#&DU 񺷊Pf;[Vvsh>N.=[a?+džK^v<ݸDG蟓c5QB#ȃN:aO#9 #*t-8ā9?Vo|SRɤ-?6U-9@c<]%l 4oJ-/vDZEu)U"%x }6񙴟knYv}qUEYg(6EKY(5+Z+vc|jVo"tm>o{0ÁELV h#*&ΌNQ;&օR'n3`ݽy# .!΅@0AvbMXGYT2{X @/eg/ O$Hb]`!B?"!y>xs(scEfySidg:"+*zyH.Ay7v43v#W?/e7*ɡ&&yWc} ̘N ~%! P-C?]렄g1b ,q =[_{:2(P2Zl1H{h,*b*C9j쵐)Kz;p_:|G 4(FGh]=Ô S?Lo%ଗ2)B [S#0r]+p-<^+]88_M$7qb Vo"2)?vjZ%~<}B8" 9njv| Qwe*}Uv! H{XQ Jf#ow \20H8%cRIwP[!#fՖ +8%tNjC-2 QOJ!9#+0ҁ5Q!G[AѪ]/o[o3#(OWg^X]7L0\-H jZ6[D~p@$'qj$Dx0[F"Ml\L yDv&NM ڴ iL@04M( YBHp'R:marE.3'Kv Gax26nQV:ʼnU1Bh9AN#5ȷ(ǫPA-"޶ A9Zhh&WԬ6]9}@'hm}6Gj-!ښ0 YZsurvey/data/fpc.rda0000644000176200001440000000055214074415513013766 0ustar liggesusers r0b```b`B&f H0y@9 H l@F7.8Ṕ#D `戠ڋa>=8!Z; 7---N(-mlL+Ayg\`Ϝ96%*YsS ٠%E%)05ťp[yjfzF ǔcXhvp$$$&@I;$37U$1MWiVtZSAsgYbC1McXD]Ysań^Z0(\9-pb01a 01a 4+IL VÎAZ$N~|9survey/data/crowd.rda0000644000176200001440000000030614074415513014331 0ustar liggesusersuPY 0b B!.' ot5%xI`)ͼ7;^ꪨ Ƙ` K}~5w(җ &?SvPhWEyYg{"#3w/csurvey/data/mu284.rda0000644000176200001440000000051014074415513014067 0ustar liggesusersRN0ulAP$>!@v+`@b""%/ӳ|M3B;8x38rTrD``)>1q ` p9Gw}{%5D===9 :E ڮ'[1:5}{J[d5v)T! NMNQJh1ILN_> ܨAV&ZMh 5DktڭվgvTELݛ&ˍs;#-cHbhi&㽉M1)}l337fsjڥM+ȇsurvey/man/0000755000176200001440000000000014074414734012372 5ustar liggesuserssurvey/man/update.survey.design.Rd0000755000176200001440000000361213517621725016755 0ustar liggesusers\name{update.survey.design} \alias{update.survey.design} \alias{update.twophase} \alias{update.svyrep.design} \alias{update.DBIsvydesign} %- Also NEED an `\alias' for EACH other topic documented here. \title{ Add variables to a survey design} \description{ Update the data variables in a survey design, either with a formula for a new set of variables or with an expression for variables to be added. } \usage{ \method{update}{survey.design}(object, ...) \method{update}{twophase}(object, ...) \method{update}{svyrep.design}(object, ...) \method{update}{DBIsvydesign}(object, ...) } %- maybe also `usage' for other objects documented here. \arguments{ \item{object}{a survey design object} \item{\dots}{Arguments \code{tag=expr} add a new variable \code{tag} computed by evaluating \code{expr} in the survey data.} } \details{ Database-backed objects may not have write access to the database and so \code{update} does not attempt to modify the database. The expressions are stored and are evaluated when the data is loaded. If a set of new variables will be used extensively it may be more efficient to modify the database, either with SQL queries from the R interface or separately. One useful intermediate approach is to create a table with the new variables and a view that joins this table to the table of existing variables. There is now a base-R function \code{\link{transform}} for adding new variables to a data frame, so I have added \code{transform} as a synonym for \code{update} for survey objects. } \value{ A survey design object } \seealso{\code{\link{svydesign}}, \code{\link{svrepdesign}}, \code{\link{twophase}}} \examples{ data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) dstrat<-update(dstrat, apidiff=api00-api99) svymean(~api99+api00+apidiff, dstrat) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/pchisqsum.Rd0000644000176200001440000001125213706523157014677 0ustar liggesusers\name{pchisqsum} \alias{pchisqsum} \alias{pFsum} %- Also NEED an '\alias' for EACH other topic documented here. \title{Distribution of quadratic forms } \description{ The distribution of a quadratic form in p standard Normal variables is a linear combination of p chi-squared distributions with 1df. When there is uncertainty about the variance, a reasonable model for the distribution is a linear combination of F distributions with the same denominator. } \usage{ pchisqsum(x, df, a, lower.tail = TRUE, method = c("satterthwaite", "integration","saddlepoint")) pFsum(x, df, a, ddf=Inf,lower.tail = TRUE, method = c("saddlepoint","integration","satterthwaite"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Observed values} \item{df}{Vector of degrees of freedom} \item{a}{Vector of coefficients } \item{ddf}{Denominator degrees of freedom} \item{lower.tail}{ lower or upper tail? } \item{method}{See Details below} \item{\dots}{arguments to \code{pchisqsum}} } \value{ Vector of cumulative probabilities } \details{ The \code{"satterthwaite"} method uses Satterthwaite's approximation, and this is also used as a fallback for the other methods. The accuracy is usually good, but is more variable depending on \code{a} than the other methods and is anticonservative in the right tail (eg for upper tail probabilities less than \code{10^-5}). The Satterthwaite approximation requires all \code{a>0}. \code{"integration"} requires the \code{CompQuadForm} package. For \code{pchisqsum} it uses Farebrother's algorithm if all \code{a>0}. For \code{pFsum} or when some \code{a<0} it inverts the characteristic function using the algorithm of Davies (1980). These algorithms are highly accurate for the lower tail probability, but they obtain the upper tail probability by subtraction from 1 and so fail completely when the upper tail probability is comparable to machine epsilon or smaller. If the \code{CompQuadForm} package is not present, a warning is given and the saddlepoint approximation is used. \code{"saddlepoint"} uses Kuonen's saddlepoint approximation. This is moderately accurate even very far out in the upper tail or with some \code{a=0} and does not require any additional packages. 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.Rd0000644000176200001440000000524613677711154015271 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)) } % 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/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.Rd0000755000176200001440000001717313743475476014562 0ustar liggesusers\name{svytable} \alias{svreptable} \alias{svytable} \alias{svytable.svyrep.design} \alias{svytable.survey.design} \alias{svychisq} \alias{svychisq.survey.design} \alias{svychisq.svyrep.design} \alias{summary.svytable} \alias{print.summary.svytable} \alias{summary.svreptable} \alias{degf} \alias{degf.svyrep.design} \alias{degf.survey.design2} \alias{degf.twophase} %- Also NEED an '\alias' for EACH other topic documented here. \title{Contingency tables for survey data} \description{ Contingency tables and chisquared tests of association for survey data. } \usage{ \method{svytable}{survey.design}(formula, design, Ntotal = NULL, round = FALSE,...) \method{svytable}{svyrep.design}(formula, design, Ntotal = sum(weights(design, "sampling")), round = FALSE,...) \method{svychisq}{survey.design}(formula, design, statistic = c("F", "Chisq","Wald","adjWald","lincom","saddlepoint"),na.rm=TRUE,...) \method{svychisq}{svyrep.design}(formula, design, statistic = c("F", "Chisq","Wald","adjWald","lincom","saddlepoint"),na.rm=TRUE,...) \method{summary}{svytable}(object, statistic = c("F","Chisq","Wald","adjWald","lincom","saddlepoint"),...) degf(design, ...) \method{degf}{survey.design2}(design, ...) \method{degf}{svyrep.design}(design, tol=1e-5,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Model formula specifying margins for the table (using \code{+} only)} \item{design}{survey object} \item{statistic}{See Details below} \item{Ntotal}{A population total or set of population stratum totals to normalise to.} \item{round}{Should the table entries be rounded to the nearest integer?} \item{na.rm}{Remove missing values} \item{object}{Output from \code{svytable}} \item{...}{For \code{svytable} these are passed to \code{xtabs}. Use \code{exclude=NULL}, \code{na.action=na.pass} to include \code{NA}s in the table} \item{tol}{Tolerance for \code{\link{qr}} in computing the matrix rank} } \details{ The \code{svytable} function computes a weighted crosstabulation. This is especially useful for producing graphics. It is sometimes easier to use \code{\link{svytotal}} or \code{\link{svymean}}, which also produce standard errors, design effects, etc. The frequencies in the table can be normalised to some convenient total such as 100 or 1.0 by specifying the \code{Ntotal} argument. If the formula has a left-hand side the mean or sum of this variable rather than the frequency is tabulated. The \code{Ntotal} argument can be either a single number or a data frame whose first column gives the (first-stage) sampling strata and second column the population size in each stratum. In this second case the \code{svytable} command performs `post-stratification': tabulating and scaling to the population within strata and then adding up the strata. As with other \code{xtabs} objects, the output of \code{svytable} can be processed by \code{ftable} for more attractive display. The \code{summary} method for \code{svytable} objects calls \code{svychisq} for a test of independence. \code{svychisq} computes first and second-order Rao-Scott corrections to the Pearson chisquared test, and two Wald-type tests. The default (\code{statistic="F"}) is the Rao-Scott second-order correction. The p-values are computed with a Satterthwaite approximation to the distribution and with denominator degrees of freedom as recommended by Thomas and Rao (1990). The alternative \code{statistic="Chisq"} adjusts the Pearson chisquared statistic by a design effect estimate and then compares it to the chisquared distribution it would have under simple random sampling. The \code{statistic="Wald"} test is that proposed by Koch et al (1975) and used by the SUDAAN software package. It is a Wald test based on the differences between the observed cells counts and those expected under independence. The adjustment given by \code{statistic="adjWald"} reduces the statistic when the number of PSUs is small compared to the number of degrees of freedom of the test. Thomas and Rao (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). For designs using replicate weights the code is essentially the same as for designs with sampling structure, since the necessary variance computations are done by the appropriate methods of \code{\link{svytotal}} and \code{\link{svymean}}. The exception is that the degrees of freedom is computed as one less than the rank of the matrix of replicate weights (by \code{degf}). At the moment, \code{svychisq} works only for 2-dimensional tables. } \value{ The table commands return an \code{xtabs} object, \code{svychisq} returns a \code{htest} object. } \references{ Davies RB (1973). "Numerical inversion of a characteristic function" Biometrika 60:415-7 P. Duchesne, P. Lafaye de Micheaux (2010) "Computing the distribution of quadratic forms: Further comparisons between the Liu-Tang-Zhang approximation and exact methods", Computational Statistics and Data Analysis, Volume 54, 858-862 Koch, GG, Freeman, DH, Freeman, JL (1975) "Strategies in the multivariate analysis of data from complex surveys" International Statistical Review 43: 59-78 Rao, JNK, Scott, AJ (1984) "On Chi-squared Tests For Multiway Contigency Tables with Proportions Estimated From Survey Data" Annals of Statistics 12:46-60. Sribney WM (1998) "Two-way contingency tables for survey or clustered data" Stata Technical Bulletin 45:33-49. Thomas, DR, Rao, JNK (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.Rd0000644000176200001440000000777713517345016015651 0ustar liggesusers\name{surveyoptions} \alias{surveyoptions} \alias{survey.lonely.psu} \alias{survey.ultimate.cluster} \alias{survey.adjust.domain.lonely} \alias{survey.want.obsolete} \alias{survey.drop.replicates} \alias{survey.multicore} \alias{survey.replicates.mse} \title{Options for the survey package} \description{ This help page documents the options that control the behaviour of the survey package. } \details{ All the options for the survey package have names beginning with "survey". Four of them control standard error estimation. \code{options("survey.replicates.mse")} controls the default in \code{svrepdesign} and \code{as.svrepdesign} for computing variances. When \code{options("survey.replicates.mse")} is \code{TRUE}, the default is to create replicate weight designs that compute variances centered at the point estimate, rather than at the mean of the replicates. The option can be overridden by specifying the \code{mse} argument explicitly in \code{svrepdesign} and \code{as.svrepdesign}. The default is \code{FALSE}. When \code{options("survey.ultimate.cluster")} is \code{TRUE}, standard error estimation is based on independence of PSUs at the first stage of sampling, without using any information about subsequent stages. When \code{FALSE}, finite population corrections and variances are estimated recursively. See \code{\link{svyrecvar}} for more information. This option makes no difference unless first-stage finite population corrections are specified, in which case setting the option to \code{TRUE} gives the wrong answer for a multistage study. The only reason to use \code{TRUE} is for compatibility with other software that gives the wrong answer. Handling of strata with a single PSU that are not certainty PSUs is controlled by \code{options("survey.lonely.psu")}. The default setting is \code{"fail"}, which gives an error. Use \code{"remove"} to ignore that PSU for variance computation, \code{"adjust"} to center the stratum at the population mean rather than the stratum mean, and \code{"average"} to replace the variance contribution of the stratum by the average variance contribution across strata. As of version 3.4-2 \code{as.svrepdesign} also uses this option. The variance formulas for domain estimation give well-defined, positive results when a stratum contains only one PSU with observations in the domain, but are not unbiased. If \code{options("survey.adjust.domain.lonely")} is \code{TRUE} and \code{options("survey.lonely.psu")} is \code{"average"} or \code{"adjust"} the same adjustment for lonely PSUs will be used within a domain. Note that this adjustment is not available for replicate-weight designs, nor (currently) for raked, post-stratified, or calibrated designs. The fourth option is \code{options("survey.want.obsolete")}. This controls the warnings about using the deprecated pre-2.9.0 survey design objects. The behaviour of replicate-weight designs for self-representing strata is controlled by \code{options("survey.drop.replicates")}. When \code{TRUE}, various optimizations are used that take advantage of the fact that these strata do not contribute to the variance. The only reason ever to use \code{FALSE} is if there is a bug in the code for these optimizations. The fifth option controls the use of multiple processors with the \code{multicore} package. This option should not affect the values computed by any of the survey functions. If \code{TRUE}, all functions that are able to use multiple processors will do so by default. Using multiple processors may speed up calculations, but need not, especially if the computer is short on memory. The best strategy is probably to experiment with explicitly requesting \code{multicore=TRUE} in functions that support it, to see if there is an increase in speed before setting the global option. } \keyword{survey} survey/man/svyolr.Rd0000644000176200001440000000337213517345016014221 0ustar liggesusers\name{svyolr} \alias{svyolr} \alias{svyolr.survey.design2} \alias{svyolr.svyrep.design} %- Also NEED an '\alias' for EACH other topic documented here. \title{Proportional odds and related models } \description{ Fits cumulative link models: proportional odds, probit, complementary log-log, and cauchit. } \usage{ svyolr(formula, design, ...) \method{svyolr}{survey.design2}(formula, design, start, ..., na.action = na.omit, method = c("logistic", "probit", "cloglog", "cauchit")) \method{svyolr}{svyrep.design}(formula,design,...,return.replicates=FALSE, multicore=getOption("survey.multicore")) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Formula: the response must be a factor with at least three levels} \item{design}{survey design object } \item{\dots}{dots} \item{start}{Optional starting values for optimization} \item{na.action}{handling of missing values} \item{multicore}{Use \code{multicore} package to distribute computation of replicates across multiple processors?} \item{method}{Link function} \item{return.replicates}{return the individual replicate-weight estimates} } \value{ An object of class \code{svyolr} } \author{The code is based closely on polr() from the MASS package of Venables and Ripley.} \seealso{\code{\link{svyglm}}, \code{\link{regTermTest}} } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) dclus1<-update(dclus1, mealcat=cut(meals,c(0,25,50,75,100))) m<-svyolr(mealcat~avg.ed+mobility+stype, design=dclus1) m ## Use regTermTest for testing multiple parameters regTermTest(m, ~avg.ed+stype, method="LRT") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/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.Rd0000644000176200001440000001311014073761445015304 0ustar liggesusers\name{anova.svyglm} \alias{anova.svyglm} \alias{AIC.svyglm} \alias{BIC.svyglm} \alias{extractAIC.svyglm} \alias{extractAIC.svrepglm} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Model comparison for glms. } \description{ A method for the \code{\link{anova}} function, for use on \code{\link{svyglm}} objects. With a single model argument it produces a sequential anova table, with two arguments it compares the two models. } \usage{ \method{anova}{svyglm}(object, object2 = NULL, test = c("F", "Chisq"), method = c("LRT", "Wald"), tolerance = 1e-05, ..., force = FALSE) \method{AIC}{svyglm}(object,...,k=2, 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}} object. } \item{object2}{ Optionally, another \code{\link{svyglm}} object. } \item{test}{ Use (linear combination of) F or chi-squared distributions for p-values. F is usually preferable. } \item{method}{ Use weighted deviance difference (LRT) or Wald tests to compare models } \item{tolerance}{ For models that are not symbolically nested, the tolerance for deciding that a term is common to the models. } \item{\dots}{ For \code{AIC} and \code{BIC}, optionally more \code{svyglm} objects } \item{scale}{not used} \item{null_has_intercept}{Does the null model for AIC have an intercept or not? } \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) } % 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.Rd0000755000176200001440000001076613517345016014717 0ustar liggesusers\name{svyrecvar} \alias{svyrecvar} \alias{multistage} %- Also NEED an '\alias' for EACH other topic documented here. \title{Variance estimation for multistage surveys} \description{ Compute the variance of a total under multistage sampling, using a recursive descent algorithm. } \usage{ svyrecvar(x, clusters, stratas,fpcs, postStrata = NULL, lonely.psu = getOption("survey.lonely.psu"), one.stage=getOption("survey.ultimate.cluster")) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Matrix of data or estimating functions} \item{clusters}{Data frame or matrix with cluster ids for each stage} \item{stratas}{Strata for each stage } \item{fpcs}{Information on population and sample size for each stage, created by \code{\link{as.fpc}}} \item{postStrata}{post-stratification information as created by \code{\link{postStratify}} or \code{\link{calibrate}} } \item{lonely.psu}{How to handle strata with a single PSU} \item{one.stage}{If \code{TRUE}, compute a one-stage (ultimate-cluster) estimator} } \details{ The main use of this function is to compute the variance of the sum of a set of estimating functions under multistage sampling. The sampling is assumed to be simple or stratified random sampling within clusters at each stage except perhaps the last stage. The variance of a statistic is computed from the variance of estimating functions as described by Binder (1983). Use \code{one.stage=FALSE} for compatibility with other software that does not perform multi-stage calculations, and set \code{options(survey.ultimate.cluster=TRUE)} to make this the default. The idea of a recursive algorithm is due to Bellhouse (1985). Texts such as Cochran (1977) and Sarndal et al (1991) describe the decomposition of the variance into a single-stage between-cluster estimator and a within-cluster estimator, and this is applied recursively. If \code{one.stage} is a positive integer it specifies the number of stages of sampling to use in the recursive estimator. If \code{pps="brewer"}, standard errors are estimated using Brewer's approximation for PPS without replacement, option 2 of those described by Berger (2004). The \code{fpc} argument must then be specified in terms of sampling fractions, not population sizes (or omitted, but then the \code{pps} argument would have no effect and the with-replacement standard errors would be correct). } \value{ A covariance matrix } \references{ Bellhouse DR (1985) Computing Methods for Variance Estimation in Complex Surveys. Journal of Official Statistics. Vol.1, No.3, 1985 Berger, Y.G. (2004), A Simple Variance Estimator for Unequal Probability Sampling Without Replacement. Journal of Applied Statistics, 31, 305-315. Binder, David A. (1983). On the variances of asymptotically normal estimators from complex surveys. International Statistical Review, 51, 279-292. Brewer KRW (2002) Combined Survey Sampling Inference (Weighing Basu's Elephants) [Chapter 9] Cochran, W. (1977) Sampling Techniques. 3rd edition. Wiley. Sarndal C-E, Swensson B, Wretman J (1991) Model Assisted Survey Sampling. Springer. } \note{ A simple set of finite population corrections will only be exactly correct when each successive stage uses simple or stratified random sampling without replacement. A correction under general unequal probability sampling (eg PPS) would require joint inclusion probabilities (or, at least, sampling probabilities for units not included in the sample), information not generally available. The quality of Brewer's approximation is excellent in Berger's simulations, but the accuracy may vary depending on the sampling algorithm used. } \seealso{ \code{\link{svrVar}} for replicate weight designs \code{\link{svyCprod}} for a description of how variances are estimated at each stage } \examples{ data(mu284) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) svytotal(~y1, dmu284) data(api) # two-stage cluster sample dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) summary(dclus2) svymean(~api00, dclus2) svytotal(~enroll, dclus2,na.rm=TRUE) # bootstrap for multistage sample mrbclus2<-as.svrepdesign(dclus2, type="mrb", replicates=100) svytotal(~enroll, mrbclus2, na.rm=TRUE) # two-stage `with replacement' dclus2wr<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) summary(dclus2wr) svymean(~api00, dclus2wr) svytotal(~enroll, dclus2wr,na.rm=TRUE) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/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.Rd0000644000176200001440000000226414074217675016256 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<-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.Rd0000644000176200001440000000474313623322530013772 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 \url{http://www.maths.qmul.ac.uk/~lsoicher/designtheory.org/library/encyc/} } \seealso{ \code{\link{hadamard}}} \examples{ M<-paley(11) is.hadamard(M) ## internals of is.hadamard(M) H<-2*M-1 ## HH^T is diagonal for any Hadamard matrix H\%*\%t(H) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{algebra} survey/man/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.Rd0000755000176200001440000002255613517621664014714 0ustar liggesusers\name{svydesign} \alias{svydesign} \alias{svydesign.default} \alias{svydesign.imputationList} \alias{svydesign.character} \alias{na.omit.survey.design} \alias{na.exclude.survey.design} \alias{na.fail.survey.design} \title{Survey sample analysis.} \description{ Specify a complex survey design. } \usage{ svydesign(ids, probs=NULL, strata = NULL, variables = NULL, fpc=NULL, data = NULL, nest = FALSE, check.strata = !nest, weights=NULL,pps=FALSE,...) \method{svydesign}{default}(ids, probs=NULL, strata = NULL, variables = NULL, fpc=NULL,data = NULL, nest = FALSE, check.strata = !nest, weights=NULL, pps=FALSE,variance=c("HT","YG"),...) \method{svydesign}{imputationList}(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, pps=FALSE, ...) \method{svydesign}{character}(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, pps=FALSE, dbtype = "SQLite", dbname, ...) } %- maybe also `usage' for other objects documented here.'` \arguments{ \item{ids}{Formula or data frame specifying cluster ids from largest level to smallest level, \code{~0} or \code{~1} is a formula for no clusters.} \item{probs}{Formula or data frame specifying cluster sampling probabilities} \item{strata}{Formula or vector specifying strata, use \code{NULL} for no strata} \item{variables}{Formula or data frame specifying the variables measured in the survey. If \code{NULL}, the \code{data} argument is used.} \item{fpc}{Finite population correction: see Details below} \item{weights}{Formula or vector specifying sampling weights as an alternative to \code{prob}} \item{data}{Data frame to look up variables in the formula arguments, or database table name, or \code{imputationList} object, see below} \item{nest}{If \code{TRUE}, relabel cluster ids to enforce nesting within strata} \item{check.strata}{If \code{TRUE}, check that clusters are nested in strata}. \item{pps}{\code{"brewer"} to use Brewer's approximation for PPS sampling without replacement. \code{"overton"} to use Overton's approximation. An object of class \code{\link{HR}} to use the Hartley-Rao approximation. An object of class \code{\link{ppsmat}} to use the Horvitz-Thompson estimator.} \item{dbtype}{name of database driver to pass to \code{dbDriver}} \item{dbname}{name of database (eg file name for SQLite)} \item{variance}{For \code{pps} without replacement, use \code{variance="YG"} for the Yates-Grundy estimator instead of the Horvitz-Thompson estimator} \item{\dots}{for future expansion} } \details{ The \code{svydesign} object combines a data frame and all the survey design information needed to analyse it. These objects are used by the survey modelling and summary functions. The \code{id} argument is always required, the \code{strata}, \code{fpc}, \code{weights} and \code{probs} arguments are optional. If these variables are specified they must not have any missing values. By default, \code{svydesign} assumes that all PSUs, even those in different strata, have a unique value of the \code{id} variable. This allows some data errors to be detected. If your PSUs reuse the same identifiers across strata then set \code{nest=TRUE}. The finite population correction (fpc) is used to reduce the variance when a substantial fraction of the total population of interest has been sampled. It may not be appropriate if the target of inference is the process generating the data rather than the statistics of a particular finite population. The finite population correction can be specified either as the total population size in each stratum or as the fraction of the total population that has been sampled. In either case the relevant population size is the sampling units. That is, sampling 100 units from a population stratum of size 500 can be specified as 500 or as 100/500=0.2. The exception is for PPS sampling without replacement, where the sampling probability (which will be different for each PSU) must be used. If population sizes are specified but not sampling probabilities or weights, the sampling probabilities will be computed from the population sizes assuming simple random sampling within strata. For multistage sampling the \code{id} argument should specify a formula with the cluster identifiers at each stage. If subsequent stages are stratified \code{strata} should also be specified as a formula with stratum identifiers at each stage. The population size for each level of sampling should also be specified in \code{fpc}. If \code{fpc} is not specified then sampling is assumed to be with replacement at the top level and only the first stage of cluster is used in computing variances. If \code{fpc} is specified but for fewer stages than \code{id}, sampling is assumed to be complete for subsequent stages. The variance calculations for multistage sampling assume simple or stratified random sampling within clusters at each stage except possibly the last. For PPS sampling without replacement it is necessary to specify the probabilities for each stage of sampling using the \code{fpc} arguments, and an overall \code{weight} argument should not be given. At the moment, multistage or stratified PPS sampling without replacement is supported only with \code{pps="brewer"}, or by giving the full joint probability matrix using \code{\link{ppsmat}}. [Cluster sampling is supported by all methods, but not subsampling within clusters]. The \code{dim}, \code{"["}, \code{"[<-"} and na.action methods for \code{survey.design} objects operate on the dataframe specified by \code{variables} and ensure that the design information is properly updated to correspond to the new data frame. With the \code{"[<-"} method the new value can be a \code{survey.design} object instead of a data frame, but only the data frame is used. See also \code{\link{subset.survey.design}} for a simple way to select subpopulations. The \code{model.frame} method extracts the observed data. If the strata with only one PSU are not self-representing (or they are, but \code{svydesign} cannot tell based on \code{fpc}) then the handling of these strata for variance computation is determined by \code{options("survey.lonely.psu")}. See \code{\link{svyCprod}} for details. \code{data} may be a character string giving the name of a table or view in a relational database that can be accessed through the \code{DBI} 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}} and \code{\link{svyCprod}} for details of variance estimation \code{\link{election}} for examples of PPS sampling without replacement. \url{http://faculty.washington.edu/tlumley/survey/} for examples of database-backed objects. } \examples{ data(api) # stratified sample dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) # one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) # two-stage cluster sample: weights computed from population sizes. dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) ## multistage sampling has no effect when fpc is not given, so ## these are equivalent. dclus2wr<-svydesign(id=~dnum+snum, weights=weights(dclus2), data=apiclus2) dclus2wr2<-svydesign(id=~dnum, weights=weights(dclus2), data=apiclus2) ## syntax for stratified cluster sample ##(though the data weren't really sampled this way) svydesign(id=~dnum, strata=~stype, weights=~pw, data=apistrat, nest=TRUE) ## PPS sampling without replacement data(election) dpps<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") ##database example: requires RSQLite \dontrun{ library(RSQLite) dbclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc, data="apiclus1",dbtype="SQLite", dbname=system.file("api.db",package="survey")) } } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{univar}% __ONLY ONE__ keyword per line \keyword{manip}% __ONLY ONE__ keyword per line survey/man/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.Rd0000755000176200001440000001062113722103544015610 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}} \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.Rd0000644000176200001440000000654613705511646015273 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} } \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`}). } \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)) ## 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)`)))) } \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/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/svyquantile.Rd0000644000176200001440000001443314066513633015251 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 {"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.Rd0000644000176200001440000000341013641501657014215 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, ...) } %- 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{\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/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.Rd0000755000176200001440000002051313743475476014055 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, 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, 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} \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{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. 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}. } \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.Rd0000755000176200001440000000305714073741722013440 0ustar liggesusers\name{fpc} \alias{fpc} \non_function{} \title{Small survey example} \usage{data(fpc)} \description{ The \code{fpc} data frame has 8 rows and 6 columns. It is artificial data to illustrate survey sampling estimators. } \format{ This data frame contains the following columns: \describe{ \item{stratid}{Stratum ids} \item{psuid}{Sampling unit ids} \item{weight}{Sampling weights} \item{nh}{number sampled per stratum} \item{Nh}{population size per stratum} \item{x}{data} } } \source{ \url{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.Rd0000755000176200001440000002040313641446065015637 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) } \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.Rd0000644000176200001440000000716213517345016015052 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.Rd0000755000176200001440000001173713517345016014555 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", "expected", "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.Rd0000755000176200001440000001063313517345016013435 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. Information is archived at \url{https://www.cde.ca.gov/re/pr/api.asp} } \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/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.Rd0000755000176200001440000002104713623322530015210 0ustar liggesusers\name{svrepdesign} \alias{svrepdesign} \alias{svrepdesign.default} \alias{svrepdesign.imputationList} \alias{svrepdesign.character} \alias{[.svyrep.design} \alias{image.svyrep.design} \alias{print.svyrep.design} \alias{model.frame.svyrep.design} \alias{summary.svyrep.design} \alias{print.summary.svyrep.design} %- Also NEED an `\alias' for EACH other topic documented here. \title{Specify survey design with replicate weights} \description{ Some recent large-scale surveys specify replication weights rather than the sampling design (partly for privacy reasons). This function specifies the data structure for such a survey. } \usage{ svrepdesign(variables , repweights , weights, data,...) \method{svrepdesign}{default}(variables = NULL, repweights = NULL, weights = NULL, data = NULL, type = c("BRR", "Fay", "JK1","JKn","bootstrap", "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, mse=getOption("survey.replicates.mse"),...) \method{svrepdesign}{character}(variables=NULL,repweights=NULL, weights=NULL,data=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{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"} \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.Rd0000644000176200001440000000421113517345016015162 0ustar liggesusers\name{trimWeights} \Rdversion{1.1} \alias{trimWeights} \alias{trimWeights.svyrep.design} \alias{trimWeights.survey.design2} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Trim sampling weights } \description{ Trims very high or very low sampling weights to reduce the influence of outlying observations. In a replicate-weight design object, the replicate weights are also trimmed. The total amount trimmed is divided among the observations that were not trimmed, so that the total weight remains the same. } \usage{ trimWeights(design, upper = Inf, lower = -Inf, ...) \method{trimWeights}{survey.design2}(design, upper = Inf, lower = -Inf, strict=FALSE,...) \method{trimWeights}{svyrep.design}(design, upper = Inf, lower = -Inf,compress=FALSE,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{design}{ A survey design object } \item{upper}{ Upper bound for weights } \item{lower}{ Lower bound for weights } \item{strict}{ The reapportionment of the `trimmings' from the weights can push other weights over the limits. If \code{trim=TRUE} the function calls itself recursively to prevent this. } \item{compress}{ Compress the replicate weights after trimming. } \item{\dots}{ Other arguments for future expansion } } \value{ A new survey design object with trimmed weights. } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{\link{calibrate}} has a \code{trim} option for trimming the calibration adjustments. } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018, api99=3914069) dclus1g<-calibrate(dclus1, ~stype+api99, pop.totals) summary(weights(dclus1g)) dclus1t<-trimWeights(dclus1g,lower=20, upper=45) summary(weights(dclus1t)) dclus1tt<-trimWeights(dclus1g, lower=20, upper=45,strict=TRUE) summary(weights(dclus1tt)) svymean(~api99+api00+stype, dclus1g) svymean(~api99+api00+stype, dclus1t) svymean(~api99+api00+stype, dclus1tt) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/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.Rd0000644000176200001440000000227314073741722013643 0ustar liggesusers\name{yrbs} \alias{yrbs} \docType{data} \title{ One variable from the Youth Risk Behaviors Survey, 2015. } \description{ Design information from the Youth Risk Behaviors Survey (YRBS), together with the single variable `Never/Rarely wore bike helmet'. Used as an analysis example by CDC. } \usage{data("yrbs")} \format{ A data frame with 15624 observations on the following 4 variables. \describe{ \item{\code{weight}}{sampling weights} \item{\code{stratum}}{sampling strata} \item{\code{psu}}{primary sampling units} \item{\code{qn8}}{1=Yes, 2=No} } } \source{ \url{ftp://ftp.cdc.gov/pub/data/yrbs/2015smy/} for files } \references{ Centers for Disease Control and Prevention (2016) Software for Analysis of YRBS Data. Previously at \url{https://www.cdc.gov/healthyyouth/data/yrbs/pdf/2015/2015_yrbs_analysis_software.pdf} } \examples{ data(yrbs) yrbs_design <- svydesign(id=~psu, weight=~weight, strata=~stratum, data=yrbs) yrbs_design <- update(yrbs_design, qn8yes=2-qn8) ci <- svyciprop(~qn8yes, yrbs_design, na.rm=TRUE, method="xlogit") ci ## to print more digits: matches SUDAAN and SPSS exactly, per table 3 of reference coef(ci) SE(ci) attr(ci,"ci") } \keyword{datasets} survey/man/stratsample.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.Rd0000644000176200001440000002047513517345016014520 0ustar liggesusers\name{twophase} \alias{twophase} \alias{twophasevar} \alias{twophase2var} \alias{[.twophase} \alias{subset.twophase} \alias{print.twophase} \alias{summary.twophase} \alias{print.summary.twophase} \alias{model.frame.twophase} \alias{na.fail.twophase} \alias{na.omit.twophase} \alias{na.exclude.twophase} \alias{svyrecvar.phase1} \alias{multistage.phase1} \alias{onestage.phase1} \alias{onestrat.phase1} %- Also NEED an '\alias' for EACH other topic documented here. \title{Two-phase designs} \description{ In a two-phase design a sample is taken from a population and a subsample taken from the sample, typically stratified by variables not known for the whole population. The second phase can use any design supported for single-phase sampling. The first phase must currently be one-stage element or cluster sampling } \usage{ twophase(id, strata = NULL, probs = NULL, weights = NULL, fpc = NULL, subset, data, method=c("full","approx","simple")) twophasevar(x,design) twophase2var(x,design) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{id}{list of two formulas for sampling unit identifiers} \item{strata}{list of two formulas (or \code{NULL}s) for stratum identifies} \item{probs}{ list of two formulas (or \code{NULL}s) for sampling probabilities} \item{weights}{Only for \code{method="approx"}, list of two formulas (or \code{NULL}s) for sampling weights} \item{fpc}{list of two formulas (or \code{NULL}s) for finite population corrections} \item{subset}{formula specifying which observations are selected in phase 2} \item{data}{Data frame will all data for phase 1 and 2} \item{method}{\code{"full"} requires (much) more memory, but gives unbiased variance estimates for general multistage designs at both phases. \code{"simple"} or \code{"approx"} uses the standard error calculation from version 3.14 and earlier, which uses much less memory and is correct for designs with simple random sampling at phase one and stratified random sampling at phase two. } \item{x}{probability-weighted estimating functions} \item{design}{two-phase design} } \details{ The population for the second phase is the first-phase sample. If the second phase sample uses stratified (multistage cluster) sampling without replacement and all the stratum and sampling unit identifier variables are available for the whole first-phase sample it is possible to estimate the sampling probabilities/weights and the finite population correction. These would then be specified as \code{NULL}. Two-phase case-control and case-cohort studies in biostatistics will typically have simple random sampling with replacement as the first stage. Variances given here may differ slightly from those in the biostatistics literature where a model-based estimator of the first-stage variance would typically be used. Variance computations are based on the conditioning argument in Section 9.3 of Sarndal et al. Method \code{"full"} corresponds exactly to the formulas in that reference. Method \code{"simple"} or \code{"approx"} (the two are the same) uses less time and memory but is exact only for some special cases. The most important special case is the two-phase epidemiologic designs where phase 1 is simple random sampling from an infinite population and phase 2 is stratified random sampling. See the \code{tests} directory for a worked example. The only disadvantage of method="simple" in these cases is that standardization of margins (\code{\link{marginpred}}) is not available. For \code{method="full"}, sampling probabilities must be available for each stage of sampling, within each phase. For multistage sampling this requires specifying either \code{fpc} or \code{probs} as a formula with a term for each stage of sampling. If no \code{fpc} or \code{probs} are specified at phase 1 it is treated as simple random sampling from an infinite population, and population totals will not be correctly estimated, but means, quantiles, and regression models will be correct. } \value{ \code{twophase} returns an object of class \code{twophase2} (for \code{method="full"}) or \code{twophase}. The structure of \code{twophase2} objects may change as unnecessary components are removed. \code{twophase2var} and \code{twophasevar} return a variance matrix with an attribute containing the separate phase 1 and phase 2 contributions to the variance. } \references{ Sarndal CE, Swensson B, Wretman J (1992) "Model Assisted Survey Sampling" Springer. Breslow NE and Chatterjee N, Design and analysis of two-phase studies with binary outcome applied to Wilms tumour prognosis. "Applied Statistics" 48:457-68, 1999 Breslow N, Lumley T, Ballantyne CM, Chambless LE, Kulick M. (2009) Improved Horvitz-Thompson estimation of model parameters from two-phase stratified samples: applications in epidemiology. Statistics in Biosciences. doi 10.1007/s12561-009-9001-6 Lin, DY and Ying, Z (1993). Cox regression with incomplete covariate measurements. "Journal of the American Statistical Association" 88: 1341-1349. } \seealso{\code{\link{svydesign}}, \code{\link{svyrecvar}} for multi*stage* sampling \code{\link{calibrate}} for calibration (GREG) estimators. \code{\link{estWeights}} for two-phase designs for missing data. The "epi" and "phase1" vignettes for examples and technical details. } \examples{ ## two-phase simple random sampling. data(pbc, package="survival") pbc$randomized<-with(pbc, !is.na(trt) & trt>0) pbc$id<-1:nrow(pbc) d2pbc<-twophase(id=list(~id,~id), data=pbc, subset=~randomized) svymean(~bili, d2pbc) ## two-stage sampling as two-phase data(mu284) ii<-with(mu284, c(1:15, rep(1:5,n2[1:5]-3))) mu284.1<-mu284[ii,] mu284.1$id<-1:nrow(mu284.1) mu284.1$sub<-rep(c(TRUE,FALSE),c(15,34-15)) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) ## first phase cluster sample, second phase stratified within cluster d2mu284<-twophase(id=list(~id1,~id),strata=list(NULL,~id1), fpc=list(~n1,NULL),data=mu284.1,subset=~sub) svytotal(~y1, dmu284) svytotal(~y1, d2mu284) svymean(~y1, dmu284) svymean(~y1, d2mu284) ## case-cohort design: this example requires R 2.2.0 or later library("survival") data(nwtco) ## stratified on case status dcchs<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco) svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcchs) ## Using survival::cch subcoh <- nwtco$in.subcohort selccoh <- with(nwtco, rel==1|subcoh==1) ccoh.data <- nwtco[selccoh,] ccoh.data$subcohort <- subcoh[selccoh] cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), data =ccoh.data, subcoh = ~subcohort, id=~seqno, cohort.size=4028, method="LinYing") ## two-phase case-control ## Similar to Breslow & Chatterjee, Applied Statistics (1999) but with ## a slightly different version of the data set nwtco$incc2<-as.logical(with(nwtco, ifelse(rel | instit==2,1,rbinom(nrow(nwtco),1,.1)))) dccs2<-twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,instit)), data=nwtco, subset=~incc2) dccs8<-twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2) summary(glm(rel~factor(stage)*factor(histol),data=nwtco,family=binomial())) summary(svyglm(rel~factor(stage)*factor(histol),design=dccs2,family=quasibinomial())) summary(svyglm(rel~factor(stage)*factor(histol),design=dccs8,family=quasibinomial())) ## Stratification on stage is really post-stratification, so we should use calibrate() gccs8<-calibrate(dccs2, phase=2, formula=~interaction(rel,stage,instit)) summary(svyglm(rel~factor(stage)*factor(histol),design=gccs8,family=quasibinomial())) ## For this saturated model calibration is equivalent to estimating weights. pccs8<-calibrate(dccs2, phase=2,formula=~interaction(rel,stage,instit), calfun="rrz") summary(svyglm(rel~factor(stage)*factor(histol),design=pccs8,family=quasibinomial())) ## Since sampling is SRS at phase 1 and stratified RS at phase 2, we ## can use method="simple" to save memory. dccs8_simple<-twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2,method="simple") summary(svyglm(rel~factor(stage)*factor(histol),design=dccs8_simple,family=quasibinomial())) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/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/DESCRIPTION0000755000176200001440000000203014075235144013320 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. Version: 4.1-1 Author: Thomas Lumley Maintainer: "Thomas Lumley" License: GPL-2 | GPL-3 Depends: R (>= 3.5.0), grid, methods, Matrix, survival Imports: stats, graphics, splines, lattice, minqa, numDeriv, mitools (>= 2.4) Suggests: foreign, MASS, KernSmooth, hexbin, RSQLite, quantreg, parallel, CompQuadForm, DBI, AER URL: http://r-survey.r-forge.r-project.org/survey/ NeedsCompilation: no Packaged: 2021-07-16 23:50:34 UTC; tlum005 Repository: CRAN Date/Publication: 2021-07-19 08:40:04 UTC survey/build/0000755000176200001440000000000014074415512012711 5ustar liggesuserssurvey/build/vignette.rds0000644000176200001440000000051614074415512015252 0ustar liggesusersRMO0Dc` au/^V݃*kV "78@g51ѐN罾cF^(4c:5F6=NuƅJU)1^R€mA1ǭ/ol!2^eB1[>mJ uM Rb:)B&Ի  c]U!$v6b/2x癑&-ւte[]ǝ:g|u;zG|F ' Wh* 6؃`\ԧ7.J-ԕ_J貓4ω%4V6zD_@Ysurvey/tests/0000755000176200001440000000000014073741722012760 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/README0000644000176200001440000000415014066261522013635 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 DBIcheck.R: Check that we get the same results for SQLite-backed and in-memory versions of the API data. domain.R: Check that domain estimators of means and their standard errors agree with derivations as ratio and regression estimators. Repeat for calibrated and raked designs fpc.R: Many ways to specify fpc kalton.R: Calibration examples from Kalton & Flore-Cervantes, J Off Stat, 19(2) 81-97 lonely.psu.R: All the lonely PSU options multistage.R: Check that a two-stage cluster sample analysis agrees with the hand-calcuated result in Sarndal et al. nwts.R: Compare results from twophase() to published two-phase case-control example nwts-cch.R: Compare results from twophase() to case-cohort analyses in survival package. pps.R: Brewer's approximation for pps without replacement quantile.R: quantile estimation on a lognormal sample rakecheck.R: check that raking by iterative post-stratification agrees with raking using calibrate() regpredict.R: ratio and regression estimation of a total. scoping.R: check that svyglm and svycoxph work inside functions. survcurve.R: check that svykm and predict.coxph give the same result when a data set is doubled and the two replicates of each observation are treated as a cluster. twophase.R: separately verifiable examples of twophase studies quantile-chile.R: example of interpolating for quantiles, from Chilean stats agency na_action.R: check that svyglm works with na.action=na.exclude 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/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/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/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/lonely.psu.Rout.save0000755000176200001440000002247213517345033016707 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ## lonely PSUs by design > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(api) > ## not certainty PSUs by fpc > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1) > summary(ds) Stratified Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 413 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > try(svymean(~api00,ds)) Error in onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (413) has only one PSU at stage 1 > try(svymean(~api00, as.svrepdesign(ds))) Error in jknweights(design$strata[, 1], design$cluster[, 1], fpc = fpc, : Stratum413has only one PSU > options(survey.lonely.psu="remove") > svymean(~api00,ds) mean SE api00 644.17 5.8058 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8058 > options(survey.lonely.psu="certainty") > svymean(~api00,ds) mean SE api00 644.17 5.8058 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8058 > options(survey.lonely.psu="adjust") > svymean(~api00,ds) mean SE api00 644.17 5.8281 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8267 > options(survey.lonely.psu="average") > svymean(~api00,ds) mean SE api00 644.17 6.0096 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8217 > > ## fpc specified > fpc<-ifelse(apiclus1$dnum==413, 1,1000) > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1,fpc=fpc) > summary(ds) Stratified Independent Sampling design svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1, fpc = fpc) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 413 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 Population stratum sizes (PSUs): 135 178 197 255 406 413 437 448 510 568 61 637 716 778 815 1000 1000 1000 1000 1000 1 1000 1000 1000 1000 1000 1000 1000 1000 1000 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > try(svymean(~api00,ds)) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="remove") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="certainty") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="adjust") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="average") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7501 > > rs<-as.svrepdesign(ds) > svytotal(~api00,rs) total SE api00 3989986 35616 > SE(svytotal(~api00,subset(rs, dnum==413)))==0 [1] TRUE > > ## lonely PSUs after subsetting > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) > ds1<-ds[-31,] > summary(ds1) Stratified Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1, dnum != 413)) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 1 4 12 21 9 11 37 2 4 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="remove") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="certainty") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="adjust") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="average") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > > ## with adjustment > options(survey.adjust.domain.lonely=TRUE) > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) > ds1<-ds[-31,] > summary(ds1) Stratified Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1, dnum != 413)) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 1 4 12 21 9 11 37 2 4 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > try(svymean(~api00,ds1)) mean SE api00 645.14 5.8909 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="remove") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="certainty") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="adjust") > svymean(~api00,ds1) mean SE api00 645.14 5.9119 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="average") > svymean(~api00,ds1) mean SE api00 645.14 6.0914 Warning message: In onestrat(x[index, , drop = FALSE], clusters[index], nPSU[index][1], : Stratum (406) has only one PSU at stage 1 > > proc.time() user system elapsed 0.449 0.028 0.484 survey/tests/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.R0000755000176200001440000000427213517345033015220 0ustar liggesusers ## lonely PSUs by design library(survey) data(api) ## not certainty PSUs by fpc ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1) summary(ds) options(survey.lonely.psu="fail") try(svymean(~api00,ds)) try(svymean(~api00, as.svrepdesign(ds))) options(survey.lonely.psu="remove") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="certainty") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="adjust") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="average") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) ## fpc specified fpc<-ifelse(apiclus1$dnum==413, 1,1000) ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1,fpc=fpc) summary(ds) options(survey.lonely.psu="fail") try(svymean(~api00,ds)) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="remove") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="certainty") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="adjust") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="average") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) rs<-as.svrepdesign(ds) svytotal(~api00,rs) SE(svytotal(~api00,subset(rs, dnum==413)))==0 ## lonely PSUs after subsetting ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) ds1<-ds[-31,] summary(ds1) options(survey.lonely.psu="fail") svymean(~api00,ds1) options(survey.lonely.psu="remove") svymean(~api00,ds1) options(survey.lonely.psu="certainty") svymean(~api00,ds1) options(survey.lonely.psu="adjust") svymean(~api00,ds1) options(survey.lonely.psu="average") svymean(~api00,ds1) ## with adjustment options(survey.adjust.domain.lonely=TRUE) ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) ds1<-ds[-31,] summary(ds1) options(survey.lonely.psu="fail") try(svymean(~api00,ds1)) options(survey.lonely.psu="remove") svymean(~api00,ds1) options(survey.lonely.psu="certainty") svymean(~api00,ds1) options(survey.lonely.psu="adjust") svymean(~api00,ds1) options(survey.lonely.psu="average") svymean(~api00,ds1) survey/tests/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/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/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/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/0000755000176200001440000000000013623322530015210 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/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/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/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/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.save0000644000176200001440000002127213517345033016423 0ustar liggesusers R version 3.4.2 (2017-09-28) -- "Short Summer" 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. > library(survey) Loading required package: grid Loading required package: Matrix Loading required package: survival Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > > ## two-phase simple random sampling. > data(pbc, package="survival") > pbc$id<-1:nrow(pbc) > pbc$randomized<-with(pbc, !is.na(trt) & trt>-9) > (d2pbc<-twophase(id=list(~id,~id), data=pbc, subset=~I(!randomized))) Two-phase sparse-matrix design: twophase2(id = id, strata = strata, probs = probs, fpc = fpc, subset = subset, data = data) Phase 1: Independent Sampling design (with replacement) svydesign(ids = ~id) Phase 2: Independent Sampling design svydesign(ids = ~id, fpc = `*phase1*`) > m<-svymean(~bili, d2pbc) > all.equal(as.vector(coef(m)),with(pbc, mean(bili[!randomized]))) [1] TRUE > all.equal(as.vector(SE(m)), + with(pbc, sd(bili[!randomized])/sqrt(sum(!randomized))), + tolerance=0.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) Phase 1: 1 - level Cluster Sampling design With (5) clusters. svydesign(ids = ~id1, fpc = ~n1) Phase 2: Stratified Independent Sampling design svydesign(ids = ~id, strata = ~id1, fpc = `*phase1*`) > summary(d2mu284) Two-phase design: twophase(id = list(~id1, ~id), strata = list(NULL, ~id1), fpc = list(~n1, NULL), data = mu284.1, subset = ~sub, method = "approx") Phase 1: 1 - level Cluster Sampling design With (5) clusters. svydesign(ids = ~id1, fpc = ~n1) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.1 0.1 0.1 0.1 0.1 0.1 Population size (PSUs): 50 Phase 2: Stratified Independent Sampling design svydesign(ids = ~id, strata = ~id1, fpc = `*phase1*`) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.3333 0.3750 0.4286 0.4674 0.6000 0.6000 Stratum Sizes: 19 31 45 47 50 obs 3 3 3 3 3 design.PSU 3 3 3 3 3 actual.PSU 3 3 3 3 3 Population stratum sizes (PSUs): 19 31 45 47 50 5 7 8 5 9 Data variables: [1] "id1" "n1" "id2" "y1" "n2" "id" "sub" > t1<-svytotal(~y1, dmu284) > t2<-svytotal(~y1, d2mu284) > t22<-svytotal(~y1,d22mu284) > m1<-svymean(~y1, dmu284) > m2<-svymean(~y1, d2mu284) > m22<-svymean(~y1, d22mu284) > all.equal(coef(t1),coef(t2)) [1] TRUE > all.equal(coef(t1),coef(t22)) [1] TRUE > all.equal(coef(m1),coef(m2)) [1] TRUE > all.equal(coef(m1),coef(m22)) [1] TRUE > all.equal(as.vector(SE(m1)),as.vector(SE(m2))) [1] TRUE > all.equal(as.vector(SE(m1)),as.vector(SE(m22))) [1] TRUE > all.equal(as.vector(SE(t1)),as.vector(SE(t2))) [1] TRUE > all.equal(as.vector(SE(t1)),as.vector(SE(t22))) [1] TRUE > > ## case-cohort design > ##this example requires R 2.3.1 or later for cch and data. > library("survival") > data(nwtco, package="survival") > ## unstratified, equivalent to Lin & Ying (1993) > print(dcchs<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), + subset=~I(in.subcohort | rel), data=nwtco)) Two-phase sparse-matrix design: twophase2(id = id, strata = strata, probs = probs, fpc = fpc, subset = subset, data = data) Phase 1: Independent Sampling design (with replacement) svydesign(ids = ~seqno) Phase 2: Stratified Independent Sampling design svydesign(ids = ~seqno, strata = ~rel, fpc = `*phase1*`) > cch1<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), + design=dcchs) > dcchs2<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), + subset=~I(in.subcohort | rel), data=nwtco,method="approx") > cch1.2<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), + design=dcchs) > all.equal(coef(cch1),coef(cch1.2)) [1] TRUE > all.equal(SE(cch1),SE(cch1.2)) [1] TRUE > ## Using survival::cch > subcoh <- nwtco$in.subcohort > selccoh <- with(nwtco, rel==1|subcoh==1) > ccoh.data <- nwtco[selccoh,] > ccoh.data$subcohort <- subcoh[selccoh] > cch2<-cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), + data =ccoh.data, subcoh = ~subcohort, id=~seqno, + cohort.size=4028, method="LinYing", robust=TRUE) > > print(all.equal(as.vector(coef(cch1)),as.vector(coef(cch2)))) [1] TRUE > ## cch has smaller variances by a factor of 1.0005 because > ## there is a (n/(n-1)) in the survey phase1 varianace > print(all.equal(as.vector(SE(cch1)), as.vector(SE(cch2)),tolerance=0.0006)) [1] TRUE > > > ## bug report from Takahiro Tsuchiya for version 3.4 > ## We used to not match Sarndal exactly, because our old phase-one > ## estimator had a small bias for finite populations > rei<-read.table(tmp<-textConnection( + " id N n.a h n.ah n.h sub y + 1 1 300 20 1 12 5 TRUE 1 + 2 2 300 20 1 12 5 TRUE 2 + 3 3 300 20 1 12 5 TRUE 3 + 4 4 300 20 1 12 5 TRUE 4 + 5 5 300 20 1 12 5 TRUE 5 + 6 6 300 20 1 12 5 FALSE NA + 7 7 300 20 1 12 5 FALSE NA + 8 8 300 20 1 12 5 FALSE NA + 9 9 300 20 1 12 5 FALSE NA + 10 10 300 20 1 12 5 FALSE NA + 11 11 300 20 1 12 5 FALSE NA + 12 12 300 20 1 12 5 FALSE NA + 13 13 300 20 2 8 3 TRUE 6 + 14 14 300 20 2 8 3 TRUE 7 + 15 15 300 20 2 8 3 TRUE 8 + 16 16 300 20 2 8 3 FALSE NA + 17 17 300 20 2 8 3 FALSE NA + 18 18 300 20 2 8 3 FALSE NA + 19 19 300 20 2 8 3 FALSE NA + 20 20 300 20 2 8 3 FALSE NA + "), header=TRUE) > close(tmp) > > des.rei <- twophase(id=list(~id,~id), strata=list(NULL,~h), + fpc=list(~N,NULL), subset=~sub, data=rei, method="approx") > tot<- svytotal(~y, des.rei) > des.rei2 <- twophase(id=list(~id,~id), strata=list(NULL,~h), + fpc=list(~N,NULL), subset=~sub, data=rei) > tot2<- svytotal(~y, des.rei2) > > ## based on Sarndal et al (9.4.14) > rei$w.ah <- rei$n.ah / rei$n.a > a.rei <- aggregate(rei, by=list(rei$h), mean, na.rm=TRUE) > a.rei$S.ysh <- tapply(rei$y, rei$h, var, na.rm=TRUE) > a.rei$y.u <- sum(a.rei$w.ah * a.rei$y) > V <- with(a.rei, sum(N * (N-1) * ((n.ah-1)/(n.a-1) - (n.h-1)/(N-1)) * w.ah * S.ysh / n.h)) > V <- V + with(a.rei, sum(N * (N-n.a) * w.ah * (y - y.u)^2 / (n.a-1))) > > a.rei$f.h<-with(a.rei, n.h/n.ah) > Vphase2<-with(a.rei, sum(N*N*w.ah^2* ((1-f.h)/n.h) *S.ysh)) > > a.rei$f<-with(a.rei, n.a/N) > a.rei$delta.h<-with(a.rei, (1/n.h)*(n.a-n.ah)/(n.a-1)) > Vphase1<-with(a.rei, sum(N*N*((1-f)/n.a)*( w.ah*(1-delta.h)*S.ysh+ ((n.a)/(n.a-1))*w.ah*(y-y.u)^2))) > > V [1] 36522.63 > Vphase1 [1] 24072.63 > Vphase2 [1] 12450 > vcov(tot) y y 35911.05 attr(,"phases") attr(,"phases")$phase1 [,1] [1,] 23461.05 attr(,"phases")$phase2 y y 12450 > vcov(tot2) [,1] [1,] 36522.63 attr(,"phases") attr(,"phases")$phase1 [,1] [1,] 24072.63 attr(,"phases")$phase2 [,1] [1,] 12450 > ## phase 2 identical > all.equal(Vphase2,drop(attr(vcov(tot),"phases")$phase2)) [1] TRUE > all.equal(Vphase2,drop(attr(vcov(tot2),"phases")$phase2)) [1] TRUE > ## phase 1 differs by 2.6% for old twophase estimator > Vphase1/attr(vcov(tot),"phases")$phase1 [,1] [1,] 1.026068 > all.equal(Vphase1,as.vector(attr(vcov(tot2),"phases")$phase1)) [1] TRUE > > > proc.time() user system elapsed 3.561 0.201 3.809 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.R0000644000176200001440000000076114066261522016072 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")])) 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.save0000644000176200001440000001642013517345033015563 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. > > ## 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) 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) 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 > > 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/vignettes/0000755000176200001440000000000014074415512013622 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.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/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/0000755000176200001440000000000014074217675012025 5ustar liggesuserssurvey/R/olr.R0000644000176200001440000002463413645210625012744 0ustar liggesuserssvyolr<-function(formula, design,...) UseMethod("svyolr",design) ## ## Much of this is taken from MASS polr, thus the GPL-2 license. ## svyolr.svyrep.design<-function(formula,design,...,return.replicates=FALSE, multicore=getOption("survey.multicore")){ environment(formula)<-environment() df<-model.frame(design) pwt<-weights(design,"sampling") if (multicore && !requireNamespace("parallel", quietly=TRUE)) multicore <- FALSE rval<-suppressWarnings(MASS::polr(formula,data=df,...,Hess=TRUE,model=FALSE, weights=pwt)) start<-c(rval$coefficients,rval$zeta) rw<-weights(design,"analysis") if (multicore){ betas<-do.call(cbind,parallel::mclapply(1:ncol(rw), function(i){ w<-rw[,i] environment(formula)<-environment() m<-MASS::polr(formula,data=df,Hess=FALSE, start=start, model=FALSE, weights=w) c(m$coefficients, m$zeta) })) } else { betas<-apply(rw,2,function(w) { environment(formula)<-environment() m<-MASS::polr(formula,data=df,Hess=FALSE, start=start, model=FALSE, weights=w) c(m$coefficients, m$zeta) }) } rval$var<-svrVar(t(betas),design$scale,design$rscales,mse=design$mse, coef=start) rval$df.residual<-degf(design)-length(rval$coefficients) rval$deviance<-rval$deviance/mean(pwt) class(rval)<-"svyolr" rval$call<-sys.call() rval$call[[1]]<-as.name(.Generic) if (return.replicates) rval$replicates<-t(betas) rval } pgumbel<- function (q, loc = 0, scale = 1, lower.tail = TRUE) { q <- (q - loc)/scale p <- exp(-exp(-q)) if (!lower.tail) 1 - p else p } dgumbel<-function (x, loc = 0, scale = 1, log = FALSE) { x <- (x - loc)/scale d <- log(1/scale) - x - exp(-x) if (!log) exp(d) else d } svyolr.survey.design2<-function (formula, design, start, ..., na.action=na.omit, method = c("logistic", "probit", "cloglog", "cauchit")) { logit <- function(p) log(p/(1 - p)) fmin <- function(beta) { theta <- beta[pc + 1:q] gamm <- c(-100, cumsum(c(theta[1], exp(theta[-1]))), 100) eta <- offset if (pc > 0) eta <- eta + drop(x %*% beta[1:pc]) pr <- pfun(gamm[y + 1] - eta) - pfun(gamm[y] - eta) if (all(pr > 0)) -sum(wt * log(pr)) else Inf } 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) m<-model.frame(formula,model.frame(design),na.action=na.pass) Terms <- attr(m, "terms") m<-na.action(m) nao<-attr(m,"na.action") if(length(nao)) { design<-design[-nao,] } x <- model.matrix(Terms, m) xint <- match("(Intercept)", colnames(x), nomatch = 0) n <- nrow(x) pc <- ncol(x) cons <- attr(x, "contrasts") if (xint > 0) { x <- x[, -xint, drop = FALSE] pc <- pc - 1 } else warning("an intercept is needed and assumed") wt <- weights(design) offset <- model.offset(m) if (length(offset) <= 1) offset <- rep(0, n) y <- model.response(m) if (!is.factor(y)) stop("response must be a factor") lev <- levels(y) if (length(lev) <= 2) stop("response must have 3 or more levels") y <- unclass(y) q <- length(lev) - 1 Y <- matrix(0, n, q) .polrY1 <- col(Y) == y .polrY2 <- col(Y) == y - 1 if (missing(start)) { q1 <- length(lev)%/%2 y1 <- (y > q1) X <- cbind(Intercept = rep(1, n), x) fit <- switch(method, logistic = glm.fit(X, y1, wt/mean(wt), family = quasibinomial(), offset = offset), probit = glm.fit(X, y1, wt/mean(wt), family = quasibinomial("probit"), offset = offset), cloglog = glm.fit(X, y1, wt/mean(wt), family = quasibinomial("probit"), offset = offset), cauchit = glm.fit(X, y1, wt/mean(wt), family = quasibinomial("cauchit"), offset = offset)) if (!fit$converged) stop("attempt to find suitable starting values failed") coefs <- fit$coefficients if (any(is.na(coefs))) { warning("design appears to be rank-deficient, so dropping some coefs") keep <- names(coefs)[!is.na(coefs)] coefs <- coefs[keep] x <- x[, keep[-1], drop = FALSE] pc <- ncol(x) } spacing <- logit((1:q)/(q + 1)) if (method != "logit") spacing <- spacing/1.7 gammas <- -coefs[1] + spacing - spacing[q1] thetas <- c(gammas[1], log(diff(gammas))) start <- c(coefs[-1], thetas) } else if (length(start) != pc + q) stop("'start' is not of the correct length") res <- optim(start, fmin, gmin, method = "BFGS", hessian = TRUE, ...) beta <- res$par[seq_len(pc)] theta <- res$par[pc + 1:q] zeta <- cumsum(c(theta[1], exp(theta[-1]))) deviance <- 2 * res$value/mean(wt) niter <- c(f.evals = res$counts[1], g.evals = res$counts[2]) names(zeta) <- paste(lev[-length(lev)], lev[-1], sep = "|") if (pc > 0) { names(beta) <- colnames(x) eta <- drop(x %*% beta) } else { eta <- rep(0, n) } cumpr <- matrix(pfun(matrix(zeta, n, q, byrow = TRUE) - eta), , q) fitted <- t(apply(cumpr, 1, function(x) diff(c(0, x, 1)))) dimnames(fitted) <- list(row.names(m), lev) fit <- list(coefficients = beta, zeta = zeta, deviance = deviance, fitted.values = fitted, lev = lev, terms = Terms, df.residual = sum(wt) - pc - q, edf = pc + q, n = sum(wt), nobs = sum(wt), method = method, convergence = res$convergence, niter = niter) dn <- c(names(beta), names(zeta)) ## 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) fit$var<-svyrecvar(inffun, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) fit$df.residual<-degf(design)-length(beta) fit$na.action <- attr(m, "na.action") fit$contrasts <- cons fit$xlevels <- .getXlevels(Terms, m) class(fit) <- "svyolr" fit } vcov.svyolr<-function(object,...) object$var print.svyolr<-function (x, ...) { if (!is.null(cl <- x$call)) { cat("Call:\n") dput(cl, control = NULL) } if (length(coef(x))) { cat("\nCoefficients:\n") print(coef(x,intercept=FALSE), ...) } else { cat("\nNo coefficients\n") } cat("\nIntercepts:\n") print(x$zeta, ...) invisible(x) } coef.svyolr<-function(object,intercepts=TRUE,...) { if(intercepts) c(object$coefficients, object$zeta) else object$coefficients } summary.svyolr<-function (object, digits = max(3, .Options$digits - 3), correlation = FALSE, ...) { cc <- coef(object) pc <- length(coef(object, FALSE)) q <- length(object$zeta) coef <- matrix(0, pc + q, 3, dimnames = list(names(cc), c("Value", "Std. Error", "t value"))) coef[, 1] <- cc vc <- vcov(object) z.ind <- (pc + 1):(pc + q) gamma <- object$zeta theta <- c(gamma[1], log(diff(gamma))) ## 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) design<- eval(mcall$design) formula<-eval(mcall$formula) mf<-model.frame(formula,model.frame(design)) w<-weights(design, type="sampling") if (is.null(naa<-attr(mf,"na.action"))) mf[["(weights)"]]<-w else mf[["(weights)"]]<-w[-naa] mf } survey/R/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.R0000644000176200001440000001076714066261522014057 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(~.(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) 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.R0000644000176200001440000001707013714137163013603 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.ODBCsvydesign<-function (formula, design, ...) { design$variables <- dropFactor(getvars(formula, design$db$connection, design$db$tablename, updates = design$updates), weights(design)) NextMethod("svylogrank", design) } svylogrank.svyrep.design<-function(formula, design,rho=0,gamma=0,method=c("small","large","score"), ...){ method<-match.arg(method) if (method=="small") return(.logrank(formula,design, rho,gamma,...)) else if (method=="large") return(.biglogrank(formula,design,rho,gamma,...)) if (rho!=0 || gamma!=0){ return(expandlogrank(formula,design,rho,gamma,...)) } tms<-delete.response(terms(formula,specials="strata")) findstrat<-untangle.specials(tms,"strata") if(length(findstrat$terms)) tms<-tms[-findstrat$terms] mf<-model.frame(tms,model.frame(design)) if(length(mf)>1) stop("Only one grouping variable allowed") if(!is.factor(mf[[1]]) && length(unique(mf[[1]]))>2) stop("Grouping variable with more than 2 levels must be a factor") rr<-withReplicates(design, function(w,df){ environment(formula)<-environment() coef(coxph(formula,data=df,weights=w+1e-8,iter=1)) }) b<-unclass(rr) attr(b,"var")<-NULL v<-attr(rr,"var") x2<-sum(b*solve(v,b)) rval<- c(z=b/sqrt(diag(as.matrix(v))), Chisq=x2, p=pchisq(x2,length(b),lower.tail=FALSE)) class(rval)<-"svylogrank" rval } expandlogrank<-function(formula, design, rho=0, gamma=0){ nullformula<-update(formula,.~1) S<-svykm(nullformula,design,se=FALSE) epsilon<-min(diff(sort(unique(S$time))))/10 w<-approxfun(S$time+epsilon,S$surv^rho*(1-S$surv)^gamma,method="constant",rule=2) environment(formula)<-environment() coxmodel<-coxph(formula,data=model.frame(design), weights=weights(design,"sampling"),iter.max=0) mf<-model.frame(design) detail<-coxph.detail(coxmodel) if(attr(coxmodel$y,"type")=="right"){ mf$.time<-coxmodel$y[,"time"] mf$.status<-coxmodel$y[,"status"] mfsplit <- survSplit(mf, cut=detail$time, end=".time", event=".status", start=".start", id=".id", episode=".episode") } else { mf$.start<-coxmodel$y[,"start"] mf$.time<-coxmodel$y[,"stop"] mf$.status<-coxmodel$y[,"status"] mfsplit <- survSplit(mf, cut=detail$time, end=".time", event=".status", start=".start", id=".id", episode=".episode") } formula[[2]]<-quote(Surv(.start,.time,.status)) mfsplit$.weights<-weights(design,"sampling")[match(mfsplit$.id, rownames(mf))]*w(mfsplit$.time) expdesign<-svydesign(ids=eval(design$call$id), strata=eval(design$call$strata), data=mfsplit, weights=~.weights) #svylogrank(formula,expdesign) tms<-delete.response(terms(formula,specials="strata")) findstrat<-untangle.specials(tms,"strata") if(length(findstrat$terms)) tms<-tms[-findstrat$terms] mf<-model.frame(tms,model.frame(expdesign)) if(length(mf)>1) stop("Only one grouping variable allowed") if(!is.factor(mf[[1]]) && length(unique(mf[[1]]))>2) stop("Grouping variable with more than 2 levels must be a factor") b<-coef(svycoxph(formula,expdesign,iter=1)) v<-vcov(svycoxph(formula,expdesign,iter=0)) x2<-sum(b*solve(v,b)) rval<-c(z=b/sqrt(diag(v)), Chisq=x2, p=pchisq(x2,length(b),lower.tail=FALSE)) class(rval)<-"svylogrank" rval } survey/R/DBI.R0000644000176200001440000003121213677026104012536 0ustar liggesusers svydesign.character<-function (ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL,pps=FALSE, 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) 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,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, 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.R0000644000176200001440000001367313517345031014573 0ustar liggesusers oneanova.svyglm<-function(object,test,method){ tt<-terms(object) tlbls<-attr(tt,"term.labels") nt<-length(tlbls) if (nt<2) return(NULL) seqtests<-vector("list",nt) if(test=="F") ddf<-NULL else ddf<-Inf thismodel<-object if (!("formula") %in% names(thismodel$call)) names(thismodel$call)[[2]] <- "formula" for(i in nt:1){ thisterm<-tlbls[i] seqtests[[i]]<-regTermTest(thismodel,tlbls[i],method=method,df=ddf) thisformula<-make.formula(thisterm)[[2]] thismodel <- eval(bquote(update(thismodel, . ~ . - (.(thisformula))))) } class(seqtests)<-"seqanova.svyglm" attr(seqtests,"method")<-method attr(seqtests,"test")<-test seqtests } print.seqanova.svyglm<-function(x,...){ isWald<-attr(x,"method")=="Wald" isF<-attr(x,"test")=="F" cat("Anova table: ") if (isWald) cat("(Wald tests)\n") else cat(" (Rao-Scott LRT)\n") print(x[[1]]$mcall) terms<-sapply(x,"[[","test.terms") stats<-if(isF && isWald) sapply(x,"[[","Ftest") else sapply(x,"[[","chisq") if(!isWald) stats<-cbind(stats,DEff=sapply(x,function(xi) mean(xi$lambda))) df<-sapply(x,"[[","df") p<-sapply(x,"[[","p") if (!isF){ rval<-cbind(stats,df,p) } else { ddf<-sapply(x,"[[","ddf") rval<-cbind(stats,df,ddf,p) } rownames(rval)<-terms printCoefmat(rval,tst.ind=1,zap.ind=2:3,has.Pvalue=TRUE) invisible(x) } SD<-function(x) if (NCOL(x)>1) apply(x,2,sd) else sd(x) anova.svyglm<-function(object, object2=NULL,test=c("F","Chisq"),method=c("LRT","Wald"),tolerance=1e-5,...,force=FALSE){ test<-match.arg(test) method<-match.arg(method) if(is.null(object2)) ## sequential tests return(oneanova.svyglm(object,test,method)) t1<-attr(terms(object),"term.labels") t2<-attr(terms(object2),"term.labels") if ((all(t1 %in% t2) || all(t2 %in% t1)) && !force){ ## symbolically nested, call regTermTest biggerobject<-if(all(t1 %in% t2)) object2 else object termdiff<-make.formula(if(all(t1 %in% t2)) setdiff(t2,t1) else setdiff(t1,t2)) if(test=="F") ddf<-NULL else ddf<-Inf return(regTermTest(biggerobject,termdiff,df=ddf,method=method)) } ## not symbolically nested, need to project explicitly X<-model.matrix(object) Z<-model.matrix(object2) if (nrow(X)!=nrow(Z)) stop("models have different numbers of observations") if (ncol(X)>ncol(Z)) { tmp<-X X<-Z Z<-tmp bigger<-1 } else bigger<-2 if (any(sapply(suppressWarnings(summary(lm(X~Z))), "[[","sigma")/(tolerance+SD(X))>tolerance)) stop("models not nested") XX<-matrix(nrow=nrow(Z),ncol=ncol(Z)) xform<-lm(Z[,1]~X+0) XX[,1]<-resid(xform) for(i in 2:ncol(Z)){ XX[,i]<-resid(xform<-lm(Z[,i]~X+Z[,1:(i-1)]+0)) } colkeep<-colMeans(abs(XX))/(tolerance+colMeans(abs(Z))) > tolerance XX<-XX[,colkeep,drop=FALSE] index<-ncol(X)+(1:ncol(XX)) ## and now need to refit the model ## ugly, but svyglm demands that all variables are in the design argument. ## We do know the fitted values at convergence, so one iteration suffices. mu<-if(bigger==1) fitted(object) else fitted(object2) eta<-if(bigger==1) object$linear.predictors else object2$linear.predictors offset<-if(bigger==1) object$offset else object2$offset if (is.null(offset)) offset<-0 pweights<-weights(object$survey.design,"sampling") y<-object$y if (length(pweights)!=length(y)){ pweights<-pweights[pweights>0] if (length(pweights)!=length(y)) stop("number of observations does not match design") } pweights<-pweights/mean(pweights) ywork<-eta-offset+(y-mu)/object$family$mu.eta(eta) wwork<-((pweights * object$family$mu.eta(eta)^2)/object$family$variance(mu)) wlm<-lm.wfit(cbind(X,XX),ywork,wwork) p1<-1:wlm$rank Ainv<-chol2inv(wlm$qr$qr[p1,p1,drop=FALSE]) estfun<-cbind(X,XX)*wwork*((y-mu)/object$family$mu.eta(eta)) design<-object$survey.design if (inherits(design, "survey.design2")) V<-svyrecvar(estfun %*% Ainv, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) else if (inherits(design, "twophase")) V<-twophasevar(estfun %*% Ainv, design) else if (inherits(design, "twophase2")) V<-twophase2var(estfun %*% Ainv, design) else if (inherits(design, "pps")) V<-ppsvar(estfun %*% Ainv, design) else if (inherits(design, "svyrep.design")){ V<-vcov(svymean(estfun%*% Ainv/pweights, design))*length(pweights)^2 } else stop("not implemented for this type of design") V<-V[index,index] df<-min(object$df.residual, object2$df.residual) if(method=="LRT"){ V0<-Ainv[index,index] chisq <- if(bigger==1) deviance(object2) - deviance(object) else deviance(object)-deviance(object2) misspec <- eigen(solve(V0) %*% V, only.values = TRUE)$values if (test=="Chisq") p <- pchisqsum(chisq, rep(1, length(misspec)), misspec, method = "sad", lower.tail = FALSE) else p <- pFsum(chisq, rep(1, length(misspec)), misspec, ddf = df, method = "sad", lower.tail = FALSE) rval <- list(call = sys.call(), chisq = chisq, df = length(index), p = p, lambda = misspec, ddf = df, mcall=if(bigger==1) object$call else object2$call, test.terms=if(bigger==1) c(setdiff(t1,t2),"-",setdiff(t2,t1)) else c(setdiff(t2,t1),"-",setdiff(t1,t2)) ) class(rval)<-"regTermTestLRT" } else { ## method=Wald beta<- wlm$coefficients[index] chisq<-crossprod(beta,solve(V,beta)) if (test=="Chisq"){ p<-pchisq(chisq,df=length(index),lower.tail=FALSE) } else { p<-pf(chisq/length(index),df1=length(index),df2=df,lower.tail=FALSE) } rval <- list(call = sys.call(), Ftest = chisq/length(index), df = length(index), p = p, ddf = df, mcall=if(bigger==1) object$call else object2$call, test.terms=if(bigger==1) c(setdiff(t1,t2),"-",setdiff(t2,t1)) else c(setdiff(t2,t1),"-",setdiff(t1,t2)) ) class(rval)<-"regTermTest" } rval } survey/R/sysdata.rda0000644000176200001440000000073114074415513014155 0ustar liggesusersBZh91AY&SY52:>3XP@6f@ f 2 7 4$h1@ #M M"U4"{6 pmAUEBgDL{uEMqI$`$"M􇇧? taHAɒdI@%1 eu` &؂!%y'jW1a7@×x@•ViQN \!3ew,rnth!S4%9qf\ֈ-neխN&<,r+j2db[FA5Wm*IBV`V-ZnˆTXlmȚচݲn@.F++aŻlX*ʊTXT,[%EAe" Sm*XaEEc2eJ ed3j:1/,<= Hw/H GGsurvey/R/surveychisq.R0000755000176200001440000003633313517345031014535 0ustar liggesusers## ## Tests for contingency tables ## svychisq<-function(formula, design,...) UseMethod("svychisq",design) svychisq.survey.design<-function(formula, design, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))>2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) ##if(!is.null(design$postStrata)) ## warning("Post-stratification not implemented") rows<-formula[[2]][[2]] cols<-formula[[2]][[3]] rowvar<-unique(design$variables[,as.character(rows)]) colvar<-unique(design$variables[,as.character(cols)]) returnNA<-FALSE if ((any(is.na(rowvar),is.na(colvar)))){ rowvar<-na.omit(rowvar) colvar<-na.omit(colvar) returnNA<-!na.rm } nr<-length(rowvar) nc<-length(colvar) fsat<-eval(bquote(~interaction(factor(.(rows)),factor(.(cols)))-1)) mm<-model.matrix(fsat,model.frame(fsat, design$variables,na.action=na.pass)) N<-nrow(mm) nu <- length(unique(design$cluster[,1]))-length(unique(design$strata[,1])) pearson<- suppressWarnings(chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE)) mf1<-expand.grid(rows=1:nr,cols=1:nc) X1<-model.matrix(~factor(rows)+factor(cols),mf1) X12<-model.matrix(~factor(rows)*factor(cols),mf1) if(statistic %in% c("Wald", "adjWald")){ frow<-eval(bquote(~factor(.(rows))-1)) fcol<-eval(bquote(~factor(.(cols))-1)) mr<-model.matrix(frow, model.frame(frow,design$variables, na.action=na.pass)) mc<-model.matrix(fcol, model.frame(fcol,design$variables, na.action=na.pass)) one<-rep(1,NROW(mc)) cells<-svytotal(~mm+mr+mc+one,design,na.rm=TRUE) Jcb <- cbind(diag(nr*nc), -outer(mf1$rows,1:nr,"==")*rep(cells[(nr*nc)+nr+1:nc]/cells[(nr*nc)+nr+nc+1],each=nr), -outer(mf1$cols,1:nc,"==")*cells[(nr*nc)+1:nr]/cells[(nr*nc)+nr+nc+1], as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc])/cells[(nr*nc)+nr+nc+1]^2)) Y<-cells[1:(nc*nr)]-as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc]))/cells[(nr*nc)+nr+nc+1] V<-Jcb%*%attr(cells,"var")%*%t(Jcb) use<-as.vector(matrix(1:(nr*nc),nrow=nr,ncol=nc)[-1,-1]) waldstat<-Y[use]%*%solve(V[use,use],Y[use]) if (statistic=="Wald"){ waldstat<-waldstat/((nc-1)*(nr-1)) numdf<-(nc-1)*(nr-1) denomdf<-nu } else { numdf<-(nr-1)*(nc-1) denomdf<-(nu-numdf+1) waldstat <- waldstat*denomdf/(numdf*nu) } if (returnNA){ pearson$statistic<-NA pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-NA attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } else { pearson$statistic<-waldstat pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-pf(pearson$statistic, numdf, denomdf, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } return(pearson) } mean2<-svymean(mm,design,na.rm=TRUE) Cmat<-qr.resid(qr(X1),X12[,-(1:(nr+nc-1)),drop=FALSE]) Dmat <- diag(mean2) iDmat<- diag(ifelse(mean2==0,0,1/mean2)) Vsrs <- (Dmat - outer(mean2,mean2))/N V <- attr(mean2,"var") denom<- t(Cmat) %*% (iDmat/N) %*% Cmat numr<-t(Cmat)%*% iDmat %*% V %*% iDmat %*% Cmat Delta<-solve(denom,numr) d0<- sum(diag(Delta))^2/(sum(diag(Delta%*%Delta))) warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE) options(warn) if (match.arg(statistic)=="F"){ pearson$statistic<-pearson$statistic/sum(diag(Delta)) pearson$p.value<-pf(pearson$statistic, d0, d0*nu, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$parameter<-c(ndf=d0,ddf=d0*nu) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } else if (match.arg(statistic)=="lincom") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="integration",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: asymptotic exact distribution" } else if (match.arg(statistic)=="saddlepoint") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: saddlepoint approximation" } else{ pearson$p.value<-pchisq(pearson$statistic/mean(diag(Delta)), df=NCOL(Delta),lower.tail=FALSE) pearson$parameter<-c(df=NCOL(Delta)) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } if (returnNA){ pearson$statistic<-NA pearson$p.value<-NA } pearson$data.name<-deparse(sys.call(-1)) pearson } svychisq.twophase<-function(formula, design, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))>2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) ##if(!is.null(design$postStrata)) ## warning("Post-stratification not implemented") rows<-formula[[2]][[2]] cols<-formula[[2]][[3]] dat<-design$phase1$sample$variables rowvar<-unique(dat[,as.character(rows)]) colvar<-unique(dat[,as.character(cols)]) returnNA<-FALSE if ((any(is.na(rowvar),is.na(colvar)))){ rowvar<-na.omit(rowvar) colvar<-na.omit(colvar) returnNA<-!na.rm } nr<-length(rowvar) nc<-length(colvar) fsat<-eval(bquote(~interaction(factor(.(rows)),factor(.(cols)))-1)) mm<-model.matrix(fsat,model.frame(fsat, dat,na.action=na.pass)) N<-nrow(mm) nu <- length(unique(design$phase2$cluster[,1]))-length(unique(design$phase2$strata[,1])) pearson<- suppressWarnings(chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE)) mf1<-expand.grid(rows=1:nr,cols=1:nc) X1<-model.matrix(~factor(rows)+factor(cols),mf1) X12<-model.matrix(~factor(rows)*factor(cols),mf1) if(statistic %in% c("Wald", "adjWald")){ frow<-eval(bquote(~factor(.(rows))-1)) fcol<-eval(bquote(~factor(.(cols))-1)) mr<-model.matrix(frow, model.frame(frow,dat, na.action=na.pass)) mc<-model.matrix(fcol, model.frame(fcol,dat, na.action=na.pass)) one<-rep(1,NROW(mc)) cells<-svytotal(~mm+mr+mc+one,design,na.rm=TRUE) Jcb <- cbind(diag(nr*nc), -outer(mf1$rows,1:nr,"==")*rep(cells[(nr*nc)+nr+1:nc]/cells[(nr*nc)+nr+nc+1],each=nr), -outer(mf1$cols,1:nc,"==")*cells[(nr*nc)+1:nr]/cells[(nr*nc)+nr+nc+1], as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc])/cells[(nr*nc)+nr+nc+1]^2)) Y<-cells[1:(nc*nr)]-as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc]))/cells[(nr*nc)+nr+nc+1] V<-Jcb%*%attr(cells,"var")%*%t(Jcb) use<-as.vector(matrix(1:(nr*nc),nrow=nr,ncol=nc)[-1,-1]) waldstat<-Y[use]%*%solve(V[use,use],Y[use]) if (statistic=="Wald"){ waldstat<-waldstat/((nc-1)*(nr-1)) numdf<-(nc-1)*(nr-1) denomdf<-nu } else { numdf<-(nr-1)*(nc-1) denomdf<-(nu-numdf+1) waldstat <- waldstat*denomdf/(numdf*nu) } if (returnNA){ pearson$statistic<-NA pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-NA attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } else { pearson$statistic<-waldstat pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-pf(pearson$statistic, numdf, denomdf, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } return(pearson) } mean2<-svymean(mm,design,na.rm=TRUE) Cmat<-qr.resid(qr(X1),X12[,-(1:(nr+nc-1)),drop=FALSE]) Dmat <- diag(mean2) iDmat<- diag(ifelse(mean2==0,0,1/mean2)) Vsrs <- (Dmat - outer(mean2,mean2))/N V <- attr(mean2,"var") denom<- t(Cmat) %*% (iDmat/N) %*% Cmat numr<-t(Cmat)%*% iDmat %*% V %*% iDmat %*% Cmat Delta<-solve(denom,numr) d0<- sum(diag(Delta))^2/(sum(diag(Delta%*%Delta))) warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE) options(warn) if (match.arg(statistic)=="F"){ pearson$statistic<-pearson$statistic/sum(diag(Delta)) pearson$p.value<-pf(pearson$statistic, d0, d0*nu, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$parameter<-c(ndf=d0,ddf=d0*nu) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } else if (match.arg(statistic)=="lincom") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="integration",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: asymptotic exact distribution" } else if (match.arg(statistic)=="saddlepoint") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: saddlepoint approximation" } else{ pearson$p.value<-pchisq(pearson$statistic/mean(diag(Delta)), df=NCOL(Delta),lower.tail=FALSE) pearson$parameter<-c(df=NCOL(Delta)) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } if (returnNA){ pearson$statistic<-NA pearson$p.value<-NA } pearson$data.name<-deparse(sys.call(-1)) pearson } svychisq.svyrep.design<-function(formula, design, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))>2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) rows<-formula[[2]][[2]] cols<-formula[[2]][[3]] rowvar<-unique(design$variables[,as.character(rows)]) colvar<-unique(design$variables[,as.character(cols)]) returnNA<-FALSE if ((any(is.na(rowvar),is.na(colvar)))){ rowvar<-na.omit(rowvar) colvar<-na.omit(colvar) returnNA<-!na.rm } nr<-length(rowvar) nc<-length(colvar) fsat<-eval(bquote(~interaction(factor(.(rows)),factor(.(cols)))-1)) mm<-model.matrix(fsat,model.frame(fsat, design$variables,na.action=na.pass)) N<-nrow(mm) nu <- degf(design) pearson<- suppressWarnings(chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE)) mf1<-expand.grid(rows=1:nr,cols=1:nc) X1<-model.matrix(~factor(rows)+factor(cols),mf1) X12<-model.matrix(~factor(rows)*factor(cols),mf1) if(statistic %in% c("Wald", "adjWald")){ frow<-eval(bquote(~factor(.(rows))-1)) fcol<-eval(bquote(~factor(.(cols))-1)) mr<-model.matrix(frow, model.frame(frow,design$variables, na.action=na.pass)) mc<-model.matrix(fcol, model.frame(fcol,design$variables, na.action=na.pass)) one<-rep(1,NROW(mc)) cells<-svytotal(~mm+mr+mc+one,design,na.rm=TRUE) Jcb <- cbind(diag(nr*nc), -outer(mf1$rows,1:nr,"==")*rep(cells[(nr*nc)+nr+1:nc]/cells[(nr*nc)+nr+nc+1],each=nr), -outer(mf1$cols,1:nc,"==")*cells[(nr*nc)+1:nr]/cells[(nr*nc)+nr+nc+1], as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc])/cells[(nr*nc)+nr+nc+1]^2)) Y<-cells[1:(nc*nr)]-as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc]))/cells[(nr*nc)+nr+nc+1] V<-Jcb%*%attr(cells,"var")%*%t(Jcb) use<-as.vector(matrix(1:(nr*nc),nrow=nr,ncol=nc)[-1,-1]) waldstat<-Y[use]%*%solve(V[use,use],Y[use]) if (statistic=="Wald"){ waldstat<-waldstat/((nc-1)*(nr-1)) numdf<-(nc-1)*(nr-1) denomdf<-nu } else { numdf<-(nr-1)*(nc-1) denomdf<-(nu-numdf+1) waldstat <- waldstat*denomdf/(numdf*nu) } if (returnNA){ pearson$statistic<-NA pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-NA attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } else { pearson$statistic<-waldstat pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-pf(pearson$statistic, numdf, denomdf, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } return(pearson) } mean2<-svymean(mm,design,na.rm=TRUE) Cmat<-qr.resid(qr(X1),X12[,-(1:(nr+nc-1)),drop=FALSE]) Dmat <- diag(mean2) iDmat<- diag(ifelse(mean2==0,0,1/mean2)) Vsrs <- (Dmat - outer(mean2,mean2))/N V <- attr(mean2,"var") denom<- t(Cmat) %*% (iDmat/N) %*% Cmat numr<-t(Cmat)%*% iDmat %*% V %*% iDmat %*% Cmat Delta<-solve(denom,numr) d0<- sum(diag(Delta))^2/(sum(diag(Delta%*%Delta))) warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE) options(warn) if (match.arg(statistic)=="F"){ pearson$statistic<-pearson$statistic/sum(diag(Delta)) pearson$p.value<-pf(pearson$statistic, d0, d0*nu, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$parameter<-c(ndf=d0,ddf=d0*nu) } else if (match.arg(statistic)=="lincom") { pearson$p.value<-pchisqsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="integration") pearson$parameter<-NULL pearson$method<-"Pearson's X^2: asymptotic exact distribution" }else if (match.arg(statistic)=="saddlepoint") { pearson$p.value<-pchisqsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint") pearson$parameter<-NULL pearson$method<-"Pearson's X^2: saddlepoint approximation" } else { pearson$p.value<-pchisq(pearson$statistic/mean(diag(Delta)), df=NCOL(Delta),lower.tail=FALSE) pearson$parameter<-c(df=NCOL(Delta)) } if (returnNA){ pearson$statistic<-NA pearson$p.value<-NA } pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" pearson } summary.svreptable<-function(object,...){ object } summary.svytable<-function(object, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"),...){ statistic<-match.arg(statistic) call<-attr(object, "call") ff<-call$formula if (is.null(environment(ff))) env<-parent.frame() else env<-environment(ff) ff<-delete.response(ff) test<-eval(bquote(svychisq(.(ff), design=.(call$design), statistic=.(statistic))), env) rval<-list(table=object,statistic=test) class(rval)<-"summary.svytable" rval } print.summary.svytable<-function(x,digits=0,...){ print(round(x$table,digits)) print(x$statistic,...) } survey/R/twophase.R0000644000176200001440000006120213517614272013776 0ustar liggesusers## ## twophase<-function(id,strata=NULL, probs=NULL, weights=NULL, fpc=NULL, subset, data, method=c("full","approx","simple")){ data<-detibble(data) method<-match.arg(method) if(method=="full") { if (!is.null(weights)) stop("weights not accepted by method='full'") return(twophase2(id=id, strata=strata, probs=probs, fpc=fpc,subset=subset,data=data)) } d1<-svydesign(ids=id[[1]],strata=strata[[1]],weights=weights[[1]], probs=probs[[1]],fpc=fpc[[1]],data=data) if(inherits(subset,"formula")) subset<-eval.parent(model.frame(subset,data=data,na.action=na.pass))[[1]] if(!is.logical(subset) && sort(unique(subset))==c(0,1)) subset<-as.logical(subset) if (any(is.na(subset))) stop("missing values in 'subset'") d1s<-svydesign(ids=id[[1]],strata=strata[[1]],weights=weights[[1]], probs=probs[[1]],fpc=fpc[[1]],data=data[subset,]) d1s$prob<-d1$prob[subset] d1s$allprob<-d1$allprob[subset,,drop=FALSE] ##if (NCOL(d1s$allprob)>1) ## stop("Can't handle multistage sampling at phase 1 (yet)") ## work out phase-two fpc if (is.null(fpc[[2]])){ complete.vars<-names(data)[apply(data, 2, function(v) all(!is.na(v)))] if (all(c(all.vars(id[[2]]), all.vars(strata[[2]])) %in% complete.vars)){ dfpc<-svydesign(ids=id[[2]], strata=strata[[2]], data=data, probs=NULL) popsize<-mapply(function(s,i) ave(!duplicated(i),s,FUN=sum), dfpc$strata, dfpc$cluster) rm(dfpc) } else { warning("Second-stage fpc not specified and not computable") popsize<-NULL } } else popsize<-NULL d2<-svydesign(ids=id[[2]], strata=strata[[2]], probs=probs[[2]], weights=weights[[2]], fpc=fpc[[2]], data=data[subset,]) ## ugly hack to get nicer labels if(!is.null(fpc[[2]])){ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), weights=.(weights[[2]]), fpc=.(fpc[[2]]))) } else{ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), weights=.(weights[[2]]), fpc=`*phase1*`)) } for(i in names(d2call)[-1]) d2call[[i]]<-d2call[[i]] d2$call<-d2call d1call<-bquote(svydesign(ids=.(id[[1]]), strata=.(strata[[1]]), probs=.(probs[[1]]), weights=.(weights[[1]]), fpc=.(fpc[[1]]))) for(i in names(d1call)[-1]) d1call[[i]]<-d1call[[i]] d1$call<-d1call ## Add phase 2 fpc and probs if they were computed rather than specified. if (!is.null(popsize)) d2$fpc<-as.fpc(popsize[subset,,drop=FALSE],d2$strata,d2$cluster) if(is.null(probs[[2]]) && is.null(weights[[2]]) && !is.null(d2$fpc$popsize)){ d2$allprob<-1/weights(d2$fpc,final=FALSE) d2$prob<-apply(as.data.frame(d2$allprob),1,prod) } d2$variables<-NULL rval<-list(phase1=list(full=d1,sample=d1s), phase2=d2, subset=subset) rval$prob<-rval$phase1$sample$prob ## Are phase 2 PSUs the same as Phase 1 USUs, or smaller? rval$samescale<- !any(duplicated(d1s$cluster[,NCOL(d1s$cluster)][!duplicated(d2$cluster[,1])])) ## For each phase 1 sampling unit, need probability of being represented ## at phase 2. nunique<-function(x) sum(!duplicated(x)) m<-NCOL(rval$phase1$sample$cluster) if(d2$has.strata){ if (inherits(strata[[2]],"formula")) sa<-eval(attr(terms(strata[[2]]),"variables")[[2]],d1$variables) else sa<-d1$strata[,1] cm<-rval$phase1$full$cluster[,m] if (nunique(sa)!=nunique(sa[subset])) stop("Some phase-2 strata have zero sampling fraction") rval$usu<-ave(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(object,...){ attr(object,"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) xbar<-svymean(x,design, na.rm=na.rm) if(NCOL(x)==1) { x<-x-xbar v<-svymean(x*x*n/(n-1),design, na.rm=na.rm) attr(v,"statistic")<-"variance" return(v) } x<-t(t(x)-xbar) p<-NCOL(x) a<-matrix(rep(x,p),ncol=p*p) b<-x[,rep(1:p,each=p)] ## Kish uses the n-1 divisor, so it affects design effects v<-svymean(a*b*n/(n-1),design, na.rm=na.rm) vv<-matrix(v,ncol=p) dimnames(vv)<-list(names(xbar),names(xbar)) attr(vv,"var")<-attr(v,"var") attr(vv,"statistic")<-"variance" class(vv)<-c("svyvar","svystat") vv } print.svyvar<-function (x, covariance=FALSE, ...) { if(!is.matrix(x)) NextMethod() vv <- attr(x, "var") if (covariance){ nms<-outer(rownames(x),colnames(x),paste,sep=":") m<-cbind(as.vector(x), sqrt(diag(vv))) rownames(m)<-nms } else{ ii <- which(diag(sqrt(length(x)))>0) m <- cbind(x[ii], sqrt(diag(vv))[ii]) } colnames(m) <- c(attr(x, "statistic"), "SE") printCoefmat(m) } as.matrix.svyvar<-function(x,...) unclass(x) 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) 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,] dbeta.subset<-resid(g,"dfbeta",weighted=TRUE) if (nrow(design)==NROW(dbeta.subset)){ dbeta<-as.matrix(dbeta.subset) } else { dbeta<-matrix(0,ncol=NCOL(dbeta.subset),nrow=nrow(design)) dbeta[is.finite(design$prob),]<-dbeta.subset } g$inv.info<-g$var if (inherits(design,"survey.design2")) g$var<-svyrecvar(dbeta, design$cluster, design$strata, design$fpc, postStrata=design$postStrata) else if (inherits(design, "twophase")) g$var<-twophasevar(dbeta, design) else if(inherits(design, "twophase2")) g$var<-twophase2var(dbeta, design) else if(inherits(design, "pps")) g$var<-ppsvar(dbeta,design) else g$var<-svyCprod(dbeta, design$strata, design$cluster[[1]], design$fpc,design$nPSU, design$certainty,design$postStrata) g$wald.test<-coef(g)%*%solve(g$var,coef(g)) g$ll<-g$loglik g$loglik<-NULL g$rscore<-NULL g$score<-NA g$degf.resid<-degf(design)-length(coef(g)[!is.na(coef(g))])+1 g } model.frame.svycoxph<-function(formula,...){ f<-formula$call env <- environment(formula(formula)) if (is.null(env)) env <- parent.frame() f[[1]]<-as.name("model.frame") f$data<-quote(data) f$design<-NULL f$method<-f$control<-f$singular.ok<-f$model<-f$x<-f$y<-f$iter<-NULL f$formula<-formula(formula) if (is.null(f$weights)) f$weights<-quote(.survey.prob.weights) else f$weights<-bquote(.survey.prob.weights*.(f$weights)) design<-formula$survey.design data<-model.frame(design) data$.survey.prob.weights<-(1/design$prob)/sum(1/design$prob) with(list(data=data), eval(f)) } model.matrix.svycoxph<-function (object, data = NULL, contrast.arg = object$contrasts, ...) { if (!is.null(object[["x"]])) object[["x"]] else { if (is.null(data)) data <- model.frame(object, ...) else data <- model.frame(object, data = data, ...) Terms <- object$terms attr(Terms, "intercept") <- 1 strats <- attr(Terms, "specials")$strata cluster <- attr(Terms, "specials")$cluster dropx <- NULL if (length(cluster)) { tempc <- untangle.specials(Terms, "cluster", 1:10) ord <- attr(Terms, "order")[tempc$terms] if (any(ord > 1)) stop("Cluster can not be used in an interaction") dropx <- tempc$terms } if (length(strats)) { temp <- untangle.specials(Terms, "strata", 1) dropx <- c(dropx, temp$terms) } if (length(dropx)) { newTerms <- Terms[-dropx] X <- model.matrix(newTerms, data, contrasts = contrast.arg) } else { newTerms <- Terms X <- model.matrix(Terms, data, contrasts = contrast.arg) } X } } print.svycoxph<-function(x,...){ print(x$survey.design, varnames=FALSE, design.summaries=FALSE,...) ## x$call<-x$printcall NextMethod() } summary.svycoxph<-function(object,...){ print(object$survey.design,varnames=FALSE, design.summaries=FALSE,...) ## object$call<-object$printcall NextMethod() } survfit.svycoxph<-function(object,...){ stop("No survfit method for survey models") } extractAIC.svycoxph<-function(fit,...){ stop("No AIC for survey models") } anova.svycoxph<-function(object,...){ stop("No anova method for survey models") } svyglm<-function(formula, design,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$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) 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) } 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.R0000644000176200001440000002321013730741702013304 0ustar liggesusers svydesign.imputationList<-function(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, pps=FALSE,...){ 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,...)) rval <- list(designs=designs, call=sys.call(-1)) class(rval) <- "svyimputationList" rval } svrepdesign.imputationList<-function(variables=NULL, repweights,weights,data,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,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,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,mse=mse,...), data$imputations, repweights$imputations,SIMPLIFY=FALSE) } else { designs <- lapply(data$imputations, function(d) svrepdesign( repweights=repweights, weights=weights,data=d,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.R0000644000176200001440000000561013517345031013773 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"){ for(i in seq(length=length(x))){ lambda<-rep(a,df) sad<-sapply(x,saddle,lambda=lambda) if (lower.tail) sad<-1-sad guess<-ifelse(is.na(sad),guess,sad) } return(guess) } } saddle<-function(x,lambda){ d<-max(lambda) lambda<-lambda/d x<-x/d k0<-function(zeta) -sum(log(1-2*zeta*lambda))/2 kprime0<-function(zeta) sapply(zeta, function(zz) sum(lambda/(1-2*zz*lambda))) kpprime0<-function(zeta) 2*sum(lambda^2/(1-2*zeta*lambda)^2) n<-length(lambda) if (any(lambda < 0)) { lmin <- max(1/(2 * lambda[lambda < 0])) * 0.99999 } else if (x>sum(lambda)){ lmin <- -0.01 } else { lmin<- -length(lambda)/(2*x) } lmax<-min(1/(2*lambda[lambda>0]))*0.99999 hatzeta <- uniroot(function(zeta) kprime0(zeta) - x, lower = lmin, upper = lmax, tol = 1e-08)$root w<-sign(hatzeta)*sqrt(2*(hatzeta*x-k0(hatzeta))) v<-hatzeta*sqrt(kpprime0(hatzeta)) if (abs(hatzeta)<1e-4) NA else pnorm(w+log(v/w)/w, lower.tail=FALSE) } survey/R/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.R0000755000176200001440000003016014066261522013617 0ustar liggesusers##deviance methods not exported, used by method="LRT" deviance.svycoxph<-function(object,...) 2 * (object$ll[1] - object$ll[2]) deviance.coxph<-function(object,...) 2 * (object$loglik[1] - object$loglik[2]) 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)))),environment(formula(model))) chisq<-deviance(model0)-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) if (is.list(stat)){ coef<-list(contrast=coef, replicates=crossprod(stat$replicates, contrasts)) } class(coef)<-"svrepstat" attr(coef,"statistic")<-"contrast" coef } } nlcon<-function(exprlist, datalist, varmat, 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"))){ repstat<-list(stat=coef(stat), replicates=r) attr(repstat,"var")<-vcov(stat) class(repstat)<-c("svrepstat",class(stat)) svycontrast(repstat, contrasts,...) } else NextMethod() ## default } survey/R/svyivreg.R0000644000176200001440000000336213517650771014031 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, ...){ class(object)<-"ivreg" summary(object, vcov.=NULL, 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.R0000644000176200001440000001535213517345031013427 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)) 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<-woodruffCI } 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$qhat)) attr(ests, "scale") <- design$scale attr(ests, "rscales") <- design$rscales attr(ests, "mse") <- design$mse reps<-sapply(rvals, function(v) t(sapply(v, function(qi) qi$replicates))) rval<-list(quantile=ests,replicates=reps) attr(rval,"var")<-svrVar(reps, design$scale, design$rscales, mse=design$mse, coef=ests) 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=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/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 & iN/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 } survey/R/grake.R0000644000176200001440000004230114074217675013241 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.ODBCsvydesign<-function(formula, design,...){ design$variables <- getvars(formula, design$db$connection, design$db$tablename, updates = design$updates) 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") } trimWeights.survey.design2<-function(design, upper=Inf, lower= -Inf, strict=FALSE,...){ pw<-weights(design,"sampling") outside<-pwupper if (!any(outside)) return(design) pwnew<-pmax(lower,pmin(pw, upper)) trimmings<-pw-pwnew pwnew[!outside]<-pwnew[!outside]+sum(trimmings)/sum(!outside) design$prob<-1/pwnew design$call<-sys.call() design$call[[1]]<-as.name(.Generic) if (strict) ## ensure that the trimmings don't push anything outside the limits trimWeights(design, upper,lower, strict=TRUE) else design } trimWeights.svyrep.design<-function(design, upper=Inf, lower= -Inf, compress=FALSE,...){ pw<-weights(design,"sampling") outside<-pwupper if (any(outside)) { pwnew<-pmax(lower,pmin(pw, upper)) trimmings<-pw-pwnew pwnew[!outside]<-pwnew[!outside]+sum(trimmings)/sum(!outside) design$prob<-1/pw } rw<-weights(design, "analysis") outside<-rwupper if (any(outside)) { rwnew<-pmax(lower,pmin(rw, upper)) trimmings<-rw-rwnew rwnew<-rwnew[!outside]+t(t(!outside)+colSums(trimmings)/colSums(!outside)) if (compress) design$repweights<-compressWeights(rwnew) else design$repweights<-rwnew design$combined.weights<-TRUE } design } margins2totals<-function(formulas, totals){ totals<-mapply(onemargin2totals,formulas,totals,SIMPLIFY=FALSE) totaln<-do.call(c,totals) totalorder<-do.call(c,lapply(totals,function(x) attr(x,"order"))) totaln<-totaln[order(totalorder)] totaln[!duplicated(names(totaln))] } onemargin2totals<-function(formula,total){ if (is.table(total)) total<-as.data.frame(total) if (!is.data.frame(total) && is.vector(total) && (length(formula[[2]])==1)){ ## just a vector total<-as.table(total) d<-dimnames(total) names(d)<-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.R0000644000176200001440000000577113707644346013313 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) 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) 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) 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) 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) 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) 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/multistage.R0000755000176200001440000006552514066261522014335 0ustar liggesusers## ## Recursive estimation of linearisation variances ## in multistage samples. ## svydesign<-function(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data=NULL, nest = FALSE, check.strata = !nest, weights = NULL,pps=FALSE,...){ UseMethod("svydesign", data) } detibble<-function(data) { if ("tbl_df" %in% class(data)) as.data.frame(data) else data } svydesign.default<-function(ids,probs=NULL,strata=NULL,variables=NULL, fpc=NULL, data=NULL, nest=FALSE, check.strata=!nest,weights=NULL,pps=FALSE, variance=c("HT","YG"),...){ data<-detibble(data) variance<-match.arg(variance) if(is.character(pps)){ a<-match.arg(pps,c("brewer","overton","other")) if (!(pps %in% c("brewer","other"))) return(pps_design(ids=ids,probs=probs, strata=strata,variables=variables, fpc=fpc, data=data,method=a,call=sys.call(-1),variance=variance,...)) } else if (!is.logical(pps)){ return(pps_design(ids=ids,probs=probs, strata=strata,variables=variables, fpc=fpc, data=data,method=pps,call=sys.call(-1),variance=variance,...)) } if (!is.character(pps) || pps!="other"){ if (variance!="HT") stop("Only variance='HT' supported for this design") } ## less memory-hungry version for sparse tables interaction<-function (..., drop = TRUE) { args <- list(...) narg <- length(args) if (narg == 1 && is.list(args[[1]])) { args <- args[[1]] narg <- length(args) } ls<-sapply(args,function(a) length(levels(a))) ans<-do.call("paste",c(lapply(args,as.character),sep=".")) ans<-factor(ans) return(ans) } na.failsafe<-function(message="missing values in object"){ function(object,...){ if (NCOL(object)==0) object else { ok <- complete.cases(object) if (all(ok)) object else stop(message) } } } na.id<-na.failsafe("missing values in `id'") if(inherits(ids,"formula")) { mf<-substitute(model.frame(ids,data=data, na.action=na.id)) ids<-eval.parent(mf) if (ncol(ids)==0) ## formula was ~1 ids<-data.frame(id=1:nrow(ids)) } else{ if (is.null(ids)) stop("Must provide ids= argument") else ids<-na.id(data.frame(ids)) } ## make ids factor if they are character for(i in 1:ncol(ids)){ if (is.character(ids[[i]])) ids[[i]]<-factor(ids[[i]]) } na.prob<-na.failsafe("missing values in `prob'") if(inherits(probs,"formula")){ mf<-substitute(model.frame(probs,data=data,na.action=na.prob)) probs<-eval.parent(mf) } na.weight<-na.failsafe("missing values in `weights'") if(inherits(weights,"formula")){ mf<-substitute(model.frame(weights,data=data,na.action=na.weight)) weights<-eval.parent(mf) } else if (!is.null(weights)) weights<-na.weight(data.frame(weights)) if(!is.null(weights)){ if (!is.null(probs)) stop("Can't specify both sampling weights and probabilities") else probs<-as.data.frame(1/as.matrix(weights)) } na.strata<-na.failsafe("missing values in `strata'") if (!is.null(strata)){ if(inherits(strata,"formula")){ mf<-substitute(model.frame(strata,data=data, na.action=na.strata)) strata<-eval.parent(mf) } if (!is.list(strata)) strata<-data.frame(strata=strata) has.strata<-TRUE for(i in 1:NCOL(strata)){ ##drop empty strata if (is.factor(strata[[i]])) strata[[i]]<-as.factor(as.character(strata[[i]])) } } else { has.strata <-FALSE strata<-na.strata(as.data.frame(matrix(1, nrow=NROW(ids), ncol=NCOL(ids)))) } if (inherits(variables,"formula")){ mf<-substitute(model.frame(variables,data=data,na.action=na.pass)) variables <- eval.parent(mf) } else if (is.null(variables)){ variables<-data } else variables<-do.call("data.frame",variables) na.fpc<-na.failsafe("missing values in `fpc'") if (inherits(fpc,"formula")){ mf<-substitute(model.frame(fpc,data=data,na.action=na.fpc)) fpc<-eval.parent(mf) } ## check for only one PSU: probably a typo if ((length(unique(ids[,1]))==1) && !(nest && has.strata)){ stop("Design has only one primary sampling unit") } ## force subclusters nested in clusters if (NCOL(ids)>1){ N<-ncol(ids) for(i in 2:N){ ids[,i]<-do.call("interaction", ids[,1:i,drop=FALSE]) } } ## force clusters nested in strata if (nest && has.strata && NCOL(ids)){ N<-NCOL(ids) NS<-NCOL(strata) for(i in 1:N) ids[,i]<-do.call("interaction", c(strata[,1:min(i,NS),drop=FALSE], ids[,i,drop=FALSE])) } ## check if clusters nested in strata if (check.strata && nest) warning("No point in check.strata=TRUE if nest=TRUE") if(check.strata && !is.null(strata) && NCOL(ids)){ sc<-(rowSums(table(ids[,1],strata[,1])>0)) if(any(sc>1)) stop("Clusters not nested in strata at top level; you may want nest=TRUE.") } ## force substrata nested in clusters N<-ncol(ids) NS<-ncol(strata) if (N>1){ for(i in 2:N) strata[,i]<-interaction(strata[,min(i,NS)], ids[,i-1]) } ## PPS: valid choices currently are FALSE and "brewer" if (is.logical(pps) && pps) stop("'pps' must be FALSE or a character string") if (is.character(pps)) { pps<-TRUE } ## Finite population correction: specified per observation ## Also incorporates design sample sizes formerly in nPSU if (!is.null(fpc) && !is.numeric(fpc) && !is.data.frame(fpc)) stop("fpc must be a matrix or dataframe or NULL") fpc<-as.fpc(fpc,strata, ids, pps=pps) ## if FPC specified, but no weights, use it for weights if (is.null(probs) && is.null(weights)){ if (is.null(fpc$popsize)){ if (missing(probs) && missing(weights)) warning("No weights or probabilities supplied, assuming equal probability") probs<-rep(1,nrow(ids)) } else { probs<-1/weights(fpc, final=FALSE) } } if (is.numeric(probs) && length(probs)==1) probs<-rep(probs, NROW(variables)) if (length(probs)==0) probs<-rep(1,NROW(variables)) if (NCOL(probs)==1) probs<-data.frame(probs) rval<-list(cluster=ids) rval$strata<-strata rval$has.strata<-has.strata rval$prob<- apply(probs,1,prod) rval$allprob<-probs rval$call<-match.call() rval$variables<-variables rval$fpc<-fpc rval$call<-sys.call(-1) rval$pps<-pps class(rval)<-c("survey.design2","survey.design") rval } onestrat<-function(x,cluster,nPSU,fpc, lonely.psu,stratum=NULL,stage=1,cal=cal){ if (is.null(fpc)) f<-rep(1,NROW(x)) else{ f<-ifelse(fpc==Inf, 1, (fpc-nPSU)/fpc) } if (nPSU>1) scale<-f*nPSU/(nPSU-1) else scale<-f if (all(f<0.0000001))## self-representing stratum return(matrix(0,NCOL(x),NCOL(x))) scale<-scale[!duplicated(cluster)] x<-rowsum(x,cluster) nsubset<-nrow(x) if (nsubset1 || (nPSU>1 & !getOption("survey.adjust.domain.lonely"))) x<-sweep(x, 2, colMeans(x), "-") if (nsubset==1 && nPSU>1 && getOption("survey.adjust.domain.lonely")){ warning("Stratum (",stratum,") has only one PSU at stage ",stage) if (lonely.psu=="average" && getOption("survey.adjust.domain.lonely")) scale<-NA } if (nPSU>1){ return(crossprod(x*sqrt(scale))) } else { rval<-switch(lonely.psu, certainty=crossprod(x*sqrt(scale)), remove=crossprod(x*sqrt(scale)), adjust=crossprod(x*sqrt(scale)), average=NA*crossprod(x), fail= stop("Stratum (",stratum,") has only one PSU at stage ",stage), stop("Can't handle lonely.psu=",lonely.psu) ) rval } } onestage<-function(x, strata, clusters, nPSU, fpc, lonely.psu=getOption("survey.lonely.psu"),stage=0, cal){ if (NROW(x)==0) return(matrix(0,NCOL(x),NCOL(x))) stratvars<- tapply(1:NROW(x), list(factor(strata)), function(index){ onestrat(x[index,,drop=FALSE], clusters[index], nPSU[index][1], fpc[index], ##changed from fpc[index][1], to allow pps(brewer) lonely.psu=lonely.psu,stratum=strata[index][1], stage=stage,cal=cal) }) p<-NCOL(x) nstrat<-length(unique(strata)) nokstrat<-sum(sapply(stratvars,function(m) !any(is.na(m)))) apply(array(unlist(stratvars),c(p,p,length(stratvars))),1:2,sum,na.rm=TRUE)*nstrat/nokstrat } svyrecvar<-function(x, clusters, stratas, fpcs, postStrata=NULL, lonely.psu=getOption("survey.lonely.psu"), one.stage=getOption("survey.ultimate.cluster")){ x<-as.matrix(x) cal<-NULL ## Remove post-stratum means, which may cut across clusters ## Also center the data using any "g-calibration" models if(!is.null(postStrata)){ for (psvar in postStrata){ if (inherits(psvar, "greg_calibration")) { if (psvar$stage==0){ ## G-calibration at population level x<-as.matrix(qr.resid(psvar$qr,x/psvar$w)*psvar$w) } else { ## G-calibration within clusters cal<-c(cal, list(psvar)) } } else if (inherits(psvar, "raking")){ ## raking by iterative proportional fitting for(iterations in 1:10){ for(margin in psvar){ psw<-attr(margin, "weights") x<- x - psw*apply(x/psw, 2, ave, margin) } } } else { ## ordinary post-stratification psw<-attr(psvar, "weights") oldw<-attr(psvar, "oldweights") if (is.null(oldw)) oldw<-rep(1,length(psw)) zeroes<-which(psw==0 & oldw==0) if (length(zeroes)) psw[zeroes]=1 psvar<-as.factor(psvar) psmeans<-rowsum(x*oldw/psw,psvar,reorder=TRUE)/as.vector(by(oldw,psvar,sum)) x<- x-psmeans[match(psvar,sort(unique(psvar))),]*psw } } } multistage(x, clusters,stratas,fpcs$sampsize, fpcs$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage,stage=1,cal=cal) } multistage<-function(x, clusters, stratas, nPSUs, fpcs, lonely.psu=getOption("survey.lonely.psu"), one.stage=FALSE,stage,cal){ n<-NROW(x) v <- onestage(x,stratas[,1], clusters[,1], nPSUs[,1], fpcs[,1], lonely.psu=lonely.psu,stage=stage,cal=cal) if (one.stage!=TRUE && !is.null(fpcs) && NCOL(clusters)>1) { v.sub<-by(1:n, list(as.numeric(clusters[,1])), function(index){ ## residuals for G-calibration using population information ## only on clusters at this stage. for(cali in cal){ if (cali$stage != stage) next j<-match(clusters[index,1],cali$index) if (length(unique(j))!=1) stop("Internal problem in g-calibration data: stage",stage, ", cluster", j) j<-j[[1]] x[index,]<-as.matrix(qr.resid(cali$qr[[j]], x[index,,drop=FALSE]/cali$w[[j]])*cali$w[[j]]) } multistage(x[index,,drop=FALSE], clusters[index,-1,drop=FALSE], stratas[index,-1,drop=FALSE], nPSUs[index,-1,drop=FALSE], fpcs[index,-1,drop=FALSE], lonely.psu=lonely.psu,one.stage=one.stage-1, stage=stage+1,cal=cal)*nPSUs[index[1],1]/fpcs[index[1],1] }) for(i in 1:length(v.sub)) v<-v+v.sub[[i]] } dimnames(v)<-list(colnames(x),colnames(x)) v } ## fpc not given are zero: full sampling. as.fpc<-function(df,strata,ids,pps=FALSE){ count<-function(x) 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) 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){ 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){ attr(average,"influence") <- x*pweights/psum } class(average)<-"svystat" if (is.character(deff) || deff){ nobs<-sum(weights(design)!=0) if(deff=="replace"){ vsrs<-svyvar(x,design,na.rm=na.rm)/(nobs) } else { if(psum 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.R0000644000176200001440000002526513624050157013321 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", "expected", "terms","curve"), ...){ type<-match.arg(type) if(type!="curve") return(NextMethod()) design<-object$survey.design response<-object$y if (!is.null(attr(terms(object), "specials")$strata)) stop("Stratified models are not supported yet") if (attr(response,"type")=="counting"){ time<-object$y[,2] status<-object$y[,'status'] entry<-object$y[,1] } else if (attr(response,'type')=="right"){ time<-object$y[,"time"] status<-object$y[,"status"] entry<-rep(-Inf,length(time)) } else stop("unsupported survival type") if(is.null(object$na.action)){ design<-object$survey.design } else { design<-object$survey.design[-object$na.action,] } ff<-delete.response(terms(formula(object))) zmf<-model.frame(ff, newdata) z.pred<-model.matrix(ff, zmf)[,-1,drop=FALSE] ## ## The simple case first ## risk<-getS3method("predict","coxph")(object,type="risk",se.fit=FALSE) if(se==FALSE){ tt<-c(time,entry) ss<-c(status,rep(0,length(entry))) ee<-c(rep(1,length(status)),rep(-1,length(entry))) oo<-order(tt,-ee,-ss) dN<-ss[oo] w<-rep(weights(design),2)[oo] risks<-rep(risk,2) Y<-rev(cumsum(rev(risks[oo]*w*ee[oo]))) keep<-dN>0 s<-vector("list",nrow(z.pred)) beta<-coef(object) h0<- cumsum( (w*dN/Y)[keep] ) for(i in 1:nrow(z.pred)){ zi<-z.pred[i,]-object$means s[[i]]<-list(time=time[oo][keep], surv=exp(-h0 * exp(sum(beta*zi))), call=sys.call()) class(s[[i]])<-c("svykmcox","svykm") } names(s)<-rownames(newdata) return(s) } ## ## The hard case: curves with standard errors ## if(!inherits(design,"survey.design")) stop("replicate-weight designs not supported yet") keep<-which((status==1) & (weights(design)!=0)) y<-outer(time,time[keep],">=")*risk*outer(entry,time[keep],"<=") dN<-diag(status)[,keep] oo<-order(time[keep], -status[keep]) okeep<-keep[oo] ntimes<-length(oo) ttime<-time[okeep] sstatus<-status[okeep] totals<-svytotal(cbind(dN[,oo],y[,oo]), design) rm(dN) y<-coef(totals)[-(1:ntimes)] dNbar<-coef(totals)[1:ntimes] vtotals<-vcov(totals) rm(totals) h<-cumsum(dNbar/y) dVn<- vtotals[(1:ntimes),(1:ntimes)]/outer(y,y) dVy <- vtotals[-(1:ntimes),-(1:ntimes)]*outer(dNbar/y^2,dNbar/y^2) dCVny<- -vtotals[(1:ntimes),-(1:ntimes)]*outer(1/y,dNbar/y^2) dV<-dVn+dVy+dCVny+t(dCVny) det<-suppressWarnings(coxph.detail(object)) ze<-sweep(as.matrix(det$means)[rep(1:length(det$time), det$nevent),,drop=FALSE], 2, object$means) rm(det) dH<-dNbar/y h.ze<-dH*ze varbeta<-vcov(object) Vh<-numeric(ntimes) Vh[1]<-dV[1,1] for(i in 2:ntimes) Vh[i]<-Vh[i-1]+sum(dV[1:(i-1),i])+sum(dV[i,1:i]) dVb<-numeric(ntimes) for(i in 1:ntimes) dVb[i]<-crossprod(h.ze[i,],varbeta%*%(h.ze[i,])) Vb<-cumsum(dVb) dCV<-matrix(nrow=ntimes,ncol=NCOL(ze)) for(i in 1:ntimes) dCV[i,] <- -varbeta%*%(h.ze[i,]) CV<-apply(dCV,2,cumsum) V0<-Vh+Vb s0<-exp(-h) s<-vector("list",nrow(z.pred)) for(i in 1:nrow(z.pred)){ zi<-z.pred[i,]-object$means riski<-exp(sum(zi*coef(object))) Vz<-drop(crossprod(zi,varbeta%*%zi))*riski^2*h^2 CVz<-colSums(t(dCV)*zi)*riski^2*h V<-V0*riski^2+Vz+CVz*2 s[[i]]<-list(time=ttime,surv=exp(-h*riski), varlog=V) class(s[[i]])<-c("svykm.cox","svykm") } names(s)<-rownames(newdata) scall<-sys.call() scall[[1]]<-as.name(.Generic) attr(s,"call")<-scall class(s)<-c("svykmlist.cox","svykmlist") return(s) } survey/R/twophase2.R0000644000176200001440000005612113706201306014052 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){ withreplacement<-is.null(design1$fpc$popsize) phase1<-Dcheck_multi_subset(design1$cluster, design1$strata, subset, design1$allprob, withreplacement) phase2<-Dcheck_multi(design2$cluster, design2$strata, design2$allprob) dcheck<-twophaseDcheck(phase1,phase2) list(phase1=phase1,phase2=phase2,full=dcheck) } ## ## Based on twophase(), so it computes some stuff that is no longer necessary. ## Will be pruned in the future. ## twophase2<-function(id,strata=NULL, probs=NULL, fpc=NULL, subset, data){ data<-detibble(data) d1<-svydesign(ids=id[[1]],strata=strata[[1]],weights=NULL, probs=probs[[1]],fpc=fpc[[1]],data=data) if(inherits(subset,"formula")) subset<-eval.parent(model.frame(subset,data=data,na.action=na.pass))[[1]] if(!is.logical(subset) && sort(unique(subset))==c(0,1)) subset<-as.logical(subset) if (any(is.na(subset))) stop("missing values in 'subset'") d1s<-svydesign(ids=id[[1]],strata=strata[[1]],weights=NULL, probs=probs[[1]],fpc=fpc[[1]],data=data[subset,]) d1s$prob<-d1$prob[subset] d1s$allprob<-d1$allprob[subset,,drop=FALSE] ## work out phase-two fpc if (is.null(fpc[[2]])){ complete.vars<-names(data)[apply(data, 2, function(v) all(!is.na(v)))] if (all(c(all.vars(id[[2]]), all.vars(strata[[2]])) %in% complete.vars)){ dfpc<-svydesign(ids=id[[2]], strata=strata[[2]], data=data, probs=NULL) popsize<-mapply(function(s,i) ave(!duplicated(i),s,FUN=sum), dfpc$strata, dfpc$cluster) rm(dfpc) } else { warning("Second-stage fpc not specified and not computable") popsize<-NULL } } else popsize<-NULL d2<-svydesign(ids=id[[2]], strata=strata[[2]], probs=probs[[2]], weights=NULL, fpc=fpc[[2]], data=data[subset,]) ## ugly hack to get nicer labels if(!is.null(fpc[[2]])){ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), fpc=.(fpc[[2]]))) } else{ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), fpc=`*phase1*`)) } for(i in names(d2call)[-1]) d2call[[i]]<-d2call[[i]] d2$call<-d2call d1call<-bquote(svydesign(ids=.(id[[1]]), strata=.(strata[[1]]), probs=.(probs[[1]]), fpc=.(fpc[[1]]))) for(i in names(d1call)[-1]) d1call[[i]]<-d1call[[i]] d1$call<-d1call ## Add phase 2 fpc and probs if they were computed rather than specified. if (!is.null(popsize)) d2$fpc<-as.fpc(popsize[subset,,drop=FALSE],d2$strata,d2$cluster) if(is.null(probs[[2]]) && !is.null(d2$fpc$popsize)){ d2$allprob<-1/weights(d2$fpc,final=FALSE) d2$prob<-apply(as.data.frame(d2$allprob),1,prod) } d2$variables<-NULL deltacheck<-make_covmat(d1,d2, subset) rval<-list(phase1=list(full=d1,sample=d1s), phase2=d2, subset=subset, dcheck=deltacheck) rval$prob<-rval$phase1$sample$prob ## Are phase 2 PSUs the same as Phase 1 USUs, or smaller? rval$samescale<- !any(duplicated(d1s$cluster[,NCOL(d1s$cluster)][!duplicated(d2$cluster[,1])])) ## For each phase 1 sampling unit, need probability of being represented ## at phase 2. nunique<-function(x) sum(!duplicated(x)) m<-NCOL(rval$phase1$sample$cluster) if(d2$has.strata){ if (inherits(strata[[2]],"formula")) sa<-eval(attr(terms(strata[[2]]),"variables")[[2]],d1$variables) else sa<-d1$strata[,1] cm<-rval$phase1$full$cluster[,m] if (nunique(sa)!=nunique(sa[subset])) stop("Some phase-2 strata have zero sampling fraction") rval$usu<-ave(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.R0000755000176200001440000017360014073761654014226 0ustar liggesusers hadamard.doubler<-function(H){ rbind(cbind(H,H),cbind(H,1-H)) } hadamard<- function(n){ m<-n-(n %% 4) ## hadamard.list, hadamard.sizes in sysdata.rda precooked<- which(m < hadamard.sizes & m+4 >=hadamard.sizes) if (length(precooked)) return(hadamard.list[[min(precooked)]]) if (all(m4) H<-paley(n,sizes[bestfit]) if (is.null(H)){ ndoubles<-ceiling(log(sizes/hadamard.sizes, 2))[bestfit] H<-hadamard.list[[bestfit]] for(i in seq(length=ndoubles)) H<-hadamard.doubler(H) } H } jk1weights<-function(psu, fpc=NULL, fpctype=c("population","fraction","correction"), compress=TRUE){ fpctype<-match.arg(fpctype) unq<-unique(psu) n<-length(unq) if (is.null(fpc)) fpc<-1 else { fpc<-unique(fpc) if (length(fpc)>1) stop("More than one fpc value given") if (fpc<0) stop("Negative finite population correction") if (fpctype=="population" && fpcnstrat) stop("More distinct fpc values than strata") fpc<-sapply(sunq, function(ss) fpc[match(ss,strata)]) names(fpc)<-as.character(sunq) } else if (length(fpc)==1) { fpc<-rep(fpc,nstrat) names(fpc)<-as.character(sunq) } else if (length(fpc)==nstrat){ nn<-names(fpc) if (is.null(nn)) names(fpc)<-as.character(sunq) if (!all(names(fpc) %in% as.character(sunq))) stop("fpc has names that do not match the stratum identifiers") } if (compress){ repweights<-matrix(1,ncol=length(unq),nrow=length(unq)) } else { repweights<-matrix(1,ncol=length(unq), nrow=length(psu)) } counter<-0 rscales<-numeric(length(unq)) for(ss in as.character(sunq)){ thisfpc<-fpc[match(ss,names(fpc))] theseweights<-jk1weights(psu[strata %in% ss], fpc=thisfpc, fpctype=fpctype,compress=compress) nc<-if (compress) NCOL(theseweights$repweights$weights) else NCOL(theseweights$repweights) if (nc==1 && thisfpc!=0){ ## lonely PSUs if (lonely.psu=="fail") stop("Stratum",ss,"has only one PSU") if (lonely.psu=="remove") next if (lonely.psu=="certainty") next if (lonely.psu=="average") next if (lonely.psu=="adjust"){ nc<-1 if (compress) repweights[, counter+nc]<-ifelse(strata[!duplicated(psu)] %in% ss, 0, nstrat/(nstrat-1)) else repweights[ counter+nc]<-ifelse(strata %in% ss, 0, nstrat/(nstrat-1)) rscales[counter+nc]<-(nstrat-1)/nstrat counter<-counter+nc next } } if (compress) repweights[strata[!duplicated(psu)] %in% ss,counter+seq(length=nc)]<-theseweights$repweights$weights else repweights[strata %in% ss, counter+seq(length=nc)]<-theseweights$repweights rscales[counter+seq(length=nc)]<-theseweights$scale counter<-counter+nc } if (counter==0) stop("All strata were exhaustively sampled: you have the whole population") scale<-1 if (counter2) && large=="fail") stop("Some strata have more than 2 PSUs") unq<-which(!duplicated(psu)) sunq<-strata[unq] psunq<-psu[unq] weights<-matrix(ncol=2,nrow=length(unq)) weightstrata<-numeric(length(unq)) if (length(match)==length(strata)) match<-match[unq] if (is.null(match)) match<-unq ## default is to match by dataset order oo<-order(sunq,match) upto <- 0 if(any(ssize==1)){ smallstrata<-names(ssize)[ssize==1] if(small=="split"){ weights[sunq %in% smallstrata,1]<- 0.5 weights[sunq %in% smallstrata,2]<- 0.5 weightstrata[sunq %in% smallstrata]<-1:length(smallstrata) upto<-length(smallstrata) } else { ##small=="merge" if (length(smallstrata) > 1){ weights[oo,][sunq[oo] %in% smallstrata, 1]<-rep(0:1,length.out=length(smallstrata)) weights[oo,][sunq[oo] %in% smallstrata, 2]<-rep(1:0,length.out=length(smallstrata)) if(length(smallstrata) %% 2==0) weightstrata[oo][sunq[oo] %in% smallstrata]<-rep(1:(length(smallstrata) %/%2), 2) else weightstrata[oo][sunq[oo] %in% smallstrata]<-c(1,rep(1:(length(smallstrata) %/%2), 2)) upto<-length(smallstrata) %/% 2 } else stop("Can't merge with a single small stratum") } } if (any(ssize>2)){ largestrata<-names(ssize)[ssize>2] if (large=="split"){ if (any(ssize[largestrata] %%2 ==1)) stop("Can't split with odd numbers of PSUs in a stratum") ## make substrata of size 2 for(ss in largestrata){ weights[oo,][sunq[oo] %in% ss, 1]<-rep(0:1,length.out=ssize[ss]) weights[oo,][sunq[oo] %in% ss, 2]<-rep(1:0,length.out=ssize[ss]) weightstrata[oo][sunq[oo] %in% ss]<-upto+rep(1:(ssize[ss] %/%2),each=2) upto<-upto+(ssize[ss] %/% 2) } } else { ## make two substrata. halfsize<-ssize[largestrata] %/%2 otherhalfsize<-ssize[largestrata] - halfsize reps<-as.vector(rbind(halfsize,otherhalfsize)) nlarge<-length(halfsize) weights[oo,][sunq[oo] %in% largestrata, 1]<-rep(rep(0:1,nlarge),reps) weights[oo,][sunq[oo] %in% largestrata, 2]<-rep(rep(1:0,nlarge),reps) weightstrata[oo][sunq[oo] %in% largestrata]<-upto+rep(1:length(largestrata),ssize[largestrata]) upto<-upto+length(largestrata) } } if(any(ssize==2)){ goodstrata<-names(ssize)[ssize==2] weights[oo,][sunq[oo] %in% goodstrata, 1]<-rep(0:1,length(goodstrata)) weights[oo,][sunq[oo] %in% goodstrata, 2]<-rep(1:0,length(goodstrata)) weightstrata[oo][sunq[oo] %in% goodstrata]<-upto+rep(1:length(goodstrata),each=2) upto<-upto+length(goodstrata) } if (is.null(hadamard.matrix)){ H<-hadamard(upto) } else { ## the user supplied hadamard.matrix ## Check that it is a binary matrix and satifies the ## Hadamard determinant property if (!is.matrix(hadamard.matrix) || nrow(hadamard.matrix)1 && type!="mrbbootstrap"){ fpc<-fpc[,1] warning("Finite population corrections after first stage have been dropped") } if (getOption("survey.drop.replicates")){ selfrep<-design$fpc$popsize[,1]==design$fpc$sampsize[,1] } } else{ fpc<-design$fpc[,2] names(fpc)<-design$fpc[,1] } } } else { if (type %in% c("Fay","BRR","subbootstrap")) stop(paste("fpc information cannot be used for type=",type)) if (is.null(fpctype)) stop("fpctype must be supplied if fpc is supplied") } if (type=="JK1"){ ##JK1 r<-jk1weights(design$cluster[,1], fpc=fpc,fpctype=fpctype, compress=compress) repweights<-r$repweights scale<-drop(r$scale) if (inherits(repweights,"repweights_compressed")) rscales<-rep(1, NCOL(repweights$weights)) else rscales<-rep(1, NCOL(repweights)) type<-"JK1" pweights<-1/design$prob } else if (type %in% c("BRR","Fay")){ ##BRR if (inherits(design,"survey.design2")) repweights<-brrweights(design$strata[,1], design$cluster[,1],...,fay.rho=fay.rho, compress=compress,only.weights=TRUE) else repweights<-brrweights(design$strata, design$cluster[,1],...,fay.rho=fay.rho, compress=compress,only.weights=TRUE) pweights<-1/design$prob if (length(pweights)==1) pweights<-rep(pweights, NROW(design$variables)) if (fay.rho==0) type<-"BRR" else type<-"Fay" rscales<-rep(1,ncol(repweights)) scale<-1/(ncol(repweights)*(1-fay.rho)^2) } else if (type=="JKn"){ ##JKn if (inherits(design,"survey.design2")) r<-jknweights(design$strata[,1],design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress) else r<-jknweights(design$strata,design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress) pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales } else if (type=="bootstrap"){ ##bootstrap if (inherits(design,"survey.design2")) r<-bootweights(design$strata[,1],design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress,...) else r<-bootweights(design$strata,design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress,...) pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales }else if (type=="subbootstrap"){ ##bootstrap if (inherits(design,"survey.design2")) r<-subbootweights(design$strata[,1],design$cluster[,1],compress=compress,...) else r<-subbootweights(design$strata,design$cluster[,1],compress=compress,...) pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales } else if (type=="mrbbootstrap"){ if (inherits(design,"survey.design2")) r<-mrbweights(design$cluster,design$strata,design$fpc,...) else stop("MRB bootstrap not available for obsolete svydesign objects") pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales } else stop("Can't happen") rval<-list(repweights=repweights, pweights=pweights, type=type, rho=fay.rho,scale=scale, rscales=rscales, call=sys.call(), combined.weights=FALSE, selfrep=selfrep,mse=mse) rval$variables <- design$variables class(rval)<-"svyrep.design" rval$degf<-degf(rval) rval } svrepdesign<-function(variables, repweights, weights,data=NULL,...) UseMethod("svrepdesign",data) svrepdesign.default<-function(variables=NULL,repweights=NULL, weights=NULL, data=NULL,type=c("BRR","Fay","JK1", "JKn","bootstrap", "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)) } 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" 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) 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[i,j]*denominator[,j],design,deff=deff)) } } } if (covmat){ if (is.null(allstats$replicates)) vcovmat<-matrix(0,nn*nd,nn*nd) else vcovmat<-as.matrix(svrVar(allstats$replicates[,rep(1:nn,nd)]/allstats$replicates[,nn+rep(1:nd,each=nn)], design$scale, design$rscales,mse=design$mse,coef=as.vector(rval$ratio))) rownames(vcovmat)<-names(numerator)[rep(1:nn,nd)] colnames(vcovmat)<-names(denominator)[rep(1:nd,each=nn)] rval$vcov<-vcovmat } if (return.replicates) { reps<-allstats$replicates[, rep(1:nn, nd)]/allstats$replicates[, nn + rep(1:nd, each = nn)] attr(reps,"scale")<-design$scale attr(reps,"rscales")<-design$rscales attr(reps,"mse")<-design$mse rval$replicates<-reps } rval$var<-vars attr(rval,"call")<-sys.call() if (deff=="replace" || deff) attr(rval,"deff")<-deffs class(rval)<-"svyratio" rval } vcov.svyratio <- function(object, ...){ covmat<-object$vcov if (is.null(covmat)){ covmat<-matrix(NaN,length(object$var),length(object$var)) diag(covmat)<-as.vector(object$var) } nms<-as.vector(outer(rownames(object$ratio),colnames(object$ratio),paste,sep="/")) dimnames(covmat)<-list(nms,nms) covmat } residuals.svrepglm<-function(object,type = c("deviance", "pearson", "working", "response", "partial"),...){ type<-match.arg(type) if (type=="pearson"){ y <- object$y mu <- object$fitted.values wts <- object$prior.weights r<-(y - mu) * sqrt(wts)/(sqrt(object$family$variance(mu))*sqrt(object$survey.design$pweights/sum(object$survey.design$pweights))) if (is.null(object$na.action)) r else naresid(object$na.action, r) } else NextMethod() } logLik.svrepglm<-function(object,...){ stop("svrepglm not fitted by maximum likelihood.") } vcov.svyrep.design<-function (object, replicates, centre, ...) { if (object$mse) svrVar(replicates, scale = object$scale, rscales = object$rscales, mse = object$mse, 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=variables, subset, data,call=sys.call(),variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported") rval<-svydesign(ids=ids,strata=strata,weights=NULL,variables=variables, probs=probs,fpc=fpc,data=data,pps="other") deltacheck<-pi2Dcheck(method$pij,method$tolerance) rval$variance<-variance rval$dcheck<-list(list(id=1:nrow(method$pij), dcheck=deltacheck)) rval$call<-call class(rval) <- c("pps","survey.design") rval } pps_design.ppsdcheck<-function(method,ids,strata=NULL, probs=NULL, fpc=NULL,variables=variables, subset, data,call=sys.call(),variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported") rval<-svydesign(ids=ids,strata=strata,weights=NULL,variables=variables, probs=probs,fpc=fpc,data=data,pps="other") deltacheck<-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=variables, subset, data,call=sys.call(),variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported") rval<-svydesign(ids=ids,strata=strata,weights=NULL,variables=variables, probs=probs,fpc=fpc,data=data,pps="other") w<-weights(rval) deltacheck<-method$delta*tcrossprod(w) diag(deltacheck)<-diag(method$delta)*w 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, subset, data,call=sys.call(),variables=variables,variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported with this method") rval<-svydesign(ids=ids,strata=strata,weights=NULL, probs=probs,fpc=fpc,data=data,pps="other") if (is.null(method$pbar)) ## sample estimate of sum(p^2/n) deltacheck<-multi.HR1Dcheck(rval$cluster,rval$strata,rval$allprob) else deltacheck<-multi.HRDcheck(rval$cluster,rval$strata,rval$allprob, method$pbar) rval$dcheck=deltacheck rval$variance<-variance rval$call<-call class(rval) <- c("pps","survey.design") rval } print.pps<-function(x,...){ cat("Sparse-matrix design object:\n ") print(x$call) } summary.pps<-function(object,...){ class(object)<-"summary.pps" object } print.summary.pps<-function(x,...,varnames=TRUE){ cat("Two-phase sparse-matrix design:\n ") print(x$call) cat("Sampling probabilities:\n") print(summary(x$prob)) if (varnames){ cat("Data variables:\n") print(names(x$variables)) } invisible(x) } ppsvar<-function(x,design){ postStrata<-design$postStrata est<-design$variance ##Yates-Grundy or Horvitz-Thompson if (!is.null(postStrata)){ for (psvar in postStrata){ if (inherits(psvar, "greg_calibration")) { if (psvar$stage==0){ ## G-calibration at population level y<-qr.resid(psvar$qr,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(y/psw,psvar,reorder=TRUE)/as.vector(table(factor(psvar))) x<- y-psmeans[match(psvar,sort(unique(psvar))),]*psw } } } dcheck<-design$dcheck if (length(dcheck)!=1) stop("Multistage not implemented yet") rval<-switch(est,HT=htvar.matrix(rowsum(x,dcheck[[1]]$id,reorder=FALSE),dcheck[[1]]$dcheck), YG=ygvar.matrix(rowsum(x,dcheck[[1]]$id,reorder=FALSE),dcheck[[1]]$dcheck), stop("can't happen")) rval } svytotal.pps<-function(x,design, na.rm=FALSE, deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,model.frame(design), na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if(length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } N<-sum(1/design$prob) total <- colSums(x/as.vector(design$prob),na.rm=na.rm) class(total)<-"svystat" attr(total, "var")<-v<-ppsvar(x/design$prob,design) attr(total,"statistic")<-"total" if (is.character(deff) || deff){ nobs<-NROW(design$cluster) if (deff=="replace") vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2*(N-nobs)/N else vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2 attr(total, "deff")<-v/vsrs } return(total) } svymean.pps<-function(x,design, na.rm=FALSE,deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,model.frame(design) ,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) if (any(nas>0)) design<-design[nas==0,] x[nas>0,]<-0 } pweights<-1/design$prob psum<-sum(pweights) average<-colSums(x*pweights/psum) x<-sweep(x,2,average) v<-ppsvar(x*pweights/psum,design) attr(average,"var")<-v attr(average,"statistic")<-"mean" class(average)<-"svystat" if (is.character(deff) || deff){ nobs<-nrow(design) if(deff=="replace"){ vsrs<-svyvar(x,design,na.rm=na.rm)/(nobs) } else { if(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/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.R0000755000176200001440000003750313734011352014035 0ustar liggesusers## ## tables of statistics. ## svyby<-function(formula, by, design,...) UseMethod("svyby",design) 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, 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 (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){ unwrap <-function(x){ 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 } ## 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)) 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 { unwrap2 <- function(x){ if(!is.null(attr(x, "deff"))) c(statistic = unclass(x), DEff = deff(x)) else c(statistic = unclass(x)) } 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, 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 (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){ unwrap <-function(x){ 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 } ## 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)) 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 { unwrap2 <- function(x){ if(!is.null(attr(x, "deff"))) c(statistic = unclass(x), DEff = deff(x)) else c(statistic = unclass(x)) } 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.R0000644000176200001440000000654414073761501012710 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,...)) 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){ sfit <- summary(fit) n<-sfit$df.null Nhat<-sum(w<-fit$prior.weights) sigma2hat<-coef(sfit$dispersion) 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,V) ## Now for sigma2 y<-fit$y muhat<-fit$linear.predictors Isigma2<-Nhat/(2*sigma2hat^2) Usigma2<- -1/(2*sigma2hat)+ (y-muhat)^2/(2*sigma2hat^2) Hsigma2<- sum(w*Usigma2^2) Deltasigma2<-Hsigma2/Isigma2 ## 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)/sigma2hat } survey/MD50000644000176200001440000003270414075235144012132 0ustar liggesusers41bfc4a72a1bd0c2f79e5927d19e827d *DESCRIPTION 7a0592457c1136f84731a2634525bb34 *INDEX 0d4cafeefc670dc57f4927d97c3acec7 *NAMESPACE e9c68bd9f051450f9d6e9c9a6ea48c25 *R/DBI.R aaab27b80eb753175ca0c92a20957478 *R/anova.svyglm.R 5b81c3cd21b951d535a27679230eeda4 *R/bootstrap.R 4a27dd1029f20c1db823e474cecd6994 *R/chisqsum.R b5cffd73326ccfbef1954d2ad032efa0 *R/compressweights.R fd916fce7443a3771c3a965175efa324 *R/confint.R e4b7519f8c5cad157788d9ff0bebb9b5 *R/count.R 802485eb7241cb5daa3756f95c82346a *R/dAIC.R 87b020bfe7dff04863803840b57ab969 *R/dbiupdate.R c5f1dd01370e4c3d7f3d6d3558ca15ac *R/ftable.svystat.R f061049f41241e8baf7ebddeaa940e0d *R/gofchisq.R df92c60ad4f60f3aa615159e0489e013 *R/grake.R fc7f59f3476023bbbc977abedd40152d *R/greg.R 8abae944629ac267a54eb76119674a18 *R/ht.R 7f99c61dc8bd8de3d1ac4d8c6695408d *R/loglin.R d63eb3eeddf3055bc3a15e432b2b2bde *R/logrank.R c6a1188d8529d0313542793acf9da4e0 *R/margins.R d5974389ea182dc31a4232bd81b3e7c8 *R/mrb.R 9ca0b28566332e9e3d5236293fda88f5 *R/mse.R 992c8c4e6d6fa192b742b9cdd5007ceb *R/multistage.R 7b6d54c119096397e472d504308cf749 *R/multivariate.R b476ee2dbcf229d6645099c0746b38d4 *R/naa.R d6aafca2c4de1dfd39574f71c531741c *R/newsvyquantile.R f3fe352a1ece622bde96ebd575a40aab *R/olr.R 8169eb47021665ca2790739b12669641 *R/pFsum.R d7bde53f7898b0ed437962b894c9b798 *R/paley.R 3c02e63c80d3e2c53aa8df5e5502f440 *R/pps.R bfc68bbb5d1896ca547a14354d1ed6a1 *R/qrule.R 3fd9985f44c58825def5cfefe2323771 *R/regtest.R 0ff4c8baea050c34a186be41372162ff *R/rsquared.R 254b833eed43c2329c37ee6950ce72b7 *R/stdize.R 14aabec32aa01b0ba0783771cd12a355 *R/stratsample.R 7804b6927ff1dd4abc4001a7f91a9346 *R/survey.R 0cc5ac4d9bd7a90ab8b52904f7b05c0e *R/surveyby.R 080da7f97232c658bdb864e2d2c4c74a *R/surveychisq.R 6c14072ca284f40ae34d60a17ac9cc7d *R/surveygraph.R 440b1598b9e9740f385557d36eaf5228 *R/surveyrep.R 5bc03f84ff7bf31c74e055c9efe00678 *R/svycdf.R faa56ad693b9a8640405d834cd740d0f *R/svycralpha.R c3846a9a7d4cb10c069e57af505863f6 *R/svyhist.R 12571245430c5710a63127ee42d8184c *R/svyivreg.R f93da4eb3dfce901e24adfef27619f2b *R/svykappa.R d8493d6ede129bb9e4e3ff7ed94773b0 *R/svykm.R 748ae7b937aab7bba43d58ef84ec8065 *R/svymi.R a468456dd73bec4f97735df8787d5865 *R/svynls.R 1db96e2c2908ed667bec1c68405a4c1d *R/svypredmeans.R 2d52fec7c7315546084e7e41ce9231bf *R/svyqq.R 152b532adf8e8c01c9a41df34be39b7b *R/svyquantile.R 2313eefddfee4f1364e774cdc41d82c9 *R/svyranktest.R 09148c721d7b9fd492e25b82c64dfb75 *R/svysmooth.R fe04da44d7a50f474e3db433e3a982ad *R/svysurvreg.R daed201561fd501d26d557aed0f6f0e6 *R/svyttest.R eeaedcb403d8e4b1f27adef129628580 *R/sysdata.rda 3a2f19a9a7b6e5f206a6f8a5537fb2d4 *R/transform.R 243ad5b5bcd14d84c2af0189d7f857bf *R/twophase.R 3379354392ea811f0cb32ce41ef050a4 *R/twophase2.R 6c069bda823793258fa7630e6c8138ab *R/weightconstruction.R ec9159b6d06e606f8d161c6d46a31c1d *R/withPV.R d9916b9e1a74fd430e698d2dad4eaddc *THANKS 72b41af2715bc7e0eeacfccb34a1eab0 *TODO 8a48cf1f4a85f30daaaae8a9e7db5f30 *build/vignette.rds 5fdacf15ecf5c58037066642b2abf9df *data/api.rda b7a7e85ed510ee94efcb299851bc4fea *data/crowd.rda ee19cd040582a1df96f91ce9cd7162f9 *data/election.rda 9b5c2bf8bfa18b717266c77187207621 *data/fpc.rda 21bc2a0005926cb1de29b823061832dc *data/hospital.rda 24e8014bd3c47131b579975eaf0d2a9d *data/mu284.rda 0ffd0740088adf4ad45c240e49242796 *data/nhanes.rda 540ea0fccf65c41c1cbecce7b4960b14 *data/scd.rda 804d4733069e4161f9673d6f5d35a174 *data/yrbs.rda 853b47b0c3796b5a596d02c946f2030f *inst/BUGS 0c87f96785b5b49fea27d2c8b345ebd3 *inst/CITATION 9dbfcdd76553194b1513751a02042f91 *inst/COPYING 9179dd6db46326b93009b8174e681004 *inst/NEWS ad0ca60c6d7d1c64ed77618b40c5d1c5 *inst/api.db c17f45ff942d0d826c09c2c97e296249 *inst/disclaimer bd13d234657132da1a44e0a33bcfb456 *inst/doc/domain.R e549b9eba82a7a3db5543ec5be0b0bc6 *inst/doc/domain.Rnw 2178721da4f77ad3d4939cd33e5daabf *inst/doc/domain.pdf a5142360787a98ec409e10229bbd6f00 *inst/doc/epi.R cf470caff322c36517ae4ac286e420ee *inst/doc/epi.Rnw f6695a5d0bd73df8f7a6b340f6d1ee6a *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 f39aa3b51b793faab5866a7037af7575 *inst/doc/pps.pdf c32d6bb7b69fa9ba5f774af64d2f0ef6 *inst/doc/qrule.Rnw c1d8a836ffd264eb215b361ea81ba925 *inst/doc/qrule.pdf da0b23328004b9044b0f62f9341945b9 *inst/doc/survey.R dfdd268e5e85cdb9422e11b2c183aa79 *inst/doc/survey.Rnw 27e929a854df64d1cae2961b2480a4ab *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 3cd0b0ba84b6f101ffd3b099a03f3bcb *man/anova.svyglm.Rd 616d0845935d3323144ec25bf4b52964 *man/api.Rd 1df4e44a0124abadc68eeba8da160f7d *man/as.fpc.Rd a3ae6bb5709c5067e231b852fa065e2f *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 3d46235191e8edd4839ac7ddddb272e8 *man/estweights.Rd 454c137ef2b7cb57afd0f9e19a2f1ba3 *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 c7085a3734f01ba6c00cbb79480ac05d *man/nhanes.Rd 8447ae42f78e376968421ee46543a195 *man/nonresponse.Rd bd43fc6cd74a95f729e8099ee3d66a72 *man/oldsvyquantile.Rd ecb179d38dee1a930f80120be4d02375 *man/open.DBIsvydesign.Rd f5adf6d3a1f713fd087db1f4869f3091 *man/paley.Rd 5261a009c48bd256a64480a197dfc243 *man/pchisqsum.Rd 8abd82034ab612c0a12bfa2681fee4c0 *man/poisson_sampling.Rd e8fa2c17aa1230065ae000fdb0913157 *man/postStratify.Rd 47e775140012c61bde6cca8aaf0dc3d0 *man/psrsq.Rd 6e7610099924ec8ebda3bfc6dcc40015 *man/rake.Rd e7ba254bd22674a7636990ce99cd95b1 *man/regTermTest.Rd c38155f62ea15df2c750a0ca1f2cf5ff *man/scd.Rd db845dc8216a7d04e1c224b93f764d5f *man/stratsample.Rd e2d5e837e99c491b1c02c0d135516aa3 *man/subset.survey.design.Rd 4d4f8685de34adf511eca14f1d25bcd1 *man/surveyoptions.Rd 13b49ad56baacaa0105becfc0453c644 *man/surveysummary.Rd 4c4993863452ec84eeb68d5ef07c7e6f *man/svrVar.Rd 8adc030a5bbb277b4cc88a2084426cfa *man/svrepdesign.Rd 939d043da650a1f44502ba376d12ec3d *man/svy.varcoef.Rd ae19a003c9f60058fa4cb749f23e1c68 *man/svyCprod.Rd 22b01442f1664c82c004edf64a11a564 *man/svyby.Rd 533fe820a1e613b0c8a395b49af7444b *man/svycdf.Rd 621a5943e72db1fa4f549844accdd87e *man/svychisq.Rd 4be2574f626a95dc2dab3fa0bfd3e04e *man/svyciprop.Rd e67221467578feb30eac183f934c2474 *man/svycontrast.Rd 76f1c76aaf479969dab8528d4958ef74 *man/svycoplot.Rd f74df168d6f1c06f8c381e2aef2d71e5 *man/svycoxph.Rd d3a668ef39f7c71fdabb476a0099a4ba *man/svycralpha.Rd ef74840be8243fed221040561b0c028d *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 8f3e43599844b9bf73408a5b5027ae7a *man/svynls.Rd 9222dce182bacbe70b3c72e9bccb0128 *man/svyolr.Rd 3b9e8c67b5844eefd79765361bec81d5 *man/svyplot.Rd 44aa5fc0f7128f7f84b32e8fa55f7bc3 *man/svyprcomp.Rd 389375ea77c22206426323da606f51f0 *man/svypredmeans.Rd 35c1c678324addd81f628b0807030bc1 *man/svyqqplot.Rd fa78552adac660a7bf5a7c45017f3f82 *man/svyquantile.Rd 4d595d25a47be32f34555e7774e32c8f *man/svyranktest.Rd 823ef92329cafe1951fd81821a7e2bf7 *man/svyratio.Rd 40e1f8bc28b3aacbb73efa5996b51f5f *man/svyrecvar.Rd 671fb4c053614fe861700f3d5f4d804f *man/svysmooth.Rd c3f531ef8116503c4dc314e463552f7c *man/svystandardize.Rd 4f58ed2c680c203fcef35daf14ed5cfc *man/svysurvreg.Rd 7be2a1fa3d8a6de927d78e67d95d048c *man/svyttest.Rd 74fc6fcfb5bc67e0178f6522fd33adfd *man/trimWeights.Rd 91161a15e1718f9141c8e196dd99752f *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 12a520ddafbd58e5f318aa517711aac1 *man/yrbs.Rd 6cc4d0329eb80714fee45788490212d6 *tests/3stage2phase.R c91c9d0dd78c264236d5aeadbe6de4aa *tests/DBIcheck.R f09e6365e2c304ffbe615644f46d0811 *tests/README 527e5ba782684ca6a459d09a52e4bb4b *tests/api.R eba420580d5712b2bdbee74f844e2c9e *tests/badcal.R fca32d6127f578fe7cacf6957c9bcb06 *tests/badcal.Rout.save 02afc0b2619b18dbd3fd4c11f7afbac2 *tests/bycovmat.R 7178e6025a01c697c3d122898e573698 *tests/caleg.R bb39e18b97ab5f91094f9ceb71d992f5 *tests/check.R d4e620440333904b7e057ee26984fe12 *tests/check.Rout.save 116d5b9f18d84486d0169c858dec06d8 *tests/cigsw.rda cb77bb97492e653965018032b217cbb9 *tests/contrast-replicates.R fabfce50107b9e619677298ee07d87e3 *tests/coxph-termtest.R d59c6e9ef79624cc1c29fe9a2fa409fc *tests/datos_ejemplo.rds 9afd1c4ef859ba69520afe4825a3b1e2 *tests/deff.R 1c28ba9df80a9d65aee6d49bb767148d *tests/deff.Rout.save 56ecbd4b088346c57c3cef3f10ef4d17 *tests/defftest.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 3ab5b5b8d2fa053b62832df2585db7ee *tests/lonely.psu.R 0add96a76dd1182564771813281109f8 *tests/lonely.psu.Rout.save 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 faf21da4f9469c0fd3ee743ee611a004 *tests/nwts.Rout.save f78a9ca2f7d82b635a9ac83c84f22721 *tests/nwts.rda 4cc42f37fa2cd358d0483f7e2e0b4b02 *tests/poisson.R 1f2c987cef798c0d6c8635a5be720c24 *tests/pps.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 73d743b02cde34dea66b7a5a1e358a69 *tests/regpredict.R 17f986ce4a44a05026529890440f7e9e *tests/regpredict.Rout.save 08e7b85dd0996a1afa68e8dfcb698a4d *tests/scoping.R 1e41f32fae86cbcd05262014cf6b75be *tests/simdata1.RData ce54c4edad7a3b9fd9c8aa995473a794 *tests/survcurve.R 3cb8a60c150867bbd537a9c0a2493f6d *tests/survcurve.Rout.save 9f446168f9169ccffbe532fac1b42f09 *tests/svyby_se.R 4071d97f56b9bb4f4caaad8fa90bed37 *tests/svyivreg.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 08e7b85dd0996a1afa68e8dfcb698a4d *tests/testoutput/scoping.R c21c1abba50dae13b4eb2d4738f20461 *tests/testoutput/scoping.Rout.save b4b8f63f5d0e2b82607e611cf285d3d7 *tests/toy_example_for_postStratify.R 1f37c63d5a85505ced4815f455bc8dff *tests/twophase.R 6ddaf77afeb8a75a54f26be6154cc3b2 *tests/twophase.Rout.save e549b9eba82a7a3db5543ec5be0b0bc6 *vignettes/domain.Rnw cf470caff322c36517ae4ac286e420ee *vignettes/epi.Rnw 45d31ccd0e3bcb193a3cbce5c89824e7 *vignettes/pps.Rnw c32d6bb7b69fa9ba5f774af64d2f0ef6 *vignettes/qrule.Rnw dfdd268e5e85cdb9422e11b2c183aa79 *vignettes/survey.Rnw survey/INDEX0000755000176200001440000001007513707661071012417 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 svymle Maximum pseudolikelihood estimation in complex surveys svyprcomp Principal component analysis and biplots svyfactanal Weighted maximum likelihood factor analysis ----- withReplicates Replicate variances for arbitrary statistics ---- hadamard Hadamard matrices is.hadamard paley Paley-type Hadamard matrices ---- stratsample Take a stratified sample ---- Utility functions: make.calfun Define calibration metrics cal.linear cal.raking cal.logit *svy.varcoef Sandwich variance estimator for glms *svyCprod Computations for survey variances *svyrecvar Computations for multistage samples *svrVar Computations for replication variances jk1weights create replication weights jknweights create replication weights bootweights create replication weights brrweights create replication weights mrbweights create replication weights grake Computations for generalised raking *regcalibrate Computations for regression calibration degf Degrees of freedom for replication weights *twophasevar Variances in two-phase designs as.svydesign2 Convert a old svydesign object to the new format. * not exported from NAMESPACE ----- Data: election US election data fpc Small artificial example scd Cardiac arrests example api California Academic Performance Index crowd Small example from VPLX manual mu284 Two-stage sample from MU284 population nhanes Subset of NHANES 2009-10 yrbs One variable from Youth Risk Behavior Survey survey/inst/0000755000176200001440000000000014074415213012565 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ڽYY~_1ClO=6!#0hcذ`R%| gR dtuu_U7_^_})2酒d׷*0dJK]ϳNd^73/6YL(ׯk`'d~FMTI)Jkni *Pʸg (/V |[-,B{tdǸRz ~(KJQ:PAT;\_Z7w?Q!ukjtwIj x(WFIvvn6aLhWFE+|7qޠ~*ZJQ ,]%nTQpE+=,YԄ$50ljUopoCukhE|A\8c L#yJJ!2mx59 ]zk 4c"k M*~VB:p[WZDaDbHiF6ǙNa"ƅo-(>[[9`[Ұ` @:Zxp&N)oFr2Rh_M\L`/:3$%hz1Yh; ')]b 90BV:eZ@ TM33!l]D]8 "~~qTM*0i n[T]umS !jtm$XKÝㇸh( ̈BEk8󔾐H$/u[9ׄȐ B$q`3D[Ck6@'kH2ZaFNq!Ѥ&pgj+tFΗ)zBHU ($=ݹpYPYq3`Eb /J6zW(rLR.dZH"WQdsD !T!5 Wٛ^ۓ`JxBDO.@ӕW곪ͬqXD* ^$zQ-ܤC/y"{=Ot$8nb᧪XP+'bg,J QXW)# X=@sG c0U_8#<$*Wu+-D-gT*B#j4By=Vyy ,豌 ,| T3rFSA|hj['WZ_vk} 3A3y@Yb/E\W*1){ Ĵ{_}ȀmOi>/3Yd͢򋲈BB&PH,#]7\J}I?nh"YyntM5D0u$AE2r{1W@KGJ}Sn҉#2P0=-]tUT|COظM[x1gwTCaF(U:nq^]}:n*1ZwCwئ3ⱽ@)M;_::U!ߦTam=NA忈 endstream endobj 19 0 obj << /Length 3455 /Filter /FlateDecode >> stream xZYo#~ׯ L `AW~0l#xce>uLٔ5 $gk:^]|Y=hTSjp5cU4vP5NYW/֗#[WûK3g-|f]~?3&+e?ZyUXhfm? `UӈWcW^ ~aJenEgvʈ0L6.U ,Y[_.~@N &o׃) HW`lZ.o/13#k`Ɏ ag.*gD~!x5A_#|dp;#7. oJ[r1;ΗLUusĢ-3%{}e [ ݁m\$z#D96xCb2C$캷(vb'Fz7^eo"8":Kޞ _Qad=y.w |=~|Qsݓ ViXelxOm fj ܮDz5 mډp:2J`a!x8a<|~k` R*Hf+`+><#DДɜKf =H_73ⵙˋJnnrF":|n ~JI5.+ ")@wy2lMgnѽN3=o שO0`)؏tɻZ)Ytfj5pY6(o^m3MKL%9\t0gMόpp&(>c+KyRJ#' j$%uTHT a|~}0)Z,R~i7kn@, u 4b2GQُ}.k{&Ķ:D|?q+xQP[Hi2V{yM1Ukk=}E[+ѓȎmXY$E'.iq+ibQ clcg_ѳAl1rj(f+g-/؃*М6ʩo<c[:ٓO^ҡsdYYg)Y8ܾx6igLwd琮+PRW^d6%|:u#`8/GS) 8q3¦zջ |>IU7[Er>-R!tGJo׺z<8U*Gz|MNNGѾ,ՎJA4񜌯Q鲄y<W\ܥGI^ 3)8\a% w=-^߂s/ͫE[8`˛ W2=:.p6呤gΧy{FSSYL<8X1˫\x Q]p=< X-wp ts=YN2cSZM*-\}J M?Qdc˴3jw3,EYkK=B',z豛 |SjS *#[ʃ?qV?kq`Uh\~r!SJ:u`ugVA}9޶T3wp-LG(͗aQܯ4: /D{d(h%(U^?,pEܖw>NM~!9,'e֎1Eǩ8@dSDSFBAf4E (pR*T6_+RvD: @(Y8~va?ڳ}H`J7}U,}wұAt0'.VOq@<H>T61ߐK[jqxִQd4w<\ Q G o,p_xwIҙIor[端_]{ĺLAepɵ( VyXާfak:jã_#1K2riO^vnwںK7Y:ML0 X]=i*bS-#VγRڥٽzO넶T%5tT֖Z?q}>O忥|wZ3nCvW\p6/C%ݿP{( A>iLRhZ0V`x3rK Xf ?epƂrtr!H$3f\Եk/p"i+6%,fG¬Uo*G>w0Au8O? |ńGUrŒ})0@b}1yF9dz2]X!S+4l {DcS}[6 |2Y- Id![&Y#dNfKUٶpoَݶQ=+ky;{dF>ij_;K2Kd;&(6PG|Ɲ endstream endobj 26 0 obj << /Length 1037 /Filter /FlateDecode >> stream xXݏ6 _a&Βm;lڷy)ƾ\8IC(}aw(I?Ҳy4@)-sS&R'Y0Pm(Iч6 .`[9.DsT-jPv*ifmRWkV7XxnWa~ մ}ߧ/gVRY)\9(Ӊx /K,M\ ڃ4)Yfj%NS fK9!LBg0P0ӜAK3[scY[Zua*f/xbxÉ|t}!&|E[UO;N5v띸vgê<-_m鑊ʃU'V֖t){w?Gf˺aI$DŽ4v;&,> /ExtGState << >>/ColorSpace << /sRGB 30 0 R >>>> /Length 6108 /Filter /FlateDecode >> stream xM㆕F} .Eh{ fax@ wI#!yeI/ J,zDij<7|}Ň݇x8?}r}<jQmxoWovp~׻x=t/0OxXoϾ{>oma/[\o k޼ ͟z=??}p4 _-_?/k5n_8|zY/Iˎw8}qXt.|ǽs_O}s]Zkvÿrl{:.{ƺ+N^ox>OOOμdx\|G.t\|C3- .yOW?4 ꡹e9^t}ߏx;=˳ƾϳN׳nzxu/ub=_lr_rUr=F+>^q78}mu4c&q} Z<\$qY&qmh4_GE7hyv_tx ZȾ/9.κAa<-'v`<*'LQ]s.g۠̔x'ݠt6r<Ǜnt np Z^aN'Ogn1npӴ|q>rLS֌ V1E`3X#X 1E`U:F,b"f:F,b"f11E`3X 11E`3X V1U1U-U-u9Qi_crLS֬G"X 1E`u`3X 1UQ"f,b"f,bc"f* X V1E`3X V1E`3X#X V V V uG"*M)a+M=iʚ1"f,b"f* X#X 1E`3X#X 1E`u`3X VE"f,b"f,bc7,bh44e`3X#X 1E`U:F,b"f:F,b"f11E`3X 11E`3X V1U1U-UM-gs VEE`pHI4(`U* X[4VEUQ"f* X1UQ(`m(`3XVEE`U* X,bEkk2Xx ,b"fJSЌLS֬G"X 1E`U:F,b"f:F,b"f11E`3X 11E`3X V1U1U-U-5U55׈V׬VVW*Dj= ^{zu|u~ùu͂555#5+XX U$)kkƬk֬kklYٴFԺfը5bv(M/Zب[ U` l ^ˊy:c&&1#Q[ U` lT*uͰQ6FغfبU`jQ6FبU`a lT*uͰQ[EvOS[U*U5تlU 6jɄ{5cmUa lU [UFتlU U`jU5ضU5ب[UV`jQ[UFتl[5ضhmQ`bQ65FبU`a%N1Id„1غfبU`f~_A H`׌ U U A 5#H U ]3TA*R3 ŮfEx^<*`R̮LI0f &Ui+UiLG5#4ʎ3LI0r$H#A H`׌ U U A 5#H U ]3TA*RHk> lU[EبU`a lT*uͰQ{ UN[[s%,n> بU` l]3lT?FغfبU`65Fب[&A*uͰQ6Fغfب[U3d·uO4بU`a lT*uͰQ6FتikW#,1 بU`a lT*uͰQ6V` l]3lT*Q65FبU`a lU[E [UFتlU U`jU5تl[UبLW3[U*U5تlU 6V`jmUajQ[UV` lU [U*U5ضjm`ۢv{Fب[ U` lTk*Q6V`a%U KG{=f6Fب[ U` lU 65FبU` l]3lT*Q6VU`(Uخ U` l]3lT*Q6Fw[D̼֚1f UNE]|7W3A H`׌ U U A 5#H U ]3TA*R_nkϼVf̪fEyM Tk*`RL5I0r$H#`׌ U T9m*w魒ˌ H`׌ U U A 5#H U ]3TA*RHk> lU[E~xlU`a lT*uͰQ6Fتl]3lT*Q6v5330a*uͰQ6V` l]3lT*Q65FبU`a lU[EmRܮ[U*U5تlU 6V`jU5ضQ[UV`SQ٫LW3U`jU5ضU5ب[UV`jQ[UFتl[5ضhm16 l]3l]3l{uͰuͰuͰ5555FaaaaakkLXfouͰuͰQFغfغfغfغfaaaakka#f؈۴|DW*uͰQ6FغfبU` lU 6FبU`a l [W%,30a*U5ب[ U` lT*uͰQ6Fغfب[UVQ`otب[ U` lTk*Q6V`a lT*Q6Fبa-Ʉ {lU 65FبU` l]3lT*Q6VU`(U4Yrg^]3TA*R_?x|> T*`v`RLY ]3T*`RL5I0rJ530 ̊qM&U T*`v`RL RH!5#H Ur$5FبU`a lTFغfبU` lTk*Q6v5/L&LثV`gSjU5ب[UV` lU [Um U`jU5تlU 6V`jU5ب[UUFتlU [U*U5تlU 6j>m*af2a6bmQ`;-)Aب[ U` lTk*Q6V`a lT*Q6Fب[ U` lU 65FبU` l]3lT*Q6^VU’z5 jD`;/)Aب[ U` lTk*Q6V`a lT*Q6Fب[ U` lU 65FبU` l]3lT*Q6VUN/+*aIɄeŇ z]}O|;>MWOӺmwN-6r;}u/غlW5]yɷ\/DO73x9řŪ]'3<>q躮>]X>4tYo||37qhyq8{8T4t]4|oXCSqiǿCsX>ݮS3 nź|)mOBIn)<07aApb؂>~eӺ}<\|؄> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 35 0 obj << /Length 697 /Filter /FlateDecode >> stream xVMo@Wzz}PJ EDJ^k$(֞}odeJDe]j*)Jo ,Α?2ɥ/̯:}I/rFG&_6mnhQY~kLe_\g?`-?Gepʘl"W H.i PAB`s wb84\ɢ,x^>h &n*62)DZ(5> /ExtGState << >>/ColorSpace << /sRGB 39 0 R >>>> /Length 6862 /Filter /FlateDecode >> stream xOE)E,IH16FCR%|'h-$Jx_}7p<Ϸ?8 >x.w:o>?o /8a|ꗟ67tp:.o~|^w_v>܎c޻ O?׾}Fۛ<˷?~eNy:gaϻCqe:}p}~_q-++/r8w_<< ׽&vG6Gr(ۡ|pcx7٧:`e8MXs>:6^w_9SsB_i8f|\k8zin0{ 4iozGlGvn8 svG ?> .yt_Ji:RMDt56# ,,.,.,. j( ,,.,.,. j( ,,.,.,. * .y5Mam5=6v&"tuDPPև}>6kݝ嶻 ?S{gqw+4wtwt]]݆vww^1PqAS@]{ω轝7 ŽwOVtnE aw+Z &vwAcoRiJ;wɉEJyLfۧi 0 -h$!EԢ)#R4@`""ZD AD屻 Z) P 0MGѢjhZ) yIA$-<$򨈖FR~\.hZ4 Rh P+E?} DC$ -.4jhZ){v$!EMCPˣ0GGyjyґ@JD)Rj)ԑ@JD)IDDK H#h)ZJ )RyuD UZ`D`Du$-0VPKa %"*TLKX"xnZ~DK^ڨSSZ7MYL$n錖KSmh-3`:3Z1Ml@2іi5T{fR4MS& c4Ȗi(3!Mt&Ȗ 4푦Z$MI63KhMN}>PFM8FP#F":΅k8q{"FE"6*eT~S]MMCuoTvSSPSPSMu=CM=Cu=C]CuoTW.TWnSSP]MunTfSSPSPSMe56%5uW]A]w qhN&jꮨ&1[wj&ns%lNL2'd2ќLƕkhNL2'qE\qQWPSE]z.ɝ1]4ɸ*/d93ɜLɠAQ'h2'8qЉcќ<ݖ鄌IS jt4 hsvܤTOHd"q1FL"2FP#GS-4Ge88:AƈL$$ c5q4MA&Ge8 qq, 'h$2FM ɝI$wHj$4 H2d ̪: Lvҙ䜅L2z@#t&QQԨip3UD4TgMA#M4ՙDSdFSPDTAZFSPsjT@͙ Hj$TJIhL+dNlkPsDg"qtF__E}ӊE4g'Psv5ksBS]Ps}jJ5 PSPSWLRd̵r OkrԺrFdetCs2&ds2jPͦθzVgdiL41>4*$>SPSPSMiL4퓉8@i3Zh'c}2Ѵߙd'c5ꁚii"2Ѵ_F=ir_ޯVHEʹ5~S#fڇ:u:ij}SDQ Mr dZU1mW~QS?MTuU^UyQWP=CT5SyQ[ETTnQ3C]5S9LMTuXUcQWPS?P3iuuBWw+4ŮؠѤM]dL4i154D6SPSEI3ɺ:h&c+WMdE2ݙd&cJjJjJi2o2]Wh4E@L4w&@dF2ML4WRh͛M5S9LPQOD=d"1u|S=C#n8ȟ"3N@NF'M9Ԝ@#ET))3ZHd""DL2FPQDDd"ET(QDHi8ݭ"fjdTjd524K4PD55_|S]Psj.BͲ ֳS;Ǒgg禺f+bYi+jh\fjh%FFƦzjh+hꮠYy>8h%cꮩ;;;K&}ɘjj,-t&Yv!d9\h4wUZ!ޞ""njɕq ҆Fs2ShN&ɝId2FP#AdN&ɕ1(hQ0q5tRhO&Z'Sԩ2z*SԩgzDLdꩌSOL=d2HK]U}vu2u2֌WL^df򪌓WL^E&We:yuFL&5B'&򚎗a~Gy5MՙCTZD^j@^I-Z^H^[&Wgyu&Wg&2:~܎P[g2:ȫ3y5Me&ꌖWD^IeyuF˫WS-L"/2Z^@-/`$q~E즑hym48L$/2F^P#D"c5*ɫ3D"ɋ4Wgy1jy5ujL)2D4TgMA#M4ՙDSdFSPDTAq M!5MPF2CL2z@߂&cQZ2MN&?ۙH'ItB&@@d6t"~3N'{uujqlT+eTFe75U5UM~cz$OF4ZX -,t&YX c5q4M D1)h$S0Z,wꁚj$TKj$V4MC&RQOL=IC&RH=dzz:QԨj4Qs5 ENъtg܊RH'dNND:L2:5hQOD=d"TƨQOL= V=Ez:@z:57P'^΁GQ'圦z9jsf9 Yis.Jsz^f^U Edt#r,49P3CTu9PS ]ݭ,ܮK+bbbk j j j.6)6)6)ؚbbbbbk j j j.6)6)ؠؚbgR^ӱo #fIY{dL5555T[QSlM4v_+6hNM&}FrCT#TcdaL@(hla3haL@34ZXL@T9T9TydaLM&ZӮ4ZV4Zn cVjуLЙd jt4YB -!TƨQOh LP3i7ՒIjt5:i'mFPnn'mf҆*IIj&mrIQ0fYjQ|̖1ո^w55TOP3i5uW]A]wdOHjLڝuQYwMu5uTF3]Mu5Bysg3]Mysgt=7TF3ܙdz&c i2=oYM3ZMuI-!θu{TcLݙd&%Ԓ&383j4uu)DHgzz*2N=EzVLdL8C&ROez:uFꩌVOS-IL'dQ쌖LSN*LRAI~3N2H2$fdV$H2V2QOwu&s.5BjL$$2FHP#:L$$2!A#!u&#$i"$2ѹ\2N^H^B\4H^IEF˫ӔT/lD^d"yUȫWH^M#y1jϛ j5BjL$$2FHP#FHiIL$2F2H2I$CHj$5i*%Ԝ@#qTƉ3ZHd88DL"2FP\uXE )2F" F8ϸ0,A j@ FP#RMu755_|S]P]Mu75 եQYMMCMCM7E 5E 5 ME]BunT+,AMBu6ՅQYMM BM BrNSWwZ;nL4uW\>=0 f_2 hᆌƢɜL&ɸ-jtMg2LM&ɸz.ԝIfj2ʋ*/,ܐnDwe Fwg"F7'M&;dz:u&6PTo i}_YiL [FHSdFSMM4Eh j4U4TgM4E&)h$"c45M5M4E&HSqF4)h)2:hh j44hA2NSlI-o/__pQKMFyomn{ ]xoW-2#Oqefn])k)CT MU<9Tǽ ]_b,liyΗ ϡj-Oy~O>\nˎp}U}yNt{'CW=2TGnC6V74~=tZZ;ϡNfKH< ͅ|}$o|ɚ)i-|ݧ|]Kp؃m ? ;6zoqݧ]/ >OXl#.E3<#y_Qz/ߺ?$COK}wlM~T@ŧ8>9_Půq|_{N_g5 endstream endobj 41 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 44 0 obj << /Length 404 /Filter /FlateDecode >> stream xV;O0+<caTXǀTS]\s* >پ;3'G'DUV"Y/lЕ(ꥸ,%*]N o7'•DIaFx'4.XC,1=3P "+LS:7TPp~ҥ ϛLn@nhv1%H KsC@<A4'nm$spicM,#tM2h.&u%# d~ϕ#~E`p'ql QK߭ *qd-{/d0Xb1].ˊk썰?E7> stream xڍP-Xpww C@#ݸCpIpOp `3sUUWueYTQiJZ@ArP +'@ZEFGveF99H;\m2f.q*P@ pqp'$1s[TJPNvy.%g# ir 3ksE@ \CuA}.fc r`hVk1;0u~T{,,?\ q̜<ў9'ls 9_% }%Dv] `=if A;o,7;__n/ |>/ <>rsq=gA-\_s?빸?tGr] Mcd?A6׵3ti NXɌ5Y+NC8K {-aImw>& SmhDE{ _(P_jIyp oRstR+v,oj^fю6 (7JBJ„w={q9;D]+׏J-.nRZR} ѩWR)Jse%+s9q!~F\*܅O۝tN^S6xЕ[&U dYf&[vR-!Ľ+/OMABqo~4piUưkw6a'*l[=45QW2qXy01|/z uqlH+\?f6nUfhjXk[rݜsOo|W{+ ApG蠪|k>!0a%ٲM}=5o | noSA; ?0_%EC^O~gƤkv;k01]`Lb%xLʚb]snA?pߛ  sm*  5hG_ZۧMȚ036t=Snh7hG&@ㄔKc{bSf2뷵tgks%ERe&(k/CD>2פ&sӘ5eCy `ˆHfG4,{7oJJ?!={MrE׊σ}m5M$`>D+=˞N~d5sWvdX^A͏irLϞZZ MZubY8Ωvp9༲z7o׈#[me; M Uܜ)Ť1FZo^%i F$q&N@HQ4׷ߦhg^^Qİ"P&bf#XMس,OYd\Q z#?׵l]&wKPw0A>`jxQ;#lgT! m ښ폗|1LH[oa)ΖÛjl{r/Ѩnz5.=OtdYY5]ߜ:$:*݆B^zy3,aځ45fnSJԌP(_@"Dm&wg3m]k Vjy"-(.?$Ѻ1jXW|xwoKP৙r$ilL/fQpfy<ηzC>k]R).%{I)+'`ÅÔb Du7]%.ңf_#v a~N{Mw\șKOɾO"tO<1P~{g;iO"9%^Q-=Q^̥A@' ,6֨5;cV>޶f2w_)%YzghaTR-BO+$y?tB b ͍xy9䩫r|~d@3S>|a.Ui,GM>M:U켺Ia*,?bؕ ƆH[jSFsŧ+k*ijS/Q< {΅u1NJ_\28O}>drh 8o>߄isL%_AtCH=50lQ>cP%уdɄoL&2qԺ!~#^jp&;I\p?7TTl7L[ĩ06[ D&~I1=wR| ,P %1e#4_r+ P JFUR \S@N'N'"U }m{h$ĝHW/CB$kW^W;6G5 qtoi)=0m/z#b6vnQ`?J^s*RZft®ٞg5e|̌Fb "1686fYiceG7fE_nj6{vF+ ϼ gPM|ф K'8,Xf́sr'VjayG]c":o~, ١٪:r)=JI=43AxX^.w#殨ylK )a]T;Llr5KՕƬDZopVؿa>J0>$#:S- k%9gor`"ЌSJĪ.u-\2İ+(l˴Qf M.A:亸0+Bʎa8M{Yyִ/rh);=U0,Y7 +M}N$s߼ray{6yQs7?NJͿKhk { % 9gT;[Fv9zj/PVObEM\"/-Yc!tgxupË$3 m[-xv/^7vw>__BٖoFM"taQ[qHxaU䚥 1ϋ*<]2{'c+BOŐŃk*AUpBAS\9|S<вCPCS2eoC0=5+E\ʌBa{{:^?,v̎A%7r M=(Yv"ip=%ݣpe VͻXC*KohJH'oå`(-:׊ig"LLg~]F>u֬œb~%<;,P"Mo6:s!_+)ffazU6Ȳ6 d2os | gٝȨn+u&ԂK+Ǟ SlX)jh,[Jx*qV=ApWL~ B)F۽I5soƌ"8N^EXzW3b *ӐaJ#q(PV+U6;ޖn*==aw699u, 4' =*SWE\z1@ P)3ؔFwj쭗X/icJ7 %[ݒV?J苆notU# Z 눠; =ɝK,|)f%B- pͧvށ֛d|G KYR ė fk#Տ[.@/Cw̽Ν;XDr#I.?g[\*CP@% |VF]'upU][e@.YF5N2y74{N߇`z7 k6iL-LbSܪ?j 65,Wu˻l&E$+Q@Lcpoz`+űނ^Ewvᵤ,7\qr9"1݄&hlDzw4IN[+U"F@[Ɲ$݀^4cz5ɈA7vLAoH8hr?/%NYK`Ad`8q>rD|l -=UAS856="_uAו&pm[Q~&ԏE /˰Sr%0_9=m̟e`ӟhC#f}"W;]@%r2zVlNN%/ 87䳇S=(3F@mYV$4"xn~|{TkCG@iv8:$&ǧzS0l-ESHK!y^WRzYl;v#IO>X4U(-]T3)W"hR'R a؀D!:HkzU٢#j%\|6X?=(#GJPUvkrSG;ۑŐEi7T |]a>18¨ٽgM%=y/vNmF'1bDݣzNÛ+UG;"JMV0R D[aIVĞɭQaVxpMmQg,P +A: bՀp1;i:(x˳=>CscVJY8:vQٺ1Eݨ-QAX}kOegI0|Ӎ5zCYTުГ@ <-ق %vdR[MK&n]Np@6YƜ);'G!L2ab!OXh]; V8CNɸ{; |:Cv 2(#$iF$"|)9NoIj ,+:[gb%T*ڍ^kʸ,a.O"#gyYlI= q$ Z6z Mͦ\"A;1zGT_&mz ~R%ntuŨqbr8}e/ e}gl ,x'[ و;P1G}ow6Wz吽j4nS&"̩z-^e؉usQNbxZH%OA -Ni>(cbР3]T zhWΉz0G$Bt=ln/T[)&ne/2C"l5)@!&loW}+W%xPe8D*3'r3$ DvmÂAﻊV>#Ź{l4B`B'Ϗ;^ ^+0a|kEw KS_{Ұ|i{ >~%hEpY;kEO`8L_jڒxIHA ޮft˫UR [qZ6r'v*2T3Xtz ךGȄ3#iG]Z6^vAvJXIw3r|eF0Ė@[mS5د.}xrz$x(aP*͘9RniSmDw`}䰤+@&3;2'=&TX>$Lyњ#!tHDQR-xs궈_"^k9J +{gCߡQ/)aw 忎>'p,Z*uهăbO>^Hh0e5~p^~+ˋ̓ɴGHcO[nzO:C}yGVERLk9K\(Sw N+w^om(M$.; j!r]ɹkQJnpW YS ܥ!G@5t]-aJ+ub|OUDAۉUQ@}h_5zK)[O hρLŵ*b_+0D!F*J]EAU[9zaL[Ó 7%G=O(-,'12o?AW*ȍ;=T/JMߣ%?0鶚.`T\Ojj(h4T(*ŤfTZaE~1猎US '1N\l.cE 45`M:(,Z~s \ނ!Ϯړl V{ j-=Fȩ'KȊNI Ǻ\Lcv& !zp:逥wJA&"kO*8lQT `pƥs4E<)] ʨ^NcHYWeoh"Va;hu59D%(^~Gvÿ~W2m8 9r`|Pӱg22%~:Q},wGpERmK: :Jcn7EnLVELpUr8% 2'Ns^}[=\%c"_v#[bKq#RԻ_"9*)5o bk>񑹂-:, 맭2?".(@ ż{[> G-`VˢB㋕O<|N}]1tBzޯ}rozXgaG! C~GF֒Rau~:56y&no /6ڳڛxrO.h;5(`3OlZ BU(&Jk,<Nw!iyOW tG!gt68t&sB69ןT R>?{ϖZFp޺!7DDF6Q8Zy8s%lk$MZb$x{*-&*W;&CBEYE{w3BRI Vsr]nv\a`+܅2Y/[^*+M êSe∢+4eט[XW#th;.1lx^,<⬒F9įl~DZH m;a9SM{jvÕ!9:β%0-QE{bjK90"iW*ҡMկR=~нJ_sxE)49YQ)<>!%WelsxhEW嬧xf@"X;qާX& ʺ/OV7׻{ޔOmJgh7n!`.AxI@f侗bRou=B.*P쇉K6iWa7`daC/rIm*pHOEM*Hsy}AX.;ONԖR2=,JPp"y| MUK_e7rBcVDvG~i3=؏ĝְFFvjJPT{-k.aAkU9ωdcS_(&Gg1q( #I)yUssT(*&Á][SʻŦo_ Z8V5XfvbLwݯFFg|neCt &?oE"'͔?proElq?!r}Aճə\7!i~"҂+QNN"eiSAC\Ƙ_1"Ջ8&ΐEgN([x?N gj;߇y0U߭~] 'd͂fAPRfW}CX > lst'Q _n@0-yH9=O/etl[ώ}=1fc3QZ9.i2~!4IV)3L!ϯHT$݊ld0%cP%+'_7x%YQ**B0kF?:yܷ,;N#v,H#ӃI{Tzʵ!&Wt9rһ 4NݕJ@gIjw](+G\-vS&ݞ\z+ǴqFuKLɡnLdR'/5Xus$</# ڣOtբJEFsV]ս@XTsZR[z4<:JZ0$ endstream endobj 60 0 obj << /Length1 1413 /Length2 6118 /Length3 0 /Length 7081 /Filter /FlateDecode >> stream xڍtT]6 RH!Jw0 0 C CH#%"t)J"- H*)!J>>>}kֺ>>{s]7' !B"5] @DDLHDD'4 |p0&Bu0=_P JɊDEDd&u +A|8^(y߯0/(##%; A@ @txy`(G yW$KVX_#G( HW8~ yB&D 0qÝ p!0_`"E9Pr~'`\P@_SG`N M>9~h@7z!}|fU5`NjpOO C?u(9wuaWP1|MaPo_M1 !"#*%) x `W_ A h/f H0rGAH/$?WD@ F!.Pѿ߄!o Xכœ0Կ鿯XXB@UU8@PTFRHIY$kÜ9{#?FϿn#"!yz*#M_8_yB=P7E@~cS!yWoT _ ф@ H_+nkPuED 1 s#?R;2$@PD7|7t2@XGޤn 8DTZ ~1EDBE n[#7z$&"j#[NUW>sg gdiU#g4x^7c>1l>l4L45LxSIDy5;, g4A!ՉV@]ϫ'V W$_L4M {1Y3Nώd& 5vx25D[b%hѤrQ; V؇GЪk&ѥ%sEclI^ZJG&aHwln Z}ǠPմ-UH G38\XMr5]L\6&hrR< Z!$b=%QϤzrhe| lU A(P~ŒM/nū=I`S> _?gݤ /O\&M/v+UJzX r8m9 IyZi WBGnJOR5u OBOf )̯[X a{SmBw$ znb}9cɎg{Wf?|QRb3@$WZE'4#۩g픅a5=sE*i#.-NCX# z^JQ7/m3`fcgTLnc4wk̢tSKCBV+xN֠%ق-a ZżNpvFVYTl4&FF(%g p"?x{̱H~E &&E|:yLJ:L*1&Wrm*x؎l=˾~]Q$Ŷ#OG}·V4'ʥJϨ6(6Nj%dW[݋b5aΝ&d-.:E*m([Q~zدǡSɍi#3+ʠ+ܷЊ-e=\@U *-_g~#<-+汛Iѵ5m}i\jݶ88Ο!FMV[S)-)g:u^;U츘L9ԧ.6/'"o?껷6xtnK+۷Y>-;ڳF'\})PX2'RC?KΪ$Yf4(9~ړ%> /4]Ǭ,]%c]hO{6uo%y|65DYm*ԿWBkdՋa[&V2Tr G<""J՘*gf;CxI !!{GIsYsXT_l26 5v/ZggJz5p.KT9͹eM . #z.h۪Oe.|xhH]+/LWOC]s 1a~韕a39X-+? oTWF=lu+"+| H^;r ~G͞?Ͷ겔AN/6Do0 WݗpTR$'СQ9ߦ&ҫ:ȭ*joԭ4eCצ2}.tqp|T:l (SwC2Ŭ~S㮬.܈Tkm#JPob]؄w1'-/l˒٠}EmUd5VOH3c*əoB} ;AKӊ#߶yMBڿ=c^*N $MH.3r'pHPƄjL u#%9dc2+=RSyf[p~~_<yGCKfHv@W ;ofz鹣,'h)>ePR&*ڶ%6"ʁ5m\`csrÒh4.@Qy+CxұO=ƅw՜FA6$|z{!dehQ.\g<2+#(I_Y8v1kқİږ" rs&ѽF/mb2jgpx@wPuO \# YqP LPW'j<<˺Hg>^!}0IbS[l݂ KRơ;4Pou0ȦiQ[.\FUmna ^n$`/4Op& Ҥ>]_姃cB2݆bA2Jc}熙< -D"m ۦ:BWIf^O7<..$2.iԏ%T$,%P ֘ {8Q:1HK3%(јșwdl§\ x;FN[AyP T;V${NaMoEطWI|r|)uuQ ҿxF`yиn/p4Eh9yJMVuiƀʮ)&w S~P oRL@L=/ JREժAc[T|}+Mzm^o~sZB?9 eX2G·~ *8#~UT׸5ufwl-(&W6sÙϑWG. N2,a jmLIX qbeopnAIFn'QQ6Ǚ(?Yf mYoIuz44jL֖i?\O7-Ux{jiӎJR%hŠQIdG]4'PP]g_ڀf}?37)BS&gSdERptR{P52V&+ڴ0l[@Si99nmwn$fGDD<҃Zg5B=c2ZRjGe*BƱG:E³SzVBTcp8evVꥈK:$n1Y.w 1#וpN&FG r TևƯCWOr"S;XE,h9m_̙7"ux5laq-hIj|Wϛa2=a<"){w,=}{_b, jPT~5s[di܆Luc8 tx8th9nY.v+VD*༉bh6Sޜф!'ϧ԰v(Yh gkD71\6kwaIS[ToM8rrs&—[eB?p_;`BEi7͊<} BBsMzmtRa{>&ꝛ]5ѷ*_S2MJ}"M,PNZ|E"8Y؞4KpaX=^Ƥl_3tIrJ4`G-Pj)\28YC󀆪xEV!H.۲ɇr8${t+L#TtW/]ڎNadlˆ ӄXwy{\_:u7^Ml-UӋਔm7BOSh/F=IdV42`nKSASYEyeefF~qXˀ8|U.fމػnq9FϚRԗqEi^{|6_hB3s1]wsP!-;/*>uMz%5^c}~.Sj/TWԈ j>Ny-rh㈐v^*Yr"Qh:T=nihONCCiCkY;{91ͨ~dM8-H$U _k]{-=z'B(m+nKL6ĭ];c"w涄a4.}JCxCy$d6N}~ \I4>>/ : ư_ (u) $J;^bpsZ05c$dlCQZ ~&qo[=Ȩy伏1-ɢ9G+ZIOXEZc[ttw3||aZ [ryLo$ ƲOE"t䌻wlNHb =kD5diŇŧJwE 1F_*_-jRy+* PkϥUM/R "XRL~2sdHϵK8>yq0i}ҌWp5);ݱ'~)Kjv b_I- |c$vjv1EjH]*:n [*%6cġe.Tw$ggKn\ZSH[7 ,ZWkwfx@8XO W*u 9KagP5> w7Ƙi7Fo,sYȱ~A n>#=1.]ydMI)u7XF=ԬU]1Q[\Se`HdhLcO/J5,5j4R CRU;=v5-Js@WQG|6=U7oI{E@w{"e!vh/+Kc\bav=xWob~`t{  Al199) Ebg5}uI\.be$c;&1{YdO&=-Jڣ 5/ZP6zLQΜkS8{bn} )mE328QY}b,"ΠЁTn <^1j8wڴrTeV> stream xڍT64"͠ "9  5ݩ "!))!(t|{{oZ;}ʬk-g (\Q|<@q P3_zVc Bu Q Pww Dā@?(/GBx0WUF@P}9|bb"\r. rhP`3BP]zzz\<04rC2@+`CyZ C\wW[` ЁC\rˁ x߉A`0r& v9#ax A;)PƇ#p uw1+*\\ ($}޼7/jk;QS"GgA"Bv7[ vhEy@(;? -l`bu%';Z KF@3+eKNmy#zoSn&-{&ę;)ggHZ0^3"0tbHel XI|Nd,SQo)դ3j4:~\%!t-<*C;dAg5Y/CwLG jㅗĿ J=v}mT(dwm,si:Z0v8X\0(3EѶLX)gH,ʯ Ns=+52عn*YyE`=I'[WzB˱o9o=|ڄL4ӡPՂXX[S2"hf1o㷁%>7/::ܪc\c}V_\~hg*xU{ZhJ+}]̒L;aq8uKOv #ĔuS-C'H]E8r/4I9%U:j8}c\+u]Gb=(Ro0t;9!]n帵 cn2`<otGRLfVL60?鍋/C6/4{C-㳪P2bN>\ ?R@nO1GS s{Ll8KjƊYxhUh*"[]ω㗞fiʑ0_F '$8rY$gn ZP/\]<#CgX?*^徉U4c0T:v}rEN$]t]y ;.Se6>[mbn |YdXBEHk҃X#saFOc}=An6|qjcl2Βص6Ip?|jubA%Z 9Hpi81ҵ0*S򜯍ốv;܈ +}4'wٞwu =[zry߸,-L1`Xy=*Nɘi= =ďjb簾BVڜ{2HС*lҿ|s"&B@ir\dcejh)k׽_8Šrp|7_*Ah軖~Bm{v@P[ F<=}]|_qJ  aRŜ-/Nz6(m<'umS)\[G9kH׵u쯾I 1)mFe%{0 lf1/_$^C`Dlo: K6igsxě\V-trdE˚^ >78RI+M;1?Lh:1dQsЊt4TtBa/F,Yt>Uli*d#xx0%&+2̫@3{]&"{zȈkaLwa: 8/-J`}|57St㫷U.1KVr7gMuqC]Ͱ*?~D>]Hur-۶C[zV5DrY|4~ +5~¤]rg⼄0'b3|$2$9r A?-A_O73*2ms I`s`1@quv ]U!cg=o&_j.P/(} g-7pORP)Ide8 K8e h3 ˉZ!K8RI#٥9~XLitJ?_sKm(*lv> ċ\Vډ9Rr;a~JV?xg>>+}#y a.7>]UkIa>nmL )Љ\K9K͒,tr9 9agTHl M2W1d֛J⼠5Ư%TI$/־mT4 nJW@hd 0˟m_-{"M#H쬛>3 O`kV#`D?ơ(7a~Ou o,MzFqb(fՎ&ZIsvXKKp.h/~%S^`WʾpSW}φ &8Y;`rW:NcUwj\qdxٴ|%`2m0 6 X\o _UC)HN?uvdX҆ildJ'|g? -2)Y2Ii,(]lj?9*B㳘z:0vp iĴ.D+SD`p= "SgRYW'G#IQTa_nil06 }Fv56? $9?A&'L)R;َ*U!)Rv"VϜC#6EU/ALpc@w+zɽq7lAoņe Iۂz4/OQ":_1U5\;W:Ao) ڂM2J~N=YuzXp,kPxNq{jMKϕ:a$(4~`Qs]Grץmd)8ن,[jZ1٢TZ ~5͝ iq0qPDcNCЗ[6iw ?a"V %1@"XNGe_eƀO@hwylS1J3Rt1o|jCcr ?]Hʫ'f+>'Փ:br#/ W-IbMZ~!(?&*.mCmFYbλ.&%Ān<9ԬWH*{ G=P`PNm[wS!]0-aɓ*Nqs=cj>NPkyOBO񵡶N&p 7oIU/Bc\ؿT)kL[}YP̟.3k&1wncR$l|ʆJ?^,ҳix*\{/y_2)HIx)+xs5dEka<+qG5Õ7JnL?&)vq!6YO f-%mtIʓg]ѝ;R-xl#"oD#eNw:eTAUw!KvǸ[ N*)?T,x2Htn>iEJybT M`dJP =.뙯 ,"U Lb _Z|#lX6g`p#D b]LU*iSBꚗ&kP&:?ytX?BSX1l/Big2 12 5irQk[9-Ұ!D1s&nb۞X]ܨi+q7HJ"ۯd8֧mX'`A[Dk:oz >^s*cаR/P!lYIa8Χj9' Y{7pKp]O =wh:hSr-: Y7д`uZeiRXr59 ̨VJOͧx2+ FP?mEqkw]r3M7&4χMvW/7s]vD݌y|On-_(,')fy4Ǭ(^CʁyDr=8J3R-9x Bċ}MNX+Iσ!Đ<ԋp7i|O},+ ឃJغQ!NG,]$k>b;bp D1Z!͗ՅGPG#6:ZxT3P7NyMM$"O'{9 Y,MWk ~9l[)2QWg8Fxtc.\ W5;6yU(Ҷ!&jE*h:{[mzWh|t>ez^-}͔d>A̲Q{w/QfeS>ٙO򼗥3 v?^=,eUFajNRP Vzo>{K)uo#78BK*ЭN]fd~bVqcL#GmxY S lH%(]~.6.$NdolWfw 7j~UK|yk_ i(~"1P۩eg,KXT^HK#>a{","mGכKsG^]~nab.ddsga5<}F.2&s6>`0eVa8J %}E.2ni(^怚&*yڮ=[bWvg初u*NgTy=6-\^[|k%kBV6mg-CLN[Zj֣`n'Ҳsc16rD4^?O/.~sB qQmEv]&ָ;4PdtS\[9{fg[u^bl`_esY *J1\GkL؉-aQƬmzsP5r`/g" ڭsvͩƄ%_$Ž8'm=޻6qd+98$ endstream endobj 64 0 obj << /Length1 1394 /Length2 6000 /Length3 0 /Length 6951 /Filter /FlateDecode >> stream xڍuT6 RJ4RFH %c 6 ]"  )A nDBx~9{v l65-EEH`hG~G$ /}$T@h,P?<$t m qv0 W n9(,#$.rB "<w 0 H7-j$\#( ;`CC(l+` 5oo? +#ApO`stմh~nrD! 7dPSFœ(AB?`Yn{Q$?S!!`{ ܧp;o1 PHCqa)IQ) C~60t ;z;#v5 0;rHW"00`IuC~G<X??y2w늅tM5T2-  "I`'Wnf{Pw1?Lc|*ODjܿGsR6+CM :wT A nPLPXRy@l`h07m~ !PlŰ*?žFPXnPXɡ]OտP?'".! Oc-q7+S[/v46`@hq3짏_uH$/B`m8L!+|7("Bw?g1Y6fЦ=kn{7V5{VcWp?{0$)!p#)ډl }VwNĻߡ)V|Ҭ^YuIւhYnSL d4vMS8 wo#.q)Ue{T+]dmQyۨS߿mf@G{?/a₃!#OIGޒZE'wI%gfm+7f07L{2y}oF`w%H`3Au;*^wu`GVWAJk1lx2^NƵ%斚] ЎgKӞd{eE2M(„څ!:(qV !}I74Me/K&KÃvKnT{ vGo~Oj2:V X n*>֌4&JՈq>j:|GR34b8)Ƕk&ʨاҕj74^a)w;z6{QVڈ/SYtKNy`eg~H[3I֢'ƛD~Qx-[MU/4TɲFsIr>UOݓתa<%g ~tRéLZԼ>LwĊ0A;qS/a`c\~R>le0أt'08&< JYPFU.@B7R$tT;>@\%a3hgiBt J2VhU.NL[ڞ cbPsaԷT|5^O}L3h#)!>Z] cG)E6U+y"Gi{_;`;ֻA܊N)E#bCk\^h|{:]9{LiS!`lIepU{ )Tz(b8);Lm :&ꠤR5ȎPJKJ B#Wqkwun'td:9d\ЄNNƤj}_&&t 'vW_2LXƼNP7u@,-Cb#zD'zhQi˥)`?VyGЮJ5kFTqJE#wiKϢ '<7&(2AC;7GiĽtWb~I-'}aE#MJƕc/=52{媻PyUmMlOy^ O:NDؐ I[-EXFav? R[kÿ%{jiXB@<{s8% \,F/ kA7"^]^$b4٩&^c0*P)3%W4xjsP^{Ba<[KSDTI|%5G7ܩ~asƩIXH\~xWP[k՘u23sqݼv9r%(J^WSgCL\Pӷi8!x٣8oJi"s`hÙ,PàᣦpCs6h Mh47B>@{:_S~ݻWmsnZZ#U $܂Q M(|{Y8^}(›핍~_jD-u-0{pRvK,SC*gUOk;!< dsc)[/-ɻoѳ}c1cAYLWhw7<7` Iw}NYݠvx!Z2qק[fS8k^Ѭ2wg1'哥Ό>dߣ9(wRكU+xI3_sJʁr1b`=ED5oB㤖'U፲Tk2q%Ώqȵݳ))%3[=Cl틨ɕ"ţ ,)C,5=ۺ x x3W4n`ښq}N176(@@bU9CnGH*NMS;S2½bkHm%KkVK^WRGM<`Q 7|7(#i6{sҠY}u KQr{$5tp\q^ʼnNm>Ԛ&ׇ1nN VXAɑ.#{{}Hwg`Ш`)$S_Bk#GBƗWoO&N>.ͨx NPȻ"gs'V{:ˀR3EXHuN1=N幆BmEC^8 %CDhphqS^VdX].զr1cPR׬`Lܲ4gp0}Mc_wJ^ %;a+ĝo<@\z{UfYR+'qހ~Z|/%fܣ..%z-RqC 6񑀳 | 6 n孪J Hi}Yꥨ9{CBԟ~TrG(L NGU8"!Y:n[& -DKOĖԆZ& ffKaz157n݂z]?x]OF7Gry6grļ7fK:e|DF} պt.ArO2[2X=_3A@]rJ`FJ)aE(2{ uKzVUAS|ws쾊rt0?oD{lyfs[#-;+&mmӼ+,>g &/QNV^)-oaE㒬VYTW&[kJױ <258\*[{ |& wJ2;SUQ|AorE/WA?c0XiW'cEV>KlI{|,s1; 1yJaY@"yžнVx C~@ETdd[aTzRMGkw4 "0 N׸hV)=U.}\g~S|.rm^oV1vO+C\N, /_!1$|: "V-D.sOr-r /FzW9#Q*d^ ӫ윭86=y=: cLqJHQ<;-U;{E{p!g{<^~,?4Iv3~q*\TzϛB-'O>yX#3BnDE[Kþ9zoi8OTkC^RRO[ԁut5/6=3;ze*lLAѩ]~Ķ|ytcsM.9R2%A7F2)Zjq1O?>ٳx3w:\<^dcş1V@B-m"6u>w~((m;#+}^n){PAi^Yӵu)/.f "W!o D>g=Q ;8گI#cr4쮬 F̵d{>K٥`GKرpP͈GpTDˮO{qfcTtƆIi4+*0sau#ͪfף`9b$", NsW!ڵU0BMs-VYzcL`A6v }tVb롔~3LT ÈuI{fJW^0=u# endstream endobj 66 0 obj << /Length1 1518 /Length2 8355 /Length3 0 /Length 9375 /Filter /FlateDecode >> stream xڍT[6L "!%Cww7=  1")%҈4ćzsZ߷fgu׾{PiHX8e0VvA<F eF;@ m@cjp r 8,A,ʬ(Fbe {?K=! ; avP2f h: `J [`ll@{Vg+Qf;f _*@{fh4-k% < 01jv?PKn?%b*;;,) U&mHC< x+q?C W| գY8Yٹ!.#?v_f\ ޖ,v=pyq`?ӿ,~'/ D{GxP oeX#g3گk~۫_?&lZ ߈=>-<6A^A>?Qxl_@Ώk @BA65AmWU$,GWz,y&~ix̌%>YNI/g[u,_.g/I)簚>&K,tS#|Tª_5]MB;-n,BpJGWUQ>|Hk眐.{>6p3(7 ()v6Q[s]/J[3!8KuItc:-@$i"0A*}Jp*ħ:|26;5(*8N [~1la/py|[\p)}0iI=7W ;2ҜuZXgʇ,m{ѷ3>P#jQdpyjQ_=!X8IsedS'pDdTn#hXgŬmNhhk0OTxX?>Eщځ)6͑rS.Q8څPcmuRߝW0gY]߅)ZLV[:nԚz5z堓N2 i \#1GYͮJBt˜z"s`!Rl4D)<'|TG/#pLxCi'z6bU ?Z Uc`,Y{RhxYm. H%wD/Wϼ%aȉJ 9 Ms9- D/;s*9y)\^1m6";3IcA|&^;&n igHbXl1M0bz=r< :Ŋ]TIVb~[1`8!bHO9'ؖ}R@gDbk-Kh/_aLc#P3˜7g&ATPZNRԌ|wWč:yM>ʷdTmBHOjj$^7]s&LOmEQ UUVpI evEyusF9Y.ӅȂѰܛ”hl*-a̩Bǒj"#f%ؿ`si ^lADEj>WsSg!pP>`_-ѳ5seGd'6b`0)ks|e (~0<hKpU ̓}OiR1o:V3j8rWUF@(rgOY"ؤ,;#%p?bN9Ov^XOfkb&"M9_I[ms^F߭s7jD&RNcxQ{tVq%0QI,`kfA*\<ܢ޿]֭%WΧNf@"ۗx#x:wQKl15[lD'2?Xɩ4؃ t.7O %k>簌Ua-~R  Eo@[ Ti7DV\A6/UR^ w %ke.m%f|+RDw-=1$abQ{FށҲ K˼Snog\C  "b5c}6fܓI&âhL] /e-'i:j#JvEZ(GnU>;; 8-c;IFU4^o^W[.m:\&biݾ59?C:x 1%qb)Vt&nU]MQB7$TM%dӒMG,̵XR.+`$]+aެ:~̴Tl["&Fomx 츟ax k4-K Z- AӾnvTt'"k"1V;$s a\`}%ѱ06O"KcoWN&f75=p;oj3}θNgw8JyhH_V`*#UN?bQ?VS5cJ/V-Ol2oC1@YE?֫)qn/%Mi.j["fzy?҇RJRҷ!j+R=[c'7awYFjZF>t-<ߞ2cG+x]Ȥ.9y_NP(p=>l'?/7݈ϺhR] 8yJ z7qNrǗG^Z;zfOїCvxA5l)7a] Ժkպ$4%[aj;DkK~Zr{T`+@;uQ[ù7|;g̻(Cgvyf[=$Hv ٺُiMs} j+(գh?;1ś5JLm! GB \cTRi,͘f0[^f{+K3h0_mѰW`k}5QW^Erz2̠tĨ1S͎F(Qo甼PIБVKTbk-MbH5o*5bsMN״zgD.g䖬Z_Y ZFxMײ4F/|hާԃD.#}iGaᘏ-+>iSCy[CCOЛgdR=iw*T2[ ~B  /u^ϙv a2f@~?6b@U\'aPMh h(6~)Yӭ➆D1E[`'׷厘[ }6OUz]Ӛ~dWP(( 'ڬ!p3-ULZ'X,B}S3a>;'5k7[ԞdKL N?>o'Q>g)'Ͻuo]q&c@"%Üwr0Lld:asfܮ3k-’@k:hRE.h=.V ٩eC 3O9OY8R@~m 򈤶4xwdn :_(nv명_bnUitRmTi[;mhv&׭ [BTEc8)E*3W˅6}ldx0dI %mұ_Ku(.P3rܵ,`sO]e$Jyſ8blћzGϢ4,+7xD}Ief㨏"=E^Hel`Yݰ9iϹ:x87liMO'墟Ab%SNe?Y ȐG3j0Rπn1{CY>Q"(糓=vXMSѮ͖+gc0AjZ#-m=aJ.zX؃MNb^5b )E~y}=?;Aԕf|*ߎR݁,{.\Sl;w1gꂹYd_7JPGa?_wksCiWPϏy)^(xMu\Mg\ è,MI!`^U9-SѨ+;no+c/<%$<x0{bõAʕ9Bs*|D9Xl\AeడXetEORH -^<}T>=H!7SKבmv5SbK ͇ yBQuʉمpJs^z Z:1 # O)n.3odѨNE0U({{S3R5[d#Ю]姌c׼[$Ḽ_Em,5 kuW=/\¬ÙFu$G().M h;b`%zkPpA>vi IApcN J!>([dNAbFrJ5% s@^}|xT/ RرܜE.4t? 옙*UZg*݊^W}{MFPqae/0PFlhһ{̏BBx8 KԂXmv.9g/bH@eU$}dlpE^ٓ]I:qOf 8*F65}Χ%iC~V ZWW/9`xbnwQi/i{x4RgV%j͐9Z)MXTeSBO&’>)15T=(wÝG9Jw?8nw{\.mLF }"v&O;EJii34HJ+3E,ͱpf[ೳ Ov~IíNM'|h [tL8Qa4YǤ%Fo跞~z;觃0q`>]qh,3YLiNyn~5l$R2hA`XF'5?i?mL,ڧE c_NRe|AOSi5]T5t!j5w)2o_ʞ"EQ\MlJ}ZSU=hH}nL*v04>>},|x[Ɏ=u}1cfZࡲ& 6m)ζ_a:oUe`\u;}+ذ3×Uj;L"[ui(ֈ9?rS#}&&|ȞV͍\ъrB͑;Q@ԣqtΩΙoKnN3Ht])ùUN d2{l/F[=fߦA%tm&"2E$zԔ=)y3K 0fZ_;wkjꀊ"f Bw}"7w/nh;`Y&8MBki3(T=m4Xc'l J(ػf~q鎖sS5 &*}%Z,ښ-d '@2T"b<·'`!=)h|dpK4#T7[u73F$2}] h\BP%˳ٷܙ$ʔ9(2T Zc^,0C!D"A\]΄DskHWI-ہNFs. eqG?h+#+]Sɤ -Pcމ>RT2_Šs- u VᦋGF jkC0~TPg%It]_<bZAL>35me g#auOhS*m;"{~Ԋ 6aǁK4 YIWa++djhT}L+Bͳ. Tawת?"U >hRGo!o{$6شf0~; 7MԌ5 GlWq?b# *; lA&5Z7q#=Њ@ bgkA;ߗ~ ŇqifZHܟOV1[Tӿmѹ[ wfn/ж_p&_2tp|Kłը3y 3w08;lrξxhA]8OHY[K "kZh14vUqE{[@fҍ'G|3 )t8H4Sd g.i]qDsd)T.Q4Rv*XQ ÌհB1 0LH`l-ME5 =fcF@@/d B_^{NS1]͋~tj5fH”XWt_$ۆۄMzh" )&Flu \s.ZsVl u6jEQxPs$sd@Q ̊nQ&~]bBEb-V]B+MqʮC>mM!h̦Z鍻G{b:T,zDujHfRWiى.|.DqYb=,P0 H1Mx\BY5q'٤j [Xk:1I*n y|,2]jbhw\FîZxw<ѕk7OW? ,*b2m`-qQq5Ex:gԒ-pm|p5R'~ypmpҢT]M=":#9A/N*#ywDe^\ѧR !ᇤeŊ}ofSrqvސƷN0UK>u*xWI^]8c^?^wZ6\+~P ~#qB\.#J 0BM" H2c RﲁGBqωi/XeHǟxKY(SfhY1pSV#skF Q!- endstream endobj 68 0 obj << /Length1 1401 /Length2 6312 /Length3 0 /Length 7276 /Filter /FlateDecode >> stream xڍt4D$6^g0z{6 c3z% HIDA['{׺wZ|{gww?ʤ+k)^0H * @ "VV8&b5(ȻàO4QH" @.Pz|5&bG1c Dx~d]`p[( 8\'B}-G IG UˋC;HqG s~ ЂLG 0pQ/; u 0$ၴU5ڮ0|;jkrq"}H=h+ia1<(@PO(~w(ub|h8׈`oYi'rq!1h_)akYg$ װ# aoyTB.`$*"(*`޶~ \Q{0= G䇆zw"vp[ G: cc<a~f ~Lu L+ `0 rU(]=eϿ N?i8rsd};F_U_,<a# u#|`Pcj.U@JE:`  Jpoc3#a:(4W +0[g%U0ه"eKxaC]=ւXSχDa){;ѯ5A?) wm[wwlف_o`0[ DƓjYZ/ޕO'& -ob:Ggͨ)M,N'kk}xmN\]K;c }g* ^ށCCB(mСJǩ$/;J"jZM-եYČ~,at@s\Cƚ?N`Vl:%J"[%oo V Ya+Jt)T߾)AgL)O_3I[>?6)cwjߊQAiPѴ1Hh?;9%w#T □,#NJҽ>YJ[3^>\e^;-28M;p/)\p,@\X#mǚF<)/*gNkG~<"OXc ݯe '҈)NOrDΔUiE't#8|pG}J͒ W Ӡ~;l!If # /rcÔ;/X,5|1:}+ Dt3n#yio_ɓ?90B0ͬ?=:/҂˨7f녉*8}??uJڦI;pNDG+%8IYtN#ϊxRjTe߆] Venj=lRkg_~=P)|ޓXl Q'g Lߢ+҄4=9gz :kR `ߓ@L]o|k锞u>{CnȊ;s4"c5(M3Ll z;Qnՠ} 1lQImhQݺ6I:s>HN0ꥦɕN[Nͭ7v7zc|9MfuQ8N2조̒IÛ൷nOJwԃ5sqs woWpsAs"p5۾7i_IQUYxufuN׬jGUx^ vɏVJ&.i*-t|.[}ⳟw:Ͼ, 뾡fgMJ9g ܙl>j9"U+jV~1={jgxClg 7|g9V+[:-۬BB蹫ĥTu ]-(~0xYٚ[/kh $8F+=TS7曑e2 }rEFDvurLB`atpX1oA=y<=hʟ<աokT87GC'67h};5=Ct8:ʋ&S=˯js[[>@PWR 3cT5@i#ӷن͟UtҐGeJӖR{CeխI1r:SGI9ɴ %eyY~3Jm~INUrH`#XіB=W2|r9׋bCCz ´K;~҆X&iu. ϧfdJ[rh''ZdQ9yȇv'8tDWhm.غСgSGOL}dOܓM8J[h0eIļd[qFvL2,>ΧuMWc*#"V1ߧ噅<dK)tbblFuV#6Q8qܺIs4=zw9֩pUV1Q^Xo W3 #YܰIN I6rq 6!3wBK2d6m㙴Ri .x`K%FksD sb#Bkʞ)"n~g||]]:~wsfm?,?j5zQ X8g5S~Q&9xy wu~_ G &nS&ޅBT۬~T Sw0\Od7ل\~vz CAt~ sؿ`]3uypF~RWbѶ43\ ׿lXW0vd<]wv!Sq>f"o"hgW S8VJj%:u#I#gt%syX^rY*.'zL{ByKwʍO5L8EyvԭtɂmOlEBw&xwIp/\@dM@+o,f^ R)k̿r1Kڱ#ۖJkZמ `"]rdkR7TX1ApU?N!c8hQ`U=Ot)w2_#lꆜ`e䤞Vah"ASwvcU'ߓԳ#ݝ].9Jb y}/v* I^̬\F CbWR`/>ZULr~Ơ~>7دtm9e`(Q=f}V$@KHO gEJƙ.VZQݻs<Ѱ? $jWH0eAk[V:5f_3ţw@&]~Q|'~ge,l_{'Nmj5)^HưGLFn߆.0?Dm\/0,,SZ Fn+ōS: VQ`S5sDՀ |vX fhp#o2hJ{bKv?u'g`+<?^I8(5!Lvؠ73*VF{swMĆlmb~ jŗWm#2ŬhUskkYxST~X >Q4~}g9H䯡h'X⎹{G,mz`'8P< $ī5Jh;8C1qH^Г2΅5tTJ/W"!_eKO]_ld=*OeGh {Gd])=Ī .R~9.!}w'ϒ˩;Ka4NV[c_P&C `GЩx6z*~lLyr}$~t?k,j3OIm4QOf bBmKh&,@NGF0\Q5aqL*|o$z`hO쐜"ޏt|Fߗ-(daN}G5BŭD- lrG%^%hw 5% mȡ"$ OX)ׄZyZ٥,w- |q~yGH| KwVޞ PH4BPR2M.V#uI[tUej!і{]#P1M1j2*qX;沝qPw< "gGh೷k߮V 9!Wt1.:טM72GYrǦFGHUZ A76طNL,0,2 ;}!M,,}H[G(? xs$֧T^ڗ! 5q&S}XҌ(D&ōpwt~<)ހ@D+Er-YpE2[Li;v—vi3S? 3{\CUlYBw8d?Wu٨fFiy\$G)?Ed_F*L}t䓜08kXs .d5`2 㻡vZ_?rĖ t*zf-- }oqjU")tR2QHfh"M2e?,p%Or^ VC14İGtfZy(j2>CjR!CeVcbS8=|߶tkY˭K=i*>@kxq[*l&WNy_ՇuH%}Wmuc~&LwRS}r +R|nNNE!W~bE?GAgä&%> ?ʬ.] m&,RLW=&i̓d%~}ϙMљ +"U{=EXϼ_;dϔ&V"ε[Z-+FGZ!H߼*`n*w9:Jl?|_QW7)g[s0홂zlCYHqZ;|,g]Y}jAi}I`$N;>-@pg)[O(1NlpLfpǗ uɁζ>KY0g1C•pw[nkۖr y݄ĉA ?u>fKy|2u"$o.L RŸmp2䪛:\nc5p<gm-ҙK_R8-zq n"՝ F/Aە/ɪ#1DkQ IWRc=.Eg _S!<2|G&sQu@B4 ;k&r: ;^,Ufh[zSIa ;eo/gA ?Roq@![KKfhhHjT^b22>s7*ńʜcʏjj]Xe x-if?̪".$RT3`.DiZ%Iȫ+[{wHq%a_J=cʑ>3?{6cTƾaje{)ڼna.n٨[PPރ nq]ɠ c? FkCSO {6"Ŗ>[Fb!ϵbW"Vo}x{%LFҦ__&L-d0[j)ϞIKdJlK}^vkMO uA XxBMeULk~c9-:t৭BDh9&$-V ș<.tr UQSo6|0yd#Iԅוj_0No 5ވ8wԿlgMڎpt}7#(>izɝ&nz$F7W\|F'92" xΤ@ܸ)ix¥wRwT>YXrk?%N!Ycn6/_q};8l+Ћo٫IS<>|~BӰ̓YSӔ]ZG=ԴEqk,k$^Cf " endstream endobj 70 0 obj << /Length1 2398 /Length2 19956 /Length3 0 /Length 21364 /Filter /FlateDecode >> stream xڌpj.b۶1V6ڠmNۍ4Y{9d]7 %:)Pޕ `aagbaaC԰vG@tvv@h IrnVv++7  &E&=R>hh Df&EW+(-@_4V|L&v.LΖB kW+4U0@OeL +k&@H`kmwyٛuY#c  _xEdm%PR`rte؛ehb7q751 @JT`*?幘9[;0XU"_4.Kڛ;]]Ohj?`a`amonWn̚Nn@YDe@W' 7/;zY1E[T#Tb:|T7B`e[LAb?4|gkO hX,^^/{Z*TNL`dddܠ~Mbb4𕵷p-M?A o.%4\ yvXoKr[M6hi\A:m hnv[+j:Q{Kh"e 4Wv5g[kue@뿞#h4K:-f' 4dn\A.Py~ g& `K0Ff+Yhj$2;Y7*F<f߈/a0F Nĩq5~#P(o/V 4zPvHo/begf տzPffnvFDb`!_Рi3A+ZдM\~/ '7Ѝvu7CN ܜXAslh$# 6@P?Am3yPs~CУj:?~'rv/5j#h[?ҿbP֎88@pus$q;9bbkԞ jPΠבǀ@Uz8P? ()?#zAL@B c j7: 4CX^p0q_'J?)8GF L[|+<ҋ+Is#Bsіl6ߎ4=8Ut"uQCW+d+79<'7d{~iϯ \1Aq`\/=QonsHNc؋}o}~^ҍG}|G(EgѧxmpɳU$!u-Z-ʾ}|u//JM0X_ތiLUnZHte!qcaJ; 0ku>2:xv?<]*< LhJ'iʗI ]:ѭ DeXqOy6  )ϺS|3gKyE[t.7oExVY4=7bUC*/$ʽHv8~QsJ/֌D{<2kUkqF1N5 ޚVVbpz(6y[;4SZ`nrhD>xS3 1wRXm ݉g Y JeK}xu"؟nپt*ӀB]Lu In9Ҭ_@]㾀{ oqvbtlfǶZiOEq)Hjٲ!ڰBX9?<#dg<Sgm(c-$xg<Ķָؔy ?}̕;)j?TIg]KC8Sk84"L'- lW;5ؔj*|hh[Ӣr(L_&\+|aȃO/|'Hb.EZ L·-AU`p2qؿI .MECRƈF^f@ƺL یwln[2׵J|T'{ăc݈4mK:R0 dpQ`i`<>jK h=84{FڗF shH^{Go\yw&9$p"ʬ'`R?IؽwP޿AUyOEKV ]RͫEPyq{@2$88X%>$a 6-XplxiN`N`d%AU2u YVe>_8^̤eS@rf+/%B&(/uoߥֲٖ'{t:f{1UVq@%VqKx1 YL{d8"Bo `::G-F3V-4[5)oysvP5"N%w&$]z`ݨͥC&O"8Iv {-S0K4s L*oP-(|[3xFS-&CHy׌Fbv8Y7)$^dkL wϽ/+n3,"AlGU"+ظ7Ʒ %~Suǯ,o~h,bUǣ~gz÷ %Wo#rY5DEz kU sP T8'= W[qD~~*Sblq^Դ7:}7a k?1pBmR.Eqe44ٖ\#qpDuQS\K۷a)Ru-F@a߯2LM Xn1<,ܼ~\.+^1/yDB&u+s-ဩWhez6Cj͊m??UJ-JF0bfO;ӸyY`W LD]*E # nƃ-LU_>pmR-Jձs3nj:%tJu6fJX.ty Z! 1d޼S1SOJ/z=r'bӽYZ=`ѰVڍH:q ŕ9zu+f|aS=kG' !?G K^+ Dzp %Vi[~J"v=Yg 2v M]4kΙYt]gD7|1+İjŐDQWw'q ;m&E#mV;Sznopꇸ xh&:{#M!z;QNC!^P4)o6 f~V;Sq1/U&/X]5, E }NI>5d p3x<\棗 #ENFvKz@>R0 A;y*D9nM߷pbO\k+:*y=JđQaj BX`PFkRpmĥB}}P]‹vEjGFh|r&|̵8t> GiGa7a682ū Þi'×4ͳkww BE2q9meբd?|$\_~=>}`QX56D\#yZ:tM=GF'΍ܽK\ Gx}aDD5,z$v8t} ./hWqkR8&K3oOp̵]_ [ʝFnPWyJcgd). h[)v|z[,yniI}MmkA)w>B}H+LHR㇎$됿#kF{?3O$‡DO=VH#ɸsLQg{|&a&Q竰1E;[lqeW~;"r4kݹi4~tB;̟GeP*ư.ԯWR푽5M-w&$usӳR/PEna*%lʴUPz8{Iiq_w1jFKY}%׳WmNX)LϞH(jơPiT.YD}õ[g-'%t,~sd>KXp+ރ?G, ǗnT6Fi%>?kg=z\ZbDa9mې֮a}uB,pq@blI@%U8xv +WޠYhQݮW"vR_/~AyR\Wlj+l_1.֙LCHWq9^y_pd,L >BUa3[ʭz351uN19d} Y_-4~tk|D{TbEF'b*:Wz S8ˊ3 C`sy^DfsM3-kDMԈVHSc=|`[Q%>a"5.h1,i''j6Ӻ!!GP"0Gc8^ M{1?.ukA3OU Gb%5;eme &j|#QCCyĚ5f~J׵vfu$|ɻ2bs,$+ӡRg:;?X H,y7˰#1#[aS!7 Y^4rJWқF @3BΛ5Y%AP$"5b+vkh/ّE%&+Mk_Yqʦ5:=eDݶMhw܏NXDK?@:BL>BE#joZ ʦi {@]ń!4v';?4_^t"1AHl[]B~) Qj'NE3ZSos,_FsX6oVſK8Mc.&;ˎ8$1C^%(}SlQ%u+P"FSHfb&\R X*?T'ؙEjY"䳃 mwɶX<ԫ.e2A*ͶDS1]9^̱}Xd F҄ 7!&C* wkv+ҪM4Abn >jVr$z~q_7sgWӣ`V0TNN2 'p{IL@S=M[P̓Em-eBNy-s艜R7 Az#/ٹv_s`+ PJMM@G+恱)3}ˢs0Z&FdFnT!oe̩0ʋ<kG1kȱ \25# k0^!T;"ڇ&펯SymN#a 2Dhi`vSHe%B%r"9NǤO҂<2ŭYJ=g2d_1}?zUKQiO)1}r~C$XwL[-IP*>/~R#GWYCM]y:Xbzh%ϓGsǥ +AcE|K]P% UK=vNo-q>P呢h{CYʆ1`_Qnd9NOuծa|`Ύ5rwO\Y}D dz< "s:-K _O[9i-%}"W/aք~}#βd4/r^l$b˩x:f%Ү6:^!>Os[h= ]Qi`*T7(سn3 £md4w*($.׾Aְy Cx3;)!Ogtc.e M$ |bH.+-Py??Ndp;# Q~\y;UU˵,H>:N.MSca9Q#ElRdzC!#]Y_@YF"C»gL-aw#s%(^ 'Σ}teӯ4SϓGԄ^O=G|p[#3o]+4/D\$ +(<I;0) 0p3.%<p>m*h)Jc_ROsEE`N̉iy O 3BW#\>[;=~f'0!KSFKDuk¨ |ZX/= u攈j5k'zB9%a+*CGBC@{ Lm7t'U4'EnIXwJΌ07/ Q ]6$'b_a6H(Lh 9}QYJr߯MC=JY ' ʂ/G^=[:Ag1B5K| )8PVs#^d?Zo>DZXg&hlu0̒{94Hd`e-Mj,={ͷ g wד< a*6/pwqE 8,@H,//=Yaog|P@Aϻ-?jۄ:KGwTLH?RD%NqГ$cLSЕ g39l,ɘ&y%fGo]J:l=SUZo7CGCRZȏ1}$wЪc.餿.en@{Gǐ;hQk{v{@Ơn) aZyd)؊.v'˜B>3^-[q5p{u c-_ MR37.:B,:{f "tvw[ HHl.)$aR,kXr~UGHypNq\)] K5Y,nJ%um;?,;TjLU#ǦV _ɇYHB:2ƄWN #^}UC~a$ap3Fn7X]+웽R$EE68YߢetF}=B73isvBѸwwog8e]/E+Č8^E&ilj?R/-28ۮv"j N/Im"Ip8{N4xBw~0u`U2!n9xfc3-_X3nڹ;rf2{~T4s~&xlu,G+Ē\n4ʘE@ P" s(CzsNc3* XGRsR>9%YOf\탌ԋ<~<*#g2'(L@wu7Խ).&ϨjK#d?c݆! jCR(i3[~:Hn4TӃɚLgoƲ GS xf~f)TI5n/6#}Q6{ 'sCQlHsaSWu61BG~)vHm}Ϙf- cI,)^1qqh:Yɡ0Rg8B<;E:<7FLbB-17=PW#/?:`_X2#ieF yB։l6N&?8/ɽb4":MDn]Q2mn C uɵRIb$Iv5>=ƁhjMubTRM-|PJW#N)*XD(&'.T5o5\p7/18?%:~{aA U |6sodjxgFNl'SE0 H ;?j=p)z=!g]G5E^Y}+|cI˕&-Wʫ'\$Ytz(HeF1Vr˻iXX?\)y@djc6^},ȷؘ؟J\HD"\TM x)?B}J>0&j[k6++4M1 ?ꭡ݈qg7K?߷ +赎0܉VL 3 rEYb[$M < 2̹.ԐW40+0p6;yXKqL.3ka W-PqF|R.FTZo[bLAzx!Zo-"r̯7wǨ)((76&lG?/Uw ͥ|wKwNuOUma F|qƓ>Jm/j[~f7Z.ڝ =RLJ@iaih)<94X]tB54!x%5+eJOPErqob"VTJ \n@rc]VYEv<&Y=d"+!%6z<y )xoO1rԘIwj닓;<댷=yXH-"t)ڂ}aDD1!Xͣ\6!qm3e}|>޼¤W?ؐŅln'|FYx7F{60&&֦(U. uci r'V 6Y%݀+nu-Xd91'6jJ6ABӺKl<O |M5ʔWLLȨ:ii^"pTSs;4OYqH1U(J{g?j+o]?2 >uՙ8ZU3v\_?Rަ.v|,k#?MZmS=~|HD۴ Hidk[۱t m+ѧ<{64[Xƒq< oyϢ26qQzqhwBD_) '>֗r΀sښzpq?li$UGR]CV `C*Cjj.[ᆓi6us#ގI* GZsE?2xH-ԏ$6F =w6#j!$prz+gZPou4Zw ,3Ak^ٟ}O\%am3~z@Wn=7B[-vh5 "2%/>5 yF4wS1g|bJ5U6'F§}?tf:P i#/{#dDp b=eiUtG3|%kxNѷ/e/%54=x_ 4nP 9UrJ0 ?85uz~&oeLYQ\u{ʝ&C8GHWj,ϰT*HA Wie`v9(2!\cT?0̏fc1}CV8"OR/]5f@B2pucf/4lK0HÔ%!3ɢu83!ZI-x wAڒ@.nf2\|hZ%;R1|3 <}T+6Jc"P ޸$5>CRZ#Ze囇H)C+!23K^Q ] @)Vmj6pR[ޘȴɂ[a0%Z&2NbT7 U\X^$_'j<?=m])y"fH70!ԤRY7jMw]eT?%sDЛ$+ojdEE+C1z,Nd G)(SL{ciP}] tz/[.(d}~o1IhlԠD9!(,CX f sIlCB~3C+N,5̓.`u\@Y*etr);d cG1t> ǝڑ WYyNiG'%cJa=h/md[Un/N?%DfK/T_fhmyAYi8Jo;ͫfH<'$0=+iCaG$XGRIem1Uf:̛ }V$归`! 4 W`2_g ~_7;Y56Ng/W"(DYmaU=uSJC%`acqm+)QhCj#z*^= ,ҏ%|rIW/:@)a qµ<($=R]8^a:Wl& %Zۚ(d@ۛFX .6&i) 8J?5jE "mDfv#r$#3$IqF0zçlRvY,s1g:8W~g&lV3$czl3x]tТG_;T쩮l((?ρ=J吡 ufu, _1(pyVQiELǝiˡ$+gSwiYM,c! G| @tOG# ;x*a3/2Y_G83t-t۽42[!qL8n;c#-J pQOW9ʃC {)iz~j.QSS]xBpV 4 ]UA `a3R(B lQQJQIV  *'/CF=럧=ɞ`͹)e䃲:9*>!1^ojoߥqtD mpEGBzP.S!}i_9WJJq^ {:zZH$0>uA)8Mp`&$~({[teNkm6wey>X=' - N;'[_ 1B0v (:ſS%M%*9^k' \Sb9r>O/IԲQs~RE1uJC  U3"ؽ'X%Dog;UBlxŒ3#iM{|!Q>0{x׵Fa]jh?8Y<%?f} ~ =M Tt~;q1Ռ) |jsʪ,HEܗMTOrfE$m&Zer-ftB Sȓc.{bxSaS*j>DB{#zݴJ6Fmgy) 7:ouaG& "O.4!%T:VYg ZE*h BBm3g|5T+Ms2>)K0xͼwwg-:Ow2@^/dl2Z~ܑ EKu&_?np&>BDGݰ7`0a`0eE_ 5EĎk$=a ɮ?=~lpP[~|=0!k]~kzRf$} 0B}A&!=]_hgiE QkdžvW`X~ _<ߧ^~?s^5/EO%(7adbQXA\Ҳ͜%:V[̛%]sN^|}F˛E#>?$80YC_2j %Lg$J3UyAp(ӳ2.\W=hZql=1}&\Afc+#'cE'WPr;܇ hZC`#=]8?U62:iޫ2q'GM򨦘+Ѷ|ugE!닻,_+ <~;6[a.+ a[ R1ա1Zs 6?]Ha8e0 g(O//G"G'k)aX |:֮<ׇ(W?X:A7H! NJ !(ͥ;|d'Ncn6`tMcD$fS N<ö:ڽ DʄG'%dĶpNpG}*^&#0qY:ZmX~>W8?C)BlA_\ȣ&ZȟnUvR,UR~YE |OKy OWKMڮYLݺ@6RުbSK?2E=./"T°Ӥr=xb% ߻jmK7p"tD~z0+Ly)ѱ+'KTp >,s@Ώх r>O߮,w4l#*ed h&i3VtEP/͉C;b0Ӄu)c{ Iqcy"eG=i[[$5Q$`Ib#FO6TM!?ig I!ѐY U\\Oߴxѳ U&Lp$/+N #+kZ#nLq7|O:I%p͛H+Wi =rlpcm߯@ ?j!P?%d Hoa))bƠl7R~(uiͧm V7Z6i $1Wɿ9NdC慈 $X(iMBN7t;>Gn.Zݹ-S9W MׄJ5g&ip_H:ľq s,'lբoo -C} -t,#9n ӴfS1.y4o"H7c4w׃wu__;I:{Փ.e+ۘ_?NPj %F^$ධ3I. Z:Ċ@vt?F;a*Cs߮: X5ղ?6IaIPЌOP6j/`!0_5(6f<}.[`dwe/^BsFK:74dUrwkiLXGJ 38c5]WJE$Yao dw`DTޥЫ'&MUy"EDVU4`e r'tb } e}ON> T ‡϶()FJ""cIayϮ'ΆTxQ#om,}%~፝X)pF3' ;A;D]$>'LJ$Y ԧ.R7fGsGz?{ca\̊Yf 66 jNl:M9O@k%>ZKM)Y94oVgIN*Z4~\vsۄ5tcIVP\n~~ r2HeAr˦>/Y25E07uN'h׌ P_PiF̂G@ߌvmTlWJ\% -7K/o !)3kj8yQHeI-F9*삇+O$n f%r҂ ئ׽h>WiK,(qw /_4b諀Dlxa{?!+ 嫿'|C?ߕd|:A&.@@#^ s8 :(pkSZ?i姍`b|oj&3hCcI/e]-o:loE@ Y@#%i;FUbU7O,o\|3:ɋa"3 !(^r䡇۔@үr([iL0xoL{}WU3-׍e : /M_SP~M[:]S[MKD*~HX[",TL]Ž"73ފvJad0 .#HVg?(*+Va& ibB$̈F>k>m<ˀ'( '!)cYr;ʒ:dŇ$5'30OJF8)7ߩ*N+pW"K2Lm~b qwSh) ~wpSk״=hIK,wx8eT\o4hyFٚ, ӏ۩}w_/6uɉI+O>^1oIsڤvG0D ?vq$ra9i[KÏČbx3.C >lb#mAntobqpykdu鳯gf R(}}Jgmy(sugo̶c=aİV(<48!;;1 @ǜ8ə/9o+6rDfN># endstream endobj 72 0 obj << /Length1 1609 /Length2 8572 /Length3 0 /Length 9632 /Filter /FlateDecode >> stream xڍP.,8 ]O`a-www Ak 8$A.ݳս5U3Ow>V -6ԅC fB@@i@0gT_0&tySu\!Nn''C?0! l Pe(9@A0k``p @(@bzv\<+;;ޙf-p@ agglvm+w x2@ S+<PwAtVӁll+w"0`# Z@]NÅZvBn@0ʁ9IMs]ٜ-N4eY=>0 d4vO?O XVtudׅ\A2m?ɟȧ _4/oܞ-vw<zJOR@?k0}ޟFy,З,m;~HL1z/:]oPaW#/Vd.%)ソ6%j3ךiG_rpd9ĮϽ^b+|mFO~yj>wӬѺQ%o^?c=͝|TgF=.6s3s71 !9%~wi:l,ue}'dkGM'̔vR_]zB} U OɪҺg:WNmn>*AS Ar=%7>+pz.pxA,sYNM:/:T#ÊJ^n[L LqgK{bSd@\̤^g^ "DS'ger7j<231z}g-rG<,"4ؘfqח7dp6cB +{?r[kKacA sTgcxIMJۘ}~ȡ?zEeY։s~9u urz|Ox7;8;c{h\ m {]\uܣ ֫z߽V<_Gr?M %|2| ~DF*(hv|Q[{3IJAnP‰e-iȖ;=gs[aST΋,6mh񏢄^3ز%^P24GpטTV7qR?,wmZӷuWfП '0s5*=obm#'^FOU+&P?cRԊeNzLg~X:ߏ*cckѽA7eL}(b&XTG) d!L4(<mɸa6iD S|(t,nt%Re/89(G5POk_I՟\ ^T&a0_LV?}殦 d/{$1pvoAGˑWb}k[J9Q9iaFh(3u#D=x/ NZru[8:JSXf %O(>Jz0lPZSj!)kÑUk~?V]0e†ϟHt>(ފX,l=/E >]fN٥ Lt$s̥hyE_|2f(u-ƫ FJ!~|6|Fh\K덟s(( ^dlB:4|hZO*qqE:{^^(9%#{-xkD7䌦J*^q#Jh1$yK<|aH `4ϙw06nZ'n G~G\(5д)1&7q} Bȋ5δ86١.7: JM$jޣ5DF-5sDQ yRy?V6,ȑ3E#}R8F`ic|6DƋ#󙻶E霴xvs y- lv7' p&xnYҲ u@'iH8tLGK2Z^"jv.a\ w(>f~-7;CG0P,nl5pFM2Ϛ㥢fȚ0J/7#>Ym h'(XGEJ ]~_AxHdr?<%_1γĞ_k!f|)?s1`41Taj-0VJ*Qq; !$ a >:7ME7X|.?ec[ 9 k%M>M .rg]Jsp@eJsdf(l\Hc'Ĺ]N;KNI~Ly(]ۂyU2xv}$ ohjnNBM]Rx|mxAk j~JbfT>8zLP5oD@8Qugz; TJ͆= :KLV%ؚn0x"&YceTx`K ;Nց%<,ut{J[|Hm/{m!I(CyxAƛPVhQ|A R ucq ĚndTZoI]7VW ĭKԌfxQ:3c; 1e_zG\,692cx?d?HTxΈAR4#: u:DW|gdƳDWu~5s弘Ś;A\YA{|].F3kxcFxbKcKn*3N@L%λ#a%qZ̄y)3Rz۫tu[ե|EB7|@JYcL2XSEbZiﴅܑ`7ao" X|aYJ&>kG?" #79D)Ĝ_WY $W.صէ ` $e(ƒlF:"UEh/ꚝr՘#p1gNmxS:YY&DX?1WRX͇h+UQ{SB5Qg@oM 3Jt2[.Ť::P^&9pam|i/GC%FPS2EH4f8c϶k`"GmOV6BW|pUc B>_鋯+oP-`ig+$X~֡ctYXkV0~&͎fV o&Q$B'Qb+NlGymƧj[ZU N?m!衑ܹT'Ă$`Tu4$H7wo}WJ[p~ZG<Kn ѽsp+eƩI%OS *Lħ%z5ڰ:f]OH{yמ[?oATC7nՌkuh aP5׆ ڽz̖qw|U!l{Z#t[6ae m]+tmݎ'^5WI5z:"!skDU+ń_rhA PG_Z#@ ,Inq٫6RX;>g̭4 )ѥ*Rh}Xr! S08 fڂ!5uVujwp:Ǭ¸çWΙb/L-=Eխj+`^1eS,-q7V*U@0@%)StUR??!/'2e:8bX8v^J GvEؽ ܫq* 7.">Sc [W%EB0F7dҷI"ln\nfb&#js>!H.,L* ؜D`Ăy?`*-)hjG#:x|ar<ܾMXǨpi|L?Ya1}@8FgZU붙?r+cJ_# *s' sb!** M6"GLEL "$:H,U7-]Or{}WKD<! ˼|~fُI)Y8/hrkMBs|M5lxo~:؈5e4jjT a7CUҳöOn_!}/뉴q뤐y=K{#haJfec!Hw~ 8$TW--Az čќ˹ ;tƧ+FXP*z=@(&Z3^ҵamml_u_-$3vȂLkyMZD0HFJRzt:e /mn~U|-HU-vp/꘠ъƭ$ZWnpr|h Fl3jj2[{6DQ>'{bx7n fĘQCy=$J ֐c>K0zMґt'*9")t<էRKOƇfIc}]^"m>be3g:tND7': ٿjr^S+ m5P"^wuW&Xvpz=zjF&qO &2/ 3P %;#LS;.~p$Xv@b@gee1QaB58;/D 7DzI_ xSK.6 7kK&gEܘA>]aK8:<~!,)b8MSFnctXQ_枱xSPxQh\3?Y6DWqQ72]-.Oѩ¢drˊ Y*Zs0"Zo c=Ce4#rqk05֢-U^.\Djˡ}YXauLO!tB1@.ւk}Am+M%Sr3'ʹ#ku!`fDm3MK5OZalfR Fwԝ"QtK#C[aȪD)3De%lbuKN&,|5)VY)./:쮽սhdKj*ڷvomYqMM3 q+'lIlԹrѳ29ͧb~ت՚tP>"N8#籪b5"\GWA\OLT6/RQR/ӾzXj3];f;Yia𡥜rñjpe*.CV2e\;CЃQH08H3h8ihwHoY*a*Le d)w,d:| $о5J92Eȴ BHx{Fl{CJ{nO̽fk< gnCzcf;!}1I# GָϪe sY:۷%Dab׋x&.;}j֍?|a{z˼?Ĝ<~z"r^tW:Ԛ,i.WԽ!b;jI `*?͕"bڐ}#lNU.KOuqҾ1{Ҟ"ףꨟʕtWߖ/ή9 KBO;C'AjpR n|6fHx(`c!3mިȫ2qcg8ke!EM4RD}GrDB|7ߌHڏb;zfIS.8g!lٶ͍k$Vu`g0zPSjn'ctխ"3mߠ#$>W-mׂK )9ã\4ɲZnkX;8|LP@wkx:ܐwbܗdԾm7p6["x)CmGd5k)KB r^]o s(E$~{UZ{.ᑞU;JPP2¡Ѝ}wsSƒr>nڗXPQez]җA]ZvW 8dzD.wpP/Y}3ҏ'oi?zb^ ޿[x{(Х?i /XgA]$7Jqԭ麢Cr;\>pF)1 b/G @hP 4FWlc2^ MSB!9tNe*Ƨˎ ]hpz59F. ʹr~e4അ2BC>z?}W5#Dn(afs1mg<$3[BED:%לKzK#GkvruHR)itu1)cȐ8mͷnG9ƺɐu>PCnj* ^⾳kB9y ApU$ffg\IιFwCʅ=Q_ˏz^"Ua_ \5$J!_9D/u@&)ö`gRT7|"rӽ)VEHU r* .?=j:]>JZl# ,RpU-1hfE*~42{i@Տ>T݃IhDZx~n!b$hS0ߓŐqz؄R,rCUIFdAA:U׌:4;ɧؼ~<'Ȑ$1*9N\ )0cXjE9־ `ৱ10VwKdMq#ieӈ?kdjE7Mmy̸I5w>Tp_r'!:HE?C(nϼiBDp%,<@*3y_f@Gh͸1k.2+j׈Re|D /IҍD1| G.^&s7PrqTZF|п-} Ζ #A'ٌ7ӯ'XtL\5n] FS<ԙD PV,ep7}&MAq#ӵki.͇;Baq`}@ŖW%R8&ۿW'zlSv5ݻGAw~zܪAVL2ʰ ߬:Neo'wa#ʾj{)yyA 53H#ׂ,mUB'F5P_p(,0N.tdjWۊ(xfU+w]tHRZ-¦zVIu(Ǟbo .ZBPx߈;Q+Lۇ^v}4,-h'J2F}a=IWdrREVL r91Kcra~sH/wQ~|lŇKs endstream endobj 74 0 obj << /Length1 1567 /Length2 8414 /Length3 0 /Length 9441 /Filter /FlateDecode >> stream xڍTm6tԈ  03tw ")JtwwHK|}}?}kֺ:v{{]Oյ$Yܕ$R@\ '6#6QEe p}I[>ة E7WOp@cpH[C*E(prغ>?&03C@;@q- W[D@ B\+ nsaG8ۈ2<M b]0@2vlF-/x8@˃ x8 Ps2Vˀwo @Pg 0s{A6k& [6ppA<[[@,, dnX<wy.`g wa,B` C۽ݬ=XCVֿrsNnMDl '8 `[^?J |" ~Pk;6 vXBlp?!wz@~f@/+? WRU~WIJ"<>l\\6N@-(пFJKl0;*⁴?7gq#(7d?j oκ>_0mkfU VP7*Z<́?mB=!VPW_dK{p:{8@{,py`apH8a{8yx^ؠ"q|8F ;x(`p}oA? x u9@ȿC Ax >"@_A^ݜ?4xBsP]eheְ^ 3Ϝs5>;W%.n0~ƈhxx{k9Ո=;J=+QEEͦ-W7ˣNn$rU] [>*L2XfLQУ`yLOg)ƿۋcj{TӥҐxp칏v"Oz; (YŧL[>vJm{=!.1e1cy44}D`dB󯾗SncidP@APWIu 3yj淵tE9wHﬨO&D[POk!XJo,jcyHI' VYP"lsfP93vZ򅟍@<1YOP'R2\3l4w9x wD G#^p4.{Zا;Z۰[RNlG-NO^KlOV):Le~mkt*k"&kjM$qaۼ_ԭZo/_fX kп>f0POU<)m7@ ,1f;>]fS}V\7_T)_X s"ʃLۆ*zu>Is.|mV{p:.2+CYr87ƹ6'Z?@}MO_#Lj2ddbUs7vY <^Y'j[řaDLt EƔ2& ; 5]9|U\ l'drEuK43t$QXE@"]$Sך(uAju|fxW4PbjͰ\ G>#fJfs\hyBM6L:#Es_T ^,y{>Řm_ h{cNMCQHV+|ړqQWR6L>k.GcL:{` 6aخ<8(Ή qP|4 L[LD>A|އwz!O}'m{_b z?٦S-ٱyNDԝ-hEϷ(uhh{q鵣?y!^`DN{ x{jO/"ªɉm2t|+'4`m +mXlB9vY{! Mymc7+- pPсEMKtIZQ~ըYK2WIYW)|{&?%ncՐHV\DIhR:>m\B'dqU|WG:z9d*ehkm\֒YLx-߯MY3TFqtׯSh1W}*4hڐPhQ@u9زQ e`vX?o`p%V *tズLyxErto7A6re#RLA&nrW)1(  -g&=՞7utouHyaSCtMeaQ"ytAחi7[@K"c\%ʁ-L{KF0)w3[;(y,HH_׹n _pC$ WPzom9&PmBj-,j].7)1IY_y_3ݾh"N& 0/g|ҽz(]k7y%:kt }3>?1ș,WBUd#Q?d>!%HDY=y(FġeZk ǣAYޤ HWF7xc܌S_Omx?fF/;~jf\4GDD{kD%Jab ٝ`#ug{5W4@f-{z} VѢ,tCŃ`,)? _fg٠98b\B?gB(!43UW!N4^ !9V- nQWѷ 1Qǀyh2oeap VH/O,R4gn~)kE)ę;&j>fG ܢ!_."~Z^q--풐}5~ZV_,z]x^`h}A'B]8x<V2ݼ'(AskYz> Gl)4W,]jA?!oT34WKv0 2V ZToI)6M?+@>Qa%U9g I 11h N _.9i?MJG(4JbN^/#Hj>:Zt ulؚk9xK)KGo@>{0"|je]<1oUFY!2`0(1yeRnx"|b] ;^(H)cKĶv1oض:rY8?GzdTvz^hPjBCvCP92uHhCQ}Na]j14!agƺ:ǚIxڹ]1zIⓄ28JķVXӝ{d[mB/gmâЩ*Ke fR,LH/$_!2 ܞMܺ*uDMfgDI&,}ǘa?Dq qbAD"SY-) DhT2ܐ4^RZ* gBII{DŽȩpY5UYISoAJk{Us/9mJ4+y*4uMML! ha ~YE<ǚM uL, Ȋ5o]Φ#1rf䧎oꩨdYᾖLJ ׯMi8t;2|}OZ 6Gs~&UG}b9&N->| qSS~vu%r:g zCT#ֱ?N8?jW+ TLV,b@'mZxScRb5_VUqdhbjdU׶|p- ]A {x䤲;4:Tt#nhɉfjRI].᮷h( YHd-&x. `p!_ &#e2~Jנb*<:a}v: XmϾTsz=ؑseݳD+A0l_{BWOJ!FS::BgX_)ݿq'bе8һ)1am} gi$ 9RYITCZ'!ic LI{hfy^k=}[(hj]oD{Ǜ]O= :\i%3kO~I]%rYs#oZ%-[ (yn.T^wi[+tpL<)VBiȖdߏy㿃 [ŒD+T"Fr)9X,Y:EI_s&w3hrji][1MZ0oɁ&<1w2s[Ϯmnu&TԯmHmQO斌[2>Ϛw%x?SLJNꍭn?qv>'XSƃًnQ"x/3r>{ ]$`pDñmv{z3ɗK2a2'CtF"Nw)$}הw(/NJQ)< $ZQ,[18jć|mkh=R 'Ȥ1qm\VNYpNC{ӂG_Qs@3ɞd)' *w(Z$NǰDfyJcgmuVEZNb.(;>lz/_fhL"oÅ5M ʋ(|d= ֊rn{ltCƍL3 ٝ{|ۯj8ܫE3]d4ɳҲ̎+ NAysha@Q >Oa7nG#]z^?R*䬅J swIĴBks,kbU+{f.:k=Jl˳ұiX*X)'Z! `3Qe#EmE:#QB N5_([WUUn9wKgk=5߭.4#\Y;;3MӃzy~3l]0)19[c1фmiS34j泼I ̈Nx]*Lp9B[EiT(Z1h,|ȽuE'M6b컢i}@nj\Y;{egb_8!yyec 7mu((DVW8>ϳ=B"ᰗu˩WpKM*slļش ^`Ҿ{,1EpJ/ l!r1k!EI-~ݿH Q&Q%})?,-K]ZQj|JsFZ H}-9{ə<ʞIG!Vympٻ*,@ yg5%D9'vVW/:N6RKI>n/g_#IRAȎm=y;INK cjܻIPIq(_vޢ %8]:I䎃9,&o)7xfao _m|a_`ɕ _7UT:[8O+_J=a(12=Sٵ=U^d`!y1?2'O(-~=;T (:On8IeQ|}+$aщNZ 8e˞ΩpEX0\H>!-}$[=h1(齨 :> $18XX*CV>7}ũ(0:[6F/wGV]P:UJoNt/Ǭexvzm*պȆƩ6)34xUe{p=KYgQڼ|IЫOoaY4SؚsJpX7| mgT?u+]xU7fˇX\][p.;N kFCA/zxL9ĹY0g9hHf1I*ܻ#&S#}ʺ1̀+菚+ >9]j?' e(;UP.f!%RͰ' D(LL UŔ?>![3W7PMӜ#xJUOGzF}]tcuv^A^HmȔ%~x "6}?XᩭLuG/j̗Lw檺x%fxk.㳁N+gy|F^ Y\QTC~r՝Da]kRÀ/q|yeFR*Mv 4t}lUz,(Åڷ$iّͭ1"^T,Q3}6"c]qb[@~0Bv[(Uv[i ZMg8Q]Z%r`m|u_AKVCOұYmv2p_tZb)CBףK+3XT.qm#@'c78H:0ca+#͆35T~'YoEEk]_IЍp@H;/,kBec.i3!ɽhόEH4gx m[oDo}IsRU}\TX endstream endobj 76 0 obj << /Length1 1391 /Length2 6186 /Length3 0 /Length 7136 /Filter /FlateDecode >> stream xڍvTl7%1:I(;0`$$$QH(!!-"HN~sq~יeS q57+\ŠC$@ #s9 ,%K-X-@GQˮC&Kp3B>@"S`E&44Qp7 ! rbÁjH8FP'I-0B=X_E(((H@c<ŀA'݀C߃I?j ;6  ' 6Bh Gq6 k5@tEJ@`h/@y>p6+~9B}фxh u%8n V3B 5? K#|~Md-_i"0pa!Bp|AV(_\O/ ʀ`909FrAFjۤ%2` ") # ?z(w4PO-n_/bM@,(2` !7t*XHO_v^ @ ]n[PP>/ᯍ"0?PE0 nGzP0lV ?Mpi]R Cb,@C+&H2@@C7xoA(4$tGcS['k CL * ` B_hص[^o>U _T\MbZ(2Fa2:>-i N_kJ3k>;qN5 f}3x]C-nvfMM_/@δ ['_9.v|l婬IVIQeȱ<"L;{#LCR%8yñЙjKIv{v=w2>KfGJ>9D/R]A?S%s%_3xTf/ x/&n9_c9..&D_TRڻλ3ȫ<ū#r,׌VE%R#wQё0aVP;U rv*q~^/Y1BeojXڊJwg}K|i(14ἴ̱;휃ˤ Pg/ Oh4Xb'(9-Ciʃ;K^?OLp}X,]ΐcy,u>r0quzpEE=szuFLiCkރt ףӹsO<զjߑ+2]fYVSĝxpZڅ=SPȝHi uFU\c۠fD-5C>\Ob(zSy HҺMBs;&& Lɒ`vل fɆrGӆL <+9u8V? ش}Fҷk"1EјrFgeۺ{ۗ GLtL x/-&^ zRdYd|tN2Xks ().kJBMvݨ('j,qtZWTGO .N][  I)iLyլH=3 jR9#xm?EA,B%djQŇrGpioNH%WG e;ɯ[;Z YOD^pewzW .l'zǢ%yPUS ) 5(@NpF6}un']J!QwiR_ΨX Uvo8(<-8.8{bvS1:;潇g,39wRKeۊsnc f(畾BW8=5u~VŌV nwr/V8 .QL{lԉ*>:ef+!DmY,0MuӜldyk2!RQ/*M4Nd *!3}t<{y'U煸Riɚd/Mr?#s=2$*ie)^vY:M.7XH<.Gk?~Cb<i,="BĜG ltPIږ?EQ|{9 Co+qegP笧/-;*74TIdna1fklS'8FuZK:Cwq#l+e\QGܮ&Y7 3n>yM1fK2ޜ}^#w_!GWz[&FOq4ZU ,J_z$r>RV ACHtU>A˶k2[7yEu4"<3f p\FrdaU-6ӢJ̺6RÎI ||%Vnr [9zoXmgHb[jm nj5((~>U2<&x7 wﶎѼYĨRi=vo|i8af戼Ҿ,) dlIs<IlsS#vFF 4Hm%P?Yux0KHZ8BorP9Ki}{|vhV GY քm߹˖D-򵜳5'$h ~1:pں_ Yv3Zfv'$P ~1I\|ygOe+{vM2Gk /qz-$B.F?GkوUTjW?T*~gX ph8'D eY^C& k?#e':i8Xff?C2f7Qb],9FbIp@d_s2l^nܭdZK~/ÄyPV惌yhr櫘:ocх)Wa{/yf>qAX+t?JKMvsp9tyN@*auɽZbo=>-$_~7ݎ:62}+Ph9DuONeun6Icޝ@;ĎDU +(@ J^i]bi 9I'mq;Հ`9Z2&yVoUOhl^̛HRf:G{}'R}gXS;ZD&{%=宜,;\b͞Ljuʒݳ1&c*>|~B5xJ;NW(5'կ/*UyA@GЖ˛Fӄ\|P1//PxQ~Aet9r?bf21PМ+Hskd#gxN,T[wMɶJb!w]ef[..4dR5/Z-_9Wi Ė3kG~g.\p/^X^Ā$LJs_ Osr YKۧ+mtJ 밈K.OF.zh$rzw;_@U3(RPpiسLg0s6xg\ׄM-ciŊ }){|mV[fdA d9z\Yawsg_KNwRV<3Y [ iSK7 6ʫDҫ_xTptn+]n ȥuVloMZf119NxH[C..)+opy:~I֗q#PA;L hcS}i9WD~xq-k: v ):{iY&QܢӻԂ6?LM}@6c(:3Of)MY| ɫ QƬdn&&]3^i+s|E V۸!T=ǁ`?*;2Qj,u+=0_ja՞Ovlw,*8Q"RV"W;%S:jP(=K@]WAg]M];J@t"*~ڨ,Ps2=*n#uPѠڗNw/gć@ڇkggܯ K̶uh'MfmiuK$]enpG=XGͮz{,dV/hҢ]qDWD@w<fXؐW=(Q5PӑUWiNYMpʢTk!-زIЭ]=)8LwK6]B1q?sh+h prIxr@fv90ӿ`Uò$v2Rbt`+\]XVSDBEkEZiz *j;mBdK"G W /@M]4)..L}.\}O7F]З*WDHalP%*ea4Qc\vrRN-r2='9z4: ҖNKYۊUz%[~V^] sZzVBPVhZN3F)~=^| KBDqٮC5{z̐^K L{QwWK36?[)vxp|u@\-u^q1)TyM`p)<5`޸٪ge9Z-yzmW+h#Β6^nF&]m- N9!"$qBZ"l׽5vrFnj\=1gg z4;@ Ik(9Fè*&Hg߳rku`~nӮñܺwe@EӌmPs6>\\*ZZDy(SL^rsoOn<v&nb5"XI%a]* U=T*?w"P$n.Q0繑Hk 4"=9^Jd0{ԩ&붠:@[Æкӷ6REɌW1 |K([um fPܫ۹B6sLI6&wU)RڷGr) 7h1jxn|zv?nbLʐSުGd.fxv2"{πkY oӆL(;6;Ќ}b8 ywCFq] ަD4UⓃ$Sy%&Q#t+D}-s}ϑR}vOE43d"fvM7umԙ6'#p)* {co/~q$>kP}t c×4=휦FVJ4uNH(gzYɒ~߂S-;+&nKk 2Y(eA'\+O|gS:\}"9:n0I.%W@wnv+ gu endstream endobj 78 0 obj << /Length1 2231 /Length2 13673 /Length3 0 /Length 15025 /Filter /FlateDecode >> stream xڍweT۲-N[pww4Np w  -kpydswx1gլZ_CC"f 6IXY % EMMv d9hh4mA

X3eaMo'_N:}NR@V?Hf ;ߎFHK[ 79d7~[/u?|2z3K_MRYR\V韢q,@ ''o!U3$P9G+0|_?9{g' R0@g @_SWkI/P/8#JץpT[uw^97׵s~m~V.ͶҶ^ KU[7 oﵳu]m_5v ^wu:@ߧJ9Z-7 :T_y56VGkB6xl2M)A|6+SiA6?/zeZZغX;cgzlzz'?Uloo/ky~#giCx- `#F͟4_hdzal_|mIDڕuJ`sI7_Nl?9J~U5hrce '{? r4W_kB^;joj/kln_# ʫ_9W ˿zmǿkٞWQ_['W%ׂZu{@HK` wv :~։{shݾs!CnB}Q&x[AUp×+:b#Z 2=T[~NVx,0,((7(>X_e(nh%ư4?UɪjUB~ ~څD#w7O#7atbrΆ 5U tus=Coxl^$w? cbǐr)C74t|K\ ü\t^?fK<Y"] }V0WJ 7}GQWeyg( c EHOhhT&<p#<8H#:ӕމ"*$AKXg{r 31H[#8*-]+9h匎B=Z7lF3C4]]Y\h3^ țp klwNJk."'$$b ۆpe[N!dR4Ԍ$8}rK`Tsxl W F{*FDƠĊfQ]xn#֝QگYe;\>1qײ涱;bb [:nqP*O_-#uLJU,t.Qܲ2.Jӣ0$arbҮ-(*d3@޿Y,mٯ{MX b^ +!.r:Qm+6 9S#lJ$G42֕*EЪa&`lru}4&0?3i9YPr!+.3arڻ˩[R"pKH7Mu\pOwJXomH=m2rqzН~Z StEީ$2[9{Z@ofj$󈅝49#HJ&Aaq{zv,ҧ1ɴ# JQ5,!ە a9 T` ^S[Zv3u R2Q"*$>(kU^TCI{[WL'+yVz51iY͏b^jщRCXxZ:lfxސmL8i 3¥usZ\C| { Q=d^+QWv7F}񽟘7d,HTY"~ơx~KV=2x!-z@ܶI]פD 3^PJ)7*Wq=9.1ZN=soHS<ꘝϿUl8lAUo$rT<ꗑ%ئ:b1Ϙ9yb7Q(D[g^Xjd&Q?: X7֕%L.+)_yQ*bG N˜ ca4Lp)-U>jHjCN;rU;g81d” a/Km k.t*?;H'r~nt~$΀f *R3bCa saѬ~ouB-vwU棋֐MAjS)plzfpN$7AHg}sFێUKdz& 9G=2Mė: )pb*^|5LV; u\TV=:>vmr!FHk; PIN܉/G8c<FLR b6zŖRPbGjzHa C< &x!_/o`Ey&W5QϤR쑧^Tg=_B.٣YvY_Tp iwnP^tٵ(}‰`!%`ngx[T 7%v^a98\|k)Ub wޟ\\]] (kl(銶Am /gzgOޏf$NN lg8YUɆA.bjZʸ},u!Vg{r(#s3/|Uþī_y[ 8or^3,I:&AE)|a T 47%*$z]*S\v"}j.D 6Jr+uZT=aI7VQ6S0UwyW0>}z7t O1v!U*a΢C 3΍ ;;L5m߸5q&>II߆||VYi1KQOZY,h_}iaYe /H iLBJ!K&+K_0 ݼ߱`[L߸ä IP,u悲JyZr&bƑVX˷2fH{0ɷ4#V^r.X*}`)T=1g'mPW""F:3g3zjCph)M /XSTeZ1B^Ct H! ίp-}q|b|V 3HZy~DX75}.;AX$pњ⚄P+ky7nm@:,)꥞x}BB:CuVH @[gJ\G_ŊZBHDy10 $ Jd&;q ["QүŠOGŵ /wvjWGMtaZ{VeNȀ傥Ǎ'X懴е5S%(k|yiQiPd5}0 .f妺OnS|`ӭtW0wb%$LƐGb? Uk =[ $a`{,"el?|Nk75KQܖ e볩^rou"c`LO$(;1&E>orqBuV+>O[,xVT,—FXO P5zEb/"v;gO<>(('"+ʒ`İl9CuȠ\2ųn UQ<$DL/!^jws&Bb 2V~Fr`F}S`6)2SG΅ʊ':m@  KY.;' $1ƽ,_(29`9v9ЊJ[&J:\m,wͰ2k$^䌓!;Q =a٥WKG`Fg.9ON%XE lֆ]CO%ŧw-J)MڦٚKbGth3X22T4-j%|EzV{g>KqUIy'7Vrm υ iVґc%sS тHT+zpVam..! C{)+KJpgx>InMChߌ)xϔШ;yDw"Ci~Khɻ|^l wn\7{Kw>}5Cc݊%V#-%eToZGzZiE洭mb PS9ſ6޷.'ZD~ tɳ R}BPaj7Kje/[pþDu0wׂ<_{t2¶ ,7Ѧ&Giiiw4s׷za)Ҽ/EB;ISQ:jixCB/*E(t XS$VCԡ^2zt,4kIRHc$יr \xۊL*z|S F>Lcn86t τT8Yz#7Sа-,_*8~) 禝r{S!x{nC'haq|Gx' .z 5-&u3#hr,PÖ,>BBxlf9Ql~ɑK!X}х3_JaYr6wPPf+f 6(#k>Lc#Ǡ*,/󁹮eD *-r ̞~z(4h)Ut o ICb" ;meVǎOBw{Sn D7 4"/Ⱦ0TkRUrM>yj$&9ӟ++ Gر+.)h3Jm<Ӊ:۵Q.Լ)d O7b'NN/]JeYo_#L{4ZPuQ)?!.0ŲrYʽN^Pr%֋ ZvMa8'w >ԎnO-O?vng%[uR0EW n-;mX¼ ]Gsv ˁS6ܷp_!Ł-6עTY=,FI7G% ș~`#!|a[c!R UWP2E?C^ьW#zg4 )ØGD$$~]Koa*X~VLhX5A?sQ}pKio ktȊ"~ :jD%^* cȨS#S:P7fȖ ]a.2 $m[.+/4^&P'j9C ?0VKYE adKS~$Y;mLҌǟyuaG}lW8\H*f,5?鯞n]8)Z /8Do'O,BWV3ԏCLMZvU Vdzg,ә\=B_)>;Yjwu5gT cn.!Oh[,r'Ö{#^趏-J_ ȹa9O3y0U&Rr&.] ԣ$$S`<_|Q{{|'wٶZb~Tuq͵t9X-AM΄;FWaTD*"v4Lo;N%˰T7A2n"=GJxUwdwa2ӝֻ~%Rq^Z?(_%sgMe3٦RhBy{c6uj߬vlN;Uкr ~?HŠ+̐AhR?͝hnN 51>8T fƗD!{>D%6Kp Jruj!d.7VzjH1zqhy(/1܈5Jϭ㨍@w:FC=aêA"> U+M<\zd}|7Ûes8̍D[O1ZEw(t|cbQbRؑ_]? ҷz앙0˜6G+6)[Fs$USE.{ZܘRe0a}$m^qV{r&思ybTB (*3mjށg4J:ہRoTR ]ٜ xrq"`Oи9uϛvl{X"$gVc:1D;|uBAG0 m!B@H4>Q-آVN-7TpƦi 7KMzJ}ru*InVyVƪfNoiLvwZebה [U2jRUhbvq:}@\D DgpG< ^$Qʛ{C>dRNa?$B/{LuTh {DC* V/zRcpF\#TKޏڦZ)rMriywyw -@H)%zxR8H?,{GUC"y k^ȡY.ބ  /!oKMr'ܬ~ *cWrX8Q,</@ɏ$kkGz9؞`a/~z$#Pzh- F5wDK|j)j-MzA+ 8E4J"}bH7,b- JIM?!cd/zh!鮦[SB3r~Qc/{52 ێJ\jų8-c3 s|O9[}ՂX-qKQ*pׅ&w_ jT+H-$zPW4 _m >6.-4)' T= 8Goԗ fb6g;sRʆ1ndo&T d& M;5a~Y=pfmpXv~<]b}Z{kD8&CSRȰD(afg?8=Jkw]z<<"qǶhG{Q=Iurm7AVA@w,t]z)O 2pIPhM~_-aR|Mr"MLPH%E2,S@^ea_#7=ˣ>T2JC2_TfU:_7xwD 3򴑰)m uu"B6q#XI_YRED([Ni8h*Aݚ+~!xIyNKQ/ËAWQ2L辕۠Fu7&;21\vF7o+qtOH曉"B;yʢѝJ U#ȡEٌ:AmwL>xynDm.` @ -+~xV.xl>9fT{}0Qގ*$R;\hQXRt<Sq"mH.߃[єkwMй?ܝ\/b8ByHc>Ѡ#nM9N[]0x`گ{b>rCc*EJgv~#<7. ,)Ԭ S:=Jyk<$n)cO;$0M^tRY_6s%/%\ű6+x/5IqՠzG߇9|+bq` AKu*gՙKV8ܹ+[w32 /y;C!Nv\7 mű@D 3[UzE 4S3*A~w:bKyfp!N_;kݍ懱jor1*s])_r15K{3b &!#6.a#Y/QXWj9S~Ol㗲 zwIc_ 2wk`.܀ 7I }ʅpp7`,ޮdpI1B}I.9SìܝfEIE!@< uW YpXr+=zKA/jcvc&:݂rD1d4~нhmPI^`D46%1| /ފ8$}Vo)lY_s7~Ex}s9`S#/qBNmGw^\ta"&FgSG` {c,9e嘩lSĴx[leˡ};)La/Ăا|VJ_" N n-aNˉHUTA%8M{BYaF0 `ef Ԟi3Emj'zt H^m}˯rVt.vm5'{3G,]W:))1_?Fo;:q/]sE޼{ ^Bs^&ggi ^@ +Pa!wTZH8혝ͣl (cL-ŘUQ΃AON~ F*W;ꌚ_zEipeQay[w8"֢xg Or~ 0q< tLWDw!ϛ2`k'^44ܬ݇ G 溷K5Ne.'P10ގZo`# Sbvw$h@cnbqHR?p:],TñN0wK&]!J~^?2kjkSFQhk;OL9=?5T񺷋HpkxʖXߓ;q_О~u Ds{s?t7wxb)ˆ!oV&Bpy3EG;^g,bKFޛsw+TlGRe'u4Q>WYauȍ{@ëZ&87Y\"(yLU8ѸTjԕG9nXQ,2_1C6U9MR1tvbE": 8-rn^d`ͪ#TE[̩w3㳫|JzdvS>Qy0|{gb$XM"z2ɅBD%&]N!O/RA)ZTZAПqnzh ~ݹugMSYE+w= "K6*d<TaQ@zRBvتyq OfzpOݜԞHr/Ǡ|?R4tԽO庴ScړZ#[ bB2&W ʜa~y c|s$LX8P#c@rca(p`kiTis4!ze '^sWIa̵MMBfݦ5 ~2Jeע_[|} Htsl twȂɀiI* aꅰpbrYqBm mwLXm|O]L4yAƙfEmA+H/)\~yGǦ ȇG4讀k '_-G&BeSiEj͖Ȃ)p ss%N-k(4ٗ>nGkEwo]_1ɹ!H8v Pb2ٕB0b;֣p88; 6b[xnh~_N-ayubvRsԷ"gq=\XzB*-TmS,B>>AA0w (Jl.Q ;boeerͼS"N;u|oĭT7Sh!)X8C!K;&9=t9zC4}B5}s# Xhy 2Q/kV||lhTdt#'&~2kA(urŲ[ e@Ca'}M}ʸ/c|GP-M"p_,@ﷸmDnVNO=Fdԟ%]bniADb-jVaH5ҥT*p? }xr3S!TIuybQfs.Dv顼M&q eVq3&õ[\TtGr+kgK6Rc*uocCX`_|> $e G҃|6c`A%BR( QEȸd>9w28{X<(xpѨ J, a\)mB $> stream xڍxTT6"̀t "90 % H()] JZ߷f=繮=6;1#Re]cK! M(o;> EGm*(4PhyB"!1)!q)  J DxHT콠]F+#}=N(to\ n8p tQ`7tE= `A(qFܥݐ'9n>7 0#^`Gzn? Lȿ @`PDxtu@ gsBBJ'W"(w=psBN|P|{/= @{Cahj{C<( 54mV;*#pW*P0ツ@᎐_c8z ¡<*0hmN`@()&&*?}@΂ ;3#@(G{(Op:8BA( wv k> ;k4p῏XPLr*)!|’~I1 @HHH .. g{>#VA$jO\ g.=`׿( /BgWݑ' ۻAahz*Eo9/nD٣ՠwB3__v(R v4@//p AGC ~ 5Ϻp؄EFDBhU:}~ (G!nP'Ahߚ} 9H:exe"71յ$hQ3glGJv54#O *"y/} Y(@ao(};}frD9M? =J6d$¶L5z @r(='aɠG+wa>da[C [>$I 44|MPꈣa5܁"'Eڽb5~Z,#)ɹZ-H %s$VH,;3EEyT++Ŧb4t-ԝA_X`.5>1_Iӱhb鱸yZe ?n}1u`;dIMn=Gjƣ*מGtr''cR~ 0ɚh&B\hB:owR*B1xR3Vt`[*$w {ݶIr8Ƴ.zlWǩmKV9[)PadK^a${׭ ņ 磌2_Ovroh4]c; K Eە? PƘZ tyBϾY]H qn;r^HI@F̹!)Q!MmBU~)Tx. i߄k/QY=i%mRw?>e@^ 5* Ue [_EDw-kG*m8іWN#[I,gG, Tun7lִU 4}i)v9;ðһN%|qQ)=5 ,Kf+?ۇ) OS{ҘreGlUu=d֜M=etpH9};PhF/j$ӕ*RԼ4l^&/us]|Ob 765lkW!",k; $NX}_`ja/TL%Y1Lz><7lZ+ְ'3.E4O-l P'NU(K9I1 iFs7Vg>OE W'(J1{N~z 񏚴!Uq~&Y䟕>;xz`1) T>]Y|1B$ZFv}W}YU s0'+ԟ]1e=²Zbٿj_؞yxj3ĚTقl#nÝb/؞spqa*ӘP:q;8_Q$KLIt eWX?1uQAn-3=50P0!Jtd?Zh8_IWq̎Vsh_+ Tm9>m_m}-?Gyp*f:%ԏ-1mL2`_yD!vFAv+/iUF4 Յ@(wR(ܺC<+{hC7v}ƘXH66︇:T-l8rV~ok&x+!H`Mm$5]_xib:6GG]|̯yAcJ rn+4pn9r''+PCĎ-(ɹ,".\̛,_-l+6d6,p-N/1o_ač3o+~j /#HM\b&;}T\ԗJxr+Ew`o^朑juΎ\4Pn;bU $('<-ȷn*TNzUǵf6e5V& 7[(=Yy$BPMӛ^yD'yoZAx@[-րͱtZOעޮ.*nD5n 0LB|E1m5GeNôɧG ۳oI~$Zy%H=?3vd܀ĬBK9Ka>K^_z5s`*:GDB. ሳNNIU0%Q\xH轧Q_ ʕrl?9LFCmG z.=s/*^1c=w)j#b0_*aQRP񜯳)GMOHvFE(ܵXLVo03m7A3望ɡVQ~=#tHٺ!NccIբv$Y'<۵Ģ"%jN3 󔲶7s˫:8!f^}2u 7)8iPݝS9 <ˬ?HT=;Bg}x@`aѴr]jcYiPY7[<#8[8}1F\ OA znO?<`y20"2:m}'Εz6e'}nIyg@&J/&UQ:Z8ٸOˌEx]h<NV,G9M`25Hx暣e(@fuEAJ4QMpLc_N}LN;mfaMRƣۙrDc]"rZ~*z:,X%xt \"c/1Oc46zU. :(P>Y]"`4[rCY߫>AZ jI^)cg(~; 3}j9+aRV3G]jSض?fIS{pi'sIvㄸlXAG'r䡺ydlr ~s=ēv]ڨc_')c0dr W} [JUճOTWPSKN ٮ^R} ϕuTqXTe2bj0eK+;>_˼=I['DrSFJG @29/֕fscpȵe&-⮟j)iێNhvByFd2} /^ME铧j_M/ X_iGFVuL[vU\xPGzlFi'W\7d\Iq0_f)>+NiH5xf ڴJcп;lr*Z 3:y\ߩm+jB{p յ 5ZbkF+PLClݑHew*4q.q(R`u=aWH)SK\$/dkm,H{?WwfED~>1B94sRImuJ)wb, 4 XLw[TX֛/Rd,bܽIm|󕭍qPzlC؉W/q6__zxvP0ĠVh!Bc{Ik;_:gnfizo9r|Uq|V+5V1S:{mÙp -LՔ^ABzmeZL@`H(qHEo5iIKukFSdh߭O}&qʢN8}$lQO8cP\KXXi˅U 2Qrc=no9jNLF$đ΋%f$efo;NKjA9żO6,^*th3Ҿp9)x[CJͲFzv }a!V35],|ˋIpý[V9~)l`eYѧFv\ I}序7宒k|>l3]JWCzq, ^cIl?P(߱{ss!Fg̠ NJexގ6/hg[箄I{}n1Gy+9M&w߼a8Igj>Tfd7ݣUEGHz&w8e|񹏝1{[hreu%+p'~*8EoYk-h×tgu0s@--Jcvrmz[T|`3iRY]j97hc4TܐPTVnCga7_}oҪ,9W/,L'Yd5_=SkŦ _fZ#x^7$~5˚0M}dv[0U;zQyAշ̧Cc[޳?|-ӎwg\(\#mbf+i'0C/t7G1mvRa4ud'y3"\V{\,Tnƾ CFo}f0¸"k d#*j{oVUK5M,KR|3);"мYO0> stream xڍpz il6Ic۶mkǶmNm;Mm7y7s,? )2P֙ ,```c``%%UpGKtt#C&ba(kg r02ٸٹL 1sZdRv@'XRa;{G 3s< 00rr:Zd ́6 v@g AclEOFghDghGIpp6(@_r6S%[8Klgf|-N..&@GGv @h/c#@;zXؚL-y1:gwg_NvֆFnT~07?'cG {g':' 8͢&v66@[g'ؿp݃ߏkekfdjakb {zU[ ȿm>Ddf@g+3@//{;{ ) pvtxS`ba 0Y! ;@c }KcLl=2_;@ `efq|7ſ_~t?{(%g1@ş1a`e0yv7E[z m,=m1.; k TŕX_.ښYNb@ gcg_bտ`de220r[}\[؝(jklgג1  =`>&&@@Ogk`0sIB8Ez? @/ v/}DQ ^E#4/&M _zQ"M-\/?>L?~&\z?>h~ ?|86?`h1 㿥ݟ1qpsb?3~sS_ sc#џG~Tf.~4n Ӈ?1}H.q}l@w1겝1we}pcg7ڃitJZU.'D-{~=Q;5WF$Ŏgﳘ3g C0x*ޯjVm=R. hn C?&Ck٤^*icTuJI ri?QrGZ_@͛y'J9aꥵ{sJɩG urK8U kū$zw%dkr{K[FqS|ħ>@c&@ qMLPdPp4 !ܑD5ZpgNN~Fs\tvcEhC5] ׻2׀̹rp ",tqJ2Zqf3;X74Z#>J151tWo,ZϞnnxM3%F- ZU`4Iyc߸H0; ;zӯ(x6AbF]trw fڒ)w)IǣU?\|\\6Yt4Y~$\?=B>T*iKvu6)uX?RtynT臖Cw+.E#?$;Kv "/]1, ƠK,\4R3sr:gS׊o3"[wިVHaMDBC")c˽U~EbADi*v~D^4I/f\|iGzf!𞆹6B:>B2>+v!1Yt&pePag^LO?6'%线3Z/9ሩ$?GrW# eD vƯ(Q@MъSp1c?^[nݮ%ecx7Fcfz}Өӫ2Ssg+By r D7Ce`9Cj2 4=K<(wPDPy9Ý,рn֍bQ|qύ,cL0lf=D<WX2ܺӪ% z_n/vGHG(OJ)i@ބ+qh'U BS05-!hrˎȐ+E\:V5 ~4RT/Cd9:аmrUF~Ԡv7SԾ>ټnd`|2HH/Qp[Gqq9t4AT?JdDzk*:a u~y/ ~e@^F`H Qvx_3WUF.Kj@vL-=E'|n1%Y.1D+J~9Hs[jkJn4a@*qOO;ځ}vp"h, }g|hBFmwK5ؕލ4DheC9H%;$o@mAFFA-ӛ_+x^cq͓x.hOqd{:LYpnAv:U*\sb +-O[9\02P$JGQ$l@6mwz?ͯڐfH.Y!a-<ҿ-Qƈ*0h6;Ҡ?s6w/VG6o9RDd:c/ ѓFMܒ?{#K{ҷdKwkGd|.)ގB -þU+c2FIsl5|bW"lע8Zէ)Z(^¹Ʒm`=EX{辛mIR߫qE2*n*n$BaG UHJ w%YgylDQCE/|'~SЕ -`arHӌљG%Õoejr.PԜkH,(QHso[[e՞㻈vUZoxBŇA-Zݿ 1R@Ǡ5{C~^f/cE 5ZCpJjíAOG˟M, UYJ,8 oKz"⮹{*P'H ƅe4i(g)4M,DʦMBuB3 b@.JWb\RA˰i )^41?!M,Q{Pt NI4t ߜl^4>5!3r,Pg  Fs:.;+I77 h]c\u@EخkIqbOy|b.6q3*͸$w.jXUh[qJ$8M2(VNRP ͍:;PL[PD\;(mȘ_1IR̂#{ڞy)9eړ9<%Sȧs`6;Ox ! F dGxPq8qkm|(OM oA4I.C (W #1/{RPtPug$kTeYJ$|YG= FZlSqˇWŧwN楗8e똵fWvW0Y,.:Hu M"n'k\EB{ "MTlT% *iܑY*;58e_4C5r$:1Tlc}+au"P~N(imEzF)}GDm- y]pd}_޶( 4j~դqM(jmγz(<+Y9OD}b%'tGGNŨI e7E9R'3 q>fqlDDrPX>6ou-20ca&EQ 8X\NXЮTIJØQ[W{X:, o zXaeFQP'7w1m&|PGSZZ;P8Mƒ`O%IBh+ uЃx3piDLɸ{/*)Q||z~H4{7_6$A:v$- 6HK>reEo;mfb *Q*X;UH\-Z]+s:-]_-n~cQ]o0R]{ч`e6Dߑŗ}=D̠4U̐!֠`OU΀bd-t,(ѧvNf,`\F*{gRPY@8Qt`BExd-w=r,̭Ea ~/8mn!$Da.eU%xYB=uns cnG9l0粍#c=oRk)ǷfMJ3qZw(=Em'$dt~v-D}#l]j7o#Xw2x vgz'sXN9g C})7Xc->tHQ9 yan\foOM{uxR;'٥F=(WCyJna[m#լEĹK5l1``:&ҿo|q)pN5c1,]PTX |ϞyN{q}B2ph,ʳ=#p,^u54&b\qEK܉ӤOxdcS'CnޤfHqwZѭÃ`6-J+O1hTw^ډ,LF71J#lS!vo؈x1p60\T$ᕝPƄ$UZ]QWM0JV$ `A$2\=~WX F&Fj䵆0v0aF @;|do #j3?;eM+ {?k/>/і0Ա$oʢHa.%K^0|F$ː 03dlL!J]V.nk*3aXyd̯o&kŪe7hW4o u!Ϸl*&9*}jLL<=ﻁa=T) xٓ 7p#ޒBz+ XpT$<}yAّP6y <هGYF=%8i^FvYsvݖbQ~U?#*?-I. BеXV1j? ū)zKf--#pC 'r'o]YdX= k`mzsg9Ӷ 8@Ya4pv7v%^s-yMoUOyR\Ɩ%LrM\<~ =a أ^OOd>2.9%~_Y~iOnS8W35-,ϽzWd?naNz.߆&+}3#r2"6~C/é}+O/MkS4i}lcnChϙgMYD~C_99w _o#unxg 4{*@' +E j>; 2k3G KCu?WgE$5+f]pT4X1{M/a2"`VI ^R,:%i4IC- k 3=b N=ĝ O:~FV Iպ㑃b2|zt_J4`^Y*TqZ|3$ͤN_{"U#==ůjLt9L˸wPkc}rי)!HҶR%3 ~0vF DD$0{|/qNS&n?S_1ԡuYhԗ d'iΪY~dvS/]\Xfi!RRr[>:P>kmw*mr^~-qګSY]$=#t5PmEyzO`| K7foD{U4\fHcٳ K`FѬP].tXUƙUvyW'C2fBm8T|ueKun0xȎe⤄wbyi+KM񛉒C- ju5e).P j칗'Ǖ Nu`"]`O:]ې\h|Gcg 8Nb-ubVg/y Xfâl>kNv3W#r-B^Џv.#خik51TA^v4V}|{ar^@-l\_GB?R\#QwBE HȖJ„rFbsB3bzh?әX^Eܤ)Sg*~yJ*ΫMp6kgv I$\  wm_4#r߿Ctd]=ӿR(Í163e͍Fd) u8|cV2H̖ qEt{ a!J#se5Z/%ʉv$.f WUZP'/7qwSjt?0,6u*NJ恜Dr&/kEfC0eE9m3:vЎ 00pUvę@?ѳ&w_\l)FY A 12TvM?e. S*g=+ ܻCRœ 60bfvvIKDʷ8M #cCv^I%̢kbL 2;ߎvv9FNWLPs]wӚ$dR>xӨj] SbsۖZJ{W6k@>V1(rU1<礈=zM˺Td SQf @fj.:EIqSƧJ渦qa3:i3;O"BǪWJnxX,::c /4t&8 rkT(} sEQ~,Cw%VsP3q|r@g_Avʈ7o+6M+sBb=L:b s%Q)ъkza.j籼k0t V5L,(ŲRP*ID:d.w+Ch-/D`h\!ci u:*N v{vzA7`TߣW,|bI J_X~׳Lzî'1|B;8S/m|TYty\LjΏ7X!MGIkZj9 3At$Ԯ'Y'rKwx$ M]lhY?[-Hx~l'w+ݦ2ۙ Iv>ClxZ"^i07E;,n)o,UrI|r+`~Yk] A=:Aĵi ˞0ZM}Ϛ{ڗ-FLiI~Z(H};",Х0ŧqJ+7$'lhH(E 0(rbcX\E[$0IwЎ+p.g·$@&y<|ns72aXti%ޒGR3a[ԏ'$bs$%-Y=GҪ(YTŻ(''ZXt~nȻ0B5.rSc{ǁ@܌h 2_/tOs#'?)ǀ}qڄʦL 6|1I7 QtജNVjYnNT6x~C4si :͢Q܏&=ɐ;}#غ}HbV#AS+אwa\u_׌۔ &EauRǐ `'--mzu65{mLvvCb@sl y$qqF`|9p3yCrN5kENF}&D'Gv.CIU6 8VtI>S^s 毛`Gr 㵺'[7|[7If-[˭ tdy ~hnvͲORsgaD簚LQkDzX0"\ٮ 3e-A8ȶ?\CƯ:-._Eq,}kN#0'7^,K;&1Ⓚ]6%mܳDm@`g>.>nA'U5UҮ}O8qQMzNxՓI.̹ԶD4}_b<'L/¶)uٱlw}O _W%pzdg=[x|c d[Um' t|Gh AeVG: rP, [_4 %٥|}[țnm8X4`]l|vnW;$ F]7 3򧾰ݼc4r*)ғfZ^#8Ē(6k*8z'ޛeWN){`k'|*؃1av:VS*@JbAY϶ ^sYpAB=zPr$MAhd UK z'@R.L-P+jΥ/ OpGþ\²IjmX+ 6_G?wyeӨOJ _)0wn_5G?};w4 b?$_&2Zw$G3?d{~%va?k:s?lo&>2e ͜iQhdĄL@ݥ<-lw5arue+[ UBi]0\3n6X폕z:Q6Ɂ* NK9a;P Qˬ$u=6 rwčY/ rA_p-Ϝ[BpjnÑ 7=wFـ-4{[]OPYL,+T+ x%v4 µ 95v_Z.}3_@φ JMDtGsh? Q2f84:Ap#z6:bJIOŎc1XJ? kEҎʁ#:} 4*jEnF7DFI"6ARéx[89 hkdA#&h_\mFkx67d%4 t@%uF 7P_,"7! fY, }5&PbPj.cKJJApB\υNX,w\W̌r_`9(B0U 8b;6M Dǖ{7f^G*m8"eYp)I`BYE3Y܉>e!Us.]98\P#A)zUn8vp`_*-:ƴ n2I+]x΀DI]Z00z~u,7 1Qji-,aIҁĤizZl2r */Bz%!lj^OnR{?–o#{AMnYQuYeh`_z+:NaO~w[Nhs| MDg4-QKFpqֱ-N)y.2=Ji_d$\t@Pz ٹYH/ȺG Lxڒy5oa̷ĚbʴUQ1PtϹNiQ=-"QPM9L>C67 tXbyF-spǵw)Jsϯ*ve[ 9 ~.O\”Te)AxPzxq)5PSԱ>hoIWwrPhKc8Z7#%.8'Ow| Aµl S) Y}HkֵF#>uy: \g}^gwA%-5EWz1Ӌ-MB+@>[A|G:ҽ2IVg깒nIlPHo} 1)55;QfL-B*g|Y%Nx܁1'vxgj%tC_?O)?#eWQ>+Ǣ>=`-V>==l'-?'ХuH1ݐT{-=5F!ODKacJfdb1!d"jF4-u@4f?klaR)w|/Fi+m*Q#$MFO72 M^PmԛLba͈(4>-rS;_``盒n;Wٟ>Ɵ[êߘ>b=@R Xsl,RauI< ~*͢V.ǁ,ˈQ=E}JyG?SAijL̅#FDn4Ђۚ=DAz"IQ6˟I7!Z8Bxե"Q.5J3eL ʡt.=Cn²`Ep~ Yq*݁`m6gF& H1bas_qowMNo0d30 1m4#59IfYc-L$SܡdY̆ #^ӌoR~;DmI^IcP.ksƸξWۺq0 ;F~=uV+cmʂA=v/2uaZ7kOLFFDQ5>vYvJ&;B}aCF]wuv)ֹ%2TQs_cot xX" z4"2$(!E#Q~Fw< $VߧB .bl7ئPS9A8VL;Rk_ݴ`wtn|&a/XnlCi,^֖U(^[(с⫂~W*V"yX2 Nդrtz' NՖܹr>{M=8qD:˵Ct06ŕ8li4y6 2 #eK]qϼ )_GX 9t$wL3`Aî?^]yr.|<%5j^t/}"LQ[ܳ5HW{k;^sǕ 󝅊7{kZԲ DC#EPo; !BssLw~% do;c?FJۃu F ,X?SHUŽYɂ1XLXWhE%Hcui^lًؖXo̯&Msn2z \9}51ށy,VmecWK<՟\ɭʢ ~Xb.S/+ZNSWg|Hܤ7=&$kc\(͏K3?DbRQaq6n8}Z7"vTBN]*USS=^2f tW}@\?܌ꙀD9qPvJ^b0(L_g!\Xx]IdW-Kuf)4ٶM$* ssrnU]ؓk$8v=buBu~^H jyjFl)C"!о֑+m* C(f2jXo.T/rk/O/ʆj~gWg|NUCp!M7!ˈӦ=vQ ݺt #57xA%^S"uk8$Tso}B7V^ub_YSk@.sW)o2LӉRѴɓ'ռ!,ɑQdZ/ ` 51sU{Fwv^$e!R|;[ =!+ Uj?wVt7Ow/]x.b6tJ%Ӡn &8$FDŽeg\1Ʋ;յ;:˒m!2&$ULElӱXBI ֥Oۊ05(''e|Uo*q*V':n)uN8;_wР/^V (obmϓm\hk^'~OFB?w"n[hQK<*ӊpJ&sqWy8~HkjiD6ZP 'n\7`Ac$w|ٔ'jeQ"*)Eb<X_@=f|Gi> endobj 15 0 obj << /Type /ObjStm /N 61 /First 474 /Length 3010 /Filter /FlateDecode >> stream xZ[s~RSV @0ؓdv;48ξJd%`E)kL*3Q1 LEfZӒ;0)! Z3iI&-FȤr&df`MX1)(`aLp/BY0+JFfLbif >Q`*BvY:<` 68ɡiChF0/<(XP`. bf͢"_ 5#^a, ##iK(DRhB8 1.ԝ@>ΣG~d(;|w4iOh6?5}cl>u0|qd~5iއ6Tf[WyP#ubԼNUUb&x<.#P3~Z~OI_5^XB+'jĦrm,hWLK޿!)Xh7VzNqq}Y&lz=>H^9^]5zyQvT2EdШopg4ߨ#?ݥ}S?5,h>Ne^u~^"X~U g2MAy>#8u2ŸZ7W{AOAWEo<2Rz.W01&;M96Ah /jP̦|t1^A&EtJXIh"Ͽ< m[O~?RmF75>6oY<% vVkV=Hn8!U^zcQw>qȧΨ8R۪;)t͈T:Meu,E..%i:MXNp.\ 'EMP> CP& R=]9LtM"!m)hRj]D l] k4Ԃ$g*1gL 7?LQ%wj&];I$  (LBSXuJQKT t ƴ!m(a]( U]Z* )mS2:TEJ0ԟ呵rIJn`SF^^-HqC5j*}`џF6x!=Y]H> QT_z*SeشGbRMǞ,I;O:#v DOm]C:Hڏ)ꅾvfuG)ki\7[f#\}וJSJ-ޫVئ$- %~`t4v`ٻW{=ڑ7,.bUZRnߔq-_澇:Š=^ J[:\zbL_cǏkK~/yů8_jc>SYG|+X#7?<{q||O6W~c `߈&|M}xصlb̮˩~5ߗ S˛ '&zc"?fԫ@"e(+>KmwO2FcT'atv#jٓw39OF(OO{ow>\w͋/ܲ@)~Ffod2bN<fC\11)n9b9Yy-XԯY?#рRHO2+W<}-h6N)e91HzX!]/6W6/`6_[A}R}C~^˒O@\~tͫWR6e>b?'^S뒻K'_ :2 ui483ðV7a&콚D~櫴ŧ]}V ~Jh楘 \]|sLnFLU?;{B~c`"FFx wNBbk [eWG/f33C4{RT{U_DyHÖZِmwU椼{ԢMP?k%(~5L'nwUz9?mm}Y5dx !,lme[m+ x2no5Nsz{ۭS}˴o[6pmN-kdb-߁qF6o4m7:LqE4l˥mցe{j.ĻrՃPLjnqe}lzKooɫٚmLr{lYF?ЯEf0O*i2u;+Zv NV[66J 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 [ ] /Length 248 /Filter /FlateDecode >> stream x%.QsOkV&Mt/b-[Hx+;KIBXH}p'߽ I UIŖXyQ9)vņfjhHxmOٗ7޽%ZchS$bջzO$E8= ><Ő"#bL 1)o&/\3k?Γc/OZ&?\+ qZeD~/" endstream endobj startxref 168208 %%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/survey.R0000644000176200001440000000437214074415512015022 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.pdf0000644000176200001440000040451114074415504014612 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2465 /Filter /FlateDecode >> stream xˮu +6#^7"ɂy%&(o'g(QMvYPΜ9sޏѷ޼,(L,c?Y)c5{ax5non9yͻ_$Idl~^B옄Ll$A7$aMOuaG0 'dbYi")0b0CJfW;_D"z<ʽS^X:^ٴs=@tdBယWW,Z~}[RkjzGV-w8qZ{nT: u~&E(h 941sBԟyxͫrS z]?vn "ߑ i'ݱ~H<&h#4b_FDR³B"^$퓵z'ވIo_;Lc Ѡ!OAIWGNK"CGrꊱ,<! 늢ah% }Q˾hhH~vY")cBrw;$(T)x"MID>?sC6- 1Q<+}D^;" CiE/b"N! Kdi.^N)%@#p}fXNQB+=Ĺ=]U'fўR-FH.1 V 쀱$~1 6I$gIx؜O䵝0FC*A5kwST"|j!¬>QcP uEPmd['kw5(^u86+`EY,Et0XwtL Dhr\w"|06hǮ UCd$QalrL&? F%@N#> ,"3R~y?bVGD4m.dfdՋq yf1aWp:EE̩Qum5 e%E1)$:HWn [J8 )C8#cȳ.f9!VA 5 ώ%ᛱvwB$4Dز̴1Pdi!sOm,TRPg\[D'gMR=TݔaĿTw~HScOG1+/,x%zKOi5X3?ׅ+ 7aC7hI8 %8aP'\,Jּ i= )apI;;횰tKqŽtqBot7C2Sqj=jO/( ݤlG&#J4[ ޡ$80h)wm 0mW*^-[xԍ꛸ayԍ`/ G}hwҡ(49v:uļJqJZU(Y!0Nz7@5PʜK-/?5p9~{VW ߙU//?2=.[JCdoNEBD-uhRJ&{[ިLGOӡ첗C -m=_y@Bwq3GwBږ@| ~!0IAׅiʵmFZ{ŵnnJ}$Kkƚ wQNT?E!^m D"9Yb[II"]z(ߤE)-8 endstream endobj 14 0 obj << /Length 1700 /Filter /FlateDecode >> stream xYo6_ᗡvg"E}umM P,:`8NE&m쁐EwwTq|09TE\ X`29|3ZKH$.C%qF+L_ELaVvžL3>`ô!Y^cxm # Ԇ6P +kp/e)qP _=N>2rԠ>H[b`>#31/FhR|=s{xXmG\o,mٍ E}|mP&{h3c`6$4L_v:s偎+ܬWC{c4*8_~s"U[C"5ZU644ZzԮ-*cmdRLexT9Ds>`(όz2%?ź=~ߘz 6OKeAx$h'>#-HZ!Ӭtg4z78υ#*<9Q!5D h LyGenշ[ yqs͓Hٸk~e;V-ǁGQY%*|6Wq|^`CpA,zynҊ]a¨!mX|Tϝ{7:vp4f!Ő_aDxM/oޗVqG+Ї/7ğ+fް)kФJ 7|.ǁKЁZ lƹɼ-u_gӯn;5>B[F".WL9vYs9W>4<>z|Oƽ~uI$InO:>@ WHE%mesG#0zB^HTi6-ZAn٣SXȊ|ƺ Jkqek iR 2Bv&)sT(("Z0K(zNk%Vq CVmORuV@)Ty`p YK =O q>y;r>.=aC!pKYwI(U-6SAW?E.ӾPPd EܥK,PUJ0[f-v ח5;W7yX_?ן|7 y?Gd_t~iHqByʔi5R!)BąwT.BNG&Y R2N" ON&O" endstream endobj 17 0 obj << /Length 1548 /Filter /FlateDecode >> stream xYKo7W)nvuMl A]+٨@$'q~\)Jr;qhș| 9O'OU:KQN&4(b׃!۪mVkQ&\L1ЬU?~+h=eﵞE4As/"i ՝O'Dy.oXQ_] "j\4 R'r {(rQr͠ N? dJ dٷ k")4_Ќi4_ul? Ilј1b (9hmeb"=oY}s٭duQioZZ"J6 {.Q"#_dqlMMko ۮ$J=<8öZtgޜ'~0] ֡3Nv+`kS|e{gZqe.Co9' vūC}D4 c|`yefK>CgrPQp Gc|/EB}䣚NRy$JR6%+.;\|DOz Iא6 hu`I9'Du#(.obA'vi12).Ě垀e V `Pݼ̈vrKYolƽ: L0ezV}.+hSz2Zy p;~yN0aneֿoSlA@U]9'B̗66j2}f;\u GVpwCFEQhػį/:PDW=<}RJ*@QXx9 _́KvX95owl]un~M[SJw׽nxaV!J&ShKceA@GP.1{&4E?) !i= L }R*~ۥ,>_n߮G͐C{u~qQ}E]_~ﺾRܘf_3o]߻/أk[,[?tERYYLĉJ /ռOO ]t endstream endobj 20 0 obj << /Length 2629 /Filter /FlateDecode >> stream xڵ]o~VNN g+& zE8yh (K8I4D'@~{swHr>Фvgg{fgW_~WuTiqu˨,vQ?gdOy ^xg0L8XyfsDH< !)31N@"d i)I,>7x:@zCO@& CDO]T' 3. (^<0g4b y[ D{,ůh#Ou=a [s([[K{:C^:j=z'f #8+ϐDUE.+R@K\Ba;ΖddьU&q ITz "uIM[^(9afFV0M䄠y>k< 5 iVM Si 0i[?QL4{?Yb$Y봚]#@.b)jX]#0Ifkfr[~ #UMfكl؁dD`Lh% @0MFQoZjFĵ@Y \d VL! @z2Lb %T@v|]~@B)笶[r|D.Sg?.>=4=.ACwG~enͫIi;`E dhmu_S@F}ByU^: r u tߣb tTٓ˼4ՑߢϖB-rFHUZ[1$Y3X0mv$d DQ8Ӌ4#<%~lZ_SВ5)^4t@vugJKq|URlrr繥Ա<=1?s%> 7ֳPͭ&asG^xE'1PL}3 kWFK"LWn\IOIIehLpBڽ%0d[i3/Td K=4qܳόgR(|# kXhp. (DLĥ$Iᙘ LI&\e{ DL˄? N,djh+tD[]8qu@ oL1*QG"6TUF!QC> 7:[?:moL{G +J;TOSL2^,u+jM\I5KЪ  JS~B~:R#oh$sJl)׍A\Iܐ`1<4} z}9NX &{Lm?U F=0}lx6n28Y(X,zMsKGs 썷+`lݝb7pZp*┥'>WkAskN2AHƁ&DvXAam@y+8qYLX/rB*!F̨4QN@<Ҡȍ~EV%J=2eJyv z՞z|ffsc#DCMو:3j_Fo!l02} 0zQg~V?{ZRl_$EbkZw. PۺA k}y6zj^;Յ ߔOT.z߆-B25wOҥBMцςHvscfj-+{jlq``zijÎ~&Lsv bF@6_Dķ'>Inb 'e)h \1Ӎ޼/0PO endstream endobj 25 0 obj << /Length 1832 /Filter /FlateDecode >> stream xYmo6_a &7*z-]a@3 E[`l˳#u([AL{#=|M Ox29i&$EE<9Ozvʼ[f1SFtGL\1uNJ6bM |aTJ3;"'&ж3Z^|Ų"zm%Dis֏}ƻѦ9Bb T>YxZ ͨ3IAd]]a  !:" ̺d [ غ15^!d@h发Y %ըA>;(6׎ּ̱5ҿv.l]6-a*?L&I. gve ,.#&bxRi7y,j' :}>-ם6zΞdڎ6VslaEWOڭ=:|b;|`:6G3\HW]hVe/r{ˁcs.'d/Q1?THt9zf_!K,oU[yYAҝƵŊPgy}pu_eY;|0J7|r9яp<L?o)T2r? 5#p A-;Hdho7N !Y_|jH 0D%HD #hD8@"&*$2|rştN #qfhpD2 u{`w0kDY'~z "qa1"I֊*Yg>%F$V jths]Ux'y? V]uEǒ ]'W^5{i1p?VMVs>p<{\F|k +[=U{MT7cዣ&*׽[.O]tI:[цKA=:S#>Mg8 k;Z pȫ,!ߏ쮧̦ri./yJt_ Qp0;!bd b V XKRuǝ*psx%6՘1- @u\|ky`1&i;MkPeڵR)+Wn~Aw(+ ]⨢B)-=|xֹ-03r Lwya$bs)>|ٽehB endstream endobj 29 0 obj << /Length 2125 /Filter /FlateDecode >> stream xZYo6~_BF"ah)A xPl%1j[ěo/98$Q$r4P7>'4L'gϼ&iyaLߜSTZjY8:u0Ϝ&n^&\j[j~_]Z$0 N8s4ZZx5QGА&UUImL!kP-"2fºK)Ygs44*u`_ FD4`#Hr2W*RD5V"{W }/HeCan FP1*ʝF=gN=jq\wWfA[rrڡ.u#80I[nn-( IR-j]p4lK<;LE AY@(IѪ_@%3 ]͒H/ ϱj:8sk̓?Vb[]e̖QKkXyk`}_#(59"0 ^CGNpN2h\&`(w:PkˢZrrjr 8I!~ ?',8K{yn<B".G~{{hl7MS"uϙd8GZN C>1r/S WЖ [%;?OF~By[UF*h"S<Cn>L/7Hw x~ ·3:k=NĹ_JZ4G{;c 2q[cҲvіBH,Dd BqtP;]DD䃃q@]x`GNx"{tzb3k &ԆNãG/K#P8p<;f&E&0M~Ei*zX3o>!/` endstream endobj 32 0 obj << /Length 2008 /Filter /FlateDecode >> stream xXKoFWAbA) EK]-ђTE¿;ߐCe;v=)gwg7ώe#D%Q(/ (ѡxt::~_Na$o82i4k"_iŖz2UZK3V]0Y1m g_[V[qf%$ũu1sܰT۵||Kdm鏣iy:7t 'aޥQ( jƜ&Μ \X+gܛL doJ%Wּ7ʘkk)6h#eSm5XlI]i(6Wmj1Nnq1g+ r4 CUPhf6Й6?Bε;slP]Y.OˉfU],5F{qc^Oj:JDTM9a+sJ?s'*{ ?:e [Hp! n rnh_esbs3ΰž&3k}G=ubVgyf/~_+s'OP9 tS'aBv*UBm©om.tAsC A² Q8L!-+p:n엲M7"?ft3,i.~q;z޷c{陡GCW Hh?{NVԺ-D_Nww.\Esz|:K1]7$"lPBc&@{lI)#(+)y`@z؀t}KAF WAtkTh_$|XݝHם!-_\iu?6rl<͓Z<{{_~ endstream endobj 36 0 obj << /Length 1923 /Filter /FlateDecode >> stream xڭX[o6~FHU"݆6@ѭàƲ5i>(ї$M/sx{^QUNtJG26vt<"iƩ1&9^r BkV8qˤd*ؙC^~'S`%/h w %Lv\ r&K{>~Ց&S$ݠ OAj`yfm1J j/jhZ!6(+ioycnsR0szM|chzX2(-g??Ee$\DBs9tђ5Ia{@2U*& K&v?y'zd 7bmyo2:XQ]w06)V<@S>g㴂E4:Kv~=}Yg߱='OByC<[N;v0Cy|h\AAR^o6ѧ] xWG>3 ெ )o"tEUfNzJf> l̈FjTaP2G!*2Iz(\AsJh4ddpfЌ0d^F:6"yڋ'.n I)Vڊ&:ĈhD5VMoID%Å-_K"4 >QDb-,DcKtv-a忌|G(i 7c9HR#HzQV F5ֳ.-ojEajϼXDX ob8GՊt='5)- iouHf$iHE1gƅa`Ws%{cutڜƴ EԴb]IquidOz9#_FCb^ $v9Nt6OP@LCOYK7I ^3%Zy>]!M=+Wu+fvgz `ʴ.K>uɳ RedmϤ'.{aW軇zjM_[(q ?Ä;OOXk~Pɿid}ˆ$೐'r S_TJכ:T8Ҝ3M|o~ * EHmM/>?IV{ T\iʦ-_Ejnr:W)& < jnn~"/UVq-S3v69“Ō?oXT.yJzB^EBC}>'"Ь%m4-Y[Ќ{{W!`\JF&ᆌJv32.dJ^ A>h]DC@$.ڱv@i2|i8e O%+3Wn9im4yS_ &9~ZB:4kƇ-YxY /ǂ:4NW쇬KN@jbLrE_v"&vkBj~9DR^=CVU@Hp(g3 W-)Š0N!g\o騤,Yg K5y>s`\F ӊ+).6p̺Jغ=vqˎm9mW{_7OgO]wQ Jn(>鼋rח`wL6-.+T!sYwG endstream endobj 47 0 obj << /Length1 1696 /Length2 9698 /Length3 0 /Length 10784 /Filter /FlateDecode >> stream xڍTm6,ҍ=t%!!03t#)" % )% R >k}ߚh49,y8̕-Qry9y0t zg(&Ar}ɂ\yjp@D"nn!E w%@ A\0d^Pk0 `‚ P0P@#Am8 q/b6"\\ N8 ;jЂ@!^ WƉб-׆[z!G= %f/Pc褥?7^h ;6O ?o_/S 0;&y2^oCwK9@!<VnouJ5YPy'R {V1{( wT@n{\,8 {!``A^G>Mx5.NX <\2E#aK?H =2A3\!#Y\l<:h-|m/Q_ \ | | |pGJ[ܐc>o)YUV QhTJt wNzv NnB8= u_. Moi~/yv#V7$l7ZWJ4P+'a-1Z剻NǥԈ8N2Oyiʋ\o*z5HC*8^dwy/Luh> VtP@( ,::~足q^Ki`50Ntʖ,Z]/!0!ښS6V<4 {N]2 } Qu;{zmRi q-Ԝ x8,ՒY^AP@&Ѻn&w`Sh]3ᠧJ636m`BM7}5vPFѢ%ԆN̩oM#yl2N +U1?nZ8'{ë3~4k]˕NL yn^:pAe-#FuI ܹ+0BvG)f~$Tذi/aęĭ.|BìGXcX5FqjFC,KM[Wh(da-e:5l$}F")<=AK]츰Ԇi'G'0Qi3׏ )$%l65jCx^G2jN~ !$[1?#Zh3LKi\}mc 5?|f/I`èXv+v 8&G0⹅]\1VӿgJRAøcyɌt_vn> HIc,IK]@Z4F/ҎH WL\.5DAxA,,>wNmA)o{VW?#W_NJ*bif o|XcrYYC#KEײ=TOZY+(AW4~dn")-n{3q$ee`8n2ꫫz)(36-IV+_ bT9vw&CVu#ؖϛ$VŶ~*.ʈM(3 i>rb^IJ.>l`85]: o ~q%zR[_l (KJ-$h"jٺ|]-hxz{=FZ4uf~}NOH_I~rpCpaIjUzq5Vg_]2 N4 ּrEďv>Φ=yN,2ztiSK0U$>ZGۃB ŞK)΍lJ-%~feFOr jC 0 WH:$[$rnt/5 ^I so}Q㼐oig99AFy QA񧾎,֣RY$ {3=&<2Ici9'\f4g"5Ykg+${~HV#CKzĆpnP)?EZ13`;Tmf*] 'GOx_C}Bu59: Su{d3ve`$sL璐?-;K-=1]URVϑ|k +`D"{7Q w?2$+֊@춉}TKTåwc3sDF>dfT? ӼR@@ݬf֯tξnc#Ե=)q%Z.7HB1ᏴJ$7d{z4ӑ T-vIH;cB}ʄ (q AOi^Z޳HV!`TFciš!#'p`WpyW1w`*›P+KJ$̾L%e.{ , \^XUv ][{s[~?2#E-ic VTrp)g[׋[*LN:b#?Rf0 @Gp.t4ZEԻ$^+,FItR=(YYE#Nb5閎p-"^&.7+sēklT?}ĭF CJ_{ \h^.}ᐌmle #I.-̿q+ԕQ9@w4K $ח+sq5S :W%YR\hBQi'dVlsOb#MҍrHƽo#Z0Ʋ/9,jɶRe K)989;AyyzWxGa㍆,,'s\L4!Kirs W!uB+~ߊZJz<.r49'cnUώt%٦EvÈdOY;5/|>Ӟ T!~M0T8_+Q#U +A]ؤ@[dصbv+_ove&c(X346=KZpMoYr&3Br4EbS ØnY6RJ`G3m?C.i_BBƙ<;<`mL[ޓ땎;ǒegޞ&! Tܙx;&A?,aPv׸pѝܹy7K@Yn)s^H^'ca*v8si!g(Gˆ2A"[=K~ѩW6}~@&oߏxT8P"B및i+e;~)$H$;*cy?pұ!֞:SW$R,`ݨ+[_ MFNN?!I2s~T#Ǡv^SC%"^"iq=beIˍf1$ep4)$~J|b֕9q<WP30Ҏ܆DE*b崙SfIē0a2px-{DA)/ϼaqPHQa@p|)&t6NOL@yX9:\+.U)c#رlIO/.cRucQO#kF/‹v&wz[\;nEoE0yb^`;$R c`'#e#/g[voM`?=a-fS*/)+x#|w(3od {ZF~abaЇ;f勯ۮe`]OލTDf|ADEZZ޲ی6?g?p?m_(]7 kY]m(gkQ'aFWSW|lV -K0ì2jTx\_G^{$`nT_G}w.6%h}XQޟ3h7 14NμUEC?_I4"'BQ_;?&$XgWrGܣ1"x }xarnsUJ8t9`:UFŶh9K&Z~쉕c x'-B|xH/{3WȵKV`{捕C~ Kf5W۟8q?{KJPpYAY½cAy YGd AS#LҲ6%&zྖO a|%he(Ù-}TBVe-ҪHRmؒR諠PcMܱ'$gIt35>T˶;OL; QWKldNf. l/߿-r-[ Ab ޷,?/#͡ 0SΟT,.o qfšP,H)DN1`̎ɘ1۵B}@v). 2mv#5UxUte*e ˆScAWNӀMMrC;>CP` '$ Cp]7ݨzkDF ij B1~8 װ8,|C)'_M,]G&b(E}+b{ ≢:n,̧9Fv ~-yHH$8`8AQm.bsxd"CJ^% M_5TnDZ܉SJ2j܎|`mʑ4 (a:FrZ.ޛxG|;ctW2ꢡh|P~Unΐ~EKv7-)n[g*I̬@PQoGz,I\aI߱WT#4Ŵ%t:_QPX1E6O#U95?XsEv]9bu.T,Ta|--jiBb(8LҐikB]!ʄᖰK(1|(R@R.8f˵:_ڪmvʍ'W%oIfg93E`4A]Dא dɧ"al^o#66HGyui yx=q0W_ }BE3uC>$W5 1Qkߡoi$}oyZB6*WٍmmDz%qqM1Gp*pRRI 4tTS]n\MJ`}ڹce/gfzV4G.,o•ЈC|zMܴaۆELHϿW>3ÂQBqb\WOzot@89 2M$D,_Z -S+㲔џrXsגFvT/ tBn.3L\y4Rq f! 7,ƐcՅFaW_Y}n S`TL,妽/mJ(rL5N>t|MW[SS@J7}z9-&z[i{Mg?Xy6{Nӹ qK`bXkbG_z̭beJߦwֳu~qEȡfR\JRځ wvTf?Ft&'Yu3\jԁy3v]Ƿ]~'28g'uٷj0{=Ծs8~ŖɀT/x_o>gD^l&$k]Xз8,+NU`6xnKZ3HY&2)5fàhRPs)0hktgnTr OilS 0hn(4teVz+p4=>b5)O4$]M.߹c53ת6Ε䅓Qw}ҧ}^yTy:CqRO84+z'McEd1&gw.Na{XV;6ln&!xWZti|U5 =5хM%-3y |wV:7*ۚgi/oݞ>T`"R)3ȉּVh[ɯ͋.{mʷmb]'h*_u ~ ~ 8ͱ*qy7^DA)сQySf.qY&#q*lD; *PE ᒂOmȝ4R_G&妎d(_ R_"wX: n|'{u.4rȺl`UI`$~Ni N'4F=@K>/$v/^qitw\Bi 8z#gyǭqZzK%KjE$'d5>IKXnm's5R-1lgcI@HԬ9ȰsT=j̮W 6tlN[8_I=k/P-:-P l! $ '&؛6b۵0MĭBЍLue\*`kl@Xc=Hr݅tHs2U_% )66bͫb,HR|_*+ڐMqѱw%TYRkA6/qȽ۠l!?4Q*Cnc`U'Pvu>px&n_e8.3@N)f,W`y-l Hvi[]xc*Ja!§[ Mu.? e?jLXCBuɔ8M+2P4ɤŗOf\8z{tc\ǵ}u-OZW Dԅ1s[ɖm5xB ) } TCMoSfo>e>T\{(uP۬tȎCY`|~,2Yg,9 ]pjQQ a֕0˧SO}Sx/$xoEAʨ`v$BtHRd}?QrƮUH}Ɲ;zcM e 6uV2x!AּAqslդx%e-eGW횀|ari׊`sS1XIե]%Z=m^b-|. qQluX{8-#L&gDiG$`Wt .7Pb!?㊤iCOԦ>ɜ(S}q;E'U2ػgOgp;"%쿙;W |JsN*4 ʬWnBxRpsԸ7@pfi3~(V9AǑW3}FiO[p`Z 2eKylyO[fISŻ*JF*?cbTbb-̾5\WMc3Q6C$ Xn,hsCLynM uH+[W?J;Lڍ՚藫w|byW2[r>㸵edY+yY.!}4{p(@ƄwN6=|aT fۿ>N1;AլֿxanC5B1|Ľk{QмcKuH5ޡ%$AzU%0|]veSPFx} Iӵ@ [KQ}*[{<:"'P\NvH!'(YH~kd1V(rNӝ^K+W 5'ggm?#26N?E&.I(DӤ8\( }9\d8荤3|cffivl1)0seX7nVz}.{o'F3KJEUYP[Y87CHwG={L%CǦ,~.&YX;=P2$=eN(F}QQ!u̠ }edE]'> &&HOMIQ)h3Hip{O^ub'x ; cŐXWyoqLBZwQ>oL_ٕo.9TmN`ZS ^[?J b]y[mw%'sup#59amqxQ7^x}2a0ok&O.ч/5~;{zCOn^")6iLd-}`< )\ϔ9 m{/?G"OZ;s(`!2gKNcP| q! %͂ 6 F̆)Q,bͭ rf9§`:iV{TZO$UftϿ[i* tn~%JLhadmJLF 2޼p+Wt֡> stream xڍwT6ҋHD'{GEJBIB ޤ"RD Eҋ˹k}ZɞgfhGxL-xe?G@/Ir׋8p;i4j 9[!sWQͽ RML/-1."5?nyKu,4)p)b8LFxev?6C3qES z,K~fé%K, * +zUr\~??;W\}@{"i1iSv:d}\'CQl4'qNFu`o%En95~s?zeiE)"Rv;y$!m3= *]/Hq/UQܑCwsVJN6-+ͬ6|D~5̚X&`φwɢ7X_22x}iZ][~K"ppM>[.Ihb .3_,z7rpęA^mҥ>ݾn݄'f鵇+SSMAwv/̬&Lp.'&1g\]gi ׯNeNxgVl J i]zYhOA}̛ӿ.XSu: MuIqٹkWQɋ M yL',.K@Z|Lrz "\ߟVS'WT7u=3=o[\mtf$vXȔsx$gYhp! #6t{B3]CĦ*&z;(gS9\]m\-ɍ ݼ-ыC#ѭ̛326Ҵ8z |`dp3vߠ;*ҶdL p&H{& h"@|)B)ޔdߢ+O7;f _?ou3=sSc8K0JUk/0pIzKUZg$fE5p|=Tٜ7 1K5= [I7ӌ%)vV 36Xlx'b{QpBC̮[Td }'ج}=1/\D nr흷}Zofcͽ7iVf,1ZeY1&'F=५K)#y~)[cRn̗~uaUDAT,|.X etG\S!i-SA6Bʃ|^=FWQm-s(WP>I*3sj䍏0AI~Yqx2zT!*|rυ0dtPgJo= 5\uP;:7oX˭}b|8/,]LQ_(}w*Cc(^DiNphPsP([fM]Q| 1M2R|骹L&\Pmy-,qKl NguEzJUeo&x *[WKTiO^B7HiW6f G&ej> f)IoYic'N`Zm1@ȮP*$W],8=а^9Kgp,Zոg5Nzvz|A:76Ѳ.&T`{QXoGOzgXrFZ4%2s.g5Eͱdh]+K$5hPm}H=E3 fYJ8v39`UlⶤGOv/0l[r* N6X%wp4k={*O%42Nb:Q< >ș"xp:脦:B8n'TnpqRX%+^P6yk+ܯ&M-7_=XYvxu#I62X-Q6f"L_꙯(Tcr;Cj&DESFAWEn=T3LI'Vipj9]Z;г6/)5:k$7M+>"N%ZE`9f^n0fK^#l5ߕcH5}V(GӎSXe^Nck`r!3vÒU~)Li>5xI{QmH*L\e=T+9tu)*"FdcyIQokBٟol~17 Ly96/&97ƠfGKS#uU=`^; I ^dbcB3NIU5AvM/KH2:y7^޻#oY"$ ݾ)u^Q (j<[ureA0U UEu4+n?Jr{>?IѤOr_! 1@ʸ,opڎUqyߒ*?.ljyLגeʹw% cm麝/g+OOtbnBORsۮ3FQfj>z#I-aFqsFV\!m*͈FJA{wȞIq!9VJ{3iλvZ=Kf_$U_G3CfO2?f@j-\eok*9/ؗ̈?^|"n@<"iMy^"ejtE$h 2ϓFvA1/sMQD׽_|a8 $&NCcǘ)(RG$w43=0m!Wf]މŜiׅػX$ܽeؗ(s<" h.sr /"OnVڊc+Q9`U7X_{ȓ2.VnV︢{*)dГ8~2%:EG/U9dEjlYbыc!f+̀;5lg FKaoSӥ& o4%0HCsɢ{.1YR{8_9n1kK{$TdK]$97shu>k)}YZw ]cƲ؍'h@-;1x'|ՙBv{fNh BK5WP=J>@_V|HMH8/neV*^;4LZBBa[kD 8>|?TP9(Aop3h Sjmd.=@lKcʔS{ieS8zfkW7[^toGf"`űI^>6*_$RL݃&ҒO8n.),NCf-+dIϞ{ 5Yc2.h?Ԡh]Jf8x ;@vBnr]4./=%/<(,Ա%$𥭑aT0FF͛B1Cl]oK"nl{V\=҅0CM|&e L^ Bo= ޝ\WaTes7 ]oB*Ζ;b>p^\ʑtw@@cި)Z;H#6O0RVS^MY5a j:̤m>K"~.W+y3wN;S9jHYk0:YK%@4[IKXr|9K9/yO> stream xڌT7]\ug۶m.iٶZXVmc}9s:+ e53{  #3/@LÅ@AnbW@ tr@ h66 '/ /33 xnVfFBԦ4."@'+Sc;%fojt/ j~K^&&wwwFc[gF{' Az%@ tr*hl 2F ?r5{swc' $29<\̀NPp<@h?{`adݿYlljjo`lieg0$]<\vf8ۃ݌lM@gn Q ,z+˼.cZ@LT%dghP~KG|"ff]ngy>?6fm?s*t^\YIeQgJt}_R63]lTb3y'lq,\HW EyZ?2iVj|(T!9b;h  5;غ5:|tT C5 Y)]J$ n{ބT]ԍĶ9Xgɳ;}8UB!aOXڕPWc)! ۇ5/_E ȼ6zmLm{TamqDC|$ȸ^|5lYpiXz_9\?%mgc?Qea%Xoye ?ǵT9׭a'_8{L!b7PAcUM1C2? Sv]OCmgz?K9Xr&O[F:)"zNLvL֥Ǜ &,PsgxvNz :lErT#)R-ܧ-^|<qȯ?.yCBڐZ^za\ccMM5W16h^kne~vYk{iw|-Nr,lOb`V .uSӾDs~D߾+e|+9~3g^'R}Pa:͹4pu eLV#Ǹ"{4DE#5,m!+*ӎ@DL)Gê sөZh?#{(qT +3eI^'5yoSP}YՃk"Zݦ[V )%w_&jEmp >wVνvQY\P(#JA\F2Qd`Ά<\>NR_~XyH)VDw-,M~|8n0egs+ j+I~@tl.8'^G֪ key6{{)Lk^|n4oA]gK `Cjl  }JkTa5M3 ++" P<A4 Axksֹʷ4r '[3d+;uHewο.31M?{!‘Gy1j61!n8Z8+3LVdR;t@@il>xdMi3,u &4 ari8n5ޣ n\H7[dkHwϵ+ #24"^tk"t=Kx)=O +wїFg&ȳ& 2,zA-D)羖@^bUrU4VxnCݷZQ򽪢6y:ټu _Ζ1#a1bWk$/}b. [']3J:;z0X3J#eݨLQe,K; TÛn8J." v)QBІk ~9q|1FD5rkަ-I6*+ i:Úb` Z@Z azTKP3K ZVq-HNzʗH`b#/ƒ OEp<8Ph'jҋEL}2KpBu B6Eai8$نrpHeAC \Cӳf)R:]׻sS "II>9{ -œ80-n9!z]@r f2&oYðiPP֑*#⁊yl G ;*T# au}> bvOp󐸴ux3VJ c\uuԪ%^>ʔj2+`<ԎWQ@P)4e t[#0[2fm9[ߵqg64f)ItJɄܧM&s_㑒mR}*s)bm-Āy QJopCcĆMQ|uWd[Q?!/–[ HQ}!~:Ru)X a!3]42^ A* ٲ a7*Z݆_'I0i J!2*]=WȝRV]}M{8|"c*q7[Ft1n6ĸ\H:+l \9 2aYJ޹0E nČn] le0|u3/$'|, |``UJ};ԎH)Hк׀՝:Nnyb̈`U!W".hH 4[ߌˋYnM|q}SK AU+3&qJlR ۂ"p.􄒡NykFR.icIIK| Cc;N ]W]މ,FE`'0b~%N3ϩ'#|AHHT?F%r OCp}k #w}=k5Aæڅ;Ǧ1ѢxTy]G%G s;0OQ>A J)R V;˅|7D52YhbJc-$Ǟ>f|ԵőŘNlkdT:jKIG6A7v!mcW]@4k?℄I.tio"\aL./ }7λ%Oydo ˲ &^0K%N2mtN.qt.Uý?>^F&(r DW} ]Wb.9['e*7/gB`T'w=8fRstX_^6 Zzn-}}x%"^"vD=PXײ4Qh|/znj~wꋘS N9 DZaB/t$t4gfɻG};DHB|HDtN#U~o JdU ۠ YK,15(o 2EgX&|,B'͵n<50m4[]l 9OJ+RRaXE*t\IόLw /H+!ªiw2n5n*)l̸PAc=@jB"5)~S} lꞹ`kдra#g E8"%NcSQ8=dVwH bHpV{Q{ McɫruG2rt(z0D|gGw , 3kKX6g{dV9H)mJp]OhoalFd1oymۗn 5D^szf ϲY+DﯰMOpfwzĪꜪzu릗#jH\BH{T i[Y},dJwKQ }ET'><\RmAZlm- x8OY=Z8%ixyr}P6>ԨhSQwP)VTyd_YhֿY/L?z b_/X"G2: zOE Y#|q\ZdOQ/h0J1dV͎e'X4.h(%2|S_.U5YC _3_+ fLm-Q$"6`+t k-ؒDPKM+,8Zb=Ei]7*ҨEYPE|wFmZ̦WGR.g.zÚTȍll:{ '! %KI@Tmg!p"zf2KBiFFGX $L|ޙuLb>N;־$& ۤň; o[gոDhIR GV9ˈA5𾱻#-`'1vYӌ,>0kQ? *O=)C)MVsAɱH]\0&."Sx d~ `r%egUUC>cG>]#n5vf-چ ebQr2VW0=m!'utKM4y D8*e6(֏'lZl7 S >CjC4R=3L/w7\9]dk9V?%뎹\6;ӗh__̓ī~Ÿj8w d/(utpzd?΄U-e@EUCRAH&E<3XmDB#^ya{IPN(FoHnI̅zեpugPƏʬk!D2::fn{A]Gm@| XH F:E>._&e ڏh,ĔO{1Ҕk7"JwᘪʢnI 0Q)|UZQK?IoBFHd8%~Е;peŀ/d:Fcl !K&LiU~>vVl:@ĸSEe WWle!Hf2g|,Lq2Rz3%-0> 2 +0MEك6y/@80}3]IŶ %vM.K#벨ЪNjb^ḥ+)CX. ;ؙ~VbҰăY~!_*,:yvy6Z_ƒVhS'oOb{FiHv~MSTsV> Yo LctE tn0<`%tpI`*qN=WnB5xChmcۙ,L$B0EDpW*|%Gu p7%1:H]q,*N[w}t\T*H8oFuyyQ4Zc#9%(`]ξѳĿny X̯8|5"dI+ȴC=5Qٸe R;ҼʴdU/c,mF0m)rBRjO~qo*]IMD~m$^`eNK[n\;i4㲄93,n{[*bx^]T{un; e9|MF1yOz7S+[3/IÞqp 6)xG~9L)e'[2Wǩjm[tq<|Չ>"n D;b aH.ɈYluJpT3Dl}S%,<i+p [|J#0,RO8Å״<0Z"b3,d+-3Oz {_8Uӷpugp{[zk E 6-vi3؄%r#CorM5huZZ3OrYTT\?d){-rq~5I*ĕEaC$^$_cz\N|oHiX=FeFD &?KTCϙWbGaWq $M0D7J8֑ѕAVt;:a^vdZ&q0U)Rl[}d*lLj>zcwjh GzR_8@|`e._-"rQPRt8\vwی%$rZ%qqE-X]6V |HUIJ3ǝ W'EbP$''t>H$ ,+[Y;!h[ӹxJ_2OFpYgu*>o閠ąMҪ d[Jډb$jŢv5tO F\?d3y(A|~@)szQYM$2^I[C3f`"Cԑ;wN_%aS-(ԲAuLI psŴls S6Ȃr m{'EEsL1D0ʹIהڐcz}H++FE}YiXp̂?`>o&-(C}<Ӯ7hg$ E⭚h$MjD8wل:r'̂|icS2J;!mد{ =;4`o>Ir38B_3--'Z6>*۔kSp`IM][P|{bhv$^g9cB }]T3l8|˷S߽nMFuWotԞpa>{ y"6)q'm٘)\xV`[vDP,WJ1OڢH!ya}GFxĄO~݌{ћfDx'a}WRH';8J֡~8|9m kq]j}f-r]V]dtHb;jZ#%yAG7̳0*@dlSʗ@n̉/Uq gv Byv G"Iq*Eõ3S*=8H5~BbzegW36s) &wfji@.!*k_] +!!>vjsf< tCQ}ZC8ORiR$F :KzM_okd3L:s4v"aS*?dźo:Vn5B ч 21=B]Ãss8'N t]=VR,b sG&?6UБ4=oDO'? #P*YOg6Odm5/nG mti8Rـh-3ж,\L-&E nz;#nĹ EF|?v7Gp 5޺n4pxߟq̢ZZ!ӈY[2w׾NC-tsz#-ficf@1,? ]rz+ir] ",zc8=$B+֓azi<Lbfp3ZL> !Ej;L:!0ccX;"[ǟaE767W4Y4W,M0k¶!A7g*d{zpFFutsrf4̚T4AmG=jTЦښYo-v1JEg>H%$d ~ΐPF %:D崦-.Na$_KD$ie #b+5ĿnY&(ekhoI5n 3_@ *u,L]̺nj0ݎPS36ʤtaҖX/~j:P;6^CNҎoOfѕ+I lVv"oTBB9A^ 5zLO]2S找2USl-zz`p^?*oe,l$ցP>sHY׵9?.iRM?Y>C}aӧUWʺ<'T.JPAzM6u `K6WXT[н E/G = &5TH2iUcFjk'6( p[#ijD;-#KbP|$c_B3B[' T7=Ujq: R^EävwK'f^vH"ŀ! 4 3ǵ<ŒW3> StQNbq6$e{$lU7: & (w)N3^ ST>dO`ZH麟s}|hMءA9DnՑ) Ѻ_a^ >)*TzIӄxd͉AH9S G=o,; 8ZDzEڋKOr|C%lOXS!K܅ޕ)(STB< !9ɇBb[s%9>zN$V]8K Bڗ"d끉6:%^ /] Y}=A5ȔRP˅Q#Sp^` DA@;Q} Sbtң[⥎%w(Wx%O[%J3(71ÇV?aI5gXpOai/Ȉ}@Np@i(I i;'m} iCCU SJF-$.C)șj Ŏ؈G8dn?4V5pڬۿ/{]<Bbi}R!I|ԑ-@42ϻdz&ambOaăT2a39>ɣj ѓz#vr]-'%"3/лu^0gj#7,VCO̒gxW^HL19MApZt/ۏ+B~"g?< juliQ`X:гbHN-J\PՊ&LchJ-B5L3b^¾o_zd(4O_&4Ky6hC3T3>ԞOa2jcN(eKi·s00EghȓޥvixMB+9rKiQ2Hï_JH)16E ǙRpr,1-!7D4`-N; ނl&D$qDzo5sB)㳏غgڏϘ/?>9-~ XQALc4KLLoTr4w8">`ڠ,ν^ǢAkw#'gIٯd(C\koEUc 8!Ӛ8 dtU] Ӡ ,F5_u"e' odWY I_<3P;3*EQfEʩ^1ӦY3C\=)0FWXJԠCa5K)KЋJ6|J){ JJ]ܕ'P;E#h)) %mFsǕ%]}r2d4֙VXLwDo ;JOJ 9v)ӎƫ_Ӂ/!멜Y\g@BE::ڲ^/t|zV8?p7`EKf\PVsjI= =[è~ݹ7Bc߭ʵ*1y 42 1iLW̿@A&sj5>7d/Gӊf+SI *ݠ~T6{idyF׽ 綨ӭvl?( 1]ȁC>U㔙, 5 !L98gT{tdhkF:]24 P{{SW(d0dmvsOޫ W~S`T_ z؞,!` "U|f)Z7>W89* UPB=1 ib۰J܁7 m]٦Zzn;6cnJiœպݞG~mYevYgRi'e t2=#wφ(p-)b?a^Ot K:мfKўWɣ ^A R]R ";D ׺"n"8@/x'ȏ]zqk5a.-_QV 93],CU<$eh-aZ.܍W ZGD q)Ё 0JvPuW-!c>X͝}J+郺E&z^sҐ4gu<΃,?Р+'Z@otJjfP/۾F@smg&|Zn)HGz0d>6ٽIjO 2eسpNz!Q B[ױܵ3@*=C뮟}EmhI _xWT?7+>iNY|fj(@ (ޞ>L?)*)8`<7mdxf2pG(o.Ze9P5z8Jws/S *B:_S:#B4po'ϴV/ }1k ϝ|U=QmX=Ѣ i=iSGleOp-fQ*ٚ:- \iu*1Q! XAhڟ˼5#o(Rӓf##dRb)zUJ+O;7cdO7Q6d=2~L#1_C T -\e=,m/<.?O[ѳI0Ɣ9b6F,qeI Uk`P\:CxWu1k(>ْ65@#5.5U BwFl_,0c1~)D#~#44,*d . R͝v{[Cȍm*\gyqZ6=u%0,,Q_-2QT;yJU3Pv(v*]3?H d|.Fݡه?NE}#YwY{?!:D{y>.^8#){1%]<=#`YR-HiJ52^w9[;# ~ V axLtN{п0(LJ)H频g`/O^[(uz*މ> ÎaEh/: ?έlzZEfC*r^Tj.huŬ0KttAx%i[;R(2Ҭ$5f] 9 hەV~܄Eߙ\!.(6!@EQ ֳ^0nV@KDqޯ:HO;#NvsQP}[ًr%n|!^W)x<7xͼ3+ wU@ f 5tr(J뻐XUSӯ^{*YXJCTGJP0;P=M b'҈Ω[ ,eMiv'{k DKx4>!`Yͮ&O3cz3Є Ojuy֢F¼csLO1 zh9GLT(7y-4d񽵛mȡ=d>B^*\`ӼI-pJ ͖P ,Ka.~7ѥPQ1D;'FuQr:F`VxNjabǠ-e ]VG6̝eOht_K nʝr3W'Y28xQLKUw^;Ћxab;@JO5c-Qw)rz2M-kܶz/s _%ab9_ jp#),_ gEJO\α;~sm yHM1,Y|g$gK3[ һd^'ra' ׹:ڎ)9 *e$5`(;&GzC/8i,ƈFϋ(b ;.{ILvۚ?,)ZKX7w%u CMs.~:Z)?:sG䤸v{Z6r( RoϡI Zu`l S@(6~#,;4Iv&fɼ$YZhcs!x؟D~1x$60e0TCAJ|ŧ9chT@8a!atSɴCk {"kIaU ZFȼ~pY(SC^@(.>6˼5i' +,WfP}^Q omh>sMAox;SmZhJi$E/i!!8ܼ#F-& a]kQFe.m^uKxK/ b@IU|3~7CBYe}7Enrýjj?%H-f-#Q|;0UY^I~&F{v Gf?N(9i"1C:cΜ>lD8\~$VLϸI[#~9NPT g-;&WA @0i' nXYmNdؘtAPCjC1{aV^kԨvGi(+xA1>RW0@w)5M7#q?Wt%p%*G~TbU'veE~0e.ÔBJr ʲ<#Hz u-Eڹ#jM}"΋|rD6qu#f#jdQ0l ;ŲǿwwFAiwb)i3 G1H'k!Ou^!nk%n}/7 ʶ3qM V>|Ah!F[Q>ȓL,EHB:oBo"[ мn8/^21ozYt`|s"KjOsupjh޽f@:*ᘴW *Lf<1:;e!%J C/*d.Pij4ˋIž R+OM)*.NH ʐ[jV"M;?9(nw8~&y5bu ؉.cwVjܠΡ؊^Z cG1$LN!Z 71;Fd2 j2Xmo'mHa ؄P^KiRQg6/KĚnr:^e:5x;4W5/?k#:Pⱹ HarC0 1 ՛(2Immo-Q"-ɚܵ/b{)%wc08ؔtcq]|]T^sPy},q8s M)+2K F*EZE_d|ORqz = 5|Bţ1+i8yQׁxNК*ژ.Ӣ9իH?#{pmQ ic%Ѣ A.N-.;ϟ@M9-oV_[V˘[#E$`G*t Ky`nr,6肋RZ zmպ +vkYHJ2j:t{ (3e9LO2@>G';Rs~SL9BVdD!%5Ѳa/@w1,w2GiYIT\] 2a?y#6 ttuvO'R9#G!T{)`9'nqd0kѪc!eeQuO*镭v-jljdiC'è4\0~S"LwCA-T]z&PǣjإNe k7f#>j`t$|- qcw,')/eKo!oD;`3oPqB&Y@8c?ԧkq:́r!r;b>+YI;+{lD#?yx4;Ұ7o "g;n3BG8G7Z~Y? )f2HtdH+6 "X ^UPoowؔI#Ta26H Hw]:/]3V0[Mםo&ps3d83W>1+zԞ6%Z&})ad|IvS񹣷KnzKˎkWr޼ǐE 52e0|@ 0[y,_J:B$MFӰ]3Uq+K]l!HTڧ톀9 hZKs {s%>֭4ƎǼҍ;pij׿?a}5)@sI ZA+^Okzνi"&u/l d Df,o^gpQ\opA*3)8oEPQ38  i> }䳮CZX.ByJ" ^ե?[iQgl (lN endstream endobj 53 0 obj << /Length1 1609 /Length2 8572 /Length3 0 /Length 9632 /Filter /FlateDecode >> stream xڍP.,8 ]O`a-www Ak 8$A.ݳս5U3Ow>V -6ԅC fB@@i@0gT_0&tySu\!Nn''C?0! l Pe(9@A0k``p @(@bzv\<+;;ޙf-p@ agglvm+w x2@ S+<PwAtVӁll+w"0`# Z@]NÅZvBn@0ʁ9IMs]ٜ-N4eY=>0 d4vO?O XVtudׅ\A2m?ɟȧ _4/oܞ-vw<zJOR@?k0}ޟFy,З,m;~HL1z/:]oPaW#/Vd.%)ソ6%j3ךiG_rpd9ĮϽ^b+|mFO~yj>wӬѺQ%o^?c=͝|TgF=.6s3s71 !9%~wi:l,ue}'dkGM'̔vR_]zB} U OɪҺg:WNmn>*AS Ar=%7>+pz.pxA,sYNM:/:T#ÊJ^n[L LqgK{bSd@\̤^g^ "DS'ger7j<231z}g-rG<,"4ؘfqח7dp6cB +{?r[kKacA sTgcxIMJۘ}~ȡ?zEeY։s~9u urz|Ox7;8;c{h\ m {]\uܣ ֫z߽V<_Gr?M %|2| ~DF*(hv|Q[{3IJAnP‰e-iȖ;=gs[aST΋,6mh񏢄^3ز%^P24GpטTV7qR?,wmZӷuWfП '0s5*=obm#'^FOU+&P?cRԊeNzLg~X:ߏ*cckѽA7eL}(b&XTG) d!L4(<mɸa6iD S|(t,nt%Re/89(G5POk_I՟\ ^T&a0_LV?}殦 d/{$1pvoAGˑWb}k[J9Q9iaFh(3u#D=x/ NZru[8:JSXf %O(>Jz0lPZSj!)kÑUk~?V]0e†ϟHt>(ފX,l=/E >]fN٥ Lt$s̥hyE_|2f(u-ƫ FJ!~|6|Fh\K덟s(( ^dlB:4|hZO*qqE:{^^(9%#{-xkD7䌦J*^q#Jh1$yK<|aH `4ϙw06nZ'n G~G\(5д)1&7q} Bȋ5δ86١.7: JM$jޣ5DF-5sDQ yRy?V6,ȑ3E#}R8F`ic|6DƋ#󙻶E霴xvs y- lv7' p&xnYҲ u@'iH8tLGK2Z^"jv.a\ w(>f~-7;CG0P,nl5pFM2Ϛ㥢fȚ0J/7#>Ym h'(XGEJ ]~_AxHdr?<%_1γĞ_k!f|)?s1`41Taj-0VJ*Qq; !$ a >:7ME7X|.?ec[ 9 k%M>M .rg]Jsp@eJsdf(l\Hc'Ĺ]N;KNI~Ly(]ۂyU2xv}$ ohjnNBM]Rx|mxAk j~JbfT>8zLP5oD@8Qugz; TJ͆= :KLV%ؚn0x"&YceTx`K ;Nց%<,ut{J[|Hm/{m!I(CyxAƛPVhQ|A R ucq ĚndTZoI]7VW ĭKԌfxQ:3c; 1e_zG\,692cx?d?HTxΈAR4#: u:DW|gdƳDWu~5s弘Ś;A\YA{|].F3kxcFxbKcKn*3N@L%λ#a%qZ̄y)3Rz۫tu[ե|EB7|@JYcL2XSEbZiﴅܑ`7ao" X|aYJ&>kG?" #79D)Ĝ_WY $W.صէ ` $e(ƒlF:"UEh/ꚝr՘#p1gNmxS:YY&DX?1WRX͇h+UQ{SB5Qg@oM 3Jt2[.Ť::P^&9pam|i/GC%FPS2EH4f8c϶k`"GmOV6BW|pUc B>_鋯+oP-`ig+$X~֡ctYXkV0~&͎fV o&Q$B'Qb+NlGymƧj[ZU N?m!衑ܹT'Ă$`Tu4$H7wo}WJ[p~ZG<Kn ѽsp+eƩI%OS *Lħ%z5ڰ:f]OH{yמ[?oATC7nՌkuh aP5׆ ڽz̖qw|U!l{Z#t[6ae m]+tmݎ'^5WI5z:"!skDU+ń_rhA PG_Z#@ ,Inq٫6RX;>g̭4 )ѥ*Rh}Xr! S08 fڂ!5uVujwp:Ǭ¸çWΙb/L-=Eխj+`^1eS,-q7V*U@0@%)StUR??!/'2e:8bX8v^J GvEؽ ܫq* 7.">Sc [W%EB0F7dҷI"ln\nfb&#js>!H.,L* ؜D`Ăy?`*-)hjG#:x|ar<ܾMXǨpi|L?Ya1}@8FgZU붙?r+cJ_# *s' sb!** M6"GLEL "$:H,U7-]Or{}WKD<! ˼|~fُI)Y8/hrkMBs|M5lxo~:؈5e4jjT a7CUҳöOn_!}/뉴q뤐y=K{#haJfec!Hw~ 8$TW--Az čќ˹ ;tƧ+FXP*z=@(&Z3^ҵamml_u_-$3vȂLkyMZD0HFJRzt:e /mn~U|-HU-vp/꘠ъƭ$ZWnpr|h Fl3jj2[{6DQ>'{bx7n fĘQCy=$J ֐c>K0zMґt'*9")t<էRKOƇfIc}]^"m>be3g:tND7': ٿjr^S+ m5P"^wuW&Xvpz=zjF&qO &2/ 3P %;#LS;.~p$Xv@b@gee1QaB58;/D 7DzI_ xSK.6 7kK&gEܘA>]aK8:<~!,)b8MSFnctXQ_枱xSPxQh\3?Y6DWqQ72]-.Oѩ¢drˊ Y*Zs0"Zo c=Ce4#rqk05֢-U^.\Djˡ}YXauLO!tB1@.ւk}Am+M%Sr3'ʹ#ku!`fDm3MK5OZalfR Fwԝ"QtK#C[aȪD)3De%lbuKN&,|5)VY)./:쮽սhdKj*ڷvomYqMM3 q+'lIlԹrѳ29ͧb~ت՚tP>"N8#籪b5"\GWA\OLT6/RQR/ӾzXj3];f;Yia𡥜rñjpe*.CV2e\;CЃQH08H3h8ihwHoY*a*Le d)w,d:| $о5J92Eȴ BHx{Fl{CJ{nO̽fk< gnCzcf;!}1I# GָϪe sY:۷%Dab׋x&.;}j֍?|a{z˼?Ĝ<~z"r^tW:Ԛ,i.WԽ!b;jI `*?͕"bڐ}#lNU.KOuqҾ1{Ҟ"ףꨟʕtWߖ/ή9 KBO;C'AjpR n|6fHx(`c!3mިȫ2qcg8ke!EM4RD}GrDB|7ߌHڏb;zfIS.8g!lٶ͍k$Vu`g0zPSjn'ctխ"3mߠ#$>W-mׂK )9ã\4ɲZnkX;8|LP@wkx:ܐwbܗdԾm7p6["x)CmGd5k)KB r^]o s(E$~{UZ{.ᑞU;JPP2¡Ѝ}wsSƒr>nڗXPQez]җA]ZvW 8dzD.wpP/Y}3ҏ'oi?zb^ ޿[x{(Х?i /XgA]$7Jqԭ麢Cr;\>pF)1 b/G @hP 4FWlc2^ MSB!9tNe*Ƨˎ ]hpz59F. ʹr~e4അ2BC>z?}W5#Dn(afs1mg<$3[BED:%לKzK#GkvruHR)itu1)cȐ8mͷnG9ƺɐu>PCnj* ^⾳kB9y ApU$ffg\IιFwCʅ=Q_ˏz^"Ua_ \5$J!_9D/u@&)ö`gRT7|"rӽ)VEHU r* .?=j:]>JZl# ,RpU-1hfE*~42{i@Տ>T݃IhDZx~n!b$hS0ߓŐqz؄R,rCUIFdAA:U׌:4;ɧؼ~<'Ȑ$1*9N\ )0cXjE9־ `ৱ10VwKdMq#ieӈ?kdjE7Mmy̸I5w>Tp_r'!:HE?C(nϼiBDp%,<@*3y_f@Gh͸1k.2+j׈Re|D /IҍD1| G.^&s7PrqTZF|п-} Ζ #A'ٌ7ӯ'XtL\5n] FS<ԙD PV,ep7}&MAq#ӵki.͇;Baq`}@ŖW%R8&ۿW'zlSv5ݻGAw~zܪAVL2ʰ ߬:Neo'wa#ʾj{)yyA 53H#ׂ,mUB'F5P_p(,0N.tdjWۊ(xfU+w]tHRZ-¦zVIu(Ǟbo .ZBPx߈;Q+Lۇ^v}4,-h'J2F}a=IWdrREVL r91Kcra~sH/wQ~|lŇKs endstream endobj 55 0 obj << /Length1 1590 /Length2 8959 /Length3 0 /Length 10002 /Filter /FlateDecode >> stream xڍP\.Lp`A ,wdw -8;D h`{ޫ]5{m]CO&f3Kà.l :/b85!.voNTN`S'˓ wpp8^ p @N_0'A0O'1038yYNsS(@lt@fxW..@;3;JqNn` ʦ*cGhZCk,]M' u~pZO4*`_Ɗ ljnw0zBVK" 0Z64s=BL͞ dn S>wyNgvg)*˳Uu07r|;),@qZ%ԥ%3=L {"-x@O?LGQo߄]?jS{Ouuyi k kfWʹ>́m8KC<s\A`U3Vq@{,sۧ?*RPs y0ur2D=4`?١0'SyK5 ~^w>@@Z>E7|"iwI@@42@? ') 瓯_3wurzZ? /m>^WpgNab^rjsTt)8ԍ#x!Lu}TA8N}j}q@MSϽϛ[g9|تy25}+{j_*_)`ܕNӊ6(5˜#Ava@e?ϞxcA룷&9rMNNR:R= ѩߒ pG83 D/S3xی+tH܌|mrz%*QE;DWƣK^0nws=z(?UF17EL(F/4֗Cc*O/©N\O{CuF$Qf9/iE5g-KI1Yk );AlҚJ۷o>+o.Lyɴ%FSkVl%_Z:g"y_ _&uўۿvm=ݺVG!5:KoD 7Orw!wɵpφJ=wA5sTf&Ú/^cE.'t.5S#Õ-K͇'2LogjpʻP<* RV?ΦkG:Dl?Z҈IM8ͣlR.boXu38aUpF]tr۾Ճ9Zy_Rx sj 8*1@XgЏqCwp ?!h#J9nᘡ<Z!4nEw,VE'rW酔qXTd3I:*QZ3aŽ=9{ MLo>dF/s-Eol])f*W5qTԸ;D, 34 |u8Aŧ-a&ˢ$TLr  ͕0O k#J.|7mIQ|odSrc*%.1TS|I w¶yj| ra1k^^(mYoGĚSq I6pȆ MOvifeZr9(IbOHQ?VHrV`Xp4 JY^W'6^芊k<Ɖ8ԒX^ٽB}3;n=Ȃ:uȏcS֜#uu^VMv5D_:rZbJa-/ns?,Zjf˗q\=ߎ|g .8얶ļR_-f{CAڧc)Hja,L\՜ :N޵F]e-|DxSLgFКcyo$|C# 'P'unYCV0P:\ђ\O-b;d[:VoϪr7$}ۦ,t%t ~U h2vu34sSɵ+|$P8E\4kys02 Q:EexlPP0_'SVl`%#[>!~iv6-W&))N_b[Yb-G!C};Bxw bX(7FBGT~]#Gَ_I2IָEuZ>t_[I紘{5>&0 3m½!S͹cNmo?QD&l4YgM;kͷ!kݯ?arTL^^D =7]f6 ~Κ|]f Pثތw))2kdvj}yfIT"AYl'^p8r| HHI5yI?JȮy^c ̀{kn͔h '<`xuZɟ#Cn(BG[ߢ֎s9[щѼ`S}/hRT{aYo|)Y<ԮTzGHƶlT)8!!YD ;2}1 Aηȥ.H?Ԧ?Oԇk촜i>ݩkJ,憕&8QEHBе׭1%˶␩V8,^Wb00Fןsú1w X1Q=ojF4VhՊ5P!Cp9W:448ԭΚQ.U!N)l5"+|I;h6NU' mƳo/>K)?Hz*2ǃeKrusQgALg>d@M] NOsy~BQX9⧊zsTZ޹dtyAi~m1-J_!!&N&Qⶱh$3P݂t5qm $'*&_sZU橶sL"k꽈>]݂MoQn? 4ڇD[L tE`,eϊ6gYϡ80|bT'\X"PC*}#Phq]+ԓk$א[C} ٣0hQYq{7\4̹ina*܏g?Q1Χv;Sh|-&wM rsĐ398Lqn:n~~h^,fZ&os S+tQ<,!R״(EUg!uRַ V ^MaK3H ǾȢÕX óWk29Dv jMv 7aw#x u)׀0;"Y,H6D TV=V P`02>ohd=TTıpI(xg3nsX-u],WسPǺ[_3f$ԍVЇxf_1yёKy Vdg4G{ /`.{_ԻHB-l;dmw4Q_?w?%xQm)?pw U# ;{F`&gr+A3(쟷s-bgLg)C1I*3M*4eƶjƹhzK,*.e <`ӕ Y@=A6o{_*a`xIY4N} r%x72R?~#qP 5Lt႔$3_;t>0y>-:)Ūu]j{#P(ɫ;UN٫8YqF'qwB? yЕz==qk& rOA3 9/‡ՀgVyU 5e;g$bDm풡Ex g?Y=*^Y;1y*gsMLEcHɎ U"*a5g톳dI>8'M{Yz:26!iRnY&]xSJ(Nw[H01@/tcQ*0 q~ޘ+x&"@"rs/J_{_CW :rP k3]e._yvaT,olxru3&M췊݄^:^Ia@d9t:Q~HJfbGWQ$|k/9EBiӉ#WŅ dj% Jg~țᎧ}2L챱<]1p) J?]DeeNȽ%m'cE&d*gW+֘rJ;y"u:šsE°nw@{ԚMõS]3\kwIϒ@!o2z5NFA838VV/]2rx< vg ,Ö1|zs*Ee?PM2̩u 枀J=2S(~+#h8'hWdN-=x"f!"4ޟشsXhp(ύO߅V7,=tjG5FjBnrq~9Bqx|Fh Hpw+\qeeB4YӳXu !oe"5bY 0N>WikoU/%#16Lc%:SW/Bф7{5R_QʗJ (zp[f@Glgɭ_}Q6MTeI9F8Hr>~lΦGw"\|lݹjc&}!Lhsi^cd$P^H}ؘɇ|_GD()>䰑UȚ?*,VպR&k\ |/Sk bT”ykWdؗkO۷g/JgO4{kN4^ Ur9VHYWi3裲ܨ]L1d(0*:BL0IC 2zHⴤPcS( Z#Vj\[{5/zKWr4(G8 *՝4321̎;onP0 Q-B^ٚx-E3#i{ÓzCx>|q%uճoؠ/['NV~ѪM}My& P"/iޔJxW @Scnd"NK) l%l0~%&aTyԛQ ŎiQn^I$lUW؂9}5j<:W>z|S+[$ŏFXĸI|/:5۝s֩b/εqWvq9-^=}cB@*"8]ayx[M1h &;.RC  Cޢ]`>]9hr vx19l\B5#eM\'/VS(y0ɾF629BCӀCN-w}c((K\FK!Pt“U֖f'uD$h7D?ƙlVd*]5 b@޶'&?&vʉS= w+Ss`dAi}o۟AEZG+j2E@7s_$N~Ğ8=V 8MveMYnoe nc\Q\ab81H-)o~S_UKM"ۮ·d<!w]S3}jWDNqډCDxX]И_:4G7pC)gNk( ٦{qi$U࢚x>IVK5M='o1;?ޏ;o: Mě|Sa  0Y6PoCn; 5nz q"fqKqww"sہuЏE'w2#^,~zz|[53#a?AO;ǯ0kxIÎ :Q.] :t+L̥?qLz#wv!v y,.: O&Ꞑ|_1ȔNӐl]ҡ~S(h:RF>ͪsaN,q` ~Aғ3|{sғnj:jGa./p%;YE >.YM*ŵoчϛ:$w))|NЗ!3oH vS&۠դdzץ"gB$rP.`0f|ʙ1VyQ@z1('ʀpLGldt1-灉$cр[Ur9JjT†- ?4С[ 쫘WKVp7P%](ʿ$$/']F vt=НӠ􈉻j~rYIM1Qwh6Ӊ`ۺI97ҷ3-8 "6۾o cWO5Zv])^ :x1T3"d5ExN{!f&{fH-*bʍ.DQ 73E6N"z-"sH>JUaal2³|Gȸ\}J~Qtb{ QY z3|:16 n{л +LDWBC5j@J]놐BZZѰ-~|TxڏQJJnnuhfZGwrd;6wz,j{<S g{tboY͒[AI#,w&4hH0Ñm=W椟&K۞-E3pQޱ8/1x$5I{Ip-K#UFeRN!( cfq7A%BS$aMzIH7}l4o$ =8W]O.=@Y& = /i5ʰMU'qiB5v1]tKl::hPq̦WQq9N9ivŃɶ zm%3$JAL/ǔ d+Evr?TC{l`9.}KCR(Ӯ􈨆~1Ӣ*r|]T;Jdĥa7ԵEǬ[x֒nYlS8LO؅ڐ^2 n? 0STd]ڵj(7v:Yb`՟TvcFVlBu̸EuHiF> stream xڌsXm-wmm߹ljٶjZj ;su]i*Lb 34э `e`feeGְq Qk]\m@HM4IS7" n`qYY+rHzX G+ xsؘ:Mݬ`u L Z9xzz2:2\2+xpM_fAXq[~ӱN@ǿ$4 vApD g/, ~b#v:@i$'F1j8ٻOpv-S,pF@w?8/ ,n.؆jrXNxk/F`Ap} tws]v>hhH s0ۆ:1"O AndHq;PJvDw9*c5ЊАx<Ļᱰñd OQ.覮X c?Ix K-,1 $y;8tV#",FT>\xˇ3\Y>@nk$mHd:|o#r=vu78*W\ [ån9x/Ow=}1y7_(\xT:c)% gwrqʆN“sa ('ֲ><'_ge.>a|3܃^/"_*RbI;fH6\ǫ}4wq|M4 y3 #2 d;SB3?)w[ 8R]l^);˅C3zU5l :>M!b/TBIbSKs?f{0pm5N.Pge!!^+ľyw W!1?XҘ/Z?Ga脦LLc\t8aM<[,ȟīB@EkfƇߟF>#2HDD_LLK״яUpj(s7ˍ}+./A4f=S!8@`&Lĵu/߰2+`i{,G١Kkm c1H(üOpvn_bUFOO'9iۨ&M+lw. +NB'$$"  7{5p\5O,2ézz?U %|Ӌa?f8pC@k#$}Ȍfߨk4KcUuokNIckPL_ܵt(dqc䎘Xʀ䖎q=bH=a O-h !J+*ly8d6H[ a<VK`%{¢fbU0$"g_؞(uwgTs!DźRfCXv;|~?>k- I5.,H^"H(}ʕZ(9jBPkH/Ձݖa.OB?{1[nCL*z 9fS͡za񲊘j!XeQfdi S9*M oHk4>s6[ R8l"obt=N{NWt ^6>7me(ufzdfS1pEֽ?a'ǁʇ 璇a£ f$3~EEܦJ]as4iC?Ifx+_^Ӥ/|8 mH=o1է=#L=+SqTRjZ@fj$˘4=XZ&~AQ:6,jqcɴc QU,kr }+fx5LUo*= 7G]汖!A|+s D`z;ܚ 9e]ɺC^$ЫO8J͋?%z$Ku[ `v}*lB$ 0fu5'h~|sc&4pT=թbN 'aB>jm/?DnuH8)ROȗ*V3%hYoY>Ei16OHE m"qe{Ȏybnr.?33r`_v{t "5R=i^.)GM*|Uzo(r\/#K]Cë}>sx@ˉάh3m׳#j-#,&F뮣h=k` yuӦWSw}Y;LEe3lN45V7SvQFڏ֑Y5LΟ5t'7AY/[y?,2ik 5kF_[ k䦗,hS֢K؛ [0i{=K݌MW 6ʗWEͯ4\4LdC.)Og dSlJ հi2.Io)W©]&avͿ) &wgxbHcp^>jA, #-H\nʎ9\1kT8d -qGc4W 8L腛fh!~!~i1*bB*."_L/"Y)K|B'u1L ƚyS>'Ww}.MFD*+[Ʈdd$NVTYȺT3!N`8Yd: wnԃzn` *Y)ɋdCގ' XfRr(0~Nٌ;"U?#Ǿr}]]$qy7O zN?üNG[$~‪q?$3Y=V{&QBL( [ۓqfWr oHPIP"PL.c<]Ha\cJgE%q\W ~-qX`0;F^*a&|Ky,\8=IˣΗsI.LzhW D?<=8܈ٻgVl$U7ǹ8)@vraf#tː2`L`(׍ /f0I.Mo*|ԤY:òkkL4uEiՍ="hI{,}>B& KeM (lj0@ɕ+wd͜hpZi}xL_AZBG[x \J_ƇHu^r%X#aO_ e,زCq ҸI&#!F(CL%W66* [7l:?ǀHrNlC֌;sJ"#lOYbTJJAݷ~τjkN+Mpwy}Vx\S:4^vwhژbDe]U %a~|f˶Qn)$$ r-yu|XrԞ/3DVqqLX7=s){ }B$MLjKK暄P+k}; s@ȗxB%ûy'ںs~%I.hmUVʡOn™m*Wd$Jk"c8FYT28Bo}$&M|[o<^aꢪm7]dSj- iV{2 ` #$fdes <|ن~üliiP餑 /0 <.e&:?]yAgqsǜI @ey ٕMk K58ax~fZ NfE7KԭZw QM%~2uG"U LbO$( 9|_pB@y}P/B.P/)~d|U{ ;ቪ.z\$:;mmMff3F'G,EZ`꾘|oEsSy3UZB;cNN+?(LʱFmp6QKSO&SKE8*cgs0A 1fg"FD(BD" ]x~F}7)ꂁQ5sʬ*R}Q O-D_U+SJ#_׈VjkR>k0<i;eaJ*>k740qÆ'P&j%â^}j56-!kbnRA_i*7l.Ռ1(sv{{#xۋ*FbgV@ 9`m%α?9vAur5:3b\W.M%*gG1$ j=jGr^TM*cS̏uPo2+m'qBǻ.?^͑S*l羅m,#~bGYBՏ+3LH;c4~Uk#4Փck:xK`H*EJGب7OᡲT1&pwí贫PJj>#VE[ m:aqp ce1đY dml8Jæq3i=8'TrL3xʰS_zk?QM RTFȰ0;PԜbkRۭr,TC$Jq#l8ck1-7*^ee…HRr2&1 tk),;z„VРsi[e$[6d|urvj{䋑2ynpӮx}͆ȣ-͌aZ;C$oE;{> :o;f+v~|„r}9SٔOy˯^(g'm{"ShsLo1zGē6g0Bs".TUGg \p:G>ӭ cb ?^u^?`wӐ,t%9f,]pΆ6|۱sCŷewR#ך3ͽ 5P)9Ln3m'譗 z4Zݼ۩e2V{]y3ʖIƗ]qN^ay|}vz#b6!SlTPbSCt@ kb#1?-6g"}{*i}t "3i@Pc7ğNhSb |˅i(e1]3 6t`c|o1䨦MezS}w>w5?K})Ys(R0Q'PMz]r6VMK"5NKbџvQD 4; @Wnoݎhs|r]PCIF%}|y K)Zw'B<=F$_jej 4t=8NˉVh+hS[k_2Iv3xFYnJ]عb q"1tw̯I$m>x&Qxmo s-!c/N^თ/<%"k876_~brbTy_Vݣ Q|f,@bQ#4Q|ȶxl\*u\ OIܫH?B:N~CJfXAM:a_ϓLN̬-Т2u% 6S!{ց4;bY`(*hVýD˵biNN2ݼE\x @WÞv[8=}h%mE"-\`dzFb6D Mڃx\կCL /?İv|dӚmLR}Ӥ%T\N8?e@P A2@e8'-̳=E/lu0AW~AU/FׇhݡjzYrmm]9OyssGv HhVG W%scմ>D} x}B~Աrwb^[Aa#S # G(eT7Krv|Yvqu rVVӭC!giUNH$\YiH؆'dޠ8^g7q4 @HGsMf b i/K5e!@G/jOaMαӞgd\wȆENZg+~iłj%$CDtT¹H\8u O|"/=_95҇=2Ȯ&_P"^t!ހ 6ی˦$xTzy>Ků"3a՚R< ⎂}"PT_bP➣0d" p x43 ) @ =CfЂvb9H]0\u$ǩn'G5Z{: rgkL {leƵ}̭-PH104G@7)م`ڴ4a9o~ye:'sP/V%c!ϟTt_ Ԣىz*C.i^4>$ǪD\E2C 2Sx :F]Q=cPr{PMȯ9ډ"G[S-g7BD͖5{-B0^`ցviH,*l2r#d !ZaJJ~I}H,/dX +k|1J)~8ʽ}t5,Tmj=Vh}>ZƪïcAϚR8hD{I>y'XzeCI%S *_Sn\c+Y߄#y[Kt/z>O]{z8 D5*h+C+K3|P[5zڡszv)wh)*I vϾ_[ ӉezՇ(4e4sW167k \`beFyoi>Q&Dژ 2 q>L5ǺL@y/J<΅S ES~LofP\Ȩ=i<6rJt![dF+Ft\%hW%F[{_SoR?0FX>T]5(`VsяkռBD<Y_;sMDz_8NIoY!_ot/F>l 3G!N7 pٍn|try*_p"f[{s=,C_~g`t$X[los㞮IDglO=zm(ɢúmX'>rx=uyȏ&l߬h(lK[~$X$~cp5X>r u=)]e Y▘gX7/K¯z+pQJb5G߉l v։l22>dUy1q%*}\1YZzݨԈOOnr3$I>Y7-Rj3E1ĸ$PH;$=6 J S|Wx句k9JYיH/#} ެ+ba3ALƤab!Ќ1jOubt֥$vXs$?QTi8zlEϦȚZ6 MzܘM]g*F啘B?B@bF@ZR2LZ $nxc ,+1+f/ 9&9y"Md9V/_ 1Y4Kcە+,~I(΃`qb_a[M~x ⢀u-(9e_ zis'R[FK̆hShT?z=EiTtVۋ(t89r8|Un~96\.^:#C4; v 2UDG!_ ;MN>ꖦ߷,pw)_e56@\Rđ@RD{Y2 ]f;Ⱍ&˻Yj&fάn?SST{.Vz$dr(i%u($&ܷa&Y tի>{%{ m?3ѣw#f'}xFp \ʃ'nYddp0`$1y.4}R]h)B&u qNZUem[6\ILkgm_;C]Zz5%1 -‏D"m.lh]xN!HA".lCPQ+j˽,Mջ%<Wu Q򼆎A0 oP,>͢f I]&4Au{i7g(Fvg!/֫ ypcw2_Y>NWډ`:D}KKygAʺkB-,1ߋr!Cd*.?R5KI~ VسѨof[UQ?tՋg?$Uσ6*ȾvݩlE\fx|ݺ/Z#{5Qv18TEC֓ AϺՑ !&\1^+yT[w Ps>M3>$biΥ̭ ;ƗlmxRz[StU 7[A]r+=)zahsmnoj#Q1H8WrY(F1a}R0 =ay˕ʝ}ų_(WB6ISa,_n`Cz۝ pI4 2(ZM r Г Շ6^ʍt#gT$oHK3T$P * fu%]٦̔o{!"X gfZ0 ?c y78yO `Wzc{ RF^늋!C}A;(| ˷~^VItEyU|/_sOq|ne #m)ynd^dZE|*7ާO=c#b7%4 5'C@yіL5]L/N}ABVj_06`^ךKpL8rCڼ,ĴHKVeYFB$i_K<s1Z#fNAoWFPH>[(GQ'CO%g~WVҬJ>;p;0V n)txE75H ~4 Lrbvvk(Xα.f4ثDPȹls ѧ@d-z@(…:딫icp5a˒zȼE`u1(Cp1ʷ ul|v1oߒ_|?yVbNBm8i}I- zca_%UyREƩ![0t5? ωpgQ^6kQz !nLrO߳s›+KvlOħ:vvhbTS6㞻 j@q#ZNPE&Ή`CcFՆ=)_hGe?sO`;l`.4f8+vlޏϠaP!#uc xӒr7X!l @nÓXYemtsgSlDP ){h= uύ)} EwɽM+b"O(Yt%H;_jmyi(X-7a)B)OCzv. k;tMkqO)*љQa`u'vDhjVF4sƶ#{jc GPɒݿhķrl5++&^VXdMQȥE/c?jڒEw9]mt8#;bGck {rCy&Qz/EQƄT&RMAvܡ{Ih+Dg4ʏSgr: VEYyaB4R䗛uF,-ѡdmhn6 N9h_J[דUxQ]AC=/&9ǚ:؎v1ZYA#T(U[IDgdO&L(UiWۡ=-R4xk3S]tZ$W lLVzczyn>?r w7["CesrRwzj)j$1?XfyQNwIv ??)`WU.}YAz]r}%&SILd%MXcW0T7xCdmGWZ#o78O*7V6'ðn{I7Z@}>ܦwd:_oHzVZGIV}Q1,bE[ lv=lg5] EƢ"-O5yD'KI7H 5';CU>0 ^q5(ϴTqTfvM%lO;io[oDyԺᥨ7UF8yhrSt8-0蒂*}/OmQ;}q:ԁͅ|zCǿ*/dl"B<&u_=v]R(+7!'*tm|,R4)컴倨e}_E7li~)ӽ yt1{47&tE/3b MJW80,$A$=ăLpDYf;gwI!s>0 hFNQj^_j [Ɇlm֦CnZ= ƳBqvTlO3ؽ3 o9]PLH4 s+!BNtJkRQėՉẅ R~P P?ɝ5ȃLm;7(:ɠhh# 8pw?C9zyoSΈ[hv\8;[!^M  u# |߸][6da |ũ{fl:I%81M^aA{ 7n!`ߌ6ys+GOgݫːq&iEW >y31zuC6}p<ɍfuNP[D'ߒM06(\91ۧnl0S1EkiHʰtdg ڼ簗ރYzjL@[%>]2 ?n܏Fyx#}3Kɚi {CiW֛N;BUFhw&}Ts̓lxI!'iO@mW4岥<T@UIRveabda.nBvtfs G"HZ37PiRJ힝~4c/`iûRbHLai;X/{ukXx5 ϫO@؁/1±hl%1!Bl7w`}mFA'R> îsVаCtv7_y}(Og2:H|5uw׊iD+vb$ Kg5_~)«g wzZIu} 'e[CG}3s/w[پf0c}Cje>{`lޠ1h%<0XAiWeG(B\=\$.-G>9[ |bd}O&13Y#l#2,DZ *Ͳo}g.@:촅MAp_sUf]ErF~ endstream endobj 59 0 obj << /Length1 1747 /Length2 11983 /Length3 0 /Length 13093 /Filter /FlateDecode >> stream xڍP #݂-5'X 8='ȽUW[;Z 5MfqK9PafgaH*kɳ8Y8hh@{H4:@gQ_@3ȫL j v(9<ll66Rfn K2 @tA;y:m g `2w:,ffMB6+; Z 4.@g7%*fKcAhـ\Rh f@dttyuqu:^wh+T+ep, @:YX=A+=*0-04w_ L #0{\,AN5-%@G I9CV GK?ʰtubv}pKm*BGf 8 hy:T!~ z-  ygWKHK`9"U _0`{m?v^;hW̪#(#wUJH=̜fn6;;uq@/_yG+0t_?)c_; ٸ,^?.(3qSOdkB^@: T*-AW+1{qG׎ffbaKry-@ /fr]@0^llG:dvkk+hc8yffHwJoשzVG0Z/ pXE<V*_*CJ%>NjF1?*fXBտ5"k6N6?2п5k&TaWae _Sq/|_z8k kd?nYs^? z-fUͷ;\瑗ou %.8G͋OFݭcqD -4Yo1c (r*7t;iwbgp3~ +DPvSjs@Wf4& &Eм}'.}89Azoz+3@ u8yRG孁fWu\"'׌m܀q%p4)57`aE 7DgFOs E~YWqp+XrΏo{uҗj5g65P#-^F2m^KJ>=-yeleNn!\}_[.%ڮg!`@dj&T@rCB}%NUX9P;vPs\S(JܶHCDW c8"Q. 5+o(t +o<4 4+| EYA<'iI3K|Q~Xz^k#PXRBi4I9\ ~4UgƲz J'2 n.!mI2SUͻ"@.\E>& zn].Ǭ,N .FGD˺@hͥq͔c%l߇~=FWGK hՓ Z&ĕ2fvE<Ȣ@)"'si'ڵDRFXpPؕްԸ BCVJKn$cMʬVeCi8A`Qbk)O5h]ԳٻoJ=8-| 6G t 0>;c>>q(Eլ%˩t)jFB7SӷHݒߓ6|\=Cpg[CR@鈱*dn$GEn"QXP9`OڜS'8j'=XnAs [ $>Z0::'rUÁ@]5`ȳf1 z$w9`dtD JVT4Ұ)l52IdRu͏7k{'q6Wc᷅m*=<6,-Ǡy'qћ6Xsddsi J[6@dwrJL8|V~  Um\sM0~l ` ^乥MDž]`\ -js4L"wL0\7^اc0aP}dL`gJn,s4ÝjlA PKWy?bzb+j-a7")/:Tupi^X-&FlQ x0fQ`xϴ[KT?PάܜHYR D!n <%з!DvbƸ &ؕ![lT Ϣ_\61҆"˪H:$O@:a)Ǵ9^zV{{u<3aBʤƱwnO;'%h }^#7Iq}^tzlO~#q>>!:m.ZEqDDj?hTrbZ Vcwh.jZZ/y 4{{x̉wx~)x+٫ z/7:#*X`Y-k$ Sѥ)[+5bG@D^uvV%vz o%{I+IL+(DнhqEWT:ءp-]W)5kn{tu,YtV:[ݧǽQWw=*15律T.#އ JqLS'"RӜ )kS",i-ٿ( hAq(n)P'O/ DTTA^e襠 ̏$L[W&ͪ4`_- ef',j?Y ֬"m *gr{AaNԂz[+A]JCYv"rJCS(\eSV F&X(!гܟ'8w%kNcU Bg˦nQ'ÄN֫9z`[g acq8COKn^ y{YQM)[Iv /G-_kVt]%YJUՓJ7\ʈmgXq|@+ܗ;hs;pUEƭ&:6j=F\W0}">Й #ux"Q}>e 2/ hpD4 mV']w 7F|FrnU-ڔ}_/֣U :OBVޭw_ { ̨D3"Tq Ȥmvt-R^ȤY!S.*`v Z'D|<2WIS&W =T{ tQ7 rJkE{\ 2q~FBiI,?SzI4,^_ $*YśqBcj'g6v3G!‘M ˈx(8'#EIQ0hP*7'YyD*eZf/e5cS 1vkuїըtv\+Aϗ޲>Oq \U\=z>V6(FALi>|FdYL3:TO $['3}\),ܔy~4#-ѹO\G]AJD%լd SY~_2zK2/]A`KaBwO牢Sku+ M4sEЊco0D(qLգUͤFk믊@"@8h:01GoDg!,xɂ{4& ٛ£K ? Y^il 4KAWtQ]^mNbЛK o!7\pFTB柎E7H?D2+cYO"үsn7dbK0NSq54¶ذ/1}(`9HV${ڛQ45exTAv5vx'2Mm#]c9)K;Hp]SPUv_-u%g\s)4#81`|wun2dTˌ&0QWJ10BEziFrM, \!vjWI}:#ijPh?#H>٩e1gFIu)_%*緯K5"Dfs](/H&jXY=hp6gF|{sMYD9կBp h{Bu9ؗh>6Yw-3+s`:p%oQLs/pDm.U,30-vzۗfZ\X$Qttv ߪ@R'ZO@lj.C2̳$TDO72~o14p<{@#9bWnTnN/Hxzԝ }t8ѧ>1:lNw;E:Z򒯙+hD8p1{O]jAy<6 еe9Կ"g &7׈ ܽ>Hx{ŌjT.`U\jlUދ£;F$A(QMj6V5R*8Y*njN HcnЏ$G]Vɰ9/mb>Vo&0Y$]Gՠ>~8pI#N$ч|Z{*o?sE )uRv^#?>tN$c{,5CB`=mR!nyW[DZCq_ #^ON:7^ر=H<7W u%rTi?9͎ioa{F}bJӶQ7bXskmyҰ%hDALڇ~y./|T^&t&  dbN_pXO؆`gZT;a0rVue!u.5g5=Ƒlwɔ "lJY1sHH2|t#Cu9.eos7K#xJ<-Z35OH*M0 4P#>ˁ`2%EdC 8ghӔ "/DKR&(ƑQsx1X7X05Aeo!WjVL^. 7/Zo׊H|vLI;ۧsǔC΍u_6f|&uZTʭ?xWGI!]}}NX ))p 3Y!l#}~J}eEA_ ԽIUDQ!_QR0.r{qbtɽ"az򇯛w~T#ȥq#+,˹ƵԚ6\˜@R7[_ySZBn [nM:cq/A_| 8f-kQFY]<{ o>ncvIYRʎIs@'z1DjNO2463-򮖖%D:sB u~@QE%L5ti\G3HQ+f?,̵ׁÚ6FȕwI>7Q.C|;#sޛvؙѶ+"w\akԉw]ilq7ݓ 3t ~.fiG7tnё/Ԧ])flNi^-;kLI2{ jHQkRa.sG*]N)3GI;~oC8ƬEgjHe ^Jh9p.Z杒,2okt |fZ\˂:Og5ݔ涟l>uj>XyZˉpSM;Y, 5ivG!3(5Cvh~d 6K^KQ;qzV~gY{~,lꔨA .2Ǭ@;u b}&6˟hEBQw~h28v#!OF'iHk*^$QJ|JʹN8a ā"/=Qwmc1yElA3c#b6 07|]s5D1wb1<4owu=>C [eᆜugSRfuB^>Gh}5UP0PA^|F [ͪE\g(&;~R9φˮYyn$yBln(fet{SadcڦF3dA9MS7jE@z-}Pu\T(U| jI:o@o"q;@<*omH% z-J=B0'!QЮuÊG/T.2':ar-,:rxNFIP:6)Z2IMK+Vޓ&0VO^\&/>nQ~<-ĚwIeGULxuUo>iSi bJTdlBڻ0"v}WݱL{hU9 %IDj<^*'0;HhAn7l餜ºkyvgX{,ܨ" '-L"*wݓ"d\˄<8xZJÝtX XppxN!r䝲~N[Nwdt!WVmǵ-o$+-tp ҿի*3 %[3:ղ~c NSm\'=Jf5^?V 32@ uFAťnZ/YB8r4.m>^8r&PZoMtX"B7S؏Ln%׉MI$ CQi2vSFtOGa<į(S5D_:I_ !ֵZefIGDatA>bP;qChV&~>h}@tWA2[a`Fp]5(۬Pl lX5ZɶEJY|H5f(:?;گoP'cx5lZK,isg4[A=4Xk"ºۓHYA9㾮T8?ZN-/t~^:NޟԸ/,Ϙ3PyVR&\$#o5lpUM RNz[wPXD1Yy+8\;%Q|Mgw|C—̤'?j=Kg]~V)k]YM%2?ދ|KGr|mU1A%7 4InWK`Y:괧o9|w-i\duU}_lwu(׿wn:g+GDz9rAFy]ྥ|QGOꈽ|iWFҤz{R?-NZ۟,\rFlٲݾzh0 -p7i*%ozϴ-QL^rr) ^ݳM%&I_ds\Zd2,zop?ܙG8Ҽ]w>\{Ypj`R:?8LeʿJeeQ8ֈ ֏S ޓo[A^h5a0wd/.꽳΄fx1=:3fE){_ ;kZjZfW}ln謲^57)5? endstream endobj 61 0 obj << /Length1 2535 /Length2 17707 /Length3 0 /Length 19187 /Filter /FlateDecode >> stream xڌT  5twwww#5PCw4 ݝRtt}gy[sq<5&%(vtcfgaH*ki8Y8@nu. .@37L b v(9<ll66]Rf K2 @tE;ym q@gA`e tY9lfM?tB6nnN,f,`kz&'tx- P1sS "5@&A@GW%ДW:c&?K_D ǿ,,Nf GkPQbqrc9Zehf y!nWA*>W ++YYRttsE+?) wokt/9ZZU#(/ D[f tpqr _+Cju; eAV@D_W3 ";;d0ZC@`]@^C61d,޿1?%{|nN^?Y@d񇧼d!]ol?A_.0doknfyvHo= f {, {e0.? ;_m$UTYkug Gדt㲰<=\!+ (h8yf..fވlMCXYn:pXX%~#^o`"^6o ` JE_S8E7jFNoL_`A,E3W \!+r IWH>f.Ր"n29882mV!'$K쐃gdYr5] [v _j1 &ֿ!z`?M 16N6@?, 2f? S䁔mJCzB]!\SC;3Ԑ~!dNw=wO? v{,\8ٻ-{l8݀K<^#H7(;;nCz;7m!$7ƿyCjoj1$a!bV7i' 1rjvߐz! {q'R? $2+9C|.r.a"<^z-_Bnkʼn|p""0'OU[-+Y^egZ'$?0TcwYo׋iuSFjSIP8M G++ţ/>#V8ˍ+ROpĿvlʩ>N;xziTJ"dce6R'\}2Bo5B07&X|uR0fΧI\mM/ʑկ8ƚx (70x94Wa/`}we;4>db-:\8 mmL2KApg%IN]Z'\0gbldY8 ѧm9䎐vlޏdG} 2ϓ7ώn"alj|0:iөAtNJJG[7eճYsWE'r>:McrkןF*Hb <ےpe]wکAI mJ|U*LzdFP JvcˆHab.Y8)*b" amV bW&5OO6E%2C=KV 0$iꃂ^J0ѠNTJSd.ߗ61%Ksȸ'ARESܜAȖ^WSaP@1[e>3Ջ (lF(>ĬslQZiԴf2g =7Ӑ\G%CUIu : <[L__ۘ kiW:E>b'^|7\ N^XЖ:E go޽TzzZ ڔ7__E4KcSq-7iN\bcTfӯRM{nZQgTkjR>_Akxgq0f-YaaX' }-h#@lzD/` EcԟS[$ Qt?̋lL(2oKtKyzmu^]>/8.z^yHD}d^}^=0yJU3P0[(BW(fʘ6>\.~NL&[EUxamޗ0 \×-,#1,qbD{ˢM<tEQTlU{&}0x&(}'h$Nq.fVJ!2I~z4{/@Zb,̡B(q ]ea0|AsI>{Ja_aH t_C^Q}3wڪ1̔ WР1db8"ώև2UEzSs2U&N9`EaECJxWJ'=xd\ơt \Ԇf U uj9^ [DzP4O;NChg3+`\ic@]},r!|OR/]7ZF92:ƒY}7<ܸ`k1fpy3ts~J<,S2ŐhVNRDՕF-rȈpk5^dzp8ͩ;n븢7)֡Q@C<8{Ț }ڽ12-7}Ǫ<W>Eb@^u+.?0i\QP0▚ߊ` Fa<Դ| G)}QOt( c[ L)j-;,[k\$7,tݛ?+Yb`Ҩ;+~~19bZ5I0vW77_ ~rKZ|\ N9oQa{75JD\P|>QdnQ1DbWܻY~͒Vhh,} Ӕ rDZVcBGmv LUdp3">p +j]W%E@o4:6aMM>~fFk_8٭c ,xF#+/8Dd9#͹8(>GO^d-BڻSbaiaDyR-k9a<,Zso9t>֝qiPđ}?<@EE))}i5 =SB T- u֍3K Ypţ eP#M>XشW7z>k3luDj>TcHˇ38TQUMG(=F+H=HKpif0#.t{GQ0aM,B(i6 'iF U:g4Iܲ]H@>f&HDdo,+(|IA+y^A/>VvsBm~BehyƎ%ٞ 8s,rlvlko;zaY}uVAMa,gۊ zđG3_s 1I\>nM%K;uy){G-~ JWi-kW5K$Hqsu{]^hmS2U#/iR?Fs6x?b1vQ=Џ* _#qn$ 83= _ $=H;bu|[!54)(jx ×ABN? }k]r# /٥憝8yk̓U܅;~As<0z0FQw\9b|= ?8c409aH8x e+ͪ=˜ MΞu%@YCS]2)zd㍈[$.^L|PD"i`=̲ "ĭs@Tl g3 iP6KlLFҋ4* 71"v 96{z[QU'>7 kb Kk5z\`. 4Z<@7lNg^P.-{>{Y΀\qecrJ33Rq\րhI_#ؾQdfMhJV|A~0}5"g.aVJ^UgyƝK?bT?ɐ}O0oaU gYF2LRC=\ 1#sBM\70GLyҷ톍aEa󾛚E:Mlpp`FX Ķ%K֠\xPBu`$Tq#Տ#MLJԬڔ:`! \Lu2u*)|eޙ\HfkV̒u7yY\p&v%ht8bUޗBkσu浬c ߮Կ= #.|N.)UDSgAmYdV+8`ϟ g>B޲,ݞ]g60ձ]K^5y %!V*#BC_E;gg|G[ivsJ~3||2x~pbwRH(fi wgW=8yT  *~}0Ey[CH:T|1X7g۬Hl.U ZDb.@Vjfp׃98)7!ofp%|هģ nW&ɾA"tL"n^3ǐzRBFJԃÄŖ"J㫷򄹕GVs1 \|u;6Y'}84Ij]^Mu4/GEq a:Ѵ}C@&i㺂=y{jo_13!n->Ӟۂ6P5zȚ|ǘ9 s9p\h\2wyChtgQx諾Z_5-\&'4PDtX"Х6jGCxkl a+iK^ubs6{a N+_F9Ưd 䙤)K'7bOÌMHl -R}u߃`<"4ЃLks /pU~'@J]192IV;b2dlj8&=V,8G{%wtVȗԲD HS݌͋iR%]h(7lY7՚G0.=|GӂZg5Y*3: xA.r?+,V8~~RVw$I\Эǡ[u(ǼI4Ԣkl?BW %8xI[ OnI,H:}Эz$f,[Vk_T]ҋX~#ey~V6f1&ǯ;P"t\JŭMƠxOy:cD@f"[CudJ sFC;f}I#Z^M{L6-?(BuK9uSqce{h,eى\".r%--9"*,iQﶾ8z\gh!]D튃﾿@x-riZQy24!^ŝ{O@AS9mKzH{-O|_mtYy2\?8XTJ:SMyh­21ZUs̤BX o<؊(|,3ݫnr+]8]jTENsC~lQ;M(>bGt,q$$b-:mmm6)zI*Yyf/p [[N.Uh6mу5Lt3ھLXd' =VkŰܔ˄&%$> 2h |ea,&gE%XkB>WsKg4"ؗ]uL7 AUyzƝdT}^yRѰv~ gfRi=O0hNueA[An2:C¨hy{X_vPfAfI?Cީ(5aҧj7/"&DZ`T8kPӹt22F+(xzA\qZnXrكqe`LF^șAde 0:2ݮ5jq5m5ƒ|m%g m.NX 5ޱB_u`\'8‘0F>SGN##>=+ }l{+K͑:& /$+-Cˮ'R1 q@ZS+|s urۏ(ZG_$ٯK^|N%<꟤ڱ'w *2* 5'oנ{暣-Q"0>("yKB|Z!0]%&;OgW^v$>HvQBkѕ(zs(w`֏*FGR.$_Z%ЯL%4Y%] MǏ/B E/jqeOTV!oō(ʎJUj`HU)r i3xJkа%Vƈ\nLv[މL7Ͽ>K~UB/G1t0 W7PWcfz$Ӕ|hlk4 RsU?/$ 4v<[52aБ>mCx;*`>ߟd:܋FdJg8\?<06.b?l;/P$Pྌ:3O!79"ν+hJp9 F q4sZX~[;+6P4"sɟu Hs`*X7EFފ=|¿MSmFc:>.ؕG;0 g(ԯcpR%+õ&U-,:7)i\N2BiVKX؉²|钜0G/}el1r,A.ƁN/+33je*[90mO8䰫zE,6G eQT^J"+lQb7|MDG`M9w߾#(؆y_Nme_x*C`Pݙ&CAZ<ʪ1% F"W{ϔE=2hNq?sЙ=zs k o<6zآy{ BӻT&/`Èk_i7h0;LG<r]Jo 9hIid=JJ=q16%Ŝ5V/a`\R8?Z,|xys ;ΫYfyd#顰tKֲ[61GU6.{ 'uaBMX>'4E-Ğ7. Gx.{VC~sp-&nFV`_Ӌ`KͭUPbTU P_y?)QNgċőNy߄ʝ:<+ڢyGnZ)(2mB%:ɳhT)-F-sC+EQ4wW8twm.m#CȆL.MpRG9K]bϷ,tLT{-v+VZԪ.CAT@zk=  ^0'hjߢ83tAbEH"ԑ1}`yhw"ssqEDo3$ENϥWIJ;ݩI}GqCcM-q^{Ll0e$+,1_sFG"W Elg!Yu~􁗬\v@\ Pq#-l>+=}-*hሪX֧Lu3"y&;pQsWTz5>D= <鷦]EtMK= AһOV +QGŚ헣ϸ/ SNow"%3ZYwx;YhH>X&Q4|:-'{CLI#kȂ*{HNz~Y]M/)[Z6hyCv]H=%lPlBmފA/yН>IDWT:۶H 7e\z1$4뾯,w<ĮjޯBB-BKYx/^U:`J0AAߘ{RwV^~M QH"XJj($ oF~SfC 6VfZ5Nӗp E=Gו3ذ!X *ťwܒ :Ia5&M#L (#Vi}\2}"aWԒTl^$6J&@/S4a_svEpQ? ~\,pI329E{bwl>.0q@v7E>-4#uQㆥ`>1)) 9!ټmЛ@P"8 AY+CB5g1-1dn03+.߅`){p=)=C93FzFĴ۽I9u%oHSy8Tp[ o̓N^2Yum+_BdA` BvowA{GiΈ^?y[?0 9VQ~O$qo_Mq#CrNvI8*H:R89U6H0o>e&ĬT($murٺFLS&_x%@n13&eU~g|'CﺷC|Ģ׋.g:=ߔD#D4st4o~K=(بsmB4+|JKc9}"MGc4<נJgXr㺹D DV;S_ Kd wsEP }2)ezHO;xwX̲*lmĊWtidZ#;,mCF -4S+@Hcv#B}UYHD>k} BC.P6쎃TځҜ ˏEe?'뿱4RyKaS\K #t(38cb #Q*F%s- 5%M5;|x8Yc0YZSWYUí!_ޜ 0&cZ(yMyā^ekh|\HE ̦a!Ë#{2{Z%{WPxs< 2$+ G&K+Ԗsi%?v/d+ s, ى huq5d̙O'Y^nI;QJOW_YO 0Akԥ蹹|jz#@:*M /yK9J]M\z]2]A'vΏڮwb`!.- Lclɕ_܅"Ljm7a&@辬5G0˂r9>d-.v5:٨B#-^{APLqmrFATQ(1;)2?^nD/( rCu]x ү\j 4SS2f1svX+._|w$L924k|oAg!֒JiJLL0@pMPL} JeA*[îrʘ0bE)$H U" Ge_E5+À@I?tQ[wb$-fNƓU[K/ pTw૩vF'rH\}byyXt^YĽFD{^E%2{zo4J؊3OΥG{7im.GN>J7ncx`3Q\Hc{'5J8V#GV xBF7v2?篒oJ#u~g&%t hRL{pR~FϏ;!FnV~C%w~%>,_7H gsPmnw Un<{c!^>fsвŒ^46^ǒg.),dO-*bqo* ;̲ԫ-ƑXRt+pNl5U/Y:CV>ZO {^n% ѸL]<>]Mno: A]i'56I_sbM5^in vQ=Ɍ[R m]J$a 9`8NHR~xI^쥳4|Zfn`O=,w! ʅƐ044ޣ/:eri~aX8fr%.o_mUd5i KYOa"k'MYqX2[uBD°U'&}xoɫ*OwGIH`~i ?aɄsFx&yBՔ1֩C˺&Ցh[wDWR&+#Qϴv ڽI١ӜX5NSX_F/ʜDjKxt莩<`mǠf3 @3H("W,0InXhry'闺6g~ ;X"K0 9^8QoI,Gݦ?jx9>{JtfSJkVcp(0. Wʴ }Ơ]JQۂQ:x◩iF0RiM$6|*5rRUL4xUca#d(m6U2^8\| [/`cMd~uä\=X l멍$Q ow@n2.謧Kl8=AǑ5&.~fH lbtDU`t&X) K,Oc`ײZݻLt-cbƘ*f'joXL>-blFY635R^k7^` dg7-h_E]O2^Kc.jrQ- LmbqKO-zD'@k˘.ȊK{rʩyZk#&y8u!r~$ MbD5эGـ-":&$ 㢍s\dyE\ y)C.؇`Ps$YS滀{{u2t9$my_q$UcNSJPg~Օ[a+N 39 |%S_p46a}jʏ:Ϯ6~Da=7;#ϥ`ƃA2O$]58<ץgt2W/C46n7 C -8Bvs:.b@uoZtĸƔ04n-#DX~BwM UUz{\<뙿zI V'y8psuum2ԃw5w,K-..1mn,sԼ\;"YOqh$B^'#(("_IW)TiF.30{&qc;Dql_K;n$?.xʘw_W޾n> stream xmR}TLyQ{?lhjԘhj0[s3stT,-EZۗ|4VێJ"16% mB[vo=g}=>qb %Djʢ39`bd2ζrt㰔@0OJ !Vpc2YVq$JAyJ)bJL|u-.M+a D"JCa (K@)9B0A$p !4! RX$_[,|((lXNhFh Gt+ @28 A!zD Ґ@p$*R h|L0(>GHd*U!%dR Eb$AMZx#!DnIO_0Tq"<@*A Q9!hXI~Jqh* h( āp&}Do$|b-Z%1W_+8CCqA&}Br&zKmU. o_3 e (].'ڡfǁEaʪ% vGm:oy׽sg=;4愷M+m˥=h6skɵmy/e>Z|HPlQ="&c]Y25;*Qf~`WYSeܡX^C79;R(&nHSfC+#wJ荷$qGۓMbZDyYVI~Wp.G}*<Ŷs =MSfYK3OCV>v\8wy䙣F({ :ߑli(.^׺7g!*is[gR mMYRz)Gؙ캙wߣ(#+ѵfIWDvuOЃcsNyE3^eo[_S|EQ3NN {k.pX^YOMg^?#=>(7u7EaS{CP>77౲WR'_vIͧIjkr(xIR5vk&)hٶ1bWw6y*dS۔uu߭)2R]IɈo.?ħz]PƆH kWVCweB`ʎi.0 v )ŻV)Uܸ=j6|CΏ endstream endobj 67 0 obj << /Producer (pdfTeX-1.40.21) /Creator (TeX) /CreationDate (D:20210717115028+12'00') /ModDate (D:20210717115028+12'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2) >> endobj 10 0 obj << /Type /ObjStm /N 48 /First 362 /Length 2400 /Filter /FlateDecode >> stream xZ[S~ׯǓJYsl+U`cl xXt,$ί3+j%ad9'!Uh4;__g(&ddTLIǴÊeZ`Va10$Sy-,(QS*`Z)`i F34t} a|:8FB`Ŗo2B2dV0+Ujb XǜcIgsAy! ϼ2_ x>) , B Q,XgRJ` q 5GyOE?hZ2 wqQo'?a;Q`3>Sgl`#_~=~>,gVSR~6nSGq落uonfVf FC͆j间[iڬ[jĒGٲZwS#QQ@ltFlIcZAZjM\5߫[R(WB#뀾_VnvXu=jL|wmiN1/m] Ϊ.(MNH1v8hLYSWTEt D,#>'kĔV lM*ݭך{hUY"HxҫiOI֑Bv;G:G3dx}䇙Ղ0mV@ [aU.4y 8 Zb4:#Z`2CXɼ%Ǒ?Q$>?c1h=H)]PẌ91,Bƴ L$l.Ācս[QKz$ƓiL+ O%AK S1)cg>^DW&^QG%,$Ud [U0" *Y ĹKc˸ Us\b LtLi^'-7 o~Gڇ+2*82 ?G(u‚4<})v-1׈`T po 1,.i6\!`oӢ>dDҔ°,IѲ91F~;,&Ŀ}͇_&` W2׮u/96zee2l ݝW/"lNa=]&lфM)[U麪K%\uW';zrpz.%ߋP3@+ZUJR$~omfeo0Sʍ]o_6P!iaQrm?Yⴘ÷>Ɠtި~38t}U4 u^LmK_zboԱ?"vꭂ}ӆ}EZ "AMkU8IݹUnÃObmi v~/~hz[ԾjX[/';-=7F6(`vz1s5e|/i1E|>u/X޲Ƿ4I9%u|~?O`6nx[dCxlѴ%Z-peM-٦-Ke-n.uvivK:nsˇpzAŷۢp']g o7frRskjrѬ?,CoKz{Kmq2UrGJdN_uLoUe[3h-aCV;Ore'm_5 endstream endobj 68 0 obj << /Type /XRef /Index [0 69] /Size 69 /W [1 3 1] /Root 66 0 R /Info 67 0 R /ID [<844B93CD808C4BB20C3BEAB0DBC7CF74> <844B93CD808C4BB20C3BEAB0DBC7CF74>] /Length 202 /Filter /FlateDecode >> stream x;NBQᵮ.oQ #Z{& tƞ  V{R@ 苞?~r#D@{"A"E'E,B!cY"~ ß[QE)#XSQu ^6vFuN,W 2q]3Wxv]_Wܾ"q'78C  endstream endobj startxref 132996 %%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.pdf0000644000176200001440000040342114074415510015161 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 2554 /Filter /FlateDecode >> stream xZIϯSYe}A^tp\=]"9CVzh4ٜEQ|ɁC[`1BIkJi#4B^V3Yo}|ngs4v3y>~_Qm%hU{+*Jz &=llc젭 wMZhoy8_q[A?i U+ZR2Jk'+IY\)J dYHaln=e2x칹޷4_8̬;{p.;* j=Ĉ݊p1"4 3OG^ĖufEbh]Ehz mc4^ tږXZtC?HGɲQq4 ۱D/*[%{P+]o 7̓1WL ]F2@YU2;x)^<ߨN`t)ndO~p#,cf#Ta)GGtm8Җ 12zy1S^j7q=*ȾsD`;2F3oeς`cT8>LrDH7BRZ1.re A Q`s!}R1f65# :z@Na{mVq!,(6/،,~{<ԈwAC z 3>΃H׈>MDu Rk8O?nBn3I8B'6#0u>q+\k"I$C[%u'+> <̈́>D498* {Hs_ŭFX%4tm3wd$c6o<3"LC}'꙲ς@Qf*Ayn/P\.)l* 8tUC^[S-a P=mPSЃU?_,6! . M ޗ{- vG+=!WV; S 4o8y̆\d GqOOI(ZN<'RIa۶B;}ʜ-s;2gG\-HJ8FiN(TNam46\cv1eI<ٵ blu"/xSȿ0 UzJkGqƀL﯂s\a:IzI7t>Wy>n*L.kp3]3,FvAnK.NlGpNɓ=3;nrLTZX6n烞(QAM׿̂-GNhKa:!97u&sf~OUC1/㎗0 m9Pp!n?2E2#BvS_ES\U/ >}} F|)RߐCF^gx<5'%=m†0=WJ>ب5csKL2؁C؁ӸRNH>_0Qe/pngTЌcQ̰1~jClٞ9X "GH^\&#)mi\&> stream x[Ks6W*#x%κvV\LJ##U,#ƃ$HH,eJ(l4_Z]}u+UA)RL&nVXެG̔刖pgXh9/7p_OwXJ15-|})t/_5#Y_WOmZ-o| _nߛOKk1j&s3݅@1/&ț8h7NgK?Ψ;35qPS*|Yhϫ.do?fX9Ygo'.Y1L<uZSl?*^37;{B] Dl·sj1z߰JVK)m)5AoShRX 6&EA؊FnjDZXNHdm06ϨQfpHk"jl9{G.fxSGYO*k9fd0N*&df-ᕌb$&>Fq\nC|3Ol$U_E'};jLj6b"#Kjų"R1ef˾8T O4ŅOy]Lnp?I}D\|3?&7?I+FŸlk6y5P+{ujY@"QQ q AU~@ FDe$e"^D`l,߇zhRGbuUg10"_@NX0ܖo]}U`, 4]]SU!_\U)(Cտq5 ̦-$V'r`4N[msqqeXE]ӊ GtO0& {\DaWnj/YvB8[ْGV m#sA> "hKU+Ty˚:Ŀ `n-KGB 1&;Z2jQ=9Y$^б&kcѤĤFƣeMg\]C^^, ^:N$De捷q!mEW{%Q X!<)Ӿ̾?Ɗr0n Sv=%S' GY8\v3EtB.Q63ŹşLfz/;j@GtbAL'PCCjOECyf8UPzMRLPŘIWRP.OZ2y?*$ӭA5"qQjwjlT.T{k Br@uPZc 8{4]j ˉ ̐fOɖ!2c-;_6ƛf۸>nsd< klt [ښo@dZ>|BϙSkGw4WMWOaI}ξo[^!ζ/v)UeENаn6a<01xFeTbD(~aתb\FvZpGA625M\bRG9.Lc KȍAݧ'b)sq UMI8{+.i#=kL `t`߇()1`եÅǢSZˠU_B"dtYL4SW׃_q|?G^c2VͳlN5mʣ%E)СܮC鲎Bs9,G@=6mrfOw$(00b7n;;woW',71 (Ke`Ff¹-T`Go a}ahT5E9ik(=a'ݏj2#e Y50@6[l:30|xFz};Jt=hfV[֯:dL5tYעkbfWInLtIta}~,^>9%V VR3II^,a2k {eӓ#c(=mأh-*Q4@`G4WeB r] n7av#(2v'''^QY^C*@ˆ1--G& e endstream endobj 37 0 obj << /Length1 1739 /Length2 10371 /Length3 0 /Length 11475 /Filter /FlateDecode >> stream xڍP\h,4!wohq'@p $@!kpwwGf̽_^u-kvZJe5q3)XjdeH9Y9hi!6h`G'N_`g[@yvvBR&3[VF+ pXX:?+2;B@&v&Ζ` ;{Wz!Kgg{66777V['V3 l P;]fLlVƊF P8)W;8lbgv<'+ك4VӀ;gjkobClw2;߆&6NgW+7ȈL <'#ى bDawYLjk svB>)#l/0ؙ.ŞMY fgg;Ȓwxu{?xCE} ?4/'W0o0` ?џ`?!=~3xn/3?/; Y-?+['!uxpX8@/>F2+ogmϊ]j߱] pQoM qCM6xeܴ.<vksh%6fw6yq; 7$q)CAʟr3f+C / tσ~8yn;j{8y&&hGL/$ha\N?`Sxls9sy ~ٿ` Y\ao|Gc, s ϓ/` 9l܎DNϕ r<'@A.7|?O0 B+_l nh0x8b!'2|x)׉3&M!6KX-^(Vut apx2W,bޚm 9.|Xyxnek~|PKFmi$13  #;8nB,~g2GͤB:S; .1k/$i%,ް&hPW&v ,eNSlãiv;h(jPhKd+J2_A|oa͘Z:5ژذodG0IU*2] {@u{'eeL]ρ\Zh^4qM7PurSabeL a~%Ș0\o=]p R͆$ zEe[ Foyk+q9du#A(R:# &ƽ仹Q.ZPׅ&-f_J5ĚzweR+2XqbJ{7_|Yan_2f .M?PRt.~v exts-y4dCHOK6th+NȽue/}wM.ޡ^}5}ifd Ǝ(U}当 h%,O;ntۨ1@I[5>p]N۽ i ptzC-\t^:rb޻z| M^k &Kį]S0`a Cژ)bBS&KMJylqa;U7MDKK[8Lh+$Nsoj3z_D,ةh~6`9܍=qGs3`+>{חwDܖ 8}Tt9+[5#1Xa O1l.#S_CJ?浼E 8³%L]KꥎS|Xș=Å)yw;g@*^^h7C閂|c_JN۲{"Q) 4ҹ,Wރ;⁻Zoz̘c],T+x BlZ?Ke^;#Y{Q:URmŮ2m=xMI2r-\mhQ>?\zOeR]Vd+FH$RD:e($Ô褐؜*1>(@wD?)<10xٕo9[♼1 BuzIz3n1t(pp#U*]YշB{0 :1C%fxu(#) i[d*@B~ !bu7v›i4I=ԟ[Pk~D 9fD`A K.yޘFuЃ=HmɎjE! ̟~ČGՇ`*7Nn ɣH,sWIeylVWbTONk!I \o7~je:.Ei qB5iy$"l8;U6nGX:p_bt-bEc.M4y~YUbw13seAg:=FrP~>SBQP,6\"$h4~6OWTSnfh]e$V "5b b$):!SJN]xvw1=O_hm/߻t$˿عUN2N@~ U% 7WԎBrbK`Iq& ogv)J`l㸞fRQF6;7l!D@eʓؚO!="(AWI7IB.o")5t:՝%#xkcLEKTBO~@e[);R]6+hq@G,k8Ī'U5L!Nʪ$cLKRh~0̽JZxH,#QO/9e<̄ Ybv+iWOfڑTcXy;=P8WXBŅA-9J9}HlN]qяty\Wc4.>--LCfQ 4|p.Muc1pD(6.O`TyaqKO,5`81HXwHZheKN}_ 'QgaH*= |!>\Gg8 }vs<]My%P4m0*U贲Un<$53h#+5wSIBmEWTEPpnxcpە6~eѪ ]YUt(伂d:sƧ|W1%l %xv>c`amW=-1gky餳qcoc k݉xr vGEov_SrF> 'u?1ߑhRN 26YC`ĬFvV̟K@HDdt,ɓ peFy);AZu''e&*x%G)7=Yg2C8j,j B6ŪȪDPG58u?*k契 .'s<Qx``Z_6 XڝmG)ȁ!1-AE0/RbpĦ lα`\'hl%[8>nψQX!KyMD 2{.DZ\됦gTƤG͗?y=ڹ_D C/"U=zl'-Ɇ:?wW+gf6t@X}Ո.kG"HFxgVwJ/ݢaD JbVbm!%_Sð)ߔns)/UqruqqaRӣ_M)3%nc\nrR7ލ+,/: M=ާ ynwRgY[%gC">H3tuu\*,";N%TD٢h$*Q+npCK_<ѿx8UЭ|:Z;o/zSũ#HmӔ% Um*d.j,i>#?!̉y.)͏rk _ N[f)E{ 3AO̎pc@-Ҁ//5FmHr&ےD%Lj8g9-cTBICatvt]_:6im^lHl`ьs'ėV: Uލo(Jܼf9d|9&Hpqٌt* Gi̗+}C)8fdLe9yqCe5n'n#CRLDd̓^9/IUx}7,XKz6+CЫFx8#aS޽ HjR*GͻsXw?HV=ծ@pD*!edܢHw%Jtm[_Hbm'Az/bfh-ԙ>v: (VPrS-l *R&]bLƨ)vȗ/u&ބn2=A  airy i[Q"|+V`hx p1ȨzWrHަ!zA;z߆\%VtCy*z-d59k"1#|^ .#}~Ii>csݫK,\ &|uI-1>lz8{);ZAπaQ&sRJN^|^_ăl%t=ϊ-bԇ+^ JU(-Z*~r6rJvr6{gi`7;cw7eQ˭LseY1KKʰc>ӽ~@ʨ6q9KbĪxIԢ7b 6 ,GEK1ٗ| LCHOʇo`W{3 f yE2mH;z<A8C# t̊w),ujn^n&T7}fM BzAkdYSİ=y/ ūș[$#֊ayAX0d; fCǁJCy $;s+q ߽H, VXQ=܅?E[47P4nDb1iy'ZWyO&ևy$, 5=@=Meǃ} QpCh̎R(I$V~L8 4.omGw:?.{EqFMtV 5iJ]y >OEMFVMQ_խpI2hhlvgJ 6F}iaXE^ɗpHrcOՎbk:=.<:w}R ~9@N=Fj9iL;6q|LX(m_)±h"98a-XA~AH,ثk?CÔ^ԍpJ an\`jJϱz͒d݌-dS偆Gx"BKqQ3;n:r^r":X aDz EtF*cZ:V$k,G'sZb'4)LfEh s[Ÿ@ڣ[dCih1(ՙuۤUa͜4=qyNtGƩoL)/[Fҁ hs]g5e%b] [;K߼PisQ(JQ>-w˟+D;`!E6%VNQa tV`MWqVȵ.XG{nh)Jk@T)SR{HolK613(8ZMәw:@$)|p52Q禟3,՚I lk>Y 7xqnM@Q!bX$ 7uzOKvWImmIH;|PʪP`Bq #bJoj~دnD|cfKrb46ҨBA(Db)@{*c:T Dѱ~(}֩-kxmXuL|H(8dWu71RCGSG7]`Q]$ZcecXY 'U'Ox.2[[#cef=HMe,^Կ0U–CpxstP!ӥ4ۅ0Ӊ@ *Q8*NUMF2c,]$Vd" I}~%JNh^efF9&D—珇ΐ3U$aCJK77rGG.+G?K.BW3s~pݙQ;nAi_lV[]/gEH~v^8zst.*`7Tb޵CW|iwHCns /իar,+w4iցi̡.&, :0Iay|s 4c (*/տMvT@RB6Ï I&3+ϱ3U_73EfͲWņ40Mъ23Y${Pj$JMIOĨ[7sNOu9a445,R.YHwng2M13(;Z|zp h:wbq~fo[Ru9r`1v&}JH W#~h0l{TXcvw5?!vȧxǂґnd&r]o(K{hj pi|Oj8isbfX/ʋ;mVKBjˢ?76q$!rʭiZc1厍/׼P-(|'W..x'km<,A.wsZFN)}Y.RJ|M,[MM5Kj)XO$3\x8*!Xßxx=_iyu8NZ9{#u J)(!l4#U<,9˧Z$fnwT"nC⎊xصg PB1A0/\V? {Kxve,HeU9L++aK!ΘYշ]}@o,U 5{*Tl왌Ia͌mLFB||R^";qYR`$W }%#d%ϫ+ iekF{:d -&Wn0ŋC3o븤ѨϴreqjKgiԺޏhpS쉶0SU2kXseц$ٌˉh{ &5ķs5: Z, ;L,YÌxT($2IUT}Anoc_iNA]&Q?Z./bf-J h?3zI3|=r8ukc~DDoEn0-pUˉֱ;^eP-á7"eo0͚ pHC1*I:g7\)yqqM}HH/`OD}FtoEq*6*$b[~)V9kE~Y$D^>Z[pz(%"xu/`t5,g^؋ڽXeʢžJAUb4rO})w函j_ W X4#f6>E&8k[#>d#qcǯ*]ܥJհYzD_Tώ0[sgu v8 ҍ&@4053.>c kP~a%1h>Ƌ H!98;tUF*&[e1dbGYFta#ј-.@e=/XpKo#?ۊflZ 댭$%1.dEn(l̹("i {qrаY=P n3)6bљ#:YN=Y'#b6ť86dI3-FV,dxSжO#W1v)h=ʄȿ;"g1԰N{J%WBijtT{j[P7jzdGsB(QCFGeјʳ&鸨^SQ<.(5iú&+nv)|ث΀toYmrG_( lpV#Z%P8zxq 깆fI䃗˛zW-6gùj[oIEEj8bvM6^#쯗eY+įv' a7@Rg&2'eE]dzzle6x0/Ƽ(dgb̴A8|~j :fyr>k\0i90Xj AL9i5=;/@L^}#KD%J2n/+uixlڇ=$?Z /8H?m(~rX Ʃ%}yq7]ϭ>\'QtAЈlLW4. ,&auS!0K,_m7L0Nd7C_CΟʼnzL W.Ni;gmyy}jJVSuFW3cn'Nvh.c*~-qDT!n\w-Sϛ|#ث)]F:R/o?+d<41 T{əw(0aQ~ ]a.lY+R` pz, K B׼I'dcwlKAE%>H&Y0Aj`'*I dϺq5I]Sx p2oU5&"}?8ռ, n`;]fOCeqLe2VIf` endstream endobj 39 0 obj << /Length1 1384 /Length2 5931 /Length3 0 /Length 6879 /Filter /FlateDecode >> 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 43 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 45 0 obj << /Length1 2266 /Length2 19152 /Length3 0 /Length 20499 /Filter /FlateDecode >> stream xڌPmi N= f&ުswmyJRuFQ 3+#+ @\Q†@Ir[@tv9e 4u}I):lV.>Vn>   "@@) v}KG9-_Q;3hj {hnj Pw0]'#3 -j P݁ LtƄ@ а#Wwt0u s˛.PvcXX޿ljn`hjXle)&WOWoCS[7SwSٛ*7HLw{. GW&ycYBh> 3v/NϿ%wn̚ '7ĿMDdV@W' 7/;z[3?GG[@?% puv_ ̀V {?@;<,o `xY8z12khH(ubbF#' q=oSпWOo4bͿ𿱔ަ3,,oX?\M(oC r_oCok`M,"fo joe_A.R O iG{lA@kv4GZ߮ 9RqrLM q|Xv!03;X:8#>Q.No?,%YRYb0Ao~J/YOzS8DAoi!"|voCb͛zzdr6w}?b;OGld0 ggKoqy|3 Vd [W7[x;Mk/G+ś |_}bߺm*ҿu'ߪw~ ZaR!ڷ9!sG[7Io\[9ߔ. Ͽo{]QV_oߘs 5׹y-_?E:ݿo) 4GXs0 m*J;.8CFL[|#<ԍ-Is-DsRњd6ۆ0?Qt(ZGOȨ!eJGg]_hܮ^5^`sģ%O{7SRҿ"PL̐ˆƴϖY Roq]ƺ &I)m2v&SƮn3ta$f)~eiJ;] Eֵ> lywZg Omj"'LhJ'i̗I ]:ѩ BcXrOy6  >{g*ba%<=Wpmc}05K{Y5IV8M~dWTZ*-a6lIԋDE1t|PA=o!ӉVf[lu~~`(.^T?]4\((uVۡ|G2koܸcI_@]㮀{g~zltdjǶ Go3C:mv` ͇5M%š~(9l; :kMu.1f;[$YŠv Z \РSb]B8RWrt@9AF4r.)t~ A ]~Nvq-0`8}8mXq)j*|5/(rLЋr`re`T=>0\5AZ=?d~$^0H[yIq&yGRV9 OED2o&fe)Kh;;o_Z>[ ]<kh5SxD;x4Z?%KA׉;%Td~f?gy7 Mq0hPNkeԌߍ.܋91iAk2;~lkӺ'=|u E{\]8wuܤ9sP;-dRƴ<ӊzb9D^4(=l,3ZU\*͌6;qgcC1wpxTlVIfrx nlkn"f2>#u#O~/Y-O148u.8{hqёNgd ޜY4|37!RID`1]MpêaPLPᘔSn=@ eo!l͵M6Cu@񳰬~݉;V A/Υ5rI(=U)i_ԟvhFe|v1(i ?찡A ;~4i-[1dYL{08O\OdɶTd#US`(9,-\ͶD!o]ЁD㣶 W͎K"1L6 aB׎+W`y^Qǭk 2a>s69IR#1y9t>]kx ۲rn9* ԂXO-xeCiڗS5 f6Ȳl@;ϸ:Z.T5T^C _CpC?UoE,qˬOyia+g%+ŨS0s Y-Te_oAAƨRfR1Y nImfڣx'tV,#T3~V]\P$-FQBVB(`Eio!'p! {2VQTw=<1`mڶgÝ|=8nUgK<;Zv7G)tٲ*VY(:QfDop--:QZJ֮"s;yxanI#rJV'bcH7n"6aN1]џl/=\ 1xOQ"8UyB ahJyN^b<Ч ɽqS8_t!g',09FQ`7W>YߖMW 7_k66HqegpbcOhOt0C1 ]:? 4H!KiXot Rb&K;tnMPwMߪźFSlW#9/i)% \$5X eiQqx`z#Q̲ibz))0\elUA>r(@5@lso0.T4 ) WԨSj玫WK;w.|Խ"MBϼ %"y3fkqM M4[|"1ܷNWZ 8X(0D_O\//!Ko]2D|HIb|ޙ1i5ﱼG0s rQI`2ͤRpьjYϳ4ԛHo9>UBi\+]5~&>z>GܴGBr"),yX.Dz彭AE"5 ^C.,;*ZP^ЁMvIBC:ylZN/P{'XѰ*QJm6ILN% vTuZ(`dֿDu-lKx.`]f|ud MiUT Q>%&Ux 8l SN y3.`oc IuB3PҾwUDŽp X~Xu~ pCS{i~r"6YgSvKu]t[E`NE43 _\1Z1* Q鐱,vմhzkW+O\^Ox:;VC![1N!^P4)6h _d;|;)%05'=tc;+ONe~h Xv ݉@BU`ϭDg-q0xM=c|D֯F36*S}dJLP0 }g3ca__'ީv#4l}4{:j[aR˘a<$ ST&BnC.e­#mFOQtU7K,ۿ8.~фoe5f1ޭ^*o*]SkbbCXͰ;D&c s"èkIPy|t[$me}|DkI(7فD3bս:W, K ^'1?H}IAdI9CF'΍ҹK\ G}jLD5(/D_ c C:E)˽V_C=|J!cOL ꛣ۞wZ s ?q\+_6K{n?VWxJ 122sDlhMv#^ ^7Zr?|S[[uP;GG}H+M6.3C>ׄ"u`h6?@ 7YmUy2:[}Ќߓ# %(_2e\,pIZP7v!ڭܮ@{HNoh?'J1A5J]2cW$|" R~*"ªtTжYohupXHI4Y-3-i@CO1{=3 F)5KbO_U""ƪAgoۧ \_^t79MIgzvņ@jP|jA՜CE4 Ir#7e1$3/,L6)wێT%bQصz0d|$jfqփmՙf,߆ yqK v5bqV2c'yHimJ_]ޅoX_azub@˲v_EOz, Vp+ /p̏pQ}aF\ٰNgt~ƮꜪzsf'HZBH{T _Y# ^Z6ܨ?Vj[S -!ͪ8h_12+Y|ۧŎfD\٣],PN9_BV92m0b{:%ρO7$ψ7]3V%Z&MҋӻnrzTmaRF]5cb¼aƠXV.9jޖ&׀ώSD`/8^1M{?.uKAc @j[egme2&J|ҟFU~#V7S΅1C7kw!7cޏˈͰ K#J,#LRJjڱpXoaWE aEBo\]9{+\[-X#u u1?OC͚7 Y'AkBIWnvP<2Ҳه W" NhQ/_9>\&M)8=H%߫,4b<m d?SqHʜ5{9vK1;nЦ9pRINZa"SI*V]9zLVLJKs vd=5G`s'T{ .ggk&UZHZlZgf6fѱaY7y}8ͧZTאU4P,?6bvp@C *g =\)s0+.NЗ]( o!J6實>v}y9GT_+q!0鈂EzD}){rӹm->CŮ':…zƼry"{>>,Z &' f7?^:met6^6W#T%ʡ$=.Va1ۡ폯l@\hƯ7k aY3EZ;5qRq"^>e7ue*P>I;t1my4WƝQ#bVM)ꇴfW }IVgZ_!}3búvpq;. 5J*@F7( ؋JpCAb}d9Y6 Qn̉WTRzf)*=Q1Mepm[WDxv7tub ̷uJ}SzHBuK] 8` 8i PJ Ffu5fs!$'61aՑ˩Q",WR] 5b&]o=0bX)(Zr2S+q,JR# up=28[g$.)'%87fF W+OѸWC<@15<F p;^U$k|(|!'!s:/h Oթ[~}I/sjob A#oou-K}N3Tz3Ғl iʥh-'xk$#%h,ӗ]SDPY^kSʖBYKZ <(Тr@CQ< irf^uL̮?LXǘ|^\Jr\*zIkGɥû#mAfHY[VvԛCDEE?L|![ toH3o5r|> \PL7%Ss)P1D@3Q3 9|JnxZ`aC%!]R wJDQ i51Veoo^O?vԁZU=0–.l: n٤sd~6N("qԮXB. L`W@ H¤jzssAkn]멓]P ~yNxPTF]oZ'XѩL sU}gX듹8XL %D롞ҐJ#8:x ܲxݲ_F@UeE% /2|.ǣ&{Q>.5KQ.+vIsjUrwmj*m0| .Zp,WU$fSp8to.Ga/'[Yc tH02OB^TEr{)_'?^3wȀcIҨ>MZpG6wt-IK [j%L;F}0o/V#tŒ1y"}ֹ9-iH&:/@U?ۻ]MBsWTFΑLkm^ݭ?2Nħ;DKg~_?ț +U2z>vș=g*=LcU{Q\< XoTne/:s.cl&n>& eI}[ ,X93Ib&.E0(c[nζ NMn nSɘR5Ԍjc2굿䌙7v/]'k(]]a/Du7Ex&{~3<䏻V%Glo7Yv1 !GϥV$/qDyj.1?x Gx1#.`&37B#h:B3XXɞ9I˞NlU̵E5})Jӻiկ30Ao$]4FHͷTXOjBTk_V|:4)( jeidv;ۦX*;hRJs?~+%w`Me:>B,^e}D ]0"a:}fSZk\t2)Ј=3NsWO3 û-V;LJt!3= g6︂ |O'(Ⱥ=6V$^n1{?zpF(*s@L$hl Gv[!ӘLf?C{z (!n{sHUMOՋbP\bc@rwUVW\-QQ ]: RQ|hJ; 24TQ?gq=VB11~8,Z#Jx١kNR Os0 ׬-a/bWuz8\_y BVSޢc0Wrz!2 +h@,ak7cUXmvx']_aML+W{Ռ-ETlpΠmHѭu ؂~#ZsL0;֐I9Ӓ#Ep 4h29y;OVa^vƘB2\{)̟a2˧~Wlny4Z_Wt> Ixd I֬"!62p߱~Y"gCZިy)e‡hKMcGb岚zJ:©#=KH=1xFaƨygab=pCw&>z$'DnM~P Lʻ-0c tdÁ4!9LN<]uKjt۞H=nǕw0vokj:y Wj Dv[T@ٚJ¹ M̃D6]RBA}k3@Tk GgR|J6/S.}U-g@F`3^<۽8"sJn!^!CUkP*,ʬeٷ@!@8Iy p .}O4GXgKr׮s-o˝G=LX7~qAx"ĺj衸֒y>Z +1s&OnTͬb;R 1a*9YpF悬^kFR2R_xy Rhץ i{nDwuJ@(RifrL{sQڬKnEKʱ7^3_.bS0dglOI$x:`$oYpHƃ5ʌ&OsJ'@q+g] \ AF3#p̖pfWB^:tUca1gaI9 bBr"-aVZ FN,t#4Bv s7PekbgVWC%o8|WpZ }%v$,4'A"T!?q({D<Hv_=I<-%\8:NOɛdjY{SVY A Ӗ{s f?0*B{&9=3iv/\ܗ<&l[E>"$*)85ʟqsS-tac^y?S)ag» ;O0װF`'0!jj?  rzv( kk1RKJMoc=5{M9}S E0mU `3ƹe#XHH@Vݢ]g6w`kܬϼlI/a'gtj#<Ȩ]^2W. THS!% 6ԶIF1T?^f\Xrp-2_}Ve@ޔf`i WYPXxt?֦W·,/b9Ճsg~eb=~Y0<2WبqǨM6&~L*^c'=GS;¬wJ+d7gV#+Kx2_ۤθkZl\\ߢS &S?{L㏣V&dk$`^ ֧A ejήBcҴg,3jpZ̳W#2WN4R2QNV{1)Ӥ&KxQuVd_S}8H6mw=l!8B~4c֘o F;{?kjQgd ˪ fIyJ턛!^*hFu?]*(:)W0']ߝΘ:Rp0)'NJ6#rJ&F!eؒɖ4]F/z\K I/ϻC:W?(DlۊY՟P &u1C;\H3νf"&ӴXwBhs7fG#3\*8˴&7| ZP^qv~0b"tAr9IBЯU*ɧTMWd`DvuF|!(uu|BGͪrM)gx;| y>Un-hR1-7cN 놢ݮ9J~ކD^aF<4!dVؖf^ugN ~/km/l3hxXRԺG |*hvLpw 'dMKb3"&]J9dGo%'.r@8<rЭC0|@W/m׼i{c CtH^l6@StA$j,|"mvY;x?X7veK+ HQً59)'exO58u잓Wuɬm Zcepq c=W m" cw[n#^_B7qZ<9ॾvj/DU#-͈ _[3?\e-i7.aHupl;j dC O9l>7* &5v~.\n QuJGH}+UrWG/A?rd:%4ardh芉>|P{D⡀1l^c~rtRg^ELF9;B 9>CW#dF-rM\る>qQ=6;iIV,=cEր% .ʹicCe `KgEZ{R77L" 'S7[f(^z䖃7b_}&nxPTW*^cm@X!t{h~'Xg[vN4Czؽ 㮛_dTחo0~Qlg1e YQ%y9Ew3zE'd"|uRe,xCٱNgrY,ȍЭ ӏ+vbϾOs"qmWtW>4CnOMVnQo?N[hD4KHj&r^|5\]. @ܐ.3)ʗиmia@6 JMz7[ױpS߸Di8彐;ƀG:T<=j2qTcBbun8ֲFxs;W e 鈳h#;w]݌{jvc$z'ͬy_\R5Fln{6ڇO>y9Qq0|ފ0WS|Wv-m"l?{ ""ȍ;AnǗWb |]Q'-W]@ؕ#ژPoD66 ksK 9r4т1d K(9:~ 4. J3=/3 16Ҋ-/V br::1ot2'?' 0Qo䫥$7VKJEKr-5fc󷙏 dj:ݨC tp{A8nN_JoEu^oN˯$ $,`2Md:mך ٖPwLt֩D$hr/OaIqЩ (Rg _̻.u ˎ7z agfG{Vz4 YZe,|,{bPEzpҔcNMB\߆2yI c5! ?SW& ZYaޟ[ Nx:IE!Z!7[[nd):Y0[0ji C iD sO%C:7w{@F6S"?A^W(}NnB}oNL5# ##kCut*O6ny-)#5GUfx` wr$U?Y’EO~qeɊK \R,i 9-z;e(S6NT hHvhn,2Ԝy"EEy~-oCJJ ÐLiBבʾV4n¦KhmELPd}gs 65L'6|##`V48Hve&qRp9|G%c.A.kT7w^Z1|(EtIFƧr}iO?r^p2&siZµq߭T`^P3<˦NcaC,ikX TԪ>oU ӤOऺؕmI$LIC V@ βс!S a^t'o17&M8e[~̸9x=^1:6t`@ڈO J;;yIQ uЊh~j) }8EaY;62n֣ %2خx?.o]6kt[Nv(8&h({BZhgg~sECϺ.NE먏YLXuI*=Lkl)XIC[w Z ~Ct8!="Hpd1PJ*x0[v;`^bnfFdq.2'J&<#EEdYG ^$ ԕ!~Ԁ5L ^$xT!~)ƘP*;]Bgݱg!疃kp+PDXLh[щ$g~&Ў`:d*D#Ǻp:sX&ULZ/Ii1,L'a_wdc%fh~+ OTnaT$@ 38*h"Maf\ho|CmݱyLBӊv(BUkXnW1!7/>ϬM)fbyK#@|mBg(hjoR}7/\OjB2HfTJeʗ՛D.9Ev23նEJ'|6zǨ~4/O!fWuh Rߡ=nrNdJEcIr-cޝB?۸DG%ɢ}pQOUQ?/ѴA_Shcoݤ8fov׿I9o@P,*3u1ezUԿMZ@[帪/j&bJ&Td:FP&T";[*ET64> Yt'@>:CK]AY@j1\L2=lP*%@u}03mk + m5mTOR^ՙ309Կ8DZIއނCU^} G B C/Xr̹Rm|Ic$mw(o])}RV#W (rQ3^M 0F_L|ŢYIQw(쓼?. FTmtoj*cu{raD:YOUDICdYx'@aկh'- n%1*TU,_0$|$U)0Y&8 d qo2UΟ+laY"Kb?#w%BV1YM\{뻅h7ԒO 'Ǜ:voXToZ,̧١("-(k-(8k%鉾Yp^;K%J()2kSkd=@4հ)mij5][v:C̭ÏmAF>,Z$Rѐ/tgp@NۥkBub5raI]|m$Cwj m׬7h!hhmҦפ(:A .ğ?m6l*3@m7mlQ-0S×Ƣ oN+jۃkp_M1TNgB13猸b0G drzrLBv=yԨ",4%@ t/ j\8tpY~&ݖiINՓRKR{=g|UR hTe|`4;rI"66A'6Y cyȿ ?͗LT0w8tbckC9Ω )7tOkt2/>#mOLbX|xVw EoWaw endstream endobj 47 0 obj << /Length1 1609 /Length2 8572 /Length3 0 /Length 9632 /Filter /FlateDecode >> stream xڍP.,8 ]O`a-www Ak 8$A.ݳս5U3Ow>V -6ԅC fB@@i@0gT_0&tySu\!Nn''C?0! l Pe(9@A0k``p @(@bzv\<+;;ޙf-p@ agglvm+w x2@ S+<PwAtVӁll+w"0`# Z@]NÅZvBn@0ʁ9IMs]ٜ-N4eY=>0 d4vO?O XVtudׅ\A2m?ɟȧ _4/oܞ-vw<zJOR@?k0}ޟFy,З,m;~HL1z/:]oPaW#/Vd.%)ソ6%j3ךiG_rpd9ĮϽ^b+|mFO~yj>wӬѺQ%o^?c=͝|TgF=.6s3s71 !9%~wi:l,ue}'dkGM'̔vR_]zB} U OɪҺg:WNmn>*AS Ar=%7>+pz.pxA,sYNM:/:T#ÊJ^n[L LqgK{bSd@\̤^g^ "DS'ger7j<231z}g-rG<,"4ؘfqח7dp6cB +{?r[kKacA sTgcxIMJۘ}~ȡ?zEeY։s~9u urz|Ox7;8;c{h\ m {]\uܣ ֫z߽V<_Gr?M %|2| ~DF*(hv|Q[{3IJAnP‰e-iȖ;=gs[aST΋,6mh񏢄^3ز%^P24GpטTV7qR?,wmZӷuWfП '0s5*=obm#'^FOU+&P?cRԊeNzLg~X:ߏ*cckѽA7eL}(b&XTG) d!L4(<mɸa6iD S|(t,nt%Re/89(G5POk_I՟\ ^T&a0_LV?}殦 d/{$1pvoAGˑWb}k[J9Q9iaFh(3u#D=x/ NZru[8:JSXf %O(>Jz0lPZSj!)kÑUk~?V]0e†ϟHt>(ފX,l=/E >]fN٥ Lt$s̥hyE_|2f(u-ƫ FJ!~|6|Fh\K덟s(( ^dlB:4|hZO*qqE:{^^(9%#{-xkD7䌦J*^q#Jh1$yK<|aH `4ϙw06nZ'n G~G\(5д)1&7q} Bȋ5δ86١.7: JM$jޣ5DF-5sDQ yRy?V6,ȑ3E#}R8F`ic|6DƋ#󙻶E霴xvs y- lv7' p&xnYҲ u@'iH8tLGK2Z^"jv.a\ w(>f~-7;CG0P,nl5pFM2Ϛ㥢fȚ0J/7#>Ym h'(XGEJ ]~_AxHdr?<%_1γĞ_k!f|)?s1`41Taj-0VJ*Qq; !$ a >:7ME7X|.?ec[ 9 k%M>M .rg]Jsp@eJsdf(l\Hc'Ĺ]N;KNI~Ly(]ۂyU2xv}$ ohjnNBM]Rx|mxAk j~JbfT>8zLP5oD@8Qugz; TJ͆= :KLV%ؚn0x"&YceTx`K ;Nց%<,ut{J[|Hm/{m!I(CyxAƛPVhQ|A R ucq ĚndTZoI]7VW ĭKԌfxQ:3c; 1e_zG\,692cx?d?HTxΈAR4#: u:DW|gdƳDWu~5s弘Ś;A\YA{|].F3kxcFxbKcKn*3N@L%λ#a%qZ̄y)3Rz۫tu[ե|EB7|@JYcL2XSEbZiﴅܑ`7ao" X|aYJ&>kG?" #79D)Ĝ_WY $W.صէ ` $e(ƒlF:"UEh/ꚝr՘#p1gNmxS:YY&DX?1WRX͇h+UQ{SB5Qg@oM 3Jt2[.Ť::P^&9pam|i/GC%FPS2EH4f8c϶k`"GmOV6BW|pUc B>_鋯+oP-`ig+$X~֡ctYXkV0~&͎fV o&Q$B'Qb+NlGymƧj[ZU N?m!衑ܹT'Ă$`Tu4$H7wo}WJ[p~ZG<Kn ѽsp+eƩI%OS *Lħ%z5ڰ:f]OH{yמ[?oATC7nՌkuh aP5׆ ڽz̖qw|U!l{Z#t[6ae m]+tmݎ'^5WI5z:"!skDU+ń_rhA PG_Z#@ ,Inq٫6RX;>g̭4 )ѥ*Rh}Xr! S08 fڂ!5uVujwp:Ǭ¸çWΙb/L-=Eխj+`^1eS,-q7V*U@0@%)StUR??!/'2e:8bX8v^J GvEؽ ܫq* 7.">Sc [W%EB0F7dҷI"ln\nfb&#js>!H.,L* ؜D`Ăy?`*-)hjG#:x|ar<ܾMXǨpi|L?Ya1}@8FgZU붙?r+cJ_# *s' sb!** M6"GLEL "$:H,U7-]Or{}WKD<! ˼|~fُI)Y8/hrkMBs|M5lxo~:؈5e4jjT a7CUҳöOn_!}/뉴q뤐y=K{#haJfec!Hw~ 8$TW--Az čќ˹ ;tƧ+FXP*z=@(&Z3^ҵamml_u_-$3vȂLkyMZD0HFJRzt:e /mn~U|-HU-vp/꘠ъƭ$ZWnpr|h Fl3jj2[{6DQ>'{bx7n fĘQCy=$J ֐c>K0zMґt'*9")t<էRKOƇfIc}]^"m>be3g:tND7': ٿjr^S+ m5P"^wuW&Xvpz=zjF&qO &2/ 3P %;#LS;.~p$Xv@b@gee1QaB58;/D 7DzI_ xSK.6 7kK&gEܘA>]aK8:<~!,)b8MSFnctXQ_枱xSPxQh\3?Y6DWqQ72]-.Oѩ¢drˊ Y*Zs0"Zo c=Ce4#rqk05֢-U^.\Djˡ}YXauLO!tB1@.ւk}Am+M%Sr3'ʹ#ku!`fDm3MK5OZalfR Fwԝ"QtK#C[aȪD)3De%lbuKN&,|5)VY)./:쮽սhdKj*ڷvomYqMM3 q+'lIlԹrѳ29ͧb~ت՚tP>"N8#籪b5"\GWA\OLT6/RQR/ӾzXj3];f;Yia𡥜rñjpe*.CV2e\;CЃQH08H3h8ihwHoY*a*Le d)w,d:| $о5J92Eȴ BHx{Fl{CJ{nO̽fk< gnCzcf;!}1I# GָϪe sY:۷%Dab׋x&.;}j֍?|a{z˼?Ĝ<~z"r^tW:Ԛ,i.WԽ!b;jI `*?͕"bڐ}#lNU.KOuqҾ1{Ҟ"ףꨟʕtWߖ/ή9 KBO;C'AjpR n|6fHx(`c!3mިȫ2qcg8ke!EM4RD}GrDB|7ߌHڏb;zfIS.8g!lٶ͍k$Vu`g0zPSjn'ctխ"3mߠ#$>W-mׂK )9ã\4ɲZnkX;8|LP@wkx:ܐwbܗdԾm7p6["x)CmGd5k)KB r^]o s(E$~{UZ{.ᑞU;JPP2¡Ѝ}wsSƒr>nڗXPQez]җA]ZvW 8dzD.wpP/Y}3ҏ'oi?zb^ ޿[x{(Х?i /XgA]$7Jqԭ麢Cr;\>pF)1 b/G @hP 4FWlc2^ MSB!9tNe*Ƨˎ ]hpz59F. ʹr~e4അ2BC>z?}W5#Dn(afs1mg<$3[BED:%לKzK#GkvruHR)itu1)cȐ8mͷnG9ƺɐu>PCnj* ^⾳kB9y ApU$ffg\IιFwCʅ=Q_ˏz^"Ua_ \5$J!_9D/u@&)ö`gRT7|"rӽ)VEHU r* .?=j:]>JZl# ,RpU-1hfE*~42{i@Տ>T݃IhDZx~n!b$hS0ߓŐqz؄R,rCUIFdAA:U׌:4;ɧؼ~<'Ȑ$1*9N\ )0cXjE9־ `ৱ10VwKdMq#ieӈ?kdjE7Mmy̸I5w>Tp_r'!:HE?C(nϼiBDp%,<@*3y_f@Gh͸1k.2+j׈Re|D /IҍD1| G.^&s7PrqTZF|п-} Ζ #A'ٌ7ӯ'XtL\5n] FS<ԙD PV,ep7}&MAq#ӵki.͇;Baq`}@ŖW%R8&ۿW'zlSv5ݻGAw~zܪAVL2ʰ ߬:Neo'wa#ʾj{)yyA 53H#ׂ,mUB'F5P_p(,0N.tdjWۊ(xfU+w]tHRZ-¦zVIu(Ǟbo .ZBPx߈;Q+Lۇ^v}4,-h'J2F}a=IWdrREVL r91Kcra~sH/wQ~|lŇKs endstream endobj 49 0 obj << /Length1 1526 /Length2 8003 /Length3 0 /Length 9016 /Filter /FlateDecode >> stream xڍP\-Cpi4Ҹ%[Bn \Kp ACp${ϽWWSƚs1W5=&%$ qs \|NNvNNn4zz-=o3 #@dl6s}B!E7{  ''S_PgA;d(B! 4z)3y}-\| g4s97ܛiLl7#/8@%gyp ۮHƏ#Y[}$lv[}}${wo s3gi\(P~zbO_\Ne?Q)Ʊms3vLۥĀod[r/Ihλs4N#0wރba$ڼ"5v@R'Z'(ux* [ZP}9N&urh .eۑDa!<smkT d4FAX_V7Oζy2uXjSbry98Rڰ;wEMMP~4r~7+ܸT[ݚ2kM8}GU|km$)GtIw]!q-zztCŰ;*psfeUxG#Pp4O}=/ oF@z&ݶwZ53T(+CZVHdoq-o4`ąJfYC;4} eɶ6[8(A. ɟ|jD׳BL]dnPˮuUEKF񢧌Ԅ<:Xq*y Ā]@1: ߪ/yp-;ֻj PF_Q"og?|%7p5u-&:)@'ވmj4jHJ<Z+ -tsR"P3B$<:*υ8sFzg8Q aӁ*#VK Cu/͇TxŅ[y񻝵{zFa d7q'\<TC4pU.2Y&A|-'>DJ.֐[!< B \%TB4}_l6y'я(U,H!K em ˋѮ9/ȅ|_v{yk#K0ۿ5h0֔ڽtO|("$7W#Nm,>+7@cq*' *61)y.q2YUQt3FU ǓIËu&sq3rXq< uV7]L 3N< `x[µI;"[eU oXJrh\lSVWO}y 惣Qf@lbgCdqi p)Y9 lq"Ed~WHҟ^?q(2]B%qEƕ|#( >Mw6s^_nҰtVj)zbܷ%-k$iϏuVLURV25 +rӟCP%FC%5Himp7LV/ځ >Q+3̣G̽ ?;'<ڲ*)_Gs ikp#҉4_Hv2 (g6%ڔ>sV!7\O5OG <Ѿ$CzSP8_[Zd/6ZN(tWoSd ~Nb ]Xa)R$8*]aݶgF"Wz"<kQhegs-=޶5>%y C Ѿssa{-'%b`M%Hjk@lH-{5JP#./˿]\|yzUoLDz6mZEf)>zs $Htmޫͮ6ũ&q*ڥBCQg,"2L%Lj "̳0g7-^ &@: 7+]TYM+OVh/)c2v́qHvFT/vR,+@"O=wH%62#R=+D&h/ SXlQrq_zoc=Ie77i:DSs9d#@^ V (J{yDiNr)͘q,n|HgAns =Em[Ā_ꅚGGc'UR˿|;>Dj(},zŨCq_^XFCǙml34Y RcT{1!6t6pyYj QTJ5 5\K%XTؓx3-0?ݫP{D?5]sGdEs/!jN/~%l}Ӽ8W&3m܉#?^do]zq^4g1Ԑ$%Mv[.'4c2kⱐ'tnwGKDzmC곕OeT_ZQθcXxh Ջ[3Rh؃D7!EZ~ؕk׊4R!pb*RM(D&6%!HO= A{zE^7{Hde2J 2@w6[#Kɥ\h$7Y>{W|>&#&ADʻ,(ʐD^Qjūx _Q$jE{f4^ ~lvT5] ,b!"*$ Lʩj,o&~l(LVOPK.--ר歲wJ"mxw"63=7 \xD΀:m &XV^+ꨟm$x%SY|V"aSmsQ`#M` tO+/9s#ٚQbyjգ4_w">/ UDGa=2aqM}.OTHY=h;snQF)rzVջgz_8jתAdUbaҍf/6:141#8U2&꾮a2PDY .|Z܆u,-6 z Gb5' M_U,I'eߣE S0=S/sblt+ ZIdQC\GX`$d0N}t$hP`Xig58>Ʊ/ם΢;v\,|=f{T:cSWMj52+㲮c`KP{pC1w$bć//X5t&3_c4rmy&˼/"_Dz;KM۰yO_ݮE)pF[[D5(ݵW Tm4nJ@EBÌh@uhfY "±iZ44%Hʔ])鹭Kk, >ewH]-yf5ګ7 @|z (p?% HbҌ; MWqГM`J-ʢtN2}HwYLBfS//HUA ~lӢ9P^,!ߧioUyIj66s~[_`D:u4DgФ+FJف%{ ,+jT^f%x7;,AaGȭ o ֝U"\Vq_,w$V ng )x+w% ouLIDELcdBa{!vޞb9n!4=_jOWc9IWn&eI![^/M|#MT@YU-BQE>:fwkc rZ;Ш9a}T`^JY},l)/Â!'g}'af }<^S߉CneJ8|ܣA[5>Z@h#XI ~ɻM7Qp1h$}QxTe;U«O?L](LP.R {D; ;/Ek&*bƟ+~P%VU eo%oe"5B%y%MyWiLa_Vz> }-ɴJjÓTG ҥAhZfR*02l*EGT7ZpJ68(O27lp2Mn0}3>ث^sO/?)2f1}j;.ckgNAL6 X*1?^\/!E,"jJ@tvqEʖ9K(1mfːQޚ}3NA/Lwo`o\{\bV*> tz'Feb`YĸJgԩ"PlxO^*+C#Y#[Dla"݄ZaKFLm<苮` Yk-'FsNԩn+IZ xϽ/_67_'9SޢNairBA<|?2;;ft3|8B`HENtyR"@>ςU"BFwxLtPEێǩܵY,յj҇FY(,OTU_ism̯m|V5qS2g&^iSW)EKKM_f_V:&a;`DQx]K:Qq?]h2]ƴw"%J9-g>%t@΃eį$Gť֯/ G ٺ$78&umGu"eWJ8T̀Y(:}\79560ڛ~"͚5"4@$JɔzlDžm3i/ﱔl}@}dUuoN8,68@mc#Tv/xjD+-oX^tJU?\ͽ_S.Švb}Wq#n1! 2 1[O^#ڝr>"0LeIaΗW>c.5lOdRbòwD}'r uIuXK a䏫 KHm0O븼a,RQIJawi8d pYn/^7pkKAqzBc@3.3e@3յO )A;;Ox^"pyu HH:l@ݨRb-0SLI' $?/WlH2zEO2M^̤Iߩf%U$"l ݓv>]~Nw{l >, ի 0 #ߢ])fbqC~.% f#cf-9z6n+ƜONdE}Q@H~bU)0R+_= QlïzW}ңsj}DԪdEvVyHm-Բ8io2 ;«O?N{aft5nn/4rfvw D{ S`Y%on`՜c2QeȄi+ྥ6':C:+r]>Z5i[h`JjxyJ |(x0T.Hq:4[5W16_`":=bJ>}"v'&r#(*'WՎЪ57cO[%Vo?ѸBv?+~Cd$> )o HH/2!=$O>Cr6ysQA0pIj6 amx @JnDo-FDǏ_Л57$VIl©:6o5~ RB}$YYK.T gD qm}úiuz&̠iN1k6L4-1H ސsHR4 E tV'(0!r Vzc/0B!`aę`.zξZpb^8$N3 endstream endobj 51 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 53 0 obj << /Length1 1426 /Length2 6366 /Length3 0 /Length 7330 /Filter /FlateDecode >> stream xڍwTk6" %%0C ) 0 ]Ң)!(%HJ t H~csZ߷y}]Zάk/ h~H P20HX"dg7ݠ ٍH " Ac|J4^nXIť@ @ @JJo%#P!" srFc|yw(fZ3= 0@àhqF=}|| (I}( :?G!? 0AB f0)^p(i:Poogsr%C 8ܠ@?7 v!Lg>=F `n?gYpE;FO cO>,G^FpTM"E H$ @= LNJ;pEq`Q3+(:ylоɆi<9rv0XX, -j[+-[k#!^<3u钬NT{ RUܱYOtj&ljfGEIM$|'Icb!xgcg!эn"{?@cmE% Kz1tx?;49h#M"a(@zwS5 wYK+_7Ln{EodOU}l] ƮKy:#_p'htQ~H^lkRpEQȳö [^XeJO`^yds&D.!qM%=NV%H0kiy0 bMR؁o} !/8:rLZ|WK~yOL'~l<2'BC/GM7iVH13MnN$8ބ, M*'Eao_6mv8;Ai`:]܎ ;'{NA^-Rok~d}'A3~10/[pPj[Eٶ_ KQ^6 U]M{"ʴ+ރPX4Y.avnT% +@FsDX2[8hյ`ڔ<;[FUu gjl{pCYǏXL0&)ek(Xf0䑘TQZO]?swǺ=.P*ztX }ROJ3>`;7:gke7Qu{9]:".K-HFʷ` U1s҅bKW! %A1*0ߦ_d,B}ϭzGtj 1i cu'Wʾr',2`䫩M.םIZ+౧Mg.w1Ww?=*:Nɏ pۂ!q$Py]IEX.dthkOq#b(LBwx-r5C+|#Jk4GOg_n3w`q`Vqj\R-is8Y "rõgw^Hm$c/$)&jDjj^6-U&2oI(#q ZmcЛ^5hI8VyFtL jM^)/g@.3MF-O>׆SpјTMn-**(ZKf h:դ$Pܸ>+Ak`S)N3ܖB\712+lCR@VZĚjدP2tϒX[QzstƕZ+DB+|[-'32qn;囲hm]O-rV{R/c*z$b5;+s&5N}\vi?vVivaֹuuϭLeA{4>H/dpnswm+$}"،t>tٲMS#n%QspI+&(D2>C No:3J{3ݔɥ:>Ȕ-$A,N̸VύjESr,"ߒ4+7 OnM{wS\ v7&*Pҹ29rXDNN6RR.$H}P/?t(2Z8>%9^UEgGt,%c @ɎRE[ٳd2OF+#sc2f%B#ܕSផLn5=G`Z JeIx:Tt DYgv/ԛ:*i: ~yR^򴉥\< >2x)R2QV YN\pWb :R_0n~Vt8ʩ.AhF!Y|0ТGbq~\'1Z]TCj F_'Sș,q*RSxGb6dʍleB|혌JcBZK JF8;a?dRB*cev<<* SI(si̷Ga6so] X ԟG\P$ eŷ38McZ"(X|'Edu"H6jLTN HVmxԂEA]Magɇv#  9mp#칂0 C|l+"&xJ_jHbJ +ۯɴ{c?{ֱ]BtR[bYǤ5z`^cCG*š e-,m:ƖޮyZJBW=h*INRg1˨Ϣ:GmFl1T=fP*v>ib?kA ^pՄ ǭェF_ֹOEu6rq?`a[e3$M8wWOmՖ)d )2d#i=YNDJ󉗉cxvQwY!dW2g(+z&~MF+3"u'e9L~H1 t?׽dgG9q3ܐYүCSQ7M%K89sIBt'׫P-[vm#&/u+n ۾61/4|+kcO8gq4<ؑ2>bquCyDRqx~~W}]~O-e,y[)6 \Z[. wZMdR$&`Jg>O_9}$/j n/;dpaU)~˼md|ĺO8pjk~<+#Lsnji'Z Av{ЮVf.,滑)Mҹ(<&Q&-tΔs@ʣ^5>Enh}xF ՚>wfb(TᲩ-)O*uSzބw-󐌷.ryYwȧFC3XY}pG5QjIڰń R@WBnen{ F={$BC\}YQ"Ec_Sa1 X`b-u.lzXw7_KIpoઁ'w<7ǻ(%(DX'}ZRNwX~Yt9C-&rvou{•h{[82SBSz@"}īl'/Fe.IL? 5Ѿl7Oo ۿNDRgfVGf7"-}rVp{fKc J[&~uid7Hp?J63h cZ;-G )U)&R!ڽkz?63 endstream endobj 55 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 59 0 obj << /Length1 1838 /Length2 11774 /Length3 0 /Length 12931 /Filter /FlateDecode >> stream xڍP-` !{Ck%A!@ᑙwfUUWuvgCI(j6JYX,v&6$JJu ?v$JMlqGM5PlsXXXXl,, ;$L\AE&D)pY~p~=?4fV^^n?@G@D3 tW |nnnL&NL`GK!Z@tt~S(ƄD Prӡpv3q^ 6 3k9z:@MVl3X_2_ٿ H613ڛy,  @YJݙ`bg; oj11} u{+ÿ99읝@692.:fI;sq- w G=\k;7 s{f ; PV⯘W6K3 t>0>@=`J y9Ύ.@:XY 3g)dwW3Oz w˫X,?g0s\1:_9lNvn/UTL@uLY; 0f_]R_A w-%neb,?R4Uۑ~??~[_uq~E&oU\l+l v6$I 4W9}C5~ v~Y,,{].3U%濗 `h$6NN61xe;"R^noӟl_*8fk}?zk-NaE 8# 0kW3]_ ݯ__C;9X:9X_Y8otp;uWf9g7?^ɺoZ/82qc_ ͐fV_o?1MRi2z-;ܣen8My#Is-Bu%}ۃQ^dhC?1"Ⱦf5t+de J!֭[{CX:.yh9Ӝy|r8gFb: w_y/r H>1%^lwlN]טcT^brx^,Lcޣdg|z x,6˼c>m ڽ({jt'hnnR҅-}Ca7抮qJ^[0:''gz#zۈH8kbOa>؊pDW<]VYz&Og$!d*M9p CQVo`EJcr`L7G͍&yT,L -#!;xaR;UZ6SqŰnʂsw'͇B'0s9a&~-iZDJؑ2:+;ŇaI%zT1=7PwR?[[4+dS=T͐h0PU lzA.#MZ67}Lw[wc}.>`^Dfޗy~r^;i+&QҦuYY:wۖy}415T&=x{ /.o.~c溎ޓSLe0߆?Af2\ZNjZ"i.x{~^EӘI21/%+Z---3B Sxoկ}-REs~5^LkVA"}{ L<Dž)N{ojf^W=穙ԕlW-[tPH%Ƒ7'xpwUXMηoz9~'\݊$򒆻5AK9> 1VcmJM|+kdLzt?+AoQp*cNJΏR`xlh(:VKNmܞ&ӬDGL?$u UsK Yum-aƻ<ގeGv{ŎZ,TG%_>[XRv<.IIh*GܪՀY</ӄ l]>$7R5b٘/ gX0AiuKO_SkB #zMn'9׳UlE5G8$,>б@;|ɿN X gP}t(nϟWw# V%t" ^kgICnɄދr/ه2K<1śqoc!7ahRbanZf|8u_>z9ukJV-In$pm :ƙ|ܷSB-xI/\-M%ܴB2 ]x%b M^ 6GUT_ gL(~Ew[,tʭqjv7  ;̮E }*c5:T@3|JE = :7F4:tjyjOW$y6X(ٻLSx?HY_tnSĤ螺Gh* D>2 r={/HRk9WIXNSޠyv~CRwDWbe|gP{$G>(1k0>dr6>.K\ 35fIoT5MT]]F+7A$W!8;aA=&mlMZNu[BO/ӦY3kS߁%$O=㞄;5dA-Q %$bŧTp< n7٧iK+} ٛ0V:}ÕbB1]s.ϵ/<4ŧDBtB $ nغNp=(H26b̷fbGj6~'ȇk$P="#-j:BCCʥjuSuzkO( Mp+;hE$ [s£w%#W#I8ZܶUՇM0Ψy@b:PglG̓38TYSKVr.9=GMDw`s@T>[`_}F$=aUNm֛~)FRtI~ݜ]@7F&ȄFi6U^$ Fʫpy6,3 >*M j > =,^]8Ch)5HFKr/8u8yB9:8 ^R>J0,Kr=ٳEcv'ԕow&Jp{B&_9E;*Ӻ\8dsq$,TU@P/NU <ϙsSQ5u }25jI=?5]uw]܎7|j@9@' ݔVBýܿ$cGQ|W@$}"<0QT'$ /m2j(c>ɹvƄr/8<Ѳ )/c>ǥx#´fk~fpo#񈍴@3@I&q]]䛃ՄYt*P4KBm-' hQ }7:6l[]c<,YxIXJkղQԜ0d՛\`. HU۬]m(k@7,H!;22\=/.˗qc ӛ/Uu&8$(=t[㸈mQ{W,3䎙NYjP=3#(zssd9)b`2 ='~` 3)*C6:'deg361 H5)-;PEIU S3a#KEkN]px{h` $Rw\IX[ON !v#ĽY=1OKRASջ旼{غ3J@ 6$&>vqx~7#~C ¼sa&C^mQ(۹pim3S8g=f308m6X[% zzֲ;p&p<q:4U; )<4sH:TB)@+gafNh}:ڏTX,YXW|x +R9X-$KB=O)7>sˌYtx-q^C\r"ƽrOjNB뢖X4-wk.x *Ÿ2 Kٍ5YmxJTr~IhfJLMk6)^(4 PFG4FP%"ˎ>|)Ʉ&.fo.w2'8 邫/QCAOm|ODw [?K{uh4k^o0OF9e3VN ˆKvjPby^Y{/3,GH#cuP(vr8axجn]6f>0c3]@ISK]{rۀzbh5<_SgEpq~%?5#>tbtI)[NLlEsI.STD/?F"aW}j^BE鼖ɑu7\I@A5)SswE_`ٖഇ爫_agV6bهP46Ý^|*i&ۘ%k[tEc7\Lͮl6nSy$Ȗ\ѩbL:5JVTo(m5BJi:riGфmO 4g"_jsM򐼇3 eUwT4E} +KbD!k9n>ʍ }v]Wm=Xf+pd:z7{oF.Q!EvrkR*>rPS;F76 awx5-:P*n<LG A q7ʶ~#Hm雍Is 7ݦ\ԁl9M'3RR _rc\RMx!ȶlOwtIm+dZW?QC3g0GvhU@Xw3Ѫ7W o?'!U.VpU)p*Bxd-0 ӏ:y4!v92ҸY"ץQHk!-? X\4HN羝A&^>i6r0@s)\=Õ>k xX1ܐh'"9eXa>$Ѭ 7 zBlɤqF|YoN84i O[$ܤ@ R)/*"Ѷûf/y`'Χc)Z5xH25Bm=G.j<ޢt~ tb"&U1(徠Z 608:?]_hxD [D_K WZ1`%UZ #= rpvvkaN{^ηx02-0h7&/)-0CHQD^Ζo3ċ;_'b#f6jUx|P䍋109U':4i6ܨnq/ȼ(^'7AߍhZšŎ v [^{ ;YbrQ]4XGT:Eydibog}Q 7B.Yu *&ǛBzJCA졹]KF%LV=tuҁie9#OBʲAn(rƅHHweJ%h\yV#f*)WgMwRc9Jd)'|K3Z7x h3{#6>]^OdC=X]: ʀdk-me-oH {M? -y_q|AgEV-*R3_@kUsG=oY8UqAu- 30aDԅZDGޛ9{wOYƆvxh"1;ړhwYl~-];.2$ps/||Rԏ]oa0ҞPS!08ǓoEG '&jw<5:%!ޕoܢ\YB|!r]M@5ƼOړoÓ(`TbHNDAjEo"QS~,\>ֆwZfK #UE!&4oT>dv7c%Ew'νo{eX)ĭWU:ibj3674.@i-%2* H[ùeUի[>'* %285SÙ)cv_l8E X_j]%mЗTf]ZoTJpP(&ζO|<͆ %MBڄ"%}LG^e+D*9%b~&1%V! u ۅ$ "-0@Kf?[ q~GaD) *'R*j)|6;oy)DSխ>BXL= 9 Qf❄y`Bs],Rc"mGB ѥyE<.R۫zU6D D؟<}ԭM{X3kٹOd?m=.u&w_ڏJL8J[#cjpg±,B٣"т/G0$eM")hᮒW}DӴ"tyS~Y188Zct%M=[l|bxb0ehZIXν\ij~;ݡWxy-%d_9GގAfx1Z-1Y#t}:qnwZ7A% hĐMKXe IA$Dr2>Y^VAKķ~ H m]?٦bɛv`3Qo(hsI6wݣk[M{΁cA67։1q|qtK]^PC΅dje4'[:ީߖr꼚Nת,ū] 36*%a±K^W6/^j҅n!c@H|-jԧ\,4ǬM:qܻ RYU&m2u_;xJf%wDNW* ])θ:w,p5YtX\b\;d=to(|/C1 DN6^Gg^}Sxҙ(#xL~jVgcokXn(x Qٙ(ޥy\Pxz!(FTi$H+IH6-iJ]>OH=иD;\GQᆨQ.9 eNu 0$*gx~?P{}Ā?l6=IЕז9Aek4--b- /Az#wH$@0z0{vjX=o#&)QfXMO\%O].%Hτ\aRh L2c`#<;2JnRϢ^}5B5 ۋUA Iʄ9WmА6YBmu0n~YN:NoJЊ6s}3|2.cxl=ż"\jC8:f[VcjTkcI*37i"{J %MFzSQip> LՓl*oAh;"bB^k你gnBzٴt#%Rtvj0wvXwêt#*c D{R[O&*.Ǧ#VNgx7Yz9NqOj \U݇r='@"H7Qj,V kο.37d϶^f=V:8ߵ!b} yu8cx1h`|(]1wR#L]Nj~\^JOthIˉ'ZKxj.BNCSYP>r@~96'qŝsDvwr;zGByהRy&>0Ah s)wO^0vL(miǸΩCIZ}s1٘ R6XI}'uFt]q}QSHE116˜Q^/KzyXuR}]l߫ބi0'oNG|DD]\^buۃVp<'?f`RIwvZMF%,ɼ #*Pj ,3 Mbk䗧(z[E&Pu4%٘6J#aaāA_yn7lPa=ZaU9T#LW:E%1* Mh G%d1p ="o[1|bT;Gt?)< eE~+ӻO{Rڼf~e qpW( PaRnr>wbS[:\☘72fqwrz_nz9v¡"O\l]i>3Fg)`IM^{ SuPU˜E\q*`= =? yYM@)AS)Ak%.* D!l8~:YG? 5ʟw]ο,?KmE@@7I`EPy\]|OW!$Q)/,X.шQ!P T3] z May||oZMR(H홅p$ڄn|' `jxnkp:{9]`w.BNZs%'Urj~{ler:wuK7%QBNOϒEvsgQa`t1i%TbԠ98|¦ {#R <|:{}f8LUrnfS Q qx7lW&^:2QK`ۤOG_Y~I\ŧi)4Mdه;W,?( K&;e;ǒaOe'[ffodj ơ9ky"ᱬ{@ܙU?,o1=0ե~Xu..n {[OOr9C| ?ڢ[=I{~MdT1֍WuzϷ!3-t?x-\[ tB3w\X^[S 򃟏Z+/,QvIr<*P>(jjXs4OVTawTʄJVch?0l t!-eo^McıFb|Mϖ,vSM|O-> stream xmrg4ju :ѣ D%.E13 3ѣN"D'щ5DF^7]Zz>쳟˥A!0HDT`n `P<V2`pb 2^ `@D!c ȹ*➋`+\7"=`tBTʹ @F`N6NH@ CqA- p'0h8oM8?Ю,Z-A t4x5â>_//u'!p$ A!dM m<?wt-w p f?wrCQ t1p 0YP_z9 $N醀#VB- ]O?ڏcN;z?<50 ⯽bP? \""X7Oa#i|žc4׻9$ #d |r o Y {igKX /(lok} (V{"B-XOΞuZjuӘ'OM{$ަ,}'OίmE3;1|KyzI!TB3`eda0$3;6/3?=KqrytnEGu2rHtn%MbԈpsڧ BJ ;`e`FX(8WD"Q/]*\ұaRƨoV@~CM…bԙe3'3'>]}TJT!{QyŦr؞{ } 2%.Evpz#J, Jc9u}-*;\pf4ѫ&wϯ,3o;!@ LGl** 7$WWpYQ5Ϛ5# o9-ͰEq?sHf =R=]q'b."_{88  8ixxs=e26R>-MԜy$l$Hr*ReK\w:(_``M:ǦBԲmhR@NP >ѝU%' 13atLjgt4O ")<u@VoYA38IG 4_?)o~[u.ᅬpLw$,ttQ[ \6Qb})Ŏ72K@w>T8~5,N乁c-Tlv#$I2<-fJLZ摳lru^Pd<=.m1MMf+km(=[3/71,(m}!\.·ڔe=D{ωM^ E2 !w/3+H6= M4A'Z,Dƞi*s\F. ONޜՍ 6 ۹,W!#%Xfo߷90 )!Us*@>i}ޟ|Gv-z C-d9Du1N,tA po%ǞMݩvIeʾ&Ĵ6flVk;;v^-YlM.#&l^D3 KYOhlu9ZM:IQtf\jwwŶLaG|-;+qm@٧ N4 8$ZTcg3-KVn*?CmY;S^cyס8'"R\R.E(/^,j&Ny[뙧}x0Q;>vdJKo7f>!ʏs5hr\TesnX͈S)lY,W%!%?b:I9;D>b60*/꘤p&8y\/+5D 8ǒܚsϩRXKIHdݢxN m& V}ih6{͎Q z|yń'<3reh;Xy3E ="A`.jbZ_+2f%vI^ف7Ҥz3q|Po_-g畈 eWGߚ&PJ/$/32pDqDwu&:`O#4) =lp7X\~\m+r-]hQ"eG>xTh "#Ud5i\*!' xAE@}oU4gnş5Y,tl:/IZo8io'"v){gdXߟ;ٺE+u7{</&Uiѝ*v|0l (kN1S#k>w?{Y9Ay|'?8*Yf dW(jP ]~:e!=0iټ౱]PEf-|ѝ6%~R)'ryhz`v,z5bphѵ1[$1ʪ{Jb~Կ s;_<9|9t*ʝX|Jy~>M۩^L(ݡ ֣KHڪzԴDjt³ޘy&m=t9+r[lS3΄QDgy+3f^x_hiޠdd357hm Oڻ;=F!}7;\+9n"jqK5T灁?"(l ,A]Dn,,fhaP)Feɻ3o52i@{;H8dg%lo VUÜ{#gZ#K 2f}{UZIݴzEW1M;7I^_w󱛍^1cŐ=!m endstream endobj 64 0 obj << /Producer (pdfTeX-1.40.21) /Creator (TeX) /CreationDate (D:20210717115031+12'00') /ModDate (D:20210717115031+12'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2) >> endobj 18 0 obj << /Type /ObjStm /N 46 /First 352 /Length 2699 /Filter /FlateDecode >> stream xZ[O[I~]ߤh@B.2 L`mr__Uc$ڧpS}W+0"$RF#^a=/X Yldz&cbVXl1I %A7y lhp&Qyo.sNx $|P(y#^x'y>!GBaF "cڊDR%Hwu {H޸xp$H"(Q,2t#ݿߓG_!_Λ_͚T8('frLaoN^a Е =&rTF3 YBBJ+ r%maO2V:NE 4yzΒ5F$(_N'L:i-^u YڔHpÔ-+XTcf޶.YQP)| }:FMǾ5RvŽPA)c6,1ȁɞ/"mR|=W0hs*82BH5n!ƶ23-m>A8E"8c(U9M,+etkpǻ~L K9.fj[XňEbbDW6G{AD"'Uɤ WlYW("TyV1S_Z Qhxm%+#yW^.+/lZ+`5[tuꪢ.F&-(Ns:uEB;r̤ .gF3*@;y[pQZek%*RAiqW# IY:'dGu*OP82{2t_=mRJ|ǡ +u .p$%R'JY!T yOe,_871"b#%eeDC. miDgj_+;ۙY΅6.QB_snCg5$E ~oYXWܒY^Buz]i=uZtޭKTL Tr1ȷPpXb|?)O)xnH{;d* +?P4*c٤e`z9W[hn)qK)_/\gA'UiwV]Nfz2^Ɠ~1}0>O+ v~=áw7zp_BOil0<:5Κ78(q݄X =%wCB!|#rpyLSy"Oe#/JH^+9r"r&o'{C0G)۝oGǛ4a4T#,UT[ zpj\^fCʗيLygw2?$]XץX~˺Fv<C6lw-aT-B~_:O^yeUT/5鍢Ii6Ҽ9>z9d9SgYcy'ȧ5@߮Gprrsy6jTCSf0g ?C|jf"QWU_ G٬P>f " fcF*456WfC6x-rJ~1P0TVt%4"u?dR'gtb b{[~$I]PEH ™8 c~QU~n<<sy 2a.E͙gCzE0˽mLY㌬5I~)cN|>N' S'`L Pë[!^웲Mo2,[ <:ژ@j.XWBHcIYbvH^9_y|jv59 E/rN8 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 [<49453BC06E5875F71737E15674A374C4> <49453BC06E5875F71737E15674A374C4>] /Length 193 /Filter /FlateDecode >> stream x%;rAsn(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.pdf0000644000176200001440000024443114074415512015374 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2016 /Filter /FlateDecode >> stream xXɏD_ɑH2f 4Haܱ;eie&y]vnHz-Ww^ډ͍>=LMϓIfIJ7',mti겨3} ?0 n G$OquZSzԴ4>+LQZ>n wpm9;B @$7>.=1I:33wpeeIie:g,LU)[f3GsҧN]AxYF{Ic]B;lbr.{y*PSD͙)euT^HmLSpdl0I{$E=y~@iK"mVH=njlpmkIW,;-&q+=(-DUNsde;h\,f &P ^?$# =vLէYvRw6H;Qe n={ h a;>뙼qCΧ! iQ N_Hz qbЌ9a}KlS,ťj͑Az䉱q2IRT qrU ๒e>ڸ4T 9|s)z^+1 h)8c-v3yGS1HK>) Wg%S h@۰LG -JUd% (ywCd|Kp*Ra> 2PR}NHlR䏢X&N"CsSy*Y'Bz=Ӡ{z#4C\ϕ\$3c{iR$V0yC^DsJd L>`F%c ѭg[ mW$@k_.XA?Kj^jZkP+]Ae@&e*i;%X#EjǶߍQPhh+>P6ą@-̑!&P6)^͇cW񐯩)Zo:/LYaRG?뒷 roz/ȝNx/4cP w771*횽o`(+4c!ʨ"Fֵ = F-%Yj:..hNFs^v'^ ?ml[Ľ@,2oEPJ>ͬ+ǫ:)lpFb&r 6~Q:to@[$3@ >O~ } m$zj߷:&&A#?7#/YiLGT꛻W3!s endstream endobj 13 0 obj << /Length 1453 /Filter /FlateDecode >> stream xڵXKo6WAsE-Yl (.zA8ZvR_yPl&MI| gypϓ7of4I]R#S"Wh2}HL+4X4Iڷ{o7*鶮\kLsO#V0R\ۓ,3%4\"wčka?ZfɯjR؂U o ?MUv”W\7 U9H˳,sz(KL8/|݃u \!9&yjJ@q;N:TI\]Oa < xhX-H ``At6`mC/y[ohҲC"#c޲~@C:OhX_\">`!qt\2fHqØWS/(}툼O(̼]<::˦h$Akou buCT΁ ;:+AE X8j:y[A"4)#1/){H_Y?<3~.Ìւ%" Ph)JRNJJ2Gk_RKzRT &f E5vl7x9 X%zS'rg}y` s#dG3*8#e,ʘPĄ5VR+4IcN+[`XCDxR/TrI1Ds Œyz/` yA^yZiXG,:J/z9Pّy}眫ju Up?aX~a/}sT~OԜpLCg@-.XM׼>+a|,b(̼,4Z %Be0T1ļK2eU$o*@y^o̤=o^d$xkplGHā9LsU޶wū6Κ!"H[N޾!&r':izORis3wͿRps_ElĮwSct@nCo$0>E@)Ee@c'pxMkPb wnrA,lPMRl?׋]dsHDVYgPDiB5 #'fkkEe+)%=); e)|XCU,J˃VPH8% K?^li nLl|ڞQ=HxxJ}`3ؠ) _kƛ; '|=m!=l`-dt4x މ7/4)o1(Ot ʸĒ[QUgٿ?{ endstream endobj 16 0 obj << /Length 1410 /Filter /FlateDecode >> stream xڽXˎ6+l bEJAEE]$΢Hmy<_̦^>+r 4|sRe_hPz‹U(Y1Q|5lɌƌG38W.sKG,13:l=KZ3f%l1e-$c;Yi @/>гT;~07<4_gY$n0jvzG`<̈'mbΫbd\=9k18gZ"a7g!ɳGLB'nqwS8tmFaF✕e~4 {*Ty|C*#JrKaERSB).KJo3QMw~d X?'ޮvj@ O2cmjNj&93]k]P'o4u*m[/fupzKh -ziLg{ִvk+Rndszs]喕vW[{+҅nJR6{'DYgX9jJp3'=Џ.eVҞY?%eEi>jO5;wamDE*sʫc)y:R_Atv=y) W]8E(Ÿƕξ* endstream endobj 19 0 obj << /Length 1552 /Filter /FlateDecode >> stream xX[o6~0RyTkKP,ym9gZ#HQ`y<㑿x4Att182!Gi2JFѯXxK[>(^\酫5o)(ți?L^JM +zؗW֊0V3fz.~|~ 2)8G!uA=uZa~EY؈\q( 8BEuT\*PZ‘O. zKN;^n=W"ދ(>٨%Sv)uEWZPΤF&kh3a_Fқy`5L|4gZR;LʼzdzߑV e9ݎ2gF3xrKy٘{KTNbhϋ@=2CF%a3,]yZ=ۦ%}vjGKق3MlnN!Ѱ6lV1P7Bu,F*GP!-q~$їa $czЊl٩ҌEn2 HI1C$F AG͚3v Hc$#!AZ1T&g0Q82D41;")-4m"*}CNDHcEbm ԑ w@ZAZL h"&@ӐuΩW׼@MXR`AS-B{uqGd@-{ocZ(e?-d{쳆#;uፑɏVԕs/Wc[](7bd !͡,P5j[5X\6Z{VNgBQVҖkȫM3ì%Jzxǽ{D_q!kYK鈞` `XI$!kɷ'a؆׎y1dNx;,@R//y;z:S}»B8_nϢC&Fsߵ36k2r ulQZNJ]s|DH sG 늉i*1r~9u/m9^g0t#$+Nr9szOu5M1bs4QfZv~V6 FY|>HQS~>ZYot]t}ckx#eC}u*l+EEoThcLAk:f3m _4ҷ?y <`; ^;}SPv("SX~#|(̬`:7a\MYrJ}jl{bv(xUver|]0ɁIۙNmsM#UJFk"8ao{rׯܹo07vPB$ e;N=d>` +z+ 44]v޻`tn⎁mN $~nO "RUBULR'_w]kZ endstream endobj 22 0 obj << /Length 1148 /Filter /FlateDecode >> stream xW[o6~ϯ0 [)u% t6{ uԘ-{ /#u()YlÁDs΅\+& +˼RD*祜,>Lf)˶撗:+{n>KC Ɋ%2 <*!SBCN*դ˵;ð.o;JU|:GR qYXث D|<03kC ޯpe^> 'ê~l(="ٓD>LeQHl; #x5gSĮ ˿ vl z;iY-{:6}8 0Q6"#3nq4VW|$V&,9͚~ =V1&M ϹbM _a -CH?*7brٯq^qo#8طi?3ҫD'[n7(Y(^s> stream xڕOK@{LlOv+xڃGݛz[EV;}H)Go޼ bJ:#^^;T^ɼ0 ~ݏo#َ`΋Td_7S7[kXp/ rygf8Ï#l!ѣtb{V$ Gpem2Vpr=b";DO֐נștC7|^G"ϠG OX=^DTe~,v endstream endobj 31 0 obj << /Length1 2211 /Length2 18172 /Length3 0 /Length 19480 /Filter /FlateDecode >> stream xڌPk.k Kwwwwo!8w -kpn5kd;Ꜣ"SQg5w0I9ػ22XY,,L,,lHTT`W[пHTZ g=?ĝA@7MN f `errXXxG tr $*qG/g뛛К}r3K jr@W+ݛG3-@ r/V|L@;&gK @ rvJ@ 7] lf {7 7{s39@]V[Xok`ebkel/e# lo ۂR L _@[7};l 4}W@*s1s;0mJ/3oU7wٻ dVv/;kcao`7+ s7GfM{HV"o$?4K+r<ͬ2/[~>$@~` ?$;'++l 0YX#,ow{Yf ˬ$,%Jw቉9x|9Xl,ֿͨ޿}+Dr|-%h  'Koش@;׿ކmj^ZE9se]o joi2] s7]-ۃT\[kmlNHzۜv)io`׊qr@/&!N.<5f&{7[z~ g: `70Af n6` A<,f?MOzS8[,[,AoM88l]?Օ |  99;9CMͿ՟hrrz;$hYej?[vۢ3eavM-v?7]Ƿoo pCe7-HǷuuGߞ>f?]x3 27/mߜ&iorӀ7m~ ۉavrcoyz8Cnov| gloߒS7K ]ך9_mY-7|.J_7J+oxpo|"Ms j혉ߏpGm {JK7"l]kgperB -Xm1"}_`V ygkEgj88m-RХm*YLm 0Sw0u"q~Vh^#_?Z%<4&\| lBoCp Rb,bN t63կWJBW3QH?`Z:Xʎsſ:1Q̤fh)' > 4!x3}Lk Z2^%k<(K1|r~n9i6]lNdأzu!W)d{Ơ:#G~- vWhR楔UP'.XnryA!J)] #(Lj %|\J_wfqB{ir7+K<;^vC4&G)aDblZueu(z(:ϑfHop-)8UYI֬"s;xxcnI#rJV$`c4%KnВm:e5Yqcr?^$?g=T;ER =Ȓ>?*9q:{|[B"7K)rtB"KY+frDmߨ+^!Zj.Bq[1i>%2w?lm-go/ݏ'hOt0C0K]: IǢKj~hVM*tPiݚBHY|V'^ o8$v ʱ=Rb@bEL#bPj6[o=Y63ce^]ro9c=tRLJ?V#F %&uJѕ5p.7&aT?c 3u0Ot@~ D ntU~#KAjJ~=z|>#9^3MM{ WNܽOVYuif=4:gӘ퓠phEjsG&ӑ*ꔈ}֗ύl2L׺㜘(T", 4 |"0ܷWr$fMl'zꒄuiM"Xr;r}e*5@&.NkQdy1E%՜qj|6ZA-;&Zzzob`M1lpPZ@x 쐒,=wuE /Bs*mIX"ޭ?H#,T<9dBs}k?/Kcb\zڻ۔1 )ӇcMO;1T-ubk{sa>]≭ʀ*_3 GFkȅE`U\>th}]Ы&fD&8aS7S f}t,3}GfЍ<25# jmҝyU&J8u.D˜ьۯv#+?m*2*'G.[bgG|<) _;wV5" %v:ƅ}83>뾮9^Q5ߎ+\/,ϲ,˪NP1%64Mh_v]mYtzc)HNq?{ w&Y;UX{I@CPlcerɊK!I3u$͠!]f;G%NynHgP5`Lrņ^L[_G_~b8,MHn/{YHYY|yBɪc AQYCu8[L3꨾jU.n+]27O MdS2 *>EKt'0$!cm;s%i[hir*o&rɶ:B`)%) ۲f"20 w{, "mR+`(W6 =VY9lrMf ?䌣o%4.S:ښ~O7u uF?dϢe^bHk/?m5P Q.—_LQ{&n9u!P, `Jhvh YH{ PDls^zلʝҤF6F5nSJOW8ɪ3qGrՑ IViƶû 7Jի$7$ ?3z./Uù»cTM v{`>veJcr!V$PF/4_EwpvhUB' ʤƈXUVc= ^цp\ {-1xʗ@gF5gw;& 1nE['R<tTWIqKg-~{|ye#ztiS5k}񣄐#E%%Cqșɂt ?g\Q ̎әh1hк.:ح<{umxCX/6zɜ^z  ևf`iPl+>|<~z| Prr(^9X 3i 8 F6STӬ׊2[b SsGn4}s~DA_&keEP'۝/L1)JAmz)sԣ < J~x$tdv~A1]Rg=}H1?rׯ3zX]pT{:T*[a﫨a(}RGF)G3y!Im1UIՎ!Rf~#OtϪÛJ˭k!ыESW,ǀ;1_jrz0uVK'Z-o^9u pˤ}yn5rL<w[?-t*MK6Tsq(7D3b{o6:-K2^'1H% 2$![VF\%B :=^F!^={G_Ԃ!xK^NbR!ct_8b<> vKscSm z$!%"oA9 "BLv[#^~zmhI47*w<@{J͏OT㇍$im@}0'x5M&&FOC0 BqzU{LRe4h!e"U+6E?YjtgS~=$vZ 4*a,06ӡM?oRA\iP%{)3;{SXDdA w_^]kZCՆ<\`EDU2 FS$~ zJؓ␿nu`Auݳ7H '//&R]КپQ4:u!"5Ѹd HBWnɲ,`#k.y_ HeZ@.^>I0C%f,߆5EaS vraf cH<<4w6yd8^.@74/WaV3/tή[,v\W?n^yB“\ K%p#֬S/ؕS/r 򤾐IZk_d">e꯬ hv-- PmT#(sw.&ayqغcdZ݇L[CG W~w;svsEw@a5s 8 sD5`sd<X<#UB]JRi^ޕӣgl 2*]U$';C5RCq? >mPb@^Q 6mA[ml?@4cc*E0c=ǥnx%b}NЪZ_yPUd޿YA B3@Ԉw_rEuet>vOQ E3rf\Ft_Y?d0 F)eZݽUĂx .h(>85 b}_8 tX")M [DoH>xV4 ѬYàUb T&;j?tf[xr''-Jp.4r/(o#gه)e{Um`Xpq3M~)gWI~> /-7X>yUtY<VV1+Yl'hh{ٳY? 0s{,"ڇ`jY34%`n#ө7}>ѝUA1Z*y5]1׭[/y1$՛~69QcQaφ3P5i1T[5~"ME(Im(lX1$0Ί .P1 MT3RgRCG葷3>g ;$kbM6yG9F\Am 1R}hV`L(֏Ui1&]#Q1*$ tG.Eӹ}UNN3iLVڴg~ҋB| Get23θLZ5=|JKs+'H!s"wS5:*_NgG }ֆ: ӜG,^J|Mr\%jc('ފ[f& 4AvC|o˕M姑|hK/  )uF~zV@FڨYBFGfNt"R+5L,# g]GIZܹ*Fm!#kċ|BŕD]hUgBw/s ՐQe+]ޓ)@(Ä- ٬^ltw"rhzqj7rѠֳXܬ>܄|p| ]I$MXq ilogVUF!2@3qavZ$jbpYd^ؕ8oP=m/r?k[n ٸ&'x}jԾ诵pxR 77"'spR]Q0UG4DDFjI~N\-'D8Э#8Pl4Xwa` ÕSON7NJ2B7qkR,F"6Yqnz@ āN~*+HQ'n9RT Mڑs৸w#_Y#s)k I^GݧPq!Iŝ$,—#楥'50^U~Ԑ+ f x)jzwIP$S.*l:}f  C I*uR׼)~~ņ bbk aj3T]g"Hō%D6ɴ""!oi-&uW3-5kChhh IW79L}7"5"D qU]Gw ?.+ϡ)h`\ԇQŨIO<*P4'B,F[[g"pI޸hZSY4ϭ'RO {f 'Szbֈh~di9*-coP&cH-{=Sr+a~M& %XXDT^ Ӓ;џp;R xgOqޥŇP|jJ>+2+@i8՚q~i$ō l0 \8Qp-1iX l`U qV}eR4}/9u#6\+>[Im. gyksGH%4_h;+E |4ΠpHU9! i?9:b@jwREҞwT / ^6>-Vtc:[-2)}1zufeҷqpvPsz300h`oSsUK7U#2sK^Āq\Vzy^\\}B>LQYFlJAc'(0|I7m$r嶾`5 EJk.eԬ3{h?TjHw([k7[k!JÎ |(ëY=gX=DG]`P:x#.Hl ]b?oY#sќee){!WM;+ [#ͫO<c#ϫb+#"=^e6f^nT}?^r^hݣ|C3ʌk[#fKs#IW:nA2!W œX+Tk`6ѣog?`f1F ؃-DzBEut6Q)EWEհ+TgᨴܽcY筪):MN%5禯YXmVlAŋ|Z ˢۋ6;vuuVKnr)nJҺb(_lh%532.Aqg[SXhfi0i5,Gj ?1OZ5 3qe'YV"~j- ikrQr9FwÜ͋0 ړE֛G#q7+w'ߏ~R[tro!#A+Gs|IRVz&|tL 䘘xq*')Dط: jQ<K`.6.γ.Kÿpl@liv<#8gX8AT3!Z̩T_7s1\8^Goª:ŊJB,ب%Y,O~HS .QHFITvugω[z:_z5/6HCD8aEgyZyw9t+лK[kB\_w|RJ*+pUNQZa=OD^{"E?Zu#4Z-_߸J됵hYW8=GPW9\+W߃;iuAΆ%ɥJOe߉ލmJQu)XDݼ:\F*SҏF=Y'j6\vbO(֩fXVK|+ZA\9~ѣF)vx Kwb $~7l-q VrAp/O(?\;CӣQz$h7>imM#R+$TZ(.nm! 45 Lk oaV}j"1EfǘBIO%R^ Vnj@Ĉ 7 1/Cva`)+A>n].Cu!܌nDt\I`[dҍ\_Ht0m :39G/2)]ךϡA;6$? Ѐ躧ܞ9ËĦ=ZW! P| VJfS >,'1ҽONjx8!~/=\%ue@3ƠȾJQb2~5mU5Rw-ob m}ž2[2Zx:!m+gso9x|(5 -fe*D}87viեd-KG@p.2Qwhȓ%aVӞ k}T316fa@ʥ4h}lY6f*y2Fփw2A.t ِJIwaOKG̬^-'C|+J!N d/xg\¯}jI/avc{;U86oQw|!: ~ $T6H>[,Ml:Op6 l[4R(H IVRhgz5%S>GgK}qJGpLt@ZWC~*cwMs͉WRBX7.uh弩b$=nR~Hgiȁy94ֈ5a%cjA.{J-dIx'9JIJlq*FICU/')O;ˈ4Խ?Y- 2h`ޑ< jukTÀa~1^=~S9A\{-?:R޺T=7MNiUg~[#B5ݼehb1RD/PLr[nlJ)h:B`l9xqpޞqlZM>/޺˒aZ3%>t ⧚bΪkKRHedbA!)*2c%x,#j, _N?B5Y&9!˪4aY"w w;EORH=d݆Is= Wc"T}# ٴ6,"Bsa܏GG$̏.ZvULZ4?i[XtM:پH d>aAh |-;z3 Ez+/~h4p ?8j1GB8ӞC{ 4U!G)|$Gu7Ă/>mt6 IWC|r#ZR s)G9'm_:FH5ADW6.v`Q,ugNc!Nxh\3/h =/-) eia>ۏco66|O vL%[gC]$ƪ-TB(̜o#Ѐwtua3-ܮ\_%3hֲ8W@ {#:aSzIaɩ5Ed/*F Xn#ZUzPp6YFO1tֵt\KdFPf Otɿ -G~ثƗM:-&by 0gD;g`5d5nH/8l9 pKѶj8) 32l|i C9)O bQNDבh8E:ߜ˵=K^ZQuPf'|g:yDh7(QPcǯNgWHqFTv#=VNVUCN;|ݕ"Q.c/wP0eoOJbKÇjЖBYΙ&J?mPT1&O(`#юpNWtc, ^o_zN&(Y4Ubxu$7nALKVČt>ANb<#i1R9knMqD)rQ<˺FĮ8%> @3gLhq6vV)眉"(\5A`(oɢ'<{§^1ckt{Le&7Dt+n}S.ZY:Rb |DM e0& %4>f3 {}neqʧJC_쬴8׼HKQ:Ajk>ݜ4z? i k}JB+ڂQUw&qmw[YXW-񩵗3ٗH< F,F(u:҃xf\ni!dC>ocjgvE7VӢ>>VD_XHcO|oU H(H@)ڭb` xu>QvcNaH~ nɠI\->jI!Gâ:dH,X9(u,ReixТc/2$}AU G 24 HMY &7OZ$lmM37<3^ rIjEs&;~+BҦ/΄Ai8LgG%|ۜZ0F1 3S2N>k0ds> mT}m}"P)sm6%c w$RKFu@0/V Ci%`B,߯ƔdNJAHߣAB?~ftંR+MVE6WR2R߭gt"Fnq]~z') mwT7]Sw$" 0b=bKCfeV9/ޞvO>7 Hdh/n&RL@>Ҹĭ%wGwA?L@oI?{^!!u!fASH1cϏyBZjЌrvyxhu W.XfO0\\/|:B-b%{)8^;IHj'-ax0:Bx+u'Ai-* oSA.Me²9a qʑe2iwrAAz'(adXB$B}hhD#54m,y6 ) 7ebk8|53~\k/mߞt&2}a "0lPQX@6oQ[棶;ڋRO^"BW $db j%šԇRp"p![dڻ9mUFs;5I:GTi/V"hG MЄ0y-Ha0J ?M%% z=XڅQe.FB9gNQQs,\1ܝ&Xu b! uNWI?rϲ )HKf66}㶿D8%kc a%$=ngk t)]._e:*ciϔ$Ri7 }Jc.|{SIxD)l!~m1MYH; ߗZf@=OEHt@)II0 P| / xw8hӡ&d nK4m!6ZyTK54)ᔩ#;9@̸ HI!ѰRCWiP,aȱ|z@*~NBQ>ҏV#7Ol]XJhcZ&UE`GHGa'vU63{]c]ډ{eMH`W'ɡ-3JZ>T9 L9Kfenlǜ4>CaJ\7Go}J8*ʧc"VZ`(-+Bت=YҢMN w`qQn2v6NXvYV4nElX?,{9jcvۋkF8#OjQ0kLδi~boߊF +UOmW? J XvN-LT".u[E ZN3_ס',cCdsWzn=#y@VC6B5B\N1_Ӂ(f]9KrY> stream xڍP.,8 ]O`a-www Ak 8$A.ݳս5U3Ow>V -6ԅC fB@@i@0gT_0&tySu\!Nn''C?0! l Pe(9@A0k``p @(@bzv\<+;;ޙf-p@ agglvm+w x2@ S+<PwAtVӁll+w"0`# Z@]NÅZvBn@0ʁ9IMs]ٜ-N4eY=>0 d4vO?O XVtudׅ\A2m?ɟȧ _4/oܞ-vw<zJOR@?k0}ޟFy,З,m;~HL1z/:]oPaW#/Vd.%)ソ6%j3ךiG_rpd9ĮϽ^b+|mFO~yj>wӬѺQ%o^?c=͝|TgF=.6s3s71 !9%~wi:l,ue}'dkGM'̔vR_]zB} U OɪҺg:WNmn>*AS Ar=%7>+pz.pxA,sYNM:/:T#ÊJ^n[L LqgK{bSd@\̤^g^ "DS'ger7j<231z}g-rG<,"4ؘfqח7dp6cB +{?r[kKacA sTgcxIMJۘ}~ȡ?zEeY։s~9u urz|Ox7;8;c{h\ m {]\uܣ ֫z߽V<_Gr?M %|2| ~DF*(hv|Q[{3IJAnP‰e-iȖ;=gs[aST΋,6mh񏢄^3ز%^P24GpטTV7qR?,wmZӷuWfП '0s5*=obm#'^FOU+&P?cRԊeNzLg~X:ߏ*cckѽA7eL}(b&XTG) d!L4(<mɸa6iD S|(t,nt%Re/89(G5POk_I՟\ ^T&a0_LV?}殦 d/{$1pvoAGˑWb}k[J9Q9iaFh(3u#D=x/ NZru[8:JSXf %O(>Jz0lPZSj!)kÑUk~?V]0e†ϟHt>(ފX,l=/E >]fN٥ Lt$s̥hyE_|2f(u-ƫ FJ!~|6|Fh\K덟s(( ^dlB:4|hZO*qqE:{^^(9%#{-xkD7䌦J*^q#Jh1$yK<|aH `4ϙw06nZ'n G~G\(5д)1&7q} Bȋ5δ86١.7: JM$jޣ5DF-5sDQ yRy?V6,ȑ3E#}R8F`ic|6DƋ#󙻶E霴xvs y- lv7' p&xnYҲ u@'iH8tLGK2Z^"jv.a\ w(>f~-7;CG0P,nl5pFM2Ϛ㥢fȚ0J/7#>Ym h'(XGEJ ]~_AxHdr?<%_1γĞ_k!f|)?s1`41Taj-0VJ*Qq; !$ a >:7ME7X|.?ec[ 9 k%M>M .rg]Jsp@eJsdf(l\Hc'Ĺ]N;KNI~Ly(]ۂyU2xv}$ ohjnNBM]Rx|mxAk j~JbfT>8zLP5oD@8Qugz; TJ͆= :KLV%ؚn0x"&YceTx`K ;Nց%<,ut{J[|Hm/{m!I(CyxAƛPVhQ|A R ucq ĚndTZoI]7VW ĭKԌfxQ:3c; 1e_zG\,692cx?d?HTxΈAR4#: u:DW|gdƳDWu~5s弘Ś;A\YA{|].F3kxcFxbKcKn*3N@L%λ#a%qZ̄y)3Rz۫tu[ե|EB7|@JYcL2XSEbZiﴅܑ`7ao" X|aYJ&>kG?" #79D)Ĝ_WY $W.صէ ` $e(ƒlF:"UEh/ꚝr՘#p1gNmxS:YY&DX?1WRX͇h+UQ{SB5Qg@oM 3Jt2[.Ť::P^&9pam|i/GC%FPS2EH4f8c϶k`"GmOV6BW|pUc B>_鋯+oP-`ig+$X~֡ctYXkV0~&͎fV o&Q$B'Qb+NlGymƧj[ZU N?m!衑ܹT'Ă$`Tu4$H7wo}WJ[p~ZG<Kn ѽsp+eƩI%OS *Lħ%z5ڰ:f]OH{yמ[?oATC7nՌkuh aP5׆ ڽz̖qw|U!l{Z#t[6ae m]+tmݎ'^5WI5z:"!skDU+ń_rhA PG_Z#@ ,Inq٫6RX;>g̭4 )ѥ*Rh}Xr! S08 fڂ!5uVujwp:Ǭ¸çWΙb/L-=Eխj+`^1eS,-q7V*U@0@%)StUR??!/'2e:8bX8v^J GvEؽ ܫq* 7.">Sc [W%EB0F7dҷI"ln\nfb&#js>!H.,L* ؜D`Ăy?`*-)hjG#:x|ar<ܾMXǨpi|L?Ya1}@8FgZU붙?r+cJ_# *s' sb!** M6"GLEL "$:H,U7-]Or{}WKD<! ˼|~fُI)Y8/hrkMBs|M5lxo~:؈5e4jjT a7CUҳöOn_!}/뉴q뤐y=K{#haJfec!Hw~ 8$TW--Az čќ˹ ;tƧ+FXP*z=@(&Z3^ҵamml_u_-$3vȂLkyMZD0HFJRzt:e /mn~U|-HU-vp/꘠ъƭ$ZWnpr|h Fl3jj2[{6DQ>'{bx7n fĘQCy=$J ֐c>K0zMґt'*9")t<էRKOƇfIc}]^"m>be3g:tND7': ٿjr^S+ m5P"^wuW&Xvpz=zjF&qO &2/ 3P %;#LS;.~p$Xv@b@gee1QaB58;/D 7DzI_ xSK.6 7kK&gEܘA>]aK8:<~!,)b8MSFnctXQ_枱xSPxQh\3?Y6DWqQ72]-.Oѩ¢drˊ Y*Zs0"Zo c=Ce4#rqk05֢-U^.\Djˡ}YXauLO!tB1@.ւk}Am+M%Sr3'ʹ#ku!`fDm3MK5OZalfR Fwԝ"QtK#C[aȪD)3De%lbuKN&,|5)VY)./:쮽սhdKj*ڷvomYqMM3 q+'lIlԹrѳ29ͧb~ت՚tP>"N8#籪b5"\GWA\OLT6/RQR/ӾzXj3];f;Yia𡥜rñjpe*.CV2e\;CЃQH08H3h8ihwHoY*a*Le d)w,d:| $о5J92Eȴ BHx{Fl{CJ{nO̽fk< gnCzcf;!}1I# GָϪe sY:۷%Dab׋x&.;}j֍?|a{z˼?Ĝ<~z"r^tW:Ԛ,i.WԽ!b;jI `*?͕"bڐ}#lNU.KOuqҾ1{Ҟ"ףꨟʕtWߖ/ή9 KBO;C'AjpR n|6fHx(`c!3mިȫ2qcg8ke!EM4RD}GrDB|7ߌHڏb;zfIS.8g!lٶ͍k$Vu`g0zPSjn'ctխ"3mߠ#$>W-mׂK )9ã\4ɲZnkX;8|LP@wkx:ܐwbܗdԾm7p6["x)CmGd5k)KB r^]o s(E$~{UZ{.ᑞU;JPP2¡Ѝ}wsSƒr>nڗXPQez]җA]ZvW 8dzD.wpP/Y}3ҏ'oi?zb^ ޿[x{(Х?i /XgA]$7Jqԭ麢Cr;\>pF)1 b/G @hP 4FWlc2^ MSB!9tNe*Ƨˎ ]hpz59F. ʹr~e4അ2BC>z?}W5#Dn(afs1mg<$3[BED:%לKzK#GkvruHR)itu1)cȐ8mͷnG9ƺɐu>PCnj* ^⾳kB9y ApU$ffg\IιFwCʅ=Q_ˏz^"Ua_ \5$J!_9D/u@&)ö`gRT7|"rӽ)VEHU r* .?=j:]>JZl# ,RpU-1hfE*~42{i@Տ>T݃IhDZx~n!b$hS0ߓŐqz؄R,rCUIFdAA:U׌:4;ɧؼ~<'Ȑ$1*9N\ )0cXjE9־ `ৱ10VwKdMq#ieӈ?kdjE7Mmy̸I5w>Tp_r'!:HE?C(nϼiBDp%,<@*3y_f@Gh͸1k.2+j׈Re|D /IҍD1| G.^&s7PrqTZF|п-} Ζ #A'ٌ7ӯ'XtL\5n] FS<ԙD PV,ep7}&MAq#ӵki.͇;Baq`}@ŖW%R8&ۿW'zlSv5ݻGAw~zܪAVL2ʰ ߬:Neo'wa#ʾj{)yyA 53H#ׂ,mUB'F5P_p(,0N.tdjWۊ(xfU+w]tHRZ-¦zVIu(Ǟbo .ZBPx߈;Q+Lۇ^v}4,-h'J2F}a=IWdrREVL r91Kcra~sH/wQ~|lŇKs endstream endobj 35 0 obj << /Length1 1556 /Length2 8687 /Length3 0 /Length 9712 /Filter /FlateDecode >> stream xڍP-Cp,Cpww ܃ww; Hι{zսwwջfZ76.vN!?^mF]n6 g*Prx\89ܜ"B]2 k*;@ KC]@vn'ъ %(' tYY@nv@,m_)Eܜ88<==-]١.bLO@ tZ~7 Pp;=@]ji< + 9b t<VT;!U" laeutx PSawrcX@-x  r &sr9[yʲki#> yݬ ؀ 6vwЅ݁2SMh||3ee;_' ?j}oY, ?6wy9/gyYC!`/_'%ظ8|~^AgѰ]B!6P_>O_{}sAE 0G98p?+Ogi s?n Go³fݞ }R*^E7=؂=F hrK,u/j@]A_'7p}VyqHYqXXxq> @?pCn!6P7! 8,|@A ' pp>gv|. @^Ez5+wt/Vhk+P+0ưzI2OEL&65;,4!.Wiq6>2^JS=~hFLwo5Ѕaptd*9gg?`>%gw,"ayS+^)W-ƽ._/]&Arc@a;^Z˟}RJbA?)5~sYOBGbDL75WkѪoEY,N;$wуRQ4%jFӃ!_d^AH(>r( D;5ɡq٭pnݏ˳ AAS[1o^d1 U%{i(=-vh25:XO_/*Aߋ39C< gw ^0cM܊ޯY U]yo#T8jz݌k[g\<#L¤KIߨ[/y^1{-toFP(z;aN$}H~~یm4Qje> =ciZC1bбA"{uh}G%#!Tr_Fޯr̒ok1uB"r(HۄMZ3h& ?U' x.k{sKDaxGۆ'^ YEt6jX9{eĀV`nӁ:=wEp7mPhƶ4\'E(MIXc{)H7v юke2mDM,if'A'Grl Dy, h~B/.|= &>IX{O/_'cX?{1Bv w>vՓz6UOYPubC ?ȮMy:z>!ZjI]WNss'T XYDlZۅ+aA?[c\o#bX,#ipC&?ыBYئj=$X{yB=!SGe2m<9g~n ሤ sn&yy6N uy[e:aM_u=<bBmԬ4c_l ";$($]2J[kF嗼_v1$;z*yNg*-Z|F|wwW0~ׁL#g&h<ϮM[.+|O I;0z0Z}{< .#kF<)6FlmwOv1S, t 7yK_;wYu+Xqa0#=_2/GNvԜÇՒ-" k4^)& b5O1,LULkŶfM1Ʉ`M%o  +G>LEhf@VۅG" e sĵzI`\# bQPYՌv@)F AjjրCǫI:;]$@MXef!<hjYՓp>Ĺ$ Jno٩55k^QM3oBHUүͰte0d1fq饡͟* ƽwv_S*xU)NRkc3kh9zQ @_^jC2ao&la7C$Z;[gEn87s v_w4{ˇ=yu vuw'P;_ncgIf2V'zH75Vu"V&z wBdocGi%s"JKtHqʸC{#6 #&[fJ[i~׶oKjRμZpP[1č{mR>D`Āg>gr-!t!:cN²njYXmF' !h[)CAh0%5grB6/n}%͜P?(gͅS [r{0$K'Jbx!Dp8K6zˤH;\h!EkINQxNht4oG8)+RBr5v# QW;kU$lM ldmzjyciia *7#ͅR<ֈ-~l)HA.)Ţkck{Q [fyBm_!HQLZf `*1~LU@U:&RJD1iru!&Us-"iK1h_qdo^hBAeӊ6u @}2]N02NzZ(3, u$ KݾI(\0JUG~o H &۹<;gV# gUDL{6fۊy$i`FYk9Qդݯ~:61VʟFcʏ?ajN,]mK S5;XzhD8-w'ԛ{*S֫2<^tQB[xoTa02`r3$iZP+ž^,ǨhpG'o[AwI֎wĞ?2uǮ:,lbtWeivTDmC5w>'WQtKD!2DiiF -q'E}J[LGm$qHTilӱ~ctmz'PJʊ:qY_yL $qIX6O>Ң9nP^n%!Zg9hgQyM2pi-1J|xUP*| "cxl0uIZّ;<+fX[c.t??%Yؽo _ѐ&T-yJ &H83 q~~8g 󺮻uPnSnbeCiUD<(L`*In%~K̋ ;uY?EAd̛5=m*{>V2*K0 HQRߟ1<s@<ϱ!Bsoy'pf2k nIF4r a/yb9Vo5Y_HlU] ^_Buq_FdT E %}o+ٍ9#Ȅ&Ec |N?XGɠS0B): W*y%ۡ؆d|98 ΙZ7g~3KMúqkB{=bjQ2&Z&Knr!D@6>"]{q Jw?;9iHu>'L~ej8^VI(30YY'W<|cΘv/Q7ؤ+uw\pUJE}&ⰳu9lB)g*}@an&}*3OT̷}4$P"FMZb mgqW,C''l,H׎ƫhQ "Z&6 ǮJ}W}TS oe/)?RxDq<\E86XLPrN8lۻBe `<%4jzB@c4Y/rvү5 /d>Ġ亂7Q'!<19mOJRe#Wɮc0gtr aa߃pZp{WΔ;]\o7c?_+W-hcFm5mv #\OSuy=Be#tı!ӄf~7eJrU5 uD?uF}劑,Wb0T>fLΖߡ-YĤSun IUbR>T6КUk$ުŰaȝ+,OUjʔ~*H2 KTFP̵5r{%̉ kAܹ11,1jR[dt7'D 9>r; ;׺u5,۩g|G}:E%!]e ߄ֲ9M[^PQv`ehNR*䏕^!ʿj sJvĈu} c_,+|<ΙJS:Q46{jhw'dbItwq5z7B^3\wa<}YESm8xC@N^SkkzyC*U Ӛyt.x{ v~)*EjH㵱t|#t0{vC{w2"=-?%jOԚu'$Y ]4n2V_ܤ<,32缹EJUeW(, 1}*իgQW"oy3CBr,Ca,4U?Ŀ~=[2S=lAD,NX0ñZXgQ0wApyGb}Kn*wġ7He#{D0@"g؆]6'>K:L̊fb.`Ҥh<"_D-e>Oˊ7$7S~|Kn~>$.+fT{Q3@Jk9Zגn$\nzPJ ۡz[PsC:C]CfHe_΅ >>d豅o `,U;De lQ]3ٹcb |9MGAh|lx~-DsU~y`Ũ:jQ[=[*|Jתݴw/XQjqqpA#qCbl/(8YmqƲ5c.?+p Q/[ǂ~K}D@m<ԜZX9,J"2a\K8b9YLz_N՝:VҎ%9xiHC75BYWۈs_[Ks[>-a3tu@IF7!~pF9VGhMgly5 EmYحKˀTT<'zG lrb&bdǥw.sGR1Yc ,tyJIBr`0.KC{N4B(buzRFnʵrԊID6[۵|}7nܧ"e} ˄!7e5dƳOPٯY8uˍ/x̨y#;oߞPZMgG5U ժl. o)Ny)c?UZꥃHr? j0Jm=22$ݼ)2EZ="t>20cJڝdDSfp\-d[ 0..gAWٿxf}&Gr4sH?I(p *o#^}@L(HEYF-蠋=jnW:^/I>:/֩!dJ*P]uo4%]πgM⥙q8P;%z/?; u%'׈3F:}X֣R\i/# XzV.I#r]i6 $p O|#؎( Q9ZT&zɳ)_s`pE ӣ)RIn=9[ &w\tq޷ ׈/&kYp!lh-unWC"dwZC_S?'544ez%_NR@Uօ|\^!m6R#wTt09j1ĕmN۰MWL)hP㎖aaQ1+\8B4`uUOi׊LW)^õW} sG1g0IяuÎ3jBGLeΠ!-%`. S%qSCV5iu_Ct!j) {|'cQu> stream xڍeT\;wi$ݥ !H@p'=@9ޓs~MϪYjڻ_Sf i+ + @BQ]ACΉ /3b4uP97;WO._"Y in ( `G/gkK+WI 7gp19[:M]@M`skc(jj va`xXZ@. gwm=XQ^4]v-\=LA rs eGd ̀ODNdW9`am(K+z2Lv.`HWi1U)tblbmKi rJA.(듴vC&:=|` kVnlNn Y &?6K+r '܊!^͐>| H+ ?k ; hm 0YZ;1,8[{!"!Dg@_&#-*ONv '+ D*)_`Bߚ# s)!݀[wz5IŠ/0"a7W:(!KڠXv^YWSZ9XB"ETv5K&5HbQ``g?>ȮB'.uAVOr0'/ "*Nd9 Ͽ `cuBB`gW+`m qBqdA `xl$?Hf@skHv@? gSs[Qmoi$3Af_ 7o /9O9D-Oo7_埌HYVL /f/ ?%B:-?~X@OnH.t S$?nH ܐd7{?e`s=Ĺ!qsW+? 2'7+h[X5@xd@y ,ȃktWdJn Bf/qCy92"׿/ yQB!6 !wub$,;\/n(1v[0_mIoS%UFDjaa?ēHy w"bbD6QD;G`%N&L=9}-"1@v奈@B^YX? |,c*}S&8, U=8&s}<?Cqm87#-| \Gw\&c jiUaQa%{fLM IO|&3G7p59ZM= g {vk>4N(Nq0%xO} w2 &zB#)f89GbFTEg޴٫qtrmFگUBlޫN< It~DGk>k@ \y8yo2>CR>uvJKp],] {?_J;uKYWi= c1eRL !Aɾ1H4/.εʈtW2i Ϛ֮l~⌸@0H$}@s$u }!X8Ӽ[p +kBuVw;Ln 3>J,;ޖ8n\<5ǏPlᆬi<J(rb d)sΏpAo@m#&gPd0iT5Yi뻒O<^1}qҾ-#7䄂&4t`k{72`=tL6a{2H6'r~"&gi` 9c-c^B3$|:Qu3:5C=lIi˕RGk;ihtga|hQ( gW8W 4cBOB)HTL a\^0#X$ݪ\NBX/l7Ԉsz839Ot"?)JfĪzrݏЃ5^PSm5D8ȨH)]3Ք{R/C5QA)-+QLh9}j7"絻O_2J=2hX Ftz1?̻ݫ`kiNkwUĬ˪\ƨXR.>mXIs7|҂sC;JSVo'onNF"oF%R6 oy=NjVgwAzkIHߓ鍕.`v砚%Q(ޗAgESS=(E -_Ec<>tRH)fE\t6/n˚3 7Fs=tlQ|V9e]aHP*7h7=SUCeĈs1cxw@5^Yф3a? ]=z-3.<&fzG7)4 ^S=0XpI.W})탋p}¡W:Xe#I+0Y9ڼfbO@Cc1 թ+0&DX>\"l:{ze6,لY\d&xɦ=qVdw M#ݶj"KR%箝5߿>'ژQ)4^r f'Z6Twev/oIt^Zޒ9 +Rl@L 2 ~i=y Ka _fQij|OWFZBԎu ~ڇ'[f+E l!%>}!S1Xe@Lϫ+&Xpqhs%[ ]Fg+3Ĺ#gyؠItR'wCL}bgEݙ^M5؟lz]XJrv878ᆴACfdh} MCW+IlުD12dmZ+0ClL.ϕt&+2M"\EjLjdn2]g8{7 Sz L\V]f@K yXqnsPڲ7i;c>{U]`;:W#2Y+d?4nFdYTO']ѷ$ѩˤu{a߿.@6:)>Rt=+Md:Yj{$IGf .T5bEc̽%Qqdd(zgEY+@s*?)iL$I<|=ZFP^|M*Qح$D mӟІ]\3z<;dwPKP {dmn-oˮaZ2?G9ȆO|v剉HxrDgpKql$} >G?4"< }'xl*1LRim:*,V8:>ver!Vn'ߎꆉz5X9{wA:GɟOquN̊@4ߜTU{بm): ķ`BDUbK /۸8$;oo%H}f&.EErIؓ%ޅvVrAuSeuRQ+0p$\mLtmNv &yZnAs5l \A\ߺ (dfB~^X#q[j.LmݹY/N6q}\먜= "@^Hn_<ɻҲ<0wk~z]b ܸ,H_gFApKX|Hfs.aO-W&cvnyP6Sh%qM)U8<Gs'bN>=F9'q}nvN{ A[Xx>kjQMA{hD  2 kBVk)!ԖЭ'`WK01s.`ĵ.ؠeZ$P[y>:NWa*L<~d{׾0Qh3DHxL%iDp>946[8*aI{*t&/ 8Ot`ѫwǸHb"Qqs˨XK$oqvWT<l mN@cdU-CḬ 4ۡ^1m}e$$>Er~jmFݨp&58\ 6P1M[W.g\'SlYp*=B!*.<9d毣C5ևF,X6z͕׬l0 jY/Q0߅uQ ,##TexH5/e—8~ohJ:xb"baȎ㟮xC3U$k:# YG>+JObr4JJרO{jˎ??!V4+Q lJHgˌy~E2$Tisn5P_&Rg&$XAd9k"jl?}v+Ӫ\s8l9T0v1c%&+\;R (sZ_EB}F)XTljNe@{V7s?,]Es@v|]UOGY R2Y(;jTPK&sMk'|9yʖCbs;h#iZdEKjK"2RiǥL(c+_:#JK=ƍۄP /n*5J̪-[('*lZ"yh910?h. E:T8-1On"' By Ov-WTTH^j 3!,TKʌ>w` q#ƉDVTA݈Wv)2 ;u=ޫs8R#Ra{ (LLtn]c\2'1Aw*`7, }pl'W.lՠҸoۧ>jk#,8[ykWU[JgS=hCuUc` Rm(B7.7?q t`y~ߖV^q Em*8i@~]VW&8W\a!@t5kgx=#ⓋRWQyୋ1v_/jmN!J[ݽ UUGw>Y"K ) P1xE}iH[`*b*&-TK1}EF- Mx:U@O*RlTzuWr V;VޜcthGݬZ3ً9IkMhi+^׾ _^8=9j/tG|EQNEBz`slFMGJ{wuRIUW#],YrXaZHVgr2g}* J!A;H~/M9fb{1i߂:օ^2:@%0ކؠ]G4z",SQx}`=W^A  CQSe-8)uCp" e@{ 6 bWj"YL\K2گrUJK?Ikyk?i>F ԶG>J^wn~Vl?*S{kMӭkȤgs Zo7/e{ɧ1fLm67ׂ6=iRj[?  //oz/[lT"2)*6ue0?gO!/,kώ½B/}cޖԨ=٨iNUeyƋ@-Cqbcm6F0T3cJ]w״ 9 VcHszMRmkd|{v6<*R+/TԗsHp1ϕ%IC+@N61bDpT~ @2_Rszp$}w;E5o Rg?E"Pe(qfym_,/:4yۣ)v2HzEU]-ƫmQfkyث>[oD>?3~cVȢ؜Ѱs~)YT jNV±)KJ+deb\vn1 E.+}AB{nԸ{lu˖;;pgA+1X/w`~}g m[e5u~4(en:n>?F"}݅&1rM ӌp6IVSu\1WX4|ܣ>7h"@p5wb E $Q>l2yܳp$B6oGa-@:w-u`@2PZZ;x!v4t|O* &9F@. ILΡr1R̲qr)]MGthTqD}wo"=L<5dtֺ.ׁT։ ̼RB>S{:k#1IH[nF#Q5,Z O;fa3/Nȧ"(z+}Gc yVvx~Zq)sMjot (W084XcɆ5o I4dmY˜^![Y >0KW90.{]yJR/ ;'i-%l ;팛YCf/5cjOic/u.GEg-Vuqq%~FI8>B'1@8r2gA_¥=HK?V`p: ոP*jUm Jo/?8NZr!DhNV|q!IF/wrhu &b$ly[0cr'Q9Эz DsY{{ryJ,'?ө$wE]"[ʬ -ЍyH sZo\Q־^_[rLmOt:6`P9&?}#-5B8y4}÷ç_.jN?tt=6r>.kfJgNTmn Iw(߇0S?Gr58u̕#~\Fik)a.1{ڨ@+'.~ʇAUVۯtDԣ 4gN3p I?x̜5U[wöfLg̀x6oP `Tʢnc&|,cf0SIp )6ӏO)U܉UQPtD.A qa2[ᏵѢ,iN 1c8'_Z n2Ӡzy=$^i3%V>O5+?U?1|i1z-˲N_sJ)sJ<<&8gP6my0`Cc57p6(/ 4RÙ7g+q)l$CĔ¬anʒSR嚙z?u k| c#gZP+v k9i!@oj>) 0yiahj9~XV_~Ge-;قЅҊ1:#@586)(_a0!oWlGy bN3?k'`9 bxwX[}V$MEV@Z~R8>p~L[|]^ǓP5@=*@Z+_gfKԬq] ^*Se?ex=%tP Τ{NnfEw)>'"@ؑC|C#/P3`rWEY5Ii.G\ɴ:c 9^ԤP. Tvt t[bˆ}fy|uJl\e 3.ۤDP7%_pzuo?ӘNW,Uoݻ#hNR*H|_hD@Z*}qKzT6i/U@o:Wb3S hqF>4]CjХZk{4a:){؃2yܕ 9 ]Km3sHX d:uC^̃0'5e!)>&LvN6V6q 9fcYݶ.Vwh7Cjc0گؾM9޶%c%:դZpKzz/g˙|eldҏ^`M}$dn9}Η)a'zkD.~88#67sW_';g.O[HoaS(n|x|O._`{wO~( |@˞&z*EUQvIw\k:m@KnRo#ȗKcE5Y 76<^ Ü @S4A/AWvK鵗8ʤDћ)6_Co m; ȺM͹MyKFJ6vN4r8a(#@ʩjUulϚ]wf *<ɪkG24Kěԥ΍=ډוTC_:34D Zw8gG<iI0l kY?cdz"F9h<`2}~S EG`K"-Ne d ^EF 46ՍmzD? *Cg ͷ/q_k֪(^i |{\<<ϴ$X+g\kkNwͯl]_·Qw4@Ha]N&Z->Z"vdH|w6-`>oZYB4ڞs_e4b\ز:J5zØm?پQ[6悂yC1>MEQPnǟfx$I&4/0NOsBlX햻riOݭBz6QI Ig%)8؆s:}ȳyU~,c}tsޡwZ2-5e?^-bϊvn)R%N*mgGoWֳ̬U8 :\xЎ],REL1Rd>V>q=[@u/~ў 0'tVErXLOfp/tNe'1. 3끀{ۚMT?A+|t27u3*P3cHV9B"թ |H"e\?D gUB:mDïұpb$HWQ6觶eE.dns|)J*ԫ+4c= *EZSDSw?ñ 0hrD@$mɼq^N]ujt?__3O%N[a bڿ߅8?3yoZH0T;T{֕Zm#I>ys0A^e*0g[ff1S/0A-<."M8r^t}gxʓlܲ~bՇVr[:R^f}-kpo JG"y"C{&Q\{FdӤ$:Xa[˯ga_+V)I-̯gP(7ք5~!1GO ͛gB- ;"g~"\=ף,8L`R?6wp ۙ+i<<h!gہǣULd8ؓe?j} -hwR.Wf:!vd;+U %Dm`Si0ELڛGG?UDa!enL7 M045]d> "&'S5Wa nYW!7OyP7gq-m@| f}Hg6!}G3. ߻LiLz.x)lP~ #? _#G רޒ1?:B8zΚ.1㑣?(G<hƬ72_h.mqS7x@T"[? w5ςVb^jFoIQЙ6}Ua_$p9"Ft^Q~+ ç{{wxjT)Ov Tv78aK JK.~s>Q2V/`E%wX3h_=GˣH 9iLSl+!$<Pk^=1 C^AAfd`c^u/قаs.@mTތkl@/V="#-l@ujf eA+PO;ppSr]}j 0u,o1,Y;lja5 :B$'Evگ32hvB&r{ Jüq6N$UJ邲Xu]J[|?.[`es8 w\1CF_9ug:7 ȶT<90JIU&L>Zr F,ܠ;7IN)12<)X]8}v|}݂'|Kk{foHМ3i]|K`-ng)/;|.Ncz'mX ZpIX47O ɍczu6WB 4׾kCZxЧׯ8=#ҝoyZۋſ,┑&%f`,UUGkIşE *$"1]Ҡj`q6 ?6[E⫆36~E<5 Sz+qV*IVx+"l,I ^lKϊc Z[]$8e+}+cƭ0op!(Hxwdgq{z Ha7AP"8ƪeg :SY }M!Y;lrИ_ϴXXN.JK?S=oCpuZ@i1b :3± ʼn2+e"=c%y6'zFf8tٖ|Hߎ\i"*.#A|Sl& UW<@2~?sP7Ņ ԯPa8?/RJu;av͜ u?{Cns=h ,/*1|ۚ)H'M"i%^s]P:3c?ᯘBYD=®nJ"o~*-1{H7Hkɀ G˪KA5Jp^gFJZjWQ(o_ɟ(Cɩ[%4JgHJE0hK^76apjc'~eI:(`n@{)H1 5yOJ|~^JHP(EOBɔȕ[O_㛈:('As3]Zk+kĤʒ~lqN_Ìmɋu(n 7k'rHy5 (A#kK|Ͷuo,%ZN_)1LL=om8]9Wk&uN\5hnG^qv\F!Ԫә c62g9gz~j=[ϓOkeTı2J{rowF,gzOQ?GxZN9T}Ok͎۽thOq&!jXھ3s.^llbdgY2eCeB߬qM؃vbGr' ,}НF7I5 ixZ"@`C<<\kvmVR[PPѧȏ0Y̜/%'4?غ#rfse=V#z2aH"Ŀ!=5] Zxb(G7"<'i/b~-_<-'w%qD~,#Zqg\9#o> I 9qd*DdN*6F `d7K K-e*Q yzQ_VW?)aFwB.z`smLҟ}bC %߿9 endstream endobj 39 0 obj << /Length1 2545 /Length2 17796 /Length3 0 /Length 19272 /Filter /FlateDecode >> stream xڌP\ wwww = ̙3k&'VR67J۹330DUULL LL,䪖.6ՁNΖv<H:\@41#@ `aab01qWމ ffi gE<,-\@~20sss:Y\, &F6{Kpqqadtwwg0ufw2[X@'7)௔ FRc'ZX:bon6&@;g) P(:#,:?030k Yldbbo`diig0%\<\Fv 8ۃ܌,mAn0eO~&N. Ζ6PLEmmv.'f4ݓZٻyYڙ+PZ 7`gbbbe@ ƿz:f2E`04~ཝ܀'WESK1uh 꿓@ 4~>>&-fTԐ'""oz6= ++_+JFD񇦴=?߀փAs Ps]&v&a[ߌeuoD66#7G4.mgq偦+ba;s i,a4Ut1{6CVkl,JΖ,zf&-5p, hwף_K0rr2gM ;;@`gR;RN_ .o `q2%~#o `8rȃo/T#A7b0FFO7/E,@M,A1Kgc KgߪPE`l I\~Yge3ۀ .h<MMmltB04qfU@ɚVkfun;P{,<,vHh@P_j"T!lcmjZ?${)o6Ș1Cߞ  ]`U .Jj45rC_ TB@?jwF*&@;ʌ.N?* 5ʂƀzA^=xd 3qu+ tzMMx;kww5R齗:]a36nFPWwĩn~x6%|ly6Sm_.8$çWyqQl!utBVǸw,[]W!\>Z-J7x<8k= =;_(7s9oD2q'Ѭڛ,1 ^k,=d o'f)Eep{Emffۘ$&>ёFaqZ斜 mg GU1ts8F]B2_h@o$ .܉T 2ԍiݴט66jȚK/< WOUF)YwÜǞJP+2ݢ9&_>)Ҡܣ {,CĥwP MZֲ B ΂,٧@*'ph_|,5<@7$kJM{$@DݞCATR?PadQFMrp/h}sddTV>P0YlXYy.] S;v D@DJHQ Gb=ˡ<÷R((>M }>DU/vR6?:'/cs nwSn(K7ʵ[n?uV0(>B“R{Sa=pg0`' >@w]lmNiIS/xeh~snwU~/Yrc!ih5Tw챝E%'ӌ{`눈3SH=]Nl7,;sg:pCroGhΓ~&v#]m8T;19o-l kQ@IbJ/X*-Y~S_E,MUp~Ɖ)B5TAR5lgSa%RIY;@haS+#yX0v_d + mV',sjH r4ڋđL ^1)ܩP5.PGgBHު<7 (0Qn }t)Ee*pzUS6YO-0CJ*HwէcJ¤Cfq$fQ$PWbxc0( A j. ,F#TO 8mL፿\P#!5:78Ȱ}56v-99_Ⱥj5 R]:V&Hcshm5c۵`L{?t?vy|2_,Q}dNeG{uM+7sg]P QkeKDuEB=eUwJ燪{  3Υ )eWe2Z\ '=̽/02r؂ #${ϻZLgr:mSصeUv/M  `7nV/"'\'E.R$$ =Tw(JorfL3zCyyқ:M@2 zD٘]>sנUCظpZP ?ck+^Y-w4)SWS .u?NP_>Rf|S+ V@~,8&fx'j [5O(u*<(<| +c<}fK"s "Fɧ5q%^J4KST+(,}1ư +ńpt5,|ϴР۶`uv>4T~(UE5Xq\mvS0,Sv{)L(O?S9Oإk:U~@C_!~<.N֣Vx}K"Y3'aʏ _xϙ۴!@{nE@+yj; 0xn4\vWK=ɟ2&>Md#:߁>!|#{#%v/5*U}HIYlӍ(1ȋ:,^U$[c'wJ,"QR4@ٗ% 0#X,KV(etV G8cBxCN\caߐrO[VhOs&nBâSJTt3ڨjs¼%21Ņ͆W'GY'Ǐin^~×/ؾ OKR)<~a"lMb 灷E^JaF┎1"Zs Igi^].q] M^{!Q 9̔4]"M di-`zE`zFN; 7H-t``ط?|2,71$(w8B$e薓>0N,M16͐޳U os_0'd]Sr$DUNXh/;gj>chpb_5RE>V- >b$e+wZ 1ưvj}y~^Jbi(@7An$u/ 83AUXk>dT';Q~h~i|]xΡܖ1*c- 2cWoaUDs#3{?(?tK+gUm%G]gb! J6f&w((MBM)$OyB'iRڎ,X- @ \@aV털uR<7OLC'\i.i1J©{7QuWuܑt I@k fuQE5Z&a^>r|8Lł,ㆲ`*CSw/7>P1T%`×j y, gO5||O3D,=.+UhBgufI.0<:-T=BѠ\v~L^O\>Z 9UH\fkHx Q +r4BmRӚʟ!UyNQ4CkX,PVlk ٱn&c_%J(L%hȜ™.=E6M}MY>7)bR"|Yʲ,J~tkOa)j :ySrAE& ae<&V}ڇ2OI2McXizW}IFO=FN4S[r{Gv 5g:=2Xl6̤XwƯwWk[w*;*u?o J"T5IGgܬr;RGns_Pc4Kɏҥ(R4w~ $'GM!%(VoLcքTJהjt&l;̪ RS^:=baN'ԈEgvqy{<(nAy[\vWӿ<:S+ыnhb awoEɚZKO÷$];tm],|H`C,f@*3/G Xxot^( ݳsUc:7c)z|S %|'UUKi0E-YjeD yWԊn^N%{MD5Z6=9%+LPK=m¼V8[m}eD" =d͑1s.f/S.&맑f:z>D*9`$/{e^>ܳ:gn;̅ђivZ(ܦrKp }4U7D(vRW޵ N+"x>.MiJ>\eTKY~>RH ̋hRǪEd>I~68 e'e4xX⛒ ~ Lh4=G]k.QJ};9>A 0 ,0mL&N:j|.bB)w^W^KqUI_YnL95+Wj[EfޣD5N㣻6au"/Ԭh ɱS d|75]3o~t)KRs4w2J 8I)CI9<7])A8}~׻oL0Xz>1ϣLOJWK, 7Լ 9xR66U+2ƨZQWY|*]zQvڞ0(2vY f5u>rhP;E8AV7$21d@ m\R*uw\!,%ꍛWJgfյLR+<6[L>yk^P9Wgi^hL}ѳu^ޕi^ߓGzj_8wލaG'Es2'(<=gdWAB2^-pBM}06d $ t1*VٞFTSpC,XK.t`?zJ'\baSL|( 7Z[`owy0T|aݘjH:)n߯I/Ix`ShiKƙ"(d!/BkYפ)vAaRk<|ѱ<_Bƹ MJ@!wT$B8% eC:;/tf;xuR^,d"+ҝS{0GZĻyy1+LwNeG23Fh5ѰlR-Coul=pʮxɹ0fh`˄4z d)ĕA]0|ojm $ІhH f:M[I:F #m-8hR, _п"sK5Cܟ%fkwF$PZ ܉.H|o&cRV>TSJ\'WafdSY-v$;$׽F'\ϗ j;:I+5X׺Lc.?a! Ou lF5IT xn*RZvݚw]{|/îXQ򯁰hV&YiZV?|)OWNd"FՅL"P r[3mgv;'s&hgGԼr_wɘ^qGC80^Y>1+j!LJ2%)hŐʥ4"Whw)p<0֥ ђK@L"^}[u}q1TkiIZfAaCʣ  !P;Sd jՋD[2i$j#'0tOڐJ {5ԥΒ9!-140و!?/ϻir^0&L6hw%0˽!oyZz,j~faTԱ2'A !`797Ojdڃ\kIcgZFjDZm j3BczYc7mKg+>TGA,T2h4BfHUyN)\bKor(a(!>Jv!#/uR nt_ekۻ:nk8_1N86~Ua0؊ l VeU~>Eg;g KFmB8^@+j8b/:67zSPaۘc, C`" ~WuU+A1MT [VrD4RK6:bsCB'I7YP˭uuD`$WRT-'2/J1fï“Si{zq>&E*t8}㘁In,VW؟@ Fx X\OreԳehr |iWȇ@B=SKꄲO[UP/cR`NH{n%X,hnj2qe$2F*E6D y8BS3_??+X:[옟ZXtı =1ZjS|2cXnܛW_n% D7\*Gpg;6qi{CB\G"peԞ`U?}UlD-pw=jMovP sN.-x!2l;ddSYK>[xԵI{&ZEg^6h|dUc^+"KV^ej{C&c0)Wڄ{ F݅Y2e ֽ@C= 8E"_)&m+@dK3uQ*ELFWP%>*^C Ag}}bX{/BD<qT('\ۣiʧhMZ0vY2^fݴn+sTUEoV]'Ud9_+N&df]*C Ӈǀuf[.{ q#3el[fH/y|ޔTt|PuAG He B81pϡ>m֕9 ņ#⊬Ε ܶީhx-T:"apr_}z޻9D3" U cM[>5^]~e#Mrr]_g+hr׈DZYϕ_]j.p@J[9l!L'FQȔ**$Da 2 c<@<.0.)5wr\u)Xę7#$hRUfr#66-4*W،GmCa9gOu=tPY N/jpE{0ōɜ^!v쪓sEfBZwLEdz7F 2I5?*d̏@{/.U^^/! LId#q'[(G,auH•$+Y,P*~x#h h|ۦEc1>m"H1cO[nkfqbZ׍,:ڔ؈QnO^J:]\EF}v[y?Trf3J]h:|Bn4pZH9_hLsx|dr9kk26f\[˺FFnnz`X?4N|e[.(` SI6W'&TF} Em^+.^PN+;yE"0B3I\bVy 迩ыbm3Oh2"~ƤsVvӃ`Q .b1rD 9|VM/̡#P=ޘKYsќg> ^B5z8n`OuyL&Oߑ4dҷɺ.%ŕ%RyCq9OS?IǼ.ifdNa~&&`[vM4;X%J')ib09h%e4q<:y{ldT`lky2sJ&:F7!$4HvVKkc'ײb\!.Sى1|hF?j(Sfj}k,9< )̞(4;asqL=XpL6g*MeY柉 pߝ$IZ&x/5o"Q:zaCeLeT2P%!E0(HzHYb*~yzV$fԤיi`d;.,*d1B%B=z3IZ5ʯw0">U@ԥ␍TΔLja+S/ 7z"WgɚT5E|2] 3U:O,x:$CdEMP3d` xL҉կ_"YJ?kOyrYJ3dCt8Ub&57 32H"W=$$Z'3'Brt{ -1COLģ CM{ƞ!UBVט^>'ר#lqQ~*w0}QROWtNYV"U$d5 3lq>[ǖ]׽%V6,68v>^_Y7u=z_WK\tC.˓$=_>@+C PN?4|AyfUZ fYYR4VwJXQ>fVEt"C!9Ԟ-*a ?[:-$ WdLOQfvRFmh5scuIv^T~l5H3 \+o ~M1,LOB}a鏛 YM^Or\]t w^_L;9FQt2q9׎L.JDKGN>ZCYB?%&<6AϐHhS?_wCB >AglMgve%-5;Plj \Lr! 1E-6?K--X%,EPOحyiwpZ*}/qvN]N50c5qd9zY~FpBuмK\z/){y*lUj=)&! l7(a)B)O1EPf nA]iEnжC'[[ l'Ъ$E{Ҩ~j540V qMxZqeA`C*a q-1k!>k ;s'8_)tN{Zni qg]vA)Op;frRԥeB߿TZEAY>p.BIxZ0(eoO3D+ Y-e5s;w=Op N*H7ΞQK!DNTPue鋊R!I;Xig.6TpbGاz< /I F2'{^,Kwr:v+5cY4!d؀W5G! jAªch`iUڍ7KѶi7y}Z0Y%%v'l|nm,Fu}ע~sI;lƬY/rV9"0Ӽщߙ.LQBUt7+ǓZ#SI2 V]*f-G4j[$s? z[& 8Mmșȩ}K=!v. =' raXZ2xK|{O3i̒⑖FMgG ju⨌5E7H@I2-S D0mWQJ]!*Bb` f}1WH8K6!U k[Fm|c$mDqydR6PҊ *^5ډޜ^)25tt"r{Sdk|!qs7ג^c>_`G 1@# `Z^93/o\Xعdvc].uuo{|I7xnԫtzb﵊PBKoCs=%%G÷x >Ȓ&3g[ Sjʲ*'C .)] NlzT]aNN xŝZZ7M{q.IVxD§i+ ;1p91B-˜EN /(Mu*Xpǘ bdGb+WoT)I )# ?/F;:XUc.pـС@be'?`5/Ws ݗt[#H1 5F11:+ F4N ~}E@^ge(~K3$OphM j9\8TvcʯǃiAq^=2nW}Iѧ} J/EfphXTVjX&GWEk\ P#.']`r<J `4=X{8=zIۓ0GHa'̹+(N J<≙ hؚqDZy ±1Rjƞ # pRO2?e}+ƭ/}My ˩9vFY +InSQhIЊBio/džȵzJh\OH [3݈Ց&}^^ Zmm5VLg6eZ|nulWxvͽgi L$W,߅5 g'$XJ)DMНMk_9>vQ[2yϲHH# &gT>Ǯ;0 SOWx0f߷B.X *5,P"0كh7TPG@d%wv94Q! B' ?E1`wh\#s`Tj eoV@ݓ SG^*[J5r6ZSE{]!TEc#3Ƭؐ>E%! V< PK<%6H[/K3X+}'Ӊ,¡C8nXA/w*c3ț#|t3`P-~]qįS~'dX23Ieni,D[7LrP8.-` J"ăZroTwvDh}tOE#"Q[@g-'M~/Y)cQe6|I 6 Æd&8ƃĔfX (]QhޝƲ3F*x, A42+ %uP̷6XFo2FOnX٪R"(GRD^"U1:Ʋ!\MLdDnƱ7.$3PO!,x>1{Xʏ"旻!cxv  Ւ0쿄zTe,o9W뱦(!]!F~\[4/&]ȺNKa(Z HbzZFzO_Q+q 0 p r) ,Y`K[KlXq{Q1$\R(Utb{$?ޔHi)0! Aٴ9wc9`RyvH03<~uy6-'<g$9@fxat6 9cc0T|F2ˆIbynʃ )1o)ا"3IPaSJ-{HI1N٭uX(O_\dD^ qR?w}|4m|q6(؜[ endstream endobj 42 0 obj << /Producer (pdfTeX-1.40.21) /Creator (TeX) /CreationDate (D:20210717115033+12'00') /ModDate (D:20210717115033+12'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2) >> endobj 9 0 obj << /Type /ObjStm /N 29 /First 210 /Length 1542 /Filter /FlateDecode >> stream xXYs6~ׯc;kdƖ$G?bE;-QS_ӾdF~aA%3`<5s&lʸfRcbJ)`n T10kMG(jl)jH:1AdEo#1L &yo?oY%;2eT”th N87(f!dg{'7Smv;+&G*fW;4<-Y a8~EGml{A)AFL(aP(gQ -:gpkv~|ֵÏҬy&?K}X>Bz)r=^R>wL?9)Zw e*eW6$&c13U&D1̡KJzL2|uȄFro\LZ?ϲqE^>|i'#WU$tgU+3cu97Cvw_~GHE|E{,] Nx WX*ڢOD_Vޟa1xd2t?'QV\V< }Y ouIǠ.PFnVo|D.eUCl^ڇ|X*|]ŶZԒm+[mj>m7y ,PUr69hFC~χ; 눮+ޡx%%x|Wze'jm&_s> endstream endobj 43 0 obj << /Type /XRef /Index [0 44] /Size 44 /W [1 3 1] /Root 41 0 R /Info 42 0 R /ID [ ] /Length 132 /Filter /FlateDecode >> stream xKxzԫ$$" DYqW#FVa_ɗ A* 57335YH}|nj"9ǭi6-Qd1S5>MnbPTx*51+E endstream endobj startxref 83867 %%EOF survey/inst/doc/domain.R0000644000176200001440000000441614074415500014730 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.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.R0000644000176200001440000000357214074415506014273 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/epi.R0000644000176200001440000001157314074415504014244 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.pdf0000644000176200001440000030632314074415500015302 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2108 /Filter /FlateDecode >> stream xڍˎ6֌H4Z Rn/mzmyZv6{we)dQCrf8}}ng4Ά|v,Yan7څ5iK= <xV<..̏z>a+__wqf- Iؼ-]ehG$H0vbFvݬ4!2_3%ox`efY4pΙ8[`J/!z_pj^+O}`WR7TrHR9Y{"׌"D3CԈ _aU9ɠ;&9I|^$k`]^:|#0[P'2:҉C3zh>!'G,Ȗg +|Œ)X=2J%~\cgU <hSK1e6eɷz_hN<)g  ݚ]CqR8i|pXB1Z6PQH+8f#tG5#'&<$)x]9`BsoI-熀Vdëݲt^pl=uփQ;Yw\| 'g<4r:MP)>64A]5HB} &C~@8y{Liu#_9XZF ā2 |PH k GE\]3ns|4Ϟӝa˜Dl9}0/IO쬒:>Sq,R: -0 RVŔ" ?4r% 1HI[`WıԒeNV8h" KBVȒJZMaȳך5.lMh9{,cn* y XU3“rZ\C#XX 8eډ3T&Bn4 LUC2]u.! Co3ɸr჊Ap$8Q+=ӎZL[x SnZ@RBf,Zh2·+1Z\lg MZ|"p `;[P0 }&6PL@ < *=$uJ=Ss'aAkFpBzsu䛅=ݏ"mZSI*2^z nzK.TO{^`yAod.eV)_GL]20 qm)[RP-<L%)/}v^ui(ܦrH3>e$Td9FP\5jzUJ@D~;a$қ*+.eQrAJ9)]܆Tg.mu]Y%hrޒ$3 4]LJQJFHBL֜ܜe%m*gbA͓}jt\(z(}(vB4,һ4mrrΛSV<FA"0HL J0 x#rC0Hn.aRx?<ۀZ Sp$%y nH/+xa%V^-ì6W/?/XhVr?`qE-=_u<6szK4#S$ m& iۤ$NM}  *MWڼ n5,p.&i,Ɂ/xf;y ]^dx5Ep]zQӵuR>w؉oC׫n13hx]pxv )wt.MAqVhg1V_k^!7Uɒ^(#rȤ( hvҍ \i,f|GܩWv(l)"ОS}3 endstream endobj 14 0 obj << /Length 1757 /Filter /FlateDecode >> stream xXm6 _ouoKذ C/9׋I)Q#Yb+dH^p{y&rD&$QFj21}q1Sa4m/h*vDG׾,o1"+}$?(/%-Q D1$-9,, WD]53rЂ.^Z*^a=4,ktxrRyRXk|j=w6y&u :?@cz>)%D?]gJiĊKD0 r)wNSuJOdICS4k(K5S ʧ\ ʉ7#Ÿ0 9bx!f4!4R'OҾB"vJ<#qj-Ÿ{kCuސîcgLnQJMWνY J|6,[Fp ^:+dLe7ҽR6LH!xR7}[ts]B(d_" lb/cL6ŝuYe勖(U]Kkh<6*Pɴ`͚Z曥'fS̰) ^}fqN},heOv^EXhP "̦Uf_*]I[}aJq|)B`X:2]롢'`h|vkVOziDl{IXФ9HniotYJ:SwK Qԋ(:vcFc*QoG}6Qm#p%HLIzp0^>n d*гO>s8|Ǹy 7\~FE}i cy>,G7_ϒ,FhM>q3`#-q;NOf˹| SnF\Gs;L8 ׽okٌf24r},I "8W@Nk1>zw}wa$Pۆ!M 1mW`ɱR2H]kA Yhft,` s+v7z!M ɜo+id)vXST3"γ)R9JI,29@.,VlZ١{Z[{/Lþ+>5HwW{Q_;/Qsؿmw(2ۧvzO=?J9Ny%ᙳooCovm%䧡aL3gqqk85I\i/(XI^( Xwq{ endstream endobj 18 0 obj << /Length 1413 /Filter /FlateDecode >> stream xXmo6_aK6bE*]l"heD[ٖaC$˲&HwY,I?R.:I2Ɲ׿ro*ۺ$F|.˙|hUw6#|+o+f dϧ)fj]M?+czNq\T/cΐ+7_:>XEYCˏby^0> b?Wc3v=oFZ`K s+Y,) vczC-A%7`\BTS)TU#pJύ{JJ1zD$Dz={ #=X7M*ݒ51;R!g ̰k`0̈{!E*l3!2KP-P[a%:65r eED{g r=GyYabI^Mt\9۝Cu%.C;r`C+*B|s#2^w5}iknnI;(>'`LIlr[Cqވ4ZHy(]PxyԸ]Bq\˝dS oX4l*[AwN1ysDy Ajq܆)wO"Qqy TtDδ+''Si01`<`nW_a^-k:`Mi0֟DuDz=Qo^^nP&5}B_NC1t`c.-9%)NVHƴ ռ=<jo={8GrGt{>03f u"v> stream xX[kF~ϯ0B쬭j$,&K,KxCP;SGJ%';o3nЇH3~#89K M=#/潘 ɼ[n|0 bɇ($ z#Ƽd#`ăD' m-@I$CP@%񹦮)jkK>L_o^7w:AqĚe>RDsgJ>8Ƞh//>wLV^ɠپ#h<=́X=np6{x%|%D/݃&e\P8 sJX$/NLkbS|E])\bx ;[c2&o+Voko{Nf 6\B(EWV ޳9Z;mMv pJ=f,H2 _3vŷܨнmACdcMw[axl!L_*K[;ݠt*6CۤsX& X_b?vWz<bǭi:W.NB#I/ @d=Ս,=wv#wӹtK1>fN2=p,j&.4= #s&E)rئF”yBU>2qF1huFkoLE]#yhB'_Qp>b;0[X `x]^-fRw44Dg\[ ":=ʦ>_du!v05 aDMnL?Qocd5+dL$]-g-xIukc]dUNսyM\۞+&nN7]Qd)vWĝH  RiC)ozw8 fB2F_IAj2HBܢKDLu󺕯To5:ԙ+0)l:3ḧ́|,5+L+U٥~3\zHnTBTP[ңDQdM^ $oII4j.7=w]5w'l_76"yKr +{gɰ ! G;6u@ ,k(Ha?7DykXO fn[D ]aO9Hpܘguk\ MѸ~ .[=jW_/3{0,[ɸC' FؒL^;p' 4hp!aNG<ȝSmgx$˖ړ[EhNe@ʵaˋa(o=4 Ii'4&5onRG'!p{&T^s-%17?o endstream endobj 25 0 obj << /Length 831 /Filter /FlateDecode >> stream xW[O0~Wme,4NR ]i&螶I-jТ2!!~Ϸ$ꄴ=?>YT%HE4F<˒Bȋ$h8uNydF؏4ϕ7}$KJ=Cm7oH.{; $J{Wꞓ9vHcD/Բ}fq7ҋkc,(q}neQX"KP[@ ;4i[7$ό:4κŖڌ7R/b7vyffUƫ ?m-/“f6YC rH_ Xl#e{:yx˹J^R)z gB_S4\"[]@MnhQ(g B> stream xڍP-!݃Ipw%<wGrν{5U3{uݽ]@.e؁\Ui AmFgB` ȸ-ܞlnOY tޜݬ#o` q݄#$7Ʉ %`/-:N??}`N&k:`#?wxp{e$/+#??i"+WIKüvn>.i{Ѱ]?ba}:U^=̀Υ{R-?"7=}'OῳDɻC/?n o“hݞ@4K50,@CCV7_Zˮ{ƠGQ4X I\৹-A0pqF'>M도0Ssk p6ABO?H 7z (>$ p:8]\N?Z<)>ÿ ga ڐj)rO1iM fvyvlTA.Rϗ^K.P6ף$kݽJԚlE6A7^+UKF#O/C!][W]őM͟_bܽbՍ1 ,a(JBNʂw3s~17HȊSk;rk')= %9$v2oyi̪\@dBȗ/Hi_kTetwy\zq5#uo(Cur` ț{:J$8+.νVNky SOSgtdKDssonDF'݄e̩QWT?6 y\1g> ƴxmnaDDX 5'>2^-:6}- :7ք+tlVtש,p?A}oL8䥭%܅ .0F}tu솻>cy|*Qpp1;Snb6wmH,["$[ar黨?bz}ճrȝVs4k+ qy}t dǷCrFl 4fq <*ԏqte^/c.P}Nq|9ȊE{u$~ݹKF~+bsS? QܐÁjs`at*2YplnSYj1.o7 % lW-p湞ʕ_-aV\zꧼYg'g0qi3Y7W'6嶆?gC_GbԜi!(UVRzVX>{7ꨩ?pܔz(;% ͨXv'@`Bʁ`,KLߺNj=2>@.ֶlr4oŖn|U='b mo|/c ڧp1LlS @ה؆fI^:8 axx[2[S~!mIƝKfGٻUBlL`N$^բb5zv~pz$rZ`LT6d޹*N9бhsY7繙`WU>JPR@S339ovuõI,Ysb>iId'^?acP)վԱ@R/"Cw?] HՒўַU >/n-&˅7a_t.hFRK0|Uqq#&,6PɸƅBQ< = eg/[ڑ1þdϾQL9$YrKH7:v1zt@:6xѳa{w'iW9 G:z4{2-0%k Oت驭ѣmeP3=v7ݭMPC= ~fw{q…#H7 Wg=JS#Z8-{z,bM,M U~^1Pwo#bO.0vM]EF=B|қLVQHtqʵ7OByD͓cz]?CS;lnzZBG4\2m"+n8d57#>f-ɏnh>8īz4]^j-DmAYS$Ѻfׇ"+A[MX$Is[eF,t=_m%!?zU=գ7=B&8+Ga'%(ڹ!f^?im$ v,p ~PR|g ˟`D"*}b906$+֊@걍&𧶠/iޯEaiJ-C-B8''pdUpȮ4ً;0IbΥ%…i_D1za+SB{j!Cq'7N8 6r͕˝6=g&bHeҗh`6|ByMOV9_ḒsJX0ʟA(3IԅZ!c8XF:deeo35[G6x(M>'ɇ$2B7Y'tS_hH[.4nOԨmǂRa;ɢ;ǗC"9Q'G[{B2jhy2O 9hBx0ۮCEV MQy l^:}4d,8R<'&D(v  l[Om1è|E_nXD*e#YzAH,h{Z`խ IvF^xHO遧. ˄oT?*H8Yے=(.Y YtxK ⼀w#k:E5} ^oO1=(aK/lX*WmD[ W=l`wz-ʍlm L!AlL{=j 5qa.:x;k]ϧA66Nf/kV=uָFEhxUH>{ ӱ]٪M 0-ꗈpUun#O +sL-X4'YM>ɻaAD4ZGһMV`D&ϒ0P%Jv#~ RG+ݷksY?&Tvm #^y(a&^ii6e==WibdKаSBn y<Tv `̞ɘ1ǭR}Pv9. xmNj6P(Ǟ]xi*eIЏڒjVs',j(lt)n"8P!Q239b)8L &xdI O~^a-r[6,.PN=Z&̻67o >,OL RtUU=A>i,ʧ>ArŒ:h$$VY0Ȍ.bsxd"CJ{f9_iqkdXkT%yA[cE 4C *ȇa:lFrZpV> y'<-ʨFF Ǣ~fBпX4\Qnv_N~̚` ') POeTf #(&C pZR$UU.UacWQ-KxzEx̿%wA.%m00ve 8p׮SM/~f "ݠQD#zHa:_p3?Ӳ!Yfb".-h';?Nk|68MSmR/g骰viK c΂CJ8$ngï1r"=FlZtoKuIصa~N]̬uR0Vr(Y 1ҏЗL~\mK+tZ]eَ!a.-H@T#ek`O996(hp"sw&b5AHs/ ab7!|Q_:E^DfYb=[hnUGݕON&?>g/ssX=}ٚȰw8;2땜7wh)e^ģ+qMThݸҌ h}!hS@` "X& oN=l8bdry>^^B>j+ܮ? K'#wMi`),CWBc:hlАϔ RiRp)qѝc/hHȊ_&:PN!A]Ç82@*­]OMg$/Rpݟmp[b!oNR5׾1C"Yx6ќ9,=;0vQ6%F \FXٸ7؉) "mStUbLAEמ)-NYXFd_7{/m;~\pq5p;޳f7͂*j<<!|gDӔ\[!2=֍g;7vqvU֦6>Ծ_<ǥѯr~,Rl#&曓PCnU}h-4 }hv\62l7t١l02S|.Q} oyU|7/EIZ倘pX2iLaz"'Vgȟ[hRx" n_a'5b,U_WdisʘjG~E&~ە\ouYB޷%ld~ƒnRF{F oz\Zݵj_m3؉7&|w5IV_ܟ&˱~m""wxW͸m\s<5,{!\t I֊0I@PݠwbZseJHuV1鲀q(3Bs攻I ouJGOSmuT\Aȸѭ;nbJve ~G(*1B3;si~*˹ V"m aIY)ǙBkT-K;:P >Zr"@x>qBQ,c\ƹ6^Ƙa9,dCNdH0nZN T25i;_7h3#-n<~$e)baȉY egx2k 3*w |OZP)1-|֢c̽ K#mYSSO ^;j%S2G-é' ֋I{Ցcڬ)iVw Z|KP݃'|ρMvP~b>'{}N3A/k*m4WLb ؽ!>fYXQ2)5ȉV"o44\ANJhC,uv.Dԕďqjp##ZBuf+{57W_> stream xڍwT6t*R%*pIh{BPD:HwP.Mt Eҋ˹k}Z;3̞yzq[ϐ_i SA"`@Q[[ @B OaCcH 0S`q@m$E%$@ $7(AvmÐq("Q^h#ߏ.(7,.~W:@C!6sŭ P8 \RX,Jbhn>0a`hw+hd#G8wia!0;[`EZ|? UOBpįdtEA^ph `=|'A! :"&3 ep۬SDX h^?@z |;c=Dp0u?> '$&`PGP_AO7n?Ǎp?d>; E?g C[A87;4` 0;$_G T40RWS3 HO _Pp~?rHb?m=!pYL. o[D@P_)?2;Ry+!p?ubq2FĀo)vavUBprG8( 1*pO uM~㟂s#`zH +Sw`p`p:ȟ6 '"~OPDA!^dY"0Nv0_H,.`DG,w&))ܒ(EFSu9rPU!كLFhN{gUY=f~5}?XDdєj?!KZ蟣f}= K,Ϣ$L\i2R,[UZmi5:ۖR:9ڤǀ?{R2Qvyl}2GLY5C5fƻF~ 寪4Ue^-?'.s\㦂bF2%s!-fBB O}}/쵷+pθUF#bibj|oꠙ1ˇ˖Z}bޭ"_b[Q! -w^̮tG*O+)x~Hي'D^s}!Cy>ӻ!i2 _fLKnP]lZ_#8B(<$hR=5g4R>|e=#_]dePͻz%jsn5n~RhTL9-"rNw37)YL%73fآG ĭVt ~ݏNFϞ}'ۖ6W-VSQSw31"ڹK'ylpg5\%$)BQo$a*\dO~$3ĢdXWS뒘._)/{x?Ju&UpV\{3ZvR?4QɃġ@eǝkjntj%7?K4N:^h#F/aƽ?0WrBlþlJufy T c\}P_oD;@M|){QOVR/ 55`-msr^H N_= k 2,7e[L64o3;CB 3hҧyiƸ9Z?Jv{VѠEav 㭼m.25naB=a##[-?̰3g#i}'E~DeH{blM'X7pSGbPp3A1#zQڵB?v#3cEwĐbp2)CQ,ޥ{mz^~ 65w̽qkuC,E1T[e dUG=:% HZ_r{=҂539gF`([c? Hn)?'(?o|p}#,л-m-]AH4^\ II00ʜ7: ~( %f$sU /rm~S9vn}ٜכ\RVk܂u_SZ:iH `J/b;cQ*E%˟{O|ʹj׮#yg5ӟh$z~QQz@E_I&WQNţ>v' 9M%<֗gbQN/:{7=xEƳ6o-N~O,^cwNneɔ/H}kR+۷ޝIV #Jg)d~}2N)cW~ǽxsHhvaqx:>W̔d=_kDӗV?lq;Wf7Il0V7=U/H(t²Du\Q3k}O f2:ا}p :ռH‡R ݉Sp ;7V/ϸnmx i㞴܂n2~BqQfSCT3ѓ~6*iKU)jJR*ù#.{IYy(2z_ B, PmKжBѭCʎ7CK6+rѷ3rZtK,gJʿx^K+0&#_~Yl&.PWkl)̈́#S!uDʖA%tmD>L9lcFohv\C?WӜM_B^yI: O[QMR~k6J5 Qu濎/y3NDmJQY/42 0Jht%[p.Eq̋sҪt$sfc@%I@$a!fz&m=\ #[>mq]:XYP*Yd݋,D[ O='QBx?.w &)@ɓH6A&0XN(]Km{C1HAwa! ~^nhn~41 \i9&/,17B !O*V?،,&Ōsg!i3ۓTdD`Ʊ.IV4Z^JXN`U~G/ ICw>o\$7;K*wmZ V]9\AY̧d%=EaMuY Gw'js_Y\e&Ku7UL۱,>/[RDžM}ԯ 7Ե腁ڬUwmDz bO6lORs򛯐3DޒȾ:葷=C43=` I}IF4D; uM50߳}ʏ2ɯaFAƶuoq/_RIŒJ{FP|(^L:M_ bxlAeE'i1Ǣ$N 3+b!֔_%{)LwXM\zpS,QC ^LFP纗\cA@"P4$0;DIw;DsaG>ltvyB$ sWlle0*wkٓ\z?=wt~UzC3+s񿻚L.rke:D?rVSvpU- =^,5`n-XBj{TK*qC "1PYt.E$|q=`diW{%뙬RG3|ZTWC댮R罹Ϲd:e 7^BA`BLbTǖt Pѽbf.vcVqX S/6: 4TսHxGSū0u֞P?F=+'R~|6E􁨷V,nbeF^=7QV}m19 i\ڄ~dLD=ج|ALS+v$r߻4 \ȴwjfmkǏIbD3[Zɜ[3+ϊdb"5)΄&,H=.f"긁- 21 cC&Jbϟ;T7>3;˾Ιe\0Fv ÂvU[}X@ȻMݵ+\2<çeE"[7vZ|D+< 4]_apCjUiBHb%2DDFvRWĐJ~fAp. +/jNٽMcEFZ%cĀm%S ;|gFc/ÿ&_QKC/My .U%_Sm"$QMOLaXL>c~*ڎT"|#hyϓs0BOE઻kfV RK? sܠ%uQN&?|6qXHy5qoN? v.dRqC"ɅWV-'%zgg»8x<3r}@E1k}.)&BFϮrhz3zI!%& !7zg7 /9Fk݉u||9fcV3xir,e07(Vr\{YwrVH D Fr؅L bFux7|Agj I8x:k5W;Iu;ߨ+w}֯SrB]O.׾|t%<\UQPM[Ck5!ŞG)2~D-O42*zx>'Z&\epv' nKoN;a} Dz7C+LmoxN39_[xHJbWV"TOߘtCԌ[B:wR/'4dQbpY>*+cROM endstream endobj 39 0 obj << /Length1 2194 /Length2 18408 /Length3 0 /Length 19726 /Filter /FlateDecode >> stream xڌP.kp]!wwww n}Nޚi[HAV(fkDHUbd000100;Y-#U:8p@h!1pH9[l\\ &1udR6@G8Ra[;wsS3c@aD `d;@`nd`5p2Zhd`P52:W 3'';.zzWWW:kG:[S>J@ tp* g` 2:8Rre['W C`enqp1:>(K6m@77F:_ml`ddkmg`nnc 01dܜh6X9~[~+s"h`nHhnW`YXhW~"@YKsc0vW1wJCGf t200s2_UR2%`Qh898=o067rMmDM`b=F_<|/,G'$dea22j2``4+icb ;'c7ſ߱l? F_ϭ/+wBbVVRSKQX[i>@c l:;[o ژZFsG1s7\)2*:VWted:?Z_*6F+?+cnjb=Ӈ L?NwrdQ6???vr]t~$aL?SG$GT9;|1݀Fp+F܁u5xs)+OЉ[w#{-!m^/zJ3mpӘS?a?Ӫz{YvI;s *=([^b.qcBɱ+6>- q֒gI[ O!a6M:-21SzRMS_J'~N" om? ]ρXM/ͩi"~cbys;`AԷ~cdt>8ait[+#VW:~2dX:Pf% .nW>9^{W6\unϣ,Yɽv%_]1gS䦋nF+r诶+1DJ evY H,Uk[4*$GF.M$0\&@Bb󩢙6k[t810 #=DDj`Xr/5JlMc9.5'd*a|杳kd?_:ӈ{l~G4۩tTg(S׎vc9mU)Bu&7c{"٪=RXW^3ǡɽ,TBl,h/PȤ;u{(ӚP ES~{[ p1jwOm sT_0bcƕR0pQЫɞ@ZH@U?Z-K=dhQ6WȌyƽ>:Z%O'mNQHpdͫͻ-@,$-k۩݊ʴ'sp2jl!iaL{рEfs^xkyh=#2kLw2¼9YqvNI7xeS+6w)h1ki؃Sأ.>VydG K+ dy ~Ҁ74zsXYgX,^a8~A…lfP8wk 'FAʲOvStZ,L F҂ 9 .g T"ovn8pU[w~R~jB`_pq[!~㾢!mqfHqGYAUgs?NYF56d|\lr݃zB4g;d>O ~9R&{{4e=g(7qo- ܱA<AXT?HgvH?)bXBG JIYL 3s(GPrJ3UG.³aǹۡ&B(OAdL,V$LhuAgEh}Tb:Ee# ڊxbTe*uwzʤ*?Z٣aRϴ _5o5˟?F/k(<U;y^@$k(0$DѭUBOc6i&AoJ/r Tz=Dp)\Lx$49|Oi+]t^o2:0k-/.2[뭇y,SH|/{omnSޏ:^٦ xƺ/ FxbЩ|m<$8d6 2uTH1&ѾO'@mFB-n?drý%pGNȣj4$;7|; MRHA>B5\Z 4η_A`VB?+a 2]?ml=]nh<(J`x@s,#k3 f]y9|ؑ&+ׂz`LL=7b{,cbjzipo4]ꆡHħU1/8ED©ÆNd^Eiހ2ӢN$B_IH_I^Βf&Wlq5e84J t+ ,`;$!>YAsAIH Z3Ek9OP3}^"-yoY'mK8R -n|l(V!r˵!Uk!pV#@A|{cM{P yU2wO=򾳟0cF?u7>v~Џ?bڃQXsc72̾ <=G  $C^)U~n/i. ٠X-̪'аXD95{VXi,mE}hRfiFT2#p);".}ZU:t/`)Xl"迥b\ۻw1sy6_+:j՘Z|/锶,rՠ`lwSkFS:'_E@dt$Q>@k-~( B"ULۨˌ$CdMu7ƵM3+QT@cu oTA cq=>mPw >}Y*h!\z2Ys\4+̀SǡA hшs~z#$tM*DOj+7|Gv23d|^2VA]08Wѝ9C ,[bبbUv 1b93<}hOe`OT`æw,L:1,%iyKi=2@ۺo ( nR%lbZK*ىz+39 ~t<(}g_1>LR!zV;Pǯ"NiDz|v"kNq#ȑk)H^KO&W:X:{V`婠l3V_`1ii2^[F 9CKdJUYcZw=&|$w}VqMsU?K^[OTjWF\PH"2$6aj ׈3B'$7\62%} 񕂠[QJјP$Œ'Wʪ+S1 ymc/-fC펶-qp{ĕ^!`eO^A2 h\&e Ž̗ыWL8Z?_2`T~4:[}yDs`L}7C{i5Fj yG&B^17E۸_le"^k_&nw7YGEt#eb4:81 őJu V\`:koDu{4>p*g|b:EHf3vMNTd~m>&"Or%Y3C@=uB\htUlӘ"^#\R,0Z8y|Mf6mWubg/WYpoI|*[[2"5~Knx3cKiA}qT8䜿ޜY\ƞֳJ9εww6hNDp{P5_LztwGMٔQ iXnM5n%'ݘ[| D Ll;+7v7y6`]Ǥ]BA}9;֒gMuk7K}6pxbou(ѵ#60׻L=b%ʌ@rcUOp'W{Z*$/  2=hO,R$1sY8`0s|U\3bE ~:|E;cfҔSoB T# +Bɴ=} [R_I){} l W.>F# ,s0f3-^nK.r/˜'nEl)bte])ޛi?Π% 0C"ZiGPw^oM6xu& m!qÇn"Z1_5>-꽵}=ak+ $dgc M9} CaS V"y'ySdvYe9 ea=<<~6(۸kؓaT-7wK+B{b㸽7N sy=UUoFTv7{>ݚJlaoJ=N,lEǙ͇S~ѠfSR[ #zv IC2]m%KEl D6!fF 窕=3[:/>N 6mF;Ru9͛խ~nI27+#LٴXݺr;o0ʞUkDm1w69r"\_vLc(}Vvyx&znzs'4 f0~Oݭ'}d_o9aIzku+ő`yE#FJyvy F}~ȳOq!{v7QylRBg_5LN _[(3ln$HA>lY =vIvCwHm櫐xLeQ7^/),@Ўw%M]J$_78 g gV)߮Ga-98^\\rqrf蘄^67]l\"OI{*C@^ (avy -Է}f[s@vN%\-Pm%45d2F7U14)MW ~.BJ³5Oq\iG\Q5. i,/΃+τ\Wdo1sa@ׁpHijg#Hv`Tmc{CR֜<,:ʠO @!ziKb؆a?éIUTV J0[%-~-9dzFyr@ʻ}Y!>W\i3^`w:\X;çK¼ DB}eyuI7#ܤ':Qi,M;b]J_$>J>ZA"wxG][Q|QUMw1(S0U5VaATMT 'Mp9̟켁jηŶ hHwJ0SK/d:l0΍ B~.\16 lN<@ UD<؂[('BJ i~D1ɬK9倀H2r*#686h[gb Lha8*n1ٻ\LX}H%%S+]#D=Sw'#nrr0SO6*\5#[/H: S;w'*nfJͶlݦ.גӰݢ@PoӉauf5\n`;0YWmߠ(4h{}ɷn+Co>o" WUWa? =SBcYVmk.M<ץ,=;adr9}Tꗇ8:?IT vOPv?!I(^V'Jel9(|B7:'|;楸Y5=*n!q2QnjUSre C"좯,JiBwiko\I"U,lRyÿx(-Tc *HC D.N@콓N~౩e!XRb)5o[_H6Ъ6aEJ9X( Ϳw%c'/OQ|cB z uO_d} >4^"cfGeҾ{sMwIew-KA*}޻jKwNǬ(֭#@&OXqJl27B%fzLd׼f羹Ռ> vD$ r8S嚹dGi229Qd7!u C/V7^^NzvhD17A~d''S˓aD#7ObOJ@wOؤJTR8C9rgkxOu+ .p?pƣ9%ZfgZk ,Ĥx cZb9_|M:ڶאƛEЮ4mDǍ&ñLwVKQv;O[Qj'|*'=k x⌚H0 j.oV8^_vIVh)V ^>{1-y,64rWg#؊GƆ:"hg.4a=fTU6jЏ`}K3\ y9\BO@?ޥC[qn00!@ qpIhid/5crْr * (4nj oP08ˬZSUqfDThk<`~.Wu|9`[ lzd礜wsA$%Ӈa*V6aȍ?@%sݲA QmW7\Z4# ǽ!u)rD@3北''CK:O U#h2v-GMsD+~_9u2rq| rȌp0E9ۄ2olu85ͧ>H95h! sp,"UjLd%*|JOU&,&FljQ^}>>JƎf_?`?"eUe]$lˢH@˶J觜BaLTZQrd ԢheHU.U] Z69}U؅$B!=F:i7VגPde]82V﮵_N4q|IK_j~0a29 ^0N?[p3TO1Mo_i$|k,6u|@'m-#hMa#_ag[K0nNζtͣ"@r|Mg;%Fސ'?/6LXm&MmDIv˛Ӭ{T:g@;;{axg, yE^됗 b$cRl~M| `B䛣{P&@'Z9-Oao^,Q t|PAwL%;B7*ԀVH֬ۨ[2[p]4[ Sٌ81уathͰY]GQUX'yn%6E=Ҝ TL \_1eS~ImGK/'ijUogcvt Oli`s%uz#;=0>%gPt݃Z씯 S(c͖=EM8y-8Cp̽]C2lϋ,papB}P{¬ag^HB|TŶ1~ayw(q_h1A͕0WTjOb,1?VmY>7eI'=šb[TOteoW * ;{.߆udSC,j}jKԍiu-'o3w[~V"4<]H1b?q{x+5 ;55GUg\(:5hc6!~BV-?iUGBKEj:itzDbJ2}M]<M6Vxp',(BGl?yIdjqh8)*čO=(ҩ!].bU&%vfJQ1ÎNgݩct"7;(9ruP= hӝP(+?RO Ա$gsg&|5 K=mUс6V6ŕ|hLs1esѤ2UXOh:\|\6vdt"ψ؍|b90ԎD}R iX ZVODa\`xP.zu(E`ۧ5&'{&z 5u2n$=K=q{5yat}`v`!{>AxNb8'VXo1ٰf9S#g|tCnEIZ<<:{TWpӕּNO.p]r,"KWP>-[kl_k8>mL+$mAThp6ńڢе¾vm!ON8/G7"A^|i9تI*B K3Ddm Z=H)lgG6 {k~{ WZ8 l^n #:Ԧ8ioC(:$8ASgT &FWZ$ix0>`wzÓeK⟳gyKraջ]:ԝǑrr hМZ2'$V6 )B¢0J㘕eJ_9vLGNrw."=Z,h4E(s8TbW+~38=rTⶓd6\~y(À O_B_U?a"w\Q@ثP5eNgf?2dNbn{EEjsvr5pnqe\uTE)E%5ᾫ))w\⸈ 'm9eޅj}-,u Δnf+te(iLc&4ىq&t4(R?Gf $[N.S ) L! +i&Zh$Y{}mLxW~Mc zôQXP?"8ުj]:eb~AQ Y.3"r3tsQ(·nJ[Y[(Ai~!È$T~6_"k@/$R4LZ5k@iةKbf_<^egAسmJX_O,ص@dz,='#GN@`!u =nd.*|Da栁ڹEJ$ʬ3?xc e0G ] ډ LAƝ钍;"eRS^#he7C"r2UDt+S2P\O1 b;@.pw=oX2}Fy /sT7me~9EiЭ)82&}-=$UF]*Zf+lM+ KpR ʺM0҇0Ir$44/r,J<&O2çLEOv+Z~\6/-YCLQܦx S[h)-^I3Vp%c3#;XR:=ǕD,[h^hD 69\W/sk cY7(%$M;Ctڜ>^k)XbOD—ʲ(^))fB5ZT*oIiϏ܁PJV|Xz p>J"7 k{wN0%H WT'`d່+JW{@^-yi;7Qx)K/8YЄ߰Jg0s o-_/E@* YPBvL@mtA,R7%'Ge8%ETC`Wye9|Za~>YFPvW>?e$lA&(i? \l!lFLPVGI:}F!o ,;N[PmUMw_|Nē.MwI)vEV7a0 Ϸ`\wsq.7HĈ6~$FnPgn'n{|!䧧Ǣ`,4NO]UaZ#z:%bDzEVwRW1wAwTp kJIAX,8C%Fz2]"#3w/7%?G#m'ЂSg$Wߩwa2=hV.vQ΢L/敭xmG/rzܿ-Pv+hN&C 9* Zn\ޔaڋ.> 9(j~|wL5?{%lЎsL: zP gd r{388@Ko+8wx\VE"/%p flp-^]48 -nQM#̜6fT^wRU/TqdSg^t)Ԩ vHP 3a!0^ZjhF:|DY㓃-O#$T"E lUI܃4)_~ذ SV"LJ HVv gzuTC6 L5$rpJB|kHʲʼ50.V֭5_rfa< uO}~=8Fm~uoQp0sD$+*Y41//ZXpg9Ѽ<`MLdFQ K4uܑǹ7,sl)6?jArKjP"Уs/jn󅟍>䠚oIu,$m]3M++`KyyI0BCLZXz&zg<yaB6"TZa; zvUɓV C\x>25룆Ro;hU钙gsΕ ,G-s .UyvE^Kx^e>n1.m!S?+wkTt]у] endstream endobj 41 0 obj << /Length1 1609 /Length2 8572 /Length3 0 /Length 9632 /Filter /FlateDecode >> stream xڍP.,8 ]O`a-www Ak 8$A.ݳս5U3Ow>V -6ԅC fB@@i@0gT_0&tySu\!Nn''C?0! l Pe(9@A0k``p @(@bzv\<+;;ޙf-p@ agglvm+w x2@ S+<PwAtVӁll+w"0`# Z@]NÅZvBn@0ʁ9IMs]ٜ-N4eY=>0 d4vO?O XVtudׅ\A2m?ɟȧ _4/oܞ-vw<zJOR@?k0}ޟFy,З,m;~HL1z/:]oPaW#/Vd.%)ソ6%j3ךiG_rpd9ĮϽ^b+|mFO~yj>wӬѺQ%o^?c=͝|TgF=.6s3s71 !9%~wi:l,ue}'dkGM'̔vR_]zB} U OɪҺg:WNmn>*AS Ar=%7>+pz.pxA,sYNM:/:T#ÊJ^n[L LqgK{bSd@\̤^g^ "DS'ger7j<231z}g-rG<,"4ؘfqח7dp6cB +{?r[kKacA sTgcxIMJۘ}~ȡ?zEeY։s~9u urz|Ox7;8;c{h\ m {]\uܣ ֫z߽V<_Gr?M %|2| ~DF*(hv|Q[{3IJAnP‰e-iȖ;=gs[aST΋,6mh񏢄^3ز%^P24GpטTV7qR?,wmZӷuWfП '0s5*=obm#'^FOU+&P?cRԊeNzLg~X:ߏ*cckѽA7eL}(b&XTG) d!L4(<mɸa6iD S|(t,nt%Re/89(G5POk_I՟\ ^T&a0_LV?}殦 d/{$1pvoAGˑWb}k[J9Q9iaFh(3u#D=x/ NZru[8:JSXf %O(>Jz0lPZSj!)kÑUk~?V]0e†ϟHt>(ފX,l=/E >]fN٥ Lt$s̥hyE_|2f(u-ƫ FJ!~|6|Fh\K덟s(( ^dlB:4|hZO*qqE:{^^(9%#{-xkD7䌦J*^q#Jh1$yK<|aH `4ϙw06nZ'n G~G\(5д)1&7q} Bȋ5δ86١.7: JM$jޣ5DF-5sDQ yRy?V6,ȑ3E#}R8F`ic|6DƋ#󙻶E霴xvs y- lv7' p&xnYҲ u@'iH8tLGK2Z^"jv.a\ w(>f~-7;CG0P,nl5pFM2Ϛ㥢fȚ0J/7#>Ym h'(XGEJ ]~_AxHdr?<%_1γĞ_k!f|)?s1`41Taj-0VJ*Qq; !$ a >:7ME7X|.?ec[ 9 k%M>M .rg]Jsp@eJsdf(l\Hc'Ĺ]N;KNI~Ly(]ۂyU2xv}$ ohjnNBM]Rx|mxAk j~JbfT>8zLP5oD@8Qugz; TJ͆= :KLV%ؚn0x"&YceTx`K ;Nց%<,ut{J[|Hm/{m!I(CyxAƛPVhQ|A R ucq ĚndTZoI]7VW ĭKԌfxQ:3c; 1e_zG\,692cx?d?HTxΈAR4#: u:DW|gdƳDWu~5s弘Ś;A\YA{|].F3kxcFxbKcKn*3N@L%λ#a%qZ̄y)3Rz۫tu[ե|EB7|@JYcL2XSEbZiﴅܑ`7ao" X|aYJ&>kG?" #79D)Ĝ_WY $W.صէ ` $e(ƒlF:"UEh/ꚝr՘#p1gNmxS:YY&DX?1WRX͇h+UQ{SB5Qg@oM 3Jt2[.Ť::P^&9pam|i/GC%FPS2EH4f8c϶k`"GmOV6BW|pUc B>_鋯+oP-`ig+$X~֡ctYXkV0~&͎fV o&Q$B'Qb+NlGymƧj[ZU N?m!衑ܹT'Ă$`Tu4$H7wo}WJ[p~ZG<Kn ѽsp+eƩI%OS *Lħ%z5ڰ:f]OH{yמ[?oATC7nՌkuh aP5׆ ڽz̖qw|U!l{Z#t[6ae m]+tmݎ'^5WI5z:"!skDU+ń_rhA PG_Z#@ ,Inq٫6RX;>g̭4 )ѥ*Rh}Xr! S08 fڂ!5uVujwp:Ǭ¸çWΙb/L-=Eխj+`^1eS,-q7V*U@0@%)StUR??!/'2e:8bX8v^J GvEؽ ܫq* 7.">Sc [W%EB0F7dҷI"ln\nfb&#js>!H.,L* ؜D`Ăy?`*-)hjG#:x|ar<ܾMXǨpi|L?Ya1}@8FgZU붙?r+cJ_# *s' sb!** M6"GLEL "$:H,U7-]Or{}WKD<! ˼|~fُI)Y8/hrkMBs|M5lxo~:؈5e4jjT a7CUҳöOn_!}/뉴q뤐y=K{#haJfec!Hw~ 8$TW--Az čќ˹ ;tƧ+FXP*z=@(&Z3^ҵamml_u_-$3vȂLkyMZD0HFJRzt:e /mn~U|-HU-vp/꘠ъƭ$ZWnpr|h Fl3jj2[{6DQ>'{bx7n fĘQCy=$J ֐c>K0zMґt'*9")t<էRKOƇfIc}]^"m>be3g:tND7': ٿjr^S+ m5P"^wuW&Xvpz=zjF&qO &2/ 3P %;#LS;.~p$Xv@b@gee1QaB58;/D 7DzI_ xSK.6 7kK&gEܘA>]aK8:<~!,)b8MSFnctXQ_枱xSPxQh\3?Y6DWqQ72]-.Oѩ¢drˊ Y*Zs0"Zo c=Ce4#rqk05֢-U^.\Djˡ}YXauLO!tB1@.ւk}Am+M%Sr3'ʹ#ku!`fDm3MK5OZalfR Fwԝ"QtK#C[aȪD)3De%lbuKN&,|5)VY)./:쮽սhdKj*ڷvomYqMM3 q+'lIlԹrѳ29ͧb~ت՚tP>"N8#籪b5"\GWA\OLT6/RQR/ӾzXj3];f;Yia𡥜rñjpe*.CV2e\;CЃQH08H3h8ihwHoY*a*Le d)w,d:| $о5J92Eȴ BHx{Fl{CJ{nO̽fk< gnCzcf;!}1I# GָϪe sY:۷%Dab׋x&.;}j֍?|a{z˼?Ĝ<~z"r^tW:Ԛ,i.WԽ!b;jI `*?͕"bڐ}#lNU.KOuqҾ1{Ҟ"ףꨟʕtWߖ/ή9 KBO;C'AjpR n|6fHx(`c!3mިȫ2qcg8ke!EM4RD}GrDB|7ߌHڏb;zfIS.8g!lٶ͍k$Vu`g0zPSjn'ctխ"3mߠ#$>W-mׂK )9ã\4ɲZnkX;8|LP@wkx:ܐwbܗdԾm7p6["x)CmGd5k)KB r^]o s(E$~{UZ{.ᑞU;JPP2¡Ѝ}wsSƒr>nڗXPQez]җA]ZvW 8dzD.wpP/Y}3ҏ'oi?zb^ ޿[x{(Х?i /XgA]$7Jqԭ麢Cr;\>pF)1 b/G @hP 4FWlc2^ MSB!9tNe*Ƨˎ ]hpz59F. ʹr~e4അ2BC>z?}W5#Dn(afs1mg<$3[BED:%לKzK#GkvruHR)itu1)cȐ8mͷnG9ƺɐu>PCnj* ^⾳kB9y ApU$ffg\IιFwCʅ=Q_ˏz^"Ua_ \5$J!_9D/u@&)ö`gRT7|"rӽ)VEHU r* .?=j:]>JZl# ,RpU-1hfE*~42{i@Տ>T݃IhDZx~n!b$hS0ߓŐqz؄R,rCUIFdAA:U׌:4;ɧؼ~<'Ȑ$1*9N\ )0cXjE9־ `ৱ10VwKdMq#ieӈ?kdjE7Mmy̸I5w>Tp_r'!:HE?C(nϼiBDp%,<@*3y_f@Gh͸1k.2+j׈Re|D /IҍD1| G.^&s7PrqTZF|п-} Ζ #A'ٌ7ӯ'XtL\5n] FS<ԙD PV,ep7}&MAq#ӵki.͇;Baq`}@ŖW%R8&ۿW'zlSv5ݻGAw~zܪAVL2ʰ ߬:Neo'wa#ʾj{)yyA 53H#ׂ,mUB'F5P_p(,0N.tdjWۊ(xfU+w]tHRZ-¦zVIu(Ǟbo .ZBPx߈;Q+Lۇ^v}4,-h'J2F}a=IWdrREVL r91Kcra~sH/wQ~|lŇKs endstream endobj 43 0 obj << /Length1 1559 /Length2 8173 /Length3 0 /Length 9204 /Filter /FlateDecode >> stream xڍP-Cp,8 ݂{pd\;!x.!X @p .!呜s=_^M3{uޫwH!e C!0nN0@FM[r<:`#o3  =d-`O<5(p<@пPWa PB@n2PgoW0[@`+ @frz: `Ysprㄺڊ<0; n Wg;_vm x28@w5t8@[I EV{6nN;w"0O l *' X&Z8A-<,O?[4O ݞ+v"4OSX@@d {su'o`XnݙKvq)My2af @?yYqN m~ yj=}aYx0Ww?0`+d `'d~|W=n߿Le 8z~>iiEw*Al}ҿ z }-p?+Ogi wwtf-4{ҿi Kj kz`O{ un`/feX^2G0u~U@6p{RiqH9XZxc~ZEk 8!PS= p6AB. A@.?) 7|Jp9xBOʀZt?T_rwu}zip" d1? md;~Rz!oqC\rwS=jDKfߝYV+7]>*tJ~.~zA;߹ h^y*x}> ]Gn쫠)|˜iR:+$A#r"^{_U7>K:#˿6AKNֺR'vÞlhuci(Һ;ݏ\DmW?l5CbN|JMh*O_c޿ONV-DD0pG ٌca2bLB:^ 'hZJzM!TISJ ԴW0݂qLlW PV$d47DܡnYQ>,~`u g=W8u{׽sJ*|"wMYǒ~00d o0"n]\^Wjh8cr4Əe5FN2ܒ☘:L&5Mᅅ!Bui_ZSK< uzC6`'~SvlsBv寭xeS, س{MF4/ql^Ptj.9;0i&z8Fr )[ӏns!G昊X YuȪx=<N[TMuP# uE?X_>r@kA~6PeX6\'n!Tta)] 6Y,526ruJ@a)?k.G¤ ȜZPqv:UV";.te3ʧcXGY揺'4:r]wq =h r'2 ҋ^ɂwN;A4:"%? ;7:TjrW"-[#O n" =3Q*n*YtݩHT/FAHUPaz3?yPɑ(J6B%* UYlofJw=Sy(ƒP+L[%K|bV'K[ht=W3Z=}9S_1!&iu޾;7b߷BVma5[=9MNp5SRG,>"oe1b.r?iAŐQs>]O7g iϽgV"CaboAݎotp.L~)bԯ,dz[(2}c)ceH7.sg^;l6L"NrԟfxYǪʷڡ2*vK- N$Cg/櫥* q=Bқ&\`$:}#b hœ(ʹ^QõU;7UWLf^A]xۥ|D.yFT5O~3`vk+(rgexrQh.myC1-X=rf~1r%ծ(m;̕%|̪T);1yt$ Lz|׍!_$I~F!+&Gi^.@ .g\Ot$:cXO3HfҽfSR-$7tѤpX- 7C tl0Y-P+#"X0R@E jJÊs,W0az_RCcnМxO4S~e3v|iU6BHImҘK&Ҟ@]6 JPՅX]C,#Eg"fق-[i@W9/2bzc'U}|߯udi)z]֋d/S=z3U1Qtou &plAtT1K_J |a2Cl41l۲*tϒx Ӡ[>~S Em ȬLsG3k&74w;B6~}ad۴\hMJEGNaOC5? zk w28o"cڵ&/t2B զ#L>9Vo`ʠ^)%irV)"I mjV#ȗ~UG?f,pcg V7Ȥ5em\hQFUs4tb ۊ)X6˘%H.InQ[Ѕ)Em$\QTRxVIc=@G"ᆃC[{Yx:cz$r.\Tˤ؆VQrMysDdk)sq깙g4*Iá=E`~3կ\ 3x-\[JTMl[d!-ozB\4jyKu8GF⩦*gڹ* Ԋː/gzzc4<ڊ'oC  #YZNSvϿP5UsO7Qk 1Y2i5ԅxul?ҵ⽃q+J|H!NdaYgjPQL\ɷ*rIP:GL>'+1RS ȝu:(J^nPe3u2r|AXƒs&[ď+oׇW'Tʦ\qbzh5.hTS /vkGc#ǵR?քb|7&Z*.0 ~d=03,ÀwD ):+A36h;mVʾS3cMBq/5dcP4;QeSKZ-%/J|@ |ٳyyM"4dy}feﬔ3zy*2>~Ff-̜{-*.Դ}2P?;_4;Xm4 g%Ll:VR^Kb?USbq-,*oH60vy@e(%*&5c@d,2mH/q#ڛТ ! 4e./С;bΛ<Hעdv7!rC%t/-ea邻@UR̤N47r mRD:mBPx#x[3wCqH ҧ_7dܮ #K,VZ gϻ5:-/ɦÊuѕ [^R F؟oS;!/d/G n#^26&& v9kV=5}82Uhlypæx0:_oE|Z~cOc7ŇߢxXU2_P%ˎpӵ`Kgs_ /l Pn#yzb)ƅϚӜ |BnŰd ;q %lG#Mn$Mc=8㠃6̸GV.YP!25fZ^ˆo¸S0vEgJ!_>QaŎԚ(n6-)ڍ24 +y\L~88@W{5' n]U|֪B200R3nyyK,[/ d=L ;Rhu@s,{v7A{*Ki1wD6s:ZOߑ 4p2@&@~y7smE#M|Y(`ƈO8u0R6i,E`UYK%`7e sdQM >V~mř0H|ԇm#%NyE(T.kJaӐ}QNiVU\}NVJM\?-gloR>>de5S~oMh-̉f܂*k#UY+UOÖfqV8%bEϔ`7/'l%OQ ;H3{I#y^&XyW$*nl/JR?h@e3$9|\o:XB4}}F K wA8Lgž f-&:RT U76wjvDe,T-J>u\N&Buotj1.y~OG?ì흂+,zjy,ua!l+u&v1uɏ$kݪ.y+9$1Ӿ(pGG|_cRXAN!կ>t {n{+R։l+l}DV?&|-?$ؒghgH%g#%'l#<%N 8\7KuyyIߞ_9>$-hԥm*2ю}0`oP_I1=MjbITz-%瓇(%E[äKRw?V<ڞ 5/ ۩GƘa`vJXjӭTVi#ݔ|.< U=#5˻d5ӇB=rp&Ԙ٬z5[A48_4ҫp>5gnyu"ҷ$_/4vwXUnIU:&KNKqQ{ ¨H5Sl~^f̔`8yZ ?˴L+ *fC|ģGjޞ*?XbS1Tluw˛F3ﻞ{XQMf7&xt ]'v-0.ln7r)wt4|XSMŖo_R1kA :5mdgGok춿 Y=0~HK~St$'E*X-T JH1*-Gtõ=c2}'!Q摛<΢mnrpAdZϲd{N[w9gnR*?L\Iɱ%238ZL17/B^=B e디8Uַ$ 4r"O3 @pRvJ®e. ]~PY'$Zn($khp웠e۲wfވ,.`rfyGet68_}R*!L5׳Z7w՗ g endstream endobj 45 0 obj << /Length1 2302 /Length2 14461 /Length3 0 /Length 15836 /Filter /FlateDecode >> stream xڍsxkۍ9mil4I&m6F1ڸac7m4:wuM^^CM,n2ʀ\Y545ll,llHԚ6v?$jm A6@SWLlPpsyyll19 Lm,Y  $?_tv~~^@gsS{SWk=8@dnttB֮,., g+z&5@tvZjljos,HMk4@@X`gctp;9X y%#_J2`; @6;Ml6v@+/CS; lwq5)wblbcW-`! : U3̼q 7GV-'7Կ"?2++|@'ܚ$^}8V~6@?$Sw O"$vv+ he':X O' <$\O|Y#yVBNpf ?"O`Y5 wrOp\lZڸ#_j?sMDziO'`6w ̟x}5O`j@ '7Ds=MП`g5;Q97v@?Lq[?|?ՂN Lha0Oq]p!]+W?,ws{#8ן@=7ws3 ~@sy`m}hC88g/ݛR6 eD\|R#"_ CC'Iz|`z%Ex ,r@7yKPk@NZDr K#@GDZYXr0OϏ;LE_MngmpD:BW#>r,> TpY$ 3"r^α.bL_h/*A'SR ;E~|*?~+b!21*0aht\l-w[~3gF3t .g!|y C0o-'wovI2 n! j*hWcaUzfLM O}'F7e4 ٿz~ڦ],0v7ҿ0~1\d1}(X്J8Chrr`=  iWF~[(W;Wd*$FѽieZlCB՗C ݐt> 6]%9̻EcJ\_ڤeb *T&|Xw^GUd! Mˑ=hh?U'<p#1WjWg7<(U2^e,tOߑy?ٗK`%%:C#c;?$"gj5۞]+w|k'm~F(upf͇4As6X>Q-.4HAQY +9fs<;zA>񢪸7#dLmNˎ޸uSy*Q-I/f+OhJ:7 J ) E1btk'WK*+m9T̅K\#Sz, sPPuU'XH5 +6U . TD^ʶVdNaPn1s%Z=yN>5zs(p%"ncl[2e莋;דπG]L 3_;Nd|/4,ow)s[2֑ǕLg`Zà͉tXf%/cRiuGbjXY^C%w+l =K&xuL5/*]u V MCsv $MX,yb0;\d;8\ڟB^%ѫSXNK̋{>'G'JwX b~.liG"7bs5#hy|u爦&4tT JnS5L0G)jleGzQ*w(r7xc-:ȹg7iz) yn 3%C"GE%L*fL"BVX\M%i3QMd[Gd}eN>s'2~ 3"xwI-im_& ׂI|z ְͣryb*JU G$c3&/ccDOu4R7NBi-PU[RSўnwN>$~Y?CXgNnŧu9)]fZL A*pWߵ\|k̘"\x$ٌY8BZb}H'Ó9,.})a<,_  nBh n\9` aLĹfD ߋaK'F34[NzKF(hCfՖ 򎑆+EBdb6Őͺ_ζB!Ico!|KErLNE¾U/4Iw\%}-n.&_}n*2Q;uiwrs]h#q'̹H!w匹*;뙬Fk { TD7;R؅0feCҙN@_ׇ8qѩO]pԳ?!կ9Ӫ⪑u*O<lt}&ʀ'*T3fGa uaլ0gϪWg!TϗSs_^Q3r'=yTcee(}nDFxuMZv}6Eė2Xw Sw$:F~{eG~ a.4_򫌌+w\TOhdPN>XpY7{\J[hI&֡`Xȃ!hCUn l(p鸰Z&{t|4VR{ !@;-PqN܉1e?A qd߃5p%+{+m^k9!>%#<0SGBX_}A?fR)T/?Ue_A,yڡYt~)H,;SZp5/({Ǝ`~7 C%`ngt[X0!$`955 b,`n*S2s@?gޏL{Yn6yuyLg|5zR|Mf4qPӂ˙Q9w $'L&ް6(AYm]44 grSlay9UꑱAυ疴L`n̋9w]o=)o >7_>Sp9y]9E8 kd9*9Fqɰn6N{)A[Xx.sjA]Ag`]2xliInB׺`z8Ʈz|Z7S/ey]zt w/"=/> N8GNH spk){Y%`EMDx! -Tp axT]:O6} .fǓ%.SA+=؋^۹eV'W59;ѽW: lNB``W+CJShKj|5xWHp%8L)kCPfjtK^!A+ocPv gi+DtLN``d w$9I9uphzi]Xt!oaZ|Mzx͈ucJ .rXCIE,زC1 Aa5|:#5@Xb!ޕ';;LM Q& {5Ŭsxri` 㯥F8ӊ9[^6Be (8vSIiE,٬N>}g^;߱`GL IP̵fr %<-91|+,e[\/|s3$=}?Z@+aoF-q?3wX ׌6gT qk\[,*J:3gg\M}R̟│f,Þfh$d~-&K͛oͧ`[+S֏j/w q;dhR i)k+.+5rWz3P{FgLX3R[ۄ`b:%}UVՏåHI@G' \хEH$y1 g$ fF[ r;BQn"Q#Ѧ=i]u;YƤ:`a\'Ooef,H>HnD2 2"^f$l_~{/=-* *4BƐ<ʹD5~ʅ$w46v8~畬T8 Q 2c%^m^׸бV[w} 7 WF"og~`qE [mP:!CYYxq(Z51V$@rؑ7.tzYӅI(B.(ajL&Ak{ Ws&uD-UG|ݿKg@Жh2DmoL8B 2p+~;(NW&O>Jn< \Roƕ$8L&5u7K;lIedK :_,wEiKRedU~_͏S_}Dl$.2Y*c`t}Ncu46@A6ɝƹ2qUk(zҊrvc$dXGݜz3ɛ9i>5]5-Z=G[p"& `'O-7(ƩH8d5:ovTvz#Z;S xu5\ }1dž.˪GSnvG)1 ]]#\tLo甭̸.6"WF,'=Y2 »3t'kJr19>NF(W,c/HWE܈H?EVQ5v9Ԓ|*5/đ\&k#%bϑ+ZCx9K^LM÷G[Kf==ԃ#;BHk0f}x|WMF$Q ->/%&K5*je1 וojلI#k@n.!|DpL~*SxKTGWr^? h! {H,k&PaQNLpc4E9YΥʊ!sS =E@;SٮS&QxH3_yتG'2c3+dV ]?1g0꜇~I@7ՅmBz^ؔ)6PZAs(G TVskCFymol;zHY8r_IQՁ*63vTagJ s׵*r[LQ~#zS(&nDǛ9:c96]D3%e~m ;!bm yQӇlUfԣlʑRs 7;>]SEl1>yV u->kEAaP<;X$d!-7|~Za]Zo^R؄CEx / ,ͅ,eL!Kт9"*]Wjn.@ ܾs(ýLAçpoEMebۣ&bu> uS(z:.:8v8eIӍӊ<|̀{iOa_ { _'me&%^^9c381tZmaEfx=u㬽rŒAhCk7=-2]8{mard1Z-4¹ʻ9ĭ-6U1s-U[@՘zc~2r]Ҝ9 [%ݗBYXIuYG[m`(AA<:_^Lj5Mi=w5[?Тb|`5L(<{ie|a3+  aڋ/R=Fτ @6Rc%T4-g-Tֻޥjӓ빳b6 p WAih"hEq _ hryfXaf\ߚs,إ*$fO[d w;[{r3ZtuƅPshŘkq5?7abEd|ȗAg/Vߝ= ?CAMŰ S ]]s̥DܺbU9GN6`+܋7tNjbŽ0VTAאpǭE o5p=*򳟝1ZC^!/VGD"e$xC#L>+.(؏zi4Qg-";KEc,>BoիQsܸ]E#ɝYqgIuS(ZX8X"8}Ck$(_QOG4IĞ!J" j';\1U(mlY󓊮 #8FBMlE;;BFAZIu_^fc,Ba'1+XHP?2N"Ië ;g)bYs Tyak][j;jN-,[E<`??ctZPpM${Q23͖RsD-G,(. o*k ~*̢}9[3{3vO8y7&Zo /uKɝC/GS"|V`gD q$qhvog?!/ѾOۗ&& i8n@%C/Wנ>oF\Lw` cUό=_J{> Tۨ\7ؖ-JK`(nSZ:lcٝ)V~/iln> +9@#ոAp[Q">[A5Rwwg)ia.Qޢ#3VނAjjmr>&ps$a匣#ا$vUdd~7^FY(0ڊ-Bmw<P.{"#ekD%3xeݣй|ieQt$wةLƅڮ 1J,CkGsl<!CmpϞPT7yiӵ GXoGoŭ-t#9KMM}$9|I}^ EC}Y{ RBQDJ3 k/FQ&"sg˗1qsnŚ*4󸎁1rco&2L,(ȻO~ o)u^C"6:knq>GF <%2?ݽTpEɦK\&4&n]P_R4@"dծa sDp(i=XLj~ll`&1_oAQ>@tnq(^xE&wN;fvf1pCAD !IQW+%Z3 Qc~12ZDF}Z7b)e/g##JzDzHɖ|K7BCqј :0ۂ=KFE왡4-/if\A9u~44J$ 7Ϲ_39uUMnѥ#BuѸDېK%ٽ} ^:E%4YLM?PBY~*wkG.NN940>Cdu1UV|yd|rBpJ"‡7(,md7Jr7_*靅6.BSs-|m7kM~=ŴYhFݫH5ǰ+zaO֖U!&7ZT}"-shR i]w\:n䍖7??gݷq:x|^$vʯ@qR(:#+%Oݟ];$xf.C` <}~)8¤? }MheoM#7Uϧ4t/RƺmIbF]r.`EWzjcwT{R_\PTM_ ֭GkB;nZo<kPBDG ΛA-Zyٞ%IezݾoJ4f(zg?|7[b7iuJNo)24IT0"'=טl:Hτ} ayE}FNQv$rD旖:abd"]B#-Ϭ;qr~/XV޹_,LP1<xYhzF _YȉÛ3#[f4e qK^(*m%PmӼ693~_kFIM咧I/V csX v!G,ʇj&>f2oN=m͉k3c 0eٯ7R> ~͝"a"h/׸*?*`x,-T`)Cߚ P]πPk?~ũfOӋi)fh ȋw:2Vb ~>~Qe+}B0U{3!×mUzHB1 +9|G稣MGY.;t5F_!#0SNR&A[?F~K-M|g!RlΛK>` i3JA;y( 3ڽcr#? .2ĉt#peGu@f+>‡-Y[J3eD)zwdWWt#< }6Ǎ֦;`;.ƴ/? YɎqbUTI>$.PHՑh; /Du(RVj{ޔё[]j>UaQbҶߏ MX2M\x %YҸZN9:Nq/eW z}d‰٧lGJhVsQ{>*NEP+Ĉ4٠pb5#*b5x)38"% ہyn|~,R_S},Oo6RH] MOL{?'~}1n [A(ʑ"k0>_kkYx]ݕ(ZF\ORʹu[|jrwϷ4a™DTav^5uI| )!:_<(ԃR!{(~}h6Qq\wԵJ3ndb%Kբ&>i9j EXqFc70T= hċAϻt)^iׅ#kx3@69~{۾J.xv{W{!Q-z)i-NFO5n{&Ai4H7&z]03ˆV{G1 oBmQs ӹmkH9߻0$E8/VJAvuZt\!PA6 &^ AU0@'s4#,v*)hj名PJky7Rk.Zs&D}!~a#UN vVs\\=rܚ7KTnF'MVoP`rJΑi\{8 O{0n%V_ҥ]Ν{OCc\0qHcQ}뚧VoͭL{\Qv^Tw!&xw xn)*mvAZ;j ! $j)01!7*ҌMS҂;u=c'3*'ꪑ# ˰r)o~` t8FB>s&J6pmW*o3sڏe Lz>Q{Y(Cث]D[mb%ƳJ Уؗ"~+[+cuacj%rخp7ЬlQqvyIS U1qqN9J,|މ0-o#rd_IŅC(߻}2KK1Edsw2#kז Y!TIG6.YZIď[V"&D>=4B8 #/[hèy8KvNa TScnm<{oadpy9v0Y[lv5 EX^Ac -ERgK_(ݨ袏9V~4pt]Kpp"*sChdUw*nۚM Yi>qSHR`a@w,g@l 4F&dz"YOHze^σhG}j5<v :Mh)^bO7QY<'a]A veT. ~w _O~M gkтNGnS14^4"-b`m zR85b e)WBD8 MT==9Uo[z/܈;$~r*1LC]ڕ7Brr%ɨXfeڻ]P&.ܾl nWFDg_q/za\pýzdFP&T,4C?DG!b\7qZ{@zex2ofB3I ZcRQ0@%\Xg֨h',w+<%rL>c. TKR͏ al#y/Y3k7Gb.?yHĂ-u8Ʊ34Vypx A)Űc8b6~;rUXP7"H L+ DUnkکk4Kc)#7?0rMC, T)d\rzⓔ!Ig,Ca֔5cxqb`~,/26wZ$A J&n$&Mǟg-di!K`ŶpUCuU~M)4}-Y D% O9 %#4G̝ƈT3mr6s;N?SYSQBYoI[zwKVqyB+<{?]Ԩ/<98EDz 2c+,1'i1sŊ(yȚt ctU; CӈH7T#FPWV*Od=#!qĿJ]`Gv# ň1ELB=Z< c+%! x5/V#lq`Cd:f  *Վ0njOFS9z!℆ݰrNT:bd+ `)[^8UEAѨmhG*Z.w|oC50ºvttv0} Jtyt>׸s endstream endobj 47 0 obj << /Length1 2399 /Length2 16503 /Length3 0 /Length 17926 /Filter /FlateDecode >> stream xڌPkw]Aww !@̞ɞުsY,}߯TYQ(igSPWge3SRSj@v|s;č l.Vv++7 ?v|qcW@ kg tpYX:W)-_#`l yhjl P3=F͍ٞƉBr@3_%mO P9[fgf A@[w[3#=:@MFd 7_"dk0YJL c[ ]A&J )0~LANLN jdfbv66@[g'9MpllAfabϬa rpʈm.#:8YXXx@Ԓ)Yeog0/2{9Ύ.@*@ho>G;@}X,}l=k:bں _;dpr|Ew5;.'a׿7A _.Eh> 'euoF.Gol}o]πIZ\jeς r͔AΦڍ5:g [诛tpz_g#Jؚڙu8Ǝ, b}?f@-1^rqEq  `/f0KAf?}w"w?? Af?=O?="X;޻jm/`ANV\ߓ3{Lc?8EƦv/'_D!? +O#b\{\ޛbr_j;8Xa|[=Q?i7hwVIF뿶Q6}O:v~/1ek 48ֿOۿ 8co'[f89L~%[?QyoVwy9B@t>oJq6v{?oJfgKG?g78sO=q,?;ǟl]=z_=z@S;SuՈ1O~JeZvpyBM tIE]ە^!y:mm kKTi~1Wo_*8 #dT>~u lqpAV/^?P:rP%R1F#Z?x2<.3#:+wY$>g1^[llNxxDw3T^G_eqJ7?.f2mxuˠX;.JS3h!eٟ"/қIJ):{w7Spu usz'wz^79g,.CۻsF)EW3Ywr dx؂4T&nʑZ }jv08ZIU&7qTgO77F뤩"NfϦXi  #er|ȅeWͪg%'z r-N?6 FB~ 3kiN"TÌa^Э,8* H&(ʉA8GރkioeWI-22zS-+d&WZo1'6KEǻq¾erq%Q躰ڡ-*qc *y~2^eGͮ㻅L19+c$1N~ }Uhsi>ЩJ<[CbrǨ7b.?>op\i=5XUjcFn&֚?Nqsիd?e9ѷ.8I9_Bnalun5g%eH&hQzPvmO]¯,̃:w.$9WDemF_JsU:b8XL9\ΐt:gcsP`` τ3M;kMK>ĵ&9KLh^Fa˯*["`OtnlݹE9-];5ܞƞ'3ǴL[iWQ:me'ᒦ~m?wt,bŹ"Ƽ?b7ɖ1ˌhC2_-];J?.z.18}](P{~Cv+S;PfP!ةg>!~/i?ԓr[ p:92\kF25x;Ck8?zf0}h~B)6I'udleWx*ݞxUՌ2B1O՜?Eη酆DO)׆hOi DsCu@P( V KP&%2\ۗuJ.f>5$WRؤ=!Q"Q feJl)+2)yEK" sgo 1^֎_=frL~!Ⱦy4.+q_VҰ(6[ g)kčt'qS$JnH>-R?`[{R(h^-O0_dm#{Myh 7}9F bMdP:9]3%gJOFTg^4r|Lbg 9޼.wF 9wCN/9m/ ?v9MLJ3kxmtna\&j :X<ϙ1CB0ڝw|EnDbkgC;z%?Kd$@CjCFDC/cy5[\eIs&mǓA 3m7N PW(e$TF̱dЎ,iw`P_-OH}ʤI҇J$ OLR7Jc C 8(XZ&gBKŷpb: Zj`E! A/[(JMz1W,KoK^Of颓 4\zt13:`F 4G0ʕE ɠ)oT C%l'`\PBD c%4jc,L]ձfQA䷣208#׭ت]o/Gm2 IdBwMD&_yV6/ۤmaL7I'a0sXIZb;ma Q<$[Gu<ӳ`!>MKڔ'3DόO!ϔ\<] M@ FT݇H2g'0_𾬴 }@bU;Q3 CqbD[[y7ӏ}ѕfK`ZRJ*㳅It&>LBi{~=V>%L8fpU56oT8K'N-v x)0=ZE>w7UPP$ Q>E!?=99ag+z6?rJN-d'lQDsf&N]|SZ" eiE.eo*ñyJtm[0^jPzYs?V^{}2*6רo=p⟔ǭ=_^B{mCeIOޢn^s$+*o:>wtWm7j秝J5Sh~~ق-Ѽi8fy1#gPh 0)WA&l57mvlFLԩmpj/^o9/|5x|5nIr`pCa>6S? vЊ 5^s¡u%#S!N8^̫(:c9¨'Ol2PmdK̓52\VYE/1JOŠ  ƻ5XVs?NJBf?9+qRdSST7B00x!Y u:1QSi;/x92ˠM 4řY 6 LrLr{xX9ǁpKUqXe+:~bA֩QRx`{u/:}u baѕ:!h{oW I H+IƊ09:Rz]91!N29XͦAWymlW%*O 2+{kjÚw]]WƈkQʬv%7j\؏W.Rvp:P0+0>ƩSXsEsoWEIl" ^%.wMkrKn:[GJYǷ& r O 0v6pzttB~$Q` 7so&hdRЫ|Jv&,&1]/S@,yBx]@N{nM=bz3ĠEU纭A~|voxOm{-%5BTcZߘ&z]hJB}X٪naCBdYZU2\1IfGr?|آTDheOab@.Ѫ&ľO lx&">!isJ\̨F|$Ss ] %mX<2wR ɿ<|N2qFhM֠7nޖC 툵aZC#nw wkV`(#~)Nb{2 I@;(whٟsKF5ÂW\8Y!ӄ6"*=?z hQ`ȖٲRD"wl)XzćA`e)A_v$78=NSXk1d\LwvZtu65,2@s6xńF>v18~%QW2?z!ޏ]sa ^OO cMT>.ߊp 9V5Ʒ CLNJ(XO|Ff{Lg^2\Z6=~ %i{(Lf<R1̇JV4} 49ǢJ,UvoiAMO}Ze,%ȓ/PNq$5cА{(cZs,zV2sm̴k6׷xo:VXNWaܴ6TQZ*sH܉MdLQ%2^vQjpF >dB"6RAuac9.ʡ."rNm?9eJQHhƜ!YuX"?rZcOE 85Ryq'-B<7O|?ƭw,oaKea7A" |aGaD:͈ ͊`b8tX5E\@3_;patWI ^H7Ytv=/懨NTG,HjzD|Yu\,!]iy]1u@!{WT8h}6RAK5Æ_2RD1zC{NL.Z,܀ SOxc6PbM!6&UTO(7?Kܟ?)c5 I$6jcBf}񦛻lr5iE>_5enqR{;ù/49V"_Y|[jlX_/ך9@ʎ|T= ۝s+)Ձl~u|TA8@#B2bdLUNaX.s3Q6H5L 4;y9<p^H> =f*8>`D;cȶh07amqM>5:wo^nr>vPh;uo~o׌C)+*wI(GlMVK.V\:>WB-r9 Jx+k8nILwH>q[>7SVD,:l2lnb=' tSq:4 ! +ۻ@oK<.dy1h\b7za;OB-:5Z7^Ǝ"&w@vW=gzár;fh A{Hk8oP ԑVGp̾4uWF 7b{)'5TFgoP%_eIF W݄,aN)gWoU-t`}zDoV,:Kq4n,ybV̓p.E;'ָx kgv,UV|1S^ׄJ2:rA/+@+m"4T[K 䝜;d;A>~>/puC?wS\ (b`ڛQް*MoCK$ܗ˒X2X+ M_nfK RIT+#-j 0P-(:*:R6b 3VQXScpG"|-om9A!#q4 '+;F8SI09ޔWYrE$3:VK f%┯1bVH ^2t?)BC'黫t !R5W%K+ zTE:).[`jj7y?taWJ#88CR"bkw!ǒZ&u q-86P|9h%YϺ]!vUk#t7dʽ(˞ 93.& ؉ߓT茼ݭd:J<(M7x;+d]nrҽv ڒoM#bSĖku}N IJVt-R[>51+u*dyEj/ )-dٲz`du; kWok22<`iFڥ`97└*ňmLCDo\+I@/Q3I/Qf e9Vْ #n&c;\"V:-DMFE0$ ڦ/T[`!I ݄&K& ]ɨT>3;![mIBƴ `.$+b,ph#UMħ (öu$浪0%*ZSq^s'fKƃ˳COgx:0Fz{v.TϯZwa3Mz 'N~ SoVrV56:d0 C7ZRL$UO~'G`e+q}38'v^ݻJ9[͋Zj&Q>i}-"BhމepA(wqlH lyb~qZ= uW觧Qo4G,I qT@0/K]Ȏ/i& \TwI(s]lGV P^=|/~A޲e/enKU9[Æ/hZ˯_S|kљ4sy? c ,> ԫk/W`;J|ȝDϱK-5%+Ԏ!wX[Tl=%Gy %|3؀Dr:w_4te3c`:+au+ ؇ l_Ӡ&$q<%Jؕ݋c]S<;桫7 šp\oCq9{ҧ>x]xO hu1te:#fCaGѨG K}pSmc+K΃8 P,@ʈӞP~X('5m|q]-L*6{3,jV[N4e&C/ s~78Eqc0f3`qpd"3._m=09{ Ȏ SnKu piBD()4ܐJ5Rd'FFpQ s$us)*MEWJmQUsD,@Y>Xvn\abUϨTU?Z;ɣ@!lWʜ6Ue< GG _&zOxKQ-HKp'g1[Ⴇ:O,XO.Nbno{pc,/{F0"M._2PIA21 O,btf%ۺmq+Lm{@XJ7C|n)@.UDcQ~R`aVɃIgݭ3%@"_K,F%n'ͥQdCKy(V;#Caa ;' G =}p"S0\ZV 7pR$ .Jf.`pCDV jҍ V<LTTX󱿚5 .jwf+1n<$Cхɴ̸Q簻FdU܋툆Bڴ^Z*y/7jp#JB"yfKvXl⛱>gG:)/(wI20 ݒ 7R?ҞXK |Nsl]Mm.ELynE5TS)sp"ݮ.2Mժ0w36D0.>@kVzŪ Hz)U~em"ݪ;jV4mw(㇚ZZgPo:r6$P1KQQo<>Oöf#wk%qF"3kVR&_c%^[9R'cۈn!l(%kCK,\["mQUKZ`~mO, z̬4WgS\ BKe2E|w.0RQƠj559y 6y;=uoc ?e!zTBϬaG xõcYU +ι_meUP#Ecj.(30N*9ҧ2=Ra*v"=I<=9"mpVyyGaP\,fq5?-Ť gIPm*sݰK _Dv [MRtzdHnQ^n@ow)rLFrM:gA\E7b[H* ɏˑ_BBS7…>;8oݓԥq}jRfA+&5.KOvճ%H;٧>9P&ʗes)y^ZL7~97WI ňw1ϣV~K/e 0nb"T\̼%:0jAe`i/ s'&\6?zxIxNIZ6Οuj Cpj1@igX.K3gzwU L{Sr8ՍG'[ dE؄mb=iI;{ B.&E?jÈKL0Z$.cn_Sc2:,Xq["pNi}9aƬSQN~]x^t}YF,.z~̱MSYV*X;iەDK6M;d7^,WE>߁|t`{쑉yE̖m'p]9~eEq A6FRnJ6b\6skzwd=q%uR;{u:X+\NOj[Ηkܠۑ.{tÕhߜ# 5>N}BP nC}Z!Y #.[f: A@o$&;hߨd]2zނ|*VG./T7kײ29Fu>7/.dn1*{hYrԔXLK)]C=&3S/QÔ Ԩ@C\B[mӕ.;v@0'mHV sSe,!aFjnGG䌺F}4$v0We) G.="d?i &[t1*~`G\s8ce8/+tb< 8ESBN8:y>~c{CyA׸g(E"Lt>㞮_V.gh88__I LT,o"=v gv (9.)Xtⶼ9ogsr<>j|sbO޼rpG/|"~+7TK{%,]ӯEd_f.q7(j zE^نұ EMu@0AŦXQykP- ێC 4tl˸Ը4w@˼]['8FJ]09 f*:UQPՕw!V1IQßX"չL-?%sǛ cY?O~G<ҺD,}k_u6b6&>M" fUB,zȗiۏ8e'NfGB%MD6 Eycud&J@R"'n(8v ɾ, ]l:6iM_r[mҤB~=`kS52i ,uݏHDy 7c)x soe\#oyQ6a|I8on&$epΉcǪ~{Q-+55$Jzm 9(ð4[ {ib=4ZH[*1.#8ρŽ K0igub((VK[}M\~35 b%x^_K܊}6œ"@#M?}xWp,H}r("aHPu0tnk_}ŎqMXݛ{:={mkn@BOaURE.yCwVl70 Жg*f55A(ָ<樺/ؖEShCRh`qQ۫8rY9u5mqASS/.JKIF`v?F{\k6L4m @$; h@[ф2MP<U".鉜}(9oyu9ؿM"#DYa5Rjr#8#sBi͝uyx>1I֨~^HJOs]M Ahk*q"7D)/*̔a_B5ekPSW"?A;o̤>Y~jd+omP:t|Sr10]ٲ"@M/cF’'Yn~+ !Ij զV,56(99ℬ}?-q(I&D+H}ٺR\N:A51Lյe!PUL8 i|V]IZC? N52ibϛwO=;N&3ǰB$OZZ-P_쉶c;ܗڅċϛ!* eZz 7l"(HB7o)XPr. T1b~#&Ʀ94ۡp65Ӂ5F,&Xr= ] ]gOiّθ4_*2"J:0 :~KGB\nn-DVФ\22- #'&b>5(FJn),Yyp'ȡ cPQf{g-AMr%4uJTҸWZber*{*el \6Y ߔ߷9@(6Gp@b.Mp攜Jz}-a m.Z?0J1)\Il;c^ct]k,b p=JTyKY:4.9$9ETDZ塗i]CC|ݑUqVHoC@ipo2OJ;dZo*\X[ɓ =EF>d>Е_ûM\V& .ŷ9~54,Pt.}{_xD[ MҀj 'ەfr HZsI=$Akt5f*wNRMPsUt)^jM X2\?B"Z/gg\ VQ'34DŘ1go}^憰 afMgRT+-Sզnwm?Ηrq6=H%.ꩢ\$rCC&]#{z)S7GNx߿* |*$XU=Aw9_7dgF$>4Ҫ?:gt陶8%Mɝ`釻(uTdʔS-00dܧ(RWt잭L \ph鸎$ugM4c!5Lޑ5Qt`,߯&\:oiuq1nZ)A)ĸze6֑xz f,; endstream endobj 49 0 obj << /Length1 737 /Length2 967 /Length3 0 /Length 1537 /Filter /FlateDecode >> stream xmR{4ie*R^IHLj6C`2C32fO|3HlQ]dtqt[eۍ".#2ij=t=9y<{~ck)qJ"8qXlX!lf H(0Q$0pEl6WPqARb*bkZ/Z"5XtQR@)!V{␔)H#Wb#HwB(6I#k!IHBb18@ ؟.)5Άn!&,l’OXQ2ybs8 a<;;!i  lR"SA`/ T @HI$6D(e8 SoѧJFi\Y0^%CTQIQLF \W?}$A 1xAHt d6|_(H,DY=-,oo"9Չe',傥.KCѐ$ĩн| d?j!M {gj.g867Y{p. U/-^-Lno{txrl4ih̵"mxwĦ<>ɇg F2UHnUQhAzqrxaھaAjgo?&ibs]#:LtXEi%g^&V?($k~m/]:'mKtG)v39smkZM9pcq9;X\^v$I"[A5I5zMN]+|t ^zӵC2yWl̹ǷU3H~P3=OmNZѐnn؊mğ z{L\>L\SÞPxqWrvT/ί^y{M*'nW8@C3e?nM+;1{ZLa?zvxΫs]?_#;Ş~iy^iiCײlB{ ]gIĈ.)TxD[/Gݝ-v\R5CaVwa|K=N ѓoܟI}{{gBaFuuOis6FR+uƅGܬ8ѷ/2_Qb*c[Kȼܾ[tuo / jl|nfNm"剁cJWuv9՟YP'_{!~r~]J?-/I}|li "Z٠·t0X%cSJw=R}dBל`3ѡ endstream endobj 52 0 obj << /Producer (pdfTeX-1.40.21) /Creator (TeX) /CreationDate (D:20210717115024+12'00') /ModDate (D:20210717115024+12'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2) >> endobj 10 0 obj << /Type /ObjStm /N 37 /First 273 /Length 1889 /Filter /FlateDecode >> stream xY[SK~ϯs"sUYV x&k=$f$ QbUdw"#x$.ppK3#mmPJF$Nyt X`+ך:p<)xEViI#R;RHQ(n,Q@*b& Dk0K-`'3A 1L&"FXE1;b`1FX/3iޏrB^ޢ[AHqfKp[ϻE9# & 8zqтc؇ٳ yO Q i&ƚ`{$A$ȣGa$9غCi~WApB#-xcj0+ :ƻZ'N`x̍Xłbg Vf/Z8ٖeվmuܫ6t#q 3Ȉ7q4S8h ŠYv(T6I4qO=+fR\yfܑCQg30ohHt'\chmsn?2k*suC]xjʆ=x8 K]S*8ZbC-+Te8ƙC",(LlYU!4tӀk=7z=ut'gbpSM*qb/ sʱƀ 9WڣW~thAC Џ_V ta~_nU0GV9 _|YooלS{S ͅ_e }ѭJ󿧻yj(wM%}ۯqzWXS5>mb[u7 ݢϤn>-Wx6t&Ս[&o &硛zfn(wWWWn녔Lmn Z ߀r8.'Bj%~o<^B<c+N6쵢, endstream endobj 53 0 obj << /Type /XRef /Index [0 54] /Size 54 /W [1 3 1] /Root 51 0 R /Info 52 0 R /ID [<50A3F6EA68FEF12B2BC6736F7E65E744> <50A3F6EA68FEF12B2BC6736F7E65E744>] /Length 162 /Filter /FlateDecode >> stream x;Psx$$^[ڄt6`% Fgz%s7{THPH N"'<¿ؖaDDO$+{"Q5QN4DH#$OlUV]rU_i?݅ endstream endobj startxref 101174 %%EOF 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/CITATION0000644000176200001440000000171513640533174013733 0ustar liggesuserscitHeader("To cite the survey package in publications use one or more of:") citEntry(entry="misc", author="Thomas Lumley", year=2020, title="survey: analysis of complex survey samples", note="R package version 4.0", textVersion="T. Lumley (2020) \"survey: analysis of complex survey samples\". R package version 4.0." ) citEntry(entry="article", year=2004, author="Thomas Lumley", title = "Analysis of Complex Survey Samples", journal="Journal of Statistical Software", volume="9",number=1,pages="1-19", note="R package verson 2.2", textVersion="T. Lumley (2004) Analysis of complex survey samples. Journal of Statistical Software 9(1): 1-19" ) citEntry(entry="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/NEWS0000755000176200001440000015010214074415213013266 0ustar liggesusers4.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) 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