survey/0000755000176200001440000000000015147304542011614 5ustar liggesuserssurvey/tests/0000755000176200001440000000000015147131647012762 5ustar liggesuserssurvey/tests/logranktest.R0000644000176200001440000000734213733223237015444 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/README0000644000176200001440000000515515131331514013634 0ustar liggesusers3stage2phase.R: twophase designs with three-stage sample at phase 1 api.R: Run example(api) to check that results haven't changed bycovmat.R: Check that svyby(,covmat=TRUE) is getting the ordering of estimates correct. caleg.R: Calibration examples - calibration to information on PSUs rather than population - check that bounded weights really are bounded - check that linear calibration with error proportional to x agrees with ratio estimators check.R: Many combinations of options for svydesign deff.R: Regression test on design effects, especially for totals degf-svrepdesign: check specifying degf to svrepdesign rather than computing it DBIcheck.R: Check that we get the same results for SQLite-backed and in-memory versions of the API data. domain.R: Check that domain estimators of means and their standard errors agree with derivations as ratio and regression estimators. Repeat for calibrated and raked designs fpc.R: Many ways to specify fpc kalton.R: Calibration examples from Kalton & Flore-Cervantes, J Off Stat, 19(2) 81-97 lonely.psu.R: All the lonely PSU options multistage.R: Check that a two-stage cluster sample analysis agrees with the hand-calcuated result in Sarndal et al. nwts.R: Compare results from twophase() to published two-phase case-control example nwts-cch.R: Compare results from twophase() to case-cohort analyses in survival package. pps.R: Brewer's approximation for pps without replacement quantile.R: quantile estimation on a lognormal sample rakecheck.R: check that raking by iterative post-stratification agrees with raking using calibrate() regpredict.R: ratio and regression estimation of a total. rss_scores.R: Score test example from Rao, Scott, and Skinner (1998) scoping.R: check that svyglm and svycoxph work inside functions. survcurve.R: check that svykm and predict.coxph give the same result when a data set is doubled and the two replicates of each observation are treated as a cluster. twophase.R: separately verifiable examples of twophase studies quantile-chile.R: example of interpolating for quantiles, from Chilean stats agency na_action.R: check that svyglm works with na.action=na.exclude svyivreg-var.R: check that summary.svyivreg is finding the right variances svyolr-rake-subset.R: make sure subsets of calibrated designs get handled correctly anova-svycoxph.R: check that symbolically nested and linear-algebra versions of anova.svycoxph agree degf-subset.R: check that user-specified degf for replicate weights are preserved under subsetting survey/tests/mf_frames2.R0000644000176200001440000000200514640361577015127 0ustar liggesusers## ## test multiframe results against results from the Frames2 package ## library(survey) data(phoneframes) A_in_frames<-cbind(1, DatA$Domain=="ab") B_in_frames<-cbind(DatB$Domain=="ba",1) Bdes_pps<-svydesign(id=~1, fpc=~ProbB, data=DatB,pps=ppsmat(PiklB)) Ades_pps <-svydesign(id=~1, fpc=~ProbA,data=DatA,pps=ppsmat(PiklA)) ## optimal constant (Hartley) weighting mf_pps<-multiframe(list(Ades_pps,Bdes_pps),list(A_in_frames,B_in_frames),theta=0.7417399) t1<-svytotal(~Lei,mf_pps) stopifnot(all.equal(as.vector(coef(t1)), 53259.86947)) stopifnot(all.equal(as.vector(vcov(t1)), 1652534, tol=1e-4)) ## dividing by the expected number of selections (BKA or HH estimator) Awts<-cbind(1/DatA$ProbA, ifelse(DatA$ProbB==0,0,1/DatA$ProbB)) Bwts<-cbind(ifelse(DatB$ProbA==0,0,1/DatB$ProbA),1/DatB$ProbB ) mf_pps2<-multiframe(list(Ades_pps,Bdes_pps),list(Awts,Bwts),estimator="expected") t2<-svytotal(~Lei,mf_pps2) stopifnot(all.equal(as.vector(coef(t2)), 50953.07595)) stopifnot(all.equal(as.vector(vcov(t2)), 4116803, tol=1e-4)) survey/tests/svyby_bug.R0000644000176200001440000000334514360142135015111 0ustar liggesuserslibrary(survey) options(warn=2) ## Caused warnings and unhelpful results in 4.1_1 (Guilherme Jacob) data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svyby(~api99, ~stype, dclus1, svymean ) set.seed(123) apiclus1$api99[ sample.int( nrow(apiclus1) , 5 ) ] <- NA dclus1.na <-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) # subsetting w/ na.rm = FALSE... svymean( ~api99 , subset( dclus1.na , stype == "E" ) , na.rm = FALSE ) svymean( ~api99 , subset( dclus1.na , stype == "H" ) , na.rm = FALSE ) svymean( ~api99 , subset( dclus1.na , stype == "M" ) , na.rm = FALSE ) # ... looks like this: svyby(~api99, ~stype, dclus1.na , svymean ) # subsetting w/ na.rm = TRUE... svymean( ~api99 , subset( dclus1.na , stype == "E" ) , na.rm = TRUE ) svymean( ~api99 , subset( dclus1.na , stype == "H" ) , na.rm = TRUE ) svymean( ~api99 , subset( dclus1.na , stype == "M" ) , na.rm = TRUE ) # ... looks like this svyby(~api99, ~stype, dclus1.na , svymean , na.rm = TRUE ) # Without missing values, this works: svyby(~api99, ~stype, dclus1 , svymean , na.rm = TRUE , covmat = TRUE ) # ... but this breaks! svyby(~api99, ~stype, dclus1.na , svymean , na.rm = TRUE , covmat = TRUE ) # ... and i don't think this is the expected behavior svyby( ~api99, ~stype, dclus1.na , svymean , na.rm.all = TRUE , covmat = TRUE ) svyby( ~api99, ~stype, dclus1.na , svymean , na.rm.all = TRUE , na.rm = TRUE , covmat = TRUE ) ## Now some more as tests svyby(~api99, ~stype, dclus1.na , svytotal , na.rm = TRUE , covmat = TRUE ) svyby(~api99, ~stype, dclus1.na , svyratio , na.rm = TRUE , denominator=~api00, covmat = TRUE ) ff<-function(f,d,...,na.rm=TRUE) svyglm(f,d,...) svyby(api99~1, ~stype, dclus1.na , ff , na.rm = TRUE , covmat = TRUE ) survey/tests/multistage.R0000644000176200001440000000012311457435613015257 0ustar liggesusers## ## Check that multistage samples still work ## library(survey) example(mu284) survey/tests/svyivreg.R0000644000176200001440000000054613542525537014772 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/degf-svrepdesign.R0000644000176200001440000000114014553317546016341 0ustar liggesuserslibrary(survey) data(scd) repweights<-2*cbind(c(1,0,1,0,1,0), c(1,0,0,1,0,1), c(0,1,1,0,0,1), c(0,1,0,1,1,0)) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights) stopifnot(degf(scdrep)==3) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights, degf=4) stopifnot(degf(scdrep)==4) scdrep<-svrepdesign(data=scd, type="BRR", repweights=repweights, degf=2) stopifnot(degf(scdrep)==2) msg<-tryCatch(scdrep<-svrepdesign(data=scd, type="BRR",weights=~I(1000+0*ESA), repweights=repweights, combined.weights=FALSE,degf=10), warning=function(w) w) stopifnot(inherits(msg,"warning")) survey/tests/regTermTest-missing.R0000644000176200001440000000100314412404246017003 0ustar liggesuserslibrary(survey) data(nhanes) design <- svydesign(id=~SDMVPSU, strata=~SDMVSTRA, weights=~WTMEC2YR, nest=TRUE,data=nhanes) a<-svyglm(formula = I(race == 1) ~ HI_CHOL + agecat + RIAGENDR, design = subset(design,!is.na(HI_CHOL)), family=quasibinomial) b<-svyglm(formula = I(race == 1) ~ HI_CHOL + agecat + RIAGENDR, design =design , family=quasibinomial) ta<-regTermTest(a, ~HI_CHOL) tb<-regTermTest(b, ~HI_CHOL) stopifnot(isTRUE(all.equal(ta$chisq, tb$chisq))) stopifnot(isTRUE(all.equal(ta$lambda, tb$lambda))) survey/tests/rakecheck.Rout.save0000644000176200001440000000660215147131647016516 0ustar liggesusers R version 4.5.2 (2025-10-31) -- "[Not] Part in a Rumble" Copyright (C) 2025 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Loading required package: grid Loading required package: Matrix Loading required package: survival Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > > 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), + control=list(epsilon=1e-10,maxit=30)) > > svymean(~api00, rclus1r) mean SE api00 641.23 26.874 > svytotal(~enroll, rclus1r) total SE enroll 3647280 463582 > > ff<-~stype+sch.wide > poptotals<-colSums(model.matrix(ff,model.frame(ff,apipop))) > rclus1g<-calibrate(rclus1, ~stype+sch.wide, poptotals,calfun="raking",tol=1e-10) > > svymean(~api00,rclus1g) mean SE api00 641.23 26.874 > svytotal(~enroll,rclus1g) total SE enroll 3647280 463582 > > all.equal(as.vector(weights(rclus1g)/weights(rclus1r)),rep(1,183)) [1] "Numeric: lengths (2745, 183) differ" > > ## Do it for a design without replicate weights > dclus1r<-rake(dclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide), + control=list(epsilon=1e-10,maxit=30)) > > svymean(~api00, dclus1r) mean SE api00 641.23 23.704 > svytotal(~enroll, dclus1r) total SE enroll 3647280 400603 > > dclus1g<-calibrate(dclus1, ~stype+sch.wide, poptotals,calfun="raking",tol=1e-10) > > svymean(~api00,dclus1g) mean SE api00 641.23 23.704 > svytotal(~enroll,dclus1g) total SE enroll 3647280 400603 > > all.equal(as.vector(weights(dclus1g)/weights(dclus1r)),rep(1,183)) [1] TRUE > > > ## 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), + control=list(epsilon=1e-10,maxit=30)) Warning message: In rake(dclus1, list(~stype + sch.wide, ~comp.imp), list(pop.table, : Raking did not converge after 30 iterations. > svymean(~api00, dclus1r2) mean SE api00 642.61 22.731 > > 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",tol=1e-10) > > svymean(~api00, dclus1g2) mean SE api00 642.61 22.731 > > all.equal(as.vector(weights(dclus1g2)/weights(dclus1r2)),rep(1,183)) [1] TRUE > > proc.time() user system elapsed 0.608 0.050 0.655 survey/tests/3stage2phase.R0000644000176200001440000000251213423662360015372 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/db.rda0000644000176200001440000001145114771366210014037 0ustar liggesusers]{V+h{oA1JQTJU(R R]SP t?"Q4ƈH-SD-jLijD-hlkR_1vww8s?I633g9;s>c$45Ka7 IԷ''iJI2`J5iޒe1<3<3<3<3|@~ 3<3<3<3<3<3_(?ygygygyg3?3<'0<3Jhd~AlDZ75̇k>ӭGX8ɰ0NQ,/-_ @x(j/-!+E;IC|:,Pb_(B|*t{B3%>٧8懯sM ?KCBQN>}SV_$`y//:GM:RԍEbiw_+1mUWH(5:e?nY[D( ]OQŤuI_B1v&:=jcrv)jޔzMd:,g.WQn =}:Eh'{srra 8 a~<x*ifz=Ӊxhj7XXz(v`ʭ)¹yG# ԣ+O9OQ?A>&_d\:/#Egh94w'7y%?rj-=8/@}|. ۓ~rL ٟ i}3yX/HU`:+ .a+BN騟 +aC}#?e9^|G0Wn\u9/s?rW0=٫Ƌhl]o&O`r?/ɕ HjH~<pžaNkӳ&Ҥ.e>ԗ0#ڑUy}#^QY)։`K-?~{ ǕJ\{L~'@̷K=ϛ~ C}| A8Ǟ~]h0YTϾ餟~ԯ@y`O@Dc/A9{ =ŷO Us>"{헠X;`sT> S9BALTPY|JASt 7էL-F+;EKg8IJ E9}Y6GދOvy.Ed}D={{f)@(Ԇs ؼkw?1 %"jbo_W!>EK }Dy)z/]jr@4j|=<^oz`*{,)r F'QUE;BW6s̰$)D1fDzg9I'$jr0C챐753*=ml)6$Sg;dw.L :}\bN'}t;`pH{`BBTOF!Ctǻ]$,3MØ|ZPg/;~Pd՛_4ΧwI B>HPK`/SXKruԣ+]mJNy&4LǾӢ[Ժ I g*JqΡ?I-ꉍ.A]?l`"y'_дK: S#oXx?^4$Es-wBhlmma.@=ݴ#UGbP]o/S\VHDuRB\_o+(( 0yah4*QωAF N;u0g{Og;KWöU`^U v kKGU#W\9&n>LO3}GWT}>8iGt_aBwT+Uӯ:֟-F>B`W?nLZ^|vkc뮿>ύ3 _4VMWbwm*=ĂT4FW<&*xrKOBRzutt4UtKâ,gYgN;}Ùؑ*mk猧_ai嫺D;kjq3ze86t>VujV=b+̄MOؘ/_ᶉU?LŴLQmtr~?}} x eCJ_U/_w^%F1y 1=Ui7#|v48+xAmo:xU8lݧ͕bhu 7mKga ۢ_>Lj|f;Ϟ"ö]m90z0?(tS>1kӶ~m#|rCzekm狫\~łCvdزO| u]#IS o[>[{T99g ><ݘaCV_a*CIeڞIuL z6g;oiʪzgc(ɫuڧ2yo\(Z/ޜs(ӡPWͯ7V,|oPzh:m6lʽczh7/a]Tө|Y?ˌ}׬ʾу1^22bz(y,?cC֞rцorۿªbM}W`u'>Y yg7azUhnb9~r(19, SJ^Uso,~֑7]ޏJ!t,N1C?I7I>IS_ke=L]U#-YtEpVHvٜ+W̙yeͿzN5<`y]bq5tɔ?sw-s._rh=}w^fXًAt-==C^%survey/tests/kalton.R0000644000176200001440000000270411457435613014400 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/simdata1.RData0000644000176200001440000020110013423662360015370 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 (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/DBIcheck.R0000644000176200001440000000354511457435613014510 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/confintrep.R0000644000176200001440000000116415132010355015240 0ustar liggesuserslibrary(survey) data(api) dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) rclus2<-as.svrepdesign(dclus2) m<-svyglm(I(comp.imp=="Yes")~1, design=dclus2, family=quasibinomial) if(anyNA(confint(m, method="likelihood"))) stop("NA in confint") mrep<-svyglm(I(comp.imp=="Yes")~1, design=rclus2, family=quasibinomial) if(anyNA(confint(mrep))) stop("NA in confint") if(anyNA(confint(mrep, method="likelihood"))) stop("NA in confint") repstats <- withReplicates(rclus2, function(weights, data) { tot <- sum(data[['meals']] * weights) log_tot <- log(tot) return(c(tot, log_tot)) }) confint(repstats, level = 0.95) survey/tests/nwts.R0000644000176200001440000000237211457435613014104 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/nwts.rda0000644000176200001440000000261511457435613014451 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/check.Rout.save0000755000176200001440000001315615026373522015654 0ustar liggesusers R version 4.4.1 (2024-06-14) -- "Race for Your Life" Copyright (C) 2024 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(survey) Loading required package: grid Loading required package: Matrix Loading required package: survival Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > 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 5.525 0.7796 > 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.512 0.053 0.561 survey/tests/survcurve.R0000644000176200001440000000136211457435613015153 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/svyivreg-var.R0000644000176200001440000000042614221463056015545 0ustar liggesusers library(survey) data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) a<-summary(svyglm(api00~ell+meals+mobility, design=dstrat)) b<- summary(svyivreg(api00~ell+meals+mobility, design=dstrat)) stopifnot(isTRUE(all.equal(a$cov.scaled, b$vcov))) survey/tests/deff.R0000644000176200001440000000201711457435613014011 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/toy_example_for_postStratify.R0000644000176200001440000000307313743413447021100 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/scoping.R0000755000176200001440000000110211457435613014544 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/degf-subset.R0000644000176200001440000000063015131333300015273 0ustar liggesuserslibrary(survey) # Load dataset data(scd) # Create rep weights 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, degf = 2 ) df1<-scdrep$degf scdsub<-subset( x = scdrep, arrests >= 200 ) stopifnot(identical(scdrep$degf, scdsub$degf)) survey/tests/predict-NA.R0000644000176200001440000000145514640361577015044 0ustar liggesusers## predict.svyglm with rank-deficient model ## from Terry Therneau, 6/24 load("sdata2.rda") library(survival) library(survey) pfit2 <- svyglm(pseudo ~ trt + flt3 + factor(time), design= sdata2) pfit3 <- svyglm(pseudo ~ trt + flt3 + factor(time), design=sdata2, family= gaussian(link= blog())) pfit2b <- update(pfit2, . ~ . + flt3:time) pfit3b <- update(pfit3, . ~ . + flt3:time) dummy <- expand.grid(trt=c("A", "B"), flt3= LETTERS[1:3], time=24* 1:3) phat2b <- predict(pfit2b, newdata=dummy, type='response',se.fit=FALSE) phat3b <- predict(pfit3b, newdata=dummy, type='response',se.fit=TRUE) stopifnot(class(phat2b)=="numeric") stopifnot(class(phat3b)=="svystat") stopifnot(all.equal(as.vector(coef(phat3b))[1],12.3296615700191)) stopifnot(all.equal(as.vector(phat2b)[1], 11.4568358310328)) survey/tests/mtcars-var.R0000644000176200001440000000072014166647050015163 0ustar liggesuserslibrary(survey) # don't throw an error on domains of size 1, just return NA input <- mtcars input$carb <- factor(input$carb) design <- svydesign(ids = ~0, weights = NULL, data = input) svyby( ~mpg, ~carb, design, svyvar ) ## same n with na.rm=TRUE as subset(, !is.na) input$mpg[1]<-NA design <- svydesign(ids = ~0, weights = NULL, data = input) stopifnot(all.equal(svyvar(~mpg, design, na.rm=TRUE), svyvar(~mpg, subset(design, !is.na(mpg))))) survey/tests/survcurve.Rout.save0000644000176200001440000000511212372250160016622 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/coxph-termtest.R0000644000176200001440000000216114166647050016073 0ustar liggesuserslibrary(survey) library(survival) set.seed(2021-6-25) test1 <- list(time=c(4,3,1,1,2,2,3), status=c(1,1,1,0,1,1,0), x1=as.factor(rbinom(7, 2, 0.5)), x=c(0,2,1,1,1,0,0)) # Fit a stratified model mod_c <- coxph(Surv(time, status) ~ x1 + x, test1) mod_d <- coxph(Surv(time, status) ~ x + x1, test1) stopifnot(all.equal(regTermTest(mod_c, ~x1, df = Inf)[c("chisq","df","test.terms","p")], regTermTest(mod_d, ~x1, df = Inf)[c("chisq","df","test.terms","p")])) data(pbc, package="survival") pbc$randomized<-with(pbc, !is.na(trt) & trt>0) biasmodel<-glm(randomized~age*edema,data=pbc,family=binomial) pbc$randprob<-fitted(biasmodel) if (is.null(pbc$albumin)) pbc$albumin<-pbc$alb ##pre2.9.0 dpbc<-svydesign(id=~1, prob=~randprob, strata=~edema, data=subset(pbc,randomized)) library(splines) model<-svycoxph(formula = Surv(time, status > 0) ~ bili + protime + albumin+ns(bili,4)[,1:3], design = dpbc) test<-regTermTest(model, ~ns(bili,4)[,1:3],method="LRT") stopifnot(all.equal(test$chisq, 47.314, tolerance=1e-4)) stopifnot(all.equal(test$lambda, c(1.4764260, 1.0109836, 0.6923415),tolerance=1e-4)) survey/tests/multiphase_simple.R0000644000176200001440000000325614640375550016637 0ustar liggesusers library(survey) data(nwtco) dcchs<-twophase(id = list(~seqno, ~seqno), strata = list(NULL, ~rel), subset = ~I(in.subcohort | rel), data = nwtco) mcchs<-multiphase(id = list(~seqno, ~seqno), strata = list(NULL, ~rel), subset = list(~I(in.subcohort | rel)), probs = list(~1, NULL), data = nwtco) dcchs mcchs old<-svymean(~edrel, dcchs) new<-svymean(~edrel, mcchs) stopifnot(all.equal(coef(old), coef(new))) stopifnot(all.equal(as.vector(SE(old)), as.vector(SE(new)))) stopifnot(all.equal( attr(vcov(old),"phases")[[1]], attr(vcov(new),"phases")[[1]])) stopifnot(all.equal( attr(vcov(old),"phases")[[2]], attr(vcov(new),"phases")[[2]])) old<-svytotal(~edrel, dcchs) new<-svytotal(~edrel, mcchs) stopifnot(all.equal(coef(old), coef(new))) stopifnot(all.equal(as.vector(SE(old)), as.vector(SE(new)))) stopifnot(all.equal( attr(vcov(old),"phases")[[1]], attr(vcov(new),"phases")[[1]])) stopifnot(all.equal( attr(vcov(old),"phases")[[2]], attr(vcov(new),"phases")[[2]])) old<-svytotal(~rel, dcchs) ##stratification variable, has no phase-two variance new<-svytotal(~rel, mcchs) stopifnot(all.equal(coef(old), coef(new))) stopifnot(all.equal(as.vector(SE(old)), as.vector(SE(new)))) stopifnot(all.equal( attr(vcov(old),"phases")[[1]], attr(vcov(new),"phases")[[1]])) stopifnot(all.equal( attr(vcov(old),"phases")[[2]], attr(vcov(new),"phases")[[2]])) ## not identical yet, need to update m<-calibrate(mcchs,~factor(stage)+rel, phase=2, calfun="raking") d<-calibrate(dcchs,~factor(stage)+rel, phase=2, calfun="raking") old<-vcov(svytotal(~factor(stage), m)) new<-vcov(svytotal(~factor(stage), d)) stopifnot(all(abs(attr(old,"phases")[[2]])<1e-10)) stopifnot(all(abs(attr(new,"phases")[[2]])<1e-10)) survey/tests/pps.R0000644000176200001440000000353211457435613013712 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/sdata2.rda0000644000176200001440000003414214640361577014640 0ustar liggesusersTSK׆CH HMDE{7A( +6lXQ+ް#vņX0'qo z֛̙3gO ݆JP(Ba!%Ed@ws' EXF"L`hL_ N%; BP(blBaB!GH $Ri B!G( Je BPGh #4ZmE!: CDGa0E!KaE!G芠! pC@#<^ވ>~/7A"D "A"cc8D$" 1A" DD"b" 111HA"3鈙Y l\<|B"bR2r JD&bb5b b-b"  ؂AlE"!#v v"v!v#{{D!b? 0@#"!#N N"N!N# "!#JWW2 M-m]=}D9QxxB >"juOψ/ozD2B!F DbqB!F dryBPF !Tju=BF ]Ba0DtD!&SaDX!6[pD8!:!..7D;Bx#A!aQ/@"D(" 11@CD"шD,"H@LD$"&!SSɈiD*" 1MvEE5n|ȣaܷp&ٸamLv Oamc7M76(:y(w ~a~SE#b6.5IB,/ 62Ve~,5E(0,C3oaD'[H5"?(掌 &rWL/ (*$9.&Ca#@AiE-ǕEqaё"5>󢢃FTX\ eƶӽQ5ZVCl\\DPtXdﰯ6NmlyVI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRϛ[sD7Y7gRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%TRI%+3J*J*J*J*J*J*J*J*J*J*J*J*J*J*J*U7HTtL{fQ-A1a!X_o`ݠԨD>k鏋* }hTLP\`$UX["Plt_\ k,D8M mo nbúo…)߄j%p}vbڛ*+kUjbF˨ wԞM @kez=<˿$=3Tӻ&ێg󔼵/iy24ZsS2JC@vơoBG~M(g<ť¨:`-"x!@eT$QQθ9yKWAE/ɽ`I˜pS%\WO<|4xvZVQJ/+E(?=,tGϛ>5P}{D~|%w-lŽ;_rޗCh)߬ASy' }$M=$%B 챙 V.ЍzΈXvZo`kWϋQ}YdƝwK*c˹]L9_#}fR2SJKrǀ}_C09FNDa OK1{Nz;R=S[Æc2hhWhvh!-)l|Ef7ɴ\ OWMƽGƃqdPO߹9mԖ*e. ^GwtsɃɥ羂頴k苈̗Ю(hj_ ?˨&z"Fg|4P&4U/T}1b 'pz"mw;8Nq2Oc߯-ND?bӉD{;>picHyzoƎϦKP|CFmuk&e[փlԀKo˹{;#KK7.1`䨤L0:{S&7jXqdG}ú72:-Nfܜ9lbF٤c'uS+|[:o9իOLȳ?jJ-= j FF=։D4i{kL.ShO_H[ӳc;pFR o`{{0nE0&!yT".IaO>ήr}> $::l5ȔYS[t4Dfg:Qޅ6:$ ͱpЛX&0'hDD \(K9ыٯe_ܬǬBؑs/PG>Zj rI%+莰-R ]ݏj+욭_v UEkw(\&`vMNG%- I=dApS)=s@=2P:^eAX/ ?tEޥ?C$/í=wKvs[+i7Gm#q wuՓ) L@5@׭9lxڜj>G'jWG|b <~,8dقN^}cIGO~x9 K{ 'O1\_,>lAckA$.!u |ZiH^,]1TL)f7RT$p.EG? "5S:WOx,7M˸RvL0x8h\`dO9Duhb9)!g 8Tŗ=g?ġuAF*@eSm [;VGZ4v(B,= ﮤ sߋ;bJ/J{ʼnӈ-%z~p^9پQIhzƋ0UB{MX,?K%.^ }W<48EHL7u%؁ !;_V=Y3ў_&rFҡZY.E}앓.x:rmWY'1Yѝ4rrŧ~?9ˁpU'k|iB ie=GnbbB/> DΟv7vz6Yǔ)/+nˊ3۾l{vzQ];=9y<@pZwsP}L;XYk/oO& JEr@w1A"\Y1*W/1^RN'I?r%+>q!u=8툘7CfV Dwl];N}{jػ2 ,0;=K1bIYF}gMw N`_.:|0+_q3U'O&\&WN؍ʫɳƋaLU`숴z>Xr[s)M1e`p/ +]B10e'8xH35m`/qdXpX5(sg % } yc#.JY;ėx:K]{#F b]ʦѾyR CG޳~5rt|2Jj _ݷlH5fl[Q tg+xĜvyF؎Vms34ͧ <3n[{"MSjC+J_bKq0Q8 7 6/$Esv]^&9^/r㍽oW 飔9чǂt\&nh0^~ZSřqkJKqj2Pk&HL MIw }3 }pq.NK - ۼ&t(4t7\<حϏvBnOn7d=?1_xGbЇk2fE9rA`1>3Ac_-f^Ǡ}{Kɼ)_WbRZ p2VZ3;i>1~k2g1ļDđ:#A7gn}=t9,]/$/1 ?KeC٪Am*r·',/ZIaˌO׫t~G/s>GmF`(e8)n:out0r=f:t.X Ggws=.IH_駸N- Whs'h^v V6yՇ#6@rla+W8xm+(/pN1hc >/ŌԪ7вK`_cH:8ϼtepYcpHH,^nduv^?Č׵}fъe|(@pG f;)|)]b5m|Bj*Vz0c`D1e-3^V~a ?1j9lzVH$xpӠ;A/-웰blL߹J(kOKf-u.sy?{O7=WɅT*μK*%׻ăGLݳ϶Fq3v&.gyPg&3HB5݌y873˙mYv^|0J>7h.}^L{W3dļͬd-Ε Aəj0H-xz$,r 'o=:xH2glioդZb\œٽX- VeB䈕sǁ:MAzX}gmzc7Kq#y4jWpۿ/Ϗ;p){=!tzSWS[ G൯ǪT-5'ۃM^YQL:44X~7r5^ l:u zm0#Ge7⾙kS fnkQMtXӪ'D9Wj1e7 POi.d݈lA:g2H8w$佮{RŜu/^i7,KO-9(⹮`A_ds|N_?U`4j]Rse8sSLRW˥qFރ(ĺn`~ԩ/9yƼT1J+3Y>]9,LÓㅈ׭~2a$7pL kʘݳt"#C0zXsi4K8;묽rD3aِG}?B8]K'za[gd_M/v7vG{_UOj8p G|5>֬Knm5*NRVu;ngz`z?ab0)P\S0?}AsA z'w듄Or-XjDy8itI!ӘKT+ļ'ڼu)ĺl>> ǿ9gP8Qovw_Qv,C\o^"|wY#F+wbAǨ@ 3z*Ҏ5j{P6BU;ZwiÞ\y+.0Ors?nG8d06pAXqۮT4wo`)I{oս r>MOjR iqJMٗeӲgU> T*~깺l.]/p!] ۋzx ZsG԰r+l&W^jA*^;H xDؿxJ9 @Xj ThՂYsOSqJõ^ˠ F}E x{l9=3 ~ ѿS~Oz?z=m!q>Va}#f~R.gԴyʚ+.ןN#^ ]*C6q֥=nlAdZyG)Ŵ{~NkdPzG {uX)[֟{.t> ' OFdd7cCg{X"I#ߵ_ǜ<3y`ؖX,^dN芅#~ˎKx y.{:y YH"B &ʉbY9d^7P t8zgK0&Vr'Qdfr^>T]}D=}̑o=1ٛ<:(2$Ԋb.p+Vgm :yI~˗S7ׂpA%?}P]rlws7R6ߟ-R /MT?,p4<&jۿlSDfl\{a,;R A咷߂k՗mY`9 }0hC\}L *٨_gXCv׼!`?R~` z齞?ZJ^m}ˠoؾ$OM*cu36w`«IY`)|glQ"Xfg\x, vxwT\ Uk1̭mʷ;2'%7zoĥ_\Aĥq'9)5[j.:}D^8%~m3֖/Kv9ȅ BRҮ,e H.RheDY֛>TYfl>jc?w>=Z0q^ ƶO([{<=;*~3'Oo'k:3a ^ah\W8a{ͭ^L{ֵ&Hm^(3<:^(r3j@!eXnЌS~]y]ҁ&lfg/z I 9ph\+wj`S]KW3H>Pli &F~ 8;P|!zV=\_?[nuwiYkI`Y=Cgqp1gT :7gݛ±? {N3)lڅ>8}B`>U} #ctzM }QǁkDsc9Ĺ1 ΓQ~ow9q1u=ђݪw%%e :kz:k K:}ǁ{@ȞJAK'y @ryЎ`42g4Z|dljetu!c`s-}&9&灺.=AK~Z9h|}`΁{[|^ kΓֱ'XZS6.Qs6s76q5?UtH} ;lҿ2m3rG@mAG&n9yFkǴJ^>A)A}r,PmН׌^k9qvȰ]BƺpN\~̋s۲#rZvm 8!K2FOԀɌ+&cGP'ON.&׉y=# iuƠp!6@V&2=qAtovJyZG[|>H3?dP4XnΔX Vfv]ڽ]n (ן]yWEx^9 k?u?b؀i" C֍J]Pܱ/<~GIx*.Ҵb\!]jv&*fR(B2KnQ4B!!+Mf4'<ۜg5攝W=4ޜ4?dIKܜV95vk)ͱi[٤^siNY~hXӜ|\-mZZ֌͹5}6o7xKk5elm[Ӷ[SwmEK}QKiR_ќӚ;XK}uk|i[wZڜWy[3F&l_mi?mi{kMZg[Sm勚3.C[-woK][^mioM۪7ǧ5Ƕ^ZZ-mSZZG÷ZڪUmNZsZS--9ynik1R[Z&Ӗʶ-m--mկ[3̖j3-ͩڳ6VckKܚSƶgktil 돊 w7 W)2Xa5U_Il͆'ކ?`ZXO'"=o!C>7Qo|'>kO"y'kI'CcцfGJ??)/c6Q>TIUI=]d>/w)| @'' ^Dt⓪lgG|,>i7 y$GR6g%OV JO?\|OYl_ 'I({'7:]rvy{oٟoiu~)i7LvU|6i_Kj_mU^nV^n-wwwZ_unM߷?Km\;Uorvr?鴵~wOKn-n7|km\[jV/풴[nm~-_\ZW6i_Kj_mU^nV^n-wwwZ_unM߷?Km\;Uorvr=BP/?X $ bcٗc"X  > c!x [ĺ.¼.$z-xX2߷#TP5B kAׂkIri.x]/nmEɰ'L,stM_pU ؠXpdtD\^{^+B+6V1.ظ b#w~ Aw7%"%QMJXJYߴl؍հ; pph[_ϵ9 K "ފE84'8*Жlzl b~ՋF hrE8*:ҟUpV8} /:?<} A1G˨gdYٷ gC\irQ= qsurvey/tests/lonely.psu.R0000755000176200001440000000620114462604410015207 0ustar liggesusers ## lonely PSUs by design library(survey) data(api) ## not certainty PSUs by fpc ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1) summary(ds) options(survey.lonely.psu="fail") try(svymean(~api00,ds)) try(svymean(~api00, as.svrepdesign(ds))) options(survey.lonely.psu="remove") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="certainty") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="adjust") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="average") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) ## fpc specified fpc<-ifelse(apiclus1$dnum==413, 1,1000) ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1,fpc=fpc) summary(ds) options(survey.lonely.psu="fail") try(svymean(~api00,ds)) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="remove") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="certainty") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="adjust") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) options(survey.lonely.psu="average") svymean(~api00,ds) svymean(~api00, as.svrepdesign(ds)) rs<-as.svrepdesign(ds) svytotal(~api00,rs) SE(svytotal(~api00,subset(rs, dnum==413)))==0 ## lonely PSUs after subsetting ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) ds1<-ds[-31,] summary(ds1) options(survey.lonely.psu="fail") svymean(~api00,ds1) options(survey.lonely.psu="remove") svymean(~api00,ds1) options(survey.lonely.psu="certainty") svymean(~api00,ds1) options(survey.lonely.psu="adjust") svymean(~api00,ds1) options(survey.lonely.psu="average") svymean(~api00,ds1) ## with adjustment options(survey.adjust.domain.lonely=TRUE) ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) ds1<-ds[-31,] summary(ds1) options(survey.lonely.psu="fail") try(svymean(~api00,ds1)) options(survey.lonely.psu="remove") svymean(~api00,ds1) options(survey.lonely.psu="certainty") svymean(~api00,ds1) options(survey.lonely.psu="adjust") svymean(~api00,ds1) options(survey.lonely.psu="average") svymean(~api00,ds1) ## checks for `svytotal()` df_w_singleton <- data.frame( Stratum = c(1, 1, 2, 2, 3), PSU = c(1, 2, 3, 4, 5), Design_Weight = c(10.5, 10.5, 20, 20, 15), Sex = c("M", "F", "F", "M", "M"), Age = c(30.5, 40.5, 35, 52, 44), Height = c(6.2, 5.0, 5.3, 5.7, 5.5) ) design_w_singleton <- survey::svydesign( data = df_w_singleton, ids = ~ PSU, strata = ~ Stratum, weights = ~ Design_Weight ) options("survey.lonely.psu" = "remove") stopifnot(all.equal( target = 126625, current = as.numeric( vcov(svytotal(x = ~ Age, design = design_w_singleton)) ) )) options("survey.lonely.psu" = "certainty") stopifnot(all.equal( target = 126625, current = as.numeric( vcov(svytotal(x = ~ Age, design = design_w_singleton)) ) )) options("survey.lonely.psu" = "adjust") stopifnot(all.equal( target = 127579.8, current = as.numeric( vcov(svytotal(x = ~ Age, design = design_w_singleton)) ), scale = 127579.8, tolerance = 0.000001 )) survey/tests/twophase.R0000644000176200001440000001176213423662360014742 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/poisson.R0000644000176200001440000000063314073671464014604 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/naa.rda0000644000176200001440000004575314066243344014224 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/raowuboot.Rout.save0000644000176200001440000000170412372250160016602 0ustar liggesusers R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.1.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## regression test for bug reported by Richard Valliant > library(survey) Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > s<-subbootweights(c(1,1),1:2, 50) > stopifnot(all(s$repweights$weights %in% c(0,2))) > > proc.time() user system elapsed 0.140 0.021 0.165 survey/tests/quantile.R0000644000176200001440000000262613707706366014743 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/na_weights.R0000644000176200001440000000061315143211050015214 0ustar liggesuserslibrary(survey) data(api) dsrs <- svydesign(id=~1, weights=~pw, data=apisrs) # Add records with 0 weight apisrs_0 <- apisrs apisrs_0$pw <- NA apisrs2 <- rbind(apisrs, apisrs_0) dsrs2 <- svydesign(id=~1, weights=~pw, data=apisrs2, na_weight="allow") stopifnot(coef(svytotal(~enroll, dsrs))==coef(svytotal(~enroll, dsrs2))) stopifnot(SE(svytotal(~enroll, dsrs))==SE(svytotal(~enroll, dsrs2))) survey/tests/nwts.Rout.save0000644000176200001440000001632314640361577015576 0ustar liggesusers R version 4.3.1 (2023-06-16) -- "Beagle Scouts" Copyright (C) 2023 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ## 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: twophase(id = list(~id, ~id), subset = ~in.ccs, strata = list(NULL, ~interaction(instit, rel)), data = nwt.exp) 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: twophase(id = list(~id, ~id), subset = ~in.ccs, strata = list(NULL, ~interaction(instit, stage, rel)), data = nwt.exp) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -2.71604 0.10827 -25.085 < 2e-16 *** factor(stage)2 0.78141 0.14726 5.306 1.35e-07 *** factor(stage)3 0.80093 0.15250 5.252 1.80e-07 *** factor(stage)4 1.07293 0.17817 6.022 2.33e-09 *** factor(histol)2 1.45836 0.31780 4.589 4.96e-06 *** factor(stage)2:factor(histol)2 -0.04743 0.43495 -0.109 0.913 factor(stage)3:factor(histol)2 0.28064 0.41298 0.680 0.497 factor(stage)4:factor(histol)2 0.90983 0.63774 1.427 0.154 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.000876) Number of Fisher Scoring iterations: 4 > summary(svyglm(rel~factor(stage)*factor(histol),family=quasibinomial,design=gccs8)) Call: svyglm(formula = rel ~ factor(stage) * factor(histol), design = gccs8, family = quasibinomial) Survey design: calibrate(dccs2, phase = 2, formula = ~interaction(instit, stage, rel)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -2.71604 0.10878 -24.968 < 2e-16 *** factor(stage)2 0.78141 0.14729 5.305 1.35e-07 *** factor(stage)3 0.80093 0.15212 5.265 1.68e-07 *** factor(stage)4 1.07293 0.17905 5.993 2.77e-09 *** factor(histol)2 1.45836 0.31757 4.592 4.88e-06 *** factor(stage)2:factor(histol)2 -0.04743 0.43432 -0.109 0.913 factor(stage)3:factor(histol)2 0.28064 0.41231 0.681 0.496 factor(stage)4:factor(histol)2 0.90983 0.63187 1.440 0.150 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.000876) Number of Fisher Scoring iterations: 4 > > ## check subsets of calibrated designs. > summary(svyglm(rel~factor(stage), + family=quasibinomial,design=subset(dccs8,histol==1))) Call: svyglm(formula = rel ~ factor(stage), design = subset(dccs8, histol == 1), family = quasibinomial) Survey design: subset(dccs8, histol == 1) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -2.7160 0.1083 -25.085 < 2e-16 *** factor(stage)2 0.7814 0.1473 5.306 1.48e-07 *** factor(stage)3 0.8009 0.1525 5.252 1.97e-07 *** factor(stage)4 1.0729 0.1782 6.022 2.73e-09 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.001333) Number of Fisher Scoring iterations: 4 Warning messages: 1: In `[.twophase2`(x, r, ) : 1 strata have only one PSU in this subset. 2: In summary.glm(g) : observations with zero weight not used for calculating dispersion 3: In summary.glm(glm.object) : observations with zero weight not used for calculating dispersion 4: In `[.twophase2`(design, nas == 0, ) : 1 strata have only one PSU in this subset. 5: In `[.twophase2`(design, nas == 0, ) : 1 strata have only one PSU in this subset. > summary(svyglm(rel~factor(stage), + family=quasibinomial,design=subset(gccs8,histol==1))) Call: svyglm(formula = rel ~ factor(stage), design = subset(gccs8, histol == 1), family = quasibinomial) Survey design: subset(gccs8, histol == 1) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -2.7160 0.1082 -25.105 < 2e-16 *** factor(stage)2 0.7814 0.1457 5.363 1.10e-07 *** factor(stage)3 0.8009 0.1504 5.324 1.34e-07 *** factor(stage)4 1.0729 0.1759 6.101 1.70e-09 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for quasibinomial family taken to be 1.001333) Number of Fisher Scoring iterations: 4 Warning messages: 1: In summary.glm(g) : observations with zero weight not used for calculating dispersion 2: In summary.glm(glm.object) : observations with zero weight not used for calculating dispersion > > > proc.time() user system elapsed 0.840 0.057 0.896 survey/tests/glm-scoping.R0000644000176200001440000000127715132056642015326 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/na_action.R0000644000176200001440000000044714066243344015042 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/badcal.R0000644000176200001440000000063412027701336014306 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/check.R0000755000176200001440000000271411457435613014171 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/contrast-replicates.R0000644000176200001440000000133113676517357017104 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/fpc.R0000644000176200001440000000011611457435613013653 0ustar liggesuserslibrary(survey) ## check many permutations of fpc specification example(fpc) survey/tests/quantile.Rout.save0000644000176200001440000001240713707706423016420 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/svyby-strings.R0000644000176200001440000000052514221461577015752 0ustar liggesusers ## check that stringsAsFactors fixes the string levels problem data(api, package = "survey") des <- survey::svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) est0 <- survey::svyby(design=des, formula=~cname, by=~both, FUN=survey::svymean, keep.var=TRUE, stringsAsFactors=TRUE) stopifnot(isTRUE(all(dim(est0)==c(2,23)))) survey/tests/by_covmat_nodrop.R0000644000176200001440000000233514771371435016457 0ustar liggesuserslibrary(survey) load("db.rda") d<-svydesign(ids=~psu,data=db,weights=~pweight,fpc=~psu_size) pop.sex<-data.frame(sex=c("男","女"),Freq=c(4592,4190)) pop.hos<-data.frame(hospital=c("hos1","hos2", "hos3","hos4", "hos5","hos6", "hos7"), Freq=c(1796+383,2917,1805,316,420,389,756)) d<-rake(d,sample.margins=list(~sex,~hospital),population.margins=list(pop.sex,pop.hos)) ## with option covmat = TRUE, 错误于inflmats[[i]][idxs[[i]], ] <- infs[[i]]: 被替换的项目不是替换值长度的倍数 svyby(formula = ~FT_num+DMFT+ft_num+dmft, by=~sex,design = d, FUN=svytotal,na.rm=TRUE,covmat = TRUE,deff=TRUE) ## now check correctness data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) calstrat<-calibrate(dstrat,~stype+0, pop=c(4421,755,1018)) svyby(~enroll, ~comp.imp, FUN=svytotal, covmat=TRUE,deff=TRUE,dstrat)->a svyby(~enroll, ~comp.imp, FUN=svytotal, covmat=TRUE,deff=TRUE,calstrat)->b svycontrast(a,c(1,-1))->delta_a svycontrast(b,c(1,-1))->delta_b stopifnot(isTRUE(all.equal(coef(delta_a),coef(delta_b),tol=1e-7))) stopifnot(isTRUE(all.equal(SE(delta_a),SE(delta_b),tol=1e-7))) survey/tests/testoutput/0000755000176200001440000000000014412404246015212 5ustar liggesuserssurvey/tests/testoutput/README0000644000176200001440000000043313423662357016104 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/api.Rout.saved0000644000176200001440000003543313101464017017743 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/multistage.R0000644000176200001440000000012313404603450017505 0ustar liggesusers## ## Check that multistage samples still work ## library(survey) example(mu284) survey/tests/testoutput/quantile-new.R0000644000176200001440000000135214412404246017747 0ustar liggesusers## From Ben Schneider, https://github.com/bschneidr/r-forge-survey-mirror/pull/7 library(survey) data('api', package = 'survey') boot_design <- svydesign( ids = ~ 1, strata = ~ stype, weights = ~ pw, data = apistrat, ) |> as.svrepdesign(type = "boot") # Attempt to estimate variance of quantile using direct replication ---- new <- svyquantile( x = ~ api00 + api99, quantiles = c(0.25, 0.75), design = boot_design, interval.type = "quantile", return.replicates = TRUE ) print(new) old <- oldsvyquantile( x = ~ api00 + api99, quantiles = c(0.25, 0.75), design = boot_design, interval.type = "quantile", return.replicates = TRUE ) print(old) confint(new) confint(old) survey/tests/testoutput/DBIcheck.Rout.save0000644000176200001440000001002613403332244020412 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/quantile-new.Rout.save0000644000176200001440000000407114412404246021435 0ustar liggesusers R version 4.1.1 (2021-08-10) -- "Kick Things" Copyright (C) 2021 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## From Ben Schneider, https://github.com/bschneidr/r-forge-survey-mirror/pull/7 > library(survey) > data('api', package = 'survey') > > boot_design <- svydesign( + ids = ~ 1, strata = ~ stype, + weights = ~ pw, + data = apistrat, + ) |> as.svrepdesign(type = "boot") > > # Attempt to estimate variance of quantile using direct replication ---- > new <- svyquantile( + x = ~ api00 + api99, + quantiles = c(0.25, 0.75), + design = boot_design, + interval.type = "quantile", + return.replicates = TRUE + ) > > print(new) Statistic: api00 api99 q0.25 565 526 q0.75 756 728 SE: api00 api99 q0.25 19.22732 14.45368 q0.75 13.72320 19.50807 > > old <- oldsvyquantile( + x = ~ api00 + api99, + quantiles = c(0.25, 0.75), + design = boot_design, + interval.type = "quantile", + return.replicates = TRUE + ) > > print(old) Statistic: api00 api99 q0.25 562.2056 525.4800 q0.75 755.1226 726.7813 SE: api00 api99 q0.25 18.91980 14.53474 q0.75 14.13114 18.73837 > > confint(new) 2.5 % 97.5 % q0.25_api00 527.3152 602.6848 q0.75_api00 729.1030 782.8970 q0.25_api99 497.6713 554.3287 q0.75_api99 689.7649 766.2351 > confint(old) 2.5 % 97.5 % q0.25_api00 525.1235 599.2877 q0.75_api00 727.4261 782.8191 q0.25_api99 496.9924 553.9676 q0.75_api99 690.0547 763.5078 > survey/tests/testoutput/DBIcheck.R0000644000176200001440000000341613403332210016723 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/nwts.rda0000644000176200001440000000261513403331173016676 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/nwts-cch.Rout.save0000644000176200001440000000610212750743313020553 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/fpc.Rout.save0000644000176200001440000000542212372250160017572 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/scoping.R0000755000176200001440000000110213403330170016765 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/multistage.Rout.save0000644000176200001440000000227112372250160021177 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/scoping.Rout.save0000644000176200001440000000631712750743334020502 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/pps.R0000644000176200001440000000353213403330037016135 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/fpc.R0000644000176200001440000000011613404603450016101 0ustar liggesuserslibrary(survey) ## check many permutations of fpc specification example(fpc) survey/tests/testoutput/nwtco-subcohort.rda0000644000176200001440000000166513403331173021047 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/api.R0000644000176200001440000000016413403330037016102 0ustar liggesuserslibrary(survey) options(survey.replicates.mse=TRUE) example(api) options(survey.replicates.mse=FALSE) example(api) survey/tests/testoutput/pps.Rout.save0000644000176200001440000000763113101464017017627 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/caleg.R0000644000176200001440000001023513606736750016425 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/caleg.Rout.save0000644000176200001440000002072713115663534020113 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/bycovmat.Rout.save0000644000176200001440000000745013251340246020653 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/bycovmat.R0000644000176200001440000000563313403330037017163 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/nwts-cch.R0000644000176200001440000000215213403330170017054 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/multistage-rcpp.R0000644000176200001440000002602414504151212016213 0ustar liggesusers## temporarily disable while it's being fixed ## q("no") ## ## Check that multistage() and multistage_rcpp() give same results ## for different options. ## library(survey) # Check for a simple random sample ---- data('api', package = 'survey') api_srs_design <- svydesign( data = apisrs, ids = ~ 1, weights = ~ 1 ) x <- as.matrix(api_srs_design$variables[,c('api00','api99')] / api_srs_design$prob) base_r_result <- survey:::multistage(x = x, clusters = api_srs_design$cluster, stratas = api_srs_design$strata, nPSUs = api_srs_design$fpc$sampsize, fpcs = api_srs_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = api_srs_design$cluster, stratas = api_srs_design$strata, nPSUs = api_srs_design$fpc$sampsize, fpcs = api_srs_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) if (!isTRUE(all.equal(base_r_result, rcpp_result))) { stop("Differences between `multistage()` and `multistage_rcpp()` for SRS") } # Check for a stratified simple random sample ---- apistrat_design <- svydesign( data = apistrat, id =~ 1, strata =~ stype, weights =~ pw, fpc =~ fpc ) x <- as.matrix(apistrat_design$variables[,c('api00','api99')] / apistrat_design$prob) base_r_result <- survey:::multistage(x = x, clusters = apistrat_design$cluster, stratas = apistrat_design$strata, nPSUs = apistrat_design$fpc$sampsize, fpcs = apistrat_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = apistrat_design$cluster, stratas = apistrat_design$strata, nPSUs = apistrat_design$fpc$sampsize, fpcs = apistrat_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) if (!isTRUE(all.equal(base_r_result, rcpp_result))) { stop("Differences between `multistage()` and `multistage_rcpp()` for stratified sample") } ##_ Check whether expected true zeroes are actually computed as zeroes ---- x <- as.matrix(model.matrix(~ -1 + stype, data = apistrat_design$variables) / (sum(apistrat_design$prob)/apistrat_design$prob)) base_r_result <- survey:::multistage(x = x, clusters = apistrat_design$cluster, stratas = apistrat_design$strata, nPSUs = apistrat_design$fpc$sampsize, fpcs = apistrat_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = apistrat_design$cluster, stratas = apistrat_design$strata, nPSUs = apistrat_design$fpc$sampsize, fpcs = apistrat_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=TRUE, stage = 1, cal = NULL) if (!all(rcpp_result == 0) | !all(diag(rcpp_result) >= 0)) { stop("Computations which should equal zero do not.") } # Create a stratified, multistage design ---- data(mu284) ## Create three strata, the third of which has only one PSU mu284_stratified <- rbind( transform(mu284, stratum = 1, y2 = y1 + c(0, 2, 1, 0, -1, 2, 0, 3, 0, 0, -1, -1, 1, -1, 0)), transform(mu284, stratum = 2, y2 = y1 + c(-1, 0, -1, 0, -1, 0, 0, 1, 2, -1, 1, 1, 0, 1, 0)), transform(mu284[1,], stratum = 3, y2 = y1 + 2) ) ## Create domain variables which yield a lonely PSU or a lonely SSU mu284_stratified[['DOMAIN_W_LONELY_PSU']] <- mu284_stratified$stratum == 1 | (mu284_stratified$stratum == 2 & mu284_stratified$id1 == 19) mu284_stratified[['DOMAIN_W_LONELY_SSU']] <- mu284_stratified$stratum == 1 | (mu284_stratified$stratum == 2 & mu284_stratified$id1 == 19 & mu284_stratified$id2 == 1) ## Create a survey design object with no lonely PSUs dmu284_strat <- svydesign(data = subset(mu284_stratified, stratum != 3), strata = ~ stratum, nest = TRUE, id = ~ id1 + id2, fpc = ~ n1 + n2) ## Create a survey design with one lonely PSU dmu284_strat_w_lonely <- svydesign(data = mu284_stratified, strata = ~ stratum, nest = TRUE, id = ~ id1 + id2, fpc = ~ n1 + n2) ## Create subsetted design objects, subsetted to domain with a lonely PSU or SSU dmu284_strat_domain_lonely_psu <- subset(dmu284_strat, DOMAIN_W_LONELY_PSU) dmu284_strat_domain_lonely_ssu <- subset(dmu284_strat, DOMAIN_W_LONELY_SSU) # Check same results for different values of 'lonely PSU' options ---- lonely_psu_options <- c(certainty = 'certainty', remove = 'remove', average = 'average', adjust = 'adjust') one_stage_options <- c(TRUE, FALSE) design_lonely_psu_comparisons <- expand.grid('survey.lonely.psu' = lonely_psu_options, 'one.stage' = one_stage_options, stringsAsFactors = FALSE) design_lonely_psu_comparisons[['results_match']] <- NA ##_ Check for lonely PSUs caused by design ---- for (i in seq_len(nrow(design_lonely_psu_comparisons))) { survey.lonely.psu <- design_lonely_psu_comparisons[['survey.lonely.psu']][i] one.stage <- design_lonely_psu_comparisons[['one.stage']][i] options('survey.lonely.psu' = survey.lonely.psu) x <- as.matrix(dmu284_strat_w_lonely$variables[,c('y1','y2')] / dmu284_strat_w_lonely$prob) base_r_result <- survey:::multistage(x = x, clusters = dmu284_strat_w_lonely$cluster, stratas = dmu284_strat_w_lonely$strata, nPSUs = dmu284_strat_w_lonely$fpc$sampsize, fpcs = dmu284_strat_w_lonely$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = dmu284_strat_w_lonely$cluster, stratas = dmu284_strat_w_lonely$strata, nPSUs = dmu284_strat_w_lonely$fpc$sampsize, fpcs = dmu284_strat_w_lonely$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL) design_lonely_psu_comparisons[['results_match']][i] <- isTRUE(all.equal(base_r_result, rcpp_result)) } print(design_lonely_psu_comparisons) if (!all(design_lonely_psu_comparisons$results_match)) { stop("Results for design lonely PSUs differ between base R and Rcpp implementations.") } ##_ Check for domain lonely PSUs caused by subsetting ---- domain_lonely_psu_comparisons <- expand.grid('survey.lonely.psu' = lonely_psu_options, 'survey.adjust.domain.lonely' = c(FALSE, TRUE), 'one.stage' = one_stage_options, stringsAsFactors = FALSE) domain_lonely_psu_comparisons[['results_match']] <- NA for (i in seq_len(nrow(domain_lonely_psu_comparisons))) { options('survey.lonely.psu' = domain_lonely_psu_comparisons[['survey.lonely.psu']][i]) options('survey.adjust.domain.lonely' = domain_lonely_psu_comparisons[['survey.adjust.domain.lonely']][i]) one.stage <- domain_lonely_psu_comparisons[['one.stage']][i] x <- as.matrix(dmu284_strat_domain_lonely_psu$variables[,c('y1','y2')] / dmu284_strat_domain_lonely_psu$prob) suppressWarnings({ base_r_result <- survey:::multistage(x = x, clusters = dmu284_strat_domain_lonely_psu$cluster, stratas = dmu284_strat_domain_lonely_psu$strata, nPSUs = dmu284_strat_domain_lonely_psu$fpc$sampsize, fpcs = dmu284_strat_domain_lonely_psu$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL) }) rcpp_result <- survey:::multistage_rcpp(x = x, clusters = dmu284_strat_domain_lonely_psu$cluster, stratas = dmu284_strat_domain_lonely_psu$strata, nPSUs = dmu284_strat_domain_lonely_psu$fpc$sampsize, fpcs = dmu284_strat_domain_lonely_psu$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL) domain_lonely_psu_comparisons[['results_match']][i] <- isTRUE(all.equal(base_r_result, rcpp_result)) } print(domain_lonely_psu_comparisons) if (!all(domain_lonely_psu_comparisons$results_match)) { stop("Results for domain lonely PSUs differ between base R and Rcpp implementations.") } # Checks for edge cases ---- ## Zero records ---- zero_row_design <- dmu284_strat |> subset(id1 == "Nonexistent") zero_row_result <- survey:::multistage_rcpp( x = as.matrix(zero_row_design$variables[,c('y1', 'y2')]), clusters = zero_row_design$cluster, stratas = zero_row_design$strata, nPSUs = zero_row_design$fpc$sampsize, fpcs = zero_row_design$fpc$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage, stage = 1, cal = NULL ) if (any(is.na(zero_row_result)) || any(zero_row_result != 0)) { stop("`multistage_rcpp()` should return zeros for zero-row inputs.") } survey/tests/domain.R0000644000176200001440000001016511757250654014362 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/svycontrast.R0000644000176200001440000000072514234625517015510 0ustar liggesuserslibrary(survey) data(api) dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) rclus2<-as.svrepdesign(dclus2) model<-svyglm(formula = api00 ~ ell + meals + mobility, design = rclus2) svycontrast(model, c(ell=1,meals=0)) a<-svycontrast(model, c(0,1,0,0)) model2<-svyglm(formula = api00 ~ ell + meals + mobility, design = rclus2,return.replicates=TRUE) svycontrast(model2, c(ell=1,meals=0)) a2<-svycontrast(model2, c(0,1,0,0)) stopifnot(!is.null(a2$replicates)) survey/tests/nwtco-subcohort.rda0000644000176200001440000000166511457435613016622 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/svyolr-rake-subset.R0000644000176200001440000000145614221463056016666 0ustar liggesuserslibrary(survey) data(api) dclus1 <- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) dclus1<-update(dclus1, mealcat=cut(meals,c(0,25,50,75,100))) ## population marginal totals for each stratum pop.types <- data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018)) pop.schwide <- data.frame(sch.wide=c("No","Yes"), Freq=c(1072,5122)) ## rake with the population totals dclus1r<-rake(dclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide)) # works m <- svyolr(mealcat~avg.ed+mobility+stype, design=dclus1) # fails in 4.1 (should work because svyolr's default na.action is na.omit) m2 <- svyolr(mealcat~avg.ed+mobility+stype, design=dclus1r) # fails in 4.1 (should work because NA values are subsetted out) m3 <- svyolr(mealcat~avg.ed+mobility+stype, design=subset( dclus1r , !is.na( avg.ed ) ) ) survey/tests/anova-svycoxph.R0000644000176200001440000000026714221463056016071 0ustar liggesusers library(survey) example(svycoxph, ask=FALSE) m<-update(model, .~.+I(protime^2)) a<-anova(m,model) b<-anova(m, model,force=TRUE) stopifnot(isTRUE(all.equal(b[2:6],a[c(3,4,6,7,8)]))) survey/tests/rss_scores.R0000644000176200001440000000114714166647050015275 0ustar liggesusers## Example from Rao, Scott, and Skinner 1998 Statistica Sinica library(survey) data(myco) dmyco<-svydesign(id=~1, strata=~interaction(Age,leprosy),weights=~wt,data=myco) m_full<-svyglm(leprosy~I((Age+7.5)^-2)+Scar, family=quasibinomial, design=dmyco) m_null<-svyglm(leprosy~I((Age+7.5)^-2), family=quasibinomial, design=dmyco) stopifnot(isTRUE(all.equal(coef(m_null), c(`(Intercept)`=-4.6, `I((Age + 7.5)^-2)`=-427),tol=1e-2))) s<-svyscoretest(m_full, ~Scar) stopifnot(abs(s[1]-10.73)<0.05) t<-svyscoretest(m_full,~Scar,method="individual") stopifnot(abs(coef(t)- -32.61)<0.1) stopifnot(abs(vcov(t)-99.1)<0.1) survey/tests/raowuboot.R0000644000176200001440000000023311457435613015124 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/domain.Rout.save0000644000176200001440000001553312372250160016035 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/testthat/0000755000176200001440000000000015147304542014616 5ustar liggesuserssurvey/tests/testthat/test-svyciprop.R0000644000176200001440000000137115132034564017754 0ustar liggesuserslibrary(testthat) test_that("svyciprop's fancy confidence intervals are indeed asymmetric", { input <- mtcars input$carb <- factor(input$carb) svy_mtcars <- svydesign(ids = ~0, weights = NULL, data = input) for (fancy_method in c("logit", "likelihood", "asin", "beta", "xlogit", "wilson")) { this_ci <- svyciprop(~am, design=svy_mtcars, method=fancy_method) if (this_ci[1]<0.5) { # expect the left tail to be shorter than the right expect_lt( this_ci[1] - confint(this_ci)[1], confint(this_ci)[2] - this_ci[1] ) } } plain_method <- "mean" this_ci <- svyciprop(~am, design=svy_mtcars, method=plain_method) expect_equal( this_ci[1] - confint(this_ci)[1], confint(this_ci)[2] - this_ci[1] ) }) survey/tests/testthat/test-bell_mccaffrey.R0000644000176200001440000001401015132052025020635 0ustar liggesuserslibrary(survey) library(testthat) test_that("Bell-McCaffrey standard errors run and are greater than linearized", { data(api) # Bell-McCaffrey standard errors are expected to increase dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) expect_no_error( summ_d1_bmcaff_lin <- { svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="Bell-McCaffrey") |> summary() } ) expect_no_error( summ_d1_bmcaf2_lin <- { svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="Bell-McCaffrey-2") |> summary() } ) summ_d1_taylor_lin <- svyglm(api00 ~ api99 + stype, design=dclus1) |> summary() testthat::expect_equal(all(SE(summ_d1_bmcaff_lin)>SE(summ_d1_taylor_lin)),TRUE) testthat::expect_equal(all(SE(summ_d1_bmcaf2_lin)>SE(summ_d1_taylor_lin)),TRUE) testthat::expect_equal(SE(summ_d1_bmcaff_lin),SE(summ_d1_bmcaf2_lin)) summ_d1_taylor_logit <- svyglm(as.factor(sch.wide)~api99+stype, design=dclus1, family="binomial") |> summary() expect_no_error( summ_d1_bmcaff_logit <- svyglm(as.factor(sch.wide)~api99+stype, design=dclus1, family="binomial", std.errors="Bell-McCaffrey") |> summary() ) expect_no_error( summ_d1_bmcaf2_logit <- svyglm(as.factor(sch.wide)~api99+stype, design=dclus1, family="binomial", std.errors="Bell-McCaffrey-2") |> summary() ) testthat::expect_equal(all(SE(summ_d1_bmcaff_logit)>SE(summ_d1_taylor_logit)),TRUE) testthat::expect_equal(all(SE(summ_d1_bmcaf2_logit)>SE(summ_d1_taylor_logit)),TRUE) testthat::expect_equal(SE(summ_d1_bmcaff_logit),SE(summ_d1_bmcaf2_logit)) dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) summ_d2_taylor_lin <- svyglm(api00 ~ api99 + stype, design=dclus2) |> summary() expect_no_error( summ_d2_bmcaff_lin <- svyglm(api00 ~ api99 + stype, design=dclus2, std.errors="Bell-McCaffrey") |> summary() ) testthat::expect_equal(all(SE(summ_d2_bmcaff_lin)>SE(summ_d2_taylor_lin)),TRUE) # snapshot including numeric values of the standard errors testthat::expect_snapshot({ svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="Bell-McCaffrey")|> summary()}) }) test_that("Bell-McCaffrey degrees of freedom go down", { data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) # Bell-McCaffrey standard errors are expected to increase expect_no_error( summ_d1_bmcaff_lin <- { svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="Bell-McCaffrey") |> summary() } ) summ_d1_taylor_lin <- svyglm(api00 ~ api99 + stype, design=dclus1) |> summary() expect_no_error( summ_d1_bmcdof_lin <- { svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="Bell-McCaffrey", degf=TRUE) |> summary() } ) expect_no_error( summ_d1_bmcdf2_lin <- { svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="Bell-McCaffrey-2", degf=TRUE) |> summary() } ) # match degrees of freedom with degf=FALSE, default expect_identical(summ_d1_bmcaff_lin$df.residual, summ_d1_taylor_lin$df.residual) # Bell-McAffredy dfs are going to be lower expect_lt(summ_d1_bmcdof_lin$df.residual, summ_d1_taylor_lin$df.residual) expect_lt(summ_d1_bmcdf2_lin$df.residual, summ_d1_taylor_lin$df.residual) summ_d1_taylor_logit <- svyglm(as.factor(sch.wide)~api99+stype, design=dclus1, family="binomial") |> summary() expect_no_error( summ_d1_bmcaff_logit <- svyglm(as.factor(sch.wide)~api99+stype, design=dclus1, family="binomial", std.errors="Bell-McCaffrey") |> summary() ) expect_no_error( summ_d1_bmcdof_logit <- svyglm(as.factor(sch.wide)~api99+stype, design=dclus1, family="binomial", std.errors="Bell-McCaffrey", degf=TRUE) |> summary() ) expect_no_error( summ_d1_bmcdf2_logit <- svyglm(as.factor(sch.wide)~api99+stype, design=dclus1, family="binomial", std.errors="Bell-McCaffrey-2", degf=TRUE) |> summary() ) # match degrees of freedom with degf=FALSE, default expect_identical(summ_d1_bmcaff_logit$df.residual, summ_d1_taylor_logit$df.residual) # Bell-McAffredy dfs are going to be lower expect_lt(summ_d1_bmcdof_logit$df.residual, summ_d1_taylor_logit$df.residual) expect_lt(summ_d1_bmcdf2_logit$df.residual, summ_d1_taylor_logit$df.residual) # snapshot including numeric values of the standard errors expect_snapshot({ svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="Bell-McCaffrey", degf=TRUE)|> summary()}) expect_snapshot({ svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="Bell-McCaffrey-2", degf=TRUE)|> summary()}) }) test_that("Bad standard errors break as expected", { data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) expect_error( svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="blah"), '\'arg\' should be one of') }) test_that("Bell-McCaffrey degf work with confint.svyglm()", { data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) d1_bmcaff_logit <- svyglm(as.factor(sch.wide)~api99+stype, design=dclus1, family="quasibinomial", std.errors="Bell-McCaffrey", degf=TRUE) ci_d1_bmcaff_logit <- confint(d1_bmcaff_logit) expect_false(is.null(attr(ci_d1_bmcaff_logit, "degf"))) expect_identical(attr(ci_d1_bmcaff_logit, "degf"), d1_bmcaff_logit$df.coef) # you can pick up parameters expect_no_error(confint(d1_bmcaff_logit, parm=c(1,3))) # likelihood works and is tighter than df=Inf expect_no_error(cilik_d1_bmcaff_logit <- confint(d1_bmcaff_logit, method="likelihood", level=0.9)) expect_no_error(ciInf_d1_bmcaff_logit <- confint(d1_bmcaff_logit, method="likelihood", ddf=Inf, level=0.9)) expect_equal( all(cilik_d1_bmcaff_logit[,"5 %"] < ciInf_d1_bmcaff_logit[,"5 %"]) & all(cilik_d1_bmcaff_logit[,"95 %"] > ciInf_d1_bmcaff_logit[,"95 %"]), TRUE ) expect_snapshot({ svyglm(api00 ~ api99 + stype, design=dclus1, std.errors="Bell-McCaffrey", degf=TRUE)|> confint()}) expect_snapshot({ svyglm(as.factor(sch.wide)~api99+stype, design=dclus1, family="quasibinomial", std.errors="Bell-McCaffrey", degf=TRUE) |> confint() }) }) survey/tests/testthat/_snaps/0000755000176200001440000000000015132036763016102 5ustar liggesuserssurvey/tests/testthat/_snaps/bell_mccaffrey.md0000644000176200001440000000741415132027717021366 0ustar liggesusers# Bell-McAffrey standard errors run and are greater than linearized Code summary(svyglm(api00 ~ api99 + stype, design = dclus1, std.errors = "Bell-McAffrey")) Output Call: svyglm(formula = api00 ~ api99 + stype, design = dclus1, std.errors = "Bell-McAffrey") Survey design: dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 99.85645 18.02030 5.541 0.000175 *** api99 0.90329 0.02734 33.039 2.33e-12 *** stypeH -19.38726 5.43114 -3.570 0.004398 ** stypeM -18.15821 6.07011 -2.991 0.012267 * --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for gaussian family taken to be 710.3237) Number of Fisher Scoring iterations: 2 # Bell-McAffrey degrees of freedom go down Code summary(svyglm(api00 ~ api99 + stype, design = dclus1, std.errors = "Bell-McAffrey", degf = TRUE)) Output Call: svyglm(formula = api00 ~ api99 + stype, design = dclus1, std.errors = "Bell-McAffrey", degf = TRUE) Survey design: dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 99.85645 18.02030 5.541 0.00218 ** api99 0.90329 0.02734 33.039 2.39e-07 *** stypeH -19.38726 5.43114 -3.570 0.01452 * stypeM -18.15821 6.07011 -2.991 0.02824 * --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for gaussian family taken to be 710.3237) Number of Fisher Scoring iterations: 2 --- Code summary(svyglm(api00 ~ api99 + stype, design = dclus1, std.errors = "Bell-McAffrey-2", degf = TRUE)) Output Call: svyglm(formula = api00 ~ api99 + stype, design = dclus1, std.errors = "Bell-McAffrey-2", degf = TRUE) Survey design: dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 99.85645 18.02030 5.541 0.00989 ** api99 0.90329 0.02734 33.039 3.8e-05 *** stypeH -19.38726 5.43114 -3.570 0.03412 * stypeM -18.15821 6.07011 -2.991 0.05386 . --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for gaussian family taken to be 710.3237) Number of Fisher Scoring iterations: 2 # Bell-McAffrey degf work with confint.svyglm() Code confint(svyglm(api00 ~ api99 + stype, design = dclus1, std.errors = "Bell-McAffrey", degf = TRUE)) Output 2.5 % 97.5 % (Intercept) 56.2792308 143.4336784 api99 0.8387537 0.9678245 stypeH -33.1110597 -5.6634606 stypeM -31.8944852 -4.4219434 attr(,"degf") (Intercept) api99 stypeH stypeM 6.308131 7.061340 5.304156 8.979698 --- Code confint(svyglm(as.factor(sch.wide) ~ api99 + stype, design = dclus1, family = "quasibinomial", std.errors = "Bell-McAffrey", degf = TRUE)) Output 2.5 % 97.5 % (Intercept) -0.50252632 6.077377146 api99 -0.00549704 0.004222495 stypeH -3.04477253 0.830203522 stypeM -3.27515434 -0.014736530 attr(,"degf") (Intercept) api99 stypeH stypeM 6.308131 7.061340 5.304156 8.979698 survey/tests/datos_ejemplo.rds0000755000176200001440000001307713676531067016341 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/lonely.psu.Rout.save0000755000176200001440000002473214576372270016721 0ustar liggesusers R version 4.3.1 (2023-06-16) -- "Beagle Scouts" Copyright (C) 2023 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > ## lonely PSUs by design > library(survey) Loading required package: grid Loading required package: Matrix Loading required package: survival Attaching package: 'survey' The following object is masked from 'package:graphics': dotchart > data(api) > ## not certainty PSUs by fpc > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1) > summary(ds) Stratified Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 413 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > try(svymean(~api00,ds)) Error in onestrat(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : Stratum (413) has only one PSU at stage 1 > try(svymean(~api00, as.svrepdesign(ds))) Error in jknweights(design$strata[, 1], design$cluster[, 1], fpc = fpc, : Stratum413has only one PSU > options(survey.lonely.psu="remove") > svymean(~api00,ds) mean SE api00 644.17 5.8058 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8058 > options(survey.lonely.psu="certainty") > svymean(~api00,ds) mean SE api00 644.17 5.8058 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8058 > options(survey.lonely.psu="adjust") > svymean(~api00,ds) mean SE api00 644.17 5.8281 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8267 > options(survey.lonely.psu="average") > svymean(~api00,ds) mean SE api00 644.17 6.0096 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.8217 > > ## fpc specified > fpc<-ifelse(apiclus1$dnum==413, 1,1000) > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1,fpc=fpc) > summary(ds) Stratified Independent Sampling design svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = apiclus1, fpc = fpc) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 413 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 2 1 4 12 21 9 11 37 2 4 Population stratum sizes (PSUs): 135 178 197 255 406 413 437 448 510 568 61 637 716 778 815 1000 1000 1000 1000 1000 1 1000 1000 1000 1000 1000 1000 1000 1000 1000 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > try(svymean(~api00,ds)) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="remove") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="certainty") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="adjust") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7344 > options(survey.lonely.psu="average") > svymean(~api00,ds) mean SE api00 644.17 5.7344 > svymean(~api00, as.svrepdesign(ds)) mean SE api00 644.17 5.7501 > > rs<-as.svrepdesign(ds) > svytotal(~api00,rs) total SE api00 3989986 35616 > SE(svytotal(~api00,subset(rs, dnum==413)))==0 [1] TRUE > > ## lonely PSUs after subsetting > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) > ds1<-ds[-31,] > summary(ds1) Stratified Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1, dnum != 413)) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 1 4 12 21 9 11 37 2 4 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="remove") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="certainty") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="adjust") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > options(survey.lonely.psu="average") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 > > ## with adjustment > options(survey.adjust.domain.lonely=TRUE) > ds<-svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1,dnum !=413)) > ds1<-ds[-31,] > summary(ds1) Stratified Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~pw, strata = ~dnum, data = subset(apiclus1, dnum != 413)) Probabilities: Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02954 0.02954 0.02954 0.02954 0.02954 0.02954 Stratum Sizes: 61 135 178 197 255 406 437 448 510 568 637 716 778 815 obs 13 34 4 13 16 1 4 12 21 9 11 37 2 4 design.PSU 13 34 4 13 16 2 4 12 21 9 11 37 2 4 actual.PSU 13 34 4 13 16 1 4 12 21 9 11 37 2 4 Data variables: [1] "cds" "stype" "name" "sname" "snum" "dname" [7] "dnum" "cname" "cnum" "flag" "pcttest" "api00" [13] "api99" "target" "growth" "sch.wide" "comp.imp" "both" [19] "awards" "meals" "ell" "yr.rnd" "mobility" "acs.k3" [25] "acs.46" "acs.core" "pct.resp" "not.hsg" "hsg" "some.col" [31] "col.grad" "grad.sch" "avg.ed" "full" "emer" "enroll" [37] "api.stu" "fpc" "pw" > > options(survey.lonely.psu="fail") > try(svymean(~api00,ds1)) mean SE api00 645.14 5.8909 Warning message: In onestrat(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="remove") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 Warning message: In onestrat(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="certainty") > svymean(~api00,ds1) mean SE api00 645.14 5.8909 Warning message: In onestrat(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="adjust") > svymean(~api00,ds1) mean SE api00 645.14 5.9119 Warning message: In onestrat(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : Stratum (406) has only one PSU at stage 1 > options(survey.lonely.psu="average") > svymean(~api00,ds1) mean SE api00 645.14 6.0914 Warning message: In onestrat(`attr<-`(x[index, , drop = FALSE], "recentering", recentering), : Stratum (406) has only one PSU at stage 1 > > ## checks for `svytotal()` > > df_w_singleton <- data.frame( + Stratum = c(1, 1, 2, 2, 3), + PSU = c(1, 2, 3, 4, 5), + Design_Weight = c(10.5, 10.5, 20, 20, 15), + Sex = c("M", "F", "F", "M", "M"), + Age = c(30.5, 40.5, 35, 52, 44), + Height = c(6.2, 5.0, 5.3, 5.7, 5.5) + ) > > design_w_singleton <- survey::svydesign( + data = df_w_singleton, + ids = ~ PSU, strata = ~ Stratum, + weights = ~ Design_Weight + ) > > options("survey.lonely.psu" = "remove") > > stopifnot(all.equal( + target = 126625, + current = as.numeric( + vcov(svytotal(x = ~ Age, design = design_w_singleton)) + ) + )) > > options("survey.lonely.psu" = "certainty") > > stopifnot(all.equal( + target = 126625, + current = as.numeric( + vcov(svytotal(x = ~ Age, design = design_w_singleton)) + ) + )) > > options("survey.lonely.psu" = "adjust") > > stopifnot(all.equal( + target = 127579.8, + current = as.numeric( + vcov(svytotal(x = ~ Age, design = design_w_singleton)) + ), + scale = 127579.8, tolerance = 0.000001 + )) > > proc.time() user system elapsed 0.570 0.040 0.608 survey/tests/mf_subpop.R0000644000176200001440000000232314640361577015103 0ustar liggesusers## ## internal multiframe checks of subpopulations ## library(survey) data(phoneframes) A_in_frames<-cbind(1, DatA$Domain=="ab") B_in_frames<-cbind(DatB$Domain=="ba",1) Bdes_pps<-svydesign(id=~1, fpc=~ProbB, data=DatB,pps=ppsmat(PiklB)) Ades_pps <-svydesign(id=~1, fpc=~ProbA,data=DatA,pps=ppsmat(PiklA)) mf_pps<-multiframe(list(Ades_pps,Bdes_pps),list(A_in_frames,B_in_frames),theta=0.7417399) glm1<-svyglm(Lei~0+Domain, design=mf_pps) m1a <- svymean(~Lei, subset(mf_pps, Domain=="a")) stopifnot(all.equal(as.vector(coef(glm1))[1], as.vector(coef(m1a)))) stopifnot(all.equal(as.vector(SE(glm1)[1]), as.vector(SE(m1a)))) stopifnot(all.equal(coef(svymean(~Lei, subset(mf_pps, Domain=="a"))), coef(svymean(~Lei, subset(Ades_pps, Domain=="a"))))) stopifnot(all.equal(as.vector(SE((svymean(~Lei, subset(mf_pps, Domain=="a"))))), as.vector(SE(svymean(~Lei, subset(Ades_pps, Domain=="a")))))) glm1<-svyglm(Lei~0+Domain, design=mf_pps) m1a <- svymean(~Lei, subset(mf_pps, Domain=="a")) all.equal(as.vector(coef(glm1))[1], as.vector(coef(m1a))) all.equal(as.vector(SE(glm1)[1]), as.vector(SE(m1a))) m2 <- svymean(~Lei, subset(mf_pps, Domain %in% c("a","ab"))) m2a<-svymean(~Lei, Ades_pps) survey/tests/api.R0000644000176200001440000000016411616354754013662 0ustar liggesuserslibrary(survey) options(survey.replicates.mse=TRUE) example(api) options(survey.replicates.mse=FALSE) example(api) survey/tests/regpredict.Rout.save0000644000176200001440000000472012372250160016712 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/testSUMMER/0000755000176200001440000000000014576372270014676 5ustar liggesuserssurvey/tests/testSUMMER/SUMMER.R0000644000176200001440000000166214576372270016036 0ustar liggesusers## CRAN won't allow this test unless INLA is a listed dependency ## which is impossible, so the test is hidden away here. library(survey) data("DemoData2",package="SUMMER") data("DemoMap2", package="SUMMER") if(require("INLA",quietly=TRUE)){ INLA::inla.setOption(num.threads="1:1") library(survey) des0 <- svydesign(ids = ~clustid+id, strata = ~strata, weights = ~weights, data = DemoData2, nest = TRUE) Xmat <- aggregate(age~region, data = DemoData2, FUN = mean) cts.cov.res <- svysmoothArea(tobacco.use ~ age, domain = ~region, design = des0, adj.mat = DemoMap2$Amat, X.domain = Xmat, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3) print(cts.cov.res) plot(cts.cov.res) summary(cts.cov.res) } survey/tests/caleg.R0000644000176200001440000001023513111135036014142 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/testthat.R0000644000176200001440000000061015132027016014726 0ustar liggesusers# This file is part of the standard setup for testthat. # It is recommended that you do not modify it. # # Where should you do additional test configuration? # Learn more about the roles of various files in: # * https://r-pkgs.org/testing-design.html#sec-tests-files-overview # * https://testthat.r-lib.org/articles/special-files.html library(testthat) library(survey) test_check("survey") survey/tests/deff.Rout.save0000644000176200001440000000433312372250160015466 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/qrule-swiss.R0000644000176200001440000000100014476224164015373 0ustar liggesuserslibrary(survey) data_no_strat <- data.frame(x = 1:10, id = 1:10, fpc = 10, probs = 1) design_no_strat <- svydesign(id = ~id, probs = ~probs, data = data_no_strat, fpc = ~fpc) quantiles <- c(0.01, 0.05, 0.1, 0.15, seq(21, 81, 10)*0.01, 0.85, 0.9, 0.95, 0.99) res <- svyquantile(~x, design_no_strat, quantiles, ci = TRUE, interval.type = "mean", qrule = "hf1") stopifnot(all(diff(res$x[,"quantile"])>=0)) survey/tests/quantiles-chile.R0000644000176200001440000000170513706430621016170 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/brewer_cpp.R0000644000176200001440000000051314576372270015240 0ustar liggesusers## pps="brewer" can't use rcpp ## this checks that it doesn't library(survey) data(election) dpps_br<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") options(survey.use_rcpp=TRUE) a<-svytotal(~Bush+Kerry+Nader, dpps_br) options(survey.use_rcpp=FALSE) b<-svytotal(~Bush+Kerry+Nader, dpps_br) stopifnot(identical(a,b)) survey/tests/bycovmat.R0000644000176200001440000000563313251326377014740 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.Rout.save0000644000176200001440000000235612372250160015773 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/regpredict.R0000644000176200001440000000305311457435613015236 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/kalton.Rout.save0000644000176200001440000000641512372250160016055 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/inf_cal_test.R0000644000176200001440000000207314640361577015545 0ustar liggesusers## ## tests calibration using a working model ## library(survey) data(nwtco) 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) impmodel<-svyglm(I(histol==2)~instit*stage+age, design=dccs2, family=quasibinomial()) nwtco$histhat<-1+predict(impmodel,newdata=nwtco) phase1model<-glm(rel~histhat*factor(stage),data=nwtco) newmethod<- calibrate(dccs2, formula=phase1model,phase=2,calfun=cal.raking) infs<-survey:::estfuns(phase1model) colnames(infs)<-paste0("h",1:ncol(infs)) nwtco<-cbind(nwtco,infs) dccs2h<- twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,instit)), data=nwtco, subset=~incc2) oldmethod<-calibrate(dccs2h, ~h1+h2+h3+h4+h5+h6+h7+h8,calfun="raking",phase=2) a<-svyglm(I(histol==2)~instit*stage+age, design=newmethod, family=quasibinomial()) b<-svyglm(I(histol==2)~instit*stage+age, design=oldmethod, family=quasibinomial()) all.equal(coef(a),coef(b)) all.equal(SE(a), SE(b),tol=1e-3) survey/tests/cigsw.rda0000644000176200001440000000644513542525537014601 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/twophase.Rout.save0000644000176200001440000002132214640361577016430 0ustar liggesusers R version 4.3.1 (2023-06-16) -- "Beagle Scouts" Copyright (C) 2023 The R Foundation for Statistical Computing Platform: aarch64-apple-darwin20 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > 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: twophase(id = list(~id, ~id), data = pbc, subset = ~I(!randomized)) 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: twophase(id = list(~id1, ~id), strata = list(NULL, ~id1), fpc = list(~n1, NULL), data = mu284.1, subset = ~sub, method = "full") 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: twophase(id = list(~seqno, ~seqno), strata = list(NULL, ~rel), subset = ~I(in.subcohort | rel), data = nwtco) Phase 1: Independent Sampling design (with replacement) svydesign(ids = ~seqno) Phase 2: Stratified Independent Sampling design svydesign(ids = ~seqno, strata = ~rel, fpc = `*phase1*`) > cch1<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), + design=dcchs) > dcchs2<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), + subset=~I(in.subcohort | rel), data=nwtco,method="approx") > cch1.2<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), + design=dcchs) > all.equal(coef(cch1),coef(cch1.2)) [1] TRUE > all.equal(SE(cch1),SE(cch1.2)) [1] TRUE > ## Using survival::cch > subcoh <- nwtco$in.subcohort > selccoh <- with(nwtco, rel==1|subcoh==1) > ccoh.data <- nwtco[selccoh,] > ccoh.data$subcohort <- subcoh[selccoh] > cch2<-cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), + data =ccoh.data, subcoh = ~subcohort, id=~seqno, + cohort.size=4028, method="LinYing", robust=TRUE) > > print(all.equal(as.vector(coef(cch1)),as.vector(coef(cch2)))) [1] TRUE > ## cch has smaller variances by a factor of 1.0005 because > ## there is a (n/(n-1)) in the survey phase1 varianace > print(all.equal(as.vector(SE(cch1)), as.vector(SE(cch2)),tolerance=0.0006)) [1] TRUE > > > ## bug report from Takahiro Tsuchiya for version 3.4 > ## We used to not match Sarndal exactly, because our old phase-one > ## estimator had a small bias for finite populations > rei<-read.table(tmp<-textConnection( + " id N n.a h n.ah n.h sub y + 1 1 300 20 1 12 5 TRUE 1 + 2 2 300 20 1 12 5 TRUE 2 + 3 3 300 20 1 12 5 TRUE 3 + 4 4 300 20 1 12 5 TRUE 4 + 5 5 300 20 1 12 5 TRUE 5 + 6 6 300 20 1 12 5 FALSE NA + 7 7 300 20 1 12 5 FALSE NA + 8 8 300 20 1 12 5 FALSE NA + 9 9 300 20 1 12 5 FALSE NA + 10 10 300 20 1 12 5 FALSE NA + 11 11 300 20 1 12 5 FALSE NA + 12 12 300 20 1 12 5 FALSE NA + 13 13 300 20 2 8 3 TRUE 6 + 14 14 300 20 2 8 3 TRUE 7 + 15 15 300 20 2 8 3 TRUE 8 + 16 16 300 20 2 8 3 FALSE NA + 17 17 300 20 2 8 3 FALSE NA + 18 18 300 20 2 8 3 FALSE NA + 19 19 300 20 2 8 3 FALSE NA + 20 20 300 20 2 8 3 FALSE NA + "), header=TRUE) > close(tmp) > > des.rei <- twophase(id=list(~id,~id), strata=list(NULL,~h), + fpc=list(~N,NULL), subset=~sub, data=rei, method="approx") > tot<- svytotal(~y, des.rei) > des.rei2 <- twophase(id=list(~id,~id), strata=list(NULL,~h), + fpc=list(~N,NULL), subset=~sub, data=rei) > tot2<- svytotal(~y, des.rei2) > > ## based on Sarndal et al (9.4.14) > rei$w.ah <- rei$n.ah / rei$n.a > a.rei <- aggregate(rei, by=list(rei$h), mean, na.rm=TRUE) > a.rei$S.ysh <- tapply(rei$y, rei$h, var, na.rm=TRUE) > a.rei$y.u <- sum(a.rei$w.ah * a.rei$y) > V <- with(a.rei, sum(N * (N-1) * ((n.ah-1)/(n.a-1) - (n.h-1)/(N-1)) * w.ah * S.ysh / n.h)) > V <- V + with(a.rei, sum(N * (N-n.a) * w.ah * (y - y.u)^2 / (n.a-1))) > > a.rei$f.h<-with(a.rei, n.h/n.ah) > Vphase2<-with(a.rei, sum(N*N*w.ah^2* ((1-f.h)/n.h) *S.ysh)) > > a.rei$f<-with(a.rei, n.a/N) > a.rei$delta.h<-with(a.rei, (1/n.h)*(n.a-n.ah)/(n.a-1)) > Vphase1<-with(a.rei, sum(N*N*((1-f)/n.a)*( w.ah*(1-delta.h)*S.ysh+ ((n.a)/(n.a-1))*w.ah*(y-y.u)^2))) > > V [1] 36522.63 > Vphase1 [1] 24072.63 > Vphase2 [1] 12450 > vcov(tot) y y 35911.05 attr(,"phases") attr(,"phases")$phase1 [,1] [1,] 23461.05 attr(,"phases")$phase2 y y 12450 > vcov(tot2) [,1] [1,] 36522.63 attr(,"phases") attr(,"phases")$phase1 [,1] [1,] 24072.63 attr(,"phases")$phase2 [,1] [1,] 12450 > ## phase 2 identical > all.equal(Vphase2,drop(attr(vcov(tot),"phases")$phase2)) [1] TRUE > all.equal(Vphase2,drop(attr(vcov(tot2),"phases")$phase2)) [1] TRUE > ## phase 1 differs by 2.6% for old twophase estimator > Vphase1/attr(vcov(tot),"phases")$phase1 [,1] [1,] 1.026068 > all.equal(Vphase1,as.vector(attr(vcov(tot2),"phases")$phase1)) [1] TRUE > > > proc.time() user system elapsed 0.814 0.050 0.862 survey/tests/nwts-cch.R0000644000176200001440000000215211457435613014633 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/svyby_se.R0000644000176200001440000000042613710407056014744 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/newquantile.R0000644000176200001440000000052413706453761015445 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/rakecheck.R0000644000176200001440000000345415146725043015031 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), control=list(epsilon=1e-10,maxit=30)) 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",tol=1e-10) svymean(~api00,rclus1g) svytotal(~enroll,rclus1g) all.equal(as.vector(weights(rclus1g)/weights(rclus1r)),rep(1,183)) ## Do it for a design without replicate weights dclus1r<-rake(dclus1, list(~stype,~sch.wide), list(pop.types, pop.schwide), control=list(epsilon=1e-10,maxit=30)) svymean(~api00, dclus1r) svytotal(~enroll, dclus1r) dclus1g<-calibrate(dclus1, ~stype+sch.wide, poptotals,calfun="raking",tol=1e-10) svymean(~api00,dclus1g) svytotal(~enroll,dclus1g) all.equal(as.vector(weights(dclus1g)/weights(dclus1r)),rep(1,183)) ## 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), control=list(epsilon=1e-10,maxit=30)) 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",tol=1e-10) svymean(~api00, dclus1g2) all.equal(as.vector(weights(dclus1g2)/weights(dclus1r2)),rep(1,183)) survey/INDEX0000755000176200001440000001113614646051312012410 0ustar liggesuserssvydesign Specify a survey design twophase Specify two-phase designs multiphase Specify a multiphase design multiframe Specify dual-frame/multi-frame design svrepdesign Specify replication-weight designs as.svrepdesign Compute replication weights for a design svydesign.imputationList Designs for multiply-imputed data. subset.survey.design Subset of survey update.survey.design Add variables to a survey design postStratify Post-stratify a survey design rake Rake a survey design calibrate Calibration and generalised raking estWeight Estimated weights for two-phase designs trimWeights Trim sampling weights. ----- svyplot Survey-weighted graphics svycoplot Conditioning plots for survey data svyqqplot Quantile-quantile plots for survey data svyhist Survey-weighted histogram svysmooth Smoothers and density estimates svycdf Cumulative distribution functions svykm Survival curves svyboxplot Survey-weighted boxplots svyby Tables of statistics ftable.svystat Formatted tables of statistics ftable.svrepstat ftable.svyby cv extract coefficient of variation SE extract standard error deff extract design effect confint extract confidence intervals svycontrast linear combinations of estimates ----- svycoxph Survey-weighted Cox models svyglm Survey-weighted generalised linear models. svyolr Ordinal logistic regression svysurvreg Accelerated failure models regTermTest Test sets of terms in a regression model svyloglin Loglinear models svyquantile Summary statistics for sample surveys svytotal svymean svyvar svyratio svytable Contingency tables svychisq Tests for two-way tables svyttest Design-based t-test svyranktest Design-based two-sample rank tests svylogrank Design-based logrank tests svystandardize Direct standardisation svykappa Cohen's kappa for inter-rater agreement svycralpha Cronbach's alpha svyivreg Two-stage least-squares for instrumental variables svymle Maximum pseudolikelihood estimation in complex surveys svynls Design-weighted nonlinear least squares svyprcomp Principal component analysis and biplots svyfactanal Weighted maximum likelihood factor analysis ----- svysmoothArea Small-area estimation (Bayesian Fay-Herriot style) svysmoothUnit Small-area estimation ----- withReplicates Replicate variances for arbitrary statistics withPV Estimation using 'plausible values' ---- hadamard Hadamard matrices is.hadamard paley Paley-type Hadamard matrices ---- stratsample Take a stratified sample ---- Utility functions: make.calfun Define calibration metrics cal.linear cal.raking cal.logit *svy.varcoef Sandwich variance estimator for glms *svyCprod Computations for survey variances *svyrecvar Computations for multistage samples *svrVar Computations for replication variances jk1weights create replication weights jknweights create replication weights bootweights create replication weights brrweights create replication weights mrbweights create replication weights grake Computations for generalised raking *regcalibrate Computations for regression calibration degf Degrees of freedom for replication weights *twophasevar Variances in two-phase designs as.svydesign2 Convert a old svydesign object to the new format. * not exported from NAMESPACE ----- Data: election US election data fpc Small artificial example scd Cardiac arrests example api California Academic Performance Index crowd Small example from VPLX manual mu284 Two-stage sample from MU284 population myco Stratified case-control sample: BCG and leprosy nhanes Subset of NHANES 2009-10 phoneframes Dual-frame example of household expenses salamander Salamander mating data set from McCullagh and Nelder yrbs One variable from Youth Risk Behavior Survey survey/MD50000644000176200001440000004267515147304542012142 0ustar liggesusers4544bbd85e2f96ef576a93325ad4e1b1 *DESCRIPTION b45da832f3977d3320af592c9dfaae3d *INDEX 94eba9544817ad98f94408edafb96f0a *NAMESPACE 9bbcc35ca7278f8f323d6697146e2d44 *R/DBI.R dbe4804092210e425d0c40a06b072435 *R/RcppExports.R 0e9c6348d61a1019a03298cd27577922 *R/anova.svyglm.R 1c3bf432923358d0d85639f7c077102a *R/bell_mccaffrey.R 5b81c3cd21b951d535a27679230eeda4 *R/bootstrap.R d04cfe15ddf5203320acac50557c8cdd *R/chisqsum.R b5cffd73326ccfbef1954d2ad032efa0 *R/compressweights.R 08e0b032b357168a7ca519c70467249f *R/confint.R e4b7519f8c5cad157788d9ff0bebb9b5 *R/count.R 107ca72285589f86b58bdde7dd83d687 *R/dAIC.R 87b020bfe7dff04863803840b57ab969 *R/dbiupdate.R c5f1dd01370e4c3d7f3d6d3558ca15ac *R/ftable.svystat.R f061049f41241e8baf7ebddeaa940e0d *R/gofchisq.R e0f78e6f847b7d1cfe589e1eb016a5dc *R/grake.R fc7f59f3476023bbbc977abedd40152d *R/greg.R 8abae944629ac267a54eb76119674a18 *R/ht.R c179f70e236b229ae2b8120802636395 *R/loglin.R b346412969aca919c164466214c647af *R/logrank.R d16ac882592b056619f33b48dcb97498 *R/margins.R d5974389ea182dc31a4232bd81b3e7c8 *R/mrb.R 9ca0b28566332e9e3d5236293fda88f5 *R/mse.R 14524cd921b32fae64c60a9ccc57ce47 *R/multiframe.R b61edc82d9608bda67b0abce6cb02b46 *R/multiphase_admin.R b129a1fb6aa1cf9977b18193b8f0bf78 *R/multiphase_inference.R 9ca0f66d44e58a164bd1b26cd24bcce6 *R/multistage.R 7b6d54c119096397e472d504308cf749 *R/multivariate.R b476ee2dbcf229d6645099c0746b38d4 *R/naa.R cdd45608d012ea399ac2714c1a1c444b *R/newsvyquantile.R 1a837a27c6e21e4589a113a40f090559 *R/olr.R 8169eb47021665ca2790739b12669641 *R/pFsum.R d7bde53f7898b0ed437962b894c9b798 *R/paley.R 978d27d9b9800bd399b26b2b41bc906d *R/pps.R ca93c94f602206cd5cd636441f442680 *R/qrule.R 9d6bf2b384a489d158a1fedf6835e931 *R/recalibrate.R 008f90fc1f8ae812d2c086e8f6259531 *R/regtest.R 10206cdbad8fc1e36eed850c2cdb096b *R/reweight_dual.R 0ff4c8baea050c34a186be41372162ff *R/rsquared.R 5e3778581f76c677829a614704070010 *R/score.R 5322fc5eadb72027f93002cfaadf076e *R/smoothArea.R b5b5b23951af787a3a684b60777ff9f2 *R/smoothUnit.R 254b833eed43c2329c37ee6950ce72b7 *R/stdize.R 14aabec32aa01b0ba0783771cd12a355 *R/stratsample.R f4a3649787ba498b16cf4b3fbb3f2e93 *R/survey.R 9e6536859f54782fa3f5831e1862505a *R/surveyby.R e48c5b973007eb8f8f45c5c4b949a28c *R/surveychisq.R 6c14072ca284f40ae34d60a17ac9cc7d *R/surveygraph.R 43db71e951df916d8b79d353c7a472fd *R/surveyrep.R 5bc03f84ff7bf31c74e055c9efe00678 *R/svycdf.R e13df885a072b3cdf1d2b8914dbe9f31 *R/svycontrast_svyvar.R faa56ad693b9a8640405d834cd740d0f *R/svycralpha.R c3846a9a7d4cb10c069e57af505863f6 *R/svyhist.R 1a2218180bec03a003e47a28657538ad *R/svyivreg.R f93da4eb3dfce901e24adfef27619f2b *R/svykappa.R eeb8342e956d2c517075bd6f7e40167b *R/svykm.R 583b9d6e6cf3623dc610cd833452517e *R/svymi.R 4a5331ff88f51ab2977fce04a107f546 *R/svynls.R 1d485c639a879a1401fe8af7cf5c40af *R/svypredmeans.R 2d52fec7c7315546084e7e41ce9231bf *R/svyqq.R 152b532adf8e8c01c9a41df34be39b7b *R/svyquantile.R 28f3f42d5c997f75d10b0aa3a497b88a *R/svyranktest.R 09148c721d7b9fd492e25b82c64dfb75 *R/svysmooth.R fe04da44d7a50f474e3db433e3a982ad *R/svysurvreg.R dcddb3952a307118123342cb3b6d5ba2 *R/svyttest.R 77a6b92e2fea89618fbe6158e4d09d9f *R/sysdata.rda 3a2f19a9a7b6e5f206a6f8a5537fb2d4 *R/transform.R e5e3cab47164820fb15a6f99bc2b127b *R/twophase.R abdeffce3367e65db0266f07d617b9fc *R/twophase2.R 6c069bda823793258fa7630e6c8138ab *R/weightconstruction.R d630b6d45ac28393cd641c9a24a0e391 *R/withPV.R 13874fa8d08f4d3dc8d61367a0f33f92 *R/xdesign.R fab4fbe248f0b861865d004cbf38c645 *R/xval.R 482f8b74036c8e0b28c66937abbd5a19 *THANKS 352436d5364168e9ac4ed7bbbb8e6637 *TODO 9edd7d4b0914faff12aa738eedaea99d *build/vignette.rds 9af69be025fd9389a9effa65b5205842 *data/api.rda 60a8bba651e0906433a565ffa6264dae *data/crowd.rda 74dbbb032106980142376d323a52beda *data/election.rda d36b411787e1fd2eac98a38d7516bb2b *data/fpc.rda 8abe4f97edfddf0d0c82855d638167a5 *data/hospital.rda 4a3c715b1aa48aae062d8edddbc78bde *data/mu284.rda 7f7a7b2c98932ea68ae6ccd5eb0f3b20 *data/myco.rda cd20949dc84d99dbab17360e5aa518dd *data/nhanes.rda e84725514e57b2a58f3e8f32e2b0e3dc *data/phoneframes.rda 1a552261ba3d0b02ed85962d8c9d6746 *data/salamander.rda 26024d0c7e71b010cab8805cca6b3fcc *data/scd.rda 2a788ebde2e6b0f12a0640b7a38387f3 *data/yrbs.rda 853b47b0c3796b5a596d02c946f2030f *inst/BUGS e27d2e9ebc756e89c45ccc34367d3724 *inst/CITATION f71e3e0fbf665f9103ca600d66f8bbfe *inst/COPYING 6c8727546cf0eee4075c7adf49392cd3 *inst/NEWS ad0ca60c6d7d1c64ed77618b40c5d1c5 *inst/api.db c17f45ff942d0d826c09c2c97e296249 *inst/disclaimer bd13d234657132da1a44e0a33bcfb456 *inst/doc/domain.R e549b9eba82a7a3db5543ec5be0b0bc6 *inst/doc/domain.Rnw c232ce65464316f566ae18397b515bcd *inst/doc/domain.pdf a5142360787a98ec409e10229bbd6f00 *inst/doc/epi.R cf470caff322c36517ae4ac286e420ee *inst/doc/epi.Rnw 1cfcc7072ae6424e3d2ff32249c060bc *inst/doc/epi.pdf 4b73eb641175b24140225b50974d32e2 *inst/doc/multiphase.R 0db7e1d82362863e32bdbecaf32119b8 *inst/doc/multiphase.Rmd 484c4c6b4f2c387d01322d38fe7a4a47 *inst/doc/multiphase.html 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 5fc665fd39431ff19a106079ee45462c *inst/doc/pps.pdf 30b720c13df60735352742274fbbeb3f *inst/doc/precalibrated.R 25a889bd922911a9a826973969ba4751 *inst/doc/precalibrated.Rnw 4825586b08fdca8d0172d3e0ff0fadc1 *inst/doc/precalibrated.pdf c32d6bb7b69fa9ba5f774af64d2f0ef6 *inst/doc/qrule.Rnw 6f1e204ea834170d10e4a97bbfdeaa9f *inst/doc/qrule.pdf 790fe24f59a332b946f5251a7b37ceb3 *inst/doc/survey-sae.html 8ac4685d564face34be1fcff1f53b60b *inst/doc/survey-sae.html.asis da0b23328004b9044b0f62f9341945b9 *inst/doc/survey.R dfdd268e5e85cdb9422e11b2c183aa79 *inst/doc/survey.Rnw 980a14b6f21f3ddc1de2d058be8ee313 *inst/doc/survey.pdf 67fd0dff07ced7069e2ac813865dbf58 *inst/porting.to.S 0caeffbff77347fc2ab06f30534c3f46 *inst/twostage.pdf 4db9100417c9160c9271bd853cd93f86 *inst/ucla-examples.pdf 793d514796f2d79fd31a883ff41af1d3 *man/HR.Rd 234787faa3310c2325952029685b5272 *man/SE.Rd a528d6c6df904a943408197835fde244 *man/anova.svyglm.Rd f15d33e77dbc7c73369831f107a09d43 *man/api.Rd 1df4e44a0124abadc68eeba8da160f7d *man/as.fpc.Rd a3d805b1013bb399a705f13ae2356fff *man/as.svrepdesign.Rd ca07d024bc8ad2920881be3a92416865 *man/as.svydesign2.Rd a2487bc8b605e35fa16fc160f7194055 *man/barplot.svystat.Rd 4a2512bead9eedbc367c2ec4934b061a *man/bootweights.Rd b05701bb4ccac840031ff7f887bd55a7 *man/brrweights.Rd 1afbcf4764235c579e67e271c6196098 *man/calibrate.Rd f98c7338d5ed2bf6930eaf66a5f0a1e7 *man/compressWeights.Rd 923c0cc3a683e1190c6aab5e19aa4ba2 *man/confint.svyglm.Rd b88cbcc5a0339e24aae8cac15abc6085 *man/crowd.Rd c32bb431ed452b4d1495953197db0427 *man/dimnames.DBIsvydesign.Rd 55e032d442b0447687400e28e4085d29 *man/election.Rd 7b7bec60c38e234bf63817c9f54df4d4 *man/estweights.Rd 61910fd70173387a35a7788b4aaffcb5 *man/fpc.Rd 1fc9004a0c1bb430f025861083e5b379 *man/ftable.svystat.Rd 1eea3d9b881d7702e2ee86c0b9783719 *man/hadamard.Rd c3f82951b153e67cce171164ccfdc19c *man/hospital.Rd c523dcc5d55b4f182bd406ea48d4e64a *man/make.calfun.Rd 493380df216b5c1b55bbdd05ec4cf22a *man/marginpred.Rd 3798db27ce3e376ea6711eafba258b1d *man/mu284.Rd 525d8f787b6f26eed8044f350b653c70 *man/multiframe.Rd e76dde47d05fee5dfd3ce1387c563e83 *man/multiphase.Rd e3e0fbc9fdd8c266bc6f7a2b8187cc47 *man/myco.Rd c7085a3734f01ba6c00cbb79480ac05d *man/nhanes.Rd 8447ae42f78e376968421ee46543a195 *man/nonresponse.Rd bd43fc6cd74a95f729e8099ee3d66a72 *man/oldsvyquantile.Rd ecb179d38dee1a930f80120be4d02375 *man/open.DBIsvydesign.Rd 252699f3b9df1b2849fb1d6e43e991f7 *man/paley.Rd 5261a009c48bd256a64480a197dfc243 *man/pchisqsum.Rd 08b145c7334ca86a62dd60fa0135d41e *man/phoneframes.Rd 9d2a995363794d228bc4e9983a2ee186 *man/poisson_sampling.Rd e8fa2c17aa1230065ae000fdb0913157 *man/postStratify.Rd 47e775140012c61bde6cca8aaf0dc3d0 *man/psrsq.Rd 6e7610099924ec8ebda3bfc6dcc40015 *man/rake.Rd e7ba254bd22674a7636990ce99cd95b1 *man/regTermTest.Rd b7749d740b0d0a446d07b4b74851b405 *man/reweight.Rd 5284116f54e1bb172e72eb163813620c *man/salamander.Rd c38155f62ea15df2c750a0ca1f2cf5ff *man/scd.Rd 44c742dd23c3e43a6eda1f707ff30451 *man/smoothArea.Rd bb5d761732c36494bd7b1e9f1bf81d37 *man/smoothUnit.Rd db845dc8216a7d04e1c224b93f764d5f *man/stratsample.Rd e2d5e837e99c491b1c02c0d135516aa3 *man/subset.survey.design.Rd d60c7a31c1308c483f75c15ac3314431 *man/surveyoptions.Rd 034f9ef4b08f0080b24e445975392af7 *man/surveysummary.Rd 4c4993863452ec84eeb68d5ef07c7e6f *man/svrVar.Rd 5815f229aee0f70939ef13471d98133c *man/svrepdesign.Rd 07ee39bfbf6b850d19b584b905d65ebc *man/svy.varcoef.Rd ae19a003c9f60058fa4cb749f23e1c68 *man/svyCprod.Rd 2ef4a763acf2d3d3840886892d0dac68 *man/svyby.Rd 533fe820a1e613b0c8a395b49af7444b *man/svycdf.Rd 87a0e4250d9cd4afe1fddb47e00da98c *man/svychisq.Rd e03949f0f62d12affaaed50895e3f063 *man/svyciprop.Rd 7b9ac4501a2c81a00c83ca4acc7498c3 *man/svycontrast.Rd f0a4f67b0e007cf77310a2fc7c536fb4 *man/svycoplot.Rd a711eda270f522b3f041d6b0386959b5 *man/svycoxph.Rd d3a668ef39f7c71fdabb476a0099a4ba *man/svycralpha.Rd 6fda9b225b1aea248c308236f8e47076 *man/svydesign.Rd ce556903b7ec044cdbfccceb75395dfc *man/svyfactanal.Rd 733a76d4e76fe3939e409ba3adb1a042 *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 bf9791d2597bd45fe6f2efd033fc156a *man/svylogrank.Rd e539db0193ec579f51b2ee927e92bd61 *man/svymle.Rd 87f974343399b3c444fb632353054d9f *man/svynls.Rd 9349af5a4293dfec88b36b03723ae4b8 *man/svyolr.Rd 3b9e8c67b5844eefd79765361bec81d5 *man/svyplot.Rd 44aa5fc0f7128f7f84b32e8fa55f7bc3 *man/svyprcomp.Rd 389375ea77c22206426323da606f51f0 *man/svypredmeans.Rd 35c1c678324addd81f628b0807030bc1 *man/svyqqplot.Rd d454ce874ce988184d1fade9480d13c9 *man/svyquantile.Rd 283097212cc64626aec865db87ab8451 *man/svyranktest.Rd 823ef92329cafe1951fd81821a7e2bf7 *man/svyratio.Rd 7af7d7cb98df6e1d8007d1cb6629acc1 *man/svyrecvar.Rd 28b8adb800fa559985774702e88b1068 *man/svyscoretest.Rd 671fb4c053614fe861700f3d5f4d804f *man/svysmooth.Rd c3f531ef8116503c4dc314e463552f7c *man/svystandardize.Rd 4f58ed2c680c203fcef35daf14ed5cfc *man/svysurvreg.Rd 7be2a1fa3d8a6de927d78e67d95d048c *man/svyttest.Rd febaed1d0d48a76214b3cc1dbf0f85b9 *man/trimWeights.Rd 48ac8ad77aa8a05af4981d5e60513b85 *man/twophase.Rd 235915d70b5a349e96a7962fa40be8cf *man/update.survey.design.Rd 20ee2b3e3a8d1848105f1cee6d57aeab *man/weights.survey.design.Rd 0666e2b9553c96d8dc7420ee54a44ff5 *man/with.svyimputationList.Rd 32e23222c520881a6db68fd8dd2f02a3 *man/withCrossval.Rd 075d275064dd0be36ad5414fd844e79c *man/withPV.survey.design.Rd 268d8dd131876cfee17c3d97768e6a1e *man/withReplicates.Rd 6ee7f8912708af0675eaadec01449f72 *man/xdesign.Rd 27bedfdf4ca5e890b2969789963f0520 *man/yrbs.Rd 7eaad78af4352e54e99e63d18a220eba *src/Makevars.makefile 8d46d69896a1f1d31ed76035a0e49d67 *src/Makevars.win 59df71c63c865a3b74a953f8b574e3b7 *src/RcppExports.cpp f33c01d69e6b63cf12140eef5d57d57a *src/arma_multistage.cpp 6cc4d0329eb80714fee45788490212d6 *tests/3stage2phase.R c91c9d0dd78c264236d5aeadbe6de4aa *tests/DBIcheck.R c539fb6ec53d30356eb9ad96c83b7aee *tests/README 1a1a86949b851430871e465a28511f90 *tests/anova-svycoxph.R 527e5ba782684ca6a459d09a52e4bb4b *tests/api.R eba420580d5712b2bdbee74f844e2c9e *tests/badcal.R fca32d6127f578fe7cacf6957c9bcb06 *tests/badcal.Rout.save 7532f1607ace7f9ebe23ce646b81dc8a *tests/brewer_cpp.R 3b5df83808916c6b99270c2e5676e8c8 *tests/by_covmat_nodrop.R 02afc0b2619b18dbd3fd4c11f7afbac2 *tests/bycovmat.R 7178e6025a01c697c3d122898e573698 *tests/caleg.R bb39e18b97ab5f91094f9ceb71d992f5 *tests/check.R 47521635c78cda247c8a9ceb8e7d268a *tests/check.Rout.save 116d5b9f18d84486d0169c858dec06d8 *tests/cigsw.rda 8020d865bbef54ba2a642feea20a370c *tests/confintrep.R cb77bb97492e653965018032b217cbb9 *tests/contrast-replicates.R e81abd8a9fb22680fa8975667237694f *tests/coxph-termtest.R d59c6e9ef79624cc1c29fe9a2fa409fc *tests/datos_ejemplo.rds 870014116d44172900dbd699e052c3eb *tests/db.rda 9afd1c4ef859ba69520afe4825a3b1e2 *tests/deff.R 1c28ba9df80a9d65aee6d49bb767148d *tests/deff.Rout.save 56ecbd4b088346c57c3cef3f10ef4d17 *tests/defftest.R dcc6f412002b8632e214fd577bcff091 *tests/degf-subset.R d4cb9cfccfdc7fb9ec7c34a64eb7c1ed *tests/degf-svrepdesign.R 430cd5207b02ef92d2d5a75e1bdf9074 *tests/domain.R 62c918ff711bd24cfa3d860df5556513 *tests/domain.Rout.save 85b0201ab5b022cf0e51b6badfc5c07b *tests/fpc.R c07a7d679f7cae28c0a480ef7104b31d *tests/glm-scoping.R 397b5b5a7310a5b5271c8b7567f4df8c *tests/inf_cal_test.R 32174d2a986af7276bdb7daa62670c77 *tests/kalton.R 9b30594ac4527d0ece5bab043f6c06f1 *tests/kalton.Rout.save 4b9b3cff84916f06f5e07207d610778a *tests/logranktest.R 743a320cfe2c872e5a57aae7749b67ff *tests/lonely.psu.R a3074ecbddc3627ac12ea4cd9221f394 *tests/lonely.psu.Rout.save 8df4cf343bc8f2a5a0a2785c20d16403 *tests/mf_frames2.R 15db17943faea5661974fd5a8f2b6627 *tests/mf_subpop.R f1344d65b114f7183f2372f2aedd0ed7 *tests/mtcars-var.R 494c94c70eaca9cce93ac1296df5a949 *tests/multiphase_simple.R 5c3caf5fbda64e61d4819120e15fd595 *tests/multistage-rcpp.R 5c88d425cfb80a6b350763acff6c2b92 *tests/multistage.R 5acfa941d494a5c97288681e5406f7f1 *tests/na_action.R af45105f2417fafdfb2e0a5e8186b765 *tests/na_weights.R 6ce50050d55305eec749578f5f3a7c9f *tests/naa.rda 4a5af33260200b9e0b11e9bf4c50948a *tests/newquantile.R d82d7a650f7a3ed2b846c6280fab38b5 *tests/nwtco-subcohort.rda 9f37aa87c54f9e9585f6ed839da38a75 *tests/nwts-cch.R e7866681f0a2aa1487345e96e77fe49a *tests/nwts.R cb05b8e32623048b7c2a87c7bdb5b91d *tests/nwts.Rout.save f78a9ca2f7d82b635a9ac83c84f22721 *tests/nwts.rda 4cc42f37fa2cd358d0483f7e2e0b4b02 *tests/poisson.R 1f2c987cef798c0d6c8635a5be720c24 *tests/pps.R 9d1ce7849e391fcab9024abaf55a86b3 *tests/predict-NA.R 64f61874e7698cd196cde84f0e2670de *tests/qrule-swiss.R 8f57b338973720a043c3cc281a857337 *tests/quantile.R f16c0fe601c071e6ce51d25d14f6c5b1 *tests/quantile.Rout.save f80c37f905322aef5fa769353f0fac26 *tests/quantiles-chile.R aa97a5194f410fb5b736586f72b30edc *tests/rakecheck.R 797c1892321848bbe0a56d86cf82c471 *tests/rakecheck.Rout.save 23d3f3e5924ebac663762223b9073dc5 *tests/raowuboot.R 597d97f91f48834e3567ce60d55a56a3 *tests/raowuboot.Rout.save 462a7f4dfda5426594667867a7007edf *tests/regTermTest-missing.R 73d743b02cde34dea66b7a5a1e358a69 *tests/regpredict.R 17f986ce4a44a05026529890440f7e9e *tests/regpredict.Rout.save 5cec209951a03d5d5a81af1347ede8bd *tests/rss_scores.R 08e7b85dd0996a1afa68e8dfcb698a4d *tests/scoping.R f90e76f958a05de90d7df4f374193de2 *tests/sdata2.rda 1e41f32fae86cbcd05262014cf6b75be *tests/simdata1.RData ce54c4edad7a3b9fd9c8aa995473a794 *tests/survcurve.R 3cb8a60c150867bbd537a9c0a2493f6d *tests/survcurve.Rout.save 3abe6234111e6b1270315ca3e6b4c271 *tests/svyby-strings.R 62bec47e231e8cab763e4f93a59c4771 *tests/svyby_bug.R 9f446168f9169ccffbe532fac1b42f09 *tests/svyby_se.R f0fa0a734c2764df5ae5af21cefb7260 *tests/svycontrast.R 2692edc4b1204fef6a4d46f428a3128f *tests/svyivreg-var.R 4071d97f56b9bb4f4caaad8fa90bed37 *tests/svyivreg.R 607b2dd253517df1d1553668aabf09df *tests/svyolr-rake-subset.R e65670f0c8e89b395faea9f8b8542543 *tests/svyolr.R d7dd7af1a31559c31dcf6fbfa6c9f7f4 *tests/testSUMMER/SUMMER.R 6bfd2cf7e1f355399615485d29f1618e *tests/testoutput/DBIcheck.R 86298835a37161ff56ec400a23525520 *tests/testoutput/DBIcheck.Rout.save 30aa47b8b87de939651aa5c13ba75f20 *tests/testoutput/README 527e5ba782684ca6a459d09a52e4bb4b *tests/testoutput/api.R 3ad53ef34903baaea1aabc5d8f4cd0f9 *tests/testoutput/api.Rout.saved 02afc0b2619b18dbd3fd4c11f7afbac2 *tests/testoutput/bycovmat.R 0d4380b36115f8543b2476ddac923676 *tests/testoutput/bycovmat.Rout.save 7178e6025a01c697c3d122898e573698 *tests/testoutput/caleg.R f920f94f18bee3ea62772d8d7fc1abf3 *tests/testoutput/caleg.Rout.save 85b0201ab5b022cf0e51b6badfc5c07b *tests/testoutput/fpc.R a9f2ac6a2481cb8100a634703fe5c0d1 *tests/testoutput/fpc.Rout.save 5c88d425cfb80a6b350763acff6c2b92 *tests/testoutput/multistage.R 188777251024d61793ab0fb393cc175c *tests/testoutput/multistage.Rout.save d82d7a650f7a3ed2b846c6280fab38b5 *tests/testoutput/nwtco-subcohort.rda 9f37aa87c54f9e9585f6ed839da38a75 *tests/testoutput/nwts-cch.R 18298f29aee3995d9e480d5058a09ca1 *tests/testoutput/nwts-cch.Rout.save f78a9ca2f7d82b635a9ac83c84f22721 *tests/testoutput/nwts.rda 1f2c987cef798c0d6c8635a5be720c24 *tests/testoutput/pps.R 73e8268a284580d4d32ff928262a88c8 *tests/testoutput/pps.Rout.save 2eed0529f30f190d41b24eaf0b1baa0c *tests/testoutput/quantile-new.R 5d59b70021116564a5e36bd26bf60ebb *tests/testoutput/quantile-new.Rout.save 08e7b85dd0996a1afa68e8dfcb698a4d *tests/testoutput/scoping.R c21c1abba50dae13b4eb2d4738f20461 *tests/testoutput/scoping.Rout.save 2ccf7b2d17fda375372e1be8dd4f6f89 *tests/testthat.R 69c0fd3e70bb8db5bf8fab5f8ae71655 *tests/testthat/_snaps/bell_mccaffrey.md 836212b8fb9dfab967e5a269005989b3 *tests/testthat/test-bell_mccaffrey.R 8a8fb6f7b7bce8f707c7f69a29333631 *tests/testthat/test-svyciprop.R b4b8f63f5d0e2b82607e611cf285d3d7 *tests/toy_example_for_postStratify.R 1f37c63d5a85505ced4815f455bc8dff *tests/twophase.R 39a5a56907beb378e2c186a91e5ab3b5 *tests/twophase.Rout.save e549b9eba82a7a3db5543ec5be0b0bc6 *vignettes/domain.Rnw cf470caff322c36517ae4ac286e420ee *vignettes/epi.Rnw 0db7e1d82362863e32bdbecaf32119b8 *vignettes/multiphase.Rmd 45d31ccd0e3bcb193a3cbce5c89824e7 *vignettes/pps.Rnw 25a889bd922911a9a826973969ba4751 *vignettes/precalibrated.Rnw c32d6bb7b69fa9ba5f774af64d2f0ef6 *vignettes/qrule.Rnw 8ac4685d564face34be1fcff1f53b60b *vignettes/survey-sae.html.asis dfdd268e5e85cdb9422e11b2c183aa79 *vignettes/survey.Rnw survey/THANKS0000644000176200001440000000617315143217047012535 0ustar liggesusersThe survey package has benefited from code, bug reports, and feature requests from users, including: Justin Allen Daniel Almirall Guiseppe Antonaci Vincent Arel-Bundock Pedro Luis Baldoni Joel Barnes Robert Baskin Asia Bento Maciej Beręsewicz Brad Biggerstaff Milan Bouchet-Valat Adrienne Bradford Norman Breslow Arthur Burke Zeb Burke-Conte Ron Burns Trent Buskirk Stefano Calza Shelby Chartkoff Henry Chiem David Collins Anthony Damico Wade Davis Qiaolan Deng Neil Diamond Michael Donohue Rex Dwyer Melanie Edwards Adam Elder Hannah Evans Francisco Fabuel Boris Fazio Bob Fay Daniel Fernandes Greg Freedman Ben French Jacques Ferrez Natalie Gallagher Daniella Gollinelli Barry Graubard Alistair Gray James Greiner Zachary Grinspan Brian Guay Alois Haslinger Kieran Healy Lucia Hindorff Jeffery Hughes Beat Hulliger Steven Johnston David Eduardo Jorquera Petersen Lauren Kennedy Ehsan Kharim Ward Kinkade Stas Kolenikov Franziska Kößler Scott Kostyshak Alex Kowarik Pavel Krivitsky Michael Laviolette Thomas Leeper Richard Li Thomas Loughlin Chandler McClellan Klaus Ignacio Lehmann Melendez David Molina Benmei Liu Sebastien Lucie Jean Paul Lucas Lisa McShane Ana Patricia Martins Tapan Mehta Isabelle Michaud Daryl Morris Joey Morris Kirill Mueller Durga Nagori Daniel Oehm Jean Opsomer Raymond Pan Gonzalo Perez Djalma Pessoa Molly Petersen Elizabeth Purdom Ana Quiterio Gillian Raab Christian Raschke Michael Reiss Brian Ripley Fred Rohde Steve Roberts Andrew Robinson Ángel Rodríguez Laso Mark Rosenstein Benjamin Schneider Dirk Schumacher Dan Simpson Pam Shaw Bryan Shepherd Keiran Shao Lee Sieswerda Phil Smith Matthew Soldner Corey Sparks Elena Stern Ingmar Sturm Terry Therneau Takahiro Tsuchiya Richard Valliant Tobias Verbeke Renzo Vettori Chris Webb David Wilson Justin Wishart Steve White Jasper Yang Zhiwen Yao Thomas Yokota Diego Zardetto Alan Zaslavsky Stephanie Zimmer Jing Zhang Yilin Zhang Tomasz Żółtak and from dicussions with Chris Wild and Alastair Scott. Some work on the package while I was on sabbatical was funded by Fondation Leducq through a grant to the LINAT collaboration and by the Marsden Fund through a grant to the University of Auckland. Much of the new methodology from 2009 to 2016 was supported by the Marsden Fund, in particular the developments of the Rao-Scott likelihood Patrick Aboyoun did the S-PLUS port of version 3.6-8 John Preston provided an example of the multistage rescaled bootstrap for testing. The svyolr() code and the likelihood-based confidence intervals are largely ripped from the MASS package of Venables & Ripley, and parts of the code for svycoxph() are modified from Therneau's survival package. The C++ code for variances was contributed by Ben Schneider The small-area estimation code calls the SUMMER package, and comes from Peter Gao, Jon Wakefield, and Richard Li. Daniel Oehm at the Australian Bureau of Statistics wrote some improvements for calibrate() survey/R/0000755000176200001440000000000015144471465012023 5ustar liggesuserssurvey/R/svycralpha.R0000644000176200001440000000057313403313510014305 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/gofchisq.R0000644000176200001440000000175513743701277013761 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/rsquared.R0000644000176200001440000000207213046201510013752 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/logrank.R0000644000176200001440000001647714424042503013605 0ustar liggesuserssvylogrank<-function(formula, design,rho=0,gamma=0,method=c("small","large","score"),...){ UseMethod("svylogrank",design) } print.svylogrank<-function(x,...){ m<-t(x) rownames(m)="" printCoefmat(m,has.Pvalue=TRUE,P.values=TRUE) invisible(NULL) } .logrank<-function(formula, design,rho=0,gamma=0){ nullformula<-update(formula,.~1) S<-svykm(nullformula,design,se=FALSE) epsilon<-min(diff(sort(unique(S$time))))/10 w<-approxfun(S$time+epsilon,S$surv^rho*(1-S$surv)^gamma,method="constant",rule=2) environment(formula)<-environment() coxmodel<-coxph(formula,data=model.frame(design), weights=weights(design,"sampling"),iter.max=0) x<-model.matrix(coxmodel) detail<-coxph.detail(coxmodel,riskmat=TRUE) dLambda<-detail$hazard E<-as.matrix(detail$means) N<-coxmodel$y[,"status"] times<-coxmodel$y[,"time"] Y<-t(outer(times, detail$time,">=")) # was t(detail$riskmat) but that doesn't do what is documented U<-matrix(nrow=nrow(x),ncol=ncol(x)) index<-match(times[N==1],detail$time) ZmEdN<- matrix(0,nrow=nrow(x),ncol=ncol(x)) ZmEdN[N==1,]<-x[N==1,,drop=FALSE]-E[index,] for(p in 1:ncol(x)){ ZmE <- outer(x[,p],E[,p], "-") ##people are rows, times are columns U[,p]<- ZmEdN[,p]*w(times)- rowSums(ZmE *t(w(detail$time)*dLambda*Y)) } means <- svytotal(U,design) zstat<-coef(means)/SE(means) chisqstat<-coef(means)%*%solve(vcov(means),coef(means)) rval<-list(cbind(score=coef(means),se=SE(means),z=coef(means)/SE(means),p= 2*pnorm(-abs(coef(means)/SE(means)))), c(Chisq=chisqstat,p=pchisq(chisqstat,df=ncol(x),lower.tail=FALSE))) class(rval)<-"svylogrank" rval } .biglogrank<-function(formula, design,rho=0,gamma=0){ nullformula<-update(formula,.~1) S<-svykm(nullformula,design,se=FALSE) epsilon<-min(diff(sort(unique(S$time))))/10 w<-approxfun(S$time+epsilon,S$surv^rho*(1-S$surv)^gamma,method="constant",rule=2) environment(formula)<-environment() coxmodel<-coxph(formula,data=model.frame(design), weights=weights(design,"sampling"),iter.max=0) x<-model.matrix(coxmodel) detail<-coxph.detail(coxmodel) dLambda<-detail$hazard E<-as.matrix(detail$means) N<-coxmodel$y[,"status"] times<-coxmodel$y[,"time"] U<-matrix(nrow=nrow(x),ncol=ncol(x)) index<-match(times[N==1],detail$time) ZmEdN<- matrix(0,nrow=nrow(x),ncol=ncol(x)) ZmEdN[N==1,]<-x[N==1,,drop=FALSE]-E[index,] for(p in 1:ncol(x)){ U[,p]<- ZmEdN[,p]*w(times) for (j in seq_along(detail$time)){ thistime<-detail$time[j] ZmE <- x[,p]-E[j,p] U[,p] <- U[,p] - w(thistime)*ZmE*dLambda[j]*(times>=thistime) } } means <- svytotal(U,design) zstat<-coef(means)/SE(means) chisqstat<-coef(means)%*%solve(vcov(means),coef(means)) rval<-list(data.frame(score=coef(means),se=SE(means),z=coef(means)/SE(means),p= 2*pnorm(-abs(coef(means)/SE(means)))), c(Chisq=chisqstat,p=pchisq(chisqstat,df=ncol(x),lower.tail=FALSE))) class(rval)<-"svylogrank" rval } svylogrank.survey.design2<-function(formula, design,rho=0,gamma=0, method=c("small","large","score"), ...){ method<-match.arg(method) if (method=="small") return(.logrank(formula,design, rho,gamma,...)) else if (method=="large") return(.biglogrank(formula,design,rho,gamma,...)) if (rho!=0 || gamma!=0){ return(expandlogrank(formula,design,rho,gamma,...)) } tms<-delete.response(terms(formula,specials="strata")) findstrat<-untangle.specials(tms,"strata") if(length(findstrat$terms)) tms<-tms[-findstrat$terms] mf<-model.frame(tms,model.frame(design)) if(length(mf)>1) stop("Only one grouping variable allowed") if(!is.factor(mf[[1]]) && length(unique(mf[[1]]))>2) stop("Grouping variable with more than 2 levels must be a factor") b<-coef(svycoxph(formula,design,iter=1)) v<-vcov(svycoxph(formula,design,iter=0)) x2<-sum(b*solve(v,b)) rval<-c(z=b/sqrt(diag(v)), Chisq=x2, p=pchisq(x2,length(b),lower.tail=FALSE)) class(rval)<-"svylogrank" rval } svylogrank.twophase<-svylogrank.survey.design2 svylogrank.twophase2<-svylogrank.survey.design2 svylogrank.DBIsvydesign<-function (formula, design, ...) { design$variables <- dropFactor(getvars(formula, design$db$connection, design$db$tablename, updates = design$updates, subset = design$subset), weights(design)) NextMethod("svylogrank", design) } svylogrank.svyrep.design<-function(formula, design,rho=0,gamma=0,method=c("small","large","score"), ...){ method<-match.arg(method) if (method=="small") return(.logrank(formula,design, rho,gamma,...)) else if (method=="large") return(.biglogrank(formula,design,rho,gamma,...)) if (rho!=0 || gamma!=0){ return(expandlogrank(formula,design,rho,gamma,...)) } tms<-delete.response(terms(formula,specials="strata")) findstrat<-untangle.specials(tms,"strata") if(length(findstrat$terms)) tms<-tms[-findstrat$terms] mf<-model.frame(tms,model.frame(design)) if(length(mf)>1) stop("Only one grouping variable allowed") if(!is.factor(mf[[1]]) && length(unique(mf[[1]]))>2) stop("Grouping variable with more than 2 levels must be a factor") rr<-withReplicates(design, function(w,df){ environment(formula)<-environment() coef(coxph(formula,data=df,weights=w+1e-8,iter=1)) }) b<-unclass(rr) attr(b,"var")<-NULL v<-attr(rr,"var") x2<-sum(b*solve(v,b)) rval<- c(z=b/sqrt(diag(as.matrix(v))), Chisq=x2, p=pchisq(x2,length(b),lower.tail=FALSE)) class(rval)<-"svylogrank" rval } expandlogrank<-function(formula, design, rho=0, gamma=0){ nullformula<-update(formula,.~1) S<-svykm(nullformula,design,se=FALSE) epsilon<-min(diff(sort(unique(S$time))))/10 w<-approxfun(S$time+epsilon,S$surv^rho*(1-S$surv)^gamma,method="constant",rule=2) environment(formula)<-environment() coxmodel<-coxph(formula,data=model.frame(design), weights=weights(design,"sampling"),iter.max=0) mf<-model.frame(design) detail<-coxph.detail(coxmodel) if(attr(coxmodel$y,"type")=="right"){ mf$.time<-coxmodel$y[,"time"] mf$.status<-coxmodel$y[,"status"] mfsplit <- survSplit(mf, cut=detail$time, end=".time", event=".status", start=".start", id=".id", episode=".episode") } else { mf$.start<-coxmodel$y[,"start"] mf$.time<-coxmodel$y[,"stop"] mf$.status<-coxmodel$y[,"status"] mfsplit <- survSplit(mf, cut=detail$time, end=".time", event=".status", start=".start", id=".id", episode=".episode") } formula[[2]]<-quote(Surv(.start,.time,.status)) mfsplit$.weights<-weights(design,"sampling")[match(mfsplit$.id, rownames(mf))]*w(mfsplit$.time) expdesign<-svydesign(ids=eval(design$call$id), strata=eval(design$call$strata), data=mfsplit, weights=~.weights) #svylogrank(formula,expdesign) tms<-delete.response(terms(formula,specials="strata")) findstrat<-untangle.specials(tms,"strata") if(length(findstrat$terms)) tms<-tms[-findstrat$terms] mf<-model.frame(tms,model.frame(expdesign)) if(length(mf)>1) stop("Only one grouping variable allowed") if(!is.factor(mf[[1]]) && length(unique(mf[[1]]))>2) stop("Grouping variable with more than 2 levels must be a factor") b<-coef(svycoxph(formula,expdesign,iter=1)) v<-vcov(svycoxph(formula,expdesign,iter=0)) x2<-sum(b*solve(v,b)) rval<-c(z=b/sqrt(diag(v)), Chisq=x2, p=pchisq(x2,length(b),lower.tail=FALSE)) class(rval)<-"svylogrank" rval } survey/R/svynls.R0000644000176200001440000001506614166647050013512 0ustar liggesusers## svynls svynls<-function(formula, design, start, weights=NULL, ...){ UseMethod("svynls", design) } var_power<-function(d, maxit=3){ ## this should use svytotal dispersion<-0 rval<-list( precision_weights=function(res,mu){ dispersion<<-sum((res^2)^d) /sum(abs(mu)^d) variance<-dispersion*abs(mu)^d 1/variance }, iterations=maxit, name=paste0("weights: variance =",signif(dispersion,3),"mu^",d) ) class(rval)<-"svynls_weights" rval } svynls.DBIsvydesign<-function(formula, design,start, weights=NULL, ...){ design$variables <- getvars(formula, design$db$connection, design$db$tablename, updates = design$updates, subset = design$subset) NextMethod("svynls", design) } utils::globalVariables(c(".survey.prob.weight", ".survey.repwt")) svynls.svyrep.design<-function(formula, design, start, weights=NULL, ..., return.replicates=FALSE){ has_vars<- intersect(all.vars(formula),colnames(design)) dat<-model.frame(design)[,has_vars] if (is.numeric(weights)) prior.weights<-weights else prior.weights<-rep(1, nrow(dat)) meanweight<-mean(weights(design, "sampling")) dat$.survey.prob.weight<-prior.weights*weights(design, "sampling")/meanweight if (inherits(weights, "svynls_weights")){ maxit<-weights$iterations } else { maxit<-0 } first<-nls(formula,dat, weights=.survey.prob.weight,start=start, ...) for(i in seq_len(maxit)){ prior.weights<-weights$precision_weights(fitted(first), resid(first)) dat$.survey.prob.weight<-prior.weights*weights(design, "sampling")/meanweight first<-nls(formula, dat, weights=.survey.prob.weight,start=start, ...) first$precision_weights<-prior.weights } theta<-coef(first) repwts<-weights(design,"analysis") thetas<-matrix(0, ncol=length(theta),nrow=ncol(repwts)) for(i in ncol(repwts)){ dat$.survey.repwt<-prior.weights*repwts[,i]/meanweight model<-nls(formula,dat, weights=.survey.repwt,start=theta, ...) thetas[i, ] <- coef(model) } rval<-list() rval$fit<-first v<-svrVar(thetas, design$scale, design$rscales, coef=theta) rval$naive.cov<-summary(first)$cov.unscaled rval$cov<-v rval$coef<-theta rval$design<-design rval$meanweight<-meanweight rval$call<-sys.call(-1) if (return.replicates) rval$replicates<-thetas class(rval)<-"svynls" rval } svynls.survey.design2<-function(formula, design, start, weights=NULL, ..., influence=FALSE){ has_vars<- intersect(all.vars(formula),colnames(design)) dat<-model.frame(design)[,has_vars] if (is.numeric(weights)) prior.weights<-weights else prior.weights<-rep(1, nrow(dat)) meanweight<-mean(weights(design, "sampling")) w<-prior.weights*weights(design, "sampling")/meanweight if (inherits(weights, "svynls_weights")){ maxit<-weights$iterations } else { maxit<-0 } dat$.survey.prob.weight<-w fit<-nls(formula, dat, weights=.survey.prob.weight,start=start, ...) for(i in seq_len(maxit)){ precwt<-weights$precision_weights(fitted(fit), resid(fit)) w<-precwt*weights(design, "sampling")/meanweight dat$.survey.prob.weight<-w fit<-nls(formula, dat, weights=.survey.prob.weight,start=start, ...) fit$precision_weights<-precwt } v0<-summary(fit)$cov.unscaled theta<-coef(fit) grads<-fit$m$gradient()/sqrt(w) ## nls scales by sqrt(weights) resids<-fit$m$resid() infl<-resids*grads%*%v0 v<-svyrecvar(infl*w, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) rval<-list() rval$fit<-fit rval$coef<-theta rval$cov<-v rval$naive.cov<-vcov(fit) rval$call<-sys.call(-1) rval$design<-design rval$meanweight<-meanweight if(influence) attr(rval,"inference")<-infl class(rval)<-"svynls" rval } .p.nls.convInfo<-function (x, digits, show. = getOption("show.nls.convergence", TRUE)) { if (!is.null(x$convInfo)) with(x$convInfo, { if (identical(x$call$algorithm, "port")) cat("\nAlgorithm \"port\", convergence message: ", stopMessage, "\n", sep = "") else { if (!isConv || show.) { cat("\nNumber of iterations", if (isConv) "to convergence:" else "till stop:", finIter, "\nAchieved convergence tolerance:", format(finTol, digits = digits)) cat("\n") } if (!isConv) { cat("Reason stopped:", stopMessage) cat("\n") } } }) invisible() } print.svynls<-function (x, digits = max(3L, getOption("digits") - 3L), ...) { cat("Nonlinear survey regression model\n") cat(" model: ", deparse(formula(x$fit)), "\n", sep = "") cat(" design: ") print(x$design) print(x$fit$m$getAllPars(), digits = digits, ...) cat(" ", "weighted ", "residual sum-of-squares: ", format(x$fit$m$deviance()*x$meanweight, digits = digits), "\n", sep = "") .p.nls.convInfo(x, digits = digits) invisible(x) } coef.svynls<-function(object,...) object$coef vcov.svynls<-function(object,...) object$cov summary.svynls <- function (object, correlation = FALSE, ...) { r <- as.vector(object$fit$m$resid()) w <- object$fit$weights n <- if (!is.null(w)) sum(w > 0) else length(r) param <- coef(object) pnames <- names(param) p <- length(param) rdf <- n - p resvar <- if (rdf <= 0) NaN else deviance(object$fit)/rdf se <-SE(object) tval <- param/se param <- cbind(param, se, tval, 2 * pt(abs(tval), rdf, lower.tail = FALSE)) dimnames(param) <- list(pnames, c("Estimate", "Std. Error", "t value", "Pr(>|t|)")) ans <- list(formula = formula(object$fit), residuals = r, sigma = sqrt(resvar), df = c(p, rdf), cov.unscaled = vcov(object)/sqrt(resvar), cov.scaled=vcov(object), call = object$call, convInfo = object$fit$convInfo, control = object$fit$control, na.action = object$fit$na.action, coefficients = param, parameters = param) if (correlation && rdf > 0) { ans$correlation <- cov2cor(vcov(object)) } class(ans) <- c("summary.svynls","summary.nls") ans } survey/R/smoothArea.R0000644000176200001440000001413714576372270014260 0ustar liggesuserssvysmoothArea <- function(formula, domain, design = NULL, adj.mat = NULL, X.domain = NULL, direct.est = NULL, domain.size = NULL, transform = c("identity", "logit", "log"), pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = .95, n.sample = 250, var.tol = 1e-10, return.samples = FALSE,...) { UseMethod("svysmoothArea",design) } svysmoothArea.default <- function(formula, domain, design = NULL, adj.mat = NULL, X.domain = NULL, direct.est = NULL, domain.size = NULL, transform = c("identity", "logit", "log"), pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = .95, n.sample = 250, var.tol = 1e-10, return.samples = FALSE,...) { stop("smoothArea is only available for survey.design objects") } svysmoothArea.survey.design <- function(formula, domain, design = NULL, adj.mat = NULL, X.domain = NULL, direct.est = NULL, domain.size = NULL, transform = c("identity", "logit", "log"), pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = .95, n.sample = 250, var.tol = 1e-10, return.samples = FALSE,...) { if (!requireNamespace("SUMMER", quietly = TRUE)) { stop( "Package \"SUMMER\" must be installed to use this function.", call. = FALSE ) } rval<-SUMMER::smoothArea(formula = formula, domain = domain, design = design, adj.mat = adj.mat, X.domain = X.domain, direct.est = direct.est, domain.size = domain.size, transform = transform, pc.u = pc.u, pc.alpha = pc.alpha, pc.u.phi = pc.u.phi, pc.alpha.phi = pc.alpha.phi, level = level, n.sample = n.sample, var.tol = var.tol, return.samples = return.samples) rval$call<-sys.call(-1) rval } ## print.svysae <- function(x, ...) { ## x_att <- attributes(x) ## # print out call ## cat("Call:\n") ## print(x$call) ## cat("\n") ## # print estimation methods ## cat("Methods used: ") ## cat(x_att$method.names, sep = ", ") ## cat("\n\n") ## # print transform, if used ## if (!is.null(x_att$transform)) { ## cat("Transform: ") ## cat(x_att$transform) ## cat("\n\n") ## } ## } summary.svysae <- function(object, ...) { x<-object x_att <- attributes(x) # print out call cat("Call:\n") print(x$call) cat("\n") # print estimation methods cat("Methods used: ") cat(x_att$method.names, sep = ", ") cat("\n\n") # print transform, if used if (!is.null(x_att$transform)) { cat("Transform: ") cat(x_att$transform) cat("\n\n") } # print estimates for (i in x_att$method.names) { cat(i, "\n") print(x[[i]]) cat("\n") } } ## plot.svysae <- function(x, return_list = F, ...) { ## combined_est <- do.call(rbind, x[attr(x, "method.names")]) ## # pull the first method (should be "direct.est") ## ref_method <- attr(x, "method.names")[1] ## n_methods <- length(attr(x, "method.names")) ## m <- nrow(x[[ref_method]]) ## sorted_levels <- x[[ref_method]]$domain[order(x[[ref_method]]$mean)] ## combined_est$domain <- factor(combined_est$domain, ## levels = sorted_levels) ## combined_est <- combined_est[order(combined_est$domain),] ## # split across multiple plots for many estimates ## if (m > 30) { ## plot_breaks <- c(seq(0, m, by = 30), m) ## plot_labels <- paste0( ## "Areas ", ## (seq_along(plot_breaks)[-1] - 2) * 30 + 1, ## " to ", ## pmin((seq_along(plot_breaks)[-1] - 1) * 30, m) ## ) ## combined_est$plot <- ## cut(1:m, breaks = plot_breaks, labels = plot_labels) ## } else { ## combined_est$plot <- 1 ## } ## plot_list <- split(combined_est, combined_est$plot) ## for (y in plot_list) { ## n_domains <- length(unique(y$domain)) ## plot_dat <- data.frame( ## domain = y$domain, ## xval = match(y$domain, unique(y$domain)), ## est = y$median, ## lower = y$lower, ## upper = y$upper, ## method = as.factor(y$method) ## ) ## plot_dat$xval <- plot_dat$xval + (as.numeric(plot_dat$method) - 1) * ## .2 - (.2 * (n_methods - 1) / 2) ## par(mar = c(9, 5, 4, 3)) ## plot(est ~ xval, data = plot_dat, xaxt = "n", xlab = "", pch = 16, ## col = (2:(n_methods + 1))[plot_dat$method], cex = .5, ## ylim = c(min(plot_dat$lower), max(plot_dat$upper)), ## ylab = "Estimate", ## cex.axis = .75) ## segments(plot_dat$xval, plot_dat$lower, plot_dat$xval, plot_dat$upper, ## col = (2:(n_methods + 1))[plot_dat$method], cex = .5) ## axis(1, at = 1:n_domains, labels = unique(as.character(y$domain)), las = 2, ## cex.axis = .65) ## legend("topleft", inset = .01, legend = levels(plot_dat$method), ## col=(2:(n_methods + 1)), lty=1, cex=0.8, box.lty=0) ## } ## } survey/R/greg.R0000644000176200001440000002140414074165701013065 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/margins.R0000644000176200001440000001434214166647050013610 0ustar liggesusers marginpred<-function(model, adjustfor, predictat, ...) UseMethod("marginpred", model) ## ## Basic strategy: calibrate on ~model*adjustfor, to set interactions to zero ## marginpred.svycoxph<-function(model, adjustfor, predictat, se=FALSE, ...){ if(NROW(predictat)==0) return(NULL) design<-model$survey.design ##if (inherits(design,"twophase")) stop("Two-phase designs not yet supported") if (!is.null(model$na.action)) design<-design[-model$na.action,] modelformula<-formula(model) calformula<-eval(bquote( ~(.(modelformula[[3]]))*(.(adjustfor)))) adjmf<-model.frame(terms(adjustfor), model.frame(design)) adjmm<-model.matrix(terms(adjustfor), adjmf) modelmm<-model.matrix(model) modelmm <- sweep(modelmm,2,model$means) if (qr(modelmm)$rank1){ N<-ncol(ids) for(i in 2:N){ ids[,i]<-do.call("interaction", ids[,1:i,drop=FALSE]) } } ## force clusters nested in strata if (nest && has.strata && NCOL(ids)){ N<-NCOL(ids) NS<-NCOL(strata) for(i in 1:N) ids[,i]<-do.call("interaction", c(strata[,1:min(i,NS),drop=FALSE], ids[,i,drop=FALSE])) } ## check if clusters nested in strata if (check.strata && nest) warning("No point in check.strata=TRUE if nest=TRUE") if(check.strata && !is.null(strata) && NCOL(ids)){ sc<-(rowSums(table(ids[,1],strata[,1])>0)) if(any(sc>1)) stop("Clusters not nested in strata at top level; you may want nest=TRUE.") } ## force substrata nested in clusters N<-ncol(ids) NS<-ncol(strata) if (N>1){ for(i in 2:N) strata[,i]<-interaction(strata[,min(i,NS)], ids[,i-1]) } ## PPS: valid choices currently are FALSE and "brewer" if (is.logical(pps) && pps) stop("'pps' must be FALSE or a character string") if (is.character(pps)) { pps<-TRUE } ## Finite population correction: specified per observation ## Also incorporates design sample sizes formerly in nPSU if (!is.null(fpc) && !is.numeric(fpc) && !is.data.frame(fpc)) stop("fpc must be a matrix or dataframe or NULL") fpc<-as.fpc(fpc,strata, ids, pps=pps) ## if FPC specified, but no weights, use it for weights if (is.null(probs) && is.null(weights)){ if (is.null(fpc$popsize)){ if (missing(probs) && missing(weights)) warning("No weights or probabilities supplied, assuming equal probability") probs<-rep(1,nrow(ids)) } else { probs<-1/weights(fpc, final=FALSE) } } if (NROW(probs)==1 && NCOL(probs)==1 && is.numeric(probs[[1]])) probs<-rep(probs[[1]], NROW(variables)) if (length(probs)==0) probs<-rep(1,NROW(variables)) if (NCOL(probs)==1) probs<-data.frame(probs) if (NROW(probs)!=NROW(ids)) stop("lengths of prob/weights and ids don't match") rval<-list(cluster=ids) rval$strata<-strata rval$has.strata<-has.strata rval$prob<- apply(probs,1,prod) rval$allprob<-probs rval$call<-match.call() rval$variables<-variables rval$fpc<-fpc rval$call<-sys.call(-1) rval$pps<-pps class(rval)<-c("survey.design2","survey.design") if (!is.null(calibrate.formula)){ rval<-recalibrate(rval, calibrate.formula) rval$call<-sys.call(-1) } rval } onestrat<-function(x,cluster,nPSU,fpc, lonely.psu,stratum=NULL,stage=1,cal=cal){ stratum_center <- attr(x, "recentering") if (is.null(stratum_center)) stratum_center <- 0 if (is.null(fpc)) f<-rep(1,NROW(x)) else{ f<-ifelse(fpc==Inf, 1, (fpc-nPSU)/fpc) } if (nPSU>1) scale<-f*nPSU/(nPSU-1) else scale<-f if (all(f<0.0000001))## self-representing stratum return(matrix(0,NCOL(x),NCOL(x))) scale<-scale[!duplicated(cluster)] x<-rowsum(x,cluster) nsubset<-nrow(x) if (nsubset1 || (nPSU>1 & !getOption("survey.adjust.domain.lonely"))) { stratum_center <- colMeans(x) } x<-sweep(x=x, MARGIN=2, STATS=stratum_center, FUN="-") if (nsubset==1 && nPSU>1 && getOption("survey.adjust.domain.lonely")){ warning("Stratum (",stratum,") has only one PSU at stage ",stage) if (lonely.psu=="average" && getOption("survey.adjust.domain.lonely")) scale<-NA } if (nPSU>1){ return(crossprod(x*sqrt(scale))) } else { rval<-switch(lonely.psu, certainty=crossprod(x*sqrt(scale)), remove=crossprod(x*sqrt(scale)), adjust=crossprod(x*sqrt(scale)), average=NA*crossprod(x), fail= stop("Stratum (",stratum,") has only one PSU at stage ",stage), stop("Can't handle lonely.psu=",lonely.psu) ) rval } } onestage<-function(x, strata, clusters, nPSU, fpc, lonely.psu=getOption("survey.lonely.psu"),stage=0, cal){ if (NROW(x)==0) return(matrix(0,NCOL(x),NCOL(x))) ## For the 'adjust' option for lonely PSUs, ## recenter around mean from all PSUs in all strata if (!is.null(lonely.psu) && lonely.psu == "adjust") { n_PSUs_from_all_strata <- sum(tapply(X = nPSU, INDEX = as.numeric(strata), FUN = head, 1)) recentering <- colSums(x) / n_PSUs_from_all_strata } else { recentering <- 0 } stratvars<- tapply(1:NROW(x), list(factor(strata)), function(index){ onestrat(x[index,,drop=FALSE] |> `attr<-`('recentering', recentering), clusters[index], nPSU[index][1], fpc[index], ##changed from fpc[index][1], to allow pps(brewer) lonely.psu=lonely.psu,stratum=strata[index][1], stage=stage,cal=cal) }) p<-NCOL(x) nstrat<-length(unique(strata)) nokstrat<-sum(sapply(stratvars,function(m) !any(is.na(m)))) apply(array(unlist(stratvars),c(p,p,length(stratvars))),1:2,sum,na.rm=TRUE)*nstrat/nokstrat } svyrecvar<-function(x, clusters, stratas, fpcs, postStrata=NULL, lonely.psu=getOption("survey.lonely.psu"), one.stage=getOption("survey.ultimate.cluster")){ x<-as.matrix(x) cal<-NULL if(isFALSE(fpcs$pps)) use_rcpp<-getOption("survey.use_rcpp") else use_rcpp<-FALSE ## Brewer's method, doesn't work with the current rcpp version ## Remove post-stratum means, which may cut across clusters ## Also center the data using any "g-calibration" models if(!is.null(postStrata)){ for (psvar in postStrata){ if (inherits(psvar, "greg_calibration")) { if (psvar$stage==0){ ## G-calibration at population level x<-as.matrix(qr.resid(psvar$qr,x/psvar$w)*psvar$w) } else { ## G-calibration within clusters cal<-c(cal, list(psvar)) use_rcpp<-FALSE } } else if (inherits(psvar, "raking")){ ## raking by iterative proportional fitting for(iterations in 1:10){ for(margin in psvar){ psw<-attr(margin, "weights") x<- x - psw*apply(x/psw, 2, ave, margin) } } } else { ## ordinary post-stratification psw<-attr(psvar, "weights") oldw<-attr(psvar, "oldweights") if (is.null(oldw)) oldw<-rep(1,length(psw)) zeroes<-which(psw==0 & oldw==0) if (length(zeroes)) psw[zeroes]=1 psvar<-as.factor(psvar) psmeans<-rowsum(x*oldw/psw,psvar,reorder=TRUE)/as.vector(by(oldw,psvar,sum)) x<- x-psmeans[match(psvar,sort(unique(psvar))),]*psw } } } if (use_rcpp) { multistage_rcpp(x, clusters,stratas,fpcs$sampsize, fpcs$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage,stage=1,cal=cal) } else { multistage(x, clusters,stratas,fpcs$sampsize, fpcs$popsize, lonely.psu=getOption("survey.lonely.psu"), one.stage=one.stage,stage=1,cal=cal) } } multistage<-function(x, clusters, stratas, nPSUs, fpcs, lonely.psu=getOption("survey.lonely.psu"), one.stage=FALSE,stage,cal){ n<-NROW(x) v <- onestage(x,stratas[,1], clusters[,1], nPSUs[,1], fpcs[,1], lonely.psu=lonely.psu,stage=stage,cal=cal) if (one.stage!=TRUE && !is.null(fpcs) && NCOL(clusters)>1) { v.sub<-by(1:n, list(as.numeric(clusters[,1])), function(index){ ## residuals for G-calibration using population information ## only on clusters at this stage. for(cali in cal){ if (cali$stage != stage) next j<-match(clusters[index,1],cali$index) if (length(unique(j))!=1) stop("Internal problem in g-calibration data: stage",stage, ", cluster", j) j<-j[[1]] x[index,]<-as.matrix(qr.resid(cali$qr[[j]], x[index,,drop=FALSE]/cali$w[[j]])*cali$w[[j]]) } multistage(x[index,,drop=FALSE], clusters[index,-1,drop=FALSE], stratas[index,-1,drop=FALSE], nPSUs[index,-1,drop=FALSE], fpcs[index,-1,drop=FALSE], lonely.psu=lonely.psu,one.stage=one.stage-1, stage=stage+1,cal=cal)*nPSUs[index[1],1]/fpcs[index[1],1] }) for(i in 1:length(v.sub)) v<-v+v.sub[[i]] } dimnames(v)<-list(colnames(x),colnames(x)) v } ## Ben Schneider's code to use C++. Should *agree* with multistage() except ## for one known bug in lonely.psu ## multistage_rcpp <- function(x, clusters, stratas, nPSUs, fpcs, lonely.psu=getOption("survey.lonely.psu"), one.stage=FALSE, stage, cal){ lonely.psu <- switch(lonely.psu, certainty = 'certainty', remove = 'remove', adjust = 'adjust', average = 'average', fail = 'fail', stop("Can't handle lonely.psu=",lonely.psu) ) use_singleton_method_for_domains <- isTRUE(getOption("survey.adjust.domain.lonely")) # Prepare the inputs to pass to Rcpp function if (is.data.frame(clusters)) { for (j in seq_len(ncol(clusters))) { if (!is.numeric(clusters[[j]])) clusters[[j]] <- as.numeric(as.factor(clusters[[j]])) } } clusters <- as.matrix(clusters) if (is.data.frame(stratas)) { for (j in seq_len(ncol(stratas))) { if (!is.numeric(stratas[[j]])) stratas[[j]] <- as.numeric(as.factor(stratas[[j]])) } } stratas <- as.matrix(stratas) if (is.null(fpcs)) { strata_pop_sizes <- matrix(Inf, nrow = nrow(nPSUs), ncol = ncol(nPSUs)) } else { strata_pop_sizes <- as.matrix(fpcs) } strata_samp_sizes <- as.matrix(nPSUs) # Call the Rcpp function v <- arma_multistage(Y = as.matrix(x), samp_unit_ids = clusters, strata_ids = stratas, strata_samp_sizes = strata_samp_sizes, strata_pop_sizes = strata_pop_sizes, singleton_method = lonely.psu, use_singleton_method_for_domains = getOption("survey.adjust.domain.lonely"), use_only_first_stage = one.stage, stage = stage) dimnames(v) <- list(colnames(x),colnames(x)) v } ## fpc not given are zero: full sampling. as.fpc<-function(df,strata,ids,pps=FALSE){ count<-function(x) sum(!duplicated(x)) sampsize<-matrix(ncol=ncol(ids),nrow=nrow(ids)) for(i in 1:ncol(ids)) split(sampsize[,i],strata[,i])<-lapply(split(ids[,i],strata[,i]),count) if (is.null(df)){ ## No fpc rval<-list(popsize=NULL, sampsize=sampsize) class(rval)="survey_fpc" return(rval) } fpc<-as.matrix(df) if (xor(ispopsize<-any(df>1), all(df>=1))){ big<-which(fpc>=1,arr.ind=TRUE) small<-which(fpc<1,arr.ind=TRUE) cat("record",big[1,1]," stage",big[1,2],": fpc=", fpc[big[1,,drop=FALSE]],"\n") cat("record",small[1,1]," stage ",small[1,2],": fpc=", fpc[small[1,,drop=FALSE]],"\n") stop("Must have all fpc>=1 or all fpc<=1") } if (NCOL(sampsize)NCOL(fpc)) { tmp<-fpc if (ispopsize) fpc<-matrix(Inf, nrow=NROW(sampsize), ncol=NCOL(sampsize)) else fpc<-matrix(0, nrow=NROW(sampsize), ncol=NCOL(sampsize)) fpc[,1:NCOL(tmp)]<-tmp warning("stages without fpc were treated as with replacement") } if (ispopsize){ if(pps) stop("fpc must be specified as sampling fraction for PPS sampling") popsize<-fpc } else { popsize<-sampsize/(fpc) } if (any(popsize100% sampling in some strata") } if (!ispopsize && any(is.finite(popsize) & (popsize>1e10))){ big<-which(popsize>1e10 & is.finite(popsize),arr.ind=TRUE) warning("FPC implies population larger than ten billion (record",big[1,1]," stage ",big[1,2],")") } if(!pps){ ## check that fpc is constant within strata. for(i in 1:ncol(popsize)){ diff<-by(popsize[,i], list(strata[,i]), count) if (any(as.vector(diff)>1)){ j<-which(as.vector(diff)>1)[1] warning("`fpc' varies within strata: stratum ",names(diff)[j], " at stage ",i) } } } else{ ## check that fpc is constant with clusters diff<-by(popsize[,i], list(ids[,i]), count) if (any(as.vector(diff)>1)){ j<-which(as.vector(diff)>1)[1] warning("`fpc' varies within cluster: cluster ",names(diff)[j], " at stage ",i) } } rval<-list(popsize=popsize, sampsize=sampsize,pps=pps) class(rval)<-"survey_fpc" rval } "weights.survey_fpc"<-function(object,final=TRUE,...){ if (is.null(object$popsize) || any(object$popsize>1e12)) stop("Weights not supplied and can't be computed from fpc.") if (final) { pop<-apply(object$popsize,1,prod) samp<-apply(object$sampsize,1,prod) pop/samp } else { object$popsize/object$sampsize } } print.survey.design2<-function(x,varnames=FALSE,design.summaries=FALSE,...){ n<-NROW(x$cluster) if (x$has.strata) cat("Stratified ") un<-length(unique(x$cluster[,1])) if(n==un){ cat("Independent Sampling design") is.independent<-TRUE if (is.null(x$fpc$popsize)) cat(" (with replacement)\n") else cat("\n") } else { cat(NCOL(x$cluster),"- level Cluster Sampling design") if (is.null(x$fpc$popsize)) cat(" (with replacement)\n") else cat("\n") nn<-lapply(x$cluster,function(i) length(unique(i))) cat(paste("With (",paste(unlist(nn),collapse=", "),") clusters.\n",sep="")) is.independent<-FALSE } print(x$call) if (design.summaries){ cat("Probabilities:\n") print(summary(x$prob)) if(x$has.strata){ if (NCOL(x$cluster)>1) cat("First-level ") cat("Stratum Sizes: \n") oo<-order(unique(x$strata[,1])) a<-rbind(obs=table(x$strata[,1]), design.PSU=x$fpc$sampsize[!duplicated(x$strata[,1]),1][oo], actual.PSU=table(x$strata[!duplicated(x$cluster[,1]),1])) print(a) } if (!is.null(x$fpc$popsize)){ if (x$has.strata) { cat("Population stratum sizes (PSUs): \n") s<-!duplicated(x$strata[,1]) a<-x$fpc$popsize[s,1] names(a)<-x$strata[s,1] a<-a[order(names(a))] print(a) } else { cat("Population size (PSUs):",x$fpc$popsize[1,1],"\n") } } } if (varnames){ cat("Data variables:\n") print(colnames(x)) } invisible(x) } summary.survey.design2<-function(object,...){ class(object)<-c("summary.survey.design2",class(object)) object } print.summary.survey.design2<-function(x,...){ y<-x class(y)<-c("survey.design2",class(x)) print(y,varnames=TRUE,design.summaries=TRUE,...) } .svycheck<-function(object){ if (inherits(object,"survey.design") && !is.null(object$nPSU)) warning("This is an old-style design object. Please use as.svydesign2 to update it.") } as.svydesign2<-function(object){ if (inherits(object,"survey.design2")) return(object) if (!inherits(object,"survey.design")) stop("This function is for updating old-style survey.design objects") count<-function(x) length(unique(x)) strata<-data.frame(one=object$strata) if ((nc<-ncol(object$cluster))>1){ for(i in 2:nc){ strata<-cbind(strata,object$cluster[,i-1]) } } sampsize<-matrix(ncol=nc,nrow=nrow(object$cluster)) sampsize[,1]<-object$nPSU[match(object$strata, names(object$nPSU))] if (nc>1){ for(i in 2:nc){ split(sampsize[,i],strata[,i])<-lapply(split(object$cluster[,i],strata[,i]),count) } } if (!is.null(object$fpc)){ popsize<-sampsize popsize[,1]<-object$fpc$N[match(object$strata,object$fpc$strata)] } else popsize<-NULL if (nc>1 && !is.null(object$fpc)){ warning("Assuming complete sampling at stages 2 -",nc) } fpc<-list(popsize=popsize,sampsize=sampsize) class(fpc)<-"survey_fpc" object$fpc<-fpc object$strata<-strata object$nPSU<-NULL class(object)<-c("survey.design2","survey.design") object } is.pps<-function(x) if(is.null(x$pps)) FALSE else (x$pps!=FALSE) "[.survey.design2"<-function (x,i, ..., drop=TRUE){ if (!missing(i)){ if (is.calibrated(x) || is.pps(x) || !drop){ ## Set weights to zero: no memory saving possible ## There should be an easier way to complement a subscript.. if (is.logical(i)) x$prob[!i]<-Inf else if (is.numeric(i) && length(i)) x$prob[-i]<-Inf else { tmp<-x$prob[i,] x$prob<-rep(Inf, length(x$prob)) x$prob[i,]<-tmp } index<-is.finite(x$prob) psu<-!duplicated(x$cluster[index,1]) tt<-table(x$strata[index,1][psu]) if(any(tt==1) && getOption("survey.adjust.domain.lonely")){ warning(sum(tt==1)," strata have only one PSU in this subset.") } } else { ## subset everything. if (!is.null(x$variables)) ## phase 2 of twophase design x$variables<-"[.data.frame"(x$variables,i,..1,drop=FALSE) x$cluster<-x$cluster[i,,drop=FALSE] x$prob<-x$prob[i] x$allprob<-x$allprob[i,,drop=FALSE] x$strata<-x$strata[i,,drop=FALSE] x$fpc$sampsize<-x$fpc$sampsize[i,,drop=FALSE] x$fpc$popsize<-x$fpc$popsize[i,,drop=FALSE] } } else { if(!is.null(x$variables)) x$variables<-x$variables[,..1,drop=FALSE] } x } svytotal.survey.design2<-function(x,design, na.rm=FALSE, deff=FALSE,influence=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else{ if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if (length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } N<-sum(1/design$prob) total <- colSums(x/as.vector(design$prob),na.rm=na.rm) class(total)<-"svystat" attr(total, "var")<-v<-svyrecvar(x/design$prob,design$cluster, design$strata, design$fpc, postStrata=design$postStrata) attr(total,"statistic")<-"total" if (influence){ if (na.rm && (length(nas)>length(design$prob))) { infl<-matrix(0,ncol=NCOL(x),nrow=length(nas)) infl[nas==0,]<-x/design$prob attr(total, "influence")<-infl } else { attr(total, "influence")<-x/design$prob } } if (is.character(deff) || deff){ nobs<-sum(weights(design)!=0) if (deff=="replace") vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2/nobs else vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2*(N-nobs)/(N*nobs) attr(total, "deff")<-v/vsrs } return(total) } svymean.survey.design2<-function(x,design, na.rm=FALSE,deff=FALSE,influence=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if (length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } pweights<-1/design$prob psum<-sum(pweights) average<-colSums(x*pweights/psum) x<-sweep(x,2,average) v<-svyrecvar(x*pweights/psum,design$cluster,design$strata, design$fpc, postStrata=design$postStrata) attr(average,"var")<-v attr(average,"statistic")<-"mean" if (influence){ if (na.rm && (length(nas)>length(pweights))) { infl<-matrix(0,ncol=NCOL(x),nrow=length(nas)) infl[nas==0,]<-x*pweights/psum } else { infl<-x*pweights/psum } attr(average,"influence") <- infl } class(average)<-"svystat" if (is.character(deff) || deff){ nobs<-sum(weights(design)!=0) if(deff=="replace"){ vsrs<-svyvar(x,design,na.rm=na.rm)/(nobs) } else { if(psumlength(design$prob))) { infl<-matrix(0,ncol=NCOL(r),nrow=length(nas)) infl[nas==0,]<-r/design$prob } else { infl<-r/design$prob } attr(rval,"influence") <- infl } class(rval)<-"svyratio" rval } survey/R/svyivreg.R0000644000176200001440000000340514221463056014016 0ustar liggesusers svyivreg<-function(formula, design, ...) UseMethod("svyivreg",design) svyivreg.survey.design<-function(formula, design,...){ .data<-model.frame(design) .data$.weights<-weights(design,"sampling") .weights<-NULL ## make CMD check happy ##estfun<-get("estfun",mode="function") model<- AER::ivreg(formula, data=.data, weights=.weights) U<-estfun.ivreg(model)/weights(design,"sampling") n<-NROW(U) infl<- U%*%model$cov.unscaled v<-vcov(svytotal(infl, design)) model$invinf<-model$cov.unscaled model$cov.unscaled<-v model$df.residual<-degf(design)+1-length(coef(model)) model$sigma<-model$sigma/sqrt(mean(weights(design,"sampling"))) model$call<-sys.call(-1) class(model)<-c("svyivreg","ivreg") model } summary.svyivreg<-function(object, df = NULL, ...){ V<-vcov(object) class(object)<-"ivreg" summary(object, vcov.=V, df=df, diagnostics=FALSE,...) } vcov.svyivreg<-function(object,...) object$cov.unscaled svyivreg.svyrep.design<-function(formula, design,return.replicates=FALSE,...){ .pweights<-NULL ## make CMD check happy withReplicates(design, return.replicates=return.replicates, function(.weights, .data){ .data$.pweights<-.weights m<-AER::ivreg(formula,data= .data, weights=.pweights) coef(m) }) } estfun.ivreg<-function (x, ...) { xmat <- model.matrix(x) if (any(alias <- is.na(coef(x)))) xmat <- xmat[, !alias, drop = FALSE] wts <- weights(x) if (is.null(wts)) wts <- 1 res <- residuals(x) rval <- as.vector(res) * wts * xmat attr(rval, "assign") <- NULL attr(rval, "contrasts") <- NULL return(rval) } survey/R/RcppExports.R0000644000176200001440000000152314462576160014440 0ustar liggesusers# Generated by using Rcpp::compileAttributes() -> do not edit by hand # Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 arma_onestage <- function(Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, stage) { .Call('_survey_arma_onestage', PACKAGE = 'survey', Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, stage) } arma_multistage <- function(Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, use_only_first_stage, stage) { .Call('_survey_arma_multistage', PACKAGE = 'survey', Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, use_only_first_stage, stage) } survey/R/xdesign.R0000644000176200001440000001267314166647050013616 0ustar liggesusers xdesign<-function(id=NULL, strata=NULL, weights=NULL, data, fpc=NULL, adjacency=NULL, overlap=c("unbiased","positive"), allow.non.binary=FALSE){ overlap<-match.arg(overlap) if(is.null(id) && (overlap=="positive")) stop("overlap='positive' is not available for an adjacency matrix") if(is.null(id) && (!is.null(fpc))) stop("fpc is not available for an adjacency matrix") if (!is.null(fpc)) stop("fpc not implemented") if (!is.null(strata)) stop("strata not implemented") if(is.null(adjacency)){ adjacency<-make_adjacency(id, data, overlap=overlap) } else if (!allow.non.binary && !is.binary(adjacency)) stop("adjacency matrix is not binary") xdesign_adjacency(id,strata=strata, weights=weights, data=data, adjacency=adjacency) } is.binary<-function(object) { if (is.matrix(object)){ all(object %in% c(0,1)) } else if (inherits(object, "lMatrix") || inherits(object,"nMatrix")){ TRUE } else{ all(object@x %in% c(0,1)) } } make_one_adjacency<-function(id, data){ id<-update(id,~.-1) mf<-model.frame(id,data,na.action=na.fail) if(!is.factor(mf[[1]]) & !is.character(mf[[1]])) mf[[1]]<-factor(mf[[1]]) i<-sparse.model.matrix(id, mf) tcrossprod(as(i,"nMatrix")) } make_adjacency<-function(ids, data, overlap){ if (length(ids)==1) warning("only one clustering dimension?") idmats<-lapply(ids, make_one_adjacency, data=data) switch(overlap, unbiased= Reduce("|", idmats), positive= Reduce("+", idmats) ) } xdesign_adjacency<-function(id, strata=NULL, weights=NULL, data, adjacency){ if (!is.null(strata)) stop("'strata' not available for an adjacency matrix") if (is.list(id)) id1<-id[[1]] else id1<-id wdesign<-svydesign(ids=id1, weights=weights, strata=strata, data=data) if(!is.matrix(adjacency) && !inherits(adjacency,"Matrix")) stop("'adjacency' must be a matrix or Matrix") if(!is.binary(adjacency)) stop("'adjacency' values must be 0 or 1") rval<-list(id=id, design=wdesign, adjacency=adjacency, call=sys.call(-1)) class(rval)<-c("xdesign_adjacency","xdesign") rval } ## Generic to allow for replicates or two-phase in the future svyxvar<-function(design,infl,...) UseMethod("svyxvar",design) svyxvar.xdesign<-function(design, infl,...){ adjacency<-design$adjacency infl<-as.matrix(infl) p<-NCOL(infl) varmat<-crossprod(infl,adjacency%*%infl)/(1-mean(adjacency)) varmat<-as.matrix(varmat) dimnames(varmat)<-list(colnames(infl),colnames(infl)) varmat } tr<-function(mat) sum(diag(mat)) tr2<-function(mat) sum(mat) ## FIXME: bias correction doesn't quite agree with svymean. Modify? degf.xdesign<-function(design,...){ tr(design$adjacency)^2/tr2(design$adjacency) } svymean.xdesign<-function(x, design, na.rm=FALSE, influence=TRUE,...){ if (!influence) stop('xdesign objects require influence=TRUE') rval<-svymean(x, design$design, na.rm=na.rm, influence=TRUE,...) varmat<-svyxvar(design, attr(rval,"influence")) attr(rval,"var")<-varmat rval } svytotal.xdesign<-function(x, design, na.rm=FALSE, influence=TRUE,...){ if (!influence) stop('xdesign objects require influence=TRUE') rval<-svytotal(x, design$design, na.rm=na.rm, influence=TRUE,...) varmat<-svyxvar(design, attr(rval,"influence")) attr(rval,"var")<-varmat rval } svyglm.xdesign<-function (formula, design, subset = NULL, family = stats::gaussian(), start = NULL, influence=TRUE,...) { if (!influence) stop('xdesign objects require influence=TRUE') rval<-svyglm(formula, design$design, subset=subset, family=family, start=start, influence=TRUE,...) varmat<-svyxvar(design, attr(rval,"influence")) rval$cov.unscaled<-varmat rval$df.residual<- rval$df.residual + degf(design)-degf(design$design) rval } update.xdesign<-function(object,...){ object$design<-update(object$design,...) object$call <- sys.call(-1) object } transform.xdesign<-function(`_data`,...){ object$design<-update(object$design,...) object$call <- sys.call(-1) object } print.xdesign<- function (x, varnames = FALSE, ...) { if(is.null(x$id)){ cat(paste0("Sparse correlated design with ",degf(x)," df:\n")) } else { k<-length(x$id) cat(paste0(k,"-way crossed design:\n")) } print(x$call) if (varnames) { cat("Data variables:\n") print(names(x$variables)) } invisible(x) } ## subset, svyby ## should subsetting preserve design like for surveys? Probably not. "[.xdesign"<-function(x,i,...){ x$design<-x$design[i,...] x$call <- sys.call(-1) if (!missing(i)) x$adjacency<-x$adjacency[i,i] x } subset.xdesign<-function(x, subset,...) { e <- substitute(subset) r <- eval(e, x$design$variables, parent.frame()) r <- r & !is.na(r) x <- x[r, ] x$call <- sys.call(-1) x } dim.xdesign<-function(x,...) dim(x$design) dimnames.xdesign<-function(x,...) dimnames(x$design) svyby.xdesign<-function(formula, by, design, ..., influence=TRUE){ if (!influence) stop("xdesign objects need influence=TRUE") rval<-svyby(formula, by, design$design,...,influence=TRUE) varmat<-svyxvar(design, attr(rval,"influence")) attr(rval,"var")<-varmat rval$se<-sqrt(diag(varmat)) rval$call<-sys.call(-1) rval } survey/R/dAIC.R0000644000176200001440000000702115131542261012673 0ustar liggesusers logLik.svyglm<-function(object,...){ warning("svyglm not fitted by maximum likelihood.") object$deviance/-2 } AIC.svyglm<-function(object,...,k=2,null_has_intercept=TRUE){ if (length(list(...))){ do.call(rbind,lapply(list(object,...),extractAIC,k=k,null_has_intercept=null_has_intercept)) } else { extractAIC(object,k=k,null_has_intercept=null_has_intercept) } } extractAIC.svyglm<-function(fit,scale,k=2,...,null_has_intercept=TRUE){ if(is.svylm(fit)) return(extractAIC_svylm(fit,...,null_has_intercept=null_has_intercept)) if (length(attr(terms(fit),"factors"))){ model_has_intercept<-attr(terms(fit),"intercept")>0 if (null_has_intercept && !model_has_intercept) stop("model has no intercept, null cannot have one") ftest<-delete.response(formula(fit)) if (!null_has_intercept) ftest<-update(ftest,.~.+`1`) r<-regTermTest(fit, ftest, method="LRT") deltabar<-mean(r$lambda) } else { r<-list(lambda=0) deltabar<-NaN } d<-fit$deviance c(eff.p=sum(r$lambda), AIC=d+k*sum(r$lambda),deltabar=deltabar) } extractAIC.svrepglm<-extractAIC.svyglm BIC.svyglm<-function(object,...,maximal){ if (length(list(...))){ do.call(rbind,lapply(list(object,...),dBIC,modelM=maximal)) } else { dBIC(object,modelM=maximal) } } dBIC<-function(modela, modelM){ pm<-modela$rank pM<-modelM$rank if (any(!(names(coef(modela))%in% names(coef(modelM))))){ stop("coefficients in model but not in maximal model") } index<-!(names(coef(modelM))%in% names(coef(modela))) n<-1+modela$df.null if(any(index)){ wald<-coef(modelM)[index]%*%solve(vcov(modelM)[index,index],coef(modelM)[index]) detDelta<-det(solve(modelM$naive.cov[index,index,drop=FALSE],modelM$cov.unscaled[index,index,drop=FALSE])) dbar<-detDelta^(1/(pM-pm)) nstar<-n/dbar }else { wald<-0 detDelta<-1 dbar<-1 nstar=NaN } c(p=pm, BIC=wald+pm*log(n)+log(detDelta)+deviance(modelM),neff=nstar) } extractAIC.svrepcoxph<-function (fit, scale, k = 2, ...) .NotYetImplemented() extractAIC.svycoxph<-function (fit, scale, k = 2, ...) { Delta<-solve(fit$inv.info, fit$var) deltabar <- mean(diag(Delta)) d <- -2*fit$ll[1] c(eff.p = sum(diag(Delta)), AIC = d + k * sum(diag(Delta)), deltabar = deltabar) } AIC.svycoxph<-function (object, ..., k = 2) { if (length(list(...))) { do.call(rbind, lapply(list(object, ...), extractAIC, k = k)) } else { extractAIC(object, k = k) } } ## special-case the Gaussian ## dAIC=-2\max_{\beta,\sigma^2}\log\ell +2p= n\log\mathrm{RSS}-n\log n +n +n\log 2\pi +2p\bar\delta is.svylm<-function(it) {inherits(it,"svyglm") && isTRUE(all.equal(stats::family(it),gaussian()))} extractAIC_svylm<-function(fit,scale,k=2,...,null_has_intercept=TRUE){ y<-fit$y muhat<-fit$linear.predictors Nhat<-sum(w<-fit$prior.weights) sigma2hat<- sum((y-muhat)^2 * w) / Nhat minus2ellhat<- Nhat*log(sigma2hat) +Nhat +Nhat*log(2*pi) V0<-fit$naive.cov V<-vcov(fit) if (null_has_intercept){ V0<-V0[-1,-1,drop=FALSE] V<-V[-1,-1,drop=FALSE] } ## for mu Delta_mu<-solve(V0*sigma2hat,V) ## Now for sigma2 Isigma2<-Nhat/(2*sigma2hat^2) Usigma2<- -1/(2*sigma2hat)+ (y-muhat)^2/(2*sigma2hat^2) Hsigma2<- sum(w*Usigma2^2) Deltasigma2<-Isigma2/Hsigma2 ## combine deltabar<-mean(c(diag(Delta_mu), Deltasigma2)) eff.p<-sum(diag(Delta_mu))+Deltasigma2 aic <- minus2ellhat + k*eff.p c(eff.p=eff.p, AIC=aic,deltabar=deltabar) } survey/R/regtest.R0000755000176200001440000003224515136525447013635 0ustar liggesusers##deviance methods not exported, used by method="LRT" deviance.svycoxph<-function(object,...) if(length(object$ll)==2) 2 * (object$ll[1] - object$ll[2]) else 0 deviance.coxph<-function(object,...) if(length(object$loglik)==2) 2 * (object$loglik[1] - object$loglik[2]) else 0 explicit1<-function(formula){ if (length(formula)==1) return(formula==1) if (!(formula[[1]]=="+" || formula[[1]]=="*" || formula[[1]]=="/" || formula[[1]]=="^"|| formula[[1]]=="~")) return(FALSE) if (length(formula)==3){ (formula[[2]]==1) || explicit1(formula[[2]]) || explicit1(formula[[3]]) } else { (formula[[2]]==1) || explicit1(formula[[2]]) } } regTermTest<-function(model, test.terms, null=NULL, df=NULL, method=c("Wald","WorkingWald","LRT"), lrt.approximation="saddlepoint"){ method<-match.arg(method) canonicalOrder<-function(term){ tt<-strsplit(term,":") tt<-lapply(tt,sort) sapply(tt,paste,collapse=":") } if(inherits(test.terms,"formula")){ test_intercept<-explicit1(test.terms) test.terms<-attr(terms(test.terms),"term.labels") } else test_intercept<-FALSE okbeta<-!is.na(coef(model,na.rm=FALSE)) ## na.rm for svyglm tt<-attr(terms(model),"term.labels") aa<-attr(model.matrix(model),"assign")[okbeta] if((inherits(model,"svyloglin") || inherits(model,"svyolr")) && attr(terms(model),"intercept")){ aa<-aa[-1] } index<-which(aa %in% match(canonicalOrder(test.terms),canonicalOrder(tt))) if (any(is.na(index))) stop("Terms didn't match:",canonicalOrder(test.terms),canonicalOrder(tt)) if (test_intercept){ if (attr(terms(model),"intercept")) index<-unique(c(1,index)) else stop("model does not have an intercept") } beta<-coef(model)[index] if (!is.null(null)) beta<-beta-null V<-vcov(model)[index,index] ## this should be rewritten as methods, but that's not happening any time soon. if (is.null(df)){ if (inherits(model,"svyglm")) df<-model$df.residual else if (inherits(model, "svycoxph")) df<-model$degf.resid else if (inherits(model,"lm")) df<-model$df.residual else if (inherits(model,"coxph")) df<-model$n-length(coef(model)) else if (inherits(model, "MIresult")) df<-min(model$df[index]) else if (inherits(model,"svyloglin")) df<-model$df+1-length(index) else if (inherits(model, "svyolr")) df<-model$df.residual else df<-length(resid(model))-length(coef(model)) } if (method %in% c("LRT","WorkingWald")){ if (inherits(model,"svyglm")) V0<-model$naive.cov else if (inherits(model, "svycoxph")) V0<-model$inv.info else if (inherits(model,"lm")) V0<-vcov(model) else if (inherits(model,"coxph")){ if (is.null(model$naive.var)) V0<-model$var else V0<-model$naive.var } else if (inherits(model,"svyolr")) { V0<-solve(model$Hess) } else stop("method='LRT' not supported for this model") V0<-V0[index,index] if (test_intercept){ test.formula<-make.formula(c(1,test.terms))[[2]] } else { test.formula<-make.formula(test.terms)[[2]] } if (!("formula" %in% names(model$call))) names(model$call)[[2]]<-"formula" if (method=="LRT"){ model0<-eval(bquote(update(.(model), .~.-(.(test.formula)),design=.(model$survey.design),subset=NULL)), environment(formula(model))) ## same missing data if (inherits(model,"svyglm")){ rescale<-mean(model$prior.weights)/mean(model0$prior.weights) } else if (inherits(model,"svycoxph")){ rescale<-mean(model$weights)/mean(model0$weights) } else rescale<-1 ##FIXME -- probably want a generic drop_and_refit function chisq<-deviance(model0)*rescale-deviance(model) } else { chisq<-beta%*%solve(V0)%*%beta } misspec<-eigen(solve(V0)%*%V, only.values=TRUE)$values if (df==Inf) p<-pchisqsum(chisq,rep(1,length(misspec)),misspec,method=lrt.approximation,lower.tail=FALSE) else p<-pFsum(chisq,rep(1,length(misspec)),misspec,ddf=df,method=lrt.approximation,lower.tail=FALSE) rval<-list(call=sys.call(),mcall=model$call,chisq=chisq, df=length(index),test.terms=test.terms, p=p,lambda=misspec,ddf=df) if (method=="LRT") class(rval)<-"regTermTestLRT" else class(rval)<- "regTermTestWW" return(rval) } chisq<-beta%*%solve(V)%*%beta if (df1) cat("(scale factors: ",signif(x$lambda/mean(x$lambda),2),")") else cat("df=1") if (!is.null(x$ddf) && is.finite(x$ddf)) cat("; denominator df=",x$ddf) cat("\n") invisible(x) } print.regTermTestWW<-function(x,...){ if (is.null(x$ddf) || x$ddf==Inf) cat("Working (Rao-Scott) Wald test for ") else cat("Working (Rao-Scott+F) for ") cat(x$test.terms) cat("\n in ") print(x$mcall) chisq<-x$chisq/mean(x$lambda) cat("Working Wald statistic = ",chisq, 'p=',format.pval(x$p),"\n") if (length(x$lambda)>1) cat("(scale factors: ",signif(x$lambda/mean(x$lambda),2),")") else cat("df=1") if (!is.null(x$ddf) && is.finite(x$ddf)) cat("; denominator df=",x$ddf) cat("\n") invisible(x) } svycontrast<-function(stat, contrasts,add=FALSE,...) UseMethod("svycontrast") match.names <- function(nms,contrasts){ l<-length(nms) ll<-sapply(contrasts,length) if (l==0) stop("No names to match") if (length(unlist(sapply(contrasts,names)))==0) return(contrasts) if( !all( unlist(sapply(contrasts,names)) %in% nms)) stop("names not matched") lapply(contrasts, function(con) { r<-numeric(l) names(r)<-nms r[names(con)]<-con r }) } contrast<-function(coef,var,contrasts, influence=NULL){ nas<-is.na(var[,1]) drop<-nas & apply(contrasts,2,function(v) all(v==0)) if(any(drop)){ contrasts<-contrasts[,!drop,drop=FALSE] coef<-coef[!drop] var<-var[!drop,!drop,drop=FALSE] } if (any(is.na(coef))){ badin<-is.na(coef) bad<-((contrasts!=0)%*%is.na(coef))>0 rval<-rep(NA,NROW(contrasts)) rval[!bad]<-contrasts[!bad,!badin,drop=FALSE]%*%coef[!badin] v<-matrix(NA,length(rval),length(rval)) v[!bad,!bad]<-contrasts[!bad,!badin,drop=FALSE]%*%var[!badin,!badin,drop=FALSE]%*%t(contrasts[!bad,!badin,drop=FALSE]) dimnames(v)<-list(names(rval),names(rval)) rval<-drop(rval) if(!is.null(influence)){ attr(rval,"influence")<- influence[,!badin,drop=FALSE]%*%t(contrasts[!bad,!badin,drop=FALSE]) } attr(rval, "var")<-v } else{ rval<-drop(contrasts%*%coef) v<-contrasts%*%var%*%t(contrasts) dimnames(v)<-list(names(rval),names(rval)) if(!is.null(influence)){ attr(rval,"influence")<- influence%*%t(contrasts) } attr(rval,"var")<-v } rval } addQuote<-function(contrasts, original){ ll<-as.list(original) names(ll)<-original ll<-lapply(ll, as.name) c(contrasts,ll) } addLin<-function(contrasts, original){ id<-diag(length(original)) dimnames(id)<-list(original,original) rbind(contrasts,id) } svycontrast.svystat<-function(stat, contrasts,add=FALSE,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.language(contrasts[[1]])){ if(add){ contrasts<-addQuote(contrasts,names(coef(stat))) } rval<-nlcon(contrasts,as.list(coef(stat)), vcov(stat), attr(stat,"influence")) class(rval)<-"svrepstat" attr(rval,"statistic")<-"nlcon" return(rval) } contrasts<-match.names(names(coef(stat)),contrasts) contrasts<-do.call(rbind,contrasts) if (add) contrasts<-addLin(contrasts, names(coef(stat))) coef<-contrast(coef(stat),vcov(stat),contrasts, attr(stat,"influence")) class(coef)<-"svystat" attr(coef,"statistic")<-"contrast" coef } svycontrast.svyolr<-function(stat, contrasts,add=FALSE,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.language(contrasts[[1]])){ if(add){ contrasts<-addQuote(contrasts,names(coef(stat))) } rval<-nlcon(contrasts,as.list(c(coef(stat),stat$zeta)), vcov(stat)) class(rval)<-"svystat" attr(rval,"statistic")<-"nlcon" return(rval) } contrasts <- match.names(names(coef(stat)), contrasts) contrasts<-do.call(rbind,contrasts) if (add) contrasts<-addLin(contrasts, names(coef(stat))) coef<-contrast(as.vector(as.matrix(coef(stat))), vcov(stat),contrasts) class(coef)<-"svystat" attr(coef,"statistic")<-"contrast" coef } svycontrast.svrepstat<-function(stat, contrasts,add=FALSE,...){ if (!is.list(contrasts)) contrasts<-list(contrast=contrasts) if (is.language(contrasts[[1]])){ if(add){ contrasts<-addQuote(contrasts,names(coef(stat))) } if (is.list(stat) && !is.null(stat$replicates)){ ##replicates rval<-list(nlcon=nlcon(contrasts,as.list(coef(stat)),varmat=NULL)) reps<-as.matrix(stat$replicates) colnames(reps)<-names(coef(stat)) xreps<-apply(reps,1, function(repi) nlcon(datalist=as.list(repi), exprlist=contrasts, varmat=NULL)) rval$replicates<-if(is.matrix(xreps)) t(xreps) else as.matrix(xreps) attr(rval$nlcon,"var")<-svrVar(rval$replicates, scale=attr(stat$replicates,"scale"), rscales=attr(stat$replicates,"rscales"),mse=attr(stat$replicates,"mse"), coef=rval$nlcon) attr(rval$nlcon,"statistic")<-"nlcon" } else { rval<-nlcon(contrasts,as.list(coef(stat)), vcov(stat)) attr(rval,"statistic")<-"nlcon" } class(rval)<-"svrepstat" return(rval) } else { contrasts<-match.names(names(coef(stat)), contrasts) contrasts<-do.call(rbind,contrasts) if (add) contrasts<-addLin(contrasts, names(coef(stat))) coef<-contrast(coef(stat), vcov(stat), contrasts) attr(coef,"statistic")<-"contrast" if (is.list(stat) && !is.null(stat$replicates)){ coef<-list(contrast=coef, replicates=tcrossprod(stat$replicates, contrasts)) } class(coef)<-"svrepstat" coef } } nlcon<-function(exprlist, datalist, varmat, influence=NULL){ if (!is.list(exprlist)) exprlist<-list(contrast=exprlist) dexprlist<-lapply(exprlist, function(expr) deriv(expr, names(datalist))[[1]]) values<-lapply(dexprlist, function(dexpr) eval(do.call(substitute, list(dexpr,datalist)))) if (is.null(varmat)) return(do.call(c,values)) jac<-do.call(rbind,lapply(values, function(value) attr(value,"gradient"))) var<-jac%*%varmat%*%t(jac) values<-do.call(c, values) dimnames(var)<-list(names(values),names(values)) attr(values, "var")<-var if(!is.null(influence)){ attr(values,"influence")<-influence%*%t(jac) } values } svycontrast.svyglm<-svycontrast.svystat svycontrast.svycoxph<-svycontrast.svystat svycontrast.svrepglm<-svycontrast.svrepstat svycontrast.svrepcoxph<-svycontrast.svrepstat svycontrast.svyby<-svycontrast.svystat svycontrast.default<-svycontrast.svystat svycontrast.svyby<-function(stat, contrasts,...){ if(!is.null(r<-attr(stat, "replicates"))){ s<-coef(stat) attr(s,"var")<-vcov(stat) attr(s,"statistic")<-attr(stat,"svyby")$statistic repstat<-list(stat=s, replicates=r) class(repstat)<-"svrepstat" svycontrast(repstat, contrasts,...) } else NextMethod() ## default } ## ## make sure that svystat,svrepstat objects lose their standard errors after transformation ## dropattr1<-function(x){if (!inherits(x,"svystat")) x else coef(x)} Ops.svystat<-function(e1,e2){e1<-dropattr1(e1); e2<-dropattr1(e2); NextMethod()} Math.svystat<-function(x,...){x<-dropattr1(x); NextMethod()} dropattr2<-function(x){if (!inherits(x,"svrepstat")) x else coef(x)} Ops.svrepstat<-function(e1,e2){e1<-dropattr2(e1); e2<-dropattr2(e2); NextMethod()} Math.svrepstat<-function(x,...){x<-dropattr2(x); NextMethod()} survey/R/surveychisq.R0000755000176200001440000004150714640361577014547 0ustar liggesusers## ## Tests for contingency tables ## svychisq<-function(formula, design,...) UseMethod("svychisq",design) svychisq.survey.design<-svychisq.multiframe<-function(formula, design, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint","wls-score"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))!=2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) if (statistic=="wls-score") return(svychisqzero(formula,design,na.rm=na.rm)) rows<-formula[[2]][[2]] cols<-formula[[2]][[3]] rowvar<-unique(model.frame(design)[,as.character(rows)]) colvar<-unique(model.frame(design)[,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, model.frame(design),na.action=na.pass)) N<-nrow(mm) nu <- degf(design) ## 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,model.frame(design), na.action=na.pass)) mc<-model.matrix(fcol, model.frame(fcol,model.frame(design), 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<-svychisq.twophase2<-function(formula, design, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))!=2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) ##if(!is.null(design$postStrata)) ## warning("Post-stratification not implemented") rows<-formula[[2]][[2]] cols<-formula[[2]][[3]] dat<-design$phase1$sample$variables rowvar<-unique(dat[,as.character(rows)]) colvar<-unique(dat[,as.character(cols)]) returnNA<-FALSE if ((any(is.na(rowvar),is.na(colvar)))){ rowvar<-na.omit(rowvar) colvar<-na.omit(colvar) returnNA<-!na.rm } nr<-length(rowvar) nc<-length(colvar) fsat<-eval(bquote(~interaction(factor(.(rows)),factor(.(cols)))-1)) mm<-model.matrix(fsat,model.frame(fsat, dat,na.action=na.pass)) N<-nrow(mm) nu <- length(unique(design$phase2$cluster[,1]))-length(unique(design$phase2$strata[,1])) pearson<- suppressWarnings(chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE)) mf1<-expand.grid(rows=1:nr,cols=1:nc) X1<-model.matrix(~factor(rows)+factor(cols),mf1) X12<-model.matrix(~factor(rows)*factor(cols),mf1) if(statistic %in% c("Wald", "adjWald")){ frow<-eval(bquote(~factor(.(rows))-1)) fcol<-eval(bquote(~factor(.(cols))-1)) mr<-model.matrix(frow, model.frame(frow,dat, na.action=na.pass)) mc<-model.matrix(fcol, model.frame(fcol,dat, na.action=na.pass)) one<-rep(1,NROW(mc)) cells<-svytotal(~mm+mr+mc+one,design,na.rm=TRUE) Jcb <- cbind(diag(nr*nc), -outer(mf1$rows,1:nr,"==")*rep(cells[(nr*nc)+nr+1:nc]/cells[(nr*nc)+nr+nc+1],each=nr), -outer(mf1$cols,1:nc,"==")*cells[(nr*nc)+1:nr]/cells[(nr*nc)+nr+nc+1], as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc])/cells[(nr*nc)+nr+nc+1]^2)) Y<-cells[1:(nc*nr)]-as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc]))/cells[(nr*nc)+nr+nc+1] V<-Jcb%*%attr(cells,"var")%*%t(Jcb) use<-as.vector(matrix(1:(nr*nc),nrow=nr,ncol=nc)[-1,-1]) waldstat<-Y[use]%*%solve(V[use,use],Y[use]) if (statistic=="Wald"){ waldstat<-waldstat/((nc-1)*(nr-1)) numdf<-(nc-1)*(nr-1) denomdf<-nu } else { numdf<-(nr-1)*(nc-1) denomdf<-(nu-numdf+1) waldstat <- waldstat*denomdf/(numdf*nu) } if (returnNA){ pearson$statistic<-NA pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-NA attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } else { pearson$statistic<-waldstat pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-pf(pearson$statistic, numdf, denomdf, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } return(pearson) } mean2<-svymean(mm,design,na.rm=TRUE) Cmat<-qr.resid(qr(X1),X12[,-(1:(nr+nc-1)),drop=FALSE]) Dmat <- diag(mean2) iDmat<- diag(ifelse(mean2==0,0,1/mean2)) Vsrs <- (Dmat - outer(mean2,mean2))/N V <- attr(mean2,"var") denom<- t(Cmat) %*% (iDmat/N) %*% Cmat numr<-t(Cmat)%*% iDmat %*% V %*% iDmat %*% Cmat Delta<-solve(denom,numr) d0<- sum(diag(Delta))^2/(sum(diag(Delta%*%Delta))) warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE) options(warn) if (match.arg(statistic)=="F"){ pearson$statistic<-pearson$statistic/sum(diag(Delta)) pearson$p.value<-pf(pearson$statistic, d0, d0*nu, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$parameter<-c(ndf=d0,ddf=d0*nu) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } else if (match.arg(statistic)=="lincom") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="integration",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: asymptotic exact distribution" } else if (match.arg(statistic)=="saddlepoint") { pearson$p.value<-pFsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint",ddf=d0*nu) pearson$parameter<-NULL pearson$method<-"Pearson's X^2: saddlepoint approximation" } else{ pearson$p.value<-pchisq(pearson$statistic/mean(diag(Delta)), df=NCOL(Delta),lower.tail=FALSE) pearson$parameter<-c(df=NCOL(Delta)) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" } if (returnNA){ pearson$statistic<-NA pearson$p.value<-NA } pearson$data.name<-deparse(sys.call(-1)) pearson } svychisq.svyrep.design<-function(formula, design, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint","wls-score"), na.rm=TRUE,...){ if (ncol(attr(terms(formula),"factors"))!=2) stop("Only 2-way tables at the moment") statistic<-match.arg(statistic) if (statistic=="wls-score") return(svychisqzero(formula,design,na.rm=na.rm)) rows<-formula[[2]][[2]] cols<-formula[[2]][[3]] rowvar<-unique(design$variables[,as.character(rows)]) colvar<-unique(design$variables[,as.character(cols)]) returnNA<-FALSE if ((any(is.na(rowvar),is.na(colvar)))){ rowvar<-na.omit(rowvar) colvar<-na.omit(colvar) returnNA<-!na.rm } nr<-length(rowvar) nc<-length(colvar) fsat<-eval(bquote(~interaction(factor(.(rows)),factor(.(cols)))-1)) mm<-model.matrix(fsat,model.frame(fsat, design$variables,na.action=na.pass)) N<-nrow(mm) nu <- degf(design) pearson<- suppressWarnings(chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE)) mf1<-expand.grid(rows=1:nr,cols=1:nc) X1<-model.matrix(~factor(rows)+factor(cols),mf1) X12<-model.matrix(~factor(rows)*factor(cols),mf1) if(statistic %in% c("Wald", "adjWald")){ frow<-eval(bquote(~factor(.(rows))-1)) fcol<-eval(bquote(~factor(.(cols))-1)) mr<-model.matrix(frow, model.frame(frow,design$variables, na.action=na.pass)) mc<-model.matrix(fcol, model.frame(fcol,design$variables, na.action=na.pass)) one<-rep(1,NROW(mc)) cells<-svytotal(~mm+mr+mc+one,design,na.rm=TRUE) Jcb <- cbind(diag(nr*nc), -outer(mf1$rows,1:nr,"==")*rep(cells[(nr*nc)+nr+1:nc]/cells[(nr*nc)+nr+nc+1],each=nr), -outer(mf1$cols,1:nc,"==")*cells[(nr*nc)+1:nr]/cells[(nr*nc)+nr+nc+1], as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc])/cells[(nr*nc)+nr+nc+1]^2)) Y<-cells[1:(nc*nr)]-as.vector(outer(cells[(nr*nc)+1:nr],cells[(nr*nc+nr)+1:nc]))/cells[(nr*nc)+nr+nc+1] V<-Jcb%*%attr(cells,"var")%*%t(Jcb) use<-as.vector(matrix(1:(nr*nc),nrow=nr,ncol=nc)[-1,-1]) waldstat<-Y[use]%*%solve(V[use,use],Y[use]) if (statistic=="Wald"){ waldstat<-waldstat/((nc-1)*(nr-1)) numdf<-(nc-1)*(nr-1) denomdf<-nu } else { numdf<-(nr-1)*(nc-1) denomdf<-(nu-numdf+1) waldstat <- waldstat*denomdf/(numdf*nu) } if (returnNA){ pearson$statistic<-NA pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-NA attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } else { pearson$statistic<-waldstat pearson$parameter<-c(ndf=numdf,ddf=denomdf) pearson$p.value<-pf(pearson$statistic, numdf, denomdf, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based Wald test of association" } return(pearson) } mean2<-svymean(mm,design,na.rm=TRUE) Cmat<-qr.resid(qr(X1),X12[,-(1:(nr+nc-1)),drop=FALSE]) Dmat <- diag(mean2) iDmat<- diag(ifelse(mean2==0,0,1/mean2)) Vsrs <- (Dmat - outer(mean2,mean2))/N V <- attr(mean2,"var") denom<- t(Cmat) %*% (iDmat/N) %*% Cmat numr<-t(Cmat)%*% iDmat %*% V %*% iDmat %*% Cmat Delta<-solve(denom,numr) d0<- sum(diag(Delta))^2/(sum(diag(Delta%*%Delta))) warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=N), correct=FALSE) options(warn) if (match.arg(statistic)=="F"){ pearson$statistic<-pearson$statistic/sum(diag(Delta)) pearson$p.value<-pf(pearson$statistic, d0, d0*nu, lower.tail=FALSE) attr(pearson$statistic,"names")<-"F" pearson$parameter<-c(ndf=d0,ddf=d0*nu) } else if (match.arg(statistic)=="lincom") { pearson$p.value<-pchisqsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="integration") pearson$parameter<-NULL pearson$method<-"Pearson's X^2: asymptotic exact distribution" }else if (match.arg(statistic)=="saddlepoint") { pearson$p.value<-pchisqsum(pearson$statistic, rep(1,ncol(Delta)), eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint") pearson$parameter<-NULL pearson$method<-"Pearson's X^2: saddlepoint approximation" } else { pearson$p.value<-pchisq(pearson$statistic/mean(diag(Delta)), df=NCOL(Delta),lower.tail=FALSE) pearson$parameter<-c(df=NCOL(Delta)) } if (returnNA){ pearson$statistic<-NA pearson$p.value<-NA } pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Pearson's X^2: Rao & Scott adjustment" pearson } summary.svreptable<-function(object,...){ object } summary.svytable<-function(object, statistic=c("F","Chisq","Wald","adjWald","lincom","saddlepoint"),...){ statistic<-match.arg(statistic) call<-attr(object, "call") ff<-call$formula if (is.null(environment(ff))) env<-parent.frame() else env<-environment(ff) ff<-delete.response(ff) test<-eval(bquote(svychisq(.(ff), design=.(call$design), statistic=.(statistic))), env) rval<-list(table=object,statistic=test) class(rval)<-"summary.svytable" rval } print.summary.svytable<-function(x,digits=0,...){ print(round(x$table,digits)) print(x$statistic,...) } svychisqzero<-function(formula,design,na.rm){ if (ncol(attr(terms(formula), "factors")) > 2) stop("Only 2-way tables") rows <- formula[[2]][[2]] cols <- formula[[2]][[3]] rowvar <- unique(design$variables[, as.character(rows)]) nr <- length(rowvar) des<-design[rep(1:nrow(design), nr), ] yind<-as.vector(eval(bquote( model.matrix(~factor(.(rows))+0, model.frame(design))))) k<-rep(1:nr,each=nrow(design)) des<-update(des,yind=yind,k=k) ff0<-eval(bquote(yind~factor(k)+factor(.(cols)))) ff1<-eval(bquote(~factor(k):factor(.(cols)))) m0<-svyglm(ff0, des) test<-svyscoretest(m0, add.terms=ff1,method="pseudo") ## rescaling: the weights matter because score test uses svytotal test["X2"]<-test["X2"]/nr/nr if (is.finite(test["ddf"])) { p<-pf(test["X2"], test["df"],test["ddf"],lower.tail=FALSE) } else{ p<- pchisq(test["X2"], test["df"],lower.tail=FALSE) } test["p"]<-p ## formatting warn<-options(warn=-1) ## turn off the small-cell count warning. pearson<- chisq.test(svytable(formula,design,Ntotal=nrow(design)), correct=FALSE) options(warn) pearson$statistic<-test["X2"] pearson$parameter<-c(ndf=test["df"],ddf=test["ddf"]) pearson$p.value<-test["p"] attr(pearson$statistic,"names")<-"F" pearson$data.name<-deparse(sys.call(-1)) pearson$method<-"Design-based WLS score test of association" pearson } survey/R/svysmooth.R0000644000176200001440000000744413363712117014223 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/mse.R0000644000176200001440000000066611616331023012723 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/smoothUnit.R0000644000176200001440000000542114576372270014323 0ustar liggesuserssvysmoothUnit <- function(formula, domain, design, family = c("gaussian", "binomial"), X.pop = NULL, adj.mat = NULL, domain.size = NULL, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = .95, n.sample = 250, return.samples = FALSE, X.pop.weights = NULL,...) { UseMethod("svysmoothUnit",design) } svysmoothUnit.survey.design <- function(formula, domain, design, family = c("gaussian", "binomial"), X.pop = NULL, adj.mat = NULL, domain.size = NULL, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = .95, n.sample = 250, return.samples = FALSE, X.pop.weights = NULL,...) { if (!requireNamespace("SUMMER", quietly = TRUE)) { stop( "Package \"SUMMER\" must be installed to use this function.", call. = FALSE ) } family<-match.arg(family) rval<-SUMMER::smoothUnit(formula = formula, domain = domain, design = design, family = family, X.pop = X.pop, adj.mat = adj.mat, domain.size = domain.size, pc.u = pc.u, pc.alpha = pc.alpha, pc.u.phi = pc.u.phi, pc.alpha.phi = pc.alpha.phi, level = level, n.sample = n.sample, return.samples = return.samples, X.pop.weights = X.pop.weights) rval$call<-sys.call(-1) rval } svysmoothUnit.default <- function(formula, domain, design, family = c("gaussian", "binomial"), X.pop = NULL, adj.mat = NULL, domain.size = NULL, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = .95, n.sample = 250, return.samples = FALSE, X.pop.weights = NULL,...) { stop("svysmoothUnit is only available for survey.design objects") } survey/R/svyqq.R0000644000176200001440000000444513707703671013340 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/loglin.R0000644000176200001440000001471314504654532013435 0ustar liggesuserssvyloglin<-function(formula,design,...) UseMethod("svyloglin",design) withOptions<-function(optlist,expr){ oldopt<-options(optlist) on.exit(options(oldopt)) expr<-substitute(expr) eval.parent(expr) } tr<-function(m)sum(diag(m)) tr2<-function(m) sum(m*m) svyloglin.survey.design<-function(formula,design,...){ if (length(formula)!=2) stop("needs a one-sided formula") mdata<-model.frame(design)[,all.vars(formula)] mf<-model.frame(formula,mdata,na.action=na.pass) n<-as.numeric(nrow(mf)) hatp<-svymean(~I(do.call(interaction,mf)),design,na.rm=TRUE) dat<-do.call(expand.grid,lapply(mdata,function(x) sort(unique(x)))) dat<-as.data.frame(lapply(dat,as.factor)) dat$y<-coef(hatp)*n ff<-update(formula, y~.) m1<-withOptions(list(contrasts=c("contr.sum","contr.poly")), glm(ff, data=dat,family=quasipoisson) ) P1<-(diag(fitted(m1)/n)-tcrossprod(fitted(m1)/n))/n V<-vcov(hatp) XX<-model.matrix(m1)[,-1,drop=FALSE] XX<-sweep(XX,2,colMeans(XX)) Vtheta<-solve(t(XX)%*%P1%*%XX)%*%(t(XX)%*%V%*%XX)%*%solve(t(XX)%*%P1%*%XX)/(n*n) rval<-list(model=m1, var=Vtheta, prob.table=hatp,df.null=degf(design),n=n) call<-sys.call() call[[1]]<-as.name(.Generic) rval$call<-call class(rval)<-"svyloglin" rval } print.svyloglin<-function(x,...) {cat("Loglinear model: ");print(x$call)} coef.svyloglin<-function(object,...,intercept=FALSE){ if (intercept) coef(object$model) else coef(object$model)[-1] } vcov.svyloglin<-function(object,...) object$var deviance.svyloglin<-function(object,...) deviance(object$model) degf.svyloglin<-function(design,...) length(design$prob.table)-length(coef(design))-1 terms.svyloglin<-function(x,...) terms(x$model,...) model.matrix.svyloglin<-function(object,...) model.matrix(object$model,...) update.svyloglin<-function(object, formula,...){ n<-object$n model<-withOptions(list(contrasts=c("contr.sum","contr.sum")), update(object$model, formula,data=object$model$model)) P1<-(diag(fitted(model)/n)-tcrossprod(fitted(model)/n))/n V<-vcov(object$prob.table) XX<-model.matrix(model)[,-1,drop=FALSE] XX<-sweep(XX,2,colMeans(XX)) A<-solve(t(XX)%*%P1%*%XX) B<-t(XX)%*%V%*%XX Vtheta<-A%*%B%*%A/(n*n) rval<-list(model=model, var=Vtheta, prob.table=object$prob.table, df.null=object$df.null,n=n) call<-sys.call() call[[1]]<-as.name(.Generic) rval$call<-call class(rval)<-"svyloglin" rval } anova.svyloglin<-function(object,object1,...,integrate=FALSE){ if(length(coef(object1))="4.4.0") FALSE else NULL an<-anova(m0,m1,test=no_tests) dev<-an$Deviance[2] if (integrate){ pdev<-pchisqsum(dev,rep(1,ncol(wX2)), a=eigen(Delta,only.values=TRUE,symmetric=TRUE)$values, lower.tail=FALSE,method="integration") } else pdev<-NA pdev1<-pchisq(dev*ncol(wX2)/tr(Delta),df=ncol(wX2),lower.tail=FALSE) pdev2a<-pf(dev/tr(Delta), tr(Delta)^2/tr2(Delta), dfnull*tr(Delta)^2/tr2(Delta), lower.tail=FALSE) pdevsad<-pchisqsum(dev,rep(1,ncol(wX2)), a=eigen(Delta,only.values=TRUE)$values, lower.tail=FALSE,method="saddlepoint") pearson<-n*sum( (pi1-pi0)^2/pi0 ) if (integrate){ pearsonp<-pchisqsum(pearson, rep(1,ncol(wX2)), a=eigen(Delta,only.values=TRUE,symmetric=TRUE)$values, lower.tail=FALSE,method="integration") } else pearsonp<-NA prs1<-pchisq(pearson*ncol(wX2)/tr(Delta),df=ncol(wX2),lower.tail=FALSE) prs2<-pchisq(pearson*ncol(wX2)/tr(Delta),df=tr(Delta)^2/tr2(Delta),lower.tail=FALSE) prs2a<-pf(pearson/tr(Delta), ncol(wX2)*tr(Delta)^2/tr2(Delta),ncol(wX2)*dfnull*tr(Delta)^2/tr2(Delta), lower.tail=FALSE) pchisqsad<-pchisqsum(pearson, rep(1,ncol(wX2)), a=eigen(Delta,only.values=TRUE,symmetric=TRUE)$values, lower.tail=FALSE,method="saddlepoint") rval<-list(an, dev=list(dev=dev, p=c(pdev,pdev1,pdev2a,pdevsad)), score=list(chisq=pearson,p=c(pearsonp,prs1,prs2a,pchisqsad)), integrate=integrate,a=eigen(Delta,only.values=TRUE,symmetric=TRUE)$values,p=ncol(wX2)) class(rval)<-"anova.svyloglin" rval } print.anova.svyloglin<-function(x,pval=c("F","saddlepoint","lincom","chisq"),...){ cat(attr(x[[1]],"heading"),"\n") pval<-match.arg(pval) if (pval=="lincom" && !x$integrate){ x$dev$p[1]<-pchisqsum(x$dev$dev, rep(1,x$p), a=x$a, lower.tail=FALSE,method="integration") x$score$p[1]<-pchisqsum(x$score$chisq, rep(1,x$p), a=x$a, lower.tail=FALSE,method="integration") } cat("Deviance=",x$dev$dev,"p=", switch(pval,lincom=x$dev$p[1], saddlepoint=x$dev$p[4], chisq=x$dev$p[2], F=x$dev$p[3]),"\n") cat("Score=",x$score$chisq,"p=", switch(pval,lincom=x$score$p[1], saddlepoint=x$score$p[4], chisq=x$score$p[2], F=x$score$p[3]),"\n") invisible(x) } summary.svyloglin<-function(object,...){ rval<-list(ll=object) class(rval)<-"summary.svyloglin" rval } print.summary.svyloglin<-function(x,...){ print(x$ll) print(cbind(coef=coef(x$ll), se=SE(x$ll), p=2*pnorm(abs(coef(x$ll)/SE(x$ll)),lower.tail=FALSE))) invisible(x) } svyloglin.svyrep.design<-svyloglin.survey.design svyloglin.DBIsvydesign<-function (formula, design, ...) { design$variables <- dropFactor(getvars(formula, design$db$connection, design$db$tablename, updates = design$updates), weights(design)) class(design)<-c("survey.design2","survey.design") rval<-svyloglin(formula,design) rval$call<-sys.call() rval$call[[1]]<-as.name(.Generic) rval } survey/R/confint.R0000644000176200001440000000266215132010256013574 0ustar liggesusersformat.perc<-function (probs, digits) { paste(format(100 * probs, trim = TRUE, scientific = FALSE, digits = digits), "%") } confint.svystat<-function (object, parm, level = 0.95, df=Inf,...) { tconfint(object, parm, level,df) } confint.svrepstat<-confint.svystat confint.svyby<-confint.svystat confint.svyratio<-confint.svystat tconfint<-function (object, parm, level = 0.95, df=Inf) { cf <- coef(object) if (is.matrix(cf)) { if (is.null(colnames(cf))) colnames(cf) <- seq_len(ncol(cf)) if (is.null(rownames(cf))) rownames(cf) <- seq_len(nrow(cf)) pnames <- sapply(X = colnames(cf), FUN = function(x) paste(rownames(cf), x, sep = "_"), simplify = TRUE) pnames <- as.vector(pnames) cf <- as.vector(cf) names(cf) <- pnames } else { pnames <- names(cf) if (is.null(pnames)) pnames <- seq_along(cf) } if (missing(parm)) parm <- pnames else if (is.numeric(parm)) parm <- pnames[parm] a <- (1 - level)/2 a <- c(a, 1 - a) pct <- format.perc(a, 3) fac <- qt(a, df=df) ci <- array(NA, dim = c(length(parm), 2L), dimnames = list(parm, pct)) if (!is.matrix(cf)) { ses <- unlist(SE(object))[parm %in% pnames] } else { ses <- as.vector(SE(object))[parm %in% pnames] } ci[] <- cf[parm] + ses %o% fac ci } survey/R/olr.R0000644000176200001440000003147014476220044012737 0ustar liggesuserssvyolr<-function(formula, design,...) UseMethod("svyolr",design) ## ## Much of this is taken from MASS polr, thus the GPL-2 license. ## svyolr.svyrep.design<-function(formula,design,subset=NULL,...,return.replicates=FALSE, multicore=getOption("survey.multicore")){ environment(formula)<-environment() subset<-substitute(subset) subset<-eval(subset, model.frame(design), parent.frame()) if (!is.null(subset)){ if (any(is.na(subset))) stop("subset must not contain NA values") design<-design[subset,] } df<-model.frame(design) pwt<-weights(design,"sampling") if (multicore && !requireNamespace("parallel", quietly=TRUE)) multicore <- FALSE rval<-suppressWarnings(MASS::polr(formula,data=df,...,Hess=TRUE,model=FALSE, weights=pwt)) start<-c(rval$coefficients,rval$zeta) rw<-weights(design,"analysis") if (multicore){ betas<-do.call(cbind,parallel::mclapply(1:ncol(rw), function(i){ w<-rw[,i] environment(formula)<-environment() m<-MASS::polr(formula,data=df,Hess=FALSE, start=start, model=FALSE, weights=w) c(m$coefficients, m$zeta) })) } else { betas<-apply(rw,2,function(w) { environment(formula)<-environment() m<-MASS::polr(formula,data=df,Hess=FALSE, start=start, model=FALSE, weights=w) c(m$coefficients, m$zeta) }) } rval$var<-svrVar(t(betas),design$scale,design$rscales,mse=design$mse, coef=start) rval$df.residual<-degf(design)-length(rval$coefficients) rval$deviance<-rval$deviance/mean(pwt) rval$survey.design<-design class(rval)<-"svyolr" rval$call<-sys.call() rval$call[[1]]<-as.name(.Generic) if (return.replicates) rval$replicates<-t(betas) rval } pgumbel<- function (q, loc = 0, scale = 1, lower.tail = TRUE) { q <- (q - loc)/scale p <- exp(-exp(-q)) if (!lower.tail) 1 - p else p } dgumbel<-function (x, loc = 0, scale = 1, log = FALSE) { x <- (x - loc)/scale d <- log(1/scale) - x - exp(-x) if (!log) exp(d) else d } svyolr.survey.design2<-function (formula, design, start, subset=NULL,..., na.action=na.omit, method = c("logistic", "probit", "cloglog", "cauchit")) { logit <- function(p) log(p/(1 - p)) fmin <- function(beta) { theta <- beta[pc + 1:q] gamm <- c(-100, cumsum(c(theta[1], exp(theta[-1]))), 100) eta <- offset if (pc > 0) eta <- eta + drop(x %*% beta[1:pc]) pr <- pfun(gamm[y + 1] - eta) - pfun(gamm[y] - eta) if (all(pr > 0)) -sum(wt * log(pr)) else Inf } jacobian <- function(theta) { k <- length(theta) etheta <- exp(theta) mat <- matrix(0, k, k) mat[, 1] <- rep(1, k) for (i in 2:k) mat[i:k, i] <- etheta[i] mat } gmini <- function(beta,logdiff=FALSE) { theta <- beta[pc + 1:q] gamm <- c(-100, cumsum(c(theta[1], exp(theta[-1]))), 100) eta <- offset if (pc > 0) eta <- eta + drop(x %*% beta[1:pc]) pr <- pfun(gamm[y + 1] - eta) - pfun(gamm[y] - eta) p1 <- dfun(gamm[y + 1] - eta) p2 <- dfun(gamm[y] - eta) g1 <- if (pc > 0) x * (wt * (p1 - p2)/pr) else numeric(0) xx <- .polrY1 * p1 - .polrY2 * p2 g2 <- - xx * (wt/pr) if (logdiff) g2 <- g2 %*% jacobian(theta) if (all(pr > 0)) cbind(g1, g2) else NA+cbind(g1,g2) } gmin<-function(beta){ colSums(gmini(beta,logdiff=TRUE)) } m <- match.call(expand.dots = FALSE) method <- match.arg(method) pfun <- switch(method, logistic = plogis, probit = pnorm, cloglog = pgumbel, cauchit = pcauchy) dfun <- switch(method, logistic = dlogis, probit = dnorm, cloglog = dgumbel, cauchit = dcauchy) subset<-substitute(subset) subset<-eval(subset, model.frame(design), parent.frame()) if (!is.null(subset)){ if (any(is.na(subset))) stop("subset must not contain NA values") design<-design[subset,] } m<-model.frame(formula,model.frame(design),na.action=na.pass) Terms <- attr(m, "terms") m<-na.action(m) nao<-attr(m,"na.action") if(length(nao)) { design<-design[-nao,] } x <- model.matrix(Terms, m) xint <- match("(Intercept)", colnames(x), nomatch = 0) n <- nrow(x) pc <- ncol(x) cons <- attr(x, "contrasts") if (xint > 0) { x <- x[, -xint, drop = FALSE] pc <- pc - 1 } else warning("an intercept is needed and assumed") keep<-weights(design)!=0 wt <- weights(design)[keep] offset <- model.offset(m) if (length(offset) <= 1) offset <- rep(0, n) y <- model.response(m) if (!is.factor(y)) stop("response must be a factor") lev <- levels(y) if (length(lev) <= 2) stop("response must have 3 or more levels") y <- unclass(y) q <- length(lev) - 1 Y <- matrix(0, n, q) .polrY1 <- col(Y) == y .polrY2 <- col(Y) == y - 1 if (missing(start)) { q1 <- length(lev)%/%2 y1 <- (y > q1) X <- cbind(Intercept = rep(1, n), x) fit <- switch(method, logistic = glm.fit(X, y1, wt/mean(wt), family = quasibinomial(), offset = offset), probit = glm.fit(X, y1, wt/mean(wt), family = quasibinomial("probit"), offset = offset), cloglog = glm.fit(X, y1, wt/mean(wt), family = quasibinomial("probit"), offset = offset), cauchit = glm.fit(X, y1, wt/mean(wt), family = quasibinomial("cauchit"), offset = offset)) if (!fit$converged) stop("attempt to find suitable starting values failed") coefs <- fit$coefficients if (any(is.na(coefs))) { warning("design appears to be rank-deficient, so dropping some coefs") betakeep <- names(coefs)[!is.na(coefs)] coefs <- coefs[betakeep] x <- x[, betakeep[-1], drop = FALSE] pc <- ncol(x) } spacing <- logit((1:q)/(q + 1)) if (method != "logit") spacing <- spacing/1.7 gammas <- -coefs[1] + spacing - spacing[q1] thetas <- c(gammas[1], log(diff(gammas))) start <- c(coefs[-1], thetas) } else if (length(start) != pc + q) stop("'start' is not of the correct length") res <- optim(start, fmin, gmin, method = "BFGS", hessian = TRUE, ...) beta <- res$par[seq_len(pc)] theta <- res$par[pc + 1:q] zeta <- cumsum(c(theta[1], exp(theta[-1]))) deviance <- 2 * res$value/mean(wt) niter <- c(f.evals = res$counts[1], g.evals = res$counts[2]) names(zeta) <- paste(lev[-length(lev)], lev[-1], sep = "|") if (pc > 0) { names(beta) <- colnames(x) eta <- drop(x %*% beta) } else { eta <- rep(0, n) } cumpr <- matrix(pfun(matrix(zeta, n, q, byrow = TRUE) - eta), , q) fitted <- t(apply(cumpr, 1, function(x) diff(c(0, x, 1)))) dimnames(fitted) <- list(row.names(m), lev) fit <- list(coefficients = beta, zeta = zeta, deviance = deviance, fitted.values = fitted, lev = lev, terms = Terms, df.residual = sum(wt) - pc - q, edf = pc + q, n = sum(wt), nobs = sum(wt), method = method, convergence = res$convergence, niter = niter) dn <- c(names(beta), names(zeta)) ## MASS::polr reparametrises the intercepts other than the first ## using logs of differences (to ensure the ordering). Need to undo it. vc <- MASS::ginv(res$hessian) pc <- length(beta) gamma <- fit$zeta z.ind <- pc + seq_along(gamma) theta <- c(gamma[1L], log(diff(gamma))) J <- jacobian(theta) A <- diag(pc + length(gamma)) A[z.ind, z.ind] <- J Vm <- A %*% vc %*% t(A) dimnames(Vm) <- list(dn, dn) fit$Hessian<-H <- solve(Vm) ## fit$call<-sys.call() fit$call[[1]]<-as.name(.Generic) inffun<- gmini(res$par, logdiff=FALSE)%*%solve(H) if(any(!keep)){ ## subsets of raked designs inffun1<-matrix(0,ncol=NCOL(inffun), nrow=length(keep)) inffun1[keep,]<-inffun inffun<-inffun1 } fit$var<-svyrecvar(inffun, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) fit$df.residual<-degf(design)-length(beta) fit$survey.design<-design fit$na.action <- attr(m, "na.action") fit$contrasts <- cons fit$xlevels <- .getXlevels(Terms, m) class(fit) <- "svyolr" fit } vcov.svyolr<-function(object,...) object$var print.svyolr<-function (x, ...) { if (!is.null(cl <- x$call)) { cat("Call:\n") dput(cl, control = NULL) } if (length(coef(x))) { cat("\nCoefficients:\n") print(coef(x,intercept=FALSE), ...) } else { cat("\nNo coefficients\n") } cat("\nIntercepts:\n") print(x$zeta, ...) invisible(x) } coef.svyolr<-function(object,intercepts=TRUE,...) { if(intercepts) c(object$coefficients, object$zeta) else object$coefficients } summary.svyolr<-function (object, digits = max(3, .Options$digits - 3), correlation = FALSE, ...) { cc <- coef(object) pc <- length(coef(object, FALSE)) q <- length(object$zeta) coef <- matrix(0, pc + q, 3, dimnames = list(names(cc), c("Value", "Std. Error", "t value"))) coef[, 1] <- cc vc <- vcov(object) z.ind <- (pc + 1):(pc + q) gamma <- object$zeta theta <- c(gamma[1], log(diff(gamma))) ## used to have jacobian here but it's now in svyolr coef[, 2] <- sd <- sqrt(diag(vc)) coef[, 3] <- coef[, 1]/coef[, 2] object$coefficients <- coef object$pc <- pc object$digits <- digits if (correlation) object$correlation <- (vc/sd)/rep(sd, rep(pc + q, pc + q)) class(object) <- "summary.svyolr" object } print.summary.svyolr<-function (x, digits = x$digits, ...) { if (!is.null(cl <- x$call)) { cat("Call:\n") dput(cl, control = NULL) } coef <- format(round(x$coefficients, digits = digits)) pc <- x$pc if (pc > 0) { cat("\nCoefficients:\n") print(x$coefficients[seq_len(pc), , drop = FALSE], quote = FALSE, ...) } else { cat("\nNo coefficients\n") } cat("\nIntercepts:\n") print(coef[(pc + 1):nrow(coef), , drop = FALSE], quote = FALSE, ...) if (nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep = "") if (!is.null(correl <- x$correlation)) { cat("\nCorrelation of Coefficients:\n") ll <- lower.tri(correl) correl[ll] <- format(round(correl[ll], digits)) correl[!ll] <- "" print(correl[-1, -ncol(correl)], quote = FALSE, ...) } invisible(x) } model.frame.svyolr<-function(formula, ...){ mcall <- match.call(svyolr, formula$call) e<-environment(formula(formula)) formula<-eval(mcall$formula, envir=e) design<- eval(mcall$design, envir=e) mf<-model.frame(formula,model.frame(design)) w<-weights(design, type="sampling") if (is.null(naa<-attr(mf,"na.action"))) mf[["(weights)"]]<-w else mf[["(weights)"]]<-w[-naa] mf } ## taken from MASS::predict.polr predict.svyolr<-function (object, newdata, type = c("class", "probs"), ...) { type <- match.arg(type) if (missing(newdata)) Y <- object$fitted else { newdata <- as.data.frame(newdata) Terms <- delete.response(object$terms) m <- model.frame(Terms, newdata, na.action = function(x) x, xlev = object$xlevels) if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) X <- model.matrix(Terms, m, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(X), nomatch = 0L) if (xint > 0L) X <- X[, -xint, drop = FALSE] n <- nrow(X) q <- length(object$zeta) eta <- drop(X %*% object$coefficients) pfun <- switch(object$method, logistic = plogis, probit = pnorm, loglog = pgumbel, cloglog = pGumbel, cauchit = pcauchy) cumpr <- matrix(pfun(matrix(object$zeta, n, q, byrow = TRUE) - eta), , q) Y <- t(apply(cumpr, 1L, function(x) diff(c(0, x, 1)))) dimnames(Y) <- list(rownames(X), object$lev) } if (missing(newdata) && !is.null(object$na.action)) Y <- napredict(object$na.action, Y) if (type == "class") factor(max.col(Y), levels = seq_along(object$lev), labels = object$lev) else drop(Y) } ## taken from MASS::pGumbel pGumbel<-function (q, loc = 0, scale = 1, lower.tail = TRUE) { q <- (q - loc)/scale p <- exp(-exp(q)) if (lower.tail) 1 - p else p } survey/R/ht.R0000644000176200001440000000163011457435612012556 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/transform.R0000644000176200001440000000076411712610132014147 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/twophase2.R0000644000176200001440000006073715144471465014077 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,phase1_is_iid){ nstage<-NCOL(id) n<-sum(subset) rval<-matrix(0,n,n) if (phase1_is_iid) return(as(diag(n),"sparseMatrix")) sampsize<-NULL for(stage in 1:nstage){ uid<-rep(FALSE,NROW(id)) uid[subset]<-!duplicated(id[subset,stage]) insubset<-rowsum(as.integer(subset),id[,stage],reorder=FALSE)>0 idx<-match(id[subset,stage],id[subset,stage][uid[subset]]) sampsize<-ave(as.numeric(id[,stage]),strata[,stage],FUN=function(i) length(unique(i))) this_stage<-Dcheck_subset(strata[uid,stage],probs[uid,stage],sampsize, withreplacement)[idx,idx] rval<- twophaseDcheck(rval, this_stage) } rval } twophaseDcheck<-function(Dcheck1,Dcheck2){ as(-Dcheck1*Dcheck2+Dcheck1+Dcheck2,"sparseMatrix") } make_covmat<-function(design1,design2,subset){ if (!is.null(design1$dcheck)) phase1<-design1$dcheck[[1]]$dcheck else{ withreplacement<-is.null(design1$fpc$popsize) phase1<-Dcheck_multi_subset(design1$cluster, design1$strata, subset, design1$allprob, withreplacement, design1$phase1_is_iid) } if (!is.null(design2$dcheck)) phase2<-design2$dcheck[[1]]$dcheck else phase2<-Dcheck_multi(design2$cluster, design2$strata, design2$allprob) dcheck<-twophaseDcheck(phase1,phase2) list(phase1=phase1,phase2=phase2,full=dcheck) } ## ## Based on twophase(), so it computes some stuff that is no longer necessary. ## Will be pruned in the future. ## twophase2<-function(id,strata=NULL, probs=NULL, fpc=NULL, pps=NULL, subset, data){ data<-detibble(data) pps2<-NULL if(!is.null(pps)){ if (!is.null(pps[[1]])) stop("can't handle pps= at phase 1 yet") pps2<-pps[[2]] } phase1_nulls<-is.null(probs[[1]]) && is.null(strata[[1]]) && is.null(fpc)[[1]] d1<-svydesign(ids=id[[1]],strata=strata[[1]],weights=NULL, probs=probs[[1]],fpc=fpc[[1]],data=data) d1$phase1_is_iid<-phase1_nulls && !any(duplicated(d1$cluster[,1])) if(inherits(subset,"formula")) subset<-eval.parent(model.frame(subset,data=data,na.action=na.pass))[[1]] if(!is.logical(subset) && sort(unique(subset))==c(0,1)) subset<-as.logical(subset) if (any(is.na(subset))) stop("missing values in 'subset'") d1s<-svydesign(ids=id[[1]],strata=strata[[1]],weights=NULL, probs=probs[[1]],fpc=fpc[[1]],data=data[subset,]) d1s$prob<-d1$prob[subset] d1s$allprob<-d1$allprob[subset,,drop=FALSE] ## work out phase-two fpc if (is.null(fpc[[2]])){ complete.vars<-names(data)[apply(data, 2, function(v) all(!is.na(v)))] if (all(c(all.vars(id[[2]]), all.vars(strata[[2]])) %in% complete.vars)){ dfpc<-svydesign(ids=id[[2]], strata=strata[[2]], data=data, probs=NULL) popsize<-mapply(function(s,i) ave(!duplicated(i),s,FUN=sum), dfpc$strata, dfpc$cluster) rm(dfpc) } else { warning("Second-stage fpc not specified and not computable") popsize<-NULL } } else popsize<-NULL if (is.null(pps2)){ d2<-svydesign(ids=id[[2]], strata=strata[[2]], probs=probs[[2]], weights=NULL, fpc=fpc[[2]], data=data[subset,]) } else { d2<-svydesign(ids=id[[2]], strata=strata[[2]], weights=NULL, fpc=probs[[2]], data=data[subset,],pps=pps2) } ## ugly hack to get nicer labels if(!is.null(fpc[[2]])){ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), fpc=.(fpc[[2]]))) } else{ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), fpc=`*phase1*`)) } for(i in names(d2call)[-1]) d2call[[i]]<-d2call[[i]] d2$call<-d2call d1call<-bquote(svydesign(ids=.(id[[1]]), strata=.(strata[[1]]), probs=.(probs[[1]]), fpc=.(fpc[[1]]))) for(i in names(d1call)[-1]) d1call[[i]]<-d1call[[i]] d1$call<-d1call ## Add phase 2 fpc and probs if they were computed rather than specified. if (!is.null(popsize)) d2$fpc<-as.fpc(popsize[subset,,drop=FALSE],d2$strata,d2$cluster) if(is.null(probs[[2]]) && !is.null(d2$fpc$popsize)){ d2$allprob<-1/weights(d2$fpc,final=FALSE) d2$prob<-apply(as.data.frame(d2$allprob),1,prod) } d2$variables<-NULL deltacheck<-make_covmat(d1,d2, subset) rval<-list(phase1=list(full=d1,sample=d1s), phase2=d2, subset=subset, dcheck=deltacheck) rval$prob<-rval$phase1$sample$prob ## Are phase 2 PSUs the same as Phase 1 USUs, or smaller? rval$samescale<- !any(duplicated(d1s$cluster[,NCOL(d1s$cluster)][!duplicated(d2$cluster[,1])])) ## For each phase 1 sampling unit, need probability of being represented ## at phase 2. nunique<-function(x) sum(!duplicated(x)) m<-NCOL(rval$phase1$sample$cluster) if(d2$has.strata){ if (inherits(strata[[2]],"formula")) sa<-eval(attr(terms(strata[[2]]),"variables")[[2]],d1$variables) else sa<-d1$strata[,1] cm<-rval$phase1$full$cluster[,m] if (nunique(sa)!=nunique(sa[subset])) stop("Some phase-2 strata have zero sampling fraction") rval$usu<-ave(as.numeric(cm[subset]),sa[subset],FUN=nunique)/ave(as.numeric(cm),sa,FUN=nunique)[subset] } else { rval$usu<-drop(with(rval$phase1$sample,ave(as.numeric(cluster[,m]), strata[,m], FUN=nunique))/rval$phase1$full$fpc$sampsize[rval$subset]) } if (length(rval$phase1$sample$prob)==length(d2$prob)) rval$prob<-rval$phase1$sample$prob*d2$prob else{ rval$prob<-rep(Inf,length(rval$phase1$sample$prob)) rval$prob[subset]<-rval$prob[subset]*d2$prob } rval$call<-sys.call(-1) 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) } dimnames.twophase2<-function(x) dimnames(x$phase1$full$variables) 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(psum0) 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/surveyrep.R0000755000176200001440000017776715132311700014224 0ustar liggesusers hadamard.doubler<-function(H){ rbind(cbind(H,H),cbind(H,1-H)) } hadamard<- function(n){ m<-n-(n %% 4) ## hadamard.list, hadamard.sizes in sysdata.rda precooked<- which(m < hadamard.sizes & m+4 >=hadamard.sizes) if (length(precooked)) return(hadamard.list[[min(precooked)]]) if (all(m4) H<-paley(n,sizes[bestfit]) if (is.null(H)){ ndoubles<-ceiling(log(sizes/hadamard.sizes, 2))[bestfit] H<-hadamard.list[[bestfit]] for(i in seq(length=ndoubles)) H<-hadamard.doubler(H) } H } jk1weights<-function(psu, fpc=NULL, fpctype=c("population","fraction","correction"), compress=TRUE){ fpctype<-match.arg(fpctype) unq<-unique(psu) n<-length(unq) if (is.null(fpc)) fpc<-1 else { fpc<-unique(fpc) if (length(fpc)>1) stop("More than one fpc value given") if (fpc<0) stop("Negative finite population correction") if (fpctype=="population" && fpcnstrat) stop("More distinct fpc values than strata") fpc<-sapply(sunq, function(ss) fpc[match(ss,strata)]) names(fpc)<-as.character(sunq) } else if (length(fpc)==1) { fpc<-rep(fpc,nstrat) names(fpc)<-as.character(sunq) } else if (length(fpc)==nstrat){ nn<-names(fpc) if (is.null(nn)) names(fpc)<-as.character(sunq) if (!all(names(fpc) %in% as.character(sunq))) stop("fpc has names that do not match the stratum identifiers") } if (compress){ repweights<-matrix(1,ncol=length(unq),nrow=length(unq)) } else { repweights<-matrix(1,ncol=length(unq), nrow=length(psu)) } counter<-0 rscales<-numeric(length(unq)) for(ss in as.character(sunq)){ thisfpc<-fpc[match(ss,names(fpc))] theseweights<-jk1weights(psu[strata %in% ss], fpc=thisfpc, fpctype=fpctype,compress=compress) nc<-if (compress) NCOL(theseweights$repweights$weights) else NCOL(theseweights$repweights) if (nc==1 && thisfpc!=0){ ## lonely PSUs if (lonely.psu=="fail") stop("Stratum",ss,"has only one PSU") if (lonely.psu=="remove") next if (lonely.psu=="certainty") next if (lonely.psu=="average") next if (lonely.psu=="adjust"){ nc<-1 if (compress) repweights[, counter+nc]<-ifelse(strata[!duplicated(psu)] %in% ss, 0, nstrat/(nstrat-1)) else repweights[ counter+nc]<-ifelse(strata %in% ss, 0, nstrat/(nstrat-1)) rscales[counter+nc]<-(nstrat-1)/nstrat counter<-counter+nc next } } if (compress) repweights[strata[!duplicated(psu)] %in% ss,counter+seq(length=nc)]<-theseweights$repweights$weights else repweights[strata %in% ss, counter+seq(length=nc)]<-theseweights$repweights rscales[counter+seq(length=nc)]<-theseweights$scale counter<-counter+nc } if (counter==0) stop("All strata were exhaustively sampled: you have the whole population") scale<-1 if (counter2) && large=="fail") stop("Some strata have more than 2 PSUs") unq<-which(!duplicated(psu)) sunq<-strata[unq] psunq<-psu[unq] weights<-matrix(ncol=2,nrow=length(unq)) weightstrata<-numeric(length(unq)) if (length(match)==length(strata)) match<-match[unq] if (is.null(match)) match<-unq ## default is to match by dataset order oo<-order(sunq,match) upto <- 0 if(any(ssize==1)){ smallstrata<-names(ssize)[ssize==1] if(small=="split"){ weights[sunq %in% smallstrata,1]<- 0.5 weights[sunq %in% smallstrata,2]<- 0.5 weightstrata[sunq %in% smallstrata]<-1:length(smallstrata) upto<-length(smallstrata) } else { ##small=="merge" if (length(smallstrata) > 1){ weights[oo,][sunq[oo] %in% smallstrata, 1]<-rep(0:1,length.out=length(smallstrata)) weights[oo,][sunq[oo] %in% smallstrata, 2]<-rep(1:0,length.out=length(smallstrata)) if(length(smallstrata) %% 2==0) weightstrata[oo][sunq[oo] %in% smallstrata]<-rep(1:(length(smallstrata) %/%2), 2) else weightstrata[oo][sunq[oo] %in% smallstrata]<-c(1,rep(1:(length(smallstrata) %/%2), 2)) upto<-length(smallstrata) %/% 2 } else stop("Can't merge with a single small stratum") } } if (any(ssize>2)){ largestrata<-names(ssize)[ssize>2] if (large=="split"){ if (any(ssize[largestrata] %%2 ==1)) stop("Can't split with odd numbers of PSUs in a stratum") ## make substrata of size 2 for(ss in largestrata){ weights[oo,][sunq[oo] %in% ss, 1]<-rep(0:1,length.out=ssize[ss]) weights[oo,][sunq[oo] %in% ss, 2]<-rep(1:0,length.out=ssize[ss]) weightstrata[oo][sunq[oo] %in% ss]<-upto+rep(1:(ssize[ss] %/%2),each=2) upto<-upto+(ssize[ss] %/% 2) } } else { ## make two substrata. halfsize<-ssize[largestrata] %/%2 otherhalfsize<-ssize[largestrata] - halfsize reps<-as.vector(rbind(halfsize,otherhalfsize)) nlarge<-length(halfsize) weights[oo,][sunq[oo] %in% largestrata, 1]<-rep(rep(0:1,nlarge),reps) weights[oo,][sunq[oo] %in% largestrata, 2]<-rep(rep(1:0,nlarge),reps) weightstrata[oo][sunq[oo] %in% largestrata]<-upto+rep(1:length(largestrata),ssize[largestrata]) upto<-upto+length(largestrata) } } if(any(ssize==2)){ goodstrata<-names(ssize)[ssize==2] weights[oo,][sunq[oo] %in% goodstrata, 1]<-rep(0:1,length(goodstrata)) weights[oo,][sunq[oo] %in% goodstrata, 2]<-rep(1:0,length(goodstrata)) weightstrata[oo][sunq[oo] %in% goodstrata]<-upto+rep(1:length(goodstrata),each=2) upto<-upto+length(goodstrata) } if (is.null(hadamard.matrix)){ H<-hadamard(upto) } else { ## the user supplied hadamard.matrix ## Check that it is a binary matrix and satifies the ## Hadamard determinant property if (!is.matrix(hadamard.matrix) || nrow(hadamard.matrix)1 && type!="mrbbootstrap"){ fpc<-fpc[,1] warning("Finite population corrections after first stage have been dropped") } if (getOption("survey.drop.replicates")){ selfrep<-design$fpc$popsize[,1]==design$fpc$sampsize[,1] } } else{ fpc<-design$fpc[,2] names(fpc)<-design$fpc[,1] } } } else { if (type %in% c("Fay","BRR","subbootstrap")) stop(paste("fpc information cannot be used for type=",type)) if (is.null(fpctype)) stop("fpctype must be supplied if fpc is supplied") } if (type=="JK1"){ ##JK1 r<-jk1weights(design$cluster[,1], fpc=fpc,fpctype=fpctype, compress=compress) repweights<-r$repweights scale<-drop(r$scale) if (inherits(repweights,"repweights_compressed")) rscales<-rep(1, NCOL(repweights$weights)) else rscales<-rep(1, NCOL(repweights)) type<-"JK1" pweights<-1/design$prob } else if (type %in% c("BRR","Fay")){ ##BRR if (inherits(design,"survey.design2")) repweights<-brrweights(design$strata[,1], design$cluster[,1],...,fay.rho=fay.rho, compress=compress,only.weights=TRUE) else repweights<-brrweights(design$strata, design$cluster[,1],...,fay.rho=fay.rho, compress=compress,only.weights=TRUE) pweights<-1/design$prob if (length(pweights)==1) pweights<-rep(pweights, NROW(design$variables)) if (fay.rho==0) type<-"BRR" else type<-"Fay" rscales<-rep(1,ncol(repweights)) scale<-1/(ncol(repweights)*(1-fay.rho)^2) } else if (type=="JKn"){ ##JKn if (inherits(design,"survey.design2")) r<-jknweights(design$strata[,1],design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress) else r<-jknweights(design$strata,design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress) pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales } else if (type=="bootstrap"){ ##bootstrap if (inherits(design,"survey.design2")) r<-bootweights(design$strata[,1],design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress,...) else r<-bootweights(design$strata,design$cluster[,1], fpc=fpc, fpctype=fpctype, compress=compress,...) pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales }else if (type=="subbootstrap"){ ##bootstrap if (inherits(design,"survey.design2")) r<-subbootweights(design$strata[,1],design$cluster[,1],compress=compress,...) else r<-subbootweights(design$strata,design$cluster[,1],compress=compress,...) pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales } else if (type=="mrbbootstrap"){ if (inherits(design,"survey.design2")) r<-mrbweights(design$cluster,design$strata,design$fpc,...) else stop("MRB bootstrap not available for obsolete svydesign objects") pweights<-1/design$prob repweights<-r$repweights scale<-r$scale rscales<-r$rscales } else stop("Can't happen") rval<-list(repweights=repweights, pweights=pweights, type=type, rho=fay.rho,scale=scale, rscales=rscales, call=sys.call(), combined.weights=FALSE, selfrep=selfrep,mse=mse) rval$variables <- design$variables class(rval)<-"svyrep.design" rval$degf<-degf(rval) rval } svrepdesign<-function(variables, repweights, weights,data=NULL,degf=NULL,...) UseMethod("svrepdesign",data) svrepdesign.default<-function(variables=NULL,repweights=NULL, weights=NULL, data=NULL, degf=NULL,type=c("BRR","Fay","JK1", "JKn","bootstrap", "ACS","successive-difference","JK2","other"), combined.weights=TRUE, rho=NULL, bootstrap.average=NULL, scale=NULL,rscales=NULL,fpc=NULL, fpctype=c("fraction","correction"), mse=getOption("survey.replicates.mse"),...) { type<-match.arg(type) if(type=="Fay" && is.null(rho)) stop("With type='Fay' you must supply the correct rho") if (type %in% c("JK1","JKn","ACS","successive-difference","JK2") && !is.null(rho)) warning("rho not relevant to JK1 design: ignored.") if (type %in% c("other") && !is.null(rho)) warning("rho ignored.") if(is.null(variables)) variables<-data if(inherits(variables,"formula")){ mf<-substitute(model.frame(variables, data=data,na.action=na.pass)) variables<-eval.parent(mf) } variables<-detibble(variables) if(inherits(repweights,"formula")){ mf<-substitute(model.frame(repweights, data=data)) repweights<-eval.parent(mf) } if(is.character(repweights)){##regular expression wtcols<-grep(repweights,names(data)) repweights<-data[,wtcols] } if (is.null(repweights)) stop("You must provide replication weights") if (anyNA(repweights)) stop("Missing values not allowed in 'repweights'") repweights<-detibble(repweights) if(inherits(weights,"formula")){ mf<-substitute(model.frame(weights, data=data)) weights<-eval.parent(mf) if (anyNA(weights)) stop("Missing values not allowed in 'weights'") weights<-drop(as.matrix(weights)) } if (is.null(weights)){ warning("No sampling weights provided: equal probability assumed") weights<-rep(1,NROW(repweights)) } if (!is.null(degf)){ if (!is.numeric(degf)) stop("degf must be NULL or numeric") if (degf>ncol(repweights)) warning(paste0("degf (", degf,") is larger than number of replicates (",ncol(repweights),")")) if (degf<=1) warning("degf is <=1") attr(degf,"set-by-user")<-TRUE } repwtmn<-mean(apply(repweights,2,mean)) wtmn<-mean(weights) probably.combined.weights<-(repwtmn>5) & (wtmn/repwtmn<5) probably.not.combined.weights<-(repwtmn<5) & (wtmn/repwtmn>5) if (combined.weights & probably.not.combined.weights) warning(paste("Data do not look like combined weights: mean replication weight is", repwtmn," and mean sampling weight is",wtmn)) if (!combined.weights & probably.combined.weights) warning(paste("Data look like combined weights: mean replication weight is", repwtmn," and mean sampling weight is",wtmn)) if (!is.null(rscales) && !(length(rscales) %in% c(1, ncol(repweights)))){ stop(paste("rscales has length ",length(rscales),", should be ncol(repweights)",sep="")) } if (type %in% c("ACS", "successive-difference")){ if(!is.null(scale) | !is.null(rscales)) warning(paste("with type",type,"scale= and rscales= are not needed and will be ignored")) } if (type == "BRR"){ ## the default, so check it hasn't been accidentally defaulted to if (!is.null(scale)) warning("type='BRR' does not use 'scale=' argument") if (!is.null(rho)) warning("type='BRR' does not use 'rho=' argument, you may want type='Fay'") scale<-1/ncol(repweights) } if (type=="Fay") scale <-1/(ncol(repweights)*(1-rho)^2) if (type=="bootstrap"){ if(is.null(bootstrap.average)) bootstrap.average<-1 if (is.null(scale)) scale<-bootstrap.average/(ncol(repweights)-1) if (is.null(rscales)) rscales<-rep(1,ncol(repweights)) } if (type=="JK1" && is.null(scale)) { if(!combined.weights){ warning("scale (n-1)/n not provided: guessing from weights") scale<-1/max(repweights[,1]) } else { probably.n = ncol(repweights) scale<- (probably.n-1)/probably.n warning("scale (n-1)/n not provided: guessing n=number of replicates") } } if (type =="JKn" && is.null(rscales)){ if (!combined.weights) { warning("rscales (n-1)/n not provided:guessing from weights") rscales<-1/apply(repweights,2,max) } else stop("Must provide rscales for combined JKn weights") } if (type %in% c("ACS","successive-difference")){ rscales<-rep(1, ncol(repweights)) scale<-4/ncol(repweights) } if (type =="JK2"){ warning(paste("with type",type,"scale= and rscales= are not needed and will be ignored")) rscales<-rep(1, ncol(repweights)) scale<-1 } if (type=="other" && (is.null(rscales) || is.null(scale))){ if (is.null(rscales)) rscales<-rep(1,NCOL(repweights)) if (is.null(scale)) scale<-1 warning("scale or rscales not specified, set to 1") } if (is.null(rscales)) rscales<-rep(1,NCOL(repweights)) if (!is.null(fpc)){ if (missing(fpctype)) stop("Must specify fpctype") fpctype<-match.arg(fpctype) if (type %in% c("BRR","Fay","JK2","ACS","successive-difference")) stop("fpc not available for this type") if (type %in% "bootstrap") stop("Separate fpc not needed for bootstrap") if (length(fpc)!=length(rscales)) stop("fpc is wrong length") if (any(fpc>1) || any(fpc<0)) stop("Illegal fpc value") fpc<-switch(fpctype,correction=fpc,fraction=1-fpc) rscales<-rscales*fpc } if (is.null(scale)) scale<-1 rval<-list(type=type, scale=scale, rscales=rscales, rho=rho,call=sys.call(), combined.weights=combined.weights) rval$variables<-variables rval$pweights<-weights if (!inherits(repweights,"repweights")) class(rval)<-"repweights" rval$repweights<-repweights class(rval)<-"svyrep.design" if (!is.null(degf)) rval$degf<-degf else rval$degf<-degf(rval) if (type=="ACS"){ if (missing(mse) && !mse){ mse<-TRUE message("mse=TRUE assumed for type=\"ACS\"") } else if (!mse){ warning("The ACS uses MSE standard errors but you have specified mse=FALSE") } } 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 ") if (x$type=="successive-difference") cat("Successive difference ") if (x$type=="ACS") cat("American Community Survey ") if(x$type=="JK2") cat("JK2 jackknife ") if(x$type=="other") cat("Replicate weight design ") 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] if (is.null(attr(x$degf,"set-by-user"))) ##keep it if user-specified x$degf<-NULL x$degf<-degf(x) if (x$degf>length(x$pweights)) warning("Fewer observations than degrees of freedom in subset") } 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=as.vector(rval)) attr(rval, "statistic")<-"variance" if (return.replicates){ attr(repvars,"scale")<-design$scale attr(repvars,"rscales")<-design$rscales attr(repvars,"mse")<-design$mse rval<-list(variance=rval, replicates=repvars) } class(rval)<-c("svrepvar","svrepstat") rval } print.svrepvar<-function (x, covariance=FALSE, ...) { if (is.list(x)) x<-x[[1]] vv <- as.matrix(attr(x, "var")) if (covariance){ nms<-outer(rownames(x),colnames(x),paste,sep=":") m<-cbind(as.vector(x), sqrt(diag(vv))) rownames(m)<-nms } else{ ii <- which(diag(sqrt(length(x)))>0) m <- cbind(x[ii], sqrt(diag(vv))[ii]) if(length(ii)==1) rownames(m)<-rownames(x) } colnames(m) <- c(attr(x, "statistic"), "SE") printCoefmat(m) } as.matrix.svrepvar<-function(x,...) if (is.list(x)) unclass(x[[1]]) else unclass(x) svymean.svyrep.design<-svrepmean<-function(x,design, na.rm=FALSE, rho=NULL, return.replicates=FALSE,deff=FALSE,...) { if (!exists(".Generic",inherits=FALSE)) .Deprecated("svymean") if (!inherits(design,"svyrep.design")) stop("design is not a replicate survey design") if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] x<-x[nas==0,,drop=FALSE] } wts<-design$repweights scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed("rho") if (!design$combined.weights) pw<-design$pweights else pw<-1 rval<-colSums(design$pweights*x)/sum(design$pweights) if (getOption("survey.drop.replicates") && !is.null(design$selfrep) && all(design$selfrep)){ v<-matrix(0,length(rval),length(rval)) repmeans<-NULL } else { if (inherits(wts, "repweights_compressed")){ repmeans<-matrix(ncol=NCOL(x), nrow=ncol(wts$weights)) for(i in 1:ncol(wts$weights)){ wi<-wts$weights[wts$index,i] repmeans[i,]<-t(colSums(wi*x*pw)/sum(pw*wi)) } } else { repmeans<-matrix(ncol=NCOL(x), nrow=ncol(wts)) for(i in 1:ncol(wts)){ repmeans[i,]<-t(colSums(wts[,i]*x*pw)/sum(pw*wts[,i])) } } repmeans<-drop(repmeans) v <- svrVar(repmeans, scale, rscales,mse=design$mse, coef=rval) } attr(rval,"var") <-v attr(rval, "statistic")<-"mean" if (return.replicates){ attr(repmeans,"scale")<-design$scale attr(repmeans,"rscales")<-design$rscales attr(repmeans,"mse")<-design$mse rval<-list(mean=rval, replicates=repmeans) } if (is.character(deff) || deff){ nobs<-length(design$pweights) npop<-sum(design$pweights) vsrs<-unclass(svyvar(x,design,na.rm=na.rm, return.replicates=FALSE,estimate.only=TRUE))/length(design$pweights) if (deff!="replace") vsrs<-vsrs*(npop-nobs)/npop attr(rval,"deff") <- v/vsrs } class(rval)<-"svrepstat" rval } svytotal.svyrep.design<-svreptotal<-function(x,design, na.rm=FALSE, rho=NULL, return.replicates=FALSE, deff=FALSE,...) { if (!exists(".Generic",inherits=FALSE)) .Deprecated("svytotal") if (!inherits(design,"svyrep.design")) stop("design is not a replicate survey design") if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else{ if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] x<-x[nas==0,,drop=FALSE] } wts<-design$repweights scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed("rho") if (!design$combined.weights) pw<-design$pweights else pw<-1 rval<-colSums(design$pweights*x) if (is.character(deff) || deff){ nobs<-length(design$pweights) npop<-sum(design$pweights) vsrs<-unclass(svyvar(x,design,na.rm=na.rm, return.replicates=FALSE,estimate.only=TRUE))*sum(design$pweights)^2/nobs if (deff!="replace") vsrs<-vsrs*(npop-nobs)/npop } if (getOption("survey.drop.replicates") && !is.null(design$selfrep) && all(design$selfrep)){ v<-matrix(0,nrow=NROW(rval),ncol=NROW(rval)) repmeans<-NULL } else { if (inherits(wts, "repweights_compressed")){ if (getOption("survey.drop.replicates") && !is.null(design$selfrep)){ wts$index<-wts$index[!design$selfrep] x<-x[!design$selfrep,,drop=FALSE] pw<-pw[!design$selfrep] } repmeans<-matrix(ncol=NCOL(x), nrow=ncol(wts$weights)) for(i in 1:ncol(wts$weights)){ wi<-wts$weights[wts$index,i] repmeans[i,]<-t(colSums(wi*x*pw)) } } else { if (getOption("survey.drop.replicates") && !is.null(design$selfrep)){ wts<-wts[!design$selfrep,,drop=FALSE] x<-x[!design$selfrep,,drop=FALSE] pw<-pw[!design$selfrep] } repmeans<-matrix(ncol=NCOL(x), nrow=ncol(wts)) for(i in 1:ncol(wts)){ repmeans[i,]<-t(colSums(wts[,i]*x*pw)) } } repmeans<-drop(repmeans) v <- svrVar(repmeans, scale, rscales,mse=design$mse,coef=rval) } attr(rval,"var") <- v attr(rval, "statistic")<-"total" if (return.replicates){ attr(repmeans,"scale")<-design$scale attr(repmeans,"rscales")<-design$rscales attr(repmeans,"mse")<-design$mse rval<-list(mean=rval, replicates=repmeans) } if (is.character(deff) || deff) attr(rval,"deff") <- v/vsrs class(rval)<-"svrepstat" rval } svycoxph.svyrep.design<-function(formula, design, subset=NULL,rescale=NULL,...,return.replicates=FALSE,na.action, multicore=getOption("survey.multicore")){ subset<-substitute(subset) subset<-eval(subset, design$variables, parent.frame()) if (!is.null(subset)) design<-design[subset,] if (multicore && !requireNamespace(parallel,quietly=TRUE)) multicore<-FALSE data<-design$variables g<-match.call() g$design<-NULL g$return.replicates<-NULL g$weights<-quote(.survey.prob.weights) g[[1]]<-quote(coxph) g$x<-TRUE scale<-design$scale rscales<-design$rscales if (is.null(rescale)) pwts<-design$pweights/mean(design$pweights) else if (rescale) pwts<-design$pweights/sum(design$pweights) if (is.data.frame(pwts)) pwts<-pwts[[1]] if (!all(all.vars(formula) %in% names(data))) stop("all variables must be in design= argument") .survey.prob.weights<-pwts full<-with(data,eval(g)) if (inherits(full, "coxph.penal")) warning("svycoxph does not support penalised terms") nas<-attr(full$model, "na.action") betas<-matrix(ncol=length(coef(full)),nrow=ncol(design$repweights)) wts<-design$repweights if (!design$combined.weights){ pw1<-pwts rwt<-pw1/mean(pw1) } else{ rwt<-1/mean(as.vector(wts[,1])) pw1<-rwt } if (length(nas)) wts<-wts[-nas,] beta0<-coef(full) ## coxph doesn't allow zero weights EPSILON<-1e-10 if(full$method %in% c("efron","breslow")){ if (attr(full$y,"type")=="right") fitter<-coxph.fit else if(attr(full$y,"type")=="counting") fitter<-survival::agreg.fit else stop("invalid survival type") } else fitter<-survival::agexact.fit ## g$init<-beta0 ## for(i in 1:ncol(wts)){ ## .survey.prob.weights<-as.vector(wts[,i])*pw1+EPSILON ## betas[i,]<-with(data,coef(eval(g))) ## } if (multicore){ betas<-do.call(rbind, parallel::mclapply(1:ncol(wts), function(i){ fitter(full$x, full$y, full$strata, full$offset, coef(full), coxph.control(), as.vector(wts[,i])*pw1+EPSILON, full$method, names(full$resid))$coef })) }else{ for(i in 1:ncol(wts)){ betas[i,]<-fitter(full$x, full$y, full$strata, full$offset, coef(full), coxph.control(), as.vector(wts[,i])*pw1+EPSILON, full$method, names(full$resid))$coef } } if (length(nas)) design<-design[-nas,] v<-svrVar(betas,scale, rscales, mse=design$mse, coef=beta0) full$var<-v if (return.replicates){ attr(betas,"scale")<-design$scale attr(betas,"rscales")<-design$rscales attr(betas,"mse")<-design$mse full$replicates<-betas } full$naive.var<-NULL full$wald.test<-coef(full)%*%solve(full$var,coef(full)) full$loglik<-c(NA,NA) full$rscore<-NULL full$score<-NA full$degf.residual<-degf(design)+1-length(coef(full)[!is.na(coef(full))]) class(full)<-c("svrepcoxph","svycoxph",class(full)) full$call<-match.call() full$printcall<-sys.call(-1) full$survey.design<-design full } svrepglm<-svyglm.svyrep.design<-function(formula, design, subset=NULL,family=stats::gaussian(),start=NULL, rescale=NULL, ..., rho=NULL, return.replicates=FALSE, na.action, multicore=getOption("survey.multicore")){ if (!exists(".Generic",inherits=FALSE)) .Deprecated("svyglm") subset<-substitute(subset) subset<-eval(subset, design$variables, parent.frame()) if (any(is.na(subset))) stop("subset must not contain NA values") if (!is.null(subset)) design<-design[subset,] if(multicore && !requireNamespace("parallel",quietly=TRUE)) multicore<-FALSE data<-design$variables g<-match.call() formula<-eval.parent(formula) environment(formula)<-environment() g$formula<-formula g$data<-quote(data) g$design<-NULL g$var<-g$rho<-g$return.replicates<-g$multicore<-NULL g$weights<-quote(.survey.prob.weights) g[[1]]<-quote(glm) g$model<-TRUE g$x<-TRUE g$y<-TRUE g$rescale<-NULL scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed(rho) if (is.null(rescale)) pwts<-design$pweights/mean(design$pweights) else if (rescale) ## old behaviour pwts<-design$pweights/sum(design$pweights) else pwts<-design$pweights ## no rescaling if (is.data.frame(pwts)) pwts<-pwts[[1]] if (!all(all.vars(formula) %in% names(data))) stop("all variables must be in design= argument") .survey.prob.weights<-pwts full<-with(data,eval(g)) full$naive.cov<-summary(full)$cov.unscaled nas<-attr(full$model, "na.action") if(getOption("survey.drop.replicates") && !is.null(design$selfrep) && all(design$selfrep)){ v<-matrix(0,ncol=length(coef(full)),nrow=length(coef(full))) betas<-NULL } else { betas<-matrix(ncol=length(coef(full)), nrow=ncol(design$repweights)) if (!design$combined.weights) pw1<-pwts else pw1<-rep(1,length(pwts)) wts<-design$repweights if (length(nas)){ wts<-wts[-nas,] pw1<-pw1[-nas] } XX<-full$x YY<-full$y beta0<-coef(full) if (!all(is.finite(beta0))) stop(paste("Infinite/NA values in estimate (",paste(beta0,collapse=","),")")) if(is.null(full$offset)) offs<-rep(0,nrow(XX)) else offs<-full$offset incpt<-as.logical(attr(terms(full),"intercept")) fam<-full$family contrl<-full$control if (multicore){ betas<-do.call(rbind,parallel::mclapply(1:ncol(wts), function(i){ wi<-as.vector(wts[,i])*pw1 if(all(wi==0)) return(NaN*beta0) 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 if(all(wi==0)) return(NaN*beta0) 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$aic<-NA full$survey.design<-design full } print.summary.svyglm<-function (x, digits = max(3, getOption("digits") - 3), symbolic.cor = x$symbolic.cor, signif.stars = getOption("show.signif.stars"), ...) { ##if (!exists("printCoefmat")) printCoefmat<-print.coefmat cat("\nCall:\n") cat(paste(deparse(x$call), sep = "\n", collapse = "\n"), "\n\n", sep = "") cat("Survey design:\n") print(x$survey.design$call) if (!is.null(df <- x$df) && (nsingular <- df[3] - df[1])) cat("\nCoefficients: (", nsingular, " not defined because of singularities)\n", sep = "") else cat("\nCoefficients:\n") coefs <- x$coefficients if (!is.null(aliased <- is.na(x$coefficients[,1])) && any(aliased)) { cn <- names(aliased) coefs <- matrix(NA, length(aliased), 4, dimnames = list(cn, colnames(coefs))) coefs[!aliased, ] <- x$coefficients } printCoefmat(coefs, digits = digits, signif.stars = signif.stars, na.print = "NA", ...) if (x$df.resid<=0) cat("\nZero or negative residual df; p-values not defined\n") cat("\n(Dispersion parameter for ", x$family$family, " family taken to be ", format(x$dispersion), ")\n\n", "Number of Fisher Scoring iterations: ", x$iter, "\n", sep = "") correl <- x$correlation if (!is.null(correl)) { p <- NCOL(correl) if (p > 1) { cat("\nCorrelation of Coefficients:\n") if (is.logical(symbolic.cor) && symbolic.cor) { print(symnum(correl, abbr.colnames = NULL)) } else { correl <- format(round(correl, 2), nsmall = 2, digits = digits) correl[!lower.tri(correl)] <- "" print(correl[-1, -p, drop = FALSE], quote = FALSE) } } } cat("\n") invisible(x) } predict.svrepglm <- function(object, newdata=NULL, total=NULL, type = c("link", "response","terms"), se.fit=(type!="terms"), vcov=FALSE, return.replicates=!is.null(object$replicates),...){ if(is.null(newdata)) newdata<-model.frame(object$survey.design) type<-match.arg(type) if (type=="terms") return(predterms(object,se=se.fit,...)) tt<-delete.response(terms(formula(object))) mf<-model.frame(tt,data=newdata) mm<-model.matrix(tt,mf) if (!is.null(total) && attr(tt,"intercept")){ mm[,attr(tt,"intercept")]<-mm[,attr(tt,"intercept")]*total } eta<-drop(mm %*% coef(object)) d<-drop(object$family$mu.eta(eta)) eta<-switch(type, link=eta, response=object$family$linkinv(eta)) if(se.fit){ if(vcov){ vv<-mm %*% vcov(object) %*% t(mm) attr(eta,"var")<-switch(type, link=vv, response=d*(t(vv*d))) } else { ## FIXME make this more efficient vv<-drop(rowSums((mm %*% vcov(object)) * mm)) attr(eta,"var")<-switch(type, link=vv, response=drop(d*(t(vv*d)))) } } attr(eta,"statistic")<-type if (return.replicates){ if (is.null(object$replicates)) { warning("replicates are not present in the fit") } else{ pred.replicates<-t(apply(object$replicates,1, function(beta){ etai<-drop(mm %*% beta) switch(type, link=etai, response=object$family$linkinv(etai)) })) attr(pred.replicates,"scale")<-attr(object$replicates,"scale") attr(pred.replicates,"rscales")<-attr(object$replicates,"rscales") attr(pred.replicates,"mse")<-attr(object$replicates,"mse") eta<-list(eta,replicates=pred.replicates) } } class(eta)<-"svrepstat" eta } svyratio.svyrep.design<-svrepratio<-function(numerator=formula,denominator, design, na.rm=FALSE,formula,covmat=FALSE, return.replicates=FALSE,deff=FALSE,...){ if (!exists(".Generic")) .Deprecated("svyratio") if (!inherits(design, "svyrep.design")) stop("design must be a svyrepdesign object") if (inherits(numerator,"formula")) numerator<-model.frame(numerator,design$variables, na.action=na.pass) else if(typeof(numerator) %in% c("expression","symbol")) numerator<-eval(numerator, design$variables) if (inherits(denominator,"formula")) denominator<-model.frame(denominator,design$variables, na.action=na.pass) else if(typeof(denominator) %in% c("expression","symbol")) denominator<-eval(denominator, design$variables) nn<-NCOL(numerator) nd<-NCOL(denominator) all<-cbind(numerator,denominator) nas<-!complete.cases(all) if (na.rm==TRUE){ design<-design[!nas,] all<-all[!nas,,drop=FALSE] numerator<-numerator[!nas,,drop=FALSE] denominator<-denominator[!nas,,drop=FALSE] } allstats<-svymean(all, design, return.replicates=TRUE) rval<-list(ratio=outer(allstats$mean[1:nn], allstats$mean[nn+1:nd], "/")) if (is.null(allstats$replicates)){ ##only self-representing strata. vars<-matrix(0,nrow=nn,ncol=nd) }else { vars<-matrix(nrow=nn,ncol=nd) if (deff) deffs<-matrix(nrow=nn,ncol=nd) for(i in 1:nn){ for(j in 1:nd){ vars[i,j]<-svrVar(allstats$replicates[,i]/allstats$replicates[,nn+j], design$scale, design$rscales,mse=design$mse,coef=rval$ratio[i,j]) if (deff=="replace" || deff) deffs[i,j]<-deff(svytotal(numerator[,i]-rval$ratio[i,j]*denominator[,j],design,deff=deff)) } } } if (covmat){ if (is.null(allstats$replicates)) vcovmat<-matrix(0,nn*nd,nn*nd) else vcovmat<-as.matrix(svrVar(allstats$replicates[,rep(1:nn,nd)]/allstats$replicates[,nn+rep(1:nd,each=nn)], design$scale, design$rscales,mse=design$mse,coef=as.vector(rval$ratio))) rownames(vcovmat)<-names(numerator)[rep(1:nn,nd)] colnames(vcovmat)<-names(denominator)[rep(1:nd,each=nn)] rval$vcov<-vcovmat } if (return.replicates) { reps<-allstats$replicates[, rep(1:nn, nd)]/allstats$replicates[, nn + rep(1:nd, each = nn)] attr(reps,"scale")<-design$scale attr(reps,"rscales")<-design$rscales attr(reps,"mse")<-design$mse rval$replicates<-reps } rval$var<-vars attr(rval,"call")<-sys.call() if (deff=="replace" || deff) attr(rval,"deff")<-deffs class(rval)<-"svyratio" rval } vcov.svyratio <- function(object, ...){ covmat<-object$vcov if (is.null(covmat)){ covmat<-matrix(NaN,length(object$var),length(object$var)) diag(covmat)<-as.vector(object$var) } nms<-as.vector(outer(rownames(object$ratio),colnames(object$ratio),paste,sep="/")) dimnames(covmat)<-list(nms,nms) covmat } residuals.svrepglm<-function(object,type = c("deviance", "pearson", "working", "response", "partial"),...){ type<-match.arg(type) if (type=="pearson"){ y <- object$y mu <- object$fitted.values wts <- object$prior.weights r<-(y - mu) * sqrt(wts)/(sqrt(object$family$variance(mu))*sqrt(object$survey.design$pweights/mean(object$survey.design$pweights))) if (is.null(object$na.action)) r else naresid(object$na.action, r) } else NextMethod() } logLik.svrepglm<-function(object,...){ stop("svrepglm not fitted by maximum likelihood.") } vcov.svyrep.design<-function (object, replicates, centre, ...) { if (object$mse) svrVar(replicates, scale = object$scale, rscales = object$rscales, mse = object$mse, coef=centre) else svrVar(replicates, scale = object$scale, rscales = object$rscales, mse = object$mse) } withReplicates<-function(design, theta, ..., return.replicates=FALSE){ UseMethod("withReplicates",design) } withReplicates.svrepvar<-function(design, theta, ...,return.replicates=FALSE){ if (is.null(reps<-design$replicates)) stop("object does not contain replicate estimates") p<-sqrt(NCOL(reps)) if (is.function(theta)){ full<-theta(design[[1]],...) thetas<-drop(t(apply(reps,1, function(rr) theta(matrix(rr,p,p), ...)))) } else{ full<-eval(theta, list(.replicate=design[[1]])) thetas<-drop(t(apply(reps,1, function(rr) eval(theta, list(.replicate=matrix(rr,p,p)))))) } v<-svrVar(thetas, attr(reps,"scale"), attr(reps,"rscales"), mse=attr(reps,"mse"), coef=full) attr(full,"var")<-v attr(full,"statistic")<-"theta" if (return.replicates){ attr(thetas,"scale")<-attr(reps,"scale") attr(thetas,"rscales")<-attr(reps,"rscales") attr(thetas,"mse")<-attr(reps,"mse") rval<-list(theta=full, replicates=thetas) } else { rval<-full } class(rval)<-"svrepstat" rval } withReplicates.svrepstat<-function(design, theta, ..., return.replicates=FALSE){ if (is.null(reps<-design$replicates)) stop("object does not contain replicate estimates") reps<-as.matrix(reps) if (is.function(theta)){ full<-theta(design[[1]],...) thetas<-drop(t(apply(reps,1,theta, ...))) } else{ full<-eval(theta, list(.replicate=design[[1]])) thetas<-drop(t(apply(reps,1, function(rr) eval(theta, list(.replicate=rr))))) } v<-svrVar(thetas, attr(reps,"scale"), attr(reps,"rscales"), mse=attr(reps,"mse"), coef=full) attr(full,"var")<-v attr(full,"statistic")<-"theta" if (return.replicates){ attr(thetas,"scale")<-attr(reps,"scale") attr(thetas,"rscales")<-attr(reps,"rscales") attr(thetas,"mse")<-attr(reps,"mse") rval<-list(theta=full, replicates=thetas) } else { rval<-full } class(rval)<-"svrepstat" rval } withReplicates.svyrep.design<-function(design, theta, rho=NULL,..., scale.weights=FALSE, return.replicates=FALSE){ wts<-design$repweights scale<-design$scale rscales<-design$rscales if (!is.null(rho)) .NotYetUsed("rho") if (scale.weights) pwts<-design$pweights/sum(design$pweights) else pwts<-design$pweights if (inherits(wts,"repweights_compressed")){ if (scale.weights) wts$weights<-sweep(wts$weights,2,drop(colSums(wts$weights)),"/") } else { if (scale.weights) wts<-sweep(wts,2, drop(colSums(wts)),"/") } rpwts<-if (design$combined.weights) 1 else pwts data<-design$variables if (is.function(theta)){ full<-theta(pwts,data,...) thetas<-drop(t(apply(wts,2, function(ww) theta(as.vector(ww)*rpwts, data, ...)))) } else{ .weights<-pwts full<-with(data, eval(theta)) thetas<-drop(t(apply(wts,2, function(.weights) {.weights<-as.vector(.weights)*rpwts with(data, eval(theta))}))) } v<-svrVar(thetas, scale, rscales,mse=design$mse, coef=full) attr(full,"var")<-v attr(full,"statistic")<-"theta" if (return.replicates) rval<-list(theta=full, replicates=thetas) else rval<-full class(rval)<-"svrepstat" rval } coef.svrepstat<-function(object,...){ if (is.list(object)) object<-object[[1]] attr(object,"statistic")<-NULL attr(object,"deff")<-NULL attr(object,"var")<-NULL unclass(object) } vcov.svrepstat<-function (object, ...) { nms <- names(coef(object)) if (is.list(object)) object <- object[[1]] v <- as.matrix(attr(object, "var")) if (length(object) == NCOL(v)) { dimnames(v) <- list(nms, nms) v } else if (length(object) == length(v)) { dnms <- dimnames(coef(object)) vmat <- matrix(NA, nrow = length(object), ncol = length(object)) diag(vmat) <- as.vector(v) nms <- as.vector(outer(dnms[[1]], dnms[[2]], paste, sep = ":")) dimnames(vmat) <- list(nms, nms) vmat } } as.data.frame.svrepstat<-function(x,...){ if (is.list(x)) { x<-x[[1]] class(x)<-"svrepstat" } rval<-data.frame(statistic=coef(x),SE=SE(x)) names(rval)[1]<-attr(x,"statistic") if (!is.null(attr(x,"deff"))) rval<-cbind(rval,deff=deff(x)) rval } SE<-function(object,...){ UseMethod("SE") } SE.default<-function(object,...){ sqrt(diag(vcov(object,...))) } SE.svrepstat<-function(object,...){ if (is.list(object)){ object<-object[[1]] } vv<-as.matrix(attr(object,"var")) if (!is.null(dim(object)) && length(object)==length(vv)) sqrt(vv) else sqrt(diag(vv)) } print.svrepstat<-function(x,...){ if (is.list(x)){ x<-x[[1]] } vv<-attr(x,"var") deff<-attr(x, "deff") if (!is.null(dim(x)) && length(x)==length(vv)){ cat("Statistic:\n") prmatrix(x) cat("SE:\n") print(sqrt(vv)) if (!is.null(deff)){ cat("Design Effect:\n") printCoefmat() } } else if(length(x)==NCOL(vv)){ m<-cbind(x,sqrt(diag(as.matrix(vv)))) if (is.null(deff)) colnames(m)<-c(attr(x,"statistic"),"SE") else { m<-cbind(m,deff(x)) colnames(m)<-c(attr(x,"statistic"),"SE","DEff") } printCoefmat(m) } else if (length(x)==length(vv)){ m<-cbind(x,sqrt((vv))) if (is.null(deff)) colnames(m)<-c(attr(x,"statistic"),"SE") else { m<-cbind(m,deff(x)) colnames(m)<-c(attr(x,"statistic"),"SE","DEff") } printCoefmat(m) } else { stop("incorrect structure of svrepstat object") } naa<-attr(vv,"na.replicates") if (!is.null(naa)) cat("Note: NA results discarded for",length(naa),"replicates (",naa,")\n") } summary.svrepglm<-function (object, correlation = FALSE, df.resid=NULL,...) { Qr <- object$qr est.disp <- TRUE if (is.null(df.resid)) df.r <- object$df.residual else df.r<-df.resid presid<-resid(object,"pearson") dispersion<- sum( object$survey.design$pweights*presid^2,na.rm=TRUE)/sum(object$survey.design$pweights) coef.p <- coef(object) covmat<-vcov(object) dimnames(covmat) <- list(names(coef.p), names(coef.p)) var.cf <- diag(covmat) s.err <- sqrt(var.cf) tvalue <- coef.p/s.err dn <- c("Estimate", "Std. Error") if (!est.disp) { pvalue <- 2 * pnorm(-abs(tvalue)) coef.table <- cbind(coef.p, s.err, tvalue, pvalue) dimnames(coef.table) <- list(names(coef.p), c(dn, "z value", "Pr(>|z|)")) } else if (df.r > 0) { pvalue <- 2 * pt(-abs(tvalue), df.r) coef.table <- cbind(coef.p, s.err, tvalue, pvalue) dimnames(coef.table) <- list(names(coef.p), c(dn, "t value", "Pr(>|t|)")) } else { coef.table <- cbind(coef.p, Inf) dimnames(coef.table) <- list(names(coef.p), dn) } ans <- c(object[c("call", "terms", "family", "deviance", "aic", "contrasts", "df.residual", "null.deviance", "df.null", "iter")], list(deviance.resid = residuals(object, type = "deviance"), aic = object$aic, coefficients = coef.table, dispersion = dispersion, df = c(object$rank, df.r,NCOL(Qr$qr)), cov.unscaled = covmat, cov.scaled = covmat)) if (correlation) { dd <- sqrt(diag(covmat)) ans$correlation <- covmat/outer(dd, dd) } ans$aliased<-is.na(ans$coef) ans$survey.design<-list(call=object$survey.design$call, type=object$survey.design$type) class(ans) <- c("summary.svyglm","summary.glm") return(ans) } svytable.svyrep.design<-svreptable<-function(formula, design, Ntotal=sum(weights(design, "sampling")), round=FALSE,...){ if (!exists(".Generic",inherits=FALSE)) .Deprecated("svytable") weights<-design$pweights if (is.data.frame(weights)) weights<-weights[[1]] ## unstratified or unadjusted. if (is.null(Ntotal) || length(Ntotal)==1){ ff<-eval(substitute(lhs~rhs,list(lhs=quote(weights), rhs=formula[[2]]))) tbl<-xtabs(ff, data=design$variables,...) if (!is.null(Ntotal)) { tbl<-tbl*(sum(as.numeric(Ntotal))/sum(tbl)) ## avoid integer overflow when Ntotal >sqrt(maxint) } if (round) tbl<-round(tbl) class(tbl) <- c("svytable", class(tbl)) attr(tbl, "call")<-match.call() return(tbl) } ## adjusted and stratified ff<-eval(substitute(lhs~strata+rhs,list(lhs=quote(weights), rhs=formula[[2]], strata=quote(design$strata)))) tbl<-xtabs(ff, data=design$variables,...) ss<-match(sort(unique(design$strata)), Ntotal[,1]) dm<-dim(tbl) layer<-prod(dm[-1]) tbl<-sweep(tbl,1,Ntotal[ss, 2]/apply(tbl,1,sum),"*") tbl<-apply(tbl, 2:length(dm), sum) if (round) tbl<-round(tbl) class(tbl)<-c("svytable", "xtabs","table") attr(tbl, "call")<-match.call() tbl } postStratify<-function(design,strata, population, partial=FALSE,...){ UseMethod("postStratify") } postStratify.svyrep.design<-function(design, strata, population, partial=FALSE,compress=NULL,...){ if(inherits(strata,"formula")){ mf<-substitute(model.frame(strata, data=design$variables,na.action=na.fail)) strata<-eval.parent(mf) } strata<-as.data.frame(strata) if (is.null(compress)) compress<-inherits(design$repweights, "repweights_compressed") sampletable<-xtabs(design$pweights~.,data=strata) sampletable<-as.data.frame(sampletable) if (inherits(population,"table")) population<-as.data.frame(population) else if (is.data.frame(population)) population$Freq <- as.vector(population$Freq) else stop("population must be a table or dataframe") if (!all(names(strata) %in% names(population))) stop("Stratifying variables don't match") nn<- names(population) %in% names(strata) if (sum(!nn)!=1) stop("stratifying variables don't match") names(population)[which(!nn)]<-"Pop.Freq" both<-merge(sampletable, population, by=names(strata), all=TRUE) samplezero <- both$Freq %in% c(0, NA) popzero <- both$Pop.Freq %in% c(0, NA) both<-both[!(samplezero & popzero),] if (any(onlysample<- popzero & !samplezero)){ print(both[onlysample,]) stop("Strata in sample absent from population. This Can't Happen") } if (any(onlypop <- samplezero & !popzero)){ if (partial){ both<-both[!onlypop,] warning("Some strata absent from sample: ignored") } else { print(both[onlypop,]) stop("Some strata absent from sample: use partial=TRUE to ignore them.") } } reweight<-both$Pop.Freq/both$Freq both$label <- do.call("interaction", list(both[,names(strata)])) designlabel <- do.call("interaction", strata) index<-match(designlabel, both$label) oldpw<-design$pweights design$pweights<-design$pweights*reweight[index] if (design$combined.weights){ replicateFreq<- rowsum(as.matrix(design$repweights), match(designlabel, both$label), reorder=TRUE) repreweight<- both$Pop.Freq/replicateFreq design$repweights <- as.matrix(design$repweights)*repreweight[index,] } else { replicateFreq<- rowsum(as.matrix(design$repweights)*oldpw, match(designlabel, both$label), reorder=TRUE) repreweight<- both$Pop.Freq/replicateFreq design$repweights <- as.matrix(design$repweights)* (repreweight/reweight)[index,] } if (compress) design$repweights<-compressWeights(design$repweights) design$call<-sys.call(-1) if(!is.null(design$degf)){ design$degf<-NULL design$degf<-degf(design) } design } rake<-function(design, sample.margins, population.margins, control=list(maxit=10, epsilon=1, verbose=FALSE), compress=NULL){ if (!missing(control)){ control.defaults<-formals(rake)$control for(n in names(control.defaults)) if(!(n %in% names(control))) control[[n]]<-control.defaults[[n]] } is.rep<-inherits(design,"svyrep.design") if (is.rep && is.null(compress)) compress<-inherits(design$repweights,"repweights_compressed") if (is.rep) design$degf<-NULL if (length(sample.margins)!=length(population.margins)) stop("sample.margins and population.margins do not match.") nmar<-length(sample.margins) if (control$epsilon<1) epsilon<-control$epsilon*sum(weights(design,"sampling")) else epsilon<-control$epsilon strata<-lapply(sample.margins, function(margin) if(inherits(margin,"formula")){ mf<-model.frame(margin, data=design$variables,na.action=na.fail) } ) oldtables<-lapply(sample.margins, function(margin) svytable(margin, design)) names(oldtables) <- lapply(sample.margins, all.vars) if (control$verbose) print(oldtables) 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) } newtables<-lapply(sample.margins, function(margin) svytable(margin, design)) names(newtables) <- lapply(sample.margins, all.vars) if (control$verbose) print(newtables) delta<-sapply(seq_along(sample.margins), function(margin_index) { max(abs(newtables[[margin_index]] - oldtables[[margin_index]])) }) |> max() if (deltasum(weights(design,"sampling")>0)) warning("assigned degf larger than number of observations") design$degf<-value design } dim.svyrep.design<-function(x) dim(x$variables) survey/R/count.R0000644000176200001440000000172411457435612013277 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/svyquantile.R0000644000176200001440000003453413707724316014542 0ustar liggesusers oldsvyquantile<-function(x,design,quantiles,...) UseMethod("oldsvyquantile", design) oldsvyquantile.survey.design<-function(x,design,quantiles,alpha=0.05, ci=FALSE, method="linear",f=1, interval.type=c("Wald","score","betaWald"), na.rm=FALSE,se=ci, ties=c("discrete","rounded"), df=NULL,...){ if (inherits(x,"formula")) x<-model.frame(x ,model.frame(design), na.action=na.pass) else if(typeof(x) %in% c("expression","symbol")) x<-eval(x, model.frame(design,na.action=na.pass)) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if (length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } 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(xxncol(regressors)) { # slice the regressor matrix; do not let R convert it to a vector! this_X<-regressors[cl_indices,,drop=FALSE] # slice the residual matrix this_res<-resid2[cl_indices,] # form the projection this_proj<-tryCatch( tcrossprod( tcrossprod(this_X, invXtX), this_X), error = function(e) { cat("Loop index = ", k, "\n") cat("Cluster ID = ",clID, "\n") cat("Cluster indices = ", cl_indices, "\n") cat("Regressor matrix dimensions are: \n", dim(this_X), "\n") cat("(X'X)^{-1} matrix dimenstions are:\n", dim(invXtX), "\n") cat("Residual vector is:\n", this_res, "\n") # return zero matrix if the projection fails matrix(rep(0,length(cl_indices)*length(cl_indices)), nrow=length(cl_indices)) } ) # update the residuals A_i <- mihalf(diag(length(cl_indices))-this_proj) resid2[cl_indices,]<-crossprod(A_i, this_res) # for the degrees of freedom calculation if (degf) { # Theorem 4 of Bell-McCaffrey (SMJ 2002); # this is the transpose of g_i # the dimension is {nrow(design$variables)} x {# of regressors} # dfs are specific to parameters and have to be extracted by component G[[k]] <- tcrossprod(crossprod(H[cl_indices,,drop=FALSE], A_i), tcrossprod( invXtX, this_X )) } # } endif dim regressors } if (degf) { if (std.errors=="Bell-McCaffrey-2") { # exchangeable correlation matrix, form an estimate sigma2 <- sum(resid2*resid2)/length(resid2) sigma_cross <- 0 n_cross <- 0 for (k in 1:length(unique(design$cluster[,1]))) { # pick up the cluster ID clID<-unique(design$cluster)[k,1] # pick up the row indices cl_indices<-which(design$cluster[,1]==clID) sigma_cross <- sigma_cross + sum(tcrossprod(resid2[cl_indices])) n_cross <- n_cross + length(cl_indices)*length(cl_indices) } sigma_cross <- (sigma_cross - sum(resid2*resid2)) / (n_cross - length(resid2)) # form monstrous V; should be a sparse matrix V <- diag(sigma2,nrow=nrow(design$variables)) # replace off-diagonal elements within the same cluster for (k in 1:length(unique(design$cluster[,1]))) { # pick up the cluster ID clID<-unique(design$cluster)[k,1] # pick up the row indices cl_indices<-which(design$cluster[,1]==clID) V[cl_indices, cl_indices] <- sigma_cross } # the diagonal entries got overwritten diag(V) <- rep(sigma2, nrow(V)) } lambda <- numeric() for (j in 1:ncol(regressors)) { # extract the j-th component from each G[[k]] this_G <- sapply(G, function(X, col) X[,col], j) # this is supposed to be nrow(design$variables) x {# clusters} matrix if (std.errors=="Bell-McCaffrey") { # identify matrix, simple!!! GVG <- tcrossprod(this_G) } else if (std.errors=="Bell-McCaffrey-2") { # exchangeable correlation matrix GVG <- crossprod(crossprod(V, this_G), this_G) } else { stop("Standard errors type not supported: ", std.errors) } eigen_GVG <- eigen(GVG, symmetric=TRUE, only.values=TRUE) this_df <- { sum(eigen_GVG$values)*sum(eigen_GVG$values) / sum(eigen_GVG$values*eigen_GVG$values) } lambda[j]<-this_df } attr(resid2,"degf") <- lambda } return(resid2) } #' Symmetric square root of a matrix #' #' Computes the symmetric square root of a positive definite matrix #' #' #' @usage mhalf(M) #' @param M a positive definite matrix #' @return a matrix \code{H} such that \code{H^2} equals \code{M} #' @author Peter Hoff #' @export mhalf <- function(M) { #symmetric square root of a pos def matrix tmp<-eigen(M) tmp$vec%*%sqrt(diag(tmp$val,nrow=nrow(M)))%*%t(tmp$vec) } #' Symmetric inverse square root of a matrix #' #' Computes the inverse symmetric square root of a positive definite matrix #' #' #' @usage mihalf(M) #' @param M a positive definite matrix #' @return a matrix $H$ such that $H^2$ equals $M^{-1]$ #' @author Peter Hoff, Stas Kolenikov #' @export mihalf <- function(M) { #symmetric inverse square root of a pos def matrix tmp<-eigen(M) eigen0<-1/tmp$val eigen0[tmp$val==0]<-0 tmp$vec%*%sqrt(diag(eigen0,nrow=nrow(M)))%*%t(tmp$vec) } survey/R/svycdf.R0000644000176200001440000000262111533517727013445 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/pps.R0000644000176200001440000004110214640361577012750 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. ## ## The routines to compute the variances are in ht.R ## pi2Dcheck<-function(pmat,tolerance=min(pmat)/1e4){ rval<-(pmat-outer(diag(pmat),diag(pmat)))/pmat rval[abs(rval)1 && method!="brewer") stop("Multistage PPS sampling not supported with this method") rval<-svydesign(ids=ids,strata=strata,weights=NULL, probs=probs,fpc=fpc,data=data,pps="other") deltacheck<-make_pps_covmat(rval, method) rval$dcheck=deltacheck rval$variance<-variance rval$call<-call class(rval) <- c("pps","survey.design") rval } ppsmat<-function(jointprob, tolerance=0.0001){ if ((!is.matrix(jointprob)) || !(NROW(jointprob)==NCOL(jointprob))) stop("jointprob must be a square matrix") rval<-list(pij=jointprob, tolerance=tolerance,call=sys.call()) class(rval)<-c("ppsmat","pps_spec") 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)<-c("ppsdcheck","pps_spec") } else { rval<-list(delta=probcov,call=sys.call()) class(rval)<-c("ppsdelta","pps_spec") } rval } print.ppsdcheck<-function(x,...) { cat("PPS: Weighted covariance matrix: ") print(x$call) invisible(x) } print.ppsdelta<-function(x,...) { cat("PPS: Sampling covariance matrix: ") print(x$call) invisible(x) } print.ppsmat<-function(x,...) { cat("PPS: Joint probability matrix: ") print(x$call) invisible(x) } pps_design.ppsmat<-function(method,ids,strata=NULL, probs=NULL, fpc=NULL,variables=NULL, subset, data,call=sys.call(),variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported") rval<-svydesign(ids=ids,strata=strata,weights=NULL,variables=variables, probs=probs,fpc=fpc,data=data,pps="other") deltacheck<-pi2Dcheck(method$pij,method$tolerance) rval$variance<-variance rval$dcheck<-list(list(id=1:nrow(method$pij), dcheck=deltacheck)) rval$call<-call class(rval) <- c("pps","survey.design") rval } pps_design.ppsdcheck<-function(method,ids,strata=NULL, probs=NULL, fpc=NULL,variables=NULL, subset, data,call=sys.call(),variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported") rval<-svydesign(ids=ids,strata=strata,weights=NULL,variables=variables, probs=probs,fpc=fpc,data=data,pps="other") deltacheck<-method$dcheck rval$variance<-variance rval$dcheck<-list(list(id=1:nrow(deltacheck), dcheck=deltacheck)) rval$call<-call class(rval) <- c("pps","survey.design") rval } pps_design.ppsdelta<-function(method,ids,strata=NULL, probs=NULL, fpc=NULL,variables=NULL, subset, data,call=sys.call(),variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported") rval<-svydesign(ids=ids,strata=strata,weights=NULL,variables=variables, probs=probs,fpc=fpc,data=data,pps="other") w<-weights(rval) deltacheck<-method$delta*tcrossprod(w) diag(deltacheck)<-diag(method$delta)*w method$deltacheck<-deltacheck rval$variance<-variance rval$dcheck<-list(list(id=1:nrow(method$deltacheck), dcheck=deltacheck)) rval$call<-call class(rval) <- c("pps","survey.design") rval } poisson_sampling<-function(p){ ppscov(Diagonal(x=1-p),weighted=TRUE) } HR<-function(psum=NULL, strata=NULL){ if (is.null(psum)) { ## estimate rval<-list(pbar=NULL,call=sys.call()) } else if (is.data.frame(strata) || is.matrix(strata)){ #redundant pbar<-lapply(1:NCOL(strata), function(i){ psum[!duplicated(strata[,i]),i]}) strata<-lapply(1:NCOL(strata), function(i){ strata[!duplicated(strata[,i]),i]}) rval<-list(pbar=pbar, strata=strata,call=sys.call()) } else if (is.null(strata) && is.numeric(psum) && length(psum)==1){ ## single number rval<-list(pbar=list(psum),strata=list(1), call=sys.call()) } else{ ## non-redundant list rval<-list(pbar=psum, strata=strata,call=sys.call()) } class(rval)<-"HR" rval } print.HR<-function(x,...) { cat("PPS: Hartley-Rao correction: ") print(x$call) invisible(x) } pps_design.HR<-function(method,ids,strata=NULL, probs=NULL, fpc=NULL,variables=NULL, subset, data,call=sys.call(),variance="HT",...){ if (length(ids[[2]])>1) stop("Multistage PPS sampling not supported with this method") rval<-svydesign(ids=ids,strata=strata,weights=NULL, probs=probs,fpc=fpc,data=data,pps="other") if (is.null(method$pbar)) ## sample estimate of sum(p^2/n) deltacheck<-multi.HR1Dcheck(rval$cluster,rval$strata,rval$allprob) else deltacheck<-multi.HRDcheck(rval$cluster,rval$strata,rval$allprob, method$pbar) rval$dcheck=deltacheck rval$variance<-variance rval$call<-call class(rval) <- c("pps","survey.design") rval } print.pps<-function(x,...){ cat("Sparse-matrix design object:\n ") print(x$call) } summary.pps<-function(object,...){ class(object)<-"summary.pps" object } print.summary.pps<-function(x,...,varnames=TRUE){ cat("Two-phase sparse-matrix design:\n ") print(x$call) cat("Sampling probabilities:\n") print(summary(x$prob)) if (varnames){ cat("Data variables:\n") print(names(x$variables)) } invisible(x) } ppsvar<-function(x,design){ postStrata<-design$postStrata est<-design$variance ##Yates-Grundy or Horvitz-Thompson if (!is.null(postStrata)){ for (psvar in postStrata){ if (inherits(psvar, "greg_calibration")) { if (psvar$stage==0){ ## G-calibration at population level x<-qr.resid(psvar$qr,x/psvar$w)*psvar$w } else { ## G-calibration within clusters stop("calibration within clusters not yet available for PPS designs") } } else { ## ordinary post-stratification psw<-attr(psvar, "weights") postStrata<-as.factor(psvar) psmeans<-rowsum(x/psw,psvar,reorder=TRUE)/as.vector(table(factor(psvar))) x<- x-psmeans[match(psvar,sort(unique(psvar))),]*psw } } } dcheck<-design$dcheck if (length(dcheck)!=1) stop("Multistage not implemented yet") rval<-switch(est,HT=htvar.matrix(rowsum(x,dcheck[[1]]$id,reorder=FALSE),dcheck[[1]]$dcheck), YG=ygvar.matrix(rowsum(x,dcheck[[1]]$id,reorder=FALSE),dcheck[[1]]$dcheck), stop("can't happen")) rval } svytotal.pps<-function(x,design, na.rm=FALSE, deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,model.frame(design), na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] if(length(nas)>length(design$prob)) x<-x[nas==0,,drop=FALSE] else x[nas>0,]<-0 } N<-sum(1/design$prob) total <- colSums(x/as.vector(design$prob),na.rm=na.rm) class(total)<-"svystat" attr(total, "var")<-v<-ppsvar(x/design$prob,design) attr(total,"statistic")<-"total" if (is.character(deff) || deff){ nobs<-NROW(design$cluster) if (deff=="replace") vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2*(N-nobs)/N else vsrs<-svyvar(x,design,na.rm=na.rm)*sum(weights(design))^2 attr(total, "deff")<-v/vsrs } return(total) } svymean.pps<-function(x,design, na.rm=FALSE,deff=FALSE,...){ if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,model.frame(design) ,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else { if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) else { if(is.data.frame(x) && any(sapply(x,is.factor))){ xx<-lapply(x, function(xi) {if (is.factor(xi)) 0+(outer(xi,levels(xi),"==")) else xi}) cols<-sapply(xx,NCOL) scols<-c(0,cumsum(cols)) cn<-character(sum(cols)) for(i in 1:length(xx)) cn[scols[i]+1:cols[i]]<-paste(names(x)[i],levels(x[[i]]),sep="") x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-cn } } } x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) if (any(nas>0)) design<-design[nas==0,] x[nas>0,]<-0 } pweights<-1/design$prob psum<-sum(pweights) average<-colSums(x*pweights/psum) x<-sweep(x,2,average) v<-ppsvar(x*pweights/psum,design) attr(average,"var")<-v attr(average,"statistic")<-"mean" class(average)<-"svystat" if (is.character(deff) || deff){ nobs<-nrow(design) if(deff=="replace"){ vsrs<-svyvar(x,design,na.rm=na.rm)/(nobs) } else { if(psum 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/DBI.R0000644000176200001440000003147515143206354012546 0ustar liggesusers svydesign.character<-function (ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL,pps=FALSE, calibrate.formula=NULL, na_weights="fail", 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,...) } na_weights<-match.arg(na_weights) design.vars<-c(all.vars(ids), all.vars(probs), all.vars(strata), all.vars(fpc), all.vars(weights)) ## Need at least one variable to find out the data size if (length(design.vars)==0) design.vars<-"1 as _ugly_workaround_" design.query<-paste("select", paste(design.vars,collapse=","), "from", data) design.data<-DBI::dbGetQuery(dbconn, design.query) rval<-svydesign(ids=ids, probs=probs, strata=strata, data=design.data, fpc=fpc, variables=variables, nest=nest,check.strata=check.strata, weights=weights, calibrate.formula=calibrate.formula) rval$db<-list(dbname=dbname, tablename=data, connection=dbconn, dbtype=dbtype) rval$variables<-NULL rval$call<-sys.call(-1) class(rval)<-c("DBIsvydesign",class(rval)) rval } print.DBIsvydesign<-function(x,...){ cat("DB-backed ") NextMethod() if (!checkConnection(x$db$connection, error=FALSE)) cat("\n") invisible(x) } summary.DBIsvydesign<-function(object,...){ class(object)<-c("summary.DBIsvydesign",class(object)) object } print.summary.DBIsvydesign<-function(x,...){ print.survey.design2(x,varnames=TRUE,design.summaries=TRUE,...) invisible(x) } close.DBIsvydesign<-function(con,...){ DBI::dbDisconnect(con$db$connection,...) invisible(con) } open.DBIsvydesign<-function(con,...){ db<-DBI::dbDriver(con$db$dbtype) con$db$connection<-DBI::dbConnect(db, dbname=con$db$dbname,...) con } svymean.DBIsvydesign<-function(x, design,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svymean",design) } svytotal.DBIsvydesign<-function(x, design,na.rm=FALSE,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svytotal",design) } svyquantile.DBIsvydesign<-function(x, design,quantiles,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svyquantile",design) } oldsvyquantile.DBIsvydesign<-function(x, design,quantiles,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svyquantile",design) } dropFactor<-function(mf, w){ if(!any(w==0)) return(mf) dropped<-w==0 for(i in 1:ncol(mf)) { if (is.factor(mf[[i]])){ fi<-mf[[i]] if (all(dropped[fi==levels(fi)[1]])){ tt<-table(fi[!dropped]) l<-min(which(tt>0)) levs<-levels(fi) mf[[i]]<-relevel(mf[[i]],ref=levs[l]) } } } mf } svyglm.DBIsvydesign<-function(formula, design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset), weights(design)) NextMethod("svyglm",design) } svyplot.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) design$variables[weights(design)==0,]<-NA NextMethod("svyplot",design) } svycoplot.DBIsvydesign<-function(formula,design, style=c("hexbin","transparent"), basecol="black",alpha=c(0,0.8),hexscale=c("relative","absolute"),...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename, updates=design$updates, subset=design$subset) design$variables[weights(design)==0,]<-NA NextMethod("svycoplot",design) } svyboxplot.DBIsvydesign<-function(formula,design, ...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) design$variables[weights(design)==0,]<-NA class(design)<-setdiff(class(design),"DBIsvydesign") svyboxplot(formula,design,...) } svycdf.DBIsvydesign<-function(formula,design, na.rm=TRUE, ...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svycdf",design) } svyolr.DBIsvydesign<-function(formula,design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset), weights(design)) NextMethod("svyolr",design) } svycoxph.DBIsvydesign<-function(formula,design,...){ design$variables<-dropFactor(getvars(formula, design$db$connection, design$db$tablename,updates=design$updates), weights(design)) NextMethod("svycoxph",design) } svyvar.DBIsvydesign<-function(x,design,na.rm=FALSE,...){ design$variables<-getvars(x, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svyvar",design) } svykm.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svykm",design) } svykappa.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svykappa",design) } svysmooth.DBIsvydesign<-function(formula,design,method=c("locpoly","quantreg"),bandwidth,quantile,df,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svysmooth",design) } svychisq.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svychisq",design) } svyranktest.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svyranktest",design) } svyratio.DBIsvydesign<-function(numerator, denominator, design,...){ design$variables<-cbind(getvars(numerator,design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset), getvars(denominator,design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset)) NextMethod("svyratio",design) } svyby.DBIsvydesign<-function(formula, by, design,...){ design$variables<-cbind(getvars(formula,design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset), getvars(by,design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset)) class(design)<-setdiff(class(design),"DBIsvydesign") svyby(formula,by,design,...) } svytable.DBIsvydesign<-function(formula,design,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("svytable",design) } calibrate.DBIsvydesign<-function(design,formula,...){ design$variables<-getvars(formula, design$db$connection, design$db$tablename,updates=design$updates, subset=design$subset) NextMethod("calibrate",design) } postStratify.DBIsvydesign<-function(design, strata, population, partial = FALSE, ...) .NotYetImplemented() subset.DBIsvydesign<-function (x, subset, ...) { e <- substitute(subset) x$variables<-getvars(make.formula(all.vars(e)), x$db$connection, x$db$tablename,updates=x$updates, subset=x$subset) r <- eval(e, x$variables, parent.frame()) r <- r & !is.na(r) x <- x[r, ] x$call <- sys.call(-1) x } dim.DBIsvydesign<-function(x){ w<-weights(x) nrow <- length(w) #need dim to report honest matrix size, so not: nrow<-sum(w!=0) coln<-names(DBI::dbGetQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) ncol<-length(unique(c(coln,update.names))) } else ncol<-length(coln) c(nrow,ncol) } dim.DBIrepdesign<-function(x){ if (is.null(x$subset)) nrow <-nrow(x$repweights) else nrow<-length(x$subset) coln<-names(DBI::dbGetQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) ncol<-length(unique(c(coln,update.names))) } else ncol<-length(coln) c(nrow,ncol) } dimnames.DBIsvydesign<-function(x){ rown<-rownames(x$cluster)[weights(x)!=0] coln<-names(DBI::dbGetQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) coln<-unique(c(coln,update.names)) } list(rown,coln) } dimnames.DBIrepdesign<-function(x){ if (is.null(x$subset)) rown<-rownames(x$cluster) else rown<-rownames(x$cluster)[x$subset] coln<-names(DBI::dbGetQuery(x$db$conn, paste("select * from", x$db$tablename, "limit 1"))) if (!is.null(x$updates)){ update.names<-do.call(c, lapply(x$updates, names)) coln<-unique(c(coln,update.names)) } list(rown,coln) } "[.DBIsvydesign"<-function (x, i, ..., drop = TRUE) { if (!missing(i)) { if (is.logical(i)) x$prob[!i] <- Inf else if (is.numeric(i) && length(i)) x$prob[-i] <- Inf else { tmp <- x$prob[i, ] x$prob <- rep(Inf, length(x$prob)) x$prob[i, ] <- tmp } index <- is.finite(x$prob) psu <- !duplicated(x$cluster[index, 1]) tt <- table(x$strata[index, 1][psu]) if (any(tt == 1)) { warning(sum(tt == 1), " strata have only one PSU in this subset.") } } else { if (!is.null(x$variables)) x$variables <- x$variables[, ..1, drop = FALSE] } x } "[.DBIrepdesign"<-function (x, i, j, drop = FALSE) { if (!missing(i)) { pwt <- x$pweights if (is.data.frame(pwt)) pwt <- pwt[[1]] x$pweights <- pwt[i] x$repweights <- x$repweights[i, , drop = FALSE] if (!is.null(x$selfrep)) x$selfrep <- x$selfrep[i] if (is.null(x$subset)) x$subset<-(1:nrow(x$variables))[i] else x$subset<-x$subset[i] if (!missing(j)) x$variables <- x$variables[i, j, drop = FALSE] else x$variables <- x$variables[i, , drop = FALSE] x$degf <- NULL x$degf <- degf(x) } else { x$variables <- x$variables[, j, drop = FALSE] } x } svrepdesign.character<-function (variables=NULL,repweights=NULL, weights=NULL, data=NULL, degf=NULL,type=c("BRR","Fay","JK1", "JKn","bootstrap","ACS","successive-difference","JK2","other"), combined.weights=TRUE, rho=NULL, bootstrap.average=NULL, scale=NULL,rscales=NULL,fpc=NULL, fpctype=c("fraction","correction"), mse=getOption("survey.replicates.mse"),dbtype="SQLite", dbname, ...) { if (dbtype == "ODBC"){ stop("'RODBC' no longer supported. Use the odbc package") } else { db<-DBI::dbDriver(dbtype) dbconn<- DBI::dbConnect(db, dbname,...) } if (is.character(repweights)){ allvars<-names(DBI::dbGetQuery(dbconn, paste("select * from",data,"limit 1"))) design.vars<-c(all.vars(weights),grep(repweights,allvars,value=TRUE)) } else { design.vars<-c(all.vars(weights),all.vars(repweights)) } design.query<-paste("select", paste(design.vars,collapse=","), "from", data) design.data<-DBI::dbGetQuery(dbconn, design.query) rval<-svrepdesign(variables=variables,repweights=repweights, weights=weights, degf=NULL, type=type, data=design.data, combined.weights=combined.weights, rho=rho, bootstrap.average=NULL, scale=scale,rscales=rscales,fpc=fpc, fpctype=c("fraction","correction"), mse=mse) rval$db<-list(dbname=dbname, tablename=data, connection=dbconn, dbtype=dbtype) rval$variables<-NULL rval$call<-sys.call(-1) class(rval)<-c("DBIrepdesign","DBIsvydesign",class(rval)) rval } print.DBIrepdesign<-function(x,...){ cat("DB-backed replicate weight design\n") print.svyrep.design(x,...) if (!checkConnection(x$db$connection, error=FALSE)) cat("\n") invisible(x) } summary.DBIrepdesign<-function(object,...){ summary.svyrep.design(object,...) } survey/R/ftable.svystat.R0000755000176200001440000000372511457435612015126 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/svyttest.R0000644000176200001440000001252114640361577014056 0ustar liggesuserssvyttest<-function(formula, design,...) UseMethod("svyttest",design) svyttest.default<-function(formula, design, ...){ if (formula[[3]]==1 || formula[[3]]==0){ ## one-sample tt <- eval(bquote(svymean(~as.numeric(.(formula[[2]])),design,...))) rval<-list(statistic=coef(tt)[1]/SE(tt)[1], parameter=degf(design)-1, estimate=coef(tt)[1], null.value=0, alternative="two.sided", method="Design-based one-sample t-test", data.name=deparse(formula)) rval$p.value<-2*pt(-abs(rval$statistic),df=rval$parameter) ci <- confint(tt,level=0.95,df=rval$parameter) attr(ci,"conf.level")<-0.95 rval$conf.int<-ci names(rval$statistic)<-"t" names(rval$parameter)<-"df" names(rval$estimate)<-"mean" names(rval$null.value)<-"mean" class(rval)<-c("svyttest","htest") } else { ## two-sample m <- eval(bquote(svyglm(formula,design, family=gaussian()))) mm<-model.matrix(m) if( (ncol(mm)!=2) || (any(!(mm[,2] %in% c(0,1))) && any(!(mm[,2] %in% c(1,2))))) stop("group must be binary") rval<-list(statistic=coef(m)[2]/SE(m)[2], parameter=m$df.resid, estimate=coef(m)[2], null.value=0, alternative="two.sided", method="Design-based t-test", data.name=deparse(formula)) rval$p.value<-2*pt(-abs(rval$statistic),df=rval$parameter) ci <- confint(m,parm=2) attr(ci,"conf.level")<-0.95 rval$conf.int<-ci names(rval$statistic)<-"t" names(rval$parameter)<-"df" names(rval$estimate)<-"difference in mean" names(rval$null.value)<-"difference in mean" class(rval)<-c("svyttest","htest") } return(rval) } confint.svyttest<-function(object, parm, level=0.95,...){ if(level==0.95) return(object$conf.int) halfw<-diff(as.vector(object$conf.int))/2 q95<-qt(0.975,df=object$parameter) qthis<-qt(1-(1-level)/2, df=object$parameter) thishalfw<-halfw*qthis/q95 rval<-object$estimate+c(-thishalfw,thishalfw) attr(rval,"conf.level")<-level rval } expit<-function(eta) exp(eta)/(1+exp(eta)) svyciprop<-function(formula, design, method=c("logit","likelihood","asin","beta","mean","xlogit","wilson"), 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 if (method=="wilson"){ m<-eval(bquote(svymean(~as.numeric(.(formula[[2]])),design,...))) n.eff <- coef(m)*(1-coef(m))/vcov(m) if (!is.null(degf(m))) ci_df<-median(degf(m),na.rm=TRUE) else ci_df<-degf(design) # override from the function inputs -- maybe the user wants Inf if (hasArg(df)) ci_df<-df alpha<-1-level t_alpha<-qt(p=alpha/2,df=ci_df,ncp=0,lower.tail=FALSE) the_denom<-1+t_alpha*t_alpha/n.eff the_sqrt<-sqrt(4*n.eff*m*(1-m)+t_alpha*t_alpha) ci <- c( (m+t_alpha*t_alpha/(2*n.eff)-t_alpha/(2*n.eff)*the_sqrt)/the_denom, (m+t_alpha*t_alpha/(2*n.eff)+t_alpha/(2*n.eff)*the_sqrt)/the_denom ) rval<-coef(m)[1] attr(rval,"var")<-vcov(m) # new attribute for the class "svyciprop"!! attr(rval,"df")<-ci_df } else { m<-eval(bquote(svyglm(.(formula[[2]])~1,design, family=quasibinomial))) cimethod<-switch(method, logit="Wald",likelihood="likelihood") ci<-suppressMessages(as.numeric(expit(confint(m,1,level=level,method=cimethod,ddf=df)))) rval<-expit(coef(m))[1] attr(rval,"var")<-vcov(eval(bquote(svymean(~as.numeric(.(formula[[2]])),design,...)))) } halfalpha<-(1-level)/2 names(ci)<-paste(round(c(halfalpha,(1-halfalpha))*100,1),"%",sep="") names(rval)<-paste(deparse(formula[[2]]), collapse="") attr(rval,"ci")<-ci class(rval)<-"svyciprop" rval } confint.svyciprop<-function(object,parm,level=NULL,...){ if (!is.null(level)) stop("need to re-run svyciprop to specify level") rval<-t(as.matrix(attr(object,"ci"))) rownames(rval)<-names(object) rval } coef.svyciprop<-function(object,...) object vcov.svyciprop<-function(object,...) attr(object,"var") print.svyciprop<-function(x,digits=max(3,getOption("digits")-4),...){ m <- cbind(coef(x), confint(x)) printCoefmat(m,digits=digits, cs.ind=1:3,tst.ind=NULL) invisible(x) } survey/R/xval.R0000644000176200001440000000371014640361577013123 0ustar liggesusers withCrossval <- function(design, formula, trainfun, testfun, loss=c("MSE","entropy","AbsError"), intercept,tuning=NULL, nearly_zero=1e-4,...){ UseMethod("withCrossval") } ## we may want to cluster the repweights to keep the number down. ## withCrossval.svyrep.design<-function(design, formula, trainfun, testfun, loss=c("MSE","entropy","AbsError"), intercept, tuning, nearly_zero=1e-4,...){ if (is.character(loss)) { loss<-match.arg(loss) lossfun<-switch(loss, MSE=function(y,hat,w) sum(w*(y-hat)^2), AbsError=function(y,hat,w) sum(w*abs(y-hat)), entropy=function(y, hat, w) sum(w*(y*log(hat)+(1-y)*log(1-hat)))) } else if (!is.function(loss)){ lossfun<-loss } repweights<-weights(design, "analysis") pweights<-weights(design,"sampling") testset<- (repweights/pweights)<= nearly_zero if (any(colSums(testset)==0)) stop("some replicates have no test-set observations. Check nearly_zero.") mf<-model.frame(formula, model.frame(design)) y<-model.response(mf) X<-model.matrix(formula, mf) hat<-matrix(NA, ncol=ncol(repweights),nrow=nrow(repweights)) losses<-numeric(length(tuning)) for(i in 1:length(tuning)){ for(fold in 1:ncol(repweights)){ is_test<-testset[,fold] is_train<-!testset[,fold] w<-repweights[,fold] fit<-trainfun(X[is_train,,drop=FALSE], y[is_train], w[is_train], tuning=tuning[i]) hat[is_test,fold]<-testfun(X[is_test,], trainfit=fit,tuning=tuning[i]) } loss<-0 for(fold in 1:ncol(hat)){ noNA<-!is.na(hat[,fold]) loss<-loss+lossfun(y[noNA],hat[noNA,fold],pweights[noNA])*design$rscales[fold] } losses[i]<-loss*design$scale } losses/sum(pweights) } survey/R/twophase.R0000644000176200001440000006463414640361577014017 0ustar liggesusers## ## twophase<-function(id,strata=NULL, probs=NULL, weights=NULL, fpc=NULL, subset, data, method=c("full","approx","simple"), pps=NULL){ data<-detibble(data) method<-match.arg(method) if(method=="full") { if (!is.null(weights)) stop("weights not accepted by method='full'") return(twophase2(id=id, strata=strata, probs=probs, fpc=fpc,subset=subset,data=data,pps=pps)) } d1<-svydesign(ids=id[[1]],strata=strata[[1]],weights=weights[[1]], probs=probs[[1]],fpc=fpc[[1]],data=data) if(inherits(subset,"formula")) subset<-eval.parent(model.frame(subset,data=data,na.action=na.pass))[[1]] if(!is.logical(subset) && sort(unique(subset))==c(0,1)) subset<-as.logical(subset) if (any(is.na(subset))) stop("missing values in 'subset'") d1s<-svydesign(ids=id[[1]],strata=strata[[1]],weights=weights[[1]], probs=probs[[1]],fpc=fpc[[1]],data=data[subset,]) d1s$prob<-d1$prob[subset] d1s$allprob<-d1$allprob[subset,,drop=FALSE] ##if (NCOL(d1s$allprob)>1) ## stop("Can't handle multistage sampling at phase 1 (yet)") ## work out phase-two fpc if (is.null(fpc[[2]])){ complete.vars<-names(data)[apply(data, 2, function(v) all(!is.na(v)))] if (all(c(all.vars(id[[2]]), all.vars(strata[[2]])) %in% complete.vars)){ dfpc<-svydesign(ids=id[[2]], strata=strata[[2]], data=data, probs=NULL) popsize<-mapply(function(s,i) ave(!duplicated(i),s,FUN=sum), dfpc$strata, dfpc$cluster) rm(dfpc) } else { warning("Second-stage fpc not specified and not computable") popsize<-NULL } } else popsize<-NULL d2<-svydesign(ids=id[[2]], strata=strata[[2]], probs=probs[[2]], weights=weights[[2]], fpc=fpc[[2]], data=data[subset,]) ## ugly hack to get nicer labels if(!is.null(fpc[[2]])){ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), weights=.(weights[[2]]), fpc=.(fpc[[2]]))) } else{ d2call<-bquote(svydesign(ids=.(id[[2]]),strata=.(strata[[2]]), probs=.(probs[[2]]), weights=.(weights[[2]]), fpc=`*phase1*`)) } for(i in names(d2call)[-1]) d2call[[i]]<-d2call[[i]] d2$call<-d2call d1call<-bquote(svydesign(ids=.(id[[1]]), strata=.(strata[[1]]), probs=.(probs[[1]]), weights=.(weights[[1]]), fpc=.(fpc[[1]]))) for(i in names(d1call)[-1]) d1call[[i]]<-d1call[[i]] d1$call<-d1call ## Add phase 2 fpc and probs if they were computed rather than specified. if (!is.null(popsize)) d2$fpc<-as.fpc(popsize[subset,,drop=FALSE],d2$strata,d2$cluster) if(is.null(probs[[2]]) && is.null(weights[[2]]) && !is.null(d2$fpc$popsize)){ d2$allprob<-1/weights(d2$fpc,final=FALSE) d2$prob<-apply(as.data.frame(d2$allprob),1,prod) } d2$variables<-NULL rval<-list(phase1=list(full=d1,sample=d1s), phase2=d2, subset=subset) rval$prob<-rval$phase1$sample$prob ## Are phase 2 PSUs the same as Phase 1 USUs, or smaller? rval$samescale<- !any(duplicated(d1s$cluster[,NCOL(d1s$cluster)][!duplicated(d2$cluster[,1])])) ## For each phase 1 sampling unit, need probability of being represented ## at phase 2. nunique<-function(x) sum(!duplicated(x)) m<-NCOL(rval$phase1$sample$cluster) if(d2$has.strata){ if (inherits(strata[[2]],"formula")) sa<-eval(attr(terms(strata[[2]]),"variables")[[2]],d1$variables) else sa<-d1$strata[,1] cm<-rval$phase1$full$cluster[,m] if (nunique(sa)!=nunique(sa[subset])) stop("Some phase-2 strata have zero sampling fraction") rval$usu<-ave(as.numeric(cm[subset]),sa[subset],FUN=nunique)/ave(as.numeric(cm),sa,FUN=nunique)[subset] } else { rval$usu<-drop(with(rval$phase1$sample,ave(as.numeric(cluster[,m]), strata[,m], FUN=nunique))/rval$phase1$full$fpc$sampsize[rval$subset,m]) } ## if (any(rval$usu<1) && any(duplicated(d1$cluster[,1]))) ## stop("Phase 1 design must either be element sampling or have all phase 1 sampling units in phase 2") if (length(rval$phase1$sample$prob)==length(d2$prob)) rval$prob<-rval$phase1$sample$prob*d2$prob else{ rval$prob<-rep(Inf,length(rval$phase1$sample$prob)) rval$prob[subset]<-rval$prob[subset]*d2$prob } rval$call<-sys.call() class(rval) <- c("twophase","survey.design") rval } print.twophase<-function(x,...){ cat("Two-phase design: ") print(x$call) cat("Phase 1:\n") print(x$phase1$full) cat("Phase 2:\n") print(x$phase2) invisible(x) } summary.twophase<-function(object,...){ class(object)<-"summary.twophase" object } print.summary.twophase<-function(x,...,varnames=TRUE){ cat("Two-phase design: ") print(x$call) cat("Phase 1:\n") print(x$phase1$full,design.summaries=TRUE,varnames=FALSE) cat("Phase 2:\n") print(x$phase2,design.summaries=TRUE, varnames=FALSE) if (varnames){ cat("Data variables:\n") print(names(x$phase1$full$variables)) } invisible(x) } dimnames.twophase<-function(x) dimnames(x$phase1$full$variables) 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(psum1e-5) warning("estimating functions don't seem to sum to zero") if(NROW(h)!=nrow(design$phase1$full)) stop("Sample sizes of model and full cohort don't match") if (!isTRUE(all.equal(rownames(design$phase1$full$variables), rownames(h)))) warning("row names do not match") if(!is.null(add_mat)){ h<-cbind(h, add_mat) } population<-colSums(h) hsamp<-h[design$subset,,drop=FALSE] tqr<-qr(hsamp*whalf) g <- grake(hsamp, weights(design), calfun, bounds = bounds, population = population, verbose = verbose, epsilon = epsilon, maxit = maxit) 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() design } survey/R/stratsample.R0000644000176200001440000000045411457435613014506 0ustar liggesusersstratsample<-function(strata, counts){ strata<-as.character(strata) n<-length(strata) rval <- integer(sum(counts)) allrows<-1:n j<-0 for(i in 1:length(counts)) { thisstrat<-names(counts)[i] rval[j+(1:counts[i])]<-sample(allrows[strata==thisstrat],counts[i]) j<-j+counts[i] } rval }survey/R/svykm.R0000644000176200001440000002525114423575670013326 0ustar liggesusers svykm<-function(formula, design, se=FALSE, ...) UseMethod("svykm",design) svykm.survey.design<-function(formula, design,se=FALSE, ...){ if (!inherits(formula,"formula")) stop("need a formula") if (length(formula)!=3) stop("need a two-sided formula") mf<-model.frame(formula, model.frame(design), na.action=na.pass) mf<-na.omit(mf) drop<-attr(mf,"na.action") if (!is.null(drop)) design<-design[-drop,] y<-model.response(mf) if (!is.Surv(y) || attr(y,"type")!="right") stop("response must be a right-censored Surv object") if (ncol(mf)==1) { if (se) s<-km.stderr(y,design) else s<-svykm_fit(y,weights(design)) } else { x<-mf[,-1] if (NCOL(x)>1) groups<-do.call(interaction,x) else groups<-as.factor(x) if (se){ lhs<-formula lhs[[3]]<-1 s<-lapply(levels(groups), function(g) svykm(lhs, subset(design,groups==g),se=TRUE)) }else{ s<-lapply(levels(groups), function(g) svykm_fit(y[groups==g],weights(design)[groups==g])) } names(s)<-levels(groups) class(s)<-"svykmlist" } call<-match.call() call[[1]]<-as.name(.Generic) attr(s,"call")<-call attr(s, "formula")<-formula attr(s, "na.action")<-drop return(s) } svykm.svyrep.design<-function(formula, design,se=FALSE, ...){ if (!inherits(formula,"formula")) stop("need a formula") if (length(formula)!=3) stop("need a two-sided formula") mf<-model.frame(formula, model.frame(design), na.action=na.pass) mf<-na.omit(mf) drop<-attr(mf,"na.action") if (!is.null(drop)) design<-design[-drop,] y<-model.response(mf) if (!is.Surv(y) || attr(y,"type")!="right") stop("response must be a right-censored Surv object") if (ncol(mf)==1) { if (se) stop("SE not yet available") else s<-svykm_fit(y,weights(design,"sampling")) } else { x<-mf[,-1] if (NCOL(x)>1) groups<-do.call(interaction,x) else groups<-as.factor(x) if (se){ lhs<-formula lhs[[3]]<-1 s<-lapply(levels(groups), function(g) svykm(lhs, subset(design,groups==g),se=TRUE)) }else{ s<-lapply(levels(groups), function(g) svykm_fit(y[groups==g],weights(design)[groups==g])) } names(s)<-levels(groups) class(s)<-"svykmlist" } call<-match.call() call[[1]]<-as.name(.Generic) attr(s,"call")<-call attr(s, "formula")<-formula attr(s, "na.action")<-drop return(s) } svykm_fit<-function(y,w){ t<-y[,"time"] s<-y[,"status"] nn<-rowsum(cbind(s,1)*w,t) tt<-sort(unique(t)) N<-c(sum(w),sum(w),sum(w)-cumsum(nn[-nrow(nn),2])) d<-c(0,nn[,1]) surv<-pmax(0,cumprod(1-d/N)) rval<-list(time=c(0,tt), surv=surv) class(rval)<-"svykm" rval } km.stderr<-function(survobj,design){ time<-survobj[,'time'] status<-survobj[,'status'] ## Brute force and ignorance: compute Y and dN as totals, use delta-method keep<-which((status==1) & (weights(design)!=0)) y<-outer(time,time[keep],">=") dN<-diag(status)[,keep,drop=FALSE] oo<-order(time[keep], -status[keep]) okeep<-keep[oo] ntimes<-length(oo) ttime<-time[okeep] sstatus<-status[okeep] totals<-svytotal(cbind(dN[,oo,drop=FALSE],y[,oo,drop=FALSE]), design) rm(dN) y<-coef(totals)[-(1:ntimes)] dNbar<-coef(totals)[1:ntimes] h<-cumsum(dNbar/y) dVn<- vcov(totals)[(1:ntimes),(1:ntimes)]/outer(y,y) dVy <- vcov(totals)[-(1:ntimes),-(1:ntimes)]*outer(dNbar/y^2,dNbar/y^2) dCVny<- -vcov(totals)[(1:ntimes),-(1:ntimes)]*outer(1/y,dNbar/y^2) dV<-dVn+dVy+dCVny+t(dCVny) V<-numeric(ntimes) if (ntimes>0) V[1]<-dV[1,1] if (ntimes>1) for(i in 2:ntimes) V[i]<-V[i-1]+sum(dV[1:(i-1),i])+sum(dV[i,1:i]) rval<-list(time=ttime,surv=exp(-h),varlog=V) class(rval)<-"svykm" rval } plot.svykm<-function(x,xlab="time",ylab="Proportion surviving",ylim=c(0,1),ci=NULL,lty=1,...){ if (is.null(ci)) ci<-!is.null(x$varlog) plot(x$time,x$surv,xlab=xlab,ylab=ylab, type="s",ylim=ylim,lty=lty,...) if (ci){ if (is.null(x$varlog)) warning("No standard errors available in object") else{ lines(x$time,exp(log(x$surv)-1.96*sqrt(x$varlog)),lty=2,type="s",...) lines(x$time,pmin(1,exp(log(x$surv)+1.96*sqrt(x$varlog))),lty=2,type="s",...) } } invisible(x) } lines.svykm<-function(x,xlab="time",type="s",ci=FALSE,lty=1,...){ lines(x$time,x$surv, type="s",lty=lty,...) if (ci){ if (is.null(x$varlog)) warning("no standard errors available in object") else { lines(x$time,exp(log(x$surv)-1.96*sqrt(x$varlog)),lty=2,type="s",...) lines(x$time,pmin(1,exp(log(x$surv)+1.96*sqrt(x$varlog))),lty=2,type="s",...) } } invisible(x) } plot.svykmlist<-function(x, pars=NULL, ci=FALSE,...){ if (!is.null(pars)) pars<-as.data.frame(pars,stringsAsFactors=FALSE) if(is.null(pars)) plot(x[[1]],ci=ci,...) else do.call(plot,c(list(x[[1]]),pars[1,,drop=FALSE],ci=ci,...)) m<-length(x) if(m==1) return() for(i in 2:m){ if(is.null(pars)) lines(x[[i]],ci=ci,...) else do.call(lines,c(list(x[[i]]),pars[i,,drop=FALSE],ci=ci,...)) } invisible(x) } print.svykm<-function(x, digits=3,...,header=TRUE){ if (header) {cat("Weighted survival curve: ") print(attr(x,"call"))} suppressWarnings({iq1<-min(which(x$surv<=0.75)) iq2<-min(which(x$surv<=0.5)) iq3<-min(which(x$surv<=0.25))}) if (is.finite(iq1)) q1<-x$time[iq1] else q1<-Inf if (is.finite(iq2)) q2<-x$time[iq2] else q2<-Inf if (is.finite(iq3)) q3<-x$time[iq3] else q3<-Inf cat("Q1 =",round(q1,digits)," median =",round(q2,digits)," Q3 =",round(q3,digits),"\n") invisible(x) } print.svykmlist<-function(x, digits=3,...){ cat("Weighted survival curves:\n") print(attr(x,"call")) for(i in 1:length(x)){ cat(names(x)[i],": ") print(x[[i]],digits=digits,header=FALSE) } invisible(x) } quantile.svykm<-function(x, probs=c(0.75,0.5,0.25),ci=FALSE,level=0.95,...){ iq<-sapply(probs, function(p) suppressWarnings(min(which(x$surv<=p)))) qq<-sapply(iq, function(i) if (is.finite(i)) x$time[i] else Inf) names(qq)<-probs if (ci){ if(is.null(x$varlog)){ warning("no confidence interval available.") } else { halfalpha<-(1-level)/2 z<-qnorm(halfalpha, lower.tail=FALSE) su<-exp(log(x$surv)+z*sqrt(x$varlog)) iu<-sapply(probs, function(p) suppressWarnings(min(which(su<=p)))) qu<-sapply(iu, function(i) if (is.finite(i)) x$time[i] else Inf) sl<-exp(log(x$surv)-z*sqrt(x$varlog)) il<-sapply(probs, function(p) suppressWarnings(min(which(sl<=p)))) ql<-sapply(il, function(i) if (is.finite(i)) x$time[i] else Inf) ci<-cbind(ql,qu) rownames(ci)<-probs colnames(ci)<-format(c(halfalpha,1-halfalpha),3) attr(qq,"ci")<-ci } } qq } confint.svykm<-function(object, parm, level=0.95,...){ if (is.null(object$varlog)) stop("no standard errors in object") parm<-as.numeric(parm) idx<-sapply(parm, function(t) max(which(object$time<=t))) z<-qnorm((1-level)/2) ci<-exp(log(object$surv[idx])+outer(sqrt(object$varlog[idx]),c(z,-z))) ci[,2]<-pmin(ci[,2],1) rownames(ci)<-parm colnames(ci)<-format( c((1-level)/2, 1-(1-level)/2),3) ci } predict.svycoxph<-function(object, newdata, se=FALSE, type=c("lp", "risk", "terms","curve"), ...){ type<-match.arg(type) if(type!="curve") return(NextMethod()) design<-object$survey.design response<-object$y if (!is.null(attr(terms(object), "specials")$strata)) stop("Stratified models are not supported yet") if (attr(response,"type")=="counting"){ time<-object$y[,2] status<-object$y[,'status'] entry<-object$y[,1] } else if (attr(response,'type')=="right"){ time<-object$y[,"time"] status<-object$y[,"status"] entry<-rep(-Inf,length(time)) } else stop("unsupported survival type") if(is.null(object$na.action)){ design<-object$survey.design } else { design<-object$survey.design[-object$na.action,] } ff<-delete.response(terms(formula(object))) zmf<-model.frame(ff, newdata) z.pred<-model.matrix(ff, zmf)[,-1,drop=FALSE] ## ## The simple case first ## risk<-getS3method("predict","coxph")(object,type="risk",se.fit=FALSE) if(se==FALSE){ tt<-c(time,entry) ss<-c(status,rep(0,length(entry))) ee<-c(rep(1,length(status)),rep(-1,length(entry))) oo<-order(tt,-ee,-ss) dN<-ss[oo] w<-rep(weights(design),2)[oo] risks<-rep(risk,2) Y<-rev(cumsum(rev(risks[oo]*w*ee[oo]))) keep<-dN>0 s<-vector("list",nrow(z.pred)) beta<-coef(object) h0<- cumsum( (w*dN/Y)[keep] ) for(i in 1:nrow(z.pred)){ zi<-z.pred[i,]-object$means s[[i]]<-list(time=time[oo][keep], surv=exp(-h0 * exp(sum(beta*zi))), call=sys.call()) class(s[[i]])<-c("svykmcox","svykm") } names(s)<-rownames(newdata) return(s) } ## ## The hard case: curves with standard errors ## if(!inherits(design,"survey.design")) stop("replicate-weight designs not supported yet") keep<-which((status==1) & (weights(design)!=0)) y<-outer(time,time[keep],">=")*risk*outer(entry,time[keep],"<=") dN<-diag(status)[,keep] oo<-order(time[keep], -status[keep]) okeep<-keep[oo] ntimes<-length(oo) ttime<-time[okeep] sstatus<-status[okeep] totals<-svytotal(cbind(dN[,oo],y[,oo]), design) rm(dN) y<-coef(totals)[-(1:ntimes)] dNbar<-coef(totals)[1:ntimes] vtotals<-vcov(totals) rm(totals) h<-cumsum(dNbar/y) dVn<- vtotals[(1:ntimes),(1:ntimes)]/outer(y,y) dVy <- vtotals[-(1:ntimes),-(1:ntimes)]*outer(dNbar/y^2,dNbar/y^2) dCVny<- -vtotals[(1:ntimes),-(1:ntimes)]*outer(1/y,dNbar/y^2) dV<-dVn+dVy+dCVny+t(dCVny) det<-suppressWarnings(coxph.detail(object)) ze<-sweep(as.matrix(det$means)[rep(1:length(det$time), det$nevent),,drop=FALSE], 2, object$means) rm(det) dH<-dNbar/y h.ze<-dH*ze varbeta<-vcov(object) Vh<-numeric(ntimes) Vh[1]<-dV[1,1] for(i in 2:ntimes) Vh[i]<-Vh[i-1]+sum(dV[1:(i-1),i])+sum(dV[i,1:i]) dVb<-numeric(ntimes) for(i in 1:ntimes) dVb[i]<-crossprod(h.ze[i,],varbeta%*%(h.ze[i,])) Vb<-cumsum(dVb) dCV<-matrix(nrow=ntimes,ncol=NCOL(ze)) for(i in 1:ntimes) dCV[i,] <- -varbeta%*%(h.ze[i,]) CV<-apply(dCV,2,cumsum) V0<-Vh+Vb s0<-exp(-h) s<-vector("list",nrow(z.pred)) for(i in 1:nrow(z.pred)){ zi<-z.pred[i,]-object$means riski<-exp(sum(zi*coef(object))) Vz<-drop(crossprod(zi,varbeta%*%zi))*riski^2*h^2 CVz<-colSums(t(dCV)*zi)*riski^2*h V<-V0*riski^2+Vz+CVz*2 s[[i]]<-list(time=ttime,surv=exp(-h*riski), varlog=V) class(s[[i]])<-c("svykm.cox","svykm") } names(s)<-rownames(newdata) scall<-sys.call() scall[[1]]<-as.name(.Generic) attr(s,"call")<-scall class(s)<-c("svykmlist.cox","svykmlist") return(s) } survey/R/grake.R0000644000176200001440000004320514423576274013246 0ustar liggesusers make.calfun<-function(Fm1,dF, name){ if (!identical(names(formals(Fm1)), c("u","bounds"))) stop("wrong argument names for Fm1") if(!identical(names(formals(dF)), c("u","bounds"))) stop("wrong argument names for dF") rval<-list(Fm1=Fm1, dF=dF, name=name) class(rval)<-"calfun" rval } cal_names <- function(formula, design, ...) UseMethod("cal_names",design) cal_names.DBIsvydesign<-function(formula, design,...){ design$variables <- getvars(formula, design$db$connection, design$db$tablename, updates = design$updates, subset = design$subset) colnames(model.matrix(formula, model.frame(formula,design$variables[0,]))) } cal_names.survey.design<-function(formula,design,...) { colnames(model.matrix(formula, model.frame(formula,model.frame(design)[0,]))) } print.calfun<-function(x,...) cat("calibration metric: ",x$name,"\n") calibrate<-function(design, ...) UseMethod("calibrate") calibrate.pps<-function(design, formula, population, aggregate.stage=NULL, stage=0,...){ if (!is.null(stage) && !(stage==0)) stop("'stage'(>0) not supported for pps designs") if (!is.null(aggregate.stage)) stop("'aggregate.stage' not supported for pps designs") calibrate.survey.design2(design, formula, population, aggregate.stage=NULL, stage=0,,...) } calibrate.survey.design2<-function(design, formula, population, aggregate.stage=NULL, stage=0, variance=NULL, bounds=c(-Inf,Inf), calfun=c("linear","raking","logit"), maxit=50, epsilon=1e-7, verbose=FALSE, force=FALSE, trim=NULL, bounds.const = FALSE, sparse=FALSE, ...){ if(is.list(formula) && is.list(population)){ ## inputs as marginal totals, as in rake() population<-margins2totals(formula,population) formula<-as.formula(paste("~",paste(sapply(formula,function(f) paste(all.vars(f),collapse="*")),collapse="+"))) if (verbose){ print(formula) print(population) } } if (!is.list(bounds)) bounds <- list(lower = bounds[1], upper = bounds[2]) ## converting to list if not already if (is.character(calfun)) calfun<-match.arg(calfun) if (is.character(calfun) && calfun=="linear" && all(unlist(bounds) == c(-Inf, Inf))){ ## old code is better for ill-conditioned linear calibration rval<-regcalibrate(design,formula,population, aggregate.stage=aggregate.stage, stage=stage, lambda=variance,sparse=sparse,...) rval$call<-sys.call(-1) return(rval) } if(is.character(calfun)) calfun<-switch(calfun,linear=cal.linear, raking=cal.raking, logit=cal.logit) else if(!inherits(calfun,"calfun")) stop("'calfun' must be a string or of class 'calfun'.") if (length(epsilon)!=1 && length(epsilon)!=length(population)) stop("'epsilon' must be a scalar or of the same length as 'population'") if (!is.null(aggregate.stage)){ aggindex<-design$cluster[[aggregate.stage]] } expit<-function(x) 1-1/(1+exp(x)) ## calibration to population totals if(sparse){ mm<-sparse.model.matrix(formula, model.frame(formula, model.frame(design))) }else{ mm<-model.matrix(formula, model.frame(formula, model.frame(design))) } ww<-weights(design) if (bounds.const) bounds<-lapply(bounds, function(x) ifelse(ww>0,x/ww,x)) # if bounds are set to a constant convert to multiplicative value and run as normal if (!is.null(aggregate.stage)){ mm<-apply(mm,2,function(mx) ave(mx,aggindex)) ww<-ave(ww,aggindex) } whalf<-sqrt(ww) sample.total<-colSums(mm*ww) if(any(sample.total==0)){ ## drop columsn where all sample and population are zero zz<-(population==0) & (apply(mm,2,function(x) all(x==0))) mm<-mm[,!zz] population<-population[!zz] sample.total<-sample.total[!zz] if (length(epsilon)>1) epsilon <- epsilon[!zz] } if (length(sample.total)!=length(population)){ print(sample.total) print(population) stop("Population and sample totals are not the same length.") } if(!is.null(names(population))){ if (!all(names(sample.total) %in% names(population))){ warning("Sampling and population totals have different names.") cat("Sample: "); print(names(sample.total)) cat("Popltn: "); print(names(population)) } else if (!all(names(sample.total) == names(population))){ warning("Sample and population totals reordered to make names agree: check results.") population <- population[match(names(sample.total), names(population))] } } tqr<-qr(mm*whalf) #if (!all(abs(qr.resid(tqr,whalf))<1e-10)) # warning("G-calibration models must have an intercept") g<-grake(mm,ww,calfun, bounds=bounds,population=population, verbose=verbose,epsilon=epsilon,maxit=maxit, variance=variance) if(!is.null(trim)) { gnew<-pmax(trim[1], pmin(g, trim[2])) outside<-gtrim[2] if (any(outside)){ trimmings<-(g-gnew)*ww gnew[!outside]<-gnew[!outside]+sum(trimmings)/sum(ww[!outside]) g<-gnew attr(g,"failed")<-NULL message(paste(sum(outside),"weights were trimmed")) } } if (!is.null(attr(g,"failed"))){ if (!force) stop("Calibration failed") } design$prob<-design$prob/g caldata <- list(qr=tqr, w=g*whalf, stage=0, index=NULL) class(caldata) <- c("greg_calibration","gen_raking") design$postStrata <- c(design$postStrata, list(caldata)) design$call <- sys.call(-1) design } calibrate.svyrep.design<-function(design, formula, population,compress=NA, aggregate.index=NULL, variance=NULL, bounds=c(-Inf,Inf), calfun=c("linear","raking","logit"), maxit=50, epsilon=1e-7, verbose=FALSE,force=FALSE, trim=NULL, bounds.const=FALSE, sparse=FALSE, ...){ if(is.list(formula) && is.list(population)){ ## inputs as marginal totals, as in rake() population<-margins2totals(formula,population) formula<-as.formula(paste("~",paste(sapply(formula,function(f) paste(all.vars(f),collapse="*")),collapse="+"))) if (verbose){ print(formula) print(population) } } if (is.character(calfun)) calfun<-match.arg(calfun) if (length(epsilon)!=1 && length(epsilon)!=length(population)) stop("'epsilon' must be a scalar or of the same length as 'population'") if (!is.list(bounds)) bounds <- list(lower = bounds[1], upper = bounds[2]) ## converting to list if not already if (is.character(calfun) && calfun=="linear" && all(unlist(bounds)==c(-Inf,Inf))){ ## old code is better for ill-conditioned linear calibration rval<-regcalibrate(design,formula,population, compress=compress, aggregate.index=aggregate.index, lambda=variance,...) rval$call<-sys.call(-1) return(rval) } mf<-model.frame(formula, design$variables) if(sparse){ mm<-sparse.model.matrix(formula, model.frame(formula, model.frame(design))) }else{ mm<-model.matrix(formula, model.frame(formula, model.frame(design))) } ww<-design$pweights repwt<-as.matrix(design$repweights) if (!design$combined.weights) repwt<-repwt*design$pweights if (inherits(aggregate.index,"formula")){ if (length(aggregate.index)!=2) stop("aggregate.index must be a one-sided formula") aggregate.index<-model.frame(aggregate.index, design$variables) if (NCOL(aggregate.index)>1) stop("aggregate.index must specify a single variable") aggregate.index<-aggregate.index[[1]] } if (!is.null(aggregate.index)){ if (sqrt(max(ave(ww,aggregate.index,FUN=var),na.rm=TRUE))>1e-2*mean(ww)) warning("Sampling weights are not constant within clusters defined by aggregate.index") mm<-apply(mm,2,function(mx) ave(mx,aggregate.index)) ww<-ave(ww,aggregate.index) repwt<-apply(repwt,2,function(wx) ave(wx, aggregate.index)) } whalf<-sqrt(ww) sample.total<-colSums(mm*ww) if(any(sample.total==0)){ ## drop columsn where all sample and population are zero zz<-(population==0) & (apply(mm,2,function(x) all(x==0))) mm<-mm[,!zz] population<-population[!zz] sample.total<-sample.total[!zz] if (length(epsilon)>1) epsilon <- epsilon[!zz] } if (length(sample.total)!=length(population)){ print(sample.total) print(population) stop("Population and sample totals are not the same length.") } if (!is.null(names(population))){ if (!all(names(sample.total) %in% names(population))){ warning("Sampling and population totals have different names.") cat("Sample: "); print(names(sample.total)) cat("Popltn: "); print(names(population)) } else if (!all(names(sample.total) == names(population))){ warning("Sample and population totals reordered to make names agree: check results.") population <- population[match(names(sample.total), names(population))] } } if(is.character(calfun)) calfun<-switch(calfun, linear=cal.linear, raking=cal.raking, logit=cal.logit) else if (!inherits(calfun,"calfun")) stop("'calfun' must be a string or a 'calfun' object") gtotal <- grake(mm,ww,calfun,bounds=bounds,population=population, verbose=verbose, epsilon=epsilon, maxit=maxit, variance=variance) if(!is.null(trim)) { gnew<-pmax(trim[1], pmin(gtotal, trim[2])) outside<-gtotaltrim[2] if (any(outside)){ trimmings<-(gtotal-gnew)*ww gnew[!outside]<-gnew[!outside]+sum(trimmings)/sum(ww[!outside]) gtotal<-gnew attr(gtotal,"failed")<-NULL message(paste(sum(outside),"weights were trimmed")) } } if (!force && !is.null(attr(gtotal,"failed"))) stop("Calibration failed") design$pweights<-design$pweights*gtotal for(i in 1:NCOL(repwt)){ wwi<-repwt[,i] if(verbose) cat("replicate = ",i,"\n") g<-grake(mm, wwi, calfun, eta=rep(0,NCOL(mm)), bounds=bounds, population=population, epsilon=epsilon, verbose=verbose, maxit=maxit, variance=variance) if(length(trim)==2){ outside<-(gtrim[2]) if (any(outside)) { gnew<-pmax(trim[1],pmin(g,trim[2])) trimmings<-(g-gnew)*wwi gnew[!outside]<-gnew[!outside]+sum(trimmings)/sum(wwi[!outside]) g<-gnew }} repwt[,i]<-as.vector(design$repweights[,i])*g } if (!design$combined.weights) repwt<-repwt/gtotal if (compress || (is.na(compress && inherits(design$repweights,"repweights_compressed")))){ repwt<-compressWeights(repwt) } design$repweights<-repwt design$call<-sys.call(-1) design } cal.linear<-make.calfun(function(u,bounds) pmin(pmax(u+1,bounds$lower),bounds$upper)-1, function(u, bounds) as.numeric(u < bounds$upper-1 & u > bounds$lower-1), "linear calibration") cal.raking<-make.calfun(function(u,bounds) pmin(pmax(exp(u),bounds$lower),bounds$upper)-1, function(u, bounds) ifelse(ubounds$lower-1,exp(u),0), "raking") cal.logit<-make.calfun( function(u,bounds) { if (any(!is.finite(unlist(bounds)))) stop("Logit calibration requires finite bounds") L <- bounds$lower U <- bounds$upper A <- (U-L)/((U-1)*(1-L)) eAu <- exp(A*u) ( L*(U-1) + U*(1-L)*eAu)/(U-1+(1-L)*eAu)-1 }, function(u,bounds) { L <- bounds$lower U <- bounds$upper A <- (U-L)/((U-1)*(1-L)) eAu <- exp(A*u) U*(1-L)*eAu*A/(U-1+(1-L)*eAu)-( (L*(U-1)+U*(1-L)*eAu)*( (1-L)*eAu*A ) )/(U-1+(1-L)*eAu)^2 }, "logit calibration" ) cal.sinh <- make.calfun( Fm1 = function(u, bounds) { if (any(!is.finite(unlist(bounds)))) stop("Sinh calibration requires finite bounds") dasinh <- function(u, alpha = 1) { p <- asinh(2 * alpha * u) m <- (p + sqrt((p^2) + 4*(alpha^2)))/(2*alpha) m <- as.vector(m) m } # linear truncation pmin(pmax(dasinh(u), bounds$lower), bounds$upper) - 1 }, dF = function(u, bounds) { ddasinh <- function(u, alpha = 1) { p <- asinh(2 * alpha * u) m <- 1/sqrt(1 + (2*alpha*u)^2)*(1 + p/sqrt(p^2 + 4*alpha^2)) m <- as.vector(m) m } ifelse(u < bounds$upper - 1 & u > bounds$lower - 1, ddasinh(u), 0) }, name = 'sinh calibration' ) grake<-function(mm,ww,calfun,eta=rep(0,NCOL(mm)),bounds,population,epsilon, verbose, maxit, variance=NULL){ sample.total<-colSums(mm*ww) if(!inherits(calfun,"calfun")) stop("'calfun' must be of class 'calfun'") Fm1<-calfun$Fm1 dF<-calfun$dF if (is.null(variance)){ sigma2<-rep(1,nrow(mm)) } else if(length(variance) == nrow(mm)){ sigma2<-drop(variance) }else{ sigma2<-drop(mm%*%variance) } xeta<-drop(mm%*%eta/sigma2) g<-1+Fm1(xeta, bounds) deriv <- dF(xeta, bounds) iter<-1 ## pre-scaling for people starting with no weights SOMETHRESHOLD<-20 scales<-population/sample.total if (min(scales)> SOMETHRESHOLD){ scale<-mean(scales) ww<-ww*scale sample.total<-sample.total*scale if(verbose) message(paste("Sampling weights rescaled by",signif(scale,3))) if (any(is.finite(unlist(bounds)))) warning(paste("Bounds were set but will be interpreted after rescaling by",signif(scale,3))) } else scale<-NULL repeat({ Tmat<-crossprod(mm*ww/sqrt(sigma2)*deriv, mm/sqrt(sigma2)) misfit<-(population-sample.total-colSums(mm*ww*Fm1(xeta, bounds))) deta<-MASS::ginv(as(Tmat, "matrix"), tol=256*.Machine$double.eps)%*%misfit eta<-eta+deta xeta<- drop(mm%*%eta/sigma2) g<-1+Fm1(xeta, bounds) deriv <- dF(xeta, bounds) while(itermaxit) { achieved<-max((abs(misfit)/(1+abs(population)))) warning("Failed to converge: eps=",achieved," in ",iter," iterations") attr(g,"failed")<-achieved break; } }) if (!is.null(scale)) g<-g*scale attr(g,"eta")<-eta g } trimWeights<-function(design, upper=Inf,lower=-Inf, ...){ UseMethod("trimWeights") } do_trimWeights<-function(pw, upper,lower, has_trimmed){ outside<-pwupper if (!any(outside)) return(list(weights=pw,has_trimmed=has_trimmed)) pwnew<-pmax(lower,pmin(pw, upper)) trimmings<-pw-pwnew can_trim<-!outside & !has_trimmed if (!any(can_trim)){ warning("trimming failed") } else { pwnew[can_trim]<-pwnew[can_trim]+sum(trimmings)/sum(can_trim) } list(weights=pwnew,has_trimmed=outside | has_trimmed) } trimWeights.survey.design2<-function(design, upper=Inf, lower= -Inf, strict=FALSE,...){ pw<-weights(design,"sampling") outside<-pwupper if (!any(outside)) return(design) ## doesn't need trimming has_trimmed<-rep(FALSE,length(outside)) while(any(outside)){ trim<-do_trimWeights(pw, upper,lower, has_trimmed) pw<-trim$weights if (!strict) break outside<-pwupper has_trimmed<-trim$has_trimmed } design$prob<-1/pw design$call<-sys.call() design$call[[1]]<-as.name(.Generic) design } trimWeights.svyrep.design<-function(design, upper=Inf, lower= -Inf, strict=FALSE, compress=FALSE,...){ pw<-weights(design,"sampling") outside<-pwupper if (any(outside)) { has_trimmed<-rep(FALSE,length(outside)) while(any(outside)){ trim<-do_trimWeights(pw, upper,lower, has_trimmed) pw<-trim$weights if (!strict) break outside<-pwupper has_trimmed<-trim$has_trimmed } design$prob<-1/pw } rw<-weights(design, "analysis") outside<-rwupper if (any(outside)) { rwnew<-matrix(pmax(lower,pmin(rw, upper)),nrow=nrow(rw)) trimmings<-rw-rwnew rwnew<-rwnew+t(t(!outside)*colSums(trimmings)/colSums(!outside)) if (compress) design$repweights<-compressWeights(rwnew) else design$repweights<-rwnew design$combined.weights<-TRUE } design$call<-sys.call() design$call[[1]]<-as.name(.Generic) design } margins2totals<-function(formulas, totals){ totals<-mapply(onemargin2totals,formulas,totals,SIMPLIFY=FALSE) totaln<-do.call(c,totals) totalorder<-do.call(c,lapply(totals,function(x) attr(x,"order"))) totaln<-totaln[order(totalorder)] totaln[!duplicated(names(totaln))] } onemargin2totals<-function(formula,total){ if (is.table(total)) total<-as.data.frame(total) if (!is.data.frame(total) && is.vector(total) && (length(formula[[2]])==1)){ ## just a vector total<-as.table(total) d<-dimnames(total) names(d)<-paste(deparse(formula[[2]]),collapse="") total<-as.data.frame(total) } if (!is.data.frame(total)) stop("incorrect format for population totals") newformula<-as.formula(paste("Freq",paste(all.vars(formula),collapse="*"),sep="~")) mf<-model.frame(newformula,as.data.frame(total)) mm<-model.matrix(newformula,mf) intorder<-c(1,attr(terms(newformula),"order")[attr(mm,"assign")]) rval<-colSums(mf$Freq*mm) attr(rval,"order")<-intorder rval } survey/R/mrb.R0000644000176200001440000000354214044064724012724 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 & i1) 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/qrule.R0000644000176200001440000000622414476223163013277 0ustar liggesusers ## Need to call qs() from qrule(), because definition of p varies by rule. ## Discrete qrule_math <-qrule_hf1 <- function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } qdata<-qs(x,w,p) if(qdata$wlow<=0) qdata$qlow else qdata$qup } qrule_school<-qrule_hf2 <- function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } qdata<-qs(x,w,p) if(qdata$wlow<=0) (qdata$qlow+qdata$qup)/2 else qdata$qup } qrule_hf3 <- function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } w<-rowsum(w,x) x<-sort(unique(x)) qdata<-qs(x,w,p) if((qdata$wlow<=0)&& (qdata$ilow %%2 ==0)) qdata$qlow else qdata$qup } ## Continuous qrule_hf4 <- function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } qdata<-qs(x,w,p) gamma<-with(qdata, wlow/(wup+wlow)) qdata$qlow*(1-gamma)+qdata$qup*gamma } qrule_hf5<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] cumw<-cumsum(w) pk<-(cumw-w/2)/(cumw[n]) approx( pk,x, p, method="linear", rule=2)$y } qrule_hf6<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] cumw<-cumsum(w) pk<-cumw/(cumw[n]+w[n]) approx( pk,x, p, method="linear", rule=2)$y } qrule_shahvaish<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] wbar<-w/mean(w) S<-cumsum(wbar) pk<-(S+0.5-w/2)/(n+1) approx( pk,x, p, method="constant", f=0, rule=2)$y } qrule_hf7<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] cumw<-cumsum(w[ii]) pk<-c(0, cumw[-n])/cumw[n-1] approx( pk,x, p, method="linear", rule=2)$y } qrule_hf8<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] cumw<-cumsum(w) pk<-(c(0, cumw[-n])*1/3+cumw*2/3)/(cumw[n]+w[n]/3) approx( pk,x, p, method="linear", rule=2)$y } qrule_hf9<-function(x,w,p){ if (any(zero<-w==0)){ w<-w[!zero] x<-x[!zero] } n<-length(x) if (n==1) return(x) ii<-order(x) x<-x[ii] w<-w[ii] cumw<-cumsum(w) pk<-(c(0, cumw[-n])*3/8+cumw*5/8)/(cumw[n]+w[n]/4) approx( pk,x, p, method="linear", rule=2)$y } last<-function(a) { if (any(a)) max(which(a)) else 1 } qs <- function(x, w, p){ ## already has missings removed, ties handled. n<-length(x) ii<-order(x) x<-x[ii] cumw<-cumsum(w[ii]) pos<-last(cumw<=p*sum(w)) posnext<-if(pos==length(x)) pos else pos+1 list(qlow=x[pos], qup=x[posnext], ilow=pos,iup=posnext, wlow=p-cumw[pos]/sum(w),wup=cumw[posnext]/sum(w)-p) } survey/R/paley.R0000644000176200001440000001307511457435612013263 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/chisqsum.R0000644000176200001440000000553514166647050014010 0ustar liggesusers pchisqsum<-function(x,df,a,lower.tail=TRUE, method=c("satterthwaite","integration","saddlepoint")){ satterthwaite<-function(a,df){ if(any(df>1)){ a<-rep(a,df) } tr<-mean(a) tr2<-mean(a^2)/(tr^2) list(scale=tr*tr2, df=length(a)/tr2) } ## chisqphi<-function(t, df=1,a=1){ ## (1-(0+2i)*a*t)^(-df/2) ## } ## make.integrand<-function(x,DF,A){ ## m<-length(DF) ## function(t){ ## n<-length(t) ## tmp<-matrix(chisqphi(rep(t,each=m),rep(DF,n),rep(A,n) ),ncol=n) ## phi<-apply(tmp,2,prod) ## rval<-Im(phi*exp(-(0+1i)*t*x)/(pi*t)) ## rval[t==0]<-x/(pi) ## rval ## } ## } method<-match.arg(method) sat<-satterthwaite(a,df) guess<-pchisq(x/sat$scale,sat$df,lower.tail=lower.tail) if (method=="satterthwaite") return(guess) method<-match.arg(method) if (method=="integration" && !(requireNamespace("CompQuadForm",quietly=TRUE))){ warning("Package 'CompQuadForm' not found, using saddlepoint approximation") method<-"saddlepoint" } abstol<-guess/1000 abstol<-pmax(1e-9, abstol) reltol<-rep(1/1000,length(abstol)) if (method=="integration"){ if (any(a<=0)){ for(i in seq(length=length(x))){ f<-CompQuadForm::davies(x[i],a,df,acc=1e-7) if (f$ifault>0) warning("Probable loss of accuracy ") guess[i]<-f$Qq } if(any(guess<1e-6)) warning("Probable loss of accuracy ") } else{ for(i in seq(length=length(x))){ ## version 1.4.2 of CompQuadForm changed the *name* of the result. Grr. temp<-CompQuadForm::farebrother(x[i],a,df) guess[i]<-if ("Qq" %in% names(temp)) temp$Qq else temp$res } if(any(guess<1e-9)) warning("Probable loss of accuracy ") } if (lower.tail) guess<-1-guess return(guess) } else if (method=="saddlepoint"){ lambda<-rep(a,df) sad<-sapply(x,saddle,lambda=lambda) if (lower.tail) sad<-1-sad guess<-ifelse(is.na(sad),guess,sad) return(guess) } } saddle<-function(x,lambda){ d<-max(lambda) lambda<-lambda/d x<-x/d k0<-function(zeta) -sum(log(1-2*zeta*lambda))/2 kprime0<-function(zeta) sapply(zeta, function(zz) sum(lambda/(1-2*zz*lambda))) kpprime0<-function(zeta) 2*sum(lambda^2/(1-2*zeta*lambda)^2) n<-length(lambda) if (any(lambda < 0)) { lmin <- max(1/(2 * lambda[lambda < 0])) * 0.99999 } else if (x>sum(lambda)){ lmin <- -0.01 } else { lmin<- -length(lambda)/(2*x) } lmax<-min(1/(2*lambda[lambda>0]))*0.99999 hatzeta <- uniroot(function(zeta) kprime0(zeta) - x, lower = lmin, upper = lmax, tol = 1e-08)$root w<-sign(hatzeta)*sqrt(2*(hatzeta*x-k0(hatzeta))) v<-hatzeta*sqrt(kpprime0(hatzeta)) if (abs(hatzeta)<1e-4) NA else pnorm(w+log(v/w)/w, lower.tail=FALSE) } survey/R/svypredmeans.R0000644000176200001440000000212414640361577014667 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]<-mu ##numeric because se.fit=FALSE 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/multiphase_admin.R0000644000176200001440000002334514640361577015502 0ustar liggesusers### multiphase 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) } } } ## less memory-hungry version for sparse tables svy_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) } lookup_ids<-function(ids, subsets, data){ na_id<-na_failsafe("missing values in `id'") if(is.null(ids)) stop("must provide ids") m<-length(ids) if(m<=1 || !is.list(ids)) stop("multiphase needs at least two phases") for(i in 1:m){ istar<-max(i-1,1) if(inherits(ids[[i]],"formula")) { mf<-substitute(model.frame(ids[[i]], data=data[subsets$cumulative[[istar]],,drop=FALSE], na.action=na_id)) ids[[i]]<-eval.parent(mf) if (ncol(ids[[i]])==0) ## formula was ~1 ids[[i]]<-data.frame(id=1:nrow(ids[[i]])[subsets$cumulative[[istar]]]) } else{ if (is.null(ids[[i]])) stop("Must provide ids at each phase") else ids[[i]]<-na_id(data.frame(ids[[i]])) } ## make ids factor if they are character for(j in 1:ncol(ids[[i]])){ if (is.character(ids[[i]][[j]])) ids[[i]][[j]]<-factor(ids[[i]][[j]]) } } ids } na_subset<-function(message="missing values not allowed in subset", subset=NULL){ function(object){ if (NCOL(object)==0) object else { ok <- complete.cases(object) if (!is.null(subset)) ok<-ok[subset] if (all(ok)) object else stop(message) } } } lookup_probs<-function(probs,subsets, data){ m<-length(probs) if (m<=1) stop("need probs (or NULL) at each phase") for (i in 1:m){ this_subset<-subsets$cumulative[[i]] na.prob<-na_subset("missing values in `prob'", this_subset) if(is.null(probs[[i]])) next if(inherits(probs[[i]],"formula")){ mf<-substitute(model.frame(probs[[i]],data=data,na.action=na.prob)) probs[[i]]<-eval.parent(mf) if (ncol(probs[[i]])==0) probs[[i]]<-data.frame(prob=rep(1, sum(this_subset))) } else if(!inherits(probs[[i]],"pps_spec")) stop("prob must be list of formulas or pps_spec objects") } probs } compute_probs<-function(strata, cluster, subset){ popsize <- mapply(function(s, i) ave(!duplicated(i), s, FUN = sum), strata, cluster) fpc <- as.fpc(popsize[subset,,drop=FALSE], strata[subset,,drop=FALSE],cluster[subset,,drop=FALSE]) allprob <- 1/weights(fpc, final = FALSE) prob <- apply(as.data.frame(allprob), 1, prod) list(allprob=allprob,prob=prob) } lookup_subset<-function(subset, data){ ## Note: m is nphases-1 here: two phases, one subset m<-length(subset) cumulative<-vector("list",m+1) cumulative[[1]] <-rep(TRUE, NROW(data)) for(i in 1:m){ na.prob<-na_subset("missing values in `subset'", cumulative[[i]]) if(inherits(subset[[i]],"formula")){ mf<-substitute(model.frame(subset[[i]],data=data,na.action=na.prob)[[1]]) subset[[i]]<-eval.parent(mf) } else stop("subset must be a list of formulas ") added<-isTRUE(subset) & !cumulative[[i]] if(any(added)) stop(paste("subsets must be nested; failed for",subset)) subset[[i]][is.na(subset[[i]])]<-FALSE cumulative[[i+1]]<-cumulative[[i]] & subset[[i]] } return(list(each=subset, cumulative=cumulative)) } lookup_strata<-function(strata,ids, subsets, data){ m<-length(strata) for(i in 1:m){ istar<-max(i-1,1) na_strata<-na_subset("missing values in `strata'", subsets$cumulative[[istar]]) if (!is.null(strata[[i]])){ if(inherits(strata[[i]],"formula")){ mf<-substitute(model.frame(strata[[i]], data=data[subsets$cumulative[[istar]],,drop=FALSE], na.action=na.fail)) strata[[i]]<-eval.parent(mf) } if (!is.list(strata[[i]])) strata[[i]]<-data.frame(strata=strata[[i]]) for(k in 1:NCOL(strata[[i]])){ ##drop empty strata if (is.factor(strata[[i]][[k]])) { strata[[i]][[k]]<-as.factor(as.character(strata[[i]][[k]])) } else if (is.character(strata[[i]][[k]])){ ##coerce string to factor strata[[i]][[k]]<-as.factor(strata[[i]][[k]]) } } } else { strata[[i]]<-na_strata(as.data.frame(matrix(1, nrow=NROW(ids[[i]]), ncol=NCOL(ids[[i]])))) } } strata } check_multistage<-function(ids, strata){ ## check multistage setup for one phase has.strata<-NROW(unique(strata))>1 ## check for only one PSU: probably a typo if ((length(unique(ids[,1]))==1) && !has.strata){ stop("Phase 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("svy_interaction", ids[,1:i,drop=FALSE]) } } ## check if clusters nested in strata ## nest=TRUE not allowed here if(!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") } ## 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]) } list(ids=ids, strata=strata, has.strata=has.strata) } phase_for_var<-function(data, subsets){ ## yes, this could be optimised, but it runs once ## and nvars*nphases isn't going to be worse than thousands nvars<-ncol(data) variable_phases<-rep(1,nvars) names(variable_phases)<-names(data) nphases<-length(subsets) for(i in 2:nphases){ this_phase<-subsets$cumulative[[i]] for(j in 1:nvars){ if (all(is.na(data[!this_phase,j]))) variable_phases[j]<-i } } variable_phases } weights.multiphase<-function(object, type=c("sampling","phase"),...){ type<-match.arg(type) nphases<-object$nphases if(type=="sampling") { w<-object$finalweights*object$subpop[object$subsets$cumulative[[nphases]],nphases] } else if(type=="phase"){ w<-vector("list",nphases) for(i in 1:nphases){ w[[i]]<-object$phaseweights[[i]]*object$subpop[object$subsets$cumulative[[i]],i] } } else stop("can't happen") w } update.multiphase<-function(object,...){ ## use all available data, so that rephase() can work dots <- substitute(list(...))[-1] newnames <- names(dots) for (j in seq(along = dots)) { object$data[, newnames[j]] <- eval(dots[[j]], object$variables, parent.frame()) } object$call <- sys.call(-1) object } multiphase_getdata<-function(x, design, formula_only=FALSE, phase=design$nphases){ if (inherits(x, "formula")) { mf <- model.frame(x, design$data, 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 (formula_only) stop("needs a model formula") if (typeof(x) %in% c("expression", "symbol")) x <- eval(x, design$data) 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 } } if(NROW(x)==sum(design$subsets$cumulative[[phase]])) return(as.matrix(x)) if(NROW(x)==sum(design$subsets$cumulative[[1]])) return(as.matrix(x)[design$subsets$cumulative[[phase]],,drop=FALSE]) stop("explicit x must match first or last phase sample size") } as.matrix(x)[design$subsets$cumulative[[phase]],,drop=FALSE] } dim.multiphase<-function(x,...) dim(x$data) dimnames.multiphase<-function(x,...) dimnames(x$data) "[.multiphase"<-function (x, i, ..., drop = TRUE) { if (!missing(i)) { if (is.logical(i)) x$subpop[!i] <- FALSE else if (is.numeric(i) && length(i)) x$subpop[-i] <- FALSE } else { if (!is.null(x$data)) x$data <- x$data[, ..1, drop = FALSE] } x } survey/R/reweight_dual.R0000644000176200001440000001202114640361577014767 0ustar liggesusers reweight<-function(design,...) UseMethod("reweight") reweight.dualframe<-function(design, targets=NULL, totals=NULL, estimator=c("constant","expected"), theta=NULL, theta_grid=seq(0,1,by=0.05),...) { estimator<-match.arg(estimator) nframes<-length(design$designs) overlaps<-design$overlaps frame_weights<-vector("list",nframes) if (estimator=="expected"){ maxes<-sapply(overlaps, max, na.rm=TRUE) mins<-sapply(overlaps, function(x) min(x[x>0], na.rm=TRUE)) if (max(mins)>=1) overlaps_are_weights<-TRUE else if(min(maxes)>1) stop("overlaps must be all >=1 or all <=1") else overlaps_are_weights<-FALSE for(f in 1:nframes){ overlaps[[f]][overlaps[[f]]==0]<-NA if (overlaps_are_weights) overlaps[[f]]<-1/overlaps[[f]] frame_weights[[f]]<-(1/rowSums(1/overlaps[[f]],na.rm=TRUE))/weights(design$designs[[f]],"sampling") } frame_weights<-do.call(c, frame_weights) design_weights<-do.call(c, lapply(design$designs, weights, type="sampling")) rval<-list(designs=design$designs,overlaps=design$overlaps, frame_scale=design$frame_scale, frame_weights=frame_weights, design_weights=design_weights, call=sys.call(), dchecks=design$dchecks, estimator=estimator) class(rval)<-class(design) return(rval) ##done } if (estimator=="constant" && !is.null(theta)){ frame_scale<-c(theta, 1-theta) for(f in 1:nframes){ frame_weights[[f]]<-ifelse(overlaps[[f]][,3-f]>0, frame_scale[f], 1) } frame_weights<-do.call(c, frame_weights) design_weights<-do.call(c, lapply(design$designs, weights, type="sampling")) rval<-list(designs=design$designs,overlaps=design$overlaps, frame_scale=design$frame_scale, frame_weights=frame_weights, design_weights=design_weights, call=sys.call(), dchecks=design$dchecks, estimator=estimator) class(rval)<-class(design) return(rval) ##done } ## if we get here we are optimising something if (!xor(is.null(targets), is.null(totals))) stop("for estimator='constant', must provide exactly one of targets, totals, and theta") if (!is.null(totals)){ targets<-lapply(totals, function(formula) bquote(vcov(svytotal(.(formula), design=.DESIGN,na.rm=TRUE)))) } if(!is.null(design$theta)) theta_old<-design$theta else theta_old<-1/length(design$designs) ntargets<-length(targets) nthetas<-length(theta_grid) variances<-lapply(1:ntargets, function(x) numeric(nthetas)) for (j in 1:nthetas){ frame_scale<-c(theta_grid[j], 1-theta_grid[j]) for(i in 1:ntargets){ frame_weights<-vector("list",nframes) for(f in 1:nframes){ frame_weights[[f]]<-ifelse(overlaps[[f]][,3-f]>0, frame_scale[f], 1) } frame_weights<-do.call(c, frame_weights) design_weights<-do.call(c, lapply(design$designs, weights, type="sampling")) tempval<-list(designs=design$designs,overlaps=overlaps, frame_scale=design$frame_scale, frame_weights=frame_weights, design_weights=design_weights, call=sys.call(), dchecks=design$dchecks, estimator=estimator) class(tempval)<-class(design) target<-do.call(substitute, list(targets[[i]], list(.DESIGN=tempval))) estimator<-eval(target) if (length(estimator)>1) { warning(paste("multiple variances reported, only the first used for",deparse(targets[[i]]))) estimator<-estimator[1] } variances[[i]][j]<-estimator } } reweight_info<-list(theta=theta_grid, targets=targets, variances=variances, theta_old=theta_old, opt_thetas=theta_grid[sapply(variances, which.min)]) class(reweight_info)<-"reweight_info" rval<-design rval$rewt<-reweight_info class(rval)<-c("dualframe_with_rewt", class(design)) rval } coef.dualframe_with_rewt<-function(object, ...) object$rewt$opt_thetas plot.dualframe_with_rewt<-function(x,y,type="b",...){ ntargets<-length(x$rewt$targets) scaled_vars<-vector("list",ntargets) if((x$rewt$theta_old < min(x$rewt$theta)) || (x$rewt$theta_old > max(x$rewt$theta))) theta_old<-median(x$rewt$theta) else theta_old<-x$rewt$theta_old for(i in 1:ntargets){ fn<-approxfun(x$rewt$theta, x$rewt$variances[[i]]) old_var<-fn(theta_old) scaled_vars[[i]]<-x$rewt$variances[[i]]/old_var } matplot(x$rewt$theta, do.call(cbind,scaled_vars),type=type,xlab="theta",ylab="Scaled variance",...) invisible(list(x$rewt$theta,scaled_vars)) } reweight.multiframe<-function(design, ...) stop("multi-frame reweighting under construction") survey/R/multivariate.R0000644000176200001440000001122311757246235014654 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/score.R0000644000176200001440000001356414505371266013270 0ustar liggesusers fisherinf<-function(beta, model, X=model.matrix(model)){ design<-model$survey.design eta<-X %*%beta mu<-drop(family(model)$linkinv(eta)) V<-family(model)$variance(mu) d<-drop(family(model)$mu.eta(eta)) w<-weights(design,"sampling") D<-X*d t(D)%*%(w*D/V) } scores<-function(model, newbeta, X=model.matrix(model),fullrank=TRUE){ design<-model$survey.design out<-newbeta==0 eta<-X %*%newbeta Xin<-X[, !out, drop=FALSE] Xout<-X[, out, drop=FALSE] Xout_in<-qr.resid(qr(Xin),Xout) mu<-drop(family(model)$linkinv(eta)) V<-family(model)$variance(mu) d<-drop(family(model)$mu.eta(eta)) Y<-model$y Uin<-Xin*((d/V)*(Y-mu)) Uout<-Xout*((d/V)*(Y-mu)) I_rss98<-fisherinf(newbeta, model, X) ## equation 3.3, Rao, Scott, and Skinner 1998 Atwiddle<-I_rss98[out,!out]%*%solve(I_rss98[!out,!out]) #equation 3.2, ibid Uout_in<-Uout-Uin%*%t(Atwiddle) if(fullrank){ rankcheck<-qr(Uout_in) if (rankcheck$rank length(design$prob)) x <- x[nas == 0, , drop = FALSE] else x[nas > 0, ] <- 0 } if(is.null(df)) df<-degf(design) if (is.character(qrule)){ qrulename<-paste("qrule",match.arg(qrule),sep="_") qrule<-get(qrulename, mode="function") } qcrit<-if(df==Inf) qnorm else function(...) qt(...,df=df) interval.type<-match.arg(interval.type) if (interval.type=="score"){ ci_fun<-ffullerCI } else { ci_fun<-function(...) woodruffCI(...,method=interval.type) } w<-weights(design) rvals<-lapply(x, function(xi){ r<-t(sapply(quantiles, function(p){ qhat<-qrule(xi,w,p) if(ci){ ci<-ci_fun(xi,qhat,p,design,qrule,alpha,df) names(ci)<-c(round(100*alpha/2,2),round(100-100*alpha/2,2)) c(quantile=qhat,ci=ci, se=as.numeric(diff(ci)/(2*qcrit(1-alpha/2))) ) } else { c(quantile=qhat) } } )) if(!ci) colnames(r)<-quantiles else rownames(r)<-quantiles r } ) attr(rvals,"hasci")<-ci class(rvals)<-"newsvyquantile" rvals } svyquantile.svyrep.design <- function (x, design, quantiles, alpha = 0.05, interval.type = c("mean", "beta","xlogit", "asin","quantile"), na.rm = FALSE, ci=TRUE, se = ci, qrule=c("math","school","shahvaish","hf1","hf2","hf3","hf4","hf5","hf6","hf7","hf8","hf9"), df = NULL, return.replicates=FALSE,...) { interval.type <- match.arg(interval.type) if (design$type %in% c("JK1", "JKn") && interval.type == "quantile") warning("Jackknife replicate weights may not give valid standard errors for quantiles") if (design$type %in% "other" && interval.type == "quantile") message("Not all replicate weight designs give valid standard errors for quantiles.") if (inherits(x, "formula")) x <- model.frame(x, design$variables, na.action = if (na.rm) na.pass else na.fail) else if (typeof(x) %in% c("expression", "symbol")) x <- eval(x, design$variables) if (na.rm) { nas <- rowSums(is.na(x)) design <- design[nas == 0, ] if (length(nas) > length(design$prob)) x <- x[nas == 0, , drop = FALSE] else x[nas > 0, ] <- 0 } if (is.character(qrule)){ qrulename<-paste("qrule",match.arg(qrule),sep="_") qrule<-get(qrulename, mode="function") } if (is.null(df)) df <- degf(design) if (df == Inf) qcrit <- qnorm else qcrit <- function(...) qt(..., df = df) w<-weights(design,"sampling") if (interval.type=="quantile"){ ci_fun<-function(...) repCI(...,return.replicates=return.replicates) } else { if(return.replicates) warning("return.replicates=TRUE only implemented for interval.type='quantile'") ci_fun<- function(...) woodruffCI(..., method = interval.type) } if ((interval.type=="quantile") && return.replicates){ rvals<-lapply(x, function(xi){ lapply(quantiles, function(p){ qhat<-qrule(xi,w,p) ci<-ci_fun(xi,qhat,p,design,qrule,alpha,df) list(quantile=qhat, replicates=attr(ci,"replicates")) } ) } ) ests<-sapply(rvals, function(v) sapply(v, function(qi) qi$quantile)) ests <- matrix(ests, nrow = length(quantiles), ncol = length(rvals), dimnames=list(paste("q",round(quantiles,2),sep=""), names(x))) attr(ests, "scale") <- design$scale attr(ests, "rscales") <- design$rscales attr(ests, "mse") <- design$mse reps<-sapply(rvals, function(v) sapply(v, function(qi) qi$replicates)) reps <- matrix(reps, ncol = nrow(ests) * ncol(ests)) colnames(reps) <- as.vector(outer(names(x), paste("q",round(quantiles,2),sep=""), paste)) rval <- ests attr(rval,"statistic") <- 'quantiles' vv <- svrVar(reps, design$scale, design$rscales, mse=design$mse, coef=ests) attr(rval,"var") <- matrix(diag(vv), nrow = nrow(ests), ncol = ncol(ests), dimnames=list(paste("q",round(quantiles,2),sep=""), names(x))) rval<-list(quantile=rval,replicates=reps) class(rval)<-"svrepstat" return(rval) } else { rvals<-lapply(x, function(xi){ r<- t(sapply(quantiles, function(p){ qhat<-qrule(xi,w,p) if(ci){ ci<-ci_fun(xi,qhat,p,design,qrule,alpha,df) names(ci)<-c(round(100*alpha/2,2),round(100-100*alpha/2,2)) c(quantile=qhat,ci=ci, se=unname(diff(ci)/(2*qcrit(1-alpha/2))) )} else{ c(quantile=qhat) } } )) if(!ci) colnames(r)<-quantiles else rownames(r)<-quantiles r } ) attr(rvals,"hasci")<-ci | se class(rvals)<-"newsvyquantile" } rvals } SE.newsvyquantile<-function(object,...) { if(!attr(object,"hasci")) stop("object does not have uncertainty estimates") do.call(c,lapply(object,function(ai) ai[,4])) } vcov.newsvyquantile<-function(object,...) { if(!attr(object,"hasci")) stop("object does not have uncertainty estimates") r<-do.call(c,lapply(object,function(ai) ai[,4]))^2 v<-matrix(NA,nrow=length(r),ncol=length(r)) diag(v)<-r v } coef.newsvyquantile<-function(object,...){ if(attr(object,"hasci")) do.call(c,lapply(object,function(ai) ai[,1])) else do.call(c,lapply(object,function(ai) ai[1,])) } confint.newsvyquantile<-function(object,...){ if(!attr(object,"hasci")) stop("object does not have uncertainty estimates") l<-do.call(c,lapply(object,function(ai) ai[,2])) u<-do.call(c,lapply(object,function(ai) ai[,3])) cbind(l,u) } woodruffCI<-function(x, qhat,p, design, qrule,alpha,df,method=c("mean","beta","xlogit","asin")){ method<-match.arg(method) m<-svymean(x<=qhat, design) names(m)<-"pmed" pconfint<-switch(method, mean=as.vector(confint(m, 1, level = 1-alpha, df = df)), xlogit= {xform <- svycontrast(m, quote(log(`pmed`/(1 - `pmed`)))); expit(as.vector(confint(xform, 1, level = 1-alpha, df = df)))}, beta={n.eff <- coef(m) * (1 - coef(m))/vcov(m); rval <- coef(m)[1] n.eff <- n.eff * (qt(alpha/2, nrow(design) - 1)/qt(alpha/2, degf(design)))^2 c(qbeta(alpha/2, n.eff * rval, n.eff * (1 - rval) + 1), qbeta(1 - alpha/2, n.eff * rval + 1, n.eff * (1 - rval))) }, asin={xform <- svycontrast(m, quote(asin(sqrt(`pmed`)))) sin(as.vector(confint(xform, 1, level = 1-alpha, df = df)))^2 } ) lower<-if(is.nan(pconfint[1]) || (pconfint[1]<0)) NaN else qrule(x,weights(design,"sampling"), pconfint[1]) upper<-if(is.nan(pconfint[2])|| (pconfint[2]>1)) NaN else qrule(x,weights(design,"sampling"), pconfint[2]) rval<-c(lower, upper) names(rval)<-c(round(100*alpha/2,1),round(100*(1-alpha/2),1)) rval } ffullerCI<-function(x, qhat, p, design, qrule, alpha, df){ qcrit<-if(df==Inf) qnorm else function(...) qt(...,df=df) U <- function(theta) { ((x > theta) - (1 - p)) } scoretest <- function(theta, qlimit) { umean <- svymean(U(theta), design) umean/SE(umean) - qlimit } iqr <- IQR(x) lowerT <- min(x) + iqr/100 upperT <- max(x) - iqr/100 tol <- 1/(100 * sqrt(nrow(design))) qlow<- uniroot(scoretest, interval = c(lowerT, upperT), qlimit = qcrit(alpha/2, lower.tail = FALSE), tol = tol)$root qup<-uniroot(scoretest, interval = c(lowerT, upperT), qlimit = qcrit(alpha/2, lower.tail = TRUE), tol = tol)$root w<-weights(design) c(qrule(x, w, mean(x<=qlow)), qrule(x, w, mean(x<=qup))) } repCI<-function(x, qhat, p, design, qrule, alpha, df,return.replicates){ qcrit<-if(df==Inf) qnorm else function(...) qt(...,df=df) wrep<-weights(design,"analysis") reps<-apply(wrep,2, function(wi) qrule(x,wi,p)) v<-with(design, svrVar(reps, scale=scale, rscales=rscales, mse=mse,coef=qhat)) ci<- qhat+ c(-1,1)*sqrt(v)*qcrit(1-alpha/2) if (return.replicates) attr(ci,"replicates")<-reps ci } survey/R/sysdata.rda0000644000176200001440000000073215147136401014154 0ustar liggesusersBZh91AY&SYJ/3XP@6f@ & OIM44i 2L`Ch4ɠ24т(DfLB0:*7j8*ǖL!Ã0UT-/uHm( *i)d3"}0 "@C| .04Z1DvThz q V2gjSggm x=ާUvJOE=wrχw;ac(xqUt=s=t M(Yfb~^ϥL Zi8v >Q+i8&dnrweight | 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/multiframe.R0000644000176200001440000002471314640361577014324 0ustar liggesusers## designs is just a list of designs [? can we handle replicate weights] ## overlaps is a matrix whose [i,d] element says whether obs i is in frame d (binary) or what its weight is in frame d ## calibration is going to be pretty limited ## ## ## variance of sum(w*y) is sum_{ij} \check{Delta}(w_i\pi_i\check{y}_i)(w_j\pi_j\check{y}_j) ## ## reweight: choose theta to minimise varhat(total(A)) for some A? ## dual-frame: optimise the variance of anything you like, or choose a compromise graphically ## multiframe: one of the formulas from eg Lohr & Rao multiframe<-function(designs, overlaps, estimator=c("constant","expected"),theta=NULL){ estimator<-match.arg(estimator) #if (estimator != "constant") stop("only 'constant' estimator for now") lapply(designs, function(design) { if( !inherits(design,"survey.design2") && !inherits(design,"pps")) stop("only svydesign() objects for now")}) nframes<-length(designs) if(nframes!=2) stop("only two frames for now") frame_sizes<-sapply(designs, nrow) frame_weights<-vector("list",nframes) mean_weights<-sapply(designs, function(d) mean(weights(d), type="sampling")) if (estimator=="constant"){ if (is.null(theta)) frame_scale<-mean_weights/sum(mean_weights) else frame_scale<-cbind(theta, 1-theta) for(f in 1:nframes){ frame_weights[[f]]<-ifelse(overlaps[[f]][,3-f]>0, frame_scale[f], 1) } frame_weights<-do.call(c, frame_weights) } else if (estimator=="expected"){ frame_scale<-NULL maxes<-sapply(overlaps, max, na.rm=TRUE) mins<-sapply(overlaps, function(x) min(x[x>0], na.rm=TRUE)) if (max(mins)>=1) overlaps_are_weights<-TRUE else if(min(maxes)>1) stop("overlaps must be all >=1 or all <=1") else overlaps_are_weights<-FALSE for(f in 1:nframes){ overlaps[[f]][overlaps[[f]]==0]<-NA if (!overlaps_are_weights) overlaps[[f]]<-1/overlaps[[f]] frame_weights[[f]]<-(1/rowSums(1/overlaps[[f]],na.rm=TRUE))/weights(designs[[f]],"sampling") } frame_weights<-do.call(c,frame_weights) } design_weights<-do.call(c, lapply(designs, weights, type="sampling")) dchecks<-lapply(designs, function(d){ if(inherits(d,"pps")){ d$dcheck[[1]]$dcheck } else { Dcheck_multi(d$cluster,d$strat,d$allprob) }}) rval<-list(designs=designs,overlaps=overlaps, frame_scale=frame_scale, frame_weights=frame_weights, design_weights=design_weights,call=sys.call(), dchecks=dchecks, estimator=estimator) if (length(designs)==2) class(rval)<-c("dualframe","multiframe") else class(rval)<-"multiframe" rval } degf.multiframe<-function(design,...){ sum(sapply(design$designs,degf))-length(design$designs)+1 } print.dualframe<-function(x,...) { cat("Dual-frame object: ") print(x$call) invisible(x) } print.multiframe<-function(x,...) { cat("Multiframe object: ") print(x$call) invisible(x) } summary.multiframe<-function(object,...){ s<-list(object$designs, do.call(rbind,lapply(object$overlaps, function(x) colSums(x>0))),call=object$call) class(s)<-"summary.multiframe" s } print.summary.multiframe<-function(x,...){ cat("Multiframe object: ") print(x$call) cat(" with frame memberships\n ") print(x[[2]]) cat(" and samples\n") print(x[[1]]) invisible(x) } weights.multiframe<-function(object, ...) object$design_weights*object$frame_weights oneframe_getdata<-function(formula, design){ if (!inherits(formula,"formula")) stop("formula must be a formula") mf <- model.frame(formula, design$variables, na.action = na.pass) xx <- lapply(attr(terms(formula), "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)) x } multiframe_getdata<-function(formula, designs, na.rm=FALSE){ datas<- lapply(designs, oneframe_getdata, formula=formula) do.call(rbind,datas) } model.frame.multiframe<-function(formula,...){ nm<-colnames(formula) datas<-lapply(formula$designs, model.frame, ...) common<-lapply(datas, function(d) d[,nm,drop=FALSE]) do.call(rbind,common) } update.multiframe<-function(object, ...){ ndesigns<-length(object$designs) for(i in 1:ndesigns){ object$designs[[i]]<-update(object$designs[[i]],...) } object$call<-sys.call(-1) object } dimnames.multiframe<-function(x,...){ maybe_names<-lapply(x$designs,colnames) list(NULL,Reduce("intersect", maybe_names)) } "[.multiframe"<-function (x, i, ..., drop = TRUE) { if (!missing(i)) { if (is.logical(i)) x$design_weights[!i] <- 0 else if (is.numeric(i) && length(i)) x$design_weights[-i] <- 0 else { tmp <- x$design_weights[i, ] x$design_weights <- rep(0, length(x$design_weights)) x$design_weights[i, ] <- tmp } } if (...length()>0 && !is.null(x$variables)) { for (d in length(x$designs)){ x[[d]]$variables <- x[[d]]$variables[, ..1, drop = FALSE] } } x } subset.multiframe<-function (x, subset, ...) { e <- substitute(subset) pf<-parent.frame() rs <- lapply(x$designs, function(d) eval(e, d$variables, pf)) r<-do.call(c,rs) r <- r & !is.na(r) x <- x[r, ] x$call <- sys.call(-1) x } ### Inference svytotal.multiframe<-function(x,design, na.rm=FALSE,...){ if (inherits(x,"formula")) x<-multiframe_getdata(x, design$designs) else x<-as.matrix(x) if (na.rm){ x[is.na(x)]<-0 design$weights[!complete.cases(x)]<-0 } total<-colSums(x*design$frame_weights*design$design_weights) V<-multiframevar(x*design$frame_weights*design$design_weights, design$dchecks) attr(total,"var")<-V class(total)<-"svystat" attr(total,"statistic")<-"total" total } svymean.multiframe<-function(x, design, na.rm=FALSE,...){ if (inherits(x,"formula")) x<-multiframe_getdata(x, design$designs) else x<-as.matrix(x) if (na.rm){ x[is.na(x)]<-0 design$weights[!complete.cases(x)]<-0 } fw<-design$frame_weights*design$design_weights mean<-colSums(x[,drop=FALSE]*fw)/sum(fw) inf_fun<-sweep(x,2, mean)/sum(fw) V<-multiframevar(inf_fun*fw, design$dchecks) attr(mean,"var")<-V class(mean)<-"svystat" attr(mean,"statistic")<-"mean" mean } svyglm.multiframe<-function(formula, design, subset=NULL, family=stats::gaussian(), start, rescale=TRUE,deff=FALSE,influence=FALSE,...){ data <-do.call(rbind,lapply(design$designs, function(d) model.frame(d)[,all.vars(formula)])) if (!is.null(subset)) stop("subset not implemented") 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 g$family <- family if (is.null(g$weights)) g$weights <- quote(.survey.multiframe.weights) else g$weights <- bquote(.survey.multiframe.weights * .(g$weights)) g$data <- quote(data) g[[1]] <- quote(glm) fw<-design$frame_weights*design$design_weights if (rescale) data$.survey.multiframe.weights <- fw/mean(fw)+1e-6 else data$.survey.multiframe.weights <-fw 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, ] estfun <- model.matrix(g) * naa_shorter(nas, resid(g, "working")) * g$weights if (g$rank < NCOL(estfun)) { estfun <- estfun[, g$qr$pivot[1:g$rank]] } if (length(nas) && (NROW(data) > NROW(estfun))) { estfun1 <- matrix(0, ncol = ncol(estfun), nrow = nrow(data)) estfun1[-nas, ] <- estfun estfun <- estfun1 } inf_fun<- estfun %*% g$naive.cov g$cov.unscaled <- multiframevar(inf_fun, design$dchecks) 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.multiframe.weights) attr(g, "deff") <- g$cov.unscaled/vsrs } if (influence) { attr(g, "influence") <- inf_fun } g$survey.design <- design g } multiframevar<-function(x, dchecks){ sample_sizes<-sapply(dchecks,nrow) cutpoints<-cumsum(c(0,sample_sizes)) V<-matrix(0,ncol=NCOL(x),nrow=NCOL(x)) dimnames(V)<-list(colnames(x),colnames(x)) for(i in 1:length(dchecks)){ V<-V+htvar.matrix(x[(cutpoints[i]+1):cutpoints[i+1],,drop=FALSE], dchecks[[i]]) } V } svyvar.multiframe<-function(x,design, na.rm=FALSE, ...) { if (inherits(x,"formula")) x<-multiframe_getdata(x, design$designs) n <- sum((design$design_weights*design$frame_weights != 0) & (rowSums(is.na(as.matrix(x))) == 0)) xbar <- svymean(x, design, na.rm = na.rm) if (NCOL(x) == 1) { if (n == 1) { v <- NA attr(v, "statistic") <- NA attr(v, "var") <- NA class(v) <- "svystat" return(v) } x <- x - xbar v <- svymean(x * x * n/(n - 1), design, na.rm = na.rm) attr(v, "statistic") <- "variance" return(v) } x <- t(t(x) - xbar) p <- NCOL(x) a <- matrix(rep(x, p), ncol = p * p) b <- x[, rep(1:p, each = p)] 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 } survey/R/svykappa.R0000644000176200001440000000265513676517357014025 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/compressweights.R0000755000176200001440000000245311457435612015400 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/dbiupdate.R0000644000176200001440000000536413542525435014114 0ustar liggesusers ## ## stored variable updates. ## updatesInfilter<-function(varlist, updates){ if (is.null(updates)) return(list(varlist=varlist)) n<-length(updates) v<-vector("list",n) for(i in n:1){ if (any(idx<-(varlist %in% names(updates[[i]])))){ v[[i]]<-varlist[idx] ups<-match(v[[i]], names(updates[[i]])) varlist<-unique(c(varlist[!idx], do.call(c, lapply(updates[[i]][ups], "[[", "inputs")))) } } list(varlist=varlist, history=v) } updatesOutfilter<-function(df, varlist,history, updates){ if (is.null(updates)) return(df) if (all(sapply(history,length)==0)) return(df) n<-length(updates) for(i in 1:n){ if (mi<-length(history[[i]])){ outputs<-vector("list", mi) for(j in 1:mi){ idx.j<-match(history[[i]][j],names(updates[[i]])) outputs[[j]]<-eval(updates[[i]][[idx.j]]$expression, df) } names(outputs)<-history[[i]] if (any(mod<-names(df) %in% names(outputs))){ df<-df[,!mod,drop=FALSE] } df<-cbind(df,outputs) } } df[, names(df) %in% varlist,drop=FALSE] } checkConnection<-function(dbconnection, error=TRUE){ if (is(dbconnection,"DBIConnection")) { if (!DBI::dbIsValid(dbconnection)) if (error) stop("Database connection is closed") else return(FALSE) } invisible(TRUE) } getvars<-function (formula, dbconnection, tables, db.only = TRUE, updates=NULL, subset=NULL) { checkConnection(dbconnection) if (is.null(formula)) return(NULL) if (inherits(formula, "formula")) { var0<- all.vars(formula) } else if (is.character(formula)){ var0<-formula } else { return(formula) } infilter<-updatesInfilter(var0, updates) if (db.only) { in.db <- infilter$varlist } else { query <- sub("@tab@", tables, "select * from @tab@ limit 1") if (is(dbconnection,"DBIConnection")) oneline <- DBI::dbGetQuery(dbconnection, query) in.db <- infilter$varlist[infilter$varlist %in% names(oneline)] } query <- paste("select", paste(in.db, collapse = ", "), "from", tables) df <- DBI::dbGetQuery(dbconnection, query) if (!is.null(subset)) df<-df[subset,,drop=FALSE] df<-updatesOutfilter(df, var0, infilter$history, updates) is.string <- sapply(df, is.character) if (any(is.string)) { for (i in which(is.string)) df[[i]] <- as.factor(df[[i]]) } df } update.DBIsvydesign<-function(object, ...){ dots <- substitute(list(...))[-1] newnames <- names(dots) updates<-lapply(dots, function(dot){ list(inputs=all.vars(dot),expression=dot) }) if (is.null(object$updates)) object$updates<-list(updates) else object$updates<-c(object$updates, list(updates)) object } survey/R/svysurvreg.R0000644000176200001440000000521713101467340014376 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/svycontrast_svyvar.R0000644000176200001440000000055714462575367016176 0ustar liggesuserssvycontrast.svyvar<-function(stat,contrasts,add=FALSE, ...){ s<-as.vector(as.matrix(stat)) nms<-as.vector(outer(rownames(stat),colnames(stat),paste,sep=":")) v<-vcov(stat) names(s)<-nms dimnames(v)<-list(nms,nms) attr(s,"var")<-v attr(s,"statistic")<-"variance" class(s)<-"svystat" svycontrast(s,contrasts=contrasts,add=add,...) } survey/R/survey.R0000755000176200001440000016314515132034116013501 0ustar liggesusers make.formula<-function(names) formula(paste("~",paste(names,collapse="+"))) dimnames.survey.design<-function(x) dimnames(x$variables) dimnames.svyrep.design<-function(x) dimnames(x$variables) dimnames.twophase<-function(x) dimnames(x$phase1$sample$variables) oldsvydesign<-function(ids,probs=NULL,strata=NULL,variables=NULL, fpc=NULL, data=NULL, nest=FALSE, check.strata=!nest,weights=NULL){ .Deprecated("svydesign") ## less memory-hungry version for sparse tables interaction<-function (..., drop = TRUE) { args <- list(...) narg <- length(args) if (narg == 1 && is.list(args[[1]])) { args <- args[[1]] narg <- length(args) } ls<-sapply(args,function(a) length(levels(a))) ans<-do.call("paste",c(lapply(args,as.character),sep=".")) ans<-factor(ans) return(ans) } na.failsafe<-function(object,...){ if (NCOL(object)==0) object else na.fail(object) } if(inherits(ids,"formula")) { mf<-substitute(model.frame(ids,data=data,na.action=na.failsafe)) ids<-eval.parent(mf) } else if (!is.null(ids)) ids<-na.fail(data.frame(ids)) if(inherits(probs,"formula")){ mf<-substitute(model.frame(probs,data=data,na.action=na.failsafe)) probs<-eval.parent(mf) } if(inherits(weights,"formula")){ mf<-substitute(model.frame(weights,data=data,na.action=na.failsafe)) weights<-eval.parent(mf) } else if (!is.null(weights)) weights<-na.fail(data.frame(weights)) if(!is.null(weights)){ if (!is.null(probs)) stop("Can't specify both sampling weights and probabilities") else probs<-1/weights } if (!is.null(strata)){ if(inherits(strata,"formula")){ mf<-substitute(model.frame(strata,data=data, na.action=na.failsafe)) strata<-eval.parent(mf) } if(is.list(strata)) strata<-na.fail(do.call("interaction", strata)) if (!is.factor(strata)) strata<-factor(strata) has.strata<-TRUE } else { strata<-factor(rep(1,NROW(ids))) has.strata <-FALSE } if (inherits(variables,"formula")){ mf<-substitute(model.frame(variables,data=data,na.action=na.pass)) variables <- eval.parent(mf) } else if (is.null(variables)){ variables<-data } else variables<-data.frame(variables) if (inherits(fpc,"formula")){ mf<-substitute(model.frame(fpc,data=data,na.action=na.failsafe)) fpc<-eval.parent(mf) if (length(fpc)) fpc<-fpc[,1] } if (is.null(ids) || NCOL(ids)==0) ids<-data.frame(.id=seq(length=NROW(variables))) ## force subclusters nested in clusters if (nest && NCOL(ids)>1){ N<-ncol(ids) for(i in 2:(N)){ ids[,i]<-do.call("interaction", ids[,1:i,drop=TRUE]) } } ## force clusters nested in strata if (nest && has.strata && NCOL(ids)){ N<-NCOL(ids) for(i in 1:N) ids[,i]<-do.call("interaction", list(strata, ids[,i])) } ## check if clusters nested in strata if (check.strata && nest) warning("No point in check.strata=TRUE if nest=TRUE") if(check.strata && !is.null(strata) && NCOL(ids)){ sc<-rowSums(table(ids[,1],strata)>0) if(any(sc>1)) stop("Clusters not nested in strata") } ## Put degrees of freedom (# of PSUs in each stratum) in object, to ## allow subpopulations if (NCOL(ids)){ nPSU<-table(strata[!duplicated(ids[,1])]) } if (!is.null(fpc)){ if (NCOL(ids)>1){ if (all(fpc<1)) warning("FPC is not currently supported for multi-stage sampling") else stop("Can't compute FPC from population size for multi-stage sampling") } ## Finite population correction: specified per observation if (is.numeric(fpc) && length(fpc)==NROW(variables)){ tbl<-by(fpc,list(strata),unique) if (any(sapply(tbl,length)!=1)) stop("fpc not constant within strata") fpc<-data.frame(strata=factor(rownames(tbl),levels=levels(strata)), N=as.vector(tbl)) } ## Now reduced to fpc per stratum nstr<-table(strata[!duplicated(ids[[1]])]) if (all(fpc[,2]<=1)){ fpc[,2]<- nstr[match(as.character(fpc[,1]), names(nstr))]/fpc[,2] } else if (any(fpc[,2] 0.99])) names(certainty)<-as.character(unique(strata)) } else { warning("Some strata have only one PSU and I can't tell if they are certainty PSUs") } } if (is.numeric(probs) && length(probs)==1) probs<-rep(probs, NROW(variables)) if (length(probs)==0) probs<-rep(1,NROW(variables)) if (NCOL(probs)==1) probs<-data.frame(probs) rval<-list(cluster=ids) rval$strata<-strata rval$has.strata<-has.strata rval$prob<- apply(probs,1,prod) rval$allprob<-probs rval$call<-match.call() rval$variables<-variables rval$fpc<-fpc rval$certainty<-certainty rval$call<-sys.call() rval$nPSU<-nPSU class(rval)<-"survey.design" rval } print.survey.design<-function(x,varnames=FALSE,design.summaries=FALSE,...){ .svycheck(x) n<-NROW(x$cluster) if (x$has.strata) cat("Stratified ") un<-length(unique(x$cluster[,1])) if(n==un){ cat("Independent Sampling design\n") is.independent<-TRUE } else { cat(NCOL(x$cluster),"- level Cluster Sampling design\n") nn<-lapply(x$cluster,function(i) length(unique(i))) cat(paste("With (",paste(unlist(nn),collapse=", "),") clusters.\n",sep="")) is.independent<-FALSE } print(x$call) if (design.summaries){ cat("Probabilities:\n") print(summary(x$prob)) if(x$has.strata){ cat("Stratum sizes: \n") a<-rbind(obs=table(x$strata), design.PSU=x$nPSU, actual.PSU=if(!is.independent || !is.null(x$fpc)) table(x$strata[!duplicated(x$cluster[,1])])) print(a) } if (!is.null(x$fpc)){ if (x$has.strata) { cat("Population stratum sizes (PSUs): \n") print(x$fpc) } else { cat("Population size (PSUs):",x$fpc[,2],"\n") } } } if (varnames){ cat("Data variables:\n") print(names(x$variables)) } invisible(x) } "[.survey.design"<-function (x,i, ...){ if (!missing(i)){ if (is.calibrated(x)){ tmp<-x$prob[i,] x$prob<-rep(Inf, length(x$prob)) x$prob[i,]<-tmp } else { x$variables<-"[.data.frame"(x$variables,i,...,drop=FALSE) x$cluster<-x$cluster[i,,drop=FALSE] x$prob<-x$prob[i] x$allprob<-x$allprob[i,,drop=FALSE] x$strata<-x$strata[i] } } else { x$variables<-x$variables[,...,drop=FALSE] } x } "[<-.survey.design"<-function(x, ...,value){ if (inherits(value, "survey.design")) value<-value$variables x$variables[...]<-value x } dim.survey.design<-function(x){ dim(x$variables) } na.fail.survey.design<-function(object,...){ tmp<-na.fail(object$variables,...) object } na.omit.survey.design<-function(object,...){ tmp<-na.omit(object$variables,...) omit<-attr(tmp,"na.action") if (length(omit)){ object<-object[-omit,] object$variables<-tmp attr(object,"na.action")<-omit } object } na.exclude.survey.design<-function(object,...){ tmp<-na.exclude(object$variables,...) exclude<-attr(tmp,"na.action") if (length(exclude)){ object<-object[-exclude,] object$variables<-tmp attr(object,"na.action")<-exclude } object } update.survey.design<-function(object,...){ dots<-substitute(list(...))[-1] newnames<-names(dots) for(j in seq(along=dots)){ object$variables[,newnames[j]]<-eval(dots[[j]],object$variables, parent.frame()) } object$call<-sys.call(-1) object } subset.survey.design<-function(x,subset,...){ e <- substitute(subset) r <- eval(e, x$variables, parent.frame()) r <- r & !is.na(r) x<-x[r,] x$call<-sys.call(-1) x } summary.survey.design<-function(object,...){ class(object)<-"summary.survey.design" object } print.summary.survey.design<-function(x,...){ y<-x class(y)<-"survey.design" print(y,varnames=TRUE,design.summaries=TRUE,...) } postStratify.survey.design<-function(design, strata, population, partial=FALSE,...){ if(inherits(strata,"formula")){ mf<-substitute(model.frame(strata, data=design$variables,na.action=na.fail)) strata<-eval.parent(mf) } strata<-as.data.frame(strata) sampletable<-xtabs(I(1/design$prob)~.,data=strata) sampletable<-as.data.frame(sampletable) if (inherits(population,"table")) population<-as.data.frame(population) else if (is.data.frame(population)) population$Freq <- as.vector(population$Freq) ##allows Freq computed by tapply() else stop("population must be a table or dataframe") if (!all(names(strata) %in% names(population))) stop("Stratifying variables don't match") nn<- names(population) %in% names(strata) if (sum(!nn)!=1) stop("stratifying variables don't match") names(population)[which(!nn)]<-"Pop.Freq" both<-merge(sampletable, population, by=names(strata), all=TRUE) samplezero <- both$Freq %in% c(0, NA) popzero <- both$Pop.Freq %in% c(0, NA) both<-both[!(samplezero & popzero),] if (any(onlysample<- popzero & !samplezero)){ print(both[onlysample,]) stop("Strata in sample absent from population. This Can't Happen") } if (any(onlypop <- samplezero & !popzero)){ if (partial){ both<-both[!onlypop,] warning("Some strata absent from sample: ignored") } else { print(both[onlypop,]) stop("Some strata absent from sample: use partial=TRUE to ignore them.") } } reweight<-both$Pop.Freq/both$Freq both$label <- do.call("interaction", list(both[,names(strata)])) designlabel <- do.call("interaction", strata) index<-match(designlabel, both$label) attr(index,"oldweights")<-1/design$prob design$prob<-design$prob/reweight[index] attr(index,"weights")<-1/design$prob design$postStrata<-c(design$postStrata,list(index)) ## Do we need to iterate here a la raking to get design strata ## and post-strata both balanced? design$call<-sys.call(-1) design } svyCprod<-function(x, strata, psu, fpc, nPSU, certainty=NULL, postStrata=NULL, lonely.psu=getOption("survey.lonely.psu")){ x<-as.matrix(x) n<-NROW(x) ## Remove post-stratum means, which may cut across PSUs if(!is.null(postStrata)){ for (psvar in postStrata){ if (inherits(psvar, "greg_calibration") || inherits(psvar, "raking")) stop("rake() and calibrate() not supported for old-style design objects") psw<-attr(psvar,"weights") psmeans<-rowsum(x/psw,psvar,reorder=TRUE)/as.vector(table(factor(psvar))) x<- x-psmeans[match(psvar,sort(unique(psvar))),]*psw } } ##First collapse over PSUs if (is.null(strata)){ strata<-rep("1",n) if (!is.null(nPSU)) names(nPSU)<-"1" } else strata<-as.character(strata) ##can't use factors as indices in for()' if (is.null(certainty)){ certainty<-rep(FALSE,length(strata)) names(certainty)<-strata } if (!is.null(psu)){ x<-rowsum(x, psu, reorder=FALSE) strata<-strata[!duplicated(psu)] n<-NROW(x) } if (!is.null(nPSU)){ obsn<-table(strata) dropped<-nPSU[match(names(obsn),names(nPSU))]-obsn if(sum(dropped)){ xtra<-matrix(0,ncol=NCOL(x),nrow=sum(dropped)) strata<-c(strata,rep(names(dropped),dropped)) if(is.matrix(x)) x<-rbind(x,xtra) else x<-c(x,xtra) n<-NROW(x) } } else obsn<-table(strata) if(is.null(strata)){ x<-t(t(x)-colMeans(x)) } else { strata.means<-drop(rowsum(x,strata, reorder=FALSE))/drop(rowsum(rep(1,n),strata, reorder=FALSE)) if (!is.matrix(strata.means)) strata.means<-matrix(strata.means, ncol=NCOL(x)) x<- x- strata.means[ match(strata, unique(strata)),,drop=FALSE] } p<-NCOL(x) v<-matrix(0,p,p) ss<-unique(strata) for(s in ss){ this.stratum <- strata %in% s ## original number of PSUs in this stratum ## before missing data/subsetting this.n <-nPSU[match(s,names(nPSU))] this.df <- this.n/(this.n-1) if (is.null(fpc)) this.fpc <- 1 else{ this.fpc <- fpc[,2][ fpc[,1]==as.character(s)] this.fpc <- (this.fpc - this.n)/this.fpc } xs<-x[this.stratum,,drop=FALSE] this.certain<-certainty[names(certainty) %in% s] ## stratum with only 1 design cluster leads to undefined variance lonely.psu<-match.arg(lonely.psu, c("remove","adjust","fail", "certainty","average")) if (this.n==1 && !this.certain){ this.df<-1 if (lonely.psu=="fail") stop("Stratum ",s, " has only one sampling unit.") else if (lonely.psu!="certainty") warning("Stratum ",s, " has only one sampling unit.") if (lonely.psu=="adjust") xs<-strata.means[match(s,ss),,drop=FALSE] } else if (obsn[match(s,names(obsn))]==1 && !this.certain){ ## stratum with only 1 cluster left after subsetting warning("Stratum ",s," has only one PSU in this subset.") if (lonely.psu=="adjust") xs<-strata.means[match(s,ss),,drop=FALSE] } ## add it up if (!this.certain) v<-v+crossprod(xs)*this.df*this.fpc } if (lonely.psu=="average"){ v<- v/(1-mean(obsn==1 & !certainty)) } v } svymean<-function(x, design,na.rm=FALSE,...){ .svycheck(design) UseMethod("svymean",design) } svymean.survey.design<-function(x,design, na.rm=FALSE,deff=FALSE, 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 } # implement Bell-McCafrey here later attr(average,"df")<-degf(design) return(average) } print.svystat<-function(x,...){ vv<-attr(x,"var") if (is.matrix(vv)) m<-cbind(x,sqrt(diag(vv))) else m<-cbind(x,sqrt(vv)) hasdeff<-!is.null(attr(x,"deff")) if (hasdeff) { m<-cbind(m,deff(x)) colnames(m)<-c(attr(x,"statistic"),"SE","DEff") } else { colnames(m)<-c(attr(x,"statistic"),"SE") } printCoefmat(m) } as.data.frame.svystat<-function(x,...){ rval<-data.frame(statistic=coef(x),SE=SE(x)) names(rval)[1]<-attr(x,"statistic") if (!is.null(attr(x,"deff"))) rval<-cbind(rval,deff=deff(x)) rval } coef.svystat<-function(object,...){ attr(object,"statistic")<-NULL attr(object,"deff")<-NULL attr(object,"var")<-NULL unclass(object) } vcov.svystat<-function(object,...){ as.matrix(attr(object,"var")) } influence.svystat<-function(model,...){ attr(model,"influence") } SE.svystat<-function(object,...){ v<-vcov(object) if (!is.matrix(v) || NCOL(v)==1) sqrt(v) else sqrt(diag(v)) } degf.svystat<-function(design,...){ # implement Bell-McCafrey here later attr(design,"df") } ## this is declared with surveyrep.R so no need to repeat ## degf<-function(object,...) UseMethod("degf") ## you still need to EXPORT it, but deff <- function(object,quietly=FALSE,...) UseMethod("deff") deff.default <- function(object, quietly=FALSE,...){ rval<-attr(object,"deff") if (is.null(rval)) { if(!quietly) warning("object has no design effect information") } else rval<-diag(as.matrix(rval)) rval } cv<-function(object,...) UseMethod("cv") cv.default<-function(object, warn=TRUE, ...){ rval<-SE(object)/coef(object) if (warn && any(coef(object)<0,na.rm=TRUE)) warning("CV may not be useful for negative statistics") rval } svytotal<-function(x,design,na.rm=FALSE,...){ .svycheck(design) UseMethod("svytotal",design) } svytotal.survey.design<-function(x,design, na.rm=FALSE, deff=FALSE,influence=FALSE,...){ if (!inherits(design,"survey.design")) stop("design is not a survey design") if (inherits(x,"formula")){ ## do the right thing with factors mf<-model.frame(x,design$variables,na.action=na.pass) xx<-lapply(attr(terms(x),"variables")[-1], function(tt) model.matrix(eval(bquote(~0+.(tt))),mf)) cols<-sapply(xx,NCOL) x<-matrix(nrow=NROW(xx[[1]]),ncol=sum(cols)) scols<-c(0,cumsum(cols)) for(i in 1:length(xx)){ x[,scols[i]+1:cols[i]]<-xx[[i]] } colnames(x)<-do.call("c",lapply(xx,colnames)) } else if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) x<-as.matrix(x) if (na.rm){ nas<-rowSums(is.na(x)) design<-design[nas==0,] x<-x[nas==0,,drop=FALSE] } N<-sum(1/design$prob) m <- svymean(x, design, na.rm=na.rm) total<-m*N attr(total, "var")<-v<-svyCprod(x/design$prob,design$strata, design$cluster[[1]], design$fpc, design$nPSU,design$certainty,design$postStrata) attr(total,"statistic")<-"total" if (influence){ attr(total,"influence")<-x/design$prob } if (is.character(deff) || deff){ vsrs<-svyvar(x,design)*sum(weights(design)^2) vsrs<-vsrs*(N-NROW(design$cluster))/N attr(total,"deff")<-v/vsrs } return(total) } svyvar<-function(x, design, na.rm=FALSE,...){ .svycheck(design) UseMethod("svyvar",design) } svyvar.survey.design<-function(x, design, na.rm=FALSE,...){ if (inherits(x,"formula")) x<-model.frame(x,model.frame(design),na.action=na.pass) else if(typeof(x) %in% c("expression","symbol")) x<-eval(x, design$variables) n<-sum((weights(design,"sampling")!=0) & (rowSums(is.na(as.matrix(x)))==0)) xbar<-coef(svymean(x,design, na.rm=na.rm)) if(NCOL(x)==1) { if(n==1){ v<-NA attr(v,"statistic")<-NA attr(v,"var")<-NA class(v)<-"svystat" return(v) } x<-x-xbar v<-svymean(x*x*n/(n-1),design, na.rm=na.rm) attr(v,"statistic")<-"variance" return(v) } x<-t(t(x)-xbar) p<-NCOL(x) a<-matrix(rep(x,p),ncol=p*p) b<-x[,rep(1:p,each=p)] ## Kish uses the n-1 divisor, so it affects design effects v<-svymean(a*b*n/(n-1),design, na.rm=na.rm) vv<-matrix(v,ncol=p) dimnames(vv)<-list(names(xbar),names(xbar)) attr(vv,"var")<-attr(v,"var") attr(vv,"statistic")<-"variance" class(vv)<-c("svyvar","svystat") vv } print.svyvar<-function (x, covariance=FALSE, ...) { if(!is.matrix(x)) NextMethod() vv <- attr(x, "var") if (covariance){ nms<-outer(rownames(x),colnames(x),paste,sep=":") m<-cbind(as.vector(x), sqrt(diag(vv))) rownames(m)<-nms } else{ ii <- which(diag(sqrt(length(x)))>0) m <- cbind(x[ii], sqrt(diag(vv))[ii]) } colnames(m) <- c(attr(x, "statistic"), "SE") printCoefmat(m) } as.matrix.svyvar<-function(x,...) unclass(x) coef.svyratio<-function(object,...,drop=TRUE){ if (!drop) return(object$ratio) cf<-as.vector(object$ratio) nms<-as.vector(outer(rownames(object$ratio),colnames(object$ratio),paste,sep="/")) names(cf)<-nms cf } SE.svyratio<-function(object,...,drop=TRUE){ if(!drop) return(sqrt(object$var)) se<-as.vector(sqrt(object$var)) nms<-as.vector(outer(rownames(object$ratio),colnames(object$ratio),paste,sep="/")) names(se)<-nms se } svyratio<-function(numerator,denominator, design,...){ .svycheck(design) UseMethod("svyratio",design) } svyratio.survey.design<-function(numerator, denominator, design,...){ if (inherits(numerator,"formula")) numerator<-model.frame(numerator,design$variables) else if(typeof(numerator) %in% c("expression","symbol")) numerator<-eval(numerator, design$variables) if (inherits(denominator,"formula")) denominator<-model.frame(denominator,design$variables) else if(typeof(denominator) %in% c("expression","symbol")) denominator<-eval(denominator, design$variables) nn<-NCOL(numerator) nd<-NCOL(denominator) all<-cbind(numerator,denominator) allstats<-svytotal(all,design) rval<-list(ratio=outer(allstats[1:nn],allstats[nn+1:nd],"/")) vars<-matrix(ncol=nd,nrow=nn) for(i in 1:nn){ for(j in 1:nd){ r<-(numerator[,i]-rval$ratio[i,j]*denominator[,j])/sum(denominator[,j]/design$prob) vars[i,j]<-svyCprod(r*1/design$prob, design$strata, design$cluster[[1]], design$fpc, design$nPSU, design$certainty,design$postStrata) } } colnames(vars)<-names(denominator) rownames(vars)<-names(numerator) rval$var<-vars rval$call<-sys.call() class(rval)<-"svyratio" rval } print.svyratio_separate<-function(x,...){ cat("Stratified ratio estimate: ") if (!is.null(x$call)) print(x$call) else if (!is.null(attr(x,"call"))) print(attr(x$call)) for(r in x$ratios) { print(r) } invisible(x) } print.svyratio<-function(x,...){ cat("Ratio estimator: ") if (!is.null(x$call)) print(x$call) else if(!is.null(attr(x,"call"))) print(attr(x,"call")) cat("Ratios=\n") print(x$ratio) cat("SEs=\n") print(sqrt(x$var)) invisible(NULL) } predict.svyratio<-function(object, total, se=TRUE,...){ if (se) return(list(total=object$ratio*total,se=sqrt(object$var)*total)) else return(object$ratio*total) } predict.svyratio_separate<-function(object, total, se=TRUE,...){ if (length(total)!=length(object$ratios)) stop("Number of strata differ in ratio object and totals.") if (!is.null(names(total)) && !is.null(levels(object$strata))){ if (!setequal(names(total), levels(object$strata))) warning("Names of strata differ in ratio object and totals") else if (!all(names(total)==levels(object$strata))){ warning("Reordering supplied totals to make their names match the ratio object") total<-total[match(names(total),levels(object$strata))] } } totals<-mapply(predict, object=object$ratios, total=total,se=se,...,SIMPLIFY=FALSE) if(se){ rval<-totals[[1]]$total v<-totals[[1]]$se^2 for(ti in totals[-1]) { rval<-rval+ti$total v<-v+ti$se^2 } list(total=rval,se=sqrt(v)) } else { rval<-totals[[1]] for (ti in totals[-1]) rval<-rval+ti rval } } cv.svyratio<-function(object,...){ sqrt(object$var)/object$ratio } svytable<-function(formula, design, ...){ UseMethod("svytable",design) } svytable.survey.design<-function(formula, design, Ntotal=NULL, round=FALSE,...){ weights<-weights(design,"sampling") ## 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 } svytable.multiframe<-svytable.survey.design svycoxph<-function(formula,design,subset=NULL,rescale=TRUE,...){ .svycheck(design) UseMethod("svycoxph",design) } svycoxph.survey.design<-function(formula,design, subset=NULL, rescale=TRUE, ...){ subset<-substitute(subset) subset<-eval(subset, model.frame(design),parent.frame()) if (!is.null(subset)) design<-design[subset,] if(any(weights(design)<0)) stop("weights must be non-negative") data<-model.frame(design) g<-match.call() g$formula<-eval.parent(g$formula) g$design<-NULL g$var<-NULL g$rescale <- NULL if (is.null(g$weights)) g$weights<-quote(.survey.prob.weights) else g$weights<-bquote(.survey.prob.weights*.(g$weights)) g[[1]]<-quote(coxph) g$data<-quote(data) g$subset<-quote(.survey.prob.weights>0) g$model <- TRUE ##need to rescale weights for stability ## unless the user doesn't want to if (rescale) data$.survey.prob.weights<-(1/design$prob)/mean(1/design$prob) else data$.survey.prob.weights<-1/design$prob if (!all(all.vars(formula) %in% names(data))) stop("all variables must be in design= argument") g<-with(list(data=data), eval(g)) if (inherits(g, "coxph.penal")) warning("svycoxph does not support penalised terms") g$call<-match.call() g$call[[1]]<-as.name(.Generic) g$printcall<-sys.call(-1) g$printcall[[1]]<-as.name(.Generic) class(g)<-c("svycoxph", class(g)) g$survey.design<-design nas<-g$na.action if (length(nas)) design<-design[-nas,] ## if there are betas... if (length(coef(g))>0){ dbeta.subset<-resid(g,"dfbeta",weighted=TRUE) if (nrow(design)==NROW(dbeta.subset)){ dbeta<-as.matrix(dbeta.subset) } else { dbeta<-matrix(0,ncol=NCOL(dbeta.subset),nrow=nrow(design)) dbeta[is.finite(design$prob),]<-dbeta.subset } if (!is.null(g$naive.var)) ## newer versions of survival switch to robust=TRUE with non-integer weights g$inv.info<-g$naive.var else g$inv.info<-g$var if (inherits(design,"survey.design2")) g$var<-svyrecvar(dbeta, design$cluster, design$strata, design$fpc, postStrata=design$postStrata) else if (inherits(design, "twophase")) g$var<-twophasevar(dbeta, design) else if(inherits(design, "twophase2")) g$var<-twophase2var(dbeta, design) else if(inherits(design, "pps")) g$var<-ppsvar(dbeta,design) else g$var<-svyCprod(dbeta, design$strata, design$cluster[[1]], design$fpc,design$nPSU, design$certainty,design$postStrata) g$wald.test<-coef(g)%*%solve(g$var,coef(g)) } else g$var<-matrix(ncol=0,nrow=0) g$ll<-g$loglik g$loglik<-NULL g$rscore<-NULL g$score<-NA g$degf.resid<-degf(design)-length(coef(g)[!is.na(coef(g))])+1 g } model.frame.svycoxph<-function(formula,...){ f<-formula$call env <- environment(formula(formula)) if (is.null(env)) env <- parent.frame() f[[1]]<-as.name("model.frame") f$data<-quote(data) f$design<-NULL f$method<-f$control<-f$singular.ok<-f$model<-f$x<-f$y<-f$iter<-NULL f$formula<-formula(formula) if (is.null(f$weights)) f$weights<-quote(.survey.prob.weights) else f$weights<-bquote(.survey.prob.weights*.(f$weights)) design<-formula$survey.design data<-model.frame(design) data$.survey.prob.weights<-(1/design$prob)/sum(1/design$prob) with(list(data=data), eval(f)) } ## model.matrix.svycoxph<-function (object, data = NULL, contrast.arg = object$contrasts, ## ...) ## { ## if (!is.null(object[["x"]])) ## object[["x"]] ## else { ## if (is.null(data)) ## data <- model.frame(object, ...) ## else data <- model.frame(object, data = data, ...) ## Terms <- object$terms ## attr(Terms, "intercept") <- 1 ## strats <- attr(Terms, "specials")$strata ## cluster <- attr(Terms, "specials")$cluster ## dropx <- NULL ## if (length(cluster)) { ## tempc <- untangle.specials(Terms, "cluster", 1:10) ## ord <- attr(Terms, "order")[tempc$terms] ## if (any(ord > 1)) ## stop("Cluster can not be used in an interaction") ## dropx <- tempc$terms ## } ## if (length(strats)) { ## temp <- untangle.specials(Terms, "strata", 1) ## dropx <- c(dropx, temp$terms) ## } ## if (length(dropx)) { ## newTerms <- Terms[-dropx] ## X <- model.matrix(newTerms, data, contrasts = contrast.arg) ## } ## else { ## newTerms <- Terms ## X <- model.matrix(Terms, data, contrasts = contrast.arg) ## } ## X ## } ## } print.svycoxph<-function(x,...){ print(x$survey.design, varnames=FALSE, design.summaries=FALSE,...) ## x$call<-x$printcall NextMethod() } summary.svycoxph<-function(object,...){ print(object$survey.design,varnames=FALSE, design.summaries=FALSE,...) ## object$call<-object$printcall NextMethod() } survfit.svycoxph<-function(formula,...){ stop("No survfit method for survey models") } extractAIC.svycoxph<-function(fit,...){ stop("No AIC for survey models") } svyglm<-function(formula, design,subset=NULL,family=stats::gaussian(),start=NULL, ...){ .svycheck(design) UseMethod("svyglm",design) } svyglm.survey.design<-function(formula,design,subset=NULL, family=stats::gaussian(),start=NULL, rescale=TRUE, ..., deff=FALSE, influence=FALSE, std.errors=c('linearized','Bell-McCaffrey','Bell-McCaffrey-2'), degf=FALSE){ std.errors<-match.arg(std.errors) 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 is a placeholder for an object of class "glm" 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) # added for the Bell-McCaffrey standard errors g$std.errors<-NULL g$degf<-NULL 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)) ## now g is a populated glm object ##later, design variances are computed based on the working residuals in g$residuals ##scaled by g$weights summ<-summary(g) g$naive.cov<-summ$cov.unscaled nas<-g$na.action if (length(nas)) ## if there is any special na.action taken, nas would contain ## the indices of the rows that have missing data (SK ?? not so sure) design<-design[-nas,] ## this is where the design-based covariance is computed ## std.errors should instruct svy.varcoef to check that g$x is meaningful ## (the same nrow as the length of the response variable) and utilize it ## to compute the scaling factors for the residuals/estfun g$cov.unscaled<-svy.varcoef(g,design,std.errors,degf) if (!is.null(getOption("svy.debug.bmca"))) browser() if (is.null(attr(g$cov.unscaled, "degf.bmca"))) g$df.residual <- degf(design)+1-length(coef(g)[!is.na(coef(g))]) else { g$df.residual <- min(attr(g$cov.unscaled, "degf.bmca")) # this is supposed to be a vector g$df.coef <- attr(g$cov.unscaled, "degf.bmca") names(g$df.coef) <- names(coef(g)) } # should g$df.null be reset to degf(design) ??? class(g)<-c("svyglm",class(g)) g$call<-match.call() g$call[[1]]<-as.name(.Generic) if(!("formula" %in% names(g$call))) { if (is.null(names(g$call))) i<-1 else i<-min(which(names(g$call)[-1]=="")) names(g$call)[i+1]<-"formula" } if(deff){ vsrs<-summ$cov.scaled*mean(data$.survey.prob.weights) attr(g,"deff")<-g$cov.unscaled/vsrs } if (influence){ estfun<- model.matrix(g)*naa_shorter(nas, resid(g,"working"))*g$weights if (g$rankNROW(estfun))){ estfun1<-matrix(0,ncol=ncol(estfun),nrow=nrow(data)) estfun1[-nas,]<-estfun estfun<-estfun1 } attr(g, "influence")<-estfun%*%g$naive.cov } g$aic<-NA g$survey.design<-design g } print.svyglm<-function(x,...){ print(x$survey.design, varnames=FALSE, design.summaries=FALSE,...) NextMethod() } coef.svyglm<-function(object,complete=FALSE,...,na.rm=!complete) { beta<-object$coefficients if (!na.rm || length(beta)==object$rank) beta else beta[object$qr$pivot[1:object$rank]] } vcov.svyglm<-function(object,...) { v<-object$cov.unscaled dimnames(v)<-list(names(coef(object)),names(coef(object))) v } svy.varcoef<-function(glm.object,design, std.errors=c("linearized","Bell-McCaffrey","Bell-McCaffrey-2"), degf=FALSE){ std.errors<-match.arg(std.errors) Ainv<-summary(glm.object)$cov.unscaled nas<-glm.object$na.action # browser() glm_resid<-naa_shorter(nas, resid(glm.object,"working")) if (length(grep("Bell-McCaffrey",std.errors))>0) { glm_resid<-scale_bell_mcaffrey(glm_resid,design,model.matrix(glm.object),std.errors,degf) } estfun<-model.matrix(glm.object)*as.vector(glm_resid)*glm.object$weights if (glm.object$rank|z|)")) } else if (df.r > 0) { pvalue <- 2 * pt(-abs(tvalue), df.r) coef.table <- cbind(coef.p, s.err, tvalue, pvalue) dimnames(coef.table) <- list(names(coef.p), c(dn, "t value", "Pr(>|t|)")) } else { coef.table <- cbind(coef.p, s.err, tvalue, NaN) dimnames(coef.table) <- list(names(coef.p), c(dn, "t value", "Pr(>|t|)")) } ans <- c(object[c("call", "terms", "family", "deviance", "aic", "contrasts", "df.residual", "null.deviance", "df.null", "iter")], list(deviance.resid = residuals(object, type = "deviance"), aic = object$aic, coefficients = coef.table, dispersion = dispersion, df = c(object$rank, df.r,NCOL(Qr$qr)), cov.unscaled = covmat, cov.scaled = covmat)) if (correlation) { dd <- sqrt(diag(covmat)) ans$correlation <- covmat/outer(dd, dd) } ans$aliased<-is.na(coef(object,na.rm=FALSE)) ans$survey.design<-list(call=object$survey.design$call) class(ans) <- c("summary.svyglm","summary.glm") return(ans) } confint.svyglm<-function(object,parm,level=0.95,method=c("Wald","likelihood"),ddf=NULL,...){ method<-match.arg(method) ## move parsing parm and pnames upfront as it is needed for Bell-McCaffrey's d.f.s pnames <- names(coef(object)) if (missing(parm)) parm <- seq_along(pnames) else if (is.character(parm)) parm <- match(parm, pnames, nomatch = 0) if(method=="Wald"){ if (is.null(object$df.coef)) { 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,...) } } else { if (!missing(ddf)) { tlevel <- 1 - 2*pnorm(qt((1 - level)/2, df = ddf)) ci<-confint.default(object,parm=parm,level=tlevel,...) } else { ddf <- object$df.coef[parm] ## placeholder ci <- confint.default(object,parm=parm,level=.95,...)*NaN for (i in 1:length(parm)) { tlevel <- 1 - 2*pnorm(qt((1 - level)/2, df = ddf[i])) ci[i,]<-confint.default(object,parm=parm[i],level=tlevel,...) } attr(ci,"degf")<-ddf } } a <- (1 - level)/2 a <- c(a, 1 - a) pct <- format.perc(a, 3) colnames(ci)<-pct return(ci) } else if(method=="likelihood") { 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 denominator df") } else { if (!is.null(object$df.coef)) ddf<-object$df.coef[parm] 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 if (!is.null(object$df.coef)) attr(rval,"degf")<-ddf return(rval) } else { stop("Unknown confint.svyglm() method") } } ## ## based on MASS:::confint.profile.glm ## which is GPL and (c) Bill Venables and Brian D Ripley. ## confint_profile <- function (object, parm = seq_along(pnames), level = 0.95, unscaled_level, ...) { of <- attr(object, "original.fit") pnames <- names(coef(of)) if (is.character(parm)) parm <- match(parm, pnames, nomatch = 0L) a <- (1-level)/2 a <- c(a, 1 - a) pct <- paste(round(100 * a, 1), "%") ci <- array(NA, dim = c(length(parm), 2L), dimnames = list(pnames[parm], pct)) cutoff <- c(qnorm(unscaled_level),qnorm(unscaled_level, lower.tail=FALSE)) for (pm in parm) { pro <- object[[pnames[pm]]] if (is.null(pro)) next if (length(pnames) > 1L) sp <- spline(x = pro[, "par.vals"][, pm], y = pro[, 1]) else sp <- spline(x = pro[, "par.vals"], y = pro[, 1]) ci[pnames[pm], ] <- approx(sp$y, sp$x, xout = cutoff)$y } drop(ci) } ## ## MASS:::profile.glm with very slight changes to avoid rounding error in 1-alpha ## original is GPL and (c) Bill Venables and Brian D Ripley. ## MASSprofile_glm<-function (fitted, which = 1:p, alpha = 0.01, maxsteps = 10, del = zmax/5, trace = FALSE, ...) { Pnames <- names(B0 <- coef(fitted)) nonA <- !is.na(B0) pv0 <- t(as.matrix(B0)) p <- length(Pnames) if (is.character(which)) which <- match(which, Pnames) summ <- summary(fitted) std.err <- summ$coefficients[, "Std. Error", drop = FALSE] mf <- model.frame(fitted) Y <- model.response(mf) n <- NROW(Y) O <- model.offset(mf) if (!length(O)) O <- rep(0, n) W <- model.weights(mf) if (length(W) == 0L) W <- rep(1, n) OriginalDeviance <- deviance(fitted) DispersionParameter <- summ$dispersion X <- model.matrix(fitted) fam <- family(fitted) switch(fam$family, binomial = , poisson = , `Negative Binomial` = { zmax <- sqrt(qchisq(alpha, 1,lower.tail=FALSE)) profName <- "z" }, gaussian = , quasi = , inverse.gaussian = , quasibinomial = , quasipoisson = , { zmax <- sqrt(qf(alpha, 1, n - p,lower.tail=FALSE)) profName <- "tau" }) prof <- vector("list", length = length(which)) names(prof) <- Pnames[which] for (i in which) { if (!nonA[i]) next zi <- 0 pvi <- pv0 a <- nonA a[i] <- FALSE Xi <- X[, a, drop = FALSE] pi <- Pnames[i] for (sgn in c(-1, 1)) { if (trace) message("\nParameter: ", pi, " ", c("down", "up")[(sgn + 1)/2 + 1]) step <- 0 z <- 0 LP <- X[, nonA, drop = FALSE] %*% B0[nonA] + O while ((step <- step + 1) < maxsteps && abs(z) < zmax) { bi <- B0[i] + sgn * step * del * std.err[Pnames[i], 1] o <- O + X[, i] * bi fm <- glm.fit(x = Xi, y = Y, weights = W, etastart = LP, offset = o, family = fam, control = fitted$control) LP <- Xi %*% fm$coefficients + o ri <- pv0 ri[, names(coef(fm))] <- coef(fm) ri[, pi] <- bi pvi <- rbind(pvi, ri) zz <- (fm$deviance - OriginalDeviance)/DispersionParameter if (zz > -0.001) zz <- max(zz, 0) else stop("profiling has found a better solution, so original fit had not converged") z <- sgn * sqrt(zz) zi <- c(zi, z) } } si <- order(zi) prof[[pi]] <- structure(data.frame(zi[si]), names = profName) prof[[pi]]$par.vals <- pvi[si, , drop = FALSE] } val <- structure(prof, original.fit = fitted, summary = summ) class(val) <- c("profile.glm", "profile") val } ### svymle<-function(loglike, gradient=NULL, design, formulas, start=NULL, control=list(), na.action="na.fail", method=NULL,lower=NULL,upper=NULL, influence=FALSE,...){ if(is.null(method)) method<-if(is.null(gradient)) "Nelder-Mead" else "newuoa" if (!inherits(design,"survey.design")) stop("design is not a survey.design") weights<-weights(design) wtotal<-sum(weights) if (!(method %in% c("bobyqa","newuoa")) && is.null(control$fnscale)) control$fnscale <- -wtotal/length(weights) if (inherits(design, "twophase")) { data<-design$phase1$sample$variables } else { data<-design$variables } ## Get the response variable nms<-names(formulas) if (nms[1]==""){ if (inherits(formulas[[1]],"formula")) { y<-eval.parent(model.frame(formulas[[1]],data=data,na.action=na.pass)) } else { y<-eval(y,data,parent.frame()) } formulas[1]<-NULL if (FALSE && NCOL(y)>1) stop("Y has more than one column") } else { ## one formula must have response has.response<-sapply(formulas,length)==3 if (sum(has.response)!=1) stop("Need a response variable") ff<-formulas[[which(has.response)]] ff[[3]]<-1 y<-eval.parent(model.frame(ff,data=data,na.action=na.pass)) formulas[[which(has.response)]]<-delete.response(terms(formulas[[which(has.response)]])) nms<-c("",nms) } if(length(which(nms==""))>1) stop("Formulas must have names") mf<-vector("list",length(formulas)) vnms <- unique(do.call(c, lapply(formulas, all.vars))) uformula <- make.formula(vnms) mf <- model.frame(uformula, data=data,na.action=na.pass) mf <- cbind(`(Response)`=y, mf) mf<-mf[,!duplicated(colnames(mf)),drop=FALSE] mf<-get(na.action)(mf) nas<-attr(mf,"na.action") if (length(nas)) design<-design[-nas,] weights<-1/design$prob wtotal<-sum(weights) Y<-mf[,1] ## mm <- lapply(formulas,model.matrix, data=mf) mmFrame <- lapply(formulas,model.frame, data=mf) mm = mapply(model.matrix, object = formulas, data=mmFrame, SIMPLIFY=FALSE) mmOffset <- lapply(mmFrame, model.offset) ## add a vector of zeros if there is no offset provided noOffset = which(unlist(lapply(mmOffset, length))==0) for(D in noOffset) { mmOffset[[D]] = rep(0, NROW(mm[[1]])) } ## parameter names parnms<-lapply(mm,colnames) for(i in 1:length(parnms)) parnms[[i]]<-paste(nms[i+1],parnms[[i]],sep=".") parnms<-unlist(parnms) ## maps position in theta to model matrices np<-c(0,cumsum(sapply(mm,NCOL))) objectivefn<-function(theta,...){ args<-vector("list",length(nms)) args[[1]]<-Y for(i in 2:length(nms)) args[[i]]<-mm[[i-1]]%*%theta[(np[i-1]+1):np[i]] + mmOffset[[i-1]] names(args)<-nms args<-c(args, ...) sum(do.call("loglike",args)*weights) } if (is.null(gradient)) { grad<-NULL } else { fnargs<-names(formals(loglike))[-1] grargs<-names(formals(gradient))[-1] if(!identical(fnargs,grargs)) stop("loglike and gradient have different arguments.") reorder<-na.omit(match(grargs,nms[-1])) grad<-function(theta,...){ args<-vector("list",length(nms)) args[[1]]<-Y for(i in 2:length(nms)) args[[i]]<-drop( mm[[i-1]]%*%theta[(np[i-1]+1):np[i]] + mmOffset[[i-1]]) names(args)<-nms args<-c(args,...) rval<-NULL tmp<-do.call("gradient",args) for(i in reorder){ rval<-c(rval, colSums(as.matrix(tmp[,i]*weights*mm[[i]]))) } drop(rval) } } theta0<-numeric(np[length(np)]) if (is.list(start)) st<-do.call("c",start) else st<-start if (length(st)==length(theta0)) { theta0<-st } else { stop("starting values wrong length") } if (method=="nlm"){ ff<-function(theta){ rval<- -objectivefn(theta) if (is.na(rval)) rval<- -Inf attr(rval,"gradient")<- -grad(theta) rval } rval<-nlm(ff, theta0,hessian=TRUE) if (rval$code>3) warning("nlm did not converge") rval$par<-rval$estimate } else if (method == "newuoa"){ rval<-minqa::uobyqa(theta0, function(par,...) -objectivefn(par,...), control=control, ...) if(rval$ier>0) warning(rval$msg) rval$hessian <- numDeriv::hessian(objectivefn, rval$par) } else if (method == "bobyqa"){ if (is.list(lower)) lower<-do.call(c, lower) if (is.list(upper)) upper<-do.call(c,upper) rval<-minqa::bobyqa(theta0, function(par,...) -objectivefn(par,...), control=control,lower=lower,upper=upper, ...) if(rval$ier>0) warning(rval$msg) rval$hessian <- numDeriv::hessian(objectivefn,rval$par) }else { rval<-optim(theta0, objectivefn, grad,control=control, hessian=TRUE,method=method,...) if (rval$conv!=0) warning("optim did not converge") } names(rval$par)<-parnms dimnames(rval$hessian)<-list(parnms,parnms) if (is.null(gradient)) { rval$invinf<-solve(-rval$hessian) rval$scores<-NULL rval$sandwich<-NULL } else { theta<-rval$par args<-vector("list",length(nms)) args[[1]]<-Y for(i in 2:length(nms)) args[[i]]<-drop(mm[[i-1]]%*%theta[(np[i-1]+1):np[i]]+ mmOffset[[i-1]]) names(args)<-nms args<-c(args,...) deta<-do.call("gradient",args) rval$scores<-NULL for(i in reorder) rval$scores<-cbind(rval$scores,deta[,i]*weights*mm[[i]]) rval$invinf<-solve(-rval$hessian) dimnames(rval$invinf)<-list(parnms,parnms) db<-rval$scores%*%rval$invinf if (inherits(design,"survey.design2")) rval$sandwich<-svyrecvar(db,design$cluster,design$strata, design$fpc, postStrata=design$postStrata) else if (inherits(design, "twophase")) rval$sandwich<-twophasevar(db,design) else rval$sandwich<-svyCprod(db,design$strata,design$cluster[[1]], design$fpc, design$nPSU, design$certainty, design$postStrata) dimnames(rval$sandwich)<-list(parnms,parnms) } if (influence){ if (nas && (NROW(data)>NROW(db))){ db1<-matrix(0,nrow=NROW(data),ncol=NCOL(db)) db1[-nas,]<-db db<-db1 } attr(rval,"influence")<-db } rval$call<-match.call() rval$design<-design class(rval)<-"svymle" rval } coef.svymle<-function(object,...) object$par vcov.svymle<-function(object,stderr=c("robust","model"),...) { stderr<-match.arg(stderr) if (stderr=="robust"){ rval<-object$sandwich if (is.null(rval)) { p<-length(coef(object)) rval<-matrix(NA,p,p) } } else { rval<-object$invinf*mean(1/object$design$prob) } rval } print.svymle<-function(x,...){ cat("Survey-sampled mle: \n") print(x$call) cat("Coef: \n") print(x$par) } summary.svymle<-function(object,stderr=c("robust","model"),...){ cat("Survey-sampled mle: \n") print(object$call) stderr<-match.arg(stderr) tbl<-data.frame(Coef=coef(object),SE=sqrt(diag(vcov(object,stderr=stderr)))) tbl$p.value<-format.pval(2*(1-pnorm(abs(tbl$Coef/tbl$SE))), digits=3,eps=0.001) print(tbl) print(object$design) } model.frame.survey.design<-function(formula,...,drop=TRUE){ formula$variables } model.frame.svyrep.design<-function(formula,...){ formula$variables } model.frame.survey.design2<-function(formula,...){ formula$variables } .onLoad<-function(...){ if (is.null(getOption("survey.lonely.psu"))) options(survey.lonely.psu="fail") if (is.null(getOption("survey.ultimate.cluster"))) options(survey.ultimate.cluster=FALSE) if (is.null(getOption("survey.want.obsolete"))) options(survey.want.obsolete=FALSE) if (is.null(getOption("survey.adjust.domain.lonely"))) options(survey.adjust.domain.lonely=FALSE) if (is.null(getOption("survey.drop.replicates"))) options(survey.drop.replicates=TRUE) if (is.null(getOption("survey.multicore"))) options(survey.multicore=FALSE) if (is.null(getOption("survey.replicates.mse"))) options(survey.replicates.mse=FALSE) if (is.null(getOption("survey.use_rcpp"))) options(survey.use_rcpp=TRUE) } predterms<-function(object,se=FALSE,terms=NULL){ tt<-terms(object) n <- length(object$residuals) p <- object$rank p1 <- seq_len(p) piv <- object$qr$pivot[p1] beta<-coef(object) X<-mm<-model.matrix(object) aa <- attr(mm, "assign") ll <- attr(tt, "term.labels") hasintercept <- attr(tt, "intercept") > 0L if (hasintercept) ll <- c("(Intercept)", ll) aaa <- factor(aa, labels = ll) asgn <- split(order(aa), aaa) if (hasintercept) { asgn$"(Intercept)" <- NULL } avx <- colMeans(mm) termsconst <- sum(avx[piv] * beta[piv]) nterms <- length(asgn) ip <- matrix(ncol = nterms, nrow = NROW(X)) if (nterms > 0) { predictor <- matrix(ncol = nterms, nrow = NROW(X)) dimnames(predictor) <- list(rownames(X), names(asgn)) if (hasintercept) X <- sweep(X, 2L, avx, check.margin = FALSE) unpiv <- rep.int(0L, NCOL(X)) unpiv[piv] <- p1 for (i in seq.int(1L, nterms, length.out = nterms)) { iipiv <- asgn[[i]] ii <- unpiv[iipiv] iipiv[ii == 0L] <- 0L predictor[, i] <- if (any(iipiv > 0L)) X[, iipiv, drop = FALSE] %*% beta[iipiv] else 0 if (se){ ip[,i]<-if (any(iipiv > 0L)) rowSums(as.matrix(X[, iipiv, drop = FALSE] %*% vcov(object)[ii,ii]) * X[, iipiv, drop = FALSE]) else 0 } } if (!is.null(terms)) { predictor <- predictor[, terms, drop = FALSE] if (se) ip <- ip[, terms, drop = FALSE] } } else { predictor <- ip <- matrix(0, n, 0) } attr(predictor, "constant") <- if (hasintercept) termsconst else 0 if(se) dimnames(ip)<-dimnames(predictor) if (se) list(fit=predictor,se.fit=sqrt(ip)) else predictor } predict.svyglm <- function(object, newdata=NULL, total=NULL, type = c("link", "response","terms"), se.fit=(type!="terms"), vcov=FALSE,...){ if(is.null(newdata)) newdata<-model.frame(object$survey.design) type<-match.arg(type) if (type=="terms") return(predterms(object,se=se.fit,...)) zcoef <- ifelse(is.na(object$coefficients), 0, object$coefficients) 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 %*% zcoef) ## allow for NA coefficients d<-drop(object$family$mu.eta(eta)) eta<-switch(type, link=eta, response=object$family$linkinv(eta)) if(se.fit){ if(vcov){ if (any(is.na(object$coefficients))) attr(eta,"var")<- matrix(NA, nrow=NROW(mm),ncol=NROW(mm)) else{ vv<-mm %*% vcov(object) %*% t(mm) attr(eta,"var")<-switch(type, link=vv, response=d*(t(vv*d))) } } else { if (any(is.na(object$coefficients))){ attr(eta, "var")<-drop(NA+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)))) } } } else { return(eta) ## no SE; no svystat } attr(eta,"statistic")<-type class(eta)<-"svystat" eta } survey/R/anova.svyglm.R0000644000176200001440000003076114221463056014571 0ustar liggesusers oneanova.svyglm<-function(object,test,method){ tt<-terms(object) tlbls<-attr(tt,"term.labels") nt<-length(tlbls) if (nt<2) return(NULL) seqtests<-vector("list",nt) if(test=="F") ddf<-NULL else ddf<-Inf thismodel<-object if (!("formula") %in% names(thismodel$call)) names(thismodel$call)[[2]] <- "formula" for(i in nt:1){ thisterm<-tlbls[i] seqtests[[i]]<-regTermTest(thismodel,tlbls[i],method=method,df=ddf) thisformula<-make.formula(thisterm)[[2]] thismodel <- eval(bquote(update(thismodel, . ~ . - (.(thisformula))))) } class(seqtests)<-"seqanova.svyglm" attr(seqtests,"method")<-method attr(seqtests,"test")<-test seqtests } oneanova.svycoxph<-function(object,test,method){ tt<-terms(object) tlbls<-attr(tt,"term.labels") nt<-length(tlbls) if (nt<2) return(NULL) seqtests<-vector("list",nt) if(test=="F") ddf<-NULL else ddf<-Inf thismodel<-object if (!("formula") %in% names(thismodel$call)) names(thismodel$call)[[2]] <- "formula" for(i in nt:1){ thisterm<-tlbls[i] seqtests[[i]]<-regTermTest(thismodel,tlbls[i],method=method,df=ddf) thisformula<-make.formula(thisterm)[[2]] thismodel <- eval(bquote(update(thismodel, . ~ . - (.(thisformula))))) } class(seqtests)<-"seqanova.svycoxph" attr(seqtests,"method")<-method attr(seqtests,"test")<-test seqtests } print.seqanova.svyglm<-function(x,...){ isWald<-attr(x,"method")=="Wald" isF<-attr(x,"test")=="F" cat("Anova table: ") if (isWald) cat("(Wald tests)\n") else cat(" (Rao-Scott LRT)\n") print(x[[1]]$mcall) terms<-sapply(x,"[[","test.terms") stats<-if(isF && isWald) sapply(x,"[[","Ftest") else sapply(x,"[[","chisq") if(!isWald) stats<-cbind(stats,DEff=sapply(x,function(xi) mean(xi$lambda))) df<-sapply(x,"[[","df") p<-sapply(x,"[[","p") if (!isF){ rval<-cbind(stats,df,p) } else { ddf<-sapply(x,"[[","ddf") rval<-cbind(stats,df,ddf,p) } rownames(rval)<-terms printCoefmat(rval,tst.ind=1,zap.ind=2:3,has.Pvalue=TRUE) invisible(x) } print.seqanova.svycoxph<-function(x,...){ isWald<-attr(x,"method")=="Wald" isF<-attr(x,"test")=="F" cat("Anova table: ") if (isWald) cat("(Wald tests)\n") else cat(" (Rao-Scott LRT)\n") print(x[[1]]$mcall) terms<-sapply(x,"[[","test.terms") stats<-if(isF && isWald) sapply(x,"[[","Ftest") else sapply(x,"[[","chisq") if(!isWald) stats<-cbind(stats,DEff=sapply(x,function(xi) mean(xi$lambda))) df<-sapply(x,"[[","df") p<-sapply(x,"[[","p") if (!isF){ rval<-cbind(stats,df,p) } else { ddf<-sapply(x,"[[","ddf") rval<-cbind(stats,df,ddf,p) } rownames(rval)<-terms printCoefmat(rval,tst.ind=1,zap.ind=2:3,has.Pvalue=TRUE) invisible(x) } SD<-function(x) if (NCOL(x)>1) apply(x,2,sd) else sd(x) anova.svyglm<-function(object, object2=NULL,test=c("F","Chisq"),method=c("LRT","Wald"),tolerance=1e-5,...,force=FALSE){ test<-match.arg(test) method<-match.arg(method) if(is.null(object2)) ## sequential tests return(oneanova.svyglm(object,test,method)) t1<-attr(terms(object),"term.labels") t2<-attr(terms(object2),"term.labels") if ((all(t1 %in% t2) || all(t2 %in% t1)) && !force){ ## symbolically nested, call regTermTest biggerobject<-if(all(t1 %in% t2)) object2 else object termdiff<-make.formula(if(all(t1 %in% t2)) setdiff(t2,t1) else setdiff(t1,t2)) if(test=="F") ddf<-NULL else ddf<-Inf return(regTermTest(biggerobject,termdiff,df=ddf,method=method)) } ## not symbolically nested, need to project explicitly X<-model.matrix(object) Z<-model.matrix(object2) if (nrow(X)!=nrow(Z)) stop("models have different numbers of observations") if (ncol(X)>ncol(Z)) { tmp<-X X<-Z Z<-tmp bigger<-1 } else bigger<-2 if (any(sapply(suppressWarnings(summary(lm(X~Z))), "[[","sigma")/(tolerance+SD(X))>tolerance)) stop("models not nested") XX<-matrix(nrow=nrow(Z),ncol=ncol(Z)) xform<-lm(Z[,1]~X+0) XX[,1]<-resid(xform) for(i in 2:ncol(Z)){ XX[,i]<-resid(xform<-lm(Z[,i]~X+Z[,1:(i-1)]+0)) } colkeep<-colMeans(abs(XX))/(tolerance+colMeans(abs(Z))) > tolerance XX<-XX[,colkeep,drop=FALSE] index<-ncol(X)+(1:ncol(XX)) ## and now need to refit the model ## ugly, but svyglm demands that all variables are in the design argument. ## We do know the fitted values at convergence, so one iteration suffices. mu<-if(bigger==1) fitted(object) else fitted(object2) eta<-if(bigger==1) object$linear.predictors else object2$linear.predictors offset<-if(bigger==1) object$offset else object2$offset if (is.null(offset)) offset<-0 pweights<-weights(object$survey.design,"sampling") y<-object$y if (length(pweights)!=length(y)){ pweights<-pweights[pweights>0] if (length(pweights)!=length(y)) stop("number of observations does not match design") } pweights<-pweights/mean(pweights) ywork<-eta-offset+(y-mu)/object$family$mu.eta(eta) wwork<-((pweights * object$family$mu.eta(eta)^2)/object$family$variance(mu)) wlm<-lm.wfit(cbind(X,XX),ywork,wwork) p1<-1:wlm$rank Ainv<-chol2inv(wlm$qr$qr[p1,p1,drop=FALSE]) estfun<-cbind(X,XX)*wwork*((y-mu)/object$family$mu.eta(eta)) design<-object$survey.design if (inherits(design, "survey.design2")) V<-svyrecvar(estfun %*% Ainv, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) else if (inherits(design, "twophase")) V<-twophasevar(estfun %*% Ainv, design) else if (inherits(design, "twophase2")) V<-twophase2var(estfun %*% Ainv, design) else if (inherits(design, "pps")) V<-ppsvar(estfun %*% Ainv, design) else if (inherits(design, "svyrep.design")){ V<-vcov(svymean(estfun%*% Ainv/pweights, design))*length(pweights)^2 } else stop("not implemented for this type of design") V<-V[index,index] df<-min(object$df.residual, object2$df.residual) if(method=="LRT"){ V0<-Ainv[index,index] chisq <- if(bigger==1) deviance(object2) - deviance(object) else deviance(object)-deviance(object2) misspec <- eigen(solve(V0) %*% V, only.values = TRUE)$values if (test=="Chisq") p <- pchisqsum(chisq, rep(1, length(misspec)), misspec, method = "sad", lower.tail = FALSE) else p <- pFsum(chisq, rep(1, length(misspec)), misspec, ddf = df, method = "sad", lower.tail = FALSE) rval <- list(call = sys.call(), chisq = chisq, df = length(index), p = p, lambda = misspec, ddf = df, mcall=if(bigger==1) object$call else object2$call, test.terms=if(bigger==1) c(setdiff(t1,t2),"-",setdiff(t2,t1)) else c(setdiff(t2,t1),"-",setdiff(t1,t2)) ) class(rval)<-"regTermTestLRT" } else { ## method=Wald beta<- wlm$coefficients[index] chisq<-crossprod(beta,solve(V,beta)) if (test=="Chisq"){ p<-pchisq(chisq,df=length(index),lower.tail=FALSE) } else { p<-pf(chisq/length(index),df1=length(index),df2=df,lower.tail=FALSE) } rval <- list(call = sys.call(), Ftest = chisq/length(index), df = length(index), p = p, ddf = df, mcall=if(bigger==1) object$call else object2$call, test.terms=if(bigger==1) c(setdiff(t1,t2),"-",setdiff(t2,t1)) else c(setdiff(t2,t1),"-",setdiff(t1,t2)) ) class(rval)<-"regTermTest" } rval } get_cox_strata<-function(object){ t<-untangle.specials(terms(object),"strata", order=1) if (length(t$vars)==0) return(NULL) m<-model.frame(object) strata(m[t$vars], shortlabel = TRUE) } anova.svycoxph<-function(object, object2=NULL,test=c("F","Chisq"),method=c("LRT","Wald"),tolerance=1e-5,...,force=FALSE){ test<-match.arg(test) method<-match.arg(method) if(is.null(object2)) ## sequential tests return(oneanova.svycoxph(object,test,method)) t1<-attr(terms(object),"term.labels") t2<-attr(terms(object2),"term.labels") if ((all(t1 %in% t2) || all(t2 %in% t1)) && !force){ ## symbolically nested, call regTermTest biggerobject<-if(all(t1 %in% t2)) object2 else object termdiff<-make.formula(if(all(t1 %in% t2)) setdiff(t2,t1) else setdiff(t1,t2)) if(test=="F") ddf<-NULL else ddf<-Inf return(regTermTest(biggerobject,termdiff,df=ddf,method=method)) } ## not symbolically nested, need to project explicitly X<-model.matrix(object) Z<-model.matrix(object2) if (nrow(X)!=nrow(Z)) stop("models have different numbers of observations") if (ncol(X)>ncol(Z)) { tmp<-X X<-Z Z<-tmp bigger<-1 } else bigger<-2 if (any(sapply(suppressWarnings(summary(lm(X~Z))), "[[","sigma")/(tolerance+SD(X))>tolerance)) stop("models not nested") XX<-matrix(nrow=nrow(Z),ncol=ncol(Z)) xform<-lm(Z[,1]~X) XX[,1]<-resid(xform) for(i in 2:ncol(Z)){ XX[,i]<-resid(xform<-lm(Z[,i]~X+Z[,1:(i-1)])) } colnames(XX)<-paste0("_X_",colnames(Z)) colkeep<-colMeans(abs(XX))/(tolerance+colMeans(abs(Z))) > tolerance XX<-XX[,colkeep,drop=FALSE] index<-ncol(X)+(1:ncol(XX)) ## and now need to refit the model ## ugly, but svycoxph demands that all variables are in the design argument. ### FIXME pweights<-weights(object$survey.design,"sampling") y<-object$y if (length(pweights)!=length(y)){ pweights<-pweights[pweights>0] if (length(pweights)!=length(y)) stop("number of observations does not match design") } pweights<-pweights/mean(pweights) beta<-if(bigger==1) coef(object2) else coef(object) coxstrat<-get_cox_strata(object) coxstrat2<-get_cox_strata(object2) offs<-if(bigger==1) object$offset else object2$offset if (length(offs)==0) offs<-NULL else stop("models with offset not yet implemented") if(!all(coxstrat==coxstrat2)) stop("Cox model strata must match") refit1<-coxph.fit(cbind(X,XX),y,coxstrat, offs, init=c(beta,rep(0,NCOL(XX))), control=coxph.control(),weights=pweights,method=object$method, rownames=names(resid(object)),resid=TRUE) refit<-if(bigger==1) object else object2 refit[names(refit1)]<-refit1 design<-object$survey.design Ainv<- if(is.null(refit$naive.var)) refit$var else refit$naive.var dbeta.subset <- resid(refit, "dfbeta", weighted = TRUE) if (nrow(design) == NROW(dbeta.subset)) { estfun <- as.matrix(dbeta.subset) } else { estfun <- matrix(0, ncol = NCOL(dbeta.subset), nrow = nrow(design)) estfun[is.finite(design$prob), ] <- dbeta.subset } if (inherits(design, "survey.design2")) V<-svyrecvar(estfun, design$cluster, design$strata, design$fpc, postStrata = design$postStrata) else if (inherits(design, "twophase")) V<-twophasevar(estfun, design) else if (inherits(design, "twophase2")) V<-twophase2var(estfun , design) else if (inherits(design, "pps")) V<-ppsvar(estfun , design) else if (inherits(design, "svyrep.design")){ V<-vcov(svymean(estfun/pweights, design))*length(pweights)^2 } else stop("not implemented for this type of design") V<-V[index,index] df<-min(object$degf.resid, object2$degf.resid) deviance.coxph<-function(object,...) -2*object$loglik[2] if(method=="LRT"){ V0<-Ainv[index,index] chisq <- if(bigger==1) deviance(object2) - deviance(object) else deviance(object)-deviance(object2) misspec <- eigen(solve(V0) %*% V, only.values = TRUE)$values if (test=="Chisq") p <- pchisqsum(chisq, rep(1, length(misspec)), misspec, method = "sad", lower.tail = FALSE) else p <- pFsum(chisq, rep(1, length(misspec)), misspec, ddf = df, method = "sad", lower.tail = FALSE) rval <- list(call = sys.call(), chisq = chisq, df = length(index), p = p, lambda = misspec, ddf = df, mcall=if(bigger==1) object$call else object2$call, test.terms=if(bigger==1) c(setdiff(t1,t2),"-",setdiff(t2,t1)) else c(setdiff(t2,t1),"-",setdiff(t1,t2)) ) class(rval)<-"regTermTestLRT" } else { ## method=Wald beta<- refit$coefficients[index] chisq<-crossprod(beta,solve(V,beta)) if (test=="Chisq"){ p<-pchisq(chisq,df=length(index),lower.tail=FALSE) } else { p<-pf(chisq/length(index),df1=length(index),df2=df,lower.tail=FALSE) } rval <- list(call = sys.call(), Ftest = chisq/length(index), df = length(index), p = p, ddf = df, mcall=if(bigger==1) object$call else object2$call, test.terms=if(bigger==1) c(setdiff(t1,t2),"-",setdiff(t2,t1)) else c(setdiff(t2,t1),"-",setdiff(t1,t2)) ) class(rval)<-"regTermTest" } rval } survey/R/recalibrate.R0000644000176200001440000000024214233634027014412 0ustar liggesusers recalibrate<-function(design, formula, ...){ m<-model.matrix(formula, model.frame(design)) calibrate(design,formula, colSums(m*weights(design))) } survey/R/withPV.R0000644000176200001440000000362614640361577013400 0ustar liggesusers withPV.survey.design<-withPV.svyrep.design<-function(mapping, data, action, rewrite=TRUE,...){ if(inherits(mapping,"formula")) mapping<-list(mapping) if (!is.list(mapping)) stop("'mapping' must be a list of formulas") if (!all(sapply(mapping, length)==3)) stop("'mapping' must be a list of two-sided formulas") df<-model.frame(data,na.action=na.pass) PVframes<-lapply(mapping, function(f) model.frame(f[-2], model.frame(data,na.action=na.pass))) nvars<-length(PVframes) PVnames<-sapply(mapping, function(f) deparse(f[[2]])) if (any(PVnames %in% colnames(data))) stop("working PV names must not already occur in the data") nreps<-sapply(PVframes, NCOL) if (length(unique(nreps))>1) 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]]<- actioni(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/svyhist.R0000644000176200001440000000223313357475060013656 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/svyranktest.R0000644000176200001440000001045014233634027014534 0ustar liggesusers svyranktest<-function(formula,design,test=c('wilcoxon','vanderWaerden','median',"KruskalWallis"),...){ UseMethod("svyranktest", design) } svyranktest.survey.design<-svyranktest.svyrep.design<-function(formula, design, test=c('wilcoxon','vanderWaerden','median',"KruskalWallis"),...) { mf<-model.frame(formula,model.frame(design),na.action=na.omit) if (!is.null(naa<-attr(mf,"na.action"))){ design<-design[-naa,] mf<-model.frame(formula,model.frame(design)) } y<-mf[,1] g<-mf[,2] if (length(unique(g))!=2) { return(multiranktest(formula,design, test,...)) } if (is.character(test)) { test<-match.arg(test) testf<-switch(test, wilcoxon=,KruskalWallis=function(r,N) r/N, vanderWaerden=function(r,N) qnorm(r/N), median=function(r,N) as.numeric(r>N/2)) } else{ testf<-test } if (identical(test,"wilcoxon")) test<-"KruskalWallis" ii<-order(y) n<-length(y) rankhat<-numeric(n) w<-weights(design,"sampling") ## calibrated designs have weights set to zero, not removed na.fixup<-FALSE if (is.calibrated(design) && length(w)>n && !is.null(naa)){ w<-w[-naa] na.fixup<-TRUE } N<-sum(w) rankhat[ii]<-ave(cumsum(w[ii])-w[ii]/2,factor(y[ii])) rankscore<-testf(rankhat,N) m <- lm(rankscore~g, weights=w) delta<-coef(m)[2] xmat<-model.matrix(m) if (na.fixup){ infn<-matrix(0,nrow=nrow(xmat)+length(naa),ncol=ncol(xmat)) infn[-naa,]<-(xmat*(rankscore-fitted(m)))%*%summary(m)$cov.unscaled } else { infn<- (xmat*(rankscore-fitted(m)))%*%summary(m)$cov.unscaled } tot.infn<-svytotal(infn,design) if (is.character(test)) method<-paste("Design-based",test,"test") else if (!is.null(attr(test,"name"))) method<-paste("Design-based",attr(test,"name"),"test") else method<-"Design-based rank test" rval <- list(statistic = coef(m)[2]/SE(tot.infn)[2], parameter = degf(design) - 1, estimate = coef(m)[2], null.value = 0, alternative = "two.sided", method = method, data.name = deparse(formula)) rval$p.value <- 2 * pt(-abs(rval$statistic), df = rval$parameter) names(rval$statistic) <- "t" names(rval$parameter) <- "df" names(rval$estimate) <- "difference in mean rank score" names(rval$null.value) <- "difference in mean rank score" class(rval) <- "htest" rval } multiranktest<-function(formula,design,test=c('wilcoxon','vanderWaerden','median','KruskalWallis'),...){ mf<-model.frame(formula,model.frame(design),na.action=na.omit) if (!is.null(naa<-attr(mf,"na.action"))){ design<-design[-naa,] #mf<-model.frame(formula,model.frame(design),na.action=na.fail) } y<-mf[,1] g<-mf[,2] if (is.character(test)) { test<-match.arg(test) testf<-switch(test, wilcoxon=,KruskalWallis=function(r,N) r/N, vanderWaerden=function(r,N) qnorm(r/N), median=function(r,N) as.numeric(r>N/2)) } else{ testf<-test } if (identical(test,"wilcoxon")) test<-"KruskalWallis" ii<-order(y) n<-length(y) rankhat<-numeric(n) w<-weights(design,"sampling") ## calibrated designs have weights set to zero, not removed if (is.calibrated(design) && length(w)>n && !is.null(naa)){ w<-w[-naa] } N<-sum(w) rankhat[ii]<-ave(cumsum(w[ii])-w[ii]/2,factor(y[ii])) rankscore<-testf(rankhat,N) m <- glm(rankscore~factor(g),weights=w) m$na.action<-naa V<-svy.varcoef(m,design) ndf<-length(unique(g))-1 beta<-coef(m)[-1] V<-V[-1,-1] chisq<-beta%*%solve(V,beta) ddf<-degf(design)-ndf if (is.character(test)) method<-paste("Design-based",test,"test") else if (!is.null(attr(test,"name"))) method<-paste("Design-based",attr(test,"name"),"test") else method<-"Design-based rank test" names(chisq)<-"Chisq" names(ndf)<-"df" rval<-list(parameter=chisq,statistic=ndf,ddf=ddf,p.value=pf(chisq/ndf,ndf,ddf,lower.tail=FALSE), method=method, data.name = deparse(formula)) class(rval)<-"htest" rval } cov_inffun_glm<-function(m, design){ A<-summary(m)$cov.unscaled xmat <- model.matrix(m) U<-residuals(m, "working") * m$weights * xmat/weights(design,"sampling") h<-U%*%A vcov(svytotal(h, design)) } survey/R/stdize.R0000644000176200001440000000221113403311532013424 0ustar liggesusers## ## This is how NCHS does it: postStratify to a table where proportions for by= are specified and then are applied within each cell of over= ## svystandardize<-function(design, by, over=~1, population, excluding.missing=NULL){ if (!is.null(excluding.missing)){ mf<-model.frame(excluding.missing, model.frame(design),na.action=na.omit) naa<-attr(mf,"na.action") if(!is.null(naa)) design<-design[-naa,] } if(is.data.frame(population)) population<-population$Freq if (isTRUE(all.equal(over,~1))){ freemargins<-data.frame(`_one_`=1, Freq=sum(weights(design, "sampling"))) } else { freemargins<-as.data.frame(svytable(over, design)) } fixedmargins<-as.data.frame(svytable(by,design)) fixedmargins$Freq<-as.vector(population)/sum(as.vector(population)) combined<-make.formula(c(attr(terms(by),"term.labels"), attr(terms(over),"term.labels"))) allmargins<-as.data.frame(svytable(combined,design)) allmargins$Freq<-as.vector(outer(fixedmargins$Freq, freemargins$Freq)) design<-postStratify(design, combined, allmargins,partial=TRUE) design$call<-sys.call() design } survey/R/multiphase_inference.R0000644000176200001440000003173514640375550016346 0ustar liggesusers multiphase<-function(ids, subset, strata, probs, data, fpc=NULL, check.variable.phase=TRUE){ data<-detibble(data) phase1_no_weights<-identical(deparse(probs[[1]]), "~1") subsets<-lookup_subset(subset, data) ids<-lookup_ids(ids, subsets, data) nphases<-length(ids) probs<-lookup_probs(probs,subsets,data) nfinal<-sum(subsets$cumulative[[nphases]]) strata<-lookup_strata(strata, ids, subsets, data) ## fpc can't be specified except at phase 1 has.fpc<-FALSE 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) has.fpc<-TRUE } id_strata<- mapply(check_multistage, ids, strata, SIMPLIFY=FALSE) ## make weighted covariance matrices for any stratified multistage phases htmats<-vector("list", nphases) for(i in 1:nphases){ withrep<-if(i>1) FALSE else !has.fpc id_i<-id_strata[[i]]$ids str_i<-id_strata[[i]]$strata this_subset<-subsets$cumulative[[i]] if (is.null(probs[[i]])) probs[[i]]<-compute_probs(str_i, id_i, this_subset)$allprob if (i==nphases) htmats[[i]]<-Dcheck_multi(id_i[this_subset,,drop=FALSE], str_i[this_subset,,drop=FALSE], probs[[i]]) else if (i==1 && phase1_no_weights){ n1<-sum(this_subset) htmats[[i]]<-Diagonal(n1) } else htmats[[i]]<-Dcheck_multi_subset(id_i,str_i, this_subset, probs[[i]], withrep) } htmats_sub<-vector("list", nphases) final_subset<-subsets$cumulative[[nphases]] htmats_sub[[1]]<-htmats[[1]][final_subset, final_subset] w<-vector("list",nphases) w[[1]]<-if (phase1_no_weights) rep(1, NCOL(htmats[[1]])) else 1/(1-diag(htmats[[1]])) wi<-vector("list",nphases) wi[[1]]<-w[[1]] for (i in 2:nphases){ ##FIXME final_subset<-subsets$cumulative[[nphases]][subsets$cumulative[[i]]] htmats_sub[[i]]<-htmats[[i]][final_subset,final_subset] prefinal_subset<-subsets$cumulative[[nphases]][subsets$cumulative[[i-1]]] wi[[i]]<-1/(1-diag(htmats[[i]])) w[[i]]<-w[[i-1]][prefinal_subset]*wi[[i]] } pdag<-vector("list",nphases) pdag[[nphases]]<-tcrossprod(1/wi[[nphases]])/(1-htmats_sub[[nphases]]) for(i in (nphases-1):1){ final_subset<-subsets$cumulative[[nphases]][subsets$cumulative[[i]]] if(i==1 && phase1_no_weights){ ## special case simple random sampling with replacement at phase 1 pdag[[i]]<- tcrossprod(1/wi[[i]][final_subset])*pdag[[i+1]] } else{ pdag[[i]]<- tcrossprod(1/wi[[i]][final_subset])/(1-htmats_sub[[i]])*pdag[[i+1]] } } dcheck<-vector("list",nphases) for(i in 1:(nphases-1)){ dcheck[[i]]<-htmats_sub[[i]]/pdag[[i]] } dcheck[[nphases]]<-htmats_sub[[nphases]] ## where does each variable first appear variable_phases<-phase_for_var(data, subsets) if (check.variable.phase && all(variable_phases==1)) warning("all variables measured at all phases") ## subpopulations: NA for not sampled this phase, TRUE/FALSE subpop<-ifelse(do.call(cbind, subsets$cumulative), TRUE, NA) ## return the things rval<-list(data=data, subsets=subsets, strata=strata, ids=ids,probs=probs, phaseweights=w, finalweights=w[[nphases]], subpop=subpop, var_phases=variable_phases, Dcheck=dcheck, full_Dcheck=htmats, postStrata=vector("list",nphases), phase1_no_weights=phase1_no_weights, call=sys.call(),nphases=nphases) class(rval)<-"multiphase" rval } subset.multiphase<-function(x,subset,...){ e <- substitute(subset) r <- eval(e, x$data, parent.frame()) r <- r & !is.na(r) x<-x[r,] x$call<-sys.call(-1) x } project_ps<-function(xc, psvar){ if (is.null(psvar)) return(xc) qr.resid(psvar$qr,xc/psvar$w)*psvar$w } multiphasevar<-function(x, weights, htmats, subsets, postStrata){ nphases<-length(htmats) V<-matrix(0,ncol=NCOL(x), nrow=NCOL(x)) Vphases<-vector("list",nphases) for(i in 1:nphases){ this_phase<-subsets$cumulative[[i]] final_phase<-subsets$cumulative[[nphases]][this_phase] xcheck<-x*(weights[[i]][final_phase]) gecheck<-project_ps(xcheck, postStrata[[i]]) Vi<- htvar.matrix(gecheck, htmats[[i]]) Vphases[[i]]<-Vi V<-V+Vi } attr(V,"phases")<-Vphases V } print.multiphase<-function(x,...){ cat("Multiphase (",length(x$ids),"-phase) sampling design\n",sep="") cat("Sampled: ") cat(colSums(!is.na(x$subpop))) if (FALSE %in% x$subpop){ cat("\nSubpop : ") cat(colSums(x$subpop,na.rm=TRUE)) } cat("\nCall: ") print(x$call) invisible(x) } svytotal.multiphase<-function(x, design, na.rm=FALSE, ...){ x<-multiphase_getdata(x, design,formula_only=FALSE) if (na.rm) { nas <- rowSums(is.na(x)) design <- design[nas == 0, ] x[nas > 0, ] <- 0 } nphases<-design$nphases total <- colSums(x*weights(design,"sampling"), na.rm = na.rm) class(total) <- "svystat" attr(total, "var") <- multiphasevar(x, weights(design,"phase"), design$Dcheck, design$subsets, design$postStrata) attr(total, "statistic") <- "total" total } svymean.multiphase<-function(x, design, na.rm=FALSE, ...){ x<-multiphase_getdata(x, design,formula_only=FALSE) if (na.rm) { nas <- rowSums(is.na(x)) design <- design[nas == 0, ] x[nas > 0, ] <- 0 } nphases<-design$nphases weights <- weights(design,"sampling") psum <- sum(weights) average <- colSums(x*weights/psum, na.rm = na.rm) x <- sweep(x, 2, average)/psum class(average) <- "svystat" attr(average, "var") <- multiphasevar(x, weights(design,"phase"), design$Dcheck, design$subsets, design$postStrata) attr(average, "statistic") <- "mean" average } svyglm.multiphase<-function(formula, design, subset = NULL, family = stats::gaussian(), start = NULL, influence=FALSE,...){ dfake<-svydesign(ids=~1,weights=weights(design), data=design$data[design$subsets$cumulative[[design$nphases]],]) g<-svyglm(formula,dfake,subset=subset, family=family,start=start,...,influence=TRUE) infl<-attr(g,"influence")/weights(design) g$cov.unscaled<- multiphasevar(infl, weights(design,"phase"), design$Dcheck, design$subsets, design$postStrata) g$df.residual <- degf(design) + 1 - length(coef(g)[!is.na(coef(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 (!influence) { attr(g, "influence") <- NULL } g$survey.design <- design g } degf.multiphase<-function (design, ...) { sum(design$subpop[,2],na.rm=TRUE)-1 } svyvar.multiphase<-function (x, design, na.rm = FALSE, ...) { x <- multiphase_getdata(x, design) n <- sum(weights(design)>0) xbar <- svymean(x, design, na.rm = na.rm) if (NCOL(x) == 1) { if (n == 1) { v <- NA attr(v, "statistic") <- NA attr(v, "var") <- NA class(v) <- "svystat" return(v) } x <- x - xbar v <- svymean(x * x * n/(n - 1), design, na.rm = na.rm) attr(v, "statistic") <- "variance" return(v) } x <- t(t(x) - xbar) p <- NCOL(x) a <- matrix(rep(x, p), ncol = p * p) b <- x[, rep(1:p, each = p)] 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 } calibrate.multiphase<-function(design, formula, phase, to.phase=phase-1, population=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 (phase-1!=to.phase) stop("only calibration of single phases supported at this time") if (phase==1 && is.null(population)) stop("need population for calibration of phase 1") nphases<-design$nphases if (phase>nphases || phase <1) stop(paste("there is no phase",phase)) if (!is.list(bounds)) bounds <- list(lower = bounds[1], upper = bounds[2]) if (is.character(calfun)) calfun<-match.arg(calfun) if (is.character(calfun) && calfun=="rrz"){ design<-estWeights(design, formula,phase=phase, to.phase=to.phase,...) design$call<-sys.call(-1) return(design) } if (is.character(calfun)) calfun <- switch(calfun, linear = cal.linear, raking = cal.raking, logit = cal.logit) if (!inherits(calfun, "calfun")) stop("'calfun' must be a string or of class 'calfun'.") if(!inherits(formula,"formula")){ if (inherits(formula, "glm") || inherits(formula, "coxph") || inherits(formula, "lm")){ if (is.character(calfun)) calfun<-switch(calfun,linear=cal.linear, raking=cal.raking, logit=cal.logit) rval<-inf_calibrate(design, working_model=formula, add_mat=NULL, calfun=calfun,...) ## FIXME: need new method? return(rval) } else stop("formula must be a formula or working model") } if (missing(population) || is.null(population)){ ## calibrate to to.phase totals data_to<-design$data[design$subsets$cumulative[[to.phase]], all.vars(formula), drop=FALSE] population<-colSums(model.matrix(formula, model.frame(formula, data_to))) rm(data_to) } data_from<-design$data[design$subsets$cumulative[[phase]], all.vars(formula), drop=FALSE] if(sparse){ mm<-sparse.model.matrix(formula, model.frame(formula, data_from)) }else{ mm<-model.matrix(formula, model.frame(formula, data_from)) } ww<-weights(design,"phase")[[phase]] ## if bounds are set to a constant convert to multiplicative value and run as normal if (bounds.const) bounds<-lapply(bounds,function(x) ifelse(ww>0,x/ww,x)) whalf<-sqrt(ww) sample.total<-colSums(mm*ww) if(any(sample.total==0)){ ## drop columns 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) g<-grake(mm,ww,calfun, bounds=bounds,population=population, verbose=verbose,epsilon=epsilon,maxit=maxit) 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") } phaseweights<-weights(design,"phase") for(this_phase in phase:nphases){ this_subset<-design$subsets$cumulative[[this_phase]][design$subsets$cumulative[[phase]]] phaseweights[[this_phase]]<-phaseweights[[this_phase]]*g[this_subset] } design$phaseweights<-phaseweights design$finalweights<-phaseweights[[nphases]] caldata <- list(qr=tqr, w=g*whalf, stage=0, index=NULL, g=g) class(caldata) <- c("phase_calibration", "gen_raking") design$postStrata[[phase]] <- c(design$postStrata[[phase]],caldata) design$call<-sys.call(-1) design } survey/R/surveyby.R0000755000176200001440000004044214771365436014052 0ustar liggesusers## ## tables of statistics. ## svyby<-function(formula, by, design,...) UseMethod("svyby",design) subset_drops_rows<-function(design) !(is.pps(design) || is.calibrated(design)) unwrap<-function(x,nvartype) UseMethod("unwrap",x) unwrap2<-function(x) UseMethod("unwrap2",x) unwrap2.default <- function(x){ if(!is.null(attr(x, "deff"))) c(statistic = unclass(x), DEff = deff(x)) else c(statistic = unclass(x)) } unwrap2.newsvyquantile <- function(x){ rval<-do.call(rbind,x) rownames(rval)<-names(x) rval } unwrap.default <-function(x,nvartype){ rval<-c(coef(x)) nvar<-length(rval) rval<-c(rval,c(se=SE(x), ci_l=confint(x)[,1], ci_u=confint(x)[,2], cv=cv(x,warn=FALSE), `cv%`=cv(x,warn=FALSE)*100, var=SE(x)^2)[rep((nvartype-1)*(nvar),each=nvar)+(1:nvar)]) if(!is.null(attr(x,"deff"))) rval<-c(rval,DEff=deff(x)) rval } strings_to_factors<-function(formula, design){ allv<-intersect(all.vars(formula), colnames(design)) vclass<-sapply(model.frame(design)[,allv,drop=FALSE], class) if (!any(vclass=="character")) return(design) vfix<-names(vclass)[vclass=="character"] l<-as.list(vfix) names(l)<-vfix fl<-lapply(l, function(li) bquote(factor(.(as.name(li))))) expr<-bquote(update(design, ..(fl)), splice=TRUE) eval(expr) } svyby.default<-function(formula, by, design, FUN,..., deff=FALSE, keep.var=TRUE, keep.names=TRUE, verbose=FALSE, vartype=c("se","ci","ci","cv","cvpct","var"), drop.empty.groups=TRUE, covmat=FALSE, return.replicates=FALSE, na.rm.by=FALSE, na.rm.all=FALSE, stringsAsFactors=TRUE, multicore=getOption("survey.multicore")){ if (inherits(by, "formula")) byfactors<-model.frame(by, model.frame(design), na.action=na.pass) else byfactors<-as.data.frame(by) if(return.replicates){ if (!inherits(design,"svyrep.design")) stop("return.replicates=TRUE not implemented for this design type") } if(stringsAsFactors){ design<-strings_to_factors(formula,design) } if (multicore && !requireNamespace("parallel",quietly=TRUE)) multicore<-FALSE ## some people insist on using vectors rather than formulas ## so I suppose we should be nice to them if (!inherits(formula, "formula")){ if (NROW(formula)!=NROW(byfactors)) stop("'formula' is the wrong length") if (!(is.data.frame(formula) || is.matrix(formula) || is.vector(formula))){ stop("invalid type for 'formula'") } } hasdeff<- is.character(deff) || deff ## all combinations that actually occur in this design byfactor<-do.call("interaction", byfactors) dropped<- weights(design,"sampling")==0 if (na.rm.by) dropped<-dropped | apply(byfactors, 1, function(x) any(is.na(x))) if (na.rm.all){ if (inherits(formula,"formula")) allx<-model.frame(formula,model.frame(design),na.action=na.pass) else allx<-formula dropped <- dropped | (!complete.cases(allx)) } uniquelevels<-sort(unique(byfactor[!dropped])) uniques <- match(uniquelevels, byfactor) if(missing(vartype)) vartype<-"se" vartype<-match.arg(vartype,several.ok=TRUE) nvartype<-base::which(eval(formals(sys.function())$vartype) %in% vartype) if(any(is.na(nvartype))) stop("invalid vartype") if (keep.var){ ## In dire need of refactoring (or rewriting) ## but it seems to work. results<-(if (multicore) parallel::mclapply else lapply)(uniques, function(i){ if(verbose && !multicore) print(as.character(byfactor[i])) if (inherits(formula,"formula")) data<-formula else data<-subset(formula, byfactor %in% byfactor[i]) if (covmat || return.replicates) { FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...,return.replicates=TRUE) } else { FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...) } }) rval<-t(sapply(results, unwrap,nvartype=nvartype)) if ((covmat && inherits(design, "svyrep.design")) || return.replicates) { replicates<-do.call(cbind,lapply(results,"[[","replicates")) attr(replicates,"scale")<-design$scale attr(replicates, "rscales")<-design$rscales attr(replicates, "mse")<-design$mse colnames(replicates)<-rep(as.character(uniquelevels), each=NCOL(replicates)/length(uniquelevels)) covmat.mat<-svrVar(replicates,design$scale,design$rscales, mse=design$mse,coef=as.vector(sapply(results,coef))) } else{ covmats<-lapply(results,vcov) ncovmat<-sum(sapply(covmats,ncol)) covmat.mat<-matrix(0,ncol=ncovmat,nrow=ncovmat) j<-0 for(i in 1:length(covmats)){ ni<-nrow(covmats[[i]]) covmat.mat[j+(1:ni),j+(1:ni)]<-covmats[[i]] j<-j+ni } } } else { rval<-sapply(uniques, function(i) { if(verbose) print(as.character(byfactor[i])) if (inherits(formula,"formula")) data<-formula else data<-subset(formula, byfactor %in% byfactor[i]) unwrap2(FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...))} ) if (is.matrix(rval)) rval<-t(rval) } nr<-NCOL(rval) nstats<-nr/(1+ keep.var*(length(vartype)+ ("ci" %in% vartype)) + hasdeff) if (nr>1) rval<-cbind(byfactors[uniques,,drop=FALSE], rval) else rval <-cbind(byfactors[uniques,,drop=FALSE], statistic=rval) expand.index<-function(index,reps,x=FALSE){ ns<-max(index) if (x){ i<-matrix(1:(ns*reps),ncol=reps) rval<-t(i[index,]) } else{ i<-matrix(1:(ns*reps), ncol=reps, nrow=ns, byrow=TRUE) rval<- i[index,] } as.vector(rval) } if(drop.empty.groups){ if (keep.names) rownames(rval)<-paste(byfactor[uniques]) rval<-rval[order(byfactor[uniques]),] i<-expand.index(order(byfactor[uniques]),nstats) if (keep.var) covmat.mat<-covmat.mat[i,i] } else { a<-do.call("expand.grid", lapply(byfactors,function(f) levels(as.factor(f)))) a<-cbind(a,matrix(NA, ncol=nr, nrow=nrow(a))) names(a)<-names(rval) a[match(byfactor[uniques], levels(byfactor)),]<-rval rval<-a if (keep.names) rownames(rval)<-levels(byfactor) if (keep.var){ tmp<-matrix(ncol=nrow(a)*nstats,nrow=nrow(a)*nstats) i<-expand.index(match(byfactor[uniques], levels(byfactor)),nstats,TRUE) tmp[i,i]<-covmat.mat covmat.mat<-tmp } } attr(rval,"svyby")<-list(margins=1:NCOL(byfactors),nstats=nstats, vars=if(keep.var) length(vartype) else 0, deffs=deff, statistic=deparse(substitute(FUN)), variables= names(rval)[-(1:NCOL(byfactors))][1:nstats], vartype=vartype ) if (!keep.names) rownames(rval)<-1:NROW(rval) if(covmat) attr(rval,"var")<-covmat.mat if (return.replicates) attr(rval,"replicates")<-replicates attr(rval,"call")<-sys.call() class(rval)<-c("svyby","data.frame") rval } SE.svyby <-function(object,...){ aa<-attr(object,"svyby") if (!aa$vars) stop("Object does not contain variances") vartype<-attr(object,"svyby")$vartype vartype <- c("se","ci","ci","cv","cvpct","var")[c("se","ci","ci","cv","cvpct","var") %in% vartype] if (pos<-match("se",vartype,0)) object[,max(aa$margins)+aa$nstats*pos+(1:aa$nstats)] else if (pos<-match("var",vartype,0)) sqrt(object[,max(aa$margins)+aa$nstats*pos+(1:aa$nstats)]) else if (pos<-match("cv",vartype,0)) object[,max(aa$margins)+aa$nstats*pos+(1:aa$nstats)]*coef(object) else if (pos<-match("cvpct",vartype,0)) object[,max(aa$margins)+aa$nstats*pos+(1:aa$nstats)]*coef(object)/100 else stop("This can't happen") } coef.svyby<-function (object, ...) { aa <- attr(object, "svyby") rval <- object[, max(aa$margins) + (1:aa$nstats)] if (is.null(dim(rval))){ names(rval) <- row.names(object) } else { rval<-as.vector(as.matrix(rval)) names(rval)<-outer(rownames(object), gsub("statistics\\.","",aa$variables), paste, sep=":") } rval } deff.svyby<-function(object,...){ aa<-attr(object,"svyby") if (!aa$deffs) stop("object does not have design effect information") object[,max(aa$margins)+aa$nstats*(1+aa$vars)+(1:aa$nstats)] } vcov.svyby<-function(object,...){ rval<-attr(object,"var") if(is.null(rval)){ warning("Only diagonal elements of vcov() available") se<-SE(object) if (is.data.frame(se)) se<-as.vector(as.matrix(se)) if(length(se)>1) rval<-diag(se^2) else rval<-as.matrix(se^2) } nms<-names(coef(object)) dimnames(rval)<-list(nms,nms) rval } ## allows for influence functions. Does not allow for replicates svyby.survey.design2<-function(formula, by, design, FUN,..., deff=FALSE, keep.var=TRUE, keep.names=TRUE, verbose=FALSE, vartype=c("se","ci","ci","cv","cvpct","var"), drop.empty.groups=TRUE, covmat=FALSE, influence=covmat, na.rm.by=FALSE, na.rm.all=FALSE, stringsAsFactors=TRUE, multicore=getOption("survey.multicore")){ if (inherits(by, "formula")) byfactors<-model.frame(by, model.frame(design), na.action=na.pass) else byfactors<-as.data.frame(by) if (stringsAsFactors){ design<-strings_to_factors(formula, design) } if (multicore && !requireNamespace("parallel",quietly=TRUE)) multicore<-FALSE ## some people insist on using vectors rather than formulas ## so I suppose we should be nice to them if (!inherits(formula, "formula")){ if (NROW(formula)!=NROW(byfactors)) stop("'formula' is the wrong length") if (!(is.data.frame(formula) || is.matrix(formula) || is.vector(formula))){ stop("invalid type for 'formula'") } } hasdeff<- is.character(deff) || deff ## all combinations that actually occur in this design byfactor<-do.call("interaction", byfactors) dropped<- weights(design,"sampling")==0 if (na.rm.by) dropped<-dropped | apply(byfactors, 1, function(x) any(is.na(x))) if (na.rm.all){ if (inherits(formula,"formula")) allx<-model.frame(formula,model.frame(design),na.action=na.pass) else allx<-formula dropped <- dropped | (!complete.cases(allx)) } uniquelevels<-sort(unique(byfactor[!dropped])) uniques <- match(uniquelevels, byfactor) if(missing(vartype)) vartype<-"se" vartype<-match.arg(vartype,several.ok=TRUE) nvartype<-base::which(eval(formals(sys.function())$vartype) %in% vartype) if(any(is.na(nvartype))) stop("invalid vartype") if (keep.var){ ## In dire need of refactoring (or rewriting) ## but it seems to work. results<-(if (multicore) parallel::mclapply else lapply)(uniques, function(i){ idx<- byfactor %in% byfactor[i] ##save this for assembling influence functions if(verbose && !multicore) print(as.character(byfactor[i])) if (inherits(formula,"formula")) data<-formula else data<-subset(formula, byfactor %in% byfactor[i]) if (covmat||influence ) { r<-FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...,influence=influence) } else { r<-FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...) } attr(r,"index")<-idx r }) rval<-t(sapply(results, unwrap,nvartype=nvartype)) if (covmat || influence) { ## do the influence function thing here ## have to handle both subset-> zero wt and subset -> gone 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]])) if (subset_drops_rows(design)){ inflmats[[i]][idxs[[i]],]<-infs[[i]] } else { inflmats[[i]][idxs[[i]],]<-infs[[i]][idxs[[i]],] } } inflmat<-do.call(cbind,inflmats) covmat.mat<-svyrecvar(inflmat,design$cluster, design$strata, design$fpc, postStrata=design$postStrata) } else{ covmats<-lapply(results,vcov) ncovmat<-sum(sapply(covmats,ncol)) covmat.mat<-matrix(0,ncol=ncovmat,nrow=ncovmat) j<-0 for(i in 1:length(covmats)){ ni<-nrow(covmats[[i]]) covmat.mat[j+(1:ni),j+(1:ni)]<-covmats[[i]] j<-j+ni } } } else { rval<-sapply(uniques, function(i) { if(verbose) print(as.character(byfactor[i])) if (inherits(formula,"formula")) data<-formula else data<-subset(formula, byfactor %in% byfactor[i]) unwrap2(FUN(data, design[byfactor %in% byfactor[i],], deff=deff,...))} ) if (is.matrix(rval)) rval<-t(rval) } nr<-NCOL(rval) nstats<-nr/(1+ keep.var*(length(vartype)+ ("ci" %in% vartype)) + hasdeff) if (nr>1) rval<-cbind(byfactors[uniques,,drop=FALSE], rval) else rval <-cbind(byfactors[uniques,,drop=FALSE], statistic=rval) expand.index<-function(index,reps,x=FALSE){ ns<-max(index) if (x){ i<-matrix(1:(ns*reps),ncol=reps) rval<-t(i[index,]) } else{ i<-matrix(1:(ns*reps), ncol=reps, nrow=ns, byrow=TRUE) rval<- i[index,] } as.vector(rval) } if(drop.empty.groups){ if (keep.names) rownames(rval)<-paste(byfactor[uniques]) rval<-rval[order(byfactor[uniques]),] i<-expand.index(order(byfactor[uniques]),nstats) if (keep.var) covmat.mat<-covmat.mat[i,i] } else { a<-do.call("expand.grid", lapply(byfactors,function(f) levels(as.factor(f)))) a<-cbind(a,matrix(NA, ncol=nr, nrow=nrow(a))) names(a)<-names(rval) a[match(byfactor[uniques], levels(byfactor)),]<-rval rval<-a if (keep.names) rownames(rval)<-levels(byfactor) if (keep.var){ tmp<-matrix(ncol=nrow(a)*nstats,nrow=nrow(a)*nstats) i<-expand.index(match(byfactor[uniques], levels(byfactor)),nstats,TRUE) tmp[i,i]<-covmat.mat covmat.mat<-tmp } } attr(rval,"svyby")<-list(margins=1:NCOL(byfactors),nstats=nstats, vars=if(keep.var) length(vartype) else 0, deffs=deff, statistic=deparse(substitute(FUN)), variables= names(rval)[-(1:NCOL(byfactors))][1:nstats], vartype=vartype ) if (!keep.names) rownames(rval)<-1:NROW(rval) if(covmat) attr(rval,"var")<-covmat.mat if (influence) attr(rval,"influence")<-inflmat attr(rval,"call")<-sys.call() class(rval)<-c("svyby","data.frame") rval } svybys<-function(formula, bys, design, FUN, ...){ tms <- attr(terms(bys),"variables")[-1] lapply(tms, function(tm){ eval(bquote(svyby(.(formula),by=~.(tm), design=.(design), FUN=.(FUN), ...))) }) } survey/R/pFsum.R0000644000176200001440000000235412750463316013240 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/vignettes/0000755000176200001440000000000015147136377013635 5ustar liggesuserssurvey/vignettes/qrule.Rnw0000644000176200001440000000774514073730263015461 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/precalibrated.Rnw0000644000176200001440000000611114233634027017113 0ustar liggesusers\documentclass{article} %\VignetteIndexEntry{Pre-calibrated weights} \usepackage{Sweave} \title{Making use of pre-calibrated weights} \begin{document} \maketitle \SweaveOpts{concordance=TRUE} Public-use data sets often come with weights that have been adjusted by post-stratification, raking, or calibration. It is standard practice to ignore this fact and treat the weights as if they were sampling weights. An alternative approach is to calibrate the weights again in R. This might seem impossible: calibration needs the population totals. But we know the population totals, because the effect of calibration is precisely that the estimated population totals match the true population totals. From version 4.2, the \texttt{svydesign} function has an option \texttt{calibrate.formula} to specify (as a model formula) the variables that the weights are already calibrated on. The weights will be recalibrated using this formula, to population totals estimated from the sample. The weights will not change --- they were already calibrated --- but information will be added to the survey design object to describe the calibration constraints and standard errors of estimates will change. Consider, for example, the \texttt{apiclus1} example. This is a cluster sample of 15 school districts in California <<>>= library(survey) data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) @ The sampling weights \texttt{pw} are already calibrated to sum to the known number of schools in the population, 6194, but R does not know this: <<>>= sum(weights(dclus1)) dim(apipop) dclus1<-update(dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,dclus1) @ The standard error should be zero, because the calibration procedure ensures that the the estimated total is exactly 6194. We could use \texttt{calibrate()} on the design object <<>>= cal_dclus1<-calibrate(dclus1, formula=~1, population=sum(weights(dclus1))) svytotal(~one,cal_dclus1) @ The standard errors have changed, but the weights haven't <<>>= summary(weights(cal_dclus1)/weights(dclus1)) @ With the new option to \texttt{svydesign} we can do the same thing when the object is created <<>>= precal_dclus1<-svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc, calibrate.formula=~1) precal_dclus1<-update(precal_dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,precal_dclus1) @ Calibrating to the population size simplifies the standard error relationship between mean and total <<>>= (enroll_t<-svytotal(~enroll, dclus1)) (enroll_m<-svymean(~enroll, dclus1)) SE(enroll_m) SE(enroll_t)/6194 (cenroll_t<-svytotal(~enroll, precal_dclus1)) (cenroll_m<-svymean(~enroll, precal_dclus1)) SE(cenroll_m) SE(cenroll_t)/6194 @ Because calibration in this way changes the standard errors but not the point estimates, it's critical that you {\em only use it when the weights are in fact already calibrated}. If not, the standard errors will be wrong. In particular, it is not valid to take a subset of a data set with calibrated weights and then pretend the subset was also calibrated on the same variables. \end{document} survey/vignettes/domain.Rnw0000644000176200001440000000771611457435610015577 0ustar liggesusers\documentclass{article} \usepackage{url} %\VignetteIndexEntry{Estimates in subpopulations} \usepackage{Sweave} \author{Thomas Lumley} \title{Estimates in subpopulations.} \begin{document} \maketitle Estimating a mean or total in a subpopulation (domain) from a survey, eg the mean blood pressure in women, is not done simply by taking the subset of data in that subpopulation and pretending it is a new survey. This approach would give correct point estimates but incorrect standard errors. The standard way to derive domain means is as ratio estimators. I think it is easier to derive them as regression coefficients. These derivations are not important for R users, since subset operations on survey design objects automatically do the necessary adjustments, but they may be of interest. The various ways of constructing domain mean estimators are useful in quality control for the survey package, and some of the examples here are taken from \texttt{survey/tests/domain.R}. Suppose that in the artificial \texttt{fpc} data set we want to estimate the mean of \texttt{x} when \texttt{x>4}. <<>>= library(survey) data(fpc) dfpc<-svydesign(id=~psuid,strat=~stratid,weight=~weight,data=fpc,nest=TRUE) dsub<-subset(dfpc,x>4) svymean(~x,design=dsub) @ The \texttt{subset} function constructs a survey design object with information about this subpopulation and \texttt{svymean} computes the mean. The same operation can be done for a set of subpopulations with \texttt{svyby}. <<>>= svyby(~x,~I(x>4),design=dfpc, svymean) @ In a regression model with a binary covariate $Z$ and no intercept, there are two coefficients that estimate the mean of the outcome variable in the subpopulations with $Z=0$ and $Z=1$, so we can construct the domain mean estimator by regression. <<>>= summary(svyglm(x~I(x>4)+0,design=dfpc)) @ Finally, the classical derivation of the domain mean estimator is as a ratio where the numerator is $X$ for observations in the domain and 0 otherwise and the denominator is 1 for observations in the domain and 0 otherwise <<>>= svyratio(~I(x*(x>4)),~as.numeric(x>4), dfpc) @ The estimator is implemented by setting the sampling weight to zero for observations not in the domain. For most survey design objects this allows a reduction in memory use, since only the number of zero weights in each sampling unit needs to be kept. For more complicated survey designs, such as post-stratified designs, all the data are kept and there is no reduction in memory use. \subsection*{More complex examples} Verifying that \texttt{svymean} agrees with the ratio and regression derivations is particularly useful for more complicated designs where published examples are less readily available. This example shows calibration (GREG) estimators of domain means for the California Academic Performance Index (API). <<>>= data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) gclus1 <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069)) svymean(~api00, subset(gclus1, comp.imp=="Yes")) svyratio(~I(api00*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), gclus1) summary(svyglm(api00~comp.imp-1, gclus1)) @ Two-stage samples with full finite-population corrections <<>>= data(mu284) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) svymean(~y1, subset(dmu284,y1>40)) svyratio(~I(y1*(y1>40)),~as.numeric(y1>40),dmu284) summary(svyglm(y1~I(y1>40)+0,dmu284)) @ Stratified two-phase sampling of children with Wilm's Tumor, estimating relapse probability for those older than 3 years (36 months) at diagnosis <<>>= library("survival") data(nwtco) nwtco$incc2<-as.logical(with(nwtco, ifelse(rel | instit==2,1,rbinom(nrow(nwtco),1,.1)))) dccs8<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2) svymean(~rel, subset(dccs8,age>36)) svyratio(~I(rel*as.numeric(age>36)), ~as.numeric(age>36), dccs8) summary(svyglm(rel~I(age>36)+0, dccs8)) @ \end{document} survey/vignettes/epi.Rnw0000644000176200001440000002362211457435610015077 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/survey-sae.html.asis0000644000176200001440000000011314576372270017556 0ustar liggesusers%\VignetteIndexEntry{Small area estimation} %\VignetteEngine{R.rsp::asis} survey/vignettes/pps.Rnw0000644000176200001440000001455111541475406015126 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/multiphase.Rmd0000644000176200001440000001573614640361577016467 0ustar liggesusers--- title: "Computations for multiphase sampling" author: "Thomas Lumley" date: "2024-06-7" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Multiphase computations} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` The ideas here are based on Chapter 9 of Särndal, Swensson and Wretman, which deals with two-phase sampling and the regression estimation of population totals. Here we are interested in multiphase sampling and in settings where many statistics may be computed with the same set of calibrated weights, so the priorities and notation are slightly different. As in the book, we consider the setting where the sampling probabilities are known (or well-estimated) in advance and raking adjustments are small. When sampling probabilities $\pi$ are grossly incorrect (eg: missing data/non-response) so that the raking adjustments are not small, we would want different computations such as those of Chang & Kott (*Biometrika*, 2008). ### Estimation In multiphase sampling we have a sequence of $K$ nested subsamples, with sampling probabilities that can depend on any data at previous phases. We write $\pi_{i,1}$, $\pi_{i,2|1}$, $\pi_{i,3|2}$, ... , $\pi_{i, k|k-1}$,...,$\pi_{i,K|K-1}$ as the sampling probabilities for observation $i$ at each phase, and similarly for pairwise probabilities. In general, we use a $,k|k-1$ subscript for quantities related to the $k$th phase of sampling and a $,k$ subscript for quantities related to the cumulative effect of sampling from phase 1 through phase $k$. All sums are over the population unless otherwise specified; restriction to samples is achieved with the sampling indicators $R_{i,k}$ (and $R_i\equiv R_{i,K}$). We also write $$\pi^\dagger_{ij,k}=\pi^*_{ij,K}/\pi^*_{ij,k}=\prod_{\ell=k+1}^K \pi^*_{ij,\ell}$$ for the forward cumulative pairwise probabilities. The product $\pi_i^*\equiv\pi^*_{i,K}=\pi_{i,1}\pi_{i,2|1}\pi_{i,3|2}...\pi_{i,K|K-1}$ is *not* in general the marginal sampling probability for observation $i$, because each $\pi_{k|k-1}$ can depend on data up to phase $k-1$, so $\pi_i^*=\pi_{i,K}^*$ is a random variable. To get the true marginal probabilities we would need to integrate out all the dependence on data measured at intermediate phases. However, it is still true that $E[R_{i,k}/\pi_{i,k}^*]=1$, which is the key fact we need to estimate totals $$\hat T_X = \sum_i \frac{R_i}{\pi_i^*}X_i$$ It's also still true (per Särndal et al) that the variance of a total can be estimated by something very like the Horvitz-Thompson formula $$\widehat{\mathrm{var}}[\hat T_X]= \sum_{i,j} \check{X}_i\check{X}_j\check{\Delta}_{ij}$$ where $\check{X}_i=X_i/\pi_i^*$, $\Delta_{ij}=\pi^*_{ij}=\pi_i^*\pi_j^*$, and $\check{\Delta}_{ij}=\Delta_{ij}/\pi^*_{ij}=(1-\pi^*_{i}\pi^*_j/\pi^*_{ij})$ In the absence of raking we could speed up computation using a recursive relationship for constructing $\check{\Delta}$ from the weighted covariances $\check{\Delta}_1, \check{\Delta}_{2|1},$ and so on at each phase, subscripted down to the subsample remaining at phase $K$. This also has the advantage of simplicity. However, we can't do this precomputation with raking, and it has the disadvantage of not giving components of variance at each phase, which we like having. We do use the recursive combination for constructing $\check{\Delta}_{k|k-1}$ in *multistage* designs within a single phase. ### Per-phase variances We need to use the a summation over phases. We consider an estimated total as a telescoping sum over phases $$\hat T_X-T_X= \left(\hat T_{X,1}-T_X\right)+ \left(\hat T_{X,2}-\hat T_{X,1}\right)+\cdots+\left(\hat T_{X}-\hat T_{X,K-1}\right)$$ where each term is the error incurred by one phase of sampling. That is $$\hat T_{X,1}-T_X=\sum_i \frac{R_{i,1}}{\pi^*_{i,1}}x_i- \sum_i x_i$$ $$\hat T_{X,2}-\hat T_{X,1}=\sum_i \frac{R_{i,2}}{\pi^*_{i,2}}x_i- \sum_i \frac{R_{i,1}}{\pi^*_{i,1}}x_i$$ and in general $$\hat T_{X,k}-\hat T_{X,k-1}=\sum_i \frac{R_{i,k}}{\pi^*_{i,k}}x_i- \sum_i \frac{R_{i,k-1}}{\pi^*_{i,k-1}}x_i$$ These are all uncorrelated, because each depends on sampling only at one phase. They aren't independent, because the available data for sampling at phase $k$ depends on all previous phases, but they do form a martingale difference sequence. I will write $\check{x}_{i,k}$ for $x_i/\pi^*_{i,k}$, the weighted observation at phase $k$, so that we have $$\hat T_{X,k}-\hat T_{X,k-1}=\sum_i R_{i,k}\check{x}_{i,k}- \sum_i R_{i,k-1}\check{x}_{i,k-1}$$ The variance of this sum is thus the sum of variances $$\mathrm{var}\left[\hat T_X\right]= \mathrm{var}\left[\hat T_{X,1}-T_X\right]+ \mathrm{var}\left[\hat T_{X,2}-\hat T_{X,1}\right]+\cdots+\mathrm{var}\left[\hat T_{X}-\hat T_{X,K-1}\right]$$ and each variance is (conditional on the sampling so far) of the usual Horvitz-Thompson form $$\mathrm{var}\left[\hat T_{X,k}-\hat T_{X,k-1}\right]=\sum_{i,j}R_{i,k-1}R_{j,k-1}\mathrm{cov}\left[R_{i,k|k-1},R_{j,k|k-1}\right]\check{x}_{i,k}\check{x}_{j,k}$$ which could be estimated at phase $k$ by $$\widehat{\mathrm{var}}_k\left[\hat T_{X,k}-\hat T_{X,k-1}\right]=\sum_{i,j}\frac{R_{i,k}R_{j,k}}{\pi_{ij,k|k-1}}\mathrm{cov}\left[R_{i,k|k-1},R_{j,k|k-1}\right]\check{x}_{i,k}\check{x}_{j,k}=\sum_{i,j}R_{i,k}R_{j,k}\check{\Delta}_{ij,k|k-1}\check{x}_{i,k}\check{x}_{j,k} $$ That's still not enough, because we don't necessarily have $x$ until phase $K$, so we need to weight down to phase $K$ $$\widehat{\mathrm{var}}_K\left[\hat T_{X,k}-\hat T_{X,k-1}\right]=\sum_{i,j}R_{i,k}R_{j,k}\frac{R_{i,K}R_{j,K}}{\pi^*_{ij,K}/\pi^*_{ij,k}}\check{\Delta}_{ij,k|k-1}\check{x}_{i,k}\check{x}_{j,k}=\sum_{i,j}\frac{R_{i,K}R_{j,K}}{\pi^\dagger_{ij,k}}\check{\Delta}_{ij,k|k-1}\check{x}_{i,k}\check{x}_{j,k}$$ ### Raking Raking of phase $k$ to phase $k-1$ involves estimating raking adjustments $g_{i,k|k-1}$ that satisfy calibration constraints on variables $A_i$ available at phase $k-1$. $$\sum_i R_{i,k}g_{i,k|k-1}\frac{1}{\pi_{i,k}^*}A_i=\sum_i R_{i,k-1}\frac{1}{\pi^*_{i,k-1}}A_i$$ Let $\Pi_A$ and $\Pi_\bar A$ be the projections on to and orthogonal to the space spanned by $A$ given weights $1/\pi_{k-1}^*$ and let $\hat x_i=\Pi_Ax_i$ and $e_i=\Pi_\bar Ax_i$. The calibrated total estimate is $$\hat T_X=\sum_i\frac{R_ig_{i,k|k-1}}{\pi^*_i}x_i=\sum_iR_ig_{i,k|k-1}\check{x}_i=\sum_iR_ig_{i,k|k-1}\check{e}_{i,k}+\sum_i R_{i,k}g_{i,k|k-1}\check{\hat x}_{i,k}$$ Applying the calibration constraints to the second term we have $$\sum_iR_ig_{i,k|k-1}\check{e}_{i,k}+\sum_i R_{i,k}g_{i,k|k-1}\check{\hat x}_{i,k}=\sum_iR_ig_{i,k|k-1}\check{e}_{i,k}+\sum_i R_{i,k-1}\check{\hat x}_{i,k-1}$$ and since $\hat x_{i,k-1}$ is not random (to first order) conditional on phase $k-1$ the estimated variance contribution for phase $k$ comes from just the first term and is $$\widehat{\textrm{var}}_{k|k-1}\left[\hat T_X\right]=\sum_{i,j}\frac{R_{i,K}R_{j,K}}{\pi^\dagger_{jk,K}}g_{i,k|k-1}g_{j,k|k-1}\check{e}_{i,k}\check{e}_{j,k}\check{\Delta}_{ij,k|k-1}$$ with the variances of the other phases being unaffected. survey/vignettes/survey.Rnw0000644000176200001440000000670611541475435015666 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/data/0000755000176200001440000000000014640361577012535 5ustar liggesuserssurvey/data/yrbs.rda0000644000176200001440000005360015147136401014175 0ustar liggesusers7zXZi"6!XWD])TW"nRʟ$6Ar\) Պ.s581[`MgbZD}xdO&xBڌ5=] M f+Loaa"Ikigi|'a^(F䷐|,>q6G<<",f:=Nv^MJYzיZ@N?ޜ|kɮ&n}6e zZt u;ɩ##A"Ѻa pc"8`M}痉/F5fHm[m;_^wBG3 Lf{#,v4.ŨˉxiqOûIҟ<JQ} R&8 aM #Aߐ\ 8FZՌRvN$ (H*حqT$%)hփF`?>P@.nK؛!}4̚[RB0a,y+?nk҂8/*AA&9j=1,V)~Njku8x5`FLAMrK3SO~8=L"z.1us`EVQi xB$B?o3YcQ; L,-O[l}SF˻daBz~sFS OvBoWfhbz\W <O)5b(7\,bE7bH`f=S4BOaM"}%$ze{2Tgb=b ?ЧA8Q{p.U s~co_ SܘI0;{Æw`K額-,2v /. +B *r"/J__R\# 2Hr=r~x-}f.& '}(Y$P#e>Od*(dYS;c8Kz>.x2:)H&4 ԏ~vyK7rQSeM>%]F20CD'5Qҩ1x]~ & (e[|N8XF:|g>;GJ*~2XS"4]J9|,Q|NF艴!a_ÚRr&_[2žVkuKՄd"Tܐiu:6}Y0U|;lHtMoӮ I4j85$-#ꊡ4__VC?D\Y7t#rub&{]^7M TrS͗eTŒ48T;bFe G-9Kamxc[h $Pl>߲o|$X(G=N$Ҍ$W怓B$63B"vL\&# N+kbKL:S]NA&=~wl;?^ y .8O!e$Ჳt/?֬ޕyV_9ITN\׊)Hݜ"(m֊̸@1$kM U$9[4>zX@ߨS,te9+deB#ըYad3O3 ϭOZ?֛ͩP*JWm.(TvLw9Zc>,TɇdK6~SV%h a1)/B &rf-6o wg|U 7p&6>ot/PڍBKn: w.wNh}6 oF(aձ~vNjO{ '& (2 !QvR:U |V:J-7J \ D{1;! ؤCt]\>o |ϓs_+^rb3 J1D3/0QD <|#B/Ĕ}HA6+R6  HbwR7nKPlh_; ţ{_cOo`M^:4RnX*u )aڋ?٬jb2c@=ZOCB?[ I )X@qhwY]d3#[&Q-rZi@# ?YJ]# !%wk?l!24_Tl~ߥ}]漃̡m*OMvy<:ēQhI ؾ/~tW%YVŒ9p#TnSaDr6~~^y"X ̼FF w6X 8cJv R-8!)S[#( ܙku{1DHH/!SrMrCNyԐ)p'i]ԠDʎIPM>¨>/b!\sqnQ|=|bs/HM/jQx-ǶkH~7iKF yꮹ9+1YR+˷0qS\@-h#y7VZ>PL͢2CwB#ڧYCp3|U"ofd5~n`.eP@S/j}Dơ:{ل쇤C:Ө l;6D :CPsllzAU"v( ?ѩ=CSEdd,1t /%j nh kl[b/WdGg>':m8Ba`Gi0N?"=[~TBt<`)uvʃ׬ͤ9w:7?5sL*+Buxn2 | ذWMy٣yE!T8_Ȁ:U^|_o:>SߊTWri5lBoem֔[. /z9tR]D@7T~?xL靑 1saLe.y-8JW\tKI'+<a7WƁu:.6`+C,O1:eJ?]DUjG%ܲ/XfC?A"-fRh] о}-'+8ujX?E)-7-,p)Ⱦ& w#z2U=84d9xĐL_zlк"y[3UϮIUK5&-ּt[ژ- iO,RäHLP^<'#8";+;vQ{mVxBѶ-%G8'.'n\5J5W_&uȔN5:M?᝹W{悟SΉcTGt .MAVCQlNW>LFDNIЁgBʍRӃ|JF lPqu$^} :kL y.pQtxC4`UVGґ*{$hm Oz.\D)#آu\^}ֳ_BMeNd5-/{[ p?g%PYMit蝍m4Ϡ2E%?z]¿jjL\/ޏd`3E .ViQ`M40v.8.UJpjhRZ%A樑p?p_Rh8ZU"`FJ:!qs:o8f$3`^5IwyKZc^?k9DL>kD" o2ެ"5#DنEk$>ųDtWFrOKοQ# xbm2S;X捯EezMr!oT.,i i %nvQaHpED^j5=ـ={h{X/%q7&pH <& ȪX#xiJb2d%]D^|jT *mMq`_aALNz![١U;}etcR8@\#. ņ!r$ԫoX0\krAt={rrJo.N4X* d7ġjn6y81~G3 `]׃@J'1ށ5rdjUP6Bsɨ7>~+ 'L1һ6u?tX2?+KNeC;+o3]#gа u?2qnAޡ^4Sӊɻ,=z/2_ 6Z:/k/0dw%_]L! 1=7X+)|臭oXhpoum_֔:2r&I2j /BOFQ[ᛂ 3 Va)mvui߰F}'0ݡ .81~YGj![T!CÚKdV{t)KX5\5tݢPA/>Uǁ',:aHʭD5T?>:pb ul&b:Iy"܊ U{xG]:`J!gK3 ?{@u*[HZi$V _`(Zw%r@6UV/R޵L~cگm?- _rْ?nr7UH\fVqYtwo"cC-#F<JI>9лF)H-&>?+PEp3k:#yLԗM#IBB3賛- WIWoD9 '."cz@p^L 3̃xNQI1??28_kkq܋ *!]5%&f7zU{5k"EB'z) XH‹eݠ-n7F޾Ss Y@Ƈ, ˃0:38 TBi` *|F6}YB8XJD=q-D\ з- XðaOB ['Y{Q65АFB|8Kڲv)ȿTدJ-5vKfW~t3o,#Yڡ|9?3ECABf+sWp~(́ae]+mFSt_kzznr8&4U<ʃNv <|eCMgJeݬ %%3}=BM\ sJ Ii WZ@2 }NˋWb(E 4B6'8aPa7 ˾o?NXҼsr[ǿuQT.@YbIz1E8$L S-b8&bzkFnl 7s=x3+M<%9Mދ;HJ cvz\LUO OEP64\HMР y$Z׶C,Q]Kt-Ƞ IdB7ZlwWC 9"nN 1V1Ip{h]yPMr_%$Y-_0~\dM.Ú0 h6џ~VRd*>_ J{e?p X^oGyw)T Bp\XORHWފ=;'wiaҪdqUujʸK66/g$p¥+L2# FdY<&쨦=.*_ PPݘ M'ΨzWѶl`x3鼍@._=-={%gEJUb˽.xFMMNdEhNlw=wNZTȜ:8Tj/ghȃbPT4bAOhjP77x?Wh Ajv{cMS@$A-h$ӻ<# O_0hUFED鼦 Cܘ Ca7H37"8Uj9:,Afw`ojb^]pd9S6̶l֋Э4YPF^H_8֣u;V0^[!v%c-xA<\K9_VJ*sO.4. `Y95=w8"MP$WP^RZVh$(ŏeztXc>8+ChE ;Aɏy Hf`wz$E0#S7"?հ oq%2ꣀscq#H2 J񖒓gB}6Bnvrx4?[IK&e:όVzΒd=c;Q$owjA1 xıU/v $~Q'psg&FR%+wL,P&KlV_g7cmhl9t2MK7kacR\.pTXQC\VN'YbBNKw1?/%;"[IȿA90vAK~eTW_ɕةeNNab\}g6<x-My# x +~$u:- H;El=6hy6-2!2K']_#TVܵfQ52 KkkVEAk:S[Bk; ުjaO΍ ߭ű9wt@Cvb$xe@l' M'|\o.]"y$*w$IĬf7jWJ;d#43S[.)̫[hk|Hʊ?yĄ+1BX|`^9v`e #hRό90jJnˤ:Z^ͯ(d,.YeHek1䋃nJ] !}ɦDgٜ4jRTe\y`O3Lѷt8Y&”x<J;t8bjc? גcMm? i#,¥g) ʜ !X5x/_EgR![N-}>>688QӜ5-G@ruKA!& Z*#UX={֌ӑJ)jm KD1+w05V'y56x~8ޯj`)02dxð7'!G)Rj8IHBRoلmw+yKt|UR_Bm[R!8g0Lw8aq/sN{9͏`@Xor""0S6W߼zDwKF?Ec۝C=E܅z[{tYgpv/Ȳמ)mu燒Yݘ^jfNf"iܟܺ*WU6IUqRE,\P ̔Ql UMa,HLٟbޓickl6)2$COLص@;w?Yb*yuf\pu-k +姥֊ӿkuuɝr`E *GVbFN(GwE̓jaW~+:>.+S}06PsEMqui#2q`c;^wEȊaEشѢyLY% ?aylriqۛ$kw Vvv\g+|Щ,}X~.j{@H=WYLN >aDzB%@f{( 8ו%%]zJ($=VV+l̼322ׇɪ$d8(gu=ܢ -_@U"^W,T ! |CjERP3q}Bm¤)a<)5)kGG"ܷR/Z)"z9#q r:.iΛF 0'X\g71͇5WÔUu_\t+oaǏ*y,^;Pcw]F}C]ЁqApJѫK'[{ io>mv$No^-M q٩nGj"F2M(pZ[ېЛ"d!i-S2SU!-z4\ 's#Av`=t0ԚQt太,5Uaۿ6dNY#Yc4+SsCߋzX[Қ &td8BѵJZzȀ/{ViVL1Vi!#ێfWG9Hut ޏGuxAe(/0* #dOa%Rbmtz&MCgNrRy)R*GLDNA9z[|ΔcRFQJHYlRRXtwv=Sei7/Cfƛ]_ξLM`~c4\4`%0K k]Umw=SBkh9lK ID_B :ɆD^{Hb6x LսO_vĶDWuzUjiLbbu=r̉z^(WF`:T'] kZ`]f"9:,yp2tx) hF Z\`1@USј| Q7H+jZB3i #N@`k;*|Dx>)Q wʛ\H0R=PNiQ:mm7<64|I]IA(Rlxj;~^f)$,mO/bq'J1NMc4.jFY%G7YipLmeʑ隇lSUy]:~ٟ+ `wW\5sT?KxEO&Ck#uBQ Cy͇&b-@ޑ^#EyHTV0k#DM*LN{nvQcWح{Bk@XܤD%FLTFwS ^m_琒"h2t:.lbcG7=7e|)ikLw)RDњ*oڹ:OIȷ*sEEtv:ivasKXQ͗2^?յ1, K/5;Ř7. {H2"Q1U 4݇XD^۴նh|M% bɢ+-WS6pdW>x?YSa;-$(JE+yσ$peE7/1;*)EQZ R: | &+$X18ӶEբ'8cpV3o04Aqzd~dHE`5;> _I:9BGuL׵N!ME䗚n%~Ǯz:BlPܣ1cH=8_l,fn#t}rޓ'\t +d;٫UI(U7S?fpy KEA)$+^9h*,/Bk׃z;\&O` $>v hP8T%+8-'-)Ҿ5,e@ s6 E =lWe\ h b-IЧ'Xuݙ)f,%&5aOϝ K7nY @&V OqeXn#UHf8Fp5s>ԩmSx"`bk@`` ¬*Yk h IUR/*ɸ)O&t&?`=kw05$1h0/ F8Fn PȻ {㼕-r}=K55\pjD6n{rS | ']Lel1 @#gyw"g~ܭ>kY4HEq\({EG^2y;GRvBT ,ܮdg ehP#Ԁsk\%Υ8D TzB:ǡF\L 2i5z|Va~UR'>/52!g sG27(E-78</dNe[.|@u- };lđ<؈ Jf͌6 XV$Q #m꧔%afgc>Is=WM}rf%Hgq˵>H3m׹ }|Q>KCShm"9ψ= Ml,EUc7 dUXH+_Q;g%B+r_"l5İ/oq⧮悬|2v#sؐjޒ~, v4Ok-sԔ1HKe~UZskO w%s|>C{o9٦jcf?Tp< g #NHEΧL 糪3@F1i2;ض(dAb{t9ۤ<0/֧'23F?NS`vN(&Y ؃$J2`U2cGٸZK:ZՍ266zPj2ض5{DLqY't]*<'ZP {B \:uZ6 Ӯj$NJA"0zx.*+cd{w $@݇aOͪN:)Yo!p[5G=$@OPMA*@VPxLzU[?i)]yr - a,YꡬvZS z-ShLf#q|ߌ'_`0>%}(Z`>BB鵰1oG-33&&NN)(Oe,7؆SˡxJܛĩ}LOj'skpq>A(VNt( 8Q LzLR44?f7mP_i0*jzF , HkIw9x# 탅U2rW*BSgdG"Un%e$HL?h ~Ҷ?{؃D5KRtקt-Z,#%:(6"{V1{pDe@MfxPgsba};S޸t~ET"d92׷}%p7"8rj pZQm`f~Ѡiu<]0S`{kyӑ5$juZ#b(: ܂ݙ ˗䵿CXV yt d}XrWULnbOEB3,! UJ͓҃gK0d]p+:!>1; 8H-4(6Wٕu4'QT]Uƒ0qJʻ/*eqpͦ\dۮͲ{߮'Z'J.A.,j?< >UKt&ݞQx$'0fȶi2 q{[P'3RÿٓeoDSM_D=y#ϻF2 ,|ϙ1y6ޫDV籇z cI>>hMPH1=ͅ?xDʦ!#-pf?3 p4r;ޝ}=mXx՝m؄Ei>{>Qd4򷀀89d].0 F]M3o#7I "+[| XCS ;ts(hnz3{ I/yIW[1ǯ4xFS'\%kybצi%BX[ 4G}b2~6$S‹+]}bhmb*BG,P2VAeDB=BǰxU" ΄%pB]x mǡd06Va+GLko1-+TSa %HwI*F !8dww&%=n &s$7Yv)[p>ޟq̜ulB$qƦkipܙc0j!1]t sFwME>u׮)-~4ݸ?W %Fbm{~+Yo ͣs8BđWf ytwVr˪ \2l|dԭT+s%7HQ]lퟏ>\̚់n}7x|E-m}"%4y'znF5ˆ'ʲO}.i]A#ڔF=Sۯ;"rjH8]=`t85RI֡kRd4GUJà+FWdZ O9"]V{xJv_53}jo 7OYA=wS#H{h~ S9/FM]-#\ '7MrI4_- A!3;˃=<;u_T6?OU9~*ŸREGLۑo˹1Dˌ`ki-)\2 ^E~w;S=EĻ[ņArH-zs<.eU vk~ 0_6mkN.篴hr\po+$=LGul*$E! @~_] aP63: 0ߺX1h17Q K@bi!tW2\Hj7q+d9= a:cj`@S9]lI6v"qUwKO%r?E1@ H{^݊"9s9}%jB}Uyc8[EFd e7z!,OrRkňQ4a^ңPsB!J򴳓9'Q13} :EEAD ~]6J*ȡO-q++]2ks T $f/>,%:/И hJ̜9?:%+-֐ID@2ݐ6ʓ {bmaO #9m OK!'*RWѸRs J!HV]odQVr<u&5P'm9E5mD d"E.SwY,nz.KuK,6m ƙlq 9~46U1n2M*5^#x4"ևI;Q(;;4 W谟/;W$; Avz7!8͞Z;ľ#Iw6:pdQ RU;K"Sqȩ;?9,x7J9d>@k\<ңo#gccӳ_[̠EQi 'M) &.leU"<+Tg\6;X8hӛP?B£@`1F׫c+FѐߖL~n'sw݉X=2( 4X%ͣL+'g;-WKS홞Q1^oe"2ll:gpg+-mPT;/ϙ#DVrTԏpy7ZJSpM&?Q9*l 1$]:9RR#&E=.U謞2tyQ+&(qE#UdCֳ_]֪!l K5Fo>Ё*,WXtF 6F[H9@CJÄ˼[Zulj+&ۨ5Z{/>(}^\ƶ8PkUJo΂0 T靷]ciK_ьiZr*T.gk%fی:8Swqۭ .NZ)1,9lL=<]g8U-4/WjHXKr =H8a\0;zT c)I/0R}oleR ଈ"B&4!4/Aۍӄo(cQe}$X24ǒ׫FΦ*lPp۱0Aÿt֖Yr I]U6}=Y;Ԃn.38EFI)4kj*\Y)G۽nJnhIw7xooc">.k ! )Ko m:\ 9u+:ƷA96lxgN5Ԛ>JN . <8Ϳ 5j}^E ΍jljNѱ\{F*JmGrsqftT/x6- gWM'_ި]n 8%e3IBɤ0rAfcZ PxiAj&oY1ds0%b$OhE߽,hKyR &EBlLVBl!F[s2"8j>樼tDF >OD*m5+a0/̌Nϲk0W5e 8QF]p$#ۗgvq&D1-_ :!8j !@з L4lAh8"ٕN[K2ʯTJ5ʥ:ɋ?ٹ/2$*D6@!d&] 8zy660;@ܭY n-^`5Z‡bF&ඈߤǏ/TB,ldXSp ,k9ߵ\ `soJL`ȋNCӝdQ^f𼥡O.{ED#KlIqh9 Rdgv^eU5bmDw'z*Y#eوllMcefU]\ў|S G#`ځwi6ef'tyv,?˝%^9<2HiJw&,mn3Q?b>E{Xp>&.9}#ecc[J_tHuOm̃mFnAczGÞ-P_Q/zF.'n]w.iz P:~r~FA b^ 3Zʣbk& C*ݝ Qأ7MϢ9+DAYs <{YSVinE#.{in(XNINTfQpk7:˩(j ~ᓾx[ ]NN-\ K<]{vGPXֺ]]$){9+PځcSP%yG*lQ k$㖡ř˼=a[5Ϭ³kzۡ&0 YZsurvey/data/fpc.rda0000644000176200001440000000055515147136400013766 0ustar liggesusers r0b```b`aeb`b2Y# 'fN+H@&10 D;0`́s@i(-<Tsi9"q7G*NNaKKKJK; JPqޙ3h)3gAJּb m6 {qIQbIf LMAq)VQ1eX~0c)%9I9P{`*M+.I-@S)hdU`d```hneh=-(7'zsY} D&QDbapk@1Vs8*/CN 41` c01` s"n/Jrn`!cV ,Msurvey/data/api.rda0000644000176200001440000070167415147136400014001 0ustar liggesusers7zXZi"6!X-])TW"nRʟ$6Ar\) Պ*w~%~]޻N,г^к75,aǍ30-h-ix{1\ʀ*ex Zd__,a"^dء,u Hi" 1 (%h MGU>hܶՊ*}Gv= bLw޾zMz),?pU}GTȲޘnDP+Ώ+zMkwL^}k"BM|*еacWm~\%[|y5B Jʩp u>$DSb(TlqT XNr/: L_T hR P)&T2E4sXBmOPÖ7:ػB 6 %ݘ-:~f7b+iϫS_r6%͖MhQ زws}RՋNBV"놠~w1v/*B׊{κ~Ew{4}sg >@dKHUu 5!#_}x,5G*f(;7|яe>vR1r8 +@>A4&]#ŋ'[]0H9zʣN `γ} .rV?ݡ.nOv; V G)# h;7glЕGDc9# GmF\jL[^il <$YTicl~ˠ3Nyj*S]*͠11/ogbx _'0fjX4Q\i5cLC־IT4)nCS%;?;NPO!MuNXAyi~-c@a`0O4Xs> 9O2G"7Tn4VW>EsBNh|9 |Mc:־Nw̯2z>9nP*-BDTf&"t$Ro{P h dF v {VsQ-V$|T~lxosAd)Tҷ@lHG 3(s6}y+ێ|h @u]ω9iQj :9d.8^T2=($3].MTVFxjUp ޮ`h} G3eU)WCHbizļ4 ȐM3T =wyr ?X"u`:5Tc(>H>[lu ,Y\.*!Tr7 hKriCbY10[W L 0M2<彤Jr632u7^2,A"o . kVZ^b/[d.} ҹ}f}[J,E8L5%aGMTS UsUb9\%iã^0"\xexkJZZ\rx2)rGUxf]ۉ6M`t/L$BusWxՍ߁[oO,aGd8V_ R%۔Gj%NCY;tp\ zw\`tFcc)Vy/PS1+/5<0AaD~|/(Wu鱑mX~-tA[б|MBb&Ҍ>mO^L%[ j;H9ШŰ@t9] 6Ig*8Fo;싇S7E"361̬R\:%\*K@񮗮* X^)_߻1%3F|RHf0*A^!j'\W,BWihCbR|-tO։C%4|ͭ$O"8iMTQvF wQZôIષMF\R'UHF'(1R7~pe[tޠ:#5Jd6~'=K}$*~eZ>1*^? Ѥ:%T?*|f Tk^h,u_>ǕaY߁p;iPjɪZp W ;tز pOe>iϼ25BV/{ 6!( ʑmzc)7ep2 Vņk))OV I=KoxH հC+U.RW|Ff4g uhJ xL_Xӊ-bek NYkQJh1aI.'#=DdE`t|XaL'.$FG|'xǸ(%IlÍE6< n|DeD1Y NDѬD8D/y?k~!1#Q&6'#*귵 |m!6e`BUOM};϶a+ívظ޸q.D36WB~f7 edTԊU'Yv<*`\1J0U\j.n,>Ieun˭Vŝ1;W'e,p|"ƚ\8l6=:-wWr~ #rN7ҤXA܏ 0FAG n$y$.v9M=b&O(Eߥ_z `T2S6+>SY]m~Q!r?1 ]\+~sO PGT&9]nirQ Li(c>BI/-# +5馉Xׁ9㼣iRM_|$5)]OwpY-xMxY/NxETQ ŇGpN6/9@=.6%85/y9:$"Ԁq\S˻MW5xNJ{D,`6^=2(<" ]}pK2jm?ycXCvkdžQZBMWm?[,x>mpF\ؼky*#3|4+7>!}oŮz8s(jn0.Uz?CD; fp-a\rԖzt¯{k〼=nj돲^Y 6U'f[yZWq4WDM?†qs;{lI N,azoUG?OSZ=>'.24E#$-6o{L'̴ A֣JNe8M匛nUQ%ChgǎY g_"/iU6ۿȌ5MMEpeRk0`Lp̉и)*Ơ Ylѥqɞ;> _jKH= (1XX̰%V 9_H$MAZij؃r蹶PdC>%& B5yop,xr(vnKR,j _De.Pzڔ^0j9p9Z#Uχj`=;.'q&"ϭ"8LR 0CG]KIol6]V7C估-.YG#2Gرy&O%ӌx,I]&| f)^dsd[Yc6+Uv_In^~4khemIA (7#2HJW\M)AڴJ҇tU&KqHaobE"^55TNVնD?M[2(uqZKg~ʶ<+&Fz.fYږ vҏ_ҿhT&Bi]*lyYfp1@HDs]y_8{l i8zJ !GmsI K^Zy^@k[i -7-@c:v1yKfA1Jp_DA86~uZP[F궒bG, Pi1vJ$^EÒӍi40,N,5:A#lѐL g^} _2O =ꢺ2ӈo!,FTuUf}R+$fM2Ҋ(xμAi&GM=LuSewTQS4u4U*l8Ws*Pr{, rB>m*kd/͓\4cm˖ة&7Sи׳f_*I'[.=rJ񚫰, j^}iQe`X$eA:7AHf-1ս'Oz;]_zt C/p_?y)O;zqB@``3j0H J%*vbkv &tBSxkۍ'AYҸmɍ',<Eq+ H - +޷wW~Wv'2t51dFa7e 1vٗ}ܥ)Wף3z *Tc$rtnlίtІ2m|*ӫ(/VS~ VkL1XXMHf)S`jAFF[6xNџa>!8lMm+lhT]jډ^c2<%aB@ f<AUέd.nWMpӪo60j 1PA=* ]s0cW؁LZN]RlhO5'plX5Q-I}fDY .4T' 7L3!XͻI^ٚD='>y~kS_y߉! ne@;gUGl:YfyOf%o'~mA'#PYNKF,NrKweMf&LgS8[nAtdA@u?\yCL6h I(Xɰte9Y_JJ#]RPۤ7("ކɲe9tR9P&6[?+8A(8]ԵPXVD{?25p dfD_#iZu+*ev$t]kPHl"~ t>i;ټ3ɉ^DfUAu~?[R7)zy?v ra%K1vsJ$ %:>﷽ꉻi%u OHPYg(zEP9ـcRy&Pߩ?7aWP.Z R=(F3] Un2yBQ.䞐)Zp F2b*[]CaCZ) G#i%213E"|"Qk{ڳӒ>o[]ٛGӂA*z6 !2֣$S$7K|:ZkL< RZ 18Zj3ox,CQ9EY[,`rAd7VYWL+kH7p#!Ԫ9F+w_Su^ئXn2]RLN /3Z{<3pΡ&? ln]#J{ oީG5!$7N-Q9^Z PעYʃWsn\ h1(hbq}uNCbp]KrU4]p,.4Bo=]\+o8~\c5>跴y*ҧsIMܪ^ Ktrd"g>fdkǚT& Ǿ HMBm{zDzYp`i!pjüJl)b<(V4NlW$G SE\5ϛ::ގMv_@}^w%C_qL)gڴ Y|trCE<PЋ-L5b#qp-^i'u JE߉DZ;t $9e]VIy[e `[n7ݔy@[ނ%.ԅxd. x lG$p] ró75VH)QZ5ௗPl<(H,x=,u߷x 5U'u@<.Ts6a qU@HbH[_GGX$U9 T-0Tx#6\e+:KpE.{urNSz&8 cKĻ+‡kX3qkޛFRr݇nN.9JN'/B &zg:oD&BV1?MT,-)փ J |1J!beђjs#]hMژ~`Gt7nhVu)i7t`3? XυU}B(d;+XqЬ8j GEA4ꔂӸ^ZT'H Pu/GahM6Οoz"e>Ǿqxw}ܶS؏P(ԁңKD7k-ȝZՄKYbt$y33Vi; y`ng7V :3V2`\z?kh*CqRLd+Jx9I8@A)qe A6h9t^bԳZ"f6 G bI2WF/0E0(9lXURC:)d1T.R?:{N(H(hb)aex,yǛv)󗱌@ӄi}g}JM2ns'-c"Pt)f2ȫxd͘HYXfW!lՊQf-4g!f-uxqRKRK۳\6B.}wjcB)fVMoObAdwm 6+ģV/d[דj%ntpa:T0U_I\ QH.jIa۶ÙBm@:U`ODk\3Vlc_}g>_4Ssp7_ָETQwZD-><=owSzabLqBȆZ&rmaZj;lXb @{{t}=X1P%lrЙ HɲX/Jk;x>y2y釾.&|5:,| vHYWb 5U;0EP91{휫bwr~}gܫ-1/='i!ɳ1V%kI2 goVZ\ :[Xse9zlZRսPgVlR6G2{12lrR_GP 9!i7i4T2(Uښ7sNUPڡBjzvI҂B*ɞ-!. &`pMD!$H' ZM˕Opmd;'h6V5JWk~5ƁJ.m9,MH&@|=XB Nj( E6j{N4{(!wavGeFqI]|ӢIHV]WGY|ݝ@,no~H4@{Zq 6]B@*64iR48*^nXΤMed9r`3~^> P V'L̴㎲8}17(K(a5Bk7GRiQ*Ć>|V'09L>=dDZ^b`SU rj:L3(+\I d7Tbw#aAo)RV-;ܶ!t 3ry#GݗȽ T2[_Y[ʹl@Si0R8BM$ƠHߒ)c V.M E] H&E4/ޛH :O$cBM+cA++}eA~16{ޒ?Es4FHkgsf4Wb)| NJgfr9i@@߂<`NA `A8]NEIMy`H$ڪu'l~ Z|iA_.-ُڍUMҸ2Esd*. HG am}xgvʧ,kIVX!x [#:~A@H ,RFPEcaCFvEK젉KQ\jPQ`7ޒo/G.f3_3x5Ոސ+}Ml>k}HgdnvN0+9'3g{@/0%EO\Jzb2d{kmkDD'l#"e^2:_L\t~uiIͩf,I;/l=|K 9A-#(F.\$v.Ypn8&h\yugoG\!Кldk.6,zS0my7Ľ 歪468(]]mԚNC7i gJOҺ Mvۛfrs{z"e)?tj;Sq+@o]h޳k1uuM- zi+nZ[![w)򦎞LϽ b\KvU>"ɣwANAyq3JMg1CԤah#UՂCXuPt{;ƥ~Zo֠hrtJ,0hRVdʽbnH9DaӭT]+Vg5>x qkU?Gܳ(OI~/J`;>WQS54*כ#l`X-J8@)8Ɍ1{H+JyF}&5*#t)dQxiC1Ws&Uݐ2iԨHu\L@T? b񸱻Z1xq5T}%n#8`iu4 +s .7EirY҇@*U4veR~o=&Tx y:^b9|`j^Q ݈wj8JF%D[YNlZvI@9JJV BhSKEn_j޶ϴ`=B,kW]wh\ץZA_:9+ SȊc_&G4Rl5gZU7͑=iPԢRMrQy<$-^*tWFDDI2eTmMZt$ yY~W3FҔyx=s EUQ9Еs$I9o:7j4%79%hκYF [AW1S G\ @>Ի0%l+ 8t2GڪNd욵ea!@ITxufZ{ }Yę3,xN1{7x7kqw&ߌ+'Z@lS4OϢ{d"qo9;uzN!cÆl|nKaD~P#K;uC?-h<J] E/ .lF-]TzH(X<}N?܈lTKg tfMU1 f/D,;4p.XqK4ߥ礝Z!4&==2*͜cK~XvBg]iH%vA "/I;mTߓ'Uȝ|{sR@|M\ ta~ O^R6䍚>e~T*I5Yo JguhK7fmxe-.g8.u uNNk.Ҋ7 #e`لpH:7OK" m-vLKC]m 0'f\tA$`勒`T>2UGZjF~"Rt%y=F m7)5 PW}oL-jCޤ$},^E&8wAU[o)Tga^BBqa3Bޏ>a|b|gYd:zˮ4Jǝw'n0HOi~jűQcq+!pz6h R]qV]+]MT}ۗBo.>YKq<[wHU +[7GO`{Ky1h;gZ77~Hx3}6k?$[p˯=gMt U+:Y|#dQmL~M r%K8wј`ّ٠Wn*'7ն4x/]q-gi|{f顱Oj78G!( usnҪL' 5D&ٰxrg}Jm* %)kC%~VKB; *^}_rPGaC[)K ;XKE627P|tdȻjz(trg.>"KxL7ddƻG1].;utHK<Ct3tA?1e!T㽃/`=)$RKېv_"̟C^36jE#3U$efԔ[-`*Kj̥AaM26*h[nxI5jMMst*Zm"NRM[Z9\UsRsOo"XkH.we\-By{A&M`ϭ=RLoRީ("9rVfdlUy5H ^V#Q̒%fB8>A z.P9y\FJ+KHȿ3\OD ]Yɇ'O%a7XV~&6z(Ωz׽Nca˿>4ifңz[Sot E ~L{^л@Le*шG2-9b `+;aƍFL&K;'7.U`,2(MLt"kNF/Z/ySb%pJ=9gfj"oan<&< EIhte zuo0lM eFV_aSL_= D}7H$%3q%YyP/3dT0AƇ(jl ٜ:&ǜ9=@ïyIobA1u1Ãʨz7@L0T.kA f gG;,|'a?ei5j +58{o4dʹj Nz1<BP(\b'@AN ؅j 9 -3H@O/pgE0hņΰÏ~ZBP6qA(JݯҾӹ>j-ޝK}L c{/T5> w<$A ڳ/6l/jSK'!_ѵz9q7Ϣ9WRc3f\$19{vIoW52Ӷ k~셤~ڬ]z]GGe5] w$ǯ5؂Q%XRvmX<۠_l^Baj3g' n<:9mfk &|ƟaNEYN}3zP{jAmGSr/vζE!_NTa)#\'#''Aߖ7Bcae )(8}" J ~`hetaaovE[~%Wy58;H@!vEPJ4Z@dN&9B_>z:SaDK=ރ=dsAsPY\]PѓIRc^*V0;A/׊L%l=J aSGZ"HYKWB+N݃o8ck('0z &"0~~ b!K`-.+S,YJk^[6ժ+*mf>BAg,O=yHsFgZG&7܇B [@#/V^X5׈ƒVwExv&:Qs!yfvAAMQ. 8hQS4$PХ_in_h-.d{T1:[x^XL@f^3~A j?N+b${w֮Zӏ-/H֞*}S;2Px^9(jڝIR x{MB9y;~3Ec^ܱnGfV:uVԤ 2ݯIo3 (uZ)!6L߳t4ʇSOuSUj j)4,K Ԣ 焢oƆ$\ĠJ\l v[";>Cq`"~;Eyvv'e݊4W*MѶO.`|W##L{ලt-pzS4E5".oSam+z (x+` }ZvWa,Kc-P*#ԗ|_TXR4gklf$eRt@69JdMp-2%P.AmFX22tvG#%Qxo`ګ+6tŪK>SIb&$cƌM^yha MG/~-<<([("lcsaYtl$?6q.Z?z>kҫC<=/K[eIf9Ǖ[x  W%<ͦN ~j+ʹ> 6ϓ?ρ 9ڀ~kbJ-IՠfSoľѓI:$'ĸ6%xKFbZ@I-g[_[ciI/*1+]2g&v{l84Vz&-ze iU<Öd{+(m#]^\gb#iw*/"&PM1JBT9|*X1ZAmث7>hZ~ qb@O!AQ=h(_+ o-ɦdQޒ+~zh_c O$fFmcj@&~/J*S坩~hf0<ÈT/ߊ;q(1ԡX&+7Cll?%c6uL0E) dd<Ƈu*g CPG@9w?"\o#?PKB! EۊOzi4`<:M@>3Hb%}5,pbd@tMzBK}J>E)+B}t&1P4{A?8RexK'|Pz Vc3烋xI3`%#9.MQE0gS0_4o`X,O0.5S]g45= x2kxq-߸bD8i A, qOhSm [V>)~);Ybv 7Ed2JB)"bW㴖3>ꉱ*h9tPI)9'G:tc@kԴ .n5[ͨĜq9}6R}/$?)C۾=DB5Ip/,o=T [/$#&V1;`+aP6?g1`ؒ-7j'{Kؒ@& Oz5YWǬMDS2iy&5I,|$YO#703ͼTJjqJ h+f4njt~!̑5) nHiT'p {賍w@.jLC%<f`I] sA+*W]3,hŝ;ғ}5֋/)Sa7/vtle6L]$';0CnRRh8 + LG*& ߺ\>{lU8t&E `$э͂U !]fҪM8Rf:VO .TFofe'$2>A ˹&޼‘~֋ŵ]oza&Gŕ1Kj_ .Zl93Ʉ A;qǬjP3U [>/ǯllY aT=)V0ŷ5)ԙT.p.;!L۵wQ'@{W?+I`{b^T;q_W6X5W4V6DmP][eW:b]Nl4賌uH*?۟ $0tH&?ǽ<.W^*RϴXa{%;t'jzb_ t vO\$B)] 4Aј~X+} 'uSPسBٜ5O݉8bRE0Nfs>oGX\yZFe^x9D2#D a]V$.H˳r޻> hKO;P۰MavĮy9x|YGh}3AIWKr9e dq{׷g~ГT @sN>%h^xMvM'*鎵7NnZr3W=UTEODR?O 9 Dޟ`,VKtǠГďB`]2+81H9$@1{/wg˂ybTW:.#UrGLQb%pyq@7eY)m'^8޻xkY Xtpg@Lg/;{kzc)E##=ajnDfD0k!Ԉfr/|P^PP1::anŒP:W0 v*Y"׿p Ee_<F`ސ5!A3 4RaPƢ+&N򴚘M@']1to')iG~FNh *v/iX]T]$C_K%028 EY*$mmN)xlRFLܗ y)Wm'`rQ E%Xp!h# zur1򖺿Q}jdGj}ܭRsP)o99a 6ݐ{50~xd_iV0]w_I9t62q gƲKcioRA@Buo@8dkS/):D􁐎IFS)"fF✃aҼ\q:[n<(ЈI 0'+@ɌIƶj+LGSibVydf8^"K)'@}lvWgXi]QÜi!cr]k[ucgw y^}N쵺ve/K+&qc_ yD@[37^k=۝`8_A%EJv04b?(HLNJ5nזU3 T#$ˎN ̗ϫk@dL68 et sZIAkoFlIlD {jq:/n|݃՟#k}i{,,|-*&~K7y{M<^$Wc9ɢZk"GQ=;h<ū0-XH0G'D,y(9 WS-!(ʔ|),X[O?EAFӇBBwG݄nj#F((= S f[02"aEǍmåPtrڒB* hN3 :{G?؅ۦlP+ani0 K.nS0niЯij @to 6[u&j lr`#N Z}}[I;(Pwng;үn۔#kv6E~ꇿ> -@EkCz  trb+ߍ2i&F?m;ݹJ;qݑSEh7O?0"ATtوO4 Es)*G .#*؀.idnb\S T\xh:_Z fsovj21rn& οb<P_V:$y`W.ULI<^$?/^p+EhaT ie cŨGxU8%+_=Ѣ 'NN",Vz Ϟl W-N2gq.>6IpzW%Z"SNT1S {K(^$M{l[{{꽀[=~ArWّ^BLd-29R(ky9P?A^2kCn\_ii媦95Eܠ,j(Au~}:.\3N~ ,10$cx^3S*aؙ'͢D$׀qYzAXL?lcovAPbYy?9t͟ ONvjT2ޕ~w)s=O  (v/ʤ4veǖ} `3RRS.hk@ـ%,tn!B5-Sf搴ɾ0>A0wpܝXeyg',AʏA;,VQ7+ !$K%v/QA|ODӍV`)L A1!oXV ?MP0 {ĒRZĿy GeM8QoNU.icS)y jΜq%ߴh[@Zsj??B^dHŷ8dD _T;Cj ZLs\B"qz0 "B }qp.Xe4xIac,͕ubr5Jb[>%,9`Z؂pnpz5sІb%)dTc`4 y'1})Vm UVpUՁDhs K! wLF[h>UPO e+Oѳҧ qu Vg\ f-p-i&oױ(Cn4qCBʏJ6pVFz8pVxI\R (XEe!Ir허:c3(aUY`\ Zo{-f/;xJ+:OeռpC4ggz ?;4G;=ma zhd3#OV4&ah%64.Éy,؅! I;YMc-^wftrゖC]-%5G3 uhuј`v-5U6p}&FC1d V&ޙ9S` | Xƕ^v`~6ʻ{ғ:_%UĔl7nSU$ E.5hX&}QF˾YoQlLu AWR n!*cJ.i %`Fu%"_VޯXmW0 QݠHoF圛b&h/oD p4qwO\E~5K' .顉`OMpx8g TL,"O[˒̚v%!\$1ݧ$k$:eNzWxA=27!7ԍ77[^]OHֳZSn5)ɻc FmyZ+zb;˺te*v}%}UFTHWTmAZ :! {jcnb!ȟY0sZeVGF%+rJ#p &Tk)2b):Wo 1,Jx' vBX/=00LSq>XnqEx(o J T*מ/׆Z*}MbE<J6rr;d<% !*W,c{G62ژk̚{|~ 6ћ3fibcj<гy1C]('p!rh wt7 O!TX>/H-!i]R YFOdc*gO^[0MXp<ꙪHl'u'_k G{ku;?"R\A֤XzAY!(A-ĸʝT-~_ekrf 5_y T5QBc: #PSIrDl7.w{I9?ֽuZ>ah+tvB3N*2t29q;iB.[Ql2 #v Rπu2Ѳ$[~72ua>Et78p?gRG삟2Bc >$p6K2kg`T?gkme3z,q&(1'{g9ڮiiJ!32P F)˺ݚ8l&.s9Bn:?NnWְ'qjwP1#B(8c?Dpu{/`N~2@(҄e+=nZϗ($YM6i@Otӂ[ShdP Jnv[|r#kڇi<448INmqwd,Iˏ@$( =̫lfp 7 G2H4j?e-~Vȼ,|XRmAmMjm,~hj`R*Lp6,ysB^n1=-tL= "?!h7{!Als{e" {ʳ8 tA&tsW)nyJ_AU pIĦ؄k=g|D܄WNLH5Mk3"rb),Z!NM-UD R^)v-g#RhtXqFۦDmǟkXvI'=Ѥi^7sg_Cpԓ/'ܗ8K-> #xX m͠cZ>˱0ssq7ˡ0Dş-ϊViꍟ5MO W߳3~>Y^<%a 1.<+3:0BXes]9{Y$xX67 5],#JHE2}=T9>ĴK,n 'S[1IeK,T*9˄ОL!ͱy,iJ5v =S֛A΄=2d1-qG!^q=HaY 9XzySGH<Thb" B:d-ni=ˬh}=ck.c'Plt)UƵ o 1d4C k` `HJ;s{s#j?'<1/Rq~Qy[āVv~IqZPH?49V[0ePqA=|{@yy#7?$Bˤz#ZDݩ/!Z%o(Cdjߨun2j/p$Y (!©ā _8A٬g[  _QK9.Bq~'Js_R'GI T-TYVZ|yP6JmЀ7*W_>e3|Zq Нr3v"X<+T@H?k 9n]r2]rl WhT^ZS՜ p?b E!jrի5cZ2q>!k0#fmV.4"cCbc80%%)Wz>ڟ8xNbɹ&`x=B)?I]dN, __חV9*9%[ _/X};~R mJH\[v=j5-Jv*g3;Q>Cs6{a^{# |aY$|BjJ"+& +5ŠDep"I|8K+$FM՝<`> Jm^ZIj.I ymT)'xP2JEd.)63z_68`j߶sSH=H@Sjl)zSg(Yvvϧq/o`mKp˜royfCϗD*B%Q!4`cb;!sX=o؝csfv'YGrpzӟ9+vJs]B>;]>ěEGoީ̜YҶŒIgn7"RѲ N^Z}n!cruO#D|vG}D1dKen|=` #/X%gR9lGi_  C5\_B5˲QaN? C'IGDe%Hl/ ^qZ`x^a߈}Bă ( 12pn[# 3Лqbd%,B&\] Ț8_c\;`azȌ_Jv_2ńW>|P$ "X}Y9e,.NQ/enZ4+KVc(ʍ$ tFI%aH~*FƜ"^Ɖz|cu=(SA&m\iß4q  CM"C3DwQ_aGcŷZ*Z EKJ6S{sz2@)1Gqk=8Ut+=qt W$6b (1FO1 \  Y%=27e #v(HjauкDSԅ7 ?kmS <,nEU>nqWIO03{%&D*4Yk1+UIsB'=*J6F+/dڊvyizz/o9}GইWWsG2h(SEkLwJxלg.k擥[ qI,yVȋWME7(*2S' X{rx9Fya*P/"k.po~{ Tl*RdշC;h A@rM|aF ۻWОrAζ4l)ێH k)7G\uҋ2`[)yá9I.Wr^ynj[L#+@$ x"P$ Z_xUZb\М P=a]Z 7o4dvC\4 ^ziT *Y@VK GGqJFKV<EyRk.-#{{ yT-eq-!T.XXOno.];qK>|;XAӛm EŊcjA16Y{*/ٸ;v|Jj`N k-X-ץ J[M,6'vӾ{a<y/DB |L[yIɔC: vl^bT-V%򿶷8pykQ`l351b_ B/),oмiڜ=n&FI/f'"6թi|^4d-ˣ2+ :i#Τfgk3+sN0k3*M,J$`a * *5s&GK_mNߒ`4W-oD(XfMhؽlfm7cp9WT=H!+cX7 9@n$ABCW5܇];#30N I#{Cj|me7o_̎X7JG몟QkM6ȺnX99qiشΛ@l.,3 WEй B$){,#p4Bx2N=Io3&=֨q|;4U24!|ܼαaM@$\ |1kB{Qﵚ 8`ឈE7OHnJ'[2'H%z k˻ JoTXvw̍Y>W!F84$TeXUJ2%.G%)- #65q sd!TWw3z=-9qIj2^^cqe$hhJU4Kԝ1{ibyA;x];/vHOSZ:n6a6.K׉xv;PQq)dpR1l. 8`|߇;D ' 7)KHKyrzEtEwiJ>^-(p 4zbXF D+[{&?0o,~[ o굯Pr5vj ǣ,M!w"Gx=hDS,>ҭQQخ>( uGԪ'ə ZT/l֑YTh\wcQ,[ fr pԹ{J*6]?~p' lRhepNQ=N=PP/x#s2het(KƛwZ"'L%L6 q-n)\&x0[%uAL<>Z-bBbD"Lh l2u--"b#Bk/JsnBdRA\ʂ\7%{ 1"S@Aq)i q8¹ Lǡ/ޓ:\dP/ĺ4odjiTlۭİS0w ⣇wozLAfflpw@Z/ ڥG9|kIðKw^i'KDB HgH: z~# N D̤ k71([ bj+?K-!nST%2Ȝ +/x]P5lc4GK?t` WXe3 -07A 8l1MucT5J2 L}/GmD~#]ko96h԰-v*~jٰF mb(L,-!M#L8>K#-Tbzѩvɬuɏ|qW$2Pu}/)1?t. KēIW4n% }YϏh:^de^o(J==1IK΋vK`[<@1aYT ˔ /=@yCApo [MDְ i!zvXe7|㻷[hQ88QV\6͖'-qL>T:#9*V\JT c~ژ2}xA}k;o<3ŢG"E;*3sDs{mgxfNXCv"g!l"'JԺK lC7:م@LZ.uxFfU ( Q$ОlWF98Wc%l!ST!T`1Q%<QOX_qs6I0(, Xa{ d5Z<'wnPӻ[W`I[C0k"dؕ#xwܮ'֠ʼn`Y"\#:qG 9U*qǬ,29ٴbI}C)Ѥ٬1&^lZ/]俶, rҦuh~H .~d0#ٕ|n{|XJ4F$ Kf XNZ02#2Jx)GmǸ9K.Ot4:1 ]Fi Pܡ*l,QL dMއ] a`]T&r)yn?yM Qٚ@*NMභu}(Cs?l1Og:F/kKqc(7cd4[zY6}&$HfM\ocdlvbtly,c soDJ ='ayORBg!?*5j?t$&Wg+'L)(s{}\GbbEW/ԁ\9r5a)ڦ[[o>?ž5v˱Zv-3>˺"̹87F$P=nF-_YKay9=b0eKWWO@s9hu1mS86;7wabW>|͌-nt: E1ij#r$?: ( )⸏}dzW-}7%PY]i*:ACh3U,NVb߃<.tXMΖ~rh#dϑSlORv\OEQ$Lm͌ R|B~`hZ+a]R "Qo E%vd ۗ 㮴𷸷gdE\QБ0Q+y!3f<ēgBm͜4&-:d6'yI_؁`e>4šl7h1T$0)L @FS§hDz(AF~W9#BSfUkZg/6!#p[5}5#eḈz. / 8k^dWQ/2{9pr/WmH#ёŨtx45FV˫߾swO?طC7>~R#0i70'T|[Խ=N5xߩ?7C<5Sݤz(]05z3eXF]TyvJu@jk6bV?fg2Zx]E’r㸱O d1A GU'SHF2 ЮMf} :Xx鸋TGw9)1Q%ӪeE]cy?CiQznƾcd}ސ>_uH_@D͠O]ΞFiY|Kҍs&4  3t^uty!qԾ `bČGoSÖQYjQ΅mD£9A밖co\-!ItnʩJĔ!/Nhc H?ʸV!^̭f+Ynl$@%+6CGu`@Dt HȬt]P<8 P=CZ,rc429{w Og9| 1Uf\nN&%n:Vp_9Rĉa)̕ti̸K mQD \^P3MdDžK8"7(s j:-  2tA*0Xit)nTOPD1'22-}zzQF5빕aц]{$ |x#`6\};@]:!xK*"9߫guN1Jbc݈ cr;Qd\Ċ\ MᰴC]ve$?Ґ۲KV+G˰5[۱gxW:"qp9j>*Ƚx^-4(.̉ޱ4]7 l,$(u.b0ijsگ!H݈,Ն=,PE;myȌ kI$\85,yzyIC[ NȊCAs?*'PTЫ ԋ(vg.wW0AYHy 3l}"LcR)v^ =wI+G/=bî$acOߝ~qrn{jD>E`릶q=+;ayQo*aZwtVQ0<ã|+OƧyx!wXQ3c.d4M$ctJ;Qcp_V권]j2voS)#M KL)׫@t`Ԃ]=b=-#iˏU $\!n\d*W,) [4 g ,2yl(r\LR@72W* Uem{I/< YSv|PI㺞ILC#4'ct*\4A͑g;k$i&e@kMo.VdyKdB2ufljlBVC^`-YFȔK5;!hٚ6kF> ȚqF5ljխ~l{s!h~B郀;I$:V*FVX'F'L ꧜ _9mR<]i@n}eQ YƭW9q/c68M 8^ӷn > +N T{K4|@ٷ+7]$*V-}{#D GR#h<>Cz?dAt2NøȧmNy*u_?Z~v E}2;XX^lg,GBMTVⴒ7/TP!i>Q-8RA^S[ ѯ85bdy5ƟZb2$Moe8AO?G<~]dz]OWMVdb7GT!uD6&K5I!CVi -y׹_C_,ZRm LverTbˋF^¯r #;\%'TqV-U@ ,hR4ӓV0IVg?7^-K5@q&Q$%?:u GW4嗖9DaSbo̺.E kΝGK򗪰5Lm'e$ MѮfr!fg?#.Tu P0KDݼ0^KDӤe OƊFg!SQz^4v6DŇznO^ TLVsxNxxp(Orȼ*1g.MhN Fz;/k4a&$1upǎ-CWiR3/-[ R}*-{!~+/_B$ݟ/,C`md>6$j\7_r'7M. 3eMP|   Lv]3Ŝ`=9z4ӶV0fQ2 adXT,W|hmzO3((azd*vt{bCyH:i{3Hw_YA?-4]IGŲ/@K*/(\,G6Hs},?(83tkP b?vQI`Gm2%Z{!}YW~8B75aGFZFXΌRГ^m%\*a +ac<Б]%\T~'R#Lzo} ›&}\\Lg=WԀDJ_^dDA :'Ɗc"WlNcrLVYUL}* 4 h6oFJYo'{'sE%j % ]gv HۢuҾte@3@]@]2R`>_lB5 8oE/dPy6=83],}p!S|d%Ls^͊1*jj7(MgJ1~55\uF Mc"9KDB_L~3xs4ߦoW?Il9'R6Pdz ^/ԩ=$ciW{SitTs &ڄ5px^B1%]T{q>&OOwC\P($gNkvf9̽_2B,.sn82Cv] dB$$| uvPكO`o?}b;Cު Ӧ/Y[/s?>PŖȣ<ץQc1y)cQt]Ӥ,~~5agʌڋPohZ }j"Z@CRu"YMDbb"iy`F"4ˑ5mc7@\dXFI ]W$0 !A y<0iaf:BUԭ<{y1*wEȼ6L-ߺǹi*Q?y/%7fZ@Pk, 'RY{4?WQ Kkm.ytbY(z[1 CB xn V?Ҁ5/Qqv e fp%&ˣ朰aLfߞl9`eLkvuk}OYh؟8C6z?nYu{=i087fGf8 G yu;)&Iz*N~M').ݚZ`ΆnU*2H1Ah+)ux2M-x10(ԅ/M!\k\Oՙdw鈐c6#(98`bjOZI,$:y%+>nѧ %YŃIN xC^7 Q^͝$$GCܞr^ oqCd!yFjB Zw#vh.se `o`A)./_;" D}(0R2 o$i5LՆL,[0G|C'$K*\X -㼓U,7v ͩ, /_+(ǖ@i\!U#Yܸ]?oQ !e_:tjm,u它? )j+v~Sg:! |] O&^@d:e?ބACvw[ȝG 7B jݲl:Rx~JzU4 aj)oߠ0X_#:\({=x oIoW\Eۦ= x:KVLe.Pvc?vV'Jpuc0!gO\k*DFb|/D}Z讎ouתR AF'E_2gu.9c@V%%bHdC6vťT|N薖>׆2( SE-8B uVi{s!. ?Gn"GC=)&Q;EososB{P/Vau8ϗHǢ6:‘D.qt[19Plvvz mYlOTai,% Q͜4$NgLo oS`C|-KP+$m@.#~ax~KyӏbvoY{M6醊כ,PTISajfCThdq|l-'FlqMC#1ZV #db]=z]#+Ɇ.9A / r U`Oŕ&p=R ,ӊɛLƥVyscI |16'vtr-:xyO=՟y1 %;Q*55ύ5&{;HeMAR*!I-mZWUOZSi pē"ZaÌBDqkkӉc}Btd7 cyYH12}v G!EMj2gLeA ./-Ǿ} ᷏RQ9+ūAz [Tc7IUr=B$Љ>r:,ߢy"dڨ8.Iv]Q:_kc+hMXŎIتвzF Yt_xWiMIx}X)n3շOEҐ  Ĭ| -J0Xd):YbQbfoP8TظTH%q\܃S"J́t?,"NM|:as"׼1 s| =NB{yeq 4e˾#atQVM^ d=PsRgȴ̛y;ֺ#$?/FNlt-`D]D|t:kFYP/s$|WȫBkKaEDž|:B!s:Z4Gݯ SHm[$VfuNAPc݂],Y Vg(T+;\ɨPmKL4#g/[AoiiU} \80J6D`tGv*[7*n!Y&0tGn ;!3'>%0B6PL^d"!M$H`))Yo+FliRz-w> cٜ7}'@(j@{*j|sMt?*I^2W V~?ϰIlmhb~-!]3\urYχj#t"nRӴh5]1wfjc[';sC$tdǜunjx ?#+l҃ "f}+WvY ^ -FSn)H Z$_"C ᜩ7}C; :5!s L]c=cl`jcgH2ﭮ2 ˓I$<,DʯL%Q’OKꔇaݶ k sqHiJ'dPǎ+<-P ZKіN8 A2+qg.A[6zoc:Agf JvǒW߾^ WbH>&H=@e2s9Z ԣ#f)vAȎW8(/͑fn07}"a.iB}LɳOuEWb9s 6x><ۀ8e*4^ YrAav?N`)7G3.[D1`uY5?S< PJ0di.Ɩ*bYS^UlTÞDZ|R KvM&GU\:+h:W)P0^+ډ|(RΚH޶,%떝b QЗK`t ŷ&e E8NjhJ7 m^L*`2Xޒ Z5w> r瘐}vLdkK"W;9d @\2lQW] cA,`7bSFSSboxRbjeCCm왍4Vtrz-b ᝿mOo3.{:~8nRh~"i.``9 יnѓ嘖a!w{'YuoKP]s⮓weH>}n -]9ͪ$X$?t?"j"|Gz|!9noO+$jbnd0bI3ɊFSĩ7uJdXF0S K:x!rּOtk-+QDja_q8~. NYgX4SJiIS_È4yinI2\TrWBzղ ;;7x4 Ns^RHJ1/_U;sExvZ*¨=/GQ(ʘBxXK릭+j( \ìtruc|U+e]IJh3tToVT ~碿JJӷ E"SO|+fݽ@Dd;cw&(bn}5y:A1Kf% y׫Bmjd 17c] ?ɸ2oi{|M*3ŊـwCױ&uI/љMȍüXV|& }6R葘 {893Yg qی4ܐpV6eYL93Ty3 t+B|vK'QXp=biɹ yzZw-)U /W\#`Jius3u0bď*)lQ0!I?ҮxU q v`>Z3 Gn3'aSBtzQJjXIZqÍpWV]2 'zÐ,]^ IV}8K:X]NV+O%HA_w@~7x*v7s);%զH؃I t6A*^ݮ ÚyQ*.3KrCKHbj, 5A)4K _.LYjQroA !h4w^9ԢEBhPMc9w΂DvB 7 ֭\0v֛LG+':7~5Y#+ڬtךa{ w$yhK7AKؖug}+ӊxI-6l nR\|'_8'rW<h̝uN!thKr$G W͑pevڪ4-S(D8FȿyViR!V (h`a(oHh!`Tʜ*Kt- bs݋1JvqtXE eյ@ʣ4g>y^3 ?j2tHN[;q?j+wϐ#wf ~Se}%PR^Can9tbw݀wC$ Rhӓ3U׾:v סT64RGrd(w2>}_&j%ˊyo퉤$wPnSPOwꖕ74duymOAl5X=B0l 0G+ڹݒ"F~{5qNSl >83.Nr;* ?eg = 'wf3N< *1}UJ0 `*zRZ6XbtDmRf-kH4L(Y!v߈k>m=a2֊z%8B5Ϋ?M?/| 똖0rj(;WSrf!б^Q.C6} L];=,!Odxϒ Q$)V6D|ҾRKOn 9$z~ ֎>k Pl FoЙ<I#q yxC"] c[[FexCT-T\h GId $^D]˦Rm2@/s7 wyNq?)YEnnAߴm=DWn7/$+^ ډo5͌]~A3ʬZ4Ώ&fsP5IDdl* ߀E$07sXel=ԀyckSt59zbuz4(f&%FCZ$hCeEO;o0>Vo9ւkl|Ju&^Ok10B-CvH|̵xm:)1bdU4U<$ W:"2!ZvJo|@{@;-7:4bdlKUʜu+xpF聆#9Riѯ$N}j(kl׀t95*zfbv!i:VE,(8+R; Gr[}`v熓-nJ3u>vmAS!/yEζ<@ dnYIPq*smE7 AO]ca=,FͶ 4lǧ\?4P!HY N[apZ6+cDYHa$~ I0L핰ZqU$Ħ`8ߢjnc"zTZĦwo ,N-~I~jjQ sީ3^LXlmn*],D';#>P/:ݞyƈ%%3OP,jZMh3]7ޞF"eCt<3/r)/'2J+"3̥]ȨOtwcI!oJ:h)BUc?8)02ā4Z`c9Hdd&Z㿠D): Y%I/7/Զq8ƉދˌzmӚ&-ǛXj3E]e|\[TmM |b\ttUm;J ëbI&Q""HfVo |S;VMkS(3d"5C #/+6 {.q\0WW9nb!!x!N*˴ӧQ?bau`w\:mcÛUu ; ċ&'P[{کy?Κ=0IwRjJݗX,?e))<8D}#2lF#Y@|٫ IU5iOY0k'~] 9NIP7pSu_%Sh0shB9j,vB [a).9xqW­ez4ȟsFbbЁzwb/9߀yWYZ<|}*_d~8E?j͛Ȝ xC7HO-2CN.GI{ UY!vҧ6dj:KiT7:Pmy^E7bY=|]|RXPڦL/FP KR}UTz/暽_^nR1XLK9K+YEBx :dtlqhk(Omr%o `>kqFO|=iͤu&~@"]LҬx1/Lq_O|Vg9,\DEχBҢsr\N:t]U'Ѐ"_qhYo~k> 1OhQzZO= g(&Ss(V ſ.#5g89uY>ͮA5w~뱄Hv}re>SGC9 _eѼsNxWJ9wl4>,!%2uN+eھ4+Z^'+ƨ6~nR$c bL3z8z8[T#|V6sd_.`G T i5uGx0tqGh{ճ#j|V1fR80_L,r5-δ+ ?'x.9F'q9+JS|+AܢR#{v}B!, ClSS*}+%{+5? GQ/|ЍA͉i}/`āNY4sP,f|F (`M.J,糃3/uVB_uFbaUT^M[0 '۰t"T񣣜<k/ڻ8,2v61gf-JYYUX4{Q=k {A*18/ 󻘙vRd2T O81')urKH8X۫e6Ѽo0Ahv Аl_lz yjQ tw8~Ì GiKCW4 ( =4h+J3ˣK$_~D*)Rhw/d*Ygu^{Ԇ@=mpˋ2hZuY~F oS͠@ ,.djMlMu*,n5'agXĸO*ZVs@h&c=^~p&)`TDY{B>뉂 wL(߽(zD$]#hղG̱ {3Q~o Jw$@X_nIH-J'^}yDHKIFA;1 ̐Oryw#Q\F)j ƚ\or2T}e\aVr*0I1e<<9 ]ӥ  ƅBc3L-Ίs?RLL]"O- ]Fzp#X nvGL] hg` f8M:ʄ.`/!QU&%,z_۝vH_?{Gzyraxr}'`iU&=kc%! d,7f;f{ȻFWNTM~,Wc5 [EiU{yܠtkwy%:T$Xla`($I]{;>)VxV'FL9U4EBNJTxjɁ- 2_Ht/BR$=ؤnl~R,BZ]EV9}6~єwKT LuT!LgӾtPh5ޕ,CR*n_ڱ^ŦkRNh'SvmhME+m ~b,g!ʼ@Hp݂d ^VHbENRZFr~ skۻkn֨zi̴8}L Q>;D*"+ssP+.>V;yj㚢'Cb.WS JPx4^1$8Ƹ|$63a:/FK[oJ qӦa 1 _tQ|´KrwdY*^xٻ*K"8d^M cb-s"Vb!]K9]\^њѻN9U)ﳅxUv$6E4& X?NA=|xFڣk6c γ8>G' pi,K\K U"]j{y3hŭXzҧ}yBp{9=,12w]'ӢlnK/(x6@KpaQZPO!cƳwu!ُsj[aIbv_v #m 'Dy4 [/p,&a9n/l#( xpR.KIATύ6]!k4p]8͚#5cќ%^nJc߷ \ygkFDLԾ``OSkʌ "rՖUG7V @!5Sn$ڇi\չf]DR^"KAxѠ'̀y{oR[Fv'|m̖3} Ve8K6>e?~*;d*vL {eW1e<{o0. vk:3»DtT!z[~c}^)2@TDWS#ٞAdGȲ`=ثhU^K)TdSU-! Y)Ee&2#c$#Jl9LI#ɫ,9A`x>[UjCIJ=C{3 P~܈S(?U%(wZؗѿtsŪ_v%RZ,V[oi29 ԯlh%4{Q <'/fAc71HΔ-Z҆RpriA-o6Hhlyd@uzIg _ -n2?GGޣIՂG:)r]3<΃k9.#XzE~O4@y0L8foDX/ 3_.<9cvo]b'Q W6{$NY>NY\[ٺtKyX?‰e>EUP#ng Zk'|,-dIRؓɇqQiE uJ&k@H/v43T:0Rڢ]7fuMBaP楉e7^v)j~J߳+mVl#TY5#= GO=:pqJ6Q\j|9SE V#aJ^b:5_P].=…yLIZ~4j좒Լ˄Enq8>au$\czX0Y?5ajAtBqwTYG,Qc;DҜ.Ba⌐HYͽ|2d>]L@ϜFUD:pz/ 1ZYBv#u)kUqūԚN=ggknYqDЎ~6Zkm| ~Iq=;\X,EKݦ N#<+z[1ʚl7CFI}%6qqߧ{yIanIn.Q=Y3]p&D? |=B~Ui9XhFUT?RzRڧ L>ȔaT&g42񒆄`8Qpjj]{'V;xV}I,>ڳoW6E)e.pe߹"`\ 箑+|d֩ȩȏNI"zNYs!g>ǯsK+'u9lc̡FmZ-n$:y/o򱆖´QB rS*j Il H7db;`ZVz|b {EvR7OAkW{-j!鷮Jo'DlO"8pl+UA@Y77XG=8*1Xb%WX 3WJ|\"`ݟS՟5⏌nkz5SUp(p+Nt@/mӖf};f:\^o8B0==T֖ZISx_ɕ ,#T! r^K#)C@c#aFP4k6^ ƬHM#>IwUpA˵QƮ cYO_WIkQb+-s@ %ͩ~b}U4R>5OyT󯷝:Hc<(1pP黕T҉|\8m7A[f@ py0mr*qהB W|6p4N]SjXSHӤjy诓/.Zo~Gîe91^O#4 E<Ǐ3q:n0ߪmy`,J%ǻk:O0 N*(c,mz%pfpCۙiQD^n-ҏl{?~ٵ3&Ȁj0j( OKL:@tf[ Ja1TqāZ]nį!yi'Z[Tչ ]Y0%O w25y1-$E:Cef\¹E܄A}s99vWMI 2u u{7GڴZ`WSmP1v>4)[,^Ko+>CRҋefXkl|˹"uDY7jO O:(oDzL1Mn摭+pM!U|qE¬+gp12@P~ӨL'a/F7xDiuPkfυwnF5ejӇ Zf8%nތ#4 /b gfTyi f( ~3zuŔm` 6UV2i?Y?xr`^#F;6'܍VŞDPJ '0ˆWX"fjgQ}-I` =X;[6u +ot4ejetyG.`ul0qnBm {X(ƴnU|rHbZa{~c1a<unUYf*E+Wnq = dRLTAwҬ2!o^ ->Q N;~4t /ﶈ-%sZ`|"ѷZ|u{LS"_9V%s]\u6sB b:fe5$?:ǝrN89,Mb.XčUC U蝚s~EH Z"%0ޯSKqbʓC\.۵!E^ MXzߒ nEjFwERq`a׀+R>L0M$|iJL eX`_EzMSط 9O~2 ꪒфJԽ w ޯKȔ>[+ ^@dSyXDbX2+ VYLiTKx%5UZL>3ḳOF2pٶ'^vupɣ+nR6"WIČ㮰>!U|RTC?5>\ `m2+MO<#j`e\2lU֘ю‚*gnc "wRB+%@u'ٱ95~@\PyFcG\)lU0V|&~`D$=SB4_+k$WIVĖG=>E qaٟ&2i:ۼ9! 9*TAswOZK~/m7V03L%ٺ?uE" )~e 2a\ӦM\)A9LM@PfkĺuGdQNW5+ۂbv&nˡp+q_}UV^%؏hsw?x~Ґ닃:6AnO ,@ d:5Ӄ[Q:[A>JQy#> w`QS]@_&72W.ShIJDV5jV}Ѿ~(2#T[% _alói s\ <,o]b^(PrN䚺K3@5hGSp*k9 ӳ\ŋIg Oi < J_RP|6IsMVjbxMLBm٣6=m/;O/"nP%*.84J̸)\z\DFT8hl_(ѩQPZKJ<9BޜMlzB E gĪ#RԴ7fJdXk~ 'kᨈjLd5ɠ,|9컡j_1Z xƋ0LA^0hjeownAkhq:[P|WIXeLrp_ϩwɫul^Qm-e$ܕHy '2LMCJHl$ۅ5cEbC#U>w6hWs-\.3(2=#:V!eAËaX"کj"X2-ϐ`&9jYC"aAR`;\l3f%dyP'r TAZFohD]k/w/9-g==(7[r NbPu33X*nG\K~bHKJ7aHm a OysQ~>cXw?`,pB ,XB'iv}0ES/s!V<(},WKTaCdžPI-vpDd:hEDž|xYleaA% r K|nE? ?UҐ|~!`l٭IK4ԘΛ@}\`yA ?`kQ3wעї zQ01)*\l )ke_M#g >>ȻS oಶM- `*㒛m*)!% ;{8pd|FLϐ(P n"gɳPZϽr~ [ @2|#mgTA'gҋ`_Jj6Sv ꞅ[ܕ5쾠i::a6cV q',*dB甂'޸݈R2b2,XvUvz]LlP,sÚHDZ!ed,YSaǘ*Rf? *6+y`AGu(H^A# ̪lF4ngN}}⓽svKC~ʥ:OWW=W XXe F~ BTyBXo1k\IB<~'YE_8NPJVOrG m–E7ӗ0\ǩk{A[Cy<%rxQ^5^Q"&Cr.ʧI-dW;ɘPs)ڒS򬻫JxO8Qt9`l h=YƏ)WlbAz .HlZbզ1ﺑRX+eU$Ճ 닜-†*?@zʮ#G9tSߙY-RwvI9@ݛ8\{Wq:ä΋CҾf . VRzVS'ѾΥs "?IaW LгCG&bRK}UK)q7ފ^h6"VKN>.=̭c(- L9IG N&DBe|ovh[^"kkJc\jjBҙ*ՊVp;Re -ۗޒnW%)kZrj5}{[x5;Q88aPƣmѨN)Uat!zdL!WsGwj:^ӣ;=mBej:ZfE4"SrfӬ;RꐦlRTuѭcmZL0yj,xuf m"YuX񈐠D&*;2 H/Ee㺮B/Vg 2Hoa p2{0,h}˗]|i?ts~# WB̈hh1S/U(km1Kj%^(9G1ĔHſ0tPeGP5roWLcaGu!rW4 YXD4V3N]+c6/a>3r$b"b_2 kq+t&tQe7| gJy@n 9aoVlj27tYė!H9rm} CQkoWPAeֻۜ;&bJʕKǜߖA+FHrB͗HA'qL <^E9*) V 싑_\K!lFͨ>q&_TG<~rצ78+W{  =Z(0Ҙ R3.Zjfxk+OBAȌ?' fi*R/^6<_@CщVJ%PEܺv#C W5S|zLaK>]sA5^dMu@c2ҭƴԙ"#} -X-(C FFq| k0qJfKy:m :喨t:Y8*pbk'qՁ% XԡR_Qr ̝x͖򐵠.۫;4a/x}E@`$;#9nەFuud O8)~ 2c@F -d8Xa~tVo`1!R5HA` EN,SeP;jjY>T[᧩w_Jf2o64 *1mK~5FRqOl-a-c@ե㿊V@HTj`:::{9F~g}Urʥ`ql!H[Q+dh+؍̡%odT0-86, LcYdyoDԊ iY4WB=ލ+b8#zEBGY6bzI?Ey.ye,3i+#_ )@=oGWlNE ah& q ~:`ZrJ%>72ү /6F$-<,A rj܉q ωA( ƈ7 %ardLV 1RvQ B8ja; Sق^H7z3 Bza -h&@y?us'GǃE~v>NQ4Z%ւ.lR  +{ѕ[XFB(Ȱ.tx7ԠH(QRQZ3Pv` $*9!_|ׁiPwa{ ơ5ros=O}/J6t$R)!Z/hEGe ԙ#'X>D +;]A^k}waK<|;OčJV [mhNqp("Dp0=a݌Gˏ;6TQE z%ۼKF"ߞەY 1MtǬq<.[T*mL-)2r%p#&9s0El>co劮ծ,R u)iW縼v1o:{%YC|p{͖ y+E []N&PUap;؂sX"xGy^唺^u`s Ne6\旮^&tUEM};+^ɣㄕzIpF 2%;0`G0*d*A!^YDRyzT ]*,HEF#~^cRg5ߋ/P\)_ SrLKE b=QUW0.45&*7)$  t:whбR1],$(8[/H 6ٞD)lݶeΛKGכ-~12Cr_,[M, C阭G4ΘWOw!x=]Zu*VI{svQ@}8n ?(MF#Arsunjs׺iJ!y!Y4bkQ273WK7b$jۖdC Z=F4R[h@ʵQ۫]@p4m,7n8b^9?V-7K,/ݖ",8G0XH07!]ۋB/M8!R-7~#[uk`-w5;zh#2M˲c E+4j3jPD]߶(sa}VՅbSkNrxTvņ(n[5lI9#0Q0-$]1oDOna-8S~ ZW]~=YNOe$Ot.|6{,`tR*b LJ7"JѬZ5E7Zm۲"/BmF]HAێCtbK-Ѣ {7vah"fI/F6U?Rr=VxH 0?=_RLzɋv^"7'N}ij@GYVNQrπG:4bqg RBm>JW0kB ~{joB{8Ub7b$jNwcfJiY@1xUnyƮ _{ UcG&`Un(wt?*x֥}rj߅x~6BhU(/Qբ}:wЪϢ]e@]їF6XW 4Z+#41R?.D mZ3eAtPf)1h0wmeI0] \ōw\9uZ-^0+~?dZ|X[n?@i 9J;m#M2{ǰ|sN⬸5$ T'I._(. xMb*PN LB)$wKGgLy";4_9stme A~"'_ʚY,֦u13S2NWWcdw+4J tm)v )g^YȆ8Mwv60b- ڝ&TxK n;/"VO@"t:}w DA4 ۋݥE?JxTAԎy}{v$^(]5 tQiD|-q.ѿV1(>K޳ࡴx:f&]@]fp]+u5]:E_Tm&҇ "|=EPȇ5&Jz5ӈnך&X*k@Ʒ_Pd:kѧ}ڴ|X%M\߮mw0ԥݝ JNN{q⏐e/zSNjG%XT.mOp"ez [u35%_hD~l7dRߢD WbѲg+;dB%1D 9I#ܠa-!U9Qu .xUR8J Fyr2M.fIwnBKc_%̘K ڲ'i< &*,ǢUz'8orp@PVL5m_3 21ر lLP9hY&0Y0mP3S{rI雡v|i7)?ك^u+{P?Ѐ?Z33 :ӟ9vH18?|ڛШ/W33I19hrPHi'ˊB):VQ1DGWԉE_O/fMj򿖳N| e^}ޓ,]jOkuSII5M!N&V?Љ.$RS/.KB PRf UcT04%_g z|88p}ja SuKVR8#WKp/[r|yCGII)u&qF"@/*~M;}3 H6"ȹp ៎(8}ʎ'*ۺbt5I4`6GE,MGV&ifgAA g bZm[adjnHpܡB4dwqF`Jk_ඥ:"22A1=vi#~PWSHPS}0|6Q! f\2b<{>k ~=0HLQjY%{? Xh6)L } G5-xh`)ˊ幑1Z~e 1t`*iRsz:f1-mCr*!yiPg#r&BЧٸO޹=ٸ;NM ZefמkxY̿҄cچK|&iv~H/W/1ٜB 7,$=5⎚q][߰խ%~VUoxWʋγJBC"'[uGyϏZ]r7%-="Ş[«% VmoZ 3MPRY<e#l-߈'@Kvpk Ro[Hܴ&~u%46!{vcS֌x)[g Qd@sDH7dΩmQnS!af+&c$AoS+#C\8voho հHnNj<3.Wha"eqQF/Hz;@%EQz*(c;Q-AQ׽ <PjpUfSIݴR>k.COc' J=+!^yڬ:I?d:x ]7 蔰׉G,QltXInbVh5{߰*xXLX(+^ƒ`2p ؝VT^F<6k{%$U?2ss_<fucIH.dfˬi.axH!#~Gj@!gPR,kuTg_y[qwhS%An8_P|!x#lbo(b$*/.**]K6 { 7%|Jgҍl+~(_rWІ$`?AT:9h0M$8iZSn_TauggxX#6]؍OȺ͚ҩ|1ݼYHh+A_>M]r M,;S,̾]O򆢮؆h3 붟ex.yt Z,f$%xs8<+voDH/^?bj8~q*y& zkH |%R-&~CiҶ}v~4.Ё `}$I=C 5nP-Y\1#%F{݃** PЂOPbO,,ȵb.A-g"ؒgh]rܝ)e'^%9lwf(˙oD-g&ᴙ7[?֢K?#(<"}NNxmu8+>&Rr5,˩>CaCcTpExR㰁5؋AlP3#Б/n{Oz_?廲# W8E^ܩL.Xyj2+m8䵋$}ﱔ!듔tnF~ZLIy7c_!=,K3ťzW2~s(6|3٘߶X#3/Po hRR>r) Qx)!3:NANjN(Sԃ&T2ѷoPL/&/;I`j5|o+5.e?-W^[0q!.z,w jm AE uZ@<|w%g~ӀS4g#LJ>*甞cd9,lK{"BV]w,w#*Wd$C 9HOmZ۰/s;l%eVX~= 09s#S?=#F] 4tZ{;z!`IJz&G6Sbǿj\=8m1r^s}Ia8ڷ37jf>- &-/y3^NFEgEiz쓡:!֋_7LͿ )&䅂BLy>tv7@ P;GO^N˗hRZۖƗxRb?D&.M@CkbxXf)jtv,ܵekhĩJ' #!^_,pzNYתKQa÷bU%0MӅ;z ?eJ/DL@od8]1з5 q(i͆ 7@-(`CKOo,BI#N; bq-]"jƸCD -d#ot&=w+YHEEX no0B죐+*lA^}dP]vݝI1T͌$qҡ9ʮ L/dg"Z xX5jً `ydc^68ŰD~'*jAW-Zz)%P=I }CUI* s dH>(XN8ųF~K=#O4R(!(%HIJB4ީ5r! 8` FJE=nvrs,KfQdק̎3* Hq"aLG4cZZvS.0݁$Bm P_b,q»B#Tf};Hxt)r7b<6Fo5Jr[᥷t'Vsv=o0Yg5 NdcKxVB=J҅N@AqQFoń5 ]N yf00|}[&m8?'rCSFޡaOIo2㓢 ̽TcΑodsY;dv3KO]G❡S p$Yf^tha)]S0TV/HS} \v h}hѻ}3:fP#KswLȀ&꾎Oש9_ D Yr,?lTr +50T x 3*+rU=up)iSOWşU:uh"<=s&:I9%?J[SIOOL ؜|/oPᲸ(Ho7jćm؟=3Νm9` K.TM䠒S|-?ݮOѾ2x18vɗv1OWLX,#qG) |?2u*;)8b9H1wݛG[Ϙgkn'Bjmegw-u`({o:{=g}y33N+A.Ojjxcb:kunb 6QrYj %UO/uJWΔنt=LL<9C !&+%B\Is_?P)/1ࡐ/3#ЀrcF"@rȉk'tp1#%.ϐ~eӹ-oz%2oVwVp n& [Y&%Դ.o]R-?8@>%t_cH3KN3bKLDQ탥F`Z]wnSrs+ԧ٧vA=ߚjdUrEj^nݨwC,HhmFoE$8B EI@1>*xe'HaF6jV`Ԡd2YK18@r9ܲΖwncOKCst#FӃ(aԆ_f: }.SMlK|.-YK kx^ϔɿxhE^u5B9RY*yԄڬ,dFT-h:Qj㥛1KEh[ ^ GFG'U)6'%dB;:M}. 8@e-~ƃMuaZ'j*oS?OKcF-kd %Vn6 ln2 , sKaGom%z6Xϧ>]-mz✛\:I#ږ$0qsE XOpCkGZI~:@g9Dc&6Z*.` j[r(9*bTzøCG%1Y3w=n5D\P}Y#Iv(, ÌrM,"ɕ41e' DD_z FDGBcʗ wWDHE/W$pAHߋT[f)f؎.i/ pв!8 c  Yt0}B|}k^&:du} K ƯxFgc?%_Sox kk'@]ۚLe*i .Dvȫ7_6w'ZW"~[Tم=VG M}J*xah EkX!bn-ֲLY;eKUXYp=csτMzHߏ+[?hܱ7P_?Y*7.BR!`@x%_XY/ڊ~~ZiN*c*,B=a7(GL!*6jkLt8"@F`y#搉;YmP] lG#"oiR*RW~N#G:뉜iRvZ#@nP~Z[|~́iCF6 j,Exn a5[w oD4 7c8ݢ5!ȿ@D5>FOQaӞNj I43 ?cm?5a-Xc%<-;-ڨ]z c"\<~]gL s7v eeFԂ f*M36Wo KhI&gkRƀզյI.=6A_IK((( (K5R%krZSJQlC ^ū] 7]W}Օ:" Npju dO 8HNhIws6N^U_(MC 6"3-@؀6ˑyu)N OS3ƍߍӹh\KNȒ EϱTNJw 9iJK\xk\꒫Ԝ_CXobPM^Wlff;U`@(Y,=<h嗀e;j6=Kbbe,>*R^p#TlLGKp2c &IҊm"8l4!Tɧպ(35y]$j.tqwemqk^s.UUߨyRw-̇ӔZqk>n28dFhfCh;-6liSQ[6N DŽ´DUo32X rwi|y$S&hd)[„+3sKC4f2Cd/.Gyde^ gB!PJ9OwQSI4ԼPv{}]( J?>Ƨ@_VQY(pnۤ_!N10[u 1xd0't'DsdgAGS̴1 ??ϓ}[;zP&!{}~+껂:O!tl`2Zm 8z 軬<3j-ו͜2+?c7,l6`4uY'%LyH#? {\̳4ZT-$DžƮ\ :ވxkG< ͻ`CK^Wx 43q_-FD)nOH㡑O,ݛ` .̚<V g+8taLI/btۃPvΡS~zv*@e-~܎kC'@H5 31ޥ\G(M BfNY 7gw;щbj<[X;?qr?aRHl5ȓ 7fj*+_t*6%E;D.b|QH+&FN-$q/`ߤV81'L;2jojKSTY-eZdv[…s^I@{kŻff#kA;P>o8Z4G'[ G Gц*4Wgkg@Pfp$FUs0VKـ>Y5Y;gK(*Q/f  φ _uSDCl A@8M%4}}c%ڲOCy\,n>okqv.~8ɥe(o)ی,+,8FҥkL8/ &)6"0 2$9YCpRDWʎ^2(Pؔk>mDJAE+ZM[FG_qsOәJ'U|oz]=E,}j2qRdQ ::zBdY~AW)'Cx FTx) ˂ЅśY ,QG8%J Z앶^Y1gS/S3Y 68/)Aa^n8![%hXk?U%t&M*/5#/_twIv/:X6O NyC!9_(<ÖO#k X6`Bڔ<u l0hm*2BCBi"Y|Y%MѦ>ԮP>y=~T9CחWYQ10آ0) @I;c6yMAKY?YGn-_1p=ٍan`(2:̮SR`1KYw/kŶsJ5> zXJo0p\n]GOh&Y4ġqjEjY@^tH^Яv0 Vm\nЫ>:Ca0MԿEA2OcUy;s1u:uZ>. k(h Dk K^s+4zwu$ U5_&Ga2mUdl9Js7n?G*jퟰ>V^ݥy:e` 2_e8N(ڍ6\Cm&U">jkOIkxOlïA;vMfgDh7]bĵ}5\5h_i+AoUV,lnY}RD4SƄnٵaSS! "Ot=G/(}J@çjCBn }ow p>c{UD39L"BXf9/|Ko2. * lN2HbvX %p;]f23$}@(SaЋPbCD;C7`C)6vldZ 0=DKS>3y\tv `s*bJ7=HQNsA͈鱜:j(mce/䚗iEm݂_u2YH5h0G})ҿ~(zЕñ/G ILw5r(j/Gg\ǖ*o}򚙎 ݹ"5WxzK@] g/״9\fCHHq6Ȓ>įk%"qp?LU$,1p7/K{R_]5ҹYo&½OTLud ek{˷%yw Q}#41kьpΎU*Л" Fa{X0EfB* \o_>zE_ Bu1i:930%yS f1%"@nH~y6x=ĤN^Vd2}}y }#!YǽpWb{8 H(7o٭

 G{OP̕#32́8PFk5<'alKjx77GENĸB.G +ǗzUԬK~.BPLd)߰r>ί$gb.&~ìz}82_BzIm< śs4T̈ƵJ^\ڧCXN(6W~m9W,{=aKwIȣc̖ "&ns0y]+-\™y;ɗƹy*RzE l߿*:.͵8a5x( '.vxj|1wUsN-+okf>2ʼnӠFOܻMW_s9HGPzQ3ɀN2 >弄c5(pai\#HudO J HB?#Z>/\ɓU6Zb`;9YE6 8ft1;%~<$,nZֵnnjqy\faIA.y՛F247m3]5ֹԗJ7@'D $7QG] h,O2=/NuYJZ{LVv\u>C\w;!+_"Uxi}VtZ :SNlB JD8 T_6!UGC]q,͠ٮVu)<p|@_>gGt^FzǕvtXr0~VH8>h+=XkpC)E)7>BR҆8Q )H!.yQ/:lU/*D l-14+߮R o Palu]$T5ԥ )I&"9KldGkj䐻Ix oNj|asrTCs>]ɂyNCEGYXNb Z?L*( % o0PU_`<DN]c>GTm h`NP!iJ%j2(C ό$@HhW'Ȯc-LD,QԮfc1~^= ~ p9gCyn7m讬6IiZ;;s7ǩ8Ti.N |&I$&G #+.ǔtR>.e+eO~OD.Cw[2B17g}E^e']Z?7c94yH~ۇrr@yN2,̀lN j^7] %Tx*Tzn̊MqibV~U>@KX66dԜW \GCv 8.\ݲYv1fցoy+q6d.<'DFҲAߋTsIUe*ڊ"\Oj jsJ=CfĀcmWMH,!Põ\sJ2/&S8ܿsB#Psа"aఞ 8V팜0GW۶yt6 cf;z_F@>hg 2 #;R& \c 95; <LUiT /MxkK$cFYhEn[W3=VzvYcM$B oqsU,p|*lD"?Qa` InE,Aa-WD/.4jzGع`固8D.) 'Xr2ব}al=%˹ǣ0%Tɀ w6aJ@]\ju6:c8qߙ,UxCJJhI_˶x@WK(dդH8 8:* NP\ڈQ)?,~I>6kGWҽ$znߤ ;['PϤ$&~JmL&{uXR3B."}O/s\a8W[[۩T.ot'fv:{s <:Ur?&ߴEh~*BVv B~+ֿ#1$z&=b! =it{3'm#\:ɷLWny "!dF*E*s6YO#tQML@ H1N<0˝[FPEH.zA6)>rUjʃuxNz'7|Y~TfҸ2:Lp蹭WˍѬ-~yNF0ua⩏MQi:rvl6gLway~߆4o:Y@gDKj4,!f7oE gLiSqzTO( L@2{ݣYA˾]&{$p muԾwv* {ݷWF o讀։i {n靶(y[r KĖ}}Hu%?FVV:Auh-qrFp*̓\]x`)a:o#QuF2 Ɔ})$s'VCf8mCgrhV!4ts|I-#m2M)3 !-weo5%% [g㎗gGc W*(Qoy,k=>S[Q>5MG (OaYu< Zy" Ja7,+@R+V \^)ٸRa1Z{)F v0sh)s{| /vk^XNP~?qD @= NRWU)?ڞ#VyAi9938Fr4*U! 6?d8_v;mV6QcrJvU8 y\*HCԐX!lDc\s /pb`1оZP ]H@sIbƜ6@Q20fv0Q:# #Gտ0ŧ w;Lq2Tv NoۢcZ0qθr/x CDBqj:Q8Rk,Z=xёB#~]tԼ)bn \ xx2T+# Ԩ+'V1>UwUt-gՀ$y!L*Qϔ[ iݵ'd&GEݾkv͎&}ָ|A"w2Ar@8-HEucuyG!2υ-\ȋ npBr@mha'*~9i$`y'yTC>c^/ZO(p>$+$d kCdupI s; @ C<^&2]' MP-6wǓf}+z{B#um‡p)%3%䷴%B3rJ?^u#.<|W@oR-?7ZM>3bu_yp;Om6gfzR܃?I7G5aV$\cI S g쿒 F,9 a"4[v92dlq?lħ#e cӥ! &dǍgkNo<½,Qwv5Zaۭ)@T(|H *LɅ.K4/rl h=6ar%14GtBIAY8Ik J+K/^,Ɍ9D@U+韝7.]6.Gzle Lo*lVzԍd Eh}UҾ ZJ7S1+NcJrX;4wn6 ~(NypߘÌJEKt8Q4-Xڷ#)EsphP?׬x / =+ķ2 jY 4xX$+6@3(} [XPϢ(ΓrFQWXmji(,Fvk-!mCj, M{|565{/PЏS("%#FIRrPs^ڻeTSUVa o3!O. \ sf =5̎lzy?.3w#} b|@Cq9#(n8 )sARϏTegQ|mTuYou 2˶a<#qFR786 f[S=a ?}YlC( t&1`>!@V㈠FURU)Vb栰ɪoѭU"31I ZMX)d>ÆP#fTOaL!F </={ʞkCw?=xE޾,]s+W&$IgU =)"}A'Z ORkF]<`jfiuK]:b1a2VUu\OuNn1,pcsaA4?^`{*n:P,ZP!CuEUA]!3D.M x(> Yu%r$)(U&5p+reB=p3m;3I,h.꛼QxcSFߪ 6 %gK&?fؠ/GԼ g'IE4SGGs ·ew4lӠ^L@||U ^Q76X͵ 6"oSZv[+꒷=#%)@ /Sԗc0,0ZK%Wq7F8b4V~>żY1|fCQ< `Ba.fwdD/X$kn9H߫ e8aa}=ɂ)W6N KVD ؅(N-HJ+NYZJJjhprZز*rBsBݞ7&@A6LW_>Lc7az H`SX#`b=6U@I(KKp!i}[IciR>EA1P=r퀵&m?>M]ueg+ҵPK+Mn %zsï9:;*o4|ſQ0s2.]~s$L< Qޗŧ"myY_%tT 6)!;bR~HX1& z* *t3۶'D> Y!I!H*ڽvB)R,NCJȊ>ZqH lC6őܘC rzpXnMAm~*̃}%-I ^ݻ1WkeT4y[f&Egnk\ܥW+q:/Iͧ03 }Ó v3j2ii: us܎?Oy|Q;@F]Oe(L NJaS^M1j3F`x逿,U qIĩ+/jN1Gf' w1; EҽDEIݭҨq)d0ب._UjAϙd j$Ӟƹ5IBL+:p}ȩqU0[3V6 ^o=SF (@8>1͖6&-Qk*&pZBDrTҺvF #) 坃$:gRѳb7=PyKeOl0PCkڦ(ڰ$SuXʖ^5]9$K2|%ӛ_D9m.@y}ڥC.|(zO8rHj|f Nݽp7R0~^mnyjP"`oa0;`7߲5,Pz~/$""8nYtdR訳NL!Zr/LKVBCmz H||`/^TSHן%R'Ws8}v ]~<fܓi7 $,T:d-> e|f>EI* >FJm«Z-Σfrcά`o-ȧTPuVHA߻eT Ya: /ӹh7ei޾Fх,dv3M"| h"~ %z le5i@vqJY1H̬jw#\mĢpiaZPn+"W1>F*,ڷ fИaCFfS_[?Wr -LlUI07ϯcE}{b^6I<-DTR㮰ho#6#Q&Yw3"GLuPĠMCL&iMk">ŪEk/h݃]g; CZ ^`2 Ws}Q6WW+zקv8(5{}ǖ cOϞAਞJmYذfeQO~?"⯼r,HX$PU@Kw9[gM<|Q*ȁ,[5АM,<ْlJ)ԏ#.K_hb5*ss|y(CVxeH운6 `^@)putRE; fw ,b+iVP WӘ3Wmb"r-Rٴ^MryXɻ@g)lU4V)<ƒZ2vB_ǁ: K wG8sTm%X,_RB9yHkfeSiعEk396yc**jlQ(r|F5V玲꠮b処q0#65~hA,?[Z8^l,{29XtzcZN\m N#H9- h6FM=xL۳monc>>JM \j&/ĎW_{3ꖂtڝ]ph?lt5=J{HZ]ԏ0 ظ$U~u#u8q( &˺`rS,Sjq.F1ܾVm* ;4&FF7ၺgࣘwR.ª V{H<29JArW Ff$󂜓#;s3J5Ȼ 'ߌ @/IU*4rJ$gU"8 ]a#i.g cPbQ'`*zU"On?d[f)qii=4Hpqx:ȏAU /v4Gz֓Apf0( { ೀ$`cUCM%J ݡ^U"՘IޑENERY~DM1BntBKhSjKc/x=``'۸!dDJKB,ô ~{SuՏGػQpu Nd}h~VKWn,KVftZi!," ̒b&Fks@{E`"SA)n>9z6 2Blc|21ݛ_@f0фN {@b$ o>N:r mn6`(DIg Aq##Sw`zqʒu5e/ t2En$P@]F"ƌ`AF{ DCayɣ-;ބࢬngN Ӌ ̛fh3BăC:V5be6+>&u:Ԗ[_&)n M)AH"&b_(Y{3r\2fVG(d.EP>~WbS|ښ5ٞqx0XZKMYDa5ps }F:?$کd΄\$Cp/_!VpI 鷧Fm?Ԙb:|&u*)C_b 0h cl/xD0-ؒ!E{%z)&I&?Y{W /A!Y)'A_ސ愢֏>ޒCbK<2,YQWmH;j8UzYFP |J9}3WRA : *r>k7hH'ل:殑u > gx]z=pe?`.ۋc09c<ܟ2h躇<!Okz~@.ډ s;,NRWWiո*̥ݔbM˜f)0Bxk%,H x#Pb7:4"NZlwBϺ16X=~pgYfŌI#"Ô<5"J-%7b &a_~Fά+& 69q gڹD)a(AWw|l-j/`?sNvT!gm2;{c0͡dP-;veI4W?FOK'**5*WSNCa %K&ܓmQeV_ A =oPR0gJѳJ0zaL|U K4Ϭ.t̗bD`d $ Gw8On7n728&\v-9!2 $2ł xGjUN6fd]U/haJLYր=P1Mriz]^0gV80 X?QN⥛5KpOV:4ՋV>TŇv^a:7jI[c./Ҵ_SfmgL|O,>J3+׆X3YI\s,7۟u~lN ڋB)Z-#AU(eр G}vBU.k78+ʥݝnԝ/iѓmUގEQ߫QNf l?۩1*=>};$fFIϾLH+Ӄia⻾A}S[&J&Ŵ为i|~(qP~d`5aKES:wqUލ9 @ 4C1/:Dl"n{YOLC!GO Tc0L baja^(^U]PXֺޒ lӗ>v"Jv4c\E*݇|&Z[Rzv7DHB۸n+XWDkr#v?-,6*鲸(r pNJ^]S[8_]ԙ0h#*ݦ ̵/O Gt RzZx½-1KV)i+O0 v׀w;!X1sj-6Mϋ5BfñN/ɝ/0''wهY] ), ]!hJl)R13D.?iI&(q%mmԇ9K j>l+ `[>'XUZ-Edsa=,tYk~4:- -Kb?yt'-E!i^x@#љpJbA&TИ$)t cz!Un<a|ƲCi_\"|L8[iKi_"=1+^2ҏY c:C;H˝OcF#(w3t&k!M1NS?L2Gްl{ /_VA-dYI|jW 泔KM.)vJinh2}HoՈ+BuQ.E @tERJ脦{Wp jo.(aԜ;i_W6"1si9]aAD ?8^_O-3h l{%ni>G_AN~u.}$nFB 4ݼfCcE"k089G=khxZO02 Z5ȏ@߹RhT4l (/0 ԧ9-=wO^c EOYg(([,Kȏ"XH¿' l ftD.\ߒ2v{wY⸇ZQ1U*C}M@exs Mv`8`ӏb[Tϳ(\=s2>'I_ /n-H̆P< ܶTt:;ݰ$wᄫ@FxVԆ(=+i7I}]tC^љe۷\-XQO7PbM%Z:=P=1H V(?-gaNVG*ѭɎCo F65;M$<),6!ExBTQ9pcw^YU LJ|%o(#// W]?JM ѱ-+`V)yU_k{J23icB^WFzPɇQ#N>a|{Lɘó3k{9`i<CV&^:@?&+ SݒFz3@*U0KizvxHU#y<~N2lh;^\4OnV@J?}A:+1 Smyh1 KK}AK"bdI3x^ .V(u1\ƫ !TxPXJ"Fc{ J7qPNc4-M7T5"Qs~?7NδyN's,RSVPОњ̺5YazFڄԑeiP"lO,f\D`ܹ&O란Uh,'d"Lzt'MkѺ%CCOl|S\FSzծ浂_ٵӫZ4ԦթcD4PY8j:&L PfC+Ɔ"KPz^Cb[+ɘ?C,6 7tbYHDO Qrl'N2c]-rۼ;Nˆ2I(aї+qOAWp\ؽaJp{3RJ:P#dfXF(uU!ʤ9:lIATfBQѹT5э+d!1m2lx-O0mG@w^>?U j!+z;Ƚ K>-&2~1'R36t~ K6"l\L R6 Y1Hec~q=v[NKfyo\asmqEM,nfVEmuORt!)]}%OD7A\um5~;rtAkP:2,T-Hˀ:DקSxf?σ^]*9lJ]cOD(5| sVʨ"(utT|@-p% L:XdGͧ~JyYԱ>N͓їx˶@RAjʂYxv:ΫFk$1;Eg^1L8omNTyeFd#xWJ̲8۰JǬYd#qצm5a+.R%qe)`YVQ3cj*[{I.?U ϭDqQcGq% ?t7F ZDR`OiWw4B:;Iޱ"'ۨ0_HOHlR_0تr-=Wu_߫Nh=1o+%D܈~@յE|}(; 8jK1Kecܭ~ępHBf,ȇ-=63Y)p8%E+Sr2.hf9iOld9hFuzf*r p"}߁`B1XkضB6U|"&~ Wm{74qի_ y=G 9 ȟ;65U LdfyA% [C8.!-%Mڒ8.;#0 !"h /9*P0 (Ix}V`T+هaHAӟ 07gءU(ǰW[w ^կ;V\5̊FWpˤr×COCkT+ 8j'NRMVJ6nM_sⰉ#"hq|^A-N&"&j ;!^ ڿһipE xwqo| p_-\f7.P)At٦ɖbKeQcAXG/+ P*Q--;)$2F~Q!@MH3H͋ɀ}G>ht,7y)B ]7Whg|Lv|z1Uģ6-@ p ^E6ר %+J=g 2|d)h4!aמ8uGTw.a K[=L +=A%%MUM{vzS>kmSD]u<àQXcw^馱jg@ZS*f? =.2d5Ȕ p Kv|mض!XI`<>/Z^.: XM%Vgh C3عq- ,B=jm7aL2\Ɖ7lNB\=D>Fh1+>|g jK-͘[g3a~Rۭ?GMY",5%2NIs{4U,>@F>Wc!N=x(]|+5Zfn\^"ؼbSܵ]eŀd^'}h32vy*w4~)qLrZԛ"'!H$c'D˝) mNn_ 2u$IҕWoɟ mag1dYQdA%r8ƚ]SZ>:_^ƥ BJaf+δ=ISȇM氽|ߢܺ5 aE װTUE:\$7\rz7j3CM%rpx[B!f\~ķ[(tH5b2Qz(qodU:,P5#ӂhێ=:1;wh 5W Cx[Y2za\P:5R(`FS $c)M7 ~&革pw ާqw*nK fEt ܨ!_ QaQ&0 ݂ެ&RDfwxUt'P8:hd~gfMJ o n ()U@N{!waid ճNN½BZ<@30SbY$Zcq. `24!{0Xh_^,UۦBjǴ4i}ru2iB/].$v_ ޸;)Gjk:7.E=R0v8XQF1gB*K{rn2 `p/%hhVcAJgyHX齤'^Ɏ(W}>P]Th6V(X;Y,"E@ Qre0z ԉ늸sxU1Bh9VtnP>*2ȋEXY IMKFC>[D&t^$e΄50䊡pRƖa,.m먟NTyz4+$nWz8uH(ShF4'2~|!s1 i(kV@d 4/+,;$~iH1c iQlV{FfњE80 Yhpc$9q^LmQ@Fcb(?[U_wc( ܙ`(3ltaDD_Oo>mqZ >Jw aݙ CL8K!.pZcPM O13Ӗ+6w„8kDYJEw^xA^;}P(UiԍʪucBh'2Qg.jNV8^uȲQ&37 CHK")uszxMal< 8'y݇ꁵL`XbvEhfpT vo!\~Kc/>a2Dr ?fä(ZFَ$=P`G?YYAroT 7\/,Uqu՟.HT"֍l%iJT5#P{JiMSV} hJܫx|" rgWBa9Y0)l$<, BB\bXg_zhFG\Lr/x w"oj) 삧, ` ϫܟ~q1!4x!_82gQwn :#eeK϶X!q+~.JZ/ 8-gf` &b(.N!tASZfs\uU Zgsr"_j+A>>⠡V8:.!I7<;i~cfQhunh*/ Xo'o-h_'U8r.ùrwl¸?>x137ڛ~"U1i+f?5f<Y@z6Rvuo\8ԵF] <;#qnZj 2Egsn0@\ި gQOCXVVl/] nCK]r*+ǍZ(<3;%kMWf,RaǡFfCo^*v^GsX,I`XEd&O;o!;LNnM*P8!eWNPm J٥Dx?| ¢{yzb}B|402M"Un;pQC\' W|w}d6g\~ئ|Ecy]JqIе׸TZ< Z"C܃v= `d?W,bb}̦ETaJ}FH& ? ЇB ЀiV}yl`G׎%c0| Int3Eö.>BpJr(UMn["Ľzㅐe󶐶n0e !Uz@1x/ ɷBoL\[EjԺy& ]˲^;)kuv-W nZ\s1-=QnxZXG8U{b 0TZ ͹/'u^;&F=PɼuN*G&XՆՑY*iz2 @L^F%XIll<^ݱV.Tu^U\Z~mPwf5>&Wa(0OآWo|\$|T?z84oɀۺcn=*Ҽ2ei`dh\qwL' rgj -%co^u~l?i:M =`WmFB!<HtOv6_><⏭GK *N\}-:ӘF]e>ԾofT@^(3/~ƣe3_M\rۙ+MxE[8RL]mܰ#M̧:V^g *:";ѠiÃ~:ļOLNb#4#Q..ٓzWEVlȰ _AK;\#ߔk+xw 6g IsD鹕'4t f`{$fF;eYƌߜ,2X-WB~2q;1C0rLv޺F+e|t1e>(JYc$:R~B[픽i p\=zUNo'֢Z,Fex*Aؓ/`LQI]Wx8vHٝ܋rb1iA|n_[i*)m<Ь#0(]&v3LO3LFA5t+q#tWpxl8vy+F5X$いcn:Qh[ol9 wӷw>~7󹋅ED;jmFihorT|+XX%5NX#1lUWڴYqcނ`+w"."TCKքd)g:ʏlSSnyҶ$ܧ"uH Δ;%ݶ 2XBzhi*n(\g^U 8 XJ:wϢoz4+*>LG@-bSQ9CG#Ѵm}_4ބctz{V<@ML+mac7/MM"ea ejLYi{@Nɸ@=%3M0OReIW{Yfa%jU tbҥ+'tSݿ KѐG4h/ hkk10 F%<{EFc?-D"p09B&.Kc5?O' :a6Mh?s%PY@]W"=H[d1+Z^׸ pzgNHxGYcyӧGp̜t*iݚYyZk&FJ+oa+XJDPONc t<҄n`!m_܌,.rX)V+jNU~< eR!FsD?2/Q䦯 o#jⲜqXŔN" 3r)1UDŽ[w@% O4|wKZJ:[%N kiG>: .ArA9YQX+wnݕy[IIRf@zgFN -# T>>a'C{O*Z/I3P,w| e5dKnK RHR+0Ǵf_ ɦi ;ഋ8nÃ1̌1uKb<=8e5qL"Qx&zɼ (1r=u (YIU$--\('W}r{%@b4svw>t8WjJ7X O[?ć1;M Ƕ#,}p,t\'ʐؐFzh"X *LvO)W{Lx+H*3m8Ve/*zQV؂DR o/4ؙ6~q=L١}?ֳ{7Cc_Y~<OUbNR=dok[3ʘE(Y>h`wP/FI "t0"jiIHxvqN#zT pH`,n ;P,{u͹<Y[6nHOiT,BIh|rv{˄҂iK﫚!0gq%^0dt_،QW?)Km{U$.gš!]oeOr-uexGհeuwD/Ƭ9Ys3z~k]HHG!m^d2D9"Z=)m\R)@]N~wKZ[4HkIQ~]ruגmD<@ܜڥJ[Ra#¨+R3'"^)zt_VMT%fvqث~v F'HT1EXq Ux+Ip= iPI 5VKQ}eQE'm[zE*Q|Za/ɾ QjY~Du]υt.ckf!k9IOw37÷`WZCw>{acMߕM(}l}qӖlV>ijᅧpnC_֯E23m$ׇ}20[cn2~?F`K:MGͧ}z 6}8Q,K{,i8\=={N]c8]ϝ2?P1%$p̓/۵;MJy>yj5L.S>J^X2R#HaVTX.// :E/Fve&=Awkd M }~ǿL;\t{xZto0CTH1S1ZPwSKgZhh g .n$L.,W[gTk.<ȷ曯G>-!haPpG\3fƺ c0[?]"JUđjY( YCF(*1@E[X4H.0Рz& }@ a0qs>V9㳻x؅ccw^y Ƈd2]c,u\@s'^n;G@%" igQS)iQ(燠 V+.f*v u,>pRp \ty>/1 -^DlOP䡀!t1o ׏a2Zˤ3Y$E6¼dhT3D㹋Mrf:e>R&I%C0L/j' vZZ$|wv1Qeݽp0n-ς7>=5[%'`u,`AsXn%( f{`ܔVȢ;+b;3tRK<ծƬ t,tAn\B@ۑiVB.ۣ+t@5IQ.d볽%y0pf僠g ,%{UBMb_M)m`x:LF?m9 CQ*M77#mqftc,LTYRq:f-wUu)bzl,cY-5ȟd+Aϓ fe*ee@1N,Rr}iQ ļh{5L"|mHuٯ;,]B\/TX hN0PÈ5XcxIMD.)>+gqmV( $IKz(biğ`$Z’&8,iZ+K(w`2rC9ңpa&B4tI^wiT¢QD㿳,ĺ*pL|ŇT#QǕ 3OuMSeJwgX 2JyHu&T#Nkk^ MHȒ| F$O ](|lPĉhV  c 2vm%$ .`C,x6΄PUٚW/s>obS/ۑfIa0ۢdŕ"I$~iWn5)@6(^f ?=s[iکx s.M+kh>EtQFAW_PVrꊎꔓIhA;[ dMX8xNw} },I,sR]5_#ocę.wp ۬ˤϵ0-ҢqT-Q$zJZbmN5IT.ý67 rUwOVM#W$(k[PB|R=WiԵw ҋw e{ ViGϹ"Aƣ =їފs0۞2ˤ)ΕS|ȩ/,y҅HQ>ntY C#/sA/g057dot>UY&L.:N|L32g% &hDfPmmUVhF`问9P$]' t@>ԴnE+:&s)ׂ0Mh0/,sO}S!q gJ޶Mmۄ_lyQ B5|v/NIɚDU&5*bO7Ve)+PY^ X35!WLx'g:Y 3u[(eLlŚk-~DrJxq X@:͖ž jڕUy"eJv(_PEȔ^} ÀdkLp~c Cc9r59`UWVo(X!Uxj k^&Im̿ǕWloUpB4^OHMG=CȪ ;LFTiNcҿF`,*3fvb|h-`ҮڕUUC@V;|bg\ y:--3];1H@FMm'N{ɵOS]683IwOױ8ע6 F3[D+ѢfLk jsY _Df+utT*CmJreHĬA@Yk3(Lr)7vPh7d]7&Pvbd9[ut`,xBWL0l\j/NA;yCXmHm/ղSOX܃vqg0^,`ɡ`b]xz(+@PTmx@$Y7 Tїga{3L. <NN}O yHZ|`jfNJC=Au[֊ Fng! ;H |ʖ>3Drӕ%^5s{,EmZM񭇫~-C"'u 1- 6"Lڬv"f:r  JTLd?6E3񜩞1~l9$啅0u'f p,ɠ$F@g࿷y\L Y0Ƕlr$<0[G@cz^"ByIMBwnrm"lq`8Hf K=Hh:~ ss8dZh%!a\ 4e{%h$BPT*"E@շ Ydʽ^ _SMy)|*s^( zG_5XpBs8-7@]niq2"Og&ҙb1+R-xN %;,޲b8ӹۑ>SA^"ʹph4S0a_?>CSN,s,vXDm] kvj IEiAS!BNT#B;-uuvOBƯ!f7(E=jf2#[M1xf]pԖ zC ^ _s ɿZI~&z?SZAGjHj,f"_J9ݒ1KJzNۡ@2/u!j!ܴϔ}ն@&8Р;J"{ +-],N(˱378 ASGrX˄c/\ lcXճ4 UPdn=nfY4ӯHoLO$ i,O E 5U!PJV%'l J`@ $vurT멇lFU2;/|X| c si?SX|(m|tAkW`+;x*}Bm8esV2 cKwy="oAv["mk;01J@SX#%B,R\ZjN]}>{ʁW3-D~UZ?m#_X,enTA/a :IM8OF74̧%4$ucޟgi=e ASk2f֜侵OzE"Թ(vUFDw[ZU{mHɚ͌V$)ӝ;.¯BSŀI$% ^dv<hk"+?й<ϧm82h7Pw96A% |jʮxEM֪deZ:>Eoz{I&g 42}Yޝ(RPq[p0zrSgئ@1 _u,g`v#ѿw gqeJx r&GjI1c֢*7ʊmk&[K"\8bЃf3 )aĮ/뫜Xq+gC 7 d+J b3fjzd_z\[,W >Vt[1!M΢T4THfr|i(Y%0YytzA~˯YS'.W '5J#"V)NY3/;ؐ)SQ}( >Nz}^X[B1eYdągoY#pc8htҜ$B̹:aٸu6W]n|؛N[1W5O)g^uH@c" )"A7P$ۅ;U|` dVR =DHI{`?az"F$>y~ pu*ejmj4j(QHqVݜ~FA?3AfW00wOs? d}#m;veq@1HN*}/ziflfn#c% |~Αfp`< }rp I$3V1νFnLJLjP*;q_й>NEO..{|GǠ Ƨ}[tsA:)n֏h Cml/l"g 撉5uɦN3;![FCRR|Gx"#{Xҵnrx<~\}>3 fD [H-MZ `p蔢V'4+lmWpdyPa qOKrAiZ?TJY⟯{A G st>hR 5:pCd]xɇvٮz wr0GXYj Gb4ﱌ:f4xl{Ƿ#Az5kO.B;"(V|* P3O݄e6v]84 {+Y R""](Ņ7_@F f$m }XIW8, 80s8F.oyؼ?W*9#Ҝ|[2T;a沿,"O]zo sTˊxHf2붓C>`piL66s_n2Rz a>1-ř[OFda4l3Uh{FB, yێJ{BkOԉH g(e7@D .#Re.#^`WSXEDID`3 }n@B T4a'TB%c~i Zu$r`}ڽ"UM mYHԅ _ 7 _hX6n~%u4t=6on>pGpPDs|&+xj;B_SnG}Y]K,%ۀ]h@pAv}PJc(㮘||5},ك-blU0 lgV!*M_ Ф-,(;&Pl+S f "mͯʎ` Öޞ8)h(gaN#I;'?01B,TyBڒf" tb|SG@g#a^%k#;Vm~a[6[y&OLQ -CR?Ʌ ׳MaUI Ma?{1DE^ȢW)쳦=֫3J+LF"P]A F y6n.7=(h?L7Kا,ړL86zd\ot]NQE>`uycrDhh}s|kf`$ɍ2U o o 'i \Q_"k]h-,xv|o2$ XŽ*axkv Y"/}-/w\OzSbzDQh0p\D:#0XgXCx ʆ[eOxr xuD2Z`s!1=rwѻY鄽P3JGA5c1Sċ59֮~a̻w,0UlԌd2^JKAęuݧv% XБ !WKv?X'v\ЩP`˨v"#)MTXJhbZ حz#S')#^G p-G2}hE|aJiΚ#T{,DJ)3!hY^@B[=Nr!C*Lzsܕi 0/?:Si׋:<ND"$Ek8Yx>$X8=^ǭ[hOkV31Ja~g~lB#XEL}0u$T.5ƃIL8? Eρ&K|0u͂k֩{I;,)ɹ'Q F仁GO8 EF;&Gle)Isb1Bd$_mbJL07nsc>U@B`㵰׾ݫQQaHwhzL\h\)ᜌ/MAj )y;Ċk))r^r8`UÅs&7yaU}7@'.LxV7d2'c=s#>5mZ ½옛OQ:޻"V'Ho_s/<x8vBSP5bA-`{65F'^y?B!GIw; 7Y$Ռ}]`N.a6sA hQEȞR'' h?>E!"oVuCz *í)'ֶh3jH 'O:Dkv. 3Bd^MUgn_j0T*}6S#G<'0 wĞ֎ky#8oӓWV1=R7NuE^R8&Y'0e|ZϟIe7HN:%iP{2Zd@~\\z0.W-ti++OM-B0n.:{[#jpR,/_{v'hߴ7GPሌΌ:|٤#'˯WrՌZ8zx4y=̑x eR<n52PO {|,s9׹ݗÚx0ٳwLY^ʓxGi&6Y!LAd)d^f-KSJjG-XNa]z)2Yv^C˷}X^M~$$QDwz_vvL"13s.v%W׃#6##h';tomsjDٜ]W! qũHGr'.ȋ/);BgVX  *YwlAܭ _FJ{U5C6/зs PPd؊#Up44 8 ' ~ &fC\}Ƨ=Ԙ$Z)[R|n9"Ԧ/忁'X5rb 3pσtAOA_񛦇IuB&\32 ac8XcKAlcrw*rȷ+E.nt6ئnҷCM%Mz^U+h}j{H#aq<{_`RwE蕊( ?C腸=P @ȖCWIE  ָZEjg`Ye@" =&?}Ux4Q*J{]%No(Pe37!4%[q RUߝ^`V,s6.|S-ݐa, (KjLz+AB:ۯǚ"E{k +Awˉb+-d~oh_״Z3ռ L3U))NJ]њ+]ӐH%*Hø5U !PJp\tLHW >eXU9SQF7!{|&Ck)W6)9*s;up9RIfIplϱQ*5y\Y2ǽ,-aA+ן94ӍO63qB*6A%ƋeG[s Օf{.JaџzN9J_ 3TqrO aћ(y1x!N!Ȑ2i"qZa'm(Y#r1jBQibs}iDW/X[&/Vq J[4Aˋ^V_&99_ };(J ^sVr`&qK-K<}"1*u_=* yqojvEb!50oqsDvjoNV6ECMŜNDWkd!O ` HND[+a]rGd$PE_2@&trq GWi#?} vC!*3t}QGRqỦفo3ݞl~B=~r8.SOfS=ɤ򯼡dºv&|k; ŠF~NWH3nt-yZ4J,#_ Xc'gq1[LVq;;H`+D}l:d0;2k[yxO" X8[jx^]-w_x[ Q2\EԆ'!יXǮ2-w/2u{8FVޕ6s/"Cir hMGgpf|B'-QNuՀڣv Xz:jBGD$!pqR@vkc kdž@˪, >*;[%!LJCu&'l'C@Ft[EK[MXWIUs_{R.3QGޏa9qV9x@*u9 tY&.+%5ۉTlXVM >F*WV6E{ 3cud#;kQV2)}9{ !_%NZc~dҗ`p8TY{EO9 &1 Sls8aⅭ7EkXhq8_t\iNc!lٚZ`jΙc4I9 6l"Л?*~pg~iǑ!bH?<'x"mm)^ kjKăy@mSd&2H΃bW91}YP.4nA&k6+`PRVY䧩CHNC:_$Q#*\!/Sft.agX8b BVIU!%dWrX0JR}43{/?=>qFw#xFx6nnV.C?Fi쾗 v`U6.G'4l/ ֗;R"-r Lx=h_=#4޶ qċڻN·iK2&]Y}?tq~QѢez8M}*/C%mͣuX BiDx~ݒjx!S׋K -sdE".QikwW}]b7͠> 2&S<> MXG>F'`gf%'l1&Uřo ǚͥo=8Į"^UgeG.Jpe1Le*&T½egH͂K,8E洗?|_aɭwfJ)$-2vbB}do4cWD묞 5%q?d[152aei^ӨE\^{6HNjcB{ v S *2% rWf0T syIqv'uy ο-)f#j|cQRG `~/C4lw`o:6 '!0I6JŖ[Q$RRt\2<=IGEPns&~8DzM%w8\T8)*jÃ^8 5\nu@0GI+8|fDŮ=-cQ2G@ /b&-4a4`\t2 X彑 iHhmbyl9k3 B Lbu@@̱yueLq%xG)D#xުξð$^b{#B7r&J@  /䦰,$\s@>8,ɴ,:/b=SԨsR,†䓿7p3 .G' ãwG; q1GzoS_ǣP kmHD[qہxi߷=B;@ji;<2s7ԶIjS/.p)B+&5{-ʂF*$0{4grHmslO7VSWQK/hnrHXUcՅAV+w6xs?Iڡ 1+ ͎- pDY;kR]w| )/rꑑдi ,!Ý) )vL(?KɀDQ7ُn7]s1@YjT>RiJCH %#أ9]$ulLEVZ=P#Җ: ]^(RB 4G+41 1 忣&NrW .3Ī Ӕ)E)"`L}`zliibdA,E~9Et-b4 u ''J)@` q5X,]gfG6ንo@hGo0frzv ۼgsMq@OؿZU T|0P#I QTx82WԯaNoVÚ +I@HbR>pf~}c LJq}L k;4VKPMn"- !,%>Rˡ׽!J%uK GOl2I5,wB ^? 0oBkҕ@w^PnXC*^;i FjݖN+~j}@tsNɭ,Oy:xӁaxk"]a_s$#'DȒ -(}߹8խ1+ f{ s_ޝ}C&C&RX|!qW]lB5UDbH&t rҏu/ xϸ|# {Pnm]b-52Krۉ[+#B0U܂i<ݬ & e>+o<5ޱZvˋ}QӵY;v qP)OunLampAauگ&jGaKy'(hm$h.ت"/xۅ1II>ʯz}Ad+! :*.%Bn*`)VT%8Ļm?*.ƏxC(e;s%>TIDPd(ϝ+MhAOT6yQ낫vh ӌc3N4bF-IlXJJ_v-/UV4G?jfB QK͒6*Mj@GȄ=O?Nh(5Q.2sjeByo)( Xu,cܳ6҅hMnC5zSLDրU>gXHfAkN +2/ی#9𭴌JJLkHQ>_ǵv:Z56XNUIYëTy؍6<^,f?SE(%W/dpsxOvq6?i0*#XMAo '셔Zݙp"Sz:R>4{U^(; kRtÿU՗_,1vI <87߂1D4[luPF`CݧC/C">@rHސ{8) jcnci_St!!PwCG(pe[/(8\,NЋ;cp'H<̿[Ln&-=G[w-疌+YKf j`'C(htmÝq!yomQ!1;VղEڛ#a8g] 4g1(Ա† TP !ףQ;8W0E fE% b< nh֐b1v}&"{벀~\0/Z0U+ǩK"՛TK*wi|} 2גŚ1pК1yYS@=6Ŵ\"Poe8X?}(G+ğqS_71i{דW3 Q;!BÿTh$YI]iR|Ƶ"& ;rPv$sA9П]SN!?/  1щr1`5*u$6wڈ:"ma4sͶŽTg)`%mz?L9Vfazppkly0'/=rq6i)򪂏B,xuH}Zfc$*q= 96Ń6B, Uݯ \_{X=y|B.<7ٛFhWKv.? nsϒ\$%gN+ a ϋԘq |1p<I^-9%pGNReHN?MXp!A> {JͰ(`ey\^]aAy'kh]dG+ghXMOM:;1je?ERdd Z{)ZvOp=|U-v1@:]imdW1Z)[j9`NgVgV9dHOغ ; dO]Hqr[@wRAq1ߋ|{m B̫Nk 0D8V4Aj O\PdwWg@oe1,U$jBK;Ʉoi&r,JX/|octP %]څrtDY] -*|]*bc,xD͔S0g[TYի<_J2i{fj^Ix"~_=R+L!nSUypTNwaj FȎ KE,` z}{0cIz>jȵ@eIk](* ڒmq$&5Ad+h_1n<`!k6إ#]zRDD}՜5I #I_`kr+N$"9}*^?2j/Sz5U׵t]SqtWXye{}d\͉qg  Nr#=(Qխ~E Pe57iW0Oh[Ѥ*Q,vq\ Gǩmo32 VuOKŚx ? ٕtv Ok&=ԝZ{n wRrӜnXVRhi'; G&W kYYœ42:|'Pss]ly98rSy1h{ʿ+I4jV;Sok1`&˸5IǯRhc8 QL}*L+nsN,-nCm.Rב,\CEIBg)mc[nb!&OSqB!'?6]nhD8jՃRme>Ѭ]J&ƁemľN!߭La .½d_٨"Xhsq2#ViNF{Y(v{M)?G8Gň,'T;~MDE+tsuG4A`7p>HjLa@$6rHjgX l/~0P x8]1aП'(76LO1\ gۉ ҿLro)zVDlthX 8JCp>ݩ&E, X M4Ө%j3YzE.U[]"ڽϿҤjyt/I@Oz/r؎[{C& zjӴm̺~P?u%hDxERWI"dWĘCx'^ׯbи4 _, P<FC1&H,v~>) P9]^ V&f@|'DZ gbMv8]ؓkdIL9*FCtg<`g>gO@^F^Kz[B므&]tn$Am Nha0Q]([ؚr{pE2w'z՛ xֆEDZ;iBmIЄnc"`!Ad?/ iT(ā 9rqQm+!6x(lez&mx2&~cnEmD2r)w_ |qMZ6*ڏ226,gx k~rh+*V?SXؐdV}8G1k-h0X݌|r`5*|+ 54~  to̹u\HbZL[31a4ߑc2?)LX[ @a 401*YB{OSWw|3)㷧~+.]OiWyKV9#jQ1,#1*v}Ǖhṷ^MMߕ 41ϥ|(k)rٴgqLmGc{g u 'Qk&֗**_ao߄roVo+e᫉o)QN ۝ %rƊƕi\B]fmwyq %i-J?Dp%Sm툑33 -W攴l_ ̏̌y&_':(2n[v# =8na|ൗCء 6l߽G1Zk ^bZQyxP5`?M}jVG3a3@ }Ԝr21՞k؋ (BG"@jhCÞ!\;J6Ы|'Kc!JLI@k<[QՄn|EvSp,j9|tžҟI=|_2HpJHW8UkG ~Kr=P a`v!!8S$dtg; sn'T,T U*UOn2ۇEْэ!/iIHq3 '"Ǵ[%Pl;j o2d^3#gC%5ϯ E=Eѱ.z]q<~qA(" '']z2NԌо6,^[7+{Pns.&;׈jcZ:;)~s[޴W J`Hֱ{G9&fqP9w[ܟ8fQ^Հ+%kg=I:y([5&iN'jFPYrY7JDWq^W*T٬\O0fBeYm9faElM?l=~ B B^BXزC@TiYҧi Ð {huGݧ{_M爃l[R(b3Y7w(mUTF4^oyX7& (ĉ1c<+0G%p7z`ЫU}9_} `7p|C /Y''OT$>KFx^aNdtZg8?K-Y ="_k+vLK0rhw_"N~z@RZ+U19fNKRsRmïSA> .:Z56jDeoxBK/i?6g%n?lv 0-^AFQ>^Ö+VLEg9tqiϒ[dUC`9Ӟ!T/,{Q0WV U1;G#A9uF&$ #[،} `4O$zAi|Tv]ֺƏ=8lDEPJAk3Z޸:1kqV krDk?U$lc;ER/cgfi0ˌD[T8ȰzX*CX3h%(cc^t7v%Ro]\Rk_'ݦO>&/8Hԇ#jkR,p¦50lmϻ +~E>T'%K/|ޫɵW{%XBĝIPem7^ߤ~7P5L@JN^|BOJ%L+E95SFmxFݪc@p Hst)~p i鰇%mbe%7A"Ϫ>[DO ` &¸0 ҇M(4h{d*IUu#Ꝭa4RFSN-*5k48ba|uLM#:Q>A4r}m#\UY;lebqCXG#-Z#"T\6 R8>=Zs[B36$Dl$91 |t;_Nj~b$^V` dpM6K+h!oY1Z:9fpd Ks'n%Z}lCi'Pñayn ll2 RǾH<4"gN3f<2_9OR,o%e( <_J'un@Ĉ2rLAPGƊ)->#ñ-^7YePUb>_WpM)@Re$H@_-,>>!CݘSXpUxO (|9I,6c_L-bB7H.qdVr*g d۝xqM4Ys&ީCa^Ġ\NC|tU|">&AtmL~h8My6}L=9S!X wISlq;K pKeP OY]2`F7dͮ#g_v/.'ue(k, F|?rUv0xD7 xL`b+B̋St-Lڰc"'3 9r񰺍N1u*凈;E\$4=Xמ/ Akȅ<".4ᒽ3>H6dH+Mb9D!rOb"~.t(i3y58I,&gM\xvs#`I04d%OZ*&^.m [Wx'7* R6`I" ,$63)?եZk}JVjuE,:WZKUCnTM|uaqft t{O6OԞzUSdy 0\̼<]fo7䀙WaJQH^˹f 0sW1{t1-Jc X4*KjsZCLzIL0Đ94>ͺwAIS` X?8с Hb7[RŴ2jŦlY%k7AuK4_fxJ^17(|/:i rN"ͫw4Tp=LY4K~\h!"`9G"32vO46H*CFї+9#;]G|/n|/X%Xf5ȠEvG#AnfVl0`Zh?OkUiMKrB&mLJY_U>U2@iþH%S ,Y S쌲 ͸&F X'aPpiy30f ԋ}-knG[]ߙ5 P4V,aڕy616b~o+]OC+mӛ η*kV"wNfr:VbI-g[rcXK~HTp"J*)з*UP"1 NB+rôRLrZ }ԌzQIjp#|\\v9g,}Ho ,psq!.#4# >bu .)iPGka''1J[ _0L-\(&$ZPϠ^QYSȕٰx1u&yiWhOo7s%}}jc6E!-'!Ig'M>ۏuҪ2Wha..5`$ |tA"h%}>}!yɜQ<Гٍd/Cᣥ=hQ NS˻sґC}!pP&rlH #@,oW UPEZi.ie buAXAvIk9V~ogc[Ddc.e )91`^qlrp{Q?oްҌR.B< \eȴj—'Md] `mQCO㲎Ӥ,fUFP^3isQtǛ6젅{Vm~ExEzFJ7r;E|vLF(aaR,G 2^]_GlqVm2Lqz} ',dz}86P`#o,ۙ:|꘱hw;_hiZp.Y.R M~͏4D$0t6[D|]Nm`Ĉ>2M/q]% NGg>x֝1sBM5@;d΃sԌ^跒F?7IW^ly9x6h׿4KOay1L' cC}Y =M kc,|<zo<:#(5cr4?Rb#): ݽךⷿ^Q͎12E"p/V-v%-Nclw L[O4NcNY(`XY\H+Cy>2zkyE gqmaȜ>H8) ًHR+ }z&{G~v ʱ>qNYUJ*R:|TEHq~.ȟm[l|c*#A+)W&/ a#/u얱AXX_GGr/3 '}Yz%1$zb9G/u0ަ;\̑Ev:OҎ ߼1M|ZZ 5tV<(,z,T\aZP<_bPҦp"H[BKG[=  Z-S!5[c;8臞ܮg 7C+lo\T v9ǹzYlMTBgzx3>k4_%*dE[D(ĿU<[FÆU/nn_Ea$72ÑzUry +OfYIka>,LMO;4v}MǺ8XFfڪCdz_C[Ui6BnqD _x}xJyߙRT4*%. 1zbv< qf{ždІ.F!FbCNܨҙxsWԳJ^Jw9<ϟs.7M3Y !#*@ S=\e,*Znv$EO`{&t1Wu4b?{Ym -%8 ..Xuj̙]&7$߱NyL$Y`*=dNsiVg]JjC:5eZme}FHCjĤO$:u)H4i'O@ }2Z"+RhMa>޽OT!#Koe~;"9M&'O.YhB0#@z<΁ؙ/:->)0$r4=nةS5 C~,\NiSmO;Vj3Ll7;-yvoL<#¥YPBj\!̩Ȍp4^Nu'/"@y_:8_S=KuO7pafI``N(aXJ[ Б֒UAm'w4TBŀ̢C^dMA6䳧rm9q؞ub\:ĦYZjxp3ym5lOa[}3qx G뗦\GCTܔ"kTYユklH@A$vۍ{.N)uQ5 J/]Hgh5sZ(Jkiu2S%cc{A% zO+/^C'ö_ oP)9BHQ@.!Qܳѯ&ưSmc咲%6#`߲_j ,{F7:qRZmͫ58@Z\ظ"43&AVVk*ʱ.Q8m%YkB&ٺ=1 DwrUϻΦ+D4fo}#οUQoB2ɝcnM(<ʬ1 Zi'}}$FhD˲*8ߡg<ɍaRH7ﻋBd<",?qɇK>9[&EZ X9 B4WB~wj#o{3Gfh9| l(-PskU~ M.|wI |&G<fwV♈n{1cC x4D+n:zIL3m} ۩[wBRzog;%hxݒh'MW,oSvko8HӋ%\n>g (lgr m~ٕ=Fc䂫)lDD2%7B $?#էJNa!RN* h)q'{h'p0FյL!qc-y4F`أʍta8O!, @H6ū0GS 3 hHSfhO[b៓Tòyn3YU-4L^q4˜6eRCC 'J`vQ6 rߵ\UngKi "NRυ`1Nސ>VnI*U(eaja%8++{dvmŌH4e|ί<oH(*(@zW j2=Mskg4r/wվ\na:ĥJTŮJ?cJ &)X=~[~汼vj\os>5w*CIc4#6Bnx"O$yvH>4 V[kljT/m* 0,Z!6Ю 'f9夷:f̥ŔGNLi_<۩q\9t_ODۆ7<5.mbt׻&| fGv! EL wː-6x,x}hbL]Ptu;z$ڌPc1L&UT,d+C&o{VmzJv'!\Du7D.9 /ڛH Т3SXK%-}3@-ͱ[`%`@_QKwB{B2.pɕrz? _>ޔv`/ f&dIIձ?Mc9%mT^ tߏ۞u`Aki )yah ~۫=K/9/Oxy(I/ z-4{U1\>|F}rEى]! M2 O+I_fP8ŲEhTm12ZŮ*w7TlL;!lFiY9~Ћ\F`,Qc٥tz'qW{ p¼}>Qr#x`T#Q: *HEV<|qJX)`׮KaG׮cII^F`k, !f3Ux<ߚ~KE;N;W:۝RZ +S瀖'w޳%QLfd`?[ gDś*eKunM]oZ\Vy\{iX]!ѴΈ:`O\6</3\ݶr0_;8<J@/?i_Z3ĿxhVq[4)8`voJ!)r|/UOao1dq$3VJbIJ;q1SVlq~# OԔNzb +=;QVR <Z?#pޖaii4\1v .w}6Zk̲hZ/P:6bfK3>JZCgxI$*DPXFJC% qŤB%TȚrcci} GK kV _IDl m"q4i? *.Q@O}M =`w&HMXgә퇨NV6@MEIǠ[ewEԦy~Kզ S* LPמ\?wByEC 4ĵFa_ZaS(O?MO/J*9@'A!*Jvq&Qrx HW7O"u>xjpxͳ'Y'޲ =d^̩[3S\y9\W{/y5$*"DqVkrʉvgp7p* l 51ufL,=zkorG*hsQҵP¦p5ecsq{}tTmiCaV #*V괪NlnE&t키'@DPi_Ebu $`dO6;f8r^MGB?, v-$It9dJo6>!>n}sɣN*;{` 4˽ _"_4ðx X8&V0v6jhxQB(OF@pWK;"HmA䇝]2e*JhJ:Q 'vdie H׀+J\`YyTCfȘ3j^LA6k>>sT5qڈ==(>`QKk`|G턏L;_+l9G(Ȟg -1Q+wzh#s _4V[o+Ϥ*tY@kN]N%ԽWrNagEeCU4jgȌ( ,yB7(B+M-^ݵ,8_}\GSd,9{Il!񑶏l\*>Ye9B>;]Vq1.mY5s؁U1)~;"`nۗ JKEyVmiSJzP𵚜16iM4Vh97H>lK}傂e ZzLuѽi>S%ʰ읾N>VWӚJ#;n `?ǸYx٬Kv Q**%d-?0r y?xFc;dG@YGI7 Ԃk2Eǜ]y,Ю\[@dSmy[v7fĭ_o_O.6p BVJ]75 'J_(V{9N] gXx57SDƤǠ0L,4rĒ >\xUi=Ypc9HtA/!O̺L#fT0kYl t㪙"X#/ W4P_SoKtDtB [pu T1n#/+b+jKPLýep;Y[/slWkiN2Ilcs?*5tRxC>=o[nahM,꓄؋եd1-r؈DrA 4;ۑ HH+qyөRkL4Oշ-d \שErUW>E&Y~ ^OUv Π%0`D#okѓ12t t Dכj>B4ܖ HZϦGAtvf|cl:W Wz}|4-ֽ`پvO."ۅJ-ɴ J =4ZLG$SB;xG2</Ydnv ʳ\N@G(Fg=q{޾o˜GRVjn%JxL8 h|L'/=r__{r?ߚX`p9 oJ%>ӝs)wd}T fXdmţZ:Et%O1q޹,/֝.zPM! ϟxcN6 Za춴\" ~`v)PDϻ`d2J?Al@#Oyx&$z-m)ec őR[*mpL[cYHŹ?h 5]yg67+9<_h{th@Bęw UDO/oG3ӕ%EMRFWS_rh!!L|(DUkXHYuv.斷u6d}4lw-&Ϝo#AE(3P--c:V_vw* , -N"puC2'DdFCs؊rnD/%#x?Grr#MaT7z߻Y=oMo?`!3+oM'yhȦi R6-"܎4a$w\D<=ތ?GYm;`X?I^J@H3=S q90[{4VD/FJZD t%uҷ "ǜfl3?'_pXHQLW|dH׽'H90u 2vV_KO`SW26Y rxT*-AR(W/ZNk9;'/B)ܶGGqhEӷ\Q?։1"\[ĺ M`dHftY4Tp=оDM1cz8M"/d(j=g ojj)pw h\x "JP 1'\,6_c&Gt'?haUj'U:i9y 68MTnpk$SYZ&*0Z̬&c|MnEs nQ~}c)3V0Ȅ0 +!N'QoӁ|jOX0V^bZU8-f:jj顧JDN*q2+hm2g0SwR VΛFHG568_YV0ۢ!V) }j 8VjoNYgd D6Y]V|y"E{LDDd"(3aVUvgżJ?1R-`Xp2Ҳq7Wn\W^yH?fܮ.'ҳzn-\ ||s޳X.OS/Ǡ @8+Y/\;qD,IIt(zv;meɰb$%we'8CmQud70yOtKS/` I=K}ӓǺ@,Z!!6H;:КkC1Љ[E9P~ʔvr2.2g6vP{wJ?}V˴ uwKG]Oo72~c^m|Wwg~`O3}▘Ks ~9G)2cW*>UtCx`BnxW%O =tb`7u4D3ZH> kjJfamDB!,*{DZ1hh {k󦤲dQp\6j%_y"g[ŧ$ 󈂘ovo-I(tEST-vB;ސ?DSpUB J/ Y45hAD{8\/-l`YL#IO AzmvX] +>|2FH+_:LGˈcW!vHbDO} 9 X6ߏ {r`Et~p1)4P`CU#VǏ=)R,7;LQKwMpzr)V)}7{߲vnqt$)]oT*<( M3oq(FQMɗi3B5s"|o{&?ilzIe41RjʟuKE*+9 dp&u?ܸܰ], WIΨTE {ˋt bbfgOF{7L&c* cL#;9dSUn]>=8nTu%ɹ*L_az\@LrgAdJ0AӗJ\Go<5'(VQ|ޅ1.50|ra/DX!2[j" mGγ¶:oy Y|u+]P> Y{gN?x1/~a2~ 2$]^h|m05uϗpPI3vn@ ̛kN,㣍xh.JJϞ U8?ׂt^zݳ;K$̣! O_m#rZ oh+j"{U0G6)HL_{_Np$keMfj97|9MJ|QBYe:G3!끤)Jx`F6+ֱ?]c*HUcuZ 'hO`N8"4 oX<%Cҝilq3r1A grn1gARV[Zl/w#OL!0fS1L՘b֝ZƹtrAYɳnFg.<,%G[׎t;Sm.Ń9y&b`Y[_ jA^#Bه Ǧ6 &E)z5`4Hdi`XNv|%~%>;?tU8>F!̙Öq1A]@X0a%#dn!4>VmlUa7ɰ>eBHsD>Y,V9>ùOWY0s%Aw_7+?{zY ϓ/ķO%WݬK#c2p&J"@E,,J #M+AW1K|W%\@\A+ЧYlcz?' pwtEx5̥j})fcUbzw.Йl]T5/krtybYJMY_}''="ĊNvhDPmUs\T] .ܣ+r86ւL%yqv5m=5ꤹeb)N䛸n [H V$+#\nn-:M_(A)l-ٍ?4'1Eb(Mb 9Jj 3Jl:bHи )[8Ԛ\owiFQDJڮkh6 \.NN7ƠiW]?V\:aյAj1rh;\|>֙ɵkξ̬wC""#GYXю= K'Zgvu{Dj t+ʔ +| ¾"ؓ`SJ'Ÿѭ$K \xl}ܤeLkִҳ[`ɩ6JȋGWB tgp.elcܪGjgoߏ i:6l[Rd U~)\#GTamSG?|}5ᔧ dm WbY"o (@BbY075dM \_@5zeWNmBE}vی\@uY{iդB>BGF]^ʮE  NlB [oLSnCrIp.h rGk&0gGe5JKgM[P4S֠huKS>5l5ihQXh$r (d)E+ Yb9d`3 D6tIQ IpͰ&r^{Al {8]>2c2⯱3e.,Uv7 NUF'MLe;G#^>!mmYut}z:pf0>v?B{tbw$wr`?%+ >VdȐ ag*ӋKIj* #Kz=aHLwRfC.n5*;iG@gzHWu>*^AC?Xn׃x8Cs~*6|t>c@LQ̩hj }Fg$*SU"j\ڏ< UG)8m}\gta&ZɡQ!D"ʹ&{ڈcO[}rӇPUXajG8 3mt}_ -K Y簅e(l p~O.S/Fɵ\RdrÎKk>wV_Ņ4Mc@^M;X[W%+G|MC/'aI"#>Et'؃ k/6}+.Dr)ko*YvsU@.r_=k6=3Nלix8mbeVóŽE iԫtY a_T-t?f8z|qBߞ 8bBPz/KLcŴnnA[t!Wm!TIyv0WcM^K{wڽb SH 9Vy8Ft3oW哘X%%T=M{VkW©6h<Ψ^%) yn1\k[uPWMl}P]nynţ!ٰ"<jiT΄W?{t/J3]]؄ ;T%Ѱ\2E[S"ƺcPMu}"7$$x"ζ* {@_l? $dMm/IR˦bm,Oigyf5 '$j"$t#=юDڟT(ġh)rY kȸLGߤdF7?: UIT+)Y\BhvVzI9/lceB{M zfy6 ,0"DҥV#O T% !eWP*cܝzl,v^ܪeUufJ( Ld%FyE`v' W"WK^f/ZfSֽJG?ǩ4`;%6+XӨLl nL!JLdAAF|'Oa(C2EVe'zg߅LV.?e9 3de)PfJ3#o0V7÷xDg#O˿m"*w>͗|(ؐڰQ⺛F'mxYړѕ{$oJ(ЪK/oO'8v^e1l dG!=l7"0}4bd*ƗzџP2oB]THƏ//th52 XʹA-)I/3"96Y4 c,NjMy-b|C“5!P(ÿsI%E{Gt}$_?&2 9L;Cj[ӢaP5 <`Տd=9D5} iMO3ݕ2\u2Ma,Q*hzQQeoLW&>fhIJIf0YN7?d1^je8Geˑɛ~BM/VaF5AXPL&W%Ҳ̍VR;^_Ͳ2;'[2hI (@"Η%826D[lMy5^z=b^ZMl [.O X^"uW${E! T4`H/Fg uV287%]nk҅⠗hR[9}f<%Y9O7g7lٟZUHE37xrTo}48#'kXpӊrwd5MPήxM1+q~xae9] o8nЕ =fiSjeAV,29 [#c͹fH^4\mus *Ɯ-9fO3Eol(/We&SA5h9m=7su %&1!4$̅>jneDD| G BP~ܑ9 !<5-a ٕ8\]I( Vιk}5>{|XD`lFQY헵̨0L拿LnToh 3a_Œz΄`⡬Ј$TFg\ HZK\1 8LSFƋW==:pqq<=_'xiEo6s.w9eҬ*V}>Sl|肬g[Pq`1OSX~bp0&q휑9ͬasVdSGmJU;q$#EiWzjͯKMǘ߆4DI0RL݉#mHvM7m]{fCu!ѵ'Z]=|i$ݤe^<^rK2 ͯJ&'B}͉czCxvkz֩m+ :O_m;؆?]3S2 \Wl E5-.n:ŴZL6l[w0 ?djzEr^w*n4 gF*rf;kq>3KPD\h踀wCbi!RXi/P} R~H^<vRJ5UiFhed,7>:|j.>!n"ȞRcr=q1:Qʈa'|YHs ;ܩg}N~jP߳Bܳ4M}k*]2] VŲ^k0Y,*WMa2J4h!C{ ] 9b=R9Abai?LI_1ZWpj{=9=!Q46pT R\8τL {O*ThC&C2D%=V n2n Tٹ/J_ '@cX8Ik8*gNG`FN[@lh,˪2.HvFѬOŃ?)+}o3zʲ eVW&WaAY ޹js]FM 3>p/aE+YՊ+5.R D(Sceh%,{u,.Cӥ&V V\,F*ԗC9SN:k.KOp6C[qh2= i͛Rgjr%=#Z"·g%ln$gD1<< 0DJ9[cD'˓[B&tv+?I/W3`՟ޅXj6ב.;o,+dDvFs-Zk"5W2]#Ԯ!tf=ٱޗ.|k`hߐPҚZvdЫ8߸7m i.'ۚ.tƖG S cuqP'өfOgojm.oPúԽȵ\Τ-K BwNLOpULz:yƮ-+B%+!/b͑h<-({aWϛ=n@7#:A yeZ ز߻BH;u-nr-Ct}A1hUv'lbٚڍ0܃s:ȿ#oiJR 1iQ$eC}N)#M6#:w3q!my)q*z;U-I1 , hަN Й \/GFwb2eLw,uW[u6 "-@!J=!^8sIFW+,s$ "֝a0JMQ2FEWť5}D,ŗQ -fN4̒{Qy!IVzʣ9yQb$P\,M-H'Sf\6t>zݚ5p|.9!Apnaa"mU!Jrzbd[m-emزdRL.l[@ߏ4U[1_ð!j-9 ՎBI7~Cn*SQ񱊱K(v 1ɇh֓jR7DާtvŃ`Xknޗx/n't@/bt |fOp0WG."T.Vu6[%%qemOUۚJIZf0 A?.OҶ-3TuTH-G)59HD_ smgQ?s@^ Cd&[V[GL4"r/N 'fŇhle )Sq8۸8L#f.2ޕ3@@x2ьu+]>H] [IgOp'jxn0-PۚFn{ b,$@!2Vvɍw(&|;{*1 n0ijND+B2o}]cGVϫɀNB<mR\Spn?-6 ,V 9VxΌ,$UmWG'B'VjIy< 6~ib&],wdg 'v3=J׀I6j}aNa1rbАgp{]\td\F}&љk,lk}q-wM<]C4 NN {*bh=^bI O9E9YTLb"j2 P6nd<]~0'^# 3M(Up6X;@+{jeFJ2=m0UӀDEһ5h+ul#Yq7y&J-n )NJ#!b٨_Qn*T/0TogfT@Ua"pmjTV&{%Oq's%h][qNQc3ၖ/n"=6;%VjJt017h$p68DǵRIdP؝O*o3(TdƕCyQ~GhMʁ%7Mt5yR[J %ienPu 5!׏dk֛>7uHt7ڧ%eo}O< .9sk]-E~&!X$rjbRH*Jʒ#7-x1R0ف59zxϗ)txndYrwu2X2L|f59oO&I[#habEE lx|.otٌiX!ugVwa XeX&'WIywL3NaU[)s8J<%xKUjrQ :WW͙Y[<U,6ܖW^+QM:)(g&<75LX]iF@9&v{]Ix$ GNs>Jcྠ IZ,l$'jP?O,Fu|B6) #%}ֲ]l"}Dy"R}xR 'ĸAYD8",>{7ߤϻrӷb_ GhE/H%!{(IZ/&QyGݞao ۤ!;|۫WΰYAi^.?؍~ Ҹ)gET@Ggj9Pe=H0g<J yMawdFo!sp:ÒCpZJVѵzEy3V!C4}ۤҩ/'W|"B:w*j 1KM.5 pۚ0J%S;xĚʼ/0~>^|EkK .fR dݺC%_ғ̓.F+wz`n?9?Gaɱ ,}1f/V!.6]X5Yj/e[kvSMZ`B e+t2='4vUngNVKg4"Pp `e&4Do} k?#+{_Zi>(}ZBYGh"aWOt0X`r<YteF' \\$#c-)c6t10!gQ Q~meωXTe-E,DD$94 @#K`^x"gJ 3`W>[J_v s{Cm1_BB(\JÃ9er{PٵRAf>bv.]Q{Iр,iiB\u(ߏ``$DH|YB( c.r5)0oK:!swC$$2!ڵlDNO*}4 KC3d5=vqhEIܺE[$,4Jl[`` _9CG +Bo +SJc%%!z(o32&IJBR)zA(օ88[ cFdǂК7O{yIBhyB} Ҭ~V]1<|n?H%O 8u32صKp<nW{ ݕKHzRY_ʜ'&p U7J"q Y+)¥i;sBtK.:yߋbMR*gJ=Q(f.pb' &YtO 4IekI g ;}uzzU"#Ŝ$SV se`a~tC?Fj/g~z!qgv:̲nfJɊ?* n ʹzGvPcݘ)lCOsQ8>BO$8 ppe\L)Hbt3w_[͇ÕM(Y-WgR.pB:|mo%"_))b6]+wxKUkMw7&{%"Gc^N++ 1c!~|JbB(*fH7"}$(̰KȣM9 P~s`VI% E<eѸFdK[7&76G ]Nn ۱Gۖ ,rp4<ո pV!8 (RUOοBMqF |u" q ;i]ͨ+5Y!y*"I$W#㪤*iL]ĔGFMקI/WyM\o֓l~&)cΚN`l ܿ`;S`{l?Aw0VN! T1,G`5[j+śoJH3N^]I<W+{B@n/ /V0U؆T3t Vn"$p(%>}NqyIOOBLrdpR2*/M1҇xC|.t_})Ƈ;5>?7tͅ㮜\녖[pc50m4Mٷ ;034U0JZ$"r4uMb_one'qQ mLZPJ ' /a jaW;/S3 !ߒ%70Jrq<{svq[O'q=2Riz8YBܴ#}?(?zǀlF(t\ D{'q{fw1z9EZ83&-615%mt1n ߋ_.oNe 3C3biуNkŻ/2ke =NI'%j!?`70: ιlں< {0iJ-tbڢULAuT U媆@NbqB!kw[v-BlocͺwNfv/9Ek-UHڄ"Thؑ2gc,E2=q(P 8q:K~G=.J8F3JDMCh0 eeluf9ě'i¤ѵcWc)]rCxOhu9Y% ^NR:?^Y\%i Y@y =[W# ;P}iiQ-h@u0|N'|Vf5Jۋ-\_TsVkQ]w_G ZR#ʷŝi?ZC,><(=UZ#D }ipH句11Olz h:ĭu#>z]^ebnkKۼ}Ax.c2͇йy-^*Q5 w2ZUջ5T9` RZ͑Fbceo^vO-@*ZF=cF"d]j_)1OtPg }ƕ me޵sw`6<]UnoAZw#)#E!hdcOl?:~ Z(!RzJn2(n؛?|ƪAlu b躙ՎGdfN㥸TYYVv3y>! b89-AW`=equ\!dͨ#u&g$r39ON8>eP:vM%eLԨ-,d)Ԭ+uHXx$W%Xz%[*o#@Mm"H7,[Q Ջ PnsQTeD65dߝc^ٌ߳r$ *[V,V@BL]гEGy']T˫rmvxEW%hEzE^QHj@#& ngB% "vr^AC̽@]yap:klC|vp* 0Q!IݙtEEV5+.Q5FIh-zX9ZyHy(fI5̏2Ti6Q԰w.ة^XT{Zzr&P:L1{`-*3K+\"Pۥ3'JWFxTI$)4۹}T\5Z<8Xy*V%7(HStץ0d 0'`|TҪi|;oAxx@n)%»g xɇkzꧾ} /7v5@*n.Ћkݼ5dUip}/Dl OSUx6d ī8};y-[hMNHGU|N).!ŷٵx=$o/*#T`Q~)x4Tg$l^x>VdC3ؾWBT1){j$/&Nm-b3;EI,EHː3uȎ.M1f*5V ~6o>ԍk,B{)E"9P=H4ul$Tma /|,Qe1ww2k)&)Q"Vݜu3ӓDn.\IëJ枙#K~Fʓ{zgHsP˞E?eVPRy|h ;:̢QʬveTPg?ۮs.\ޗI| sqnT]b?O;S h(,Xw2$*B9ccçu퓚+yYR.T<% ֮36X KՉY}σ1"7j qEZ4܏))ƬrJ1'{ kL~V_T[vO"04 (r4f_TƉM s@!'L\GwV(@ y#w f f'tvc Ӽ2{{advj<w".E P%yL:E-b9OsR GUT.-@ f7(,‰ NY|)y2}AdcRINKjhQz#;VADtjMkEw?YR RvY{ĝ}qB9ŵH0LSnhG7: 85` u0 yqo<{LK6%70^Q49:1(BXf=f`Gw6^wu yMHrbJ Z7@_ N_C|-]yi%o$h'i;EkWK-4quqͰ+{L~;mtQK߲\~LFJOr@)!9oB23P;Ñ7 ll' \._>ۮU;.];1o9vqv7љ`\YIUH)6/l`bK,4hУ^3mw՗ +2b[޼`,stʤD/"h,!<|#fMf~3(,mw=ʐccI`3_r5:Tb~|9kѦTvvjxz&n 'ǐa(MD[B9<r#aD2o%̮E~@HA@(浠4w4%@wI 'QaX3A+\?U82&ZnF%NW)Ό2KEC\/G% Bl0 E{SkV}αt<7L-6vr x~)b(S֤h,oES~a 6@իˌ]2Ή!F 9Y"g̜;kK8(~Gt&C\Q70cPvS|߶*uZ91xv6K7xgmEke難R} 8HAGMMW.5HޛZy8K¹E(f.$Y,wҊ.BuZҾ4yd4}/~͊X" G|P;@(c#i-Š|]{Lt].by99= @u7H0c$CD۳ GOrrSҺÎG䡢C+H[fAO*eX)s-`$MqdUe2eSXdYR&GI'P\U :"HXLvDM>hO<[xci::bd1mo`պg#,/8?]  4E%5t ?^V}(ۭT{ٳN#g 5Q֝9V>TcuHB7(¯5NS6W偸bFOЉj%^dⳛ8F / a{0F/gi.*h&jN̪܄ <,hcF;J:y QNGT~)>|c3'J|X HOƑǹSƕD%$+P>]T9ߡ饠 "-~]ik}ݙh_;Δ-?--69 Cz@{[7W=K5't )]F'@ 3'.3]grb=KIv9Ed_ lYk#+]SC\@Κypkvm& ,$! 34R9QJA蟆6 j*$-+buZ}@=g2bgx8g깗.DrA|%'-y -k;;iHpe$@GȐPRfujK-R4>[Ȼ alYu8D-U&0Zrl_ dbNasHEjƛC8x")j'g> 1,EMH1΅NGo.ïɜpSX>h$n|&WVv=ΕXP4i Z"QydžEx 4o?׌69B.lyk@En=s[&Mu{3xP &O6LS"GQr8*tϷDя*iWy Pt "醜nt̞.6V{e8Fr0\Qu3g2R;Zh 5tFl>w_}#T!!ԳlQNC?}Sv&8_kG~CWBMg ڄ_3k-^-XA`Uu4|Gl\s_vq8?0t0i%F7f~˧*o}h1PZ"s8luЮX kHT]jS.?%25/Ⱦ0c_doia) MPt'8l?#zWigvmg8!(]M[|9X=wEb<6۸"dk&f5O﷣1I?+'tJ<]$ݱo<&2#=.4L@ ԅ1Z|ޫWiSJo}:7TZʿgg%3|ۚ%]T+ TMc"7\YEt!Pȉc`g],ސgSձ u_f䡘_eq}JP@۶-GYY"TdInN N=8sK%H)6׵C8%T(Ŗ?DeD fޝWFU,^F,@xUtl\If5Aag*a܊x 븰װ7jhd/m7|9y8JyxMO߽C;f82Qs!s' @|'1'ߎZ7pe$@s 2Z`XFI u7hN_6$7W'@wo@){_0ײ9 4qێF<# ]Ĺ[7$&BYHd/ D P%o fv~ñ#t2`;FWS2aA/,ս/`$pO ._-6 ~ =I;뫥STLɍXfY7ciP(uЋ>Dh̄)A+fb}B{?( D%F-LJ*ò3!&&_ PظDnrI@ȇYζ<W: JGI0<*H֯ob)t6~1k ɵL䜘& mxG|?7W$hLԡcec]ЙJT{!.'{پ ZTy$*mK! ]QvXwUU1Ꜭ4iu9z/$sLBP7\?nNҸSJ&&Usx,:Д q"{GdʓSs޷.$PgEjd3p|/ʊ J_sZ:;l8| S0ղaY28^=p(ߺj Δn1`iJG&@0鍎㻩$iЈYΞV% u$FKιGIw׶@*E~߬&ʹ ↡]W%L-^l,7R7Ve\϶^:ޙ|畕jء2:ٮZZWE؄6gTjk1p"lbƘ#z6|rIeˇ^ @X>l>D1ts a(g08\0>yOBQT?`ֱOjfsb]i-[ȍ0qOKOI G Vlseܹ]Z=9tKkA$"`@puȇU8-U*kviR&5|U(EGbs(# cm hs(_2W54: 3>!_]N1IU0|٭<jhВQ-P"(ij/Tap.ѿvpr[1eDL"|w [ So4oM3ct &9\=aM&e0SP^bZUu7v=xlNDe[{ iQ6.}J|5S{M2hD P?՟rchp}Vo]/Q`pDlVWxM-U ZG9HqKeLÚB kD03ӑe 4FjJ"?gh1^ |wEw5!72EߴO{6 \c4GmPPHbd(ޔRuljB8#jg4t-hhǧd[®j0f^_ZW\Uy[t4$M[wtɗG݉ vfDc 7.wרSaytA谲S*~k(SGO<+Or1*gL |G5s2"`'T#7e(wIu8H\oxR1c:pVKE`?iASMasZr.}y%69)Ru/if]*ǷQ܌cؘ/P$aň"K3JRߡ\Al阨r#{^s?lbL:wQנ5Lhr9L):P XBF/insI$g]1{mh[xMH6|vB}"YgAn?cQ_ tu5++DI½ CW趾rխ(!Q]xjXYCD,Xw~k}fQqL,ƒM΃ CXS{[@"÷sKQ QSzz,K<$?~EI)(6 Rn-Id#P66eJӛд:)jx@s@ 7τV6SM ҝߛM7g:LȩBw oI;Glc3n0oZ^-fR ]lIN$[Z%!p>Mp2x:H~}EgU{S윩z\TY}goN7LKy8~tJtjD/7ӨtIѧv6^$0Nvze"yՑ9 rfJ|RdK`B%X݉i">&#X(tZ"hY {C|BͲp뒖j6oM.ΓMJXu̾]b/ V{7ۡJYgB5{U4\T;qD g+>OS2ëD yZ{t.<4@d%DԲ~(S`<儰D3yYv:ڛE'V$U^I % U7ga&11pLҾFApwivCQ6Ilq<I;bυ,7hPy?QPVxr TRðBD! rf@)ZPfHIExPrz⬓8L=8wj\! Kz)ֱ=nޢ 2;3p t5@t*(Աrvz!s:$t$/NElvX͕w5e4 E)m.JJOe{2a`FxPR he}%q[>-}vD׺υ<$~:@PᴥShC1c#N1a6 ؁n\.Guo2X ϕ-`BopqU󍉐j q G5 J2Yܑh5U’OԱvFQdP2+ 6ַ5%+Դ 3U1kzyF0"vxSy(fT#5dlS:S@1^6oD%fsLwz =Co8T>oЫ(4Z^ 2A+eFEJm$(,vo܍U ;#%8"L@-R?,)M ʘEnYB4}En9Jd"ݟO9A7ӇWa&x ^(B7-Ne'\(dAgoːfT)fݾ "CG1;W6**W+Tk;i}ڱުVŨ ./몹lG.aәL8ChnU yPP(h`8&c^k,F 8X]pѳCZ:{>z}3H!Jt_{^beyHL` Fr L*d]7vd3]훞H̀78y(kfs2j:Kd ?*UFq̈; ûr:)׍ՓђV$PCP?gN-\))d͝o|fU5kq=@)=92HPz+MH3\g~IKHKD> Z$JC3.ǔve~sG8{=cڗH'=sE)0BTbdAdg.orSrj=q}iZƗf'ױw8.C߲sI⑜!cC磐\@PQ\f֐'|mJYɽI)MQ)uڞS_i6F{ s_lc a1*ߋl-w! /F8hHTLohQ3=3I \L.⣔a4c~(`ѐ eڸ@ #-S^VE9;?a.(MB_n]VUTA~r 4`7[DRI;_UKOf U$*DkFҘKYc݄U{RP#Z ,ַ~?R^wv ?+b ib:h! ;MuCуED$IM&*1u>X%{ZI?j*'~vʵMCgQS+'CQ%y$|?/mx ƫBQT裴6$s9:*1{1yz[nє0[jB0rh6ɸhϦ~ͻeayd<"W ~1-\0(8Ȓ--('ZW[rqbթQvzF&j 1uj񵑰3J[aϊq҅=P&Kd4#b Zn3s9±XRkWq_ɀ ۿZ(~a]L$b,._( 7~Lp_7z#jtn4Dj!.ӗ vۻp2lgҧ"%M! BMba1 GXǡC#81ϑCA"gcVMA#9Yu&k|!2TdYҝC^M;^2 Cяj7SRcwV_~^i@,A~8:Q ɸ`{!*1lˑSCN{))u>$~'>b@|aZ՘N%b9w>0hpB*(IJ `F)DɫCFjpD0$Iu~e-g .iEԂ;^` V0exiK`vOT~o~z9YkS<| z"4bm#-&%3}L^ݒ-:K\Jȅ3EsLQp$ f0Uy̍D6^5:ﮠr* kMYTt5I!朗Ens(S#_s*Ap!:qWFO7] uBE|ovӝ+;LvU P]K⍻9|7ǞyD1 %QY<»` ғ_`zeBZ^km$+%_2g0$VEhm/fPF Tj9ߪz'z?~񴳩o 2Us܁QLZ>KvYWS>c&72G:^Z-yj!)-UJE] uA Ij3]zW rI2lnrq›@A{>܍n\i8 5%B ¹S#-Z`uBG.jRDA3f!FD\L:*42]QH ;E$;ڛm pt@sMyIrsi<43shO PLBpsfg(/ƉKw"hJtkžf-LJΟ ڒTtd%I_ 6.(l%uc %s`5K'>ix+xAbf1'[RΩ2@BAɺM ,%G2TP6hqrJnn,0 Ґ#(t<ypya=skJP/+k N[%v Lo~YڷVm8kBxlw:U,↋b qG.##h7GW74>-CpES4T}H|ƃ},TwM8BպV뿣:p1n1j+UXǡF,hG7QPݮe匵=;mЃbGڗ/w?Z|,0M_;yqD$E**sH1%TqI ڞ d~|痥E&\Pc^^c`@'GXUbGdQ)(]=IV5drp7snFd핒\}>32^G%+.63=doL ?ZE6 nŌ0ȑ(N1KvߌpL,X 92:-t# ^G|&pHZ-1}S~a3"d?iD]vÖY]l'6" YjzT$rP-)&=:0 Kՙ U@€-yd(F@U{=qjBȯɌ1]FD% }_hNjTW#([{`b%+_#35q:#ɉo=nt$+櫟>ȃ&h,(F]2%.V/7:?c|aG G,H!CkEzЋAjxsжwq3_=.Uقhꠎ^1ӂ>D~)SLO8\&Jirk+ >Jbjoq30UD71k4|&3&HShͼ!`ҟB]p>~+H汞 vإS^[AdSs6hԗg+D!Z8 ΚSmKO;}c[ rˆ .YǬF>*lވN\??=ֶ,+[7wڿcyݕ 2.i2ȆӾeC,w-AWߙ8 JI${Љ%G N"e_dܕ#@Z[,2{P8T6{BW P\pBԂOPּlCm~wޭ;{^Ӊe7^ʫjŎp|x3R&k6&ElagfQu/oY}j8TWVe 菐|.s/L$Q$7Wd4La.)z$D0'ϔ-+GŬgCNˍP,,3ns)![+M^ju5yC;srʝ5 AdJDys`; g{VyVέH59jYAkVablȅQx 8)Ј0ϪСOhx.$ߠ fQ`&&ГPs^g(aw~RELlZ_]n\W&rpe]^0\{N:{ 9< T̅. TFF9E7̐/.(1%?"0UbBi!SuqTCm9{B\QW|6-}@)E8XOqcȆ=݌6?w?VpOH?V_Җ uἰW G8N*rzբjQ&WEPyo0/P8R9yd E)KEĸ4XajBJ`b3CO7GZ%D,al`24+x. Yf@ɯ&d$Մn+s+X ݦ1eqRDH'0#;>6|B[mUv~YWZjb0/:WS77)cYX`Md݉B2bL=~Ն@kɊv*dI p8^ OhM#}e&S%1%"bh qtLB_s\}/CӟixnſqX;xRF2E|!4@. ɮX3Gv}PF|C|1&h[Li01z\B-PkcWf–Qq 1)`/ I~@h-xb/!.ؿV5.J5ѫB._ҡ 4¨{K@7S~Ǩ Y;~f/AQT:0#~'}dXS;{u+ qЂ)=̻kT׍w$vMFB}KY0æI"=(Oöa|w+ZAp :g3xEteώthp9!ٌ^̀@L^2A@.u0¤o*_ 'ьHKOU,'e6{>#F>ur7bW'RZbk ȠP|]*fmWܦT͐_84ԤG,Z4mܞ*'&ގnih@p9SRQ>QDi!sx<%7_m;}s„2nnXcLEÜ]XsqDJ*[Rk=$W\k%7.FvӠӂ\8 _+ &ըe_Xf[ >k$_#cCJs f4s , 快u6"6Ah5(~ &]`S8h]Vp!YME\H(-ԐXϢi$5*BYR>H>>wc,o1ݩ;dun_V_,=* xp~7;tp{u$Z۞ !i'LTx%+n^VFN.K%{Sd)G72C{i@bQM :RZ!_%Od/ʕS6Ce{0o_yE >b3$ $RJ%يReqo @^tWȱWIf9DwOK}z2*|zM!/k9C?mpKgqu&R:䮱QD7zG*~Alx6hi,<- 6$E1Y8O ZwLKMR 7pॕmCc9'ZagPj*_fHA3ԫ_̡qFfȒ9cszmvECreueu ~]zϫZȈ56*'Z!OAN'J}Xn3?>t>~q!AeBT]3Ln*/j+AE,b0QHo C&Y1yhm̸o mDC;O7 ztʷ/ߝOGBW*xUI#lOK#\44Q锢5Z3V#u}q8*̭۬Q)1]< N ހzUt,^̌9 ,Ʉn,:}-7&ǧ<+18Z!^%!@R_#bʔb|ӵO3jeHtB')eW \HDUעJ3^{fMgf weeJ$# #7rR/FVO2+t-V?`_~y,f SܬAeiюwBU?6wgzN#X5(VBrIptYIl$3\3H>%VSɕTRPaI󆓏 ^V36Oa6.\ Fn;{P:AFh%7ugf%yհaDTB0! 3uAygYZưp1S}6o:QJvм.^8;=^po7[5O[>F*Iڙ}ƜPFNrHvߔ-){GPᗺAoXOR~yc̮S]E *\s6Bߊխh`|3ojM*^emkVǻɍ4B o] x3\m&J^䔊Sxo¾;7XC3d[?#g*־L) Niע?%o"fkDT)v>3 ?R'>2ѿmj >:T O1e!7<еhAO^X\%V2 tLJUf)0ZkQӭwE?u6 H!ΗvTs#!#5Ɏ;bb<#) ե\o\eG_'O*mf<7Y$ŝ-t8k1&S[AjڧCgrʖ K',Ј+p[Jvp ȓdx0Gta"%k`Q ϝ]\勫2|zܬH6UCawHPDŽwm#I*/^Si' |<1u:ݜ@(Dَuԓx"H zSGi mNKTAk>wz'F3:gs"ͤTj yK)9ZɥAix N=C6|zk!q[& 9r<Z)03q1`8GmP3)giy"G|"Ӝ\$hʱ{m|(1⽼z@,/Ɛ4 )J~LFNidNNJBXd>muUiLӍGL@.Exu6<ąuh$pM?:)}>056]yԣpg#)(C|gϹT:{߹Ąh}m>ި {v6| b^I*FDw>h>ҡ!!iO_%9-i5;qvfz09~Y YRj*1y*ϡC{ =G_(^8./E^LB 3%{h,IixI CXs&$ukUyn965q<ѱC!20eoZL aFO,LF|#2/xr'QSxI]eŒEl&~(_0CE dP9n[%H?bZ0UYoʷXRgEuf^`ɢx@!#Q Zǝ ,U9%h5M_lYSwbя5MPήDrVF8Z'u0Tz>>__<5v.S\Bh_S$7'x0"̦ݕ0-*fkd 9}&c`RS.\a?mbHL  4tߡ?X8&YMKxyQڀ >^fi8HILGۡLs@6$n;q5ĎHw0{>%w]H[CB%8NW1j +WxLSz;2/p^Z7RjXICH짇gC~ˈ.ALmmbx0E)oW?:%5XocxuYLqcW3 {>1BE.KADױ HLĞSk-]7ڮB} 0C˷ך'6: w㥸 aC=Itw1ݻv!(ذj#S#/^q`&f!EjL%(h4R|݇FktמI9qA5=.uKB8̦ߛQ3\can~f-Jd帱G2|>X,R(GjMu )aF,dO*X6${N7IYm'u84!6zSX/G$ EװF$vOb5hp_$VA00V`N֢~s:]y$.3頵enr۳+ي5烨4dӪr+MD66 ]9-c&5L'U8wP89s+mܛ>Tmq4jF?Z&fts1~&3o,jLI n%򘔳=)~\GCrfX%-CJQ- P.k\2rEks픁C۪_Xyp` &ba %Գi1tIIlAB+'jg矗l-G}9spn -DeMQ@jg. WV9#ol(Ҡц%­--)P]Q6J ȾnlN1]Z4QI| ~ 8Ah jN36Ipi oS?_/MQgۖ]$Qc(l=n VXw)-Ҏ$;4۞|o}6uRCuDM̤)2~FYPp4"B(tU&%@E) 3\\ 9g Z.ՏQ򋝣ZeCv`k"AFw:".Hty\('+13TS&F>{NǗ-B>+TL02-&TR >E4k]X0 :Q*r;\Y)K'i[ȸur=E~%@-`Vo @2sq~;p&8?ywT׿}_X* I{a=}U˷NpaaSuA>ݷYt0;Yq<$){[MY,,ifn aǨ֣{@!a@/pUw)m"uAs;;-xm.ښ*s?'1O˻{2? _N,B`b9@IkDeu!<ީ})lN+Xr!lWR9%/ tL](܍e/ (@q_HOMiU؂{N?(.urPLf+A1*`<7)ġϋ>;@wf}U邡)aTLTL\x}~9>(~8&[ӧfk%?%M twzmM,,MZ p|4s2q?\MeCު [&8[HѠBY+(9oj?965p7)Pa6./اl[CBȗDhW3D½|3:jZіLޢQrBӇB`#993PaD]74f$mUngNnfip53O^7pϑw2mWo'~Ocأ-K-Қ.{(p۷x IwuoqPӐ $0SW֮3b :LOguAтypSتRqqkS1޽Qq<ˠEmVbvOެ=xɈg7-VjIJ`}32LVQS͢nʂCB}3t:Tt5iYB^:id& /Y dV(TP>|e'xGWώdgG1uFQ\LyF3ͱY OMG#g`Jᡒ:7ɗ#.SmZ8M쌜+g#̿]]1Z40#˘/l6MÆ8[xp!lg8~+EaO.+βI](SJ e,%gLWϳޠ;;6}h?,F?<.Ћsl,Q_il5-ڌ  ܨ1Jy-9"{"^L֑cW{Ȝps@EShL˫ J(RxxZW?P#0_g뜌j]Rx *D4#Fܤ TgP@zM):!M&ul'*F*i+}D7Jwz^ԁ`]_yQy"vvnI aqdW^R:萫k'\A?K濫3J)͟#C[\ e-1ЫBUFmrRooE6\,3l`i8ápM9^qosL?8dzK1}4Å<"/,9 RIӀX]w5x76Y^o̬.h utQafy~.R_9wT #G}Gb 6-o^$ħu*gΤB"dfC,!l+=zgВ# PEy@L=ckL5DbܭU?UJ\3-{p.C^"(ҕP-|M{ >7AQbWG$`rsibSe* Κzn.)-nF^1P{GRqy9>SpNSކviЦ(e6~y7k6U].xqH6:봳/%Pǘ~ {>th\DPa#O~*`%3ǀ iq%"l;Y(V!!Xu0E @{ES-wG*7e㩄)Le?|Icdp52 +W|Z. 3Uc FT WC, o]!>zqr6/$ )>H_*ȭ6y$ x5Y4L fcR5`5h`64"ns Ԗ/DQWiHkK\/d߀aajSǧ@ -jp |֔:Hxj񇓁(XB+u`bC{_&( pF˜3`*֌11{{p!ḗ0ÑMME]:˫=FjeTpfwzOC%TDHOHyy6b)-f5ɝi>OV\#l\0~tX[K֤.LGmھvKkadÁ4%,u^zgP9:<O*&[NmoܭŒJ=ǏWZ>ԞE\Z94tQw39z(H`jm@ iB162f ǏDSƆqGﲾEly=$IѓJ8H6hSs5ZSꪾq|v{Zq[x# 5O[f Ued.)ó寥xwlJ)?"eclmB`Z.A.xj1㗗΂ԟu2&@"f/HV2)")|1).4K$[*؄AuƴeQ_G}gDB"_{IQXRrͥ pUu%zl|r;̿B`*Vp.jG KcRQAªfݿ*lgmQdR^rS '9!'[Uf @hJB B\{"rf?Q>r+LlS`k$RE!30Sc {,G={m/wLjS E<R*;]-}G6n1ǀiu^f焢$aMwf ~bfw68p +DFAZ>4Tead Y!lLsGl&jM}3+[ڶ5;U|!su$Qf}v _{ ֛fKg2 ܶjuG$JUXe!@} WUZ˩wPN`ZئpMF'SrkIsDI =]j ) MjuEuF0[N?6Gyݐ15chhx]%Unj G';wõ:R.It< #SHrQ &ivaQUvNL +P7SE}Qޱ!{’ٙ~"O4$5Y%½)~{7J+J>H/J!>SXh .sQ˖crI#-T?`rK(AkUf%&0UPB5G ?B#.( 6F ,ie9qiQ%O.x AQ[ z[fmэݒJ2KOH-,HtnmvEaK(EB$!W9 ArE\B^"5*T7#qP]_`AնGw;N?$C(X"Չ}-9dEN[h،1_ϣ_q=Y+E3ѿp*l-ՄpLr_1?,8tkYwhrLj/{6)"_=j?/gGUt)NzPE~L"KI\0fFkf+)elL,ID[T)SڔJ0j>D3P!F~ ɱ8u\Jy}x(o6đ9Ue"4\iɇ0֌$-P_܅_.xD`hrM0Zt  k'GI=ptv"L%0(UFnY@F:2BX+DWϮ)ſo",@Q݌5k ߙC_21 ҼZK~@zeEƨ> 8/x#e5Z ҡ@8Fh[c([R3FOP&J>H˖c-JŖqFAŴ "ХՂ[Z7jX8HҞvGA2N'RZWK[1>&ģێAgaG-ngHi׮&c?nG'^tx{թn[kt앦K $j.Mީp9  -ňaan)ƹTL{$qdNZ`ylDȞϦ(BI\cD'˭]t6c]hrBa|4EtO\&9\Ha6VxkHNd M;9"οx+S@HV}IqcP GhקI0(V&P^VOΌ4fyBՃ-p<'\Iow@a  $^[*'s!O g6gVL0VC(r{ qݤU( 4k $Kݿ~nV=/'}e/&rُ)&W8CjE |N#'Ԅ\6??6;l[J.C/G}]tP⎡e4L\IZQqz YHQeq{֢'j[ʸ}漳ϝJ9Z.K mUOLJ&qY2R67GؙQkp80#?TWu:`2]nŷMf(ʁCO8VZ*K.vR4kNJߦ*/Oef|5Ȅ_oێzl<ljs+y d7+UuԑtotlkȘ0%nk׼%D |0uC.OYݿPK|MumR8YU1z»|mrPY|IX$!n:[XK#s(ogHk`ztWO(G"kEt|ҧ?CȘV*锊2= D$X?2.x9A.:?HD548ۖf}hD,4'r@趁8ޜƾ1jzjfHb>e̊NR5-@^ B4<0xM*N1\XELЋ8mQW\y <njW(r?gcJ%ݎ$c^vcS,v! f._|F^/gf7̂R+9 ʲ0֋gsFoaݎN0c om~蟥XGƦ:5C=2*xM;1.ԢG5Y[[RHf w `PZXl} b Zx /ԘhB,Ov~~\$&3'E40FKkx =Z%!ܥt ?<`k~֭rWd&yn]֑k+ k]v!'85;6> |1agL"%> 0kT\!5m4oBU1lb1 c)[If5/?W  ,]҇}v%|A3`:adYeAyDJ7(b*WĐ0b ͎+:%yj8`;x8|8W{t@ ۡד,6p6Qݗh~<\LѲm}'_ѤG:x1YRDa,|\lv0Q,8@ySPaw^$c-pg|\w.sBw#.lu}GVDG!Ӗ[1#GZH^3:zO`ųdJɵZn Ah7k礶Gy) M=\N ؝Fgrt"cآj `Bt\ 8vOk}Or tU`24m킜X3i{]D VSմB(B(Qu::+.J̝xZRpHŏ\O*?~R#B~Ctot=sjh*:ޑ哑$ .sc4tX-X7{HZ`w޷-72aމSz喳bUۢS9*r6؞7f:ch`T{ɘ/vY2@}1wFGn~KZWyl\5j<IKf+ՅZG5!4:.65砈h?>BkuUiYx%L3/6l"ZQ7x]91$tX8]Z5y}ܰsP- ur͉ 36 q*Y5fazeĶG@t`B6@^ kAd2H`Z2pÄE7)JDD|Ԓ}풢 f~g蓊FEwhnr{HCJ~ v_t则B2Ȭj>K U%<-h h,W`Ҏw(T8Ӕݲn㎪t(i‘J&76Na D pIΏ12( ȝ:WY\哭AL(=ޯ89@irL(cKrP]7.z"B*^/ Y`t];:b^IO 1x `\؎x*yMfj`2Z  aAO|^v OU a|AWmh['5*qUcJ}O*k2 ^>'!z@MrQվ#ĭ"a-xv:Ms9 _e4Ď/i/HR-`BܘLPʗ5! 56TQB< SOֵ~յ ==D`;Ċf58y3 R] .ϲJef t9]t& pL : 0w7 uX@y!wݨO>8@dgF'\ bv*,IWӲGlne]^ݹcRO!KO}*ߡPf>[}: c$b[xNkB>[fe,|U0ɪu^N2+% ¶WK*4"@DB|H`@NT|wۃ Au2%?,L1hvp_G&!I8S ݻsC BIBbr4 {` ;ȸlp%kcVU^{F),d; O`7B2xy /sЎj"lN_ Mϰ f#eb%iD((@_nk+pA@Vi#7Dڼƒ,T!)0X >eBuTC<|RVŧU>kt/ThHoi`cԂ;5JZWpUqȶM;*"I}41F(ˉlhbG_66~pdchf!|ڿo#,)0q^;EH@ 4gÛk3msm]{gHCk;h~u.m3표{"Y1vD)Iri fLP%dl^wOؼ1o}aj (B%h?܆] KA- 5,#B71ԫz֠IxW-apY5"uώR/;7t2.lfCZ; tuy"~.|E.VbNO e*z6ZA4ԨrbD##vĒ4)n58)Kw7D1 x$J,q 9CE8+JkJ5ud`}C1 #N*QJ oHr^d=2Jj'0R < }r8>/,-|=RIֹAϳw |G$eQS1AQtO}J1zl1*$7mÓM"CԨMrK-oxmOn.I)0ӠI> !>'pO{"& gVWC l?G&YOg=ShGh^=L 7kȡ@DOͭ)Hخ{W]]Q: Un?adჰ(6 iG*vck%潻'@/tͫ,d/s{6^ho^]z@,SRͨ:+>1@|Uhf]jiv-]w|%M?KTkHL; k'F Hز_wD vPst܋<ӊ)Zl=,S΄X*Mp^mX6zh75pʆ74*r ! ofevlycNkbIZyЅn&D鬟Itt(I +aP΂:Q GBQݼfgEJsEd/f!Ktd[3~DKA-~u:&Cc˹svz X6xU^1+<S a*qF|i!>Pm/>pWCk[?jPEr.uˑ~̕p$`W8u!fXנ53ɆI**Kqsrn"hdg*Sq y>Qد?Rd =NkS]8Fk`ʂ5ҾI`fa|k|׊3yx{1G꽢ĚQ r~(΄A+h;Pdj40qL-7UsTyƬcϏ!}l(B 1|C.ZNJ$8;ր祱'C,u>Htij%FFٵ4m(fAR ʁW΄!,t G+"$衃1o =>D7oʅ$NšaRx DHMsdQC[/!#-& mfjRx)D<ZgvKh4Zr1SM!WUPKm@Ԥc531` 8l \/&W߹aZ&C+n|qʽ !4u[FdY7{2̓}c$\bL9핪e{؞R.7]av#,yODjܪF.Lg8a= z`m9 7i 5[%X"f~I_ b%^&)䄭'o8$NZgdnyprݰJH'#@)<9@q e4Ε'٠XCcMޢw")m-.#noʙlY \OZ oB@ xhjVge_2 I$]#:QAb+LX I T$"m䟶-So_yvm PH;0#ئWE*7j!dnaO77>&%IMi:&3;k-('2lK9U}3zǔ(@v= =XQvq5M}c6Rb,~oQ ȹMmlLP؈FXÏøtp>%&3F52P Ų7rN_Ib잎l@yN3lCS[7>5S4*SֶÄ͐$G"ӆoQXChc`O0<YW6ACT?eEbv3 vGSTe[My "&n_c?@txbx1zkסb)Ax{?0i,NFm9xQn<yyЋ=l蝂5Gh B C_EAK9v\ '%;䉮'RS9 nPp7mw@veBnC]lGdmـ;pw:`9 > pyo/b˳sޓu.?emƍ@ٵ{*sIh&J^*ͱLMIC5GIB~1z]{d( SZ C c"aL՚":d9|u%$C ,! Ʉx7#s8ΩH_X;1轎XT@j2d 8,EJ<g5zvY>CaD6Cx939q!UZqIIJ?0B)ߢ4v<@ ֆ$#֯.lytƈ =mPL2޲,6a^­JAnis6[ Ҽ>Jѯ0lZ1.sܐqdjΥgkAϧGxFߺҩMK喧ghFªSi٫,smz\¨# {n}xu$N@lk僕kИzvr4ٜ:lI7Ip乕ŀtŶwhX&شR^gyĕ-:K<4]SWszbD^7OҰwWh vyy od>os #-.mg$|;iM,6X [qa2㪩("<䙻e`,fV*E[׭G{ LH`!=k\̿`Z*JX/YCT ˝}pwXA1N -7QD`e\,p)zg6BAulsB4]9o$0jB`۰}@aL`H2⬮WeN95JRʳ񑽓3%H-qs_T_X G0 8.]yI2 0>,H· F,d&{:Yp@l%V{aN8$eY)G278]շ`j`ҭ'`譞党w^Z 5+\`M0-7,tu{fHS+׍FSaŗpoi^ʬDhzF.^˧ NJNR| { O 1Yڹ4 ]!? q*RYvbvk_ڂ[5RXΊ_rLu@/Ip"S0CQ7F &Mtګkאm( HA(đN:V8r?N|Тr%*[5zsXېb]V)<>IGDJDp9BL2vqh} >Tvd af|ct!/1I"e)|DWS E9a?>'>&]$5X{t>&ySf}o>PT !roh)LU,u8=W 0d)b -rʜՏ[L%.ƁL iIBkkmLY+^ah?a@*gțG,ͲNFK fMhE*KAyb}Ԣ9yHR @ܛ rѩϬ X3f !%F뻧S`el ͳO4eBmWI)]6-g60EPPp1]]6Ǵy]ޙAPC3xj %T<_v("B?p+I?b1VDk]2q&[n%$2b70(+2^ABw`f8Q?g xhݱx6 O[B f @U&TܴN; oRtwEfX fq)Uw)UwZ tLMmȈ]*iTJSÞ]lHh 89M5xIS.fC)!;+hK`0ޒ{ק-`"&HAea7/UxU%x|6=n@J\ej'9v8Ⱥ^[|Et$Y-D4iI*;eNZKdoGC8WHr?QLGՌqΧi Y2wQH=JeJ" &]L8D?E]q. g0#y!rJ~U|4xz!h-b` y: F% )7ErYħ&ME~jgW85Ogm<\?.V#uI T$j-"8%ΣBPQ@Os'aM=|1f!8ttdG!]*43]Z>' |EWq`G:/ 7ʥ0.!snzKS}l =& {VJ:.2o-ࡔB(MȹF(9dW'Х,s~T+! \FTc P=oWo <};k.OHYz(G?~.X< yF \$x[t܏E8 tbDMoq̀U4\]\A e{I\}(37kwoFDx"ҭ@L,^O۔yj|+Âe "H4x00ﵷZ>`Mɜf4"[ۿ;E HACnöObqĭY(d(dd۷竄Id[\pP  V̋sLk$YDUԃ-$&K[+D3?RlRD!o^-q4u&q/?:. VLS p-]>f+ӂH>λ!Zxcsr}i1ݡI~ݻ:쇣*K^]Iۇ5S}۷*8Aw;"3X daɧ"uu-'BSNr4ʮ;\_#TZp)NH L^w>UoZ{ @V຋D׃8-UŻbH""(xpT:Net֚aիѧ5L gͷ~h7?(mB=cS]bٹ$QiM;W@5vMc9JjrYdIqN[{8g=jS2\'Mzj0eWC6ЈŋYψ?5 |iOFd!UL[RjIo!M숽YMh: 7hGu©&=}[n›kMR }np({d_W~>!I@v兼qP?[]p&Hp*q\ɵKi.}%8}pmE =8ȲFu*0NݒjQHs Ll/&,Bnzb,3k@jB*gbOy1CR&p h[s#}\{$I+d4 e2(vMLz} RjB29X2vp2 L LyeW )06-ޔVS}z԰9.}ތ~/4ЙS1u>* n[k>ʭ0V! ^֏7˿5:lϣ"aCuS?^*IhSbۅt.Y-*.quw&d~ [w[`ivGG2^GdiqSN ?\*(QZM\u[;dJYgfUiXu嗪K٫=*ت-܆7X>4F 5N*PSV\WMpyU D_l"bR0bw0ZLNQo&8ҙP}x[.sF0p"HiS]afSA inA= ˖X[bZN|S,DgqȐF2(%NG,n?d1儡˱'8-k74h Qܵ9^,}/osD G}?V3@4N KZE8QauV9JėCr(.zo#+s"R"q#}˭{Sw&9kE JI9y0H (DmlJ}Ac0ۚh WeB 1$?ļ?.{wCf|ÛN/KVHs*Ѫ.W'T,Z˸,rR.6iѸ{f=;3U\8 TA6B @zm@Ц QtO5SQFG?y1h5Ki_\g}̾d̊1!,7VN~OLgv,Yf6'=b@Z Ad >jjVX|yAɲ[mV\`*DztR=Cm#jgZ7v/D͎.ЕqFQˍmͻi#_Zބoq Kp?*RԢ!լT >,Q$(OTwпOS$+cOom@2ܗ!n;$9)H/Wۅ`J!ɱ RX58^w!_} sG ApOjI㉇&adʽɨjx W(ݵQX-.ɕ3GH΅D*vR@O IѤ0^Bh<.Q_@p7{A^_aeN#4;.^ Ċ.iTUls}F>(z< ݸ7F{OQ }za e.7=Ocy׷2vXAٜ MQO0ՂqY ¾?@@@zuҬ=aӂ?@@?^`QkS]J6,e=eo;fWq 2!ԓv3tu_`J?^Ni\crC;|+]>Az Vւkz|ܹܮ\wUjzܥ+hIvzj1!^]m=@)Ҫ=r={,V3jΗؙATÃFv"]r]98a.gi)*%Veӛ, ߌM)ҫMg(;X-D˜+7(ÔOP jTneK 4VEp~$4zcjRRΧ*DZn`/5Ay L}qga.T?j+5d?DU{vr}A;_I}-Ǘp/tbG"UnHe;yFQܩ >jv}1 ;T_+ Nliڌ@T2Cyr?9Q>*~x^LǹY bM'%7jbATWboK6eY厉>sv$Ow 2^dO-Plf{s/I,-zHjJw,Aށ_)4+rwB*;<&ԦlszO k$)o#, 9+igsL30_i]3_DgH^OG@VL )jFF߻nz%N$oJ2؀XiHeSMh@X)5>3u( Qno `h;ϱןTeo#+ߧ#=鈱`ۦ;8yBD 4Hاn)kQڣ 9%-iFpSQ"hãb xe!-eeEKpCkgOIj'='C ,g?T'8o:.=Ьb1"w[0:6cFPoŹ'{i9=\cS7LszYC+ )t"!8Ng尿+GNvˡ^somEt]w1.U#L2ۘFV_vSG~ӴHz{+K-6hcvȾ UP?צ*P!_(,!(Gfx5#3>}݅n|:Bvq Z'CEK0ʗIz?tz93}| (}GK&7ySN"[DfRCl@$?*0 ,GÊ'Ǫ=mEoϴi C+<-Z;,| tG¾xo%,WkkGy4K󑹄Jh sjC*!j8!{ A2Г{| uFPGr:Aμ!NF\[+(W֝8Ǭc "D`[p! w ;#A1s#o0I4|tuGYն*O@4z K Q_=qP<&YѰ=Xtzl# @dz2CԝԙgVSC,UBak3IPuf-89ᵦzx ,G^;?Bjj <{ۃխ\;3Ӣ:=чOKߣX]#a>$ i P"k-ėZ%UPȺLmݟwH䶜ڥ[1B|`e+&yf+dzY{4wfW"uHa`͍ LUfR' $-|d_rQv3~nRB"[q(F]X8 'E/fxҭD~?:ImY&rb6yK7IVj 3Zr?只jG(dM蓎26g2-vZ]HS^G,=c"BMo(b|,Õ<rBQϸymwwTEs S >r$'A}JsfR -9#zh]FHCT`xR{|j#֥OJ~m!O׿^W=}r|_7 framd9n7ϵ\Wμ;PTFd|Ŋ(Zn=>+tB?=|D;ԷRu7$E)"aN /YK~mJٛLȻ{*]иB\py| pin;Y8l+cD2. ͳ!gQ;%ݚ=$LMC"'-;aصЛ_XIc  l*_h b2f(DL,e٪n n{"5Bkg|a"ß2jumAk9ɜ{T |k|噆5)N2TWagtZFѸRj[$fuhaz"aI5@ܡBndi|ac)$BT1.Cp}3s4rcYU<<,] .If  yݦs;zނ5쵑pqUӇK[B)Et)  ?C5)JW-8P %o(ئQ6jZ:Sp~4~l/3Q<,]֭C]6GN>3'RH^#c5Cja5 4@Ө #eB^- vHtc3CvHLڻ% ZE--4ߤ~pZO[PRmZ!EGC3"#tS=I+=فFD/D8 X hVqۤN;[ڐbyiǤJF2[H|_؃V(H)CKHQ*Q \3-kwψ?n*Р]NN 8pu7kPP<}^uLd XP /F ZYJƟO8uE0l`]YR.d6I!l⵳YYA`< GAùvLӻT=.BjL1M>}8 :,_i$P|.1:w@aY 27{<6:m]냴IG,ѣi3:ژ ]&T@ !jѵ룿$3`oAj6ꥥj4K;:kkvS4{)I}΢tW`_S!o>m3Qc&msj8vLv.<7sJ ҷ6^`I-4Ab~E.(QaP'IRn[H)ֲW\[* )DǨHBC]Xr"yXdM'"cIժO7p9X~JyYSjl@ zϻŹVsj/( md'( ^* K-#0paqt͉s Ѣ a6Bԡvā .vN|D# F>PAS_)9z Хw[ѢqX_d5Rա A4=j z֩glXj6@V{Iv~C%AIp[$10L.}dlHMO-G1٭TmB1_龀c!2ō}_A+J,I}g%hWJ:I^VξhΔ15fGk㯯6'Ä8;">nm䃙% DBAm6g/+(Ni E}&Rk,Sv:z:|  3^]jfq'ЋX5M$9wq>00t9ƂG]?w.t5h2i)jOٛ|\*{^5 2/=J̆ڤlW6"į|<#xS֝G-Fgѽ`}l:|9T%oU}1>0HŜ뺁SEwZ Mh•iuCۜ Ά)aP> ڒs#:dE2P&kR+1N" 'K~ :zI ̢~GKK(PóXdl_J+g=@$tI< h\wL3VjzOىĔ͒p.¦U%I brS\B?9H&EZ3AцJ"V5z+& ]('Dq4G |(޹ f(q8R;M.d ? sZP(Y u[Jy09Ef@%}&K #mk- S0wF/`VrNlB;'7"s F'KhR7Qa}0Q5Y}ɘ%k.pBoT{E\RGbHht[Hix,#CG*bN]}ql-%#UۄBA%6/$"vos$'ewyUwzqYXѯU/oaZBï\V8SpQ~wZhIP- BWAQ.~267XnbƟKF:mZ02rlXu2p~PmJɎKg AG=&_,nEěӃXg}eǛی_g d4"XDG1gX^3J͛`5Tkbe}A!9may!/=%-d?lgX`5Qr<\#J8$lߋBhA33=ۘ2%Fk-: ŝ Z%@͘("ғ:6,vH+n4頗onnŕz;!;Ā.kf$V9a@ɣ[ ̡$WVgR~[ <)噲JdE8W4܋}[=hev/Jrbá0 #M9TsáSE^eg * hnXFfg9McxM fR:ת󎐇Tw9t0 țiq_Wz xDQ?3tFF1-6y6αK- 剛 vѕO5sѫNb_eCQsџyD# ݶA@Llu#,*viNv`UkZ Lw *z=',c`ؒMTkX\K֘k"@/vuF 2Ab %8.1-t[ٓ4S⾦C Pм‘!@Irx[9*@n+WRc#QUhT U~&B=J:aɞߣ'oV7;Ɠ2UR4 ?ccSsyh?f-" L. }fg5H63/rfx, F}/)FA~y (7ڙ*i'Xy5xUZ&̝Q ا$rJWKmĨXЉd1X`@HXU%9sq;AghB0HoD)VPoE 9T&Fh?VBe}jӮ`%@1MXcK6)jfnL\ ܒO쓯(eG'=bPRkb)w?m\PVR~!G=vZ"c#֑`?.VVPQ Yisg k ?al1}⫗3Z?avqrZ k\!L+Σ]sIyF)z/5eU߱,/bA%͉3Wwf=(y[(͏"svgD)RPGfO^F>1VB*|A]ahR-cFK$aܐ}mſ*^$d2BC0/ZI&RU/va355r; # Zx bMF%1G\Kl>r޾{ie?@J`CN&;:Kƾi=s?1F@?ঢ#1/~bY N2 jܵvC_+Vo'Y S.ٵch@c#rgj{Z{*7{gvd Rx0_+7̪G\7\$dR-h:u]\pmխ֔w׼WV^\Ρ4=݆zz3Q6.XOSKQ|(Ē$9ir gX&1 Y]Ҳ佈My QJtʨoEhsg{RZ9G ;iB;=J}ZԘ ^$Yw1ouw "sI=Z_vdd34t^Hr{JbٷYcr-sf*g WڶcW'tMdY`¯Xļ=+ $~J H~ÒNg3D x>}dhÊ&!HHɊ6L7OTAMJF ة{Ò^Cœ .9cW edf|daMhB163%//ܤ\#&0E{$EwYrx]ȅ+ `Qw81Zbf|ؠ'|)L 7 flS.#_84V|aߪ XvdA>2|GqE{, SM1 p־Aq}'\Y|Tب.Nı#<kUPʳMozDTZS V!hboLVZPAٱ ^PJz@bը%専Bj 6"E4AXG/&͜Mw>"4+C8q̑7uL85`ʼnB1O!c&\AK:!x1;쪝ݿ~tGՊd _5 XBImkBrjT/n#BMswzdFvs_;>n%˭nToq(ndo%9 By9[/h?1pӭP4W 1pdq-abiM%B5VqPJԶr:Oc$Oi0f:;JOt7*FwAE̅ "IgYZHx xM/Jp iC}^o @#P/BW{[ݜ@{5:6E]\{8=(R.dN*x0}t uOT=ҠE7XCr4{7gJ%lT;slg`0Eox?˔y;d89TG <[ x=7TFǖm0\ڋ/x;~^ K@iꁡ́?HtKmHҫQdYu&T%gdjvy@@f+ DSH_=Osc+tЬr"(pt/7FlPA!|s:@ZPHH62~)76kqRQԦk]ھ$CaŒCz@9?s-ĭ$[6i`5ewMoY@5 ʦL>7Ǡ`(ܫKшܽߪNcy3>lC@YF&1B|Uެ>/[\ t=l?p <䘚4卵lS<[d @ dS5E>%,CU'zACw(pSGe,HtB=u,]J;!o }T3۩) ц{ܧTѤE_v^t 8"!OoX} M1ʽaVVq m|Rxjj(="l(|&uH_2'@NQVh0!%.wi_Uf^'EXn#'{Pe2"ýHQYzA:!ZoAxE x`?*a)2sKM=qX|9mg0nWy-B?O}@s> ؐd ?ܐ޽A~4f^T$yBjۃ?ťr /p̐Њ~o|5cHʫnlZ`1SQut/JG6֎`ZN0SF(uW.z|:Or-wga*U`Q1fӋZ:,kAMb "ޘ.D/Kp2:Tnd6,t8h]BfAe rdx,N]T_fhmcbG$(&WqEnA 6m, 5ߞ?~znjqI|5@t}C m$lE!9d+G5a>99bz Yl*nfBŭ\#^4C^=RUW-LC)n}'qv-ʉdF dm?Zb^!7 1n aoww82; .S㴷Sv=ׁ$M r/' _7ac-i$䷶!o/"ɬ/J{{ ch1gCY$M  pc+4*'>*#؃u7zl ;'yӏuӽVϜqm%y{en8MdâF9_S.ZMK2ɛA \۠6'K2two")+HCMdbL{3LCGŢŜֹx<`ݰkT. M΍Yjd*OA  yїhy!]oWI+QK=AER.O(Q1z>;QLB%AHaq8<'VĊkRvm92a?yd餺5S窈 "Q&1p擝zzX"'\ftt?_hrb(#Lئ#yFHtN's?ӦXm27J+!;o fvɡ%,ZHQqc6ݹ)5V&jNJh za}f|"SztMt7.KeZ,s` jӔ#{(::0L $ez0O<]͉w;w~ϲqZ(t$ t\! o{^t!$>(á2nue]+t2/'([]"D#MVJa\hcb `{(r'9@4qĴc}u9|Z\|n+_ۭuw 2QMs P4yPz e e ڍʾE/xvgvӃDi?Q<ƣ;~}SeG('{yG@BD7Qw% 0{E'Ipo> ŢHA{ 8t*Ň+oȗAѭ#%;k/ɒ\e[=@dXkjs>'<Tw8}XzO,&V*XVZt(m|SNL+ #Jp.ӟ_l;ޙ&yFG+~i ¹Uesx@[DQR,Q9dh-5fV?9?R$ﮉ4{e c5PtW4:/EB8+ 4(.pNL+sPq _X @J1KDɬmpB!f=JL.J6ǡl +@ 0SiY3X2KF[<9/k#/b!J Gpy> Xb(mp ;ӶyM 6 Uj8S>54 ũa-bI Y5nBzbfoTpt%7ҎԸ}&y^j4X(!;} OYoK='Sȥ]Gњ GIY #$\eÈO sdxO:Fސ#R^!m9cK݈P05$xyL]OLcy\F+4rZґوD䈅+qZ} YwV{vOv줅N^/V?3Z0V5h1UM3]2B'CukwnsO& v<[ꩊEO'@[A_ئP^w0ryx?Lc=e5 T2XB-lֿ:.R f7aIhr5=h3Ne+kݵ(ȞUUc*EcE:؉RY/)BIʘxDL޺%-hY4 n"hchX'憟j*Zw7l_A-3]2K+yêF rެs 䉊"%cf" ؽIKz΀C5-oY y+QRfY&+-W@찠ȘA0:Q@&%+$ɱlH' &`[<ikۊ`W ̮Y H;eFs6"rt^ BW!E.@sꄖzH J+\dj.\-;I ›JjAGNY| 3uDbHj!. ?KXHLbOZ{Y,F>>@MD\sOz(CTK  ; Jbu] l- ;{> ݝwjdH7)Usco*-|^,*֥1h$2=Ns̰e@) BI.|;AM5jMtAE\Ljl3ŗg#+XߡFDK"_875? e%!8W4,gg>>F)I#`n  lr 2s\%Kt& GkǴj:y50u`9pڤK;p7O^z|yQϰ^K'QEoƎzC5i% `1ؒ#m"9~{ {r⁛Q-MQ(׵BL̈́uKv' *dp涮٧u v%޻x\iā /d~5Dp8LR۟wֹ"xWلch2pL1: WM!e2=~_z/ Z.gDBo7VZ+}QqrPĠoT]š6kg +%\^ɍ[M6~ܰt\GLpw߷A;\M] ~Nᆮa}đ+y +^]VsC)b]!DlƏ9A~9*̫#׺m; 6CpZJp0M9 QU~uW(ơ[4<&G p$,?(q(KNY}jQ/`+(޾/ĔZ|`Rst-OWw})%+BP& @Y>FOk"{K`w ܁IWJpuRl>c `8?/đ(5pI]ޖGkTGQ&X;LN9of^`'i:}m(Kr >1̎V৏eӽS6ÕAoLJ8|퉂/!Ƨ8w6Jt" 1˃_eb'{@F"uL6$- ߷.50CכRJ]& ^agA\(^?g SRҊVnL6*y<וODb0_#`mhJ}b8Y-eBEFB)i_g7!hz,=Qt:߮?dE;o7 ;*"*OȻ F5!t=P˾ B;q5] 1}dˡKOn?3-aE3cD%a*yvԒځ#"uP!*}vfh*DଳpB3id Z # fZv%Z6m0lkNFQeEֆU}!yTʱ|#v *k5ͺ?Ed if _*ihɒc>SE=|m8:ljfuvo(FmzH xYAHiao> 0f䗘g39hFc ElK*gS@cFV10>>ݧ45'3~k׃9 Ot!G;3h`-qlXr9åC }jǭ Ƕ+rl}8u Й{?#>l/.:/ T 3nDH))t谩!]Ȃjs]#m=-14eo=#JPztAėtpʦ~῎Q7טJYS4v]R |?ґtBCAdDZϒV@P;;Wbs>B8ee[f I6;%I{G@ _z cԚW[_57 w DJ:!IJ#Yqa J ۀHǢ.ס=PWҁçaĉ,;/2wqjy;9I%pg)Lc ~I!辮ѡ-j5lܕΕc&~8;-Y1~5B>?N{r+6>+,nܻƢ1%Mb1dteG oYT}ג.zqy3I `xUK|s~tзsqljnoB0V0/G)BK`wuCy}}I}!~pcڥ@%?rX|cQEZE 3$(t;V3Fj~[KA^l abH68.gmtcTX1kL9@DK%(֪;*C.e6!mަ$ԛZs@aT("tOhbmr6p~,lt$5x%2;kN^h!Ƌ9d0>whkؙCG:yK8)b0/EU(!H/b[^@.2+_LAmmwOnKW=Ēpo|} c~Z]eO`˨}vd4ue4,>u8q|ޭؗrE}"`:z4#yP6TQ IM$eJ1/> րB3l\r/>S7q" jG=ΥͿFkb {9N&N<{i!; VN,s)YXnmh>IԸv.HSVs\L]ҕL3_e?nýC2'ө~4#v|Ll-ܪ9|<-2S\(0l%ƕ(HP6. @ MGnrHWmc|ғJǁd!MosGmlR豨qz.3HWvh󥑗㦖B D{zL!ׯ WB*0~Yda5_~~`YBis/%tNԓ2V&lu[2:K3Rm㮵4{VM(s!F`tnVO]4҇-R 0+|Jqqs 9NM$DI@ @͕I4|:K 8ڱN"O#4CV]3LQ^]4 WZ6Qh/pwyjEU@S70ÒA&E3xc/ʊu8̸j$_"a?x16{#)}C_!x8nr!^KŞV5he[7nYd8>28 7lS52rNCQo6#m,9IqK{N 2MP}@V!}|nP{7lplmyRd@` }6o7y ӟD&M9Ǒ~O3z+"J%O)X~tYdki{Vv mEPC ˥@:nE2Ümw?nIˇ)goܺcuȒXq{+svH -˞O @bal ~]ir1wmiJ!T^kVPM('dټze]7-(4RԸT0aIYE$)@;{ki/a?̜VRX.l!UkHǏD?ij<`NL܆Ez`7Nh{f-v v1j R,}lηdyfٖyf (zѻ6;vl^py`67ϩՅ' '->m(X|mz +O@f fŁϞ0Ke?(\{HYEՎ. ޟ"_a,VAτ^="FJ#tkf9K::c{_2]RnxE-<ݠD\(y4$a2޼ ~13밞&ò+EV8r۔dJpw Gm& ϥV&V>7),rvH<54͂Fa^hk(1&#Ƭ@\H *HV0ͺME9\r4ɉ⃖#JG f| obdJe5@=1oްc`+LɆs Qd]B7[yynU0bdcB⍼ [ΈE?=90ӌ2t&.Ȋv:ߴ_-zM'羱0}P%"tH'GbTlJ/?7lwg_m# W9Wd?NбbA{ͥt0l9|c4q0"p/t;ƗG1=kP3U5 Ԝ_i۪Ϗ$x<mzZf3ƐGq8iF{I9/mK =F~=h-^ޔ9S:f}f 4[O$ `~jYF? Ƥeidoj뮁{DnC5 TY=tS"F˄it.)b6A[G榐MZz%FdN|:_]lH 7V|ފqgoG[G؃afMT௿)\~1ܺE!U&%}ĤR:Fnx6bPѳϓF~E5T&/{];Q*szB!q7u<l*7H%4 i[z—i(Gq hݙgXI.*`uxO_կ@ uxSL`$؎~/MUӶG G熀 b*~[I{m4}bk.gS,Gp<-Jbsm Ѳ#Vb>Yݲ@ :_Fwv~39sNdQn+d`doZfeI` d&?Ȉ|(QPY:}Q(R!Ӑ;_NtÊ@-Q2jSO涐AEO q gZ0Rg<= J8Cc7rҗb }U'& BׅqPge;_<'PGpSX bU 9e1&p[ IӬiGvS,ҮW|(..vT?{]4V q@.'~cGM6F8Ʌkza$!y_3{xʑ賒+oK.[L=<PVa.>sݔ3x)8_Y\V!1wN`/"&_׮aU"NvgtiNQF+&3n<[5N5r["ƶo*LP p> .Mwp%:-wT#3bLK^ AWLmVZWuZCc<{DUCkֹX* +H%TK+z[J>brM&0JdR͓:YoQ^;~`!W2y'hUl*:SM L˭S,LVvER/cF|GZT[xmiWc g+YovuސX 8a>+5qY$<e;VkrB0=*yvUʈ7|#ێ_ܧYj_S~7ES6p41!־MOjO h* ~4Lͧ3Ųc 嫁V&bCĊJ6L5I/=~7w qI Uz}>*M AVg*PK8t0 YZsurvey/data/mu284.rda0000644000176200001440000000051115147136400014065 0ustar liggesusersRN08JH|B VED")J (?_8fH/~ww=ny@J$pz6]C.>G\ 4}W6Cуm3N+suCq8f=;:ӇmVaBr|NYBn/NQy1[L|zQV3fZʹi55Lk0 [ի}O .E hpۛsE_)$4emH&1f 2S6{nӛήQb6~.S{Xsurvey/data/myco.rda0000644000176200001440000000274015147136400014163 0ustar liggesusersBZh91AY&SYjW$hӯBA`@)`pB)X@Ҡ 44"hfj)=04҄4@~)%04L E254j d&ѡ&d5A "zI0ɣ&L A$ @J>bTᴥ @Ov.75QE*AA-ܨ+ gv%C/2*BBJ&CD%)MXh"C(Iuz>D{TL6 %@$"zZT,@!R &1Zڙ|qc|V#^ǂR'ILjI-ZI-JJ$Ir6m"#xq I%jR j0ޔ7v7ufmD*b`r6nt+|qr[ymTb.b1(itwq&UȠoLV*phd^/LMh貐lb 1Db5LDcsw|w?O m`RWi6mmcmݶmUURma ݶݶmUVWHlJn!K:ηow.TNe72fK3.fi*:ֵtC`m+wRCaW3;fs9s38ƀr m0m` pm>DD `Y$(#Ff5vqDN_/(ĶmZkI$I$V%zYIRQwwwkI%$VmS&=֛lj,$C}Q".*7(]UjWz+BNKa3Ϊ1p ^IܒNLV Hٿ%rT$k*]ŰRLsvUlfKh@\ Fc*0m%s&$n% JwY+ z+]‡ X16r$IuvⰙ]lHI5b$I :Uy(#D@:03(dI$iu^u eU3m@BUH6Mń`ʅRI#9  =5r2vCT d":ؤ H BR*9"<@ )!| J0V VS'oےwv>ޢݢ p( :#y61apH"hf1fW%pOooJإ?,|m"OOGDM)A(VŀTΓܓ S)S)$Γ0fJޥUgŏ]BC֩\survey/data/nhanes.rda0000644000176200001440000016237015147136400014476 0ustar liggesusers7zXZi"6!X])TW"nRʟ$6Ar\) Պ*wln M 9J-% #o@HܾR7#:gƨx|f[7; ayH蚅ϴ2%c2vV+\S#Iɩ7fhI1x\WhZV;Ry Y+D}ullnvI?+ hɏ%$Qja_`X"Нl46Y#YΜ*yCЂp-%9_RMpJX8X , we,;ǃ|(48Nj57u@;A`.G0]f1}YJ92Pl)xyiq4>lT<.H?788*KN[CQ2?p:Ph] Zӭt6eE`iKHJ3-BMaυy:2n{x7:#{}~z I#I'աjV2d6 !T[rwQqϫQG >9:"4 Q޼MM݊a.*O!('$I,L ӯLyձFn1X_b UKCswO Ab 4:g)9UNqGYHK#"꠨LHd7kYg<%GC RL \VȺBڅ_!hЎwv}?|܃üsЯ`eјh VZi,X<Qp gaR @l<)@GjW*?-Y@ij6ݤuNV>IӬ2@w#x_]qNqJ P9=;@c ؁q6 ܻ q.A5Ir~9d&L V$[иb?-zeg+edІiSuT%w(EmT@Ċ4ȥm,]f80d5oWPIze&Vѱ7D)?'jA:sB#Bp-lH#Q%ڌuI`NA?j%< 꿌y rU՛ԥ, Osܺ]s[ݟit'g*nVWքYN̍!{.Ur.]Gf:IZ)J!?y '"N3$v>ADtU#o6&  =V=@eH#vcA'bMѐ`r'Ct"D ԢV-e4h:H^6{lpJ -18AjH!ɶc7eHʼP+BOkmw1\GXn3D[3"S|OO%hmfIVڍ<egN[[F3nv6W CIWR,\dYB1i%C|TP`] 61JNt 'z WN f-]B@ڢ<;x~CYjƅ1fЦRqyx1$>Y݂\DƩi%̆؀R=5s#|T?spݷgӧ#sm $ͮ]'`gU a/{Sy+G0zd~ l[ 綪u\@'s^t5$JeZPIxHd=)! \ⴼi&%3>ǬvN Y qN~ T~EjVš~/ʳ 1DA ,dj GP2'6=&a~ޑ=0q6\к*WĨ"$ ̖- \^ &GR`Bݬ܊(fE^wv%ݧEV[/=bn;;Cl$s73Sk|7&I(şo$CY!c&l/aXlP1! db^8 c%X_dݔ*+[32bQéhޘ ;+J =,gN1;٤45SIN<, :rx R]DO ?.̎<ō7Qi}y~ڭx^.fItmfAb@-^ C]zHxذUX" <@;wt6ze]gxb l+;H(36U<ʢg1u]52 r\EBbq`-]AA9#cS|)K~G͌\u,Y#. l>Tc^%`O([~v6Th݌T5ԲV!';:5ksZ' laG1Ƌ}}*|ĥ1@_b LF3*Ѹʻ&XpwI?0fSe,ԥH~$l%SMuml*ka*|3-o{ [w ב>zW,б=ol 0.a _Cl/ [$a.wI {',ʰws†Wab mcAuАTEYLQEω54/urQpenwG$Z)s>4w+:qe\<)K@rR1JI#ȠዺLn-M.)2i(c/DKD׵k,W>{9H~VΪ/kk2Blɾ[0<|]ruS%Ś@\L@L[C@B>q)|6E&iu)܈acnx!3zE#9!^#`L81 '^o5Dr"A. O wvn;&X&czpPBف0tk!$k&'*mqv”BѼT?Y֨O5ה\s#wsidM)]3ޠ̹ي>&ر!B"vZ.eQG|NI;yƷl7%$T>%\Ρ Z(*UMц*ӥ7'#H&չBbih'Ց3KOkUPhi0H]rH CaLC#Fdwf7BDޙ:|]Rfa뚳 V=eȼ VeA `ġI_XgF:_~b̤.nb%h Vo>>1M;/,Nw8\B-B\}qu:~ iY\R >9\珿:#WSʋ2}L̒6±UjL>4Yx֞9}ZiCp7^k};f+U/S;JuMmϯqjNm&HJ8*/3+0i{K./1aw|NC0!/Jv% rɛ's!!}Wx@V6nB3A $ d |6nMn~EƅEYy)&oa/)FсN\)_gD%W&>׻gG>p"ZEw0X[9Vw񠂇^p[9[xaɕO0!XvcN9H82s\9mhk1\5C"-z񅮰ʵJc尳2Zn&G賤-jܿ0K?BLEE/rDF0: "$v~rwϥWJY>~Xś0@Ў |%o&87 @.9*5*w2Uz;:uF<rRчw<:'-/p$qfGIg<>{$@1)~w9N+CmBxȇh|xv́-h({\'ڝ "s1ndŠg`uuMpQ' r|mݩCNt]9aw(- V@.k?.[B#^W],B8<]I. u2z]o>?hN';`'rˠk'. ‡q B{ϙ eZ_NZW^Xe>6;K 1C8קGSE̫Ekwg*48̀Q/.X|JJ6-iQs3zg?xSTnߝ(bZtDȧ!}:R 22*#3#nߪ7o3zj]?D,[Y?uVud/?J6'"au =ODkٹ@'1-7(+G6Kxgt]@j[GT]SI&FJ䉩ح!7J{5hzR Mhp6 -Wr|@OWpvhY6?>lڰ5 C-׊hұݻo+Kp^[,`Rbt(tGaМ=)k9w^䦼]@-"EVqZIx1aw`gQgh`ϖ={, 52P]wkֹ|[kYKZ% %M}mV[Օ7 _T/J7BT..Y$bZa9GS7Y"XBKK@E[w˶w{rL:sgExc3~Z?4fHt ئK8ȿi9 ? Z//H!( `.i+ޛCC o*[[ Id"؎gDJkt/3VG>%YX,~ruOhbBwi~:C,;ThYcR36(_m8"f]*yݺkat"z+pr KH0LPCbwî]:qPr|s Uj^fK#m߲f?["S}ķFF'! x~^zs؝x'Gya2}V1(l 5.E%HP gH=&%!ŨV"wNʲQ#`L')@⚳=>|䬃d( >Idex$'q+PIU_!/_2e򽂒bڰ: g O<2 XۀήʩaJ;rߨQTO@tMA W7 SgO-,/a*҂#o Xf, Q@'ONPNG9: F[ik W])7rI(4$:O$:b@4w;ïT^Rij3IwaؾW B܄̮G걺_ƛlU~-$ n' KyRGKĐ9vciDMQS[jZ@AGiEЙޤ30{9c!-k ,ijSY1ˍg]&wl"{4qJF6-o I"-?6& QbZ&|۸kj5[Z9FZ!, m2E8pyoS׵%" =pY']t'z8i *!\vɷn`P#Kn[f Qdl5gT%ghC8ic1zfFlׇ)-jIpǫGd6iBsٟ0MPSKeQvov8cRɫISq5Mڝj:pa@B)Y~"ȮXTc y܅>t`ßy[@QH?$Ec W6򶰣O̫LT7[Llc 0-;C^% Tm1٠&$k7(FD饋);J(æ_U? Oʾ da+BM1;X?e n56:JP$gQL| sI !~-dLI4J[t͋l@ǼX.Rz Tsٲd&<9oM Lyn脵nRCko O0<F븤_=aGehم)r&$NXS&lKS~3^ȗۜ>:H+9TW=P氐]@LY 0-j~4O}u,gc[cl_GB35r\FZz<TV2Ffi0 ()3< _!FP=Ŋ|ם!=k/Ͳa*qm۽ۡfvC8QdأQkkv~hpwgV4Brftq$r>:(qwY &#It ׏Hrtٌh^)]WjU쓅TC$'EI6?!au0o]2pI[R  dlvc~"1)+}egz"\f*+鉻Rj4;0#_+ AF>^c-)3I=9+MڿA7̙ǖsf̌T [z9荲t4lAxv%-%8/atquSK˺RPC!U-ji>~SԖn~ GK`?rW jf>x+uV/!ͦxόAK*dhngi;Dj_q&a@/abiDY4"mPejZ5?c􉏉a#@IJSt")Q+wE~%u6_,fCf-EZ\]eh<-8TxCA5 rtPKnA6nl(o[[E\eHT[a+ ҋ0I@"qIހz9>:9{d?W2Es~ $=V7@|4/,\2["GZ 3ޘUZ2sD)Y0 ;VQF'RXIo>v0ר P#(r0O,s}{hk{B\}^~1t.A>M4u.n6u5PTXKv { ։ngCQ-⇵4 'F ]! ̄r[i !Vƌ ri)1;?'0=RsW?݋.TBg?Jf}ܕ \32Ou 4nFh`J:E7uKadY*dˣl }ճggPLGzn#\S}:4k<) (ܩy- 3|[a)wŻp<#]&wh^rn!:;pHg.>yL/$OuBP-+EnDb'rjom?k} fI-ti_kTHLs[R>!|/B_,.P,Cl;7; )ll섅hjyR#q85gŒD~RmTP+g£4\ex{ / qcàg kKG5Nim0:&y `Xҋyx̄ b9/=_D N,ZYGSQ{i8J$:t<(+U_oN/|7ł{gyO.$ihltt~ nWF2.zH|p8698 q7xEYB1j"u--ULTO @AB?G,"1ySңWYZo2rヒUǸ'w^i0LcͳH4#w&j $jv()2{;Xe FR;FtUpqc`3ʃ\&?~A1CɒzCE>tt`$2vo#؞XRx+4o[&Gn@(5zƚ>[`i Jn/jڏлk?W<?N|6 PyC B2< G,\# nxzMLBfX=6rS,WW*1>]ΐ:h'*c,+I KwڍΗ0XX6(اxH)<*O9~ē1ImF^$B+`g;L )UNL)^4CMjb![ ^C̰pK5P߼ۢ wДì7XNnUr/Wڰj"44_}&G/'ޏ[d~#~ H<0: {)ȅe~+cc a@O*:2qKۥV J_]#YjF@x0_ƃ*o{O(%9Lլk1D-ABwpSA4yd.Y@&u֟3ZMha"OT ^N6S.ع j'ƈv'Sܷa WEڌ7S/zmD_y^<o(ӿyCBG1MX186蠘WRM~(:%~*"cЕNn~ZtޅYB+\-m}; `ݲ?K-k]Ȉ0SGssd؁S_mm흴(6%kJ(adMٵEωJD iT&kޣJI뇏 A1[85ȹ`s DzB䤙0YX*-d^nRj) #V!BD Blr‹AEPa . 9GRfM~u2|o 6xt&x 5m02ơt{";ui#;0JhӶᅮ&Dk-!:c}>; ?-gsk` su%>z86000>pfkvngUX8j"slxn\O** Gc.0LT p<ct 9`4D-Vݢ[0D[Aeȧ,?S\_,CL2s[]&CaS>s7 USп1Aw'c/UcCIUA&5S#6Xd$۰n &e:H~Q.wl(,8׬$ʊVktlnC  ogB{3x;9ME+kh/a4f 7P5U$gK7#*p|Zz5uLM qc͉~˲C*L+8 "s~9>?vQ=\!u4wXBJ]RBto{kqp 4H͓W։2xD1gAb.O٤]/g-CИP}iвz'eWCɱYSu% ~0%Aчi+z N#D ͕Uv/>Kt_s&_kQB[y,n y&aq{G5o l"q80z"o"% (XV4L`y_5ou|-&K:v~6#u]H>~ EZޟ՞d[g,I6_d-*6L3iWX};xnF߾&!UsGEӱكKJ{ϵxEё-2uz'L΢ c> 9Dѷ7 ph;' ,jXk <+Ts t jsr/Ȳkn?X}d"byԻvFcVlP!nMqX-+-Hw' lI};.: DaO$9N*yՓ ͇ CkU6"FkX6;IZj0]6_8tE'[vbY?ZX!5Ξbtl;ilTO~#r7p5r~)9ތ#2ClSf_aY_&A&3F,|ih}^kߐh$r52;exR6ba_]9Uԙ#N3_DBdxCP׋0ѾMMhEҬ8z?E2p܈GSBvc;U> k|Y5T7;%}E|ua[ҭ[Qұ <9 Zĕ l?vtn/x]Ɏ>X-i TB+> ?υSA  0{F0μw/}{<_P1[HB]{e܈F/*t ARm7Mky4%Qr\͂T{UA(R *IIL} Paoo0Ftz'_ y3M6=Pc__k6k.uVFq p wv,/N Hx2@,KE7~6.=g~=\m]%oY3}-=٘Йewi}VQOyCYV1;dvg4ICϣgxr7QA[%3&wM6j* \³teն[}O ˒PMC,ٙ*dŐ2| /AUAyQxQ >Mb"#iA@*ЊGY&n,%5o\;9ؔ%hArn2?1A {Nɑ1 *wᶞ>4=ٙR"HwXխm5F2lo~(NYHNH z`_>wUI2y'!Չ]Xg:=TSe{>iv)7*حD/ +.D b kR}O I"9GNݥRt--,ߩO14>ŖmYHD(Ch-FAӼGM~iX'cJ|g &>6ry{|llxI=*$8 ;35ьo֧'"Q"x*KiB7qkG֣\+%VOА[d}`_JvuQfNWoܤuv#qd.=1M/xB~B dm;Ux8<D!<&A4Q_Jgu@3/[B]u6)GhYLD$ߓ!QjR#꽤F$ v&%8l6Aα#Y[Qk2o>}s~ !9-* /# `Ly Z~<*JeZxUYISKREӷ"0,#a CzR9 O_$@H'+-`YǮZ_Se-YK0_| %HtS$乖YXć~FAQnr_:Mhk!x+dD{ZV<QcB,Kk<u0R5T4{ײz2OaFY'7Į{5x.(+1}dj=s+-#Yp֩2 g~S})dhb 8.k$ .5>wH aq; OS 81(6`{"UavrgEF-b]OL:CjdP;W@ e5m%oj?Zp $8#:mxca, `3`-O㛶0 ܦ{Q\ 1DDc B':Îve,Fr]lM:SSB%MhlGxs:ݕ?2gA1%!(_w𐏳mLM3zIc]yUUϋ F&\yc.BA0}V,w0vs.C-Z/,bҩܩ#p]>3[նSCðKW0܈ l&|Ӄ+ې?=ua+'[.;J O,X;mWw u8Q}~RJ^H Iꌣ(.KV ~FЇTa,K@9I`X~WzrU5V}!n>rGǐq/Gf%ıq]R1QɦnLbUDrbh!)uG!7*ԢvŊ[ݞnK`łYi"]ZlH""#{aE&M1Hpvŭq؃CA:>";U- i)o贤c)e`Iً*=Nmiz۟`:"7/=?^$o`.}@rmrzM X:@br&:x7}6oP^mHYoV헋$#S>;JR.W_FOX ^8wʼla51SZrƓc3i95 ';zd.pnU~=ҕ~xm=b1.;o oYWGIi_0+wkj!0~)j[HB׳#_N 4NaC vG4G`l߿>P-{'0T5E&^H#ux p2Z 4Y|pAN6!PvzE٬X>zl]B㝉bK&}є`C fG•Dި?ZWAA2ܙఎCf(X#ℛxyѡ?ءyW0BRphO~4)÷ \vHy"&#M 1NJnt ف\DH[~K[:4eKhK!n=ayFF n\{$.Ӳ 2qKd<,;מs|!E)yA!@Oq#dKL6Yi1 |*zSuNpKa=sfk1fKgi"\'*J5vAW[MWLW "!]m H{3}sp i+ϖT3N̸vS)}3QN|cj^xO3܁9%s]v=mR٥7Pv܌>aκ]"J.#)]f|t;!JrvF%r'py2 ͯ i"hyXtNY,2nZbg2c^zމKKœq'|S$?(uU&'j ˾>' Jۦq/w6Z*P',x%ixo!pq܎`z{*0% \eنEMT4sGn5TQ~A $@j\ӱ2LDMsQ_ _ ]ڥ/GEI#01ҔSԮϱ"br9# &^ZC:1F{"Q)8-&e{ OBG}`. IAnRxf(C\ ]Jќ6#Oƴ9>}O$A%zZ5iI  FNV@M+PzgBU~9G&O9^D͛`gG_ySŬ[=І YIjx0?|SZHSr#Ak|=}+B=6IYخrYM^^!b@Vr J-M>[)4"|gU7ze{&T1+#[#+2j"*TcG)z/Kc6u(Ȋ9㇘x]Te;ʰ ͱ^J5>x G/ߗ)M?OJ3#3O$7(ybì(\3TDLhMJ8Qu]ZE_<΋m_ENRyJNe?Sq3Jjxݢ0r)C"'j4z_v K/co,=,>\>R5H̄c'qU$wXSD}Z+UZhtrht3ip뭦Di٦h+U+|ʇ:5)7E -cY_eF;6(R IWBiC[/Z,lRF{?tM,LU,Xǯ)cQr3;d;ălp3ے2g<пHDI$,ejD,ܚAgCi@-)WB"K͙.۸I|?aN# [w`{׌˒:"t7R7-*T-2)zv!+Ulm(uÙwY + e,g،y%2s" [Ojz!Y*qXEsԹȎ{s!律"Idu}(O$JDsֹ8)F ]2p0u8+[3}U^+sG\{rVǔ|\-@&HL Zbi,%ySndžJi^r^XK"ĕ(%CtO?M4@,ErbEri'eQS0r1^#G(VEJ'3Lr"NbaAYN47|fHy-KR ŊB7^Y^pܖqDU뉑`:RI֫_Yƿ4;{TpE8M jt YpwSӠׂM#H D= I |Y@=!|1W'{8}W ؒnqj { @H8>@˸|Y#jmK7ϴ+TV/MӞUu,)\TZ}tlMedޘ ú5š+'+i?ԨZlpHByA[:2FySV 0]_>mɓf}.-ABYpUZ)c2[͘χMnAy"SO߃wJ`NGෙޏ0ӜϷ\)L%?/ŁϾ2ݞJM|T,g jaJ] Qf;AЍ*6\N[Ƣ]ϗOkiv]A@E{4 @8\(އVi]>aUQ)8Oԁ4JK`L2kU9Olab yr?27 cK@ذCz;;"H܃IV4nPlţ_OJ@ؤL+\Z[Cy'2D<&5SU_'oAA^8qn)qօjrntx1h%G4,cŃHt<*2,kU|}?A'+ 01a }^1]M GYXcNk{fuPڂ~4瓴'1"h ym!#{p]<> 1kMV1y %UP4=p,xLޠB݃c0,97k$ 2غr t︽,6W, U9~E8oZ+:[4ʇaq@%T6G(LI0Ϛ0e['3$$m 2aKlZ=E'y+${i~5OxJZ)jkr2.Kb ZeUv.;:d]F6ߕdkX2q,T91&laY7+̅sBcu#S ru;] /:3~tǻn% CuN Ha84SiH:TW'ܒ+J@x^t1KnB`o1-|H48jgs;Q +1'U5Gɹo]9&6E&,V&Lb9 aNh BO#.ݖbݨ>Vu|)5(l:]ॶn@h ff}>sڰ,2+)3P}1U4 2~y:7Z+ p=KEcGRLkk L ԦK6K`lt;nNt!M] G X. %,Q sCa2x]G1 oUG Re'#v\NI:{@BWE_ 2: &2xE`ڠD!QR\\n]FRKMMj/xx!Pv4@O^(GIG _5P^#r{U[FDef{7fJy:S'ZDՂTrEPn؍)vost$``Y)i2TaT#f9|қ'e?l 6cKusv[ at:+B5~67RM~.ӇH*[EUoy .yLY 6:mz>H뺽b1 LV׊|A8#Oo[?Ӆ{kX]xzd^A._MSzO|QFk7O:9K06o"ae5]EyqVW/Wgjè xɆFqtCsU^Kui>^}Nx]{9Yd8a}.Cϙ,Å㬾(B R] نy_шܾ)Ar،ztC~#[DZaZ*?e6gך#r VU|:QĖx҇mA ~=4 lcm GZYf`^(ͣ8DݲvL8Ν(-^nSZ|` a7fSr4^?l4kWbi3u9Ҏ29XzB~fETAXjlUWW|A-rp't@MQ J4n[(Ȼ D ӟylThjIc,R§褏NϜj 𔎜eFS *s=⍱}cFp5͢vͱ+j-z"i Pq{]G/<0d҇'=4d 9VKYv 7yB^ e܂+; LYKU}71ƞX,e H{ kɉ UNkLrA3g-+@x|1ZprU'/ J=,jFzOFN6[ 5I5f_Tku%ޠ/v)Ci~>/\KQZlurgטĒ7)qSl1y0 )jt!{T!Gվ`upz"5XFoH#J~PEg;bVyY+ y4diPv-!,3 xQMKVK(c+ظ VFF?ZEN]y-V1 8j {?ߘUM2?47K7% >Dն~߹co?jVQU8OgP^V5 o®alI;g32J~Pn*'+qc(\cqBH">1Pgbω~Ъ|2d@%L ɥ%-Pg{?<KUG #|gTs ^ RT&֒?ZXXj19OiM_Q~j ;ҝ?BC's p^0O,7Z)({֡ufd,ƫ"h}̊uxh[0D,Vmq 򬀀PqLą"ė͠xocNbXSstw=Z ,w8@xY̟Ո\+:P*yĸ %5^ ЎFs HZopmd5n c@BMTDp?֩Y`OlYd)+y?ıLSX KEplV.4m- ]r2AFuК~K鹫ڝ^-l2%㭤Lj]x"끼Qq%GCӎe~Y޴ ?k÷/G<D' URѰWB/ksZ`0D˸D?`guMW d&g]t;]=/[$6;Уv ?{Tۭ0tc_?<o>Nl(Mnt>)Ӌ@>fK!+ 1eQr7P9w +|u72+5(S0B[/w(=!i2I|uE?SBtSI"SZsmNQKfOX\: L44"ꔬs|XVsAn_jج8bMhCgKGP.iX󔲔Ҋp#Utp!Jb>|u\0;j;^6vrrjod7߫RkS Q?]e[O,;agʨ ʟ)ull}[5sq`4h礃?Ճ x ʣvs=Xv;1W=kiYt0(TȲ qf&&Eu\ r}vN.q=A7@0k5(QNoY/շ÷*$ssQ[ gUC5q3lh={{_V4\)#!儸]E1rSB"+)`Hr`$Dq,D\Q"H OV5.JW<8FȖYF. U08㲆Hc.ON0{:?d.%D,l˦`ܣeD Wbm]7U%RtOvo6aU^<2?fOC*G\8ZI-yIn%Au3 kwa25UŸLV.C]> @`^9&j;|P{ i#|rC9/W|dK V،> $'ot{=|'ͨAɋiN ppIxT{d%bw*x{ (b{\URm>f B7diUY*éO)wZ,8` >}0*ŲS OϭEupWaQ%Aîƹ 瘃N+Y{Q;%8툧xgr=sBW0,Z!K"kBBQJpg~3츧0\nE8|>Tқj߫tsZ6!4l`cYTzxWs_( AVAt= pѷ|~`E/upT)u WuD.3$<2HLoڰE-2a4p|,7dty?Fc)-̓w4Cv6vqܓZC*|tpS($R>74H|6rB77 %2Tp=\p`ݴZ=R rp49,@&a(->=ay$3nnLыocy&t}A {q_dDuWrW@:2>kҹ3d3;#bERےmĖEum0x9:HOQ`f IﵗN|ōhޣq [ة'PKJFI'76+Vߦ&rW+(cOy|FXE1іϝ>8ع(c1LlюsCzVrR٪B{kY&<\^N|JR ͩ?Ht03/I @ ~acK^g-v}aPeS8&fY諅 (L%DCq@ˡ*9{k/t]pn݇5%ɎPMSr'vZeot)k7+GFS%|~`,b ͒~"3Ғ(5T[j?@ޝ]M^ #zd,Rr7趩w~#~t,iv9D/zng%tb3oO~in: BE 0I~;9DYG:p{|P|uQ5Qд崞^Fv{+N-a[OދSL]OQQ|y@u~zlΰy޶F ]JF+Ks|)Yuh Xo60݇do 9 J鮥 5WtFEyM$7_{-Ezw,9Ќ2F[p'ĭ6~ydnIٻ1 <܈hy+ւh4WJ'a=K0ĝ2%<|3 !LWv!N/q8ӿNZ2g7V3^iMHh3.mFue [ /v}B 4V}g u#?E$%1Şuns̟`V jljꭟaXcGiAJ1hͱR#hY|%i WD*IH``+kӯvj5ȡ_8U&P`=!5 k)t=8ЉFrFlrf܌<,߭ߟY飡>g{|s 3dS%Zeܿs!–2@ݮ^mY<SeQ(sB{Z ELΎ>xȧi<}kZKa]a D+%} ;=&WޟMujiZ5 E>.Vel؂-Oix0vxlB`@'OHdu=Ox j0+s<]ӣC'NI!0wK'n]N_8+'4t)#lMPAElZ"L/VD6 @pLR&ᨳσJɃѴꈗX"?{ %i>yFf~9}쏶`XJroSF/2n  &Ҭn1X[eRL蛏ȓCڨY$펗cr\5' qr/3ieB5\O=`,4'dzTǼ|lmL(G6 aM! ҦM#p0 03TuU Z6ays0bLPB*grQ'9ڃrɋmS2R#(6\{Y9fP)lQl(+Vp~>c8Q{K&*Fbuѥ+Bb| u/-U /_GE ,rvE%bhU^ !]0$bceѹd"ѥHS_P1˼*3GӚԜƐa66)l. njЃ91ӂ@ͻXp`@S#/58ސ4 }˰foആ7ng;ĥPMm(/%Iz̖{ pvY3bdP~.BOU \lvj4}(]*'Dk2|B!540։?p@foBn}.*+UzՃE},u4tDp /'ƜjDm)+$ԏWSqm( (8D&d ̇X 5$i' Iң]g9҃:*>u2*>وɥhWĿR&sP6qS1}}^ĠI-n1O0.=eˡ@ y{5q;.<=t{@;-QoΥ@: _+~JLRCyE)lܣxr9{nLr- &NcOK|Sv9KQ3GU~4f$h1sYPb⛎RP8*Q0l%+lGa콩WEg΢(VnpǢl)ǐ%r=o=H%!@mGk,Ec l;J^;9,nt7@i(P3#{CyFF%X.E|}`V#ϒ?VC ut+ìWKSD<<4kEb>|H=p gS/V|v+#M@51}#cDCE74j8yZ^&e*q0I~EjB>=UuӤ`vYɸQLJpK#,T,.W%B`mǗqXerC.Ehj)<*-vН|۵cPpgJNܑ5jSgeusDO} } $ѫGe vW9oQb[5 Y;h9QH4-K+{W}@$"w:JԚ pζE yH s%DaR9״0^;8+vtD%0ӓxX 4u~ EC\8!1*E<)s¥W:Dq5f8?| 5 mk:Mt/ͦ` i'5Tsjn{;-%3:1 m|C'NS~Jn ׂlg u=lw~A]_J>@.γ5=q"\YL\'.!9Xb_*uj1~9b7GG svɸWWW:cKa0nn+1#Bd?dy>Ԓ澱мRzZwOAẊ3lP'= @98πVA+a%eu`O QdI= HuҶ5q~z;"1`(8QUX3fhJFq-bjF-q:SҊ2*qÞPW\9N9Fȣ DMu@ x bD-<ĈE[1u[''3*fcFɕxJ0^/w.2cB9T׽¾,sċmPz`7հ c̮O$ ׬싦1rc4x4@ao$ZWs-]<ٔb+3 t, ɳ\+aS1VmV R4\*eq ᨼ9{郶>kk.OGyY6ɩ6Lnl?؛ն~P]QC!2%'T9*y[xqYlB  |5'mn*7 !t;i݈VQxcXx{aғr5򦢐&ŧQ3ZnhiLLr9#얿SʑeqsUI\ȁ`H&z߷0~2(˕p{Jlv|1;B'J{[4j2C RFD)g4Uc<'vIIm+\E^Im I`qT9KJLW9o^8n@Ed H>I.I{$5'E t;Qm&j<*BnzEQKEA6 x{z׿Y K0ViX}m~s, ^ˆ93{ı4sK{rSWB4>`Tqq4 [x]A*0f07?;/VJ*3R{BjO%,{{b) RMRxUkD"I t34*$Ap 5+ Aw1x!"os͘m;f}8X43ֲ}%ʅ-3i%ktwpJح%9p=$k" 2N|S1gNm=qV {\doL Ong?4$t@*{ByH59P.j<F!Zh/yFm!N%@:=t<~Ct 5Vg]y+TuH \w`ӫh!:dSd>4*H }^yGt!4ŢmM4,-\oS^\}VkPU8qϊ>/P N![b ]&!n#o<#oˌ>2>3t+:fQZ 3އ }a)GX limGajz5{qݧ2W[2}4)x~Q|`.oܸ,фz5XӘ6’΋~eR8В6!Qͽ% `24j-8JR.q﮷-Si,w1jC< ko om/6$J߉urTUxD=V[R+Fj J6]Za Gc Ԡɤj"AWzM7nK4'aBlAZRGO*ؠft:_.]c)yp1 Ka0 e?Xt흂ƒZH ]'N?m}{4!GA7Bna=vspٗ./rMC-)3U\&%L"Hz`=6FN (I*42FX!04}eN_K 26 fpEwQxG~ ja -M}/ $+Y]oYjtiG$bP}Ģ2- `*kC5% tl _A'Jv4L^scr 6+A\7$OTkpE/%8v`!\II۪R*"9lcxkxwXrOTUaTapyJ[ ?ѨRGU=80 5P\g'4}CxWeMYxO+L^ 3'8M-,oɆbHo4$0m5Ƨvf_ 6M4ZNJGte\QȡY|$]5bIvsD#.⍞ 7yXXSF l3 ߩ HX^%OV]F8М);1TJoC8.!.k+]x933_7 tyaފ\/M!bXr\K)\F 鋳NYiSAV&{mBN-[/pZ5uIJ '\֫V RaІ!lk0\S؉ŕey`+a9DZpS*_8@ۧ,-X޽XB{?fAz}@}DB $ЬeNe˸wf3=+&c" M6^&`j?((u,EU!Ӣ*]NNaن\vH@5D\jz.Ɔl[M"7Ɓ*S7y=|0jZZY܂|g I{Y ڸVf\ t:7˟[Zv1u O8[~~a v\gG 8rJO>D}m4g:|e*&F"_l}/a!1i!&>@3ݎJ;>`;R /ղ##BدMKm? ji nbL`p|5 w o+*)7ry JՃ.!%5>cT3D*W+ i [_'eOvx?{q;9Nvm ٍ@jR[PeB>c?2.NU0t yߟ_36FQHnvhOQXlթSsrv`ÄY%F*]Fww(> :Ƭ 1E!&~F*2vmn8ĭʸ;^?g7^y9ְ|h0O2{D2EWLgV*4jtpEg M @iy u%p='u8"D@ݣqHژKgx8`=M)n2hDbCvy9q@U׮.FD2GP[kTlZɧ[ѳ]?T_c͉`κ1oC5F 3<)*ԝU]rg'@izR5YՉQI7ϭKmoA+-il׵i,VQ H鸽fwTt=$ruANTn#~"1M 4gy$(z$Iץv/Npo.Yd'\&ֹlcxS:O|:07r]oQ>#@>FI2ovkD[ ,֯aM:|@fHҐ9mF{_6J߳tAvŶw7#]QB]̮_5mmhtd[wFE&..eUe* sH#̦O/?bkVrCbKNeFjWgthm="XN,ލ $(pT/>Æ B$n߇m;Y{ #ِ/tZX{Ӊc]ݒY_FO&u:)pػa#W>j˂+/R]<"qF6ah{}s9:vGsG|m, =C>gΣEBt8W:mOC̻2qTE$o۲X$֜I3ɒ+lІ^UsKo9O"!lrK_$msC+i+Xd'/ٱʔ"W Sݑe[QfvM{HOۓ0uKNҦ62:o1E>2u 5ĥ|*Xgj9˳LK承h0>=ꗗ'{]?>"Idߗe neKraX+1뉶$8g?S $ fVZ~9*HBH:i*V\&PH""Nj ;^$!mѧ(YV d{84NadY6wlQ4hpW=ZB4%.j7SNӥ,t!^Y M΢D;fNM9_kWD,m)Ӈ@}25jPw¨8Eg2^?CzumjKZ͑fg1PajwVD_Q+.d^=3|@{4A~@m}SaQD|JO: H2Q[!sj~G]@mfx[QmuH?Po1j O@$~1k{X4qCoX}QQX<4sz1}Q)/UKBӉQY Ge)DjI w\GqagBpj+\h8O  P%9 3̔/*xmc@EDʊv=oY}eYy5PS`rDQ , 5ZgAN9ljPW> h~8u74yanFzq^n~˱ "H5MK&8G/UFkژX%61UN6!|Ys T\ʋYoxaƌya'ƹ5E%,+{wtˢg)@xʈl%ۀ_s, %(5OgD:܆g߼!+1_{ȣ@ǠӍ}'Q{f AlS:jprE%'m1O/tZ?%PezUdp4}#)!73%5Yow2ŷW? ١S5贀Ӂ>V}!#F},Ϟ%C"~ix1a\YjܠEh٧5Qy;OZ!nLW?ZǾx3OC)~Vu #ٮ.*6:ܾ&兞wπ0*/i#P+A*&_թW8<:7;/k8̦T%~naV4dHh˃/Q"]ۍ 5Kh4Wfn' Ӄ4|E4 w~#l>*]"p?daZklߎ@fl4*eIͮlU2o^bXb2K$^I)x^_nl:fZ[x + ё.-ji? 6b,*ͻ%A$h> ^,e (MmE/WͨHd{Op*VfNp0^#\6)l[ Ø5\w Eqdol "( D6pvOxSUlݜH$u_7ˆ,ǽ~$*N>+a puՈ[lʴyՓHis{0:Vl cMP֖+X(cP5r})psj~Y!jA\}T(ѹԢK}AEc]}  6GЁςϗNz܄Z|c什5_ 9 ^!mN^ty؅cp)_TaZ:cA?RFv"4M f</]5-Q*ހȔKgO}^@f WƧ1WZ'?a跕RpZfnSa9 Kkq "۟9w3x@גY z @"P#qD}@HUeQbf s'EJ’-vLqE3=6e{U +Xv'-GgLJsafydj`FBP)_SSx]D6=d.rTdahU b:*!W1 QkLg %֥\5X-i0F,_'A`b:ؽߢKNP䪊J,/p63ͨ}:h9L0\@R^z*3蔛J` XE6[Iv-@t] UhnC} ̔C;pe6ܡQ,#qxpDS7=_۟q~:уtv'zVuKČ Js ` xboŀEGP-&Ta6F~Ttt)=B{G.6ǒA|!f/(8=ЛJmduhѥE[e9c"`C3 CQBoL~! WhH9N } W! =e#ܦ*Rd P5|2M~)VY R~/=m&bt(śl@Og8MpA䤢s5`[1`Z`r&%EŦFFF6l/p2MT-̑Z_$@6RQ\G-|gBֱVޓs` xoq9U6OJ'1k7d4 f~jJ]{܆в' Vo[E:f\{:W21u1iۺ=HPs ,T24=Q.?5*|[vzeɓ_1lvnv1 VpV9Mh3LS,"WRhD\i2N FY6sm= ku=?cG[rzspy~W ~j* 8 Unq~'0Ҫg_I +yfIp8 Hc6:K͍tzS|Z tp =5FA^ϊ )PpEjn:jɐ8i*vys՘΅jѶk̉駟u3+S-b3;n[]EJx~؅i nFt\PhѨ]N~ۮaTt#58ԩP-`EgqfԘ9vƣqmj|ĵF}E)|0/J6e*+o`nF{_vg*,OUy[f)~~J7x&.5k{K89rCk'W%Q4Mj c/%ޓ~>O8xUOw1sF]G)풾XXl$ E&X)`7x9S:D nF" :H>"z??*5 Ĕ3[aLH_,Jg|e9xCjPoɯֲ3sf8aW# nS+6:D)Nud7?wɨ9>cHD<֛"kzL~{M5cɘGb"DMS`>2<20l!bh=yEmD*}+\ӉWAT,ެdmZNgoЛ lbFxB9ΗէSÜ٧`"ZrobŒXL%)Ipۦ4ɾU!%xJBrAo^ ȦT pF#PB-Lɷ2QCp2f3#\9 ŤJoepM7BMmK0S[vYVgt"Ίj\ *ΒI]@R`Hdi[cݦ>Xë;t|Wऀֻc(qI}C-%2ZpyrB[VYnO 8Sv}vkqO,𽬂9 qQ__E^_ k2f5!S5cU|`P2&=CUkLQpθA019}yKci2w2 ˦@󛣫xP --tH{;%l! *-AaX+|USAt]_ny'C0] U[mG85#~-z  {H1ijB40*+MëZC,ʖxb^g30MgWb!#LV!?%|x4'L[f&MhI[= ![,LyX  _=whhb9:3ò"G? 1+|_?M@!+\Nb]cK!{m5qY[Qt*a펊$,٣ Fah܄R1|jGP 2eOW7!V^jK1j8{:鳲uǰ}QcbeAVRֶaqv.l 'K"GV뷌W~Y~GӾ"1[ jP-KwI:ON{x@ə:X n> @62gVAPL[=Yl/kn6 @g$L5smȶEP A00"ItrQ\W bLBnPWytSVh(:%VJoL}:`LI_ 7} t$l|imT'>&߾La(#4S?1$`]{89 ApYt)ψPhI?!a2_V%6ld:Il OTyQ&IqE;b0ɽ-0q3^Wz7vތԾvƵWm"aixOz =d-|s5Vq()&7*DR0tǰ\hࢦ FՕ'"Y;/a8aЕ qA8 N@;&i@PǶj y_sVc T삗Nx]^?;4:n'=ޡgbG` br cqq'\5ɏ+T"_rлtDƽRUS.|-޵HUڟ;^sf"oòIUh}eTnJd8$P6wukY +wSY\{CX%=. ^Z&FRtKαLL$w֬:NUvr7Ƨp4ev8lx67~#aqg Op"wz u)a",b/LE#]UiRGмkQ!"a@?(㘐v1i\SMD#j Ň2BGJ5bG&|P{2$:(΁ө^ހ\ӀGPoŠ /ht4ՕNΧa O$i z-=@7JJ~><'"b8NbyEy:X ;1S~St[@ÿ/CW n9)UuovpZuŝ a|D!gL+cWS:l&dAKO58lVwچm&AUr2vM)G[e3{IicXN!0Ɲ78du pY%)[YlO5y`CD'ԌX82KLN:{p[2vdٵU+P'ڎqsDo!,c J qze`84 [/=σi[ Kq^X8kv6$c!>l`ɐb65bAg8H" Uʧ3|ɕǖ*\AR `it`jrQ(&=5h'FMqn5vX3?%?¶uJPGSg8MVhFz"/HVv `SLȡ* ys:EϣމFJun`S^Ka@ ڼ\J':vBa|:y m%5`P"?zRg "l# mxc̣4` i. UxaT;hJ[bNz"B'>޷wBV<]ƻLRdDxJ.ۦi֒.ܳ^2=B$ÄL=o;űJ K pUn, K>x|ְsG+B"PQz[Ch7COO9)?<D<5ܷ ?c>Pa*ld##2MꂼI3@ ɴ3*OL^=b]D$J ._Ge,iIPLmg3qr( S9" ^$:UpKuHz[wc&m>kH)o6O}Q6rL:N X/ε65)gI%Gh_K4]?_Tg>K>1U9E 闒H`Al@6@jսl?񟧮@ eSK5rKWkT%p*>g٢ NJ|$Pٓ R̹輴3m[+dRYJ^G*՘˴0n ;8BNHֳl$*8aLvCT ݛ^+ 3fMN[NccJLl:6 P?!ᆌ+y/j@b},6.ԾߎGߑ >ҾrjTR*5G !<.|Z .J;P!)h(U 5D _wԙ Ew#( <:},OfEj$jᇪ U1~?;h@x&upK x: [j瀡L=Ui`sZ?*"Kd"EgH>N7:DÈ}]\idRU8B+oSgy4ad-o+\X %XeTP-0u2,Y=[T/#(ԼkƵoƩ& APF\A^xG7'aOH+ɕ7]"S,G:<>6rjktcbѱVz8(uNS0kk lN3/Y7aGZ(OU3oY^ӺBHNh[njGGa$lt[R?RkAP͹8[EQtKxeojXz-k_#,֌OEO$fǞ$jqb^unʂԭG^ypf f2lޏ*TD˻ m`Ҽ{DD1,?E,`SO@ 9sb IhUG.}~2GhyHU(DWSLp<{}e07sy 8lRax1s)&q*->}Fv4^$clv97v[ABvnw;0kc(w,z$RSzI8`kqѮmFaFh`[3K/>ݒrzfCYHfDĢ'­UF犘x4z[wɉݽ:Vo<|a5~{^jB7~mkٕM?_}Y:G,ackndӂ8P0M鯂tjx]S66g$Moc N!: (EDrع6`mR-S}[>j}NN8f/q%Bf:<_`@gBaQ3 qU $9V! ٜuDo_O>V(oM6o_9S-+#O /&/QbڑQѬirBɻg/R/* )i{:p%e-5oyM3-R[IqMJ S9ְ~% raP9ưߵC'AT5Y+E9><09̇.C/mD)H t}($;@0b !({U"A›-ԛ]GaANy0Fk(ť}} 2 p aܠdť%5]zre;]Abs%\wgocaх#<8 ZkX9h(r]Q9z+bezH_: r8J fA!u\GKJgK/,$ 'X*3}w:/\!l'6\' "0; $aW30g&˹֭+ b&&Ƕ]+;i-_,Ew4Dp^fpӺ КPJ Tg__+5%۵cwҜ8ZG9nwߗ {)z{dvD:kpem,>?h&Ndm,.x.%SL;7*+b x!i9nJ`o9S%s򱴴01Z"MIżT<\ʃruo:!NLf"Z XxnFF#:"+VRe| Ӌ:É$7##arCG̎VCOȟҨ)-$pe._2E< auVŅᵾ$=v~Γ.Ri[ikkM*%Yi@3B1?1uD'8)j`wkz%c ܾ"#بUzc#(<;P $U_VM[|͍Sŏ,X0c!^ky3mՁXJ~)~Hn^%X4L_ "V^_h fJ#\0PC<ޡY=fvQsTeD ~n0n03{/_MTN,?!z4.Hy-GM*uE7&eyR@1f+Sk?2 7-Dsy & 2Ǝ4L6^ے̣ܩ9FY:߮KTOze\H1eni;@ h4;)k^D9Y><~`> /iTNhyZj,;R˗"C3«kq1f?&tBK}?c{ѳX]V +hHTA0ph/mw5LA ?l%=\$\+taVْ'K27M0Hτܺ%~RPmo^3 sד AG E.A%yDl$źen$nqz;"@R2 { ,fKXv{dzRUL LG\G{vg0 2+L`r;y8;C|l\6-=LPpDj7xXh=r9^q$''aXy΋}<I 8M;nS<4Vj,-XyG)U4"8R5DETCUO`511{>N`K޲fwgqOmƯLܦ{bm^Wo%}*<>nZl"t˔iH&3Nzh5E؋zc.bI w8}h9k+~mD.%o)-а}.&& Jiפ5խk0)syT.M+w",y_ށ7 ?G|Ah% vo4DHY~ϨFZH3O ?`,IjqzIqG'"Y8-cr'pb3y$|v46KJEF2 l) LR%{n$MtJs.gw=>K"ɾZMn&Άr'n)xz;/oW}!9 x@EH6De.d Fthx.5ʊo0P`a5]9eʽ٣#[Up)B|0DuglLl`c(77 ϸlQ/^"y1EbZQKxh&HPSWzVy܁/ xmy,~K2)/,b 0^u T @hR#bAұ} HK(\5~l ZeEB!kK5jԥhPB]Nw[]9 $:&,I+>ꓡ f2aM0SC}-br㽁,UN[S3DN=FcK|P[XmyIiRY#*5FiH:J1kp@Z?2O#>c:*M S2 Ny*^+i+F%9BGit_ӭ-cJKX7&g R-@r\5[mT.` ۆ߁ꡮ (\S >-,ꏡvPW=P$#\5`Eol&ɈKILp 1<}8}MusBdԠ`+"|"J$K^ TTg͍}{7 ( >ٴ4gO0J\,&>Á!Y ]:Mi_pv%R,Y*~T}VHy.>tP ^;]K89(AW69,NЛ9$խTn(*~\ kt@CYzԚزIwox#C`R\}A%~4Pb&RX+jk4v 83O @%K1S̱G}1s1vv" ~VnM3`D ?{ 1c(>Y_DػawnGI<8~?[w{*jo^3JIWMxX_Qݫ'N j L%|ۗY2h8*~mU[,lXQ_=Ɩ1጗[:A @k*:ٙ6$db.x ݇/@ty

U^4~A(\@A OjpW`HEOjHD3Og3mMCIz^<8YF]Q$ ܋Zg鯣|bi\o[_@%٥7#Ϳq|tقO&ʞQ\I.Sk fTU|Y框GٗTF_ؙdL(|9؅Џ #D3F,V/ayw+enᙓI~uexgL ɜb(D*6wģnf'OE!nEHބ k5]N<,_2{2flܗ‡LrX$>krwi7rGO|#D?H, aMڎBp( zTƗf+/#7cfz'!v`l= '[{$b9S5o_/Է$+&}cÐ$wK%tT}ĤvJ%|ӆ͈{aHy n+`H='BJa`c`j(LS?P_T\5ĚZK>sE"k$gr5es"K8?9^Hoap/j'S澫$- Mxh)@wh/J9 ,W@p%m?اgWG·I T I΍bIKPC{e8|Afq|@b| ?'C ˝>kiǾEC?+FD9Um ŻQmC^'sbqJ$gbݪm3Ċ4"@GQ5{]yUJ͘4.=udlCo~ft~\o' C H?>b8iXf"= 4I }踃J"RzHY6SӅyM.5:+BIJs)~o>>; D mW}K?;m g&83.fO ;)6e_jݬxV4ٔw@[ 7|~8 V<4Z٠K Ul 0QE je!RS)p.N"Vsh2:Tdh_uл}]7C_ 7̨noUr!kBN31cMo߆..sgq+FM(Ӯ^> GG# LHݡaG&ujvUXL'My.0NE;PX7w&=?"U?O&E,Q 5}Js<볝Sv{xeh@!{uԜ-tؗ^we1 AM"aiI/o{)$5P8̟}̜J{=d͞k}6Ag ktF5Z.&rv™(x,S11bG-jۄ2Ȩg[t^O)L;tuD7LRO㳙7Le%o;eK kH=gRZ*%X5hwT6:<ܬgՂ`ß Jd/XGҮOے]Kߔ05Aљen潯^n)`ħb<_aqS%D(ik'gX$4*"3cjkyBKL+,*J ZHjȓX_pMnLQ2}.s+q^nwmL%V_PK=q_v"TxZy1mW3(7fUjÁ, *2]d20O2ݡ;oSgRFª(>$2Tk<ڽ2Kօo\f<JnGql,4A+Avs"3042(R(ڕ\b$keNe7)E12F~&fmIqY}6L}͹ -V KEUa¾ͻ{nhSxDl Фoy@37pdv˦k-ߒҙ e2:5.Nj{, v>{1}2i6l2hi.=vir]ֲLHޞU~vR @%5|NQl: 9L:l|LZKe5mFuڢ̤KIB >JG]ˀFNɫF?՞=#?Oxd>|ROh"H LAܓđ_De%H{3dvK k .V5ú~Nt$v@fKY>nptM=V>S|5Rzx5qrKK0'¤]c <;LsYs1R愣 f j9l"cIFMf\9CMh: #4tK b+Ր|+z~5J\h'JFr87ֽ&֥W^q>0 YZsurvey/data/phoneframes.rda0000644000176200001440000001400215147136401015516 0ustar liggesusersBZh91AY&SY[BE_>aNW>칍.laR%|nC:3ݹ˭Qv4M52~S24 FP=OHѦ 2ie=Mhim&# 4MC щHPibTL@)И! @4@h$Ҋh'Phh 4=@ P*(4=)ɣz&FLF=M 4 F44bh4 4h4i4)"F4)iTM @z2Pڞ?'S)Mfm xIM <&~)ڠgiѓ@z wMztULi]w>;8^jQ)6q{SdGck0E 5 ߺ{T:zL74k$H"(A"Yw&DЄ8da4tb"Ū%XUQm-TE* kjbxPI2g"h",UC6bQ %Vc ZLPEL9q0Y@ֶ]t%e*(5,J%D-6 dƎ$@䀠H)BB;˘NF&U >=: NඹfQ$PKQU (oWBqh0 Z3^譨b8ȪQ*a rO|S0t[..d^-$Q @Q "?I!I!8JViKJʪV2h%-mmck Am@(Y: !6)Hh) N2Ұx!*I!ڏɄ3 ᄊJ_$Q %+F !Qe/Q. Ur7qbڢ*)dzЊӮ_eoq#u2nr Tވ@0wXPUI"7@b-:X !a~&|n9~pW}m&/OȏD"6\[# K"Q؄yը'ϷnͿM|D5Z{7@ @'y{}< ý6Xz}Q0fat ^&GG#68[: :*łȰAaHRDdEVDEDBaŊ"QHB6at!;|#o(U \ տW5Vku>A ݕ] !5UH=Bf^pByA4T Hvi!lO{ES8|zWu6l{A}DIiş@D9ju 0[ su\2@Q TJxm{~k$Uj\ɷ"Aj g2'E D"!ljAͫ6E3` LUJZ5fۅkjySBki6sH@H70BK8* ߻ԩYYPVIRVJP*`VHTd+!P b4Dk EW|RWJ4(ʿED:*H4$[+ReeBXV%IY+%@X!RBT%a+ RJVIY%@*X` T d +&FU=I$ RU(@%ZE@BZQP2D$@EdDddPE"Abj E@X Ad"0YD %PUM%p%fbFDdBE$FEd@BDI$AFDYd@$P$D+TEiPL-D[p$|@T%:bSqwMM:@mAĠ\=4i LV\v2_T "L'9RI}UXV4yS9w_ -?Kl"ڥy)]^IV: J 1&(tI{/p#?3H$@+'^>U;I&K@/6lSɫx"7{fӲ~;Kiwq~<\,V6p;B` gA" rz&Gyɸ5[yUtvNDp@^.fŅ!:X:>'!q\KkffX{M;}wKmzi<8ļ. aP 1X+dg`\?GAˇvoKIu0 !vjL©ɚR*HPu{RG\^9ԓnB[ 2# Lƃmu2@i!s={F`Cll%! $( }ҕA, * "C.lkh*hp҅\){5cuGs`n:aX ʃ@`iN0Ј qP0h ^QD!tc (+a@h+%jA-^YJ$ږa|25UFpXvW_GE1ِuu1ٓMnDei,(݇Sߟ{\x1<~ݟwv ^9Sb~fiACQxB&`=@N IbY;}F 8~'=a %A!x6W|.2DvJG+;-#=BAc=6֤Im zآF4#AWh۳/i{}l6ղ'mD" QRw+ l(͟OB/b7v *NησĈJiBQd>]BMv ]kQ|5Yߓ& _mtwLӋ8 m{XoSOCJiEA1%cm/ ﲉM4ڴRC h1 +`)OEFµaL 6*UaRW&+.LcIz/ڀo|4EA{C#/ͼ*:94#5l3ܸf?ɽw!z*{Y 'OTX؂c?qS<ˤp -kWD*MH[24U^z*O}Q8(*`WӮ%mv\uZب+os'nL+_0CT5o3<{ۑHEI 6A-@:`.fxay<$pqtOq OMvŹC}Ebeطkc( !e /xEP(h-%2k=2T5ܞ>MVj K ̱`adKƍ ,$2! ,Vٙ(jWFCvNcpS_eŝvLq}mŅ.Wh5{ '<""(u`o5TTa(gK^Ovo )DҘbQv x=S#[}\{m1,IK!B(#D-.Z #߈^ TQ\Nl44w_i~ !(|,Zq}nf@!uw$O/.-~{tًIW0]~4["I@$_AP6=/ؿAU3Z]p !8C@Q /󾿓Jq4rWMSG+c^mԎ*kl6^~尶U""EFH.jul"]>.?#>b1Y<'] w=xmĚ!<B[lnh$z-);߈ ,M I-י@4 @їJ-cÝ:#c]ݯ;cyAUb+TgbR o%:-*Ĺ3t08sΐ1z[:-OCB؂U`8cgۗKl}ܑN$P@survey/data/crowd.rda0000644000176200001440000000031015147136400014321 0ustar liggesusersuPY 0&ik =rOWC"IJo/N oٙ,2* $R%D CWkbHW)y\#|a~";d@A#u}j4ÓJfpX[Avy,_g]xVBhϤ`r`rdrbrFO{survey/data/salamander.rda0000644000176200001440000000157215147136401015326 0ustar liggesusersBZh91AY&SYX /G@@@8%SU3Db h02442FCM12CHSHɣ@iɣ & F FLa"Jɓ=Hi4M \6e `8Q% 5Z5WPv7LB,+|l#&d4d1†@@2ND6X޲&a<`t*sA^X ]o$*pƥ_8ɜ4R?gN?dj% $JKHJROLk~"F(9C StuC\2bg+]!錫_nu  FQG1_/@~/xc0Ro(ֆ񨡉({00o E9k;<ƻ1?NHcTLrd&4-kfǴy5F`QHӇHZGl3L$6̚/DS嘪OS:eiPA+ƟH;laQ4vg'sטE2.\,p $(&TIP>TF9u } Q1survey/data/scd.rda0000644000176200001440000000033715147136401013766 0ustar liggesusers r0b```b`aeb`b2Y# 'f.NN q b643A13#3a@q ` tB7L`>K> (m=B6%`@er&&$%BRKas2R ,/C6 *hc0 a c59'f$L+%$Q/h'F#survey/data/election.rda0000644000176200001440000027341015147136400015022 0ustar liggesusers7zXZi"6!X ])TW"nRʟ$6Ar\) Պ*w751o/]T8 S"w.v_}8B)-YNּw$J:OHhkm!3v`(uݸ@/Ƭq7y:9Z|̢ZhdH-N#sBc01E L_%!%z(饢aҜ~r20u2LN̵Lj?*2NzoN-:;20+=3Žpp5J~Azl1{ZyF"Yz5&GfW>;W&`4q.,S|4BZ{؎k3DnYǕkʇPƄ!s.ZtH15+[G;wk$(s1V 6hBO \)[[%^Q/ 9坼f|PeBcI;%T;8C•bIN;g3v=k,eZE@Vw40P&%qqHXwI3=#y/ã6ݯz?=HM4$? BZj>Ȇ1 .H,Ŭ3*z8_4`)}^im>7=z-af@爫7U/Tb-z] SdWPıW{R08r_`TobU>l-P9~5YI7\wlú}hQGEDVZ5"3l W!*}(۷x#aƭԉeN;,"*^%(c0q9Th`|j*mRvg a)SňxW0epa4 Nچ*;Ш wS/o P~FRD!BoڢbcH[9y֦noR bp"+|&&@@+~;LCi }sgoRrDy)ẒZNMB^z-2nmaRIWND^ՀW#PfN˒')퓴/X|+ jYDnr]n0 :**BH&0<84o,T.0x#yu9ZC6'6yRp`k'aЋ&8 ǒHb R0.`Ek2Ǫ]'򣱹7<SJle)$Căَ5!/J9Q>fϠ!;kO'Fd#öx"CobpO#HjMڑ9CJQsUX Ĝ*PKtXP=!Iφ'+.0",4Ż_A ʝ&>ƾ 4*3tƑd/zAuW#oi) 5IvLɧ @o8ճH==#?JMa4m52=[[QYRxVgq7 ZEsRL`#FZh2Ϯޙ~ ǒd+"#I-#!9Í+845|к;Uem_,)`Ɨk\͙Aegm$E6Ț3soK2ڌ!*vCE͌jrԦ/3XfF$qLqFsFjq {4a?<[-SVzVI#{!q|LЅII^u yЛ)(A gg߻v!'b`1x L5v30Y!_$358&v]E=q[1o i $ i'~e ]Ď]徊|j9XZl7ї6čĖ:,UB$֝a} _SgH)_'Td'ڎO,r-&Ha@oy+4գ6_`_^&zE؆T7xڝ"Lr#]Є}5cy7:: ịXxrkQ]׻BɤWfn7\^tc~HÛhmS޵/!G)`v8"vzG1,ҿo%{t#zw|ZD2oWUhEfȴ*}$[BV^gDXpd )򼺍@FQ D`_׿΍"z,.]wUQ@3RqKNs-dlͬ9)ǵJAIxB3>Le@#k(Pیםb!s%63YC0SL×]&Od=DWc X1M 6%1$Lg7CάYV">jshѯaZvQ QXШ[tefU~Ƭ$S7(|yD*}=y:)E:¤\5e}hE>'y<3llǏHht-sP$IĶn8έPW8B?doYPj>3;,OQ՞u;J1;"Xqa$1Zn@3 šdp/ v {`|ƌGZ:0H-׻-N>CFs¶q| ln'.sܬ|A2fy!= IWPo@%CdԣO:7ئ0: ǔBK$qfCQ͎8uwry'x]:;СW<lj+b yd-{⇶?Em`Ra@1&],4#-C*6ϺM6X&7*qkNsg&<"d5?3N:txx`y8S6`MHbqIi04 #睈+<.fŎg6xo%ehc(\RFPAO7V f&g(n΀S`ܶ?STM[dW׌5W0v4R^5.srЭA_m (7*Q\X.eayB +YrQ~` ==Zh{oRY#O?j$j\)\I!'ҋ;Cwh&L,-}[lVP{959qmaQ 0UeJ~u2:D%v_l=&7>91W:jvNsI 'fnmP@%J_;e5V(@:7TA3鷚΋daֵn QGC_JQ<[C[B,/gĬdk`&0(;9EF!㳂zLͱ#x8X))x!/YL ' y!%!^ Q$ZrqmB$o׶tcyz | ՏoUS9byK$}g(~kd ЅPضqrG-P*}ҋqb~͒^V))}csi+#%{۠Bf+a rL7|,ꚸl!!^ `8dxKSRq{ەjm&2u?F D7 nF:M#/)A-z˫T?,܁ oLm8'W0rK9,'LY2nNZPWlau{vN,uXz[/Ce 3}aȡG"ȑ *{hGN CV\aX،6ydkRZYyuVn)_DKAԚ~~rI UkrL*nxfH]QCkn_a>@N|)ۻ=Je&D0a' Tm O{p!'q{U.y;{#<\uF ~QaQC=SA Q ~MpjQZ(ώl<@17Cg(M&KVW ڤDK`~"?/ŶeB\SՇ[stg((QM5YJ;/,͸린#,0 P>ߤ%s _P (;άKH:fv6bvZHJJrȉ55Bs "14l;lxŨ0B+,# -0ZfiD߅/U‚WՕh˜cST0fW"~ћv}((ïf/r9&'$M V?[E =9E'jbeCښ?N.zWe0Wdfl"^wB3Ν4 Y?hġnImC$ޖ&&n}Xʼnyٖ55áP 3I}<`Oc`gg}T(j]i}%ꈁ*j1tq߲v&1ޱ٩6c)b`9䃑0NJ<?a ,R:Guıvae ,mWMmk{Ni.:>G(?|r"BB 㴙QˣiP4~>YjG7o=G.xq>v"C6BlӃ519[hJo2hk2m{VHLiC[y`Qz䍰\-p :aB>mAh #d84wWÍM@on+pG+hI}:3u7=g|eBwm[[쫾rÓZ*B^M=\cJ=7~Xg AQfxJlJGp4 I@ OB1_,=qscSO8 W$£x,=%p R1(r|qƅ/*O™Ugpbfmز|lfϸX<96%~ {utX}W.u.кJo(Ռ,Πv.IjQ^BAAuH0QjTDz U)FuSlK݋H2 8n1(N7iRvnH}me3@yf;K.asCQ# 5[Kv1ҺMBupjx|nLAkH.8-4ŵ͈>{YqץZOWjE˷) t^e|"L/mD+*J5V:_d5e ߿v[Mx?ôFx~}j 0S:O+ ,veHxSCXec"CN;_n D2q؟su}uǶYp4!Vz[Q8v6ll+* KC45tqDmsO</lC`s{7 }6vE8B8G]hܯ7aohяv}RRjٛ2%k:p9l!ݶ'~Wog^K2xig`>Ͼ`/ޢ~NQmgvMd _2CH|bIgc>Q2b^y>`at^u]Uh?4#`DZ g>Ao4"k8L^g @Df>P^/9W\%.b}߲UwւŽE4 3G,WWs-poYDz;}} NjlSgo?J7!gMхW ??/w+r9=6:4$0'kmٓB$]O@Q}L3Fz٬=Mabv,9p*3$WCtw!RM[[P/ȧy[?89gZJUzIlZꮱYX@g˒e3Ueb̕S3O{5X#VSA o`9}5y27ia3Jb*6PHr@8rHנa=؉9hLAMFƄr.ce? >bEj>ɛ4;h8$]N6saaS`й:á).P(-Fn;KBK_T|dȷ/\"M:(G5e(}xJ.cbJdA/%.CIPk8PBl?3+˨![5r.go6ƭ+gRD+ R D6{h_o/=3}'mBVã?ѭO$Fv4@ςTz$N>AGCv3;$yYz 9WnbC@;Eu!K$`_4fܘ'sF P.dVㆄ:^ŀ4IF\M1-m֫>xrW$P8rqA ozU$*7wa Tg_v'8uG5D6K8AzV t~sFY 3Drʈwi v׶z`' ]:\~Hbd9j[F7n`lQH+U8'eпBcb)dI[yo,0M ~E?Di?9N箬jLmlW",6ēP#k egwU.A"D/gWc_YisTRvKц[̟ ^ v %V/*v'"mln˾Y?` q3*+IzBtH+;XSH[fy Ƣrͣ7aN7KhD#E.F\(oTd;5lCfr!fZf˵wgco&N {m=r?pC-Jl-kNNGšX8YG ;оaYKoqTNwy3kO9Hņu> PQ)buxE^o ^!Ȇ쇚8da,0uzeҡt36^jeR@CL6pd@mCA& >q]#@ RXX:* > 2̧\k-Ez8reF!'QaXsy0P/Kh:WFj(z_:VrǦ%x#K( >ۜ.VJ:֩h֒KG!,8z,Cœ)!旎H`]V,Ue; "^HEIU+T{ f89YM:MXޚA Cg,YV<OLkOˢOpU-toDRB՝Q.ܥB\F˔&26BU8Z\KQ7E+l)>)$ /_UHI-<@V)aOۧ2qس?٫+0`hZK4c5w1l&O #5%M8+*8f{?yo@ojyaw6~34"v}+ Uɗ1b8қV3e+q9s[dZO-ġΩݿb x8<?>!|2gZ%nCغM)!QhiPl!oOV1!éܳ}xpƸmݛ*Ҭd4SI&VC Erfw-m=`uM^h?5nр/tkZMpi:RG\ݫUO:9m=r%ȎՃu4ieN;7²n/&MaL03H*ko7(}9\{zRcBPwi\xף0W+e`a0To/{f/_QZJhNv\DiPH6-C$}a*cZo”(]i[e!^>v@uԼHcuPSS~'vHFonsاhgs1;Ÿ8\֑/=ua)Cdrf""u {j%(5O£P^egj;E4[ A63(?0ìܧ[בo 'g^ Xz<+9biG9 kmQk }Ɗ7 t?DUI\7-%.sF .΃PVwOk1.g><el8jlUZ i>00E XT9-:GonCԨ} ʰx޹.<{8o7 Fie#==C6VD}ӅqLLR 59A\\:]} X%oyTߗ ctI8g_ˇί;'0yٞ;2PޱA5b&]M1a4?LªjKM@L}G'fpՆ_ޕ`zsBivx²4igZp zyN4 1㞍V)l{'a^KrxcR”6_p .V =;Ks vߦŒc-H%9t,<ry@ل˾@Bq݊E&noGAgt5"*T(h6`)g[FeeX]29dW΁Hoٓ=ݢP4 umVKZBh+@E-JрC-VP`z=̺^1c hu!}7ևHI *>ak-{{fyO S[r@8ގ4លթN4fzU`z5=z@:eg <=., J'҈Yb+{=_a~ދt/$`t7|$[jJ*|I'HZ\hXCfMbHyvA=܄4Rs)E!~"PnG mTN + aXzW},tKWy*+g_98D)5Zo2IxVS&+աBdooQ+$ƣ{0\{ ̱&*yRYɶ/H+DIaa}♷"@N' "^>|y:Fqfgu_za<{$! kSR[wfLd>вvd 1ǫzAncJ5ia.AZKK)hso4Cyyڸ+$_9ۓ;>T~ Ɔk9J< 誃&MRSV_E_()YI-Lv|+~>(>'2ػR$bcSWF^bwN4P RTT6,usv̆+IWaX+,?ڬ֛/de bRIâ.s ]cemy ~yרNQ~75)TslZzi218BXGm"vO- )Fϛy72ևRu.cm 9I8ԘNާ,?jGkɗS sκK.IL%ywX⍶&(-A+M/NO暰K;4#Ϧ4`3bBmRdNXf@ٯ;K 7mVn.U)+[# x39dq.Inm|wxUb }]64Ãth,0"W{vӰ"A~&p?r[[ӡkO +3ldBiFRg,'}K8')u©[m-oDA]!ݰpP6+I98 ) 4Tԛ0lTg,D*9AkN-YkLxX^%'b;]F\qp;N7$ڪQeWgW،j0 W~vڞ,␌rW0>mT#j+~5+7₨}i :f (Jj=$YSp3±'X` G9)+n,Jq%1 ?.OO,nK(Ym<S=ٞeG?\Ht3iT||4ys39.`c~J2S6 +a=CPE;LP"!vꗤ|m_,3TG]:XQ$m⒖də5V*1-߇hsf$M.30]]Z7#SG+v*9!t6^)zFye7)vaζVcU8W܄S4{ fH]anPqtco;?Tl=k23!OpI /a)lwZRaۇũ#^,R߃9-kQ%>=Q}sTJ! +*'W Y(2~23W2Br3c1Ta. 4S Q¥C#[K7`[HE}xza"?C;eFdmY5%K&[ d&H~L.5kǧiF@ elG 3O5z = ,A}9P[/mjIM92]̳ RNvDAt YǨcS&MI_~jg^KKuƜDdFyxЅr~)݀KyZǞU9:Tբ/;eQ^Dkq5s`7C\zU9< V<;iM5AЛ@54ej7axI8}#Wa~/'h!|ο4?⵪EA Uqђ@wl즊`s\զ r"}xq/X Hx1OZ3,t##v=  >0QrvCrI4꒚9לĎDW$: Iey %ǤӝQFWoŤ)ɜ){ |fH :C7 ~DE9heݨSsk.--kxo2:Y^4:(eS+$u* *~@#IͅN)M6SɿGYÖGTz(nP Cf9+>t\b}Ёs; ׼Y:!/-PxiG?Q}avDSD2о* ,#\wW`94kY=3H%\yEl(Ǹր#\F5.2neaG5{mY-mʝ0m_|2"QAi핒Iupt~Ip2 a&5 1OZC];ybyd4 ,XAFcX]A)7x.$MX oIr&̢e"%w { 32UtrؕGks*gl6lH.O-COKPSdA3$vvAT?~W6\-7n䋯#L"XCp̺Qix ڀ `T?tc{.M( *a\*f UwF]τ5č[iˏa.!mJ"*=5F,>Znr]BAkSI~A=T(WˆL0 ,AVM~os1Z*mP7c3=ičOX'ME~Xyf#wwbULֳVf9 bp:&+<0\2Hj}A`eCPI^RDFai٧",=>u?zD|^YXqWT^4KcL.%sa?uV)!(I|hĭ.3d 5utS=>rd ӸIPc!zQ}JJ7Wt$=h6(2W!~M :eNA1Tp!Ϭ-z{,}6 Rlwt8#Tiy<5(2g fA,^ZC0E4u5Lq̈́U]!oक़98sc]Z#6NN􌗧3@Xoa+[ݔ/EvvrO OJVw2 7pHf4Ӂ0 ٞ~J(8c(O]eOIJWtc 4=ItX]C>s,BxGhtOiN8wR:ܙ1[֗σI,oL۵ . PmOdY֠o>Ϸl_y蘝q q}ln,k-9LT> @yRAPrfݎp-wpû#zG/`Aq (|PѻTmҝut|YBhCd;iM=3) Cf[ [`mR_TWM ږ& cV%V$Efi9YY1F/XmVm\e2BV̓p)RSD&v˙7Yz|1x#pxpN]tU/GuCQ x4,g!ǰ,}\¨ʞ8_< DfaHG^TQ.WQWJiP &zF )ק( e_/~86sEI3堸: C:Ȋ=@yZ^eWeV{Ji%(wZ7%n+ 3!! WIxe㲆=^.,ּaO5Y`ط.f;<'5gN'IEfU@ Z6/>E߲2,K8JNYhzG.!8Ewxu\hgy ͑\_ gL\`&~0bڹـ$ N+!Tk1>tVCz+:zp)|P <>ZKb"PX=8꽪=N_ %y+'xoUQ QI(0z_y҉rBib&}π!Y b(feU=naC':KB qFlX׶.rn ɼH5U xWE\)p*y]`Er[ː.x'GWОf !/'7_NE!۞poQ`CAd6D8:@5H4Ujub:E6s`3h^s8(+ šܓnR8ľN6PF)VL亞uJjѴ/0b݃x5lfeXT(='q{w ;iJs+~mY&cqE> :Ǽ[?*ʵtn\>MwcqնU]hEAj*R>}`U-*+ ufLXum$ϩ P&2ԟ6AF1@(L5;Q.XisTFPlaETκVN?7 ki<8GF8$ L9ւi4csL@dkUdΑm=xwʷo??J@Hgm#,-2+1[Dי0VR F"'_0.^:qU{xXS.r6\ [3A5;wǡoc`N@,V4B%2^T[=e(z#}@:Ғov9`m^wxpc/WP{_4~b%!7`U_Fߟz>bnI) $<~9Ti8qyX Z͊2jᤓ$cHHBހcwiR֟uZ<4=o,1n-K[dY~ki G }0ؖ;$va-kY:82i7CJZ뵁)FUX$z|9P:nϙl"s#Oe/14$y넲=bח=k<7j6)J HBXyQrTuʫ=b,Hdr"pwˎ-ĝ%U3HciW2E$a`{gY#̔Έ4c:0?6N!dY :MuEmq&FZqQ KܡZpC¢UxgePI62ݙ&fdӹ.m#IN6΄w`?!pnPϮAuQVI`HDNh'${1LwWJ~;%JϔN!| `l4Oe*9/24ɪĘshIcOxM+Lx"acpP,M(jng]E.๨햜O@˶gEb7YX9lp&F׹phJ#S̈́}KȳEmc IFJ+`¿3c1t*._-P3}(*p֪}ڣ'i$~^Cr+*c/n!ėNq`Q6Km gҌ$0e~؍hb=Ƣ""[ گP훠Kn;x%xizxs6<́ZHyD!J{H_TD,S9Iե뻥[&E( zSnbD'lh>CP5T ҼMtZhkW=xބ0pes|F+|- *vӂ tY~rL˥öǥj ҈Ms\c+0cqvk@&/rϙAݍ>_uGn5,r78=7"bac]5 J2 kW4ʫ1s*dwYJMyah+5VGLƂ.@ۨXL7H@:{v>$W^3(=^+Zm$^R|z;>Nds7?XKW~7bdJƝʥa $W#a1ZPѿD8z2wL|u+:o>8R}ɹRwDzG3c8ͲgϛՍ-D {Jh)`?+p#4yvup7iDY}i* )Z4Pߘ>rcZ"RnSnI)1f%cgH*Od UױAn3ef~U0)K_Ϻe@ ط<̨QgqtO..B &јCn3F{w8- Wh{rw,Si/dKسUT/ʶrq|&K6Zu44 wΦ*K>$d-]uHVS:l(~ey(T1?9x..QAf3[Z<įcX;QTuJ0Bw<ڎDf8]{v>'I]"((nCP3ŢQ;Cm/;O9#@Mȋ^NuB?]Ԏ^"8Q=pu;^mK`}O,,Spr.w6)+RVѶ&~Ǚ@ Ş|;m, aDk;-m1w.AZy:F%#ݯ]hwg p:fE+Ltv_u4luV,x~\ρxiäM'Z7]ْh[~Fv1X翋]QIstSł q"%mJ x֨<z`cH _A䃒_vkՂh~K(ż_hτ00 E}_\iS4ØĮZA:הϘŬuca7\憢''3}ޘ !?meC,[" q[x9U2w'4^DA@ g(66αs?ʈ+ۨB s37G7}q4q(T"/w[$b3c{oy=G_ʌ.rw<9-҃tU&\8Q|~{ ȁO[wRѮl3>,N޻2mֳZF ? @kRVNi։ a]~?Xy/bϏJyxIhe6y砶 w^78࿭jP.r!vl^C]u&!oxtS'YL~? zU'n_pyj/A(8nXBɽ?좗Rܩ7\! VkpjshK+-Dh·F} Y#SSASovfT_/>,+IJ֏*jv*N8^d[,8Z#b!2-ûkamgBеű$;| G-(q,>XUO37n\~TM^Op{]3\DFC s##*%]c^4o=<^shrLPrܗG{.rkūf`.x°f%%HN^TUN9K*|'g@9ohNڋ9P_(ӾQUbtzN: E%gۖ/Q Od[ 5Sʆ}6[I;=] >5vKap/B1U;,ŦN$;WR }9Ꝭ˥B'Fˆ!H"FDD >ՐX/ZRq꣎LO#/NFe4 kʡ KsTl}XXTf@+;Stjf8D|^'i8emBdoMU͚T—$|Qq?2'D O6@߭Y9rzbtFq; ~hNXT)nILC'p t;*#|>vF7o{,+ /P.R|C_ﲪ&p x#M2FkM5J֫?ZD9tɂ/_5@89ԇLd5&zכgaCQ_e+ɥ!v OE`W1˄^#F bz9;6<[(ͣ O?#DZB߄]֪ \w2B +["J"1Dؕ|Zv8Ҭ.N=R2fVvgq&d<[4~Z{Y:W"o,*@h<8a^ 5$K[\$"Sȑ*M60LP|4'75{`[W!to;|[E%Ρeu{J[@GaF`2<o4WCɹ:%8Hubɢ9I矤V.; H\ ݨW>b˶_/C2 PV X-qށJ3p]*Ӛ\0tY5߭'%XcH1vl׫"ϩssӜ )f,0ܔŴa%[dk D9,|l+ؐ,f dxLp}騘b汣+Xt@B[J?2oY7Z=0uvytyx?9%ɚ I>y״)M۩бae`f}uM}:viR DgxɎětdk@ft|;#{V^ b~ɇvxH` ܟeP;4G,6L֋py%"KH+rF*>sPdAfrJfJ[-+k>P8:32hQ]=|Blͽ#8D"g'`Kɧe! z9 ^_ .0u-S#CKۋ+ٮYBbdօ=s3x=ehFQ?1zT k *{Y8Nc>@QsFy&Eѳ1-C̞?X_vL.< 7_SD|h'-GXo6 9sx(RaX=$m,%d+-,uWb,TZseSGxifja:P\TlJաH,W'G 'XVR^@4QzkT] 5+oa7Z6Ȧ4P/h/;Q%`wPx"^j&ms޼n= nqhˊ2PjzYX"ZYumTj|`ZH9R{OD'$}W=7`Ӊep8}y^lo$#,w#+ }~? -EDRcX]|SB6@j~<[IH'Յ\Dt, Щ&hQvpq7oo- Xr) \f,\*Y<$k-,k_ vioqt |TE \FQ^#}3*I.}:UeC"My&aMބN%kTkrRP?@:TYՇ_\t}_7ў'@d;_ϐD5sHk\ (zlx}m|(ǏYfڮɟT:9)Ǒ[S賽hZ0ݱ+>'by/aѼDbݑD*eiV+CR (OWřBr'OC +] G|&^Fkx:KN጑@V&ʢEhslԧØWKǶ'/-l:*E:44] ݛy<0).O +]#$ ;9^8|fn|f|"!qQ(M.F䌚zt]ǕX&"L@eߚ;ىM@k :Prc(xlZ%$p(,mltp؞w?`tOq~|e1_^S{iM%ӳC F.oՔ NpLZ%/+77e9 Nr򭬘4V#?? ;2u*NA@ թ@4 }M@V Iy4UVO KG"blQ\JSU_KۛY;bI/" \FX;tYT xAWe o5@%m8ډJ(5Oc8d2gu~zjjs 0Lҥ~YB:&1.W] )CWa-`"~8&s79]Ge}I#1|s#5\ XbO*Z+j%3U]5kMƥ rԡet6jQ^'׾k~%)yhd2nh-MI5͙a*e,tnAt(=@s7 y =ߗOQ\ f~^eAh\ · k ]&җ)XҠSC{¬fc+ȽCa7oCYdJyZ`~bU)=n]75V<䈠R`ɮl^}q{eQTҏ_r;leg>El5zb[`m6-r·VQ$0gOSU3 ĉ#ca 0v 2x{WR1ß~Bs' )pZ̦*j3}Sv%ϭ^R-j뢾9,ι%P"r,~8fzJMjoS[ /hdž/暆}liuiJ#K Yթ7r.O^Io:m:@ fHS$cMx{:ΐr2:X%*/ !- ߠ8$$Þt4(yOU2Hw<`@!C`=ٌ:Ph8!2=)h3g8]nNBEk)*.M!*ڳɨ"u.x\|eJ=WS̋?`Z\htgZ.RJ쌩K3*m:W@A^|-&c?4˝=6@qDS*WD'ŝu*zFzDF'1}:a/ _ɩm(%`ncƙ9­t`.D^~V O͠?^?;?WVdc/pFIH"R Q?"6.I~(N<BF-Ct4)D$5D*Zx ' Ix'u`m b'{Ʃ !Zů94r~WF -/bC!y񞄢@O#?1'¾cn8&J[)U^]44)D%{U-rm<h򷴞'1 -q'rC30tCv={z7偣$ nDXd7vrЅNjU_DZ3 %)𡓃;Vqp(|#T>zuy`%0SͻUG;U<`Jy֢h[\#ף4*_BY2migmh6j?s)ʫ37=W2O$\׮6j(YȰ5qJL%M6mXvd_ͤ'7U;2υ <9>1 %O٭;%,ó=9o7ߩ(%{_jC E?oh2JnqП5?VKuxPg nZ,8H%tf+%F;CfdwOi|כ78 kǶ@ JA?ԫu_sʋ!8$H ^U h3͏ l TꞬhw-6UMu0.Nmejy^tϼ6E~& P;f2ki@zS=ZNWe9 nPs(z|6}_?r.xz%9 F3Q"nu0Eb0ꬬx 䄍#`* ,6m%Ñ]_`@.Qu[};jk#RYӬB^Axjz\t!Xn9*ivd IXfBlCQ!7mMb|ڿj- q 8E>wwѝiAٶmBm|I pJpO6"|P<҄4'eK($#_lYY+ .1m-5HmM/<挀[;b#㖣ut!%1¾&Y~Uaf:`򛝻ݬg[ߍ7zZmbN /,59Ѷ5IÝ!E<ٹ r|PQ7~dmf+IF8. 8#iW_F.gBg[Y~[L^_.zD8#/hzE^ 8FvGie_ٱ*: aG -X10Ή*+[>ޣXq+syF)y v2ʗ0 ig3rqBMIsJR:uΨ YΠkm2c~}G6{}ծ'A:Lz Pgɐ`5dXZ O/.*JUju3l6*MCu {k$3·T"OMdrtbkTk)־Bexa|?]dZ{=wf\R ,൬s ׳_*fR0oDoWt6m1X0XK)>m .EH[Y|0GSYNl08 + 1Vore+s؋@<4qpEmO"`o:&DlyÓprd v%(Г|8D-ϼ?s(ni:EE!7h|fUO`X&TQ{^nSܣB("+I{N<9KP[mplј~n4MS*_T.Jr#s1j@RR[5a!x=b&uK\/#0g꾘K&Y TSGBh_=$|FD)-4O,J]TYi|2| l?*9}Buff*tn9}R`;uoᶢIMN.W6RrO؎V ڱGa 30YX.pߘN'_ޛ鍻-4 ҴlaP|WEjF $ K+0NJ}5[ `Y Jz,PYH^ׂnH* VAϛfB%ٽ>#Zf8z<_N(fR#/h]똢2%$J4>M\; JS̰0)l_S|S,shm#tKid@k>NgpJ D{( 7 0*;{0T̰X޾tJy/jϻr.tJÿ`i6vL_`-u]O #rpRS}TrV~svT\*oSԱ ;z"xPif*Α&Tgod ?ޟ쪇/L4NoZR} hV^ zm/6c\@Bڞ%ֶa͕J/.1wV6 GuwbBOZ^ P>=$6 X8٧}JEetbHZ8qX5:UM|Lc:;~I`=1K`4ؐj6M ))醂wD}h9I|M Q{) qvO $ʲi(q,dzQ/v>l5 P4 KMv4Iݯa v(XHhpNN0#Ìhnsyg|NCBu`XXW-9g~IڵNʲX/S^AO]lC wg̙<98`Ti2{oKtL'F-M/--"siq}H&+}3 GrPYCE'\egNa 13Ҥ sk`ETm]+6)@ M-{:LS;@dܢQDzL<1G )ktLZ{$ENj+:aX{*"d&Ei!rY؋P\Bz/d MdvB- i.eq;mk5N>Rmt3D}X sT%6R%(4jÙJQWJPnKk犢;W?:.ڞFIن>}jsq%N}6+\Q|%T 2dz?h>+״Ԅ(p\.E;HyU/oؑPdr84!>ь~>h-ՖϑRA|֙$R'uP#.sa-w 2q a p.F1l|X- c3-ն(]X-Pu=J )YgJUQ28ݧBEBVm ,oS1\g|⯏B@)M?xzk-jbX9J/85{-DQNDӗ1F|k.$TFtČI˭=@hƛp X&v]ln֎VՄ8Y{!u.Pˤn=^'ݻy$y&cu 3L&D Ăζ[=NwJ5Ru1u QPiծrR UmPUApK9/m_ C?Xs9= ;J+&u$a]R`y-ʊ4ƨ;,JmxTWUϥ+ z=eb5Yur("Lw`ay}Zbva+u1?'^+pqyϛ-%,:m`a0'@p3HX@"%fl`88C|BUzУѐ~%|<*Ŋ +8|'wZM{/cTz& @^{Lfڿ+Cm70҃ M\;ޏ7x"YjjxG}V^^-n~um+OUuȒsS+D\kU4_ m WBj͓oAԸh%nƳՍ QPq3v"'wƲd rkBK_N2YJ8nІ iq *!AEzqqR<֟w`| Z21IBX=]Uc oc!Q]?{/i6bM`ZʋꨌZWwy(?LKfF? r>fynՎ(S~n$a& '~$рB4#uy5ݜ`Ѷ=9?g[\T(Q\^uBN%!y+—ya1tcoh1!UVk#yOA0B,[c35?{SCxIc@eպnF]4J+3fE ^ s@aphk /u{;;aAC9S_1*0~ |]A ' >7\VTK}z/믇r&@@c۶Zd|9"MwDZJ'`|>X\sAlcJÌ0w )w㸤_sAFۓ+)w8S!Hվ PFې~;xraB2|$s2drƼsAogMBE~,^L;YZZHeBq Ɂ]Y̍`mzlrPOQ5TXPwHѠM\ AloXrUc†Ę-,$kDsGZ4f\p9"A]iyZeds9 _n@%V>.bȭ>- r_*s4t~@9S q 9)/؋ M/>RitΟyPT" ~KEԀz|3GLfI}bچc9[ܜMnH1tfaݤH+mw5EI~[aMЎ[[ՅJJ^M5\!~p8. vô*SnSUxi\34Vӱ v9vx1ZS  n1WhM"8qyÊc1@vOO0@4n 纼edžmVe_"}}&1`QɔVm qctMN7q1Zs!^{ =&^y 7 .dm8N62j6FWG e^<e$_S Ӵ*L||GGpXn9zh:]`N^[[!c9>2I9en\M9 q䮲fDjr!-ԙ' Vͨ/)"V ABv.Ր]]{9Y4|ߵl2mNyovy|s8M eJ=|$Ÿ7H:9s@0l?pn,gM@dZHAHg0掄iFXJ0Bͫ)KM H+L.ŠY"϶72&S<|^@df>bu޷4a-+hh,IYصT&@yza2f P8[lyK&g\91y-g٭U;-"2 0 fJzY>d92U2eKh2J?;9_=S`t(qČCNixudwƸ >1,iz ̄ x\!SDh!'Ë 10Y3o%܌Ӈ=$-MG0W)?p~>;{PCAUc!xzzua,n} CIBoϒ>dfD-)% xE||޽Tz֢qβox+~&G)>:76@h]L,z99偵`ٛT@"#;ʌf4lDqJcZz31w+W9XFo9u۴Z؁(hDؓ vm5{~S -\4'Iw;6K"!· Y r!߰Qd"ac(m'TԵ SiƺꕚOSXEə穆%q92clxcEd~]) }GX 2=/eG$=PIR~@@/{p+!+3i ${/*SIoiN7F{%s%ˎUE6eݺ1Db:vqvvFlld ݡI:wK綱{FRwq9ަ AK 5`IUOՋ%Q*=G{8[QGW~j y/׻r~;[M{B5AJE5:ˏg᳆UB+.]uXdX{x^ FmC W^+Z_nSϠb[eq߅xrۂ\6KbNv/ QIMB0#, 7{HmL=L붐)T7}xkhƸ.bf۵9I qWDv2ѐNjx[`U\$qk jd+;ګ>$B"#IfGA>jf gB?âYM$_0#W&I)PQ<$hT^<} nl,p6\anpSѵxQ`Ya%a/x9Iʙ_0tt (mh,WO*D7]yLR-9;/% f>H 9Ht{UҭAxU_v|>`ӂdkWPgާ";@Íeht7m.L-Dwm,PQ53A65e3pf ubBѷ tY͗;でU?>%5gpu/4 X$#f6[;S0Fm낡 GqĠ۳ƑV f25twwGWzDX\Ѹ*eɄ}.8 a}' 5v)XI›Mk*uɆ͗zů#8GPmvb`/cyHuZhsj_4rR5a~h؇fgfwxyp/¸vE}_6ʚTaA*I;|}>6bkbE,=5'KT={);i_qhGc_ ^l3KC ~s|[գ1,-'Ln١qyk 0x! B`Yy^yq)CN>0ٌBTSD΀̼ φ]=<A {'2g:{`rמtH}×H^9\*:M^c!YwOciK.չZ>83QvCDS5t˒@- $gk$WRFo 5f8L+Fl v Ilђ7P&ZzS#A8[fA=OyAvK %ċ(hJӇN26U*,FOe=.T\SHU[i)BT}#itfջ$Wġd1 AŎ0qQ;%XZft:d7u֤&Z}_hn824^O_UszpQ\z,jg¶91F!So.t!!m!v|$h kj])i0"lL䳃XNŢhG0 ThPbcg1 ˯!뽕? fg$VVt]m<@%͊s^ \r:8)Wۄ>4OpLOA`C49:O'd9؄mV8>5F#PU[jZ^v.W;aD[fժ%M 9k~nYK&'t0T?uND#/wB؏cF]D(b\O6MXMR zY%^s"חq^zSᨽQIMpR䞣}AΠZjQ?Ddyr6ˇt P@r"?$Z _RS pЉudbuqHc4 ɨIK X|w>٦[>ʈtݴT.,UMm<$j{(q07HЛ})qKuaիk_ AhfF]WhИ/,\߭YF6>>)yf94eU 'f{YG-∅j*X. t >orj}[u] yrh9-XŴCˌz N-vGU 1ydxs1aΗ&`qzuV 栨.No^`UJՎ2̊ XpٸkfSҵX :m0y؀I0r!{^WD➥m\¾Oq-'` GU+8)/i)tg'ɤ N!,I鄃* MXA0u F6m]#RVE8|z lܢW_YlRʼnT'e`+⎚;Rj "&޽~.J7m`ـ6-7`3AgIj1*.o =k*z׭|=TZ+Ҩ{FljHt/CB5=ˠJSK>Ccwg qTܖmp5L8Wk,r{ɠ״܉3͠C~s;zlms (p~0Z 56O-3G!ѷ%tw?߉c|~v+7>dN/D\Xf#%{!sבEfx.# MS K7e/#VsC2NqD7R$viVZ9tl3ȳ5kDN-ejK:č5ao@x#z+|l}+ 45ӑr VE _QN.eFKZK+ 1l,JL$*RɯUl&7 9.L`\(&Gn OtlW1.Ǻܝ>t)ft6Q/T=1u5̭qG#XXZԙT&%e77%\:*rEp[! #O!lCO"Q3t؄#/*w}+{~-`՜.d$jPje/kt0@x=|4 . ::n>[/]L2W̮?$ YhrdDPkvԱ6xB?8tiDX adi 8卧ޤ8w;_X8˃xA,"Zr(VNvJa.Ӱ5xM^43CAf'* L#s[>wPߔ5 RN}QPT>Zgkح`g-.F fd6mmv=_v+ >ck̚}$K̲a/xr (j|Yϩ@ClX0E5K>߰,#U3uƭѯx Y&@nL LHC愽~̹!Ln`e;+2IBNfk~6Ry s:Xs)tM В'N0o`QP9%-\cyJvt_\'7=(6Ǖ߂U6*=9 5`|umx2TDwP& )-fT`p 2 >JP 33Bs$(!r=נz@ jf|v︂/^z†שIsUe 瘽zTWiĀea*p8RJIzܬKS %{IS+؞cc@*4Pᤡ6.wVTLN^ pjdi&:Iεm ^ʺ,М0]neP.se@MJ~wqCWױb3 م繛x8>VWcJVaC(^fufRvR?(KA#@2AN٣ĬH3 |,~bOY,SM瑗's·Ux)Vwp/|wW>0nUn/r6;U=R;m7*64܊Dra:cYfֶZuf2;Y8 ܺɪ.q+u8 T2nvd>0;zԚPR/~}vm@h0"Sv]]ޤ"Xb >li-[٤}rxA[SG=Ib=dïm^@ 7y[&BK)p t:#lbmGR}nOspΑQH ȓ^W02jpLkaRɱy?02?{z)T76ϊU"h祐8L!3>?>(Vǐ:JNeR(er.`ڟa`2>F8Ld'>a|I8=j '܏+8u}fl_ZTN@Dʪ;&b?TOC)-ƺiQ'o1[Z-Or#dx hpTݎtȟ_*s)u 13KY[)_ 3It͒SI#`+]4GC{ _"kWuƩ=חpSQݟͱ֦1h})}X滵a^D2pe>> Hl3z`xUוcOPk?7cԻ,$g2b喈4xj3T\sI-y1eg}޽KLhEhl 7,锖,~yGqAɎ:XeX}F7+ ,Mĕ W<|6HOjPнP\4XuQr5aQMI_*#&)Q{.i`4AwHx:6|P;EU5LdtOԡ :םBA ͑v?'kfV,-yfuă@G ',C >FQUFPw^k4O,7:ua 6UhW|ӵ/k:‰6,&sqQn aR,xJ67Zx3`/pmԗsy aӽ1'2wH3Pvm/HQHMhb&*W_d# (3- aoM}K.iყ/_ 7ijnvf.άЖ8v4 Q3d4u2++.P(}f`=`_> TTa˷7T.MdAeڟQ n--OrPA>'WQ)#uőmܯʃ6VoV;{5֗vd@C|bX5h12w6G̛T~wBS#wJ#]DWyI2?Oii#'ѝ5Hų5U>iSbzl^%s@X+PC|,Znؐ\^l~ "@rET*klo^V( @\a;JF R׾9Q9F0}u-@G[ ^y"&DBIV_j-幩Wݿ *+@^#DZX'ʘytǚwj#Y7YӘY?t<<@qi5?1H%Z t"gχ@b8HAX gl1T8Xj4a0lbA *T zp{'yf/v߲l&nwKvGΦH`r{w%۵*輙" e榦_B\o;>09vEl&RnZ]qn]] G$Xh3vhX94~Xqav0& GI/0b!~ćk|̝Ƶ X! 2)X}{eo[j򧄮uZPȕ ĥIGV9% -/ɿ奞QF S:Xw"0JdŁ1>2 ͌jO6}BcԖiz$}A {/Y[` _X?']ee\+ Y녢)$[^M(ҷosIcXsnXU Mx>[C*5+*f- qq-;I]‹mgD3*F#{z:&nHC**a)!?h+D\i6W-А 8.6_wc_I8g2f_/`unٗI؀ˤ^~=ԆpQAC\4trsCo򊻢YD+- u=5{u͉.fkO KH{E9݇ǩYJj8 sA$~7˔J@Q8%jfp )40>`zpSY#,^DT5k)xfXO&~InZrpyi ]M1֌=w?,B?,4uQR=JOrܝ9?9' R'o6:ROߛ=|U'QC uOL@Gׄ~v|1]_нRPIfN,&3|t] Bnj\Ygw{ :ݬ$;xxpЊX`>;0),HyxoٙDNupN˒)=zbcKf@"&ѽU2'u; K43^wq:x!(8%<=[u[\Vn\e95 CvԮ4L y笡ToIRș) l7QNC@Y'VN}Js>mL6ܸg!tJ~=0nu ;t{69ߓ}ćA@xU&Yf_H+=e} V}MAmMW8\]J Id%2ݙe.`yS{bk FVO@ͽf3Ҷ˅mQd׿k>,wVFsGܤ`O"(UxQ`H)\v@ ܨ QD:eѱl͈IyUH7>~(,_~>-Zo;Z"+BBEE왢Eze}ĭr3Y4bqsv<dNa)7~#o+!%鏳hH9Ěq8=-^K9sMhR¢: 5iހ%YsIJ"Sa :Fpɟ0XFx?HG*=:~T_Iۙf~[Zd-(8;"(^m <56΃ywZ+ [G(t&qxԘ[>QfmqZvT0O`Œ(jJh8ߓ b q!gߔCTTPCq?n۰&$I[m[+&Eȹ}`2ӕ^!)o" %*4[h.ago Md|@r8i]Gw)2vxsft^T7E4m9&~+'i(,i.{rV0bȰ%V=Y>ĆbDy9aZ_/-Ҧؤ?-MRSXdD 6Nc{kֵC)(/4_4/cim8`_T;^]FЌqR2e&+&\ JL0$)MlDz g^A 508t;Pjb r4or72͒7[{ -dW@1#eHdKoAA%|&~1-'r7_,@;TDߠܸO0[["@|w PHd+(@Hu]MaPT=5 ɘd1/-d`zs5^;̭8J oDy]z֦ou=D v[Ѝ@ `0&PwrHx&т =f7 hqSW*=(J_3jdj\.>UUr Elj77'uiQw\˵HnX2c23\|ˈd!d̪#4d'{2cIMEc.ghC 8g:èUHς6i"PWJ2*үBL~A Ǣhޜv估\KϾ֏a˔z(%(󧜉sU!G}|!Kt8?cozew)g\iyW=yǿ}jZeP0=9 X; ,PrhP+fwˉQH 7:*fb\I < z xmɍRq W4JDFS8~y'cg;ol}E/?W% 6<%ʂH0GLy#g&9Ն~`FK+Î]H-d1΀ъe?lJ{$2Ƅ2oTY>W޾dAGR=΃z[w4k ܛڶcv`|;%*LDv.U\3FGm*u$ Jq陏˝WNcLIC:a6bSWkkn0 -i`BաgXڰ1o0o=Q2A$ImNv*~wFVJ5wwN^ mhY{'iU"siJ~O`np=ovm\+֎wm2oLCnJ;l}bkd.mRY=TW7N/ ٫" äC%u82$JbƘEļHb6P1He.-VaPҳ|Qh1x/EȾCY*MϺfLx R<#RmDJY8ofM|=?YCpj?/<)n 1}48@gYDŽ`uXspc !#R}Geavq#D GLVmOEq^JATIF<,puW| Ncjno9q?M1W{?~{5D{B!yf<_HnT@TGIw\ydLҝ{y2u^s넊 ( Dw<T!q7وs;A UXs |S̶lrQ\ r[l#ZZ+mam(œeTUnI7)8q[tEIPK! 4 _A~dN'\ ԻmDK\J̷*45Oi_Jv>LhunXIv IO6( fQ B†X߽ctkvgISO 뙃űbI2[푬Z. o3=kuK("ṛؓ¼ |N7"jk]ԇhߤ{rckFwHoj4 bc,R--4u]qH9Kns>@sK$*kf}rU'#Y ;{Cv7Ǵ6%g):IΒILTU*#wSOg֛K:hIxM%Ji^ʻG:>_)psHˍ;pIt;ky!DFG'5 T כ>vM{qAo6 FkZVg!vS Ȭd!(,U|hN:l""2ՠ?Ӆy. Ez`?t8=@r[)zole-6ř34y7 m`a l+xm3G9E}QDŽgl9%_!F)[Џn]:΀,UhT\*ؿH2x`᝺ pMNdz^}cq]-CA4 Ԉ>z_A { j< [ܑgWn^ߺn[]ljlf,o= l'+>x_4$M/O1 ҂ 3-m7ݒ4Se?,c_]>(~.x.ђO!ri2rW|bPj[x!uu#ө"2ps#u&R._y/}jV鍷@<O_[ԬSEwQxS6>6j7|29GzSōW(X_j"WRE<yC:+6$p2k\M~YrvKew8b"wɉݥݺ]F!*=paą@R"z䃺/7+ߩlĒI@h}6rh`Æ)oGW}Vj6J!XuckEr0S & ˀP,߱uw@J Wګ14(FϳQLH=9}D6MT8e㭪gdtn"i3įpun5#"L񦐡p5+%IB'd'Aףv CǶh/u*=X;e|!,wW/Yog U]<%L}G! 6x b2QG_mFoYj0KF^A")'SgQ 30/3u65f"7&P#̣, 9<.q tzjnYD?r ]$5/ rig\F&=vo",&Sl@ȫnF`Vs~Hyf$k>- o|A#}?pN?j+:UzM='AI`; _C+ plN 5^VWY,2HAmeZ'cn)BBmZnb4<& d)VrR%n&x;ZOɵ[Tq)<=|Pj]١bQb!G83}YH'G*| #*;H;  fòv L t8RS}n=,K:J?ڙko>jbo豚 yaT1Z&N;16 dCq@ m.fD߃bA9Nh̩0Ї\ݝ_Jf(<xnEɪkqD}~42UI,I"PK:Nr6Z6\V\`>u0% U`ƁLS^X_X g"w7^J@*5_>X0dHЄKW$ݚ;z#c쾆YI$'/9/X|X@;ZK߇ MSv֗L $" u8{M |Kz!wߤZUr_-T:07pfPPW~u2L?Q+lնRE&:K$ 0 =nNitN Dűfxn1ָM6җkKUN)}1 F7: ZOBDV/Ps$PqCDA1 }EXŐNǐ*2sI.L[`3]O;q(Q"̔v1-c8ȺA _ÀRq̏KCt7Z8ܜ *6!cP\_Q<Ǝ fѝ%7&ҩ")Q & ھNZJ S~_x. UaQm󢁑Y]d($%! =.a=6#;kKؔ'bWuͶnĶoǶl:'7 ͦ BIry=lTА2|{׬թ 4pq3hxi['k،1S NX(V6!F͗9HitFm y ꚻzs:YzU&a@jOC JYd$PKg*g`р4JlUo;?Ji_+061sHX3A5̷hjEٶ3{9 JA'^%R|B kXs(tM|n@AV0g`XdɲN$i|2kS8Fs?w( ZJ8;OybWbo2 .T Cskt9cHbhSj3}[4P7IhZA2.C$*`9,a B { })ɤ[)JI•#ςOz RC׳LU0[:nfG_Kd`l{NFPۓ^yPc5@cSskOG=w/8 C= Q0'hl(׻~xA'g]wdBj2wuE9QRP_)Hv"tCgUqAuw:`h']VKG3&aYHYI"q $EIz&i_+Q{dէK$YO-^%^B= ?yW:UB(p{Bf]XĪsFؽ>!EQ 4A>1]Cz/-׶@3NQ~ޒo v~xJ Z$8¾?Nqw}a\EaNޚ?FQktk/d.iL8vt t0NVSu :c:(=;dlP5~ -ZGA΢`l7ڈpadLLU,Fϵ+LJZR_ ez3U}b::̎M b֧h:&x$I7֗v#y{W([$5ĀA5PSL,`ŌT {#/xl|_MfgۼM#X#@{*A֔kZR\ߏ0dW?xgAY[E؁Ijuhd0_"h4C9<|<cj%72yL T1+{q$}r OVYc&B.Ɓ_3d݃Jߕ%r;3{oXqF2GLH\dC3 |r^ ?\M=lca/ɐWFV|Pw .U쎀qi2mxM\4jjl1/2̭?CMLy,/ϔ ,]uIΌJL+YnTGILeɍQenLuiӥF::/ی1֐w;Ey2io 9[ZM?Q_\^YOL-{%ȈqZ>9ͦ cb}\?1b`B09=ccઍ@buz%j'bYj{qx|(Q:J4W]bz ӿݙ"ӅA-0X(lo簘6>39Ft0܃O+HYǃ .1]lEJSo<]Z68TUO4雩8|1 JQۑzϴ~0uIK3@q>\ pΩЊBz)WbF4\6h7 a=Y8BNmшbVPk}(|-\^4\m3;"sPUpݢ}]=ܱ.K<GCNlyG'oWn+<{pxC}K 35w"gsb2`u~Qih} #Da meiّ0\ېU8c3+rӉ6LUm= L)Fj6@k|Z =a흃.[-_srS;Y}Dˆcȼ6 Lt1kt*Jd"X742&ux}"S&!2ɯeUn%A@Q|4*^oO:L 10mG.:}7yF!ķnu8Nc*;q+|*^Hl&%> 5pOyZP鱢'nȠyK!cխ 'Sxb6 IJB~ ܳ5bIEcQ>c_I8=bJ{y}_VHEvJQ`<]ra^{](?IW M9)GxTɹ31jW {EvByTvCͱv$D]k6]vϧ60@fj; FZ)Y`@~fcJZ_O @2*YiHgDa]y-#LQP~&OG|(:?A" 7"2@ޣw'-|@w-QՌ"`({=':g5r"֗+@<SGmMGECUbǘ ^.F 3N6őOAl- 0|w-Y6!vIF-j'Te hEq%x<.3"nݎI+P߆kYy≅mbWYrVg  1z3gqgD?'Ձu!ZEo/Tj g$9PtpyX΂4=^U'e8TG-7PfڰM$ybg/{7^cՆ[+J||?-}$ܗ [گwYF\ Q$;\0,1$=pS /08n#,A.qaM"۾Lu@7"P2_>> y,9 rL{0@܈m$:SNrXˍw".c.j ^jF+<ccnqs9XKBdVH?}#; 5{Ru] %h4aPkݙؓ(p46Cl9 ȨPD ]597>cl:c]-ä2_{4ta%QX]7| KpHI70v/|(Sp*-]}/BIȓ"M|CinVnSt6OEC4E3v跤M"B9U*;$Ąv7|ivk?bƓ?:hnd9@1 -47ABm" .MR6WR_Q$ {dTx+߰,eZ>D7ӤqVL²i*2Amv$yȵ4QDT>i0-w-X2r`>`SUCv3jsc(dU "StVNۡ95ƒ= Q2d=hWff_!zS1ԅ+ RA֯mwC;6R'P|@A*(}H)q-L| M½#-&zl"˧ϊ i6E <;}~dZ(Jcj LsbFۅ{[r||7fz|{jӘ& ;hG\GPe}P]}?2V,҇"uxY]5'Yj[_Xy?A SL$@¡ #Fq3K2T$5ߌqY=ݨr{}OS9ĉk5q3ɗbEi}=1[@m2coU(1_/~#A!a6"D SWצ&9_F"Ǟ{-~G~HCM1G_y8Nz"`gFy{%{l|აfD2W*)Sq fs mp?n0e Dw,mzXöxII2*ʀw_Ր]X|Eއٶ _NaoNo!*)G#(hdG@kUXO2MH-W<) נNF/yGBY{R g HVicw$/lM!B,RuH JhEKw6Ykb!Uf 8It炣>]m/חMoE^ q[G90Py!;z{L`8g\f^Bߦ{LΤ?R3 䆺3_dCc ޒn:m},CS./BxpNWaxVa W& k~*lVG` \%Y\JD އCjdKW- + ~4/S_Qݝ;ZK3:_wrhR׼or}0:ܑ쳻_Q(CA㧳tl+,+3JʿlmdqQ=RZ{l`߃1p(RSvu#kY 3~ I" U}Xg7=xm+=G03c+$057.wtG,<3##*pnjbcccG$?@eSd]/B^פp,P4AeK-@E:s ]G9_2%]<;cyy ꚽ8az uq#N++ʮ$Ǻ/CN*Nc;r1~6!]O`oh"\Na^Eb8Uu/dCn}ȾǙ8J%0Vf@ֺ]vWߢ˰o$U>.a3fewnㅽ)\[篠uR85آltru3<bwwD+ybH//rp̛J+ady]WV.p LJc;@?#Xsc(yh]RY{ 9];rجrI41;0W;@In|Xȷaж Ld3 98O|t_ :$9:?x"+_eORk j(=ϣrݪniKE8vvx\k>H(}-抂04\U9n0)5bU]O!Rq%ʄ ߐ29햆 쎈nnWXENq,\<3KIB{#nq:**5g^֝cF 2i3d"(>8?(B>n|!e{EIg,ze^3McO+h?>0Q*@MQ]P&ILmjAvYe ^ M{NiDziѕ7yJG_AO \ qެD6BW?KjIDZم Qz& Ut7*3 ʥm!؎:CL%pBVz~>+u^iVf .j|RhPpW2$R#HkW1B:#V"0=iOQ4[%tRl}- ye?/>a43BK 6, ּu_R"~]i ;-ݲR|J1$B!x!hk6%BPpE.2meD1uٖ9rz|:mQ Y'(f2`2Jv[}YIyp慎%Wf9aR=w{R}LQq+d6O0o:窯Oq|Mq c'U@zDhAZKB7Nyp[fg`5y|8-]CZ K}jȌ  A~pMCIV7i\eS[XO2 L~]4U b p4Lȶ{@G|аWB!YS\(8ӮnT_* 9z`4:!47I\TmwCcCsVv]AL3%;oUR얧7E5_ETR@7KMN4{9τ ͙˂yfFsY$a~,h)_nq5sī.mH("$[Kbbi3k͸iu;ac9_Kz\xnf*8*xټ+ex@RC >;w-ɮYn3'-Cy}a5`. s'9k%$@:I=ҁ9,XNmF5P!+Z*c++qG )bs̏GN>?sWvy)SG Q++e-Bqi|(٧ nbnhB40T,b9M`Kf0_ƪ@;A0Z;#b9h͋ߋ4sCtPI%IYro ŹsHwj8s;o|/B!SG3&⣰@x4vJi<!u*[ +fg8~9n6)wYn4wS/wJY`,,e<~}pN_Ö'C`]rpm awj̠~EdcV1u]0_νp^WbR!"\ĺҤ;?S9JMq+< xw}V/ 5K7Ca:U}{)0l E+1Q/T̑L-Qa* [WD- I! gƳ'Ƨz6d Po2$]ϻzdDУ ̤E~jIڑAX:=$\ Bŷ,D{; k\ꋥ4 P%YJE l_w x h e(^`XO''ՖI hv d`aܭ31e=$ir<C0S/߄rFVD4էvFxGҧUy 7oA%:=FLx(߫nvr/e}R"""2 m36Ipm e?,Rɩ%{0Yѯ]mJb~R G0rvB09&*`ZP/# _E;kYM6c,G7Bo!GO($! #/[BBb%* //@fǦr,{W+ҊJҦa(R=qd},4IW ~%@ ^Xy>}L츚⶟˟'EB <,}Gla mXom5~2l{ďilŞs*HG_(c>!͘G$eQ22УK0PWXDcӢ~V[WdBA.d˽Gp+,̀\ iM0 F* /G.$H䦡RαK'(vg5J e ^C$C;S7bK,+rC<<TO>;?8u(tB^RV"C'bMzF6 ?n|9]TuٯHLz`i+-oGX%<{-&[^7$4yRkaXݖHqLC2pgAoy4@ezpO~|_T.I_(_!A=8Pֵ['%JKJ.⌕<$'$:tV`.M%ZfT!g~ȗ_uμwfp5ؖ,y6y1ݳׅnqtQמ|+Xp=Ur^ AHci O2#! L ٍry VJal| pf܆NCy2+P[ R>AOaa(&iErY\׏f2M՜x7ƠɌXhqFo凉1]B$einbiPQ/)j` o̢@$__ko.O!lpWza>Tq挥<+ep3O w^yuQ+Xdrϖz>hf>w6ܸRJv!$AB&;矞B¼OcAt1&O]gh%m%et}yE;FU`h{kQ2 [th TX/nɜ O*~$]BFUql}'jцt{b6DUN/vPT|Y|H\d{+.t'Sxpm[G% &KvPMMQwP0{l"2ddx`J+#9 "qE gH*naBmRlerm$}-GR(aZ t#_95U>[ҳZHeOpa9gEEQ57u?c} iэ;յ;*/> w,+{$ZZa@ &FGTst o1l9 zs*5r;!D7}8ASV@߭պĒX1O8J\XOS+>h`݃Nu\Mq!ÒpmHuPݩ5%Z!dOcH`WU;ZJhjToki a[ͦgtKmnڤ8aAʵPR9: (3Uv4$B ^5̈/uP>Saiph2{rPQw 1죨ss (-xfULCک RH%.,a*{-$<Ūh_urg`%]ӿz @'S0A|.1xi1QT~F2C?|_G.]߃#U헹튲1wBJ%.̢ d6-RY;]`sM3e e:9rp{o(b1/ԝid~BU.X2.Uea G{>Npe;$HQn xF=7_lȣ@C٣' }<{;2'y&la3t?yL%! ^ fIj֦8pjX?г qٴEYk\Ha^x7|2 O*q+łMfh SidML '"=+Z\Đ&xGPٌ3mΚ:P?w~{{IkrHeW;Hyvg:6:LaDxLg˫գ-7]n~aot~yv5HI }/Ҥ&_]c͎p*ސRӍ ڬ66B)ʘpdlND[9;חM3#"\6 ؒoeo3ʀ-Qid.&hN}ߙn]/%Qq42~reLLďH4 7:+;4op]eTٜ]+֜&!K`qQ=["3ӡGP=D$#OE!GrBXdZI"`QYj>`5"Ү_KZ!gHDERzkh3{нOXN[ud\(2cZay~$+R:4N0MAe edoAeWS> =v #xFhڔn,VJ)t&0I$9^NG|Lhp)!wЦx.Ickؙb60MPh9u‰"Ov}uv$#Fu ,z[g|y00I%ԥ]X tfS#j?)&?"A4B5fΝ*8M+ ăâR-ErVP]}Yfwwk9F Cg)ψ ﹼ<[l&?f0ͨ,ť+qDX&d0ڏvz#-; 6FZH=* 6 +7ujB0y[d_$%;Þ$E"nȬ!sW3d#f ]u ѳX es4:Vi@zn5F&p\Ӧ7aAk) mP3(\q"1]eć'O-Áز.Vz_3RlPek $bDǩ:HŅFZk.|g[.*4 mH}]  ee^}"YnJT۠ŝLA*5|/F˧ΖL]D'wX5Frr"+bPIz!@ן B) \҅//KT?]!JxOvld$K<d]}NG7{>6~=5Sku b2`EJsFࡻ+$L"B;4׭`&HIP.K&KpUSl1#VF>;f$îр/ pf73s)U>SsDԨ}+d}@Fr|?]o*v0S2c=ᙿce%5`Ǝ>O'PXa~ v IBaDr^? L\&V o S1 +M_J]| 6c"oƘn%E!R>@b] zr$ RhFR=D f]8`mDjq:^ƕ[4Zkى/4;,äNz7ة;㟺1m<Ba΂pBke"[#ΊSs\Cv'=~o+Cy-$; 5/}7tߙtUYZ6HTي)?zhoAb NZ4l?"KZViT.P 2ʺ0c򭇨#7lN4 !V}l1XajSj_|Ӥ!߬Հ++o4]< :lJ9Q0O@'H>!lAmqCL1M熾$bOIk#H%nQ]$^aRuwsKxĺ[~:YU:(}P:hXχGꍋW m"48S%GUS}TT>,^\dnGݏK`A{ޗB![3xzLХA+šNl$mHR]'>BPSyQ+{f*3!4bӀJ>gr:*( 4zW'2AvuR1FxL</ = 4/D؇לvMdk2"V|'+\ kDUl 2Iƃc']\-@qk-" i D,qUwY%i]Mn~ 06cylMNCfo۽M [~ ",qBi˒Yţ"alzZKz,RSr6L&ٺh)tHȐ{S,iyo!dex?K8AIKlqN^tv##03hm]3:^?зp:?;?c';'^BZHx5&8/'4+#1|{)z[ a]}{o|Io|W WPue%&Y_6Fyʒ{&Y;}π8B Rgh5TjB1N`$5,Kn̽wٚl ;Qz8U Ĩܨ],2ec5,%=wLż2gSr~psG߁2uJ-Մ? YԱ;m7J\.eQGdKw{T?3*eVg0>qqbU m5#l-,cXd4r9f_<8I$'J.Z)7$$x.޽р 4[" !Fш>(^_{; [|wߞQډĆ^JW4ܘRB?Bj# aEM!=d%ZIZ_{{ 3{)ʺ3U$z, 似 COb h,B,LLVJؗVuEQ\J3|^7PҤhOpHRSL?+- ?D HE+^UmGe?W$>6Iن0[t1Tt?[rZ{`y®{I54ЗCvH~ʙ Re5L2cνT됈ϱ5E hV9'="JWKPAjk߇y җDĩ8$"RYC 9`!W$ւ0>6C "^ =K{TFd+ye֡ZUg =Lꅸ.jA(뿻i+{2$-m{q :G^ UmI;Bve$qX@LB+dkTAC#쁯05)Ngd2z.Pnח[wݲz+- Ώpz4'54o5D/*b K7XDШ_tzKH0 ȴMׇH$t<(h=IǹgП^wם]:ȝ< 5,ƤetD3e_6 cӣgx"/I_~X5=GLvtTkcoY m()E&M`8QDy>;#yHFؕhoO_l*Li**0 _7jaf^ld !B!t.DG +MAD$na` Ch.;DgͮF]j/2'Z{HQ= Bƅhcx10T +běXL^e_}og.ygJ_(#$Pga-pBTOjFZO4͔93%-"s>߷(G d3ٱoD FΰF)4+;z; oMTYQ1Cʃ}0e(G b7Ze+k$u.\RmMo"Sǹmg) ʁ|k}WVvS.Y \lVY`MJ~֮Φ]I띪êyrX2S~E(c=1 fX;Exv@gڨ؛P#zJ[<g[]u0n(i&h"~0ՊMB`z7>E-Gjf6r\҇+wNqOn/~C20ь  xE#n D#V#˪@*o`qZ0_)dC3@I]Fr*:F<[t:8&2.HliHik)rϱ6*&JŸ ++InzQ" zLE)U_7 2h.2:(&YR |N]̹NǸ _GG!qaك#;#T-+АR3 Wk̽٫zP[阱~mG^ұEH()h&]CuID@r~K8ʤ:O@;^68viMt`r|ԏ"EtX?>c6wCϴtP'Ǫx3 ](6-F< JU7:p,cީMT0ɰ4q|"m섹 9 0Q<`~bψf*aѤ)5#J?-OD^CcEI]Bx6E2.anLq;wh~6 {ޮ1K_A/kEXj&MNA:K]sM ;*UϱAX^dv@>M5~*Y^gDr9|,@3[`mgϔcG܂Qq~tX;E ~>7.:z%t[&H&EiG!*o?@@#-XSt-M9cCh)̋RZ<jYEkNu7T*g&qɌ`azϦp_wJEnqM[}Qw ,9E|nZ44hGQ~p|n\P"pk<@MTvcu>ܡ f<ef_pОhioW D$H"Rz2=jԚLdYʬAt3b L_oIǷ.L`Voa/WW߉1؛_>hD=?lBK9y=O+g|ϻ"^!!)<8/OPUiSyO%n}-Uy+oiebh^M1(Rv\(k+6B ¦ko78 _)훕D׫! {|܈*-^hdz2ڥ9"bio$*iѻ(Bۦ<؆ٕM#?hS:E*Y^SrWzUۇi udqͳZ\E!ڣ `ˀ=ҁ228r7-K <UU|eﺽ22A'ѵHǚB%IJsBcoVj>f=3X4"KUaP"E}ɛ[ q~XP0і`;kNϜYd^gp f$HV]ub7Ji ;Җ&-qe}*|gN4<uR^pCj>̈́&s։x7`xh^( lPġ /ul[\a.$ "ZgCG 8lꠅ{Ww1m [1jUb.m|S0lщ`@0q>4uԙ@~_uIz6wc^;J=a;'$yiW$v6yX3v[JP(6/tm:yHϡz =?-GasUG20f(U>R03R@ǏY,fB_?) bK?GgZ?:iSJ-.cdQz+4u&R"tG|֠_c,Xerضx2!L(BDI!n1!p"' sIy_R!ιM?^b2n_FK{\@^rCdE4肢A^Y@,?<jg"#}YB.(S[QSA僩} *x>:WT~>Ms򋣹`'Rf ϊ 1^3|wf ٩9sitS@]OoYŕ@rTFJVɒvv,C'W^|ם|^ $/#A(8슫!>LɎ?܎k`Fmm[WBɄ׽']Ufm4C!ͽQ 6#ZZG]ȇ)j3l.3 4|ZXI<6>M z82L`'$ґ?gnibgqH.Ab~woZ?A\0n땊æcj6J˱ڣCEQw iu&ZdGԯ.^>p^a_x$\#\_qلVd>C8VFReQٖOF"Z@?+92PxXBS]xkxAܹꏭ@{6 !{D{=`|Cor!E2[c_ӄ٦JO!$p BP.g#UK~&X(OOe|E LLd2~ן06m.T{@s S.<^p]6w R8R@Q r5'_l>]Su@4Gf2P?#።va~P)FRBtpL F/-!ǐ7SE`g[a-G 3 6+{Qσj[F:*!7|sJ8Hi=`oCo 4cIqePrm|~ @?ptKA&+v۹{}LpʎvEZ@b( u?gQ>jKhL릪=fK ~Zs'5qD{=f[3-CwDE–T,3~5{FWQt7p5ɻa+%iae7ɾtXiq#܇p8]d?FhrpbZMӮyM/?bY?9-eox',claQÂ̭]_)EF֠rO>:WSZn~PW%l !5 r0+Ps6 8찻E1?}Qn8x. V&Ni2C rwSqa[E^_&*J:u|m/}/AX^86vYZp-A+rh٭q6[6tqXR| 1тT^/nডEO ۵Ӣ~cSvITڋ͖~wJpBRE8bP=/tۣ9 z,c.y\Mrr!&gJ=iKnGfןjW*eWFm]Wx2X~W\->0O_WS}A$-eˋfǭ>̑N:f5l٣'>cix,XU| hsh@.b\s"ϡY3Dla@}yK !Q8tnhdܶ}! PٰiM)xN8RpnJXSw[uک$R "L k o>룣䘠&?G.QHA&əxm1_S8bf : ɯoo0]~O_޽o9U0ʓX:@Y|#. kipSn޸ꭾ4IJPd5as{GҥB՚+Xm\jzPR}+k)Uۆ{V =ze#"M l87Q+P9J*pz]B;{ϕAk+3DKVI:K3dݦ/!yE)ޯ+]AtRс!f*诐!o/`QػFkVpl=ؾHŀMsl=zVr q]>Dl,婚,%Du |pteh='yF;ݺQ¹KoQڋZBE9kUTSM3v0u4 ?9Clg*42~S='vy2n3;DL,:MS}(1Fz.N#U)7(c[(1<^^0CQZ=B0  ]'̯<- leP牔ug,AWCj1 \ڶqAu Dk)#y'߼;_0{izQsA-:_nmKUb8_bl*ol-jplS[4hXu:Żw$JY굾1p:<t*X2[E, lJ*KFRⳒ.dݒr_Mw%3 (4\UGy&%4!?5 su|wiUEԁ[Nv5Zyȕ҄cO>>u9[^( g:m*X PKDǜW``ܰZ0 cKK_TAd HT1Q9>MiLg>~,]N ؤ" D.@EW*!wk@Nد;SCMV <5/BI7FaP ϼ& 3 >AZTulA +1/gf=t cg-_f&K4[{4PKe{C,/`%EU4樽gB+G4Vhy3/"<Éʬ tϯTU?ջ)2I?56;jd})0#_/>1 W=١fHFY`n<+A/V:0vERYJg8oX!H"1v'{`9*5(",WTk7f`0sG7SۼQ-fBaF]SM};׫%pGwF 6J~J 0ecWsiԗSe~I&|ݑ'a^ k}l|6 (ZWWXTNKk7Z'ρM7R@kj' r|S_s9DUyOAM+ň':Ȕn\#!1-?Ci<.;Q#e!J&@mTP/_TǛ`f#DųIULXllL8;]K>A DڙZ:IMkQk^>6I+7/lJbˡ1yF5 9j-I1m93 Yžg圅hK.\t}s~OgV-]"2=p1ZΟ͌)+8W$y=[zԺ! IvW ǹ2::t.^)mnS׀oN|Rg,TI_6[3L^}I]u罒g&tL`6+=5\pw??DK3[hgQ՗'O~^KiO 4tj:ӻпP=qRŽ4[D0fm,FWF!JʱI_LQŸqb7:LcY RzNL@Lu& :i%8Ik:ں>Xe,s͌a cP ϓ@ٲzф$=ZA[!<9|!{8JR?ҍȅK Ҵs[3.l9yv+ S0֭׮532`)>{Ɍy 8d/]Mx觭VMǏ,r//3iuHlz4P >7o4P0.UaƈI#)6xʥUmC>+ gLI8;% sIz;E=*EkKÀl<~lQ/3@3hh鋻]$2ȹe}͐G2)a|Uiaq/ƃx YLU[6OV'L0 hr#ɗY& Pa䊫~ݗ%+mBҾU}&EȬ6:h$W ֽ+h>UqoNI0Eĸ^EF8& kk: 0oL= OjkF0nqM|Es&am4,X-wׁgz|ϴs>ڣ۬B9/EA6?=dD"L+:'1"0 YZsurvey/src/0000755000176200001440000000000015147136377012414 5ustar liggesuserssurvey/src/arma_multistage.cpp0000644000176200001440000003324715132312267016273 0ustar liggesusers//#include #include // [[Rcpp::depends(RcppArmadillo)]] // [[Rcpp::export(rng=FALSE)]] arma::mat arma_onestage(const arma::mat& Y, const arma::colvec& samp_unit_ids, const arma::colvec& strata_ids, const arma::colvec& strata_samp_sizes, const arma::colvec& strata_pop_sizes, const Rcpp::CharacterVector& singleton_method, const Rcpp::LogicalVector& use_singleton_method_for_domains, const int& stage) { size_t n_col_y = Y.n_cols; arma::uword number_of_data_rows = Y.n_rows; arma::mat result(n_col_y, n_col_y, arma::fill::zeros); if (number_of_data_rows == 0) { return result; } // Get distinct strata ids and their length, H arma::colvec distinct_strata_ids = unique(strata_ids); arma::uword H = distinct_strata_ids.n_elem; // Initialize vectors giving start and end rows for each stratum arma::uvec strata_ends; arma::uvec strata_starts; strata_ends.set_size(H); strata_starts.set_size(H); // Initialize checks for end of stratum bool at_end_of_stratum = true; // Prepare to iterate over list of strata arma::uword h = 0; // Get end index of each stratum arma::uvec row_indices = arma::linspace(0L, number_of_data_rows - 1L, number_of_data_rows); arma::uword next_row_index; for (arma::uvec::iterator row_index = row_indices.begin(); row_index != row_indices.end(); ++row_index) { if ((*row_index) == (number_of_data_rows-1)) { at_end_of_stratum = true; } else { next_row_index = * std::next(row_index, 1); at_end_of_stratum = strata_ids(*row_index) != strata_ids(next_row_index); } if (at_end_of_stratum) { strata_ends(h) = *(row_index); h += 1L; } } // Get start index of each stratum if (H > 1) { h = 1; while (h < H) { strata_starts(h) = strata_ends((h-1)) + 1; h += 1; } } strata_starts(0) = 0; // Initialize strata summaries arma::mat cov_h(n_col_y, n_col_y, arma::fill::zeros); double n_h; double N_h; int n_obs_h; double f_h; double scale; // Initialize checks for end of sampling unit bool at_end_of_samp_unit = true; // Initialize sampling unit total arma::rowvec Yhi; Yhi = Yhi.zeros(n_col_y); // Get count of sampling units from all strata, // and check for singleton strata double n_samp_units_all_strata = 0; arma::rowvec singleton_indicators; singleton_indicators.zeros(H); for (arma::uword h = 0; h < H; ++h) { arma::uword stratum_start = strata_starts(h); n_samp_units_all_strata += strata_samp_sizes(stratum_start); // Check if there is only one sampling unit sampled in the stratum if (strata_samp_sizes(stratum_start) < 2) { // If only one sampling unit, check that it wasn't sampled with certainty if ((strata_pop_sizes(stratum_start) > 1)) { singleton_indicators(h) = 1; if ((singleton_method[0] == "fail")) { Rcpp::String error_msg("At least one stratum contains only one PSU at stage "); error_msg += stage; Rcpp::stop(error_msg); } } continue; // Skip to next stratum } // Check for PSUs which are lonely in the domain (but not in the sample) if (use_singleton_method_for_domains[0]) { arma::uword h_row_index = strata_starts(h); // Set singleton indicator equal to 1 unless there are multiple observed sampling units in the stratum singleton_indicators(h) = 1; while ((singleton_indicators(h) == 1) && (h_row_index <= strata_ends(h))) { if (samp_unit_ids(h_row_index) != samp_unit_ids(strata_starts(h))) { singleton_indicators(h) = 0; } h_row_index += 1; } if ((static_cast(strata_ends[h] - strata_starts[h] + 1)) < 2) { singleton_indicators(h) = 1; } // Throw a warning message about the domain's singleton if (singleton_indicators(h) == 1) { Rcpp::String warning_msg("At least one stratum contains only one PSU at stage "); warning_msg += stage; Rcpp::warning(warning_msg); // If not adjusting for domain singletons, don't mark the stratum as a singleton if ((singleton_method[0] != "adjust") && (singleton_method[0] != "average")) { singleton_indicators(h) = 0; } } } } int n_singleton_strata = sum(singleton_indicators); bool any_singleton_strata = n_singleton_strata > 0; arma::rowvec Y_means; Y_means = Y_means.zeros(n_col_y); if (any_singleton_strata & (singleton_method[0] == "adjust")) { Y_means = sum(Y, 0) / n_samp_units_all_strata; } // Iterate over each stratum for (arma::uword h = 0; h < H; ++h) { if ((singleton_indicators(h) == 1) && (singleton_method[0] != "adjust")) { continue; } arma::uvec h_row_indices = arma::linspace(strata_starts[h], strata_ends[h], strata_ends[h] - strata_starts[h] + 1); // Get stratum-wide summary arma::uword stratum_start = strata_starts(h); n_h = static_cast(strata_samp_sizes(stratum_start)); N_h = static_cast(strata_pop_sizes(stratum_start)); n_obs_h = 0; if (std::isfinite(N_h)) { f_h = static_cast(n_h) / static_cast(N_h); } else { f_h = 0.0; } arma::rowvec Ybar_h; if ((singleton_indicators(h) == 1) && (singleton_method[0] == "adjust")) { Ybar_h = Y_means; } else { Ybar_h = arma::sum(Y.rows(h_row_indices), 0) / n_h; } // Iterate over each row in the stratum and its following row arma::uword h_next_row_index; for (arma::uvec::iterator h_row_index = h_row_indices.begin(); h_row_index != h_row_indices.end(); ++h_row_index) { // Determine whether current row is last for the current sampling unit if ((*h_row_index) < strata_ends(h)) { h_next_row_index = * std::next(h_row_index, 1); at_end_of_samp_unit = samp_unit_ids(*h_row_index) != samp_unit_ids(h_next_row_index); } else { at_end_of_samp_unit = true; } // Get contribution to sampling unit\'s total Yhi += Y.row(*h_row_index); if (at_end_of_samp_unit) { n_obs_h += 1; Yhi.each_row() -= Ybar_h; cov_h += (arma::trans(Yhi)*Yhi); Yhi = Yhi.zeros(); } } // If the data were subsetted, some sampling units // may not have rows of data that appear in inputs. // Make sure these units contribute to the variance. double n_h_missing = n_h - n_obs_h; if (n_h_missing > 0) { cov_h += n_h_missing*(arma::trans(Ybar_h)*Ybar_h); } // Determine scaling factor to use for normalizing sum of squares // and handling finite population correction scale = ((1.0 - f_h) * n_h); if (n_h > 1) { scale /= (n_h - 1); } result += (scale * cov_h); cov_h = cov_h.zeros(); } // For the 'average' method for handling singleton strata, // the total variance contribution of each singleton stratum // is assumed to be equal to the variance contribution of the average nonsingleton stratum if ((singleton_method[0] == "average") && any_singleton_strata) { int n_nonsingleton_strata = H - n_singleton_strata; double scaling_factor; if (n_nonsingleton_strata > 0) { scaling_factor = static_cast(H)/static_cast(n_nonsingleton_strata); } else { scaling_factor = R_NaN; } result *= scaling_factor; } return result; } // [[Rcpp::export(rng=FALSE)]] arma::mat arma_multistage(arma::mat Y, arma::mat samp_unit_ids, arma::mat strata_ids, arma::mat strata_samp_sizes, arma::mat strata_pop_sizes, Rcpp::CharacterVector singleton_method, Rcpp::LogicalVector use_singleton_method_for_domains, Rcpp::LogicalVector use_only_first_stage, int stage) { size_t n_stages = samp_unit_ids.n_cols; if (Y.n_rows == 0) { arma::mat V(Y.n_cols, Y.n_cols, arma::fill::zeros); return V; } // First reorder inputs by first-stage sample unit IDs arma::uvec samp_unit_id_order = arma::stable_sort_index(samp_unit_ids.col(0), "ascend"); Y = Y.rows(samp_unit_id_order); samp_unit_ids = samp_unit_ids.rows(samp_unit_id_order); strata_ids = strata_ids.rows(samp_unit_id_order); strata_samp_sizes = strata_samp_sizes.rows(samp_unit_id_order); strata_pop_sizes = strata_pop_sizes.rows(samp_unit_id_order); // Next reorder inputs by first-stage strata IDs arma::uvec strata_id_order = arma::stable_sort_index(strata_ids.col(0), "ascend"); Y = Y.rows(strata_id_order); samp_unit_ids = samp_unit_ids.rows(strata_id_order); strata_ids = strata_ids.rows(strata_id_order); strata_samp_sizes = strata_samp_sizes.rows(strata_id_order); strata_pop_sizes = strata_pop_sizes.rows(strata_id_order); // Obtain first stage information arma::colvec first_stage_ids = samp_unit_ids.col(0); arma::colvec first_stage_strata = strata_ids.col(0); arma::colvec first_stage_strata_samp_sizes = strata_samp_sizes.col(0); arma::colvec first_stage_strata_pop_sizes = strata_pop_sizes.col(0); // If there are later stages of sampling, // obtain the necessary columns from inputs, // which will be used recursively arma::mat later_stage_ids; arma::mat later_stage_strata; arma::mat later_stage_strata_samp_sizes; arma::mat later_stage_strata_pop_sizes; if ((n_stages > 1) && !use_only_first_stage[0]) { later_stage_ids = samp_unit_ids.tail_cols(n_stages - 1); later_stage_strata = strata_ids.tail_cols(n_stages - 1); later_stage_strata_samp_sizes = strata_samp_sizes.tail_cols(n_stages-1); later_stage_strata_pop_sizes = strata_pop_sizes.tail_cols(n_stages-1); } // Calculate first-stage variance arma::mat V = arma_onestage(Y, first_stage_ids, first_stage_strata, first_stage_strata_samp_sizes, first_stage_strata_pop_sizes, singleton_method, use_singleton_method_for_domains, stage); // For each first-stage unit, get variance contribution from next stage if ((n_stages > 1) && !use_only_first_stage[0]) { // Get distinct first-stage strata ids and their length, H arma::colvec distinct_strata_ids = unique(first_stage_strata); arma::uword H = distinct_strata_ids.n_elem; for (arma::uword h = 0; h < H; ++h) { // Determine which rows of data correspond to the current first-stage stratum arma::uvec h_indices = arma::find(first_stage_strata==distinct_strata_ids(h)); // Get submatrices of inputs corresponding to the current first-stage stratum arma::mat Y_h = Y.rows(h_indices); arma::mat h_samp_unit_ids = later_stage_ids.rows(h_indices); arma::mat h_strata = later_stage_strata.rows(h_indices); arma::mat h_strata_samp_sizes = later_stage_strata_samp_sizes.rows(h_indices); arma::mat h_strata_pop_sizes = later_stage_strata_pop_sizes.rows(h_indices); // Get count of first-stage sampling units in first-stage stratum // and finite population correction, based on all first-stage units in sample design arma::uword n_h = min(first_stage_strata_samp_sizes.elem(h_indices)); double N_h = static_cast(min(strata_pop_sizes.elem(h_indices))); double f_h; if (std::isfinite(N_h)) { f_h = static_cast(n_h) / N_h; } else { f_h = 0.0; continue; // Skip to next stratum, since variance contribution is 0 } // Get list of first-stage units in the current subset of data, and count them arma::colvec h_first_stage_units = first_stage_ids.elem(h_indices); arma::colvec h_unique_first_stage_units = unique(h_first_stage_units); arma::uword n_h_subset = h_unique_first_stage_units.n_elem; for (arma::uword i=0; i < n_h_subset; ++i ) { // Create subsets of inputs specific to current first-stage sampling unit arma::uvec unit_indices = arma::find(first_stage_ids.elem(h_indices) == h_unique_first_stage_units(i)); arma::mat Y_hi = Y_h.rows(unit_indices); arma::mat hi_samp_unit_ids = h_samp_unit_ids.rows(unit_indices); arma::mat hi_strata = h_strata.rows(unit_indices); arma::mat hi_strata_samp_sizes = h_strata_samp_sizes.rows(unit_indices); arma::mat hi_strata_pop_sizes = h_strata_pop_sizes.rows(unit_indices); // Estimate later-stage variance contribution arma::mat V_hi = f_h * arma_multistage(Y_hi, hi_samp_unit_ids, hi_strata, hi_strata_samp_sizes, hi_strata_pop_sizes, singleton_method, use_singleton_method_for_domains, use_only_first_stage, stage = stage + 1); V += V_hi; } } } // Deal with potential floating-point error V.diag() = arma::abs(V.diag()); for (arma::uword i=0; i < V.n_cols; ++i ) { if (std::abs(V(i,i)) < 1e-16) { V.row(i).zeros(); V.col(i).zeros(); } } // Return result return V; } survey/src/RcppExports.cpp0000644000176200001440000000770514462576160015417 0ustar liggesusers// Generated by using Rcpp::compileAttributes() -> do not edit by hand // Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #include #include using namespace Rcpp; #ifdef RCPP_USE_GLOBAL_ROSTREAM Rcpp::Rostream& Rcpp::Rcout = Rcpp::Rcpp_cout_get(); Rcpp::Rostream& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get(); #endif // arma_onestage arma::mat arma_onestage(const arma::mat& Y, const arma::colvec& samp_unit_ids, const arma::colvec& strata_ids, const arma::colvec& strata_samp_sizes, const arma::colvec& strata_pop_sizes, const Rcpp::CharacterVector& singleton_method, const Rcpp::LogicalVector& use_singleton_method_for_domains, const int& stage); RcppExport SEXP _survey_arma_onestage(SEXP YSEXP, SEXP samp_unit_idsSEXP, SEXP strata_idsSEXP, SEXP strata_samp_sizesSEXP, SEXP strata_pop_sizesSEXP, SEXP singleton_methodSEXP, SEXP use_singleton_method_for_domainsSEXP, SEXP stageSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::traits::input_parameter< const arma::mat& >::type Y(YSEXP); Rcpp::traits::input_parameter< const arma::colvec& >::type samp_unit_ids(samp_unit_idsSEXP); Rcpp::traits::input_parameter< const arma::colvec& >::type strata_ids(strata_idsSEXP); Rcpp::traits::input_parameter< const arma::colvec& >::type strata_samp_sizes(strata_samp_sizesSEXP); Rcpp::traits::input_parameter< const arma::colvec& >::type strata_pop_sizes(strata_pop_sizesSEXP); Rcpp::traits::input_parameter< const Rcpp::CharacterVector& >::type singleton_method(singleton_methodSEXP); Rcpp::traits::input_parameter< const Rcpp::LogicalVector& >::type use_singleton_method_for_domains(use_singleton_method_for_domainsSEXP); Rcpp::traits::input_parameter< const int& >::type stage(stageSEXP); rcpp_result_gen = Rcpp::wrap(arma_onestage(Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, stage)); return rcpp_result_gen; END_RCPP } // arma_multistage arma::mat arma_multistage(arma::mat Y, arma::mat samp_unit_ids, arma::mat strata_ids, arma::mat strata_samp_sizes, arma::mat strata_pop_sizes, Rcpp::CharacterVector singleton_method, Rcpp::LogicalVector use_singleton_method_for_domains, Rcpp::LogicalVector use_only_first_stage, int stage); RcppExport SEXP _survey_arma_multistage(SEXP YSEXP, SEXP samp_unit_idsSEXP, SEXP strata_idsSEXP, SEXP strata_samp_sizesSEXP, SEXP strata_pop_sizesSEXP, SEXP singleton_methodSEXP, SEXP use_singleton_method_for_domainsSEXP, SEXP use_only_first_stageSEXP, SEXP stageSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::traits::input_parameter< arma::mat >::type Y(YSEXP); Rcpp::traits::input_parameter< arma::mat >::type samp_unit_ids(samp_unit_idsSEXP); Rcpp::traits::input_parameter< arma::mat >::type strata_ids(strata_idsSEXP); Rcpp::traits::input_parameter< arma::mat >::type strata_samp_sizes(strata_samp_sizesSEXP); Rcpp::traits::input_parameter< arma::mat >::type strata_pop_sizes(strata_pop_sizesSEXP); Rcpp::traits::input_parameter< Rcpp::CharacterVector >::type singleton_method(singleton_methodSEXP); Rcpp::traits::input_parameter< Rcpp::LogicalVector >::type use_singleton_method_for_domains(use_singleton_method_for_domainsSEXP); Rcpp::traits::input_parameter< Rcpp::LogicalVector >::type use_only_first_stage(use_only_first_stageSEXP); Rcpp::traits::input_parameter< int >::type stage(stageSEXP); rcpp_result_gen = Rcpp::wrap(arma_multistage(Y, samp_unit_ids, strata_ids, strata_samp_sizes, strata_pop_sizes, singleton_method, use_singleton_method_for_domains, use_only_first_stage, stage)); return rcpp_result_gen; END_RCPP } static const R_CallMethodDef CallEntries[] = { {"_survey_arma_onestage", (DL_FUNC) &_survey_arma_onestage, 8}, {"_survey_arma_multistage", (DL_FUNC) &_survey_arma_multistage, 9}, {NULL, NULL, 0} }; RcppExport void R_init_survey(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } survey/src/Makevars.win0000644000176200001440000000006114462576160014676 0ustar liggesusers PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) survey/src/Makevars.makefile0000644000176200001440000000006014462576160015655 0ustar liggesusers PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)survey/NAMESPACE0000644000176200001440000003576615147133324013052 0ustar liggesusersuseDynLib(survey) import(stats,graphics,splines,grid, survival,lattice,methods,Matrix) importFrom("grDevices", "col2rgb", "grey", "rgb") importFrom("utils", "getS3method") importFrom("mitools","withPV") importFrom(Rcpp, sourceCpp) export(svydesign, svrepdesign, as.svrepdesign,twophase, postStratify, rake, calibrate, estWeights, as.svydesign2, svyplot, svyhist, svyboxplot, svyby, cv, SE, deff, svycoxph, svyglm, svyquantile, svymean, svytotal, svyvar, svyratio, svytable, svychisq, svymle, svysmooth, withReplicates, hadamard, paley, is.hadamard, bootweights, mrbweights, jk1weights,jknweights, brrweights, regTermTest, degf, nonresponse, sparseCells, neighbours, joinCells, compressWeights, make.formula, svycontrast, svyCprod, svyrecvar, grake, svrVar, pchisqsum, pFsum, make.calfun, cal.linear, cal.raking, cal.logit, cal.sinh,svycdf, svykappa, svykm, svyolr, svycoplot, svyloglin, make.panel.svysmooth, dotchart, subbootweights, svyciprop, svyttest, marginpred, twophasevar, twophase2var, ppsmat, HR, unwtd.count, svyfactanal, svypredmeans, svyprcomp, trimWeights,stratsample,svylogrank, svyranktest,svystandardize, psrsq, svysurvreg, cal_names, svycralpha, svyivreg, svynls, svyscoretest, oldsvyquantile,svyqqplot, svyqqmath, svybys, svygofchisq, poisson_sampling,ppscov, xdesign, svysmoothArea,svysmoothUnit, multiframe, reweight, withCrossval, multiphase, "degf<-") 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(svychisq, twophase2) S3method(svykappa, default) S3method(svykappa, DBIsvydesign) S3method(svyglm,survey.design) S3method(svyglm,svyrep.design) S3method(svyglm, DBIsvydesign) S3method(svyplot,default) S3method(svyplot, DBIsvydesign) S3method(svycoplot,default) S3method(svycoplot, DBIsvydesign) S3method(svysmooth, default) S3method(svysmooth, DBIsvydesign) S3method(svyboxplot, DBIsvydesign) S3method(svyboxplot, default) S3method(svycdf, default) S3method(svycdf, DBIsvydesign) S3method(plot, svystat) S3method(plot, svrepstat) S3method(barplot, svystat) S3method(barplot, svrepstat) S3method(plot, svyby) S3method(barplot, svyby) S3method(dotchart, svystat) S3method(dotchart, svrepstat) S3method(dotchart, svyby) S3method(dotchart, default) S3method(predict, svyglm) S3method(predict, svrepglm) S3method(predict, svyolr) S3method(predict, svyratio) S3method(predict, svyratio_separate) S3method(coef,svyratio) S3method(svycoxph,survey.design) S3method(svycoxph,svyrep.design) S3method(svycoxph, DBIsvydesign) S3method(svysurvreg,survey.design) S3method(residuals, svrepglm) S3method(residuals, svyglm) S3method(residuals, svysurvreg) S3method(coef,svrepstat) S3method(coef,svystat) S3method(coef,svyby) S3method(coef,svymle) S3method(coef, svyolr) S3method(coef, svyglm) S3method(coef, newsvyquantile) S3method(coef, oldsvyquantile) S3method(confint,svyglm) S3method(confint, svyciprop) S3method(confint, newsvyquantile) S3method(confint, oldsvyquantile) S3method(SE,default) S3method(SE,svrepstat) S3method(SE,svystat) S3method(SE,svyby) S3method(SE,newsvyquantile) S3method(SE,oldsvyquantile) S3method(SE,svyratio) S3method(vcov,svyrep.design) S3method(vcov, newsvyquantile) S3method(vcov, oldsvyquantile) S3method(vcov, svrepstat) S3method(vcov, svyglm) S3method(vcov, svymle) S3method(vcov, svystat) S3method(vcov, svyby) S3method(vcov, svyratio) S3method(logLik,svyglm) S3method(logLik,svrepglm) S3method(extractAIC,svyglm) S3method(extractAIC,svrepglm) S3method(extractAIC,svyglm) S3method(anova,svyglm) S3method(AIC,svyglm) S3method(BIC,svyglm) S3method(anova,svycoxph) S3method(predict,svycoxph) S3method(extractAIC,svycoxph) S3method(extractAIC,svrepcoxph) S3method(AIC,svycoxph) S3method(svycontrast,svrepstat) S3method(svycontrast,svystat) S3method(svycontrast,svyby) S3method(svycontrast,svyglm) S3method(svycontrast, svrepglm) S3method(svycontrast,svycoxph) S3method(svycontrast, svrepcoxph) S3method(svycontrast,default) S3method(svycontrast, svyvar) S3method(Ops, svystat) S3method(Math, svystat) S3method(image,svyrep.design) S3method(image,pps) S3method(plot,svysmooth) S3method(print,svysmooth) S3method(lines,svysmooth) S3method(svykm, survey.design) S3method(svykm, svyrep.design) S3method(svykm, DBIsvydesign) S3method(plot,svykm) S3method(print,svykm) S3method(print,svykmlist) S3method(lines, svykm) S3method(plot,svykmlist) S3method(quantile, svykm) S3method(confint,svykm) S3method(svyolr,survey.design2) S3method(svyolr,svyrep.design) S3method(svyolr,DBIsvydesign) S3method(vcov,svyolr) S3method(summary, svyolr) S3method(print, svyolr) S3method(print, summary.svyolr) S3method(ftable,svrepstat) S3method(ftable,svystat) S3method(ftable,svyby) S3method(weights, nonresponse) S3method(weights, survey.design) S3method(weights, survey_fpc) S3method(weights, svyrep.design) S3method(summary,survey.design) S3method(summary,survey.design2) S3method(summary,twophase) S3method(summary, twophase2) S3method(summary,svyrep.design) S3method(summary,svrepglm) S3method(summary,svreptable) S3method(summary,svycoxph) S3method(summary,svyglm) S3method(summary,svymle) S3method(summary,svytable) S3method(deviance, coxph) S3method(deviance, svycoxph) S3method(print,summary.survey.design) S3method(print,summary.survey.design2) S3method(print,summary.twophase) S3method(print,summary.twophase2) S3method(print,summary.svyrep.design) S3method(print,summary.svyglm) S3method(print,summary.svytable) S3method(print,svycdf) S3method(plot,svycdf) S3method(print, nonresponse) S3method(print, nonresponseSubset) S3method(print, regTermTest) S3method(print, regTermTestLRT) S3method(print, regTermTestWW) S3method(print, svrepstat) S3method(print, svystat) S3method(print, survey.design) S3method(print, survey.design2) S3method(print, svyrep.design) S3method(print, svyglm) S3method(print, svymle) S3method(print, oldsvyquantile) S3method(print, svyratio) S3method(print, svyratio_separate) S3method(print, twophase) S3method(print, twophase2) S3method(print, calfun) S3method(print, svyvar) S3method(print, seqanova.svycoxph) S3method(print, seqanova.svyglm) S3method(as.matrix, svyvar) S3method(print, svrepvar) S3method(as.matrix, svrepvar) S3method(withReplicates, svyrep.design) S3method(withReplicates, svrepvar) S3method(withReplicates, svrepstat) S3method(withReplicates, svyimputationList) S3method(dim,repweights_compressed) S3method(dim,survey.design) S3method(dim,twophase) S3method(dim,twophase2) S3method(dim, DBIsvydesign) S3method(dim, DBIrepdesign) S3method(dim, svyrep.design) S3method(dim, svyimputationList) S3method(dimnames,survey.design) S3method(dimnames,svyrep.design) S3method(dimnames,twophase) S3method(dimnames, DBIsvydesign) S3method(dimnames, DBIrepdesign) S3method(dimnames, svyimputationList) S3method(dimnames, multiframe) S3method(dimnames, twophase) S3method(dimnames, twophase2) S3method(dimnames, repweights_compressed) S3method(degf, survey.design2) S3method(degf, svyrep.design) S3method(degf, pps) S3method(degf, twophase) S3method(degf, twophase2) S3method(degf, svystat) S3method(degf, svrepstat) S3method("degf<-", svyrep.design) S3method("degf<-", default) S3method(cv,default) S3method(cv,svyratio) S3method(deff,default) S3method(deff,svyby) S3method(postStratify,survey.design) S3method(postStratify,svyrep.design) S3method(postStratify,twophase) S3method(postStratify,twophase2) S3method(postStratify,DBIsvydesign) S3method(calibrate,survey.design2) S3method(calibrate,svyrep.design) S3method(calibrate,twophase) S3method(calibrate,twophase2) S3method(calibrate, DBIsvydesign) S3method(calibrate, pps) S3method(estWeights,data.frame) S3method(estWeights,twophase) S3method(compressWeights, default) S3method(compressWeights, repweights_compressed) S3method(compressWeights, svyrep.design) S3method(trimWeights, svyrep.design) S3method(trimWeights, survey.design2) S3method(subset,survey.design) S3method(subset,svyrep.design) S3method(subset,twophase) S3method(subset,twophase2) S3method(subset, DBIsvydesign) S3method(update,survey.design) S3method(update,svyrep.design) S3method(update,twophase) S3method(update,twophase2) S3method(update,DBIsvydesign) S3method(update,svyimputationList) S3method(transform,survey.design) S3method(transform,svyrep.design) S3method(transform,twophase) S3method(transform,twophase2) S3method(transform,DBIsvydesign) S3method(transform,svyimputationList) S3method(svyby, default) S3method(svyby, DBIsvydesign) S3method(svyby, survey.design2) S3method(regcalibrate, survey.design2) S3method(regcalibrate, svyrep.design) S3method(na.exclude,survey.design) S3method(na.exclude,twophase) S3method(na.fail,survey.design) S3method(na.fail,twophase) S3method(na.omit,survey.design) S3method(na.omit,twophase) S3method(model.frame,survey.design) S3method(model.frame,svycoxph) S3method(model.frame,svyrep.design) S3method(model.frame, twophase) S3method(model.frame, twophase2) S3method(model.frame, svyolr) S3method(as.matrix,repweights) S3method(as.matrix, repweights_compressed) S3method(as.vector, repweights_compressed) S3method(as.data.frame,svrepstat) S3method(as.data.frame,svystat) S3method(with,svyimputationList) S3method(print, svyimputationList) S3method(subset, svyimputationList) S3method(print, svyDBimputationList) S3method(with, svyDBimputationList) S3method(update, svyDBimputationList) S3method(close, svyDBimputationList) S3method(open, svyDBimputationList) S3method(subset, svyDBimputationList) S3method(withPV, survey.design) S3method(withPV, svyrep.design) S3method(confint,svystat) S3method(confint,svrepstat) S3method(confint, svyratio) S3method(confint, svyby) S3method(confint,svyttest) S3method(`[`, survey.design) S3method(`[`, survey.design2) S3method(`[`, svyrep.design) S3method(`[`, twophase) S3method(`[`, twophase2) S3method(`[`, repweights_compressed) S3method(`[`, nonresponse) S3method(`[`, DBIsvydesign) S3method(`[`, DBIrepdesign) S3method(`[<-`, survey.design) S3method(`names<-`, svrepstat) S3method(svylogrank,survey.design2) S3method(svylogrank,svyrep.design) S3method(svylogrank,twophase) S3method(svylogrank,DBIsvydesign) S3method(svyranktest,survey.design) S3method(svyranktest,svyrep.design) S3method(svyranktest,DBIsvydesign) S3method(svyivreg,survey.design) S3method(svyivreg, svyrep.design) S3method(summary, svyivreg) S3method(vcov, svyivreg) S3method(psrsq,glm) S3method(psrsq,svyglm) S3method(cal_names, survey.design) S3method(cal_names, DBIsvydesign) S3method(svynls, DBIsvydesign) S3method(svynls, survey.design2) S3method(svynls, svyrep.design) S3method(print, svynls) S3method(summary, svynls) S3method(coef,svynls) S3method(vcov,svynls) S3method(svyscoretest,svyglm) S3method(unwrap,default) S3method(unwrap2, default) S3method(unwrap2, newsvyquantile) S3method(svyxvar,xdesign) S3method(svymean, xdesign) S3method(svyglm, xdesign) S3method(print,xdesign) S3method(degf, xdesign) S3method(update,xdesign) S3method(transform, xdesign) S3method(subset, xdesign) S3method("[", xdesign) S3method(svyby, xdesign) S3method(dim, xdesign) S3method(dimnames, xdesign) S3method(estfuns, coxph) S3method(estfuns, glm) S3method(estfuns, lm) S3method(sigma, svyglm) S3method(sigma, svrepglm) S3method(pps_design, ppsdcheck) S3method(pps_design, ppsdelta) S3method(pps_design, HR) S3method(pps_design, ppsmat) S3method(pps_design, character) S3method(survfit,svycoxph) S3method(influence,svystat) S3method(estWeights,twophase2) S3method(postStratify,pps) S3method(svycontrast,svyolr) S3method(svylogrank,twophase2) S3method(svytotal,xdesign) S3method(svysmoothArea, survey.design) S3method(svysmoothArea, default) S3method(svysmoothUnit, survey.design) S3method(svysmoothUnit, default) S3method(summary, svysae) S3method(svytotal, multiframe) S3method(svymean, multiframe) S3method(print, multiframe) S3method(summary, multiframe) S3method(print,summary.multiframe) S3method(svyglm, multiframe) S3method(degf, multiframe) S3method(print, dualframe) S3method(subset, multiframe) S3method(`[`, multiframe) S3method(svyvar, multiframe) S3method(weights, multiframe) S3method(model.frame, multiframe) S3method(svytable, multiframe) S3method(svychisq, multiframe) S3method(update, multiframe) S3method(reweight, dualframe) S3method(reweight, multiframe) S3method(plot, dualframe_with_rewt) S3method(coef, dualframe_with_rewt) S3method(svytotal, multiphase) S3method(svymean, multiphase) S3method(print, multiphase) S3method(update, multiphase) S3method(subset, multiphase) S3method(weights, multiphase) S3method(svyglm, multiphase) S3method(degf, multiphase) S3method(svyvar, multiphase) S3method(dim, multiphase) S3method(dimnames, multiphase) S3method(calibrate, multiphase) S3method(withCrossval, svyrep.design) survey/TODO0000644000176200001440000000412414664204137012307 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 [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. - [done] Parametric survival models (you can do these with svymle) - [see svylme package] 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 ################ [done] Use naresid() to get better missing-value handling in svyglm, panel.svysmooth, etc survey/inst/0000755000176200001440000000000015143217072012566 5ustar liggesuserssurvey/inst/BUGS0000644000176200001440000000066513415262361013261 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/CITATION0000644000176200001440000000172315132256610013725 0ustar liggesuserscitHeader("To cite the survey package in publications use one or more of:") bibentry(bibtype="misc", author="Thomas Lumley", year=2026, title="survey: analysis of complex survey samples", note="R package version 4.5", textVersion="T. Lumley (2024) \"survey: analysis of complex survey samples\". R package version 4.5." ) bibentry(bibtype="article", year=2004, author="Thomas Lumley", title = "Analysis of Complex Survey Samples", journal="Journal of Statistical Software", volume="9",number=1,pages="1-19", note="R package verson 2.2", textVersion="T. Lumley (2004) Analysis of complex survey samples. Journal of Statistical Software 9(1): 1-19" ) bibentry(bibtype="book", year=2010, author="Thomas Lumley", title = "Complex Surveys: A Guide to Analysis Using R: A Guide to Analysis Using R", publisher="John Wiley and Sons", textVersion="T. Lumley (2010) Complex Surveys: A Guide to Analysis Using R. John Wiley and Sons." ) survey/inst/api.db0000644000176200001440000042600011457435607013662 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ڽYKБB^$^m1|}J-zLDͬ'䯧^M6E;4dwWuWt̔ ͂6fv{s]?Ÿb7_RGx_kY&榢3l'x?=#M|AO}^73U`󳅩Uh:aE <^ddzfF`lio%ܾ00vb,V=kT, PaAՁ3t-tㅩ\i+8ܻ."wr%0D\aZ޲頕,%#2\Ȧ&:vN!r gлpe-\2jJDmҍ$MD{U.81U+s_^9:6! p_wᄏx|809p0P?Bhjy e 3aކμb#oS ˥wp1W;9L:ec$"iMqDi<:Q_R#ki|Wݜ|\;*]:EiFbÆ`YR*IqN=J^F;R$%̐Er 0$G"C <@C*.;gB bEx iX07bYĶo t_8<}CZ&hVNW_򔸵'UfA2eD!z }t[kiW)mëFũjTgx0jW{"$,֞0 M2=8U=;H6 F>B#"Lm37F:*j`uT+_m^ݨdp!_:4@|LŬ%$/.2W%_'Xy-<<(6*TX0ﲯ:ײjTPq]t4Úi!;W줤*47vX'iB2E: x-B }9\Wl56S#X!F굼DyA *Dީ;Iw"eW)"*gPPD-H| V%ciϻD tNVr1>YǙ4NF/bz]j 47AhnK) IڝWbwfJ=/X>cݴAkqNߘQ?$*-[zyRb|o491dwa~1+X&Ah] \̺OY )ڲ|廼;Zu-f /W!Utд Y}}\vĤon;hyT T[[ٷnsdJ }=t+gdE`ictOmEVeRC% |u.Pendstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 1 0 obj << /Font << /F34 6 0 R /F19 9 0 R /F8 12 0 R /F43 15 0 R /F44 18 0 R /F46 21 0 R /F48 24 0 R /F53 27 0 R >> /ProcSet [ /PDF /Text ] >> endobj 31 0 obj << /Length 1534 /Filter /FlateDecode >> stream xڵXK60z)R)ɡӮYk]?v{HzE Z| 3<8wI4&*fLMSYl4Oa-~:KyDus5MwN<+iR>_~ o{"-tsÄ%KL<|%FU *Ǥ i& qTEH™Lk2s/)lCH5 ţn 'v{zJO=4iWT2ȈUU̘* 1Z8c]ΜI?c9nuf OНqIj} -DL b,30v*MB&VXhDF\#  x1O+d@DW@j30~aL{hij$mXoj}&&+٠NV1Y:8U{$S=1 5Sp7iOͷvZIL%G`µH0څVm+L Bv̚|hnS;m?(d0͠w[ҺsťLr aJܑwŲ K˲/LK@ r%Y!(-JP \COY՛3};.klPAUmkiNQփJ1::&li=0sw*뺚Y5b k?k,"l5A 7* mڶy uݩ,Cڊ# wP5 3CL8Qx+&+E/[|B0A;ɓ|AQ96Fjendstream endobj 30 0 obj << /Type /Page /Contents 31 0 R /Resources 29 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 29 0 obj << /Font << /F8 12 0 R /F53 27 0 R /F46 21 0 R /F48 24 0 R >> /ProcSet [ /PDF /Text ] >> endobj 34 0 obj << /Length 1232 /Filter /FlateDecode >> stream xXKs6WHM-4IC:==(d{j=ߞ}AEIڴ=p}|o&/A*o@[ƾx7Vƺdsv2{TVX |_>>nj9䮼ln\nVvn _'߿*lVeWZm@j'M"0ʝ.@fZoC^]5VgCfF;x0ZkA6Ghm02(oHkU9 ek`5pg+`d$,%fovcQZg \s26jܮe'K|d\P;$ "P\[,5벀}ͻxgӪX3Gr\Urs?bCl0T\ΈʵWV2]!~,/˫^8r6kg\9<j͚LD{X'5]Sd[E1@}$NB+g{-!af.D ,  3N ]C`.{j"4DF][_I0df;/ #7|Ղ;Qv.a218R@ێe`MZթ=NY%@;BPRƒ4/U- 23S|b\Qr3U-9Ί[.$_& 8ZK_B/F_A[12oT?%ŀOD粎߳n\+bUU@5wvpdf@2I̭8~>nQthcbq!6$us+UfOl%¸΅na8BXt<|szAX^slosWcyp:oo)2z34p>PYY^cwsubZJeI,J]\|~Lendstream endobj 33 0 obj << /Type /Page /Contents 34 0 R /Resources 32 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 32 0 obj << /Font << /F8 12 0 R /F43 15 0 R /F53 27 0 R /F46 21 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj << /Length 1270 /Filter /FlateDecode >> stream xWKo6WEr7VDRϢ[ m@EbXeu;/J"]Y2973'ghYlF2OtGM4.~o$ԑgM9{kcdКW㉉So+"lr 8]frKh?qQg |VT]F'_Nܖ5zRuXG2p, T(.(<|>, gk'KݏN3 G3|NqW nO# VoMҵnYJm>PFC4(OhSƼ7X wb)*gjޙD39+yJz—7b#B̋ڒ- T6R uYqްISq:OTJ|?Dx\BKCa 'D$(ϷӶ^_MOLUDf#kO[\%AKSo5Kx.ؾ@[b T^2Jq Qtyd!7Z Z*WND1v:u;6UؽceYh^R[&Jt)pFt/#`dߴ'RFG*uthQ/.BQؠwcv*6q\ѦA]头yq&/-)% hKߡypZDɴvDSdtd);E/4}cC=_Nj1[?푩Ќ-۸S]c? '< 찙M|[qjh+֖gLjW1%L8g_"_ xnkt_Jꭀw_ՙ$VwҜL|$"? @>J/qܲF'ZDqlp1ePJR=`^, ;=- 5x RΩ#C*"+z,$i.=I.W%ی{Znmn jkqL t8SW ޸`k=j+;egҜ-oA7qNw 5o@w\*_Ws0> endobj 35 0 obj << /Font << /F55 40 0 R /F8 12 0 R /F46 21 0 R /F53 27 0 R /F43 15 0 R >> /ProcSet [ /PDF /Text ] >> endobj 43 0 obj << /Length 446 /Filter /FlateDecode >> stream xڍ=S0 1; w pЁ 9pKpoG8WJz$djtRꤙ%JkY*M_Tm@̀W)hAzjJH.8ֱ}9s nr[$ky/t%gX?0K@]pÆ*mΒ<ɔiK!ZI z;OʾH9oIh]^tLh)>zYLleD 4 ),>I4xYDGt|{r] )W%uu :lW'>|/]-&qX+ZmΨPjV>r xL܅ %C{ F{/!ku4GǗZp/,*$A[$Q([KK‚i 䴙.endstream endobj 42 0 obj << /Type /Page /Contents 43 0 R /Resources 41 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 41 0 obj << /Font << /F53 27 0 R /F8 12 0 R /F43 15 0 R >> /ProcSet [ /PDF /Text ] >> endobj 44 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 39 0 obj << /Length1 871 /Length2 2991 /Length3 532 /Length 3613 /Filter /FlateDecode >> stream xRy@RW'Iƀx0u#y@BF/Px<;B`?=bpa ?RA|  y`S a!'h@[GfnG B@<`ؿS/ƐFyhc = DAO rCqw 8kI 7`OFi'8mv䕔7<-B{=4! `c#JH"/sJFADY]vs!h` oV "_P?ǥ S+#UEʹŢ@C=@ (=z pDi{h`2>8ӘPy4tI^ǛaVOpuztyqT<yyA7k-k/_ m3 ގ]lm\Q7z^yáYzrk! Uyh۫u BV\Wnd2$3 8(k]SO|׌hnPSULPUX)2VR7ؼ,2 7>s[Ly'Oamce7z{RA_VF 8ZlgP[=|樚Sa|w8]7p83Q'evO|YHXqgh$(Of/ !+& :hav ~KW!=>.MZRpSW9Tms'T|y-NOB>i:Zx%HdKi9@w:Ȗաl1tv/X"EҒ-rYmIfw K(kljQ]5sˬ'^U)r҃}vvp[+*ZckPd>d!i _Jyf'ی\'[_tڐ@,l(>p|zE9׫Pqܲ5SŸtaX3F'\WM]K;tRYEW{l_!*8?UWfCiJiň.F,CexNS  #)\F8޶|C-KMl̟sfGu^J> fWϳhSe#1' Nj珓~" #߻⼐Cq݊)ri৷aལ|w^D@@Tde5}~d֌/%kgɯ~K.K9ѶKx.QyQ:fG*UM%g`u6| 2hKWǶ=4XQ_sI UbUʫBi?b }?OKBz.FC_Gjx_?t&HՎnߚHvv[ qR_z37}>O-͵ K|8ƴb=^#xgawZƒ* ADwmNjH/ u \Q&W}<=NKTR!! hțq qo¨ȓESH)斅={+;4q:h>v`<հ}O[PRƥ?·t-%jC f / 9VQJ ƣ qrY\gS.(p{ёgG ,Hdqp93Zp(oqzY$[m%O^ JIm|L>d4-c)4Ts*)WN{}ƫ|"^r}zEJ_`ȠwJp/ȆoH+R! _4'0nx? Lendstream endobj 40 0 obj << /Type /Font /Subtype /Type1 /Encoding 44 0 R /FirstChar 51 /LastChar 120 /Widths 45 0 R /BaseFont /LYUBBD+CMBX10 /FontDescriptor 38 0 R >> endobj 38 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /LYUBBD+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 /FontBBox [-301 -250 1164 946] /Flags 4 /CharSet (/three/E/a/e/l/m/p/x) /FontFile 39 0 R >> endobj 45 0 obj [575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 756 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 0 0 0 527 0 0 0 0 0 0 319 958 0 0 639 0 0 0 0 0 0 0 607 ] endobj 46 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/dieresis/visiblespace 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/dieresis 197/.notdef] >> endobj 26 0 obj << /Length1 1527 /Length2 8384 /Length3 532 /Length 9305 /Filter /FlateDecode >> stream xe\۶qwݵ5@RB)KqR/'ksVxI>1x}5%m V@9;;7@ZUG %AO/ Z 2@0@ ps~idg`f+H BA֖UKw{  }8NNvn@'І`vX@yRt%xϒ'3`&3fbpA`Հ0/7lgr9''5K_Z|;vpB ?C2 ysU d-lpKɁ6 wk{; tOPSJSY%]埬Eܿ(`/7,QLbr ,PK ?rz0Üw'[㯉q8],@g'_KR[yaoi -+N{{oI 6woI B~ N3r3nഅx@ 0s ?"``]a܀8uo'p:4" 7 ]=`I7" lj&Gۧ ZA-6 ayxaQ3aqsiu?Vv  ?VFإtau! +;lxFX]?r9xyx!.uze`Ko {n~e^ ö {Zc,CE:5L"K5ūut`,&;*ܕe!zxY{k|ܯ=OLߖg>.4!Ǹm?NէJ r5dtQR{d4t eKw-yꅗ:̺ri +@{% TbӤxx&;Ъj)*'2jyzkjSna ݊3 ꔰ729l-c٦rUQ*OP55Nu46zWe.dzNpio÷K"u?F:g)~;i? )#֌)K6مP2|r_ӕ$sTzۡwbN+q-9b܋Mofp % vrA%q4,]>Z1<*-\>1@'딵#8)v \K'$D3vt&qxT,ܽŻyS)#d*X@~-n ` A_`4cw9=ST#EP&1\b+ތ%~7e_"Y9cݩL2J m+z0F{f{]8)lP)) ]㌲]hi!m)Zߔ|6,<Չr~%Kv lS;Э?XGx w77Rk-GiUruL(PK8yxw89E=m0*c(x;Rd̀8ee麾zZ>qqbYm)_oiQjng/G[DPȞ1J,2K>_بz09B\ D $Z^H)q Wa{wn}=ML ҳw 34aN!z%9L6jxMǯqWig=dSPjyQ$BťІ$$zXkga5_e NbH&e+]H؟N"fXCx'fA^i({[ؙUXKg!Ih*""RK_}3/"ib[r73M̻ :ojbg^,, 6 L%ҵg_&# _?XҦG'!ge%X-[ ]邶>&%} &/ K h4[f0l/ 21J^ro)ET]wsdr cs8hq3WdZܢN>#Tޠϕ_#/3Jbր.8re2[$僓1]/ÞSmd)h:ًh4&[7Z( Pȁ1 TuHhҰ<+K2DNyc՘a톊MBNB5jAܠ7/ 褯mvgB;9&^%vO$xhlUH r]ڛaA@NcW%cp^TedO2lv5T#XJ90}@d98 z! y{8b$.\\r|Kɧv\xP F2ocOd%%vuN},rqjI+v>YShRUp8~JUBĶ4q|fvGHZZ{}$[&+_S̶cӋ6 j~$rk f}46(>Vt> %⌎h#s$„YC&+LpMWPcؾz-#L$e}CD^CqqLj=IW ۭ>PAfM G^ KNki']box򤢽Hh5c&-ho<}ЎZ9:\Ws!0&ԻVP[9T X9p˰h8⒢1էҊ=9/}*zk|Ӯo*X+/6܃I[nx|w/NnR:!Ub ֠G =-XkkiQ= t #j3(A?뭕|o;?)'%%\ 3ԗ-w{S,i&SfTKg~VzG4-1Y:*4]~te Uh/g]~U:q݇:n-G]EY:&ڷZSMF򋙩wf4 3\Ƃ Ia%~gn1ۑz@|:!0'e;fS,k>Gţ\:D`[6z@nV9×!+gXoy]WWNe-y+rP>9b',ׂezoC wܖ;_mevJj(I3,U쒒F5ucn_bր rpŭ *J*tO!Wo‰5 FVv=hQi6^=Rs{hv=Uad Jk^2OM!L sQx0 f"T7GR4~`j}1ܘQZކB:$"ZT)uϰl= ʎ%LE6_(ה dqu#Y^*E{!U&<ƽVl" lceMqfs1^\4|VSH+*E9s@i,]2N|5|b@Y!yH2)!T{np ue=W7}Y7Qo=ܘ{ PR6 <PkRN/o)Y9di/xѨj/cV 97e:N#-PQN̐/N%0724} I^̯;J`7w1݋j =I2d%4f5;2ɚLɒYDՋ'3xXu8frG2ֆ_8u-Il*>n o]\3!_Xp߱KM>ݧ=tECً gRUzd<5ֆQ>y2TZ 4'l)`5jttXl4˗bvy9 M[vҠg,dѢUFHȥxHp Ʃbja}; ϭ4҆ƭXGbP}ƋlxQ#1 <ERD>+TGG>Ə_$ oV+Q  R$?XiM5;gJsFYN=  INʄ!71[~"LGZ #-52n:!~^"T"v|>ua+:cW!.cC|ɿ#^͛R&&UG?5]4,oJ$:GQR)fx .';t^sM6_y+V:v)(dqY_|( -ղᵝoPF}KR\Zp"퍈Þ @o!>6!fMVEUK$lD Z/+v"umjN _{X8*u)ۍ?9My&}S߂@їRǫ'H=AܳQb/Р_MS_}-ƸA>Ǯ@qӤʍIL$cjyCK^p!+\+?(~ 2~6%1r2dZƷ~[KLJꪬTz%r ie'& d!~3}T3;ڤHcc> ǯ!p xiG}\IUCso%E*>O,XF&sq:V F$W0FeX7 ]Cx+9q.sZ?c,>0.OnvY?~s+ b@er'fj=8ĵ* 2@RI<-4ZDQEe8F\,ԧXM E7W>CO/|L\&=1S u:v yFҪ(6(@ԖB}޴ط-&',sWw!ۙ48r1DZƧ(*_XvJ,sV0Yva&|GPj YVDZR4 mxXjtb2s~},vG/h41F$QS22)૫׎Lodz3Sc LHټuGg6!,ny;}v懴^yfT|;r`z^mM2a:ēϬ '{uɝǫܤ<޸\|9Ip\ ?܃Z-??!$'Up1 +\>Yahu;t丿FLm܏`0&Ԣι>:|esys1Hw`l-A\蓈ryMrl!9AӺf mA_5uy(THpBpGloCzR2x)Y4ӊHA17t@U:>5%cuˈ9vsG>YA~;Y&}qU*W(2c-}vs<ྍקq,j/G6~ wl/|34@J@uKl`h`hAfnlkh4JpO 7R6_r RtxiiSbV)_c~IRֶձ^O{h@ں.ńn i'|{z‚KqaɞRJs9ͬСf ϩ;c]nI^bvpJ'\D0qk /3qg]y{ER_lVՈ@J+,g9©J.IXeֵhyAF"t7L$'wc.M |rm ۻ F}ã/f+T)rbz|Le5TggYZ ܂csRw` ;xt[PIHp\fN^f܀ԕ9[r-Y6K?chAJ`7 Or#EӧC)V)֍m+R[wH$(]vC?`d؏óKM)o;1=nO ^g^ԺxWv-Í4;0Q:`{hYԫITv>͡X*5^J,' Y=7gR=Js /M RsBOö'–:N{.2y.c}/E{<7rzl$;e1MkGlq~0'X;-%쌚endstream endobj 27 0 obj << /Type /Font /Subtype /Type1 /Encoding 46 0 R /FirstChar 40 /LastChar 126 /Widths 47 0 R /BaseFont /YQBQKG+CMTT10 /FontDescriptor 25 0 R >> endobj 25 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /YQBQKG+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-4 -235 731 800] /Flags 4 /CharSet (/parenleft/parenright/plus/comma/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/equal/C/E/R/S/W/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/w/y/asciitilde) /FontFile 26 0 R >> endobj 47 0 obj [525 525 0 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 0 0 525 0 0 0 0 0 525 0 525 0 0 0 0 0 0 0 0 0 0 0 0 525 525 0 0 0 525 0 0 0 525 0 525 0 0 0 525 525 525 525 525 525 525 525 525 0 0 525 525 525 525 525 0 525 525 525 525 525 525 0 525 0 0 0 0 525 ] endobj 23 0 obj << /Length1 880 /Length2 2253 /Length3 532 /Length 2872 /Filter /FlateDecode >> stream xgXSiA+M MP*)%( CBB^ D:" EEpa)KGfƙu>~gO=) 83hH& p @ aW 0d>jpuu8Kwa\UCIYCE")T+ ;躃TC04WНQ!d,*D"` X )@pGgЅ@@wΓd@73NR=P,@đID_!P$ d7~,nH'{SN Avi 0#@*Kop2om0DVBo&!] аC #cl{P}%缀!hVew4O͘`08#C̀%$A* a\C~p@> *4F I'S!TVdk*0J&ת w ]DP/4%E2R@)JB}߇@}UyE8#SIPS{ D0s׊S wABXp9=rdUs_#gMfb&ro+mRqONyie⑐۔TzT3IFyf޷o涥/?˺ o5>*bUݒfcJDE^VMxƛo"9N9.ຬ6Lrm'FČ3RlK8ۏ݃Wce>96Q~-ke!\hmEyԘ+bH(}d\?2g@h秨 =K qɦ1V26|cגꠔc 3nyeQf^ '#Ͽih0" 횛oͻ5t/JsUA"/qc6 |*>o*^ %y/,DGYEQ=- *Fo]4]zB}`.FsYu) H{Bش][¡mOƻa8<$g`v5~?+Ro=Φq7Px#r~9&atioˬmG6Z87\Ǡu^VUuleĂ+Sl &n%mF$&bZ 4!3߰Lï;XbLe#DbglSG7Yby4{R8埗u?*3Ouw}vqGcy2=vM]ՍO+wx7CEIwuiWecc66C( v"\tzzv($$m!L@N[mA_tY,~4<~1{${uVDĉ8|%L:=[3K:^F]ij9ȇ ո >JQK\|&~ uUu~$l-SȄ*6{eڋ RIuM;8sl9W +'czH´b[BȂzRhL*7^== l?WxYv艁ψII| qsw6n;~LibN,^k\@DiEL<}(R0]P4L^"F1LL%~#$SEG)R8 .yBZzkuMjPqYܮwRPf7JgϠMMtA /*މ1Yh ճt=m^d pt/6_u\lj: (V*aufٱE*'$jA-!9|kJ/92>#%Q ^PkGrqٶ*,;|Q0qsp.旜6]WϜvHSDαa3*3.-\NbX?;G|eQ쳪7I\m—^㴕v0g͆u J=Ĩ'~Sd$JKP>b8Ħ*% ? OA FvP@Ϗendstream endobj 24 0 obj << /Type /Font /Subtype /Type1 /Encoding 44 0 R /FirstChar 49 /LastChar 120 /Widths 48 0 R /BaseFont /DBWKXU+CMBX12 /FontDescriptor 22 0 R >> endobj 22 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /DBWKXU+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 /FontBBox [-53 -251 1139 750] /Flags 4 /CharSet (/one/two/E/a/e/l/m/p/x) /FontFile 23 0 R >> endobj 48 0 obj [563 563 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 738 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 547 0 0 0 513 0 0 0 0 0 0 313 938 0 0 625 0 0 0 0 0 0 0 594 ] endobj 20 0 obj << /Length1 1515 /Length2 7640 /Length3 532 /Length 8575 /Filter /FlateDecode >> stream xe\mAfIi!aAAJ iS$=s?|ǹs1,ul`V0(O eaQ,0%$ȹ|,`S`+H ;X[B{2% v!xr@/\: WdÃqF@vP\_T0߲HS6IvҢ ؀lq0d- SiWEX:9@srvC PC4@6nN98XA ߲SO%6ٽ*>SQga5mEy9|&'///2﷗QN j q"w0En$ |P'䉴 OlapܿU@tq!@6VF@b G- (d[{@KWd\XoYd[AҊ32$B,]+7-0(BGxBFAD -~OM Jr=ad #upA #(C"ȴ(2^7!Qb [&dD@H  ҃, u~#r .Du DNDp6<~#?(^vp@8@l>0On/ \W 8}HUxyEy>npGD^ͶȻY~YKSK0 0I|C|h:7D@?F05IW4a:@>CI95H;10&vV#r̻al̾Nlر&'p4'X./ݖ^ @(_MPmoϪ;7X?i 1h ,Ze Q ͅMVxK* cdSkK'W|^p)٫S9 /FF)Қ`QtaQ 5tZػ\6L}xG?;,AőW75r!M6HktXlW_)ii,%ca ŗ+"}’:J,6=瀯jhggܢD:E{O;׬bIu}ۻ(-S(KsE0=0i.V`/{9'8%G1 T4XIhh|}'<&E9D:|%N-jf ĞZքČCRM'g0Ǥ?\c]#BUyܕMO[/FZXۀͅU~4Bkؗ~eI㫮6t.FK"oSEKo.Y&.'Û"N $iMy>F ;^:ˬ2^k %ԓ;4Tf_Xvw fs|zA.$wgߘenM9jZn<[yqTḛM)jFQn2n=m ~Zȶ 9٘5 q}MZK9 .􈨻 (Wi?{9;i1 x&~*34Z$ ;jRPq7fV`cjDaZFP,íD:RƠҺюwgүEQ3Jm\ eN},Q~~Q--[- j707_B;* FEF|k{_a͘.>ra?+$۸.0y G̾#[}ӂal@buR/ r#~䲉q-z'NvݍN:"nGUaKiR@ߤC֖.Þ/u+S|3p .j+&oNAimչF5{CB?tT`XmꛢGE/#^:C?oRN|ۇ]֯#a>ͭ{ `|4,e[?$%QVaWv1a`9LԸt8tjm($lx VxHc! 9iU(Fhw*9zN(AZ]=yu.:r_Q M+1cݥV$Zb/Rk޿ϊ&IWXofwUS`̀&Ku ǭiݭ׈a_%dրǔfgÕAI8OaQFw .UFK+:OZf [ctV>2QUWu}bJTj倃 U[ gtYp'B[Iy 4MzçŐ&;  =ޗSi(?;&NPhymxj7LMu7tm"G^bZf?babboUj|$^9Z?䝽VDL]};nnƱԹ̺&b=׺כ^\3 3i;M=o1\RkGޥ80t,?&~ICR.5ܪ /dʆͮ>ps߶1zLR :񻴵KsK/Ӊ&|`=m|"0dՐ35ȌJO]l|+݃?Φ0>P%)~zye D9Hf}ܿ+^c ]U͇ vRY#YBJF:-'D N7t~ vʝK*;Q,rOx'S. ؞[G"ks`JASh­Im,;fPbܡTsV۠@y .STisJs﨑 *.2޿DpO+J3s~3yُUg׈o⴨?FR[i! tRE59Zc8u$f#\ i34+/B>zIF3o5dy<^e!x4ٗ+Ԉc-.ʡmqZyc$mP$Y#}6ǚ~qmFۧ%u;\ ڴl%b5/g]%H<1?9ÿ1pN1O/4{(4.TǔPtV9("̢S"Ȱټ mUA}_:(^K,QOI-ވѬZآ/"Lv5Q+Rn5񮑌2VFo 94x_,i=!%v'pX l/aA?Q{hh0%0R0OL_v7+ytז+FU~+CYYy/Xdhn`zі}s"ްU\yfXCn\eX}۪XÀÔ~ .tE߸þI9WqS#O5EygYLV)x;F{s&'>o8&04Wլ.*r`zJ#5lJⴉ W ;㈻[Ct/7PC7{RxYhU D{+,W9(fZ. `$!ۖWlg0KDy ǬEjꚱXs֌l4\jګcAmQLM> \C‹7tyi98N[,28'<aPN/VGguϰ r#&Sa"J{"e U [mhe_RSP)扦?7 hs > lE" Vޭ,0&ӝ1Mv^j@?.zRօ;<_c.qfB2t/7/),/]w1jK.qBh!‘Bb$6V:c1NUYGwx5G۵dL 6])`6Xie[!#ͲR(Z($ߔ_hXƝ/^i6-i} <龝P̝Qs@W.lUBﯹbW?pZޮ{1b7﷥Y"3= eb,%| 8}'GsPFe .ͱNEm dW="j,}sSA]jǃpT1qveY{z0*ZIPJx}o&^G秇qRp;«󑪗}6d߫?|cn擣4`rx}5?S";"Uu${O Ξsv- 6WysePug˕(cw[xʽ_#ߣͅ]YԨ.֕b SoCsj/M%# G햼׬/:qjxx?X9l\GČw3QoHym{:d?_1ΛI9|,}<.3v1Rݛh,!!7Du&OEqtWD,^Fd ]MK] ⠢#އwa-IL6 8+-D~NO}G7w+bu̔_Qk_6Av]x8?qfP8 s.ηR"Xce/'ɪ7{YEw9ʶmj wb:%|z.ma(dk{>7-9޾/=yw \Q+TfF#Vm^^)IMY3>3b O3h &8p]+~DL&m}J8_]t zw5Աc[̽ҥ2Yo,?Qn{Q86Y-{H<1JY_3E,n#/[xt]1Fbt'u:# N )$[?iW#"F7m2!F$NOz|G/˚zƪI?0/eݸwVTivH1װ)ދVC"Nqŕ#~3,hb^ڽ$:.WmOe'xA͜R_!:PAUSky?M/_&^K.ӻ0~[frwYߒ55jtƳ)t|Kǟ<8zJlWsJ-#mGFGTڰKҼ[p*$|dp{=Rn7;걨3~;R9qU< WYgɦV:wl'SXA͆ jn 5Tc7| }0},bnM06VSۻp|l΂z*l##r)yARǃBU  CE 5zz&*4 ;vhf` *ag D8n̤37,6Qw}j6!~%#F}Oᯭu ZLXj_qzgb~g-VuѻYn]:s75/3oX`t%:/Xy+>;x#rRܸJZoqLUIt\:Kf:Qz.ZLg91KY04qrtUkym(:~.pT=Vѩ}}iZ'RW]N޹ m0IլUY/?O"sIfiKSqL~NWӞ)k}!v,J`02v+]H'$CcҠ{W^uQ(H}ɹ,!t0I`񼶙eB|wЙk?Z0&𐰓$`PJӾ~I'?#`NpG*endstream endobj 21 0 obj << /Type /Font /Subtype /Type1 /Encoding 46 0 R /FirstChar 34 /LastChar 126 /Widths 49 0 R /BaseFont /EWJHGT+CMSLTT10 /FontDescriptor 19 0 R >> endobj 19 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /EWJHGT+CMSLTT10 /ItalicAngle -9 /StemV 69 /XHeight 431 /FontBBox [-20 -233 617 696] /Flags 4 /CharSet (/quotedbl/dollar/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/eight/less/equal/greater/E/L/R/T/U/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/w/y/asciitilde) /FontFile 20 0 R >> endobj 49 0 obj [525 0 525 0 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 525 0 0 0 525 525 525 0 0 0 0 0 0 525 0 0 0 0 0 0 525 0 0 0 0 0 525 0 525 525 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 0 0 525 525 525 525 525 0 525 525 525 525 525 525 0 525 0 0 0 0 525 ] endobj 50 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 17 0 obj << /Length1 1151 /Length2 6470 /Length3 532 /Length 7220 /Filter /FlateDecode >> stream xe\ms$ABBbVCsbD[ECi;%$g?{i|\籎Yk]4b`DsbJr  C^1uaNA H@( 1{xx xp{7 (WP€JNV sS[: qrcT8B.0C͝fK( /Or0 8_a\ S@6&p bW?Ťw~o>3 1ǚ Z'yK})Fer|\8T,Ķ]nXBuXCKF͖`}fV X)`Q;xV1e4&2m,`֣  6!KczԜka鳶 %DF /ڻ§Sjk\1|Ajêm^X>l*f6;7|a5SFϔYY$pi f@X6XU^™9557&ކx=mLqsm2-$}ьL)oZr6B|=P_|ezlU~|u- 4+ەpiY䋹B-$nwtodz!2ldj5EZvZIR`>׺*ٲKvL5+q8Ixƶ8,PL9Qi/ҡgSqЕs3{scbo!^A(9쩒oWwu:xk:B(3DY2ḍZJ kޅ-qH!/%5)>zٴυ ';Fƨd }ƚx]nt-K#;k"7\K`9H& #3śѦ|QPV!;lK| /쩨H(>~ )͵a;qL &VݾEvUo̝NHeS*0<.ۮjDБIWx正F)Y?|qG 7V__ψ=q64ݝ9#$dAh/3yL?s>}>̎iV*^p$y#c}|ZK@fX$lYQ4!6:o;Kbג>9#q>e ES.{~fq",'^][V94'Qj'D2Z:"msШ#5@N2ƣ鎝7l :7*" 䨁JzVSF]sYw{?5ȃV4)2hK6|7#yęӢ;k͇B{@*蓾W7uO쳔1}<Dʢ֥3߰GG ~rґxhM)IBnYą ylN''lURuL /x쨘}3D`Tx"ԬW63Y:^(}K^UӒ32қCΐ Bz3Gɐwdh^%-nW,pↁV:M_FY Y{*>^CUިS\WK2M/tqgbBJ)]dx+ϙ Ff?cI⮯esmB b;Fn뎎j%/74 zGqQӉJ/!cWd/Rr2SAj,#v@8!}! +0;r["zcMS)#Fi&EJ3Ρ^W^+xrPqр\չ=X~X= kqұWjQ}Wx#]W )~nWFdfG6ROE]2!$m]0EÂzK?m'f?WcyB F#z6bGgޠ:E^6hh9;$Z_A~'j#fmk( =CbP{:V|ʥo7A\`u{&v|&Ojƭ4 \ꔈK~Va]I*dCoZ ]nzR\׿lm[_S .Xx&f£|VԮ=>VYY l6uாnr3 >8_'Ѕ ;֡`g`Ԅt5w)1RIi.2GC*{*t!T|.-,ߌBE~'pej)lN4iKiWed'!26ř Yiu u}Se}5)ȧdeة,jU 4k+/PCRjЭ(TKD?'5$۫׮- k1l)L~b[r@*,}>v9Z Fp]JfC7#B:\ZȀ5Kc<ҳO.(-Pabp;J3RֽfXasb?ScG?3p3 v>U)eJ;0 mb11hY F#Jgy]{ɟ-iY6_me4 miP5iifh0R*<_*AKEnѫϗ\,n1ל ՊUv1FkfT?WxIeQ}؝ӛȂ5r}$]TQڄhv۽uɶW1?@~V)*|>KNp9Ŏp鯐vXl̴&oF{ilxI3D[Qsh/ّ𾆘nexֿ ꤈Aܡdpn+\xֲ E㉥@'-<1KyQCtùUHn'*4pvetf'~ H-KXn>u/y'P3CZ߼D4]3Tn`~JtU$E sbY}R'rzcbTy&"Cp1ͭ(@Dv-~R'+{ŀʿL&0BSTB2aұ)bu]jvd=avZ-Ψp03R!TT,_NvЧ.W{z.R۞^1$-١{ZA95[EV qCԇ 3M>b͖f4Nu9-f{0ZͰUˍʶyѤqAO [Z_ `PAQg l< Ut>w\]Q\=`jq&\R\< 64P4ci G$pmC'<*SI~qⷁ [5>GD@~PYqJ.Sa8ʻk3Tw (}Z gxSo؆MRh|vLP(:Q!A$baqQ{2==v̸f HL?z_)MLZE;Ð#YWZ4 EhjR 9[AqR]{Ox*bĝ=ʡc FwLCcлayb^VL3_7Lqnh1#U(93ns1!W:b*XXlix l QOHKj3,ߟC A_w Q Kw$O"7t?{':zy l"Zu(b_ߔf"{fdS\C˟ɞ5(OwE:p*-cΤ7xVlQ ]E$k8>"`l3 "#jXCrr[Z$Z;쳋:6-C ijNn$)|:"6=GtGɑ+mb΢{0[Ě-bN^S2,:ʺζ7 @luMKf,'qr@#e|L6tT"|2p3aba*2'9AEw2ː~KViBmj3/N%ƼaB 5JKbN-Nfbo28l;`a kལZ*x e}0t~nrV>@Iiai9OkFsJ1Mzl!%0qQNY6ciѦhV:\ItQK(/P:G8\s<ɷ5.p=M<(7Xv{3LJ%[X,HjuE<yT-:v>2c-y5($j1ddIHQ6n:bo @`T5WTKә}ẹTڹ uJ :tPfiBxs_IF$aGt4*ںQ_";$ w A<=)z)c`EhiGO4 CHAT˫bX_!}aŎb&A~]+ 0"vZfoendstream endobj 18 0 obj << /Type /Font /Subtype /Type1 /Encoding 50 0 R /FirstChar 45 /LastChar 121 /Widths 51 0 R /BaseFont /JUFAKZ+CMTI10 /FontDescriptor 16 0 R >> endobj 16 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /JUFAKZ+CMTI10 /ItalicAngle -14 /StemV 68 /XHeight 431 /FontBBox [-163 -250 1146 969] /Flags 4 /CharSet (/hyphen/two/four/eight/A/M/P/S/U/a/d/e/f/g/i/l/m/n/o/p/r/s/t/u/v/y) /FontFile 17 0 R >> endobj 51 0 obj [358 0 0 0 0 511 0 511 0 0 0 511 0 0 0 0 0 0 0 0 743 0 0 0 0 0 0 0 0 0 0 0 897 0 0 678 0 0 562 0 743 0 0 0 0 0 0 0 0 0 0 0 511 0 0 511 460 307 460 0 307 0 0 256 818 562 511 511 0 422 409 332 537 460 0 0 486 ] endobj 14 0 obj << /Length1 836 /Length2 1560 /Length3 532 /Length 2157 /Filter /FlateDecode >> stream xRk8*DA%YH&3qY8iPИ0L%DB9*r 1ց"&۩khWs_统~Qic2!"E 0%ڂTTL9Kc1\8<Ma_Z0<t I0f@HdjPtEA\`LWn!?Q5` Pi.yҘ0#  R|!-RYL:B0K$t08G[+)Of?,/ q qS@_̑ *k%ic'0_J4?"-и/LV ap $+k?'ڴ!Ә\;dWث  w@p|p7H8 4& @c^,leP Ծ@P @s y@=JW01aDJSp8@W<{&̓,m V)<brW7PWA! SpԊ3y!jkL<+zj7%_Ւ6P8_!I *P X :.ֻ$?.8qG Wi6l\nœkr_z2~ifv˝"G/:3;oNcEiElNJ\(,;RJ4˺tlVu<)`$R-O+(y^{]塍 }axIeO0U݌:WL}chP޶`yz7/;O"/?j#}wJ\ga!GS=6"9Y[]^z"<_︂by9v69Ƥj~rQc8!>nRX@m %_~\ii|oq4~Z 6Kv3Z0Xg=1bZ&EfLyb1i#k̥4 tSƳń~8fh1"W9S3tr;0RB `fMGID(y:jo틱j1DexD刔fP_- $ҥ㪗K,߯$rju1  k& :~YczdRws&EDٲeFާ>)Au-β>=֊Mﭓd#"OwuFκ]Z\zgM}9Hgwcwk $DM,&*)HgNN튀 )ƺ b낳 ÎM,85}PПRo譺e9se'i qtWlo ![TMN#Kny%-n>܈qϕ-vTIxdIR $>JR'abrq5j`2R[jbwM5<[4O\k~{hN-']IWkZ%o 7 NZv=b/՝7k&}IwrJ'U-bk<Лh0j.ñ$dDžp,<rbaG^|Rm?7Ʒ/TPIʶ:DpY 2P|Bendstream endobj 15 0 obj << /Type /Font /Subtype /Type1 /Encoding 44 0 R /FirstChar 101 /LastChar 121 /Widths 52 0 R /BaseFont /LEKMNO+CMSS10 /FontDescriptor 13 0 R >> endobj 13 0 obj << /Ascent 694 /CapHeight 694 /Descent -194 /FontName /LEKMNO+CMSS10 /ItalicAngle 0 /StemV 78 /XHeight 444 /FontBBox [-61 -250 999 759] /Flags 4 /CharSet (/e/r/s/u/v/y) /FontFile 14 0 R >> endobj 52 0 obj [444 0 0 0 0 0 0 0 0 0 0 0 0 342 383 0 517 461 0 0 461 ] endobj 11 0 obj << /Length1 1631 /Length2 10865 /Length3 532 /Length 11815 /Filter /FlateDecode >> stream xeT\֨ ݥqwwwww-[p ww r|;9=5kSV-4ŭ@@;3; @RY &HM- ہ݁v~~ '%́H llt$ĝ`;Ksg- R ph݀`O ";;`sFdGIw<`7_`FdUAVB\2*NQװN9xeߩ)<{TR`wMhfni 6wt+to H#.3ט/fÐlC!֒vY98y`"7`l!¬, w'k9bF.`#OG} sX-ANN"V[[d.Y X}`П? sC,ܽsCwGge@ -C܀A ?6 `u[:L⁔C -lBAdi?dj!6du?Y]?lNRAl jV!"dBBB_r !VNraXB/X+׿b 9bB qXPjtaIƩ̀q zZY\&1"ِK(m:oB:Z󂩽Sx|הԶTagJ 6q_ܩD|Ꮦ^cDoGnOg0;ˎzAP<E4Xx@sW!|R%A <0+iDKæLe7=Ԙk Xu1:Vݐ4 nk"yѢ|DHd?sHW6*Ҩxo==;rj;E> V=9i6vfZi;D͵j]hGJIp_{;Ӑh)G$9 b$gR\w-PI;J-{lz6,NKm1вx3B.b˫ozrxd2Q-$~sm[IWrݿgx,C>a,5pDY퇍(֍`a ?1Ó꾏M몛֖EmYDh'& :!Fi߈\^Wfxp >*deb>q2(!f(_p$$!1w < T4}2GD"Eg8疄-o,!4NJ  ]TXx#W}ՙ`AU!@L\N!sn',iZY5Ԇ˙1\kGDpeᕉzAqif68Y1_|, _W4?`9SߏV6'U> %+,2Xj .+ULyHt7_cwI5_ ?i`kk.>AUYmz;Zߩrq[CuOn Oy2ʴ*$S<  ߐJeam0rc-ѿ/nNIᑊOh,NuZg~Aԓ{qP ;Ih2ВNύq2u[܁Q9}x#v ]'X7I#+_nL緀]UL}sC2vS4QȮo4L-4/*f rd񏄕JDCJՑcX_X;Or;p+nJK^&PR/Q)#̈|gڰ rn|y^ 0$v Y0`–H-\ ymڍ}¦/mzH} fj]S)"(j[oڏzo$Sx n>}(\.pwW=[шv{6v򘤲Ǝ\ k;a@[[r`ӕCOV^Xܷl/n8=;4vKѥϼ oǘfW3b,;}%ͷ>< ]iL6BHY:(s)XF!U25 k ۅX{u,ʞII=cg$A%@RZ7tˡHЀ3%b\ q#Tܙo)?tpU,2R6ba/r$׮5tR.2Yy>;j!ʮv}:j?9 al5>Âē0SLt ^E%A1wI"ωР"~/ٰa+&WwH)M}7Em}1õcBƹ+yno+-BgǑ%I_yO=X?$PGҼRǑl9 ս* pNnZjpx}mO8ҕo&,2Ȓ&ywT:K&,MmM -(3epf&9_#; a3W3<)@>mv7: 3jfas:Wˡr(\1\;=Ϛ(Y:{ɋSa697_<,ji]Ӟt6~"`9e 2{q;ef*qwWXϭ_زTa_%CPs1;Ľ;L`CGm<34@I牃va(XnHFt},xPҀuyFi!}8GN葘' 1̉)s]uClOd2÷/_ UտI1ne;q5k%7o _#TaqmVZ1 }*%)b8lk[|Gy0vwcsT/?S>,,"ഘ ]i.V55FcI«+,π`Mw3^wZh~> .rI5j OnwqvĬ|2RCAv$#}Es_.O?<5X|N1}i,u:V;GwޖnL!-ZB(^V2:+E'C?P'QWդȒ߄E. { sP}U7=A_w|>`wuc2иg3Ur9fqnOoX#{0+DQS#_Z1f06𗞪x!ehzCSvgrEV#+z82?sŴ9IѧB1Ta¨T/q1pqϊ64N |x9l|ID(:7BBߜ eR<),& b9yl;ٗU\Rs ߏ-A5ʅ5g" HWLi4,UF<ϞT"ֵ؄a$h"6sU³‡*Uol&]#T'[ ya|G]XhWSu]}M\˪&?hL:6ڃvH]YY^?oۛbtP;b9XZDIWx64{=ihA gٚw(vm?"$?g43NgY)C7~Lj^І:[taqђ+cՓIW6^,5[pyyH>q$?ޢCFFfĹͨߧwM nuz_N ˯CTlVjIFGyd3DS5ȣTv^$MߞHcxz0LՓW5ͅb*Q# |*pZsz;@=ąipNIkXFE{[FOգ)U6h0ZI6$3{3nɓt? hׂ(<(ו[V3MQOC4KdNuo֓j5 -kbpwbU%l1) k]c}[x5ǔo琒z'J$l/վ[}s?}XIQB;fo LP%^SӼdtd86v)L$ysI(Ԋ0483IXYݸi>TycR m>KSLCVI@FS0&~9Z247_v)c{[ħx-1RQh֝Vt\[/kj9nxB`,UTheF1]gj\|F^P-0|D*3e'y 8ێa\dBs^ [(݆NXAoaĉRյ\8㼾 L2BikB`Cվ{]6.ƯXC&kPB2"We 'b ?^_:h a"9<`ǧƎTTT'?u]ys\v|l`W6UWďuh9<*RSjL1>z_&tʹ !)tFK_h=A3W뢓x,bZݟ;K)R ʩV!9\}4+M_߿cL]Un6_}mK)Z8fǯ{_8 <5{} 2&E 7՗Vv܁`6 ðƱlkj~OVQvue ~n;>d]AZ CX2#'}m۽l<h{]ZrIfyo,h)BL\Q K3n)-~G,|t".S̼}.kmC#a8lrA17$bU) NwZJؓ)0Sߋnӷ_R1qhMJ\LJ\%"¶ʜ'SY6f{AOS[ BhDkQdQpJ8]BIͭmouoԯSj 3YnR@3"SdX#)6=bN\Rew;SS{^ǶγM>M&܊JN]}H ќ0 cXej0Ifl=Tв19~NM?b+0UQuɱ˽=i5vq8dir{󺝁nDM?@7#֙)ZnЖF=EXaI@t J5Gx= u&mL[̓XB̮;cKۨ1_gO},?j $ \l\T^X /g~#CPo, *&L*mu U}F6i$!-!lo:uzTGie^|vzusܷd_[.gY8ˈǩ^ܺ꯾!p' tbCH=ֺ B#QK,G닢vetl&~ϡx[a17Z ='ƿ>a :"w 0o~Ԡ[^n{F+}fё'VhL5哆]<ccߧ`T h+p*v'ND4q}E"~\` cŗ%CD0xd5/Z!juA#;\CהmY.r  ?au ĥEZ~F .;0ւE)n5R; yz^g3s;aʙۤz 3]UT"F$?,R_ѹ<;ԶR 6w%ڸfQwJ<t *NcĹ5J")P1tj]# GX8i0۸( 4v/!E0;oS̷Gdt-~!d,qj=saDPGK̉IWJ4j8Mr[?!h-S1 ח" Op4nt dZ>zKLJ?K`$e;k;eYZm Kv?ʳM1`H\Xw -{j{f=#$ "[H; xAstmY#Gd7-弈7@MfJ&U]2RM~ (a2u`t)]'[ꑢ0W;Bٻuzke3-M '-q$[CC a 3Xz mـ3FʏP2RPO0k,J5ؠ@B vsSĕU^6sHؠ5:CdwMϘKmY*:y68zeX|USo3%HN{vdzaO[@ D7CFOv`q3BDUoIWf!VL{>{N>&A{C~ҩu$9yt-%O )Wi̿Bg._;vuaJ<I//ggp~8~ժrnl$46_'dJO+gx==O:,Oʸ|h8%: }2Ԋ{"Ezv"EbrA0m q-мQqCwTkWIo+Tp>oW|c+( yFhURDXOO\=Q!LИ#ѭ ܗ0^BݔSJb OZ4mhajGz¼ [L\UPM۫Tb埴h5iS]}GS&n6j ZB緰v䂉5 棢oM> endobj 10 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /VAGMSP+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-251 -250 1009 969] /Flags 4 /CharSet (/ff/fi/parenleft/parenright/comma/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/C/D/F/I/L/N/S/T/U/W/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/dieresis) /FontFile 11 0 R >> endobj 53 0 obj [583 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 389 389 0 0 278 333 278 0 500 500 500 500 500 500 500 500 500 500 278 0 0 0 0 0 0 750 0 722 764 0 653 0 0 361 0 0 625 0 750 0 0 0 0 556 722 750 0 1028 0 0 0 0 0 0 0 0 0 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 0 0 0 0 500 ] endobj 8 0 obj << /Length1 1033 /Length2 3896 /Length3 532 /Length 4603 /Filter /FlateDecode >> stream xy{?_置.:G-FR٦&Jcєy]Δ?M>MLzp)K{QedF;ZK34TKSySgë:ª7WNLQ4T6bЀ1)GMعiǐfe^J]{V]wJBOŞ~"G<ژt; hs|O/9xb3kLIHO{,`x)i'Cq2^r`3pU( \jȲ9V>8_&hel-Vۈ3=k؝wiEہ0TIZKFlGt]8w~YQ,ϓԡ~xaT:'/Bř{#!(5ެbv7\B*TTTz;oB+e)ʜ Yi na!l}&}{=WSi 'e[$22ei\gshK R~ε'LS$-46|cMW?^LU,|Q$mzz;90?4bV9_vbunZ=3XRy{oZLF~zTtS""REz7d?ܛԷ6}Zb"7Ug!\֛7 $z nW54|Xڛ_4lϣbG0l1FI>0^$OhΕقM OS;rkD7MIJs~Fz.3MJ}ʟ.In?ߛ+Y8 d7C|ۋFe5= 9Y_:B˽Wt (~P6TEǖNRSN'M͋6豈fӽ*NB#h:6,Xgsْ̓2!ANr?iZH 3pquv7J;VŪnsxX6 @ bzm2ekHNwTRS>!-2Ʒq&WŇQtEꔯBCFBh;s9Bb'N~O`/e6]~#aVZƱرbAҦFMH^}oMVEJ֙X]@PvϹzUI:->ON}߼hTTZh KWRmv*'քx*Tjb}QeĹo!u2څ긂tԦ+yѶ_K|"a _X:4QBO$qlF ,l8e yP7h.3$G]UM^nG)={EZ$>y$t'{ Z>L{[oy}dљJHI(L Wg)aU0V5 t9DTׯ*ZRawĦ/Ej'⥝Wi5$Xk((kU_:ޙaHC,%颗%HZvp$KIsC:KQ-‹S&f:iWTE[B*[X5éV'P?/zZgFj誢D22v#h7tQK}UᵉQIJh_3*r>b|4yiRL]3qJBo5VW09@oc 701^'-\NY$F`fSW(K V(lο-N;XOe2CA|nq m|^5PFNbSM>{! r! RQYj/7vPǼ [Dz`>`*\.i%M,z2"EKOMڤFKE͘bJYv f AD5/~ug݂PovJ ɽvm0QVJ]q@@:CNJ;Z yVXB0%]?հBt{帴k4cI8w~[5ƙ|c7 #:*ƚv(-vwi2aE [hB{9sb7K [֌6׀tO.d gZINJzh۫D R N579a[T7 (ia&ʃrwx/3>;~ &%mc;e_Г\8Ğ ft!S َ"ݒ>yZqO+ϭNIQPzk<|8~lLlْzܪK+r?/N%oU3W.=a6~#[]67 +oxzͫI'HO6R頥pGK[hSru܅VW͗XH ܩHRW$U(u,'ij#kcs֢Շ?}ĂW~lcbXޣR$V yCقoTkH]\ BY E}#CNJL$><rkpM$by7" cNCVK[HϷAcmʺ[a̽SAȋW=y*iWVtx_J d$LLu\ly1h8֬B Zٯu[)Oyt8aPwfs&n{Y13RjBBo wdA>|h pPjտ!pvHfҼ& E d%.]suؠP<7TUu\Psji73f}@U$gY%K}z.[e<x-#/Vw@7Aendstream endobj 9 0 obj << /Type /Font /Subtype /Type1 /Encoding 44 0 R /FirstChar 44 /LastChar 121 /Widths 54 0 R /BaseFont /JRWQBH+CMR12 /FontDescriptor 7 0 R >> endobj 7 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /JRWQBH+CMR12 /ItalicAngle 0 /StemV 65 /XHeight 431 /FontBBox [-34 -251 988 750] /Flags 4 /CharSet (/comma/zero/two/four/five/L/M/T/a/c/e/h/l/m/o/r/s/u/y) /FontFile 8 0 R >> endobj 54 0 obj [272 0 0 0 490 0 490 0 490 490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 612 897 0 0 0 0 0 0 707 0 0 0 0 0 0 0 0 0 0 0 0 490 0 435 0 435 0 0 544 0 0 0 272 816 0 490 0 0 381 386 0 544 0 0 0 517 ] endobj 5 0 obj << /Length1 1015 /Length2 3872 /Length3 532 /Length 4554 /Filter /FlateDecode >> stream xi<}dz(!*[N3cl)E0fc߲BȖ}IY"!{B Y YB\s/y=w>qF"&Bu}4xyqH\rTV z8b*%'.#'&Ա>8#P$ q(8 HLp# р D"DAP(@ 4y"q$Sɤ @b>i`I$')F\~l\PhJz8@@0L5GM@yTC4Bk#_q$O3n`*<PM׿U&b这B PR"40p,!-`> fH(  I,t $@?)! }\_!)Y7MP 078v e07$ I$)P~COP CIߐT7$7oH sjjXo?qq@DLȒ%-!naPnH${pH _CڏE&$ ÜRk"J5S 9T7Ӆ'zt݄Y_Z:bwn7vO=Y[Hg3ze/t\cΪ$$˂͗+D#7OOqjnLG"?6aHs+ |bHJ64Љ@S'9cRRFoyh;P(0YWvW~\~02W8]0t?nC,tX7ěXṴgm7S VҸZ*LC܎F OzG5q DӒ u^hOF-?ݙM %4L_ZMA{P:QYVPd _͛ _u+ܪ+̔ W;s)TWU:4aE{- 3bcXB^R%v{B\r2b}Dzs/iػ{<۞qI@Bba5RȑT_dKr Zz*{/ U# = w"DIp?3ͬ|9it],S͜A,$ƃut]{Pb>~M&Փ&.)óLT,xgɜD{J~#W@ӽg/)y?PI۰^yf^9?Uwh@G{)G},y5(x\츏,Uˮڕ:LǎyM0ޜ“w /V:v8G2:hsxLVܵ>OVUg}JzĈV2̨vשA KD=&ׂl^N4k+?WpP1Eؑb,f;~edq(/bL-[ o9#xQ 8x +^0+'b7y- .vR L8bA"u*"V ѽyV^,mȃRT7XrGEFaŲf9g=zxV1@jioXۨ^O3nlv01ȑoY(Y8CB}. h\WX'_v oJ$TeՇCW;4}.GM vzV; 4^riB6SBǁ#-f#fFhD[L!%LZ~i 7XlJQ_Vk_ARR/ @doqh#_~/6=Z2yẌ8m{pߋ39;PUލ$0|R9ٞENwZ[&X SAXBoĭE܂5@xpW@iӌ\fm9v$u&QY Zds2{chD} z:r3N? e*߱N{ƃ\{#ϲa㱚 G~}W8 p(!Aao­e ނԐ5fӣ{Jzwzɜ& b9ZrJJ>k`"gp'YM|D4bW'!룯P̴_u~,썡T90G4T#;zC;?+=1Xo*_KO =Sܹ) W? hy[xerg98M1#+7;ߊ'_rUGՙ9 ݢ L=-{1K.9f6b"Nt۾#}7ǰ:[}$!e@lɩ5xDup|̆B㮑yH:J%\̕0m[>t~_BonZ)nYӌS[,Jh~WZwuA8qىyjs}!@ʫG'}m7n9$QA։uJײd]$`r{P=7BlL?:F..Q }e=E2/3xZK$c"=&H9;䌒 gezjCؿ̤xیLle=EfBٍwoܹM5.T&w [ \z#s% h8rA>io#,cצHðȋАcu*V Ǎ}3y)1i%&ن截&eG.iN9%:Λ3" O>l>x-sHn㫫{r]{RŔ_/û_%Yj hkɒ9]PvuwFszmG9tKIu~fZǯ_$UmlkxH{jѢC[YK`mwR *G(S~棧 -~LtXeK h*QJ}ıhM=R(,'A9’ʋ@|n$G^((*D)2bhqfsճQowT[$ɋtV2;ŲʻSW}~c)֔:ïO0k?P-I`dvbr$:W=١(߇@s83D[PQόM5Ql+ ~B3ڡxLY?{Lֱl`Fn(E@4KT8S.} Tbo+n> 9p*Jj[\ҳEFm-$ۧ⽨Dȩ{Vs/8c0ȸshp,a~sw7MҹnR"w]65ZZ{A$ݢ\zXkխ>sBﳥS.4$i]0(n@RRH˜6b[}2( >Tg n-zp,k Y8VMM?yBZ&?2?Q4rr7^_.:'y:ƚ Yb^֢M6r7yO*ja_ *xάg[%> Lcji%a/ٓ:J}2ڸb VCl2 k!fHb̢ż^]][^zk1lyEs$,mzzөkA_B4w*ژ^#U㻏+8YZ 50U Z˻W.K-Tb\V(ᥔ:gW78 )>&J(1O5,3[ ?QdphysDi4z")]e *و`Qmk~-eP}F`~cn%TrAie a}Osnד !e`mgppg16^Ψ)}}N Q˩zbR({=B/t+#j>4C_wz:Xw{8m#`28BҠZ$cNsW> endobj 4 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 /FontName /LWDNRA+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 431 /FontBBox [-33 -250 945 749] /Flags 4 /CharSet (/hyphen/E/a/e/f/g/l/m/o/p/r/s/t/u/v/w/x/y) /FontFile 5 0 R >> endobj 55 0 obj [302 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 628 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 459 0 0 0 406 276 459 0 0 0 0 250 772 0 459 511 0 354 359 354 511 485 668 485 485 ] endobj 28 0 obj << /Type /Pages /Count 5 /Kids [2 0 R 30 0 R 33 0 R 36 0 R 42 0 R] >> endobj 56 0 obj << /Type /Catalog /Pages 28 0 R /PTEX.Fullbanner (This is pdfTeX, Version 3.14159-1.10b) >> endobj 57 0 obj << /Producer (pdfTeX-1.10b) /Creator (TeX) /CreationDate (D:20050324135600) >> endobj xref 0 58 0000000000 65535 f 0000002336 00000 n 0000002231 00000 n 0000000009 00000 n 0000072367 00000 n 0000067539 00000 n 0000072212 00000 n 0000067083 00000 n 0000062206 00000 n 0000066928 00000 n 0000061460 00000 n 0000049367 00000 n 0000061303 00000 n 0000049089 00000 n 0000046654 00000 n 0000048930 00000 n 0000046166 00000 n 0000038668 00000 n 0000046008 00000 n 0000037039 00000 n 0000028184 00000 n 0000036879 00000 n 0000027786 00000 n 0000024637 00000 n 0000027628 00000 n 0000023962 00000 n 0000014379 00000 n 0000023804 00000 n 0000072807 00000 n 0000004207 00000 n 0000004099 00000 n 0000002486 00000 n 0000005731 00000 n 0000005623 00000 n 0000004312 00000 n 0000007293 00000 n 0000007185 00000 n 0000005836 00000 n 0000012971 00000 n 0000009081 00000 n 0000012813 00000 n 0000008043 00000 n 0000007935 00000 n 0000007410 00000 n 0000008136 00000 n 0000013187 00000 n 0000013362 00000 n 0000024350 00000 n 0000028003 00000 n 0000037424 00000 n 0000037721 00000 n 0000046429 00000 n 0000049294 00000 n 0000061840 00000 n 0000067326 00000 n 0000072598 00000 n 0000072893 00000 n 0000073001 00000 n trailer << /Size 58 /Root 56 0 R /Info 57 0 R >> startxref 73096 %%EOF survey/inst/doc/0000755000176200001440000000000015147136377013347 5ustar liggesuserssurvey/inst/doc/multiphase.html0000644000176200001440000003653715147136362016420 0ustar liggesusers Computations for multiphase sampling

Computations for multiphase sampling

Thomas Lumley

2024-06-7

The ideas here are based on Chapter 9 of Särndal, Swensson and Wretman, which deals with two-phase sampling and the regression estimation of population totals. Here we are interested in multiphase sampling and in settings where many statistics may be computed with the same set of calibrated weights, so the priorities and notation are slightly different.

As in the book, we consider the setting where the sampling probabilities are known (or well-estimated) in advance and raking adjustments are small. When sampling probabilities \(\pi\) are grossly incorrect (eg: missing data/non-response) so that the raking adjustments are not small, we would want different computations such as those of Chang & Kott (Biometrika, 2008).

Estimation

In multiphase sampling we have a sequence of \(K\) nested subsamples, with sampling probabilities that can depend on any data at previous phases. We write \(\pi_{i,1}\), \(\pi_{i,2|1}\), \(\pi_{i,3|2}\), ... , \(\pi_{i, k|k-1}\),...,\(\pi_{i,K|K-1}\) as the sampling probabilities for observation \(i\) at each phase, and similarly for pairwise probabilities. In general, we use a \(,k|k-1\) subscript for quantities related to the \(k\)th phase of sampling and a \(,k\) subscript for quantities related to the cumulative effect of sampling from phase 1 through phase \(k\). All sums are over the population unless otherwise specified; restriction to samples is achieved with the sampling indicators \(R_{i,k}\) (and \(R_i\equiv R_{i,K}\)). We also write \[\pi^\dagger_{ij,k}=\pi^*_{ij,K}/\pi^*_{ij,k}=\prod_{\ell=k+1}^K \pi^*_{ij,\ell}\] for the forward cumulative pairwise probabilities.

The product \(\pi_i^*\equiv\pi^*_{i,K}=\pi_{i,1}\pi_{i,2|1}\pi_{i,3|2}...\pi_{i,K|K-1}\) is not in general the marginal sampling probability for observation \(i\), because each \(\pi_{k|k-1}\) can depend on data up to phase \(k-1\), so \(\pi_i^*=\pi_{i,K}^*\) is a random variable. To get the true marginal probabilities we would need to integrate out all the dependence on data measured at intermediate phases. However, it is still true that \(E[R_{i,k}/\pi_{i,k}^*]=1\), which is the key fact we need to estimate totals \[\hat T_X = \sum_i \frac{R_i}{\pi_i^*}X_i\]

It's also still true (per Särndal et al) that the variance of a total can be estimated by something very like the Horvitz-Thompson formula \[\widehat{\mathrm{var}}[\hat T_X]= \sum_{i,j} \check{X}_i\check{X}_j\check{\Delta}_{ij}\] where \(\check{X}_i=X_i/\pi_i^*\), \(\Delta_{ij}=\pi^*_{ij}=\pi_i^*\pi_j^*\), and \(\check{\Delta}_{ij}=\Delta_{ij}/\pi^*_{ij}=(1-\pi^*_{i}\pi^*_j/\pi^*_{ij})\)

In the absence of raking we could speed up computation using a recursive relationship for constructing \(\check{\Delta}\) from the weighted covariances \(\check{\Delta}_1, \check{\Delta}_{2|1},\) and so on at each phase, subscripted down to the subsample remaining at phase \(K\). This also has the advantage of simplicity. However, we can't do this precomputation with raking, and it has the disadvantage of not giving components of variance at each phase, which we like having. We do use the recursive combination for constructing \(\check{\Delta}_{k|k-1}\) in multistage designs within a single phase.

Per-phase variances

We need to use the a summation over phases. We consider an estimated total as a telescoping sum over phases \[\hat T_X-T_X= \left(\hat T_{X,1}-T_X\right)+ \left(\hat T_{X,2}-\hat T_{X,1}\right)+\cdots+\left(\hat T_{X}-\hat T_{X,K-1}\right)\] where each term is the error incurred by one phase of sampling. That is

\[\hat T_{X,1}-T_X=\sum_i \frac{R_{i,1}}{\pi^*_{i,1}}x_i- \sum_i x_i\] \[\hat T_{X,2}-\hat T_{X,1}=\sum_i \frac{R_{i,2}}{\pi^*_{i,2}}x_i- \sum_i \frac{R_{i,1}}{\pi^*_{i,1}}x_i\] and in general \[\hat T_{X,k}-\hat T_{X,k-1}=\sum_i \frac{R_{i,k}}{\pi^*_{i,k}}x_i- \sum_i \frac{R_{i,k-1}}{\pi^*_{i,k-1}}x_i\] These are all uncorrelated, because each depends on sampling only at one phase. They aren't independent, because the available data for sampling at phase \(k\) depends on all previous phases, but they do form a martingale difference sequence. I will write \(\check{x}_{i,k}\) for \(x_i/\pi^*_{i,k}\), the weighted observation at phase \(k\), so that we have \[\hat T_{X,k}-\hat T_{X,k-1}=\sum_i R_{i,k}\check{x}_{i,k}- \sum_i R_{i,k-1}\check{x}_{i,k-1}\]

The variance of this sum is thus the sum of variances \[\mathrm{var}\left[\hat T_X\right]= \mathrm{var}\left[\hat T_{X,1}-T_X\right]+ \mathrm{var}\left[\hat T_{X,2}-\hat T_{X,1}\right]+\cdots+\mathrm{var}\left[\hat T_{X}-\hat T_{X,K-1}\right]\] and each variance is (conditional on the sampling so far) of the usual Horvitz-Thompson form \[\mathrm{var}\left[\hat T_{X,k}-\hat T_{X,k-1}\right]=\sum_{i,j}R_{i,k-1}R_{j,k-1}\mathrm{cov}\left[R_{i,k|k-1},R_{j,k|k-1}\right]\check{x}_{i,k}\check{x}_{j,k}\] which could be estimated at phase \(k\) by \[\widehat{\mathrm{var}}_k\left[\hat T_{X,k}-\hat T_{X,k-1}\right]=\sum_{i,j}\frac{R_{i,k}R_{j,k}}{\pi_{ij,k|k-1}}\mathrm{cov}\left[R_{i,k|k-1},R_{j,k|k-1}\right]\check{x}_{i,k}\check{x}_{j,k}=\sum_{i,j}R_{i,k}R_{j,k}\check{\Delta}_{ij,k|k-1}\check{x}_{i,k}\check{x}_{j,k} \] That's still not enough, because we don't necessarily have \(x\) until phase \(K\), so we need to weight down to phase \(K\) \[\widehat{\mathrm{var}}_K\left[\hat T_{X,k}-\hat T_{X,k-1}\right]=\sum_{i,j}R_{i,k}R_{j,k}\frac{R_{i,K}R_{j,K}}{\pi^*_{ij,K}/\pi^*_{ij,k}}\check{\Delta}_{ij,k|k-1}\check{x}_{i,k}\check{x}_{j,k}=\sum_{i,j}\frac{R_{i,K}R_{j,K}}{\pi^\dagger_{ij,k}}\check{\Delta}_{ij,k|k-1}\check{x}_{i,k}\check{x}_{j,k}\]

Raking

Raking of phase \(k\) to phase \(k-1\) involves estimating raking adjustments \(g_{i,k|k-1}\) that satisfy calibration constraints on variables \(A_i\) available at phase \(k-1\). \[\sum_i R_{i,k}g_{i,k|k-1}\frac{1}{\pi_{i,k}^*}A_i=\sum_i R_{i,k-1}\frac{1}{\pi^*_{i,k-1}}A_i\] Let \(\Pi_A\) and \(\Pi_\bar A\) be the projections on to and orthogonal to the space spanned by \(A\) given weights \(1/\pi_{k-1}^*\) and let \(\hat x_i=\Pi_Ax_i\) and \(e_i=\Pi_\bar Ax_i\). The calibrated total estimate is \[\hat T_X=\sum_i\frac{R_ig_{i,k|k-1}}{\pi^*_i}x_i=\sum_iR_ig_{i,k|k-1}\check{x}_i=\sum_iR_ig_{i,k|k-1}\check{e}_{i,k}+\sum_i R_{i,k}g_{i,k|k-1}\check{\hat x}_{i,k}\] Applying the calibration constraints to the second term we have \[\sum_iR_ig_{i,k|k-1}\check{e}_{i,k}+\sum_i R_{i,k}g_{i,k|k-1}\check{\hat x}_{i,k}=\sum_iR_ig_{i,k|k-1}\check{e}_{i,k}+\sum_i R_{i,k-1}\check{\hat x}_{i,k-1}\] and since \(\hat x_{i,k-1}\) is not random (to first order) conditional on phase \(k-1\) the estimated variance contribution for phase \(k\) comes from just the first term and is \[\widehat{\textrm{var}}_{k|k-1}\left[\hat T_X\right]=\sum_{i,j}\frac{R_{i,K}R_{j,K}}{\pi^\dagger_{jk,K}}g_{i,k|k-1}g_{j,k|k-1}\check{e}_{i,k}\check{e}_{j,k}\check{\Delta}_{ij,k|k-1}\] with the variances of the other phases being unaffected.

survey/inst/doc/qrule.Rnw0000644000176200001440000000774514073730263015173 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/precalibrated.Rnw0000644000176200001440000000611114233634027016625 0ustar liggesusers\documentclass{article} %\VignetteIndexEntry{Pre-calibrated weights} \usepackage{Sweave} \title{Making use of pre-calibrated weights} \begin{document} \maketitle \SweaveOpts{concordance=TRUE} Public-use data sets often come with weights that have been adjusted by post-stratification, raking, or calibration. It is standard practice to ignore this fact and treat the weights as if they were sampling weights. An alternative approach is to calibrate the weights again in R. This might seem impossible: calibration needs the population totals. But we know the population totals, because the effect of calibration is precisely that the estimated population totals match the true population totals. From version 4.2, the \texttt{svydesign} function has an option \texttt{calibrate.formula} to specify (as a model formula) the variables that the weights are already calibrated on. The weights will be recalibrated using this formula, to population totals estimated from the sample. The weights will not change --- they were already calibrated --- but information will be added to the survey design object to describe the calibration constraints and standard errors of estimates will change. Consider, for example, the \texttt{apiclus1} example. This is a cluster sample of 15 school districts in California <<>>= library(survey) data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) @ The sampling weights \texttt{pw} are already calibrated to sum to the known number of schools in the population, 6194, but R does not know this: <<>>= sum(weights(dclus1)) dim(apipop) dclus1<-update(dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,dclus1) @ The standard error should be zero, because the calibration procedure ensures that the the estimated total is exactly 6194. We could use \texttt{calibrate()} on the design object <<>>= cal_dclus1<-calibrate(dclus1, formula=~1, population=sum(weights(dclus1))) svytotal(~one,cal_dclus1) @ The standard errors have changed, but the weights haven't <<>>= summary(weights(cal_dclus1)/weights(dclus1)) @ With the new option to \texttt{svydesign} we can do the same thing when the object is created <<>>= precal_dclus1<-svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc, calibrate.formula=~1) precal_dclus1<-update(precal_dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,precal_dclus1) @ Calibrating to the population size simplifies the standard error relationship between mean and total <<>>= (enroll_t<-svytotal(~enroll, dclus1)) (enroll_m<-svymean(~enroll, dclus1)) SE(enroll_m) SE(enroll_t)/6194 (cenroll_t<-svytotal(~enroll, precal_dclus1)) (cenroll_m<-svymean(~enroll, precal_dclus1)) SE(cenroll_m) SE(cenroll_t)/6194 @ Because calibration in this way changes the standard errors but not the point estimates, it's critical that you {\em only use it when the weights are in fact already calibrated}. If not, the standard errors will be wrong. In particular, it is not valid to take a subset of a data set with calibrated weights and then pretend the subset was also calibrated on the same variables. \end{document} survey/inst/doc/precalibrated.pdf0000644000176200001440000037770115147136373016656 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Length 250 >> stream concordance:precalibrated.tex:precalibrated.Rnw:1 14 1 1 2 1 0 2 1 3 0 1 2 2 1 1 2 6 0 1 1 5 0 2 1 7 0 1 2 3 1 1 2 1 0 1 1 7 0 1 2 1 1 1 2 8 0 1 2 1 1 1 3 2 0 1 1 1 2 7 0 1 2 2 1 1 2 7 0 1 1 6 0 1 1 6 0 1 1 6 0 1 2 6 0 1 1 6 0 1 1 6 0 1 1 7 0 1 2 3 1 endstream endobj 4 0 obj << /Length 1517 /Filter /FlateDecode >> stream xڝWϯ6 Qϒ_E;`-Z` mn}=(ֱ nKyk)H'/y$x*Wi$U()ծ^}b}\oi}{jުAפ;Eƴy*F4`/eA=^0~XF9 [7@5Rk1,fDtdS,ZoӸd4c~S֤Si:Ƕ,g`!d& ` Ix^4\܆NƣmW >A2'{۩ Hy"y4,@yTʴO~@F$&4th),=M'̾/ggݩ")XuTi7ݠ,U iyAt ^Yʨ5݆:@֓- ao2t*(8gg'a?796li.YtOc׸9dZ߃kk1oZ۝CE񃞅w-.65quIz}|GfkaPlc\ꚬUʨ#q$x{d- endstream endobj 14 0 obj << /Length 1032 /Filter /FlateDecode >> stream xڭVɎFWz$!|1.LJT"V[U^[6d,7 )Ih"!1}:< Q5 \@}ۻC;Un4ptna*4ߛ|X[#b3 ?ovs)Ʉsu<11q?aƲV.@;ʊz I3N5C”S Tnr1˪HMdU}S$"XIC6[ȫ_:κݵL$JaP:ȫiov0ipocS^FvWaQ˧81>dF.K7/T|ik$-CZiŔpF]XTN,t13NyD+@x6~ptP!v8?I[+0B!=5H$`76?aNZ3&Eo_o%T.55lHN*!.tQ*lrAn4ZyA4,{Bfd¯/qQi]x.m5.E\vvD7.TkK^*oΕ3Q֬sFlxY2cDe QH$ ǐ^Vh2^Y@:ʼnuS:R4S(TcME(ԨGCFrbsc`| BoJd,Ö1Ttwro;J 7w;^׽+)dz$J+HeFpwFRxˍn7m endstream endobj 17 0 obj << /Length 679 /Filter /FlateDecode >> stream xڵTKo0Wp RCTJ[[E^`" ʥ3,jU{e^vNLn4B䕮 3{f+PEӍ4 ]Ғ=b殱m 'W;үPOՓU^hdMYQ2͸}CIƕ4QA'd!,PWƔ*V;gWl ~uѪf|&8*/M zC~ _RCK#;5>|<5`eiؿq(i̽[() S@y\q qBڄB9-n$KwGHsJlzMل? EYiVLrH%.Z#yqPV vy:zp]*CQC1Q gޑՒѝ$O~ ,?) }kIۋ kh`wch4&.a/:R[<+B4RsGM.[lt^@ endstream endobj 26 0 obj << /Length1 721 /Length2 17799 /Length3 0 /Length 18402 /Filter /FlateDecode >> stream xlcpM-vNvض۶m۶m۶̙9U}uz]W߿HQΘ ( `g!#7w4w4LfFF&2#ҐE=@ ,DoG"Ecc1 $+..# Q[ R6T[{89?LmEde6F)8:p66tEV k `dn0065an6&_)9!(ѐ `dlJF@)dkmhl52(ZomnqGt1G9D]D]W5ϹH;Yg?zsF6Vnw B43l mmLhoo¿rqMK;ڛ4e}o[W:&N 3C߂3fm֐;"9Ol98촞22T&νN }~1d$Q2kIwֻ|[]5 M؝c$kFy^dQH>pՅGQ*m to8}*Yk׽5܀]2l]2?{oXyt K#죐0os)EUCr['u%($G9%+M 0r.]' H[KV]ǟp6ˮmjlzq%uQ_b{LGVVҮ/>Z+CrK*մy:'[I7 T8R. vbcوڡ+ .[WWn>a6:N=d1M<$cI=06uLQ~׵ QϮ- ssb+~҂#?Խ c=b'|{3v5?hL7F` oV31]D"U#W}pVr._|;򈭭ȯ޿-I!ZH'IE<ވP9$&wlҟ4 :&2e(޲J^k?O%SSLk"?|x' ~.jHNINi5ŏܓyՔ6BX:0 p#ns>s4y9;T,<c+IVtE8)fIdy^׻*tTN#qinU\}̇.:cW{6W: 35ZLgm&lԁ%.Ʊׯ.cHf/x|6FW9AS, ƛ{|seih 1,g"Ndw@A!K3z\w,JvtaDojb-E2"o]%% bD(ml= |Q1t4LhxuI_S$2\ޓ' oܤkujM.#ϴI {g~^! Ā ۠1Iz-u 9 }K᪯g-A%ė8~4U<ҺQ2\cfJ9͢ޚBB0$bqgw+H'䄎-M|6M/ԏ@q `V̖N&@&ؾc1ڔnZGO` xy=e=GuŞ#4.mq'o!sثIftl/E餪 vH{UfYC./*sMSK^<%д_$k;%Q NZǂ'>Ifzi¼ P; 0x/9pEpe !;$C9dLHmO8k%4WF)vϑ%T$%8@RUW?hٚ$glA~AW ~Zb:]z "GO21z&۷ q. TS U E}pBfmݪY7)t˸8|mE12VzVr6-TDv 56ɦ,_b^RՐUw% +^>P7pnȎi7J zLQ-0K4Ľ_}\V$7}xxt,KQf_ѕknv3A&;q׷B#*tukٺp# ȫjcNlbn,ړKBVuC&qmbڰPZQvKJ,ڋ僞{;\}C>-1W)Ep2$G(Ƣ%`d:r- 7D^$j0,:mC[/;ZR).)brO֋-~/43rf >i3&GLUס笌&sԢ/׸gLɸx冀DwDKհ5B:>I兡LNSDuv ԻP&Wz kUK6$N~?yhZWHJrގ\Kgwn:ՠA*)n!QFV#lN4f Nl07P̻rBkm7-VRewwп$"y!ngA`рEkz۝^ϩDHwoshL{TXYVYQrLbPzB=<˔9^|'d؞|9$k:rg1ga(ZR!ֹ#S&#Vk&;A2I ?}50ueI )2NL'Y~l tJGedc/;JD%s ei!|vn\+KLhuYHFSȞ]a:ҽ"U,E65cybiOgY j*e v~;[AE'z(8%@9,?~ʾ +:M,iz2 p5h*AQMdUK_1elC wadDqVF$ Goɋ,ǾKa$G"ONzIr1P# & itdŲ`%Y}z FPo I4vy({jM䝡~S &wfȦu6`bÎ"$yO6UyU'gUxE3TŲT*N)Th/VŽnRaC:*:2[ݦkdyC; ;w!@`(}LQ(S:l'm݁W'23 /ʼn1˸1F][Xv x<ɰsT|=0HLJegnvAwJ0)Zκ Z4 VN RXkJV%gHo1cG58Mj9%gVAv'X'mʞT\W*pgodQ[pqDobC!9BLVaVᤶXF&:)îyy0+aT3*iԔgTY!r ix*0:WYq yb&{ɚNոlm)?D;!80\ķ"nyňv#*"0&WdIvee%6TGdDWI7Klr$豨ܝt2]0t$/}F=e;  }#4PZOcҒdcןZW[|B8$>em_| 1@㗡f/˚>w6͜9ɖWlQ?_+^aP ?VcyCɅC|?a5$ztgOaЗCB2&.ԹO €uԛXټDЃg(T) Ty0߹<+3g`OP{үD+ )8}ڏ'4{jc n81~YvݡF6 bL_DG -Ng,:{ i#vqbU R5E 7Z3XLusvs>:#'ľڧeUI;CJff6~c^Sp@BeI|6k^9ON}(::[˰A%7vg5i˖2)o-5*]x_OzSʈL;Q/L.HATK'q%Rzhzt'}Agųcdo%~H@Sȅ*9~0 /rvNNh;9^x!^ït2Ƿi>%gMNl)ge Fr,:sT9 (UYܧx'͍χV[Fcx iQ&zdk]F`" P!>̖[1vʼiG,s^9:E^u,+>VA?*z9?kW˶tnO6Z mmSz |v @b4KY0]WFA44mT 8eCqL0Jr=%57hAB4([g>c_>RSFQ9Hfs=4 MLͣ6U+~XcT-oO3IɲX4ՙjYh݊[L;<qW PșO [2C!- ͶF#p*o%6}U*;"KԢ' AV0N!k2xi-fzd:iM.1U> ] YfQ SrhJIu\ 2m)#d>L Tt_ՄKi41]2w3_%w𤉺 WDw ] ^q"֋K[|V cf:/;>O?RVS]8!GCwj<6D'oTMnqm 4|k+$Q\e:!$Vțl-ML$D->΅0c)(G3MCTKDuKYQ3lL[!O;__0Q],x^B&_PT'C6'$_ffLFmp~,D3"wF\y<\ZDkN%F.[GK};C\-%A]sm~qR<_&4lk5qLi\ dQiy…`㧬hAFjfI["DPmr֑Mt!p)a_!Gݣ+2m0{0z-]Eig#ByCrvF5q>]pdw'P@D4Jp/mќTzUq4"X{K [XZC^j0+Bم$Q{W$C6N\kU/è+5 3=ИQ,6)FX:ĐCzLv(@> Z7 )a(&s&o'%j2\U/$_Hop4@dbz#p=NVzüzgji ǝV^8/R'*YP0f4y\G +4xޘ[ TwA`q҆Մ'~*L}Ue';HakUMt >Ȁ} }cSە d\̞qy}+-` Gh?= Qθ3Phy84+YƄYT 6X4`aE ѓk$:h#Qbm64E#z _ר fѦoK_qLF<xs#=FZ9R*e v2O 78@ϐ|<|քOTB!_Mx5ޘ Aq zGC<vP71K9ö#|mK"ňu؝ڈޮ?~V~e&% !q&(֓=ЗN$G&8dZJ t 3Lv #kA*%MbY,>3&=XE #Z.;$ ۂCPpviZg%'Q:e''00#iCqCw_bU0քIIHts$d5&ןh]( SEjpGR8_Y~UqqRE{/3]y"wM ~_ fx)§g_Kه ]z4A[3!; 4˾{%(.j$׃Z_✀{7Yt/yQl1f rmN$\ԟ̃/+ $T) Y9K"ٚI,ͥWoh=ULF9 v<,)Xkӎ&U7w+! 02'#24d)dO+a4Z J]"V4G =k:urÑ2EKv>Pi=-h*dڜ$Olu##uolQڄaQ;Ϧzr,$<%/] ȳZYɵ6s7?RIw [mZF)lkp}S]!_GZ9[I5Y3ɥ&3AR &`g͡n'S;l="n%XwH'X(M^ΣɭQlXX@v!{U>ދ&y𹆦eEwfbb'obzPmwt> *%lI59=oxJ6`U~Oo5-\,MB= Ԣ&b?w=1!_ ^/<_co^r81 ǭCqnjTJ:-X0_!N6a}jܗcUI " ɮooUHp@i*"vRc2:p|ݳOޜN؊v!wQS_uobr-5\@$ csٝ;Kxܰnv=X@lg\Yl, m 6~/"$\S-+a}:T> Cwp-vzW]ڤś'ǓquX1SȀBebxG&{T'[ֳ: ob*. \gʼn|+Xf"asmq@, hV^2#O|8&N5I~B<%7^9dӞg`^'ͬXdws4O\~ʹ[FގO +GGe^9ǠIݛy'? gG׊Hl*ܫuzۮٟ^H yΪyô;7UL}bdxI0"x{ n̴ˮl'85bw$BEjXQ3}=99gw-lI΍&`#L{ ju(S~Di״Z4X`a?`J,]2H$]m >_<7{MF v7^0( }i0y( _ Uf$R5dݷ\%\9dtт5a [O"EaxlmG%N} FE7aܪl4=/!E/}Jc46IX!S7TBZ"2>l^CX \nfr:#*[@v%X?N4MfotiImaG9ˆ8;ܾ6!*y>_ W%'%xD +Qb)7Sn˞vmLLUː),lHkOBы ʒfB+wcڴ:M5ţ2K#nIzUg)ٷ&zb[P[a Mp l:i5T=KĊ yLwbiR3sVrJ pwtI~>C}ͧ2Wrh|a?qP?Rl駇ݣt\. YJ40p$+bpwu*ʅ5;CQ k׉Y8ima!r=|딳313 \heF T ҆GH+OIYѣʵtBz=fyJnMZE^hҪ{ f~eg󡷗]7p(.H*jIb){'䰎ڬʒBlGa٨9ٲ@K*?./$ڜDj xYTչ, EpY<46! Podh&-[vY7϶:Y¤YQe|ݶŒw=GE όVs5'myJadNpd3 YILKKr_ct}b~i)SHlb퓄GaV5&"A>=Ա*~ mI u@K6i#ECfew_B%3 B@ZpW2m"7CWp to] v>lTl9> _Vph `Lv3Tƍ7^8+/)!j`I?˿aHdkB在m ZfVDKX{Tx|άX/&yy/Υ5PN"WA4BrZ6&ѭkVTArBZ_F? S@4U6yCSGC[K 2r(y[b] pƄ6Ńo΁U>H_f8~6=]j]bhSS_hRADG7g2ؒ9/ySɯń[ŋqn)5Nǖam5EV\(`">ɷoP'u)@^q0tYSV2 dvx ?5'g2ol]J h qNǜ@`Sѧsj`u<4|&Ij]~R:?E7?DԊXbc&o]n؞2& ^Wʱ%2f^ c5:s-D9LXg"w/M) %NA= bej=aVK>~ċ+#Cba'P}MUAs`[mъgW1!#3kp\$ӔݔU3W>i^*f*/4ؼ)SRߪ$uY$H1r#y$ZL r<;vve_`z*h-c[36x =G؛dM~ 7cfvߐi{.G*#%2#I(Îo^&ByG~ h5b`CҸ."RdElbty-漣Kf:DAZIt)0dw%W˚8ߋ!tTmپp]8U^,4ۉ׭;4wZNtY&3P@Wg/F%%2 Y{TpB6.#@R_igخD>3{ϲlwf:7 ]#SȖŌG*5@Fg8cA*us&\9k s'SmHDRG<kՑ\¨;%l)>b}_\Q ;Gi̕f(́ G~'sdvoō=3wgk|ϟ &[V~C4J0$_-0Fr-31)9ۄijmecr:?O*~L8&<3{}D]BE*4ǩB8y-vJ.ȿ~{?Խвͪ|]IGN;_-@"UrިZcmp+M>-~3ħԂHJxp2 w5G`glFKOC8r2 ?}\Csz]`{GZ_uj) : |4LIC0~ @yp963û}upv9 wmPʖMWER 1ioҘsx**"1jz;"< XQfY@,8Io8uR̜@Z#H*d12+BJe:s{~S$|/9dIq O!$wش9aYՁx#~10(=q>ִ}^X"4r+*UcoY̥(o%!]+N9zO~9"Nyr.o/-ojKKn~v,l;˴.ޢBN73&E3KϺl! nu[hi;Й'2V?#Km۪w:„$XEAXEIA8>崹\y) 8, \`qo3s+ϩW-x鿽xf \ M 6~\?61{χP,@aeJ0ٜL9zrr if QhԪ[vVTڌQK"EBCF(piԦu^)U|2DbomxqKsN鰖$~ZP(O;R|o ,!sӇs]W4j)]@*br]Z& ~j "Xi[:pN Pj$NS2far"ZXU⋰oNP6b4O}#ݴ#1ܗI!4`Q nVy{i]@7HEY9 ڬ"MY{rzu m @Jl(ϞwUuWdC5, $W>V",ӛVŶ)&{KrCiQ4.e HjCzhOhxT)3`ehuN_۶i*<%r]}OmL'fI+oA*-Ǔ%Tp9+od39qLh ޢ)5Nڰ ĐV^I e. ep6$ߝiο>3Θltĵ9?2"&sƕ6kmW#zx -LY°"F8ծ.e;PMjY@Z'~I94!p:x"I2 h"E!Rp jtlE-0eACt+ps2yG񉧌 Fhԑ9}|K0jMFDfabWG, <~/ɦJzq^B^_x@N% 9!2 ?,=N#vJK.lٍA92Ŧ-Q"K:=jvi>Uv`@1)N%n-LŸ́KPu 3LDu(+^MG9ՁCa)hM#`,zv[-;hXKPHJs1SN.Һ`T=vռªsJJiq 1k40bcpܵҜ}{#gS" vhv;vVJ $ OqrqTZ$4k_:45ɉFKqOQEi?O CM@ Vj:`_0AlhpԩGHn7fqӹo JDyl}6dt4U1,/Y!oe:ק.!bz{a_ VLe VN$iX)X䙘֟%\h֠ݰh;8z]o #zdwi<{0&l/Ł+QޝUۯox(W^>)зI6>T2fn֍AYV$%/c%n F 3[sRzcP$e-b_2 >)+TMqby, ؾ*g((Nf=LfR!_ʢB\% n,M`5і)g4 !|TeTyHǿh6Q;\mʳf^GJ55v'b>bJ&zK|nZ,@"#4{Ȯg!ynWaAjN8G0@d5чN3 ndtƵe t*}]dOp;'JP)uq'+Q@>{FMC{/v4N9Tm= ._N+s؝@";cGfٿ@x l&ķ-eM%Pf`h$ h !Kx)"Bp1:^'ȊI8k-vgNq횞EEy;mo`ܯ0@7G2+ :~$p}xfHAD2Rh+N  )fV$ {'4[VQ*Vj9+.|r`490oJM2ad&OY"Ds ?HF4XSɸԓo`Q!e!|Y3wb}ܢсrRn}+jilфkD H&!:<mQ'Ɲ_w$dq5V=#|L\[t~iB@^ҼShSGJ\WP/Lm>y[gj011j:8õTc"^/Ȇ m'1">W#vA!Ǿ \](v.t}oҙ"ϫ-CK endstream endobj 28 0 obj << /Length1 721 /Length2 11261 /Length3 0 /Length 11839 /Filter /FlateDecode >> stream xmyuLζ5Ρ;wp{ťxqkqw)ݵޗ|dekv2 -,ddhjprqp8ظQhi\n X (Z4NN._' -@ u0X28[A.di pugsqe[ lk IM_AU .5w %@d ÿ%l'W=.nY@*2ZT2RZRs@Yo9U/hXnkYo '' dڀ(Ml ;l_BjZE;8; RG'w7 @bt4 A_  ǿC WYJ Wjks^TV wF `9oȮ(''-X6MZX7OZL}s7_Q/_VΏVn.'Mk#^3H@eR(.)컿Lt9<6/Nʼn ClPɵI'TM@_$6OE;Z]D^e,1dW+:`qƘcm$,݂q2 ЀUXӶb[0_~]|r ׿eh؜oeTvl|40E$Uّ^cRxސ[2sf5x<e/k:ަ/"?w]#=eh"r[s9@Hxg"OK4sݥip)[TGdH*Yd]hWMe))W-Bo_zc!7x[#-5wꕒp;MUyK,70jtCWb݅\uM_B<cLl78e>l_J[!msV6yb[W0 X3~%P%2;ue lP_/#j zN@1N**/)E`9ZCxAcșuu/ZqN(ٵDa~N|oA3&e7@&5G7ŏ%v5ϞG '+h[ PL0 "Pt6GZ͋ZlP&[xkH{!vkovJk߲Ҹ]-Hȥhi޳zhăOySz~V9Y XN%I%C;]ļ2'?s+}1؇\sWv[ґ6rMw؆51sZiDKY4$~'{1Efq^g)k@f'gTt+Nvn;-Z鎎^9ɚe1ϜJ E`*p]c0emH=,3p.vI5咖>"hTݢ\E1Xk|K#ad:Z,31|Ǐ[魑L_)W 4F'FA_)Ck޺8ZšuЀbpRGk\oEr8Qy Q6% 嚧<DIx|@0򁽈dj-%)c;mshՃ}EQ[;hLULb2YVr x |dF7I~!Q@nnmS_{}e1wO/[늰1`w:W(?$Ï2'!#]ty.䑡dIw(JxtyEӒ<6|X¦ڒC y.+E}^'$pfm\/A}J%tW96fB\i~K>3qō$ ?&`~0l[6ܮq ЅVrz~h9kxڮtIL)OuP/t}Yw~ ޛhJ 4T|}IeZոMv!wȤ3J =|(dp;O|r#-W`ͤHtOB8FY)2\u|vOy~h<'ZpP:F3M(#,!SUKg7g4l80Y+D!;/%`84?*mOχꙓ0b7D\սjM$ ӽ^k 1y>Bʒ8QPnyTEϗtKHy)#'dGOWe d%l &jAӐ޵ w$)Xeï82&W?u^߱? ׳ZlZ` Q"5ڧx}.W\Iڈ2,u*Y$0Dz+5H' ]w%dJ {bJbM ܩ&ʱWL|L|)D<&ַ_Bl$6cu1Z * N%ZBʕ?ϟS%5L_m X$ >a/ޫebGQ eA5WQk. ,pvO(9ըh|EO)1ʜ/ 4 vkƛ9ϖCnNN?;`|QH<MXnOI lAEY=to7G͘2pf%4IWx>vC9J|A!b ǜ30 ;7~R 4BC>-_1_;/-P={M5qۭBNfy&~_jtkW,TK]c2i7r&MogDPG}*xĶ-e%"z'4E"Or]{I\WDIX)ҋO,z|n;Sݑ- \_Y#vFiYسs 'W4ig>|tKs4Lj q :6?b#ǔwc+e iY oGӖ0ű#Rz(5d0N+u/+HabGv^uUGeځO9lTm[)ܬ1D1sd_2Cվ+q;RV}km%D↚t]L%c?~6df㘠BlșvhÖ,F'"ucEsjiA?΂ҘxS[7Ԓ18Q8H,͌H$Qv|:sޒ45_Շyփ# cN&QbbrqJ+2M's]kJKL)xQ,y抂%MCqZtn6M5=/e3FI4' r3-!s>QoJ ИuJI𝶽PS3.(:Kje9Hʥtҫ\Z"UV.51YY: w9@|]Tx1!bX94/Z5-sP{KK_Q%gnɮ/&X}.Oʮq@\T2&.†0;gM{qKr'Yu+- z(9/{͊-wb_ #biɄ[^ģRXk})[WQVoczp$SƇs6-yA f6_I a4M's!B5BwqwOvj*x*BTl"'O \|X ( 0Y75/Ču;^یQbN_ö~[Bc๾Vz03tkv..%|D!Kv1u( .Yz<<~}N4Ϗ4 4tl˫;3Mj |AĄ7!gd( B|\cOM+xsC׭JGl\'+m~L}cDMW9]g /d^ķw2d]86)\ɆͭZ'l'Ļ+/ N:# k[gD\,.ۨྤ[y=K 7w[jP} 7h[f6ݷZgH@p ׎6`4)KϚɳY%L zn9gltnoW4)7xoF ݬ?xR$2zORܨ{܍; iw!cu-h'Ejkqڨ%.H֔P),s2}}%(~?CgPւH_3$4aKϟ`S*}xݧX&Qt&/]ʳ=T!;ӈ~t+6@@KۅakXJ&݃n/3 s8Z%.=3٦Ai?c3uXlaN" a~%Kq}w2nX=a0.?`cePNѾQ Up8P1N~4R~P|5*  G"Ǘy>AB8g5 $bl9#gm̪/W /}D!Lr1̻{Li,CsDV[p^ &ŧH,Q5650Hǯ+@*@cJ.KV;wKi%+)Bb`̎`5vAB swMt4&{ ^Zo0 K* V ~s,x]8_R4wݵk!.&I2W=QQ$q1ՃkgN5x &/W bte$Jw,uUrR=Ō-&JjJV$Ɔ28UkcU>?w5"n!sXõ*-sqj (qrr8$Yj65"ntѯ <Ӌo͚=~50\?@i-`j8JUBYBœxs4%\ ]﷙"M4w,ƏęxX΋GĚ렐F3ğ~C )M+ZC\]v=ʥ#j=c%K+@41zVR{Zڱڀ+Thl>)Kqo-rdkF)rKUHt6H}2gnjPP0*:Tq@JwPd1U6w\Av~1#sx7>J͍1Ҟm*fL;z/@Vow t:)^PH[ ex!\,7[9V?!3&U`Zbj"ЅKb{raR1Wnꆑhǜk;-3JeG;~UI2mZ=_d sAU%vm0RHue)oUwnՉ6RX UyQb(.^FlXm9mcZ %b:VRgޓN8,W"qa{+8*hNiA$u@f"cQ˵aʚOS*4"L12GW7ِ{K FܜJc 5\W`MiY BŽYT-tb9$JjX+&Ç%5(z{ј UߺfkU?)X>2~8 vdt62k/{$ 8EkTfL+jjwx}0,u>?ZV@wkqQۘ-i!^8þf,wvJC^~03 QrEOI8y5K ȿ4B%L=3s vlH<~) ̷)Jֺa2I^ڤ>smWM h3"O]gr[$ix$^(~GjOORiz cl%[6(M8EG;&WHTKM1&qQ&.8&qD<qk/!WAvL DZ9!\ j(:7{7fjSq UL߬X|Jlc>ys 3C)SQ; ]wRVbk?qJXo5Wk0A;b4w9<`TN o7d+Ycۼ ,?m+Mdߊ'w_@'UC2.ި>Հ3;O$Fx=E,{tLD½_kf?_z 6l4w*n UD8E+vRhnڋvRmLt} s-F^j|Ywr ,)$#ꂛB O<MtC3xl7Fd,b}wuUǙdҿQ}RlO57&z,j? }a8VhFtlUt#f+E쭕2?qAv{rb=y#739wԄQ{?ϴDDl#r/|pI>ZK7l?!Daf=ͮךm+Ae?f~T\f as3@ȯ3?h2ɤ%L-zo"dXUL\'9\gC'AD?IVW5%BWJN0 D!7[2eS* {/7`zϟ,h}zĐHQ ! PK3 h#NotYŖm7c[iAL?p}]-gpx Ȱ\'wkŎ"qT"-  v񨛝`(Gs"i }vصVlYiXV_"D@nWgYޒ=XF%eO콭~bTy|^ T(lIE7UJ'M5E) }iKA LJ_X@i2+$ϻҭ=ݮBIn8:*8kq/w13 #S*%ד[]7b7<:fa3=N%3*#^G'uqaA Y7±Uo3B)-]td;|$ ˗bxN1mʞʇ`׏BZ&-(~Q @Bd>^W# kb趔%|?,QUbGlC1rdw:[ sè/0=)&g g""w'YȸyGm%bjh#1MǭJFՉ9ۢ uBaNyD㚬<6O񠌧YF`EKխhw$s 0~e{8oFƓ(ZƄ]"Ԗ[Iӣ@4jxF/* ` %"8O3_F}\rl}e^|ǣX;Т{YB}g4aKBkRz(#L;S]Ry+L:;IeW ;͖WHuÞ9XϘ6fAO8;ue28Ўi&5::(G?cWE7a{լMjDBf9o?BIyK?u&$XVh,ē +b1GdFbJ'kKQ 96Ja*#a(zLhCq޿x]|DTnZnC0׹cGysgWu1!t4a+ zl am#> ޸J(k`xY`Γlxn<~2@t<ͤ;hꃷF"^L~S<=2J(ٲ09IFߵa!XR?-x=BM!q_l *`}-fk_]ZQPTuXIcehىDG -t k`1;|9WsS֗blOVim+nzUwO 0_ Vd#D6iOK) G`)\m08!,3>sW<{XDQx.C|ɝR6"s\o |4IĦӍf 4rXn1jiH0"-I6p0v'rCG LY>եzܨl5_Q`TU' !B1䬴;{!%{'a[|Z$r.#KJvp4u&c|D{R(M'JK[l1wc(<;/F41A5OGްwqb,߸ʴVnS y0@Q=E~w!RCsDMNbp cw^ж%V[q)Ȣ{/j BqEoT״m @j1%$g]~D\r01T>&!TFrbaW [RcmƌCn(ݬ8J{BW$b5,_%shJY@e1-yH@wx,67s| ƖWjmYiD -$O5"Mzy\'vs )fh'#'?868@rIUoIMD2Vf^2ujpHC JŮTǔ@ )Egs%]sH~|ǿVwTuѭ!"oJ5^b:Ge$q/bȢmr;}VEqe2 3}7ꒌxH`UUGe./h:A^۶H4m Of,T95/&*eOJP|QBhN.4ufIux:eD>$Sgph}rqC>N0V!p`RZE)ɝNTk붱C7`c!1\a譺$ J`{͂FeA]hY8hWG Zț^A>C@f~ZS/ ϣ3]!i endstream endobj 30 0 obj << /Length1 721 /Length2 11252 /Length3 0 /Length 11852 /Filter /FlateDecode >> stream xmweP]ݲ-eCpww 4!wwnw9^ի{蚣kRK;]5<AlLl̬ui5E6v^+33,i h, G; lce 5hٙZ8ḽnnnn._ 3mR  +$QȀ gS;W3;sv,vN` iraG W=@QJCLZYI %!0[. sgMpodg63 _Ɂ--:W_}ڿ,@_LAZ {ǯ g Ps7ejoc/Cb`αqYظEڠߋ"A{`;=Ȣ,+,6w[]zil_Ϳ?bMM]m<Z} %. ``qp8|_A` ; #,9 ئ *e2dXb\qi3`maAxAXB2h&}%wJaB9!0\"|.\eWZat E`osy㚹B?wZ'T.)cR k,CgHP1cZti&^rEE`l]TWnSes$|vĪ]~-lGNUL4i`W;}7. OH{k"S86 'K4{q%L[8NܽPYK[1sB-r#!]VN Ƀ )fݤ<B}n:yxѬuɏ#<~\~"иt}7<BlwEރ?R Ӄ?h6Luڃ5lB!Aa#/՚>,j]Vuz %5GO8aa5<ƬX.iL˷3 1fgX!gn/&(Pb2"% LCWO [-PV<4$~(ԙ> M#cB4͟NըG4bf"r)Pඐru{t!W{]a/oԳ?5#i`mWC0bJCTLC^W0Y<BsEhFLF9HFF-$j^C!jܡxn\t8Qa‰n0w'j}N8u ٕ[6lvxpmkz:ݨ~ 6BX=:Y\scO94A2pO# [('_koXN |XɮR/暓`#N#T2ѪndD4&p,~LƤhxy7cI?ET".n-,L4DoX9d ܅yuD`o9QAoQd*'9g̩q32 Q> \}I0Ȧpr}HWGhRHTMА4c6y,jbAZךheGVPDwGb:4[ClCPmdpj϶W>{Ћ,|GH.8wnbs>z(SE]74)[gzIBK5!4—nKAG3YMs Ɛ*JI6c-cv3* Ln8d'SF)^CZyM<@߸IuɲDJK58ޱϏJbG<g|G-"!" 32]5Q!qn >x_m=(j(̴+G &d LiKVjSx)ɐ}-[h q̹3wb*B:&Nmn||q$.xeI5 $Ix1D\m O? Y..;;V#&꼝P힄shnRvʼnRFLVQ)fzWd2uN"[»l%L%]1 ܔ+֮f:¹l1Xo>v%GG3BOJ+c3fLD>M;3sY bkn郘UKT"k+m|PzS*uJ { OdCr]E ^?vue9 8 , U[HO`WK;nY7H:;Rzqp: loOQڞet?Q?E_d_E'91}->%"}\lpa`қl"sF_%4fJL^6<+vZL%R,F9)8#娼@eX[Z>-iv@5AS SSv qǘ?0֑y 9#;_$<\/%HOsX'2pXXBU-ͭrEE'ʈLn%ؐA%z'i\X/n̠T9$Bvum-D*QIxbM hZl!8RJzF[5x? p-׶Oְ pl! hZJYɭ@oc>|? R;͏+[c8M:iuLj+vjC7cjKh({~BZ,@LjzƵKqA\DrF9bn~8eӕ?Xfȝ. rIAnclZ 0d2ݧ  Fo=(2% FDZ0?UC(mѮANԜ׷b+!]$<}DA{~fߧ D M~޴%I_:]@ˏ3 zeWFBFoǭz4cRvR R> >_7_65$F si]Jyjv$Ogٹp*do:I0f"d 7H/,yCUtSe22>#6B ?(Z䧿V6Y]kQX)C?WO˚A3TH,NGHdBI޳hx7Yn7N7݉9tڒ(\k|6i0Sڒ31OAZP O8Qt~@jD%RLjKpT& KFS&`VGl͒vʠw=|x R% .*/GmlxfF8y1ħu La@4d;0󜘳[!L& \P LxpwY}A)K/>mMr"y,qa&'?'pcPpvїL7NʹArp})T Ȟ7-L9^cr~ޮ(JV vpgj]"2!̚(eGEax d;zԓ1U@@ nd>ʛFn>vNJvԟ- kGg]*'͛nbV)207kya'^]6DGLWd˯bDCA덝`<,(ud lbA$=rpg Z7^,HІBJ}"VI?slɊAufDt%]9A;Pn/srۦGtTumFh'/*˕tn D=|ǻ;)הJCI  4P|~ӂ(-&OAњu,`K>V5;꒼C 8zS:}@`NV~88zXCvgD.:4b[_2ݝ_q{yveh3\=DfvmiVNBAAj,;W-JfsÞ(jX(!3]:yUͳkTz},MĹAU=7y(b`C5-;Ujƺü2>F׋ JLA3jidUBI(D?OY] /:Sg'[x0zƥ}AdZ>Y؆KB,u_,!3?ҕ`E(^TDM: Mro!OuŚ* Ul=ML$@wfxPu)2`lT>D]5Lp/E06=`9!Iki5/U'1lBTE|8$DI$#F\&Cv8UR2;mULf>(LGnT4ЁNFRa&߂=|ֻHL*]].TG}:ہ+HԭHi,o\̍pnv8Pp)R.$=Va'yu$%f%b(45Θ%#QY2Hrzkh;#'_7}!s?0/J#K/uFL+y3쵴*y/$0ufnr;4~],<4GIf 쑻]0 v_&$jˏ[sb(0/urW-v 3Od^m5^f(#ʳz/U`fFnM𼞬څDQ^ e ð bvO,:126툠JJG/նj-m d &Y։w}&ak(·7'g1ѥBj/_:9<{ߜ)،&OfiŤ3>ɲ(ƈ9\ (MyrM;%U͉n[_vf% 0"kq)(cRI4K*uzPG IEYI#{i.'!qg]JFO0պ?rረ4 ॸ[Lܝv[ ww* eAd"*蚎Qe=|*!{!Xۋ/ERf^iwx%*JxY"Aljm%$PjbwQ̮XPc7=9!EY3qÀ#ُDn}1[^3]wGQ/o[iR@{,zk"wwC-+$I_w`YTp8g .>lVRl(o3y^|SĔ:54cP=i4s@N: 4yu=mqAv ;$l 6ЭJFFiFW؂{Uq/7O)Zװ~+n{~w~͍]oJz_P!*^ti^1{weРg|ќO2T =3oM.q=SoKnօsnn<0ژӈ,r;;X9%B^SKDNOmDJN }?x"Qs>0ZT 6xKUnxra=C'v蘳O<"fo7er+ I"Xqw ;\wG:7MHYKt `+c9er7cx{ ¶Rj=&vA/l&Ϲ4"CT6e)rlz3aQxr_Pb= :H9mk(zqӎ*70j&u42LwzMK,u~1FJXib&6‘D18ok`Ev d0_aO/i[ӿuP|@9P7ɵ |@)b9/z~x ^1Kl$6!ӿYRN3y3hZdGL2sٗ WlI ~CT8QG||6"<>[:虸%yϢ=Ͷ'j{!|1pv #_Lǩ_"a,=޿y6͎gjW:|u;8ԥAVt=V>wer#UʼQJLkt3)Bф~bD~HI{Xkɋ0Wgx-АH^C<9 Ws `ݟ"4LFō"=9׳MQʷ8AoÈI׻<lq;p _$pR1Y},Yltauڞ8b vO2˞hɇs]a-)?E~Ƶooږ`X>`G=D n1-yKSny~}a/!1SM9E;-~k%[|h"L@E%x̉%- vea $1E!BjA,}(AHoZ5ŤSdFwu0J$yTGm>Y4:N#QwA2rbU]t<\, kxޣRb][+6 #ulE&r-'m19 ^d#c_G#[C]Йkwu26?rv1 0&#Rd>[D&ƀ 9fXvq [kb ]37@(U%|I߽?f73IjI^tr IڂitHܕ5PU]g\5Z+,vQ(gW f](dL;TD7iQK?Tp]??;#J;ݕ)t!dGSvZf7?g zȬ-y-S%#DQ֗2bWH㤦5}!~VRx' R}CŭU $Ḭ(KȄ*!'[A3]svSةWB '~D+"Ԕ@r!|mc\ygP?LMcIʮ0XQ]x2<$Q⬤(#0Aq/0W7尘B$gBh.5 enCl!3ĂYvKF9f?^Cmɠ^O%)'- 3 >;Zvm5 r'Qc_?ͧPaf⋊ʾZd'wv9asx;Zk=iiܡ)ȔqP8 1ʤ.Aic3gGkYY0 zlcZ,UDTqn;$*ʮ6ml[`bO?/а$lXkvJNŁI^8ŎQ&.8X/ ,|Rj%} E\ T4#W'I.-TKg~[R8<9ȋ]Uh5,EZTs'It:r',(I$/zD5Dforo ;C? }fQ \dܶ$/e Sjc [jECϫ= _ayXblUO_{9*BSsf# v:n wr,''^5Au@4x m;> N6T&7=4lQWg2g{+?/.Vp 9-YӨvg[yz endstream endobj 32 0 obj << /Length1 737 /Length2 24794 /Length3 0 /Length 25314 /Filter /FlateDecode >> stream xlpo/vIvl;m۶c֎m۶m{9}o[_U͙EJ$jgaoHHPURfd``01Ð ;8[6p6LL&FR3ˆB#@*BG `jamאPɪLlM .Fi #['J#? _19;[WG3uȈ( *D镅im61rrWv4 2_`FC3 [&akj`TO|0cbm-k`cwq6q8ſ$Jd?.6NBPm?b 'Q wcy wvt1X?$cblb!L6?ֿ礗RMo@l Wo 7ygG wݿʅ_P:JH݋@ϋ _8::{ڲwejshHl8촾 2#TŠν2NL!}A d4Q2k1IoֻB[}5*,MĝsZ<$KfyC)/c~Y{8v£9J7>u5ҬyH!HX^. )yAyaf~c8f6Pm׊?W{inˇOy73/jj:ے"0l^#6{\9RK^cj(TdzzĕQ׎gNؼ;BiƲl`ƹ'p§У p@f  7&nMNbYWϕM_Ю"_SDUW=&]US7=J*W osyԊJ㺓 'Nu9cڏᄏ^&zg/,ˑ+ Af81t^n,kә%Mag:c'YwHzjtf}Ň7 ϾWVC*- z0Y v7xw9<|>G|Աq ,i*x!:-z=tC>پkPǷ$记>$VHUq3&yej2Q$ iC-xpڟ%1mm~r%T![*I:{*;GUN+yIuzb la!٪](?E#hEpfۮTaFhHT9HGCBem%bq Lm̆1T'Ņn)t@L,fq ?] &?*-=~ 1AwXS)~LY5>5i٭jDwu`V;#2D?6NFrx/ېd6Y4\)kU>$N):x}hHs rqkxމTm$0ބu UAv93qR*^NJځpL/R.|nPb k|ul$5үnVF9%UR 9)WK+[V,l>cy=YAڟm1Gk?t$4vhq(]i wh)R|@R`;?UvIhw:gunAD@kXxk]! e9t'.Sn-**32T  E Ո,~Q"]9N܏܃ZJd4}/YXIu{~EU(܌IŽ;A@Еջ Uly؀yV%[iݹr|9hl,o8z"G_Ş>Wa> %mxU*3c璟dj5 iYDW_:aADC*z~q9oaȡʣ$"7 { :TL!ii'+ӆ@M:.|`yA$\`:KB'ڪj0 ż5ECdpLl\i؅Oy{!p1ރ=_a+/Y?>(ϔŽӿ' joJ/=fE ?8 Q%o$pJghiKi ЯKbeJgQ:4LGX;m靁r&)}&F޽V+)cqۥd":^2D{NvxPOI4EQe] ̦qy{\i5|IљٖޓIF!  CKfW (t`@᝶gFST=I[vS'*^pamiJݶ.4]JP}vd- \*xm؇lUO Bwi[S~U$p]EQ_ekݎή*V%'+T̑K8 bpZB541,n7 eXrfJ5tQ1XB!Q˞vjЉG=<iTg**%H| G(߉#;Mu|A7ayӫbEo2=&L{)s}atZ ke?jA[[nJE*pjY]z\ xe Zv ^ͣF;\v(~r·oG>Fm~E>3ݔƠw)X{pKN\mq 3хq_h'ɖm[Nr$'rE\)(f&9+\ y +9nܱl#_D%DpCkNU{fȬJybU\s+CZ!|l^!,%kۓ5:ߘ^HbBODeAtxU GtR$Zԋ5i[ r:tj#̔*J* {$F|7mpWͦtBY[)4"uuu~_o>$* #۲w(ȥ0d0bI8&UOuJ0]^ !rh@Kt0c2)s1q#ϣǵ];\LJy g Ke۩~N6JQIѳ85ApJ101FmLGq+yI;p~?RPy9 /ZwIt%g|DX e&3R"<'>1ߟy,S+kqfΖR})JRh1i u>t>7mK y:H|>`r|s"Ԓ'FϨ+0s1iR<:-ֳYutL4]KoLA@krĎ|7eܢ).\ΛNaMZK~fO@oHFShhv8q[պ .災^1MH|!oYz}Jm%{lf~х,bV uze^;S97rrqR+ yS]n09M+kk* ;’s Pt--v:Qcv&ُ >ZKh c`d[hc9_GjXF~ IS 6`:^`bFdMr{:b<!یs`!%G|uE"^HGw4.*Tɚ>d;{|׎--Q]u^S0-<<subVusҋ5\LKSru s&o$WU^ZX#nlOˆi?Z1|+$&!7GA92XcxӟJkY:GWGiv;Ʋ8 Fr)8U#RF43/[VE=c`(D䭮6rgraixAgj Q4(hnN#jk XZug!JGogj m4$76Ũ=AΆ?נXP6".x7+n$S]m-n#D:</h6Ƀ=z ~e'N~P -rohf%KH+"&d"/?:"PLms C槙Tp\[+bufJc}% _ ( w`TQ#A3Lkn2/4^(7˄옽# Íxa<3$4']BG , sൗOup*2`lR5ްQ{ HvnSBBy/p.G.u s;'ժl\4ήBƗֺNi牒o!0$)e}" Tb'pIk>;vB"A-8cfc>S4MpX}N;lud컰pۖ55U<Ā  PPMNZ50i4Ybۭhǵ; R3X-ɏI-[Д"kaLwyW+; u{z=;!,|-{w0V~ⓔ-7Ge|0H(Xڷ&"hLD3H G3f[4#6olQ# u]GI}͂edǥT[ nﳿQtAFWldR:-x.)]{xQ= */3qZ?'s| kÚsѷN"2+U}Ft^etÚ=tcU}AKJtWɡWw0L?*a) =B wje nN* >1{: ~ f8+̢b0 <2oeOCPjÍ;Qr;gdTI'XpV}"PØ:IAPAUT킛Be  9am%% 7NPV:/rAH.ԟm*m^58S59(F1df~`b2֑9-{u =q |wș80VSJ,"3TUۜnWqD^@=+2a"S!qTcۡmv[ Ejh3\WHVNG䠌َuWnɧN'!uM20T|ɖa˽L]G^ [ ͌ efݙ?_.jlQցV48(.Q{n\6\aV^#~DFtRsd̖0?̑ YtA>e\ۙ>z_Mv~nE< 4ۚؒmxD: 6[Y I(Q@ZY7͉yd?!j5v0K@ e_+iCfڶDߜ&UX!laV?6$"7*#VoZ0lQ2Hj.b°6@ƌ?8}OZ/E>G | <#\(~OozUv[ Jmn1*Nrr)?6wrz[Ae J / DNCu!F,?*A9iߖdd6`6wy\+6}s\gqqZ*w<{ f>ڇZ`62*Db_kUh\~O?`r03U4Dzd픿A47^jʹcO3zRM+ VdMCkyB~6sx ͻo`rk5ԵQ[6xw Řq٩FIz 6#laUmrܼhUfěJ٥!J%.8xh[.)v@ܶQ->C+)k#А!6޷Wj68HV&qN _ވqc%B?HWw:XZg?吙4#D ò+y}29 T6獮?@ Mge( f+oE,3C0;@HAy5&J>;Egr%5(wۜ14yeEe$̚pT@mIM wе'W*0BoT3u噄W=+ WeviƓ$K)w&>*Dl=ojbZ7l c ;{ڕұ3Xn~\ۡUywʑ;6UtQm߃p lJO q I \YEk!,>@23HOKNUL Nqdͫ3a~{|e< ٫U2t-nk+A&fd>8p|TՉ,#ᦠłK=wը?ŗncOOTvb[T"8}aKyGZs5%hg NY 6ĹNxb>f7َ:2$iw]Q'cenޜG[#EAO<ҮkP%M,ڰ U8v%/(p{}g^#&nuto2̂*DD )\R6BۢQ(rD6g9WBe< {ix2z̰|=^mufqn`y'${d*˙ >[Xv $$CRۇd&?Q:CҞBF MG`Ll.Ler:G %Ҟ@ݟHwmjp['h DTꑔ< Srؕ*v<3pwolJQ3/akစ7d!qGl ㅎU""ڂmѦl~lQsW>l6^,se&T7pq48]V6`5v2u_YC(Z 5LC=ŷp͠#|-# d:LJu@HZ޽ط6i>JlS̘dD4rfL{r$ &GMCy:*sR^"ϙ Gs&őT21K I烞 hhMe^ZR>}fKn?Xh< ~wW =y2fH۶ary4׶ l8FR=z-aΖ'ob"ǽGJ&X#p/_yq…e:,[ڏBXdčvj4>!6D F)w9e³3% `DR3BCgؤV{xBM2oNה +p$h5?:3ֶgԥhdgx!)By)lFzWl_6pSv z2晖/37aՇhR }OgK j>壙t GVY^?$#0CaMImWaYs;*78|-rQ}b먳Tΰ>-}fKqhYeK1yg{U~Xn-a?ޮUi--şJ&}/3A95q`VE blD6рxkRx(׋q+UW>/ϊL9Jqo5kn4,K'ToxM@ 0OI^F|MI Y(TJ`U# 4/ܑ/Z<j*ͨht_0B؇##L`G34Km-[l1 se=-"Q-"I΢m]k̛< 6'edLhD*u/#-! P&GR33S)5h`!#2Ɋ`ap+W0q$m$YVRNc%=(_@D R!ֶV dmr4 1C%ja+/@CVέ~v>Ġ-p΍]! 5XH}{}:_c1 "2~7k uoYjB7z|9-ԌO'*r{DJrQM{Z'ЕO6 )i_k;Ghb׹6I_~Bs 0&oMwK%D G"z֧1524Z\dŭwԬ('O)U N"⛿K{ HDK瓩0Foc; |}\R anJ~GRq2ô+j]N Iz)ԹBC4&n\9ݣq1$Aђ-PLKJvoU 񂟥87unl%zrb_=y=[7nq{=f޵u!un^s004^ 7yb-Yjf)D҉RCx`8 lt յBڮ5u{[LP̄rp| rH?xk< |oh_t9|d{\i鲖D jw``؎ˬؖD/ fkc2\6oȫ:YG7x:{M+!BFY\$OB ̃OVk?#XJ%G`AĚt/@!?؄і:7XQE.?$1o'EK̋t ?䘻b+>{IZ`} Չacz N `OR&֢y.>_]I`F*.q: =M J7|͉5uehZl^y`z!^aY<-eO2:.#A+iӹm݄ޭ_B02|}92ݐ[$<0.g I7fnsu9Z{ׂiGeWY,u=;<)BΎތ/5֟&+? glK}%Tq/ I_-$c!(ǝmPvu@Sׄ44=C⍋D9dZQ0I 1T5r>O(&Bgτq͜F:s4(XU$`J $#.%,R2TUa1.c0;GӗJKŎҎxEx,zXh A[cǑ1*k"Ӡf/8<+ GV >R ]2sbQyx G,ɍdPWqE Z 6`;h`Q3uXeJRkXQHvEm1N]"5zoΌ!0 eW(<ž&nI~ Ip]n;PN@-F6 66fؙ]5O \qRX"٤h"Ue}N0;B=rVrA@s~k8C-ÌMK:46 [ kNƙկ;5Aˊq ϲn|otפAN(9dEs 2 v7Ry9kx(kuذpJpt)]Us8G4vUjy25gm/ΰ 6>k%uvqXʝ6)u줞|~ 4kR3b>]ɹ'eJn:,0wt?\ki)'FftEuT z1`$mxYY Sb5Mt]Gtu좩W d,#‡|twXa c"A0xYibp>E?2-!ke>[״>Px2 !1xE6ɬi1jTgke>J΄ܜx2kEQC={oc isjWu+ F'˵@޵6*2{칐pcr¹`;0MmRET]zFcطzwi#:xΝ I "0>,1豼e$|l9P2$iܔc^ #${Ϝ[p홬a~-Pav=i/A- s @ iPՁV,&`\-sEn#&r#6ga`u}\T2—š f@WbDE](2 49*K$6Gi}|Lv. |$s*,Pw8!oAˑۥihl=I31|c$Kʍzo€}dynDaj:pRKK坮7Ɓ`Ay \*$18^mDYwap 4v/Zcܰ5{-UVo/u"Ej<#=a<)ċZڊ}ɨ 8PW/ ";-3jLߦY#D_=)gaۉ JuD1H0=OYjb@w4)/_بWSk?=,γ3q9k +>j*cǸ?W,ڦ#̳wBNL, \mon*-KZ]8,MF-Hvd_w\~s"T,zp^+%cle̿GzumG8yrɡ&74i5~a ѽٹ,[*Ͻp,ZsM_:LPE98Ӧ;ƹ:c3-O#$-F<* pY9L {ۣ\5;U]Ai?QB$pW75~+*p|2rAyI$w9 aL$wP!l~~X0"lp9ˇrCXؔZٛm؉aH r8 n8Dx<?ݰ"8j5b?A05G?b5`j[QpQCʱ.k LJ\r`5JY#YC)2F-A^7 u,FN9H;<%edSepD?0٩S'%v&)-N1ep lq0&^1I~]c/1a8a0ulSK=e F1HNE.8׏Yf_.x;tA-QTOX*{))΋g9/|/^ }?ށ +[nWj|j! b3 W{2M?ㅘe4q8;`p_Y@VZtje)Hٿ9 m* &R`D*W撮wq6 +Tѝ2ɽh\R4]SDD-D* >8L򈖰&xprrwkpLؔ0RpP5,u:IFZuQˉ. cx'2ʃ M`ΈZzt PdE!϶+JStBL^DlKO)QjRH{r*I)5rz S^v]6wº|Q'>`\s_K`1$N_q &XNXK yl<_y1\TȺaOjK76KfS@{nl.I N3+ԵnnMbv.v6#nMu4 е:7źC5_ۭgMXѠ0H%٨H^Ļ(=,`ӵeH)>}z4Sshf1֥,Rٛ1o73#u7CR[ؾP;ujvKx5w=s.E ϵEgf0~3ZF+1ۉ JuMr7R_yAN3Xi(WRc] |hH()NxlcZa[yITM$pxp#&D2mhf? ~@/QBqj`@-cм8[1E><ϙ[U> 匬{v&Ų8|4BMςL=I3>0!}b} RMmH7 .'} U2GN3O̝631( 6i]d mq?wT0>.f.8ވJ m. ٷ O؝@4mEV%OwB`"2qjcY:Nʽ`sh^Qo{_RQnD9   N9P~庋 \˷/<(~ QDǮҝ7Acμ4+GqZȬy.(&[Ȥ?۔JnK ;bmf0Tpm@VeCLS-,lnPv+ ys~t2%vE>]rT m3B>ZRǑY$Ouk `D:x*8 pE-º5NCf #QIeapqQ.Z+ajB 2h_|$i%߰xN [0ZZQanTKWϔu;~"8$UY߄ޘmY[5{Ry9| /M'+wBN|"9 z͒ ~?UWK7A1{Y}V,u<1* wxODgYgģ ILRmԫУDN&a^T36$b}^\U&ϚUy 5,MhS,pflsY93\ 8D?5ڒ &yuf %Ӹea$rC`H gFp58Ȓ唧F$m_GwN]UA38 AGOz^?'{6V߿U.'zr=lŢbJRBS uw4! MY YG8ឭ n\+_^ؽ1I^()_^fV{t`tQ/1lS !NiEuR׼iP<}W @: sILh; *7 eoWP3.^o[OR6pn ϺNL*. WEhٳR{+)?5JG&m ,E8HI!2.VCldi?*!*Xp_+ ٘t \&A1Ѣ#<2wS'07'ל5H!l]H&&0#/=g?>ar]bDÇ[vvy=UÉOJAEY`:o;m mtI= $F211nV,7^Z=M:Bxcߦ}D;|"2a . t J-A(59D_҆~P1 tn\|#cW^ J"= vR~qTQRX{Vؘ='@/WRXߎ:9묾Lf0/I%I=K=Y;%w"MO}7"YP),i՜:GA>zujУ@A9Jϑ(\ ?ؕ&EӖm!1S Ո(]Cžnt?dtKf⼸ ,: Wľ4H`qsI!&_zb*oBM}do`*z˶eI؟19yE3/dzE۪ (ҒäYօY C6ˤHuCuZc`21lI_wbLDpZ EaS\4Mޖ_ բmX j?VgYT)r].W*TkI@k* tIPv:m|V _̱P9(t(kIJۘ$4GeܰZkSYaLoP*cߤ5J^}O*7qRd%+BN'&/KZ簠ۜ K#m$6,d1&,#Wo\fڬCgBN(Oq'@N p/f?Xy༨}=E!;4)Hbxq\u2F7m '4_Gb<6!kC'x`S?^#E; JfMϗKrNs)L_o_NN- Mm@T(==;OS5–\t7/,5p}Y">N> :9̆g.^Ȏڳ.<>ޱ˙ar]M#^r cސگ?bd#<`o[&H2(B(IYF*WllQX„dC1(̼SeoqxmCϡ;B @NCb`0Q٬UK+qP0H]J(Nh<3 {nD¹Ҏ=BsՉ#p`l`o&1CpJC蚤FզBb$8E~gojz7s.pFh9>(s]Bm>td݂K'$|ХfE^0Wf,jv!Wq ٳ4r`nutvVSQ en,Z.j {qdnHv1:D= #htޣuFU&(ZLڜ9V&@/㜴wb-i÷i-^{Rڞu<`A%ˉSLr$&/]|)o]'.'7z2>3.fn9%DRw 8JNhO>;@NH[g)mK Iy1EDH?JaKhX۫wc0a>–W7Ooqjs ti"Dr# Rfָӻլ ܆lS2;5d 2*' !LDc9p`JvFf0z2Q-`W"Mw1\Ri SkLd! ⻒;8"#X6 aT SEQ,L5xrctXjAsg'<1 \AL }= 0Iqyb^M\U"$m+jdީ`2-{kF`l\k pxC 'H37YܚpZ}nOHuV-,^3'kiP }|7L>euk*i~^a߁*fcJHF242\SGms1U&K+_6 kT#ǿD`$Vm'")m97zy:.%U6C=,|.1Ikr큠#1~[eZVkzT":2i56noKS{)ZnC5v5N0gT 3t'TTn,hPQYADÌah88$~v 9 3ρVM[Vaib㉁:w"\#_EwA6pqdxY鯦pe&vطH) VĄ!C~ :PY`PS8~H<"?9ZxpPOhE(|˞׎dKVyX^N1#Gzq!=|-C}9h!)f> stream xlzc(͖m۶yڶmݧm۶m۶m۶mo}s'ŋ2s2"PIΘ@ITY DXFXɘ@؈@؎@̉ܐ_FU+}#sksU[+[sC3n~GgZg^)8[kHȊɪ;[;XH8S:X[!012i?8ZȈ( *) HɑeGMJ?x-B10:@o6&69럀)MA;[Y[ Z9;;;H8ͭ7\him7w5w367wp}]߳#cldlNay5r̿FPRO-bchkdncJF1-o"3.`FEO_EB_K:u`!abd ``f`!`b_:;88Ro_dlflbkdR#R8WJ57B:sh>df{t ;ow+Lk s29EVL\aS^DP6)}c=@r93FҾQ!Ja'nmFB )Ca,ƀm(4/pS׬(T^cRЙĔ.z&2)c4HtIMr_ih n V}coe6&X%!s; ~AF{N|7e+ZX.NrV_wb0X8ߙ"DmzЯ>.~X/jhXBIYp6C@zR`8&Q_ҁ'"G7,ckL¸7=&A8A="J d6= IL՞]dYk2}t\ߐL:8~!021\޺s4 2 kT,v|>g3Sv”@h 6#t^ ^UYz$ ` u`Y(OD *tCSoLLWEw )~,PodÃz8fׄjea $OzF^DO!|^5͉_X| |;v$XAk|+fP"Oz]dkNV9‾sk7)*W1W'Lۤ 6GDws4r{]+H4yKv6㛇MZ['0)KakaBYn(ԁ>D9{H4UZͰNBe2`$=@]:2'ɛCN$)PBO1-^K -zDmDd_C$#խp+cU(eSѨ4h8WiZVz]%fp\] JytS fVk 2:5؋ _^տ*/8z&E"(گAi jr⼦2|kр /!9Xp]R u`iШ8RI慈aC1u)4EXs<, 9^x N* jo^+9;kǁϹ(!& [lxuNߵ(Wg_G?P8-5,+|l]RczJ&Z߹ 5 zg}t{cHo$méKdd.,,i]t$^Yw~e`XaiRb6B/fw4G8swT rIblE!! s6Wh'LH3:ej87֔Y$0ڡ@n獆(Z&D3A#;Xf9!X HAuUr=$.UYA]:ZOs-isl~zc>MOs$(N,N 9%o~9ޔNGдYMq]^dGEJ rU裊;u),2n qOk=6ili= Юn ;l=y41GCdȲEuaI}ح^K slNf^f~nC\虥N}qREbPsz]/ t9Qqo5ՙ2eM8XAb~uP{ڨnH-&ɝۈ19ְiaO;O1 ڂK,Y6vJ]NtH^hZ.)}q톤 wZO0eC.pv墌]g[&\p%A{PJ23Ж \_`f*'#VV.ZEm9ޑߠY u> )FezcTϞ5HSs^,[J&[c5Dڲ4J |JY$'kpTIA >uY|_pHnaa3m湤BnGjhOK󷄣_eЈI32ЫuBr'֏>zˢTkɠ!cchwFUA:}; XH\jhTS+k\TbgsU SQUUxvrz#-Ƃ\Vq ! tRɕDQGYDjN3[X!ANG(7ޝjȊfMfLL!H J;%Zpl0ok?uXe,P~Vz{r#%dSP0ky@ekU_k΀R%$#&fPbjϒY"}yh ̭|!%uI?~tK4,c@eϏk w_Y!爾Z̿}VQ~ۢFrx/4 jZ;>f7*WзW\ ?##" &ᵷ,!yKF`6rRKdsʞAcJ;|}('hSh/nY0@\jNVP592x&"R|k&71rҬ߁G9&2]G%q\C8GDcT_NJ+S_S^ 2_;c?LexV52̩,J2A^[ oR)>'~4ѣ_niH]0q` aYF[R*dFf08ˠ9g{h`yK u3_#&_wӭO:np9müXE\;M92KM_1gyS%cn'pRMkCw܄y@Y# C޺lڦawO{lΜL2-~+>RKߞ5V7ϯ)d~K\P2p`hA#~ZI!$RڊʏP TrMߑDz"r>d#wִOF\/k_fƗQw)){P(՝cz?#5(8B]+W10Ҹ?s9ZBq͵0 1AKܟ 걁V[.ץBL8Pti ([9 k7whxΩv g]5]Iw5I[u\a8;& e ?r:I+NKXmp ܺ;8w~jyYF--0M=R 5'mPk-Ɨ:-Js! Bي#n{&"V2AƢ T\jQdUAq9잀 hS^| 3fyQ+;O󡔾,=;d\՜&ۭ tNo8$;|ϝHاA$WWr%:C|tiGB /7jf w#GQkɊ=㦶~]3sMSE >!Rj2a\ɫx8)T,Fn " g-}k);&a9lSrwzcG?;;S,-]'A"RR&Ěq0">O|vw5b ^~,! ~# \3dK@ѨGo>LӫsBzQ1ܻ2# %ҋ?ԳEˣ?jjbǫ # Al{:19Yb)`MuWpMfk*tP'_ X lh}" <ѺW :rF]b&G띾`k(@}A.r˫8%LvR0.b3٩8F!ԙRf?1!KZ(S3AJIR0vd<+f {e81ɆM?WZÈOv NYT/b1Pv?ުS$ ?]+HRbwe;R &?-5*I{0i0Biˎ_:o2<6Jq>_lJċ3u}c8gΩ5$BgA8;lC_%泱*loI1L؅,uuE.o$uZΉٶnd<=4뜙h!FsvJZ.;j@Ks| 懹ǬVu㴂W&BcPl;rK!eb}DXGw1.y+Nn~੯G^gGj sn_ۄA-GaQQU{`=w(L?'N!ʅxMOT&;'GWIcV %K^u~S40)npó Na,m#&mIv(U+$q~r˘ϱ1;RkCPخBPC8AZ} ]a2 IW=pbC"qI 'ȉQa&E˪ iu! =~4^<\QC[Ÿ7)j"z݀&hTB7ϩj>Q_F6|{(>{ UnjO oYل)9C+2J TՌXt_L5]C;!~nؙJi$DJ`N7 O#/3r[)҇g^G<攌3ŴI,ѯN%ӕjFtv1d;IVϘ&k=$Z@fWou|f3µb&y1iA*F&|Fh TTυC4a4ޔeǦFD9/+RL,B~0PW!i&B?=EdUl3zacY?>1iث@=3*m8(`]9$jX5:i[T/ݏ}$ıjwhW_];ۊmK3 i,^<ǟ#-NˉʙVuu#̈́]N@ ɿ爐S3)p,K]r"8tiASA>a0b3 f#sV}2**? >[c^k2\jj $$+S_W;G d#fxl#K3SyRB8N2)jdz ng{~4H {aw[A9ٛ;tjcdU(RT~tx^~q<~;{ҵӦca!{4#Nw.ku%anf(H֮F\H!ыh=O;wA*pC) [(.'s1rP uځyَ!\>iʹ?(uI2 XzwEHڙ7X[rw>XQV0q=EV)#=wk)[ n jI۔B oکiMqUKlI<{Pc++D3x蘠4?ա>U92d9T ^'i?qS`{!ZK4!) "C=/tmR|/$MTzaF9[OcK? W}ߐNo\ ݕ, :m?-vU,Є@r{qJI\B$QQK|.-ݶ]UӋ;':N {9Y } sW RVWs{_M0@cv,>F}sG-A>$_bq|=?O"~_%n(*" 5@p ™濻uݤN\|}Q&rbe /=fQ_P< phZ"sGs3p 1o\ .%Q.][2h 1k:%mM7@+dXSIBFy,M:e@u(=ͮKߞXp?=lcünN 廗qf6CҌWs S^OܠTfAF[k#x)K Ws- bOM"܅|Ѳ&;&2,G@&&Sp*`#%()`i+Fp K~F|uL'Ie[Ƹr̹;G[Rq`NM* ՠ=!A|.>&9aPgFH& 8 YΖj gk@@> k!SH m1VRAuX ]ؙӇY >50Wc*"cT=RUvmuo~ Η/3lSFs\$R9}aȗ3MB5vkTJ1x8sQSPI𜵭)5%n=-C^݊Pj#y%.}{OLnbo@7G"I&ʏ(%B*[y n喳TO߇`ns?%GgI ,W`V[ȻB!0s[!~`3%RG /U0 rRr( ֪Aj:Iw-y{ou gPÈGRW|ȡaLf;ÉwһsC.hWE@ I;})g^)uiLD#E|pc٥?%X"?IZmc2,vI&,Ҳ:Ls|LyEb?S爼wPj N o Q/8Fi-=)YWbine$?BP)gQuv84w8mҫ F_!^N4P\I\j> uu~q"Y[x:{( %b 3o2ufCѩ/uY3ֻ^ #G,7۝mFthqqk[M Wj6;x0)qXs} QKNFyJF^ѪؕfY )&kxLi\Ⓖ/(Zj]Ɵ?N3ey'1n`F@te[b= s&sK_rQ[(yC̮]hyje2ɾ=SJWv|m\pY#E,BL"RVwg{.&b0̟IϴÁgĹo}T?7_ dcZ/c<'J-)&6|#y:8//<ʽwDi)SQMGsp e̲M&;@{-mQFoSsUxMV`Kt:i ^?elx:@|ynZ[tXwhb>ׅnUGrC,N"; u-|ޢ{ӏr+11Q.ׇ#HR` ʗ_W,ءsN? 6V,:A')2x-Õ:oI5/FӣYxC='g M]򙔴^Rxʏ9;_j vnՒVcњ/i6*c;;0UL="ok2fir:l1C5{Ro9*0;&Q_h! ym1ʯڶ [i aF3@<ܘZ7:%lT+qr#zܒERUf( wIX/DAQ1mFs'ӧ bxk 6-yO5W7 `O.j]dS@0IٻgܤXRɰ>Щ=0d-)Y'ss[a.@;`@[>Di{R:Cb_q.$OC;F67\ Шvl8sxmt+ 3c[& ɞ1ߔ$)!-Y;ǭ@JC z5#\LG G7AM9ޕ}|/\[ (WokO\]"86)h7ʀϭ-$x4q쒾_h<~/}9LpUjRYAxJe.ޖd&6^kp7O-vԾ9EpmF3Ǐ`总3SuYdCm?$Uޘ:}>PBZT*Z({8W~Ee"WEmٺ?at 2_L. 1PB%nkٴRWtr9"9io`6S^sf]dž~p5d3]j9 kgΌKC9gxN2.hRx]%Z~]^̑_YsB v~UyP '":n(N }HioX(J"k<$GC y^#0vAP5M2%A;b_dn!ԁuvvSE/0m? FVU=cH _ J`yބ]A &з(\[A9NACtyRV,ăs(Y3B)N-?MUygPuG( E1fSZE)XzGAwi;xЊK(@m)Rxc^cV -`s̓ߝ32łiC+Ӡ!eVvU]S.qvV4F/$ _ uk|B/AJ4|Hͻ YGee!v% θ׺"3IF_Z)a<_VjA$;lʊ@?;0`tQ+k'NR -Uc3Q1]G\UM13Q)xtsMO2)}n*[„_4qߦt^mA&yQ(z5aR)~3p;5R }vVo wq5cj:˜ .`[d܂FDȴ.@S;qһWLgǍ ZRJ%;_|v.'_..JѠH:>ؚ&6 75pX:s#_lːW}GcouyqymW@i 2mf=*-xJ|qݒ`ۑ ~QΝX`|@\5rm{"tdWsϑt 4R闾eFIqV8B\&4BlhH\|f wg`Z3¤v P$DEc "ɒ FdqJs'FcgOި E`j쳳3pΥ;cĶp%GE3Uketw0n< 'KU\iܡy_2w{y,uuVSy!w߂ڪ7q!P[23&w3$VVI94!"&+\qK6(%~D s܌!9&Fj(^4;Ss6hMkgaH%Qͫ㇌5ȼZ `p+>FGϖG5&C4%);X\(| z?#[3^E&p=fwMj!>~J]>x- z xR.iN t],t+G%bh$6AY^:/ͰzF$gw@w,Fd먞:~W88N[^MOAxy>dvrpK~dL4Mý怔K}8qs IgX mJbdc:M4>:8> ymcͶK- =ZjGXJK˜IՙPV_o(oE^4 ӄYp֢媻MM$}~:ùK?70 l&6k\w)0çϧ}S6 f>|VEYڗ6zĮMav\'\hsl6i:Gj#kȉ>g"B=)ِ])G+HK#A`0a`8&[ksu ]Lff)cIVu@ {Qu ]Ji=`w}̫G~Бiex}T/TZWku,eu8`=qRT#k,,UVpO"/6kO +cXhef0w.-u?po&!kOR &]dtq0|߫zawڌ &ϧaɭvۑj5jR-kNӵDb'9~Kr~JdqY%C m%nu,wxG"a7`V6*4PW&+M y/U+1rFpn#ig!wo늭,/bO|`_"@YuHvz83/N nX@+ml\gW:@ˮ?V$5#\7)d%xԬMeh-&`)uh߫]$yu{v~jCwM"_cy>j*ΟA愹$AF7~tE/!Kbh0'y~9ŗ~t5,[ Im fj4xW[@RQk=dP39Aע0߿@Y`.HI%EV*U%9ZH@GZ%&r b`V7N}1": ,p;[BܔPp2ٚ-\=Ցإ,54ԣ| M!5Qֱ|r#F \+lBm#Z?5A(gLfE׌)y.|;UH/{ZJ2jDa(i-{xxaEx:* 1Q;OH}VR$7'"Yfa7x9+3mq ihp!Y/qn F=f(ƊX-J0CuJ7iYV_"(0G~ȚWUK0H^A@O;=;^SoM ݜDThzdɘϓ7VF≠X0H^[:06JX",w',̵./չ"aM,Ο>R\UuuD6.C;?f6uH cz]υON#DJ!Cd˵jP!vo@cTKn.O{k@j 9 Y]QE~ەbp {Wۨ.:xV?p%Ed=3ylCT%5鸂Ogl|?XibMmL)i½LиYC$+V+5%(8\:3I s?rL?FAVVρu|-4!F&hNLh4ad)|)Z۽P1:VYW8ղs?Ż0o ԎZ|=V jH_%̛g9 ;9c +M3h9#roz7R KIf˲aK7r6hr=HCgM,#;UGV]9 TT]j^)Le-}a$2kH~,u2lN+v$z57CכArk q\@y-L̗Ƈw= !Yz`CmC<#IMV IU SJM[[ymdݥlٌ.:u˞Fsggð<+V˦~1–ZwRַ2@rXGR{!c}RlJ,7{@=[T{ dT׀Ox,jTRzj:#K _f';LoFd8>="X L /7w-R9gӪFOҖlUMPе'0t'ZƂHu ƙv`^;3u# M{Kd*N YhWkzԊ0Ǹu_CZtw[ѦZp2;+C;|p'[&̊] .a@?OCq M:J6!aM4޾qNh8!joVmaĿX(A)2q2`KT8TFz4Kn9 V6%pR6ʿ4 ߾,o\o:XSRi9#mL|n+O rU+VMgeRJ/^S<4 1J5],ס=(h1kۥN5xHOs> F=: Z?aUKȩ$cY}znMZ@.6B#tI kep@U8 ]"Y9M8I0I*w >r&0kʌɌR&ҹ5N#[9E{SpQy 7rPFTx9|}Uܥ%zpIJRoJBn,%+:ޤh9"- 7[y@ѓG.~3-4г{hP.Ǔ{0sV%e1.y~>GuFV묆Eⵆu( +]pp8gnjIQnVj{7(p Ƌ$/n7^|izRy1BUMDb.XGӫ2srE:%Y+9P۱j7M@7oBAA+4͠Z q{i<>N-QXOuq4jcD Jrwu]jS!` D ř^De_Imr$Re{<ا&"1&>3# ziΞ9p"i$,/.Q0VV|>9J9&a4q-^~xǿ2wcnA|<_j<&lOX/=xsJ80kҔ5ڸqd1 "aoF9hIJQ5w =Nc$ 48k|u Ţ%KS0Zn{>#> VAɦ}=Tb`ct~Ǽg.>f뢔w;NZ4 l|KUg_l&Ӣǃtc&b.e]dN>/Bq=gOocșf8(H;Ŏh0Ffzw5ANԚzp)wKR<|;[)3G&<3R[]s\֮WsҼҏL{"Fn7-#ʩ48櫏Hf"SZXƂ"VqjD|V'V;B&ɚP-U{?uv{ D*pm[_)M S].\_r=c },ѦD%ʝ  H!}|w%FCQ7. ӌ}ۋ"'Ep1Koû<F2! |(@ لFbe)#Rݚl#Wf8mB;-CVo7t[rm'Qjdbj4P'LKئBIu/-Z҈!ۙp7(i7i+)Mk:p0;R ̧*nWTǂ2~qg@ִu t)hzdRykAJ*#aXSH]6SGf;gt+th5ɺa͵1-ge"1Z}+/Qom goHU277<*h .;ᚙfXCבX|j6eTyT[+Z#(ghM_( O/4.v 7+ x&GEֿcOAj덓k\fZ9BȖ̊O 1 zn#A߰W>@;qv*~ 7U:޼nǵytbuWGā9d˥.?Tfٓ}ѻ;B.G1 Z4C{e)>Zo4ĵX7s/܃ zh'f0V=ķ J3t5 zpZQq çUD_äeږ(G[z8bqhg{XMDezG̔{ŸL(T㇦Rl{%Pse~8t[dl0TOkTKp?L/uL6&6^%D8F~%FѲ$%qCimw 1Xv/L qEg-Hv"Rɡ,vRQ'Xh*ўTko[X)ϿT9LΞfTN! }̩G&Z 2kJVZxb1@`T+yaA/ݵY endstream endobj 36 0 obj << /Length1 725 /Length2 29853 /Length3 0 /Length 30293 /Filter /FlateDecode >> stream xlzspfnlyc۶m;olۘp&m۶=s:U?]{m IG7uo'  #3/@MR]GA!4qvt7q5GstvrP[ д31vh:9zXY=<<=\] RnV@ #(RH.&vewS;k3Hptg0st0&Wp ."cR8 wpshn+ٙdZ]#1±̭@Kk8&`Lri@Mj1G{'w7 @.h=dL!Cv+[÷;?j-Fhnnp?vwR|LZZ"t[6K89[;X6+XTL\ž*=#?/QQG/_Vfn'3_p]\n&\gbfpf|a6iEtt,k37zVFGWxwxs{veZHM~NcI~⽔UZ60ĵ7S떱L;͞{Q+\&*k\9҃Ze*Te,2?tȪ"(RFLOGy[;OW|'Ggv>Tc>"Tt! !B[^*~;]QG{sZZTAnTe%HB8|ys7V䝷}'y&ֵh +OHbڣ] \qv)DUӡܶ/9  N"`e*@-C ~Z % -g=bxZ\9RŬ2|E8D8.-!(.Q/*R+Fi[%޸eI|"ķyMZťzOD x:O~;3#EVNH7rJVe(Ʊ .7mlq]Qa6gؒe&u * +1FGԑك HsخJh@Z\sƏڝϭ`Y.%!qήȦ?Nүɚ%<4rN5HUv-(>Rq1h/o_cQ>* v/x7&-uZ&,ش[Qǹ$D\4j{əvU0*EjGBI1*aBvCiGzi_gR%`fқ]m :IxǙwgWĚL2w纎񖞭)LEşv{11fv1rȩxi&Ж_ cOALVp#8Kv}I1/&;ֆt8owX _#e{ق[=ڽ}5F_l4|QU)Mɸu Qݭ!7ɞ5o7kg`_P?H[JȾ.iMcb!kȊo8x$izsGUD t@mޏ+$ƇszwܥcVa]]TobAg0B8[ gD_["a3pS*HFPrD53 걖t   5]c,78. ImgM@w:t.Z.&=YN x$֚}f9|" _r4 M p؜TZ4V܊g5EٸCX)wqyMoͱm,!8I?.DPPUoƣ,O-yŋ8`]tu~]<}(p48g zws̃UjXfP@!sk@!W캭z0Ss;'g:%krme+z/oê6yZ_Gk)Lis=d 8LڪihQ iB4Ve̩SUQ0 "pFIUcO-ݖ-1JX80h:ŝUN-!i?{XI!|ήRlWIgg9Y(##:/99unM=uW|I&ΣGJ\8xE":h͉7z[f68:%8tk$wײSOݟPZ ukS_3;F<~W'<ZAH.ճ'J#ZEyN9rvy&Iu7}GΒtHf6& y vݪ5buPm|f+jwb9Zo@t BI5;;R0p%Yd)4zLPI}|SI=SDkK%cOkzE,vˇ& ݞDaƃlxoFU]X)&5B hk ̧ňIV& J 1L* 6~3mg-bM[͗YȟKIH!*RuASr؛nǵbM#c4)tTcة( `&? PY,%2edP ֖BφPeF+46zzevRw3N9r74U=0G* UT YjD %">J`!p;7QY ip<-cu#WUg" ?o fj&̥:#Ew;`%ex5#(UDw=cWݴR m1sf >ƬK,pu3xBb n;jm"r~!a}ᄼ X+Qj!ΰ6bl%&$cAv#Iݖ) KtJa38"+IB# vTX[%D? *;Gwb{^#Eo #ځ4!WŚ#SJvV lpѵS|>wL?cp$QtE#DHA F85rҒJ;53mpTN$ݬgh [O(b/hïq_aLv:0\Y9U£G^yqEP{aL-)Er\%jv0KM{0 Q@idAs|B7C:nBLj2ũ>Ni.*_V޹U? (>Ⅺű2_pl8X9|v[,iUhzWpⲗCb9jQŲHvFo-J, EW; r!c̡9Z6 &# rԔ+dQ!\m?NG 9'Cd[:XsQy)o/@l3MXS.bD"`|ʭ4dgai%Ӧxo |6}#sNy`'ehϸfa"rDj$䛽k ' MnϨ& &ʟ,be-fcz^@ > !SJaiQ/.& o\X{ZBھiS8r<@V d"z:y{2 .?A-0^] ^kB iN8Op~w.,PX^?[Ep Hio@nqRgݪcT0F-shҴEh8*pq;wzX#nOɨ4w2Rː7 bU" *qҲpi̓WJZ?EIc! +[݉1ˆ&J]5f1bĵ0Ov#йOXɄ0l6!%?$&n-dkW2<a?cx( EaAa]ȝ-[->&.( 'FZ~e: o:Q'ZXIt^R"1JHO/G=דB*K5oZ2=@DeԲa+"R: 1ZAEvZV:.R_&xe< xw철W`^pOJ _wrJ#+}g;L$QGFd':ܓƾ;)yO=Hf{ 8N(pI݇͠R- BƟB};I'`V+|*գ*fk7MF6#MǕ&5.~Z8yV ̮t2+R# Yvצ&Pƨ{HWyB;+`PU&6,y(& §?ܶ8n!*9_دchED΅iVW~:(_ `T.™HR?fd7z;@.{>Q/I[o8≂A!wA3ބKQ^w{cct36JBM b>7I{;3Azz~M|v59Rz"!M,<7>-Ue_X0=oJJ dcoK,O+&q4!MZ(Ԧћ+H 733냕?2ڴ -iEXyȶDĖ*b<}gLͦhG11`$ meѽ1[wC3 -}r+^)Q>'@QaNDr2;-խM)ө24IXBrCnl*u ՗Y92ί$6Tpg@D~uzVƅ:(2v5$W&+Tg7tgJeɥwOCa֝f@^ DD-,/m7YQo<5.ƥVJh^5^@D&)9KjW}4'lAb 8GCb)b/|ҩ#Açi^# %V9&7?N{ dKX>z)s宱 e]F2b*Y ^^ ,CIoQI,x4Y жyq]@Xb=SEM] uK*X߮ V@?i=X8:;aW!?}z,ôlH6]"=^:Y3;4I3bp4_lU2 oLӷQ>hYfsޖ֖Kico _z1(AprԹ+ʟ71,c=nAe19@궇ewu"Vڰ8&ݵg-S yLRm%%]dU<$gPWykPT{dlZYr4`*r?]LnK`NJS o}QM_f*jGg+)৅k=0y]hit)#1BbOaw||m|̓WV6( Uy CHJ+xr wx|],>`pS,ݸe]=L9|eP챾pF K]g֎o-łY`8C0n$% z @Mg B8f4#*7%3$(J|șUaGѿ!g46hv~՟=ljONc`*լ@)K%G`VpL[XfY!!Wa<~p9ѧz(),WiL'lFt]9KSXU"`Hfu#=yuErE BT蚏鸻0M2>af5y @3dJ/u+pyEmF0To8w 8]eСwbW|V־x*`9w(bnʏ62L`ɿp?ˋ+')Dܖ>fYF.!7c`-RƍiOpy!yrMlZ0,]ޕ/ tpX8x9c$A5z ^ᖰ5fl0N7чsepc Noڠ{T { Cz.ZO}*͑پH+Fz[ Vt#-n2vքHKt7mZ]F4A91߂ zX\e(*V 4BvF@hd2ץnK(vYD.'5P.p'{̲Ka# D$/tAz$CΨQPzb孭_4ԝ<@zk±j0Gm5/@܉nzQNQk p~('+| VNn17DC(oq<CXGCWQ'z$QVO ]q!:п{.}eDsFŚ를_h/-ረH|o()hU;b5S1nG$Qf !6LNp5ay=] zTz}]ʄ#"GI㱁?΃S]IOs*{@uSQ吘VDR\R|es5aM/]oTFΆplw屈E 򩐟=wlj36F-!prόߗEԨC'PONKbHA6f vVGc0ַg=/ l8Ց`͍bײElhhaHı[)$ncY l( f.USroq_zS;~ؙg=dke:[B.3*+0vVm\>#tg!|ٚ/?0"O=LYjHwgtQ|jLnmԇjRʨ\u!+Q[&7 [HO=IJd3g+5JaF?Gkꂁ0omkU^j'}FC<\WĞ4].Zя2MRȐ_?NkVˏ 13r%) ZB<,cZ-h8=9*Qw|$t6W mNA>?|@pЇ2~ijx3G,=YSy:RBd7씯 o{ 9ziQӥ@QypO W3')LbJ})󘿸3N&kOC7y$_Rzܾ.Dr$g2QE4j^ܰwP?Oջ.zsI_eHKcv;\BER YK2PU@CGRؾ=hJː4nR~ [Į)?#&H_Ul1%D_\'W}GZ0[n@<+te]w̉MnPBXώZF?bQh$ڤh3Zp,~n)!~T J[cK)# \=30FOE>ܐa[Jl׌=,ӕ)N_yu\vK ašї_71ֈqݟl|dzNK'=G\#ZOŐϋjaW"Ds}xλJ@0WtS^XB^l”ܢ)߷hn&,JL|(W5=&+?_D:E3bsT:L]\Lr42nhEwT`p"et#꽷m/HG0%Ome bK59);^8Wiaq0DPW)#gD\(Isuo#AD$@[՘# B'+܋+2y2A-тwv% jz1}a!RibM`Z2_@O&yZ˰{BDw؊r&jmٮ;CY3MK%(ɨwrGBe/m˥~8x6eca|2i̺ UD=4ꍫD ¯}?k-H>ː{Agئ*a9WZa q[|T#sloQԇIq8wʮKڨVJkv9L4p6ػHE^~>ی#<9}b?G:b*T @H0)6B-Ih:oh\)BL "%PztDyG cU ekcvXꖥbvfxښ^Fsuh53AAJ }}6hiF]2U&6۬<.|@Fd0T/i+Տu`,.XH/HW=(ϵۊ4#l? bgxvxN=$Ux_{um/wTdPiwWVd={4r/oUE_^W}yo*&0(7V / zVI ˽s mbEYPpCKF[&"[R? DO\n Gi:9[WCvzԾ*_ة&V(PY' aBy&PwLH#¿ܞ$yU|; 85833P(B+E昽Oi[x2{Almf)D3UNc5{Ā_gýr L_1hS]C8~T;=%B-̜ʗO {h( XȚjSRvL\@Ӛ5SK2×ƙO U,yB\ C|8|~ZMtviy`y6n YQ~(s>.GZɉmBWaS+ >cW\ CkXN(v Ndp*H>;R}Auvy6ʇ^_;n4(}NweZrY%ztP1!aIuP\ }u~nbR4^*co6! tlwӇwa\| i@:k0k᭰И,V*7 v$컸L47ܴK쟨,aiGVؓgA/#ie,/|i`2:ˮq|/H~>|=Jw`BQ^ dʹ%w↣a:`kC+ƁSMq2=-r-߉ tG{]<,fU6 Ÿ_jdW$4k99aopg.Td2%;[2U|xɛ[g2ƣCTxVK9\W{nЕ* C<9 !QA P'_ٶt5{9nږP k$ _6Jw؆|&3}kiO&2IfK&T_G\DG\5(?Qrڪ^F$x:Lhߩ=9ء$鳨n']=q\9ې5[|o)TK=t_Ю`6P d|qƥșa^E;ルydZ"pSD}5baG %+%ۄާM0xq4[Iwj'5rv4u2Ucm%$XΌo[y\0wWO8ֱTWܷG3rw{mx,TZU"䮤4Gn4ۭP QѭY%WWKnkՉ3Bp.v%)ط/j;k]YՅ&wEеeimbEv2t =L [Dף(>8fXuռNƎU${Rr$Jc$ˌ5x]sbf)z=J.MPѿ\9 |̛7>mFNДcDž^HKHs~Ĝ7"Bo7Оg뽩]eXb@oI{z7њKuM&b E:6 >m1 Ѿ.i扴M>?k"8LmɆ۶mvǶ7m۶m۶͹wf+z*aޏ xGg,*_÷ν̹|4vߚWu Ƣ|Kn1}Lof,0)mϕ;'ȇYu)$ '?yNbCo;\t(O".a C4 e7m5+&cVɥ!yV9y~xQ:LJ-rM5!(@_1T²[;|.RrQDrew%TEGL^B9}K?7h'V'!sf~34$9nMubG|aQm=1&Prܷ&bm\;y ƬFuC729̹ 5|YE|s HWNe_z}'?Kr=Qr(l o^ug"5F{HM1%S~nN7u*ڕ3ajmKXC8ÐL#$zjeͮߓ]d=1n:g誝6Vɢճ[4>R '!JM g3zJtrQ>̈fZqC,3gIF;{ oqx|AVqAj- a/g=$\حǼ}L1g޵ygJofr9LR+t`u5?F%B]wC_ U%[W' 5d w)<m̸Iɸ` eV沶ʭ\ H}<{MlHVS BBHCӭ#a5 :9DŦQU#\S#;w;}>} yټ2n1tM,gSid?95 i6M@ĠW:dJ4{-%T1Gi/X3`^mOMjPQolU' qF"rWLj2R9#49;'c.YF]@?;M.aT#v qoY8Sz`C;UcvI̶{un#K]/6j/τU8ڬ,b ~&!"O|\> y(i$Rds5I~Z 77{,rғR#Z҆F+*͟U7]·≏Nc'0iVD}0W7R\eG8VAe92G.*/׏kZCuw\2XhvO7LJm+@?Kg:]Cqe K\ܬUPƤ~]['Z`맩 GiDDE{nic.ީ\uMweawĪthz8Z0@g'Retl|=&+iy*|*p>S ]D+~,NׁWw|20EdlSfQiwp!is)ds #>oG܅,>m5$-|0=׋%HJ,>䚗r2w` رG/@3g-<l 8%PUJLhEI̡"t*S҅K* !0?݌t1_|s.GRCܡhfY\~sWuQ z1b]E\:LPܹjˡRGL*q$̺BY̙} Nƣ Y4\ɳ/NKI#$;7q"DRm –aޭ+A8me ݍ.Nyr^߰UgzALJʻ}֙S5kr.y zlӘo'A8O0SW{lVG^2ھ6&:Tӹ 6+a`iĀLoq*8&MouI`y3פjIErlҞ?'A^laWI#7mK]<%o w^wB=r/ty tc\uqd+0lfې*VDwACjG+]lIK`_\rMfq?qVq'46H1M*@0;$= FBA]9 9p1њtJyGoj|=%׿\R0V}u9&ٜnԪ|%OWn>;?@ssGf+bKc `, U:p"7>t$g[3t" ࣬9f4:}?TN߯>K zD_^3^6tRg`߫»DBP(hfd]Y FbAp \(z{{p U?SIMWyQ+ ^mtשU UL˭x !%ok}jIjw3;k#A}7"fb<ۑuzr~GHx̅ z`3A6cd6Z 0dፉpd"5)ՈLzdURtv>| *r!D^z z]x.ӜX_SsA067) X/PIAʭ<+'CLlSVC+B( dS O }#9M{:2UԲfLUJ3V /Fia|ټ!; !zg&t'rZƉ(8,n`B&t`^V&t.\O|-<*jg(>}*mL[6ؠ#KaDwٱn;Pѳnz3!` ،)A1a|l:*]]hA$EV1e"_f}PV( z<^>ߛ^-]7$kr׵gi;tK A o+S}Ei;(v$L~JGF0& a($a,QYdY^,CoHG퀅<ƒ''=NHYi>TQl?]1p٢FP"l#.lFVL: CC~`#2m|w" < Sq?+t@O/_~Qx`]&j0ϥymu[x~h$ v'O@GZ<ŅI2޾AFexO H]cI̷7ri<bC5 iq|D}N~_1H3Ӿv~uN|JUXS:xS4 2Iȅ)rٙG+U%8fږz0es@th;9W-Aw%R [׻cTtΠ]5}Ϡ>x)]ZP!&%,%^^ߠJ?̞?Dx>Q|k!=Mxo aO+]GpezyPM}&J JKm)Y$ Kaz~U>A%)ǡK9T 'b{NOBuQ1m<UOEa#2GGs!Rri"B xoQ֑njך  ;t"`/5;MВPW)x/c׍gis# = v#,5cO $:Eć.uPcn#YB- 1ziLQ3J /#N3z_Mܘ#]>B~YZkB"{}e P" vc'1Yj:/dv,zwrȑ<*]:\O-!,[Tsxf؈Zdbq NVJ|޺,6)v˦ع$Rz\B>|=-:swnujz _d@'Lc4 PMb!܌_ztS\­I"vF5 M{jJahL 6pܔiuiqhCoóYh}*u}Ro"Kw Ź )q.]/@Jj3Gq]gcf:8泦p~sFoy"R(M.N()#nxb鋸Pu" pEurt"wc䞓E³!c+@Y1W2ȋMy%{iRo]~af77 dm?#* |\ .qцbw\qۯjoꊒᓲfau Q[w@kKrHwfe"cDbCюj\2ƼU96y$|w`+CPw 9>Nzm~<CUna-1bL\+Б@Y j!*ROߊ)ER HmDWRJFXA Oka03{,xS?jzE|3|c (uB, ߩIv Nó».մcwCyֳڧ n,g0D/=!%՝T9-VBfnO&-#ۅW=Zv!^^ƦL&rSͬl0GЅ)6B!2zךa~]dH7CS.+ނ.M/ Pgű q`mN޵rtBn H>;ݳ,h2H,o%C%g>-%M&;mÚ @\Cç:*&d()}ae]0 hii.N^d;lp^/k)L讽;(b 70>֕F W6;1j8B6j*mmndHT94QA}Y3mE#1BiT9xCyNoHQaʼn% "}Dr˜:"6֯.I}w\_WT6]2U/y=CWGV:B%ILrp^=)F{- Xp1TpR i͌!@PE"Eg .!a!B. +CW^)IA4'V%^ҘH7|ҕwՒNd6sh0Ô^? `>T2/huE,,UA+]b!Zf")yZоhߺ`9X.y5FZ93DaL9yc4tMUa"s`8Oi[D|N5]DUķ$9 C/:|%y_G0o0xՔB7LKO2--]v0M ^Q.ᏴRRD /leW`*Ƭz4X2hrQ=͎ЛRۃOtdPb5KpiS0ʣn?gؔ9A>&~~$B}/֞(iEZ Ғo|9mnsM '$Cc+/<_-шK8dš8+|_CЋ-%7wm/Hre( !oX1!SW3HRMYwu3}RxYγ-ƖZ1ƽ$ B򓋆;ZS;Ux!Hd5$\~'x `uq yO7?x ! p#RO~__څǑX|rNBj])PW]OtxQ 1#d[ί9 }S2a!Q(M U ν-ON l.EBcK;)L>N@5vEyUAQ0' O:Y::,'dS^ɣ́vꡖxU7i+N)6<ځ^ugCyg sR TXH) Ԟ:}|шXA.Az^N-Ӊ֟6aq_Dzm֝X;kg6u:'ؙತݹ5G]LֈV['2cG@nYEL!(49YjtYCh771LG7nYZYrL Csm*΍Z*C/Ij$CB!o60aR1fK?+'B!ֆT :.ȡZH:.xk\lU@b2VٹpK1+9.^ce~$b!pX**I*.k) hDr~7#،USNL#Eo23:mäx,54R"qٵ_`<-0{E`7L\yb=)tWr w 4>˿o/z*$'G<03'yH_֊pao4 $ ?̉RZgH .!.k[ HHH0~;}#d 67l~ 2i:d)þCC?Tp'ku|{\ &v)9e2)>bء5`nút_-wBkMi:3߼fi+B=$, 35DSFM;HkKEjL)B'y.5Sg 2PDӁUFha2aCZ D1{ /KN kgJ AgZgu1[IPouɋ j+#g}a[FHsyW0h4yu* f4nR!1u ˆ 꼲I.:3}gR't_aNFi;KCWB P v&]7}*w]c+7Ã#ݰO}6ryH W%ը#j c)̰dw=,H)d_ǝuH \†PӈǻJHb'X~ay&φe9#kރ #$Sk/XߪO][R1&LL3\kbϗ$gO)%M7<yRݱ5%3Chq.cܤǞQ Lf"ÆoM'#\AB,zEdhӢnsG+l㞊|~)6.tRNff&ځ{:%S=,&oBXo)ý=y؉5rUhh2Lk=nyG/(74"eא'__[9cae'yͩi^KUr<d  q>hZVxԦZ3es[羽 @МYơYRiG]?A+<Z[77Z^IXm< \\ ,EQ5X\k>i|yur5w.oanWK9ksaE,I} 8nH&(VTEI,N~s;,MJQ}Y:e ,eδ&,3nPI^UWH/٭}B@k2I62<;dŏ@!iln=3hxga@ǽT~Jɻiȣs,#'BMP<;{,_IO 9T_DY@vBӮhR4YFQR5a1Ň>\)g얡I?6f]ϟH$Gq@#gv>xKK&!@>u2E)kx㇃nr>ڥF M'sk4һH*1,DMMyPJ%a-oZDQ<_AGEsdy.',d ;6_-|Qz9qء82?rKQx5u3D@dv!z3n9D|7E8@-K{ͤN37D3YJV.%J>ѨGO,MG^C;_[zN֙sdY,36Dz+M!EortMsf WI88C֊#DX<{ 2 ¹J@wvIä*xRd2cqӡHCI-f.ND֮=OWm3e2J|VaWfi! vI""f[]h^c+^]JV;l ExqT ,E?x9 # H7LFUN\4cB}f0+D*eƘ`*c}_#ofI(EJ6VЗ4GCI)T }D[A֘p,JXgL ]^)ЇB{\ XxIX Ÿl9>Lj-r">u*E71I~8☯Ҵs[+nQNVaOHnR^tJm*&b@t/A0i_3LA=MM?$zH?I?ڪ:͙* +ק ~X#p[= jJE/ji1DVtSv1J2q̏Εa-,/S*6DCnf"l R7E/tk(I2å WokttCI^Т{ U5vmJ BʄEnMr)*{1qb2 8mp:Q\S좷*䢒鮁 >$z4FVq}6rcfW96e d[ߔE9֩:5iR@E~V++lMʽ7mCy?.-nVG3 (Mh}wG.Ƙ"5n 痫 W΋H"gpX*N=- Aybֺ;rxa(c}T%}O\])JH1Yqr7C l > stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 39 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 40 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 41 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 42 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.R!W3njNylܬ;WWМ~8׺2{SlݤMƓ7}zn݅9p/]A:fzfэ4RS`)?>RTO)s}`ݷp@c`."w( 3&TmL2ws!yva`TG?y7{֍]? F`RޗS/~g> ilXc3t5n/.XjR˺^o3L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> endobj 10 0 obj << /Type /ObjStm /N 27 /First 198 /Length 1785 /Filter /FlateDecode >> stream xYo6_ CL[Io~[ZyPm&XdnЧ0.x')EI3&cB2<)0LkdƌRL faR2!gVXR+)rS9&=0r^1Р3W4dj3f61f`1XɵhfbGX3`XmU "08_0oW*4U= GaZ{'6X^:ԏbG#=b|4fCi @u59-{ O-;]np+t]<6`\L;L!56~;z2; S4f cPDD(;+ +hZ=l funH?: ?XClX*n! a1J8Ct4W z Q8Ey|;%,ȫPCvIvriAc6Zk$J|ArbžI-0g^X4?vPw HE&J9Q M (ݭ /oƿ]^w|'լ,.EsJ]~z~/Es>/W YKEj?\Um Nޔxۋ:~'+yiTiҦoont;j ^9sdMGPW=m ~|1d~N$7yG]^a.Sf ЂSUU=ˏ_0l<\\Jٷ|/IYlZUևbEt^ "uЌBlWVU*fOCL:ĺsчǯ=GGv7No^}sI^ϰKUZ٫. %|XN?$ʫ#2;.&CS:,6r(\C2~=5,uK>Oi9?˳GRv \|koz0܆ AINK!E)au6-<f'FҾMR̻[ȄЫ^y irƐAWLH c-^wnTM0A*O'崽hSo]FƸ{^RᎳK75~=GB"ξgB0 ## <1174E5FA241004B6DB39B3BB42747828>] /Length 156 /Filter /FlateDecode >> stream x=Qs0 H,E.[QkU( A=_=~# " 슎hDAD[I w(PTDUDkldU''ج2X5lo$K֞pv2$_[?c endstream endobj startxref 130602 %%EOF survey/inst/doc/precalibrated.R0000644000176200001440000000337115147136373016273 0ustar liggesusers### R code from vignette source 'precalibrated.Rnw' ################################################### ### code chunk number 1: precalibrated.Rnw:16-19 ################################################### library(survey) data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc) ################################################### ### code chunk number 2: precalibrated.Rnw:24-28 ################################################### sum(weights(dclus1)) dim(apipop) dclus1<-update(dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,dclus1) ################################################### ### code chunk number 3: precalibrated.Rnw:34-36 ################################################### cal_dclus1<-calibrate(dclus1, formula=~1, population=sum(weights(dclus1))) svytotal(~one,cal_dclus1) ################################################### ### code chunk number 4: precalibrated.Rnw:40-41 ################################################### summary(weights(cal_dclus1)/weights(dclus1)) ################################################### ### code chunk number 5: precalibrated.Rnw:45-50 ################################################### precal_dclus1<-svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc, calibrate.formula=~1) precal_dclus1<-update(precal_dclus1, one=rep(1,nrow(dclus1))) svytotal(~one,precal_dclus1) ################################################### ### code chunk number 6: precalibrated.Rnw:55-64 ################################################### (enroll_t<-svytotal(~enroll, dclus1)) (enroll_m<-svymean(~enroll, dclus1)) SE(enroll_m) SE(enroll_t)/6194 (cenroll_t<-svytotal(~enroll, precal_dclus1)) (cenroll_m<-svymean(~enroll, precal_dclus1)) SE(cenroll_m) SE(cenroll_t)/6194 survey/inst/doc/domain.Rnw0000644000176200001440000000771611457435610015311 0ustar liggesusers\documentclass{article} \usepackage{url} %\VignetteIndexEntry{Estimates in subpopulations} \usepackage{Sweave} \author{Thomas Lumley} \title{Estimates in subpopulations.} \begin{document} \maketitle Estimating a mean or total in a subpopulation (domain) from a survey, eg the mean blood pressure in women, is not done simply by taking the subset of data in that subpopulation and pretending it is a new survey. This approach would give correct point estimates but incorrect standard errors. The standard way to derive domain means is as ratio estimators. I think it is easier to derive them as regression coefficients. These derivations are not important for R users, since subset operations on survey design objects automatically do the necessary adjustments, but they may be of interest. The various ways of constructing domain mean estimators are useful in quality control for the survey package, and some of the examples here are taken from \texttt{survey/tests/domain.R}. Suppose that in the artificial \texttt{fpc} data set we want to estimate the mean of \texttt{x} when \texttt{x>4}. <<>>= library(survey) data(fpc) dfpc<-svydesign(id=~psuid,strat=~stratid,weight=~weight,data=fpc,nest=TRUE) dsub<-subset(dfpc,x>4) svymean(~x,design=dsub) @ The \texttt{subset} function constructs a survey design object with information about this subpopulation and \texttt{svymean} computes the mean. The same operation can be done for a set of subpopulations with \texttt{svyby}. <<>>= svyby(~x,~I(x>4),design=dfpc, svymean) @ In a regression model with a binary covariate $Z$ and no intercept, there are two coefficients that estimate the mean of the outcome variable in the subpopulations with $Z=0$ and $Z=1$, so we can construct the domain mean estimator by regression. <<>>= summary(svyglm(x~I(x>4)+0,design=dfpc)) @ Finally, the classical derivation of the domain mean estimator is as a ratio where the numerator is $X$ for observations in the domain and 0 otherwise and the denominator is 1 for observations in the domain and 0 otherwise <<>>= svyratio(~I(x*(x>4)),~as.numeric(x>4), dfpc) @ The estimator is implemented by setting the sampling weight to zero for observations not in the domain. For most survey design objects this allows a reduction in memory use, since only the number of zero weights in each sampling unit needs to be kept. For more complicated survey designs, such as post-stratified designs, all the data are kept and there is no reduction in memory use. \subsection*{More complex examples} Verifying that \texttt{svymean} agrees with the ratio and regression derivations is particularly useful for more complicated designs where published examples are less readily available. This example shows calibration (GREG) estimators of domain means for the California Academic Performance Index (API). <<>>= data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018) gclus1 <- calibrate(dclus1, ~stype+api99, c(pop.totals, api99=3914069)) svymean(~api00, subset(gclus1, comp.imp=="Yes")) svyratio(~I(api00*(comp.imp=="Yes")), ~as.numeric(comp.imp=="Yes"), gclus1) summary(svyglm(api00~comp.imp-1, gclus1)) @ Two-stage samples with full finite-population corrections <<>>= data(mu284) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) svymean(~y1, subset(dmu284,y1>40)) svyratio(~I(y1*(y1>40)),~as.numeric(y1>40),dmu284) summary(svyglm(y1~I(y1>40)+0,dmu284)) @ Stratified two-phase sampling of children with Wilm's Tumor, estimating relapse probability for those older than 3 years (36 months) at diagnosis <<>>= library("survival") data(nwtco) nwtco$incc2<-as.logical(with(nwtco, ifelse(rel | instit==2,1,rbinom(nrow(nwtco),1,.1)))) dccs8<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2) svymean(~rel, subset(dccs8,age>36)) svyratio(~I(rel*as.numeric(age>36)), ~as.numeric(age>36), dccs8) summary(svyglm(rel~I(age>36)+0, dccs8)) @ \end{document} survey/inst/doc/phase1.R0000644000176200001440000000367312242737227014656 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/nwts.rda0000644000176200001440000000050311457435610015020 0ustar liggesusersK0ъAē^n <ŮjaDMyT@DyKINB"rqi y>(A9W݅` D 7|UuyMG`i)Ǝ>]` M >xS3=p͚C0ǭ7KKT17FQJU( YUچ^&d tLb8JjJjo)⟊Ye2b9a9e9cq⁵Zb-667X|Kihot A_lh~]m=]JwMnsurvey/inst/doc/epi.pdf0000644000176200001440000061337615147136370014630 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2083 /Filter /FlateDecode >> stream xڅXK8W`W^jQ^3A`09L@Kt= Ǘ[J*~ܼyɅHPr-D"II,(OrYw\.>UHHԽynz<Եic3/8LY/agYطB>p/C]i\F~J>i O ZxݠӅr&AEIk!?b%~ bl W n0*ewh֑?lˣjTu"+:1HYݷxt+Lv-,RVLۡ4g#0v6ϥLZڽFCr'" *p2NT1TK6.ǦǾ٣wAтm*;݀\1x7eyg( z80yJa(ATnHTշהػti XbWtY9aPZRpvP{֕f& /ɱr.ϷYS ~<:"Ek(Ʉ1RyJ@Vl OO:C!+;dcf0|@.LX3ye#L\53.n<HZVTXqlCs+ ?0|;7ۧ5w³*yZm0Ǟ. #1ӺO bwToME ɋߏO?#rXiUߋj~ tp7F]tՓ%FAbӯ&b3wȬOw6@iY+.Z%O֔Ok/ JOE0{5X\~k_G04c%XܼGtOSˌֵg(Nd/Pm\~n 6WxͅVW5v( .:/)xjSC&AEAUnK{3cdQ@9?$7ܯ endstream endobj 14 0 obj << /Length 1481 /Filter /FlateDecode >> stream xڕWYo8~ˢrbIlS`EQi@aHrRE~,G9!MAW$y<[nf"*Nfqr=;x]ŝ}lUW7vh\kX3Td]]¿*sP*#<+8%)S1JwucZmG3zEY&_s#$:RXuY]gIPc_> 9Q4!Q AUjE1NFƐ`$NSPa\@1B󇀇qN|>`Lg$S} JY>K"H8PP e;"uKVCȠիgf­W(RW-d;E|f:8s/rw[WlΓ_Mvtgiu3T"#xv.γ5+]"lw9s߭~Z <|v[2˫n`D_l< 2zeܷnڮ~І.z`d^;'wEҥˋ,qy1h6FvI&2K St%D?  cd$6b$N/Cd( {֫U_mmρEՂ˻|?U"˟>2QZg`@^`D2G>v_Ys0 xn=ٳk Om"At|؁e{ntzO/FbyZIbaronxy_\F܎̅՚O/VH>+PsBZ~995tgX '#{/3lh[i`0.7Ywb_L!(LZL(<0JOk; ]mp ]=M%|r" TqdDFϐIԚR`Xѱbp#K$naz$nP:֍'@FãaDTJ&"\LT><9"$![B0ڿ#TQgFOJq`}Y*<.8s4n7B\b( p%܎XU qwˡpXҦ rwo1+v} =0vL6(˚ď&\/7o'"Ӈ+}e8 GR`Jdo_&/l[31q*al᫒ ӲA2W//_=W endstream endobj 17 0 obj << /Length 1305 /Filter /FlateDecode >> stream xWo6~_ʙ$*.Zŀ6M;dɐ#)r. u_S6kv׍6$m6Jp:+>Rit-L^lLnf>j] gɂyygEgv,ڰF֑Ybs>[UfWd>߁lvMV@s_!}Um"Z:epLe!fl{y&ϊ;ǹ=C7O]Vgcy9unq-:Q>떃 ]QpC,\ ^.l۽VGٷirza~,os}{`3|~3dǯlc"28$!{W*_4 9aT ];O62YKe19fΫls7a:G 5.iX2c*cx`yDP;'@wc?|B!KJ$k c,JdActHO4=  x s`a&%&&{Nt&>/9:)w8Z:D[f!gNߦ%T&y4|)df,2R8'wPeJQOeWhW')MUO5I"=( "9|E\@g¥/p^MY'};YyD̩q^ܕç V > stream xڍَ}b] a`C5b $5{"Ei9}b躺q6)2<+nڤ7wۛFBK&P;~ȕZXSF$Nlnjk`M1.JeVMrV*.繚?J''.̞*my Y+eLLˤ,ΪfF0Uɴdz^Bl:l]9Z8q~ 5a i9t WEnHHh}t]C˄Ǫ`71 ƷF7Ok>9?!vTIKz@<B\:"YM/>s0:O~Kb,J.$Vpv5'_"H_S1j8hN c2 Z2+s܅)F% Qa56zǀdLWPBgs/jXOP5uz[K#SvH|eOiă8y\E؄#b8KLHX}LXPU'^ /L<5;e%,~>5irưR&[< ojt %ڃD`-$,e xcC}ȝNz%_<d뚅[Q~q q 72Ѷ*FQreQdUĤǪF>0; HΞ#2"]ōӁ?|3[ۺ9m@ A7a+>XupVfr˵Ƙs vzbr2 PDQⲑVElʂ7t`tzi2g?`h^؄q Xoא.{7&`|tv8'. ~_rY5<%1SRR9pHpBó}{eҸz,]L,<Ч MwMlat<*NԋCBzMBRcyђt 0.zF>hpϣ"/ߜqbn|@}4EǸ+tlwK3 ZsLx1$Aɡ" 6\1e7H|P\R+ؤűg!q&--bZSZiؖ29qb:)v4W܌hc33^I h<(v$)MnUː.ī-Y[_Vw)F\N"+'B2 mZB˖S?OA8Ja[ >6хlkO SC/iGe`G> [ɿNbB&.O^i"a$@c R@-t(6JPzgA٩> stream xڝWmF_aEQsf.,ֹR5RST)WUU E;3zcvwޞyvf٫;SLŸ]of*`|2u2hEasZvUh oi}r\/qF_봺KiEMVU)ɊVۨNF[?%v`[y+侴*2Tk}Xk%ܶfי39gJRerRҵbfs[:z]#ߔU+ك$j"762܊9QECƳhHA.jPc p,&BEz_庭ܫdݕ!ȈeA@>,CzVQ6q~HfXLT a1]fY!5Vi}Zs $n5r \&U(Fr Xo gVX'G:\)w*X{%1 Ez~rmYIZg7 x@hvsWb^Y̒UՍPˁȘZ:e+*a tULs瞲mzʢe vÛ 0 ő}(󘐒;sTj;r*2h0Xw`9HGs-{3hwr`F*=| в\jZ%Mӆ" }c\:!V{ Im =8O9qTx0wиg*0=p7{bGt{-kHMNl[Tu/MZ7+RX]! %*T0])ΥGw8zl-ˀ?2OΘb'ky|A_/W:߹JzRt=#G> stream xڵXo߿"XZ(ah=>( %Uᐿf8#YNp~1Eg~M훷urEJ4JT$Uru[\+g^*ԩMo~ bR"24f&2Hf A"H’BFq.)(LIc8NRmbYBaVAS W ,,d$fJE :1FZHy]Mv8Nc<%lVL\ͨaYL!aC9XUTKzQR*aMzH#+"k%^ZLP@]լ P 84AFm״0Aӻ:>%|n:7Mu98fKb82EC0\w#lB\5=Î瑆y?;Z>z޳ŏ]^?8aNx;t(>L60b]wGsς)"^ 0qXUX!8t~ͦ 7quSftCY^,3(+ѵPI[ua7kx Q彫z, BlLr+6sXt7\hglhn%3>h$ۻ=RB ߕ-5BpDe),47N{^҈7'e 7qC>h) ] l%SO@C>Ӈ{ups]Bȩ$ALpW[hRuvwUz#υ?k?~.Nc@/6Ͻ_\Bo|\bbpH w3/ ;y,=ϟK %>yߗm3< \LSǧ7H{<~:tcɻamyUE }vMWWK1i397~_yUxN{3Lzz%G3ߎaާG|W$ g 0 YgJM,@06UxO8 ;Xl )BeeToxMHUb')*=6Ic^ëf#(cLJԊl4T/bz$+yQmW5Lu$@@:ɖxd5'D@<=$B'bw5/7Nfׂd`H7 0% _$TL5BhQv]GZ^/+H2gQS_W쯈\7,ah͒5'V Ӯ>-U1v_)2Yd% |o>ܾ- endstream endobj 33 0 obj << /Length 1687 /Filter /FlateDecode >> stream xڥW[o6~0=Ȩ*E=`: Cїe: DFѓ8^$Y݃!y7W/.~alJi:H:KCU9#+dv KI $a3^l+%fr3zaF~eƆŵwMZ]ԈՅ#Mg6gաYylE8R× %Om~&.vJMm]*YaW }cPpqGm .F F&Ⴑ|߱u74i 8cGQy9[S10Ŕ9#L,ІH2̍"P 6 ꡅ܁-xe Ne?.V u*-j@k[|79.^fA̗yZ`V(ljhQ LՃgQ uPҰaCx_0-`^bG[Uo j|'h90O!yD]^_/+ rvuM-[wm FEj~wǝ{' 9; 8<}Zlz;qp]v[.H 1v @nD,av_iBuy v9, Nv0a`$z v}զ u`/i$]@ki(N xJGL"R2&"glq(t+5@Gv1zRhV4ˌg!A3V ݰP^FY9hNI6L1$# @Y,*H'S9PErJr#91#$',<]xQf'Yx;VC35J*I= y8 អG\Ջ b endstream endobj 38 0 obj << /Length 1642 /Filter /FlateDecode >> stream xڍWY6~ϯ𣌵&$ml$ mSMȢ!IP>6Jp87Gr7n3\̌LH=]~̝=сWɘU5yօKL]_ޥi٬҄(*X/1+eYWX k.E\af9H};ϵޕ͋)*&ȷ.l mnγp%a.>UӇ\Ultt} bph/8sμ>7pvz~1 -ŭ؋#mSu}/ $c.}1Ͻ)pp:EhA0@ܑe]_N ?(E_/u }7],_b@. %<}e 0qyehSLHSfư# hMn) \qPI-V[V π=! ƕ02)f#K32 c"A^$]0.'K{IiIgJf?5$3a 5%6Bh6\G͚Ǥ8EM=??3i+?Ŝb\0t*x2Fɼ1VB0`Ay!Si9y^aYR9d5iއĸJ ?RB믒jFY/gw5eJfl~lK8V҇]bvlIv $)W Іf:b>9l8.5gm93B% {5|xr/hj@R؋ D}/[*߆{:J|E}IYCjE>^x,WTͲkZy LH(h_iqoT4kﻜ l0lJy{?Rm endstream endobj 52 0 obj << /Length1 1411 /Length2 6115 /Length3 0 /Length 7078 /Filter /FlateDecode >> stream xڍwT6ҋHD'{GEJBIB ޤ"RD Eҋ˹k}ZɞgfhGxL-xe?G@/Ir׋8p;i4j 9[!sWQͽ RML/-1."5?nyKu,4)p)b8LFxev?6C3qES z,K~fé%K, * +zUr\~??;W\}@{"i1iSv:d}\'CQl4'qNFu`o%En95~s?zeiE)"Rv;y$!m3= *]/Hq/UQܑCwsVJN6-+ͬ6|D~5̚X&`φwɢ7X_22x}iZ][~K"ppM>[.Ihb .3_,z7rpęA^mҥ>ݾn݄'f鵇+SSMAwv/̬&Lp.'&1g\]gi ׯNeNxgVl J i]zYhOA}̛ӿ.XSu: MuIqٹkWQɋ M yL',.K@Z|Lrz "\ߟVS'WT7u=3=o[\mtf$vXȔsx$gYhp! #6t{B3]CĦ*&z;(gS9\]m\-ɍ ݼ-ыC#ѭ̛326Ҵ8z |`dp3vߠ;*ҶdL p&H{& h"@|)B)ޔdߢ+O7;f _?ou3=sSc8K0JUk/0pIzKUZg$fE5p|=Tٜ7 1K5= [I7ӌ%)vV 36Xlx'b{QpBC̮[Td }'ج}=1/\D nr흷}Zofcͽ7iVf,1ZeY1&'F=५K)#y~)[cRn̗~uaUDAT,|.X etG\S!i-SA6Bʃ|^=FWQm-s(WP>I*3sj䍏0AI~Yqx2zT!*|rυ0dtPgJo= 5\uP;:7oX˭}b|8/,]LQ_(}w*Cc(^DiNphPsP([fM]Q| 1M2R|骹L&\Pmy-,qKl NguEzJUeo&x *[WKTiO^B7HiW6f G&ej> f)IoYic'N`Zm1@ȮP*$W],8=а^9Kgp,Zոg5Nzvz|A:76Ѳ.&T`{QXoGOzgXrFZ4%2s.g5Eͱdh]+K$5hPm}H=E3 fYJ8v39`UlⶤGOv/0l[r* N6X%wp4k={*O%42Nb:Q< >ș"xp:脦:B8n'TnpqRX%+^P6yk+ܯ&M-7_=XYvxu#I62X-Q6f"L_꙯(Tcr;Cj&DESFAWEn=T3LI'Vipj9]Z;г6/)5:k$7M+>"N%ZE`9f^n0fK^#l5ߕcH5}V(GӎSXe^Nck`r!3vÒU~)Li>5xI{QmH*L\e=T+9tu)*"FdcyIQokBٟol~17 Ly96/&97ƠfGKS#uU=`^; I ^dbcB3NIU5AvM/KH2:y7^޻#oY"$ ݾ)u^Q (j<[ureA0U UEu4+n?Jr{>?IѤOr_! 1@ʸ,opڎUqyߒ*?.ljyLגeʹw% cm麝/g+OOtbnBORsۮ3FQfj>z#I-aFqsFV\!m*͈FJA{wȞIq!9VJ{3iλvZ=Kf_$U_G3CfO2?f@j-\eok*9/ؗ̈?^|"n@<"iMy^"ejtE$h 2ϓFvA1/sMQD׽_|a8 $&NCcǘ)(RG$w43=0m!Wf]މŜiׅػX$ܽeؗ(s<" h.sr /"OnVڊc+Q9`U7X_{ȓ2.VnV︢{*)dГ8~2%:EG/U9dEjlYbыc!f+̀;5lg FKaoSӥ& o4%0HCsɢ{.1YR{8_9n1kK{$TdK]$97shu>k)}YZw ]cƲ؍'h@-;1x'|ՙBv{fNh BK5WP=J>@_V|HMH8/neV*^;4LZBBa[kD 8>|?TP9(Aop3h Sjmd.=@lKcʔS{ieS8zfkW7[^toGf"`űI^>6*_$RL݃&ҒO8n.),NCf-+dIϞ{ 5Yc2.h?Ԡh]Jf8x ;@vBnr]4./=%/<(,Ա%$𥭑aT0FF͛B1Cl]oK"nl{V\=҅0CM|&e L^ Bo= ޝ\WaTes7 ]oB*Ζ;b>p^\ʑtw@@cި)Z;H#6O0RVS^MY5a j:̤m>K"~.W+y3wN;S9jHYk0:YK%@4[IKXr|9K9/yO> stream xڍt 4o76KKuƾe7}:L !"Y"55.{Y#k<={9;_}}>77 Eo`,6C`j@u0,Ot|DHA`@ ##|.FAjh /#@de~*p aXw3 pl?R)cr~~~"0o4M_C`7 w~ <&qf?zS+x Gy#|P.p /jpg?B߻ "+;(7P=?V\~9h|<@œ;Pcx'[54[@=<(7W 6{C\(_Cx^>pm.x?:78Ҳ ;Jo mR' D{!!W8 X<$) n?j| ~>F!{7͠&&MU Ka1I02i!i`mXm+-ձ_%?\h4_&}_qwԂߞiZm%it]qG&K~}k*oYɯ )/z[&%|Ý#s(ЯMM;nȒr. pC9NL$XaV2mA}:A!A7 N2nbbJG=8TX0a̿V9)+"be8Tuko;b j: !}YC-\6utþE뭧&d?9(j~VzMw} |piaWDž˗JJ 6SrOq؞ Mpm+BOdNaQ Aw@2ĭ6%? )6x77D=828wzt{;]\1_NF^c xPNt{AD(]/i^r{WfhiW݀[Gy"%yq=UᝪQm.Ū_G%~1]IGg0US%‹Vrf Tf7z^ չy u*Dۍ2SfW&VhxGp)CI]XT^#hܳi`+YbR|J|1;{Akl͌JĵItZ@~oƌ^ Hr֭Lc޶3t{ Q7l fՕb̿/H=y_3Q|5-yQ=8ct'FXnFc k]2U82a^Ί&F9rԼsg*uD*tz t8 iDrpɻqE/CG8pzWzRP 8y+ت>˘rߞɎ-FVUuRҮtCw6͓w2F aؾC- *Jyښ4s5bDCb`0d?m3Vm]ݲ/MÁv]7e'X;:Gϭ|f0Ͻ8řo=4l+2YQn,FfV#5`r.V1CR)m#..ϯǯjlֆ=]q,d̺ݣ.\EYX>T\xl<8?n+y?Ee拘: :*iYQ؄0UA.uHmXLz(I?"eYߘnt&-u6hW-A|=U/x:9׿y)W[+a/r?#8vL[#mIMukD6riȱY.+6%iqjY*yHҠOM|ƬQP$N8g2A&c$63FE N*gh} ڑԳg5R,ꯞKg7YdʆLwoخ.8SkTQa{/9t32gziwr)) 1ӧ"}ȝXZ@2m*Z A";6XO .JD阘cAg[igar]1MΙvgX^P6ϟz^d?-Q3LOsTmfa|l*մ)]ͅq]Emnl6۟.H'3%߷9tp;x_oW5A=iw=ӗ;͔`TesѣjJ mXBCq  %#á|$c vc_})p9{s0ɬ@C‡9Oi#iqDM/d4(4,5vq'B Fm\Fq#Q޲ф %l #9ރ{ٕI\#.eسZNGI!),h+>:-qxNDzUJc7-1<뱭񓖫PŒ{␧ϔAtBIȺ zv P>vRAuP/\#w}nD0ފ*E›ʽTsX&B~6w'K_y&a-oZZaBfSEQ'D:z9 d|)ʠOi* ]htԷ; zeyvd|-٩\g\M't-vwP7gRo|F9)=  PSc bt& v}m̈sr6z%<`_;Σ"M RpJc_*TK?F?CLw·݆V+BX p(e2oDv(%V0=Ԓ#$ZudrL_ju,KӳǛE0FaZQH-O*'5FXr=Y>e9XlCrIMp48y*IԫVymƾuQOo,thS:/ӓ^.n%k'EsPʏbze߲0ND՞D|!{:SBReIXRڇ%TUWC ʏkq|cy-8blUE5r_@9,2n}r:j*VŀXXTa!jҍ.NÇxG3RSej@W=c) o6`G4^Ԕ}"N-oto"4{'.<,x|یv;|BUآO8Ij${Xy}.WZ 6]3aw]0/Iџ}e$i +Mhy ojݬ,7y޶bd6ِRsf]Uu7Tǻ@뻃um㬅1Ŝ$}#k͢~y6ً. 0Z0E)K%M3)RdFTwk݊νM?ZiQ)+t&ϓRv]ae"smšr1_FdEkݴN0k"`\gf`6_VSڜRN!x+baTKy*1ܵ/vZީ/oX oBz}82I:!ވڛvUo4}$4I!/~RaE Qwo$CJP1?CY>d+LȊmfE0+E?䷆6zuD\K9ouER%Nɹ*$؝Q֣P(ވ 7+ͳ9{њ"֋]ک^d{^U$~IK?x_qQ!F|4܆pӺ:+jNf*L%=6 'l,2v~(B>) nvRgHܸoxr[N5XGs 73X13-vkI緞7Wم!3$جC"bm wz~7)m(AW )HM ,GH%\k "co.ۛEBN(bnh(;7!W o7|nYtL`qHo 2 JꈎT2"Ma˞2x"eB Ymp`-g=ٖD]> W=12TwO 2Khc?{ ͹ܺ^P[6ENAQUNiJ',pG_X/7w Wȅ=^o%lR`~4bƥz,D'v [ɵ #`Ow UV0gMg:-B;Q}O,f3@Nҍ#+mf̛];1,=WNaP?j*){0 a<.u-۪׆E{"v2I .ɫU~ QtV{<*.jWEcC@·B@O ] p]ai%R&oDC1[bcZF͌el֋]h)9 w G+5%#VI(K??qa:~pVSvX`y#r#/_DJ(AtKt˺ril{j'ڪSKm > t$ntoZ%љ[%DT:.SV ؅%R\=ȿboI_?eYO L;^~CbQOFs5=,fG"N@yqInDt\^A- -\B &%bR>S92g\ [ݣ̰ͦ0i:pjٲ+-ȿ~]&A&iyTV勬ZסL[W ;(@3i""7HțT^4<{ΥF܇  endstream endobj 56 0 obj << /Length1 727 /Length2 12215 /Length3 0 /Length 12797 /Filter /FlateDecode >> stream xmxstuhxjfc;юm۶Icjl5sc|ga暿5Q8,LL&V 0F Pvf_3@ laf6'PXX[j [g cs؉o2p4L-@@ZBN  A'#11H0@vƶ6&g /1S5@VLEH\^N &¨"01[n 46rt@k7 vŀ 00v,l-a'r@WC / 3El` l\6&@ -@n_  !dcWA,-\& %75ꟸ:F \Mlm@n0cҠ151(;Ul?iCg:-\L Z]t%,lA ge0s|g|ga?t`???Vmy-S˼ a' T!&~]h[] NmmJ]7#IBuͼ?+=ՆQõ6rL[]Wg>)m_‡.iPiЮk]59⏝;MǢ/Q⇻v/ ڍd'6},x1W0!h8E";|)6$$ਰidV:ˏe Fkv(h$:@+O24%B֓L:_IaL?O/[Rdd$M$fMI?Gܫiȹ|5)YkVa?pje?lhB3*/OI^*ۧz]fE:U`~qm*̉g]>~GV\CR)~U";=tk-c &LЮʂa~O5&x|@hNvQ6WgJfh؏"DiZ!zS!ВW8dftɈ'7K3|+%j 6lM*t(崙 2£!>fKZ ݱ;Ңcզaex/-Z\;T^pc[^\\s1/Ӗ4wrvVRm?ރc(_+ݲN ^&y<3#);_[f[HH[w2EŠc,^7Z TFl+2tjV?TGn@pwМ;xh])UgSާr@h 6l?@M5~iC=p`wt 8\a@ n   @)gε´G 2:.wM6.|Y30Td%ᅖ3>RP_U"VqDJk 4K\d>o~`%!4,fqǻgf⨻ ~/ڼà1P~][LMdY`2[Ӟz}p-#=@KiDrw jA¡`->1h_敨[(<]R8,\e,`{KDJ$;Ǝ9yOj)9,USFkAB~g-<qٯ-\Jw'3 ]醂PQB%@QEn4mCmJGDg7jW3]0߽U6y-6leJt=0'R@k}5!A۞l*LP2TM%$#upȧOaJEv0( 7ȁ.U/ yDɫ\5_, S߲7t M..1 {?ͺd.j7 6(=.|e%%ah2AM8?w_ΦQ깾6YX0ɨ1CYܝtEq~15~b9 u~` s+!]3H[eAGGVeM?]T[[{шC_),6 +̄@t.Pr>1BF1eo0Kfhh+7>_^}"3f#Zݒƿ_s}8jnSʹ=/'4kv޺Ѓx(hJ9]Z(DeLhۡuU90WIiߕ}H4;"ZCUAe*>M1ttx,%E4㬻AR{r@S~Ƅ5DF3nY(I't~Z)Э<7z}S|r֖>}ҁ7O!rMfo.q,sϢ~)-K41JCOCB֧ciN%oQ>rfth˧JԂHċN !o3Q,7h˰WJAm4aLѣ"G+ݶơgPd[ה;f)./뱈}$ʃ/wF ]8X K% ZUf.IoOLdQ&e\E |+(M%ӃHv!l I-Ӕ*X8"ṧdӢZ,`.3j>Zl%ޮ :HڀL{2j_DApT87!R^h_s`RڤttS+_Ѫ^Jog[{j<_fΖ30qnp}8\ҝ[\:B:O~Ω4ѧ-=9.jdڪe|50Wk9V};Tw j-lV.;臝Vʜ4O(U=ґ/S $G%Yˬ(Q.ucp$׵PHEE$./S90׻.mm G· }|Qh\ u mȭH{ qL*?X- XS0fW_ 1,;a.Ť;=-p'VjF/!79 >wusz|",Š5}Csi|RcRQT8JwzqG^[-:0MʶEw̧m-x s9x uc:Q6F-i;Zy"F;eI2fr1KcK*Y@I= ?߸YpZEGelx9賧8ac;7.>f*vw<DV彜CzJG:kBa^4q/drlH0U bߤOC>A3|yú.Zd?'(TopkIsz*%1ՠ*EP=#>U4׻5.-2Wr`y9RkBjotc`NwX6Uv_0g11)RrE_BW0qQ9J!$>xn{ۊzU&Ici)nH#ʞۚfB@O FV Ay vˎY(uncKڛq؟?xvZOUSK6v4z~Ew0(wkZ( Y[S[%l~{u ] C1ʆ^|LgaTN4(kĢE;/tLȗ8 )!o>s= J?d_) W&g=NzIn_b"LMgX 3{} ЧsF~ލD¨hN} !t_3?sU O+Sx;v 5:o Gڗ3mgXnGifȄSLL,H;!j=Epܾ񭫛䁼h@|R}$"2NOlMbx'REw+rpn#0B%]*gZN OBQSN"i~9xҚh 1xWx9yEq.tÖ H[ /z Ƹ,r:p$%uI Ru.>VQ1V%n]dv#0;kb<dtE'R-NFõ}_ nN4өW/ʚ>)y9>R͡G"Yc뚎y|:,ob&cލ\FNc!|%"3R,yx hn1yX  )8y;96 ׁji3,UQ&Q7"0/5̋ܐyx>Z>3'SYs$܊ EHVp4-EVA-Ija5KnMV(8v6r&g:3E̐wYQs"'2Ea:,pg}f/`kyբRǠଶ?-:Źt<CEj:,'m5+̗ E}8;OTv‚Kx<~&ADES1ժZlwjɚ9@@|7h% Sr2 \nq1[>+n-k['ylLQ..0Sjs写_p;B&4uYhsD:Re9tgwMlV߆x%)#AZϔy;U3N]Tꆧ_;Idl3X}" zZPNXAmns/ qQx!vFd>q_ij^ ?E[|cxe;h] Dʲܚ4^tyJo n+j^%5lj}#jbƨ:[qɎ 7 R2*P8 N!x~d<34&)+E>:xY ]I]߱{y$+~ܪN&8u`x% ঄̕%R|Sa?hQN)R4y`> aW)睵(^V3yvn61u緌> ҐnJgzcD_{P+y0L:Ǥ +ϒ(-Vc,OD>+?cM1HIct7tĎȼȅw/~{ӊgX;_ⴣ&Wc`do B0ws/Q'3܊T*Nl @ j#j'i!>|o=MMŒ0Z7א/^:W%ԢK7R4$ށw Q?MH>$nf +m eH)!`.My Ϸ´3gC"/rH^yU,Z[&KG2TtݷbVY?̖hX$ob^3߫>^a,Mh\L YLhW|RdI{GbLɅV DeڗeLfL#FZ 1TN UzjvVNX:f`*1Oo;# ĥႌ{Q^k;1>#n Uzrìw s{za}u^rI*Xq"[}pυLYjUNL[E)Io"vaRh8eCЬìA@^TO0kъ2հcȻ[{'B kjYw.|rw)jzDW}BJ ȝmX^Vt %lI./8 īxwU~Fa[dS5kĨ荼oetLxz 65_c дP_<-iJ&u \V[rp Lr|G9<;SJ=:r*^Ie㠾KMJ~3H/b{6B[6 !>A4T 3֭U--0zH$zp {^mMg8poFx$yB-fu5/sD~VLcE9rosdPȊ[[gjGu#GuD/Ap8`j$ΜIݸ|}ɨޛU)]X!aF*#Q5/<6bԗ١++EgόM^G2TيA IG2cyRJӤu7}`*7yj`dZP> !>vD{Y<5I {uawUԕhxl54xA'?I@'/ _LۢBB>\F,lّ$]1Y;N^ڽqePSBç.^{o> ZM:xhgg2 ȍ&j-|r}CԐEn&-?r3\Úɾ͂U[NIj{PHK~: 5|+(vZ*;bIIiw?i ҼN <1%E{fBOX eYp#լ>̝Z|Sc z! -v━TԩDD4OOo(O QvVՋ6y)J$OHo1g2Ll'^Cx >4 {#@~_~ﵽAmؐש^S-0ߦ `GpڬUӚ*T0 rju%lTϼ < W`:#AP~-HclqMcRX{{%PV-#Y YNB>KFd^s*!m6;*db@zS^`=Ԯn5ҝ^QYTY=^â\3L= &7H:{KfjuhTl3BP ϋ)!ҺqAAkR!&+ [ƾ5b;P6]?nEMOQ`6A("Fj3Ft5]"4.RUt\@)kIM44bf^0aI^\ qwHmE" 9t=:#ܕLK.L =fa'&X-UqVP2~lK2~#^Lo|mcW!RM]\,t? 0K&RΘ433%VjtHVoVO 큏PxZR{˯ZD [n1/W檠=66(lOLU7J d\e8|dޜ D^!4Iim7D_Oe 8*-].ey[Lknj1VQ7T֙ '! {"<4s Q9}ؚ>s7ly;"7:d(,U* 2!d7nk(OӴsq#E{MNƅCw.i 6c NLCLZݧY’O.bX7=4J%< #.'} _iS04 NlT _^eE*\iVK^!!"Aݻ堼(=>$ͫ^,%{G ͆JbW;M.2m 2G['t+a;J#Oxaլ0hRwWw/kǸ`)0f\9pLfGb #Qx,Muq돴LAlGc\EߎZt%ıM|R;&<녍?]kg Yߖe_ Q7C\c޷L@3T;veA{ar?k"Q+-$ ~jkcbKye뮳8k{u=W,r >9/*9?㝿out7Ԩ+Az9/A[CNͦ(8_?+ B(HlE噠ٗ=\~׊ ]U2}y`ޚzpXhށm*6

nviduZ9`EW~-Ik8hW/qQM xZ[&MMvGLR jS84WPqݽČpKFڬA!v!Z(73c+,)5lb,:A YUpJ5LJ!k<j^Fw&ET W#A_F;I$6ġ$Ǫ&lϊ%͏/w`ӂ{_X Cg1N@gz 3nJ_zJb.?}DoBv<7#s)qʨՂsEpf% 6!PpNl{wqX"m|QǞ*4"ǜl&QZ#:pm̰?NW+8fSw+夤ңሼ!{`жYu" d)4Q8/:ߟ8PržGq aG;?>Bx`;tGadGrE}=Υ%soWA!7Ꝥaryo~^XZV:ceyGHAr|~;1ɢ`k̇%1ݬqK[UĎ膗lY?+S2oAm&+mxi%$E8V:h/Ξ0m`٭5XGZ5dVvfȺm_)4XZhdzdh]Pu)IV>kԼOQxV cdX4/Z3<1Ч uO}0#Vn'k~jah'Hde&h\ۺ8:w/{$<7LමSLLrn۱ ڛ&v>m8>(w֝9P5@֩n $,@]qy$E8wpQq;$;jCuk{KS&˸]s!K,'@5$ p>Z4֋Jc-N,rCgo'Q2/*U;ovpE$3:GR3qEm%qxGn&ͽb61'ͪ{SfQ{cK&Oc K8Z0ǯ::',=Bs.0850!i16!z N(z{KftmPἾMSd7^}ifeH^sDkDGWm*3;b5qJt=쁹VVU VXZ8MXsx3a;4)]phM/4Lstr`*ޜw>6ޡڢGF yemTpP R (ɉ-(nYx+\3vEwTfN֞ v428i|Yu;{J^ݰGq^60 ۣU/dԍΗ3S!_:_,D#Iܫɲь/9{=2t)B93y5;A2i5S- *Ӎ )9B,v 5 T]qLj4j}g ,ڎY"iO̡&c2{ + ҥ DLRѮ^]uEpeXo +au `%A'ZkY2肾/ q2ՎI?7sd 6.{ygdGB,]XP@AȌk37%J}.,SփiN׵PB<^_+xSIw>MQhSd ZlC $vZ=*mK_p\f-3[MaBOHrSg-Uʎ=!B~7vq((ח^(Dpb6U|g}l:pӖ"E*= i}r"rO3=AQa::QWOk?) "֤Pw 3VԻޘ4BК4$*wgfd]IHT\ endstream endobj 58 0 obj << /Length1 727 /Length2 11360 /Length3 0 /Length 11944 /Filter /FlateDecode >> stream xmxeP\-`!Cpw> \;- -hp9޺^tT2`7-o'  +@SFBʅBG'4s9܀@K& dg@H::ym- t,A  !.HV { @RUMO^EQVE ]j v2]v`Kп8CtqK,%.dӒ-Jrn@ sM peo_.^XQ88 79Fan`+GÖNI%_ @hw{{3 ࣤh t$-^n@%?h3?y7z*UTT?}>j꿭l? O;6yMEu%?ii%l t@ޡPN8W6ssy Y$zc/JB˗ Znw@YYt l ]<] 4=iʹ4sa nciwFG|*\xjD xU"C)Mu@ƓzcC9 Edu%Dq;Is0,GiEG? Q9l}6kGD;LE鼍T׾pʝvr#iie.~iD7330S w%0KTruu4eza,Lސ#IPJnTK z6X5̸}>QC7ѹBnrYڸ!T V(PZ'`)&jnMtfv@푐as@p0Z/sIJ/g[#?]6`{ǁXW4 }:˵ain2ٺEFHXeluץqcwy h隙F{KQCǾEnekTR`zB [s\+F6+"Ө5נ(SQsDt[এ%7)gDT&ǃ~'•ٓgM ހs](N7뗠&9>)9gbI.י2_Ik pWSu~ TW̍05U:Qvm:Lh7T01EN`t73p!B`#9~UCٻHL䎢C21jM]ʺY~LU|eC&Aonp&f~ag]!j%Mt=iL ۰qѮk%Uj*x{ެR } >D3w)ջ?KwH"}3YJXS2/#Q8NYk*E.(?-R!M~h NJC} g`I-9(ln8BrXARV3z+)p1'Ka-Mfpfgڝ*GQ+Y~TS#^4&)OlWph)s cOi XBG{OH*9šR2˧k)Ż] s%5o[q@^SӤxA]o:y^\cL%c0$(6iZXZ āwVd>P\_W|*Dp?ֶQ19Ӎ,.yS( ~=|WHJ8R.mk xӟ2hpQJu iuSO5?GBL|!QssO;%>!ڢDYFp }8"tL@"s\_V}zHm͒.V NrE`LJk pbK".~b}#.F򩹷$ů5vfbwrU̵+Zŋp#Pʽe~A"etZU^sMϙS<~ E˽yݲQ胅y*&2bdI^n$f|wدfοS$ xaY3wnP]aɒHke$0TV䖿$.u+f-/_k6}ݰn©KCZ9[Wn;Bdad*vaLhH""TW%k SxM<}EMGNJ)$RcrW[q>Cޤw0EEN~yo8bV۫^7{z5o'dOurH9NK&GܹUR?3J *nA"X=yz $_O'9gaی-&}m>AmU+zC}1 LSagqE P鄨}7:lQҮ3=f d^Q0rj Ɉ3 Z[QEA_{ R{/+iUhf)Yܵ1;>P;:Xrw>%ĔJ1@䄩y}̀ȱU ig|mS:_8V$$]+n?@>T$y#Y3 WEgc&%h_~RA-@2k"=/\O0 &u$wAЎM+W 2g*MzJyز^Yࠚ@X|bGU|Xa]$5X"%H@& 7:N!j. R$v[0kte /*f&\J XcN\mcOlJ,@$25яg]9&Nd%iMv"h==m@lgхc"Bw]޽zꏩ:|ܟP+Om` 4J=NuĆvow/ރ='BC^u( wCay3ҬV팭a5rC^a=sC*Z0I8ˡqY7A|(Z.B+_kkj"8V(^û5^E֣~z\Ii C iR\z[IlA\Js%HrcE}c;;\n/I~}فui%fLŵ,? 1\4U5IcCnh%NohtLёLY~q{Rք̀{wzȏx\4;e&pЪ6 A3Х$\{O,dN Ҥg{e/Bf:CC$N_5۶"CVSjS7\nl`6l-:쏌 e|7Y>7n)氿y +C8{'<prv7i`p˃K94FA2*ro4$UH9"Wdi;Dͷ|l7$}R:OٔsPyaIq }ǙGFZ̩^=xJN9= p79dz6Հy3K\<#YvcYu,tfDvd1w7C'wlV<Ӆ ku |V30RGzMCb./GVmQ{!_RpG P6Փ*M*>b`+2~0KG$sJ"z$jIP #vᱢjDAґ\'vܒ<|{DSÇd?μ)| Qr'J ?hR%P7 ,QIX:f P҂s?' [0Vt۠guPc΋vâC -Cq |T9G7wG`WеlCTGW{eDE4(y!嫮QΒrv HtI0pSgfy_datk:7L [5jgN%-6/C c= S`^nPIN2+z1PFWnCêE}Cׯ}}NU@KmZTTH_YGETcZ9Njr4¿Rg9- NU oݖ`i#ǀz~WmT] ڞ[zcWa;+aQ^WeԭnЪr_d}[|$ (t-66?<#XX[ᮨDbY۟7;-+$Ѭ к*QtgBW7&1}7L'jUwFƽөDQ+?dLq)0a\eE2( T:P1Ygk,KU8n.13f=+-[XLDOSۖW߮w0V~imlB9x`6W1Bh0 } j0Z*,4azE}45C d6R^oQOzz\5ղ5 ` sehBrީ0]Q ?k5fTfR;\.[5*pW& $!_B2#`֥ 1'\7s|{ 9|52K-R,QGboP) pRmCwHx*o [+/?z,R_]rz9g KkBF mRaaߘ$XC 1.bs9A6~1"6˺XgfɀE ["ψ)Vd=̮aVjpfw":*e\A7B {_|O%-ky-w$ډ6x'?y.Cj~%c Z{$VB36M9|:BE>9 ]&峗;u  s48Gi&#ڬfy}iK}$xOUDRIlUx+aDgaטY!G@A8fG~T;]|}Hsy3 oI.O`6ɪ㠾hlW]kxd=qg pf&UvsVeG0wԄ܂K?9*"Ӽ oq A!cMk܈l^k\ m8u4#1s= C-b}1Sttbu= <}!γ{TBMEjniM+c\SmdH1+ȒvkXU\lߏk _L%]mTdy~f(O߆PXE=DMŜ5@ǁF?mD097c-:K}.0?Y 5%ƢTJ#4W5gP/n{߸!deV+-aa RfBq-[Bd= sw./ Rw:A8 $G;b޻P\]5ī M~o;\$3.%{304z~u$7]H>qu]ᐻޡSu4hN. Nhves B Wq-˕+kǣܾ"K<o¦w?VYk?>2lct4-4ϲx(/(zކAm׵w"[IbZѿhWo<FUmsLj_Ykʠc׷}zOݫgISEF34˵fp_IqN/oGy2CQiG|e_O29`" |τ V I5XeKW0Ay{V,t'ՇiVz*J" :]쪍i !FS^4r~2b'C' ۫Tފڃ4#1d&"$u}1Y FuUdey10ܔ:"hW(n[bJF/H׏vѓ2#4^~3U.D]C_ϦHSw,5+a.7zut DSuٍ>ߓs-U0Tі98JcN5eV${ Qg"77ϐfbY}]ciq:m.amc&m qIy8:b(N|?4dq}1Ը=j`N;`K/!7č Z[QLC :;nZH)OTHV><,B/* ѫR-.'OQi}TUuWR})l$9N#i "eZE5@( /O՗vJy Goj tsvwrh!Uڳutz]Ko/,,1Cn {CK*ۤ' ll. 7E-XvĿ ->B!t~G1A1&mu*ȚQ("N|\H/걢DgbŻl/5:&|dynsj',,;KrNO%H@n])"nRR%?v 40\%,NY6> EmKb58V H6,=腜&|%<mަ9 BiJh[^83%ƕe ݉7W>~e̘w(嵣ck`(|U_V=9Ӯ7l> stream xlc(]-Xm۶m۶eۮ[m۶mu~1gc8kdd&))#-#,#3)) ##) 1心j6&Nj6nىS#ejPW#Yܒb[8i>0C:/gJYQcEp? $ZNl,s-β9D~)$`%e>1[i#%l@ԯQLZEA ܤB Fd&䅊SrTQ |`hc^r< >2Qşjxdp$|펰--s.6ZJMG~Xx, n&X`v_pE8xs0(c2l48PH-KoSlSTIK#*A02slj~)TfhLw+?ޜ"`FfCb&` H\|9pk9$e1Qc5B;A<KC`fU=EH,j%5̰@3HI٨"+Ϊ,11/ pbE;՛&4hޗ'f<Ib}jƼB?bL&\a_}B^R?jAO޺Ī3IY$=W?6# 1Jy}3G%"hi"a 3rnN:XI~ 5H^(QsGX* Vpӟ{%a ^-)㋰|P7>B%XS^O0$ W$ N[{`*;.)-1mp?v4] (Q=B}+p}n:CXA+E9l>xq4;p== `Ugw-μkx г _"lSez=AGoX#-8:hVupgM+"أ6S?8i))tEVnn䟔@Q! 3FE0\YHC$kF?Q6[cЌzw܁1CQ(J&ӓ #f'tx$FPԛ99mI- >;,Ad`b)ڳ ghmVWZ/]K<F9؊^51iq R=ݬ@5reEH^ bE88DgD+(- T4ЬbxX+`9Zs /=B՟`'Y;-*H4)tگLAlbYk{ YU7%s;nqu>??g^?@@!X} x}V\ o,j\\!X wV־p:[%kx*o %16b*mN׀RZ9i=B_IBf}hdbONui9[kU{bB &z 3ٹyڃCaq[BY҇01oqIkE*1Yu`crHI4{e胼q utG\^jN:%)%\EDrA24TY0(זe*гV6xS̍qm˺EuWvɡ_1; ik^*=yZȰBq| 1T]!ǟVt752}!OPt?]澰8r`Q^u_"/Pxs@8UAq%NSEg|_lG[{ƼzjPHHga+ yiy^uSl<ٶء'<=u nPk/[VoԱ D$Y!uL78>s44B C#Ug[z.CRwv1e7c%dIyL4^?j$WhēM8 h k>pm*lz6sT`u~9 ;N՗TO F<80w;zmua "!k~]q|hVqUBtE P_pߐC ljcp涮۳|4B' @5{TtBΆmqJrz% },Uklc?2?:Ȥi_z̍̚!ϝ7r_E|ρxn=J^l?y2T#Myo.WZ(C !2avbCO'-#Nd8NÚY[%忟'h  +ɉ("%~Y3`PΟ7`;Gvp)a&6%aΦXR+E7/T4Bmm$_fF>篖_"ggP,[bȈJ&yU wNחq3 8H%$  ݮvJ1 N.UJh5TOOԨB<%QVaQUJSCm%+pȆ DÿAhRŰ{v=%o?-(QhM`!Y@ʵߦ6ЖmDeֲ ~"3H :u01Eܭ*}dмМXHsU;+O}ՙ|@AWBIDxܽy1Q!J"dRxgy)]3M8^-ZۣK԰ܻ鷙Yʙ׊KȔn}MDµF᥍A͆*rUcMg-hQlРަkX[WIщ*R`0W߈6*23=yUW\pF{kU5gTmr"𥨝r)[Mk \ 3RO@VxhE2ۀiwv[FG*NoUlRωQ v](nix%V\*J7|E[aY≶FlG >/^S8amQ;L BGb+ܲ֞aף鏑>c'Y+kQ?rc?_5;D2}9r}h*N}&#?_ϿiBf;0s0t9mx}A`Qi.Y8]o( 4gPf #y75Ex=vn1%Oy.hFCfX%#bF=L#8VҀ#5_7vTFZH:N1` z{t<|8Grb -g,*B-jȂo=eօn"mWEnC[wUƔ0]&2<2ĈxI҃F5@LipYV`X?$ 5Lp+5E[3^%&pH·"H۶ظhҵ̒1[ ."fΉ7&2]MIjRϻl%m!F(&~0e&<=K>Yg"@,[>"XP W\$QܪbXwn⒒pW6c3Tsiw9sogo uOeΥ(|7KYr!]#&]WX?ɞZ(4tđ%uP4yiW8R%RZiE\.پEݗ4;v8Ъzw=ECvWa3\KoSpfzRSϭF_c0PNq6s ]<_Ьs E5V-헴Af e i :#\b+7cZ\΄4ЀtVO. bL ֫D|G3z>Rj] oIePOMyl4`X}QN>S-6G=ރ&K h2D*فBa^ O>R9ѳo :@B']P8s1ߘ!f6I>$^qc?3W%`,d+U 'Ҥn`Q6w.Ay;CyR_49#cpcR-'Rpr Z;PG},=aILu kU3Wrly<5^Xq;UlN]`-+pW@O%Kj1&uJ6 , w?%ۨznfQ/i]4dBiż5r׋/d-?WmyeV J&ϱ==x ) p"lZ\2vIr=~ W/q뎟HnwPUiב Ly55<(bj붓vHk窦d ZisΠܯ\[^T%eEQm;ѫG]4^q-tLNJ?nɨ0p`%z1FמxSUdEKgXD 9Z= ? @:pl6{Yzb>wEx\-Vg&][h-"g jPH: c'3Xt-/AJja>F%jIj,/++m F4>XY>JvvZ^Drִq 绻0!wV3fXy>V65KL^w^0y)|f oLoe,xM]bv^^`1cPj'Ƭњѓ:&_ $i- ]bM!R *k}+":Eɗ+100_GB`hެ*EPbH|g ͝VGizs@QUęh1O $v&dd!V]#rи[H=¹QݛMKAc>#9 yLC6TF>Y7Ef}P+7Ϟ.R!T`IDz3*-nbw{M=T~zS,oiٙS|q+Gm&" KafJtQX#qXQt7Sc8r ?lZ 3[_  {}ThHxQ5ٜ4+ \D,+Yk&RZQ5!"rk8KMeضX[ŝjTi:01NZW$|!mxo樅fVa}e4g6Di>1Be{Q~kICxc6܉ : L]* s1TJ]x-Q{ |lE,R/FT@7aZ^(D0t%1<ٹ?ʼnk8 4v@C|e#$22(6j^kckf@UHHyhSw8pa'&Vqܝ[k)=Db|RGWH@I <Ӊ3*t^E. 髒>7Baa*Pv!5$k(r.3mI,hnb֜hvѢ?bueZkev XNoWKm\4P>U7c5>'aH^2f}%%Cr@2O2FGkֳ1ߔ"o.4]{:ΌKr0|wQ!qI:4m%DE! <% 2Ċ a6;!Cwq,_*eŖ= cE˹hY_G SSZzP۹tdI![XO**K]M*E ٙm[>'qR) $gol).ݐ()S4@*V%aؘ)({naamR-Sb*3In4] ؞Lڸv#F#BCjAƒo&^%/r(?CQk!}렖^ .F#˞P8Y׊镽XQ  MZkXsiP)ULJ{gءyJQ2u}SLEWS',)sn/Nfǩ_qu^j^X,\Y4@C>  V<-(HH\[lU=*Ze^3rՈnJU'͗SMG^Dž7kTp[KkY"G'"_6YxK(3b9~Nf&0JB3LcT"#+i*#􁬥mάL$%'7R]H}3 3 uam|et@ˠ\MaO1B00|U'/bjܒCͱK^u*_ H<>rǑ&rI?(:D6u|R*k6KA+2'}{i2!n>!Á, sݥY,r)I$E]\xAW簏2n]>5ٚ vObLZ 3<wR9a(WX{B>rRq!BWYHC zŷUTwLܦ+"]*ǵ&ZF؈F)>Q=R5Q`oE7]J'POs1/jk5I1,o|Ґa-N TF;r0'`6jaׁi3rȲ3gzC5׮H ;k.ԍ4vg|a *X7/+Bߐjm_*aAjNK}rvHq4a6 3c+obU-~j!w}}qplv:O):,Njl]kj Q22Ut^F2ˇ+*ځ j^5f>%;H%dـX>br ݯy}5uyu]P/rv20 ғըi5:S0~sKUƶ|RyF8 j[[K2b:ɰģ* $ZTbxE3w|',-;' dG~L_+Hk ⥱Enݗ};<ϊ^tU7bL8xXw|x@-$ e#\^I;D34T벣*?2M6GaW'¡lP7q#G^G j0QXtw[*CJ3 Ÿs(_b T-O;>Β }9JNۘJS;֟ӛ ^1J3,Un1ig.MÛ5_R3 3b-Rf+M,)"ѥ:,,oE/?rOڞ݊6%xvT5!z.҃ +h $=1^=Wlf]k3ݸEZu?@0|@1ؔ #NmuݰgI;򅘹8|/V#fa Oyԙɿku-pHVX> P *c.dA ܴ FQnN Usl حCݍZ†,8HUy,)µDCf{!_y-i6MkW$="(>nq޵eZ3vg(rA;!8٭Z] j 3( (֥!+(K$dY$8ht$%PKv ƌcl":k25{i ҡvB^n#n}Drj 3>CN aP-gJfP{xg%!~`x57&ʀm),J;]eGS{ iv6}mEgƋZcgx!]Yb97 :{9E a6jĚ$.˵H[ȇ%u, Uڳ7 ogҶK7 C8@em@t>)He~wc!_ڋk| 1}ڻ"'B[K,?Eh"*j615V;(F6C}_.Ѫ X'3Ʀ-}BۥgVʘݑă.ʑ0X("i7ʍ\j`ăyug . L0|۵BV~ Hi?4 ї]o;Sd^ L T*04lCK|cp< T|{]]2$ގdn;zĞ}s ^IDY4b0ī)enw&Yn ,߉!g*C=y&{Bv"GfpԔv0(]HUb$z+FUa݇cHfg) 5dK?i,|\D=2Ĉ4);\ό=*pCTa@>~2t3p\Aނ|qE6 QUShfަ1A|vk~IyIn$^I\ F5^hc`f,IP۞?2IF!(megIkz븡sK %T9_ab:FZb=] o <B,Y NEzŨ R-f~ kLXpp ;r tƏo];amo(=lss jUwS}yfwzXm5=mM>@Qi"f_3 ,9Mp[10cY1Z8 >,Uޫ!ҔQtS{ 4LSrV9OXE,k[9LȨ 37) R}$[&RRS%Gd(D<+wFfl iE=t -.J7BbZ%'[PM.Ԕ|II N& 'Wo q'mA5cWu#)tj{$+hL)3,c t Ԏ.*u̘TS/Kq69>M$EY-Q,EfA6IRp#5(4Fі% c#E65Qmj'>G_(I \=!|[h.[\O1qyyى5%-} rn4U&#<.݉O~U4l}/F W;pBaOYG+@t  ĩj>ATCK6i;W]U&Z 36OD@sFg}&o(-@Oov#j/<[rÂ˫83#@jL&WMtx;\уfۿbdWߡNI~¥w.~)L+py 3xr~4yZuW5Y?$1P:sHw:'JhP0M6C|G ؕ%ZX39u;rn(bbEP?5 An`$.OA,gh?ySnf`EV":=*$yuA3@nMfնq _LzY9ܯ&лzBJS8b 5~m|ǥظ>Swd؀یq: p7i7ۜ pGNP3m6fBFFox9g^v,M~maTot8~ Ś i熕)O]ГhYŔѱyך E@6ιi 69!Ógh-T|f2[9Hځ dR/TY՝%g kΙDފx[8@.wVYLNV@vd)$P^rd^*g55(]' }}mMѢXMaa[-7$;!N5['u YyU.(ʂm4m";I48 I%T5i~wafY+Sp={lkA]Vy3\󞑞QlW]}q!546Ɍ4 gqj _fQ K(Od"@l(' =en"G*/?2(Azp&+G]Q3[>C8<W. bEIkɶˡ$T# 4r&4'8+{?7E{]sBZj,c APK 6.vWwQ]u;ܷKSNt3!V c V|L*lᣑ dHAklK3~:MCնI}&i ^x0_ô?uw%oBND۵JyaEITÅ`wW Os bh\O6>xBDZXaӚ^ڠJ ۩eDvocRp09C,Askw,rP(xB_y @ǧRu|6X®q _sUUk">DG2"j1д ?h&n3_!43W2]prs{oo%ul_ DY/ A#h3췥 9kxI$PQ5tj k )Pb~妪}VӒ>Z[ h'{u- e&AmW=.2\!Ә,r E3@;X<gxR[ VIz똛V0XOQd\|+ƺی%yզIGV[~tg.1eMs,Jq;Ȝ Z9Vˎm9?+VYQёMnt=vZ W =mvzjf)Wz=O!L/+|{MmӮ/ո(v4_a"C/ب 2l|A{Aoo!ȱ? =tgb5䦈,ӧ),)o=NSa_&ﻛw >1imfjR.`,H)f%ְJ Maf44h;e:~Uf&~X>;qYed4> o".25-O G#.s' +s+T{HJ}[M{ LF03 ao.M$2vgcN~5`vx^%W4H;$'&ǏO"!H&*jEQ`t/Z[i##U Z!)1|b#+ ײPܐ"zAdń6CSy[NbL:n}5G..jR5^VjOql5> &+nSqX "[9~-1`r+G {:&36v\iH*_EU /-M:.̢Poݠ1ZeVW ]\_z $fؓ{4^N0;Ž-υ?RC$G2g|9_kH"ԁmgȁs p(PJg[Re*?#~ ͡o%W/U9"n+e,ttԑMl9 ߼oȷ#<[8V Nu8:3+R90OZclka=PϪpp̣ Ejlܚ YKXKLahG1)O2ӵi{ F,C} #娇b'^ _ET*&{wZg^ꈨe/AS7v/ k^pL@<;O<,_h:Iirl'1 ㊀I|~Z3YT7@C^ӗQAکI^|s.gn#@PJ'hz'21b1d@ E;fG2S:2%;тz]ͽđf" oBXZzh ϫ7!ތЗbSvu8Q ֠( IGeVk o3a3~ff~ wͥ4d Eiqe\)[I,'l/+&'*0XU.=xHd|̏K?`kUd^pX#5)9+xloU =%x'gU5` -fi%)Y ]{'9RFnJ9"C٬_Xy7cHub'0Q~_1.9؊>v@\9 x \U8".sFA,.:*b]z>fڅk!9 W駽UUu0tr,kSO)]`IqQM~W3ɫ2AoJLaM&܂;+ 12]]U1=EFO,^,&Nj8RChׯg9h OB.!RHFp=kw8܅ĥDUdfm^nDg,QdAEkv8eLE6 (괱Nx^ .ݣ̋nأ!+ފ4JЦA:y=XΩD헄T,[,UGA+d֑nT_kQ z`5HB("JTtܪwK@tFϴK Da@ 9;qɖ [ɈL8EY,V-OYAW\&{Pdcm4I`m1/QȈ6܀'{3`2F|.L촧8 NJ<SM [5x oHMaMB9MN{ʲt2_)ᆬH$R -VTuO JAqQ.-e93-kaXX&&w)bUG-}6-+ YO |>['LЦ0,'ti-Qǒ@ uEFenƜ^I?M':ѝ\CT! '}@#Yxo ]j,Q 8){O;˾d⻦I':ԯXxhNnx*ܱDw>f ^5{>i>E$ } Oq>|}nΫ^&PFj޵&q XWXoVsDtW 510;7Rd)_qg1}w_782Dz3]bF$#\[F w!b,( (rto^`R_}بBȃmj\UE7yJ@`$rd}0_}f@BTʤ֖P%8Etؤmѷ[?ܳDņ/3z_ az&B q_u7ӥC*"2:0&kg"BjP2k?{R;D3eÞ ")*Uz & 0s^[fUI eQaHmO[B貞١ԁ0Tbn ,Ee!h>7T؜G%b(b*kя` (+mRVv[K žY5 uo - Q$۹mJ:gC%'x=0{,8>=2-GS):/rh /]gL5aڷw+ɱlBϺL#E-J\eqa.FC;DCZxAtN7R6 b{^k& F=8@B(A6.RҹRP| O [rhY{MrF/]ang70'ua=j/jNŒ'[7/(}]ꌟ^cL^/!Bra$ZtP#;-F@A9z̅IםHxwm9X37r33G˰ݞagcs@o; r:m.i3N{ <?$Ψ*bi]mÀQaR.3.F=^4#By&D7\'z0/vVn>_]2$ߎYܺtƾ[|cb2 4:F)qHH~??HߚݩRc5(o'Fb *vJUTKn,Y@y>eLkX(Xb j%ܒ ,%MmNm6EA`]LO[kHI>M*=^G#_:f?Gf}#5|ϣxz]j~t R?cѢ-F/RxяFrme@ $AzsyL[`mF] oLN2 B *p1= gT#Nq:IZ6Mi:<^|Z~R-}$Ee-hdfElbͻƕQ INU3ڬuR},hx dEՆ8[Nao=2'Cނ.FgЂ0H6?[+TibYؑUUDXDS,X#@*am ?yX ib ;X?e#㷗Ieu/|Ss_PPWG_[26d?]P{ua Þ}Z)(| %ՍnngBF1[qIZ䭲2ݲsxfkY.KN }AT&q0^TMxN$,@w/[F:BZ1F#;T|W35ZK5/D ow`rWGZz͒P=>&llAhR=Aq]֊5T=Xj(ZU8Aj-1mOSUai+ύ )J!HH ,B\f6o'%JfgF:ɨJR0 \41|;GÅ5ߑʱQ!ȹsXRV wg *o"0A8r`c37wƠ xv%0x;zTT߯OT.•Ab_&yܕzfjK@-[j0)Ķ ] OveB # բl!Aφ*i,@*tot%f%0TN@\g}+Kz޻FJ>҉!5¬lƜެZߟDQqlIiS5]٨%Ho&;Ȑɑ{vMh)m0kϥu#ka(˵^6` f=X٭@mWvO +{sP~pиM6؜J $} SMBsﮕcFѬV?Z[cA5Pn9)Xm^A`6H>}wPy4ݻKyD_۰mb@YW-'M.7!̀t|Ra}T(?6³6eK]ofVyϐI<ܿ?c( FC ˇ<Ih'D؟IPO瑑  P>?V1_->9Xl>x>w5ҥ>"as+{00%Yg[1.ḴGtꜘʘr@_|S $}r;~S/%HG="w عoғ*,Zkw%e47sVO|\D.e(/>>f,N:, 0c.n澡([}Ũx *@&v6Ho;b\嬾 bn׏b=r 3@\1爅L}{66U\-hxc-hsY6 Eܼ] 4Aސ1*}j,ĂIO\Q te \` X΋=I!pE1#BBno~YfgɢS/"TfYq7/  h](W6H1fR;D0PߥWw [,YyDq0%k53>ѩ4k_xW|/b >9%f'-нsRdpC`*BV<Ԓץ!Ôepm2WkϮN؊ q<`X6Pa>04Kސ)~PTw)jGR|[9(1`etط)5ێ8bbiQz9W^sI7{UX*68vxa gR(*a`؆푥 hd6aTU3 bxgNDcU+ 8VǚwA 9VX Pc[l endstream endobj 62 0 obj << /Length1 721 /Length2 12315 /Length3 0 /Length 12893 /Filter /FlateDecode >> stream xmxL]ݶ5݋Cq׃܋ww-ݡ}Nv5X#ɦ"rjx9Z11ԥYYTT&@?@n`c!PV֮Z3v&@{3ૃ; ōM` +*Ih4 g; 4X,vNf s80Cn=@QRCTJYI )΢!0d\]-̜##F:{;bF`c\V@˿tY:]6wsO/!5[XE)[h\- ?({?YW:*E iat+_kY^-́n5wyϑ@M-) %$*&?d&&@O+?<}xL6ο/>NvCwO,,<-WBl[*$章g5VWgzoЁFWHsB;-&HS1d+ϥUV~u/# ۛ)AD޹fnOsf9 KWt@LX[3@gE-6y[/E7. t< ymY`x E$ޣ kc:{(=[~5vb2~ RyrfsRxLFp߿W*ҐMF{§C\YU!DLTO$bμx E8ij5ڢl1rM[v5nt9sD5ڛdUcmFBH~/@* v4+ߪ b0P;kO!6"zV0k-yx>?Ʈ|Kg5d_hڮMǚͥN!-c$ nº"#@g,dK LJf-7a$ŭ:L5?$ 9P@#FT BP@`y5q#4?E`D𤲍fJSvHwl;0!n3B$RY+!_jS||qkO(.RVD;IIU#"Ҍ,^?ۖ$HPȤև E! KK]rZ|K3ҫgdI,i#Ƥp 5u;a"0+hYJV]|tO7lۡCw2Ғ=i'̏& vYl'Lܑ=s"zrw"96F_Dd2;6~=AEuj9Fq%{G L;U6aTs\r>9AU$+-lMSM8jZ(XHQ\@O8C4R_vC+zMdzsq9ELiA{i1&sx'{v}8(7k%GYt_%$j<)oAM4%Z|s>?4N~b+ 31BvM[rܹ$ҵsIPÍ^dm}`abF^~Q>`[Vg$rVwAUςy?ؼoQbw+b$¼󐠚HD}D\$L$¡ݚT0`[o_yӯMr,oJ>lÝyL9|* __2PtT$M-b2ДR }'Jٽ;2tV'~%f\o S(-JU7yw4 ܹ7zE獴f)Rzo;t;)pNԔ||hw+s̅j)vE5fF%Nn|1&x}P_̭f23*נ&ie8^ ji1Sv6q$yfrj*jPK$Gf#77lZ|]y7΂"jWДZE1F ՜M"կ0!Fd3_ 9>LQLQd-DA!-s3sn\(frPq.9#~{̐ N&bUVBB WJ/m%nyT)-eWbVE FA-^40tc}ݏl[!~j|mQ:фݠK; >qlʚ4Y`VIMwp@ GtvŜ#bb?  -d:a9L1{ʡj78qHC4 Ia;;uU* eKM̸'D#+K}Q/E: Ur=)i-B=%;0\#R(`]ZIE DպAԠFx.oux6:_b$s}5خbp//c9f/> )5<݃ZqYN4m,< ңw1:r_9 C,64ٌP[R\LI=0_|}]Tv+žL 6%Q(X˶~A9.<#LfB2HMS}7vWM rԒP%#tNH (Cu> ttxlxO641ۢ.iS .hp-X ]ۃ U␩^*/ P-Z@}sUJqjѨH9n##8[fDKx"mEWx1=Z`ȕ ނ. N"udilŶNvb6%l!LЋ4fj/Qw+s4̆4a+IFɺ\7W7x3xwOlZEZJAF;E{٪;JWoMniLSj͵ibJzBžbh]W_k?s>om=a$vL=Vmpv&j%x#zK!?ɧ!.X2uQm(N<g``$4sn)Z MI. }E[%Փv=ϏQ bTq꫖* )cD5'aⱯޘ#wA#h;̼M"pKJ'gФCy4 Hsp :ug#r}ą<*5i_fzkC˃N,|7N.g\-?nmr]N;~zqwR<@|NvV,Z,ɞ7ޱwkrr2=E3.NC}3K}N((È\xoZ2Wef%GӢx7 &N%졣> hT;* #w¤Cyp&lϘP$7rT/ ~p"no3{,/~՜8< <}CDGXUUѣrN J(@6#TUjU"`#L<#C^ݺap7z[Ĝ ';Jm*<7y|`RFv"Ґ -5bTk|lvh&1G}4g@~ld|A%$\8NzѢ)ATozAS92ё5AzSY2ӯKxM™^.hnz40Ϝq.w(7 ,˹~zTwxh-Uh( buAŌԄX>Wysx"i>[&TX.Dj&L耸Z!,R{GNhE]wAjUrUGNa<ХTKYn'Q]~ X|JQ~Ng:93՜E5WR-+KRў#<`5(,7֪҂d.j[G:Co>'? [3j*1`U[TqK? -IJuIdJĆJ`dO zp}5:Υ?&La}6 /Wֿd$tkrNjNVb=47}wkc~9C%+v{js5ePWYtN9%g3Az5YcKBK'gxTM~{rZm'ok6WB)s Tɸl*w ]ue|.] ABp XH~ڕ}ӺF ?n%Tv6$G3iW xM9lb$q#c;ҊwHH,!X׸; ߊdl;h>Dj7=x1hR'X[ZÌp XγDV_Z5PZd:$[ V"յ*ǩS&1W*V ->De_>}0f6*B1>)l[ThqvKb=Dvu9qyנ18*BÌ rl"QҍѹY!H_mF"ob>ƿSS- B{GxQ z7-ӥNlqrmĈMDDM6FrcCOCR蚱=88O28`ԝMv 4꓁ vדmF<5Z/(f&%&ӏ]',' >.CHW7(>qkGVM"}3{˅=FŰArNw" EKȦ'~6?p^ J=i"a`g\0|mS˷O_2g8c%*q[DV *8r :@HQhU`_7U`ʥo Y,2M#C% Qwn{:IiU :>q(Q%ggGltɣ f74tqx/u"$;܊?_śH89ZoDz:mlgC⹨.!E)RCTGߺAD, 0pݒGZ$7}"Y\z xJz䇡#L&~ϒЊ'tFC2W<*wL6kdHR>0 aKF߫sk:CM⛅cp*k! |O$2oI2XkɄG4F1R6n>LLMQ_$vjx4)\s*L?RYVLRV,Qbkb0 'o=<'Cj 4QMc!a꧐U;Rp% |tߟ/'Nj.z\"poB' n [p;[DDfd5l.>lp1=}=ewP &}Ex V3]xTJ)Ø1CVީIwQ`S hUcYnGX3ŷ9pOG,J(pj֖DoK|?ES{O+[Yw}Vcٳ4b9qs k}i{[ [h 5HbM/&}1Ma$ G GyKLjCZx&\_W" ]'.noWﺼ2Kl_ZaH!U ),DqU:>fnc$s,˲kR@/I?%r& xc|l@4JKk#\pu/:!3>0S(FR6o t{ k"Df0Ǡ:/6V7ⴃcsl֚2^ᵉ/FT<)\=Fg}ZLKS7 nQ뼐Kz6V{vn%Hᇏx C#q\uQg=}HC5:"/\/Cץ"m`HgC1l߷1  ұ~^#d'Pt`Gm-GTBgr"8;l'G sdFAAGw&JLGwZhGz; tFJߖp ^^T"vWJmFqe(v4ݢTᅤ2HqQapi/ 0E\Yh;͂és2:/^(|pG Ej =]ȃ*"nj1.C:SHJxֽbu"bRtEf aK(';kfI.ovq8Gfg6n}piY oy}w_gol]#÷"-8z#,q}gcExd1Aҡ [G盗OFɍh˷b&gloi,}tYmVy#߅IZ:lukgp{iaC !X$ Rstξ9YlҦ˵/vIᤊ f-Zy>kčMԾ8v6 :e:J͹Ff (1m4,|uCU}5CM@+~D?[{ɉA/,z 6eglۊjC~wĖ,~:<6;g fJդ'GzMn<ΰ\l"V˝`>oPw_h,(S'_CHYAt%{ظCv [΂c[kƠ ZODRvCK$U:xc'n܄xm ҵlVw\1\8s4sm9@K'X2}keРV^(ɤ~P^Zaw05ƹAqAS$$mݸW pV#~e!?x/# 3x;*|XH>ٴ肽>vO 0 P1[$YK Ֆia6T3 mկ\/\B#^,G]D⪵ [b>v9X1'F̡Y[|sAߗJb7QHR# HRrUhرJ~VyìfWR1)?&A$pdg+53 L<(uwf6Bo!,ywL!Q)c/6|(+V i|#+-ӘcYV{I9~A욹 f.^`V* 5'e#_g\&r[6.8Rtd6 fz:F,!\ٯBʲc~V6=qD7ޭCfߺH b +=Ds(|􁧓 >9~TGޮo45אm'еYЮw]^w0x ,4P4L$BM&[}Q2)- [5`/ Kqrdͮ}^K˩b3VW6Y`j`?~XP&o5zN7̫m7S[Ʒ؇wDYg_7jiaHǙ A(uXRYJ U\4gBeG8z-;%VKrxGo]uǗ_PWꡖWj+0p@+<:np1p.NsZ8a'4HYV5~XU}xΆh8 hI) Uj<*D|UԊC7I. /S&Ķ1 "tWywΡa - ,8ǿva(Șʥ,!z˳Nϸ bVR8ќJbex>9bX@j?RātCx,U8 ՟L&n_I@8<c&##)@$)7j "ՊFd ^ Fo$a.4V@ 4TV_ZNy1įbCɂ bT1 ^2>$F{= oCǶ(.he % 2xM-}tAS>|2Ii^`R{5ݟFCjP ¢Ƚ&G*_\||v6a+S;P߼'L,WS vn9,O3o\kEԆ}Y n*ᱷWt)V (H\O,$q z^^Wz.װ!+њ_V/9U -:[{Ʈ@U5Ҋc*I{dgQٯ ėg۴4~BlҴLޜ1 Ql`\kf/YȀ͐:9U/i.l1cm Ve>6=0'eg'lñ |O-R<. V%ec]y(%_Ԫ 99D$B﷠\~ƫIW%bs_,ȸ[,#tNψjE4T"5kiɭ%ϙȀL*G-qĪVeA>KasSsX-A t7mTC"skqi GqW2hJ̘b,PfY^)HF/Ӓ3Y0 '\%ۛ@V}xkT#kY?Qh= ,s5|esu$~^"sW=Lb {~NK@Q5lꝎڻ7FwThSP[:﯂ Vg6oٛ"~e,F+ڢ>]p^C}U"IWp}8Fg:ĐndybzG4[msٓ"kUH+ցe,  3NԼ2eEA Z?iGڄ:N&_Y'L`B-džf]-aw!?F"9 f+e8CK%X$LmӘ"Oz—Mp+)+ie1/FR "J YȘRͫZ;N T^vg2νpf[1k~+IeUayPW<wB*ß%%_1dǬ OaOk"KF%DռLF췯?|t,-jm{? |&$Ǡ& u8FxFz[76 skͭVx&cvTE˖rN_NYE>19E ,a5}ِ74G~^Ar͵?B-- n@iR}C/tRu`(Kk}A@c=<5P ).*RWό9cM? MvwB2, ^^.l49mq뻃h;]g]mfq[4-(ySs9=/gx{ZNV^9Q턿o@^{ˆ AU{S&8ie^"5iKU2ܿw*k%  *I>3y_ÊTr?9t`q ,;SgmAil)ڴ'b.<(vv0 Y1pJ=l^fR|:1A;i-ˋ 4:1% aְN>lҥPu]{V#F,~vUoH#]}e q52 1{)/SrY{xD)Gu`}+K,/2mZh8JhU7mslI[+`꺭}[?PX!NeVd)$La?`"PAY6P.S{ttkLr٠H]$_0=6f-,j'2M[ }T;Joۗx2dw>_yOulLrqoSⴾZ˹+g4.xӹ GEN9ʩIe)߹itڇ@zr3uJR>*.z/')S[HyRA\ũDmu :sNO}fgBOH.K>g( @ֺ6G*[6ūY%Rܕo)fpTI[xIkdTM ,ZVBsŐ*Y}aX%+A(0mR KK#tޭ%"Kں|@#{ݯ`h@I[qvu6Zei&{ 8NC|445rV[ނ-;+qmmf &ph|byND `Itw1vR7ҭw|F`ZI2؆ ^6aLFF }' 4gd|K#fKH)K])->cƸҩ endstream endobj 64 0 obj << /Length1 721 /Length2 8958 /Length3 0 /Length 9543 /Filter /FlateDecode >> stream xmxePݲ5 0fupw y=֭ӽzukwծzh(]4<,@";/ʉBC#X9K`3:Qh+ K)? @ rup29B\?mR.`- +$ VHc[)@l f;@NfV{700s@QRCTJYI )Φ!07(mwqB53忑#FB<̬L]&` +{&ko7l_Az0e*ہv.`@ 9elgeCrXEߋ"~Q3{[9Ȧ%,io`feoPw1?ecog+@<@_/sfap9x\G+w'g`)_BZ*$+ᙦ'4~C/NcY Z]i廣Nm^Pǁƣ)""z(]}R-xliڙ*tX8Ε{T+T&%mTa-~i^ vxôehᙉo sBCŠ@ǝp|^ у#v|A;jrvtHK_%Gk_wop{KKb ޓ-iU ˖# -q ^'nhFj! uff34V9&u)[g+|'c3SfF=\EYsĊrcRu c 8"F#}ouSC=tHHF:?4So! P>П?4}vb,Xkk;K?UgԱcRYtJ֔L< 2u$6FԌDhS0.u,Qdp.X @Orj-#0L7jz4y5MHt74>#E֩y!Rļ$ZH! RjJjY0)景bh#%mzJj6vd[6Y9i[і,Z*m?CND#a e% 99W_?+F{dihbU7B<5ΟBBU~S/__pVoU -1: %sK VallN_5i=C*zkD>8Ǧ.!DEWϋ҈=C`Q*j\Vc\ DwWG44.G*iMW+q=.P`>^/o??_T̘_PU=i64anF|efQLo"o zb)2ii ! 0SQ/wMusޔPdx[Y isbh%F{uuJ*YP֖$"E;SsWPj3"ΕM,eq^ZqӡJ4{AaI駴;m,Ro&\F}!=9L,IDo_Epm}Bè** üZGOO۪7 } ;V6s˕L=exƩA<L.,hOmO~a snv[;nU΍wSfQħX+P:`0IwP~q^b̅rɏyq+%\ 7Dmt./BHP͠ J+S-|2(;}"+],ō^KOƕ[hj`yk!i{4}Hl{?>cnvY?)$'H o$)"f9S=e  k 0^,>lNHc3Л_ώlUz2Sg WL;5A`Q8^1 (Ѡdg .9j'_=_애PnA 1?sTW7O%Nd@F-Cvİ n6Px嘶[Ȇp2'C] /8t[vحfH;c䅳׳؈-[@EF1yhG$y}n-$SL61KHϺyHX0” a3z?Z|Y+/t5^lPx+e5, =><ISK7#:=0~U-'6 0RqZD#V)hⶎU|D5 )X5XODD?x~nw,B4VW->_.̢\q~Oj"^P\džݿMvW5t'A~5xU  *5U䐩lĹlָbɠNd)ox|/W mUAz壟!'/eѩNV]L꩐A8잇,w}*Ax¥U 3-ցĺ%0NݔCo+kzT̀cI_P|Q: , pL;F=N779VDu°H}yoMƆe=BZ$sYBSR\F+W@_wp'eRGy'bqYV+\M,JS@FH&(A ^|4hyDJ%GYYAYiM^LQ$WsT̗Q+"g/xh#1e甧ϝy{ZVlbdM6Asg Om5ܖ|VDgC*zв5ׂ^n3y_)iZW٪l -a!V%i_'5qA\ #SS/e9ُˌG3"1̏ 4w7XP }%D%c"qAHbs g/kr#Twl 7!M68MH<^ Rͤ+<)x!+ tj7f  {H\\o`_a)}Ed[MylgxXqo1t>׶C[]}d S8}6YX> (gckƃf=ľ ?pk (۵fpӀhvhk(Ozݔ,MIlZQ1dro^ nP=;*oj/,/4|3~ϯ Tw%(Iwh~F= 0ƃי Dmo7tSPfA3ۄ3ί _*¤ۭh(ehmn6[V㿡9,(;^}d֠װȼ +,]c ~',ayzV@OC$[Ҕ\{]3~ g|Ю 3o x\@ K%hSO+ڵ|2dLa O H B[lM? f8%}u}V 6;DG&/Z& uC5!,%6zW\B2g>U|cC(g,=B5\q`͒hi 1T}Unv(hTAXv{$#?7MrzW a2{#лjU^"l0+*-پ@ks6 TZB%5s2htKRyZw}1BzQsba!GA͗wq$1zgJWjx86cuf-MӘq{\ Jz+.NlcC&]vRShHM`* O$! ψ.wu{\h..+|ܷKA),x./Mi鄋ltY1= !mbKsgx9ӹ&+Qq֤~n$ ٹހKn`. t&I+3.MQ3s.apx֍e6 ,#4i(7R*Z'h'ܞQ(Q/`Uk,gfdE&V+kV^F@7.+GjT*ӏG[5HȞ\C^+ׇI鎨wG)y^f!Șȁ^_{{Ûȕm"+".sJ`^qJ+NI{c_V\N<.hx?rB+ `.Je09afk(fUșZvሞބ,xIMe}v)5ے@#I>:x'p}Gvo;NJ=&;Fp]A% :+Õά]2H@hzStsUÒGܮB̝p["=\Y{SP D(pY]Xoϟ-80:|\J^F| N棜 AE8"ӨAI/MxBl0p]^u]Rc.9Y@ǭ5ֆ8k3 Ճ*GC):2ÔWm ~́}ED&^pz@r҆v٣ҳ)Z$Y^d<aɼU,' c Qv"𠒘Ny 42~Qޚ/e&:nǵn'i4Aw՟\a 13gƭ#b8m_o15i=1 gx' osU}>vψq[.)Oms^Z \ &R\)cyh;.+vw u\%ڛPVfE;›3vas(YqwTwbXb\k5<M)kSaś8~x[P#Lmz|vڝs0$z* ޟ(8kn2"CfJK(JHDMT˔e:i6*s{}^fTMBծ`v2WqgNƑ%Aƿ?'ͳ PgZٚvJۃ`s?[\cO:iA:X[w=*+bݚp*#EE/TE?Op{IG;Y?ءmjIbB:"ΰ]U^Z|ip;+4{N{?tݯ&E)dwFUNB.<$ =sor|; K4a&0g GWw-eI,";@+G/:޹:`@*+!ZuooS] Rl| [A}2(,O 5qa|j}/rSZJ9ߴmgF.,*6;/QLL96ZM{C8N[4;~x;aVCS>'>p+Xs) zG51؄WBQljf Oq=,\6:D|wIDzxy&U `Q',I|p[/b1m}mDqE.Uv97LDhIt{l,6m>6l8tQLc"ضCcz8BH0GW5/(Zh̆x_> "~f5A o@i:UTQKy6VN["ߠUÿЈ]BL-NUR+))cT9KƇR5'kŅ9 >f"OL[9&Bvo:\ZHjB)ް#VBtvz׊:bOцJgH͢ʒN$w7:A D߶8N{ ު:,1C[ٸPj6Y<.%G^JpFbX)'&K>QYxȠ2͍qî͠x݋|h pɱ=W=!Tl9tZ5y`>x"̼hsnXCuYH q"|sao#bV%(Jmzc%huO)PΡGx(lf˅תԢvD`;CD:7k> stream xlpfݲ?Ll[Ol۶m5m۶51&m;{9{ovծ굻kWXELPPUcfbb01’:]Ō]<M@`f011ÒD=,,]T4lͬ쬜nV>777!7gW'WT@%`ne **iK+H$@{-@ ge wRafVəػ\q /&,eTۛ1wqg4_\5_:ybefYLVMqT`H 03Vustu:̀Nad/?!b(HL]\kN@3+WLV}MFyy9 uMM̬-.`kdM<.NV]& ӿo7=33+5uurڻ{'4][v0 NkU'^4[ A;;mN Fj ^ 7`&ЄrG8<9MZBZiW\np cg~q璱D3Ŗ{^+E9ڨsy;~u^Z5S O[RAMScaw㻯)aA e3&쐑;Sc ʢ<ܘg8/7u,^u<mUamb Pro(##xBٌu &/S8YA.g3]Ҁ>ݺY a UЪyNDw+>,v 0>ـ$d/x_3ϣ~diz zBcxﱒ=$E W-֞ tƞt4|S.W Φ^8nda1ᡫTcHGyѱ!*ӲN|KdH]"Y,9/MyqfG 6yB//)lf>]N@Mbto5}ra*(΢vח&ڕ :)WmgBƐɃǡi[Ko> %SoW!x4"[LՄ1qxC~h@ ]p~\,zZՈx3pvUrR3!$ guf)**tAʻdk\4f/DbKтFgY#ӄKµf:%?}+ 86Ȗ7*̋B+MY6[9RpS6=D!CO_m9Pi9U)"fDRcl_tiBIyXBmM;mRfXkQXWk~ֺKpٷ@ᚓ)á104}Ïa! nXb1d='(ٛF2(Y05åX|r9j Y1.6ͬ`d$O6"` !%/\DhwD6F;|]^m5j2jn0C3{"KLl8 S~=go{$J=vH=W5]x[Dj "`D7EqXd{/ibZ t_U*ȸ-.^2\4S5/s(%ClM'.0GaI7xk% ł6̶Phd+GgiD~;5-Z.D6CC>\U5hFC +?"JdHO-}N/&+LV3 DP cccIW'FhwE+|"Q,_ٛ!`x0}07t m]-JLś|_)O~ y3R1vhڏnvBf9*9shϡiy/KOJm@Ӳkbk7D<8P_W3R'*6ad<̐v%lީ"&H#sFt򼵱)X /;':v˝V|٭8-: W %R\F8_kP{:41h$&Gl̕E`. ~rG$(Mp͏MicO]|'wGfD8'r*tA/b[rw׃2@=8T^EKߒp(4ܟ鯊=K ~>=sI߻:6k7^DxXj?鎫++ʽ7Udk\:ɩwTϊZ6~2SdGk",e& 58ābicyΚ9jJ޸S.QRC[=dol$JN*dz_}2pEnL~emUaՃ#+6rxpbs.O+X=rE1*<#?0od7.(u5 UwѴucxwMݮ2O tRGgWg GZߣcf񔼖eL_۞91[arkXo>u=о\gAXYM$HC9( YD@XYf&݁>Ɣ5t 'x0 zDbaOΗ}4=U1B'pWQZlK0uk=w>Gř_ь\TtC21ǼWn%c[Jp99L~˷v5Ul6-d8NaIyB/GnAnK(п4q8fۥ}ZhioYӊ*{ ǻrPD>=ouYE²Z>E@5pior}=qz| umUi P=C} ϳ:,˴_>Z |ƪz6ӀU xMa`^|߂LU~68tnikJcS3B8ۺp[#ƅ#^tșR9t^SPX[!!Ɖ徧gÎӰغ|"\"D`CSG,J,tӴ'k rkTAoY sR1ZeywV1j^ gĀFbkRpkTUE͵ +G_pj!YR"l~z5Wg;D.%ƀ|b_$)o !rM9r.o5DoOdc4y8/Z(N1,Ԩ%cXÓRl/4鶪*ӗW=[ۃF(î¾ʶ/A15F7}dnl oOd3I&^vآ]1efu/ur"V0e'Iu>Qy+o!;=ʬV-1# o泧D'\&x7nV VF}e*P(v7RP樛P*[w=liee8\0C7q#4, TYP?,XtMSg~{IAJ$# )ZrF|L\ޱ^ToĹWCLjw#QԜ n>4kO`r_ ~ۙ"Yh-x\ MHFMpNۆ{#dVn6Etk4;): u1mU&HNnٶFp[L>\$jORJʝK..p?64} Y?  5Q[ ƯLJa90ah?E4_=n-M|".qlr~>qb*Uihxl*,Sb*]_]M#Vf.Y)6b!ؗ7~A8HEXrlad 8xPe,^?5ĔS blgm߮U}|YGN9/gT`E:55vRZOLm9gCg. IM$ƼL$6s`ӣ Om{s,B :a˿ QD찦FB8*N j+':ebBԢ&g&,syd3+d=>(PՓx^G(_-!h-j}g$QP=mΫ57v6M!V%>¯%k1.^MSد)H6C WؼMh4l!9'^|i_g%>|~%Ԝ6Gvm&l,}V4X睼 p"m T^<VlEttxL~!M؊_(5ƕ\L [3:Y H,8T4cnaU< C#?.chg Y|z5XPpfOt'qZNXahkLE~c=D$Jp{Đ6[մ5\mt+Qӱ=n;\RDb?/M.CFCqTG xGqN@sw?_@zIDy]Ra''19&zPإ{6+%!3i[^ryR%6]f%|L3lX p7nؤg[! ٬)U- $q[\!Ck2D" +?,\+1R25r/a"-3)ZLv"E3malPVD_)n/_lv(AmDh?KTY0\q/GO!LUVUoY;?z5'l"Y[T`t'SV[ne(SMG\;7$^0w\tpY2]bcp̵ PɎUӘdE۔QٗDQ=i%ȒňDu_~cU2}yn]CB, 2@[?25e2nKTatx n91,x6Qʞs7u{f]26RhZro4r2coL)'MYœ)x"}ؒ?hk9Fh uK܀6Chb2zhJc'm#wAe,aZ r}08\?)#YVjl>ЄA.4Uka?8x"CHyp"C./[BEr}mq4vB<[tCqp8Ciͣv5 ሐ1*X˩] LW)B} גU?o[H\+į1ɶA-! oN=_eyP)F^F%={g <$84!,"6Ű׌Qɟ>emÄ.Litq&5JȈd@(/bp^_@dOt64K 'fnǜ#;k1`t귅Jpȭ||mpI"g8"ʥeSht-/SPEubU^Yd[^,S`G .N_iB PH E0VOIpױF)W!8!_,>͑}ހa].ZV@2wQjb_ Swdq4v Y2aWpύԎU[})jLG!s})z<>{6?zÔVjhHIFJw՚jnZ#g1hl2cuPК!PZF^l]9dW|V@]ڄay6LY[d`kcpT[27keH?׼dV#0ձ4lh쨽0Ћ5NE֝Eq=}F1ʃTF|c? ȅXΝk꒕+鰔^}RenC53k9dJ:BP! Հ8"..oT#yx'D6fP:8,XlrMf'Fփ @Jzp]3.o2t@!`8 N̓(dEGyKPkw0cIS/.Zݍ`go wdB2ZkҙM߅U'©2"ZYR@Q4$v5E!wy+ ܘ;"o!fotnTڲgc"h3Er&|<Ю@Gh>֓st;+pQ>3nSޥz~/[<ѵ@?uϊh pX `EYe%W,^L`3TxV:~;޳yCo>*"CGs),N!/4-肀-*RtwR cO54j8+f޷)$ۅ ~SW"WT]/N9Mq ^a~]+3dIƜ3Sǂx$[t@EFssjiu_~ev ?'58(L94gEUyR\pRPɑl ԮٻYM];zeY_&oK{rKr~{`, +8$`_PգI>ڲ}W)tGroƅXYGE$qU*dH >XϟJ6p±Ǣb5Γ'n|SF9i.=}Q7p>om dx&W9ZoH]6FbI.$P(-ts+fႚ1Sq5-4L1ͫK>jMB5_:XwOB j C.rO"ԋ"s mvDj&=ͯeY7 w!!8ffAOzȱ7ĠQ7P'3j:]A%-5@[[M=4|ms0n#GKmDm.X?+rdп_Bmai2,slrw#3pB!PSy= d}6EH&ªYteg6i9󱛊-h|oЦ-wK_M;}ש/PXcfO@ *,%W&,R ]9779Ie^; sq K%Z15+Ìx^J/x/3j@>g,_g2;>_ɈqkӾt!yWM1 ֥(|x }:sB4g+`;I YʩVNb `ȃ&7ju"{*5N{j5렇 :<>SI-Ԓ#eďKu^&>FVVLYT09z?\;fKCJv&y# 9Se/ x6yˏH|`q8F YXwـHǢWBD}]ʠj uXB`CϊNV!a 3 :T!UJ<;BL!xk-g=;KdK@$Ua< kcBeÑ˥Oy?!uH%OQ4NTd0Bvo\ehk[Y8_s4>)gnjhzY%-P9Xl vUQ?Á.b4{&yIG* 4awG[cf()MXq#-JXo2rHo1ADh] Z9лuA(Y2[_)Y0S>zr~ z.L?}}|CJR-ji "$} cWJ0A EJw΃sg|=~Gq\x}z)?ƶE L<8__9IYg Ft!8R@쿭 .$79/n633;B'<a`('J{͞*XBxdC85]Xdykl5&\$I G]Mni-mY pݼ&,q;$q7B005֪dr ھ?lfq߻&7 ¼׆]7uٰZ\QʌQ&pfW8X"' ]%(F).A^"b!bqa\uu+zI!%٨ v4f0Qiqe6ۯӵ,|(s1Fb)X<Qm]n1g 1I}kQfPwnfHeɍpw]MwyfTwhnnᰲ% tzV<2 t L'jYSPz  M.kYn/m>y2 i©%0Z/'/Љ lj 3ubI=~Ǒ5cQlzKJ]]ESA%< }ncz(/U 312Яh5XUs0EtX[{+:Ʒ%.'~Bg!&!\ۅBwZF8z<  B׫PAu&D56fXX7íTO573ݫ9"jn-;en.ǵ)֞^~N+B9e 7j׈2zv8S߾Oj8L(^לּe5M͝wǒa^_(4 +=Nէ' FR[ UR;<pbr'gy"lnjڛ6󳷓ɘonN6 P/j5hM^4<_`yVti!vMY5|,ZhWq[ ,ˇkZruFA:6 Obc(j…}3(fwϠ Ȋ ږ*Yv=b\{)HDcNS.' 0[c8A<=࿓P uGJ{JЫK}.0Lc5_)W2Q`Xty̘-%N׼2W}|[/³Nw1y}hv ei b'<ۛI|p?~̧YWBe2+~wb릃iՐ-wxS˘u:!1@ޏ0tCM%]ju0U\>LeYT+?>_A:+"{T$ם_s֯27r~udjeYE $Hw=2+,5ȲR(E]ĆoOg `{0p(F/#5j>:y]3y -;1̵"b'؛? (ә6Zm$=FhXXb{MӸ49|!}p?Qb??Si>NmT'g\u cJ̳I%+c5~@'0Z;/ _d.ABhĮT6aʫ&{xUkQѪM"ȝ'?"q%'aG4 F&P/wl>53ST`vԈucuQZ4tT\v܆g_?C̚blnIЧ~%ktUp}ZkiwJ"gy ,tu:12FN |~t{*/,ZJ53<}#'I )D2=dCvᆁֺ:( gr-߇ >Shu`6X*%४\w&~8 dO݄n0jw`"hPK=2)X;##*vB)?tkCe#AKhwNIh%W~ ~(eLd- bh|=b$M>HCm֋e‰o$N]˿-JB+@e(t"rµ*)PuO( "NJ ;B'_#hP}%t06YIwPwb,,iT# ToBO:ym(SVGXWgs-/S5/1U;+@;Q"Onؽ qټ4kry {W$ {tȤyΊi%~BeS06j6B8PZ4ʐ }f3w4Tr3o/7 *0蘛:h-(F HQlh"wE@0$y /vU֑1ZZh8nqɤk,,9+p@W281$?yH = E}K% IbvS[ %^zKihTaVv7nF):(%N95M7 stWF5@1i$>Ɖ 'hc:!}b} RM5&yr/4rӰ\ͼsZe!)f>zE]$}~>VnHDVh8Ǹ,k@x vd| -%]nh霭u}Fg?djJ zt5~oֻv9.q40^-0C?,^SEe8=I]` I縗K_~7zWK*jTCg $e,[*dyMrCJZ E{~Ķ5u}QL;z!p U,~ 3/pYqQ4`'cdcNe[AXvb8]C"uXEWJ#r(9Gx/7P?BtDRY70׫HVb⧂'0T;݋vBQo1yS}N 5 'F $+vp:FN2XZ͢<2s c͓JHH &(`/ܚy ¢:v`cogZ#)ǷK fլEbd0'X#kijΣ1(8 wsߧ+hԘjsO 8| ְLX5^ ~pz Unۡ9]4oE;uSrw6RKk9Ӿ7غ(.k2q`MOiQ8y<<T:ak=. wS*P*J+id mrV᝸skB>fʂ.ȚM9hšs|_F{i`c~Ǯ#C;>=bW`5g+Fbڮ,1 ]xBno5 `232.IK?t fU ޟv4p0=G46FcӢl~T{g<b~5%r{^mKt%8^ |k_*l-f`T# 44DtyETBvSp@86%,H9z-e Gׁ9z<\懝Z= 6uyR .K)/?9l7P4V7mFhh ~uNu=ʩ튰yζ#6 pfofr*&fD[F= ,aDqixX86M yESrJjrtD%#`!VGcZbyQ LGDԧ,D- [;V(RezjWo P:ad \ˏ~,l686h?c)H>g2usw֬)1È☌tqwWW'>_~_z'C! :Cz0&SU 6ՂC6*O)']:J CΞ/eOm˶:_<**OT9]S1@P@Ϟч!=O{Pln|d\ |-~Ag;fi= \j"ceU#PJF3ז\=*FρF*j>vTa'""e>~T}@a>~Z^2ĥY[+Hnday,,;_Xi]d"Zڲ b3Wb[hرI񻽂RF[XДA@#(珳vK#;CWڱ DOs'FAc,xPy[ ttUǧσ1?ASsOu{1/N|/~,fk sti|')ץ" "ߐmMGLיQְͯc/צrzDm_0"Յ[~5HZ%! `WP2bӫ]; ?os'QlS@LNnÚkCY!CUH /!Ҝ>6#gCI˝6 0aCV}L*?Ș[FLG0C]n͊gKb^o;i3Jg-+$w6:MCrQcBG?'<v۞"kV7N'V5i<‰@ bV'>蟕fAW*L8mh*hxBC1;@%(R_7N\g9z~b ˇ7a5'3Ӊ,q|%b}FF'uGpuZ s6 DT&2] =w8drHDWx7q:F+|ki.5l7C5c0n51vmps9I˻%7BQl{A1 sH"~̺$827+/o=LREOdjY`1cP#̫ EEPIնn z16ZͲ`W]?KE%C5(M@ Cڕrfc~;PJK)ky@ {z%sz=oT ᳋-uCH,=}>IS*aK;p:5"mwh٭5)gwL.01>dQKrř?ͻ0F/y!@Gu%L"E/xFTmc(mikU9P$N?m4!-ۑW')ɗ{74(.9PCjjOB3n-v$_QB iKsqrFuB! %ic#xo$EEڽAXSh|(WV]ݷ( *q Bo6l榽'U~V6~x0tvS_!*̛PiFn6dY&ωi[Lr16&=TKD[}`C: b, V)cas8Mn2%2kn# ob VG˝zo@"+ jr:q3 gPyZ /3@JuTtQp &\ qd]ݩR{ v[y=;iksYBFG FY*kcLmHt%_9tq}k9~9&%ʓh-t- M{2xw ؔBhdtxU(c(H-Y;!zNNO; xbOy /B +@r+!S_mPNhO;ʶ-y>66`-Hp+1Ί_hDDl/`ʛmm$_%6V_(RMx x{0 =+f˯&o).ٿq9wRI8xB;;^|˛L&5l!h6OO?{R\I VmSsd נdF}]A@9רxT6!QF $Y Cy=7-q~.̫r>ĝu&ʣT*oNZzLl-]1Pyt<<顫C/EB71&"_$;;qQdzIK pJ찂3!ߤtN3f[1NR9Z/G\}L,b9fuGs&6駐U,^ <3-F:--:gN8\w21wȆbrEO*7e4#x,Jbi0}³Vq:/&Kvw>8sy66${x<3.UizP 95R k *@tq-z 7H\eT {b|>+D.I;+VESJmX^Wo3B "י Z 3IC b<7#907j-t_<4:N9%$6?hAqO]`7ώ56 lƵ:܉9T<]%$Kп(iӊOל`1DQev;k ls)X0ǐnvsn#277'`#OeUG*Cڈ$_v>ش)S`e u}G(XV<&9<~Hp']>[ .[(~!EԑhrO$@Γt KE~|tC]Jzz.t)^b-X:a^pS*n*xAt2m3"2rWc7z7`Ma#;n1G&e8;M#چT #amDƳ*ؤ2-0z=+;6;::>+'WJ` 8RL[7- DW"7ʐ4uM[J]+Gf$[M #? aw]֊)AtQRM4ߊH(93LՈfs?X78QF^?kߓ=ڻ#Zķƈ,q#3ȓ5; d|m?mK։< f ~սr־KJ#1?6&YZx_(C/73WpK+DR0>}G|TJ&aXO`[2g@;G¢5I݇դP¯GEy6ў`O^wsxi"\-ͥ{bg jBPϘh `ǔ9n ,%Ŕx*mfXWUT܅MHi๙Ȱ.6+}X?F}@j5:_9 Q6-*TI 5/zOL|&X3> 213g6qNlc":(Zrӗ' œX nNg=wRFs3 /qNC<Oئ(}^,_j8")&j9驠򷢁pA -C5Q87}&G?;ʷpZ}l^W9η7Yyذ h SuM2hWwe14RG0aYuWRk er+{ (-i!A(`|'? GD ) Q8 `{Y(p(R22x鷪k0km-K䴮apfcrgKZ,=bnž~ٓ4vI? ߹ܧvB@4-d<ً׷Vhs88,,5Rs"\ mlJ%|^bG(LzhU\ ,8j_̏%pй%vC-"u'=b|:4u%c SS|VиܦNt?߾4({Qɇ"R^`O;E{Θ<B()V= ݱGGܸ>=!9(E7/-+z슨&ruï[}Шj~~xOj/bY GEL8$ +C#uրH”EbƉ3LRp'{1L]H.-NDG7#p񪢞Z%[^T H)5hַTa)-\[`Qq Cٔg?)%jQ["bF<'ͧ}HmV[_r^ҾAH:>6dxߚJ=%cZib&MqOAk-CT!mHo/wǩ S *%Kw[e~/I/>ּ U͢Z_0,Xp;cɶSy_:0D:Q08ܲ%ek/K45[K`ݕB9eCn̆iK :#kRg2罪)ZL)? =ሞڍ!BfH=bpCY֕Xc,QP\uӆf_~KYn]y|˱E.qAѮ?)kvF@,,Edf>nb/~_K? W{91Mq\S< O\Z]΀9n-(5%imB;h&87͖cⲬgj_"iN7M 5o "f^7$p:}=ϰTs!nM_Sl, R7}pK} 4@q5(J oL^Iϖ'7(wh$CqRiu6'abD"0T[7iN~iboկ҆Mўe?0)5 m-W&? MW/zzh4v?4%ğP,*ӄ ۇE 6&<78rY0aD+:,y aąʷ4ã7,w^dp . 5P߿$#7}WWGMcv- |ݫ1dJXC&n.A^JO%5v[sǺTs3amtivmcYZD%+g4ej׫LK9@L_ZF5lUx73ۯ@]GJIj UiH&œ%V5F0?7 dX:%mRǬѥ FiGE雛)E-/RW9ҟƋ3&~ySU9gU2? `e(z2'&+lj =J=.%Uw˴A/&*5Bn `͸-y#߰<0XC:gXHcݑp?CBrpr ĵ]B:xS/o2>T%2p!\?9XByޏKPGFSe'\HMƅgqO 5ђECn@M?tOm] 45vҾfkU덱Lc 1dB4վ P'4 +C|Ҩssb LYߚhr@E .ޱ1?˚B0G䴃13"]bsڢ]gC-+:֓x9vMe)*qP" 4‰ =@$N65kI[ QФ5q#dLC`oz:ZhC,A&R7M1TK;ߢDbcKsi(~yla\ 50^|2&_M .k$d P\' ]j+::ٙh7K#HHώv5*ܥ&ŀXCKVGtu;f[촾Q졆`>5JOh@.&aLo^Y8/lPZr_n560Wބ[Y%%lq6rB+1=kRQ: "YPnHn1SHhLbVZ.Ž ҡz-)x(=bRdpωn`(*ف•pPDLqg_xzK$ȰT%rrH MCCT]CsG5流:U2=ٔ5^[Q&?&Jd *vubi9?Xkvmk-\ea6d]ԜB>z%Y4@5[aږP9a%_t&A(,n U}y#gꞐ[~\^ȧ:Ѭ b_}ض I* qVOh3}Nc`4]v_" y}ZFN]LKƳȉ誏p&zѳ2|P8BKQ_6x6 C:jpN7z*vۃnXZ!9aTyT/߹q;;4 gTC /l™)Yݧſc 8 %:ME]sxVJV"B|QQrpUSpyg014CpZo⽴ַ|jK#tepTcr{¯+j cT-so [KEeP(X9F^wSgfA2GpvƔ?b1MY1Tx aŸ9A6QR;A.N/+c0̸'Iɤ?^g rF0AVa,od4:3\PeE#wJl oB6;.ķ,c!W(nÛ=m`SE< Wwa`s^ :l&2zZibEM%;} }}G}p !dOq*ar>6DZ@F"yIN|9%BALQ=co U6;6].zT,d1mƌl4s- %g~va:Oi6"ԟk$#E*JsxAƆ.d#n`4Yf)Lv=FW.w+`,(gω0p<^ c&RV fkΉBÕ[@8:/<`ސf];wV]>F"K@=z~0 iqS&ꉇp0JT "ͨ)t'fC8C%uD&qso?46DҪITC+]Q$aǼrq[>VvV nJTƩ,ُr/3[(a04Jm|@5 ~LCe޶> hS6N*HlP1T^ 4,7gCb?J>'[)v#(Ax1H@QH5wl\^]=psG"Z}Z<6>ƀe/fg!-$؀8Zk[6'KO!VYAZu q|}3Ɯ (e룁IRF >5o)*WkK闠3̥6XJ#|qzzm6rC>lo Y8Pě9*QVq2<I[̱ +H(c) ϩ#,tƉ f]WPk!|HT)P~,6=*G2p7x~$~-fNV= &9௅"8DHv5gKdGl#|: H Æpw咿r=5*{g`Soͫ~B;{7 {Ag?l5\" >P;h [f}Pl`.XdM1]2|2֟c%m4w*l)bЂƋV<mxy'y[8H! 4\[{:;uN j4<Q3L$;TFK+{_͠Q`9Y=rTJ*{^xBR]Zu>`KY;tS :0 zthze3 UyWxh?`àoׂx'o7"PXXײ&Ak5hԹ W1Nh{^.$L{ ƇʿAZ˰ӡ+Kt#_ja ŀ<{Hic[ Ib nΫ7kcYr\Ų:αE֠XviWzU@wˈ-eG?OPĠơh'zEcdKZ>ghVoe5U\%0U2$6RPaYM1Db-ڰ?]훨4]]Q G)25d(^VhqY O>| 2w+{ǫ endstream endobj 68 0 obj << /Length1 726 /Length2 17919 /Length3 0 /Length 18487 /Filter /FlateDecode >> stream xlxs'ͶevuWmFm۶mvuٶmۚ;ykvD㬌$!qRv3fa(*K0iIHmm9jF%c;# dk`nj 7WjodnmPu174p8::83Hdf 012kHȊdUb6Vyg+sC1`o`hkcd_iEb&eQ9Ye@ -p'GƆNU5?,X:ۢf`: MmK7 [Fv?hH026le%om sv2v;$aV_E.`ct4 ̴;ɛ;#?B+fݑ162w$ϾXu)_ )H+S 1521(9J3ݿ|eiIoKPn4,&F3 5tvp0qzm֐+"%GpjvZOjxe$A3#+{epՅG1 m2 oX}jYk׽5м],]rP; A`g_Ǧt[\|M'A{2$N/G\UpoF$/|31 [8JjCu+V{]r,tu[7*=#yδ!=e&jSk~qHwz)$UTTC%h@J3::- !qM#kEnȩYGWXqLZ4A&(l$系.-F+uQ`g1p}C2E(  2pE{-,ְhYT|f )k m@F= }=6+l(뿂+A/f4E?E컋+0 M߾xڟN3]e(\hjt,XC* 쁾I]u3I%<p{$6Spf_\ӊCe")0D;`#}MKTp'6ײht\ů2ՌΝO` #땏iÇ> 9IޏEhϞB8OCzTV,# av-'744Zm(C[aÉj1QA͝[sHxt;hȢ[ciz?>qj Qޙ$sL~;5=qMIiS,P$[dS6UH/t\UtC(MG;r$cE eqĉC+.+@ad_X_.{cvDıɥ:hQ rL,bK8LvRZ+whN=!JQ1n6mN97Ѕږ!\ϻh_/3wCJ'|Qkx,RI=>)(5ZN 9K^$;cbz9Nq([<}j K.ZXmlJWኆ[ 0@9mZ hdL+Q<T&( E=a#iNu';q>Ό^!RZ] 7H4[ "ox/SKNU%btDx "* @x,RƜR|aRPYWs7o5:? $ |]ze\$?hEֺ0^/sܪ[w`R31Z7yrv#ww8 ArA a]dB)F8нK-w}*?n+i0%Z ;Giu{f+` N2 kiMQc`]L<(r4!]WS'}D7mTKVr~A76+{|x\0}8*Ƙi7w'ͩC:\xM86A[vl;LO 6]Ȩ~0Erg cz`9Ѽ+ ` c|5JL#ktpO7ZEB#֠IO{%SnL"JdrKlwr w};|=Sjk`LRdAhmW~&^ᫍx=hqY1qWǡ]& 4 EPvJMł7[9 MV&_BjKªOvju&1S0i$fbC qsΟyr$.E04]̈/ _cJ'm292 R, "{RBB)pwdtiten7K9v WUZsh0?RF5cݠ5S,ep*DM 99碋_/J&P,[[Q-5tl F=S@ÏNELM10|4=6VVߧ5oRsgz5ؘzIޥdake-82cڜMߺ8ųUfDWC0Fie_-A:L)W<H^6=Z,Z>6݁-1$ IiN}z"hnWo3=>6ljPU 2ե]ZA鲣m4i?[ ?]ժ׼\&#!{k<;eяT@xjܢm^%0C+ r+pUʯd8ªxf''kaDUZk={/2^3Ghb4`ŒW7'޴gyjG^E(C@Ox}9^1l։g8|Len4ϔUURRn( '0q,6|FRt(޷,τ^fQْ=Ap.ߴ'쇬DZĊr. ֦PDۯݰF4Rʏ]M"KCsW MrDo〴rY"0^PեDaar%ķ(vQx5r ILbϨ"?xS}7̕{_<1Iy-+^Xk[P88O*Z#[Y| o~d$V8^N_RyŽ;.`z{ +A,#^sx5-$^׃zD}tN{I}9 Ic5Pt}]X(?7 +! )ZMYzWOo.6Ҝ%0Mn'a>/mn.RGd?ز2l40J!cRILסU-~]2?A~24P0Rh:Μ4^h4YeΪR#ᒉzq|Uߚ_Fp@Д W <,A GȢ-L.Ch6/caH(u4 UsSd`\lª9eg'IʉŸwLSkk.}Atg#a[Z/p`{A_p1ݬ:-ݢՃ^iV] >_ʼn45Uk_\|LE =.M`n.Z )sѼ9 iڇ arM7X&k'n(\,2#=Z2RLA;I:8#E4^DE~x^~;NPm:8޻۪ky( 4#n׀e`)栜u-xvYJ٠;uy È%/VI}:$=dI+T1]+9V tHk:C rt'ZCp9Ҁ{;DD`H[#a%WlrFB {7oNsg6"hAC4HI[;L=FK5#a V0AFS!oo)n_W{p]ij%ML.!K :'"JS*D꤭m?ӑ鞰w5'~S_IUKYkEzǟP鯡 SsBݳq]`V.ol8 LѰ)Bp F߂0'$䋔Od$}H|ÿIJ.r&tH*PGWӳI)DyߛmOVF UcFxϾ`uA3vDUGa"mj v3E] 9nT:8Δ֮z 5OcJ'c$KE18B 9GܬYݛtR_mM|_zpCAA26hG8)ؓ :v,n?hpNN_2T֐w|#rgg8 Z09Di 4Ԟ @7J'_nمGOTՁTa85:GY%%U1 '&+ ?=\TݡoSw<ׄy%-,%`^Pu68P97X-UC6(2Jo,?"Qk C+p2x II;~']B=WZZnwqv-[ #(K~,x{Izx=7/ř[?Fx펴e'- (=Ί pFŕ|]UeUgBm1庫 UyQ{k 93 >ҵ >b \-G-K{?!HRЎ|TMUm#qd-ikHij$72u`_:҄=;]^e[wj5 Eaapiu))J^|<昉=}&= j_˟'(Ek")m㻊Nj~u%QI!g-d7 d\QWQbX5'30nYtT=/C|ؤzj b?1Z VPv9QEE{.V!4Y?0;$jTW (OQv ':umvy[5?t:_m'>8(w[ˆ FU\ h3xMF{n)QiʵЮZ ȱ7}ym1[̘Pns YzGl{j4{qI%Ñ6큺3]Qk Pnjh6u0}!FcۜmV>L9zvA324 c`>^HGeeoOc˶:uQ3t =B"h|aG,Lֿ$}0ao':O<9S`؅Y#CE?eP88A2~MzF/w# Nk+dW N="P{njO$5dn x* +b;!=7V0asSM ʪkMdJNMP:Rki!'jD\hE%~PQG6y} R|H%Q\㠾OE_W/(sU UN) H\+rM*+e_&A#tEfR {h?nd՚حk*9AUzKĒ(e"m/Y YaG]v`DIzY/h7"E8e\(K-컼 *W w D|>A|[JLA3`x@ 0 ī50!_-@A| "g]h1D,I[ΫƇSt ֑ 0$Q *ԂYgY BX Jr6-|XrDoS;"ևXk3RÍ0GqQZ\@~Š8Jk7K@)Qd nnۨIݯn}ĺDHj8˯`zdΈB ;޲`, ,)l 4b 5ɏXVh$8po| p[ ٯDlFztզɥ+mwwĺ$r6N.WMG,t[_!u-'T `$#ϫ5@;S^\b֮ 7D7E[ߦbBaTv&Ì]x8˔p{)ǀMIk kXjv`_?qxqh5q#h9KpYiy%qH MmICtZnc^ lPꀓj~ΦMavL'\pl28Vf=ϡ}2P)}VE`0i,+3I-0a.U'x5 tcl#jlVN3 5&6Yk3]8-CqDF6su0ңS6;-vX5 O05RwٍN#qIJ4 Ȗ.VQa$%GeNҿ㳰c#ͪCdک 3zo%_Ng0rѹSH鎣)s/ TPnFj)s_e#XB2s?: NS̉eTZ|}~ Mա\iv[Cˣ?xdIW'/r|ܢ8 6 (Ѷjg/SzZ@)|'R>؁vw!NEL)RVFnxD^<MP3d-gs8ճy^R=ͬ5M`ݞ*Ptø}%dfFgqԽ[WXۃ:8dձ!i ZCM*W_*O pzc"@n|!K#jL0WÅa&$28%*<=9|k5v:AUI9\tQ]>T85baWJ9MNzV,B94~v#?[`kLBgQ V4'+q[؅1s!7> ? lj/:z F Zs +ÂeΚthm֔Z'ĩD(nqߥ@ gX3U+d8)3 USJ*_XMvΎf´Z AM&q*A+S^|ݮ)íBz/En16Kjav?yaxK vhZ^^U⬦GYsEqI2I>iQ̘fEn ~]E1F/E@2T@Ia X>嶲9W$]2·'NrWܖO*,&CY.7`dj`Vjٛb5Rv!4U=xG0*|Jʂb]| c3b.Ն]S^@GΑsKŴ_=}aoAŷ-u9tj+]ֲS_Q(qzJ{K Ʊ}5ε47w3A,J)7#)BYq}>(?bi"CBu۝P^WA6` ~A~hvc1頙W>V 5,)fֳ-&8bA;6X4qhS@'xU$:=eE鈎C? xg̳ ɘc$Q >NɆˈ| qY!DfKHLHO:q#n+@xu'?G,$ RZCK$L vO=Ĭ0+Gk5 )W @ ٤k;9~P ]0~Af(A'F #.%mҐ}pTˆvO ;) vIk#1tI^?-X {oWu#1F3d uEáTzテGȗ "RtT Gͨ3f#˹}vAg69(ƅ+jlw@BH0ʼ3 x*x&p(Lg7_^k%I=,Kk+aBY!?,/`|+SFdb/j3ɩ1PB'Homΰ&w|J*xD:Ʀt}#&ȇ$o "~sF8_D<~VW)lKH[9L!t`ƈO_-F87 P ڌDB;~YoL~p#yL=85hV3S~OnM[)Y6k敢B6WߘRpv62^L4IPfɢ#+r|,[ PN<׿f!pUH|+<~ IG`gn#M=/-Fyei(bG,1ht*Yda3TQF∪Q PݶL/"8tĮi҇Bap>^&)<-2ƇO .s*F:[RC_ \6ٕy:̣MS&”,J5#X^ֿAzNvii1<|Bx͛EFF"룔mV3}/ N B+zcRi&oiУ웘]Ns:vz_wVʳ!M t=z"-h<4.54 /c&R*…󋗺gu(kNu"zҬU[&VH=62uQ.yv1ף:eMGج[TLr4 ' ?ՐһNOUL p.!o>V |:4d? DwBrcBOz+)Q"cw5+p wgt<w&롒7KY 9R2ktÃ6i` oi^ʤ8C/kNE++#CX>HYc6S0^n7['rwl+c\($] NGMʛUgټJqExA7ix1g =v̾aYku59cF{h_KGY.]@H}*," l$vDH,IWaT$&9Nm<,|#3%O7wUCP]cuLHfR+ yz.eҘ i@cAs.сV9h1 m]~mL8oJ{{zFQ~} ORQ~` ݝ7陒ފa\0lhUyUݝלx+b-tkb*%Q>HTBe%l: '4sRNELDQw큻Du9.xMG%|,@u%tc`~ <&32?kŁ|R,. z Qdb>d.͂7ys1^-@UxXfg@q.apdj,~:٭ gwTK(Q ti%xC3`㙯2d~ 6#q]/~$V z>kkb wϢWجaV(yeJ|9Ԗ˜/UH¸QlI[џGDmKzt[J!%>cnJ $%3e8T$JjGEFG K.i% #D :1Az%o =v6TZ*~U[[hM<>fŔhʀBJ 5rm?]우zWY4ڌ;$ԑnļjtHNJvǘQu~k"{hX;׭55-wLO]VmG΁{/_Y č]##WwqNlڔXcT%Q*|16PXag I,_sZԀsܿCVͦ)P|hTZqc&.T;Aoɹ (Z/'{ZuŐFp {s$h`6ōmΟEM ^c M-ь֡3 5("jOoQ C3JDX% ?%Zp|q/??ϡ>!;#gM9{XZRWt ϘMlGe6۝^쫂UIӾu.Y $3Ƣi,d3RpȗҷΑʩiLXG+|Ԣ]'fpxST̓i͵(Hg{(Y gTf+r% A)Z"tDW0,>ˤw2G(hά mRfvil@2uDޭT0a[Uu%?_=[I[ЈyIhO]9Fp-@ "cuf @',!̪/5!|d )fwڮ! aSQ K) 4CY9)LۉHOόdw ?nϱX+{;%" #LIdDKD6ÛΦު@ۿ"FJrs٥uxB:3R\T-Rr!GƕVa|vJҐ}0&2&Ҡ7;Ѿ@HS/xZ6XI JCa 0EA -5}J endstream endobj 70 0 obj << /Length1 725 /Length2 36502 /Length3 0 /Length 37019 /Filter /FlateDecode >> stream xlsp.v~mXqVl۶ضm۶m8}}jQ}5]wMϐ:x؛013rUT,0dd"&v&uc=Cp03wPQK P60pY۹Zx]]]]\] R618L-M"4% [Gk@Ʉ `j`dgkl?`v691!_*11@Vp[g'M:Z$kHcutD00rY0oRv] ( `lb R gglh -r6 ![cIX]LV7ș[;NUc;[kRAJMRR7_f1[#;c [3?|8G/ſ;oGZH?-?J:KX݋@`b`pp\#GG[O-W3[i -+WYa^B27;yPsß 0ۻڕzh&63;& Yy-&0~W׽Sö1wNXTb̹v(C`/Gډ_[|ҡ@39F3)1x_ ڃ%3/(? ̯Pg:%q zfهHrZ9~cY,/ 2kSW52n'ho6C Ύ1L ר>wΆ̲æ: 5~\qeT[dy6.R%{-ئqn)Y(Y[t"\9;!Y.#m@ɌA4WgA ĘKFS젗P*iå/x󊣑dkڟyCILH\AVh-mHd8GCkY  CJ{GE\]Z7`JÂKwmU,9m!3+u&ڃ/dC|x J?؟8AkѴ/I&-nG턓fz_q#vK5ȏ_; (-f ΐm"c35Vg&+HMϔq/M[ϵeѰH8q8:s+(tyK㛇Kr:l>HYm gǾESuhYWKnE{CE@^^3ŁݽIAˑ5DF4;-rv@6ELtprpQ .L~4iACnH"qm#侅SS> a8(,xu}Бok9OpFh_6:/]b=RtfOI<]Dj Av v3 EyuFL%͈h~tY Zy`I~NI̻> j#rew໣j"HŒyi?F3݁N<[܋SkdÞO!^iL0ZoBEūݏcܸ'<4Gsg-׊*#WGƲD6O\M+ qճN`:Z2UPEn27+D%='Cn-U3ZJyDRwsx84SKͶ.`$3x |Y$j/4GG&W2p+f>u$_R:ƞdY&g$eT׺pu$ ֶM+$:4:R0Sy3bƦ#|ma aD9i=$Q (+Loٕ}o{~|j٦w i͋C&$EmX>߸$fz`~CrZ6fB?%nckIv[dF J9=ρH@QK|lxakXW+ő{YhmVV^sߊ]0$كMV% [ַ :/ (7$x=Fy&@%h9xH6 b>}b {Un&v KmM:  ~cnJ~o$+*P89@依ޡ13Y)Äw qqyaָD+t.z"bem4SDcPsF^QKq쵣%c30ZuṰ2XҠݭ ҆AMGY1 NNbU>sz0,4 UCt \h0塘踗Ed6NYo3L9:I>Ql$^!* GBײETwX0RZªWSbQuJ13_4aRD7qGȼylB]:00s+WOө.〃GtM}i[Aӄ_&Pz|r /y{V 6qFSFH>Ѭ*Av:#:$?Bfg+-UDTirn#OۛJm䗇4Z,GPgsSs.@X܎ccXMv*lz:

Area level models

Artificial poverty rate example

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

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

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

Direct estimation with sae

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

(1/Ni)∑j ∈ Siwjyj

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

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

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

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

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

Basic area level model

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

Sampling model:

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

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

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

Linking model:

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

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

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

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

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

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

In addition, other commonly used optional arguments include:

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

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

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

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

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

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

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

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

Spatial area level model

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

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

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

BRFSS diabetes rates

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

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

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

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

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

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

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

Unit level models

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

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

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

This model assumes there is no sample selection bias.

Corn and Soy Production

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

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

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

We load the sample data:

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

Next, we load the population auxiliary information:

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

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

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

References

Battese, George E., Rachel M. Harter, and Wayne A. Fuller. 1988. “An Error-Components Model for Prediction of County Crop Areas Using Survey and Satellite Data.” Journal of the American Statistical Association 83 (401): 28–36. https://doi.org/10.2307/2288915.
Fay, Robert E., and Roger A. Herriot. 1979. “Estimates of Income for Small Places: An Application of James-Stein Procedures to Census Data.” Journal of the American Statistical Association 74 (366a): 269–77. https://doi.org/10.1080/01621459.1979.10482505.
Molina, Isabel, and Yolanda Marhuenda. 2015. “Sae: An R Package for Small Area Estimation.” The R Journal 7 (1): 81–98. https://journal.r-project.org/articles/RJ-2015-007/index.html.
Riebler, Andrea, Sigrunn H Sørbye, Daniel Simpson, and Håvard Rue. 2016. “An Intuitive Bayesian Spatial Model for Disease Mapping That Accounts for Scaling.” Statistical Methods in Medical Research 25 (4): 1145–65. https://doi.org/10.1177/0962280216660421.
Wakefield, Jonathan, Taylor Okonek, and Jon Pedersen. 2020. “Small Area Estimation for Disease Prevalence Mapping.” International Statistical Review 88 (2): 398–418. https://doi.org/10.1111/insr.12400.
survey/inst/doc/survey-sae.html.asis0000644000176200001440000000011314576372270017270 0ustar liggesusers%\VignetteIndexEntry{Small area estimation} %\VignetteEngine{R.rsp::asis} survey/inst/doc/domain.R0000644000176200001440000000441615147136365014743 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/nwtco-subcohort.rda0000644000176200001440000000166511457435610017177 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/pps.pdf0000644000176200001440000066642315147136372014660 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 2071 /Filter /FlateDecode >> stream xڵXݏܶBZTF0Uv7usZ+~xCm񟫟o |M&+r3=}h%6q Ox2[kfD)yX|Z;Epi*+Xa{B[ FS78eL+D߇ZIyy{O<#an[Z#-7(ym#a|{xԱ])7'8.-CG $ғa]8*CLH fZ ]O|$ޅu?DeJy!z_u$^m{q 5D\^rZGM(PQ+ҴC .?]~,L h%>T)WmׅjueEEWyzйbBЬn$ǥpM;0_d^T NZ4ܸ|/8+Nͦ2]82EZliaӵ喈]ќO_|{DEX@J`Rtw't0I N_݇z-ГxjqCUwlQM5ْ̛2lQ(1၊ĂɡǺO_3vԡG:I {g}w4~48/̻ DhPCΐ.a #gA| LGB"A&o(% ȗ"4De6mLAͳ HF0H~8NY=mK:Hkwu|Dt:%&NwPԘںpxSݖĀ<' w}ہ#" @\4Q`?>&.Ă*#/JqR vO'IIB1qƗ]xٻ\R.Չ8uqԼ4O*F7mn=DB _8.Rfۜ > w)?0W_c#U1=S#pHyXḈ+RU[*9Ě"0>H-`ypoRtt[u)4l[JS2:R osS2 hiF-H1k ُ{|IC'\\CЪ:P}Rd lΗ'*BQV.@ة[|͟ooߠ<g BV~6c$݃2 wܼٛFi.PyjeT8s-Ƥ JD!5۳"v>?v3A~i7ȼPs:{3Nqe^4N)9,i*iY,[H:,sLYQkYy)sb*1Ҥ=*:s7U7"v|6Qb/2Rcc*M\VXct)όpH2@;]@* [f{& bi0a[kM%2AY0VY]ܒ3s^-/Ē"/#LD1W$,0&g] Iߊ%c+hIY[)YP yr_ AW J`\t/Z-&4G ]Ua$[>Vrʫr1`ljr C\L7 _Ca +Px*Ɖ5r)l4țAv}&lW)~Sؠ\ J 0s,61Ulv3ʈū@-NqJzo)Z\-uL?EÕ ܢǡ wb uC?8&&$P i/iN|c+鰕1avN{K!!Qj"uk ݋Pj_Jn2㘶g1?[ endstream endobj 20 0 obj << /Length 3019 /Filter /FlateDecode >> stream xZY#~_!A,76q|WWO}57H$ͣXWG*[iW7+!$sBWL*٭[DOU^l7bه?O6)aW}ϕ2T&1j#&?Ҵ %%گFZ&1lΨkci~H_bG]U^ur:Ut1mSzf0Rَ]o44odI sIӱjmd;Rj2C=ı'udKLq]meʈ,,~cF_JR^z,㖊)sJbT8$L$.X,l0>Իi5{=piѤ?$1?NNҤ/$0_AjĥjT3{KLj̃no=2J1 yr q \^LdAAvsj_g6~e Mv#(gCzu'wWJ}&8G,F*poe>ߢ^WOm^e5 pI="nIV\3LAMSiM-+",=ySS3/0  RKinئqyduȘ"ȁPƄQdUy$$JW.)dqႦGō|ҋD.7C`48b 8( 8 CC]#:G2I.K`B=ĢpFM!7&b0($ q.<چ"%\MZ<új 9gRS X{}vDBpǨoO|7A`/nXH 7Ώ8%FF)3p+*>/&vȁoӴn#~axh07l3AH&9:)Ɨ_F˪^l)"? 1N`=:G"ܑDOTYtQjEpqՅ lv[%E<[=lM^7]0X'.<KCO\t8m-9 j kw%:'m)!eF˶`elN_燼ɳx6AOǒQ5HH gubYk?1&&8HV*p kbd"C[7n]=lnyA8(;vmz h nyGδ !ŞI8B~7ニFiBg-I.|'Yb{joO%'CahF(0Gp {c/Kc>@C%atb):#?.مUGG@DgTNE:!Sߩ?.?sv؎1t{v)" *ۇqS,D%͒/FXT&j*r)&" RJXO}Zi͖t0@E(#ZM*F_}AYF‡!xD9a/>xyRArAWt|{MV#Um{x EKBE~lf#SQI.My)fq9`~xb]'!ӋpY#Џ?uV$"`~lzMqBoq!4bmuw=4-$J= %Pu{jזSa^XbL... \n)}*UHO*m-פH5z[e`@c^=QOO uu v3niM%wa/>$5=.T&v69+ gO; H@H&\~j#y2-pLˋdƫqyqf[dٮ+бDEht ^t9l;/F#O`GRv@^0Oi^=uNЗq\37{ؘ_3 (xzУt`I gYP<.jЊ~*B>>phA<)^54EDjʢ}~޽*\hWoO$A=iRK%P,H SZLے7ͱGl6rCFÁNI4$nɹ7TXrҘKжA~_~_?kJٳ!ñ896雾 yz=?2k|@IR0cq:(vS'W?Q&E.x>nbK~f0!zoi0>i!=tpfWx CiB283cZ*2#=N+N%q _w6Fsn;U"@&oLu[#^> stream xVo6_!&#WQXcoR,k@KT5>oQ2q?(@gw;x]#Pq0QC' I, o/Qs'燩+,հD]zΘ\ ͙*E#Ͷz/bFbM&|LQF)|a-~(WߴH]k,Q^vo}SzwUe1=޴G{n720Ul+딮U4?[v|˻3pXt}su+Ec=h_<}>rS돵 k!]@aע1lўvrt1׷lTۉ ƮlbwzV?#u%kr>?ڏH)!LjjWH0;gpGkXs#lO;V,5oQ+}&mg䷾#mO7pD*}q675IE eψK@W-yk-HKS1bjRɫMa3 ;EH'Y #eN"$1v=]p@-d6S볰SntA.p4})7*(5F)50ޫEIB+>^NG i2ZOCOI/Cp/1.vBӲ4 B$^(dL?.7 endstream endobj 23 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/private/var/folders/rh/j88clqrj10l9s7lhw9v1rl14hm58nl/T/RtmpFUQliX/Rbuild35352e91b76/survey/vignettes/pps-003.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 28 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 29 0 R/F3 30 0 R>> /ExtGState << >>/ColorSpace << /sRGB 31 0 R >>>> /Length 4408 /Filter /FlateDecode >> stream xK} /wer)H" 8U=y2E:4ff2 &4o/|įweÇKv]לo?!&mqs K;-ݻٿyÿko7wo/}[3mخ_|Ӊ?;=^ߵsakn}Zg>{ven캵?5i>۫7.SK>._֩]oצys黩 C!ktH:dO|tmC|fnwrSͷaZmXvq,/Kz;/^d-!㱁'_0_`}v,b[¾k-8VtoDZ*OhϦl3B==):i+M!ts=)^}-GM_X|l};X7wnv$8;'9αkRݚX7w=t{ۇ fa|;/z|U+|)xz~ /rc,\8rˢeO笢eJev O3a ./`岛5U˜n׿JPs>1/øh̋F0/hL-++s*JK.>U8]?i&K0.9KN,9ӼD˒-빢vG笢i۵saQe, V0/XƲ`˂e, -XѲ`Yۂem 솊|**-qi{DSZXUrWL0.wø r7]5.wӼMr7]5.f*Pi4PXVf1E0oYf,4oѲYDf-4oֲkKuTjq >.ݱ2f`jy &Xije&Zijm}\SsQi 1kykJ7aܨy *7`٨y*Z6h٨y*Z6h]t:*n e>>m.9ce3mضhmm^gy毝ֳ|:XH`m#̛{Y.@|}߿q,<̈́yƁ"`(ybh(eakeH!!Zi@]t]:gFL}i.-˄y#G`1ycGh1eĈcG k1eĈ#ZFi1e~UtUuTP}}sD?Vh< J0(<ˀ2J (2Dˀ2 (2Dˀ-4(2Dx笣xG۷E/,ˌe Xcoe1&Zkom&ZjomƛhomZfgE׆c:gc\~UPSaYf0G<pQ G<Ep-Q G<Yp-Q G2Mp-Q G2MhM笣h{bo SVYG@u +c$H9s @,dIh $H9X[ @-$Z4h $H%Ls @-$Z4k $ђv]t:*Y}7TZX s8q&L0Ǚ`3g%DK83qLęh3g9DK8-qfLęh3g9X[8-YYѕO6sQ1 |8J +a C% K20dla(Z!k C% Qk0dmaP!k C- EK0dmaP!j C- YKVtGYE(]뿾Q 0GaR9Js (5Q*ZTDhR-JEK(-QjTDhR9JEK(-QjEhR%JMsNWtuT '!n02 6A,X0`bĦ9EK -Alh bĢ%Ms -A,Z4h bĢ%Ms -A,ZXibђyzIDT!uj.,ˌ9 c 1.c\ĸiq%EKgm1.Zb\ĸhq%EK71.Zb\ĸhq-EK-1nc\ĸh]|>gKе[aYf,%@0RK `,%RX[ `m%RPk `m%VDK `m%VDK `m%VDK @%VX[ -%VXKèZH笢R{b7T_Xs0B0W\!s,4WR!DK-4WV!DK-BT\!DK-BT\!DK-BT\!X[-BTR!Ls-BTR!Ls?JI笣R{b7TXs1D0\@s,4R@DK?*)zNZRVUZY-eERV wyRlDK1FRlDK1ņRlDK-4RlDK-4ҚOs>mL=1菕}X=~ s-2H0"\s-,4"RDK--4WVuDK-UGT\jDK}-E\_DK}-E\_X[}-ER_Ls}-ER_Ls}-Et.e|:*1v!DqCG3#c)?0ʏh)?ʏh)?k+?k+?k+?k+?k+?k+?YUtiUTNUq?u-6'TboI,&\ cg̕I07&\ c_b,uI0%\sW2UI07%\sO25I0$\sG24$\s?0#\s706#\s/̵0V U)Ԩ6giTq --6*ԨbJ,6*ܨ c̍J07*ܨ cb,J07*ܨs2J07*ܨs2J07*ܨs24*ܨs̍06*ܨs̍06*ܨs̍06*\*Ǝ3V7_/>|՛|~w7]%4㯷1UjgKO1 onr@?|}3j\{]x~t{B|I4 y )e?>]G-ݞձ{joSY-(oEt{R}ǿfSR0\ߓ+uCȷg5Ňp(%eu|MKgn w +d=Ӷ5ݞU2[U=ܟIm<_'6&?g_n؇K>"=ɟvysx|z eF!i]=^]F>FoYCMe9rzøt!qN-B^/Ӷ9ތ~cHܰwg?o^>4yM{?t>=dkLק<ܿu~T# endstream endobj 33 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 36 0 obj << /Length 613 /Filter /FlateDecode >> stream xڽTn0WdQ׾~fâ bv-BH3TЂP6}syYa6Qͳ/S8xJ=~s*OORn3)*3̮Uu5ē߻G`~q,Jv\&uO4΅~ oƟW~%U3B]Ɔm^MXP˜d2fB&ƻ"F*ԗBɘjaF?44>oc}?m@ IspC<0ZXZ  nbη|'\XVvi*ԇkn(ӐEğPQph;xD;h& IBIbRp6H T4r)Dc`q06IUwIfYoZ¶ضoHۦ B<SThN..V endstream endobj 24 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/private/var/folders/rh/j88clqrj10l9s7lhw9v1rl14hm58nl/T/RtmpFUQliX/Rbuild35352e91b76/survey/vignettes/pps-004.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 37 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 38 0 R/F3 39 0 R>> /ExtGState << >>/ColorSpace << /sRGB 40 0 R >>>> /Length 4886 /Filter /FlateDecode >> stream xMF<ڇl~s& $@`@ A2Xd6n z2-OW&TP}_/./e|ݽB[~ Ua>U>U}S/<>\'ls.U7aٞ9 sxǶjRw$ok請_S_Mc蚹_U>_/c{ۛW?wUSz ~v^Cݷէ*_B,ǪzsiK%s[pIb%'Ih/[4R7S=~A u3^/HwazA{`n#|q$ۮNdaގdu.@i8qf{Ӷazg-_.Ottx{B}_A*|f{²>=mjtcƹ.tKg?]r<| <1nS`6S=.˕헸t>u0Siy]maE)D15>B[M|92#XƵCHhlTZ@6ig:`em v;9fLLl}L{X(GMXfu] \*t;c=OMrՕӬ-wkZf UM4`-u?a]wsģaƣꣷɕ>vKLm>X(֗a.iI:z &kSp:CZӄJ!EӇ+`}v`v2EDSbI6T:4m_gcͰ>4lLJ>JQ"Z%sԩkYiisĬf|Il8>3xq; FJ0Z p`jT 4/ Dk4 - @x 2IIAh-}@ "4Z4M"4Рmִ͜D8J+ k10A 5 baCA 5MbiCM b(iCMjP$@jP$&1P$&14! F14I 5 JkMU_4o P:X Rj XsI]HQˮ+E-1Z]v&Z F$Ȼw @W`\Yy,<`\K0 W`?t~x$S)Ԉ D>ȎzZ\'!oWF`ii`m^6`)Dk4z փhm=4M&h@q," fh}Aֲ4> @E[$@< 41Z7 6T.DObCca-\k%C΂,m Vγ?dkǬ+l?18ksGqkqk08 `̀kFf&k4X3 vhmc4X(B-` 4X(Y4% h0@Dk4X hm_4x#nO״  fO6i^R["X"+U0J>> S!2UYFh5B[打̚'Npr7y$cɒΒ`4MvSa2 5IQV #K:"Ԉ,'K28ɞʑ=4SM=Tf雹ysK-cOYx :$iEexU~C~nf`u]VUt!Emt >SuEM+JqFu+Emp!Eo `n]U\m]Qjk֓"[GZO}B<պM+Ei]QjK Uӎ`mh~U\mg]զ܎h%e[6 4QtJ' jKfiО׵B,=>y=R{^WJQ{^WB,=/-ǺUXXϙ hXGXW}u}+Jcj},Ǻ}3,y}Eszq/Woi}u]T^B:~}j5?$O<ŭ?듼>ro/6ȪZ!Ή4uMlZWc=@0i~)1I25Gj ejX~wՐ~wUn%j-F? HCHMk-66wG5nz{v.RQݖWwW;ħ7*|gvUj푚;ja[^6i˜nT;٤n3QUQD뎿oSse7:\'b:o[OBJBKq9BZY=ߕdd5mpIsm/5%%'J%Y^YⴭW{1n}hɺ,ݧY݇˷w_E!-imuҎaZ_1x0&|>{C}u? endstream endobj 42 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 45 0 obj << /Length 332 /Filter /FlateDecode >> stream xڽN0>D%ƾP *JRuq !)j7sϧI9&5F1嫉jUMY*/8[owf}M>֋qy]wj^_jZ?/[I r@j)Mhzto2ŏ'KۧO dBiZ\ И]g 4K*C{O yJ)3J)]K퐞j}ܸ7e $#K}vlq 6vl$ؖsc > qmyc> stream xڍtT]6 RH!Jw0 0 C CH#%"t)J"- H*)!J>>>}kֺ>>{s]7' !B"5] @DDLHDD'4 |p0&Bu0=_P JɊDEDd&u +A|8^(y߯0/(##%; A@ @txy`(G yW$KVX_#G( HW8~ yB&D 0qÝ p!0_`"E9Pr~'`\P@_SG`N M>9~h@7z!}|fU5`NjpOO C?u(9wuaWP1|MaPo_M1 !"#*%) x `W_ A h/f H0rGAH/$?WD@ F!.Pѿ߄!o Xכœ0Կ鿯XXB@UU8@PTFRHIY$kÜ9{#?FϿn#"!yz*#M_8_yB=P7E@~cS!yWoT _ ф@ H_+nkPuED 1 s#?R;2$@PD7|7t2@XGޤn 8DTZ ~1EDBE n[#7z$&"j#[NUW>sg gdiU#g4x^7c>1l>l4L45LxSIDy5;, g4A!ՉV@]ϫ'V W$_L4M {1Y3Nώd& 5vx25D[b%hѤrQ; V؇GЪk&ѥ%sEclI^ZJG&aHwln Z}ǠPմ-UH G38\XMr5]L\6&hrR< Z!$b=%QϤzrhe| lU A(P~ŒM/nū=I`S> _?gݤ /O\&M/v+UJzX r8m9 IyZi WBGnJOR5u OBOf )̯[X a{SmBw$ znb}9cɎg{Wf?|QRb3@$WZE'4#۩g픅a5=sE*i#.-NCX# z^JQ7/m3`fcgTLnc4wk̢tSKCBV+xN֠%ق-a ZżNpvFVYTl4&FF(%g p"?x{̱H~E &&E|:yLJ:L*1&Wrm*x؎l=˾~]Q$Ŷ#OG}·V4'ʥJϨ6(6Nj%dW[݋b5aΝ&d-.:E*m([Q~zدǡSɍi#3+ʠ+ܷЊ-e=\@U *-_g~#<-+汛Iѵ5m}i\jݶ88Ο!FMV[S)-)g:u^;U츘L9ԧ.6/'"o?껷6xtnK+۷Y>-;ڳF'\})PX2'RC?KΪ$Yf4(9~ړ%> /4]Ǭ,]%c]hO{6uo%y|65DYm*ԿWBkdՋa[&V2Tr G<""J՘*gf;CxI !!{GIsYsXT_l26 5v/ZggJz5p.KT9͹eM . #z.h۪Oe.|xhH]+/LWOC]s 1a~韕a39X-+? oTWF=lu+"+| H^;r ~G͞?Ͷ겔AN/6Do0 WݗpTR$'СQ9ߦ&ҫ:ȭ*joԭ4eCצ2}.tqp|T:l (SwC2Ŭ~S㮬.܈Tkm#JPob]؄w1'-/l˒٠}EmUd5VOH3c*əoB} ;AKӊ#߶yMBڿ=c^*N $MH.3r'pHPƄjL u#%9dc2+=RSyf[p~~_<yGCKfHv@W ;ofz鹣,'h)>ePR&*ڶ%6"ʁ5m\`csrÒh4.@Qy+CxұO=ƅw՜FA6$|z{!dehQ.\g<2+#(I_Y8v1kқİږ" rs&ѽF/mb2jgpx@wPuO \# YqP LPW'j<<˺Hg>^!}0IbS[l݂ KRơ;4Pou0ȦiQ[.\FUmna ^n$`/4Op& Ҥ>]_姃cB2݆bA2Jc}熙< -D"m ۦ:BWIf^O7<..$2.iԏ%T$,%P ֘ {8Q:1HK3%(јșwdl§\ x;FN[AyP T;V${NaMoEطWI|r|)uuQ ҿxF`yиn/p4Eh9yJMVuiƀʮ)&w S~P oRL@L=/ JREժAc[T|}+Mzm^o~sZB?9 eX2G·~ *8#~UT׸5ufwl-(&W6sÙϑWG. N2,a jmLIX qbeopnAIFn'QQ6Ǚ(?Yf mYoIuz44jL֖i?\O7-Ux{jiӎJR%hŠQIdG]4'PP]g_ڀf}?37)BS&gSdERptR{P52V&+ڴ0l[@Si99nmwn$fGDD<҃Zg5B=c2ZRjGe*BƱG:E³SzVBTcp8evVꥈK:$n1Y.w 1#וpN&FG r TևƯCWOr"S;XE,h9m_̙7"ux5laq-hIj|Wϛa2=a<"){w,=}{_b, jPT~5s[di܆Luc8 tx8th9nY.v+VD*༉bh6Sޜф!'ϧ԰v(Yh gkD71\6kwaIS[ToM8rrs&—[eB?p_;`BEi7͊<} BBsMzmtRa{>&ꝛ]5ѷ*_S2MJ}"M,PNZ|E"8Y؞4KpaX=^Ƥl_3tIrJ4`G-Pj)\28YC󀆪xEV!H.۲ɇr8${t+L#TtW/]ڎNadlˆ ӄXwy{\_:u7^Ml-UӋਔm7BOSh/F=IdV42`nKSASYEyeefF~qXˀ8|U.fމػnq9FϚRԗqEi^{|6_hB3s1]wsP!-;/*>uMz%5^c}~.Sj/TWԈ j>Ny-rh㈐v^*Yr"Qh:T=nihONCCiCkY;{91ͨ~dM8-H$U _k]{-=z'B(m+nKL6ĭ];c"w涄a4.}JCxCy$d6N}~ \I4>>/ : ư_ (u) $J;^bpsZ05c$dlCQZ ~&qo[=Ȩy伏1-ɢ9G+ZIOXEZc[ttw3||aZ [ryLo$ ƲOE"t䌻wlNHb =kD5diŇŧJwE 1F_*_-jRy+* PkϥUM/R "XRL~2sdHϵK8>yq0i}ҌWp5);ݱ'~)Kjv b_I- |c$vjv1EjH]*:n [*%6cġe.Tw$ggKn\ZSH[7 ,ZWkwfx@8XO W*u 9KagP5> w7Ƙi7Fo,sYȱ~A n>#=1.]ydMI)u7XF=ԬU]1Q[\Se`HdhLcO/J5,5j4R CRU;=v5-Js@WQG|6=U7oI{E@w{"e!vh/+Kc\bav=xWob~`t{  Al199) Ebg5}uI\.be$c;&1{YdO&=-Jڣ 5/ZP6zLQΜkS8{bn} )mE328QY}b,"ΠЁTn <^1j8wڴrTeV> stream xڍT64"͠ "9  5ݩ "!))!(t|{{oZ;}ʬk-g (\Q|<@q P3_zVc Bu Q Pww Dā@?(/GBx0WUF@P}9|bb"\r. rhP`3BP]zzz\<04rC2@+`CyZ C\wW[` ЁC\rˁ x߉A`0r& v9#ax A;)PƇ#p uw1+*\\ ($}޼7/jk;QS"GgA"Bv7[ vhEy@(;? -l`bu%';Z KF@3+eKNmy#zoSn&-{&ę;)ggHZ0^3"0tbHel XI|Nd,SQo)դ3j4:~\%!t-<*C;dAg5Y/CwLG jㅗĿ J=v}mT(dwm,si:Z0v8X\0(3EѶLX)gH,ʯ Ns=+52عn*YyE`=I'[WzB˱o9o=|ڄL4ӡPՂXX[S2"hf1o㷁%>7/::ܪc\c}V_\~hg*xU{ZhJ+}]̒L;aq8uKOv #ĔuS-C'H]E8r/4I9%U:j8}c\+u]Gb=(Ro0t;9!]n帵 cn2`<otGRLfVL60?鍋/C6/4{C-㳪P2bN>\ ?R@nO1GS s{Ll8KjƊYxhUh*"[]ω㗞fiʑ0_F '$8rY$gn ZP/\]<#CgX?*^徉U4c0T:v}rEN$]t]y ;.Se6>[mbn |YdXBEHk҃X#saFOc}=An6|qjcl2Βص6Ip?|jubA%Z 9Hpi81ҵ0*S򜯍ốv;܈ +}4'wٞwu =[zry߸,-L1`Xy=*Nɘi= =ďjb簾BVڜ{2HС*lҿ|s"&B@ir\dcejh)k׽_8Šrp|7_*Ah軖~Bm{v@P[ F<=}]|_qJ  aRŜ-/Nz6(m<'umS)\[G9kH׵u쯾I 1)mFe%{0 lf1/_$^C`Dlo: K6igsxě\V-trdE˚^ >78RI+M;1?Lh:1dQsЊt4TtBa/F,Yt>Uli*d#xx0%&+2̫@3{]&"{zȈkaLwa: 8/-J`}|57St㫷U.1KVr7gMuqC]Ͱ*?~D>]Hur-۶C[zV5DrY|4~ +5~¤]rg⼄0'b3|$2$9r A?-A_O73*2ms I`s`1@quv ]U!cg=o&_j.P/(} g-7pORP)Ide8 K8e h3 ˉZ!K8RI#٥9~XLitJ?_sKm(*lv> ċ\Vډ9Rr;a~JV?xg>>+}#y a.7>]UkIa>nmL )Љ\K9K͒,tr9 9agTHl M2W1d֛J⼠5Ư%TI$/־mT4 nJW@hd 0˟m_-{"M#H쬛>3 O`kV#`D?ơ(7a~Ou o,MzFqb(fՎ&ZIsvXKKp.h/~%S^`WʾpSW}φ &8Y;`rW:NcUwj\qdxٴ|%`2m0 6 X\o _UC)HN?uvdX҆ildJ'|g? -2)Y2Ii,(]lj?9*B㳘z:0vp iĴ.D+SD`p= "SgRYW'G#IQTa_nil06 }Fv56? $9?A&'L)R;َ*U!)Rv"VϜC#6EU/ALpc@w+zɽq7lAoņe Iۂz4/OQ":_1U5\;W:Ao) ڂM2J~N=YuzXp,kPxNq{jMKϕ:a$(4~`Qs]Grץmd)8ن,[jZ1٢TZ ~5͝ iq0qPDcNCЗ[6iw ?a"V %1@"XNGe_eƀO@hwylS1J3Rt1o|jCcr ?]Hʫ'f+>'Փ:br#/ W-IbMZ~!(?&*.mCmFYbλ.&%Ān<9ԬWH*{ G=P`PNm[wS!]0-aɓ*Nqs=cj>NPkyOBO񵡶N&p 7oIU/Bc\ؿT)kL[}YP̟.3k&1wncR$l|ʆJ?^,ҳix*\{/y_2)HIx)+xs5dEka<+qG5Õ7JnL?&)vq!6YO f-%mtIʓg]ѝ;R-xl#"oD#eNw:eTAUw!KvǸ[ N*)?T,x2Htn>iEJybT M`dJP =.뙯 ,"U Lb _Z|#lX6g`p#D b]LU*iSBꚗ&kP&:?ytX?BSX1l/Big2 12 5irQk[9-Ұ!D1s&nb۞X]ܨi+q7HJ"ۯd8֧mX'`A[Dk:oz >^s*cаR/P!lYIa8Χj9' Y{7pKp]O =wh:hSr-: Y7д`uZeiRXr59 ̨VJOͧx2+ FP?mEqkw]r3M7&4χMvW/7s]vD݌y|On-_(,')fy4Ǭ(^CʁyDr=8J3R-9x Bċ}MNX+Iσ!Đ<ԋp7i|O},+ ឃJغQ!NG,]$k>b;bp D1Z!͗ՅGPG#6:ZxT3P7NyMM$"O'{9 Y,MWk ~9l[)2QWg8Fxtc.\ W5;6yU(Ҷ!&jE*h:{[mzWh|t>ez^-}͔d>A̲Q{w/QfeS>ٙO򼗥3 v?^=,eUFajNRP Vzo>{K)uo#78BK*ЭN]fd~bVqcL#GmxY S lH%(]~.6.$NdolWfw 7j~UK|yk_ i(~"1P۩eg,KXT^HK#>a{","mGכKsG^]~nab.ddsga5<}F.2&s6>`0eVa8J %}E.2ni(^怚&*yڮ=[bWvg初u*NgTy=6-\^[|k%kBV6mg-CLN[Zj֣`n'Ҳsc16rD4^?O/.~sB qQmEv]&ָ;4PdtS\[9{fg[u^bl`_esY *J1\GkL؉-aQƬmzsP5r`/g" ڭsvͩƄ%_$Ž8'm=޻6qd+98$ endstream endobj 65 0 obj << /Length1 1394 /Length2 6000 /Length3 0 /Length 6951 /Filter /FlateDecode >> stream xڍuT6 RJ4RFH %c 6 ]"  )A nDBx~9{v l65-EEH`hG~G$ /}$T@h,P?<$t m qv0 W n9(,#$.rB "<w 0 H7-j$\#( ;`CC(l+` 5oo? +#ApO`stմh~nrD! 7dPSFœ(AB?`Yn{Q$?S!!`{ ܧp;o1 PHCqa)IQ) C~60t ;z;#v5 0;rHW"00`IuC~G<X??y2w늅tM5T2-  "I`'Wnf{Pw1?Lc|*ODjܿGsR6+CM :wT A nPLPXRy@l`h07m~ !PlŰ*?žFPXnPXɡ]OտP?'".! Oc-q7+S[/v46`@hq3짏_uH$/B`m8L!+|7("Bw?g1Y6fЦ=kn{7V5{VcWp?{0$)!p#)ډl }VwNĻߡ)V|Ҭ^YuIւhYnSL d4vMS8 wo#.q)Ue{T+]dmQyۨS߿mf@G{?/a₃!#OIGޒZE'wI%gfm+7f07L{2y}oF`w%H`3Au;*^wu`GVWAJk1lx2^NƵ%斚] ЎgKӞd{eE2M(„څ!:(qV !}I74Me/K&KÃvKnT{ vGo~Oj2:V X n*>֌4&JՈq>j:|GR34b8)Ƕk&ʨاҕj74^a)w;z6{QVڈ/SYtKNy`eg~H[3I֢'ƛD~Qx-[MU/4TɲFsIr>UOݓתa<%g ~tRéLZԼ>LwĊ0A;qS/a`c\~R>le0أt'08&< JYPFU.@B7R$tT;>@\%a3hgiBt J2VhU.NL[ڞ cbPsaԷT|5^O}L3h#)!>Z] cG)E6U+y"Gi{_;`;ֻA܊N)E#bCk\^h|{:]9{LiS!`lIepU{ )Tz(b8);Lm :&ꠤR5ȎPJKJ B#Wqkwun'td:9d\ЄNNƤj}_&&t 'vW_2LXƼNP7u@,-Cb#zD'zhQi˥)`?VyGЮJ5kFTqJE#wiKϢ '<7&(2AC;7GiĽtWb~I-'}aE#MJƕc/=52{媻PyUmMlOy^ O:NDؐ I[-EXFav? R[kÿ%{jiXB@<{s8% \,F/ kA7"^]^$b4٩&^c0*P)3%W4xjsP^{Ba<[KSDTI|%5G7ܩ~asƩIXH\~xWP[k՘u23sqݼv9r%(J^WSgCL\Pӷi8!x٣8oJi"s`hÙ,PàᣦpCs6h Mh47B>@{:_S~ݻWmsnZZ#U $܂Q M(|{Y8^}(›핍~_jD-u-0{pRvK,SC*gUOk;!< dsc)[/-ɻoѳ}c1cAYLWhw7<7` Iw}NYݠvx!Z2qק[fS8k^Ѭ2wg1'哥Ό>dߣ9(wRكU+xI3_sJʁr1b`=ED5oB㤖'U፲Tk2q%Ώqȵݳ))%3[=Cl틨ɕ"ţ ,)C,5=ۺ x x3W4n`ښq}N176(@@bU9CnGH*NMS;S2½bkHm%KkVK^WRGM<`Q 7|7(#i6{sҠY}u KQr{$5tp\q^ʼnNm>Ԛ&ׇ1nN VXAɑ.#{{}Hwg`Ш`)$S_Bk#GBƗWoO&N>.ͨx NPȻ"gs'V{:ˀR3EXHuN1=N幆BmEC^8 %CDhphqS^VdX].զr1cPR׬`Lܲ4gp0}Mc_wJ^ %;a+ĝo<@\z{UfYR+'qހ~Z|/%fܣ..%z-RqC 6񑀳 | 6 n孪J Hi}Yꥨ9{CBԟ~TrG(L NGU8"!Y:n[& -DKOĖԆZ& ffKaz157n݂z]?x]OF7Gry6grļ7fK:e|DF} պt.ArO2[2X=_3A@]rJ`FJ)aE(2{ uKzVUAS|ws쾊rt0?oD{lyfs[#-;+&mmӼ+,>g &/QNV^)-oaE㒬VYTW&[kJױ <258\*[{ |& wJ2;SUQ|AorE/WA?c0XiW'cEV>KlI{|,s1; 1yJaY@"yžнVx C~@ETdd[aTzRMGkw4 "0 N׸hV)=U.}\g~S|.rm^oV1vO+C\N, /_!1$|: "V-D.sOr-r /FzW9#Q*d^ ӫ윭86=y=: cLqJHQ<;-U;{E{p!g{<^~,?4Iv3~q*\TzϛB-'O>yX#3BnDE[Kþ9zoi8OTkC^RRO[ԁut5/6=3;ze*lLAѩ]~Ķ|ytcsM.9R2%A7F2)Zjq1O?>ٳx3w:\<^dcş1V@B-m"6u>w~((m;#+}^n){PAi^Yӵu)/.f "W!o D>g=Q ;8گI#cr4쮬 F̵d{>K٥`GKرpP͈GpTDˮO{qfcTtƆIi4+*0sau#ͪfף`9b$", NsW!ڵU0BMs-VYzcL`A6v }tVb롔~3LT ÈuI{fJW^0=u# endstream endobj 67 0 obj << /Length1 1518 /Length2 8355 /Length3 0 /Length 9375 /Filter /FlateDecode >> stream xڍT[6L "!%Cww7=  1")%҈4ćzsZ߷fgu׾{PiHX8e0VvA<F eF;@ m@cjp r 8,A,ʬ(Fbe {?K=! ; avP2f h: `J [`ll@{Vg+Qf;f _*@{fh4-k% < 01jv?PKn?%b*;;,) U&mHC< x+q?C W| գY8Yٹ!.#?v_f\ ޖ,v=pyq`?ӿ,~'/ D{GxP oeX#g3گk~۫_?&lZ ߈=>-<6A^A>?Qxl_@Ώk @BA65AmWU$,GWz,y&~ix̌%>YNI/g[u,_.g/I)簚>&K,tS#|Tª_5]MB;-n,BpJGWUQ>|Hk眐.{>6p3(7 ()v6Q[s]/J[3!8KuItc:-@$i"0A*}Jp*ħ:|26;5(*8N [~1la/py|[\p)}0iI=7W ;2ҜuZXgʇ,m{ѷ3>P#jQdpyjQ_=!X8IsedS'pDdTn#hXgŬmNhhk0OTxX?>Eщځ)6͑rS.Q8څPcmuRߝW0gY]߅)ZLV[:nԚz5z堓N2 i \#1GYͮJBt˜z"s`!Rl4D)<'|TG/#pLxCi'z6bU ?Z Uc`,Y{RhxYm. H%wD/Wϼ%aȉJ 9 Ms9- D/;s*9y)\^1m6";3IcA|&^;&n igHbXl1M0bz=r< :Ŋ]TIVb~[1`8!bHO9'ؖ}R@gDbk-Kh/_aLc#P3˜7g&ATPZNRԌ|wWč:yM>ʷdTmBHOjj$^7]s&LOmEQ UUVpI evEyusF9Y.ӅȂѰܛ”hl*-a̩Bǒj"#f%ؿ`si ^lADEj>WsSg!pP>`_-ѳ5seGd'6b`0)ks|e (~0<hKpU ̓}OiR1o:V3j8rWUF@(rgOY"ؤ,;#%p?bN9Ov^XOfkb&"M9_I[ms^F߭s7jD&RNcxQ{tVq%0QI,`kfA*\<ܢ޿]֭%WΧNf@"ۗx#x:wQKl15[lD'2?Xɩ4؃ t.7O %k>簌Ua-~R  Eo@[ Ti7DV\A6/UR^ w %ke.m%f|+RDw-=1$abQ{FށҲ K˼Snog\C  "b5c}6fܓI&âhL] /e-'i:j#JvEZ(GnU>;; 8-c;IFU4^o^W[.m:\&biݾ59?C:x 1%qb)Vt&nU]MQB7$TM%dӒMG,̵XR.+`$]+aެ:~̴Tl["&Fomx 츟ax k4-K Z- AӾnvTt'"k"1V;$s a\`}%ѱ06O"KcoWN&f75=p;oj3}θNgw8JyhH_V`*#UN?bQ?VS5cJ/V-Ol2oC1@YE?֫)qn/%Mi.j["fzy?҇RJRҷ!j+R=[c'7awYFjZF>t-<ߞ2cG+x]Ȥ.9y_NP(p=>l'?/7݈ϺhR] 8yJ z7qNrǗG^Z;zfOїCvxA5l)7a] Ժkպ$4%[aj;DkK~Zr{T`+@;uQ[ù7|;g̻(Cgvyf[=$Hv ٺُiMs} j+(գh?;1ś5JLm! GB \cTRi,͘f0[^f{+K3h0_mѰW`k}5QW^Erz2̠tĨ1S͎F(Qo甼PIБVKTbk-MbH5o*5bsMN״zgD.g䖬Z_Y ZFxMײ4F/|hާԃD.#}iGaᘏ-+>iSCy[CCOЛgdR=iw*T2[ ~B  /u^ϙv a2f@~?6b@U\'aPMh h(6~)Yӭ➆D1E[`'׷厘[ }6OUz]Ӛ~dWP(( 'ڬ!p3-ULZ'X,B}S3a>;'5k7[ԞdKL N?>o'Q>g)'Ͻuo]q&c@"%Üwr0Lld:asfܮ3k-’@k:hRE.h=.V ٩eC 3O9OY8R@~m 򈤶4xwdn :_(nv명_bnUitRmTi[;mhv&׭ [BTEc8)E*3W˅6}ldx0dI %mұ_Ku(.P3rܵ,`sO]e$Jyſ8blћzGϢ4,+7xD}Ief㨏"=E^Hel`Yݰ9iϹ:x87liMO'墟Ab%SNe?Y ȐG3j0Rπn1{CY>Q"(糓=vXMSѮ͖+gc0AjZ#-m=aJ.zX؃MNb^5b )E~y}=?;Aԕf|*ߎR݁,{.\Sl;w1gꂹYd_7JPGa?_wksCiWPϏy)^(xMu\Mg\ è,MI!`^U9-SѨ+;no+c/<%$<x0{bõAʕ9Bs*|D9Xl\AeడXetEORH -^<}T>=H!7SKבmv5SbK ͇ yBQuʉمpJs^z Z:1 # O)n.3odѨNE0U({{S3R5[d#Ю]姌c׼[$Ḽ_Em,5 kuW=/\¬ÙFu$G().M h;b`%zkPpA>vi IApcN J!>([dNAbFrJ5% s@^}|xT/ RرܜE.4t? 옙*UZg*݊^W}{MFPqae/0PFlhһ{̏BBx8 KԂXmv.9g/bH@eU$}dlpE^ٓ]I:qOf 8*F65}Χ%iC~V ZWW/9`xbnwQi/i{x4RgV%j͐9Z)MXTeSBO&’>)15T=(wÝG9Jw?8nw{\.mLF }"v&O;EJii34HJ+3E,ͱpf[ೳ Ov~IíNM'|h [tL8Qa4YǤ%Fo跞~z;觃0q`>]qh,3YLiNyn~5l$R2hA`XF'5?i?mL,ڧE c_NRe|AOSi5]T5t!j5w)2o_ʞ"EQ\MlJ}ZSU=hH}nL*v04>>},|x[Ɏ=u}1cfZࡲ& 6m)ζ_a:oUe`\u;}+ذ3×Uj;L"[ui(ֈ9?rS#}&&|ȞV͍\ъrB͑;Q@ԣqtΩΙoKnN3Ht])ùUN d2{l/F[=fߦA%tm&"2E$zԔ=)y3K 0fZ_;wkjꀊ"f Bw}"7w/nh;`Y&8MBki3(T=m4Xc'l J(ػf~q鎖sS5 &*}%Z,ښ-d '@2T"b<·'`!=)h|dpK4#T7[u73F$2}] h\BP%˳ٷܙ$ʔ9(2T Zc^,0C!D"A\]΄DskHWI-ہNFs. eqG?h+#+]Sɤ -Pcމ>RT2_Šs- u VᦋGF jkC0~TPg%It]_<bZAL>35me g#auOhS*m;"{~Ԋ 6aǁK4 YIWa++djhT}L+Bͳ. Tawת?"U >hRGo!o{$6شf0~; 7MԌ5 GlWq?b# *; lA&5Z7q#=Њ@ bgkA;ߗ~ ŇqifZHܟOV1[Tӿmѹ[ wfn/ж_p&_2tp|Kłը3y 3w08;lrξxhA]8OHY[K "kZh14vUqE{[@fҍ'G|3 )t8H4Sd g.i]qDsd)T.Q4Rv*XQ ÌհB1 0LH`l-ME5 =fcF@@/d B_^{NS1]͋~tj5fH”XWt_$ۆۄMzh" )&Flu \s.ZsVl u6jEQxPs$sd@Q ̊nQ&~]bBEb-V]B+MqʮC>mM!h̦Z鍻G{b:T,zDujHfRWiى.|.DqYb=,P0 H1Mx\BY5q'٤j [Xk:1I*n y|,2]jbhw\FîZxw<ѕk7OW? ,*b2m`-qQq5Ex:gԒ-pm|p5R'~ypmpҢT]M=":#9A/N*#ywDe^\ѧR !ᇤeŊ}ofSrqvސƷN0UK>u*xWI^]8c^?^wZ6\+~P ~#qB\.#J 0BM" H2c RﲁGBqωi/XeHǟxKY(SfhY1pSV#skF Q!- endstream endobj 69 0 obj << /Length1 1401 /Length2 6312 /Length3 0 /Length 7276 /Filter /FlateDecode >> stream xڍt4D$6^g0z{6 c3z% HIDA['{׺wZ|{gww?ʤ+k)^0H * @ "VV8&b5(ȻàO4QH" @.Pz|5&bG1c Dx~d]`p[( 8\'B}-G IG UˋC;HqG s~ ЂLG 0pQ/; u 0$ၴU5ڮ0|;jkrq"}H=h+ia1<(@PO(~w(ub|h8׈`oYi'rq!1h_)akYg$ װ# aoyTB.`$*"(*`޶~ \Q{0= G䇆zw"vp[ G: cc<a~f ~Lu L+ `0 rU(]=eϿ N?i8rsd};F_U_,<a# u#|`Pcj.U@JE:`  Jpoc3#a:(4W +0[g%U0ه"eKxaC]=ւXSχDa){;ѯ5A?) wm[wwlف_o`0[ DƓjYZ/ޕO'& -ob:Ggͨ)M,N'kk}xmN\]K;c }g* ^ށCCB(mСJǩ$/;J"jZM-եYČ~,at@s\Cƚ?N`Vl:%J"[%oo V Ya+Jt)T߾)AgL)O_3I[>?6)cwjߊQAiPѴ1Hh?;9%w#T □,#NJҽ>YJ[3^>\e^;-28M;p/)\p,@\X#mǚF<)/*gNkG~<"OXc ݯe '҈)NOrDΔUiE't#8|pG}J͒ W Ӡ~;l!If # /rcÔ;/X,5|1:}+ Dt3n#yio_ɓ?90B0ͬ?=:/҂˨7f녉*8}??uJڦI;pNDG+%8IYtN#ϊxRjTe߆] Venj=lRkg_~=P)|ޓXl Q'g Lߢ+҄4=9gz :kR `ߓ@L]o|k锞u>{CnȊ;s4"c5(M3Ll z;Qnՠ} 1lQImhQݺ6I:s>HN0ꥦɕN[Nͭ7v7zc|9MfuQ8N2조̒IÛ൷nOJwԃ5sqs woWpsAs"p5۾7i_IQUYxufuN׬jGUx^ vɏVJ&.i*-t|.[}ⳟw:Ͼ, 뾡fgMJ9g ܙl>j9"U+jV~1={jgxClg 7|g9V+[:-۬BB蹫ĥTu ]-(~0xYٚ[/kh $8F+=TS7曑e2 }rEFDvurLB`atpX1oA=y<=hʟ<աokT87GC'67h};5=Ct8:ʋ&S=˯js[[>@PWR 3cT5@i#ӷن͟UtҐGeJӖR{CeխI1r:SGI9ɴ %eyY~3Jm~INUrH`#XіB=W2|r9׋bCCz ´K;~҆X&iu. ϧfdJ[rh''ZdQ9yȇv'8tDWhm.غСgSGOL}dOܓM8J[h0eIļd[qFvL2,>ΧuMWc*#"V1ߧ噅<dK)tbblFuV#6Q8qܺIs4=zw9֩pUV1Q^Xo W3 #YܰIN I6rq 6!3wBK2d6m㙴Ri .x`K%FksD sb#Bkʞ)"n~g||]]:~wsfm?,?j5zQ X8g5S~Q&9xy wu~_ G &nS&ޅBT۬~T Sw0\Od7ل\~vz CAt~ sؿ`]3uypF~RWbѶ43\ ׿lXW0vd<]wv!Sq>f"o"hgW S8VJj%:u#I#gt%syX^rY*.'zL{ByKwʍO5L8EyvԭtɂmOlEBw&xwIp/\@dM@+o,f^ R)k̿r1Kڱ#ۖJkZמ `"]rdkR7TX1ApU?N!c8hQ`U=Ot)w2_#lꆜ`e䤞Vah"ASwvcU'ߓԳ#ݝ].9Jb y}/v* I^̬\F CbWR`/>ZULr~Ơ~>7دtm9e`(Q=f}V$@KHO gEJƙ.VZQݻs<Ѱ? $jWH0eAk[V:5f_3ţw@&]~Q|'~ge,l_{'Nmj5)^HưGLFn߆.0?Dm\/0,,SZ Fn+ōS: VQ`S5sDՀ |vX fhp#o2hJ{bKv?u'g`+<?^I8(5!Lvؠ73*VF{swMĆlmb~ jŗWm#2ŬhUskkYxST~X >Q4~}g9H䯡h'X⎹{G,mz`'8P< $ī5Jh;8C1qH^Г2΅5tTJ/W"!_eKO]_ld=*OeGh {Gd])=Ī .R~9.!}w'ϒ˩;Ka4NV[c_P&C `GЩx6z*~lLyr}$~t?k,j3OIm4QOf bBmKh&,@NGF0\Q5aqL*|o$z`hO쐜"ޏt|Fߗ-(daN}G5BŭD- lrG%^%hw 5% mȡ"$ OX)ׄZyZ٥,w- |q~yGH| KwVޞ PH4BPR2M.V#uI[tUej!і{]#P1M1j2*qX;沝qPw< "gGh೷k߮V 9!Wt1.:טM72GYrǦFGHUZ A76طNL,0,2 ;}!M,,}H[G(? xs$֧T^ڗ! 5q&S}XҌ(D&ōpwt~<)ހ@D+Er-YpE2[Li;v—vi3S? 3{\CUlYBw8d?Wu٨fFiy\$G)?Ed_F*L}t䓜08kXs .d5`2 㻡vZ_?rĖ t*zf-- }oqjU")tR2QHfh"M2e?,p%Or^ VC14İGtfZy(j2>CjR!CeVcbS8=|߶tkY˭K=i*>@kxq[*l&WNy_ՇuH%}Wmuc~&LwRS}r +R|nNNE!W~bE?GAgä&%> ?ʬ.] m&,RLW=&i̓d%~}ϙMљ +"U{=EXϼ_;dϔ&V"ε[Z-+FGZ!H߼*`n*w9:Jl?|_QW7)g[s0홂zlCYHqZ;|,g]Y}jAi}I`$N;>-@pg)[O(1NlpLfpǗ uɁζ>KY0g1C•pw[nkۖr y݄ĉA ?u>fKy|2u"$o.L RŸmp2䪛:\nc5p<gm-ҙK_R8-zq n"՝ F/Aە/ɪ#1DkQ IWRc=.Eg _S!<2|G&sQu@B4 ;k&r: ;^,Ufh[zSIa ;eo/gA ?Roq@![KKfhhHjT^b22>s7*ńʜcʏjj]Xe x-if?̪".$RT3`.DiZ%Iȫ+[{wHq%a_J=cʑ>3?{6cTƾaje{)ڼna.n٨[PPރ nq]ɠ c? FkCSO {6"Ŗ>[Fb!ϵbW"Vo}x{%LFҦ__&L-d0[j)ϞIKdJlK}^vkMO uA XxBMeULk~c9-:t৭BDh9&$-V ș<.tr UQSo6|0yd#Iԅוj_0No 5ވ8wԿlgMڎpt}7#(>izɝ&nz$F7W\|F'92" xΤ@ܸ)ix¥wRwT>YXrk?%N!Ycn6/_q};8l+Ћo٫IS<>|~BӰ̓YSӔ]ZG=ԴEqk,k$^Cf " endstream endobj 71 0 obj << /Length1 1519 /Length2 7319 /Length3 0 /Length 8340 /Filter /FlateDecode >> stream xڍtT_.- JĀt]ݍ00 "!4ݡt|{{׺wZ9qvZ(_[ C07+[[.0_z1 ĬM-VpoY%6aPC-p_[!Hwدg(0yy:1b6?TC@VLD\F>̐18EoH4)/D~MR_o@D(0Ha B<0 aeL(W낀C?pLBh/o?Jx0ߤozC!1$D6aUX[^w9V-^M2m4;*6:>|8%5p䖥fP]ylO/Nzj?/X(t*0:yx՜geҘ^pZ,ZTdSϥ.r~!?@Ky۱{wij< (o^!{Q<пbo/YT.=;;MI\1Z6kL%9ՠ6i dGv?6OD%N``$N^l^?L+Fr/` ^}[]{:>76_-4z;ɔMb,|RކrbQM)[u(7Wf*XW4՚貪#:汫fy 놆511OV4c*.?AbJO^[ {I%YqPz^=M0j#8CV㳎8J徲Ffg$Z+]@xE!;;Yi@U '椋^wS)پ7X>XTw#15+rD7:n ]K/WI}8^sz.T(Z~:qx 0jJZkdrзVK28P̷fِrcuZ|xd.ۭ|WlU82{ʾ}:xQqkqnQ}Xn{c#[eGVDB8@X#q25dRUF7,~[{R(n7W weօYߊ%W2ByͦݥCb4.eƞCx%>ݫIIB?3Mj"2J<&ʺBkr4;*Jpr/-w&# c^bIO [;LiWl-p앮uzĶc/,nm\KdU4љ,l ,,E}.CH5:_ZẔ^7ĪQOKڴˡxʌH/mm;ΙQj-J,u7=fV\of#L}F޷ nfZʡ݌$فoOb>[{X7=H{`gd<%!gPۃ;^z`HH=,D)K?aFY:w Gm>V?& ?~-pUvXFv1-MN0b\7r5TͿ8/4tpP%# :Cً5 6JKoݏs[.c8Ovٕ\ˢHz3݆b6SD̋K>"bKY5i@:wk}fUE$[=o[<3aUaxMCLȝZ2 PV䧣^3?g(~ 1ͶnEipY6v}EҮLZX!%{ %Ez9Uۧ}y\w?CQ+%B-e^E/ػ;t`>IԕsGQG _8ZjL#=cOg(ˢmo" #8GJяR#霼&YoO$WՉ,}L<'TVDĒ*|QrsvlHmlxb-EE%%ɢ5p (?u""]*/"A]w'a7? Zު|I/Iý.XŘ]gԙO9>ڳö#ce&ce0;۬q *q iO?,<z90gi]2ft@s`WH=*8iCqA]J!=Bj6XF+ BļP vJyI)^6Ύvrܞ} KEB@>y5!$'p%}iMP z6?eVxڕSy U,@=m+)W^&l3ۈ`4\Wt(05?Xa%fb˜kj 1#-Nћcc*/#mq iGk-ܯ3 ٱ~XH@ebb|;)jkz HZEy]^L@; $VFŖ!MPW>`qF,4^!ZK,pE!nIzFv#?0aI3*bi.g`T0K_޶PL* z.JU DG|#- PXw~D8Lv \ZJÆms*^woO8o<µ˨I[v=9Y&3ÎO=xp 3Ly"HgܦwsB'DsʻNo56+4uť8g8NGb D=+|՗6ʦuMJi}q~b⠤ϧTMijL2%Io~rB"KήS7A珤&:.]\QNUB-}eW{Deʒq-&ίJ7J֢> 3E?{]³ʄԒɝirb; iX\G[c|4ԥWy 6BuEnx=GαK}TЊ7E^oM(?䑳p[k~]6Wp4`@Mɴ[{ؑenba,~4pӬZ3uc$\&\bT@U뎐[#F/2De=e=`1)~hO=QN!$9z' e>Fm=A<֚AS\qd3z,>g!%(ںRߨUk_spETf[qB}v]ɽYJR cMbꪵӂLqxlL^QԨU+-5m#G{_'WWvmӼ[Bq2c%tEi(Ih[_۞ȏf&5cE=w2/|ggQR!fg^<{N_FdɯrE莼%PՐ_f+7Y+>[u 6Η r,ui,hSݍ3!K0fΡv"B;z s> dk.ԟ !hS:*eW۳_h:|ܳg逗iFaV3srfdB |G DfMĥ#NB[agus08bc_dIH0]"(=ࡎMZgE[GpҢ^*9hܶ <bKZ^F1ЏZ䛬+kpvt̜Ѿګ+21i(J[mb#P{O$aB~͒qs+U1eqq`3i4|JѕWEDC}mk:=P2Y0L˴Ģ%(@wNgy[1}7ĘKy=e86w!HSugDEQuS{jBsWQx@Z{}Cѕ-.͛5bNDSyʊf!a\]nX$?4-zH|^Zp<647u{?uat}d7;V4W,.<ԋ̓Y? |"$7M9wT$^e+Ƶq^SQ 1?K!8trR Uj~ZO "(HU=Ox}QRj 8fjBlv#OJ cL`FH۷*w}HEר.vbqԪO.]ʹJ|;[Dv ̾>*h Nj).~;el U,mĕ_ hGE> 8e81UcB7I{fK?*6L>":>}UUظ>@BԻKyUpSH'㐤J*vu6:/9X  .*^^qF&J~t44Iw ;}7lD6(o.9;f6[=Lplb_P61߈P-qʿOrc͝3f a狘P~BHUIVS,Wb77JJ/vWq*~/0׀\rd> w'jtK|w-{vȾohvvr"SRegrxq+wx.CIܵ[ ,n7n4?`:ʧפCEu4~7jo3JUK ;(^¤4Nڱ͍JWbl d_~Gq^ Ս\(*GYبć" )(wFKVǂn@?N endstream endobj 73 0 obj << /Length1 1391 /Length2 6186 /Length3 0 /Length 7136 /Filter /FlateDecode >> stream xڍvTl7%1:I(;0`$$$QH(!!-"HN~sq~יeS q57+\ŠC$@ #s9 ,%K-X-@GQˮC&Kp3B>@"S`E&44Qp7 ! rbÁjH8FP'I-0B=X_E(((H@c<ŀA'݀C߃I?j ;6  ' 6Bh Gq6 k5@tEJ@`h/@y>p6+~9B}фxh u%8n V3B 5? K#|~Md-_i"0pa!Bp|AV(_\O/ ʀ`909FrAFjۤ%2` ") # ?z(w4PO-n_/bM@,(2` !7t*XHO_v^ @ ]n[PP>/ᯍ"0?PE0 nGzP0lV ?Mpi]R Cb,@C+&H2@@C7xoA(4$tGcS['k CL * ` B_hص[^o>U _T\MbZ(2Fa2:>-i N_kJ3k>;qN5 f}3x]C-nvfMM_/@δ ['_9.v|l婬IVIQeȱ<"L;{#LCR%8yñЙjKIv{v=w2>KfGJ>9D/R]A?S%s%_3xTf/ x/&n9_c9..&D_TRڻλ3ȫ<ū#r,׌VE%R#wQё0aVP;U rv*q~^/Y1BeojXڊJwg}K|i(14ἴ̱;휃ˤ Pg/ Oh4Xb'(9-Ciʃ;K^?OLp}X,]ΐcy,u>r0quzpEE=szuFLiCkރt ףӹsO<զjߑ+2]fYVSĝxpZڅ=SPȝHi uFU\c۠fD-5C>\Ob(zSy HҺMBs;&& Lɒ`vل fɆrGӆL <+9u8V? ش}Fҷk"1EјrFgeۺ{ۗ GLtL x/-&^ zRdYd|tN2Xks ().kJBMvݨ('j,qtZWTGO .N][  I)iLyլH=3 jR9#xm?EA,B%djQŇrGpioNH%WG e;ɯ[;Z YOD^pewzW .l'zǢ%yPUS ) 5(@NpF6}un']J!QwiR_ΨX Uvo8(<-8.8{bvS1:;潇g,39wRKeۊsnc f(畾BW8=5u~VŌV nwr/V8 .QL{lԉ*>:ef+!DmY,0MuӜldyk2!RQ/*M4Nd *!3}t<{y'U煸Riɚd/Mr?#s=2$*ie)^vY:M.7XH<.Gk?~Cb<i,="BĜG ltPIږ?EQ|{9 Co+qegP笧/-;*74TIdna1fklS'8FuZK:Cwq#l+e\QGܮ&Y7 3n>yM1fK2ޜ}^#w_!GWz[&FOq4ZU ,J_z$r>RV ACHtU>A˶k2[7yEu4"<3f p\FrdaU-6ӢJ̺6RÎI ||%Vnr [9zoXmgHb[jm nj5((~>U2<&x7 wﶎѼYĨRi=vo|i8af戼Ҿ,) dlIs<IlsS#vFF 4Hm%P?Yux0KHZ8BorP9Ki}{|vhV GY քm߹˖D-򵜳5'$h ~1:pں_ Yv3Zfv'$P ~1I\|ygOe+{vM2Gk /qz-$B.F?GkوUTjW?T*~gX ph8'D eY^C& k?#e':i8Xff?C2f7Qb],9FbIp@d_s2l^nܭdZK~/ÄyPV惌yhr櫘:ocх)Wa{/yf>qAX+t?JKMvsp9tyN@*auɽZbo=>-$_~7ݎ:62}+Ph9DuONeun6Icޝ@;ĎDU +(@ J^i]bi 9I'mq;Հ`9Z2&yVoUOhl^̛HRf:G{}'R}gXS;ZD&{%=宜,;\b͞Ljuʒݳ1&c*>|~B5xJ;NW(5'կ/*UyA@GЖ˛Fӄ\|P1//PxQ~Aet9r?bf21PМ+Hskd#gxN,T[wMɶJb!w]ef[..4dR5/Z-_9Wi Ė3kG~g.\p/^X^Ā$LJs_ Osr YKۧ+mtJ 밈K.OF.zh$rzw;_@U3(RPpiسLg0s6xg\ׄM-ciŊ }){|mV[fdA d9z\Yawsg_KNwRV<3Y [ iSK7 6ʫDҫ_xTptn+]n ȥuVloMZf119NxH[C..)+opy:~I֗q#PA;L hcS}i9WD~xq-k: v ):{iY&QܢӻԂ6?LM}@6c(:3Of)MY| ɫ QƬdn&&]3^i+s|E V۸!T=ǁ`?*;2Qj,u+=0_ja՞Ovlw,*8Q"RV"W;%S:jP(=K@]WAg]M];J@t"*~ڨ,Ps2=*n#uPѠڗNw/gć@ڇkggܯ K̶uh'MfmiuK$]enpG=XGͮz{,dV/hҢ]qDWD@w<fXؐW=(Q5PӑUWiNYMpʢTk!-زIЭ]=)8LwK6]B1q?sh+h prIxr@fv90ӿ`Uò$v2Rbt`+\]XVSDBEkEZiz *j;mBdK"G W /@M]4)..L}.\}O7F]З*WDHalP%*ea4Qc\vrRN-r2='9z4: ҖNKYۊUz%[~V^] sZzVBPVhZN3F)~=^| KBDqٮC5{z̐^K L{QwWK36?[)vxp|u@\-u^q1)TyM`p)<5`޸٪ge9Z-yzmW+h#Β6^nF&]m- N9!"$qBZ"l׽5vrFnj\=1gg z4;@ Ik(9Fè*&Hg߳rku`~nӮñܺwe@EӌmPs6>\\*ZZDy(SL^rsoOn<v&nb5"XI%a]* U=T*?w"P$n.Q0繑Hk 4"=9^Jd0{ԩ&붠:@[Æкӷ6REɌW1 |K([um fPܫ۹B6sLI6&wU)RڷGr) 7h1jxn|zv?nbLʐSުGd.fxv2"{πkY oӆL(;6;Ќ}b8 ywCFq] ަD4UⓃ$Sy%&Q#t+D}-s}ϑR}vOE43d"fvM7umԙ6'#p)* {co/~q$>kP}t c×4=휦FVJ4uNH(gzYɒ~߂S-;+&nKk 2Y(eA'\+O|gS:\}"9:n0I.%W@wnv+ gu endstream endobj 75 0 obj << /Length1 1379 /Length2 5902 /Length3 0 /Length 6848 /Filter /FlateDecode >> stream xڍxTT6"̀t "90 % H()] JZ߷f=繮=6;1#Re]cK! M(o;> EGm*(4PhyB"!1)!q)  J DxHT콠]F+#}=N(to\ n8p tQ`7tE= `A(qFܥݐ'9n>7 0#^`Gzn? Lȿ @`PDxtu@ gsBBJ'W"(w=psBN|P|{/= @{Cahj{C<( 54mV;*#pW*P0ツ@᎐_c8z ¡<*0hmN`@()&&*?}@΂ ;3#@(G{(Op:8BA( wv k> ;k4p῏XPLr*)!|’~I1 @HHH .. g{>#VA$jO\ g.=`׿( /BgWݑ' ۻAahz*Eo9/nD٣ՠwB3__v(R v4@//p AGC ~ 5Ϻp؄EFDBhU:}~ (G!nP'Ahߚ} 9H:exe"71յ$hQ3glGJv54#O *"y/} Y(@ao(};}frD9M? =J6d$¶L5z @r(='aɠG+wa>da[C [>$I 44|MPꈣa5܁"'Eڽb5~Z,#)ɹZ-H %s$VH,;3EEyT++Ŧb4t-ԝA_X`.5>1_Iӱhb鱸yZe ?n}1u`;dIMn=Gjƣ*מGtr''cR~ 0ɚh&B\hB:owR*B1xR3Vt`[*$w {ݶIr8Ƴ.zlWǩmKV9[)PadK^a${׭ ņ 磌2_Ovroh4]c; K Eە? PƘZ tyBϾY]H qn;r^HI@F̹!)Q!MmBU~)Tx. i߄k/QY=i%mRw?>e@^ 5* Ue [_EDw-kG*m8іWN#[I,gG, Tun7lִU 4}i)v9;ðһN%|qQ)=5 ,Kf+?ۇ) OS{ҘreGlUu=d֜M=etpH9};PhF/j$ӕ*RԼ4l^&/us]|Ob 765lkW!",k; $NX}_`ja/TL%Y1Lz><7lZ+ְ'3.E4O-l P'NU(K9I1 iFs7Vg>OE W'(J1{N~z 񏚴!Uq~&Y䟕>;xz`1) T>]Y|1B$ZFv}W}YU s0'+ԟ]1e=²Zbٿj_؞yxj3ĚTقl#nÝb/؞spqa*ӘP:q;8_Q$KLIt eWX?1uQAn-3=50P0!Jtd?Zh8_IWq̎Vsh_+ Tm9>m_m}-?Gyp*f:%ԏ-1mL2`_yD!vFAv+/iUF4 Յ@(wR(ܺC<+{hC7v}ƘXH66︇:T-l8rV~ok&x+!H`Mm$5]_xib:6GG]|̯yAcJ rn+4pn9r''+PCĎ-(ɹ,".\̛,_-l+6d6,p-N/1o_ač3o+~j /#HM\b&;}T\ԗJxr+Ew`o^朑juΎ\4Pn;bU $('<-ȷn*TNzUǵf6e5V& 7[(=Yy$BPMӛ^yD'yoZAx@[-րͱtZOעޮ.*nD5n 0LB|E1m5GeNôɧG ۳oI~$Zy%H=?3vd܀ĬBK9Ka>K^_z5s`*:GDB. ሳNNIU0%Q\xH轧Q_ ʕrl?9LFCmG z.=s/*^1c=w)j#b0_*aQRP񜯳)GMOHvFE(ܵXLVo03m7A3望ɡVQ~=#tHٺ!NccIբv$Y'<۵Ģ"%jN3 󔲶7s˫:8!f^}2u 7)8iPݝS9 <ˬ?HT=;Bg}x@`aѴr]jcYiPY7[<#8[8}1F\ OA znO?<`y20"2:m}'Εz6e'}nIyg@&J/&UQ:Z8ٸOˌEx]h<NV,G9M`25Hx暣e(@fuEAJ4QMpLc_N}LN;mfaMRƣۙrDc]"rZ~*z:,X%xt \"c/1Oc46zU. :(P>Y]"`4[rCY߫>AZ jI^)cg(~; 3}j9+aRV3G]jSض?fIS{pi'sIvㄸlXAG'r䡺ydlr ~s=ēv]ڨc_')c0dr W} [JUճOTWPSKN ٮ^R} ϕuTqXTe2bj0eK+;>_˼=I['DrSFJG @29/֕fscpȵe&-⮟j)iێNhvByFd2} /^ME铧j_M/ X_iGFVuL[vU\xPGzlFi'W\7d\Iq0_f)>+NiH5xf ڴJcп;lr*Z 3:y\ߩm+jB{p յ 5ZbkF+PLClݑHew*4q.q(R`u=aWH)SK\$/dkm,H{?WwfED~>1B94sRImuJ)wb, 4 XLw[TX֛/Rd,bܽIm|󕭍qPzlC؉W/q6__zxvP0ĠVh!Bc{Ik;_:gnfizo9r|Uq|V+5V1S:{mÙp -LՔ^ABzmeZL@`H(qHEo5iIKukFSdh߭O}&qʢN8}$lQO8cP\KXXi˅U 2Qrc=no9jNLF$đ΋%f$efo;NKjA9żO6,^*th3Ҿp9)x[CJͲFzv }a!V35],|ˋIpý[V9~)l`eYѧFv\ I}序7宒k|>l3]JWCzq, ^cIl?P(߱{ss!Fg̠ NJexގ6/hg[箄I{}n1Gy+9M&w߼a8Igj>Tfd7ݣUEGHz&w8e|񹏝1{[hreu%+p'~*8EoYk-h×tgu0s@--Jcvrmz[T|`3iRY]j97hc4TܐPTVnCga7_}oҪ,9W/,L'Yd5_=SkŦ _fZ#x^7$~5˚0M}dv[0U;zQyAշ̧Cc[޳?|-ӎwg\(\#mbf+i'0C/t7G1mvRa4ud'y3"\V{\,Tnƾ CFo}f0¸"k d#*j{oVUK5M,KR|3);"мYO0> stream xmzcpnmc';۶m۶m۶c6wl}9;[9G=zԪ^@Yބ$*HOe&!r41p6p6L  $!;{G 3sgſUkc  G9ՕɅхIJ&&gs @HN^CBV @.&35q4ȻZ[-LlL(v FvDo&3uȈ( *D蔅i:;q612t 7o?-4`hbfa M/$lMIOBN! \ cglh 6; g5GA,D-M-W3f ϾZ{߆,EũkEl-lJ(jhĿPOXEO/Hܽh4L Vf#khboYm'w#e;#`˴ _?`Ts3*T +=7ZHCzWXXn<;̈́q&ǓS:X%D|k uAU1mdAo"3)rk$x;Wm(t~gj~ÚSU#Ι^ څ!3/? 4@;` dhϞ. ߑ]̃V #e!H_zhL'Ƣ;*]=#PB=MЖtZ&ږr/`p S025 IaJ(uge<=ީb̏k(ljQflܦl+YAŀXVj8cB ]vVX$QY]_cҧTib:-xxxM35<]P8kmPOk@ 4繯JZ,)v:8rސb,QA,YUg>&ﲉKN":_+CQpAeLdQjF6J=j߿m<4,âr.q&_^&Con˅vx)StDZhP|!;a~R /{Oe)c:h?hn`̿qu&MbD^U5f::+OPۇ1:cZ",شG=&JQk[: Nwqvp+^$Pچ_wpDBKxZ!-"}ۜfқ_:a ъ 0{Iz\#rT!@! cgm8k /se,o N|Nr r0)(lFO:Rjex9vphҥ4|'~O+bZ3LXSf 2rv*AczQQ}%4@'E|Kk5d(ݒe>&,8LJL9$u :>4KҜJ'/-r|18=)$G" _Lq7NR^Il- qB*6Z hHa8t3TXcJnϵ%mRi/UF u}Ȑ} L$ϟ0VWSEKXs[ S/K 6u_?C߲GGM_$Ȗ8EiNB!BO1ϠI7nF\5M+![*.P󿃞nmq̟"+ .*4o CuNcfkUK'q7iTZW:h`ZWEۺp3VHltaTQ SZkyl`)?XD9υZAj-1")N85W52[H|vQAE?'3 8A BYb@iYeu<^3fp(ɒ]HGe^ѐ )$zλnvK | -J3?7|-#ԯ+(2,~轀YW_e6~1Nd2B ^!sH]nr])Ν"w1[\o9G0MiClRpTb] 52a[귦T@%v!y>Q*=MI f3d9D3:9TTya;5p iʓ\TEJe9g=9;N}fa4~n6}iާ8P)~Ejt F؄dŝ@$`N:$KsB&M#ֽQ scۍQ͢MuD|waui %*Yn ݮujߺ zPˌllB7)=5GAV]%7v-x#]c79.7aKLIkw/xuu:?u;xcd1CVRe~VVY%ߪUMs<0k>Z,f,)QM6z`/),]kN*fx N{ӏCYFQʐ>D:zz'*~',M!A]9.X>EHqW|Uث;ݏ)MCtƴjIImNUWTr$xFQ± ҂Sx_Ԃk)%+}>O҄79\tE@:O)5"QIzE$/՘PTzjW ]?͔ Tz>%#BwK0iLªj,Hܦx \_#C*'q|l!Ȩ^b!¼_'BQ}U eJfטK"`@^Wz:ЯyߜO*KiTZD$w.қRNvĻ{Q6N6U{U@20av%vf-2o_ѬtTtٽ4e \(`g XN_l-;9^*lpGA_aѧ$ӈreO3%/~O>N˱ _!J/Q!|Pd\R_@RD$e}]WLɔMޒ! fc[ŸN IetuU;& T*Z*n~<0t`Xp(6昼&( MJk) N'dFL#'c*MJ"ui)~Xߎ\O(7r"9 )̚X2vƺXɃ+Hp-:ɥձ\9#䭭v pC[p.x7wp{"stR٧ub4MWܙF^l*h=or4q{iChmjĹ2aKt&3Rc1nP1|c/~ r߄x #Ȋ$>]-ld<>4 T|ٲY ]%GwVGwhZ!%)}^j{E]P|r`yo6.z͏G@*d4GƈԄӱüŤYJ3ݰӘ6wO լgHyp%+/a^tII7&Qvx4WH%*DSu%L#ȇͤĆ-vr^.KI|0,3~eF9?3A`>&B=.ǝ'uM~ ;"ĕ2xC>wsAKcp"]B&y~^6 _DvЫtJYo~zw9w i *9T&>[k&~$uշc(a|[* qLt-;E'G;9y;v е'dfŲH]? anA֔LD_\"GEr9,OnrX }w a xJa^ FLk0b@3bm<@u P {f;|vg٭g:ﹳM[iY&]nv#ޚcE5[n~lp;rV[ÕL֬* * |#|4-$[s]Qv5$Pe9{@۔C9ܙdxP پC"ӃTXò*#OH /UHG{ƀxYl#Tvjd(o}~aut7W{u7dեad6 !hŢdA%`YSI&yget!ebAN*=lJ?rHQoEoV->]TwoE"Xu:}_ w[b"Y$2Xd MOxE/ mLS7_#}S-t"jQM7]qYwHW1g봢oܚWT\c0wR+Shś0^6l=xUM:0"UF ppV \2~̂fQJen'+J(&,UD)#\NpDs==eD/˜C|$Yv2$ Hafu2s0)&?V.SL$',uf7Eu<:s4rgh*b(e{yǐBɯv(cм;W(yM+Xأo$Ld&%EnQ-$dh,<^ }$$(~#ۻc1113B`v.o/Z2&6mV0nUA};l|vy6pMYSS_Qg%(=6y0\Q1,[n`R.mdH׭ ӾZ&ĥ^k0A֔Q:ԇfZ֪ :/_QEOi6yXu ^)dSt'< O~Rш{ I~:&ٜr3%ϕ-%!G2݊/2Aי Wgr;'[oyvXE[0 -^))w!/39!W p+٥!ތ>.`*`pO#Xav偫j$XǒgpV ZxU~;O! P?&ExE jIhV?'h$#Vs"E cU~YG!Mė4m M~2d8]:ix8s8rHYzAJ8PLMD,c%EaT鰼ԆPڃ_C6pL U JGeMc@0L(;2~cY=$!ȯ`%jl~&J<'m0(xiikr2*[zt~1O(1,nkG2#r7Ҡq;\DbJ^u!GaQ)Rb8 q:{uu@^ dL_ "Iܥ3{I42~BMQYܓ̍7jz[8Ub9Z@"C0I ^R4^}+_$^@5WQ9"Јˍ0Vr;5Mz$Z4~no=nT@?tM{4@]$ɟkA&=L,6GiNN6oz Ԭ!H?YQ՘OL>Cb|iD5n;E~Kp_ہi|4 *iI]6v 7Y[w zG?ґ-1]IcJĥ/ kLj0D /xB}wVK+0 \n ŗ'O'p (qQC" !Y_R{cshƙPBJ&sz5" ܑ&#]0d.mo4}PA>M}\I$oX{(2zNL$ofɋ b; bsa!#A2+.mhb^۰Y9}µ4ې٘s?&ͺ~@u:ld<5 _,`jpPI'6BUy}Y@$Hmּ6e85xQ5Դ8x$X2!Ұv=p(B҅q3@gR[zV?f/;xS9eFuD~ cvu + }oeqN Ck҅W={TMqsZSld} {a/~z w M6s@8T k 85*bcƯVJJaIg<Q^ Ƴ^o_ѦIM>XB[bp_8v~a8"ffjMt=SP}^ߺ@'y.za/y!cP m/B&>P'ԤarzrFn}+teH%/lL̘P# îqua!-j"Za-?Ri$@`)PGg@o wY_~UYćX髋/nٱt7YyA]Z8~yò-b5<$}YԶC̙4!+OStY;`&q?@"C_R>GlRg'Wfmh>'\:WnĽ4x{X&*NWk5,&]| k֑U*_e婝o3I|H<}V7QrZ※I8{f^J0FzLzڬ*Xw L`Sff_1CPX۩$tA܃(ʘA{[+Bq}3?U|6oȊ4-˽N,1'Ѵ`_X|i([a\s :eSx 7 Asj|f9z&iٛ: =sY qɧ<QcB[l_knAM۔BrQHe2F# 7*36wRFZ8-OSnlg4)Av˲gMurRkw ==x^)ҰTsBXEzq] }Ј$]TX-B`8 u=&OO wt߻F{GųP e~ qF Y],ť&܃01vKNn &vڲSF3N_W .QC2U(yL ^JYÞ <ɩϙ%g4˝?t"RTCKT3G(oԤZRV҅}X@*3ndE@TOJ!l@/^0Q8Hʩv2kƈ}l6)$b`v ]!ʉ#%DT4ok- b$MO ޛo!Lq)C+M,+`̤muHX=Yƽ=,MԱۓ魲]-6ܘi:Ko@oɾjgڜzhzDdѼO'v|me9kVcqG6J O9#2U(#CFEéz$PRρSDoPO-b"0|%,aB l=_م&j(rcb߫[f۹үݹ.y~gu+L6Ko͂?V'h&j=~]6,o5!`(G,`q7j8*>S&uc]gUXu+?DZHBW#dUdȹ[g>zU99m,1D{bDNR8l04HG$h`PC+p|qO \mh5[!ʖ z0tC)ߑHSwC@#d+r`̽0]K9 HSP@ \ppIj#^Mڸ0œgޔwv2#t<˧.JА2.RT$|w/zN,u[VVs>>/" ""3p[6AX!@` ƮP(ˌt:w !,n'wQomDJUL]9x!MpT5<äV%+|_Ep!$( q`X\$q ]͗H~QfQ=KKi|\pNxgA`s0tmcUMol5 +?1ڋ.׿!Ql(%GsM/~.5[l!@,7Q35xY5AUĹȠ(9^Ebpn+S4$ë-hWՓ^(&"KoS.1WIiU C6x&|e7~7u5ю:qQ į  choډ`: _?Xsj*Csiiz5Х^['sn6K(ėV^uq1gYY%l Ps5x 42mqRfqn?9/Ōf `;d2kbȽc݌ќK}B\^wW4| BRA@,֧Z]0dgWO T8Z >B|t!W4;5'|i('_Ցo٨(dEJqK[5r9I KCHrB*T[kuER5Ҁ?J}vz,<Uv$_ vL=iN.>elIo^]x`3k~ajpƙ uX uh7 7CL$b| jΧy+N/^9gF 1ʸKPDd+)'jh~y̒GPe.NJNpXVc< "la?Гpb-r1Ouk آ(EfW ԛd-īvCT"& F`=Z]0#sO"4fk(+͟wNAw>$& f14jI*sX8 &f<*_1n)W[{aah׎6F9X3Munl͓2C9[ص}DdVBm$,)c5Jʑz[>*/8O-XnF̕/ZcҖ5,[Eڧzz:99?:ogQtXO%]qtҤ|qgWTI6"MTd1T2.!'}+FjVE{_ f S&a 9ƅ x2Aak{b߾+ tV1dbc*އx}]D ϩ]xyeWVTT9y[@/̐=}<:~B;a:`GGY?U|p PPD=4| Vv2B+ڪOmf `&}/- q*ŵf)r^vuD>qQupOVe@PR)[+PRy`%Xtlh HԸ;IZLn84 *Dyq9r\dEj!!$ ǣ7Q!Z[$kLUQ9t-AgN03&& vh(-yFT`)Tڙs}HfXH'jKOIG$c)-^s"*pKEW#pMErulzV`0 "uM0':h)Ģ+*?<\'DAt=3kXRF bHJGd R"v p%gm~C b\U# {kqm=f׼A?:.`Yq1[Κꚋ뗜'?'(5CD4?$aq}P~RD@XqR_W3 <'ʑV rw~B7gKɕk[juɕݶrp;03˞>]`L_ϧDutڿ[H1f<+ʹ}B@ۓ2W#VK2y3a&:uX_KCpzTrU2^kn2qo:^L;N?%OzXBr)%Vx HV>BW(UUI] zѷⱰېv!}. ~ӺQ]]s߬ǯްkm +9#8q\o7|ՃZy9%UfKr M4C R Rv$e$3Trd+mTL 4aϸ %2RHӣpΙ=7VTV4 f}bۊ! ƾhd<:&|`a5WlɳeE*ȩG(+ӗUCA#a#Ύ@]vo>!g@A^%/_rcsId[͛’=a;P#IEkAM^.4:G,[.;$<0Uk^Ӳ俑 |2K \WѸc&C:hWĠ.LD]2ˌ9EwHb >:,v5WIeFWaŦ`;h<Hw1"d$- (9 J̈?z?Ǵa{s;HuJñ6;Jb࠯F,wՓ:ה[a@@vNKzgM:w;1kYT T=F7*w^@fk&u'YW 9/ TbByTO~VD&9dT|=`Jm5N l;tț=|+ sqV>'g}Sy4rW\Yq?xpWSgDyE ,+eעWyp #iҍ &.g%7VI83scޡ3^z soapiʷљr=}ԒApN<"7< $ 7L"񏘿ӌJ5(\%xz843T.  Gj-9ĖXzGX5ێu@!wh,JQLцl%)]",ؖhݞ=RزՓx*E\}(&nT#⋊'&#, %;˵@7G V8;+0P]\?"crnXUomÔGt$IC%PuU-S8;|襆OspB[BVYc$U.t:"K@C'ս}>GThM]t!XLPka#fJڤ$1H3v5g7hWl0;snC=˼l׽X_!cLwN; ?掬%$՞k#MH~JO!(/MSnQpp-S{ .uxo+$N_qdݴHp`hm"LT-_h]Ntž[ǃKj0w| {I}Q@ꌤ}qkZQ(#<}㲑A KC73ŻA.:FkpfG5%KqT՚EqT'":A5 }9;C xhxE^U ;>ɁV ̲Dn)7]Wp!x,W^&lyX6Κl*l 0&> stream xlct&-vضmc'wlvǶݱm;N:w;3Ψ? s՚k^FUQH:ػ{9YXyj ,fF68 1g+ 4,Vff8 +ڔ_A3@.&Op̭l1%emE)ll Pv32[]4sgpra{w?̝ "J 1&u1@^r{W@Sg_f=m1±̬L]&@ +{8MﰙRr if@nv@+`t:elge?:[CV.V@3e+67G5>ݿω9zL ʒbt]%M̬-jhilVޞ6XW0vu23z0KQ> ,<6V ;'Gh/? ­8ZWKUA[a]E43<»W+@ 2ػܕo!5N"ONŒDབUYnm43UsXVb;u*@b5DI\[|ѧBBB +6z_(C5, r<оb5uYȒ=>=)BI)&X]e?tyVA'zę^FҵV5D~S zkczL'aӽKH9-EQR)__BuMfmKI2R7$*QpZ^dFg7p!虢IeUBU[pdALAy =FvAL1[8f#sD>3#' =ˠ&b C\WIpҳxĊPUwT#MZ5;2yOoe/g_yoc/dt3#֔H4 Έ| W0ǩtQ@dW9lM9ˀIOO 8m4@I v2z"}~Tܸfuş?*j:@*Sފzݓ[AL˥V|m-ew'7X4Ry n9љp2$GJHф;X0M)/+:Νiv[ᠧF%g3;ČF @<+3ۜh0Pt;VNWݒ)Q,cM9@ől;AǛsƇaKw˂Aϵ Ow&[ph_oj[Q@_9'2"&5";tW,7it-ڱ; }xLšṀ%;̠| AxZ(܆p\B5%ZX\ m5-ߕ^r`x? xK$ iX9qҢ5ǿ$=lk<(:ō=7^#ma+<_28NoAP)6 dnmtotf77LJ@fS[EXE4Gjc̳12<]o8<Ё}rśz }KY^qJ8>H 8I}4R($D!0zRfa ϑ=` 9e}&,Ocuj 0wi#R QUeܼ4 ^:Éכ&6>HX\_7Z"k6$j|9>ZaN'tlLk_Ib`YIil<,(o|ٜxy+.Rjch&$oapoXLz&(6wXxOD~uX|oU?Aw V1& T2=n079\jeg[X40wgh.\Ǭ1sӝxFJ/pD>Sj7Ufħ'B/*uq i!7*>?Cust|?ܲ G!,􂞅XK=ÓvcWJbȘþ,6q*/P6Z91A)̈́mvzp[C)_>N]B{Sf۹DmWMMY [׎fqa2T/&Ѭ,$ <%Gҗ9$`7K9a7B-pVxw!ci no8&TިOP!O:L=٤zs7`ecEo ^@m1[3Nb;P eW  AMO]Pٻ]rGpg@4ipTCBqԚRaҽ6wyֱi?їc=뿱=-S9s%tA5c 5( 0 CNf#Zi>UTPA{7`u/)>f ?4S?WhEÚZj@$)q@3W޿-MoۘҦXv~ ڣ:7 kz#z!3hkg?xһ7! Vfsڹ/')VWw['uA$<#KI?V\%\ Z.=璣њ"֛ExZqqlG][y<qyTMx~X'kD!4g0Uwe0U2ГGmenqt|oq3?!7wS$ T4OA Muh5mMe_9+*GFR8^*h?uN}rk|'&')Nd?fy?&g_-\%pA@)vȑUm`n?}2Yvý%݂tԆxxe}צi2nDN 4MI_nXA!ش _u{;'oK (іۃJAbմ,Q`x[LӃy:{9zu?Ӓ`3drLSqvƃܭXfeM=aD)h>9-ЏR܃#qné1#C x1QX\pne^Agy@˫Fm"aBCmK4C Zш̣y/٫=EȢ"NdR{Ue󷫣d*)p̧p"Cpފ /*ɀ:d Z*YU%ZW΂iQRh)CQaXTA5#ft:8$PƲibtćGЯzԬ˷Wby`vgnd+km1'ks{}hPێOf^+gi)ktT% >7SxiM* 5xe~"bjT(:Kѣ[sE$YT~niy"xڐ}TWt)@y0F}5?IojT0yk!n nR_c:fyȲm!p|j,cϚ"Н¼&S#-WW`W'[! &$bRiiB<TƖ00fVLdZChJ հZ˟I#Nk9Fpr3"uK0Ib9xc [OS\IKJ<0՟J?/*A-\?mɾ4IbRR-^h4Rc4jyeS=!<+ SXMZ1Ns|7.d_şl& 6Qi]JYY-PJP\ةsf ?Vٻ:a*cIح/EiԆޛ0$= `._a+s舷)QWl6f}|nJo<=jr0/E, 84ೞ櫴Ø :TʲP  ۦ6W3fXM {xC~)NO~u9"?q{7u"@G=zR)WLq쵅Zt *%&PD!$+(a³û }'fbi/r8!o ^FSHU7G)p+&eˑ%|x{hmdՇ6I˖QzƃDo%I,$[ H;w-{/},Z_;p\Ym񰨔z~+.±p触0sb3V&dw^ #eC!D|}).!YOD[UQtŸ:+̽y *$(A. |-鐟m^=i s8ƨ|\]V Dj,V =hj=c*p[4ۿj`4V^qZtmPt_Of[ Wh1 6Nk'Cp5_YwƂ3Y(@4^[Ef<4KKp_ȠoEaCvt?x+9<_*Ym_iOsvASo ~H] w| &XAhPH-M*\TAQ?uEջmigLB1Xt_Գm$Ԛ`T#_4GUg(~,xo3ƼQa2+3@ <7lSJrǑ"N!bOȲ[t ++:ܕIn<1E߰(6` "/Rl| $'_JގGx/S!n8F-EˆP0l(p"Q7|\o_ʲVk28DJeDV6oXHҿ4i!v˼-4wI{6XޕGꕞ=F.o+{0-mDPqJe.tıӵ-$MJ']!:=2* >HnoKv=覇?&,~W~9AQѾ:74}I$HYZ|)E[+Gƴ? QSN(C,~EY,Nfc_>dܺT8'IAD 7,/J7}o+>>aVGi e82- &sn>`JBGaoi`ϣ2sZlIHLv~"e`|5CFOЅnW{pl.bUwVc#UݟF{oU6瘋Ƨ<սVbU:H)?KBaEw&_u pb43e9XGa+t)wd=QN_@e ֞t!H 15Zg_0M^ ʡ'OAж'TfY֞ eWřB*紫R!W,KRQ4G(aJ#E,e^a]3bg"43 Ŗ2~k1 JvHN-yB4v)F!<+0+am( Q,FI;}},sfbT<!ઍϺpwEL+ !C[Ԙ؜ :lPHxsZ ޾l[cj&50278Bx=>cQ۷wDgyЇnB*#amXT0j[`ٜ8Yq}y(; IȾ'jBMPO#{5H 2s$!gAӕQ_͖ZUN>n4Q"ж v>~: 50Xe V0LeZd1R (f}|I.b &@}81$کlUWĘ:V"`C@*},+U4V9핈cӞj:xM ք^c3X(VM!OYt\膧S 3,oNk]PRV1nazWw }Xփ_m3,T &轿/w_dLސjj/U=7ұRJ~zH0t̩v4Zh&\\rNuyͬ^ؤe4JdIe8|YuA\،])]-$pB2O(O\*8GE69+va{ѡNpð;sR cu # :;pǪ\Xrf[IpTx @^:qŻ<)e[+ZSn3/qPBg6&AD\cn~X$逍T4R#֜vVK(7tEaqmBM\W:)<]o OeP_#vO ]TG$u.ZM":e+TM_%\+>K/әCzܠxbBl"ޮu8]S蒙DE.-z+5|޺{,) ]~&N UF5ƅ唖Qr+.|Dsқh4\A;fQ$ yFc&O5'IdzF"6k/+hjr|ȪuUu=t<4'ZUYrOgߥga;?>R2$ טtn+34VLFcV,ɤMcG5xԀ_߷1s\ SH:->D*k x0I w[޶8s|:Vrbwg$uGxSBP"V4geeƏKTV=Sfcw0:! 䛠*A񌤰?sFX 9P6ۂp[AL;31@=7/kguDqWYYY1d)I@"T+< VX.m$sY0nss@ܡaVUSM ,kaΌJ( ch^>l v|([2y 1.Ø{q0`Sl=iE}ތN<Q1iG"Im%]. *敾e6x#>9{oP G(Xg~pe;7%Jgg|4sC .Bhx:harMG%@5 y `#q{&C8jhz+e HZBY5[9p_yGLcz@*Dtp#2 \R@v>z u~jFzszH]YE Eo}p4k3Bψ08=}Ynm"O,asYa ,: kGPվg椴$ g3ONtE(?4J+(&L%^o*#1cuӴ=sjV͉V % ߄;Y[9 [ V@CU~ޫmxrDu0KS5eǺ0o $c vSYq2rX[fu;2x**Cխre(R1x>2RH1N.EK7p`?p! W{L 9O;g/v~-jl ?{&M.P0;Y;]:Ęj&PtJZ Wy)nCN&`n.ISKfCm^m2Y3"HYX1oD w27#g4ÉC[k=AW||chGo.|)8y;jzdBt[7gRT.Ɗ 0W <&xŧT<{=ۭ-O{$W (@iEU=ްi'3OSM~ 2s!5R>6cd Y>HB ;$t*TN]zmZvr)n]&/q {!rVm+ 6%1WBbL <U@7M^:\]Щ/٩NHNaI+:ͣ\Hx1%Cdpgnnec`QM>٥]t?u͵c)@IqUN~Xsq52˫.e ;n ?c2f32XЃ9jۼ%qcaOqt;h8wnfMOgّf#8UF9*2.XrX!Z=0qνs6+glI䕵zߦ  )-m)5ɨMS0KET,nirɛU<gV2[7|{S,dnP^5!U Ӟ:/pJհ]=]o2kуfi[ υoόoX&%G?\9n"Xcv 1>ZbiU}6]I괱 -k,cl\M+z#AҶj Ž_8ݏk:S \mGe ?N! ƒM7]8%ks&0CmtjtG-϶l jě+MqEȄ3N\D犣Q\QI7HӢ$%v_͔Fػ -k榔iGö' )W0cTِr8k.U20t' ӣdN qwvvq~7{D,qkͣt!Ƕ,Ѭ3:gz.W\-L{ͧ7W7E7OK izz'':%D:1 #y%AF{Mˣ$ ޸uos 6!)ݙ'6*'-)O}ʮ>Us39m&JX)R5 DL^qzÎX*&C0i2y]M؅yM:Q̒M`K0INn\R蛹1f xJB׃QlJ42[,q 5d֮N];.'M+0gU56|eqp^|*l67w=Cw+T2W}9k?`)|KU y)АHwh?RUAA=pӼ~t3\u1Eo' X+*_qDvCPT z_ ij@B"~BdPߴDZKbWR/kF ~\VF$-WD+~A5{=(@$:Ҧzʼ*̴plR~8I*i{3 u{`Zq\<|aA,I;N"*f b۵)mŖ2"̥\p']t %zO`20& e˯-Q,{˃[(hre-!9ih/G=#5ܦ-xWxl%q "Jci_ﰶFso #Ԏ v®IP' N8%Wuon :"Nh/o*)|>I78:rf4+AɜC^_dPeY;H&b)_4ﴎ"TM32Vqe.`6_Bo,RnCǾPⶻrOnHtp51 dTG$=&Lj4>6?E;Ϭ/,^D"`]`V=y!(GQ偯 3="V#`W1lIɆ OMmXђu$]sLh^(9_K`:*'uF.IHL^ցջ89VBQt|&F+Ɇ IC0nR!fmyZe:),ڻ)(Cw} h 0Gh BYmH#+[m mZ挜 Xۨ uİ%Tyi1Kl?߂|Xa^ ѪFFktkAGטrooa"0Krzx*n vzrSE7vo+|Wꔗqp18 +oy/3BK<FJS,J U%L;\nIuU?C ͷ>Ej 5`P?΀Ύej\ZtpFhaDӱ &t&lmpoK  hCywӥ_g6`=я1Jx>?Vzv`zّ]F |'F)G+=΄;x\?r7Q,)X*2% j\ ,C AK(04il#H_sě\ߜIA6H5pX5dx| 5hz;7*SWHœ ;h6s/8$rm_r ~~/t)pT711bIEilJ.F|'c$(ok1mzdP"(K,$'h-{S64' ߔ:)-'٩ [[i,xY@?7+I+ gȍQǩ$؟$ɂJ嵵KtÁ5;(r|Ѣ-4WVsHwr(s A֯jI^MݱtR\W6oetEm18'[i86wfz1?\5l⅒*eV%{a|O+ER;aXLF}ٲ(]b,4q԰^:)0}_?N;J|e'͈PD=ҷꃌ \Dg#'jb%3L;ġQ&z{ɑ.(o^Wj_[ lTtfKlM93ю:.nǸ_̇ƜX\ô s՞nd]U'$!6E XԻ}k~/o m]c:pE,J3wq;WV~VMG_iz5+H M@ [xq  Mj&&$\ 흟%F1a7Ex5l[zوZ{CX>HTT!RwP,CSe`A1ŕhE E䆼2YnS[Ȼ<3M'vwLcNDm2[?b`/ʖ}˃Awrq4^8bOs%֒,Wj=@ PpVY(~{|cnU+83˶oETYX"D1eZW'おtT-ܰp*h1kÚD^e˼nmg(|?1o"r}AܹEg>!>U IAV%cYH vYzdй\,}Vfh?-,Ulzp}CHoMp9#P@4ӥj7GA 籸0[{??^AOJ0ئˉ_drbL[dۇW) Ph?0ѤlH׹zM<&u@,Ts@ϋ_../WЉ g~%rг_~{Ԗ&8ZҖ?1M_~]2@ *fiXxSƇDkd& P|S=D'׎%ZtT&_jTf b&wu;)QTƳM!;Q Dt䒸9dm=l"1$}yQϞmEh2<؊?ҋYK?H(jk|bI[.炄8k<;[8;9Z>INB5izN! [OiC<Ju9L0RRlC$ X޴Y)f|'G-4=S?F@NOKC.N6. 6!}=5l~61\לžQV19ʪOg0,GHw_P-&%k@J]Ǩp +sρ b{y,r3Sh,Ǘ܉D [󓍚mC9-MPw$"Єs41h+%OmN؆D]{aw+%#0.1 ^eʀm͡b0w'|34F6qu0d4cY~^qڐ} :sLͼ6O7&)ݧ|>B_tbg\w0֮,BDOQ5-yBS@6^ 㰺`尜=$&R\Cr.Ɯߏ8J>VwBD1SuS i/LnJ۪SbMnKN$x{FR[ҿ`V%=wIfe!IĖMsGטOUIdMIlNFs(MӔvJBw |-?Jߢ ٱ5\H BYLkRqo&}1 &dML6̬uoGpwT?ɯ *e_)ka҂c*ė8"j&Tw r\v+:q.{Jd!i{q.p Ȭ[7`KbF {%ɯ &IПX,|;gF*1ȋ$/Xn]DRtQ~3#{#f^"Im=2 وBw7˧/ʗQEGн7)Fl ˣg->PBQ;homZ n*$lUu5›#?- _QS Kc,/Z{iHGХaH 7%0zɭY?7ttpNǖiUYt3N4jXl vLq<|7)1LE=SRu͓RN;l6']c@Cv^ܭFI"ރASyM:u&Q%+c s,jԬt$Ը u84EOS`{6p';qɪ_(0/%\I&3/o}Vpݙ+ Є:Zp6KL{'M;\:)^!\ 3?TɶS pL}Wʾ!BMq8]N0GM8Z)˪-*0^u29G/E`x!isw~1V2\c [3 Pk!I@ٗd4MZO.|)+ J|}N%dJJ|djŭ2%!Bt1zc%aɱ6}])ndeVh&;ښ01,\Q}a#[p }\oZkihGW9_bk,F 90dQ_hQ<Έ?qFP؜P76u%>4]ݞ6WBLsw&ٝ8&LGE4 AOŋgw4 o4wOxgEs~'eۆŋ%\-$_=o)8b>0' yz8&e*V]W!`S[o2Q1L~9JXڽud_T> stream xmxL]ݶ5݋Cq׃܋ww-ݡ}Nv5X#ɦ"rjx9Z11ԥYYTT&@?@n`c!PV֮Z3v&@{3ૃ; ōM` +*Ih4 g; 4X,vNf s80Cn=@QRCTJYI )΢!0d\]-̜##F:{;bF`c\V@˿tY:]6wsO/!5[XE)[h\- ?({?YW:*E iat+_kY^-́n5wyϑ@M-) %$*&?d&&@O+?<}xL6ο/>NvCwO,,<-WBl[*$章g5VWgzoЁFWHsB;-&HS1d+ϥUV~u/# ۛ)AD޹fnOsf9 KWt@LX[3@gE-6y[/E7. t< ymY`x E$ޣ kc:{(=[~5vb2~ RyrfsRxLFp߿W*ҐMF{§C\YU!DLTO$bμx E8ij5ڢl1rM[v5nt9sD5ڛdUcmFBH~/@* v4+ߪ b0P;kO!6"zV0k-yx>?Ʈ|Kg5d_hڮMǚͥN!-c$ nº"#@g,dK LJf-7a$ŭ:L5?$ 9P@#FT BP@`y5q#4?E`D𤲍fJSvHwl;0!n3B$RY+!_jS||qkO(.RVD;IIU#"Ҍ,^?ۖ$HPȤև E! KK]rZ|K3ҫgdI,i#Ƥp 5u;a"0+hYJV]|tO7lۡCw2Ғ=i'̏& vYl'Lܑ=s"zrw"96F_Dd2;6~=AEuj9Fq%{G L;U6aTs\r>9AU$+-lMSM8jZ(XHQ\@O8C4R_vC+zMdzsq9ELiA{i1&sx'{v}8(7k%GYt_%$j<)oAM4%Z|s>?4N~b+ 31BvM[rܹ$ҵsIPÍ^dm}`abF^~Q>`[Vg$rVwAUςy?ؼoQbw+b$¼󐠚HD}D\$L$¡ݚT0`[o_yӯMr,oJ>lÝyL9|* __2PtT$M-b2ДR }'Jٽ;2tV'~%f\o S(-JU7yw4 ܹ7zE獴f)Rzo;t;)pNԔ||hw+s̅j)vE5fF%Nn|1&x}P_̭f23*נ&ie8^ ji1Sv6q$yfrj*jPK$Gf#77lZ|]y7΂"jWДZE1F ՜M"կ0!Fd3_ 9>LQLQd-DA!-s3sn\(frPq.9#~{̐ N&bUVBB WJ/m%nyT)-eWbVE FA-^40tc}ݏl[!~j|mQ:фݠK; >qlʚ4Y`VIMwp@ GtvŜ#bb?  -d:a9L1{ʡj78qHC4 Ia;;uU* eKM̸'D#+K}Q/E: Ur=)i-B=%;0\#R(`]ZIE DպAԠFx.oux6:_b$s}5خbp//c9f/> )5<݃ZqYN4m,< ңw1:r_9 C,64ٌP[R\LI=0_|}]Tv+žL 6%Q(X˶~A9.<#LfB2HMS}7vWM rԒP%#tNH (Cu> ttxlxO641ۢ.iS .hp-X ]ۃ U␩^*/ P-Z@}sUJqjѨH9n##8[fDKx"mEWx1=Z`ȕ ނ. N"udilŶNvb6%l!LЋ4fj/Qw+s4̆4a+IFɺ\7W7x3xwOlZEZJAF;E{٪;JWoMniLSj͵ibJzBžbh]W_k?s>om=a$vL=Vmpv&j%x#zK!?ɧ!.X2uQm(N<g``$4sn)Z MI. }E[%Փv=ϏQ bTq꫖* )cD5'aⱯޘ#wA#h;̼M"pKJ'gФCy4 Hsp :ug#r}ą<*5i_fzkC˃N,|7N.g\-?nmr]N;~zqwR<@|NvV,Z,ɞ7ޱwkrr2=E3.NC}3K}N((È\xoZ2Wef%GӢx7 &N%졣> hT;* #w¤Cyp&lϘP$7rT/ ~p"no3{,/~՜8< <}CDGXUUѣrN J(@6#TUjU"`#L<#C^ݺap7z[Ĝ ';Jm*<7y|`RFv"Ґ -5bTk|lvh&1G}4g@~ld|A%$\8NzѢ)ATozAS92ё5AzSY2ӯKxM™^.hnz40Ϝq.w(7 ,˹~zTwxh-Uh( buAŌԄX>Wysx"i>[&TX.Dj&L耸Z!,R{GNhE]wAjUrUGNa<ХTKYn'Q]~ X|JQ~Ng:93՜E5WR-+KRў#<`5(,7֪҂d.j[G:Co>'? [3j*1`U[TqK? -IJuIdJĆJ`dO zp}5:Υ?&La}6 /Wֿd$tkrNjNVb=47}wkc~9C%+v{js5ePWYtN9%g3Az5YcKBK'gxTM~{rZm'ok6WB)s Tɸl*w ]ue|.] ABp XH~ڕ}ӺF ?n%Tv6$G3iW xM9lb$q#c;ҊwHH,!X׸; ߊdl;h>Dj7=x1hR'X[ZÌp XγDV_Z5PZd:$[ V"յ*ǩS&1W*V ->De_>}0f6*B1>)l[ThqvKb=Dvu9qyנ18*BÌ rl"QҍѹY!H_mF"ob>ƿSS- B{GxQ z7-ӥNlqrmĈMDDM6FrcCOCR蚱=88O28`ԝMv 4꓁ vדmF<5Z/(f&%&ӏ]',' >.CHW7(>qkGVM"}3{˅=FŰArNw" EKȦ'~6?p^ J=i"a`g\0|mS˷O_2g8c%*q[DV *8r :@HQhU`_7U`ʥo Y,2M#C% Qwn{:IiU :>q(Q%ggGltɣ f74tqx/u"$;܊?_śH89ZoDz:mlgC⹨.!E)RCTGߺAD, 0pݒGZ$7}"Y\z xJz䇡#L&~ϒЊ'tFC2W<*wL6kdHR>0 aKF߫sk:CM⛅cp*k! |O$2oI2XkɄG4F1R6n>LLMQ_$vjx4)\s*L?RYVLRV,Qbkb0 'o=<'Cj 4QMc!a꧐U;Rp% |tߟ/'Nj.z\"poB' n [p;[DDfd5l.>lp1=}=ewP &}Ex V3]xTJ)Ø1CVީIwQ`S hUcYnGX3ŷ9pOG,J(pj֖DoK|?ES{O+[Yw}Vcٳ4b9qs k}i{[ [h 5HbM/&}1Ma$ G GyKLjCZx&\_W" ]'.noWﺼ2Kl_ZaH!U ),DqU:>fnc$s,˲kR@/I?%r& xc|l@4JKk#\pu/:!3>0S(FR6o t{ k"Df0Ǡ:/6V7ⴃcsl֚2^ᵉ/FT<)\=Fg}ZLKS7 nQ뼐Kz6V{vn%Hᇏx C#q\uQg=}HC5:"/\/Cץ"m`HgC1l߷1  ұ~^#d'Pt`Gm-GTBgr"8;l'G sdFAAGw&JLGwZhGz; tFJߖp ^^T"vWJmFqe(v4ݢTᅤ2HqQapi/ 0E\Yh;͂és2:/^(|pG Ej =]ȃ*"nj1.C:SHJxֽbu"bRtEf aK(';kfI.ovq8Gfg6n}piY oy}w_gol]#÷"-8z#,q}gcExd1Aҡ [G盗OFɍh˷b&gloi,}tYmVy#߅IZ:lukgp{iaC !X$ Rstξ9YlҦ˵/vIᤊ f-Zy>kčMԾ8v6 :e:J͹Ff (1m4,|uCU}5CM@+~D?[{ɉA/,z 6eglۊjC~wĖ,~:<6;g fJդ'GzMn<ΰ\l"V˝`>oPw_h,(S'_CHYAt%{ظCv [΂c[kƠ ZODRvCK$U:xc'n܄xm ҵlVw\1\8s4sm9@K'X2}keРV^(ɤ~P^Zaw05ƹAqAS$$mݸW pV#~e!?x/# 3x;*|XH>ٴ肽>vO 0 P1[$YK Ֆia6T3 mկ\/\B#^,G]D⪵ [b>v9X1'F̡Y[|sAߗJb7QHR# HRrUhرJ~VyìfWR1)?&A$pdg+53 L<(uwf6Bo!,ywL!Q)c/6|(+V i|#+-ӘcYV{I9~A욹 f.^`V* 5'e#_g\&r[6.8Rtd6 fz:F,!\ٯBʲc~V6=qD7ޭCfߺH b +=Ds(|􁧓 >9~TGޮo45אm'еYЮw]^w0x ,4P4L$BM&[}Q2)- [5`/ Kqrdͮ}^K˩b3VW6Y`j`?~XP&o5zN7̫m7S[Ʒ؇wDYg_7jiaHǙ A(uXRYJ U\4gBeG8z-;%VKrxGo]uǗ_PWꡖWj+0p@+<:np1p.NsZ8a'4HYV5~XU}xΆh8 hI) Uj<*D|UԊC7I. /S&Ķ1 "tWywΡa - ,8ǿva(Șʥ,!z˳Nϸ bVR8ќJbex>9bX@j?RātCx,U8 ՟L&n_I@8<c&##)@$)7j "ՊFd ^ Fo$a.4V@ 4TV_ZNy1įbCɂ bT1 ^2>$F{= oCǶ(.he % 2xM-}tAS>|2Ii^`R{5ݟFCjP ¢Ƚ&G*_\||v6a+S;P߼'L,WS vn9,O3o\kEԆ}Y n*ᱷWt)V (H\O,$q z^^Wz.װ!+њ_V/9U -:[{Ʈ@U5Ҋc*I{dgQٯ ėg۴4~BlҴLޜ1 Ql`\kf/YȀ͐:9U/i.l1cm Ve>6=0'eg'lñ |O-R<. V%ec]y(%_Ԫ 99D$B﷠\~ƫIW%bs_,ȸ[,#tNψjE4T"5kiɭ%ϙȀL*G-qĪVeA>KasSsX-A t7mTC"skqi GqW2hJ̘b,PfY^)HF/Ӓ3Y0 '\%ۛ@V}xkT#kY?Qh= ,s5|esu$~^"sW=Lb {~NK@Q5lꝎڻ7FwThSP[:﯂ Vg6oٛ"~e,F+ڢ>]p^C}U"IWp}8Fg:ĐndybzG4[msٓ"kUH+ցe,  3NԼ2eEA Z?iGڄ:N&_Y'L`B-džf]-aw!?F"9 f+e8CK%X$LmӘ"Oz—Mp+)+ie1/FR "J YȘRͫZ;N T^vg2νpf[1k~+IeUayPW<wB*ß%%_1dǬ OaOk"KF%DռLF췯?|t,-jm{? |&$Ǡ& u8FxFz[76 skͭVx&cvTE˖rN_NYE>19E ,a5}ِ74G~^Ar͵?B-- n@iR}C/tRu`(Kk}A@c=<5P ).*RWό9cM? MvwB2, ^^.l49mq뻃h;]g]mfq[4-(ySs9=/gx{ZNV^9Q턿o@^{ˆ AU{S&8ie^"5iKU2ܿw*k%  *I>3y_ÊTr?9t`q ,;SgmAil)ڴ'b.<(vv0 Y1pJ=l^fR|:1A;i-ˋ 4:1% aְN>lҥPu]{V#F,~vUoH#]}e q52 1{)/SrY{xD)Gu`}+K,/2mZh8JhU7mslI[+`꺭}[?PX!NeVd)$La?`"PAY6P.S{ttkLr٠H]$_0=6f-,j'2M[ }T;Joۗx2dw>_yOulLrqoSⴾZ˹+g4.xӹ GEN9ʩIe)߹itڇ@zr3uJR>*.z/')S[HyRA\ũDmu :sNO}fgBOH.K>g( @ֺ6G*[6ūY%Rܕo)fpTI[xIkdTM ,ZVBsŐ*Y}aX%+A(0mR KK#tޭ%"Kں|@#{ݯ`h@I[qvu6Zei&{ 8NC|445rV[ނ-;+qmmf &ph|byND `Itw1vR7ҭw|F`ZI2؆ ^6aLFF }' 4gd|K#fKH)K])->cƸҩ endstream endobj 83 0 obj << /Length1 721 /Length2 9003 /Length3 0 /Length 9592 /Filter /FlateDecode >> stream xmwePݲ5 n,@pwa2$@.y=֭ӽzukRA vfv6%v^> '-beo'e  @fuƎF wpM`c3+[+'= *"I@,As+0 #, UȂ@N` he s1'S{;3irfG+ W-@I(. HK%vfEvglc@7o ;;0YX١7y;s{Ͽa3 r@C/ V6%m\ '?,c[+? y_,:oYdjk1EZߋ~Q3{;wdT&,mgjofegP?eUcog+Cl,Z}%!a`dsr}\S''EAhKɍ%yF c8V}fg$@l7  *8h4eKo0a2 =V/1m,_Uf+[ BCˉy ٦qc~0d-\OVKDK̬d,*WCܝBlh>`LʊCܫ^l0sT|5WQZNJMk@<;?řw <:#CڪyN.9)iNG.4(SX9*iLVGD(!_I.` )u|dpG`U8o"X7ɰ|'}KԝxCG2o벍_CV˗F2PhME)?|JS:ٿ=?Ǧsժmy{.,K\eoli?wEZqG%r˪ —cll^i$f"i>x^eo62}hi+Grw6(Hɻ`)IǍR:y"KDI;nZƂf: oR\Uzr4|oQˇ3DI:5 ]2zpe6Rs]J@^yC ( 9(jo(CP^XRKw*?XFbNI Gka,7fN\kŹ*s{,'3bDQpЙ&` ')* Y#Psm7vN,m6_γYomt 7XptW/' O圢iUSǁǬtv rNcfH+E[lUsSE_hYc8DإByCh{cZcG$Fc I@^o049f2IE(BbUjq[\-v,#QЭ,ǣ%hLN&pտFOŀTʖGDW/EJ%uUD.M"|ߊM9m9#[ +R_3$;OqoSG\AjOcaxgT:/e]f;A>y~7o#B}_j2^,~5-™>QgࡼPm|Y}|Ep# ՓV7,[+Eo>u{Li=3'L0OCpwTv:R%2?dDsIrN (Unk;3PieAFfs`5y~Dk um0܁|^Љ{@hTVtEW>A Ktub*hy8<f!j7KtGyvnn'q*c{FJ.F7͐J})$Z= s#~̛@wdpVMD"݃5`f`ӝk5MXl:y0\aVpr)ٜ>J9]S!wqYMmuO-i 0.Bp[bLP煡VwGq|lj(sdYXc^BQBu/:;>CZzP*JN`#@bZ0FωQ>M[ҏn\O2{B *)%ݯk@J5JcQS4]߸/Ϣ2 X A,faq`P."(\YYw"毄/ /8o_PݸjYH=B<"!Hb:N mc~fiN%"~Y m#yOd_Wslbl|@s\&z\ȵ~_;rr-&\6&An͕=sӖOYA=>"Zavrv%ވ3/Z)֍` *Uo0p1or!>*fZM@|ClBa)&ܒ5F ޭy`hڨ {TN0fAUv!I8{\c]5\h,h( r/+mwo\CG |0r9`LWlOA>RGش <;VU]+. V3鳲 l}mO>Q^nz RGi;[/|f5Ƅ40W5qN^7m\ c{jz"OYk 7D/0zy}Yպ0Hɓ#L+YS0W=,8h׉B |P"RNPX܉YMO~+(K+݉QI:]20oo 8D="ι#Ս6EuiH>(7yu"uSQisE3ƍ|`dgOd/;~r~d\ 6dnԝK(fZŠJKHr!džZ/@:av4,XlbbG0hFamRdӥ)l6;l/d 9aE9:./d|rT{JJ_>N$7|z`o)G49#dI"KI&X'->Uy]̜+6~ cF_?ƷI ys MHzz~h_)ҹs3V!:.Nn}nךu؞gݍhڕνè|OL7ܰA韶p]$ʸF&{?m*{w{Ch +rTDAM[ J &R͢N,zQ<1$0B&#<!j~D'Ѷ)S\b%NXQx8;Y_!e\rGdY2~ёL%wjrhR9Zq#Dhc[ѡ萘pu~"q&y/-6_-Q_E{fpX.?d]3rAw .Lgtfs~_b)!Αz~`C2TWk5̜lBƳkaeO˼4?λ]ZKb\֏åAzOqAtު"߼ oCcJEԢMo!e lt7,WUSq»)e2j]\:T_k=?.rƲ?m| j冖mdP,o6&vNgڷ o2(;_Z p1?2`3mkɥFʇ[d{'A 6[˽F83R'F9IYduﱆ֢/3t0^IU:uԲ߮LJߦKD6GKe5'%Ci[Fk[o4#TmLa#Zsڔ^.Qp![ML+<;ߒi;ü5@-OkM [FU\sɃu0B@!M^Wqcf۳.0R)" ~@sYG~(-lcp;-fO9! Pr q@Z]C9*/nln@鑼]CQEXL`ࠦD*q5d7[FxM( [|`/0/`z '?>S SPkȇ_,DlqC0~&T:X6ːAs2fwiS ;~TGe-0 t)ퟥaEĹIC{[ OS?r;l~A%Vh)-|O2R"•?>Uַ:t$Z5v4E7k~j/$z~хi^fWwxIYLdm6d#6$8VTltV4! 0W[l)ḯ{\աrY+{M B:NnkkP =I`z7H@L}$ɜ<;:6ZEq9hWB%NKt|ּ+! n&»p-yġ!n^qʭDj5{)YؠA(uv*ߋbeJ7 h0rx,*PX8(fP<՘fM}e*߾c::Kec])%Fq Y1ŏm^" $ViLLe~ b/3)4$^r@k<\-W^&p[ҌֆfJ&cxUtU|e%0#Pe{guΰp4zgU[>!o{t?9{[B53nUaqyC"e C"~+E xݨwqWR@0yjDM6JF'~ -G@sd;~r\QƦOrXCNnd5 vθtN4Ƥ1ػ]OjFkvք0є٦? `tI)DC]S{jzb ]QsMygW9>jҿ7Dfij+Z5Q$|;ʐ_\HLK#-f^io4^b r:vTᅪZ; ăGI ~ޕX !^~ _Mlj![x11-} _yU^!VÇ؍{E,{d) -|N Xɟnndؒp@D) = x}XoaxH]A='r1E8N\^ןF {<PPh!1v(Tⵚw֒#αߙ!eY}`[<39 pd_?q.2W`URXԒ n h3nwR۽%uZuQsb9Dk!?"yNk|)f- rm /J5Y23 zϰBaxPAO(}Gab/Z~*S0f'F_ 8Xo"@QϏ~Qi^xhܡ[ vۼ j4̚F=tבWm~0;\}]eNUyyXݭ"N;4"M|~rqd>s!Szm"ro^Cxvob ng+D6RJiǍ3{H6+.\r=_MkAK#Eʫ]ĺsd6W v+OQ?|R{O@ǧu߈9P{[fS@l/ JKb0K- }DoV>FS$|s(ۀ {خʂH F’a }l\G\ 'g\Kz-]Yp)Uez. endstream endobj 85 0 obj << /Length1 737 /Length2 28231 /Length3 0 /Length 28741 /Filter /FlateDecode >> stream xl&ݲ6ڶ~۶m۶m6m۶gڶm~{s;FET$We>U+=#7@E\EHCF&lfj`/jj 039̌L0dG/g+ KW տu[#S+;+g%]ōٍ'33 %%/WHٛ9݌mLV&f.fTsgտbrwfήf`SWW0MۻpcmfhGei=C01LL\fV0 M `H053V @)`j s05s {gITl]lBP-?b+q+O3SE+wuv3X?u33rfOMmg2Jki+_C[-fo`jeoPq[#g[hdn03?^HvavcbgбscbdppW&nf.?/2343Y[v0 h +6TYf^A458¹W)ß 2۽ܑo%6J0;7(Ro絔¿n]1RLD&Z"_:ir>d XÊApՅG{ *= ,o8}ZY˰kc׽5]2lˢ +k-9I|llѭpm`+=MCݧy"^@9|[nȜOj^脭'>֪ni ] @i my1b`vACq=u%WY AI߫(VdzI1)gE.|;dʙE`A'p"p,@  I 7f\ݭ.li"V,Y->BlB)+M`d ~tȒ 4QgUc5|_^U#)`urk@e #SNve4 gX2-_8]XG˹w[v:U$2JQK:\ћu*Cx#V4O]A'uUmzrli)Nl!F"٪ 4RR2u`sWθNm#yd",&$#jH趚i8\eB.\.n#ĔN&ћB?kg}8A.4D30Er.Sj^ws)%~\E-!-/YŭT_'MƵPN2~i@lbV8ɴu9>շQ}+hq'$ UvWSh~;Vna $Y_!'S`H xls0ˍr(XLcXU2 ҋdǂftw9Ch)^jpH_Tؘ T`> ˭'Nvܭm ^o38bB?,Q$Z۔hȉ( wih霪2N@2=`;i?5,ةh\wzVg -M ob*uC[9|ndݶGb1z)v5pǾe}pPmYrôZD`V΀C>1ޏɼ$pKcyd/U`VCO4lTbQ(ә" P Pl$՗*m)1/2(I=|ɦ|wŖ.v,@D=Gb׻19(3JD r+ra,JE#| 7h=|{c$g>:% J//wUO;}7܊ hGX%@9q!gRvKz9`ysR:>W$`J:w3?<e!!GFhQgeKI# +R gK$$a!d. 7d3=}ęr]?CMCI)OlYx#a veW4g@sFB񪶦{|B-),[_W޼]s¯PP#`ٹϷ h+Dx7L.ĉCTEf>ZX*z]o L ԰%!{9 ~rXkE>/(qb‘B =㒍X${ "OU|ͤ>CT\:XQBn)Bn3ORo@9à^[ lqF ծYUwhpx;d|!MY-Ab ~b~dRX̜ɈCnw~`n&3Uh"$BQL2ڨckXaS%wۋ, ^ˣ$cUEv {i՛.3W<67?mBUOgymGe'clG1kњQ\ld"*"Á۷=^1JhxK U#q<6R/M)ӱt4>R4Gho'XT4Kۛz.Xs?g렲Q"aEh& }xzP;5a rG\1&f M~N׸sg>寂]]zà1gpR˱"b'N0Qa `u8`01GɮW)2&+ ;ug+|m ΐF,| ,d芾ir09.1|]iA_uR7cfDU[=ս[1Ms%o pH -0RDjv e&G2"g*@ໞݴwcPъ;틔rz 1rf+7o"HX9~=x&&w>F`|l[eQxe>R븂[N!;80% Ҍ \3LͰC'3|:acu)%@6ƇkvƲ'{'C]3&h[uC?w0AT=/0es.0fLc׍x4g$6r';+G- _рQa;y$2QXQ;QqpJ)8`3٤֔ [?LB']D)i1>lM zJN;V]nw쀬j}Vj̽pUǕ.P ‹[4<7CKQ$EN T7:brxol a IC/Өw>d/yrEawMzBKKyC,Rϥm"&Mbun7Enٴ?$餫q[BLszo B34m D"-\84ZFmb,5w^4*QN`M䤞RGϩ)bp:cZWJ&5 5Rc園z{ x ]( xmz0_t/|)eXwnf:]Eg̪+{ 7:_?(%(%28{CY? 9]0jI (]j4f߫%;X$Ʊ|" ܨ=4S`"USqⷙs5W15,Պ$ tv~V=ks 2bk'( @`luwA{+Bkp\QJcwXVS[#)$(rz , }JdbRɒ?˕zOu6DV+5zgrdr֤4|rLw|~4*wj;@4E#,SӳW@l &@- @"dAOwtb/P'' {a<- ]le_\Y%rx1bBPXR<C$@3^2iKY=qr4=^DѥM}G[lξ&EsMv쳑V UcJmQǙwU~/ ;ȒXCsmq2 b-3ξ< +L2nCXĚe'0ĞfIʾb$پt+= ƻ7]Vm N<>-~:͎x[ ̆S#5ﱿWR';- Qrکd<" iqNaDW$:7_T)qS/ yoE@Xc(4`4 }AC֧[acȇ 3+oN(%.YH3ϮѬ_"rW1K*qrrQB?hLZL)E&4~1&?n]{ȁgKԼuuHN" rAZ(Z!4yq*TR Áڛe2=pYWw+T4]aKWAsJChm>ͨ) `@J$4|>c<[SQW^TN *^d* ˼d=*R򬄤®b@/yؚCPįbv0ܼ5/V߀+EU+j(/\?\8bϾ\ hG \ IޛVhZo#?{bz Q~# p(OEP2OxWC) aXMS߽0Sލj+6B[MwCl;m ]J >;j)w%=`;JŶ)BڎΝFzsVHF >Kl wZñ n9%6A?̀|~&h*gq|OKޮJ-44m:Tyg[))wL93&$)T:VGAziVo.ZhD\, X]c-Q 6ȒEb;wN(E06tsrPqzSFmlᨠa$nkPyr,|cs||GlcJD_/85cƋ@Kr!sP)j)l{ȵD 'B:N mys j-E(¶?GPNp΃@;ߌFXK ^]up6\;Q_9p/T71,DHvm)+ 'TRg|=E}ax@'FZ%qhB&3GOL2r-~,eFT6ʂ!l$faYac61a(*ea2-8#U&hy]\Iq~C$;D#( xbLw(8,yi^<[' $٣hЇQ \V)43.1)(\=SB!3P0@SOxEPKOյ |[ >ccϠv7rO#S$!+Z0;SwBSaE75gmhph&7%Igʼ!Ng_Y^fy`wmm/Xg*A9lo[ =љ~FJ vM6N.bd! Z ,-6o Wė=q;JrIWҶΰCVp\?=4؏=~<98i̿4U 50Ȅb]L_#p$ZkQa<%~/Mm[5DFGҿj߇zlƉD^5uk B!#]l MuК!a( ?3} ,D ,IYI~p~[Ϙ>\9 oy"O DHB>9=eγxQ > ,£57MۡR}'cL*GmÔLO:nHɔmbWtS%{(Ljŕ' J`*NAHrQ]qY . !TTHp'҂2_l2j[ü䣩3<|PaǮ[U㡑΃D ! u+P*u׆5 Yuu֢}z|$^!wC:lϰ%˹ TAB1`ƃ%!2ڲdpLjwtk u׏\bhF-~O'+.VɦM"jW^JzJѵ+ ~N;p b1-3a5 I'/wfZEl||x9lq[lt>E;'q : 9W=Jli\F둤j\ Љ_/18wy8C+Sc$.8L*= m2<'+)ߧ 䳚Æu~ϑ@_LwPLcsPqdH0-I9nS5]F.&㫋C)׻Ak,\Uba8TkK0o9<&Hs PtM3f na kbWQË3+j{~국5ې .ԒRϭ஝c\/6N*Uu4)k jψ >hp!'ˈ;2dR _*!yZtPp>C~Rw5 !X#.<+Qk\_YJV>/_CQW9&um/vNlQ '$Nj^Fk%<^6d6ed"cPVȃ D1uWN*Kɰ|Xxaqb JxXKjj`j2I Tfܘ|!'|c*?`~kShɴ v[NiT3KgTQRwPډ)Z^vU*JnzHuj4 ALz4UwWWb . g E5򴕇E_JA>Qlmol#[/zipΕAT0k2Ѧרff.D.ǘnj3??5ZsH'a9|Yb~M+Â⟇]NQ߾_ qkH!e_/6a 6/Z:mӧ h9 ( rSZKЏƯX=!YrQKc٠mEn U [+2MLj}Oԉ1!/z 3R@a-襏52PCo0A QuaD')#7צlՑ xs*\3<e@҇ӖT;zP(" Ħr0~5\s'FPb:דy6@pZ4h IK6ؙܝڕXswR1,WL&.\tjUxFj|9y/o}zf9| )5xx8hiTw0mm!|iKvWJ2O|ֵk(Kno5No%g 眚98ZE`~ƯrwWppAe+_bl>FihŘ)#l+.M{)\CS#X3ftY˗NeQ:( S ӷ$JkXB <)Wd%~Kwx2g:4L?we@._M$tlX:6 s:͗՟zy#,z<~'̅D^,[,tHALvv/ԟO" #Wfƃ=X1em􇱮XwҗtИYk=Q=TƏXr1JF'l@z9&o (>}fafR?,~;Cz~1R| kw h@Qk&s\%Ȗ>H?&2>7Xn8d+j˳nQ3 67m~N)Q@w ~/'|;R)p ]DkxxkYd L.M>#ۮ;̅FI6gY88-yCVw5 CyT -3J-9'$.> t$y-~I]?y1 1'0Vcyde&5+xhI6!},7?x(n9|:!e(^K"\iIA*8351$*u 4ƨ p<$%NDDbBd.#J_|&~_oWO.JLupX\%<΂ͺ >}S"8ŞSsgIlt-#r,ɕBmTI\?=y-+u 0 "$zQgz\IsxV'fxz^d()6Al{cm ':+~np|; wR;߀&{oiUIQ`@j@GG},(٢uWhJNM 7 s58dT*ƜF%/&xcIrD<% vnrjy:O+Q;G9T%Hmk0gZo$YM)= 94̑;6"]n$F㮐vӨZޓ!e!-fP-;宨,څggggw _gGX _X]+!~LK2+7wjs}<?v5NefȀ|#2kF9Tv#AƿQg1j }VÐ$Sm,!3nĄ/}0ZD4([hד8p7o5GrZʞ rgG#' +>~+,tmi&^m}kPk/LDۘȀ̗^\{u,&z`{Ƕn"ԃ^gIT|&J3G]JChUVf euu&S9F3JAdte۠MJNxqM7bCĮ4.}qE(Ct<^: J .QFTwAZw٨y@rqGdɖȡ0?mnYAA=BUB-n^_ʧ0ZBw0[qΗ؇\laDbԹ>Ŋ]u>qm Vk> -TQo ^SN17N-<3.pqBTy#?Gr˚ P%gD3njDމ>ns--ZF56H־{/r: @=^ 1S Bύ 6-vz\Ws,`6Fa l{@ߟ`؝%icYk0`uWݘ\ŎWYY+\p+YI.Mjsr۲C}D/ůF 7gۋosލmf`%7>u&0K#Y6|'Pl8 )ze#_m=?=PE5k.È ̳vTXh2 Od+8g] 7湈ia]Mh?"8\]"YwmP11}"V7^_2:\rAcQoAHw+v;idy?keX GtQ/xb YmeX [?%%7cSawD6XG#lǚU%'yddX^Ϊ7_KJ"2\;CvOqT($G`++ܛf`trbP zPVu3Tyw8Ư(CեDMqׯNn_5'|ƪ)R;^PPv=h)y {O!+)qɁF Ǐ:rwN&uyZC4%PڼL1ΘgY_&5Zz ,g_R-#y)@X'/)4>AA,=@ !%6sTsy,Ru1t W9l bSsBo\|pGX!ʏk0:M7ˋ?NV/'JH0R{[i^qBp`Kp_4!m~Lq zkR19Rifr}$ =N*Jo$EɈrD (]ƿJJO8iު jsS,".: |D4EWk4F=bqB4 `PSߍւ /$yqaeb@QtPkN ZP֢5CRCs/@W%\3a]ɕDȳG|wOL[f:+,7suʿfXq} X=.꿏Qt]j% Ztx#lT<~9uX6V_m9$6"p4d(6![RO{aV+ZnG;zՙx@e-EUۓw7YEP L-K$U(IRպ93AON{Jt^  Έi1oIbc< Tc}Tj\]]ÂDqJa)ƫR P՞h" #NY4mNWSP*r}Lrԅh2dFG3|SqYL_ӺX}󈋬֑i :K\1Ʃ}aß-% qۍ>(Y$44s]7ͬLE3[if'saUs@8AH T˫]C7QƼ ڞx d\>&:1.|8."!xH#>SV/P$!YMK-gFZT8B~{OanpE~}&ujHXuTg&RU4+朝7?0\ sԓFgʕA3{ %^ºj"v:!p~֊-qnCCS]ˉ鬮؊/+y7%&&<2}➘nkOn047k+Atk2|c.fW]AĒ}%ݪ7\MYm0Fvr9B*N iqElnL +.Pr$%%՟n?0.{_=\>|Ls C6T_~3 B=;~Tb,:sT~,ͪ/É25Yw-pƔYac'uXf542CAٹMna%zLEA lZ VPlbӾ9iyʼnޞ`"Op*`+m1>"UY5Tm'NAnΪt? HNyV ) fAc\U^ .T3 o mĖ.[CuR17mP<^ZX*yt,&25@m50l}qOVʵXJmo :s8K+Qe_k2X[+= wπzT|Kffjrp_$Zc,(.hfIԗ>Vk ­F+(N:O| MZgkЎcx 礩TR J,<"15@}/J]Z_hLzJ=LsP,uhq/l*>WP6lL fyteX>;!N+>*ݎfqHZG?.§& lL~2(e&[ tzq~sqV`) _,7Kbobsc5-9)6JGgӞ~MՌ,:Sd{mҗ_4 ybudxzb.[fAhWox bs=evK9} 5g0]v(Dc۶m۶m۶m۶mɋmӳ: y.|XyWju كqkPI\tA_GMו6HVN-n#@i8" "v>nf?!]!a#^Ր #lIWk.Av̦<ǻ/7'ZVH!O ޯGi|iNK ;n`|~[yN=Uy%WS ۂrD֓N>^B ҈Q#`ſ Z|v!t5O駟[TߴxPplFBrVn6а Bk_zxͽKV1I]gzWN\~0s?@SUߪ ՃW U0%bY/aUZ]nfTXg w|> -)9RZ]s}~TوR78P#؁_Z"LɄ"Fۈ*x6S(e^/`a7Jȫ*)L s" $7iOa7M*>EHd?)QzQjS.bhU H6F_^e4`~z`r93rŪ링oW'5u~tulyxȭ٧Q(lsH`?~RaIU$g@G\t3v:$JXOar,3V0>q{`pw$ǫ:u(cGtIҴ (*rD6Q#Ӗ(TIA)mr2}sI=-5䩤,v|K1@Yd3hEWG" u=@-bq˨~sǪ09]@:v:me׺Lj2zcB \W@Dݨh(kЄd=g}skA^lcDJ}Cf VJ-ףjRTBxˤS~lN pbNE\ "LH[XPha01)s/ eN< D>|xm3 Hx`"6vgAP+DR| O^x*% =rp#[^Q5KhşhT|WaS>v@^ A|\Ap '-с T1:UK0 9%ẀـÑ*(jm>!{ar<[h;~_r@'fUozXp`Ȕ=QM26;ˤ=tE)~sw7}>;DAgzȀ07o&t$"Y&z S贯>.L(J|8ql"%O\< Q 9HQJnA@zCx rh+=9{7g*!zTuٚ.d 1XpIC -XhuGPRкxY6z;4PrߌRn;amq9ME:!=ߘ6l#G'hcSll_L(4ҁN+ROIGFQA[!4ڇT.ꎾڞCƇ=G-\+9#8Z_jBޡ#8<<&y5w89Iy.5G|,{uǖ 1J4Eb- cY>p ;Ol@m@Z8k H>lN,'|7y(\ӄwQ4%w:ĝېy u\ju|4i[bvDY|=[4plFN-PܿZ^Վ _HcMIy޸. ~wζ6vst0u4Y:]1!sTr-k1I Gj$u&m-wkrѺ}pAsVI GI uC9 ڋ|%<`s J:cbԾw9⼡1 0%=7@O̳N4ofgbP)8W[ITVhw\8-رX+HO < mM*q4PXeTǵwB|.{UUd`Ltѻ5 pAT'- 2.t01}BL%N,t{;D,sgwX"L[Pč"̩fzf n[)4ޖ C]s%o@*kX 7γDF4Xŭ)ئJG+~iZF6^1gTj1x߁Fa. tl&fADGy[7!Qpx )&?/ ⯺6isQ\09bcXse|Rp .aj5[2 ;==-w2(Ŷ[ 殞kƶ {<0 "MLKb"4fU;OFۅ_hԦz7\1Dc{_,)J񚂋`\`!?OnπRLd!d{t3?;s+}tyfqUOu6^f ׇmɷA\,Y.1#ëÛg]7rq2fň,ǯ跳B (5ooTK0W'ɇpXfd࡫4x1 Al*E? 'wONЇl`{ow?ܨcxvRhaT3l#=,iu3[:o(,ã6NcQI 1'T3!iQ 5 ,fPq;9.,84\Yiv`h)i  mWw;:e_3_Hjvy@6+DF1{6?*l٭Z!LO({oϛYbZ&:|~aڀ$TvΕed(,k_+XE7x>ce<gʎ2)g7SЂʉrFUx읭,R07I"ι-޹[4+H-/-1ݴaT| 11׵}/M K=i*Tl]tE~}&}q8c=̻yj[4ˈJ*8/, lHa'7 x,KaZKgYPA>["&x4#ht\R'R]}"}*@ibqҍjYB(?M0y:|O1?=;Pxw}}o8I軖("I~.6^ΗÊ fhnv[epLJHjhH$[Q4إѺmyw.?'L@kߗR%Z`QG&oM5/8A=FуxߕLP@pWJL( ;&V)P&?j<۪:cy3ןC.%O4Mk(VӀJ\sW>y0b3& ƛ'-s"%n6T x ðb(Ō&aC6^p&ZJ72FLF+d1ݴK`^o|CC:hS,^Nɾ'Z8h~NJT|^v] }@dp!yTNM|cܚfNYYf_:I2.9l#8RbnN/p?[j'9+=YjpV`)L4F!&Tf4 SJg("#.͉nNnK= 88wS?͹Z7C<"4>14vм<'3mrNAU&[u;.,(dLR|bK` 'f3SH5|rJ@*)((Ip nlJ>buvg8Bķ7$֛3Pp&0se_ gj'#d bZߓg2:kv$Ȫ a5X jp%tL'LT2HrPbY<+1N™ U2SrH>y^G՘ar=A esN>dY>pWAPOYlclHR]!D1n"H qYGr-7p<[Fqܠ̒ګ\VV Fշ*ӥ|ccJ?{Br0P|n!k?K?xc?3|ݍO7be0ZC6V؄n_ۿWǐ^.&]As[>.ʯi޻9r HI 5ٻ \<(W:ʳӾxXA"(4ʰYCYLC40|Px_[5hA&1z8d4 ?-Nk?%770**K$)E;yfc(MPaHS*ɬuRW IL.\ki{wX_GL{l.HSJ(Eت ;ԸyMX6Jv^@"4!)KǪsDV,C{`00 n\u |w[3M( w,ɶ6|4f`}OrЗ Y1I TgثpE* T`6jNBq;@f?YxeA8]1&J^,9fXOn`?Vo]p녤,eKvڗڛ3r6\5+ ."sv8#aLgq'W݊_{$$LU'G!%#cq] 4P[t! 3h zūp:r6Kss J}  \Y CU8K^wO㽺됹U~[mlx9M(ibD5Yt7Q svMh`".AƛBy ΄tZ#&qKMQhI"l`?ĩd=#yJBwHCF %'m+s}j#zšikV˜}{3#Xn5s~uUf No @Z.ݚGECQíȵ8ŌKnY?A9>Z6(++}ǹ!E_a*e, tQ0BA[I꫟ە;!WRJw}-#f :2CnG?lJMlSVzf+\2 _⾽s[\$#,#7=)KYG`IYø$yt _@7 'L4P;Z*s&8~yB#\@$k@ 5]Ϸ_)#D2>e/Lo &t#v&odE/H;,G+\/.`~O%15S۲l=Z:}v.nMPNH)@sD]k ")cߝ(3l3_n=e >& xP gH"_ZHLx8Sdf,o'u@'?jX,@Nj9|G45~\"A#M(nヲz^C'BP",A W>dzs_?cQԈ6{q&h=0R =4!S#ѩxk fZ%#44MTނ_+Wk+- /YS4_|uiQ7Fu%AǟKQ/}$2!rjX Q{2hx)wj|¼ӻ8)95KR4eS<Ħ!xPH1~}FN*`s4'IP}̦+=94ΤW􊂵Vf WjpJ|}!Oɛ|durg]>Dpj-G3vUC/É'/ dnǕuh Թ`aGٞ(jg5fu`@I"#C#?-2ePf M#D&U4%[qeߣߧ00PBa>y ]g8bXt"e骠v#ŋ0e[c]&Ax1U^ Ms..ziP4>F{'{1el7.5#|l*#ܽ'^6?h0A2+0@I &`3*@_O­!{LdhY1jB _zF߸R<8w/| "ӂvCJ #7xۼk102~AnU,} M\i 7 8rХnn(F-+5b{[dr$W*wdy{IZF̹W}]* Ž1c! %@3{n䛙[Gn<~#bP~alf}M9Ŷ\KhNq#.13&<,xZ0lH)B;=s 8 Qe2N'aw*i˩(!vC%:Yϑ(|˯a7 fb"A}R]N$s8δȌK:(CE.H`]£ ( c!o9&Xfx6l&u{?D7j >b9|E9T}"ҵc-K7xNl dr{^uDmH|R-rTX cHԂ%vo]PրA:k-אU%W ꌮ/TDɮ7AΠ$fd{֠orXNj^2K 2tY I7옛M:%&= N#Dp6/m GŸl[7j2۔;Ea-Dmwv5@J-*>cer .¨/7MJm=ڢil{UWXmQ(>5?ΉQCY QpFGw5[U a2o*asbr+Ko,q;ʗ]U 0@Q.}$pLDIT9q!e%LRT`B&Cd;UkY$nukX=pgg%s+ + x/7ѻUђ{%ILl(IC980*=Fr@;_fXyPYhlpo f 6s~]WޜtڋSAe:S="G7kFhܴԪ c(o7}3B[[S*$0ѷg+[v*ԗ㨎nF^_U5I})lЧCsLGXN P sFjl$znsBE.[!?݁RكKR-x}mJ3_ʿW c=V_\"TX?Yl 8YWM a7,s!'AdkDqm6>0Ex{&M( {۩T܁jn^}6;a+4#(.ks4NipdGQ2r7W4"w~d1mi8/>nᴍ삺IozĖ•k" biW- 6 q{QĜ+w ݤΈ{+Is% a[Xذrf5/(䳜uAE{'u8^0vQsɯkȚ h(w 8ox!f[.!Aڛ/qQ qS'R7f< 7I.9W^$+(#A)< 2WfLw~: W[4'>&g0PPݥI!7.dDcR bتL'_9|g({Q:xL}3J tY+1V  c MEo+>q_TFkD=@rnvٓUNxb^zId! bkᕻBurvԹ&xZ ژ+ԍ|rg,|FgnHdtSHZez+n󓇳RfLX`9Ǿ>,6Nr"(bA4ܹf6LJ'}/TUm&xܕP^nٴ !۔^5`P`DhD>/Rڹ-̹To{xBzHq!/䮟cg(1&-s`6WqOW+|c8O'+JަJ8hh#:^ϙkBU\I bDvи=!ٛ)U͈7?ʔrPc=P_`FuŀPR4ǹ<bGvP pPMLl SM5!D ?DI;fVH I JwG8af<+1&xG8hȶS-3jM!$k[*nuB?˩V,Ue*.z.Y?[c^fy/٘154ZV}~v5lʻIĢ1.M PH_@ e1E}kd}ri% 6o;r`2Cbz9[%]WӨr9tU_Yͻ&/fδ9kh&$!$g+f= y?Ub˘AP{zЀLK @j&/6~"L%Zqצ 2(b WR>D 6-7CuP\xrV_AQڮ endstream endobj 87 0 obj << /Length1 725 /Length2 32844 /Length3 0 /Length 33335 /Filter /FlateDecode >> stream xl{cpͶmd۶m۶۶۶m+vr=֮sY]۹x:221pTT t0N.v".\uS C wt4pPSP14tػY[xܜ]\IR65X,mL r q9U @ ciljlJ 0w[ۙX&gs3ur-@VTEPL^N *L" 03HnOTGpdc?N`&.#SsK;Mo>?RLLv35P::dMLý? 5I3>,,=LM,]fuM]5+Sʿ֣TєO-jglobigPvOC'V0w/(e ],= t" =i8l Ffv3kdj/511wUZKhh\%8܌* #tϭ6吅5 v;lծ}3a)T4a k qob[} mĝKzKVEc/8cAyG?8N⣝8.9r7u5EH:HX~-)EaEQVADʑS>Dd!-֎?,_.O*ȸ'^G{n/3:䎑.3;R D0lGޣ\.2kTx's [DUQmI 7NX6BJ.&rlv`&yvp2gcgmmRp@cz vq 3ά)c–̙MނIl*f `iא$.+R#<+F<&26K4<+T5B$CNYst}wL B]*X3Xe+(U Uṕqbٿܺ[f0{rorV- k/3Cd݃[ ?Ɏg>&Oce`'[wJzkt~OHݤ`U/Bт8PlĨ"5TYt, 4:awI"ç9=\w I"91޺ٗRH"+(R+Ȝ~ u&^z^!s}q kJ/Qls6B*5=isNdj 7w4?f ,7JN"ǧ A/jl _&.@:Y<0&*V(Qo<ѧ`ArR?'liTi>|71Nii&j5p?rD_ȷ\O m_[;MmvdsjZN//eLP\{]gV]D &tvl4-* om#y/HxQVKU B=B. 8j8g ^t#kp|>/Lgo4(m $5Ӯ奜/]'nJv'Bxq 3;q *Llc 2 1k]y}=Gx OH2B2M'$6I3XOz]Sh{bqя!GX@xT˔Md=ZkG Aߊ 7P&2^ RלˇbA8݃g Өm`.҈T1nB-IĽ 8Q*0(;mBpa Db* r?~d54T}xuѿlj'+|D<r$5hRrjt"=p7*N/r!W,2q/A7ݫYA zOj_L.e3z,)ZþɝίψxRS.Aj- >?: [OB˯oٵ~zaNKչ#ftGXhO"W3}SOz`JF̵8 K u{,{jI3GQ`}|'~#AVC]m8߁G-*:X\ ŗ~IWC;eGvS:-\wfJ&uLճVɗ TLfՔ#_;2OgcJ\)3cV/`?I.j5dg-?]V\'/埽^4.\:8=!7iOG)Qx⮯cJd CC [\:\ l0QB"k/, "Ӽ3V?*.U80G디3E Hbʿ32`kP%;b9? z"M4'm$69V^<'䧧1!W݇_w؀S(MwkyQF,J]v:KKɵ "njm;?;%\z⥥~ MRHaM]f.t+-UWقsyƨXd#6*nij +ICZ0D6^/L#Z`*y^Mf)GmeSYh_'8_jçꪵ"8֍Nʙ+$UWhtg(ǫ8Bp=E|1U-[P/\R8FV],W *OBE^zs2#2eiF\!uN_k\@ 1 "8Yl!,BeHpJ~KM r:QNO [/?yR7R>Tܗ:Ga9Ρj+Jf~ufW-3M/a:IuJ:דQ_gotC`rPqT cA9>5z+.iOUkHMֽ @ceI6ԧ(Nf9ZbpH]4/k>JBl>wL7}<='-lQBw&ьCQ{IӇA}6NXu+~-%8[\܉P<7 FZ!9GT/#LC ɉ+݅{0[޲Wܬشedb؈dRAlH i ͕ZMV2.!sksqsE Ӽc=,mqTzη^C"*oy[R$ 0Ew ɣ&չ Nj4ο¢$kS'~شP&|aͧ#A§wv'춞'%q z8<ۗ;МON=fOšnƜↃWb^-𲺒2&I:T`6\/(Fn"!sd-&Faĺ8DEFY8k&)7ꋊB+Hyu%p`rZn5BBEn_l-2;K\B2&Evfx/+0~(:{1F|x4{fҤ_*`6R5 1}(;9ՂvfUY˳Ѥz렕M5:\:=guJ{x|ʏOZBgVq܋kLDUy52CN=n;[GT`si8LM3.bpgq}mNVb^8ثZ݊^2ixg /UXh[/e(Q&˷eY#O;u@tmL4t3k~^Umw0`dO R z_Ͳ[NA2אc T.a_ q X1: 0KOG cs5jtߕ/}.뻙e9)2bbDxPt^֊io|g8*2J /2wiuJ(< -&wƼ?IY2k?'nf^;4EN=ʇX RGR8E1[I}0J"wjD,͈_ὡUcˆ*(Gu\60 ZT$!aK>5czgJD0; 12zá=Jt6:HUH½+: -Eb#L*;5[CA>wTUwTREi}[侂 <H# , k^_,^ X;Ro 3ՒLFg3!pG쒧kϯ#~$@0)BEq|"Pb70/g:LK3*j0[îu.^,JJk-4ql bd[t.>b5Q1駂tau?fy'_;\z雛Ig,,iE!Sg7X[ "ʜ=dB]ej Sy3z4f\ i!-`ߐ7Ihm0|;[NܹWC?(Gx3b[ys$2\zyBR{U@zy<|+B]!|s˘/}fb{:Bi*/ Z!vIk:AP?3ʍb`5LYO埏$ܫGM6 M<2@` D1GJ-j3pd/RMFUv6l_1&=HU|Mښe_W489(r(s`; TH6Sx[:sʑ٠GY |% OeqUOK U0B}jrTg*J,܉hC=={WH{ࡁF\_&3xc4A=3rB7|W{zGRkj샣 R{q۞`Zt?L), .$6zU' 53k#HgmosSE:i{+T<:-4&:2 "Sa!-SF>#"ע9|}Es^(a;S˂bb*#fKZFFuc-έR2q.Ul/דϮى6m߂/,~#>kCM'= /[>ߧScE3!ўSpXl LŌP3Upz9T7 4i3L1- h7>RgnaO{t]){wR{=Ǡ(~!-R|$֍ߡDH95Vs`_ ۷6)<SŤk .V'LΒ9`Ab֕aNdei-bUXoQjeQ:=RXJ9dj`e+ felF pxIc)[Lqsvpy7 ts>;.)&wR)<$_Y`F$.Τv 6FæRN0n&t+;K~B `7?B7? ^a{wB 8q`EhF(97&U*>EJ~S- C~ps;LC*}zdnA$#Dhkc6EAx6etDzzwQx% 8myZK)/s5ŏ I?K-PBZz h@AϢ2X7|TDTy5 J ޓG=R0C$|13ޡ͘ui %Z/2Lz*$0 oY5fs{C6ݘ =2>BfB>mOJA8)&O'3a: "P197N\L?귱?cCUzeқ'a׼﹜6 ͦ >l]e=0S x`[@[z|/\4 G6+aZtk>tb9?gKp3dd |I Q3UMbȖrbEveS Kj1„@ZÒQ.hUZ̬i34)HoiYͿ-T*rUh(V/[$8^)H ɜ_D;͒cdHĎ'k#GeW-/D2Sے(VWÊ/A=F{_̶_س#%˲Pz W9?ߪ_:}EveMkUBT`~l a Uc4ÄZX6 8r(x\&,];, Lh2GF$I8UGj%.:\oIZ`)Ê!Ӑf7ۅP7]%yjâSӹ7-B47E )>Ȗt~*bi"Ss E!jk6髉P9wQ&cPB;kI[;d#/ H ^7H)W*9-zOaQvxV8Oj9 'v³~jFӉȹjX~iL9s晅0X/ plH 5@ })51GڦƎ~!v8̏-Ar9ջaiȠ s P>]@ӥ9;;P!{ )c&vrU iQ-e Y:#r*sDW## y1 ~G?'J@  w$J{C*;e@"&JÔ hɌfJF[mFK/Rc3J'cI?)֢܏Fdִl2|L޴/PgOžuQ +ڳ:&9mJU'@s33'ڪkr7?wC g"ytHG>)7l5sX(:Zټx6o?/<[mҏT`Izc274zJG O8ksheVYD"EcONLYK<ݕ]xw90#>/Go*W6a;+gںL&|iX6WS.c\{^w6jyO%.. Q-@Jn{ʌAEȩeOV]]+/KMRZe9117P!X H1 @,n>DҠ8.P᤾oNk9'{ȟ5:Oqp$]Nw<կ\xm<.i(pnm(2^=Am."qۺ&Uolw܄jGe.oZ4rt^m+T/nDm`2eY>L%d*I]ZŎ`o"%!UX!؂dsLjyZÇX]'،k VhR?Hii"g`Oq05yw_b9eUô?m!}7Dl 6"iJtJ6H|j5 w7k(` _Ê1)k [ÃnU}/$>ֲfJܛ6pMpMTQcC_4,ZYK8D?qne93g̳!3X6tP7Hd^Ƃ5!4rSO6ԮHo!mIvd&4,vRL)(MDCc>K O#uud+Ɲjr&vռҕQM.ltF+ۆ߹/D޼2ܞ@DlQPPnt@o@^2u|.9- Y?#<APeEe:CC_gkdݼkH>r:sך5"4v\YeEasmꨉ)JD`Uxmʣ7CIwHAx2+ !0,;nW<+`tؗta>t^f sO[FD,bZ]~ԔO0ؐCm]G'=\~ z$LaS{0+`z.OmѮAF GR hDEMY*@8[{ZVhB/QctײWEڲLoL涠4 h}npٗ8' RfAGL'U470*aSb4Ր9MT , - jgWP"+n> ȧ0J`ἧD0aRP'}XnS3C [;rF'"Ժ>zdܟ5 ;Gg0_3P-y72H]{>*H}?i=u2XMUAE0sx{ 1qC1~e l%r+3kyy@R <&<_>XdI)O8#\2$Y]p FBf"Ϧq&Bʭ:C#pgNڅY( "BozY}͑ +`lMJHkP>^0\Zܤ^LJVC3c'yکyw0e[&]~z2+\-w`EڍSh`$Լ¼0l9J;!: 1E}Aٴ۳Wm@\Lv\,'sOD3T9Yq-Cז!+{F&>ҋN!X(>Ba`Z _k\^[}L*SY JlYWy)ό> \?`Ҁq7!܅Ξ@. H!#bISN6PO|S"@lUFK>ٌVṗ\DWd(&=ae.<*gՙ}m~MZzP+lԻޒsѿ07[q'4F?WV&zs]T# Xa6_#Nl{ѿEV8B F’MowϯtB-Pnx9M@M $sfBTzҮRRl7c*"1ɁiM_#ǐ~w{-LvvIpێF[;-0Z -&5%LJl$H^[0OcEpj`= otȄYjJh%{ oPY1q&{@|dr!IF7OLl>B"u}M\yQH4 A$Bgglb?;-& اN}iAM$2FQ ;V13e,Y1WՀt;cRdv@&BG,ӎv8m{{U:!A-)^P(1N5`l.B/`T@̒xQCRW@~41`LZk!0&qdzD˂ 1bu4st ?s>ƃp0` $-,3!W?P?r>uک$S; Bv#^R=i%#{^?O>ʀ :յ`d1q݈;ADKAt8뗵0k$K"2:]Lhhiʘ/jt2﷌ms?N_Z$< EeR|%{Y%AqÇ.,ZcLª o)mi/XnLO{ TL-H\V}) ڠlGV'x/hrC\nu|h-0hN T HV)ݠ,^ -z?0>"BtxN ]KNag {}qkh|kjsUŽbPȍlݚnjE)]aG9cOyL5P*]nM]h덱k@bqhѨ|h i ;R1j47[K[uҹaueH9,# O_D g@$TVIg@(euWo[jv97_g !5ӘX:Ocli y[@4eSߖ$7f-|u Cmj ՔEM.ѕ I@7?Abd:x_C$< 0B"!iJ RwiB2WπYPp Nޯ\.6ޞߔ-\6)1䭢x 1 aBik8udiÜ_i6j <2Drc% 0*YͫہhB227UA+)] lQͶ\5xlc Sh) -\'tdIbCۂaVlЋyy*1"!lC} gKeKݛXFG>VV =0eq`LBL&%ϣ$WV9B7o|f˦ 3qC4I"-k)Rw TˠO2baU  QvB^2'ay:'_WrC> 2VW$A;5U m_ Y0S W"{D' ;q W1m{{jW"{3y=#цh\?}mi5*bId)4; ؆3b$߈̆* W Vڬڈ,!!ޟi ?%#%IST53  ͡YPBn.kz[Uk,?f7PK8 D#{t]IpbSI=*c43=&U=iДfGv*GKʼnrY"%O(M K䩱ܤ<|P ybjwͦwZ!4T}U1 nnYplgz4Na/M5)X;Fԋ"=]s5oV?7͐ƢъgmK:\jLƶ{ y,\pwy } ِ7p14!c){ 6`, H7V;]o$X |kthXA_x_b1Ƴ"h}ࠨ@&>wB 7nmoX o + ct54×lN.y#e7?'|UD o5l*38&#$tO\8j>m 6r֕}&u%DA?7Dc`~MF aBM K2ET-Vg@mѿXVi+F<`!p86ZXC9欄Ky/\p0@ >2\.TX 1z?(x^J[e}z7ha6%]3ip(Ndnt.،6&XG‚ʠ5,ټD3k{#Z-~˧'QEH'E?"l91ݴ`!FZ]$j.vEL `3\}} ɜΐODMFLETUP^-H!gc.;089δR|î$W9HB"ۧZ|N!oW3E _O*p$kEp\,T6$3"֪@ M^>h2 r{>OR)No-| MȎD4)'eE5HmTe;mcb`Cz)*EwVӪ;P$'6,.c IRr7 ~&?cHۛ9MҤh0Z9}()DU5OhҋLqi3QGr̤ `awC fO6y?QtմG}g ~b} 6 0'݆N Џ! Czhݨ VO ]P '~pWkUUzyv-vq;PmaK$)uX" 5|6Tfc wWO)ߏSlS ݱx};43bv =jZ]*M/i{_ R;2mםlf 8K mYL_5fm&qbeV{#n3iۆDsC`yohy:+(#ؗeBPi*OƬD\rF:;CxCbҵÁ\:=lwZΘ{xy_%hM)O q:q:&ź\k׹F˽u)ęƋvx=s)fIu/c> ja(ps\zx%=x;hl0Z|\wD?eN2!SǷ^hpNMXm۶m۶m۶m۶mӶmw973aWblQ^OS`\0l(CrUDҢQ~ցw<8wޝ$($5WY_ǝyxN%gYv1zȊ .~RC8̶V˜)= [.8n0HG^S"$:oɷSg1BgUe*CO+qfo ? No*j!/T-УBw(-[Tلq=NEGUZ35xL7C*XbAҬkq'Q%VtKGn"%,Jcڼx*/Ne8Ty$ n- 3q!5- h#0Yõ *Z wKL=ſOL D#6&nMTV #vzaۆʣAєetikvHJ6<-* 1Xؿl{| W5?6g=`@Ϝ|sUDZxq_w8!pr7FwS`w$ [< 2ɁUh7.Dm Q <6<<b݅nޚۢU9cJ?|@PYir>O:yT}[ZnB\6l9֞(JOAy6yLwSYv #8)HTҴ~ȴͳA]]-x{=f2סg/N=wQb:_ |kaHl:{q:`Ċf3CP??c:ǎa g g/PڏU=ޭyRg-AQ[q3PsR7T|B:~3h6^H/t|ohťʍ3(VH.uFRh쑝Zn iQF5x{=)&24qĐK؇+|w'3D2`XW, MNEƑwUXwr揵.JC$5Q(8<:3ԅ$*oΦ({d¨ǿq#262rQhӀab3x`S2n+QFn$yj{S&!˶@IOq^CCf9TvF@nhO, 믗o*.MJbr|TG*ӄ23.m}PMRgA̫<\.Kԋ4G{"ykfH}E_^"PrBv_z{i BC *NEx+% S~񣑲)d-wb/ AO?Wh6?aRWzPc/P}Fu̾v7PNۋyѐfԩUy"-Ztjbm뷉5UUEv!OD]S&kI@2_nS.WD5!^oBhN(vI0<(E8A=HvQHCk;N_T]jI4(hdVZl%`owWQ7iqc$:N̆D%FOk(.=&$q] uA~&͛NYrݥ]<1փ\.mDXdf" x1 Ҹ *rgL9\O! :_$\aqU lɭp=a&A.DPlrK!^F L!~aDmnh|XݶԷ3^+gHyI9");GBCIL'ua>`B< iF7g0Ŋ“={z&FjL,vk rt#3Fm]2I!]}pRSaÐY=P_AϒC?S*:x J-LȉPi|YhEDڝby23Dc)7eb̝W*'=Sr&VLb2fh]|d}ꭊJhKq'ek[A큦aŽ({lAJ ?ٶNq1ڥCnxJV68`NvsI/O,`yVNaёͼms <SgJVL}q$v7(zq]z7;lS2[}5p"TӾ1YAaFvk!Ć؟%IW)ukΠ ?QDBb)׃LR4X DaV޻DLW ӾNX!T>2S(P݉#s>qnޮN:xϽӮ]FjXe1\\r'V)ur3ݲ]h9⧔} yfr '/i0NTagIA-pR|jTd1Gô\=./s7-1;ޅXqZ)h1@b#XX.9 N1%+"Zun]s2歯a#*8JIq16:\pn-D,S]AzF 9XLUt{urX>Ox6{Jφ6Læ9jY WAkc9c  $'f_V=Ir9܈M@D)\Y2} GC*ԼB,Q}jTgSЁ{Hڂ`nF)ϪM-*-& r}*ڰW~O `cH)|U[?1Ƽ,\ިjh֢LG*HWg=O?f #ҙ$$pTs*yiX>.$Y&kn!LE^#XoTO嬷tf7N{n!}mH$` ޾b"SB so3o4Ewfȕ6c@NZdvCOZ%2jt=,N4]t&PNVrq8 `20,Cr_+q A80Y0s_7PiYܮQB zٓX#3 e|)?IW@cעհWS/%*Ix$j0/$q~Kh|zf ,[eR@u\ۤ bENQJ1`b2af'+"T-¢s&I2tgj bjee6tm".`+9YGyL#p)ޕlhj^gl}6 +QI7v//އ4b:DTM"n"mGc=Տ\g<*T@bD6RjfY&MQ9$ak\qy:؁iEX-lBK([\#0縠T$` I>! Fkr@Yk5pvp_q,{т]5^eSLGaH1[jDNć~FFr+!m5;?,~Og ;LSmiМo; L+*gE{} I~dS?C[:XR|2}$$[\!9:6G3Lp(X|_ Q_xf;cwƂ7Ѓ1ۨQгi<5]z0.,3&lR/:` jp8fs*v`@Bn<\1iP)#V*D;ꋆz },0ly:$`tZi$K*&?eF/݆+x@p'  sӵ;A{:scޖs\y9#iHsQEv wr%?D8U,lй0 ˆUed_骨 utw;^\ݍ{ɟ;Dj 1FK=̪ͷ|˒@,Ӧ N{Nz~99 XǺ9IPl[-}2ap4CE% Zoe6B$-*eKG= 4ҝ0C~b%V_#g4A<( ኇHaR*$<cʣqYLZ֖M Qa^.ʨD 8HS*+} ?s !d<‚Dw*av\AQ2UۅT,* E>z_xt3iP?t1.dp1*w=?R#5_4Jiأ;˴QK$ޛG̳` *|Q,39?H+ VF(ϾtޫTFss)A%{ T?V@y٣fA#H|'S;tD{Wnْ {42YAݡۤ"w |`ъ%V,H:. `(Mq?.`mC=%# f=;n΃otw_YWVQmזLH&macMJ܉:CȕsH$}EVU7N͉n{ 7KDbUa4ABgPBXֺݟBզ*1҈Wu[KJ S>C.zZEgv1 Bel^yOօCv9r[T< GYb@TOHM&IGNo4S-b*X Tcm64z[s??Tax{^"}U  hN޷ϐX}{Oϯg7V&ِ 8M2!WI| -seKgMrGEAYG?8zR3exh4'!i`'vMSBʑyӀ*.3f'ei! aHp =u+U<VTtkr&h#IRe+\!AviK\?Ui|qWXHIg-mN]h? 4ˑ5\o"o( 1!1 6[ĝIuDξu6*p!J+gd9 .כhn5)/ cn4Fa1vT~hXSMh_3{ּUۺbö*gGxг/ K>*/Z,/fDPJ}GV S+ `c'ּ?*vXd^'vm< 8I qNÖn* PzM)w{挜|>D$P I豄,$:?-HȥGen/-R 5buDǘW^&7/6C!_ i5(|)LG4; #oφkP 5oB#{@X '0j3Vӥh(P%ƵbS៲ x ly#\V2&ve jYavh= l˔Wd7}=lM\ZJ΋/?B- &-!L=Iֺ=mj* z"qƇ[<V TrvAFDW[X" >*4C (&{S[npCz8Uϥ)jqkrڑu ʳĂH/OJ3ĺ>y,lS0qA|)/YHڳzA6/QDhw6Q+1#=.Vj?uS_e}v9zD̀ꖅLw'L$e7qG|L{^$#[W(`¥װg[|XAG5Ye [#:f0"8,3XxL6eCKr<T3е?”)*?Tj_. $)b=_X\75kZXQƳ-jVȃ%6Vm׵ch %Kh[=|:I[ ,eq|\3ok<#ԯ!W|XB|RD &|C-:wb@qS _Л(ުmZՅݻ(Qո8]z0lO cϟeE'FpxϰYQY!03Ø!)]/q4 =S_d)cGaYQI74{b bstl!c:/ 7'iz,dI)p-f h*y@TtƼ胪0otNzK5:_9-wRa&r*XeHf|5(Owa4$ B g4*gpڱ=I^Кuzj3w.ri%o5# ʏZ^j-mgF cN)5zn+؜tpX׃\d\dz)EHdi6=Z;* Ȃ+l 1<׾0ˢU[ye~T|bagq$ `gwk5xH}@O^HGGEٌ`gCTf~KU:Her6/*UUTQ|0K22+5u=V Th].=T 58Sw ܝ쑇zQ>Vh %y"_9rs79 K扡߿ʔn$R@ їJĆqK54>%n =\Z{TW{|󢔐\S@;XL)t[u)B"r{%zjpi%-ױ\ѝy?S&D+Ɵ#.Ž56kn(鍳=#$;SPTvs}} ^P"욫JuڮpG$ sez`d6{B9#қIȮb*0Å%S=]cmĜb˦3==WkG9_ N^Ld7*欜tm8º̄&N,:>qsҽ%}HĔ,:%߭# UQq]Sb[UƘHstva&#Gb>|b܇1n-x[h6//Ɂ V֔"̇_p\VPW|ku5U8f69eD) fŢ"WIeiHҦ){*$)NҳZx{Z~X'Ґ\eߌUSOR MOO}EP}2AŚ>nR7|zܝ+Ş\iG-)S=ﻭU"t>G< o;f*Ob/c{F[S^mFEa%GfyArF"dz"HbYq.gSK8(csBaat!xr ɣǎGz&\4&tۈ KGᭌkpUXi~)W B7+h_ÔǨJ=št_M '`O6uZׅ k)G0Ayd+W/\0T fˋdRxg$[P{躀Z')<8Y&O"˛($ B'iYZ`cpmVa~ ߪeg"VXPŗ#]ÏqB?veԉ_9DVE=̳5 S=J>?_'<_f5yB;6"M71HAj[>> {'4NVNI»l#SI@ v@u~ʔn ed&S5J 0 YؚFӿi$aO=@k`9C(lDu3>܋;GxL*o>>|IG+7gCƫ(֊{afj&vIA)k%4vO>!NGD^A/j{77+kOgIڀ-uQHW&ċ..J{?HX~,㝥^V3_-(d'iX cq9kZGF!jّ3|V07e 9T&^'uQ>c,aZ> ʥJ7J`#ty~Zz b;\~.(("V|t1{fx5.? 1 43_t*MD%r@m0FEOR .?J#zKR1gTnd^p$VXTChq6qUeu,@ocz7JA7@v> < 鱤PsW%k)m!J(;d9?M"ƓV,, RM~DhrqKiN~7c˅ׯfX2Tuy6 aQ=,;G'r&L/s`[,!X#4 -gӲJ%'n\ۈ֯֌FgT˼ :ؽ`<2_G4OEo:aC7 ZbU9*#᝸lI څq1Ƕ)cv<!sQWͥ1&_0ޫ:`ϐ"`m<)&Z:x}’cp:JZ ky'lV;ld՞c#!E2 YMDE*f+#Oe҅#/Z;Z-E?Ij=oPziۢ DYH&$/96fVAh-N D@YV}aE pmIQzY&0Oƿ>I`s'sg10?]IL-LVք]-VJbdCD>뚤SR|VU{VjG$Fm4L Ct➤5gNڻPL!#8匳~lUK^D$;(h;?`G w2+>B;o6nJ7R2GMhb+}[;k+Yt%QrϜժ?ޖp^Btbh KߺaIv/\-pԨ\C$԰}9xњyA,c]Ҿ#բpF_:>2h;\=nSO9!qcgi\}@Y.Z{  ɤTsjk*4WĘ=Zڢ0?E],p lᰪ%WiKK-atn~ځ7#Hw:AU*n<P@;e$,v&i;~3M,PAF/9 kY# 廠EO(>MC`Cj<|WѐAJ 6t#=K9AHq&1hth/T&{aﲰkȏyzCgS0~1W̘_CdejS?`xyrRxJΐF'ZI;ֈ i<^/|ZuwSä&2*x2Wvi/D,ѓ~3,BN@e34h8!mL-v0P 6"vmbH],wf>^Nho -Fց$URgxzXX ҿQ4nj_4U ?hw+9Z)/AXIgH {5QsrJ*<** =9xv퀸+ 'OGz-'jIIq !=Q4S^wzL`zyiQ6˒-~W AN ~\f&k=ھIsIF>]~acb/`uy]XJ0skʹm-lUB >\yH?N9\ QO9~nR^BD\>tuI;WD+Dv}D7l;M[ )X>=D@m.FT5 pYG]E=eM{pz8@a0<- ?L+QfóDZYPL5yjޞTVӒi$Ikf A0Emoeم$,@̐\N=AYI#t$;PQgk} (HFyRJFXpX/!<~o97p ľN=TaS=`+k :OL68Cg7Vxtks;eQu(->MuD-㬷whyk;z7@Xl|_Ex^=%yWh]ŸW,aV`]!uz# x }ʹf;CZZхV#e\>i;doEz097ڕhpm1zR@L~gE{<K/7\8Ol7Qi‰$+e,`laXy;?80/LVO @DDY=G+w]YB!gI~P2qI:mg26NGqȺ3U$0?":~2/(z?|i[1èB]'*8CGjbȊOcV,Vp.]PPCabUሩ i,Hם,< a3^$߶s)WT%4U'TVgX]e$!?9j'Zi{\Ay4' q (f;i}aPc=K#qNvd"bt6(>Flp?@~'csbԌryFr')Z? RO{5~Yq3A'ШbHoꐇ`'6`Q5J%ihL-ŚMS>0haa/~ @G I6!%=<~^(#/jx,v!̈́n`'hK d)}/l6C|Pu9Eg *2:%=ydg "W6+|-EU3f- >O٢yհxs(|-9,S}: /z՚DY:Gb{_-7N./~Ny2v$&m}0 e,NfsiW\2@#H -|=6UdtC7rm 5W#99ȡd"S3WVo=64`q!8ɓ)ӬያQaG fJ̗Fk=,Yv'ߩmCP@#Wp+w]1?+^ܞ Tm?/ܪVcR=x`L]+I&Z[Ō"s,LY奦#\WqT8G\=h=mS|NKYb^;3mgۺ\t̸)iKP}tĒoaӌUi-o7CFg≱rGZC2b Ζ{YKyP>j'^&1Kϩ1߹ endstream endobj 89 0 obj << /Length 494 /Filter /FlateDecode >> stream xmMo0 !Rz|UAa۪V&$E 6~=HUAgɯ~uo$ƛLD- t @ZcNt=YNk`T=Ro æeCڕ(>Պ AiZsn[6uc^0Xah\je?0bprOY[AKS|dۙoF)MZ}4W@{YmG;<9`;K (EytbabisbgEjq(po$}Idon-p!J m-O[L endstream endobj 90 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 91 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS 9_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZK endstream endobj 92 0 obj << /Length 695 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS>u;q~:fc_0F)lGιmu f8Gӫ6b"!YUe.`M{My?IC4}+̝l/Bj*{pϻƲO('$ *{>J-9_eQ"V$)MP:^9 ^` br @ {@(\,RH&ti m+3ԅ ,;F$БzFFieD(0A1a8yΠFpnù[w6p@ )9r9b_ia|F-(:(nQHY^`nA|n(戥K}s\}sԑoA&vqc⠦ YK^ʛ!_my_)=^ ^{TGRw1RDž'xJzImi9j'pͽܳ/-_Z,N_: ~iyY2q,nЪ5QN Y58.] endstream endobj 93 0 obj << /Length 695 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS'K}v}tƾ`R\ws*pWl:*;m_Ű=EB.=]6E%‡hWvE;^N ƣՊU ٟweӟQ?OIz^UU|ڕߵ6ZrbˢXEIS:.trA&TH>4"PX H BM@5*08WfH AX v.2I## .zӘˈ0Qa8tcpN0A2 @݆s>^l>^wo_j4Rrtsľ x[%QLuQ.ݢT ܂PKߗp#}߂pMAM37CB2>*R{@8񩎤3 }c$f O#z  ) spW)9N{=g-_Z ~YK/t:/~e}Y%៍-t:UEk nmGkp\x{)ނ endstream endobj 94 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> stream xmUMo0WxvH UdC۪TBb B8߯{ .@=/ۙڽs{K;K.k6/k+[M'ҷ>dyӔKe'$cS`vfSfK}fƁVGGf\bu<19w|擬CTAW $rG]IyMsh$aW7y̟u? sK-`θtJ!'c83?NaO<Dg!;IX 0z)rЃ@kpBQ]^Z7! / U <ɉ#W m/%]cX! gȀhID8QN~ACT/sQQRs 穅ύ>7: F+}n4eE=zG~<6OɈy2kLd>O&y2ϓQ>OfdV>OF<dR'<>O)yJS*}𗏿tx>z{O->tՍ]*3>cC~ endstream endobj 96 0 obj << /Length 900 /Filter /FlateDecode >> stream xmUMo:W5?$R. d9M eCkmCp;;w~>|3E_?O]5߶w]Occ]=~?}Oyh9%?۹׬B|Ɯ>);vw%g43>\ 6 EJ78 1{~`W(-;]%=xe_,b+-O;q\L}UI--=BKE1p[! Mߊyu>.N5K)Wb٬8i[_uʕMzQ)V(Txޢjy!Z2P="Zd0\ÃGR\).2*Шa!U,H`+j.5Nα@VK-x%3%AYӀzΚ>kP#5m0Woþj.ZT$X/)n)#Wo(oRZ $Kp4Z-b\1ܰJ P"GXQi/8k^Zq:Zs9dB )sL-7xJ`aɽ)f$1 dъcCZC<73JgznHȰYɚTa,_-O87}KԴܗLloK+gJ.GZyVc48Wt]:P~`rZq.n1] S/Pu7Ue:?&?!d&1yHn5)yғBx#1ޞ]Go׏M?X endstream endobj 97 0 obj << /Length 867 /Filter /FlateDecode >> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5&z& h<ϯK)ٔ?pݝ2ZkXvm)85];B7gѻ9x~;a`>W'?y:o&> ݋L'/㫃Bnz_7_t|~;:ذƦoiܰ^\0zu\7g"NFsu_E07H6!L@@B@q\s *Tg ]8 i/nTvc-+>c_ZZ~Z83z3[:ޭ ߬Lg3t3-g B|B|\3gg|2?z)BXIAup*^+&#sU-'H8qɼe5A78{Y-7^=!U endstream endobj 98 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 99 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 100 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 101 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 102 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> endobj 16 0 obj << /Type /ObjStm /N 65 /First 519 /Length 3644 /Filter /FlateDecode >> stream x[Ys۶~ׯtl;pәخl$N3yP$f+K4鯿gD+Nڙ; ѢJ$(>0^ WV$U"j# W0Z$z >uAA(aTʂ\rA K(` KVX_BX#Rg|FA V I8e\ʁz 8X*DiXT8` I a$< >6h-`%EhU0HDS^":`(1 btxP"Z*@HP-lIx 0P)o/j@4+4$CPڃIpRvʀX*HP1X駞bВz@OxŮ7`ߟy5!}!r N&Í}g|='sU fb~@A9^vq85=y0بzEtOg%IO{`2Ɨ2@hn7 oN>Cy>[i9ef7xV5E @SjAvy9*/6H*y9*erPMQYΫѰt2%)+,1frw< 9r\+Ctvgofn?[9]4gԻMMzM ʬsYӃubXQX!0vpNV&6[K7g|tBw)V7&FԽ*`ft KPJ%T2[LD4\V8L|`vC "tGO |jO#% 85K ʮ?, Q_/LM wUTdC3lGB 40>u@0l8`K[dpEUQݢMP55g 9JDR.j:k@=4`e0݇2r d4Fvu4NJ\"ԑ(0 GVrٰb)2p(Oh0CuAL#ڈS+fpAܗ"Pе(Pţ+ vr:Fْ#W9 tH & dL?d9\Ftu[*!!0("HPEC(*ʍ 2Qk<(Z1q=RtyMidDZZ)Vz,}Iup;]Z,)q=b nydo% i1zKue֨d-( =c*жȋ5eb[< >(giu3L ?~rɏ9Wt3ay=RViSd BQY]^|Ec=dUGQ5dGN 5M d'1m'm>%'$ٗ@ rۗ}30)7 yqQIŔrsU="nP"|䟥 M0>WӒBK.''k4[eWo`ͦqhGC9U #v7:$k[ f0wajxtg`;4e)e_j<ZƷn}'qGR~˖ ]P]s0 v9aRo$,؉PFEQ3m>wp70!ogp6=#k[_8kY>4>dfhZzژz|WĚúZ/eGt6G=/@S W3|-FM^+ptm6v66خ:^SƯiצsg(ʸs2n̚6z{m:7ܶ6j ߨ1۫ӹvYsc)g.zM.bG5ZbӚ.n{]76k.w2jM.뷳6k>l_oc] ^v}jkZY0~] rp>q8K_rAZTMjW5Gkaa$6*p!ٯT;*Ư%xo {?x7 ͯ?/k-)}8O.{,.{U˥ endstream endobj 105 0 obj << /Type /XRef /Index [0 106] /Size 106 /W [1 3 1] /Root 103 0 R /Info 104 0 R /ID [ ] /Length 304 /Filter /FlateDecode >> stream x%9KCa951}K11," A"}VߠH !X +3i>sD )Y!Y&J#9y;I\@|5m$z/lIZ ;i'>7.HnCz !TIDH? Q2H0!d 2 9>{Sڥ4j򜴚|X ?19 Y޵PnX-7u8a Z%*j n*pSd^\C)+_e;B٫+s ~(+;$c[, endstream endobj startxref 223971 %%EOF survey/inst/doc/pps.Rnw0000644000176200001440000001455111541475406014640 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/multiphase.R0000644000176200001440000000016515147136362015641 0ustar liggesusers## ----setup, include=FALSE----------------------------------------------------- knitr::opts_chunk$set(echo = TRUE) survey/inst/doc/multiphase.Rmd0000644000176200001440000001573614640361577016201 0ustar liggesusers--- title: "Computations for multiphase sampling" author: "Thomas Lumley" date: "2024-06-7" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Multiphase computations} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` The ideas here are based on Chapter 9 of Särndal, Swensson and Wretman, which deals with two-phase sampling and the regression estimation of population totals. Here we are interested in multiphase sampling and in settings where many statistics may be computed with the same set of calibrated weights, so the priorities and notation are slightly different. As in the book, we consider the setting where the sampling probabilities are known (or well-estimated) in advance and raking adjustments are small. When sampling probabilities $\pi$ are grossly incorrect (eg: missing data/non-response) so that the raking adjustments are not small, we would want different computations such as those of Chang & Kott (*Biometrika*, 2008). ### Estimation In multiphase sampling we have a sequence of $K$ nested subsamples, with sampling probabilities that can depend on any data at previous phases. We write $\pi_{i,1}$, $\pi_{i,2|1}$, $\pi_{i,3|2}$, ... , $\pi_{i, k|k-1}$,...,$\pi_{i,K|K-1}$ as the sampling probabilities for observation $i$ at each phase, and similarly for pairwise probabilities. In general, we use a $,k|k-1$ subscript for quantities related to the $k$th phase of sampling and a $,k$ subscript for quantities related to the cumulative effect of sampling from phase 1 through phase $k$. All sums are over the population unless otherwise specified; restriction to samples is achieved with the sampling indicators $R_{i,k}$ (and $R_i\equiv R_{i,K}$). We also write $$\pi^\dagger_{ij,k}=\pi^*_{ij,K}/\pi^*_{ij,k}=\prod_{\ell=k+1}^K \pi^*_{ij,\ell}$$ for the forward cumulative pairwise probabilities. The product $\pi_i^*\equiv\pi^*_{i,K}=\pi_{i,1}\pi_{i,2|1}\pi_{i,3|2}...\pi_{i,K|K-1}$ is *not* in general the marginal sampling probability for observation $i$, because each $\pi_{k|k-1}$ can depend on data up to phase $k-1$, so $\pi_i^*=\pi_{i,K}^*$ is a random variable. To get the true marginal probabilities we would need to integrate out all the dependence on data measured at intermediate phases. However, it is still true that $E[R_{i,k}/\pi_{i,k}^*]=1$, which is the key fact we need to estimate totals $$\hat T_X = \sum_i \frac{R_i}{\pi_i^*}X_i$$ It's also still true (per Särndal et al) that the variance of a total can be estimated by something very like the Horvitz-Thompson formula $$\widehat{\mathrm{var}}[\hat T_X]= \sum_{i,j} \check{X}_i\check{X}_j\check{\Delta}_{ij}$$ where $\check{X}_i=X_i/\pi_i^*$, $\Delta_{ij}=\pi^*_{ij}=\pi_i^*\pi_j^*$, and $\check{\Delta}_{ij}=\Delta_{ij}/\pi^*_{ij}=(1-\pi^*_{i}\pi^*_j/\pi^*_{ij})$ In the absence of raking we could speed up computation using a recursive relationship for constructing $\check{\Delta}$ from the weighted covariances $\check{\Delta}_1, \check{\Delta}_{2|1},$ and so on at each phase, subscripted down to the subsample remaining at phase $K$. This also has the advantage of simplicity. However, we can't do this precomputation with raking, and it has the disadvantage of not giving components of variance at each phase, which we like having. We do use the recursive combination for constructing $\check{\Delta}_{k|k-1}$ in *multistage* designs within a single phase. ### Per-phase variances We need to use the a summation over phases. We consider an estimated total as a telescoping sum over phases $$\hat T_X-T_X= \left(\hat T_{X,1}-T_X\right)+ \left(\hat T_{X,2}-\hat T_{X,1}\right)+\cdots+\left(\hat T_{X}-\hat T_{X,K-1}\right)$$ where each term is the error incurred by one phase of sampling. That is $$\hat T_{X,1}-T_X=\sum_i \frac{R_{i,1}}{\pi^*_{i,1}}x_i- \sum_i x_i$$ $$\hat T_{X,2}-\hat T_{X,1}=\sum_i \frac{R_{i,2}}{\pi^*_{i,2}}x_i- \sum_i \frac{R_{i,1}}{\pi^*_{i,1}}x_i$$ and in general $$\hat T_{X,k}-\hat T_{X,k-1}=\sum_i \frac{R_{i,k}}{\pi^*_{i,k}}x_i- \sum_i \frac{R_{i,k-1}}{\pi^*_{i,k-1}}x_i$$ These are all uncorrelated, because each depends on sampling only at one phase. They aren't independent, because the available data for sampling at phase $k$ depends on all previous phases, but they do form a martingale difference sequence. I will write $\check{x}_{i,k}$ for $x_i/\pi^*_{i,k}$, the weighted observation at phase $k$, so that we have $$\hat T_{X,k}-\hat T_{X,k-1}=\sum_i R_{i,k}\check{x}_{i,k}- \sum_i R_{i,k-1}\check{x}_{i,k-1}$$ The variance of this sum is thus the sum of variances $$\mathrm{var}\left[\hat T_X\right]= \mathrm{var}\left[\hat T_{X,1}-T_X\right]+ \mathrm{var}\left[\hat T_{X,2}-\hat T_{X,1}\right]+\cdots+\mathrm{var}\left[\hat T_{X}-\hat T_{X,K-1}\right]$$ and each variance is (conditional on the sampling so far) of the usual Horvitz-Thompson form $$\mathrm{var}\left[\hat T_{X,k}-\hat T_{X,k-1}\right]=\sum_{i,j}R_{i,k-1}R_{j,k-1}\mathrm{cov}\left[R_{i,k|k-1},R_{j,k|k-1}\right]\check{x}_{i,k}\check{x}_{j,k}$$ which could be estimated at phase $k$ by $$\widehat{\mathrm{var}}_k\left[\hat T_{X,k}-\hat T_{X,k-1}\right]=\sum_{i,j}\frac{R_{i,k}R_{j,k}}{\pi_{ij,k|k-1}}\mathrm{cov}\left[R_{i,k|k-1},R_{j,k|k-1}\right]\check{x}_{i,k}\check{x}_{j,k}=\sum_{i,j}R_{i,k}R_{j,k}\check{\Delta}_{ij,k|k-1}\check{x}_{i,k}\check{x}_{j,k} $$ That's still not enough, because we don't necessarily have $x$ until phase $K$, so we need to weight down to phase $K$ $$\widehat{\mathrm{var}}_K\left[\hat T_{X,k}-\hat T_{X,k-1}\right]=\sum_{i,j}R_{i,k}R_{j,k}\frac{R_{i,K}R_{j,K}}{\pi^*_{ij,K}/\pi^*_{ij,k}}\check{\Delta}_{ij,k|k-1}\check{x}_{i,k}\check{x}_{j,k}=\sum_{i,j}\frac{R_{i,K}R_{j,K}}{\pi^\dagger_{ij,k}}\check{\Delta}_{ij,k|k-1}\check{x}_{i,k}\check{x}_{j,k}$$ ### Raking Raking of phase $k$ to phase $k-1$ involves estimating raking adjustments $g_{i,k|k-1}$ that satisfy calibration constraints on variables $A_i$ available at phase $k-1$. $$\sum_i R_{i,k}g_{i,k|k-1}\frac{1}{\pi_{i,k}^*}A_i=\sum_i R_{i,k-1}\frac{1}{\pi^*_{i,k-1}}A_i$$ Let $\Pi_A$ and $\Pi_\bar A$ be the projections on to and orthogonal to the space spanned by $A$ given weights $1/\pi_{k-1}^*$ and let $\hat x_i=\Pi_Ax_i$ and $e_i=\Pi_\bar Ax_i$. The calibrated total estimate is $$\hat T_X=\sum_i\frac{R_ig_{i,k|k-1}}{\pi^*_i}x_i=\sum_iR_ig_{i,k|k-1}\check{x}_i=\sum_iR_ig_{i,k|k-1}\check{e}_{i,k}+\sum_i R_{i,k}g_{i,k|k-1}\check{\hat x}_{i,k}$$ Applying the calibration constraints to the second term we have $$\sum_iR_ig_{i,k|k-1}\check{e}_{i,k}+\sum_i R_{i,k}g_{i,k|k-1}\check{\hat x}_{i,k}=\sum_iR_ig_{i,k|k-1}\check{e}_{i,k}+\sum_i R_{i,k-1}\check{\hat x}_{i,k-1}$$ and since $\hat x_{i,k-1}$ is not random (to first order) conditional on phase $k-1$ the estimated variance contribution for phase $k$ comes from just the first term and is $$\widehat{\textrm{var}}_{k|k-1}\left[\hat T_X\right]=\sum_{i,j}\frac{R_{i,K}R_{j,K}}{\pi^\dagger_{jk,K}}g_{i,k|k-1}g_{j,k|k-1}\check{e}_{i,k}\check{e}_{j,k}\check{\Delta}_{ij,k|k-1}$$ with the variances of the other phases being unaffected. survey/inst/doc/phase1.pdf0000644000176200001440000036142612242737227015231 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.pdf0000644000176200001440000055132415147136375015202 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 2304 /Filter /FlateDecode >> stream xYKoWiF|w#~dTDiey^x~Z;W#}'Ի0( 1gsלJaVxrM J㲂h4+jLzqFMO+K!աki[Jڝʶ:դye~ށ: %F?uԴГ):) ĎNmB5\I^Zka;W|̝"H(PFsEёnS*wA;MOrse2f!8 qaHcsiiy+wRK^V҆.f9(DFr?n1ؿs!-+|#?8v确7VGFXwGN ~R='{ ֻ#Mݴbi?Z;̖CAIg_AU'Eȓ(5}?›  :!mZ=ނT|ϼbN9?ɓ\ɒbaJRxBY%g$|Q U8Sb˦oWPmd0S0sx{8⑻Mէp;:((gG6O<, OuK8O{BXQ ~8߷ؽ{sL>L% 2-9 }<:&?vP<SW^ "4BBk-0އ.6>6po5Pw=" 7AiY}>|1iP\F y%'TX&m9T  ƈ\=Г2ms`)W'ψM8JF00aiE";=M*"3 C0ac㠘5l.`J2!D6!yMO0kt͌S/VVj!{(P3Z0e/<4|].IBbSKԬNBM8)U]Zbʑ*X/ }AtMX1cMr lM_;fv!7ӂ6m9RIJZ b>e6,=6DyRԩr38 ʇ^8C=fqYtpdf8|6\u2\L#A}!+'dpS  lEI\v$tw:$%FH]d5 V=_鶴O`Ih/ՠ@ScDB=ϵr*Inж/cpi{25Ճ°dJ >dkF ;ȳ`շ|f^IL 2ܐ̱mnCFա}pAc>ЃKeFY3ЃB f_uQn[tiq_o2.@wv{@#J҆&8 yD<ȏ}7t2)6&sq*o-Z2r-Y0E57`nfm{1>[j57"bQi7JE!f5xkάTs*AAn5~K赴3.Aڧ6ބПt=:BfB'hSƒЯ|&5TJtB5lK+_^_x]Қ! c iS%tna[wc9*9|5'qm6~T5jc0D1?`/ca0Kqy ip ɡ endstream endobj 24 0 obj << /Length 2587 /Filter /FlateDecode >> stream x[KϯɠVo|Y'Fn$ 8aIIcקA5 ć͏oNAF'1NP2.7fHe_ɔ)UVMoK 2J; ND#vU|!y:/6ծwq 6/lٕ$Kgqg!t:! HlVq|ߔ,c,ɎHotp"fBvTn7Y✨÷sṸdJuZxUbJ;Jjb= Dv;v񥚗RA% (kjfy v%h5Q߱ajbH+^ن2(0a/ G` v+U)2#Pv@" 2+} 8O#A6Qy"l* *eW/@kk;)a1NjbdpHZ$no"sdtUiF'jV[zm\{psvg3;9̲,w1呹$T}059͇; NHB@!9?p#FƤU?o~rY{'Dp @Z+[/;9F4Eb]`VgC,.1)gJ{kQ/+*0h=w΄W88Wu3U,t1zqU-n(J>b=֠WW/ߣtr ^̊nıת=#I~!BE&duL:3)4~]%W6hKd=c1G&y&0`TlQXKgg bi vdh -n!û\: ߰U801 eqѝnw)>zҥPzDAȩېRg}iS<iupt֏ m֒gק ?YXUb5&ԩc쁛h%:QdW\n}m_r=:};0=]F ^Jq3Fh>192'.U(7QhK r,' ׺.\UU2uڅ+"nl@s Y@8~ w~|^Ӥ.PNͺ(3XoWlPoyiꇱ|ďMGC88!$93h;qMAjXwKO]("H'H AF-ﮥڷǓ&7bD/xi$x9Y8qOr*j0J6:WE56 O Ͷ6CLP&nBU0K_OW;ľrG¼+T6zM宼u)ZJ"8qFmXr)sӟ [z6T\*v}m~9bSˁL-`!b攨c5{\wJ3 0*ʺ.* )O(zȅ- Ʌ'Ȏdk/*͈ClϩuРBS}Q%{)dDL,Ch!,5Bg}wKdv+͒a]h]P$/?(GL糩mD&/djD 6j a~wV'<[ڝf^=Y5a@8#eg=Rpp66 ZdMzvʲլ½-|: .BCTq:&䢙ڵNãm0q0)!gWC6AvCVmގÇn^ذ.> stream xڍtT6)t(1H "ݭ C0"* H tHK}{y}Yy}]{_fg5SE@Up( PR1@?(HnC9CC0\?JH(ucSnZ8ࡇ3$J$@ (7(=a-~CNȮpAP7upB 1(Z`" 0@@`P?RpJ;P^^^`w~^C9P'kd6g4~Bv/FB7g w BuM+X//@+ ; \\p`stT5Q(^n vvGă=0g w`|3!H+ʝkF_inYnpqQS!}sNp5UW1fEDb qU ep݌Ao>hw'Bz@ ( 'w3#a @_V7 E} }&&<FSQ @ %D0@LLD`؟F#XnHFݳpQ7ԅ8tKr;G_YWwGο?qC]ԍ 7b7v07rP;k#a0o. q1ٍ~i"an/ߍ N77 -7gI8aKh"0 !9曕 Q-7p&p3?$u@ Fro{[P7B85H9V5V*[¾b=lIU2CUK7?`'̶9n⤺y^]j5_?EVj]YdѱB1sSy=:BSBx`٘l{{tGRN ^$ع^Y<28DhtuSO=5W?7*ij1`Gܷ43Dy|4RkT % .)'ԝI#yC;Jq!(󼃓[C uRU\'s.%N|K^pzxz"+8?[jtCţ\fPн0?Zô͸;- I.wMR`pئ3YU04[I^/=KF^Q6610]:!pI[Q+gGX \qnJQx,J\ΐѸJ;( Czx;gEn9kW )x-v#x6 :.M݊rAw6Ƽ?O(B[-FTk%9ڈ NW^r 2,t ڃNep/r1;*ȒZ?W=y^Z=$.q)~*oqt2;wV[nKhgxM|uahJI]?ލ[W ٓcFR뒃2VcL[/oFn<-}-ܶx(1ITERɤ=oj4) J;pv $zogKӮEdrR2KOcFŧ鏤ʖ)r1϶NP]ֹz U?2a̚"c/.0Gx ;6Gis`ZJx}< -v}rph+\ƥ+QBiYߵZ1\|#G%*꜏f,nFZmYn]G!ɔ ߔ{q KʰV.iq+Mg~S8\}+t`י5Mm(Ǫ'69NC /W^dӾsg`q|=zQM1TxְM/fh^^%_i%8|Y ?zPT,nēDIvC2k[e<‰ )mnRb95p9,B)Es+g%{8q\ƟjryA@s+F1%A*9 QB?1^!<}MII8"ý5D_$_ut]Q:JҖh= >xGlꛖKH%t ל}ma[4z fX )q"AKo=T9)1QYgxrxG>@NZCA}YyF'%x<*>0BsOzs,U VIIUnm {84kъOy? T{YKVʓ{J9==VV4եwo$nXX=V6, bGGZUlY}ճb_ϒd[|굧qD2MYqiڥp8-Dە/Vse~YHXmZ@vd"yN pRمUIu 2;( 36 vN5%;׶/W*R/b#uwcWYaX=-2%P-Wʈt0'e %/-۶μ2/c;[ a=RQOQRL;#aw`1ћ>*>\Ւ`z~IPʐc3/VsJF|,wq= ?"}KI }`B.{ (?uJN M_77-۰JEB2U^Q>*սuI ӱuoZY?yce´\򠳾5Rf&ڨޥdWUv9c(#;r!ǩ΄:6fj?競+IVEUIT6O1 H>!kMޖM{8F&鸳BX+FT^6Gu9ZZq)_PkG cY̸$ jL)B[څ3'8$3N689ԺPwR߱6Óu0Ukݍ:i5'K"iۧ)!dPF^$0l882Q,0<CcJRgjT(!80UWJ ^,&)OxLη0́faY<Nf{Gm`jY8nҒ󀺊XEM~0.UDNyY{6m xOD6WiɱN Ǐd, Xcwt&iiv 5&^ojLϣߺ+逬;8 %uGP$lE19lJHXn TV*0f!p8?!G3n[EpR-r6<|&6fa=HDh3!fal]bmryj]qJ#%[+5A t%yY&]Q+vP `_Ӊ8ley*:$G.T,:/rmIܭH<Í(~SHPU[d>=B72Vw)qā5bR*-NSڵ{(IfZjg嫘4)TgRfcJ$"Lҏqʍl2,T<:4 :W^Nh_mhOq/<;{6A`"J~'V/c 红c:*%?;@UvgT" ` fAE0/bR/kO3,ژiٌ_'ۯM~@/S UŨՁ\Da)ܷI@+_ǝ3@?Ȝ k),>?~ZyYYWsAFc>ҾRVJg`]8i[я4kb&x1)?#嘹G`%;u`%뀷N2#|yP!4`m0|@*KOblwP~֭=RmxҸ&wM.Xs;"zMStubM6lrEĹ T.h!瀮EdmlvJ |Oa ۑk;Q.ꊾhf, `,wzrX@ok9h5RR>bط2c:+yԼ º9'|+-$5ɾ91f+ݴz,wZH2ӑ=y}?MM_YϦ8 p@c>i$8&㗼?LJr}^߳"Jw#3 _C\t5^{UhPAQ}εcϗdWL/vu'Al&xC smejnvlDt/2x3[7* Rz'|)Ah|"fYI,} gi'vm7͈]%ʐجn䧚ɗcc;F YbzeB  : ˳ej:6ʐc8yʖeh.Rz,S1bR> stream xڍ46,-BD {kh3hDу(Q.:A$z|995k<}{=̨%c(\\ nQ Ë̬E:Aeg6!0`ȹAHMD5`.Uw' xyxDEP7@A3nP;{$z=X !?g#!N=5H$\;#anvlO( A@< 6-4ΐ[gC9`HO68A!.t ^ЂC\"E97'lm s].v[΍Br.6`' CVhŸE!ݠp$u#w6+!.Hnk{>\GϿ-w6p "7mfAxW{}o8یlm@ !~>olHOvbF `ƒ'3l`.N1𙱚.-)+ pxx ~ah*.0dEoԿj[O࿓i҅XQ)5 ?!2H鏟/v:y@K z\jkv5 6Pw qqCK PzAlHkd9A] 0zʬͿ\`z7Pp>^A 썏>|4cjnD=lanZPmx@#=[@P" kkw77+zK\@vf-Pv^%Cɵ1"vk٫0n:kNTqhС)z4s^PŠi`7}{zg24IYzb^ mhN<)^=fߧ5_=Y(JTC4;J)iE |E6[ o?|UZidfc5 Jҕ@U}0$VJwlz˖Rk4wY:-lc@?Ptd 4oQ6 Xgtw_UCռ&V~| aH)_W>6 iU ٺe۶mp^SI#^46}ɢgd||Dд b`{Ƨ>(vY9hXJoF=cuzuyԷkLV,see Lv#*$!wKwk='q6%eǁ`m|%1; &>]@pN?Sr@%U+@YgZab#e\l5Y#i]Kޏ+ Pe)Kdt,^"b۶A|A &&%fcg&3t5 *GЋG iA>QFV?fg;HNgEV.v%ϭ~zfLgBx-t])~6#= ny,p Y$6V&|WOwY7x!Y˼m5X`ny[9gs}f@Xit~kmB]%j<jXkf J}rKo𞯴7gRV5=byN>'{}OwiHUUcAp[1x+/K-Z0ϮaHk̽a``P$ϡlBDߍӮgҳmƱU}w< XWb|iEZrѵBo94v$Xפ>7~\p Þii7SZ]Z]l(JȀ!DnIZ[CŢh+"HjaFϴ{dZFKk%9%@)0XPS=MAji@#R_ve;bw *sw!+ 0k4K_Fj\Ԭ`I~4e`Jb*j0Trr]ɥƯRVֲ3_[%;&V2y68TzO2gsj6 Rm`qPmӪSglUMl%05)&ؘV&V4hbwr=gQWfu98J(9"Hᙄg֍'43yRTr4N{SDsd}"67guތf:=flTZjy5(fF'EU%xCJg]g&mID8SkRY.'=;oi8@q e&{X4F2`đ.sgӧWh,4ҲK!Rނ{H Vơk*@ Qp0y < W'_ xƏR} dmB %*P|sӪmLjo,=ro.nFs!7Ӷ^Oćb "AN=Vߢ0rZ0Tv(,^?O?*! ~|[ {IjxqݫYD7 PeW5%h%fn:k[ym {-6%n[.'ě%)*IWƙ eK 1QqEd)OK3,J4# wA3e ~qoFK"k5%r1־l5c[ksv_cU}sEo3[&:q9t!xΓ&Xb;cC8eeP'߳ڴk=^O3P_n;M}D-TD9SgW voWSflrAHIUA3 闣os1Lp,w}[Ph@t2$Aa>bӸC_ t u Y#L*SIӾOuU9bʹrihhg7,b:&EXg e>r4ӉˑZ.]4@dW$zl9Vf6C&ϥT^Ja$;2G:T)R/q2W]"l :X;`^[Хn)WzvJ~fd] >~҅,=V[lR?>OVTfNɍ<~;l} [Sct[󰒂$˦ԃP@ k"ьi0SiD~. #30.GV}땍&KPr.\h,{7;f4?,M!^%{|ŭP4NY9=X;)VyMQAƪ aˎF4ISX$"ڀk!$Z RvM, 2X WfMa?.n:q!ÈJ˹\h&]m7S}_#QWcMA~]xv͟B^~>[%'.\;^7|qƒ`#C^}ZQ(L iרq :|rZ/`F4!'9t(cJ<a1onwr̷$.6wfPb-D+#_Gro^6]|%a:wп)Q0rލ1R.9D0n]btã:Q$ Zo(VE7U%#+мmy\ yl8Zfd΍ۈ`vfXE;6X b(OZ>{,|u:'#pqsAGfO<*鮤tVBG V^trUY 9ӿK #̺Q|&4YNyPlLrTǶD.;pP'i+}N40oWj,ʥcu`EpZ'85U}BxbƓ03R>L*鞯 { .ڔc*HdW\pB[nkjmNR#HQ@Y,nUH#kƫFZaZ^L^ ^^?k-VSe 8FmwSj:~M_n$6}"jdӖX+-W TI$}7e)*&ݭe\%I]+汫9XLc@ڦd ZO?[V~gV}KX!LKeJM+']ٴ<''1-Í;\#x%?x"6Z|Uܻ,uϦ,ަ7lwƟ(0ּ8x)$BcA+n)IWQh;fjn6vn]DbS^SgD߻N[)uĠ Hܥƒ>=s+.؛;)ph[CklN,oE?jl1=e-&efüG~x=B=R 9h4~8Ap;-]lĐZ3u0=3Ғn9Xī9 j)oILu90ytR –qo/s7 5]6O+P&,E,᝷&rWDu,S;%z.%1$o. PUc!{ wH֤8d^G\kŀ%n*a?}Xtsb־Un $^GuIrU{yY\<"pjƈ$yIe:Ng1Jh6Ïc,)2,{'TWFaNDt֔[:vc '|sjLFBއ5M&OB9>N:zRϋ>6 J&ߗpU mR}J3s]UxzY dd;T_8]HiOu 8̪!}Ԫ糑W?uo۠=%ѻp<,6s_zs^w"(p\j\(T _ъnMt}95>m.joc0sE-2&T"s@䗰6SD{2oH>gb& ጮ$<OH\.%1J^A˵UZ6$@ SHC^vQ%w;`9YO.(ĕ8InK!y[sO5)߮UG8h<{8I_J9󣻍˴qO7㣀 {F1&ȤoI,N9w*G^c{2 ﯟRi ߸WhD :Ǵm^7T}#OΠYS;"B7|tXwq- ݈{Qg03JpJ8ɼlrmگVӓ!lmHKwpߨfn@<~2Eu*4?M(l}I`'x:Ho<7eG+_7>FcP?֮u&\8fPO}ߵG:1 pp ,{ŧ[X6=۶RChB[+%'@=@l8ACyoMRTd8J.U^}Կp, ; eO*UO֜R3x9}UL=>M{in 2'cZ -l)93bߓvk3EF71 *YnoAs*.C=fCgz5a钊bE)>ʫM7Vb Ulwe ̬_ Fl2=l Adaz:`.8JS{L ߟbhV?xug+5(8†)~:c/ZSJM5AƸv=j[o;>;0TΥݠ1xfA-D9/Rjr7yhL/=>`W|^-\FUk!eHπk`gBOl[?K7X6Æ7\wGjX XT~%{lbLYn3;8qoLvW>fAN4[Q]ɁMw r6gqE?dRbiAŝtOwZjꥷBxឆ8Τ'53tGHg, 7Wofi8.{~~8WIi:3?^Ydt_~לt%[Y,bpߛ8(GkPˏ&);n"'4Uۤւ2,hr-nюQ8D}D4s*,IyM$ª #X 1J pZz"56zB*tc8VN76z"+Rl|$v~9d endstream endobj 46 0 obj << /Length1 1415 /Length2 6638 /Length3 0 /Length 7611 /Filter /FlateDecode >> stream xڍtT.)"]25tIt 0  1C  Hw7R)"HHI41Ϲw{׬ͷ~~~|@z-].+%TGryr^^~n^^>< Ptu .0\\`$'Fp8@@b>^^.by; PAx@9 :_V$**; uAp:i uD;t%X%lH'1n+7FCtPw #dx@-_a@( 2VPp@ Vr'!aP7 í~T> s[;e`Ԁsܮ0_#*e GO݋f_5>U A@A^a~>*r&qB8QC@`P+ @A|w?-<` P(7Z `‹g(zY!^GYQ_[ր"<>\  /Q/~YE ?pk[5c`+6@X CrS^A^URtspf?`G_nH(j#ZuH0J2p@ܼ0WE'J /9P-+׷_1 +B`Wؐˆ}(!_]\^xգ,A%P+ofx$*`pf cmǩ7T[ɂj_oCP4"lWrV)C>"rf5kQ0_IHW-V)ٵk:Tш ,O(X2Wc_|6Hxà*vQK@"Q7mGT{S(HAF^`1*}C'IJJl&lqi=;Xa/7r;veki->:\T9 [ nR /MCw @$v >_ }@Pm/z.>+Q]6Ky6;Ooȥj)"d?%!!C\2͹"w_4jag4s8Ω:zDpzLA|]Oxw-Y]⾉3VVTU$ur07SdmW\{Eu,e1ޝT! :s~U2M>&|T:|WSHNK'WS7.rgDvECRL4^K4l໎}rr(*_e+H6J[QoUZlnG} VܠAQ +6KCo׫Ǣ}q?qI1n6Fiήx0|.i"BY,"a/oM$WFc \Vvy0-8gheB:2 2 %64߽\h>vA.lR&Mj0 p;B pDb<2̧Zr>- 2ea#gٵG1{pI‰cRee2,:wf2)u)]suCߟdLDe[aSe+Tv!/i;.7 Ue1n"tL1*Eq+Wz`$qF0SURˬ9_dCtJIdLALDcf9SFSu?ثD]Ȅ(B rԯy%vh5uX_> -f[Y~imCK[A% /}9WIeMn Yz+uҮVU,Zs\;di!ExMAj@ k G$gʌ8́l'C2"cNI>Y"wǜg@c9P}Qk8Rx%a6GXF0}}rHf8Y &~5X l1ϓwKkT5w"gY N+ŗ+{v)3]Ǎ d٫y߈sd?;0q\R#Vlby "{Jx t~=TBhLtHT=_&^ JARj3a 'lC)pjHI ˣ=i]Œl];\< qa9Cw >XqCHƬ8Uڐd#EkA0b-gdz²pR zũ仑Ďާ-S.\(mi$?b $hO˘_N~k(y?H҆6'uw0ۄ=[j >bZ,m$0od;bp\cM'6jo6/!O呢U"(&vhSq75*['@2'faQ"m:$Xugs@+]JoϪbK9+BxcCE\f=]cbٌi%s.L ;;|N=RؘI^N,5mٽ]hnY}Ijkg43*D&>=xr]FѼ5M3%Rn:Gr9:PYHq8@e :xL%3W5ݨ=n"^)aڽ(|6Yᴜgp"~1z8m3tguN4,5~7X[Gk[ޓ:v2gn`F@s>8AAP.ϯ_jifoKǗGս^") $u`4ST S>&\*τaO{OڑV *<uZv넕?s}Nǜ$+-=CS?fArP}֦%4ٹ8gR$ɫ uw&=mTd!txBf&р|ຣ~R䖪?H,.).ǁݘri$O\ѻonaٶ QrX{b;<Ľr_\wCRN6m53_±)H[U)NJOň Ua=kxXT+cV-AUn:MEaÜ0|zVMގ\elW\S djzI+ke:)~h"TT9~5Iũ˔eXϞc5ME#2iz&.5E$gaė 5&/"(6lOg^k[׋3Ȳwȴĸ<`IJ釃Ai9h gd e_=[h5}̕zekVM'f3,+ۮ3ÜՌ~g}tR>9(bu _/RnΙ3EySmk„Gȸ+Mwq}}ca MfОdj>ChSDAW;8{<A|t Y;4"_ b6y}]W""fw~[SnNx>z*rtӇXea*l}[q8tw1cQ ؛㏇; K< 3^ÿjS}cQr}c!l$CLk&כS-*N&c?s,skGY{!w-]xCsH8bQO-l E}xz+Nv &sfFr֞~/-pқcm$No Z]Ux|z2l~ImY.S C~e7x&/ޙ&{ncЗ578 %uV'ƾi_Oj ĹyTyS[z!7hL숆H"w׬zcCF7ƦH5Mbƀ^}0E=D,!2HMy~;A:]t#B秏yy vB[sťk#SI B1~V̰S* ;P${}?p a}y|Uw(|wpݍB}\(s*:DsQ*j{=ē>t=vhE%|}ޞ nx DF)%͆Yl,*%}0DRpt("w3KB'Ms`V>[aĊ޲‰dPmƓßZNe\JсGm7$"AiGOʇfAxa닏6˃tco5A/r~K/xSC\Wc^acϯ']?%N) ~@tHHi-hb%9UCsKlzNJ{q 1h-^H- 9ZՓ,99c:3)Kzh#BH_}ng'>l1 }v|0mz(`%04SfGû_/jq84==[fD2Wq2>lf}uP-"빴sW 7O'3H;ި2OSܨ\C9$*(=徶6w`.FNm2%ChG$8dvF'+Nw z;&uc4SPUno ij)3O )Vg{ ;~ u]b;!{d$u^;~Sv?De|l h+LӋ\NCP+Tgvi".⼕Jڱ jRE6Y>x^[iBؠeW=7`)XDM9lKw]BZt:tɆXx!Y%b_r$5FSA|\lUd,V$yUtRdO> Ӂ(jrK{3|1:W%7̗@m.7 *#Uq[>E;*flgZ}>ՠ?ڳojΐ"zV^C@H{Mnat\_4nAƄ~ _xTVNo='gSaoH˴ͯ^arDؘ1*~1|0dVX&4atMbHql>fr߬4\}.m0쟵.JwɎYcܩ-&]u:}b̄DMn=U 1.0Sb(g|[уiӞclFJ˅X*Id߻[4 '~XgX>gXr&#/@j@5(nbQn8a QoHf|rR=H94. Hw}F8l+?ɷ')\ &T%̖ȥn Oi&UU}_xG>yf Q24._)6hC C Fv *)QעNjG_|N>sW){ٖi=2+Kj}f^Z5#݆SCci)Ԥ.Wdse۽mHņ=ڰe{{¦yky GW r?ճj?EJ<{@&z$Šb휦 U.҅0+Q|hiP8ӸZD_VA~jV4F}Qݲi1Nl“[qb~-Fb'>0[%8:܀A36OJl@h? ?.mRb1YBU~yRײ36}_2ՠV'_>S_ :\?=O`RC"&e՚73 !Oj뱾-=ޤ䜜2I|9+W]t(;!ϼPYRLDhHh2 bZԧdӘqz "}wJKY B4[&R^)%e6۽ endstream endobj 48 0 obj << /Length1 1571 /Length2 8317 /Length3 0 /Length 9371 /Filter /FlateDecode >> stream xڍTZ6L ] 08 0 " Rҝҍ%!z{Z߷fsga㐱s)@<ܢ9 ]n77'77/#>c1```  xEyD"!D@O@c1ʹpD,,!g l 4pG3"-s> "rqyyyq9]`/0 r` 9pvj @0h >9(" \n  U+R@p77y:r m#*suq#A,?w'yl ؀P#`=a`o7B{<_Wyٹ@!>/?muqs8xEN`#:Ɵ<1A9zO+`//tՔR>{)9598NŞYF|L\;`hh}g\+FV qFBUq=^*^ Dj/ð-ռȗ{$nPCZ. x͢DSߢQڌ@*$I7h0qDzה%SȦ "d&\SůD몖SAR 1u zl89ֶ;5<84xOq^Q 1X/>EG|d{-64<)MߜkfӖBWʿa}*Oa-u*Km5fz*-3E}*TFLily|@ V^^=>Çf- aO[ZtfV*r>TސlFSrPh^idp z 'N_vP`n($.Pq.gmg43UhY`Rc0|[!#ѪY$h?Bmh!Ѧ7Bu"FoG|JVĤ &{#E+R]jd䃣_͏2LRG~BwZ4RF~LJzѩ}X|ǐUt>w|IEocW~R_y-\J:WVR*;ٲDx0f0|/^/qBաz'^L*3|/DK1o 68j^Nmh{N9 ژ5;wIM;/0rϽCc~+;a%3¨-Jc(ê'ε%^Bv @\"!rlfyi O)TOw%Kˆ][#•;\ {Ҭ*˖ <CZg7+I6#͓u[| 1n%3TO1 %WFTۆo,-)س u[czQKZ9wZy_>( 216$|{zU}u`w :&\7$x }eGqҹ~c%mHRyE9Ka0Lj!sǴd72VikPRfpَlvp.QV*YXt&d3'͒h)ߋ⋽0ktH\ֳ%bsIUI<0lɦHdU`SJ 3?\'"["X8fR*W:$/\QFPl%Sݔ=3X~My7(j '?b$B kD@!gфZH+:IdS|U8c}rZYPSM4 ~11,pr% jMBUU&`Iƪ{U^IXpd,f9پze0 &sP}eV;@b{IG t-Ib%F/gNN6-QǽC-GPU0wwv ?*G&S]?? j7>O޹J~ק3Uo@Dfd3:Ncd`.0T3VBC,KMELi=a()Woe tW;Q/pVVf//òH?4[P&!0!=;ٺlN?Qj~ɓ.踡.M|xA !1tv#QI0 Srr,=#*W9 EwT5Yc~ 4 r1痘PPbc<븫 : u\gvte`T9T˶=<rVxXT$U+k ZѰm LcgCI4qoHFX9cl %lcZG> UfgK2 j`ѐg 緞AΜDzMCsZrinou+<R^ćsľ[Z;ZYS)/t˾AđBPzK1R<ݦ*0C">{+&`Γý/D&0o?Dcch.d8%oIX>K?9MzcmSv6>jxG?v y’|D ^Xf[H+Fl0ƫ$imvh^w:Hq/ǥ4 =Zȝ=2|Z p*G)dvxQidnOԁ>lK̍ :40e7 "eZ{4@-ٰ-Oʡ>ԗPZ`][as߽D`SKx[E6aO[C3\1c 0}O; 7^UO$6Yj()CfkFsq/ekHpN{17uKu;8cB{=y)7(eɇso5{Ϯ7 ~>Q1>-NG]xXa0WNz6=!yJ C\j/s2;8OK"?76aI'kfo2zVQ|@^`[*iEU#;C%ideJwy\ n ;/2) /K]ާfhJK:9Zoh4GJ? Z7W1~x,Q~L=-ʻD1(fOF/ͷ)o/,'P)QR0ͻ^*{L tߎcN~VoHɆpKr [ fAmYu0"~*J`=(FTL .2iW9Q>mݗU<|yPϸ}Jqh=߾QQ1vsFRm& pˎi٠@:&|Vymq,|䫀u#V1!uJ*)ۋ?$oD ~KNpMԙ͒b{l(٣兝k *qcvZq@5H6)j$r4[/v~Z .Gt<P:}XV&?E@nTqTh}ɔssa a6oEܴY]ljb M9 hϤ$7̲<dRF{ ""+LVK;r0ЊѪkjԪR/WJAw [>47K_ahvTV #6*iKpZ|ϊI bURSw5c1IN2ecJ/^ n'MխX6H7jS)y!bhM3_v~u)j>JPSl.sM}5[l6f+*5G1sV81f'c'7iBw/}æq(Qww1i7)rݶ;x[dB="&Dv4 hp`uJ< n{FbتsmNT˪wՁYtOwӂ6~RUREH)4WXݲt}J^f+C94@‘"طFz~?cO99zW;A5f$8I S&gVPKC["Di#$aoT7cOauTjJىrk7h|6fNϭhxAY+H^Hk|P<?\A[#u8osI<dŖi:;lӨ]6czs~-۬ST(b=ܡi[Jέ ktPvei<)>6WzA41yeW3(mYcbMn DλEH,ei^h,DI={iXCɥdz;>R--J^e`ﮚM)= Y%yѼK'rn2@t '3eBr>/{G69X}?VBl;v\^p]p%9R=(ՒV2 L&&Fig@߶>uJiyF(/bCo= ]z?]#DĎKmFH07aA"uUdZyf{Gg}tǗNDPz`HcNr7a:-f$Ueg4eBb^ێDؚQB\!*F)ՕdJjB\OW+דT?0%:[T2])U}ɠ#Hfx1<IYo]eY)$zlwgl#kU9!q^?Tp9,K#vJ+{eb&ApȱBȥ/,*#..;E1O|GЄ?|93_mh"di㸧.]<Ċ7[\.KiDӚ^]'n˒j{ęxC]Df7`62߯N;DŢ^M+:aCS|{#k4gXNn jib|X8Zec66]mSM&ewkWI\;\huds {Eehs>ꀟ>mS 45Ly4秛Q>fܰN\8-#lݽ0Ή]OP{HMlP\ZrdDD(y {gfj[JIǬςSrL,78D# ʱld$$.2%TjeL9D~ hvz͝0O+lSIY4vnaFE MsҨ-WZ}/ZHF+}m\Zm^Z#vhAʽrX*[vZ_ ['TZCV9ѷBO8lTӳ<6kB?QYtrE{l ~U\tCn 9 ie m'L6ӚMR_"*s]Kܭnqm27:Rjҫ|/u\gAëT~톱I4j#%n_ zE_Fp<ӉB&}3X03i^4}82%/<\TF%E Wٷ룦G#> endstream endobj 50 0 obj << /Length1 1402 /Length2 6509 /Length3 0 /Length 7468 /Filter /FlateDecode >> stream xڍvT6%1t Jt300J R"H)H" Rҩ H)ߨyy}Yk{k}F蒩;A$ P\H )%YñH Z?pM,#`8 BP9%@e*`HwAB,G_G((/cn047|7$"W=q8_%08((C0XQ ` 4ñpwr0wa GmA`X8A; $ 3 Hj  /_077 A=hc$0/C? !}`߉À:f@w"}q ϯ vĠPp4+?-$FzXј 4D#~ B#zZYT<8,W~@x'Wp_oKM?"%Ñ8@6O #p@W wt#&ECă!Onc>!6=\440@!76ߦ6?jwG;Hd0sC?z_ DM1_$/Unބ?!8aiy6 kd0, PÃ318 P^8~ Q}~b12 -# ,YBH_Ãn ە^7_ըsI* Oa[N(2EEc3:>.kMo|Nהn|vf> f{3hSGRm-_u7K6}B:b棠׺u3b'V֞PULJrz<&T`'K)ƴL?vp8T0tΧ&J./H9o%=`z7r_V2p!4Ac;nd3^Kk߷ڨY~HTި%][?`OV05=>S=*[g'oG$(&8%I~o0:%{#~z]/^j{ЭJ첸Du~T1_m+l1K( rV4|μKG_aښ}rcyn]c9VØ"$otg*oG>SEmN3wS1:;3Ŗ3A.R\gG*+|2)uU%aret9R]4ıcn3ҷ: W)A])f~6NDfE~0sؕz!67R,U_ ʶiȌOA/Uji.'rl `q4$W;\N &k>cMyFzb%$A[nUueuݦ^_'ќjo&̃Q2Mk",DA̹/}!F m3kDuXyʜY*y61'9 uJPnDhq?ucT2dsxz圗5_/=;[2pj=s(ε'(mI73^?nQpջ1!gWF[1&FO $a jJ((-TԈs: >]n3(Xݻ"ɐ^ehK⠰+z]O\W3RiVGߘ0 OܬYușd\tn79* ҆>v|vh^Ǵ[ U޾˞D-57$h#AХtM#R@lN3zVNmY'$QPL5ǏoFqXtH>HKCsus(tL}@a}ɳ 4m=1#$<["jnK/Xz\X*6Vu>FihыR8MRYX!ϱith2x;3¹"|jO!':(zYA,ǎHAIBc@9WT˳Y{S_i5WX}z0ӎ>52B|nk;D>zLl24uR q7O9-H*jݕj÷[bwisy)'mq{U`ylͲ53M'w*b18|e/t-'r}gDSڮDkM,\*]9{y,GX=-T^ϑP͉Џh}6;> q(!*q1n?WRD34;kVMi\]R40O`-/ō?1_(6r8bx21PМ+Hkkd#oxN,Rچ&8ܙV姑K4-7c].]\hȢj8]vXt} a2܌rL0!X 'ņbyw87Wo??to^FoF pqQ ȥQoa宮f"[^y9 ^u)8=- QCϯkixJ7øT^ Б|6"~OP0sBCv¬xyX,`ugh[c[r^'` kjZ0)m/7Kp6wcPB@ jW?1Twn_l1f.?db:e+1w! -OE3c[)9^Dh[C>CJ:fe`dx`zXiEӛF%18rCM,4אc=7ONqf^͋"|GL7]m_hN+?`,=ۤ^@?Ϊb7bs _ԝxEG+RmwCw-6۸!tޫǁ~u(eY?X7+Vk:{u=SK>\37/*ؽ/uCk#?g9}mns㚷/3E-Z+H𲿓:mY]Ave{O(+u u4T{LpK,KI˷[;vXޠ dxS5)8Lw1YNV68bnxUW2"tj@vn50ӿ`UcIwkSHKd >u\Ƽ±qU!I _iC{IwU5\YmwrK%fE|`:.Zw)Y쿧ՊV(F^ 8 &R|re@RD{eXM 8ͽѣ!tmyvUJЩ%nqZСc3`ԍXrUgeU_U"S6; ʅdjčf₶9I)E}"~x)-M/s *_ Mcx.;10z*F<%C0l,St` r 5WL+bRIuV𴰣U{fw6/ Ӛo׬kXp%. @=ayM㊏)a F9$E [RH e p^Aw;K]UHpDTvMWEIW Q ^2O=\"PLOts :O5#Wk!q=xi*Y`-j%p-wFuJ= o^09ZҥI2J)kv.GWk_ۮZmTGd4^.xl1Y4Z,ZrK/d$&|ag";Arl{ro亼s|3-mMqE $䭹^ N˺qt%pEWg[$ o7Ssh"}C tRb=Pp(Ӕ .Rץ J[Rskr؝>_\~x6A!X*)jvʁv-o:Y(0c-'ٖc.nEsJǖ+-$03l0u}͆L鵙b Xvgz0I2 -Iݨig5`uZ@@UeW ( '͈Bx5q]ŝ> K8mLbc`wOpNGn~-?Hrj̪~Co̠kdTۥ& Tir Cq/ Ddd-(, -u4KaT8VÊ=` ]w")pҭWv؛(0ߠ,fĝ05z*KLdHau:hCCᵢhVULGh볔es.] G`O $LSx y{}cs-+-/zFWc6YYwj:@"&W'.?3~WMOɭ)k7?R P+,~5dJ˱4;\r +a0WJt#^lf(P/bBdK5Z*NN=+nu91?(*V(畧5ZMm/(V ק0V\,6!q.ҰU#C뭷c˼Nצͻ̢+c9VeknưZ2tuOM},qG Fsq*@pi&]KqMѧ;qmNԍ؞ ^x0+{H;\}$xs)GP SO)ވ^NjtA(`Q, endstream endobj 52 0 obj << /Length1 1473 /Length2 6709 /Length3 0 /Length 7708 /Filter /FlateDecode >> stream xڍxT6E^Hwf!:"7Aޑ" H*E" ~k}Zɻyf̞gv΢oįh!(~!@YBE@avvc( '`7 ݡ0 PhxĤĥ@0(7<NpABP}~pB|$ t@('+zG00B?Bp8PnR^^^ WwQE9 !'d.4v/BBhCh= @0A"@H@_x vW7 w8@aA0w @vhA5E]H] U0cV+#\]!p;TH}>Gx^9@ʰp4C{@4Up1G @ `'_A~ntAPHH"C( 'wt4 qk? 'z0{o j)_F%%7_X/) E?|5_=hπpKV.o[E`Y]*gsE W(\z tY7 @mDӠwD+__8] ׇN/׼p>A{eC}A?UMXT B"A>^W?!TC (G.tWcA;$ APl`?_m: HcteaDAW(7H$z ]7  ҡίB/k7GpWV;,"EQ/'+=Nן+ 9zP[W:vdsOZ';J4`$ydməl6s&-U}P|NʒFU|f¶"04|Pjn9./]@F*Kp-eb΃Je EXėO%x4:*{ɣ!:#۽|`mM9)ʉ6M|(F׃MSg QRza$D8جD!aTYJb0&akT9;&.=>/wCCFɠ󎬽ךLyTPuZ.[@ü\lNu s"$d[-N1V/T!,*-xҺ;plǂ6Zyr>@O6%\o+YL,)0 %/}b=YQb}CXTJd2ތtpnyk4^c K *E[)L,AgMg,/ol7}/K9&)^C04P]"xc \ɡ`&@Ug9JaA/(XM⻧'As=w>'{[fUuZp#-7XO/0W=־^nSRH#joC]_23fdOa}HYπ1 &4tfR˵R\5#R}etF:0\<ˑU6]7H?@KB'X4ļz}![Ԕtf/ \QOU',J2}I~z1nCx&Q:;p>]؁SgyvzZ$\BV}=Y 3&Eߒ>B2g<,Xp/^mOY!ڂmf^slXIR7^pLX[b1} ":\<_ 0b͗N0"P=S%X i__76qQFn-;9?7! J| u~\o4WN[q|82[HYi1:*˲>ۖ#<8CÒ3HEzvۖL0`]~@тh+]T0msI҅Ї,Q#MNepvL{ 3.ulj]m竮,Y*bٮK.2fEg8{sE=]-M1_"c ]j^hK96!(1+5>j-6rg|{;l7V}V}#~z<]Szγ2Q`!R9%69WEHXYś9m=x+\ c6s@L}6Qkb~}ZVʪ| wx$16>Jߛ:gCͅa]k@v2x%tѤGtpʌ[tB/căbxTEG|)DĥY+˱R2ъ1_{HHD"Oq)-GȆ8X`&:h^iԓw?/](`Q"kv}G me tno☆ܓ0E}C&G|f(0?(>+pxXQORW32?z*33a yeμ[|)=u/2^!c=Inn5j<_3hwL eץԋcj#)ں`Y,Էy;pp{ %Ze;zt94]s^ʙsM|RQd4Uؾ|.z:G2G׃[T'Pm(ꍄ "mvQԴֹ$ l2*"mH?Qc8y V Yx=/2W~4AwP{|9o iLN}wL I7Nź G8rĘ}#oOEϫ<ս a'b{Lmg%:/spĥG}xzMri]>rjPQ3yL26J-':Tι JcCsU i2Ywn03VK)No5`0N~ܩ6!mcZ, GngVtW.nɺ%TU^/zEd]>鲯8\ v^H~28 Ey+xt"I7NբQjZgW']BXLjr[gZS@Z֡ ٽ/;!ވ֫,ョ>E  Vzs(]oU=Sﳵ9ԛg,zt\3%}_$uI|cN"7}(Wss˙U 2Vrm=jgތ&Lo..ҕX e\mCN ?8zۅH0Y>pIAfgҊt..."!W1LLsYh|*x~EpWBRfmˎS +O8(Z<3oї;TےF%荂]->U]u`p:d,!1)y5QBa}X4B0=ݗ y=$xݱ.~}_Iks;_Hsf(r,.A2=BvD"Tq'nH]DωP(榰CZ@keoә*gksyxq?kIÄAK)h<8sQqʕ40*Gkܽ4reԴ7"pFJ< p[p27{x7k ڋ!ҍE/ XTۥFWx*0EkY$j|fs:~.i7VCYluiὠz߾=;_▔׼R)Fu%Uܕbq[w ef* ۟:Ԛq8n&ˍ7I?&#~ɼPcly> `F9ǮTD<< <R2gM.iǻV/zVSd]2il.G/kbn'{1BjvlHE<+oe{N04 $$4n^/Q;Ͼe34͆ 2-no/L/AL8rC*fGs+)hHҎe|`,8 eR?vxlZat`~f8d(Kf:{:^|K̕0aiw=|H>3/%ĵlrXtK]ϴ,(7dk\nǛ"(^vƠmA7Á74$KZ'tu-%_3>mE;;5s;$yb.?]{.@kKu~AǷ1$աFsS=~*3h}Je`"DD}=SgpJy ̆wǻ|!TљD w]m(0uQwN?݈[N%NpA D3L*.y9vemco8&ynjY?$<Ƞn]O> stream xڍtTk.(1( ! CtKJ C0Hw%R )tw H+!9kz}^6m=>YkT G$zb!~A"}LaEp QhLBi"57GHI@J`M~u%G8{"av(t_\nNP$ 4(;"C@`PRpIڡP@;?ɕpPW(k`cdD};\ar#4@75 @j?tEJC 'g0-% ~> vtE0Gw`\!H3ʕkD4[V[#p+ѯ`H(}?u#l`pk_CX9a.nPU\?-x **,;F/=3` ]Ϡ >@kDdGP?g0{ ޞe;z{@9]EYcm?&'xD|D@ !&.wm06U t;~7߹#Ь!SwῲH )9:6sf/4iPhh"2!h507h!md aJ06 C?_RsWدo :J@lh}AW4/h"3AQ{ $("i d@C}6$ѯ `W0W~#0 Q4 D7]M}-~( !@@W42}[\n7AqNOW"gi]Jן=U6:lì53p!Y%ع*w{~j eF0D'0߶41pgX& ;'@w2dFTlvV12،,iꦯd +C!s4.o~'3Ez{hi%=[vb7=uBZ+w;Na N &&z'@},,3u[mat@G'+[ H$-0G V,KhZo:T8l(`l̞}@׿%`rrEFkZsl){QYJyhLu3ytw'ӕw60'</v 3pa(n.kZ\hEB(fMjGțpsk[C}Hb̮́s#GJ 52@Ob{rVM1X _(bVQuW?V-ٝwC\;zΏc]r&,]qxQKj UzN]I2-m' Y ?bU.eL#o兔@1?’|]] ]އ}wD}'BPB~ؽWtbihڰgBmug#VA"YԡH5ZjxYS!vagy|\`hxlE$ B19nc (wyxP̆DU@vsM\#X#I諹s;3ɐgaGwί!8 dL?L ]4Rx,.6c%* !/*M} ~:MxyD1SM_Gר!Q.G}d/pb l| !JT#s'C0ӟ$D %9peX$~Y YY(`6" E^jpnj&/% ֻ|b:(gN;=s,I%Vi svo=_:mClr>0q! LQII`HGZ1kUD%-NՎT %q/A]gKܨD; ~^]aCn9ƒJW>0-lE{ 4 2+jD>(!F/o\t=jl3KAìThրR|:)kWǪL}ƂAkNN4UyolLoB_&)ۑ{97pQ?onu4M=U'ŒD-NlPϝFMhzwdyӻ!аm.㞔̛f}iQ'H/[ ˣ$[C}y=3kSTaa?y`jخһQ,Y[VƁfc4]k.`Y=0|\){//q\ogqH]O0-U`#OP9!┃3>%2TD> 6y3*ASByt2nV̓Lco?o J< П,uy`pazar Mv_'bsA]Z0O ^ KzCOPߚ1$7bˏ  M:;&b{FC#ˆ 7 81JOBDHˁ< GS7K.+qXnfT( ?Zg}Hs{1*? lrmR%,֦g v.JdN6Bo jx~3;nF*F0` YKWȃѢ, n9Q qn r gH+hY? ő~#|-E h͎%eAkšH q9(KFpms7g,94IFw9"V:3rg(ێS>V% 3A%ڜF=:[CI)6:qW7:$/GT kp&槉 ر@]_q1YOwLƓUyƻhH~`\^Ikz#Oc/l]h{ f -;:#8KRyz$ngD8|wЇ}BGKMF./jTY̺8By)iij'aۥIʍZp=eoҔDp%eNw&U=vZ3\ zmLԽ,z))MO| g"b&c Pp}={ ɾ{tt6:S$0BbA8.-CWē:fGEuK¡;])!@uMPO$;T&ԡ! aMHtu R$m۞8-C{ͬ.m[Qg69mSUw_I2y_vZ.Fs`U?] m*I. G;멀vxF \t(ݤvzB#x&s"&KA'bKxԘޠJDg#vۇLo:f\%mwOg)Qa"&԰eZz,r'x˲Vc:⦝Q75b$5Q;ޟEb;f#( l%yxY@8|!F{ŻhLD}'iռ۾8U6g׶WXx]§f2{j&`lWFWdZ"-7ar;]S\=6a[yxv*V>\ lJn[T%=x d<+4qsYRfN͜g}|RyՒ z0TC{4#+^Ju>]YGln͑5{}pB_}bMmg$:J_SBCʍ@SRE-y֮5wbG13VuL-Yb~字x^ g LFT2yc܈|s#{`[^Hvo{eEsCb\񚟧i *xέ]*L͇I#&#0Ӟ +`o@F&ޞ}UM1\ZqaFjop33{wA7Er63* Q-alP<k}$\8)yū.3SVpLC*v{) ~2p,xsH$~sq yNuhkXJ(rMvfIGy+_kQ6y!EpW᫴фA,^tU8\2+ӫ(}~[?]\"8${ho=^Rmc;~$=AzG*a<繫q_ $~.6`!=Hڏ Ov?z̕u(9Аq.|}ʃ$-l<"6 >M7S>4Twi _Vvq>MDdM;?l+m=ok<ȹnty@OVg)lPhUM5R5Wm"isuOH3ڡR8/b%Ѧ֧s(w2D0e'fK'e)m:^ڬz x\3Ub­/335趔'wF'%4ŀ&5wԻ 5>isr({W>]h[v8k(67-4\O0QQg:YӜdieVi%.F#R#DfyL3 f臜2~5%\ׇF,/WRi'}DcX[}A c[k6L1"uLt#]n?dF.IYl΁|BJІzԽ?Uu\7Uk£@g 'V>11VG cs\L %լƤ뢤(ˎpn5Sef|*=ȪSo:%l3=FQtu&: Ny/XG8(ii}&xCnV_^vfYIj}q|ٶ7>,/了*1!4 {V\dOS_MQmc5ul9eD].1Zd[ՄL$9,r%in]1Pe :Lf%=“(ԏ6xUUiۯ7yY27+ȟ[Pў|; AUo{amw/?>!~mYʉ;pj;6ল잍JE4- =R]З]? &Қ8]6xrC :"6GqDI'# =fo<Z9%]\%)RF'ӢܧXb*AwLЗZH U$0JQzZU^|Jfj8\vDr;Y!|Ϊ0z vd6#!ٳ|%_:Vv5cPS]Ka)v<"h>l/985@@!Mw<[C弶1^" F,]= F3:U- DTph鐗3xm2yN 5'kpH&t?Ƹ@dH.{7z|l\:"ސw2NPŵu}={(B{(5O>&K<,^ -j_L,^"^@aUGW%T''^?yz1vl"ܙr:l}ܴϭLp{VQнIKWX7n{uVKU3l\7¥azK1 :*!##Eb[}]n|+tC!}Mt~K=@ԑߓH&%iGC"eE$,C_ܻݵv*7rIץX=kkwxZ\ԼTlrh>89--u00D:+y^٩k-*߄,mӨ98J) ZmhtLJ}6^i|XOv[?SԺ4UvK͝CQ:g]v&k'4Q}=ڨ2Knqd7{~2oUCbX7 ?0Nlz Qjc,9p61Tőܛ\\Ԛ?{қKGon]\=9vGYf/P#j"GR xHEˢ1۾*i?*y7O=LEU`Kڹġ&=37퓹Te.~ރ.ҳc{w7U36Zwb$$:(R'1~v5}Z',BƲrv̅tWpFmIbINcGEύC;3-%gƥM˔* A`_>i{!:.Zn V47:gN= * C4KZG$&wkBxyYz59^L ]WN W n i2a FlMT7l֩vm%o>!Z(]i F[lB'w័_fDT0v2wR jB{}Xbb;CB5ڦpm¸n>L27`SO󢣮ZcK%}JIi endstream endobj 56 0 obj << /Length1 727 /Length2 16764 /Length3 0 /Length 17351 /Filter /FlateDecode >> stream xlcpn]-;'ضmvNl۶m۶mΉ}V}Lsw6))#-#@YLH@ CJ*hjlig+blP75(L 0a;{GKs g1忍5kCKKGUɅх$eSS) ,))'Sښ:Z\-2ƦN3;G09?l*br*Qaza @Ft[g'M $I:GadX;L-maś?f>?RLLv31Pػ8:dLLmBv&QwgS[SFXZ{Ig5A,,MM,mW7)g]Ml=Ow9zqy9)Mݢv&e5t4nCwW5tvth3kHWQBBv^LLZfF6#;3;khjofcΘ;*5Whz~@zxmVrD^; o.wjO0dj:0\wܷv]!\L X6sF4KVEC/8cAy8nң8.9r7y#׃ }[R,}Š0k+a!> böEלM~.*b1Y%BxB0<\)lsϕ'DR~zщ95 W_ %lAGA %DaC YEbSw@[}q*ս.*zǎ#{Ml_P  HpXr9YfE9 mb pmuQL =__zp9@L-mQI1,ݛIeU*~Jx9# 0۩wR>hFŏla]bjڎ.X=#,;1*8RwԠԈUleOk%x$ю@Ҿ7>qa,n'SSv7VhYSw5j;Ǐ _Ir'R1 ٰ0c~nǚ.ACt'Mnn>9a^%MPr\Fp dO9xf:*?n;W,i҉L] 2@/MrU-"%GOcBU*٫ڹHr4)(n]f;U {+xK5E'7^i+`2lnN]}iPK  Tڲ'lSt3DTh*ЦgHE1#2;ߖo ) 5Zzuj^ɟv0Gu{Я ]!~nuњ룯!Hz@z0යnj{]d[ u (-rLgх'1凿Żbz`$*z:oMyXjW+aw4-Fn1\|',:j#"?C0Kn.r>+ 6fd䛛p͗FuaQB;1:ҍy% ;R/zwlx]M&bY{l(츢vyg1FN1t =T0 1L ;Ѕ>ɇ֥M(324&ţS YTmGJ^+ij!Q1j.Ս_] ;^6 xwYh ʜ[mE*=9ëIsJ;URy ڷy``V򔗤4%{[mu>LNUpκ gD(695b_W<^]`5vjpi w{NV(ƞZUf_"\#v&1hޣyQ6D~ G7E'QW"`|=E\1l`\pv,c{KըTrR8΅PD#?nH0Wj6px&6Q}e =xqNmIz|*ޯ2ߜM+tv wBb<_],ab|B-wg7%9dMu_`qSOYIC9(.GtBYS8.(%KH %7 Q^f'"wX8mnZMXD%e%c43JOăs4e~"^?v^4c$E 29"r١*AY0VSؙ)c3{f臄'`WXȣ+A|Z{BTXvGLyw rQ\ cY+or>CE.fɤSIYS#cX7~ђI's\7z=-5<@ϫ@z$Wkͦ'!G)*Jr#;I9#;#+|22R'T( TsdȠz Rv-=D^1b2!BiǓI+âHwν3o H#,AlPo$)G|1wW.t#1+ԥAYb/A&8}Ns_z☕)+{^Hc<]%#?l<㓻H ?;ңVbL-V'a|Tpfo}hM-=5{uI:;(Ne[O@/`W&g@ hH&',\*Iצ9g`&{g*%D#llg_.upk1A'3BS*ȾsQP]_NoZQ`K2OHni!‡{hM$[JۃOӾ7ٳ:5(uwiGcP@޲=N(T^I'&[8_? c*<1XX4ii ,UZwg }<\d֌.{+ 2nP u:h{.W*+:o6u%pE,m[r\|??-,f>ҕW]iqa# s!=Obo+es`#BA!|cPYҷvnxbWx~i~tS~X2gO{i^ܘ3pd #zxVoHX0*7 LSKxze;m 0O7m4!hM>מ Y0s (RzsZǑq \.uZɄ O,vh\Bi~m0. o6ٱ[Vyצt(嬪⨞o3g2 rLbfZhPAhsisVIӶ*O}6\*v¦ ~Rpˈq !uƿ3>n2M5'W3l4(H0 a r+hgGԗTJ z6/0c9./r@!yo14&۔GfpGQ}g]CVؙwǴ HЄGV s o.96hR_Ӳ5-B~]ʨAĕk(hH1?q9߽V1;eKw)K 8܉[Zlz}s7)P0w݃r?3lMߨE4$g"1ԲcaA'}FʬޱdW3J;B\ ESx+aN֘cnWxRFc A/m:y+%b<(wцʭŢ }204s? -Z7'sS,bo O$.A1[p힧܃:Q 6#\>#tʚJSII6(A:IYd(SݝH\e*}s-زdk6M|y/˧⃢gmw\oI,v>]h m4s0:ۉ$E"5&D*ٞBaA _94FV"f (EC}Γ`GW!p cQt#t9%&T0"ư/vR% #9ˍ/ATNJ3b $߈̚* kJ8 nC#!HsݫyDeDzQE(/B388GS)ᬷ$ڜ/ y;@0) a鴲fyZhV#C aWqc (vۍ_dadiܛ.N:-#Q^*mXI7];~u~;#l؅kj-cꗿ2+Kd>Rm:~|$Wq/- \>[xN/|_M(?*fG{Qb,r'SwM`i;uZPs UX ӟ`ju=cNf/˵}@hi\+l&snJ'&t#ccх22**H+E{ [V С 7bk)$A-[:PH%p潐 %pjⲝϥF(SۡK&N@6֥vVZEpn#B>f %!$lĈ^«^x) D7*oH &.T;wi@Ԇ=+^Z+ǫLjbtvCqrd/[ v>XO얔csPZG|ߧM'TM2*XO4成mt`)tA.HN=^T}C%$2c/R _#-?ERbgpP4s\3ouA0S4J[%tSG~)"7 LPAёa.^zكy-e p@7-ˆF5C-%7[|~1$c~U+88|xcz~.M&ln2ྈ9c[=x Uνo+0L^MC/#Mtc5V)]$$Y"RQw*Es)ڌ/jqz?fJ٭MwAvhk[ K)VҪ"׈+\P6Pg %Rfy^rį~t"kGR++LEʅ>PjV=Nˮ`U25I}XFSRpi/zpKNf i"]/0׈$L|R1&gLp@@I;SBw!6:Êh<`:eZU `2:$'mŗ{Ъ ڨaHr=sjQ~HYb3G8)xPKqt=N^ehh<1/AGMyB i]eEi@R #詈 X`_(-ʖ4"ST[g[o^=tDTk{']R,^c]VQwо\g^du{ ^N|#,ο!sb4"Y6sHܷh4A!ƻZާyXhw:~y}Egnt\jhwxI¡Ϟ`v= +7f 0. ߛbs,;K+@nV\P?E(ev ;R;暨qrHR~:h >_]Ѫ1*?wI7KT.Wz͙= 5ݞ qZkh*v NC཯JOqZӖ\4pu_ 82hh9 # 3ߥ+i^w W'[մ ;XLm >cSO(Qg؅jP Ԁ]\b {ԅv=AO$[ysSaCep4Yɣjhp@Ww*SܓJL=|JAo43ևįt$x׍ϰê~i4j>fT<$)h3LG}`ea)ѲDY9tUy Y@ /q %4J#g꜇&T =-GQ3yvZ ̨zc.Jv9kWPd\ȥK>z8M4yo>Xb JTPqxݨLXk4) F0NbPxt8GcR|շ©Vbl&LGEm*ϛOοak6}xeDߌ'؄փT]e&/NsӽAD1p#cA|H݇l-]LHuņJfl#4q`}ZMSf$M$ꄩ\h ::.hKvXe{gz F]~v n|\*r h=si`%5 Vԩ֤09“Aϟ8 5M˸^!1 ="VqOpf.4M*I%/6 bJ;Uܬ19 Va*9&O=VJo/W:b?Y`xQ|SǣGVOOeemV }!ry|rbjhio(ǹh;ϠR]8ho uw) bvXV;EAdžxZ$~Һig3j '@>B~%zduFYLjt0s  Bgarڮ9`0OKZ>^K 9ͭ VBHJX\Q#(pFpߐFZ%럨]6ăq7>E;MCD5:MBJ|Y$?}{Iaxu#Ƨsm8p31()-jbH[i  wlĕFPuHsnke+K Nh6't>gk LUoJ%O+c:kh4Tfe<,yu=_R*)]|l@մњbͮ1[>?E %(EN{Xk =81&_"aPerDP_)* EJ'lB])k9]g}cƦFҤt@b=-i퉧`c]&9o]͗. eWSj/!+|3@6T vOn,`7fDBJzDAn4oڰ`(@L1_0T8*If=k頻NU^R 3p"uk&eڵ'R/z l? $c4CCMOם806i@3"$9]@ϣߠʜbNTu#*ѢԢM.>^.9k'b]i dxwNzv4MMÛzQu%WGm;f bқ2@i37ܞxW3n VBW×}dIjN# KІ4U=Ph+LW4鮒\@ i-w1۟_iY(³99w)Wh.uYR4 O4PG$!_WrPU'+*D&kbk\m7u h 3:?= cQ\%b}֑len-pz?3Ԋrij/goo^>VKgDn.Nl!Rt8uvSJih+EUYf* xMU2$X#LrR `x%8!MJ\0~>jԯM6{@:B1GDntSmX^+LJND33y-Ğ$ƃ#%<> ņ57[7V.ѹ+drEפcϗpp;WHrn? :e6lVqiI+Ʊ;\ee^`: Hl!f7`dJB IDz!":Oȡ}\4i$}u xAmXSh>AT㽔F O2VA뭪QED*UԀUZ>I.݉-_o%4.u9kpYUXt-HK|'ϦJ979Bփ#·8ؑ L<8P̿X4F O}ɔ-/Q~kG c.pO(]%[g? y. w噈!_ ]TMeouK=K7_)?ʲqӦ*:w$wz0u $R}4f:me!ie61g`ő&O>Kf(p-sCYmdr30q X ю!QrXw`ꍷ_ܺ2 #еRPr 'uAo힧1R>%" *-zWf?47Zrr)|r+ &Vav N]39m$$|-,ByB`grrJfQY]gmO7$kFQ0}J8]ÿo7'xS$0Կ3<72ey^hZi|g.0-Nb$—ǂn/*ICƥNFlxV)+ 'w!+NPO>;lj/(<,c|^{.4<}A6ĚxWBisUrM4grL6`. U㘳OTK-g|z 08_vrA>,EQN>,&B/F˭85QU:Y8=߯FZ }z?$Sz][~,wGr9Lo.w)737 +!m $|YťW%OTrUI)C^ɥ:7,ޜ7D\ 3`-Tp {šn?|%E\Eܞ"ÔR *Z61|^wx(vdeBhu k[QWPA]D>pr] a/#NBRC2Ɛ-]xGr QXG5q=8C]=NهM;~'8>ap86J^jXKrՙ/q dh"&ʦmeQv ʽpŹX99KB(`YGL62ޜK۳Aڞ@*!>Aܷ\yf%j |X -lӓh\d=\RhYް$Na~ti:L5mTCtނ@:9=R<\CJ B-Qc%g ޫl@q<*k1!TĶ(?F ̄7yOB =IfUF͂~[t."feZڙwHKnKS?.G3*6iK&'g%" pVJT2gHu68"͠ :#(W ҏ^bx^| 7jŽ-2~zb]P:\q)E9'2U=Ĉ$Ov"kيz}iX8on<ʲry^=T,(أ$E; JQ<+!iۺ,kuOV@0F#^<vM0W-0spdY<#9Nw=,$B'6)l#J6CPΑm(f2 tek]<ۺM\N0 }} :Å^/iPkrPgZb4B6L[vTЄ,nN8E0Q0^9ho=P _#}ʳP\RFdeX~Tj dk3x)Hd Qosfĥ䴌NY.?͐V]oZڮ'c<^nQgTs:yeX,Uƺ y;F#thjan-iku ((m}J'9,ڦ $C%KMr{rk۱1^q\-!v*"-j7'൶3Hi\˖T;x483&6K3'﹕3;66QFseo_[h^V4g)eY|6T Pv82)ZK )=:$8ղzl).-'"Udο#!n8ՅU2 +I;}M/h>O{N}jlNsiܚ ޶,g}l;NİxY{6AØk< [j $>/6R~li\2P8N[$ P*VqXy :h|#DAK҂ICN3%TX3 ,t%H#zKq-wKZ0;wWT@yT#b 4]̑MJp-A>$޶P,bNv_hby+蝖!;AGs1hJd> Y6 >iH65n?e+%u~B=,uϹu,šaq //5eXT)j^}Wvss Ps,.-^Gq C)ht<ȍ?!ΔaSU5b$u-ϯk9 ד!n)e%'(5/xS>Wkuy iI2r=,;wQf,Pօ0g4~j]ܬCԐe|<FV\YHd D#8#6aO)GsYP^fX:QN!Adpjɑ#pftTD1d@#T/ _ MKa};x&MTMEAg7~4렡! H: QhVzJ1wk,8ɘ#Hyb\(䔦̾%AlUOZ˔^%Ƀ^"%f=7wZ=nv z ;oP&yD!&]٪cU n|6SoLÔT oV0(4хCćIOvBVAI N_QWH2+ vCظNuh4sop/Lvoؼ 2Z>~1;vAgv/fgSZb,_ښuq/ջ"pfUSeF5IOס0FN;#΅eD4兤0ڵ\3TQCc{)|t +THYh3NJGK*۾DɌZNHX|vb׺>yN<& 9ip-n ܨ^w-R Ŷ;QŃI!xaR=Bsl-9*t?сkjq$],Vx=ƿTL_!5ˌr!H쉥.7, q;_@j2!q{ȋ'rV,\m<Г \hu2UuibQ!`:~ljKpfup_&PzNrr t<.OU*$QOǫ*,4/( Zz;D6ND*ɿbjvpcm@ä2\Lcӫ'^ɢpӐ_r\S1Oui*1;n휓 s[YIz⃛I2t®tBX NqbL[Re(Ee 6?)MIT'WqUoR[nE92B8.ʱDa[P NU7(k yR3*6n0Rif5XFc`Q)ʦP_fȁ2_#ų,3Bz7ntaW7!|X^M{͕#KRHp2چzmmcU6m ͹X(+XԗsH>inbgIEȺ<rdr} ~EА<,qBU7@[e5jh͕q ?@X>C2y5n3̨}[,Pڣp,^6Up+Iܥ&%"[f}_pgQ+_JF@{uTmսv5!H|~BӸ:=%S{&3.eIJ@џk'ajt7E_;\}'"aUF5jo _faCz(}JoT\FSld^FkhRj2,<>1p$:2 - w\O_|.FۈUeFH氡96̰ }XoG~|X))Ec~{qVxrM!o}_4Qd]/wxuEb֎qNIR!  ˆt1#j~[Ǣp$5a*qo:],Ur<K$ 뵇\nN-SIDtcm4.0y͔mI T OFqiwS r^ XSGu*XyȈxK0|Xi]zgT pJjF/ʷ^?Wc=#C-~A*r21᭻ .dSwg j& ≫ ΙgD\;qǠMW~i)!{;P!$ʉ5H!:Pp~۩'N(=b>uu7)޽Y-& 7Mr|.h۝.g wĜ}q ֈmBdc{A~{ #rH7zvȌ`!83i^ܝӧ+|:4+z*_u qXjNMQqsB&2@GC{gl. w> /;WzQ#17"#wOȟ>P eF{L[Y87czU(S|D2u}(`uc}0YP!_+ endstream endobj 58 0 obj << /Length1 727 /Length2 12871 /Length3 0 /Length 13432 /Filter /FlateDecode >> stream xmwspm0o8m'Nض5m۶m۶ɝ;9[W{W=6֎Jn@ZzN#== Thfc-@[#/ dcfofb 7'P722X8hxi)GS S%# Q9'K3C!H0XX?XEDee"BtJB}k#rkGοh뿦8ײe_Y{[ #3CG_6;ld_BjH0E;YZ[B6VN@{ hciquZַ2tQ&wAh$gWrc}˿RW|[4;?$4UըE m̬Mշ7oٿw?TSK;ڛ4i$ci_ ## `d_t ֎w 4]]1 4On .ɟ)SZb]D105=ľSqǛ3ٹuH ? ^~)$.3|} չee(cڪszY]1C^I[/VO4?=JӠ+UkR,]ӼR?ۃ6u@*+a0&֌"rЯmՍl(2¤ٕߗ-X9)ZؔEs:$*Y'ZR.{K[#! m@ "D6Q=d\,_V(ё#PǷvef~<9lNbGKհwpRHx"ӕ) lic*`vD@.l;@eSxfc2N)@!S^.78t`)] LlG|OV㺔$.GY22e@g@8?7\NUu6~ 8z.ʬ'i٪nm .k(ό%bZFgCUaTno9[c?tX!vSo*v}YǹN]ܽv~FNRn2&;1cJlejFƉ~Pr| DNX(CI%%=c]xUJe hَiTo,.{W$&e 7UYP{!}͗zRPyR4BVb$RaQo799374>S+?A{'? f) 4U5`7@?hߕ C*&c|}F2)O25@7*`4hoCE|R(+b<ඓ?C5k^Mn1aϔ>jj=g$|^=dk~Rf.iëȾ_؇t=v[BBCBgMW0 $ՠTN$sUXIX/TɯJ*WnKl*ꎏ%Cft ~*PKfWWKBӚu9קLeMP`3-HRYA!lvm2](:61BάUdcA#جgD 3@Kt4-Xm;k,'k< ud  zOwIurHܿ}x^lh O?X`agK jW$Svl;.q_U9+W?qO+Q=ƵP@[Fe0yM J4}_hhiwYCfMDXy ֟zd{Jwt=^C2nGW^Q>X^`2ZH7w"ZZh!K7n>8 2:uxbwn?P:šFʱ6]b s)_fZdAy|d}8Z3ORM09> ?{CJ4Pv_n]Aڋ\P<#Eqv^ctVsa2XlD>rWgp# %U*[a8~۶'^LZ\vOQ M,C#7o5 qGR /!+s-W#su I;:8vsǵqfشrUQmt%632  .,GZﷱ 86a Na=&Hu_fomqza&?,EaܓI/l!trmB/鹾3K"TO';A&T*PxD'mƆ} ?# $zb#0P1Uim5z@xx .y47dE'TH&J֪gM6ap;V߃,SyBLڹԸ}Rc_(D#U{⢪ O5y،q&|{ D1})Nvu0 iSv4ٌmS:Y͡,#p9-}}K Qmnifc!{)nfc+]9G2R"D]ޫQdP8j,CST~MȞ\-(mhF6A& =sxrI6bӷ J)^'?aWz]@G7dL~,ĐD 9{7/ ޝ0;+޻~52{y?{+i31$,9wv̈́|4?r|!ƚF'䍊 Ot %{nȿ40YZ?U#ih2\M+#'=25L[4VۋR6pьB 㹖@l(nJjvZ>뭨 7 b7]&+kņ_ V!ys=G.x׷ְُQ+ lҦ8V4V$댱!Pِwd"_0W[^4 Mn|)F𭻲D4Yuœ"1 IUN#/ְIq:>oʌlexPL%9%{|qYҾp$^En*#l~aLswi~KVr{K#!}RR Q/6DXKB6ٺK"\|Yi,&%eVa]jc2NvV.z&"o |H&oFĮVkt:3~ˊ q d@@3V%HOTW.Qu\ٸ 0(w7~%+s +n8 CCs7:5hwpoiՙ2BG 3W|a-;J!{r%x{9LΝԹi*chټ\/ XIMr{>n?a=(I=Bяju~&jܽry/X,(F5l _G36l=\yǾh./Xw̛v_=![|ueM nQC5@ce!qzKq۪)Nnk#qu-Ju)BqT;IcˮrN< ɲ.U wЌ/GP1%SfZQ=ǵN}A_C))]h䜬],ٰ}^E9y|S=xҼ|6qU0uLEDCҲjcU7Jh='r N?+順K/(fhLQ68.dc{nj¸&c:\,K DNp<>}[Gӏ-"aмrw-]PMܒgYAd-w[ ()NrRbwn}"|ݼ^ږ 纽G׉[ɠE 96{vIO(J:wgUiT79,MP8b}l 3F7J(aҿ|`&#MLq4C]<1=?W 'c = Nε8u[y+h j3;3@c_ldvɝ=, h8:K@@W燭yk J7&u"4]ƭ-9dZS+c׋)_X}?HAqبi{S!(euJ1>0 7b7Xfoȼ%yܶmr:Apo1:usWv]WPDxGfx)z6q,XXW޲ǺʛҒ%iװ GE!8|dzQ-r&(q'PimB ($:_K48c@ /|(c.|ds `fP)aUH*JTʣ޶"=r}ǹ}_Ul܋)mu3%xv/Ƽ:yΦVHo 036RaOº+Ww%n4vi ~MmDn;>`2>sj"kƹW8 u j&?Q̹bbV6o A#hX<3l4c!|ipO7'GJEVш3h|ݐV2 goH7gW=5Áio.7}qd?#=q*▨Պ"Xx/jwdt|B,_kPTGke6 3 FF '#|,<moϪLܚ@PsneU-ϘNY)`0N@HG6=n9k[+GM%4fqp-SH-Y=m#< 0.d{:cr.Kx]lJXoͣ9xJ[aU1ixa~z?MB\I 6t?ֱG*ܑcEM{˼ A0o,  1GnsR05z[*гziI.oG!ܕ~\&M,QrhVPA1g4P-y \BĕA^?|k'(ǡ p̹ߎ?mL9+0/vXNM v_+g!7CmJ%G6vjz)O8An ,I.G. ZPUyBje]~M\iA|=`r-kRA"khȣQjVf (x+%-$1aC1W6"'BP~%O]Hxd+5!`M:kQHͯDN3E9>i*a naهIUo(Aёm"#@NPщY̝[!{WWKXaW l'`^tGp3~|/EHc߃Vx"I>d2sfg~ J30{E+:(ހi?:2 # keb3 m`';.1ѯ[Bp/m M vdq,1e2eB*Z<3[͋s]] m®flgMI"<N.Sr4j2=>lI)`i֑FSѦ1UKVPĚYEЉM̕ rD.*62 |5m-~~KCfk?~'A8(]z&Ba(h4r$QRmQ"'pMo:g5.眢7I"4> Bl* dPF]KЛMZH'BG- xb}7HQ$u>%n @3S_|+J(:y4#AW)qgw )W\tq{veJuUaK[\Rۆ #8ٶS# 42CkpQ\VTv8@PVm‘D֌JoaLNd&A9AMq+faDލ"#`Ha +5jyo'gfVeۡ7haXϭ{ d146JnU^QC,8T2wefh֒,0cV o1WC^VR2)q-yXb^r<ߑ>{>щ-] ];|OzDa?,?0|G^WJ1kJ  ^* BCGϩA;4ޏb*K8:%M9 "41%+1JO]]r('1r+1̕3!;C)hC~I.A2+.l:kзHh[tm=wJVR{Gd(uvBk8 GgYC>Mۤ*M nHv"A/(ꥳO]Vs@Bprwe-J]nP=HO~k6Wm|1KbReDt%_aUyWT@Z7:7za{e߀M %,[rѲ ^,rptk6\=`c%QU{\9 3P7(nH7m>Ԍ=._A@Ek}~SĮ~#Xy/Ǧ 'D_A Y N9{Kȗ#b; UCb笟!|#/jL|$#%TDfZ$tvጘT$;sbCF$Xu%ZP/c Tr\MC;qQwbФ͞Fo!P?}"êK@(`b}2j8tmAU_q2> 7ď7#dhE|c{x*'usA-v@瑀Y9T9;fʹ@T#Hv{,/?MΣM?x *Cj E=Nb8[I$ lـ1"5 7mEqm$Η>; iESIt7xѪ{7qC|n4z,n4C|?6P޺O`XQa[-BB8>/vG#F̺#Eyqkqm(l;- Jf:6ǔIx3D9ngRm8)u*1*ۘz I^] Ë[G8LbJދM6pTC lJ}eH7#jФn4<älYZd1-ΧD2RpKg(]%3 [āt>M@ Ӯg}4X+»8o!:[՞R %,Ղ:9 jy}mb;L|J:t+rfUYtoѦ1SjMsRWBuFDٙEdE:^9&3S!#qzvɎGj,~\ q<Ez6B^Y[+! {9F2~8yS`!l?!Bce=C☯D B1A1C)j?!X~?W%O~(-ZU5_\:Jʃh'r/69ւ䌀 p CroH<0kX&0cѕɼHҀfho0+h.I|PF#ǩÝpd-l.FR>/+, #Y}/8) uZ@I ("vD/Hxf8,*](D/LBH3'f{ui^P`M : OQDqSe]e&Xw?i[)jd:97mZ x:iÌC_$Sz cpזj&X[؂e^B QQu_Ҝ%e) dR^øcau;nløjG|h}|gQv[=W#kR iA7}՘0?)K%n]dn9in˯> stream xlSnM-Zʶm.۶vٶm۶m۶u>'nč21f#Cf"#qRq3fcg(+2122Y`DmmDv&f3## @ @iH @JfkebnhuqqtqtwpHdf 012+KI(%T6Vg+sC1``hkcd/N&`b1[k @LAEocɑ8ϲe?YX0LL#sC' ÿt1'll?GC*?hg++9}kc@dko_/"A2w7w36R0wGj}$wE?ώX%i 2H) Kko1521(;N+gzK`@_ᅱC ۺy1qrXLl.]Cgc O/=HnƆ0k˶<)eb4z4L+S7fFW8*8p3~|;RM1pD8E$[you:`jֆr`7awNik ԓ%|Lz}H۱ 6T(p4UHfA{k !p7dغfe~v!,w lz]ӥ-ũB¸ C￑KɦHs/̰Ex|v?@!=by,!]iZ(Es">QlW@2ZGS?YvmPcГ-KKzU2gnA[[Ⱥ-WhM#!!F%;Ttl%}ۛ.֪zXq,_-L CWZV^ܒ=- 4sx4 T 0BH8b@ {Poyᅎ~hH\OJ] gޭ hդ:ǀ)m4 '4v\z!,:^+Cpn6*u8'4,</hEF$_V&^bEU5}uS帼 o<șSlXg*:IȏIAka @$)_GG%O{"{uAf݅5!)4p(E!Lިjm?gf cN] ?x ${bۏu!JľL5YR9#Off{sdb+dK @'y2NИ xAf\CQ<z$|b5Ie1cq~&PP?lqś3$l8lq}+2Izb>W`v\d2$ٴ:VDɅrKP qQk}IjԂDDy8-ɇ2*0Uo SUD=\E8ӎ#laO{b V\H&029 ]".QsSl HxD˦˶.*!aYKdHlD &[1y1>@m!_5çdr#qZU, 108r<˫pP;YVi#VDQ)A/Ӈ)x?:/`B_Sr.DMpޣDm呗 V€rȻ&r#.wwΠİF><,. NV!v;F =1mpQLEaJ…[c7(w7;ks׏S^2a-hҏ7H3FIɢV݅ LΛ G]k=u5?15ӻEl{T֯עefKH@Ogm%aa𲢟%P@x ݗCpMRJwٙcWDJ1 =Ga *xfo D%Zkel(9dVk `i{ǧڐEwr`$*R4"o5GJbd^>zrEC4o{\=x6@Oxcjc.'L%CHB'f$Ђg+.*R OaN&Y\nѽH9亭qowZΪ 1.w^$90؜WNC=3F8}&bZhLg'& ܩi uOGXZ 7UYPD .r4D|}(W]c rkm|$:ݜVX9% +uf6``8 ~*ThAm?ɔ]4 [AS*D߰`[Opwː$XlSQ3!BD,6_d扔bD&Ypolgv -RXd`kzDR'6IZ Rp#Ӣl&,DƛK/C&rBw4}ڜhvO({_9I`ccnkK6T#c2G2i>NjCZ,$ ] ? 9ve-DT-|4/]5zHI+)VP)ݹeIxN}/|<]MKÿ;`g.nVx7r3nFbD:ZrTXSa$0cqYS\bK:#< i3"&3+kp>buOqIQ3\}J0VćUOEge~u8`ޅl@nKu8#Cu P#rTr}x@S\#1Vo3Nۉ}ާjnSySHL,lޕhڒ\?9DD gqy-"Ͳ] R꿝1[p&?@`q|j.^,27hR$F;n炿ȷX {_d ^sI o,h@]{tOb13*բ e\R<&#8Y"9p%M޽ 4ީ z@9װnl#aꨎE @DjEPDܶ? f=xvHc 'iN`kDğA<9y֘}SۺLw-`tB Hs&-Pc('5N-$@u]k?eХBxI|Ie6%>5a;sAQ[{!n1CE/d*8U@Ëx7^i3|1\)Y-Y|[W5ɸkm'0QEO}8 5({oyNCW~JN= `Gvm' x"ʎUsLn`M+PiuCk1YÖȸRuKZF  BX"lAc ~K>j};= uM u'u}=0Vz MrᜄRq^F;(0[qve}ܥd o(  !! 5Z*ڴFWy(4/X:c?]OB\ʒ `C[ouWE(.<umn{}8 `9H&Ij2|ܝ8A_m ^'z+n3X¼t^Cz|3H1FX u/猴=&t+lNQDW'6 ")!4IJ$@4r|-hX{RƸ)-ks]*haMI4\!$I R~dKH4?,!q mi]/ vWZ`~" =yT(KԬcX9Ey:qn\3_K8Zط V={$xN $&PƆJt˥p 04I<4&DZdgFpTO5]; kFIPQK[ivn~{ X+}_G3qn\bq O/_*v{Q50$^^"㸈Ot6*W!36[Dz T5F{wXO!λoYAX:5D'uٽ;frܾ˕(v[*؃_Byl4B Df(#$f;OO<[}>?rf)AwN*S|Xmy 7\V#%mP9b\;[A?s@Dz sueO[yk9KJ[fA%cuy~+:[L$P!(.g: fu._eqfSU/HKx0IFRu&Ę {?ty.VtNLO(n!J?pTsLN~Fx] ZEQApċn9hm[{9 c%gCJmy%:kl;K Va |t 2N}ib>-Y\9Z[[7WYJD^Yc`  4ܣrP"YEN09NV#B-2qҨjs&2Ē*-FOO_I.+zr\g201hP~y@¤fHs{F bQC.MN>YN,7= L<֖G|㗤#6|7-iR{Oق{`-˅~BǛD. ݸB3yct`so1Q|!P|s[Oak?1( uMRD UNviKK޵KkP*evHC@Y8.T0X<2c%pL!frGZh9 ; :GVnM<$ڄ;{Oz꩖43~RdXK20 o"ډ Ӛ#2͓v*X.Gc ag'[4+k};F qJVƱ-&顁mG%'DcpG]K: jkJGׂOPpdhԱPMxJPbsú8V{{RHwEa* A&y>9CuŸ^ʷ%N'"þyoLor1,oYw~YRlgOH`I(-jtw19dd -\W3 ,X-^m 0n=͢g (bIҶPo&k #es6%Է i{AA2u$[m!|:v,b;߯.=1͘{+we!wpC0v\軤ăG٨ ZR%ța "mGX!H)>l^оwpJ5ʞ-e?3؇XAK1&(]ʽ:M{:SQ\nj׬vjK IZ1iaGDa̘ >XJ%־0U%sFM/sum6INSsFm;rYc: K J'i?Ơʋi~$ɡMvJe1(Br穘_ U?^|_Y~(V'h0ڭv<+r3]NC~̽trׯǻAq㾅0dX\,χ>wڅj^JNq^r?j+4J6qSˇ8 %zN `.JAKϠ CK2)ՙDx;Vexbm^:.!jc+{r{ Y5s -%44@BM*Q] .tJg[BDay 8шM[["7)ojkGFz f2ڸ=Op~.7Q琫|4 g߽ re*D3fgQ^/ތ_" eQtVoUs*W:l?'@)qApn7ټ?Xrpl`Ufhas}Df?* 8(1{œӾ5q)E]֋jVhpZvF믙UCEvaM$*[xth³n;8?hӚUhr ~pc+|tFHE Ljkƾ%&=I{{ߕ#lL*|TsoP]z`jF3qC-an,g,vEEw~V3n'SC2i7ז1|/bwC5 M\X%O'O0w!~XHG+}/0 qz7&?'x g%˞Ői\OdːZ06AZmrX΀1yԮ9awȓt$~Q=a9؃"i/ QW%Jxl?;`4wޫ:mF1czp~!` 7/uٸn,mOQXuH$Ts!Sr,ApF=0l`#4)ƛ1\[wLeN ]~ `^'$MvQGϯ5Ȗv~}7FY4^䄯ŭVE%aW. I'먼 `>(~13~VwFv׽L =o_S_&Z5̣Eˠ=`Ȓr5~mO+{0WfNbp^;GZ7 t,V*V? ΀12KB tA sSvG5~輾E>xho;:ڹev%|_nB6hG @TOX]gvRt%c:P}Qd X6/# h+ ).r53oaM hSZ/(G!d D>a5}-/iss6q.8 nݜWiתHZE .!#b)Gs>sj5@vvuӦ񇖴<8'%R6e'+?.xSۊ)8Ra0HF;?05VRj70Nf6r Z~/ނ\&d(eX'!(h{rTnn\`#MͶ-[#1äj' =wT_E$ v ùm2' iüpؒiЗ#yY ";` @"N{o6>2Xlsh`K"Ŭ6Xʴ-ʚcb匇uTx> =Fien8:tgj`Ĵb *.Mܯhs4oK+-ns^9^{Ui - r=!8{X1v̏8$> iU%0i3637rOJ58r2qϰ"ʶ$ Creԛ ݰt7Nԉ!ֺaz n(Q"Y}e>"U $nLq2ivVtWךҒeXJw9Ǧ(,oG%ߍ`T( -uD>m*I5%bOFNxFgEU)S{7FP޴==YHBxЛշe)+w@wչAk5"u;b/ 0tn;>W2VtEXY<&-\zicݷ;%9kk2•ac??qu!W+ j&dUd;Szbu`V~Ck_$%V G*vDnkHkYbjѥtwCz糝S?|'h/b{ÆQ]\G /zo&G 1U`4QN DǕܪV,~Qw!t]p+=lD:]cv[w z5Jơ`r ٮlykzImQ} z@O`lYܶD"=r~I@iGNPEUk4=aHEed$`}JwLI Z00Б>^t'7%jU%TS3JɚkJ-u ]1߯;w~r ].:G3$Pܻ>l&=NOqm U`n;A fvƀdPvMA anj}6gW񤒪aSU}7X6X} 2%}Pj uNɭ“9R}}ij=dJkP1%FbJ 3ƅ@HF[w83 Y d q0D\oTMhOLTSQQ_ǷRIW;+GHKhXV`wyѰnsp8Ÿ7f>0#Yy /PK+UyglvYK!!I 8(g< 7m.@UIADaIM-5F~{j&``>wMcDk{誊$ *פ,+ +A5!.}ˍýE"HW a8V2[˻/ 'ncEbK/+Y+tqnýVe^hg1nF# .w.͹Di +Yag;U<&*Źۅ`y; w޺rs~U#_1 n!Ctەz P## I`dp}\66iMdF#Qj^FF[Ē2ޢ/~A@:h۹+Fz/42d[ABW_X>T#DьcOr+V'l!l}-t}t*"NxbUar:591>p`Կ@0 KLiT2u};pS5Rca`ON7>=P} AH}I8SRx$$YiA9j)` A@ HZY0[]Q}g8 HѾ髇҂PqTiz+%1ts ɷ|n,X-4*eڗ@.+K` ~gZ.Nat e%_g0(+)0(1<n7m IV&v%6=ˍl"Ɗ!W@kz~Y*] 2P [i|z fo7r|How X[m졒~J+WjRݜ(C RFvt20t7]єbDyW Vv%:qi2ʜ$8?vU]qͧX 7oWN*Lr=cxD8 ]yHDK\u~&4\M5ƑK-B^9%w&:d'|BWѣ֪$xч͋}ednuJ^Wsӧ[A\UݱM#DP  (/=-sch!gmu?^{岵5U 1^uC1QQyWj'50q[XF]]eiV]wWQmVv3h9_2hr'T[e?)nzm2N;mX76hW9#MMc(ɴ{'`X!hgD \S&,>16D](v xUy?a?O%$b&ߚc/ve!)چ ( prF_VP%C9m%JRDe;㜲Oߜ=cSuAT{n 5tvA)fs/33 f$xYU~v`vC 29ֹҦ"_0RαPQk^+//AZjq*_^.ǜ'ϨQi@wds^$^ ͬKL]#v ݼ8eS`\I" Y;i=]tn.YKR Z:>%RCPB2il®/!^/@>& CDPpLu$Hf +"OZ;oqEZiRsǮQ.2„R8{eQY{np`LےE[aFoZ\ a!WIXW.[*'as[)2+g6O#g<4+ ЃHOlX+R}*FXkb<ž_D> 1Yz꧒l^\5a_|rhj}zBICojD8u]΃̧N@Ϳ~|}(V2NB#>t:Gy:]*PUdksUKr ^a# n6|\M,wt!4:A=X)n,5x2 h:  {Q>xDH>~V? oE`7H ǁ21`4 Yx^/*6&eVf%9 8@1bOj/"qDb{HT|3iKb,#fMpŔ bRpv=ur_S!78E')%ouw`rU_zs7̣ 7HGص0A56 )RYv/)~^ۗ¡4f6>zr- t[jWkU d_8Yeg/2~WQ\*FZQXUElR'&Ȋ1nj=^p%7ͳI߱KDQ[Z'K5/uGg;Q"~_M!KtuƓq&GفEWf'K2%'G Rω~KxIgKrS,+nOK))2!0c0} jtr4)KU绻Xz({()ydp5WhSvɼ jh K9bXv3}!QphmĆ8({Bf TEA TBN1fN0y2_މ OQD?S, ݂ƳW^H 0NHŃz[l4^k_j:?vJ sJ -#gn8Q׼oBӓW*B} -5l k~'6vs8KWv|bڰb_Gyjp1DLº_v@aQ#!ȇiabѡ(X+.+%hyu0!v-9Ѳ_Ntl7ebE|?q;* 5;2.O[|@/}E]v<M-Lf _?,* S9/U*غYfvk0cFqL.QMPG,Y1aN̷kE}SQIoROeb`tO7Tpփ1 "?y&h)(S 4uΘ&""FK]#WEͫȣfBGQ˨&+p\*ZJ"iďa&1vޏq8#[օs -#('hJ$xp22SP?'/!x|G͠ןRJ]48}iٹ`|bw4snCӫIUXNj'.N>ROf8غ*tXҎ4oue_&'NiH$H0'XM}hj45yPL0:X% YGk{"S[y"ajF~>׷|sj !#=n"s&:%ʺDu^8< d $ʌ`!~D}6nXjrEm%0<(%{ `5 J$ޓe/˥`BXkk iz Mp6;RusIJY M:4K~sʾmYpmzYr25$WqZJ@D1`v`iǑa-CH,xRȁ356ؘzzXӬ"5,Mg :na|]uQf0|L;Yqy]~OVk7Ώ5Kk}z%x \JiqGJ(3aMҷmydJ:)t yN6DE[]HX[cOM1 ůd+6r5TP3 ly#>nRPȥ`jYgD1!<ֵ9Fw&l x!f:2P]2'Vk %}UWq_]h1hs{J3XWGw!O}5dyt@>^T> aK6ʔpͲ-_r qS(Zԭ]rj NfO^s'X52`yL ){}&gj7ō @#51.cY@w0 Wk'233ߠ hbvPtKI $}4k={.Ykf<#* ԥEs\]20j3"n{":lж!jEt渞FwԶYh]5ta3gja6:xPa)LeOeǛ Pyʐo?ӽWUH[;L]^y&hHA9>r̹E,V/J&A:c l_  !];|B81^LboP-'$gIkbbӯsi_'e>{mwOԧPǓƱ `P1 9|:Bq}Pa鮈e/ּŊS[F`: (זQH:n錩"\0?fAnT[q7XԠl<_B8246)#Ok[Hh) R!8buʧ^[˦Ʉl[Dve'_br iݗpV\*a1NI;uf|JZNUX+&lc6Q $8>ႍ~\'ӂ:U; 8u93MPQ} 1ZY+.VFOQ댿GxV(1|jah#9JRjVF譥e7'r< N  nR2Ypt,ς_*$[$zX) x?!JꊻGI҃;WSF3ndtv!z>@I/ʽeDΤ;F}dYKίl*XbWQV1ԵǎctqRJu!#E" - "ߴ.6+ vy9q3~Nq6jԺFJ/ZlsW4X5JEN,BI˅O)0G jQcэ"$;/A+o`eJ^Kpֻ8U?p)E;lŠx^z|M>Ҁ>cĞQ;&[n9ADLpUScOv+)3~kZZ04Th5&Zi,H+^tQ1M,~]ąl- ΚtEkT{Xb)i. $h;-}/v ; _Tj5*y[gHa-b%b-"*78~7 ūo ˃mrխkD~12כ0Nu?u k&=X2դ+ԜB(o!O&pj᎜+ș ". E!8οrmC,S7O4ϩp- [m?\PS@P!6б\*V7>vpoM)#3n8F’+Ѓp@ľ v A8TZfrPR60čLIb3y{&l9-껝 d }a[s);i}q1V endstream endobj 62 0 obj << /Length1 721 /Length2 12315 /Length3 0 /Length 12893 /Filter /FlateDecode >> stream xmxL]ݶ5݋Cq׃܋ww-ݡ}Nv5X#ɦ"rjx9Z11ԥYYTT&@?@n`c!PV֮Z3v&@{3ૃ; ōM` +*Ih4 g; 4X,vNf s80Cn=@QRCTJYI )΢!0d\]-̜##F:{;bF`c\V@˿tY:]6wsO/!5[XE)[h\- ?({?YW:*E iat+_kY^-́n5wyϑ@M-) %$*&?d&&@O+?<}xL6ο/>NvCwO,,<-WBl[*$章g5VWgzoЁFWHsB;-&HS1d+ϥUV~u/# ۛ)AD޹fnOsf9 KWt@LX[3@gE-6y[/E7. t< ymY`x E$ޣ kc:{(=[~5vb2~ RyrfsRxLFp߿W*ҐMF{§C\YU!DLTO$bμx E8ij5ڢl1rM[v5nt9sD5ڛdUcmFBH~/@* v4+ߪ b0P;kO!6"zV0k-yx>?Ʈ|Kg5d_hڮMǚͥN!-c$ nº"#@g,dK LJf-7a$ŭ:L5?$ 9P@#FT BP@`y5q#4?E`D𤲍fJSvHwl;0!n3B$RY+!_jS||qkO(.RVD;IIU#"Ҍ,^?ۖ$HPȤև E! KK]rZ|K3ҫgdI,i#Ƥp 5u;a"0+hYJV]|tO7lۡCw2Ғ=i'̏& vYl'Lܑ=s"zrw"96F_Dd2;6~=AEuj9Fq%{G L;U6aTs\r>9AU$+-lMSM8jZ(XHQ\@O8C4R_vC+zMdzsq9ELiA{i1&sx'{v}8(7k%GYt_%$j<)oAM4%Z|s>?4N~b+ 31BvM[rܹ$ҵsIPÍ^dm}`abF^~Q>`[Vg$rVwAUςy?ؼoQbw+b$¼󐠚HD}D\$L$¡ݚT0`[o_yӯMr,oJ>lÝyL9|* __2PtT$M-b2ДR }'Jٽ;2tV'~%f\o S(-JU7yw4 ܹ7zE獴f)Rzo;t;)pNԔ||hw+s̅j)vE5fF%Nn|1&x}P_̭f23*נ&ie8^ ji1Sv6q$yfrj*jPK$Gf#77lZ|]y7΂"jWДZE1F ՜M"կ0!Fd3_ 9>LQLQd-DA!-s3sn\(frPq.9#~{̐ N&bUVBB WJ/m%nyT)-eWbVE FA-^40tc}ݏl[!~j|mQ:фݠK; >qlʚ4Y`VIMwp@ GtvŜ#bb?  -d:a9L1{ʡj78qHC4 Ia;;uU* eKM̸'D#+K}Q/E: Ur=)i-B=%;0\#R(`]ZIE DպAԠFx.oux6:_b$s}5خbp//c9f/> )5<݃ZqYN4m,< ңw1:r_9 C,64ٌP[R\LI=0_|}]Tv+žL 6%Q(X˶~A9.<#LfB2HMS}7vWM rԒP%#tNH (Cu> ttxlxO641ۢ.iS .hp-X ]ۃ U␩^*/ P-Z@}sUJqjѨH9n##8[fDKx"mEWx1=Z`ȕ ނ. N"udilŶNvb6%l!LЋ4fj/Qw+s4̆4a+IFɺ\7W7x3xwOlZEZJAF;E{٪;JWoMniLSj͵ibJzBžbh]W_k?s>om=a$vL=Vmpv&j%x#zK!?ɧ!.X2uQm(N<g``$4sn)Z MI. }E[%Փv=ϏQ bTq꫖* )cD5'aⱯޘ#wA#h;̼M"pKJ'gФCy4 Hsp :ug#r}ą<*5i_fzkC˃N,|7N.g\-?nmr]N;~zqwR<@|NvV,Z,ɞ7ޱwkrr2=E3.NC}3K}N((È\xoZ2Wef%GӢx7 &N%졣> hT;* #w¤Cyp&lϘP$7rT/ ~p"no3{,/~՜8< <}CDGXUUѣrN J(@6#TUjU"`#L<#C^ݺap7z[Ĝ ';Jm*<7y|`RFv"Ґ -5bTk|lvh&1G}4g@~ld|A%$\8NzѢ)ATozAS92ё5AzSY2ӯKxM™^.hnz40Ϝq.w(7 ,˹~zTwxh-Uh( buAŌԄX>Wysx"i>[&TX.Dj&L耸Z!,R{GNhE]wAjUrUGNa<ХTKYn'Q]~ X|JQ~Ng:93՜E5WR-+KRў#<`5(,7֪҂d.j[G:Co>'? [3j*1`U[TqK? -IJuIdJĆJ`dO zp}5:Υ?&La}6 /Wֿd$tkrNjNVb=47}wkc~9C%+v{js5ePWYtN9%g3Az5YcKBK'gxTM~{rZm'ok6WB)s Tɸl*w ]ue|.] ABp XH~ڕ}ӺF ?n%Tv6$G3iW xM9lb$q#c;ҊwHH,!X׸; ߊdl;h>Dj7=x1hR'X[ZÌp XγDV_Z5PZd:$[ V"յ*ǩS&1W*V ->De_>}0f6*B1>)l[ThqvKb=Dvu9qyנ18*BÌ rl"QҍѹY!H_mF"ob>ƿSS- B{GxQ z7-ӥNlqrmĈMDDM6FrcCOCR蚱=88O28`ԝMv 4꓁ vדmF<5Z/(f&%&ӏ]',' >.CHW7(>qkGVM"}3{˅=FŰArNw" EKȦ'~6?p^ J=i"a`g\0|mS˷O_2g8c%*q[DV *8r :@HQhU`_7U`ʥo Y,2M#C% Qwn{:IiU :>q(Q%ggGltɣ f74tqx/u"$;܊?_śH89ZoDz:mlgC⹨.!E)RCTGߺAD, 0pݒGZ$7}"Y\z xJz䇡#L&~ϒЊ'tFC2W<*wL6kdHR>0 aKF߫sk:CM⛅cp*k! |O$2oI2XkɄG4F1R6n>LLMQ_$vjx4)\s*L?RYVLRV,Qbkb0 'o=<'Cj 4QMc!a꧐U;Rp% |tߟ/'Nj.z\"poB' n [p;[DDfd5l.>lp1=}=ewP &}Ex V3]xTJ)Ø1CVީIwQ`S hUcYnGX3ŷ9pOG,J(pj֖DoK|?ES{O+[Yw}Vcٳ4b9qs k}i{[ [h 5HbM/&}1Ma$ G GyKLjCZx&\_W" ]'.noWﺼ2Kl_ZaH!U ),DqU:>fnc$s,˲kR@/I?%r& xc|l@4JKk#\pu/:!3>0S(FR6o t{ k"Df0Ǡ:/6V7ⴃcsl֚2^ᵉ/FT<)\=Fg}ZLKS7 nQ뼐Kz6V{vn%Hᇏx C#q\uQg=}HC5:"/\/Cץ"m`HgC1l߷1  ұ~^#d'Pt`Gm-GTBgr"8;l'G sdFAAGw&JLGwZhGz; tFJߖp ^^T"vWJmFqe(v4ݢTᅤ2HqQapi/ 0E\Yh;͂és2:/^(|pG Ej =]ȃ*"nj1.C:SHJxֽbu"bRtEf aK(';kfI.ovq8Gfg6n}piY oy}w_gol]#÷"-8z#,q}gcExd1Aҡ [G盗OFɍh˷b&gloi,}tYmVy#߅IZ:lukgp{iaC !X$ Rstξ9YlҦ˵/vIᤊ f-Zy>kčMԾ8v6 :e:J͹Ff (1m4,|uCU}5CM@+~D?[{ɉA/,z 6eglۊjC~wĖ,~:<6;g fJդ'GzMn<ΰ\l"V˝`>oPw_h,(S'_CHYAt%{ظCv [΂c[kƠ ZODRvCK$U:xc'n܄xm ҵlVw\1\8s4sm9@K'X2}keРV^(ɤ~P^Zaw05ƹAqAS$$mݸW pV#~e!?x/# 3x;*|XH>ٴ肽>vO 0 P1[$YK Ֆia6T3 mկ\/\B#^,G]D⪵ [b>v9X1'F̡Y[|sAߗJb7QHR# HRrUhرJ~VyìfWR1)?&A$pdg+53 L<(uwf6Bo!,ywL!Q)c/6|(+V i|#+-ӘcYV{I9~A욹 f.^`V* 5'e#_g\&r[6.8Rtd6 fz:F,!\ٯBʲc~V6=qD7ޭCfߺH b +=Ds(|􁧓 >9~TGޮo45אm'еYЮw]^w0x ,4P4L$BM&[}Q2)- [5`/ Kqrdͮ}^K˩b3VW6Y`j`?~XP&o5zN7̫m7S[Ʒ؇wDYg_7jiaHǙ A(uXRYJ U\4gBeG8z-;%VKrxGo]uǗ_PWꡖWj+0p@+<:np1p.NsZ8a'4HYV5~XU}xΆh8 hI) Uj<*D|UԊC7I. /S&Ķ1 "tWywΡa - ,8ǿva(Șʥ,!z˳Nϸ bVR8ќJbex>9bX@j?RātCx,U8 ՟L&n_I@8<c&##)@$)7j "ՊFd ^ Fo$a.4V@ 4TV_ZNy1įbCɂ bT1 ^2>$F{= oCǶ(.he % 2xM-}tAS>|2Ii^`R{5ݟFCjP ¢Ƚ&G*_\||v6a+S;P߼'L,WS vn9,O3o\kEԆ}Y n*ᱷWt)V (H\O,$q z^^Wz.װ!+њ_V/9U -:[{Ʈ@U5Ҋc*I{dgQٯ ėg۴4~BlҴLޜ1 Ql`\kf/YȀ͐:9U/i.l1cm Ve>6=0'eg'lñ |O-R<. V%ec]y(%_Ԫ 99D$B﷠\~ƫIW%bs_,ȸ[,#tNψjE4T"5kiɭ%ϙȀL*G-qĪVeA>KasSsX-A t7mTC"skqi GqW2hJ̘b,PfY^)HF/Ӓ3Y0 '\%ۛ@V}xkT#kY?Qh= ,s5|esu$~^"sW=Lb {~NK@Q5lꝎڻ7FwThSP[:﯂ Vg6oٛ"~e,F+ڢ>]p^C}U"IWp}8Fg:ĐndybzG4[msٓ"kUH+ցe,  3NԼ2eEA Z?iGڄ:N&_Y'L`B-džf]-aw!?F"9 f+e8CK%X$LmӘ"Oz—Mp+)+ie1/FR "J YȘRͫZ;N T^vg2νpf[1k~+IeUayPW<wB*ß%%_1dǬ OaOk"KF%DռLF췯?|t,-jm{? |&$Ǡ& u8FxFz[76 skͭVx&cvTE˖rN_NYE>19E ,a5}ِ74G~^Ar͵?B-- n@iR}C/tRu`(Kk}A@c=<5P ).*RWό9cM? MvwB2, ^^.l49mq뻃h;]g]mfq[4-(ySs9=/gx{ZNV^9Q턿o@^{ˆ AU{S&8ie^"5iKU2ܿw*k%  *I>3y_ÊTr?9t`q ,;SgmAil)ڴ'b.<(vv0 Y1pJ=l^fR|:1A;i-ˋ 4:1% aְN>lҥPu]{V#F,~vUoH#]}e q52 1{)/SrY{xD)Gu`}+K,/2mZh8JhU7mslI[+`꺭}[?PX!NeVd)$La?`"PAY6P.S{ttkLr٠H]$_0=6f-,j'2M[ }T;Joۗx2dw>_yOulLrqoSⴾZ˹+g4.xӹ GEN9ʩIe)߹itڇ@zr3uJR>*.z/')S[HyRA\ũDmu :sNO}fgBOH.K>g( @ֺ6G*[6ūY%Rܕo)fpTI[xIkdTM ,ZVBsŐ*Y}aX%+A(0mR KK#tޭ%"Kں|@#{ݯ`h@I[qvu6Zei&{ 8NC|445rV[ނ-;+qmmf &ph|byND `Itw1vR7ҭw|F`ZI2؆ ^6aLFF }' 4gd|K#fKH)K])->cƸҩ endstream endobj 64 0 obj << /Length1 721 /Length2 9960 /Length3 0 /Length 10559 /Filter /FlateDecode >> stream xmwePL- ',Kpww-kpn;sU?[֮^{n/R. VFV&>"+7R tv s:`caaE;8z:Y[Zhh lvN-[7k3++"ubXXۂ*Ji%M4Z@ Z_!`rrK(!*g 2]AfNv__NXYf.S=tpp;l_BhjH 0YE*@q;GW@dPs!_XvXhWڠ"z=Qs{[ol,& G'-io`nmo Pw%*@Og+]=,LXsfd0X9]3W''???y̐Cl~UIMWOOh/B.M\cZXh滣L nm޴@(c1_"  K+-jןU ".`̔`.#]2VT9rOj徕 bJƘwbl5{G`L[^ ?n/Co\R[V:YpklI>:bU_=!(>MvBvi땾 ]@]"Xcd9 ɜ4$iKsqӚ838 w'XZDK}~/An2cS͌q:Ym;a3G<|:_bSzs+JQwF=ɤ1l5ɻ~E n *WEL» $|}p/UoT fk?#&Gd\:v&(A79iH^/ɘ _ tC)zH!D9T^B#t\1 *WPoL z'*? @ kWdHrᒻ [彵n#\v= a7߀D̯&ߣ|L \RVgًGĞV6C52sg0V{4TD]ܿx32RC?a|~;"@OeTZ0 `8븝 ɛ$*N\YĒq7T>$:߯ ut'iR>GFk[L7~Jzu^ʎ:CpꤡO))=}bLMTG=M6[AlLs=!6=H\" !";#`h#4$UUW jBAeh%mGPwGbͫ8d0+ꮕ4_'ooWzAwP MTcG( %@b03Z؀:|Cao&$Pp:dNʌFb- z|I#1t:پq6RUE\&:x8`;p_DlHX/ x@M# y׌=F7Q_a3Z$ u;~ݜ'%8!QHK?iDֈ,DH0hQ9B? 7ߴq7q'$Th-젖RR,ؔi/f!tQvI^i h㞃`eŇbVQV㶾kc ZS]j/ުw}mMnX={J%"R}I! 9O\D 'zvtd8 {ݖY9OFows¦;nivHZ76D4(m&ڞ*O&yyEYD5~|I1}-D?% R,4}O\mx|Kz 6lp>dUВnBq,})T;%UҜ|!b/4A66?ɵ ΂x[+/Cgľ_kCHO"%0a t{N̲0|;iQ7; G%]†CuוdI;QICOZaʫ>:k[X\F`T_bTOXp|/Ft+²zW[ 'qGm>g~Us"m| 2="϶Y;Ƽ4Ì[E^go3MHXT:'gI6":f?E{I}4:$.a 3ɓSS宋8GcK!.JF BY}Ѹ|~iJ>,F]SlFNŻFbTD)~>=b%9qFW?Rj瓘X4ފہLCh鞶]`7֭\[P [Ke(=u-~ iؙӗ| <ΘfPm[^^ЍX%5}4]?A-fvLjv:nݲLp ΎgDF٢n~V8 S]'n.ڀ Y-ş̂( wٖxEL1Hc 'K!VL7'h~ (ZE4EHbW zX-=杺G(^WPHc;4jB7_?ݛdR˞xx8%!w06~QD` Q]QqIvqNJ+}4g3Y6tAIΏ<33at=shOsW\;{t QCD8dd"ĵi'+hy߁2Lv -ћcpL1)X))Q~3_)74ć  \8-atl6G}n1 *edk<{I0f"d ypO?zݢ*0 r鯖NxšTHqѰF h!Rh8QR?GY~'.sj5/ AN-ǀ\ܽ#ϧw C+ H+Cv&ZXvl=JGf1d.t1Hf}\a?Կ9<*hm$A gv~9=}K8r8Xf$l9:^%%Q9_8WvyTPm>;8.0TY0968! ۃa̝߈ԪN8l4O6H@j9|]ZW+Ȕ8T|Ο]Y4zKy,72PB[$;6ū!֕Pܑ2l^H9–JANCߓd =Z4lȟ,uօP:耽1eMQr,rdIIj;sƟWN05쭷CB"bVoS-8H0` DB Gy)j}SD3 rB^kؔV7 t\7L=' |7?bPjpTo9{q=0S]dnmQs@5Kn+;2]~Tp[sty9˒LMY$yQ#+ѦXJ2du9$J[Gdaiz0b9-Gr.=2 ?͙,t!%  #}" sYo5zh[7T>,u f8ûGU-i2T-2y)kc!ܒ~8ee|Ez&:n+R2n6 C/eՂl^qSwʰ{Q}NK'6 &X>j<?c?h %7mv+'VXZ/1zBxWbЦc,@!i\~At i@tJfIc6F㦯6iwVSV/?:cvY@_/UD{wǿ7Y [ԯ t9Lv}lnw wO/AiDv@QɁz;Ug\?F)=, "렚$S@DHG,祸f5hs,o~"@|Վ -5NPNn`T*3(lT&\^GGLgɭ=`DAL%#Ĝ8ӰƖy|Ho#OY&K#L&HP+nfpq#qe ǕsHrTOJ$~]Q;gA*/K3p 6պfe}ï޾3鷣9'8gٺ+2!ɭ8цwl&kyuFq_GWv `sfRWt]v ; zΎ/ }>z,{SIjHSzQ+!d E%h#=X`9)!͟&?9jGཕWQ?cΎKCA3^ 3 qԆkNI)G=ހO}5>##=.aJ` O4e.Զ/v9XB+Fdԡ/l77d$i9`etA,v*%:_Ee!%f.VLz?4oe AHT7lODRev8gֽ"#kׂ@ܨدR9luOs*zkoo@I[eLqkh/cwpA'S>'+FVMY]Kwŗ2bFVf/aEʾ-{Gx 2 +]@Fl^X_`+teU6AncI ?l#kْbᐺn^(n 4g-ߊ>oJUP4ǝHFQ 02lA ɍeyoP!t2R_ʪb[ sSw|le/_RM:#=s 38 9f٥Yٟ5_9ڥP.1# ]at@c_nY_A6!Լ_ 5I{%* OvS&A'ӽ"z:X^Eq ݯA\ R_- .\LlCr u`Aگ]ʐe7X<(>O(*)ߨfȓ.X6^=X¾(J&h&V am߫:y0X]S>DU9D'E +? 23 $!@MU)O*_#(QH?_bgFj.R7HQO+7xY5<~a29^F`ڋEM%(us$[p_J:`4]vRx?X}kwo:q)0':W1τ=R)aS~G9)fɸ\lfSi^o%s2lhIzd,>>Ѝ X bNhVqi^PWC8aEetI#>񵯢q]l 'ۧ Y) y^qTt:ZlKҮ9Ǹњi״df&^˳E<u"sN񿈟U֔dwb&+73vpUv 1-g=_6\~N_VFc^,̈BUݜXZc&(XJE7]}iQ)oBx~?l[[WB*xa/Fkq]@ bkxrbz,|kcѩn4 ycӸ]2T:'nKDvjl49qR;C(*TIY1FÕP)B#>rSlTvh1MSS[CEH08\2Xɔ(AY[7 h&ʣ{TeGJI],#zhrǿ@ FFa.u}!QjL7O%-eCvZ w+g3w!c eQօ\Zڄ tޏH W 2bimO4ZAZsҝ8oqŲ lvui<>%zfP /0<&$j`juFv\*/.s7Y/U'|Nk<'B8IHtdTXf2gBy;}  1wx4!O9Q)Es; arhr۬٦y(?e@2h>\NU6F%b==szg{e4$msXkt%~UO:7]}:[G%=W{v&2T5{hh#FYH' tMeJ}ﴋK`sw^܋IE7@ZnZDsTzx*&$"̰-|RT_J4CmsD`Y߿BdjOrz6ɪk~Au +8f/3E,6pHA~(= <;EHYKd(?`37cER8; jǔ*]F6/Y9y6`O#Q)%^tGwj3[<.5e؊6c_ !$[cs{RE`kgbr !#L .uCr]Ѹ=$7݂ꔻX,sĸ eR*{sА A0P Nw/*?A0a3S7ɫ"+ZDBz,,O.WuB,*e#!ڿeM xҹFAN]@`KtaLĚ=>$.TGUR(Xf^"E~)DSu;0`}xFHs|h*|>6)Z ɏ - ʴL(_ZX~k05B E_uznH&[7X^gcw[lˉlѕ]٣M1 Ttph *X[ۚ{AaƷΔbr?-q_WHPlbģ^}]$!;DP`}wyn3BϽ\e8'U}OіE6WPݟoC3K"㈂F.!ψ5R"*ʷiccN.N?0BtTxǍ&%w?-mI]tP0iwpȌe VM uUgOBN:ЊVB Q*\;Ǝ=5k*W%eI5Fxv pelH ~.&:\G877:~!t2/kz%Ty0 ,gzoT=i$+joYغ QdSxE0Vf|<}&2i|6:HZn;10eٌ8'Zad59 :Oq N:}7e|ʐoeP%nC91&`]A>9*q<5`'<>2QbWH1Iɉl E5N7C9^Ic5-*ܮ˜"V|zzg (:X>)A O瑶f>˧=a-ݨyO_=#IkLatf'm-iC3.\jݓ=,!]YIP)2Jܫw@;l硱|}q=桹MT"3unR ˦=ŞmWC; p[Ei4W S+չhL\x_9@[n؈ $s>v==~а|n0kB4UZc54NKh t4Q"ȪjGR2 i.!Lo.G5?pGi[t蓽U^ ?8uv endstream endobj 66 0 obj << /Length1 726 /Length2 1990 /Length3 0 /Length 2567 /Filter /FlateDecode >> stream xmRy8.KCHH}4dkRblc|g|khL٣")rEeYjD ٳ^E܉[=s{pДB۳|@*R ؙ!PӀ)( QX:8x(@ a âBD/:SGyCTB0!d2O0i 5* m\,E3+ $T, ax p d(T8 DS@fT:WJ,M M=)sn;NAc;+"aE_UfC"< "fA&PMY q\ Ι|sRQL~AߜZm6GI6K(]Cq}#~<9oA?sZ}!^@-61j:Ծ="[kQKYɬxyEK,3bl#b!SyHX86(yxdfjbVupbƤpoQ]r@]Ӱy`!Lm[iG,3mzvūbgcrwfKفۜ~_יrn+FCOjDRTTFʢ.O[Ze-܆^yUaGJ^ѭu,BS:k8aFwbv}z6Ő|ͽ"~1R tƴa'K^ڱaR|zc*P*q.}t>ޠs\HIXhCֺ:eWPpV;('g&bmXfy /~# ׳*x+`Jn)g&_5xSp"BCuz(Nk[xJgwaH?ju[;ɱ];]k;z5F*'NvdՎX-<4j"`vJX#+?*n.R#dYj9|i1|A߇ʙ:.9i t}b\IGd̔[4e\py?$|dt c_(?mV']*˄f6O 6FתN&h39. ~a n͵MCv(| 8 ]cZά/zgC=-_EHO;Ucuk1_ӬQSzy5.7/Mxq.Pwi2 "Ub {a!ßvX/Re:8 u==>&NWaocȨz3vCdcќ9cVG+aߣ*2V*o5S5iQ9I]e/3qKmð;aDV 0qՎ$mljˍI6٭g֢)ТspO>(on3[Z5$l- ZGy9%u7%2S2 Km]lr z+@i )[d2YGON|I0WvZɝ b?ƾM)hpB6Spʵ*m~&3 ;9tJ,a8g0!`ؓ\F7(i! hCb>!|{J`!R"]nF~lzZjexGsAg^+>Y)-t$;o敷ɾ0hO֬X 4, }>_0]~32}XK$K>չݦ1N-d:B ,e34Lw,ZXK(>x<"2X:`_ck-4t[HѼ}7CqڲLc^,;g;,e\|lmUiHq _L|OAD{+PJ6p;y@~T6Ryn:Th,,x%`moAsr)̨D¾$DJ"M 1TחMr HU~ endstream endobj 68 0 obj << /Length1 725 /Length2 27673 /Length3 0 /Length 28134 /Filter /FlateDecode >> stream xlsp.'+m۶m۶VdŶ۶my}OiMt]=դbv.*t \e1F34))@l`d0100B<,-\Ɣ6l M,m-j6n7777gW:'W>)\,Lf6ayMI9q*@jdci 46s6;lL,əL\fdo US ӫ L2,sq'_\W1_:yGfdXL-ś=?fWq|8jc#ghk upu1uڛ:Ž? 5 .!hg} 1Y:Yz(X÷9YSKW,7NO*ޏ^PY^PRnQ;c{K;s?|:nCT`0?]@a?eb21Yߤ.&SSSce{cԖ~Գˌ+S7H&W*yx3F;Dqфد~5[oz`jXr`7w.kA T,95RHeW)uɑ3aMg-B _@waoH- ô믬5;%0rD~mU|n _1Am .<CDonrAf-~JWFm=TtFθM;FLnK͋A zqK/8nxsn#S[&oUFE&_;;c )Al]ځmڝ5z&[H@?0jcgpc:̺B.>*lɜ;-/¶bFJK$q!G]'p1疮QEVڗW1-Bp۸ϣ^T+;y@rXP3wˤ/~ Ek;ccrBY0N3],wt&sZ. ŰVdt 3qDљx"I@vT+uJ V $-zh*|M.Q3MEK<~ӊ;Pt2\ꡝ!rN~|W7T鍫}1heT1h A/Z~c KdnQb]!ME 8-FȑWe]`'mÓ -M2VE]%S,hl#$qRg}u$Uّ!iE:賾1皘sϚ>o)ْ/Q cnS}Aʅyz9VP'BoJzE0'UtQmaA&>[ȂY:OU¾ #N0!8Aɯ H@葢r3tczx|VqMF4;([擄~ db?4 0?84^#Tqin8/w-ˏxxAz{˖4hA_mkvCY|v]5 = GF̔ܟE)dXRm{T-%"A7 7+ T_U-pg*T~32Q2ą7b풱LՍ{*MayŊaIA+M1Ԯ@Ȍ}H%fv#9Ns2AT~F66qsb?/~-OBCT 3c>sդ7e1xh=)Wg qx )U8 ‡f8 Re᝙]L 1! Pl?@jᘜ2,Ԕv; Tns~v#RGYu!2c8z:)R1nCe 9v! `,kMLy Zmɒ(ː!*qzSaFlH#@Wo9#,!zU~'># 4.yqљ,_ՏPyqVʝ+ t߲ʣF\B|j_35(Csv%( 7<نNN~z&T²\:%n$dPdق%VÅR桠 \Is{\T̢:Vٺӓ4Jtḻݣ 4e1\H|%v!"Ur?2".*:&tGϩ̳{TcFgV9|u|Wth_9`:`jd3#S-cHPp uko x+nD#nEu>~BYR/_-q8/\pK\@d#v,ո3XTk)?=MpU4x5pa*r퓁üa#ֺa׋DM9wOybTa#!]^,=8w2ubg*H]1w_v]MB#aUm#CN}j2yKrUM俄aY@GY\К!$P[Ob4}næZ.fU%^w-vdpGe;:ȷ9v {+'_8zʉ:r֫ "Y3dw^w:uΉ悝SXoEHcC_E^L*Cpŝ>p347P+a %'A7lcjy\G Lv}1DazN*gT/1rH( -˩|14w_7bK\TR\-"T8itb d@̏q;e7o[H GJ90Ŷ3.ӝmlJЙt XOv"]-ڭĭ,Qoo2 6',U7UW# 00"N$9sx\fk9l*}2 i@9폋y. oyNk,-l`H]'e0Ct07!T߃v ťٙcT#ᵖA2ߞ6K^KrDQYdOli Kp@THkHx;9WD&)#bq,K Kk:P5k8'8WmD7!=Ѽ[iBIW+q0@:g4&Y4sLصv)3,.x?X 2_ؾta>oDܸ>3Z-"*r is8`&{A]TTm}Iiҁ݄׷ W̦$Wq0}j/ Gx-YC{v_y%|Xw39[ ,HYd+36j(~f4[ g"Ĥ"P?)qJR @>sE睜ZlXĀ/10> WEJhc#odvyNAV 1viF>yjjW9k | I. ԚHjL#dE6V Ef"|0~bCkHbw][Vwڔ, tuH UL,?v޷۴wUI71 $*6v~);dG[; 8ƞIq=6SgB֤h=j(a;/43=,(9*Slihwn_vGt?6(Pe-r-uD>9,IsC|OCU셺te M÷ACk 0vy_ctGxHw9@*QL IxBvMvr}ςA)Bq@j i:Z *gch_R$!:x j(|X ^$ BȁqTU9%~E$t%Oq"2 s<ئGCt3?wAShl0Gsv?BPGɅg%PХ)Oi (N]aFA7A)0!s;yP^J[c]&8GW.pdejkz'l.KA }2"þ~j Ӱb'Ӗ$ly(zݠ 괏BFX `b-'in |ASp -͆$Z2  Jܠ β{eYF(IJwYOxIZn'*nhGD9"_CnmiI60_u^ K:B(2x f;'zo<͍HM/Y Dp+q3Tu框W3#{,J0A~_6¥U'b u_}ISќO)t2 }WG#bnAF>zF_d;|{a3b(aLoH| 68F'R6fN31Oi-uӚC Fb ߶1V()uife,0`օu?[/N|hC_ =$Y~3C#)6gj2OCQB%2hv1SRf:eKuZ 5 ]0#Ee1TT=r 4ڪ@fl@z7󮶁 (' |D kykvSC8>=j3湙j=޿3i_;7,%4Ѳ؊ޟആT4He9:ku2 O>Jz76OT@UCU `P LV!,1⟎_e|d[e=\8 b%!\B,Ӡش-wy?6i v2ĵ'h&4¥E 0uaa.Pĝ"X4q5(A7uXuZl>@]1I4F#0"%a:4*.G"[8S3.b֛٘H!ð-?39t>+w1jg#5m#*[`I|2]pԒ(ܾ:\X[U yu{(hU.=64 ./S]K_/ܚ\ǁv^% 9ꇡ 9Z"] ۍ?A:3F??{W\&GZ]e-NiV47a@#;T9iʓ"Z~-۴ cZ>nvu 8ónͫo$1sQџlU%\=lllxثM ,bMR[^ ‰z|"QяPcМh2ڞ5X  EHD`v!VHuf֓ /%+`ځ5:!,v,Ekp-lҴFF9~qY^,& Z=WKg-?ӼA˼I}&•J\̋5{rdI kwvso /VөFMnL^N%y@rCt..Vn+Pmc>kU%UBi<6uDXed'W `1S_TPwEe`a i2IP>6t /  ;US )3N#7s2n92;}MY_o',E[Ľ ~>#;SBVK'dIfQ*A$yվleZzAnVڎ*DX (&N'8{EZ% '|$$W-|C6`a ;B,pK&v:gh֗VaV^9F3SM颯ŃetH:BLdaHmcs"D)țCEmT`c oD zcý 1O^?@g^(p 0r ;;v9E^쁊!&i.N{&0ǴʐU3` ]/vR3p |֖ sfH+_)C {F38dYU1E*8`~oQׇR,Z;4G\V{Hdi OhJ)4q[C\j/ {$baĢ"X'7g˝%ZCu682u1Nѽ_:JU +6#d1\S}'}Q9'l6+C0|7q,V% caJ(]݀ER=%m >)k}ЎBL*};R.WۧH@'/C'5kw9#So'C2'H\w*b5W!_u(uajp/i`&lsbm8&72l^|]dq;*`fwbZɱ8pѢД+ڦkٰ 0VhyL&LQw y'0?ۣ#`f:zC| : _R,l~?!M1D#+K-</J ?Yd'l(Z\0ZOܬDmUF }BgaVTNga<\GJ}jMmds oH5GKPv6؞=kݰK\ӚX+{lb7!&sMdkf}E&<0Ą8M E[`7ۑ7flEt>gc7rs>8zzXJf47 3Z'wӹM׳pŠ[ 0VYn xa<l, kOr߬i*$gq t0Rh 7-UܜID ɵ3O}lȰUtD]ɰFs5khۦȟ_6}w鄹6Y R DGCLj*$ AH%C\ĔK78äJT@MW0yp 4RJh89qtq YX,3q"+CaMTgIjxA]1* hD.{D-KTJU4Bu=݇vz!s(Q-ed-E4(2 ȅ1"n86XiOnUjݫ[Kr3U[?I47s78Tt~|)΀;`pxCt3i6n#|"WYZĽanE0c] XQ$.*Aɕ C$"!VWX]Y唸)vsUѤ=pɷ?Ygh:ߤzݐJDFSejoHY:uROȍb[`t`6!̣}Oi;VfJ E9c rB3?rq-.BAk! Zuw67>[ Q96*ji'HKݍ cVRW䚧;`6րJeRi@|LcVvGҚ2K̊v'?;&1lZg3h+ 6~i#ɽet;ڛfTF#kՆFrf_sB^AWn1$`Pih]>hTp,gQZ㉱tjo:M^(+bcPIwJrƂ-K2?QN1rmFO ¸]]dqʩˑ7BV~ZY*_ S/Y|xYx/ݿevp3j_;6JUM q֊[ڟmLy}PPgO_ر*bO˔FYUFjVrgw7҅J l6ٺwc@.+Yj_ñ|rq}PRy(dgcYujrQ!?GaeN/G )bFW \P '''Swr:0 Ƶd)R2<-2J"`=uw0׶<{ ӖǏ @/QM㛧5gDbjZ@a yșa%csRΪ:С;(Xv9e3vZHSIwJ +A:+k *LNZh7no&m!݌erEWT'.`J%r^RXZ1UVJ6iTLsƭ8{]D]^FzaЌg<'Aw1kTHIlb9䇗! ϡ!S6"^7`f; ǍƆcOyf94pxW(6|{UPT`?(v-r0ԩJA~n$3x'޺ȣ$5Sߺ5>Ej|x-cS+C=f"$~s+.`,U27{Hzm6 _1Vaff65#K5-l1yP`.VGAXۯPH,OĻ2DE:Hw֘ P[Q V5^iZR^N_dZX(iGm,y~z~1#W(wӑ@Bs+d5EL6hgXe Mr/d~j7U.'{Pǹ5 #f笾6W}7H,\75N,މ}bE%Jbb,:H-t>mΪOUO)jڥSP|XCy4D~ |&5)L24mLhiKPaҘAQ k{s "ߤ˝kdGJ4jA fjwT6lhz E|L<=/g؎8dz^]]L?ckvy`SF*DZ~ixbyrz><3~`hJ/"M֡$w baD7^\V Wm@]ADZ嗩Ϻ޵UY|amI+z F0Cv> Ȓ7îۚ|wEb1Vbr:ӆdrDu[ (ԾZB{q#9n:mvC%LvQ`ۻpM@VzJ.&4I/WK] g$hU*|jA  ѝ>>RFsVXtBC%穦 G^}/̈́>PJ&4yOAjraUnfFW*=4lݘB(/+2-Gdke2}.'I @û AuZ*-?Ԁԯ"(o?7-e==V$tFhW9 J 5 M][EjGD.!/TZc,Y|D)bՌ(àu(ցEb7zsW9r3q.;#wR *ڵ=BWϺQ6htw,ԗ N#сљ b<o~l^+AzEVrK-`MV@|lZmWzuh ϞX/x#A`+;h<΋E^7Oep Lקo5~1`;<X˜B#ՠ5%.Gl}}TvօaC%Xse6[t]@JZvڙV|a]{UtYLj->(خ@޴3b(f0)ۧroHʃ)g0MȔIb4%lzX{F^*#,%(b ăo9,<ғpDz>w"aĦ@pWóK*5oPQ6ˋ"MX\яbxҺϙýnu9-;L_OT_gV( 8=aڢJBUlgbZri2>{5f~ *$ڀ-gsoq}r*_]sa5> OdzD# Cft k(dPEMT~v߭63p)+gVꇼPŤQqadu\hSey_T+Zc#aI`Ӳ:WS֐N U2[~k%L]4\ iuB+<?{8bTprWx_Zw׳fJc<Ijk텓!=* nCB6 Iw,XުC0DÌ|"Ѯx#o|2G)όjXsQT/ۧknKk+c%G3?P*[u{qHԄ#s],W&X*ބZS^15@; gښME7\Xu&Bci\$~w62FpȟL[1BdZ(nUEd :om%dfdw/j!v`c`)b$Cfݧ`;_3e<_^RJ PB68@tQ27;VNtxZu=SЧlṎxxqr D cKQYf*XA<8g3VުAP}8.(& $(dEH+˞>|ƕʾńjKh KIb+٨hKLtFNͷJthPc7Qg@c)5+a{ ;h/ dc@*⭏\SB>\-!sHGQ[]kMB^~hTtOcҐZ菱9I04f.C1*˼2mׇ5 Rc08E||}r;ˈSq p@۳0*,֌Q~7KH,> c +LdPͱSp aG0b: n[-SKoJ:JΨHu_୛c/OQ[0ר~Tgz*bj] sOb~i5=@3e5 %mF,Ү6{M5~B,f\򈔱W!~C*Ji8{XSmk7^N`xyuGϬ(Z7ohۉA}1諩 sdu 6Tվ6?]Sw%F۶m۶m;86:Ɖm۶ɝyjUCI!|xzWѴrзNo1G-/)`@m#ϣQw}bZLVh'k9w@`3Ahwے/n/RA(svWtxwa@S\$( hTm9$A'0oک1!jpJvWJA)N?V]i0@78&Z5LJ{.Fs6 o+ƌ{-#xm& )G[<<RSuhd.3~ z:hJ_)~4a8# ]Bw [%Z@U'"(54j46C7mUw>."po\/a<L׋->W1KPP4)k\V@!u=-zٶpD L,t~&i 7t,-YhG50_ 3t%x:+j\\&?oKƛޔՄL3IaGp3Qv;̐]>A]5VA_mֲҨT^ y:"xxG3,baK{LKD |_PqϿU2ɰȜgk#NfgMX fō7v*p#.ܿBfccKcPn$ }1e rk]$2W͈[*-*p$G7 iѤRъ9u ALʊn:ICe"?֡u}DO$d=S=]{<$N]B7cd]B?w\^A>i0ғm MQK,-8 .z{5[tmDRFuvwchZ)lY ز&h.E{. UU$( [taM N^}L1ηhVpOn;Bn >"deJhԫ&v`/w1Ib\fSy !UJ"#j:-i%_) 6;3gzGjtsz*(~kxy5 ɍ":9*:39QsؓGQ|k;:3?њL^p$4[oD ־_ّY.f-ZyoG+B$/E}:a1AzdyT/4^ƾٳl?4ph&)W}w!$C~)'1"_7e}ik;K%rmE]S啐/g|mX=ȤgGG._܁l7Gw¼` s@Y|;SHD7{܌o,&< 0rL2(WSk8bs;Q&Ha%(?nWRwfѥ3$ceu/3(L5OLV"#wxZ8iLWmи1\U_sv:3Wn.*)"A;yح_wP(i۰VBYV޵h:&!hZ0Hv" /9l;<_3忾Q jp%G%dkX5,\vXwxN %I`=?zV{sv^_øG'wީr1*ͻ|G8$Gf=k,hGhnw.W 13aV y%*}kJA}ng2̘|;Qjs'%qJJH}j;Ӥ7IIӹ<;y~&E7`fPBm>x|ԗk{=Ț91s"'=ULXqܳ1}KqH578$))eo7"g j+/et4 /YCά]F%џvߥmJ*\1;^e綸w7M71dzO9Juڱ--l rˡyd1z*zF m)}Ĥd,=fV󪔯HZÛ{l^u5lTS=0A܄җyLY v8뷣Y`1EhP[IFEDI$Y:jE߄Ԉc8NI0:TsѠ8Kщ&;]4DP d4]':h(?Jp/Z(X=HY11^̯chƠs +elD#gN )tG9E:?Oq  ky71/IR.{F}h""i0%pZOJ[Σ]"M;*8(̤).ÂxP`,[mHO5shh ;QR6ɛKMʾtqSZͻ/]DrN52I7?(Y2$59i /X1Ӂ'Ǚ|yH*K׏7ڭ3C֕G*1|hLX@x֖:(֙P3ؓ#ti(t01^~X߭ǫ~X&ɻy dVk2NM*abyȲ`aLaYlMNE}kSftlbΐBRo{z'!YQat%g| -wlMƯZdP2a?Fq" T\rȃYw|/%b>JV);}ǰlܯZcb!g #.k3W]ZwHrC;J0k~jKG|ʣ\][ zy7=x!*4k`:H~#P]ĉBA>#./qcvP7-(  {ʨyxzvx+W +>݇t@ I]~hb秋iHAzQf5w-tGѯZF@%p8u5~ŀM!ǃ s_!$i꩜_6` 2/R5W{0C{nVi0&!]ADq ^ hySM3 |z< A!X3fbq~+~UĤA@Y m3K*1or>G%j Ueu>yv:|@3$*=ƢxzY,]%eA\F籷߭ty ?<=a(H`vK,A\e3TvkD~LMJP&Y"#TOE?GE ίWg?Om2PAc ~061w~efq,Ӌv ~pM,{I׼j׎C_7d޼t٧ipTu+_X)S$ 4Xx kג|v/ E} ߽81 M QmYmuk'{%Ij?VeTfMY,2`o; tSpTGA%E|$anJ̾v! 5y#mHڟM7]^/7fs Z$jize`J*@U*K"FgӢj%DOϐ_}"Y5|)VUĖgtZWzYc6^u6ߵ0cI/9Q盔0SwZΚ7YGEѧwBp7u0N8IgW:-/|7HA#%pS%îvzvk;9|% bdI!k\3_o[Jjq?-TtJ9dZ;_Ye-48Ғ wSw!fpE~"h݂| ԁװ_@u(K'dVމ 8YXjuQb|Ҍ+l&G}hv_?r7n(]Rğ"A*9$njveD@lŬԩ^"2fςP[A81̺getSV_w)+}K:MTT)7*w@bV%7JbЁWcUFڃ|yoH-)G2ED|)'_F :_:5Cuy;vUfYV+1ND"(2ȈY1faُdڐca\s6%|ȥx9M_Cw&( d#E.1wu"ӁyNuKSvRI4Z؆m:"]t0Dq8#<҉#3=PWS5աooIz5H94jlR)X(*n%[3ZecKLzf{+2BudQ*SxP:ر=Zt7`5mY_Y|f*FGǩQHk\+Y:/6W OTt&֊MMF)>rG^ƻtdzJk*9/q]ԁN>W啀(`5VE&kuEFtj 㝴ġ\U\3ESa`|SgxV7qT 7Ol/! Y!oo޾DBlV60K3>T_̂G|֎x~K@(Pgr-ֱ+ -yҊk!Fo*o3ɳl/4e'ư[޿:ҏu~y-bg3cV;@fOO8nsMe}QޗhF-Y5 ކ(@7/ɨ)5<ϲOQLM2KpR r$XUv&}G\_,Ȥӿ LWJR_p-$dP(c"Bf$UT;F4-TY+c X6l§=ū=~=Vҹ[Yeۑߜ\~4dL 9#ѪFO7{8H~!f{2leٱ)we7hg[TWV8M+9hW)]4fnOrTvAHfZ;MUZ^v>Q !۔KmSqajS$,*7LWIPEj7kOK^tm{פh `(˳FF!LKcQ:V85LQQ|uܱ{tLpZfY eq۰hr$}WH-0a z /Fܡ"fIRܘw5zYj>éUqwTmM/äB˭^8EըB{JKi zh5'T>diCl&xufaAJǪ&gԊJv C*L$)Е.al 'POYrR̢8oS7]\ zkbRȠWcW'׵6 Ro|Y7 S#pP,Y*v~C?rh[l4Q7~`~? PAٯ 4o`syUuM.- -:;d?;Zu]- 'T Ztܭ9KW`%ݔ+fm|]ɸgE!nin7rZTc9ڠVAEX$`'O5̴lH=T5 I~q.^I@mEx z,oӂVryg{ ]+Hǿ z 2|t)$5nL/Y.K$CqOZ]XRР(V4Xш7y%C/[iԴ8f+ʘ?f_ssghf3IDS8e>#׺jE WY0u1zIa-2 bmF`|Úz1%VP^_e+pPoUr>'nЄ<% ]> /Wm@S%j[Ki BqU)1eϹYn<ˠ1u m*ǀuaj,utDAG}>\;^RE@™I^3^VGq̐ 1}QI+с}HcDtwrkiv ]ǯPFg>W8WML/" %)]⭭``!ґVU(NMj넻~;HheYo `4܊w5&}0C=/n V:iKąM ag[,{B>ʡ葠%%T|<_ .4Yi"g>RvMK-+Ն*yY5:ơ D^yq\7^ $&p4-_^7s9xO 'h:!VB '3f2"ԠƁM=]A7ǘ^\26SRM~8~{*vj' h}fl9Yᬕgڝ9>$!Ek{;ۑA\ 92 )3#T, }Ṱ,<qNF<WoWϹKHEyjNCg{E3FWp[L%|Բ %|PX4JߥCZf%}NaeyPT\aR 5[Inc|x4UεmmaGw|.Cmd6,w6@on٪z!ޖU폫V\ȝap 2󁐃;TV(]N`7w+9V( U" (]<g endstream endobj 70 0 obj << /Length 494 /Filter /FlateDecode >> stream xmMo0 !Rz|UAa۪V&$E 6~=HUAgɯ~uo$ƛLD- t @ZcNt=YNk`T=Ro æeCڕ(>Պ AiZsn[6uc^0Xah\je?0bprOY[AKS|dۙoF)MZ}4W@{YmG;<9`;K (EytbabisbgEjq(po$}Idon-p!J m-O[L endstream endobj 71 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 72 0 obj << /Length 695 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS>u;q~:fc_0F)lGιmu f8Gӫ6b"!YUe.`M{My?IC4}+̝l/Bj*{pϻƲO('$ *{>J-9_eQ"V$)MP:^9 ^` br @ {@(\,RH&ti m+3ԅ ,;F$БzFFieD(0A1a8yΠFpnù[w6p@ )9r9b_ia|F-(:(nQHY^`nA|n(戥K}s\}sԑoA&vqc⠦ YK^ʛ!_my_)=^ ^{TGRw1RDž'xJzImi9j'pͽܳ/-_Z,N_: ~iyY2q,nЪ5QN Y58.] endstream endobj 73 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> stream xmUMo0WxvH UdC۪TBb B8߯{ .@=/ۙڽs{K;K.k6/k+[M'ҷ>dyӔKe'$cS`vfSfK}fƁVGGf\bu<19w|擬CTAW $rG]IyMsh$aW7y̟u? sK-`θtJ!'c83?NaO<Dg!;IX 0z)rЃ@kpBQ]^Z7! / U <ɉ#W m/%]cX! gȀhID8QN~ACT/sQQRs 穅ύ>7: F+}n4eE=zG~<6OɈy2kLd>O&y2ϓQ>OfdV>OF<dR'<>O)yJS*}𗏿tx>z{O->tՍ]*3>cC~ endstream endobj 75 0 obj << /Length 900 /Filter /FlateDecode >> stream xmUMo:W5?$R. d9M eCkmCp;;w~>|3E_?O]5߶w]Occ]=~?}Oyh9%?۹׬B|Ɯ>);vw%g43>\ 6 EJ78 1{~`W(-;]%=xe_,b+-O;q\L}UI--=BKE1p[! Mߊyu>.N5K)Wb٬8i[_uʕMzQ)V(Txޢjy!Z2P="Zd0\ÃGR\).2*Шa!U,H`+j.5Nα@VK-x%3%AYӀzΚ>kP#5m0Woþj.ZT$X/)n)#Wo(oRZ $Kp4Z-b\1ܰJ P"GXQi/8k^Zq:Zs9dB )sL-7xJ`aɽ)f$1 dъcCZC<73JgznHȰYɚTa,_-O87}KԴܗLloK+gJ.GZyVc48Wt]:P~`rZq.n1] S/Pu7Ue:?&?!d&1yHn5)yғBx#1ޞ]Go׏M?X endstream endobj 76 0 obj << /Length 900 /Filter /FlateDecode >> stream xmUMo:W5?$R. d9M eCkmCp;;w~>|3E_?O]5߶w]Occ]=~?}Oyh9%?۹׬B|Ɯ>);vw7{>oaI> ѲH8U/RǾ0ñ_x0ӅxBiE.͏S=/b_ixމbc4fi|8EXD_R4.GRQhV̪xvqڎXJfUıkM;rͭSlҏ֋jU,N2@ ",   T[<5 1"àcvG@mg K | +T|5flxZ1YP^ꠦdb}[ה_Q>kUbw88]k|'%Ǿjց{ g䈏rsqk:n87xIue.Aft0!?4ɳ4mFtӔ^z1?z .~lP}L endstream endobj 77 0 obj << /Length 867 /Filter /FlateDecode >> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5Fk=iL4RWOlJQn8N[?ˮ-;SݾkQP,#z7o;]j'OӇuþ{Qן x|utX|]ߙoGB;76݋ Z/ԼL)]z+Q&)H8@hcReT\`^QqJƒXQh)5HK |6 b.fh\e`bsN[sS9ӺuSrk4"nXCA8%ľFp O<cǘ,⏜x! g!aM4cnGym: C[1Flx L^"K~2&NCC&^к䅙` YecO{"CgcY =9O('=g)YB|֙Bs:S|uF:#e~,٢+>G+>3qgegK+>c]+>O+>G|FV|~+>Cѻ V|B|ƺ ~!>_Sϔ+>B|&LOrBG/}XTK5?)Nkx$sy儢 G5. &&s'sձ?"Ƌ:Z endstream endobj 78 0 obj << /Length 867 /Filter /FlateDecode >> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5&z& h<ϯK)ٔ?pݝ2ZkXvm)85];B7gѻ9x~;a`>W'?y:o&> ݋L'/㫃Bnz_7_t|~;:ذƦoiܰ^\0zu\7g"NFsu_E07H6!L@@B@q\s *Tg ]8 i/nTvc-+>c_ZZ~Z83z3[:ޭ ߬Lg3t3-g B|B|\3gg|2?z)BXIAup*^+&#sU-'H8qɼe5A78{Y-7^=!U endstream endobj 79 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 80 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 81 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 82 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn"H73W3nj24nV~ߝo.Gם8׺v7[wVt'oҺ9p/u5s89 i<ίK)ٔ?0N[?-#SIе(TP,#z7Go7ݾK5yx#7~hp^g=a{9^(Vu{_cwtjȨS! kl֍]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}TMo0+J6*ħöUSEj9߯ IVcf͏睟ݛ{)^؝}]u:vzyu|CW$nmmΑmq5)M{`qjS5үxO%r^q &\TƦkw(:m>8+>4m="${Jљ8=tz-/nqOR|-M.nTSXlDmqb]goo*co߭r#el[⌷L @ baomBҽ$`$@B)@p@)p2 d Ί?a.e8s`Wg+`#)S%~8NTҌYE, (6*3FӪr44P#Yf͞hhӰCkE88+j"7G9~PpC+R2C#`p˜1q EE5=F]=7z&`qp&bð| _/cSMrΤ f/%m Ȱw \ԉCb֓x5cfw(:Kzgqf1iXg3Np y/hHS>W#/5ferTapC w=衡xz* endstream endobj 86 0 obj << /Producer (pdfTeX-1.40.25) /Creator (TeX) /CreationDate (D:20260224094757+13'00') /ModDate (D:20260224094757+13'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> endobj 20 0 obj << /Type /ObjStm /N 52 /First 410 /Length 3293 /Filter /FlateDecode >> stream xZYo9~ׯ.17 Nx9v m[[r$9f؊3X SfEv_{dD%H@0UZ N8"y+tJF$s(2^-5V`aKB>g&a@0.*xAJXJM op>EX.UV8%p7&6 |.<($Bj)sQ>hA8 ^bX4W7T"< $LP a@UB0p8a":Q; bðsќJnaEqD^e0xp ]B;,b.,` zv\4>v_ &<03"_pxP!8 Lh<Ǥf5〚qD3mc4`g|kBA/gz!ރe <.ćFM6J-KSJf+P^X4]UĦhe;4H:ϐ,[d[^D`_$[r&8F2UGCPy8R#l̂vzNOCT)Wۈzu GeNcݍP@v '* |ӘT%uL3`,4yTEpƁM[QȤE8v R肤5,<NyޢR-E'\H˒ :y%ϫ.RP"bgUhC<΂yPaɫl3_UUot 媢-máDnmW mAFV\E4FSDrq3eRUk68Hp6w8 ?G1Y9 3G9P}L4 HIWæă@VhbTHjN!Gt Jͧ4Qi%p:0m%v{3+Ni="(ūH(U*j5"Vlq2T1>DŦ~60gPZEm.i4xSƜ4.y52OguYYC2 Z\oC5t <3X5݌XqmsB2;|:SPy;f1Ζ5>; %O62cݔcI+W iĔMI0'݋9LnuE֪%Qb|`W\-ċ58Fux9hr ^cgQ{@b7-BfȐ0-P>v0O $G43x3ya=&yO,W\B~t *s\r!RZ7$>_ףz~<_-3|t +;ove㷪\Xءjt!R׵1~]ewt/k2׳i(q/s߭Ŝ$ ǵz?Ukt8B fhQ|Σz}#l9x%.]Pa9_r#Pzbo~9+ WAņ}*öitcy"ky.Ͽ]+y {?t,Q~`  X+Gd xuZp A_~G_y7oO^좇j+}+*]DEmȮS:Jmۇ/v@)A)L9RqF7ۈ Mҟg~N3 Mߩ.}<9'gڏ  Kpna Zx]'eɏh#il T&m>C-Y܇6VD"HtY")OMiaÝL(y zIѼ@ş0J|!""0폊7DEGW1X'euE*48'\4aUURU{YVűaTO0{XWzeRzͅYDӋ224'?u5+¸ S=YwXŶZj p*a\EaE^`N֫F]¸+Vtis  FF/V  {?]>UK`o/W$e/3%v⊀߯M]BH[Jѯhz"P)s5u @{?WgAA<='K=\N4YbRZe endstream endobj 87 0 obj << /Type /XRef /Index [0 88] /Size 88 /W [1 3 1] /Root 85 0 R /Info 86 0 R /ID [<3E2E25AE1E7E6C6AFB8A0839D67EF9EC> <3E2E25AE1E7E6C6AFB8A0839D67EF9EC>] /Length 263 /Filter /FlateDecode >> stream x9JPscqH,>ev6B "HD"" *(Rҹ W6<Q F}\kbU, )2bE$EJ̋E,DmȫZECtݢG̉^'_ Aڷ~yȔbD~k8*zʼnQK{g175Nf&ȃ$T"^ C+pqQ0.uŸ2nʱq5QKx{ u=l . endstream endobj startxref 184530 %%EOF survey/inst/doc/survey.R0000644000176200001440000000437215147136377015035 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/survey.Rnw0000644000176200001440000000670611541475435015400 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/survey.pdf0000644000176200001440000036311215147136377015405 0ustar liggesusers%PDF-1.5 % 3 0 obj << /Length 1722 /Filter /FlateDecode >> stream xڍW[4~_Q)>qbe HA<,+&>m *v-vfm$DVjEׁՆa28˿}gTVÑ-ꡬڽ9j_AQO01~a JBΠ,T9koԱbEYؾ;-9x4d"(04is=`[CJGH,oˠ(<|);ܻy@yue?]Q2˃?U& 7o=`"KngUB ep2׉>LYÆV rx0VYWƒ9]6vB=<2/pɌÄ%.6@H!ʍ>世 'b$W-·*Bl.5YVU d 뽞+/$.?1T]c#}a}F/I.t7\pܫF/T@LMy u< L%Y8W`,}{(C0E{) 4:ÍRt[ޱkoqƎsC=<<9R"Ctr:8Hyt30O"P+[ux S^S>'Y% >$@3lIE;8pާ3# $0$w\Z"nKwD̞n£¹ = L擓9T'7H5(L(s/$[/xyڷ*ikzM3> ōٖcNNM3 #Ƿ4 :S, :%`t@7^ۡo 3vy.,1  =ERE͖ћ htp|cA+Iv]F[fh*K2#0#W}!O*o&4[<ɠ\A\-h4l}ǚŚo+zw;Vڼq~ ]\trci D:C(Ϻ:p${/(L?*r)܌ww@zMo(utkWzCLT+IEGDEiPQh{XT54VI[ }LG+@1rfi k~ſ'k,(z C] +-dOFکpȾ0qLq`g'cZ@n/G֮C0y>Y=%BVOߺvp/=]NN4e x4dɢ` ׆"`k&kZ{ t %Ht5uA'O{ɥENUՍ'4{Y9zJr8b"F.տpU endstream endobj 13 0 obj << /Length 1237 /Filter /FlateDecode >> stream xڥVKo6W,!) @ 8H (-zHs%V\Jw/P6Ec} 3?/޼eVKX/*r d^,C۲3\RfRa*/j6i~@=9DZl7Hw\ׇ$TOuo|\3b!luSu56d<9)JQx@档~.:M9a]a[n#j+^"> {n,$Tv0,Rq+᢯$g(־5l/rV Ct2gYvxCry_$3^Whʙ,8s=LUsτ|CR3ߏH:!3 `'FePaT0fE!!LY!\0e{2Q<-"JJAڔ<amucL#JV9(>)lnnr 9pGf=Pպawο kų6g'gbsz-1쎕G"Q "³\y׼f ֔TP_2}dV*8L4 z=T }:}UfbtWVq%_ArC6`ݱ"OgGR҇oID0$<7U$6U Czg ȪgqU$b;.Ú̵=526~t|Ýi!rmjB5.$+B6wXPyJ6EIY|TbtZA.qS8*rjJl-5ai!$>77^F endstream endobj 16 0 obj << /Length 1160 /Filter /FlateDecode >> stream xڅVMo6W9@bPP ŢvC݃"ѶP}pΐ#LX"7ߤ^Yb5׫nń F+ BkQqPLu7U{qɸf4?o}Mfŀq:fsfm5j9#Š3-~xwyFy83 Mj):&*AE6jm+Nef*ۈW"nƍl+AgG|H):>F~y4n,w$I5&lJLH04{]sCWw1 nUmeue<) B ϳ?b#2wZP4qCqz| /.'XPJ \"F9㓆8t0&0ψcWAIf]seU1|*UP`I˹{̢ Lr9wgGHP>v|nL&]J{1L-*\` KJ9oZC`ګ9vnD 0/wsWma(ozݩƟu#8PZ OL<07OԷ5b X!b 2??V7\ɤSXS qLKA89A%WDZ&t )R[dnRȱ<׺rB;a܈Vc` H} ˊ)`v}#9sZrI9 }JP<{2HÈ~rkB'm2i枖HXL,Z3F-"zD> stream xVK6WDNV I=t.6RݽMm5\;вզ)9 ?={}E ADzd/$#zU+YoL)?)ћ,a^f``3(9#+Ȃ,p`Bִ-$XE܂3.9q)h gID<#1xX2df4b.7&΢$#oDg4MN8h~'p Rci@84ԿMqMEX%%vG94Q~ Zmֺ@2Ii v*u~~:8.()z:a)䁧IbktyPdQ-1iNmB;ƶM6UmD4=7vj!j7 @22bKTW6ѿѓkYxe/mwꕶIE0K|7#aj{'pthC" _ɩG rGЂ۳WDZ jLJA".pg){9YMҳ+ xwZ54^8$׽y/Zڋӂ%Aܫ8j}~lWMBzi,# ґs?( XNҌ ht F\A˗7*vBx< IA99$))<6$k$fp}g0ʼWF.THoE -(tWg{6H_q>|&8⹢9Yq};o|IO{d34˿-+_>\խ}:Y*;^kۓh;lp/ir6zޛ'1<+O`2քG#6lvM;i`/iO@D3&f̈nt}H.`S柲τ`0#ߠ z']*HptA> stream xڵVnF}WF 6@VЇ4@h%El%ߞݥ$:rw;gΙ+f8ly7cBL+CP}Vu^(.]F qL[ƥa2p`Kŷ(*73:+#N%*>/cG N{hEc&SEQ2_#qV|>ȁU9LdobǸOf6R₀HoUvnˮl@e5T]ܵiߴ/l<v(M5Zw'}܌Aۻ=xG>nB_,|w摈DBP'ׄ1L8Q1a uٯ;}ڰ Vu_g@q58o0BӶ: 'Pͧi N?tysHk1&}*ߓ.BH-,2dVË^oIK,x$DU1wBt ?PRpH};YHv%ӛU;"<-Tg˳Ϟh endstream endobj 25 0 obj << /Length 220 /Filter /FlateDecode >> stream xm=k@ w 6}N.dv0 n\|v K~{㜇zϫz zk,02) Rkt䁬C-=|otEi84?Olx:8:6V\0RRmWk(1Y|WPJlX%yr 6ͬ!x_5Bxr2~ZZo-1j"( Jͩd fG endstream endobj 32 0 obj << /Length1 721 /Length2 19473 /Length3 0 /Length 20054 /Filter /FlateDecode >> stream xlySpmlgzc۶m۶m۶mΊm[++ާSdEw?bv.*t \e1%YF3 ))@l`d0100<,-\Ɣ l M,m-j6n7777gW:'W>MM.3KS8B\N njgdhPp54X9R6vv&ə_L\fdo US ӫ L2۹8sSmjd?\k2߬ǿ-:FF x3;l?CJ?ծ66r a{[WS'@?U6ߺ[!bv0?TCѿYSKW?;jbogg-H*sҢv&ve4t2o_iC?`&e ],= t#c*!!{oZFN-3# :9ڹf/!zlsXU/TS/R2i#[X`?`_I>ƛNFbW+5F݂aˁE>dnn)PͰd]I9"3Tt #&/=ۉS꒣di}ÙR"-Xlݑb[U:k>3ê;/gIYQ`GrD<~#[Βl.s-ͳ9TB#|tm Rťh0#r_'պw7h ˟l hES0"M¯꠆&)gFӆ _cu šPx#/4 ]^-`gǿ ˂=Xevhʂ6SCu5;/ Mm.{GOJːTC]eq#"f"+_4#c&|Uw=MXA>==iW|#nX"z&L4V)hD:m,ޮacl?a'SV1PڸˑWTotuS*f`/193*#(ԶcW*sD@{O=ErϺƫ@[0Rshh Jp [XY#% ϜH@8"^r}"#H P*W bUBΙcj(SW xQE?WoڮW(sw-"Sw cFNGvWKLJ+L[:?e&AВG/pMjZM^6~rGf:j*TBosqbt OboPdD{q"[7{bRQնR NX dp Eb#UNPlE}_`>\bM_I};R=wޗcýby;' &/AW 0${,<A$P>YtAz_Hl;|Lon>g8? wS;ls(m'0`8$}7O90IV&4OY'ccے$| 1zT*iRQIgF>_;DW0.e/C:m4-Tox~:kVF sp8j26si+H{j\?]HG(7vuctr!lAAvv, Var1~2 ,&<%nO.0( `9\G}jgT p\o \Ls`i7#4oAeR dYN $ S:w?pU %"l</0He*>>՚fۖ;N%q8R2y μlt|7'( 6W,xeDRe/MM {>hMHI8i]j g7U2&BQT#}LDK俳F4$ ;SD)IƋ h1Pퟯ깗K+t/"ǎk2I2,^o,rS/v}]>GQmmH%h_@M+UG\v] "%tL=2 Y2p/ly4 ):j1Z #N13V@sC} z =ptd|Yp͖`E.כz nkԙ/ٰN}:!77+^f`=I}.5tLxL31rcw y ޓ,V.5 $#ȱF+8dɍO)/@9D'6`w/PSط)Ѵ#P37{K8 #0&zĘ$N+lt^EZ_HL}F]Q3O(&gB4/`;h. K7/n GHqO$!Oؾx 3hpp+:at.3_>N# Nk:iE[<2X@+Ljɧ =z /S ֝s\dIv, AۑM)f2L\*J$`B=cmt6k{dU[td%yÙx}y?ZJ^ ]+'OU4_h$U"q \EGoKNT۹[]@cFXf*T_bà牳0mAj}u'Ls+vd堗)K=Yk-~߳mPCQ%!ۜo(Ӝq(T12rQ]O HѢ+wE@Wp!YlkKpq<+~46J#Cз*md.}UEcW4cz1sLp!p"6mJȭ~p^ Ol zqx4z4VH> ;wh:W?;y󊑜2'TA g6`InO#Ϟ/o,o;]Ow;Q@3T9>Se}VT 4sig`3`eSCˮ̷P*ԢQłhb[iwA`~@ʎBi~ȝ$ _{}~Qp gdEm_#\6l7#ņv {UbWdvnw| l^2,/K#d|@rB aՓ*\ظ*۹c P%)&+crc9z_[с+>.rqP٫^!MTt`]QX>y+8O딍>\?.UټVHܩ.yWʚTip3owelr}˖_│uQ?w5PXl]E? Krv[ X{0Tn Pha^L ̹a7p_Otg8CJto-g&Тs? l2B%Awڮ-N1dH[a7V_ll3`BS$ZT 2kԟ94ZWBQT2foPV%N[T蓪Ls?o^ɾ4Z7>@:_;ǾC* a9]Ӑ.o +UY@dtӑ(5L*&T ]ql}t/ RYXT.OTVGe^'^˯v^p1CiA*ʸjhة.p;ztSN&UQY0M iRr tM+Z[:^åK!W0^p;s4z3A6) ]SDv$Tԉ+ʜ;dK3r,К/7 x-ťno^NX(s&dMƬԁTth㥔;xY5l/8Б_Cv PS1uGxӤ68#pݗf kL ַE~E#_c;p1w$+s&{3Jޢ\Ϙa9O .^2W_8{}jm@"kJ >N18#VID4 aګZ5F])95,p.!7|{9." 3O׹|F3RObIaNq`1KЏh W Qx`#:0LJK0[ 9?5ggi<ʯ S`o<`!L ~9V4ا`,_&Gۭ>EbVQT\Q;^;+rˊ#T\VZ(員cEL,d:LʸP\? _2uZCM77B1Kq0P#.-]~ N9 s_g&i{쉊rDY"^< pdB~{`C!+[鶚7}qP-AZI+h׈Rn13̡o.i*v a+ +QU8jА6{A,$}iՉ.|`1qAx(E=AG`NF'eȆ&;~D ݟjiNŤs)ߐ{a,V(y#xRw I\ k`d{΃P׋ " [9*}@M@T;SRS^DcE) YDK}-㝵HMȑhG0hBמ񨶅=Aya %y_s#F~8ɿ=w5)?ޠW1.XvE[w9OITIx!A7D/ܒ*(?X5\'ݱQ$-=F܂/Kxro/pU¬&9bu!ŵ!6,cntBAbb.OjA8 $a_1-K 㹝>EĴO @ AQÏ~zeIq"^+ f'q[!dYږ+D@QQjQ\L~棦)C)cF@;``t_rObM'W+ZsK_ժ^S6tej pA ++O M=t#*b&5#FFWbB3烖"'jV&']v?NIT{*8dٶG028Aeg@yjѬRp$0A QBPd`n4%-ųtgNS_LKƀkd'v♒_1c{v1 =ۍ eàY^aIP޷+K͚6KǨv`u 9Z5,~^!2O>6hYmS7.͗t¶?Po??g _ ]Ǽ>KmBn=#v{ >*KV| NvlR?)߅79D邬.*>4W; O3G?FoF.Aon[Sgށ.0va (K^QE`? KK:ڀ^WmVlyTOo:U̢Q?['F+`xo[!*t@iUǥ0Pa:|ZZ'Q_R&%n0+$Gmbi\?~7NIOW ӳve)̂ ja8`%<)7Ё5NJ|ǩʯZaڦbto7 Iw8W3SS K F#z?߁C7bl02>܎[l(@h7\[l^Ɣj@fаʃ \ f9u inf!OAQQ~h~cB/=)D)o6e\I, [$ÇgPا>ވ/GbgEl4g5rR#SYTbhO!:郌"LQlX<ژF[ߓ"?k <#!dzsJf^w$W@m!ɰ:6U6bo1BtYC4&E5 |Ԓ ~A9ۻwd(pV FdS63a[/osj+~8#2 >MZ]aLO4FQ7L=;$%Ȝ~`T" P|hLII^P1z'Al¦s+6I3)]9o밪' +Û]_Ee]m\P:m34+zxDK֥3oؼhnoU1[.K3 1ɯ]a#FZ@(Q!V((8wYK"z❎tN{{TH&|S *D4%jtFS$1_ Tq1p!M#8&Qb7H12VZq_~tqYKi6@#^ UNwٔ{HaY`?[A-(Eعj\ܲɄU~܊0ɬ6l! a2ӧ+Xe\+.,rw/)z^~/},%}'mcXbJcOp R$"\d$1wBHz3SAgdO v9P/\hֆ9jʨz9R; g/ !5P6X}22t$*n׆X}!Q# mtүbʢ|F]Mkfr._!&I+5Fb&uT԰Á?a=RQjeҙt㶖Mq=wv?S+/SaJWK:J C_rF(N(Z^`ZGkeURt):%hJǡZ+lbg.Ι4<+}8cGZ/5*f5},y͙_w? #!}Yf_RYWXyq:4xެ&1cYWK.vLRSXAY&%y Ә4))QuW=r_=MFd`(>ɤ^%v:?_%$)F8,Xr]VoJcf nI~l,:e'ؚ X08ޒz&@E%z&a39wsˡ-o=ܡP9z0|` 8J N=/ T{.mԉF/ZλI6b`R2Xk^UG9{ˡK緱M/I{nGDd؊l%N4fcrL&S]5Z5Q+OzO1c٦zPAP-%Qŷďˬ0/`XxɊY͔BR,Q Gk_}}tv ;{~^a f"\`k|0ϡ_HHuD# q|4S_%KF hQT~iG0Nu5Wy$ǤފkfP\+n]<p H% gW/JYFeO1e7Gi6C5k->' qvdF/0 I! fXd?cۮ'#"JVAz!<0#Dz#P[%wNxgJSDc_J+s͇ʽ׺xOQ)ztb:~$ :EegK!d}lX2<5bH ndۺXP(AXANJ 6ퟺx7?5l:n+qHvFN$)7:VZxo -W)7M)=n*x!<̂# z=M7os4HgޙEG! w*Յ8҇}>x)16^&2g=V"tH-%2fV'0rNk[ى꼶}jiY5!듄n D-Uau@7trw‡1O#)EUyN ?<լCŋ+8eHٶ\ K{mt(G_"sw( [s׸ZUgP}(J%R+HolwMFB/sACBX- {[o9۟մJZxіGzujY/,Ge"vN ; BsE^"v( X*cwFy@BYwM/h1Yz%v7v4ΟDiC0c9R\ WK2Z߈(P!E(yI{Ju\ᄑhi&9_#nzYy JOV·+Y00ߜnD^ vF0>'ZK gtKYOR {!۵%j[OHl w [˙l7l*¢#)D27sdH8?0+X97E7/A3扢O744]H:{aA>D=*JK#[f4fZWT2{:ͼ'Np$|-Widh2iqrLRФ7jM;`<VxrM‹R`AP]x_~SiLF|;A2ETH/|.R8~XAch"rVBN)#r&cDRSgQk햣}&"%ut{ P(cyXk01ʑ-SpmwE+<ĸ lFڒ"%{WQ7x +K$JI1A~3]nBD%pSVЗ]^uVv[>Ѕ~:[ &yr/ 7?|%/_aݠJ$ibGj銈0Gc,Kj7 eJlNgIi7Б5`cx C~dVVU|\#О[7EGS> l¶5F0H%vD[("+duG!ވ ɐM]6A*Z " G&Շ]Q37B&eaw֚Ir+ )tɀb(áh{V}ó"6*<-ҏ Kҫ{#'ڥDmm㚝;A49| lEIw![^# "`+7|%cTi|MnklB%u*Cѕ 8T3$E>Ja&Ik2&;;满k޶}4e=)F힙IWN|N<=A+ v4 ӮLH!we3ǻ:~_WЏ 9I%tQwnWmQ rXɳC)p2;abf;{kټ6{tNcW,"Y/ӌBG1Hxt+ȼ+~c$vK`gc%Ȍ(1Ӿ k jnIf#'8.!E]wZgWt˩A޹rІM):tZ>ep Fg۞UHp0xH>цoFvUaP]rKP1*+D$- ͦJ^|%Ԩ7R-r,hA6}+((HMO6t!=(AkO01ڶL>r`C& dPYh$W8:"-QA)y5 u)!Ad#蛢ؗ$k}g(aVuO D$lY/Ҹƒ;HV.Eo94G7{'N;7R+ւ#3=S2Ͷc;Dpd:iCdUg׾($:/![A-6gQ 8+vKTplPCA10E++Ecs M+*=+ ؏+ FXLjr*n%2i֊K\/211ba"8Im6npp41vLrd=m\väLD̯{S rxؙq8 "ĭ #a!c)u[7HiC\ 1Cehχ!pQ3`68zKr5ApNW=yP'C+6`Wk5G `c$Cc]g0}f"e]mos*0囥MZʣұQww[ =q ?#Ѳ;8@+ ~Aڙ3ɔzﲛb o14ؓTrpwfXS$w|px𝣕|EsOy,ՇJUV7Y1Gz6I~5Ә? Q@(/&\Og6| T͹{21oNurkL%EakVGo vL|+"w`[8(}_n,z&@A}KT IBSSnĩ3G4PɁ$~b,ksIsYбz%TwSqުuOaň#DŽn&M*a_MF HB.UaփTS"!E6G"ķjQM6Cv#L*<54|N@}H; {} qnv.Qsź@5]HIi{>zxphJ}NYdOࠖHT5[La.qlD Ȕ^xBwS5uv 2iBݯORjvp&n=q-L`A~Eut MfٜGJ5شE 2h_Ѹ@G`_v!<8u@]rId8=SG'Fy|59 #9zHck{""=‡eo'+WQP8k xA/GZC߳.dUQ 3 WօYآZK[27'p7ӵԊr(pZ*qJTSd"R+Ia 3^ .Q`=AP/_0\Mŧ@i&Ҵt*j_'_ _\VOS%\XT+,Ӆg f.N>gOegP'sZdk@An@]qgp};,#nH&AhrPq9g mg 2,}"|?- |uݒ V\!;jp-ok=e͡'"Qr^V|d)v _jXv5k&0騐 /ƄwNPKlgS}8*U#-}R2m,n̍qeOAM+¸ynLIr+Ad{ KJPu=#r״ΐi\K`5<-W͝-Jal85?B3A~-wb#ʍ5E)`S{)I b˞{Jgd`)$RD]1_JE: (mxܯ ~cJu/bs#O%D觿lz u> \!43,MMJ>;7T'P19 4tIefJ5sPy`y*0P-b7SVJ/@$y˪u~P& D?0IPA6;p4=;h|Gu';aM8,!lDz 45t{lMB ~'yop{s@zJ&!VI_0eM 4yA#2Mam$IQhfVxONh)Q \Ik sTLA AS4c?.>JJDvsē'8C<pR-)irpY^.H}5-ǫS%.FK=zFEא=߿Z3KjЭPJ2cUߊt:ZNT0s P܄CPZ=lR0}!:g f8g [kqi[ }jmQ.- o^ɒW]68 Kֽam!~8ض =xBz8PJUj( E!JF8j}*Hm@97jߌWtxLw ~mP'&vrScѲ#shc=THR_'iw'{⢊\\;V+)298@gqe|7jˏЩ{'`@V1)QDr9J X5nF%u&%p*`$`~ "Wͱ8.@Ɉ^q6Lʹ8ytVHƈ@JCv@[n sU PhYY w[j,`9|gw40"[@`6^6olTٯ֯n4w (3K0(I-D2y/ޤG2h^TH0"Ӟ--H(bGMmёz53#گ8 ( s^@Cl7{cTo!i"+hAqYA|C)DYM3yz2f{Ey/09>"T}O#BK4ϞP03pϙd{N5kߑr1\خ61b;z)%I6)$%f;~v"8ZoJ%y=!C$| iPtJW决0r|G<`p`c0jmܬdpT } p!:dЫIu&FATݑ⫝4ށuaPTYJ yck桖MEKσՕ9(gGI#x[]2ˆؖ|h{ 1Z?ʑs~M{  v]o X3LT!WW\SH~bqua- ACSO> stream xmxL]ݶ5݋Cq׃܋ww-ݡ}Nv5X#ɦ"rjx9Z11ԥYYTT&@?@n`c!PV֮Z3v&@{3ૃ; ōM` +*Ih4 g; 4X,vNf s80Cn=@QRCTJYI )΢!0d\]-̜##F:{;bF`c\V@˿tY:]6wsO/!5[XE)[h\- ?({?YW:*E iat+_kY^-́n5wyϑ@M-) %$*&?d&&@O+?<}xL6ο/>NvCwO,,<-WBl[*$章g5VWgzoЁFWHsB;-&HS1d+ϥUV~u/# ۛ)AD޹fnOsf9 KWt@LX[3@gE-6y[/E7. t< ymY`x E$ޣ kc:{(=[~5vb2~ RyrfsRxLFp߿W*ҐMF{§C\YU!DLTO$bμx E8ij5ڢl1rM[v5nt9sD5ڛdUcmFBH~/@* v4+ߪ b0P;kO!6"zV0k-yx>?Ʈ|Kg5d_hڮMǚͥN!-c$ nº"#@g,dK LJf-7a$ŭ:L5?$ 9P@#FT BP@`y5q#4?E`D𤲍fJSvHwl;0!n3B$RY+!_jS||qkO(.RVD;IIU#"Ҍ,^?ۖ$HPȤև E! KK]rZ|K3ҫgdI,i#Ƥp 5u;a"0+hYJV]|tO7lۡCw2Ғ=i'̏& vYl'Lܑ=s"zrw"96F_Dd2;6~=AEuj9Fq%{G L;U6aTs\r>9AU$+-lMSM8jZ(XHQ\@O8C4R_vC+zMdzsq9ELiA{i1&sx'{v}8(7k%GYt_%$j<)oAM4%Z|s>?4N~b+ 31BvM[rܹ$ҵsIPÍ^dm}`abF^~Q>`[Vg$rVwAUςy?ؼoQbw+b$¼󐠚HD}D\$L$¡ݚT0`[o_yӯMr,oJ>lÝyL9|* __2PtT$M-b2ДR }'Jٽ;2tV'~%f\o S(-JU7yw4 ܹ7zE獴f)Rzo;t;)pNԔ||hw+s̅j)vE5fF%Nn|1&x}P_̭f23*נ&ie8^ ji1Sv6q$yfrj*jPK$Gf#77lZ|]y7΂"jWДZE1F ՜M"կ0!Fd3_ 9>LQLQd-DA!-s3sn\(frPq.9#~{̐ N&bUVBB WJ/m%nyT)-eWbVE FA-^40tc}ݏl[!~j|mQ:фݠK; >qlʚ4Y`VIMwp@ GtvŜ#bb?  -d:a9L1{ʡj78qHC4 Ia;;uU* eKM̸'D#+K}Q/E: Ur=)i-B=%;0\#R(`]ZIE DպAԠFx.oux6:_b$s}5خbp//c9f/> )5<݃ZqYN4m,< ңw1:r_9 C,64ٌP[R\LI=0_|}]Tv+žL 6%Q(X˶~A9.<#LfB2HMS}7vWM rԒP%#tNH (Cu> ttxlxO641ۢ.iS .hp-X ]ۃ U␩^*/ P-Z@}sUJqjѨH9n##8[fDKx"mEWx1=Z`ȕ ނ. N"udilŶNvb6%l!LЋ4fj/Qw+s4̆4a+IFɺ\7W7x3xwOlZEZJAF;E{٪;JWoMniLSj͵ibJzBžbh]W_k?s>om=a$vL=Vmpv&j%x#zK!?ɧ!.X2uQm(N<g``$4sn)Z MI. }E[%Փv=ϏQ bTq꫖* )cD5'aⱯޘ#wA#h;̼M"pKJ'gФCy4 Hsp :ug#r}ą<*5i_fzkC˃N,|7N.g\-?nmr]N;~zqwR<@|NvV,Z,ɞ7ޱwkrr2=E3.NC}3K}N((È\xoZ2Wef%GӢx7 &N%졣> hT;* #w¤Cyp&lϘP$7rT/ ~p"no3{,/~՜8< <}CDGXUUѣrN J(@6#TUjU"`#L<#C^ݺap7z[Ĝ ';Jm*<7y|`RFv"Ґ -5bTk|lvh&1G}4g@~ld|A%$\8NzѢ)ATozAS92ё5AzSY2ӯKxM™^.hnz40Ϝq.w(7 ,˹~zTwxh-Uh( buAŌԄX>Wysx"i>[&TX.Dj&L耸Z!,R{GNhE]wAjUrUGNa<ХTKYn'Q]~ X|JQ~Ng:93՜E5WR-+KRў#<`5(,7֪҂d.j[G:Co>'? [3j*1`U[TqK? -IJuIdJĆJ`dO zp}5:Υ?&La}6 /Wֿd$tkrNjNVb=47}wkc~9C%+v{js5ePWYtN9%g3Az5YcKBK'gxTM~{rZm'ok6WB)s Tɸl*w ]ue|.] ABp XH~ڕ}ӺF ?n%Tv6$G3iW xM9lb$q#c;ҊwHH,!X׸; ߊdl;h>Dj7=x1hR'X[ZÌp XγDV_Z5PZd:$[ V"յ*ǩS&1W*V ->De_>}0f6*B1>)l[ThqvKb=Dvu9qyנ18*BÌ rl"QҍѹY!H_mF"ob>ƿSS- B{GxQ z7-ӥNlqrmĈMDDM6FrcCOCR蚱=88O28`ԝMv 4꓁ vדmF<5Z/(f&%&ӏ]',' >.CHW7(>qkGVM"}3{˅=FŰArNw" EKȦ'~6?p^ J=i"a`g\0|mS˷O_2g8c%*q[DV *8r :@HQhU`_7U`ʥo Y,2M#C% Qwn{:IiU :>q(Q%ggGltɣ f74tqx/u"$;܊?_śH89ZoDz:mlgC⹨.!E)RCTGߺAD, 0pݒGZ$7}"Y\z xJz䇡#L&~ϒЊ'tFC2W<*wL6kdHR>0 aKF߫sk:CM⛅cp*k! |O$2oI2XkɄG4F1R6n>LLMQ_$vjx4)\s*L?RYVLRV,Qbkb0 'o=<'Cj 4QMc!a꧐U;Rp% |tߟ/'Nj.z\"poB' n [p;[DDfd5l.>lp1=}=ewP &}Ex V3]xTJ)Ø1CVީIwQ`S hUcYnGX3ŷ9pOG,J(pj֖DoK|?ES{O+[Yw}Vcٳ4b9qs k}i{[ [h 5HbM/&}1Ma$ G GyKLjCZx&\_W" ]'.noWﺼ2Kl_ZaH!U ),DqU:>fnc$s,˲kR@/I?%r& xc|l@4JKk#\pu/:!3>0S(FR6o t{ k"Df0Ǡ:/6V7ⴃcsl֚2^ᵉ/FT<)\=Fg}ZLKS7 nQ뼐Kz6V{vn%Hᇏx C#q\uQg=}HC5:"/\/Cץ"m`HgC1l߷1  ұ~^#d'Pt`Gm-GTBgr"8;l'G sdFAAGw&JLGwZhGz; tFJߖp ^^T"vWJmFqe(v4ݢTᅤ2HqQapi/ 0E\Yh;͂és2:/^(|pG Ej =]ȃ*"nj1.C:SHJxֽbu"bRtEf aK(';kfI.ovq8Gfg6n}piY oy}w_gol]#÷"-8z#,q}gcExd1Aҡ [G盗OFɍh˷b&gloi,}tYmVy#߅IZ:lukgp{iaC !X$ Rstξ9YlҦ˵/vIᤊ f-Zy>kčMԾ8v6 :e:J͹Ff (1m4,|uCU}5CM@+~D?[{ɉA/,z 6eglۊjC~wĖ,~:<6;g fJդ'GzMn<ΰ\l"V˝`>oPw_h,(S'_CHYAt%{ظCv [΂c[kƠ ZODRvCK$U:xc'n܄xm ҵlVw\1\8s4sm9@K'X2}keРV^(ɤ~P^Zaw05ƹAqAS$$mݸW pV#~e!?x/# 3x;*|XH>ٴ肽>vO 0 P1[$YK Ֆia6T3 mկ\/\B#^,G]D⪵ [b>v9X1'F̡Y[|sAߗJb7QHR# HRrUhرJ~VyìfWR1)?&A$pdg+53 L<(uwf6Bo!,ywL!Q)c/6|(+V i|#+-ӘcYV{I9~A욹 f.^`V* 5'e#_g\&r[6.8Rtd6 fz:F,!\ٯBʲc~V6=qD7ޭCfߺH b +=Ds(|􁧓 >9~TGޮo45אm'еYЮw]^w0x ,4P4L$BM&[}Q2)- [5`/ Kqrdͮ}^K˩b3VW6Y`j`?~XP&o5zN7̫m7S[Ʒ؇wDYg_7jiaHǙ A(uXRYJ U\4gBeG8z-;%VKrxGo]uǗ_PWꡖWj+0p@+<:np1p.NsZ8a'4HYV5~XU}xΆh8 hI) Uj<*D|UԊC7I. /S&Ķ1 "tWywΡa - ,8ǿva(Șʥ,!z˳Nϸ bVR8ќJbex>9bX@j?RātCx,U8 ՟L&n_I@8<c&##)@$)7j "ՊFd ^ Fo$a.4V@ 4TV_ZNy1įbCɂ bT1 ^2>$F{= oCǶ(.he % 2xM-}tAS>|2Ii^`R{5ݟFCjP ¢Ƚ&G*_\||v6a+S;P߼'L,WS vn9,O3o\kEԆ}Y n*ᱷWt)V (H\O,$q z^^Wz.װ!+њ_V/9U -:[{Ʈ@U5Ҋc*I{dgQٯ ėg۴4~BlҴLޜ1 Ql`\kf/YȀ͐:9U/i.l1cm Ve>6=0'eg'lñ |O-R<. V%ec]y(%_Ԫ 99D$B﷠\~ƫIW%bs_,ȸ[,#tNψjE4T"5kiɭ%ϙȀL*G-qĪVeA>KasSsX-A t7mTC"skqi GqW2hJ̘b,PfY^)HF/Ӓ3Y0 '\%ۛ@V}xkT#kY?Qh= ,s5|esu$~^"sW=Lb {~NK@Q5lꝎڻ7FwThSP[:﯂ Vg6oٛ"~e,F+ڢ>]p^C}U"IWp}8Fg:ĐndybzG4[msٓ"kUH+ցe,  3NԼ2eEA Z?iGڄ:N&_Y'L`B-džf]-aw!?F"9 f+e8CK%X$LmӘ"Oz—Mp+)+ie1/FR "J YȘRͫZ;N T^vg2νpf[1k~+IeUayPW<wB*ß%%_1dǬ OaOk"KF%DռLF췯?|t,-jm{? |&$Ǡ& u8FxFz[76 skͭVx&cvTE˖rN_NYE>19E ,a5}ِ74G~^Ar͵?B-- n@iR}C/tRu`(Kk}A@c=<5P ).*RWό9cM? MvwB2, ^^.l49mq뻃h;]g]mfq[4-(ySs9=/gx{ZNV^9Q턿o@^{ˆ AU{S&8ie^"5iKU2ܿw*k%  *I>3y_ÊTr?9t`q ,;SgmAil)ڴ'b.<(vv0 Y1pJ=l^fR|:1A;i-ˋ 4:1% aְN>lҥPu]{V#F,~vUoH#]}e q52 1{)/SrY{xD)Gu`}+K,/2mZh8JhU7mslI[+`꺭}[?PX!NeVd)$La?`"PAY6P.S{ttkLr٠H]$_0=6f-,j'2M[ }T;Joۗx2dw>_yOulLrqoSⴾZ˹+g4.xӹ GEN9ʩIe)߹itڇ@zr3uJR>*.z/')S[HyRA\ũDmu :sNO}fgBOH.K>g( @ֺ6G*[6ūY%Rܕo)fpTI[xIkdTM ,ZVBsŐ*Y}aX%+A(0mR KK#tޭ%"Kں|@#{ݯ`h@I[qvu6Zei&{ 8NC|445rV[ނ-;+qmmf &ph|byND `Itw1vR7ҭw|F`ZI2؆ ^6aLFF }' 4gd|K#fKH)K])->cƸҩ endstream endobj 36 0 obj << /Length1 721 /Length2 10235 /Length3 0 /Length 10833 /Filter /FlateDecode >> stream xmwePܲ-H%08 NpNpww{έWj^Ϧ,iqV002$UXX̌l(b`#gK;36,@Vff 3ڄicdjikԴs4򻺺 :0:2mR` (-(RJ!`G# P q6N&vSirbGW-PAB]DRIQ(!Ƥ.4Cx&近V1M-M`sK ӿ|9 W_}@Mf.66F` 3`g vUl aZxyːq6s,$-ʖ63k?6tw?_bW 4Ed% &vs_/M SV6G ;`O,QQ;w/.v  7 5qqtC1,Y$0l`glZ+Q8UO75aA8u ¶05;'Q'wC8`,u)sDfF;@XܷfYp 8M"eĵsr2{VICKaY{CzC*5Ucl;kt BC\j8N1 y7SuѢJyƋ8Uup!$ֆGnDh0"cRBEuo Q.X 5ɥ4fsS=}\${J=tZJ!Vkjg pRekTʸ R wp(%}j|x-5EANθK("MZQk>oզ`6^ 6D;ڿVFS N郙U$rE:'?^%-p4_ 6 F':"D>G)َ B5&KCxܟ){sk5J2 촲{>m_vG;^qGz[:ΰҒLe> ʮ։U&lfg< Mcvi*׊8g[},kR3eau;cx~;`2(ӟN}̛A\$ ʗha- M WA}ڝ`Zy!sĝ^:lrSҫЂ LvcV5x eGT*=r)p ѩzC q({OxP\SCT!ZG,|m }U(|쫹puCIRm^IR n!@S}ꃝ&b?Dv:ŻuQ9JB(H+0ХJ6;s7X Y\<+HMiB-xw@ox2/5VQSI i4!LeUdp"> }`a8㢖6u ݈;F;^*2SUFqyOQ :|X;j5I VqʡmrVy>&.ty1R-s˧MUףc#L6)tVb J\L7ԽEgH(je کķ:}sZ]ehHꀈ ^E^)A 0 rA3i#pժHVA=VIY_y޽aKA ({F334MFԟ g3}YsȀoɐǑΒI%Bj~ҋ7DنwiY\{2vD/;5]8d#d 4{};|M9.,ۊI3lgXymo^svUcnfiU{< -MP/: PRC m܀7}X3)1k`Y_oYk+b4^B^JmX^s_b*2Rc¦~qG3Vr ]0Q0 }CG?#MW%އüˈxj_l3I(. ܦ6ܙ{7Oi7kJՏp-~.PZ,QnzMpEa3#eVi |%3Da[D"$0b iaf|pRUL!c{h(tiMIX[]w$H;H2uJ`;+Q}D v;Z! y{◬6_yhkjyS @#ԙV@QC6ܘEU.]p6#ux‚", SyD='ɓlSw]Cfet2O7md|YbvhFvu)t700NNVa&Uvutcnrt(Qq'+ f;XB|sh8QLxBY};0f )ӲMRwh%_0}үb&~k. F'|$Pu?<;r/zd9w.@=vЮyKq(*ж+$^fF˅}o4sga<6̾~Ƚ^Idy'ɁspmkcKlstBhQő`F,훙 O-‰:-bVx+OqL;f:X`=`PFvXb,7Uo|?ޙdRɜ-rsH@bm.Xñ z(B0 (?a♚("7jU\{kL#,3Y 7/fCif0f9Yvh1G#DJǿl⑑ HVcK3*aC5EmBFͻSpStS"F@k埁bDQ .  _T"d)cM6nl5yجg/x"Z0D aFiaS * zbC$lį}\ՒbxoRd\Zjpoԉɒ}P) hq@yT/Ap"A_8կx+2L(wRТ"WYם^+|<JVOv!f uza?+tN'd0wa,x>pc(x F肒SQچ}N$fG3ŏ4-EVͨ)t{&RK F3d=1V zs孍j v״2;O?SL0Pm|Rag_ 'T%:^'c8$,.7J:0ǏQ4#crMf2,?ydD)' )LM6YOx )\"EeFi8?vJy *[/G ODbY'*DAhpJ e,pO`ny\ɯW<Fp`*|f\L=G(q|W (X<*4囹i9f^f< b oBVj9{φDzr@tjljyn!۸T9(2Y..r(N+5/$%1ˉ(\Db(JQu2fQG+|B& OӃ~؛Ұ'7I@(ငiNdPd%)XS$Y ImA5 ʬ[RITBw/%_^38~?F 9vQ?^6< ~hi F𽥎<m-Rԅmҷ 0F 3Cnp* XIPV^͂Da%!w iY$ Pǻf,u+Y:Jx]й^';VlԕWP)ym%i" zӃD*6w)1P'GP(2Ll957.qCqaJ8.QSuyF]aNl z8 *Rl3l2MOST5VD䡱|+eO:i9D˘x8m񵲽Lt*&4B3esH9}|cf+.SK1rR[0cWn_jtk-sF޹1֗9UctOmZ:fko2o4FhuEbװMG R)^O&CĐNVer1M#!ȋϥָt+3iXoj@πiYew i/od6]a ؐ-1@uE7¯NҬZu4񥫛VƝ-Ifvw * 31oE7%RɅ>6ȁξJtGR"}da*|257 $Km~(S% /74%8*h- Oheʧ#)T$|(F&".8SV뽯=b򡱿iě|4I0]TxuZ}&#<ҿLރgx]hÇg' Y,Y_}椾h%KT%|Eh=RHz+8}%~OE֬BM+R?ý\Vׅ ,q IY'r0v4~.p '(tx'Td6b]`;W&'r?9R\0p6 @P W8οۚ̄އpyIBkG 63Z8zɶ'M1ҤG2վW%6)pƺ1q*ٝ'}o;p9O3k] p2;LwDEKQ2q(K4ܭ@Bx٪Q +vv" iBc ?)tP%]JHp=C S٫r>ȫqN ^!MRNw=fZfB8= ^Q^@)Laٮf,J5YZM?y ?dܰqGQkČ/=NJtQM]X[Ϣ-n|\n=w`=镡.q>a5lR@dl%{dv Z wmiȟV`o?ZsRʍD0*9z#*u"):#Oq(&EC]Zv2Vm-yH_pmu R > "mvP5 XL>)*ls߉ $HE'f (]爮J Rǽ|$۷G1 0u BtPEU2z#qǾ*XF3(a 24]u$ ~}bpUmJ\ab+7J'TmuАYZ٫[@r:oh6&իF-4v_a {YQ@Pøb}jDv[$<2ɽJ=]|xjymCյ #pߍw6ƒaF#7vlcPAhvQZcZLh% ; ^$Jh6蝡̬?FfR/FRi;)Bqh.=˽8䙗}NLE#ۨ"tE7c3PG/Y p_[آZ^xêTɔ>Em/s9|G) FSO-PhOѥsq`n $}[ȅd !D,>g Kffpddu\ duTn |٘/LnG /ʳkw_ 50] -YŽwz"^Xy{Y +BD5m`hud" (UixB[C?P-f"Yv9+JN!dQ%bᢱSVm0PK soDfy}aIyv7 9}ŽayʼnM/LK/c96yѺL pU4c{x%Ւ%ZVVg+Pw0O M.+Nm$: ~J'̗w+y C_WVDzp5|uaP55GhՔ7QKYh¨J+@*y].7ٹmj.!KxWO#˿=2QnU@c W6uJt/f';wMM>P^Mʗ KXR3eN lo5VR^hTޠq֞H_٦z8B4}GpLkj{ў2 %A_ɭ_M#V/iRr ^eV8͎R\Q՘BuLN&ȴ4֩Izx!]ۨ^܈ν?u.r5.]u"{Kq3376 o{Qu$G)LgUFpg(y e0h6j8@~л$(:|>ƋnҸ%7<i$9۵uՋ3kq`ltGtlB2qfђr`m} (i J s 3r%pWfQF ňa]}U5}j!v0E\qc QQG}SF[|ZEēn,۩ !"&1 i*=1tE}$S lh34Y wSۈ>ނsIl.yFR>9GOvh\vm/H@-d41XɐܦQ֖1v=aiQ UY";yT3 W3>h R{̕ui/,# wz^Z߻nߍc4g4\q*T-6Ϯ|5 ۿj{< Y#ǐΎ%w3h]['v6 M,m}m"\4H 1Xa# (dz*НRlc &<)py ?Qm=ٰ[ &G_S՛J6 J9.~UI),5&~?h i(Q[GXUp\i ;ӛe. L[y4qKk:W)TiN8'vK%E =F= >D ` x0#YH =W](% Kʯt4& Z,-x9MWJ**r_ob;8]N2Wz""@-|`{ygh#KھiNQ#X?󼼉|+iXP>XjuC +bޱ%' kteEͷWwxϲʕ> stream xl&Ͷ.ܶy۶5ힶ۶m۶=m[Ӷm۸sGET,fʪ*rbq['w;fzf& 3\ hk#jdP71(Y,LLp[;wʈB1Pu\\\]2lbp27L" rTTLlL ΆV@# ф`j01+&G`bO`Y1!qy9 #񏻍#?&FNʎRK?33h0411 7IS[v' P!5kg++9k@/]([X?٘#=7@GqM#V78ɚӄ?3ƶ6Vw RR[VmN`k` &kc7.Yw6\~?1AE@^ol @g-|HWFn>UtxLsKۍT j?B\`-zbc laxgz%uJhۑ1Q{]O 64},:d^< Qg4^+02:͘?!jn1N  wؽM@޽!#l!@#k}aI9#[VbEkG^v'Fz ԭ/5L&.bGlgP3 A"yMVquH9a}j(QQQ=g[e$Nutpg?^FUצ?;ØK?8`T x,xcbu`(- ʀFlB=V)^Ï9Š;C1pԻV {.[C' (ƃnL+8V7⬋nJgЃWI[{p{K48 UKװ6d@HS027/{-Je8z/n@W2RSi~k-9&'$VQ=pQUL?ksu4)[ ͢e7B%&LIgWԉI>q0tJΉ\f7+ȱ`YrKd?؀|kTwOg 2OgߵP&,KB4q6cCUP杀іX]]SlٴOeD} N/ΤTuI.$sF_j9H)@٫ ne:o1knǏ rj =oҏ>QqouհFrJMDuAwUwA~~#:~;Dnݏ0.8O`7uEyN껮 󣼔rTvY$t q !sB3 E/&ݻ;+UOkdt%u8Xd8l"mt Iwb?ʃd fx8C)] kR*2"X 9<63X5⪋wnϲ9GRF4|d$E| KO˘=9$<9˭td$"cY@B<r0#kЪy©X[btNihʴXv G2pQIܓm㏪wk - ;.c zd30U=E/oM[6[$Mo/# Uz,)L`"uHgB^[IYqbPhpb&QLoaֽl)nl!\Qq=V|%XiGFmHIhGwX0?E6>xnk\5-'̱676_Us,ڊZF$x%RA? axT^\;Y~ZNBM?uris|vL:q ,aWNpT߿z Z-[lb@E lO,|<֬lfRE ;J+;ֹ8!a QΞ;-L8(ʿ?*A]f$eTKoDRğo 3D80/Bj 2j$o71?+/&2à_˃N6yzr3pQ6@<AcI PygMh"]"o?v>io:khH ZK{!Jf78 :~2X#ɀ.:ۃDiTsp@R+ L ~;KA&B4z};*NѮ^?0C J=d"08N@Zq>-N U 8]\fңP)[{`I ì#y;3v"tu9W>l5Oڜ5 Hp0Ӿˬ0vɱK`v<;MYMsp0.ŃjhNce&1#xZ BA*=BUm0ن&*duj}46dlU#΂I_|p G&fjx`I+ }x"fd`Q|zI$sW%X&k#kOUytMsuwO?v3vgdJ+y:~C2W:!iCp̙/~{H,_y1>?fDΒƵH9I,yB kH׭ߦ|]G0(nf0b1:Զ.Nfqb%%Qz#ʅv 2XmLYSo_*i7719T(Wn ?RDc%G^n33>U(( pžxNMIo{ځN¾wrCuVp ZiA<&@|ޫ=X RN} AO*VR2\AjgVJ͔ M Ih ug?{Ey>Ԕm ISu~k#wN &w/YP/㐦1u%=RuE"`677ؘ>*MǺJĀϒJ׀hibiV[~s8cG)Śe&ACIODtYIgoKI=*G5! nbFjwVnaLN$\UFd̈́+߼|\0-e^fW,q`NS0d|q"BϚ>?/?QKjީ&ѐCC{RT^@ b" CPg9Z26%>VZ ԀJj{OgNz kd҄́U#g@VԼ.QhRO2}EDž\i#`_nTgi'\;[>w*7۾瑫 [b9L:Kn.Ae QkRaQK3k`H"1x!I\j C]tةG[ e"xu3l1b#+ƘG̟)^| s<9>Js9t\^F}`ׂ՟7/co|u͔> <Fi/X12aT~b`ېkt7>J#FΒՓ$GܾԺH=<h]n2t(^.q hۖh>knf`qZ)'VǾ֦08+?Y8G$`~?0E,Ub:Q>K|7-$5_D FGɰ~gk=m&:QeNK$%@5?v{pS]:Uꛙ0NaGiT~A)w P_AHW~3]շudY_mŅ j+NJټ9&}[ǭlf@8^fq8R3SBrUJTՐ顓 5]k:硬%q_2?JA@` 6V In͈\RavlU ib9 KW ˗F[VPE 88(Mhr[983Aa¿rjFH<5ѢLZ[g| z8)eBwmt~E5zAtJ٥$&$B߻˰}@$^wNhT:⭆⩗9}ㄔ٦-|J$7גpSWy9-8* IC7>PQ!(OjW|=:؈LisP8 Hv'ȅ~=s,KF2+e>V j[cV=kaSݺyDK{ڶ5,96YnN>W6T9E~vC<` LI|mޣ^3v׎594B&ߕŚfe&4u @e6=Bb 4x yk:$P eccO9i*bW8$Q{F#[Fvs~ )w%< 6j h~.jzQNTyPQ01IX=ziZ\8a> 3ˬ|m|!c:5=8L»<,f#&Lwg&eShwF4+wfiދ5j#IP*'^36?ŋn@aW>x i]o3(nBo;U˖4‘JGO f>_DMf0R=wFz0kC-b *:*ɋʒS(ز`(lkIxu15 v*/WQ¥!=g,h0̠a(&D|qWhXޡfwbrn-kZg﯂n?נP@ W5O9GQ,$}%ҍ_|/tҳ{5*#dW + ͜Δy`ޜv!/d[~mT*r>7Ef-<T)e.K;꩟4)fW~JAc]!*Z1Ublf;ZI*Nm^|k"ctP$ةZ=݂8_`62%zd&!~ҥ0 4DXІU2~!Bzy΄Tɷ‹ <;% ); p.CF*4^DJKQܸ4OsEiPHTf;g%ÓpTewUgBDݮoϲW*g/ekP}mu!c A KFlS[ΧX9b|[q@"ǰ <(F_/B4w/"Gm0귳T@qJT~ۇRĤmN~Bn2 ?:AuU߷5ĥT֚^LBau{b.iq+U<|TtčAv9F' D DH06ANr,_>CqY?Sh0ٕrk{8(|PD*)cs̳[ 蠜Ma0-qd73.ޔ\bL>U Buybgz4ˋ/X2)r[98>`|\4'gzrx&g?έGdif_B8v)`,As޳-~8L ^EIy1R~ q섦.6's,m߄AS ;hn:+p+7S1w2GIdkD"z x1Rptk*C5Y'ZYV\@ Z{ o^.g8@@z!Z)\| Y1R,in)Jʳ"48z+T m3G j`ޓݡ6dO}cmL$޻R}4AQfC sXc'DjjxWĠbCj>0gzտJSi?ˮ핪b4q-?{- !-C7;aRsۅ Ni.InLJn haWH)pn+ t8y}y &aa)pVcxIju2u2DkZ2`7Y33ΐhU% ۲2-T>0 vޠ7?+.)WO [?W[."{,83#'ߔH7%_TzNE3L8+'$x~YGoST;%}tpV_xK=Ht~ȞW]cv;,6jBeJE&VMlh(Dce?5 k{BLVaW.: zyI d2?"2߱`/kalIDX\ xbi/f:~ z3|J߄JZ7hpAP]6s >6C\xW21ѦTr2 +| W{S{ {C -pUvق{;*1]1 $OD<ֱǴVaQp:XQtGysK!CQ:BngG4!$ڬp(*0O-\h*P+*0Y<D#g3o8uBA'H Zs];cu{j aZ,o[mۘ \O->t {Au PNU*]cQ(t|n K]4S)켺 M&}Pw]3R(o96&(j67Z ,P1~ ]dv͏(1Zb([|O{PtAX^?ZlB^eJ<A/xt,p 1)O O(ݹ)g d6iҋUJW#='`~hE؀Os-(JnOY֟2R#-f&8:~֙G?&ͅ FK9T|Xby/Qg5jD@dNaߜ,37 ʪ+ߜ }bZӡ.!)mX/Mt.c|+iz# ͦ8Fl6Uoe^CaMLI˘ Jcsw}YqdҸ2G}78=D|)?1Ǐ/x")CM#ziQ. cp+XG2!/.iѓ3N_~faIa.Z7w8]0LfRZk]bmA}8@dv{gK^%F~ZP;Ř+׫-IT|F]C=d}U.Q$6{֪C=TB,_d%<R̀k ~Ȥ !ӛv~.wD0`qvNz$64(3+W [$u0;F`s ,)nUy -p|F]NxG[8>)dr~x-S3oq00v(c]E1VH(ם+kƝifxZt&ٟU1Fy_zvĊ0[cR0-1%A!P]ufxο^zCO qgE>v^J#oLuh8G95 ܳN+( p`Dz;F-z PXy:Aa5jLXop=\2,Co+w:\w4gemeM#D}g?[O(<"Qf_~,nE.)=a£::A\$G5eZGf?'k8"]#\zj!4G m3êys#]Ej(C|$^0;0ɑ_>gy7Nk-R:-z,J_gǠ$/hO\;s<#VLp\3 }7Q O"(QB%:$ 9zF|RM k,2dciQ);tQbOg^ޤ!df Će~2 j{ Y(" 4пS%c)3KKm-_|z촹k&w4G2C lɺ=YzԊ`nA=<"P҅|% [ '#Y[=\.?^{0!Tί'7EJ^+^ >lYmw%rXD3[ I$n]5#,K$1MRFJ1Mk[ŴU\O %%V# S F>"SUG-cOO!QDV$yLSyF#nNy;,ƞ/Uyg mYTR1q @dSh#} 5d pEf=x+@eByQzGm2[Nѭ@y`89"Mڰ1"r끁4BX膫5<ض@\&~|"攘H kE7|UI ـg7ESkmgQ}W 5<mHL^OWn>+˶s%a!04B% O3ph&"H@W!Nak뻼Q>r&iK-1 U %>x%"eܺ ka@wr"Y?|F7-1 dB#2byh:T\{,'mdOʐޮ;^Tח?#(RpKp f.I!zDIu#D3釩yut6m1Lj)[ж·46µ6ZX`cײO gWS㘸eHϵu#w J vf/Ls Ąt.GȔ:ѽ7O\l^ףnwb@ iqb5Ac#1ȈiO.Z1xҋ`E0UvXV̰Gf{>i'CG@Z$HF)L츳8cJP6bF4= ɦ.{vǵ3\#m &ܵEwΞ9 lX޸Fc,X~ft.cw}]{EnI컚jaq5>A9]x_k( \$uszL@`{y^(n"/zw1Eږ2ZNLF 5y*+͠k iӑ VBݠ6b8̵N<$ Q*DmL,k6_W^3l i뽙FC62?FˇV[ʼ-Bcx)= ]Bwa"~Qtma/ :%.zO$܁hr2Εfb=kpFYukvԆu ^wj%Fvݤ;f&I&%up(Gak-̓i; RXB4890N"͢d동[6m,~2G#/<*v&i~zwR'8a sȲ4X"~iZ61ZP pu[hL*ʀx8BUӫ~&acmB2I?5l.P*i) ~/}džPwF,"aݶ xb4x_:130L G!uB?^6MqO'qlyP|fNR@ spx\orTۛ[-n1t!h5G%\#-8ۜg/=-."Ryxμz>>'Gp`4,1_l^g+f!ԏ'й)ץCV46Y($;h 4RydG0 9<,[GqdcabCȂTMyũ3;6^GE*fԜr$9 pbh䘲vA rdz~vk{d-'s sz;`WpX[*k'/ЁG=8{+:%Zlߛ@Ƒէ}cISs@@8_M?R :`GZpDNU'YYXTp8h~Wisړ"~<6]gv*sV=n+!'Q6poKh}&Pptokm B=CM{\7hump Jq nqmN=kHxZXx"e;&&ͲQ̊f3W˲\-MrX 2Y:"BYeMA"YDc ބp'ϿE{֟uA˩˪CG%di+8].A0(^J5GCiΫw:F\sl8QkN%k*wdso+_i8R=> rA#6g<7g)?<;UrݽMbZRSxpr;aa= w>WuRmJ#1//K@s;:AyN]+~dn'p_(4ނ|;*9*W4r4aM[0/bMkpWl&$vbCT,!)42 ,TqƟ#Ԝ+G)VTAkH(pxo GմxBXT 3aUJƋA=܎PMڧg!է)o J_ krjl\bC##|hiIXtýK7|Xt-Y[+;- n g؞ 18hc-;\?_},k0g!v_m{z{z(|?%9xL¶rh4Uq(6բDJ (R$iz,~Ҳmǵ,":|wWHݭOَ *F=,k˛p56'[Q n0SK#5Ɂ/0`MUBn~Ր"EgH9بDLZJU}S2B} YHS#&ƖZp}w" 8Vj@?)T}hݹ1z/ѻ]KNrNͬ?l^6{SP@Vӌ~2<4!U3"`iߴV4zFZA[ʁQa`\VGuagꖫh{BG$~kê. ~*AF!n-!Xkп`y]AmxKWICώAc% k+bL,?&΃66$D4%X"Q虇hS ^?S$]jo?s ;㧺5n XQBWfYT,2]{c ?z:(.߄xblqBQ"$iԥٔ*\!1_:eR#d"<F8484zj[!t$oG2?<{~ꤚԷz!4 >.,>YRnmSoJ-w +Ta\c0àm좸XCO!VGsq\MY߸,> mk{2EoMi݃3k%$2&o@꒛v|{C$Nf꺜s.&٩KݓJ(o/ PҗҜ;Zm7vd4XQFWV 4u[(rol İС+J=poO=C($V/.j%)d!$6ޤ䎅Mz "U)򜡙, y(/Ɏ mtQGq~Ts_ 9$ewNvn/8SӚJ7gF[5D:Gy=4#0PC \HVE@,Ӈ -Ɇ;=ɽz:F7C9*JWX8-h&h$Ѵ5lTiR ty{ʹw6.5clbcIsnVj9BT9?D|N:Ʋ8ۃy$I4gwM_Ϛ7p+se 5?a7TbNMz+&UX.gRLA'gk91. wB-B}onhc-2xIm'O37O.Zp`}ҏ)j,-Nw;=ND Kp܈w."qJeo0JS0%ᚯ;[/:sPɽo]5zKp#nɤxɻ3GޖAFG朜!c{C^Vjrjeiç&"M(KOcБmoS;7F@ޫ 4L,2I_8;" 5V wM xj㦘'^GX(e_@Ѓ b>jiFl('龶%h&9p7x$CrR X-}Vh~#ujl!mcļ["/ڝ/]w>/MzO*2tYԈ]PZum+Ioat{* +YĻmM[ 5`"(s&K$MR[3 & e3a)Lu]XdK3G{@L+c/ nJqqӋsbsxmUl纅a U UMOsCҪfAtAP 5FzCXc-qq yXLe8-7ڊK ~!%?bUKa YT_wvnϪUI /C+7~5ˆ%/*phc3gf&вKnD:o{2#^;VHE?体oou\2XL*`DqF0"3@jɦ]k:gycy3Yז,U^UsCA\Y] ]RLD HޜA)>}N>^XJWFb#)wե(2CC޲L[aPP~Mæb懧֒Zz9A]'읛FHѸk2 3wE(1ʩP(%0=n AhuR!B8F;KunqtlNC+?b|ѡ,^S[]K~a8fiGP5x_ͻ6 " @ү8n6ZI1"m6L,HmJk/ȡI7t>. BC\&(v1+$ G| g.S,̕pw^ku[TaNs/T55;7hqĖ\"6ks5HްUH"Er{g! N@T)>pA4fm-{PW{ \'mܿnY2I &Q7 n_Y9u ]XB3㞲TW[ y zT kPq鵭Њ*3[+? XOM'z&G̺F"ER){O%Rf㺞]ؽ_ vqi&b J2pTrS:\켃ՂC}|Rvph15QNF~ؕZЧC\,5^駼 4_̼>&% !k1I%ye.lw@nPmYfbԯq"fs"Ɛ.|y9VH I=zf74'x@.`2e̬aD|NGՖwC !jS/L9n5<3D$n=~%0Jv\Dv 7&y#7"}"D V{ ztt),fMϪ(*DDd fop*'KHîĔc *NMgPYT|ߑI=HswēaЧġ{#Vm*D&wb՞LFI/Al$E]tJOknq^d7ǥpUx ›0ڂy L2`F[==K 4hF}s᥺)I$lj%(&b\{ޙ.R:bgV!"?L۽8N(Ҙf_*0+3ێ}{K>d 3v;Sދ4_I~ҝجF6R ٧ּFC8zp%SvGwjD%#nU rӲÂl:W,dx[OɆ^əfab9=w3/'8ufrv 4F Tz)fT1G)Թ=w!OK)Blt8ܜ[j&WfBYݕWGF=ҩoQWRP<59rM/Ƌ&=tx8WgfE!1N;nIB3U hʠ8L+P!Tvvf@1 *pOvԺ r .V.n7LȿuQQ4,8YofiF.aS$o5I|ˤ:/^B5R!, -@&Er6nuzDO#X.r[D/jb;[eJx\¼>(B4wA_{_~4Z;F@ӝmV@ +eeȚ(Sc>,SiiӀęa@\!IXU_4zF#|dj2&lݴ@&JçTZ0l2ж'TsRa,AYmQn1>e{:%*D'94*}՘W[bvԏf>ڀ"*lؐ΋-* AR8lXV?E>Ʀ*$udB66iqtuqa/6=ҦCzW߅΀7Ѓ`a~rM ÔT͞* ( 3g Jl0;9Lv2:g\F7W$ݝ9ZQ2|N '1Z):jVχbԩ 9P4{ Ko7V(btvz 8ǡhhؘEv GxfS\eGShA/IOf`TQYvI8<lil@B ]lT>d=P͋KKGWzLOh4hsC,L9^0x.S/f<1KyOH9 6E0NPu66 )Z>(U MKD\S8RWP<)&f[$۱ +9IgVUWVUtAޠmk7 =yV֐l,/P!Yl,S]Bbb5kpH"s7Il㴖7@HX\>Ō2jZS)a$6 A+lJь@9BH6K}T!F3kv: V8JgN6UYk6SYG5X'VYגQ"^V{/$b-m=R =ī75;$:!`WIϏ?(x>(I84-m# "XȦ Rj7CT C-FuhTnrL<6 Q9ѩwD|)WJ'ACi{"J\rя'P[7w[/ňڵ-)%S:7Э endstream endobj 40 0 obj << /Length1 725 /Length2 36686 /Length3 0 /Length 37188 /Filter /FlateDecode >> stream xlc&M-\e˶mm۶mv6l۶5w}+8Ċ;vfȈlU<t \b** t0ddŽCg ;[Cg:P`ODCF(lghafLHiLo'#9! J9@(,))'NH).J(8Z*Y[XlTvlM,ɉl]:ʊ˩ ӫښHn7`$tem_Xt0&΄F3 [&ikjG?#! o RH(kgp%n=I5M?Ά5K?. '1 w_],ꀿU;[k߮=zy 9EuaQ[c; [3Be|:ﰂ? (e - %=to-!-3!#3; !35vqt:}Ob0kvi-E44ˌ+{n-MUfxw/w$ pǓSDد%$f ԰ln"3XrI9"3Fw#mǯ.<ڊSRdj}ijfC _@vnȰ +ô ,5$0DBɷ]+b6ﯘ 7uG!" ox7eo ?xT#㶞xY*;}"wg\_|u(")tEa`Fmrץe6&87WQ*,g71" ߝxwȄ!7L. Am6LlOdOCNڤ*߁ `mnnN)c̙M^I+l* `d>4g#ՏɄxji%XeCI܂*y<ť=Ƀꐓǂz1w/S`}˳&V #wJJȕE \`gXv/7nLf\vܹUa"( l̐2op#}#8ürF/SXY?Eg- ;% {ktg}&SH.?+LO{6^S0#"Y=Ҩ}6ZaH \xT a{ 4-86_qV ̒r] <SiqPn1wwaXNҊ(u%Znƙ])# ܣ?Qd?I\o)9υ7DĵM󑕜˃A/ g҆HA-xK.~@B{g11?Eab{`Uo53u)Q_vvmPxH]Ii?a^6Em'04}(-rF}GغF}x⽗)]"u*6Ī4 ̳&^PliD tLk(2ZMX!ys,!{" tx]U:*fIW5"BY ' K"Ky3穘Y]\;L P:-@QIqt0""e\ʪ3}uї/[NEv;fKvss;` ZddwZg`nQbJC=0SRH#Ԗ!O\^g]F7mKŒ!SIu=+aO4e8Bvb͞x1Iu;x5 [8_\d[r5//7MkXm""w }3Eb- է?gBQ?E}j h0+<+(୦#Ppʲ=_Y[Ad""ZvWD.єRI嶹)3rHzlc$zгa2Ku$NJl)ބMm[~ۅMۓNϥLHYy{s365%豗b:Zr>k./-q"% 菫܀mrZE5AhRG5dn?793ݰn>vĐ?4Ex}* AY4,փbKHtlȘz0|o$H?S%N Γ?tz2خZNz=ᶀ5 ,Kf,Rؖx3[_N?_= C$XVrPD¦ΧseqW?l"12ru{Ri|,Y"ύ~]4-eA'cZwv|KE>&a?\R5H poFJF]R6轲T2~`FgٚrԘZ-ؒ='`\Z6> wir>V>Td$=w=FT\_9 2}mB/^_ޤ:,o {T=tV6) eWNaextN2o|sN/W~xNQƺKs9D.liՄE<]5\lMCހDQtzSؔ֤ z~ wQku7s/.j3^`/2Yi&Fɻ#I;{cq.D C)6YLЧ.W[A[x:[W >(fHi> #Ϟ^&0n j=T-hFŸnsQ$w3XY#Ӣ\G~"FtK2-z!*wE *Q@gtڴ00Bl>F(-ŷۉiKZDQwV5Ya t%@+J˻4rm)qs;6 s#|TO7~YhHb~3lXrtb^p\(/I[meN]#$~ [G)9a[6\7LB~#MyPfhʎi{Y5*q=|%J(36,^ 쐌*6xOK,fч>2arS8r,fEϵ%>J—TkoBA-EY3uBi "s Bg*& }duqj $]/Eџ(>&[֧:TwCs.K.~~>Y΂̰ 4huDŽ;a;)[4D]'7czRp[ ml[1QP[ե %8nV$=GAv[!2ص1Hx#_͛Cf yF<,Ot<źW#⑉T ʧX^#P<07DK8VlJc \q,dO %joJ&F#HT ΀£oh͊Se7v qU/oȻij(&?}]폁]x\pj\9cHꞧ($3L|!8#ӇiJ%˰=Popy|#^MMZwtHh1X77{]P<0 d]+uQܜlm=g(ثӫ'ha ChRp ݫS-0|*FKhj9augAZ9?X;pn$Hƻe lr6 h`G[$":E;F׃ܡ*އ&X'/[Xڟ<7\M:VRpJ*vFiOFжDŜ2,o@Aq-f;AFqoUYT-HiҡNe-}^=!lpdvJ9P] J YG7l=_:DEgBAE+˝7Q÷=l#!y/O4 ftLK4g6rUUn\o9imOr$LL:y6ǯ߬YʯCq)+_oB""NNN5Nɍ ۟P} cWda,>|Y>91!9T^JND8gk3/  P6}Ѽq _/-J^B#jKjP,MoHVrQy~y"۶bOL7 (\[Yأ^OzneV9Q(T֚ep8tē/vΝ!soh?wwEI*7v17N,79%6'qk"E.+9C(+Zjˤn{JK<2 n0:nyвj9'0^PDeqcTU ^9\On S<"$uAXo MbTՀs\d㡘$BNapNC:'QS6[M\M@S.(X<)~[(.:1zbhI[)Gu>tds˜ECHίYH?846tM]SXUe`#!|*jg7e) {Ge!#o/26]o; ~C[uNqM bIz4r:tZˑUag4@)YBO4 P1\!Jy-[sPqො_̃.qLx)A*'GsrB⎾" =N#Eǐv 3c<]ePp2i^֣uN~sc nLڤ&Dχ0XQƿEٞǴҩK⟦vHO-C@(hhv")ad"dd_e" G?$ pv'kxڇ Uw%u񥫴3]*PXZ6MǾqCmDhKU@*S.SPD-جIU3KME[D>$5)-yK^oص{TԚ cw$\;v=uߟQдZVۨc{Y.r'΂a6 W֚@6T/PzaCT_4T>FsTǾ9_CHgn gm !pnh˰gQ_3;Ԥ+l:)x,J`*w[A`q4?IyPr$[XLEf oblt54m xױ1@| H!*O8$4UǮɓt7ͷ 5gQG=Π4a:4Qߝd9:k$*UfaE֘whl V\1'q&Wӽ灳/ |ͳ/iP*w,CڇS'Kb*bh#U8>9U!@Є dl͓ )|le"*C=03ykr@"xV !00**DAC3yh\\,UsrTz}-3PPsbMϢfS$8=#T&fqRҚGrѝ{e$R{F23>r+.%7.,Qv8B_$ѷ8~lzsHiJ[wg%K[R%uĥiƻg' B5 v#LN~Xv%ec&vd}]1{IڦX#n{FK bCZ7IÞoh2J)6@x]9Po}<*qg0nHDY\k@cMb.tl*HDXJ 0+~o΀:V_IרÆ,+`EWd@$"pa. p%a_4Ars!]Kvqƫ?F0~Ȋ#()^U E7w<h=1.rb -:nC;;T=]]@{uy#Dh|+Q"gL׼-R6)&D<R tWN!:̒d]9z8ȠWp7Kao7S;#%n x8 Q yLz*C`|yar n\WRU+jy2D#w;(5^z`sdH#v,2M1qo eoa6;3o*~;(󰕼zLyop;kó?%=ľ?ANDcCgQtvٳ,;ޯ+'|vj'v%7r+=!vEHt KX($XX;Z1 C}eB6]Yľ,+%fbg9p)Fbji+*Or"k?2BjHTJ8>~5ls~Mj7m+׼D2Uo %6I.Ӊl֒uX u4mͣZlġRDïj9P~ăyZ0*m~!1pyN1sco1-jU=UQ B:ED~/ETcZvXf &&:j)#.Y{w k+t{ Sl|3&-,2VRdvѽ%Ė=='I/dŚ|dOWEfXȵ +k{c">*LpE;QaCe5sC㊄GFԈZ`)(2xe$5ٯR7b-uM0RVH\Az>hQ.Sv1GZѪ-l-n|B{kD 2H!De=URx[,b'SnxQU=R]V0[ 3`IQ~'2ሏ_ g5 }(Q"F1fΛ lx*7V9fփ_PiU>WX gښM0b¼/X>*Ol/oKI!/*?>XBh L E/.1VN`",>)lAS9_l]k@PqF.ޑBlw1IL=UYA^nr݀ ݱiD,yY ff1]e[tePLO^ÖI}KqsvŸr>Iy G.ydg~´Q +=[֦gBdJ$`Z&)d7@qZߘJej#3hehFݪ`MA|§>W * ^n э.^1K [%+&ƮzXf##˂{J[-y9ʎ%yt,<\2Ѐ*g[O=ٳjtD0> :DW}c٣)[vg{FCbğvr jԎ˂_:Uu Ub9&?5/OAdnj5$01-'Ĝ|Oý$pxvi[n%@Dr }~xYo'WV? y:8Zq]+4Y{ۀ0 >Q@Y:ZoPΡ]\%AC.DxG)+eAdAP&&إU\ߎMM4+$P d=xÁU/.q( j!310y_\Y,j" g-tg;8_¨ hW >ע--+=6n{Jpˡ׺ zitOA"VD^!#F3FهEGB0UE4áڮdin[}b7.H;/_T&,/F5#Ji!BUx Sܥ-f̪?XORU>1ƛ?/OCZq4 OA{-e @D2\U1@ٙwY@p lF+Hǩ,~cڊE4 jBťvh(۬v}818l` ,9@-Vs0L8)-JiǴ"Ct˺&u1+4&l׸si1y͏2> o݃'61Td3}s]Q &=)$fUO HVC@WM 9;!JwF#xJ]"- #]ҞQG ^3gΜxl;4!D(¯ōda'v\jC7L; [grpPK(RKƃ*]ݸ77k;qlDsQ ;]FiQn `ǬfBv '?6Pz:[JbLX_yp'MUpGj#u`5: ,4'CшubB|V}>8BnwD@9Zdgx +U4fXJ&:(kS)R(h{ u&g)F8c?dC |:\1r19%t?ӭ%ׂݏۜQNYJp)N?\_~wv/]h#y-S"hVǙ `fҝY$9ۏbR<\L 6oZD`.+ϓC9oFш"i )1MmnXbZR~버GgɱԱw-;k݅YlyDkצ΢,!v|nV,0Su:j _л͓b"鎂h:;]3̓ l9$ӚzP:xC_= [wrzɼx@_!&4mP;y9c[{WQ Cp:gKyN%fl=Qɏ~Wg7>D"$Cx#hllrvK]!#톸MkgwڐE Qxpge 獘nMB"2j[A/-mm[pHrlips2}~:";zDh 3-v9Dm6UspOg G^skp˽c( S֔,Xm3#S0N ,[WRȧE|t7M)! _4g5 TIES~}`ˏ}wwD%iX@⟏Bc8;19HPY{a&[*p^nI%TeV05]qL ޴egMnEf/g:ơ߇QjZ]BB(;g3d *!*f M{m " wHƈ0a{#ਖ8tݢs PlQS5zՠ0ؑ竘=k9GŇţ3[^ cxO:- I3kG^@=UhJd#;_SIh5y&?q Ϸ-6h1&|{}@c)2d6Q񷏛LE$$dK:pu#ϟ-4qba'Z=8d}ۧG>r~LUO,@TlWjIǝ<:^ TmǑpx `AВ;=gAiMv05-^JvRG{ e tFf6ja2qdZ/P$MVu"txUd)t_j8^yb>bly*1a_ Y)^dzR٥t%c)\!hmq>e"n}eӏUZg/Ş= l{T1hאkɔT# ~ z.n/w͸CF^:dtϛ=ZXfw061+%.یzh5##?:62bOclY@$>v@mi!ݔ"  R!|ZGYe,\[bF}w)0@ϋ\8 (!._P26VvUd %r .Gܹv3x}]E019Da5]Fl}l5htƸ'K:D#ÌwI'hDwP`%йng9SK;+iI 㹖[a<)QB|nC&}2(-a~B^=!* ~ߠ/sa@Õr#xe`':& RnND$0 g I_Th驀KyZC3f럇T%!o<^?O쒡y(p# /"6#i>AJ\W&y<>li*B:; HŠ8 ӣ`:Ï_/Uu =Gr":w`~PTi'FPbplX$ڲ Uջ+^24 1jOemHW!Is9sEh96Rarl6#Ü kP_lE,?5crH3C;e]K˖X~ ӓ{">W1-M8xc,i2Rg1Ndx3Ɉt79B=iƀmm/ 276*Σq}Q@wv:isΖS h[3h(-]dӓnh# #^i\@J%qΐ-\ ZF;%dV[6Y`gVg8do)VȗG8VcLFѣ5k.Asov, Z ӾLSW#5-As/B9SPO6aҺ)3I&a}3^Q-ƥ>տLlZ>#I6G,0Օ[~+\mvɌ+4,'%@Fw[><%\%i\!v.nfV"c^#󸳧bLj/B!Vu4:. ܟ w"cEJ: :UϦ6'A  jj?G~p gxSX$ G}`.u6(GR]%e .GMND( ެF7UZVrz8Ձj!pΏh0`a }W/ ;[XX\oшskedh;sKW{ObQu %/Y4}lcY+5֙whe&Tޣ ka|%ݡyw]N=[+Հ\Ea()uaNT܎? G/\=z+ʤp{é+ǁ Hs\rsCr 7Ru}uFP3gy͊^Lb:bDH+g!ҕPôCf)hүrܱs5BHɒՊPsNr\~Mg]}ޑWD>i̜>K$4GVU袧 w?})9{74Wu,ZjVu #BGx`~ڡMH\Ȉ}HfDf4FRzQ2#NÿWqPEOL:eڔ-6#m JO js_us*w {J$2{f(J3/!Zz7u ?X9+`mF)5t/@\h Z& #$dubes,F{F!wa42\ 7: !)9p1d'-#@E!^S8;ִe"#o4恄MDwwo~| !VLA=HP XבL~-Q%z Kյ]k@XAP[1T)oTPBK*ڊLcYW/A#VoCM@00Ha*Bzc:31*گ̡U3?.iIٲe۶m۶m۶m)۶mt<EW@ay2Kfc2ԛj{i/<]&HJj]YJ)%RfO1 .g gtgZtwC9$' ::ɖX4{$BUJ w#n}XZ~{/$c`@#*徚zyNX%'~"°fmހoaSEV%Z"Hj>NP+z֐8.L }X`z*Do'H6ג]Ur3 ݆X0DV;oQxmc<.r~;);Ϣ*˯Hp1@+Sg~Z (.KdJdӛ"OB[8U]PʌzgG krS^^@I!(f9?Z%32cM^G2]m9:%Sڲl c_iߺbq3X1~WyNkzUKv& PKiϲ~vL ʋπ;x}Q!.8n0/ȈqDWX|$M1I0ǜٛBy4)!P)S3RH\] XFߓƩҐ[Ij_.\.њ,69Š(D{$9݉uB򓕿H/tH37qTl˝l6J+cG꼭_:"n&VQ Q!,- r g$؝+uw,@M+m0`<$t1 Fށ k VPWs MշIPe[Ÿgcy0M52Ot>#ՠ]yGtƥWCX/Gݓ7ޛA}`Hg1_mXo`oGeժ*жAʺ*Vq5a'{ݓ$KĤ3bIpte;?hY>ƽP*h~!' *GA+kc܄MPE:u#8kqS@y).Λ _`l*@,qIS@쥞$gpo6]/dSaex떂ITZqҭ!~!h4SܾKw(".!׉N& E`8LA?N[_h`oJYJ,C~/38>#jL*p1US>B΃ZR{̤3qBd&`Ł Ч̨e(Gr~$_ &9*C[tY67# |w0$04s<\ho5tDMزaC*?n7JAQ촞6PZ;.%UXO JqP4Dcy2˜H ȇGK-+ǹ!IвiW%H0Hѣ*/Lx'bv;vj5Ufܕ0FK%bGٛy|'G5>m|"@3K Ǻ~ĭat=K2rcK俔/sLw^ZYr0 \ġ!IFRx "zǃs5gK:zcZʄYO6mx:/{CSݬ.VDzi ~#xoy򒙲9!p3=k])!YcN&yBFUg(^QUS~g bkø vK!c-,6-Z8I Cm)ݾm< xq̌[){h!Z=rKl ڹa2MGP.3O?glJ}@&Ϋsy@nh2::^mZm@2h0J/w/d1QqшXܿڹZ,Gg9A2I.,)yE%+N|76 ȷ;(_cH#/EߢUYn*ŠzZrVЂ/.w GiiÕ 2mh9եxR7׮Ӫ64J ;Nt`!^k&:,ى0ioů^VEYPe{c=KOϯ a{^;-.ZVbl#Dz'1cwvuhčit 7_ )[Nn[~ʋǂc~aIJ;Ӎ]/Qp~,e{tk7NnH/'~w)*`CM}5R ҃7F QCu(Dr^SIhQ@1M嗖5h֭AuFaHU޲oC}ä"Y rm4бO\{ۂ( #gXd& 阜+oxV kF~@_P.->m2PNXm7%ʸR 5*.? >ëK3Yg5TɊ0^sCoUVV|'z0x  A3VOއnS|Y"YX.` ,yDdI_\| r}hB`- z|H?RU$"Z)@Jb b͆.e &܂5gYkAyٴ<i5MxmIu>qrN\U&fo7L&jY{F@z(51Ȍ0fLJG.yʙ#$OgɝY>3G A:&D-NA*\Ջnau@G-ބHB\{[xq[ _—2(ZkgAƍ:P҂ĥR<j[{_#^[4ɮ:"(N/ңrLbpD#ښָU\FۯkӢ˕&l &PH=R t W} ;G]M<;K07HHz2D;NE4$+ouH(g4+2nٓ_42w"W8B<0QҝWzȵi$w.D6!WŕٛA Am%kk-Ƀ*~ }Sބ0D~(}l#áwC6tDŽ7"EBL8EpeTWMy#ٟlUB0H@KHA/^rdRGoD}U\6^Xn{P.J $, @.Vua[}AǨQwY]Ӗ^5 $:Vk/qZNSn(6v}.MTKbFR8k՜yϔ`dxc%ͪVE!GչkjE0`Ya !Y|. CKc.坼?N*+flg=s,@A[B3z½X2ID.{f&&4 4Au('\'Y`Uk\9 \=TW])QSec y8y Cki +`0>Ǝ[, O[s߂xLVtkNU5WkcC/yzF`_g`"{M}Qf qEQvs_ PAj&!5jA+=vteBr\Ej!q/y:s*³\y|)w:{pLoXFٱ8rcd]7A# p$]w*@w'|z7hֿZV &b@?]Pp$J7iPsC^f5^!8 M툲O*Ϡ!"X䨒KDBUsvN>y9qe"SF\1:-*%%2v)3~ b'=q!h3㤄8=˨X~HTݝiK;0u @>=lrt_PWR>Z)ߕP57[_۱xw%yw0k9JQR +@2BC+W<10[R9UnӘk|_2:v߷ͣ0 `FOjycxk%;Lq YPI? ݢMSN)o"{mh݉0f&jG$#oY<>yQpSz%cNA'R NS|ٝ2'NVmFB4p֝6EY0 Jn+]o+W(tρ&!> Nn0MC`GS!x[B1g,ffC"/'vЦ&p׵tE=eMb-+y1y*[ozB6vQ-P/@ Plv8 qgOގB=i(돫行="HraaKsX\l Q\s51ERJ0Kj3uGFVW}9LSFckxOnjMOx#Uv-:Yap6]cY CG|r#ui Sr+)~uvUd8z`(mjvb9|5j2f+0>j8=[GN#]gQ+'G+59״R|ݽ .'H5uapRh[ NhH/E+k{ͯ~EyeY~-K{4&%vu?y9ިuz _d kJLW-⩨zw,/;G&) N̬>Mei}#| H 9ܫps_1B|~ j.PC//vi]FR6sD[Qz(A)BK"Iį"8!٩@£4^(,$~I1ב2Ө\RM׏kL]wk4TqʙA<Ԭz€;exY#~gHu@#0,?Uꖯ A~V?՝L%9#q-|H:Iod(ie X{0?a>ul&tQE Ĵ`H/cw呯j;|!S3B [7(WQ)FUدYd ̓0tV>fT-!Poǎ7;RNGM$d/`.GFxГ.f/.#GbnjNV OE'o.W|Qg˟Pܮ%WEęޓ2EUְPW(S?y*؆[AEExG,W7%\{""&*M>*kę}~oB􈘠ʴX0~SIe^{ܤ˽enX7Mh'`T&Lc4IӢqrO:a -FYfN]eZV<-$}#Z9'tHC+œq6"s# BX58q^ 0.o艀*1ӫ|r~47-CBzǗ9_d_"NYjbVAUl['m40mOqԝt@agjRLQdnzK4[ O2GsAS ErSm2Gy~%צ96g|<^S鶚X Z`1 Z\ܻgH&p&R;z]$4 [K{}CӫͲe614ũEF(X{zl/Ϝ/A},\ e440wT-ڋ ktRp2cUuF_#Gnɶ/^kTLmIܽ1ZЮO0u7(Q~WpC65.V +1AEl@4ǥсnag_k֪Z!!zL1!_+$\;򾛗ሺvAԬl~ŢuVn'%GB.^6e {}C%J;`1k60 6m2ુ&lIM /])PƷ-($ρ6iyv{oڢ~u_j`t3Bt V>3[P_)OIQoy/*K~G xRD,Q^]9*Y4,{P. 2;Vսq|Ze *5XM8+cڣEs|䳎*@=H) +$LEΝmӖ&\r^=cM}yH]R\XDc)ZQO?CV'9dF2U\$ `s3).ոEC\--OiK׻ߴW@FK>'Ƴ'Ѡ$8C'5}yӸ1,4()j$>U^ {>G)n[XF#\\u W&]@QIfw}7KKYcVU&6[Ko'k74it?u@c)9 &Zu$ZاdόMPf̓vq\VR1r]Gp7萢^$СP]i4zm@HAމ7yc`̽9&oV}PFo8k;0rEd֘9@Հ6NI?Ɉ Z`(de[gDo70_OSʦWǻrvt_;>Dͥq6 PAK(ZGz$j̯G b^ea8i M8F %weؤ0`?nKr4y`dP"=eh=n§bCfuc0T, 4z.:AT:(D54EϺF R ܵ hf`<3~tk}RUy9- xC߈7.pY'_1hӤ&Y(}:u47US)+NYx?-kY1OB AǠ@Zgp[X ?0#"!$=a;R!+[> xNF=MppUZ`,i6hrqN=e[`e5@v44`;x_BBÂlT@~;e0Yf rl 䧢?6,gqD< JY,mLɬtF$Ѓ`2RXwga_wJMdȖLZ[†;5}ܘx~4paV5N slLE"&‘WU RG#8XnH@|"S.>|iwh'l J]uO_x/Ko`hY U8)2N_ں\2zǔei8!e4\Ol{ EULBr!qba!)F_}wTH,a-;:rJWWjQ#5P:[Ygs}R>ɻψ_ > t>*q'kWEg \bx(! ț׌hd=fL!z䀎 " Ӊl5ƔynܗQ\TEWwh|s:p1n5Xj+K`m( 1`5¼4tk&,z2RfJבJ zoVBwSC>QU,U2C k4nc<:Ik^EcsXwLK8t לSgdBv9}e#]Tʀ6b;LdpS % a3KO̸Ƣ\J7kfѯYx.ޢK_XO+`bӐWٸfTr5=5o%B nͤ*:,#!`!VNxGau@Nk|+ ):tߺCPy@9O[nH\8|_) ;(QzD-Q Dg̸}>žK̚Z5I;#ɀYwp{r UP 5뢚'V0ʾ@l60 ^1e"=< 6m*| ˈdª306䋡%#Ƨ%nPu-S*_`{ez{-h=B:4ݩ%)VpT9T1v$xͽr:QC2|~'֭ 0N[* =zA8G1 @~O#0 8("QL 99u K6j7!ߏgY[7@_J0~`Nn 9?d |KqZ1 5Nr1|+ԙɞ":tjP$V4PsfFOT3+Ū)$E*HZ ; aycHBM 4R)I›;9.І{Elj)}I|{i ht!U\E8' +F/Š]NނUQ/U"IA&&}?*2P,i]7esuz0xskQ6CKA ,r!p[o_l X+x?&7,~Lm5lLЪ硗7~5zKVc )M]Cwł'2m/@<ɻ**Wn#z8P1_bЖ%LQG2 9J&Sk7 ;ɂմӖrjԥ͙6C~[ s ]bܜVfe{THQtBeHi *_ҏ tu/kr Dڶ(Kpv ; p($T4FV]V,"v' |?A~\K\Ly #\nfagsgXe*zȒ S OpA-ך a) &Ii3}sO=+`k^#k8ĉW9ΐA G.jg#EB F+W!Fr= ]i'!/ҡN"J8gv2jOVX6X}ilPpb ͫǕE-<eAw4j!?=Y0.:v7İvnPpE-q#cMn|t* A‘>OCTJd'J9h ԫjOfk5,^ m-H\]}7p#:+cpF&}eШ] xy3jf{)hvÙ@0]^ɰzK+;\)w;i~Y<1 ܐG_2ibB$ 1gxT*iTm\&|2:D(rG,Nz]bI@Y7 ɸv{a^maKeFčiH7iMt樟~${,NZ NjZS,gm$fbhTSbi_0TI,`/GQ:L Hy0v,"X&Qo6)ffDVTPaeHHz*؟&F/G1\oUA2טNs7@ZpD4VlA+MՓQOm[r+H Ē%yGj 30M}W*N f"{@;;v4]4t@WU)'\')̆f1iG}qbmt)zˌHs^`FFcx?;hcUFiCJ,"@#J^l c{ϸD\9yNP&eM6 {1@l+_RO: ACy ^?#|k2 --ZZ}hc$0>}PQ *y;+Nﯱb"SS^- }r[> zQ<"cGK }jԣgZ㒨Sk@ iSNmA.(M٨ri -pJTe`N"Q8b ~뒺 LPyg'|Z?Ukwˁo[E#"1IJJĽO騂})jH0#/ )P?*Ex~m.;PIg#~3: _Iuѥ{k_Hu+N0IyX%"nJW{0CPݢ:Gie rgE9n_$)1)NΤ9mI[HweZlK~f wJXDo{|q|կV cZr麆?j !!ws?n ~fQ AT,MO1sѣpTl5)+50'1T7ܡnܴxY[0^ 8T |>iq)BWǏ i~hÞ)]37Tu\)PL0汧 oaE Q['O;SZo!P4WV6ubYND_=&.y5:L0TI>gBuW@Ƕ*bWTr9yt`4{ Quύ0̇ wMA\!OZ[/<%kw \}0sVXIҍc"p˸ߴ+ E4^|`Θ%okԑs8vK.ĪH"+$:9c-6,zεZmB}U%0eV[{գE ~hQ\-8xPz5a_ 0*t f? /#1141*dDbXр.)t3lHhxLm)ӥiQpL@;B<l@_-p͸"- |~5ѷ~jZ&m܀Sal,$t[H eղ{NZ )J .8`Sof; Du4shi`5ó4$9H @Q &.C5eb:M뼥O>289mgx .Jc&ޝ<9ĺ2HުWjGh1;ՋS-^I롽 cb5fcy jȍoaeivްYߜquM]G굶]c!^F frB{I ktuIydW#PAu|a$ &մcP/KTmzdMlmbfT2`f<\4C1\vy)(򡦏~P.u9G!M!%h-L3bh[&"#] U%c/UަzY9I#;`2z oG@ys2ԏ(]xO9N=e^v"P\p-_kj %2[-/CKTâ>#wBĸRF} a߽f}4g1#e&bn3xy<ݕk훂,l^ǝau'r L:v2m:# ܤZַB{hlLM6yذMml42XZ:ۣ!c~V8 ]wGNToN{L0otU<=^ ޱEXwQ%YDnv+8=4\z"NN . ʇӥ6ӄ-5ȇBl_/!crʦ~I˚Nm.e؁6X蕚I/Pa>~{h[6讔p0j2>/F׮u6Dqg}$IwveAUi/l2K =m!KXEѓlkEN35VԢ9.^^zĕwFR6ÜԤqs.ږ\^"a/_ ۆVfOayRDE2+Dmݞc ǀ܁oaKO>HFE;!sxF%'V}.1׶А -VF2uWTP_/֘$Mu]>jΚ̓"Nŕ$ KZtQv'OetE~wj=F 'UtάYUq=2ɤ|bÖF&Ylw==(|7R1v'c62> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 43 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 44 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 45 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 46 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> endobj 9 0 obj << /Type /ObjStm /N 30 /First 218 /Length 1754 /Filter /FlateDecode >> stream xYYo8~. C<@=iM :+m_3ٖ\nҷxc|3$H1<ɄL&g"f*LhKeF(qɈYuf.Tk sІ~= WLP`G))2-( --vhϰXŊ5c8bp^nj*dLYظὛiQ2L;|?T*;8-YOK?4KY_ ,`<}Eklgao"fRu khT ?*IZ3@xe^W|:'ock Uf ~۰5*L>[4t)WaiѼ%3^b=#G?Gn/Jm4dۺ{AF_i6\oxNm 6D-i6'N^3쓤1ހi)쐤UR[f5zo#Z8Q0Ǹ5NC,h2B0@ *FFB 4.HI0N҄2 ck3\WӨX҉r5aVT> 5{H!`GIE];x Ik!Vݢ1um(u X0 n$eu?YĹm{@HŨ Eu&݃fHv2%Et Ĉ֘:=uOcd%JHoC DHrc!pëz,>T!څQQA,੨`-:$&AiVcLM+,ҩ,6{Ѯ^4 ^|m]( `r> O)eȦU^0ݓN "'Òi[yVdžK(Hw>HpMl8q%켮qߝ )'Uz ?sQRM/K#~Ox<U<2AK4LGg?瓔O/"4-|oJ0`@c/y]W"My#3?"[%8LȻLt=D(6_#f}o?9%two5/`Sڂ&"Չ4 "@vMG7OzԛMvL8(]M!ZnM)e-?؎C}eU6EU(ZbRFAf8&E@4k+se$|LNdzQ|wx{Eޒn>tÓܜ'cqUzg|awWKJܶʯaRx3to@ rml qRVMiQ"g:/'|MJvy< s&=gPuD~ J:uTEB>!"(DnFtB>@:Z5ON&,_b:]T2 nʴ?olݬ(++&L(OA5*[|:zImTw"\;Wƫn! *z)Ю"4]~j,Y#7G~tjxa\?ssߛgxul{[HXU->Vn?*vjَ} endstream endobj 49 0 obj << /Type /XRef /Index [0 50] /Size 50 /W [1 3 1] /Root 47 0 R /Info 48 0 R /ID [<51FC403B84649F75CAAA3EDEFEEC3A42> <51FC403B84649F75CAAA3EDEFEEC3A42>] /Length 158 /Filter /FlateDecode >> stream x=P"HDKPقXBpN&5y~~P@@d/ ]$<"D8*'6Q#ҝ͆f*B-6Q|KLVbUy8n3#p endstream endobj startxref 124081 %%EOF survey/inst/doc/epi.R0000644000176200001440000001157315147136370014247 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/NEWS0000755000176200001440000017154315143217072013303 0ustar liggesusers4.5 start of first version of multiphase() for arbitrary multiphase sampling (experimental, may contain nuts) Wilson ('score test') confidence intervals in svyciprop (from Stas Kolenikov) svydesign() gives a clearer error message when there are more stages in fpc= than in id= (for Stephanie Zimmer) svrepdesign(type="ACS") now uses mse=TRUE unless mse=FALSE is explicitly given, in which case it warns (for Anthony Damico) svystat,svrepstat objects lose their variance attribute and class on math operations so the standard errors don't end up misleading. Use svycontrast() to get transformed versions with SEs (for Pavel Krivitsky) The $aic component of svyglm objects, which is undocumented and meaningless, is now set to NA. If this breaks your code, your code was already wrong. (for Michael Reiss) svyby(covmat=TRUE) now works for estimators where subset() doesn't actually drop rows svydesign(.., weights=1) now works, though it's still not recommended. Attempts to recycle a weights vector that isn't of length 1 get an error for replicate-weight designs with user-forced degrees of freedom, the degrees of freedom shouldn't change under subsetting (because that's computationally expensive). For Joel Barnes, Isabelle Michaud clarify that calibrate() can take margins specified in either of the formats that rake() accepts rake() now handles much larger sets of margins (from Ben Schneider) The results may be different if too loose a tolerance was specified or if zeroes make the true optimum non-unique. confint(withReplicates()) assigns names when there aren't any, rather than failing (from Ben Schneider) degf<-.svyrep.design() to allow the user to modify the degrees of freedom if they specified it by hand a bit more detail on svyciprop(type="xlogit") (from Ben Schneider) Bell-McCaffrey standard errors (from Stas Kolenikov) remove spurious warning in svyvar for replicate-weights with mse=TRUE (Ben Schneider) change deprecated arma::is_finite to standard::isfinite Add option na_weights. If "allow" or "warn", svydesign will drop any records with NA weights before setting up the design. The default, "fail", will give an error. For database-backed designs it is currently only possible to have "fail" but this may change in the future (for Stephanie Zimmer and David Wilson) 4.4-3 options(survey.lonely.psu="adjust") needed strata to be a factor or numeric (for Richard Li, Durga Nagori) Initial version of multiframe() for dual-frame sampling and reweight() for optimising frame weights. Methods for svytotal, svymean, svyglm, svyvar, svychisq, update, subset Initial version of withCrossval() for cross-validation withPV with action=fun and rewrite=TRUE wasn't working add "pps_spec" virtual class for all the PPS sparse matrix things support calibration to the influence functions of a phase-1 model in calibrate.twophase and calibrate.twophase2 (currently only with simple random sampling at phase 1) added svychisq.twophase2 (for Yilin Zhang) twophase2 objects now print the call that created them better ?svystat and ?svrepstat now point to ?surveysummary, which describes the structure (for Terry Therneau) predict.svyglm will impute zero for NA coefficients (Terry Therneau). With se.fit=FALSE, predict.svyglm returns a numeric vector rather than a svystat object 4.4-2 Invalid read in C++ code, found by Brian Ripley, fixed by Ben Schneider Updated small-area vignette (Peter Gao) 4.4-1 CRAN 4.4 Fixes to calibration for PPS sampling A PPS variance matrix can now be specified as phase two of a two-phase design. This includes poisson_sampling() as a model for non-response (for Pam Shaw, Jasper Yang) svysmoothUnit() and svysmoothArea() as an interface to the SUMMER package for small-area estimation (Peter Gao, Jon Wakefield, Richard Li) 4.3 Added Ben Schneider's C++ code for multistage variances. It is currently controlled by options(survey.use_rcpp), which defaults to TRUE error in scaling Pearson residuals for svyrepglm led to confint.svrepglm with likelihood profiling not finding the ends of the interval (Stephanie Zimmer) svyolr with rank deficiency and subsetting of cases in raked designs was overwriting the 'keep' variable (Justin Wishart) print.svyciprop() was printing fewer digits for the upper CI limit than the lower limit. C++ code issues fixed degrees of freedom for score F-test in loglinear models fixed (Thomas Loughin) correct the scale in the F-distributed score test (Keiran Shao) allow user to specify degf= in svrepdesign to avoid needing to compute it (for Ben Schneider) warn if svychisq() is used with a single variable (for Isabelle Michaud) fix svyglm(rescale=FALSE) for replicate weights 4.2-1 Fixed the penalty term in AIC for linear regression. Also stop scaling by sigma2 (Justin Wishart) null_has_intercept was being ignored for AIC in linear regression svycontrast() now works with the output of svyvar(), eg to compute correlations from covariances 4.2 Handling of influence functions has CHANGED. A function that supplies influence functions must supply one for every observation it was given in its input: use 0 for observations removed by subsetting. (for Guilherme Jacob) regTermTest(method="LRT") required the two models to use the same observations (of course), but didn't check, so IT WAS WRONG. It now subsets properly. (for Keiran Shao) This will probably be the *last* interpreted-R-only version of survey. Future versions will likely incorporate C++ code for faster variance computation and for small-area estimation. deffs in svyglm.svyrep.design (Ben Schneider) svynls() allows for prior (eg precision) weights (for Gary Nelson) improved names in svyquantile.svyrep.design (Ben Schneider) trimWeights() could get into an infinite recursion (Ingmar Sturm) data(myco) from Rao, Scott, and Skinner (originally from Clayton & Hills) as.svrepdesign now throws an error with post-stratified/raked/calibrated designs -- create replicates *first*, then calibrate (for Lauren Kennedy) trimWeights now works with replicate-weights designs score tests for svyglm (with Keiran Shao) svyby(), and thus svyboxplot(), didn't handle the new quantile functions correctly when standard error/ci weren't requested (Stephanie Zimmer, Raymond Pan) svycontrast() threw an error on the output of svyby() with return.replicates=TRUE (Alena Stern) Fix regTermTest for svycoxph for the methods lookup changes in R 4.0 (and consequential change to marginpred) We don't provide model.matrix.svycoxph any more;use the inherited survival:::model.matrix.coxph Recent survival::coxph() switches to robust variances with non-integer weights so check for model$naive.var before model$var Disable the pass-through from predict.svycoxph to predict.coxph for type="expected" (Bryan Shepherd) svyby( svyvar) would throw an error on domains with only one observation (for Dirk Schumacher) svyvar() computes sample size 'n' in the same way for na.rm=TRUE as for a domain (for Raymond Pan) xdesign() for crossed designs (which aren't strictly surveys, but are basically similar) removed redundant loop in saddlepoint approximation to pchisqsum (Qiaolan Deng) fix in summary(svyivreg) for variances (Chandler McClellan) svyolr() didn't run for subsets of raked/calibrated designs (Antony Damico) add predict.svyolr (for Vincent Arel-Bundock) add anova.svycoxph (for Bryan Shepherd) add stringsToFactors=TRUE to svyby to ensure factors have same levels in domains (for various people including Stephanie Zimmer) more complicated svyby example in ?svycontrast svyranktest() gave an error for multiple groups with replicate weights (Kasuki Yoshida) Additional chisquared test for tables with zeros (CrossValidated question #571328) svydesign() has a 'calibrate.formula' option to tell R that your weights have already been calibrated/raked/post-stratified (for Tobias Schoch) svycontrast() didn't work on svrepglm objects without replicates (Thomas Loughlin) error in svycoxph with rescale=FALSE (Jing Zhang) error in vcov.svyrep.design with mse=TRUE (shows up in svyVGAM) svyquantile() didn't pay attention to interval_type for replicate weights (David Jorquera Petersen) svyquantile() qrules 5 to 9 now return the single data value when there's just one (David Jorquera Petersen) regTermTest() on svyolr() objects created in a function now finds the design object more reliably. (for Pedro Baldoni) regTermTest() will now test against null models in svycoxph() Fixes to svyquantile: https://github.com/bschneidr/r-forge-survey-mirror/pull/7 (Ben Schneider) anova.svyloglin was broken by change to anova.glm(test=NULL) (Brian Ripley) One-sample svyttest() on logical variable now tests for P(TRUE==0) not P(FALSE==0) (Stephanie Zimmer) rename svykm.fit to svykm_fit because CRAN tests 4.1-1 CRAN 4.1 svyquantile() has been COMPLETELY REWRITTEN. The old version is available as oldsvyquantile() (for David Eduardo Jorquera Petersen) svycontrast()'s improvements for statistics with replicates are now also there with svyby(), for domain comparisons (Robert Baskin) svyttest() now gives an error message if the binary group variable isn't binary (for StackOverflow 60930323) confint.svyglm Wald-type intervals now correctly label the columns (eg 2.5%, 97.5%) (for Molly Petersen) svyolr() using linearisation had the wrong standard errors for intercepts other than the first, if extracted using vcov (it was correct in summary() output) svyglm() gave deffs that were too large by a factor of nrow(design). (Adrianne Bradford) svycoxph() now warns if you try to use frailty or other penalised terms, because they just come from calling coxph and I have no reason to believe they work correctly in complex samples (for Claudia Rivera) coef.svyglm() now has a complete= argument to match coef.default(). (for Thomas Leeper) summary.svyglm() now gives NA p-values and a warning, rather than Inf standard errors, when the residual df are zero or negative (for Dan Simpson and Lauren Kennedy) In the multigroup case, svyranktest() now documents which elements of the 'htest' object have which parts of the result, because it's a bit weird (for Justin Allen) svycontrast() gets a new argument add=TRUE to keep the old coefficients as well twophase() can now take strata= arguments that are character, not just factor or numeric. (for Pam Shaw) add reference to Chen & Lumley on tail probabilities for quadratic forms. add reference to Breslow et al for calibrate() add svyqqplot and svyqqmath for quantile-quantile plots SE.svyby would grab confidence interval limits instead of SEs if vartype=c("ci","se"). svylogrank(method="small") was wrong (though method="score" and method="large" are ok), because of problems in obtaining the at-risk matrix from coxph.detail. (for Zhiwen Yao) added as.svrepdesign.svyimputationList and withReplicates.svyimputationList (for Ángel Rodríguez Laso) logLik.svyglm used to return the deviance and now divides it by -2 svybys() to make multiple tables by separate variables rather than a joint table (for Hannah Evans) added predictat= option to svypredmeans for Steven Johnston. Fixed bug in postStratify.svyrep.design, was reweighting all reps the same (Steven Johnston) Fix date for Thomas & Rao (1987) (Neil Diamond) Add svygofchisq() for one-sample chisquared goodness of fit (for Natalie Gallagher) confint.svyglm(method="Wald") now uses t distribution with design df by default. (for Ehsan Karim) confint.svyglm() checks for zero/negative degrees of freedom confint.svyglm() checks for zero/negative degrees of freedom mrb bootstrap now doesn't throw an error when there's a single PSU in a stratum (Steve White) oldsvyquantile() bug with producing replicate-weight confidence intervals for multiple quantiles (Ben Schneider) regTermTest(,method="LRT") didn't work if the survey design object and model were defined in a function (for Keiran Shao) svyglm() has clearer error message when the subset= argument contains NAs (for Pam Shaw) and when the weights contain NAs (for Paige Johnson) regTermTest was dropping the first term for coxph() models (Adam Elder) (this was in R>=4.0) svydesign() is much faster for very large datasets with character ids or strata. svyglm() now works with na.action=na.exclude (for Terry Therneau) extractAIC.svylm does the design-based AIC for the two-parameter Gaussian model, so estimating the variance parameter as well as the regression parameters. (for Benmei Liu and Barry Graubard) svydesign(, pps=poisson_sampling()) for Poisson sampling, and ppscov() for specifying PPS design with weighted or unweighted covariance of sampling indicators (for Claudia Rivera Rodriguez) 4.0 Some (and eventually nearly all) functions now return influence functions when called with a survey.design2 object and the influence=TRUE option. These allow svyby() to estimate covariances between domains, which could previously only be done for replicate-weight designs, and so allow svycontrast() to do domain contrasts - svymean, svytotal, svyratio, svymle, svyglm, svykappa Nonlinear least squares with svynls() now available Document that predict.svyglm() doesn't use a rescaled residual mean square to estimate standard errors, and so disagrees with some textbooks. (for Trent Buskirk) 3.38 When given a statistic including replicates, svycontrast() now transforms the replicates and calculates the variance, rather than calculating the variance then using the delta method. Allows geometric means to exactly match SAS/SUDAAN (for Robert Baskin) vcov.svyrep.design to simplify computing variances from replicates (for William Pelham) svykm() no longer throws an error with single-observation domains (for Guy Cafri) Documentation for svyglm() specifies that it has always returned model-robust standard errors. (for various people wanting to fit relative risk regression models). 3.37 RODBC database connections are no longer supported. Use the DBI-compatible 'odbc' package set scale<-1 if it is still NULL after processing, inside svrepdesign() [https://stats.stackexchange.com/questions/409463] Added withPV for replicate-weight designs [for Tomasz Żółtak] svyquantile for replicate-weight designs now uses a supplied alpha to get confidence intervals and estimates SE by dividing confidence interval length by twice abs(qnorm(alpha/2)). [For Klaus Ignacio Lehmann Melendez] All the svyquantile methods now take account of design degrees of freedom and use t distributions for confidence intervals. Specify df=Inf to get a Normal. [For Klaus Ignacio Lehmann Melendez] svyivreg() for 2-stage least-squares (requires the AER package) warn when rho= is used with type="BRR" in svrepdesign [for Tomasz Żółtak] Add "ACS" and "successive-difference" to type= in svrepdesign(), for the American Community Survey weights Add "JK2" to type= in svrepdesign Warn when scale, rscales are supplied unnecessarily to svyrepdesign More explanation of 'symbolically nested' in anova.svyglm Link to blog post about design df with replicate weights. Chase 'Encyclopedia of Design Theory' link again. 3.36 Add withPV.survey.design for plausible-value analyses (needs mitools >=2.4) 3.35-3 Warning from svrepdesign() if type="BRR" and scale= is specified, to catch defaulting to BRR (Stas Kolenikov) More fixes to svymle() with linear predictors for multiple parameters (no change to results, but gets rid of warning) allow svyby() to have a vector as the first argument force character vectors to factor in id= argument of svydesign (fixes Stack Overflow 54239063) 3.35-2 The previous (3.34) patch to allow offsets in svymle() didn't work with non-trivial linear predictors for multiple parameters. (reported by Beat Hulliger) 3.35-1 svytable() could give an integer overflow with a replicate-weight design having integer weights, such as CHIS. (Elizabeth Purdom) empty factor levels in the strata= argument to svydesign() no longer create strata The twophase() function gave errors when the first phase of sampling had multiple stages (reported by Pedro Luis Baldoni) 3.35 The use of RODBC is DEPRECATED. If possible, I want to move to just supporting the R-DBI interface; you can use ODBC connections with the DBI-compatible 'odbc' package Some instances of deparse() needed to be paste(deparse(), collapse=""), notably in svyciprop() (Boris Fazio) Fix to svycontrast had broken the no-names case (Brian Miner) More helpful error message with missing values in replicate weights (Antony Damico) svyglm() now uses match.call() rather than sys.call() for storing the call (for Michael Laviolette) svystandardize() now takes over=~1 for the whole population (for Michael Laviolette) svycralpha() does Cronbach's alpha (for Franziska Kößler) many tests based on the printed output are moved to tests/testoutput because they differ trivially between platforms and so aren't CRAN-compliant. 3.34 removed duplicate definition of svycontrast.svystat fix match.names() for the case of all the same names in different order (Sebastien Lucie) make rescaling of weights optional in svyglm and svycoxph (Greg Ridgeway) USER VISIBLE CHANGE: default rescaling of weights in svyglm and svycoxph with replicate weights is now mean=1, as it always was with svydesign objects, rather than sum=1. This does not affect estimates or tests or comparisons, but the AIC and its effective degrees of freedom will look more plausible, as will the deviance. Fix handling of missing data for calibrated designs in svyranktest (for Brad Biggerstaff) handle empty subsets in onestage, because svyby(). (for Greg Freedman) allow offset() in svymle() (Patrick Brown) svyhist() returns the same as hist(), plus when freq=TRUE a component count_scale giving the scale factor between counts and density (for Ward Kingkade) example of geometric means added to ?svycontrast (for Irene van Woerden) move check for missing repweights later in the function to pick up more cases (Anthony Damico) fix printing of predicted values from predict.svrepglm (for Anthony Damico) added minqa::newuoa and minqa::bobyqa as options for svymle(), and made 'newuoa' the default when a gradient is available 3.33-2 confint method for svyttest (for Brian Guay) partial fix in start= argument for svyglm() [still doesn't work inside function] 3.33-1 two minor bug fixes for ABS contributions to calibrate() 3.33 Add explicit family= argument to svyglm() methods because of strange scoping problems (for Thomas Leeper) calibrate() now displays differences between sample and population names (for Stas Kolenikov) cal_names() displays what the auxiliary variable names will be for a formula regTermTest() now does Rao-Scott-type Wald tests, which I think are the same as SUDAAN's "Satterthwaite Adjusted Wald Tests" (but I don't have an example to verify). 3.32-2 Actually add the hyperbolic sine distance function Add AIC method for svycoxph 3.32-1 pseudo-rsquared paper is out: update reference Add cal.sinh for the hyperbolic sine distance function (used in CALMAR2) with code from Maciej Beręsewicz Coerce tbl_dfs to data frames in svydesign, svrepdesign, twophase, because they aren't actually a drop-in replacement. 3.32 Add diffs for calibration from Daniel Oehm at ABS - Sparse matrix support - Heteroscedasticity parameters - more flexible boundary constraints Update references to AIC/BIC paper, Statistical Science review paper More information on accuracy of pchisqsum methods svyglm() didn't work with missing values in database-backed designs (Anthony Damico) 3.31-8 Add svysurvreg() (for Pam Shaw and Eric Oh) Remove the tests that don't produce character-identical output on all platforms (for CRAN) 3.31-7 Add deff="replace" as an option for svyratio (for Chris Webb) Add psrsq() for pseudo-R^2 statistics (for Ward Kinkade) 3.31-6 Make database-backed svydesign work with *no* design variables (for Anthony Damico and Guilherme Jacob) 3.31-5 predict.svyglm() uses object$xlevels and object$contrasts and so should be able to guess the right factor levels when they aren't supplied in newdata= (for @thosjleeper) fix return() without parentheses in svykm.R 3.31-4 svyciprop(,method="like") and confint.svyglm(method="like") work even when the design effect is large. 3.31-3 svyciprop has method="xlogit" that reproduces what SUDAAN and SPSS give. (for Rex Dwyer) Added reference for svylogrank Added example from YRBS for software comparison Copied some names from NEWS into THANKS 3.31-2 explicitly dropping dimensions on a 1x1 matrix 3.31-1 Allow for incompatible change in output of CompQuadForm::farebrother() 3.31 update isIdValid() to dbIsValid() for DBI changes. explicitly :: or import ALL THE THINGS. mse option for svrepdesign.character and svyrepdesign.imputationList was ignored (Antony Damico) confint works on output of svycontrast (for Michael Laviolette) denominator df fixed in confint.svyglm (Joey Morris) svyboxplot rule for which lower-tail points are outliers was wrong (David Collins) calibrate() with variable-specific epsilons and zero sample totals didn't work (Alex Kowarik) document that regTermTest(method="LRT") can't handle models with a start= argument and document how to use anova.svyglm instead. (Brad Biggerstaff) update tests output for new formatting in current R. 3.30-4 svypredmeans() does the same things (together with svycontrast()) as as PREDMARG in SUDAAN (for Thomas Yokota and Anthony Damico) 3.30-4 confint.svystat was handling denominator degrees of freedom wrongly for the Wald method (Jared Smith) 3.30-3 vcov.svrepstat does more sensible things when covariances aren't estimated (eg for quantiles). This fixes issues with svyby dropped support for old version of hexbin 3.30-1 Fix example(svyplot) now that "hexbin" package no longer loads grid package 3.30 svyranktest() now allows k-sample tests (eg Kruskal-Wallis) svylogrank() does the generalised G-rho-gamma logrank tests [methods from Rader and Lipsitz (and probably al)] various CRAN fixes 3.29-9 AIC.svyglm, based on Rao-Scott approximation BIC.svyglm, based on multivariate Gaussian likelihood for coefficients svyglm.svyrep.design checks values are finite before replicating calibrate() using a list of margins now allows named vectors for 1-d margins 3.29-8 svyhist(freq=TRUE) works with replicate-weight designs (for Ward Kinkade) 3.29-7 svyranktest() works with replicate-weight designs (for Matthew Soldner) reference to the lavaan.survey package in ?svyfactanal 3.29-6 svyby() now always includes within-domain covariances 3.29-5 Change from multicore to parallel. Parallel processing is now only available with R >=2.14 ddf argument really works now in confint.svyglm (Anthony Damico) colour specification in plot.svykmlist now works (Mark Rosenstein) svyplot() documentation explains how to annotate a hexbin plot 3.29-4 add symmetric=TRUE to eigenvalue calculation in anova.svyloglin, to improve numerical stability subset.svyimputationList now allows the subsets to end up with different observations in them (for Anthony Damico) subset.svyDBimputationList now gives an error if the subsets have different observations, not just a warning that people ignored. svydesign gives an error if there is only one PSU, to catch omission of tilde in svydesign(id=~1,...) (Milan Bouchet-Valat) 3.29-2 confint.svyglm(method="Wald") wasn't using its ddf= argument, because confint.default() doesn't (Anthony Damico) 3.29 svystandardize() for direct standardization over domains withReplicates() has a method for svrepstat objects added predict.svrepglm(), which can return replicates saddlepoint approximation to sum of chisquares works further out into the tails fixed bug in rescaling in calibrate() when initial weights are very wrong (Takahiro Tsuchiya) documented df= argument in svyciprop(method="mean") (Anthony Damico) added df= argument to other svyciprop methods for Stata compatibility (Anthony Damico) 3.28-3 svykappa didn't work for larger than 2x2 tables. (Jeffery Hughes) svyby didn't allow deff="replace" (Francisco Fabuel) svrepdesign(,type="other") now warns if scale, rscales arguments are not given svystat, svrepstat objects now have a plot method (barplot, currently.) svyplot(,type="bubble") now uses the basecol= argument for colors. postStratify() now works when some input weights are zero 3.28-2 calibrate() prints out sample and population totals when the lengths disagree calibrate() is more stable when the initial weights are wrong by orders of magnitude (for Kirill Mueller) calibrate() can now take a list of margins as input, similar to rake() (for various people including Kirill Mueller) 3.28-1 SE now works with output of predict.svyglm (Kieran Healy) make.panel.svysmooth() sometimes had invalid bandwidth choices. as.svrepdesign() now allows for fpc information not present in the design object (Alistair Gray) regTermTest(,method="LRT") works for svyolr(), and method="Wald" now doesn't need user-specified df (for Zachary Grinspan) svrepdesign() checks the length of the rscales= argument (Ward Kinkade). Document the problem with in-line data-dependent variable construction in svyby() (Anthony Damico) Check for completely-missing groups in svyby 3.28 svyvar() for replicate-weight designs now returns whole matrix withReplicates() has method for svyvar() output, to simplify multivariate analyses. design effect estimate for svytotal with replicate weights was wrong (Daniel Fernandes) transform() is now a synonym for update(). lots of partial argument matching removed to keep CRAN happy. 3.27 added anova.svyglm() for Wald tests and Rao-Scott LRT. anova(model1, model2) works for nested models even if not symbolically nested. formula component of svyglm$call is now always named, so update() will work. svyboxplot(,all.outliers=TRUE) didn't work for single boxes (Takahiro Tsuchiya) 3.26-1 Better missing-value handling with replicated weights in svyquantile svyboxplot() has all.outliers= argument to plot all outliers 3.26 Added Preston's multistage rescaled bootstrap (for Alois Haslinger) The multistage bootstrap can use the multicore package if available. calibrate() can take a vector of tolerances (for Alois Haslinger) [this actually used to work by accident, but now it's documented] Clearer error messages when post-strata contain NAs. 3.25-1 The ... argument to svytable() is now passed to xtabs() Clearer documentation about graphing discrete variables. 3.25 svyhist() didn't work for two-phase designs. added svylogrank() for logrank test for survival data. added svyranktest() for two-sample rank tests. svrepdesign() and as.svrepdesign() now have mse= argument to request replicate-weight variances centered around the point estimate rather than the mean of the replicates. The default is controlled by options(survey.replicates.mse), which defaults to FALSE, consistent with previous versions. (For Anthony Damico, among others) 3.24-1 CHANGE: svychisq() statistic="lincom" and "saddlepoint" now use the linear combination of F statistics from pFsum(). 3.24 Rao-Scott test based on linear combinations of Fs is now also available in regTermTest Algorithms from CompQuadForm (AS155 and AS204) now used for method="integration" in pFsum and pchisqsum. These are more accurate and faster than the previous implementations. If you use CRAN binary packages you will need at least R 2.12. pFsum() saddlepoint and Satterthwaite methods are also much faster. The saddlepoint approximation now works for the whole range, not just the right tail. 3.23-3 Some vignettes didn't load the package (Brian Ripley) Added pFsum() for linear combination of F distributions with same denominator. better example (quantile regression) in withReplicates(). 3.23-2 svyhist() didn't handle include.lowest= correctly. (Chris Wild) svyby(, return.replicates=TRUE) now returns the replicates in the same order as the printed output, and labelled. (for Bob Fay) 3.23-1 svycdf() wasn't handling replicate weights correctly. Change in svyquantile() for replicate weights when using type="quantile". Point estimate used to be mean of replicates, now is ordinary weighted quantile. (for Bob Fay) Small changes in handling of zero weights in svyquantile(). 3.23 two-sample svyttest() didn't work with replicate weights. (Richard Valliant) 3.22-4 postStratify now allows 1-d matrix as well as vector in data frame of population counts. (for Jean Opsomer) print.summary.pps wasn't being exported (Gonzalo Perez) svyhist() ignored right= argument predict.svycoxph() was slightly overestimating standard errors for survival curves. [.pps and [.twophase2 crashed when no observations were removed (Gonzalo Perez) 3.22-3 bug in trimWeights (Richard Valliant), also add warning for attempts to trim past the mean weight. 3.22-2 bug in the na.rm.by= argument to svyby() (Trevor Thompson) regTermTest() now does F tests by default (for Chris Wild) 3.22-1 added df= argument to confint() methods for svystat, svyrepstat, svyby, svyratio (for Richard Valliant) added na.rm.by= argument to svyby(), to drop groups defined by missing values of by= variables. confint.svyby() uses SE(), not vcov(), so undefined values in replicates are handled on a per-group basis. svysmooth(,method="locpoly") now has automatic bandwidth choice, and make.panel.svysmooth() will use this choice by default. 3.22 added stratsample() to take stratified samples. fixed bug in design effects for subsets of calibrated or database-based surveys changed scaling in biplot.svyprcomp so area is proportional to weight, rather than height proportional to weight. 3.21-3 svyratio() can now estimate design effects (for Scott Kostyshak) 3.21-2 Rao & Wu bootstrap wasn't sampling n-1 PSUs (Richard Valliant) 3.21-1 bug in printing variances for three or more variables (Corey Sparks) svyquantile() reliably returns NA for NAs in data when na.rm=FALSE. svymle() was not using analytical gradients with nlm() (Christian Raschke) 3.21 added trimWeights() to trim weights, and trim= option to calibrate (for Richard Valliant) clearer documentation that svyquantile() needs ci=TRUE or keep.var=FALSE to work with svyby() added a simple random sample to data(api) as promised in book (Djalma Pessoa) 3.20 in svycoxph() modify the rescaling of weights to avoid very small weights because of convergence problem in coxph() with counting-process data (for Tapan Mehta) added some multivariate statistics: svyprcomp(): principal components, svyfactanal(): factor analysis. added heuristic check that combined.weights= has been specified correctly. confint.default wouldn't give CIs for multiple parameters with replicate weights, because the vcov matrix didn't have variable names. (Art Burke) More of the svyciprop() methods now work for replicate-weight designs. The book of the package is now available! (see http://faculty.washington.edu/tlumley/svybook) 3.19 svrepdesign() can specify replicate-weight columns with a regular expression svrepdesign() can produce database-backed designs svyquantile() has a df argument to use a t distribution in Woodruff's method (for Wade Davis) calibrate() doesn't require an intercept in the calibration model (for Richard Valliant) regTermTest() and model.frame() work with svyolr() (for Michael Donohue) better printing of svyvar() output (for Brad Fulton) twophase() documents more clearly that method="simple" is preferred for standard epi designs where it works. better error messages when a database-backed design has a closed connection 3.18-1 documented the need to use quasibinomial/quasipoisson in svyglm improved the description of confidence intervals and standard errors for svyquantile. 3.18 Changed the default to combined.weights=TRUE in svrepdesign() Fixed bug in multiple imputation analysis with multicore package. The check for PSUs properly nested in strata had some false negatives. 3.17 Under Linux, Mac OS, and most Unix systems, multiple processors can be used for the subgroups in svyby(), the imputed data sets in with.svyimputationList and with.DBsvyimputationList, and the replicate weights in svyglm.svyrep.design and svyolr.svyrep.design. This requires the 'multicore' package and the argument multicore=TRUE to the functions (in the absence of the multicore package, the multicore=TRUE option is just ignored). svyvar.svyrep.design handled NA values incorrectly (Arthur Burke) print.summary.twophase2 wasn't exported, so summary(twophase.object) gave Too Much Information (Norman Breslow) svytotal.svyrep.design labelled the statistic it computed as 'mean', although it really was the correct total. (Arthur Burke) detection of PSUs not nested in strata was incorrect in some cases. added xbins= option to svyplot for hexbin styles (for Bryan Shepherd) print() method now has strata in a more predictable order (for Norman Breslow) regTermTest(,method="LRT") now does Rao-Scott-type tests based on the estimated loglikelihood ratio, for generalized linear models and the Cox model. Similarly, confint.svyglm(,method="likelihood") does confidence intervals based on the Rao-Scott-type likelihood ratio test. Updated marginpred() to work with survival 2.35-7 Documentation fixes revealed by the new R pre-2.10 help parser Added unwtd.count() to count the raw number of non-missing observations. The new PPS designs now work with subset(). 3.16 PPS designs without replacement, based on the weighted covariance of sample indicators: Horvitz-Thompson and Yates-Grundy estimators, Overton's approximation, Hartley-Rao approximation, a modified Hartley-Rao approximation that depends only on sample data. 3.15-1 The new two-phase designs added in 3.15 are now exported properly. 3.15 Full multistage sampling now possible at both phases of a two-phase design, and the standard errors now exactly match Sarndal et al. The underlying algorithms use sparse matrices to store the weighted covariance of sampling indicators, and so require the Matrix package. Use method="approx" in twophase() to get the old methods, which use less memory. added marginpred() for predictive margins, ie, predictions after calibration/direct standardization on confounder distribution. standard errors for predict.svyglm(,type="response") were printing incorrectly. as.data.frame.svrepstat now works when the result has return.replicates=TRUE The separate package odfWeave.survey provides methods for odfWeave::odfTable for some survey objects. formula() now works correctly on svykmlist objects with standard errors. 3.14 predict.svycoxph() now does fitted survival curves with standard errors for the Cox model. (for Norman Breslow) standard errors for svykm use a bit less memory. quantile.svykm can do confidence intervals added some references on svykm standard errors. tidied up some help pages. 3.13 Add standard errors to svykm() (for Norman Breslow) fix typo in svyquantile(interval.type="betaWald") and add 'degrees of freedom' correction to the effective sample size. add 'degrees of freedom' correction to effective sample size in svyciprop, type="beta". SE, coef for svyratio objects now optionally convert to a vector and confint() now works on ratios. 3.12 Add svyttest() for t-tests, as a wrapper for svyglm Add svyciprop() for confidence intervals for proportions, especially near 0 or 1 confint() works with svycontrast(), svyquantile(), svyciprop() output. bug fix for updates to ODBCsvydesign objects. Add example of PPS sampling to example(svydesign), and link to help for variance estimation. Add Berger(2004) reference. svyby() now has vartype="ci" to report confidence intervals (for Ron Burns) update survival examples to work with new version of survival package. 3.11-2 Document that calibrate() to PSU totals requires at least as many observations as calibration variables pchisqsum(,type="saddlepoint") now works down to mean x 1.05 rather than mean x 1.2 The breaks= argument to svyhist() now works (Stas Kolenikov) svyhist() works on database-backed designs. 3.11-1 svyglm() [and svyratio()] gave an error for post-stratified designs with missing data (Shelby Chartkoff) svycoxph() gives a clearer error message for negative weights. svyquantile() now has a 'betaWald' option, as proposed by Korn & Graubard (1998), and has an option for handling ties that appears similar to (some versions of) SUDAAN (for Melanie Edwards) plot.svycdf() has an xlab argument to override the default labels 3.11 as.svrepdesign now has type="subbootweights" for Rao and Wu n-1 bootstrap An approximation for PPS without replacement due to Brewer is available in svydesign() svydesign() no longer warns if some fpc are exactly zero, but still warns if they are suspiciously large or small 3.10-1 svycoplot can now pass ... arguments to xyplot(), not just to panel. svycontrast() has a 'default' method that assumes only a coef() and vcov() method are available. Fixed example code for anova.svyloglin. Added predict(,type="terms"), termplot(), residuals(,type="partial") for svyglm. As a result, the default for se= in predict.svyglm has changed. make.panel.svysmooth() makes a weighted smoother as a slot-in replacement for panel.smooth(), eg in termplot(). print.summary.svyloglin was broken (Norm Breslow). confint() method for svyglm has both Wald-type and likelihood-type confidence intervals (based on Rao-Scott test) documented that svykappa() requires factor variables. svysmooth() doesn't fail when data are missing. documented that update.svyloglin is faster than fitting a new model. dotchart() methods for svyby, svystat, svrepstat svyloglin() handles missing data better. svymle() didn't work if constant parameters were in any position other than last. svyby() now has a return.replicates argument (for Phil Smith). logit and raking calibration could run into NaN problems with impossible bounds. Step-halving seems to fix the problem. 3.10 update() methods for database-backed designs. improvements in graphics for subsets of database-backed designs. barplot methods for svystat, svrepstat, svyby objects. svytable() for database-backed designs quantiles work with svyby(covmat=TRUE) for replicate-weight designs. fix printing of p-value in svychisq, type="lincom" better error messages for misspecified fpc in svydesign() database-backed analysis of multiple imputations. formatting changes to coef.svyquantile, SE.svyquantile, svyby svrepdesign works with multiple imputations (though not with databases) fix for missing factor levels in subsets of database-backed designs allow svychisq(statistic='lincom') with replicate weights. quantile regression smoothers in svysmooth() add svychisq.twophase() (for Norm Breslow) changed defaults in predict.svyglm so that plot.lm works (for Patricia Berglund) svyloglin() for loglinear models, with Wald and Rao-Scott tests. pchisqsum() (and svychisq, anova.svylogin) have a saddlepoint approximation. 3.9-1 improvments in svyby, degf, svyglm for subsets of calibrated designs or database-backed designs. svyboxplot() and svycdf() now work with database-backed designs. ODBC support for database-backed designs. modified the degrees of freedom calculation in svyglm. 3.9 Added database-backed design objects. The data= argument to svydesign can be the name of a database table in a relational database with a DBI-compatible interface. Only the meta-data is kept in R, other variables are loaded as necessary. 3.8-2 Added svycoplot() 3.8-1 Added subset.svyimputationList coef.svyolr returns intercepts as well (by default). svyolr() has a method for replicate-weight designs print methods for svykm, svykmlist weren't exported. 3.8 svyolr() for proportional odds and related models. license is now GPL 2|3 to accomodate code ripped from MASS package svykm() for survival curves (no standard errors yet) 3.7 Added style="transparent" to svyplot(). svyby() and svytable() work on twophase objects. svychisq() has statistic="lincom" for linear combination of chisquare, the exact asymptotic distribution. Added interface to mitools package for analyzing multiple imputations svykappa() for Cohen's kappa (for Tobias Verbeke) 3.6-13 Change in tolerances so that calibrate() works better with collinear calibration variables (Richard Valliant) calibrate() can be forced to return an answer even when the specified accuracy was not achieved. 3.6-12 svyhist() handles missing data better. Added svycdf() for cumulative distribution function estimate. 3.6-11 postStratify() for repweights was standardizing the replicates to slightly wrong population totals. (Alistair Gray) vcov() for two-phase designs gives the contributions from each phase for a wider range of statistics. (Norman Breslow) fixes for codetools warnings. 3.6-10 Added error message for missing sampling indicator in two-phase design (Lucia Hindorff) Added tests/kalton.R with reweighting examples. make.calfun() for creating user-specified calibration distances. NOTE: Calling grake() directly now requires a calfun object rather than a string: see help(make.calfun). 3.6-9 Bootstrap weights used last stratum size rather than harmonic mean for n/(n-1) factor (Djalma Pessoa) method= argument to svycoxph() didn't work (Lisa McShane) svyquantile did not treat missing values as a domain (Nicole Glazer) fix for change in pmax/pmin (Brian Ripley) Add pchisqsum for distribution of quadratic forms. 3.6-8 A fix in 3.6-6 had broken svycoxph when only a single predictor variable was used (Lisa McShane) 3.6-7 svycoxph() is much faster for replicate weights degf.svyrep.design uses a cached value rather than recomputing. 3.6-6 svyquantile was not passing method= argument to approxfun() (Jacques Ferrez) Documented that svyquantile(interval.type="score") may not be any more accurate Broken link due to typo in svyratio.Rd (Giuseppe Antonaci) postStratify could overestimate standard errors for post-strata cutting across existing sampling strata. (Ben French) svycoxph() would not run for subsets of calibrated designs. (Norman Breslow) 3.6-5 Add return.replicates option to svyratio() (for ine.pt) Add amount= option to svyplot Design effects for totals were wrong for PPS sampling. (Takahiro Tsuchiya) 3.6-4 rownames fix for svyratio with a single statistic. 3.6-3 raking by rake() now has slightly more accurate (smaller) standard errors. As a result, it can't be used on pre-2.9 svydesign objects. calibrate() does not warn about name mismatches when population argument has no names. svyCprod, svyrecvar, grake now exported. 3.6-2 covmat=TRUE option for svyratio. svycontrast() fix for svyby() with empty groups (ine.pt) 3.6-1 Allow averaged bootstrap weights (as StatCanada sometimes produces) in svrepdesign() Fix derivative to get faster convergence in logit calibration (Diego Zardetto) svycontrast() can take named vectors of just the non-zero coefficients. Nonlinear combinations of statistics with svycontrast() 3.6 Allow empty factor levels in calibration (for Diego Zardetto). Work around for strange S4 class/NAMESPACE issue with hexbin plots; actual fix requires more understanding. regTermTest handles MIresult objects. Add dimnames, colnames, rownames methods (for ine.pt) svysmooth for scatterplot smoothers and density estimation (needs KernSmooth) Give a warning when fpc varies within strata. svycontrast() for linear combinations of survey statistics covmat=TRUE option to svyby() for replicate-weight designs, so the output can be used in svycontrast(). 3.5 Add estWeights for Robins et al way of using auxiliary information (ie AIPW). Remove JSS article and survey-vanderbilt.pdf from inst/ since they are now seriously out of date. paley() now gives matrices of order 2^k(p+1), which are usually of minimal or near-minimal size. Drop 72x72 and 256x256 Hadamard matrices, which are easy to recreate, from precomputed set and replace 36x36 with the one from Plackett & Burman, which has full orthogonal balance Note that changes to svyby now require R 2.2.0 or later. predict.svyglm has option to return just variances (rather than entire variance-covariance matrix) drop.empty.groups now works when the grouping variables are not factors. Add a namespace Move precomputed Hadamard matrices from inst/hadamard.rda to R/sysdata.rda 3.4-5 Add svyboxplot (for Luke Peterson) Add drop.empty.groups option to svyby 3.4-4 Paley construction of Hadamard matrices now knows primes up to 7919, works for larger sizes if the user supplies a suitable prime. calibrate() now reorders elements of 'population' to match column names of model matrix if necessary. predict() method for svyglm (for Phil Smith, Andrew Robinson) svyratio() for two-phase designs. Added vignette on domain estimation. svyby() can report multiple vartypes. 3.4-3 make svyratio work with svyby (for Phil Smith) increase default number of iterations in calibrate() 3.4-2 Options for residual df for summary.svyglm, default based on degf Default denominator df for svyglm, svycoxph in regTermTest. survey.lonely.psu now applies to as.svrepdesign. keep up with changes in all.equal() for R 2.3.0 3.4-1 Speed optimizations for JKn weights with self-representing strata - jackknife replicates are not created for these strata - svytotal does not use these strata in variance calculation. - svytotal, svymean, svyratio,svyquantile,svyglm recognize designs (eg subsets) where all strata are self-representing. [.repweights_compressed does less copying and is a lot faster for large designs Added verbose= option to svyby() to monitor slow computations. Added vartype="cv","cvpct" options for svyby(). Two-phase designs gave incorrect variances in some cases [they were correct if the first stage was infinite superpopulation sampling or if all phase 1 ultimate sampling units were represented in phase 2]. These are fixed but twophase() now limits the first phase to single-stage cluster or element sampling. [detailed bug report from Takahiro Tsuchiya] added vignette describing estimator of phase-one variance in two-phase designs minor speedup in svyrecvar() for self-representing strata added make.formula() for convenience with many variables. 3.4 twophase() for specifying two-phase designs. two vignettes: a simple example and a description of two-phase epi designs svyratio handles missing data. cv() gives NaN rather than an error when the statistic is zero (for ana.pmartins@ine.pt) oldsvydesign() is officially deprecated Jackknife variances for strata with a single population PSU were wrong (non-zero) (ana.pmartins@ine.pt) svyglm refused to work on subsets of calibrated designs 3.3-2 Add cv, SE, coef, and deff methods for svyby (for Ana Quiterio) as.data.frame methods for svystat, svrepstat regTermTest can do F-tests now (Daryl Morris). fix documentation of value for as.svrepdesign (Alan Zaslavsky) 3.3-1 Make nest=TRUE in multistage designs work when only some initial sampling stages are stratified Multistage recursive variances were only going to two stages. Add "(with replacement)" to output of print.survey.design2 when no fpc is specified. 3.3 Added more generalized raking estimators: raking ratio, bounded raking ratio, logit, (for Ana Quiterio) svytable() could sometimes leave the class attribute off the result. summary() now gives tests of association for svytable(). svychisq() works for replicate designs degf() gives approximate degrees of freedom for replicate designs. Clearer error messages when design information is missing. 3.2-1 Fix ordering bug in ftable.svyby (Stefano Calza) The "probability" option added to svyquantile for replicate designs in 3.1 computed standard errors for the wrong tail. (Gillian Raab). 3.2 Add option to calibrate() to make weights constant within clusters. Add bounded regression calibration to calibrate() 3.1-1 Rescale svyvar output by n/(n-1) to match Kish, which makes a small difference to design effect computations. (for Takahiro Tsuchiya) Test for presence of intercept in calibrate() was too fussy. 3.1 Quantiles for replicate-weight designs now by default compute confidence intervals on the probability scale and transform, so they are valid for jackknife designs. (as Gillian Raab suggested long ago) Analyses on replicate weights should use eg svymean, which has methods for replicate weight designs; the old (eg svrepmean) variants are now deprecated. calibrate() can now use regression models with variance proportional to linear combination of predictors (and so can duplicate ratio estimators of means and totals) Prettier labelling of objects created by postStratify(), calibrate(), update(), subset() svytotal on replicate weight designs was computing means, not totals (probably since 3.0). 3.0-1 Allow some strata to have an infinite population (zero sampling fraction) (this doesn't happen in reality but is the recommended analysis for handling certainty PSUs in some large NCHS studies). Let svyby() handle vectors that are not in the design object (even though they are discouraged) calibrate() was working only under stratified/simple random sampling. Allow user-supplied Hadamard matrix for brrweights. as.svrepdesign gave a spurious warning when converting post-2.9-1 objects without finite population corrections to BRR. Allow multicolumn response variable in svymle() (for survival data) Add nlm() as the default optimization method for svymle(). 3.0 Added simple GREG (G-calibration) estimators with calibrate() Added deff="replace" option to compute design effects comparing to simple random sampling with replacement, eg for designs where the weights do not sum to the population size. (for Gillian Raab) Added more references for median estimation. Added separate ratio estimator of totals for stratified samples. (for Renzo Vettori) cv.svyratio was inverted. rake() on survey design objects was accumulating cruft in the postStrata component on each iteration. Subsetting of raked designs without replicate weights was broken (Steve Roberts) Standard errors were wrong for some domain estimates in post-stratified models without replicate weights. More extensive tests comparing domain estimates to equivalent ratio and regression formulations. Changed default in svyby to keep.var=TRUE Prettier stratum labels. New homepage at http://faculty.washington.edu/tlumley/survey/ svyplot(type="hex") works with both pre1.0 and post1.0 versions of the hexbin package. Fixed svychisq denominator degrees of freedom for stratified designs for bug introduced by multistage revision. (Takahiro Tsuchiya) 2.9-1 Fixed typo in description of fpc in svydesign.Rd Added inst/twostage.pdf with examples of two-stage analyses. Handling of fpc specified as proportion in the absence of weights was wrong. 2.9 Added full multistage sampling, involving a redesign of the survey.design object. The old objects are deprecated; they may be converted with as.svydesign2. Use options(survey.ultimate.cluster=TRUE) to get the same one-stage standard errors as earlier versions and options(survey.want.obsolete=TRUE) to turn off the annoying warnings about old-style survey objects. If you must create old-style survey objects use oldsvydesign(). As a consequence of the redesign, most of the svyxxx functions are now generic, with methods for both svydesign and svrepdesign objects. Use svymean instead of svrepmean, for example. Added more Hadamard matrices, including the Paley construction. brrweights() now finds designs of nearly optimal size for most surveys. Faster svymean, svytotal for replicates, with less memory use. Added "bootstrap" option for as.svrepdesign svyby and ftable.svyby now handle Deff (expanded from a suggestion by Tobias Verbeke) svyhist() for probability-weighted histograms added svycoxph() for replicate weight designs The "lonely.psu" corrections will be applied to strata with a single PSU in a subset (domain) if options("survey.adjust.domain.lonely") is TRUE. The default is FALSE. subset.survey.design was not working for post-stratified designs. Added a PDF file with examples from UCLA ATS web site, including comparisons with WesVar and SUDAAN. (inst/ucla-examples.pdf) Added slides from a talk at Vanderbilt University. (inst/survey-vanderbilt.pdf) Fixed Deff to use simple random sampling without replacement. Much faster confidence intervals for quantiles based on inverting a Wald test are now default. These are less accurate in small samples; the old method is still available. (based on suggestion from Gillian Raab) 2.8-4 Added a whole lot more references to the documentation. data(hospital) now has two sets of weights, one matching the UCLA ATS site and one matching the original reference. (from Tobias Verbeke) summary.svyrep.design was reporting 1 replicates for compressed weights (but still computing correctly) 2.8-3 postStratify for svydesign objects was giving too large standard errors Add deff() to extract design effects. 2.8-2 rewrite cv() to use coef() and SE() 2.8-1 Make Deff estimates work with ftable. (for Gillian Raab) ftable.svyby didn't work with a single by() variable (for Gillian Raab) Missing values now allowed in svychisq(). (for Lee Sieswerda) 2.8 fix printing of svyby broken in 2.7 add ftable.svyby postStratify for svydesign surveys. 2.7-1 as.svrepdesign was giving the wrong weights for type="Fay" in 2.7 2.7 Option compress=TRUE in as.svrepdesign to reduce size of replicate weight matrix (and in rake(), postStratify()). Also function compressWeights() to do this to arbitrary replicate designs. terms() reorders variables in interactions, which confused regTermTest (Daniel Almirall) Added extractor function SE() for standard errors (Andrew Robinson) hadamard() now finds smaller Hadamard matrices. svyCprod warns if a subset has only one PSU in some stratum (Gillian Raab) Added tests/lonely.psu.R Added another option "average" for lonely.psu (Gillian Raab) svydesign can now detect from sampling weights or fpc when a stratum with a single PSU is self-representing, and in these cases options("survey.lonely.psu") is not used. ftable.svystat and ftable.svrepstat to produce better tables of percentages and totals. Experimental set of functions to help in computing non-response weights (see ?nonresponse for details) 2.6-2 Better handling of NAs in svyby Subsetting didn't work right for single-observation subsets. svyglm and svycoxph had scoping problems when run inside a function (Daniel Almirall) svyglm and svycoxph now accept weights (to be multiplied by the sampling weights) With R 2.0.0 less copying will occur, especially when variables= is not specified in a design 2.6-1 Totals for factors give cell totals. 2.6 Design effects were broken for multiple means computed at once. Add coefficient of variation for mean, total, ratio,... variables= argument of svydesign works with missing data (Tobias Verbeke) Fix reference to Binder (1991) (Tobias Verbeke) Means for factors now give cell means. coef and vcov methods for svystat and svrepstat. Another tiny example dataset from the VPLX manual svrepvar was incorrect for multiple variables simultaneously Better error messages for missing data in svrVar. 2.5 Wald tests for association in contingency tables. svyplot() for weighted graphics (some of these require "hexbin") Examples for rake(), postStratify() svyby() works for svrepdesign analyses as well added subset.svyrep.design() svrepvar() added Design effects for means and totals. (Gillian Raab) 2.4 Make regTermTest work with svycoxph() Clearer output for print.svycoxph() (Daniella Gollinelli) Rao-Scott adjusted tests for contingency tables. svyby() for tables of means, medians, etc 2.3-2 Fix for svyquantile confidence intervals. 2.3-1 clearer warnings in svrVar when some replicates give NA . (for Gillian Raab) 2.3 svyquantile has confidence intervals, added svrepquantile. 2.2-1 as.svrepdesign didn't pass options to brrweights (for Fred Rohde) 2.2 published in Journal of Statistical Software - If population size is specified, but not weights or probabilities, work out the probabilities from the population size - Clearer error message when some design information is NA (for Tobias Verbeke) - better update() methods 2.0 Just a numbering change. 1.9-3 Fix svytotal variance estimate as.svrepdesign wasn't handling unstratified cluster samples right. Check for fpc in multistage samples, which we don't handle. add print method for basic survey statistics add rake() California API data. 1.9-2 Added post-stratification of replicate-weights 1.9-1 Bugfix: jknweights was requiring finite population correction. 1.9 - "certainty" option for single-PSU strata - Replication weight analyses (alpha version) 1.4 - I think all the possible permutations of arguments in svydesign now work. - The examples in svyglm incorrectly had a data= argument. 1.3 svydesign wasn't allowing weights to be a vector. 1.2 - svydesign(nest=TRUE) now uses less memory - added regTermTest for testing regression terms. 1.1 Added subset, update methods. Variance estimation is now correct for subpopulations produced with select or subscripting. 1.0 No changes 0.9-5 - finite population correction should be done with PSUs not individuals - added Cox models 0.9-4 - svyCprod was computing n/(n-1) using number of observations, not number of PSUs, and was averaging observations rather than PSU means to compute stratum means. - Bug in handling multiple levels of cluster id in svydesign 0.9-3: Finite population correction. Adjustments for stratum with single PSU (Fred Rohde) Fixed svydesign(nest=TRUE) to work with strata 0.9-1: First release. survey/inst/COPYING0000644000176200001440000000122514640361576013633 0ustar liggesusersExcept as otherwise stated, the code is copyright 2002-2024 Thomas Lumley svyolr() and many of its methods are closely based on polr() from the MASS package, copyright Brian Ripley and Bill Venables. Ben Schneider wrote the C++ code and the R interface to it The small-area estimation code is from the SUMMER project, written by Peter Gao The 'phoneframes' data set is taken from the Frames2 package by Antonio Arcos, Maria del Mar Rueda, Maria Giovanna Ranalli and David Molina John Preston provided an example of the multistage rescaled bootstrap for testing. Daniel Oehm at the Australian Bureau of Statistics wrote some improvements for calibrate() survey/inst/ucla-examples.pdf0000644000176200001440000027472011457435610016041 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/porting.to.S0000755000176200001440000000032011457435610015017 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/disclaimer0000644000176200001440000000070313705672756014645 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/build/0000755000176200001440000000000015147136377012724 5ustar liggesuserssurvey/build/vignette.rds0000644000176200001440000000066415147136377015271 0ustar liggesusersRn0e'nA$Ě-qlZ3|ה1VQatǧ8l&qk3X%xS샪ev;U%vZBwI ZCk}OH `&ϮӮ9˽)98>AnveQmq@υ~ 1 X65vUF ^%)9rvy[B"vM 5͡sJǞNDge4id\ n5ÞF@hOF[Bwk7&$|:@jcHܟwE7QAEq"GQ~JxaP'hQWdO\7E|ęQiW੢'|r|D^a2survey/man/0000755000176200001440000000000015147136377012400 5ustar liggesuserssurvey/man/crowd.Rd0000755000176200001440000000205311457435611014001 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/subset.survey.design.Rd0000755000176200001440000000272111457435611016776 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/svystandardize.Rd0000644000176200001440000000554514075121157015737 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/surveysummary.Rd0000755000176200001440000002211514663762664015654 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} \alias{svystat} \alias{svrepstat} %- 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, and optionally a \code{"deff"} attribute with design effects These objects have methods for \code{vcov}, \code{SE}, \code{coef}, \code{confint}, \code{svycontrast}. When \code{influence=TRUE} is used, a \code{svystat} object has an attribute \code{"influence"} with influence functions for each observations When \code{return.replicates=TRUE}, the \code{svrepstat} object is a list whose second component is a matrix of replicate values. \code{svystat} objects have \code{Math} and \code{Ops} methods that remove the variance attribute } \author{Thomas Lumley} \seealso{ \code{\link{svydesign}}, \code{\link{as.svrepdesign}}, \code{\link{svrepdesign}} for constructing design objects. \code{\link{degf}} to extract degrees of freedom from a design. \code{\link{svyquantile}} for quantiles \code{\link{ftable.svystat}} for more attractive tables \code{\link{svyciprop}} for more accurate confidence intervals for proportions near 0 or 1. \code{\link{svyttest}} for comparing two means. \code{\link{svycontrast}} for linear and nonlinear functions of estimates. } \examples{ data(api) ## one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svymean(~api00, dclus1, deff=TRUE) svymean(~factor(stype),dclus1) svymean(~interaction(stype, comp.imp), dclus1) svyquantile(~api00, dclus1, c(.25,.5,.75)) svytotal(~enroll, dclus1, deff=TRUE) svyratio(~api.stu, ~enroll, dclus1) v<-svyvar(~api00+api99, dclus1) v print(v, cov=TRUE) as.matrix(v) # replicate weights - jackknife (this is slower) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) jkstrat<-as.svrepdesign(dstrat) svymean(~api00, jkstrat) svymean(~factor(stype),jkstrat) svyvar(~api00+api99,jkstrat) svyquantile(~api00, jkstrat, c(.25,.5,.75)) svytotal(~enroll, jkstrat) svyratio(~api.stu, ~enroll, jkstrat) # coefficients of variation cv(svytotal(~enroll,dstrat)) cv(svyratio(~api.stu, ~enroll, jkstrat)) # extracting information from the results coef(svytotal(~enroll,dstrat)) vcov(svymean(~api00+api99,jkstrat)) SE(svymean(~enroll, dstrat)) confint(svymean(~api00+api00, dclus1)) confint(svymean(~api00+api00, dclus1), df=degf(dclus1)) # Design effect svymean(~api00, dstrat, deff=TRUE) svymean(~api00, dstrat, deff="replace") svymean(~api00, jkstrat, deff=TRUE) svymean(~api00, jkstrat, deff="replace") (a<-svytotal(~enroll, dclus1, deff=TRUE)) deff(a) ## weights that are *already* calibrated to population size sum(weights(dclus1)) nrow(apipop) cdclus1<- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc,calibrate.formula=~1) SE(svymean(~enroll, dclus1)) ## not equal to SE(mean) SE(svytotal(~enroll, dclus1))/nrow(apipop) ## equal to SE(mean) SE(svytotal(~enroll, cdclus1))/nrow(apipop) } \keyword{univar}% at least one, from doc/KEYWORDS \keyword{survey}% __ONLY ONE__ keyword per line survey/man/svylogrank.Rd0000644000176200001440000000535015147131765015065 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{https://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/svyby.Rd0000755000176200001440000002242115131775631014042 0ustar liggesusers\name{svyby} \alias{svyby} \alias{svybys} \alias{svyby.default} \alias{SE.svyby} \alias{deff.svyby} \alias{coef.svyby} \alias{confint.svyby} \alias{unwtd.count} \alias{svyby.survey.design2} %- Also NEED an '\alias' for EACH other topic documented here. \title{Survey statistics on subsets} \description{ Compute survey statistics on subsets of a survey defined by factors. } \usage{ svyby(formula, by ,design,...) \method{svyby}{default}(formula, by, design, FUN, ..., deff=FALSE,keep.var = TRUE, keep.names = TRUE,verbose=FALSE, vartype=c("se","ci","ci","cv","cvpct","var"), drop.empty.groups=TRUE, covmat=FALSE, return.replicates=FALSE, na.rm.by=FALSE, na.rm.all=FALSE, stringsAsFactors=TRUE, multicore=getOption("survey.multicore")) \method{svyby}{survey.design2}(formula, by, design, FUN, ..., deff=FALSE,keep.var = TRUE, keep.names = TRUE,verbose=FALSE, vartype=c("se","ci","ci","cv","cvpct","var"), drop.empty.groups=TRUE, covmat=FALSE, influence=covmat, na.rm.by=FALSE, na.rm.all=FALSE, stringsAsFactors=TRUE, multicore=getOption("survey.multicore")) \method{SE}{svyby}(object,...) \method{deff}{svyby}(object,...) \method{coef}{svyby}(object,...) \method{confint}{svyby}(object, parm, level = 0.95,df =Inf,...) unwtd.count(x, design, ...) svybys(formula, bys, design, FUN, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula,x}{A formula specifying the variables to pass to \code{FUN} (or a matrix, data frame, or vector)} \item{by}{A formula specifying factors that define subsets, or a list of factors.} \item{design}{A \code{svydesign} or \code{svrepdesign} object} \item{FUN}{A function taking a formula and survey design object as its first two arguments and returning an object with suitable \code{coef} and \code{SE} or \code{vcov} or \code{confint} methods} \item{\dots}{Other arguments to \code{FUN}. NOTE: if any of the names of these are partial matches to \code{formula},\code{by}, or \code{design}, you must specify the \code{formula},\code{by}, or \code{design} argument by name, not just by position. } \item{deff}{Request a design effect from \code{FUN}} \item{keep.var}{If \code{FUN} returns a \code{svystat} object, extract standard errors from it} \item{keep.names}{Define row names based on the subsets} \item{verbose}{If \code{TRUE}, print a label for each subset as it is processed.} \item{vartype}{Report variability as one or more of standard error, confidence interval, coefficient of variation, percent coefficient of variation, or variance} \item{drop.empty.groups}{If \code{FALSE}, report \code{NA} for empty groups, if \code{TRUE} drop them from the output} \item{na.rm.by}{If true, omit groups defined by \code{NA} values of the \code{by} variables}. \item{na.rm.all}{If true, check for groups with no non-missing observations for variables defined by \code{formula} and treat these groups as empty. Doesn't make much sense without \code{na.rm=TRUE}} \item{covmat}{If \code{TRUE}, compute covariances between estimates for different subsets. Allows \code{\link{svycontrast}} to be used on output. Requires that \code{FUN} supports either \code{return.replicates=TRUE} or \code{influence=TRUE}} \item{return.replicates}{Only for replicate-weight designs. If \code{TRUE}, return all the replicates as the "replicates" attribute of the result} \item{influence}{Return the influence functions of the result} \item{multicore}{Use \code{multicore} package to distribute subsets over multiple processors?} \item{stringsAsFactors}{Convert any string variables in \code{formula} to factors before calling \code{FUN}, so that the factor levels will be the same in all groups (See Note below). Potentially slow.} \item{parm}{a specification of which parameters are to be given confidence intervals, either a vector of numbers or a vector of names. If missing, all parameters are considered.} \item{level}{the confidence level required.} \item{df}{degrees of freedom for t-distribution in confidence interval, use \code{degf(design)} for number of PSUs minus number of strata} \item{object}{An object of class \code{"svyby"}} \item{bys}{one-sided formula with each term specifying a grouping (rather than being combined to give a grouping } } \value{ An object of class \code{"svyby"}: a data frame showing the factors and the results of \code{FUN}. For \code{unwtd.count}, the unweighted number of non-missing observations in the data matrix specified by \code{x} for the design. } \details{ The variance type "ci" asks for confidence intervals, which are produced by \code{confint}. In some cases additional options to \code{FUN} will be needed to produce confidence intervals, for example, \code{svyquantile} needs \code{ci=TRUE} or \code{keep.var=FALSE}. The results are extracted by calling \code{coef}, \code{SE}, \code{vcov}, and \code{confint} on the returned objects, so these need to be defined. The intent is for \code{FUN} to return a \code{svystat} or \code{svrepstat} object, but that isn't required. \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. Multicore processing is incompatible with some GUIs. The variant \code{svybys} creates a separate table for each term in \code{bys} rather than creating a joint table. } \note{The function works by making a lot of calls of the form \code{FUN(formula, subset(design, by==i))}, where \code{formula} is re-evaluated in each subset, so it is unwise to use data-dependent terms in \code{formula}. In particular, \code{svyby(~factor(a), ~b, design=d, svymean)}, will create factor variables whose levels are only those values of \code{a} present in each subset. If \code{a} is a character variable then \code{svyby(~a, ~b, design=d, svymean)} creates factor variables implicitly and so has the same problem. Either use \code{\link{update.survey.design}} to add variables to the design object instead or specify the levels explicitly in the call to \code{factor}. The \code{stringsAsFactors=TRUE} option converts all character variables to factors, which can be slow, set it to \code{FALSE} if you have predefined factors where necessary. } \note{ Asking for a design effect (\code{deff=TRUE}) from a function that does not produce one will cause an error or incorrect formatting of the output. The same will occur with \code{keep.var=TRUE} if the function does not compute a standard error. } \seealso{\code{\link{svytable}} and \code{\link{ftable.svystat}} for contingency tables, \code{\link{ftable.svyby}} for pretty-printing of \code{svyby} } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) svyby(~api99, ~stype, dclus1, svymean) svyby(~api99, ~stype, dclus1, svyquantile, quantiles=0.5,ci=TRUE,vartype="ci") ## without ci=TRUE svyquantile does not compute standard errors svyby(~api99, ~stype, dclus1, svyquantile, quantiles=0.5, keep.var=FALSE) svyby(~api99, list(school.type=apiclus1$stype), dclus1, svymean) svyby(~api99+api00, ~stype, dclus1, svymean, deff=TRUE,vartype="ci") svyby(~api99+api00, ~stype+sch.wide, dclus1, svymean, keep.var=FALSE) ## report raw number of observations svyby(~api99+api00, ~stype+sch.wide, dclus1, unwtd.count, keep.var=FALSE) rclus1<-as.svrepdesign(dclus1) svyby(~api99, ~stype, rclus1, svymean) svyby(~api99, ~stype, rclus1, svyquantile, quantiles=0.5) svyby(~api99, list(school.type=apiclus1$stype), rclus1, svymean, vartype="cv") svyby(~enroll,~stype, rclus1,svytotal, deff=TRUE) svyby(~api99+api00, ~stype+sch.wide, rclus1, svymean, keep.var=FALSE) ##report raw number of observations svyby(~api99+api00, ~stype+sch.wide, rclus1, unwtd.count, keep.var=FALSE) ## comparing subgroups using covmat=TRUE mns<-svyby(~api99, ~stype, rclus1, svymean,covmat=TRUE) vcov(mns) svycontrast(mns, c(E = 1, M = -1)) str(svyby(~api99, ~stype, rclus1, svymean,return.replicates=TRUE)) tots<-svyby(~enroll, ~stype, dclus1, svytotal,covmat=TRUE) vcov(tots) svycontrast(tots, quote(E/H)) ## comparing subgroups uses the delta method unless replicates are present meanlogs<-svyby(~log(enroll),~stype,svymean, design=rclus1,covmat=TRUE) svycontrast(meanlogs, quote(exp(E-H))) meanlogs<-svyby(~log(enroll),~stype,svymean, design=rclus1,covmat=TRUE,return.replicates=TRUE) svycontrast(meanlogs, quote(exp(E-H))) ## extractor functions (a<-svyby(~enroll, ~stype, rclus1, svytotal, deff=TRUE, verbose=TRUE, vartype=c("se","cv","cvpct","var"))) deff(a) SE(a) cv(a) coef(a) confint(a, df=degf(rclus1)) ## ratio estimates svyby(~api.stu, by=~stype, denominator=~enroll, design=dclus1, svyratio) ratios<-svyby(~api.stu, by=~stype, denominator=~enroll, design=dclus1, svyratio,covmat=TRUE) vcov(ratios) ## empty groups svyby(~api00,~comp.imp+sch.wide,design=dclus1,svymean) svyby(~api00,~comp.imp+sch.wide,design=dclus1,svymean,drop.empty.groups=FALSE) ## Multiple tables svybys(~api00,~comp.imp+sch.wide,design=dclus1,svymean) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{manip}% __ONLY ONE__ keyword per line survey/man/svydesign.Rd0000755000176200001440000002403415143207022014666 0ustar liggesusers\name{svydesign} \alias{svydesign} \alias{svydesign.default} \alias{svydesign.imputationList} \alias{svydesign.character} \alias{na.omit.survey.design} \alias{na.exclude.survey.design} \alias{na.fail.survey.design} \title{Survey sample analysis.} \description{ Specify a complex survey design. } \usage{ svydesign(ids, probs=NULL, strata = NULL, variables = NULL, fpc=NULL, data = NULL, nest = FALSE, check.strata = !nest, weights=NULL,pps=FALSE,...) \method{svydesign}{default}(ids, probs=NULL, strata = NULL, variables = NULL, fpc=NULL,data = NULL, nest = FALSE, check.strata = !nest, weights=NULL, pps=FALSE,calibrate.formula=NULL,variance=c("HT","YG"), na_weights=c("fail","warn","allow"),...) \method{svydesign}{imputationList}(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, pps=FALSE, calibrate.formula=NULL,...) \method{svydesign}{character}(ids, probs = NULL, strata = NULL, variables = NULL, fpc = NULL, data, nest = FALSE, check.strata = !nest, weights = NULL, pps=FALSE, calibrate.formula=NULL,na_weights="fail",dbtype = "SQLite", dbname, ...) } %- maybe also `usage' for other objects documented here.'` \arguments{ \item{ids}{Formula or data frame specifying cluster ids from largest level to smallest level, \code{~0} or \code{~1} is a formula for no clusters.} \item{probs}{Formula or data frame specifying cluster sampling probabilities} \item{strata}{Formula or vector specifying strata, use \code{NULL} for no strata} \item{variables}{Formula or data frame specifying the variables measured in the survey. If \code{NULL}, the \code{data} argument is used.} \item{fpc}{Finite population correction: see Details below} \item{weights}{Formula or vector specifying sampling weights as an alternative to \code{prob}} \item{data}{Data frame to look up variables in the formula arguments, or database table name, or \code{imputationList} object, see below} \item{nest}{If \code{TRUE}, relabel cluster ids to enforce nesting within strata} \item{check.strata}{If \code{TRUE}, check that clusters are nested in strata}. \item{pps}{\code{"brewer"} to use Brewer's approximation for PPS sampling without replacement. \code{"overton"} to use Overton's approximation. An object of class \code{\link{HR}} to use the Hartley-Rao approximation. An object of class \code{\link{ppsmat}} to use the Horvitz-Thompson estimator.} \item{calibrate.formula}{model formula specifying how the weights are *already* calibrated (raked, post-stratified).} \item{dbtype}{name of database driver to pass to \code{dbDriver}} \item{dbname}{name of database (eg file name for SQLite)} \item{variance}{For \code{pps} without replacement, use \code{variance="YG"} for the Yates-Grundy estimator instead of the Horvitz-Thompsonestimator} \item{na_weights}{If \code{"allow"} or \code{"warn"}, observations with \code{NA} weights will be dropped before the design is created, with a warning if \code{"warn"}. With \code{"fail"} it is an error to have any \code{NA} weights} \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, with the exception that \code{NA} weights can be used to specify rows that should be dropped before setting up the design if \code{na_weights="allow"} or \code{"warn"}. By default, \code{svydesign} assumes that all PSUs, even those in different strata, have a unique value of the \code{id} variable. This allows some data errors to be detected. If your PSUs reuse the same identifiers across strata then set \code{nest=TRUE}. The finite population correction (fpc) is used to reduce the variance when a substantial fraction of the total population of interest has been sampled. It may not be appropriate if the target of inference is the process generating the data rather than the statistics of a particular finite population. The finite population correction can be specified either as the total population size in each stratum or as the fraction of the total population that has been sampled. In either case the relevant population size is the sampling units. That is, sampling 100 units from a population stratum of size 500 can be specified as 500 or as 100/500=0.2. The exception is for PPS sampling without replacement, where the sampling probability (which will be different for each PSU) must be used. If population sizes are specified but not sampling probabilities or weights, the sampling probabilities will be computed from the population sizes assuming simple random sampling within strata. For multistage sampling the \code{id} argument should specify a formula with the cluster identifiers at each stage. If subsequent stages are stratified \code{strata} should also be specified as a formula with stratum identifiers at each stage. The population size for each level of sampling should also be specified in \code{fpc}. If \code{fpc} is not specified then sampling is assumed to be with replacement at the top level and only the first stage of cluster is used in computing variances. If \code{fpc} is specified but for fewer stages than \code{id}, sampling is assumed to be complete for subsequent stages. The variance calculations for multistage sampling assume simple or stratified random sampling within clusters at each stage except possibly the last. For PPS sampling without replacement it is necessary to specify the probabilities for each stage of sampling using the \code{fpc} arguments, and an overall \code{weight} argument should not be given. At the moment, multistage or stratified PPS sampling without replacement is supported only with \code{pps="brewer"}, or by giving the full joint probability matrix using \code{\link{ppsmat}}. [Cluster sampling is supported by all methods, but not subsampling within clusters]. The \code{dim}, \code{"["}, \code{"[<-"} and na.action methods for \code{survey.design} objects operate on the dataframe specified by \code{variables} and ensure that the design information is properly updated to correspond to the new data frame. With the \code{"[<-"} method the new value can be a \code{survey.design} object instead of a data frame, but only the data frame is used. See also \code{\link{subset.survey.design}} for a simple way to select subpopulations. The \code{model.frame} method extracts the observed data. If the strata with only one PSU are not self-representing (or they are, but \code{svydesign} cannot tell based on \code{fpc}) then the handling of these strata for variance computation is determined by \code{options("survey.lonely.psu")}. See \code{\link{svyCprod}} for details. \code{data} may be a character string giving the name of a table or view in a relational database that can be accessed through the \code{DBI} interfaces. For DBI interfaces \code{dbtype} should be the name of the database driver and \code{dbname} should be the name by which the driver identifies the specific database (eg file name for SQLite). The appropriate database interface package must already be loaded (eg \code{RSQLite} for SQLite). The survey design object will contain only the design meta-data, and actual variables will be loaded from the database as needed. Use \code{\link[=close.DBIsvydesign]{close}} to close the database connection and \code{\link[=open.DBIsvydesign]{open}} to reopen the connection, eg, after loading a saved object. The database interface does not attempt to modify the underlying database and so can be used with read-only permissions on the database. If \code{data} is an \code{imputationList} object (from the "mitools" package), \code{svydesign} will return a \code{svyimputationList} object containing a set of designs. Use \code{\link{with.svyimputationList}} to do analyses on these designs and \code{MIcombine} to combine the results. } \value{ An object of class \code{survey.design}. } \author{Thomas Lumley} \seealso{ \code{\link{as.svrepdesign}} for converting to replicate weight designs, \code{\link{subset.survey.design}} for domain estimates, \code{\link{update.survey.design}} to add variables. \code{mitools} package for using multiple imputations \code{\link{svyrecvar}} for details of variance estimation \code{\link{election}} for examples of PPS sampling without replacement. } \examples{ data(api) # stratified sample dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) # one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) # two-stage cluster sample: weights computed from population sizes. dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) ## multistage sampling has no effect when fpc is not given, so ## these are equivalent. dclus2wr<-svydesign(id=~dnum+snum, weights=weights(dclus2), data=apiclus2) dclus2wr2<-svydesign(id=~dnum, weights=weights(dclus2), data=apiclus2) ## syntax for stratified cluster sample ##(though the data weren't really sampled this way) svydesign(id=~dnum, strata=~stype, weights=~pw, data=apistrat, nest=TRUE) ## PPS sampling without replacement data(election) dpps<- svydesign(id=~1, fpc=~p, data=election_pps, pps="brewer") ##database example: requires RSQLite \dontrun{ library(RSQLite) dbclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc, data="apiclus1",dbtype="SQLite", dbname=system.file("api.db",package="survey")) } ## pre-calibrated weights cdclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc, calibration.formula=~1) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{univar}% __ONLY ONE__ keyword per line \keyword{manip}% __ONLY ONE__ keyword per line survey/man/svyscoretest.Rd0000644000176200001440000000664014166647050015445 0ustar liggesusers\name{svyscoretest} \alias{svyscoretest} \alias{svyscoretest.svyglm} \title{ Score tests in survey regression models } \description{ Performs two versions of the efficient score test. These are the same for a single parameter. In the \code{working} score test, different parameters are weighted according to the inverse of the estimated population Fisher information. In the \code{pseudoscore} test, parameters are weighted according to the inverse of their estimated covariance matrix. } \usage{ svyscoretest(model, drop.terms=NULL, add.terms=NULL, method=c("working","pseudoscore","individual"),ddf=NULL, lrt.approximation = "satterthwaite", ...) \S3method{svyscoretest}{svyglm}(model, drop.terms=NULL, add.terms=NULL, method=c("working","pseudoscore","individual"), ddf=NULL, lrt.approximation = "satterthwaite",fullrank=TRUE, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{model}{ A model of a class having a \code{svyscoretest} method (currently just \code{svyglm}) } \item{drop.terms}{ Model formula giving terms to remove from \code{model} } \item{add.terms}{Model formula giving terms to add to \code{model} } \item{method}{ The type of score test to use. For a single parameter they are equivalent. To report tests for each column separately use \code{individual} } \item{ddf}{denominator degrees of freedom for an F or linear combination of F distributions. Use \code{Inf} to get chi-squared distributions. \code{NULL} asks for the model residual degrees of freedom, which is conservative. } \item{lrt.approximation}{ For the working score, the method for computing/approximating the null distribution: see \code{\link{pchisqsum}} } \item{fullrank}{If \code{FALSE} and \code{method="individual"}, keep even linearly dependent columns of the efficient score} \item{\dots}{ for future expansion } } \details{ The \code{working} score test will be asymptotically equivalent to the Rao-Scott likelihood ratio test computed by \code{\link{regTermTest}} and \code{\link{anova.svyglm}}. The paper by Rao, Scott and Skinner calls this a "naive" score test. The null distribution is a linear combination of chi-squared (or F) variables. The \code{pseudoscore} test will be asymptotically equivalent to the Wald test computed by \code{\link{regTermTest}}; it has a chi-squared (or F) null distribution. If \code{ddf} is negative or zero, which can happen with large numbers of predictors and small numbers of PSUs, it will be changed to 1 with a warning. } \value{ For "pseudoscore" and "working" score methods, a named vector with the test statistic, degrees of freedom, and p-value. For "individual" an object of class "svystat" } \references{ JNK Rao, AJ Scott, and C Rao, J., Scott, A., & Skinner, C. (1998). QUASI-SCORE TESTS WITH SURVEY DATA. Statistica Sinica, 8(4), 1059-1070. } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{\link{regTermTest}}, \code{\link{anova.svyglm}} } \examples{ data(myco) dmyco<-svydesign(id=~1, strata=~interaction(Age,leprosy),weights=~wt,data=myco) m_full<-svyglm(leprosy~I((Age+7.5)^-2)+Scar, family=quasibinomial, design=dmyco) svyscoretest(m_full, ~Scar) svyscoretest(m_full,add.terms= ~I((Age+7.5)^-2):Scar) svyscoretest(m_full,add.terms= ~factor(Age), method="pseudo") svyscoretest(m_full,add.terms= ~factor(Age),method="individual",fullrank=FALSE) svyscoretest(m_full,add.terms= ~factor(Age),method="individual") } survey/man/dimnames.DBIsvydesign.Rd0000644000176200001440000000303413542525537017012 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/svysurvreg.Rd0000644000176200001440000000352113101467340015110 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/withReplicates.Rd0000755000176200001440000001337013734201460015647 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/smoothUnit.Rd0000644000176200001440000000550014576372270015037 0ustar liggesusers\name{smoothUnit} \alias{svysmoothUnit} \title{Smooth via basic unit level model} \usage{ svysmoothUnit( formula, domain, design, family = c("gaussian", "binomial"), X.pop = NULL, adj.mat = NULL, domain.size = NULL, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = 0.95, n.sample = 250, return.samples = FALSE, X.pop.weights = NULL,... ) } \arguments{ \item{formula}{An object of class 'formula' describing the model to be fitted.} \item{domain}{One-sided formula specifying factors containing domain labels} \item{design}{An object of class "survey.design" containing the data for the model} \item{family}{of the response variable, currently supports 'binomial' (default with logit link function) or 'gaussian'.} \item{X.pop}{Data frame of population unit-level covariates. One of the column name needs to match the domain specified, in order to be linked to the data input. Currently only supporting time-invariant covariates.} \item{adj.mat}{Adjacency matrix with rownames matching the domain labels. If set to NULL, the IID spatial effect will be used.} \item{domain.size}{Data frame of domain sizes. One of the column names needs to match the name of the domain variable, in order to be linked to the data input and there must be a column names 'size' containing domain sizes. The default option is no transformation, but logit and log are implemented.} \item{pc.u}{Hyperparameter U for the PC prior on precisions. See the INLA documentation for more details on the parameterization.} \item{pc.alpha}{Hyperparameter alpha for the PC prior on precisions.} \item{pc.u.phi}{Hyperparameter U for the PC prior on the mixture probability phi in BYM2 model.} \item{pc.alpha.phi}{Hyperparameter alpha for the PC prior on the mixture probability phi in BYM2 model.} \item{level}{The specified level for the posterior credible intervals} \item{n.sample}{Number of draws from posterior used to compute summaries} \item{return.samples}{If TRUE, return matrix of posterior samples of area level quantities} \item{X.pop.weights}{Optional vector of weights to use when aggregating unit level predictions} \item{\dots}{for future expansion} } \value{ A \code{svysae} object } \description{ Generates small area estimates by smoothing direct estimates using a basic unit level model. This model assumes sampling is ignorable (no selection bias). It's a Bayesian linear (\code{family="gaussian"}) or generalised linear (\code{family="binomial"}) mixed model for the unit-level data with individual-level covariates and area-level random effects. } \seealso{The \code{survey-sae} vignette} \references{Battese, G. E., Harter, R. M., & Fuller, W. A. (1988). An Error-Components Model for Prediction of County Crop Areas Using Survey and Satellite Data. Journal of the American Statistical Association, 83(401), 28-36. }survey/man/svyciprop.Rd0000644000176200001440000001153415132025707014715 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","wilson"), 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 and the Stata option \code{citype(logit)}. The results are nearly identical to the \code{"logit"} method except when replicate weights are used, as in that case \code{"logit"} estimates the variance of the transformed proportion using the replicate weights, whereas \code{"xlogit"} uses the replicate weights to estimate the variance of the proportion. The \code{"wilson"} method is the Wilson score interval, which inverts the coverage probability statement using the true probability rather than the estimated probability, which results in a quadratic equation for the estimated probability. This interval is contained in [0,1]. 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{"mean"} and \code{"asin"} are noticeably worse than the others. 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. \url{https://www150.statcan.gc.ca/n1/pub/12-001-x/1998002/article/4356-eng.pdf} Dean, N., and Pagano, M. (2015) Evaluating Confidence Interval Methods for Binomial Proportions in Clustered Surveys. Journal of Survey Statistics and Methodology, 3 (4), 484-503. } \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") svyciprop(~I(ell==0), dclus1, method="wi") ## 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") svyciprop(~I(emer==0), rclus1, method="wi") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/estweights.Rd0000644000176200001440000000716114412407502015043 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/brrweights.Rd0000755000176200001440000001211011457435611015036 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/as.fpc.Rd0000644000176200001440000000227511757251663014046 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/ftable.svystat.Rd0000755000176200001440000000337211457435611015641 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/svyivreg.Rd0000644000176200001440000000341013542525537014540 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/marginpred.Rd0000644000176200001440000000562112537401233015005 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/multiframe.Rd0000644000176200001440000000714514640361577015042 0ustar liggesusers\name{multiframe} \alias{multiframe} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Dual-frame and multi-frame surveys } \description{ Given a list of samples from K different sampling frames and information about which observations are in which frame, constructs an object representing the whole multi-frame sample. If an unit is in the overlap of multiple frames in the population it is effectively split into multiple separate units and so the weight is split if it is sampled. To optimise the split of frame weights, see \code{\link{reweight}} } \usage{ multiframe(designs, overlaps, estimator = c("constant", "expected"), theta = NULL) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{designs}{ List of survey design objects } \item{overlaps}{ list of matrices. Each matrix has K columns indicating whether the observation is in frames 1-K. For the 'constant'-type estimator, this is binary. For the \code{expected} estimator the entry in row i and column k is the weight or probability that observation i would have had if sampled from frame k. (weights if all >=1, probabilities if all <=1) } \item{estimator}{ \code{"constant"} specifies Hartley's estimators in which the partition of weights is the same for each observation. \code{"expected"} weights each observation by the reciprocal of the expected number of times it is sampled; it is the estimator proposed by Bankier and by Kalton and Anderson. } \item{theta}{ Scale factors adding to 1 for splitting the overlap between frames } } \details{ It is not necessary that the frame samples contain exactly the same variables or that they are in the same order, although only variables present in all the samples can be used. It is important that factor variables existing across more than one frame sample have the same factor levels in all the samples. All these estimators assume sampling is independent between frames, and that any observation sampled more than once is present in the dataset each time it is sampled. } \value{ Object of class \code{multiframe} } \references{ Bankier, M. D. (1986) Estimators Based on Several Stratified Samples With Applications to Multiple Frame Surveys. Journal of the American Statistical Association, Vol. 81, 1074 - 1079. Hartley, H. O. (1962) Multiple Frames Surveys. Proceedings of the American Statistical Association, Social Statistics Sections, 203 - 206. Hartley, H. O. (1974) Multiple frame methodology and selected applications. Sankhya C, Vol. 36, 99 - 118. Kalton, G. and Anderson, D. W. (1986) Sampling Rare Populations. Journal of the Royal Statistical Society, Ser. A, Vol. 149, 65 - 82. } \seealso{ \code{\link{svydesign}}, \code{\link{reweight}} For a simple introduction: Metcalf P and Scott AJ (2009) Using multiple frames in health surveys. Stat Med 28:1512-1523 For general reference: Lohr SL, Rao JNK. Inference from dual frame surveys. Journal of the American Statistical Association 2000; 94:271-280. Lohr SL, Rao JNK. Estimation in multiple frame surveys. Journal of the American Statistical Association 2006; 101:1019-1030. } \examples{ data(phoneframes) A_in_frames<-cbind(1, DatA$Domain=="ab") B_in_frames<-cbind(DatB$Domain=="ba",1) Bdes_pps<-svydesign(id=~1, fpc=~ProbB, data=DatB,pps=ppsmat(PiklB)) Ades_pps <-svydesign(id=~1, fpc=~ProbA,data=DatA,pps=ppsmat(PiklA)) ## optimal constant (Hartley) weighting mf_pps<-multiframe(list(Ades_pps,Bdes_pps),list(A_in_frames,B_in_frames),theta=0.74) svytotal(~Lei,mf_pps) svymean(~Lei, mf_pps) svyby(~Lei, ~Size, svymean, design=mf_pps) svytable(~Size+I(Lei>20), mf_pps,round=TRUE) } survey/man/withPV.survey.design.Rd0000644000176200001440000000407413460416456016714 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/poisson_sampling.Rd0000644000176200001440000000230014564774342016250 0ustar liggesusers\name{poisson_sampling} \alias{poisson_sampling} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Specify Poisson sampling design } \description{ Specify a design where units are sampled independently from the population, with known probabilities. This design is often used theoretically, but is rarely used in practice because the sample size is variable. This function calls \code{\link{ppscov}} to specify a sparse sampling covariance matrix. } \usage{ poisson_sampling(p) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{p}{ Vector of sampling probabilities } } \value{ Object of class \code{ppsdcheck} } \seealso{ \code{\link{ppscov}}, \code{\link{svydesign}} } \examples{ data(api) apipop$prob<-with(apipop, 200*api00/sum(api00)) insample<-as.logical(rbinom(nrow(apipop),1,apipop$prob)) apipois<-apipop[insample,] despois<-svydesign(id=~1, prob=~prob, pps=poisson_sampling(apipois$prob), data=apipois) svytotal(~api00, despois) ## SE formula sqrt(sum( (apipois$api00*weights(despois))^2*(1-apipois$prob))) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory (show via RShowDoc("KEYWORDS")): % \keyword{survey } survey/man/svykappa.Rd0000644000176200001440000000217413676517357014537 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/update.survey.design.Rd0000755000176200001440000000361213542525537016757 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/oldsvyquantile.Rd0000755000176200001440000001633613707724316015762 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/svykm.Rd0000644000176200001440000000774411457435612014046 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/svygofchisq.Rd0000644000176200001440000000242313743702255015227 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/svypredmeans.Rd0000644000176200001440000000577013743414240015404 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/as.svrepdesign.Rd0000755000176200001440000001072114166647050015621 0ustar liggesusers\name{as.svrepdesign} \alias{as.svrepdesign} \alias{as.svrepdesign.default} \alias{as.svrepdesign.svyimputationList} %- Also NEED an `\alias' for EACH other topic documented here. \title{Convert a survey design to use replicate weights} \description{ Creates a replicate-weights survey design object from a traditional strata/cluster survey design object. \code{JK1} and \code{JKn} are jackknife methods, \code{BRR} is Balanced Repeated Replicates and \code{Fay} is Fay's modification of this, \code{bootstrap} is Canty and Davison's bootstrap, \code{subbootstrap} is Rao and Wu's \eqn{(n-1)} bootstrap, and \code{mrbbootstrap} is Preston's multistage rescaled bootstrap. With a \code{svyimputationList} object, the same replicate weights will be used for each imputation if the sampling weights are all the same and \code{separate.replicates=FALSE}. } \usage{ as.svrepdesign(design,...) \method{as.svrepdesign}{default}(design, type=c("auto", "JK1", "JKn", "BRR", "bootstrap", "subbootstrap","mrbbootstrap","Fay"), fay.rho = 0, fpc=NULL,fpctype=NULL,..., compress=TRUE, mse=getOption("survey.replicates.mse")) \method{as.svrepdesign}{svyimputationList}(design, type=c("auto", "JK1", "JKn", "BRR", "bootstrap", "subbootstrap","mrbbootstrap","Fay"), fay.rho = 0, fpc=NULL,fpctype=NULL, separate.replicates=FALSE, ..., compress=TRUE, mse=getOption("survey.replicates.mse")) } %- maybe also `usage' for other objects documented here. \arguments{ \item{design}{Object of class \code{survey.design} or \code{svyimputationList}. Must not have been post-stratified/raked/calibrated in R} \item{type}{Type of replicate weights. \code{"auto"} uses JKn for stratified, JK1 for unstratified designs} \item{fay.rho}{Tuning parameter for Fay's variance method } \item{fpc,fpctype,\dots}{Passed to \code{jk1weights}, \code{jknweights}, \code{brrweights}, \code{bootweights}, \code{subbootweights}, or \code{mrbweights}.} \item{separate.replicates}{Compute replicate weights separately for each design (useful for the bootstrap types, which are not deterministic} \item{compress}{Use a compressed representation of the replicate weights matrix.} \item{mse}{if \code{TRUE}, compute variances from sums of squares around the point estimate, rather than the mean of the replicates} } \value{ Object of class \code{svyrep.design}. } \references{ Canty AJ, Davison AC. (1999) Resampling-based variance estimation for labour force surveys. The Statistician 48:379-391 Judkins, D. (1990), "Fay's Method for Variance Estimation," Journal of Official Statistics, 6, 223-239. Preston J. (2009) Rescaled bootstrap for stratified multistage sampling. Survey Methodology 35(2) 227-234 Rao JNK, Wu CFJ. Bootstrap inference for sample surveys. Proc Section on Survey Research Methodology. 1993 (866--871) } \seealso{\code{\link{brrweights}}, \code{\link{svydesign}}, \code{\link{svrepdesign}}, \code{\link{bootweights}}, \code{\link{subbootweights}}, \code{\link{mrbweights}} } \examples{ data(scd) scddes<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE, fpc=rep(5,6)) scdnofpc<-svydesign(data=scd, prob=~1, id=~ambulance, strata=~ESA, nest=TRUE) # convert to BRR replicate weights scd2brr <- as.svrepdesign(scdnofpc, type="BRR") scd2fay <- as.svrepdesign(scdnofpc, type="Fay",fay.rho=0.3) # convert to JKn weights scd2jkn <- as.svrepdesign(scdnofpc, type="JKn") # convert to JKn weights with finite population correction scd2jknf <- as.svrepdesign(scddes, type="JKn") ## with user-supplied hadamard matrix scd2brr1 <- as.svrepdesign(scdnofpc, type="BRR", hadamard.matrix=paley(11)) svyratio(~alive, ~arrests, design=scd2brr) svyratio(~alive, ~arrests, design=scd2brr1) svyratio(~alive, ~arrests, design=scd2fay) svyratio(~alive, ~arrests, design=scd2jkn) svyratio(~alive, ~arrests, design=scd2jknf) data(api) ## one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) ## convert to JK1 jackknife rclus1<-as.svrepdesign(dclus1) ## convert to bootstrap bclus1<-as.svrepdesign(dclus1,type="bootstrap", replicates=100) svymean(~api00, dclus1) svytotal(~enroll, dclus1) svymean(~api00, rclus1) svytotal(~enroll, rclus1) svymean(~api00, bclus1) svytotal(~enroll, bclus1) dclus2<-svydesign(id = ~dnum + snum, fpc = ~fpc1 + fpc2, data = apiclus2) mrbclus2<-as.svrepdesign(dclus2, type="mrb",replicates=100) svytotal(~api00+stype, dclus2) svytotal(~api00+stype, mrbclus2) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/psrsq.Rd0000644000176200001440000000256413122061027014022 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/svyratio.Rd0000755000176200001440000001164513676517357014567 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/svyqqplot.Rd0000644000176200001440000000401313710116156014732 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/withCrossval.Rd0000644000176200001440000000613314640361577015361 0ustar liggesusers\name{withCrossval} \alias{withCrossval} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Crossvalidation using replicate weights } \description{ In each set of replicate weights there will be some clusters that have essentially zero weight. These are used as the test set, with the other clusters used as the training set. Jackknife weights ("JK1","JKn") are very similar to cross-validation at the cluster level; bootstrap weights are similar to bootstrapping for cross-validation. } \usage{ withCrossval(design, formula, trainfun, testfun, loss = c("MSE", "entropy", "AbsError"), intercept, tuning, nearly_zero=1e-4,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{design}{ A survey design object (currently only \code{svyrep.design}) } \item{formula}{ Model formula where the left-hand side specifies the outcome vairable and the right-hand side specifies the variables that will be used for prediction } \item{trainfun}{ Function taking a predictor matrix \code{X}, an outcome vector \code{y}, a weights vector \code{w}, and an element of \code{tuning}, and training a model that is returned as some R object. } \item{testfun}{ Function taking a predictor matrix \code{X} and the output from \code{trainfun} and returning fitted values for the outcome variable. } \item{loss}{ Loss function for assessing prediction } \item{intercept}{ Should the predictor matrix have an intercept added? } \item{tuning}{vector of tuning parameters, such as the regularisation parameter in information criteria or the number of predictors. \code{trainfun} and \code{testfun} will be called with each element of this vector in turn. Use any single-element vector if no tuning parameter is needed} \item{nearly_zero}{test-set threshold on the scale of replicate weight divided by sampling weight.} \item{\dots}{ future expansion } } \value{ A number } \references{ Iparragirre, A., Lumley, T., Barrio, I., & Arostegui, I. (2023). Variable selection with LASSO regression for complex survey data. Stat, 12(1), e578. } \seealso{ \code{\link{as.svrepdesign}} } \examples{ data(api) rclus1<-as.svrepdesign(svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)) withCrossval(rclus1, api00~api99+ell+stype, trainfun=function(X,y,w,tuning) lm.wfit(X,y,w), testfun=function(X, trainfit,tuning) X\%*\%coef(trainfit), intercept=TRUE,loss="MSE",tuning=1) ## More realistic example using lasso ## tuning parameter is number of variables in model ## ## library(glmnet) ## ftrain=function(X,y,w,tuning) { ## m<-glmnet(X,y,weights=w) ## lambda<-m$lambda[min(which(m$df>=tuning))] ## list(m,lambda) ## } ## ftest=function(X, trainfit, tuning){ ## predict(trainfit[[1]], newx=X, s=trainfit[[2]]) ## } ## ## withCrossval(rclus1, api00~api99+ell+stype+mobility+enroll, ## trainfun=ftrain, ## testfun=ftest, ## intercept=FALSE,loss="MSE", ## tuning=0:3) ## ## [1] 11445.2379 9649.1150 800.0742 787.4171 ## ## Models with two or three predictors are about equally good }survey/man/svyquantile.Rd0000644000176200001440000001444014576372270015255 0ustar liggesusers\name{newsvyquantile} \alias{svyquantile} \alias{svyquantile.survey.design} \alias{svyquantile.svyrep.design} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Quantiles under complex sampling. } \description{ Estimates quantiles and confidence intervals for them. This function was completely re-written for version 4.1 of the survey package, and has a wider range of ways to define the quantile. See the vignette for a list of them. } \usage{ svyquantile(x, design, quantiles, ...) \method{svyquantile}{survey.design}(x, design, quantiles, alpha = 0.05, interval.type = c("mean", "beta","xlogit", "asin","score"), na.rm = FALSE, ci=TRUE, se = ci, qrule=c("math","school","shahvaish","hf1","hf2","hf3", "hf4","hf5","hf6","hf7","hf8","hf9"), df = NULL, ...) \method{svyquantile}{svyrep.design}(x, design, quantiles, alpha = 0.05, interval.type = c("mean", "beta","xlogit", "asin","quantile"), na.rm = FALSE, ci = TRUE, se=ci, qrule=c("math","school","shahvaish","hf1","hf2","hf3", "hf4","hf5","hf6","hf7","hf8","hf9"), df = NULL, return.replicates=FALSE,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ A one-sided formula describing variables to be used } \item{design}{ Design object } \item{quantiles}{ Numeric vector specifying which quantiles are requested } \item{alpha}{Specified confidence interval coverage} \item{interval.type}{See Details below} \item{na.rm}{Remove missing values?} \item{ci,se}{Return an estimated confidence interval and standard error?} \item{qrule}{Rule for defining the quantiles: either a character string specifying one of the built-in rules, or a function} \item{df}{Degrees of freedom for confidence interval estimation: \code{NULL} specifies \code{degf(design)}} \item{return.replicates}{Return replicate estimates of the quantile (only for \code{interval.type="quantile"})} \item{\dots}{ For future expansion } } \details{ The \code{p}th quantile is defined as the value where the estimated cumulative distribution function is equal to \code{p}. As with quantiles in unweighted data, this definition only pins down the quantile to an interval between two observations, and a rule is needed to interpolate. The default is the mathematical definition, the lower end of the quantile interval; \code{qrule="school"} uses the midpoint of the quantile interval; \code{"hf1"} to \code{"hf9"} are weighted analogues of \code{type=1} to \code{9} in \code{\link{quantile}}. See the vignette "Quantile rules" for details and for how to write your own. By default, confidence intervals are estimated using Woodruff's (1952) method, which involves computing the quantile, estimating a confidence interval for the proportion of observations below the quantile, and then transforming that interval using the estimated CDF. In that context, the \code{interval.type} argument specifies how the confidence interval for the proportion is computed, matching \code{\link{svyciprop}}. In contrast to \code{oldsvyquantile}, \code{NaN} is returned if a confidence interval endpoint on the probability scale falls outside \code{[0,1]}. There are two exceptions. For \code{svydesign} objects, \code{interval.type="score"} asks for the Francisco & Fuller confidence interval based on inverting a score test. According to Dorfmann & Valliant, this interval has inferior performance to the \code{"beta"} and \code{"logit"} intervals; it is provided for compatibility. For replicate-weight designs, \code{interval.type="quantile"} ask for an interval based directly on the replicates of the quantile. This interval is not valid for jackknife-type replicates, though it should perform well for bootstrap-type replicates, BRR, and SDR. The \code{df} argument specifies degrees of freedom for a t-distribution approximation to distributions of means. The default is the design degrees of freedom. Specify \code{df=Inf} to use a Normal distribution (eg, for compatibility). When the standard error is requested, it is estimated by dividing the confidence interval length by the number of standard errors in a t confidence interval with the specified \code{alpha}. For example, with \code{alpha=0.05} and \code{df=Inf} the standard error is estimated as the confidence interval length divided by \code{2*1.96}. } \value{ An object of class \code{"newsvyquantile"}, except that with a replicate-weights design and \code{interval.type="quantile"} and \code{return.replicates=TRUE} it's an object of class \code{"svrepstat"} } \references{ Dorfman A, Valliant R (1993) Quantile variance estimators in complex surveys. Proceedings of the ASA Survey Research Methods Section. 1993: 866-871 Francisco CA, Fuller WA (1986) Estimation of the distribution function with a complex survey. Technical Report, Iowa State University. Hyndman, R. J. and Fan, Y. (1996) Sample quantiles in statistical packages, The American Statistician 50, 361-365. Shah BV, Vaish AK (2006) Confidence Intervals for Quantile Estimation from Complex Survey Data. Proceedings of the Section on Survey Research Methods. Woodruff RS (1952) Confidence intervals for medians and other position measures. JASA 57, 622-627. } \seealso{ \code{vignette("qrule", package = "survey")} \code{\link{oldsvyquantile}} \code{\link{quantile}} } \examples{ data(api) ## population quantile(apipop$api00,c(.25,.5,.75)) ## one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) rclus1<-as.svrepdesign(dclus1) bclus1<-as.svrepdesign(dclus1,type="boot") svyquantile(~api00, dclus1, c(.25,.5,.75)) svyquantile(~api00, dclus1, c(.25,.5,.75),interval.type="beta") svyquantile(~api00, rclus1, c(.25,.5,.75)) svyquantile(~api00, rclus1, c(.25,.5,.75),interval.type="quantile") svyquantile(~api00, bclus1, c(.25,.5,.75),interval.type="quantile") svyquantile(~api00+ell, dclus1, c(.25,.5,.75), qrule="math") svyquantile(~api00+ell, dclus1, c(.25,.5,.75), qrule="school") svyquantile(~api00+ell, dclus1, c(.25,.5,.75), qrule="hf8") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey}% use one of RShowDoc("KEYWORDS") \keyword{univar}% at least one, from doc/KEYWORDS survey/man/regTermTest.Rd0000755000176200001440000000752213231233535015127 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/xdesign.Rd0000644000176200001440000000666614166647050014341 0ustar liggesusers\name{xdesign} \alias{xdesign} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Crossed effects and other sparse correlations } \description{ Defines a design object with multiple dimensions of correlation: observations that share any of the \code{id} variables are correlated, or you can supply an adjacency matrix or Matrix to specify which are correlated. Supports crossed designs (eg multiple raters of multiple objects) and non-nested observational correlation (eg observations sharing primary school or secondary school). Has methods for \code{svymean}, \code{svytotal}, \code{svyglm} (so far). } \usage{ xdesign(id = NULL, strata = NULL, weights = NULL, data, fpc = NULL, adjacency = NULL, overlap = c("unbiased", "positive"), allow.non.binary = FALSE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{id}{ list of formulas specifying cluster identifiers for each clustering dimension (or \code{NULL}) } \item{strata}{ Not implemented } \item{weights}{ model formula specifying (sampling) weights } \item{data}{ data frame containing all the variables } \item{fpc}{ Not implemented } \item{adjacency}{ Adjacency matrix or Matrix indicating which pairs of observations are correlated } \item{overlap}{ See details below } \item{allow.non.binary}{ If \code{FALSE} check that \code{adjacency} is a binary 0/1 or \code{TRUE}/\code{FALSE} matrix or Matrix. } } \details{ Subsetting for these objects actually drops observations; it is not equivalent to just setting weights to zero as for survey designs. So, for example, a subset of a balanced design will not be a balanced design. The \code{overlap} option controls double-counting of some variance terms. Suppose there are two clustering dimensions, \code{~a} and \code{~b}. If we compute variance matrices clustered on \code{a} and clustered on \code{b} and add them, observations that share both \code{a} and \code{b} will be counted twice, giving a positively biased estimator. We can subtract off a variance matrix clustered on combinations of \code{a} and \code{b} to give an unbiased variance estimator. However, the unbiased estimator is not guaranteed to be positive definite. In the references, Miglioretti and Heagerty use the \code{overlap="positive"} estimator and Cameron et al use the \code{overlap="unbiased"} estimator. } \value{ An object of class \code{xdesign} } \references{ Miglioretti D, Heagerty PJ (2007) Marginal modeling of nonnested multilevel data using standard software. Am J Epidemiol 165(4):453-63 Cameron, A. C., Gelbach, J. B., & Miller, D. L. (2011). Robust Inference With Multiway Clustering. Journal of Business & Economic Statistics, 29(2), 238-249. \url{https://notstatschat.rbind.io/2021/09/18/crossed-clustering-and-parallel-invention/} } \seealso{\code{\link{salamander}}} %% ~Make other sections like Warning with \section{Warning }{....} ~ \examples{ ## With one clustering dimension, is close to the with-replacement ## survey estimator, but not identical unless clusters are equal size data(api) dclus1r<-svydesign(id=~dnum, weights=~pw, data=apiclus1) xclus1<-xdesign(id=list(~dnum), weights=~pw, data=apiclus1) xclus1 svymean(~enroll,dclus1r) svymean(~enroll,xclus1) data(salamander) xsalamander<-xdesign(id=list(~Male, ~Female), data=salamander, overlap="unbiased") xsalamander degf(xsalamander) }survey/man/svyloglin.Rd0000644000176200001440000000651511457435612014716 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/svycontrast.Rd0000644000176200001440000000765514460106005015261 0ustar liggesusers\name{svycontrast} \alias{svycontrast} %- Also NEED an '\alias' for EACH other topic documented here. \title{Linear and nonlinearconstrasts of survey statistics } \description{ Computes linear or nonlinear contrasts of estimates produced by survey functions (or any object with \code{coef} and \code{vcov} methods). } \usage{ svycontrast(stat, contrasts, add=FALSE, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{stat}{object of class \code{svrepstat} or \code{svystat} } \item{contrasts}{A vector or list of vectors of coefficients, or a call or list of calls } \item{add}{keep all the coefficients of the input in the output?} \item{\dots}{For future expansion} } \value{ Object of class \code{svrepstat} or \code{svystat} or \code{svyvar} } \details{ If \code{contrasts} is a list, the element names are used as names for the returned statistics. If an element of \code{contrasts} is shorter than \code{coef(stat)} and has names, the names are used to match up the vectors and the remaining elements of \code{contrasts} are assumed to be zero. If the names are not legal variable names (eg \code{0.1}) they must be quoted (eg \code{"0.1"}) If \code{contrasts} is a \code{"call"} or list of \code{"call"s}, and \code{stat} is a \code{svrepstat} object including replicates, the replicates are transformed and used to compute the variance. If \code{stat} is a \code{svystat} object or a \code{svrepstat} object without replicates, the delta-method is used to compute variances, and the calls must use only functions that \code{\link{deriv}} knows how to differentiate. If the names are not legal variable names they must be quoted with backticks (eg \code{`0.1`}). If \code{stats} is a \code{svyvar} object, the estimates are elements of a matrix and the names are the row and column names pasted together with a colon. } \seealso{\code{\link{regTermTest}}, \code{svyglm}} \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) a <- svytotal(~api00+enroll+api99, dclus1) svycontrast(a, list(avg=c(0.5,0,0.5), diff=c(1,0,-1))) ## if contrast vectors have names, zeroes may be omitted svycontrast(a, list(avg=c(api00=0.5,api99=0.5), diff=c(api00=1,api99=-1))) ## nonlinear contrasts svycontrast(a, quote(api00/api99)) svyratio(~api00, ~api99, dclus1) ## Example: standardised skewness coefficient moments<-svymean(~I(api00^3)+I(api00^2)+I(api00), dclus1) svycontrast(moments, quote((`I(api00^3)`-3*`I(api00^2)`*`I(api00)`+ 3*`I(api00)`*`I(api00)`^2-`I(api00)`^3)/ (`I(api00^2)`-`I(api00)`^2)^1.5)) ## Example: geometric means ## using delta method meanlogs <- svymean(~log(api00)+log(api99), dclus1) svycontrast(meanlogs, list(api00=quote(exp(`log(api00)`)), api99=quote(exp(`log(api99)`)))) ## using delta method rclus1<-as.svrepdesign(dclus1) meanlogs <- svymean(~log(api00)+log(api99), rclus1) svycontrast(meanlogs, list(api00=quote(exp(`log(api00)`)), api99=quote(exp(`log(api99)`)))) ## why is add=TRUE useful? (totals<-svyby(~enroll,~stype,design=dclus1,svytotal,covmat=TRUE)) totals1<-svycontrast(totals, list(total=c(1,1,1)), add=TRUE) svycontrast(totals1, list(quote(E/total), quote(H/total), quote(M/total))) totals2<-svycontrast(totals, list(total=quote(E+H+M)), add=TRUE) all.equal(as.matrix(totals1),as.matrix(totals2)) ## more complicated svyby means <- svyby(~api00+api99, ~stype+sch.wide, design=dclus1, svymean,covmat=TRUE) svycontrast(means, quote(`E.No:api00`-`E.No:api99`)) svycontrast(means, quote(`E.No:api00`/`E.No:api99`)) ## transforming replicates meanlogs_r <- svymean(~log(api00)+log(api99), rclus1, return.replicates=TRUE) svycontrast(meanlogs_r, list(api00=quote(exp(`log(api00)`)), api99=quote(exp(`log(api99)`)))) ## converting covariances to correlations vmat <-svyvar(~api00+ell,dclus1) print(vmat,cov=TRUE) cov2cor(as.matrix(vmat))[1,2] svycontrast(vmat, quote(`api00:ell`/sqrt(`api00:api00`*`ell:ell`))) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/make.calfun.Rd0000644000176200001440000000375513122060525015043 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/fpc.Rd0000755000176200001440000000306014424031636013426 0ustar liggesusers\name{fpc} \alias{fpc} \non_function{} \title{Small survey example} \usage{data(fpc)} \description{ The \code{fpc} data frame has 8 rows and 6 columns. It is artificial data to illustrate survey sampling estimators. } \format{ This data frame contains the following columns: \describe{ \item{stratid}{Stratum ids} \item{psuid}{Sampling unit ids} \item{weight}{Sampling weights} \item{nh}{number sampled per stratum} \item{Nh}{population size per stratum} \item{x}{data} } } \source{ \verb{https://www.stata-press.com/data/r7/fpc.dta} } \examples{ data(fpc) fpc withoutfpc<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, variables=~x, data=fpc, nest=TRUE) withoutfpc svymean(~x, withoutfpc) withfpc<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, fpc=~Nh, variables=~x, data=fpc, nest=TRUE) withfpc svymean(~x, withfpc) ## Other equivalent forms withfpc<-svydesign(prob=~I(1/weight), ids=~psuid, strata=~stratid, fpc=~Nh, variables=~x, data=fpc, nest=TRUE) svymean(~x, withfpc) withfpc<-svydesign(weights=~weight, ids=~psuid, strata=~stratid, fpc=~I(nh/Nh), variables=~x, data=fpc, nest=TRUE) svymean(~x, withfpc) withfpc<-svydesign(weights=~weight, ids=~interaction(stratid,psuid), strata=~stratid, fpc=~I(nh/Nh), variables=~x, data=fpc) svymean(~x, withfpc) withfpc<-svydesign(ids=~psuid, strata=~stratid, fpc=~Nh, variables=~x,data=fpc,nest=TRUE) svymean(~x, withfpc) withfpc<-svydesign(ids=~psuid, strata=~stratid, fpc=~I(nh/Nh), variables=~x, data=fpc, nest=TRUE) svymean(~x, withfpc) } \keyword{datasets} survey/man/svyCprod.Rd0000755000176200001440000001151611757252167014506 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/twophase.Rd0000644000176200001440000002125414640375550014520 0ustar liggesusers\name{twophase} \alias{twophase} \alias{twophasevar} \alias{twophase2var} \alias{[.twophase} \alias{subset.twophase} \alias{print.twophase} \alias{summary.twophase} \alias{print.summary.twophase} \alias{model.frame.twophase} \alias{na.fail.twophase} \alias{na.omit.twophase} \alias{na.exclude.twophase} \alias{svyrecvar.phase1} \alias{multistage.phase1} \alias{onestage.phase1} \alias{onestrat.phase1} %- Also NEED an '\alias' for EACH other topic documented here. \title{Two-phase designs} \description{ In a two-phase design a sample is taken from a population and a subsample taken from the sample, typically stratified by variables not known for the whole population. The second phase can use any design supported for single-phase sampling. The first phase must currently be one-stage element or cluster sampling } \usage{ twophase(id, strata = NULL, probs = NULL, weights = NULL, fpc = NULL, subset, data, method=c("full","approx","simple"), pps=NULL) twophasevar(x,design) twophase2var(x,design) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{id}{list of two formulas for sampling unit identifiers} \item{strata}{list of two formulas (or \code{NULL}s) for stratum identifies} \item{probs}{ list of two formulas (or \code{NULL}s) for sampling probabilities} \item{weights}{Only for \code{method="approx"}, list of two formulas (or \code{NULL}s) for sampling weights} \item{fpc}{list of two formulas (or \code{NULL}s) for finite population corrections} \item{subset}{formula specifying which observations are selected in phase 2} \item{data}{Data frame will all data for phase 1 and 2} \item{method}{\code{"full"} requires (much) more memory, but gives unbiased variance estimates for general multistage designs at both phases. \code{"simple"} or \code{"approx"} uses the standard error calculation from version 3.14 and earlier, which uses much less memory and is correct for designs with simple random sampling at phase one and stratified random sampling at phase two. } \item{pps}{With \code{method="full"}, an optional list of two PPS specifications for \code{\link{svydesign}}. At the moment, the phase-one element must be \code{NULL}} \item{x}{probability-weighted estimating functions} \item{design}{two-phase design} } \details{ The population for the second phase is the first-phase sample. If the second phase sample uses stratified (multistage cluster) sampling without replacement and all the stratum and sampling unit identifier variables are available for the whole first-phase sample it is possible to estimate the sampling probabilities/weights and the finite population correction. These would then be specified as \code{NULL}. Two-phase case-control and case-cohort studies in biostatistics will typically have simple random sampling with replacement as the first stage. Variances given here may differ slightly from those in the biostatistics literature where a model-based estimator of the first-stage variance would typically be used. Variance computations are based on the conditioning argument in Section 9.3 of Sarndal et al. Method \code{"full"} corresponds exactly to the formulas in that reference. Method \code{"simple"} or \code{"approx"} (the two are the same) uses less time and memory but is exact only for some special cases. The most important special case is the two-phase epidemiologic designs where phase 1 is simple random sampling from an infinite population and phase 2 is stratified random sampling. See the \code{tests} directory for a worked example. The only disadvantage of method="simple" in these cases is that standardization of margins (\code{\link{marginpred}}) is not available. For \code{method="full"}, genuine sampling probabilities must be available for each stage of sampling, within each phase. For multistage sampling this requires specifying either \code{fpc} or \code{probs} as a formula with a term for each stage of sampling. If no \code{fpc} or \code{probs} are specified at phase 1 it is treated as simple random sampling from an infinite population, and population totals will not be correctly estimated, but means, quantiles, and regression models will be correct. The \code{pps} argument allows for PPS sampling at phase two (or eventually at phase one), and also for Poisson sampling at phase two as a model for non-response. } \value{ \code{twophase} returns an object of class \code{twophase2} (for \code{method="full"}) or \code{twophase}. The structure of \code{twophase2} objects may change as unnecessary components are removed. \code{twophase2var} and \code{twophasevar} return a variance matrix with an attribute containing the separate phase 1 and phase 2 contributions to the variance. } \references{ Sarndal CE, Swensson B, Wretman J (1992) "Model Assisted Survey Sampling" Springer. Breslow NE and Chatterjee N, Design and analysis of two-phase studies with binary outcome applied to Wilms tumour prognosis. "Applied Statistics" 48:457-68, 1999 Breslow N, Lumley T, Ballantyne CM, Chambless LE, Kulick M. (2009) Improved Horvitz-Thompson estimation of model parameters from two-phase stratified samples: applications in epidemiology. Statistics in Biosciences. doi 10.1007/s12561-009-9001-6 Lin, DY and Ying, Z (1993). Cox regression with incomplete covariate measurements. "Journal of the American Statistical Association" 88: 1341-1349. } \seealso{\code{\link{svydesign}}, \code{\link{svyrecvar}} for multi*stage* sampling \code{\link{calibrate}} for calibration (GREG) estimators. \code{\link{estWeights}} for two-phase designs for missing data. The "epi" and "phase1" vignettes for examples and technical details. } \examples{ ## two-phase simple random sampling. data(pbc, package="survival") pbc$randomized<-with(pbc, !is.na(trt) & trt>0) pbc$id<-1:nrow(pbc) d2pbc<-twophase(id=list(~id,~id), data=pbc, subset=~randomized) svymean(~bili, d2pbc) ## two-stage sampling as two-phase data(mu284) ii<-with(mu284, c(1:15, rep(1:5,n2[1:5]-3))) mu284.1<-mu284[ii,] mu284.1$id<-1:nrow(mu284.1) mu284.1$sub<-rep(c(TRUE,FALSE),c(15,34-15)) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) ## first phase cluster sample, second phase stratified within cluster d2mu284<-twophase(id=list(~id1,~id),strata=list(NULL,~id1), fpc=list(~n1,NULL),data=mu284.1,subset=~sub) svytotal(~y1, dmu284) svytotal(~y1, d2mu284) svymean(~y1, dmu284) svymean(~y1, d2mu284) ## case-cohort design: this example requires R 2.2.0 or later library("survival") data(nwtco) ## stratified on case status dcchs<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco) svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcchs) ## Using survival::cch subcoh <- nwtco$in.subcohort selccoh <- with(nwtco, rel==1|subcoh==1) ccoh.data <- nwtco[selccoh,] ccoh.data$subcohort <- subcoh[selccoh] cch(Surv(edrel, rel) ~ factor(stage) + factor(histol) + I(age/12), data =ccoh.data, subcoh = ~subcohort, id=~seqno, cohort.size=4028, method="LinYing") ## two-phase case-control ## Similar to Breslow & Chatterjee, Applied Statistics (1999) but with ## a slightly different version of the data set nwtco$incc2<-as.logical(with(nwtco, ifelse(rel | instit==2,1,rbinom(nrow(nwtco),1,.1)))) dccs2<-twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,instit)), data=nwtco, subset=~incc2) dccs8<-twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2) summary(glm(rel~factor(stage)*factor(histol),data=nwtco,family=binomial())) summary(svyglm(rel~factor(stage)*factor(histol),design=dccs2,family=quasibinomial())) summary(svyglm(rel~factor(stage)*factor(histol),design=dccs8,family=quasibinomial())) ## Stratification on stage is really post-stratification, so we should use calibrate() gccs8<-calibrate(dccs2, phase=2, formula=~interaction(rel,stage,instit)) summary(svyglm(rel~factor(stage)*factor(histol),design=gccs8,family=quasibinomial())) ## For this saturated model calibration is equivalent to estimating weights. pccs8<-calibrate(dccs2, phase=2,formula=~interaction(rel,stage,instit), calfun="rrz") summary(svyglm(rel~factor(stage)*factor(histol),design=pccs8,family=quasibinomial())) ## Since sampling is SRS at phase 1 and stratified RS at phase 2, we ## can use method="simple" to save memory. dccs8_simple<-twophase(id=list(~seqno,~seqno),strata=list(NULL,~interaction(rel,stage,instit)), data=nwtco, subset=~incc2,method="simple") summary(svyglm(rel~factor(stage)*factor(histol),design=dccs8_simple,family=quasibinomial())) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svyplot.Rd0000755000176200001440000001026213113124216014367 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/HR.Rd0000644000176200001440000000313114073672400013163 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/svyfactanal.Rd0000644000176200001440000000502112372226111015157 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/hospital.Rd0000755000176200001440000000165114073700335014504 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/smoothArea.Rd0000644000176200001440000001113515147132222014753 0ustar liggesusers\name{smoothArea} \alias{svysmoothArea} \title{Small area estimation via basic area level model} \usage{ svysmoothArea( formula, domain, design = NULL, adj.mat = NULL, X.domain = NULL, direct.est = NULL, domain.size = NULL, transform = c("identity", "logit", "log"), pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3, level = 0.95, n.sample = 250, var.tol = 1e-10, return.samples = FALSE,... ) } \arguments{ \item{formula}{An object of class 'formula' describing the model to be fitted. If direct.est is specified, the right hand side of the formula is not necessary.} \item{domain}{One-sided formula specifying factors containing domain labels} \item{design}{An object of class "svydesign" containing the data for the model} \item{adj.mat}{Adjacency matrix with rownames matching the domain labels. If set to \code{NULL}, the IID spatial effect will be used.} \item{X.domain}{Data frame of areal covariates. One of the column names needs to match the name of the domain variable, in order to be linked to the data input. Currently only supporting time-invariant covariates.} \item{direct.est}{Data frame of direct estimates, with first column containing the domain variable, second column containing direct estimate, and third column containing the variance of direct estimate.} \item{domain.size}{Data frame of domain sizes. One of the column names needs to match the name of the \code{domain} variable, in order to be linked to the data input and there must be a column names 'size' containing domain sizes.} \item{transform}{Optional transformation applied to the direct estimates before fitting area level model. The default option is no transformation, but logit and log are implemented.} \item{pc.u}{Hyperparameter U for the PC prior on precisions. See the INLA documentation for more details on the parameterization.} \item{pc.alpha}{Hyperparameter alpha for the PC prior on precisions.} \item{pc.u.phi}{Hyperparameter U for the PC prior on the mixture probability phi in BYM2 model.} \item{pc.alpha.phi}{Hyperparameter alpha for the PC prior on the mixture probability phi in BYM2 model.} \item{level}{The specified level for the posterior credible intervals} \item{n.sample}{Number of draws from posterior used to compute summaries} \item{var.tol}{Tolerance parameter; if variance of an area's direct estimator is below this value, that direct estimator is dropped from model} \item{return.samples}{If TRUE, return matrix of posterior samples of area level quantities} \item{\dots}{for future methods} } \value{ A \code{svysae} object } \description{ Generates small area estimates by smoothing direct estimates using an area level model } \details{ The basic area level model is a Bayesian version of the Fay-Herriot model (Fay & Herriot,1979). It treats direct estimates of small area quantities as response data and explicitly models differences between areas using covariate information and random effects. The Fay-Herriot model can be viewed as a two-stage model: in the first stage, a sampling model represents the sampling variability of a direct estimator and in the second stage, a linking model describes the between area differences in small area quantities. More detail is given in section 4 of Mercer et al (2015). } \seealso{The \code{survey-sae} vignette} \references{ Fay, Robert E., and Roger A. Herriot. (1979). Estimates of Income for Small Places: An Application of James-Stein Procedures to Census Data. Journal of the American Statistical Association 74 (366a): 269-77. Mercer LD, Wakefield J, Pantazis A, Lutambi AM, Masanja H, Clark S. Space-Time Smoothing of Complex Survey Data: Small Area Estimation for Child Mortality. Ann Appl Stat. 2015 Dec;9(4):1889-1905. } \examples{ ## artificial data from SUMMER package ## Uses too many cores for a CRAN example \dontrun{ hasSUMMER<-tryCatch({ data("DemoData2",package="SUMMER") data("DemoMap2", package="SUMMER") }, error=function(e) FALSE) if (!isFALSE(hasSUMMER)){ library(survey) des0 <- svydesign(ids = ~clustid+id, strata = ~strata, weights = ~weights, data = DemoData2, nest = TRUE) Xmat <- aggregate(age~region, data = DemoData2, FUN = mean) cts.cov.res <- svysmoothArea(tobacco.use ~ age, domain = ~region, design = des0, adj.mat = DemoMap2$Amat, X.domain = Xmat, pc.u = 1, pc.alpha = 0.01, pc.u.phi = 0.5, pc.alpha.phi = 2/3) print(cts.cov.res) plot(cts.cov.res) } } } survey/man/SE.Rd0000755000176200001440000000120311757251640013167 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/pchisqsum.Rd0000644000176200001440000001125213707703671014701 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/rake.Rd0000755000176200001440000000773611765257225013627 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/nhanes.Rd0000644000176200001440000000202114073700557014130 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/svycoxph.Rd0000755000176200001440000001176115147136307014554 0ustar liggesusers\name{svycoxph} \alias{svycoxph} \alias{svycoxph.survey.design2} \alias{svycoxph.survey.design} \alias{svycoxph.svyrep.design} \alias{predict.svycoxph} %\alias{print.svycoxph} %\alias{model.frame.svycoxph} %\alias{summary.svycoxph} %\alias{anova.svycoxph} \alias{extractAIC.svycoxph} \alias{AIC.svycoxph} %\alias{survfit.svycoxph} %- Also NEED an `\alias' for EACH other topic documented here. \title{Survey-weighted Cox models.} \description{ Fit a proportional hazards model to data from a complex survey design. } \usage{ svycoxph(formula, design,subset=NULL, rescale=TRUE, ...) \method{predict}{svycoxph}(object, newdata, se=FALSE, type=c("lp", "risk", "terms","curve"),...) \method{AIC}{svycoxph}(object, ..., k = 2) } %- maybe also `usage' for other objects documented here. \arguments{ \item{formula}{Model formula. Any \code{cluster()} terms will be ignored.} \item{design}{ \code{survey.design} object. Must contain all variables in the formula} \item{subset}{Expression to select a subpopulation} \item{rescale}{Rescale weights to improve numerical stability} \item{object}{A \code{svycoxph} object} \item{newdata}{New data for prediction} \item{se}{Compute standard errors? This takes a lot of memory for \code{type="curve"}} \item{type}{"curve" does predicted survival curves. The other values are passed to \code{predict.coxph()}} \item{\dots}{For \code{AIC}, more models to compare the AIC of. For \code{svycoxph}, other arguments passed to \code{coxph}. } \item{k}{The penalty per parameter that would be used under independent sampling: AIC has \code{k=2}} } \details{ The main difference between \code{svycoxph} function and the \code{robust=TRUE} option to \code{\link[survival]{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[survival]{coxph}}, \code{\link[survival]{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/svycralpha.Rd0000644000176200001440000000212113403315617015024 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/svymle.Rd0000755000176200001440000001632413676517357014225 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/salamander.Rd0000644000176200001440000000364214166647050014776 0ustar liggesusers\name{salamander} \docType{data} \alias{salamander} \concept{generalized linear mixed model} \title{Salamander mating data set from McCullagh and Nelder (1989)} \description{This data set presents the outcome of three experiments conducted at the University of Chicago in 1986 to study interbreeding between populations of mountain dusky salamanders (McCullagh and Nelder, 1989, Section 14.5). The analysis here is from Lumley (1998, section 5.3)} \usage{data(salamander)} \format{ A data frame with the following columns: \describe{ \item{Mate}{Whether the salamanders mated (1) or did not mate (0).} \item{Cross}{Cross between female and male type. A factor with four levels: \code{R/R},\code{R/W},\code{W/R}, and \code{W/W}. The type of the female salamander is listed first and the male is listed second. Rough Butt is represented by R and White Side is represented by W. For example, \code{Cross=W/R} indicates a White Side female was crossed with a Rough Butt male.} \item{Male}{Identification number of the male salamander. A factor.} \item{Female}{Identification number of the female salamander. A factor.} } } \references{McCullagh P. and Nelder, J. A. (1989) \emph{Generalized Linear Models}. Chapman and Hall/CRC. Lumley T (1998) PhD thesis, University of Washington } \examples{ data(salamander) salamander$mixed<-with(salamander, Cross=="W/R" | Cross=="R/W") salamander$RWvsWR<-with(salamander, ifelse(mixed, ((Cross=="R/W")-(Cross=="W/R"))/2, 0)) xsalamander<-xdesign(id=list(~Male, ~Female), data=salamander, overlap="unbiased") ## Adjacency matrix ## Blocks 1 and 2 are actually the same salamanders, but ## it's traditional to pretend they are independent. image(xsalamander$adjacency) ## R doesn't allow family=binomial(identity) success <- svyglm(Mate~mixed+RWvsWR, design=xsalamander, family=quasi(link="identity", variance="mu(1-mu)")) summary(success) } \keyword{datasets} survey/man/svyprcomp.Rd0000644000176200001440000000520312372226272014720 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.svydesign2.Rd0000755000176200001440000000202211757251704015360 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/svychisq.Rd0000755000176200001440000002030615132013757014532 0ustar liggesusers\name{svytable} \alias{svreptable} \alias{svytable} \alias{svytable.svyrep.design} \alias{svytable.survey.design} \alias{svychisq} \alias{svychisq.survey.design} \alias{svychisq.svyrep.design} \alias{summary.svytable} \alias{print.summary.svytable} \alias{summary.svreptable} \alias{degf} \alias{degf.svyrep.design} \alias{degf.survey.design2} \alias{degf.twophase} %- Also NEED an '\alias' for EACH other topic documented here. \title{Contingency tables for survey data} \description{ Contingency tables and chisquared tests of association for survey data. } \usage{ \method{svytable}{survey.design}(formula, design, Ntotal = NULL, round = FALSE,...) \method{svytable}{svyrep.design}(formula, design, Ntotal = sum(weights(design, "sampling")), round = FALSE,...) \method{svychisq}{survey.design}(formula, design, statistic = c("F", "Chisq","Wald","adjWald","lincom", "saddlepoint","wls-score"),na.rm=TRUE,...) \method{svychisq}{svyrep.design}(formula, design, statistic = c("F", "Chisq","Wald","adjWald","lincom", "saddlepoint","wls-score"),na.rm=TRUE,...) \method{summary}{svytable}(object, statistic = c("F","Chisq","Wald","adjWald","lincom","saddlepoint"),...) degf(design, ...) \method{degf}{survey.design2}(design, ...) \method{degf}{svyrep.design}(design, tol=1e-5,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Model formula specifying margins for the table (using \code{+} only)} \item{design}{survey object} \item{statistic}{See Details below} \item{Ntotal}{A population total or set of population stratum totals to normalise to.} \item{round}{Should the table entries be rounded to the nearest integer?} \item{na.rm}{Remove missing values} \item{object}{Output from \code{svytable}} \item{...}{For \code{svytable} these are passed to \code{xtabs}. Use \code{exclude=NULL}, \code{na.action=na.pass} to include \code{NA}s in the table} \item{tol}{Tolerance for \code{\link{qr}} in computing the matrix rank} } \details{ The \code{svytable} function computes a weighted crosstabulation. This is especially useful for producing graphics. It is sometimes easier to use \code{\link{svytotal}} or \code{\link{svymean}}, which also produce standard errors, design effects, etc. The frequencies in the table can be normalised to some convenient total such as 100 or 1.0 by specifying the \code{Ntotal} argument. If the formula has a left-hand side the mean or sum of this variable rather than the frequency is tabulated. The \code{Ntotal} argument can be either a single number or a data frame whose first column gives the (first-stage) sampling strata and second column the population size in each stratum. In this second case the \code{svytable} command performs `post-stratification': tabulating and scaling to the population within strata and then adding up the strata. As with other \code{xtabs} objects, the output of \code{svytable} can be processed by \code{ftable} for more attractive display. The \code{summary} method for \code{svytable} objects calls \code{svychisq} for a test of independence. \code{svychisq} computes first and second-order Rao-Scott corrections to the Pearson chisquared test, and two Wald-type tests. The default (\code{statistic="F"}) is the Rao-Scott second-order correction. The p-values are computed with a Satterthwaite approximation to the distribution and with denominator degrees of freedom as recommended by Thomas and Rao (1990). The alternative \code{statistic="Chisq"} adjusts the Pearson chisquared statistic by a design effect estimate and then compares it to the chisquared distribution it would have under simple random sampling. The \code{statistic="Wald"} test is that proposed by Koch et al (1975) and used by the SUDAAN software package. It is a Wald test based on the differences between the observed cells counts and those expected under independence. The adjustment given by \code{statistic="adjWald"} reduces the statistic when the number of PSUs is small compared to the number of degrees of freedom of the test. Thomas and Rao (1987) compare these tests and find the adjustment benefical. \code{statistic="lincom"} replaces the numerator of the Rao-Scott F with the exact asymptotic distribution, which is a linear combination of chi-squared variables (see \code{\link{pchisqsum}}, and \code{statistic="saddlepoint"} uses a saddlepoint approximation to this distribution. The \code{CompQuadForm} package is needed for \code{statistic="lincom"} but not for \code{statistic="saddlepoint"}. The saddlepoint approximation is especially useful when the p-value is very small (as in large-scale multiple testing problems). \code{statistic="wls-score"} is an experimental implementation of the weighted least squares score test of Lipsitz et al (2015). It is not identical to that paper, for example, I think the denominator degrees of freedom need to be reduced by JK for a JxK table, not (J-1)(K-1). And it's very close to the "adjWald" test. For designs using replicate weights the code is essentially the same as for designs with sampling structure, since the necessary variance computations are done by the appropriate methods of \code{\link{svytotal}} and \code{\link{svymean}}. The exception is that the degrees of freedom is computed as one less than the rank of the matrix of replicate weights (by \code{degf}). At the moment, \code{svychisq} works only for 2-dimensional tables. } \value{ The table commands return an \code{xtabs} object, \code{svychisq} returns a \code{htest} object. } \references{ Davies RB (1973). "Numerical inversion of a characteristic function" Biometrika 60:415-7 P. Duchesne, P. Lafaye de Micheaux (2010) "Computing the distribution of quadratic forms: Further comparisons between the Liu-Tang-Zhang approximation and exact methods", Computational Statistics and Data Analysis, Volume 54, 858-862 Koch, GG, Freeman, DH, Freeman, JL (1975) "Strategies in the multivariate analysis of data from complex surveys" International Statistical Review 43: 59-78 Stuart R. Lipsitz, Garrett M. Fitzmaurice, Debajyoti Sinha, Nathanael Hevelone, Edward Giovannucci, and Jim C. Hu (2015) "Testing for independence in JxK contingency tables with complex sample survey data" Biometrics 71(3): 832-840 Rao, JNK, Scott, AJ (1984) "On Chi-squared Tests For Multiway Contigency Tables with Proportions Estimated From Survey Data" Annals of Statistics 12:46-60. Sribney WM (1998) "Two-way contingency tables for survey or clustered data" Stata Technical Bulletin 45:33-49. Thomas, DR, Rao, JNK (1987) "Small-sample comparison of level and power for simple goodness-of-fit statistics under cluster sampling" JASA 82:630-636 } \note{Rao and Scott (1984) leave open one computational issue. In computing `generalised design effects' for these tests, should the variance under simple random sampling be estimated using the observed proportions or the the predicted proportions under the null hypothesis? \code{svychisq} uses the observed proportions, following simulations by Sribney (1998), and the choices made in Stata} \seealso{\code{\link{svytotal}} and \code{\link{svymean}} report totals and proportions by category for factor variables. See \code{\link{svyby}} and \code{\link{ftable.svystat}} to construct more complex tables of summary statistics. See \code{\link{svyloglin}} for loglinear models. See \code{\link{regTermTest}} for Rao-Scott tests in regression models. See \url{https://notstatschat.rbind.io/2019/06/08/design-degrees-of-freedom-brief-note/} for an explanation of the design degrees of freedom with replicate weights. } \examples{ data(api) xtabs(~sch.wide+stype, data=apipop) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) summary(dclus1) (tbl <- svytable(~sch.wide+stype, dclus1)) plot(tbl) fourfoldplot(svytable(~sch.wide+comp.imp+stype,design=dclus1,round=TRUE), conf.level=0) svychisq(~sch.wide+stype, dclus1) summary(tbl, statistic="Chisq") svychisq(~sch.wide+stype, dclus1, statistic="adjWald") rclus1 <- as.svrepdesign(dclus1) summary(svytable(~sch.wide+stype, rclus1)) svychisq(~sch.wide+stype, rclus1, statistic="adjWald") } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{category}% __ONLY ONE__ keyword per line \keyword{htest}% __ONLY ONE__ keyword per line survey/man/election.Rd0000644000176200001440000000547311457435611014473 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/multiphase.Rd0000644000176200001440000000574414664202766015053 0ustar liggesusers\name{multiphase} \alias{multiphase} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Multiphase sampling designs } \description{ These objects represent designs with arbitrarily many nested phases of sampling, allowing estimation and calibration/raking at each phase } \usage{ multiphase(ids, subset, strata, probs, data, fpc = NULL, check.variable.phase=TRUE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{ids}{ List of as many model formulas as phases describing ids for each phase. Each formula may indicate multistage sampling } \item{subset}{ list of model formulas for each phase except the first, specifying a logical vector of which observations from the previous phase are included } \item{strata}{ List of as many model formulas as phases describing strata for each phase. Each formula may indicate multistage sampling, or \code{NULL} for no strata } \item{probs}{ List of as many model formulas or \code{pps_spec} objects as phases describing sampling probabilities for each phase. Each formula may indicate multistage sampling. Typically will either be \code{NULL} except for phase 1 if \code{strata} are specified, or a matrix of class \code{pps_spec} specifying pairwise probabilities or covariances. Use \code{~1} at phase 1 to specify iid sampling from a generating model. } \item{data}{ data frame of data} \item{fpc}{ Finite population correction for the first phase, if needed } \item{check.variable.phase}{Work out which phase each variable is observed in by looking at missing value patterns. You may want \code{FALSE} for simulations where the values aren't actually missing} } \details{ Variance calculation uses a decomposition with sampling contributions at each stage, which are returned as the \code{phases} attribution of a variance-covariance matrix. The computations broadly follow the description for two-phase sampling in chapter 9 of Sarndal et al (1991); there is more detail in the vignette } \value{ Object of class \code{multiphase} } \references{ Sarndal, Swensson, and Wretman (1991) "Model Assisted Survey Sampling" (Chapter 9) } \note{ There are currently methods for \code{svytotal}, \code{svymean}, \code{svyglm}, \code{svyvar}. } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{twophase} for older implementations of two-phase sampling \code{vignette("multiphase")} for computational details } \examples{ data(nwtco) dcchs<-twophase(id = list(~seqno, ~seqno), strata = list(NULL, ~rel), subset = ~I(in.subcohort | rel), data = nwtco) mcchs<-multiphase(id = list(~seqno, ~seqno), strata = list(NULL, ~rel), subset = list(~I(in.subcohort | rel)), probs = list(~1, NULL), data = nwtco) dcchs mcchs svymean(~edrel, dcchs) svymean(~edrel, mcchs) summary(svyglm(edrel~rel+histol+stage, design=dcchs)) summary(svyglm(edrel~rel+histol+stage, design=mcchs)) m<-calibrate(mcchs,~factor(stage)+rel, phase=2, calfun="raking") vcov(svytotal(~factor(stage), m)) }survey/man/svyglm.Rd0000755000176200001440000002520215132034532014174 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} \encoding{UTF-8} %- 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, std.errors=c("linearized","Bell-McCaffrey","Bell-McCaffrey-2"),degf=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{std.errors}{The kind of standard errors to compute} \item{degf}{Whether to compute the adjusted degrees of freedom along with Bell-McCaffrey standard errors} \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 (1999) 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)}. When \code{std.errors="Bell-McCaffrey(-2)"} option is specified for clustered \code{svydesign}, Bell-McCaffrey standard errors are produced that adjust for some of the known downward biases of linearized standard errors. Bell and McAffrey (2002) also suggest corrections for the degrees of freedom, which end up being even more conservative than the (# of PSUs)-(# of strata) design degrees of freedom. By default, the computation of these degrees of freedom adjustments is skipped (\code{degf=FALSE}) as they require dealing with projection matrices of size \code{nrow(svydesign$variables)} by \code{nrow(svydesign$variables)}. The option \code{std.errors="Bell-McCaffrey"} produces a version with unit working residual covariance matrix, and option \code{std.errors="Bell-McCaffrey-2"} produces a version with the exchangeable correlation working residual covariance matrix, recommended by Imbens and Kolesar (2016) (typically more conservative). The standard errors themselves are identical between these two options. 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}}. When the model is not of full rank, so that some coefficients are \code{NA}, point predictions will be made by setting those coefficients to zero. Standard error and variance estimates will be \code{NA}. } \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} if \code{se.fit} is \code{TRUE}, otherwise just a numeric vector} \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{ Robert M. Bell and Daniel F. McCaffrey (2002). Bias Reduction in Standard Errors for Linear Regression with Multi-Stage Samples. Survey Methodology 28 (2), 169-181. \url{https://www150.statcan.gc.ca/n1/pub/12-001-x/2002002/article/9058-eng.pdf} David A. Binder (1983). On the Variances of Asymptotically Normal Estimators from Complex Surveys. International Statistical Review: 51(3), 279-292. Guido W. Imbens and Michal Kolesár (2016). Robust Standard Errors in Small Samples: Some Practical Advice. The Review of Economics and Statistics, 98(4): 701-712 Edward L. Korn and Barry I. Graubard (1999). Analysis of Health Surveys. Wiley Series in Survey Methodology. Wiley: Hoboken, NJ. Thomas Lumley and Alastair J. Scott (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)) ## standard errors corrected up summary(svyglm(api00~ell+meals+mobility, design=dstrat, std.errors="Bell-McCaffrey")) summary(svyglm(api00~ell+meals+mobility, design=dclus2, std.errors="Bell-McCaffrey")) ## not applicable to replicate designs ## 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/svyhist.Rd0000644000176200001440000000457413357475534014414 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/postStratify.Rd0000755000176200001440000000751512750540521015400 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/svynls.Rd0000644000176200001440000000374614076371104014224 0ustar liggesusers\name{svynls} \alias{svynls} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Probability-weighted nonlinear least squares } \description{ Fits a nonlinear model by probability-weighted least squares. Uses \code{nls} to do the fitting, but estimates design-based standard errors with either linearisation or replicate weights. See \code{\link{nls}} for documentation of model specification and fitting. } \usage{ svynls(formula, design, start, weights=NULL, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ Nonlinear model specified as a formula; see \code{\link{nls}} } \item{design}{ Survey design object } \item{start}{starting values, passed to \code{\link{nls}}} \item{weights}{ Non-sampling weights, eg precision weights to give more efficient estimation in the presence of heteroscedasticity. } \item{\dots}{ Other arguments to \code{nls} (especially, \code{start}). Also supports \code{return.replicates} for replicate-weight designs and \code{influence} for other designs. } } \value{ Object of class \code{svynls}. The fitted \code{nls} object is included as the \code{fit} element. } \seealso{ \code{\link{svymle}} for maximum likelihood with linear predictors on one or more parameters } \examples{ set.seed(2020-4-3) x<-rep(seq(0,50,1),10) y<-((runif(1,10,20)*x)/(runif(1,0,10)+x))+rnorm(510,0,1) pop_model<-nls(y~a*x/(b+x), start=c(a=15,b=5)) df<-data.frame(x=x,y=y) df$p<-ifelse((y-fitted(pop_model))*(x-mean(x))>0, .4,.1) df$strata<-ifelse(df$p==.4,"a","b") in_sample<-stratsample(df$strata, round(table(df$strat)*c(0.4,0.1))) sdf<-df[in_sample,] des<-svydesign(id=~1, strata=~strata, prob=~p, data=sdf) pop_model (biased_sample<-nls(y~a*x/(b+x),data=sdf, start=c(a=15,b=5))) (corrected <- svynls(y~a*x/(b+x), design=des, start=c(a=15,b=5))) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey }% use one of RShowDoc("KEYWORDS") survey/man/reweight.Rd0000644000176200001440000000664014640361577014512 0ustar liggesusers\name{reweight} \alias{reweight} \alias{reweight.dualframe} \alias{plot.dualframe_with_rewt} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Reweight (optimise) the weights on frames } \description{ Evaluates a set of expressions for different frame weights in a dual-frame/multi-frame design, so that an optimal or compromise-optimal set of frame weights can be chosen } \usage{ reweight(design, ...) \method{reweight}{dualframe}(design, targets=NULL, totals=NULL, estimator=c("constant","expected"), theta=NULL, theta_grid=seq(0,1,by=0.05),...) \method{plot}{dualframe_with_rewt}(x,y,type="b",...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{design}{ dual-frame or multiframe design object } \item{targets, totals}{A list of quoted expressions estimating the variance of a survey estimator (\code{targets}), or a list of formulas that will be turned into targets for the variances of totals.} \item{estimator}{As in \code{\link{multiframe}}: \code{"constant"} is a constant weight for all observations in an overlap between frames, \code{"expected"} weights by the reciprocal of the expected numbers of times a unit is sampled and is not optimisable.} \item{theta}{As in \code{\link{multiframe}}, a fixed weight for observations in frame 1 also sampled in frame 2} \item{theta_grid}{Grid for optimising theta over, with \code{estimator="constant"}} \item{x}{object produced by \code{reweight}} \item{y}{ignored} \item{type,\dots}{ in the \code{plot} method these are passed to \code{\link{matplot}} } } \details{ Traditionally, this optimisation has been done with totals, which is a good default and more mathematically tractable. However, when the point of multiple-frame sampling is to improve precision for a rare sub-population, or when you're doing regression modelling, you might want to optimise for something else. } \value{ An object of class "dualframe_with_rewt". The \code{coef} method returns the optimal theta for each target. The \code{rewt} element includes the variances of each target on a grid of \code{theta} in \code{variances} } \seealso{ \code{\link{multiframe}} } \examples{ data(phoneframes) A_in_frames<-cbind(1, DatA$Domain=="ab") B_in_frames<-cbind(DatB$Domain=="ba",1) Bdes_pps<-svydesign(id=~1, fpc=~ProbB, data=DatB,pps=ppsmat(PiklB)) Ades_pps <-svydesign(id=~1, fpc=~ProbA,data=DatA,pps=ppsmat(PiklA)) ## Not very good weighting mf_pps<-multiframe(list(Ades_pps,Bdes_pps),list(A_in_frames,B_in_frames),theta=0.5) svytotal(~Lei+Feed+Tax+Clo,mf_pps, na.rm=TRUE) ## try to optimise mf_opt<-reweight(mf_pps, totals=list(~Lei, ~Feed,~Tax,~Clo)) coef(mf_opt) plot(mf_opt) ## a good compromise is 0.80 for everything except Tax ## and it's still pretty good there ## (Tax will be biased because it's missing for landline-only) mf_pps_opt<-reweight(mf_opt,theta=0.80) svytotal(~Lei+Feed+Tax+Clo,mf_pps_opt, na.rm=TRUE) ## Targets other than totals mf_reg<-reweight(mf_pps, targets=list(quote(vcov(svyglm(Lei~Feed+Clo, design=.DESIGN))[1,1]), quote(vcov(svytotal(~Lei,.DESIGN)))) ) plot(mf_reg,type="l") legend("topright",bty="n",lty=1:2,col=1:2, legend=c("regression","total")) ## Zooming in on optimality for a particular variable (for compatibility) mf_opt1<-reweight(mf_pps, totals=list(~Feed),theta_grid=seq(0.7,0.9,length=100)) coef(mf_opt1) # Frames2::Hartley gives 0.802776 }survey/man/svrVar.Rd0000755000176200001440000000246612372225517014155 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/surveyoptions.Rd0000644000176200001440000001035414462601271015630 0ustar liggesusers\name{surveyoptions} \alias{surveyoptions} \alias{survey.lonely.psu} \alias{survey.ultimate.cluster} \alias{survey.adjust.domain.lonely} \alias{survey.want.obsolete} \alias{survey.drop.replicates} \alias{survey.multicore} \alias{survey.replicates.mse} \alias{survey.use_rcpp} \title{Options for the survey package} \description{ This help page documents the options that control the behaviour of the survey package. } \details{ All the options for the survey package have names beginning with "survey". Four of them control standard error estimation. \code{options("survey.replicates.mse")} controls the default in \code{svrepdesign} and \code{as.svrepdesign} for computing variances. When \code{options("survey.replicates.mse")} is \code{TRUE}, the default is to create replicate weight designs that compute variances centered at the point estimate, rather than at the mean of the replicates. The option can be overridden by specifying the \code{mse} argument explicitly in \code{svrepdesign} and \code{as.svrepdesign}. The default is \code{FALSE}. When \code{options("survey.ultimate.cluster")} is \code{TRUE}, standard error estimation is based on independence of PSUs at the first stage of sampling, without using any information about subsequent stages. When \code{FALSE}, finite population corrections and variances are estimated recursively. See \code{\link{svyrecvar}} for more information. This option makes no difference unless first-stage finite population corrections are specified, in which case setting the option to \code{TRUE} gives the wrong answer for a multistage study. The only reason to use \code{TRUE} is for compatibility with other software that gives the wrong answer. Handling of strata with a single PSU that are not certainty PSUs is controlled by \code{options("survey.lonely.psu")}. The default setting is \code{"fail"}, which gives an error. Use \code{"remove"} to ignore that PSU for variance computation, \code{"adjust"} to center the stratum at the population mean rather than the stratum mean, and \code{"average"} to replace the variance contribution of the stratum by the average variance contribution across strata. As of version 3.4-2 \code{as.svrepdesign} also uses this option. The variance formulas for domain estimation give well-defined, positive results when a stratum contains only one PSU with observations in the domain, but are not unbiased. If \code{options("survey.adjust.domain.lonely")} is \code{TRUE} and \code{options("survey.lonely.psu")} is \code{"average"} or \code{"adjust"} the same adjustment for lonely PSUs will be used within a domain. Note that this adjustment is not available for replicate-weight designs, nor (currently) for raked, post-stratified, or calibrated designs. The fourth option is \code{options("survey.want.obsolete")}. This controls the warnings about using the deprecated pre-2.9.0 survey design objects. The behaviour of replicate-weight designs for self-representing strata is controlled by \code{options("survey.drop.replicates")}. When \code{TRUE}, various optimizations are used that take advantage of the fact that these strata do not contribute to the variance. The only reason ever to use \code{FALSE} is if there is a bug in the code for these optimizations. The fifth option controls the use of multiple processors with the \code{multicore} package. This option should not affect the values computed by any of the survey functions. If \code{TRUE}, all functions that are able to use multiple processors will do so by default. Using multiple processors may speed up calculations, but need not, especially if the computer is short on memory. The best strategy is probably to experiment with explicitly requesting \code{multicore=TRUE} in functions that support it, to see if there is an increase in speed before setting the global option. \code{survey.use_rcpp} controls whether the new C++ code for standard errors is used (vs the old R code). The factory setting is \code{TRUE} and the only reason to use \code{FALSE} is for comparisons. } \keyword{survey} survey/man/yrbs.Rd0000644000176200001440000000217514576372270013652 0ustar liggesusers\name{yrbs} \alias{yrbs} \docType{data} \title{ One variable from the Youth Risk Behaviors Survey, 2015. } \description{ Design information from the Youth Risk Behaviors Survey (YRBS), together with the single variable `Never/Rarely wore bike helmet'. Used as an analysis example by CDC. } \usage{data("yrbs")} \format{ A data frame with 15624 observations on the following 4 variables. \describe{ \item{\code{weight}}{sampling weights} \item{\code{stratum}}{sampling strata} \item{\code{psu}}{primary sampling units} \item{\code{qn8}}{1=Yes, 2=No} } } \source{ \url{https://ftp.cdc.gov/pub/Data/YRBS/2015smy/} for files } \references{ Centers for Disease Control and Prevention (2016) Software for Analysis of YRBS Data. [CRAN doesn't believe the URL is valid] } \examples{ data(yrbs) yrbs_design <- svydesign(id=~psu, weight=~weight, strata=~stratum, data=yrbs) yrbs_design <- update(yrbs_design, qn8yes=2-qn8) ci <- svyciprop(~qn8yes, yrbs_design, na.rm=TRUE, method="xlogit") ci ## to print more digits: matches SUDAAN and SPSS exactly, per table 3 of reference coef(ci) SE(ci) attr(ci,"ci") } \keyword{datasets} survey/man/svrepdesign.Rd0000755000176200001440000002272415132015152015207 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} \alias{degf<-} %- Also NEED an `\alias' for EACH other topic documented here. \title{Specify survey design with replicate weights} \description{ Some recent large-scale surveys specify replication weights rather than the sampling design (partly for privacy reasons). This function specifies the data structure for such a survey. } \usage{ svrepdesign(variables , repweights , weights, data, degf=NULL,...) \method{svrepdesign}{default}(variables = NULL, repweights = NULL, weights = NULL, data = NULL, degf=NULL, type = c("BRR", "Fay", "JK1","JKn","bootstrap", "ACS","successive-difference","JK2","other"), combined.weights=TRUE, rho = NULL, bootstrap.average=NULL, scale=NULL, rscales=NULL,fpc=NULL, fpctype=c("fraction","correction"), mse=getOption("survey.replicates.mse"),...) \method{svrepdesign}{imputationList}(variables=NULL, repweights,weights,data, degf=NULL, mse=getOption("survey.replicates.mse"),...) \method{svrepdesign}{character}(variables=NULL,repweights=NULL, weights=NULL,data=NULL, degf=NULL, type=c("BRR","Fay","JK1", "JKn","bootstrap","ACS","successive-difference","JK2","other"), combined.weights=TRUE, rho=NULL, bootstrap.average=NULL, scale=NULL,rscales=NULL, fpc=NULL,fpctype=c("fraction","correction"),mse=getOption("survey.replicates.mse"), dbtype="SQLite", dbname,...) degf(design)<-value \method{image}{svyrep.design}(x, ..., col=grey(seq(.5,1,length=30)), type.=c("rep","total")) } %- maybe also `usage' for other objects documented here. \arguments{ \item{variables}{formula or data frame specifying variables to include in the design (default is all) } \item{repweights}{formula or data frame specifying replication weights, or character string specifying a regular expression that matches the names of the replication weight variables } \item{weights}{sampling weights } \item{data}{data frame to look up variables in formulas, or character string giving name of database table} \item{degf}{Design degrees of freedom; use \code{NULL} to have the function work this out for you} \item{type}{Type of replication weights} \item{combined.weights}{\code{TRUE} if the \code{repweights} already include the sampling weights. This is usually the case.} \item{rho}{Shrinkage factor for weights in Fay's method} \item{bootstrap.average}{For \code{type="bootstrap"}, if the bootstrap weights have been averaged, gives the number of iterations averaged over} \item{scale, rscales}{Scaling constant for variance, see Details below} \item{fpc,fpctype}{Finite population correction information} \item{mse}{If \code{TRUE}, compute variances based on sum of squares around the point estimate, rather than the mean of the replicates} \item{dbname}{name of database, passed to \code{DBI::dbConnect()}} \item{dbtype}{Database driver: see Details} \item{x}{survey design with replicate weights} \item{...}{Other arguments to \code{\link{image}}} \item{col}{Colors} \item{type.}{\code{"rep"} for only the replicate weights, \code{"total"} for the replicate and sampling weights combined.} \item{design}{replicate-weight design} \item{value}{new degrees of freedom to assign} } \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. The American Community Survey recommends mse-style standard error estimates; if you do not specify \code{mse} explicitly \code{mse=TRUE} will be set with a message, overriding \code{getOption("survey.replicates.mse")}. If you explicitly specify \code{mse=FALSE} there will be a warning but your choice will be respected. JK2 weights (\code{type="JK2"}), as in the California Health Interview Survey, automatically use \code{scale=1}, \code{rscales=rep(1, ncol(repweights))}. The \code{scale} and \code{rscales} arguments will be ignored (with a warning) if they are specified. Averaged bootstrap weights ("mean bootstrap") are used for some surveys from Statistics Canada. Yee et al (1999) describe their construction and use for one such survey. The variance is computed as the sum of squared deviations of the replicates from their mean. This may be rescaled: \code{scale} is an overall multiplier and \code{rscales} is a vector of replicate-specific multipliers for the squared deviations. That is, \code{rscales} should have one entry for each column of \code{repweights} If thereplication weights incorporate the sampling weights (\code{combined.weights=TRUE}) or for \code{type="other"} these must be specified, otherwise they can be guessed from the weights. A finite population correction may be specified for \code{type="other"}, \code{type="JK1"} and \code{type="JKn"}. \code{fpc} must be a vector with one entry for each replicate. To specify sampling fractions use \code{fpctype="fraction"} and to specify the correction directly use \code{fpctype="correction"} The design degrees of freedom are returned by \code{\link{degf}}. By default they are computed from the numerical rank of the repweights. This is slow for very large data sets and you can specify a value instead. The specified value is not modified when you subset the object; to change it use the \code{degf<-} assignment method \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/trimWeights.Rd0000644000176200001440000000440614166647050015174 0ustar liggesusers\name{trimWeights} \Rdversion{1.1} \alias{trimWeights} \alias{trimWeights.svyrep.design} \alias{trimWeights.survey.design2} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Trim sampling weights } \description{ Trims very high or very low sampling weights to reduce the influence of outlying observations. In a replicate-weight design object, the replicate weights are also trimmed. The total amount trimmed is divided among the observations that were not trimmed, so that the total weight remains the same. } \usage{ trimWeights(design, upper = Inf, lower = -Inf, ...) \method{trimWeights}{survey.design2}(design, upper = Inf, lower = -Inf, strict=FALSE,...) \method{trimWeights}{svyrep.design}(design, upper = Inf, lower = -Inf, strict=FALSE, compress=FALSE,...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{design}{ A survey design object } \item{upper}{ Upper bound for weights } \item{lower}{ Lower bound for weights } \item{strict}{ The reapportionment of the `trimmings' from the weights can push other weights over the limits. If \code{trim=TRUE} the function repeats the trimming iteratively to prevent this. For replicate-weight designs \code{strict} applies only to the trimming of the sampling weights. } \item{compress}{ Compress the replicate weights after trimming. } \item{\dots}{ Other arguments for future expansion } } \value{ A new survey design object with trimmed weights. } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{\link{calibrate}} has a \code{trim} option for trimming the calibration adjustments. } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) pop.totals<-c(`(Intercept)`=6194, stypeH=755, stypeM=1018, api99=3914069) dclus1g<-calibrate(dclus1, ~stype+api99, pop.totals) summary(weights(dclus1g)) dclus1t<-trimWeights(dclus1g,lower=20, upper=45) summary(weights(dclus1t)) dclus1tt<-trimWeights(dclus1g, lower=20, upper=45,strict=TRUE) summary(weights(dclus1tt)) svymean(~api99+api00+stype, dclus1g) svymean(~api99+api00+stype, dclus1t) svymean(~api99+api00+stype, dclus1tt) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/hadamard.Rd0000755000176200001440000000410315147131741014417 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 In: The Encyclopedia of Design Theory } \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/svyranktest.Rd0000644000176200001440000000537314233634027015262 0ustar liggesusers\name{svyranktest} \alias{svyranktest} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Design-based rank tests } \description{ Design-based versions of k-sample rank tests. The built-in tests are all for location hypotheses, but the user could specify others. } \usage{ svyranktest(formula, design, test = c("wilcoxon", "vanderWaerden", "median","KruskalWallis"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ Model formula \code{y~g} for outcome variable \code{y} and group \code{g} } \item{design}{ A survey design object } \item{test}{ Which rank test to use: Wilcoxon, van der Waerden's normal-scores test, Mood's test for the median, or a function \code{f(r,N)} where \code{r} is the rank and \code{N} the estimated population size. "KruskalWallis" is a synonym for "wilcoxon" for more than two groups. } \item{\dots}{ for future expansion} } \details{These tests are for the null hypothesis that the population or superpopulation distributions of the response variable are different between groups, targeted at population or superpopulation alternatives. The 'ranks' are defined as quantiles of the pooled distribution of the variable, so they do not just go from 1 to N; the null hypothesis does not depend on the weights, but the ranks do. The tests reduce to the usual Normal approximations to the usual rank tests under iid sampling. Unlike the traditional rank tests, they are not exact in small samples. } \value{ Object of class \code{htest} Note that with more than two groups the \code{statistic} element of the return value holds the numerator degrees of freedom and the \code{parameter} element holds the test statistic. } \references{ Lumley, T., & Scott, A. J. (2013). Two-sample rank tests under complex sampling. BIOMETRIKA, 100 (4), 831-842. } \seealso{ \code{\link{svyttest}}, \code{\link{svylogrank}} } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, fpc=~fpc, data=apiclus1) svyranktest(ell~comp.imp, dclus1) svyranktest(ell~comp.imp, dclus1, test="median") svyranktest(ell~stype, dclus1) svyranktest(ell~stype, dclus1, test="median") str(svyranktest(ell~stype, dclus1)) ## upper quartile svyranktest(ell~comp.imp, dclus1, test=function(r,N) as.numeric(r>0.75*N)) quantiletest<-function(p){ rval<-function(r,N) as.numeric(r>(N*p)) attr(rval,"name")<-paste(p,"quantile") rval } svyranktest(ell~comp.imp, dclus1, test=quantiletest(0.5)) svyranktest(ell~comp.imp, dclus1, test=quantiletest(0.75)) ## replicate weights rclus1<-as.svrepdesign(dclus1) svyranktest(ell~stype, rclus1) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{htest}% __ONLY ONE__ keyword per line survey/man/bootweights.Rd0000644000176200001440000000633714641372306015226 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}} \url{https://bschneidr.github.io/svrep/} for other sorts of replicate weights } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/svyttest.Rd0000644000176200001440000000243514066243770014573 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/barplot.svystat.Rd0000644000176200001440000000273412372225304016036 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/anova.svyglm.Rd0000644000176200001440000001510114462575367015316 0ustar liggesusers\name{anova.svyglm} \alias{anova.svyglm} \alias{AIC.svyglm} \alias{BIC.svyglm} \alias{extractAIC.svyglm} \alias{extractAIC.svrepglm} \alias{anova.svycoxph} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Model comparison for glms. } \description{ A method for the \code{\link{anova}} function, for use on \code{\link{svyglm}} and \code{\link{svycoxph}} objects. With a single model argument it produces a sequential anova table, with two arguments it compares the two models. } \usage{ \method{anova}{svyglm}(object, object2 = NULL, test = c("F", "Chisq"), method = c("LRT", "Wald"), tolerance = 1e-05, ..., force = FALSE) \method{anova}{svycoxph}(object, object2=NULL,test=c("F","Chisq"), method=c("LRT","Wald"),tolerance=1e-5,...,force=FALSE) \method{AIC}{svyglm}(object,...,k=2, null_has_intercept=TRUE) \method{BIC}{svyglm}(object,...,maximal) \method{extractAIC}{svyglm}(fit,scale,k=2,..., null_has_intercept=TRUE) \method{extractAIC}{svrepglm}(fit,scale,k=2,..., null_has_intercept=TRUE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object,fit}{ A \code{\link{svyglm}} or\code{\link{svycoxph}} object. } \item{object2}{ Optionally, another \code{\link{svyglm}} or \code{\link{svycoxph}} object. } \item{test}{ Use (linear combination of) F or chi-squared distributions for p-values. F is usually preferable. } \item{method}{ Use weighted deviance difference (LRT) or Wald tests to compare models } \item{tolerance}{ For models that are not symbolically nested, the tolerance for deciding that a term is common to the models. } \item{\dots}{ For \code{AIC} and \code{BIC}, optionally more \code{svyglm} objects } \item{scale}{not used} \item{null_has_intercept}{Does the null model for AIC have an intercept or not? Must be \code{FALSE} if any of the models are intercept-only. } \item{force}{ Force the tests to be done by explicit projection even if the models are symbolically nested (eg, for debugging) } \item{maximal}{A \code{svyglm} model that \code{object} (and \dots if supplied) are nested in.} \item{k}{Multiplier for effective df in AIC. Usually 2. There is no choice of \code{k} that will give BIC} } \details{ The reference distribution for the LRT depends on the misspecification effects for the parameters being tested (Rao and Scott, 1984). If the models are symbolically nested, so that the relevant parameters can be identified just by manipulating the model formulas, \code{anova} is equivalent to \code{\link{regTermTest}}.If the models are nested but not symbolically nested, more computation using the design matrices is needed to determine the projection matrix on to the parameters being tested. In the examples below, \code{model1} and \code{model2} are symbolically nested in \code{model0} because \code{model0} can be obtained just by deleting terms from the formulas. On the other hand, \code{model2} is nested in \code{model1} but not symbolically nested: knowing that the model is nested requires knowing what design matrix columns are produced by \code{stype} and \code{as.numeric(stype)}. Other typical examples of models that are nested but not symbolically nested are linear and spline models for a continuous covariate, or models with categorical versions of a variable at different resolutions (eg, smoking yes/no or smoking never/former/current). A saddlepoint approximation is used for the LRT with numerator df greater than 1. \code{AIC} is defined using the Rao-Scott approximation to the weighted loglikelihood (Lumley and Scott, 2015). It replaces the usual penalty term p, which is the null expectation of the log likelihood ratio, by the trace of the generalised design effect matrix, which is the expectation under complex sampling. For computational reasons everything is scaled so the weights sum to the sample size. \code{BIC} is a BIC for the (approximate) multivariate Gaussian models on regression coefficients from the maximal model implied by each submodel (ie, the models that say some coefficients in the maximal model are zero) (Lumley and Scott, 2015). It corresponds to comparing the models with a Wald test and replacing the sample size in the penalty by an effective sample size. For computational reasons, the models must not only be nested, the names of the coefficients must match. \code{extractAIC} for a model with a Gaussian link uses the actual AIC based on maximum likelihood estimation of the variance parameter as well as the regression parameters. } \value{ Object of class \code{seqanova.svyglm} if one model is given, otherwise of class \code{regTermTest} or \code{regTermTestLRT} } \note{ At the moment, \code{AIC} works only for models including an intercept. } \references{ Rao, JNK, Scott, AJ (1984) "On Chi-squared Tests For Multiway Contingency Tables with Proportions Estimated From Survey Data" Annals of Statistics 12:46-60. Lumley, T., & Scott, A. (2014). "Tests for Regression Models Fitted to Survey Data". Australian and New Zealand Journal of Statistics, 56 (1), 1-14. Lumley T, Scott AJ (2015) "AIC and BIC for modelling with complex survey data" J Surv Stat Methodol 3 (1): 1-18. } \seealso{ \code{\link{regTermTest}}, \code{\link{pchisqsum}} } \examples{ data(api) dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) model0<-svyglm(I(sch.wide=="Yes")~ell+meals+mobility, design=dclus2, family=quasibinomial()) model1<-svyglm(I(sch.wide=="Yes")~ell+meals+mobility+as.numeric(stype), design=dclus2, family=quasibinomial()) model2<-svyglm(I(sch.wide=="Yes")~ell+meals+mobility+stype, design=dclus2, family=quasibinomial()) anova(model2) anova(model0,model2) anova(model1, model2) anova(model1, model2, method="Wald") AIC(model0,model1, model2) BIC(model0, model2,maximal=model2) ## AIC for linear model is different because it considers the variance ## parameter model0<-svyglm(api00~ell+meals+mobility, design=dclus2) model1<-svyglm(api00~ell+meals+mobility+as.numeric(stype), design=dclus2) model2<-svyglm(api00~ell+meals+mobility+stype, design=dclus2) modelnull<-svyglm(api00~1, design=dclus2) AIC(model0, model1, model2) AIC(model0, model1, model2,modelnull, null_has_intercept=FALSE) ## from ?twophase data(nwtco) dcchs<-twophase(id=list(~seqno,~seqno), strata=list(NULL,~rel), subset=~I(in.subcohort | rel), data=nwtco) a<-svycoxph(Surv(edrel,rel)~factor(stage)+factor(histol)+I(age/12), design=dcchs) b<-update(a, .~.-I(age/12)+poly(age,3)) ## not symbolically nested models anova(a,b) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} \keyword{regression}% __ONLY ONE__ keyword per line survey/man/weights.survey.design.Rd0000755000176200001440000000254511457435612017150 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/with.svyimputationList.Rd0000644000176200001440000000376713733223240017426 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/svyolr.Rd0000644000176200001440000000431714412422532014213 0ustar liggesusers\name{svyolr} \alias{svyolr} \alias{svyolr.survey.design2} \alias{svyolr.svyrep.design} \alias{predict.svyolr} %- Also NEED an '\alias' for EACH other topic documented here. \title{Proportional odds and related models } \description{ Fits cumulative link models: proportional odds, probit, complementary log-log, and cauchit. } \usage{ svyolr(formula, design, ...) \method{svyolr}{survey.design2}(formula, design, start, subset=NULL,..., na.action = na.omit,method = c("logistic", "probit", "cloglog", "cauchit")) \method{svyolr}{svyrep.design}(formula,design,subset=NULL,...,return.replicates=FALSE, multicore=getOption("survey.multicore")) \method{predict}{svyolr}(object, newdata, type = c("class", "probs"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{Formula: the response must be a factor with at least three levels} \item{design}{survey design object } \item{subset}{subset of the design to use; \code{NULL} for all of it} \item{\dots}{dots} \item{start}{Optional starting values for optimization} \item{na.action}{handling of missing values} \item{multicore}{Use \code{multicore} package to distribute computation of replicates across multiple processors?} \item{method}{Link function} \item{return.replicates}{return the individual replicate-weight estimates} \item{object}{object of class \code{svyolr}} \item{newdata}{new data for predictions} \item{type}{return vector of most likely class or matrix of probabilities} } \value{ An object of class \code{svyolr} } \author{The code is based closely on polr() from the MASS package of Venables and Ripley.} \seealso{\code{\link{svyglm}}, \code{\link{regTermTest}} } \examples{ data(api) dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) dclus1<-update(dclus1, mealcat=cut(meals,c(0,25,50,75,100))) m<-svyolr(mealcat~avg.ed+mobility+stype, design=dclus1) m ## Use regTermTest for testing multiple parameters regTermTest(m, ~avg.ed+stype, method="LRT") ## predictions summary(predict(m, newdata=apiclus2)) summary(predict(m, newdata=apiclus2, type="probs")) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/svysmooth.Rd0000644000176200001440000000623012025753216014730 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/stratsample.Rd0000644000176200001440000000165211457435611015223 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/myco.Rd0000644000176200001440000000361214416101237013621 0ustar liggesusers\name{myco} \alias{myco} \docType{data} \title{ Association between leprosy and BCG vaccination } \description{ These data are in a paper by JNK Rao and colleagues, on score tests for complex survey data. External information (not further specified) suggests the functional form for the \code{Age} variable. } \usage{data("myco")} \format{ A data frame with 516 observations on the following 6 variables. \describe{ \item{\code{Age}}{Age in years at the midpoint of six age strata} \item{\code{Scar}}{Presence of a BCG vaccination scar} \item{\code{n}}{Sampled number of cases (and thus controls) in the age stratum} \item{\code{Ncontrol}}{Number of non-cases in the population} \item{\code{wt}}{Sampling weight} \item{\code{leprosy}}{case status 0/1} } } \details{ The data are a simulated stratified case-control study drawn from a population study conducted in a region of Malawi (Clayton and Hills, 1993, Table 18.1). The goal was to examine whether BCG vaccination against tuberculosis protects against leprosy (the causative agents are both species of _Mycobacterium_). Rao et al have a typographical error: the number of non-cases in the population in the 25-30 age stratum is given as 4981 but 5981 matches both the computational output and the data as given by Clayton and Hills. } \source{ JNK Rao, AJ Scott, and Skinner, C. (1998). QUASI-SCORE TESTS WITH SURVEY DATA. Statistica Sinica, 8(4), 1059-1070. Clayton, D., & Hills, M. (1993). Statistical Models in Epidemiology. OUP } \examples{ data(myco) dmyco<-svydesign(id=~1, strata=~interaction(Age,leprosy),weights=~wt,data=myco) m_full<-svyglm(leprosy~I((Age+7.5)^-2)+Scar, family=quasibinomial, design=dmyco) m_age<-svyglm(leprosy~I((Age+7.5)^-2), family=quasibinomial, design=dmyco) anova(m_full,m_age) ## unweighted model does not match m_full glm(leprosy~I((Age+7.5)^-2)+Scar, family=binomial, data=myco) } \keyword{datasets} survey/man/mu284.Rd0000644000176200001440000000170613225255236013541 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/nonresponse.Rd0000755000176200001440000000627311457435611015244 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/confint.svyglm.Rd0000644000176200001440000000462615147132264015646 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{\link{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 normal. If \code{NULL}, use \code{object$df.residual} for Taylor-series standard errors, or \code{object$df.coef} for Bell-McCaffrey standard errors with adjusted degrees of freedom.} \item{\dots}{for future expansion} } \value{ A matrix of confidence intervals, possibly with additional attributes \code{levels} and/or \code{degf}. } \references{ J. N. K. Rao and Alastair J. Scott (1984). On Chi-squared Tests For Multiway Contigency Tables with Proportions Estimated From Survey Data. Annals of Statistics 12:46-60. Robert M. Bell and Daniel F. McCaffrey (2002). Bias Reduction in Standard Errors for Linear Regression with Multi-Stage Samples. Survey Methodology 28 (2), 169-181. \url{https://www150.statcan.gc.ca/n1/pub/12-001-x/2002002/article/9058-eng.pdf} } \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")) m2<-svyglm(I(comp.imp=="Yes")~stype*emer+ell, design=dclus2, family=quasibinomial, std.errors="Bell-McCaffrey-2", degf=TRUE) confint(m2) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{survey} survey/man/phoneframes.Rd0000644000176200001440000001066114640361577015201 0ustar liggesusers\docType{data} \name{phoneframes} \alias{phoneframes} \alias{DatA} \alias{DatB} \alias{PiklA} \alias{PiklB} \title{Database of household expenses for two sampling frames} \format{\describe{ \item{Domain}{A factor indicating the domain each household belongs to. In sample A, possible values are "a" if household belongs to domain a or "ab" if household belongs to overlap domain; in sample B, the values are "b" or "ba"} \item{Feed}{Feeding expenses (in euros) at the househould} \item{Clo}{Clothing expenses (in euros) at the household} \item{Lei}{Leisure expenses (in euros) at the household} \item{Inc}{Household income (in euros). Values for this variable are only available for households included in frame A. For households included in domain b, value of this variable is missing} \item{Tax}{Household municipal taxes (in euros) paid. Values for this variable are only available for households included in frame A. For households included in domain b, value of this variable is missing} \item{M2}{Square meters of the house. Values for this variable are only available for households included in frame B. For households included in domain a, value of this variable is missing} \item{Size}{Household size. Values for this variable are only available for households included in frame B. For households included in domain a, value of this variable is missing} \item{ProbA}{First order inclusion probability in frame A. This probability is 0 for households included in domain b.} \item{ProbB}{First order inclusion probability in frame B. This probability is 0 for households included in domain a.} \item{Stratum}{A numeric value indicating the stratum each household belongs to.} }} \usage{ data(phoneframes) } \description{ This dataset contains some variables regarding household expenses for a sample of 105 households selected from a list of landline phones (frame A) and a sample of 135 from a list of mobile phones (frame B) in a particular city in a specific month. These data are taken from the \code{Frames2} package under the GPL-2 or GPL-3 licence. } \details{ The frame A sample, of size \eqn{n_A = 105}, has been drawn from a population of \eqn{N_A = 1735} households with landline phone according to a stratified random sampling. Population units were divided in 6 different strata. Population sizes of these strata are \eqn{N_A^h = (727, 375, 113, 186, 115, 219)}. \eqn{N_{ab} = 601} of the households composing the population have, also, mobile phone. On the other hand, frame totals for auxiliary variables in this frame are \eqn{X_{Income}^A = 4300260} and \eqn{X_{Taxes}^A = 215577}. The frame B sample, of size \eqn{n_B = 135}, has been drawn from a population of \eqn{N_B = 1191} households with mobile phone according to a simple random sampling without replacement design. \eqn{N_{ab} = 601} of these households have, also, landline phone. On the other hand, frame totals for auxiliary variables in this frame are \eqn{X_{Metres2}^B = 176553} and \eqn{X_{Size}^B = 3529} \code{PiklA} and \code{PiklB} are matrices of pairwise sampling probabilities for the two frames. } \examples{ data(phoneframes) A_in_frames<-cbind(1, DatA$Domain=="ab") B_in_frames<-cbind(DatB$Domain=="ba",1) Bdes_pps<-svydesign(id=~1, fpc=~ProbB, data=DatB,pps=ppsmat(PiklB)) Ades_pps <-svydesign(id=~1, fpc=~ProbA,data=DatA,pps=ppsmat(PiklA)) ## optimal constant (Hartley) weighting mf_pps<-multiframe(list(Ades_pps,Bdes_pps),list(A_in_frames,B_in_frames),theta=0.74) svytotal(~Lei,mf_pps) Awts<-cbind(1/DatA$ProbA, ifelse(DatA$ProbB==0,0,1/DatA$ProbB)) Bwts<-cbind(ifelse(DatB$ProbA==0,0,1/DatB$ProbA),1/DatB$ProbB ) ## dividing by the expected number of selections (BKA or HH estimator) mf_pps2<-multiframe(list(Ades_pps,Bdes_pps),list(Awts,Bwts),estimator="expected") svymean(~Lei,mf_pps2) ## Metcalf and Scott approximation DatB$Stratum<-10 DatB$Frame<-2 DatA$Frame<-1 Dat_both<-rbind(DatA,DatB) frame_weights<-c(0.742,1-0.742) Dat_both$fweights<-with(Dat_both, ifelse(Frame==1, ifelse(Domain=="ab", frame_weights[1]*1/ProbA,1/ProbA), ifelse(Domain=="ba", frame_weights[2]*1/ProbB, 1/ProbB))) MSdesign<-svydesign(id=~1, strata=~Stratum, weights=~fweights,data=Dat_both) svymean(~Lei,MSdesign) } \seealso{ \code{\link{multiframe}}, \code{\link{reweight}} Original package: \url{https://CRAN.R-project.org/package=Frames2} } \keyword{datasets} survey/man/svycoplot.Rd0000644000176200001440000000370415147136260014724 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{lattice::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{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{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/calibrate.Rd0000644000176200001440000003632715131557064014621 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 or data frames for each margin (see Details below). Required except for phase 2 of 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 of tables or lists of data frames 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. In a two-phase design, \code{formula} may be a glm or lm or coxph model fitted to the phase-one data. Calibration will be done using the influence functions of this model as the calibration variables. } \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/man/svy.varcoef.Rd0000755000176200001440000000175115132034024015117 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,std.errors = c("linearized", "Bell-McCaffrey", "Bell-McCaffrey-2"), degf = FALSE) } \arguments{ \item{glm.object}{A \code{\link{glm}} object} \item{design}{A \code{survey.design} object } \item{std.errors}{The kind of standard errors to compute} \item{degf}{Whether to compute the adjusted degrees of freedom along with Bell-McCaffrey standard errors} } \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/paley.Rd0000644000176200001440000000462714576372270014011 0ustar liggesusers\name{paley} \alias{paley} \alias{is.hadamard} %- Also NEED an '\alias' for EACH other topic documented here. \title{Paley-type Hadamard matrices} \description{ Computes a Hadamard matrix of dimension \eqn{(p+1)\times 2^k}{(p+1)*2^k}, where p is a prime, and p+1 is a multiple of 4, using the Paley construction. Used by \code{\link{hadamard}}. } \usage{ paley(n, nmax = 2 * n, prime=NULL, check=!is.null(prime)) is.hadamard(H, style=c("0/1","+-"), full.orthogonal.balance=TRUE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{n}{Minimum size for matrix} \item{nmax}{Maximum size for matrix. Ignored if \code{prime} is specified.} \item{prime}{Optional. A prime at least as large as \code{n}, such that \code{prime+1} is divisible by 4.} \item{check}{Check that the resulting matrix is of Hadamard type} \item{H}{Matrix} \item{style}{\code{"0/1"} for a matrix of 0s and 1s, \code{"+-"} for a matrix of \eqn{\pm 1}{+/-1}.} \item{full.orthogonal.balance}{Require full orthogonal balance?} } \value{ For \code{paley}, a matrix of zeros and ones, or \code{NULL} if no matrix smaller than \code{nmax} can be found. For \code{is.hadamard}, \code{TRUE} if \code{H} is a Hadamard matrix. } \details{ The Paley construction gives a Hadamard matrix of order p+1 if p is prime and p+1 is a multiple of 4. This is then expanded to order \eqn{(p+1)\times 2^k}{(p+1)*2^k} using the Sylvester construction. \code{paley} knows primes up to 7919. The user can specify a prime with the \code{prime} argument, in which case a matrix of order \eqn{p+1}{p+1} is constructed. If \code{check=TRUE} the code uses \code{is.hadamard} to check that the resulting matrix really is of Hadamard type, in the same way as in the example below. As this test takes \eqn{n^3}{n^3} time it is preferable to just be sure that \code{prime} really is prime. A Hadamard matrix including a row of 1s gives BRR designs where the average of the replicates for a linear statistic is exactly the full sample estimate. This property is called full orthogonal balance. } \references{ Cameron PJ (2005) Hadamard Matrices. In: The Encyclopedia of Design Theory } \seealso{ \code{\link{hadamard}}} \examples{ M<-paley(11) is.hadamard(M) ## internals of is.hadamard(M) H<-2*M-1 ## HH^T is diagonal for any Hadamard matrix H\%*\%t(H) } \keyword{survey}% at least one, from doc/KEYWORDS \keyword{algebra} survey/man/compressWeights.Rd0000755000176200001440000000320211457435611016046 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/scd.Rd0000755000176200001440000000362211457435611013437 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/open.DBIsvydesign.Rd0000644000176200001440000000252613542525537016163 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/svyrecvar.Rd0000755000176200001440000001101614462577247014721 0ustar liggesusers\name{svyrecvar} \alias{svyrecvar} \alias{multistage} \alias{multistage_rcpp} %- Also NEED an '\alias' for EACH other topic documented here. \title{Variance estimation for multistage surveys} \description{ Compute the variance of a total under multistage sampling, using a recursive descent algorithm. } \usage{ svyrecvar(x, clusters, stratas,fpcs, postStrata = NULL, lonely.psu = getOption("survey.lonely.psu"), one.stage=getOption("survey.ultimate.cluster")) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Matrix of data or estimating functions} \item{clusters}{Data frame or matrix with cluster ids for each stage} \item{stratas}{Strata for each stage } \item{fpcs}{Information on population and sample size for each stage, created by \code{\link{as.fpc}}} \item{postStrata}{post-stratification information as created by \code{\link{postStratify}} or \code{\link{calibrate}} } \item{lonely.psu}{How to handle strata with a single PSU} \item{one.stage}{If \code{TRUE}, compute a one-stage (ultimate-cluster) estimator} } \details{ The main use of this function is to compute the variance of the sum of a set of estimating functions under multistage sampling. The sampling is assumed to be simple or stratified random sampling within clusters at each stage except perhaps the last stage. The variance of a statistic is computed from the variance of estimating functions as described by Binder (1983). Use \code{one.stage=FALSE} for compatibility with other software that does not perform multi-stage calculations, and set \code{options(survey.ultimate.cluster=TRUE)} to make this the default. The idea of a recursive algorithm is due to Bellhouse (1985). Texts such as Cochran (1977) and Sarndal et al (1991) describe the decomposition of the variance into a single-stage between-cluster estimator and a within-cluster estimator, and this is applied recursively. If \code{one.stage} is a positive integer it specifies the number of stages of sampling to use in the recursive estimator. If \code{pps="brewer"}, standard errors are estimated using Brewer's approximation for PPS without replacement, option 2 of those described by Berger (2004). The \code{fpc} argument must then be specified in terms of sampling fractions, not population sizes (or omitted, but then the \code{pps} argument would have no effect and the with-replacement standard errors would be correct). } \value{ A covariance matrix } \references{ Bellhouse DR (1985) Computing Methods for Variance Estimation in Complex Surveys. Journal of Official Statistics. Vol.1, No.3, 1985 Berger, Y.G. (2004), A Simple Variance Estimator for Unequal Probability Sampling Without Replacement. Journal of Applied Statistics, 31, 305-315. Binder, David A. (1983). On the variances of asymptotically normal estimators from complex surveys. International Statistical Review, 51, 279-292. Brewer KRW (2002) Combined Survey Sampling Inference (Weighing Basu's Elephants) [Chapter 9] Cochran, W. (1977) Sampling Techniques. 3rd edition. Wiley. Sarndal C-E, Swensson B, Wretman J (1991) Model Assisted Survey Sampling. Springer. } \note{ A simple set of finite population corrections will only be exactly correct when each successive stage uses simple or stratified random sampling without replacement. A correction under general unequal probability sampling (eg PPS) would require joint inclusion probabilities (or, at least, sampling probabilities for units not included in the sample), information not generally available. The quality of Brewer's approximation is excellent in Berger's simulations, but the accuracy may vary depending on the sampling algorithm used. } \seealso{ \code{\link{svrVar}} for replicate weight designs \code{\link{svyCprod}} for a description of how variances are estimated at each stage } \examples{ data(mu284) dmu284<-svydesign(id=~id1+id2,fpc=~n1+n2, data=mu284) svytotal(~y1, dmu284) data(api) # two-stage cluster sample dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) summary(dclus2) svymean(~api00, dclus2) svytotal(~enroll, dclus2,na.rm=TRUE) # bootstrap for multistage sample mrbclus2<-as.svrepdesign(dclus2, type="mrb", replicates=100) svytotal(~enroll, mrbclus2, na.rm=TRUE) # two-stage `with replacement' dclus2wr<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) summary(dclus2wr) svymean(~api00, dclus2wr) svytotal(~enroll, dclus2wr,na.rm=TRUE) } \keyword{survey}% at least one, from doc/KEYWORDS survey/man/api.Rd0000755000176200001440000001110514416101237013422 0ustar liggesusers\name{api} \alias{api} \alias{apipop} \alias{apiclus1} \alias{apiclus2} \alias{apistrat} \alias{apisrs} \docType{data} \title{Student performance in California schools} \description{ The Academic Performance Index is computed for all California schools based on standardised testing of students. The data sets contain information for all schools with at least 100 students and for various probability samples of the data. } \usage{ data(api) } \format{ The full population data in \code{apipop} are a data frame with 6194 observations on the following 37 variables. \describe{ \item{cds}{Unique identifier} \item{stype}{Elementary/Middle/High School} \item{name}{School name (15 characters)} \item{sname}{School name (40 characters)} \item{snum}{School number} \item{dname}{District name} \item{dnum}{District number} \item{cname}{County name} \item{cnum}{County number} \item{flag}{reason for missing data} \item{pcttest}{percentage of students tested} \item{api00}{API in 2000} \item{api99}{API in 1999} \item{target}{target for change in API} \item{growth}{Change in API} \item{sch.wide}{Met school-wide growth target?} \item{comp.imp}{Met Comparable Improvement target} \item{both}{Met both targets} \item{awards}{Eligible for awards program} \item{meals}{Percentage of students eligible for subsidized meals} \item{ell}{`English Language Learners' (percent)} \item{yr.rnd}{Year-round school} \item{mobility}{percentage of students for whom this is the first year at the school} \item{acs.k3}{average class size years K-3} \item{acs.46}{average class size years 4-6} \item{acs.core}{Number of core academic courses} \item{pct.resp}{percent where parental education level is known} \item{not.hsg}{percent parents not high-school graduates} \item{hsg}{percent parents who are high-school graduates} \item{some.col}{percent parents with some college} \item{col.grad}{percent parents with college degree} \item{grad.sch}{percent parents with postgraduate education} \item{avg.ed}{average parental education level} \item{full}{percent fully qualified teachers} \item{emer}{percent teachers with emergency qualifications} \item{enroll}{number of students enrolled} \item{api.stu}{number of students tested.} } The other data sets contain additional variables \code{pw} for sampling weights and \code{fpc} to compute finite population corrections to variance. } \details{ \code{apipop} is the entire population, \code{apisrs} is a simple random sample, \code{apiclus1} is a cluster sample of school districts, \code{apistrat} is a sample stratified by \code{stype}, and \code{apiclus2} is a two-stage cluster sample of schools within districts. The sampling weights in \code{apiclus1} are incorrect (the weight should be 757/15) but are as obtained from UCLA. } \source{ Data were obtained from the survey sampling help pages of UCLA Academic Technology Services; these pages are no longer on line. } \references{ The API program has been discontinued at the end of 2018, and the archive page at the California Department of Education is now gone. The Wikipedia article has links to past material at the Internet Archive. \url{https://en.wikipedia.org/wiki/Academic_Performance_Index_(California_public_schools)} } \examples{ library(survey) data(api) mean(apipop$api00) sum(apipop$enroll, na.rm=TRUE) #stratified sample dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc) summary(dstrat) svymean(~api00, dstrat) svytotal(~enroll, dstrat, na.rm=TRUE) # one-stage cluster sample dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc) summary(dclus1) svymean(~api00, dclus1) svytotal(~enroll, dclus1, na.rm=TRUE) # two-stage cluster sample dclus2<-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2) summary(dclus2) svymean(~api00, dclus2) svytotal(~enroll, dclus2, na.rm=TRUE) # two-stage `with replacement' dclus2wr<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2) summary(dclus2wr) svymean(~api00, dclus2wr) svytotal(~enroll, dclus2wr, na.rm=TRUE) # convert to replicate weights rclus1<-as.svrepdesign(dclus1) summary(rclus1) svymean(~api00, rclus1) svytotal(~enroll, rclus1, na.rm=TRUE) # post-stratify on school type pop.types<-xtabs(~stype, data=apipop) rclus1p<-postStratify(rclus1, ~stype, pop.types) dclus1p<-postStratify(dclus1, ~stype, pop.types) summary(dclus1p) summary(rclus1p) svymean(~api00, dclus1p) svytotal(~enroll, dclus1p, na.rm=TRUE) svymean(~api00, rclus1p) svytotal(~enroll, rclus1p, na.rm=TRUE) } \keyword{datasets} survey/man/svycdf.Rd0000644000176200001440000000355511457435611014166 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/DESCRIPTION0000755000176200001440000000315615147304542013332 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 and multiphase subsampling designs. Graphics. PPS sampling without replacement. Small-area estimation. Dual-frame designs. Version: 4.5 Authors@R: c(person(given = "\"Thomas", family = "Lumley\"", role = "cre", email = "t.lumley@auckland.ac.nz"), person(given = "Peter", family = "Gao", role ="aut"), person(given = "Ben", family = "Schneider", role= "aut"), person(given = "Stas", family= "Kolenkikov", role="aut")) Maintainer: "Thomas Lumley" License: GPL-2 | GPL-3 Depends: R (>= 4.1.0), grid, methods, Matrix, survival Imports: stats, graphics, splines, lattice, minqa, numDeriv, mitools (>= 2.4), Rcpp (>= 0.12.8) LinkingTo: Rcpp, RcppArmadillo VignetteBuilder: R.rsp, knitr Suggests: foreign, MASS, KernSmooth, hexbin, RSQLite, quantreg, parallel, CompQuadForm, DBI, AER, SUMMER (>= 1.4.0), R.rsp, knitr, testthat (>= 3.0.0) URL: http://r-survey.r-forge.r-project.org/survey/ Config/testthat/edition: 3 NeedsCompilation: yes Packaged: 2026-02-23 20:47:59 UTC; tlum005 Author: "Thomas Lumley" [cre], Peter Gao [aut], Ben Schneider [aut], Stas Kolenkikov [aut] Repository: CRAN Date/Publication: 2026-02-24 11:20:02 UTC

ܐ<Ç^U~icMEpfKGyB,l{{@Q F k5}k;`c_uG m"C0  7 tM4Zt-j>˅Q@ՒU_ACR=d>EFȉy`*# Z6Y{GxG=~N-4f@l5ScXχ13&c-܈LA,4\?U 8;ibF>إ\#Ѷ }~K]BdG'}m$$xNoq6Y,FU 擶]8W5a7m!3r*\?E\!G{'(о6luvm!u$ˑTP6Rk뒢e>Ēaoe߄{O%@`mDa={Tj/읖XBn20Q^ 1@ar%T #`y|eNJbmݏtTD /3? NUͼo@U穀S֎b[]G5xr|itxдMMD<^*I8(`T/5%2Ȩg7@ݽ Wp4aq!da]M$E_{Z3.݈2,(l\}3'J늡!*=%̺mI`1͗!EB{8r#%zaT6۾Pg@Rӛ/V̰S@,>ʚ)ž}\+VFFvfMnc~mĮFgw}mn߉n'ٝ״VTaYqCQJ|mI}4ڮ粅/ UG4b *mT %KkƔa# j+ NzRX!4CRS\g#L~A=ח`{<4T J#KCwꠧnk_YҨڱE]_: -ڔLvj;L`85U;bώLEFp#N$<>gi!ܽ;U8]Y*%vM1#Vb\Z> t1_$V)l<+wgU$("1/o.7z#a g%23A~-`{?)球ϔTYtGXap4G.iWtS;-D4IŃoZ"YowQvj?fH绉cL25t܅Ӆ9 0no\2 I,-O‡; /3:Ģy/ȳÄ,'1~ Yb_ 2 3mK!mCu2$:GL Rk5 0weϪ8;v^~x$gZ4\xEZf{z>b?S:4Q3L*%;V!jgn6(9)kc{^=B}.M .&C!=NRf;d@Y,P2κ>eӄr ^Ȥѹ9% +HHU` 4Tli.ϏE+!A5/5Pμ2x=D݅&<isk_U+}Lmi=8\)"vE`&ȕE½Xk"ބ2{Wg%M2)d]62 7Y}wG\s~;70cvşX)6^Lii12+D\Ev/U+)xkՊl-P)n/p S ޼VX}V7 VmuVEj,сȃ{7%ӟ¬26NO'TR7&Gg=lkN(ȫ*4UÌ2Ax% dOqiI 2Vеeceܞ d`ϋ#E: &Q{A*QO'Bf|ܳOM1v>~g`!jMY)I8ua*nM_} P7[Pغdx0f!ɖ ƿy3GdCal@2d&z*;b)){I]*BD- ".{0xDѵ>r1rd7 %̮*y4 Ss;F0G{v+]\2: {lKB-d?Ad>H sK ݿi:/,5R%1!9z b!|ŌC  !^Z^]MA f q&(P͒xE_?;4Xټ wZ@w圍!(O!}Ӕ>at#i9JZ$ahTNiKXcR JbSшJĄ) TڥCTQ-.ROM:VmOCpX&~Ojt<$l3| 9/\~9G]H> =kkg>L;z%P5$";F;^ Fw-T ʄ`ߐQSWF8El։+HEe:>fL QڌVCHiT{Ip=[HPx򎱃y=FGxv>fb{Ӂ@f٨4U'_ fLəNOo۬[]O^),y#W>8bk\؝hs@;&7WqUoPݧY~a$o%X%1aK-׷]Q 8=}w\Cw9v!_){dh"f_EWa#DyF/0 wB Nۗ}tɴ,Y^8‘b0NsqD+e.{+_6z }GX, &!OGr-Ȱ0hr3l jÕ,/tѝE7֧36`#1wbTvݙ0x/@>cSlX=Y\lҦxzYe")^TyWlhq.Mqܹ E{&*\7E .=$(hL)4/)M7`;#n"ݬ%ajuKXaA7{x;*,}`@`:8E%[p>oC:+ׅ21GLVF%hr7"Ȟ,^ym{(KfzLo˸wѰޟ춎^S YA[Bi0}] &gw-p& tHe=h0+`Q 1!$>7AYM#g1H@PmzD隠qB1@Kٸ?IpULE#~!ڽ+̣f< 7w}9[},Pk*դjf ڜτF [ɐal!} qiSh)ZQ^jM BUrFX]@?'rt8i)QƂOǬ$҄ZJe%10[vZfS=<:+$yd_㱖zi}wv\mEg4j{V!x.m2(\5"YbvhXAvV{x3léNw~73[ydm &z^r)>!* =!c|{<>i@E&oPP:H+ 1dϪAEr!w5[eFÉfYå 29ˏZߵIуc?#fP+f=QfҮ Cͩr2 ptфk~Ks61«$crYbkqS;*&ψ &_<^r\< Ew;l"r{- )TCʍ֥]і-\AZq.5"wlЄJΡzƤl͍I:y``+OB33 1!A"s-jnTj^G,Sqd'='>vu5Ľ uN}xw4>NBf 3sy\ b$<>}dxaOABPzjGk)?NV걣 A}ǩǠI;!5BsR@"PFL?@ hXLxyN-iڏ=8yq9XRu(n8Wu'3;6ҬhY>zBb.&2+$S&H`T HG$3H<4gee/ȆgVKQT6A\Sybqru2OP=a<\5xҜ,aVǝgnOj.4JnBײpo $,X2CyYvw Z]ET3woZugX^ԛ<`*&zaK'FS#(,ܿ/Ty(jeդewKEQow)`LuCjǶeQZQK]ijUD0x4'}ܾP}ǺOvi5G/O4 ftL+Ji݃;5xt*,3۪(e5;=pzl ]FZB,5ۚW!ҤP914֟8o/?PWB~‰o6yf-T̃}stv()QgYYi1$ N1!@i>,)/LT Ƨa20Ng|Aw*?xIg 4`w 00g⛇8N'‡{}wuCBtKJD)[};')W{ËwX*DUT!V}5#U;FcxH$.9@IwHKhڞ879̿6 (MHyZϚZzzyU?q]}=%*vh| ,a:a: /'4^ H|TSYZ@}dABKDZ( !\M[KS^ׂm.dƔwK@V?o cE߫l"ÔyEuzlV$L [V7-|CEg\ܦd ^$d%}}u#%8*@Y0Wrg2}EVtn(w`J⮾)NJ-9o¢W 3 =أbjc湠*+Εʓ3 {A;[9ܧ\+in.yeq% 4pt#pٽ|ѳAJ#9+7X:ݥVΥFxObHzR/kvWhxF};N*RI'? ᘴ9!=-FA12D͏BYpD`LVkhP(a07s;ѯ^X25ۉ]*Tv_wva(;V{Ӱ.Ol;zBHȹ>C2TfQBs3mj3i&HRN{z@N9+cgϖHX&'۝kA] vblDĈ ڤHm:ιzI]6\հјQJ M@Ri̱5(ʽ 1N <,g$^k *S{+Pķ|/Mx7²qYF 4O\;o𧎾lJbWuv9П2G 0 }Oxܱ0=D^Jޜ.5;ZhhM.59=9 Rah4zxupxi {_V B՛Ԯ6tPf.%%6wgVgc~=sIAԮ ZvLsLĔ)@L3Gp}"LH/|(N@Akf %C~pXe1g;JKO@W vWrU~t zg 渠qBj B) iFӈAU½ W= suCj)?K?23DJ(4씕t骚W JvbzIl` jXV_d^ _#8jHs\#Ay젨.)9a?L' %/pp:o <#eHNqJqۮJ%ZJ!m}'~3'{&ߌ o:cI@_~lxә~$:hȽf`~A&tvah=׬ޕiZs?M ٕ\V i JZ?~pTNQt dxcqܙ~t_H`BA]_z ]#+1ZHN2MYDuJ](wVZ +uVT 4^ɜIEe c?u=I똒HrS\2pkf}7[v+k%C0 עXmqOii\I&f9Xz"cP;Vp|f}) yZ_u@q9Z0E7v#^~ @Bm&xD#lWrANLeGzV*zMu P'UKNY'1#V-C,X`^1ꑽJ:hqc1{q2M%e}TՉQ+Mh徠)iZ(DӢӱx9oTbP \$M9&M#>[Sm]hZz/Źl|.>DM$4CPK#͋-I %)bke59 U9%= 1=t8 R;T$Cz5WQn1D|y"~p^.g*'P5E BTw?r#Cl3<ۋ׸}A|`#= B2Ed?Gk]yuZvPtm[*cWƭj\H mm =[ ҆R ?ܛNӧ9_W6$Ďvtμ%N'Ӝ7vVMd鮈Z>d")#FBx4HϾxs)nR×XnH_!Q66_7}Pe7;ZaumpVԳɬODYzYzE£'9Z[4͐\hgD'IPjwY7ؒzF _~!!҉O# 0# sk1ui.CCNk+fhx͌'4ay~2ngǯG'=7YqnTҾ/<[Q^gor҇ N1.K'm^oLNKiAꡂTԾd^x(o _aۖXi@^iw-K/V$!i?>+~EQl.,yӳ~x'ZZYs5e.X el(_cXyQ;;;!~WS Z_Yw2;EfB@%@BT_R}#Q 7>S Dy.@:'{N,&{H ]E\2aWm엙~VMU/ ^-$Sè8`E3ەi&!B[U۪㙑 6..; !-F}u텻yY-%ntBYdꄷ߅:?lҭI %ףv` ]`̫w8`|PD |ctAy\-Lj:M y{PطOfPӘ e bYq* 캕_&mЕZ鿬Y@U[w8ٽd/BS_P'_g#Zӕ6v䮖-2~`q@ .],p5[b0aGVRMԻ>efP nJHU8׹_ |Zvtc K/|̚OS$Ncm5'Of++1 ʿXT`UuФ9wڷ>9]*\n`pR1'q&q{/o_B2?TlTUdW=>֍B+sUޡp_\*Zgφ7c`b` e>/!e5taxn'7486{e3m՚0Dzx_X.4jAف< (]H]Bp2\&Zb ؅#G u|_fa[OKB?Q9 C2Zwj10>0T`ɞz,lac2HR f2JJi^^,6kB2bTAZ@p<˙QH.I[Afe@,_oc9"qTF3J\تs4/].a~ϑ^N =7QҘpzٜȟ?_ҫT1dA@k7z`L.$8$ ݭqmLجf{TpVC)Q!-Il8 e4'ΙM(Dtm;#ZX5׶q.bDjX*ԉgjQHjͅ ߳$w/חnZ[=\~yJ~IPoF}qG"yOkhWaj,tOiJo(ŵtn}(傅hUxIk%Mi2]\A40$؃E 858M>lY«ABg·kܦlf Rdmkhg_ ̑m膴!!I;hIt'q~IWp~L㎘2v^UQyE('bL6Uh7 gOMKU00汖Vh;[--iN^ o8Jm:YaTWelw@OO5ˉT WMyJ,eZ/RɅTs♔3? O:v26e" Bo1Z꼥]q݃Y!Lv;›)02@ pCY>pcJO{)P*巜B}5^p }mZDGkzV[*Y~!j9 VPqRHnIfv C&R'' ۉ+XglPGF{(WS)Xxң<ԗE *؅TB}&.vAMK7'P(4vzb/ =)Ct?BLѹ׈w$RADSj;01M Mr'W< {u@8Ltƃ;QMaԕT ǾtABkCY_;uh"6JzDhxem YK0Lͮ{xϟaqM.8 gL Kt冧Q$ oi2P9UvXYhr\I_˖܂mjeVґ{Ġo ؁mŘB'ޫq )̄<I7Wz ė0A 0}ZL LOb ==6O'iOV$g$X9!x1+6ȫظ;ͻ7j-z(M- 8n[oT`UUYnTLĖ7]x!(`t;DM<^h >S+..9E0ؠ,{f`J[q0ZI9-(Fpm޳m۶m۶m۶m۶{ߒ|L4L[@x hG=jKP$LR34UcBe]h6A+3TG aqaWР~wLզho1\ߍx΃V#95D ‹GϵidA"0׷ؖW;$LMeZ~mJFڒbYq_'mi%~}Vu]# =H'ą$ۆGID,2 A?rȖ?~u/r-G! nY\Vh) >/d]0^,)<;9g4xge];͠4!Wabyљ]qwxXFy3*4h/BD. =SLc/*F01&H:e4p@jy ިiȋ.ŏ܎L=h*jb(㈎W&:W D.s |Cק:ƶ^TTq^߫ihICE`&Mz3K3T71C))H!:|Di*.(I^-a}Cfn?yLU)SĨ~$M<  D0ͿQe/󬟨Dz%:iC`<~ǺӍJM'2wn>}#v.qHɡMsIΆrĢR_2i-9 }bmeo$3؜ ׄDxӉI$LfKwb; m{-[+I`=Wt|>j@O_7O64sV^x^>N%aŻ&2dvIτ,re%J㳬ީܘ{xg3y6f\%}[Gt9O:C1$&/=M'tj|0d$irΙ1UKx TCpj=OɖDN"Ş C@9SeR~ZI׸C 9aͮ|6QR`r;Qvzdj@#Uh5fQ28" !HQ0"/,lU [Ψ1Z3ǣB4?{%}[JeM+Vߌ4˯kct&^*6w矱NEȨaU㱯ù-1CZ K ab,BO;2M4s^dzdXkT`3BuYS79႖TYU+ʵevmeϹْWL)ƸwYB*rƤD%)ΚYajT *DyjXb;o(D\ӅLe}1Ufw0eqܡ 4WyAUͳ W%N9nj[~z^½sjh-_ŸLO=Kej+Q/I 'Z^*$95 <\=NJ241.r(FM [u=ڗs vpO:JKi*ضoTc/K.JlSHS hoR{SK>'A<0-`Ѱ;Wp[ - Y2n>ONZ@]E$c%QbGԥ *go`)g[f5jKRSr}7i5 O>/U<.&8n$TTb?2#dY9cͽҡ$ua^c(>b\˞ { q!ᦼ?'so+`T'_Fvas#=#k`N5ZosFm{56nTvudR61Y hM% NsWgԂ-OF`:؃c9(d~- -h~_ rpӭG'B.7Fԃ*pinK/G wXԀipK7[V[cy([!|܂ -*w4:ϭR:Hsez&tՄ ><$ܾ˸NnZU3z)?_dʜxHPUOH/4yig7t`* L> ix]Ca=.8x^wb,1AsLQ3_˂Ѣw gȃ=2.Sa LR돀;n,^]GX2mǔ޸u!j [wji35P8b%T{@5g- r4n[f[:! ɿ|ǠgӀ#tϚ[-@Xt\hsf =xagiÐ 6*Ym@6w0׺Hirъ!8 {{:6IǾ%VA)q]FU! L!5sH'J=џBDP!N.:~ q-u:IeQ#uwmPTȢ޺˭WƃC%hbfc:˾ V=iW*rnUcZg=s+{!4~V WrNer W.M2Bz];O~43#(~Q6Z֭h+SͰ#}dJTY E H,ޡbw"I9akBT:En ƿv0fSGo!rqf?DlZ'cUuwl{n쨚"}dQ F^z0`pE@ hv{/4ZNr-VM=qP-6l-/ >P-&40$TO,aȾIGQx7ZY>C<9D.r"MoB*A9+(p4S<[QJke 2KwF!W-/8J`~Yl_05S1wB 4VpOi\=_\[K/tm/JwBjȝpǯ3GL@`իɐPeQyY~76'NJfH:CuRƥlـI3v(,|DdAWO׸%d㐷[1S;X[[#ڔH§7֮/H2|DMOx`J&3ODlcU 0\e&O \Я|)*eb/fI`YznyK[qN5ssTSU_ஐFWD ˿U &Z7 Kg3 *ަ1?/6Rnc7IT:q[q^qsd3߬7Tda h~5/>*R߳*VJ'1"zZt|oɣq0i1D2CoݖH J/XVovi"<|b<Jb~3XUe4ji`ŎBzH["IKlD:}+c %!b'tiIZn3$Y.6 (]^+̉x KaJpr͜qAdסEHԨ`:~ GUdB+@^C%g.HI۟|h=pϜL=drr I Cʒrw F_5SZP1tqlݡHKw%ɹ=&3DlW–{e@=rx?OfG= Qu2䘑Vī' %O=4-[T ?w^0Z = K+MCahia;:x)W.ɂrT$ׅ@dFh;_xC}REtE{2>=͕)?yWGD/tݿon5N44fK r1c6fv^v 󡭱6Ae# X (m9iĩGz݃PDžwY=bɾRELP>Nk`@3{֙!uANɧ"WzfLDdn3)٘R|[qPIٛ[_miJPF>4w\4cEPs!DթaA#!-VA i\D;_Q|R!!!T|NHk`+A #sa2 c<BLv#]Wŝ@JL R }h(+=FkJVIdP]hg%9#toEH)Et\TpM-$Nu1'잒k}UNր5AUǏY:'~ܨՓmaha.QX0) 4bo:ryeof%:)"9gZ[@Z}-`4W~tlbR{+؏S{sat)eAv /c&xgx1xh H/|C-I [ޠbͦN~ePU{<,; /$9C] {qdoB7L#YIXd}gYZC?vwU_P 8ݖLp3q @?h$ٓV$h^+a =`AgS]zPۨ~"m;]MO_)D1vxO!:2ʅb8\z/>3y'@ p&& 2jLڍ ;_0y0 .s*u;V]B Ѯh,Pnd2< 6]KAtiXp^E ut$a)栀u\&:fjs[ܰ('CPGS 3%)]rNg=K@$ib߈htTQQۨ$bMVs$thCbO^s#maݫK(W!.t́'fF?CPܢlt'٩%Q~%/vj8lUnlXʩ(< /mlŹ;}HyX唎H@U=7rP˚w(:I_ӓcC< $ph,ؘjYHb `v]Nb~E&%QOdmfiAhv쩜:m-ENġ G֊XcRivɲ[<ͤqѩ@L U$hVXRa8V^wh]* J3[ѨfzAfhR;3@g ,v燢m93U$UDZQ _2q4ݿeTq"5` v9FAxM&Kč1оՈ7[A>$=0Ɂ! z SAQ(<ZڪC|ЬxѪH}^6 #t.>@q7˘/Y=WG$wzZpys_^5mqVTǏhUrN tiJ6^*:XtyWa.+)ɷ1O Ke[b:w4nꄹT >CImB<1q̀v\,kGR^D,boc-~[J)L3P*ZlfWөf7[֩]" M@[neYnXBq׀ wFGa0XJ7ACiov6pXIezm0F?x9ˆW4=3M6=lLv 3`>PwqK]qP(UHN ^M U„r3=K:en!*Q'Hw3"[=ʉ+v4[\^3`9i\N)cuo& q&|+v-e>dե qÄsPjX$@Y,yRTL2_MZ)/!W!,΁$ДA-`bub 7h Hݥ/-+"3T14{yo:#"sD;* Yc*+G1)|2oBe`DrsAGHi{VeţOkȋN\<YM[k/yvsj6X&8ș'& GPBNoiːQ߱&i5H3xUFRęGTr ZU)>hD~}B_J  Kӫhٕh'󇝏05' ׄ Dt0[ qMi#dhx~Mj Pxn9x  3 81V[Br&["/RAtlQ)9 6[6gYn.(d@8CFb^g8]F^(,thP-}[NgTЫzEj4LΧl,>轝MzLjS0kUD]~TK\ca>~_քvÌT&EVFS+LėhbSS׫)HGD+@-+MD'utã_Mgf=Թzm )˂J!")>mTp^_~[`FJ'̙r|丄cQ4sWBqZAkԫ/ %'!8{^O sOxqZǿNs %R'rIΎn0`^%tlsWxt j`RIc?~7%۾thq8Xo)UW{eNӫԀZ%1tT#9A,m*g񾧹("KX驓!A Gյ\iqc\ubЌP c]} 4o4 4\owӴHn1Χv2:!;8A B,Ǘtkbxt?Fm^0Ydtc{R"5AɌ6qS9!~쟎.>׾u&f0<R%Bn؈v. &dJN?ҭ9MŚ$0I.zo qyVFqx_L2oj4+{`i_ bF'="${JR ݿkҕ޷2R,J>2}궥D2׹OhӴGK̗E#Lmʍ6>5[c;k5m$I-=|_7|T{"g_jt<d;#!2㤰9G1ZC~8`zRKjHWAVC++UL&mH-/̌L愳x|W `#S:qM4DܦQ\/*y5 Iն._:l qĤ|#f a ~0(ѫ0(pB]Ht>jY r#ca "$%[ X*u.z,W,d~f ڟ6UR,S 8#%bDY˹"NI2~A܏bw`DNn >,Fpۣ#;f ZfoҬ"uۧ^y{:;ySA4=I"_?wooQiih]+?Hxѕ<<&Ўi:)SG03;F wr0Dְ)mW OЏF˨H5s 矉_ru~Xi1$핑&5J+&bv`OPl5B<.}@Κ fDC9N8)+ĖΥA`Ϧ03R{4G dtdGN%R$A+h bl1<\b3(waBZY- +w@_=rw~Xu8aUoѲ8귁P{`E Ԏ̹b۷¸aĤ/LMM#E®z`u Ӕċ0<{Q:r:֎e ͲR>< k_9rt%ڊ|+h:b u!rnP$cH=v% Jq uCk nO~Z/*fH''Vo3v}J2^t}3 n}L i$ 0.414/ّ`UQ A `k9< O,@sp{RcKa>yOd?[F-% `v9>bR1]ѵ}@_[a׆ \7h _*O?wUW>cP:;gIұ I6 gO]SN ZShcFxTΜЁ["iK2vDxx P;?Hℑs4?͕4(-FdkTj'̉{T\ꏏ \`FH&a6lGrV4.x3Y\(RC(s<ׂ%1d0a\fKTZzX-PjEJI|8T:>@cuSd ⑯G\}ej@5Vq kӉ0W fw⯟Q@X`Qt, ٜW~7±oq*cD3q:JC5&qcmJ/bEe}>ǥ,B.<{ۣdw B+W$#Sq~dҽdcH<Ы&L2X*RxX(=q󑘹\,zYa\9/uWj{h ~fNGjsKRJR"rx[s~Z)x{ vA/Wa0Jk IB7BPN0xn'Q 喪Ip>M^&K`1{O9I"̶uz­7uQ q %.8myL| . ާ}i[ /f۩zĐs:u@+oz옅I-P4IM0[~`xxՂINlkf F5isErR8娸н%@x̡gHI˿bSîEFd=o!CUZSd4յ!wEj4Nc둮yDcSw9شÎXʍ0nk!|>,IQ'G95Y w%hq[l<|Lѽ^ԫ((s`&} <ϲkY>ڙQ u`B`k vg,B3u9E(k |F@uK"dYpZ^Œ* '>sNjkwE-8-sPBׅPdX`C ,w#a.?󤬃 ] w-yzP } Uqk+8Dʂ i7aŏ>h4}uiר8XCqw)hFLsK԰\'JO$Yg8@3Fhe$ qT)(r̥PH=ghZG!ZE[qh?<> :ﮖ :u3q(0k^`?< Օ YG9ı*oCΠXG OV{i,8>tebouPLfJ }"6rtyhrNh*7kU,||OMnqx "#d8[ Gz~Ry[(j cJy]RC\_X ]+`@Cpm,\6ײ^7l@xj&LͱhΟyU?,z_yrz`w}3" hڻz)BNE}N d'b4(KX˝nc5 6[ RO^ TK纡^D Wʤy $q ƚAE~}!O ]fc;Ha)ψH)ziy3~~Ҁl&A `lBr2> \s/.#๒SDVo9$ѵ d^LIooSj0D`Tg5atGBhX|:TXugA5vP!3'ke"b6bgB)kyڎiYݿ2)?~:,>ʭ]屆I ףK`Y7`V'0.r6f@$}'Fz 4QFJ]uJ.@A2X j(YuƦߣS:W/ej6N<ڐF>Y"ݶ0H×ِ=ZQtCe%B"E 1Q6G-#6zes1@ ortVuQ쳸f%"p`5xiZRwɕ&F}'W5peC!16&`_@~yf؜@dmeU*.T[qhm"쒲Z2c܏ߚc>eߣ;jN`6- GUˢSDpAiJRVf06QD"H d{43 ,]6"϶iMzXX9T ͔ϧB9$ ՞3DAsZPVB>1f-ϣwz <UFB)gF8~j7HsL߆> ܓE([Ff ,BA̠V_C߶824hvB茹njFؓ ޥF~=yPRA4y4K~|G@O4? 1 vgĜmma`}(E(g>oek}Țo݆dxɐ9P1 leA)Re~NA X$_$M7|hfՑ(EUh;:$+*þQٶCrrNE K8,ǯV`=d~Nֶ +ubFQs4$t6v2?vW%A_3MA>ra s˜yZx@O vlx HBjx 6R<ɚ`'(3PE 7EHk0ѽTR>99;f'wV}wA2)lM5X=\* Zԫo#zRyW5ANY&~)-"_`tģ J*ә˵y=edaǓ@@7~ɤ 4kۉhan@zRŒ.iu06<^rQF=b@3I^ >ok`SNEWnT Vq=`?71˝.1`"4ﲧ|eiNY%g·YSJ-[?Ock }"蓠AC4W1ֱBQamH\omDz:}Z33Mv5$wG ބfMEup&mx *(#ZMjz%בgC`{*ЯOp$JP5C0y-4MIFsO2gAj-qW}$=d$٦CrRߝd7ˮ8 HAiNZ,tes*r %X+۴8ch&6R9K: X*0II3ilhy]Nˎ 8Q,htqZ*ĺ=&VaE#(bW] _ojr&\HR+%^Np,WcڅC`BsO߭ l:cD-[HzXQgЮ @@aM_nֵ1ť_ZTZ9ZoX\zCቿ)W3%EF-a W J5pMnXt}wÞ (|C3dtjiY/EV2\) )W OkBY9m^ST䢆O(pMBV9!h]ʀ:+ʦS !*;9VװcHSȚΛ0|-AR#P6oZ> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 73 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5&z& h<ϯK)ٔ?pݝ2ZkXvm)85];B7gѻ9x~;a`>W'?y:o&> ݋L'/㫃Bnz_7_t|~;:ذƦoiܰ^\0zu\7g"NFsu_E07H6!L@@B@q\s *Tg ]8 i/nTvc-+>c_ZZ~Z83z3[:ޭ ߬Lg3t3-g B|B|\3gg|2?z)BXIAup*^+&#sU-'H8qɼe5A78{Y-7^=!U endstream endobj 75 0 obj << /Length 868 /Filter /FlateDecode >> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5f6ӓ09]nD#y~/XOϦӾZkNTĩ(wA-&T9ˈ;n>yx#7ahݰ^g=a}9_(,u;_r985wѩƆ56}NMM₹ 5E9qv7rk u/A )`JbD>`2$`TY'``9&*8W`TR&4`(ZsJ5RH+h3}76Xš60aG+gıXF888sέ-.x]/+5MĹPN<1\?ǘt1:˿#7^YH{upQF^odž1BЖEQ?1^׆ƨqА.yaf%+CsV2GYŘS&ƞjЙ??grCOe zYJ|֟uМ8gΈrY}Ŋъ1LkYҊX׊ӊѻߊigngfg/>Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h. ljeuȢn( endstream endobj 76 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 77 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 78 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 79 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 80 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.R!W3njNylܬ;WWМ~8׺2{SlݤMƓ7}zn݅9p/]A:fzfэ4RS`)?>RTO)s}`ݷp@c`."w( 3&TmL2ws!yva`TG?y7{֍]? F`RޗS/~g> ilXc3t5n/.XjR˺^o3L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}TMo0+J6*ħöUSEj9߯ IVcf͏睟ݛ{)^؝}]u:vzyu|CW$nmmΑmq5)M{`qjS5MJJWG> endobj 10 0 obj << /Type /ObjStm /N 54 /First 424 /Length 3089 /Filter /FlateDecode >> stream xZ[o~ׯ9(b.$͍[+Ml'iA7Yr$9M;Z5!=2FJE%H@P) '/wB9a]* N=D K+NF V렀z%,S_kSaoeB+ ;.8Ti#,tiW  >sI-F0IDDT >V13jYgp36' +[P|g^X"@T dv|.B eFݿߓG_/k!|4|& 'jzRѯO/]>)4矉.p jY]rMEh]D= 䰞w ]!/squv[QY #RL]uČ 5EHs?Zi=dtFd1nm:I-w;K8 !mȱ#Dlr&dŽye?cUFar@;6nC3OܥΨrv<Q2(&GBU]FP=vѤhNGdEm8a([[+B>"v%5g=l-l㔁m50?ɀk<:RW2j>s0M-f*s䄻 p/+)֐PHyl@ A 4DQN2R83NٷU $R]Xh-e17e|eojDI`9js74npgp}0j!-Ϡ E@;Z)LJ]/!Hr`f*h?zg^cуJvY)@ VaB RSQ^hZ@ap3/˔産s@R:mhIw)STHT𒥲(}RT_pvЮ8A}/x5V*Rs!oqTZJ%bw/ܓ}ٗw Py(+Zoe= Ƨ=u2M@/.[h%|o(3jJ.Oн|C ҥF9Ees89&5Mp _o_A5A ')cG9 FY=|mohW/ / Z_Ks3[N:צƲ\ƾ5udr:Q> (Nj*{R SaՇZpi@n2'^ x,Cd0PS`\xdFŒcPxɆlleu%/LEԥ 頕SEr/#O"J[tj˃y|>/} *;^=jzsl|i^Ngsa(w=?V!׼&/`P"9$ qE*06-1atw+Uyt)Y _sjoOJh7{[0u$,ͧ_Jnm.aԖЫU Q0.\EN ZH`尹ݸp$TKʝ#H1%aaeis  ӝ1V c 9% H1vv BTr*+Zo8+ <96C1B059638E589BD76BBB5B52F4B6E2>] /Length 258 /Filter /FlateDecode >> stream x-̻/Q9*Zֽ.Qf0ZF]lth VD$K1$ > stream xڍˎ6Q,E|n)rJKdk+%WH+ynO$⼥_Tz%HD+HleD,]m?+yu ʊֶ]֡4A}OyWU <Q$y8ʔZFZb=|rW\:JD*R&ԏk+nJtRoxKÂ*2# #*TI*={LYؤAN֮mj/'8𮲂 CSok[ $pzQ5j#$=ݩbOKZ`^em5]8([u$my,U}'k ؠu}<{wL.v)29X0Yy'TxL=E-#ұr[5ZFX2BA~4u^-3] uBJIE4'z- 7{tMS70%oZ 9>JuQkH{%9 Z Uh >cY}Xa+rx0:.g0~)w_ceUKmӺ)T8o|!4!ɍ ؖs7_p1AߺID QC#fM\3Vҟ-|WC9Ax0UއKv5"?anjKE ]u[vgG/CLv%sY~0wl&傖䃦{% !T\[]\2*bqK< y.-%#'DZ$%\JT[޶  */.X2lݿ0"ѡk=PL" u6[N&-ȨJӵhї',B'"f:9_8Zv\y᫼JG]_++2>\%ղ(G lʫ9^JՓKp_۠;`w/߿%&HJnoPW$z~ڠ@y@zhvuGiƃņ4Rs;cy4x&YB[$ 2Y/7D/HthZ -5Cs 4ptq]cIDz;UYA<孑9FNm!lq4#Rm"9&{tY$R3^Q/H &$ڼ#4mP+և_nJod8н2O FR+ 6"Ϛ!r< &bCq鿹ͮDR>Ēy|Of,kKsB8ϟ!+WҚ!iRNJ^g6㗼ŴM g~a|(=~PBMveE)c_y=d:uw,cn#AII8w0YhnYnKDeKN8E fLpG`.=!&IIv' 4㗔$fMtjqc[綕vĸC ^rL7&:8HG%ߔv#L, :7ƶ#쩈IN#fk9xlT4{j5ZEjc??UM endstream endobj 15 0 obj << /Length 1505 /Filter /FlateDecode >> stream xڭWmo6_oӘDI $%mo(-QVC߾;iˉ>$"֯EƲ$LrpD.XNjuû\04c_oW{xW|7ytu^.G -\UDXAJɺ~b'8*kIh.y{Em@ iK0'Bv8B ߩ)*N>XVz9(4$+y> /I 7~=*}zïWzsW1ZSeYjM B?=JU#E #\W}Dd=Z_zt/?\-WA,"3D| |_pb/Y\Pl _Rh^2/aA8a8.WխVJFG-G'8P_0gGQ.$v $<+S:7; V]֕lzOYYwc"dq,^HŸfu%}+ |w}ҦXR]3S!|Z"EF))ZGe=6a ^^K+5m Ww8!4]#+l+Ei-a}zJt>`9j:X0;#6:B1uC|ÝD6ZGU>S ˶o&{D`ۮw"xDF@Bɏ(#JnQr;Yr؅iۛì 5Lw(5k(4 sUo)McԞ .[H7A2 t!뜓S}A&eŸQnFS'9{Ȧ훫ePFЃ0feAES:$L#mvjRTA =SOa0QXtL{< ~?V]a>/v73&^ 0ٛ%6@) M4jnj40- =cB6KvWWV+ݻ\sj aDۨNQs$ S6W$еV\lISON9Ӳ'?>HaxTy1!"~6 wx:-x:2FXju咂I8 zܓ5֙1OZ;^o5;~##L&wb0E#I䬱 9x=;2߶#kvKds֊.]u,MOƅ\B@LΣԎ3aC5*&y #~~<+Iwq幂Gԭ2?aK23Jd N0(8iD;NMZ5&L+[%0NU?{ tn9'v"E#Nel׍U܍[GCIE񽒅|XEU OŊ5fT}u~4 endstream endobj 19 0 obj << /Length 1199 /Filter /FlateDecode >> stream xڵVKo6W{Y9"%D]_@Zr>dKXp87Ù4p%! G104Bħi6Ù.$jB.1ݛxY#B OzN>9k)F3+s& #9+~㿦\$QB-4 Ʈ1Ls13GEנbƍof~||P\px +b1.%XAV ٵZ[Wn3.;BYˊu~m6\,Lw:@hVž &5F|֍Nۿ&Eq:*jOpbr&p*֟*nޢcVy~\xG; 0j]86 L @Չ(S!CtRjHQ|^jmk{]6;i8HP䅺S.׻ԁ/"--Ior02A%+1 &,|yuK]Q_7ݦ3{oz^p/;Q+B{6fmŃy!+^K=,WQV.ZJb5X [qcߜ{BD}Y/-k,[ӬE0 L-oov3w[tFM+cTوfij~P @y^4xOiY+ O"W"#z.UA2lF3wo atv] ?w8o endstream endobj 23 0 obj << /Length 1174 /Filter /FlateDecode >> stream xVmo6_a"'R,u$@-61x@߾;D >ؤǻxND,,Vr$ gdMp )ʩ"Ɲ韋$G)IBS/dc%fJ )ub+nWf~עQ7?O/]q&AhR YtfŎk8uf~F_Ƴԍ*DS՗͏HrO2պd}`fl0=Fp !xc DQ66&=oN(փ̭7c|l^eS/bIbHSٻ1nphس =c9ǘ˱;yZUu˅27uUwFwtk932汽+ͯa6GeY|ʘڦCrYvhu4ᶇ[JJ6DQ4ᵩҘk2b`\uUac5xAfn~Py=B'SҘ3@ܲb, {\|!o!g`a$~קyVlM+%݃sMǀrO"K{mţLM魬؊ZlKZV*DՈ7,-7 n{^a]U+3( 6.jUEXXK}i훲I|5p w xb*oZ6ob1EʳEɣj68WH8pvEU-1:.kEόZb puK+7sFئ'ͦ<IAa`=fDfDbѦ"L4F/Sb]VPbjYn2'7lC:.S>6iB7:oU'$*9Z,-ʨV2pOvt49s[/UY={Kh׹쵈T2T29s=e嚡Kj="m$nZ&#$: E=pɷ[jKP]G} (lvU}gqݩ=Dz6c]C<2u.a(/F^OQ;a8qij?#/ endstream endobj 26 0 obj << /Length 743 /Filter /FlateDecode >> stream xUN0}+FHjUAj"Q!TS[ j.4v@+!㌓4z<3xyq"M#/E}ߍĊZ҈sBmЋyib레c> ؇%c0tA=@!Mٖ%kV:=Lٲ(/28_z@dv{t5`^7e[0L`1\erwT5Mhmg +P[ !UKWun!@ # > @7IqWRAgLPPoQ){-efv^<د$q4f7\\=4kAq^XwT5p)IӘL@M}؛wt"ǣQxxqѷKexWTK j,4zl8c;3H؊Ь9jAjAþz7_hL`2ý1J苐O0VBF-y?KJ)qY)B)2{>HBhGs\/=yV7Zii)s(u( uBy0[ endstream endobj 38 0 obj << /Length1 1407 /Length2 6415 /Length3 0 /Length 7374 /Filter /FlateDecode >> stream xڍwT6t*R%*pIh{BPD:HwP.Mt Eҋ˹k}Z;3̞yzq[ϐ_i SA"`@Q[[ @B OaCcH 0S`q@m$E%$@ $7(AvmÐq("Q^h#ߏ.(7,.~W:@C!6sŭ P8 \RX,Jbhn>0a`hw+hd#G8wia!0;[`EZ|? UOBpįdtEA^ph `=|'A! :"&3 ep۬SDX h^?@z |;c=Dp0u?> '$&`PGP_AO7n?Ǎp?d>; E?g C[A87;4` 0;$_G T40RWS3 HO _Pp~?rHb?m=!pYL. o[D@P_)?2;Ry+!p?ubq2FĀo)vavUBprG8( 1*pO uM~㟂s#`zH +Sw`p`p:ȟ6 '"~OPDA!^dY"0Nv0_H,.`DG,w&))ܒ(EFSu9rPU!كLFhN{gUY=f~5}?XDdєj?!KZ蟣f}= K,Ϣ$L\i2R,[UZmi5:ۖR:9ڤǀ?{R2Qvyl}2GLY5C5fƻF~ 寪4Ue^-?'.s\㦂bF2%s!-fBB O}}/쵷+pθUF#bibj|oꠙ1ˇ˖Z}bޭ"_b[Q! -w^̮tG*O+)x~Hي'D^s}!Cy>ӻ!i2 _fLKnP]lZ_#8B(<$hR=5g4R>|e=#_]dePͻz%jsn5n~RhTL9-"rNw37)YL%73fآG ĭVt ~ݏNFϞ}'ۖ6W-VSQSw31"ڹK'ylpg5\%$)BQo$a*\dO~$3ĢdXWS뒘._)/{x?Ju&UpV\{3ZvR?4QɃġ@eǝkjntj%7?K4N:^h#F/aƽ?0WrBlþlJufy T c\}P_oD;@M|){QOVR/ 55`-msr^H N_= k 2,7e[L64o3;CB 3hҧyiƸ9Z?Jv{VѠEav 㭼m.25naB=a##[-?̰3g#i}'E~DeH{blM'X7pSGbPp3A1#zQڵB?v#3cEwĐbp2)CQ,ޥ{mz^~ 65w̽qkuC,E1T[e dUG=:% HZ_r{=҂539gF`([c? Hn)?'(?o|p}#,л-m-]AH4^\ II00ʜ7: ~( %f$sU /rm~S9vn}ٜכ\RVk܂u_SZ:iH `J/b;cQ*E%˟{O|ʹj׮#yg5ӟh$z~QQz@E_I&WQNţ>v' 9M%<֗gbQN/:{7=xEƳ6o-N~O,^cwNneɔ/H}kR+۷ޝIV #Jg)d~}2N)cW~ǽxsHhvaqx:>W̔d=_kDӗV?lq;Wf7Il0V7=U/H(t²Du\Q3k}O f2:ا}p :ռH‡R ݉Sp ;7V/ϸnmx i㞴܂n2~BqQfSCT3ѓ~6*iKU)jJR*ù#.{IYy(2z_ B, PmKжBѭCʎ7CK6+rѷ3rZtK,gJʿx^K+0&#_~Yl&.PWkl)̈́#S!uDʖA%tmD>L9lcFohv\C?WӜM_B^yI: O[QMR~k6J5 Qu濎/y3NDmJQY/42 0Jht%[p.Eq̋sҪt$sfc@%I@$a!fz&m=\ #[>mq]:XYP*Yd݋,D[ O='QBx?.w &)@ɓH6A&0XN(]Km{C1HAwa! ~^nhn~41 \i9&/,17B !O*V?،,&Ōsg!i3ۓTdD`Ʊ.IV4Z^JXN`U~G/ ICw>o\$7;K*wmZ V]9\AY̧d%=EaMuY Gw'js_Y\e&Ku7UL۱,>/[RDžM}ԯ 7Ե腁ڬUwmDz bO6lORs򛯐3DޒȾ:葷=C43=` I}IF4D; uM50߳}ʏ2ɯaFAƶuoq/_RIŒJ{FP|(^L:M_ bxlAeE'i1Ǣ$N 3+b!֔_%{)LwXM\zpS,QC ^LFP纗\cA@"P4$0;DIw;DsaG>ltvyB$ sWlle0*wkٓ\z?=wt~UzC3+s񿻚L.rke:D?rVSvpU- =^,5`n-XBj{TK*qC "1PYt.E$|q=`diW{%뙬RG3|ZTWC댮R罹Ϲd:e 7^BA`BLbTǖt Pѽbf.vcVqX S/6: 4TսHxGSū0u֞P?F=+'R~|6E􁨷V,nbeF^=7QV}m19 i\ڄ~dLD=ج|ALS+v$r߻4 \ȴwjfmkǏIbD3[Zɜ[3+ϊdb"5)΄&,H=.f"긁- 21 cC&Jbϟ;T7>3;˾Ιe\0Fv ÂvU[}X@ȻMݵ+\2<çeE"[7vZ|D+< 4]_apCjUiBHb%2DDFvRWĐJ~fAp. +/jNٽMcEFZ%cĀm%S ;|gFc/ÿ&_QKC/My .U%_Sm"$QMOLaXL>c~*ڎT"|#hyϓs0BOE઻kfV RK? sܠ%uQN&?|6qXHy5qoN? v.dRqC"ɅWV-'%zgg»8x<3r}@E1k}.)&BFϮrhz3zI!%& !7zg7 /9Fk݉u||9fcV3xir,e07(Vr\{YwrVH D Fr؅L bFux7|Agj I8x:k5W;Iu;ߨ+w}֯SrB]O.׾|t%<\UQPM[Ck5!ŞG)2~D-O42*zx>'Z&\epv' nKoN;a} Dz7C+LmoxN39_[xHJbWV"TOߘtCԌ[B:wR/'4dQbpY>*+cROM endstream endobj 40 0 obj << /Length1 1400 /Length2 6204 /Length3 0 /Length 7157 /Filter /FlateDecode >> stream xڍt4ڶ%":5-{1 HD"JԄBAD ^훔s5ku=lJHG(@ e]#0 ,,*(,,BiCáԤfP7 T!h.h(I "rDdU/7) 3suCcq@Ғ%( A{#`Pt?Rȹў2BB~~~oA$U#7 u~6 A<;$L`޿H 8 F ({9`{Bu~;fAN'g"W0 A :h4?A8tx/8b~UJP0O7 EiSVC8 =<7Ta(vB7{C\`gM8x "`^>PM?.X:W(^MgzO/#AH'p6 @A_(F@COaNh CGka,@߿OXx9#WHln۔@0 ". ~L{gOpAҿŎ_r̥Ģ raqa'f@}_f_ 8`A@]͡I uxU A a`?vrzӟ,P7`W_6,bo,$XJ5'D%  .+A ,@  "hlm/pAHnTA|sǪiĤ!s,BQ_Ba %:u"F:FGU'}gs@ɵ+xKϠu4]\PWg=ZPq%&ɰ4>otsOһVf&s`p?iqfzH]3Ȧ>kQ׊|0d\*Mv7}hf31}-L|jǟbp`U%ViFh^լȣ"FF+f}> d-ϣX_?.*Z 3CT5vՃ37?S/&TأiKkew̫.Suf.ϙƥ]naՍA^S_> >x^sQe1B趚uL*sB Is!$J.w\aa+)fN-B+wg)G~Tz29=JUk+k1l9r0#3[L'Z8/>#OLSyi#~tYiCō8v刨Be;5N_rǣ9Ȭ^5x맨+>\j&qiQBW3?~*'wޘn\tj^30ED?\M>3myǎ*7oe iZ`ڷ/y#R Ȋ?L'p,ܛ0%zOb,u3tf@֕4@nwڴNpR|` ;%64rQwl,q9fTbL.I<{ﯞeh+2qV94mTG:%叅P^.QV)q䆸i'76Ub)䦜UEQ*H8RՍp5I=(#n۰>41t3i/N5;Xc1HCdd}˥ S.j<+GӦ;v3#gˆ++߾MU`tPؓL^#$~V'o 'b޻9 HP4U!@ 0 _sbᴙYeN?Ԭ~S ]]cWE}$f5xW^/E?M7fOE;b񑔅9`Z6f}%ӵj$YAhWGQ bF.NקчZ)>{E"- >)у_~MD^w);F%G)/מ9Wb.G=-?ND&~82lTSs{EYWtKn"-̄+Q,q&h <<=l l)A77='b4% n_)|V=D2kģƧf0y~$Bx׏@`}mizQ7;܉qx~%+i&Ie9@M$KLXYGhYC%NQPʙ9L˖}m U3jA% 2E&R6,ڛ9*]j#u쩇S\0%|$X]+,xAg+ֳqY `D;ҫju>eQtYJDB7iɗ@ F͔+3>!4n1gmO6X o|4H\CD޺,maf)oD1) T[Iu'A7O]%Doh@|Mh߾lUbYl*}@6h I^l(Jjf&;U3pD_P?c_'%U8 ;mI鋄zGpkIccq[*f(y1DDP(=eW3H(q-0JqJ0NF # ,6/᫧Z.)͡JRu9KFk<Wi,t?RRb )t͵Ryd4R=֍c>޻Ր- \0Ҿ}H3n4J*i % ܵ0?)cүz*Z8=s[z nLSd)l, e$=mr,IJ&Wh^O~HVd WY[7"j%Iwn TL _K''Y|%kKJ= mpĎT&ķ{t:9\,Ag1T:35bI?@/8BQJ[h>"fo)8⽿LqT J&#fSQa w"4zͲ,L ur6x!gsP=ʥ#N}5ý |.msʁ%__=!;XGLmn$&8A<7vHr Lb`l{{+c8Ryx(59ݗMx*թu}#0LoW*d'Yi[R*;[>Ӱa(&:%wl:Ic, PV"]C;a];e3xD.:*$@sRpŸ@1_S XLP+YwK38Jbhᒐ$946ybt\qX ,ݿgC,L}8tqQaS3}<7Hқ#:T5ܣ/xӢhO&. 6ɏf}^2oJ.%2. K"80աJ!{A GX+Y.qOgY0+ÈAdd8&wѽkN%Dt&9uvdn]+!gUՖ-vda#]mlq]XɮFw&kUf]+E1vC1."ip\mwŤbt0Pkp9n.c"N՛[# `8/sC &<6ma! \cg2_^CBVh!3laDCqIKOj#s_6A*.&1x+d]UawŭkvK}SU^R]wΊU*F؟ʇx-`\8O[qmuF?kȊ,jE]XR|šw?moSY1<wfb?$)) `@05n=փo|.W#)[L ~I#nzEh$_ֹ_ylp vciHT6izWkJ{{'5 i:mنsw#hvx2fgq[B},֥ݱ;2rn4n@Xn^ \@"Bܿ]P<͉] i X6Ox%e 0kpg_W6Y=tsN|&쭩O߯lH;|ne._%o~:2N?Ɣ.okd pf_\3IT5v^m|]٩#/{t{%&Jo~K@mmq:ŏD>˞S>jo ~ckmf5a,yaܒip}LiU*_ŗTTw8$|ˍoXRukDXTP00? 7mEPuWE3AVc+HUC(Wrnu1#栳fZCkj,(Bިb?+0I|j"K>P}0p;$f`> |2oFM}r AK醢펲w`)7'8Z Wd_n1̦Ûm~ ~XiO?G_^^禆ڔ6jj vemP0Toӯ]]1h.+u5& (ZxBp 1aK/䜟,JZWG!%Y!2i`G߆(zrN1=}c|iFpEbe[t"u M2֔ȕ33Sҷ5C*m؃FiEM?YwFU{#Eq4/ďdǕ:+נ̬1nW꼑I%/F-cN@!9-:CԱy2a.!7MJۏwDZ0& [sM:J|GR̴K1vvLL]-i+`mf %٭yf6I鋳T i9F & N|e$z"c2؛[޹M-9M>LZcC7[=G=UrT B*J|RtǦiݸ-82egdUQhk<ߩ-2ګa H_ʲih!P,Vh>R㭧;^.YJD^p Y糅|ݚPGyf(YD6mkaQP&h=᳐v~V'{6ERSK^CzN;\M$2H4S'~ø^~J|< HѾ|szex ImCo\Z>apUk=!yB4N[,tR_dtYa(/xHȸ %],pD?1Bpګt'iHkNZe'=f,^d[8K+;Fz7£(Yv f˒e0:=Uaơ}9gYE%W>Γ fЬ:NwbEmπ?u]I9l#OtŚ?"\#FIEXZyP|N3o6d&SU26-h4; U޹I7{W}mքD۝ktڭ+vhr} endstream endobj 42 0 obj << /Length1 727 /Length2 11030 /Length3 0 /Length 11603 /Filter /FlateDecode >> stream xmxspfuLlNl۶7m۶mv2I&7w9nWzWwWMF$fgadec( i0210Ȅv"@.: 02Bvf c5kC  G9UɅх!e lZX r q9U8hh Pp10XmS;Gſ89C @VTEPL^N *L" 05H=n 46rWw4Zֆk7o`ba 0YK7I[S;ۿ&.I%⯆_ @!lgc tڙmBv&Qwg ?hC k/Ά5 ÿCNb@ 習Zꟸ:B>zZ{OS^RRE]AcOZ WQCGI+Z{C?3`__@!aKQBBv^LLZfF6#' 5vqt:#^3N@;n}Θ;25Wg%$YUFՙkmasK;|7#޽]ɻb8 ¯hpJ3Włp+5c9[猍@iߵRe(;k┺?P3>5?C p +´ ;1o2SۀE2kvvdϔU~oA)ίE\n߷kRݞE.jIc&pஐH\d8)u)-jS' , rb?vZ)(qu%?8[k GֽE1"W a5Ί^*%"kjAp]@#1oڙ9^t i Y[s%B*}G\9]=lBboN4>{E*2Uɢ`O`ˑ8,?|~Mma:g"7Une,|mXdt.%G54yMG E~:|.yu;^ЈP/j!~MAGVZ,hqxU.76MSl &1k= *cM>ܛ<I'2w`ӕQLN.nty6o %bI0+7x!AN+&j(0Y3%rۍ:`":=5FAO5Jօ)oSA1^@u'>VΥ'.nOOptQ+LҫEeh?%wd+$g%^y>'Z2qKNOu˼X (1 {*YhFNb;l|TPCC@KԳ DDBp˶dpCBLU5`; s=<0y~}J} ܇g[K;ֿm/~ tR?fLЩEI Gp=FSvWoԵ&t*1:$t[G07Ĥ֫+LyӏΐHG&U9L6~Wo t8;?i3`@"s46S ^, BcUCYB zRM2QY) W|?vS))b@ޔ}d҃1/4hwasbʩ@P,Ҵ|&9Ox$L!F4gnqp(Y)=-19ܷf%m֮Tz/rkj{l#Fxtռf_gKGs7.睬ndzi:|Nqz5*rjRp`\8.8HqK# y@=:p` J$|EuP:s`5y_oO~5՛ʲڢ)nlTG7!TޘLDMWoqN-ȴ]tu~xDR*49$d7$Xiwl <=lvT~c .@N̢㡵B40ls`bRI4g!xuW &tmΤf͂ғrS n;Vr?1^ĝpT-% xń K`d *%nצg@f&iPR`2iȌT>b=kddpsΪT\PѹGIΟ w/=\3H2|s3KƝ(HŅk-dD[@0h9QJ_0!U05KLD\}ΐtizcjF?]Lm'c2qA Ë"|`OvE(Mp|`iV]X8v@cdn) ܣbhf.+qmOQmܖ;  Sdh 9|h((`r\9tKC[HhJWlg w&!O>y&SiƇǛQ=E0A/"|&}m; hie*gA2F_<6Y18\knz`gԓz=YCW LMpo"4q*҄>gR. {}.?ڡP*)DW5ӛ]Cbط`W#DYf_+9*rvBpL >',A/Wf}[ʘٝnGb{-m3jeK$oN*^>{hgR +SfWKAD=c);ؠv_r[gNyEv̠V)X _EVjIo>J(vXgWn{QaX[ŌN:F[Ms"~hݾT] W9a$17H[,!A9usne}r P,̗gq%a\(h +Yc{1膄GB>|ک [P (mSUW'F[Kg>[VtTuyh/H8Z8esvC7G-#_:iϾ5AՊcѪ8\kM8=ҟT'`云{D5Dp7W]_&$=#{=%d$fOSHes`$$,#,[02}6|s%YK"\XgTЯ[(vFooW_;'α.VM=^Z4ԽZ?'3n 4 U-JN>hUA;_2[)! ?c{YO3 ZB7-{Bڊe*|:bT8R/O P/,dzwΖLy*ZF,ghu(&lYXXmSBqbN|3F >OQͶ`sqkZH.Tw4)Y Y[*!ׅXP)0U+QEx7jo |aWqc v &D冊sSuqZ26+~?e :q7y~c/1 %ým,ةM:~-VXz\EnIN#+3U;M chMwωMH$CI ~_gf=v |Gg bfk8^o+g^~ {W8rĿ )f4O~8ZQ2A*ڨ'dh\ûq~:-vM`kCBoGw$/H>4n+n;X.1v]Ƭ+;9JM|aM]ѨBiDrKuAGSl~abNۣ 7Qu1-%Ζc# ոQ0BFCа,B䧃f"nKŗ?2-ݘ"GbnKLyimV4n*C -},-!]Ba%T9u,qH_:xm\>rK䚶)ʌJk] jqlӁTYk+2w)}Cd|^Yzk=6=5<ĒP_Zu8B0BO Sc L/R%B'7?BxcD9CĪB}Q~~I1lA.S zTqv|'Iܟ,ZFT]Ee~\{:zw3 h3TԑW#!/,i1ljEɆ$9L"=f!.${rhEZ_3$s_,C>sI6R sSE$jMm,k[̥]͹,ϊu}uX&q[_ٚaenBIj*NtlmofrEq$5|-(K:ROIHNqK/peWC|2yƽN F H`Fdn;]>zm}0s@r#XNPޢEbujxyQ@2 xQbckv1eL&IPC7ۺrtY \I BkY>UG=pJ˃T"j-stw"_u>2{#1|w^&ї+Amu5&O[̓:8FGh0[==]^g(FH@ "h-';lM&I" B,z%d$WnϔDAz]!LKA꥿kiԲJY "kULAi]ct $*uv 2Aժ˭&(kv<vV^}+ CX|; qܘМ3\9TX̘OWJQ9T6{p0uRIyvqc@Cc/f d&qy;z ]X$!FY~7J=Z) OΙ|SІ%j0,(|hz/]lFͽ# SI}%{/Qώq%V_~~U< );?`)VbS~K9V06W,/hAow7M.MZPS恆 '.oSF$5'j![yNثkbMuH22dIIoDC['E/ȬpLp>&Wl4\e ?/yj |c#^ " #ڻP)G};ɲI4f V-*_u5S_ |WbĖSFSOߓ^h|ep;ކ񼲕av4b–#L 6{Lx?+ƶzxb8FGNdl(}+tfKEF]&dfP_NF{<8 ]vO2`*a fX .+&gba\jsNě zF;Lvv9*Wй O R(=X؁Dv㭫& dfBRx!eHc 14DY/͞@Cly P= %VC]"7tTVoiP:؛&q0YoMȇZ\'2~%-d섃"l2U[2v.xjv@*\}%j;a!CxH &=&fӣ2|W0N㤵g 4W1zMì'GE(OdɡyTS/XV1cB2h{:RxbTڳ` @ #}u!6i%^4ҦFbg%LF(q| H<8v3*Ekh+n]Ҿ</M rg1&wF|{6p8+OhˌUK>>˿qTq(xQ|KɎ[BiV`,"![lx3xP8 U9 2..1bu7N f(In#G3ԯlVY\cg ,4g0V6H)5.m0Zb/8@ QR!"VdtñJӶ=ၙͱg卜*S+fu(Ȉ9z,sX=Ll?SDߐJ?zWXUQr[?;=}7J=!{~3ST_`!?BDEC y4F0 ѧVQ}ǰ||r>t(1Ϝ PH|o5"\޷ X]f/6.{_`Y׊ )*U8i/# eR[O<Kl?Ğ c K I@ OLɃZfaD(vzBy77E$m/v+vڈ:w$PO6 CW(2 =X}xVzA6!Tn+Y;V߽ܳ ;;zl[Vm?pvTr)#ܞZsr)k\Bߺ/c@,Tz7.tkzw1Ӷ~FUʙZs 8+˴}Dܗ6WҸK6W}7e!9 ,QQ%:=.y(CGQ3T鎸3j(0A} W[ QR8lRSzgy,.sVyi 9;α̟E=wQh]X^v6[)\B@xKv\E,[ * vn\?Ϗ{Oe^"'^xT%{BpJeNeUk ʳ*FW_lpDӶ%F/[| 0etuEcH˃@MsPQ2J.c0W4VokР zP P,綄b`0["ŗp͔D{b"+ RS8DT#?yp\ou UTe.i᪞͢z"wRgdxK:z,ϵ̠!|rJ0\:Tk2/SBauGƂR'r~14 ||S!P]g^Lf*6^cwv.NIǙ 2NyrLur=X("X[N#N&ԭFW[Vga g4kQۂr9R+mdꖩ`#zt޸I q6!x2> yW˖;Tc̕J~g+Iq\٣ׁ[V}3p됾Gcʓۛف=;t<5-$g]r`ۻ){1hx3l2ՠl R\16vK6WCOwO% Z잜~ET*[CwIL ?L.Ky U!/p ׶T <+evTeghiaeyN fBFrN3VL8bkTumFs!L?;?n2zaӋ >]t۫Y̪QjdBou`oع߶E+LKY*GX(VU4;ȞRzoOj;2p8FllNDC)ᗟB$_"Ku?ϝ4=OtS$=Dzrg)3MHlln#I>6\9:x 8+}u3>DFDL[9Wl9h`i€1X䳱\9a Cc,O,1Kr nK īˎڑ򝴹h0biǽxtBJޮ7td%u݊WHEwa%ƳO*+ө_)S0`b^˘ж!3vMyn)Shy1vf1|b%+,-#:_J˲%}Z݋wQ'Oψv(;R GS1ԾEX&L./"c'L߆GՈcE0ie[|.Dq%ᦲ_wg?Wб } )]҇v!HՇw֢ jS\U:ETZF iE]UGYҌP(@eB7HIq*~QE7}z endstream endobj 44 0 obj << /Length1 721 /Length2 19438 /Length3 0 /Length 20032 /Filter /FlateDecode >> stream xlct%@-N:رqF6wl۶m;VǶmw9w7ި?5"'qRv2330qeL ?ɅN6"N@n0X¶vfN*#VU[+[s#333ÿ&% d[r*qY8``w627678&vF6ɑ?l\N8ZdDdŒco6NF5-+ ߬[ pcs#'!x1wR9!5hJsv:dl6E[k26r?Nx1݀N61Gj~EmmϕυBRhWIۘqi` [=`@_,[%$dI `fecp5rvp8!n@#%[_A!>33S*K̠˓Zfzxwxy;ےwM$@(0%b S7?aWFNk49g5RQe}([q+6:h_=j+CUмkr\=rP;ӯjۆ6=sRb4G\Eaw_(Idk jӬvQ76>=ݏ0(68(Z1`zȏ4[,7F{;bl][4 c e>Ut Y$oVV2nKÕϾSHHByw)NU:<dS]05Eϕu7er a%6vJK Vc5kUrO~yGqvXjrNۧy y ct-CsoL}$#zB7]M x>n]mi\_$,n阿ޚl`#X3hqe nR GbYdFfgh-W@ۿ24 \)3@#80́:E9c5iHW}4!H-tB8cK?_gAA>/WI!b v?t72.%|ZFF7G`I CSjj}5H*}{uI>wV tŘ#Ɂ( SF\xAƣ-rg s)F.<# BFX&W7#dW.fK&CMK/nЁ.ʈ7U02"ަC~“tA +H s:Dm=! )S$|PMExG/oB@\ȆGC^6]l/m !{1XuFƤ`j ) /'Hn[O *Ԍ%RrqI*$UKfi0ȕhՕ%/.#ouzfX"75YFERߞ+\S;~m\φw\8=~Y h>IE#ɡ. .뇃RtE^uwNŲF=.,LT"w9}tcPI5Ffl8@"Phlt¾2>g'XgmH=򩋾1EIf(@X[^HOF6䝸%z|NnJ"[lC i^ |l, ~p UE+}]pe}2]|ѤdxvU98Q8HMRnDigCYKmn.\.d3&3΅L Ƌo1̓1)ڝj"D龗kUDX ڹ8@KsOcm1G.&3݈JϦb"UFMMBܲv GRx$m)Zq9Q!+{l[MfT'd`m  ;3q,Dg ÎB(s8 GqrJPnNie~`|sf.PH RA ,3YL\<FyTȱVgQ ADZ[1$+XA;ۂ/,<U3LDL3Zy'&Z)>%k>lh-/Ȩs6_\Pq4i֕3 讀3;J.Mn_וtOtU^"/Jb(GePcRa^䴄&< 61e׏FlQVunwFW$1-UqVޢn~ǯ)ObH7=YFR֙L{904?1w˃u|O 7uieEؾ"n@2@PzN!ߺ2)w坋Du ,3< S K@B SD0hлkNM*:=d&xRjZo!A+ x==OI˕gTNת M=AnJ(I8;7(u&#>N*B&zkXĔ PfFGٵ,#ʡ^vO.`ҭk (1zdA#Өx޽mu1BU&N>V^x: ~빩9,shM{M)^4eyWI<"c}IO^t}2u"$=@A6'KhC=nrɛL&kX>X5zB^V-ҬU$T\{,ߧb™vdeONpE2`+p,zp6^ɏ_}a>3}2,Ց+,j،<16_fdɖ t1h],JX"ۖ*K-b|u#?OqdL3>LI~+iV45 uk졡{@_(yd/ $mKnZ/&'^284&a^TEf\oYlnk?-搴E ΄m;@E'aTsՎRO X-Y]6 2fx` Cxt%;Np3SR|it4ۮp]Q"e8!~Eaqwa%O|찕l1PҭsıÆnfD7nϼ=75`d.h:\9JtTޔ/;9$ļ#\y㧚v UwDUV6T|pʖ/+!Y8CÕ7<e-qbbj _ `YLxm:=}=gNsN.Wud:}/ɪa!*{ȊC/Zt\2M.9\N:%%{7^qY#'kHD M#-#ۂjV%TB|@*Nc=4׺ʙMT`~ǁPc<(Kk{ۜG$#gsԊ6lf&4_y=levgxj4Aܥ";u_FI/ +Nl ߄H:}$u6*?^N/(z4HXX~O˶^JVB @Mee e1M#'C+s_:HoqyR0|'R,XՑqw#ۃt9-^pyt% $_0{{;ܶף{T]w\-j戎O2{Y3T Saf9~Xe3pKJtؚG;Xh?jp'Acv̋*+w$D-'oJ PzWPa,b+dƐ+Buۖ\.uٜ 1pab,D;+ꀗ1鐉5P;g&5WV ^>e%;e:"FSް\0@ڦt%y]̖x_:3p޺.Ect O|Q.8yV "WNHioc|d> (X+`y?NSZ,>iq3A=6w 6㬚1KJrt)Bhi @*U۲KOp3J;)bKQ[PD"g1S~ϼN - IU . [~p̧s\N,ǭުLHZ 9dIQ䆂nL/}AcOtid\О- ,63W"vߜ%o jh\b}~8΄'PyV_'퍁T#SmjO]QKY‹^YoKwB.kҡMV[}?y2}Q>%_և4t UBCi|%Q%CU,N3 i۝*b%\@uJ)@͒=#"Ywk牑^ι1ȫW|08+|}e.uk~[i# `\ƫA{>@ҀSdjNv]ԬjE7yo,Z'E㽂9Pxҵ6\d0D68tQ́gHAibҎrPji /J޴&wSSVRpֶxI" :@܏X/е;7r᮲,lkYTm/j҇$,.Gy~W`hL)&&l$iu~ΎqA ;úى׏~`'CS#BaK{͓25 - ei,龳]%deT; (*Ѝ86hIC?P0&ӑa~ r{taCP#wb(Lfv,#DLػM\YPh2ĨJ,g\LsMTo W_AӰ8ixRm@r^QbgGĜxW}bKPP'mV+=(s#iP_<2b^,e<^HǭPM=Y$'~Ljg S}mw %/e,QoEOvN i|V_>ߖj?ɠcԄ#A\wp /%=k]\aWUوFpI/y0$įX-hukhJT.eE:kt#:!=kw+a,T`I& `ǽE> Iٵ[xW`y#koљh:%!U1 OhoxǸnPמ}o<5G V; 3[ZKen ZgI[w8qf+}!` JM~ }Lcw0!`83\چW#. Wkwvs\SfP|-)%fwLBkj:_AAŨ G NIMd5*C}5!kB0 R*H] 6oji۪m'oEEed@DAJe{¸u'6Xv)s8FQMzT褹4/#ߩ;&A,Z7 npΟZ`P@߲ G҇Iz>}eP~!)ZQzBI{"?"vK6٭Z _&? M"̱z1|i.'@odߊX~d!)!8[hz)I8w}Ј4疋3zxYr$R!jK콳h/RpFɵqXcC`GN 7Q*|\{ *-We(s؎fQZ?OM[YZ yɴB-5‚;DG3̹>#`S##6b,T+d>Ig4vy/}9Za[J׈,ȝ0JpQrOqwfߪ扃. sY 3;#8(e`ѕvL(bGcU폪?Y]_ +k!ߵo|,Ƹ8! ¸22Tk~J . fj 9Yv BHeNV>u17lƨƬ}BArc9%~el=]_Y{E_M?O-{VҾNF][8Z{L0 eMrd la/XR*V|TJv\'gSdb"9!i4Kv^TwI; 8j?~)%LI֚:O7Ǒ$wМ"b_5!YÜ90Q d[ahbbفҟ 5saJ}jJ ) 4Yj6W&vvUa:=jC 4/rFrȦ1^_:>=5M32t5Õ.oCH6 8oEEHj>{QYg(ѿ,2`dG,LU-|;(+G%/xwX$|[Q oEN/i`3?s0Q:L41[@VnY9+lT(: Q8}7J4#CBe⽬(Mdgbibq@-$@L駂`9u|20f;[8eW1 smv1eń 7ZD $K /gѶ5zIͧ?xJS[xk'JQsKz'MI1VClT B'{S "#xܾpM~}vݱu(s;\v䩯t'3k4XƘ2`#|'& j-rmmDW5Ղ::KI](㕑94f*Ԃf5ƊJѐ]*P,9LV O~Z&zo_sbt<™ՑS>"#6mW_@ZַqL4UI s9"rq1AW'SҼIzzi6>$L(D挝>Pez t]՚jx4n=JڨoTZ TJU8A|02= [Ip>4ќ_f}6vTK UXC9 0! ֞SYYo("'cg{|1W/"KArLϑQ; o:h0t`_O?Sm/o^|Ǧ"$# Mɢa!;˓ LLc%s{1ZpLͽ!+O›귋j=ё+?v v;foa=G^vUxʹUsuԱE>0ֻ^4d.vXGڪ2"Ui+CUXh b ts q},kUfHz*:N3?~ʫmHn+jaH}_(O jUd (zCUy—E|(unOҙXKvJ S3;J!aNeUX&` C|ذtBBFI6{YG!(hu'x=jiǜI+)z8MrZ,ܯBgB+fAޏv6S-; pU<5C9ԣx5{tujV= ≒0Qn!B0s0_ǎHnY9ll:6NɄ'6֯7r|]1d^fxBԪaYPNWL["&׫.6lH<%5٠@7q`vM+$۵ppa;R`R~Y@6\`gqPi<"-7yAuWН";"e5zC63xzJ^Rk){3=za]0A>TDJucT4k؞[3߆ }-O/왉P*<3 D`H199Ѳ#lCyocs.7*T~266Ps=ؐXiݱI~݊wz;4 zd ($]>Qֆel)JMT+jﰹޔB_G>okcb켲 s0İ4c?;J##fmW^2A6u,#0杛&L;'yH@>▉IGkHpfm#F侀cMNwE_ 6g 9v q\ӅtUy7ƨQ'>)f8Ce] (<%.M癇u 3أgR}:; @Nf$u(.2iA+UMiI_,Ɋ< ڧVga/iDW8qp0g+:*Ӝ`0I^5ܼtB`I.j}>[,JgE?~rRv9"o=5=pz4怚P:#w>BX(RرXB#@ PKbv)L%ޅʰCT~C,eP?љ໌$)pJV}`9M c^ls?A*GF/ .w 1#>^UKo5{o|Lf] Msn"̗E(Ft8w1ɞ|L,Y k*$T+ V@XQBڥ)Co ,Ŧ#< eڌНJ1ŴW3(uȳOʊ eб]oϏM]J>߇?a-!狿UbmmgvRr2~^{_cĬ:sMsܭX W5 :AnsbDVBֈɬT@.}Ei}ԟ .(0ԂA$g~$"ZEߊlIdS0]/ODIV4DW+SziF=tZ[^Ɔ1wnY VVˆbꃍ G)%5EEr^[bupf9j1I-΍|(  g˪EM~@2CqZa^g i$eTHk>qhhb Bgm[`ΝO̞"K"kqϗpM.t&@.]DdnҐ\̗x$lIӗ;i$AX㨆6HwI&a8:<3{IeA YFm;J,įI`"Ԧ63w|-9@kҜ.k-U@uȮY#x3yQ&0HcQ4lH0"݊OjwG{%e̋p }OZ+OohYPY%S%3{q Ŏ8+F> <7X Бe *=z/aWyxBT=EI9!.6A#uU1cyo+0SM5bS~\V/m[BxϋYo1UkX Ka:w>&fjBu]K8SA=Zd߫.8wVh0֊6f#~r m?:#55D}yA9?x#{ b(Ɖ^ַI80\At h$3;~a\[dЕPxo%A0 2iVX'W?ݞ5c3# F,m=:nTEV| ݣW/#MF~z>]CTg\l4)pt]L%n%:Lj) ko)Ipq^? t45wouяGc[ݱ/?o~"]aP"_OjYw wXKDcHJ ^Bϩy {YA",+Aα0z6OOבHVqėR!?g; 4k]aE52q ^>p?Pt;~RLcCd:C:]/Md<2-T`mG{󉏅|Ejzzy|e0D gO(yeǂ=6{1F g^> X3(HT{P vUu,n_yӪ .~CN'2_42b0I 7,qm_iT>`8n~i-atyifPdž | 6j$ N!G cLeTqw3-{\ 9ZhcajqR0cn] lBpٺ"b>M$o+u"He=WYedl3;EFה1  lk)I̿jxT"8P[';J~DV6 -G /y$3`0'eEu*G"zݨâdgAYѯ&,#Nysٷy%\`Y'ĠdTP||λK+R)7!~~eGaנCe mc"0 9qi'a fRtkLOXk tw0 D1-*.,^_:Z8caLJ-(k#D{ՊcFj7p aG%|?f]4?͵Tط$0eyͣZuI+:)ZfU/)xT=6Htf l7X;d]ՠV1X5eڱeR%H)G$vj@KO/PqF~g!sJu֗o檏rImw'Bǵ_7'JUKvsi]x0oRd0"a*GӫFZ`fO.n Ve541RJ)1X.mʹ)Z|^yhN)^\R8;xS7C9յ˄%d@0I܉q~>a,eɴAX!@8 xYrk%i=.v/}f dEڣ@-dIlC+6c&ىR,/g"diF @?,p'tBB :j(MtA#di!ƠO݈u&1 }c UKEyw~X#hc;&*#*#<7 W0@D;4c#t5T. yx;&ݐ)~6u@Yh'@s<|wB~|X$#RI ̭YTEL3{!o~zyձ`"/f8C`5¶ЧvoaN]ef5ZE|^ՌI^M6˼^&9{}gScsB2rX7*smOE\rfTk C^ʡ&d.e?e#ѺW9ٛE݆EQ=ʳoO[~l(Md }:F͌>PN>ʾ} @FǨhETYЛԁ~+O/)E'`X&5>D$ao 3ɍb ̉X9=+]pZ:JŰt`弈 + nl9'%KO:6hWu[Ev*1ەW!R/)&.׳fUfxfynO``yCt\v*4M7Hn"(}&HBNSD@5@'av4d;>qWS;5._> 38>Rja/޷w4O:ڬ_LW/CsI'{c5(s)2pQ.&'ƶBIv& TqRP^$ l*F,~wAt5L0m4Ӝ7XiQ1IxL K2k|> D/c )RMo'Q@?ò˅7"`@yu}zrH?;o4w\" TAk< ܋$ov@DLcN蓼7'J:+:Y 9(>‰CIh9m;x2MbdN1.7er07ܠʄe"~伽/;i<m(?I Dƫ<Б9W(\!}O=RR$ģoIzgF$4GʌpPR1ۏN \$< 98<> [LJHXE&cKq;#oY$kilՔ])8p}"ZaRh,5sjwZ Ʊ!/V]b_VB@xl*y;@qXK }łaPk\F>Lq*īt1CN@m1Sp؊%:7D)!(nEEgn} x+ ?aU7}\g_Tw1'g5?ɷ@ ۟?dwo=@b0DVJb`kV>wѫM"Lk ŽBgOgh̰5=BpG?$?rI>Vu]$d$G)4~L cN."a/UWƬˮ7D'&ţE p_'7XȾ;zUCzV $N6}ʈ;2gW!gG3-Em$bLy=OzQf$"s|:.w 5"sjp:D-vܜ 5+q1Tg8>3xJ G]rY%ݙMS<ێi&[ r!.f)lijgofYFgĔtƋCKf48Wo]Jw M!t|n`ڗ 4c/ vݜ5xe3>8R]вղ15] įrcy &݂ w䤙YeD=.? sqKD=1yt镩կ(E8@.W~~VXEvr3f*Ijɀ^ərOEiBO !z*!*Oڑ&Ey3CTӣ}-/ ᑠnC'||U@e<ˁ@U@EK-4= yt3fZHIKF ,,Z@_ވ)> th^--Ҡ&cTIk~:]Ia]YVynF h1üumY׸jIܲXky{kfpqpLFb8(-5W4B(_~P*vn}ފjUָ~TC dpy'pʍY">X!puE⎵D1pŁ endstream endobj 46 0 obj << /Length1 721 /Length2 12315 /Length3 0 /Length 12893 /Filter /FlateDecode >> stream xmxL]ݶ5݋Cq׃܋ww-ݡ}Nv5X#ɦ"rjx9Z11ԥYYTT&@?@n`c!PV֮Z3v&@{3ૃ; ōM` +*Ih4 g; 4X,vNf s80Cn=@QRCTJYI )΢!0d\]-̜##F:{;bF`c\V@˿tY:]6wsO/!5[XE)[h\- ?({?YW:*E iat+_kY^-́n5wyϑ@M-) %$*&?d&&@O+?<}xL6ο/>NvCwO,,<-WBl[*$章g5VWgzoЁFWHsB;-&HS1d+ϥUV~u/# ۛ)AD޹fnOsf9 KWt@LX[3@gE-6y[/E7. t< ymY`x E$ޣ kc:{(=[~5vb2~ RyrfsRxLFp߿W*ҐMF{§C\YU!DLTO$bμx E8ij5ڢl1rM[v5nt9sD5ڛdUcmFBH~/@* v4+ߪ b0P;kO!6"zV0k-yx>?Ʈ|Kg5d_hڮMǚͥN!-c$ nº"#@g,dK LJf-7a$ŭ:L5?$ 9P@#FT BP@`y5q#4?E`D𤲍fJSvHwl;0!n3B$RY+!_jS||qkO(.RVD;IIU#"Ҍ,^?ۖ$HPȤև E! KK]rZ|K3ҫgdI,i#Ƥp 5u;a"0+hYJV]|tO7lۡCw2Ғ=i'̏& vYl'Lܑ=s"zrw"96F_Dd2;6~=AEuj9Fq%{G L;U6aTs\r>9AU$+-lMSM8jZ(XHQ\@O8C4R_vC+zMdzsq9ELiA{i1&sx'{v}8(7k%GYt_%$j<)oAM4%Z|s>?4N~b+ 31BvM[rܹ$ҵsIPÍ^dm}`abF^~Q>`[Vg$rVwAUςy?ؼoQbw+b$¼󐠚HD}D\$L$¡ݚT0`[o_yӯMr,oJ>lÝyL9|* __2PtT$M-b2ДR }'Jٽ;2tV'~%f\o S(-JU7yw4 ܹ7zE獴f)Rzo;t;)pNԔ||hw+s̅j)vE5fF%Nn|1&x}P_̭f23*נ&ie8^ ji1Sv6q$yfrj*jPK$Gf#77lZ|]y7΂"jWДZE1F ՜M"կ0!Fd3_ 9>LQLQd-DA!-s3sn\(frPq.9#~{̐ N&bUVBB WJ/m%nyT)-eWbVE FA-^40tc}ݏl[!~j|mQ:фݠK; >qlʚ4Y`VIMwp@ GtvŜ#bb?  -d:a9L1{ʡj78qHC4 Ia;;uU* eKM̸'D#+K}Q/E: Ur=)i-B=%;0\#R(`]ZIE DպAԠFx.oux6:_b$s}5خbp//c9f/> )5<݃ZqYN4m,< ңw1:r_9 C,64ٌP[R\LI=0_|}]Tv+žL 6%Q(X˶~A9.<#LfB2HMS}7vWM rԒP%#tNH (Cu> ttxlxO641ۢ.iS .hp-X ]ۃ U␩^*/ P-Z@}sUJqjѨH9n##8[fDKx"mEWx1=Z`ȕ ނ. N"udilŶNvb6%l!LЋ4fj/Qw+s4̆4a+IFɺ\7W7x3xwOlZEZJAF;E{٪;JWoMniLSj͵ibJzBžbh]W_k?s>om=a$vL=Vmpv&j%x#zK!?ɧ!.X2uQm(N<g``$4sn)Z MI. }E[%Փv=ϏQ bTq꫖* )cD5'aⱯޘ#wA#h;̼M"pKJ'gФCy4 Hsp :ug#r}ą<*5i_fzkC˃N,|7N.g\-?nmr]N;~zqwR<@|NvV,Z,ɞ7ޱwkrr2=E3.NC}3K}N((È\xoZ2Wef%GӢx7 &N%졣> hT;* #w¤Cyp&lϘP$7rT/ ~p"no3{,/~՜8< <}CDGXUUѣrN J(@6#TUjU"`#L<#C^ݺap7z[Ĝ ';Jm*<7y|`RFv"Ґ -5bTk|lvh&1G}4g@~ld|A%$\8NzѢ)ATozAS92ё5AzSY2ӯKxM™^.hnz40Ϝq.w(7 ,˹~zTwxh-Uh( buAŌԄX>Wysx"i>[&TX.Dj&L耸Z!,R{GNhE]wAjUrUGNa<ХTKYn'Q]~ X|JQ~Ng:93՜E5WR-+KRў#<`5(,7֪҂d.j[G:Co>'? [3j*1`U[TqK? -IJuIdJĆJ`dO zp}5:Υ?&La}6 /Wֿd$tkrNjNVb=47}wkc~9C%+v{js5ePWYtN9%g3Az5YcKBK'gxTM~{rZm'ok6WB)s Tɸl*w ]ue|.] ABp XH~ڕ}ӺF ?n%Tv6$G3iW xM9lb$q#c;ҊwHH,!X׸; ߊdl;h>Dj7=x1hR'X[ZÌp XγDV_Z5PZd:$[ V"յ*ǩS&1W*V ->De_>}0f6*B1>)l[ThqvKb=Dvu9qyנ18*BÌ rl"QҍѹY!H_mF"ob>ƿSS- B{GxQ z7-ӥNlqrmĈMDDM6FrcCOCR蚱=88O28`ԝMv 4꓁ vדmF<5Z/(f&%&ӏ]',' >.CHW7(>qkGVM"}3{˅=FŰArNw" EKȦ'~6?p^ J=i"a`g\0|mS˷O_2g8c%*q[DV *8r :@HQhU`_7U`ʥo Y,2M#C% Qwn{:IiU :>q(Q%ggGltɣ f74tqx/u"$;܊?_śH89ZoDz:mlgC⹨.!E)RCTGߺAD, 0pݒGZ$7}"Y\z xJz䇡#L&~ϒЊ'tFC2W<*wL6kdHR>0 aKF߫sk:CM⛅cp*k! |O$2oI2XkɄG4F1R6n>LLMQ_$vjx4)\s*L?RYVLRV,Qbkb0 'o=<'Cj 4QMc!a꧐U;Rp% |tߟ/'Nj.z\"poB' n [p;[DDfd5l.>lp1=}=ewP &}Ex V3]xTJ)Ø1CVީIwQ`S hUcYnGX3ŷ9pOG,J(pj֖DoK|?ES{O+[Yw}Vcٳ4b9qs k}i{[ [h 5HbM/&}1Ma$ G GyKLjCZx&\_W" ]'.noWﺼ2Kl_ZaH!U ),DqU:>fnc$s,˲kR@/I?%r& xc|l@4JKk#\pu/:!3>0S(FR6o t{ k"Df0Ǡ:/6V7ⴃcsl֚2^ᵉ/FT<)\=Fg}ZLKS7 nQ뼐Kz6V{vn%Hᇏx C#q\uQg=}HC5:"/\/Cץ"m`HgC1l߷1  ұ~^#d'Pt`Gm-GTBgr"8;l'G sdFAAGw&JLGwZhGz; tFJߖp ^^T"vWJmFqe(v4ݢTᅤ2HqQapi/ 0E\Yh;͂és2:/^(|pG Ej =]ȃ*"nj1.C:SHJxֽbu"bRtEf aK(';kfI.ovq8Gfg6n}piY oy}w_gol]#÷"-8z#,q}gcExd1Aҡ [G盗OFɍh˷b&gloi,}tYmVy#߅IZ:lukgp{iaC !X$ Rstξ9YlҦ˵/vIᤊ f-Zy>kčMԾ8v6 :e:J͹Ff (1m4,|uCU}5CM@+~D?[{ɉA/,z 6eglۊjC~wĖ,~:<6;g fJդ'GzMn<ΰ\l"V˝`>oPw_h,(S'_CHYAt%{ظCv [΂c[kƠ ZODRvCK$U:xc'n܄xm ҵlVw\1\8s4sm9@K'X2}keРV^(ɤ~P^Zaw05ƹAqAS$$mݸW pV#~e!?x/# 3x;*|XH>ٴ肽>vO 0 P1[$YK Ֆia6T3 mկ\/\B#^,G]D⪵ [b>v9X1'F̡Y[|sAߗJb7QHR# HRrUhرJ~VyìfWR1)?&A$pdg+53 L<(uwf6Bo!,ywL!Q)c/6|(+V i|#+-ӘcYV{I9~A욹 f.^`V* 5'e#_g\&r[6.8Rtd6 fz:F,!\ٯBʲc~V6=qD7ޭCfߺH b +=Ds(|􁧓 >9~TGޮo45אm'еYЮw]^w0x ,4P4L$BM&[}Q2)- [5`/ Kqrdͮ}^K˩b3VW6Y`j`?~XP&o5zN7̫m7S[Ʒ؇wDYg_7jiaHǙ A(uXRYJ U\4gBeG8z-;%VKrxGo]uǗ_PWꡖWj+0p@+<:np1p.NsZ8a'4HYV5~XU}xΆh8 hI) Uj<*D|UԊC7I. /S&Ķ1 "tWywΡa - ,8ǿva(Șʥ,!z˳Nϸ bVR8ќJbex>9bX@j?RātCx,U8 ՟L&n_I@8<c&##)@$)7j "ՊFd ^ Fo$a.4V@ 4TV_ZNy1įbCɂ bT1 ^2>$F{= oCǶ(.he % 2xM-}tAS>|2Ii^`R{5ݟFCjP ¢Ƚ&G*_\||v6a+S;P߼'L,WS vn9,O3o\kEԆ}Y n*ᱷWt)V (H\O,$q z^^Wz.װ!+њ_V/9U -:[{Ʈ@U5Ҋc*I{dgQٯ ėg۴4~BlҴLޜ1 Ql`\kf/YȀ͐:9U/i.l1cm Ve>6=0'eg'lñ |O-R<. V%ec]y(%_Ԫ 99D$B﷠\~ƫIW%bs_,ȸ[,#tNψjE4T"5kiɭ%ϙȀL*G-qĪVeA>KasSsX-A t7mTC"skqi GqW2hJ̘b,PfY^)HF/Ӓ3Y0 '\%ۛ@V}xkT#kY?Qh= ,s5|esu$~^"sW=Lb {~NK@Q5lꝎڻ7FwThSP[:﯂ Vg6oٛ"~e,F+ڢ>]p^C}U"IWp}8Fg:ĐndybzG4[msٓ"kUH+ցe,  3NԼ2eEA Z?iGڄ:N&_Y'L`B-džf]-aw!?F"9 f+e8CK%X$LmӘ"Oz—Mp+)+ie1/FR "J YȘRͫZ;N T^vg2νpf[1k~+IeUayPW<wB*ß%%_1dǬ OaOk"KF%DռLF췯?|t,-jm{? |&$Ǡ& u8FxFz[76 skͭVx&cvTE˖rN_NYE>19E ,a5}ِ74G~^Ar͵?B-- n@iR}C/tRu`(Kk}A@c=<5P ).*RWό9cM? MvwB2, ^^.l49mq뻃h;]g]mfq[4-(ySs9=/gx{ZNV^9Q턿o@^{ˆ AU{S&8ie^"5iKU2ܿw*k%  *I>3y_ÊTr?9t`q ,;SgmAil)ڴ'b.<(vv0 Y1pJ=l^fR|:1A;i-ˋ 4:1% aְN>lҥPu]{V#F,~vUoH#]}e q52 1{)/SrY{xD)Gu`}+K,/2mZh8JhU7mslI[+`꺭}[?PX!NeVd)$La?`"PAY6P.S{ttkLr٠H]$_0=6f-,j'2M[ }T;Joۗx2dw>_yOulLrqoSⴾZ˹+g4.xӹ GEN9ʩIe)߹itڇ@zr3uJR>*.z/')S[HyRA\ũDmu :sNO}fgBOH.K>g( @ֺ6G*[6ūY%Rܕo)fpTI[xIkdTM ,ZVBsŐ*Y}aX%+A(0mR KK#tޭ%"Kں|@#{ݯ`h@I[qvu6Zei&{ 8NC|445rV[ނ-;+qmmf &ph|byND `Itw1vR7ҭw|F`ZI2؆ ^6aLFF }' 4gd|K#fKH)K])->cƸҩ endstream endobj 48 0 obj << /Length1 721 /Length2 9978 /Length3 0 /Length 10574 /Filter /FlateDecode >> stream xmweP]ݲ-݃6$;www8ww4=֫zt]scMRbQ-'@ITQ@ OJ*d4p4 8Ԁ%- O u775sPQT ͭ6V6Ffnggg~g':{'^MJ@ 015$db*1 ho`w227HA@J= dl/Mt9 3Ȉ( *D蕅 cvϿl872odU{Gtcs#G!O/$@&6N)W⯇c_5@!dcmAEkXVn_2$ 2ÿ!sQsW_M Z͝5Y@z Ii%a.?e9K{ =m0_.cho bz0O,AAWZFv-3#5r1,Y$ h`ch\-?UE=5BeqR ͼXoF/ۤ!٦M#A4`t,8Tg{wBsm*,eصcʲ<KzI]1c~I[/FHR=MC]:ewa xIgWgYf{E/zmAH|ŸmҦY<Q M^WKk: F?A'f˔yv7 90}SМOI~3SsP˦ͤtbv|/FVa5n9K -7|:WhStq07m6i'luȒZ@S0?S8*Z]ׄN2Z.w#W$znrv LL%`H>o 6G  z.WܧRn7Ҕ)h=,|z ecVBwJ^,ݐ6\ RW9fQ)Jg yUI_u"L& ql3`)~ĐME?!P"% ٹ>DFLv}  eƒ;AV~(UZ)Bm%cE"궭rL|N-C:U8  ]3QtťgޮZļ8=(|Ù5歳Q2D^P{r񵊞6yt\JE`,/9ZA!\T=n&XMyHՔQO?J*4^ _K/5;Akׯq5XR0Eyh*DYЭEvS-αClQ@ie)1L׊L6p(Ue bKuRs7"_a?trTN_M9ueriIN l⤉vYfG9 pߵM $L 9)RjD^LܧD6qvz m}{;H݄ L S˷2=0?.L-+1 {Q׻vVڀ[>[]:.%6$GlMib/xV" g~ zujGx"%< tϗTjY.sKz* Xt(&bC÷ђif~Vݶ[S&ˮb},?BoP~-5MN0ʼnW(MVR!]"U'3CH,-,>0ϭ3"ݵ!΢ekhEA(/zIZwom!v+ưa+L ⪔Ǜ6f5\ͭȗqk~vvyeX_ ~7ix.S W 8~: .~T90PҪbu#쐋ErCKQE / qѹ 0Hu )u=}xEx*k lJv Js,]fcG :uQA<-Ü>{K}'/8ՅyGb?wN mJ*?+I} b":OpF1i=/Hjp;w6.@LhaXY* o V ̴ 3F~L A]eQg lqY .Bh9ğ d0"~j7/C#ɴsdfhaⳀD7x !W_/!M_^v2[v PoWF'h'~ kbMZ}.%8cȐ[`٭׀{]6YP0AsEEw&hO:^Z׎lytu-|j2ZC`牿?pvWL ՞8{[=r*HMM/O7'(h JVZQtuqכG^Z649vo8mka/63|} go30̢g58x ۖL-=])X>]$ӨHY  76j3 ܱ7僧X]G23.W5~;Q>7^_GW%N 98YETn0-0E# @iϿ"5ilt" [ؠVví2 eƘNqx %G~z`cۣF (aIBOP%Zv|™AZEY1b4j L凾vDv zڒtCYh?"Vij!mT$/[`1sZ6ϺW8P}5 p<jB␩'[$g~Z]S]fsi?v?D ZĤO]wd'3+]6)cl~1 F3+<39_cA\תL0R5dLN(0بq YUy 4s{""ܣ/ \͔y I)+QG%ᇱFp>al}{,8u0KI>u+]ň2m,P{A ~u ޲~YMe__tS @:V[U k'NJc;•QkQbģo+lF2;ByrRb鸁Tz.'=:dfytA:0mRao羙uB14#rinUERħ9]T9IwߋYFU9y:2Z۲wY_vH'l6Sku%ٛB;O4X(."r%u`VM0E2ɘ\nw AëGe!&>S_s3H;$_J姙OL+Ly7ޮyW&0T9%E:\R(O'6 Â\3^ݦ~>.=Ln֫>Dr_Ϸ?PXCn1|}_k- Νz9C9KpR]5HE݄6"eGݸg?(eWMnji$0ͽE)S5;0]Z(_Ik1 OlkJϚhh3H \d^ Gz#kV:[?&BOSd:m)YDvAːd 0D8hdԔ)tex\m^ 5T[bI*WERYt8l5CzwDga\I#9۵EJS~"&RA?bT4xzv9Vc APܠˁ{%X;&J IWenf#s!9#{! dvf_:QqYnEr\M'#XʟSp>}`x+Эץ04h<*1B^ <{YgWzҶevuT;)n6of֎ ^I_!Elg|ʮLZNݕb)~ѷjN.WW;q"JpMûUުԻ=]YsW ɆC\#$\7\/!цy~&t)l&k7wT#??4R.4G>g,?5 pU|Z͂Kp]k:,+}H5(9XCYpn:8Un 4} Dh=/HfQlaFq= Lj1<f%V(Oq6QT&zTO,pNe0/&f[lT0r4#ʤ9]x;&{- R x<7(P(ZW<{t AޟL0՜&?8 =t)@;}%5$ħ>H xp0_p۩'](&N7yRG!G}5K8 ~`yr ]4bya谔(/ЏWYtp}I%*>pCY)sX-:2hGK?9`b!0>eͭAH:(JF>XR"=T-{4&-MwH-g}Gl{P  ` Ҥ/69#X료ǃלXZ;3cXAtˑL{!:q_/ݣDR"XqIJa[$.MjN$j9*NQ%A Kp}ׄ j݇^ad#y!=yVF̡V*͕b 㹞cl.؊Ldef_`W@'B@V=sﶤ8x1OChv rQե9eIkJO} q ^_l)=zͰ%J4"WF"7ָ#E8$H;*u ?갠OѴ{I)mpn}8a O<)_4~ٮ&*tr%IjFG-F[L@6xCgz GJFL~`Br;iǷ }F,~=F zPg}H;=ԢU҂`E0>gZfַ2OwbFA\5uyUoߞXŲCXFܘq/Zn$2E04yf[GZJg_5Lnd#c6qG$#?u;^7A_>04ɩ!j)HkvVHkgp}lY] CZ6. (:]o=UcTJq8+0{\Z'c?uir=OPES)BqnLX4l4O+nr[--Qcx:o>&%KݣJɻ4vU'yZ햇ͰlcjHj 4<ѵB$%UxxjeyCɹٿ gΘ**,COE.G5bp3wpKB-dq'ri!G7V,4lg&/zyf77"|1EAs%G?XGTz ?f#mO7+Pjow˶ؑo>MHJ}̘VVNUR4 IrVruKdq,Rs98C(PZ \kR*#0-a]=[4F 氒jIN䒝~Tz6Ġ[ 2n4E?桠ʜUilef}rLmVk8z<:Qܺs9MIbml wGGAqr\)_[fZ˄KfO5@=)D0/5+6?XVniڛ/G~6ɪFGŠULDXE @ȉHBe r۞$_Ǿ6T󯟙t[0j?-ۡi}_[є9'ޞ'u*"%˨~imH@NfٖL?7t:?$"[އyXGfkM;qܜkg7dK 泤*Xn>K9փG߹cjYBLa͕ } 9bÁ,xj'gdHʹS]'^tOmc5}C~0/Z/s3xLk9.]}5Ð$*q8&ҼܭSuހ[qEE-m<4Aݧ!CRo'ޙ;.\d PP-7"DGq ې\xdZOp0ާ0:S^+Ǥ;+d; LJfd4O'S#U?}rŲ ȟlQ{WhҊb^wy*  LO3ct`< ߙx FXxT~CXݠ'y%;VX=:PF͋AJgKe\hP?xFvh`C)fZɄxQH;Uɂ)&Bz.큻y=SbQ"h 1[eO7GĭWjh?:"Yk|jda칿/dd۸zm}Q[?QM^ G*Ik~5,RW@Ъ.kb&ÿky@C^?FW XbM"i8FI&m;;[CAH2"}=F9<wo\XUVZVrr*|u,Ta%;V8/wįF%QiwO[0>TG TxsJIwn鑢/6[DUɿl3~4C(`&:rˢ;~a6=$q,7- ā,(hBnFiR~*+% '(=TI~mis \c#\UAJ\TSsbRN3kh""zZ* B}mЙ<V{uq'*E#(벸]P^0"c c%@TKowƼdt4{TtHgz< Y!\G$m)F21eפ%B.XލZP&o͋=ZU+, ˳]_)׃c ʳ;hƥ(2ꗔrϫ+֭rf.B%Ԯ'|Stv?FG;Ge ;x9K[dAq2k^Ixi^q?Rm^Qp )=K9ߚu]!>3v ]*hCYXX=07F{Lnj\> stream xlpM6mm۶m۶m۶m6m~399JVUOWk-RBQ;[ge{ZzN%Q%ezzzzZ&(RR!Gg ;[agN5c%{FFzz(R!;{G 3sg # T -l, T\- ]]]]\h]xiqR21!p67!06!א#U!35q4&w10"02u2$0s$C`dgkl񯘜h?:Ȉ( *) Hn󿲣&p/em_h- M,l.' #CJc]e lL(l]M dMm ſ$Jd?.6NBPl?b 'Q wcy wvt1X?$cblb%L6ֿ߂Z֌@l +Z?D@g_^@_B(sa`'aJ5rqt4u.,w#U;#`˴ _J?*Vfzo-͍`p yI<ęNMGbW|(7ހbɂF;glnSM3g^J: 1Dw"Ư/=يQ#ejA7)1{; ڇ%3/?,hҐ_`G: %uxf:KvX=~Χ],^Vya8ޟs}US&ww%ٕ\! d>9ݔZqvؚXWC­8OF#jLZq(p#TLs2b-2 =:?ooL`x§7 ԥ3K[5u;jqb9L!`l`HZc=T6m!YGS~Qyu{*kyz:-ҿ:`lEoµ~.R5 o*a/X;8ƇXke̗$ͤU5nFSkigV`yr@Oi3]Fi8[/{P"%O0UH[ñpK0z6E(<ZAC2Lޓm&]p-Z8WUN+yEevda!Fb.J Ѣ8\;7EhvǾTaVxHT9PgcRU]ri0L M̖1T'ŕn9lPL+zq"1}*:2n+ 7^oD'c9aLy5>57iDoǟe^%6Uf !۩>YL"M=] YbsN.;w뎙Cp S2M@g" ѐz9bf 3ՙH@%4)4Z2r&< f4RB#р~}vżHź{j򷄚HZ^0Z9%(OU2 ɝWKk0;_\Y,}Xcy=Y]1'kXZb jq] p`xY${̫OTve)އ`c>8nt]&;7~{-zeFw%Zl:Dȫ'>ɪ"QZ:ߢ36P9UCP`M6y2x@fv(}'Psa;2j lLK`vz(.gJݭWs'CZGa_5i#SsX%Hqu!iu=m7pէ*ffiC' HQ0,R -A5اh@UkNkC 2-oq\$ρCNRyQ,O-mXuj Sf߷?pR2!+{Iom6B̫"IkTt|rn{#UU'R-Ū^aSp  :T!gkࡳq-:. 4\AĦѨ :+gڪjP_7@%<_Go)#d0D4IB|qK_?G$G۰akƙٿ>wlwH/%˳vRuB8ηJ=E𕿄9* 3$o%v潨[jhh aPJd[J4SM'Xmrʏ)V}>+;)cxٰ:FdS.#^PDJ·50Edk.]fx\iNWZh>2|6ӎ axp/I>/x:[2zO4ROzp*_Ku)zԞ9Jk2Ts{X}פdc.م| mw^_>|N )^m'(;UfWm¢\_j~p[(>$4+]r;.U!*rAтHuw^9P9$| xhu+ҸOR)AĽYjۑ)p>t`V?{7h}S399T'r^GQ|\hMͯ*VT$*mV.qgH8rˢOqXCM4/6 Xpqd7x(sS (}:5$ ɞl_a5+ӱ>䤭BG*1zN`oI*G]x?0mWһG>+_.xR Z- д bM]k Uά KOA5s"u#@ ?ythQ_n'LOɧب-gRTtn38kOn7)z䮽MjTj^C۞QziUTEr,#E+QocJDi9/nbr~L>Zlөdl&'| YvG2Ɔ+| `;+4$"eq գ@HP;Jg'9hY  rn3"c_ǽ Hۉk= TN00&H&h>wgzlP x[O}f7 nJ.l?E F7WWi 6'k1`r̔D{qͼ黭 KWu[&v} ]0X '-.,TnCa~.y{~%ְi/GV5dh( 3AY8.ϼ"yo3 :+}qߧ~1D^$Fn[UQA# .M3 &ɖj maͷV8OCu-SKuV V՘Cs_L%:$,Mu_>DzMXhLjK =/zWyd#8U,+}\ӭcۯ]Lu<^Gv?slKZ2Z\hzOɳw[::jԐۗܶ9O'D O\q3s9KA]n!;pThǘhrv<\2ųA.-\ {PO]ĹxU$fugzZTJ0k-:2:sשSiۿ}CcIl~0.̂1Aě,MY:B>"^í+&I7oSyUр#/h" .F2i3}s9B IV7|Ps,;T4K׎J_:JO6[h@ꌘAE;*UI`ܘYw bR y P.#\MV׉e,b֍vDМ#\yҬXOPYqb1F*c8bĥ?48vUCݗkMQ~;;"9VRM/6`J, tE ϫ jcN` 0J=XXⴏ]ug{5>ZS;60n!egyf8K lq麅KF̼7UK[*[l @ :Rs#+Ոd0pLp,g+11אl#i/hj<7_~Zᩃ }1c ;1e~QS?M!CPx-O 0 ' glj~rK]TxgT0U<$` R8ZTe׫IfF^VE9cwO[iGeQV$LiIXFWlO5ks7zNC[Fs6RH,F6q [k7~f{l@m6 lR%֬,ڋsoxvMxW=ƤZܩL;;Uhd|C/kd@xfh2 y!KSA!UYٍ3=ОS3μ_?g0e 5I}䜳2ӦК8K@뀨MkBR9W&Lq#JڙH#-z/Z'MlJ!߰ %Ϝy޷x|E2cl&hJ-DfC|BxH$e0{׷(1GTYg)rlFüJmd\K\y| Ց@" Z#~qq5eҾ:P"ީEe$AM 8N_"\Cm;mP{ (k)gMS/p]"XV ʭJu -zbhsD<G<\Vi30&Wq9)e,lPz)]K_l!%FG(U~AҊo-/ε}pd$l 0|!I<=Cҿ08HM3?RMYZ$T$z{m뤪˧$p,7b&+7vYj$A&Qǎ6tfV_+<WD z ~"_@ |h-`_xT)6u]N6;(=PIf{qH=gQ./ߩu0t5>ݥ1rUEљO=WCjKlBw:v "#[BQ,ĥ@N/P)|=,fhwoF;<];琋:P5^np/\h< I˷QM1i!%2D$7p8Dq.*k~ˡeF4n71ifpz)|q0/E&`gny،ޡ@Mdf VE4]{]H<*9%9nhKbC5̦l CT } }Ǧ:b ΰqPh )7Ƣڂuɫkm悥kA~=&{yrڊrv9;rZ?B`߯W!)&F) |ݏi(@keɪ0ycuahn\t[uhϬ% " $P 7 (#&.*[{ 5_gfsmNc/;rU3X,VWPXfƄ<[lͶb%Qt6M[aϸ r,.f˘H۲`x*oCW60#+ +!wI:>.o #0ye~ul';ƺ)Y4<}cGdA- M$5^cٜzIȨ +JlRS}DXh{RsIZ&n<|WD˱w8=U[7ڏ<?; [ssnLgG7;0ڨhZftzvT6;V~C ,F;ł+r5%~Mu2]ঔynmojb2TNafek[D NjL !<b 'US\?BE:&RXP]{CXG>h~C8]()xn̐4rF]W:7M4!;姺7!`Ak+vCgׇ m1F![ |͙F6ϜĆmsR1bfi ȋn:(hqxۑ.qJ\~=LAvvnNڵ+H6_W6f[24걋a'-Rvz L6:_-lN:8F6mmjvB2^#o~B~e.^cLe ?-}:XVs5,:ߟ ֡~ ͪJEr4/7jYyNy;5@!{V_몙'Mb S>гVݹi'o0u;byKƅwM[N15INf8X˫cj7wFDp23B}*F\c<;P3|}4LzsM %IYhG m5SZ1! 2pc/ fcyVZjb{\{Ԡ˰j.B5Dm׬^)Fܰ}}n) c.IkVB`Ye]%gARfzߡ떺^t6RN0CmAsgS -0L|#xKXPg]͕ئ 3`υnS.͝4[w ]:T4c>oh|% M=bw,?QF˟L]|\O&WBwQ-υ[cZLjo/_~Կn*r<)\!o{*U dHM{P̔s;R}QGw7fZZ0Ԛuf@pSC&p]I6L/6:|VKh3wa\.]O;ᅔq<G%c['-3S $>8dpy N %)idؠ @Q0cW6-x_.絽oMa;;Ɉ"\~$4(+x QJ #'ӾML0'1MN!0OƸqr5l6n=9nSzXԱn0=Hj4gschNKoh3mD">QEĔo_C=s%(Bd?|"*Τ@3ag*KM4g,d%w>#?q|,bR ;6@(œDzi8׍m[xvmWpakA" .'"nÏ ?O А=wɧ+|$1[Ij5$n:tN@E/]U~l KNMunSue;eJzb&Ds<4%Y71M)t z/6g ަ݀ L՚B(x!w? kὙ#B&ZnyM1xgEԩ0nwŭPKLE/lW;˅K*ko}@<(x?m- ;=8αqWطQ|[I=eaA2e&Pۢ +b?ذǤY=miGy]  7]2ܷ0UUٕaOe"h.w&2-s)kԨzO`btD7Nd\tEN˫R\ .7䧐͆&3Ex>1F~R{CB.2QzMVMTL"Qi~vufmwK+[boo@U~48us+#(Hf ^n!hLtm3һr#T";v UfS# <q {X] ׫;*ٲ’$1p^~w&BNمVڳ4rN:y™8Z;Dl7| p^2{qxS6F>H&HFб?b{|<.`)?u'] ֈUNBe?vVA"UA1k|$NNdmB]KG ǟ.\89q)}SM,PQJ{g% S1*$KzC6a!9ଋpaC@< GY EL>ؒ9N#\}-zg@-l53r]h\,)nH:pxqn<e?mNd{Uؼ'\2p^d)gp5;p2mS6CI7aBU_fn#;6V|Sb@&] K<u5 Ȧw$T4(? WfL"_22@kyҢn(ff3+UxT;IvwhKW6^_O K2)R9G|| L8- ߠ/95}&XAՎW5vĹdqb8%-!^)8&gD>+) M!}ui:Wڴe0?W.VP*;prYFI1A4/sGz:rT xZ'5PV.eGt:łyzM=pꑾHL"m3RŚ5W2lM$'\q>tدXEN땡0C"UHS*ˏfC S+׌Gsp#ʩjq1g?QuX0_$RFncqVТ<`Kh}1DŽp"ciˤ-=6Nt5l& b.eO \|PjpZDd?JCxgj0$CFFE Мݍ CF5OEF<0 `n};6`h^>DWXZZ}PkM;@`|:is?sd]sEuLtpBNcV@)6sJ5fc{baq `4d 4/jXA$gCA"vͬG̊uP6(;[ꈶTς8Bͦ\wZwv30U7K>ē.eA2dMB9#Wq=^"1`%7~qTxBIkHL3I-1:{#np7A fdWe[)kD#%~(Rq8]?Tl[OqKtP!5v`!NIK~"4 "K|1V~'\ZPηZ?=Ƃ:ػ6۸: ƨRTk=yE6hNtd_whY9< ~_:~}>p ULپV(j7ѐCFZ.OT,ys#clgf` {@%m&F^0 H~T{Q/u|7bivm \Kጏ _é>O'4n@ԍV)+mېӢL>ةu_:7L5RIdmRղÊ9OnmFealn-)b4_5Qǐm曡cʕ˥~IX%Ku>!WJ"B~PZ Dg\-ИɔM2ZgƟJǖCp^x9fM^HJzB1x7 uK#@e!o DZt21,PzUPD,2=gjٵ#Q|==R+/igqZn"cmVݠ/u}#ƪPC @נ_xYc`;ٖ,́T&.v'*'bځ󵐶B"WP+=8?Rm,hcNXd`AdĩP puPj.]/_y Z>'Z PlqڶkveO`V*™æv3BݺVȹR~Ҫ ?H 8[Pm|:}ђιE'ttIbA8{P3#85ʂkBDVM<cCN!MVhcL*Yt5ǻ6v*ftU*YfÜ@VJɽ!Ÿ~6 p;,\206ޢ7@){ƠtwjV@ĬD%"2nAReĬ5wztq}z Mۏn~x0oWtaf}N&físO@=*UiݒuMk=FPD37(U5IsICtTWj!x~])dga*61R:9 |'*{R#G`ڜ1scpSȩ7冨9뙭JR5.x\]7_tq!ȹqey4fّ w5 ̂Jlv7 |.T+hυǍj5h)i*p\ ?v+J׆C|jFݦ)MЪ0)BR3iM6GP׋[)~_$S>,9TM)sɥ4No[UWrW -Tbhk;*=aQn78S4Ṉe 4}v, zOl O-oIw(F YL* 9TMDj%h& Ҫq37JS!ƒ`|\r] oq L|t-#7hJ|,=Ep !-CЎr6b0j--@PbW}&u6#'J<]ReJOrAw𭯶Kcw77Kݾ6]\y\U Afz@Fc$k#dK{Cn6ŝ?aưO@P}[Ծs[! 7|hW-fOѲ`IPw/:6i/x$ha]u=AZkh@`ٵ7#R(Ltଗ/ zcSQ3́C &Gx߻AT@ _ZS8+OiI*.+_-\>]:IEYL[`Gz4XatHUzz3\fGоWI\ wļn ߕE R\=ѮJeF+r($8yw]/+a$} _RNyeT1<b*M91"#0=x=couECe@ /eo ~Jӊ؂\ C{(=գB ^ڡn ƴsu+]T80ԥ^ [dmbfR=Oiʾ`wI&`SWO=nflQ]nyLZcDMX@;:3;C^Q'@cuZ"`"(ql.o%\̹-5Km\ff]״\ipxCA<nZ,Q-!* w>˸A%]h i' F4 ~lu~8avkWzcDnb&(ԗ%HJ=C<+  \($7xSSJ2+dĐ3Vk.vUpa^D֍Oo6!"gC;Eΐٽ^Ix1jU IA筓͠1:o7yjISy!257OCDWE{p6:M:Ygů,\kom۬o񙻍 b /kXӟ#`uV J` ¼yib?14ձRNUN[):l;[{r4nG `$Hy`M-5mjIH%X 4a"ȤPɝHP] P@ָl_t Z_qP, !8`r_0vA (PebsG[KN-/D}wٓ'S UI)Ux]`Tu:w|0V/ EOKx>;([X!7VC(njCN]BYM<㵐Yw&[mDvKG{ݎ>( 9P+z%={Ld`T.S=`b<uMQ0rA ׵#Iw{G %YD\0di-G=QtO l"D6jBI/e\"cDH Tμ$5 ^1i|mήBBORo7S؎!x.,b?Rkg82~G0QG}*IÃ\2s̗B?$LCs`8Ԏ6 lFݞh4_>-/d;qP&¦ 7EHt٭b,t&!W XAwM~_2 `_eψ\0`/x_*N:SNjdE&vD{|:a _^D-nZE$W$3z({ŶunC7|壮Ͷrx!d@_s|q$#az T=XM1h ٸPS{Pu'y3LH1屩BC0I< >DEm4CX%:TqJzKF>)gC6*<0A@ՆEk a$^eGk5@2'WO7&cs5ɳjus '꟏[ӜZ=F#7qʉ+\b&נS<*2Fl||m}'y Βw.0(Mb0в@fbˣa3,Ǎygl[ۅC؊asKFŜҚ* @􄁹e6*ʜ8dkEI =4/+h ,d+/aH(6́5U2@m^[ҤNspQT/A#(m%C"U] v:?e{aKFu >|<{G[nSʬОy E{Rb{A T3I"S`zJB08fY@/ e91qxBydcͻ>.`:ư$\’]ZUAyiRojI,M yKlUQ*ľy1 t*4l(2="N罹? D q "PŨ,rw5_+:`ij9:7cCTii l"_ 0é ;#O(Bc 4 EpuN2s4%i|EMo_E VwJ8lTHHfJ vXcJ`zڻ-h`cҳ쏒r'ڬm4n4Dw6F NC,:v2\fUu?y0^ K~[ټh2Ii4#)ANaf0`9f F}_u<5 oIڦ:]6T/b[?`Ca,XS Sg@%;U>?+.ߍT/_Lf57_R6^gՅ .VW|:e>3Dhx' Pu~eo*o]kbXtQ\03F2a;bNI'=$h'@ѯWZmJ>rFo)IR]1U-uD747@N}~pF}~`#id.L$)u4J ڋMഷDvwz|QA>=ߑ9˅r Z ,rvMOy[)#,"aS`Ed<_ 0,Tрz/-aS'9pDt /k7^o4׫H|u6 #V)ȯGM,H5t![9QxU@V枳 Uy/Z=ebbA]-zP6Ȕc78ؾ[Sp@ U[Qɍ=qƔ%Mr#/,l2 OneKr%#udD<Ϭ( ZaYsLGĪd4W3V^81Sz%/B5tOt$rAy/Y:G嘍Z(VWؗCF7GF_|"ւ1o|Fgw;TEpgIf;-烊R=a!ރ,@cUR!uv}oK# Gމ\D icGtJ-n4`"&{;%.vϕ Wх<_t|H)_U+S0Y3ni\e=Ѷ %~ZH?) o.81u?Ea>~Ylfhr㚬0<۞amwL<ِRG$sߝ{<Ƞ`OΪpVQ\64yyQ䳱0h!"eХ ]"YG5y۸ĥ`[;e(AXƥqg<ڦ8[_2=]!:E ^ yҨa~K}U׍ Z]/G ?oMJzGnch3thPj~^Xj^1b|اMNCiG?/J'lePA/ٹ[{|mq ` D!SZ.Vl罨 7;R~Awħ }dl3vl{^nqfssU8yjm,t?=b{[<چ >y"zSً\ , Մs @\,0kMW͒JX,0}g-75ׇSL%_hJ3X"Rn},9oyt5[mA0![&[7R>Q}`LS+X% y]+i/ H4n@6uq'5#8gaY:~?;Sy&Y@64}RZ+D'CCVA(6VO"ۭ*I2 dw$mt茳Yڿ@[Co8{!V#(yo#L^]Kx8b}j RWy 0P*mibuɍf'YYy3CS3{)~V#-L6TqA&NEj SKG}ġ2@nD$e@X•%OZ&e3XFnxҨA60<0'l4,~ p2tm(>Y7v&Ggκ^n@ T77Fq7VD RΝ /ݱVM R_kCdݒlgn\/d=v:(v /yYdc`%d?8/ i]Q"M1hمSlpa++//pKp|:m^9F3e 5H^P'7!0xՎЮ ͆r+T汐 7<7 [U(k '&OZ0|p!<jmk_$}(EqݝԊi5'/ԔZϵ3<#8\5/"9 -h7{E7҇OS%EOsJV:'#h a?BW aHT۩ l`>* sTw+ @ I+smaiCa~ s<KmǞW*Zż*6 x1 Į,;"\qq4܈0w4̘tonN'Ǝ ; NʑGo"L <&J`1/my*SS 8)`KʛVC7u(V >-jW8MHoDVb %+A+$#WWGUGӽkWf%s1$ܠ#o%SMZXQ?&h⛢%(8IXΎl5sB`B)_h4H7OEm@ӯV ڣַO^`@q((zܰ r:'u\%h/i ~,-J27iFrW6l+՝!08Ne&@te L1$$Soџ$[L9X#g>#g#w1 9=1Z4Xx16#)k,t^q6,q'lIx #tT'K(8v5{CnffD+Щ0>\*'d`A<rJ*$!Ȟche4Mkܴۜ:t坷>z]=߁zjc)Z)KߧzA "vA\8q$ ͷX ;n{J@P/^7F.;WA!>0C48.6gd>wtM<-OTlDRQnT|=g;|?-|EkxH$L4|_O?o SγY̝ٿEc&I6GPl"ᤒcP{6'{y&Os"r`OPSwwg%8%iص1<ɩ:wDZoHsM%G^Чk3ձ_5]+s1+qi@9hYR>b5 l3&V?:͓pR*ȶG=",YOv?Dܩ("Ľ],X7i$n*dZpQ00,[Ȝ'^( i`2rކVT4VƣeݲWeKnuS<~[7B+tH;DVSAjKR{윁RyH6 X%0lCrt50ỏ:rr)!ˤ6ha,e5:sDG'.165 T}i OYȷAHzi]M[HsMSf8!lpɟn8mW$}RjhݺP ߈vg^:>}Q;Uqu5 1r)sS7ij&ؗ e(4a}2Eլ CDV_xŀGN|//(r@BvQkG+j?"8Ҝd7PuRyȨ;{oگZ(F9|âtm3F%2t ռLR _] &#N6 Rbb#2lVlYͦ0֩*][ CQo.@*HsHPC[/p[gVݰE*)(d?1snmvT4r}&p5_$\hmDeMXzg]L*iHW\TnLSPG!~CJl{ɯjRړ )ކW4(2R~u?|,욾QIhp.0uv9J*='i!J;ZZiw;Ik3=Ul]j f|qo*lN"{󲨡 Ro^f-:Ej2|Lb1bU< SaG~$!UZ JԧU^4~Kӯ_ P%7)2D`)dG>Ka}q}#9*trͿ$L)*Niǟ2>J{$ȞIMx%syΌBU#z -)qz 6񢁡|%.]FZCo8H1I@zQQ8/襍SKz)JpZl {* π 3qrW}emFT7Oi?(u6foyg@' I'nr~i2&)3OyEO3N2m`P ۦ*mOb:8Y@}ذ/[ ^^wk2, U%\dLrY)3;H+%T`"Fԣwr9"e=aJ2xe ; LC{x_WI[ s8F:Sd6mۄvs\xd,AK!ͤ!A]u;9P/̛ƹ*%G?/U3eIҸ^)̅;\h4D$d#߿;pǏ*ڴ! T?'󺏿JJm`mg3ᙫ~Aˮ10D=:)K)n]8émv6v4U~pƮ$$%Yp7/SW;<༞.Zֈ7/Q*]t%բK@ҁ ێF{%Dw! HNVmcx;#-'ֵl~Jf^?#;<i oD8m]]>F p"u>I8>E <ߟº3Ĵ fg~4:eEF;N7(aӝTCnK~M{P(}=X" $2A)\FP7M׬etD?G`\d/u=V~\ xYtѠ {?w)V}m@S @1ДvyV`{kؓncq^ôdsωK{UO]ODN᧛lҷHNl";5U~ nk>OA"&}.g;9="qfjC_Cд_ʀ+Zd\[;V:+vGY]b^ 褉 }Z-)߳J$U+kKG$[#yU{x 6 u"Whlv~L ^ } @ ΡN֨`)ފ!߯di9Hɘ8hW_wU~9ҚՔe,$<"9u^>;?Io8wj*JW##ؼљR+xXe䍀X"&]p)pHE^ueT4hP)]Faa):7m^7 kca!RmI"<NЀ }f H54_S&IgIXJGmb4T#slR} wa1]gFys4 Ӓ5CvVF[7%Ox rt)&ْ,>Vi:&,^@n6b AL~)b7LE0 .γ}AkgPڶ3z i*/&@NY+ǞOH%Ffge y!4l'XǢr熮S?/$tҠ/ I2ᥧ${.vJ[&_AAXt+n&H!iQ98-k 8L^Ij/NZ~!&o-嘀F[?ULjQ-"@vwjI]%:D˘xX?(3ITT:UB]4 Q*#KpOF$Ă;1^,dj1tǁ• VJe{^#8'J*QU鍾  r^?LZtcw:7/R:w9gcNퟖr jhxG]ݷbuŎ1ZJ#wÕ&jz ?!rї;%}pzlWDQfȾͷ4EO%Al.k{Zo8}t;`Gތnm Fv<{t]G֦/# O}M0 8`Cd h`Z7G[%}Y-spdWT' _kCSGEII@yV5UpxO'&)y(qodEgCaG_[&@wCi#O 긳ӤOp::n!{Hbpv=/EB+Z IɝjX!i9G/ B0TPaR,^.U^G /F͕jw˲6_lCa sb́&29X3b:y~1k.>SC l]:pq7&2 BB 2[#Xu0%~5tkVn7OXENz(5h#-#Onx8 H_N^r#|S-=miF#CޕO%ttn+V&+̸="utPQ/ɪ5uK[^?Tx8$Dfn7Ͳ܁b ;jg(3Iv6:7rܬJ_FnJ/nSK4wv]k'dGN: 뿔 %}lȭ7T[XoԈ|(5`4ĩoVQjơAoH:Y& }U=!ajɛ}'ilWwB(AJ潃 _ʢ_>a*IGmj#R*CpMW1Ϟg&@st0'0,H}GH`1#@Ndd)1mI#F;GRIe:!tXL w6Hה,]ŐTpo;r{~U#< t_[jwqȮž Xֹbז?U9T/hwq*XhJɊ;6Uo6vL=K>k0g!ّPk c7M aGH=e;Gv+VdC֙>R;"ÑAmoL(󐼿`e:N?{460@0,cLА-OU07[ endstream endobj 52 0 obj << /Length1 725 /Length2 34480 /Length3 0 /Length 34947 /Filter /FlateDecode >> stream xlctf.ܱm߱m۶;m;mF'۶~xgĨ9Ǫ5k9#*`b`%'uZ9؋y@3*`abb%:8z9[YXLhYY94lܭL-|B.n n WK UTҖVPI*$@gc[)@h;8l3:؛Y ÿػ]f`WPTP2rRۻ 4uu#d?X=#123̬L]&@ +{X&mo@3?n v@+ `t{g4u5uҮ!lo}LQYHXy͔\ &?Y''dR=*fVU4v6ſJVboEXa_Iy8xг0qY9̬l.V.hoY.& h `j^/^4[ A;;mN 2{b5difxx{O0d¿{#}Bb?%_})!zS.xm43UsX_ Vd=q*Gd5*@N\]x֧D Z^쭁FߐZV9F4\Yj+1wKamSlW~m _Aoz/=3.S'P^SNzg:ܝqԣttߖ' ;]]rs[D!:M2$i9|VoC.apQfad/'z3z. _㑈E}` pc?Ņ}?RrTԊ590s5Fpr ?U Eڊ(ϳ?Տi%Z^8eC?yWՈn4Ka{ք8E86| vm?tuƕڣޗ6m8Cۧyrc1Ta$m3P  1{ FźFºjCϞ8x,A3`r]\z/ia %>#?%K&"tFҜ$?g@}[ߣ o}"ѕY;w]j38~BQb< 'pUN&eH8俺.7<_̩,G̺L 0@׆|gްpqM.tiKR2gf`իYW{zpwz8=czů.d۽A3MsMz W*B Dc/~?ߘ(TEN$kɤ~H&Q/Rf|2.aߋwZf 4⮩j8SjCq lIj@6zRpM瑘jϮHԆ3-{\Y!N,]L+e f<đQ]9 ƤYV7o:.klR:Oa{ޯCQsmńKrkAAor_JKD>9D&n %.ovdv7۫g]fzmRT@J0잣6eυ):Jb5a^WDZXpX(w86ތ)}ˡty$ջ",𧎟xNBӬZ(xz* JE5Ç|/~e3mx=X6=i0'9FU@ʼnX\wL ~"Q7 ^o, uKGf4ER4軃 -$1Е:l t.|YPt !@ dbG951RWݢTď GQ^؊|QFJ(w[$ʢj?'P~Pl}ŠBRBvףÊлU"Νɣ4ڐ%,q4=/ZUgG}нF~K4?e錽ddE}^<"ސM"'B5Vb5a1ʩ GuVa7|:]P}D'V~75̈ݱWƶB)!Y5ѣN1U }u2M 2&: TO}fښggzYkH/-/_4ZDž1 FAQ4/u|q\PCEo?#tQ H,r},dy_!CBT;ާc>[O(ӠfDㄶüWe:Ca[; ↏ I&1MV-TъTJעzUX ubǵ zּBƮE p8ؗԈ6jkKESrF05&pC[SpCz;yF*6@C\ЦLTaX8#c=ul]~ʫ]s&ŷ=ڪϏ}=5?QiȃFΫ")<%cJT ¥/SR NpKjޯkQG; qҨyo'2c:>E ~M;g5b)C\"u0+r\gbu#c: ٌ͋NTNgOjwz@F#a:RM< _ rQUegA/<\nT *,dY信# 9 V/ !y h:G͉@z{T- |0RzK|YjpB~)FrB./.oLWSHЗ9&48ch >6u ^yz.8yǺEƴ@i9 !5mФQZ<\'^*#˜~ufb|6)xnïق݌j&[^yI R7y5Mk%[-Wte/Q6O_DSFp {C̗>9{aI2GD bW[µnD;G`:~hHA[Duz. WIkxWKp_|JR^fW.UkvC ۯ򕇽a+ azPQ>ز34OwF'ct qg =t(KIi*oo:zc5!m"%deu#w*!Nz2yO/qkK D=¤vs^qӵ>.?|*鞌N>t8+c;ιASC@7v`+8uft$L8|+쁄+[ }DERӞ+|=VӋ< tcr2 c\)u*I3۹,*Hлϭ6dUg> {>en2HI(K>+djMbdt$ȓ> _~2ܾ͋w[HʹNS[=!`O>3F]1U`R+\9)")F k7;XqU-ai92L~_<oi0<c7]s}!G)7Vf1C`a_XjLRTM&dې.o_#T4E˫hζ:t/m/[mxm^R"ƒ&0"j}mvכJ˫S 49WڽedE#Z8DR=K#ӥOJ@ ;ZCIblow,KLӄtY2Hlb…c =b7[ڕ{G̡;^RrHj!~PteW&7O2 .~)N*\ ӣ}mv-~Ƶ Nyl|NHy+qw ;~$ ,׵ [ =]GoՓ-FFJN:7p Ff%y1/9=G*xT[kqٻ̅4CTn;Ӂ h3وV}MXP9)W6wK+9Ji7_}G!zE@ m1Y񿸉Ǥ鞃\V_'Mg6V^N$FSW*"WSvwmR_OL^"`=OpA)ٝ<m-M;yvd,CH}Ӗݎ拇Ŕp}I rݬ +:;?&B"D8A7Յ.kϛGJiQg'tgaN'6xuF}k jYD3+W)8.t'(dDx85%Q_/̑eDc x=O`aA :t4EFTx,[`,GkhQ_l\sqZ.Zg=@_ &]R5Od_C7̖.Kvx8B}of"39 vقջNi9s GXxtY --(7q'=. opW=|Bu*b}Vع; ͹ [`N 7d ̠^̳ʂBj$r⯅:%z gҬr'Վ1loVժToe[4⥦8O{r߳ܽ3ShT128ɒ jW5_F}Դ VGo`ڌ@EjK\a4."et)]N?X^0rܞR}]ht_\ ڜ, )}'Rbkl׆-˴9q4L Kʴ2 \ G/}VOŖrsAC2;ê,>Gm;$IcZk7~x>r-eyވWe O<8x^G#߁>fe[pt>:o/#j (]û0'ےCFbv=Py8 T/we!"f36ȳݴ(UN5v*JBTp[Iڔq"gC:k%W%N9]Y%.S$`w67D.biq\A* Ÿ^vj܊O7(yޏf,J` hr6tϔGKH.4XUg=ej1 ͦƁf7el!*0IM?'O}ٺ.8[0g F,4;}36k(Y>{緑$MbxY>|Qhzs~a1sIYYDJ͞;Տ"T=_֪zT3dXS+Z*8{$Pnb6t:F۶E6'?QʅS'=g6"|izzX"W(bȻ:FNJ@}1ֿԾQo ʿrry7HQ4!U #}9/čp9BN&g$A" !}Ĵה(\y۹ؒjXi.wUM<`>oT콎}9Gcc3'Mb971QgW>"-ejUEG?K?'[4<>6,H7m-DKCݧe"Z"5ǻ֝!MgS214.b'E+vFۺ$:-Ի3^_ DmPۜWU 6o__nE[-a#s.u9 J<@n\\-FS%\>K%w0DV_zɻج9LgcGMnS 4˸/L HęBt<b_5agK )E[}ŽzAF"{gz \"Gͷ?g\?FM0\ NO>2m aP9Uj̘ïXޕ]m9 AP|.mBzJfhj/-J+0{V-xd -M%K _B+e$nk8lvOĹp; bk+MkTUs2Di>.҅hVA;IX_{J7Qqj<6i k18%bY/qg8XxcŊ1{lmlR-wf#S4X"|x&Kyg{X|K}F2TF%gƧ »>y ф8['vC};A°$(T`%鋾e1хpRFԡ&׫Ur础u=5. 5A|% O/XQP 6򩺞 D=u;-統$y"[H]0b0GNZTfʗhh>2fё !3TtVZr5^ &>pc1#0 q~pT(QDr:v'u[?|g7;9+ca6ݭJ//RQD\0砭/dJá]EO4wReib)gVmg//9˵6;{ W=!ͧ YI-J<$o5<: ]C:d#ǘ~}.^dfCO"c*)oaOd~BT؉6 A;~oV8,]D¤uZs#X,{E7[`q1&c=$>ʭ@110V;&="󔃦2 8[M\٦EuޤB̮QR& e9%2]|pX6Ch %+y'j]߿e3ZxoM&ڵO*JA֮UXE̓@p+r)qJ_nElTABϒdlܹE ߀SFi5=BOfMt#MiNrPoXJ:L8Bd8z÷J5ȯ-#`3_h^+z*{m7B;rn`fV4H藆7pc΋hdU}~q;߅:U–xZ0!v7K'jN@% "+6  VۃNEƼs|SZU!Se^ D}N׿R;q %~]U?ԲN}\a?䪆st L *$_uɇxpP-=`zL2/ȋGzR>ED{_ jZ#No ze+ %&$F.UɰH{ @y m n7ױH'c[*=S׽"!Gͯ~&,_OgM'շg_pLSqA}FkRU/CW1Rp)+dHd*(1dJՀ v}-MGHLyj)˕3J݄߭wt-a:(Ѓܸ za菬{C(9ڲ)?ѝ7"x#fX\Ae Jiq_i=:>rŊ OQ8XTUnYه,ߞ{mb CQ7^җaB,+tR˧q/\D\)ޯt %dhPX vPY={th4&4Mkfm[ox}brK::1۷@coB}&9EV$ gmރ+&FW=iۊ)] \K#Kn{ .P'A. $L#!Hk ?,"*^GJmŌ{H/3aʜrf/d}Sf4Ԉ ۧێ<xkSJ qeRw+1LBJBGS&-J}П0i‘Z,g4 Zpy<ͳ8嚚NN[JdExa kO4PsM{V|G] )}%żfJDW-F45~jp7~A k@Mxk٢Dv%H\QK?e{J t^{]*U{ǰg8"şLD! "jl xŸ0< `O)gFneT;sS(Ѻ'L*y9ZbhbGne5K<=T :BN`pd[ni+שFUq) aXsq//2Nb/##6e#d׋ dr&?{WoRK-fg^nMOj3F1LV^'Lx!F2fW$@ۈҚ(}FL$q@0`{~՘~4ަHp{6sG{=\[~@mgIҶ,@R;` (x Zm FKӠDO1)1l97˽z,~5/]>־@A+J{rͺrwBߊA6п-|ƪ6!c<=-<]_=doHھ SdAz))ZC٫x?؏Jd&%NAs- FZ0|r #{?3OBٟ&G+ 1>4Huc/'j.x{&4K]pcpv?x|iETDde,8vBVRuCtQ%棞 aF> Rv@Y'M V-8BGD.q5L6Z?+Bl9Mjtk#{uNHoyF܈lE5BnU5ͫiCCV;$-!a-nܩRW qku@o3 Vݺ@gKAD. I;9(%uxN.O0-[?!hz5)2,)|AәSG> \a?^2J+qW> "޹aεϓzET{ʵ٫L W\[ʁaA]8/UIFE4n\UP[8"b?G>qNCzs2Uwzu-j|%#(.7[1 ^,!m}̼$YW+ͧ*os?N PwV/^1NWid[dS'jCU.z\fmi繱kb^SVD']DQ;Z(Z;Q@x@/:z> 0qq^"1wmERnC< TZf/9#iyW2 `T|MΦ!<EH(v:#Vތ4{:#h叞N`y\>2Ka%%bF#49q-^ܽ"!w,,,"H{gk>opYky0dyVYvfC| 8"ԥM?[b6?6V6a* 磑r+O&:\M(BꜛFy˂U4kة eW9{6g۫ge{ ]/B 7bI8@!$8R gS3magKw=O-i+4-;Ov[qfnp{ۦjxGQMc/H»lEx;jU "W&yr291}(&>I@Vc-0$4~&W(h#`"\?'nu Q(iS0e-.פX,萂QξU __:٣t%Ǖ.&[3FM7{J\2C_uP-lm7 mFgLGW%{gxH>դlF9#wYscFq.2T_A%!Q)rWk)(@ >g Nw1DΠ 8¿:2^*Wcj/d[`_>Ӽ0Z-scƀMO?! f };7JOtM3ԃlAq|*{ ԢTtMGT O" [}l^ݦlL0شS& c~%td}XไVp ˯i}6|!;,2h,AaQ9Z!i$p#b jD$9>rt݈anZF$l0y $ +R yIȲj288ZY{ꄈ}K5ǒPUoA9b(w0}ƥc7]wW\8[7TD۝~/f~cYk-=/v' +~ X -qk >Cr!dQḟ5-<r^f:+\FRtRБ 1Cǻ{m|@4ߐ eLP(ZӼݕ}u±cQ{%&ԝ/oD9FEtq*VǑ:Mp( 馤䚞 ]t@'&ͺ]o3[ugOI}&њU54k~88HQ"B猓aYl MJ;}(mX+ҽ1NMG+cp 6*nsPu۶m۶m{m۶m۶m۶{3* I})KEm 1B۳|Lm*Lv[ ɡ|V(^O?.yx!z8>[3G,g3& 8ûu93W:ÀaZI$l!/=ú fS5K1~ wm=KEch!5Y:l&9V9W䢃4^XT@W?d`K6%e1;ppKXdfGa\kH4:ϳvsC${#\Pu^cVagu0~0ڍ7[DDR_ 6a9T+}H/6d]c|%-A4F2dO腕QMŃ2/ y NHĴ*&"i'ٳzemj]Z F%D d9 0#ԕ#S،J:MfHn@PgtG&qڌ-r7wPK흂-.V&:[}9bT &N`8F\pFR9oFnToW4*]|ɊUQ,:/pk.0m=AP9ٱk3+9)XzTI/~J^lʢ,*Xh6_W5σ8.?kh^0N?ƫ7d$827@2*Rqz]<6*FD~0&(h3LNuIac^H:CkUUbM>°VՍȀ)8X* $FF;.p ,tJrDЉ,?qw $5XZJ8S$c-lt F ]nT\ǂ^իBd1˔9ۚ)s&ՎϦK,Y jMjb?`)@];:Ő۲TOTZO}2gDh~{C#1a㦜sR 39s܂ďݕş*͗.:,<+GX"4%)]M)is(@5},1fpI# ahwRE,\@{5] Ы %}ACYNncVMf7@eۣa8+Ю biViM9tR-]OOč1_6imepY$+K?ϝܹ^NrUVu&"BMiO'w}nM6.?I- sOIN:vEU-R ܚ)Y"/s+ #<£y5!IxHLJhhRQUӘcMx 5ӽ&s*987YbU3cQ)3pp=+Dj8чePJZdϣ,h&}lWwC2a`ӽ&ot ^>5vDb\+_DC L{ @D>^`HA R:lڨR[QC] ț[C^<6P"]{<9E ]ߵ]xVVۃASń}I~4f;b kvR$c6ŐQض&2z{;k X1>T9a'5#2Zy ڸ${4\Q+3%:kwo Z]˝S6.KbS 7և^٧0ڒ#O+K3ZFՉP8_Є,f%f6$TRPt.oA|쭨P,T9'_*9^L3*=ܒa] Γ^Y1U =}J~$FDB&0X1qGd k Q>@2gUptq%) FS "6)a; M9AWIOGc\?FE[<ü` Dk-W`ܡ_V$aKJ=ۛq85K!~q 심Es(٢W{a!P6^7 xDw1ը">ȹ&xZo2RN~ }:$Wg ],QS*~МbAFh7)P%kx85=dJ3E:)Û!D*Uې,M<'1r=)Z UJ'd'X4cO-f[TI{"޲6zҩGSPMe]_G1jWdK Eb% dzޤ0FKg$b 1 ɶ*ma[Βo؂7.=ʯRX=}ER+%eWRCzWl@S9VÛ(g <ޚAXK]?7QE*+a Ǝjn;Ls\H*_xtb0vP3vk R@ sW &/;`%Q[-cJUZI ܮ/苖bB Sj^Ux;:=A˂ JӹA")Py2~;`w'l,,;/{tyKQ l5t㤅fͯ0ak`~!2q"n E' VS1H_-WHRȦp&} 3GwU1A_|㳎 tBe]PBN>@#ggm+OyfG C'TC*AAb"rudG.OA[ŅY2}鹶"شa>!ItΫƶ2O@eMU(UR:%K UemFc8qkS#u/}D| 8Yq` a}IDa %# `/}yKi1)ﭹPԱDCޖa3q')-o#BF$|_1i89Vq\mi򴮘$8xvMgh׈ǣKc;Qj<f,4c/m(x6d:J,ú"W{x2=ZPզzf)ǐVzZjjS{vJF{9 ]Ⱥ-WF?Uџnjz\_o{4&5ETMC)tWx\e02+{XG" 43H?~&JTNiQHwkԃDŽ׿8òh4h ;0%" IT_g9(86Vϕ9r!vOax/eX=taT7viɯ iVk _ OXJYӆxo$i5X2&Æ'^qX_1ɳ@}0|_@a *Gvw 3-Cm =sp /S/8z) :M5&GLµ9(=MQZݱ(e/$[-CF <`@ZLJ忏bP5 pA>e朇pf7*&9,Qt T<)WO*4" f URz#Ib8%9Egvvt<ž;ej˸{ v78n$ qTŏFiFM8Ye.Lp;MTi|h $d@+ͬ ݟO640,6 X=_H^Ubmΐe=`:M{wtDT^r=vK]:YOsLyD33R5"N9\Qþb^W"] oiʈmOu_y ޘU)64#U`QЋ"R;Em,j %~AnYSRy{+hPtOl{;D)՛̆kcW' <<@xw菪 =վd|4ՒZfj2o6+nԒ*+LPtw%e Vyfe(${aO8r󴕩L=+#d~YɥSBp "6'%LiaN!▕lv]O#~DCe"ahf'o_ͮpsPDj[aDbp`:x,\u4LiCmgJFxj0'F]3/b6=ƟWnZ߷w+m6K`Q~QO`vTc4%g|m~[U :l5eY8YT ^B'-u%F膌!N1vfx.j܎(SS ;QWPrQb!5v`!l, 0Faut` Jv̀RF(P[ι3D=ݟM,,VN(;S&M)ܗJ0 mGО1aq7=d&Z1A~QLBiO`" mߪ.@j/$<& d3~{ڔĿFRF3b{&iew>>#Hp(:+asDO!Ye@kM!TiyD9R fQ~E-v*Pq܎#Y[W܇[X7f]ck*d^Lj!lBa}/F6 /cxVSynd}+dNXo^3EPoDq1z4,N2 ?xl@@U(i ]:1 p%DVk@SVH1tOlu*\yGv_6n\ĵ3ᙏe#V)L`{UFC'/?PF*9wݑt' 2n5 ,+ +%Ciq14E!ˆkm:s`hRYo?毼:>YۜܵP}K? E{QP\nR+_E{iV4(*=졐@}6PTɜu]eMdX{^ԾgV vC|Ou+lRdGovQBk5K wDEP \Qnũ:?>/hۅcaczw𸼫I ?"5M j+1QV3I9u*lhٯ/n KӄV_ypFDlVM4H% ֔?<^2KmئT aTϏˆ=V%ӑg8t N|[UkE{ nHо.w:_uQ3ؔ&{ u1v~Mw/NÇ/5XgCzR߃4NؘvY%7ʴ<|0?b]jJ|dת /pd^:Z,d +[vEʈZj@ ct7O鱇 C~8Rfsf̸h6uGHqxB w@Sȹ_go4ԋ׃&}Pԥ&w)W=u=&Ygd*;55ixO)g˹n>mL"Q5wDb&D+2,Y#N]"w:Zwe E.Z6f2>DIA>Fww{;ʌmKc7 0-H:f|c]!am"PKըOeTtg0k?^E2+9f1h6[?z2* ՌMT:u,Bi5r'q35f,^1$\Zm 3`7X̣wXXӳ{ "6i=OR"x32hiN.˃[{&jD"Z \@ ߑXC{xU)4N~+ܮwG! I)Yz_-g׮G%LÌd8+hl嫴۪5 ld0 8d~Nz;?#,8(&aTt17 e;/`~e\p<-FyXnݻqF1UnTLAN2剒qCH +ql5F N !EVPxZy,uKi%Up4_[\QB~pHG>qemQPp]\Ӂ_ 9qRU~ 6Em&SjU]- Qztog@D=>zV56Ai2RƤt]~`Kղ)LY -BmBQޠoB;pweYX_lmYVZ=EJs*Mїφ_>nYBk4? Cy/p]7LJ7w%;{_}|n9,rF3G%PCiPK!1 WEIb;pೂ#D&lpzĂ6eBeYOnsZPUx&5vm(ـD9-jAz>xN/9Lb¾A@SQxЗ6N^ #߇p$]eE"Գ#zy uL?2i#R⌟i 4G8tkKAs3ZTy4eJ|cIZukmpSo`O¸ev۹SJ&Z ^r $a*jtaʢѝ\Ԋv޻+;pՔgx]"bZx`"`-d =JK,$6$S Rm\ &?puŗ 2,Bfƶw-ȺOП3ɀM־Lc;3Ŋgl ];@tەY@W2Kk؄?[Ďsci9N(d,gGeuʽi/+ 1}fx!J͖7H36$#γmLÇbtS޺~,7)uoc,U0<9W8f[뽀kQ] z$D:PaZrF/Mw958zbM >OI:nΓI(AKD#/L?EXpUx*ROroPP:i¼z5oۊ-ۼsz$} ˍxa`A=.c[A$N)˽ ҧm+ NuKW,\1E70mNJ2gfk%8a6U]aϷ:kȷg,g Wܛ9qBOAfLօL0R^X1~~)zQJ(I$3>sf؞.eH&:b*QaEۢDl@XW4rB-/2Sv/Mttzۢ(э!TM|)UO 5p,|~! ~bw\\G)W>uJ}%jwa#Nl͋߫%} KlF:Zk*o0H*!@Ȓ)H0U}ɁSWOhuUFJ0~\ymF4__>Iv8 q5>uǥ4@ISD:-W FC tc4A쑓I+ˀ/[s3}'g7F}$% X F6OoۈA2=4Y}(WycS_Ԏ@/(9g !-Kd`7 A--~Ja<$h5 PDPL3>f)H`3|J.'C\S#Uk (M @uJi&)*!eݾOhce`Hߪ6;?G͐Ya+ 셸:O9GP#zae MjTQ=OYOv.Lٙn񦓩@ӭ=n'c7s:s|*eH4T纾ȭۍqO!^=&!}3DCy?R`Z\;rxAH [ bi7}'wꖏؐAi*h= @ό hj^i,HT }~fD5Ie, [W~p`-oyXSͅ5 ܂4別'fR{UJXdTo9pXRR)5d&6#~\w %e2h+ֲ )OQ^?;_6%h[l!Ȳ;Q9JNLH_lHr=~2κ= V˿Fdb R[Ur J ]~M7lSshOXV)<{DT˻/%GG_[& {`Wh%lȟRЉMTg>50f)-%{Kӱ0+6P|ltC*>Ec)_iVyzoɰfcž|Ǣ~^k![ȉlN׹Cjʍ%_hXɳ,i#sMBH`QH"D^G;&fLH!eLawA1r3 ,3 駊oDp1gOv%dU'HpdvO4$k{nݰ πmNzAżQʛϴ&hUٳxr-79L kWt9:<9sMJ?% 㿡33, |@xKS7i%B1BF-\vgBؑRPӘhY@Xn²cVTy/Ǎas(n6l(C; @P!Fѭ gکX=ȊV>.ݨd})œ[ JЧ Lf# 6>x8mn/ uO_HIm4 Z*^^IV[=K-p7#xlݑa֕<i-S'/P? 4XtWIF~Ka5D4טsoOnCvjvЯYKR2%vcЕ, *`vU- ֥{ 5-[Dz]%_L]/X'\xxSdcBLVU֟Q҆˰\b\fpQUSX4 qѢ=]4SԢ6^Ӝɇ6QB}4.i_+L*׋.c .> 2=QXp Ef)FBǭ tFϧŃG ׌" h5sDe1rHSiWWwANPJJukDyͪ1yC/>W])(-IL1AtBniV{+kj(nlUۇוeVyABt/v޴sx(˥i( HtP1h1\"שvbN) B$:, ΍ۮ?mLkXO?pHM|A kG)p:d5w z8Gz#9RX)*}t1TRo]y]{ uY$z =!gwPK 430CHT> 6r"D )mU-se`6tuQ/{41B)βrQhXVHha5>DP)izC7Jr2\hJO'Z;KĖjҞ DEP5#yS1m0A͙+H#aB ܹf/ApQ-B^/q~շIH'kA$p'ky3NI~I;Av;:Sx_U):L5Ai%hM} 9HUa^'%᫄- eeS0yAtd?؊_k1OmUP g?U4F^4+$̞ٛ{gA +țFPBaa GOm} HKa{<908ҪVV75pX[1Qo*T4l'[ Ž-Vݹ!GG6D0) DAYJLn0]<IRƬ3 kUJ0C5Oag ܻ$:&yhdhHy9ˡ _؇+O+CYF ,fP3toC[YAg[k<(Qaڎl_j>bmK(:5ԘLjH:;,_Y'l:d2,*c`^]8z82yu xpIf$%+6~u՜Ss Ď|u DH:P;_[zXC$-;̪ s>[I ųLAnŎyXn;e\x9zXv9H3k.ugJfsƁj% jGГS p nx'9Y8S*j  mzmeK$iOx f/lX6ILs-y{,K;w U:'շ_xwmMC/0P g t_n ǐ)3N=eJ}*EjB6H!oٖ#P:rͮ>2.Щla)~#FsN#uWPTo~D=hX?\!t@}4z[ipD sW*w4Y}d/llI$}f&?v` st^4#l%t/S$BN݋ó%P ȸ=F0Ħ@e;ޫE܃% #ͼsvQ+md@цBoBtVhrOp;Ȣ>PQvѶq4ڈUڒAީuOCPBmL؎nsv(^_cLd;7##"s[$$ юkȮbd B+߻Gqú(^>~_e")]vg-qi *"[fKϪm' .pm[P'k=6߇\Y0~Zɐ)ƊVln-< 'l05nҠÍ%!&Pk政>*@X7[V~2W`5|sy ޾m~BZ2~Բ[6bF]{ X[@-2MN ׃U#=Ѯ9^dxalxnr?--˗G*%&.?$Z)lT:dLbL{$QS'ا(r}&Ykނ[08Y| #4j 'S1Z;o P ~o8U#U?́^ŧhWאw4 ` -]ۅX^̕JMM TJ - wؖAU.vXP.sD]w )8n] ;éw)tSf:YY.4 | DZCFvx.0:;g*K4(mEЁ ԑx@XaX%b+iE\"v]b|RI~Z-JqO;𖽧!Z@a7 endstream endobj 54 0 obj << /Length 696 /Filter /FlateDecode >> stream xmTMo0Wx$ ! 8l[jWHL7IPV=M̼ su;Uٛ=w]yil;<[[j<=?׾+v`&ߴț<^*;~&Q>MS >_P{=s@dkx;`VY`s4JaQܡn.Uu9\Y6><ٴ.Z.4>Dӗ}~r:-d0VWk,8yLһʮӮђ[*mLr?q 5F8@=@)& 8Rx uD\j2HV0CzL] bctI g$`htы0\F0s jd< I6zg W qȐ+#k .bsrbmXK7ǵH7Gnb>&jؐu1VljOu$՟qWS/%1{\xB!K(hHTЖ枃Jρϯv=k2UKς_:~$/ ~E+7ˢ/ l(/} -+ZXukoԝE?ZKq endstream endobj 55 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> stream x}UMk0WhFCۖ,{Mlh$73nw҃ͳ,]}{\Olo$ɝиI}s \wwu8{SC߬Y]j7KF½ Q5&z& h<ϯK)ٔ?pݝ2ZkXvm)85];B7gѻ9x~;a`>W'?y:o&> ݋L'/㫃Bnz_7_t|~;:ذƦoiܰ^\0zu\7g"NFsu_E07H6!L@@B@q\s *Tg ]8 i/nTvc-+>c_ZZ~Z83z3[:ޭ ߬Lg3t3-g B|B|\3gg|2?z)BXIAup*^+&#sU-'H8qɼe5A78{Y-7^=!U endstream endobj 57 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ZYs.G7fԝ_= S)E~ 2~}[4v "N'oGQ70j,#z7o;l,j'Ouc׿zr<:Q:XTߙOoGB ;ww ZԲWL)\]W|, MHS"#p #>y| #:##0)%V 55)FњSjR@J]!5w+>7+>S} u B|)W|FL| ,B/^ &+jRP׊C8ƒI\U E'j\2wAsGMMD>Nwq8"妋:9 endstream endobj 58 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rj.RI73W3njNelܬ;WW\?pu4{SlY]jwOusR^u5sx0ֳ0;]nL#;z,gS t;en>r8S0qj>w};B U5gѻ9x};a`TG?y:o&ߏE]&AjZu/?v_t|z;:ذfhkܸ_\zu \7g"NyOܵڿB`ilB =@ )U 9yI(J5<T` M55֜RhR 1ڟS(yq( buX& &q,1+N978Nsk`q8 ^8% FMq.5Sh@kO ׏p$q1/]}/ĩ»p^`D3F?x[a 1ec!/1g)cd?4dK^| МQV1Կ'1t?ƺ9Y?ГrYs֟'g)437YgD3\ib-z3zs ,>G|ZV|ƾ3ֵ33qgng3tZ[Yog,g[3 =L3z/gd ,gz)R؇O5_TTV *M2GZN(:pTy 8kn":qw{Y-7]%# endstream endobj 59 0 obj << /Length 867 /Filter /FlateDecode >> stream x}Un0CƆ"Rjn"73iwWU񛇱='$I}s=}}N=C'u]U;o_ϝ>'eP~&&O''3Hyڝ^ S)E~;en!jأc4qjz( 3F&Vݮ=Ɉ>8~;D>i|#7~_ga}>^=(-P7cjȨW1 kl֏Gsj4s&텻 \݄Wb MLS!"q #u!`Nȩ(( LFUjp49cIMh ,hPE4pbvŢ !\΀Ѹ 8!\=#2:x 1v9/8vӺuSqk4 "nXCI8'ľ&p 2<Wcǘ,_8Ϳ1bxb Ài',ymƌ&Q/kC^،1ۜ1q, Vu 3/d Ͷb l͘S&Ş c,Xu ֟_~CO` ?'>ψ:sh.Xgo\΄rYgBЏ>;gX|&}ggg݉gt3zw3|s3߉YX/gKzJrg^od ,gz)R؇O5_qTԼV j M2GFN(:pTy 8kn":qz~Y[rbtDn endstream endobj 60 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn" W3nj<4nV~ߝoGM?k]{7[7rSmtɛy=TCA:fzgdf)OS`)?>RTC)s}`ݵeDcc0qj~?t 3&TdDBmq`TG?9N CC? F`RޗS/~g> ilXcӷn<7,^e]׵͙Ssu_U4H6!L@@B@q\s *Cn!>_33/>?㓁EK!c?RMO #SZ1|8Gxp4aj9DQK.h ljeuOȢnE}MA endstream endobj 61 0 obj << /Length 866 /Filter /FlateDecode >> stream x}UMo0+J! ᫊"Rjn"B73W3njehܬ;WWU\8׺v=ߩonTtƓ7]ziTCA:fzg 4R㫧~R~J}6O7}w̭uזSIе(TPfw۷莛n˥?8ޛ`~?n8t/3NbV+պ};:5wɩƆ56}Χ]]₥+U9q~=W(_KdR$| 4hd52HHNsL FU*q8cMMh QEk%RWp gn~ȋCam `42W0A/c9^'-pʹ)pq[[i])9^W5js7 Gb_#xb~ ' ˏ1}cLu'No ޅ0&1Ie76Z cx-~`& y%Q?K'!/h],KV0d 1էM=Ռ3g1Y ~i?'?!>L9g)q:#eNC?lыѣc`83ֲ3#>w+>Cӊ݊͊T_|~+>Cg!>cB|/g)g{!>_|&~'a9K!B>,TGbPq> stream x}TMo0+J6*ħöUSEj9߯ IVcf͏睟ݛ{)^؝}]u:vzyu|CW$nmmΑmq5)M{`qjS5NJJWG> endobj 11 0 obj << /Type /ObjStm /N 40 /First 297 /Length 2136 /Filter /FlateDecode >> stream xY[S9~NMjݥTq3 NH162~#m ݗTi;IݒLQL t'tLJf\@?N0iӖIͼ-YX@L i S *~ *ヱL9tp 2Ҋi`L0#QPbY@J Yãժ l 3 M4y p9U0gQQ {Ż%GŷFi9VL-~\VEY᰼6G@>y 'GIߢׯSz5@Z  /k>0{G^m1ARCOc4J+& =ۃjۺ%(\䓌6d֑d c#_ACNQhҷQw|Z'IAOnC4RT[4TOSݲlI y$fɩvraWtĞpvEE%7$nZNY_N>3M=gPgHrBD 7$ZswTc'U ^m2c 0c3$m0D1py/DHD.6xyMzu8ՖٺEQxlM@c@,Y@QK)CRI+y|\ݟ4Z,"sHq1DM]ԞTIF/ѐۍ1afIF!+ZJ|K%.R -H /ION쌦SRpJ2 /\<%IC5QoE-4' 5e gs$H涍\?)/ړƼj'zkP[0ǥHczb&,@G%}Ueu1鏧I:Ŀݢg븻(1]WL'x'x${EnQhllTt3[^ٿW-NP+Aޠ1hAɴ}uQZ (MK Slw?f.f%3SlxԔ]oGÒUNFUXǪч_O:,1LJ-`  "LܲC~G|' :nl98LJ#ҋ)`BK@  wx}~ď fUǿxŚ_~m|SyNMc>K&nBq9.n4-S)LʒO;7jNu\c6\>rC.׋ A˿~'GGloufd;|iIaVwM/3|ҢB5l](m֓wVEaT^!{Ko]6GV:eV [.?^uO,ԛdkr4Qo][zZW'_>(*vJ|z٢4H9X~,̥4k;A߉,,VN7cj#/qR۱RΫs"7 Z%`˅ujЫnv?WW%ѫ3a!S?0p>SצՃf} K]4 >!ɒhe7E z3"99|'ywi:-?b^"D#ƙNH{Q¶6RSfu,c?_]nOHX/WI[NRMi]0W?a9Y ydO3l`tƊƬf蹄G-q.Ã1 @G_e7B4B>գBS@>Яp4pe h#n=0p DhVօj.'b};B|iÐG9,J Э|`}_N\ψ25ʸ V'u+˾NbRy 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 [ ] /Length 204 /Filter /FlateDecode >> stream x1oas^UJURR 0mX M?M7#X4v}]ͽpr@Pœx,n mWaqF$>lWqNK](X1q/R$ĕHk_ohZw *G6VdcfuG~Y{5fy:n?x^=o ~$ endstream endobj startxref 152640 %%EOF survey/inst/doc/pps.R0000644000176200001440000000357215147136372014276 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.Rnw0000644000176200001440000002362211457435610014611 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/survey-sae.html0000644000176200001440000121625015147136361016340 0ustar liggesusers Area level and unit level models for estimating small area means

Area level and unit level models for estimating small area means

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

Preliminary

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

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